pax_global_header00006660000000000000000000000064126304132750014515gustar00rootroot0000000000000052 comment=d7a7e8542626aa743b3a3c44fbeafa537fe7172c dipy-0.10.1/000077500000000000000000000000001263041327500125415ustar00rootroot00000000000000dipy-0.10.1/.coveragerc000066400000000000000000000001131263041327500146550ustar00rootroot00000000000000[run] branch = True source = dipy include = */dipy/* omit = */setup.py dipy-0.10.1/.gitattributes000066400000000000000000000000421263041327500154300ustar00rootroot00000000000000dipy/COMMIT_INFO.txt export-subst dipy-0.10.1/.gitignore000066400000000000000000000003511263041327500145300ustar00rootroot00000000000000*.pyc *.pyd *.so *.c *.cpp *.png *.gz *.dpy *.npy *.img *.hdr *.mat *.pkl *.orig build *~ doc/_build doc/*-stamp MANIFEST dist/ .project .pydevproject *.sw[po] dipy.egg-info/ nibabel*egg/ pyx-stamps __config__.py .DS_Store .coverage dipy-0.10.1/.mailmap000066400000000000000000000043671263041327500141740ustar00rootroot00000000000000Ariel Rokem arokem Ariel Rokem arokem Bago Amirbekian Bago Amirbekian Bago Amirbekian Bago Amirbekian Bago Amirbekian Bago Amirbekian Bago Amirbekian MrBago Bago Amirbekian MrBago Maxime Descoteaux mdesco Maxime Descoteaux mdesco Stefan van der Walt Stefan van der Walt Christopher Nguyen Christopher Christopher Nguyen Christopher Nguyen Eleftherios Garyfallidis Dipy Developers Eleftherios Garyfallidis Eleftherios Garyfallidis Eleftherios Garyfallidis Eleftherios Garyfallidis Eleftherios Garyfallidis Eleftherios Garyfallidis Emanuele Olivetti Emanuele Olivetti Ian Nimmo-Smith Ian Nimmo-Smith Ian Nimmo-Smith iannimmosmith Ian Nimmo-Smith Ian Nimmo-Smith Matthew Brett Matthew Brett Omar Ocegueda omarocegueda Sylvain Merlet smerlet Mauro Zucchelli Mauro Andrew Lawrence AndrewLawrence Samuel St-Jean samuelstjean Samuel St-Jean samuelstjean Samuel St-Jean samuelstjean dipy-0.10.1/.travis.yml000066400000000000000000000054041263041327500146550ustar00rootroot00000000000000# vim ft=yaml # Multiple lines can be made a single "virtual line" because of the way that # Travis munges each line before executing it to print out the exit status. # It's okay for it to be on multiple physical lines, so long as you remember: # - There can't be any leading "-"s - All newlines will be removed, so use # ";"s sudo: false # To use travis container infrastructure language: python cache: directories: - $HOME/.cache/pip env: global: - DEPENDS="cython numpy scipy matplotlib h5py nibabel cvxopt" - VENV_ARGS="--python=python" python: - 2.6 - 3.2 - 3.3 - 3.4 - 3.5 matrix: include: - python: 2.7 env: - COVERAGE=1 # To test minimum dependencies - python: 2.7 env: - COVERAGE=1 - DEPENDS="cython==0.18 numpy==1.7.1 scipy==0.9.0 nibabel==1.2.0" - python: 2.7 env: - DEPENDS="cython numpy scipy matplotlib h5py nibabel cvxopt scikit_learn" # To test vtk functionality - python: 2.7 sudo: true # This is set to true for apt-get env: - VTK=1 - VTK_VER="python-vtk" - LIBGL_ALWAYS_INDIRECT=y - VENV_ARGS="--system-site-packages --python=/usr/bin/python2.7" - TEST_WITH_XVFB=true - python: 2.7 sudo: true # This is set to true for apt-get env: - VTK=1 - VTK_VER="python-vtk6" - LIBGL_ALWAYS_INDIRECT=y - VENV_ARGS="--system-site-packages --python=/usr/bin/python2.7" - TEST_WITH_XVFB=true before_install: - source tools/travis_tools.sh - virtualenv $VENV_ARGS venv - source venv/bin/activate - python --version # just to check # Needed for Python 3.5 wheel fetching - pip install -U pip - retry pip install nose; - wheelhouse_pip_install $DEPENDS; - if [ "${COVERAGE}" == "1" ]; then pip install coverage; pip install coveralls; fi - if [ "${VTK}" == "1" ]; then sudo apt-get update; sudo apt-get install -y $VTK_VER; sudo apt-get install -y xvfb; sudo apt-get install -y python-tk; sudo apt-get install -y python-imaging; retry pip install xvfbwrapper; fi install: - python setup.py install # command to run tests, e.g. python setup.py test script: # Change into an innocuous directory and find tests from installation - mkdir for_testing - cd for_testing # No figure windows for mpl; quote to hide : from travis-ci yaml parsing - 'echo "backend : agg" > matplotlibrc' - if [ "${COVERAGE}" == "1" ]; then cp ../.coveragerc .; COVER_ARGS="--with-coverage --cover-package dipy"; fi - nosetests --with-doctest --verbose $COVER_ARGS dipy after_success: - if [ "${COVERAGE}" == "1" ]; then coveralls; fi dipy-0.10.1/AUTHOR000066400000000000000000000024431263041327500134710ustar00rootroot00000000000000Eleftherios Garyfallidis Ian Nimmo-Smith Matthew Brett Bago Amirbekian Stefan Van der Walt Ariel Rokem Christopher Nguyen Yaroslav Halchenko Emanuele Olivetti Mauro Zucchelli Samuel St-Jean Maxime Descoteaux Gabriel Girard Matthieu Dumont Kimberly Chan Erik Ziegler Emmanuel Caruyer Matthias Ekman Jean-Christophe Houde Michael Paquette Sylvain Merlet Omar Ocegueda Marc-Alexandre Cote Demian Wassermann endolith Andrew Lawrence Gregory R. Lee Maria Luisa Mandelli Kesshi jordan Chantal Tax Qiyuan Tian dipy-0.10.1/Changelog000066400000000000000000000105671263041327500143640ustar00rootroot00000000000000.. -*- mode: rst -*- .. vim:syntax=rest .. _changelog: Dipy Development Changelog ----------------------------- Dipy is a diffusion MR imaging library written in Python 'Close gh-' statements refer to GitHub issues that are available at:: http://github.com/nipy/dipy/issues The full VCS changelog is available here: http://github.com/nipy/dipy/commits/master Releases ~~~~~~~~ Dipy ++++ The code found in Dipy was created by the people found in the AUTHOR file. * 0.10.1 (Friday, December 2nd, 2015) * Compatibility with new versions of scipy (0.16) and numpy (1.10). * New cleaner visualization API, including compatibility with VTK 6, and functions to create your own interactive visualizations. * Diffusion Kurtosis Imaging(DKI) * Mean Apparent Propagator (MAP) * Anisotropic Power Maps from spherical harmonic coefficients. * Affine registration. * 0.9.2 (Wednesday, 18 March 2015) * Anatomically Constrained Tissue Classifiers for Tracking * Massive speedup of Constrained Spherical Deconvolution (CSD) * Recursive calibration of response function for CSD * New experimental framework for clustering * Improvements and 10X speedup for Quickbundles * Improvements in Linear Fascicle Evaluation (LiFE) * New implementation of Geodesic Anisotropy * New efficient transformation functions for registration * Sparse Fascicle Model supports acquisitions with multiple b-values * 0.8.0 (Tuesday, 6 Jan 2015) * Nonlinear Image-based Registration (SyN) * Streamline-based Linear Registration (SLR) * Linear Fascicle Evaluation (LiFE) * Cross-validation for reconstruction models * Sparse Fascicle Model (SFM) * Non-local means denoising (NLMEANS) * New modular tracking machinery * Closed 388 issues and merged 155 pull requests * A variety of bug-fixes and speed improvements * 0.7.1 (Thursday, 16 Jan 2014) * Made installing Dipy easier and more universal * Fixed automated seeding problems for tracking * Removed default parameter for odf_vertices in EuDX * 0.7.0 (Monday, 23 Dec 2013) * Constrained Spherical Deconvolution (CSD) * Simple Harmonic Oscillator based Reconstruction and Estimation (SHORE) * Sharpening Deconvolution Transform (SDT) * Signal-to-noise ratio estimation * Parallel processing enabled for all reconstruction models using `peaks_from_model` * Simultaneous peak and ODF visualization * Streamtube visualization * Electrostatic repulsion for sphere generation * Connectivity matrices and density maps * Streamline filtering through specific ROIs using `target` * Brain extraction and foreground extraction using `median_otsu` * RESTORE fitting for DTI * Westin's Tensor maps * Access to more publicly available datasets directly through Dipy functions. * 3x more tutorials than previous release * 0.6.0 (Sunday, 24 Mar 2013) * Cython 0.17+ enforced * New reconstruction models API * Diffusion Spectrum Imaging (DSI) * DSI with deconvolution * Generalized Q-sampling Imaging 2 (GQI2) * Modular fiber tracking * deterministic * probabilistic * Fast volume indexing (a faster ndindex) * Spherical Harmonic Models * Opdt (Tristan-Vega et. al) * CSA odf (Aganj et. al) * Analytical Q-ball (Descoteaux et. al) * Tuch's Q-ball (Tuch et. al) * Visualization of spherical functions * Peak finding in odfs * Non-linear peak finding * Sphere Object * Gradients Object * 2D sphere plotting * MultiTensor and Ball & Sticks voxel simulations * Fetch/Download data for examples * Software phantom generation * Angular similarity for comparisons between multiple peaks * SingleVoxelModel to MultiVoxelModel decorator * Mrtrix and fibernavigator SH bases * More Benchmarks * More Tests * Color FA and other Tensor metrics added * Scripts for the ISBI 2013 competition * Fit_tensor script added * Radial basis function interpolation on the sphere * New examples/tutorials * 0.5.0 (Friday, 11 Feb 2011) * Initial release. * Reconstruction algorithms e.g. GQI, DTI * Tractography generation algorithms e.g. EuDX * Intelligent downsampling of tracks * Ultra fast tractography clustering * Resampling datasets with anisotropic voxels to isotropic * Visualizing multiple brains simultaneously * Finding track correspondence between different brains * Reading many different file formats e.g. Trackvis or Nifti * Dealing with huge tractographies without memory restrictions * Playing with datasets interactively without storing * And much more and even more to come in next releases dipy-0.10.1/LICENSE000066400000000000000000000032061263041327500135470ustar00rootroot00000000000000Unless otherwise specified by LICENSE.txt files in individual directories, or within individual files or functions, all code is: Copyright (c) 2008-2015, dipy developers 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. * Neither the name of the dipy developers nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. 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 OWNER 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. dipy-0.10.1/MANIFEST.in000066400000000000000000000007021263041327500142760ustar00rootroot00000000000000include AUTHOR LICENSE Makefile* MANIFEST.in setup* README.* include Changelog TODO recursive-include doc * recursive-include bin * recursive-include tools * recursive-include src * # setup utilities include setup_helpers.py include cythexts.py recursive-include fake_pyrex * # put this stuff back into setup.py (package_data) once I'm enlightened # enough to accomplish this herculean task recursive-include dipy/data * include dipy/COMMIT_INFO.txt dipy-0.10.1/Makefile000066400000000000000000000070671263041327500142130ustar00rootroot00000000000000# Simple makefile to quickly access handy build commands for Cython extension # code generation. Note that the actual code to produce the extension lives in # the setup.py file, this Makefile is just meant as a command # convenience/reminder while doing development. PYTHON ?= python PKGDIR=dipy DOCSRC_DIR=doc DOCDIR=${PKGDIR}/${DOCSRC_DIR} TESTDIR=${PKGDIR}/tests help: @echo "Numpy/Cython tasks. Available tasks:" @echo "ext -> build the Cython extension module." @echo "cython-html -> create annotated HTML from the .pyx sources" @echo "test -> run a simple test demo." @echo "all -> Call ext, html and finally test." all: ext cython-html test ext: recspeed.so propspeed.so vox2track.so \ distances.so streamlinespeed.so denspeed.so \ vec_val_sum.so quick_squash.so vector_fields.so \ crosscorr.so sumsqdiff.so expectmax.so bundlemin.so \ cythonutils.so featurespeed.so metricspeed.so \ clusteringspeed.so clustering_algorithms.so test: ext nosetests . cython-html: ${PKGDIR}/reconst/recspeed.html ${PKGDIR}/tracking/propspeed.html ${PKGDIR}/tracking/vox2track.html ${PKGDIR}/tracking/distances.html ${PKGDIR}/tracking/streamlinespeed.html ${PKGDIR}/segment/cythonutils.html ${PKGDIR}/segment/featurespeed.html ${PKGDIR}/segment/metricspeed.html ${PKGDIR}/segment/clusteringspeed.html ${PKGDIR}/segment/clustering_algorithms.html recspeed.so: ${PKGDIR}/reconst/recspeed.pyx cythonutils.so: ${PKGDIR}/segment/cythonutils.pyx featurespeed.so: ${PKGDIR}/segment/featurespeed.pyx metricspeed.so: ${PKGDIR}/segment/metricspeed.pyx clusteringspeed.so: ${PKGDIR}/segment/clusteringspeed.pyx clustering_algorithms.so: ${PKGDIR}/segment/clustering_algorithms.pyx propspeed.so: ${PKGDIR}/tracking/propspeed.pyx vox2track.so: ${PKGDIR}/tracking/vox2track.pyx distances.so: ${PKGDIR}/tracking/distances.pyx streamlinespeed.so: ${PKGDIR}/tracking/streamlinespeed.pyx denspeed.so: ${PKGDIR}/denoise/denspeed.pyx vec_val_sum.so: ${PKGDIR}/reconst/vec_val_sum.pyx quick_squash.so: ${PKGDIR}/reconst/quick_squash.pyx vector_fields.so: ${PKGDIR}/align/vector_fields.pyx crosscorr.so: ${PKGDIR}/align/crosscorr.pyx sumsqdiff.so: ${PKGDIR}/align/sumsqdiff.pyx expectmax.so: ${PKGDIR}/align/expectmax.pyx bundlemin.so: ${PKGDIR}/align/bundlemin.pyx $(PYTHON) setup.py build_ext --inplace # Phony targets for cleanup and similar uses .PHONY: clean clean: - find ${PKGDIR} -name "*.so" -print0 | xargs -0 rm - find ${PKGDIR} -name "*.pyd" -print0 | xargs -0 rm - find ${PKGDIR} -name "*.c" -print0 | xargs -0 rm - find ${PKGDIR} -name "*.html" -print0 | xargs -0 rm rm -rf build rm -rf docs/_build rm -rf docs/dist rm -rf dipy/dipy.egg-info distclean: clean rm -rf dist # Suffix rules %.c : %.pyx cython $< %.html : %.pyx cython -a $< # Check for files not installed check-files: $(PYTHON) -c 'from nisext.testers import check_files; check_files("dipy")' # Print out info for possible install methods check-version-info: $(PYTHON) -c 'from nisext.testers import info_from_here; info_from_here("dipy")' # Run tests from installed code installed-tests: $(PYTHON) -c 'from nisext.testers import tests_installed; tests_installed("dipy")' # Run tests from installed code sdist-tests: $(PYTHON) -c 'from nisext.testers import sdist_tests; sdist_tests("dipy")' bdist-egg-tests: $(PYTHON) -c 'from nisext.testers import bdist_egg_tests; bdist_egg_tests("dipy")' source-release: clean $(PYTHON) -m compileall . $(PYTHON) setup.py sdist --formats=gztar,zip binary-release: clean $(PYTHON) setup_egg.py bdist_egg build-stamp-source: $(PYTHON) -c 'import cythexts; cythexts.build_stamp_source()' dipy-0.10.1/README.rst000066400000000000000000000021561263041327500142340ustar00rootroot00000000000000====== DIPY ====== DIPY is a python toolbox for analysis of MR diffusion imaging. DIPY is for research only; please do not use results from DIPY for clinical decisions. Website ======= Current information can always be found from the DIPY website - http://dipy.org Mailing Lists ============= Please see the developers' list at https://mail.python.org/mailman/listinfo/neuroimaging Please see the users' forum at https://neurostars.org Code ==== You can find our sources and single-click downloads: * `Main repository`_ on Github. * Documentation_ for all releases and current development tree. * Download as a tar/zip file the `current trunk`_. .. _main repository: http://github.com/nipy/dipy .. _Documentation: http://dipy.org .. _current trunk: http://github.com/nipy/dipy/archives/master License ======= DIPY is licensed under the terms of the BSD license. Please see the LICENSE file in the dipy distribution. DIPY uses other libraries also licensed under the BSD or the MIT licenses, with the only exception of the SHORE module which optionally uses the cvxopt library. Cvxopt is licensed under the GPL license. dipy-0.10.1/bin/000077500000000000000000000000001263041327500133115ustar00rootroot00000000000000dipy-0.10.1/bin/dipy_fit_tensor000077500000000000000000000102231263041327500164360ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import division, print_function, absolute_import import os import numpy as np import nibabel as nib from subprocess import check_call, CalledProcessError from optparse import OptionParser from dipy.core.gradients import gradient_table from dipy.reconst.dti import TensorModel from dipy.io.utils import nifti1_symmat from dipy.io.bvectxt import read_bvec_file, orientation_to_string from nibabel.trackvis import empty_header, write usage = """fit_tensor [options] dwi_images""" parser = OptionParser(usage) parser.add_option("-b","--bvec",help="text file with gradient directions") parser.add_option("-r","--root",help="root for files to be saved") parser.add_option("-m","--mask",default="BET", help="use BET by default, --mask=none to not use mask") parser.add_option("--threshold",help="threshold passed to BET", default='.2') parser.add_option("--min_signal",help="minimum valid singal value", type='float', default=1.) parser.add_option("--save-tensor", action='store_true', help="Save tensor in " "nifti symmat format") parser.add_option("--scale", type='float', default=1., help="used to scale " "tensor file when --save-tensor is used") opts, args = parser.parse_args() def dipysave(img, filename): """Some DTI/tools require the qform code to be 1. We set the affine, qform, and sfrom to be the same for maximum portibility. """ affine = img.get_affine() img.set_sform(affine, 1) img.set_qform(affine, 1) nib.save(img, filename) if len(args) != 1: parser.print_help() parser.exit(2) dwi_file = args[0] gzip_exts = set([".gz"]) if opts.root is None: pth, file = os.path.split(dwi_file) root, ext = os.path.splitext(dwi_file) if ext.lower() in gzip_exts: root, _ = os.path.splitext(root) root = os.path.join(pth, root) else: root = opts.root if opts.bvec is None: bvec = root+'.bvec' else: bvec = opts.bvec img = nib.load(dwi_file) affine = img.get_affine() voxel_size = img.get_header().get_zooms()[:3] data = img.get_data() bvec, bval = read_bvec_file(bvec) gtab = gradient_table(bval, bvec) t2di = data[..., gtab.b0s_mask].mean(-1) t2di = np.asarray(t2di, 'float32') dipysave(nib.Nifti1Image(t2di, affine), root+'_t2di.nii.gz') del t2di mask = opts.mask if mask == 'BET': mask_file = root + '_mask.nii.gz' env = os.environ env['FSLOUTPUTTYPE'] = 'NIFTI_GZ' try: check_call(['bet2', root+'_t2di', root, '-n', '-f', opts.threshold, '-m'], env=env) mask = mask_file except (OSError, CalledProcessError): mask = None elif mask.lower() == 'none': mask = None if mask is not None: mask = nib.load(mask).get_data() > 0 else: mask = np.ones(data.shape[:-1], dtype=bool) ten_model = TensorModel(gtab, min_signal=opts.min_signal) ten = ten_model.fit(data, mask=mask) if opts.save_tensor: lower_triangular = ten.lower_triangular() lower_triangular *= opts.scale lower_triangular = lower_triangular.astype('float32') tensor_img = nifti1_symmat(lower_triangular, affine) dipysave(tensor_img, root+'_tensor.nii.gz') del tensor_img, lower_triangular dipysave(nib.Nifti1Image(ten.ad.astype("float32"), affine), root+'_ad.nii.gz') dipysave(nib.Nifti1Image(ten.rd.astype("float32"), affine), root+'_rd.nii.gz') dipysave(nib.Nifti1Image(ten.md.astype("float32"), affine), root+'_md.nii.gz') dipysave(nib.Nifti1Image(ten.fa.astype("float32"), affine), root+'_fa.nii.gz') dfa = np.abs(ten.fa[..., None] * ten.evecs[..., 0]) dfa *= 256*(1.-np.finfo(float).eps) assert dfa.max() < 256 assert dfa.min() >= 0 dfa = dfa.astype('uint8') dtype = [('R', 'uint8'), ('G', 'uint8'), ('B', 'uint8')] dfa = dfa.view(dtype) dfa.shape = dfa.shape[:-1] dipysave(nib.Nifti1Image(dfa, affine), root+'_dirFA.nii.gz') trk_hdr = empty_header() trk_hdr['voxel_order'] = orientation_to_string(nib.io_orientation(affine)) trk_hdr['dim'] = ten.shape trk_hdr['voxel_size'] = voxel_size trk_hdr['vox_to_ras'] = affine # One streamline with two points at [0, 0, 0] dummy_track = [(np.zeros((2,3), dtype='float32'), None, None)] write(root+'_dummy.trk', dummy_track, trk_hdr) dipy-0.10.1/bin/dipy_peak_extraction000077500000000000000000000071701263041327500174510ustar00rootroot00000000000000#! /usr/bin/env python import nibabel as nib import numpy as np from dipy.fixes import argparse from dipy.core.ndindex import ndindex from dipy.direction.peaks import peak_directions from dipy.core.sphere import Sphere def peak_extraction(odfs_file, sphere_vertices_file, out_file, relative_peak_threshold=.25, peak_normalize=1, min_separation_angle=45., max_peak_number=5): in_nifti = nib.load(odfs_file) refaff = in_nifti.get_affine() odfs = in_nifti.get_data() vertices = np.loadtxt(sphere_vertices_file) sphere = Sphere(xyz=vertices) num_peak_coeffs = max_peak_number * 3 peaks = np.zeros(odfs.shape[:-1] + (num_peak_coeffs,)) for index in ndindex(odfs.shape[:-1]): vox_peaks, values, _ = peak_directions(odfs[index], sphere, float(relative_peak_threshold), float(min_separation_angle)) if peak_normalize == 1: values /= values[0] vox_peaks = vox_peaks * values[:, None] vox_peaks = vox_peaks.ravel() m = vox_peaks.shape[0] if m > num_peak_coeffs: m = num_peak_coeffs peaks[index][:m] = vox_peaks[:m] peaks_img = nib.Nifti1Image(peaks.astype(np.float32), refaff) nib.save(peaks_img, out_file) def buildArgsParser(): description = 'Extract Peak Directions from Spherical function.' p = argparse.ArgumentParser(description=description, formatter_class=argparse.RawTextHelpFormatter) p.add_argument(action='store', dest='spherical_functions_file', help='Input nifti file representing the orientation ' 'distribution function.') p.add_argument(action='store', dest='sphere_vertices_file', help="""Sphere vertices in a text file (Nx3) x1 x2 x3 ... xN yN zN""") p.add_argument(action='store', dest='out_file', type=str, help='Output nifti file with the peak directions.') p.add_argument('-t', '--peak_threshold', action='store',type=float, dest='peak_thresh', metavar='float', required=False, default=0.5, help='Relative peak threshold (default 0.5)') p.add_argument('-n', '--peak_normalize', action='store', dest='peak_norm', type=int, metavar='int', required=False, default=1, help='Normalize peaks according to spherical function ' 'value (default 1)') p.add_argument('-a', '--angle', action='store', dest='angle', type=float, metavar='float', required=False, default=25.0, help='Minimum separation angle (default 25 degrees)') p.add_argument('-m', '--max_peak_number', action='store', type=int, dest='max_peak_num', metavar='int', required=False, default=5, help='Maximum number of peaks found (default 5 peaks)') return p def main(): parser = buildArgsParser() args = parser.parse_args() spherical_functions_file = args.spherical_functions_file sphere_vertices_file = args.sphere_vertices_file out_file = args.out_file peak_thresh = args.peak_thresh peak_norm = args.peak_norm max_peak_num = args.max_peak_num angle = args.angle peak_extraction(spherical_functions_file, sphere_vertices_file, out_file, relative_peak_threshold=peak_thresh, peak_normalize=int(peak_norm), min_separation_angle=angle, max_peak_number=int(max_peak_num)) if __name__ == "__main__": main() dipy-0.10.1/bin/dipy_quickbundles000077500000000000000000000134431263041327500167620ustar00rootroot00000000000000#! /usr/bin/env python from dipy.fixes import argparse as arg import os import warnings import dipy.io.pickles as pkl import numpy as np import scipy.io as sio from nibabel import trackvis import dipy.segment.quickbundles as qb parser = arg.ArgumentParser(description='Segment a fiber-group into clusters using the QuickBundles algorithm (Garyfallidis et al. 2012)') parser.add_argument('in_file', action='store', metavar='File', help='Trackvis fiber file (.trk) or Vistasoft fiber-group file (.mat)') parser.add_argument('--dist_thr', action='store', metavar='Float', help='Distance threshold (default: 30.)', default=30.) parser.add_argument('--pts', action='store', metavar='Int', help='Points (default: 12)', default=12) parser.add_argument('--pkl_file', action='store', metavar='File', help='Whether to save a QB object in pickle format. Provide full path to the file name (default: none)') parser.add_argument('--out_file', action='store', metavar='File', help='Full path to the output file name (defaults to the same location as the original input file') params = parser.parse_args() if __name__ == "__main__": def gimme_clusters(streamlines, th, pts): bundles = qb.QuickBundles(streamlines, dist_thr=th, pts=pts) return bundles, bundles.clusters(), bundles.centroids fname_orig = params.in_file split = os.path.splitext(fname_orig) if params.in_file.endswith('.trk'): tracks, hdr = trackvis.read(params.in_file) streamlines = [fibers[0] for fibers in tracks] bundles, clusters, centroids = gimme_clusters(streamlines, np.float(params.dist_thr), np.int(params.pts)) for c in clusters: new_streamlines = [(s, None, None) for s in np.array(streamlines)[clusters[c]['indices']]] if params.out_file: this_split = params.out_file.split('.') out_fname_clust = this_split[0] + '_%s'%(c + 1) + '.trk' else: out_fname_clust = split[0] + '_%s'%(c + 1) + split[1] trackvis.write(out_fname_clust, new_streamlines, hdr) if params.out_file: this_split = params.out_file.split('.') out_fname_cent = this_split[0] + '_centroids' + '.trk' else: out_fname_cent = split[0] + '_centroids' + split[1] trackvis.write(out_fname_cent, [(s, None, None) for s in centroids], hdr) elif params.in_file.endswith('.mat'): # Once read this as a mat-object fg_mat = sio.loadmat(params.in_file, struct_as_record=False, squeeze_me=True) # So that you can painlessly get the fiber-group: fg = fg_mat['fg'] # And once as a non-struct, so that you can use this later to pass back # to savemat: fg_mat_clust = sio.loadmat(params.in_file, squeeze_me=True) fg_mat_cent = sio.loadmat(params.in_file, squeeze_me=True) name_orig = fg.name fibers = fg.fibers streamlines = np.array([np.array(ff).T for ff in fibers]) bundles, clusters, centroids = gimme_clusters(streamlines, np.float(params.dist_thr), np.int(params.pts)) # We will give each cluster a different random RGB color: cmap_arr = np.random.rand(len(clusters), 3) # We prepare a struct array to assign into with the original dtype: dt = [('name', 'O'), ('colorRgb', 'O'), ('thickness', 'O'), ('visible', 'O'), ('seeds', 'O'), ('seedRadius', 'O'), ('seedVoxelOffsets', 'O'), ('params', 'O'), ('fibers', 'O'), ('query_id', 'O')] cluster_arr = np.empty(len(clusters), dtype=dt) centroid_arr = np.empty(len(clusters), dtype=dt) for c in clusters: ff = streamlines[clusters[c]['indices']] new_fibers = np.empty(len(ff), dtype=object) for f in range(new_fibers.shape[0]): new_fibers[f] = ff[f].T cluster_arr[c]['fibers'] = new_fibers cluster_arr[c]['colorRgb']=\ np.array(cmap_arr[c]).astype(np.float).reshape(1,3) cluster_arr[c]['name'] = str(name_orig) + '_%s'%(c + 1) centroid_arr[c]['fibers'] = centroids[c].T centroid_arr[c]['colorRgb']=\ np.array(cmap_arr[c]).astype(np.float).reshape(1,3) for d in dt: if cluster_arr[c][d[0]] is None: cluster_arr[c][d[0]] = fg_mat_clust['fg'][d[0]] if centroid_arr[c][d[0]] is None: centroid_arr[c][d[0]] = fg_mat_cent['fg'][d[0]] fg_mat_clust['fg'] = cluster_arr fg_mat_cent['fg'] = centroid_arr with warnings.catch_warnings(): warnings.simplefilter("ignore") if params.out_file: out_fname_clust = params.out_file + '_cluster.mat' out_fname_cent = params.out_file + '_centroids.mat' else: out_fname_clust = split[0] + '_cluster.mat' out_fname_cent = split[0] + '_centroids.mat' sio.savemat(out_fname_cent, fg_mat_cent) sio.savemat(out_fname_clust, fg_mat_clust) else: raise ValueError('Unrecognized file-format') if params.pkl_file: pkl.save_pickle(params.pkl_file, bundles) dipy-0.10.1/bin/dipy_sh_estimate000077500000000000000000000040511263041327500165710ustar00rootroot00000000000000#! /usr/bin/env python import nibabel as nib import numpy as np from dipy.fixes import argparse from dipy.reconst.shm import sf_to_sh from dipy.core.sphere import Sphere def sh_estimate(sphere_file, directions_file, out_file, rank=8, smoothness=0.0): in_nifti = nib.load(sphere_file) refaff = in_nifti.get_affine() data = in_nifti.get_data() vertices = np.loadtxt(directions_file) sphere = Sphere(xyz=vertices) odf_sh = sf_to_sh(data, sphere, int(rank), "mrtrix", np.float(smoothness)) sh_out = nib.Nifti1Image(odf_sh.astype(np.float32), refaff) nib.save(sh_out, out_file) DESCRIPTION = 'Spherical harmonics (SH) estimation from a sampled '\ 'spherical function.' def buildArgsParser(): p = argparse.ArgumentParser(description=DESCRIPTION, formatter_class=argparse.RawTextHelpFormatter) p.add_argument(action='store', dest='sphere_file', help='Input nifti file representing the spherical function\n' 'on N vertices.') p.add_argument(action='store', dest='directions_file', help="""Sphere vertices in a text file (Nx3) x1 x2 x3 ... xN yN zN""") p.add_argument(action='store', dest='out_file', help='Output nifti file.') p.add_argument('-n', '--order', action='store', dest='rank', metavar='int', required=False, default=8, help='Maximum SH order of estimation (default 8)') p.add_argument('-l', '--lambda', action='store', dest='smoothness', metavar='float', required=False, default=0.0, help='Laplace-Beltrami regularization (default 0.0)') return p def main(): parser = buildArgsParser() args = parser.parse_args() sphere_file = args.sphere_file directions_file = args.directions_file out_file = args.out_file rank = args.rank smoothness = args.smoothness sh_estimate(sphere_file, directions_file, out_file, rank, smoothness) if __name__ == "__main__": main() dipy-0.10.1/bin/dipy_tracking_gui000077500000000000000000000010031263041327500167240ustar00rootroot00000000000000#!/usr/bin/env python import sys import pickle from dipy.tracking.gui_tools import gui_track from dipy.tracking.interfaces import ShmTrackingInterface w = ShmTrackingInterface() if len(sys.argv) == 2: input = sys.argv[1] if input[-2:] == '.p': w = pickle.load(open(input,'rb')) try: gui_track(w) sys.exit(0) except AttributeError: raise ValueError('this track was not created using the gui') else: execfile(sys.argv[1]) gui_track(w) dipy-0.10.1/cythexts.py000066400000000000000000000247361263041327500150020ustar00rootroot00000000000000import os from os.path import splitext, sep as filesep, join as pjoin, relpath from hashlib import sha1 from subprocess import check_call from distutils.command.build_ext import build_ext from distutils.command.sdist import sdist from distutils.version import LooseVersion def derror_maker(klass, msg): """ Decorate distutils class to make run method raise error """ class K(klass): def run(self): raise RuntimeError(msg) return K def stamped_pyx_ok(exts, hash_stamp_fname): """ Check for match of recorded hashes for pyx, corresponding c files Parameters ---------- exts : sequence of ``Extension`` distutils ``Extension`` instances, in fact only need to contain a ``sources`` sequence field. hash_stamp_fname : str filename of text file containing hash stamps Returns ------- tf : bool True if there is a corresponding c file for each pyx or py file in `exts` sources, and the hash for both the (pyx, py) file *and* the c file match those recorded in the file named in `hash_stamp_fname`. """ # Calculate hashes for pyx and c files. Check for presence of c files. stamps = {} for mod in exts: for source in mod.sources: base, ext = splitext(source) if not ext in ('.pyx', '.py'): continue source_hash = sha1(open(source, 'rb').read()).hexdigest() c_fname = base + '.c' try: c_file = open(c_fname, 'rb') except IOError: return False c_hash = sha1(c_file.read()).hexdigest() stamps[source_hash] = source stamps[c_hash] = c_fname # Read stamps from hash_stamp_fname; check in stamps dictionary try: stamp_file = open(hash_stamp_fname, 'rt') except IOError: return False for line in stamp_file: if line.startswith('#'): continue fname, hash = [e.strip() for e in line.split(',')] if not hash in stamps: return False # Compare path made canonical for \/ fname = fname.replace(filesep, '/') if not stamps[hash].replace(filesep, '/') == fname: return False stamps.pop(hash) # All good if we found all hashes we need return len(stamps) == 0 def cyproc_exts(exts, cython_min_version, hash_stamps_fname = 'pyx-stamps', build_ext=build_ext): """ Process sequence of `exts` to check if we need Cython. Return builder Parameters ---------- exts : sequence of distutils ``Extension`` If we already have good c files for any pyx or py sources, we replace the pyx or py files with their compiled up c versions inplace. cython_min_version : str Minimum cython version neede for compile hash_stamps_fname : str, optional filename with hashes for pyx/py and c files known to be in sync. Default is 'pyx-stamps' build_ext : distutils command default build_ext to return if not cythonizing. Default is distutils ``build_ext`` class Returns ------- builder : ``distutils`` ``build_ext`` class or similar Can be ``build_ext`` input (if we have good c files) or cython ``build_ext`` if we have a good cython, or a class raising an informative error on ``run()`` """ if stamped_pyx_ok(exts, hash_stamps_fname): # Replace pyx with c files, use standard builder for mod in exts: sources = [] for source in mod.sources: base, ext = splitext(source) if ext in ('.pyx', '.py'): sources.append(base + '.c') else: sources.append(source) mod.sources = sources return build_ext # We need cython try: from Cython.Compiler.Version import version as cyversion except ImportError: return derror_maker(build_ext, 'Need cython>={0} to build extensions ' 'but cannot import "Cython"'.format( cython_min_version)) if LooseVersion(cyversion) >= cython_min_version: from Cython.Distutils import build_ext as extbuilder return extbuilder return derror_maker(build_ext, 'Need cython>={0} to build extensions' 'but found cython version {1}'.format( cython_min_version, cyversion)) def build_stamp(pyxes, include_dirs=()): """ Cythonize files in `pyxes`, return pyx, C filenames, hashes Parameters ---------- pyxes : sequence sequence of filenames of files on which to run Cython include_dirs : sequence Any extra include directories in which to find Cython files. Returns ------- pyx_defs : dict dict has key, value pairs of , , where is a dict with key, value pairs of "pyx_hash", ; "c_filename", ; "c_hash", . """ pyx_defs = {} includes = sum([['--include-dir', d] for d in include_dirs], []) for source in pyxes: base, ext = splitext(source) pyx_hash = sha1(open(source, 'rt').read()).hexdigest() c_filename = base + '.c' check_call(['cython'] + includes + [source]) c_hash = sha1(open(c_filename, 'rt').read()).hexdigest() pyx_defs[source] = dict(pyx_hash=pyx_hash, c_filename=c_filename, c_hash=c_hash) return pyx_defs def write_stamps(pyx_defs, stamp_fname='pyx-stamps'): """ Write stamp information in `pyx_defs` to filename `stamp_fname` Parameters ---------- pyx_defs : dict dict has key, value pairs of , , where is a dict with key, value pairs of "pyx_hash", ; "c_filename", ; "c_hash", . stamp_fname : str filename to which to write stamp information """ with open(stamp_fname, 'wt') as stamp_file: stamp_file.write('# SHA1 hashes for pyx files and generated c files\n') stamp_file.write('# Auto-generated file, do not edit\n') for pyx_fname, pyx_info in pyx_defs.items(): stamp_file.write('%s, %s\n' % (pyx_fname, pyx_info['pyx_hash'])) stamp_file.write('%s, %s\n' % (pyx_info['c_filename'], pyx_info['c_hash'])) def find_pyx(root_dir): """ Recursively find files with extension '.pyx' starting at `root_dir` Parameters ---------- root_dir : str Directory from which to search for pyx files. Returns ------- pyxes : list list of filenames relative to `root_dir` """ pyxes = [] for dirpath, dirnames, filenames in os.walk(root_dir): for filename in filenames: if not filename.endswith('.pyx'): continue base = relpath(dirpath, root_dir) pyxes.append(pjoin(base, filename)) return pyxes def get_pyx_sdist(sdist_like=sdist, hash_stamps_fname='pyx-stamps', include_dirs=()): """ Add pyx->c conversion, hash recording to sdist command `sdist_like` Parameters ---------- sdist_like : sdist command class, optional command that will do work of ``distutils.command.sdist.sdist``. By default we use the distutils version hash_stamps_fname : str, optional filename to which to write hashes of pyx / py and c files. Default is ``pyx-stamps`` include_dirs : sequence Any extra include directories in which to find Cython files. Returns ------- modified_sdist : sdist-like command class decorated `sdist_like` class, for compiling pyx / py files to c, putting the .c files in the the source archive, and writing hashes for these into the file named from `hash_stamps_fname` """ class PyxSDist(sdist_like): """ Custom distutils sdist command to generate .c files from pyx files. Running the command object ``obj.run()`` will compile the pyx / py files in any extensions, into c files, and add them to the list of files to put into the source archive, as well as the usual behavior of distutils ``sdist``. It will also take the sha1 hashes of the pyx / py and c files, and store them in a file ``pyx-stamps``, and put this file in the release tree. This allows someone who has the archive to know that the pyx and c files that they have are the ones packed into the archive, and therefore they may not need Cython at install time. See ``cython_process_exts`` for the build-time command. """ def make_distribution(self): """ Compile pyx to c files, add to sources, stamp sha1s """ pyxes = [] for mod in self.distribution.ext_modules: for source in mod.sources: base, ext = splitext(source) if ext in ('.pyx', '.py'): pyxes.append(source) self.pyx_defs = build_stamp(pyxes, include_dirs) for pyx_fname, pyx_info in self.pyx_defs.items(): self.filelist.append(pyx_info['c_filename']) sdist_like.make_distribution(self) def make_release_tree(self, base_dir, files): """ Put pyx stamps file into release tree """ sdist_like.make_release_tree(self, base_dir, files) stamp_fname = pjoin(base_dir, hash_stamps_fname) write_stamps(self.pyx_defs, stamp_fname) return PyxSDist def build_stamp_source(root_dir=None, stamp_fname='pyx-stamps', include_dirs=None): """ Build cython c files, make stamp file in source tree `root_dir` Parameters ---------- root_dir : None or str, optional Directory from which to find ``.pyx`` files. If None, use current working directory. stamp_fname : str, optional Filename for stamp file we will write include_dirs : None or sequence Any extra Cython include directories """ if root_dir is None: root_dir = os.getcwd() if include_dirs is None: include_dirs = [pjoin(root_dir, 'src')] pyxes = find_pyx(root_dir) pyx_defs = build_stamp(pyxes, include_dirs=include_dirs) write_stamps(pyx_defs, stamp_fname) dipy-0.10.1/dipy/000077500000000000000000000000001263041327500135065ustar00rootroot00000000000000dipy-0.10.1/dipy/COMMIT_INFO.txt000066400000000000000000000001021263041327500160430ustar00rootroot00000000000000[commit hash] archive_subst_hash = d7a7e85 install_hash = 439dcc7 dipy-0.10.1/dipy/__init__.py000066400000000000000000000025751263041327500156300ustar00rootroot00000000000000""" Diffusion Imaging in Python ============================ For more information, please visit http://dipy.org Subpackages ----------- :: align -- Registration, streamline alignment, volume resampling boots -- Bootstrapping algorithms core -- Spheres, gradient tables core.geometry -- Spherical geometry, coordinate and vector manipulation core.meshes -- Point distributions on the sphere data -- Small testing datasets external -- Interfaces to external tools such as FSL io -- Loading/saving of dpy datasets reconst -- Signal reconstruction modules (tensor, spherical harmonics, diffusion spectrum, etc.) segment -- Tractography segmentation sims -- MRI phantom signal simulation tracking -- Tractography, metrics for streamlines viz -- Visualization and GUIs Utilities --------- :: test -- Run unittests __version__ -- Dipy version """ import sys if sys.version[0:3] < '2.6': raise ImportError('Dipy needs Python version 2.6 or above') from .info import __version__ # Test callable from numpy.testing import Tester test = Tester().test bench = Tester().bench del Tester # Plumb in version etc info stuff from .pkg_info import get_pkg_info as _get_pkg_info def get_info(): from os.path import dirname return _get_pkg_info(dirname(__file__)) del sys dipy-0.10.1/dipy/align/000077500000000000000000000000001263041327500146005ustar00rootroot00000000000000dipy-0.10.1/dipy/align/__init__.py000066400000000000000000000014331263041327500167120ustar00rootroot00000000000000import numpy as np floating = np.float32 class Bunch(object): def __init__(self, **kwds): r"""A 'bunch' of values (a replacement of Enum) This is a temporary replacement of Enum, which is not available on all versions of Python 2 """ self.__dict__.update(kwds) VerbosityLevels = Bunch(NONE=0, STATUS=1, DIAGNOSE=2, DEBUG=3) r""" VerbosityLevels This enum defines the four levels of verbosity we use in the align module. NONE : do not print anything STATUS : print information about the current status of the algorithm DIAGNOSE : print high level information of the components involved in the registration that can be used to detect a failing component. DEBUG : print as much information as possible to isolate the cause of a bug. """ dipy-0.10.1/dipy/align/bundlemin.pyx000066400000000000000000000207621263041327500173260ustar00rootroot00000000000000#!python #cython: boundscheck=False #cython: wraparound=False #cython: cdivision=True import numpy as np cimport numpy as cnp cimport cython cimport safe_openmp as openmp from safe_openmp cimport have_openmp from cython.parallel import prange from libc.stdlib cimport malloc, free from libc.math cimport sqrt, sin, cos from multiprocessing import cpu_count cdef cnp.dtype f64_dt = np.dtype(np.float64) cdef double min_direct_flip_dist(double *a,double *b, cnp.npy_intp rows) nogil: r""" Minimum of direct and flip average (MDF) distance [Garyfallidis12] between two streamlines. Parameters ---------- a : double pointer first streamline b : double pointer second streamline rows : number of points of the streamline both tracks need to have the same number of points Returns ------- out : double mininum of direct and flipped average distances Reference --------- .. [Garyfallidis12] Garyfallidis E. et al., QuickBundles a method for tractography simplification, Frontiers in Neuroscience, vol 6, no 175, 2012. """ cdef: cnp.npy_intp i=0, j=0 double sub=0, subf=0, distf=0, dist=0, tmprow=0, tmprowf=0 for i in range(rows): tmprow = 0 tmprowf = 0 for j in range(3): sub = a[i * 3 + j] - b[i * 3 + j] subf = a[i * 3 + j] - b[(rows - 1 - i) * 3 + j] tmprow += sub * sub tmprowf += subf * subf dist += sqrt(tmprow) distf += sqrt(tmprowf) dist = dist / rows distf = distf / rows if dist <= distf: return dist return distf def _bundle_minimum_distance_matrix(double [:, ::1] static, double [:, ::1] moving, cnp.npy_intp static_size, cnp.npy_intp moving_size, cnp.npy_intp rows, double [:, ::1] D, num_threads=None): """ MDF-based pairwise distance optimization function We minimize the distance between moving streamlines of the same number of points as they align with the static streamlines. Parameters ----------- static: array Static streamlines moving: array Moving streamlines static_size : int Number of static streamlines moving_size : int Number of moving streamlines rows : int Number of points per streamline D : 2D array Distance matrix num_threads : int Number of threads. If None (default) then all available threads will be used. Returns ------- cost : double """ cdef: cnp.npy_intp i=0, j=0, mov_i=0, mov_j=0 int all_cores = openmp.omp_get_num_procs() int threads_to_use = -1 if num_threads is not None: threads_to_use = num_threads else: threads_to_use = all_cores if have_openmp: openmp.omp_set_dynamic(0) openmp.omp_set_num_threads(threads_to_use) with nogil: for i in prange(static_size): for j in prange(moving_size): D[i, j] = min_direct_flip_dist(&static[i * rows, 0], &moving[j * rows, 0], rows) if have_openmp and num_threads is not None: openmp.omp_set_num_threads(all_cores) return np.asarray(D) def _bundle_minimum_distance(double [:, ::1] stat, double [:, ::1] mov, cnp.npy_intp static_size, cnp.npy_intp moving_size, cnp.npy_intp rows, num_threads=None): """ MDF-based pairwise distance optimization function We minimize the distance between moving streamlines of the same number of points as they align with the static streamlines. Parameters ----------- static : array Static streamlines moving : array Moving streamlines static_size : int Number of static streamlines moving_size : int Number of moving streamlines rows : int Number of points per streamline num_threads : int Number of threads. If None (default) then all available threads will be used. Returns ------- cost : double Notes ----- The difference with ``_bundle_minimum_distance_matrix`` is that it does not save the full distance matrix and therefore needs much less memory. """ cdef: cnp.npy_intp i=0, j=0 double sum_i=0, sum_j=0, tmp=0 double inf = np.finfo('f8').max double dist=0 double * min_j double * min_i openmp.omp_lock_t lock int all_cores = openmp.omp_get_num_procs() int threads_to_use = -1 if num_threads is not None: threads_to_use = num_threads else: threads_to_use = all_cores if have_openmp: openmp.omp_set_dynamic(0) openmp.omp_set_num_threads(threads_to_use) with nogil: if have_openmp: openmp.omp_init_lock(&lock) min_j = malloc(static_size * sizeof(double)) min_i = malloc(moving_size * sizeof(double)) for i in range(static_size): min_j[i] = inf for j in range(moving_size): min_i[j] = inf for i in prange(static_size): for j in range(moving_size): tmp = min_direct_flip_dist(&stat[i * rows, 0], &mov[j * rows, 0], rows) if have_openmp: openmp.omp_set_lock(&lock) if tmp < min_j[i]: min_j[i] = tmp if tmp < min_i[j]: min_i[j] = tmp if have_openmp: openmp.omp_unset_lock(&lock) if have_openmp: openmp.omp_destroy_lock(&lock) for i in range(static_size): sum_i += min_j[i] for j in range(moving_size): sum_j += min_i[j] free(min_j) free(min_i) dist = (sum_i / static_size + sum_j / moving_size) dist = 0.25 * dist * dist if have_openmp and num_threads is not None: openmp.omp_set_num_threads(all_cores) return dist def distance_matrix_mdf(streamlines_a, streamlines_b): r""" Minimum direct flipped distance matrix between two streamline sets All streamlines need to have the same number of points Parameters ---------- streamlines_a : sequence of streamlines as arrays, [(N, 3) .. (N, 3)] streamlines_b : sequence of streamlines as arrays, [(N, 3) .. (N, 3)] Returns ------- DM : array, shape (len(streamlines_a), len(streamlines_b)) distance matrix """ cdef: size_t i, j, lentA, lentB # preprocess tracks cdef: size_t longest_track_len = 0, track_len longest_track_lenA, longest_track_lenB cnp.ndarray[object, ndim=1] tracksA64 cnp.ndarray[object, ndim=1] tracksB64 cnp.ndarray[cnp.double_t, ndim=2] DM lentA = len(streamlines_a) lentB = len(streamlines_b) tracksA64 = np.zeros((lentA,), dtype=object) tracksB64 = np.zeros((lentB,), dtype=object) DM = np.zeros((lentA,lentB), dtype=np.double) if streamlines_a[0].shape[0] != streamlines_b[0].shape[0]: msg = 'Streamlines should have the same number of points as required' msg += 'by the MDF distance' raise ValueError(msg) # process tracks to predictable memory layout for i in range(lentA): tracksA64[i] = np.ascontiguousarray(streamlines_a[i], dtype=f64_dt) for i in range(lentB): tracksB64[i] = np.ascontiguousarray(streamlines_b[i], dtype=f64_dt) # preallocate buffer array for track distance calculations cdef: cnp.float64_t *t1_ptr, *t2_ptr, *min_buffer # cycle over tracks cdef: cnp.ndarray [cnp.float64_t, ndim=2] t1, t2 size_t t1_len, t2_len double d[2] t_len = tracksA64[0].shape[0] for i from 0 <= i < lentA: t1 = tracksA64[i] t1_ptr = t1.data for j from 0 <= j < lentB: t2 = tracksB64[j] t2_ptr = t2.data DM[i, j] = min_direct_flip_dist(t1_ptr, t2_ptr,t_len) return DM dipy-0.10.1/dipy/align/crosscorr.pyx000066400000000000000000000676121263041327500173750ustar00rootroot00000000000000""" Utility functions used by the Cross Correlation (CC) metric """ import numpy as np cimport cython cimport numpy as cnp from fused_types cimport floating cdef inline int _int_max(int a, int b) nogil: r""" Returns the maximum of a and b """ return a if a >= b else b cdef inline int _int_min(int a, int b) nogil: r""" Returns the minimum of a and b """ return a if a <= b else b cdef enum: SI = 0 SI2 = 1 SJ = 2 SJ2 = 3 SIJ = 4 CNT = 5 @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def precompute_cc_factors_3d(floating[:, :, :] static, floating[:, :, :] moving, cnp.npy_intp radius): r"""Precomputations to quickly compute the gradient of the CC Metric Pre-computes the separate terms of the cross correlation metric and image norms at each voxel considering a neighborhood of the given radius to efficiently compute the gradient of the metric with respect to the deformation field [Avants08][Avants11] Parameters ---------- static : array, shape (S, R, C) the static volume, which also defines the reference registration domain moving : array, shape (S, R, C) the moving volume (notice that both images must already be in a common reference domain, i.e. the same S, R, C) radius : the radius of the neighborhood (cube of (2 * radius + 1)^3 voxels) Returns ------- factors : array, shape (S, R, C, 5) the precomputed cross correlation terms: factors[:,:,:,0] : static minus its mean value along the neighborhood factors[:,:,:,1] : moving minus its mean value along the neighborhood factors[:,:,:,2] : sum of the pointwise products of static and moving along the neighborhood factors[:,:,:,3] : sum of sq. values of static along the neighborhood factors[:,:,:,4] : sum of sq. values of moving along the neighborhood References ---------- [Avants08] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2008) Symmetric Diffeomorphic Image Registration with Cross-Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, Med Image Anal. 12(1), 26-41. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. """ cdef: cnp.npy_intp side = 2 * radius + 1 cnp.npy_intp ns = static.shape[0] cnp.npy_intp nr = static.shape[1] cnp.npy_intp nc = static.shape[2] cnp.npy_intp s, r, c, k, i, j, t, q, qq, firstc, lastc, firstr, lastr double Imean, Jmean floating[:, :, :, :] factors = np.zeros((ns, nr, nc, 5), dtype=np.asarray(static).dtype) double[:, :] lines = np.zeros((6, side), dtype=np.float64) double[:] sums = np.zeros((6,), dtype=np.float64) with nogil: for r in range(nr): firstr = _int_max(0, r - radius) lastr = _int_min(nr - 1, r + radius) for c in range(nc): firstc = _int_max(0, c - radius) lastc = _int_min(nc - 1, c + radius) # compute factors for line [:,r,c] for t in range(6): for q in range(side): lines[t,q] = 0 # Compute all slices and set the sums on the fly # compute each slice [k, i={r-radius..r+radius}, j={c-radius, # c+radius}] for k in range(ns): q = k % side for t in range(6): sums[t] -= lines[t, q] lines[t, q] = 0 for i in range(firstr, lastr + 1): for j in range(firstc, lastc + 1): lines[SI, q] += static[k, i, j] lines[SI2, q] += static[k, i, j] * static[k, i, j] lines[SJ, q] += moving[k, i, j] lines[SJ2, q] += moving[k, i, j] * moving[k, i, j] lines[SIJ, q] += static[k, i, j] * moving[k, i, j] lines[CNT, q] += 1 for t in range(6): sums[t] = 0 for qq in range(side): sums[t] += lines[t, qq] if(k >= radius): # s is the voxel that is affected by the cube with # slices [s - radius..s + radius, :, :] s = k - radius Imean = sums[SI] / sums[CNT] Jmean = sums[SJ] / sums[CNT] factors[s, r, c, 0] = static[s, r, c] - Imean factors[s, r, c, 1] = moving[s, r, c] - Jmean factors[s, r, c, 2] = (sums[SIJ] - Jmean * sums[SI] - Imean * sums[SJ] + sums[CNT] * Jmean * Imean) factors[s, r, c, 3] = (sums[SI2] - Imean * sums[SI] - Imean * sums[SI] + sums[CNT] * Imean * Imean) factors[s, r, c, 4] = (sums[SJ2] - Jmean * sums[SJ] - Jmean * sums[SJ] + sums[CNT] * Jmean * Jmean) # Finally set the values at the end of the line for s in range(ns - radius, ns): # this would be the last slice to be processed for voxel # [s, r, c], if it existed k = s + radius q = k % side for t in range(6): sums[t] -= lines[t, q] Imean = sums[SI] / sums[CNT] Jmean = sums[SJ] / sums[CNT] factors[s, r, c, 0] = static[s, r, c] - Imean factors[s, r, c, 1] = moving[s, r, c] - Jmean factors[s, r, c, 2] = (sums[SIJ] - Jmean * sums[SI] - Imean * sums[SJ] + sums[CNT] * Jmean * Imean) factors[s, r, c, 3] = (sums[SI2] - Imean * sums[SI] - Imean * sums[SI] + sums[CNT] * Imean * Imean) factors[s, r, c, 4] = (sums[SJ2] - Jmean * sums[SJ] - Jmean * sums[SJ] + sums[CNT] * Jmean * Jmean) return factors @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def precompute_cc_factors_3d_test(floating[:, :, :] static, floating[:, :, :] moving, int radius): r"""Precomputations to quickly compute the gradient of the CC Metric This version of precompute_cc_factors_3d is for testing purposes, it directly computes the local cross-correlation factors without any optimization, so it is less error-prone than the accelerated version. """ cdef: cnp.npy_intp ns = static.shape[0] cnp.npy_intp nr = static.shape[1] cnp.npy_intp nc = static.shape[2] cnp.npy_intp s, r, c, k, i, j, t, firstc, lastc, firstr, lastr, firsts, lasts double Imean, Jmean floating[:, :, :, :] factors = np.zeros((ns, nr, nc, 5), dtype=np.asarray(static).dtype) double[:] sums = np.zeros((6,), dtype=np.float64) with nogil: for s in range(ns): firsts = _int_max(0, s - radius) lasts = _int_min(ns - 1, s + radius) for r in range(nr): firstr = _int_max(0, r - radius) lastr = _int_min(nr - 1, r + radius) for c in range(nc): firstc = _int_max(0, c - radius) lastc = _int_min(nc - 1, c + radius) for t in range(6): sums[t] = 0 for k in range(firsts, 1 + lasts): for i in range(firstr, 1 + lastr): for j in range(firstc, 1 + lastc): sums[SI] += static[k, i, j] sums[SI2] += static[k, i,j]**2 sums[SJ] += moving[k, i,j] sums[SJ2] += moving[k, i,j]**2 sums[SIJ] += static[k,i,j]*moving[k, i,j] sums[CNT] += 1 Imean = sums[SI] / sums[CNT] Jmean = sums[SJ] / sums[CNT] factors[s, r, c, 0] = static[s, r, c] - Imean factors[s, r, c, 1] = moving[s, r, c] - Jmean factors[s, r, c, 2] = (sums[SIJ] - Jmean * sums[SI] - Imean * sums[SJ] + sums[CNT] * Jmean * Imean) factors[s, r, c, 3] = (sums[SI2] - Imean * sums[SI] - Imean * sums[SI] + sums[CNT] * Imean * Imean) factors[s, r, c, 4] = (sums[SJ2] - Jmean * sums[SJ] - Jmean * sums[SJ] + sums[CNT] * Jmean * Jmean) return factors @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_cc_forward_step_3d(floating[:, :, :, :] grad_static, floating[:, :, :, :] factors, cnp.npy_intp radius): r"""Gradient of the CC Metric w.r.t. the forward transformation Computes the gradient of the Cross Correlation metric for symmetric registration (SyN) [Avants08] w.r.t. the displacement associated to the moving volume ('forward' step) as in [Avants11] Parameters ---------- grad_static : array, shape (S, R, C, 3) the gradient of the static volume factors : array, shape (S, R, C, 5) the precomputed cross correlation terms obtained via precompute_cc_factors_3d radius : int the radius of the neighborhood used for the CC metric when computing the factors. The returned vector field will be zero along a boundary of width radius voxels. Returns ------- out : array, shape (S, R, C, 3) the gradient of the cross correlation metric with respect to the displacement associated to the moving volume energy : the cross correlation energy (data term) at this iteration References ---------- [Avants08] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2008) Symmetric Diffeomorphic Image Registration with Cross-Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, Med Image Anal. 12(1), 26-41. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. """ cdef: cnp.npy_intp ns = grad_static.shape[0] cnp.npy_intp nr = grad_static.shape[1] cnp.npy_intp nc = grad_static.shape[2] double energy = 0 cnp.npy_intp s,r,c double Ii, Ji, sfm, sff, smm, localCorrelation, temp floating[:, :, :, :] out = np.zeros((ns, nr, nc, 3), dtype=np.asarray(grad_static).dtype) with nogil: for s in range(radius, ns-radius): for r in range(radius, nr-radius): for c in range(radius, nc-radius): Ii = factors[s, r, c, 0] Ji = factors[s, r, c, 1] sfm = factors[s, r, c, 2] sff = factors[s, r, c, 3] smm = factors[s, r, c, 4] if(sff == 0.0 or smm == 0.0): continue localCorrelation = 0 if(sff * smm > 1e-5): localCorrelation = sfm * sfm / (sff * smm) if(localCorrelation < 1): # avoid bad values... energy -= localCorrelation temp = 2.0 * sfm / (sff * smm) * (Ji - sfm / sff * Ii) out[s, r, c, 0] -= temp * grad_static[s, r, c, 0] out[s, r, c, 1] -= temp * grad_static[s, r, c, 1] out[s, r, c, 2] -= temp * grad_static[s, r, c, 2] return out, energy @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_cc_backward_step_3d(floating[:, :, :, :] grad_moving, floating[:, :, :, :] factors, cnp.npy_intp radius): r"""Gradient of the CC Metric w.r.t. the backward transformation Computes the gradient of the Cross Correlation metric for symmetric registration (SyN) [Avants08] w.r.t. the displacement associated to the static volume ('backward' step) as in [Avants11] Parameters ---------- grad_moving : array, shape (S, R, C, 3) the gradient of the moving volume factors : array, shape (S, R, C, 5) the precomputed cross correlation terms obtained via precompute_cc_factors_3d radius : int the radius of the neighborhood used for the CC metric when computing the factors. The returned vector field will be zero along a boundary of width radius voxels. Returns ------- out : array, shape (S, R, C, 3) the gradient of the cross correlation metric with respect to the displacement associated to the static volume energy : the cross correlation energy (data term) at this iteration References ---------- [Avants08] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2008) Symmetric Diffeomorphic Image Registration with Cross-Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, Med Image Anal. 12(1), 26-41. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. """ ftype = np.asarray(grad_moving).dtype cdef: cnp.npy_intp ns = grad_moving.shape[0] cnp.npy_intp nr = grad_moving.shape[1] cnp.npy_intp nc = grad_moving.shape[2] cnp.npy_intp s,r,c double energy = 0 double Ii, Ji, sfm, sff, smm, localCorrelation, temp floating[:, :, :, :] out = np.zeros((ns, nr, nc, 3), dtype=ftype) with nogil: for s in range(radius, ns-radius): for r in range(radius, nr-radius): for c in range(radius, nc-radius): Ii = factors[s, r, c, 0] Ji = factors[s, r, c, 1] sfm = factors[s, r, c, 2] sff = factors[s, r, c, 3] smm = factors[s, r, c, 4] if(sff == 0.0 or smm == 0.0): continue localCorrelation = 0 if(sff * smm > 1e-5): localCorrelation = sfm * sfm / (sff * smm) if(localCorrelation < 1): # avoid bad values... energy -= localCorrelation temp = 2.0 * sfm / (sff * smm) * (Ii - sfm / smm * Ji) out[s, r, c, 0] -= temp * grad_moving[s, r, c, 0] out[s, r, c, 1] -= temp * grad_moving[s, r, c, 1] out[s, r, c, 2] -= temp * grad_moving[s, r, c, 2] return out, energy @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def precompute_cc_factors_2d(floating[:, :] static, floating[:, :] moving, cnp.npy_intp radius): r"""Precomputations to quickly compute the gradient of the CC Metric Pre-computes the separate terms of the cross correlation metric [Avants08] and image norms at each voxel considering a neighborhood of the given radius to efficiently [Avants11] compute the gradient of the metric with respect to the deformation field. Parameters ---------- static : array, shape (R, C) the static volume, which also defines the reference registration domain moving : array, shape (R, C) the moving volume (notice that both images must already be in a common reference domain, i.e. the same R, C) radius : the radius of the neighborhood(square of (2 * radius + 1)^2 voxels) Returns ------- factors : array, shape (R, C, 5) the precomputed cross correlation terms: factors[:,:,0] : static minus its mean value along the neighborhood factors[:,:,1] : moving minus its mean value along the neighborhood factors[:,:,2] : sum of the pointwise products of static and moving along the neighborhood factors[:,:,3] : sum of sq. values of static along the neighborhood factors[:,:,4] : sum of sq. values of moving along the neighborhood References ---------- [Avants08] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2008) Symmetric Diffeomorphic Image Registration with Cross-Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, Med Image Anal. 12(1), 26-41. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. """ ftype = np.asarray(static).dtype cdef: cnp.npy_intp side = 2 * radius + 1 cnp.npy_intp nr = static.shape[0] cnp.npy_intp nc = static.shape[1] cnp.npy_intp r, c, i, j, t, q, qq, firstc, lastc double Imean, Jmean floating[:, :, :] factors = np.zeros((nr, nc, 5), dtype=ftype) double[:, :] lines = np.zeros((6, side), dtype=np.float64) double[:] sums = np.zeros((6,), dtype=np.float64) with nogil: for c in range(nc): firstc = _int_max(0, c - radius) lastc = _int_min(nc - 1, c + radius) # compute factors for row [:,c] for t in range(6): for q in range(side): lines[t,q] = 0 # Compute all rows and set the sums on the fly # compute row [i, j = {c-radius, c + radius}] for i in range(nr): q = i % side for t in range(6): lines[t, q] = 0 for j in range(firstc, lastc + 1): lines[SI, q] += static[i, j] lines[SI2, q] += static[i, j] * static[i, j] lines[SJ, q] += moving[i, j] lines[SJ2, q] += moving[i, j] * moving[i, j] lines[SIJ, q] += static[i, j] * moving[i, j] lines[CNT, q] += 1 for t in range(6): sums[t] = 0 for qq in range(side): sums[t] += lines[t, qq] if(i >= radius): # r is the pixel that is affected by the cube with slices # [r - radius.. r + radius, :] r = i - radius Imean = sums[SI] / sums[CNT] Jmean = sums[SJ] / sums[CNT] factors[r, c, 0] = static[r, c] - Imean factors[r, c, 1] = moving[r, c] - Jmean factors[r, c, 2] = (sums[SIJ] - Jmean * sums[SI] - Imean * sums[SJ] + sums[CNT] * Jmean * Imean) factors[r, c, 3] = (sums[SI2] - Imean * sums[SI] - Imean * sums[SI] + sums[CNT] * Imean * Imean) factors[r, c, 4] = (sums[SJ2] - Jmean * sums[SJ] - Jmean * sums[SJ] + sums[CNT] * Jmean * Jmean) # Finally set the values at the end of the line for r in range(nr - radius, nr): # this would be the last slice to be processed for pixel # [r, c], if it existed i = r + radius q = i % side for t in range(6): sums[t] -= lines[t, q] Imean = sums[SI] / sums[CNT] Jmean = sums[SJ] / sums[CNT] factors[r, c, 0] = static[r, c] - Imean factors[r, c, 1] = moving[r, c] - Jmean factors[r, c, 2] = (sums[SIJ] - Jmean * sums[SI] - Imean * sums[SJ] + sums[CNT] * Jmean * Imean) factors[r, c, 3] = (sums[SI2] - Imean * sums[SI] - Imean * sums[SI] + sums[CNT] * Imean * Imean) factors[r, c, 4] = (sums[SJ2] - Jmean * sums[SJ] - Jmean * sums[SJ] + sums[CNT] * Jmean * Jmean) return factors @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def precompute_cc_factors_2d_test(floating[:, :] static, floating[:, :] moving, cnp.npy_intp radius): r"""Precomputations to quickly compute the gradient of the CC Metric This version of precompute_cc_factors_2d is for testing purposes, it directly computes the local cross-correlation without any optimization. """ ftype = np.asarray(static).dtype cdef: cnp.npy_intp nr = static.shape[0] cnp.npy_intp nc = static.shape[1] cnp.npy_intp r, c, i, j, t, firstr, lastr, firstc, lastc double Imean, Jmean floating[:, :, :] factors = np.zeros((nr, nc, 5), dtype=ftype) double[:] sums = np.zeros((6,), dtype=np.float64) with nogil: for r in range(nr): firstr = _int_max(0, r - radius) lastr = _int_min(nr - 1, r + radius) for c in range(nc): firstc = _int_max(0, c - radius) lastc = _int_min(nc - 1, c + radius) for t in range(6): sums[t]=0 for i in range(firstr, 1 + lastr): for j in range(firstc, 1+lastc): sums[SI] += static[i, j] sums[SI2] += static[i,j]**2 sums[SJ] += moving[i,j] sums[SJ2] += moving[i,j]**2 sums[SIJ] += static[i,j]*moving[i,j] sums[CNT] += 1 Imean = sums[SI] / sums[CNT] Jmean = sums[SJ] / sums[CNT] factors[r, c, 0] = static[r, c] - Imean factors[r, c, 1] = moving[r, c] - Jmean factors[r, c, 2] = (sums[SIJ] - Jmean * sums[SI] - Imean * sums[SJ] + sums[CNT] * Jmean * Imean) factors[r, c, 3] = (sums[SI2] - Imean * sums[SI] - Imean * sums[SI] + sums[CNT] * Imean * Imean) factors[r, c, 4] = (sums[SJ2] - Jmean * sums[SJ] - Jmean * sums[SJ] + sums[CNT] * Jmean * Jmean) return factors @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_cc_forward_step_2d(floating[:, :, :] grad_static, floating[:, :, :] factors, cnp.npy_intp radius): r"""Gradient of the CC Metric w.r.t. the forward transformation Computes the gradient of the Cross Correlation metric for symmetric registration (SyN) [Avants08] w.r.t. the displacement associated to the moving image ('backward' step) as in [Avants11] Parameters ---------- grad_static : array, shape (R, C, 2) the gradient of the static image factors : array, shape (R, C, 5) the precomputed cross correlation terms obtained via precompute_cc_factors_2d Returns ------- out : array, shape (R, C, 2) the gradient of the cross correlation metric with respect to the displacement associated to the moving image energy : the cross correlation energy (data term) at this iteration Notes ----- Currently, the gradient of the static image is not being used, but some authors suggest that symmetrizing the gradient by including both, the moving and static gradients may improve the registration quality. We are leaving this parameters as a placeholder for future investigation References ---------- [Avants08] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2008) Symmetric Diffeomorphic Image Registration with Cross-Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, Med Image Anal. 12(1), 26-41. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. """ cdef: cnp.npy_intp nr = grad_static.shape[0] cnp.npy_intp nc = grad_static.shape[1] double energy = 0 cnp.npy_intp r,c double Ii, Ji, sfm, sff, smm, localCorrelation, temp floating[:, :, :] out = np.zeros((nr, nc, 2), dtype=np.asarray(grad_static).dtype) with nogil: for r in range(radius, nr-radius): for c in range(radius, nc-radius): Ii = factors[r, c, 0] Ji = factors[r, c, 1] sfm = factors[r, c, 2] sff = factors[r, c, 3] smm = factors[r, c, 4] if(sff == 0.0 or smm == 0.0): continue localCorrelation = 0 if(sff * smm > 1e-5): localCorrelation = sfm * sfm / (sff * smm) if(localCorrelation < 1): # avoid bad values... energy -= localCorrelation temp = 2.0 * sfm / (sff * smm) * (Ji - sfm / sff * Ii) out[r, c, 0] -= temp * grad_static[r, c, 0] out[r, c, 1] -= temp * grad_static[r, c, 1] return out, energy @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_cc_backward_step_2d(floating[:, :, :] grad_moving, floating[:, :, :] factors, cnp.npy_intp radius): r"""Gradient of the CC Metric w.r.t. the backward transformation Computes the gradient of the Cross Correlation metric for symmetric registration (SyN) [Avants08] w.r.t. the displacement associated to the static image ('forward' step) as in [Avants11] Parameters ---------- grad_moving : array, shape (R, C, 2) the gradient of the moving image factors : array, shape (R, C, 5) the precomputed cross correlation terms obtained via precompute_cc_factors_2d Returns ------- out : array, shape (R, C, 2) the gradient of the cross correlation metric with respect to the displacement associated to the static image energy : the cross correlation energy (data term) at this iteration References ---------- [Avants08] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2008) Symmetric Diffeomorphic Image Registration with Cross-Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, Med Image Anal. 12(1), 26-41. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. """ ftype = np.asarray(grad_moving).dtype cdef: cnp.npy_intp nr = grad_moving.shape[0] cnp.npy_intp nc = grad_moving.shape[1] cnp.npy_intp r,c double energy = 0 double Ii, Ji, sfm, sff, smm, localCorrelation, temp floating[:, :, :] out = np.zeros((nr, nc, 2), dtype=ftype) with nogil: for r in range(radius, nr-radius): for c in range(radius, nc-radius): Ii = factors[r, c, 0] Ji = factors[r, c, 1] sfm = factors[r, c, 2] sff = factors[r, c, 3] smm = factors[r, c, 4] if(sff == 0.0 or smm == 0.0): continue localCorrelation = 0 if(sff * smm > 1e-5): localCorrelation = sfm * sfm / (sff * smm) if(localCorrelation < 1): # avoid bad values... energy -= localCorrelation temp = 2.0 * sfm / (sff * smm) * (Ii - sfm / smm * Ji) out[r, c, 0] -= temp * grad_moving[r, c, 0] out[r, c, 1] -= temp * grad_moving[r, c, 1] return out, energy dipy-0.10.1/dipy/align/expectmax.pyx000066400000000000000000000541601263041327500173460ustar00rootroot00000000000000#!python #cython: boundscheck=False #cython: wraparound=False #cython: cdivision=True import numpy as np cimport cython cimport numpy as cnp from .fused_types cimport floating, number cdef extern from "dpy_math.h" nogil: int dpy_isinf(double) double floor(double) cdef inline int ifloor(double x) nogil: return int(floor(x)) def quantize_positive_2d(floating[:, :] v, int num_levels): r"""Quantizes a 2D image to num_levels quantization levels Quantizes the input image at num_levels intensity levels considering <=0 as a special value. Those input pixels <=0, and only those, will be assigned a quantization level of 0. The positive values are divided into the remaining num_levels-1 uniform quanization levels. The following are undefined, and raise a ValueError: * Quantizing at zero levels because at least one level must be assigned * Quantizing at one level because positive values should be assigned a level different from the secial level 0 (at least 2 levels are needed) Parameters ---------- v : array, shape (R, C) the image to be quantized num_levels : int the number of levels Returns ------- out : array, shape (R, C), same shape as v the quantized image levels: array, shape (num_levels,) the quantization values: levels[0]=0, and levels[i] is the mid-point of the interval of intensities that are assigned to quantization level i, i=1, ..., num_levels-1. hist: array, shape (num_levels,) histogram: the number of pixels that were assigned to each quantization level """ ftype = np.asarray(v).dtype cdef: cnp.npy_intp nrows = v.shape[0] cnp.npy_intp ncols = v.shape[1] cnp.npy_intp npix = nrows * ncols cnp.npy_intp i, j, l double epsilon, delta double min_val = -1 double max_val = -1 int[:] hist = np.zeros(shape=(num_levels,), dtype=np.int32) int[:, :] out = np.zeros(shape=(nrows, ncols,), dtype=np.int32) floating[:] levels = np.zeros(shape=(num_levels,), dtype=ftype) #Quantizing at zero levels is undefined #Quantizing at one level is not supported because we want to make sure the #maximum level in the quantization is never greater than num_levels-1 if(num_levels < 2): raise ValueError('Quantization levels must be at least 2') num_levels -= 1 # zero is one of the levels with nogil: for i in range(nrows): for j in range(ncols): if(v[i, j] > 0): if((min_val < 0) or (v[i, j] < min_val)): min_val = v[i, j] if(v[i, j] > max_val): max_val = v[i, j] epsilon = 1e-8 delta = (max_val - min_val + epsilon) / num_levels # notice that we decreased num_levels, so levels[0..num_levels] are well # defined if((num_levels < 2) or (delta < epsilon)): for i in range(nrows): for j in range(ncols): if(v[i, j] > 0): out[i, j] = 1 else: out[i, j] = 0 hist[0] += 1 levels[0] = 0 levels[1] = 0.5 * (min_val + max_val) hist[1] = npix - hist[0] with gil: return out, levels, hist levels[0] = 0 levels[1] = min_val + delta * 0.5 for i in range(2, 1 + num_levels): levels[i] = levels[i - 1] + delta for i in range(nrows): for j in range(ncols): if(v[i, j] > 0): l = ifloor((v[i, j] - min_val) / delta) out[i, j] = l + 1 hist[l + 1] += 1 else: out[i, j] = 0 hist[0] += 1 return out, levels, hist def quantize_positive_3d(floating[:, :, :] v, int num_levels): r"""Quantizes a 3D volume to num_levels quantization levels Quantizes the input volume at num_levels intensity levels considering <=0 as a special value. Those input voxels <=0, and only those, will be assigned a quantization level of 0. The positive values are divided into the remaining num_levels-1 uniform quanization levels. The following are undefined, and raise a ValueError: * Quantizing at zero levels because at least one level must be assigned * Quantizing at one level because positive values should be assigned a level different from the secial level 0 (at least 2 levels are needed) Parameters ---------- v : array, shape (S, R, C) the volume to be quantized num_levels : int the number of levels Returns ------- out : array, shape (S, R, C), same shape as v the quantized volume levels: array, shape (num_levels,) the quantization values: levels[0]=0, and levels[i] is the mid-point of the interval of intensities that are assigned to quantization level i, i=1, ..., num_levels-1. hist: array, shape (num_levels,) histogram: the number of voxels that were assigned to each quantization level """ ftype = np.asarray(v).dtype cdef: cnp.npy_intp nslices = v.shape[0] cnp.npy_intp nrows = v.shape[1] cnp.npy_intp ncols = v.shape[2] cnp.npy_intp nvox = nrows * ncols * nslices cnp.npy_intp i, j, k, l double epsilon, delta double min_val = -1 double max_val = -1 int[:] hist = np.zeros(shape=(num_levels,), dtype=np.int32) int[:, :, :] out = np.zeros(shape=(nslices, nrows, ncols), dtype=np.int32) floating[:] levels = np.zeros(shape=(num_levels,), dtype=ftype) #Quantizing at zero levels is undefined #Quantizing at one level is not supported because we want to make sure the #maximum level in the quantization is never greater than num_levels-1 if(num_levels < 2): raise ValueError('Quantization levels must be at least 2') num_levels -= 1 # zero is one of the levels with nogil: for k in range(nslices): for i in range(nrows): for j in range(ncols): if(v[k, i, j] > 0): if((min_val < 0) or (v[k, i, j] < min_val)): min_val = v[k, i, j] if(v[k, i, j] > max_val): max_val = v[k, i, j] epsilon = 1e-8 delta = (max_val - min_val + epsilon) / num_levels # notice that we decreased num_levels, so levels[0..num_levels] are well # defined if((num_levels < 2) or (delta < epsilon)): for k in range(nslices): for i in range(nrows): for j in range(ncols): if(v[k, i, j] > 0): out[k, i, j] = 1 else: out[k, i, j] = 0 hist[0] += 1 levels[0] = 0 levels[1] = 0.5 * (min_val + max_val) hist[1] = nvox - hist[0] with gil: return out, levels, hist levels[0] = 0 levels[1] = min_val + delta * 0.5 for i in range(2, 1 + num_levels): levels[i] = levels[i - 1] + delta for k in range(nslices): for i in range(nrows): for j in range(ncols): if(v[k, i, j] > 0): l = ifloor((v[k, i, j] - min_val) / delta) out[k, i, j] = l + 1 hist[l + 1] += 1 else: out[k, i, j] = 0 hist[0] += 1 return out, levels, hist def compute_masked_class_stats_2d(int[:, :] mask, floating[:, :] v, int num_labels, int[:, :] labels): r"""Computes the mean and std. for each quantization level. Computes the mean and standard deviation of the intensities in 'v' for each corresponding label in 'labels'. In other words, for each label L, it computes the mean and standard deviation of the intensities in 'v' at pixels whose label in 'labels' is L. This is used by the EM metric to compute statistics for each hidden variable represented by the labels. Parameters ---------- mask : array, shape (R, C) the mask of pixels that will be taken into account for computing the statistics. All zero pixels in mask will be ignored v : array, shape (R, C) the image which the statistics will be computed from num_labels : int the number of different labels in 'labels' (equal to the number of hidden variables in the EM metric) labels : array, shape (R, C) the label assigned to each pixel Returns ------- means : array, shape (num_labels,) means[i], 0<=i 0): means[i] /= counts[i] for i in range(nrows): for j in range(ncols): if(mask[i, j] != 0): diff = v[i, j] - means[labels[i, j]] variances[labels[i, j]] += diff ** 2 for i in range(num_labels): if(counts[i] > 1): variances[i] /= counts[i] else: variances[i] = INF64 return means, variances def compute_masked_class_stats_3d(int[:, :, :] mask, floating[:, :, :] v, int num_labels, int[:, :, :] labels): r"""Computes the mean and std. for each quantization level. Computes the mean and standard deviation of the intensities in 'v' for each corresponding label in 'labels'. In other words, for each label L, it computes the mean and standard deviation of the intensities in 'v' at voxels whose label in 'labels' is L. This is used by the EM metric to compute statistics for each hidden variable represented by the labels. Parameters ---------- mask : array, shape (S, R, C) the mask of voxels that will be taken into account for computing the statistics. All zero voxels in mask will be ignored v : array, shape (S, R, C) the volume which the statistics will be computed from num_labels : int the number of different labels in 'labels' (equal to the number of hidden variables in the EM metric) labels : array, shape (S, R, C) the label assigned to each pixel Returns ------- means : array, shape (num_labels,) means[i], 0<=i 0): means[i] /= counts[i] for k in range(nslices): for i in range(nrows): for j in range(ncols): if(mask[k, i, j] != 0): diff = means[labels[k, i, j]] - v[k, i, j] variances[labels[k, i, j]] += diff ** 2 for i in range(num_labels): if(counts[i] > 1): variances[i] /= counts[i] else: variances[i] = INF64 return means, variances @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_em_demons_step_2d(floating[:,:] delta_field, floating[:,:] sigma_sq_field, floating[:,:,:] gradient_moving, double sigma_sq_x, floating[:,:,:] out): r"""Demons step for EM metric in 2D Computes the demons step [Vercauteren09] for SSD-driven registration ( eq. 4 in [Vercauteren09] ) using the EM algorithm [Arce14] to handle multi-modality images. In this case, $\sigma_i$ in eq. 4 of [Vercauteren] is estimated using the EM algorithm, while in the original version of diffeomorphic demons it is estimated by the difference between the image values at each pixel. Parameters ---------- delta_field : array, shape (R, C) contains, at each pixel, the difference between the moving image (warped under the current deformation s(. , .) ) J and the static image I: delta_field[i,j] = J(s(i,j)) - I(i,j). The order is important, changing to delta_field[i,j] = I(i,j) - J(s(i,j)) yields the backward demons step warping the static image towards the moving, which may not be the intended behavior unless the 'gradient_moving' passed corresponds to the gradient of the static image sigma_sq_field : array, shape (R, C) contains, at each pixel (i, j), the estimated variance (not std) of the hidden variable associated to the intensity at static[i,j] (which must have been previously quantized) gradient_moving : array, shape (R, C, 2) the gradient of the moving image sigma_sq_x : float parameter controlling the amount of regularization. It corresponds to $\sigma_x^2$ in algorithm 1 of Vercauteren et al.[2] out : array, shape (R, C, 2) the resulting demons step will be written to this array Returns ------- demons_step : array, shape (R, C, 2) the demons step to be applied for updating the current displacement field energy : float the current em energy (before applying the returned demons_step) References ---------- [Arce14] Arce-santana, E., Campos-delgado, D. U., & Vigueras-g, F. (2014). Non-rigid Multimodal Image Registration Based on the Expectation-Maximization Algorithm, (168140), 36-47. [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ cdef: cnp.npy_intp nr = delta_field.shape[0] cnp.npy_intp nc = delta_field.shape[1] cnp.npy_intp i, j double delta, sigma_sq_i, nrm2, energy, den, prod if out is None: out = np.zeros((nr, nc, 2), dtype=np.asarray(delta_field).dtype) with nogil: energy = 0 for i in range(nr): for j in range(nc): sigma_sq_i = sigma_sq_field[i,j] delta = delta_field[i,j] energy += (delta**2) if dpy_isinf(sigma_sq_i) != 0: out[i, j, 0], out[i, j, 1] = 0, 0 else: nrm2 = (gradient_moving[i, j, 0]**2 + gradient_moving[i, j, 1]**2) if(sigma_sq_i == 0): if nrm2 == 0: out[i, j, 0], out[i, j, 1] = 0, 0 else: out[i, j, 0] = (delta * gradient_moving[i, j, 0] / nrm2) out[i, j, 1] = (delta * gradient_moving[i, j, 1] / nrm2) else: den = (sigma_sq_x * nrm2 + sigma_sq_i) prod = sigma_sq_x * delta out[i, j, 0] = prod * gradient_moving[i, j, 0] / den out[i, j, 1] = prod * gradient_moving[i, j, 1] / den return out, energy @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_em_demons_step_3d(floating[:,:,:] delta_field, floating[:,:,:] sigma_sq_field, floating[:,:,:,:] gradient_moving, double sigma_sq_x, floating[:,:,:,:] out): r"""Demons step for EM metric in 3D Computes the demons step [Vercauteren09] for SSD-driven registration ( eq. 4 in [Vercauteren09] ) using the EM algorithm [Arce14] to handle multi-modality images. In this case, $\sigma_i$ in eq. 4 of [Vercauteren09] is estimated using the EM algorithm, while in the original version of diffeomorphic demons it is estimated by the difference between the image values at each pixel. Parameters ---------- delta_field : array, shape (S, R, C) contains, at each pixel, the difference between the moving image (warped under the current deformation s ) J and the static image I: delta_field[k,i,j] = J(s(k,i,j)) - I(k,i,j). The order is important, changing to delta_field[k,i,j] = I(k,i,j) - J(s(k,i,j)) yields the backward demons step warping the static image towards the moving, which may not be the intended behavior unless the 'gradient_moving' passed corresponds to the gradient of the static image sigma_sq_field : array, shape (S, R, C) contains, at each pixel (k, i, j), the estimated variance (not std) of the hidden variable associated to the intensity at static[k,i,j] (which must have been previously quantized) gradient_moving : array, shape (S, R, C, 2) the gradient of the moving image sigma_sq_x : float parameter controlling the amount of regularization. It corresponds to $\sigma_x^2$ in algorithm 1 of Vercauteren et al.[2]. out : array, shape (S, R, C, 2) the resulting demons step will be written to this array Returns ------- demons_step : array, shape (S, R, C, 3) the demons step to be applied for updating the current displacement field energy : float the current em energy (before applying the returned demons_step) References ---------- [Arce14] Arce-santana, E., Campos-delgado, D. U., & Vigueras-g, F. (2014). Non-rigid Multimodal Image Registration Based on the Expectation-Maximization Algorithm, (168140), 36-47. [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ cdef: cnp.npy_intp ns = delta_field.shape[0] cnp.npy_intp nr = delta_field.shape[1] cnp.npy_intp nc = delta_field.shape[2] cnp.npy_intp i, j, k double delta, sigma_sq_i, nrm2, energy, den if out is None: out = np.zeros((ns, nr, nc, 3), dtype=np.asarray(delta_field).dtype) with nogil: energy = 0 for k in range(ns): for i in range(nr): for j in range(nc): sigma_sq_i = sigma_sq_field[k,i,j] delta = delta_field[k,i,j] energy += (delta**2) if dpy_isinf(sigma_sq_i) != 0: out[k, i, j, 0] = 0 out[k, i, j, 1] = 0 out[k, i, j, 2] = 0 else: nrm2 = (gradient_moving[k, i, j, 0]**2 + gradient_moving[k, i, j, 1]**2 + gradient_moving[k, i, j, 2]**2) if(sigma_sq_i == 0): if nrm2 == 0: out[k, i, j, 0] = 0 out[k, i, j, 1] = 0 out[k, i, j, 2] = 0 else: out[k, i, j, 0] = (delta * gradient_moving[k, i, j, 0] / nrm2) out[k, i, j, 1] = (delta * gradient_moving[k, i, j, 1] / nrm2) out[k, i, j, 2] = (delta * gradient_moving[k, i, j, 2] / nrm2) else: den = (sigma_sq_x * nrm2 + sigma_sq_i) out[k, i, j, 0] = (sigma_sq_x * delta * gradient_moving[k, i, j, 0] / den) out[k, i, j, 1] = (sigma_sq_x * delta * gradient_moving[k, i, j, 1] / den) out[k, i, j, 2] = (sigma_sq_x * delta * gradient_moving[k, i, j, 2] / den) return out, energy dipy-0.10.1/dipy/align/fused_types.pxd000066400000000000000000000001201263041327500176400ustar00rootroot00000000000000cimport cython ctypedef cython.floating floating ctypedef cython.numeric number dipy-0.10.1/dipy/align/imaffine.py000066400000000000000000001476211263041327500167430ustar00rootroot00000000000000""" Affine image registration module consisting of the following classes: AffineMap: encapsulates the necessary information to perform affine transforms between two domains, defined by a `static` and a `moving` image. The `domain` of the transform is the set of points in the `static` image's grid, and the `codomain` is the set of points in the `moving` image. When we call the `transform` method, `AffineMap` maps each point `x` of the domain (`static` grid) to the codomain (`moving` grid) and interpolates the `moving` image at that point to obtain the intensity value to be placed at `x` in the resulting grid. The `transform_inverse` method performs the opposite operation mapping points in the codomain to points in the domain. ParzenJointHistogram: computes the marginal and joint distributions of intensities of a pair of images, using Parzen windows [Parzen62] with a cubic spline kernel, as proposed by Mattes et al. [Mattes03]. It also computes the gradient of the joint histogram w.r.t. the parameters of a given transform. MutualInformationMetric: computes the value and gradient of the mutual information metric the way `Optimizer` needs them. That is, given a set of transform parameters, it will use `ParzenJointHistogram` to compute the value and gradient of the joint intensity histogram evaluated at the given parameters, and evaluate the the value and gradient of the histogram's mutual information. AffineRegistration: it runs the multi-resolution registration, putting all the pieces together. It needs to create the scale space of the images and run the multi-resolution registration by using the Metric and the Optimizer at each level of the Gaussian pyramid. At each level, it will setup the metric to compute value and gradient of the metric with the input images with different levels of smoothing. References ---------- [Parzen62] E. Parzen. On the estimation of a probability density function and the mode. Annals of Mathematical Statistics, 33(3), 1065-1076, 1962. [Mattes03] Mattes, D., Haynor, D. R., Vesselle, H., Lewellen, T. K., & Eubank, W. PET-CT image registration in the chest using free-form deformations. IEEE Transactions on Medical Imaging, 22(1), 120-8, 2003. """ import numpy as np import numpy.linalg as npl import scipy.ndimage as ndimage from ..core.optimize import Optimizer from ..core.optimize import SCIPY_LESS_0_12 from . import vector_fields as vf from . import VerbosityLevels from .parzenhist import (ParzenJointHistogram, sample_domain_regular, compute_parzen_mi) from .imwarp import (get_direction_and_spacings, ScaleSpace) from .scalespace import IsotropicScaleSpace from warnings import warn _interp_options = ['nearest', 'linear'] _transform_method = {} _transform_method[(2, 'nearest')] = vf.transform_2d_affine_nn _transform_method[(3, 'nearest')] = vf.transform_3d_affine_nn _transform_method[(2, 'linear')] = vf.transform_2d_affine _transform_method[(3, 'linear')] = vf.transform_3d_affine class AffineInversionError(Exception): pass class AffineMap(object): def __init__(self, affine, domain_grid_shape=None, domain_grid2world=None, codomain_grid_shape=None, codomain_grid2world=None): """ AffineMap Implements an affine transformation whose domain is given by `domain_grid` and `domain_grid2world`, and whose co-domain is given by `codomain_grid` and `codomain_grid2world`. The actual transform is represented by the `affine` matrix, which operate in world coordinates. Therefore, to transform a moving image towards a static image, we first map each voxel (i,j,k) of the static image to world coordinates (x,y,z) by applying `domain_grid2world`. Then we apply the `affine` transform to (x,y,z) obtaining (x', y', z') in moving image's world coordinates. Finally, (x', y', z') is mapped to voxel coordinates (i', j', k') in the moving image by multiplying (x', y', z') by the inverse of `codomain_grid2world`. The `codomain_grid_shape` is used analogously to transform the static image towards the moving image when calling `transform_inverse`. If the domain/co-domain information is not provided (None) then the sampling information needs to be specified each time the `transform` or `transform_inverse` is called to transform images. Note that such sampling information is not necessary to transform points defined in physical space, such as stream lines. Parameters ---------- affine : array, shape (dim + 1, dim + 1) the matrix defining the affine transform, where `dim` is the dimension of the space this map operates in (2 for 2D images, 3 for 3D images). If None, then `self` represents the identity transformation. domain_grid_shape : sequence, shape (dim,), optional the shape of the default domain sampling grid. When `transform` is called to transform an image, the resulting image will have this shape, unless a different sampling information is provided. If None, then the sampling grid shape must be specified each time the `transform` method is called. domain_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-world transform associated with the domain grid. If None (the default), then the grid-to-world transform is assumed to be the identity. codomain_grid_shape : sequence of integers, shape (dim,) the shape of the default co-domain sampling grid. When `transform_inverse` is called to transform an image, the resulting image will have this shape, unless a different sampling information is provided. If None (the default), then the sampling grid shape must be specified each time the `transform_inverse` method is called. codomain_grid2world : array, shape (dim + 1, dim + 1) the grid-to-world transform associated with the co-domain grid. If None (the default), then the grid-to-world transform is assumed to be the identity. """ self.set_affine(affine) self.domain_shape = domain_grid_shape self.domain_grid2world = domain_grid2world self.codomain_shape = codomain_grid_shape self.codomain_grid2world = codomain_grid2world def set_affine(self, affine): """ Sets the affine transform (operating in physical space) Also sets `self.affine_inv` - the inverse of `affine`, or None if there is no inverse. Parameters ---------- affine : array, shape (dim + 1, dim + 1) the matrix representing the affine transform operating in physical space. The domain and co-domain information remains unchanged. If None, then `self` represents the identity transformation. """ self.affine = affine self.affine_inv = None if self.affine is None: return if not np.all(np.isfinite(affine)): raise AffineInversionError('Affine contains invalid elements') try: self.affine_inv = npl.inv(affine) except npl.LinAlgError: raise AffineInversionError('Affine cannot be inverted') def _apply_transform(self, image, interp='linear', image_grid2world=None, sampling_grid_shape=None, sampling_grid2world=None, resample_only=False, apply_inverse=False): """ Transforms the input image applying this affine transform This is a generic function to transform images using either this (direct) transform or its inverse. If applying the direct transform (`apply_inverse=False`): by default, the transformed image is sampled at a grid defined by `self.domain_shape` and `self.domain_grid2world`. If applying the inverse transform (`apply_inverse=True`): by default, the transformed image is sampled at a grid defined by `self.codomain_shape` and `self.codomain_grid2world`. If the sampling information was not provided at initialization of this transform then `sampling_grid_shape` is mandatory. Parameters ---------- image : array, shape (X, Y) or (X, Y, Z) the image to be transformed interp : string, either 'linear' or 'nearest' the type of interpolation to be used, either 'linear' (for k-linear interpolation) or 'nearest' for nearest neighbor image_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-world transform associated with `image`. If None (the default), then the grid-to-world transform is assumed to be the identity. sampling_grid_shape : sequence, shape (dim,), optional the shape of the grid where the transformed image must be sampled. If None (the default), then `self.domain_shape` is used instead (which must have been set at initialization, otherwise an exception will be raised). sampling_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-world transform associated with the sampling grid (specified by `sampling_grid_shape`, or by default `self.domain_shape`). If None (the default), then the grid-to-world transform is assumed to be the identity. resample_only : Boolean, optional If False (the default) the affine transform is applied normally. If True, then the affine transform is not applied, and the input image is just re-sampled on the domain grid of this transform. apply_inverse : Boolean, optional If False (the default) the image is transformed from the codomain of this transform to its domain using the (direct) affine transform. Otherwise, the image is transformed from the domain of this transform to its codomain using the (inverse) affine transform. Returns ------- transformed : array, shape `sampling_grid_shape` or `self.domain_shape` the transformed image, sampled at the requested grid """ # Verify valid interpolation requested if interp not in _interp_options: raise ValueError('Unknown interpolation method: %s' % (interp,)) # Obtain sampling grid if sampling_grid_shape is None: if apply_inverse: sampling_grid_shape = self.codomain_shape else: sampling_grid_shape = self.domain_shape if sampling_grid_shape is None: msg = 'Unknown sampling info. Provide a valid sampling_grid_shape' raise ValueError(msg) dim = len(sampling_grid_shape) shape = np.array(sampling_grid_shape, dtype=np.int32) # Verify valid image dimension img_dim = len(image.shape) if img_dim < 2 or img_dim > 3: raise ValueError('Undefined transform for dim: %d' % (img_dim,)) # Obtain grid-to-world transform for sampling grid if sampling_grid2world is None: if apply_inverse: sampling_grid2world = self.codomain_grid2world else: sampling_grid2world = self.domain_grid2world if sampling_grid2world is None: sampling_grid2world = np.eye(dim + 1) # Obtain world-to-grid transform for input image if image_grid2world is None: if apply_inverse: image_grid2world = self.domain_grid2world else: image_grid2world = self.codomain_grid2world if image_grid2world is None: image_grid2world = np.eye(dim + 1) image_world2grid = npl.inv(image_grid2world) # Compute the transform from sampling grid to input image grid if apply_inverse: aff = self.affine_inv else: aff = self.affine if (aff is None) or resample_only: comp = image_world2grid.dot(sampling_grid2world) else: comp = image_world2grid.dot(aff.dot(sampling_grid2world)) # Transform the input image if interp == 'linear': image = image.astype(np.float64) transformed = _transform_method[(dim, interp)](image, shape, comp) return transformed def transform(self, image, interp='linear', image_grid2world=None, sampling_grid_shape=None, sampling_grid2world=None, resample_only=False): """ Transforms the input image from co-domain to domain space By default, the transformed image is sampled at a grid defined by `self.domain_shape` and `self.domain_grid2world`. If such information was not provided then `sampling_grid_shape` is mandatory. Parameters ---------- image : array, shape (X, Y) or (X, Y, Z) the image to be transformed interp : string, either 'linear' or 'nearest' the type of interpolation to be used, either 'linear' (for k-linear interpolation) or 'nearest' for nearest neighbor image_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-world transform associated with `image`. If None (the default), then the grid-to-world transform is assumed to be the identity. sampling_grid_shape : sequence, shape (dim,), optional the shape of the grid where the transformed image must be sampled. If None (the default), then `self.codomain_shape` is used instead (which must have been set at initialization, otherwise an exception will be raised). sampling_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-world transform associated with the sampling grid (specified by `sampling_grid_shape`, or by default `self.codomain_shape`). If None (the default), then the grid-to-world transform is assumed to be the identity. resample_only : Boolean, optional If False (the default) the affine transform is applied normally. If True, then the affine transform is not applied, and the input image is just re-sampled on the domain grid of this transform. Returns ------- transformed : array, shape `sampling_grid_shape` or `self.codomain_shape` the transformed image, sampled at the requested grid """ transformed = self._apply_transform(image, interp, image_grid2world, sampling_grid_shape, sampling_grid2world, resample_only, apply_inverse=False) return np.array(transformed) def transform_inverse(self, image, interp='linear', image_grid2world=None, sampling_grid_shape=None, sampling_grid2world=None, resample_only=False): """ Transforms the input image from domain to co-domain space By default, the transformed image is sampled at a grid defined by `self.codomain_shape` and `self.codomain_grid2world`. If such information was not provided then `sampling_grid_shape` is mandatory. Parameters ---------- image : array, shape (X, Y) or (X, Y, Z) the image to be transformed interp : string, either 'linear' or 'nearest' the type of interpolation to be used, either 'linear' (for k-linear interpolation) or 'nearest' for nearest neighbor image_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-world transform associated with `image`. If None (the default), then the grid-to-world transform is assumed to be the identity. sampling_grid_shape : sequence, shape (dim,), optional the shape of the grid where the transformed image must be sampled. If None (the default), then `self.codomain_shape` is used instead (which must have been set at initialization, otherwise an exception will be raised). sampling_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-world transform associated with the sampling grid (specified by `sampling_grid_shape`, or by default `self.codomain_shape`). If None (the default), then the grid-to-world transform is assumed to be the identity. resample_only : Boolean, optional If False (the default) the affine transform is applied normally. If True, then the affine transform is not applied, and the input image is just re-sampled on the domain grid of this transform. Returns ------- transformed : array, shape `sampling_grid_shape` or `self.codomain_shape` the transformed image, sampled at the requested grid """ transformed = self._apply_transform(image, interp, image_grid2world, sampling_grid_shape, sampling_grid2world, resample_only, apply_inverse=True) return np.array(transformed) class MutualInformationMetric(object): def __init__(self, nbins=32, sampling_proportion=None): r""" Initializes an instance of the Mutual Information metric This class implements the methods required by Optimizer to drive the registration process. Parameters ---------- nbins : int, optional the number of bins to be used for computing the intensity histograms. The default is 32. sampling_proportion : None or float in interval (0, 1], optional There are two types of sampling: dense and sparse. Dense sampling uses all voxels for estimating the (joint and marginal) intensity histograms, while sparse sampling uses a subset of them. If `sampling_proportion` is None, then dense sampling is used. If `sampling_proportion` is a floating point value in (0,1] then sparse sampling is used, where `sampling_proportion` specifies the proportion of voxels to be used. The default is None. Notes ----- Since we use linear interpolation, images are not, in general, differentiable at exact voxel coordinates, but they are differentiable between voxel coordinates. When using sparse sampling, selected voxels are slightly moved by adding a small random displacement within one voxel to prevent sampling points from being located exactly at voxel coordinates. When using dense sampling, this random displacement is not applied. """ self.histogram = ParzenJointHistogram(nbins) self.sampling_proportion = sampling_proportion self.metric_val = None self.metric_grad = None def setup(self, transform, static, moving, static_grid2world=None, moving_grid2world=None, starting_affine=None): r""" Prepares the metric to compute intensity densities and gradients The histograms will be setup to compute probability densities of intensities within the minimum and maximum values of `static` and `moving` Parameters ---------- transform: instance of Transform the transformation with respect to whose parameters the gradient must be computed static : array, shape (S, R, C) or (R, C) static image moving : array, shape (S', R', C') or (R', C') moving image. The dimensions of the static (S, R, C) and moving (S', R', C') images do not need to be the same. static_grid2world : array (dim+1, dim+1), optional the grid-to-space transform of the static image. The default is None, implying the transform is the identity. moving_grid2world : array (dim+1, dim+1) the grid-to-space transform of the moving image. The default is None, implying the spacing along all axes is 1. starting_affine : array, shape (dim+1, dim+1), optional the pre-aligning matrix (an affine transform) that roughly aligns the moving image towards the static image. If None, no pre-alignment is performed. If a pre-alignment matrix is available, it is recommended to provide this matrix as `starting_affine` instead of manually transforming the moving image to reduce interpolation artifacts. The default is None, implying no pre-alignment is performed. """ n = transform.get_number_of_parameters() self.metric_grad = np.zeros(n, dtype=np.float64) self.dim = len(static.shape) if moving_grid2world is None: moving_grid2world = np.eye(self.dim + 1) if static_grid2world is None: static_grid2world = np.eye(self.dim + 1) self.transform = transform self.static = np.array(static).astype(np.float64) self.moving = np.array(moving).astype(np.float64) self.static_grid2world = static_grid2world self.static_world2grid = npl.inv(static_grid2world) self.moving_grid2world = moving_grid2world self.moving_world2grid = npl.inv(moving_grid2world) self.static_direction, self.static_spacing = \ get_direction_and_spacings(static_grid2world, self.dim) self.moving_direction, self.moving_spacing = \ get_direction_and_spacings(moving_grid2world, self.dim) self.starting_affine = starting_affine P = np.eye(self.dim + 1) if self.starting_affine is not None: P = self.starting_affine self.affine_map = AffineMap(P, static.shape, static_grid2world, moving.shape, moving_grid2world) if self.dim == 2: self.interp_method = vf.interpolate_scalar_2d else: self.interp_method = vf.interpolate_scalar_3d if self.sampling_proportion is None: self.samples = None self.ns = 0 else: k = int(np.ceil(1.0 / self.sampling_proportion)) shape = np.array(static.shape, dtype=np.int32) self.samples = sample_domain_regular(k, shape, static_grid2world) self.samples = np.array(self.samples) self.ns = self.samples.shape[0] # Add a column of ones (homogeneous coordinates) self.samples = np.hstack((self.samples, np.ones(self.ns)[:, None])) if self.starting_affine is None: self.samples_prealigned = self.samples else: self.samples_prealigned =\ self.starting_affine.dot(self.samples.T).T # Sample the static image static_p = self.static_world2grid.dot(self.samples.T).T static_p = static_p[..., :self.dim] self.static_vals, inside = self.interp_method(static, static_p) self.static_vals = np.array(self.static_vals, dtype=np.float64) self.histogram.setup(self.static, self.moving) def _update_histogram(self): r""" Updates the histogram according to the current affine transform The current affine transform is given by `self.affine_map`, which must be set before calling this method. Returns ------- static_values: array, shape(n,) if sparse sampling is being used, array, shape(S, R, C) or (R, C) if dense sampling the intensity values corresponding to the static image used to update the histogram. If sparse sampling is being used, then it is simply a sequence of scalars, obtained by sampling the static image at the `n` sampling points. If dense sampling is being used, then the intensities are given directly by the static image, whose shape is (S, R, C) in the 3D case or (R, C) in the 2D case. moving_values: array, shape(n,) if sparse sampling is being used, array, shape(S, R, C) or (R, C) if dense sampling the intensity values corresponding to the moving image used to update the histogram. If sparse sampling is being used, then it is simply a sequence of scalars, obtained by sampling the moving image at the `n` sampling points (mapped to the moving space by the current affine transform). If dense sampling is being used, then the intensities are given by the moving imaged linearly transformed towards the static image by the current affine, which results in an image of the same shape as the static image. """ static_values = None moving_values = None if self.sampling_proportion is None: # Dense case static_values = self.static moving_values = self.affine_map.transform(self.moving) self.histogram.update_pdfs_dense(static_values, moving_values) else: # Sparse case sp_to_moving = self.moving_world2grid.dot(self.affine_map.affine) pts = sp_to_moving.dot(self.samples.T).T # Points on moving grid pts = pts[..., :self.dim] self.moving_vals, inside = self.interp_method(self.moving, pts) self.moving_vals = np.array(self.moving_vals) static_values = self.static_vals moving_values = self.moving_vals self.histogram.update_pdfs_sparse(static_values, moving_values) return static_values, moving_values def _update_mutual_information(self, params, update_gradient=True): r""" Updates marginal and joint distributions and the joint gradient The distributions are updated according to the static and transformed images. The transformed image is precisely the moving image after transforming it by the transform defined by the `params` parameters. The gradient of the joint PDF is computed only if update_gradient is True. Parameters ---------- params : array, shape (n,) the parameter vector of the transform currently used by the metric (the transform name is provided when self.setup is called), n is the number of parameters of the transform update_gradient : Boolean, optional if True, the gradient of the joint PDF will also be computed, otherwise, only the marginal and joint PDFs will be computed. The default is True. """ # Get the matrix associated with the `params` parameter vector current_affine = self.transform.param_to_matrix(params) # Get the static-to-prealigned matrix (only needed for the MI gradient) static2prealigned = self.static_grid2world if self.starting_affine is not None: current_affine = current_affine.dot(self.starting_affine) static2prealigned = self.starting_affine.dot(static2prealigned) self.affine_map.set_affine(current_affine) # Update the histogram with the current joint intensities static_values, moving_values = self._update_histogram() H = self.histogram # Shortcut to `self.histogram` grad = None # Buffer to write the MI gradient into (if needed) if update_gradient: grad = self.metric_grad # Compute the gradient of the joint PDF w.r.t. parameters if self.sampling_proportion is None: # Dense case # Compute the gradient of moving img. at physical points # associated with the >>static image's grid<< cells # The image gradient must be eval. at current moved points grid_to_world = current_affine.dot(self.static_grid2world) mgrad, inside = vf.gradient(self.moving, self.moving_world2grid, self.moving_spacing, self.static.shape, grid_to_world) # The Jacobian must be evaluated at the pre-aligned points H.update_gradient_dense(params, self.transform, static_values, moving_values, static2prealigned, mgrad) else: # Sparse case # Compute the gradient of moving at the sampling points # which are already given in physical space coordinates pts = current_affine.dot(self.samples.T).T # Moved points mgrad, inside = vf.sparse_gradient(self.moving, self.moving_world2grid, self.moving_spacing, pts) # The Jacobian must be evaluated at the pre-aligned points pts = self.samples_prealigned[..., :self.dim] H.update_gradient_sparse(params, self.transform, static_values, moving_values, pts, mgrad) # Call the cythonized MI computation with self.histogram fields self.metric_val = compute_parzen_mi(H.joint, H.joint_grad, H.smarginal, H.mmarginal, grad) def distance(self, params): r""" Numeric value of the negative Mutual Information We need to change the sign so we can use standard minimization algorithms. Parameters ---------- params : array, shape (n,) the parameter vector of the transform currently used by the metric (the transform name is provided when self.setup is called), n is the number of parameters of the transform Returns ------- neg_mi : float the negative mutual information of the input images after transforming the moving image by the currently set transform with `params` parameters """ try: self._update_mutual_information(params, False) except AffineInversionError: return np.inf return -1 * self.metric_val def gradient(self, params): r""" Numeric value of the metric's gradient at the given parameters Parameters ---------- params : array, shape (n,) the parameter vector of the transform currently used by the metric (the transform name is provided when self.setup is called), n is the number of parameters of the transform Returns ------- grad : array, shape (n,) the gradient of the negative Mutual Information """ try: self._update_mutual_information(params, True) except AffineInversionError: return 0 * self.metric_grad return -1 * self.metric_grad def distance_and_gradient(self, params): r""" Numeric value of the metric and its gradient at given parameters Parameters ---------- params : array, shape (n,) the parameter vector of the transform currently used by the metric (the transform name is provided when self.setup is called), n is the number of parameters of the transform Returns ------- neg_mi : float the negative mutual information of the input images after transforming the moving image by the currently set transform with `params` parameters neg_mi_grad : array, shape (n,) the gradient of the negative Mutual Information """ try: self._update_mutual_information(params, True) except AffineInversionError: return np.inf, 0 * self.metric_grad return -1 * self.metric_val, -1 * self.metric_grad class AffineRegistration(object): def __init__(self, metric=None, level_iters=None, sigmas=None, factors=None, method='L-BFGS-B', ss_sigma_factor=None, options=None): r""" Initializes an instance of the AffineRegistration class Parameters ---------- metric : None or object, optional an instance of a metric. The default is None, implying the Mutual Information metric with default settings. level_iters : sequence, optional the number of iterations at each scale of the scale space. `level_iters[0]` corresponds to the coarsest scale, `level_iters[-1]` the finest, where n is the length of the sequence. By default, a 3-level scale space with iterations sequence equal to [10000, 1000, 100] will be used. sigmas : sequence of floats, optional custom smoothing parameter to build the scale space (one parameter for each scale). By default, the sequence of sigmas will be [3, 1, 0]. factors : sequence of floats, optional custom scale factors to build the scale space (one factor for each scale). By default, the sequence of factors will be [4, 2, 1]. method : string, optional optimization method to be used. If Scipy version < 0.12, then only L-BFGS-B is available. Otherwise, `method` can be any gradient-based method available in `dipy.core.Optimize`: CG, BFGS, Newton-CG, dogleg or trust-ncg. The default is 'L-BFGS-B'. ss_sigma_factor : float, optional If None, this parameter is not used and an isotropic scale space with the given `factors` and `sigmas` will be built. If not None, an anisotropic scale space will be used by automatically selecting the smoothing sigmas along each axis according to the voxel dimensions of the given image. The `ss_sigma_factor` is used to scale the automatically computed sigmas. For example, in the isotropic case, the sigma of the kernel will be $factor * (2 ^ i)$ where $i = 1, 2, ..., n_scales - 1$ is the scale (the finest resolution image $i=0$ is never smoothed). The default is None. options : dict, optional extra optimization options. The default is None, implying no extra options are passed to the optimizer. """ self.metric = metric if self.metric is None: self.metric = MutualInformationMetric() if level_iters is None: level_iters = [10000, 1000, 100] self.level_iters = level_iters self.levels = len(level_iters) if self.levels == 0: raise ValueError('The iterations sequence cannot be empty') self.options = options self.method = method if ss_sigma_factor is not None: self.use_isotropic = False self.ss_sigma_factor = ss_sigma_factor else: self.use_isotropic = True if factors is None: factors = [4, 2, 1] if sigmas is None: sigmas = [3, 1, 0] self.factors = factors self.sigmas = sigmas self.verbosity = VerbosityLevels.STATUS def _init_optimizer(self, static, moving, transform, params0, static_grid2world, moving_grid2world, starting_affine): r"""Initializes the registration optimizer Initializes the optimizer by computing the scale space of the input images Parameters ---------- static : array, shape (S, R, C) or (R, C) the image to be used as reference during optimization. moving : array, shape (S', R', C') or (R', C') the image to be used as "moving" during optimization. The dimensions of the static (S, R, C) and moving (S', R', C') images do not need to be the same. transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed params0 : array, shape (n,) parameters from which to start the optimization. If None, the optimization will start at the identity transform. n is the number of parameters of the specified transformation. static_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation associated with the static image moving_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation associated with the moving image starting_affine : string, or matrix, or None If string: 'mass': align centers of gravity 'voxel-origin': align physical coordinates of voxel (0,0,0) 'centers': align physical coordinates of central voxels If matrix: array, shape (dim+1, dim+1) If None: Start from identity """ self.dim = len(static.shape) self.transform = transform n = transform.get_number_of_parameters() self.nparams = n if params0 is None: params0 = self.transform.get_identity_parameters() self.params0 = params0 if starting_affine is None: self.starting_affine = np.eye(self.dim + 1) elif isinstance(starting_affine, str): if starting_affine == 'mass': affine_map = transform_centers_of_mass(static, static_grid2world, moving, moving_grid2world) self.starting_affine = affine_map.affine elif starting_affine == 'voxel-origin': affine_map = transform_origins(static, static_grid2world, moving, moving_grid2world) self.starting_affine = affine_map.affine elif starting_affine == 'centers': affine_map = transform_geometric_centers(static, static_grid2world, moving, moving_grid2world) self.starting_affine = affine_map.affine else: raise ValueError('Invalid starting_affine strategy') elif (isinstance(starting_affine, np.ndarray) and starting_affine.shape >= (self.dim, self.dim + 1)): self.starting_affine = starting_affine else: raise ValueError('Invalid starting_affine matrix') # Extract information from affine matrices to create the scale space static_direction, static_spacing = \ get_direction_and_spacings(static_grid2world, self.dim) moving_direction, moving_spacing = \ get_direction_and_spacings(moving_grid2world, self.dim) static = ((static.astype(np.float64) - static.min()) / (static.max() - static.min())) moving = ((moving.astype(np.float64) - moving.min()) / (moving.max() - moving.min())) # Build the scale space of the input images if self.use_isotropic: self.moving_ss = IsotropicScaleSpace(moving, self.factors, self.sigmas, moving_grid2world, moving_spacing, False) self.static_ss = IsotropicScaleSpace(static, self.factors, self.sigmas, static_grid2world, static_spacing, False) else: self.moving_ss = ScaleSpace(moving, self.levels, moving_grid2world, moving_spacing, self.ss_sigma_factor, False) self.static_ss = ScaleSpace(static, self.levels, static_grid2world, static_spacing, self.ss_sigma_factor, False) def optimize(self, static, moving, transform, params0, static_grid2world=None, moving_grid2world=None, starting_affine=None): r''' Starts the optimization process Parameters ---------- static : array, shape (S, R, C) or (R, C) the image to be used as reference during optimization. moving : array, shape (S', R', C') or (R', C') the image to be used as "moving" during optimization. It is necessary to pre-align the moving image to ensure its domain lies inside the domain of the deformation fields. This is assumed to be accomplished by "pre-aligning" the moving image towards the static using an affine transformation given by the 'starting_affine' matrix transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed params0 : array, shape (n,) parameters from which to start the optimization. If None, the optimization will start at the identity transform. n is the number of parameters of the specified transformation. static_grid2world : array, shape (dim+1, dim+1), optional the voxel-to-space transformation associated with the static image. The default is None, implying the transform is the identity. moving_grid2world : array, shape (dim+1, dim+1), optional the voxel-to-space transformation associated with the moving image. The default is None, implying the transform is the identity. starting_affine : string, or matrix, or None, optional If string: 'mass': align centers of gravity 'voxel-origin': align physical coordinates of voxel (0,0,0) 'centers': align physical coordinates of central voxels If matrix: array, shape (dim+1, dim+1). If None: Start from identity. The default is None. Returns ------- affine_map : instance of AffineMap the affine resulting affine transformation ''' self._init_optimizer(static, moving, transform, params0, static_grid2world, moving_grid2world, starting_affine) del starting_affine # Now we must refer to self.starting_affine # Multi-resolution iterations original_static_shape = self.static_ss.get_image(0).shape original_static_grid2world = self.static_ss.get_affine(0) original_moving_shape = self.moving_ss.get_image(0).shape original_moving_grid2world = self.moving_ss.get_affine(0) affine_map = AffineMap(None, original_static_shape, original_static_grid2world, original_moving_shape, original_moving_grid2world) for level in range(self.levels - 1, -1, -1): self.current_level = level max_iter = self.level_iters[-1 - level] if self.verbosity >= VerbosityLevels.STATUS: print('Optimizing level %d [max iter: %d]' % (level, max_iter)) # Resample the smooth static image to the shape of this level smooth_static = self.static_ss.get_image(level) current_static_shape = self.static_ss.get_domain_shape(level) current_static_grid2world = self.static_ss.get_affine(level) current_affine_map = AffineMap(None, current_static_shape, current_static_grid2world, original_static_shape, original_static_grid2world) current_static = current_affine_map.transform(smooth_static) # The moving image is full resolution current_moving_grid2world = original_moving_grid2world current_moving = self.moving_ss.get_image(level) # Prepare the metric for iterations at this resolution self.metric.setup(transform, current_static, current_moving, current_static_grid2world, current_moving_grid2world, self.starting_affine) # Optimize this level if self.options is None: self.options = {'gtol': 1e-4, 'disp': False} if self.method == 'L-BFGS-B': self.options['maxfun'] = max_iter else: self.options['maxiter'] = max_iter if SCIPY_LESS_0_12: # Older versions don't expect value and gradient from # the same function opt = Optimizer(self.metric.distance, self.params0, method=self.method, jac=self.metric.gradient, options=self.options) else: opt = Optimizer(self.metric.distance_and_gradient, self.params0, method=self.method, jac=True, options=self.options) params = opt.xopt # Update starting_affine matrix with optimal parameters T = self.transform.param_to_matrix(params) self.starting_affine = T.dot(self.starting_affine) # Start next iteration at identity self.params0 = self.transform.get_identity_parameters() affine_map.set_affine(self.starting_affine) return affine_map def align_centers_of_mass(static, static_grid2world, moving, moving_grid2world): msg = "This function is deprecated please use" msg += " dipy.align.imaffine.transform_centers_of_mass instead." warn(msg) return transform_centers_of_mass(static, static_grid2world, moving, moving_grid2world) def align_geometric_centers(static, static_grid2world, moving, moving_grid2world): msg = "This function is deprecated please use" msg += " dipy.align.imaffine.transform_geometric_centers instead." warn(msg) return transform_geometric_centers(static, static_grid2world, moving, moving_grid2world) def align_origins(static, static_grid2world, moving, moving_grid2world): msg = "This function is deprecated please use" msg += " dipy.align.imaffine.transform_origins instead." warn(msg) return transform_origins(static, static_grid2world, moving, moving_grid2world) def transform_centers_of_mass(static, static_grid2world, moving, moving_grid2world): r""" Transformation to align the center of mass of the input images Parameters ---------- static : array, shape (S, R, C) static image static_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation of the static image moving : array, shape (S, R, C) moving image moving_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation of the moving image Returns ------- affine_map : instance of AffineMap the affine transformation (translation only, in this case) aligning the center of mass of the moving image towards the one of the static image """ dim = len(static.shape) if static_grid2world is None: static_grid2world = np.eye(dim + 1) if moving_grid2world is None: moving_grid2world = np.eye(dim + 1) c_static = ndimage.measurements.center_of_mass(np.array(static)) c_static = static_grid2world.dot(c_static+(1,)) c_moving = ndimage.measurements.center_of_mass(np.array(moving)) c_moving = moving_grid2world.dot(c_moving+(1,)) transform = np.eye(dim + 1) transform[:dim, dim] = (c_moving - c_static)[:dim] affine_map = AffineMap(transform, static.shape, static_grid2world, moving.shape, moving_grid2world) return affine_map def transform_geometric_centers(static, static_grid2world, moving, moving_grid2world): r""" Transformation to align the geometric center of the input images With "geometric center" of a volume we mean the physical coordinates of its central voxel Parameters ---------- static : array, shape (S, R, C) static image static_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation of the static image moving : array, shape (S, R, C) moving image moving_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation of the moving image Returns ------- affine_map : instance of AffineMap the affine transformation (translation only, in this case) aligning the geometric center of the moving image towards the one of the static image """ dim = len(static.shape) if static_grid2world is None: static_grid2world = np.eye(dim + 1) if moving_grid2world is None: moving_grid2world = np.eye(dim + 1) c_static = tuple((np.array(static.shape, dtype=np.float64)) * 0.5) c_static = static_grid2world.dot(c_static+(1,)) c_moving = tuple((np.array(moving.shape, dtype=np.float64)) * 0.5) c_moving = moving_grid2world.dot(c_moving+(1,)) transform = np.eye(dim + 1) transform[:dim, dim] = (c_moving - c_static)[:dim] affine_map = AffineMap(transform, static.shape, static_grid2world, moving.shape, moving_grid2world) return affine_map def transform_origins(static, static_grid2world, moving, moving_grid2world): r""" Transformation to align the origins of the input images With "origin" of a volume we mean the physical coordinates of voxel (0,0,0) Parameters ---------- static : array, shape (S, R, C) static image static_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation of the static image moving : array, shape (S, R, C) moving image moving_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation of the moving image Returns ------- affine_map : instance of AffineMap the affine transformation (translation only, in this case) aligning the origin of the moving image towards the one of the static image """ dim = len(static.shape) if static_grid2world is None: static_grid2world = np.eye(dim + 1) if moving_grid2world is None: moving_grid2world = np.eye(dim + 1) c_static = static_grid2world[:dim, dim] c_moving = moving_grid2world[:dim, dim] transform = np.eye(dim + 1) transform[:dim, dim] = (c_moving - c_static)[:dim] affine_map = AffineMap(transform, static.shape, static_grid2world, moving.shape, moving_grid2world) return affine_map dipy-0.10.1/dipy/align/imwarp.py000066400000000000000000001716101263041327500164570ustar00rootroot00000000000000""" Classes and functions for Symmetric Diffeomorphic Registration """ from __future__ import print_function import abc from dipy.utils.six import with_metaclass import numpy as np import numpy.linalg as npl import scipy as sp import nibabel as nib from . import vector_fields as vfu from . import floating from . import VerbosityLevels from . import Bunch from .scalespace import ScaleSpace RegistrationStages = Bunch(INIT_START=0, INIT_END=1, OPT_START=2, OPT_END=3, SCALE_START=4, SCALE_END=5, ITER_START=6, ITER_END=7) r"""Registration Stages This enum defines the different stages which the Volumetric Registration may be in. The value of the stage is passed as a parameter to the call-back function so that it can react accordingly. INIT_START: optimizer initialization starts INIT_END: optimizer initialization ends OPT_START: optimization starts OPT_END: optimization ends SCALE_START: optimization at a new scale space resolution starts SCALE_END: optimization at the current scale space resolution ends ITER_START: a new iteration starts ITER_END: the current iteration ends """ def mult_aff(A, B): r"""Returns the matrix product A.dot(B) considering None as the identity Parameters ---------- A : array, shape (n,k) B : array, shape (k,m) Returns ------- The matrix product A.dot(B). If any of the input matrices is None, it is treated as the identity matrix. If both matrices are None, None is returned """ if A is None: return B elif B is None: return A return A.dot(B) def get_direction_and_spacings(affine, dim): r"""Extracts the rotational and spacing components from a matrix Extracts the rotational and spacing (voxel dimensions) components from a matrix. An image gradient represents the local variation of the image's gray values per voxel. Since we are iterating on the physical space, we need to compute the gradients as variation per millimeter, so we need to divide each gradient's component by the voxel size along the corresponding axis, that's what the spacings are used for. Since the image's gradients are oriented along the grid axes, we also need to re-orient the gradients to be given in physical space coordinates. Parameters ---------- affine : array, shape (k, k), k = 3, 4 the matrix transforming grid coordinates to physical space. Returns ------- direction : array, shape (k-1, k-1) the rotational component of the input matrix spacings : array, shape (k-1,) the scaling component (voxel size) of the matrix """ if affine is None: return np.eye(dim), np.ones(dim) dim = affine.shape[1]-1 # Temporary hack: get the zooms by building a nifti image affine4x4 = np.eye(4) empty_volume = np.zeros((0, 0, 0)) affine4x4[:dim, :dim] = affine[:dim, :dim] affine4x4[:dim, 3] = affine[:dim, dim-1] nib_nifti = nib.Nifti1Image(empty_volume, affine4x4) scalings = np.asarray(nib_nifti.get_header().get_zooms()) scalings = np.asarray(scalings[:dim], dtype=np.float64) A = affine[:dim, :dim] return A.dot(np.diag(1.0/scalings)), scalings class DiffeomorphicMap(object): def __init__(self, dim, disp_shape, disp_grid2world=None, domain_shape=None, domain_grid2world=None, codomain_shape=None, codomain_grid2world=None, prealign=None): r""" DiffeomorphicMap Implements a diffeomorphic transformation on the physical space. The deformation fields encoding the direct and inverse transformations share the same domain discretization (both the discretization grid shape and voxel-to-space matrix). The input coordinates (physical coordinates) are first aligned using prealign, and then displaced using the corresponding vector field interpolated at the aligned coordinates. Parameters ---------- dim : int, 2 or 3 the transformation's dimension disp_shape : array, shape (dim,) the number of slices (if 3D), rows and columns of the deformation field's discretization disp_grid2world : the voxel-to-space transform between the def. fields grid and space domain_shape : array, shape (dim,) the number of slices (if 3D), rows and columns of the default discretizatio of this map's domain domain_grid2world : array, shape (dim+1, dim+1) the default voxel-to-space transformation between this map's discretization and physical space codomain_shape : array, shape (dim,) the number of slices (if 3D), rows and columns of the images that are 'normally' warped using this transformation in the forward direction (this will provide default transformation parameters to warp images under this transformation). By default, we assume that the inverse transformation is 'normally' used to warp images with the same discretization and voxel-to-space transformation as the deformation field grid. codomain_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation of images that are 'normally' warped using this transformation (in the forward direction). prealign : array, shape (dim+1, dim+1) the linear transformation to be applied to align input images to the reference space before warping under the deformation field. """ self.dim = dim if(disp_shape is None): raise ValueError("Invalid displacement field discretization") self.disp_shape = np.asarray(disp_shape, dtype=np.int32) # If the discretization affine is None, we assume it's the identity self.disp_grid2world = disp_grid2world if(self.disp_grid2world is None): self.disp_world2grid = None else: self.disp_world2grid = npl.inv(self.disp_grid2world) # If domain_shape isn't provided, we use the map's discretization shape if(domain_shape is None): self.domain_shape = self.disp_shape else: self.domain_shape = np.asarray(domain_shape, dtype=np.int32) self.domain_grid2world = domain_grid2world if(domain_grid2world is None): self.domain_world2grid = None else: self.domain_world2grid = npl.inv(domain_grid2world) # If codomain shape was not provided, we assume it is an endomorphism: # use the same domain_shape and codomain_grid2world as the field domain if codomain_shape is None: self.codomain_shape = self.domain_shape else: self.codomain_shape = np.asarray(codomain_shape, dtype=np.int32) self.codomain_grid2world = codomain_grid2world if codomain_grid2world is None: self.codomain_world2grid = None else: self.codomain_world2grid = npl.inv(codomain_grid2world) self.prealign = prealign if prealign is None: self.prealign_inv = None else: self.prealign_inv = npl.inv(prealign) self.is_inverse = False self.forward = None self.backward = None def interpret_matrix(self, obj): ''' Try to interpret `obj` as a matrix Some operations are performed faster if we know in advance if a matrix is the identity (so we can skip the actual matrix-vector multiplication). This function returns None if the given object is None or the 'identity' string. It returns the same object if it is a numpy array. It raises an exception otherwise. Parameters ---------- obj : object any object Returns ---------- obj : object the same object given as argument if `obj` is None or a numpy array. None if `obj` is the 'identity' string. ''' if (obj is None) or isinstance(obj, np.ndarray): return obj if isinstance(obj, str) and (obj == 'identity'): return None raise ValueError('Invalid matrix') def get_forward_field(self): r"""Deformation field to transform an image in the forward direction Returns the deformation field that must be used to warp an image under this transformation in the forward direction (note the 'is_inverse' flag). """ if self.is_inverse: return self.backward else: return self.forward def get_backward_field(self): r"""Deformation field to transform an image in the backward direction Returns the deformation field that must be used to warp an image under this transformation in the backward direction (note the 'is_inverse' flag). """ if self.is_inverse: return self.forward else: return self.backward def allocate(self): r"""Creates a zero displacement field Creates a zero displacement field (the identity transformation). """ self.forward = np.zeros(tuple(self.disp_shape) + (self.dim,), dtype=floating) self.backward = np.zeros(tuple(self.disp_shape) + (self.dim,), dtype=floating) def _get_warping_function(self, interpolation): r"""Appropriate warping function for the given interpolation type Returns the right warping function from vector_fields that must be called for the specified data dimension and interpolation type """ if self.dim == 2: if interpolation == 'linear': return vfu.warp_2d else: return vfu.warp_2d_nn else: if interpolation == 'linear': return vfu.warp_3d else: return vfu.warp_3d_nn def _warp_forward(self, image, interpolation='linear', image_world2grid=None, out_shape=None, out_grid2world=None): r"""Warps an image in the forward direction Deforms the input image under this diffeomorphic map in the forward direction. Since the mapping is defined in the physical space, the user must specify the sampling grid shape and its space-to-voxel mapping. By default, the transformation will use the discretization information given at initialization. Parameters ---------- image : array, shape (s, r, c) if dim = 3 or (r, c) if dim = 2 the image to be warped under this transformation in the forward direction interpolation : string, either 'linear' or 'nearest' the type of interpolation to be used for warping, either 'linear' (for k-linear interpolation) or 'nearest' for nearest neighbor image_world2grid : array, shape (dim+1, dim+1) the transformation bringing world (space) coordinates to voxel coordinates of the image given as input out_shape : array, shape (dim,) the number of slices, rows and columns of the desired warped image out_grid2world : the transformation bringing voxel coordinates of the warped image to physical space Returns ------- warped : array, shape = out_shape or self.codomain_shape if None the warped image under this transformation in the forward direction Notes ----- A diffeomorphic map must be thought as a mapping between points in space. Warping an image J towards an image I means transforming each voxel with (discrete) coordinates i in I to (floating-point) voxel coordinates j in J. The transformation we consider 'forward' is precisely mapping coordinates i from the input image to coordinates j from reference image, which has the effect of warping an image with reference discretization (typically, the "static image") "towards" an image with input discretization (typically, the "moving image"). More precisely, the warped image is produced by the following interpolation: warped[i] = image[W * forward[Dinv * P * S * i] + W * P * S * i )] where i denotes the coordinates of a voxel in the input grid, W is the world-to-grid transformation of the image given as input, Dinv is the world-to-grid transformation of the deformation field discretization, P is the pre-aligning matrix (transforming input points to reference points), S is the voxel-to-space transformation of the sampling grid (see comment below) and forward is the forward deformation field. If we want to warp an image, we also must specify on what grid we want to sample the resulting warped image (the images are considered as points in space and its representation on a grid depends on its grid-to-space transform telling us for each grid voxel what point in space we need to bring via interpolation). So, S is the matrix that converts the sampling grid (whose shape is given as parameter 'out_shape' ) to space coordinates. """ # if no world-to-image transform is provided, we use the codomain info if image_world2grid is None: image_world2grid = self.codomain_world2grid # if no sampling info is provided, we use the domain info if out_shape is None: if self.domain_shape is None: raise ValueError('Unable to infer sampling info. ' 'Provide a valid out_shape.') out_shape = self.domain_shape else: out_shape = np.asarray(out_shape, dtype=np.int32) if out_grid2world is None: out_grid2world = self.domain_grid2world W = self.interpret_matrix(image_world2grid) Dinv = self.disp_world2grid P = self.prealign S = self.interpret_matrix(out_grid2world) # this is the matrix which we need to multiply the voxel coordinates # to interpolate on the forward displacement field ("in"side the # 'forward' brackets in the expression above) affine_idx_in = mult_aff(Dinv, mult_aff(P, S)) # this is the matrix which we need to multiply the voxel coordinates # to add to the displacement ("out"side the 'forward' brackets in the # expression above) affine_idx_out = mult_aff(W, mult_aff(P, S)) # this is the matrix which we need to multiply the displacement vector # prior to adding to the transformed input point affine_disp = W # Convert the data to required types to use the cythonized functions if interpolation == 'nearest': if image.dtype is np.dtype('float64') and floating is np.float32: image = image.astype(floating) elif image.dtype is np.dtype('int64'): image = image.astype(np.int32) else: image = np.asarray(image, dtype=floating) warp_f = self._get_warping_function(interpolation) warped = warp_f(image, self.forward, affine_idx_in, affine_idx_out, affine_disp, out_shape) return warped def _warp_backward(self, image, interpolation='linear', image_world2grid=None, out_shape=None, out_grid2world=None): r"""Warps an image in the backward direction Deforms the input image under this diffeomorphic map in the backward direction. Since the mapping is defined in the physical space, the user must specify the sampling grid shape and its space-to-voxel mapping. By default, the transformation will use the discretization information given at initialization. Parameters ---------- image : array, shape (s, r, c) if dim = 3 or (r, c) if dim = 2 the image to be warped under this transformation in the backward direction interpolation : string, either 'linear' or 'nearest' the type of interpolation to be used for warping, either 'linear' (for k-linear interpolation) or 'nearest' for nearest neighbor image_world2grid : array, shape (dim+1, dim+1) the transformation bringing world (space) coordinates to voxel coordinates of the image given as input out_shape : array, shape (dim,) the number of slices, rows and columns of the desired warped image out_grid2world : the transformation bringing voxel coordinates of the warped image to physical space Returns ------- warped : array, shape = out_shape or self.domain_shape if None the warped image under this transformation in the backward direction Notes ----- A diffeomorphic map must be thought as a mapping between points in space. Warping an image J towards an image I means transforming each voxel with (discrete) coordinates i in I to (floating-point) voxel coordinates j in J. The transformation we consider 'backward' is precisely mapping coordinates i from the reference grid to coordinates j from the input image (that's why it's "backward"), which has the effect of warping the input image (moving) "towards" the reference. More precisely, the warped image is produced by the following interpolation: warped[i]=image[W * Pinv * backward[Dinv * S * i] + W * Pinv * S * i )] where i denotes the coordinates of a voxel in the input grid, W is the world-to-grid transformation of the image given as input, Dinv is the world-to-grid transformation of the deformation field discretization, Pinv is the pre-aligning matrix's inverse (transforming reference points to input points), S is the grid-to-space transformation of the sampling grid (see comment below) and backward is the backward deformation field. If we want to warp an image, we also must specify on what grid we want to sample the resulting warped image (the images are considered as points in space and its representation on a grid depends on its grid-to-space transform telling us for each grid voxel what point in space we need to bring via interpolation). So, S is the matrix that converts the sampling grid (whose shape is given as parameter 'out_shape' ) to space coordinates. """ # if no world-to-image transform is provided, we use the domain info if image_world2grid is None: image_world2grid = self.domain_world2grid # if no sampling info is provided, we use the codomain info if out_shape is None: if self.codomain_shape is None: msg = 'Unknown sampling info. Provide a valid out_shape.' raise ValueError(msg) out_shape = self.codomain_shape if out_grid2world is None: out_grid2world = self.codomain_grid2world W = self.interpret_matrix(image_world2grid) Dinv = self.disp_world2grid Pinv = self.prealign_inv S = self.interpret_matrix(out_grid2world) # this is the matrix which we need to multiply the voxel coordinates # to interpolate on the backward displacement field ("in"side the # 'backward' brackets in the expression above) affine_idx_in = mult_aff(Dinv, S) # this is the matrix which we need to multiply the voxel coordinates # to add to the displacement ("out"side the 'backward' brackets in the # expression above) affine_idx_out = mult_aff(W, mult_aff(Pinv, S)) # this is the matrix which we need to multiply the displacement vector # prior to adding to the transformed input point affine_disp = mult_aff(W, Pinv) if interpolation == 'nearest': if image.dtype is np.dtype('float64') and floating is np.float32: image = image.astype(floating) elif image.dtype is np.dtype('int64'): image = image.astype(np.int32) else: image = np.asarray(image, dtype=floating) warp_f = self._get_warping_function(interpolation) warped = warp_f(image, self.backward, affine_idx_in, affine_idx_out, affine_disp, out_shape) return warped def transform(self, image, interpolation='linear', image_world2grid=None, out_shape=None, out_grid2world=None): r"""Warps an image in the forward direction Transforms the input image under this transformation in the forward direction. It uses the "is_inverse" flag to switch between "forward" and "backward" (if is_inverse is False, then transform(...) warps the image forwards, else it warps the image backwards). Parameters ---------- image : array, shape (s, r, c) if dim = 3 or (r, c) if dim = 2 the image to be warped under this transformation in the forward direction interpolation : string, either 'linear' or 'nearest' the type of interpolation to be used for warping, either 'linear' (for k-linear interpolation) or 'nearest' for nearest neighbor image_world2grid : array, shape (dim+1, dim+1) the transformation bringing world (space) coordinates to voxel coordinates of the image given as input out_shape : array, shape (dim,) the number of slices, rows and columns of the desired warped image out_grid2world : the transformation bringing voxel coordinates of the warped image to physical space Returns ------- warped : array, shape = out_shape or self.codomain_shape if None the warped image under this transformation in the forward direction Notes ----- See _warp_forward and _warp_backward documentation for further information. """ if out_shape is not None: out_shape = np.asarray(out_shape, dtype=np.int32) if self.is_inverse: warped = self._warp_backward(image, interpolation, image_world2grid, out_shape, out_grid2world) else: warped = self._warp_forward(image, interpolation, image_world2grid, out_shape, out_grid2world) return np.asarray(warped) def transform_inverse(self, image, interpolation='linear', image_world2grid=None, out_shape=None, out_grid2world=None): r"""Warps an image in the backward direction Transforms the input image under this transformation in the backward direction. It uses the "is_inverse" flag to switch between "forward" and "backward" (if is_inverse is False, then transform_inverse(...) warps the image backwards, else it warps the image forwards) Parameters ---------- image : array, shape (s, r, c) if dim = 3 or (r, c) if dim = 2 the image to be warped under this transformation in the forward direction interpolation : string, either 'linear' or 'nearest' the type of interpolation to be used for warping, either 'linear' (for k-linear interpolation) or 'nearest' for nearest neighbor image_world2grid : array, shape (dim+1, dim+1) the transformation bringing world (space) coordinates to voxel coordinates of the image given as input out_shape : array, shape (dim,) the number of slices, rows and columns of the desired warped image out_grid2world : the transformation bringing voxel coordinates of the warped image to physical space Returns ------- warped : array, shape = out_shape or self.codomain_shape if None warped image under this transformation in the backward direction Notes ----- See _warp_forward and _warp_backward documentation for further information. """ if self.is_inverse: warped = self._warp_forward(image, interpolation, image_world2grid, out_shape, out_grid2world) else: warped = self._warp_backward(image, interpolation, image_world2grid, out_shape, out_grid2world) return np.asarray(warped) def inverse(self): r"""Inverse of this DiffeomorphicMap instance Returns a diffeomorphic map object representing the inverse of this transformation. The internal arrays are not copied but just referenced. Returns ------- inv : DiffeomorphicMap object the inverse of this diffeomorphic map. """ inv = DiffeomorphicMap(self.dim, self.disp_shape, self.disp_grid2world, self.domain_shape, self.domain_grid2world, self.codomain_shape, self.codomain_grid2world, self.prealign) inv.forward = self.forward inv.backward = self.backward inv.is_inverse = True return inv def expand_fields(self, expand_factors, new_shape): r"""Expands the displacement fields from current shape to new_shape Up-samples the discretization of the displacement fields to be of new_shape shape. Parameters ---------- expand_factors : array, shape (dim,) the factors scaling current spacings (voxel sizes) to spacings in the expanded discretization. new_shape : array, shape (dim,) the shape of the arrays holding the up-sampled discretization """ if self.dim == 2: expand_f = vfu.resample_displacement_field_2d else: expand_f = vfu.resample_displacement_field_3d expanded_forward = expand_f(self.forward, expand_factors, new_shape) expanded_backward = expand_f(self.backward, expand_factors, new_shape) expand_factors = np.append(expand_factors, [1]) expanded_grid2world = mult_aff(self.disp_grid2world, np.diag(expand_factors)) expanded_world2grid = npl.inv(expanded_grid2world) self.forward = expanded_forward self.backward = expanded_backward self.disp_shape = new_shape self.disp_grid2world = expanded_grid2world self.disp_world2grid = expanded_world2grid def compute_inversion_error(self): r"""Inversion error of the displacement fields Estimates the inversion error of the displacement fields by computing statistics of the residual vectors obtained after composing the forward and backward displacement fields. Returns ------- residual : array, shape (R, C) or (S, R, C) the displacement field resulting from composing the forward and backward displacement fields of this transformation (the residual should be zero for a perfect diffeomorphism) stats : array, shape (3,) statistics from the norms of the vectors of the residual displacement field: maximum, mean and standard deviation Notes ----- Since the forward and backward displacement fields have the same discretization, the final composition is given by comp[i] = forward[ i + Dinv * backward[i]] where Dinv is the space-to-grid transformation of the displacement fields """ Dinv = self.disp_world2grid if self.dim == 2: compose_f = vfu.compose_vector_fields_2d else: compose_f = vfu.compose_vector_fields_3d residual, stats = compose_f(self.backward, self.forward, None, Dinv, 1.0, None) return np.asarray(residual), np.asarray(stats) def shallow_copy(self): r"""Shallow copy of this DiffeomorphicMap instance Creates a shallow copy of this diffeomorphic map (the arrays are not copied but just referenced) Returns ------- new_map : DiffeomorphicMap object the shallow copy of this diffeomorphic map """ new_map = DiffeomorphicMap(self.dim, self.disp_shape, self.disp_grid2world, self.domain_shape, self.domain_grid2world, self.codomain_shape, self.codomain_grid2world, self.prealign) new_map.forward = self.forward new_map.backward = self.backward new_map.is_inverse = self.is_inverse return new_map def warp_endomorphism(self, phi): r"""Composition of this DiffeomorphicMap with a given endomorphism Creates a new DiffeomorphicMap C with the same properties as self and composes its displacement fields with phi's corresponding fields. The resulting diffeomorphism is of the form C(x) = phi(self(x)) with inverse C^{-1}(y) = self^{-1}(phi^{-1}(y)). We assume that phi is an endomorphism with the same discretization and domain affine as self to ensure that the composition inherits self's properties (we also assume that the pre-aligning matrix of phi is None or identity). Parameters ---------- phi : DiffeomorphicMap object the endomorphism to be warped by this diffeomorphic map Returns ------- composition : the composition of this diffeomorphic map with the endomorphism given as input Notes ----- The problem with our current representation of a DiffeomorphicMap is that the set of Diffeomorphism that can be represented this way (a pre-aligning matrix followed by a non-linear endomorphism given as a displacement field) is not closed under the composition operation. Supporting a general DiffeomorphicMap class, closed under composition, may be extremely costly computationally, and the kind of transformations we actually need for Avants' mid-point algorithm (SyN) are much simpler. """ # Compose the forward deformation fields d1 = self.get_forward_field() d2 = phi.get_forward_field() d1_inv = self.get_backward_field() d2_inv = phi.get_backward_field() premult_disp = self.disp_world2grid if self.dim == 2: compose_f = vfu.compose_vector_fields_2d else: compose_f = vfu.compose_vector_fields_3d forward, stats = compose_f(d1, d2, None, premult_disp, 1.0, None) backward, stats, = compose_f(d2_inv, d1_inv, None, premult_disp, 1.0, None) composition = self.shallow_copy() composition.forward = forward composition.backward = backward return composition def get_simplified_transform(self): r""" Constructs a simplified version of this Diffeomorhic Map The simplified version incorporates the pre-align transform, as well as the domain and codomain affine transforms into the displacement field. The resulting transformation may be regarded as operating on the image spaces given by the domain and codomain discretization. As a result, self.prealign, self.disp_grid2world, self.domain_grid2world and self.codomain affine will be None (denoting Identity) in the resulting diffeomorphic map. """ if self.dim == 2: simplify_f = vfu.simplify_warp_function_2d else: simplify_f = vfu.simplify_warp_function_3d # Simplify the forward transform D = self.domain_grid2world P = self.prealign Rinv = self.disp_world2grid Cinv = self.codomain_world2grid # this is the matrix which we need to multiply the voxel coordinates # to interpolate on the forward displacement field ("in"side the # 'forward' brackets in the expression above) affine_idx_in = mult_aff(Rinv, mult_aff(P, D)) # this is the matrix which we need to multiply the voxel coordinates # to add to the displacement ("out"side the 'forward' brackets in the # expression above) affine_idx_out = mult_aff(Cinv, mult_aff(P, D)) # this is the matrix which we need to multiply the displacement vector # prior to adding to the transformed input point affine_disp = Cinv new_forward = simplify_f(self.forward, affine_idx_in, affine_idx_out, affine_disp, self.domain_shape) # Simplify the backward transform C = self.codomain_world2grid Pinv = self.prealign_inv Dinv = self.domain_world2grid affine_idx_in = mult_aff(Rinv, C) affine_idx_out = mult_aff(Dinv, mult_aff(Pinv, C)) affine_disp = mult_aff(Dinv, Pinv) new_backward = simplify_f(self.backward, affine_idx_in, affine_idx_out, affine_disp, self.codomain_shape) simplified = DiffeomorphicMap(self.dim, self.disp_shape, None, self.domain_shape, None, self.codomain_shape, None, None) simplified.forward = new_forward simplified.backward = new_backward return simplified class DiffeomorphicRegistration(with_metaclass(abc.ABCMeta, object)): def __init__(self, metric=None): r""" Diffeomorphic Registration This abstract class defines the interface to be implemented by any optimization algorithm for diffeomorphic registration. Parameters ---------- metric : SimilarityMetric object the object measuring the similarity of the two images. The registration algorithm will minimize (or maximize) the provided similarity. """ if metric is None: raise ValueError('The metric cannot be None') self.metric = metric self.dim = metric.dim def set_level_iters(self, level_iters): r"""Sets the number of iterations at each pyramid level Establishes the maximum number of iterations to be performed at each level of the Gaussian pyramid, similar to ANTS. Parameters ---------- level_iters : list the number of iterations at each level of the Gaussian pyramid. level_iters[0] corresponds to the finest level, level_iters[n-1] the coarsest, where n is the length of the list """ self.levels = len(level_iters) if level_iters else 0 self.level_iters = level_iters @abc.abstractmethod def optimize(self): r"""Starts the metric optimization This is the main function each specialized class derived from this must implement. Upon completion, the deformation field must be available from the forward transformation model. """ @abc.abstractmethod def get_map(self): r""" Returns the resulting diffeomorphic map after optimization """ class SymmetricDiffeomorphicRegistration(DiffeomorphicRegistration): def __init__(self, metric, level_iters=None, step_length=0.25, ss_sigma_factor=0.2, opt_tol=1e-5, inv_iter=20, inv_tol=1e-3, callback=None): r""" Symmetric Diffeomorphic Registration (SyN) Algorithm Performs the multi-resolution optimization algorithm for non-linear registration using a given similarity metric. Parameters ---------- metric : SimilarityMetric object the metric to be optimized level_iters : list of int the number of iterations at each level of the Gaussian Pyramid (the length of the list defines the number of pyramid levels to be used) opt_tol : float the optimization will stop when the estimated derivative of the energy profile w.r.t. time falls below this threshold inv_iter : int the number of iterations to be performed by the displacement field inversion algorithm step_length : float the length of the maximum displacement vector of the update displacement field at each iteration ss_sigma_factor : float parameter of the scale-space smoothing kernel. For example, the std. dev. of the kernel will be factor*(2^i) in the isotropic case where i = 0, 1, ..., n_scales is the scale inv_tol : float the displacement field inversion algorithm will stop iterating when the inversion error falls below this threshold callback : function(SymmetricDiffeomorphicRegistration) a function receiving a SymmetricDiffeomorphicRegistration object to be called after each iteration (this optimizer will call this function passing self as parameter) """ super(SymmetricDiffeomorphicRegistration, self).__init__(metric) if level_iters is None: level_iters = [100, 100, 25] if len(level_iters) == 0: raise ValueError('The iterations list cannot be empty') self.set_level_iters(level_iters) self.step_length = step_length self.ss_sigma_factor = ss_sigma_factor self.opt_tol = opt_tol self.inv_tol = inv_tol self.inv_iter = inv_iter self.energy_window = 12 self.energy_list = [] self.full_energy_profile = [] self.verbosity = VerbosityLevels.STATUS self.callback = callback self.moving_ss = None self.static_ss = None self.static_direction = None self.moving_direction = None self.mask0 = metric.mask0 def update(self, current_displacement, new_displacement, disp_world2grid, time_scaling): r"""Composition of the current displacement field with the given field Interpolates new displacement at the locations defined by current_displacement. Equivalently, computes the composition C of the given displacement fields as C(x) = B(A(x)), where A is current_displacement and B is new_displacement. This function is intended to be used with deformation fields of the same sampling (e.g. to be called by a registration algorithm). Parameters ---------- current_displacement : array, shape (R', C', 2) or (S', R', C', 3) the displacement field defining where to interpolate new_displacement new_displacement : array, shape (R, C, 2) or (S, R, C, 3) the displacement field to be warped by current_displacement disp_world2grid : array, shape (dim+1, dim+1) the space-to-grid transform associated with the displacements' grid (we assume that both displacements are discretized over the same grid) time_scaling : float scaling factor applied to d2. The effect may be interpreted as moving d1 displacements along a factor (`time_scaling`) of d2. Returns ------- updated : array, shape (the same as new_displacement) the warped displacement field mean_norm : the mean norm of all vectors in current_displacement """ sq_field = np.sum((np.array(current_displacement) ** 2), -1) mean_norm = np.sqrt(sq_field).mean() # We assume that both displacement fields have the same # grid2world transform, which implies premult_index=Identity # and premult_disp is the world2grid transform associated with # the displacements' grid self.compose(current_displacement, new_displacement, None, disp_world2grid, time_scaling, current_displacement) return np.array(current_displacement), np.array(mean_norm) def get_map(self): r"""Returns the resulting diffeomorphic map Returns the DiffeomorphicMap registering the moving image towards the static image. """ return self.static_to_ref def _connect_functions(self): r"""Assign the methods to be called according to the image dimension Assigns the appropriate functions to be called for displacement field inversion, Gaussian pyramid, and affine / dense deformation composition according to the dimension of the input images e.g. 2D or 3D. """ if self.dim == 2: self.invert_vector_field = vfu.invert_vector_field_fixed_point_2d self.compose = vfu.compose_vector_fields_2d else: self.invert_vector_field = vfu.invert_vector_field_fixed_point_3d self.compose = vfu.compose_vector_fields_3d def _init_optimizer(self, static, moving, static_grid2world, moving_grid2world, prealign): r"""Initializes the registration optimizer Initializes the optimizer by computing the scale space of the input images and allocating the required memory for the transformation models at the coarsest scale. Parameters ---------- static : array, shape (S, R, C) or (R, C) the image to be used as reference during optimization. The displacement fields will have the same discretization as the static image. moving : array, shape (S, R, C) or (R, C) the image to be used as "moving" during optimization. Since the deformation fields' discretization is the same as the static image, it is necessary to pre-align the moving image to ensure its domain lies inside the domain of the deformation fields. This is assumed to be accomplished by "pre-aligning" the moving image towards the static using an affine transformation given by the 'prealign' matrix static_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation associated to the static image moving_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation associated to the moving image prealign : array, shape (dim+1, dim+1) the affine transformation (operating on the physical space) pre-aligning the moving image towards the static """ self._connect_functions() # Extract information from affine matrices to create the scale space static_direction, static_spacing = \ get_direction_and_spacings(static_grid2world, self.dim) moving_direction, moving_spacing = \ get_direction_and_spacings(moving_grid2world, self.dim) # the images' directions don't change with scale self.static_direction = np.eye(self.dim + 1) self.moving_direction = np.eye(self.dim + 1) self.static_direction[:self.dim, :self.dim] = static_direction self.moving_direction[:self.dim, :self.dim] = moving_direction # Build the scale space of the input images if self.verbosity >= VerbosityLevels.DIAGNOSE: print('Applying zero mask: ' + str(self.mask0)) if self.verbosity >= VerbosityLevels.STATUS: print('Creating scale space from the moving image. Levels: %d. ' 'Sigma factor: %f.' % (self.levels, self.ss_sigma_factor)) self.moving_ss = ScaleSpace(moving, self.levels, moving_grid2world, moving_spacing, self.ss_sigma_factor, self.mask0) if self.verbosity >= VerbosityLevels.STATUS: print('Creating scale space from the static image. Levels: %d. ' 'Sigma factor: %f.' % (self.levels, self.ss_sigma_factor)) self.static_ss = ScaleSpace(static, self.levels, static_grid2world, static_spacing, self.ss_sigma_factor, self.mask0) if self.verbosity >= VerbosityLevels.DEBUG: print('Moving scale space:') for level in range(self.levels): self.moving_ss.print_level(level) print('Static scale space:') for level in range(self.levels): self.static_ss.print_level(level) # Get the properties of the coarsest level from the static image. These # properties will be taken as the reference discretization. disp_shape = self.static_ss.get_domain_shape(self.levels-1) disp_grid2world = self.static_ss.get_affine(self.levels-1) # The codomain discretization of both diffeomorphic maps is # precisely the discretization of the static image codomain_shape = static.shape codomain_grid2world = static_grid2world # The forward model transforms points from the static image # to points on the reference (which is the static as well). So the # domain properties are taken from the static image. Since its the same # as the reference, we don't need to pre-align. domain_shape = static.shape domain_grid2world = static_grid2world self.static_to_ref = DiffeomorphicMap(self.dim, disp_shape, disp_grid2world, domain_shape, domain_grid2world, codomain_shape, codomain_grid2world, None) self.static_to_ref.allocate() # The backward model transforms points from the moving image # to points on the reference (which is the static). So the input # properties are taken from the moving image, and we need to pre-align # points on the moving physical space to the reference physical space # by applying the inverse of pre-align. This is done this way to make # it clear for the user: the pre-align matrix is usually obtained by # doing affine registration of the moving image towards the static # image, which results in a matrix transforming points in the static # physical space to points in the moving physical space prealign_inv = None if prealign is None else npl.inv(prealign) domain_shape = moving.shape domain_grid2world = moving_grid2world self.moving_to_ref = DiffeomorphicMap(self.dim, disp_shape, disp_grid2world, domain_shape, domain_grid2world, codomain_shape, codomain_grid2world, prealign_inv) self.moving_to_ref.allocate() def _end_optimizer(self): r"""Frees the resources allocated during initialization """ del self.moving_ss del self.static_ss def _iterate(self): r"""Performs one symmetric iteration Performs one iteration of the SyN algorithm: 1.Compute forward 2.Compute backward 3.Update forward 4.Update backward 5.Compute inverses 6.Invert the inverses Returns ------- der : float the derivative of the energy profile, computed by fitting a quadratic function to the energy values at the latest T iterations, where T = self.energy_window. If the current iteration is less than T then np.inf is returned instead. """ # Acquire current resolution information from scale spaces current_moving = self.moving_ss.get_image(self.current_level) current_static = self.static_ss.get_image(self.current_level) current_disp_shape = \ self.static_ss.get_domain_shape(self.current_level) current_disp_grid2world = \ self.static_ss.get_affine(self.current_level) current_disp_world2grid = \ self.static_ss.get_affine_inv(self.current_level) current_disp_spacing = \ self.static_ss.get_spacing(self.current_level) # Warp the input images (smoothed to the current scale) to the common # (reference) space at the current resolution wstatic = self.static_to_ref.transform_inverse(current_static, 'linear', None, current_disp_shape, current_disp_grid2world) wmoving = self.moving_to_ref.transform_inverse(current_moving, 'linear', None, current_disp_shape, current_disp_grid2world) # Pass both images to the metric. Now both images are sampled on the # reference grid (equal to the static image's grid) and the direction # doesn't change across scales self.metric.set_moving_image(wmoving, current_disp_grid2world, current_disp_spacing, self.static_direction) self.metric.use_moving_image_dynamics( current_moving, self.moving_to_ref.inverse()) self.metric.set_static_image(wstatic, current_disp_grid2world, current_disp_spacing, self.static_direction) self.metric.use_static_image_dynamics( current_static, self.static_to_ref.inverse()) # Initialize the metric for a new iteration self.metric.initialize_iteration() if self.callback is not None: self.callback(self, RegistrationStages.ITER_START) # Compute the forward step (to be used to update the forward transform) fw_step = np.array(self.metric.compute_forward()) # set zero displacements at the boundary fw_step[0, ...] = 0 fw_step[:, 0, ...] = 0 fw_step[-1, ...] = 0 fw_step[:, -1, ...] = 0 if(self.dim == 3): fw_step[:, :, 0, ...] = 0 fw_step[:, :, -1, ...] = 0 # Normalize the forward step nrm = np.sqrt(np.sum((fw_step/current_disp_spacing)**2, -1)).max() if nrm > 0: fw_step /= nrm # Add to current total field self.static_to_ref.forward, md_forward = self.update( self.static_to_ref.forward, fw_step, current_disp_world2grid, self.step_length) del fw_step # Keep track of the forward energy fw_energy = self.metric.get_energy() # Compose backward step (to be used to update the backward transform) bw_step = np.array(self.metric.compute_backward()) # set zero displacements at the boundary bw_step[0, ...] = 0 bw_step[:, 0, ...] = 0 if(self.dim == 3): bw_step[:, :, 0, ...] = 0 # Normalize the backward step nrm = np.sqrt(np.sum((bw_step/current_disp_spacing) ** 2, -1)).max() if nrm > 0: bw_step /= nrm # Add to current total field self.moving_to_ref.forward, md_backward = self.update( self.moving_to_ref.forward, bw_step, current_disp_world2grid, self.step_length) del bw_step # Keep track of the energy bw_energy = self.metric.get_energy() der = np.inf n_iter = len(self.energy_list) if len(self.energy_list) >= self.energy_window: der = self._get_energy_derivative() if self.verbosity >= VerbosityLevels.DIAGNOSE: ch = '-' if np.isnan(der) else der print('%d:\t%0.6f\t%0.6f\t%0.6f\t%s' % (n_iter, fw_energy, bw_energy, fw_energy + bw_energy, ch)) self.energy_list.append(fw_energy + bw_energy) # Invert the forward model's forward field self.static_to_ref.backward = np.array( self.invert_vector_field( self.static_to_ref.forward, current_disp_world2grid, current_disp_spacing, self.inv_iter, self.inv_tol, self.static_to_ref.backward)) # Invert the backward model's forward field self.moving_to_ref.backward = np.array( self.invert_vector_field( self.moving_to_ref.forward, current_disp_world2grid, current_disp_spacing, self.inv_iter, self.inv_tol, self.moving_to_ref.backward)) # Invert the forward model's backward field self.static_to_ref.forward = np.array( self.invert_vector_field( self.static_to_ref.backward, current_disp_world2grid, current_disp_spacing, self.inv_iter, self.inv_tol, self.static_to_ref.forward)) # Invert the backward model's backward field self.moving_to_ref.forward = np.array( self.invert_vector_field( self.moving_to_ref.backward, current_disp_world2grid, current_disp_spacing, self.inv_iter, self.inv_tol, self.moving_to_ref.forward)) # Free resources no longer needed to compute the forward and backward # steps if self.callback is not None: self.callback(self, RegistrationStages.ITER_END) self.metric.free_iteration() return der def _approximate_derivative_direct(self, x, y): r"""Derivative of the degree-2 polynomial fit of the given x, y pairs Directly computes the derivative of the least-squares-fit quadratic function estimated from (x[...],y[...]) pairs. Parameters ---------- x : array, shape (n,) increasing array representing the x-coordinates of the points to be fit y : array, shape (n,) array representing the y-coordinates of the points to be fit Returns ------- y0 : float the estimated derivative at x0 = 0.5*len(x) """ x = np.asarray(x) y = np.asarray(y) X = np.row_stack((x**2, x, np.ones_like(x))) XX = (X).dot(X.T) b = X.dot(y) beta = npl.solve(XX, b) x0 = 0.5 * len(x) y0 = 2.0 * beta[0] * (x0) + beta[1] return y0 def _get_energy_derivative(self): r"""Approximate derivative of the energy profile Returns the derivative of the estimated energy as a function of "time" (iterations) at the last iteration """ n_iter = len(self.energy_list) if n_iter < self.energy_window: raise ValueError('Not enough data to fit the energy profile') x = range(self.energy_window) y = self.energy_list[(n_iter - self.energy_window):n_iter] ss = sum(y) if(ss > 0): ss *= -1 y = [v / ss for v in y] der = self._approximate_derivative_direct(x, y) return der def _optimize(self): r"""Starts the optimization The main multi-scale symmetric optimization algorithm """ self.full_energy_profile = [] if self.callback is not None: self.callback(self, RegistrationStages.OPT_START) for level in range(self.levels - 1, -1, -1): if self.verbosity >= VerbosityLevels.STATUS: print('Optimizing level %d' % level) self.current_level = level self.metric.set_levels_below(self.levels - level) self.metric.set_levels_above(level) if level < self.levels - 1: expand_factors = \ self.static_ss.get_expand_factors(level+1, level) new_shape = self.static_ss.get_domain_shape(level) self.static_to_ref.expand_fields(expand_factors, new_shape) self.moving_to_ref.expand_fields(expand_factors, new_shape) self.niter = 0 self.energy_list = [] derivative = np.inf if self.callback is not None: self.callback(self, RegistrationStages.SCALE_START) while ((self.niter < self.level_iters[self.levels - 1 - level]) and (self.opt_tol < derivative)): derivative = self._iterate() self.niter += 1 self.full_energy_profile.extend(self.energy_list) if self.callback is not None: self.callback(self, RegistrationStages.SCALE_END) # Reporting mean and std in stats[1] and stats[2] residual, stats = self.static_to_ref.compute_inversion_error() if self.verbosity >= VerbosityLevels.DIAGNOSE: print('Static-Reference Residual error: %0.6f (%0.6f)' % (stats[1], stats[2])) residual, stats = self.moving_to_ref.compute_inversion_error() if self.verbosity >= VerbosityLevels.DIAGNOSE: print('Moving-Reference Residual error :%0.6f (%0.6f)' % (stats[1], stats[2])) # Compose the two partial transformations self.static_to_ref = self.moving_to_ref.warp_endomorphism( self.static_to_ref.inverse()).inverse() # Report mean and std for the composed deformation field residual, stats = self.static_to_ref.compute_inversion_error() if self.verbosity >= VerbosityLevels.DIAGNOSE: print('Final residual error: %0.6f (%0.6f)' % (stats[1], stats[2])) if self.callback is not None: self.callback(self, RegistrationStages.OPT_END) def optimize(self, static, moving, static_grid2world=None, moving_grid2world=None, prealign=None): r""" Starts the optimization Parameters ---------- static : array, shape (S, R, C) or (R, C) the image to be used as reference during optimization. The displacement fields will have the same discretization as the static image. moving : array, shape (S, R, C) or (R, C) the image to be used as "moving" during optimization. Since the deformation fields' discretization is the same as the static image, it is necessary to pre-align the moving image to ensure its domain lies inside the domain of the deformation fields. This is assumed to be accomplished by "pre-aligning" the moving image towards the static using an affine transformation given by the 'prealign' matrix static_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation associated to the static image moving_grid2world : array, shape (dim+1, dim+1) the voxel-to-space transformation associated to the moving image prealign : array, shape (dim+1, dim+1) the affine transformation (operating on the physical space) pre-aligning the moving image towards the static Returns ------- static_to_ref : DiffeomorphicMap object the diffeomorphic map that brings the moving image towards the static one in the forward direction (i.e. by calling static_to_ref.transform) and the static image towards the moving one in the backward direction (i.e. by calling static_to_ref.transform_inverse). """ if self.verbosity >= VerbosityLevels.DEBUG: print("Pre-align:", prealign) self._init_optimizer(static.astype(floating), moving.astype(floating), static_grid2world, moving_grid2world, prealign) self._optimize() self._end_optimizer() self.static_to_ref.forward = np.array(self.static_to_ref.forward) self.static_to_ref.backward = np.array(self.static_to_ref.backward) return self.static_to_ref dipy-0.10.1/dipy/align/metrics.py000066400000000000000000001326401263041327500166260ustar00rootroot00000000000000""" Metrics for Symmetric Diffeomorphic Registration """ from __future__ import print_function import abc import numpy as np import scipy as sp from scipy import gradient, ndimage from ..utils.six import with_metaclass from . import vector_fields as vfu from . import sumsqdiff as ssd from . import crosscorr as cc from . import expectmax as em from . import floating class SimilarityMetric(with_metaclass(abc.ABCMeta, object)): def __init__(self, dim): r""" Similarity Metric abstract class A similarity metric is in charge of keeping track of the numerical value of the similarity (or distance) between the two given images. It also computes the update field for the forward and inverse displacement fields to be used in a gradient-based optimization algorithm. Note that this metric does not depend on any transformation (affine or non-linear) so it assumes the static and moving images are already warped Parameters ---------- dim : int (either 2 or 3) the dimension of the image domain """ self.dim = dim self.levels_above = None self.levels_below = None self.static_image = None self.static_affine = None self.static_spacing = None self.static_direction = None self.moving_image = None self.moving_affine = None self.moving_spacing = None self.moving_direction = None self.mask0 = False def set_levels_below(self, levels): r"""Informs the metric how many pyramid levels are below the current one Informs this metric the number of pyramid levels below the current one. The metric may change its behavior (e.g. number of inner iterations) accordingly Parameters ---------- levels : int the number of levels below the current Gaussian Pyramid level """ self.levels_below = levels def set_levels_above(self, levels): r"""Informs the metric how many pyramid levels are above the current one Informs this metric the number of pyramid levels above the current one. The metric may change its behavior (e.g. number of inner iterations) accordingly Parameters ---------- levels : int the number of levels above the current Gaussian Pyramid level """ self.levels_above = levels def set_static_image(self, static_image, static_affine, static_spacing, static_direction): r"""Sets the static image being compared against the moving one. Sets the static image. The default behavior (of this abstract class) is simply to assign the reference to an attribute, but generalizations of the metric may need to perform other operations Parameters ---------- static_image : array, shape (R, C) or (S, R, C) the static image """ self.static_image = static_image self.static_affine = static_affine self.static_spacing = static_spacing self.static_direction = static_direction def use_static_image_dynamics(self, original_static_image, transformation): r"""This is called by the optimizer just after setting the static image. This method allows the metric to compute any useful information from knowing how the current static image was generated (as the transformation of an original static image). This method is called by the optimizer just after it sets the static image. Transformation will be an instance of DiffeomorficMap or None if the original_static_image equals self.moving_image. Parameters ---------- original_static_image : array, shape (R, C) or (S, R, C) original image from which the current static image was generated transformation : DiffeomorphicMap object the transformation that was applied to original image to generate the current static image """ pass def set_moving_image(self, moving_image, moving_affine, moving_spacing, moving_direction): r"""Sets the moving image being compared against the static one. Sets the moving image. The default behavior (of this abstract class) is simply to assign the reference to an attribute, but generalizations of the metric may need to perform other operations Parameters ---------- moving_image : array, shape (R, C) or (S, R, C) the moving image """ self.moving_image = moving_image self.moving_affine = moving_affine self.moving_spacing = moving_spacing self.moving_direction = moving_direction def use_moving_image_dynamics(self, original_moving_image, transformation): r"""This is called by the optimizer just after setting the moving image This method allows the metric to compute any useful information from knowing how the current static image was generated (as the transformation of an original static image). This method is called by the optimizer just after it sets the static image. Transformation will be an instance of DiffeomorficMap or None if the original_moving_image equals self.moving_image. Parameters ---------- original_moving_image : array, shape (R, C) or (S, R, C) original image from which the current moving image was generated transformation : DiffeomorphicMap object the transformation that was applied to original image to generate the current moving image """ pass @abc.abstractmethod def initialize_iteration(self): r"""Prepares the metric to compute one displacement field iteration. This method will be called before any compute_forward or compute_backward call, this allows the Metric to pre-compute any useful information for speeding up the update computations. This initialization was needed in ANTS because the updates are called once per voxel. In Python this is unpractical, though. """ @abc.abstractmethod def free_iteration(self): r"""Releases the resources no longer needed by the metric This method is called by the RegistrationOptimizer after the required iterations have been computed (forward and / or backward) so that the SimilarityMetric can safely delete any data it computed as part of the initialization """ @abc.abstractmethod def compute_forward(self): r"""Computes one step bringing the reference image towards the static. Computes the forward update field to register the moving image towards the static image in a gradient-based optimization algorithm """ @abc.abstractmethod def compute_backward(self): r"""Computes one step bringing the static image towards the moving. Computes the backward update field to register the static image towards the moving image in a gradient-based optimization algorithm """ @abc.abstractmethod def get_energy(self): r"""Numerical value assigned by this metric to the current image pair Must return the numeric value of the similarity between the given static and moving images """ class CCMetric(SimilarityMetric): def __init__(self, dim, sigma_diff=2.0, radius=4): r"""Normalized Cross-Correlation Similarity metric. Parameters ---------- dim : int (either 2 or 3) the dimension of the image domain sigma_diff : the standard deviation of the Gaussian smoothing kernel to be applied to the update field at each iteration radius : int the radius of the squared (cubic) neighborhood at each voxel to be considered to compute the cross correlation """ super(CCMetric, self).__init__(dim) self.sigma_diff = sigma_diff self.radius = radius self._connect_functions() def _connect_functions(self): r"""Assign the methods to be called according to the image dimension Assigns the appropriate functions to be called for precomputing the cross-correlation factors according to the dimension of the input images """ if self.dim == 2: self.precompute_factors = cc.precompute_cc_factors_2d self.compute_forward_step = cc.compute_cc_forward_step_2d self.compute_backward_step = cc.compute_cc_backward_step_2d self.reorient_vector_field = vfu.reorient_vector_field_2d elif self.dim == 3: self.precompute_factors = cc.precompute_cc_factors_3d self.compute_forward_step = cc.compute_cc_forward_step_3d self.compute_backward_step = cc.compute_cc_backward_step_3d self.reorient_vector_field = vfu.reorient_vector_field_3d else: raise ValueError('CC Metric not defined for dim. %d' % (self.dim)) def initialize_iteration(self): r"""Prepares the metric to compute one displacement field iteration. Pre-computes the cross-correlation factors for efficient computation of the gradient of the Cross Correlation w.r.t. the displacement field. It also pre-computes the image gradients in the physical space by re-orienting the gradients in the voxel space using the corresponding affine transformations. """ self.factors = self.precompute_factors(self.static_image, self.moving_image, self.radius) self.factors = np.array(self.factors) self.gradient_moving = np.empty( shape=(self.moving_image.shape)+(self.dim,), dtype=floating) for i, grad in enumerate(sp.gradient(self.moving_image)): self.gradient_moving[..., i] = grad # Convert moving image's gradient field from voxel to physical space if self.moving_spacing is not None: self.gradient_moving /= self.moving_spacing if self.moving_direction is not None: self.reorient_vector_field(self.gradient_moving, self.moving_direction) self.gradient_static = np.empty( shape=(self.static_image.shape)+(self.dim,), dtype=floating) for i, grad in enumerate(sp.gradient(self.static_image)): self.gradient_static[..., i] = grad # Convert moving image's gradient field from voxel to physical space if self.static_spacing is not None: self.gradient_static /= self.static_spacing if self.static_direction is not None: self.reorient_vector_field(self.gradient_static, self.static_direction) def free_iteration(self): r"""Frees the resources allocated during initialization """ del self.factors del self.gradient_moving del self.gradient_static def compute_forward(self): r"""Computes one step bringing the moving image towards the static. Computes the update displacement field to be used for registration of the moving image towards the static image """ displacement, self.energy = self.compute_forward_step( self.gradient_static, self.factors, self.radius) displacement = np.array(displacement) for i in range(self.dim): displacement[..., i] = ndimage.filters.gaussian_filter( displacement[..., i], self.sigma_diff) return displacement def compute_backward(self): r"""Computes one step bringing the static image towards the moving. Computes the update displacement field to be used for registration of the static image towards the moving image """ displacement, energy = self.compute_backward_step(self.gradient_moving, self.factors, self.radius) displacement = np.array(displacement) for i in range(self.dim): displacement[..., i] = ndimage.filters.gaussian_filter( displacement[..., i], self.sigma_diff) return displacement def get_energy(self): r"""Numerical value assigned by this metric to the current image pair Returns the Cross Correlation (data term) energy computed at the largest iteration """ return self.energy class EMMetric(SimilarityMetric): def __init__(self, dim, smooth=1.0, inner_iter=5, q_levels=256, double_gradient=True, step_type='gauss_newton'): r"""Expectation-Maximization Metric Similarity metric based on the Expectation-Maximization algorithm to handle multi-modal images. The transfer function is modeled as a set of hidden random variables that are estimated at each iteration of the algorithm. Parameters ---------- dim : int (either 2 or 3) the dimension of the image domain smooth : float smoothness parameter, the larger the value the smoother the deformation field inner_iter : int number of iterations to be performed at each level of the multi- resolution Gauss-Seidel optimization algorithm (this is not the number of steps per Gaussian Pyramid level, that parameter must be set for the optimizer, not the metric) q_levels : number of quantization levels (equal to the number of hidden variables in the EM algorithm) double_gradient : boolean if True, the gradient of the expected static image under the moving modality will be added to the gradient of the moving image, similarly, the gradient of the expected moving image under the static modality will be added to the gradient of the static image. step_type : string ('gauss_newton', 'demons') the optimization schedule to be used in the multi-resolution Gauss-Seidel optimization algorithm (not used if Demons Step is selected) """ super(EMMetric, self).__init__(dim) self.smooth = smooth self.inner_iter = inner_iter self.q_levels = q_levels self.use_double_gradient = double_gradient self.step_type = step_type self.static_image_mask = None self.moving_image_mask = None self.staticq_means_field = None self.movingq_means_field = None self.movingq_levels = None self.staticq_levels = None self._connect_functions() def _connect_functions(self): r"""Assign the methods to be called according to the image dimension Assigns the appropriate functions to be called for image quantization, statistics computation and multi-resolution iterations according to the dimension of the input images """ if self.dim == 2: self.quantize = em.quantize_positive_2d self.compute_stats = em.compute_masked_class_stats_2d self.reorient_vector_field = vfu.reorient_vector_field_2d elif self.dim == 3: self.quantize = em.quantize_positive_3d self.compute_stats = em.compute_masked_class_stats_3d self.reorient_vector_field = vfu.reorient_vector_field_3d else: raise ValueError('EM Metric not defined for dim. %d' % (self.dim)) if self.step_type == 'demons': self.compute_step = self.compute_demons_step elif self.step_type == 'gauss_newton': self.compute_step = self.compute_gauss_newton_step else: raise ValueError('Opt. step %s not defined' % (self.step_type)) def initialize_iteration(self): r"""Prepares the metric to compute one displacement field iteration. Pre-computes the transfer functions (hidden random variables) and variances of the estimators. Also pre-computes the gradient of both input images. Note that once the images are transformed to the opposite modality, the gradient of the transformed images can be used with the gradient of the corresponding modality in the same fashion as diff-demons does for mono-modality images. If the flag self.use_double_gradient is True these gradients are averaged. """ sampling_mask = self.static_image_mask*self.moving_image_mask self.sampling_mask = sampling_mask staticq, self.staticq_levels, hist = self.quantize(self.static_image, self.q_levels) staticq = np.array(staticq, dtype=np.int32) self.staticq_levels = np.array(self.staticq_levels) staticq_means, staticq_vars = self.compute_stats(sampling_mask, self.moving_image, self.q_levels, staticq) staticq_means[0] = 0 self.staticq_means = np.array(staticq_means) self.staticq_variances = np.array(staticq_vars) self.staticq_sigma_sq_field = self.staticq_variances[staticq] self.staticq_means_field = self.staticq_means[staticq] self.gradient_moving = np.empty( shape=(self.moving_image.shape)+(self.dim,), dtype=floating) for i, grad in enumerate(sp.gradient(self.moving_image)): self.gradient_moving[..., i] = grad # Convert moving image's gradient field from voxel to physical space if self.moving_spacing is not None: self.gradient_moving /= self.moving_spacing if self.moving_direction is not None: self.reorient_vector_field(self.gradient_moving, self.moving_direction) self.gradient_static = np.empty( shape=(self.static_image.shape)+(self.dim,), dtype=floating) for i, grad in enumerate(sp.gradient(self.static_image)): self.gradient_static[..., i] = grad # Convert moving image's gradient field from voxel to physical space if self.static_spacing is not None: self.gradient_static /= self.static_spacing if self.static_direction is not None: self.reorient_vector_field(self.gradient_static, self.static_direction) movingq, self.movingq_levels, hist = self.quantize(self.moving_image, self.q_levels) movingq = np.array(movingq, dtype=np.int32) self.movingq_levels = np.array(self.movingq_levels) movingq_means, movingq_variances = self.compute_stats( sampling_mask, self.static_image, self.q_levels, movingq) movingq_means[0] = 0 self.movingq_means = np.array(movingq_means) self.movingq_variances = np.array(movingq_variances) self.movingq_sigma_sq_field = self.movingq_variances[movingq] self.movingq_means_field = self.movingq_means[movingq] if self.use_double_gradient: for i, grad in enumerate(sp.gradient(self.staticq_means_field)): self.gradient_moving[..., i] += grad for i, grad in enumerate(sp.gradient(self.movingq_means_field)): self.gradient_static[..., i] += grad def free_iteration(self): r""" Frees the resources allocated during initialization """ del self.sampling_mask del self.staticq_levels del self.movingq_levels del self.staticq_sigma_sq_field del self.staticq_means_field del self.movingq_sigma_sq_field del self.movingq_means_field del self.gradient_moving del self.gradient_static def compute_forward(self): """Computes one step bringing the reference image towards the static. Computes the forward update field to register the moving image towards the static image in a gradient-based optimization algorithm """ return self.compute_step(True) def compute_backward(self): r"""Computes one step bringing the static image towards the moving. Computes the update displacement field to be used for registration of the static image towards the moving image """ return self.compute_step(False) def compute_gauss_newton_step(self, forward_step=True): r"""Computes the Gauss-Newton energy minimization step Computes the Newton step to minimize this energy, i.e., minimizes the linearized energy function with respect to the regularized displacement field (this step does not require post-smoothing, as opposed to the demons step, which does not include regularization). To accelerate convergence we use the multi-grid Gauss-Seidel algorithm proposed by Bruhn and Weickert et al [Bruhn05] Parameters ---------- forward_step : boolean if True, computes the Newton step in the forward direction (warping the moving towards the static image). If False, computes the backward step (warping the static image to the moving image) Returns ------- displacement : array, shape (R, C, 2) or (S, R, C, 3) the Newton step References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. """ reference_shape = self.static_image.shape if forward_step: gradient = self.gradient_static delta = self.staticq_means_field - self.moving_image sigma_sq_field = self.staticq_sigma_sq_field else: gradient = self.gradient_moving delta = self.movingq_means_field - self.static_image sigma_sq_field = self.movingq_sigma_sq_field displacement = np.zeros(shape=(reference_shape)+(self.dim,), dtype=floating) if self.dim == 2: self.energy = v_cycle_2d(self.levels_below, self.inner_iter, delta, sigma_sq_field, gradient, None, self.smooth, displacement) else: self.energy = v_cycle_3d(self.levels_below, self.inner_iter, delta, sigma_sq_field, gradient, None, self.smooth, displacement) return displacement def compute_demons_step(self, forward_step=True): r"""Demons step for EM metric Parameters ---------- forward_step : boolean if True, computes the Demons step in the forward direction (warping the moving towards the static image). If False, computes the backward step (warping the static image to the moving image) Returns ------- displacement : array, shape (R, C, 2) or (S, R, C, 3) the Demons step """ sigma_reg_2 = np.sum(self.static_spacing**2)/self.dim if forward_step: gradient = self.gradient_static delta_field = self.static_image - self.movingq_means_field sigma_sq_field = self.movingq_sigma_sq_field else: gradient = self.gradient_moving delta_field = self.moving_image - self.staticq_means_field sigma_sq_field = self.staticq_sigma_sq_field if self.dim == 2: step, self.energy = em.compute_em_demons_step_2d(delta_field, sigma_sq_field, gradient, sigma_reg_2, None) else: step, self.energy = em.compute_em_demons_step_3d(delta_field, sigma_sq_field, gradient, sigma_reg_2, None) for i in range(self.dim): step[..., i] = ndimage.filters.gaussian_filter(step[..., i], self.smooth) return step def get_energy(self): r"""The numerical value assigned by this metric to the current image pair Returns the EM (data term) energy computed at the largest iteration """ return self.energy def use_static_image_dynamics(self, original_static_image, transformation): r"""This is called by the optimizer just after setting the static image. EMMetric takes advantage of the image dynamics by computing the current static image mask from the originalstaticImage mask (warped by nearest neighbor interpolation) Parameters ---------- original_static_image : array, shape (R, C) or (S, R, C) the original static image from which the current static image was generated, the current static image is the one that was provided via 'set_static_image(...)', which may not be the same as the original static image but a warped version of it (even the static image changes during Symmetric Normalization, not only the moving one). transformation : DiffeomorphicMap object the transformation that was applied to the original_static_image to generate the current static image """ self.static_image_mask = (original_static_image > 0).astype(np.int32) if transformation is None: return shape = np.array(self.static_image.shape, dtype=np.int32) affine = self.static_affine self.static_image_mask = transformation.transform( self.static_image_mask, 'nearest', None, shape, affine) def use_moving_image_dynamics(self, original_moving_image, transformation): r"""This is called by the optimizer just after setting the moving image. EMMetric takes advantage of the image dynamics by computing the current moving image mask from the original_moving_image mask (warped by nearest neighbor interpolation) Parameters ---------- original_moving_image : array, shape (R, C) or (S, R, C) the original moving image from which the current moving image was generated, the current moving image is the one that was provided via 'set_moving_image(...)', which may not be the same as the original moving image but a warped version of it. transformation : DiffeomorphicMap object the transformation that was applied to the original_moving_image to generate the current moving image """ self.moving_image_mask = (original_moving_image > 0).astype(np.int32) if transformation is None: return shape = np.array(self.moving_image.shape, dtype=np.int32) affine = self.moving_affine self.moving_image_mask = transformation.transform( self.moving_image_mask, 'nearest', None, shape, affine) class SSDMetric(SimilarityMetric): def __init__(self, dim, smooth=4, inner_iter=10, step_type='demons'): r"""Sum of Squared Differences (SSD) Metric Similarity metric for (mono-modal) nonlinear image registration defined by the sum of squared differences (SSD) Parameters ---------- dim : int (either 2 or 3) the dimension of the image domain smooth : float smoothness parameter, the larger the value the smoother the deformation field inner_iter : int number of iterations to be performed at each level of the multi- resolution Gauss-Seidel optimization algorithm (this is not the number of steps per Gaussian Pyramid level, that parameter must be set for the optimizer, not the metric) step_type : string the displacement field step to be computed when 'compute_forward' and 'compute_backward' are called. Either 'demons' or 'gauss_newton' """ super(SSDMetric, self).__init__(dim) self.smooth = smooth self.inner_iter = inner_iter self.step_type = step_type self.levels_below = 0 self._connect_functions() def _connect_functions(self): r"""Assign the methods to be called according to the image dimension Assigns the appropriate functions to be called for vector field reorientation and displacement field steps according to the dimension of the input images and the select type of step (either Demons or Gauss Newton) """ if self.dim == 2: self.reorient_vector_field = vfu.reorient_vector_field_2d elif self.dim == 3: self.reorient_vector_field = vfu.reorient_vector_field_3d else: raise ValueError('SSD Metric not defined for dim. %d' % (self.dim)) if self.step_type == 'gauss_newton': self.compute_step = self.compute_gauss_newton_step elif self.step_type == 'demons': self.compute_step = self.compute_demons_step else: raise ValueError('Opt. step %s not defined' % (self.step_type)) def initialize_iteration(self): r"""Prepares the metric to compute one displacement field iteration. Pre-computes the gradient of the input images to be used in the computation of the forward and backward steps. """ self.gradient_moving = np.empty( shape=(self.moving_image.shape)+(self.dim,), dtype=floating) for i, grad in enumerate(gradient(self.moving_image)): self.gradient_moving[..., i] = grad # Convert static image's gradient field from voxel to physical space if self.moving_spacing is not None: self.gradient_moving /= self.moving_spacing if self.moving_direction is not None: self.reorient_vector_field(self.gradient_moving, self.moving_direction) self.gradient_static = np.empty( shape=(self.static_image.shape)+(self.dim,), dtype=floating) for i, grad in enumerate(gradient(self.static_image)): self.gradient_static[..., i] = grad # Convert static image's gradient field from voxel to physical space if self.static_spacing is not None: self.gradient_static /= self.static_spacing if self.static_direction is not None: self.reorient_vector_field(self.gradient_static, self.static_direction) def compute_forward(self): r"""Computes one step bringing the reference image towards the static. Computes the update displacement field to be used for registration of the moving image towards the static image """ return self.compute_step(True) def compute_backward(self): r"""Computes one step bringing the static image towards the moving. Computes the update displacement field to be used for registration of the static image towards the moving image """ return self.compute_step(False) def compute_gauss_newton_step(self, forward_step=True): r"""Computes the Gauss-Newton energy minimization step Minimizes the linearized energy function (Newton step) defined by the sum of squared differences of corresponding pixels of the input images with respect to the displacement field. Parameters ---------- forward_step : boolean if True, computes the Newton step in the forward direction (warping the moving towards the static image). If False, computes the backward step (warping the static image to the moving image) Returns ------- displacement : array, shape = static_image.shape + (3,) if forward_step==True, the forward SSD Gauss-Newton step, else, the backward step """ reference_shape = self.static_image.shape if forward_step: gradient = self.gradient_static delta_field = self.static_image-self.moving_image else: gradient = self.gradient_moving delta_field = self.moving_image - self.static_image displacement = np.zeros(shape=(reference_shape)+(self.dim,), dtype=floating) if self.dim == 2: self.energy = v_cycle_2d(self.levels_below, self.inner_iter, delta_field, None, gradient, None, self.smooth, displacement) else: self.energy = v_cycle_3d(self.levels_below, self.inner_iter, delta_field, None, gradient, None, self.smooth, displacement) return displacement def compute_demons_step(self, forward_step=True): r"""Demons step for SSD metric Computes the demons step proposed by Vercauteren et al.[Vercauteren09] for the SSD metric. Parameters ---------- forward_step : boolean if True, computes the Demons step in the forward direction (warping the moving towards the static image). If False, computes the backward step (warping the static image to the moving image) Returns ------- displacement : array, shape (R, C, 2) or (S, R, C, 3) the Demons step References ---------- [Vercauteren09] Tom Vercauteren, Xavier Pennec, Aymeric Perchant, Nicholas Ayache, "Diffeomorphic Demons: Efficient Non-parametric Image Registration", Neuroimage 2009 """ sigma_reg_2 = np.sum(self.static_spacing**2)/self.dim if forward_step: gradient = self.gradient_static delta_field = self.static_image - self.moving_image else: gradient = self.gradient_moving delta_field = self.moving_image - self.static_image if self.dim == 2: step, self.energy = ssd.compute_ssd_demons_step_2d(delta_field, gradient, sigma_reg_2, None) else: step, self.energy = ssd.compute_ssd_demons_step_3d(delta_field, gradient, sigma_reg_2, None) for i in range(self.dim): step[..., i] = ndimage.filters.gaussian_filter(step[..., i], self.smooth) return step def get_energy(self): r"""The numerical value assigned by this metric to the current image pair Returns the Sum of Squared Differences (data term) energy computed at the largest iteration """ return self.energy def free_iteration(self): r""" Nothing to free for the SSD metric """ pass def v_cycle_2d(n, k, delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement, depth=0): r"""Multi-resolution Gauss-Seidel solver using V-type cycles Multi-resolution Gauss-Seidel solver: solves the Gauss-Newton linear system by first filtering (GS-iterate) the current level, then solves for the residual at a coarser resolution and finally refines the solution at the current resolution. This scheme corresponds to the V-cycle proposed by Bruhn and Weickert[Bruhn05]. Parameters ---------- n : int number of levels of the multi-resolution algorithm (it will be called recursively until level n == 0) k : int the number of iterations at each multi-resolution level delta_field : array, shape (R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) sigma_sq_field : array, shape (R, C) the variance of the gray level value at each voxel, according to the EM model (for SSD, it is 1 for all voxels). Inf and 0 values are processed specially to support infinite and zero variance. gradient_field : array, shape (R, C, 2) the gradient of the moving image target : array, shape (R, C, 2) right-hand side of the linear system to be solved in the Weickert's multi-resolution algorithm lambda_param : float smoothness parameter, the larger its value the smoother the displacement field displacement : array, shape (R, C, 2) the displacement field to start the optimization from Returns ------- energy : the energy of the EM (or SSD if sigmafield[...]==1) metric at this iteration References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. """ # pre-smoothing for i in range(k): ssd.iterate_residual_displacement_field_ssd_2d(delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement) if n == 0: energy = ssd.compute_energy_ssd_2d(delta_field) return energy # solve at coarser grid residual = None residual = ssd.compute_residual_displacement_field_ssd_2d(delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement, residual) sub_residual = np.array(vfu.downsample_displacement_field_2d(residual)) del residual subsigma_sq_field = None if sigma_sq_field is not None: subsigma_sq_field = vfu.downsample_scalar_field_2d(sigma_sq_field) subdelta_field = vfu.downsample_scalar_field_2d(delta_field) subgradient_field = np.array( vfu.downsample_displacement_field_2d(gradient_field)) shape = np.array(displacement.shape).astype(np.int32) half_shape = ((shape[0] + 1) // 2, (shape[1] + 1) // 2, 2) sub_displacement = np.zeros(shape=half_shape, dtype=floating) sublambda_param = lambda_param*0.25 v_cycle_2d(n-1, k, subdelta_field, subsigma_sq_field, subgradient_field, sub_residual, sublambda_param, sub_displacement, depth+1) # displacement += np.array( # vfu.upsample_displacement_field(sub_displacement, shape)) displacement += vfu.resample_displacement_field_2d(sub_displacement, np.array([0.5, 0.5]), shape) # post-smoothing for i in range(k): ssd.iterate_residual_displacement_field_ssd_2d(delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement) energy = ssd.compute_energy_ssd_2d(delta_field) return energy def v_cycle_3d(n, k, delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement, depth=0): r"""Multi-resolution Gauss-Seidel solver using V-type cycles Multi-resolution Gauss-Seidel solver: solves the linear system by first filtering (GS-iterate) the current level, then solves for the residual at a coarser resolution and finally refines the solution at the current resolution. This scheme corresponds to the V-cycle proposed by Bruhn and Weickert[1]. [1] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. Parameters ---------- n : int number of levels of the multi-resolution algorithm (it will be called recursively until level n == 0) k : int the number of iterations at each multi-resolution level delta_field : array, shape (S, R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) sigma_sq_field : array, shape (S, R, C) the variance of the gray level value at each voxel, according to the EM model (for SSD, it is 1 for all voxels). Inf and 0 values are processed specially to support infinite and zero variance. gradient_field : array, shape (S, R, C, 3) the gradient of the moving image target : array, shape (S, R, C, 3) right-hand side of the linear system to be solved in the Weickert's multi-resolution algorithm lambda_param : float smoothness parameter, the larger its value the smoother the displacement field displacement : array, shape (S, R, C, 3) the displacement field to start the optimization from Returns ------- energy : the energy of the EM (or SSD if sigmafield[...]==1) metric at this iteration """ # pre-smoothing for i in range(k): ssd.iterate_residual_displacement_field_ssd_3d(delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement) if n == 0: energy = ssd.compute_energy_ssd_3d(delta_field) return energy # solve at coarser grid residual = ssd.compute_residual_displacement_field_ssd_3d(delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement, None) sub_residual = np.array(vfu.downsample_displacement_field_3d(residual)) del residual subsigma_sq_field = None if sigma_sq_field is not None: subsigma_sq_field = vfu.downsample_scalar_field_3d(sigma_sq_field) subdelta_field = vfu.downsample_scalar_field_3d(delta_field) subgradient_field = np.array( vfu.downsample_displacement_field_3d(gradient_field)) shape = np.array(displacement.shape).astype(np.int32) sub_displacement = np.zeros( shape=((shape[0]+1)//2, (shape[1]+1)//2, (shape[2]+1)//2, 3), dtype=floating) sublambda_param = lambda_param*0.25 v_cycle_3d(n-1, k, subdelta_field, subsigma_sq_field, subgradient_field, sub_residual, sublambda_param, sub_displacement, depth+1) del subdelta_field del subsigma_sq_field del subgradient_field del sub_residual displacement += vfu.resample_displacement_field_3d(sub_displacement, 0.5 * np.ones(3), shape) del sub_displacement # post-smoothing for i in range(k): ssd.iterate_residual_displacement_field_ssd_3d(delta_field, sigma_sq_field, gradient_field, target, lambda_param, displacement) energy = ssd.compute_energy_ssd_3d(delta_field) return energy dipy-0.10.1/dipy/align/parzenhist.pyx000066400000000000000000001532551263041327500175440ustar00rootroot00000000000000#!python #cython: boundscheck=False #cython: wraparound=False #cython: cdivision=True import numpy as np cimport numpy as cnp cimport cython import numpy.random as random from .fused_types cimport floating from . import vector_fields as vf from dipy.align.vector_fields cimport(_apply_affine_3d_x0, _apply_affine_3d_x1, _apply_affine_3d_x2, _apply_affine_2d_x0, _apply_affine_2d_x1) from dipy.align.transforms cimport (Transform) cdef extern from "dpy_math.h" nogil: double cos(double) double sin(double) double log(double) class ParzenJointHistogram(object): def __init__(self, nbins): r""" Computes joint histogram and derivatives with Parzen windows Base class to compute joint and marginal probability density functions and their derivatives with respect to a transform's parameters. The smooth histograms are computed by using Parzen windows [Parzen62] with a cubic spline kernel, as proposed by Mattes et al. [Mattes03]. This implementation is not tied to any optimization (registration) method, the idea is that information-theoretic matching functionals (such as Mutual Information) can inherit from this class to perform the low-level computations of the joint intensity distributions and its gradient w.r.t. the transform parameters. The derived class can then compute the similarity/dissimilarity measure and gradient, and finally communicate the results to the appropriate optimizer. Parameters ---------- nbins : int the number of bins of the joint and marginal probability density functions (the actual number of bins of the joint PDF is nbins**2) References ---------- [Parzen62] E. Parzen. On the estimation of a probability density function and the mode. Annals of Mathematical Statistics, 33(3), 1065-1076, 1962. [Mattes03] Mattes, D., Haynor, D. R., Vesselle, H., Lewellen, T. K., & Eubank, W. PET-CT image registration in the chest using free-form deformations. IEEE Transactions on Medical Imaging, 22(1), 120-8, 2003. Notes -------- We need this class in cython to allow _joint_pdf_gradient_dense_2d and _joint_pdf_gradient_dense_3d to use a nogil Jacobian function (obtained from an instance of the Transform class), which allows us to evaluate Jacobians at all the sampling points (maybe the full grid) inside a nogil loop. The reason we need a class is to encapsulate all the parameters related to the joint and marginal distributions. """ self.nbins = nbins # Since the kernel used to compute the Parzen histogram covers more # than one bin, we need to add extra bins to both sides of the # histogram to account for the contributions of the minimum and maximum # intensities. Padding is the number of extra bins used at each side # of the histogram (a total of [2 * padding] extra bins). Since the # support of the cubic spline is 5 bins (the center plus 2 bins at each # side) we need a padding of 2, in the case of cubic splines. self.padding = 2 self.setup_called = False def setup(self, static, moving, smask=None, mmask=None): r""" Compute histogram settings to store the PDF of input images Parameters ---------- static : array static image moving : array moving image smask : array mask of static object being registered (a binary array with 1's inside the object of interest and 0's along the background). If None, the behaviour is equivalent to smask=ones_like(static) mmask : array mask of moving object being registered (a binary array with 1's inside the object of interest and 0's along the background). If None, the behaviour is equivalent to mmask=ones_like(static) """ if smask is None: smask = np.ones_like(static) if mmask is None: mmask = np.ones_like(moving) self.smin = np.min(static[smask != 0]) self.smax = np.max(static[smask != 0]) self.mmin = np.min(moving[mmask != 0]) self.mmax = np.max(moving[mmask != 0]) self.sdelta = (self.smax - self.smin) / (self.nbins - 2 * self.padding) self.mdelta = (self.mmax - self.mmin) / (self.nbins - 2 * self.padding) self.smin = self.smin / self.sdelta - self.padding self.mmin = self.mmin / self.mdelta - self.padding self.joint_grad = None self.metric_grad = None self.metric_val = 0 self.joint = np.zeros(shape=(self.nbins, self.nbins)) self.smarginal = np.zeros(shape=(self.nbins,), dtype=np.float64) self.mmarginal = np.zeros(shape=(self.nbins,), dtype=np.float64) self.setup_called = True def bin_normalize_static(self, x): r""" Maps intensity x to the range covered by the static histogram If the input intensity is in [self.smin, self.smax] then the normalized intensity will be in [self.padding, self.nbins - self.padding] Parameters ---------- x : float the intensity to be normalized Returns ------- xnorm : float normalized intensity to the range covered by the static histogram """ return _bin_normalize(x, self.smin, self.sdelta) def bin_normalize_moving(self, x): r""" Maps intensity x to the range covered by the moving histogram If the input intensity is in [self.mmin, self.mmax] then the normalized intensity will be in [self.padding, self.nbins - self.padding] Parameters ---------- x : float the intensity to be normalized Returns ------- xnorm : float normalized intensity to the range covered by the moving histogram """ return _bin_normalize(x, self.mmin, self.mdelta) def bin_index(self, xnorm): r""" Bin index associated with the given normalized intensity The return value is an integer in [padding, nbins - 1 - padding] Parameters ---------- xnorm : float intensity value normalized to the range covered by the histogram Returns ------- bin : int the bin index associated with the given normalized intensity """ return _bin_index(xnorm, self.nbins, self.padding) def update_pdfs_dense(self, static, moving, smask=None, mmask=None): r''' Computes the Probability Density Functions of two images The joint PDF is stored in self.joint. The marginal distributions corresponding to the static and moving images are computed and stored in self.smarginal and self.mmarginal, respectively. Parameters ---------- static : array, shape (S, R, C) static image moving : array, shape (S, R, C) moving image smask : array, shape (S, R, C) mask of static object being registered (a binary array with 1's inside the object of interest and 0's along the background). If None, ones_like(static) is used as mask. mmask : array, shape (S, R, C) mask of moving object being registered (a binary array with 1's inside the object of interest and 0's along the background). If None, ones_like(moving) is used as mask. ''' if static.shape != moving.shape: raise ValueError("Images must have the same shape") dim = len(static.shape) if not dim in [2, 3]: msg = 'Only dimensions 2 and 3 are supported. ' +\ str(dim) + ' received' raise ValueError(msg) if not self.setup_called: self.setup(static, moving, smask=None, mmask=None) if dim == 2: _compute_pdfs_dense_2d(static, moving, smask, mmask, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint, self.smarginal, self.mmarginal) elif dim == 3: _compute_pdfs_dense_3d(static, moving, smask, mmask, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint, self.smarginal, self.mmarginal) def update_pdfs_sparse(self, sval, mval): r''' Computes the Probability Density Functions from a set of samples The list of intensities `sval` and `mval` are assumed to be sampled from the static and moving images, respectively, at the same physical points. Of course, the images may not be perfectly aligned at the moment the sampling was performed. The resulting distributions corresponds to the paired intensities according to the alignment at the moment the images were sampled. The joint PDF is stored in self.joint. The marginal distributions corresponding to the static and moving images are computed and stored in self.smarginal and self.mmarginal, respectively. Parameters ---------- sval : array, shape (n,) sampled intensities from the static image at sampled_points mval : array, shape (n,) sampled intensities from the moving image at sampled_points ''' if not self.setup_called: self.setup(sval, mval) energy = _compute_pdfs_sparse(sval, mval, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint, self.smarginal, self.mmarginal) def update_gradient_dense(self, theta, transform, static, moving, grid2world, mgradient, smask=None, mmask=None): r''' Computes the Gradient of the joint PDF w.r.t. transform parameters Computes the vector of partial derivatives of the joint histogram w.r.t. each transformation parameter. The gradient is stored in self.joint_grad. Parameters ---------- theta : array, shape (n,) parameters of the transformation to compute the gradient from transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed static : array, shape (S, R, C) static image moving : array, shape (S, R, C) moving image grid2world : array, shape (4, 4) we assume that both images have already been sampled at a common grid. This transform must map voxel coordinates of this common grid to physical coordinates of its corresponding voxel in the moving image. For example, if the moving image was sampled on the static image's grid (this is the typical setting) using an aligning matrix A, then (1) grid2world = A.dot(static_affine) where static_affine is the transformation mapping static image's grid coordinates to physical space. mgradient : array, shape (S, R, C, 3) the gradient of the moving image smask : array, shape (S, R, C), optional mask of static object being registered (a binary array with 1's inside the object of interest and 0's along the background). The default is None, indicating all voxels are considered. mmask : array, shape (S, R, C), optional mask of moving object being registered (a binary array with 1's inside the object of interest and 0's along the background). The default is None, indicating all voxels are considered. ''' if static.shape != moving.shape: raise ValueError("Images must have the same shape") dim = len(static.shape) if not dim in [2, 3]: msg = 'Only dimensions 2 and 3 are supported. ' +\ str(dim) + ' received' raise ValueError(msg) if mgradient.shape != moving.shape + (dim,): raise ValueError('Invalid gradient field dimensions.') if not self.setup_called: self.setup(static, moving, smask, mmask) n = theta.shape[0] nbins = self.nbins if (self.joint_grad is None) or (self.joint_grad.shape[2] != n): self.joint_grad = np.zeros((nbins, nbins, n)) if dim == 2: if mgradient.dtype == np.float64: _joint_pdf_gradient_dense_2d[cython.double](theta, transform, static, moving, grid2world, mgradient, smask, mmask, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) elif mgradient.dtype == np.float32: _joint_pdf_gradient_dense_2d[cython.float](theta, transform, static, moving, grid2world, mgradient, smask, mmask, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) else: raise ValueError('Grad. field dtype must be floating point') elif dim == 3: if mgradient.dtype == np.float64: _joint_pdf_gradient_dense_3d[cython.double](theta, transform, static, moving, grid2world, mgradient, smask, mmask, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) elif mgradient.dtype == np.float32: _joint_pdf_gradient_dense_3d[cython.float](theta, transform, static, moving, grid2world, mgradient, smask, mmask, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) else: raise ValueError('Grad. field dtype must be floating point') def update_gradient_sparse(self, theta, transform, sval, mval, sample_points, mgradient): r''' Computes the Gradient of the joint PDF w.r.t. transform parameters Computes the vector of partial derivatives of the joint histogram w.r.t. each transformation parameter. The list of intensities `sval` and `mval` are assumed to be sampled from the static and moving images, respectively, at the same physical points. Of course, the images may not be perfectly aligned at the moment the sampling was performed. The resulting gradient corresponds to the paired intensities according to the alignment at the moment the images were sampled. The gradient is stored in self.joint_grad. Parameters ---------- theta : array, shape (n,) parameters to compute the gradient at transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed sval : array, shape (m,) sampled intensities from the static image at sampled_points mval : array, shape (m,) sampled intensities from the moving image at sampled_points sample_points : array, shape (m, 3) coordinates (in physical space) of the points the images were sampled at mgradient : array, shape (m, 3) the gradient of the moving image at the sample points ''' dim = sample_points.shape[1] if mgradient.shape[1] != dim: raise ValueError('Dimensions of gradients and points are different') nsamples = sval.shape[0] if ((mgradient.shape[0] != nsamples) or (mval.shape[0] != nsamples) or sample_points.shape[0] != nsamples): raise ValueError('Number of points and gradients are different.') if not mgradient.dtype in [np.float32, np.float64]: raise ValueError('Gradients dtype must be floating point') n = theta.shape[0] nbins = self.nbins if (self.joint_grad is None) or (self.joint_grad.shape[2] != n): self.joint_grad = np.zeros(shape=(nbins, nbins, n)) if dim == 2: if mgradient.dtype == np.float64: _joint_pdf_gradient_sparse_2d[cython.double](theta, transform, sval, mval, sample_points, mgradient, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) elif mgradient.dtype == np.float32: _joint_pdf_gradient_sparse_2d[cython.float](theta, transform, sval, mval, sample_points, mgradient, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) else: raise ValueError('Gradients dtype must be floating point') elif dim == 3: if mgradient.dtype == np.float64: _joint_pdf_gradient_sparse_3d[cython.double](theta, transform, sval, mval, sample_points, mgradient, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) elif mgradient.dtype == np.float32: _joint_pdf_gradient_sparse_3d[cython.float](theta, transform, sval, mval, sample_points, mgradient, self.smin, self.sdelta, self.mmin, self.mdelta, self.nbins, self.padding, self.joint_grad) else: raise ValueError('Gradients dtype must be floating point') else: msg = 'Only dimensions 2 and 3 are supported. ' + str(dim) +\ ' received' raise ValueError(msg) cdef inline double _bin_normalize(double x, double mval, double delta) nogil: r''' Normalizes intensity x to the range covered by the Parzen histogram We assume that mval was computed as: (1) mval = xmin / delta - padding where xmin is the minimum observed image intensity and delta is the bin size, computed as: (2) delta = (xmax - xmin)/(nbins - 2 * padding) If the minimum and maximum intensities were assigned to the first and last bins (with no padding), it could be possible that samples at the first and last bins contribute to "non-existing" bins beyond the boundary (because the support of the Parzen window may be larger than one bin). The padding bins are used to collect such contributions (i.e. the probability of observing a value beyond the minimum and maximum observed intensities may correctly be assigned a positive value). The normalized intensity is (from eq(1) ): (3) nx = (x - xmin) / delta + padding = x / delta - mval This means that normalized intensity nx must lie in the closed interval [padding, nbins-padding], which contains bins with indices padding, padding+1, ..., nbins - 1 - padding (i.e., nbins - 2*padding bins) ''' return x / delta - mval cdef inline cnp.npy_intp _bin_index(double normalized, int nbins, int padding) nogil: r''' Index of the bin in which the normalized intensity `normalized` lies. The intensity is assumed to have been normalized to the range of intensities covered by the histogram: the bin index is the integer part of `normalized`, which must be within the interval [padding, nbins - 1 - padding]. Parameters ---------- normalized : float normalized intensity nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) Returns ------- bin : int index of the bin in which the normalized intensity 'normalized' lies ''' cdef: cnp.npy_intp bin bin = (normalized) if bin < padding: return padding if bin > nbins - 1 - padding: return nbins - 1 - padding return bin def cubic_spline(double[:] x): r''' Evaluates the cubic spline at a set of values Parameters ---------- x : array, shape (n) input values ''' cdef: cnp.npy_intp i cnp.npy_intp n = x.shape[0] double[:] sx = np.zeros(n, dtype=np.float64) with nogil: for i in range(n): sx[i] = _cubic_spline(x[i]) return sx cdef inline double _cubic_spline(double x) nogil: r''' Cubic B-Spline evaluated at x See eq. (3) of [Matttes03]. References ---------- [Mattes03] Mattes, D., Haynor, D. R., Vesselle, H., Lewellen, T. K., & Eubank, W. PET-CT image registration in the chest using free-form deformations. IEEE Transactions on Medical Imaging, 22(1), 120-8, 2003. ''' cdef: double absx = -x if x < 0.0 else x double sqrx = x * x if absx < 1.0: return (4.0 - 6.0 * sqrx + 3.0 * sqrx * absx) / 6.0 elif absx < 2.0: return (8.0 - 12 * absx + 6.0 * sqrx - sqrx * absx) / 6.0 return 0.0 def cubic_spline_derivative(double[:] x): r''' Evaluates the cubic spline derivative at a set of values Parameters ---------- x : array, shape (n) input values ''' cdef: cnp.npy_intp i cnp.npy_intp n = x.shape[0] double[:] sx = np.zeros(n, dtype=np.float64) with nogil: for i in range(n): sx[i] = _cubic_spline_derivative(x[i]) return sx cdef inline double _cubic_spline_derivative(double x) nogil: r''' Derivative of cubic B-Spline evaluated at x See eq. (3) of [Mattes03]. References ---------- [Mattes03] Mattes, D., Haynor, D. R., Vesselle, H., Lewellen, T. K., & Eubank, W. PET-CT image registration in the chest using free-form deformations. IEEE Transactions on Medical Imaging, 22(1), 120-8, 2003. ''' cdef: double absx = -x if x < 0.0 else x if absx < 1.0: if x >= 0.0: return -2.0 * x + 1.5 * x * x else: return -2.0 * x - 1.5 * x * x elif absx < 2.0: if x >= 0: return -2.0 + 2.0 * x - 0.5 * x * x else: return 2.0 + 2.0 * x + 0.5 * x * x return 0.0 cdef _compute_pdfs_dense_2d(double[:, :] static, double[:, :] moving, int[:, :] smask, int[:, :] mmask, double smin, double sdelta, double mmin, double mdelta, int nbins, int padding, double[:, :] joint, double[:] smarginal, double[:] mmarginal): r''' Joint Probability Density Function of intensities of two 2D images Parameters ---------- static : array, shape (R, C) static image moving : array, shape (R, C) moving image smask : array, shape (R, C) mask of static object being registered (a binary array with 1's inside the object of interest and 0's along the background) mmask : array, shape (R, C) mask of moving object being registered (a binary array with 1's inside the object of interest and 0's along the background) smin : float the minimum observed intensity associated with the static image, which was used to define the joint PDF sdelta : float bin size associated with the intensities of the static image mmin : float the minimum observed intensity associated with the moving image, which was used to define the joint PDF mdelta : float bin size associated with the intensities of the moving image nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) joint : array, shape (nbins, nbins) the array to write the joint PDF smarginal : array, shape (nbins,) the array to write the marginal PDF associated with the static image mmarginal : array, shape (nbins,) the array to write the marginal PDF associated with the moving image ''' cdef: cnp.npy_intp nrows = static.shape[0] cnp.npy_intp ncols = static.shape[1] cnp.npy_intp offset, valid_points cnp.npy_intp i, j, r, c double rn, cn double val, spline_arg, sum joint[...] = 0 sum = 0 valid_points = 0 with nogil: smarginal[:] = 0 for i in range(nrows): for j in range(ncols): if smask is not None and smask[i, j] == 0: continue if mmask is not None and mmask[i, j] == 0: continue valid_points += 1 rn = _bin_normalize(static[i, j], smin, sdelta) r = _bin_index(rn, nbins, padding) cn = _bin_normalize(moving[i, j], mmin, mdelta) c = _bin_index(cn, nbins, padding) spline_arg = (c - 2) - cn smarginal[r] += 1 for offset in range(-2, 3): val = _cubic_spline(spline_arg) joint[r, c + offset] += val sum += val spline_arg += 1.0 if sum > 0: for i in range(nbins): for j in range(nbins): joint[i, j] /= valid_points for i in range(nbins): smarginal[i] /= valid_points for j in range(nbins): mmarginal[j] = 0 for i in range(nbins): mmarginal[j] += joint[i, j] cdef _compute_pdfs_dense_3d(double[:, :, :] static, double[:, :, :] moving, int[:, :, :] smask, int[:, :, :] mmask, double smin, double sdelta, double mmin, double mdelta, int nbins, int padding, double[:, :] joint, double[:] smarginal, double[:] mmarginal): r''' Joint Probability Density Function of intensities of two 3D images Parameters ---------- static : array, shape (S, R, C) static image moving : array, shape (S, R, C) moving image smask : array, shape (S, R, C) mask of static object being registered (a binary array with 1's inside the object of interest and 0's along the background) mmask : array, shape (S, R, C) mask of moving object being registered (a binary array with 1's inside the object of interest and 0's along the background) smin : float the minimum observed intensity associated with the static image, which was used to define the joint PDF sdelta : float bin size associated with the intensities of the static image mmin : float the minimum observed intensity associated with the moving image, which was used to define the joint PDF mdelta : float bin size associated with the intensities of the moving image nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) joint : array, shape (nbins, nbins) the array to write the joint PDF to smarginal : array, shape (nbins,) the array to write the marginal PDF associated with the static image mmarginal : array, shape (nbins,) the array to write the marginal PDF associated with the moving image ''' cdef: cnp.npy_intp nslices = static.shape[0] cnp.npy_intp nrows = static.shape[1] cnp.npy_intp ncols = static.shape[2] cnp.npy_intp offset, valid_points cnp.npy_intp k, i, j, r, c double rn, cn double val, spline_arg, sum joint[...] = 0 sum = 0 with nogil: valid_points = 0 smarginal[:] = 0 for k in range(nslices): for i in range(nrows): for j in range(ncols): if smask is not None and smask[k, i, j] == 0: continue if mmask is not None and mmask[k, i, j] == 0: continue valid_points += 1 rn = _bin_normalize(static[k, i, j], smin, sdelta) r = _bin_index(rn, nbins, padding) cn = _bin_normalize(moving[k, i, j], mmin, mdelta) c = _bin_index(cn, nbins, padding) spline_arg = (c - 2) - cn smarginal[r] += 1 for offset in range(-2, 3): val = _cubic_spline(spline_arg) joint[r, c + offset] += val sum += val spline_arg += 1.0 if sum > 0: for i in range(nbins): for j in range(nbins): joint[i, j] /= sum for i in range(nbins): smarginal[i] /= valid_points for j in range(nbins): mmarginal[j] = 0 for i in range(nbins): mmarginal[j] += joint[i, j] cdef _compute_pdfs_sparse(double[:] sval, double[:] mval, double smin, double sdelta, double mmin, double mdelta, int nbins, int padding, double[:, :] joint, double[:] smarginal, double[:] mmarginal): r''' Probability Density Functions of paired intensities Parameters ---------- sval : array, shape (n,) sampled intensities from the static image at sampled_points mval : array, shape (n,) sampled intensities from the moving image at sampled_points smin : float the minimum observed intensity associated with the static image, which was used to define the joint PDF sdelta : float bin size associated with the intensities of the static image mmin : float the minimum observed intensity associated with the moving image, which was used to define the joint PDF mdelta : float bin size associated with the intensities of the moving image nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) joint : array, shape (nbins, nbins) the array to write the joint PDF to smarginal : array, shape (nbins,) the array to write the marginal PDF associated with the static image mmarginal : array, shape (nbins,) the array to write the marginal PDF associated with the moving image ''' cdef: cnp.npy_intp n = sval.shape[0] cnp.npy_intp offset, valid_points cnp.npy_intp i, r, c double rn, cn double val, spline_arg, sum joint[...] = 0 sum = 0 with nogil: valid_points = 0 smarginal[:] = 0 for i in range(n): valid_points += 1 rn = _bin_normalize(sval[i], smin, sdelta) r = _bin_index(rn, nbins, padding) cn = _bin_normalize(mval[i], mmin, mdelta) c = _bin_index(cn, nbins, padding) spline_arg = (c - 2) - cn smarginal[r] += 1 for offset in range(-2, 3): val = _cubic_spline(spline_arg) joint[r, c + offset] += val sum += val spline_arg += 1.0 if sum > 0: for i in range(nbins): for j in range(nbins): joint[i, j] /= sum for i in range(nbins): smarginal[i] /= valid_points for j in range(nbins): mmarginal[j] = 0 for i in range(nbins): mmarginal[j] += joint[i, j] cdef _joint_pdf_gradient_dense_2d(double[:] theta, Transform transform, double[:, :] static, double[:, :] moving, double[:, :] grid2world, floating[:, :, :] mgradient, int[:, :] smask, int[:, :] mmask, double smin, double sdelta, double mmin, double mdelta, int nbins, int padding, double[:, :, :] grad_pdf): r''' Gradient of the joint PDF w.r.t. transform parameters theta Computes the vector of partial derivatives of the joint histogram w.r.t. each transformation parameter. The transformation itself is not necessary to compute the gradient, but only its Jacobian. Parameters ---------- theta : array, shape (n,) parameters of the transformation to compute the gradient from transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed static : array, shape (R, C) static image moving : array, shape (R, C) moving image grid2world : array, shape (3, 3) the grid-to-space transform associated with images static and moving (we assume that both images have already been sampled at a common grid) mgradient : array, shape (R, C, 2) the gradient of the moving image smask : array, shape (R, C) mask of static object being registered (a binary array with 1's inside the object of interest and 0's along the background) mmask : array, shape (R, C) mask of moving object being registered (a binary array with 1's inside the object of interest and 0's along the background) smin : float the minimum observed intensity associated with the static image, which was used to define the joint PDF sdelta : float bin size associated with the intensities of the static image mmin : float the minimum observed intensity associated with the moving image, which was used to define the joint PDF mdelta : float bin size associated with the intensities of the moving image nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) grad_pdf : array, shape (nbins, nbins, len(theta)) the array to write the gradient to ''' cdef: cnp.npy_intp nrows = static.shape[0] cnp.npy_intp ncols = static.shape[1] cnp.npy_intp n = theta.shape[0] cnp.npy_intp offset, valid_points int constant_jacobian = 0 cnp.npy_intp k, i, j, r, c double rn, cn double val, spline_arg, norm_factor double[:, :] J = np.empty(shape=(2, n), dtype=np.float64) double[:] prod = np.empty(shape=(n,), dtype=np.float64) double[:] x = np.empty(shape=(2,), dtype=np.float64) grad_pdf[...] = 0 with nogil: valid_points = 0 for i in range(nrows): for j in range(ncols): if smask is not None and smask[i, j] == 0: continue if mmask is not None and mmask[i, j] == 0: continue valid_points += 1 x[0] = _apply_affine_2d_x0(i, j, 1, grid2world) x[1] = _apply_affine_2d_x1(i, j, 1, grid2world) if constant_jacobian == 0: constant_jacobian = transform._jacobian(theta, x, J) for k in range(n): prod[k] = (J[0, k] * mgradient[i, j, 0] + J[1, k] * mgradient[i, j, 1]) rn = _bin_normalize(static[i, j], smin, sdelta) r = _bin_index(rn, nbins, padding) cn = _bin_normalize(moving[i, j], mmin, mdelta) c = _bin_index(cn, nbins, padding) spline_arg = (c - 2) - cn for offset in range(-2, 3): val = _cubic_spline_derivative(spline_arg) for k in range(n): grad_pdf[r, c + offset, k] -= val * prod[k] spline_arg += 1.0 norm_factor = valid_points * mdelta if norm_factor > 0: for i in range(nbins): for j in range(nbins): for k in range(n): grad_pdf[i, j, k] /= norm_factor cdef _joint_pdf_gradient_dense_3d(double[:] theta, Transform transform, double[:, :, :] static, double[:, :, :] moving, double[:, :] grid2world, floating[:, :, :, :] mgradient, int[:, :, :] smask, int[:, :, :] mmask, double smin, double sdelta, double mmin, double mdelta, int nbins, int padding, double[:, :, :] grad_pdf): r''' Gradient of the joint PDF w.r.t. transform parameters theta Computes the vector of partial derivatives of the joint histogram w.r.t. each transformation parameter. The transformation itself is not necessary to compute the gradient, but only its Jacobian. Parameters ---------- theta : array, shape (n,) parameters of the transformation to compute the gradient from transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed static : array, shape (S, R, C) static image moving : array, shape (S, R, C) moving image grid2world : array, shape (4, 4) the grid-to-space transform associated with images static and moving (we assume that both images have already been sampled at a common grid) mgradient : array, shape (S, R, C, 3) the gradient of the moving image smask : array, shape (S, R, C) mask of static object being registered (a binary array with 1's inside the object of interest and 0's along the background) mmask : array, shape (S, R, C) mask of moving object being registered (a binary array with 1's inside the object of interest and 0's along the background) smin : float the minimum observed intensity associated with the static image, which was used to define the joint PDF sdelta : float bin size associated with the intensities of the static image mmin : float the minimum observed intensity associated with the moving image, which was used to define the joint PDF mdelta : float bin size associated with the intensities of the moving image nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) grad_pdf : array, shape (nbins, nbins, len(theta)) the array to write the gradient to ''' cdef: cnp.npy_intp nslices = static.shape[0] cnp.npy_intp nrows = static.shape[1] cnp.npy_intp ncols = static.shape[2] cnp.npy_intp n = theta.shape[0] cnp.npy_intp offset, valid_points int constant_jacobian = 0 cnp.npy_intp l, k, i, j, r, c double rn, cn double val, spline_arg, norm_factor double[:, :] J = np.empty(shape=(3, n), dtype=np.float64) double[:] prod = np.empty(shape=(n,), dtype=np.float64) double[:] x = np.empty(shape=(3,), dtype=np.float64) grad_pdf[...] = 0 with nogil: valid_points = 0 for k in range(nslices): for i in range(nrows): for j in range(ncols): if smask is not None and smask[k, i, j] == 0: continue if mmask is not None and mmask[k, i, j] == 0: continue valid_points += 1 x[0] = _apply_affine_3d_x0(k, i, j, 1, grid2world) x[1] = _apply_affine_3d_x1(k, i, j, 1, grid2world) x[2] = _apply_affine_3d_x2(k, i, j, 1, grid2world) if constant_jacobian == 0: constant_jacobian = transform._jacobian(theta, x, J) for l in range(n): prod[l] = (J[0, l] * mgradient[k, i, j, 0] + J[1, l] * mgradient[k, i, j, 1] + J[2, l] * mgradient[k, i, j, 2]) rn = _bin_normalize(static[k, i, j], smin, sdelta) r = _bin_index(rn, nbins, padding) cn = _bin_normalize(moving[k, i, j], mmin, mdelta) c = _bin_index(cn, nbins, padding) spline_arg = (c - 2) - cn for offset in range(-2, 3): val = _cubic_spline_derivative(spline_arg) for l in range(n): grad_pdf[r, c + offset, l] -= val * prod[l] spline_arg += 1.0 norm_factor = valid_points * mdelta if norm_factor > 0: for i in range(nbins): for j in range(nbins): for k in range(n): grad_pdf[i, j, k] /= norm_factor cdef _joint_pdf_gradient_sparse_2d(double[:] theta, Transform transform, double[:] sval, double[:] mval, double[:, :] sample_points, floating[:, :] mgradient, double smin, double sdelta, double mmin, double mdelta, int nbins, int padding, double[:, :, :] grad_pdf): r''' Gradient of the joint PDF w.r.t. transform parameters theta Computes the vector of partial derivatives of the joint histogram w.r.t. each transformation parameter. The transformation itself is not necessary to compute the gradient, but only its Jacobian. Parameters ---------- theta : array, shape (n,) parameters to compute the gradient at transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed sval : array, shape (m,) sampled intensities from the static image at sampled_points mval : array, shape (m,) sampled intensities from the moving image at sampled_points sample_points : array, shape (m, 2) positions (in physical space) of the points the images were sampled at mgradient : array, shape (m, 2) the gradient of the moving image at the sample points smin : float the minimum observed intensity associated with the static image, which was used to define the joint PDF sdelta : float bin size associated with the intensities of the static image mmin : float the minimum observed intensity associated with the moving image, which was used to define the joint PDF mdelta : float bin size associated with the intensities of the moving image nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) grad_pdf : array, shape (nbins, nbins, len(theta)) the array to write the gradient to ''' cdef: cnp.npy_intp n = theta.shape[0] cnp.npy_intp m = sval.shape[0] cnp.npy_intp offset int constant_jacobian = 0 cnp.npy_intp i, j, r, c, valid_points double rn, cn double val, spline_arg, norm_factor double[:, :] J = np.empty(shape=(2, n), dtype=np.float64) double[:] prod = np.empty(shape=(n,), dtype=np.float64) grad_pdf[...] = 0 with nogil: valid_points = 0 for i in range(m): valid_points += 1 if constant_jacobian == 0: constant_jacobian = transform._jacobian(theta, sample_points[i], J) for j in range(n): prod[j] = (J[0, j] * mgradient[i, 0] + J[1, j] * mgradient[i, 1]) rn = _bin_normalize(sval[i], smin, sdelta) r = _bin_index(rn, nbins, padding) cn = _bin_normalize(mval[i], mmin, mdelta) c = _bin_index(cn, nbins, padding) spline_arg = (c - 2) - cn for offset in range(-2, 3): val = _cubic_spline_derivative(spline_arg) for j in range(n): grad_pdf[r, c + offset, j] -= val * prod[j] spline_arg += 1.0 norm_factor = valid_points * mdelta if norm_factor > 0: for i in range(nbins): for j in range(nbins): for k in range(n): grad_pdf[i, j, k] /= norm_factor cdef _joint_pdf_gradient_sparse_3d(double[:] theta, Transform transform, double[:] sval, double[:] mval, double[:, :] sample_points, floating[:, :] mgradient, double smin, double sdelta, double mmin, double mdelta, int nbins, int padding, double[:, :, :] grad_pdf): r''' Gradient of the joint PDF w.r.t. transform parameters theta Computes the vector of partial derivatives of the joint histogram w.r.t. each transformation parameter. The transformation itself is not necessary to compute the gradient, but only its Jacobian. Parameters ---------- theta : array, shape (n,) parameters to compute the gradient at transform : instance of Transform the transformation with respect to whose parameters the gradient must be computed sval : array, shape (m,) sampled intensities from the static image at sampled_points mval : array, shape (m,) sampled intensities from the moving image at sampled_points sample_points : array, shape (m, 3) positions (in physical space) of the points the images were sampled at mgradient : array, shape (m, 3) the gradient of the moving image at the sample points smin : float the minimum observed intensity associated with the static image, which was used to define the joint PDF sdelta : float bin size associated with the intensities of the static image mmin : float the minimum observed intensity associated with the moving image, which was used to define the joint PDF mdelta : float bin size associated with the intensities of the moving image nbins : int number of histogram bins padding : int number of bins used as padding (the total bins used for padding at both sides of the histogram is actually 2*padding) grad_pdf : array, shape (nbins, nbins, len(theta)) the array to write the gradient to ''' cdef: cnp.npy_intp n = theta.shape[0] cnp.npy_intp m = sval.shape[0] cnp.npy_intp offset, valid_points int constant_jacobian = 0 cnp.npy_intp i, j, r, c double rn, cn double val, spline_arg, norm_factor double[:, :] J = np.empty(shape=(3, n), dtype=np.float64) double[:] prod = np.empty(shape=(n,), dtype=np.float64) grad_pdf[...] = 0 with nogil: valid_points = 0 for i in range(m): valid_points += 1 if constant_jacobian == 0: constant_jacobian = transform._jacobian(theta, sample_points[i], J) for j in range(n): prod[j] = (J[0, j] * mgradient[i, 0] + J[1, j] * mgradient[i, 1] + J[2, j] * mgradient[i, 2]) rn = _bin_normalize(sval[i], smin, sdelta) r = _bin_index(rn, nbins, padding) cn = _bin_normalize(mval[i], mmin, mdelta) c = _bin_index(cn, nbins, padding) spline_arg = (c - 2) - cn for offset in range(-2, 3): val = _cubic_spline_derivative(spline_arg) for j in range(n): grad_pdf[r, c + offset, j] -= val * prod[j] spline_arg += 1.0 norm_factor = valid_points * mdelta if norm_factor > 0: for i in range(nbins): for j in range(nbins): for k in range(n): grad_pdf[i, j, k] /= norm_factor def compute_parzen_mi(double[:, :] joint, double[:, :, :] joint_gradient, double[:] smarginal, double[:] mmarginal, double[:] mi_gradient): r""" Computes the mutual information and its gradient (if requested) Parameters ---------- joint : array, shape (nbins, nbins) the joint intensity distribution joint_gradient : array, shape (nbins, nbins, n) the gradient of the joint distribution w.r.t. the transformation parameters smarginal : array, shape (nbins,) the marginal intensity distribution of the static image mmarginal : array, shape (nbins,) the marginal intensity distribution of the moving image mi_gradient : array, shape (n,) the buffer in which to write the gradient of the mutual information. If None, the gradient is not computed """ cdef: double epsilon = 2.2204460492503131e-016 double metric_value cnp.npy_intp nrows = joint.shape[0] cnp.npy_intp ncols = joint.shape[1] cnp.npy_intp n = joint_gradient.shape[2] with nogil: mi_gradient[:] = 0 metric_value = 0 for i in range(nrows): for j in range(ncols): if joint[i, j] < epsilon or mmarginal[j] < epsilon: continue factor = log(joint[i, j] / mmarginal[j]) if mi_gradient is not None: for k in range(n): mi_gradient[k] += joint_gradient[i, j, k] * factor if smarginal[i] > epsilon: metric_value += joint[i, j] * (factor - log(smarginal[i])) return metric_value def sample_domain_regular(int k, int[:] shape, double[:, :] grid2world, double sigma=0.25, int seed=1234): r""" Take floor(total_voxels/k) samples from a (2D or 3D) grid The sampling is made by taking all pixels whose index (in lexicographical order) is a multiple of k. Each selected point is slightly perturbed by adding a realization of a normally distributed random variable and then mapped to physical space by the given grid-to-space transform. The lexicographical order of a pixels in a grid of shape (a, b, c) is defined by assigning to each voxel position (i, j, k) the integer index F((i, j, k)) = i * (b * c) + j * (c) + k and sorting increasingly by this index. Parameters ---------- k : int the sampling rate, as described before shape : array, shape (dim,) the shape of the grid to be sampled grid2world : array, shape (dim+1, dim+1) the grid-to-space transform sigma : float the standard deviation of the Normal random distortion to be applied to the sampled points Returns ------- samples : array, shape (total_pixels//k, dim) the matrix whose rows are the sampled points Example ------- >>> from dipy.align.parzenhist import sample_domain_regular >>> import dipy.align.vector_fields as vf >>> shape = np.array((10, 10), dtype=np.int32) >>> sigma = 0 >>> dim = len(shape) >>> grid2world = np.eye(dim+1) >>> n = shape[0]*shape[1] >>> k = 2 >>> samples = sample_domain_regular(k, shape, grid2world, sigma) >>> (samples.shape[0], samples.shape[1]) == (n//k, dim) True >>> isamples = np.array(samples, dtype=np.int32) >>> indices = (isamples[:, 0] * shape[1] + isamples[:, 1]) >>> len(set(indices)) == len(indices) True >>> (indices%k).sum() 0 """ cdef: cnp.npy_intp i, dim, n, m, slice_size double s, r, c double[:, :] samples dim = len(shape) if not vf.is_valid_affine(grid2world, dim): raise ValueError("Invalid grid-to-space matrix") random.seed(seed) if dim == 2: n = shape[0] * shape[1] m = n // k samples = random.randn(m, dim) * sigma with nogil: for i in range(m): r = ((i * k) // shape[1]) + samples[i, 0] c = ((i * k) % shape[1]) + samples[i, 1] samples[i, 0] = _apply_affine_2d_x0(r, c, 1, grid2world) samples[i, 1] = _apply_affine_2d_x1(r, c, 1, grid2world) else: slice_size = shape[1] * shape[2] n = shape[0] * slice_size m = n // k samples = random.randn(m, dim) * sigma with nogil: for i in range(m): s = ((i * k) // slice_size) + samples[i, 0] r = (((i * k) % slice_size) // shape[2]) + samples[i, 1] c = (((i * k) % slice_size) % shape[2]) + samples[i, 2] samples[i, 0] = _apply_affine_3d_x0(s, r, c, 1, grid2world) samples[i, 1] = _apply_affine_3d_x1(s, r, c, 1, grid2world) samples[i, 2] = _apply_affine_3d_x2(s, r, c, 1, grid2world) return samples dipy-0.10.1/dipy/align/reslice.py000066400000000000000000000067551263041327500166150ustar00rootroot00000000000000from multiprocessing import Pool, cpu_count import numpy as np from scipy.ndimage import affine_transform def _affine_transform(kwargs): return affine_transform(**kwargs) def reslice(data, affine, zooms, new_zooms, order=1, mode='constant', cval=0, num_processes=1): """Reslice data with new voxel resolution defined by ``new_zooms`` Parameters ---------- data : array, shape (I,J,K) or (I,J,K,N) 3d volume or 4d volume with datasets affine : array, shape (4,4) mapping from voxel coordinates to world coordinates zooms : tuple, shape (3,) voxel size for (i,j,k) dimensions new_zooms : tuple, shape (3,) new voxel size for (i,j,k) after resampling order : int, from 0 to 5 order of interpolation for resampling/reslicing, 0 nearest interpolation, 1 trilinear etc.. if you don't want any smoothing 0 is the option you need. mode : string ('constant', 'nearest', 'reflect' or 'wrap') Points outside the boundaries of the input are filled according to the given mode. cval : float Value used for points outside the boundaries of the input if mode='constant'. num_processes : int Split the calculation to a pool of children processes. This only applies to 4D `data` arrays. If a positive integer then it defines the size of the multiprocessing pool that will be used. If 0, then the size of the pool will equal the number of cores available. Returns ------- data2 : array, shape (I,J,K) or (I,J,K,N) datasets resampled into isotropic voxel size affine2 : array, shape (4,4) new affine for the resampled image Examples -------- >>> import nibabel as nib >>> from dipy.align.reslice import reslice >>> from dipy.data import get_data >>> fimg = get_data('aniso_vox') >>> img = nib.load(fimg) >>> data = img.get_data() >>> data.shape (58, 58, 24) >>> affine = img.get_affine() >>> zooms = img.get_header().get_zooms()[:3] >>> zooms (4.0, 4.0, 5.0) >>> new_zooms = (3.,3.,3.) >>> new_zooms (3.0, 3.0, 3.0) >>> data2, affine2 = reslice(data, affine, zooms, new_zooms) >>> data2.shape (77, 77, 40) """ new_zooms = np.array(new_zooms, dtype='f8') zooms = np.array(zooms, dtype='f8') R = new_zooms / zooms new_shape = zooms / new_zooms * np.array(data.shape[:3]) new_shape = tuple(np.round(new_shape).astype('i8')) kwargs = {'matrix': R, 'output_shape': new_shape, 'order': order, 'mode': mode, 'cval': cval} if data.ndim == 3: data2 = affine_transform(input=data, **kwargs) if data.ndim == 4: data2 = np.zeros(new_shape+(data.shape[-1],), data.dtype) if not num_processes: num_processes = cpu_count() if num_processes < 2: for i in range(data.shape[-1]): affine_transform(input=data[..., i], output=data2[..., i], **kwargs) else: params = [] for i in range(data.shape[-1]): _kwargs = {'input': data[..., i]} _kwargs.update(kwargs) params.append(_kwargs) pool = Pool(num_processes) for i, result in enumerate(pool.imap(_affine_transform, params)): data2[..., i] = result pool.close() Rx = np.eye(4) Rx[:3, :3] = np.diag(R) affine2 = np.dot(affine, Rx) return data2, affine2 dipy-0.10.1/dipy/align/scalespace.py000066400000000000000000000414561263041327500172670ustar00rootroot00000000000000from . import floating import numpy as np import numpy.linalg as npl import scipy.ndimage.filters as filters class ScaleSpace(object): def __init__(self, image, num_levels, image_grid2world=None, input_spacing=None, sigma_factor=0.2, mask0=False): r""" ScaleSpace Computes the Scale Space representation of an image. The scale space is simply a list of images produced by smoothing the input image with a Gaussian kernel with increasing smoothing parameter. If the image's voxels are isotropic, the smoothing will be the same along all directions: at level L = 0, 1, ..., the sigma is given by $s * ( 2^L - 1 )$. If the voxel dimensions are not isotropic, then the smoothing is weaker along low resolution directions. Parameters ---------- image : array, shape (r,c) or (s, r, c) where s is the number of slices, r is the number of rows and c is the number of columns of the input image. num_levels : int the desired number of levels (resolutions) of the scale space image_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-space transform of the image grid. The default is the identity matrix input_spacing : array, shape (dim,), optional the spacing (voxel size) between voxels in physical space. The default is 1.0 along all axes sigma_factor : float, optional the smoothing factor to be used in the construction of the scale space. The default is 0.2 mask0 : Boolean, optional if True, all smoothed images will be zero at all voxels that are zero in the input image. The default is False. """ self.dim = len(image.shape) self.num_levels = num_levels input_size = np.array(image.shape) if mask0: mask = np.asarray(image > 0, dtype=np.int32) # Normalize input image to [0,1] img = (image - image.min())/(image.max() - image.min()) if mask0: img *= mask # The properties are saved in separate lists. Insert input image # properties at the first level of the scale space self.images = [img.astype(floating)] self.domain_shapes = [input_size.astype(np.int32)] if input_spacing is None: input_spacing = np.ones((self.dim,), dtype=np.int32) self.spacings = [input_spacing] self.scalings = [np.ones(self.dim)] self.affines = [image_grid2world] self.sigmas = [np.zeros(self.dim)] if image_grid2world is not None: self.affine_invs = [npl.inv(image_grid2world)] else: self.affine_invs = [None] # Compute the rest of the levels min_spacing = np.min(input_spacing) for i in range(1, num_levels): scaling_factor = 2 ** i scaling = np.ndarray((self.dim + 1,)) # Note: the minimum below is present in ANTS to prevent the scaling # from being too large (making the sub-sampled image to be too # small) this makes the sub-sampled image at least 32 voxels at # each direction it is risky to make this decision based on image # size, though (we need to investigate more the effect of this) # scaling = np.minimum(scaling_factor * min_spacing /input_spacing, # input_size / 32) scaling = scaling_factor * min_spacing / input_spacing output_spacing = input_spacing * scaling extended = np.append(scaling, [1]) if image_grid2world is not None: affine = image_grid2world.dot(np.diag(extended)) else: affine = np.diag(extended) output_size = input_size * (input_spacing / output_spacing) + 0.5 output_size = output_size.astype(np.int32) sigmas = sigma_factor * (output_spacing / input_spacing - 1.0) # Filter along each direction with the appropriate sigma filtered = filters.gaussian_filter(image, sigmas) filtered = ((filtered - filtered.min()) / (filtered.max() - filtered.min())) if mask0: filtered *= mask # Add current level to the scale space self.images.append(filtered.astype(floating)) self.domain_shapes.append(output_size) self.spacings.append(output_spacing) self.scalings.append(scaling) self.affines.append(affine) self.affine_invs.append(npl.inv(affine)) self.sigmas.append(sigmas) def get_expand_factors(self, from_level, to_level): r"""Ratio of voxel size from pyramid level from_level to to_level Given two scale space resolutions a = from_level, b = to_level, returns the ratio of voxels size at level b to voxel size at level a (the factor that must be used to multiply voxels at level a to 'expand' them to level b). Parameters ---------- from_level : int, 0 <= from_level < L, (L = number of resolutions) the resolution to expand voxels from to_level : int, 0 <= to_level < from_level the resolution to expand voxels to Returns ------- factors : array, shape (k,), k = 2, 3 the expand factors (a scalar for each voxel dimension) """ factors = (np.array(self.spacings[to_level]) / np.array(self.spacings[from_level])) return factors def print_level(self, level): r"""Prints properties of a pyramid level Prints the properties of a level of this scale space to standard output Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to be printed """ print('Domain shape: ', self.get_domain_shape(level)) print('Spacing: ', self.get_spacing(level)) print('Scaling: ', self.get_scaling(level)) print('Affine: ', self.get_affine(level)) print('Sigmas: ', self.get_sigmas(level)) def _get_attribute(self, attribute, level): r"""Returns an attribute from the Scale Space at a given level Returns the level-th element of attribute if level is a valid level of this scale space. Otherwise, returns None. Parameters ---------- attribute : list the attribute to retrieve the level-th element from level : int, the index of the required element from attribute. Returns ------- attribute[level] : object the requested attribute if level is valid, else it raises a ValueError """ if 0 <= level < self.num_levels: return attribute[level] raise ValueError('Invalid pyramid level: '+str(level)) def get_image(self, level): r"""Smoothed image at a given level Returns the smoothed image at the requested level in the Scale Space. Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to get the smooth image from Returns ------- the smooth image at the requested resolution or None if an invalid level was requested """ return self._get_attribute(self.images, level) def get_domain_shape(self, level): r"""Shape the sub-sampled image must have at a particular level Returns the shape the sub-sampled image must have at a particular resolution of the scale space (note that this object does not explicitly subsample the smoothed images, but only provides the properties the sub-sampled images must have). Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to get the sub-sampled shape from Returns ------- the sub-sampled shape at the requested resolution or None if an invalid level was requested """ return self._get_attribute(self.domain_shapes, level) def get_spacing(self, level): r"""Spacings the sub-sampled image must have at a particular level Returns the spacings (voxel sizes) the sub-sampled image must have at a particular resolution of the scale space (note that this object does not explicitly subsample the smoothed images, but only provides the properties the sub-sampled images must have). Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to get the sub-sampled shape from Returns ------- the spacings (voxel sizes) at the requested resolution or None if an invalid level was requested """ return self._get_attribute(self.spacings, level) def get_scaling(self, level): r"""Adjustment factor for input-spacing to reflect voxel sizes at level Returns the scaling factor that needs to be applied to the input spacing (the voxel sizes of the image at level 0 of the scale space) to transform them to voxel sizes at the requested level. Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to get the scalings from Returns ------- the scaling factors from the original spacing to the spacings at the requested level """ return self._get_attribute(self.scalings, level) def get_affine(self, level): r"""Voxel-to-space transformation at a given level Returns the voxel-to-space transformation associated with the sub-sampled image at a particular resolution of the scale space (note that this object does not explicitly subsample the smoothed images, but only provides the properties the sub-sampled images must have). Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to get affine transform from Returns ------- the affine (voxel-to-space) transform at the requested resolution or None if an invalid level was requested """ return self._get_attribute(self.affines, level) def get_affine_inv(self, level): r"""Space-to-voxel transformation at a given level Returns the space-to-voxel transformation associated with the sub-sampled image at a particular resolution of the scale space (note that this object does not explicitly subsample the smoothed images, but only provides the properties the sub-sampled images must have). Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to get the inverse transform from Returns ------- the inverse (space-to-voxel) transform at the requested resolution or None if an invalid level was requested """ return self._get_attribute(self.affine_invs, level) def get_sigmas(self, level): r"""Smoothing parameters used at a given level Returns the smoothing parameters (a scalar for each axis) used at the requested level of the scale space Parameters ---------- level : int, 0 <= from_level < L, (L = number of resolutions) the scale space level to get the smoothing parameters from Returns ------- the smoothing parameters at the requested level """ return self._get_attribute(self.sigmas, level) class IsotropicScaleSpace(ScaleSpace): def __init__(self, image, factors, sigmas, image_grid2world=None, input_spacing=None, mask0=False): r""" IsotropicScaleSpace Computes the Scale Space representation of an image using isotropic smoothing kernels for all scales. The scale space is simply a list of images produced by smoothing the input image with a Gaussian kernel with different smoothing parameters. This specialization of ScaleSpace allows the user to provide custom scale and smoothing factors for all scales. Parameters ---------- image : array, shape (r,c) or (s, r, c) where s is the number of slices, r is the number of rows and c is the number of columns of the input image. factors : list of floats custom scale factors to build the scale space (one factor for each scale). sigmas : list of floats custom smoothing parameter to build the scale space (one parameter for each scale). image_grid2world : array, shape (dim + 1, dim + 1), optional the grid-to-space transform of the image grid. The default is the identity matrix. input_spacing : array, shape (dim,), optional the spacing (voxel size) between voxels in physical space. The default if 1.0 along all axes. mask0 : Boolean, optional if True, all smoothed images will be zero at all voxels that are zero in the input image. The default is False. """ self.dim = len(image.shape) self.num_levels = len(factors) if len(sigmas) != self.num_levels: raise ValueError("sigmas and factors must have the same length") input_size = np.array(image.shape) if mask0: mask = np.asarray(image > 0, dtype=np.int32) # Normalize input image to [0,1] img = ((image.astype(np.float64) - image.min()) / (image.max() - image.min())) if mask0: img *= mask # The properties are saved in separate lists. Insert input image # properties at the first level of the scale space self.images = [img.astype(floating)] self.domain_shapes = [input_size.astype(np.int32)] if input_spacing is None: input_spacing = np.ones((self.dim,), dtype=np.int32) self.spacings = [input_spacing] self.scalings = [np.ones(self.dim)] self.affines = [image_grid2world] self.sigmas = [np.ones(self.dim) * sigmas[self.num_levels - 1]] if image_grid2world is not None: self.affine_invs = [npl.inv(image_grid2world)] else: self.affine_invs = [None] # Compute the rest of the levels min_index = np.argmin(input_spacing) for i in range(1, self.num_levels): factor = factors[self.num_levels - 1 - i] shrink_factors = np.zeros(self.dim) new_spacing = np.zeros(self.dim) shrink_factors[min_index] = factor new_spacing[min_index] = input_spacing[min_index] * factor for j in range(self.dim): if j != min_index: # Select the factor that maximizes isotropy shrink_factors[j] = factor new_spacing[j] = input_spacing[j] * factor min_diff = np.abs(new_spacing[j] - new_spacing[min_index]) for f in range(1, factor): diff = input_spacing[j] * f - new_spacing[min_index] diff = np.abs(diff) if diff < min_diff: shrink_factors[j] = f new_spacing[j] = input_spacing[j] * f min_diff = diff extended = np.append(shrink_factors, [1]) if image_grid2world is not None: affine = image_grid2world.dot(np.diag(extended)) else: affine = np.diag(extended) output_size = (input_size / shrink_factors).astype(np.int32) new_sigmas = np.ones(self.dim) * sigmas[self.num_levels - i - 1] # Filter along each direction with the appropriate sigma filtered = filters.gaussian_filter(image.astype(np.float64), new_sigmas) filtered = ((filtered.astype(np.float64) - filtered.min()) / (filtered.max() - filtered.min())) if mask0: filtered *= mask # Add current level to the scale space self.images.append(filtered.astype(floating)) self.domain_shapes.append(output_size) self.spacings.append(new_spacing) self.scalings.append(shrink_factors) self.affines.append(affine) self.affine_invs.append(npl.inv(affine)) self.sigmas.append(new_sigmas) dipy-0.10.1/dipy/align/streamlinear.py000066400000000000000000000522471263041327500176520ustar00rootroot00000000000000import abc import numpy as np from dipy.utils.six import with_metaclass from dipy.core.optimize import Optimizer from dipy.align.bundlemin import (_bundle_minimum_distance, distance_matrix_mdf) from dipy.tracking.streamline import (transform_streamlines, unlist_streamlines, center_streamlines) from dipy.core.geometry import (compose_transformations, compose_matrix, decompose_matrix) from dipy.utils.six import string_types MAX_DIST = 1e10 LOG_MAX_DIST = np.log(MAX_DIST) class StreamlineDistanceMetric(with_metaclass(abc.ABCMeta, object)): def __init__(self, num_threads=None): """ An abstract class for the metric used for streamline registration If the two sets of streamlines match exactly then method ``distance`` of this object should be minimum. Parameters ---------- num_threads : int Number of threads. If None (default) then all available threads will be used. Only metrics using OpenMP will use this variable. """ self.static = None self.moving = None self.num_threads = num_threads @abc.abstractmethod def setup(self, static, moving): pass @abc.abstractmethod def distance(self, xopt): """ calculate distance for current set of parameters """ pass class BundleMinDistanceMetric(StreamlineDistanceMetric): """ Bundle-based Minimum Distance aka BMD This is the cost function used by the StreamlineLinearRegistration Methods ------- setup(static, moving) distance(xopt) References ---------- .. [Garyfallidis14] Garyfallidis et al., "Direct native-space fiber bundle alignment for group comparisons", ISMRM, 2014. """ def setup(self, static, moving): """ Setup static and moving sets of streamlines Parameters ---------- static : streamlines Fixed or reference set of streamlines. moving : streamlines Moving streamlines. num_threads : int Number of threads. If None (default) then all available threads will be used. Notes ----- Call this after the object is initiated and before distance. """ self._set_static(static) self._set_moving(moving) def _set_static(self, static): static_centered_pts, st_idx = unlist_streamlines(static) self.static_centered_pts = np.ascontiguousarray(static_centered_pts, dtype=np.float64) self.block_size = st_idx[0] def _set_moving(self, moving): self.moving_centered_pts, _ = unlist_streamlines(moving) def distance(self, xopt): """ Distance calculated from this Metric Parameters ---------- xopt : sequence List of affine parameters as an 1D vector, """ return bundle_min_distance_fast(xopt, self.static_centered_pts, self.moving_centered_pts, self.block_size, self.num_threads) class BundleMinDistanceMatrixMetric(StreamlineDistanceMetric): """ Bundle-based Minimum Distance aka BMD This is the cost function used by the StreamlineLinearRegistration Methods ------- setup(static, moving) distance(xopt) Notes ----- The difference with BundleMinDistanceMetric is that this creates the entire distance matrix and therefore requires more memory. """ def setup(self, static, moving): """ Setup static and moving sets of streamlines Parameters ---------- static : streamlines Fixed or reference set of streamlines. moving : streamlines Moving streamlines. Notes ----- Call this after the object is initiated and before distance. Num_threads is not used in this class. Use ``BundleMinDistanceMetric`` for a faster, threaded and less memory hungry metric """ self.static = static self.moving = moving def distance(self, xopt): """ Distance calculated from this Metric Parameters ---------- xopt : sequence List of affine parameters as an 1D vector """ return bundle_min_distance(xopt, self.static, self.moving) class BundleSumDistanceMatrixMetric(BundleMinDistanceMatrixMetric): """ Bundle-based Sum Distance aka BMD This is a cost function that can be used by the StreamlineLinearRegistration class. Methods ------- setup(static, moving) distance(xopt) Notes ----- The difference with BundleMinDistanceMatrixMetric is that it uses uses the sum of the distance matrix and not the sum of mins. """ def distance(self, xopt): """ Distance calculated from this Metric Parameters ---------- xopt : sequence List of affine parameters as an 1D vector """ return bundle_sum_distance(xopt, self.static, self.moving) class StreamlineLinearRegistration(object): def __init__(self, metric=None, x0="rigid", method='L-BFGS-B', bounds=None, verbose=False, options=None, evolution=False, num_threads=None): r""" Linear registration of 2 sets of streamlines [Garyfallidis14]_. Parameters ---------- metric : StreamlineDistanceMetric, If None and fast is False then the BMD distance is used. If fast is True then a faster implementation of BMD is used. Otherwise, use the given distance metric. x0 : array or int or str Initial parametrization for the optimization. If 1D array with: a) 6 elements then only rigid registration is parformed with the 3 first elements for translation and 3 for rotation. b) 7 elements also isotropic scaling is performed (similarity). c) 12 elements then translation, rotation (in degrees), scaling and shearing is performed (affine). Here is an example of x0 with 12 elements: ``x0=np.array([0, 10, 0, 40, 0, 0, 2., 1.5, 1, 0.1, -0.5, 0])`` This has translation (0, 10, 0), rotation (40, 0, 0) in degrees, scaling (2., 1.5, 1) and shearing (0.1, -0.5, 0). If int: a) 6 ``x0 = np.array([0, 0, 0, 0, 0, 0])`` b) 7 ``x0 = np.array([0, 0, 0, 0, 0, 0, 1.])`` c) 12 ``x0 = np.array([0, 0, 0, 0, 0, 0, 1., 1., 1, 0, 0, 0])`` If str: a) "rigid" ``x0 = np.array([0, 0, 0, 0, 0, 0])`` b) "similarity" ``x0 = np.array([0, 0, 0, 0, 0, 0, 1.])`` c) "affine" ``x0 = np.array([0, 0, 0, 0, 0, 0, 1., 1., 1, 0, 0, 0])`` method : str, 'L_BFGS_B' or 'Powell' optimizers can be used. Default is 'L_BFGS_B'. bounds : list of tuples or None, If method == 'L_BFGS_B' then we can use bounded optimization. For example for the six parameters of rigid rotation we can set the bounds = [(-30, 30), (-30, 30), (-30, 30), (-45, 45), (-45, 45), (-45, 45)] That means that we have set the bounds for the three translations and three rotation axes (in degrees). verbose : bool, If True then information about the optimization is shown. options : None or dict, Extra options to be used with the selected method. evolution : boolean If True save the transformation for each iteration of the optimizer. Default is False. Supported only with Scipy >= 0.11. num_threads : int Number of threads. If None (default) then all available threads will be used. Only metrics using OpenMP will use this variable. References ---------- .. [Garyfallidis14] Garyfallidis et al., "Direct native-space fiber bundle alignment for group comparisons", ISMRM, 2014. """ self.x0 = self._set_x0(x0) self.metric = metric if self.metric is None: self.metric = BundleMinDistanceMetric(num_threads=num_threads) self.verbose = verbose self.method = method if self.method not in ['Powell', 'L-BFGS-B']: raise ValueError('Only Powell and L-BFGS-B can be used') self.bounds = bounds self.options = options self.evolution = evolution def optimize(self, static, moving, mat=None): """ Find the minimum of the provided metric. Parameters ---------- static : streamlines Reference or fixed set of streamlines. moving : streamlines Moving set of streamlines. mat : array Transformation (4, 4) matrix to start the registration. ``mat`` is applied to moving. Default value None which means that initial transformation will be generated by shifting the centers of moving and static sets of streamlines to the origin. Returns ------- map : StreamlineRegistrationMap """ msg = 'need to have the same number of points. Use ' msg += 'set_number_of_points from dipy.tracking.streamline' if not np.all(np.array(list(map(len, static))) == static[0].shape[0]): raise ValueError('Static streamlines ' + msg) if not np.all(np.array(list(map(len, moving))) == moving[0].shape[0]): raise ValueError('Moving streamlines ' + msg) if not np.all(np.array(list(map(len, moving))) == static[0].shape[0]): raise ValueError('Static and moving streamlines ' + msg) if mat is None: static_centered, static_shift = center_streamlines(static) moving_centered, moving_shift = center_streamlines(moving) static_mat = compose_matrix44([static_shift[0], static_shift[1], static_shift[2], 0, 0, 0]) moving_mat = compose_matrix44([-moving_shift[0], -moving_shift[1], -moving_shift[2], 0, 0, 0]) else: static_centered = static moving_centered = transform_streamlines(moving, mat) static_mat = np.eye(4) moving_mat = mat self.metric.setup(static_centered, moving_centered) distance = self.metric.distance if self.method == 'Powell': if self.options is None: self.options = {'xtol': 1e-6, 'ftol': 1e-6, 'maxiter': 1e6} opt = Optimizer(distance, self.x0.tolist(), method=self.method, options=self.options, evolution=self.evolution) if self.method == 'L-BFGS-B': if self.options is None: self.options = {'maxcor': 10, 'ftol': 1e-7, 'gtol': 1e-5, 'eps': 1e-8, 'maxiter': 100} opt = Optimizer(distance, self.x0.tolist(), method=self.method, bounds=self.bounds, options=self.options, evolution=self.evolution) if self.verbose: opt.print_summary() opt_mat = compose_matrix44(opt.xopt) mat = compose_transformations(moving_mat, opt_mat, static_mat) mat_history = [] if opt.evolution is not None: for vecs in opt.evolution: mat_history.append( compose_transformations(moving_mat, compose_matrix44(vecs), static_mat)) srm = StreamlineRegistrationMap(mat, opt.xopt, opt.fopt, mat_history, opt.nfev, opt.nit) del opt return srm def _set_x0(self, x0): """ check if input is of correct type""" if hasattr(x0, 'ndim'): if len(x0) not in [6, 7, 12]: msg = 'Only 1D arrays of 6, 7 and 12 elements are allowed' raise ValueError(msg) if x0.ndim != 1: raise ValueError("Array should have only one dimension") return x0 if isinstance(x0, string_types): if x0.lower() == 'rigid': return np.zeros(6) if x0.lower() == 'similarity': return np.array([0, 0, 0, 0, 0, 0, 1.]) if x0.lower() == 'affine': return np.array([0, 0, 0, 0, 0, 0, 1., 1., 1., 0, 0, 0]) if isinstance(x0, int): if x0 not in [6, 7, 12]: msg = 'Only 6, 7 and 12 are accepted as integers' raise ValueError(msg) else: if x0 == 6: return np.zeros(6) if x0 == 7: return np.array([0, 0, 0, 0, 0, 0, 1.]) if x0 == 12: return np.array([0, 0, 0, 0, 0, 0, 1., 1., 1., 0, 0, 0]) raise ValueError('Wrong input') class StreamlineRegistrationMap(object): def __init__(self, matopt, xopt, fopt, matopt_history, funcs, iterations): r""" A map holding the optimum affine matrix and some other parameters of the optimization Parameters ---------- matrix : array, 4x4 affine matrix which transforms the moving to the static streamlines xopt : array, 1d array with the parameters of the transformation after centering fopt : float, final value of the metric matrix_history : array All transformation matrices created during the optimization funcs : int, Number of function evaluations of the optimizer iterations : int Number of iterations of the optimizer """ self.matrix = matopt self.xopt = xopt self.fopt = fopt self.matrix_history = matopt_history self.funcs = funcs self.iterations = iterations def transform(self, moving): """ Transform moving streamlines to the static. Parameters ---------- moving : streamlines Returns ------- moved : streamlines Notes ----- All this does is apply ``self.matrix`` to the input streamlines. """ return transform_streamlines(moving, self.matrix) def bundle_sum_distance(t, static, moving, num_threads=None): """ MDF distance optimization function (SUM) We minimize the distance between moving streamlines as they align with the static streamlines. Parameters ----------- t : ndarray t is a vector of of affine transformation parameters with size at least 6. If size is 6, t is interpreted as translation + rotation. If size is 7, t is interpreted as translation + rotation + isotropic scaling. If size is 12, t is interpreted as translation + rotation + scaling + shearing. static : list Static streamlines moving : list Moving streamlines. These will be transform to align with the static streamlines Returns ------- cost: float """ aff = compose_matrix44(t) moving = transform_streamlines(moving, aff) d01 = distance_matrix_mdf(static, moving) return np.sum(d01) def bundle_min_distance(t, static, moving): """ MDF-based pairwise distance optimization function (MIN) We minimize the distance between moving streamlines as they align with the static streamlines. Parameters ----------- t : ndarray t is a vector of of affine transformation parameters with size at least 6. If size is 6, t is interpreted as translation + rotation. If size is 7, t is interpreted as translation + rotation + isotropic scaling. If size is 12, t is interpreted as translation + rotation + scaling + shearing. static : list Static streamlines moving : list Moving streamlines. num_threads : int Number of threads. If None (default) then all available threads will be used. Returns ------- cost: float """ aff = compose_matrix44(t) moving = transform_streamlines(moving, aff) d01 = distance_matrix_mdf(static, moving) rows, cols = d01.shape return 0.25 * (np.sum(np.min(d01, axis=0)) / float(cols) + np.sum(np.min(d01, axis=1)) / float(rows)) ** 2 def bundle_min_distance_fast(t, static, moving, block_size, num_threads): """ MDF-based pairwise distance optimization function (MIN) We minimize the distance between moving streamlines as they align with the static streamlines. Parameters ----------- t : array 1D array. t is a vector of of affine transformation parameters with size at least 6. If size is 6, t is interpreted as translation + rotation. If size is 7, t is interpreted as translation + rotation + isotropic scaling. If size is 12, t is interpreted as translation + rotation + scaling + shearing. static : array N*M x 3 array. All the points of the static streamlines. With order of streamlines intact. Where N is the number of streamlines and M is the number of points per streamline. moving : array K*M x 3 array. All the points of the moving streamlines. With order of streamlines intact. Where K is the number of streamlines and M is the number of points per streamline. block_size : int Number of points per streamline. All streamlines in static and moving should have the same number of points M. num_threads : int Number of threads. If None (default) then all available threads will be used. Returns ------- cost: float Notes ----- This is a faster implementation of ``bundle_min_distance``, which requires that all the points of each streamline are allocated into an ndarray (of shape N*M by 3, with N the number of points per streamline and M the number of streamlines). This can be done by calling `dipy.tracking.streamlines.unlist_streamlines`. """ aff = compose_matrix44(t) moving = np.dot(aff[:3, :3], moving.T).T + aff[:3, 3] moving = np.ascontiguousarray(moving, dtype=np.float64) rows = static.shape[0] / block_size cols = moving.shape[0] / block_size return _bundle_minimum_distance(static, moving, rows, cols, block_size, num_threads) def _threshold(x, th): return np.maximum(np.minimum(x, th), -th) def compose_matrix44(t, dtype=np.double): """ Compose a 4x4 transformation matrix Parameters ----------- t : ndarray This is a 1D vector of of affine transformation parameters with size at least 6. If size is 6, t is interpreted as translation + rotation. If size is 7, t is interpreted as translation + rotation + isotropic scaling. If size is 12, t is interpreted as translation + rotation + scaling + shearing. Returns ------- T : ndarray Homogeneous transformation matrix of size 4x4. """ if isinstance(t, list): t = np.array(t) size = t.size if size not in [6, 7, 12]: raise ValueError('Accepted number of parameters is 6, 7 and 12') scale, shear, angles, translate = (None, ) * 4 if size in [6, 7, 12]: translate = _threshold(t[0:3], MAX_DIST) angles = np.deg2rad(t[3:6]) if size == 7: scale = np.array((t[6],) * 3) if size == 12: scale = t[6: 9] shear = t[9: 12] return compose_matrix(scale=scale, shear=shear, angles=angles, translate=translate) def decompose_matrix44(mat, size=12): """ Given a 4x4 homogeneous matrix return the parameter vector Parameters ----------- mat : array Homogeneous 4x4 transformation matrix size : int Size of output vector. 6 for rigid, 7 for similarity and 12 for affine. Default is 12. Returns ------- t : ndarray One dimensional ndarray of 6, 7 or 12 affine parameters. """ scale, shear, angles, translate, _ = decompose_matrix(mat) t = np.zeros(12) t[:3] = translate t[3: 6] = np.rad2deg(angles) if size == 6: return t[:6] if size == 7: t[6] = np.mean(scale) return t[:7] if size == 12: t[6: 9] = scale t[9: 12] = shear return t raise ValueError('Size can be 6, 7 or 12') dipy-0.10.1/dipy/align/sumsqdiff.pyx000066400000000000000000001065711263041327500173550ustar00rootroot00000000000000""" Utility functions used by the Sum of Squared Differences (SSD) metric """ import numpy as np cimport cython cimport numpy as cnp from .fused_types cimport floating, number cdef extern from "dpy_math.h" nogil: int dpy_isinf(double) double sqrt(double) @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) cdef void _solve_2d_symmetric_positive_definite(double* A, double* y, double det, double* out) nogil: r"""Solves a 2-variable symmetric positive-definite linear system The C implementation of the public-facing Python function ``solve_2d_symmetric_positive_definite``. Solves the symmetric positive-definite linear system $Mx = y$ given by:: M = [[A[0], A[1]], [A[1], A[2]]] Parameters ---------- A : array, shape (3,) the array containing the entries of the symmetric 2x2 matrix y : array, shape (2,) right-hand side of the system to be solved out : array, shape (2,) the array the output will be stored in """ out[1] = (A[0] * y[1] - A[1] * y[0]) / det out[0] = (y[0] - A[1] * out[1]) / A[0] def solve_2d_symmetric_positive_definite(A, y, double det): r"""Solves a 2-variable symmetric positive-definite linear system Solves the symmetric positive-definite linear system $Mx = y$ given by:: M = [[A[0], A[1]], [A[1], A[2]]] Parameters ---------- A : array, shape (3,) the array containing the entries of the symmetric 2x2 matrix y : array, shape (2,) right-hand side of the system to be solved Returns ------- out : array, shape (2,) the array the output will be stored in """ cdef: cnp.ndarray out = np.zeros(2, dtype=float) _solve_2d_symmetric_positive_definite( cnp.PyArray_DATA(np.ascontiguousarray(A, float)), cnp.PyArray_DATA(np.ascontiguousarray(y, float)), det, cnp.PyArray_DATA(out)) return out @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) cdef int _solve_3d_symmetric_positive_definite(double* g, double* y, double tau, double* out) nogil: r"""Solves a 3-variable symmetric positive-definite linear system Solves the symmetric semi-positive-definite linear system $Mx = y$ given by $M = (g g^{T} + \tau I)$ The C implementation of the public-facing Python function ``solve_3d_symmetric_positive_definite``. Parameters ---------- g : array, shape (3,) the vector in the outer product above y : array, shape (3,) right-hand side of the system to be solved tau : double $\tau$ in $M = (g g^{T} + \tau I)$ out : array, shape (3,) the array the output will be stored in Returns ------- is_singular : int 1 if M is singular, otherwise 0 """ cdef: double a,b,c,d,e,f, y0, y1, y2, sub_det a = g[0] ** 2 + tau if a < 1e-9: return 1 b = g[0] * g[1] sub_det = (a * (g[1] ** 2 + tau) - b * b) if sub_det < 1e-9: return 1 c = g[0] * g[2] d = (a * (g[1] ** 2 + tau) - b * b) / a e = (a * (g[1] * g[2]) - b * c) / a f = (a * (g[2] ** 2 + tau) - c * c) / a - (e * e * a) / sub_det if f < 1e-9: return 1 y0 = y[0] y1 = (y[1] * a - y0 * b) / a y2 = (y[2] * a - c * y0) / a - (e * (y[1] * a - b * y0)) / sub_det out[2] = y2 / f out[1] = (y1 - e * out[2]) / d out[0] = (y0 - b * out[1] - c * out[2]) / a return 0 def solve_3d_symmetric_positive_definite(g, y, double tau): r"""Solves a 3-variable symmetric positive-definite linear system Solves the symmetric semi-positive-definite linear system $Mx = y$ given by $M = (g g^{T} + \tau I)$. Parameters ---------- g : array, shape (3,) the vector in the outer product above y : array, shape (3,) right-hand side of the system to be solved tau : double $\tau$ in $M = (g g^{T} + \tau I)$ Returns ------- out : array, shape (3,) the array the output will be stored in is_singular : int 1 if M is singular, otherwise 0 """ cdef: cnp.ndarray out = np.zeros(3, dtype=float) int is_singular is_singular = _solve_3d_symmetric_positive_definite( cnp.PyArray_DATA(np.ascontiguousarray(g, float)), cnp.PyArray_DATA(np.ascontiguousarray(y, float)), tau, cnp.PyArray_DATA(out)) return out, is_singular @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) cpdef double iterate_residual_displacement_field_ssd_2d( floating[:, :] delta_field, floating[:, :] sigmasq_field, floating[:, :, :] grad, floating[:, :, :] target, double lambda_param, floating[:, :, :] displacement_field): r"""One iteration of a large linear system solver for 2D SSD registration Performs one iteration at one level of the Multi-resolution Gauss-Seidel solver proposed by Bruhn and Weickert [Bruhn05]. Parameters ---------- delta_field : array, shape (R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) sigmasq_field : array, shape (R, C) the variance of the gray level value at each voxel, according to the EM model (for SSD, it is 1 for all voxels). Inf and 0 values are processed specially to support infinite and zero variance. grad : array, shape (R, C, 2) the gradient of the moving image target : array, shape (R, C, 2) right-hand side of the linear system to be solved in the Weickert's multi-resolution algorithm lambda_param : float smoothness parameter of the objective function displacement_field : array, shape (R, C, 2) current displacement field to start the iteration from Returns ------- max_displacement : float the norm of the maximum change in the displacement field after the iteration References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. """ ftype = np.asarray(delta_field).dtype cdef: int NUM_NEIGHBORS = 4 int* dRow = [-1, 0, 1, 0] int* dCol = [0, 1, 0, -1] cnp.npy_intp nrows = delta_field.shape[0] cnp.npy_intp ncols = delta_field.shape[1] cnp.npy_intp r, c, dr, dc, nn, k double* b = [0, 0] double* d = [0, 0] double* y = [0, 0] double* A = [0, 0, 0] int yi double xx, yy, opt, nrm2, delta, sigmasq, max_displacement, det max_displacement = 0 with nogil: for r in range(nrows): for c in range(ncols): delta = delta_field[r, c] sigmasq = sigmasq_field[r, c] if sigmasq_field != None else 1 if(target is None): b[0] = delta_field[r, c] * grad[r, c, 0] b[1] = delta_field[r, c] * grad[r, c, 1] else: b[0] = target[r, c, 0] b[1] = target[r, c, 1] nn = 0 y[0] = 0 y[1] = 0 for k in range(NUM_NEIGHBORS): dr = r + dRow[k] if((dr < 0) or (dr >= nrows)): continue dc = c + dCol[k] if((dc < 0) or (dc >= ncols)): continue nn += 1 y[0] += displacement_field[dr, dc, 0] y[1] += displacement_field[dr, dc, 1] if dpy_isinf(sigmasq) != 0: xx = displacement_field[r, c, 0] yy = displacement_field[r, c, 1] displacement_field[r, c, 0] = y[0] / nn displacement_field[r, c, 1] = y[1] / nn xx -= displacement_field[r, c, 0] yy -= displacement_field[r, c, 1] opt = xx * xx + yy * yy if(max_displacement < opt): max_displacement = opt else: A[0] = grad[r, c, 0] ** 2 + sigmasq * lambda_param * nn A[1] = grad[r, c, 0] * grad[r, c, 1] A[2] = grad[r, c, 1] ** 2 + sigmasq * lambda_param * nn det = A[0] * A[2] - A[1] * A[1] if(det < 1e-9): nrm2 = (grad[r, c, 0] ** 2 + grad[r, c, 1] ** 2) if(nrm2 < 1e-9): displacement_field[r, c, 0] = 0 displacement_field[r, c, 1] = 0 else: displacement_field[r, c, 0] = (b[0]) / nrm2 displacement_field[r, c, 1] = (b[1]) / nrm2 else: y[0] = b[0] + sigmasq * lambda_param * y[0] y[1] = b[1] + sigmasq * lambda_param * y[1] _solve_2d_symmetric_positive_definite(A, y, det, d) xx = displacement_field[r, c, 0] - d[0] yy = displacement_field[r, c, 1] - d[1] displacement_field[r, c, 0] = d[0] displacement_field[r, c, 1] = d[1] opt = xx * xx + yy * yy if(max_displacement < opt): max_displacement = opt return sqrt(max_displacement) @cython.boundscheck(False) @cython.wraparound(False) cpdef double compute_energy_ssd_2d(floating[:, :] delta_field): r"""Sum of squared differences between two 2D images Computes the Sum of Squared Differences between the static and moving image. Those differences are given by delta_field Parameters ---------- delta_field : array, shape (R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) Returns ------- energy : float the SSD energy at this iteration Notes ----- The numeric value of the energy is used only to detect convergence. This function returns only the energy corresponding to the data term (excluding the energy corresponding to the regularization term) because the Greedy-SyN algorithm is an unconstrained gradient descent algorithm in the space of diffeomorphisms: in each iteration it makes a step along the negative smoothed gradient --of the data term-- and then makes sure the resulting diffeomorphisms are invertible using an explicit inversion algorithm. Since it is not clear how to reflect the energy corresponding to this re-projection to the space of diffeomorphisms, a more precise energy computation including the regularization term is useless. Instead, convergence is checked considering the data-term energy only and detecting oscilations in the energy profile. """ cdef: cnp.npy_intp nrows = delta_field.shape[0] cnp.npy_intp ncols = delta_field.shape[1] cnp.npy_intp r, c double energy = 0 with nogil: for r in range(nrows): for c in range(ncols): energy += delta_field[r, c] ** 2 return energy @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) cpdef double iterate_residual_displacement_field_ssd_3d( floating[:, :, :] delta_field, floating[:, :, :] sigmasq_field, floating[:, :, :, :] grad, floating[:, :, :, :] target, double lambda_param, floating[:, :, :, :] disp): r"""One iteration of a large linear system solver for 3D SSD registration Performs one iteration at one level of the Multi-resolution Gauss-Seidel solver proposed by Bruhn and Weickert [Bruhn05]. Parameters ---------- delta_field : array, shape (S, R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) sigmasq_field : array, shape (S, R, C) the variance of the gray level value at each voxel, according to the EM model (for SSD, it is 1 for all voxels). Inf and 0 values are processed specially to support infinite and zero variance. grad : array, shape (S, R, C, 3) the gradient of the moving image target : array, shape (S, R, C, 3) right-hand side of the linear system to be solved in the Weickert's multi-resolution algorithm lambda_param : float smoothness parameter of the objective function disp : array, shape (S, R, C, 3) the displacement field to start the optimization from Returns ------- max_displacement : float the norm of the maximum change in the displacement field after the iteration References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. """ ftype = np.asarray(delta_field).dtype cdef: int NUM_NEIGHBORS = 6 int* dSlice = [-1, 0, 0, 0, 0, 1] int* dRow = [0, -1, 0, 1, 0, 0] int* dCol = [0, 0, 1, 0, -1, 0] cnp.npy_intp nslices = delta_field.shape[0] cnp.npy_intp nrows = delta_field.shape[1] cnp.npy_intp ncols = delta_field.shape[2] int nn double* g = [0, 0, 0] double* b = [0, 0, 0] double* d = [0, 0, 0] double* y = [0, 0, 0] double* A = [0, 0, 0, 0, 0, 0] double xx, yy, zz, opt, nrm2, delta, sigmasq, max_displacement cnp.npy_intp dr, ds, dc, s, r, c max_displacement = 0 with nogil: for s in range(nslices): for r in range(nrows): for c in range(ncols): g[0] = grad[s, r, c, 0] g[1] = grad[s, r, c, 1] g[2] = grad[s, r, c, 2] delta = delta_field[s, r, c] sigmasq = sigmasq_field[s, r, c] if sigmasq_field != None else 1 if(target is None): b[0] = delta_field[s, r, c] * g[0] b[1] = delta_field[s, r, c] * g[1] b[2] = delta_field[s, r, c] * g[2] else: b[0] = target[s, r, c, 0] b[1] = target[s, r, c, 1] b[2] = target[s, r, c, 2] nn = 0 y[0] = 0 y[1] = 0 y[2] = 0 for k in range(NUM_NEIGHBORS): ds = s + dSlice[k] if((ds < 0) or (ds >= nslices)): continue dr = r + dRow[k] if((dr < 0) or (dr >= nrows)): continue dc = c + dCol[k] if((dc < 0) or (dc >= ncols)): continue nn += 1 y[0] += disp[ds, dr, dc, 0] y[1] += disp[ds, dr, dc, 1] y[2] += disp[ds, dr, dc, 2] if dpy_isinf(sigmasq) != 0: xx = disp[s, r, c, 0] yy = disp[s, r, c, 1] zz = disp[s, r, c, 2] disp[s, r, c, 0] = y[0] / nn disp[s, r, c, 1] = y[1] / nn disp[s, r, c, 2] = y[2] / nn xx -= disp[s, r, c, 0] yy -= disp[s, r, c, 1] zz -= disp[s, r, c, 2] opt = xx * xx + yy * yy + zz * zz if(max_displacement < opt): max_displacement = opt elif(sigmasq < 1e-9): nrm2 = g[0] ** 2 + g[1] ** 2 + g[2] ** 2 if(nrm2 < 1e-9): disp[s, r, c, 0] = 0 disp[s, r, c, 1] = 0 disp[s, r, c, 2] = 0 else: disp[s, r, c, 0] = (b[0]) / nrm2 disp[s, r, c, 1] = (b[1]) / nrm2 disp[s, r, c, 2] = (b[2]) / nrm2 else: tau = sigmasq * lambda_param * nn y[0] = b[0] + sigmasq * lambda_param * y[0] y[1] = b[1] + sigmasq * lambda_param * y[1] y[2] = b[2] + sigmasq * lambda_param * y[2] is_singular = _solve_3d_symmetric_positive_definite( g, y, tau, d) if is_singular == 1: nrm2 = g[0] ** 2 + g[1] ** 2 + g[2] ** 2 if(nrm2 < 1e-9): disp[s, r, c, 0] = 0 disp[s, r, c, 1] = 0 disp[s, r, c, 2] = 0 else: disp[s, r, c, 0] = (b[0]) / nrm2 disp[s, r, c, 1] = (b[1]) / nrm2 disp[s, r, c, 2] = (b[2]) / nrm2 xx = disp[s, r, c, 0] - d[0] yy = disp[s, r, c, 1] - d[1] zz = disp[s, r, c, 2] - d[2] disp[s, r, c, 0] = d[0] disp[s, r, c, 1] = d[1] disp[s, r, c, 2] = d[2] opt = xx * xx + yy * yy + zz * zz if(max_displacement < opt): max_displacement = opt return sqrt(max_displacement) @cython.boundscheck(False) @cython.wraparound(False) cpdef double compute_energy_ssd_3d(floating[:, :, :] delta_field): r"""Sum of squared differences between two 3D volumes Computes the Sum of Squared Differences between the static and moving volume Those differences are given by delta_field Parameters ---------- delta_field : array, shape (R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) Returns ------- energy : float the SSD energy at this iteration Notes ----- The numeric value of the energy is used only to detect convergence. This function returns only the energy corresponding to the data term (excluding the energy corresponding to the regularization term) because the Greedy-SyN algorithm is an unconstrained gradient descent algorithm in the space of diffeomorphisms: in each iteration it makes a step along the negative smoothed gradient --of the data term-- and then makes sure the resulting diffeomorphisms are invertible using an explicit inversion algorithm. Since it is not clear how to reflect the energy corresponding to this re-projection to the space of diffeomorphisms, a more precise energy computation including the regularization term is useless. Instead, convergence is checked considering the data-term energy only and detecting oscilations in the energy profile. """ cdef: cnp.npy_intp nslices = delta_field.shape[0] cnp.npy_intp nrows = delta_field.shape[1] cnp.npy_intp ncols = delta_field.shape[2] cnp.npy_intp s, r, c double energy = 0 with nogil: for s in range(nslices): for r in range(nrows): for c in range(ncols): energy += delta_field[s, r, c] ** 2 return energy @cython.boundscheck(False) @cython.wraparound(False) def compute_residual_displacement_field_ssd_3d( floating[:, :, :] delta_field, floating[:, :, :] sigmasq_field, floating[:, :, :, :] gradient_field, floating[:, :, :, :] target, double lambda_param, floating[:, :, :, :] disp, floating[:, :, :, :] residual): r"""The residual displacement field to be fit on the next iteration Computes the residual displacement field corresponding to the current displacement field (given by 'disp') in the Multi-resolution Gauss-Seidel solver proposed by Bruhn and Weickert [Bruhn]. Parameters ---------- delta_field : array, shape (S, R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) sigmasq_field : array, shape (S, R, C) the variance of the gray level value at each voxel, according to the EM model (for SSD, it is 1 for all voxels). Inf and 0 values are processed specially to support infinite and zero variance. gradient_field : array, shape (S, R, C, 3) the gradient of the moving image target : array, shape (S, R, C, 3) right-hand side of the linear system to be solved in the Weickert's multi-resolution algorithm lambda_param : float smoothness parameter in the objective function disp : array, shape (S, R, C, 3) the current displacement field to compute the residual from residual : array, shape (S, R, C, 3) the displacement field to put the residual to Returns ------- residual : array, shape (S, R, C, 3) the residual displacement field. If residual was None a input, then a new field is returned, otherwise the same array is returned References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. """ ftype = np.asarray(delta_field).dtype cdef: int NUM_NEIGHBORS = 6 int* dSlice = [-1, 0, 0, 0, 0, 1] int* dRow = [0, -1, 0, 1, 0, 0] int* dCol = [0, 0, 1, 0, -1, 0] double* b = [0, 0, 0] double* y = [0, 0, 0] int yi cnp.npy_intp nslices = delta_field.shape[0] cnp.npy_intp nrows = delta_field.shape[1] cnp.npy_intp ncols = delta_field.shape[2] double delta, sigmasq, dotP cnp.npy_intp s, r, c, ds, dr, dc if residual is None: residual = np.empty(shape=(nslices, nrows, ncols, 3), dtype=ftype) with nogil: for s in range(nslices): for r in range(nrows): for c in range(ncols): delta = delta_field[s, r, c] sigmasq = sigmasq_field[s, r, c] if sigmasq_field != None else 1 if(target is None): b[0] = delta * gradient_field[s, r, c, 0] b[1] = delta * gradient_field[s, r, c, 1] b[2] = delta * gradient_field[s, r, c, 2] else: b[0] = target[s, r, c, 0] b[1] = target[s, r, c, 1] b[2] = target[s, r, c, 2] y[0] = 0 y[1] = 0 y[2] = 0 for k in range(NUM_NEIGHBORS): ds = s + dSlice[k] if((ds < 0) or (ds >= nslices)): continue dr = r + dRow[k] if((dr < 0) or (dr >= nrows)): continue dc = c + dCol[k] if((dc < 0) or (dc >= ncols)): continue y[0] += (disp[s, r, c, 0] - disp[ds, dr, dc, 0]) y[1] += (disp[s, r, c, 1] - disp[ds, dr, dc, 1]) y[2] += (disp[s, r, c, 2] - disp[ds, dr, dc, 2]) if dpy_isinf(sigmasq) != 0: residual[s, r, c, 0] = -lambda_param * y[0] residual[s, r, c, 1] = -lambda_param * y[1] residual[s, r, c, 2] = -lambda_param * y[2] else: dotP = (gradient_field[s, r, c, 0] * disp[s, r, c, 0] + gradient_field[s, r, c, 1] * disp[s, r, c, 1] + gradient_field[s, r, c, 2] * disp[s, r, c, 2]) residual[s, r, c, 0] = (b[0] - (gradient_field[s, r, c, 0] * dotP + sigmasq * lambda_param * y[0])) residual[s, r, c, 1] = (b[1] - (gradient_field[s, r, c, 1] * dotP + sigmasq * lambda_param * y[1])) residual[s, r, c, 2] = (b[2] - (gradient_field[s, r, c, 2] * dotP + sigmasq * lambda_param * y[2])) return residual @cython.boundscheck(False) @cython.wraparound(False) cpdef compute_residual_displacement_field_ssd_2d( floating[:, :] delta_field, floating[:, :] sigmasq_field, floating[:, :, :] gradient_field, floating[:, :, :] target, double lambda_param, floating[:, :, :] d, floating[:, :, :] residual): r"""The residual displacement field to be fit on the next iteration Computes the residual displacement field corresponding to the current displacement field in the Multi-resolution Gauss-Seidel solver proposed by Bruhn and Weickert [Bruhn05]. Parameters ---------- delta_field : array, shape (R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) sigmasq_field : array, shape (R, C) the variance of the gray level value at each voxel, according to the EM model (for SSD, it is 1 for all voxels). Inf and 0 values are processed specially to support infinite and zero variance. gradient_field : array, shape (R, C, 2) the gradient of the moving image target : array, shape (R, C, 2) right-hand side of the linear system to be solved in the Weickert's multi-resolution algorithm lambda_param : float smoothness parameter in the objective function d : array, shape (R, C, 2) the current displacement field to compute the residual from residual : array, shape (R, C, 2) the displacement field to put the residual to Returns ------- residual : array, shape (R, C, 2) the residual displacement field. If residual was None a input, then a new field is returned, otherwise the same array is returned References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. """ ftype = np.asarray(delta_field).dtype cdef: int NUM_NEIGHBORS = 4 int* dRow = [-1, 0, 1, 0] int* dCol = [0, 1, 0, -1] double* b = [0, 0] double* y = [0, 0] int yi cnp.npy_intp nrows = delta_field.shape[0] cnp.npy_intp ncols = delta_field.shape[1] double delta, sigmasq, dotP cnp.npy_intp r, c, dr, dc if residual is None: residual = np.empty(shape=(nrows, ncols, 2), dtype=ftype) with nogil: for r in range(nrows): for c in range(ncols): delta = delta_field[r, c] sigmasq = sigmasq_field[r, c] if sigmasq_field != None else 1 if target is None: b[0] = delta * gradient_field[r, c, 0] b[1] = delta * gradient_field[r, c, 1] else: b[0] = target[r, c, 0] b[1] = target[r, c, 1] y[0] = 0 # reset y y[1] = 0 nn=0 for k in range(NUM_NEIGHBORS): dr = r + dRow[k] if((dr < 0) or (dr >= nrows)): continue dc = c + dCol[k] if((dc < 0) or (dc >= ncols)): continue y[0] += (d[r, c, 0] - d[dr, dc, 0]) y[1] += (d[r, c, 1] - d[dr, dc, 1]) if dpy_isinf(sigmasq) != 0: residual[r, c, 0] = -lambda_param * y[0] residual[r, c, 1] = -lambda_param * y[1] else: dotP = (gradient_field[r, c, 0] * d[r, c, 0] + gradient_field[r, c, 1] * d[r, c, 1]) residual[r, c, 0] = (b[0] - (gradient_field[r, c, 0] * dotP + sigmasq * lambda_param * y[0])) residual[r, c, 1] = (b[1] - (gradient_field[r, c, 1] * dotP + sigmasq * lambda_param * y[1])) return residual @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_ssd_demons_step_2d(floating[:,:] delta_field, floating[:,:,:] gradient_moving, double sigma_sq_x, floating[:,:,:] out): r"""Demons step for 2D SSD-driven registration Computes the demons step for SSD-driven registration ( eq. 4 in [Bruhn05] ) Parameters ---------- delta_field : array, shape (R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) gradient_field : array, shape (R, C, 2) the gradient of the moving image sigma_sq_x : float parameter controlling the amount of regularization. It corresponds to $\sigma_x^2$ in algorithm 1 of Vercauteren et al.[Vercauteren09] out : array, shape (R, C, 2) if None, a new array will be created to store the demons step. Otherwise the provided array will be used. Returns ------- demons_step : array, shape (R, C, 2) the demons step to be applied for updating the current displacement field energy : float the current ssd energy (before applying the returned demons_step) References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ cdef: cnp.npy_intp nr = delta_field.shape[0] cnp.npy_intp nc = delta_field.shape[1] cnp.npy_intp i, j double delta, delta_2, nrm2, energy, den if out is None: out = np.zeros((nr, nc, 2), dtype=np.asarray(delta_field).dtype) with nogil: energy = 0 for i in range(nr): for j in range(nc): delta = delta_field[i,j] delta_2 = delta**2 energy += delta_2 nrm2 = gradient_moving[i, j, 0]**2 + gradient_moving[i, j, 1]**2 den = delta_2/sigma_sq_x + nrm2 if den <1e-9: out[i, j, 0] = 0 out[i, j, 1] = 0 else: out[i, j, 0] = delta * gradient_moving[i, j, 0] / den out[i, j, 1] = delta * gradient_moving[i, j, 1] / den return out, energy @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def compute_ssd_demons_step_3d(floating[:,:,:] delta_field, floating[:,:,:,:] gradient_moving, double sigma_sq_x, floating[:,:,:,:] out): r"""Demons step for 3D SSD-driven registration Computes the demons step for SSD-driven registration ( eq. 4 in [Bruhn05] ) Parameters ---------- delta_field : array, shape (S, R, C) the difference between the static and moving image (the 'derivative w.r.t. time' in the optical flow model) gradient_field : array, shape (S, R, C, 2) the gradient of the moving image sigma_sq_x : float parameter controlling the amount of regularization. It corresponds to $\sigma_x^2$ in algorithm 1 of Vercauteren et al.[Vercauteren09] out : array, shape (S, R, C, 2) if None, a new array will be created to store the demons step. Otherwise the provided array will be used. Returns ------- demons_step : array, shape (S, R, C, 3) the demons step to be applied for updating the current displacement field energy : float the current ssd energy (before applying the returned demons_step) References ---------- [Bruhn05] Andres Bruhn and Joachim Weickert, "Towards ultimate motion estimation: combining highest accuracy with real-time performance", 10th IEEE International Conference on Computer Vision, 2005. ICCV 2005. [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ cdef: cnp.npy_intp ns = delta_field.shape[0] cnp.npy_intp nr = delta_field.shape[1] cnp.npy_intp nc = delta_field.shape[2] cnp.npy_intp i, j, k double delta, delta_2, nrm2, energy, den if out is None: out = np.zeros((ns, nr, nc, 3), dtype=np.asarray(delta_field).dtype) with nogil: energy = 0 for k in range(ns): for i in range(nr): for j in range(nc): delta = delta_field[k,i,j] delta_2 = delta**2 energy += delta_2 nrm2 = (gradient_moving[k, i, j, 0]**2 + gradient_moving[k, i, j, 1]**2 + gradient_moving[k, i, j, 2]**2) den = delta_2/sigma_sq_x + nrm2 if den < 1e-9: out[k, i, j, 0] = 0 out[k, i, j, 1] = 0 out[k, i, j, 2] = 0 else: out[k, i, j, 0] = (delta * gradient_moving[k, i, j, 0] / den) out[k, i, j, 1] = (delta * gradient_moving[k, i, j, 1] / den) out[k, i, j, 2] = (delta * gradient_moving[k, i, j, 2] / den) return out, energy dipy-0.10.1/dipy/align/tests/000077500000000000000000000000001263041327500157425ustar00rootroot00000000000000dipy-0.10.1/dipy/align/tests/__init__.py000066400000000000000000000000001263041327500200410ustar00rootroot00000000000000dipy-0.10.1/dipy/align/tests/test_crosscorr.py000066400000000000000000000174321263041327500214010ustar00rootroot00000000000000import numpy as np from numpy.testing import assert_array_almost_equal from .. import floating from .. import crosscorr as cc def test_cc_factors_2d(): r""" Compares the output of the optimized function to compute the cross- correlation factors against a direct (not optimized, but less error prone) implementation. """ a = np.array(range(20*20), dtype=floating).reshape(20,20) b = np.array(range(20*20)[::-1], dtype=floating).reshape(20,20) a /= a.max() b /= b.max() for radius in [0, 1, 3, 6]: factors = np.asarray(cc.precompute_cc_factors_2d(a,b,radius)) expected = np.asarray(cc.precompute_cc_factors_2d_test(a,b,radius)) assert_array_almost_equal(factors, expected) def test_cc_factors_3d(): r""" Compares the output of the optimized function to compute the cross- correlation factors against a direct (not optimized, but less error prone) implementation. """ a = np.array(range(20*20*20), dtype=floating).reshape(20,20,20) b = np.array(range(20*20*20)[::-1], dtype=floating).reshape(20,20,20) a /= a.max() b /= b.max() for radius in [0, 1, 3, 6]: factors = np.asarray(cc.precompute_cc_factors_3d(a,b,radius)) expected = np.asarray(cc.precompute_cc_factors_3d_test(a,b,radius)) assert_array_almost_equal(factors, expected, decimal=5) def test_compute_cc_steps_2d(): #Select arbitrary images' shape (same shape for both images) sh = (32, 32) radius = 2 #Select arbitrary centers c_f = (np.asarray(sh)/2) + 1.25 c_g = c_f + 2.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.ndarray(sh + (2,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None] * O X[...,1]= x_1[None, :] * O #Compute the gradient fields of F and G np.random.seed(1147572) grad_F = np.array(X - c_f, dtype = floating) grad_G = np.array(X - c_g, dtype = floating) Fnoise = np.random.ranf(np.size(grad_F)).reshape(grad_F.shape) * grad_F.max() * 0.1 Fnoise = Fnoise.astype(floating) grad_F += Fnoise Gnoise = np.random.ranf(np.size(grad_G)).reshape(grad_G.shape) * grad_G.max() * 0.1 Gnoise = Gnoise.astype(floating) grad_G += Gnoise sq_norm_grad_G = np.sum(grad_G**2,-1) F = np.array(0.5*np.sum(grad_F**2,-1), dtype = floating) G = np.array(0.5*sq_norm_grad_G, dtype = floating) Fnoise = np.random.ranf(np.size(F)).reshape(F.shape) * F.max() * 0.1 Fnoise = Fnoise.astype(floating) F += Fnoise Gnoise = np.random.ranf(np.size(G)).reshape(G.shape) * G.max() * 0.1 Gnoise = Gnoise.astype(floating) G += Gnoise #precompute the cross correlation factors factors = cc.precompute_cc_factors_2d_test(F, G, radius) factors = np.array(factors, dtype = floating) #test the forward step against the exact expression I = factors[..., 0] J = factors[..., 1] sfm = factors[..., 2] sff = factors[..., 3] smm = factors[..., 4] expected = np.ndarray(shape = sh + (2,), dtype = floating) expected[...,0] = (-2.0 * sfm / (sff * smm)) * (J - (sfm / sff) * I) * grad_F[..., 0] expected[...,1] = (-2.0 * sfm / (sff * smm)) * (J - (sfm / sff) * I) * grad_F[..., 1] actual, energy = cc.compute_cc_forward_step_2d(grad_F, factors, 0) assert_array_almost_equal(actual, expected) for radius in range(1,5): expected[:radius, ...] = 0 expected[:, :radius, ...] = 0 expected[-radius::, ...] = 0 expected[:, -radius::, ...] = 0 actual, energy = cc.compute_cc_forward_step_2d(grad_F, factors, radius) assert_array_almost_equal(actual, expected) #test the backward step against the exact expression expected[...,0] = (-2.0 * sfm / (sff * smm)) * (I - (sfm / smm) * J) * grad_G[..., 0] expected[...,1] = (-2.0 * sfm / (sff * smm)) * (I - (sfm / smm) * J) * grad_G[..., 1] actual, energy = cc.compute_cc_backward_step_2d(grad_G, factors, 0) assert_array_almost_equal(actual, expected) for radius in range(1,5): expected[:radius, ...] = 0 expected[:, :radius, ...] = 0 expected[-radius::, ...] = 0 expected[:, -radius::, ...] = 0 actual, energy = cc.compute_cc_backward_step_2d(grad_G, factors, radius) assert_array_almost_equal(actual, expected) def test_compute_cc_steps_3d(): sh = (32, 32, 32) radius = 2 #Select arbitrary centers c_f = (np.asarray(sh)/2) + 1.25 c_g = c_f + 2.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.ndarray(sh + (3,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None, None] * O X[...,1]= x_1[None, :, None] * O X[...,2]= x_2[None, None, :] * O #Compute the gradient fields of F and G np.random.seed(12465825) grad_F = np.array(X - c_f, dtype = floating) grad_G = np.array(X - c_g, dtype = floating) Fnoise = np.random.ranf(np.size(grad_F)).reshape(grad_F.shape) * grad_F.max() * 0.1 Fnoise = Fnoise.astype(floating) grad_F += Fnoise Gnoise = np.random.ranf(np.size(grad_G)).reshape(grad_G.shape) * grad_G.max() * 0.1 Gnoise = Gnoise.astype(floating) grad_G += Gnoise sq_norm_grad_G = np.sum(grad_G**2,-1) F = np.array(0.5*np.sum(grad_F**2,-1), dtype = floating) G = np.array(0.5*sq_norm_grad_G, dtype = floating) Fnoise = np.random.ranf(np.size(F)).reshape(F.shape) * F.max() * 0.1 Fnoise = Fnoise.astype(floating) F += Fnoise Gnoise = np.random.ranf(np.size(G)).reshape(G.shape) * G.max() * 0.1 Gnoise = Gnoise.astype(floating) G += Gnoise #precompute the cross correlation factors factors = cc.precompute_cc_factors_3d_test(F, G, radius) factors = np.array(factors, dtype = floating) #test the forward step against the exact expression I = factors[..., 0] J = factors[..., 1] sfm = factors[..., 2] sff = factors[..., 3] smm = factors[..., 4] expected = np.ndarray(shape = sh + (3,), dtype = floating) expected[...,0] = (-2.0 * sfm / (sff * smm)) * (J - (sfm / sff) * I) * grad_F[..., 0] expected[...,1] = (-2.0 * sfm / (sff * smm)) * (J - (sfm / sff) * I) * grad_F[..., 1] expected[...,2] = (-2.0 * sfm / (sff * smm)) * (J - (sfm / sff) * I) * grad_F[..., 2] actual, energy = cc.compute_cc_forward_step_3d(grad_F, factors, 0) assert_array_almost_equal(actual, expected) for radius in range(1,5): expected[:radius, ...] = 0 expected[:, :radius, ...] = 0 expected[:, :, :radius, :] = 0 expected[-radius::, ...] = 0 expected[:, -radius::, ...] = 0 expected[:, :, -radius::, ...] = 0 actual, energy = cc.compute_cc_forward_step_3d(grad_F, factors, radius) assert_array_almost_equal(actual, expected) #test the backward step against the exact expression expected[...,0] = (-2.0 * sfm / (sff * smm)) * (I - (sfm / smm) * J) * grad_G[..., 0] expected[...,1] = (-2.0 * sfm / (sff * smm)) * (I - (sfm / smm) * J) * grad_G[..., 1] expected[...,2] = (-2.0 * sfm / (sff * smm)) * (I - (sfm / smm) * J) * grad_G[..., 2] actual, energy = cc.compute_cc_backward_step_3d(grad_G, factors, 0) assert_array_almost_equal(actual, expected) for radius in range(1,5): expected[:radius, ...] = 0 expected[:, :radius, ...] = 0 expected[:, :, :radius, :] = 0 expected[-radius::, ...] = 0 expected[:, -radius::, ...] = 0 expected[:, :, -radius::, ...] = 0 actual, energy = cc.compute_cc_backward_step_3d(grad_G, factors, radius) assert_array_almost_equal(actual, expected) if __name__=='__main__': test_cc_factors_2d() test_cc_factors_3d() test_compute_cc_steps_2d() test_compute_cc_steps_3d() dipy-0.10.1/dipy/align/tests/test_expectmax.py000066400000000000000000000410331263041327500213520ustar00rootroot00000000000000import numpy as np from numpy.testing import (assert_equal, assert_array_equal, assert_array_almost_equal, assert_raises) from .. import floating from .. import expectmax as em def test_compute_em_demons_step_2d(): r""" Compares the output of the demons step in 2d against an analytical step. The fixed image is given by $F(x) = \frac{1}{2}||x - c_f||^2$, the moving image is given by $G(x) = \frac{1}{2}||x - c_g||^2$, $x, c_f, c_g \in R^{2}$ References ---------- [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ #Select arbitrary images' shape (same shape for both images) sh = (30, 20) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.ndarray(sh + (2,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None] * O X[...,1]= x_1[None, :] * O #Compute the gradient fields of F and G grad_F = X - c_f grad_G = X - c_g #The squared norm of grad_G to be used later sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*sq_norm_grad_G delta_field = G - F #Now select an arbitrary parameter for $\sigma_x$ (eq 4 in [Vercauteren09]) sigma_x_sq = 1.5 #Set arbitrary values for $\sigma_i$ (eq. 4 in [Vercauteren09]) #The original Demons algorithm used simply |F(x) - G(x)| as an #estimator, so let's use it as well sigma_i_sq = (F - G)**2 #Select some pixels to have special values np.random.seed(1346491) random_labels = np.random.randint(0, 5, sh[0]*sh[1]) random_labels = random_labels.reshape(sh) random_labels[sigma_i_sq==0] = 2 #this label is used to set sigma_i_sq == 0 below random_labels[sq_norm_grad_G==0] = 2 #this label is used to set gradient == 0 below expected = np.zeros_like(grad_G) #Pixels with sigma_i_sq = inf sigma_i_sq[random_labels == 0] = np.inf expected[random_labels == 0, ...] = 0 #Pixels with gradient!=0 and sigma_i_sq=0 sqnrm = sq_norm_grad_G[random_labels == 1] sigma_i_sq[random_labels == 1] = 0 expected[random_labels == 1, 0] = delta_field[random_labels == 1]*grad_G[random_labels == 1, 0]/sqnrm expected[random_labels == 1, 1] = delta_field[random_labels == 1]*grad_G[random_labels == 1, 1]/sqnrm #Pixels with gradient=0 and sigma_i_sq=0 sigma_i_sq[random_labels == 2] = 0 grad_G[random_labels == 2, ...] = 0 expected[random_labels == 2, ...] = 0 #Pixels with gradient=0 and sigma_i_sq!=0 grad_G[random_labels == 3, ...] = 0 #Directly compute the demons step according to eq. 4 in [Vercauteren09] num = (sigma_x_sq * (F - G))[random_labels >= 3] den = (sigma_x_sq * sq_norm_grad_G + sigma_i_sq)[random_labels >= 3] expected[random_labels >= 3] = -1 * np.array(grad_G[random_labels >= 3]) #This is $J^{P}$ in eq. 4 [Vercauteren09] expected[random_labels >= 3,...] *= (num / den)[..., None] #Now compute it using the implementation under test actual = np.empty_like(expected, dtype=floating) em.compute_em_demons_step_2d(np.array(delta_field, dtype=floating), np.array(sigma_i_sq, dtype=floating), np.array(grad_G, dtype=floating), sigma_x_sq, actual) #Test sigma_i_sq == inf try: assert_array_almost_equal(actual[random_labels==0], expected[random_labels==0]) except AssertionError: raise AssertionError("Failed for sigma_i_sq == inf") #Test sigma_i_sq == 0 and gradient != 0 try: assert_array_almost_equal(actual[random_labels==1], expected[random_labels==1]) except AssertionError: raise AssertionError("Failed for sigma_i_sq == 0 and gradient != 0") #Test sigma_i_sq == 0 and gradient == 0 try: assert_array_almost_equal(actual[random_labels==2], expected[random_labels==2]) except AssertionError: raise AssertionError("Failed for sigma_i_sq == 0 and gradient == 0") #Test sigma_i_sq != 0 and gradient == 0 try: assert_array_almost_equal(actual[random_labels==3], expected[random_labels==3]) except AssertionError: raise AssertionError("Failed for sigma_i_sq != 0 and gradient == 0 ") #Test sigma_i_sq != 0 and gradient != 0 try: assert_array_almost_equal(actual[random_labels==4], expected[random_labels==4]) except AssertionError: raise AssertionError("Failed for sigma_i_sq != 0 and gradient != 0") def test_compute_em_demons_step_3d(): r""" Compares the output of the demons step in 3d against an analytical step. The fixed image is given by $F(x) = \frac{1}{2}||x - c_f||^2$, the moving image is given by $G(x) = \frac{1}{2}||x - c_g||^2$, $x, c_f, c_g \in R^{3}$ References ---------- [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ #Select arbitrary images' shape (same shape for both images) sh = (20, 15, 10) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.ndarray(sh + (3,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None, None] * O X[...,1]= x_1[None, :, None] * O X[...,2]= x_2[None, None, :] * O #Compute the gradient fields of F and G grad_F = X - c_f grad_G = X - c_g #The squared norm of grad_G to be used later sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*sq_norm_grad_G delta_field = G - F #Now select an arbitrary parameter for $\sigma_x$ (eq 4 in [Vercauteren09]) sigma_x_sq = 1.5 #Set arbitrary values for $\sigma_i$ (eq. 4 in [Vercauteren09]) #The original Demons algorithm used simply |F(x) - G(x)| as an #estimator, so let's use it as well sigma_i_sq = (F - G)**2 #Select some pixels to have special values np.random.seed(1346491) random_labels = np.random.randint(0, 5, sh[0]*sh[1]*sh[2]) random_labels = random_labels.reshape(sh) random_labels[sigma_i_sq==0] = 2 #this label is used to set sigma_i_sq == 0 below random_labels[sq_norm_grad_G==0] = 2 #this label is used to set gradient == 0 below expected = np.zeros_like(grad_G) #Pixels with sigma_i_sq = inf sigma_i_sq[random_labels == 0] = np.inf expected[random_labels == 0, ...] = 0 #Pixels with gradient!=0 and sigma_i_sq=0 sqnrm = sq_norm_grad_G[random_labels == 1] sigma_i_sq[random_labels == 1] = 0 expected[random_labels == 1, 0] = delta_field[random_labels == 1]*grad_G[random_labels == 1, 0]/sqnrm expected[random_labels == 1, 1] = delta_field[random_labels == 1]*grad_G[random_labels == 1, 1]/sqnrm expected[random_labels == 1, 2] = delta_field[random_labels == 1]*grad_G[random_labels == 1, 2]/sqnrm #Pixels with gradient=0 and sigma_i_sq=0 sigma_i_sq[random_labels == 2] = 0 grad_G[random_labels == 2, ...] = 0 expected[random_labels == 2, ...] = 0 #Pixels with gradient=0 and sigma_i_sq!=0 grad_G[random_labels == 3, ...] = 0 #Directly compute the demons step according to eq. 4 in [Vercauteren09] num = (sigma_x_sq * (F - G))[random_labels >= 3] den = (sigma_x_sq * sq_norm_grad_G + sigma_i_sq)[random_labels >= 3] expected[random_labels >= 3] = -1 * np.array(grad_G[random_labels >= 3]) #This is $J^{P}$ in eq. 4 [Vercauteren09] expected[random_labels >= 3,...] *= (num / den)[...,None] #Now compute it using the implementation under test actual = np.empty_like(expected, dtype=floating) em.compute_em_demons_step_3d(np.array(delta_field, dtype=floating), np.array(sigma_i_sq, dtype=floating), np.array(grad_G, dtype=floating), sigma_x_sq, actual) #Test sigma_i_sq == inf try: assert_array_almost_equal(actual[random_labels==0], expected[random_labels==0]) except AssertionError: raise AssertionError("Failed for sigma_i_sq == inf") #Test sigma_i_sq == 0 and gradient != 0 try: assert_array_almost_equal(actual[random_labels==1], expected[random_labels==1]) except AssertionError: raise AssertionError("Failed for sigma_i_sq == 0 and gradient != 0") #Test sigma_i_sq == 0 and gradient == 0 try: assert_array_almost_equal(actual[random_labels==2], expected[random_labels==2]) except AssertionError: raise AssertionError("Failed for sigma_i_sq == 0 and gradient == 0") #Test sigma_i_sq != 0 and gradient == 0 try: assert_array_almost_equal(actual[random_labels==3], expected[random_labels==3]) except AssertionError: raise AssertionError("Failed for sigma_i_sq != 0 and gradient == 0 ") #Test sigma_i_sq != 0 and gradient != 0 try: assert_array_almost_equal(actual[random_labels==4], expected[random_labels==4]) except AssertionError: raise AssertionError("Failed for sigma_i_sq != 0 and gradient != 0") def test_quantize_positive_2d(): np.random.seed(1246592) num_levels = 11 # an arbitrary number of quantization levels img_shape = (15, 20) # arbitrary test image shape (must contain at least 3 elements) min_positive = 0.1 max_positive = 1.0 epsilon = 1e-8 delta = (max_positive - min_positive + epsilon) / (num_levels - 1) true_levels = np.zeros((num_levels,), dtype = np.float32) # put the intensities at the centers of the bins true_levels[1:] = np.linspace(min_positive+delta*0.5, max_positive-delta*0.5, num_levels-1) true_quantization = np.empty(img_shape, dtype = np.int32) # generate a target quantization image random_labels = np.random.randint(0, num_levels, np.size(true_quantization)) # make sure there is at least one element equal to 0, 1 and num_levels-1 random_labels[0] = 0 random_labels[1] = 1 random_labels[2] = num_levels-1 true_quantization[...] = random_labels.reshape(img_shape) noise_amplitude = np.min([delta / 4.0, min_positive / 4.0]) # make sure additive noise doesn't change the quantization result noise = np.random.ranf(np.size(true_quantization)).reshape(img_shape) * noise_amplitude noise = noise.astype(floating) input_image = np.ndarray(img_shape, dtype = floating) input_image[...] = true_levels[true_quantization] + noise # assign intensities plus noise input_image[true_quantization == 0] = 0 # preserve original zeros input_image[true_quantization == 1] = min_positive # preserve min positive value input_image[true_quantization == num_levels-1] = max_positive # preserve max positive value out, levels, hist = em.quantize_positive_2d(input_image, num_levels) levels = np.asarray(levels) assert_array_equal(out, true_quantization) assert_array_almost_equal(levels, true_levels) for i in range(num_levels): current_bin = np.asarray(true_quantization == i).sum() assert_equal(hist[i], current_bin) #test num_levels<2 and input image with zeros and non-zeros everywhere assert_raises(ValueError, em.quantize_positive_2d, input_image, 0) assert_raises(ValueError, em.quantize_positive_2d, input_image, 1) out, levels, hist = em.quantize_positive_2d(np.zeros(img_shape, dtype=floating), 2) assert_equal(out, np.zeros(img_shape, dtype=np.int32)) out, levels, hist = em.quantize_positive_2d(np.ones(img_shape, dtype=floating), 2) assert_equal(out, np.ones(img_shape, dtype=np.int32)) def test_quantize_positive_3d(): np.random.seed(1246592) num_levels = 11 # an arbitrary number of quantization levels img_shape = (5, 10, 15) # arbitrary test image shape (must contain at least 3 elements) min_positive = 0.1 max_positive = 1.0 epsilon = 1e-8 delta = (max_positive - min_positive + epsilon) / (num_levels - 1) true_levels = np.zeros((num_levels,), dtype = np.float32) # put the intensities at the centers of the bins true_levels[1:] = np.linspace(min_positive+delta*0.5, max_positive-delta*0.5, num_levels-1) true_quantization = np.empty(img_shape, dtype = np.int32) # generate a target quantization image random_labels = np.random.randint(0, num_levels, np.size(true_quantization)) # make sure there is at least one element equal to 0, 1 and num_levels-1 random_labels[0] = 0 random_labels[1] = 1 random_labels[2] = num_levels-1 true_quantization[...] = random_labels.reshape(img_shape) noise_amplitude = np.min([delta / 4.0, min_positive / 4.0]) # make sure additive noise doesn't change the quantization result noise = np.random.ranf(np.size(true_quantization)).reshape(img_shape) * noise_amplitude noise = noise.astype(floating) input_image = np.ndarray(img_shape, dtype = floating) input_image[...] = true_levels[true_quantization] + noise # assign intensities plus noise input_image[true_quantization == 0] = 0 # preserve original zeros input_image[true_quantization == 1] = min_positive # preserve min positive value input_image[true_quantization == num_levels-1] = max_positive # preserve max positive value out, levels, hist = em.quantize_positive_3d(input_image, num_levels) levels = np.asarray(levels) assert_array_equal(out, true_quantization) assert_array_almost_equal(levels, true_levels) for i in range(num_levels): current_bin = np.asarray(true_quantization == i).sum() assert_equal(hist[i], current_bin) #test num_levels<2 and input image with zeros and non-zeros everywhere assert_raises(ValueError, em.quantize_positive_3d, input_image, 0) assert_raises(ValueError, em.quantize_positive_3d, input_image, 1) out, levels, hist = em.quantize_positive_3d(np.zeros(img_shape, dtype=floating), 2) assert_equal(out, np.zeros(img_shape, dtype=np.int32)) out, levels, hist = em.quantize_positive_3d(np.ones(img_shape, dtype=floating), 2) assert_equal(out, np.ones(img_shape, dtype=np.int32)) def test_compute_masked_class_stats_2d(): np.random.seed(1246592) shape = (32, 32) #Create random labels labels = np.ndarray(shape, dtype=np.int32) labels[...] = np.random.randint(2, 10, np.size(labels)).reshape(shape) labels[0, 0] = 1 # now label 0 is not present and label 1 occurs once #Create random values values = np.random.randn(shape[0], shape[1]).astype(floating) values *= labels values += labels expected_means = [0, values[0, 0]] + [values[labels == i].mean() for i in range(2, 10)] expected_vars = [np.inf, np.inf] + [values[labels == i].var() for i in range(2, 10)] mask = np.ones(shape, dtype = np.int32) means, vars = em.compute_masked_class_stats_2d(mask, values, 10, labels) assert_array_almost_equal(means, expected_means, decimal = 4) assert_array_almost_equal(vars, expected_vars, decimal = 4) def test_compute_masked_class_stats_3d(): np.random.seed(1246592) shape = (32, 32, 32) #Create random labels labels = np.ndarray(shape, dtype=np.int32) labels[...] = np.random.randint(2, 10, np.size(labels)).reshape(shape) labels[0, 0, 0] = 1 # now label 0 is not present and label 1 occurs once #Create random values values = np.random.randn(shape[0], shape[1], shape[2]).astype(floating) values *= labels values += labels expected_means = [0, values[0, 0, 0]] + [values[labels == i].mean() for i in range(2, 10)] expected_vars = [np.inf, np.inf] + [values[labels == i].var() for i in range(2, 10)] mask = np.ones(shape, dtype = np.int32) means, vars = em.compute_masked_class_stats_3d(mask, values, 10, labels) assert_array_almost_equal(means, expected_means, decimal = 4) assert_array_almost_equal(vars, expected_vars, decimal = 4) if __name__=='__main__': test_compute_em_demons_step_2d() test_compute_em_demons_step_3d() test_quantize_positive_2d() test_quantize_positive_3d() test_compute_masked_class_stats_2d() test_compute_masked_class_stats_3d() dipy-0.10.1/dipy/align/tests/test_imaffine.py000066400000000000000000000602331263041327500211350ustar00rootroot00000000000000import numpy as np import scipy as sp import nibabel as nib import numpy.linalg as npl from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_almost_equal, assert_equal, assert_raises) from dipy.core import geometry as geometry from dipy.data import get_data from dipy.viz import regtools as rt from dipy.align import floating from dipy.align import vector_fields as vf from dipy.align import imaffine from dipy.align.imaffine import AffineInversionError from dipy.align.transforms import (Transform, regtransforms) from dipy.align.tests.test_parzenhist import (setup_random_transform, sample_domain_regular) # For each transform type, select a transform factor (indicating how large the # true transform between static and moving images will be), a sampling scheme # (either a positive integer less than or equal to 100, or None) indicating # the percentage (if int) of voxels to be used for estimating the joint PDFs, # or dense sampling (if None), and also specify a starting point (to avoid # starting from the identity) factors = {('TRANSLATION', 2): (2.0, 0.35, np.array([2.3, 4.5])), ('ROTATION', 2): (0.1, None, np.array([0.1])), ('RIGID', 2): (0.1, .50, np.array([0.12, 1.8, 2.7])), ('SCALING', 2): (0.01, None, np.array([1.05])), ('AFFINE', 2): (0.1, .50, np.array([0.99, -0.05, 1.3, 0.05, 0.99, 2.5])), ('TRANSLATION', 3): (2.0, None, np.array([2.3, 4.5, 1.7])), ('ROTATION', 3): (0.1, 1.0, np.array([0.1, 0.15, -0.11])), ('RIGID', 3): (0.1, None, np.array([0.1, 0.15, -0.11, 2.3, 4.5, 1.7])), ('SCALING', 3): (0.1, .35, np.array([0.95])), ('AFFINE', 3): (0.1, None, np.array([0.99, -0.05, 0.03, 1.3, 0.05, 0.99, -0.10, 2.5, -0.07, 0.10, 0.99, -1.4]))} def test_transform_centers_of_mass_3d(): np.random.seed(1246592) shape = (64, 64, 64) rm = 8 sp = vf.create_sphere(shape[0]//2, shape[1]//2, shape[2]//2, rm) moving = np.zeros(shape) # The center of mass will be (16, 16, 16), in image coordinates moving[:shape[0]//2, :shape[1]//2, :shape[2]//2] = sp[...] rs = 16 # The center of mass will be (32, 32, 32), in image coordinates static = vf.create_sphere(shape[0], shape[1], shape[2], rs) # Create arbitrary image-to-space transforms axis = np.array([.5, 2.0, 1.5]) t = 0.15 #translation factor trans = np.array([[1, 0, 0, -t*shape[0]], [0, 1, 0, -t*shape[1]], [0, 0, 1, -t*shape[2]], [0, 0, 0, 1]]) trans_inv = npl.inv(trans) for rotation_angle in [-1 * np.pi/6.0, 0.0, np.pi/5.0]: for scale_factor in [0.83, 1.3, 2.07]: #scale rot = np.zeros(shape=(4,4)) rot[:3, :3] = geometry.rodrigues_axis_rotation(axis, rotation_angle) rot[3,3] = 1.0 scale = np.array([[1 * scale_factor, 0, 0, 0], [0, 1 * scale_factor, 0, 0], [0, 0, 1 * scale_factor, 0], [0, 0, 0, 1]]) static_grid2world = trans_inv.dot(scale.dot(rot.dot(trans))) moving_grid2world = npl.inv(static_grid2world) # Expected translation c_static = static_grid2world.dot((32, 32, 32, 1))[:3] c_moving = moving_grid2world.dot((16, 16, 16, 1))[:3] expected = np.eye(4); expected[:3, 3] = c_moving - c_static # Implementation under test actual = imaffine.transform_centers_of_mass(static, static_grid2world, moving, moving_grid2world) assert_array_almost_equal(actual.affine, expected) def test_transform_geometric_centers_3d(): # Create arbitrary image-to-space transforms axis = np.array([.5, 2.0, 1.5]) t = 0.15 #translation factor for theta in [-1 * np.pi/6.0, 0.0, np.pi/5.0]: #rotation angle for s in [0.83, 1.3, 2.07]: #scale m_shapes = [(256, 256, 128), (255, 255, 127), (64, 127, 142)] for shape_moving in m_shapes: s_shapes = [(256, 256, 128), (255, 255, 127), (64, 127, 142)] for shape_static in s_shapes: moving = np.ndarray(shape=shape_moving) static = np.ndarray(shape=shape_static) trans = np.array([[1, 0, 0, -t*shape_static[0]], [0, 1, 0, -t*shape_static[1]], [0, 0, 1, -t*shape_static[2]], [0, 0, 0, 1]]) trans_inv = npl.inv(trans) rot = np.zeros(shape=(4,4)) rot[:3, :3] = geometry.rodrigues_axis_rotation(axis, theta) rot[3,3] = 1.0 scale = np.array([[1 * s, 0, 0, 0], [0, 1 * s, 0, 0], [0, 0, 1 * s, 0], [0, 0, 0, 1]]) static_grid2world = trans_inv.dot(scale.dot(rot.dot(trans))) moving_grid2world = npl.inv(static_grid2world) # Expected translation c_static = np.array(shape_static, dtype = np.float64) * 0.5 c_static = tuple(c_static) c_static = static_grid2world.dot(c_static+(1,))[:3] c_moving = np.array(shape_moving, dtype = np.float64) * 0.5 c_moving = tuple(c_moving) c_moving = moving_grid2world.dot(c_moving+(1,))[:3] expected = np.eye(4); expected[:3, 3] = c_moving - c_static # Implementation under test actual = imaffine.transform_geometric_centers(static, static_grid2world, moving, moving_grid2world) assert_array_almost_equal(actual.affine, expected) def test_transform_origins_3d(): # Create arbitrary image-to-space transforms axis = np.array([.5, 2.0, 1.5]) t = 0.15 #translation factor for theta in [-1 * np.pi/6.0, 0.0, np.pi/5.0]: #rotation angle for s in [0.83, 1.3, 2.07]: #scale m_shapes = [(256, 256, 128), (255, 255, 127), (64, 127, 142)] for shape_moving in m_shapes: s_shapes = [(256, 256, 128), (255, 255, 127), (64, 127, 142)] for shape_static in s_shapes: moving = np.ndarray(shape=shape_moving) static = np.ndarray(shape=shape_static) trans = np.array([[1, 0, 0, -t*shape_static[0]], [0, 1, 0, -t*shape_static[1]], [0, 0, 1, -t*shape_static[2]], [0, 0, 0, 1]]) trans_inv = npl.inv(trans) rot = np.zeros(shape=(4,4)) rot[:3, :3] = geometry.rodrigues_axis_rotation(axis, theta) rot[3,3] = 1.0 scale = np.array([[1*s, 0, 0, 0], [0, 1*s, 0, 0], [0, 0, 1*s, 0], [0, 0, 0, 1]]) static_grid2world = trans_inv.dot(scale.dot(rot.dot(trans))) moving_grid2world = npl.inv(static_grid2world) # Expected translation c_static = static_grid2world[:3, 3] c_moving = moving_grid2world[:3, 3] expected = np.eye(4); expected[:3, 3] = c_moving - c_static # Implementation under test actual = imaffine.transform_origins(static, static_grid2world, moving, moving_grid2world) assert_array_almost_equal(actual.affine, expected) def test_affreg_all_transforms(): # Test affine registration using all transforms with typical settings # Make sure dictionary entries are processed in the same order regardless of # the platform. Otherwise any random numbers drawn within the loop would make # the test non-deterministic even if we fix the seed before the loop. # Right now, this test does not draw any samples, but we still sort the entries # to prevent future related failures. for ttype in sorted(factors): dim = ttype[1] if dim == 2: nslices = 1 else: nslices = 45 factor = factors[ttype][0] sampling_pc = factors[ttype][1] transform = regtransforms[ttype] static, moving, static_grid2world, moving_grid2world, smask, mmask, T = \ setup_random_transform(transform, factor, nslices, 1.0) # Sum of absolute differences start_sad = np.abs(static - moving).sum() metric = imaffine.MutualInformationMetric(32, sampling_pc) affreg = imaffine.AffineRegistration(metric, [1000, 100, 50], [3, 1, 0], [4, 2, 1], 'L-BFGS-B', None, options=None) x0 = transform.get_identity_parameters() affine_map = affreg.optimize(static, moving, transform, x0, static_grid2world, moving_grid2world) transformed = affine_map.transform(moving) # Sum of absolute differences end_sad = np.abs(static - transformed).sum() reduction = 1 - end_sad / start_sad print("%s>>%f"%(ttype, reduction)) assert(reduction > 0.9) # Verify that exception is raised if level_iters is empty metric = imaffine.MutualInformationMetric(32) assert_raises(ValueError, imaffine.AffineRegistration, metric, []) def test_affreg_defaults(): # Test all default arguments with an arbitrary transform # Select an arbitrary transform (all of them are already tested # in test_affreg_all_transforms) transform_name = 'TRANSLATION' dim = 2 ttype = (transform_name, dim) aff_options = ['mass', 'voxel-origin', 'centers', None, np.eye(dim+1)] for starting_affine in aff_options: if dim == 2: nslices = 1 else: nslices = 45 factor = factors[ttype][0] sampling_pc = factors[ttype][1] transform = regtransforms[ttype] id_param = transform.get_identity_parameters() static, moving, static_grid2world, moving_grid2world, smask, mmask, T = \ setup_random_transform(transform, factor, nslices, 1.0) # Sum of absolute differences start_sad = np.abs(static - moving).sum() metric = None x0 = None sigmas = None scale_factors = None level_iters = None static_grid2world = None moving_grid2world = None for ss_sigma_factor in [1.0, None]: affreg = imaffine.AffineRegistration(metric, level_iters, sigmas, scale_factors, 'L-BFGS-B', ss_sigma_factor, options=None) affine_map = affreg.optimize(static, moving, transform, x0, static_grid2world, moving_grid2world, starting_affine) transformed = affine_map.transform(moving) # Sum of absolute differences end_sad = np.abs(static - transformed).sum() reduction = 1 - end_sad / start_sad print("%s>>%f"%(ttype, reduction)) assert(reduction > 0.9) transformed_inv = affine_map.transform_inverse(static) # Sum of absolute differences end_sad = np.abs(moving - transformed_inv).sum() reduction = 1 - end_sad / start_sad print("%s>>%f"%(ttype, reduction)) assert(reduction > 0.9) def test_mi_gradient(): np.random.seed(2022966) # Test the gradient of mutual information h = 1e-5 # Make sure dictionary entries are processed in the same order regardless of # the platform. Otherwise any random numbers drawn within the loop would make # the test non-deterministic even if we fix the seed before the loop: # in this case the samples are drawn with `np.random.randn` below for ttype in sorted(factors): transform = regtransforms[ttype] dim = ttype[1] if dim == 2: nslices = 1 else: nslices = 45 factor = factors[ttype][0] sampling_proportion = factors[ttype][1] theta = factors[ttype][2] # Start from a small rotation start = regtransforms[('ROTATION', dim)] nrot = start.get_number_of_parameters() starting_affine = start.param_to_matrix(0.25 * np.random.randn(nrot)) # Get data (pair of images related to each other by an known transform) static, moving, static_g2w, moving_g2w, smask, mmask, M = \ setup_random_transform(transform, factor, nslices, 2.0) # Prepare a MutualInformationMetric instance mi_metric = imaffine.MutualInformationMetric(32, sampling_proportion) mi_metric.setup(transform, static, moving, starting_affine=starting_affine) # Compute the gradient with the implementation under test actual = mi_metric.gradient(theta) # Compute the gradient using finite-diferences n = transform.get_number_of_parameters() expected = np.empty(n, dtype=np.float64) val0 = mi_metric.distance(theta) for i in range(n): dtheta = theta.copy() dtheta[i] += h val1 = mi_metric.distance(dtheta) expected[i] = (val1 - val0) / h dp = expected.dot(actual) enorm = npl.norm(expected) anorm = npl.norm(actual) nprod = dp / (enorm * anorm) assert(nprod >= 0.99) def create_affine_transforms(dim, translations, rotations, scales, rot_axis=None): r""" Creates a list of affine transforms with all combinations of params This function is intended to be used for testing only. It generates affine transforms for all combinations of the input parameters in the following order: let T be a translation, R a rotation and S a scale. The generated affine will be: A = T.dot(S).dot(R).dot(T^{-1}) Translation is handled this way because it is convenient to provide the translation parameters in terms of the center of rotation we wish to generate. Parameters ---------- dim: int (either dim=2 or dim=3) dimension of the affine transforms translations: sequence of dim-tuples each dim-tuple represents a translation parameter rotations: sequence of floats each number represents a rotation angle in radians scales: sequence of floats each number represents a scale rot_axis: rotation axis (used for dim=3 only) Returns ------- transforms: sequence of (dim + 1)x(dim + 1) matrices each matrix correspond to an affine transform with a combination of the input parameters """ transforms = [] for t in translations: trans_inv = np.eye(dim + 1) trans_inv[:dim, dim] = -t[:dim] trans = npl.inv(trans_inv) for theta in rotations: # rotation angle if dim == 2: ct = np.cos(theta) st = np.sin(theta) rot = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]]) else: rot = np.eye(dim + 1) rot[:3, :3] = geometry.rodrigues_axis_rotation(rot_axis, theta) for s in scales: # scale scale = np.eye(dim + 1) * s scale[dim,dim] = 1 affine = trans.dot(scale.dot(rot.dot(trans_inv))) transforms.append(affine) return transforms def test_affine_map(): np.random.seed(2112927) dom_shape = np.array([64, 64, 64], dtype=np.int32) cod_shape = np.array([80, 80, 80], dtype=np.int32) nx = dom_shape[0] ny = dom_shape[1] nz = dom_shape[2] # Radius of the circle/sphere (testing image) radius = 16 # Rotation axis (used for 3D transforms only) rot_axis = np.array([.5, 2.0, 1.5]) # Arbitrary transform parameters t = 0.15 rotations = [-1 * np.pi / 10.0, 0.0, np.pi / 10.0] scales = [0.9, 1.0, 1.1] for dim in [2, 3]: # Setup current dimension if dim == 2: # Create image of a circle img = vf.create_circle(cod_shape[0], cod_shape[1], radius) oracle_linear = vf.transform_2d_affine oracle_nn = vf.transform_2d_affine_nn else: # Create image of a sphere img = vf.create_sphere(cod_shape[0], cod_shape[1], cod_shape[2], radius) oracle_linear = vf.transform_3d_affine oracle_nn = vf.transform_3d_affine_nn img = np.array(img) # Translation is the only parameter differing for 2D and 3D translations = [t * dom_shape[:dim]] # Generate affine transforms gt_affines = create_affine_transforms(dim, translations, rotations, scales, rot_axis) # Include the None case gt_affines.append(None) for affine in gt_affines: # make both domain point to the same physical region # It's ok to use the same transform, we just want to test # that this information is actually being considered domain_grid2world = affine codomain_grid2world = affine grid2grid_transform = affine # Evaluate the transform with vector_fields module (already tested) expected_linear = oracle_linear(img, dom_shape[:dim], grid2grid_transform) expected_nn = oracle_nn(img, dom_shape[:dim], grid2grid_transform) # Evaluate the transform with the implementation under test affine_map = imaffine.AffineMap(affine, dom_shape[:dim], domain_grid2world, cod_shape[:dim], codomain_grid2world) actual_linear = affine_map.transform(img, interp='linear') actual_nn = affine_map.transform(img, interp='nearest') assert_array_almost_equal(actual_linear, expected_linear) assert_array_almost_equal(actual_nn, expected_nn) # Test set_affine with valid matrix affine_map.set_affine(affine) if affine is None: assert(affine_map.affine is None) assert(affine_map.affine_inv is None) else: assert_array_equal(affine, affine_map.affine) actual = affine_map.affine.dot(affine_map.affine_inv) assert_array_almost_equal(actual, np.eye(dim+1)) # Evaluate via the inverse transform # AffineMap will use the inverse of the input matrix when we call # `transform_inverse`. Since the inverse of the inverse of a matrix # is not exactly equal to the original matrix (numerical limitations) # we need to invert the matrix twice to make sure the oracle and the # implementation under test apply the same transform aff_inv = None if affine is None else npl.inv(affine) aff_inv_inv = None if aff_inv is None else npl.inv(aff_inv) expected_linear = oracle_linear(img, dom_shape[:dim], aff_inv_inv) expected_nn = oracle_nn(img, dom_shape[:dim], aff_inv_inv) affine_map = imaffine.AffineMap(aff_inv, cod_shape[:dim], codomain_grid2world, dom_shape[:dim], domain_grid2world) actual_linear = affine_map.transform_inverse(img, interp='linear') actual_nn = affine_map.transform_inverse(img, interp='nearest') assert_array_almost_equal(actual_linear, expected_linear) assert_array_almost_equal(actual_nn, expected_nn) # Verify AffineMap cannot be created with a non-invertible matrix invalid_nan = np.zeros((dim + 1, dim + 1), dtype=np.float64) invalid_nan[1, 1] = np.nan invalid_zeros = np.zeros((dim + 1, dim + 1), dtype=np.float64) assert_raises(imaffine.AffineInversionError, imaffine.AffineMap, invalid_nan) assert_raises(imaffine.AffineInversionError, imaffine.AffineMap, invalid_zeros) # Test exception is raised when the affine transform matrix is not valid invalid_shape = np.eye(dim) affmap_invalid_shape = imaffine.AffineMap(invalid_shape, dom_shape[:dim], None, cod_shape[:dim], None) assert_raises(ValueError, affmap_invalid_shape.transform, img) assert_raises(ValueError, affmap_invalid_shape.transform_inverse, img) # Verify exception is raised when sampling info is not provided valid = np.eye(3) affmap_invalid_shape = imaffine.AffineMap(valid) assert_raises(ValueError, affmap_invalid_shape.transform, img) assert_raises(ValueError, affmap_invalid_shape.transform_inverse, img) # Verify exception is raised when requesting an invalid interpolation assert_raises(ValueError, affine_map.transform, img, 'invalid') assert_raises(ValueError, affine_map.transform_inverse, img, 'invalid') # Verify exception is raised when attempting to warp an image of # invalid dimension for dim in [2, 3]: affine_map = imaffine.AffineMap(np.eye(dim), cod_shape[:dim], None, dom_shape[:dim], None) for sh in [(2,), (2,2,2,2)]: img = np.zeros(sh) assert_raises(ValueError, affine_map.transform, img) assert_raises(ValueError, affine_map.transform_inverse, img) aff_sing = np.zeros((dim + 1, dim + 1)) aff_nan = np.zeros((dim + 1, dim + 1)) aff_nan[...] = np.nan aff_inf = np.zeros((dim + 1, dim + 1)) aff_inf[...] = np.inf assert_raises(AffineInversionError, affine_map.set_affine, aff_sing) assert_raises(AffineInversionError, affine_map.set_affine, aff_nan) assert_raises(AffineInversionError, affine_map.set_affine, aff_inf) def test_MIMetric_invalid_params(): transform = regtransforms[('AFFINE', 3)] static = np.random.rand(20,20,20) moving = np.random.rand(20,20,20) n = transform.get_number_of_parameters() sampling_proportion = 0.3 theta_sing = np.zeros(n) theta_nan = np.zeros(n) theta_nan[...] = np.nan theta_inf = np.zeros(n) theta_nan[...] = np.inf mi_metric = imaffine.MutualInformationMetric(32, sampling_proportion) mi_metric.setup(transform, static, moving) for theta in [theta_sing, theta_nan, theta_inf]: # Test metric value at invalid params actual_val = mi_metric.distance(theta) assert(np.isinf(actual_val)) # Test gradient at invalid params expected_grad = np.zeros(n) actual_grad = mi_metric.gradient(theta) assert_equal(actual_grad, expected_grad) # Test both actual_val, actual_grad = mi_metric.distance_and_gradient(theta) assert(np.isinf(actual_val)) assert_equal(actual_grad, expected_grad) dipy-0.10.1/dipy/align/tests/test_imwarp.py000066400000000000000000001137611263041327500206630ustar00rootroot00000000000000from __future__ import print_function import numpy as np import numpy.testing as npt import nibabel.eulerangles as eulerangles from numpy.testing import (assert_equal, assert_array_equal, assert_array_almost_equal, assert_raises) from ...__config__ import USING_VC_SSE2, USING_GCC_SSE2 from ...data import get_data from .. import floating from .. import imwarp as imwarp from .. import metrics as metrics from .. import vector_fields as vfu from .. import VerbosityLevels from ..imwarp import DiffeomorphicMap NO_SSE2 = not (USING_VC_SSE2 or USING_GCC_SSE2) def test_mult_aff(): r"""mult_aff from imwarp returns the matrix product A.dot(B) considering None as the identity """ A = np.array([[1.0, 2.0], [3.0, 4.0]]) B = np.array([[2.0, 0.0], [0.0, 2.0]]) C = imwarp.mult_aff(A, B) expected_mult = np.array([[2.0, 4.0], [6.0, 8.0]]) assert_array_almost_equal(C, expected_mult) C = imwarp.mult_aff(A, None) assert_array_almost_equal(C, A) C = imwarp.mult_aff(None, B) assert_array_almost_equal(C, B) C = imwarp.mult_aff(None, None) assert_equal(C, None) def test_diffeomorphic_map_2d(): r""" Creates a random displacement field that exactly maps pixels from an input image to an output image. First a discrete random assignment between the images is generated, then each pair of mapped points are transformed to the physical space by assigning a pair of arbitrary, fixed affine matrices to input and output images, and finaly the difference between their positions is taken as the displacement vector. The resulting displacement, although operating in physical space, maps the points exactly (up to numerical precision). """ np.random.seed(2022966) domain_shape = (10, 10) codomain_shape = (10, 10) #create a simple affine transformation nr = domain_shape[0] nc = domain_shape[1] s = 1.1 t = 0.25 trans = np.array([[1, 0, -t*nr], [0, 1, -t*nc], [0, 0, 1]]) trans_inv = np.linalg.inv(trans) scale = np.array([[1*s, 0, 0], [0, 1*s, 0], [0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(trans)) #create the random displacement field domain_grid2world = gt_affine codomain_grid2world = gt_affine disp, assign = vfu.create_random_displacement_2d( np.array(domain_shape, dtype=np.int32), domain_grid2world,np.array(codomain_shape, dtype=np.int32), codomain_grid2world) disp = np.array(disp, dtype=floating) assign = np.array(assign) #create a random image (with decimal digits) to warp moving_image = np.ndarray(codomain_shape, dtype=floating) ns = np.size(moving_image) moving_image[...] = np.random.randint(0, 10, ns).reshape(codomain_shape) #set boundary values to zero so we don't test wrong interpolation due #to floating point precision moving_image[0,:] = 0 moving_image[-1,:] = 0 moving_image[:,0] = 0 moving_image[:,-1] = 0 #warp the moving image using the (exact) assignments expected = moving_image[(assign[...,0], assign[...,1])] #warp using a DiffeomorphicMap instance diff_map = imwarp.DiffeomorphicMap(2, domain_shape, domain_grid2world, domain_shape, domain_grid2world, codomain_shape, codomain_grid2world, None) diff_map.forward = disp #Verify that the transform method accepts different image types (note that #the actual image contained integer values, we don't want to test rounding) for type in [floating, np.float64, np.int64, np.int32]: moving_image = moving_image.astype(type) #warp using linear interpolation warped = diff_map.transform(moving_image, 'linear') #compare the images (the linear interpolation may introduce slight #precision errors) assert_array_almost_equal(warped, expected, decimal=5) #Now test the nearest neighbor interpolation warped = diff_map.transform(moving_image, 'nearest') #compare the images (now we dont have to worry about precision, #it is n.n.) assert_array_almost_equal(warped, expected) #verify the is_inverse flag inv = diff_map.inverse() warped = inv.transform_inverse(moving_image, 'linear') assert_array_almost_equal(warped, expected, decimal=5) warped = inv.transform_inverse(moving_image, 'nearest') assert_array_almost_equal(warped, expected) #Now test the inverse functionality diff_map = imwarp.DiffeomorphicMap(2, codomain_shape, codomain_grid2world, codomain_shape, codomain_grid2world, domain_shape, domain_grid2world, None) diff_map.backward = disp for type in [floating, np.float64, np.int64, np.int32]: moving_image = moving_image.astype(type) #warp using linear interpolation warped = diff_map.transform_inverse(moving_image, 'linear') #compare the images (the linear interpolation may introduce slight #precision errors) assert_array_almost_equal(warped, expected, decimal=5) #Now test the nearest neighbor interpolation warped = diff_map.transform_inverse(moving_image, 'nearest') #compare the images (now we don't have to worry about precision, #it is nearest neighbour) assert_array_almost_equal(warped, expected) #Verify that DiffeomorphicMap raises the appropriate exceptions when #the sampling information is undefined diff_map = imwarp.DiffeomorphicMap(2, domain_shape, domain_grid2world, domain_shape, domain_grid2world, codomain_shape, codomain_grid2world, None) diff_map.forward = disp diff_map.domain_shape = None #If we don't provide the sampling info, it should try to use the map's #info, but it's None... assert_raises(ValueError, diff_map.transform, moving_image, 'linear') #Same test for diff_map.transform_inverse diff_map = imwarp.DiffeomorphicMap(2, domain_shape, domain_grid2world, domain_shape, domain_grid2world, codomain_shape, codomain_grid2world, None) diff_map.forward = disp diff_map.codomain_shape = None #If we don't provide the sampling info, it should try to use the map's #info, but it's None... assert_raises(ValueError, diff_map.transform_inverse, moving_image, 'linear') #We must provide, at least, the reference grid shape assert_raises(ValueError, imwarp.DiffeomorphicMap, 2, None) # Verify that matrices are correctly interpreted from string non_array_obj = diff_map array_obj = np.ones((3,3)) assert_raises(ValueError, diff_map.interpret_matrix, 'a different string') assert_raises(ValueError, diff_map.interpret_matrix, non_array_obj) assert(diff_map.interpret_matrix('identity') is None) assert(diff_map.interpret_matrix(None) is None) assert_array_equal(diff_map.interpret_matrix(array_obj), array_obj) def test_diffeomorphic_map_simplification_2d(): r""" Create an invertible deformation field, and define a DiffeomorphicMap using different voxel-to-space transforms for domain, codomain, and reference discretizations, also use a non-identity pre-aligning matrix. Warp a circle using the diffeomorphic map to obtain the expected warped circle. Now simplify the DiffeomorphicMap and warp the same circle using this simplified map. Verify that the two warped circles are equal up to numerical precision. """ #create a simple affine transformation dom_shape = (64, 64) cod_shape = (80, 80) nr = dom_shape[0] nc = dom_shape[1] s = 1.1 t = 0.25 trans = np.array([[1, 0, -t*nr], [0, 1, -t*nc], [0, 0, 1]]) trans_inv = np.linalg.inv(trans) scale = np.array([[1*s, 0, 0], [0, 1*s, 0], [0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(trans)) # Create the invertible displacement fields and the circle radius = 16 circle = vfu.create_circle(cod_shape[0], cod_shape[1], radius) d, dinv = vfu.create_harmonic_fields_2d(dom_shape[0], dom_shape[1], 0.3, 6) #Define different voxel-to-space transforms for domain, codomain and #reference grid, also, use a non-identity pre-align transform D = gt_affine C = imwarp.mult_aff(gt_affine, gt_affine) R = np.eye(3) P = gt_affine #Create the original diffeomorphic map diff_map = imwarp.DiffeomorphicMap(2, dom_shape, R, dom_shape, D, cod_shape, C, P) diff_map.forward = np.array(d, dtype = floating) diff_map.backward = np.array(dinv, dtype = floating) #Warp the circle to obtain the expected image expected = diff_map.transform(circle, 'linear') #Simplify simplified = diff_map.get_simplified_transform() #warp the circle warped = simplified.transform(circle, 'linear') #verify that the simplified map is equivalent to the #original one assert_array_almost_equal(warped, expected) #And of course, it must be simpler... assert_equal(simplified.domain_grid2world, None) assert_equal(simplified.codomain_grid2world, None) assert_equal(simplified.disp_grid2world, None) assert_equal(simplified.domain_world2grid, None) assert_equal(simplified.codomain_world2grid, None) assert_equal(simplified.disp_world2grid, None) def test_diffeomorphic_map_simplification_3d(): r""" Create an invertible deformation field, and define a DiffeomorphicMap using different voxel-to-space transforms for domain, codomain, and reference discretizations, also use a non-identity pre-aligning matrix. Warp a sphere using the diffeomorphic map to obtain the expected warped sphere. Now simplify the DiffeomorphicMap and warp the same sphere using this simplified map. Verify that the two warped spheres are equal up to numerical precision. """ #create a simple affine transformation domain_shape = (64, 64, 64) codomain_shape = (80, 80, 80) nr = domain_shape[0] nc = domain_shape[1] ns = domain_shape[2] s = 1.1 t = 0.25 trans = np.array([[1, 0, 0, -t*ns], [0, 1, 0, -t*nr], [0, 0, 1, -t*nc], [0, 0, 0, 1]]) trans_inv = np.linalg.inv(trans) scale = np.array([[1*s, 0, 0, 0], [0, 1*s, 0, 0], [0, 0, 1*s, 0], [0, 0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(trans)) # Create the invertible displacement fields and the sphere radius = 16 sphere = vfu.create_sphere(codomain_shape[0], codomain_shape[1], codomain_shape[2], radius) d, dinv = vfu.create_harmonic_fields_3d(domain_shape[0], domain_shape[1], domain_shape[2], 0.3, 6) #Define different voxel-to-space transforms for domain, codomain and #reference grid, also, use a non-identity pre-align transform D = gt_affine C = imwarp.mult_aff(gt_affine, gt_affine) R = np.eye(4) P = gt_affine #Create the original diffeomorphic map diff_map = imwarp.DiffeomorphicMap(3, domain_shape, R, domain_shape, D, codomain_shape, C, P) diff_map.forward = np.array(d, dtype = floating) diff_map.backward = np.array(dinv, dtype = floating) #Warp the sphere to obtain the expected image expected = diff_map.transform(sphere, 'linear') #Simplify simplified = diff_map.get_simplified_transform() #warp the sphere warped = simplified.transform(sphere, 'linear') #verify that the simplified map is equivalent to the #original one assert_array_almost_equal(warped, expected) #And of course, it must be simpler... assert_equal(simplified.domain_grid2world, None) assert_equal(simplified.codomain_grid2world, None) assert_equal(simplified.disp_grid2world, None) assert_equal(simplified.domain_world2grid, None) assert_equal(simplified.codomain_world2grid, None) assert_equal(simplified.disp_world2grid, None) def test_optimizer_exceptions(): #An arbitrary valid metric metric = metrics.SSDMetric(2) # The metric must not be None assert_raises(ValueError, imwarp.SymmetricDiffeomorphicRegistration, None) # The iterations list must not be empty assert_raises(ValueError, imwarp.SymmetricDiffeomorphicRegistration, metric, []) optimizer = imwarp.SymmetricDiffeomorphicRegistration(metric, None) #Verify the default iterations list assert_array_equal(optimizer.level_iters, [100,100,25]) #Verify exception thrown when attepting to fit the energy profile without #enough data assert_raises(ValueError, optimizer._get_energy_derivative) def test_get_direction_and_spacings(): xrot = 0.5 yrot = 0.75 zrot = 1.0 direction_gt = eulerangles.euler2mat(zrot, yrot, xrot) spacings_gt = np.array([1.1, 1.2, 1.3]) scaling_gt = np.diag(spacings_gt) translation_gt = np.array([1,2,3]) affine = np.eye(4) affine[:3, :3] = direction_gt.dot(scaling_gt) affine[:3, 3] = translation_gt direction, spacings = imwarp.get_direction_and_spacings(affine, 3) assert_array_almost_equal(direction, direction_gt) assert_array_almost_equal(spacings, spacings_gt) def simple_callback(sdr, status): if status == imwarp.RegistrationStages.INIT_START: sdr.INIT_START_CALLED = 1 if status == imwarp.RegistrationStages.INIT_END: sdr.INIT_END_CALLED = 1 if status == imwarp.RegistrationStages.OPT_START: sdr.OPT_START_CALLED = 1 if status == imwarp.RegistrationStages.OPT_END: sdr.OPT_END_CALLED = 1 if status == imwarp.RegistrationStages.SCALE_START: sdr.SCALE_START_CALLED = 1 if status == imwarp.RegistrationStages.SCALE_END: sdr.SCALE_END_CALLED = 1 if status == imwarp.RegistrationStages.ITER_START: sdr.ITER_START_CALLED = 1 if status == imwarp.RegistrationStages.ITER_END: sdr.ITER_END_CALLED = 1 def subsample_profile(profile, nsamples): plen = len(profile) stride = np.max([1, (plen - 1) // (nsamples - 1)]) subsampled = np.array( profile[:(1 + (nsamples - 1) * stride):stride]) return subsampled @npt.dec.skipif(NO_SSE2) def test_ssd_2d_demons(): r''' Classical Circle-To-C experiment for 2D Monomodal registration. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of SSD in 2D using the Demons step, and this test checks that the current energy profile matches the saved one. ''' fname_moving = get_data('reg_o') fname_static = get_data('reg_c') moving = np.load(fname_moving) static = np.load(fname_static) moving = np.array(moving, dtype=floating) static = np.array(static, dtype=floating) moving = (moving-moving.min())/(moving.max() - moving.min()) static = (static-static.min())/(static.max() - static.min()) #Create the SSD metric smooth = 4 step_type = 'demons' similarity_metric = metrics.SSDMetric(2, smooth=smooth, step_type=step_type) #Configure and run the Optimizer level_iters = [200, 100, 50, 25] step_length = 0.25 opt_tol = 1e-4 inv_iter = 40 inv_tol = 1e-3 ss_sigma_factor = 0.2 optimizer = imwarp.SymmetricDiffeomorphicRegistration(similarity_metric, level_iters, step_length, ss_sigma_factor, opt_tol, inv_iter, inv_tol) #test callback being called optimizer.INIT_START_CALLED = 0 optimizer.INIT_END_CALLED = 0 optimizer.OPT_START_CALLED = 0 optimizer.OPT_END_CALLED = 0 optimizer.SCALE_START_CALLED = 0 optimizer.SCALE_END_CALLED = 0 optimizer.ITER_START_CALLED = 0 optimizer.ITER_END_CALLED = 0 optimizer.callback_counter_test = 0 optimizer.callback = simple_callback optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) subsampled_energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(subsampled_energy_profile) if USING_VC_SSE2: expected_profile = \ np.array([312.6813333, 80.74625551, 49.43591374, 34.08871301, 25.18286981, 17.78955273, 25.91334939, 20.16932281, 43.86083145, 79.0966558 ]) elif USING_GCC_SSE2: expected_profile = \ np.array([312.6813333, 98.17321941, 60.98300837, 47.75387157, 34.11067498, 122.91901409, 19.75599298, 14.28763847, 36.33599718, 88.62426913]) assert_array_almost_equal(subsampled_energy_profile, expected_profile, decimal=5) assert_equal(optimizer.OPT_START_CALLED, 1) assert_equal(optimizer.OPT_END_CALLED, 1) assert_equal(optimizer.SCALE_START_CALLED, 1) assert_equal(optimizer.SCALE_END_CALLED, 1) assert_equal(optimizer.ITER_START_CALLED, 1) assert_equal(optimizer.ITER_END_CALLED, 1) @npt.dec.skipif(NO_SSE2) def test_ssd_2d_gauss_newton(): r''' Classical Circle-To-C experiment for 2D Monomodal registration. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of SSD in 2D using the Gauss Newton step, and this test checks that the current energy profile matches the saved one. ''' fname_moving = get_data('reg_o') fname_static = get_data('reg_c') moving = np.load(fname_moving) static = np.load(fname_static) moving = np.array(moving, dtype=floating) static = np.array(static, dtype=floating) moving = (moving-moving.min())/(moving.max() - moving.min()) static = (static-static.min())/(static.max() - static.min()) #Create the SSD metric smooth = 4 inner_iter = 5 step_type = 'gauss_newton' similarity_metric = metrics.SSDMetric(2, smooth, inner_iter, step_type) #Configure and run the Optimizer level_iters = [200, 100, 50, 25] step_length = 0.5 opt_tol = 1e-4 inv_iter = 40 inv_tol = 1e-3 ss_sigma_factor = 0.2 optimizer = imwarp.SymmetricDiffeomorphicRegistration(similarity_metric, level_iters, step_length, ss_sigma_factor, opt_tol, inv_iter, inv_tol) #test callback not being called optimizer.INIT_START_CALLED = 0 optimizer.INIT_END_CALLED = 0 optimizer.OPT_START_CALLED = 0 optimizer.OPT_END_CALLED = 0 optimizer.SCALE_START_CALLED = 0 optimizer.SCALE_END_CALLED = 0 optimizer.ITER_START_CALLED = 0 optimizer.ITER_END_CALLED = 0 optimizer.verbosity = VerbosityLevels.DEBUG id = np.eye(3) mapping = optimizer.optimize(static, moving, id, id, id) m = optimizer.get_map() assert_equal(mapping, m) subsampled_energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(subsampled_energy_profile) if USING_VC_SSE2: expected_profile = \ np.array([312.68133316, 70.17782995, 21.38508088, 96.41054776, 49.990781, 43.11867579, 24.53952718, 51.0786643, 143.24848252, 150.48349573]) elif USING_GCC_SSE2: expected_profile = \ np.array([312.68133316, 70.17782938, 21.26798507, 96.51765054, 51.1495088, 37.86204803, 21.62425293, 49.44868302, 121.6643917, 137.91427228]) assert_array_almost_equal(subsampled_energy_profile, expected_profile, decimal = 5) assert_equal(optimizer.OPT_START_CALLED, 0) assert_equal(optimizer.OPT_END_CALLED, 0) assert_equal(optimizer.SCALE_START_CALLED, 0) assert_equal(optimizer.SCALE_END_CALLED, 0) assert_equal(optimizer.ITER_START_CALLED, 0) assert_equal(optimizer.ITER_END_CALLED, 0) def get_synthetic_warped_circle(nslices): #get a subsampled circle fname_cicle = get_data('reg_o') circle = np.load(fname_cicle)[::4,::4].astype(floating) #create a synthetic invertible map and warp the circle d, dinv = vfu.create_harmonic_fields_2d(64, 64, 0.1, 4) d = np.asarray(d, dtype=floating) dinv = np.asarray(dinv, dtype=floating) mapping = DiffeomorphicMap(2, (64, 64)) mapping.forward, mapping.backward = d, dinv wcircle = mapping.transform(circle) if(nslices == 1): return circle, wcircle #normalize and form the 3d by piling slices circle = (circle-circle.min())/(circle.max() - circle.min()) circle_3d = np.ndarray(circle.shape + (nslices,), dtype=floating) circle_3d[...] = circle[...,None] circle_3d[...,0] = 0 circle_3d[...,-1] = 0 #do the same with the warped circle wcircle = (wcircle-wcircle.min())/(wcircle.max() - wcircle.min()) wcircle_3d = np.ndarray(wcircle.shape + (nslices,), dtype=floating) wcircle_3d[...] = wcircle[...,None] wcircle_3d[...,0] = 0 wcircle_3d[...,-1] = 0 return circle_3d, wcircle_3d @npt.dec.skipif(NO_SSE2) def test_ssd_3d_demons(): r''' Register a stack of circles ('cylinder') before and after warping them with a synthetic diffeomorphism. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of SSD in 3D using the Demons step, and this test checks that the current energy profile matches the saved one. The validation of the "working version" was done by registering the 18 manually annotated T1 brain MRI database IBSR with each other and computing the jaccard index for all 31 common anatomical regions. ''' moving, static = get_synthetic_warped_circle(30) moving[...,:8] = 0 moving[...,-1:-9:-1] = 0 static[...,:8] = 0 static[...,-1:-9:-1] = 0 #Create the SSD metric smooth = 4 step_type = 'demons' similarity_metric = metrics.SSDMetric(3, smooth=smooth, step_type=step_type) #Create the optimizer level_iters = [10, 5] step_length = 0.25 opt_tol = 1e-4 inv_iter = 20 inv_tol = 1e-3 ss_sigma_factor = 0.5 optimizer = imwarp.SymmetricDiffeomorphicRegistration(similarity_metric, level_iters, step_length, ss_sigma_factor, opt_tol, inv_iter, inv_tol) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(energy_profile) if USING_VC_SSE2: expected_profile = \ np.array([312.22706987, 154.65556884, 53.88543188, 9.11484007, 36.46592407, 13.20522299, 48.65663399, 14.91579802, 49.82954704, 14.92646254]) elif USING_GCC_SSE2: expected_profile = \ np.array([312.22706987, 154.65556885, 53.88455398, 9.11770682, 36.48642824, 13.21706748, 48.67710635, 14.91782047, 49.84142899, 14.92531294]) assert_array_almost_equal(energy_profile, expected_profile, decimal=4) @npt.dec.skipif(NO_SSE2) def test_ssd_3d_gauss_newton(): r''' Register a stack of circles ('cylinder') before and after warping them with a synthetic diffeomorphism. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of SSD in 3D using the Gauss-Newton step, and this test checks that the current energy profile matches the saved one. The validation of the "working version" was done by registering the 18 manually annotated T1 brain MRI database IBSR with each other and computing the jaccard index for all 31 common anatomical regions. ''' moving, static = get_synthetic_warped_circle(35) moving[...,:10] = 0 moving[...,-1:-11:-1] = 0 static[...,:10] = 0 static[...,-1:-11:-1] = 0 #Create the SSD metric smooth = 4 inner_iter = 5 step_type = 'gauss_newton' similarity_metric = metrics.SSDMetric(3, smooth, inner_iter, step_type) #Create the optimizer level_iters = [10, 5] step_length = 0.25 opt_tol = 1e-4 inv_iter = 20 inv_tol = 1e-3 ss_sigma_factor = 0.5 optimizer = imwarp.SymmetricDiffeomorphicRegistration(similarity_metric, level_iters, step_length, ss_sigma_factor, opt_tol, inv_iter, inv_tol) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(energy_profile) if USING_VC_SSE2: expected_profile = \ np.array([348.3204721, 143.480757, 44.30003405, 8.73624842, 3.13227203, 14.70806563, 6.48360268, 23.52491883, 17.25669088, 48.99709064]) elif USING_GCC_SSE2: expected_profile = \ np.array([348.3204721, 143.48075646, 44.30003413, 8.73624841, 3.13227181, 14.70806845, 6.48360884, 23.52499421, 17.25667176, 48.997691]) assert_array_almost_equal(energy_profile, expected_profile, decimal=4) @npt.dec.skipif(NO_SSE2) def test_cc_2d(): r''' Register a circle to itself after warping it under a synthetic invertible map. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of CC in 2D, and this test checks that the current energy profile matches the saved one. ''' moving, static = get_synthetic_warped_circle(1) #Configure the metric sigma_diff = 3.0 radius = 4 metric = metrics.CCMetric(2, sigma_diff, radius) #Configure and run the Optimizer level_iters = [10, 5] optimizer = imwarp.SymmetricDiffeomorphicRegistration(metric, level_iters) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(energy_profile) if USING_VC_SSE2: expected_profile = \ [-681.02276193, -910.57721051, -1012.76781394, -1021.24181308, -1016.97233745, -977.35458126, -1013.90114894, -989.04516449, -1021.72431465, -988.46698723] elif USING_GCC_SSE2: expected_profile = \ [-681.02276236, -920.57714783, -1008.82241171, -1021.91021701, -994.86961164, -1026.52978164, -1015.83587405, -1020.02780802, -993.8576053, -1026.4369566 ] expected_profile = np.asarray(expected_profile) assert_array_almost_equal(energy_profile, expected_profile, decimal=5) @npt.dec.skipif(NO_SSE2) def test_cc_3d(): r''' Register a stack of circles ('cylinder') before and after warping them with a synthetic diffeomorphism. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of CC in 3D, and this test checks that the current energy profile matches the saved one. The validation of the "working version" was done by registering the 18 manually annotated T1 brain MRI database IBSR with each other and computing the jaccard index for all 31 common anatomical regions. The "working version" of CC in 3D obtains very similar results as those reported for ANTS on the same database with the same number of iterations. Any modification that produces a change in the energy profile should be carefully validated to ensure no accuracy loss. ''' moving, static = moving, static = get_synthetic_warped_circle(20) #Create the CC metric sigma_diff = 2.0 radius = 4 similarity_metric = metrics.CCMetric(3, sigma_diff, radius) #Create the optimizer level_iters = [20, 10] step_length = 0.25 opt_tol = 1e-4 inv_iter = 20 inv_tol = 1e-3 ss_sigma_factor = 0.5 optimizer = imwarp.SymmetricDiffeomorphicRegistration(similarity_metric, level_iters, step_length, ss_sigma_factor, opt_tol, inv_iter, inv_tol) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None, None, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10)*1e-4 print(energy_profile) if USING_VC_SSE2: expected_profile = \ [-0.17336006, -0.20516197, -0.20448353, -0.20630727, -0.20652892, -0.2073403, -3.0046531, -3.43771429, -3.47262116, -3.51383381] elif USING_GCC_SSE2: expected_profile = \ [-0.17136006, -0.20632291, -0.2038927, -0.20688352, -0.20821154, -0.20909298, -0.20872891, -0.20933514, -3.06861497, -3.07851062] expected_profile = np.asarray(expected_profile) assert_array_almost_equal(energy_profile, expected_profile, decimal=4) @npt.dec.skipif(NO_SSE2) def test_em_3d_gauss_newton(): r''' Register a stack of circles ('cylinder') before and after warping them with a synthetic diffeomorphism. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of EM in 3D, and this test checks that the current energy profile matches the saved one. The validation of the "working version" was done by registering the 18 manually annotated T1 brain MRI database IBSR with each other and computing the jaccard index for all 31 common anatomical regions. The "working version" of EM in 3D obtains very similar results as those reported for ANTS on the same database. Any modification that produces a change in the energy profile should be carefully validated to ensure no accuracy loss. ''' moving, static = get_synthetic_warped_circle(30) moving[...,:8] = 0 moving[...,-1:-9:-1] = 0 static[...,:8] = 0 static[...,-1:-9:-1] = 0 #Create the EM metric smooth=25.0 inner_iter=20 step_length=0.25 q_levels=256 double_gradient=True iter_type='gauss_newton' similarity_metric = metrics.EMMetric( 3, smooth, inner_iter, q_levels, double_gradient, iter_type) #Create the optimizer level_iters = [10, 5] opt_tol = 1e-4 inv_iter = 20 inv_tol = 1e-3 ss_sigma_factor = 0.5 optimizer = imwarp.SymmetricDiffeomorphicRegistration(similarity_metric, level_iters, step_length, ss_sigma_factor, opt_tol, inv_iter, inv_tol) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(energy_profile) if USING_VC_SSE2: expected_profile = \ np.array([144.03694724, 63.06874155, 51.84694887, 39.6374044, 31.84981429, 44.3778833, 37.84961761, 38.00509734, 38.67423812, 38.47003306]) elif USING_GCC_SSE2: expected_profile = \ np.array([144.03694724, 63.06874148, 51.84694881, 39.63740417, 31.84981481, 44.37788414, 37.84961844, 38.00509881, 38.67423954, 38.47003339]) assert_array_almost_equal(energy_profile, expected_profile, decimal=4) @npt.dec.skipif(NO_SSE2) def test_em_2d_gauss_newton(): r''' Register a circle to itself after warping it under a synthetic invertible map. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of EM in 2D, and this test checks that the current energy profile matches the saved one. ''' moving, static = get_synthetic_warped_circle(1) #Configure the metric smooth=25.0 inner_iter=20 q_levels=256 double_gradient=False iter_type='gauss_newton' metric = metrics.EMMetric( 2, smooth, inner_iter, q_levels, double_gradient, iter_type) #Configure and run the Optimizer level_iters = [40, 20, 10] optimizer = imwarp.SymmetricDiffeomorphicRegistration(metric, level_iters) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(energy_profile) if USING_VC_SSE2: expected_profile = \ [2.50773392, 0.41762978, 0.30900322, 0.14818498, 0.44620725, 1.53134054, 1.42115728, 1.66358267, 1.184265, 46.13635772] elif USING_GCC_SSE2: expected_profile = \ [2.50773392, 0.41763383, 0.30908578, 0.06241115, 0.11573476, 2.48475885, 1.10053769, 0.9270271, 49.37186785, 44.72643467] assert_array_almost_equal(energy_profile, np.array(expected_profile), decimal=5) @npt.dec.skipif(NO_SSE2) def test_em_3d_demons(): r''' Register a stack of circles ('cylinder') before and after warping them with a synthetic diffeomorphism. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of EM in 3D, and this test checks that the current energy profile matches the saved one. The validation of the "working version" was done by registering the 18 manually annotated T1 brain MRI database IBSR with each other and computing the jaccard index for all 31 common anatomical regions. The "working version" of EM in 3D obtains very similar results as those reported for ANTS on the same database. Any modification that produces a change in the energy profile should be carefully validated to ensure no accuracy loss. ''' moving, static = get_synthetic_warped_circle(30) moving[...,:8] = 0 moving[...,-1:-9:-1] = 0 static[...,:8] = 0 static[...,-1:-9:-1] = 0 #Create the EM metric smooth=25.0 inner_iter=20 step_length=0.25 q_levels=256 double_gradient=True iter_type='demons' similarity_metric = metrics.EMMetric( 3, smooth, inner_iter, q_levels, double_gradient, iter_type) #Create the optimizer level_iters = [10, 5] opt_tol = 1e-4 inv_iter = 20 inv_tol = 1e-3 ss_sigma_factor = 0.5 optimizer = imwarp.SymmetricDiffeomorphicRegistration(similarity_metric, level_iters, step_length, ss_sigma_factor, opt_tol, inv_iter, inv_tol) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(energy_profile) if USING_VC_SSE2: expected_profile = \ np.array([144.03694708, 122.39512307, 111.31925381, 90.9100989, 93.93705232, 104.22993997, 110.57817867, 140.45262039, 133.87804571, 119.20794977]) elif USING_GCC_SSE2: expected_profile = \ np.array([144.03694708, 122.39512227, 111.31924572, 90.91010482, 93.93707059, 104.22996918, 110.57822649, 140.45298465, 133.87831302, 119.20826433]) assert_array_almost_equal(energy_profile, expected_profile, decimal=4) @npt.dec.skipif(NO_SSE2) def test_em_2d_demons(): r''' Register a circle to itself after warping it under a synthetic invertible map. This test is intended to detect regressions only: we saved the energy profile (the sequence of energy values at each iteration) of a working version of EM in 2D, and this test checks that the current energy profile matches the saved one. ''' moving, static = get_synthetic_warped_circle(1) #Configure the metric smooth=25.0 inner_iter=20 q_levels=256 double_gradient=False iter_type='demons' metric = metrics.EMMetric( 2, smooth, inner_iter, q_levels, double_gradient, iter_type) #Configure and run the Optimizer level_iters = [40, 20, 10] optimizer = imwarp.SymmetricDiffeomorphicRegistration(metric, level_iters) optimizer.verbosity = VerbosityLevels.DEBUG mapping = optimizer.optimize(static, moving, None) m = optimizer.get_map() assert_equal(mapping, m) energy_profile = subsample_profile( optimizer.full_energy_profile, 10) print(energy_profile) if USING_VC_SSE2: expected_profile = \ [2.50773393, 3.26942324, 1.81684393, 5.44878881, 40.0195918, 31.87030788, 25.15710409, 29.82206485, 196.33114499, 213.86419995] elif USING_GCC_SSE2: expected_profile = \ [2.50773393, 3.26942352, 1.8168445, 5.44879264, 40.01956373, 31.65616398, 32.43115903, 35.24130742, 192.89072697, 195.456909] assert_array_almost_equal(energy_profile, np.array(expected_profile), decimal=5) if __name__=='__main__': test_scale_space_exceptions() test_optimizer_exceptions() test_mult_aff() test_diffeomorphic_map_2d() test_diffeomorphic_map_simplification_2d() test_diffeomorphic_map_simplification_3d() test_get_direction_and_spacings() test_ssd_2d_demons() test_ssd_2d_gauss_newton() test_ssd_3d_demons() test_ssd_3d_gauss_newton() test_cc_2d() test_cc_3d() test_em_2d_gauss_newton() test_em_3d_gauss_newton() test_em_3d_demons() test_em_2d_demons() dipy-0.10.1/dipy/align/tests/test_metrics.py000066400000000000000000000215601263041327500210250ustar00rootroot00000000000000import numpy as np from scipy import ndimage from .. import floating from ..metrics import SSDMetric, CCMetric, EMMetric from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_raises) def test_exceptions(): for invalid_dim in [-1,0,1,4,5]: assert_raises(ValueError, CCMetric, invalid_dim) assert_raises(ValueError, EMMetric, invalid_dim) assert_raises(ValueError, SSDMetric, invalid_dim) assert_raises(ValueError, SSDMetric, 3, step_type='unknown_metric_name') assert_raises(ValueError, EMMetric, 3, step_type='unknown_metric_name') def test_EMMetric_image_dynamics(): np.random.seed(7181309) metric = EMMetric(2) target_shape = (10, 10) #create a random image image = np.ndarray(target_shape, dtype=floating) image[...] = np.random.randint(0, 10, np.size(image)).reshape(tuple(target_shape)) #compute the expected binary mask expected = (image > 0).astype(np.int32) metric.use_static_image_dynamics(image, None) assert_array_equal(expected, metric.static_image_mask) metric.use_moving_image_dynamics(image, None) assert_array_equal(expected, metric.moving_image_mask) def test_em_demons_step_2d(): r""" Compares the output of the demons step in 2d against an analytical step. The fixed image is given by $F(x) = \frac{1}{2}||x - c_f||^2$, the moving image is given by $G(x) = \frac{1}{2}||x - c_g||^2$, $x, c_f, c_g \in R^{2}$ References ---------- [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ #Select arbitrary images' shape (same shape for both images) sh = (20, 10) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.ndarray(sh + (2,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None] * O X[...,1]= x_1[None, :] * O #Compute the gradient fields of F and G grad_F = X - c_f grad_G = X - c_g #The squared norm of grad_G to be used later sq_norm_grad_F = np.sum(grad_F**2,-1) sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5 * sq_norm_grad_F G = 0.5 * sq_norm_grad_G #Create an instance of EMMetric metric = EMMetric(2) metric.static_spacing = np.array([1.2, 1.2]) #The $\sigma_x$ (eq. 4 in [Vercauteren09]) parameter is computed in ANTS #based on the image's spacing sigma_x_sq = np.sum(metric.static_spacing**2)/metric.dim #Set arbitrary values for $\sigma_i$ (eq. 4 in [Vercauteren09]) #The original Demons algorithm used simply |F(x) - G(x)| as an #estimator, so let's use it as well sigma_i_sq = (F - G)**2 #Set the properties relevant to the demons methods metric.smooth = 3.0 metric.gradient_static = np.array(grad_F, dtype = floating) metric.gradient_moving = np.array(grad_G, dtype = floating) metric.static_image = np.array(F, dtype = floating) metric.moving_image = np.array(G, dtype = floating) metric.staticq_means_field = np.array(F, dtype = floating) metric.staticq_sigma_sq_field = np.array(sigma_i_sq, dtype = floating) metric.movingq_means_field = np.array(G, dtype = floating) metric.movingq_sigma_sq_field = np.array(sigma_i_sq, dtype = floating) #compute the step using the implementation under test actual_forward = metric.compute_demons_step(True) actual_backward = metric.compute_demons_step(False) #Now directly compute the demons steps according to eq 4 in [Vercauteren09] num_fwd = sigma_x_sq * (G - F) den_fwd = sigma_x_sq * sq_norm_grad_F + sigma_i_sq expected_fwd = -1 * np.array(grad_F) #This is $J^{P}$ in eq. 4 [Vercauteren09] expected_fwd[..., 0] *= num_fwd / den_fwd expected_fwd[..., 1] *= num_fwd / den_fwd #apply Gaussian smoothing expected_fwd[..., 0] = ndimage.filters.gaussian_filter(expected_fwd[..., 0], 3.0) expected_fwd[..., 1] = ndimage.filters.gaussian_filter(expected_fwd[..., 1], 3.0) num_bwd = sigma_x_sq * (F - G) den_bwd = sigma_x_sq * sq_norm_grad_G + sigma_i_sq expected_bwd = -1 * np.array(grad_G) #This is $J^{P}$ in eq. 4 [Vercauteren09] expected_bwd[..., 0] *= num_bwd / den_bwd expected_bwd[..., 1] *= num_bwd / den_bwd #apply Gaussian smoothing expected_bwd[..., 0] = ndimage.filters.gaussian_filter(expected_bwd[..., 0], 3.0) expected_bwd[..., 1] = ndimage.filters.gaussian_filter(expected_bwd[..., 1], 3.0) assert_array_almost_equal(actual_forward, expected_fwd) assert_array_almost_equal(actual_backward, expected_bwd) def test_em_demons_step_3d(): r""" Compares the output of the demons step in 3d against an analytical step. The fixed image is given by $F(x) = \frac{1}{2}||x - c_f||^2$, the moving image is given by $G(x) = \frac{1}{2}||x - c_g||^2$, $x, c_f, c_g \in R^{3}$ References ---------- [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ #Select arbitrary images' shape (same shape for both images) sh = (20, 15, 10) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.ndarray(sh + (3,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None, None] * O X[...,1]= x_1[None, :, None] * O X[...,2]= x_2[None, None, :] * O #Compute the gradient fields of F and G grad_F = X - c_f grad_G = X - c_g #The squared norm of grad_G to be used later sq_norm_grad_F = np.sum(grad_F**2,-1) sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5 * sq_norm_grad_F G = 0.5 * sq_norm_grad_G #Create an instance of EMMetric metric = EMMetric(3) metric.static_spacing = np.array([1.2, 1.2, 1.2]) #The $\sigma_x$ (eq. 4 in [Vercauteren09]) parameter is computed in ANTS #based on the image's spacing sigma_x_sq = np.sum(metric.static_spacing**2)/metric.dim #Set arbitrary values for $\sigma_i$ (eq. 4 in [Vercauteren09]) #The original Demons algorithm used simply |F(x) - G(x)| as an #estimator, so let's use it as well sigma_i_sq = (F - G)**2 #Set the properties relevant to the demons methods metric.smooth = 3.0 metric.gradient_static = np.array(grad_F, dtype = floating) metric.gradient_moving = np.array(grad_G, dtype = floating) metric.static_image = np.array(F, dtype = floating) metric.moving_image = np.array(G, dtype = floating) metric.staticq_means_field = np.array(F, dtype = floating) metric.staticq_sigma_sq_field = np.array(sigma_i_sq, dtype = floating) metric.movingq_means_field = np.array(G, dtype = floating) metric.movingq_sigma_sq_field = np.array(sigma_i_sq, dtype = floating) #compute the step using the implementation under test actual_forward = metric.compute_demons_step(True) actual_backward = metric.compute_demons_step(False) #Now directly compute the demons steps according to eq 4 in [Vercauteren09] num_fwd = sigma_x_sq * (G - F) den_fwd = sigma_x_sq * sq_norm_grad_F + sigma_i_sq expected_fwd = -1 * np.array(grad_F) expected_fwd[..., 0] *= num_fwd / den_fwd expected_fwd[..., 1] *= num_fwd / den_fwd expected_fwd[..., 2] *= num_fwd / den_fwd #apply Gaussian smoothing expected_fwd[..., 0] = ndimage.filters.gaussian_filter(expected_fwd[..., 0], 3.0) expected_fwd[..., 1] = ndimage.filters.gaussian_filter(expected_fwd[..., 1], 3.0) expected_fwd[..., 2] = ndimage.filters.gaussian_filter(expected_fwd[..., 2], 3.0) num_bwd = sigma_x_sq * (F - G) den_bwd = sigma_x_sq * sq_norm_grad_G + sigma_i_sq expected_bwd = -1 * np.array(grad_G) expected_bwd[..., 0] *= num_bwd / den_bwd expected_bwd[..., 1] *= num_bwd / den_bwd expected_bwd[..., 2] *= num_bwd / den_bwd #apply Gaussian smoothing expected_bwd[..., 0] = ndimage.filters.gaussian_filter(expected_bwd[..., 0], 3.0) expected_bwd[..., 1] = ndimage.filters.gaussian_filter(expected_bwd[..., 1], 3.0) expected_bwd[..., 2] = ndimage.filters.gaussian_filter(expected_bwd[..., 2], 3.0) assert_array_almost_equal(actual_forward, expected_fwd) assert_array_almost_equal(actual_backward, expected_bwd) if __name__=='__main__': test_em_demons_step_2d() test_em_demons_step_3d() test_exceptions() test_EMMetric_image_dynamics() dipy-0.10.1/dipy/align/tests/test_parzenhist.py000066400000000000000000000654751263041327500215630ustar00rootroot00000000000000import numpy as np import scipy as sp import scipy.ndimage as ndimage from functools import reduce from operator import mul from dipy.core.ndindex import ndindex from dipy.data import get_data from dipy.align import vector_fields as vf from dipy.align.transforms import regtransforms from dipy.align.parzenhist import (ParzenJointHistogram, cubic_spline, cubic_spline_derivative, sample_domain_regular) from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_almost_equal, assert_equal, assert_raises) factors = {('TRANSLATION', 2): 2.0, ('ROTATION', 2): 0.1, ('RIGID', 2): 0.1, ('SCALING', 2): 0.01, ('AFFINE', 2): 0.1, ('TRANSLATION', 3): 2.0, ('ROTATION', 3): 0.1, ('RIGID', 3): 0.1, ('SCALING', 3): 0.1, ('AFFINE', 3): 0.1} def create_random_image_pair(sh, nvals, seed): r""" Create a pair of images with an arbitrary, non-uniform joint PDF Parameters ---------- sh : array, shape (dim,) the shape of the images to be created nvals : int maximum number of different values in the generated 2D images. The voxel intensities of the returned images will be in {0, 1, ..., nvals-1} Returns ------- static : array, shape=sh first image in the image pair moving : array, shape=sh second image in the image pair """ np.random.seed(seed) sz = reduce(mul, sh, 1) sh = tuple(sh) static = np.random.randint(0, nvals, sz).reshape(sh) # This is just a simple way of making the distribution non-uniform moving = static.copy() moving += np.random.randint(0, nvals//2, sz).reshape(sh) - nvals//4 # This is just a simple way of making the distribution non-uniform static = moving.copy() static += np.random.randint(0, nvals//2, sz).reshape(sh) - nvals//4 return static.astype(np.float64), moving.astype(np.float64) def test_cubic_spline(): # Cubic spline as defined in [Mattes03] eq. (3) # # [Mattes03] Mattes, D., Haynor, D. R., Vesselle, H., Lewellen, T. K., # & Eubank, W. PET-CT image registration in the chest using # free-form deformations. IEEE Transactions on Medical Imaging, # 22(1), 120-8, 2003. in_list = [] expected = [] for epsilon in [-1e-9, 0.0, 1e-9]: for t in [-2.0, -1.0, 0.0, 1.0, 2.0]: x = t + epsilon in_list.append(x) absx = np.abs(x) sqrx = x * x if absx < 1: expected.append((4.0 - 6 * sqrx + 3.0 * (absx ** 3)) / 6.0) elif absx < 2: expected.append(((2 - absx) ** 3) / 6.0) else: expected.append(0.0) actual = cubic_spline(np.array(in_list, dtype=np.float64)) assert_array_almost_equal(actual, np.array(expected, dtype=np.float64)) def test_cubic_spline_derivative(): # Test derivative of the cubic spline, as defined in [Mattes03] eq. (3) by # comparing the analytical and numerical derivatives # # [Mattes03] Mattes, D., Haynor, D. R., Vesselle, H., Lewellen, T. K., # & Eubank, W. PET-CT image registration in the chest using # free-form deformations. IEEE Transactions on Medical Imaging, # 22(1), 120-8, 2003. in_list = [] expected = [] for epsilon in [-1e-9, 0.0, 1e-9]: for t in [-2.0, -1.0, 0.0, 1.0, 2.0]: x = t + epsilon in_list.append(x) h = 1e-6 in_list = np.array(in_list) input_h = in_list + h s = np.array(cubic_spline(in_list)) s_h = np.array(cubic_spline(input_h)) expected = (s_h - s) / h actual = cubic_spline_derivative(in_list) assert_array_almost_equal(actual, expected) def test_parzen_joint_histogram(): # Test the simple functionality of ParzenJointHistogram, # the gradients and computation of the joint intensity distribution # will be tested independently for nbins in [15, 30, 50]: for min_int in [-10.0, 0.0, 10.0]: for intensity_range in [0.1, 1.0, 10.0]: fact = 1 max_int = min_int + intensity_range P = ParzenJointHistogram(nbins) # Make a pair of 4-pixel images, introduce +/- 1 values # that will be excluded using a mask static = np.array([min_int - 1.0, min_int, max_int, max_int + 1.0]) # Multiply by an arbitrary value (make the ranges different) moving = fact * np.array([min_int, min_int - 1.0, max_int + 1.0, max_int]) # Create a mask to exclude the invalid values (beyond min and # max computed above) static_mask = np.array([0, 1, 1, 0]) moving_mask = np.array([1, 0, 0, 1]) P.setup(static, moving, static_mask, moving_mask) # Test bin_normalize_static at the boundary normalized = P.bin_normalize_static(min_int) assert_almost_equal(normalized, P.padding) index = P.bin_index(normalized) assert_equal(index, P.padding) normalized = P.bin_normalize_static(max_int) assert_almost_equal(normalized, nbins - P.padding) index = P.bin_index(normalized) assert_equal(index, nbins - 1 - P.padding) # Test bin_normalize_moving at the boundary normalized = P.bin_normalize_moving(fact * min_int) assert_almost_equal(normalized, P.padding) index = P.bin_index(normalized) assert_equal(index, P.padding) normalized = P.bin_normalize_moving(fact * max_int) assert_almost_equal(normalized, nbins - P.padding) index = P.bin_index(normalized) assert_equal(index, nbins - 1 - P.padding) # Test bin_index not at the boundary delta_s = (max_int - min_int) / (nbins - 2 * P.padding) delta_m = fact * (max_int - min_int) / (nbins - 2 * P.padding) for i in range(nbins - 2 * P.padding): normalized = P.bin_normalize_static(min_int + (i + 0.5) * delta_s) index = P.bin_index(normalized) assert_equal(index, P.padding + i) normalized = P.bin_normalize_moving(fact * min_int + (i + 0.5) * delta_m) index = P.bin_index(normalized) assert_equal(index, P.padding + i) def test_parzen_densities(): # Test the computation of the joint intensity distribution # using a dense and a sparse set of values seed = 1246592 nbins = 32 nr = 30 nc = 35 ns = 20 nvals = 50 for dim in [2, 3]: if dim == 2: shape = (nr, nc) static, moving = create_random_image_pair(shape, nvals, seed) else: shape = (ns, nr, nc) static, moving = create_random_image_pair(shape, nvals, seed) # Initialize parzen_hist = ParzenJointHistogram(nbins) parzen_hist.setup(static, moving) # Get distributions computed by dense sampling parzen_hist.update_pdfs_dense(static, moving) actual_joint_dense = parzen_hist.joint actual_mmarginal_dense = parzen_hist.mmarginal actual_smarginal_dense = parzen_hist.smarginal # Get distributions computed by sparse sampling sval = static.reshape(-1) mval = moving.reshape(-1) parzen_hist.update_pdfs_sparse(sval, mval) actual_joint_sparse = parzen_hist.joint actual_mmarginal_sparse = parzen_hist.mmarginal actual_smarginal_sparse = parzen_hist.smarginal # Compute the expected joint distribution with dense sampling expected_joint_dense = np.zeros(shape=(nbins, nbins)) for index in ndindex(shape): sv = parzen_hist.bin_normalize_static(static[index]) mv = parzen_hist.bin_normalize_moving(moving[index]) sbin = parzen_hist.bin_index(sv) # The spline is centered at mv, will evaluate for all row spline_arg = np.array([i - mv for i in range(nbins)]) contribution = cubic_spline(spline_arg) expected_joint_dense[sbin, :] += contribution # Compute the expected joint distribution with sparse sampling expected_joint_sparse = np.zeros(shape=(nbins, nbins)) for index in range(sval.shape[0]): sv = parzen_hist.bin_normalize_static(sval[index]) mv = parzen_hist.bin_normalize_moving(mval[index]) sbin = parzen_hist.bin_index(sv) # The spline is centered at mv, will evaluate for all row spline_arg = np.array([i - mv for i in range(nbins)]) contribution = cubic_spline(spline_arg) expected_joint_sparse[sbin, :] += contribution # Verify joint distributions expected_joint_dense /= expected_joint_dense.sum() expected_joint_sparse /= expected_joint_sparse.sum() assert_array_almost_equal(actual_joint_dense, expected_joint_dense) assert_array_almost_equal(actual_joint_sparse, expected_joint_sparse) # Verify moving marginals expected_mmarginal_dense = expected_joint_dense.sum(0) expected_mmarginal_dense /= expected_mmarginal_dense.sum() expected_mmarginal_sparse = expected_joint_sparse.sum(0) expected_mmarginal_sparse /= expected_mmarginal_sparse.sum() assert_array_almost_equal(actual_mmarginal_dense, expected_mmarginal_dense) assert_array_almost_equal(actual_mmarginal_sparse, expected_mmarginal_sparse) # Verify static marginals expected_smarginal_dense = expected_joint_dense.sum(1) expected_smarginal_dense /= expected_smarginal_dense.sum() expected_smarginal_sparse = expected_joint_sparse.sum(1) expected_smarginal_sparse /= expected_smarginal_sparse.sum() assert_array_almost_equal(actual_smarginal_dense, expected_smarginal_dense) assert_array_almost_equal(actual_smarginal_sparse, expected_smarginal_sparse) def setup_random_transform(transform, rfactor, nslices=45, sigma=1): r""" Creates a pair of images related to each other by an affine transform We transform the static image with a random transform so that the returned ground-truth transform will produce the static image when applied to the moving image. This will simply stack some copies of a T1 coronal slice image and add some zero slices up and down to reduce boundary artefacts when interpolating. Parameters ---------- transform: instance of Transform defines the type of random transformation that will be created rfactor: float the factor to multiply the uniform(0,1) random noise that will be added to the identity parameters to create the random transform nslices: int number of slices to be stacked to form the volumes """ dim = 2 if nslices == 1 else 3 if transform.get_dim() != dim: raise ValueError("Transform and requested volume have different dims.") np.random.seed(3147702) zero_slices = nslices // 3 fname = get_data('t1_coronal_slice') moving_slice = np.load(fname) moving_slice = moving_slice[40:180, 50:210] if nslices == 1: dim = 2 moving = moving_slice transform_method = vf.transform_2d_affine else: dim = 3 transform_method = vf.transform_3d_affine moving = np.zeros(shape=moving_slice.shape + (nslices,)) moving[..., zero_slices:(2 * zero_slices)] = moving_slice[..., None] moving = sp.ndimage.filters.gaussian_filter(moving, sigma) moving_g2w = np.eye(dim + 1) mmask = np.ones_like(moving, dtype=np.int32) # Create a transform by slightly perturbing the identity parameters theta = transform.get_identity_parameters() n = transform.get_number_of_parameters() theta += np.random.rand(n) * rfactor M = transform.param_to_matrix(theta) shape = np.array(moving.shape, dtype=np.int32) static = np.array(transform_method(moving.astype(np.float32), shape, M)) static = static.astype(np.float64) static_g2w = np.eye(dim + 1) smask = np.ones_like(static, dtype=np.int32) return static, moving, static_g2w, moving_g2w, smask, mmask, M def test_joint_pdf_gradients_dense(): # Compare the analytical and numerical (finite differences) gradient of the # joint distribution (i.e. derivatives of each histogram cell) w.r.t. the # transform parameters. Since the histograms are discrete partitions of the # image intensities, the finite difference approximation is normally not # very close to the analytical derivatives. Other sources of error are the # interpolation used when transforming the images and the boundary intensities # introduced when interpolating outside of the image (i.e. some "zeros" are # introduced at the boundary which affect the numerical derivatives but is # not taken into account by the analytical derivatives). Thus, we need to # relax the verification. Instead of looking for the analytical and # numerical gradients to be very close to each other, we will verify that # they approximately point in the same direction by testing if the angle # they form is close to zero. h = 1e-4 # Make sure dictionary entries are processed in the same order regardless of # the platform. Otherwise any random numbers drawn within the loop would make # the test non-deterministic even if we fix the seed before the loop. # Right now, this test does not draw any samples, but we still sort the entries # to prevent future related failures. for ttype in sorted(factors): dim = ttype[1] if dim == 2: nslices = 1 transform_method = vf.transform_2d_affine else: nslices = 45 transform_method = vf.transform_3d_affine transform = regtransforms[ttype] factor = factors[ttype] theta = transform.get_identity_parameters() static, moving, static_g2w, moving_g2w, smask, mmask, M = \ setup_random_transform(transform, factor, nslices, 5.0) parzen_hist = ParzenJointHistogram(32) parzen_hist.setup(static, moving, smask, mmask) # Compute the gradient at theta with the implementation under test M = transform.param_to_matrix(theta) shape = np.array(static.shape, dtype=np.int32) moved = transform_method(moving.astype(np.float32), shape, M) moved = np.array(moved) parzen_hist.update_pdfs_dense(static.astype(np.float64), moved.astype(np.float64)) # Get the joint distribution evaluated at theta J0 = np.copy(parzen_hist.joint) grid_to_space = np.eye(dim + 1) spacing = np.ones(dim, dtype=np.float64) mgrad, inside = vf.gradient(moving.astype(np.float32), moving_g2w, spacing, shape, grid_to_space) id = transform.get_identity_parameters() parzen_hist.update_gradient_dense(id, transform, static.astype(np.float64), moved.astype(np.float64), grid_to_space, mgrad, smask, mmask) actual = np.copy(parzen_hist.joint_grad) # Now we have the gradient of the joint distribution w.r.t. the # transform parameters # Compute the gradient using finite-diferences n = transform.get_number_of_parameters() expected = np.empty_like(actual) for i in range(n): dtheta = theta.copy() dtheta[i] += h # Update the joint distribution with the transformed moving image M = transform.param_to_matrix(dtheta) shape = np.array(static.shape, dtype=np.int32) moved = transform_method(moving.astype(np.float32), shape, M) moved = np.array(moved) parzen_hist.update_pdfs_dense(static.astype(np.float64), moved.astype(np.float64)) J1 = np.copy(parzen_hist.joint) expected[..., i] = (J1 - J0) / h # Dot product and norms of gradients of each joint histogram cell # i.e. the derivatives of each cell w.r.t. all parameters P = (expected * actual).sum(2) enorms = np.sqrt((expected ** 2).sum(2)) anorms = np.sqrt((actual ** 2).sum(2)) prodnorms = enorms * anorms # Cosine of angle between the expected and actual gradients. # Exclude very small gradients P[prodnorms > 1e-6] /= (prodnorms[prodnorms > 1e-6]) P[prodnorms <= 1e-6] = 0 # Verify that a large proportion of the gradients point almost in # the same direction. Disregard very small gradients mean_cosine = P[P != 0].mean() std_cosine = P[P != 0].std() assert(mean_cosine > 0.9) assert(std_cosine < 0.25) def test_joint_pdf_gradients_sparse(): h = 1e-4 # Make sure dictionary entries are processed in the same order regardless of # the platform. Otherwise any random numbers drawn within the loop would make # the test non-deterministic even if we fix the seed before the loop. # Right now, this test does not draw any samples, but we still sort the entries # to prevent future related failures. for ttype in sorted(factors): dim = ttype[1] if dim == 2: nslices = 1 interp_method = vf.interpolate_scalar_2d else: nslices = 45 interp_method = vf.interpolate_scalar_3d transform = regtransforms[ttype] factor = factors[ttype] theta = transform.get_identity_parameters() static, moving, static_g2w, moving_g2w, smask, mmask, M = \ setup_random_transform(transform, factor, nslices, 5.0) parzen_hist = ParzenJointHistogram(32) parzen_hist.setup(static, moving, smask, mmask) # Sample the fixed-image domain k = 3 sigma = 0.25 seed = 1234 shape = np.array(static.shape, dtype=np.int32) samples = sample_domain_regular(k, shape, static_g2w, sigma, seed) samples = np.array(samples) samples = np.hstack((samples, np.ones(samples.shape[0])[:, None])) sp_to_static = np.linalg.inv(static_g2w) samples_static_grid = (sp_to_static.dot(samples.T).T)[..., :dim] intensities_static, inside = interp_method(static.astype(np.float32), samples_static_grid) # The routines in vector_fields operate, mostly, with float32 because # they were thought to be used for non-linear registration. We may need # to write some float64 counterparts for affine registration, where # memory is not so big issue intensities_static = np.array(intensities_static, dtype=np.float64) # Compute the gradient at theta with the implementation under test M = transform.param_to_matrix(theta) sp_to_moving = np.linalg.inv(moving_g2w).dot(M) samples_moving_grid = (sp_to_moving.dot(samples.T).T)[..., :dim] intensities_moving, inside = interp_method(moving.astype(np.float32), samples_moving_grid) intensities_moving = np.array(intensities_moving, dtype=np.float64) parzen_hist.update_pdfs_sparse(intensities_static, intensities_moving) # Get the joint distribution evaluated at theta J0 = np.copy(parzen_hist.joint) spacing = np.ones(dim + 1, dtype=np.float64) mgrad, inside = vf.sparse_gradient(moving.astype(np.float32), sp_to_moving, spacing, samples) parzen_hist.update_gradient_sparse(theta, transform, intensities_static, intensities_moving, samples[..., :dim], mgrad) # Get the gradient of the joint distribution w.r.t. the transform # parameters actual = np.copy(parzen_hist.joint_grad) # Compute the gradient using finite-diferences n = transform.get_number_of_parameters() expected = np.empty_like(actual) for i in range(n): dtheta = theta.copy() dtheta[i] += h # Update the joint distribution with the transformed moving image M = transform.param_to_matrix(dtheta) sp_to_moving = np.linalg.inv(moving_g2w).dot(M) samples_moving_grid = sp_to_moving.dot(samples.T).T intensities_moving, inside = \ interp_method(moving.astype(np.float32), samples_moving_grid) intensities_moving = np.array(intensities_moving, dtype=np.float64) parzen_hist.update_pdfs_sparse(intensities_static, intensities_moving) J1 = np.copy(parzen_hist.joint) expected[..., i] = (J1 - J0) / h # Dot product and norms of gradients of each joint histogram cell # i.e. the derivatives of each cell w.r.t. all parameters P = (expected * actual).sum(2) enorms = np.sqrt((expected ** 2).sum(2)) anorms = np.sqrt((actual ** 2).sum(2)) prodnorms = enorms*anorms # Cosine of angle between the expected and actual gradients. # Exclude very small gradients P[prodnorms > 1e-6] /= (prodnorms[prodnorms > 1e-6]) P[prodnorms <= 1e-6] = 0 # Verify that a large proportion of the gradients point almost in # the same direction. Disregard very small gradients mean_cosine = P[P != 0].mean() std_cosine = P[P != 0].std() assert(mean_cosine > 0.99) assert(std_cosine < 0.15) def test_sample_domain_regular(): # Test 2D sampling shape = np.array((10, 10), dtype=np.int32) affine = np.eye(3) invalid_affine = np.eye(2) sigma = 0 dim = len(shape) n = shape[0] * shape[1] k = 2 # Verify exception is raised with invalid affine assert_raises(ValueError, sample_domain_regular, k, shape, invalid_affine, sigma) samples = sample_domain_regular(k, shape, affine, sigma) isamples = np.array(samples, dtype=np.int32) indices = (isamples[:, 0] * shape[1] + isamples[:, 1]) # Verify correct number of points sampled assert_array_equal(samples.shape, [n // k, dim]) # Verify all sampled points are different assert_equal(len(set(indices)), len(indices)) # Verify the sampling was regular at rate k assert_equal((indices % k).sum(), 0) # Test 3D sampling shape = np.array((5, 10, 10), dtype=np.int32) affine = np.eye(4) invalid_affine = np.eye(3) sigma = 0 dim = len(shape) n = shape[0] * shape[1] * shape[2] k = 10 # Verify exception is raised with invalid affine assert_raises(ValueError, sample_domain_regular, k, shape, invalid_affine, sigma) samples = sample_domain_regular(k, shape, affine, sigma) isamples = np.array(samples, dtype=np.int32) indices = (isamples[:, 0] * shape[1] * shape[2] + isamples[:, 1] * shape[2] + isamples[:, 2]) # Verify correct number of points sampled assert_array_equal(samples.shape, [n // k, dim]) # Verify all sampled points are different assert_equal(len(set(indices)), len(indices)) # Verify the sampling was regular at rate k assert_equal((indices % k).sum(), 0) def test_exceptions(): H = ParzenJointHistogram(32) valid = np.empty((2,2,2), dtype=np.float64) invalid = np.empty((2,2,2,2), dtype=np.float64) # Test exception from `ParzenJointHistogram.update_pdfs_dense` assert_raises(ValueError, H.update_pdfs_dense, valid, invalid) assert_raises(ValueError, H.update_pdfs_dense, invalid, valid) assert_raises(ValueError, H.update_pdfs_dense, invalid, invalid) # Test exception from `ParzenJointHistogram.update_gradient_dense` for shape in [(5,5), (5,5,5)]: dim = len(shape) grid2world=np.eye(dim + 1) transform = regtransforms[('ROTATION', dim)] theta = transform.get_identity_parameters() valid_img = np.empty(shape, dtype=np.float64) valid_grad = np.empty(shape + (dim,), dtype=np.float64) invalid_img = np.empty((2,2,2,2), dtype=np.float64) invalid_grad_type = valid_grad.astype(np.int32) invalid_grad_dim = np.empty(shape + (dim+1,), dtype=np.float64) for s, m, g in [(valid_img, valid_img, invalid_grad_type), (valid_img, valid_img, invalid_grad_dim), (invalid_img, valid_img, valid_grad), (invalid_img, invalid_img, invalid_grad_type), (invalid_img, invalid_img, invalid_grad_dim)]: assert_raises(ValueError, H.update_gradient_dense, theta, transform, s, m, grid2world, g) # Test exception from `ParzenJointHistogram.update_gradient_dense` nsamples = 2 for dim in [2, 3]: transform = regtransforms[('ROTATION', dim)] theta = transform.get_identity_parameters() valid_vals = np.empty((nsamples,), dtype=np.float64) valid_grad = np.empty((nsamples,dim), dtype=np.float64) valid_points = np.empty((nsamples,dim), dtype=np.float64) invalid_grad_type = np.empty((nsamples,dim), dtype=np.int32) invalid_grad_dim = np.empty((nsamples,dim + 2), dtype=np.float64) invalid_grad_len = np.empty((nsamples + 1,dim), dtype=np.float64) invalid_vals = np.empty((nsamples + 1), dtype=np.float64) invalid_points_dim = np.empty((nsamples,dim + 2), dtype=np.float64) invalid_points_len = np.empty((nsamples+1,dim), dtype=np.float64) for s, m, p, g in [(invalid_vals, valid_vals, valid_points, valid_grad), (valid_vals, invalid_vals, valid_points, valid_grad), (valid_vals, valid_vals, invalid_points_dim, valid_grad), (valid_vals, valid_vals, invalid_points_dim, invalid_grad_dim), (valid_vals, valid_vals, invalid_points_len, valid_grad), (valid_vals, valid_vals, valid_points, invalid_grad_type), (valid_vals, valid_vals, valid_points, invalid_grad_dim), (valid_vals, valid_vals, valid_points, invalid_grad_len)]: assert_raises(ValueError, H.update_gradient_sparse, theta, transform, s, m, p, g) dipy-0.10.1/dipy/align/tests/test_reslice.py000066400000000000000000000050641263041327500210060ustar00rootroot00000000000000import numpy as np import nibabel as nib from numpy.testing import (run_module_suite, assert_, assert_equal, assert_almost_equal) from dipy.data import get_data from dipy.align.reslice import reslice from dipy.denoise.noise_estimate import estimate_sigma def test_resample(): fimg, _, _ = get_data("small_25") img = nib.load(fimg) data = img.get_data() affine = img.get_affine() zooms = img.get_header().get_zooms()[:3] # test that new zooms are correctly from the affine (check with 3D volume) new_zooms = (1, 1.2, 2.1) data2, affine2 = reslice(data[..., 0], affine, zooms, new_zooms, order=1, mode='constant') img2 = nib.Nifti1Image(data2, affine2) new_zooms_confirmed = img2.get_header().get_zooms()[:3] assert_almost_equal(new_zooms, new_zooms_confirmed) # test that shape changes correctly for the first 3 dimensions (check 4D) new_zooms = (1, 1, 1.) data2, affine2 = reslice(data, affine, zooms, new_zooms, order=0, mode='reflect') assert_equal(2 * np.array(data.shape[:3]), data2.shape[:3]) assert_equal(data2.shape[-1], data.shape[-1]) # same with different interpolation order new_zooms = (1, 1, 1.) data3, affine2 = reslice(data, affine, zooms, new_zooms, order=5, mode='reflect') assert_equal(2 * np.array(data.shape[:3]), data3.shape[:3]) assert_equal(data3.shape[-1], data.shape[-1]) # test that the sigma will be reduced with interpolation sigmas = estimate_sigma(data) sigmas2 = estimate_sigma(data2) sigmas3 = estimate_sigma(data3) assert_(np.all(sigmas > sigmas2)) assert_(np.all(sigmas2 > sigmas3)) # check that 4D resampling matches 3D resampling data2, affine2 = reslice(data, affine, zooms, new_zooms) for i in range(data.shape[-1]): _data, _affine = reslice(data[..., i], affine, zooms, new_zooms) assert_almost_equal(data2[..., i], _data) assert_almost_equal(affine2, _affine) # check use of multiprocessing pool of specified size data3, affine3 = reslice(data, affine, zooms, new_zooms, num_processes=4) assert_almost_equal(data2, data3) assert_almost_equal(affine2, affine3) # check use of multiprocessing pool of autoconfigured size data3, affine3 = reslice(data, affine, zooms, new_zooms, num_processes=0) assert_almost_equal(data2, data3) assert_almost_equal(affine2, affine3) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/align/tests/test_scalespace.py000066400000000000000000000064721263041327500214670ustar00rootroot00000000000000import numpy as np import scipy as sp from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_almost_equal, assert_equal, assert_raises) from .. import floating from ..imwarp import get_direction_and_spacings from ..scalespace import (ScaleSpace, IsotropicScaleSpace) from .test_imwarp import get_synthetic_warped_circle def test_scale_space(): num_levels = 3 for test_class in [ScaleSpace, IsotropicScaleSpace]: for dim in [2, 3]: print(dim, test_class) if dim == 2: moving, static = get_synthetic_warped_circle(1) else: moving, static = get_synthetic_warped_circle(30) input_spacing = np.array([1.1, 1.2, 1.5])[:dim] grid2world = np.diag(tuple(input_spacing) + (1.0,)) original = moving if test_class is ScaleSpace: ss = test_class(original, num_levels, grid2world, input_spacing) elif test_class is IsotropicScaleSpace: factors = [4, 2, 1] sigmas = [3.0, 1.0, 0.0] ss = test_class(original, factors, sigmas, grid2world, input_spacing) for level in range(num_levels): # Verify sigmas and images are consistent sigmas = ss.get_sigmas(level) expected = sp.ndimage.filters.gaussian_filter(original, sigmas) expected = ((expected - expected.min())/ (expected.max() - expected.min())) actual = ss.get_image(level) assert_array_almost_equal(actual, expected) # Verify scalings and spacings are consistent spacings = ss.get_spacing(level) scalings = ss.get_scaling(level) expected = ss.get_spacing(0) * scalings actual = ss.get_spacing(level) assert_array_almost_equal(actual, expected) # Verify affine and affine_inv are consistent affine = ss.get_affine(level) affine_inv = ss.get_affine_inv(level) expected = np.eye(1 + dim) actual = affine.dot(affine_inv) assert_array_almost_equal(actual, expected) # Verify affine consistent with spacings exp_dir, expected_sp = get_direction_and_spacings(affine, dim) actual_sp = spacings assert_array_almost_equal(actual_sp, expected_sp) def test_scale_space_exceptions(): np.random.seed(2022966) target_shape = (32, 32) #create a random image image = np.ndarray(target_shape, dtype=floating) ns = np.size(image) image[...] = np.random.randint(0, 10, ns).reshape(tuple(target_shape)) zeros = (image == 0).astype(np.int32) ss = ScaleSpace(image,3) for invalid_level in [-1, 3, 4]: assert_raises(ValueError, ss.get_image, invalid_level) # Verify that the mask is correctly applied, when requested ss = ScaleSpace(image,3, mask0=True) for level in range(3): img = ss.get_image(level) z = (img == 0).astype(np.int32) assert_array_equal(zeros, z) dipy-0.10.1/dipy/align/tests/test_streamlinear.py000066400000000000000000000357241263041327500220540ustar00rootroot00000000000000import numpy as np from numpy.testing import (run_module_suite, assert_, assert_equal, assert_almost_equal, assert_array_equal, assert_array_almost_equal, assert_raises) from dipy.align.streamlinear import (compose_matrix44, decompose_matrix44, BundleSumDistanceMatrixMetric, BundleMinDistanceMatrixMetric, BundleMinDistanceMetric, StreamlineLinearRegistration, StreamlineDistanceMetric) from dipy.tracking.streamline import (center_streamlines, unlist_streamlines, relist_streamlines, transform_streamlines, set_number_of_points) from dipy.core.geometry import compose_matrix from dipy.data import get_data, two_cingulum_bundles from nibabel import trackvis as tv from dipy.align.bundlemin import (_bundle_minimum_distance_matrix, _bundle_minimum_distance, distance_matrix_mdf) def simulated_bundle(no_streamlines=10, waves=False, no_pts=12): t = np.linspace(-10, 10, 200) # parallel waves or parallel lines bundle = [] for i in np.linspace(-5, 5, no_streamlines): if waves: pts = np.vstack((np.cos(t), t, i * np.ones(t.shape))).T else: pts = np.vstack((np.zeros(t.shape), t, i * np.ones(t.shape))).T pts = set_number_of_points(pts, no_pts) bundle.append(pts) return bundle def fornix_streamlines(no_pts=12): fname = get_data('fornix') streams, hdr = tv.read(fname) streamlines = [set_number_of_points(i[0], no_pts) for i in streams] return streamlines def evaluate_convergence(bundle, new_bundle2): pts_static = np.concatenate(bundle, axis=0) pts_moved = np.concatenate(new_bundle2, axis=0) assert_array_almost_equal(pts_static, pts_moved, 3) def test_rigid_parallel_lines(): bundle_initial = simulated_bundle() bundle, shift = center_streamlines(bundle_initial) mat = compose_matrix44([20, 0, 10, 0, 40, 0]) bundle2 = transform_streamlines(bundle, mat) bundle_sum_distance = BundleSumDistanceMatrixMetric() options = {'maxcor': 100, 'ftol': 1e-9, 'gtol': 1e-16, 'eps': 1e-3} srr = StreamlineLinearRegistration(metric=bundle_sum_distance, x0=np.zeros(6), method='L-BFGS-B', bounds=None, options=options) new_bundle2 = srr.optimize(bundle, bundle2).transform(bundle2) evaluate_convergence(bundle, new_bundle2) def test_rigid_real_bundles(): bundle_initial = fornix_streamlines()[:20] bundle, shift = center_streamlines(bundle_initial) mat = compose_matrix44([0, 0, 20, 45., 0, 0]) bundle2 = transform_streamlines(bundle, mat) bundle_sum_distance = BundleSumDistanceMatrixMetric() srr = StreamlineLinearRegistration(bundle_sum_distance, x0=np.zeros(6), method='Powell') new_bundle2 = srr.optimize(bundle, bundle2).transform(bundle2) evaluate_convergence(bundle, new_bundle2) bundle_min_distance = BundleMinDistanceMatrixMetric() srr = StreamlineLinearRegistration(bundle_min_distance, x0=np.zeros(6), method='Powell') new_bundle2 = srr.optimize(bundle, bundle2).transform(bundle2) evaluate_convergence(bundle, new_bundle2) assert_raises(ValueError, StreamlineLinearRegistration, method='Whatever') def test_rigid_partial_real_bundles(): static = fornix_streamlines()[:20] moving = fornix_streamlines()[20:40] static_center, shift = center_streamlines(static) moving_center, shift2 = center_streamlines(moving) print(shift2) mat = compose_matrix(translate=np.array([0, 0, 0.]), angles=np.deg2rad([40, 0, 0.])) moved = transform_streamlines(moving_center, mat) srr = StreamlineLinearRegistration() srm = srr.optimize(static_center, moved) print(srm.fopt) print(srm.iterations) print(srm.funcs) moving_back = srm.transform(moved) print(srm.matrix) static_center = set_number_of_points(static_center, 100) moving_center = set_number_of_points(moving_back, 100) vol = np.zeros((100, 100, 100)) spts = np.concatenate(static_center, axis=0) spts = np.round(spts).astype(np.int) + np.array([50, 50, 50]) mpts = np.concatenate(moving_center, axis=0) mpts = np.round(mpts).astype(np.int) + np.array([50, 50, 50]) for index in spts: i, j, k = index vol[i, j, k] = 1 vol2 = np.zeros((100, 100, 100)) for index in mpts: i, j, k = index vol2[i, j, k] = 1 overlap = np.sum(np.logical_and(vol, vol2)) / float(np.sum(vol2)) assert_equal(overlap * 100 > 40, True) def test_stream_rigid(): static = fornix_streamlines()[:20] moving = fornix_streamlines()[20:40] static_center, shift = center_streamlines(static) mat = compose_matrix44([0, 0, 0, 0, 40, 0]) moving = transform_streamlines(moving, mat) srr = StreamlineLinearRegistration() sr_params = srr.optimize(static, moving) moved = transform_streamlines(moving, sr_params.matrix) srr = StreamlineLinearRegistration(verbose=True) srm = srr.optimize(static, moving) moved2 = transform_streamlines(moving, srm.matrix) moved3 = srm.transform(moving) assert_array_almost_equal(moved[0], moved2[0], decimal=3) assert_array_almost_equal(moved2[0], moved3[0], decimal=3) def test_min_vs_min_fast_precision(): static = fornix_streamlines()[:20] moving = fornix_streamlines()[:20] static = [s.astype('f8') for s in static] moving = [m.astype('f8') for m in moving] bmd = BundleMinDistanceMatrixMetric() bmd.setup(static, moving) bmdf = BundleMinDistanceMetric() bmdf.setup(static, moving) x_test = [0.01, 0, 0, 0, 0, 0] print(bmd.distance(x_test)) print(bmdf.distance(x_test)) assert_equal(bmd.distance(x_test), bmdf.distance(x_test)) def test_same_number_of_points(): A = [np.random.rand(10, 3), np.random.rand(20, 3)] B = [np.random.rand(21, 3), np.random.rand(30, 3)] C = [np.random.rand(10, 3), np.random.rand(10, 3)] D = [np.random.rand(20, 3), np.random.rand(20, 3)] slr = StreamlineLinearRegistration() assert_raises(ValueError, slr.optimize, A, B) assert_raises(ValueError, slr.optimize, C, D) assert_raises(ValueError, slr.optimize, C, B) def test_efficient_bmd(): a = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]]) streamlines = [a, a + 2, a + 4] points, offsets = unlist_streamlines(streamlines) points = points.astype(np.double) points2 = points.copy() D = np.zeros((len(offsets), len(offsets)), dtype='f8') _bundle_minimum_distance_matrix(points, points2, len(offsets), len(offsets), a.shape[0], D) assert_equal(np.sum(np.diag(D)), 0) points2 += 2 _bundle_minimum_distance_matrix(points, points2, len(offsets), len(offsets), a.shape[0], D) streamlines2 = relist_streamlines(points2, offsets) D2 = distance_matrix_mdf(streamlines, streamlines2) assert_array_almost_equal(D, D2) cols = D2.shape[1] rows = D2.shape[0] dist = 0.25 * (np.sum(np.min(D2, axis=0)) / float(cols) + np.sum(np.min(D2, axis=1)) / float(rows)) ** 2 dist2 = _bundle_minimum_distance(points, points2, len(offsets), len(offsets), a.shape[0]) assert_almost_equal(dist, dist2) def test_openmp_locks(): static = [] moving = [] pts = 20 for i in range(1000): s = np.random.rand(pts, 3) static.append(s) moving.append(s + 2) moving = moving[2:] points, offsets = unlist_streamlines(static) points2, offsets2 = unlist_streamlines(moving) D = np.zeros((len(offsets), len(offsets2)), dtype='f8') _bundle_minimum_distance_matrix(points, points2, len(offsets), len(offsets2), pts, D) dist1 = 0.25 * (np.sum(np.min(D, axis=0)) / float(D.shape[1]) + np.sum(np.min(D, axis=1)) / float(D.shape[0])) ** 2 dist2 = _bundle_minimum_distance(points, points2, len(offsets), len(offsets2), pts) assert_almost_equal(dist1, dist2, 6) def test_from_to_rigid(): t = np.array([10, 2, 3, 0.1, 20., 30.]) mat = compose_matrix44(t) vec = decompose_matrix44(mat, 6) assert_array_almost_equal(t, vec) t = np.array([0, 0, 0, 180, 0., 0.]) mat = np.eye(4) mat[0, 0] = -1 vec = decompose_matrix44(mat, 6) assert_array_almost_equal(-t, vec) def test_matrix44(): assert_raises(ValueError, compose_matrix44, np.ones(5)) assert_raises(ValueError, compose_matrix44, np.ones(9)) assert_raises(ValueError, compose_matrix44, np.ones(16)) def test_abstract_metric_class(): class DummyStreamlineMetric(StreamlineDistanceMetric): def test(): pass assert_raises(TypeError, DummyStreamlineMetric) def test_evolution_of_previous_iterations(): static = fornix_streamlines()[:20] moving = fornix_streamlines()[:20] moving = [m + np.array([10., 0., 0.]) for m in moving] slr = StreamlineLinearRegistration(evolution=True) from dipy.core.optimize import SCIPY_LESS_0_12 if not SCIPY_LESS_0_12: slm = slr.optimize(static, moving) assert_equal(len(slm.matrix_history), slm.iterations) def test_similarity_real_bundles(): bundle_initial = fornix_streamlines() bundle_initial, shift = center_streamlines(bundle_initial) bundle = bundle_initial[:20] xgold = [0, 0, 10, 0, 0, 0, 1.5] mat = compose_matrix44(xgold) bundle2 = transform_streamlines(bundle_initial[:20], mat) metric = BundleMinDistanceMatrixMetric() x0 = np.array([0, 0, 0, 0, 0, 0, 1], 'f8') slr = StreamlineLinearRegistration(metric=metric, x0=x0, method='Powell', bounds=None, verbose=False) slm = slr.optimize(bundle, bundle2) new_bundle2 = slm.transform(bundle2) evaluate_convergence(bundle, new_bundle2) def test_affine_real_bundles(): bundle_initial = fornix_streamlines() bundle_initial, shift = center_streamlines(bundle_initial) bundle = bundle_initial[:20] xgold = [0, 4, 2, 0, 10, 10, 1.2, 1.1, 1., 0., 0.2, 0.] mat = compose_matrix44(xgold) bundle2 = transform_streamlines(bundle_initial[:20], mat) x0 = np.array([0, 0, 0, 0, 0, 0, 1., 1., 1., 0, 0, 0]) x = 25 bounds = [(-x, x), (-x, x), (-x, x), (-x, x), (-x, x), (-x, x), (0.1, 1.5), (0.1, 1.5), (0.1, 1.5), (-1, 1), (-1, 1), (-1, 1)] options = {'maxcor': 10, 'ftol': 1e-7, 'gtol': 1e-5, 'eps': 1e-8} metric = BundleMinDistanceMatrixMetric() slr = StreamlineLinearRegistration(metric=metric, x0=x0, method='L-BFGS-B', bounds=bounds, verbose=True, options=options) slm = slr.optimize(bundle, bundle2) new_bundle2 = slm.transform(bundle2) slr2 = StreamlineLinearRegistration(metric=metric, x0=x0, method='Powell', bounds=None, verbose=True, options=None) slm2 = slr2.optimize(bundle, new_bundle2) new_bundle2 = slm2.transform(new_bundle2) evaluate_convergence(bundle, new_bundle2) def test_vectorize_streamlines(): cingulum_bundles = two_cingulum_bundles() cb_subj1 = cingulum_bundles[0] cb_subj1 = set_number_of_points(cb_subj1, 10) cb_subj1_pts_no = np.array([s.shape[0] for s in cb_subj1]) assert_equal(np.all(cb_subj1_pts_no == 10), True) def test_x0_input(): for x0 in [6, 7, 12, "Rigid", 'rigid', "similarity", "Affine"]: StreamlineLinearRegistration(x0=x0) for x0 in [np.random.rand(6), np.random.rand(7), np.random.rand(12)]: StreamlineLinearRegistration(x0=x0) for x0 in [8, 20, "Whatever", np.random.rand(20), np.random.rand(20, 3)]: assert_raises(ValueError, StreamlineLinearRegistration, x0=x0) x0 = np.random.rand(4, 3) assert_raises(ValueError, StreamlineLinearRegistration, x0=x0) x0_6 = np.zeros(6) x0_7 = np.array([0, 0, 0, 0, 0, 0, 1.]) x0_12 = np.array([0, 0, 0, 0, 0, 0, 1., 1., 1., 0, 0, 0]) x0_s = [x0_6, x0_7, x0_12, x0_6, x0_7, x0_12] for i, x0 in enumerate([6, 7, 12, "Rigid", "similarity", "Affine"]): slr = StreamlineLinearRegistration(x0=x0) assert_equal(slr.x0, x0_s[i]) def test_compose_decompose_matrix44(): for i in range(20): x0 = np.random.rand(12) mat = compose_matrix44(x0[:6]) assert_array_almost_equal(x0[:6], decompose_matrix44(mat, size=6)) mat = compose_matrix44(x0[:7]) assert_array_almost_equal(x0[:7], decompose_matrix44(mat, size=7)) mat = compose_matrix44(x0[:12]) assert_array_almost_equal(x0[:12], decompose_matrix44(mat, size=12)) assert_raises(ValueError, decompose_matrix44, mat, 20) def test_cascade_of_optimizations_and_threading(): cingulum_bundles = two_cingulum_bundles() cb1 = cingulum_bundles[0] cb1 = set_number_of_points(cb1, 20) test_x0 = np.array([10, 4, 3, 0, 20, 10, 1.5, 1.5, 1.5, 0., 0.2, 0]) cb2 = transform_streamlines(cingulum_bundles[0], compose_matrix44(test_x0)) cb2 = set_number_of_points(cb2, 20) print('first rigid') slr = StreamlineLinearRegistration(x0=6, num_threads=1) slm = slr.optimize(cb1, cb2) print('then similarity') slr2 = StreamlineLinearRegistration(x0=7, num_threads=2) slm2 = slr2.optimize(cb1, cb2, slm.matrix) print('then affine') slr3 = StreamlineLinearRegistration(x0=12, options={'maxiter': 50}, num_threads=None) slm3 = slr3.optimize(cb1, cb2, slm2.matrix) assert_(slm2.fopt < slm.fopt) assert_(slm3.fopt < slm2.fopt) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/align/tests/test_sumsqdiff.py000066400000000000000000000615621263041327500213660ustar00rootroot00000000000000import numpy as np from .. import floating from .. import sumsqdiff as ssd from numpy.testing import (assert_equal, assert_almost_equal, assert_array_almost_equal, assert_allclose) def iterate_residual_field_ssd_2d(delta_field, sigmasq_field, grad, target, lambda_param, dfield): r""" This implementation is for testing purposes only. The problem with Gauss-Seidel iterations is that it depends on the order in which we iterate over the variables, so it is necessary to replicate the implementation under test. """ nrows, ncols = delta_field.shape if target is None: b = np.zeros_like(grad) b[...,0] = delta_field * grad[..., 0] b[...,1] = delta_field * grad[..., 1] else: b = target y = np.zeros(2) A = np.ndarray((2,2)) for r in range(nrows): for c in range(ncols): delta = delta_field[r, c] sigmasq = sigmasq_field[r, c] if sigmasq_field is not None else 1 #This has to be done inside the neste loops because #some d[...] may have been previously modified nn = 0 y[:] = 0 for (dRow, dCol) in [(-1, 0), (0, 1), (1, 0), (0, -1)]: dr = r + dRow if((dr < 0) or (dr >= nrows)): continue dc = c + dCol if((dc < 0) or (dc >= ncols)): continue nn += 1 y += dfield[dr, dc] if np.isinf(sigmasq): dfield[r, c] = y / nn else: tau = sigmasq * lambda_param * nn A = np.outer(grad[r, c], grad[r, c]) + tau * np.eye(2) det = np.linalg.det(A) if(det < 1e-9): nrm2 = np.sum(grad[r, c]**2) if(nrm2 < 1e-9): dfield[r, c,:] = 0 else: dfield[r, c] = b[r,c] / nrm2 else: y = b[r,c] + sigmasq * lambda_param * y dfield[r, c] = np.linalg.solve(A, y) def iterate_residual_field_ssd_3d(delta_field, sigmasq_field, grad, target, lambda_param, dfield): r""" This implementation is for testing purposes only. The problem with Gauss-Seidel iterations is that it depends on the order in which we iterate over the variables, so it is necessary to replicate the implementation under test. """ nslices, nrows, ncols = delta_field.shape if target is None: b = np.zeros_like(grad) for i in range(3): b[...,i] = delta_field * grad[..., i] else: b = target y = np.ndarray((3,)) for s in range(nslices): for r in range(nrows): for c in range(ncols): g = grad[s, r, c] delta = delta_field[s, r, c] sigmasq = sigmasq_field[s, r, c] if sigmasq_field is not None else 1 nn = 0 y[:] = 0 for dSlice, dRow, dCol in [(-1, 0, 0), (0, -1, 0), (0, 0, 1), (0, 1, 0), (0, 0, -1), (1, 0, 0)]: ds = s + dSlice if((ds < 0) or (ds >= nslices)): continue dr = r + dRow if((dr < 0) or (dr >= nrows)): continue dc = c + dCol if((dc < 0) or (dc >= ncols)): continue nn += 1 y += dfield[ds, dr, dc] if(np.isinf(sigmasq)): dfield[s, r, c] = y / nn elif(sigmasq < 1e-9): nrm2 = np.sum(g**2) if(nrm2 < 1e-9): dfield[s, r, c, :] = 0 else: dfield[s, r, c, :] = b[s, r, c] / nrm2 else: tau = sigmasq * lambda_param * nn y = b[s, r, c] + sigmasq * lambda_param * y G = np.outer(g, g) + tau*np.eye(3) try: dfield[s, r, c] = np.linalg.solve(G, y) except np.linalg.linalg.LinAlgError as err: nrm2 = np.sum(g**2) if(nrm2 < 1e-9): dfield[s, r, c, :] = 0 else: dfield[s, r, c] = b[s, r, c] / nrm2 def test_compute_residual_displacement_field_ssd_2d(): #Select arbitrary images' shape (same shape for both images) sh = (20, 10) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.ndarray(sh + (2,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None] * O X[...,1]= x_1[None, :] * O #Compute the gradient fields of F and G np.random.seed(5512751) grad_F = X - c_f grad_G = X - c_g Fnoise = np.random.ranf(np.size(grad_F)).reshape(grad_F.shape) * grad_F.max() * 0.1 Fnoise = Fnoise.astype(floating) grad_F += Fnoise Gnoise = np.random.ranf(np.size(grad_G)).reshape(grad_G.shape) * grad_G.max() * 0.1 Gnoise = Gnoise.astype(floating) grad_G += Gnoise #The squared norm of grad_G sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*sq_norm_grad_G Fnoise = np.random.ranf(np.size(F)).reshape(F.shape) * F.max() * 0.1 Fnoise = Fnoise.astype(floating) F += Fnoise Gnoise = np.random.ranf(np.size(G)).reshape(G.shape) * G.max() * 0.1 Gnoise = Gnoise.astype(floating) G += Gnoise delta_field = np.array(F - G, dtype = floating) sigma_field = np.random.randn(delta_field.size).reshape(delta_field.shape) sigma_field = sigma_field.astype(floating) #Select some pixels to force sigma_field = infinite inf_sigma = np.random.randint(0, 2, sh[0]*sh[1]) inf_sigma = inf_sigma.reshape(sh) sigma_field[inf_sigma == 1] = np.inf #Select an initial displacement field d = np.random.randn(grad_G.size).reshape(grad_G.shape).astype(floating) #d = np.zeros_like(grad_G, dtype=floating) lambda_param = 1.5 #Implementation under test iut = ssd.compute_residual_displacement_field_ssd_2d #In the first iteration we test the case target=None #In the second iteration, target is not None target = None rtol = 1e-9 atol = 1e-4 for it in range(2): # Sum of differences with the neighbors s = np.zeros_like(d, dtype = np.float64) s[:,:-1] += d[:,:-1] - d[:,1:]#right s[:,1:] += d[:,1:] - d[:,:-1]#left s[:-1,:] += d[:-1,:] - d[1:,:]#down s[1:,:] += d[1:,:] - d[:-1,:]#up s *= lambda_param # Dot product of displacement and gradient dp = d[...,0]*grad_G[...,0] + \ d[...,1]*grad_G[...,1] dp = dp.astype(np.float64) # Compute expected residual expected = None if target is None: expected = np.zeros_like(grad_G) expected[...,0] = delta_field*grad_G[...,0] expected[...,1] = delta_field*grad_G[...,1] else: expected = target.copy().astype(np.float64) # Expected residuals when sigma != infinte expected[inf_sigma==0,0] -= grad_G[inf_sigma==0, 0] * dp[inf_sigma==0] + \ sigma_field[inf_sigma==0] * s[inf_sigma==0, 0] expected[inf_sigma==0,1] -= grad_G[inf_sigma==0, 1] * dp[inf_sigma==0] + \ sigma_field[inf_sigma==0] * s[inf_sigma==0, 1] # Expected residuals when sigma == infinte expected[inf_sigma==1] = -1.0 * s[inf_sigma==1] # Test residual field computation starting with residual = None actual = iut(delta_field, sigma_field, grad_G.astype(floating), target, lambda_param, d, None) assert_allclose(actual, expected, rtol = rtol, atol = atol) actual = np.ndarray(actual.shape, dtype=floating) #destroy previous result # Test residual field computation starting with residual is not None iut(delta_field, sigma_field, grad_G.astype(floating), target, lambda_param, d, actual) assert_allclose(actual, expected, rtol = rtol, atol = atol) # Set target for next iteration target = actual # Test Gauss-Seidel step with residual=None and residual=target for residual in [None, target]: expected = d.copy() iterate_residual_field_ssd_2d(delta_field, sigma_field, grad_G.astype(floating), residual, lambda_param, expected) actual = d.copy() ssd.iterate_residual_displacement_field_ssd_2d(delta_field, sigma_field, grad_G.astype(floating), residual, lambda_param, actual) assert_allclose(actual, expected, rtol = rtol, atol = atol) def test_compute_residual_displacement_field_ssd_3d(): #Select arbitrary images' shape (same shape for both images) sh = (20, 15, 10) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.ndarray(sh + (3,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None, None] * O X[...,1]= x_1[None, :, None] * O X[...,2]= x_2[None, None, :] * O #Compute the gradient fields of F and G np.random.seed(9223102) grad_F = X - c_f grad_G = X - c_g Fnoise = np.random.ranf(np.size(grad_F)).reshape(grad_F.shape) * grad_F.max() * 0.1 Fnoise = Fnoise.astype(floating) grad_F += Fnoise Gnoise = np.random.ranf(np.size(grad_G)).reshape(grad_G.shape) * grad_G.max() * 0.1 Gnoise = Gnoise.astype(floating) grad_G += Gnoise #The squared norm of grad_G sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*sq_norm_grad_G Fnoise = np.random.ranf(np.size(F)).reshape(F.shape) * F.max() * 0.1 Fnoise = Fnoise.astype(floating) F += Fnoise Gnoise = np.random.ranf(np.size(G)).reshape(G.shape) * G.max() * 0.1 Gnoise = Gnoise.astype(floating) G += Gnoise delta_field = np.array(F - G, dtype = floating) sigma_field = np.random.randn(delta_field.size).reshape(delta_field.shape) sigma_field = sigma_field.astype(floating) #Select some pixels to force sigma_field = infinite inf_sigma = np.random.randint(0, 2, sh[0]*sh[1]*sh[2]) inf_sigma = inf_sigma.reshape(sh) sigma_field[inf_sigma == 1] = np.inf #Select an initial displacement field d = np.random.randn(grad_G.size).reshape(grad_G.shape).astype(floating) #d = np.zeros_like(grad_G, dtype=floating) lambda_param = 1.5 #Implementation under test iut = ssd.compute_residual_displacement_field_ssd_3d #In the first iteration we test the case target=None #In the second iteration, target is not None target = None rtol = 1e-9 atol = 1e-4 for it in range(2): # Sum of differences with the neighbors s = np.zeros_like(d, dtype = np.float64) s[:,:,:-1] += d[:,:,:-1] - d[:,:,1:]#right s[:,:,1:] += d[:,:,1:] - d[:,:,:-1]#left s[:,:-1,:] += d[:,:-1,:] - d[:,1:,:]#down s[:,1:,:] += d[:,1:,:] - d[:,:-1,:]#up s[:-1,:,:] += d[:-1,:,:] - d[1:,:,:]#below s[1:,:,:] += d[1:,:,:] - d[:-1,:,:]#above s *= lambda_param # Dot product of displacement and gradient dp = d[...,0]*grad_G[...,0] + \ d[...,1]*grad_G[...,1] + \ d[...,2]*grad_G[...,2] # Compute expected residual expected = None if target is None: expected = np.zeros_like(grad_G) for i in range(3): expected[...,i] = delta_field*grad_G[...,i] else: expected = target.copy().astype(np.float64) # Expected residuals when sigma != infinte for i in range(3): expected[inf_sigma==0,i] -= grad_G[inf_sigma==0, i] * dp[inf_sigma==0] + \ sigma_field[inf_sigma==0] * s[inf_sigma==0, i] # Expected residuals when sigma == infinte expected[inf_sigma==1] = -1.0 * s[inf_sigma==1] # Test residual field computation starting with residual = None actual = iut(delta_field, sigma_field, grad_G.astype(floating), target, lambda_param, d, None) assert_allclose(actual, expected, rtol = rtol, atol = atol) actual = np.ndarray(actual.shape, dtype=floating) #destroy previous result # Test residual field computation starting with residual is not None iut(delta_field, sigma_field, grad_G.astype(floating), target, lambda_param, d, actual) assert_allclose(actual, expected, rtol = rtol, atol = atol) # Set target for next iteration target = actual # Test Gauss-Seidel step with residual=None and residual=target for residual in [None, target]: expected = d.copy() iterate_residual_field_ssd_3d(delta_field, sigma_field, grad_G.astype(floating), residual, lambda_param, expected) actual = d.copy() ssd.iterate_residual_displacement_field_ssd_3d(delta_field, sigma_field, grad_G.astype(floating), residual, lambda_param, actual) # the numpy linear solver may differ from our custom implementation # we need to increase the tolerance a bit assert_allclose(actual, expected, rtol = rtol, atol = atol*5) def test_solve_2d_symmetric_positive_definite(): # Select some arbitrary right-hand sides bs = [np.array([1.1, 2.2]), np.array([1e-2, 3e-3]), np.array([1e2, 1e3]), np.array([1e-5, 1e5])] # Select arbitrary symmetric positive-definite matrices As = [] # Identity As.append(np.array([1.0, 0.0, 1.0])) # Small determinant As.append(np.array([1e-3, 1e-4, 1e-3])) # Large determinant As.append(np.array([1e6, 1e4, 1e6])) for A in As: AA = np.array([[A[0], A[1]], [A[1], A[2]]]) det = np.linalg.det(AA) for b in bs: expected = np.linalg.solve(AA, b) actual = ssd.solve_2d_symmetric_positive_definite(A, b, det) assert_allclose(expected, actual, rtol = 1e-9, atol = 1e-9) def test_solve_3d_symmetric_positive_definite(): # Select some arbitrary right-hand sides bs = [np.array([1.1, 2.2, 3.3]), np.array([1e-2, 3e-3, 2e-2]), np.array([1e2, 1e3, 5e-2]), np.array([1e-5, 1e5, 1.0])] # Select arbitrary taus taus = [0.0, 1.0, 1e-4, 1e5] # Select arbitrary matrices gs = [] # diagonal gs.append(np.array([0.0, 0.0, 0.0])) # canonical basis gs.append(np.array([1.0, 0.0, 0.0])) gs.append(np.array([0.0, 1.0, 0.0])) gs.append(np.array([0.0, 0.0, 1.0])) # other gs.append(np.array([1.0, 0.5, 0.0])) gs.append(np.array([0.0, 0.2, 0.1])) gs.append(np.array([0.3, 0.0, 0.9])) for g in gs: A = g[:,None]*g[None,:] for tau in taus: AA = A + tau * np.eye(3) for b in bs: actual, is_singular = ssd.solve_3d_symmetric_positive_definite( g, b, tau) if tau == 0.0: assert_equal(is_singular, 1) else: expected = np.linalg.solve(AA, b) assert_allclose(expected, actual, rtol = 1e-9, atol = 1e-9) def test_compute_energy_ssd_2d(): sh = (32, 32) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.ndarray(sh + (2,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None] * O X[...,1]= x_1[None, :] * O #Compute the gradient fields of F and G grad_F = X - c_f grad_G = X - c_g #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*np.sum(grad_G**2,-1) # Note: this should include the energy corresponding to the # regularization term, but it is discarded in ANTS (they just # consider the data term, which is not the objective function # being optimized). This test case should be updated after # further investigation expected = ((F - G)**2).sum() actual = ssd.compute_energy_ssd_2d(np.array(F-G, dtype = floating)) assert_almost_equal(expected, actual) def test_compute_energy_ssd_3d(): sh = (32, 32, 32) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.ndarray(sh + (3,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None, None] * O X[...,1]= x_1[None, :, None] * O X[...,2]= x_2[None, None, :] * O #Compute the gradient fields of F and G grad_F = X - c_f grad_G = X - c_g #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*np.sum(grad_G**2,-1) # Note: this should include the energy corresponding to the # regularization term, but it is discarded in ANTS (they just # consider the data term, which is not the objective function # being optimized). This test case should be updated after # further investigating expected = ((F - G)**2).sum() actual = ssd.compute_energy_ssd_3d(np.array(F-G, dtype = floating)) assert_almost_equal(expected, actual) def test_compute_ssd_demons_step_2d(): r""" Compares the output of the demons step in 2d against an analytical step. The fixed image is given by $F(x) = \frac{1}{2}||x - c_f||^2$, the moving image is given by $G(x) = \frac{1}{2}||x - c_g||^2$, $x, c_f, c_g \in R^{2}$ References ---------- [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ #Select arbitrary images' shape (same shape for both images) sh = (20, 10) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.ndarray(sh + (2,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None] * O X[...,1]= x_1[None, :] * O #Compute the gradient fields of F and G np.random.seed(1137271) grad_F = X - c_f grad_G = X - c_g Fnoise = np.random.ranf(np.size(grad_F)).reshape(grad_F.shape) * grad_F.max() * 0.1 Fnoise = Fnoise.astype(floating) grad_F += Fnoise Gnoise = np.random.ranf(np.size(grad_G)).reshape(grad_G.shape) * grad_G.max() * 0.1 Gnoise = Gnoise.astype(floating) grad_G += Gnoise #The squared norm of grad_G to be used later sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*sq_norm_grad_G Fnoise = np.random.ranf(np.size(F)).reshape(F.shape) * F.max() * 0.1 Fnoise = Fnoise.astype(floating) F += Fnoise Gnoise = np.random.ranf(np.size(G)).reshape(G.shape) * G.max() * 0.1 Gnoise = Gnoise.astype(floating) G += Gnoise delta_field = np.array(G - F, dtype = floating) #Select some pixels to force gradient = 0 and F=G random_labels = np.random.randint(0, 2, sh[0]*sh[1]) random_labels = random_labels.reshape(sh) F[random_labels == 0] = G[random_labels == 0] delta_field[random_labels == 0] = 0 grad_G[random_labels == 0, ...] = 0 sq_norm_grad_G[random_labels == 0, ...] = 0 #Set arbitrary values for $\sigma_i$ (eq. 4 in [Vercauteren09]) #The original Demons algorithm used simply |F(x) - G(x)| as an #estimator, so let's use it as well sigma_i_sq = (F - G)**2 #Now select arbitrary parameters for $\sigma_x$ (eq 4 in [Vercauteren09]) for sigma_x_sq in [0.01, 1.5, 4.2]: #Directly compute the demons step according to eq. 4 in [Vercauteren09] num = (sigma_x_sq * (F - G))[random_labels == 1] den = (sigma_x_sq * sq_norm_grad_G + sigma_i_sq)[random_labels == 1] expected = (-1 * np.array(grad_G)) #This is $J^{P}$ in eq. 4 [Vercauteren09] expected[random_labels == 1, 0] *= num / den expected[random_labels == 1, 1] *= num / den expected[random_labels == 0, ...] = 0 #Now compute it using the implementation under test actual = np.empty_like(expected, dtype=floating) ssd.compute_ssd_demons_step_2d(delta_field, np.array(grad_G, dtype=floating), sigma_x_sq, actual) assert_array_almost_equal(actual, expected) def test_compute_ssd_demons_step_3d(): r""" Compares the output of the demons step in 3d against an analytical step. The fixed image is given by $F(x) = \frac{1}{2}||x - c_f||^2$, the moving image is given by $G(x) = \frac{1}{2}||x - c_g||^2$, $x, c_f, c_g \in R^{3}$ References ---------- [Vercauteren09] Vercauteren, T., Pennec, X., Perchant, A., & Ayache, N. (2009). Diffeomorphic demons: efficient non-parametric image registration. NeuroImage, 45(1 Suppl), S61-72. doi:10.1016/j.neuroimage.2008.10.040 """ #Select arbitrary images' shape (same shape for both images) sh = (20, 15, 10) #Select arbitrary centers c_f = np.asarray(sh)/2 c_g = c_f + 0.5 #Compute the identity vector field I(x) = x in R^2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.ndarray(sh + (3,), dtype = np.float64) O = np.ones(sh) X[...,0]= x_0[:, None, None] * O X[...,1]= x_1[None, :, None] * O X[...,2]= x_2[None, None, :] * O #Compute the gradient fields of F and G np.random.seed(1137271) grad_F = X - c_f grad_G = X - c_g Fnoise = np.random.ranf(np.size(grad_F)).reshape(grad_F.shape) * grad_F.max() * 0.1 Fnoise = Fnoise.astype(floating) grad_F += Fnoise Gnoise = np.random.ranf(np.size(grad_G)).reshape(grad_G.shape) * grad_G.max() * 0.1 Gnoise = Gnoise.astype(floating) grad_G += Gnoise #The squared norm of grad_G to be used later sq_norm_grad_G = np.sum(grad_G**2,-1) #Compute F and G F = 0.5*np.sum(grad_F**2,-1) G = 0.5*sq_norm_grad_G Fnoise = np.random.ranf(np.size(F)).reshape(F.shape) * F.max() * 0.1 Fnoise = Fnoise.astype(floating) F += Fnoise Gnoise = np.random.ranf(np.size(G)).reshape(G.shape) * G.max() * 0.1 Gnoise = Gnoise.astype(floating) G += Gnoise delta_field = np.array(G - F, dtype = floating) #Select some pixels to force gradient = 0 and F=G random_labels = np.random.randint(0, 2, sh[0]*sh[1]*sh[2]) random_labels = random_labels.reshape(sh) F[random_labels == 0] = G[random_labels == 0] delta_field[random_labels == 0] = 0 grad_G[random_labels == 0, ...] = 0 sq_norm_grad_G[random_labels == 0, ...] = 0 #Set arbitrary values for $\sigma_i$ (eq. 4 in [Vercauteren09]) #The original Demons algorithm used simply |F(x) - G(x)| as an #estimator, so let's use it as well sigma_i_sq = (F - G)**2 #Now select arbitrary parameters for $\sigma_x$ (eq 4 in [Vercauteren09]) for sigma_x_sq in [0.01, 1.5, 4.2]: #Directly compute the demons step according to eq. 4 in [Vercauteren09] num = (sigma_x_sq * (F - G))[random_labels == 1] den = (sigma_x_sq * sq_norm_grad_G + sigma_i_sq)[random_labels == 1] expected = (-1 * np.array(grad_G)) #This is $J^{P}$ in eq. 4 [Vercauteren09] expected[random_labels == 1, 0] *= num / den expected[random_labels == 1, 1] *= num / den expected[random_labels == 1, 2] *= num / den expected[random_labels == 0, ...] = 0 #Now compute it using the implementation under test actual = np.empty_like(expected, dtype=floating) ssd.compute_ssd_demons_step_3d(delta_field, np.array(grad_G, dtype = floating), sigma_x_sq, actual) assert_array_almost_equal(actual, expected) if __name__=='__main__': test_compute_residual_displacement_field_ssd_2d() test_compute_residual_displacement_field_ssd_3d() test_compute_energy_ssd_2d() test_compute_energy_ssd_3d() test_compute_ssd_demons_step_2d() test_compute_ssd_demons_step_3d() dipy-0.10.1/dipy/align/tests/test_transforms.py000066400000000000000000000212441263041327500215540ustar00rootroot00000000000000from ..transforms import regtransforms, Transform import numpy as np from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_almost_equal, assert_equal, assert_raises) def test_number_of_parameters(): expected_params = {('TRANSLATION', 2) : 2, ('TRANSLATION', 3) : 3, ('ROTATION', 2) : 1, ('ROTATION', 3) : 3, ('RIGID', 2) : 3, ('RIGID', 3) : 6, ('SCALING', 2) : 1, ('SCALING', 3) : 1, ('AFFINE', 2) : 6, ('AFFINE', 3) : 12} for ttype, transform in regtransforms.items(): assert_equal(transform.get_number_of_parameters(), expected_params[ttype]) def test_param_to_matrix_2d(): rng = np.random.RandomState() # Test translation matrix 2D transform = regtransforms[('TRANSLATION', 2)] dx, dy = rng.uniform(size=(2,)) theta = np.array([dx, dy]) expected = np.array([[1, 0, dx], [0, 1, dy], [0, 0, 1]]) actual = transform.param_to_matrix(theta) assert_array_equal(actual, expected) # Test rotation matrix 2D transform = regtransforms[('ROTATION', 2)] angle = rng.uniform() theta = np.array([angle]) ct = np.cos(angle) st = np.sin(angle) expected = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]]) actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Test rigid matrix 2D transform = regtransforms[('RIGID', 2)] angle, dx, dy = rng.uniform(size=(3,)) theta = np.array([angle, dx, dy]) ct = np.cos(angle) st = np.sin(angle) expected = np.array([[ct, -st, dx], [st, ct, dy], [0, 0, 1]]) actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Test rigid matrix 2D transform = regtransforms[('SCALING', 2)] factor = rng.uniform() theta = np.array([factor]) expected = np.array([[factor, 0, 0], [0, factor, 0], [0, 0, 1]]) actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Test affine 2D transform = regtransforms[('AFFINE', 2)] theta = rng.uniform(size=(6,)) expected = np.eye(3) expected[0,:] = theta[:3] expected[1,:] = theta[3:6] actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Verify that ValueError is raised if incorrect number of parameters for transform in regtransforms.values(): n = transform.get_number_of_parameters() # Set incorrect number of parameters theta = np.zeros(n + 1, dtype=np.float64) assert_raises(ValueError, transform.param_to_matrix, theta) def test_param_to_matrix_3d(): rng = np.random.RandomState() # Test translation matrix 3D transform = regtransforms[('TRANSLATION', 3)] dx, dy, dz = rng.uniform(size=(3,)) theta = np.array([dx, dy, dz]) expected = np.array([[1, 0, 0, dx], [0, 1, 0, dy], [0, 0, 1, dz], [0, 0, 0, 1]]) actual = transform.param_to_matrix(theta) assert_array_equal(actual, expected) # Test rotation matrix 3D transform = regtransforms[('ROTATION', 3)] theta = rng.uniform(size=(3,)) ca = np.cos(theta[0]) sa = np.sin(theta[0]) cb = np.cos(theta[1]) sb = np.sin(theta[1]) cc = np.cos(theta[2]) sc = np.sin(theta[2]) X = np.array([[1, 0, 0 ], [0, ca, -sa], [0, sa, ca]]) Y = np.array([[cb, 0, sb], [0, 1, 0], [-sb, 0, cb]]) Z = np.array([[cc, -sc, 0], [sc, cc, 0], [0 , 0, 1]]) R = Z.dot(X.dot(Y)) # Apply in order: Y, X, Z (Y goes to the right) expected = np.eye(4) expected[:3, :3] = R[:3, :3] actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Test rigid matrix 3D transform = regtransforms[('RIGID', 3)] theta = rng.uniform(size=(6,)) ca = np.cos(theta[0]) sa = np.sin(theta[0]) cb = np.cos(theta[1]) sb = np.sin(theta[1]) cc = np.cos(theta[2]) sc = np.sin(theta[2]) X = np.array([[1, 0, 0 ], [0, ca, -sa], [0, sa, ca]]) Y = np.array([[cb, 0, sb], [0, 1, 0], [-sb, 0, cb]]) Z = np.array([[cc, -sc, 0], [sc, cc, 0], [0 , 0, 1]]) R = Z.dot(X.dot(Y)) # Apply in order: Y, X, Z (Y goes to the right) expected = np.eye(4) expected[:3, :3] = R[:3, :3] expected[:3, 3] = theta[3:6] actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Test scaling matrix 3D transform = regtransforms[('SCALING', 3)] factor = rng.uniform() theta = np.array([factor]) expected = np.array([[factor, 0, 0, 0], [0, factor, 0, 0], [0, 0, factor, 0], [0, 0, 0, 1]]) actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Test affine 3D transform = regtransforms[('AFFINE', 3)] theta = rng.uniform(size=(12,)) expected = np.eye(4) expected[0,:] = theta[:4] expected[1,:] = theta[4:8] expected[2,:] = theta[8:12] actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) # Verify that ValueError is raised if incorrect number of parameters for transform in regtransforms.values(): n = transform.get_number_of_parameters() # Set incorrect number of parameters theta = np.zeros(n + 1, dtype=np.float64) assert_raises(ValueError, transform.param_to_matrix, theta) def test_identity_parameters(): for transform in regtransforms.values(): n = transform.get_number_of_parameters() dim = transform.get_dim() theta = transform.get_identity_parameters() expected = np.eye(dim + 1) actual = transform.param_to_matrix(theta) assert_array_almost_equal(actual, expected) def test_jacobian_functions(): rng = np.random.RandomState() #Compare the analytical Jacobians with their numerical approximations h = 1e-8 nsamples = 50 for transform in regtransforms.values(): n = transform.get_number_of_parameters() dim = transform.get_dim() expected = np.empty((dim, n)) theta = rng.uniform(size=(n,)) T = transform.param_to_matrix(theta) for j in range(nsamples): x = 255 * (rng.uniform(size=(dim,)) - 0.5) actual = transform.jacobian(theta, x) # Approximate with finite differences x_hom = np.ones(dim + 1) x_hom[:dim] = x[:] for i in range(n): dtheta = theta.copy() dtheta[i] += h dT = np.array(transform.param_to_matrix(dtheta)) g = (dT - T).dot(x_hom) / h expected[:,i] = g[:dim] assert_array_almost_equal(actual, expected, decimal=5) # Test ValueError is raised when theta parameter doesn't have the right length for transform in regtransforms.values(): n = transform.get_number_of_parameters() # Wrong number of parameters theta = np.zeros(n + 1) x = np.zeros(dim) assert_raises(ValueError, transform.jacobian, theta, x) def test_invalid_transform(): # Note: users should not attempt to use the base class Transform: # they should get an instance of one of its derived classes from the # regtransforms dictionary (the base class is not contained there) # If for some reason the user instanciates it and attempts to use it, # however, it will raise exceptions when attempting to retrieve its # jacobian, identity parameters or its matrix representation. It will # return -1 if queried about its dimension or number of parameters transform = Transform() theta = np.ndarray(3) x = np.ndarray(3) assert_raises(ValueError, transform.jacobian, theta, x) assert_raises(ValueError, transform.get_identity_parameters) assert_raises(ValueError, transform.param_to_matrix, theta) expected = -1 actual = transform.get_number_of_parameters() assert_equal(actual, expected) actual = transform.get_dim() assert_equal(actual, expected) if __name__=='__main__': test_number_of_parameters() test_jacobian_functions() test_param_to_matrix_2d() test_param_to_matrix_3d() test_identity_parameters() test_invalid_transform() dipy-0.10.1/dipy/align/tests/test_vector_fields.py000066400000000000000000002061251263041327500222110ustar00rootroot00000000000000import numpy as np from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_almost_equal, assert_equal, assert_raises) from scipy.ndimage.interpolation import map_coordinates from nibabel.affines import apply_affine, from_matvec from ...core import geometry from .. import floating from .. import imwarp from .. import vector_fields as vfu from ..transforms import regtransforms from ..parzenhist import sample_domain_regular def test_random_displacement_field_2d(): np.random.seed(3921116) from_shape = (25, 32) to_shape = (33, 29) # Create grid coordinates x_0 = np.asarray(range(from_shape[0])) x_1 = np.asarray(range(from_shape[1])) X = np.empty((3,) + from_shape, dtype=np.float64) O = np.ones(from_shape) X[0, ...] = x_0[:, None] * O X[1, ...] = x_1[None, :] * O X[2, ...] = 1 # Create an arbitrary image-to-space transform t = 0.15 # translation factor trans = np.array([[1, 0, -t*from_shape[0]], [0, 1, -t*from_shape[1]], [0, 0, 1]]) trans_inv = np.linalg.inv(trans) for theta in [-1 * np.pi / 6.0, 0.0, np.pi / 5.0]: # rotation angle for s in [0.83, 1.3, 2.07]: # scale ct = np.cos(theta) st = np.sin(theta) rot = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]]) scale = np.array([[1*s, 0, 0], [0, 1*s, 0], [0, 0, 1]]) from_grid2world = trans_inv.dot(scale.dot(rot.dot(trans))) to_grid2world = from_grid2world.dot(scale) to_world2grid = np.linalg.inv(to_grid2world) field, assignment = vfu.create_random_displacement_2d( np.array(from_shape, dtype=np.int32), from_grid2world, np.array(to_shape, dtype=np.int32), to_grid2world) field = np.array(field, dtype=floating) assignment = np.array(assignment) # Verify the assignments are inside the requested region assert_equal(0, (assignment < 0).sum()) for i in range(2): assert_equal(0, (assignment[..., i] >= to_shape[i]).sum()) # Compute the warping coordinates (see warp_2d documentation) Y = np.apply_along_axis(from_grid2world.dot, 0, X)[0:2, ...] Z = np.zeros_like(X) Z[0, ...] = Y[0, ...] + field[..., 0] Z[1, ...] = Y[1, ...] + field[..., 1] Z[2, ...] = 1 W = np.apply_along_axis(to_world2grid.dot, 0, Z)[0:2, ...] # Verify the claimed assignments are correct assert_array_almost_equal(W[0, ...], assignment[..., 0], 5) assert_array_almost_equal(W[1, ...], assignment[..., 1], 5) # Test exception is raised when the affine transform matrix is not valid valid = np.zeros((2, 3), dtype=np.float64) invalid = np.zeros((2, 2), dtype=np.float64) shape = np.array(from_shape, dtype=np.int32) assert_raises(ValueError, vfu.create_random_displacement_2d, shape, invalid, shape, valid) assert_raises(ValueError, vfu.create_random_displacement_2d, shape, valid, shape, invalid) def test_random_displacement_field_3d(): np.random.seed(7127562) from_shape = (25, 32, 31) to_shape = (33, 29, 35) # Create grid coordinates x_0 = np.asarray(range(from_shape[0])) x_1 = np.asarray(range(from_shape[1])) x_2 = np.asarray(range(from_shape[2])) X = np.empty((4,) + from_shape, dtype=np.float64) O = np.ones(from_shape) X[0, ...] = x_0[:, None, None] * O X[1, ...] = x_1[None, :, None] * O X[2, ...] = x_2[None, None, :] * O X[3, ...] = 1 # Select an arbitrary rotation axis axis = np.array([.5, 2.0, 1.5]) # Create an arbitrary image-to-space transform t = 0.15 # translation factor trans = np.array([[1, 0, 0, -t*from_shape[0]], [0, 1, 0, -t*from_shape[1]], [0, 0, 1, -t*from_shape[2]], [0, 0, 0, 1]]) trans_inv = np.linalg.inv(trans) for theta in [-1 * np.pi / 6.0, 0.0, np.pi / 5.0]: # rotation angle for s in [0.83, 1.3, 2.07]: # scale rot = np.zeros(shape=(4, 4)) rot[:3, :3] = geometry.rodrigues_axis_rotation(axis, theta) rot[3, 3] = 1.0 scale = np.array([[1*s, 0, 0, 0], [0, 1*s, 0, 0], [0, 0, 1*s, 0], [0, 0, 0, 1]]) from_grid2world = trans_inv.dot(scale.dot(rot.dot(trans))) to_grid2world = from_grid2world.dot(scale) to_world2grid = np.linalg.inv(to_grid2world) field, assignment = vfu.create_random_displacement_3d( np.array(from_shape, dtype=np.int32), from_grid2world, np.array(to_shape, dtype=np.int32), to_grid2world) field = np.array(field, dtype=floating) assignment = np.array(assignment) # Verify the assignments are inside the requested region assert_equal(0, (assignment < 0).sum()) for i in range(3): assert_equal(0, (assignment[..., i] >= to_shape[i]).sum()) # Compute the warping coordinates (see warp_2d documentation) Y = np.apply_along_axis(from_grid2world.dot, 0, X)[0:3, ...] Z = np.zeros_like(X) Z[0, ...] = Y[0, ...] + field[..., 0] Z[1, ...] = Y[1, ...] + field[..., 1] Z[2, ...] = Y[2, ...] + field[..., 2] Z[3, ...] = 1 W = np.apply_along_axis(to_world2grid.dot, 0, Z)[0:3, ...] # Verify the claimed assignments are correct assert_array_almost_equal(W[0, ...], assignment[..., 0], 5) assert_array_almost_equal(W[1, ...], assignment[..., 1], 5) assert_array_almost_equal(W[2, ...], assignment[..., 2], 5) # Test exception is raised when the affine transform matrix is not valid valid = np.zeros((3, 4), dtype=np.float64) invalid = np.zeros((3, 3), dtype=np.float64) shape = np.array(from_shape, dtype=np.int32) assert_raises(ValueError, vfu.create_random_displacement_2d, shape, invalid, shape, valid) assert_raises(ValueError, vfu.create_random_displacement_2d, shape, valid, shape, invalid) def test_harmonic_fields_2d(): nrows = 64 ncols = 67 mid_row = nrows//2 mid_col = ncols//2 expected_d = np.empty(shape=(nrows, ncols, 2)) expected_d_inv = np.empty(shape=(nrows, ncols, 2)) for b in [0.1, 0.3, 0.7]: for m in [2, 4, 7]: for i in range(nrows): for j in range(ncols): ii = i - mid_row jj = j - mid_col theta = np.arctan2(ii, jj) expected_d[i, j, 0] =\ ii * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) expected_d[i, j, 1] =\ jj * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) expected_d_inv[i, j, 0] = b * np.cos(m * theta) * ii expected_d_inv[i, j, 1] = b * np.cos(m * theta) * jj actual_d, actual_d_inv =\ vfu.create_harmonic_fields_2d(nrows, ncols, b, m) assert_array_almost_equal(expected_d, actual_d) assert_array_almost_equal(expected_d_inv, expected_d_inv) def test_harmonic_fields_3d(): nslices = 25 nrows = 34 ncols = 37 mid_slice = nslices//2 mid_row = nrows//2 mid_col = ncols//2 expected_d = np.empty(shape=(nslices, nrows, ncols, 3)) expected_d_inv = np.empty(shape=(nslices, nrows, ncols, 3)) for b in [0.3, 0.7]: for m in [2, 5]: for k in range(nslices): for i in range(nrows): for j in range(ncols): kk = k - mid_slice ii = i - mid_row jj = j - mid_col theta = np.arctan2(ii, jj) expected_d[k, i, j, 0] =\ kk * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) expected_d[k, i, j, 1] =\ ii * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) expected_d[k, i, j, 2] =\ jj * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) expected_d_inv[k, i, j, 0] = b * np.cos(m * theta) * kk expected_d_inv[k, i, j, 1] = b * np.cos(m * theta) * ii expected_d_inv[k, i, j, 2] = b * np.cos(m * theta) * jj actual_d, actual_d_inv =\ vfu.create_harmonic_fields_3d(nslices, nrows, ncols, b, m) assert_array_almost_equal(expected_d, actual_d) assert_array_almost_equal(expected_d_inv, expected_d_inv) def test_circle(): sh = (64, 61) cr = sh[0]//2 cc = sh[1]//2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.empty((2,) + sh, dtype=np.float64) O = np.ones(sh) X[0, ...] = x_0[:, None] * O - cr X[1, ...] = x_1[None, :] * O - cc nrm = np.sqrt(np.sum(X ** 2, axis=0)) for radius in [0, 7, 17, 32]: expected = nrm <= radius actual = vfu.create_circle(sh[0], sh[1], radius) assert_array_almost_equal(actual, expected) def test_sphere(): sh = (64, 61, 57) cs = sh[0]//2 cr = sh[1]//2 cc = sh[2]//2 x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.empty((3,) + sh, dtype=np.float64) O = np.ones(sh) X[0, ...] = x_0[:, None, None] * O - cs X[1, ...] = x_1[None, :, None] * O - cr X[2, ...] = x_2[None, None, :] * O - cc nrm = np.sqrt(np.sum(X ** 2, axis=0)) for radius in [0, 7, 17, 32]: expected = nrm <= radius actual = vfu.create_sphere(sh[0], sh[1], sh[2], radius) assert_array_almost_equal(actual, expected) def test_interpolate_scalar_2d(): np.random.seed(5324989) sz = 64 target_shape = (sz, sz) image = np.empty(target_shape, dtype=floating) image[...] = np.random.randint(0, 10, np.size(image)).reshape(target_shape) extended_image = np.zeros((sz+2, sz+2), dtype=floating) extended_image[1:sz+1, 1:sz+1] = image[...] # Select some coordinates inside the image to interpolate at nsamples = 200 locations =\ np.random.ranf(2 * nsamples).reshape((nsamples, 2)) * (sz + 2) - 1.0 extended_locations = locations + 1.0 # shift coordinates one voxel # Call the implementation under test interp, inside = vfu.interpolate_scalar_2d(image, locations) # Call the reference implementation expected = map_coordinates(extended_image, extended_locations.transpose(), order=1) assert_array_almost_equal(expected, interp) # Test interpolation stability along the boundary epsilon = 5e-8 for k in range(2): for offset in [0, sz-1]: delta = ((np.random.ranf(nsamples) * 2) - 1) * epsilon locations[:, k] = delta + offset locations[:, (k + 1) % 2] = np.random.ranf(nsamples) * (sz - 1) interp, inside = vfu.interpolate_scalar_2d(image, locations) locations[:, k] = offset expected = map_coordinates(image, locations.transpose(), order=1) assert_array_almost_equal(expected, interp) if offset == 0: expected_flag = np.array(delta >= 0, dtype=np.int32) else: expected_flag = np.array(delta <= 0, dtype=np.int32) assert_array_almost_equal(expected_flag, inside) def test_interpolate_scalar_nn_2d(): np.random.seed(1924781) sz = 64 target_shape = (sz, sz) image = np.empty(target_shape, dtype=floating) image[...] = np.random.randint(0, 10, np.size(image)).reshape(target_shape) # Select some coordinates to interpolate at nsamples = 200 locations =\ np.random.ranf(2 * nsamples).reshape((nsamples, 2)) * (sz + 2) - 1.0 # Call the implementation under test interp, inside = vfu.interpolate_scalar_nn_2d(image, locations) # Call the reference implementation expected = map_coordinates(image, locations.transpose(), order=0) assert_array_almost_equal(expected, interp) # Test the 'inside' flag for i in range(nsamples): if (locations[i, 0] < 0 or locations[i, 0] > (sz - 1)) or\ (locations[i, 1] < 0 or locations[i, 1] > (sz - 1)): assert_equal(inside[i], 0) else: assert_equal(inside[i], 1) def test_interpolate_scalar_nn_3d(): np.random.seed(3121121) sz = 64 target_shape = (sz, sz, sz) image = np.empty(target_shape, dtype=floating) image[...] = np.random.randint(0, 10, np.size(image)).reshape(target_shape) # Select some coordinates to interpolate at nsamples = 200 locations =\ np.random.ranf(3 * nsamples).reshape((nsamples, 3)) * (sz + 2) - 1.0 # Call the implementation under test interp, inside = vfu.interpolate_scalar_nn_3d(image, locations) # Call the reference implementation expected = map_coordinates(image, locations.transpose(), order=0) assert_array_almost_equal(expected, interp) # Test the 'inside' flag for i in range(nsamples): expected_inside = 1 for axis in range(3): if (locations[i, axis] < 0 or locations[i, axis] > (sz - 1)): expected_inside = 0 break assert_equal(inside[i], expected_inside) def test_interpolate_scalar_3d(): np.random.seed(9216326) sz = 64 target_shape = (sz, sz, sz) image = np.empty(target_shape, dtype=floating) image[...] = np.random.randint(0, 10, np.size(image)).reshape(target_shape) extended_image = np.zeros((sz+2, sz+2, sz+2), dtype=floating) extended_image[1:sz+1, 1:sz+1, 1:sz+1] = image[...] # Select some coordinates inside the image to interpolate at nsamples = 800 locations =\ np.random.ranf(3 * nsamples).reshape((nsamples, 3)) * (sz + 2) - 1.0 extended_locations = locations + 1.0 # shift coordinates one voxel # Call the implementation under test interp, inside = vfu.interpolate_scalar_3d(image, locations) # Call the reference implementation expected = map_coordinates(extended_image, extended_locations.transpose(), order=1) assert_array_almost_equal(expected, interp) # Test interpolation stability along the boundary epsilon = 5e-8 for k in range(3): for offset in [0, sz-1]: delta = ((np.random.ranf(nsamples) * 2) - 1) * epsilon locations[:, k] = delta + offset locations[:, (k + 1) % 3] = np.random.ranf(nsamples) * (sz - 1) locations[:, (k + 2) % 3] = np.random.ranf(nsamples) * (sz - 1) interp, inside = vfu.interpolate_scalar_3d(image, locations) locations[:, k] = offset expected = map_coordinates(image, locations.transpose(), order=1) assert_array_almost_equal(expected, interp) if offset == 0: expected_flag = np.array(delta >= 0, dtype=np.int32) else: expected_flag = np.array(delta <= 0, dtype=np.int32) assert_array_almost_equal(expected_flag, inside) def test_interpolate_vector_3d(): np.random.seed(7711219) sz = 64 target_shape = (sz, sz, sz) field = np.empty(target_shape+(3,), dtype=floating) field[...] =\ np.random.randint(0, 10, np.size(field)).reshape(target_shape+(3,)) extended_field = np.zeros((sz+2, sz+2, sz+2, 3), dtype=floating) extended_field[1:sz+1, 1:sz+1, 1:sz+1] = field # Select some coordinates to interpolate at nsamples = 800 locations =\ np.random.ranf(3 * nsamples).reshape((nsamples, 3)) * (sz + 2) - 1.0 extended_locations = locations + 1 # Call the implementation under test interp, inside = vfu.interpolate_vector_3d(field, locations) # Call the reference implementation expected = np.zeros_like(interp) for i in range(3): expected[..., i] = map_coordinates(extended_field[..., i], extended_locations.transpose(), order=1) assert_array_almost_equal(expected, interp) # Test interpolation stability along the boundary epsilon = 5e-8 for k in range(3): for offset in [0, sz-1]: delta = ((np.random.ranf(nsamples) * 2) - 1) * epsilon locations[:, k] = delta + offset locations[:, (k + 1) % 3] = np.random.ranf(nsamples) * (sz - 1) locations[:, (k + 2) % 3] = np.random.ranf(nsamples) * (sz - 1) interp, inside = vfu.interpolate_vector_3d(field, locations) locations[:, k] = offset for i in range(3): expected[..., i] = map_coordinates(field[..., i], locations.transpose(), order=1) assert_array_almost_equal(expected, interp) if offset == 0: expected_flag = np.array(delta >= 0, dtype=np.int32) else: expected_flag = np.array(delta <= 0, dtype=np.int32) assert_array_almost_equal(expected_flag, inside) def test_interpolate_vector_2d(): np.random.seed(1271244) sz = 64 target_shape = (sz, sz) field = np.empty(target_shape+(2,), dtype=floating) field[...] =\ np.random.randint(0, 10, np.size(field)).reshape(target_shape + (2,)) extended_field = np.zeros((sz+2, sz+2, 2), dtype=floating) extended_field[1:sz+1, 1:sz+1] = field # Select some coordinates to interpolate at nsamples = 200 locations =\ np.random.ranf(2 * nsamples).reshape((nsamples, 2)) * (sz + 2) - 1.0 extended_locations = locations + 1 # Call the implementation under test interp, inside = vfu.interpolate_vector_2d(field, locations) # Call the reference implementation expected = np.zeros_like(interp) for i in range(2): expected[..., i] = map_coordinates(extended_field[..., i], extended_locations.transpose(), order=1) assert_array_almost_equal(expected, interp) # Test interpolation stability along the boundary epsilon = 5e-8 for k in range(2): for offset in [0, sz-1]: delta = ((np.random.ranf(nsamples) * 2) - 1) * epsilon locations[:, k] = delta + offset locations[:, (k + 1) % 2] = np.random.ranf(nsamples) * (sz - 1) interp, inside = vfu.interpolate_vector_2d(field, locations) locations[:, k] = offset for i in range(2): expected[..., i] = map_coordinates(field[..., i], locations.transpose(), order=1) assert_array_almost_equal(expected, interp) if offset == 0: expected_flag = np.array(delta >= 0, dtype=np.int32) else: expected_flag = np.array(delta <= 0, dtype=np.int32) assert_array_almost_equal(expected_flag, inside) def test_warping_2d(): r""" Tests the cython implementation of the 2d warpings against scipy """ sh = (64, 64) nr = sh[0] nc = sh[1] # Create an image of a circle radius = 24 circle = vfu.create_circle(nr, nc, radius) circle = np.array(circle, dtype=floating) # Create a displacement field for warping d, dinv = vfu.create_harmonic_fields_2d(nr, nc, 0.2, 8) d = np.asarray(d).astype(floating) dinv = np.asarray(dinv).astype(floating) # Create grid coordinates x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.empty((3,)+sh, dtype=np.float64) O = np.ones(sh) X[0, ...] = x_0[:, None] * O X[1, ...] = x_1[None, :] * O X[2, ...] = 1 # Select an arbitrary translation matrix t = 0.1 trans = np.array([[1, 0, -t*nr], [0, 1, -t*nc], [0, 0, 1]]) trans_inv = np.linalg.inv(trans) # Select arbitrary rotation and scaling matrices for theta in [-1 * np.pi / 6.0, 0.0, np.pi / 6.0]: # rotation angle for s in [0.42, 1.3, 2.15]: # scale ct = np.cos(theta) st = np.sin(theta) rot = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]]) scale = np.array([[1*s, 0, 0], [0, 1*s, 0], [0, 0, 1]]) aff = trans_inv.dot(scale.dot(rot.dot(trans))) # Select arbitrary (but different) grid-to-space transforms sampling_grid2world = scale field_grid2world = aff field_world2grid = np.linalg.inv(field_grid2world) image_grid2world = aff.dot(scale) image_world2grid = np.linalg.inv(image_grid2world) A = field_world2grid.dot(sampling_grid2world) B = image_world2grid.dot(sampling_grid2world) C = image_world2grid # Reorient the displacement field according to its grid-to-space # transform dcopy = np.copy(d) vfu.reorient_vector_field_2d(dcopy, field_grid2world) extended_dcopy = np.zeros((nr+2, nc+2, 2), dtype=floating) extended_dcopy[1:nr+1, 1:nc+1, :] = dcopy # Compute the warping coordinates (see warp_2d documentation) Y = np.apply_along_axis(A.dot, 0, X)[0:2, ...] Z = np.zeros_like(X) Z[0, ...] = map_coordinates(extended_dcopy[..., 0], Y + 1, order=1) Z[1, ...] = map_coordinates(extended_dcopy[..., 1], Y + 1, order=1) Z[2, ...] = 0 Z = np.apply_along_axis(C.dot, 0, Z)[0:2, ...] T = np.apply_along_axis(B.dot, 0, X)[0:2, ...] W = T + Z # Test bilinear interpolation expected = map_coordinates(circle, W, order=1) warped = vfu.warp_2d(circle, dcopy, A, B, C, np.array(sh, dtype=np.int32)) assert_array_almost_equal(warped, expected) # Test nearest neighbor interpolation expected = map_coordinates(circle, W, order=0) warped = vfu.warp_2d_nn(circle, dcopy, A, B, C, np.array(sh, dtype=np.int32)) assert_array_almost_equal(warped, expected) # Test exception is raised when the affine transform matrix is not valid val = np.zeros((2, 3), dtype=np.float64) inval = np.zeros((2, 2), dtype=np.float64) sh = np.array(sh, dtype=np.int32) # Exceptions from warp_2d assert_raises(ValueError, vfu.warp_2d, circle, d, inval, val, val, sh) assert_raises(ValueError, vfu.warp_2d, circle, d, val, inval, val, sh) assert_raises(ValueError, vfu.warp_2d, circle, d, val, val, inval, sh) # Exceptions from warp_2d_nn assert_raises(ValueError, vfu.warp_2d_nn, circle, d, inval, val, val, sh) assert_raises(ValueError, vfu.warp_2d_nn, circle, d, val, inval, val, sh) assert_raises(ValueError, vfu.warp_2d_nn, circle, d, val, val, inval, sh) def test_warping_3d(): r""" Tests the cython implementation of the 2d warpings against scipy """ sh = (64, 64, 64) ns = sh[0] nr = sh[1] nc = sh[2] # Create an image of a sphere radius = 24 sphere = vfu.create_sphere(ns, nr, nc, radius) sphere = np.array(sphere, dtype=floating) # Create a displacement field for warping d, dinv = vfu.create_harmonic_fields_3d(ns, nr, nc, 0.2, 8) d = np.asarray(d).astype(floating) dinv = np.asarray(dinv).astype(floating) # Create grid coordinates x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) x_2 = np.asarray(range(sh[2])) X = np.empty((4,) + sh, dtype=np.float64) O = np.ones(sh) X[0, ...] = x_0[:, None, None] * O X[1, ...] = x_1[None, :, None] * O X[2, ...] = x_2[None, None, :] * O X[3, ...] = 1 # Select an arbitrary rotation axis axis = np.array([.5, 2.0, 1.5]) # Select an arbitrary translation matrix t = 0.1 trans = np.array([[1, 0, 0, -t*ns], [0, 1, 0, -t*nr], [0, 0, 1, -t*nc], [0, 0, 0, 1]]) trans_inv = np.linalg.inv(trans) # Select arbitrary rotation and scaling matrices for theta in [-1 * np.pi / 5.0, 0.0, np.pi / 5.0]: # rotation angle for s in [0.45, 1.1, 2.0]: # scale rot = np.zeros(shape=(4, 4)) rot[:3, :3] = geometry.rodrigues_axis_rotation(axis, theta) rot[3, 3] = 1.0 scale = np.array([[1*s, 0, 0, 0], [0, 1*s, 0, 0], [0, 0, 1*s, 0], [0, 0, 0, 1]]) aff = trans_inv.dot(scale.dot(rot.dot(trans))) # Select arbitrary (but different) grid-to-space transforms sampling_grid2world = scale field_grid2world = aff field_world2grid = np.linalg.inv(field_grid2world) image_grid2world = aff.dot(scale) image_world2grid = np.linalg.inv(image_grid2world) A = field_world2grid.dot(sampling_grid2world) B = image_world2grid.dot(sampling_grid2world) C = image_world2grid # Reorient the displacement field according to its grid-to-space # transform dcopy = np.copy(d) vfu.reorient_vector_field_3d(dcopy, field_grid2world) extended_dcopy = np.zeros((ns+2, nr+2, nc+2, 3), dtype=floating) extended_dcopy[1:ns+1, 1:nr+1, 1:nc+1, :] = dcopy # Compute the warping coordinates (see warp_2d documentation) Y = np.apply_along_axis(A.dot, 0, X)[0:3, ...] Z = np.zeros_like(X) Z[0, ...] = map_coordinates(extended_dcopy[..., 0], Y + 1, order=1) Z[1, ...] = map_coordinates(extended_dcopy[..., 1], Y + 1, order=1) Z[2, ...] = map_coordinates(extended_dcopy[..., 2], Y + 1, order=1) Z[3, ...] = 0 Z = np.apply_along_axis(C.dot, 0, Z)[0:3, ...] T = np.apply_along_axis(B.dot, 0, X)[0:3, ...] W = T + Z # Test bilinear interpolation expected = map_coordinates(sphere, W, order=1) warped = vfu.warp_3d(sphere, dcopy, A, B, C, np.array(sh, dtype=np.int32)) assert_array_almost_equal(warped, expected, decimal=5) # Test nearest neighbor interpolation expected = map_coordinates(sphere, W, order=0) warped = vfu.warp_3d_nn(sphere, dcopy, A, B, C, np.array(sh, dtype=np.int32)) assert_array_almost_equal(warped, expected, decimal=5) # Test exception is raised when the affine transform matrix is not valid val = np.zeros((3, 4), dtype=np.float64) inval = np.zeros((3, 3), dtype=np.float64) sh = np.array(sh, dtype=np.int32) # Exceptions from warp_3d assert_raises(ValueError, vfu.warp_3d, sphere, d, inval, val, val, sh) assert_raises(ValueError, vfu.warp_3d, sphere, d, val, inval, val, sh) assert_raises(ValueError, vfu.warp_3d, sphere, d, val, val, inval, sh) # Exceptions from warp_3d_nn assert_raises(ValueError, vfu.warp_3d_nn, sphere, d, inval, val, val, sh) assert_raises(ValueError, vfu.warp_3d_nn, sphere, d, val, inval, val, sh) assert_raises(ValueError, vfu.warp_3d_nn, sphere, d, val, val, inval, sh) def test_affine_transforms_2d(): r""" Tests 2D affine transform functions against scipy implementation """ # Create a simple invertible affine transform d_shape = (64, 64) codomain_shape = (80, 80) nr = d_shape[0] nc = d_shape[1] # Create an image of a circle radius = 16 circle = vfu.create_circle(codomain_shape[0], codomain_shape[1], radius) circle = np.array(circle, dtype=floating) # Create grid coordinates x_0 = np.asarray(range(d_shape[0])) x_1 = np.asarray(range(d_shape[1])) X = np.empty((3,) + d_shape, dtype=np.float64) O = np.ones(d_shape) X[0, ...] = x_0[:, None] * O X[1, ...] = x_1[None, :] * O X[2, ...] = 1 # Generate affine transforms t = 0.3 trans = np.array([[1, 0, -t*nr], [0, 1, -t*nc], [0, 0, 1]]) trans_inv = np.linalg.inv(trans) for theta in [-1 * np.pi / 5.0, 0.0, np.pi / 5.0]: # rotation angle for s in [0.5, 1.0, 2.0]: # scale ct = np.cos(theta) st = np.sin(theta) rot = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]]) scale = np.array([[1*s, 0, 0], [0, 1*s, 0], [0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(rot.dot(trans))) # Apply the affine transform to the grid coordinates Y = np.apply_along_axis(gt_affine.dot, 0, X)[0:2, ...] expected = map_coordinates(circle, Y, order=1) warped = vfu.transform_2d_affine(circle, np.array(d_shape, dtype=np.int32), gt_affine) assert_array_almost_equal(warped, expected) # Test affine warping with nearest-neighbor interpolation expected = map_coordinates(circle, Y, order=0) warped = vfu.transform_2d_affine_nn(circle, np.array(d_shape, dtype=np.int32), gt_affine) assert_array_almost_equal(warped, expected) # Test the affine = None case warped = vfu.transform_2d_affine(circle, np.array(codomain_shape, dtype=np.int32), None) assert_array_equal(warped, circle) warped = vfu.transform_2d_affine_nn(circle, np.array(codomain_shape, dtype=np.int32), None) assert_array_equal(warped, circle) # Test exception is raised when the affine transform matrix is not valid invalid = np.zeros((2, 2), dtype=np.float64) invalid_nan = np.zeros((3, 3), dtype=np.float64) invalid_nan[1, 1] = np.nan shape = np.array(codomain_shape, dtype=np.int32) # Exceptions from transform_2d assert_raises(ValueError, vfu.transform_2d_affine, circle, shape, invalid) assert_raises(ValueError, vfu.transform_2d_affine, circle, shape, invalid_nan) # Exceptions from transform_2d_nn assert_raises(ValueError, vfu.transform_2d_affine_nn, circle, shape, invalid) assert_raises(ValueError, vfu.transform_2d_affine_nn, circle, shape, invalid_nan) def test_affine_transforms_3d(): r""" Tests 3D affine transform functions against scipy implementation """ # Create a simple invertible affine transform d_shape = (64, 64, 64) codomain_shape = (80, 80, 80) ns = d_shape[0] nr = d_shape[1] nc = d_shape[2] # Create an image of a sphere radius = 16 sphere = vfu.create_sphere(codomain_shape[0], codomain_shape[1], codomain_shape[2], radius) sphere = np.array(sphere, dtype=floating) # Create grid coordinates x_0 = np.asarray(range(d_shape[0])) x_1 = np.asarray(range(d_shape[1])) x_2 = np.asarray(range(d_shape[2])) X = np.empty((4,)+d_shape, dtype=np.float64) O = np.ones(d_shape) X[0, ...] = x_0[:, None, None] * O X[1, ...] = x_1[None, :, None] * O X[2, ...] = x_2[None, None, :] * O X[3, ...] = 1 # Generate affine transforms # Select an arbitrary rotation axis axis = np.array([.5, 2.0, 1.5]) t = 0.3 trans = np.array([[1, 0, 0, -t*ns], [0, 1, 0, -t*nr], [0, 0, 1, -t*nc], [0, 0, 0, 1]]) trans_inv = np.linalg.inv(trans) for theta in [-1 * np.pi / 5.0, 0.0, np.pi / 5.0]: # rotation angle for s in [0.45, 1.1, 2.3]: # scale rot = np.zeros(shape=(4, 4)) rot[:3, :3] = geometry.rodrigues_axis_rotation(axis, theta) rot[3, 3] = 1.0 scale = np.array([[1*s, 0, 0, 0], [0, 1*s, 0, 0], [0, 0, 1*s, 0], [0, 0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(rot.dot(trans))) # Apply the affine transform to the grid coordinates Y = np.apply_along_axis(gt_affine.dot, 0, X)[0:3, ...] expected = map_coordinates(sphere, Y, order=1) transformed = vfu.transform_3d_affine(sphere, np.array(d_shape, dtype=np.int32), gt_affine) assert_array_almost_equal(transformed, expected) # Test affine transform with nearest-neighbor interpolation expected = map_coordinates(sphere, Y, order=0) transformed = vfu.transform_3d_affine_nn(sphere, np.array(d_shape, dtype=np.int32), gt_affine) assert_array_almost_equal(transformed, expected) # Test the affine = None case transformed = vfu.transform_3d_affine(sphere, np.array(codomain_shape, dtype=np.int32), None) assert_array_equal(transformed, sphere) transformed = vfu.transform_3d_affine_nn(sphere, np.array(codomain_shape, dtype=np.int32), None) assert_array_equal(transformed, sphere) # Test exception is raised when the affine transform matrix is not valid invalid = np.zeros((3, 3), dtype=np.float64) invalid_nan = np.zeros((4, 4), dtype=np.float64) invalid_nan[1, 1] = np.nan shape = np.array(codomain_shape, dtype=np.int32) # Exceptions from transform_3d_affine assert_raises(ValueError, vfu.transform_3d_affine, sphere, shape, invalid) assert_raises(ValueError, vfu.transform_3d_affine, sphere, shape, invalid_nan) # Exceptions from transform_3d_affine_nn assert_raises(ValueError, vfu.transform_3d_affine_nn, sphere, shape, invalid) assert_raises(ValueError, vfu.transform_3d_affine_nn, sphere, shape, invalid_nan) def test_compose_vector_fields_2d(): r""" Creates two random displacement field that exactly map pixels from an input image to an output image. The resulting displacements and their composition, although operating in physical space, map the points exactly (up to numerical precision). """ np.random.seed(8315759) input_shape = (10, 10) tgt_sh = (10, 10) # create a simple affine transformation nr = input_shape[0] nc = input_shape[1] s = 1.5 t = 2.5 trans = np.array([[1, 0, -t * nr], [0, 1, -t * nc], [0, 0, 1]]) trans_inv = np.linalg.inv(trans) scale = np.array([[1 * s, 0, 0], [0, 1 * s, 0], [0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(trans)) # create two random displacement fields input_grid2world = gt_affine target_grid2world = gt_affine disp1, assign1 = vfu.create_random_displacement_2d(np.array(input_shape, dtype=np.int32), input_grid2world, np.array(tgt_sh, dtype=np.int32), target_grid2world) disp1 = np.array(disp1, dtype=floating) assign1 = np.array(assign1) disp2, assign2 = vfu.create_random_displacement_2d(np.array(input_shape, dtype=np.int32), input_grid2world, np.array(tgt_sh, dtype=np.int32), target_grid2world) disp2 = np.array(disp2, dtype=floating) assign2 = np.array(assign2) # create a random image (with decimal digits) to warp moving_image = np.empty(tgt_sh, dtype=floating) moving_image[...] =\ np.random.randint(0, 10, np.size(moving_image)).reshape(tuple(tgt_sh)) # set boundary values to zero so we don't test wrong interpolation due to # floating point precision moving_image[0, :] = 0 moving_image[-1, :] = 0 moving_image[:, 0] = 0 moving_image[:, -1] = 0 # evaluate the composed warping using the exact assignments # (first 1 then 2) warp1 = moving_image[(assign2[..., 0], assign2[..., 1])] expected = warp1[(assign1[..., 0], assign1[..., 1])] # compose the displacement fields target_world2grid = np.linalg.inv(target_grid2world) target_world2grid = np.linalg.inv(target_grid2world) premult_index = target_world2grid.dot(input_grid2world) premult_disp = target_world2grid for time_scaling in [0.25, 0.5, 1.0, 2.0, 4.0]: composition, stats = vfu.compose_vector_fields_2d(disp1, disp2/time_scaling, premult_index, premult_disp, time_scaling, None) # apply the implementation under test warped = np.array(vfu.warp_2d(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # test also using nearest neighbor interpolation warped = np.array(vfu.warp_2d_nn(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # test updating the displacement field instead of creating a new one composition = disp1.copy() vfu.compose_vector_fields_2d(composition, disp2 / time_scaling, premult_index, premult_disp, time_scaling, composition) # apply the implementation under test warped = np.array(vfu.warp_2d(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # test also using nearest neighbor interpolation warped = np.array(vfu.warp_2d_nn(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # Test non-overlapping case x_0 = np.asarray(range(input_shape[0])) x_1 = np.asarray(range(input_shape[1])) X = np.empty(input_shape + (2,), dtype=np.float64) O = np.ones(input_shape) X[..., 0] = x_0[:, None] * O X[..., 1] = x_1[None, :] * O random_labels = np.random.randint(0, 2, input_shape[0]*input_shape[1]*2) random_labels = random_labels.reshape(input_shape+(2,)) values = np.array([-1, tgt_sh[0]]) disp1 = (values[random_labels] - X).astype(floating) composition, stats = vfu.compose_vector_fields_2d(disp1, disp2, None, None, 1.0, None) assert_array_almost_equal(composition, np.zeros_like(composition)) # test updating the displacement field instead of creating a new one composition = disp1.copy() vfu.compose_vector_fields_2d(composition, disp2, None, None, 1.0, composition) assert_array_almost_equal(composition, np.zeros_like(composition)) # Test exception is raised when the affine transform matrix is not valid valid = np.zeros((2, 3), dtype=np.float64) invalid = np.zeros((2, 2), dtype=np.float64) assert_raises(ValueError, vfu.compose_vector_fields_2d, disp1, disp2, invalid, valid, 1.0, None) assert_raises(ValueError, vfu.compose_vector_fields_2d, disp1, disp2, valid, invalid, 1.0, None) def test_compose_vector_fields_3d(): r""" Creates two random displacement field that exactly map pixels from an input image to an output image. The resulting displacements and their composition, although operating in physical space, map the points exactly (up to numerical precision). """ np.random.seed(8315759) input_shape = (10, 10, 10) tgt_sh = (10, 10, 10) # create a simple affine transformation ns = input_shape[0] nr = input_shape[1] nc = input_shape[2] s = 1.5 t = 2.5 trans = np.array([[1, 0, 0, -t*ns], [0, 1, 0, -t*nr], [0, 0, 1, -t*nc], [0, 0, 0, 1]]) trans_inv = np.linalg.inv(trans) scale = np.array([[1*s, 0, 0, 0], [0, 1*s, 0, 0], [0, 0, 1*s, 0], [0, 0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(trans)) # create two random displacement fields input_grid2world = gt_affine target_grid2world = gt_affine disp1, assign1 = vfu.create_random_displacement_3d(np.array(input_shape, dtype=np.int32), input_grid2world, np.array(tgt_sh, dtype=np.int32), target_grid2world) disp1 = np.array(disp1, dtype=floating) assign1 = np.array(assign1) disp2, assign2 = vfu.create_random_displacement_3d(np.array(input_shape, dtype=np.int32), input_grid2world, np.array(tgt_sh, dtype=np.int32), target_grid2world) disp2 = np.array(disp2, dtype=floating) assign2 = np.array(assign2) # create a random image (with decimal digits) to warp moving_image = np.empty(tgt_sh, dtype=floating) moving_image[...] =\ np.random.randint(0, 10, np.size(moving_image)).reshape(tuple(tgt_sh)) # set boundary values to zero so we don't test wrong interpolation due to # floating point precision moving_image[0, :, :] = 0 moving_image[-1, :, :] = 0 moving_image[:, 0, :] = 0 moving_image[:, -1, :] = 0 moving_image[:, :, 0] = 0 moving_image[:, :, -1] = 0 # evaluate the composed warping using the exact assignments # (first 1 then 2) warp1 = moving_image[(assign2[..., 0], assign2[..., 1], assign2[..., 2])] expected = warp1[(assign1[..., 0], assign1[..., 1], assign1[..., 2])] # compose the displacement fields target_world2grid = np.linalg.inv(target_grid2world) target_world2grid = np.linalg.inv(target_grid2world) premult_index = target_world2grid.dot(input_grid2world) premult_disp = target_world2grid for time_scaling in [0.25, 0.5, 1.0, 2.0, 4.0]: composition, stats = vfu.compose_vector_fields_3d(disp1, disp2/time_scaling, premult_index, premult_disp, time_scaling, None) # apply the implementation under test warped = np.array(vfu.warp_3d(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # test also using nearest neighbor interpolation warped = np.array(vfu.warp_3d_nn(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # test updating the displacement field instead of creating a new one composition = disp1.copy() vfu.compose_vector_fields_3d(composition, disp2/time_scaling, premult_index, premult_disp, time_scaling, composition) # apply the implementation under test warped = np.array(vfu.warp_3d(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # test also using nearest neighbor interpolation warped = np.array(vfu.warp_3d_nn(moving_image, composition, None, premult_index, premult_disp)) assert_array_almost_equal(warped, expected) # Test non-overlapping case x_0 = np.asarray(range(input_shape[0])) x_1 = np.asarray(range(input_shape[1])) x_2 = np.asarray(range(input_shape[2])) X = np.empty(input_shape + (3,), dtype=np.float64) O = np.ones(input_shape) X[..., 0] = x_0[:, None, None] * O X[..., 1] = x_1[None, :, None] * O X[..., 2] = x_2[None, None, :] * O sz = input_shape[0] * input_shape[1] * input_shape[2] * 3 random_labels = np.random.randint(0, 2, sz) random_labels = random_labels.reshape(input_shape+(3,)) values = np.array([-1, tgt_sh[0]]) disp1 = (values[random_labels] - X).astype(floating) composition, stats = vfu.compose_vector_fields_3d(disp1, disp2, None, None, 1.0, None) assert_array_almost_equal(composition, np.zeros_like(composition)) # test updating the displacement field instead of creating a new one composition = disp1.copy() vfu.compose_vector_fields_3d(composition, disp2, None, None, 1.0, composition) assert_array_almost_equal(composition, np.zeros_like(composition)) # Test exception is raised when the affine transform matrix is not valid valid = np.zeros((3, 4), dtype=np.float64) invalid = np.zeros((3, 3), dtype=np.float64) assert_raises(ValueError, vfu.compose_vector_fields_3d, disp1, disp2, invalid, valid, 1.0, None) assert_raises(ValueError, vfu.compose_vector_fields_3d, disp1, disp2, valid, invalid, 1.0, None) def test_invert_vector_field_2d(): r""" Inverts a synthetic, analytically invertible, displacement field """ shape = (64, 64) nr = shape[0] nc = shape[1] # Create an arbitrary image-to-space transform t = 2.5 # translation factor trans = np.array([[1, 0, -t*nr], [0, 1, -t*nc], [0, 0, 1]]) trans_inv = np.linalg.inv(trans) d, dinv = vfu.create_harmonic_fields_2d(nr, nc, 0.2, 8) d = np.asarray(d).astype(floating) dinv = np.asarray(dinv).astype(floating) for theta in [-1 * np.pi / 5.0, 0.0, np.pi / 5.0]: # rotation angle for s in [0.5, 1.0, 2.0]: # scale ct = np.cos(theta) st = np.sin(theta) rot = np.array([[ct, -st, 0], [st, ct, 0], [0, 0, 1]]) scale = np.array([[1*s, 0, 0], [0, 1*s, 0], [0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(rot.dot(trans))) gt_affine_inv = np.linalg.inv(gt_affine) dcopy = np.copy(d) # make sure the field remains invertible after the re-mapping vfu.reorient_vector_field_2d(dcopy, gt_affine) inv_approx =\ vfu.invert_vector_field_fixed_point_2d(dcopy, gt_affine_inv, np.array([s, s]), 40, 1e-7) mapping = imwarp.DiffeomorphicMap(2, (nr, nc), gt_affine) mapping.forward = dcopy mapping.backward = inv_approx residual, stats = mapping.compute_inversion_error() assert_almost_equal(stats[1], 0, decimal=4) assert_almost_equal(stats[2], 0, decimal=4) # Test exception is raised when the affine transform matrix is not valid invalid = np.zeros((2, 2), dtype=np.float64) spacing = np.array([1.0, 1.0]) assert_raises(ValueError, vfu.invert_vector_field_fixed_point_2d, d, invalid, spacing, 40, 1e-7, None) def test_invert_vector_field_3d(): r""" Inverts a synthetic, analytically invertible, displacement field """ shape = (64, 64, 64) ns = shape[0] nr = shape[1] nc = shape[2] # Create an arbitrary image-to-space transform # Select an arbitrary rotation axis axis = np.array([2.0, 0.5, 1.0]) t = 2.5 # translation factor trans = np.array([[1, 0, 0, -t*ns], [0, 1, 0, -t*nr], [0, 0, 1, -t*nc], [0, 0, 0, 1]]) trans_inv = np.linalg.inv(trans) d, dinv = vfu.create_harmonic_fields_3d(ns, nr, nc, 0.2, 8) d = np.asarray(d).astype(floating) dinv = np.asarray(dinv).astype(floating) for theta in [-1 * np.pi / 5.0, 0.0, np.pi / 5.0]: # rotation angle for s in [0.5, 1.0, 2.0]: # scale rot = np.zeros(shape=(4, 4)) rot[:3, :3] = geometry.rodrigues_axis_rotation(axis, theta) rot[3, 3] = 1.0 scale = np.array([[1*s, 0, 0, 0], [0, 1*s, 0, 0], [0, 0, 1*s, 0], [0, 0, 0, 1]]) gt_affine = trans_inv.dot(scale.dot(rot.dot(trans))) gt_affine_inv = np.linalg.inv(gt_affine) dcopy = np.copy(d) # make sure the field remains invertible after the re-mapping vfu.reorient_vector_field_3d(dcopy, gt_affine) # Note: the spacings are used just to check convergence, so they # don't need to be very accurate. Here we are passing (0.5 * s) to # force the algorithm to make more iterations: in ANTS, there is a # hard-coded bound on the maximum residual, that's why we cannot # force more iteration by changing the parameters. # We will investigate this issue with more detail in the future. inv_approx =\ vfu.invert_vector_field_fixed_point_3d(dcopy, gt_affine_inv, np.array([s, s, s])*0.5, 40, 1e-7) mapping = imwarp.DiffeomorphicMap(3, (nr, nc), gt_affine) mapping.forward = dcopy mapping.backward = inv_approx residual, stats = mapping.compute_inversion_error() assert_almost_equal(stats[1], 0, decimal=3) assert_almost_equal(stats[2], 0, decimal=3) # Test exception is raised when the affine transform matrix is not valid invalid = np.zeros((3, 3), dtype=np.float64) spacing = np.array([1.0, 1.0, 1.0]) assert_raises(ValueError, vfu.invert_vector_field_fixed_point_3d, d, invalid, spacing, 40, 1e-7, None) def test_resample_vector_field_2d(): r""" Expand a vector field by 2, then subsample by 2, the resulting field should be the original one """ domain_shape = np.array((64, 64), dtype=np.int32) reduced_shape = np.array((32, 32), dtype=np.int32) factors = np.array([0.5, 0.5]) d, dinv = vfu.create_harmonic_fields_2d(reduced_shape[0], reduced_shape[1], 0.3, 6) d = np.array(d, dtype=floating) expanded = vfu.resample_displacement_field_2d(d, factors, domain_shape) subsampled = expanded[::2, ::2, :] assert_array_almost_equal(d, subsampled) def test_resample_vector_field_3d(): r""" Expand a vector field by 2, then subsample by 2, the resulting field should be the original one """ domain_shape = np.array((64, 64, 64), dtype=np.int32) reduced_shape = np.array((32, 32, 32), dtype=np.int32) factors = np.array([0.5, 0.5, 0.5]) d, dinv = vfu.create_harmonic_fields_3d(reduced_shape[0], reduced_shape[1], reduced_shape[2], 0.3, 6) d = np.array(d, dtype=floating) expanded = vfu.resample_displacement_field_3d(d, factors, domain_shape) subsampled = expanded[::2, ::2, ::2, :] assert_array_almost_equal(d, subsampled) def test_downsample_scalar_field_2d(): np.random.seed(8315759) size = 32 sh = (size, size) for reduce_r in [True, False]: nr = size - 1 if reduce_r else size for reduce_c in [True, False]: nc = size - 1 if reduce_c else size image = np.empty((size, size), dtype=floating) image[...] = np.random.randint(0, 10, np.size(image)).reshape(sh) if reduce_r: image[-1, :] = 0 if reduce_c: image[:, -1] = 0 a = image[::2, ::2] b = image[1::2, ::2] c = image[::2, 1::2] d = image[1::2, 1::2] expected = 0.25*(a + b + c + d) if reduce_r: expected[-1, :] *= 2 if reduce_c: expected[:, -1] *= 2 actual = np.array(vfu.downsample_scalar_field_2d(image[:nr, :nc])) assert_array_almost_equal(expected, actual) def test_downsample_displacement_field_2d(): np.random.seed(2115556) size = 32 sh = (size, size, 2) for reduce_r in [True, False]: nr = size - 1 if reduce_r else size for reduce_c in [True, False]: nc = size - 1 if reduce_c else size field = np.empty((size, size, 2), dtype=floating) field[...] = np.random.randint(0, 10, np.size(field)).reshape(sh) if reduce_r: field[-1, :, :] = 0 if reduce_c: field[:, -1, :] = 0 a = field[::2, ::2, :] b = field[1::2, ::2, :] c = field[::2, 1::2, :] d = field[1::2, 1::2, :] expected = 0.25*(a + b + c + d) if reduce_r: expected[-1, :, :] *= 2 if reduce_c: expected[:, -1, :] *= 2 actual = vfu.downsample_displacement_field_2d(field[:nr, :nc, :]) assert_array_almost_equal(expected, actual) def test_downsample_scalar_field_3d(): np.random.seed(8315759) size = 32 sh = (size, size, size) for reduce_s in [True, False]: ns = size - 1 if reduce_s else size for reduce_r in [True, False]: nr = size - 1 if reduce_r else size for reduce_c in [True, False]: nc = size - 1 if reduce_c else size image = np.empty((size, size, size), dtype=floating) image[...] =\ np.random.randint(0, 10, np.size(image)).reshape(sh) if reduce_s: image[-1, :, :] = 0 if reduce_r: image[:, -1, :] = 0 if reduce_c: image[:, :, -1] = 0 a = image[::2, ::2, ::2] b = image[1::2, ::2, ::2] c = image[::2, 1::2, ::2] d = image[1::2, 1::2, ::2] aa = image[::2, ::2, 1::2] bb = image[1::2, ::2, 1::2] cc = image[::2, 1::2, 1::2] dd = image[1::2, 1::2, 1::2] expected = 0.125*(a + b + c + d + aa + bb + cc + dd) if reduce_s: expected[-1, :, :] *= 2 if reduce_r: expected[:, -1, :] *= 2 if reduce_c: expected[:, :, -1] *= 2 actual = vfu.downsample_scalar_field_3d(image[:ns, :nr, :nc]) assert_array_almost_equal(expected, actual) def test_downsample_displacement_field_3d(): np.random.seed(8315759) size = 32 sh = (size, size, size, 3) for reduce_s in [True, False]: ns = size - 1 if reduce_s else size for reduce_r in [True, False]: nr = size - 1 if reduce_r else size for reduce_c in [True, False]: nc = size - 1 if reduce_c else size field = np.empty((size, size, size, 3), dtype=floating) field[...] =\ np.random.randint(0, 10, np.size(field)).reshape(sh) if reduce_s: field[-1, :, :] = 0 if reduce_r: field[:, -1, :] = 0 if reduce_c: field[:, :, -1] = 0 a = field[::2, ::2, ::2, :] b = field[1::2, ::2, ::2, :] c = field[::2, 1::2, ::2, :] d = field[1::2, 1::2, ::2, :] aa = field[::2, ::2, 1::2, :] bb = field[1::2, ::2, 1::2, :] cc = field[::2, 1::2, 1::2, :] dd = field[1::2, 1::2, 1::2, :] expected = 0.125*(a + b + c + d + aa + bb + cc + dd) if reduce_s: expected[-1, :, :, :] *= 2 if reduce_r: expected[:, -1, :, :] *= 2 if reduce_c: expected[:, :, -1, :] *= 2 actual =\ vfu.downsample_displacement_field_3d(field[:ns, :nr, :nc]) assert_array_almost_equal(expected, actual) def test_reorient_vector_field_2d(): shape = (16, 16) d, dinv = vfu.create_harmonic_fields_2d(shape[0], shape[1], 0.2, 4) d = np.array(d, dtype=floating) # the vector field rotated 90 degrees expected = np.empty(shape=shape + (2,), dtype=floating) expected[..., 0] = -1 * d[..., 1] expected[..., 1] = d[..., 0] # rotate 45 degrees twice c = np.sqrt(0.5) affine = np.array([[c, -c, 0.0], [c, c, 0.0]]) vfu.reorient_vector_field_2d(d, affine) vfu.reorient_vector_field_2d(d, affine) # verify almost equal assert_array_almost_equal(d, expected) # Test exception is raised when the affine transform matrix is not valid invalid = np.zeros((2, 2), dtype=np.float64) assert_raises(ValueError, vfu.reorient_vector_field_2d, d, invalid) def test_reorient_vector_field_3d(): sh = (16, 16, 16) d, dinv = vfu.create_harmonic_fields_3d(sh[0], sh[1], sh[2], 0.2, 4) d = np.array(d, dtype=floating) dinv = np.array(dinv, dtype=floating) # the vector field rotated 90 degrees around the last axis expected = np.empty(shape=sh + (3,), dtype=floating) expected[..., 0] = -1 * d[..., 1] expected[..., 1] = d[..., 0] expected[..., 2] = d[..., 2] # rotate 45 degrees twice around the last axis c = np.sqrt(0.5) affine = np.array([[c, -c, 0, 0], [c, c, 0, 0], [0, 0, 1, 0]]) vfu.reorient_vector_field_3d(d, affine) vfu.reorient_vector_field_3d(d, affine) # verify almost equal assert_array_almost_equal(d, expected) # the vector field rotated 90 degrees around the first axis expected[..., 0] = dinv[..., 0] expected[..., 1] = -1 * dinv[..., 2] expected[..., 2] = dinv[..., 1] # rotate 45 degrees twice around the first axis affine = np.array([[1, 0, 0, 0], [0, c, -c, 0], [0, c, c, 0]]) vfu.reorient_vector_field_3d(dinv, affine) vfu.reorient_vector_field_3d(dinv, affine) # verify almost equal assert_array_almost_equal(dinv, expected) # Test exception is raised when the affine transform matrix is not valid invalid = np.zeros((3, 3), dtype=np.float64) assert_raises(ValueError, vfu.reorient_vector_field_3d, d, invalid) def test_reorient_random_vector_fields(): np.random.seed(1134781) # Test reorienting vector field for n_dims, func in ((2, vfu.reorient_vector_field_2d), (3, vfu.reorient_vector_field_3d)): size = [20, 30, 40][:n_dims] + [n_dims] arr = np.random.normal(size=size) arr_32 = arr.astype(floating) affine = from_matvec(np.random.normal(size=(n_dims, n_dims)), np.zeros(n_dims)) func(arr_32, affine) assert_almost_equal(arr_32, apply_affine(affine, arr), 6) # Reorient reorients without translation trans = np.arange(n_dims) + 2 affine[:-1, -1] = trans arr_32 = arr.astype(floating) func(arr_32, affine) assert_almost_equal(arr_32, apply_affine(affine, arr) - trans, 6) # Test exception is raised when the affine transform is not valid invalid = np.eye(n_dims) assert_raises(ValueError, func, arr_32, invalid) def test_gradient_2d(): np.random.seed(3921116) sh = (25, 32) # Create grid coordinates x_0 = np.asarray(range(sh[0])) x_1 = np.asarray(range(sh[1])) X = np.empty(sh + (3,), dtype=np.float64) O = np.ones(sh) X[..., 0] = x_0[:, None] * O X[..., 1] = x_1[None, :] * O X[..., 2] = 1 transform = regtransforms[('RIGID', 2)] theta = np.array([0.1, 5.0, 2.5]) T = transform.param_to_matrix(theta) TX = X.dot(T.T) # Eval an arbitrary (known) function at TX # f(x, y) = ax^2 + bxy + cy^{2} # df/dx = 2ax + by # df/dy = 2cy + bx a = 2e-3 b = 5e-3 c = 7e-3 img = a * TX[..., 0] ** 2 +\ b * TX[..., 0] * TX[..., 1] +\ c * TX[..., 1] ** 2 img = img.astype(floating) # img is an image sampled at X with grid-to-space transform T # Test sparse gradient: choose some sample points (in space) sample = sample_domain_regular(20, np.array(sh, dtype=np.int32), T) sample = np.array(sample) # Compute the analytical gradient at all points expected = np.empty((sample.shape[0], 2), dtype=floating) expected[..., 0] = 2 * a * sample[:, 0] + b * sample[:, 1] expected[..., 1] = 2 * c * sample[:, 1] + b * sample[:, 0] # Get the numerical gradient with the implementation under test sp_to_grid = np.linalg.inv(T) img_spacing = np.ones(2) actual, inside = vfu.sparse_gradient(img, sp_to_grid, img_spacing, sample) diff = np.abs(expected - actual).mean(1) * inside # The finite differences are really not accurate, especially with float32 assert_equal(diff.max() < 1e-3, True) # Verify exception is raised when passing invalid affine or spacings invalid_affine = np.eye(2) invalid_spacings = np.ones(1) assert_raises(ValueError, vfu.sparse_gradient, img, invalid_affine, img_spacing, sample) assert_raises(ValueError, vfu.sparse_gradient, img, sp_to_grid, invalid_spacings, sample) # Test dense gradient # Compute the analytical gradient at all points expected = np.empty(sh + (2,), dtype=floating) expected[..., 0] = 2 * a * TX[..., 0] + b * TX[..., 1] expected[..., 1] = 2 * c * TX[..., 1] + b * TX[..., 0] # Get the numerical gradient with the implementation under test sp_to_grid = np.linalg.inv(T) img_spacing = np.ones(2) actual, inside = vfu.gradient(img, sp_to_grid, img_spacing, sh, T) diff = np.abs(expected - actual).mean(2) * inside # In the dense case, we are evaluating at the exact points (sample points # are not slightly moved like in the sparse case) so we have more precision assert_equal(diff.max() < 1e-5, True) # Verify exception is raised when passing invalid affine or spacings assert_raises(ValueError, vfu.gradient, img, invalid_affine, img_spacing, sh, T) assert_raises(ValueError, vfu.gradient, img, sp_to_grid, img_spacing, sh, invalid_affine) assert_raises(ValueError, vfu.gradient, img, sp_to_grid, invalid_spacings, sh, T) def test_gradient_3d(): np.random.seed(3921116) shape = (25, 32, 15) # Create grid coordinates x_0 = np.asarray(range(shape[0])) x_1 = np.asarray(range(shape[1])) x_2 = np.asarray(range(shape[2])) X = np.zeros(shape+(4,), dtype=np.float64) O = np.ones(shape) X[..., 0] = x_0[:, None, None] * O X[..., 1] = x_1[None, :, None] * O X[..., 2] = x_2[None, None, :] * O X[..., 3] = 1 transform = regtransforms[('RIGID', 3)] theta = np.array([0.1, 0.05, 0.12, -12.0, -15.5, -7.2]) T = transform.param_to_matrix(theta) TX = X.dot(T.T) # Eval an arbitrary (known) function at TX # f(x, y, z) = ax^2 + by^2 + cz^2 + dxy + exz + fyz # df/dx = 2ax + dy + ez # df/dy = 2by + dx + fz # df/dz = 2cz + ex + fy a, b, c = 2e-3, 3e-3, 1e-3 d, e, f = 1e-3, 2e-3, 3e-3 img = a * TX[..., 0] ** 2 + b * TX[..., 1] ** 2 +\ c * TX[..., 2] ** 2 + d * TX[..., 0] * TX[..., 1] +\ e * TX[..., 0] * TX[..., 2] + f * TX[..., 1] * TX[..., 2] img = img.astype(floating) # Test sparse gradient: choose some sample points (in space) sample =\ sample_domain_regular(100, np.array(shape, dtype=np.int32), T) sample = np.array(sample) # Compute the analytical gradient at all points expected = np.empty((sample.shape[0], 3), dtype=floating) expected[..., 0] =\ 2 * a * sample[:, 0] + d * sample[:, 1] + e * sample[:, 2] expected[..., 1] =\ 2 * b * sample[:, 1] + d * sample[:, 0] + f * sample[:, 2] expected[..., 2] =\ 2 * c * sample[:, 2] + e * sample[:, 0] + f * sample[:, 1] # Get the numerical gradient with the implementation under test sp_to_grid = np.linalg.inv(T) img_spacing = np.ones(3) actual, inside = vfu.sparse_gradient(img, sp_to_grid, img_spacing, sample) # Discard points outside the image domain diff = np.abs(expected - actual).mean(1) * inside # The finite differences are really not accurate, especially with float32 assert_equal(diff.max() < 1e-3, True) # Verify exception is raised when passing invalid affine or spacings invalid_affine = np.eye(3) invalid_spacings = np.ones(2) assert_raises(ValueError, vfu.sparse_gradient, img, invalid_affine, img_spacing, sample) assert_raises(ValueError, vfu.sparse_gradient, img, sp_to_grid, invalid_spacings, sample) # Test dense gradient # Compute the analytical gradient at all points expected = np.empty(shape + (3,), dtype=floating) expected[..., 0] = 2 * a * TX[..., 0] + d * TX[..., 1] + e * TX[..., 2] expected[..., 1] = 2 * b * TX[..., 1] + d * TX[..., 0] + f * TX[..., 2] expected[..., 2] = 2 * c * TX[..., 2] + e * TX[..., 0] + f * TX[..., 1] # Get the numerical gradient with the implementation under test sp_to_grid = np.linalg.inv(T) img_spacing = np.ones(3) actual, inside = vfu.gradient(img, sp_to_grid, img_spacing, shape, T) diff = np.abs(expected - actual).mean(3) * inside # In the dense case, we are evaluating at the exact points (sample points # are not slightly moved like in the sparse case) so we have more precision assert_equal(diff.max() < 1e-5, True) # Verify exception is raised when passing invalid affine or spacings assert_raises(ValueError, vfu.gradient, img, invalid_affine, img_spacing, shape, T) assert_raises(ValueError, vfu.gradient, img, sp_to_grid, img_spacing, shape, invalid_affine) assert_raises(ValueError, vfu.gradient, img, sp_to_grid, invalid_spacings, shape, T) dipy-0.10.1/dipy/align/transforms.pxd000066400000000000000000000004641263041327500175170ustar00rootroot00000000000000cdef class Transform: cdef: int number_of_parameters int dim cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil cdef void _get_identity_parameters(self, double[:] theta) nogil cdef void _param_to_matrix(self, double[:] theta, double[:, :] T)nogil dipy-0.10.1/dipy/align/transforms.pyx000066400000000000000000001036171263041327500175500ustar00rootroot00000000000000#!python #cython: boundscheck=False #cython: wraparound=False #cython: cdivision=True import numpy as np cimport numpy as cnp cimport cython cdef extern from "dpy_math.h" nogil: double cos(double) double sin(double) double log(double) cdef class Transform: r""" Base class (contract) for all transforms for affine image registration Each transform must define the following (fast, nogil) methods: 1. _jacobian(theta, x, J): receives a parameter vector theta, a point in x, and a matrix J with shape (dim, len(theta)). It must writes in J, the Jacobian of the transform with parameters theta evaluated at x. 2. _get_identity_parameters(theta): receives a vector theta whose length is the number of parameters of the transform and sets in theta the values that define the identity transform. 3. _param_to_matrix(theta, T): receives a parameter vector theta, and a matrix T of shape (dim + 1, dim + 1) and writes in T the matrix representation of the transform with parameters theta This base class defines the (slow, convenient) python wrappers for each of the above functions, which also do parameter checking and raise a ValueError in case the provided parameters are invalid. """ def __cinit__(self): r""" Default constructor Sets transform dimension and number of parameter to invalid values (-1) """ self.dim = -1 self.number_of_parameters = -1 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: return -1 cdef void _get_identity_parameters(self, double[:] theta) nogil: return cdef void _param_to_matrix(self, double[:] theta, double[:, :] T)nogil: return def jacobian(self, double[:] theta, double[:] x): r""" Jacobian function of this transform Parameters ---------- theta : array, shape (n,) vector containing the n parameters of this transform x : array, shape (dim,) vector containing the point where the Jacobian must be evaluated Returns ------- J : array, shape (dim, n) Jacobian matrix of the transform with parameters theta at point x """ n = theta.shape[0] if n != self.number_of_parameters: raise ValueError("Invalid number of parameters: %d"%(n,)) m = x.shape[0] if m < self.dim: raise ValueError("Invalid point dimension: %d"%(m,)) J = np.zeros((self.dim, n)) ret = self._jacobian(theta, x, J) return J def get_identity_parameters(self): r""" Parameter values corresponding to the identity transform Returns ------- theta : array, shape (n,) the n parameter values corresponding to the identity transform """ if self.number_of_parameters < 0: raise ValueError("Invalid transform.") theta = np.zeros(self.number_of_parameters) self._get_identity_parameters(theta) return theta def param_to_matrix(self, double[:] theta): r""" Matrix representation of this transform with the given parameters Parameters ---------- theta : array, shape (n,) the parameter values of the transform Returns ------- T : array, shape (dim + 1, dim + 1) the matrix representation of this transform with parameters theta """ n = len(theta) if n != self.number_of_parameters: raise ValueError("Invalid number of parameters: %d"%(n,)) T = np.eye(self.dim + 1) self._param_to_matrix(theta, T) return T def get_number_of_parameters(self): return self.number_of_parameters def get_dim(self): return self.dim cdef class TranslationTransform2D(Transform): def __init__(self): r""" Translation transform in 2D """ self.dim = 2 self.number_of_parameters = 2 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r""" Jacobian matrix of the 2D translation transform The transformation is given by: T(x) = (T1(x), T2(x)) = (x0 + t0, x1 + t1) The derivative w.r.t. t1 and t2 is given by T'(x) = [[1, 0], # derivatives of [T1, T2] w.r.t. t0 [0, 1]] # derivatives of [T1, T2] w.r.t. t1 Parameters ---------- theta : array, shape (2,) the parameters of the 2D translation transform (the Jacobian does not depend on the parameters, but we receive the buffer so all Jacobian functions receive the same parameters) x : array, shape (2,) the point at which to compute the Jacobian (the Jacobian does not depend on x, but we receive the buffer so all Jacobian functions receive the same parameters) J : array, shape (2, 2) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 1, indicating that the Jacobian is constant (independent of x) """ J[0, 0], J[0, 1] = 1.0, 0.0 J[1, 0], J[1, 1] = 0.0, 1.0 # This Jacobian does not depend on x (it's constant): return 1 return 1 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (2,) buffer to write the parameters of the 2D translation transform """ theta[:2] = 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 2D translation transform Parameters ---------- theta : array, shape (2,) the parameters of the 2D translation transform R : array, shape (3, 3) the buffer in which to write the translation matrix """ R[0, 0], R[0, 1], R[0, 2] = 1, 0, theta[0] R[1, 0], R[1, 1], R[1, 2] = 0, 1, theta[1] R[2, 0], R[2, 1], R[2, 2] = 0, 0, 1 cdef class TranslationTransform3D(Transform): def __init__(self): r""" Translation transform in 3D """ self.dim = 3 self.number_of_parameters = 3 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r""" Jacobian matrix of the 3D translation transform The transformation is given by: T(x) = (T1(x), T2(x), T3(x)) = (x0 + t0, x1 + t1, x2 + t2) The derivative w.r.t. t1, t2 and t3 is given by T'(x) = [[1, 0, 0], # derivatives of [T1, T2, T3] w.r.t. t0 [0, 1, 0], # derivatives of [T1, T2, T3] w.r.t. t1 [0, 0, 1]] # derivatives of [T1, T2, T3] w.r.t. t2 Parameters ---------- theta : array, shape (3,) the parameters of the 3D translation transform (the Jacobian does not depend on the parameters, but we receive the buffer so all Jacobian functions receive the same parameters) x : array, shape (3,) the point at which to compute the Jacobian (the Jacobian does not depend on x, but we receive the buffer so all Jacobian functions receive the same parameters) J : array, shape (3, 3) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 1, indicating that the Jacobian is constant (independent of x) """ J[0, 0], J[0, 1], J[0, 2] = 1.0, 0.0, 0.0 J[1, 0], J[1, 1], J[1, 2] = 0.0, 1.0, 0.0 J[2, 0], J[2, 1], J[2, 2] = 0.0, 0.0, 1.0 # This Jacobian does not depend on x (it's constant): return 1 return 1 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (3,) buffer to write the parameters of the 3D translation transform """ theta[:3] = 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 3D translation transform Parameters ---------- theta : array, shape (3,) the parameters of the 3D translation transform R : array, shape (4, 4) the buffer in which to write the translation matrix """ R[0, 0], R[0, 1], R[0, 2], R[0, 3] = 1, 0, 0, theta[0] R[1, 0], R[1, 1], R[1, 2], R[1, 3] = 0, 1, 0, theta[1] R[2, 0], R[2, 1], R[2, 2], R[2, 3] = 0, 0, 1, theta[2] R[3, 0], R[3, 1], R[3, 2], R[3, 3] = 0, 0, 0, 1 cdef class RotationTransform2D(Transform): def __init__(self): r""" Rotation transform in 2D """ self.dim = 2 self.number_of_parameters = 1 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r''' Jacobian matrix of a 2D rotation with parameter theta, at x The transformation is given by: T(x,y) = (T1(x,y), T2(x,y)) = (x cost - y sint, x sint + y cost) The derivatives w.r.t. the rotation angle, t, are: T'(x,y) = [-x sint - y cost, # derivative of T1 w.r.t. t x cost - y sint] # derivative of T2 w.r.t. t Parameters ---------- theta : array, shape (1,) the rotation angle x : array, shape (2,) the point at which to compute the Jacobian J : array, shape (2, 1) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) ''' cdef: double st = sin(theta[0]) double ct = cos(theta[0]) double px = x[0], py = x[1] J[0, 0] = -px * st - py * ct J[1, 0] = px * ct - py * st # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (1,) buffer to write the parameters of the 2D rotation transform """ theta[0] = 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 2D rotation transform Parameters ---------- theta : array, shape (1,) the rotation angle R : array, shape (3,3) the buffer in which to write the matrix """ cdef: double ct = cos(theta[0]) double st = sin(theta[0]) R[0, 0], R[0, 1], R[0, 2] = ct, -st, 0 R[1, 0], R[1, 1], R[1, 2] = st, ct, 0 R[2, 0], R[2, 1], R[2, 2] = 0, 0, 1 cdef class RotationTransform3D(Transform): def __init__(self): r""" Rotation transform in 3D """ self.dim = 3 self.number_of_parameters = 3 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r''' Jacobian matrix of a 3D rotation with parameters theta, at x Parameters ---------- theta : array, shape (3,) the rotation angles about the canonical axes x : array, shape (3,) the point at which to compute the Jacobian J : array, shape (3, 3) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) ''' cdef: double sa = sin(theta[0]) double ca = cos(theta[0]) double sb = sin(theta[1]) double cb = cos(theta[1]) double sc = sin(theta[2]) double cc = cos(theta[2]) double px = x[0], py = x[1], z = x[2] J[0, 0] = (-sc * ca * sb) * px + (sc * sa) * py + (sc * ca * cb) * z J[1, 0] = (cc * ca * sb) * px + (-cc * sa) * py + (-cc * ca * cb) * z J[2, 0] = (sa * sb) * px + ca * py + (-sa * cb) * z J[0, 1] = (-cc * sb - sc * sa * cb) * px + (cc * cb - sc * sa * sb) * z J[1, 1] = (-sc * sb + cc * sa * cb) * px + (sc * cb + cc * sa * sb) * z J[2, 1] = (-ca * cb) * px + (-ca * sb) * z J[0, 2] = (-sc * cb - cc * sa * sb) * px + (-cc * ca) * py + \ (-sc * sb + cc * sa * cb) * z J[1, 2] = (cc * cb - sc * sa * sb) * px + (-sc * ca) * py + \ (cc * sb + sc * sa * cb) * z J[2, 2] = 0 # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (3,) buffer to write the parameters of the 3D rotation transform """ theta[:3] = 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 3D rotation transform The matrix is the product of rotation matrices of angles theta[0], theta[1], theta[2] around axes x, y, z applied in the following order: y, x, z. This order was chosen for consistency with ANTS. Parameters ---------- theta : array, shape (3,) the rotation angles about each axis: theta[0] : rotation angle around x axis theta[1] : rotation angle around y axis theta[2] : rotation angle around z axis R : array, shape (4, 4) buffer in which to write the rotation matrix """ cdef: double sa = sin(theta[0]) double ca = cos(theta[0]) double sb = sin(theta[1]) double cb = cos(theta[1]) double sc = sin(theta[2]) double cc = cos(theta[2]) R[0,0], R[0,1], R[0,2] = cc*cb-sc*sa*sb, -sc*ca, cc*sb+sc*sa*cb R[1,0], R[1,1], R[1,2] = sc*cb+cc*sa*sb, cc*ca, sc*sb-cc*sa*cb R[2,0], R[2,1], R[2,2] = -ca*sb, sa, ca*cb R[3,0], R[3,1], R[3,2] = 0, 0, 0 R[0, 3] = 0 R[1, 3] = 0 R[2, 3] = 0 R[3, 3] = 1 cdef class RigidTransform2D(Transform): def __init__(self): r""" Rigid transform in 2D (rotation + translation) The parameter vector theta of length 3 is interpreted as follows: theta[0] : rotation angle theta[1] : translation along the x axis theta[2] : translation along the y axis """ self.dim = 2 self.number_of_parameters = 3 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r''' Jacobian matrix of a 2D rigid transform (rotation + translation) The transformation is given by: T(x,y) = (T1(x,y), T2(x,y)) = (x cost - y sint + dx, x sint + y cost + dy) The derivatives w.r.t. t, dx and dy are: T'(x,y) = [-x sint - y cost, 1, 0, # derivative of T1 w.r.t. t, dx, dy x cost - y sint, 0, 1] # derivative of T2 w.r.t. t, dx, dy Parameters ---------- theta : array, shape (3,) the parameters of the 2D rigid transform theta[0] : rotation angle (t) theta[1] : translation along the x axis (dx) theta[2] : translation along the y axis (dy) x : array, shape (2,) the point at which to compute the Jacobian J : array, shape (2, 3) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) ''' cdef: double st = sin(theta[0]) double ct = cos(theta[0]) double px = x[0], py = x[1] J[0, 0], J[0, 1], J[0, 2] = -px * st - py * ct, 1, 0 J[1, 0], J[1, 1], J[1, 2] = px * ct - py * st, 0, 1 # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (3,) buffer to write the parameters of the 2D rigid transform theta[0] : rotation angle theta[1] : translation along the x axis theta[2] : translation along the y axis """ theta[:3] = 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 2D rigid transform Parameters ---------- theta : array, shape (3,) the parameters of the 2D rigid transform theta[0] : rotation angle theta[1] : translation along the x axis theta[2] : translation along the y axis R : array, shape (3, 3) buffer in which to write the rigid matrix """ cdef: double ct = cos(theta[0]) double st = sin(theta[0]) R[0, 0], R[0, 1], R[0, 2] = ct, -st, theta[1] R[1, 0], R[1, 1], R[1, 2] = st, ct, theta[2] R[2, 0], R[2, 1], R[2, 2] = 0, 0, 1 cdef class RigidTransform3D(Transform): def __init__(self): r""" Rigid transform in 3D (rotation + translation) The parameter vector theta of length 6 is interpreted as follows: theta[0] : rotation about the x axis theta[1] : rotation about the y axis theta[2] : rotation about the z axis theta[3] : translation along the x axis theta[4] : translation along the y axis theta[5] : translation along the z axis """ self.dim = 3 self.number_of_parameters = 6 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r''' Jacobian matrix of a 3D rigid transform (rotation + translation) Parameters ---------- theta : array, shape (6,) the parameters of the 3D rigid transform theta[0] : rotation about the x axis theta[1] : rotation about the y axis theta[2] : rotation about the z axis theta[3] : translation along the x axis theta[4] : translation along the y axis theta[5] : translation along the z axis x : array, shape (3,) the point at which to compute the Jacobian J : array, shape (3, 6) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) ''' cdef: double sa = sin(theta[0]) double ca = cos(theta[0]) double sb = sin(theta[1]) double cb = cos(theta[1]) double sc = sin(theta[2]) double cc = cos(theta[2]) double px = x[0], py = x[1], z = x[2] J[0, 0] = (-sc * ca * sb) * px + (sc * sa) * py + (sc * ca * cb) * z J[1, 0] = (cc * ca * sb) * px + (-cc * sa) * py + (-cc * ca * cb) * z J[2, 0] = (sa * sb) * px + ca * py + (-sa * cb) * z J[0, 1] = (-cc * sb - sc * sa * cb) * px + (cc * cb - sc * sa * sb) * z J[1, 1] = (-sc * sb + cc * sa * cb) * px + (sc * cb + cc * sa * sb) * z J[2, 1] = (-ca * cb) * px + (-ca * sb) * z J[0, 2] = (-sc * cb - cc * sa * sb) * px + (-cc * ca) * py + \ (-sc * sb + cc * sa * cb) * z J[1, 2] = (cc * cb - sc * sa * sb) * px + (-sc * ca) * py + \ (cc * sb + sc * sa * cb) * z J[2, 2] = 0 J[0, 3:6] = 0 J[1, 3:6] = 0 J[2, 3:6] = 0 J[0, 3], J[1, 4], J[2, 5] = 1, 1, 1 # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (6,) buffer to write the parameters of the 3D rigid transform theta[0] : rotation about the x axis theta[1] : rotation about the y axis theta[2] : rotation about the z axis theta[3] : translation along the x axis theta[4] : translation along the y axis theta[5] : translation along the z axis """ theta[:6] = 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 3D rigid transform Parameters ---------- theta : array, shape (6,) the parameters of the 3D rigid transform theta[0] : rotation about the x axis theta[1] : rotation about the y axis theta[2] : rotation about the z axis theta[3] : translation along the x axis theta[4] : translation along the y axis theta[5] : translation along the z axis R : array, shape (4, 4) buffer in which to write the rigid matrix """ cdef: double sa = sin(theta[0]) double ca = cos(theta[0]) double sb = sin(theta[1]) double cb = cos(theta[1]) double sc = sin(theta[2]) double cc = cos(theta[2]) double dx = theta[3] double dy = theta[4] double dz = theta[5] R[0,0], R[0,1], R[0,2] = cc*cb-sc*sa*sb, -sc*ca, cc*sb+sc*sa*cb R[1,0], R[1,1], R[1,2] = sc*cb+cc*sa*sb, cc*ca, sc*sb-cc*sa*cb R[2,0], R[2,1], R[2,2] = -ca*sb, sa, ca*cb R[3,0], R[3,1], R[3,2] = 0, 0, 0 R[0,3] = dx R[1,3] = dy R[2,3] = dz R[3,3] = 1 cdef class ScalingTransform2D(Transform): def __init__(self): r""" Scaling transform in 2D """ self.dim = 2 self.number_of_parameters = 1 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r""" Jacobian matrix of the isotropic 2D scale transform The transformation is given by: T(x) = (s*x0, s*x1) The derivative w.r.t. s is T'(x) = [x0, x1] Parameters ---------- theta : array, shape (1,) the scale factor (the Jacobian does not depend on the scale factor, but we receive the buffer to make it consistent with other Jacobian functions) x : array, shape (2,) the point at which to compute the Jacobian J : array, shape (2, 1) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) """ J[0, 0], J[1, 0] = x[0], x[1] # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (1,) buffer to write the parameters of the 2D scale transform """ theta[0] = 1 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 2D (isotropic) scaling transform Parameters ---------- theta : array, shape (1,) the scale factor R : array, shape (3, 3) the buffer in which to write the scaling matrix """ R[0, 0], R[0, 1], R[0, 2] = theta[0], 0, 0 R[1, 0], R[1, 1], R[1, 2] = 0, theta[0], 0 R[2, 0], R[2, 1], R[2, 2] = 0, 0, 1 cdef class ScalingTransform3D(Transform): def __init__(self): r""" Scaling transform in 3D """ self.dim = 3 self.number_of_parameters = 1 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r""" Jacobian matrix of the isotropic 3D scale transform The transformation is given by: T(x) = (s*x0, s*x1, s*x2) The derivative w.r.t. s is T'(x) = [x0, x1, x2] Parameters ---------- theta : array, shape (1,) the scale factor (the Jacobian does not depend on the scale factor, but we receive the buffer to make it consistent with other Jacobian functions) x : array, shape (3,) the point at which to compute the Jacobian J : array, shape (3, 1) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) """ J[0, 0], J[1, 0], J[2, 0]= x[0], x[1], x[2] # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (1,) buffer to write the parameters of the 3D scale transform """ theta[0] = 1 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with the 3D (isotropic) scaling transform Parameters ---------- theta : array, shape (1,) the scale factor R : array, shape (4, 4) the buffer in which to write the scaling matrix """ R[0, 0], R[0, 1], R[0, 2], R[0, 3] = theta[0], 0, 0, 0 R[1, 0], R[1, 1], R[1, 2], R[1, 3] = 0, theta[0], 0, 0 R[2, 0], R[2, 1], R[2, 2], R[2, 3] = 0, 0, theta[0], 0 R[3, 0], R[3, 1], R[3, 2], R[3, 3] = 0, 0, 0, 1 cdef class AffineTransform2D(Transform): def __init__(self): r""" Affine transform in 2D """ self.dim = 2 self.number_of_parameters = 6 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r""" Jacobian matrix of the 2D affine transform The transformation is given by: T(x) = |a0, a1, a2 | |x0| | T1(x) | |a0*x0 + a1*x1 + a2| |a3, a4, a5 | * |x1| = | T2(x) | = |a3*x0 + a4*x1 + a5| | 1| The derivatives w.r.t. each parameter are given by T'(x) = [[x0, 0], #derivatives of [T1, T2] w.r.t a0 [x1, 0], #derivatives of [T1, T2] w.r.t a1 [ 1, 0], #derivatives of [T1, T2] w.r.t a2 [ 0, x0], #derivatives of [T1, T2] w.r.t a3 [ 0, x1], #derivatives of [T1, T2] w.r.t a4 [ 0, 1]] #derivatives of [T1, T2, T3] w.r.t a5 The Jacobian matrix is the transpose of the above matrix. Parameters ---------- theta : array, shape (6,) the parameters of the 2D affine transform x : array, shape (2,) the point at which to compute the Jacobian J : array, shape (2, 6) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) """ J[0, :6] = 0 J[1, :6] = 0 J[0, :2] = x[:2] J[0, 2] = 1 J[1, 3:5] = x[:2] J[1, 5] = 1 # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (6,) buffer to write the parameters of the 2D affine transform """ theta[0], theta[1], theta[2] = 1, 0, 0 theta[3], theta[4], theta[5] = 0, 1, 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with a general 2D affine transform The transformation is given by the matrix: A = [[a0, a1, a2], [a3, a4, a5], [ 0, 0, 1]] Parameters ---------- theta : array, shape (6,) the parameters of the 2D affine transform R : array, shape (3,3) the buffer in which to write the matrix """ R[0, 0], R[0, 1], R[0, 2] = theta[0], theta[1], theta[2] R[1, 0], R[1, 1], R[1, 2] = theta[3], theta[4], theta[5] R[2, 0], R[2, 1], R[2, 2] = 0, 0, 1 cdef class AffineTransform3D(Transform): def __init__(self): r""" Affine transform in 3D """ self.dim = 3 self.number_of_parameters = 12 cdef int _jacobian(self, double[:] theta, double[:] x, double[:, :] J)nogil: r""" Jacobian matrix of the 3D affine transform The transformation is given by: T(x)= |a0, a1, a2, a3 | |x0| | T1(x) | |a0*x0 + a1*x1 + a2*x2 + a3| |a4, a5, a6, a7 |* |x1|= | T2(x) |= |a4*x0 + a5*x1 + a6*x2 + a7| |a8, a9, a10, a11| |x2| | T3(x) | |a8*x0 + a9*x1 + a10*x2+a11| | 1| The derivatives w.r.t. each parameter are given by T'(x) = [[x0, 0, 0], #derivatives of [T1, T2, T3] w.r.t a0 [x1, 0, 0], #derivatives of [T1, T2, T3] w.r.t a1 [x2, 0, 0], #derivatives of [T1, T2, T3] w.r.t a2 [ 1, 0, 0], #derivatives of [T1, T2, T3] w.r.t a3 [ 0, x0, 0], #derivatives of [T1, T2, T3] w.r.t a4 [ 0, x1, 0], #derivatives of [T1, T2, T3] w.r.t a5 [ 0, x2, 0], #derivatives of [T1, T2, T3] w.r.t a6 [ 0, 1, 0], #derivatives of [T1, T2, T3] w.r.t a7 [ 0, 0, x0], #derivatives of [T1, T2, T3] w.r.t a8 [ 0, 0, x1], #derivatives of [T1, T2, T3] w.r.t a9 [ 0, 0, x2], #derivatives of [T1, T2, T3] w.r.t a10 [ 0, 0, 1]] #derivatives of [T1, T2, T3] w.r.t a11 The Jacobian matrix is the transpose of the above matrix. Parameters ---------- theta : array, shape (12,) the parameters of the 3D affine transform x : array, shape (3,) the point at which to compute the Jacobian J : array, shape (3, 12) the buffer in which to write the Jacobian Returns ------- is_constant : int always returns 0, indicating that the Jacobian is not constant (it depends on the value of x) """ cdef: cnp.npy_intp j for j in range(3): J[j, :12] = 0 J[0, :3] = x[:3] J[0, 3] = 1 J[1, 4:7] = x[:3] J[1, 7] = 1 J[2, 8:11] = x[:3] J[2, 11] = 1 # This Jacobian depends on x (it's not constant): return 0 return 0 cdef void _get_identity_parameters(self, double[:] theta) nogil: r""" Parameter values corresponding to the identity Sets in theta the parameter values corresponding to the identity transform Parameters ---------- theta : array, shape (12,) buffer to write the parameters of the 3D affine transform """ theta[0], theta[1], theta[2], theta[3] = 1, 0, 0, 0 theta[4], theta[5], theta[6], theta[7] = 0, 1, 0, 0 theta[8], theta[9], theta[10], theta[11] = 0, 0, 1, 0 cdef void _param_to_matrix(self, double[:] theta, double[:, :] R) nogil: r""" Matrix associated with a general 3D affine transform The transformation is given by the matrix: A = [[a0, a1, a2, a3], [a4, a5, a6, a7], [a8, a9, a10, a11], [ 0, 0, 0, 1]] Parameters ---------- theta : array, shape (12,) the parameters of the 3D affine transform R : array, shape (4,4) the buffer in which to write the matrix """ R[0, 0], R[0, 1], R[0, 2] = theta[0], theta[1], theta[2] R[1, 0], R[1, 1], R[1, 2] = theta[4], theta[5], theta[6] R[2, 0], R[2, 1], R[2, 2] = theta[8], theta[9], theta[10] R[3, 0], R[3, 1], R[3, 2] = 0, 0, 0 R[0, 3] = theta[3] R[1, 3] = theta[7] R[2, 3] = theta[11] R[3, 3] = 1 regtransforms = {} regtransforms [('TRANSLATION', 2)] = TranslationTransform2D() regtransforms [('TRANSLATION', 3)] = TranslationTransform3D() regtransforms [('ROTATION', 2)] = RotationTransform2D() regtransforms [('ROTATION', 3)] = RotationTransform3D() regtransforms [('RIGID', 2)] = RigidTransform2D() regtransforms [('RIGID', 3)] = RigidTransform3D() regtransforms [('SCALING', 2)] = ScalingTransform2D() regtransforms [('SCALING', 3)] = ScalingTransform3D() regtransforms [('AFFINE', 2)] = AffineTransform2D() regtransforms [('AFFINE', 3)] = AffineTransform3D() dipy-0.10.1/dipy/align/vector_fields.pxd000066400000000000000000000040101263041327500201400ustar00rootroot00000000000000#!python #cython: boundscheck=False #cython: wraparound=False #cython: cdivision=True cdef inline double _apply_affine_3d_x0(double x0, double x1, double x2, double h, double[:, :] aff) nogil: r"""Multiplies aff by (x0, x1, x2, h), returns the 1st element of product Returns the first component of the product of the homogeneous matrix aff by (x0, x1, x2, h) """ return aff[0, 0] * x0 + aff[0, 1] * x1 + aff[0, 2] * x2 + h*aff[0, 3] cdef inline double _apply_affine_3d_x1(double x0, double x1, double x2, double h, double[:, :] aff) nogil: r"""Multiplies aff by (x0, x1, x2, h), returns the 2nd element of product Returns the first component of the product of the homogeneous matrix aff by (x0, x1, x2, h) """ return aff[1, 0] * x0 + aff[1, 1] * x1 + aff[1, 2] * x2 + h*aff[1, 3] cdef inline double _apply_affine_3d_x2(double x0, double x1, double x2, double h, double[:, :] aff) nogil: r"""Multiplies aff by (x0, x1, x2, h), returns the 3d element of product Returns the first component of the product of the homogeneous matrix aff by (x0, x1, x2, h) """ return aff[2, 0] * x0 + aff[2, 1] * x1 + aff[2, 2] * x2 + h*aff[2, 3] cdef inline double _apply_affine_2d_x0(double x0, double x1, double h, double[:, :] aff) nogil: r"""Multiplies aff by (x0, x1, h), returns the 1st element of product Returns the first component of the product of the homogeneous matrix aff by (x0, x1, h) """ return aff[0, 0] * x0 + aff[0, 1] * x1 + h*aff[0, 2] cdef inline double _apply_affine_2d_x1(double x0, double x1, double h, double[:, :] aff) nogil: r"""Multiplies aff by (x0, x1, h), returns the 2nd element of product Returns the first component of the product of the homogeneous matrix aff by (x0, x1, h) """ return aff[1, 0] * x0 + aff[1, 1] * x1 + h*aff[1, 2] dipy-0.10.1/dipy/align/vector_fields.pyx000066400000000000000000004050151263041327500201770ustar00rootroot00000000000000#!python #cython: boundscheck=False #cython: wraparound=False #cython: cdivision=True import numpy as np cimport numpy as cnp cimport cython from .fused_types cimport floating, number cdef extern from "dpy_math.h" nogil: double floor(double) double sqrt(double) def is_valid_affine(double[:, :] M, int dim): if M is None: return True if M.shape[0] < dim or M.shape[1] < dim + 1: return False if not np.all(np.isfinite(M)): return False return True def interpolate_vector_2d(floating[:, :, :] field, double[:, :] locations): r"""Bilinear interpolation of a 2D vector field Interpolates the 2D vector field at the given locations. This function is a wrapper for _interpolate_vector_2d for testing purposes, it is equivalent to using scipy.ndimage.interpolation.map_coordinates with bilinear interpolation at each vector component Parameters ---------- field : array, shape (S, R, 2) the 2D vector field to be interpolated locations : array, shape (n, 2) (locations[i,0], locations[i,1]), 0<=i= nr) or (djj >= nc)): out[0] = 0 out[1] = 0 return 0 # ---top-left ii = floor(dii) jj = floor(djj) calpha = dii - ii cbeta = djj - jj alpha = 1 - calpha beta = 1 - cbeta inside = 0 if (ii >= 0) and (jj >= 0): out[0] = alpha * beta * field[ii, jj, 0] out[1] = alpha * beta * field[ii, jj, 1] inside += 1 else: out[0] = 0 out[1] = 0 # ---top-right jj += 1 if (jj < nc) and (ii >= 0): out[0] += alpha * cbeta * field[ii, jj, 0] out[1] += alpha * cbeta * field[ii, jj, 1] inside += 1 # ---bottom-right ii += 1 if (jj < nc) and (ii < nr): out[0] += calpha * cbeta * field[ii, jj, 0] out[1] += calpha * cbeta * field[ii, jj, 1] inside += 1 # ---bottom-left jj -= 1 if (jj >= 0) and (ii < nr): out[0] += calpha * beta * field[ii, jj, 0] out[1] += calpha * beta * field[ii, jj, 1] inside += 1 return 1 if inside == 4 else 0 def interpolate_scalar_2d(floating[:, :] image, double[:, :] locations): r"""Bilinear interpolation of a 2D scalar image Interpolates the 2D image at the given locations. This function is a wrapper for _interpolate_scalar_2d for testing purposes, it is equivalent to scipy.ndimage.interpolation.map_coordinates with bilinear interpolation Parameters ---------- field : array, shape (S, R) the 2D image to be interpolated locations : array, shape (n, 2) (locations[i,0], locations[i,1]), 0<=i= nr) or (djj >= nc)): out[0] = 0 return 0 # ---top-left ii = floor(dii) jj = floor(djj) calpha = dii - ii cbeta = djj - jj alpha = 1 - calpha beta = 1 - cbeta inside = 0 if (ii >= 0) and (jj >= 0): out[0] = alpha * beta * image[ii, jj] inside += 1 else: out[0] = 0 # ---top-right jj += 1 if (jj < nc) and (ii >= 0): out[0] += alpha * cbeta * image[ii, jj] inside += 1 # ---bottom-right ii += 1 if (jj < nc) and (ii < nr): out[0] += calpha * cbeta * image[ii, jj] inside += 1 # ---bottom-left jj -= 1 if (jj >= 0) and (ii < nr): out[0] += calpha * beta * image[ii, jj] inside += 1 return 1 if inside == 4 else 0 def interpolate_scalar_nn_2d(number[:, :] image, double[:, :] locations): r"""Nearest neighbor interpolation of a 2D scalar image Interpolates the 2D image at the given locations. This function is a wrapper for _interpolate_scalar_nn_2d for testing purposes, it is equivalent to scipy.ndimage.interpolation.map_coordinates with nearest neighbor interpolation Parameters ---------- image : array, shape (S, R) the 2D image to be interpolated locations : array, shape (n, 2) (locations[i,0], locations[i,1]), 0<=i nr - 1) or (djj > nc - 1)): out[0] = 0 return 0 # find the top left index and the interpolation coefficients ii = floor(dii) jj = floor(djj) # no one is affected if((ii < 0) or (jj < 0) or (ii >= nr) or (jj >= nc)): out[0] = 0 return 0 calpha = dii - ii # by definition these factors are nonnegative cbeta = djj - jj alpha = 1 - calpha beta = 1 - cbeta if(alpha < calpha): ii += 1 if(beta < cbeta): jj += 1 # no one is affected if((ii < 0) or (jj < 0) or (ii >= nr) or (jj >= nc)): out[0] = 0 return 0 out[0] = image[ii, jj] return 1 def interpolate_scalar_nn_3d(number[:, :, :] image, double[:, :] locations): r"""Nearest neighbor interpolation of a 3D scalar image Interpolates the 3D image at the given locations. This function is a wrapper for _interpolate_scalar_nn_3d for testing purposes, it is equivalent to scipy.ndimage.interpolation.map_coordinates with nearest neighbor interpolation Parameters ---------- image : array, shape (S, R, C) the 3D image to be interpolated locations : array, shape (n, 3) (locations[i,0], locations[i,1], locations[i,2), 0<=ifloor(dkk) ii = floor(dii) jj = floor(djj) # no one is affected if not ((0 <= kk < ns) and (0 <= ii < nr) and (0 <= jj < nc)): out[0] = 0 return 0 cgamma = dkk - kk calpha = dii - ii cbeta = djj - jj alpha = 1 - calpha beta = 1 - cbeta gamma = 1 - cgamma if(gamma < cgamma): kk += 1 if(alpha < calpha): ii += 1 if(beta < cbeta): jj += 1 # no one is affected if not ((0 <= kk < ns) and (0 <= ii < nr) and (0 <= jj < nc)): out[0] = 0 return 0 out[0] = volume[kk, ii, jj] return 1 def interpolate_scalar_3d(floating[:, :, :] image, double[:, :] locations): r"""Trilinear interpolation of a 3D scalar image Interpolates the 3D image at the given locations. This function is a wrapper for _interpolate_scalar_3d for testing purposes, it is equivalent to scipy.ndimage.interpolation.map_coordinates with trilinear interpolation Parameters ---------- field : array, shape (S, R, C) the 3D image to be interpolated locations : array, shape (n, 3) (locations[i,0], locations[i,1], locations[i,2), 0<=ifloor(dkk) ii = floor(dii) jj = floor(djj) # no one is affected cgamma = dkk - kk calpha = dii - ii cbeta = djj - jj alpha = 1 - calpha beta = 1 - cbeta gamma = 1 - cgamma inside = 0 # ---top-left if (ii >= 0) and (jj >= 0) and (kk >= 0): out[0] = alpha * beta * gamma * volume[kk, ii, jj] inside += 1 else: out[0] = 0 # ---top-right jj += 1 if (ii >= 0) and (jj < nc) and (kk >= 0): out[0] += alpha * cbeta * gamma * volume[kk, ii, jj] inside += 1 # ---bottom-right ii += 1 if (ii < nr) and (jj < nc) and (kk >= 0): out[0] += calpha * cbeta * gamma * volume[kk, ii, jj] inside += 1 # ---bottom-left jj -= 1 if (ii < nr) and (jj >= 0) and (kk >= 0): out[0] += calpha * beta * gamma * volume[kk, ii, jj] inside += 1 kk += 1 if(kk < ns): ii -= 1 if (ii >= 0) and (jj >= 0): out[0] += alpha * beta * cgamma * volume[kk, ii, jj] inside += 1 jj += 1 if (ii >= 0) and (jj < nc): out[0] += alpha * cbeta * cgamma * volume[kk, ii, jj] inside += 1 # ---bottom-right ii += 1 if (ii < nr) and (jj < nc): out[0] += calpha * cbeta * cgamma * volume[kk, ii, jj] inside += 1 # ---bottom-left jj -= 1 if (ii < nr) and (jj >= 0): out[0] += calpha * beta * cgamma * volume[kk, ii, jj] inside += 1 return 1 if inside == 8 else 0 def interpolate_vector_3d(floating[:, :, :, :] field, double[:, :] locations): r"""Trilinear interpolation of a 3D vector field Interpolates the 3D vector field at the given locations. This function is a wrapper for _interpolate_vector_3d for testing purposes, it is equivalent to using scipy.ndimage.interpolation.map_coordinates with trilinear interpolation at each vector component Parameters ---------- field : array, shape (S, R, C, 3) the 3D vector field to be interpolated locations : array, shape (n, 3) (locations[i,0], locations[i,1], locations[i,2), 0<=ifloor(dkk) ii = floor(dii) jj = floor(djj) cgamma = dkk - kk calpha = dii - ii cbeta = djj - jj alpha = 1 - calpha beta = 1 - cbeta gamma = 1 - cgamma inside = 0 if (ii >= 0) and (jj >= 0) and (kk >= 0): out[0] = alpha * beta * gamma * field[kk, ii, jj, 0] out[1] = alpha * beta * gamma * field[kk, ii, jj, 1] out[2] = alpha * beta * gamma * field[kk, ii, jj, 2] inside += 1 else: out[0] = 0 out[1] = 0 out[2] = 0 # ---top-right jj += 1 if (jj < nc) and (ii >= 0) and (kk >= 0): out[0] += alpha * cbeta * gamma * field[kk, ii, jj, 0] out[1] += alpha * cbeta * gamma * field[kk, ii, jj, 1] out[2] += alpha * cbeta * gamma * field[kk, ii, jj, 2] inside += 1 # ---bottom-right ii += 1 if (jj < nc) and (ii < nr) and (kk >= 0): out[0] += calpha * cbeta * gamma * field[kk, ii, jj, 0] out[1] += calpha * cbeta * gamma * field[kk, ii, jj, 1] out[2] += calpha * cbeta * gamma * field[kk, ii, jj, 2] inside += 1 # ---bottom-left jj -= 1 if (jj >= 0) and (ii < nr) and (kk >= 0): out[0] += calpha * beta * gamma * field[kk, ii, jj, 0] out[1] += calpha * beta * gamma * field[kk, ii, jj, 1] out[2] += calpha * beta * gamma * field[kk, ii, jj, 2] inside += 1 kk += 1 if (kk < ns): ii -= 1 if (jj >= 0) and (ii >= 0): out[0] += alpha * beta * cgamma * field[kk, ii, jj, 0] out[1] += alpha * beta * cgamma * field[kk, ii, jj, 1] out[2] += alpha * beta * cgamma * field[kk, ii, jj, 2] inside += 1 jj += 1 if (jj < nc) and (ii >= 0): out[0] += alpha * cbeta * cgamma * field[kk, ii, jj, 0] out[1] += alpha * cbeta * cgamma * field[kk, ii, jj, 1] out[2] += alpha * cbeta * cgamma * field[kk, ii, jj, 2] inside += 1 # ---bottom-right ii += 1 if (jj < nc) and (ii < nr): out[0] += calpha * cbeta * cgamma * field[kk, ii, jj, 0] out[1] += calpha * cbeta * cgamma * field[kk, ii, jj, 1] out[2] += calpha * cbeta * cgamma * field[kk, ii, jj, 2] inside += 1 # ---bottom-left jj -= 1 if (jj >= 0) and (ii < nr): out[0] += calpha * beta * cgamma * field[kk, ii, jj, 0] out[1] += calpha * beta * cgamma * field[kk, ii, jj, 1] out[2] += calpha * beta * cgamma * field[kk, ii, jj, 2] inside += 1 return 1 if inside == 8 else 0 cdef void _compose_vector_fields_2d(floating[:, :, :] d1, floating[:, :, :] d2, double[:, :] premult_index, double[:, :] premult_disp, double time_scaling, floating[:, :, :] comp, double[:] stats) nogil: r"""Computes the composition of two 2D displacement fields Computes the composition of the two 2-D displacements d1 and d2. The evaluation of d2 at non-lattice points is computed using tri-linear interpolation. The actual composition is computed as: comp[i] = d1[i] + t * d2[ A * i + B * d1[i] ] where t = time_scaling, A = premult_index and B=premult_disp and i denotes the voxel coordinates of a voxel in d1's grid. Using this parameters it is possible to compose vector fields with arbitrary discretization: let R and S be the voxel-to-space transformation associated to d1 and d2, respectively then the composition at a voxel with coordinates i in d1's grid is given by: comp[i] = d1[i] + R*i + d2[Sinv*(R*i + d1[i])] - R*i (the R*i terms cancel each other) where Sinv = S^{-1} we can then define A = Sinv * R and B = Sinv to compute the composition using this function. Parameters ---------- d1 : array, shape (R, C, 2) first displacement field to be applied. R, C are the number of rows and columns of the displacement field, respectively. d2 : array, shape (R', C', 2) second displacement field to be applied. R', C' are the number of rows and columns of the displacement field, respectively. premult_index : array, shape (3, 3) the matrix A in the explanation above premult_disp : array, shape (3, 3) the matrix B in the explanation above time_scaling : float this corresponds to the time scaling 't' in the above explanation comp : array, shape (R, C, 2), same dimension as d1 on output, this array will contain the composition of the two fields stats : array, shape (3,) on output, this array will contain three statistics of the vector norms of the composition (maximum, mean, standard_deviation) Returns ------- comp : array, shape (R, C, 2), same dimension as d1 on output, this array will contain the composition of the two fields stats : array, shape (3,) on output, this array will contain three statistics of the vector norms of the composition (maximum, mean, standard_deviation) Notes ----- If d1[r,c] lies outside the domain of d2, then comp[r,c] will contain a zero vector. Warning: it is possible to use the same array reference for d1 and comp to effectively update d1 to the composition of d1 and d2 because previously updated values from d1 are no longer used (this is done to save memory and time). However, using the same array for d2 and comp may not be the intended operation (see comment below). """ cdef: cnp.npy_intp nr1 = d1.shape[0] cnp.npy_intp nc1 = d1.shape[1] cnp.npy_intp nr2 = d2.shape[0] cnp.npy_intp nc2 = d2.shape[1] int inside, cnt = 0 double maxNorm = 0 double meanNorm = 0 double stdNorm = 0 double nn cnp.npy_intp i, j double di, dj, dii, djj, diii, djjj for i in range(nr1): for j in range(nc1): # This is the only place we access d1[i, j] dii = d1[i, j, 0] djj = d1[i, j, 1] if premult_disp is None: di = dii dj = djj else: di = _apply_affine_2d_x0(dii, djj, 0, premult_disp) dj = _apply_affine_2d_x1(dii, djj, 0, premult_disp) if premult_index is None: diii = i djjj = j else: diii = _apply_affine_2d_x0(i, j, 1, premult_index) djjj = _apply_affine_2d_x1(i, j, 1, premult_index) diii += di djjj += dj # If d1 and comp are the same array, this will correctly update # d1[i,j], which will never be accessed again # If d2 and comp are the same array, then (diii, djjj) may be # in the neighborhood of a previously updated vector from d2, # which may be problematic inside = _interpolate_vector_2d[floating](d2, diii, djjj, comp[i, j]) if inside == 1: comp[i, j, 0] = time_scaling * comp[i, j, 0] + dii comp[i, j, 1] = time_scaling * comp[i, j, 1] + djj nn = comp[i, j, 0] ** 2 + comp[i, j, 1] ** 2 meanNorm += nn stdNorm += nn * nn cnt += 1 if(maxNorm < nn): maxNorm = nn else: comp[i, j, :] = 0 meanNorm /= cnt stats[0] = sqrt(maxNorm) stats[1] = sqrt(meanNorm) stats[2] = sqrt(stdNorm / cnt - meanNorm * meanNorm) def compose_vector_fields_2d(floating[:, :, :] d1, floating[:, :, :] d2, double[:, :] premult_index, double[:, :] premult_disp, double time_scaling, floating[:, :, :] comp): r"""Computes the composition of two 2D displacement fields Computes the composition of the two 2-D displacements d1 and d2. The evaluation of d2 at non-lattice points is computed using tri-linear interpolation. The actual composition is computed as: comp[i] = d1[i] + t * d2[ A * i + B * d1[i] ] where t = time_scaling, A = premult_index and B=premult_disp and i denotes the voxel coordinates of a voxel in d1's grid. Using this parameters it is possible to compose vector fields with arbitrary discretizations: let R and S be the voxel-to-space transformation associated to d1 and d2, respectively then the composition at a voxel with coordinates i in d1's grid is given by: comp[i] = d1[i] + R*i + d2[Sinv*(R*i + d1[i])] - R*i (the R*i terms cancel each other) where Sinv = S^{-1} we can then define A = Sinv * R and B = Sinv to compute the composition using this function. Parameters ---------- d1 : array, shape (R, C, 2) first displacement field to be applied. R, C are the number of rows and columns of the displacement field, respectively. d2 : array, shape (R', C', 2) second displacement field to be applied. R', C' are the number of rows and columns of the displacement field, respectively. premult_index : array, shape (3, 3) the matrix A in the explanation above premult_disp : array, shape (3, 3) the matrix B in the explanation above time_scaling : float this corresponds to the time scaling 't' in the above explanation comp : array, shape (R, C, 2) the buffer to write the composition to. If None, the buffer is created internally Returns ------- comp : array, shape (R, C, 2), same dimension as d1 on output, this array will contain the composition of the two fields stats : array, shape (3,) on output, this array will contain three statistics of the vector norms of the composition (maximum, mean, standard_deviation) """ cdef: double[:] stats = np.zeros(shape=(3,), dtype=np.float64) if comp is None: comp = np.zeros_like(d1) if not is_valid_affine(premult_index, 2): raise ValueError("Invalid index multiplication matrix") if not is_valid_affine(premult_disp, 2): raise ValueError("Invalid displacement multiplication matrix") _compose_vector_fields_2d[floating](d1, d2, premult_index, premult_disp, time_scaling, comp, stats) return comp, stats cdef void _compose_vector_fields_3d(floating[:, :, :, :] d1, floating[:, :, :, :] d2, double[:, :] premult_index, double[:, :] premult_disp, double t, floating[:, :, :, :] comp, double[:] stats) nogil: r"""Computes the composition of two 3D displacement fields Computes the composition of the two 3-D displacements d1 and d2. The evaluation of d2 at non-lattice points is computed using tri-linear interpolation. The actual composition is computed as: comp[i] = d1[i] + t * d2[ A * i + B * d1[i] ] where t = time_scaling, A = premult_index and B=premult_disp and i denotes the voxel coordinates of a voxel in d1's grid. Using this parameters it is possible to compose vector fields with arbitrary discretization: let R and S be the voxel-to-space transformation associated to d1 and d2, respectively then the composition at a voxel with coordinates i in d1's grid is given by: comp[i] = d1[i] + R*i + d2[Sinv*(R*i + d1[i])] - R*i (the R*i terms cancel each other) where Sinv = S^{-1} we can then define A = Sinv * R and B = Sinv to compute the composition using this function. Parameters ---------- d1 : array, shape (S, R, C, 3) first displacement field to be applied. S, R, C are the number of slices, rows and columns of the displacement field, respectively. d2 : array, shape (S', R', C', 3) second displacement field to be applied. R', C' are the number of rows and columns of the displacement field, respectively. premult_index : array, shape (4, 4) the matrix A in the explanation above premult_disp : array, shape (4, 4) the matrix B in the explanation above time_scaling : float this corresponds to the time scaling 't' in the above explanation comp : array, shape (S, R, C, 3), same dimension as d1 on output, this array will contain the composition of the two fields stats : array, shape (3,) on output, this array will contain three statistics of the vector norms of the composition (maximum, mean, standard_deviation) Returns ------- comp : array, shape (S, R, C, 3), same dimension as d1 on output, this array will contain the composition of the two fields stats : array, shape (3,) on output, this array will contain three statistics of the vector norms of the composition (maximum, mean, standard_deviation) Notes ----- If d1[s,r,c] lies outside the domain of d2, then comp[s,r,c] will contain a zero vector. Warning: it is possible to use the same array reference for d1 and comp to effectively update d1 to the composition of d1 and d2 because previously updated values from d1 are no longer used (this is done to save memory and time). However, using the same array for d2 and comp may not be the intended operation (see comment below). """ cdef: cnp.npy_intp ns1 = d1.shape[0] cnp.npy_intp nr1 = d1.shape[1] cnp.npy_intp nc1 = d1.shape[2] cnp.npy_intp ns2 = d2.shape[0] cnp.npy_intp nr2 = d2.shape[1] cnp.npy_intp nc2 = d2.shape[2] int inside, cnt = 0 double maxNorm = 0 double meanNorm = 0 double stdNorm = 0 double nn cnp.npy_intp i, j, k double di, dj, dk, dii, djj, dkk, diii, djjj, dkkk for k in range(ns1): for i in range(nr1): for j in range(nc1): # This is the only place we access d1[k, i, j] dkk = d1[k, i, j, 0] dii = d1[k, i, j, 1] djj = d1[k, i, j, 2] if premult_disp is None: dk = dkk di = dii dj = djj else: dk = _apply_affine_3d_x0(dkk, dii, djj, 0, premult_disp) di = _apply_affine_3d_x1(dkk, dii, djj, 0, premult_disp) dj = _apply_affine_3d_x2(dkk, dii, djj, 0, premult_disp) if premult_index is None: dkkk = k diii = i djjj = j else: dkkk = _apply_affine_3d_x0(k, i, j, 1, premult_index) diii = _apply_affine_3d_x1(k, i, j, 1, premult_index) djjj = _apply_affine_3d_x2(k, i, j, 1, premult_index) dkkk += dk diii += di djjj += dj # If d1 and comp are the same array, this will correctly update # d1[k,i,j], which will never be accessed again # If d2 and comp are the same array, then (dkkk, diii, djjj) # may be in the neighborhood of a previously updated vector # from d2, which may be problematic inside = _interpolate_vector_3d[floating](d2, dkkk, diii, djjj, comp[k, i, j]) if inside == 1: comp[k, i, j, 0] = t * comp[k, i, j, 0] + dkk comp[k, i, j, 1] = t * comp[k, i, j, 1] + dii comp[k, i, j, 2] = t * comp[k, i, j, 2] + djj nn = (comp[k, i, j, 0] ** 2 + comp[k, i, j, 1] ** 2 + comp[k, i, j, 2]**2) meanNorm += nn stdNorm += nn * nn cnt += 1 if(maxNorm < nn): maxNorm = nn else: comp[k, i, j, :] = 0 meanNorm /= cnt stats[0] = sqrt(maxNorm) stats[1] = sqrt(meanNorm) stats[2] = sqrt(stdNorm / cnt - meanNorm * meanNorm) def compose_vector_fields_3d(floating[:, :, :, :] d1, floating[:, :, :, :] d2, double[:, :] premult_index, double[:, :] premult_disp, double time_scaling, floating[:, :, :, :] comp): r"""Computes the composition of two 3D displacement fields Computes the composition of the two 3-D displacements d1 and d2. The evaluation of d2 at non-lattice points is computed using tri-linear interpolation. The actual composition is computed as: comp[i] = d1[i] + t * d2[ A * i + B * d1[i] ] where t = time_scaling, A = premult_index and B=premult_disp and i denotes the voxel coordinates of a voxel in d1's grid. Using this parameters it is possible to compose vector fields with arbitrary discretization: let R and S be the voxel-to-space transformation associated to d1 and d2, respectively then the composition at a voxel with coordinates i in d1's grid is given by: comp[i] = d1[i] + R*i + d2[Sinv*(R*i + d1[i])] - R*i (the R*i terms cancel each other) where Sinv = S^{-1} we can then define A = Sinv * R and B = Sinv to compute the composition using this function. Parameters ---------- d1 : array, shape (S, R, C, 3) first displacement field to be applied. S, R, C are the number of slices, rows and columns of the displacement field, respectively. d2 : array, shape (S', R', C', 3) second displacement field to be applied. R', C' are the number of rows and columns of the displacement field, respectively. premult_index : array, shape (4, 4) the matrix A in the explanation above premult_disp : array, shape (4, 4) the matrix B in the explanation above time_scaling : float this corresponds to the time scaling 't' in the above explanation comp : array, shape (S, R, C, 3), same dimension as d1 the buffer to write the composition to. If None, the buffer will be created internally Returns ------- comp : array, shape (S, R, C, 3), same dimension as d1 on output, this array will contain the composition of the two fields stats : array, shape (3,) on output, this array will contain three statistics of the vector norms of the composition (maximum, mean, standard_deviation) Notes ----- If d1[s,r,c] lies outside the domain of d2, then comp[s,r,c] will contain a zero vector. """ cdef: double[:] stats = np.zeros(shape=(3,), dtype=np.float64) if comp is None: comp = np.zeros_like(d1) if not is_valid_affine(premult_index, 3): raise ValueError("Invalid index pre-multiplication matrix") if not is_valid_affine(premult_disp, 3): raise ValueError("Invalid displacement pre-multiplication matrix") _compose_vector_fields_3d[floating](d1, d2, premult_index, premult_disp, time_scaling, comp, stats) return comp, stats def invert_vector_field_fixed_point_2d(floating[:, :, :] d, double[:, :] d_world2grid, double[:] spacing, int max_iter, double tolerance, floating[:, :, :] start=None): r"""Computes the inverse of a 2D displacement fields Computes the inverse of the given 2-D displacement field d using the fixed-point algorithm [1]. [1] Chen, M., Lu, W., Chen, Q., Ruchala, K. J., & Olivera, G. H. (2008). A simple fixed-point approach to invert a deformation field. Medical Physics, 35(1), 81. doi:10.1118/1.2816107 Parameters ---------- d : array, shape (R, C, 2) the 2-D displacement field to be inverted d_world2grid : array, shape (3, 3) the space-to-grid transformation associated to the displacement field d (transforming physical space coordinates to voxel coordinates of the displacement field grid) spacing :array, shape (2,) the spacing between voxels (voxel size along each axis) max_iter : int maximum number of iterations to be performed tolerance : float maximum tolerated inversion error start : array, shape (R, C) an approximation to the inverse displacement field (if no approximation is available, None can be provided and the start displacement field will be zero) Returns ------- p : array, shape (R, C, 2) the inverse displacement field Notes ----- We assume that the displacement field is an endomorphism so that the shape and voxel-to-space transformation of the inverse field's discretization is the same as those of the input displacement field. The 'inversion error' at iteration t is defined as the mean norm of the displacement vectors of the input displacement field composed with the inverse at iteration t. """ cdef: cnp.npy_intp nr = d.shape[0] cnp.npy_intp nc = d.shape[1] int iter_count, current, flag double difmag, mag, maxlen, step_factor double epsilon double error = 1 + tolerance double di, dj, dii, djj double sr = spacing[0], sc = spacing[1] ftype = np.asarray(d).dtype cdef: double[:] stats = np.zeros(shape=(2,), dtype=np.float64) double[:] substats = np.empty(shape=(3,), dtype=np.float64) double[:, :] norms = np.zeros(shape=(nr, nc), dtype=np.float64) floating[:, :, :] p = np.zeros(shape=(nr, nc, 2), dtype=ftype) floating[:, :, :] q = np.zeros(shape=(nr, nc, 2), dtype=ftype) if not is_valid_affine(d_world2grid, 2): raise ValueError("Invalid world-to-image transform") if start is not None: p[...] = start with nogil: iter_count = 0 while (iter_count < max_iter) and (tolerance < error): if iter_count == 0: epsilon = 0.75 else: epsilon = 0.5 _compose_vector_fields_2d[floating](p, d, None, d_world2grid, 1.0, q, substats) difmag = 0 error = 0 for i in range(nr): for j in range(nc): mag = sqrt((q[i, j, 0]/sr) ** 2 + (q[i, j, 1]/sc) ** 2) norms[i, j] = mag error += mag if(difmag < mag): difmag = mag maxlen = difmag * epsilon for i in range(nr): for j in range(nc): if norms[i, j] > maxlen: step_factor = epsilon * maxlen / norms[i, j] else: step_factor = epsilon p[i, j, 0] = p[i, j, 0] - step_factor * q[i, j, 0] p[i, j, 1] = p[i, j, 1] - step_factor * q[i, j, 1] error /= (nr * nc) iter_count += 1 stats[0] = substats[1] stats[1] = iter_count return p def invert_vector_field_fixed_point_3d(floating[:, :, :, :] d, double[:, :] d_world2grid, double[:] spacing, int max_iter, double tol, floating[:, :, :, :] start=None): r"""Computes the inverse of a 3D displacement fields Computes the inverse of the given 3-D displacement field d using the fixed-point algorithm [1]. [1] Chen, M., Lu, W., Chen, Q., Ruchala, K. J., & Olivera, G. H. (2008). A simple fixed-point approach to invert a deformation field. Medical Physics, 35(1), 81. doi:10.1118/1.2816107 Parameters ---------- d : array, shape (S, R, C, 3) the 3-D displacement field to be inverted d_world2grid : array, shape (4, 4) the space-to-grid transformation associated to the displacement field d (transforming physical space coordinates to voxel coordinates of the displacement field grid) spacing :array, shape (3,) the spacing between voxels (voxel size along each axis) max_iter : int maximum number of iterations to be performed tol : float maximum tolerated inversion error start : array, shape (S, R, C) an approximation to the inverse displacement field (if no approximation is available, None can be provided and the start displacement field will be zero) Returns ------- p : array, shape (S, R, C, 3) the inverse displacement field Notes ----- We assume that the displacement field is an endomorphism so that the shape and voxel-to-space transformation of the inverse field's discretization is the same as those of the input displacement field. The 'inversion error' at iteration t is defined as the mean norm of the displacement vectors of the input displacement field composed with the inverse at iteration t. """ cdef: cnp.npy_intp ns = d.shape[0] cnp.npy_intp nr = d.shape[1] cnp.npy_intp nc = d.shape[2] int iter_count, current double dkk, dii, djj, dk, di, dj double difmag, mag, maxlen, step_factor double epsilon = 0.5 double error = 1 + tol double ss = spacing[0], sr = spacing[1], sc = spacing[2] ftype = np.asarray(d).dtype cdef: double[:] stats = np.zeros(shape=(2,), dtype=np.float64) double[:] substats = np.zeros(shape=(3,), dtype=np.float64) double[:, :, :] norms = np.zeros(shape=(ns, nr, nc), dtype=np.float64) floating[:, :, :, :] p = np.zeros(shape=(ns, nr, nc, 3), dtype=ftype) floating[:, :, :, :] q = np.zeros(shape=(ns, nr, nc, 3), dtype=ftype) if not is_valid_affine(d_world2grid, 3): raise ValueError("Invalid world-to-image transform") if start is not None: p[...] = start with nogil: iter_count = 0 difmag = 1 while (0.1 < difmag) and (iter_count < max_iter) and (tol < error): if iter_count == 0: epsilon = 0.75 else: epsilon = 0.5 _compose_vector_fields_3d[floating](p, d, None, d_world2grid, 1.0, q, substats) difmag = 0 error = 0 for k in range(ns): for i in range(nr): for j in range(nc): mag = sqrt((q[k, i, j, 0]/ss) ** 2 + (q[k, i, j, 1]/sr) ** 2 + (q[k, i, j, 2]/sc) ** 2) norms[k, i, j] = mag error += mag if(difmag < mag): difmag = mag maxlen = difmag*epsilon for k in range(ns): for i in range(nr): for j in range(nc): if norms[k, i, j] > maxlen: step_factor = epsilon * maxlen / norms[k, i, j] else: step_factor = epsilon p[k, i, j, 0] = (p[k, i, j, 0] - step_factor * q[k, i, j, 0]) p[k, i, j, 1] = (p[k, i, j, 1] - step_factor * q[k, i, j, 1]) p[k, i, j, 2] = (p[k, i, j, 2] - step_factor * q[k, i, j, 2]) error /= (ns * nr * nc) iter_count += 1 stats[0] = error stats[1] = iter_count return p def simplify_warp_function_2d(floating[:, :, :] d, double[:, :] affine_idx_in, double[:, :] affine_idx_out, double[:, :] affine_disp, int[:] out_shape): r""" Simplifies a nonlinear warping function combined with an affine transform Modifies the given deformation field by incorporating into it a an affine transformation and voxel-to-space transforms associated to the discretization of its domain and codomain. The resulting transformation may be regarded as operating on the image spaces given by the domain and codomain discretization. More precisely, the resulting transform is of the form: (1) T[i] = W * d[U * i] + V * i Where U = affine_idx_in, V = affine_idx_out, W = affine_disp. Both the direct and inverse transforms of a DiffeomorphicMap can be written in this form: Direct: Let D be the voxel-to-space transform of the domain's discretization, P be the pre-align matrix, Rinv the space-to-voxel transform of the reference grid (the grid the displacement field is defined on) and Cinv be the space-to-voxel transform of the codomain's discretization. Then, for each i in the domain's grid, the direct transform is given by (2) T[i] = Cinv * d[Rinv * P * D * i] + Cinv * P * D * i and we identify U = Rinv * P * D, V = Cinv * P * D, W = Cinv Inverse: Let C be the voxel-to-space transform of the codomain's discretization, Pinv be the inverse of the pre-align matrix, Rinv the space-to-voxel transform of the reference grid (the grid the displacement field is defined on) and Dinv be the space-to-voxel transform of the domain's discretization. Then, for each j in the codomain's grid, the inverse transform is given by (3) Tinv[j] = Dinv * Pinv * d[Rinv * C * j] + Dinv * Pinv * C * j and we identify U = Rinv * C, V = Dinv * Pinv * C, W = Dinv * Pinv Parameters ---------- d : array, shape (R', C', 2) the non-linear part of the transformation (displacement field) affine_idx_in : array, shape (3, 3) the matrix U in eq. (1) above affine_idx_out : array, shape (3, 3) the matrix V in eq. (1) above affine_disp : array, shape (3, 3) the matrix W in eq. (1) above out_shape : array, shape (2,) the number of rows and columns of the sampling grid Returns ------- out : array, shape = out_shape the simplified transformation given by one single displacement field """ cdef: cnp.npy_intp nrows = out_shape[0] cnp.npy_intp ncols = out_shape[1] cnp.npy_intp i, j double di, dj, dii, djj floating[:] tmp = np.zeros((2,), dtype=np.asarray(d).dtype) floating[:, :, :] out = np.zeros(shape=(nrows, ncols, 2), dtype=np.asarray(d).dtype) if not is_valid_affine(affine_idx_in, 2): raise ValueError("Invalid inner index multiplication matrix") if not is_valid_affine(affine_idx_out, 2): raise ValueError("Invalid outer index multiplication matrix") if not is_valid_affine(affine_disp, 2): raise ValueError("Invalid displacement multiplication matrix") with nogil: for i in range(nrows): for j in range(ncols): # Apply inner index pre-multiplication if affine_idx_in is None: dii = d[i, j, 0] djj = d[i, j, 1] else: di = _apply_affine_2d_x0( i, j, 1, affine_idx_in) dj = _apply_affine_2d_x1( i, j, 1, affine_idx_in) _interpolate_vector_2d[floating](d, di, dj, tmp) dii = tmp[0] djj = tmp[1] # Apply displacement multiplication if affine_disp is not None: di = _apply_affine_2d_x0( dii, djj, 0, affine_disp) dj = _apply_affine_2d_x1( dii, djj, 0, affine_disp) else: di = dii dj = djj # Apply outer index multiplication and add the displacements if affine_idx_out is not None: out[i, j, 0] = di + _apply_affine_2d_x0(i, j, 1, affine_idx_out) - i out[i, j, 1] = dj + _apply_affine_2d_x1(i, j, 1, affine_idx_out) - j else: out[i, j, 0] = di out[i, j, 1] = dj return out def simplify_warp_function_3d(floating[:, :, :, :] d, double[:, :] affine_idx_in, double[:, :] affine_idx_out, double[:, :] affine_disp, int[:] out_shape): r""" Simplifies a nonlinear warping function combined with an affine transform Modifies the given deformation field by incorporating into it a an affine transformation and voxel-to-space transforms associated to the discretization of its domain and codomain. The resulting transformation may be regarded as operating on the image spaces given by the domain and codomain discretization. More precisely, the resulting transform is of the form: (1) T[i] = W * d[U * i] + V * i Where U = affine_idx_in, V = affine_idx_out, W = affine_disp. Both the direct and inverse transforms of a DiffeomorphicMap can be written in this form: Direct: Let D be the voxel-to-space transform of the domain's discretization, P be the pre-align matrix, Rinv the space-to-voxel transform of the reference grid (the grid the displacement field is defined on) and Cinv be the space-to-voxel transform of the codomain's discretization. Then, for each i in the domain's grid, the direct transform is given by (2) T[i] = Cinv * d[Rinv * P * D * i] + Cinv * P * D * i and we identify U = Rinv * P * D, V = Cinv * P * D, W = Cinv Inverse: Let C be the voxel-to-space transform of the codomain's discretization, Pinv be the inverse of the pre-align matrix, Rinv the space-to-voxel transform of the reference grid (the grid the displacement field is defined on) and Dinv be the space-to-voxel transform of the domain's discretization. Then, for each j in the codomain's grid, the inverse transform is given by (3) Tinv[j] = Dinv * Pinv * d[Rinv * C * j] + Dinv * Pinv * C * j and we identify U = Rinv * C, V = Dinv * Pinv * C, W = Dinv * Pinv Parameters ---------- d : array, shape (S', R', C', 3) the non-linear part of the transformation (displacement field) affine_idx_in : array, shape (4, 4) the matrix U in eq. (1) above affine_idx_out : array, shape (4, 4) the matrix V in eq. (1) above affine_disp : array, shape (4, 4) the matrix W in eq. (1) above out_shape : array, shape (3,) the number of slices, rows and columns of the sampling grid Returns ------- out : array, shape = out_shape the simplified transformation given by one single displacement field """ cdef: cnp.npy_intp nslices = out_shape[0] cnp.npy_intp nrows = out_shape[1] cnp.npy_intp ncols = out_shape[2] cnp.npy_intp i, j, k, inside double di, dj, dk, dii, djj, dkk floating[:] tmp = np.zeros((3,), dtype=np.asarray(d).dtype) floating[:, :, :, :] out = np.zeros(shape=(nslices, nrows, ncols, 3), dtype=np.asarray(d).dtype) if not is_valid_affine(affine_idx_in, 3): raise ValueError("Invalid inner index multiplication matrix") if not is_valid_affine(affine_idx_out, 3): raise ValueError("Invalid outer index multiplication matrix") if not is_valid_affine(affine_disp, 3): raise ValueError("Invalid displacement multiplication matrix") with nogil: for k in range(nslices): for i in range(nrows): for j in range(ncols): if affine_idx_in is None: dkk = d[k, i, j, 0] dii = d[k, i, j, 1] djj = d[k, i, j, 2] else: dk = _apply_affine_3d_x0( k, i, j, 1, affine_idx_in) di = _apply_affine_3d_x1( k, i, j, 1, affine_idx_in) dj = _apply_affine_3d_x2( k, i, j, 1, affine_idx_in) inside = _interpolate_vector_3d[floating](d, dk, di, dj, tmp) dkk = tmp[0] dii = tmp[1] djj = tmp[2] if affine_disp is not None: dk = _apply_affine_3d_x0( dkk, dii, djj, 0, affine_disp) di = _apply_affine_3d_x1( dkk, dii, djj, 0, affine_disp) dj = _apply_affine_3d_x2( dkk, dii, djj, 0, affine_disp) else: dk = dkk di = dii dj = djj if affine_idx_out is not None: out[k, i, j, 0] = dk +\ _apply_affine_3d_x0(k, i, j, 1, affine_idx_out) - k out[k, i, j, 1] = di +\ _apply_affine_3d_x1(k, i, j, 1, affine_idx_out) - i out[k, i, j, 2] = dj +\ _apply_affine_3d_x2(k, i, j, 1, affine_idx_out) - j else: out[k, i, j, 0] = dk out[k, i, j, 1] = di out[k, i, j, 2] = dj return out def reorient_vector_field_2d(floating[:, :, :] d, double[:, :] affine): r"""Linearly transforms all vectors of a 2D displacement field Modifies the input displacement field by multiplying each displacement vector by the given matrix. Note that the elements of the displacement field are vectors, not points, so their last homogeneous coordinate is zero, not one, and therefore the translation component of the affine transform will not have any effect on them. Parameters ---------- d : array, shape (R, C, 2) the displacement field to be re-oriented affine: array, shape (3, 3) the matrix to be applied """ cdef: cnp.npy_intp nrows = d.shape[0] cnp.npy_intp ncols = d.shape[1] cnp.npy_intp i, j double di, dj if not is_valid_affine(affine, 2): raise ValueError("Invalid affine transform matrix") if affine is None: return with nogil: for i in range(nrows): for j in range(ncols): di = d[i, j, 0] dj = d[i, j, 1] d[i, j, 0] = _apply_affine_2d_x0(di, dj, 0, affine) d[i, j, 1] = _apply_affine_2d_x1(di, dj, 0, affine) def reorient_vector_field_3d(floating[:, :, :, :] d, double[:, :] affine): r"""Linearly transforms all vectors of a 3D displacement field Modifies the input displacement field by multiplying each displacement vector by the given matrix. Note that the elements of the displacement field are vectors, not points, so their last homogeneous coordinate is zero, not one, and therefore the translation component of the affine transform will not have any effect on them. Parameters ---------- d : array, shape (S, R, C, 3) the displacement field to be re-oriented affine : array, shape (4, 4) the matrix to be applied """ cdef: cnp.npy_intp nslices = d.shape[0] cnp.npy_intp nrows = d.shape[1] cnp.npy_intp ncols = d.shape[2] cnp.npy_intp i, j, k double di, dj, dk if not is_valid_affine(affine, 3): raise ValueError("Invalid affine transform matrix") if affine is None: return with nogil: for k in range(nslices): for i in range(nrows): for j in range(ncols): dk = d[k, i, j, 0] di = d[k, i, j, 1] dj = d[k, i, j, 2] d[k, i, j, 0] = _apply_affine_3d_x0(dk, di, dj, 0, affine) d[k, i, j, 1] = _apply_affine_3d_x1(dk, di, dj, 0, affine) d[k, i, j, 2] = _apply_affine_3d_x2(dk, di, dj, 0, affine) def downsample_scalar_field_3d(floating[:, :, :] field): r"""Down-samples the input volume by a factor of 2 Down-samples the input volume by a factor of 2. The value at each voxel of the resulting volume is the average of its surrounding voxels in the original volume. Parameters ---------- field : array, shape (S, R, C) the volume to be down-sampled Returns ------- down : array, shape (S', R', C') the down-sampled displacement field, where S' = ceil(S/2), R'= ceil(R/2), C'=ceil(C/2) """ ftype = np.asarray(field).dtype cdef: cnp.npy_intp ns = field.shape[0] cnp.npy_intp nr = field.shape[1] cnp.npy_intp nc = field.shape[2] cnp.npy_intp nns = (ns + 1) // 2 cnp.npy_intp nnr = (nr + 1) // 2 cnp.npy_intp nnc = (nc + 1) // 2 cnp.npy_intp i, j, k, ii, jj, kk floating[:, :, :] down = np.zeros((nns, nnr, nnc), dtype=ftype) int[:, :, :] cnt = np.zeros((nns, nnr, nnc), dtype=np.int32) with nogil: for k in range(ns): for i in range(nr): for j in range(nc): kk = k // 2 ii = i // 2 jj = j // 2 down[kk, ii, jj] += field[k, i, j] cnt[kk, ii, jj] += 1 for k in range(nns): for i in range(nnr): for j in range(nnc): if cnt[k, i, j] > 0: down[k, i, j] /= cnt[k, i, j] return down def downsample_displacement_field_3d(floating[:, :, :, :] field): r"""Down-samples the input 3D vector field by a factor of 2 Down-samples the input vector field by a factor of 2. This operation is equivalent to dividing the input image into 2x2x2 cubes and averaging the 8 vectors. The resulting field consists of these average vectors. Parameters ---------- field : array, shape (S, R, C) the vector field to be down-sampled Returns ------- down : array, shape (S', R', C') the down-sampled displacement field, where S' = ceil(S/2), R'= ceil(R/2), C'=ceil(C/2) """ ftype = np.asarray(field).dtype cdef: cnp.npy_intp ns = field.shape[0] cnp.npy_intp nr = field.shape[1] cnp.npy_intp nc = field.shape[2] cnp.npy_intp nns = (ns + 1) // 2 cnp.npy_intp nnr = (nr + 1) // 2 cnp.npy_intp nnc = (nc + 1) // 2 cnp.npy_intp i, j, k, ii, jj, kk floating[:, :, :, :] down = np.zeros((nns, nnr, nnc, 3), dtype=ftype) int[:, :, :] cnt = np.zeros((nns, nnr, nnc), dtype=np.int32) with nogil: for k in range(ns): for i in range(nr): for j in range(nc): kk = k // 2 ii = i // 2 jj = j // 2 down[kk, ii, jj, 0] += field[k, i, j, 0] down[kk, ii, jj, 1] += field[k, i, j, 1] down[kk, ii, jj, 2] += field[k, i, j, 2] cnt[kk, ii, jj] += 1 for k in range(nns): for i in range(nnr): for j in range(nnc): if cnt[k, i, j] > 0: down[k, i, j, 0] /= cnt[k, i, j] down[k, i, j, 1] /= cnt[k, i, j] down[k, i, j, 2] /= cnt[k, i, j] return down def downsample_scalar_field_2d(floating[:, :] field): r"""Down-samples the input 2D image by a factor of 2 Down-samples the input image by a factor of 2. The value at each pixel of the resulting image is the average of its surrounding pixels in the original image. Parameters ---------- field : array, shape (R, C) the image to be down-sampled Returns ------- down : array, shape (R', C') the down-sampled displacement field, where R'= ceil(R/2), C'=ceil(C/2) """ ftype = np.asarray(field).dtype cdef: cnp.npy_intp nr = field.shape[0] cnp.npy_intp nc = field.shape[1] cnp.npy_intp nnr = (nr + 1) // 2 cnp.npy_intp nnc = (nc + 1) // 2 cnp.npy_intp i, j, ii, jj floating[:, :] down = np.zeros(shape=(nnr, nnc), dtype=ftype) int[:, :] cnt = np.zeros(shape=(nnr, nnc), dtype=np.int32) with nogil: for i in range(nr): for j in range(nc): ii = i // 2 jj = j // 2 down[ii, jj] += field[i, j] cnt[ii, jj] += 1 for i in range(nnr): for j in range(nnc): if cnt[i, j] > 0: down[i, j] /= cnt[i, j] return down def downsample_displacement_field_2d(floating[:, :, :] field): r"""Down-samples the 2D input vector field by a factor of 2 Down-samples the input vector field by a factor of 2. The value at each pixel of the resulting field is the average of its surrounding pixels in the original field. Parameters ---------- field : array, shape (R, C) the vector field to be down-sampled Returns ------- down : array, shape (R', C') the down-sampled displacement field, where R'= ceil(R/2), C'=ceil(C/2), """ ftype = np.asarray(field).dtype cdef: cnp.npy_intp nr = field.shape[0] cnp.npy_intp nc = field.shape[1] cnp.npy_intp nnr = (nr + 1) // 2 cnp.npy_intp nnc = (nc + 1) // 2 cnp.npy_intp i, j, ii, jj floating[:, :, :] down = np.zeros((nnr, nnc, 2), dtype=ftype) int[:, :] cnt = np.zeros((nnr, nnc), dtype=np.int32) with nogil: for i in range(nr): for j in range(nc): ii = i // 2 jj = j // 2 down[ii, jj, 0] += field[i, j, 0] down[ii, jj, 1] += field[i, j, 1] cnt[ii, jj] += 1 for i in range(nnr): for j in range(nnc): if cnt[i, j] > 0: down[i, j, 0] /= cnt[i, j] down[i, j, 1] /= cnt[i, j] return down def warp_3d(floating[:, :, :] volume, floating[:, :, :, :] d1, double[:, :] affine_idx_in=None, double[:, :] affine_idx_out=None, double[:, :] affine_disp=None, int[:] out_shape=None): r"""Warps a 3D volume using trilinear interpolation Deforms the input volume under the given transformation. The warped volume is computed using tri-linear interpolation and is given by: (1) warped[i] = volume[ C * d1[A*i] + B*i ] where A = affine_idx_in, B = affine_idx_out, C = affine_disp and i denotes the discrete coordinates of a voxel in the sampling grid of shape = out_shape. To illustrate the use of this function, consider a displacement field d1 with grid-to-space transformation R, a volume with grid-to-space transformation T and let's say we want to sample the warped volume on a grid with grid-to-space transformation S (sampling grid). For each voxel in the sampling grid with discrete coordinates i, the warped volume is given by: (2) warped[i] = volume[Tinv * ( d1[Rinv * S * i] + S * i ) ] where Tinv = T^{-1} and Rinv = R^{-1}. By identifying A = Rinv * S, B = Tinv * S, C = Tinv we can use this function to efficiently warp the input image. Parameters ---------- volume : array, shape (S, R, C) the input volume to be transformed d1 : array, shape (S', R', C', 3) the displacement field driving the transformation affine_idx_in : array, shape (4, 4) the matrix A in eq. (1) above affine_idx_out : array, shape (4, 4) the matrix B in eq. (1) above affine_disp : array, shape (4, 4) the matrix C in eq. (1) above out_shape : array, shape (3,) the number of slices, rows and columns of the sampling grid Returns ------- warped : array, shape = out_shape the transformed volume """ cdef: cnp.npy_intp nslices = volume.shape[0] cnp.npy_intp nrows = volume.shape[1] cnp.npy_intp ncols = volume.shape[2] cnp.npy_intp nsVol = volume.shape[0] cnp.npy_intp nrVol = volume.shape[1] cnp.npy_intp ncVol = volume.shape[2] cnp.npy_intp i, j, k int inside double dkk, dii, djj, dk, di, dj if not is_valid_affine(affine_idx_in, 3): raise ValueError("Invalid inner index multiplication matrix") if not is_valid_affine(affine_idx_out, 3): raise ValueError("Invalid outer index multiplication matrix") if not is_valid_affine(affine_disp, 3): raise ValueError("Invalid displacement multiplication matrix") if out_shape is not None: nslices = out_shape[0] nrows = out_shape[1] ncols = out_shape[2] elif d1 is not None: nslices = d1.shape[0] nrows = d1.shape[1] ncols = d1.shape[2] cdef floating[:, :, :] warped = np.zeros(shape=(nslices, nrows, ncols), dtype=np.asarray(volume).dtype) cdef floating[:] tmp = np.zeros(shape=(3,), dtype = np.asarray(d1).dtype) with nogil: for k in range(nslices): for i in range(nrows): for j in range(ncols): if affine_idx_in is None: dkk = d1[k, i, j, 0] dii = d1[k, i, j, 1] djj = d1[k, i, j, 2] else: dk = _apply_affine_3d_x0( k, i, j, 1, affine_idx_in) di = _apply_affine_3d_x1( k, i, j, 1, affine_idx_in) dj = _apply_affine_3d_x2( k, i, j, 1, affine_idx_in) inside = _interpolate_vector_3d[floating](d1, dk, di, dj, tmp) dkk = tmp[0] dii = tmp[1] djj = tmp[2] if affine_disp is not None: dk = _apply_affine_3d_x0( dkk, dii, djj, 0, affine_disp) di = _apply_affine_3d_x1( dkk, dii, djj, 0, affine_disp) dj = _apply_affine_3d_x2( dkk, dii, djj, 0, affine_disp) else: dk = dkk di = dii dj = djj if affine_idx_out is not None: dkk = dk + _apply_affine_3d_x0(k, i, j, 1, affine_idx_out) dii = di + _apply_affine_3d_x1(k, i, j, 1, affine_idx_out) djj = dj + _apply_affine_3d_x2(k, i, j, 1, affine_idx_out) else: dkk = dk + k dii = di + i djj = dj + j inside = _interpolate_scalar_3d[floating](volume, dkk, dii, djj, &warped[k,i,j]) return warped def transform_3d_affine(floating[:, :, :] volume, int[:] ref_shape, double[:, :] affine): r"""Transforms a 3D volume by an affine transform with trilinear interp. Deforms the input volume under the given affine transformation using tri-linear interpolation. The shape of the resulting transformation is given by ref_shape. If the affine matrix is None, it is taken as the identity. Parameters ---------- volume : array, shape (S, R, C) the input volume to be transformed ref_shape : array, shape (3,) the shape of the resulting volume affine : array, shape (4, 4) the affine transform to be applied Returns ------- out : array, shape (S', R', C') the transformed volume Notes ----- The reason it is necessary to provide the intended shape of the resulting volume is because the affine transformation is defined on all R^{3} but we must sample a finite lattice. Also the resulting shape may not be necessarily equal to the input shape, unless we are interested on endomorphisms only and not general diffeomorphisms. """ cdef: cnp.npy_intp nslices = ref_shape[0] cnp.npy_intp nrows = ref_shape[1] cnp.npy_intp ncols = ref_shape[2] cnp.npy_intp nsVol = volume.shape[0] cnp.npy_intp nrVol = volume.shape[1] cnp.npy_intp ncVol = volume.shape[2] cnp.npy_intp i, j, k, ii, jj, kk int inside double dkk, dii, djj, tmp0, tmp1 double alpha, beta, gamma, calpha, cbeta, cgamma floating[:, :, :] out = np.zeros(shape=(nslices, nrows, ncols), dtype=np.asarray(volume).dtype) if not is_valid_affine(affine, 3): raise ValueError("Invalid affine transform matrix") with nogil: for k in range(nslices): for i in range(nrows): for j in range(ncols): if affine is not None: dkk = _apply_affine_3d_x0(k, i, j, 1, affine) dii = _apply_affine_3d_x1(k, i, j, 1, affine) djj = _apply_affine_3d_x2(k, i, j, 1, affine) else: dkk = k dii = i djj = j inside = _interpolate_scalar_3d[floating](volume, dkk, dii, djj, &out[k,i,j]) return out def warp_3d_nn(number[:, :, :] volume, floating[:, :, :, :] d1, double[:, :] affine_idx_in=None, double[:, :] affine_idx_out=None, double[:, :] affine_disp=None, int[:] out_shape=None): r"""Warps a 3D volume using using nearest-neighbor interpolation Deforms the input volume under the given transformation. The warped volume is computed using nearest-neighbor interpolation and is given by: (1) warped[i] = volume[ C * d1[A*i] + B*i ] where A = affine_idx_in, B = affine_idx_out, C = affine_disp and i denotes the discrete coordinates of a voxel in the sampling grid of shape = out_shape. To illustrate the use of this function, consider a displacement field d1 with grid-to-space transformation R, a volume with grid-to-space transformation T and let's say we want to sample the warped volume on a grid with grid-to-space transformation S (sampling grid). For each voxel in the sampling grid with discrete coordinates i, the warped volume is given by: (2) warped[i] = volume[Tinv * ( d1[Rinv * S * i] + S * i ) ] where Tinv = T^{-1} and Rinv = R^{-1}. By identifying A = Rinv * S, B = Tinv * S, C = Tinv we can use this function to efficiently warp the input image. Parameters ---------- volume : array, shape (S, R, C) the input volume to be transformed d1 : array, shape (S', R', C', 3) the displacement field driving the transformation affine_idx_in : array, shape (4, 4) the matrix A in eq. (1) above affine_idx_out : array, shape (4, 4) the matrix B in eq. (1) above affine_disp : array, shape (4, 4) the matrix C in eq. (1) above out_shape : array, shape (3,) the number of slices, rows and columns of the sampling grid Returns ------- warped : array, shape = out_shape the transformed volume """ cdef: cnp.npy_intp nslices = volume.shape[0] cnp.npy_intp nrows = volume.shape[1] cnp.npy_intp ncols = volume.shape[2] cnp.npy_intp nsVol = volume.shape[0] cnp.npy_intp nrVol = volume.shape[1] cnp.npy_intp ncVol = volume.shape[2] cnp.npy_intp i, j, k int inside double dkk, dii, djj, dk, di, dj if not is_valid_affine(affine_idx_in, 3): raise ValueError("Invalid inner index multiplication matrix") if not is_valid_affine(affine_idx_out, 3): raise ValueError("Invalid outer index multiplication matrix") if not is_valid_affine(affine_disp, 3): raise ValueError("Invalid displacement multiplication matrix") if out_shape is not None: nslices = out_shape[0] nrows = out_shape[1] ncols = out_shape[2] elif d1 is not None: nslices = d1.shape[0] nrows = d1.shape[1] ncols = d1.shape[2] cdef number[:, :, :] warped = np.zeros(shape=(nslices, nrows, ncols), dtype=np.asarray(volume).dtype) cdef floating[:] tmp = np.zeros(shape=(3,), dtype = np.asarray(d1).dtype) with nogil: for k in range(nslices): for i in range(nrows): for j in range(ncols): if affine_idx_in is None: dkk = d1[k, i, j, 0] dii = d1[k, i, j, 1] djj = d1[k, i, j, 2] else: dk = _apply_affine_3d_x0( k, i, j, 1, affine_idx_in) di = _apply_affine_3d_x1( k, i, j, 1, affine_idx_in) dj = _apply_affine_3d_x2( k, i, j, 1, affine_idx_in) inside = _interpolate_vector_3d[floating](d1, dk, di, dj, tmp) dkk = tmp[0] dii = tmp[1] djj = tmp[2] if affine_disp is not None: dk = _apply_affine_3d_x0( dkk, dii, djj, 0, affine_disp) di = _apply_affine_3d_x1( dkk, dii, djj, 0, affine_disp) dj = _apply_affine_3d_x2( dkk, dii, djj, 0, affine_disp) else: dk = dkk di = dii dj = djj if affine_idx_out is not None: dkk = dk + _apply_affine_3d_x0(k, i, j, 1, affine_idx_out) dii = di + _apply_affine_3d_x1(k, i, j, 1, affine_idx_out) djj = dj + _apply_affine_3d_x2(k, i, j, 1, affine_idx_out) else: dkk = dk + k dii = di + i djj = dj + j inside = _interpolate_scalar_nn_3d[number](volume, dkk, dii, djj, &warped[k,i,j]) return warped def transform_3d_affine_nn(number[:, :, :] volume, int[:] ref_shape, double[:, :] affine=None): r"""Transforms a 3D volume by an affine transform with NN interpolation Deforms the input volume under the given affine transformation using nearest neighbor interpolation. The shape of the resulting volume is given by ref_shape. If the affine matrix is None, it is taken as the identity. Parameters ---------- volume : array, shape (S, R, C) the input volume to be transformed ref_shape : array, shape (3,) the shape of the resulting volume affine : array, shape (4, 4) the affine transform to be applied Returns ------- out : array, shape (S', R', C') the transformed volume Notes ----- The reason it is necessary to provide the intended shape of the resulting volume is because the affine transformation is defined on all R^{3} but we must sample a finite lattice. Also the resulting shape may not be necessarily equal to the input shape, unless we are interested on endomorphisms only and not general diffeomorphisms. """ cdef: cnp.npy_intp nslices = ref_shape[0] cnp.npy_intp nrows = ref_shape[1] cnp.npy_intp ncols = ref_shape[2] cnp.npy_intp nsVol = volume.shape[0] cnp.npy_intp nrVol = volume.shape[1] cnp.npy_intp ncVol = volume.shape[2] double dkk, dii, djj, tmp0, tmp1 double alpha, beta, gamma, calpha, cbeta, cgamma cnp.npy_intp k, i, j, kk, ii, jj number[:, :, :] out = np.zeros((nslices, nrows, ncols), dtype=np.asarray(volume).dtype) if not is_valid_affine(affine, 3): raise ValueError("Invalid affine transform matrix") with nogil: for k in range(nslices): for i in range(nrows): for j in range(ncols): if affine is not None: dkk = _apply_affine_3d_x0(k, i, j, 1, affine) dii = _apply_affine_3d_x1(k, i, j, 1, affine) djj = _apply_affine_3d_x2(k, i, j, 1, affine) else: dkk = k dii = i djj = j _interpolate_scalar_nn_3d[number](volume, dkk, dii, djj, &out[k,i,j]) return out def warp_2d(floating[:, :] image, floating[:, :, :] d1, double[:, :] affine_idx_in=None, double[:, :] affine_idx_out=None, double[:, :] affine_disp=None, int[:] out_shape=None): r"""Warps a 2D image using bilinear interpolation Deforms the input image under the given transformation. The warped image is computed using bi-linear interpolation and is given by: (1) warped[i] = image[ C * d1[A*i] + B*i ] where A = affine_idx_in, B = affine_idx_out, C = affine_disp and i denotes the discrete coordinates of a voxel in the sampling grid of shape = out_shape. To illustrate the use of this function, consider a displacement field d1 with grid-to-space transformation R, an image with grid-to-space transformation T and let's say we want to sample the warped image on a grid with grid-to-space transformation S (sampling grid). For each voxel in the sampling grid with discrete coordinates i, the warped image is given by: (2) warped[i] = image[Tinv * ( d1[Rinv * S * i] + S * i ) ] where Tinv = T^{-1} and Rinv = R^{-1}. By identifying A = Rinv * S, B = Tinv * S, C = Tinv we can use this function to efficiently warp the input image. Parameters ---------- image : array, shape (R, C) the input image to be transformed d1 : array, shape (R', C', 2) the displacement field driving the transformation affine_idx_in : array, shape (3, 3) the matrix A in eq. (1) above affine_idx_out : array, shape (3, 3) the matrix B in eq. (1) above affine_disp : array, shape (3, 3) the matrix C in eq. (1) above out_shape : array, shape (2,) the number of rows and columns of the sampling grid Returns ------- warped : array, shape = out_shape the transformed image """ cdef: cnp.npy_intp nrows = image.shape[0] cnp.npy_intp ncols = image.shape[1] cnp.npy_intp nrVol = image.shape[0] cnp.npy_intp ncVol = image.shape[1] cnp.npy_intp i, j, ii, jj double di, dj, dii, djj if not is_valid_affine(affine_idx_in, 2): raise ValueError("Invalid inner index multiplication matrix") if not is_valid_affine(affine_idx_out, 2): raise ValueError("Invalid outer index multiplication matrix") if not is_valid_affine(affine_disp, 2): raise ValueError("Invalid displacement multiplication matrix") if out_shape is not None: nrows = out_shape[0] ncols = out_shape[1] elif d1 is not None: nrows = d1.shape[0] ncols = d1.shape[1] cdef floating[:, :] warped = np.zeros(shape=(nrows, ncols), dtype=np.asarray(image).dtype) cdef floating[:] tmp = np.zeros(shape=(2,), dtype=np.asarray(d1).dtype) with nogil: for i in range(nrows): for j in range(ncols): # Apply inner index pre-multiplication if affine_idx_in is None: dii = d1[i, j, 0] djj = d1[i, j, 1] else: di = _apply_affine_2d_x0( i, j, 1, affine_idx_in) dj = _apply_affine_2d_x1( i, j, 1, affine_idx_in) _interpolate_vector_2d[floating](d1, di, dj, tmp) dii = tmp[0] djj = tmp[1] # Apply displacement multiplication if affine_disp is not None: di = _apply_affine_2d_x0( dii, djj, 0, affine_disp) dj = _apply_affine_2d_x1( dii, djj, 0, affine_disp) else: di = dii dj = djj # Apply outer index multiplication and add the displacements if affine_idx_out is not None: dii = di + _apply_affine_2d_x0(i, j, 1, affine_idx_out) djj = dj + _apply_affine_2d_x1(i, j, 1, affine_idx_out) else: dii = di + i djj = dj + j # Interpolate the input image at the resulting location _interpolate_scalar_2d[floating](image, dii, djj, &warped[i, j]) return warped def transform_2d_affine(floating[:, :] image, int[:] ref_shape, double[:, :] affine=None): r"""Transforms a 2D image by an affine transform with bilinear interp. Deforms the input image under the given affine transformation using tri-linear interpolation. The shape of the resulting image is given by ref_shape. If the affine matrix is None, it is taken as the identity. Parameters ---------- image : array, shape (R, C) the input image to be transformed ref_shape : array, shape (2,) the shape of the resulting image affine : array, shape (3, 3) the affine transform to be applied Returns ------- out : array, shape (R', C') the transformed image Notes ----- The reason it is necessary to provide the intended shape of the resulting image is because the affine transformation is defined on all R^{2} but we must sample a finite lattice. Also the resulting shape may not be necessarily equal to the input shape, unless we are interested on endomorphisms only and not general diffeomorphisms. """ cdef: cnp.npy_intp nrows = ref_shape[0] cnp.npy_intp ncols = ref_shape[1] cnp.npy_intp nrVol = image.shape[0] cnp.npy_intp ncVol = image.shape[1] cnp.npy_intp i, j, ii, jj double dii, djj, tmp0 double alpha, beta, calpha, cbeta floating[:, :] out = np.zeros(shape=(nrows, ncols), dtype=np.asarray(image).dtype) if not is_valid_affine(affine, 2): raise ValueError("Invalid affine transform matrix") with nogil: for i in range(nrows): for j in range(ncols): if affine is not None: dii = _apply_affine_2d_x0(i, j, 1, affine) djj = _apply_affine_2d_x1(i, j, 1, affine) else: dii = i djj = j _interpolate_scalar_2d[floating](image, dii, djj, &out[i, j]) return out def warp_2d_nn(number[:, :] image, floating[:, :, :] d1, double[:, :] affine_idx_in=None, double[:, :] affine_idx_out=None, double[:, :] affine_disp=None, int[:] out_shape=None): r"""Warps a 2D image using nearest neighbor interpolation Deforms the input image under the given transformation. The warped image is computed using nearest-neighbor interpolation and is given by: (1) warped[i] = image[ C * d1[A*i] + B*i ] where A = affine_idx_in, B = affine_idx_out, C = affine_disp and i denotes the discrete coordinates of a voxel in the sampling grid of shape = out_shape. To illustrate the use of this function, consider a displacement field d1 with grid-to-space transformation R, an image with grid-to-space transformation T and let's say we want to sample the warped image on a grid with grid-to-space transformation S (sampling grid). For each voxel in the sampling grid with discrete coordinates i, the warped image is given by: (2) warped[i] = image[Tinv * ( d1[Rinv * S * i] + S * i ) ] where Tinv = T^{-1} and Rinv = R^{-1}. By identifying A = Rinv * S, B = Tinv * S, C = Tinv we can use this function to efficiently warp the input image. Parameters ---------- image : array, shape (R, C) the input image to be transformed d1 : array, shape (R', C', 2) the displacement field driving the transformation affine_idx_in : array, shape (3, 3) the matrix A in eq. (1) above affine_idx_out : array, shape (3, 3) the matrix B in eq. (1) above affine_disp : array, shape (3, 3) the matrix C in eq. (1) above out_shape : array, shape (2,) the number of rows and columns of the sampling grid Returns ------- warped : array, shape = out_shape the transformed image """ cdef: cnp.npy_intp nrows = image.shape[0] cnp.npy_intp ncols = image.shape[1] cnp.npy_intp nrVol = image.shape[0] cnp.npy_intp ncVol = image.shape[1] cnp.npy_intp i, j, ii, jj double di, dj, dii, djj if not is_valid_affine(affine_idx_in, 2): raise ValueError("Invalid inner index multiplication matrix") if not is_valid_affine(affine_idx_out, 2): raise ValueError("Invalid outer index multiplication matrix") if not is_valid_affine(affine_disp, 2): raise ValueError("Invalid displacement multiplication matrix") if out_shape is not None: nrows = out_shape[0] ncols = out_shape[1] elif d1 is not None: nrows = d1.shape[0] ncols = d1.shape[1] cdef number[:, :] warped = np.zeros(shape=(nrows, ncols), dtype=np.asarray(image).dtype) cdef floating[:] tmp = np.zeros(shape=(2,), dtype=np.asarray(d1).dtype) with nogil: for i in range(nrows): for j in range(ncols): # Apply inner index pre-multiplication if affine_idx_in is None: dii = d1[i, j, 0] djj = d1[i, j, 1] else: di = _apply_affine_2d_x0( i, j, 1, affine_idx_in) dj = _apply_affine_2d_x1( i, j, 1, affine_idx_in) _interpolate_vector_2d[floating](d1, di, dj, tmp) dii = tmp[0] djj = tmp[1] # Apply displacement multiplication if affine_disp is not None: di = _apply_affine_2d_x0( dii, djj, 0, affine_disp) dj = _apply_affine_2d_x1( dii, djj, 0, affine_disp) else: di = dii dj = djj # Apply outer index multiplication and add the displacements if affine_idx_out is not None: dii = di + _apply_affine_2d_x0(i, j, 1, affine_idx_out) djj = dj + _apply_affine_2d_x1(i, j, 1, affine_idx_out) else: dii = di + i djj = dj + j # Interpolate the input image at the resulting location _interpolate_scalar_nn_2d[number](image, dii, djj, &warped[i, j]) return warped def transform_2d_affine_nn(number[:, :] image, int[:] ref_shape, double[:, :] affine=None): r"""Transforms a 2D image by an affine transform with NN interpolation Deforms the input image under the given affine transformation using nearest neighbor interpolation. The shape of the resulting image is given by ref_shape. If the affine matrix is None, it is taken as the identity. Parameters ---------- image : array, shape (R, C) the input image to be transformed ref_shape : array, shape (2,) the shape of the resulting image affine : array, shape (3, 3) the affine transform to be applied Returns ------- out : array, shape (R', C') the transformed image Notes ----- The reason it is necessary to provide the intended shape of the resulting image is because the affine transformation is defined on all R^{2} but we must sample a finite lattice. Also the resulting shape may not be necessarily equal to the input shape, unless we are interested on endomorphisms only and not general diffeomorphisms. """ cdef: cnp.npy_intp nrows = ref_shape[0] cnp.npy_intp ncols = ref_shape[1] cnp.npy_intp nrVol = image.shape[0] cnp.npy_intp ncVol = image.shape[1] double dii, djj, tmp0 double alpha, beta, calpha, cbeta cnp.npy_intp i, j, ii, jj number[:, :] out = np.zeros((nrows, ncols), dtype=np.asarray(image).dtype) if not is_valid_affine(affine, 2): raise ValueError("Invalid affine transform matrix") with nogil: for i in range(nrows): for j in range(ncols): if affine is not None: dii = _apply_affine_2d_x0(i, j, 1, affine) djj = _apply_affine_2d_x1(i, j, 1, affine) else: dii = i djj = j _interpolate_scalar_nn_2d[number](image, dii, djj, &out[i, j]) return out def resample_displacement_field_3d(floating[:, :, :, :] field, double[:] factors, int[:] out_shape): r"""Resamples a 3D vector field to a custom target shape Resamples the given 3D displacement field on a grid of the requested shape, using the given scale factors. More precisely, the resulting displacement field at each grid cell i is given by D[i] = field[Diag(factors) * i] Parameters ---------- factors : array, shape (3,) the scaling factors mapping (integer) grid coordinates in the resampled grid to (floating point) grid coordinates in the original grid out_shape : array, shape (3,) the desired shape of the resulting grid Returns ------- expanded : array, shape = out_shape + (3, ) the resampled displacement field """ ftype = np.asarray(field).dtype cdef: cnp.npy_intp tslices = out_shape[0] cnp.npy_intp trows = out_shape[1] cnp.npy_intp tcols = out_shape[2] cnp.npy_intp k, i, j int inside double dkk, dii, djj floating[:, :, :, :] expanded = np.zeros((tslices, trows, tcols, 3), dtype=ftype) for k in range(tslices): for i in range(trows): for j in range(tcols): dkk = k * factors[0] dii = i * factors[1] djj = j * factors[2] _interpolate_vector_3d[floating](field, dkk, dii, djj, expanded[k, i, j]) return expanded def resample_displacement_field_2d(floating[:, :, :] field, double[:] factors, int[:] out_shape): r"""Resamples a 2D vector field to a custom target shape Resamples the given 2D displacement field on a grid of the requested shape, using the given scale factors. More precisely, the resulting displacement field at each grid cell i is given by D[i] = field[Diag(factors) * i] Parameters ---------- factors : array, shape (2,) the scaling factors mapping (integer) grid coordinates in the resampled grid to (floating point) grid coordinates in the original grid out_shape : array, shape (2,) the desired shape of the resulting grid Returns ------- expanded : array, shape = out_shape + (2, ) the resampled displacement field """ ftype = np.asarray(field).dtype cdef: cnp.npy_intp trows = out_shape[0] cnp.npy_intp tcols = out_shape[1] cnp.npy_intp i, j int inside double dii, djj floating[:, :, :] expanded = np.zeros((trows, tcols, 2), dtype=ftype) for i in range(trows): for j in range(tcols): dii = i*factors[0] djj = j*factors[1] inside = _interpolate_vector_2d[floating](field, dii, djj, expanded[i, j]) return expanded def create_random_displacement_2d(int[:] from_shape, double[:, :] from_grid2world, int[:] to_shape, double[:, :] to_grid2world): r"""Creates a random 2D displacement 'exactly' mapping points of two grids Creates a random 2D displacement field mapping points of an input discrete domain (with dimensions given by from_shape) to points of an output discrete domain (with shape given by to_shape). The affine matrices bringing discrete coordinates to physical space are given by from_grid2world (for the displacement field discretization) and to_grid2world (for the target discretization). Since this function is intended to be used for testing, voxels in the input domain will never be assigned to boundary voxels on the output domain. Parameters ---------- from_shape : array, shape (2,) the grid shape where the displacement field will be defined on. from_grid2world : array, shape (3,3) the grid-to-space transformation of the displacement field to_shape : array, shape (2,) the grid shape where the deformation field will map the input grid to. to_grid2world : array, shape (3,3) the grid-to-space transformation of the mapped grid Returns ------- output : array, shape = from_shape the random displacement field in the physical domain int_field : array, shape = from_shape the assignment of each point in the input grid to the target grid """ cdef: cnp.npy_intp i, j, ri, rj double di, dj, dii, djj int[:, :, :] int_field = np.empty(tuple(from_shape) + (2,), dtype=np.int32) double[:, :, :] output = np.zeros(tuple(from_shape) + (2,), dtype=np.float64) cnp.npy_intp dom_size = from_shape[0]*from_shape[1] if not is_valid_affine(from_grid2world, 2): raise ValueError("Invalid 'from' affine transform matrix") if not is_valid_affine(to_grid2world, 2): raise ValueError("Invalid 'to' affine transform matrix") # compute the actual displacement field in the physical space for i in range(from_shape[0]): for j in range(from_shape[1]): # randomly choose where each input grid point will be mapped to in # the target grid ri = np.random.randint(1, to_shape[0]-1) rj = np.random.randint(1, to_shape[1]-1) int_field[i, j, 0] = ri int_field[i, j, 1] = rj # convert the input point to physical coordinates if from_grid2world is not None: di = _apply_affine_2d_x0(i, j, 1, from_grid2world) dj = _apply_affine_2d_x1(i, j, 1, from_grid2world) else: di = i dj = j # convert the output point to physical coordinates if to_grid2world is not None: dii = _apply_affine_2d_x0(ri, rj, 1, to_grid2world) djj = _apply_affine_2d_x1(ri, rj, 1, to_grid2world) else: dii = ri djj = rj # the displacement vector at (i,j) must be the target point minus # the original point, both in physical space output[i, j, 0] = dii - di output[i, j, 1] = djj - dj return output, int_field def create_random_displacement_3d(int[:] from_shape, double[:, :] from_grid2world, int[:] to_shape, double[:, :] to_grid2world): r"""Creates a random 3D displacement 'exactly' mapping points of two grids Creates a random 3D displacement field mapping points of an input discrete domain (with dimensions given by from_shape) to points of an output discrete domain (with shape given by to_shape). The affine matrices bringing discrete coordinates to physical space are given by from_grid2world (for the displacement field discretization) and to_grid2world (for the target discretization). Since this function is intended to be used for testing, voxels in the input domain will never be assigned to boundary voxels on the output domain. Parameters ---------- from_shape : array, shape (3,) the grid shape where the displacement field will be defined on. from_grid2world : array, shape (4,4) the grid-to-space transformation of the displacement field to_shape : array, shape (3,) the grid shape where the deformation field will map the input grid to. to_grid2world : array, shape (4,4) the grid-to-space transformation of the mapped grid Returns ------- output : array, shape = from_shape the random displacement field in the physical domain int_field : array, shape = from_shape the assignment of each point in the input grid to the target grid """ cdef: cnp.npy_intp i, j, k, ri, rj, rk double di, dj, dii, djj int[:, :, :, :] int_field = np.empty(tuple(from_shape) + (3,), dtype=np.int32) double[:, :, :, :] output = np.zeros(tuple(from_shape) + (3,), dtype=np.float64) cnp.npy_intp dom_size = from_shape[0]*from_shape[1]*from_shape[2] if not is_valid_affine(from_grid2world, 3): raise ValueError("Invalid 'from' affine transform matrix") if not is_valid_affine(to_grid2world, 3): raise ValueError("Invalid 'to' affine transform matrix") # compute the actual displacement field in the physical space for k in range(from_shape[0]): for i in range(from_shape[1]): for j in range(from_shape[2]): # randomly choose the location of each point on the target grid rk = np.random.randint(1, to_shape[0]-1) ri = np.random.randint(1, to_shape[1]-1) rj = np.random.randint(1, to_shape[2]-1) int_field[k, i, j, 0] = rk int_field[k, i, j, 1] = ri int_field[k, i, j, 2] = rj # convert the input point to physical coordinates if from_grid2world is not None: dk = _apply_affine_3d_x0(k, i, j, 1, from_grid2world) di = _apply_affine_3d_x1(k, i, j, 1, from_grid2world) dj = _apply_affine_3d_x2(k, i, j, 1, from_grid2world) else: dk = k di = i dj = j # convert the output point to physical coordinates if to_grid2world is not None: dkk = _apply_affine_3d_x0(rk, ri, rj, 1, to_grid2world) dii = _apply_affine_3d_x1(rk, ri, rj, 1, to_grid2world) djj = _apply_affine_3d_x2(rk, ri, rj, 1, to_grid2world) else: dkk = rk dii = ri djj = rj # the displacement vector at (i,j) must be the target point minus # the original point, both in physical space output[k, i, j, 0] = dkk - dk output[k, i, j, 1] = dii - di output[k, i, j, 2] = djj - dj return output, int_field def create_harmonic_fields_2d(cnp.npy_intp nrows, cnp.npy_intp ncols, double b, double m): r"""Creates an invertible 2D displacement field Creates the invertible displacement fields used in Chen et al. eqs. 9 and 10 [1] Parameters ---------- nrows : int number of rows in the resulting harmonic field ncols : int number of columns in the resulting harmonic field b, m : float parameters of the harmonic field (as in [1]). To understand the effect of these parameters, please consider plotting a deformed image (a circle or a grid) under the deformation field, or see examples in [1] Returns ------- d : array, shape (nrows, ncols, 2) the harmonic displacement field inv : array, shape (nrows, ncols, 2) the analitical inverse of the harmonic displacement field [1] Chen, M., Lu, W., Chen, Q., Ruchala, K. J., & Olivera, G. H. (2008). A simple fixed-point approach to invert a deformation field. Medical Physics, 35(1), 81. doi:10.1118/1.2816107 """ cdef: cnp.npy_intp mid_row = nrows/2 cnp.npy_intp mid_col = ncols/2 cnp.npy_intp i, j, ii, jj double theta double[:, :, :] d = np.zeros((nrows, ncols, 2), dtype=np.float64) double[:, :, :] inv = np.zeros((nrows, ncols, 2), dtype=np.float64) for i in range(nrows): for j in range(ncols): ii = i - mid_row jj = j - mid_col theta = np.arctan2(ii, jj) d[i, j, 0] = ii * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) d[i, j, 1] = jj * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) inv[i, j, 0] = b * np.cos(m * theta) * ii inv[i, j, 1] = b * np.cos(m * theta) * jj return d, inv def create_harmonic_fields_3d(int nslices, cnp.npy_intp nrows, cnp.npy_intp ncols, double b, double m): r"""Creates an invertible 3D displacement field Creates the invertible displacement fields used in Chen et al. eqs. 9 and 10 [1] computing the angle theta along z-slides. Parameters ---------- nslices : int number of slices in the resulting harmonic field nrows : int number of rows in the resulting harmonic field ncols : int number of columns in the resulting harmonic field b, f : float parameters of the harmonic field (as in [1]). To understand the effect of these parameters, please consider plotting a deformed image (e.g. a circle or a grid) under the deformation field, or see examples in [1] Returns ------- d : array, shape (nslices, nrows, ncols, 3) the harmonic displacement field inv : array, shape (nslices, nrows, ncols, 3) the analitical inverse of the harmonic displacement field [1] Chen, M., Lu, W., Chen, Q., Ruchala, K. J., & Olivera, G. H. (2008). A simple fixed-point approach to invert a deformation field. Medical Physics, 35(1), 81. doi:10.1118/1.2816107 """ cdef: cnp.npy_intp mid_slice = nslices / 2 cnp.npy_intp mid_row = nrows / 2 cnp.npy_intp mid_col = ncols / 2 cnp.npy_intp i, j, k, ii, jj, kk double theta double[:, :, :, :] d = np.zeros((nslices, nrows, ncols, 3), dtype=np.float64) double[:, :, :, :] inv = np.zeros((nslices, nrows, ncols, 3), dtype=np.float64) for k in range(nslices): for i in range(nrows): for j in range(ncols): kk = k - mid_slice ii = i - mid_row jj = j - mid_col theta = np.arctan2(ii, jj) d[k, i, j, 0] = kk * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) d[k, i, j, 1] = ii * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) d[k, i, j, 2] = jj * (1.0 / (1 + b * np.cos(m * theta)) - 1.0) inv[k, i, j, 0] = b * np.cos(m * theta) * kk inv[k, i, j, 1] = b * np.cos(m * theta) * ii inv[k, i, j, 2] = b * np.cos(m * theta) * jj return d, inv def create_circle(cnp.npy_intp nrows, cnp.npy_intp ncols, cnp.npy_intp radius): r""" Create a binary 2D image where pixel values are 1 iff their distance to the center of the image is less than or equal to radius. Parameters ---------- nrows : int number of rows of the resulting image ncols : int number of columns of the resulting image radius : int the radius of the circle Returns ------- c : array, shape (nrows, ncols) the binary image of the circle with the requested dimensions """ cdef: cnp.npy_intp mid_row = nrows/2 cnp.npy_intp mid_col = ncols/2 cnp.npy_intp i, j, ii, jj double r double[:, :] c = np.zeros((nrows, ncols), dtype=np.float64) for i in range(nrows): for j in range(ncols): ii = i - mid_row jj = j - mid_col r = np.sqrt(ii*ii + jj*jj) if r <= radius: c[i, j] = 1 else: c[i, j] = 0 return c def create_sphere(cnp.npy_intp nslices, cnp.npy_intp nrows, cnp.npy_intp ncols, cnp.npy_intp radius): r""" Create a binary 3D image where voxel values are 1 iff their distance to the center of the image is less than or equal to radius. Parameters ---------- nslices : int number if slices of the resulting image nrows : int number of rows of the resulting image ncols : int number of columns of the resulting image radius : int the radius of the sphere Returns ------- c : array, shape (nslices, nrows, ncols) the binary image of the sphere with the requested dimensions """ cdef: cnp.npy_intp mid_slice = nslices/2 cnp.npy_intp mid_row = nrows/2 cnp.npy_intp mid_col = ncols/2 cnp.npy_intp i, j, k, ii, jj, kk double r double[:, :, :] s = np.zeros((nslices, nrows, ncols), dtype=np.float64) for k in range(nslices): for i in range(nrows): for j in range(ncols): kk = k - mid_slice ii = i - mid_row jj = j - mid_col r = np.sqrt(ii*ii + jj*jj + kk*kk) if r <= radius: s[k, i, j] = 1 else: s[k, i, j] = 0 return s def _gradient_3d(floating[:, :, :] img, double[:, :] img_world2grid, double[:] img_spacing, double[:, :] out_grid2world, floating[:, :, :, :] out, int[:, :, :] inside): r""" Gradient of a 3D image in physical space coordinates Each grid cell (i, j, k) in the sampling grid (determined by out.shape) is mapped to its corresponding physical point (x, y, z) by multiplying out_grid2world (its grid-to-space transform) by (i, j, k), then the image is interpolated, at P1=(x + h, y, z), Q1=(x - h, y, z) P2=(x, y + h, z), Q2=(x, y - h, z) P3=(x, y, z + h), Q3=(x, y, z - h) (by mapping Pi and Qi to the grid using img_world2grid: the inverse of the grid-to-space transform of img). The displacement parameter h is of magnitude 0.5 (in physical space units), therefore the approximated partial derivatives are given by the difference between the image interpolated at Pi and Qi. Parameters ---------- img : array, shape (S, R, C) the input volume whose gradient will be computed img_world2grid : array, shape (4, 4) the space-to-grid transform matrix associated to img img_spacing : array, shape (3,) the spacing between voxels (voxel size along each axis) of the input volume out_grid2world : array, shape (4, 4) the grid-to-space transform associated to the sampling grid out : array, shape (S', R', C', 3) the buffer in which to store the image gradient inside : array, shape (S', R', C') the buffer in which to store the flags indicating whether the sample point lies inside (=1) or outside (=0) the image grid """ cdef: int nslices = out.shape[0] int nrows = out.shape[1] int ncols = out.shape[2] int i, j, k, in_flag double tmp double[:] x = np.empty(shape=(3,), dtype=np.float64) double[:] dx = np.empty(shape=(3,), dtype=np.float64) double[:] h = np.empty(shape=(3,), dtype=np.float64) double[:] q = np.empty(shape=(3,), dtype=np.float64) with nogil: h[0] = 0.5 * img_spacing[0] h[1] = 0.5 * img_spacing[1] h[2] = 0.5 * img_spacing[2] for k in range(nslices): for i in range(nrows): for j in range(ncols): inside[k, i, j] = 1 # Compute coordinates of index (k, i, j) in physical space x[0] = _apply_affine_3d_x0(k, i, j, 1, out_grid2world) x[1] = _apply_affine_3d_x1(k, i, j, 1, out_grid2world) x[2] = _apply_affine_3d_x2(k, i, j, 1, out_grid2world) dx[:] = x[:] for p in range(3): # Compute coordinates of point dx on img's grid dx[p] = x[p] - h[p] q[0] = _apply_affine_3d_x0(dx[0], dx[1], dx[2], 1, img_world2grid) q[1] = _apply_affine_3d_x1(dx[0], dx[1], dx[2], 1, img_world2grid) q[2] = _apply_affine_3d_x2(dx[0], dx[1], dx[2], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_3d[floating](img, q[0], q[1], q[2], &out[k, i, j, p]) if in_flag == 0: out[k, i, j, p] = 0 inside[k, i, j] = 0 continue tmp = out[k, i, j, p] # Compute coordinates of point dx on img's grid dx[p] = x[p] + h[p] q[0] = _apply_affine_3d_x0(dx[0], dx[1], dx[2], 1, img_world2grid) q[1] = _apply_affine_3d_x1(dx[0], dx[1], dx[2], 1, img_world2grid) q[2] = _apply_affine_3d_x2(dx[0], dx[1], dx[2], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_3d[floating](img, q[0], q[1], q[2], &out[k, i, j, p]) if in_flag == 0: out[k, i, j, p] = 0 inside[k, i, j] = 0 continue out[k, i, j, p] = (out[k, i, j, p] - tmp) / img_spacing[p] dx[p] = x[p] def _sparse_gradient_3d(floating[:, :, :] img, double[:, :] img_world2grid, double[:] img_spacing, double[:, :] sample_points, floating[:, :] out, int[:] inside): r""" Gradient of a 3D image evaluated at a set of points in physical space For each row (x_i, y_i, z_i) in sample_points, the image is interpolated at P1=(x_i + h, y_i, z_i), Q1=(x_i - h, y_i, z_i) P2=(x_i, y_i + h, z_i), Q2=(x_i, y_i - h, z_i) P3=(x_i, y_i, z_i + h), Q3=(x_i, y_i, z_i - h) (by mapping Pi and Qi to the grid using img_world2grid: the inverse of the grid-to-space transform of img). The displacement parameter h is of magnitude 0.5 (in physical space units), therefore the approximated partial derivatives are given by the difference between the image interpolated at Pi and Qi. Parameters ---------- img : array, shape (S, R, C) the input volume whose gradient will be computed img_world2grid : array, shape (4, 4) the space-to-grid transform matrix associated to img img_spacing : array, shape (3,) the spacing between voxels (voxel size along each axis) of the input sample_points: array, shape (n, 3) list of points where the derivative will be evaluated (one point per row) out : array, shape (n, 3) the buffer in which to store the image gradient """ cdef: int n = sample_points.shape[0] int i, in_flag double tmp double[:] dx = np.empty(shape=(3,), dtype=np.float64) double[:] h = np.empty(shape=(3,), dtype=np.float64) double[:] q = np.empty(shape=(3,), dtype=np.float64) with nogil: h[0] = 0.5 * img_spacing[0] h[1] = 0.5 * img_spacing[1] h[2] = 0.5 * img_spacing[2] for i in range(n): inside[i] = 1 dx[:] = sample_points[i, :3] for p in range(3): # Compute coordinates of point dx on img's grid dx[p] = sample_points[i, p] - h[p] q[0] = _apply_affine_3d_x0(dx[0], dx[1], dx[2], 1, img_world2grid) q[1] = _apply_affine_3d_x1(dx[0], dx[1], dx[2], 1, img_world2grid) q[2] = _apply_affine_3d_x2(dx[0], dx[1], dx[2], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_3d[floating](img, q[0], q[1], q[2], &out[i, p]) if in_flag == 0: out[i, p] = 0 inside[i] = 0 continue tmp = out[i, p] # Compute coordinates of point dx on img's grid dx[p] = sample_points[i, p] + h[p] q[0] = _apply_affine_3d_x0(dx[0], dx[1], dx[2], 1, img_world2grid) q[1] = _apply_affine_3d_x1(dx[0], dx[1], dx[2], 1, img_world2grid) q[2] = _apply_affine_3d_x2(dx[0], dx[1], dx[2], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_3d[floating](img, q[0], q[1], q[2], &out[i, p]) if in_flag == 0: out[i, p] = 0 inside[i] = 0 continue out[i, p] = (out[i, p] - tmp) / img_spacing[p] dx[p] = sample_points[i, p] def _gradient_2d(floating[:, :] img, double[:, :] img_world2grid, double[:] img_spacing, double[:, :] out_grid2world, floating[:, :, :] out, int[:, :] inside): r""" Gradient of a 2D image in physical space coordinates Each grid cell (i, j) in the sampling grid (determined by out.shape) is mapped to its corresponding physical point (x, y) by multiplying out_grid2world (its grid-to-space transform) by (i, j), then the image is interpolated, at P1=(x + h, y), Q1=(x - h, y) P2=(x, y + h), Q2=(x, y - h) (by mapping Pi and Qi to the grid using img_world2grid: the inverse of the grid-to-space transform of img). The displacement parameter h is of magnitude 0.5 (in physical space units), therefore the approximated partial derivatives are given by the difference between the image interpolated at Pi and Qi. Parameters ---------- img : array, shape (R, C) the input image whose gradient will be computed img_world2grid : array, shape (3, 3) the space-to-grid transform matrix associated to img img_spacing : array, shape (2,) the spacing between pixels (pixel size along each axis) of the input image out_grid2world : array, shape (3, 3) the grid-to-space transform associated to the sampling grid out : array, shape (S', R', 2) the buffer in which to store the image gradient inside : array, shape (S', R') the buffer in which to store the flags indicating whether the sample point lies inside (=1) or outside (=0) the image grid """ cdef: int nrows = out.shape[0] int ncols = out.shape[1] int i, j, k, in_flag double tmp double[:] x = np.empty(shape=(2,), dtype=np.float64) double[:] dx = np.empty(shape=(2,), dtype=np.float64) double[:] h = np.empty(shape=(2,), dtype=np.float64) double[:] q = np.empty(shape=(2,), dtype=np.float64) with nogil: h[0] = 0.5 * img_spacing[0] h[1] = 0.5 * img_spacing[1] for i in range(nrows): for j in range(ncols): inside[i, j] = 1 # Compute coordinates of index (i, j) in physical space x[0] = _apply_affine_2d_x0(i, j, 1, out_grid2world) x[1] = _apply_affine_2d_x1(i, j, 1, out_grid2world) dx[:] = x[:] for p in range(2): # Compute coordinates of point dx on img's grid dx[p] = x[p] - h[p] q[0] = _apply_affine_2d_x0(dx[0], dx[1], 1, img_world2grid) q[1] = _apply_affine_2d_x1(dx[0], dx[1], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_2d[floating](img, q[0], q[1], &out[i, j, p]) if in_flag == 0: out[i, j, p] = 0 inside[i, j] = 0 continue tmp = out[i, j, p] # Compute coordinates of point dx on img's grid dx[p] = x[p] + h[p] q[0] = _apply_affine_2d_x0(dx[0], dx[1], 1, img_world2grid) q[1] = _apply_affine_2d_x1(dx[0], dx[1], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_2d[floating](img, q[0], q[1], &out[i, j, p]) if in_flag == 0: out[i, j, p] = 0 inside[i, j] = 0 continue out[i, j, p] = (out[i, j, p] - tmp) / img_spacing[p] dx[p] = x[p] def _sparse_gradient_2d(floating[:, :] img, double[:, :] img_world2grid, double[:] img_spacing, double[:, :] sample_points, floating[:, :] out, int[:] inside): r""" Gradient of a 2D image evaluated at a set of points in physical space For each row (x_i, y_i) in sample_points, the image is interpolated at P1=(x_i + h, y_i), Q1=(x_i - h, y_i) P2=(x_i, y_i + h), Q2=(x_i, y_i - h) (by mapping Pi and Qi to the grid using img_world2grid: the inverse of the grid-to-space transform of img). The displacement parameter h is of magnitude 0.5 (in physical space units), therefore the approximated partial derivatives are given by the difference between the image interpolated at Pi and Qi. Parameters ---------- img : array, shape (R, C) the input volume whose gradient will be computed img_world2grid : array, shape (3, 3) the space-to-grid transform matrix associated to img img_spacing : array, shape (2,) the spacing between pixels (pixel size along each axis) of the input sample_points: array, shape (n, 2) list of points where the derivative will be evaluated (one point per row) out : array, shape (n, 2) the buffer in which to store the image gradient inside : array, shape (n,) the buffer in which to store the flags indicating whether the sample point lies inside (=1) or outside (=0) the image grid """ cdef: int n = sample_points.shape[0] int i, in_flag double tmp double[:] dx = np.empty(shape=(2,), dtype=np.float64) double[:] h = np.empty(shape=(2,), dtype=np.float64) double[:] q = np.empty(shape=(2,), dtype=np.float64) with nogil: h[0] = 0.5 * img_spacing[0] h[1] = 0.5 * img_spacing[1] for i in range(n): inside[i] = 1 dx[:] = sample_points[i, :2] for p in range(2): # Compute coordinates of point dx on img's grid dx[p] = sample_points[i, p] - h[p] q[0] = _apply_affine_2d_x0(dx[0], dx[1], 1, img_world2grid) q[1] = _apply_affine_2d_x1(dx[0], dx[1], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_2d[floating](img, q[0], q[1], &out[i, p]) if in_flag == 0: out[i, p] = 0 inside[i] = 0 continue tmp = out[i, p] # Compute coordinates of point dx on img's grid dx[p] = sample_points[i, p] + h[p] q[0] = _apply_affine_2d_x0(dx[0], dx[1], 1, img_world2grid) q[1] = _apply_affine_2d_x1(dx[0], dx[1], 1, img_world2grid) # Interpolate img at q in_flag = _interpolate_scalar_2d[floating](img, q[0], q[1], &out[i, p]) if in_flag == 0: out[i, p] = 0 inside[i] = 0 continue out[i, p] = (out[i, p] - tmp) / img_spacing[p] dx[p] = sample_points[i, p] def gradient(img, img_world2grid, img_spacing, out_shape, out_grid2world): r""" Gradient of an image in physical space Parameters ---------- img : 2D or 3D array, shape (R, C) or (S, R, C) the input image whose gradient will be computed img_world2grid : array, shape (dim+1, dim+1) the space-to-grid transform matrix associated to img img_spacing : array, shape (dim,) the spacing between voxels (voxel size along each axis) of the input image out_shape : array, shape (dim,) the number of (slices), rows and columns of the sampling grid out_grid2world : array, shape (dim+1, dim+1) the grid-to-space transform associated to the sampling grid Returns ------- out : array, shape (R', C', 2) or (S', R', C', 3) the buffer in which to store the image gradient, where (S'), R', C' are given by out_shape """ dim = len(img.shape) if not is_valid_affine(img_world2grid, dim): raise ValueError("Invalid image affine transform") if not is_valid_affine(out_grid2world, dim): raise ValueError("Invalid sampling grid affine transform") if len(img_spacing) < dim: raise ValueError("Invalid spacings") ftype = img.dtype.type out = np.empty(tuple(out_shape)+(dim,), dtype=ftype) inside = np.empty(tuple(out_shape), dtype=np.int32) # Select joint density gradient 2D or 3D if dim == 2: jd_grad = _gradient_2d elif dim == 3: jd_grad = _gradient_3d else: raise ValueError('Undefined gradient for image dimension %d' % (dim,)) jd_grad(img, img_world2grid.astype(np.float64), img_spacing.astype(np.float64), out_grid2world.astype(np.float64), out, inside) return out, inside def sparse_gradient(img, img_world2grid, img_spacing, sample_points): r""" Gradient of an image in physical space Parameters ---------- img : 2D or 3D array, shape (R, C) or (S, R, C) the input image whose gradient will be computed img_world2grid : array, shape (dim+1, dim+1) the space-to-grid transform matrix associated to img img_spacing : array, shape (dim,) the spacing between voxels (voxel size along each axis) of the input image sample_points: array, shape (n, dim) list of points where the derivative will be evaluated (one point per row) Returns ------- out : array, shape (n, dim) the gradient at each point stored at its corresponding row """ dim = len(img.shape) if not is_valid_affine(img_world2grid, dim): raise ValueError("Invalid affine transform matrix") if len(img_spacing) < dim: raise ValueError("Invalid spacings") ftype = img.dtype.type n = sample_points.shape[0] out = np.empty(shape=(n, dim), dtype=ftype) inside = np.empty(shape=(n,), dtype=np.int32) # Select joint density gradient 2D or 3D if dim == 2: jd_grad = _sparse_gradient_2d else: jd_grad = _sparse_gradient_3d jd_grad(img, img_world2grid.astype(np.float64), img_spacing.astype(np.float64), sample_points, out, inside) return out, inside dipy-0.10.1/dipy/boots/000077500000000000000000000000001263041327500146345ustar00rootroot00000000000000dipy-0.10.1/dipy/boots/__init__.py000066400000000000000000000000431263041327500167420ustar00rootroot00000000000000# Init for core.stat dipy objects dipy-0.10.1/dipy/boots/resampling.py000066400000000000000000000234561263041327500173610ustar00rootroot00000000000000#!/usr/bin/python #import modules import time import sys, os, traceback, optparse import numpy as np import scipy as sp from copy import copy, deepcopy import warnings warnings.warn("This module is most likely to change both as a name and in structure in the future",FutureWarning) def bs_se(bs_pdf): """ Calculates the bootstrap standard error estimate of a statistic """ N = len(bs_pdf) return np.std(bs_pdf) * np.sqrt(N / (N - 1)) def bootstrap(x, statistic = bs_se, B = 1000, alpha = 0.95): """ Bootstrap resampling [1]_ to accurately estimate the standard error and confidence interval of a desired statistic of a probability distribution function (pdf). Parameters ------------ x : ndarray (N, 1) Observable sample to resample. N should be reasonably large. statistic : method (optional) Method to calculate the desired statistic. (Default: calculate bootstrap standard error) B : integer (optional) Total number of bootstrap resamples in bootstrap pdf. (Default: 1000) alpha : float (optional) Percentile for confidence interval of the statistic. (Default: 0.05) Returns --------- bs_pdf : ndarray (M, 1) Jackknife probabilisty distribution function of the statistic. se : float Standard error of the statistic. ci : ndarray (2, 1) Confidence interval of the statistic. See Also ----------- numpy.std, numpy.random.random Notes -------- Bootstrap resampling is non parametric. It is quite powerful in determining the standard error and the confidence interval of a sample distribution. The key characteristics of bootstrap is: 1) uniform weighting among all samples (1/n) 2) resampling with replacement In general, the sample size should be large to ensure accuracy of the estimates. The number of bootstrap resamples should be large as well as that will also influence the accuracy of the estimate. References ---------- .. [1] Efron, B., 1979. 1977 Rietz lecture--Bootstrap methods--Another look at the jackknife. Ann. Stat. 7, 1-26. """ N = len(x) pdf_mask = np.ones((N,),dtype='int16') bs_pdf = np.empty((B,)) for ii in range(0, B): #resample with replacement rand_index = np.int16(np.round(np.random.random(N) * (N - 1))) bs_pdf[ii] = statistic(x[rand_index]) return bs_pdf, bs_se(bs_pdf), abc(x, statistic, alpha = alpha) def abc(x, statistic = bs_se , alpha = 0.05, eps = 1e-5): """ Calculates the bootstrap confidence interval by approximating the BCa. Parameters ---------- x : np.ndarray Observed data (e.g. chosen gold standard estimate used for bootstrap) statistic : method Method to calculate the desired statistic given x and probability proportions (flat probability densities vector) alpha : float (0, 1) Desired confidence interval initial endpoint (Default: 0.05) eps : float (optional) Specifies step size in calculating numerical derivative T' and T''. Default: 1e-5 See Also -------- __tt, __tt_dot, __tt_dot_dot, __calc_z0 Notes ----- Unlike the BCa method of calculating the bootstrap confidence interval, the ABC method is computationally less demanding (about 3% computational power needed) and is fairly accurate (sometimes out performing BCa!). It does not require any bootstrap resampling and instead uses numerical derivatives via Taylor series to approximate the BCa calculation. However, the ABC method requires the statistic to be smooth and follow a multinomial distribution. References ---------- .. [2] DiCiccio, T.J., Efron, B., 1996. Bootstrap Confidence Intervals. Statistical Science. 11, 3, 189-228. """ #define base variables -- n, p_0, sigma_hat, delta_hat n = len(x) p_0 = np.ones(x.shape) / n sigma_hat = np.zeros(x.shape) delta_hat = np.zeros(x.shape) for i in range(0, n): sigma_hat[i] = __tt_dot(i, x, p_0, statistic, eps)**2 delta_hat[i] = __tt_dot(i, x, p_0, statistic, eps) sigma_hat = (sigma_hat / n**2)**0.5 #estimate the bias (z_0) and the acceleration (a_hat) a_hat = np.zeros(x.shape) a_num = np.zeros(x.shape) a_dem = np.zeros(x.shape) for i in range(0, n): a_num[i] = __tt_dot(i, x, p_0, statistic, eps)**3 a_dem[i] = __tt_dot(i, x, p_0, statistic, eps)**2 a_hat = 1 / 6 * a_num / a_dem**1.5 z_0 = __calc_z0(x, p_0, statistic, eps, a_hat, sigma_hat) #define helper variables -- w and l w = z_0 + __calc_z_alpha(1 - alpha) l = w / (1 - a_hat * w)**2 return __tt(x, p_0 + l * delta_hat / sigma_hat, statistic) def __calc_z_alpha(alpha): """ Classic "quantile function" that calculates inverse of cdf of standard normal. """ return 2**0.5 * sp.special.erfinv(2 * alpha - 1) def __calc_z0(x, p_0, statistic, eps, a_hat, sigma_hat): """ Function that calculates the bias z_0 for abc method. See Also ---------- abc, __tt, __tt_dot, __tt_dot_dot """ n = len(x) b_hat = np.ones(x.shape) c_q_hat = np.ones(x.shape) tt_dot = np.ones(x.shape) for i in range(0, n): b_hat[i] = __tt_dot_dot(i, x, p_0, statistic, eps) tt_dot[i] = __tt_dot(i, x, p_0, statistic, eps) b_hat = b_hat / (2 * n**2) c_q_hat = (__tt(x, (1 - eps) * p_0 + eps * tt_dot / (n**2 * sigma_hat) , statistic) + __tt(x, (1 - eps) * p_0 - eps * tt_dot / (n**2 * sigma_hat) , statistic) - 2 * __tt(x, p_0, statistic) ) / eps**2 return a_hat - (b_hat / sigma_hat - c_q_hat) def __tt(x, p_0, statistic = bs_se): """ Function that calculates desired statistic from observable data and a given proportional weighting. Parameters ------------ x : np.ndarray Observable data (e.g. from gold standard). p_0 : np.ndarray Proportional weighting vector (Default: uniform weighting 1/n) Returns ------- theta_hat : float Desired statistic of the observable data. See Also ----------- abc, __tt_dot, __tt_dot_dot """ return statistic(x / p_0) def __tt_dot(i, x, p_0, statistic, eps): """ First numerical derivative of __tt """ e = np.zeros(x.shape) e[i] = 1 return ( (__tt(x, (1 - eps) * p_0 + eps * e[i], statistic) - __tt(x, p_0, statistic)) / eps ) def __tt_dot_dot(i, x, p_0, statistic, eps): """ Second numerical derivative of __tt """ e = np.zeros(x.shape) e[i] = 1 return (__tt_dot(i, x, p_0, statistic, eps) / eps + (__tt(x, (1 - eps) * p_0 - eps * e[i], statistic) - __tt(x, p_0, statistic)) / eps**2) def jackknife(pdf, statistic = np.std, M = None): """ Jackknife resampling [3]_ to quickly estimate the bias and standard error of a desired statistic in a probability distribution function (pdf). Parameters ------------ pdf : ndarray (N, 1) Probability distribution function to resample. N should be reasonably large. statistic : method (optional) Method to calculate the desired statistic. (Default: calculate standard deviation) M : integer (M < N) Total number of samples in jackknife pdf. (Default: M == N) Returns --------- jk_pdf : ndarray (M, 1) Jackknife probabilisty distribution function of the statistic. bias : float Bias of the jackknife pdf of the statistic. se : float Standard error of the statistic. See Also ----------- numpy.std, numpy.mean, numpy.random.random Notes -------- Jackknife resampling like bootstrap resampling is non parametric. However, it requires a large distribution to be accurate and in some ways can be considered deterministic (if one removes the same set of samples, then one will get the same estimates of the bias and variance). In the context of this implementation, the sample size should be at least larger than the asymptotic convergence of the statistic (ACstat); preferably, larger than ACstat + np.greater(ACbias, ACvar) The clear benefit of using jackknife is its ability to estimate the bias of the statistic. The most powerful application of this is estimating the bias of a bootstrap-estimated standard error. In fact, one could "bootstrap the bootstrap" (nested bootstrap) of the estimated standard error, but the inaccuracy of the bootstrap to characterize the true mean would incur a poor estimate of the bias (recall: bias = mean[sample_est] - mean[true population]) References ------------- .. [3] Efron, B., 1979. 1977 Rietz lecture--Bootstrap methods--Another look at the jackknife. Ann. Stat. 7, 1-26. """ N = len(pdf) pdf_mask = np.ones((N,),dtype='int16') #keeps track of all n - 1 indexes mask_index = np.copy(pdf_mask) if M == None: M = N M = np.minimum(M, N - 1) jk_pdf = np.empty((M,)) for ii in range(0, M): rand_index = np.round(np.random.random() * (N - 1)) #choose a unique random sample to remove while pdf_mask[rand_index] == 0 : rand_index = np.round(np.random.random() * (N - 1)) #set mask to zero for chosen random index so not to choose again pdf_mask[rand_index] = 0 mask_index[rand_index] = 0 jk_pdf[ii] = statistic(pdf[mask_index > 0]) #compute n-1 statistic mask_index[rand_index] = 1 return jk_pdf, (N - 1) * (np.mean(jk_pdf) - statistic(pdf)), np.sqrt(N - 1) * np.std(jk_pdf) def residual_bootstrap(data): pass def repetition_bootstrap(data): pass dipy-0.10.1/dipy/core/000077500000000000000000000000001263041327500144365ustar00rootroot00000000000000dipy-0.10.1/dipy/core/__init__.py000066400000000000000000000002061263041327500165450ustar00rootroot00000000000000# Init for core dipy objects """ Core objects """ # Test callable from numpy.testing import Tester test = Tester().test del Tester dipy-0.10.1/dipy/core/geometry.py000066400000000000000000000744471263041327500166630ustar00rootroot00000000000000''' Utility functions for algebra etc ''' from __future__ import division, print_function, absolute_import import math import numpy as np import numpy.linalg as npl # epsilon for testing whether a number is close to zero _EPS = np.finfo(float).eps * 4.0 # axis sequences for Euler angles _NEXT_AXIS = [1, 2, 0, 1] # map axes strings to/from tuples of inner axis, parity, repetition, frame _AXES2TUPLE = { 'sxyz': (0, 0, 0, 0), 'sxyx': (0, 0, 1, 0), 'sxzy': (0, 1, 0, 0), 'sxzx': (0, 1, 1, 0), 'syzx': (1, 0, 0, 0), 'syzy': (1, 0, 1, 0), 'syxz': (1, 1, 0, 0), 'syxy': (1, 1, 1, 0), 'szxy': (2, 0, 0, 0), 'szxz': (2, 0, 1, 0), 'szyx': (2, 1, 0, 0), 'szyz': (2, 1, 1, 0), 'rzyx': (0, 0, 0, 1), 'rxyx': (0, 0, 1, 1), 'ryzx': (0, 1, 0, 1), 'rxzx': (0, 1, 1, 1), 'rxzy': (1, 0, 0, 1), 'ryzy': (1, 0, 1, 1), 'rzxy': (1, 1, 0, 1), 'ryxy': (1, 1, 1, 1), 'ryxz': (2, 0, 0, 1), 'rzxz': (2, 0, 1, 1), 'rxyz': (2, 1, 0, 1), 'rzyz': (2, 1, 1, 1)} _TUPLE2AXES = dict((v, k) for k, v in _AXES2TUPLE.items()) def sphere2cart(r, theta, phi): ''' Spherical to Cartesian coordinates This is the standard physics convention where `theta` is the inclination (polar) angle, and `phi` is the azimuth angle. Imagine a sphere with center (0,0,0). Orient it with the z axis running south-north, the y axis running west-east and the x axis from posterior to anterior. `theta` (the inclination angle) is the angle to rotate from the z-axis (the zenith) around the y-axis, towards the x axis. Thus the rotation is counter-clockwise from the point of view of positive y. `phi` (azimuth) gives the angle of rotation around the z-axis towards the y axis. The rotation is counter-clockwise from the point of view of positive z. Equivalently, given a point P on the sphere, with coordinates x, y, z, `theta` is the angle between P and the z-axis, and `phi` is the angle between the projection of P onto the XY plane, and the X axis. Geographical nomenclature designates theta as 'co-latitude', and phi as 'longitude' Parameters ------------ r : array_like radius theta : array_like inclination or polar angle phi : array_like azimuth angle Returns --------- x : array x coordinate(s) in Cartesion space y : array y coordinate(s) in Cartesian space z : array z coordinate Notes -------- See these pages: * http://en.wikipedia.org/wiki/Spherical_coordinate_system * http://mathworld.wolfram.com/SphericalCoordinates.html for excellent discussion of the many different conventions possible. Here we use the physics conventions, used in the wikipedia page. Derivations of the formulae are simple. Consider a vector x, y, z of length r (norm of x, y, z). The inclination angle (theta) can be found from: cos(theta) == z / r -> z == r * cos(theta). This gives the hypotenuse of the projection onto the XY plane, which we will call Q. Q == r*sin(theta). Now x / Q == cos(phi) -> x == r * sin(theta) * cos(phi) and so on. We have deliberately named this function ``sphere2cart`` rather than ``sph2cart`` to distinguish it from the Matlab function of that name, because the Matlab function uses an unusual convention for the angles that we did not want to replicate. The Matlab function is trivial to implement with the formulae given in the Matlab help. ''' sin_theta = np.sin(theta) x = r * np.cos(phi) * sin_theta y = r * np.sin(phi) * sin_theta z = r * np.cos(theta) x, y, z = np.broadcast_arrays(x, y, z) return x, y, z def cart2sphere(x, y, z): r''' Return angles for Cartesian 3D coordinates `x`, `y`, and `z` See doc for ``sphere2cart`` for angle conventions and derivation of the formulae. $0\le\theta\mathrm{(theta)}\le\pi$ and $-\pi\le\phi\mathrm{(phi)}\le\pi$ Parameters ------------ x : array_like x coordinate in Cartesian space y : array_like y coordinate in Cartesian space z : array_like z coordinate Returns --------- r : array radius theta : array inclination (polar) angle phi : array azimuth angle ''' r = np.sqrt(x * x + y * y + z * z) theta = np.arccos(z / r) theta = np.where(r > 0, theta, 0.) phi = np.arctan2(y, x) r, theta, phi = np.broadcast_arrays(r, theta, phi) return r, theta, phi def sph2latlon(theta, phi): """Convert spherical coordinates to latitude and longitude. Returns ------- lat, lon : ndarray Latitude and longitude. """ return np.rad2deg(theta - np.pi / 2), np.rad2deg(phi - np.pi) def normalized_vector(vec, axis=-1): ''' Return vector divided by its Euclidean (L2) norm See :term:`unit vector` and :term:`Euclidean norm` Parameters ------------ vec : array_like shape (3,) Returns ---------- nvec : array shape (3,) vector divided by L2 norm Examples ----------- >>> vec = [1, 2, 3] >>> l2n = np.sqrt(np.dot(vec, vec)) >>> nvec = normalized_vector(vec) >>> np.allclose(np.array(vec) / l2n, nvec) True >>> vec = np.array([[1, 2, 3]]) >>> vec.shape (1, 3) >>> normalized_vector(vec).shape (1, 3) ''' return vec / vector_norm(vec, axis, keepdims=True) def vector_norm(vec, axis=-1, keepdims=False): ''' Return vector Euclidean (L2) norm See :term:`unit vector` and :term:`Euclidean norm` Parameters ------------- vec : array_like Vectors to norm. axis : int Axis over which to norm. By default norm over last axis. If `axis` is None, `vec` is flattened then normed. keepdims : bool If True, the output will have the same number of dimensions as `vec`, with shape 1 on `axis`. Returns --------- norm : array Euclidean norms of vectors. Examples -------- >>> import numpy as np >>> vec = [[8, 15, 0], [0, 36, 77]] >>> vector_norm(vec) array([ 17., 85.]) >>> vector_norm(vec, keepdims=True) array([[ 17.], [ 85.]]) >>> vector_norm(vec, axis=0) array([ 8., 39., 77.]) ''' vec = np.asarray(vec) vec_norm = np.sqrt((vec * vec).sum(axis)) if keepdims: if axis is None: shape = [1] * vec.ndim else: shape = list(vec.shape) shape[axis] = 1 vec_norm = vec_norm.reshape(shape) return vec_norm def rodrigues_axis_rotation(r, theta): """ Rodrigues formula Rotation matrix for rotation around axis r for angle theta. The rotation matrix is given by the Rodrigues formula: R = Id + sin(theta)*Sn + (1-cos(theta))*Sn^2 with:: 0 -nz ny Sn = nz 0 -nx -ny nx 0 where n = r / ||r|| In case the angle ||r|| is very small, the above formula may lead to numerical instabilities. We instead use a Taylor expansion around theta=0: R = I + sin(theta)/tetha Sr + (1-cos(theta))/teta2 Sr^2 leading to: R = I + (1-theta2/6)*Sr + (1/2-theta2/24)*Sr^2 Parameters ----------- r : array_like shape (3,), axis theta : float, angle in degrees Returns ---------- R : array, shape (3,3), rotation matrix Examples --------- >>> import numpy as np >>> from dipy.core.geometry import rodrigues_axis_rotation >>> v=np.array([0,0,1]) >>> u=np.array([1,0,0]) >>> R=rodrigues_axis_rotation(v,40) >>> ur=np.dot(R,u) >>> np.round(np.rad2deg(np.arccos(np.dot(ur,u)))) 40.0 """ theta = np.deg2rad(theta) if theta > 1e-30: n = r / np.linalg.norm(r) Sn = np.array([[0, -n[2], n[1]], [n[2], 0, -n[0]], [-n[1], n[0], 0]]) R = np.eye(3) + np.sin(theta) * Sn + \ (1 - np.cos(theta)) * np.dot(Sn, Sn) else: Sr = np.array([[0, -r[2], r[1]], [r[2], 0, -r[0]], [-r[1], r[0], 0]]) theta2 = theta * theta R = np.eye(3) + (1 - theta2 / 6.) * \ Sr + (.5 - theta2 / 24.) * np.dot(Sr, Sr) return R def nearest_pos_semi_def(B): ''' Least squares positive semi-definite tensor estimation Parameters ------------ B : (3,3) array_like B matrix - symmetric. We do not check the symmetry. Returns --------- npds : (3,3) array Estimated nearest positive semi-definite array to matrix `B`. Examples ---------- >>> B = np.diag([1, 1, -1]) >>> nearest_pos_semi_def(B) array([[ 0.75, 0. , 0. ], [ 0. , 0.75, 0. ], [ 0. , 0. , 0. ]]) References ---------- .. [1] Niethammer M, San Jose Estepar R, Bouix S, Shenton M, Westin CF. On diffusion tensor estimation. Conf Proc IEEE Eng Med Biol Soc. 2006;1:2622-5. PubMed PMID: 17946125; PubMed Central PMCID: PMC2791793. ''' B = np.asarray(B) vals, vecs = npl.eigh(B) # indices of eigenvalues in descending order inds = np.argsort(vals)[::-1] vals = vals[inds] cardneg = np.sum(vals < 0) if cardneg == 0: return B if cardneg == 3: return np.zeros((3, 3)) lam1a, lam2a, lam3a = vals scalers = np.zeros((3,)) if cardneg == 2: b112 = np.max([0, lam1a + (lam2a + lam3a) / 3.]) scalers[0] = b112 elif cardneg == 1: lam1b = lam1a + 0.25 * lam3a lam2b = lam2a + 0.25 * lam3a if lam1b >= 0 and lam2b >= 0: scalers[:2] = lam1b, lam2b else: # one of the lam1b, lam2b is < 0 if lam2b < 0: b111 = np.max([0, lam1a + (lam2a + lam3a) / 3.]) scalers[0] = b111 if lam1b < 0: b221 = np.max([0, lam2a + (lam1a + lam3a) / 3.]) scalers[1] = b221 # resort the scalers to match the original vecs scalers = scalers[np.argsort(inds)] return np.dot(vecs, np.dot(np.diag(scalers), vecs.T)) def sphere_distance(pts1, pts2, radius=None, check_radius=True): """ Distance across sphere surface between `pts1` and `pts2` Parameters ------------ pts1 : (N,R) or (R,) array_like where N is the number of points and R is the number of coordinates defining a point (``R==3`` for 3D) pts2 : (N,R) or (R,) array_like where N is the number of points and R is the number of coordinates defining a point (``R==3`` for 3D). It should be possible to broadcast `pts1` against `pts2` radius : None or float, optional Radius of sphere. Default is to work out radius from mean of the length of each point vector check_radius : bool, optional If True, check if the points are on the sphere surface - i.e check if the vector lengths in `pts1` and `pts2` are close to `radius`. Default is True. Returns --------- d : (N,) or (0,) array Distances between corresponding points in `pts1` and `pts2` across the spherical surface, i.e. the great circle distance See also ---------- cart_distance : cartesian distance between points vector_cosine : cosine of angle between vectors Examples ---------- >>> print('%.4f' % sphere_distance([0,1],[1,0])) 1.5708 >>> print('%.4f' % sphere_distance([0,3],[3,0])) 4.7124 """ pts1 = np.asarray(pts1) pts2 = np.asarray(pts2) lens1 = np.sqrt(np.sum(pts1 ** 2, axis=-1)) lens2 = np.sqrt(np.sum(pts2 ** 2, axis=-1)) if radius is None: radius = (np.mean(lens1) + np.mean(lens2)) / 2.0 if check_radius: if not (np.allclose(radius, lens1) and np.allclose(radius, lens2)): raise ValueError('Radii do not match sphere surface') # Get angle with vector cosine dots = np.inner(pts1, pts2) lens = lens1 * lens2 angle_cos = np.arccos(dots / lens) return angle_cos * radius def cart_distance(pts1, pts2): ''' Cartesian distance between `pts1` and `pts2` If either of `pts1` or `pts2` is 2D, then we take the first dimension to index points, and the second indexes coordinate. More generally, we take the last dimension to be the coordinate dimension. Parameters ---------- pts1 : (N,R) or (R,) array_like where N is the number of points and R is the number of coordinates defining a point (``R==3`` for 3D) pts2 : (N,R) or (R,) array_like where N is the number of points and R is the number of coordinates defining a point (``R==3`` for 3D). It should be possible to broadcast `pts1` against `pts2` Returns ------- d : (N,) or (0,) array Cartesian distances between corresponding points in `pts1` and `pts2` See also -------- sphere_distance : distance between points on sphere surface Examples ---------- >>> cart_distance([0,0,0], [0,0,3]) 3.0 ''' sqs = np.subtract(pts1, pts2) ** 2 return np.sqrt(np.sum(sqs, axis=-1)) def vector_cosine(vecs1, vecs2): """ Cosine of angle between two (sets of) vectors The cosine of the angle between two vectors ``v1`` and ``v2`` is given by the inner product of ``v1`` and ``v2`` divided by the product of the vector lengths:: v_cos = np.inner(v1, v2) / (np.sqrt(np.sum(v1**2)) * np.sqrt(np.sum(v2**2))) Parameters ------------- vecs1 : (N, R) or (R,) array_like N vectors (as rows) or single vector. Vectors have R elements. vecs1 : (N, R) or (R,) array_like N vectors (as rows) or single vector. Vectors have R elements. It should be possible to broadcast `vecs1` against `vecs2` Returns ---------- vcos : (N,) or (0,) array Vector cosines. To get the angles you will need ``np.arccos`` Notes -------- The vector cosine will be the same as the correlation only if all the input vectors have zero mean. """ vecs1 = np.asarray(vecs1) vecs2 = np.asarray(vecs2) lens1 = np.sqrt(np.sum(vecs1 ** 2, axis=-1)) lens2 = np.sqrt(np.sum(vecs2 ** 2, axis=-1)) dots = np.inner(vecs1, vecs2) lens = lens1 * lens2 return dots / lens def lambert_equal_area_projection_polar(theta, phi): r""" Lambert Equal Area Projection from polar sphere to plane Return positions in (y1,y2) plane corresponding to the points with polar coordinates (theta, phi) on the unit sphere, under the Lambert Equal Area Projection mapping (see Mardia and Jupp (2000), Directional Statistics, p. 161). See doc for ``sphere2cart`` for angle conventions - $0 \le \theta \le \pi$ and $0 \le \phi \le 2 \pi$ - $|(y_1,y_2)| \le 2$ The Lambert EAP maps the upper hemisphere to the planar disc of radius 1 and the lower hemisphere to the planar annulus between radii 1 and 2, and *vice versa*. Parameters ---------- theta : array_like theta spherical coordinates phi : array_like phi spherical coordinates Returns --------- y : (N,2) array planar coordinates of points following mapping by Lambert's EAP. """ return 2 * np.repeat(np.sin(theta / 2), 2).reshape((theta.shape[0], 2)) * \ np.column_stack((np.cos(phi), np.sin(phi))) def lambert_equal_area_projection_cart(x, y, z): r''' Lambert Equal Area Projection from cartesian vector to plane Return positions in $(y_1,y_2)$ plane corresponding to the directions of the vectors with cartesian coordinates xyz under the Lambert Equal Area Projection mapping (see Mardia and Jupp (2000), Directional Statistics, p. 161). The Lambert EAP maps the upper hemisphere to the planar disc of radius 1 and the lower hemisphere to the planar annulus between radii 1 and 2, The Lambert EAP maps the upper hemisphere to the planar disc of radius 1 and the lower hemisphere to the planar annulus between radii 1 and 2. and *vice versa*. See doc for ``sphere2cart`` for angle conventions Parameters ------------ x : array_like x coordinate in Cartesion space y : array_like y coordinate in Cartesian space z : array_like z coordinate Returns ---------- y : (N,2) array planar coordinates of points following mapping by Lambert's EAP. ''' (r, theta, phi) = cart2sphere(x, y, z) return lambert_equal_area_projection_polar(theta, phi) def euler_matrix(ai, aj, ak, axes='sxyz'): """Return homogeneous rotation matrix from Euler angles and axis sequence. Code modified from the work of Christoph Gohlke link provided here http://www.lfd.uci.edu/~gohlke/code/transformations.py.html Parameters ------------ ai, aj, ak : Euler's roll, pitch and yaw angles axes : One of 24 axis sequences as string or encoded tuple Returns --------- matrix : ndarray (4, 4) Code modified from the work of Christoph Gohlke link provided here http://www.lfd.uci.edu/~gohlke/code/transformations.py.html Examples -------- >>> import numpy >>> R = euler_matrix(1, 2, 3, 'syxz') >>> numpy.allclose(numpy.sum(R[0]), -1.34786452) True >>> R = euler_matrix(1, 2, 3, (0, 1, 0, 1)) >>> numpy.allclose(numpy.sum(R[0]), -0.383436184) True >>> ai, aj, ak = (4.0*math.pi) * (numpy.random.random(3) - 0.5) >>> for axes in _AXES2TUPLE.keys(): ... R = euler_matrix(ai, aj, ak, axes) >>> for axes in _TUPLE2AXES.keys(): ... R = euler_matrix(ai, aj, ak, axes) """ try: firstaxis, parity, repetition, frame = _AXES2TUPLE[axes] except (AttributeError, KeyError): firstaxis, parity, repetition, frame = axes i = firstaxis j = _NEXT_AXIS[i + parity] k = _NEXT_AXIS[i - parity + 1] if frame: ai, ak = ak, ai if parity: ai, aj, ak = -ai, -aj, -ak si, sj, sk = math.sin(ai), math.sin(aj), math.sin(ak) ci, cj, ck = math.cos(ai), math.cos(aj), math.cos(ak) cc, cs = ci * ck, ci * sk sc, ss = si * ck, si * sk M = np.identity(4) if repetition: M[i, i] = cj M[i, j] = sj * si M[i, k] = sj * ci M[j, i] = sj * sk M[j, j] = -cj * ss + cc M[j, k] = -cj * cs - sc M[k, i] = -sj * ck M[k, j] = cj * sc + cs M[k, k] = cj * cc - ss else: M[i, i] = cj * ck M[i, j] = sj * sc - cs M[i, k] = sj * cc + ss M[j, i] = cj * sk M[j, j] = sj * ss + cc M[j, k] = sj * cs - sc M[k, i] = -sj M[k, j] = cj * si M[k, k] = cj * ci return M def compose_matrix(scale=None, shear=None, angles=None, translate=None, perspective=None): """Return 4x4 transformation matrix from sequence of transformations. Code modified from the work of Christoph Gohlke link provided here http://www.lfd.uci.edu/~gohlke/code/transformations.py.html This is the inverse of the ``decompose_matrix`` function. Parameters ------------- scale : (3,) array_like Scaling factors. shear : array_like Shear factors for x-y, x-z, y-z axes. angles : array_like Euler angles about static x, y, z axes. translate : array_like Translation vector along x, y, z axes. perspective : array_like Perspective partition of matrix. Returns --------- matrix : 4x4 array Examples ---------- >>> import math >>> import numpy as np >>> import dipy.core.geometry as gm >>> scale = np.random.random(3) - 0.5 >>> shear = np.random.random(3) - 0.5 >>> angles = (np.random.random(3) - 0.5) * (2*math.pi) >>> trans = np.random.random(3) - 0.5 >>> persp = np.random.random(4) - 0.5 >>> M0 = gm.compose_matrix(scale, shear, angles, trans, persp) """ M = np.identity(4) if perspective is not None: P = np.identity(4) P[3, :] = perspective[:4] M = np.dot(M, P) if translate is not None: T = np.identity(4) T[:3, 3] = translate[:3] M = np.dot(M, T) if angles is not None: R = euler_matrix(angles[0], angles[1], angles[2], 'sxyz') M = np.dot(M, R) if shear is not None: Z = np.identity(4) Z[1, 2] = shear[2] Z[0, 2] = shear[1] Z[0, 1] = shear[0] M = np.dot(M, Z) if scale is not None: S = np.identity(4) S[0, 0] = scale[0] S[1, 1] = scale[1] S[2, 2] = scale[2] M = np.dot(M, S) M /= M[3, 3] return M def decompose_matrix(matrix): """Return sequence of transformations from transformation matrix. Code modified from the excellent work of Christoph Gohlke link provided here: http://www.lfd.uci.edu/~gohlke/code/transformations.py.html Parameters ------------ matrix : array_like Non-degenerative homogeneous transformation matrix Returns --------- scale : (3,) ndarray Three scaling factors. shear : (3,) ndarray Shear factors for x-y, x-z, y-z axes. angles : (3,) ndarray Euler angles about static x, y, z axes. translate : (3,) ndarray Translation vector along x, y, z axes. perspective : ndarray Perspective partition of matrix. Raises ------ ValueError If matrix is of wrong type or degenerative. Examples ----------- >>> import numpy as np >>> T0=np.diag([2,1,1,1]) >>> scale, shear, angles, trans, persp = decompose_matrix(T0) """ M = np.array(matrix, dtype=np.float64, copy=True).T if abs(M[3, 3]) < _EPS: raise ValueError("M[3, 3] is zero") M /= M[3, 3] P = M.copy() P[:, 3] = 0, 0, 0, 1 if not np.linalg.det(P): raise ValueError("matrix is singular") scale = np.zeros((3, ), dtype=np.float64) shear = [0, 0, 0] angles = [0, 0, 0] if any(abs(M[:3, 3]) > _EPS): perspective = np.dot(M[:, 3], np.linalg.inv(P.T)) M[:, 3] = 0, 0, 0, 1 else: perspective = np.array((0, 0, 0, 1), dtype=np.float64) translate = M[3, :3].copy() M[3, :3] = 0 row = M[:3, :3].copy() scale[0] = vector_norm(row[0]) row[0] /= scale[0] shear[0] = np.dot(row[0], row[1]) row[1] -= row[0] * shear[0] scale[1] = vector_norm(row[1]) row[1] /= scale[1] shear[0] /= scale[1] shear[1] = np.dot(row[0], row[2]) row[2] -= row[0] * shear[1] shear[2] = np.dot(row[1], row[2]) row[2] -= row[1] * shear[2] scale[2] = vector_norm(row[2]) row[2] /= scale[2] shear[1:] /= scale[2] if np.dot(row[0], np.cross(row[1], row[2])) < 0: scale *= -1 row *= -1 angles[1] = math.asin(-row[0, 2]) if math.cos(angles[1]): angles[0] = math.atan2(row[1, 2], row[2, 2]) angles[2] = math.atan2(row[0, 1], row[0, 0]) else: # angles[0] = math.atan2(row[1, 0], row[1, 1]) angles[0] = math.atan2(-row[2, 1], row[1, 1]) angles[2] = 0.0 return scale, shear, angles, translate, perspective def circumradius(a, b, c): ''' a, b and c are 3-dimensional vectors which are the vertices of a triangle. The function returns the circumradius of the triangle, i.e the radius of the smallest circle that can contain the triangle. In the degenerate case when the 3 points are collinear it returns half the distance between the furthest apart points. Parameters ---------- a, b, c : (3,) array_like the three vertices of the triangle Returns ------- circumradius : float the desired circumradius ''' x = a - c xx = np.linalg.norm(x) ** 2 y = b - c yy = np.linalg.norm(y) ** 2 z = np.cross(x, y) # test for collinearity if np.linalg.norm(z) == 0: return np.sqrt(np.max(np.dot(x, x), np.dot(y, y), np.dot(a - b, a - b))) / 2. else: m = np.vstack((x, y, z)) w = np.dot(np.linalg.inv(m.T), np.array([xx / 2., yy / 2., 0])) return np.linalg.norm(w) / 2. def vec2vec_rotmat(u, v): r""" rotation matrix from 2 unit vectors u, v being unit 3d vectors return a 3x3 rotation matrix R than aligns u to v. In general there are many rotations that will map u to v. If S is any rotation using v as an axis then R.S will also map u to v since (S.R)u = S(Ru) = Sv = v. The rotation R returned by vec2vec_rotmat leaves fixed the perpendicular to the plane spanned by u and v. The transpose of R will align v to u. Parameters ----------- u : array, shape(3,) v : array, shape(3,) Returns --------- R : array, shape(3,3) Examples --------- >>> import numpy as np >>> from dipy.core.geometry import vec2vec_rotmat >>> u=np.array([1,0,0]) >>> v=np.array([0,1,0]) >>> R=vec2vec_rotmat(u,v) >>> np.dot(R,u) array([ 0., 1., 0.]) >>> np.dot(R.T,v) array([ 1., 0., 0.]) """ # Cross product is the first step to find R # Rely on numpy instead of manual checking for failing # cases w = np.cross(u, v) wn = np.linalg.norm(w) # Check that cross product is OK and vectors # u, v are not collinear (norm(w)>0.0) if np.isnan(wn) or wn < np.finfo(float).eps: norm_u_v = np.linalg.norm(u - v) # This is the case of two antipodal vectors: # ** former checking assumed norm(u) == norm(v) if norm_u_v > np.linalg.norm(u): return -np.eye(3) return np.eye(3) # if everything ok, normalize w w = w / wn # vp is in plane of u,v, perpendicular to u vp = (v - (np.dot(u, v) * u)) vp = vp / np.linalg.norm(vp) # (u vp w) is an orthonormal basis P = np.array([u, vp, w]) Pt = P.T cosa = np.dot(u, v) sina = np.sqrt(1 - cosa ** 2) R = np.array([[cosa, -sina, 0], [sina, cosa, 0], [0, 0, 1]]) Rp = np.dot(Pt, np.dot(R, P)) # make sure that you don't return any Nans # check using the appropriate tool in numpy if np.any(np.isnan(Rp)): return np.eye(3) return Rp def compose_transformations(*mats): """ Compose multiple 4x4 affine transformations in one 4x4 matrix Parameters ----------- mat1 : array, (4, 4) mat2 : array, (4, 4) ... matN : array, (4, 4) Returns ------- matN x ... x mat2 x mat1 : array, (4, 4) """ prev = mats[0] if len(mats) < 2: raise ValueError('At least two or more matrices are needed') for mat in mats[1:]: prev = np.dot(mat, prev) return prev def perpendicular_directions(v, num=30, half=False): r""" Computes n evenly spaced perpendicular directions relative to a given vector v Parameters ----------- v : array (3,) Array containing the three cartesian coordinates of vector v num : int, optional Number of perpendicular directions to generate half : bool, optional If half is True, perpendicular directions are sampled on half of the unit circumference perpendicular to v, otherwive perpendicular directions are sampled on the full circumference. Default of half is False Returns ------- psamples : array (n, 3) array of vectors perpendicular to v Notes -------- Perpendicular directions are estimated using the following two step procedure: 1) the perpendicular directions are first sampled in a unit circumference parallel to the plane normal to the x-axis. 2) Samples are then rotated and aligned to the plane normal to vector v. The rotational matrix for this rotation is constructed as reference frame basis which axis are the following: - The first axis is vector v - The second axis is defined as the normalized vector given by the cross product between vector v and the unit vector aligned to the x-axis - The third axis is defined as the cross product between the previous computed vector and vector v. Following this two steps, coordinates of the final perpendicular directions are given as: .. math:: \left [ -\sin(a_{i}) \sqrt{{v_{y}}^{2}+{v_{z}}^{2}} \; , \; \frac{v_{x}v_{y}\sin(a_{i})-v_{z}\cos(a_{i})} {\sqrt{{v_{y}}^{2}+{v_{z}}^{2}}} \; , \; \frac{v_{x}v_{z}\sin(a_{i})-v_{y}\cos(a_{i})} {\sqrt{{v_{y}}^{2}+{v_{z}}^{2}}} \right ] This procedure has a singularity when vector v is aligned to the x-axis. To solve this singularity, perpendicular directions in procedure's step 1 are defined in the plane normal to y-axis and the second axis of the rotated frame of reference is computed as the normalized vector given by the cross product between vector v and the unit vector aligned to the y-axis. Following this, the coordinates of the perpendicular directions are given as: \left [ -\frac{\left (v_{x}v_{y}\sin(a_{i})+v_{z}\cos(a_{i}) \right )} {\sqrt{{v_{x}}^{2}+{v_{z}}^{2}}} \; , \; \sin(a_{i}) \sqrt{{v_{x}}^{2}+{v_{z}}^{2}} \; , \; \frac{v_{y}v_{z}\sin(a_{i})+v_{x}\cos(a_{i})} {\sqrt{{v_{x}}^{2}+{v_{z}}^{2}}} \right ] For more details on this calculation, see ` here `_. """ v = np.array(v, dtype=float) # Float error used for floats comparison er = np.finfo(v[0]).eps * 1e3 # Define circumference or semi-circumference if half is True: a = np.linspace(0., math.pi, num=num, endpoint=False) else: a = np.linspace(0., 2 * math.pi, num=num, endpoint=False) cosa = np.cos(a) sina = np.sin(a) # Check if vector is not aligned to the x axis if abs(v[0] - 1.) > er: sq = np.sqrt(v[1]**2 + v[2]**2) psamples = np.array([- sq*sina, (v[0]*v[1]*sina - v[2]*cosa) / sq, (v[0]*v[2]*sina + v[1]*cosa) / sq]) else: sq = np.sqrt(v[0]**2 + v[2]**2) psamples = np.array([- (v[2]*cosa + v[0]*v[1]*sina) / sq, sina*sq, (v[0]*cosa - v[2]*v[1]*sina) / sq]) return psamples.T def dist_to_corner(affine): """Calculate the maximal distance from the center to a corner of a voxel, given an affine Parameters ---------- affine : 4 by 4 array. The spatial transformation from the measurement to the scanner space. Returns ------- dist: float The maximal distance to the corner of a voxel, given voxel size encoded in the affine. """ R = affine[0:3, 0:3] vox_dim = np.diag(np.linalg.cholesky(R.T.dot(R))) return np.sqrt(np.sum((vox_dim / 2) ** 2)) dipy-0.10.1/dipy/core/gradients.py000066400000000000000000000205231263041327500167720ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from ..utils.six import string_types import numpy as np from ..io import gradients as io from .onetime import auto_attr from .geometry import vector_norm class GradientTable(object): """Diffusion gradient information Parameters ---------- gradients : array_like (N, 3) N diffusion gradients b0_threshold : float Gradients with b-value less than or equal to `b0_threshold` are considered as b0s i.e. without diffusion weighting. Attributes ---------- gradients : (N,3) ndarray diffusion gradients bvals : (N,) ndarray The b-value, or magnitude, of each gradient direction. qvals: (N,) ndarray The q-value for each gradient direction. Needs big and small delta. bvecs : (N,3) ndarray The direction, represented as a unit vector, of each gradient. b0s_mask : (N,) ndarray Boolean array indicating which gradients have no diffusion weighting, ie b-value is close to 0. b0_threshold : float Gradients with b-value less than or equal to `b0_threshold` are considered to not have diffusion weighting. See Also -------- gradient_table """ def __init__(self, gradients, big_delta=None, small_delta=None, b0_threshold=0): """Constructor for GradientTable class""" gradients = np.asarray(gradients) if gradients.ndim != 2 or gradients.shape[1] != 3: raise ValueError("gradients should be an (N, 3) array") self.gradients = gradients # Avoid nan gradients. Set these to 0 instead: self.gradients = np.where(np.isnan(gradients), 0., gradients) self.big_delta = big_delta self.small_delta = small_delta self.b0_threshold = b0_threshold @auto_attr def bvals(self): return vector_norm(self.gradients) @auto_attr def qvals(self): tau = self.big_delta - self.small_delta / 3.0 return np.sqrt(self.bvals / tau) / (2 * np.pi) @auto_attr def b0s_mask(self): return self.bvals <= self.b0_threshold @auto_attr def bvecs(self): # To get unit vectors we divide by bvals, where bvals is 0 we divide by # 1 to avoid making nans denom = self.bvals + (self.bvals == 0) denom = denom.reshape((-1, 1)) return self.gradients / denom @property def info(self): print('B-values shape (%d,)' % self.bvals.shape) print(' min %f ' % self.bvals.min()) print(' max %f ' % self.bvals.max()) print('B-vectors shape (%d, %d)' % self.bvecs.shape) print(' min %f ' % self.bvecs.min()) print(' max %f ' % self.bvecs.max()) def gradient_table_from_bvals_bvecs(bvals, bvecs, b0_threshold=0, atol=1e-2, **kwargs): """Creates a GradientTable from a bvals array and a bvecs array Parameters ---------- bvals : array_like (N,) The b-value, or magnitude, of each gradient direction. bvecs : array_like (N, 3) The direction, represented as a unit vector, of each gradient. b0_threshold : float Gradients with b-value less than or equal to `bo_threshold` are considered to not have diffusion weighting. atol : float Each vector in `bvecs` must be a unit vectors up to a tolerance of `atol`. Other Parameters ---------------- **kwargs : dict Other keyword inputs are passed to GradientTable. Returns ------- gradients : GradientTable A GradientTable with all the gradient information. See Also -------- GradientTable, gradient_table """ bvals = np.asarray(bvals, np.float) bvecs = np.asarray(bvecs, np.float) dwi_mask = bvals > b0_threshold # check that bvals is (N,) array and bvecs is (N, 3) unit vectors if bvals.ndim != 1 or bvecs.ndim != 2 or bvecs.shape[0] != bvals.shape[0]: raise ValueError("bvals and bvecs should be (N,) and (N, 3) arrays " "respectively, where N is the number of diffusion " "gradients") bvecs_close_to_1 = abs(vector_norm(bvecs) - 1) <= atol if bvecs.shape[1] != 3 or not np.all(bvecs_close_to_1[dwi_mask]): raise ValueError("bvecs should be (N, 3), a set of N unit vectors") bvecs = np.where(bvecs_close_to_1[:, None], bvecs, 0) bvals = bvals * bvecs_close_to_1 gradients = bvals[:, None] * bvecs grad_table = GradientTable(gradients, b0_threshold=b0_threshold, **kwargs) grad_table.bvals = bvals grad_table.bvecs = bvecs grad_table.b0s_mask = ~dwi_mask return grad_table def gradient_table(bvals, bvecs=None, big_delta=None, small_delta=None, b0_threshold=0, atol=1e-2): """A general function for creating diffusion MR gradients. It reads, loads and prepares scanner parameters like the b-values and b-vectors so that they can be useful during the reconstruction process. Parameters ---------- bvals : can be any of the four options 1. an array of shape (N,) or (1, N) or (N, 1) with the b-values. 2. a path for the file which contains an array like the above (1). 3. an array of shape (N, 4) or (4, N). Then this parameter is considered to be a b-table which contains both bvals and bvecs. In this case the next parameter is skipped. 4. a path for the file which contains an array like the one at (3). bvecs : can be any of two options 1. an array of shape (N, 3) or (3, N) with the b-vectors. 2. a path for the file which contains an array like the previous. big_delta : float acquisition timing duration (default None) small_delta : float acquisition timing duration (default None) b0_threshold : float All b-values with values less than or equal to `bo_threshold` are considered as b0s i.e. without diffusion weighting. atol : float All b-vectors need to be unit vectors up to a tolerance. Returns ------- gradients : GradientTable A GradientTable with all the gradient information. Examples -------- >>> from dipy.core.gradients import gradient_table >>> bvals=1500*np.ones(7) >>> bvals[0]=0 >>> sq2=np.sqrt(2)/2 >>> bvecs=np.array([[0, 0, 0], ... [1, 0, 0], ... [0, 1, 0], ... [0, 0, 1], ... [sq2, sq2, 0], ... [sq2, 0, sq2], ... [0, sq2, sq2]]) >>> gt = gradient_table(bvals, bvecs) >>> gt.bvecs.shape == bvecs.shape True >>> gt = gradient_table(bvals, bvecs.T) >>> gt.bvecs.shape == bvecs.T.shape False Notes ----- 1. Often b0s (b-values which correspond to images without diffusion weighting) have 0 values however in some cases the scanner cannot provide b0s of an exact 0 value and it gives a bit higher values e.g. 6 or 12. This is the purpose of the b0_threshold in the __init__. 2. We assume that the minimum number of b-values is 7. 3. B-vectors should be unit vectors. """ # If you provided strings with full paths, we go and load those from # the files: if isinstance(bvals, string_types): bvals, _ = io.read_bvals_bvecs(bvals, None) if isinstance(bvecs, string_types): _, bvecs = io.read_bvals_bvecs(None, bvecs) bvals = np.asarray(bvals) # If bvecs is None we expect bvals to be an (N, 4) or (4, N) array. if bvecs is None: if bvals.shape[-1] == 4: bvecs = bvals[:, 1:] bvals = np.squeeze(bvals[:, 0]) elif bvals.shape[0] == 4: bvecs = bvals[1:, :].T bvals = np.squeeze(bvals[0, :]) else: raise ValueError("input should be bvals and bvecs OR an (N, 4)" " array containing both bvals and bvecs") else: bvecs = np.asarray(bvecs) if (bvecs.shape[1] > bvecs.shape[0]) and bvecs.shape[0]>1: bvecs = bvecs.T return gradient_table_from_bvals_bvecs(bvals, bvecs, big_delta=big_delta, small_delta=small_delta, b0_threshold=b0_threshold, atol=atol) dipy-0.10.1/dipy/core/graph.py000066400000000000000000000071301263041327500161120ustar00rootroot00000000000000""" A simple graph class """ from __future__ import division, print_function, absolute_import class Graph(object): ''' A simple graph class ''' def __init__(self): ''' A graph class with nodes and edges :-) This class allows us to: 1. find the shortest path 2. find all paths 3. add/delete nodes and edges 4. get parent & children nodes Examples -------- >>> from dipy.core.graph import Graph >>> g=Graph() >>> g.add_node('a',5) >>> g.add_node('b',6) >>> g.add_node('c',10) >>> g.add_node('d',11) >>> g.add_edge('a','b') >>> g.add_edge('b','c') >>> g.add_edge('c','d') >>> g.add_edge('b','d') >>> g.up_short('d') ['d', 'b', 'a'] ''' self.node={} self.pred={} self.succ={} def add_node(self,n,attr=None): self.succ[n]={} self.pred[n]={} self.node[n]=attr def add_edge(self,n,m,ws=True,wp=True): self.succ[n][m]=ws self.pred[m][n]=wp def parents(self,n): return self.pred[n].keys() def children(self,n): return self.succ[n].keys() def up(self, n): return self.all_paths(self.pred,n) def down(self, n): return self.all_paths(self.succ,n) def up_short(self,n): return self.shortest_path(self.pred,n) def down_short(self,n): return self.shortest_path(self.succ,n) def all_paths(self,graph, start, end=None, path=[]): path = path + [start] if start==end or graph[start]=={}: return [path] if not start in graph: return [] paths = [] for node in graph[start]: if node not in path: newpaths = self.all_paths(graph, node, end, path) for newpath in newpaths: paths.append(newpath) return paths def shortest_path(self,graph, start, end=None, path=[]): path = path + [start] if graph[start]=={} or start == end: return path if not start in graph: return [] shortest = None for node in graph[start]: if node not in path: newpath = self.shortest_path(graph, node, end, path) if newpath: if not shortest or len(newpath) < len(shortest): shortest = newpath return shortest def del_node_and_edges(self,n): try: del self.node[n] except KeyError: raise KeyError('node not in the graph') for s in self.succ[n]: del self.pred[s][n] del self.succ[n] for p in self.pred[n]: del self.succ[p][n] del self.pred[n] def del_node(self,n): try: del self.node[n] except KeyError: raise KeyError('node not in the graph') for s in self.succ[n]: for p in self.pred[n]: self.succ[p][s]=self.succ[n][s] self.pred[s][p]=self.pred[s][n] for s in self.succ.keys(): try: del self.succ[s][n] except KeyError: pass for p in self.pred.keys(): try: del self.pred[p][n] except KeyError: pass del self.succ[n] del self.pred[n] dipy-0.10.1/dipy/core/histeq.py000066400000000000000000000014271263041327500163110ustar00rootroot00000000000000import numpy as np def histeq(arr, num_bins=256): """ Performs an histogram equalization on ``arr``. This was taken from: http://www.janeriksolem.net/2009/06/histogram-equalization-with-python-and.html Parameters ---------- arr : ndarray Image on which to perform histogram equalization. num_bins : int Number of bins used to construct the histogram. Returns ------- result : ndarray Histogram equalized image. """ #get image histogram histo, bins = np.histogram(arr.flatten(), num_bins, normed=True) cdf = histo.cumsum() cdf = 255 * cdf / cdf[-1] #use linear interpolation of cdf to find new pixel values result = np.interp(arr.flatten(), bins[:-1], cdf) return result.reshape(arr.shape) dipy-0.10.1/dipy/core/ndindex.py000066400000000000000000000023051263041327500164410ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np from numpy.lib.stride_tricks import as_strided def ndindex(shape): """ An N-dimensional iterator object to index arrays. Given the shape of an array, an `ndindex` instance iterates over the N-dimensional index of the array. At each iteration a tuple of indices is returned; the last dimension is iterated over first. Parameters ---------- shape : tuple of ints The dimensions of the array. Examples -------- >>> from dipy.core.ndindex import ndindex >>> shape = (3, 2, 1) >>> for index in ndindex(shape): ... print(index) (0, 0, 0) (0, 1, 0) (1, 0, 0) (1, 1, 0) (2, 0, 0) (2, 1, 0) """ if len(shape) == 0: yield () else: x = as_strided(np.zeros(1), shape=shape, strides=np.zeros_like(shape)) try: ndi = np.nditer(x, flags=['multi_index', 'zerosize_ok'], order='C') except AttributeError: # nditer only available in numpy >= 1.6 for ix in np.ndindex(*shape): yield ix else: for e in ndi: yield ndi.multi_index dipy-0.10.1/dipy/core/onetime.py000066400000000000000000000165751263041327500164660ustar00rootroot00000000000000""" Descriptor support for NIPY. Copyright (c) 2006-2011, NIPY Developers 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. * Neither the name of the NIPY Developers nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. 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 OWNER 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. Utilities to support special Python descriptors [1,2], in particular the use of a useful pattern for properties we call 'one time properties'. These are object attributes which are declared as properties, but become regular attributes once they've been read the first time. They can thus be evaluated later in the object's life cycle, but once evaluated they become normal, static attributes with no function call overhead on access or any other constraints. A special ResetMixin class is provided to add a .reset() method to users who may want to have their objects capable of resetting these computed properties to their 'untriggered' state. References ---------- [1] How-To Guide for Descriptors, Raymond Hettinger. http://users.rcn.com/python/download/Descriptor.htm [2] Python data model, http://docs.python.org/reference/datamodel.html """ from __future__ import division, print_function, absolute_import #----------------------------------------------------------------------------- # Classes and Functions #----------------------------------------------------------------------------- class ResetMixin(object): """A Mixin class to add a .reset() method to users of OneTimeProperty. By default, auto attributes once computed, become static. If they happen to depend on other parts of an object and those parts change, their values may now be invalid. This class offers a .reset() method that users can call *explicitly* when they know the state of their objects may have changed and they want to ensure that *all* their special attributes should be invalidated. Once reset() is called, all their auto attributes are reset to their OneTimeProperty descriptors, and their accessor functions will be triggered again. .. warning:: If a class has a set of attributes that are OneTimeProperty, but that can be initialized from any one of them, do NOT use this mixin! For instance, UniformTimeSeries can be initialized with only sampling_rate and t0, sampling_interval and time are auto-computed. But if you were to reset() a UniformTimeSeries, it would lose all 4, and there would be then no way to break the circular dependency chains. If this becomes a problem in practice (for our analyzer objects it isn't, as they don't have the above pattern), we can extend reset() to check for a _no_reset set of names in the instance which are meant to be kept protected. But for now this is NOT done, so caveat emptor. Examples -------- >>> class A(ResetMixin): ... def __init__(self,x=1.0): ... self.x = x ... ... @auto_attr ... def y(self): ... print('*** y computation executed ***') ... return self.x / 2.0 ... >>> a = A(10) About to access y twice, the second time no computation is done: >>> a.y *** y computation executed *** 5.0 >>> a.y 5.0 Changing x >>> a.x = 20 a.y doesn't change to 10, since it is a static attribute: >>> a.y 5.0 We now reset a, and this will then force all auto attributes to recompute the next time we access them: >>> a.reset() About to access y twice again after reset(): >>> a.y *** y computation executed *** 10.0 >>> a.y 10.0 """ def reset(self): """Reset all OneTimeProperty attributes that may have fired already.""" instdict = self.__dict__ classdict = self.__class__.__dict__ # To reset them, we simply remove them from the instance dict. At that # point, it's as if they had never been computed. On the next access, # the accessor function from the parent class will be called, simply # because that's how the python descriptor protocol works. for mname, mval in classdict.items(): if mname in instdict and isinstance(mval, OneTimeProperty): delattr(self, mname) class OneTimeProperty(object): """A descriptor to make special properties that become normal attributes. This is meant to be used mostly by the auto_attr decorator in this module. """ def __init__(self, func): """Create a OneTimeProperty instance. Parameters ---------- func : method The method that will be called the first time to compute a value. Afterwards, the method's name will be a standard attribute holding the value of this computation. """ self.getter = func self.name = func.__name__ def __get__(self, obj, type=None): """This will be called on attribute access on the class or instance.""" if obj is None: # Being called on the class, return the original function. This # way, introspection works on the class. # return func return self.getter # Errors in the following line are errors in setting a # OneTimeProperty val = self.getter(obj) setattr(obj, self.name, val) return val def auto_attr(func): """Decorator to create OneTimeProperty attributes. Parameters ---------- func : method The method that will be called the first time to compute a value. Afterwards, the method's name will be a standard attribute holding the value of this computation. Examples -------- >>> class MagicProp(object): ... @auto_attr ... def a(self): ... return 99 ... >>> x = MagicProp() >>> 'a' in x.__dict__ False >>> x.a 99 >>> 'a' in x.__dict__ True """ return OneTimeProperty(func) #----------------------------------------------------------------------------- # Deprecated API #----------------------------------------------------------------------------- # For backwards compatibility setattr_on_read = auto_attr dipy-0.10.1/dipy/core/optimize.py000066400000000000000000000356051263041327500166610ustar00rootroot00000000000000""" A unified interface for performing and debugging optimization problems. Only L-BFGS-B and Powell is supported in this class for versions of Scipy < 0.12. All optimizers are available for scipy >= 0.12. """ import abc from distutils.version import LooseVersion import numpy as np import scipy import scipy.sparse as sps import scipy.optimize as opt from dipy.utils.six import with_metaclass SCIPY_LESS_0_12 = LooseVersion(scipy.version.short_version) < '0.12' if not SCIPY_LESS_0_12: from scipy.optimize import minimize else: from scipy.optimize import fmin_l_bfgs_b, fmin_powell class Optimizer(object): def __init__(self, fun, x0, args=(), method='L-BFGS-B', jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None, evolution=False): """ A class for handling minimization of scalar function of one or more variables. Parameters ---------- fun : callable Objective function. x0 : ndarray Initial guess. args : tuple, optional Extra arguments passed to the objective function and its derivatives (Jacobian, Hessian). method : str, optional Type of solver. Should be one of - 'Nelder-Mead' - 'Powell' - 'CG' - 'BFGS' - 'Newton-CG' - 'Anneal' - 'L-BFGS-B' - 'TNC' - 'COBYLA' - 'SLSQP' - 'dogleg' - 'trust-ncg' jac : bool or callable, optional Jacobian of objective function. Only for CG, BFGS, Newton-CG, dogleg, trust-ncg. If `jac` is a Boolean and is True, `fun` is assumed to return the value of Jacobian along with the objective function. If False, the Jacobian will be estimated numerically. `jac` can also be a callable returning the Jacobian of the objective. In this case, it must accept the same arguments as `fun`. hess, hessp : callable, optional Hessian of objective function or Hessian of objective function times an arbitrary vector p. Only for Newton-CG, dogleg, trust-ncg. Only one of `hessp` or `hess` needs to be given. If `hess` is provided, then `hessp` will be ignored. If neither `hess` nor `hessp` is provided, then the hessian product will be approximated using finite differences on `jac`. `hessp` must compute the Hessian times an arbitrary vector. bounds : sequence, optional Bounds for variables (only for L-BFGS-B, TNC and SLSQP). ``(min, max)`` pairs for each element in ``x``, defining the bounds on that parameter. Use None for one of ``min`` or ``max`` when there is no bound in that direction. constraints : dict or sequence of dict, optional Constraints definition (only for COBYLA and SLSQP). Each constraint is defined in a dictionary with fields: type : str Constraint type: 'eq' for equality, 'ineq' for inequality. fun : callable The function defining the constraint. jac : callable, optional The Jacobian of `fun` (only for SLSQP). args : sequence, optional Extra arguments to be passed to the function and Jacobian. Equality constraint means that the constraint function result is to be zero whereas inequality means that it is to be non-negative. Note that COBYLA only supports inequality constraints. tol : float, optional Tolerance for termination. For detailed control, use solver-specific options. callback : callable, optional Called after each iteration, as ``callback(xk)``, where ``xk`` is the current parameter vector. Only available using Scipy >= 0.12. options : dict, optional A dictionary of solver options. All methods accept the following generic options: maxiter : int Maximum number of iterations to perform. disp : bool Set to True to print convergence messages. For method-specific options, see `show_options('minimize', method)`. evolution : bool, optional save history of x for each iteration. Only available using Scipy >= 0.12. See also --------- scipy.optimize.minimize """ self.size_of_x = len(x0) self._evol_kx = None _eps = np.finfo(float).eps if SCIPY_LESS_0_12: if evolution is True: print('Saving history is available only with Scipy >= 0.12.') if method == 'L-BFGS-B': default_options = {'maxcor': 10, 'ftol': 1e-7, 'gtol': 1e-5, 'eps': 1e-8, 'maxiter': 1000} if jac is None: approx_grad = True else: approx_grad = False if options is None: options = default_options if options is not None: for key in options: default_options[key] = options[key] options = default_options try: out = fmin_l_bfgs_b(fun, x0, fprime=jac, args=args, approx_grad=approx_grad, bounds=bounds, m=options['maxcor'], factr=options['ftol']/_eps, pgtol=options['gtol'], epsilon=options['eps'], maxiter=options['maxiter']) except TypeError: msg = 'In Scipy ' + scipy.__version__ + ' `maxiter` ' msg += 'parameter is not available for L-BFGS-B. \n Using ' msg += '`maxfun` instead with value twice of maxiter.' print(msg) out = fmin_l_bfgs_b(fun, x0, fprime=jac, args=args, approx_grad=approx_grad, bounds=bounds, m=options['maxcor'], factr=options['ftol']/_eps, pgtol=options['gtol'], epsilon=options['eps'], maxfun=options['maxiter'] * 2) res = {'x': out[0], 'fun': out[1], 'nfev': out[2]['funcalls']} try: res['nit'] = out[2]['nit'] except KeyError: res['nit'] = None elif method == 'Powell': default_options = {'xtol': 0.0001, 'ftol': 0.0001, 'maxiter': None} if options is None: options = default_options if options is not None: for key in options: default_options[key] = options[key] options = default_options out = fmin_powell(fun, x0, args, xtol=options['xtol'], ftol=options['ftol'], maxiter=options['maxiter'], full_output=True, disp=False, retall=True) xopt, fopt, direc, iterations, funcs, warnflag, allvecs = out res = {'x': xopt, 'fun': fopt, 'nfev': funcs, 'nit': iterations} else: msg = 'Only L-BFGS-B and Powell is supported in this class ' msg += 'for versions of Scipy < 0.12.' raise ValueError(msg) if not SCIPY_LESS_0_12: if evolution is True: self._evol_kx = [] def history_of_x(kx): self._evol_kx.append(kx) res = minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback=history_of_x, options=options) else: res = minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options) self.res = res @property def xopt(self): return self.res['x'] @property def fopt(self): return self.res['fun'] @property def nit(self): return self.res['nit'] @property def nfev(self): return self.res['nfev'] @property def message(self): return self.res['message'] def print_summary(self): print(self.res) @property def evolution(self): if self._evol_kx is not None: return np.asarray(self._evol_kx) else: return None def spdot(A, B): """The same as np.dot(A, B), except it works even if A or B or both are sparse matrices. Parameters ---------- A, B : arrays of shape (m, n), (n, k) Returns ------- The matrix product AB. If both A and B are sparse, the result will be a sparse matrix. Otherwise, a dense result is returned See discussion here: http://mail.scipy.org/pipermail/scipy-user/2010-November/027700.html """ if sps.issparse(A) and sps.issparse(B): return A * B elif sps.issparse(A) and not sps.issparse(B): return (A * B).view(type=B.__class__) elif not sps.issparse(A) and sps.issparse(B): return (B.T * A.T).T.view(type=A.__class__) else: return np.dot(A, B) def sparse_nnls(y, X, momentum=1, step_size=0.01, non_neg=True, check_error_iter=10, max_error_checks=10, converge_on_sse=0.99): """ Solve y=Xh for h, using gradient descent, with X a sparse matrix Parameters ---------- y : 1-d array of shape (N) The data. Needs to be dense. X : ndarray. May be either sparse or dense. Shape (N, M) The regressors momentum : float, optional (default: 1). The persistence of the gradient. step_size : float, optional (default: 0.01). The increment of parameter update in each iteration non_neg : Boolean, optional (default: True) Whether to enforce non-negativity of the solution. check_error_iter : int (default:10) How many rounds to run between error evaluation for convergence-checking. max_error_checks : int (default: 10) Don't check errors more than this number of times if no improvement in r-squared is seen. converge_on_sse : float (default: 0.99) a percentage improvement in SSE that is required each time to say that things are still going well. Returns ------- h_best : The best estimate of the parameters. """ num_regressors = X.shape[1] # Initialize the parameters at the origin: h = np.zeros(num_regressors) # If nothing good happens, we'll return that: h_best = h gradient = np.zeros(num_regressors) iteration = 1 ss_residuals_min = np.inf # This will keep track of the best solution sse_best = np.inf # This will keep track of the best performance so far count_bad = 0 # Number of times estimation error has gone up. error_checks = 0 # How many error checks have we done so far while 1: if iteration > 1: # The sum of squared error given the current parameter setting: sse = np.sum((y - spdot(X, h)) ** 2) # The gradient is (Kay 2008 supplemental page 27): gradient = spdot(X.T, spdot(X, h) - y) gradient += momentum * gradient # Normalize to unit-length unit_length_gradient = (gradient / np.sqrt(np.dot(gradient, gradient))) # Update the parameters in the direction of the gradient: h -= step_size * unit_length_gradient if non_neg: # Set negative values to 0: h[h < 0] = 0 # Every once in a while check whether it's converged: if np.mod(iteration, check_error_iter): # This calculates the sum of squared residuals at this point: sse = np.sum((y - spdot(X, h)) ** 2) # Did we do better this time around? if sse < ss_residuals_min: # Update your expectations about the minimum error: ss_residuals_min = sse h_best = h # This holds the best params we have so far # Are we generally (over iterations) converging on # sufficient improvement in r-squared? if sse < converge_on_sse * sse_best: sse_best = sse count_bad = 0 else: count_bad += 1 else: count_bad += 1 if count_bad >= max_error_checks: return h_best error_checks += 1 iteration += 1 class SKLearnLinearSolver(with_metaclass(abc.ABCMeta, object)): """ Provide a sklearn-like uniform interface to algorithms that solve problems of the form: $y = Ax$ for $x$ Sub-classes of SKLearnLinearSolver should provide a 'fit' method that have the following signature: `SKLearnLinearSolver.fit(X, y)`, which would set an attribute `SKLearnLinearSolver.coef_`, with the shape (X.shape[1],), such that an estimate of y can be calculated as: `y_hat = np.dot(X, SKLearnLinearSolver.coef_.T)` """ def __init__(self, *args, **kwargs): self._args = args self._kwargs = kwargs @abc.abstractmethod def fit(self, X, y): """Implement for all derived classes """ def predict(self, X): """ Predict using the result of the model Parameters ---------- X : array-like (n_samples, n_features) Samples. Returns ------- C : array, shape = (n_samples,) Predicted values. """ X = np.asarray(X) return np.dot(X, self.coef_.T) class NonNegativeLeastSquares(SKLearnLinearSolver): """ A sklearn-like interface to scipy.optimize.nnls """ def fit(self, X, y): """ Fit the NonNegativeLeastSquares linear model to data Parameters ---------- """ coef, rnorm = opt.nnls(X, y) self.coef_ = coef return self dipy-0.10.1/dipy/core/profile.py000066400000000000000000000057511263041327500164600ustar00rootroot00000000000000""" Class for profiling cython code """ import os import subprocess from ..utils.optpkg import optional_package cProfile, _, _ = optional_package('cProfile') pstats, _, _ = optional_package('pstats', 'pstats is not installed. It is part of the' 'python-profiler package in Debian/Ubuntu') class Profiler(): ''' Profile python/cython files or functions If you are profiling cython code you need to add # cython: profile=True on the top of your .pyx file and for the functions that you do not want to profile you can use this decorator in your cython files @cython.profile(False) Parameters ------------- caller : file or function call args : function arguments Attributes ------------ stats : function, stats.print_stats(10) will prin the 10 slower functions Examples ----------- from dipy.core.profile import Profiler import numpy as np p=Profiler(np.sum,np.random.rand(1000000,3)) fname='test.py' p=Profiler(fname) p.print_stats(10) p.print_stats('det') References ------------- http://docs.cython.org/src/tutorial/profiling_tutorial.html http://docs.python.org/library/profile.html http://packages.python.org/line_profiler/ ''' def __init__(self,call=None,*args): # Delay import until use of class instance. We were getting some very # odd build-as-we-go errors running tests and documentation otherwise import pyximport pyximport.install() try: ext=os.path.splitext(call)[1].lower() print('ext',ext) if ext == '.py' or ext == '.pyx': #python/cython file print('profiling python/cython file ...') subprocess.call(['python','-m','cProfile', \ '-o','profile.prof',call]) s = pstats.Stats('profile.prof') stats=s.strip_dirs().sort_stats('time') self.stats=stats except: print('profiling function call ...') self.args=args self.call=call cProfile.runctx('self._profile_function()',globals(),locals(),\ 'profile.prof') s = pstats.Stats('profile.prof') stats=s.strip_dirs().sort_stats('time') self.stats=stats def _profile_function(self): self.call(*self.args) def print_stats(self,N=10): ''' Print stats for profiling You can use it in all different ways developed in pstats for example print_stats(10) will give you the 10 slowest calls or print_stats('function_name') will give you the stats for all the calls with name 'function_name' Parameters ------------ N : stats.print_stats argument ''' self.stats.print_stats(N) dipy-0.10.1/dipy/core/pyalloc.pxd000066400000000000000000000005551263041327500166230ustar00rootroot00000000000000# -*- python -*- or rather like from python_string cimport PyString_FromStringAndSize, \ PyString_AS_STRING, PyString_Size # Function to allocate, wrap memory via Python string creation cdef inline object pyalloc_v(Py_ssize_t n, void **pp): cdef object ob = PyString_FromStringAndSize(NULL, n) pp[0] = PyString_AS_STRING(ob) return ob dipy-0.10.1/dipy/core/rng.py000066400000000000000000000066331263041327500156060ustar00rootroot00000000000000""" Random number generation utilities """ from __future__ import division, print_function, absolute_import from math import floor from platform import architecture def WichmannHill2006(): ''' B.A. Wichmann, I.D. Hill, Generating good pseudo-random numbers, Computational Statistics & Data Analysis, Volume 51, Issue 3, 1 December 2006, Pages 1614-1622, ISSN 0167-9473, DOI: 10.1016/j.csda.2006.05.019. (http://www.sciencedirect.com/science/article/B6V8V-4K7F86W-2/2/a3a33291b8264e4c882a8f21b6e43351) for advice on generating many sequences for use together, and on alternative algorithms and codes Examples ---------- >>> from dipy.core import rng >>> rng.ix, rng.iy, rng.iz, rng.it = 100001, 200002, 300003, 400004 >>> N = 1000 >>> a = [rng.WichmannHill2006() for i in range(N)] ''' global ix, iy, iz, it if architecture()[0] == '64': #If 64 bits are available then the following lines of code will be faster. ix = (11600 * ix) % 2147483579 iy = (47003 * iy) % 2147483543 iz = (23000 * iz) % 2147483423 it = (33000 * it) % 2147483123 else: #If only 32 bits are available ix = 11600 * (ix % 185127) - 10379 * (ix / 185127) iy = 47003 * (ix % 45688) - 10479 * (iy / 45688) iz = 23000 * (iz % 93368) - 19423 * (iz / 93368) it = 33000 * (it % 65075) - 8123 * (it / 65075) if ix < 0: ix = ix + 2147483579 if iy < 0: iy = iy + 2147483543 if iz < 0: iz = iz + 2147483423 if it < 0: it = it + 2147483123 W = ix/2147483579.0 + iy/2147483543.0 + iz/2147483423.0 + it/2147483123.0 return W - floor(W) def WichmannHill1982(): ''' Algorithm AS 183 Appl. Statist. (1982) vol.31, no.2 Returns a pseudo-random number rectangularly distributed between 0 and 1. The cycle length is 6.95E+12 (See page 123 of Applied Statistics (1984) vol.33), not as claimed in the original article. ix, iy and iz should be set to integer values between 1 and 30000 before the first entry. Integer arithmetic up to 5212632 is required. ''' import numpy as np global ix, iy, iz ix = (171 * ix) % 30269 iy = (172 * iy) % 30307 iz = (170 * iz) % 30323 ''' If integer arithmetic only up to 30323 (!) is available, the preceding 3 statements may be replaced by: ix = 171 * (ix % 177) - 2 * (ix / 177) iy = 172 * (iy % 176) - 35 * (iy / 176) iz = 170 * (iz % 178) - 63 * (iz / 178) if ix < 0: ix = ix + 30269 if iy < 0: iy = iy + 30307 if iz < 0: iz = iz + 30323 ''' return np.remainder(np.float(ix) / 30269. + np.float(iy) / 30307. + np.float(iz) / 30323., 1.0) def LEcuyer(): ''' Generate uniformly distributed random numbers using the 32-bit generator from figure 3 of: L'Ecuyer, P. Efficient and portable combined random number generators, C.A.C.M., vol. 31, 742-749 & 774-?, June 1988. The cycle length is claimed to be 2.30584E+18 ''' global s1, s2 k = s1 / 53668 s1 = 40014 * (s1 - k * 53668) - k * 12211 if s1 < 0: s1 = s1 + 2147483563 k = s2 / 52774 s2 = 40692 * (s2 - k * 52774) - k * 3791 if s2 < 0: s2 = s2 + 2147483399 z = s1 - s2 if z < 0: z = z + 2147483562 return z / 2147483563. dipy-0.10.1/dipy/core/sphere.py000066400000000000000000000475001263041327500163040ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np import warnings from ..utils.six.moves import xrange from dipy.core.geometry import cart2sphere, sphere2cart, vector_norm from dipy.core.onetime import auto_attr from dipy.reconst.recspeed import remove_similar_vertices __all__ = ['Sphere', 'HemiSphere', 'faces_from_sphere_vertices', 'unique_edges'] def _all_specified(*args): for a in args: if a is None: return False return True def _some_specified(*args): for a in args: if a is not None: return True return False def faces_from_sphere_vertices(vertices): """ Triangulate a set of vertices on the sphere. Parameters ---------- vertices : (M, 3) ndarray XYZ coordinates of vertices on the sphere. Returns ------- faces : (N, 3) ndarray Indices into vertices; forms triangular faces. """ from scipy.spatial import Delaunay faces = Delaunay(vertices).convex_hull if len(vertices) < 2**16: return np.asarray(faces, np.uint16) else: return faces def unique_edges(faces, return_mapping=False): """Extract all unique edges from given triangular faces. Parameters ---------- faces : (N, 3) ndarray Vertex indices forming triangular faces. return_mapping : bool If true, a mapping to the edges of each face is returned. Returns ------- edges : (N, 2) ndarray Unique edges. mapping : (N, 3) For each face, [x, y, z], a mapping to it's edges [a, b, c]. :: y /\ / \ a/ \b / \ / \ /__________\ x c z """ faces = np.asarray(faces) edges = np.concatenate([faces[:, 0:2], faces[:, 1:3], faces[:, ::2]]) if return_mapping: ue, inverse = unique_sets(edges, return_inverse=True) return ue, inverse.reshape((3, -1)).T else: return unique_sets(edges) def unique_sets(sets, return_inverse=False): """Remove duplicate sets. Parameters ---------- sets : array (N, k) N sets of size k. return_inverse : bool If True, also returns the indices of unique_sets that can be used to reconstruct `sets` (the original ordering of each set may not be preserved). Return ------ unique_sets : array Unique sets. inverse : array (N,) The indices to reconstruct `sets` from `unique_sets`. """ sets = np.sort(sets, 1) order = np.lexsort(sets.T) sets = sets[order] flag = np.ones(len(sets), 'bool') flag[1:] = (sets[1:] != sets[:-1]).any(-1) uniqsets = sets[flag] if return_inverse: inverse = np.empty_like(order) inverse[order] = np.arange(len(order)) index = flag.cumsum() - 1 return uniqsets, index[inverse] else: return uniqsets class Sphere(object): """Points on the unit sphere. The sphere can be constructed using one of three conventions:: Sphere(x, y, z) Sphere(xyz=xyz) Sphere(theta=theta, phi=phi) Parameters ---------- x, y, z : 1-D array_like Vertices as x-y-z coordinates. theta, phi : 1-D array_like Vertices as spherical coordinates. Theta and phi are the inclination and azimuth angles respectively. xyz : (N, 3) ndarray Vertices as x-y-z coordinates. faces : (N, 3) ndarray Indices into vertices that form triangular faces. If unspecified, the faces are computed using a Delaunay triangulation. edges : (N, 2) ndarray Edges between vertices. If unspecified, the edges are derived from the faces. """ def __init__(self, x=None, y=None, z=None, theta=None, phi=None, xyz=None, faces=None, edges=None): all_specified = _all_specified(x, y, z) + _all_specified(xyz) + \ _all_specified(theta, phi) one_complete = (_some_specified(x, y, z) + _some_specified(xyz) + _some_specified(theta, phi)) if not (all_specified == 1 and one_complete == 1): raise ValueError("Sphere must be constructed using either " "(x,y,z), (theta, phi) or xyz.") if edges is not None and faces is None: raise ValueError("Either specify both faces and " "edges, only faces, or neither.") if edges is not None: self.edges = np.asarray(edges) if faces is not None: self.faces = np.asarray(faces) if theta is not None: self.theta = np.array(theta, copy=False, ndmin=1) self.phi = np.array(phi, copy=False, ndmin=1) return if xyz is not None: xyz = np.asarray(xyz) x, y, z = xyz.T x, y, z = (np.asarray(t) for t in (x, y, z)) r, self.theta, self.phi = cart2sphere(x, y, z) if not np.allclose(r, 1): warnings.warn("Vertices are not on the unit sphere.") @auto_attr def vertices(self): return np.column_stack(sphere2cart(1, self.theta, self.phi)) @property def x(self): return self.vertices[:, 0] @property def y(self): return self.vertices[:, 1] @property def z(self): return self.vertices[:, 2] @auto_attr def faces(self): faces = faces_from_sphere_vertices(self.vertices) return faces @auto_attr def edges(self): return unique_edges(self.faces) def subdivide(self, n=1): """Subdivides each face of the sphere into four new faces. New vertices are created at a, b, and c. Then each face [x, y, z] is divided into faces [x, a, c], [y, a, b], [z, b, c], and [a, b, c]. :: y /\ / \ a/____\b /\ /\ / \ / \ /____\/____\ x c z Parameters ---------- n : int, optional The number of subdivisions to preform. Returns ------- new_sphere : Sphere The subdivided sphere. """ vertices = self.vertices faces = self.faces for i in xrange(n): edges, mapping = unique_edges(faces, return_mapping=True) new_vertices = vertices[edges].sum(1) new_vertices /= vector_norm(new_vertices, keepdims=True) mapping += len(vertices) vertices = np.vstack([vertices, new_vertices]) x, y, z = faces.T a, b, c = mapping.T face1 = np.column_stack([x, a, c]) face2 = np.column_stack([y, b, a]) face3 = np.column_stack([z, c, b]) face4 = mapping faces = np.concatenate([face1, face2, face3, face4]) if len(vertices) < 2**16: faces = np.asarray(faces, dtype='uint16') return Sphere(xyz=vertices, faces=faces) def find_closest(self, xyz): """ Find the index of the vertex in the Sphere closest to the input vector Parameters ---------- xyz : array-like, 3 elements A unit vector Return ------ idx : int The index into the Sphere.vertices array that gives the closest vertex (in angle). """ cos_sim = np.dot(self.vertices, xyz) return np.argmax(cos_sim) class HemiSphere(Sphere): """Points on the unit sphere. A HemiSphere is similar to a Sphere but it takes antipodal symmetry into account. Antipodal symmetry means that point v on a HemiSphere is the same as the point -v. Duplicate points are discarded when constructing a HemiSphere (including antipodal duplicates). `edges` and `faces` are remapped to the remaining points as closely as possible. The HemiSphere can be constructed using one of three conventions:: HemiSphere(x, y, z) HemiSphere(xyz=xyz) HemiSphere(theta=theta, phi=phi) Parameters ---------- x, y, z : 1-D array_like Vertices as x-y-z coordinates. theta, phi : 1-D array_like Vertices as spherical coordinates. Theta and phi are the inclination and azimuth angles respectively. xyz : (N, 3) ndarray Vertices as x-y-z coordinates. faces : (N, 3) ndarray Indices into vertices that form triangular faces. If unspecified, the faces are computed using a Delaunay triangulation. edges : (N, 2) ndarray Edges between vertices. If unspecified, the edges are derived from the faces. tol : float Angle in degrees. Vertices that are less than tol degrees apart are treated as duplicates. See Also -------- Sphere """ def __init__(self, x=None, y=None, z=None, theta=None, phi=None, xyz=None, faces=None, edges=None, tol=1e-5): """Create a HemiSphere from points""" sphere = Sphere(x=x, y=y, z=z, theta=theta, phi=phi, xyz=xyz) uniq_vertices, mapping = remove_similar_vertices(sphere.vertices, tol, return_mapping=True) uniq_vertices *= 1 - 2*(uniq_vertices[:, -1:] < 0) if faces is not None: faces = np.asarray(faces) faces = unique_sets(mapping[faces]) if edges is not None: edges = np.asarray(edges) edges = unique_sets(mapping[edges]) Sphere.__init__(self, xyz=uniq_vertices, edges=edges, faces=faces) @classmethod def from_sphere(klass, sphere, tol=1e-5): """Create instance from a Sphere""" return klass(theta=sphere.theta, phi=sphere.phi, edges=sphere.edges, faces=sphere.faces, tol=tol) def mirror(self): """Create a full Sphere from a HemiSphere""" n = len(self.vertices) vertices = np.vstack([self.vertices, -self.vertices]) edges = np.vstack([self.edges, n + self.edges]) _switch_vertex(edges[:, 0], edges[:, 1], vertices) faces = np.vstack([self.faces, n + self.faces]) _switch_vertex(faces[:, 0], faces[:, 1], vertices) _switch_vertex(faces[:, 0], faces[:, 2], vertices) return Sphere(xyz=vertices, edges=edges, faces=faces) @auto_attr def faces(self): vertices = np.vstack([self.vertices, -self.vertices]) faces = faces_from_sphere_vertices(vertices) return unique_sets(faces % len(self.vertices)) def subdivide(self, n=1): """Create a more subdivided HemiSphere See Sphere.subdivide for full documentation. """ sphere = self.mirror() sphere = sphere.subdivide(n) return HemiSphere.from_sphere(sphere) def find_closest(self, xyz): """ Find the index of the vertex in the Sphere closest to the input vector, taking into account antipodal symmetry Parameters ---------- xyz : array-like, 3 elements A unit vector Return ------ idx : int The index into the Sphere.vertices array that gives the closest vertex (in angle). """ cos_sim = abs(np.dot(self.vertices, xyz)) return np.argmax(cos_sim) def _switch_vertex(index1, index2, vertices): """When we mirror an edge (a, b). We can either create (a, b) and (a', b') OR (a, b') and (a', b). The angles of edges (a, b) and (a, b') are supplementary, so we choose the two new edges such that their angles are less than 90 degrees. """ n = len(vertices) A = vertices[index1] B = vertices[index2] is_far = (A * B).sum(-1) < 0 index2[is_far] = index2[is_far] + (n / 2.0) index2 %= n def _get_forces(charges): r"""Given a set of charges on the surface of the sphere gets total force those charges exert on each other. The force exerted by one charge on another is given by Coulomb's law. For this simulation we use charges of equal magnitude so this force can be written as $\vec{r}/r^3$, up to a constant factor, where $\vec{r}$ is the separation of the two charges and $r$ is the magnitude of $\vec{r}$. Forces are additive so the total force on each of the charges is the sum of the force exerted by each other charge in the system. Charges do not exert a force on themselves. The electric potential can similarly be written as $1/r$ and is also additive. """ all_charges = np.concatenate((charges, -charges)) all_charges = all_charges[:, None] r = charges - all_charges r_mag = np.sqrt((r*r).sum(-1))[:, :, None] with warnings.catch_warnings(): warnings.simplefilter("ignore") force = r / r_mag**3 potential = 1. / r_mag d = np.arange(len(charges)) force[d, d] = 0 force = force.sum(0) force_r_comp = (charges*force).sum(-1)[:, None] f_theta = force - force_r_comp*charges potential[d, d] = 0 potential = 2*potential.sum() return f_theta, potential def disperse_charges(hemi, iters, const=.2): """Models electrostatic repulsion on the unit sphere Places charges on a sphere and simulates the repulsive forces felt by each one. Allows the charges to move for some number of iterations and returns their final location as well as the total potential of the system at each step. Parameters ---------- hemi : HemiSphere Points on a unit sphere. iters : int Number of iterations to run. const : float Using a smaller const could provide a more accurate result, but will need more iterations to converge. Returns ------- hemi : HemiSphere Distributed points on a unit sphere. potential : ndarray The electrostatic potential at each iteration. This can be useful to check if the repulsion converged to a minimum. Note: ----- This function is meant to be used with diffusion imaging so antipodal symmetry is assumed. Therefor each charge must not only be unique, but if there is a charge at +x, there cannot be a charge at -x. These are treated as the same location and because the distance between the two charges will be zero, the result will be unstable. """ if not isinstance(hemi, HemiSphere): raise ValueError("expecting HemiSphere") charges = hemi.vertices forces, v = _get_forces(charges) force_mag = np.sqrt((forces*forces).sum()) const = const / force_mag.max() potential = np.empty(iters) v_min = v for ii in xrange(iters): new_charges = charges + forces * const norms = np.sqrt((new_charges**2).sum(-1)) new_charges /= norms[:, None] new_forces, v = _get_forces(new_charges) if v <= v_min: charges = new_charges forces = new_forces potential[ii] = v_min = v else: const /= 2. potential[ii] = v_min return HemiSphere(xyz=charges), potential def interp_rbf(data, sphere_origin, sphere_target, function='multiquadric', epsilon=None, smooth=0.1, norm="angle"): """Interpolate data on the sphere, using radial basis functions. Parameters ---------- data : (N,) ndarray Function values on the unit sphere. sphere_origin : Sphere Positions of data values. sphere_target : Sphere M target positions for which to interpolate. function : {'multiquadric', 'inverse', 'gaussian'} Radial basis function. epsilon : float Radial basis function spread parameter. Defaults to approximate average distance between nodes. a good start smooth : float values greater than zero increase the smoothness of the approximation with 0 as pure interpolation. Default: 0.1 norm : str A string indicating the function that returns the "distance" between two points. 'angle' - The angle between two vectors 'euclidean_norm' - The Euclidean distance Returns ------- v : (M,) ndarray Interpolated values. See Also -------- scipy.interpolate.Rbf """ from scipy.interpolate import Rbf def angle(x1, x2): xx = np.arccos((x1 * x2).sum(axis=0)) xx[np.isnan(xx)] = 0 return xx def euclidean_norm(x1, x2): return np.sqrt(((x1 - x2)**2).sum(axis=0)) if norm == "angle": norm = angle elif norm == "euclidean_norm": w_s = "The Eucldian norm used for interpolation is inaccurate " w_s += "and will be deprecated in future versions. Please consider " w_s += "using the 'angle' norm instead" warnings.warn(w_s, DeprecationWarning) norm = euclidean_norm # Workaround for bug in older versions of SciPy that don't allow # specification of epsilon None: if epsilon is not None: kwargs = {'function': function, 'epsilon': epsilon, 'smooth' : smooth, 'norm' : norm} else: kwargs = {'function': function, 'smooth': smooth, 'norm' : norm} rbfi = Rbf(sphere_origin.x, sphere_origin.y, sphere_origin.z, data, **kwargs) return rbfi(sphere_target.x, sphere_target.y, sphere_target.z) def euler_characteristic_check(sphere, chi=2): r"""Checks the euler characteristic of a sphere If $f$ = number of faces, $e$ = number_of_edges and $v$ = number of vertices, the Euler formula says $f-e+v = 2$ for a mesh on a sphere. More generally, whether $f -e + v == \chi$ where $\chi$ is the Euler characteristic of the mesh. - Open chain (track) has $\chi=1$ - Closed chain (loop) has $\chi=0$ - Disk has $\chi=1$ - Sphere has $\chi=2$ - HemiSphere has $\chi=1$ Parameters ---------- sphere : Sphere A Sphere instance with vertices, edges and faces attributes. chi : int, optional The Euler characteristic of the mesh to be checked Returns ------- check : bool True if the mesh has Euler characteristic $\chi$ Examples -------- >>> euler_characteristic_check(unit_octahedron) True >>> hemisphere = HemiSphere.from_sphere(unit_icosahedron) >>> euler_characteristic_check(hemisphere, chi=1) True """ v = sphere.vertices.shape[0] e = sphere.edges.shape[0] f = sphere.faces.shape[0] return (f - e + v) == chi octahedron_vertices = np.array( [[1.0, 0.0, 0.0], [-1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, -1.0, 0.0], [0.0, 0.0, 1.0], [0.0, 0.0, -1.0], ]) octahedron_faces = np.array( [[0, 4, 2], [1, 5, 3], [4, 2, 1], [5, 3, 0], [1, 4, 3], [0, 5, 2], [0, 4, 3], [1, 5, 2], ], dtype='uint16') t = (1 + np.sqrt(5)) / 2 icosahedron_vertices = np.array( [[t, 1, 0], # 0 [-t, 1, 0], # 1 [t, -1, 0], # 2 [-t, -1, 0], # 3 [1, 0, t], # 4 [1, 0, -t], # 5 [-1, 0, t], # 6 [-1, 0, -t], # 7 [0, t, 1], # 8 [0, -t, 1], # 9 [0, t, -1], # 10 [0, -t, -1], ]) # 11 icosahedron_vertices /= vector_norm(icosahedron_vertices, keepdims=True) icosahedron_faces = np.array( [[8, 4, 0], [2, 5, 0], [2, 5, 11], [9, 2, 11], [2, 4, 0], [9, 2, 4], [10, 8, 1], [10, 8, 0], [10, 5, 0], [6, 3, 1], [9, 6, 3], [6, 8, 1], [6, 8, 4], [9, 6, 4], [7, 10, 1], [7, 10, 5], [7, 3, 1], [7, 3, 11], [9, 3, 11], [7, 5, 11], ], dtype='uint16') unit_octahedron = Sphere(xyz=octahedron_vertices, faces=octahedron_faces) unit_icosahedron = Sphere(xyz=icosahedron_vertices, faces=icosahedron_faces) hemi_icosahedron = HemiSphere.from_sphere(unit_icosahedron) dipy-0.10.1/dipy/core/sphere_stats.py000066400000000000000000000200321263041327500175110ustar00rootroot00000000000000""" Statistics on spheres """ from __future__ import division, print_function, absolute_import import numpy as np import dipy.core.geometry as geometry from itertools import permutations def random_uniform_on_sphere(n=1, coords='xyz'): r'''Random unit vectors from a uniform distribution on the sphere. Parameters ----------- n : int Number of random vectors coords : {'xyz', 'radians', 'degrees'} 'xyz' for cartesian form 'radians' for spherical form in rads 'degrees' for spherical form in degrees Notes ------ The uniform distribution on the sphere, parameterized by spherical coordinates $(\theta, \phi)$, should verify $\phi\sim U[0,2\pi]$, while $z=\cos(\theta)\sim U[-1,1]$. References ----------- .. [1] http://mathworld.wolfram.com/SpherePointPicking.html. Returns -------- X : array, shape (n,3) if coords='xyz' or shape (n,2) otherwise Uniformly distributed vectors on the unit sphere. Examples --------- >>> from dipy.core.sphere_stats import random_uniform_on_sphere >>> X = random_uniform_on_sphere(4, 'radians') >>> X.shape (4, 2) >>> X = random_uniform_on_sphere(4, 'xyz') >>> X.shape (4, 3) ''' z = np.random.uniform(-1, 1, n) theta = np.arccos(z) phi = np.random.uniform(0, 2*np.pi, n) if coords == 'xyz': r = np.ones(n) return np.vstack(geometry.sphere2cart(r, theta, phi)).T angles = np.vstack((theta, phi)).T if coords == 'radians': return angles if coords == 'degrees': return np.rad2deg(angles) def eigenstats(points, alpha=0.05): r'''Principal direction and confidence ellipse Implements equations in section 6.3.1(ii) of Fisher, Lewis and Embleton, supplemented by equations in section 3.2.5. Parameters ---------- points : arraey_like (N,3) array of points on the sphere of radius 1 in $\mathbb{R}^3$ alpha : real or None 1 minus the coverage for the confidence ellipsoid, e.g. 0.05 for 95% coverage. Returns ------- centre : vector (3,) centre of ellipsoid b1 : vector (2,) lengths of semi-axes of ellipsoid ''' n = points.shape[0] # the number of points rad2deg = 180/np.pi # scale angles from radians to degrees # there is a problem with averaging and axis data. ''' centroid = np.sum(points, axis=0)/n normed_centroid = geometry.normalized_vector(centroid) x,y,z = normed_centroid #coordinates of normed centroid polar_centroid = np.array(geometry.cart2sphere(x,y,z))*rad2deg ''' cross = np.dot(points.T,points)/n # cross-covariance of points evals, evecs = np.linalg.eigh(cross) # eigen decomposition assuming that cross is symmetric order = np.argsort(evals) # eigenvalues don't necessarily come in an particular order? tau = evals[order] # the ordered eigenvalues h = evecs[:,order] # the eigenvectors in corresponding order h[:,2] = h[:,2]*np.sign(h[2,2]) # map the first principal direction into upper hemisphere centre = np.array(geometry.cart2sphere(*h[:,2]))[1:]*rad2deg # the spherical coordinates of the first principal direction e = np.zeros((2,2)) p0 = np.dot(points,h[:,0]) p1 = np.dot(points,h[:,1]) p2 = np.dot(points,h[:,2]) # the principal coordinates of the points e[0,0] = np.sum((p0**2)*(p2**2))/(n*(tau[0]-tau[2])**2) e[1,1] = np.sum((p1**2)*(p2**2))/(n*(tau[1]-tau[2])**2) e[0,1] = np.sum((p0*p1*(p2**2))/(n*(tau[0]-tau[2])*(tau[1]-tau[2]))) e[1,0] = e[0,1] # e is a 2x2 helper matrix b1 = np.array([np.NaN,np.NaN]) d = -2*np.log(alpha)/n s,w = np.linalg.eig(e) g = np.sqrt(d*s) b1= np.arcsin(g)*rad2deg # b1 are the estimated 100*(1-alpha)% confidence ellipsoid semi-axes # in degrees return centre, b1 ''' # b2 is equivalent to b1 above # try to invert e and calculate vector b the standard errors of # centre - these are forced to a mixture of NaN and/or 0 in singular cases b2 = np.array([np.NaN,np.NaN]) if np.abs(np.linalg.det(e)) < 10**-20: b2 = np.array([0,np.NaN]) else: try: f = np.linalg.inv(e) except np.linalg.LigAlgError: b2 = np.array([np.NaN, np.NaN]) else: t, y = np.linalg.eig(f) d = -2*np.log(alpha)/n g = np.sqrt(d/t) b2= np.arcsin(g)*rad2deg ''' def compare_orientation_sets(S,T): r'''Computes the mean cosine distance of the best match between points of two sets of vectors S and T (angular similarity) Parameters ----------- S : array, shape (m,d) First set of vectors. T : array, shape (n,d) Second set of vectors. Returns -------- max_mean_cosine : float Maximum mean cosine distance. Examples --------- >>> from dipy.core.sphere_stats import compare_orientation_sets >>> S=np.array([[1,0,0],[0,1,0],[0,0,1]]) >>> T=np.array([[1,0,0],[0,0,1]]) >>> compare_orientation_sets(S,T) 1.0 >>> T=np.array([[0,1,0],[1,0,0],[0,0,1]]) >>> S=np.array([[1,0,0],[0,0,1]]) >>> compare_orientation_sets(S,T) 1.0 >>> from dipy.core.sphere_stats import compare_orientation_sets >>> S=np.array([[-1,0,0],[0,1,0],[0,0,1]]) >>> T=np.array([[1,0,0],[0,0,-1]]) >>> compare_orientation_sets(S,T) 1.0 ''' m = len(S) n = len(T) if m < n: A = S.copy() a = m S = T T = A m = n n = a v = [np.sum([np.abs(np.dot(p[i],T[i])) for i in range(n)]) for p in permutations(S,n)] return np.max(v)/np.float(n) #return np.max(v)*np.float(n)/np.float(m) def angular_similarity(S,T): r'''Computes the cosine distance of the best match between points of two sets of vectors S and T Parameters ----------- S : array, shape (m,d) T : array, shape (n,d) Returns -------- max_cosine_distance:float Examples --------- >>> import numpy as np >>> from dipy.core.sphere_stats import angular_similarity >>> S=np.array([[1,0,0],[0,1,0],[0,0,1]]) >>> T=np.array([[1,0,0],[0,0,1]]) >>> angular_similarity(S,T) 2.0 >>> T=np.array([[0,1,0],[1,0,0],[0,0,1]]) >>> S=np.array([[1,0,0],[0,0,1]]) >>> angular_similarity(S,T) 2.0 >>> S=np.array([[-1,0,0],[0,1,0],[0,0,1]]) >>> T=np.array([[1,0,0],[0,0,-1]]) >>> angular_similarity(S,T) 2.0 >>> T=np.array([[0,1,0],[1,0,0],[0,0,1]]) >>> S=np.array([[1,0,0],[0,1,0],[0,0,1]]) >>> angular_similarity(S,T) 3.0 >>> S=np.array([[0,1,0],[1,0,0],[0,0,1]]) >>> T=np.array([[1,0,0],[0,np.sqrt(2)/2.,np.sqrt(2)/2.],[0,0,1]]) >>> angular_similarity(S,T) 2.7071067811865475 >>> S=np.array([[0,1,0],[1,0,0],[0,0,1]]) >>> T=np.array([[1,0,0]]) >>> angular_similarity(S,T) 1.0 >>> S=np.array([[0,1,0],[1,0,0]]) >>> T=np.array([[0,0,1]]) >>> angular_similarity(S,T) 0.0 >>> S=np.array([[0,1,0],[1,0,0]]) >>> T=np.array([[0,np.sqrt(2)/2.,np.sqrt(2)/2.]]) Now we use ``print`` to reduce the precision of of the printed output (so the doctests don't detect unimportant differences) >>> print('%.12f' % angular_similarity(S,T)) 0.707106781187 >>> S=np.array([[0,1,0]]) >>> T=np.array([[0,np.sqrt(2)/2.,np.sqrt(2)/2.]]) >>> print('%.12f' % angular_similarity(S,T)) 0.707106781187 >>> S=np.array([[0,1,0],[0,0,1]]) >>> T=np.array([[0,np.sqrt(2)/2.,np.sqrt(2)/2.]]) >>> print('%.12f' % angular_similarity(S,T)) 0.707106781187 ''' m = len(S) n = len(T) if m < n: A = S.copy() a = m S = T T = A m = n n = a """ v=[] for p in permutations(S,n): angles=[] for i in range(n): angles.append(np.abs(np.dot(p[i],T[i]))) v.append(np.sum(angles)) print(v) """ v = [np.sum([np.abs(np.dot(p[i],T[i])) for i in range(n)]) for p in permutations(S,n)] return np.float(np.max(v))#*np.float(n)/np.float(m) dipy-0.10.1/dipy/core/subdivide_octahedron.py000066400000000000000000000037301263041327500211770ustar00rootroot00000000000000"""Create a unit sphere by subdividing all triangles of an octahedron recursively. The unit sphere has a radius of 1, which also means that all points in this sphere (assumed to have centre at [0, 0, 0]) have an absolute value (modulus) of 1. Another feature of the unit sphere is that the unit normals of this sphere are exactly the same as the vertices. This recursive method will avoid the common problem of the polar singularity, produced by 2d (lon-lat) parameterization methods. """ from .sphere import unit_octahedron, HemiSphere def create_unit_sphere( recursion_level=2 ): """ Creates a unit sphere by subdividing a unit octahedron. Starts with a unit octahedron and subdivides the faces, projecting the resulting points onto the surface of a unit sphere. Parameters ------------ recursion_level : int Level of subdivision, recursion_level=1 will return an octahedron, anything bigger will return a more subdivided sphere. The sphere will have $4^recursion_level+2$ vertices. Returns --------- Sphere : The unit sphere. See Also ---------- create_unit_hemisphere, Sphere """ if recursion_level > 7 or recursion_level < 1: raise ValueError("recursion_level must be between 1 and 7") return unit_octahedron.subdivide(recursion_level - 1) def create_unit_hemisphere( recursion_level=2 ): """Creates a unit sphere by subdividing a unit octahedron, returns half the sphere. Parameters ------------- recursion_level : int Level of subdivision, recursion_level=1 will return an octahedron, anything bigger will return a more subdivided sphere. The sphere will have $(4^recursion_level+2)/2$ vertices. Returns --------- HemiSphere : Half of a unit sphere. See Also ---------- create_unit_sphere, Sphere, HemiSphere """ sphere = create_unit_sphere( recursion_level ) return HemiSphere.from_sphere(sphere) dipy-0.10.1/dipy/core/tests/000077500000000000000000000000001263041327500156005ustar00rootroot00000000000000dipy-0.10.1/dipy/core/tests/__init__.py000066400000000000000000000001651263041327500177130ustar00rootroot00000000000000# init to make tests into a package # Test callable from numpy.testing import Tester test = Tester().test del Testerdipy-0.10.1/dipy/core/tests/test_geometry.py000066400000000000000000000263741263041327500210600ustar00rootroot00000000000000""" Testing utility functions """ import numpy as np import random from dipy.core.geometry import (sphere2cart, cart2sphere, nearest_pos_semi_def, sphere_distance, cart_distance, vector_cosine, lambert_equal_area_projection_polar, circumradius, vec2vec_rotmat, vector_norm, compose_transformations, compose_matrix, decompose_matrix, perpendicular_directions, dist_to_corner) from nose.tools import (assert_false, assert_equal, assert_raises, assert_almost_equal) from numpy.testing import (assert_array_equal, assert_array_almost_equal, run_module_suite) from dipy.testing import sphere_points from itertools import permutations def test_vector_norm(): A = np.array([[1, 0, 0], [3, 4, 0], [0, 5, 12], [1, 2, 3]]) expected = np.array([1, 5, 13, np.sqrt(14)]) assert_array_almost_equal(vector_norm(A), expected) expected.shape = (4, 1) assert_array_almost_equal(vector_norm(A, keepdims=True), expected) assert_array_almost_equal(vector_norm(A.T, axis=0, keepdims=True), expected.T) def test_sphere_cart(): # test arrays of points rs, thetas, phis = cart2sphere(*(sphere_points.T)) xyz = sphere2cart(rs, thetas, phis) yield assert_array_almost_equal, xyz, sphere_points.T # test radius estimation big_sph_pts = sphere_points * 10.4 rs, thetas, phis = cart2sphere(*big_sph_pts.T) yield assert_array_almost_equal, rs, 10.4 xyz = sphere2cart(rs, thetas, phis) yield assert_array_almost_equal, xyz, big_sph_pts.T, 6 # test that result shapes match x, y, z = big_sph_pts.T r, theta, phi = cart2sphere(x[:1], y[:1], z) yield assert_equal, r.shape, theta.shape yield assert_equal, r.shape, phi.shape x, y, z = sphere2cart(r[:1], theta[:1], phi) yield assert_equal, x.shape, y.shape yield assert_equal, x.shape, z.shape # test a scalar point pt = sphere_points[3] r, theta, phi = cart2sphere(*pt) xyz = sphere2cart(r, theta, phi) yield assert_array_almost_equal, xyz, pt # Test full circle on x=0, y=0, z=0 x, y, z = sphere2cart(*cart2sphere(0., 0., 0.)) yield assert_array_equal, (x, y, z), (0., 0., 0.) def test_invert_transform(): n = 100. theta = np.arange(n)/n * np.pi # Limited to 0,pi phi = (np.arange(n)/n - .5) * 2 * np.pi # Limited to 0,2pi x, y, z = sphere2cart(1, theta, phi) # Let's assume they're all unit vecs r, new_theta, new_phi = cart2sphere(x, y, z) # Transform back yield assert_array_almost_equal, theta, new_theta yield assert_array_almost_equal, phi, new_phi def test_nearest_pos_semi_def(): B = np.diag(np.array([1, 2, 3])) yield assert_array_almost_equal, B, nearest_pos_semi_def(B) B = np.diag(np.array([0, 2, 3])) yield assert_array_almost_equal, B, nearest_pos_semi_def(B) B = np.diag(np.array([0, 0, 3])) yield assert_array_almost_equal, B, nearest_pos_semi_def(B) B = np.diag(np.array([-1, 2, 3])) Bpsd = np.array([[0., 0., 0.], [0., 1.75, 0.], [0., 0., 2.75]]) yield assert_array_almost_equal, Bpsd, nearest_pos_semi_def(B) B = np.diag(np.array([-1, -2, 3])) Bpsd = np.array([[0., 0., 0.], [0., 0., 0.], [0., 0., 2.]]) yield assert_array_almost_equal, Bpsd, nearest_pos_semi_def(B) B = np.diag(np.array([-1.e-11, 0, 1000])) Bpsd = np.array([[0., 0., 0.], [0., 0., 0.], [0., 0., 1000.]]) yield assert_array_almost_equal, Bpsd, nearest_pos_semi_def(B) B = np.diag(np.array([-1, -2, -3])) Bpsd = np.array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]) yield assert_array_almost_equal, Bpsd, nearest_pos_semi_def(B) def test_cart_distance(): a = [0, 1] b = [1, 0] yield assert_array_almost_equal, cart_distance(a, b), np.sqrt(2) yield assert_array_almost_equal, cart_distance([1, 0], [-1, 0]), 2 pts1 = [2, 1, 0] pts2 = [0, 1, -2] yield assert_array_almost_equal, cart_distance(pts1, pts2), np.sqrt(8) pts2 = [[0, 1, -2], [-2, 1, 0]] yield assert_array_almost_equal, cart_distance(pts1, pts2), [np.sqrt(8), 4] def test_sphere_distance(): # make a circle, go around... radius = 3.2 n = 5000 n2 = n / 2 # pi at point n2 in array angles = np.linspace(0, np.pi*2, n, endpoint=False) x = np.sin(angles) * radius y = np.cos(angles) * radius # dists around half circle, including pi half_x = x[:n2+1] half_y = y[:n2+1] half_dists = np.sqrt(np.diff(half_x)**2 + np.diff(half_y)**2) # approximate distances from 0 to pi (not including 0) csums = np.cumsum(half_dists) # concatenated with distances from pi to 0 again cdists = np.r_[0, csums, csums[-2::-1]] # check approximation close to calculated sph_d = sphere_distance([0, radius], np.c_[x, y]) yield assert_array_almost_equal, cdists, sph_d # Now check with passed radius sph_d = sphere_distance([0, radius], np.c_[x, y], radius=radius) yield assert_array_almost_equal, cdists, sph_d # Check points not on surface raises error when asked for yield assert_raises, ValueError, sphere_distance, [1, 0], [0, 2] # Not when check is disabled sph_d = sphere_distance([1, 0], [0, 2], None, False) # Error when radii don't match passed radius yield assert_raises, ValueError, sphere_distance, [1, 0], [0, 1], 2.0 def test_vector_cosine(): a = [0, 1] b = [1, 0] yield assert_array_almost_equal, vector_cosine(a, b), 0 yield assert_array_almost_equal, vector_cosine([1, 0], [-1, 0]), -1 yield assert_array_almost_equal, vector_cosine([1, 0], [1, 1]), \ 1/np.sqrt(2) yield assert_array_almost_equal, vector_cosine([2, 0], [-4, 0]), -1 pts1 = [2, 1, 0] pts2 = [-2, -1, 0] yield assert_array_almost_equal, vector_cosine(pts1, pts2), -1 pts2 = [[-2, -1, 0], [2, 1, 0]] yield assert_array_almost_equal, vector_cosine(pts1, pts2), [-1, 1] # test relationship with correlation # not the same if non-zero vector mean a = np.random.uniform(size=(100,)) b = np.random.uniform(size=(100,)) cc = np.corrcoef(a, b)[0, 1] vcos = vector_cosine(a, b) yield assert_false, np.allclose(cc, vcos) # is the same if zero vector mean a_dm = a - np.mean(a) b_dm = b - np.mean(b) vcos = vector_cosine(a_dm, b_dm) yield assert_array_almost_equal, cc, vcos def test_lambert_equal_area_projection_polar(): theta = np.repeat(np.pi/3, 10) phi = np.linspace(0, 2*np.pi, 10) # points sit on circle with co-latitude pi/3 (60 degrees) leap = lambert_equal_area_projection_polar(theta, phi) yield \ assert_array_almost_equal, np.sqrt(np.sum(leap**2, axis=1)), \ np.array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) # points map onto the circle of radius 1 def test_lambert_equal_area_projection_cart(): xyz = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [-1, 0, 0], [0, -1, 0], [0, 0, -1]]) # points sit on +/-1 on all 3 axes r, theta, phi = cart2sphere(*xyz.T) leap = lambert_equal_area_projection_polar(theta, phi) r2 = np.sqrt(2) yield assert_array_almost_equal, np.sqrt(np.sum(leap**2, axis=1)), \ np.array([r2, r2, 0, r2, r2, 2]) # x and y =+/-1 map onto circle of radius sqrt(2) # z=1 maps to origin, and z=-1 maps to (an arbitrary point on) the # outer circle of radius 2 def test_circumradius(): yield assert_array_almost_equal, np.sqrt(0.5), \ circumradius(np.array([0, 2, 0]), np.array([2, 0, 0]), np.array([0, 0, 0])) def test_vec2vec_rotmat(): a = np.array([1, 0, 0]) for b in np.array([[0, 0, 1], [-1, 0, 0], [1, 0, 0]]): R = vec2vec_rotmat(a, b) assert_array_almost_equal(np.dot(R, a), b) def test_compose_transformations(): A = np.eye(4) A[0, -1] = 10 B = np.eye(4) B[0, -1] = -20 C = np.eye(4) C[0, -1] = 10 CBA = compose_transformations(A, B, C) assert_array_equal(CBA, np.eye(4)) assert_raises(ValueError, compose_transformations, A) def test_compose_decompose_matrix(): for translate in permutations(40 * np.random.rand(3), 3): for angles in permutations(np.deg2rad(90 * np.random.rand(3)), 3): for shears in permutations(3 * np.random.rand(3), 3): for scale in permutations(3 * np.random.rand(3), 3): mat = compose_matrix(translate=translate, angles=angles, shear=shears, scale=scale) sc, sh, ang, trans, _ = decompose_matrix(mat) assert_array_almost_equal(translate, trans) assert_array_almost_equal(angles, ang) assert_array_almost_equal(shears, sh) assert_array_almost_equal(scale, sc) def test_perpendicular_directions(): num = 35 vectors_v = np.zeros((4, 3)) for v in range(4): theta = random.uniform(0, np.pi) phi = random.uniform(0, 2*np.pi) vectors_v[v] = sphere2cart(1., theta, phi) vectors_v[3] = [1, 0, 0] for vector_v in vectors_v: pd = perpendicular_directions(vector_v, num=num, half=False) # see if length of pd is equal to the number of intendend samples assert_equal(num, len(pd)) # check if all directions are perpendicular to vector v for d in pd: cos_angle = np.dot(d, vector_v) assert_almost_equal(cos_angle, 0) # check if directions are sampled by multiples of 2*pi / num delta_a = 2. * np.pi / num for d in pd[1:]: angle = np.arccos(np.dot(pd[0], d)) rest = angle % delta_a if rest > delta_a * 0.99: # To correct cases of negative error rest = rest - delta_a assert_almost_equal(rest, 0) def _rotation_from_angles(r): R = np.array([[1, 0, 0], [0, np.cos(r[0]), np.sin(r[0])], [0, -np.sin(r[0]), np.cos(r[0])]]) R = np.dot(R, np.array([[np.cos(r[1]), 0, np.sin(r[1])], [0, 1, 0], [-np.sin(r[1]), 0, np.cos(r[1])]])) R = np.dot(R, np.array([[np.cos(r[2]), np.sin(r[2]), 0], [-np.sin(r[2]), np.cos(r[2]), 0], [0, 0, 1]])) R = np.linalg.inv(R) return R def test_dist_to_corner(): affine = np.eye(4) # Calculate the distance with the pythagorean theorem: pythagoras = np.sqrt(np.sum((np.diag(affine)[:-1] / 2) ** 2)) # Compare to calculation with this function: assert_array_almost_equal(dist_to_corner(affine), pythagoras) # Apply a rotation to the matrix, just to demonstrate the calculation is # robust to that: R = _rotation_from_angles(np.random.randn(3) * np.pi) new_aff = np.vstack([np.dot(R, affine[:3, :]), [0, 0, 0, 1]]) assert_array_almost_equal(dist_to_corner(new_aff), pythagoras) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/core/tests/test_gradients.py000066400000000000000000000146421263041327500212000ustar00rootroot00000000000000from nose.tools import assert_true import numpy as np import numpy.testing as npt from dipy.data import get_data from dipy.core.gradients import (gradient_table, GradientTable, gradient_table_from_bvals_bvecs) from dipy.io.gradients import read_bvals_bvecs def test_btable_prepare(): sq2 = np.sqrt(2) / 2. bvals = 1500 * np.ones(7) bvals[0] = 0 bvecs = np.array([[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [sq2, sq2, 0], [sq2, 0, sq2], [0, sq2, sq2]]) bt = gradient_table(bvals, bvecs) npt.assert_array_equal(bt.bvecs, bvecs) bt.info fimg, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) bvecs = np.where(np.isnan(bvecs), 0, bvecs) bt = gradient_table(bvals, bvecs) npt.assert_array_equal(bt.bvecs, bvecs) bt2 = gradient_table(bvals, bvecs.T) npt.assert_array_equal(bt2.bvecs, bvecs) btab = np.concatenate((bvals[:, None], bvecs), axis=1) bt3 = gradient_table(btab) npt.assert_array_equal(bt3.bvecs, bvecs) npt.assert_array_equal(bt3.bvals, bvals) bt4 = gradient_table(btab.T) npt.assert_array_equal(bt4.bvecs, bvecs) npt.assert_array_equal(bt4.bvals, bvals) def test_GradientTable(): gradients = np.array([[0, 0, 0], [1, 0, 0], [0, 0, 1], [3, 4, 0], [5, 0, 12]], 'float') expected_bvals = np.array([0, 1, 1, 5, 13]) expected_b0s_mask = expected_bvals == 0 expected_bvecs = gradients / (expected_bvals + expected_b0s_mask)[:, None] gt = GradientTable(gradients, b0_threshold=0) npt.assert_array_almost_equal(gt.bvals, expected_bvals) npt.assert_array_equal(gt.b0s_mask, expected_b0s_mask) npt.assert_array_almost_equal(gt.bvecs, expected_bvecs) npt.assert_array_almost_equal(gt.gradients, gradients) gt = GradientTable(gradients, b0_threshold=1) npt.assert_array_equal(gt.b0s_mask, [1, 1, 1, 0, 0]) npt.assert_array_equal(gt.bvals, expected_bvals) npt.assert_array_equal(gt.bvecs, expected_bvecs) npt.assert_raises(ValueError, GradientTable, np.ones((6, 2))) npt.assert_raises(ValueError, GradientTable, np.ones((6,))) def test_gradient_table_from_bvals_bvecs(): sq2 = np.sqrt(2) / 2 bvals = [0, 1, 2, 3, 4, 5, 6, 0] bvecs = np.array([[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [sq2, sq2, 0], [sq2, 0, sq2], [0, sq2, sq2], [0, 0, 0]]) gt = gradient_table_from_bvals_bvecs(bvals, bvecs, b0_threshold=0) npt.assert_array_equal(gt.bvecs, bvecs) npt.assert_array_equal(gt.bvals, bvals) npt.assert_array_equal(gt.gradients, np.reshape(bvals, (-1, 1)) * bvecs) npt.assert_array_equal(gt.b0s_mask, [1, 0, 0, 0, 0, 0, 0, 1]) # Test nans are replaced by 0 new_bvecs = bvecs.copy() new_bvecs[[0, -1]] = np.nan gt = gradient_table_from_bvals_bvecs(bvals, new_bvecs, b0_threshold=0) npt.assert_array_equal(gt.bvecs, bvecs) # Bvalue > 0 for non-unit vector bad_bvals = [2, 1, 2, 3, 4, 5, 6, 0] npt.assert_raises(ValueError, gradient_table_from_bvals_bvecs, bad_bvals, bvecs, b0_threshold=0.) # num_gard inconsistent bvals, bvecs bad_bvals = np.ones(7) npt.assert_raises(ValueError, gradient_table_from_bvals_bvecs, bad_bvals, bvecs, b0_threshold=0.) # bvals not 1d bad_bvals = np.ones((1, 8)) npt.assert_raises(ValueError, gradient_table_from_bvals_bvecs, bad_bvals, bvecs, b0_threshold=0.) # bvec not 2d bad_bvecs = np.ones((1, 8, 3)) npt.assert_raises(ValueError, gradient_table_from_bvals_bvecs, bvals, bad_bvecs, b0_threshold=0.) # bvec not (N, 3) bad_bvecs = np.ones((8, 2)) npt.assert_raises(ValueError, gradient_table_from_bvals_bvecs, bvals, bad_bvecs, b0_threshold=0.) # bvecs not unit vectors bad_bvecs = bvecs * 2 npt.assert_raises(ValueError, gradient_table_from_bvals_bvecs, bvals, bad_bvecs, b0_threshold=0.) # Test **kargs get passed along gt = gradient_table_from_bvals_bvecs(bvals, bvecs, b0_threshold=0, big_delta=5, small_delta=2) npt.assert_equal(gt.big_delta, 5) npt.assert_equal(gt.small_delta, 2) def test_b0s(): sq2 = np.sqrt(2) / 2. bvals = 1500 * np.ones(8) bvals[0] = 0 bvals[7] = 0 bvecs = np.array([[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [sq2, sq2, 0], [sq2, 0, sq2], [0, sq2, sq2], [0, 0, 0]]) bt = gradient_table(bvals, bvecs) npt.assert_array_equal(np.where(bt.b0s_mask > 0)[0], np.array([0, 7])) npt.assert_array_equal(np.where(bt.b0s_mask == 0)[0], np.arange(1, 7)) def test_gtable_from_files(): fimg, fbvals, fbvecs = get_data('small_101D') gt = gradient_table(fbvals, fbvecs) bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) npt.assert_array_equal(gt.bvals, bvals) npt.assert_array_equal(gt.bvecs, bvecs) def test_deltas(): sq2 = np.sqrt(2) / 2. bvals = 1500 * np.ones(7) bvals[0] = 0 bvecs = np.array([[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [sq2, sq2, 0], [sq2, 0, sq2], [0, sq2, sq2]]) bt = gradient_table(bvals, bvecs, big_delta=5, small_delta=2) npt.assert_equal(bt.big_delta, 5) npt.assert_equal(bt.small_delta, 2) def test_qvalues(): sq2 = np.sqrt(2) / 2. bvals = 1500 * np.ones(7) bvals[0] = 0 bvecs = np.array([[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [sq2, sq2, 0], [sq2, 0, sq2], [0, sq2, sq2]]) qvals = np.sqrt(bvals / 6) / (2 * np.pi) bt = gradient_table(bvals, bvecs, big_delta=8, small_delta=6) npt.assert_almost_equal(bt.qvals, qvals) if __name__ == "__main__": from numpy.testing import run_module_suite run_module_suite() dipy-0.10.1/dipy/core/tests/test_graph.py000066400000000000000000000017711263041327500203200ustar00rootroot00000000000000from dipy.core.graph import Graph from nose.tools import assert_equal def test_graph(): g=Graph() g.add_node('a',5) g.add_node('b',6) g.add_node('c',10) g.add_node('d',11) g.add_edge('a','b') g.add_edge('b','c') g.add_edge('c','d') g.add_edge('b','d') print('Nodes') print(g.node) print('Successors') print(g.succ) print('Predecessors') print(g.pred) print('Paths above d') print(g.up('d')) print('Paths below a') print(g.down('a')) print('Shortest path above d') print(g.up_short('d')) print('Shortest path below a') print(g.down_short('a')) print( 'Deleting node b') #g.del_node_and_edges('b') g.del_node('b') print( 'Nodes') print( g.node) print( 'Successors') print( g.succ) print( 'Predecessors') print( g.pred) assert_equal(len(g.node),3) assert_equal(len(g.succ),3) assert_equal(len(g.pred),3) dipy-0.10.1/dipy/core/tests/test_ndindex.py000066400000000000000000000005771263041327500206530ustar00rootroot00000000000000from dipy.core.ndindex import ndindex import numpy as np from numpy.testing import assert_array_equal def test_ndindex(): x = list(ndindex((1, 2, 3))) expected = [ix for ix, e in np.ndenumerate(np.zeros((1, 2, 3)))] assert_array_equal(x, expected) def test_ndindex_0d(): x = list(ndindex(np.array(1).shape)) expected = [()] assert_array_equal(x, expected) dipy-0.10.1/dipy/core/tests/test_optimize.py000066400000000000000000000127341263041327500210600ustar00rootroot00000000000000import numpy as np import scipy.sparse as sps import numpy.testing as npt from dipy.core.optimize import Optimizer, SCIPY_LESS_0_12, sparse_nnls, spdot import dipy.core.optimize as opt def func(x): return x[0]**2 + x[1]**2 + x[2]**2 def func2(x): return x[0]**2 + 0.5 * x[1]**2 + 0.2 * x[2]**2 + 0.2 * x[3]**2 @npt.dec.skipif(SCIPY_LESS_0_12) def test_optimize_new_scipy(): opt = Optimizer(fun=func, x0=np.array([1., 1., 1.]), method='Powell') npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0])) npt.assert_almost_equal(opt.fopt, 0) opt = Optimizer(fun=func, x0=np.array([1., 1., 1.]), method='L-BFGS-B', options={'maxcor': 10, 'ftol': 1e-7, 'gtol': 1e-5, 'eps': 1e-8}) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0])) npt.assert_almost_equal(opt.fopt, 0) npt.assert_equal(opt.evolution, None) npt.assert_equal(opt.evolution, None) opt = Optimizer(fun=func, x0=np.array([1., 1., 1.]), method='L-BFGS-B', options={'maxcor': 10, 'ftol': 1e-7, 'gtol': 1e-5, 'eps': 1e-8}, evolution=False) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0])) npt.assert_almost_equal(opt.fopt, 0) opt.print_summary() opt = Optimizer(fun=func2, x0=np.array([1., 1., 1., 5.]), method='L-BFGS-B', options={'maxcor': 10, 'ftol': 1e-7, 'gtol': 1e-5, 'eps': 1e-8}, evolution=True) npt.assert_equal(opt.evolution.shape, (opt.nit, 4)) opt = Optimizer(fun=func2, x0=np.array([1., 1., 1., 5.]), method='Powell', options={'xtol': 1e-6, 'ftol': 1e-6, 'maxiter': 1e6}, evolution=True) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0, 0.])) @npt.dec.skipif(not SCIPY_LESS_0_12) def test_optimize_old_scipy(): opt = Optimizer(fun=func, x0=np.array([1., 1., 1.]), method='L-BFGS-B', options={'maxcor': 10, 'ftol': 1e-7, 'gtol': 1e-5, 'eps': 1e-8}) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0])) npt.assert_almost_equal(opt.fopt, 0) opt = Optimizer(fun=func2, x0=np.array([1., 1., 1., 5.]), method='Powell', options={'xtol': 1e-6, 'ftol': 1e-6, 'maxiter': 1e6}, evolution=True) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0, 0.])) opt = Optimizer(fun=func, x0=np.array([1., 1., 1.]), method='L-BFGS-B', options={'maxcor': 10, 'eps': 1e-8}) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0])) npt.assert_almost_equal(opt.fopt, 0) opt = Optimizer(fun=func, x0=np.array([1., 1., 1.]), method='L-BFGS-B', options=None) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0])) npt.assert_almost_equal(opt.fopt, 0) opt = Optimizer(fun=func2, x0=np.array([1., 1., 1., 5.]), method='L-BFGS-B', options={'gtol': 1e-7, 'ftol': 1e-7, 'maxiter': 10000}) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0, 0.]), 4) npt.assert_almost_equal(opt.fopt, 0) opt = Optimizer(fun=func2, x0=np.array([1., 1., 1., 5.]), method='Powell', options={'maxiter': 1e6}, evolution=True) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0, 0.])) opt = Optimizer(fun=func2, x0=np.array([1., 1., 1., 5.]), method='Powell', options={'maxiter': 1e6}, evolution=True) npt.assert_array_almost_equal(opt.xopt, np.array([0, 0, 0, 0.])) def test_sklearn_linear_solver(): class SillySolver(opt.SKLearnLinearSolver): def fit(self, X, y): self.coef_ = np.ones(X.shape[-1]) MySillySolver = SillySolver() n_samples = 100 n_features = 20 y = np.random.rand(n_samples) X = np.ones((n_samples, n_features)) MySillySolver.fit(X, y) npt.assert_equal(MySillySolver.coef_, np.ones(n_features)) npt.assert_equal(MySillySolver.predict(X), np.ones(n_samples) * 20) def test_nonnegativeleastsquares(): n = 100 X = np.eye(n) beta = np.random.rand(n) y = np.dot(X, beta) my_nnls = opt.NonNegativeLeastSquares() my_nnls.fit(X, y) npt.assert_equal(my_nnls.coef_, beta) npt.assert_equal(my_nnls.predict(X), y) def test_spdot(): n = 100 m = 20 k = 10 A = np.random.randn(n, m) B = np.random.randn(m, k) A_sparse = sps.csr_matrix(A) B_sparse = sps.csr_matrix(B) dense_dot = np.dot(A, B) # Try all the different variations: npt.assert_array_almost_equal(dense_dot, spdot(A_sparse, B_sparse).todense()) npt.assert_array_almost_equal(dense_dot, spdot(A, B_sparse)) npt.assert_array_almost_equal(dense_dot, spdot(A_sparse, B)) def test_sparse_nnls(): # Set up the regression: beta = np.random.rand(10) X = np.random.randn(1000, 10) y = np.dot(X, beta) beta_hat = sparse_nnls(y, X) beta_hat_sparse = sparse_nnls(y, sps.csr_matrix(X)) # We should be able to get back the right answer for this simple case npt.assert_array_almost_equal(beta, beta_hat, decimal=1) npt.assert_array_almost_equal(beta, beta_hat_sparse, decimal=1) if __name__ == '__main__': npt.run_module_suite() dipy-0.10.1/dipy/core/tests/test_sphere.py000066400000000000000000000301031263041327500204740ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np import numpy.testing as nt import warnings from ...utils.six.moves import xrange from dipy.core.sphere import (Sphere, HemiSphere, unique_edges, unique_sets, faces_from_sphere_vertices, HemiSphere, disperse_charges, _get_forces, unit_octahedron, unit_icosahedron, hemi_icosahedron) from dipy.core.subdivide_octahedron import create_unit_sphere from dipy.core.geometry import cart2sphere, sphere2cart, vector_norm from numpy.testing.decorators import skipif try: from scipy.spatial import Delaunay except ImportError: needs_delaunay = skipif(True, "Need scipy.spatial.Delaunay") else: needs_delaunay = skipif(False) verts = unit_octahedron.vertices edges = unit_octahedron.edges oct_faces = unit_octahedron.faces r, theta, phi = cart2sphere(*verts.T) def test_sphere_construct_args(): nt.assert_raises(ValueError, Sphere) nt.assert_raises(ValueError, Sphere, x=1, theta=1) nt.assert_raises(ValueError, Sphere, xyz=1, theta=1) nt.assert_raises(ValueError, Sphere, xyz=1, theta=1, phi=1) def test_sphere_edges_faces(): nt.assert_raises(ValueError, Sphere, xyz=1, edges=1, faces=None) Sphere(xyz=[0, 0, 1], faces=[0, 0, 0]) Sphere(xyz=[[0, 0, 1], [1, 0, 0], [0, 1, 0]], edges=[[0, 1], [1, 2], [2, 0]], faces=[0, 1, 2]) def test_sphere_not_unit(): with warnings.catch_warnings(): warnings.simplefilter('error') nt.assert_raises(UserWarning, Sphere, xyz=[0, 0, 1.5]) def test_bad_edges_faces(): nt.assert_raises(ValueError, Sphere, xyz=[0, 0, 1.5], edges=[[1, 2]]) def test_sphere_construct(): s0 = Sphere(xyz=verts) s1 = Sphere(theta=theta, phi=phi) s2 = Sphere(*verts.T) nt.assert_array_almost_equal(s0.theta, s1.theta) nt.assert_array_almost_equal(s0.theta, s2.theta) nt.assert_array_almost_equal(s0.theta, theta) nt.assert_array_almost_equal(s0.phi, s1.phi) nt.assert_array_almost_equal(s0.phi, s2.phi) nt.assert_array_almost_equal(s0.phi, phi) def array_to_set(a): return set(frozenset(i) for i in a) def test_unique_edges(): faces = np.array([[0, 1, 2], [1, 2, 0]]) e = array_to_set([[1, 2], [0, 1], [0, 2]]) u = unique_edges(faces) nt.assert_equal(e, array_to_set(u)) u, m = unique_edges(faces, return_mapping=True) nt.assert_equal(e, array_to_set(u)) edges = [[[0, 1], [1, 2], [2, 0]], [[1, 2], [2, 0], [0, 1]]] nt.assert_equal(np.sort(u[m], -1), np.sort(edges, -1)) def test_unique_sets(): sets = np.array([[0, 1, 2], [1, 2, 0], [0, 2, 1], [1, 2, 3]]) e = array_to_set([[0, 1, 2], [1, 2, 3]]) # Run without inverse u = unique_sets(sets) nt.assert_equal(len(u), len(e)) nt.assert_equal(array_to_set(u), e) # Run with inverse u, m = unique_sets(sets, return_inverse=True) nt.assert_equal(len(u), len(e)) nt.assert_equal(array_to_set(u), e) nt.assert_equal(np.sort(u[m], -1), np.sort(sets, -1)) @needs_delaunay def test_faces_from_sphere_vertices(): faces = faces_from_sphere_vertices(verts) faces = array_to_set(faces) expected = array_to_set(oct_faces) nt.assert_equal(faces, expected) def test_sphere_attrs(): s = Sphere(xyz=verts) nt.assert_array_almost_equal(s.vertices, verts) nt.assert_array_almost_equal(s.x, verts[:, 0]) nt.assert_array_almost_equal(s.y, verts[:, 1]) nt.assert_array_almost_equal(s.z, verts[:, 2]) @needs_delaunay def test_edges_faces(): s = Sphere(xyz=verts) faces = oct_faces nt.assert_equal(array_to_set(s.faces), array_to_set(faces)) nt.assert_equal(array_to_set(s.edges), array_to_set(edges)) s = Sphere(xyz=verts, faces=[[0, 1, 2]]) nt.assert_equal(array_to_set(s.faces), array_to_set([[0, 1, 2]])) nt.assert_equal(array_to_set(s.edges), array_to_set([[0, 1], [1, 2], [0, 2]])) s = Sphere(xyz=verts, faces=[[0, 1, 2]], edges=[[0, 1]]) nt.assert_equal(array_to_set(s.faces), array_to_set([[0, 1, 2]])) nt.assert_equal(array_to_set(s.edges), array_to_set([[0, 1]])) @needs_delaunay def test_sphere_subdivide(): sphere1 = unit_octahedron.subdivide(4) sphere2 = Sphere(xyz=sphere1.vertices) nt.assert_equal(sphere1.faces.shape, sphere2.faces.shape) nt.assert_equal(array_to_set(sphere1.faces), array_to_set(sphere2.faces)) sphere1 = unit_icosahedron.subdivide(4) sphere2 = Sphere(xyz=sphere1.vertices) nt.assert_equal(sphere1.faces.shape, sphere2.faces.shape) nt.assert_equal(array_to_set(sphere1.faces), array_to_set(sphere2.faces)) # It might be good to also test the vertices somehow if we can think of a # good test for them. def test_sphere_find_closest(): sphere1 = unit_octahedron.subdivide(4) for ii in range(sphere1.vertices.shape[0]): nt.assert_equal(sphere1.find_closest(sphere1.vertices[ii]), ii) def test_hemisphere_find_closest(): hemisphere1 = hemi_icosahedron.subdivide(4) for ii in range(hemisphere1.vertices.shape[0]): nt.assert_equal(hemisphere1.find_closest(hemisphere1.vertices[ii]), ii) nt.assert_equal(hemisphere1.find_closest(-hemisphere1.vertices[ii]), ii) nt.assert_equal(hemisphere1.find_closest(hemisphere1.vertices[ii] * 2), ii) @needs_delaunay def test_hemisphere_subdivide(): def flip(vertices): x, y, z = vertices.T f = (z < 0) | ((z == 0) & (y < 0)) | ((z == 0) & (y == 0) & (x < 0)) return 1 - 2*f[:, None] decimals = 6 # Test HemiSphere.subdivide # Create a hemisphere by dividing a hemi-icosahedron hemi1 = HemiSphere.from_sphere(unit_icosahedron).subdivide(4) vertices1 = np.round(hemi1.vertices, decimals) vertices1 *= flip(vertices1) order = np.lexsort(vertices1.T) vertices1 = vertices1[order] # Create a hemisphere from a subdivided sphere sphere = unit_icosahedron.subdivide(4) hemi2 = HemiSphere.from_sphere(sphere) vertices2 = np.round(hemi2.vertices, decimals) vertices2 *= flip(vertices2) order = np.lexsort(vertices2.T) vertices2 = vertices2[order] # The two hemispheres should have the same vertices up to their order nt.assert_array_equal(vertices1, vertices2) # Create a hemisphere from vertices hemi3 = HemiSphere(xyz=hemi1.vertices) nt.assert_array_equal(hemi1.faces, hemi3.faces) nt.assert_array_equal(hemi1.edges, hemi3.edges) def test_hemisphere_constructor(): s0 = HemiSphere(xyz=verts) s1 = HemiSphere(theta=theta, phi=phi) s2 = HemiSphere(*verts.T) uniq_verts = verts[::2].T rU, thetaU, phiU = cart2sphere(*uniq_verts) nt.assert_array_almost_equal(s0.theta, s1.theta) nt.assert_array_almost_equal(s0.theta, s2.theta) nt.assert_array_almost_equal(s0.theta, thetaU) nt.assert_array_almost_equal(s0.phi, s1.phi) nt.assert_array_almost_equal(s0.phi, s2.phi) nt.assert_array_almost_equal(s0.phi, phiU) @needs_delaunay def test_mirror(): verts = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [-1, -1, -1]] verts = np.array(verts, 'float') verts = verts / np.sqrt((verts * verts).sum(-1)[:, None]) faces = [[0, 1, 3], [0, 2, 3], [1, 2, 3]] h = HemiSphere(xyz=verts, faces=faces) s = h.mirror() nt.assert_equal(len(s.vertices), 8) nt.assert_equal(len(s.faces), 6) verts = s.vertices def _angle(a, b): return np.arccos(np.dot(a, b)) for triangle in s.faces: a, b, c = triangle nt.assert_(_angle(verts[a], verts[b]) <= np.pi/2) nt.assert_(_angle(verts[a], verts[c]) <= np.pi/2) nt.assert_(_angle(verts[b], verts[c]) <= np.pi/2) @needs_delaunay def test_hemisphere_faces(): t = (1 + np.sqrt(5)) / 2 vertices = np.array( [[ -t, -1, 0], [ -t, 1, 0], [ 1, 0, t], [ -1, 0, t], [ 0, t, 1], [ 0, -t, 1], ]) vertices /= vector_norm(vertices, keepdims=True) faces = np.array( [[0, 1, 2], [0, 1, 3], [0, 2, 4], [1, 3, 4], [2, 3, 4], [1, 2, 5], [0, 3, 5], [2, 3, 5], [0, 4, 5], [1, 4, 5], ]) edges = np.array( [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5), ]) h = HemiSphere(xyz=vertices) nt.assert_equal(len(h.edges), len(edges)) nt.assert_equal(array_to_set(h.edges), array_to_set(edges)) nt.assert_equal(len(h.faces), len(faces)) nt.assert_equal(array_to_set(h.faces), array_to_set(faces)) def test_get_force(): charges = np.array([[1., 0, 0], [0, 1., 0], [0, 0, 1.]]) force, pot = _get_forces(charges) nt.assert_array_almost_equal(force, 0) charges = np.array([[1, -.1, 0], [1, 0, 0]]) force, pot = _get_forces(charges) nt.assert_array_almost_equal(force[1, [0, 2]], 0) nt.assert_(force[1, 1] > 0) def test_disperse_charges(): charges = np.array([[1., 0, 0], [0, 1., 0], [0, 0, 1.]]) d_sphere, pot = disperse_charges(HemiSphere(xyz=charges), 10) nt.assert_array_almost_equal(charges, d_sphere.vertices) a = np.sqrt(3)/2 charges = np.array([[3./5, 4./5, 0], [4./5, 3./5, 0]]) expected_charges = np.array([[0, 1., 0], [1., 0, 0]]) d_sphere, pot = disperse_charges(HemiSphere(xyz=charges), 1000, .2) nt.assert_array_almost_equal(expected_charges, d_sphere.vertices) for ii in xrange(1, len(pot)): #check that the potential of the system is going down nt.assert_(pot[ii] - pot[ii-1] <= 0) # Check that the disperse_charges does not blow up with a large constant d_sphere, pot = disperse_charges(HemiSphere(xyz=charges), 1000, 20.) nt.assert_array_almost_equal(expected_charges, d_sphere.vertices) for ii in xrange(1, len(pot)): #check that the potential of the system is going down nt.assert_(pot[ii] - pot[ii-1] <= 0) #check that the function seems to work with a larger number of charges charges = np.arange(21).reshape(7,3) norms = np.sqrt((charges*charges).sum(-1)) charges = charges / norms[:, None] d_sphere, pot = disperse_charges(HemiSphere(xyz=charges), 1000, .05) for ii in xrange(1, len(pot)): #check that the potential of the system is going down nt.assert_(pot[ii] - pot[ii-1] <= 0) #check that the resulting charges all lie on the unit sphere d_charges = d_sphere.vertices norms = np.sqrt((d_charges*d_charges).sum(-1)) nt.assert_array_almost_equal(norms, 1) def test_interp_rbf(): def data_func(s, a, b): return a * np.cos(s.theta) + b * np.sin(s.phi) from dipy.core.sphere import Sphere, interp_rbf import numpy as np s0 = create_unit_sphere(3) s1 = create_unit_sphere(4) for a, b in zip([1, 2, 0.5], [1, 0.5, 2]): data = data_func(s0, a, b) expected = data_func(s1, a, b) interp_data_a = interp_rbf(data, s0, s1, norm="angle") nt.assert_(np.mean(np.abs(interp_data_a - expected)) < 0.1) # Test that using the euclidean norm raises a warning # (following https://docs.python.org/2/library/warnings.html#testing-warnings) with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") interp_data_en = interp_rbf(data, s0, s1, norm ="euclidean_norm") nt.assert_(len(w) == 1) nt.assert_(issubclass(w[-1].category, DeprecationWarning)) nt.assert_("deprecated" in str(w[-1].message)) if __name__ == "__main__": nt.run_module_suite() dipy-0.10.1/dipy/core/tests/test_subdivide_octahedron.py000066400000000000000000000007451263041327500234030ustar00rootroot00000000000000import numpy as np from numpy.testing import assert_array_almost_equal from dipy.core.subdivide_octahedron import create_unit_sphere def test_create_unit_sphere(): sphere = create_unit_sphere(7) v, e, f = sphere.vertices, sphere.edges, sphere.faces assert_array_almost_equal((v*v).sum(1), 1) def create_half_unit_sphere(): sphere = create_half_unit_sphere(7) v, e, f = sphere.vertices, sphere.edges, sphere.faces assert_array_almost_equal((v*v).sum(1), 1) dipy-0.10.1/dipy/data/000077500000000000000000000000001263041327500144175ustar00rootroot00000000000000dipy-0.10.1/dipy/data/3shells-1000-2000-3500-N193.bval000066400000000000000000000113311263041327500206130ustar00rootroot000000000000000.000000000000000000e+00 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 1.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 2.000000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 3.500000000000000000e+03 dipy-0.10.1/dipy/data/3shells-1000-2000-3500-N193.bvec000066400000000000000000000347031263041327500206160ustar00rootroot000000000000000.000000000000000000e+00 9.999789999999999512e-01 0.000000000000000000e+00 -2.570549999999999918e-02 5.895179999999999865e-01 -2.357849999999999946e-01 -8.935779999999999834e-01 7.978399999999999936e-01 2.329370000000000052e-01 9.367199999999999971e-01 5.041299999999999670e-01 3.451989999999999781e-01 4.567649999999999766e-01 -4.874809999999999977e-01 -6.170330000000000537e-01 -5.785120000000000262e-01 -8.253639999999999866e-01 8.950759999999999827e-01 2.899920000000000275e-01 1.150140000000000051e-01 -7.999340000000000339e-01 5.124940000000000051e-01 -7.900049999999999573e-01 9.492810000000000414e-01 2.323179999999999967e-01 -1.967069999999999930e-02 2.159689999999999943e-01 7.726450000000000262e-01 -1.601529999999999898e-01 -1.461669999999999914e-01 8.873699999999999921e-01 -5.629889999999999617e-01 -3.813130000000000130e-01 -3.059540000000000037e-01 -3.326819999999999777e-01 -9.622389999999999555e-01 -9.595320000000000515e-01 4.509639999999999760e-01 -7.711919999999999886e-01 7.098160000000000025e-01 -6.945430000000000215e-01 6.815489999999999604e-01 -1.416890000000000094e-01 -7.403509999999999813e-01 -1.027560000000000001e-01 5.839130000000000154e-01 -8.775499999999999967e-02 -5.505060000000000509e-01 8.374430000000000485e-01 3.629290000000000016e-01 -1.836109999999999964e-01 -7.183230000000000448e-01 4.327820000000000000e-01 5.018369999999999775e-01 -1.705180000000000029e-01 4.631950000000000234e-01 3.837130000000000263e-01 -7.141659999999999675e-01 2.592050000000000187e-01 0.000000000000000000e+00 3.636330000000000118e-02 5.708539999999999726e-01 -2.822049999999999836e-01 7.203509999999999636e-01 2.658909999999999885e-01 9.999789999999999512e-01 0.000000000000000000e+00 -2.570549999999999918e-02 5.895179999999999865e-01 -2.357849999999999946e-01 -8.935779999999999834e-01 7.978399999999999936e-01 2.329370000000000052e-01 9.367199999999999971e-01 5.041299999999999670e-01 3.451989999999999781e-01 4.567649999999999766e-01 -4.874809999999999977e-01 -6.170330000000000537e-01 -5.785120000000000262e-01 -8.253639999999999866e-01 8.950759999999999827e-01 2.899920000000000275e-01 1.150140000000000051e-01 -7.999340000000000339e-01 5.124940000000000051e-01 -7.900049999999999573e-01 9.492810000000000414e-01 2.323179999999999967e-01 -1.967069999999999930e-02 2.159689999999999943e-01 7.726450000000000262e-01 -1.601529999999999898e-01 -1.461669999999999914e-01 8.873699999999999921e-01 -5.629889999999999617e-01 -3.813130000000000130e-01 -3.059540000000000037e-01 -3.326819999999999777e-01 -9.622389999999999555e-01 -9.595320000000000515e-01 4.509639999999999760e-01 -7.711919999999999886e-01 7.098160000000000025e-01 -6.945430000000000215e-01 6.815489999999999604e-01 -1.416890000000000094e-01 -7.403509999999999813e-01 -1.027560000000000001e-01 5.839130000000000154e-01 -8.775499999999999967e-02 -5.505060000000000509e-01 8.374430000000000485e-01 3.629290000000000016e-01 -1.836109999999999964e-01 -7.183230000000000448e-01 4.327820000000000000e-01 5.018369999999999775e-01 -1.705180000000000029e-01 4.631950000000000234e-01 3.837130000000000263e-01 -7.141659999999999675e-01 2.592050000000000187e-01 0.000000000000000000e+00 3.636330000000000118e-02 5.708539999999999726e-01 -2.822049999999999836e-01 7.203509999999999636e-01 2.658909999999999885e-01 9.999789999999999512e-01 0.000000000000000000e+00 -2.570549999999999918e-02 5.895179999999999865e-01 -2.357849999999999946e-01 -8.935779999999999834e-01 7.978399999999999936e-01 2.329370000000000052e-01 9.367199999999999971e-01 5.041299999999999670e-01 3.451989999999999781e-01 4.567649999999999766e-01 -4.874809999999999977e-01 -6.170330000000000537e-01 -5.785120000000000262e-01 -8.253639999999999866e-01 8.950759999999999827e-01 2.899920000000000275e-01 1.150140000000000051e-01 -7.999340000000000339e-01 5.124940000000000051e-01 -7.900049999999999573e-01 9.492810000000000414e-01 2.323179999999999967e-01 -1.967069999999999930e-02 2.159689999999999943e-01 7.726450000000000262e-01 -1.601529999999999898e-01 -1.461669999999999914e-01 8.873699999999999921e-01 -5.629889999999999617e-01 -3.813130000000000130e-01 -3.059540000000000037e-01 -3.326819999999999777e-01 -9.622389999999999555e-01 -9.595320000000000515e-01 4.509639999999999760e-01 -7.711919999999999886e-01 7.098160000000000025e-01 -6.945430000000000215e-01 6.815489999999999604e-01 -1.416890000000000094e-01 -7.403509999999999813e-01 -1.027560000000000001e-01 5.839130000000000154e-01 -8.775499999999999967e-02 -5.505060000000000509e-01 8.374430000000000485e-01 3.629290000000000016e-01 -1.836109999999999964e-01 -7.183230000000000448e-01 4.327820000000000000e-01 5.018369999999999775e-01 -1.705180000000000029e-01 4.631950000000000234e-01 3.837130000000000263e-01 -7.141659999999999675e-01 2.592050000000000187e-01 0.000000000000000000e+00 3.636330000000000118e-02 5.708539999999999726e-01 -2.822049999999999836e-01 7.203509999999999636e-01 2.658909999999999885e-01 0.000000000000000000e+00 -5.040010000000000150e-03 9.999919999999999920e-01 6.538610000000000255e-01 -7.692360000000000309e-01 -5.290949999999999820e-01 -2.635589999999999877e-01 1.337260000000000115e-01 9.318840000000000456e-01 1.441389999999999894e-01 -8.466939999999999467e-01 -8.503110000000000390e-01 -6.356720000000000148e-01 -3.939079999999999804e-01 6.768490000000000339e-01 -1.093469999999999998e-01 -5.250340000000000007e-01 -4.482420000000000154e-02 -5.454729999999999857e-01 -9.640499999999999625e-01 4.077669999999999906e-01 8.421389999999999709e-01 1.579929999999999946e-01 -2.376949999999999896e-01 7.870509999999999451e-01 -1.920310000000000072e-01 -9.571229999999999460e-01 -6.075340000000000185e-01 3.604129999999999834e-01 7.352739999999999831e-01 4.211110000000000131e-01 2.364819999999999978e-01 1.470370000000000010e-01 -2.037930000000000019e-01 -1.341130000000000100e-01 -2.694639999999999813e-01 2.097700000000000120e-01 -8.903370000000000450e-01 6.311750000000000416e-01 4.131589999999999985e-01 2.793949999999999906e-02 5.331010000000000471e-01 -7.292410000000000281e-01 3.932229999999999892e-01 8.253669999999999618e-01 -6.007820000000000382e-01 -3.396509999999999807e-01 -7.954839999999999689e-01 -4.622020000000000017e-01 -5.659300000000000441e-01 3.970810000000000173e-01 -6.957010000000000138e-01 6.863609999999999989e-01 6.943369999999999820e-01 -5.137690000000000312e-01 4.280519999999999881e-01 -8.125719999999999610e-01 -2.514669999999999961e-01 8.872579999999999911e-01 8.131860000000000477e-02 -9.046159999999999757e-01 -3.085970000000000102e-01 1.497950000000000115e-01 6.119139999999999580e-01 9.606829999999999536e-01 -5.040010000000000150e-03 9.999919999999999920e-01 6.538610000000000255e-01 -7.692360000000000309e-01 -5.290949999999999820e-01 -2.635589999999999877e-01 1.337260000000000115e-01 9.318840000000000456e-01 1.441389999999999894e-01 -8.466939999999999467e-01 -8.503110000000000390e-01 -6.356720000000000148e-01 -3.939079999999999804e-01 6.768490000000000339e-01 -1.093469999999999998e-01 -5.250340000000000007e-01 -4.482420000000000154e-02 -5.454729999999999857e-01 -9.640499999999999625e-01 4.077669999999999906e-01 8.421389999999999709e-01 1.579929999999999946e-01 -2.376949999999999896e-01 7.870509999999999451e-01 -1.920310000000000072e-01 -9.571229999999999460e-01 -6.075340000000000185e-01 3.604129999999999834e-01 7.352739999999999831e-01 4.211110000000000131e-01 2.364819999999999978e-01 1.470370000000000010e-01 -2.037930000000000019e-01 -1.341130000000000100e-01 -2.694639999999999813e-01 2.097700000000000120e-01 -8.903370000000000450e-01 6.311750000000000416e-01 4.131589999999999985e-01 2.793949999999999906e-02 5.331010000000000471e-01 -7.292410000000000281e-01 3.932229999999999892e-01 8.253669999999999618e-01 -6.007820000000000382e-01 -3.396509999999999807e-01 -7.954839999999999689e-01 -4.622020000000000017e-01 -5.659300000000000441e-01 3.970810000000000173e-01 -6.957010000000000138e-01 6.863609999999999989e-01 6.943369999999999820e-01 -5.137690000000000312e-01 4.280519999999999881e-01 -8.125719999999999610e-01 -2.514669999999999961e-01 8.872579999999999911e-01 8.131860000000000477e-02 -9.046159999999999757e-01 -3.085970000000000102e-01 1.497950000000000115e-01 6.119139999999999580e-01 9.606829999999999536e-01 -5.040010000000000150e-03 9.999919999999999920e-01 6.538610000000000255e-01 -7.692360000000000309e-01 -5.290949999999999820e-01 -2.635589999999999877e-01 1.337260000000000115e-01 9.318840000000000456e-01 1.441389999999999894e-01 -8.466939999999999467e-01 -8.503110000000000390e-01 -6.356720000000000148e-01 -3.939079999999999804e-01 6.768490000000000339e-01 -1.093469999999999998e-01 -5.250340000000000007e-01 -4.482420000000000154e-02 -5.454729999999999857e-01 -9.640499999999999625e-01 4.077669999999999906e-01 8.421389999999999709e-01 1.579929999999999946e-01 -2.376949999999999896e-01 7.870509999999999451e-01 -1.920310000000000072e-01 -9.571229999999999460e-01 -6.075340000000000185e-01 3.604129999999999834e-01 7.352739999999999831e-01 4.211110000000000131e-01 2.364819999999999978e-01 1.470370000000000010e-01 -2.037930000000000019e-01 -1.341130000000000100e-01 -2.694639999999999813e-01 2.097700000000000120e-01 -8.903370000000000450e-01 6.311750000000000416e-01 4.131589999999999985e-01 2.793949999999999906e-02 5.331010000000000471e-01 -7.292410000000000281e-01 3.932229999999999892e-01 8.253669999999999618e-01 -6.007820000000000382e-01 -3.396509999999999807e-01 -7.954839999999999689e-01 -4.622020000000000017e-01 -5.659300000000000441e-01 3.970810000000000173e-01 -6.957010000000000138e-01 6.863609999999999989e-01 6.943369999999999820e-01 -5.137690000000000312e-01 4.280519999999999881e-01 -8.125719999999999610e-01 -2.514669999999999961e-01 8.872579999999999911e-01 8.131860000000000477e-02 -9.046159999999999757e-01 -3.085970000000000102e-01 1.497950000000000115e-01 6.119139999999999580e-01 9.606829999999999536e-01 0.000000000000000000e+00 -4.027949999999999760e-03 -3.987939999999999714e-03 -7.561780000000000168e-01 -2.464619999999999866e-01 -8.151469999999999549e-01 -3.633939999999999948e-01 -5.878510000000000124e-01 -2.780869999999999731e-01 -3.190299999999999803e-01 1.701830000000000009e-01 3.972519999999999940e-01 6.223229999999999595e-01 -7.792289999999999495e-01 -4.014300000000000090e-01 8.083110000000000017e-01 -2.076359999999999872e-01 4.436550000000000216e-01 7.863609999999999767e-01 2.395410000000000039e-01 4.402639999999999887e-01 -1.677849999999999897e-01 5.923939999999999761e-01 -2.058300000000000129e-01 -5.714719999999999800e-01 9.811919999999999531e-01 -1.930610000000000104e-01 -1.841800000000000104e-01 -9.189410000000000078e-01 6.618209999999999926e-01 -1.877240000000000020e-01 7.919089999999999741e-01 -9.126779999999999893e-01 9.299790000000000001e-01 -9.334540000000000060e-01 -3.853909999999999975e-02 -1.878710000000000102e-01 -6.270149999999999335e-02 -8.295329999999999371e-02 -5.704919999999999991e-01 -7.189079999999999915e-01 5.012929999999999886e-01 -6.694269999999999943e-01 -5.452120000000000299e-01 -5.551669999999999661e-01 -5.459920000000000329e-01 -9.364489999999999759e-01 -2.532760000000000011e-01 2.916480000000000183e-01 -7.402739999999999876e-01 8.992299999999999738e-01 -3.548969999999999816e-03 5.844730000000000203e-01 -5.158049999999999580e-01 8.408120000000000038e-01 -7.760289999999999688e-01 -4.387380000000000169e-01 -6.532470000000000221e-01 3.815569999999999795e-01 9.966880000000000184e-01 -4.246750000000000247e-01 7.608510000000000550e-01 9.475879999999999859e-01 -3.265830000000000122e-01 7.993519999999999792e-02 -4.027949999999999760e-03 -3.987939999999999714e-03 -7.561780000000000168e-01 -2.464619999999999866e-01 -8.151469999999999549e-01 -3.633939999999999948e-01 -5.878510000000000124e-01 -2.780869999999999731e-01 -3.190299999999999803e-01 1.701830000000000009e-01 3.972519999999999940e-01 6.223229999999999595e-01 -7.792289999999999495e-01 -4.014300000000000090e-01 8.083110000000000017e-01 -2.076359999999999872e-01 4.436550000000000216e-01 7.863609999999999767e-01 2.395410000000000039e-01 4.402639999999999887e-01 -1.677849999999999897e-01 5.923939999999999761e-01 -2.058300000000000129e-01 -5.714719999999999800e-01 9.811919999999999531e-01 -1.930610000000000104e-01 -1.841800000000000104e-01 -9.189410000000000078e-01 6.618209999999999926e-01 -1.877240000000000020e-01 7.919089999999999741e-01 -9.126779999999999893e-01 9.299790000000000001e-01 -9.334540000000000060e-01 -3.853909999999999975e-02 -1.878710000000000102e-01 -6.270149999999999335e-02 -8.295329999999999371e-02 -5.704919999999999991e-01 -7.189079999999999915e-01 5.012929999999999886e-01 -6.694269999999999943e-01 -5.452120000000000299e-01 -5.551669999999999661e-01 -5.459920000000000329e-01 -9.364489999999999759e-01 -2.532760000000000011e-01 2.916480000000000183e-01 -7.402739999999999876e-01 8.992299999999999738e-01 -3.548969999999999816e-03 5.844730000000000203e-01 -5.158049999999999580e-01 8.408120000000000038e-01 -7.760289999999999688e-01 -4.387380000000000169e-01 -6.532470000000000221e-01 3.815569999999999795e-01 9.966880000000000184e-01 -4.246750000000000247e-01 7.608510000000000550e-01 9.475879999999999859e-01 -3.265830000000000122e-01 7.993519999999999792e-02 -4.027949999999999760e-03 -3.987939999999999714e-03 -7.561780000000000168e-01 -2.464619999999999866e-01 -8.151469999999999549e-01 -3.633939999999999948e-01 -5.878510000000000124e-01 -2.780869999999999731e-01 -3.190299999999999803e-01 1.701830000000000009e-01 3.972519999999999940e-01 6.223229999999999595e-01 -7.792289999999999495e-01 -4.014300000000000090e-01 8.083110000000000017e-01 -2.076359999999999872e-01 4.436550000000000216e-01 7.863609999999999767e-01 2.395410000000000039e-01 4.402639999999999887e-01 -1.677849999999999897e-01 5.923939999999999761e-01 -2.058300000000000129e-01 -5.714719999999999800e-01 9.811919999999999531e-01 -1.930610000000000104e-01 -1.841800000000000104e-01 -9.189410000000000078e-01 6.618209999999999926e-01 -1.877240000000000020e-01 7.919089999999999741e-01 -9.126779999999999893e-01 9.299790000000000001e-01 -9.334540000000000060e-01 -3.853909999999999975e-02 -1.878710000000000102e-01 -6.270149999999999335e-02 -8.295329999999999371e-02 -5.704919999999999991e-01 -7.189079999999999915e-01 5.012929999999999886e-01 -6.694269999999999943e-01 -5.452120000000000299e-01 -5.551669999999999661e-01 -5.459920000000000329e-01 -9.364489999999999759e-01 -2.532760000000000011e-01 2.916480000000000183e-01 -7.402739999999999876e-01 8.992299999999999738e-01 -3.548969999999999816e-03 5.844730000000000203e-01 -5.158049999999999580e-01 8.408120000000000038e-01 -7.760289999999999688e-01 -4.387380000000000169e-01 -6.532470000000000221e-01 3.815569999999999795e-01 9.966880000000000184e-01 -4.246750000000000247e-01 7.608510000000000550e-01 9.475879999999999859e-01 -3.265830000000000122e-01 7.993519999999999792e-02 dipy-0.10.1/dipy/data/__init__.py000066400000000000000000000306061263041327500165350ustar00rootroot00000000000000""" Read test or example data """ from __future__ import division, print_function, absolute_import import sys import json from nibabel import load from os.path import join as pjoin, dirname if sys.version_info[0] < 3: import cPickle def loads_compat(bytes): return cPickle.loads(bytes) else: # Python 3 import pickle # Need to load pickles saved in Python 2 def loads_compat(bytes): return pickle.loads(bytes, encoding='latin1') import gzip import numpy as np from dipy.core.gradients import GradientTable, gradient_table from dipy.core.sphere import Sphere, HemiSphere from dipy.sims.voxel import SticksAndBall from dipy.data.fetcher import (fetch_scil_b0, read_scil_b0, fetch_stanford_hardi, read_stanford_hardi, fetch_taiwan_ntu_dsi, read_taiwan_ntu_dsi, fetch_sherbrooke_3shell, read_sherbrooke_3shell, fetch_isbi2013_2shell, read_isbi2013_2shell, read_stanford_labels, fetch_syn_data, read_syn_data, fetch_stanford_t1, read_stanford_t1, fetch_stanford_pve_maps, read_stanford_pve_maps, fetch_viz_icons, read_viz_icons, fetch_bundles_2_subjects, read_bundles_2_subjects, fetch_cenir_multib, read_cenir_multib, fetch_mni_template, read_mni_template) from ..utils.arrfuncs import as_native_array from dipy.tracking.streamline import relist_streamlines DATA_DIR = pjoin(dirname(__file__), 'files') SPHERE_FILES = { 'symmetric362': pjoin(DATA_DIR, 'evenly_distributed_sphere_362.npz'), 'symmetric642': pjoin(DATA_DIR, 'evenly_distributed_sphere_642.npz'), 'symmetric724': pjoin(DATA_DIR, 'evenly_distributed_sphere_724.npz'), 'repulsion724': pjoin(DATA_DIR, 'repulsion724.npz'), 'repulsion100': pjoin(DATA_DIR, 'repulsion100.npz') } class DataError(Exception): pass def get_sim_voxels(name='fib1'): """ provide some simulated voxel data Parameters ------------ name : str, which file? 'fib0', 'fib1' or 'fib2' Returns --------- dix : dictionary, where dix['data'] returns a 2d array where every row is a simulated voxel with different orientation Examples ---------- >>> from dipy.data import get_sim_voxels >>> sv=get_sim_voxels('fib1') >>> sv['data'].shape (100, 102) >>> sv['fibres'] '1' >>> sv['gradients'].shape (102, 3) >>> sv['bvals'].shape (102,) >>> sv['snr'] '60' >>> sv2=get_sim_voxels('fib2') >>> sv2['fibres'] '2' >>> sv2['snr'] '80' Notes ------- These sim voxels were provided by M.M. Correia using Rician noise. """ if name == 'fib0': fname = pjoin(DATA_DIR, 'fib0.pkl.gz') if name == 'fib1': fname = pjoin(DATA_DIR, 'fib1.pkl.gz') if name == 'fib2': fname = pjoin(DATA_DIR, 'fib2.pkl.gz') return loads_compat(gzip.open(fname, 'rb').read()) def get_skeleton(name='C1'): """ provide skeletons generated from Local Skeleton Clustering (LSC) Parameters ----------- name : str, 'C1' or 'C3' Returns ------- dix : dictionary Examples --------- >>> from dipy.data import get_skeleton >>> C=get_skeleton('C1') >>> len(C.keys()) 117 >>> for c in C: break >>> sorted(C[c].keys()) ['N', 'hidden', 'indices', 'most'] """ if name == 'C1': fname = pjoin(DATA_DIR, 'C1.pkl.gz') if name == 'C3': fname = pjoin(DATA_DIR, 'C3.pkl.gz') return loads_compat(gzip.open(fname, 'rb').read()) def get_sphere(name='symmetric362'): ''' provide triangulated spheres Parameters ------------ name : str which sphere - one of: * 'symmetric362' * 'symmetric642' * 'symmetric724' * 'repulsion724' * 'repulsion100' Returns ------- sphere : a dipy.core.sphere.Sphere class instance Examples -------- >>> import numpy as np >>> from dipy.data import get_sphere >>> sphere = get_sphere('symmetric362') >>> verts, faces = sphere.vertices, sphere.faces >>> verts.shape (362, 3) >>> faces.shape (720, 3) >>> verts, faces = get_sphere('not a sphere name') #doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... DataError: No sphere called "not a sphere name" ''' fname = SPHERE_FILES.get(name) if fname is None: raise DataError('No sphere called "%s"' % name) res = np.load(fname) # Set to native byte order to avoid errors in compiled routines for # big-endian platforms, when using these spheres. return Sphere(xyz=as_native_array(res['vertices']), faces=as_native_array(res['faces'])) default_sphere = HemiSphere.from_sphere(get_sphere('symmetric724')) small_sphere = HemiSphere.from_sphere(get_sphere('symmetric362')) def get_data(name='small_64D'): """ provides filenames of some test datasets or other useful parametrisations Parameters ---------- name : str the filename/s of which dataset to return, one of: 'small_64D' small region of interest nifti,bvecs,bvals 64 directions 'small_101D' small region of interest nifti,bvecs,bvals 101 directions 'aniso_vox' volume with anisotropic voxel size as Nifti 'fornix' 300 tracks in Trackvis format (from Pittsburgh Brain Competition) 'gqi_vectors' the scanner wave vectors needed for a GQI acquisitions of 101 directions tested on Siemens 3T Trio 'small_25' small ROI (10x8x2) DTI data (b value 2000, 25 directions) 'test_piesno' slice of N=8, K=14 diffusion data 'reg_c' small 2D image used for validating registration 'reg_o' small 2D image used for validation registration 'cb_2' two vectorized cingulum bundles Returns ------- fnames : tuple filenames for dataset Examples ---------- >>> import numpy as np >>> from dipy.data import get_data >>> fimg,fbvals,fbvecs=get_data('small_101D') >>> bvals=np.loadtxt(fbvals) >>> bvecs=np.loadtxt(fbvecs).T >>> import nibabel as nib >>> img=nib.load(fimg) >>> data=img.get_data() >>> data.shape (6, 10, 10, 102) >>> bvals.shape (102,) >>> bvecs.shape (102, 3) """ if name == 'small_64D': fbvals = pjoin(DATA_DIR, 'small_64D.bvals.npy') fbvecs = pjoin(DATA_DIR, 'small_64D.gradients.npy') fimg = pjoin(DATA_DIR, 'small_64D.nii') return fimg, fbvals, fbvecs if name == '55dir_grad.bvec': return pjoin(DATA_DIR, '55dir_grad.bvec') if name == 'small_101D': fbvals = pjoin(DATA_DIR, 'small_101D.bval') fbvecs = pjoin(DATA_DIR, 'small_101D.bvec') fimg = pjoin(DATA_DIR, 'small_101D.nii.gz') return fimg, fbvals, fbvecs if name == 'aniso_vox': return pjoin(DATA_DIR, 'aniso_vox.nii.gz') if name == 'fornix': return pjoin(DATA_DIR, 'tracks300.trk') if name == 'gqi_vectors': return pjoin(DATA_DIR, 'ScannerVectors_GQI101.txt') if name == 'dsi515btable': return pjoin(DATA_DIR, 'dsi515_b_table.txt') if name == 'dsi4169btable': return pjoin(DATA_DIR, 'dsi4169_b_table.txt') if name == 'grad514': return pjoin(DATA_DIR, 'grad_514.txt') if name == "small_25": fbvals = pjoin(DATA_DIR, 'small_25.bval') fbvecs = pjoin(DATA_DIR, 'small_25.bvec') fimg = pjoin(DATA_DIR, 'small_25.nii.gz') return fimg, fbvals, fbvecs if name == "S0_10": fimg = pjoin(DATA_DIR, 'S0_10slices.nii.gz') return fimg if name == "test_piesno": fimg = pjoin(DATA_DIR, 'test_piesno.nii.gz') return fimg if name == "reg_c": return pjoin(DATA_DIR, 'C.npy') if name == "reg_o": return pjoin(DATA_DIR, 'circle.npy') if name == 'cb_2': return pjoin(DATA_DIR, 'cb_2.npz') if name == "t1_coronal_slice": return pjoin(DATA_DIR, 't1_coronal_slice.npy') def _gradient_from_file(filename): """Reads a gradient file saved as a text file compatible with np.loadtxt and saved in the dipy data directory""" def gtab_getter(): gradfile = pjoin(DATA_DIR, filename) grad = np.loadtxt(gradfile, delimiter=',') gtab = GradientTable(grad) return gtab return gtab_getter get_3shell_gtab = _gradient_from_file("gtab_3shell.txt") get_isbi2013_2shell_gtab = _gradient_from_file("gtab_isbi2013_2shell.txt") get_gtab_taiwan_dsi = _gradient_from_file("gtab_taiwan_dsi.txt") def dsi_voxels(): fimg, fbvals, fbvecs = get_data('small_101D') bvals = np.loadtxt(fbvals) bvecs = np.loadtxt(fbvecs).T img = load(fimg) data = img.get_data() gtab = gradient_table(bvals, bvecs) return data, gtab def dsi_deconv_voxels(): gtab = gradient_table(np.loadtxt(get_data('dsi515btable'))) data = np.zeros((2, 2, 2, 515)) for ix in range(2): for iy in range(2): for iz in range(2): data[ix, iy, iz], dirs = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) return data, gtab def mrtrix_spherical_functions(): """Spherical functions represented by spherical harmonic coefficients and evaluated on a discrete sphere. Returns ------- func_coef : array (2, 3, 4, 45) Functions represented by the coefficients associated with the mxtrix spherical harmonic basis of order 8. func_discrete : array (2, 3, 4, 81) Functions evaluated on `sphere`. sphere : Sphere The discrete sphere, points on the surface of a unit sphere, used to evaluate the functions. Notes ----- These coefficients were obtained by using the dwi2SH command of mrtrix. """ func_discrete = load(pjoin(DATA_DIR, "func_discrete.nii.gz")).get_data() func_coef = load(pjoin(DATA_DIR, "func_coef.nii.gz")).get_data() gradients = np.loadtxt(pjoin(DATA_DIR, "sphere_grad.txt")) # gradients[0] and the first volume of func_discrete, # func_discrete[..., 0], are associated with the b=0 signal. # gradients[:, 3] are the b-values for each gradient/volume. sphere = Sphere(xyz=gradients[1:, :3]) return func_coef, func_discrete[..., 1:], sphere dipy_cmaps = None def get_cmap(name): """Makes a callable, similar to maptlotlib.pyplot.get_cmap""" global dipy_cmaps if dipy_cmaps is None: filename = pjoin(DATA_DIR, "dipy_colormaps.json") with open(filename) as f: dipy_cmaps = json.load(f) desc = dipy_cmaps.get(name) if desc is None: return None def simple_cmap(v): """Emulates matplotlib colormap callable""" rgba = np.ones((len(v), 4)) for i, color in enumerate(('red', 'green', 'blue')): x, y0, y1 = zip(*desc[color]) # Matplotlib allows more complex colormaps, but for users who do # not have Matplotlib dipy makes a few simple colormaps available. # These colormaps are simple because y0 == y1, and therefor we # ignore y1 here. rgba[:, i] = np.interp(v, x, y0) return rgba return simple_cmap def two_cingulum_bundles(): fname = get_data('cb_2') res = np.load(fname) cb1 = relist_streamlines(res['points'], res['offsets']) cb2 = relist_streamlines(res['points2'], res['offsets2']) return cb1, cb2 def matlab_life_results(): matlab_rmse = np.load(pjoin(DATA_DIR, 'life_matlab_rmse.npy')) matlab_weights = np.load(pjoin(DATA_DIR, 'life_matlab_weights.npy')) return matlab_rmse, matlab_weights dipy-0.10.1/dipy/data/fetcher.py000066400000000000000000000635151263041327500164230ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import os import sys import contextlib if sys.version_info[0] < 3: from urllib2 import urlopen else: from urllib.request import urlopen from os.path import join as pjoin from hashlib import md5 from shutil import copyfileobj import numpy as np import nibabel as nib import tarfile import zipfile from dipy.core.gradients import gradient_table from dipy.io.gradients import read_bvals_bvecs # Set a user-writeable file-system location to put files: dipy_home = pjoin(os.path.expanduser('~'), '.dipy') class FetcherError(Exception): pass def _log(msg): """Helper function to keep track of things. For now, just prints the message """ print(msg) def _already_there_msg(folder): """ Prints a message indicating that a certain data-set is already in place """ msg = 'Dataset is already in place. If you want to fetch it again ' msg += 'please first remove the folder %s ' % folder _log(msg) def _get_file_md5(filename): """Compute the md5 checksum of a file""" md5_data = md5() with open(filename, 'rb') as f: for chunk in iter(lambda: f.read(128*md5_data.block_size), b''): md5_data.update(chunk) return md5_data.hexdigest() def check_md5(filename, stored_md5=None): """ Computes the md5 of filename and check if it matches with the supplied string md5 Input ----- filename : string Path to a file. md5 : string Known md5 of filename to check against. If None (default), checking is skipped """ if stored_md5 is not None: computed_md5 = _get_file_md5(filename) if stored_md5 != computed_md5: msg = """The downloaded file, %s, does not have the expected md5 checksum of "%s". Instead, the md5 checksum was: "%s". This could mean that something is wrong with the file or that the upstream file has been updated. You can try downloading the file again or updating to the newest version of dipy.""" % (filename, stored_md5, computed_md5) raise FetcherError(msg) def _get_file_data(fname, url): with contextlib.closing(urlopen(url)) as opener: with open(fname, 'wb') as data: copyfileobj(opener, data) def fetch_data(files, folder, data_size=None): """Downloads files to folder and checks their md5 checksums Parameters ---------- files : dictionary For each file in `files` the value should be (url, md5). The file will be downloaded from url if the file does not already exist or if the file exists but the md5 checksum does not match. folder : str The directory where to save the file, the directory will be created if it does not already exist. data_size : str, optional A string describing the size of the data (e.g. "91 MB") to be logged to the screen. Default does not produce any information about data size. Raises ------ FetcherError Raises if the md5 checksum of the file does not match the expected value. The downloaded file is not deleted when this error is raised. """ if not os.path.exists(folder): _log("Creating new folder %s" % (folder)) os.makedirs(folder) if data_size is not None: _log('Data size is approximately %s' % data_size) all_skip = True for f in files: url, md5 = files[f] fullpath = pjoin(folder, f) if os.path.exists(fullpath) and (_get_file_md5(fullpath) == md5): continue all_skip = False _log('Downloading "%s" to %s' % (f, folder)) _get_file_data(fullpath, url) check_md5(fullpath, md5) if all_skip: _already_there_msg(folder) else: _log("Files successfully downloaded to %s" % (folder)) def _make_fetcher(name, folder, baseurl, remote_fnames, local_fnames, md5_list=None, doc="", data_size=None, msg=None, unzip=False): """ Create a new fetcher Parameters ---------- name : str The name of the fetcher function. folder : str The full path to the folder in which the files would be placed locally. Typically, this is something like 'pjoin(dipy_home, 'foo')' baseurl : str The URL from which this fetcher reads files remote_fnames : list of strings The names of the files in the baseurl location local_fnames : list of strings The names of the files to be saved on the local filesystem md5_list : list of strings, optional The md5 checksums of the files. Used to verify the content of the files. Default: None, skipping checking md5. doc : str, optional. Documentation of the fetcher. data_size : str, optional. If provided, is sent as a message to the user before downloading starts. msg : str, optional. A message to print to screen when fetching takes place. Default (None) is to print nothing unzip : bool, optional Whether to unzip the file(s) after downloading them. Supports zip, gz, and tar.gz files. returns ------- fetcher : function A function that, when called, fetches data according to the designated inputs """ def fetcher(): files = {} for i, (f, n), in enumerate(zip(remote_fnames, local_fnames)): files[n] = (baseurl + f, md5_list[i] if md5_list is not None else None) fetch_data(files, folder, data_size) if msg is not None: print(msg) if unzip: for f in local_fnames: split_ext = os.path.splitext(f) if split_ext[-1] == '.gz' or split_ext[-1] == '.bz2': if os.path.splitext(split_ext[0])[-1] == '.tar': ar = tarfile.open(pjoin(folder, f)) ar.extractall(path=folder) ar.close() else: raise ValueError('File extension is not recognized') elif split_ext[-1] == '.zip': z = zipfile.ZipFile(pjoin(folder, f), 'r') z.extractall(folder) z.close() else: raise ValueError('File extension is not recognized') return files, folder fetcher.__name__ = name fetcher.__doc__ = doc return fetcher fetch_isbi2013_2shell = _make_fetcher( "fetch_isbi2013_2shell", pjoin(dipy_home, 'isbi2013'), 'https://dl.dropboxusercontent.com/u/2481924/isbi2013_merlet/', ['2shells-1500-2500-N64-SNR-30.nii.gz', '2shells-1500-2500-N64.bval', '2shells-1500-2500-N64.bvec'], ['phantom64.nii.gz', 'phantom64.bval', 'phantom64.bvec'], ['42911a70f232321cf246315192d69c42', '90e8cf66e0f4d9737a3b3c0da24df5ea', '4b7aa2757a1ccab140667b76e8075cb1'], doc="Download a 2-shell software phantom dataset", data_size="") fetch_stanford_labels = _make_fetcher( "fetch_stanford_labels", pjoin(dipy_home, 'stanford_hardi'), 'https://stacks.stanford.edu/file/druid:yx282xq2090/', ["aparc-reduced.nii.gz", "label_info.txt"], ["aparc-reduced.nii.gz", "label_info.txt"], ['742de90090d06e687ce486f680f6d71a', '39db9f0f5e173d7a2c2e51b07d5d711b'], doc="Download reduced freesurfer aparc image from stanford web site") fetch_sherbrooke_3shell = _make_fetcher( "fetch_sherbrooke_3shell", pjoin(dipy_home, 'sherbrooke_3shell'), 'https://dl.dropboxusercontent.com/u/2481924/sherbrooke_data/', ['3shells-1000-2000-3500-N193.nii.gz', '3shells-1000-2000-3500-N193.bval', '3shells-1000-2000-3500-N193.bvec'], ['HARDI193.nii.gz', 'HARDI193.bval', 'HARDI193.bvec'], ['0b735e8f16695a37bfbd66aab136eb66', 'e9b9bb56252503ea49d31fb30a0ac637', '0c83f7e8b917cd677ad58a078658ebb7'], doc="Download a 3shell HARDI dataset with 192 gradient direction") fetch_stanford_hardi = _make_fetcher( "fetch_stanford_hardi", pjoin(dipy_home, 'stanford_hardi'), 'https://stacks.stanford.edu/file/druid:yx282xq2090/', ['dwi.nii.gz', 'dwi.bvals', 'dwi.bvecs'], ['HARDI150.nii.gz', 'HARDI150.bval', 'HARDI150.bvec'], ['0b18513b46132b4d1051ed3364f2acbc', '4e08ee9e2b1d2ec3fddb68c70ae23c36', '4c63a586f29afc6a48a5809524a76cb4'], doc="Download a HARDI dataset with 160 gradient directions") fetch_stanford_t1 = _make_fetcher( "fetch_stanford_t1", pjoin(dipy_home, 'stanford_hardi'), 'https://stacks.stanford.edu/file/druid:yx282xq2090/', ['t1.nii.gz'], ['t1.nii.gz'], ['a6a140da6a947d4131b2368752951b0a']) fetch_stanford_pve_maps = _make_fetcher( "fetch_stanford_pve_maps", pjoin(dipy_home, 'stanford_hardi'), 'https://stacks.stanford.edu/file/druid:yx282xq2090/', ['pve_csf.nii.gz', 'pve_gm.nii.gz', 'pve_wm.nii.gz'], ['pve_csf.nii.gz', 'pve_gm.nii.gz', 'pve_wm.nii.gz'], ['2c498e4fed32bca7f726e28aa86e9c18', '1654b20aeb35fc2734a0d7928b713874', '2e244983cf92aaf9f9d37bc7716b37d5']) fetch_taiwan_ntu_dsi = _make_fetcher( "fetch_taiwan_ntu_dsi", pjoin(dipy_home, 'taiwan_ntu_dsi'), "http://dl.dropbox.com/u/2481924/", ['taiwan_ntu_dsi.nii.gz', 'tawian_ntu_dsi.bval', 'taiwan_ntu_dsi.bvec', 'license_taiwan_ntu_dsi.txt'], ['DSI203.nii.gz', 'DSI203.bval', 'DSI203.bvec', 'DSI203_license.txt'], ['950408c0980a7154cb188666a885a91f', '602e5cb5fad2e7163e8025011d8a6755', 'a95eb1be44748c20214dc7aa654f9e6b', '7fa1d5e272533e832cc7453eeba23f44'], doc="Download a DSI dataset with 203 gradient directions", msg="See DSI203_license.txt for LICENSE. For the complete datasets please visit : http://dsi-studio.labsolver.org", data_size="91MB") fetch_syn_data = _make_fetcher( "fetch_syn_data", pjoin(dipy_home, 'syn_test'), 'https://dl.dropboxusercontent.com/u/5918983/', ['t1.nii.gz', 'b0.nii.gz'], ['t1.nii.gz', 'b0.nii.gz'], ['701bda02bb769655c7d4a9b1df2b73a6', 'e4b741f0c77b6039e67abb2885c97a78'], data_size="12MB", doc="Download t1 and b0 volumes from the same session") fetch_mni_template = _make_fetcher( "fetch_mni_template", pjoin(dipy_home, 'mni_template'), 'https://digital.lib.washington.edu/researchworks/bitstream/handle/1773/33312/', ['COPYING', 'mni_icbm152_t2_tal_nlin_asym_09a.nii', 'mni_icbm152_t1_tal_nlin_asym_09a.nii'], ['COPYING', 'mni_icbm152_t2_tal_nlin_asym_09a.nii', 'mni_icbm152_t1_tal_nlin_asym_09a.nii'], ['6e2168072e80aa4c0c20f1e6e52ec0c8', 'f41f2e1516d880547fbf7d6a83884f0d', '1ea8f4f1e41bc17a94602e48141fdbc8'], doc = "Fetch the MNI T2 and T1 template files", data_size="35MB") fetch_scil_b0 = _make_fetcher( "fetch_scil_b0", dipy_home, 'http://scil.dinf.usherbrooke.ca/wp-content/data/', ['datasets_multi-site_all_companies.zip'], ['datasets_multi-site_all_companies.zip'], None, data_size="9.2MB", doc="Download b=0 datasets from multiple MR systems (GE, Philips, Siemens) and different magnetic fields (1.5T and 3T)", unzip=True) fetch_viz_icons = _make_fetcher("fetch_viz_icons", pjoin(dipy_home, "icons"), 'https://dl.dropboxusercontent.com/u/2481924/', ['icomoon.tar.gz'], ['icomoon.tar.gz'], ['94a07cba06b4136b6687396426f1e380'], data_size="12KB", doc="Download icons for dipy.viz", unzip=True) fetch_bundles_2_subjects = _make_fetcher( "fetch_bundles_2_subjects", pjoin(dipy_home, 'exp_bundles_and_maps'), 'https://dl.dropboxusercontent.com/u/2481924/', ['bundles_2_subjects.tar.gz'], ['bundles_2_subjects.tar.gz'], ['97756fbef11ce2df31f1bedf1fc7aac7'], data_size="234MB", doc="Download 2 subjects from the SNAIL dataset with their bundles", unzip=True) def read_scil_b0(): """ Load GE 3T b0 image form the scil b0 dataset. Returns ------- img : obj, Nifti1Image """ file = pjoin(dipy_home, 'datasets_multi-site_all_companies', '3T', 'GE', 'b0.nii.gz') return nib.load(file) def read_siemens_scil_b0(): """ Load Siemens 1.5T b0 image form the scil b0 dataset. Returns ------- img : obj, Nifti1Image """ file = pjoin(dipy_home, 'datasets_multi-site_all_companies', '1.5T', 'Siemens', 'b0.nii.gz') return nib.load(file) def read_isbi2013_2shell(): """ Load ISBI 2013 2-shell synthetic dataset Returns ------- img : obj, Nifti1Image gtab : obj, GradientTable """ files, folder = fetch_isbi2013_2shell() fraw = pjoin(folder, 'phantom64.nii.gz') fbval = pjoin(folder, 'phantom64.bval') fbvec = pjoin(folder, 'phantom64.bvec') bvals, bvecs = read_bvals_bvecs(fbval, fbvec) gtab = gradient_table(bvals, bvecs) img = nib.load(fraw) return img, gtab def read_sherbrooke_3shell(): """ Load Sherbrooke 3-shell HARDI dataset Returns ------- img : obj, Nifti1Image gtab : obj, GradientTable """ files, folder = fetch_sherbrooke_3shell() fraw = pjoin(folder, 'HARDI193.nii.gz') fbval = pjoin(folder, 'HARDI193.bval') fbvec = pjoin(folder, 'HARDI193.bvec') bvals, bvecs = read_bvals_bvecs(fbval, fbvec) gtab = gradient_table(bvals, bvecs) img = nib.load(fraw) return img, gtab def read_stanford_labels(): """Read stanford hardi data and label map""" # First get the hardi data fetch_stanford_hardi() hard_img, gtab = read_stanford_hardi() # Fetch and load files, folder = fetch_stanford_labels() labels_file = pjoin(folder, "aparc-reduced.nii.gz") labels_img = nib.load(labels_file) return hard_img, gtab, labels_img def read_stanford_hardi(): """ Load Stanford HARDI dataset Returns ------- img : obj, Nifti1Image gtab : obj, GradientTable """ files, folder = fetch_stanford_hardi() fraw = pjoin(folder, 'HARDI150.nii.gz') fbval = pjoin(folder, 'HARDI150.bval') fbvec = pjoin(folder, 'HARDI150.bvec') bvals, bvecs = read_bvals_bvecs(fbval, fbvec) gtab = gradient_table(bvals, bvecs) img = nib.load(fraw) return img, gtab def read_stanford_t1(): files, folder = fetch_stanford_t1() f_t1 = pjoin(folder, 't1.nii.gz') img = nib.load(f_t1) return img def read_stanford_pve_maps(): files, folder = fetch_stanford_pve_maps() f_pve_csf = pjoin(folder, 'pve_csf.nii.gz') f_pve_gm = pjoin(folder, 'pve_gm.nii.gz') f_pve_wm = pjoin(folder, 'pve_wm.nii.gz') img_pve_csf = nib.load(f_pve_csf) img_pve_gm = nib.load(f_pve_gm) img_pve_wm = nib.load(f_pve_wm) return (img_pve_csf, img_pve_gm, img_pve_wm) def read_taiwan_ntu_dsi(): """ Load Taiwan NTU dataset Returns ------- img : obj, Nifti1Image gtab : obj, GradientTable """ files, folder = fetch_taiwan_ntu_dsi() fraw = pjoin(folder, 'DSI203.nii.gz') fbval = pjoin(folder, 'DSI203.bval') fbvec = pjoin(folder, 'DSI203.bvec') bvals, bvecs = read_bvals_bvecs(fbval, fbvec) bvecs[1:] = (bvecs[1:] / np.sqrt(np.sum(bvecs[1:] * bvecs[1:], axis=1))[:, None]) gtab = gradient_table(bvals, bvecs) img = nib.load(fraw) return img, gtab def read_syn_data(): """ Load t1 and b0 volumes from the same session Returns ------- t1 : obj, Nifti1Image b0 : obj, Nifti1Image """ files, folder = fetch_syn_data() t1_name = pjoin(folder, 't1.nii.gz') b0_name = pjoin(folder, 'b0.nii.gz') t1 = nib.load(t1_name) b0 = nib.load(b0_name) return t1, b0 mni_notes = \ """ Notes ----- The templates were downloaded from the MNI (McGill University) `website `_ in July 2015. The following publications should be referenced when using these templates: .. [1] VS Fonov, AC Evans, K Botteron, CR Almli, RC McKinstry, DL Collins and BDCG, Unbiased average age-appropriate atlases for pediatric studies, NeuroImage, 54:1053-8119, DOI: 10.1016/j.neuroimage.2010.07.033 .. [2] VS Fonov, AC Evans, RC McKinstry, CR Almli and DL Collins, Unbiased nonlinear average age-appropriate brain templates from birth to adulthood, NeuroImage, 47:S102 Organization for Human Brain Mapping 2009 Annual Meeting, DOI: http://dx.doi.org/10.1016/S1053-8119(09)70884-5 License for the MNI templates: ----------------------------- Copyright (C) 1993-2004, Louis Collins McConnell Brain Imaging Centre, Montreal Neurological Institute, McGill University. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies. The authors and McGill University make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. The authors are not responsible for any data loss, equipment damage, property loss, or injury to subjects or patients resulting from the use or misuse of this software package. """ def read_mni_template(contrast="T2"): """ Read the MNI template from disk Parameters ---------- contrast : list or string, optional Which of the contrast templates to read. Two contrasts are available: "T1" and "T2", so you can either enter one of these strings as input, or a list containing both of them. Returns ------- list : contains the nibabel.Nifti1Image objects requested, according to the order they were requested in the input. Examples -------- Get only the T2 file: >>> T2_nifti = read_mni_template("T2") # doctest: +SKIP Get both files in this order: >>> T1_nifti, T2_nifti = read_mni_template(["T1", "T2"]) # doctest: +SKIP """ files, folder = fetch_mni_template() file_dict = {"T1": pjoin(folder, 'mni_icbm152_t1_tal_nlin_asym_09a.nii'), "T2": pjoin(folder, 'mni_icbm152_t2_tal_nlin_asym_09a.nii')} if isinstance(contrast, str): return nib.load(file_dict[contrast]) else: out_list = [] for k in contrast: out_list.append(nib.load(file_dict[k])) return out_list # Add the references to both MNI-related functions: read_mni_template.__doc__ += mni_notes fetch_mni_template.__doc__ += mni_notes def fetch_cenir_multib(with_raw=False): """ Fetch 'HCP-like' data, collected at multiple b-values Parameters ---------- with_raw : bool Whether to fetch the raw data. Per default, this is False, which means that only eddy-current/motion corrected data is fetched """ folder = pjoin(dipy_home, 'cenir_multib') fname_list = ['4D_dwi_eddycor_B200.nii.gz', 'dwi_bvals_B200', 'dwi_bvecs_B200', '4D_dwieddycor_B400.nii.gz', 'bvals_B400', 'bvecs_B400', '4D_dwieddycor_B1000.nii.gz', 'bvals_B1000', 'bvecs_B1000', '4D_dwieddycor_B2000.nii.gz', 'bvals_B2000', 'bvecs_B2000', '4D_dwieddycor_B3000.nii.gz', 'bvals_B3000', 'bvecs_B3000'] md5_list = ['fd704aa3deb83c1c7229202cb3db8c48', '80ae5df76a575fe5bf9f1164bb0d4cfb', '18e90f8a3e6a4db2457e5b1ba1cc98a9', '3d0f2b8ef7b6a4a3aa5c4f7a90c9cfec', 'c38056c40c9cc42372232d6e75c47f54', '810d79b4c30cb7dff3b2000017d5f72a', 'dde8037601a14436b2173f4345b5fd17', '97de6a492ae304f39e0b418b6ebac64c', 'f28a0faa701bdfc66e31bde471a5b992', 'c5e4b96e3afdee99c0e994eff3b2331a', '9c83b8d5caf9c3def240f320f2d2f56c', '05446bd261d57193d8dbc097e06db5ff', 'f0d70456ce424fda2cecd48e64f3a151', '336accdb56acbbeff8dac1748d15ceb8', '27089f3baaf881d96f6a9da202e3d69b'] if with_raw: fname_list.extend(['4D_dwi_B200.nii.gz', '4D_dwi_B400.nii.gz', '4D_dwi_B1000.nii.gz', '4D_dwi_B2000.nii.gz', '4D_dwi_B3000.nii.gz']) md5_list.extend(['a8c36e76101f2da2ca8119474ded21d5', 'a0e7939f6d977458afbb2f4659062a79', '87fc307bdc2e56e105dffc81b711a808', '7c23e8a5198624aa29455f0578025d4f', '4e4324c676f5a97b3ded8bbb100bf6e5']) files = {} baseurl = \ 'https://digital.lib.washington.edu/researchworks/bitstream/handle/1773/33311/' for f, m in zip(fname_list, md5_list): files[f] = (baseurl + f, m) fetch_data(files, folder) return files, folder def read_cenir_multib(bvals=None): """ Read CENIR multi b-value data Parameters ---------- bvals : list or int The b-values to read from file (200, 400, 1000, 2000, 3000). Returns ------- gtab : a GradientTable class instance img : nibabel.Nifti1Image Notes ----- Details of acquisition and processing are availble """ files, folder = fetch_cenir_multib(with_raw=False) if bvals is None: bvals = [200, 400, 1000, 2000, 3000] if isinstance(bvals, int): bvals = [bvals] file_dict = {200: {'DWI': pjoin(folder, '4D_dwi_eddycor_B200.nii.gz'), 'bvals': pjoin(folder, 'dwi_bvals_B200'), 'bvecs': pjoin(folder, 'dwi_bvecs_B200')}, 400: {'DWI': pjoin(folder, '4D_dwieddycor_B400.nii.gz'), 'bvals': pjoin(folder, 'bvals_B400'), 'bvecs': pjoin(folder, 'bvecs_B400')}, 1000: {'DWI': pjoin(folder, '4D_dwieddycor_B1000.nii.gz'), 'bvals': pjoin(folder, 'bvals_B1000'), 'bvecs': pjoin(folder, 'bvecs_B1000')}, 2000: {'DWI': pjoin(folder, '4D_dwieddycor_B2000.nii.gz'), 'bvals': pjoin(folder, 'bvals_B2000'), 'bvecs': pjoin(folder, 'bvecs_B2000')}, 3000: {'DWI': pjoin(folder, '4D_dwieddycor_B3000.nii.gz'), 'bvals': pjoin(folder, 'bvals_B3000'), 'bvecs': pjoin(folder, 'bvecs_B3000')}} data = [] bval_list = [] bvec_list = [] for bval in bvals: data.append(nib.load(file_dict[bval]['DWI']).get_data()) bval_list.extend(np.loadtxt(file_dict[bval]['bvals'])) bvec_list.append(np.loadtxt(file_dict[bval]['bvecs'])) # All affines are the same, so grab the last one: aff = nib.load(file_dict[bval]['DWI']).get_affine() return (nib.Nifti1Image(np.concatenate(data, -1), aff), gradient_table(bval_list, np.concatenate(bvec_list, -1))) CENIR_notes = \ """ Notes ----- Details of the acquisition and processing, and additional meta-data are avalible through `UW researchworks `_ """ fetch_cenir_multib.__doc__ += CENIR_notes read_cenir_multib.__doc__ += CENIR_notes def read_viz_icons(style='icomoon', fname='infinity.png'): """ Read specific icon from specific style Parameters ---------- style : str Current icon style. Default is icomoon. fname : str Filename of icon. This should be found in folder HOME/.dipy/style/. Default is infinity.png. Returns -------- path : str Complete path of icon. """ folder = pjoin(dipy_home, 'icons', style) return pjoin(folder, fname) def read_bundles_2_subjects(subj_id='subj_1', metrics=['fa'], bundles=['af.left', 'cst.right', 'cc_1']): r""" Read images and streamlines from 2 subjects of the SNAIL dataset Parameters ---------- subj_id : string Either ``subj_1`` or ``subj_2``. metrics : list Either ['fa'] or ['t1'] or ['fa', 't1'] bundles : list Example ['af.left', 'cst.right', 'cc_1']. See all the available bundles in the ``exp_bundles_maps/bundles_2_subjects`` directory of your ``$HOME/.dipy`` folder. Returns ------- dix : dict Dictionary with data of the metrics and the bundles as keys. Notes ----- If you are using these datasets please cite the following publications. References ---------- .. [1] Renaud, E., M. Descoteaux, M. Bernier, E. Garyfallidis, K. Whittingstall, "Morphology of thalamus, LGN and optic radiation do not influence EEG alpha waves", Plos One (under submission), 2015. .. [2] Garyfallidis, E., O. Ocegueda, D. Wassermann, M. Descoteaux. Robust and efficient linear registration of fascicles in the space of streamlines , Neuroimage, 117:124-140, 2015. """ dname = pjoin(dipy_home, 'exp_bundles_and_maps', 'bundles_2_subjects') from nibabel import trackvis as tv res = {} if 't1' in metrics: img = nib.load(pjoin(dname, subj_id, 't1_warped.nii.gz')) data = img.get_data() affine = img.get_affine() res['t1'] = data if 'fa' in metrics: img_fa = nib.load(pjoin(dname, subj_id, 'fa_1x1x1.nii.gz')) fa = img_fa.get_data() affine = img_fa.get_affine() res['fa'] = fa res['affine'] = affine for bun in bundles: streams, hdr = tv.read(pjoin(dname, subj_id, 'bundles', 'bundles_' + bun + '.trk'), points_space="rasmm") streamlines = [s[0] for s in streams] res[bun] = streamlines return res dipy-0.10.1/dipy/data/files/000077500000000000000000000000001263041327500155215ustar00rootroot00000000000000dipy-0.10.1/dipy/data/files/55dir_grad.bval000066400000000000000000000004251263041327500203150ustar00rootroot000000000000000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 dipy-0.10.1/dipy/data/files/55dir_grad.bvec000066400000000000000000000047631263041327500203210ustar00rootroot000000000000000 0.387747134121 0.946163995722 -0.922518214794 0.444901340191 -0.088648379736 0.398858764491 0.707421617532 0.441719326768 -0.984543274106 0.816864993569 0.973222292055 -0.365922889995 0.697928959906 0.194286490773 -0.421934676133 -0.918294577668 0.951258678509 -0.482260349695 0.017747824887 0.008439275026 0.022003496707 -0.302920122261 -0.605795821812 0.801088034306 0.197614702014 0.822315620723 0.531572028134 -0.900257095184 -0.043757932112 0.654348201408 -0.380464261169 -0.819307000804 -0.721142532083 -0.549296621645 -0.696135340591 0.364655265727 -0.090729077048 0.511611491293 -0.693341730595 0.751543758 -0.780508167624 -0.100583708102 0.219939025696 -0.780300794447 0.755047655881 -0.478715333951 0.152870187393 -0.388991446276 -0.066544469261 -0.306611784146 0.0724455254 0.456711407833 0.392354846453 -0.550316062949 -0.25272017908 0 -0.296393661931 -0.081321931027 -0.384882209717 -0.161185017106 -0.92988659956 0.828672486485 0.031786637059 0.343437931108 0.070601203125 0.449497285481 -0.16040248204 0.925434114895 -0.475145821454 0.979839225871 -0.626891396224 -0.058522138943 0.302296624642 -0.174024786406 0.566474680917 -0.843382140828 0.06386048901 -0.640449793751 0.7510264358 0.039519118666 -0.693865338491 -0.565236505598 -0.807120477633 0.382874752951 -0.416578339326 0.755830304425 0.645279718315 -0.266629899103 -0.480787014528 -0.805702982944 -0.669944149585 -0.606149719157 -0.273405988981 0.471016167011 0.289001415041 0.486149073628 0.586409922872 0.932608599035 0.15823728798 0.22399249773 -0.439220995009 0.665543534564 -0.986482345681 0.292599882564 0.886002068699 -0.934865622332 0.640718077698 -0.838931327882 0.776467536851 -0.160226448479 0.232824243654 0 0.872813242996 0.313305660232 0.028737223536 -0.880955270009 0.357004729282 0.392700389778 0.706076670591 -0.828815072158 -0.16028103921 0.36150210598 -0.164649366846 -0.098347026224 0.535846634103 -0.046560186303 -0.654964355074 0.391548500034 -0.061021941069 -0.858568767676 -0.823888008525 -0.537247934542 -0.997716234245 0.705736113015 0.262622761778 -0.597240488038 0.692458895234 0.065610309056 -0.256880737876 0.207229549349 -0.908046105978 -0.023430369769 0.662465871652 -0.507586973175 0.498795845093 0.221621128787 -0.258012449344 -0.70683028737 0.957610254627 0.718607996331 0.660117737014 -0.445915976414 -0.216634260053 0.346589265082 0.962594299624 -0.583916116532 -0.486814086579 -0.572611065768 -0.059019382124 -0.873539331368 -0.45888143117 -0.178928706485 0.764350698803 0.295988035322 -0.493108343755 0.819438659125 0.939108823648 dipy-0.10.1/dipy/data/files/C.npy000066400000000000000000010001201263041327500164250ustar00rootroot00000000000000“NUMPYF{'descr': 'ÿëÇŸëH/•ëÈa1¾C?~¿©eä OÄ7‰ä.Í€1Ñrü«“‘¾x(ûC¦kü/±Whd×µ¼û¸•ðàtÜdm¦³1$£÷í"Y٢ӕ¬ùE&¥ddßœÒÅÀ‹ úb˜–o7NqëJ%ò{¡kÚúß6Í9­?ucPèËb'p§èŠã]0cÜ+ѱqL®û­¯eó÷:']wY_ëŽãT‹j{ü[in½¾o¡k†Ùt˜¸ 'ÒoÓóÉšñ© =‘nœš—Ëûe.{¹Ð¶l¼B— “4dz¹¢ —ÝËù/ß rþ¶uoêÇ3Ýs†oÔ3½ï;Ø›zYÆÁV?û.ÏÛFxD9ÈÏ!Gt|,›*تïpb/>ÅÊëEyât5“çz؇q\,ïÒâÈàÙxš1¬½Ía?eú;ÂX> šèêWㇺ§[ÿŸêtzL©ç3ß‘©„ØlýU‘7Ag’ 3?î™3²®ƒN%Fákù …%¡TõÅ£q˜îÕÿÍKíÈýšt±÷Òø£žüÛußå<9Þ²É0ݹìÊi$¶ ÿ‚_>êÄ ×­ìpÇ~Šýñ ?}“™iê…lè6ùÉ—‚ü!Š£^–¨é!/0S6ç­ËÞ꞊UðãjÜlnYáÑ^ëé ÇpõèŒ=Óx­üU¯oXËN鹡"9 6U˜M¯Çë‰ìâRV ílîo^htpR|\®`#<ªï?¼ÔGæ;¯”&~0Ñ–{d:÷ñ£³²o×a$”¢çpÇ:2­†mxJ·a¿Ò²¬vÞ«fÒÑ~vçKX†ò‚×"èlPZ©ÞͨÄCQ9ãE<_gÈíP6r_Kem ÿŽ2¯ÙÂ{âë”›þ4Ñq^gSövÀ›áH`[Šq¦Û®9Šq7Uß:ÌrÚ~Sõ€=À}‰—Kÿ`À°òN7÷›¥ÝþQŠïâgº“âûUÎLJ¾”—¾ÜÄßÇ%mò=úwž´Oeuo¹nºG”€W 1äý&¶³ÿsþÊlùÆöþÛRTd”×ýŽy…ªð\–»4ÒÊå¸ÿ.%9P…ì9ú ³_A QÙélùÈ„™\dU )'¶¦Î™ c+¾/_Ô‰v/P±Rµßû\¾±G9ŽïÇ? ¨0ËÖþ.÷|Æ©;‹K?ãúE¢éaRŒë8ŠT˜ "ÆNííûbÍc Œë¸ +_ˆÕ7JN{„›åwyF•?TckÏ+½K>•û·0?å'<Á4Ý·×¥Ü^ÄÎ_JÛ%ÛJîì"Ì3­ÛÜ4[Ý•²¾uV–¢3ð¬ÞL-̹ëËGérg¶Œ[•Ůǭ‡ôûËR ilÛ%Øuý®\ÇØ/ø¦÷êFÃÙGÈ1÷íDUÜéÞ„zé›Ïå‚>C ¡š¬Š~~ñû.¿ŒåUʨØõ øö-NÁè$qÛ`ލþìyÂJµZ)>ß×û5´ÏðGHØcES^©vT«Ãø-àÒ@Üa)zJÒrñÓÄ‚ÿAÑ!Òw®C)‹Ì‚ÄÔcÃŒŠ€ÖÌ[÷SÍ%èMHŒ Áؤåû›&İ©%Ým)†C'ŽN”ªqñìªòË©ÓøûHh~ÀÓˆC‚oB’ÃŒxa)BT¤"$×ìÌšn…BÖœš çÏS—bÞ a]'««#`¼{Ù*ïA¨”6à+Ô'æv(ÿ\¢RÈ÷XD(+X=žº©6ªÙu>—òÜæ!…À²ó*QBÀŽ„  šòÃÑ‹úÝætU•ê±A†âêðìšš*Ñ××Ë]¯à—";‹ú²Mÿâ 6_ró»¤Å¢AAwÙ‘òö]x KÌžáŠnÍ^„‘Ç\µ1Žuº”ék ^ŠÌaZ‹ä¾¸ó¯K.™j:»-Þ©i“/?ÁÄ׫ۻ:‹Hä¦ Ë3÷.ÚF71°8-o=~ªO«ªž/ «=Û\Š,®»ó6è 6ÅB40 v){¯“@Îvd‹¹~yZ'•þWzeq\ö–bŽèäêRÅ,žˆ ïýò®¢Û§æ|¾.öÔ¯—'¾s‹¿Û‚dŬàñõe=98M>/ÖÏÊôœ~ osɱNB³vóÄ&É}VÓ¸÷Ã<õ òÁ×Klƒ•:ÇRزةxJÙrêrŠ 9˜< Ôö=<õ¼ƒ¶å ïcÕeƒ\ªM÷,ß@¨©ṫϪœL¥Ïö-Å[Ä^UFM‚›;(ÇcœÛžÕ4¬2ל‘ë8wgÿ_Þ˜•nÞÅØ%®ùOÛ«\Õõ2˜ÇîýõýËoM[=ÅK¿Su q˜òÊÙ¯Y#z®ç_Œi1Mû–²u!ÍXô\Ñ›„4ì.í[žÕǶeKEÓÒV·‰ö.e¢‹È³×2«\Ÿb´+^eò::E(¼Þʬ۳Ü+C‡û u:i^¼K?,Ïu²}i1öbˆ4j³4ÃŽ¤fF¯Ž5žŽ Tª{®†@¿„†èhU&ê*›]ÒèœvKýV?» x¨\„_hÄ<á^ìÝÑjò\8%Ьu²ixËÓÕì)™Vç¿«å_îþ"y){F›SÆÞׯÀ€Xª©Õɺ¶† å¢Pù¾˜"Ÿ/ÅA‡Ð¨‡y9hësªWd:<c­oUë5!º:o#ÏÛž[ŠŽêÕ¤åÝ“НóŽC/ñ ¯¸.‚a°k¥xBjX–Ä M }©bJî`kZCÂrçúwÕ't£þâCúG¯~Rg§&äâ8÷tü½BXA÷ŸÛÐíß//à=­&ô ‡Î5ñ¸ºÚÖç(ú«:¨Œq±M…ÊPn ìÈâ´ŸáÉlŽcëaž&Yß Gô“Fv®Ó©…/×Pî}R Ò°Š^ÕnàÞê0ì¨"šïVä'ÕŒõâÁŽ/E„†ïUæ…âøžùÚãóƒ*‘k²ºOðW1‘*¢…;ËôŽÂæ¸NögÁo)v ^qG;¹wÐ%*>Qãªgi“ŒÝbõÙ¨Gµ}à¹ãmkε˜´  ñˆÚdÇÔ‚‚ž’7í ˜¢5]„AEˆ×'i³´K¾”Öà¸ç0}}ÞÑ”y,Vi‘®CŒ„ýúðùì ˜Q£5²ƒ§ ÏÔB‡4Ãæ`·R*åWŠrvê£ù5˜å·?°¬˜×F=¿û ñàW}¬Dë8ñövÔU¥­Ýɽ:g YPIïϬB)—RÔš ‚”8aL;·½˜A½-üI‹S>¨œ*<lè&ßXQëв³{r¦ú¦¼ƒÊk²UE¼½s¨‡ÑšìZ¹­1~ ÎTŸªý9„4©«Üu×dõqꛟÔ-«c…¡Â)ÂÛò”¬}{Îi¶K÷ âDv˜]ŸSßVVNÔØhgB#½(Ú÷uñUcZ‡b鯉è*øV™‚|Î 5â8 µr £StŽ{âRPHÉC»ðSŽd뎼ÂN-e†l-“¯ª1²“tUÉF—æ áK=)LºT$¯¦‚X‚ÑïÞ)I‡*‡Ãœ”‡ÄØzÃÕå§°èœb¿·í)xwî—Ä'd@ØV¯†Æd´ªj<–ùiÌ£·]—'‹àÒ~…Âkx—Ž+œ¯©=C°îöx)»ûzÜA;²uðT4ù \4}yZÞ•›Ç­Wä´N‰‚i]Y«“”{Dr¼Î]=˜€—xÎ ÷k¬°’Ù /Ä×h³ò£l:çÔˆlcÄxq̸Ͽ‰Ìþb>j£ÆLÇ}\ˆK²)r!tæ8ÊÌq⸘ËoXµBc?á º=Šæ‚ÿà[lQ^r|“ê\Ú^ªm3(†1ŸÇQ(5 ©~¤£0<_‡…š”‡N«ò…ƒK9 Öjëéw ¢(GEþ^No“¯'2~*'ÏÒ™[5l×±8 zòìÙ€¢à¨õXÌ£ÑÃüzZ?êë+aëDãsæ1 Ä9`x§O?blÔ ßeÐÂÀ þúìPÈ%jž®øÁWqn¢u٣ٷ³”+aúÇ·*'~H×DXà@Su‘ÃÅd†pú£k·~s6Ê”‹Ý1ÈSõ4ú™´w÷hwÈBx`‘ƺ´ÂÞÂÙ÷>‘Ë­³Ë=‰m>zUµ¨ªÿ‚Êá©Ü­S߉Ö%c;é¨ÖoÊ ݸ!\PÓ—æf£Þ,AYµy¹}»°g)ª÷îñrâšáà?;Íç»_¿éº~óà?[Þÿó*ûçЫÿ‰øûHCþðåÝ?¸ï52Ç Z,· 0®ÃâÂlò„¸#b‰‚ñ¤Uà9ˆÛÞxñãèÜ÷NÔg½qðŸËQôÏçÏ—‹T ÿóŠ ŸŒ8OD@¹ðEîA±ˆ\J–Äøo†¿GQƒr%Q®D”%tŠ$*©i ‡"]¿gIFJFÇ¿‡Âç1ÿHõ(Š8!ùÂùH8!ÞéøÌå$hDq8& y e#vü! qÎÇÎ]ƒ?¿JÿÿW!5âŸLÿ»!Õl)â8J•’ ã°¼zë›bd}zqÛ·ËN,Òñ¦P,Ý©òì‘zyQÜ\Æ"\¶Ê“LÏ—_D†¼„†‰r5©šìéòÓM«ûO•V-o‹÷3þå.ü"à_uxxo©ŠÄ†k®H×Ê#‹[”H¯ˆ"ęӵyíÞ3Ýaæ(&½| 1}i) ¡ªOÌ\z¶T‡0œçYÿF`Š?]Šý3ÚM¸S<¨ÝC–DL|–þÙ¥Z5E\Þ„ôÅôùùSK±%ñèEZfG`Q÷Æt.3q§i*‘“0Ň³ß0Ddù79P*М\•]Q å¹l¥¼èŽ- @Ø5»±BãkõÐRm;è#š½¸e½¯|ïV–×DjÖÐ8_}»§<üx»w *CXMìÊŸâŽþýb [¤E_SÚ—bñUË—¢ýj(ÛßÇA(U¦*¾!Ï{:hxàæ 6EIÝ´­Ú)øwØÀ¥*Hi—3¶ÐRdgí RMŸ~qµ„>¨–J`O“‡ vÙ(Äéâõ7i’8õ€: WBýÕfôå[õ‰úÅç#†µ£ì¸¾ü:·€ÅLå›b³t4ãX¨€'±²p]vÄæÍq''ª.èMg€é:žuü'¢Ÿ *R`•D@†òÔœB%ˆ0€[— øjåp‹^ž¡<ÿÜ>%‡ë×bö„Ú´ ÷xw8¨ã;?õI;”;¸ãÃ…éq}Ñ>#Êþ^N=‘y ªap õÎkì ¼Ê8)WO z™Ü#¬oþ ¡Œ¿`ì¬á$ƒ"Oåš/Y÷Ñšù(F.c¸E"E_ÛQ .Ô›Òèòjv Œ‡=sXg$”¿åZZ[±zˆ´E‚èû•1ƒþ8P]öÔLbr¤~Òš½©V87_!û»*ÑÇRáÄŽ†þW±¼‡ ñÖFEܘ&Õ©ª{8RÁÊ쾺[!×x%`²=û}{±Ô.¾Ð‹Ùj&Š–­¥BHu[*ÀäÅÞkÝÖŸÃô]äÊ\.ß<’Ùº?x°¯‹³E)ÁÜWJÇG‡íàdaŽB毺”ŠiuýˆõÅ)Ý $$õ ËÕŠ¡ž¶^\~@Y·÷él_uí F Þ¨xÄÁrýyZIGyþs±)>ĸ#.Êë;ëhªE ¶?Ž1EwˆïfðN¾kh Ø¿(Ûëõ{¼[ÿ*;zT(+byzEA‹ìŽüÒ ;b€2`³Šv¸ÂR”Iš»ùp…zV W¿ÂÕ)£ÍˆÝdðy€­¢Vóô.5åã+]o2`•1xÚŠ5ÞzÄëÃgütÓ›•&fü–¾E§ì0AnO”7Ôá½ÞyƒqÕœ 43=ös¡; š€p/ß7…²”¸åú =ãŠXM#• ÀÏ=#¤µ(ˆ:¶óc'KGfJ®ðåCSñ¾+©]ýè vdT؆¨Ûù¢ääpM4ìiº“ã'×UœÕ‘¿’m tÇkÌð|ÑÆ„Lõ;b) VÚÎ×m4ô9¤P™‰( ‹.À»d‹“¦$á°gW< ÈûÄ·x²ºxñXÌ5c™vb;v¦égã @Fm,0àW/WúˆåÛ`Hn—ÌÆT¶Ó$fè.§uóM¹ÚéüÍ!ÀÃíùšÛ»^1拇|ýÓ~{ä{™Ý®QÀBz@—Z%»Á'‘VoOk9ȪŠ[|~ Û¡ow½o(äU[eOñC£Ñ {ª)(ä‹-)ÉElL¡øª¼Õ¦Øè…ª›‹m£A1úZ…A,&(ù½îŽb¬ºU|Û=œÚBµ\stzæØRß©˜áIÓG7Eš'ª«¼x0µ±Ý¼ì}lucáùÉÓ8D‘ìáî‹MÍ­hü‰;ÿ“b³:#*ͲÇi°æ¢hìwn©t!<þðW1^î²ÏÕÄfpjIžöØJ%õ‹«ÕDf‡ýSäÆðF‰¼L¡SïÔF*¨/‰ÀñzrÛæœraíU€_k6TuŠ:ÞZ!©À»=Ý>bâÂ, q&ð¥`z¿ø«oÖäé®?ß ˆÀE…¦‚ÕÏo|ÖÆ_:b€éwù—ÏŒmš¾Ò ×è3‚N=RDOôot®ãТÃ;gÇoÍb·Ž×må`ÕÙWñ PEjg·mæGëÜš= ”ó^üróýV/Úþ±%Èd÷›¡ÒÖ§¶tîp ¿¯&~Œ‰˜"ù²{WLLe~Å)k‹_»Þ8£qñ°šøØS_ŸgQÃl×HeA©0«5ÊÕúSŸ«)æ†SX÷XwSÄuHô…!dó}¢æ“0×8ûŸm›(Z˜Î–X2 Òáƒ"ż.”KºeúØôßåD“êæš"ŒùEîÑÔóÜ$éBòßÄ>ðd±¤²“MÝÖxj KI(¤°4¼»éZ?îÃM“eæÔ\Ñw;‘W„GÍÛ· jÀò'ÿß’N’Ùù˜xˆŒ.-D“zEÎ[Øž˜°^ã‰xoXR.HCŽLX<Í,‚|U„*ýò6:%H7­3¼qgÛ%ÅòÐi¤6ªÙšCÜsí! Oyu¡é{ºo‡Nõ¡qÂ5¸ÝÍ‚ŸIs©|%ê©1Gj¾nIÆîbøL8I0²šÉF?IOŽ&¥[Bl‡'Y¾³¢o"¸éÇr¿|µÑ‡ ±h½³ó™ÿ¥V~gÈCxMÃGƒ*&‚a0M¨ŒTüÝ+90 !ÛF}ÆðH Æ:ù7:ƒýÃJ¸É„&ŠjÒûtçRsBdÇУ¥G¿7<(ÚÞ_“ ¼¸ÞA…+÷.üí×éW^«Ç輨§‰öá4ô‹Úläw–Þ¦€Hç­û JãPˆÐøò¼†8ç›2; ’e¦tiKÍêŠYîCË8õ›pujÆ*5~`ƒ‡ôû™*È–À„EÐÕ&%`´´®]b`öÄóù ¦”é¶zy†”‹ö±®µðLmÁŽúRNÝ^ʹb<ÛÝÚeä‹)9»Xô!=\Mz¯× Å h¨Ô¾¹¤Y6 $§k–Ü–„ª-ThxéqðŽ@ÛuÝBþN5¥p¿Çø‰•ý‰SöHc¾ÿ­â¬_Û@]U¥“Õ2Ü$—~Qÿz¹ì/Ò Jt&Œb“¥ˆã þékßBfÆè~!l½ZÂÐI_ê†JtA&7§þíR·Y§†]×>Ô…u²0C‡( hŸ ]LJë*²q‘èþ§%(Í Ûû_u*"ܺ%7Y~E7KÝFÛݽY~_*`Œ4žSeøÔz4˜y;üZª3Ôž§ôS@p=d­ÔŒ=ÁÓƒˆ5WÊ+èfŸÑZ#+‰f„¢”ØÔ4Û˜áåÖ½Só!¤ ÈGy(öHˆ—Ø)÷Ã1Ý3\Ó— ƦË'îˆî b£W ¹Æn‹fŸÞÅ+¹†ÓvN”a`d6‚€¡í´ª~0o”È\/à|õo!Øì_C°5ò[úæœ<çdÂ7®Ã†šØÃø&Ô!PoɃD­IFP®ªŠÕìEò?™¸pEãÉÆîl‚¬2F`s‹À†ñÙDDãHª ã¢iáŸ<õ’ØžxÆF]{I¤"3Ç¿çi”Ê¿A¢ãðoÈxíÈ'.¥©—óˆQÝÌÅŒöæ £²Q˜PÇDü¨(¼ç³'IôqZ¤ü=$®à¿´q1†›¸¤à¿>NöEˆ-Î3D‰Ç§ÑIÜO½çû¤‘ýbÎB%¸šŒƒ|žEiœ3Êœr^ò8uNþÕ¨³J3-J0Nš—Pw”ù!Éä‡<’Àöø|¹“ziàuÆ ç\Ûȧ|)E±¬r Æûh\—`‘r>FT$2Æ™ç×cËãñ™¥CÉ3Ç©¾EåòQšä\8Ÿ¦1gʧY$1nÁGãjò‡$wòC:N8ÈBÊ f¹óöƒõ³ÜËVÍÆÅˆ$–ïR êgAvñø\A~ЇÏã¤àóŒ¯ËG©Çÿø/,ðŸ¤ÿsú?¹ó¦y!NªÊâÛõ-A5XÒp‰áŠÖBeñ 6ÑX€$nnžZf&¤èfö x<ã’.÷3c³c”IøŒO@¬õñòαj7ÕæÉ×ÏlS„·ûŒ*¨ Ál~ŸºJL"Bc#]»‹@Ò˜]øcÓ® ‡åàRÌ»Öìà6E,&"ØüdU9DL*¬Ëëì0|Wl“<ü—ƒ¹c*E+¼ddDÍ| /¼>û¤‘ÍW†] ãâ °äÃK‘ý5/ÅE}7ò”Ë‹ŽVëu„ÉÞñÝ^ÌÄúŽÞ%^¾¥µ…°0Œ-Æ8“õ›*¡/µ¤‘·ŒkÛõUHvR$‰q&Í­ï¥ °Iª×aLŸê€àB²jeQ9 „ÚE5A3Œ5û\Ñ Ë¥8zžTÝLl & Ãujë3ÃúÅö)¼aùò˜¾È¸‡·,~‰»0äåÎYýÀeÌõgö3>"¯3aLgùœ17M „­Ô3¸Eƽ‡½4>Ïb?'§Ä ÊC„«kZÖ‚Ñì DÀ 2e4ç³…âDäãÑæ¬už³ôa¿¢øÌ9ÏË_ã”& ¸…y¬LgE–ûø]`­°ó2 I8ÈŒ ë—‘ˆÝ0ßpûx“›“öO^þ:ÝY¡•®}›–j`ac“¿™=/5ø-)ZŽdÀ’öNºâšúÍ4”•‹9Ÿ«ò’}8«è7íš²•ˆÿ%)0; cÉ´GËBC-‚ê– Kw;§§¥Hbà]„‚˜f"þÌØ¦õ^^g¦†Æ±:E&z¥‘µ|fµ  Ó´ûõZƒ8¹äÀÉeK7¼š_•tÀIjŒš=MVžÃ=+W¨láš!¬·ŒaW;Uõ ¿mCGæåÉ?rfø½¥;À¥Œ: "«¶V g‚@AÁœá¢ÜYW‰J_û†ÉY÷‹¨ü%>½SóÖ 2M½/µ‡k°‹™„©íÉ,.U¢ÌËW Y!<÷ÐÝ5m‡­âÔ[îE0^ƒkò'zcÎ q9ü¹ƒã‘.YÔbý*Oî]ט0PÁƒú€ ëö”Ãâ´ùâ$î‹Üncz“Ée …Û±Æ{;ãkÝ‘ƒJhéòUÆö«êš¹'‡þªÜ¡H‰°ûáðY¨dPx—²=ÌÏŒ„㈑ïb…ðº5Rùµœ Úÿ楊(¼õK“É…7Ÿ õCÆãýð¯5öi°A«Ú!] .ÁÂ0H3ï*™ ýRÕGQ¹³~ŽÛf[PÔ® ´f>WºO¦¸?Ì`2…”«fn(™ºÉàÂCH6J'RŸ#‹ÚÑMPáƒ+‰‹W;Kà:ädâˆXÊ’Ä3~ˆ†AE¦ \‰ºÝØì¢—Y² -ú/Šï°”ŽàH–"¥è#¶Šð¡PÏóQY] \!F ³Ä\)“Þmqk×üÃC”Y¾XpÀk=|˜.a±/xdžŠÀÖÊŒ¶€°+SçÜ΄~ÉQnît4ÒyárÇ:’Éí1âBG?óƒX¸iy÷@Ÿ,¨F7”;¯´þf¢÷¯æwg«¶ý¸Ghåõýï:ω¼f£8.<®%uîQ5± ¼î _>à–à A>Aÿxâ•§?êÔ¯—v…”ÿmhN))ÐÃò–nM 71ÊXh¤÷f'N6â$öÙ5“·rp¢HX#¢_þX-Sª•¥ ¡ß†{» ¤C©Ø EbÏV²¼õÚ¨÷ M';ŠùÿéòÂÉJ¹š:a°NTdI¯4šj¸qö諉qœåðsçàk›¹â‚éòEj@0’@êgúÂÃùJR ;Я•D®‹ÒfV!éZAYÛCäÀ9ÁŽaèû°¼ÔiäZ£X­Èç[_*Éc”V|¦pdïÌ©åKx9R:–®'-ZA‘ë°‰e<^ÑÝ»;âx­™ Üj‰°¾Ð\¨µbªË;¢",¡–/–‰T$á©XÊÞ,Q’0]¡éŬe@w©Ì·XÇ$ :Ȇ"³:_*ÚäµfA?<|[ŽWeÈ_WS5 G˜9¬]Óè\ IX ®OwƒU^¬±§cQ{«)m›9)s1~s÷~/Vu^àÞ ÅúçÝü}û„Å žœ†­Úed5-aÚ G«)£Ù÷·2…YÀ8W>×b´2 gå¼~m<ó°_;Ýò^ÅPQhù+òžÄ%p‰N^tÆkA"EôPM´vq‘ÛfgIÿ4®¦Äjls-¿4.ôŸò¹Vªémë‘€“Šê•صj›{æZ¯1Bâ²ÚôÏ 3 È`'ì°f‡Ê˜¡B¸Yz¬|r‰jþä1«’ægÊS5 ˆ‰úwòÝ5º¿ô(Œvë-Î3 ¾çt)rf—ú“gsð2Ûø·šImñ€Ÿ>–7®ü𸒠—®[¹ŸäA¥¼sDqè…è¶|º­Ð>ìþF]yúHxï:â û,‡Ñ–7×ÕCr½<ÎA\ªv‘Ì,¥N‡u`´纗Ñe R”XхÕøp ZWÞÚÇ¿ýíiU?V‰’ð~söo‰jâÉ¢—QºË* ˆñCt¥9Q).äòÌ$²*‘¦|.—C•eÍw.5°I˜•ë‡t’'‹sOޏ“sS °è ­¹V‰&cÄr|ŸŠÖ¼†áÓ,ÇØ—xñq=𫸉DþJm;Ú¼+‡M=©}.Ç_*µ8ÑQ¬¿2žÍÍúµr‘¤RÙ¤8¹)¡%"¸8Ñç¼ææ dîíŠîf/SÂMT§éPŠ> ñ>@l£Ð;öÝ•‡å‹ç,´!ÞkÅ'Rï›§ÕTö–"ãÌÇñý Tc|desX¼iT‚¥’íç#œžEfß~æ§7([£2Ä÷*­™$‚ª‹Å£jæv‹Åÿˉ%V¸eqWd²a¨?¸N|Õ÷ÀçC¾¹e+$ 8²¦€Û1²Ü¯¿iŸî ið—®zy±Ì‹U‰¨Ô ÉTÕ´;)›Çž¶“I“J)ñ›=‚ñÉ‹_Õ80–ºM–Õw+‰@¬.©¦²5Ò¿9,hð´×ðE pRc£Ö1X•FâþÒ6Wÿ¹xOãüÒ³m,šÕª}‚ÚSã:c듪ôî$–óø!ÏÏ·oúˤ!m=¢YˆåÇ29õðDãO$Ò·ÇìŒu²I¬ÔV¢ç}”v=Ó`x¦1:œøj*šÃZQéî)íŠôlÑ8‡T’N=BU:Bµ íÒNÏ*Î$sžè?!1UÑ”Í9ø;j†Ó„<ŒG3mQ/Uf‘-³Pi" ÷(Š’•rÙDN¸`U`PÆR²X"qL%V ˨[7Ãà¯ÀrB5¦Î$ÝJ§Ãך¸ü¸j±ñ'8ÆçtgÒàÙ¯egñµÍÁ›  f†e¸‡DV5Cÿú‚¾l¦îgd§N…óhqCÚ±>Ï!¹ËÙjÊglýûáâl‡°–.1 —Bø€má/šö}¤³aAd©² ¬µƒ†ì¹ê2ÂHI5Ui‹ØJ[\ß‹?*-Xzä‹e²ü¤¹°ü^j†2p™VK’ˆïÔ´nܵüIço¯Û™Š+Év'ã9ÞeN·%¾ŠJa°¥z…Â{Ûa ËÉg¨æ84gK»MÎÁôGÉ×6½T*âZWZÛ’68˜Ðþ…ÏJÁ Z`Ñ ¯1¬â-`ƒJ™H¦žw×(:¯Ðt74®‰Pñ-ÀöH1 ǤºTvSAW0Y‹²08[œ”USŽos•’9£àwuV‘_ýòŒ“jU,»K¤ݯ¶ÜBÈ}÷Qq!µºø¼Î3(8EX€f ®f©áþÿN¿;_”:Gƒ*®ök5Aí×oPlj‡Ã„Lúë¬Þ‡ä%ÜøŒ(8>µZNðX]~Y"œ¸]³3$œ‰PìxÅ6W"‹Ù?¤xðеzoésuÜ¢a]ˆ8ÏȺ‚$ù¬cé«J1ÆöHu¨{Ó!бMgV„ð‚zíÈ!Vª©‚v¨¯Z1€l¾K¶ êÊ´ªZµgOKlFžuMT«¸B§»¥¹µeŽh4ïUùý†¸æÌ@êEH²ˆ•äg1/Lr1›yýÑÛ6ì‚Èo[:§?{u÷XþyªØ<²*…C´±ª#9Âz£êfµc£±Î)ÝŠ¬1[€ì;2°=p ’ÈR]f>Ñ QÀV˜¶ÉöŠª ×½»=íÈmQ\–g"[­Q Éz­íþ«²¬>, ¬*›‹î¸ø`J[éä6; f¼m5?|cá/O…W¤‡w¶‘mÄÎXè^ ®FYù'Q¤ÜÅ·•½ùŽå_r=ͱžwÚz|¸2©–bè`}õFA-4Ãß(êC,º‘}còŸ¨‘aÄþèjÉÚáßöÕÐ_|싲B}´Ö|ÖéBWu——%ré¸ê¬¬ay#ª9…ï· ›+êOž —dK²N¿#ÜÈâu5OÓJQ^ e•¼µ¼¶\“¦èœáŠ,Øbè§{uu¯1Ãõë8úŽ(ë®^»Œ´þ]¹bä‡ðw„Ò'k²cYx_A,Ø;>¶•ø°…Øm>T€C[͆±GC»& Ú<&4DT±áëH]Íd¥»ñ5!ëœy~‰™Uˆ—˜ê Ñ9Ùc¬Ï“¼aÙZ^Þ £±ê-ú ™UœrÕ®jÜbÜÍ]Ù¡¦ò«_ª© 7a¦°GñØcIðàs[iiÒÏkô—¢jäÏ,žUZÊíÉsnÓ³•2í/T3Ù8aÚ4ëkÿÉ-ŠÜ¿r‹ì$SvB–¸^Az¿Ú¼’iX9_1úÊJ`ÊöôëÚo¼Ãö¬ÏËïüñó;±ªÿx™¨(H& ;ox%EÑ?—•x‘{V"—‘N%)ÿCAÊ4D$Òd™°UŠ — µ(-¼pˆò(€óoL‹(ž˜îæâ€B¾‘í¦K«1Àª ”菱ý½:?F¥Ù­ñÀº6À!ZMx²¸I[ß³a…Iµ˜>]©¦ â †"ØÑ9¸]¡°KýáÃqİc‹Ñ[«;\«Ì®ÕòU²É‹²Êß>6J0µ¯$•¸I¨¨Ô¦·&,ðÅšAÌ+íàÂ1¡t#%µqê ³°`6ŸZ !¾¥N‹„eapú ‘g2æ­hI Îsk½ z(â¨ff:ÃÁ­ a`÷c N*R@Ö>U×°!·W‡±Þ%e¡—–,©: ¨TI8˜›h18‹vÞAz–g©>iQiVÈ‘Ã$ÑCÜšOZ'*Æ[|G½5Eq¦3Òá-ê²%¯W«aÉb?ƒÂDL’M*m(rNABêõuy¹0”¿ÎaV‹è+ëÞQ‰X¬¼«¹v–åéÕZ«ÍàIä\Heàì}5%|µ(3uùð†x%#Ö:m{y5wùP’¢*NáW‹°ÄbäzD)” "×Ä.”„¶¯r ¥ÑG/æ_°J¬!©\¥É3µ~X· é²Rɘ†¢"°G»¬ýUSÚ(¼d>OBÂÑ7ïõíE1‹U+@^á%·Ë{°¿M{Y1é‚]Ö"C™Ìö¬š³Ak¹a¡ûh(º7åÛóÕ”+á‰{pÄôåþgfšüI]è®!ÒÁÔ”Õ[ÕàØ‘Å(•Ô寮tC ÍR|ñ^ÌØdŰü÷l¨tU´N M¦©&Ťówd#7ÜÓZQX’i8cW®ë‰ˆÊ’°y²Ò8¿+mùçzß–‡ŸVÚ\ûõM55ûèÓë¯Ê/?̆¾÷®Òœ2ÄÛr–öF¾u·àù·î ¡9 b4‹ ¾o¦HôáÁ‹òWkÁ.¬–âfæ›øî1J¹a“Š«}U¤gÐûHLî–äLgœééoý¥n¯‘ƒ‘˜«]"gküú<=_ŠhÇ.GûÏwûÛsgyØm¢ [6;ØxYùñœ¹7,Kœ~˜7îÀ|–^ W:âýÒñÞUI8νVŒ§2•“'‰êÈ&‡TïÝÌåíAsD)VX!3gf›L[d¸èë>h)D¸,ÄG’Ÿg÷‹Õ¿{±=ºO»Üx‡ê E÷‚.Å22¶Ê½´µøöpj‰·¿ìš oìCÚWoù&º×ëèªíhÌË”©`Q®ì7ˆ9¢VG!ú2Žf?»ÏeúH‰.@´%ä&ûz—3@½üÄ ù°ˆLÜ]ˆ+åšœ G«%‹IjÖú,ä£ùðÇ´ô¡…H¿(¥ƒv[*î¼Uü膓 wf"W“B¦Ï«DŒ"{2 meU¬¥ Ïg²Gƹü«“:ïÕ”ß5ï×dù»­Œû°¨¦Œ³|8¯åOIuŠfá¥ÃQ­OE¦á3y3Yoùò¬ùW(D‡bº£ªÛÖL_a_E©QÚZÏFxÕ%v1­’AÓ5 )ìѺxžaæY×´2 ¿·m’La¾àY èm±xI¶}l|7Wíç¦`þ"§+z^q1evÉ!µžJQ cï#Öz'‚^2ÍŸ—ÖãBG@R¾ÖVçð§Ë.ËF\}¤è8¯”žüã§ÙAßdë“|0|ÜœW¡›Ę̀'ˆÆ°åŽë”„–öÕÄ]RvÄZW›®——µµé¦ØÈ˵3 '"IøÔ‘ì±÷R˜Ç‹¬þ£Ûi³ºít~kÉ9qÂo©­ÎB$ “ÂŒz¸VÚ§±’ᘉۣüP-î`Àøæ//A¯mò85¢îÝÃõóê¶ð¶ª’?y»ý|„çð–BˆR]òD·ÖÁ6u,bÎQ{€)1Xœôdùä˜iš“g»‡Ð¯•x‡®ÒØÞ£@“¨Â­Ü,•62TSäcˆò¨Y×D/øOQMumºæ*m?n”Ù$Ýß5O‰˜Ó×ró„ø¾¬k˼B.A)â„Â:”«:7ªÖá‹0îPöZR@50IV?WëëÕJê0šE°£Ó|Éþ?°—àÁ_¤0ÊKBc2ߊ¨p/å²±âNaJ_?I©-—ßȨ/E¨PþQÓ£oa#Ym”•ðbµøJ/(úò6ÊŠ’†ÑÏB”amºã±…d\Ö#Ï-þ›(P°xM[’¥dN'Ga¼û»ýøÚÓuZÕ@råiÀ‚—A €)‰Bíè5²êN£òVôŠþœš6,˜nL+g¤úK›Í° ÃøÄKŠâ¸ü¼i@Î59žãGjE±¼ASì‚Ñ„íjꬶ<+cá"';…˜Ì©~W=þDZ‚¡Å Æ÷²Z’ÕýV¶a–ìÐÓ•·.Ì{ª/É|‘FÄ»pOž2­úîgÝ4Mý•?oeÉ7-#)À_%1nˆ¬LÐûM -#qL¸ç‚DJgÞPÍoÝ©¬ dPˆËéBÔà)H«BEÜQ~VÔÃîõJh`…Ò,HZr0$ZU”½”/Âs –FˆPب4Á!÷­š« 6Í©¿åçóì‹ ±ïtuô³¼WmÓ3ÝåäÐñf_¹ÀßåŠ ª˜“0Ú•iµžY Û´T?;áËï÷ÅÊî‘ìî5bÕÆGysP¨|JÊ-¤¼_¼¨´êB©j½ùbË?eaš·üôÆÖŸ’EŒ¢Å+™A~…´uR³©li -~èAæNU_KˆuÃíJú‚²±‡]‡Åà1ëÌ «a¥³])ª®ŽO~d‡{†¾ ª•Üyé•X™úÇ÷|‰Ï¼úÇšÛ±´öD©"ËnL'"³Ý‹µ ¨ò×Â;“š¿î˜²Éº›|£Oüô½<ˆ)/eà ²Í ])žlqàÜùwTTƒî"Xn¬ˆÜ•'>|åK­i^yL)ñMQS¯Ð¡çTe/Y)mùé.çõ®È ™€¦ÒvŒ¥XäÞæ‰è îN!ÐUZE…Ä/â™è Æ¾tζc ÅÅ*Ääñzr³™ª˜#àÅPZ¿@×úgÙÊÎib•=ÚÓ¢>ÃçòFTILjˆÿÆ£øþSößff[sõÆbû7ºVÔ.WDvúb±Ö?.ñ`P#.?©IÎpu½}SÅ…X^¥Xù¿¹~vAÛB4M‡NI–¶üU”"§+Ôr’­› 47b½ qâ/ ÖÐ%ȃ8dò¿ŠY&©¸~LI5hÔ ë’,œˆHôB[:”b<(äAß…Ì\R¾ÃKj¹*,Uq’ÅVÍX¯ç¥Q€U'ñìáR,°ÑÂ4Ámj}Èõ:]¼Å¼|)·>“¶(Wåe™Ã@¤0Ýfί¶GQ¹ÐRÙf¹úY=ºyÒÂ[îÔ zûÿM¾.–»s°ÀÇŸ¶ÕAÂÃÅÃhé8 ç[ѬB«nL—f5VƒÈÜ‹2íÍ$¸/¶‘8¨LXzZ^ú¡^ª¼ùÌªÏ ÙÏ{8eÙ9š‹ËÅ#üû”­ÙɈ%÷Ô çqÔô±.ÏÏ—·ÏÓÐ’TÇ£F?Íî-R9ð‚ŠA[”âX\.o“¯{j¿Î)7ðããjûZkÖjK2¹e}¿Z²ä B ~O¨4¹xE¶’tˆäVÒŠ;u „øoFCò¯Œ©¢lª»xST;‘Æ}N<2Þb…ɨ•ÞR}µl¾í9'kÔ)§Ó¬òS※ˆãÂè }+¢Ôˆ>‰¤Ò…¡v>“ú%Rz#*2V)ñì0‘„„Ô‡ˆ$²DŠN¸4Ö¢¬ˆâã"“ëyé‹‘$ZÒ¢ZDîäFy"Å8òLÆëŸ1Z¯ü7‹…€ÅÒG#f“È»HþûhD9+¡D‰c%’(IØG#JÓ Zb©Ø’Å|Þñ_¹N.4(/"~/d¾Çr½q4_3N©Ü’þž8ÏÂ2I³ŸÊÍxVdIä÷q^"Vf ¬’„8O¤" ù!㿬ˆ’Fp¤ñ8Qü7ç}Ò4e…”4Ëäï™ö iÄñ…—¿1«d.Îäß‚Ïó"ÿæ¬ü’i’,Š9ŸYqÙ³,æüd…gM•¬ÈX‰&÷)‰/ù¸¸oG©T‚‘J7yêø~yš°"M<×s|]© S¬­œK þ+FÂø|ø<øˆûeüZ`™HŠ»„¨àº‡Øq~ÇÙã{…$‹¤ÂŒTÆ ©TO Zy'd2¡ðü{á"î§b|Lü}ü3«¶hЂÇûà:…xŠLöa‘ÜÝEó}ŠqKå ñ€°`Š‹‚tSoÉÖ÷œ|”Ä,ƒr4R¥Åå.–24ã¶”âTÌxÒ¤œ_EÊÙŒ‡ŽUZ|á´úŒO;UÚÂ% ZfÈ$$^N×øƒð¡Æ+?2 I$'Òcår9úz–“D îŒgCcü!׿$Rîg\ç(±T"ùBºÖ-Ó“^ªØ¤Në3¥®Hù<ã©‘Ái«¼#s8¾”×Ió<È·ÆÝ§?$”pãú^iÐJ@™ó,á„z=™“䈌wòu6ýAvß\žp7ZÜ'.dZ²$Óoi(Le$·O›–ò)ô/AŽË(.3-ÜãsíØe²‚¨±$¥|Ƶ•*?I®å¬’i•‡µøWîY®:kœ½ÿGk!láx  ‘é›Ê‚hè]5À€CPRÛ}ýÐA%½6ÊéjŠ0F‰Wö´ÅY±ºæÈ{¸ï±ò÷Äòß{„‘å–çÎc5ÇÕøAñãj)¦ù Jï`‘·\™ñ}x‡Ü…VùÀ–¾@¶nÐ1ÐÒCò%O}4³0µJŒaOXê7|;FLiRÝìÓ~•ž§‚aFg&~ÓèÖœ˜P€T¬E¡¨@§6,%ƒ‡aú?ñ*`Ñ1_ù€DGýµ†' J&/²ÿ«ú r¿:Ë`‡M"Á*3»YÚø\­ Îïòãçbâ7¡\?[MEÞ,Ò%¥‰žVRå„8wSMù8m|X‡uFbþÑ ¯dx #¥1·Êl¢<êPiÙÜŸkÜd÷à]jÍL7êoöX˜õµ›Éôܵi½e_f`*+÷½RÇ3'‘ÙêOè½VÜ…ÁÇ•œ Œ5RÞê~eµ—áV;’V¾A¥ØíjÊÌá+’ú­ù•¬ÄÌÿ…1uÐć¡·EÒ@±/3ãYeD˜åö ¡/á>Ô*eÅü±,¹ ŽtÁ|Õè”ÔP”F>GY@ŽÉ%7Çi°cs²Ú<­ËÔË­FZ§~…4Hn¯Xç8êùÔô^Ç0Š:þÚâÃzÿDlÔqä¯N*Þ0Zùì…,Ž”nS‰Ý[H½‘SlíW:SÞ ÚtºHÖ D$F~„ àñ^X9©ŽöRþT,“ ¯q5·dÓRœÍï ÏGpä…¶ ‘I öùuYsê‘¡[S«Ð}z8_€Æ?S엲ǜ&§X’p‘ÎOÅö‘j·º¾$‘`–çlDøJ9¿²UGy\Þ¯[Ù£j"6šŠ:*Úgò…¦]ßǃ²­oÒI™%õô¨£L÷5¶`d–8ŒIÒ <&gTªêž%Ë›e°zQÆì^ûwPŠŒt‹°®œj‘µؘ8­´Øã yåÑöø"Gåêøg5u%²åÍ—H‚ìGUt׫‰0H>󘑳ÊÇpY”ôæX%…[ëÑß9XV;k²©éSÁv$B_ž¦ [TSE;Þ‚ëGÖ‰¯v®ÁèC!xPÔ’¯ÛgL5i)¨7e·ö Ú3w1*N¨]WA’”à¡ËåàæŽL¬‚—ÎÄG€™Q@ú ®õðP/0˜ùZh¾CýØš\Ônê,Š:…ð3°¢(lkÙE]†ÌÓH½5ˆ:+u¿²Ž>±WzƒF_ä̼4‰Ë`ÑÏŽeIïÑá»"'ºsIœeu v6!5 ò+GÙ£á>MJ˜j©Dó¿÷ð>ÒÓÔ3o„ý§JJïb‘¡2ðÛ1‹ò9<§FÝ¡úcXH””½Ê„ñ¥‘¾Ÿ”¯ãb¢¤qužÕ,bWLÍmu_h\¨¯ÐG÷5ÙZºH”"<¯ŽÂ ì»ÖÚïIª<*–I  —ëž‘qJ­I¿6ÉIG Q§ˆ¶^kÜ5LdˆÏÊ~õ6Y·©Z-îÌs9عLæA°¿É0«-¼fØ'ËO2]½.X…dÀáñû×*èxá+ Þ:Ô“v„Ö4ÚÕÛjÉö­ñ4]?ÂgTwß÷!‚ÁöÛ8¹B}Œ fž,>âœîÙ§šž-3ý¹…xÌ‚'§¨¦æB]ºÄÈìEz\gJáG¬‡P_Cô»a<ÏOiBGª|q /LIq^6œ|JžÂØô"jõ¥Ø6Æ,uὑ†ëU¥EËÓçìÞÍ›ã ÙÐÂ7ÆUéOŒoµyíÐBÔ¥µL¾IÓE£¦xHã¢ÕUk°:RRXPpŽÍiÞö×FQþBÊ3V œ¯ÄŠñÑöWÚE Ü; OÆÜ7*ƒœ5ÚeÆÊX-bfìŽ|ðL&‰ïk»L­{E#n…¢.]È­XY¤CýC‘¼Î_h“õO—ö¨AÎzì*ï“Á2öÅõýKdvŒúc+SÖJQŸ9°¼,³#­–=­Ë:v)ZÚ˜-&y¼’ŽtwõÑågpÞ}ù‹þ08×mr½LH†lYÁ›ÖʺNšÁ/_ÝãNüúê@ïì«“:Qü#äHsulÿãœH÷›òŽ]Š*óu|fyRà4vì&] ÷Ž×ÿ;8þ=8Ÿ6ÛõQ¯È”†ƒ=Uoƒûœ?¾OÞ‹dtà ý™sÕTÑÉy”dšoq^¿‡'ñ*ŒÊùȧŒÈ‘ÇBäìŸúrœ{/M?$—Æ›JäNHy3ôÏsH3†8CÈÏJ‘9LŽÔÀUOW³.¯~„Æ>b…¬wCD”=7úR°Ì®9…ç†1EøÓ!5‘Bu ´9bÚ•<ÇWÙT1RçOÑceÈžØÜ™ÇÕÜÎÑ1«¯$tøMUuŠ)`] „Å™ñnƒ%6"˜ä+61î|Í¿—î§g¸9–{õo¹:Ï3„ëœ =Tùö›Å3IUünà}g²þl»²8%Æ™”¤PðÓ£‚ 4(kÙ¨})äÍ¥\¿B3·öý}¥€ÕÙEãg+8­{^ ¢_:}šŽã¿UoXÑ 9ÏVcŸâB†Þ¯ÉžCúv@xÌè—}¢K/;²U?½FOCñJð„yðdþ § 9/m{¢²Æwã6û&r]RZ?Ù˜Bí …’YEË@$)ã°>{5ct “Ï•æVªž-¿–Õs1ÞÛ …yGn<ŽxQ¡%XbL?çCßåÅuÎé¦k¬Ú+A’¤õÅÆaÏpB…ò7ôª_®Ùv‹žŸ¯4ê¡áEX²ßfzc#IC !U¼ž«SˆÏƒ›ž\•­Ú8­ÅA“%Z>=¡Å€Xø߃êè¡gÇOÓ›/І [xqOOÂë²øæjHÛBÇ|ñÑÙ[‹ûJ ´ùRiŸLÌUÌöÊä~HÝoMy“úgð÷œ‘"4œ½E­µQsÌeX8Ù{Ôül.•US)ž:}€yTÕÀ}ëÊ»š°ßú}" k àq¯ß#Y Ï()ä¢ÿ%#yq@dCÏôˆÖâþ>'BH2ÊÞqUj¤n…J´¦,’t[^ÚSi Ø•M5NêӮߔÝ8>Щ¾ÙRÁߦ'ª©¶^¯Bc•,8<~|Vf\X6w•a©M ¼s®bÅV"eÇwI pÓ¬‰öÊ×m¹)cœ\å4•Áª†$)LJ¨ª¹³¹7N]-=ÒØ®¡¯¦út4»eüƒÎ\ª4ÇX¨¯Ëïï*)ÑNAì*ÝÃz¾+J»ŸXdœ•š!É&ÿV*p›ê°>þ[Md¯`Ô!_Þ%WFÒGx:”yƪä–zQ#vt_¢<–ƒÏˆÔ9a«Fd£ô} ¦Ò™=,jšcN @ν¹¾šXÙ»òóI®Ä9ÕˆŠ’ñ—Ôõ ïuÊIâ$‚iÐ>ÅäJ"³c #*0`DIh«a]–„­a±0Œ¥ÜjÔb4Þ’j€ %eò’ 2ÖHºCùå*bJ%í‘OIN]È”qPD[{õ‹™xn¬YÊ,I›ïبè'xÌ€ÁF+øÊeD™&18»WM•h76WG~"ļ·rB,œg¾¡a7dÌX†.SCqôt+[É[•ôÃc¼¿ySieޗЍ|¢ÓDâD)ª?R›óþìãV0l1hÍ^ƒË4xëjbßÐ:Íu«bÉšWÎe‘ÁW7US÷¬Zdó¡æ˜‰—–ýúò¶–JŸ·ÕDjwí=ŠL¶Ñ)*- ­Ði_M•²ŠîEÏÕ\£_"˜…ÂsEÌÒ¦ ¯l¨&‚8g[)£pDÞ PW–ÛE¥ÅUnYœž¶ÏóJ+SœP°JŸ ïƒ"jãÙÍÞH3ưÒ÷Pd§J㤫½Üæ÷÷*­$Á’–¤™ JÞÙüß“™#§p°%Ó³ÍÒwM¥•¯[õÔI×Tê—qjE#¬ÜvÍ–)©¿¶ÿÙÑÝÛÂŒ°RI<H­xÊæØgRšXCëóÒúßû*-Ùñgée9³ä ïª)¹ÑjŒ„âV)S.-GUâæÚÚ£õça…/J…^lƒ¯Å|Ö›vŸWCr÷uhKèK´iÛ=*,èäräæÛj"8ñËSÏÃp.ÖÊ ©yquoi\‘j,ªËÎÓò;$ä:Õn`¼PÆšÓÒ«Ð= Ò8ƒnò~WA&¢Xа?8?pÚ”AWÎ÷è?̪ؽâGê·³ì+wÐíW{ÐD"æ°nŠÂÍRIÐ"fÍùóÕT^–­i§‘²]»áðº6½˜²ÙôAxSP\c$Ü÷W"sÊ/šßÞJÿÒýJ—SæyS<üÚ°Ç^ÍÌ®V¤%`ßÏ/T;ªR‡FoAÅC[¦iü°úNö DFT  gÛêY»‚B¡$—F¯fQCÀF÷B3ì©”´$Sã’ÇzŸTÞÍ–«V¿ÃzM²ÅÀ‰ß–Ý×è›z•Î’Zp‡P¹o_ڙŊ^¨´Þ‰È¡.bºËYUoœ÷KGTŠ{ÙQ]Â_Ž«¾°t¢øúz,ñØfUTfЩ»@„™tr/îAãg™î£„ŸÀ˜lÓó%»ãàÇ^Ø«¡LáwWSÅ*ÂÆî‚>wtwUçÙ‹¸¶êWÄr"ÆvÀvñ{)©ä.’Äôü¸½"£ø{ôpËOxòp/^a°¬TÏ!J™Ù³/ª©,51oWÍž€§HÊÕM¹‹YVúwX9q묚¸ŸrÀ´ DRU>µ³hTÑpå/TZ=¿¼qeJ¸Q—ÖŽKdêeðÉɬ>,ó#e›ü™o=ñi#|ÊMb­\©&Ê›ÏnÌæFÍÍËo½:QMiY®5,£Aƒ­ÖnÉ"ZA÷ ð“ÏÔ>àß©efLªüÎËm•>&D[*<Üѳ´¨M‰&XG\yPú//Úˆ†”â²<‡uÆ( Ö§újƒLÉ=éõ•bÿ—X}(ävt»læZYÚwdÔ7–òâÀ;+öçe™sÅ´©'\yhö!Ù†²”{7ÖpJ2“1g¸ºVCØ‹ˇÅÁä#µ]’©ÊbwD‘:÷ Þ…¥„' “çÕ¼§Mq–eÜ•Óó‹wéÖ §zÀüSKÀPòËR, ¦õ&åÉWÿ§¶l ²Cèîb˜ŸÞ5wˆ€ì•EìU$²HJ˜¡úÝ9úÿI½ˆ£ÿêÅ>œ…Û«•¦|âfýAô®Ãü³®~{Æcw®’ÊT9ÝãÍ =$Ñ‹"T}Œ7Cu³v¹oæ[DB·ˆI·ˆc£[$øDÒpCÂ<á(öL°B³@œ0‡6óÀ ôÌGÚê!•D^¤ÚK¾uJ§È3ýÁÒˆMéβ IÌÿÊ™H-·ÈþŠJ&c¬„ÅÎzÉŒ6yÊü¨¿—m€«©-C¤˜Ÿ¡R¤‚&ªÜ—ó»U&‡xâ­k4Ì.ÔœWæñ¨‹zNMv'&)ê™nFH{^®ŸáÒÆ«ç‹²—Δ¢WI-?ëe¢ã‰—¡xPD„œíCò¢vU _*˜ÄŽØ~½Nm(٦팼øüˆI,•­&®Ì+ª)abˆ÷ ¨öó+“}P˜»µG·Õ^ƒÆ`­"•®½JÞÁŒU_‚Ò€ö`2NL˜<¥çª)ù’ ã]s¾˜ôך\zõEvùíeÄæ¸) cJŒÉ©­LÑ9Í?¢çG •!Ã@6ÅLšÄ}x¹[X Úl>‘´·èóÑ4:¤%ëF—Ùÿ~ÃÌ7¨åhuVŒÞr".аŸ,GHâ–#ܘ׆…È 3ìuh.ÕzpOÄ[>uìí£0,èÐŽ€ƒù£©Ü¯˜tØê!ù‰Vn²Ë]N/Ìá¶&KËìú¾J›Iý••´Nç°c»ˆÆÝ%"pw¾úôY/—_FÔÉb±=¿£+„Çn Û3ÄµÌØ¢÷qGW¨‰õ~äZÁR¦úĶ{ÖtLnq¡bÝÔ¬’tUSj˜UKÆxË0ì§×§tL§»‡æÚ³ÚÌ^ï¬È§&-e׈¡,1T°ÄcÞìF·` QÔÒK¬¢ñ, tI®#»gï]5)Ý×wô‘,чâ„àÔ1‘Ì;½Ë`ܵ…Æ`(Qâêàö<ƒÍôhßļ­50N¸˜aG|ÖõfTž¾¥qwBŽ{صG øYfa|»f³VM¥¬™Z–Ì#}qà°K$*%fñ§ù0º§,ÆfØ÷aŽÛ2%l0G[?û¦aˆþúì¹2ÿß›çúDþÀ*MýO½€9X«vöq:u§×å¼h"ûwó~C;ßš $¹¿Óµ»÷"`¦P~÷àè¢ÛcàÄMÙJf¶ÃüŠ-†¢ßÎØ‚G¬Ežò;ÀÁ–‰g `ÁÕ7+ÍÃz)xN3,î|µíwns~tË VêÑvPtJϯˆv ­8Àü$¹fXÅ+ùÁ³ª_¦±!›a­@Vš 5š+ÓmG+îÂIÄÕúaþ3YÚ].E‘ž-«)IJ.’+0!rØD˜Jê˜ÍJ b¶ߣ¤pÓ\¶OçÅÅFUÛWDû çuûp×ÀMY¤ºc£èD¥…>i‹®Á¤úô5ŽRy –nø–…ïDä…ý•4ç) ÖÍI*H1´_ÒHÃyM¶YM¡|ǶÕå-OÃwSG7LÀ´súã©»ŒmqÉÎVß­£&`™§V[F³¸M¿º”ÝÇÚ:¶¹a¬‰2 ½óÐòñӿج »FƒPY~SÑk*¦Ë´´”½?¶‡È+›°ËÙ‡SN.E†±1°šåêÛÕ„Ö„!Zžª¦&Pœ0ìÉW»ù ä:Ø dcê[tùC@‘ÑÆµlyF䯙Ýl>Òݯ$ØW·¬Ž˜Ýª¦zÞ£±ù°šâ|m| TÄXÍ*n°¦y¤2)9uï0X Þ‹ÊDÙ¤ ÑY¦4sD¸c4í©®Düt}¹#"T,ú\”JE`·XÊ!­‹¿z‰ÚEªw§—Ë'híÅß_è¥Ó'ç–ã®Q¤¼¾¾Ð‡ò~cùøÞÁÃ?®\ßX®âœc‹ù+ûõM6ŽÄyf9($zƒÝµÝØ@„.§þ8|\ÿÎÐϰ¥G‹eó,;wŠ6°Mð)©%=ŒUéŠõõ:>…à k"—"’õ©ŠîÆ@s°SBx“h8šÙcúðG¡ º©ZCxr~ùXÖœ4~&WIÛ58QÝùåÑ쑆»w½}×]85ﲓQ‘H?#àpcºúxÒ¬¢Ô2‚cPpX˜ÍEÕþ-‰ˆp7>m‡öžþBdQg7&@ž¼´`ª¨G8¨Ñ|š­}TUë;£Ák/ê”Adåä°#¦ÕÉm|—È+/·ŸèMCó¼>mc\:ÏM¹ oÂ3¹ËÉ7#ºÀåzxn)¯;‹¤÷uÏt­°ñ›å²š |éÎXÿá É^.˜oFz_ž>òdV̓?»Ü‡Âõ0SF§ë±|4JÿÓK5÷a§iRí÷Í vÌÔ£’BTšªácðyCs‘á·B ¼^ =áU)Jé|L Ó"9Ä~ ŠzdI%àZé•‹Ä¢ öŠø4 µ[F·ôÓpõ8ž >¾wSýk2ìÝ|& OõÅÌøsx·úµÀmÐþÙ@d¿#Wš¤ÞÆ“œWC‡_Ê;ö)@³™ìVÒˆ¨ òjê±Úe./ÿ;<–ýKfòBâˆLF¤G3@À ºRÖ{©‰ÅÆèâ•6LG*l²¡QðVö1¿¢!VŒ×”XA²;?9a¼, Œ—å/ ÿ ¤6b[IÒDâb‘ÔÅÍ|ü_ÙÀÅ” œü?‘-fÍçŠRºe—< «b¨`öYfp€¦‚µbòDËÚAƒ3½º²~ÒÖò)‘ÿi;¼õ •'Œ††·*uAô_ú,?u2{ëÛS ùØ…•)ý“)+q«ZÍoîbŽ1h£Ù†­»÷jÆÃ,Ëw¤Ÿ;õ³ËeÓ*¡˜íæ¡Ô5q5Q)(©-ØÒãóȟךüœ©zŽdJ4žn}œ™gƒi|¹³óêÙƒvNI¾°IiZp:ïuó0f"ôŠÂ;½;=>÷}ÖÅŽóÁwÙ_ä:ˆhpñêþaÚð†2L,påÂKºr—oa¾Ë¥2.Íà*p¬ü„cö†9XHÅR«3Ø¡]Ë ~Š}þ:ÄOÏSY•¨cjÐjÑçôùT@v¬m•É”›ŽiÜc{Ø«”jqã.»¢°6kf⯞+VpµØ a<ÂãßUW‡’™×ºXJ.³êùÄœ@INS%\ç{„'|xô S“9yJg£UeS—z¯È°oÀ¥ƒRçZe »Àví˜[âŸ|¥¶Œd®›¨t‘²^¥† wâ%FôYý"¢ %bbÒP Æ%Ê9UòAîòûÕÜËmˆ©LÂû%)‚Ž"Bïõ†œé[´ä3[ø€¬îŠÔ®Ü|Æ£¸.#T'²ˆÊ×}ö,GýBÜTº¨m·MæÎ®k­xãÜV䃡ÔVåzæ:,&F¡‰^LÓ‡£y@ŸÒŸ2<.¼‡¬ZÅèZùþ79z¬ÁÞ4û~,Dõ…‚¢é·œ=z˜4tx¬hAí!{F|ñˆ8‘}Çb[Çm÷TÃt» ÃMBzÕµ:¨ÒKz¥ü»GÅ¿kêG -&™îúÆŠ_Ã`C0Á¼n)_Z,ª«?ë­UôKž¨TUL$b§¾ùkì“t/7Ü'úÊ~8úÙ* iLOÍé‡ßþXI2º×ý)S3²¡ÆÅx'Fãxûz›GeK‘Œ\5=L N:Ãe‚ä©2sºkêúa„<®Nž™…ÓY¯˜R WHß(^5Ñd· ðÈ–“"ÇU‚dŸ*­ø-,/~E¼•1=ªh6žòr9\ãÖ{¢‚Š„¿˜¢ÿÁ Ñæ®;B ‡ª¼MQÞ`u0ñÝÙ ¢›=T±¾½`[‰qKÖëP±×ZiÔÅSIðnEœ®@ã¶ã€D<@éZ1¨LbFüG®°-Ö+-vŠJês ¡÷HÅÆQ„¼,,犙Œ÷Í]Fâ/‰ ažq~ÞŠ÷UdqÃõc®\MQÇ=²Ñ¹ŠL+Íhêç\Åk y¼k~GËÕo¶?”?èS·+)cÁ¾ÅÎä1;ɱ" Ba-;hü-5FëÆ[ý)ÝdEûOŠÂ‚¬ÄA_0f‚ìCË•¢¿]IEè­|P¯fðÇXK=–ã(®¸WR5œGFÊèmì,ý¢ öãb'·…8€É·µ z)Ì7*‚jŠU#¼[(îè)0¾§Â©ÕC¢B‡¹Æ *æµÍ¡y/3[;Ö£< Ü%ø\Å'´!žÍ`Q Uyº'Mó.*kå‡oÅEÚ—ÄíiúÅ ½÷}U|Éq²$uº8ô”†³ÑÔ“½©G2§D²fÝSs~ûñj!b…Bjf[M”Ú³N(Õf?,v¯$W#´êç±F!/²û–×9³lZ¶A¼Ó¯ß¤Å¿½ŒˆÚmë®'ÏÊ¥&á¥C»×8öÒâ\l€°ò–ü±6¯Ùù, 7,eúY’Š´šr9˜%ª¹¦P¤õÊY<³WÊzó^˜®6[gyª-èFSñ¤|’ˆf– Kõ‚Ìûdì” 3¦ž¢T<Ò‡Ù <’aCqWÇLVTªK/mé‘[|߉;ň•ÿºh¼q̹KŠÝÀu-Œç¥É7ÄZYרøZi¢åeÅNS½Jh0$Àd¼¤…ÛóËŠ[¸S§8æã[rÙ^V@ˆPð^wD5Žy…ZÀN9ê|56i«‰ù ãˆLPÕ}£“Yq²Î© ³l–w×åªmÈ,Cy–5SËrHöUSq(¦<È™îÓÍjbôšç1Å\h! PßCÆNâ>>— x¹CFMuë1\¾ÍWÞY2æÿM÷]s½š¦ð¥Q"r‰¸•¾Êíôè¡d&VýW Þ¯ ü#Qd`¹6ϼ·Åµj¢àïè9kñ0<¨¦^¢u÷î~&K˜›‹Wté2ž¼Wfÿ át‚™ŸÁ Ô_ÂÉp‘Ýå¡™¢‹±ø£†Ñ|INŒ‡õ}xôJQS‡tÞe̶l?±Tß9«Z62èK¨#(ÀJüxùëR¥u«ÑB%ÒL;ìNIv[ŠGYç×mRpÞ(Ñ_ž§JVš ¥{\ZŽb¬Ž%Y‰Âmº ˜Î*9¼WPØÔŠe°lB!ÊmŒC$…0SŠ.ß1 ž½føóçòƒØ•¾qŠ0¼3¢ùPÒGÔí%ÔzÚ~ÕöºÚYØ#}½š× Û W1½ä:o­Hšð< ]²óHŸ’]¹!a4ɾgdô¸1ËÞ(º•ÇTi¡tÑv5·€Ò¢¤‘Ù!§h´æ³jjOOz"‹jòAÓCœü´_‘¯ÉhôC¬-kV¸±ênu$7Õ»ªÂ3ýxH%²ë—ú±.bÿúz§¤e‚HtÎíìAÎu—”¿ôØ;iðKz­+Õ5ˆ&J‡‹T`£JG±Hõ6ë¼s%쑌ñjT_g„Õ}ìBœ¸\,Æ´¦¦²ù2©Æ—|ÿ~—É2 tR{ÓeÑWs»ñV+® mù|ÄÖðË A'kHÀÃAg¥–ýéânïUØùL!þýŽ¿¤Hq¦ZÁg@§Î©c܆uê¯.œX³9ÅœK#Ygš†E:œÓÉVÒlHÊUl.1Á3´õ¡ë/¼Ä5Ñô¬îóõk¶ä²7‚œ[9åÞBÒ} jÚsAVãH¹}—² ‰ãÀZžÈôZ%T“.9¡!½F³Ë½PàÚ÷K&ˆÜ™¯À¶J®¼|l/«­‡³Ri“¿åÏk+j—=ÓaX%(ðÄReQupYi–ÁÛ²¯Y"ß•€`“н¬y~`/w7À"èê³£ ×¾Ó—| ËŒ‡Q,<ðœj û!ý@Ž/„ê>VKÊ>”"´‡ˆ‹F¶jbuŽÅIÄ Ë}9a¸Ÿ_”Gƒ(I§8¢IVc{¿7f㣿ƒw¨Òº›ôƒ,D«÷ð42Ð.Â÷·ÉŽø0ƒµôÉ-\ˆ±Ò9Œ´c)LZÿIHÜ¿ÐÞ‰ÓP«:kF‰4b°Å"Ãûµ±ÉâmáùÇwA­±}hW¤`¨úbûî9‘+}º»™¸P2j@â•Dÿ\ޤmm¤yuâBÆæ×Q`›ÞÔKç̤d™c3çÜIsë<ŽÙÄ9SvÎ3ÇÞ»y&M²óB‡ÄIesW°MyQäÒ„Ø9íãë\ÁZèÞ;ÉÞõ>-¤Ër<î$ùaüP'…4WÎ"ŸK“]WD™µÔý¾¹Ilœ†ÜýϺìÒÆ *EøØÓ<¡a½—MÖÓŒDx:ã)À¤h”¡÷J·*=S…ïd,›P¹ÅYJ%¸Ôî;4÷éJKÄ H ¦ý”¼év~<·Û@!-?nÆ©^ñ–r'w%–’/Vöˆ<¡ó’ÈQ1Ï´¡®’rÞă8‰Í Š]]µL{äyþs R'gÍ¢µÏoåù wªÉ¡f!½‹A>Xî||¯_®ÎŽÌÐË¥•½Sx»Aµ«’@¥5 4#aÿXÎKPkz ²¬,Ô¶ðV²Ç饳“á‹è"#‘ yp ¡9Í·[¥É}‹ÐìX^!fN% ™¯êöžW!Jœ³)Škܓƽ;Ë8½)eXÈH½â6^5ܧ›ú:<ÊÇŸ0àÅê6BxnP'ö ¦=·ÀØÐ|¡b>[MÅ|{fbM`ˆÿ¦¸ xj±nåÁ®3ù‚2©>2³I©Á&s]ØÚTÅÂn]ƒMöïY°²(Gÿš*õ±™V¿?Yø ç!«áêäJhá|÷âÎOy(Ü8!Ü €“ùÕ\¹¡a¸M‹jbŸieë†ÕÆ'®•Êô'dßV5qàC÷ý9X§~ 3õ¼Ò2œóœtž&aƒ=ƽsàá æý펗0E­Þ«#Ë9ÒË ÙáòÎ f4t(=ÀŒ-ßä÷õJð‚zKŸ‰Î-^ã^¾'w¦,ÅóÊ77>ëÚœP¯NVÕå=lœ•"…¾„àë’È©Wš(! Yñ 9‹<^j©ôé/{¼«ò}´¸™US’#Û%¶ó+¶-mYMsuÞoìXPÏÃhÍ“6¸¸ wGHTžÙ”RCUþ‰’Å•& VR[Ìø ¬w—\ÈÇ.åvò¢ [½…s·Xˆ¢cS~û¡bºtÓ¾CÌ”I ¢û²5Øž˜îyìÛÓµÕD¢hÔFsJûv1J1úõ÷׫)’N¤j* &‰~E¦>þ>[S„•²j¢± º&R>ù«º›qÕ¦ÚU(B€½xšC‚j¾¥YLuêbµš 7ª¹Ñ¨ârƒ[· Dµ«LÐjn[Š¢ßž 4±ÂþÆLÖùÂJ»gïbCÖßò1ŠŠ}ÕÄY©ëc …41ÏØ&ualäô©A­ƒü½gÍ^]8½°H‰½ôP0sÖêí!ˆÞ>cY^šÈ½[ˆ¸n¦ ]d©½³¼Yˆßå¬Ia °ØS«¯à¸Ù¶³ùC÷‹q¯ë4‘WÌ/‰]Ó³Û $c}q[Qv‹¿d+ÔìÑ·…™ÞÖ©ê >šÒf‹²SuYH(Ô$¾Z-¯¦X·»ð$É:N“CÈ­á¹]ˆhj[«µÁŒ÷\SLšt¹x)W¶ÍÝ÷Ïoó­# Iíî=WÍ=Æ4¼cêbÒͯOØù!•ï®nêäÆJyî@/bÜ×ÞI9(Í©~üé¶Þmq¡\{ZMõ8X$Ž-rE­—*R25/ü΃[6A?”ë[&Œö!ÖyÓž[Cæ®T(KˆK×Oël0bŽU³–*,§Z›u²Ü5É6ßÔ‰¥æM[æ1ÍÆÜrtjÉE]™¹IäFÇ@ïó¼°þ7^ÒJjJN%GÿàGÂzï›\~…£¤›¢oi}°8×”vø€cH-ÎâŒi‘ã¯,qOÙ7pÜÛ¦ŽÀ㨹/ÊŒÊß ·“Ò/Î>ªáE†âs9XV¡¯èÞgÁІœ€-´D>’‰éÈl$"X¹è2KüÞÃÓ,ÞÃ,)¿–üIL.Óu¡ñ “Û,&SVEQ¦ ‚‡æé 0'²MÞȆ!yÆ…#†2¼>ÇM~E¶t‘•–QrÏN¤O”çbjén„XÊÝØÌ×'PKõÜG}å~ŠAרUªäEÎMÝÕlk{è˜ÞÒÄ*ÑãSˆ_RÔ¤w­z\ÆÂzݳBCNåïg|…}OVõ£F„Âx\@´Ãvî×~Ý:Ü €±x³½Q‘"eîú'ì"Uõ=mN6hg±𥝾áœ`CçÂUS±a:Ý7Ý/Œ„H€tL!n_ùYË­çI³QÍ¥§Sü[ÂÙ-N™Û*—(õ™·DøNUZg-©¦ 6¤ƒÐÙ/y¿?ð è˜qÜIÚawìúd!ÁyæÖzþÄR1[|zæ¢þ¨4æÞà=Ð\g(ÿÔ³ÖÆ& í·òc³ŠN¡Ta­Ôqx[°ý¸ÔÄœX§Ýò‹úG!¹¬piƒl."üÓ Ušlrµ'ФK<¯ƒ?Ê“{^a ^wU´ì y;Ÿí ¾2ž™ƒ¶÷ÕVŽË¿ûu mÇ  ¿wF` È(Aê$_dË —¦Ö_è)·v,4W8 eº¦ÇLjÔP›xQE\ÞÿZI V °bg3•ý]°9½É^aõ&2;®F‘V>/^Sì$wuC‘uh_"½Œ~‡ÎF—ÈÄ åÐQ& ütY¢G@Lb-Na2‡Ú ’ªíNðÎ%mHH¢,'ÓFjãw&› K“RvGÚ¹(ËɔóÎO¯ŠÊ ˆ.ò'ûÕ+-“ç/æ1T[”#ÿcD¡HÃ%Ì(cô•­ Š£4‰´) Uið€}Ifd H‰4La…C«¥rÁ´WpŸÑ-‚‡Cz¯´™ƒ$bÒ0R ¥²ø 1ê¥Û·Kå@,Á±a=âMÌgM×Ë­7…µkJGgòÍQUËEËïçøÑWÀXjX¬ª"NÛÕbõóy Ež¤gøƒ^¹sÒ×^=:r<"Æ[^ÿà€Wȸé×EP‚6ÊœißP†C5ôhxÉFI´fÖLÃ"}8ÐS„+¥"]L¸A¬¹<,Èÿ­vWŸÊ\°rï?¬ÿMZÃíŒdKMrvqòeµ½¬Èæ­DÊ~ÄÆqß§!›ßÄb»þ›Ô/,@öZO“q!£ï'ÜŽùb€´±Ø[LOs]V›†&ÒŸÊþ,@‹O‡<Óè×Ü«”a…¥H4P¤bÿúzy¢Ò> Ñ×Ëzð qÐ5q(ýªbGœÙ ¬~uJ£Z$ä¸ë³¤eë”NLÒf¸ {…Éω*É.¥ûáS/š=ËT¶êT-“N×*Ç |P¶Gw“›<œ‹•÷Q‡éʘa?;”½£ꎯï]þ:jŽ£4ˆ2‘ëÁË:ðËíX?|­*xB¿‡½Yðwãý4Û¿gÙ‹$ ­ëÌÀƘ· ˆ²õ.ød‘ΖqëÎ0rSbN_—ঀp«3Þ§}¥)K™Jae}„f¿!ÿ³š(P5úƒIÖØiѤ\àå¦ 5kêsâ·Ê™£‰Ù¢IjoÅÆ‰,:WˆlÂÛ»°6MK«¹«´2¶ÈMB«4;§Öµd•-¼*ZÚ¶™øT¼yA¡H÷î(7ûÃ[•&Yí¼WÃÝUS7Ï^vŠ ŠÎñºXKnái¬,.ÇëÜÖOFgˆ9YžÆ¢©åß’Æã—y.S•Cº—úFŒ”ßd›^ŠÛQ§»i¾TJ¬KuéÕUjv±öô ®£°ysšyžÞUSC9¦ð Qkô:árt~è'w£ Ã*|¤D£$ é˜#êö(+ voÿBÔdœ•íåíCæy4rí)^ŸçWa^ ”08êtÌøZä¦Ój?’Ái`¾£Ø’Ga¬pÃM5%g²€§pÐGÈ™öŠéÓèk«‰ÜÁWëMÆ“©^ëÆCdÚ²J Ùx’Ú|-_ë¸"4{e&Sï¨.²žå”º}¶¹‰™-ooܱéwêHïçÕàødo3Ü~LoÃt†@¬-2qB3nÂp Äã3aÕ”UËše™ø¡REû¡26ÁÆAÏן?žg²‚eå¬F1iöô„¦?G c ‘’•Åk›\|úì5?ºvíÍâÖ+[üT©3LÒ¶<ª [BÜEo:5ZúŽYmDR÷¨íe@ø´Gb9tl(Ë®i¥xkXE4†÷KTº€Ûk!ÏêÔÂS޲§~YkŸì%v»"Èžb,(àT3²Ÿ’3@ømX°ƒÎô! ²?×i-_˜÷I(D¹ÚâLÉèÇ–JŽáƒ•¾¸¹E?úÞÝjÊÌfU9t…,-½ n>2EÉ~W}s›ö(@ûü°©ŒJÑÓ\üTi"K#W²€Ñâ¡KÑA·—áªÈ%g¾j"Ò—d4RÝju LxK )§*‚ERù´–}åK “%pÒBùTBuWÞ8!’Ve+MøjzÚ™#××Ç^èÊ!C¬ek¶LöGÓ–ýËüté \Lã’«êç¥0çœW®Ê•¾n(QÅ2Z½Ì¹­ÌÛ‡ÕàC‹Pf£yléήX1¹¥rQkdÝa[ëõè…×U°óëHU!¸*·x¦îGŸhP÷kÍš¾E­ì›Á§Õ»óë¨#Ù+A9ná-„![ó¶TÉRó(íÈ= æ~âµµyy8V[Ÿ-s Þ¬«#:ØÄä²ÍFQ²&¢ht-V€µ æL”q¥øCN„?×9«G?b¶Ó|G*>îÐååËkëäùvña­¾¤ÅI…Oíã7å(ôLÈA*!5*Kbg Å!Hga2S/ÖĨ–ëÍÅÙ¤=³v„i¿T 2¾ ÷ÅRǃž>Ôºè þ>*–m:g—¥ïRNݯ/VÔÝ£c ~èø)6Q-žÔ:¯Ð,b±/·ü1$@H¦ÀRVªÅK°\t8 ¥uÙå;,+ãGhü¨Ï8:V;oT»EÅ- ªE* Ì8cß¶uâš ÅÚÀ1]êJRðöò‡¬33‚ÉÊu4‡ð:/ô.¬‡ËÜmäÕÁðe¥Íп¦6su- ª•O5¦ôô0;Ð}h¾$j™ì§áˆõO@=Óhd1¥‰l+¶9Ýj®\²©Q‡ük¸Ç¶Üæ€Î'ðNv{ÂLãÓ¡ÂM#Õ(”à0öä³;º¼-†õñØ@xëL øWÆQnŒ£âÿ}»nÏ‘Ú2Ê`Ã1è‹ßK1¦GÑ€"wuÒ=’SÁxús‰tŽœ8 ã1üöùðm©–zCÀ[ €èeP4ŸQÊqH/ëòu ?Â"…ËWQ‚‡É„Ñt»Å{Ÿ&ÜUÔðö"zƒý•þ`¢=ë Õà) X ¯°«‹CyúcOh,ý§ŽXÛEªLÂQìÚ徊=gÃ~Fˆ¾i(Ãk5%„Ðb(ëe<Tâ Òêò‡F`¸ÒíË¥z{!ôæ{ìH?}®ä–Œ˜Z‡ƒ.if^âÇNcS?½œ¸ÐÇ¿/–¢Æ}§Hgë ÂBOp¦_àŒ³1Ô!QX‡~Dû|™ý6sØ6@¾]þ|)Ž¹Êƒ.\“«5Ð÷«Ïqb™lHƒ×£g:G!~ƹøCnp"!Ó(í§Xü{%©¢.?©é¸EwyæµÂlŠÛÇñœRLc1¶\ªó×aèîªwå™­S>ÂLë;á$BqO!Yš‘÷0Únà¹Ñˆ «Œ±9Å•åÕJøõA}ç%n#”o*ê?òb£#‹sÃY–BŽ>¦¦åÚ/Ÿîü•MÅ~¶ï€‚éuºM! 8| ‰-l, m(N1§'a$¹y)\(¶nOr)×—ɆvšuCŸ ³‰ùIyþf5¥Öù¦_fH!m»W•À0óÃG'–bƒ0;5/ÏkL_à¾Õ£„Šà@À3´Jò䫃˭ „°omUs—® ØÛÕ·6­®š{’`ÞÜž¥Q;µN¸ã5–Oµ)Öâ`„Ñöle~·Ñ' šo eŽ{埫)ß+3Ä ´*ÑØR„7k\‹p°¥©˜RÞŸ2 Yö¼QÓѧTÍÛ6ݶè:f¢C:Øã¯|¦Ûü¢ºGOözÁi„í6…Ý÷þ¾sXã5(ØöåZ9Ft ½E¹¿]¶³kX¯Cù\ À§óõê<€~1Lb&&8ºj^À 58HÆRè—U‡X@ñ¨6ŠÕ}M°¥æ "x}^Mù“–QHçoH.Ñ÷:qZ]Ü襉°ÚX F‹¢òðçjŠúš‘I°N.ü(‡®šZU¦$ð“ºÀ|âá¦EýñT£Ï‡jüÉsõº)Þ¿*3IŸö]w³Ü¿VM¬¡Ð!/ÚÒ,†sçaqs&f•rh{ú׬ZWs颓3î اN4䙑ò(í± É7p¶£ä¸Cù@µº„)sè%Ákqñ†Æ;ücÙŸ¥ ÌÎ 0¤±žÆ$À¢wNwkßB.£ Ñ a2)’µWPžÑ¢»‡¢Xˆ(¼•ûyÄQ*GZXßoVSAzŽ /‚%Ù·÷`·¦O*­Y¾ö¨’Wˆ~¼Ö¿WZOÿ³.¹ûpoEi>œ©´ïåÙc<ôXè`Ø1¤é³jWƒº¯ÉMäotËêJ‰œ?d·ôÌIäÁûÎa›_íÌí¹«HP_«´ëãmY$9²Adá$–+hVóG·íÐï“K5¬=l k'oft<«Ä'0Xº4𙱨Xµ9Ñ9xt„ŠêjJÄèÃÕjâë±ÄS]IæŽÙ ¼ïwE†•DÆÚdq%‰P$ Õ\]iÀ’f.újgùºšjqLlÞ¤ñ*ç’Ht-¶±”^åêœù¢SÆ9¶¨õ(ñŒÀq¯ËÏ)?ti5%>ûö­©¿}W%$°#‘pƒyÙtâ1•è›k6àkõ½(‚Suº²JóÛ2QÖë Ð.©a½‚ÜLì·,ôX55ÃÄûá«{LÞß·j"~°Æn¼×s{jõ‹LÛåËÞèùi¦¯~¨¦¨Mîm¿¶H‡·lo5y8]v„[%ª¦ry x-ÂåÉþ?¶Dƽ´‚üóe®p“ÐùUê»4x>#‘¶ýò†D¦¶9PnŽt‡7Ÿ˜S©oTYlÞ†t‡›°U±Ç±RµÆ Zÿæ’*ʺíXÑ~˜# -S_]¬|v §–këÓǚʕeFéYBÝO§›÷u5kÎëÑw‚×ëŠÉLæ00û4g]Ufäê<7S­.v'ja [!:«,Õô÷•Ñ´o.,OʲKœ´©š~ˇ?—–/4t¨ïÀÚ&ƒ9<ŒZ]Q¯j0:´W×\J}!ñª»†ùFË=sù±uÝo ÎHE¨_»ÞÔŠ6ó[-ÆÐ®?Ï;J˜.ÑE‡ì0ƒ9ãPOÊ…“V“ütøÌèD„~yw’9e€³†Ž­š9|½AØr¯â5»e!˜D{9‰+žùËûŒÛß)¾I—êê^ý"vzÐ-¹h·xv:‹¤áy:ñkÑK0¾JV6ªx5‰PÃÝ%³ ޹L=eV˜ˆ.•ØÁ‹-ê_×uY²ß–¿ÔèNHƒ°<=þ!v²ûˆÍOÛü.±’‹o.û£ûwÒµ·u*݇\ì3¹‘mǶÂ8ÁÝø|)­þøÈç¼à§÷ʧA¿À’"Ñ#ÚìRSþvzž ¾uUIJÖȦݕ‡¨áÓ_åõGF3m |ï/«©òI`™à ïÉèõ]Eÿˆ`å,+çt‚d’ö7¤Ÿ hýI›>WùMá†ÀdîËÕA~ÙÖ_[¾“AaPW«Ï¯Í*³è./oµóúé`øÌ—b`75†PEú+¯>Ÿ#&¹]͵óûš‚„Q4 ð™’C{Üx­íßµå`¡qÜtaSäŒN(ÔwÓ­Ÿ×Ð}9£' Ðç)?¼å 9ÉjДÇ1»Ø×쉪*ãx#‘ ¦"èˆ2V NÅL¯3°‰jñh‘¯¥ØŠÌ— %íuZ¥¸U¼|³ ´W¤:0´=êÁ;AÖ \Ô(i!P¡Ú_x³ç¤î»Âö´‡‰¬[GTpÉ{–WÆBãË×w•ÅRp¢V—Nw”˜DÌâã“}¨‹±/•±?E$¼ò~F5üHå¡:$¦Õ˜ïE^‚Rj™¨Oõd ã9‰BÛ}D†dùeEu'ËÆj~4ðgiâ÷Þìáû*í˜}êŸóÁªu¨ÚÃ(6 "6 tÙ5ƒ ¨·*©ûÔ¸O¼Ô_ÑoÖ&nC"Ér]CL,µ¥ÓgÃèÖáÅ]˜zߨÆ1¿"µ/TF®­{TcQdî±X«›²ŸY þ®;Aw³|½ ‹¶©Õðå‹?+!Á‘82è)Å.a+«)Ï#S§ºS›Í5z‹oëéOõ®9“AÉKogͩл‹ùæ´ª'‚ÑâuP,(÷ —›Zж•vI)å¶q[šlñùuŸ‰&“ó°TT`ˆ»bøÐ_"K+½Rª“?ÕÓoÔìkéùéRxT¥;&7 çÇJ qY\s¨©:9—¨ÆÚ¨×Þô³ÐtäDAãŒ/¿Ã…Ú0¬=6c’éHdVãÐVª0¯)5 Ò0ûÔ¼©Øjº—Î1Ü-, BÿìÒ©Y›hNV´ ŸR€üíEKpü+þ”â²›bKHm¤NñQ}g8¢›õaKƒSEl#lË3x–HÁ J¸««4Mû¨¹|¾›0!ئ9Ui?bLÆoƒhe‹À mjpZ…ƒjUÿ†Óe;t8VMɼšDÖð %–L»†q 5pŸ'’Õƒ³?jô1#eBjqå~–Áuò‘®Ro$"¡çíO-ñ†-ZÙ%Z=òŒ”>·GWæà<¢p¦9æÞ%%XdÞÏÃ\¯é ì;/²7»î”ÈÊ5»V&ö–ÉôB¹lo« ˆÐ ùy)Œ ò•Έºžš0Fb%8šSÐaÖ,wÐo8™uÑè–ÀØ©´Za$6TαS`«©ÈܲÜñÑjj«DPÕæ=zPo…ŸQBñ¢ß,väé¬Y¹TÛ­´ Ìç°ºƒÎ7ÒD&jjcjñëÛnýÍ¥ùò½:©†s"…†à&XÙ„}íìÒE×£Ðë쉪8ôØ®~åÍ_Yœz<°ÕÖ鈋qýn½”óÙ ŸÉ‘Êá›ú&ºÆm±/’ceЃmê´R~ß‚œžê{À8új{¿±…9çrh¶'²ãý¹yu¼\Äû˹f*ÿô,x&Þ÷x [€¥ ?žªæF¨5½%é;õ÷ ¼š]Ôí>µݽc§çÓgö!W¯‹(b‚:±­£*^·R€¼œÉã¶_¯ÌÇÛ–ÕÛëâ<4ZɯC n‹ ´Åw–“À%¥ß½LÝ.õVop‰À óDìOv0ļBŠ*JeN‚?®¦ RúQâW޳Æ4)‚Ù ƒÓuïÞKývÿ\@/rƳ˜ª×wÀ…þcf„NLk¦¿M+šñÝŠEl¹¬O5TsfB\M:PwÚ¦zLþâF5Åqr¸¹ û÷búM„lôvÓóƒ²-8õ÷«¹+±—³ÙOŠø£â»2C›òˆrïú™–èC0õªeßrƒY ¤‹CtM^¼ÑóÎ ^µÚ8Vÿob¼ À1‘ïð†BÐâßÝ‹™.•å÷&‚Êþû(:vJŽOÔ±å‡ã'Ûú¥^¹´·ê_³Af¨ær|µÆ$ASv±éÓQãoÎgDéê“kK—9žyű¶Thøm¾t3\œ]Ò,Ä䚃8vù®mâóS6LPK&Qš·ßÿ ¦fØÒ_ ˜/ÅaïD”˜÷ÉÐO£®¤{|yF;p˜ dñ’æie4p¼Ûy0]’fŽ QïyqÔIË÷¿+ÍBúTÛZP€ŸÎÛ+oxÌ×Û³Ýhºc§•|XH¡ž‘›¡Øc“uYÑJ¸•~ÃÝØí?Ë»3§ÊŽÎOv¶çÈ w]¢[ÄÕ QqØ×œØÔóû¿ðûÞË–7Û°£Ï{âßh.?IŽHS]pÓÇ?¡°Ÿ“™ÐžÍ÷¯‚o†:>}wîÿ©~–{Rú ¥ô¥¨ÿ•å ô¥QÊÚa®ð¬E–†È¢,ŠÁð‹#WD,ŽǨ:–$>æï…Ô%K£¼,’gŽEÒ"‡Ëæ©ÏY¥ÌÅ!ç…}Iç5Ÿ¥ŽEÎâ4–Úfé8Jn厼Â4 §¹/ü¿ SoCÿ¿Óû™9h¢maQ=b­J/G‹CÚ^¦«)s²†fW­;H®k–Êg°ØG!äÉ0¨(Ò3Ûå5Ù×f´l)©&( äâÜ ,Ùµ7ª©ž³Î)BG¡n変»'*?î‘ô²Žü(¾ncÁ×|­šR!:µÑxÁÁ©M«j{»šrØZ=ã¨ÓJ¸S»¡QÁK ÃýP·ŒL¤æõ¬¿iElb;œ¶m¿üócv1˜$ŒÜ¼–µ¿œ„Ÿ5ême¥…˃jÂéa[ðn¬»YTSÏ0è–žY¨N 2-‘¾W1t•­Ìªg'çN3 Ë.Í‚•9­©J;G“z0BªÑ%jUD±" v)mx¹Ÿ²¢O+,÷sk›w (ä)ø`Ø”å§ÑÚÈÒsL­&ÿ„CÙA¸º°pþpd®ßU5Iö|¯–}!ôuìµ 6Å*¦Å]'ì^¢%5¸j°=èºx½MÎ]S3»^ôÇUÆc§±æ~ÜêLÛ”A–×ã†Od=LºÒ U¥¥&ÇÝ^¾YQÈ¿—ÙG½Ùt¬jÓ.a¤ÇÊ\lx -ìÃãÛ,Ü`\âÌ ¯ÕÆÝÉÖ´ÑYF4î Ô2!áóø8^+Z`î°°ÒR§¤!Áï ?«nW í…Óýu™b¤®-¿Rg./]2\G1vs`˜g”PÈ«I¹W¾Cm*’g†MsÜØ!8´ü˜R´h­W昻Álöl$ÀTH’͸o°YØ›'‘%l \+_2{§+%ëã¿«mBüGÁ%b®Ì'jÄØ/®KÈK%v‘0CÔ&SC¡cÜèa-G–…ƒÛº·Ú‰|UêC"^_n\S’0t2±»XãJôˆZL{›[%¦H¯E®‰G֔Фù³$‰‰ÝÓu` ±]eIÜå‹­Jê}£‰¥ö)kh$KLζ¤0ÐKàîlÄJ4½Š²¸|µ—JݱÂÒ»±ÿN8kóQt" 4%ÏÒ¦Ú4êdq¸ùŽÌ>ßš¯fQÃBÃ]ìXÓª,©Ór5ânø(®ÁÓÀËE°@x×Tiñü&,_+U¬Õ¯  ãöB±ÞÿR£QìÜàB%Ÿ!áA·YZ¢þ¾€Id_°ix ¨VH3ÂH[XY#Y³y:ƒïõ2na#hÛ(+)Ï@0÷Xú¹¼u^ˆ0{Õ-ŠôÑ›¾+N¢ÄP€vReï~)fT:MbIÊÞ }‰‚åÙyÝ¿}¡äæZ±‹ñ¥€S²Ñ;¼¼šXά|#qs,ư¯×N¢Q}Í0ÕãÆñløËÇÙ–îPÈ^Æ '^¦¦{kvî`Ÿ¶¾ ° áy5Eà¤ñ‘>IßžAÉ×Ȳ‹e½y¾’Bâ-ÌO¦yw2½wôY9¯jÔf^ý(Ž; îÈ8ìòÑ•ÉØ¯E$2 L“Z׉ïÔ ¯SUÜÕt–P”ái5§„çïmWå°°ä8ƒ`ÝìfÐïlv)01Y¤h?Z!uáê²³¬‹2äU&¨Õ­šDÊu.Xˆ¡S¬ƒe|ÕÎ-Ô‚ 3¼ÂÁÓ/­àL}ÖªäwßPýý¥ê¹ô…à¬ø5£±ÅZÛ_/ðÀü¼®Û]ê`°.ööu=l ($Ê~·ÒÁojga¦ª}ju~XqÅc ‹`‹~—Ÿy_ûò‹â¨kÌ8HÐ…ä¬xžîÇ"ÌÂ&’œšüG‡¼QJ¬kD D…É]M9«¥ŽÊz¥ÉC«VHKÉâõ BMiuµgõEjô¤ Ïñ>âI•W5`‰›¬lí‚Ôð¬lNÇv~¥Œá6× ¼¸vIiS hIØ!B†ëa{C<Ð}>}t§RÐ:=KbI¼_e2Y í.s™LOŽy!’¨ñå{cB)œÚ&ÊNa'?ËK!ƒ¼¨”ö‹XYÇaš1Q‹Êù1G ÷Œd®X,c©+†jÖL–4çœcîév±„â0Ì6 ‘™’¿|±¯’2J0)æ*`¾{%y îÙϲڼWM…7YØ6µâqdø“-”ɳOVv_1ݸïn)‹@ìˆ{ýN@ õÍz 1òyWÔ»m¸:O_›#:üÂBë0êk€Œ&›®ütÌLøÍ e'á‰Gïb‡¦Š3àeKb1ȃ³t:{Fî"î2a2Ñçð:KlªÅŠ™Ý¸­“Ï|¥3`äÔ‹ÇO zYÁ’é”Ѷ Ù^kVަ’2Øo·Ó™‡•±R”ô^|‘šê Ì}x²ø,Om^„Ï/q;­}ÕÀ‡k3´V´÷—*/ ±6}ŒìV–‰æEõéŠÇtˆìOZ͹© ìãÄŠ=i±’€Z;ÃÜÜKŽ{h­oëÛâ@wM7€¬?æóÔ[éΈ°éwQwX%‹½i¢ÓÏÄ”`…§{¯›¾½íp±‚¦ºÊfå¶2Ù‰y¿9e“èHHao5Ù}Bu€©ÍtÑf»HEt›ó¯ù^Î&Õ*/„N#˜íüèü¸\ c¸‰Œª½kölò皦Ðe¨Ã¯¦2@>AÙêÖ!u6 wÐÍØd7´WäËØ4¡QÈÞ\m¥Aíï7«©ÐÊ*­«ÉERL^)“}oTZ\ƒ}™H‰Œq€Ejb…íc}e16uw†¢w7mâ°ZªÄ;ΟnÀ"{ޤT+Ú«‡µó&ƒ°Ò…^„DÝt^Q¯$zkö,Žù}½#8i“¡‡n"ÂjÏ=yf¯'^,•Kb­[àpmÃ{õ‹i1>´@:ÈÝ ìÑ;Ò&Ú/O.á×2¿!µ‰¿8… Ø³eÄxSÈþåÛ"4áϹU‰ç¼%„÷rÏô¨ê¤» ÔÀ¸o¤S¤Fš‚꓊@©ÊqîŠU„bumЋZ9M˜ú­ALЍ!ŽfñÐB”Ôåÿ°1ï,ªõsÜŽ½ŒØ—•Âyƒ£÷œ®”6pJŸÒÝ òàü%¶¿%i A{´pÚÂ…©€íðr¶g†ƒt!ÈÝqýU±ÎÄq­Œ [v¨¾ÏÅ®®US©¡ŸT%ì$¤Ðgó¶‡AÐäéTÛ …ÓœnÎx¾"Óç­uJ£ûqØljÆ‘HßJŸØeƇdÞ¿.™¯IÇië´Ž±#ñ¨œ³§lb$[ÿìÑÁñª§79€©<¬÷Í*­KÅ6Xä˜Ü·ø9­ í-!Q¡kLÊÈǺ‰¸Aæ–ŽkÏåíj½B¶Öy|~³ð}³oVÔ,£¥.ž¤w­ï­&ë_±‰B–ÂYdJ­V“‰ KDÑéb>¨lu^h¯Z”‘Ù*g+©ÞGy ù•X µ¨¦ê¶[PJy3ßvÍ®š+ÂOÊÊœL{yRÎFshÒÅp˜Ö•)ó¾·ßL¬BÃÄÄ` éa}þ|{«:\w/À¦7:ý˜\_°)íÀ®Ë_öës=H_Š):Ø?ôr³£:ç8âä#éÑÎÙ›`4+*ÙS¹¨TΠT&¶òã ºZÓ—£`½®Ör0¯é 0lÉQ¯ ?Ì2,BGSÍM´ëɬî—áÞu~=à›Œû`!ߘâî…®vçtú` …n’·IßÂà;ºœLéŠ+% ù‰J¶,‹JNl‘lù@Z¶H¤÷óšÏŠe/4ϲEœÜKRf¬ýÉõ9ÁÜëä|×I¸¥"9˜;W» •Ë%Ÿ‡ì•goŸÛĈa10Vά“ïÑ<Ð_r5ð2wí¦äEÚr­AI"ܬ|SÉáxÆçæ÷f€„阱³&˜I¨—æÐ½JØûðι^ùhi×7àæò饫§L°¦Ÿªí%vxÿ[w&ÔÚ&²Å¯·@ˆÒ~lÉðscæ¿u©’˜ €ö¡×­Õ°aUŒqêÙûDËY‡Q‡m$×iÕy¢ 9B+… 4Õ“`“‹ì<h¸6:V«¾Odj” 9[Ë–kºs2¥ Ê1À»5ÿ†‰ê±±6Þ] Ç3nbÄÍÓØâæÉ?—ÔÇ©/çQÊ]yîc”Ä >f½ð.gÛ¥)ìÞ‘Ëþ#„Z;-þçݯ‹p1˜‰é¡±úm¬æNOH±Ï‰¥è¿}}©ÓÔüÒ#É Å¾šÂ½ÜÅ3Æú}±]ë©LïáÔ¢ÿaîìÑËbÊhÕ5µp wé˜L6A—+²Ö¿E:SÜ—a–d,]WÑTTh]_ ƒïT¬©ß¥u°BÒ™“·tÔŒ!gØ)ø2uêßj®ZޏÌÊ`½©æ ŵbGT‚”å­®FI³Ù+’Â-ÎP‹¢ålä#wDÐ/Rˆ7aàÁê1pê8Y{0 †&2õª(߈ &¶Ý³×„ìnè$¹rµ5¨ ! oÑžñ˜L¬ƒºðs!¥w~ÊJ%AÅDÌ/f{°Œ.åÇjÎÞñzrwÏ("šÏ…ì86ºdíÒfÖu þôëG%™§ ^'f%ƒŠ—håYBÖyWVª]r±è5Û´›hPYYÜxÅÈÏ͇]YlÙ‹Ð6D‹?<Õ]“!Þ1l›¼¸[þf›z#Gµ“×áÐ’0O]MI5–ùÄ!ÂÊÆ¨¤×æÞÆl½19Ün…ü7ÑõB¥å£õÆ0FÃPNŸÍì^\\s•óáÌ!+ןÏóâòoâ̦”íÛÌJÜ•¬Òdgw9O–Q•” 'L[ζ ö‡Fø÷Ç‹Æö8;"h¦)E ä¾^Ü_µwz{¦R Æ5=£pW¡•V}š© «©MXù"ª¦Tž¢I˜!/tŸõ œÏ:5·h[®g…™*— oˆ<[z«zд^G ÚZáMK€Økž€ðstÛ»àr–}Mbž­¦]|QÅKby)>³F‹¥\ŽÆ@¦dµ˜d½¹s¯UN¸S¯l̆ ˆW80Ä6XM ·‡oÓNYüÒà°š*vûÑ'â Ók0}Üú_ÃßnÞ‘ ÚTlG1Æ–ójB‘ ×ÞŸNR@Šœ–Ç×J«¶ºn½AÃiÈUPwn£pw‘ªÑóYpÚ¿(þ.û‰ýýÅC™ó èhkŒc SuŠZö‹§÷6tº ugyÎ.WÚYá`§ÚÁS숟ÇC£×XP€8•"k¦|ÅÄJ7J¸‡×dbð&ÒƒžU—–J€îüúMµèx†ïË”0i‡eE;t„ ˆoYd“Ý+!HÛòpµù•Dp®%2 Cy8d¼`PNA½ ‰ÐÞ=Aª…ñ,Øõ~—aÛˆ!+÷jlä2‚7‰…rÑ@*dÖ' áò¨«Òøë ôô€ £Êê¢:%y²vX]ÜQ˹y­eVš½Í.) …m|ƒš~ö–XEÒ[¹¶¤Þ”Šªª½Î—‚ÂËŸ•rê]zº|÷¦šÚ„Öý±—åž•+å Pa1±ŠY¥8Cõ¶nϫɭ`.uüª”ýÔÄàŸ º 'בÍáCyàë¯òÑMüýÏóÏ¥Hø‚ˆjÉ´¡_˜Ÿ€ÖãNÃs¡C=8nc°_þê[JÙrüÂnÔOE\„¨¼ô„D‰}ªt-Ù¡1B;˜À:^%A5oF+(Ð5r XTdR{c°£A^Ä^èËOÕW`d°i|!B¡ˆ¬¢yÊ3b˜³'éÈDë.‹í.…ÍêWÕ”¥Â'uØ$>S]S¨>´¼.6ϖ瑳.°Ê»rj­nqmjزªàªÑІ™”Á8,@Ž¢Å_ë%I¼²Ì*µEFÏcšLêj ŽÓ’G!Œãâ°Ö8ÊMZ3™}‘+%åKqÝz§s˜ @ B í–NƒÜ™H°Ý{ ì™Ô¬`Á^’ÝÃY+6ͯ²Úþ„õaàbCo@ÆàWVQNÞ³øqêeãY8R˜x;6²&¿8…âïd=—«7Tsyðkê7¥š„E­kW±ÐÌÐôàǶ¥k:½T¨·±ø/!sݹRÅj.KÒ*Aa|áªD Pî”"}³£jO=Bv­ô×èæ^*¾ü~Yˆ%ÚòäÙÐìk–ݽWþúÃM€*Ù±³Š&´7 +ymÌÑXnXßÀl”Õ”ƒ!ü¼^m_vqm‰)E*„+WlŸ-N_?‹ï"otНˆÆ(âMqªTœ¾ ø8 xhÐZ×m "X€Œ0-r¸ºvñÿgb.w¹ è)40ó2»˜¡Ó ‹ò=Âéœ5œFVz ²îh.íQq]ÇìÀ] !•Vl{²¼z'-¯n㑱\]¾Vr«´|ˆhë¸)ªÍc/D#…ãÓüû¬‹ ]´æm”+«Ê×Ó’ô|f´¦„/Ë[?S6šë‰@£¨eYõIV®ž¯¤¢£F­®&ô¬£1¨ªJØ šÅB»ì©‚=wªF#¹m»,>ƒO:‚‘ëcÊÀ—XålMåKƒÆ@£XL­._ìœ*¯©Ý¡ s± E3b¡ø ëd²µY¤xkQ¾¾v•YØ¢“v®Á”q¡0ì)å\°—<©´µ‚Q\Fž.¾†ò£wrN‘}>Z) ±<1ÀªÁŠŠ·]¹_óµÀÏ‘– !>»áÚ‰<ë©äÍZd‰d…1æäS˜šýâ†zÏ,NŽ)"E™sÏ·…è* u¾ ú 9W¨Ì-¶ÎQ×\}ÕŽXëpÊ#Žûù1ÜÞ»‹pñø¬“Õz$ÍgñšߺÂ5Ù"m¹wx¿ø½ 0º¥kdÕWB8‡Lø9’´lúÊš@ÜÂ.[TËfÔ¢¾©d§uMqý’,·èa´[”b>Ê`vìPüKÁ(æy@HçjH,|MäãP|)/}×s8 v+qÓ¿[ÿP*VWR(©¯ý6ñ1ž¬O¢oE·Qó<îCØ?àa‚ìÀ‹çÃ|’¬‘KßÃÊcËšFDÜ^U‹™ðø[ª¥Œœ¯qÀ~X\¿ÄY p …KN¡ãJ¼sAÈ ÄŒ|ö(;¸ÒÅá}UŒqþ^ƒfÐ’ÝRü¤š˜Öœ„¯×ˆ¬š…‘â.]ÐóÁ­Š.Ÿ´Ÿ D™ê¬˜߉ڿ*5¤’ä‹4›è¾­(i#dòL£<¹mXQ¥‘3Õ”Û?ž|”®µÆÙ¹‘¬"yê° êAËvtOA’j¾Ë¶jŠ­Úí9¯èG‹1y®+¡~õ½:zÒ9»6_T+C0-R.šDºE\#1m½Ô‹øâ¨&J (5kÈuÎPmÂ%ü!ùcW¿2 ¸÷G*°¡ŽšÁ>oïJ/Õýãçä`òÃïlyQI@Þ‘IÑ’óTã]ŠÍ‡l“F…œ)S1BTïbq(Vá2é¬c˜+bñ7òÿIxÔµ¦K¥"žd¡þÊ u‘ßë„ôî’Š ö§†¸Zj“†Gé¸äß`­FÁ¼c¯‰áïiž¥Ò{‹•8Òñ¶9ÿ-<+päÎIO®H*pŒÆsç>æûåãýùûøü$.eãò Ï7þãù‹Ø'xÎ"„˜¼%çä½Kã8ÈLåäøøCZàN>‰)ó1¾+û‰oùKb)üÅrå,€%?äü!w‰k´°áQ%EXvm¨æRXBË9äÄLy‹)æ¦Ø4GÁ}3›u2¬RÃï’çüêÌ(\§ÑÊÃæcFÐ jç³o¯WÛÂÜ_©VÆ­¹ßØõqÔZ›ÕTÑ{uÊfÉÐŒ(+˜h8]€“3–ÝÓqqƒù%îåÊY+ÆÒ‹ aÊEùÓ'GùJoñu_³ðÛ,ª†\+JajØ=΃8Õ_ ´T~zßÊìT×Ô;¯ÓkºŒö–û$WŸZÑel€Þ޳~ì¬l§mì{³Q3=%myôõ~Œä§6.sý;.-aR„Ëo5”‰Ñ ;_ž¡Ï¢Yˆ{æÓc¨—}ó»¹½Õ„ðµÎ¼‰æ ÍŠ{ò"Î2>ÂhrjÚe¬pÓ.¾êùdí¡r ûøAô¸ê”‚õƒÇþÐF}>ˆÜ¶úLäª[ (}–®š3¸‡”V÷UŽ” ó:&ÁŠ ÜÄ_Õ !‰›8¡ÒºYÁ€M‹aïɘkS¯%Zì]ªsZ2{3%‚³ÞÎÀf\âÊ>á½<ŽhS/žáÔ•r&Z^îýQ²Pse£Ã5?ú ˜p‹õmÅC•€=¦7MuûÍç N±õŽ9# ¯u/éÒÜ¿˜±5–AJ—D#—ºCÉÌb  `çî•"ˆ†Fw8ƒW™‚þ$0zÐt7ÕW ÀS^VÛû·Uë´¢=?5màéÏ!ËjÓ´ãªÔ'e¥•ÉÚfé°ŒjÕˆú9É”Äg¡<‡A½F/Ø¡»ˆ0Î ±tÑúff²Jìô--«Uœ÷í+ú(÷E5H|H¿Áð¦O–ôQ4äÉÞ^ȹuQÇÌñÓoWTè‘å4ÒFœ,œµ3tM%CR$—b_ …ŽaEŽ@‘vâ.OîùR?bP—i\¥Hg’:D»ÄܬXÀ›Þ˜d“¤°#êD•½kïAé<ŠÚŽîþgù JË¿õIY˜Œ‰(ˆ î¤Hó{»FØ«rÒ6Èhë¤0CÜ‹¾PQç‘}ÀNdùç-ö&¿`^e@Ó>V©ˆÔ¶)"hè¦Ì°™ŽÔÚ ÕÒM^6á9£C†’ýÃp 2Y<àN/ÂâA=ï‚f`3XÓ3¼´‚ï²X ·¨r¢Y&˜ñºß¡Gü iYèæI¯aÝÅg¤ÉY+²Ë’ŸY¾ ;|¼ð $ãâÞ‰­µG\°Vè¬À¾¥¹"„êÓz•b „‘Ž’OE¯=5¾‰í#³*åS¿ŒáÒ’×AÐgYߪ¦šë.û{ Ÿf·õÖŒ?ÅJÚa©Þ Ä‹ kXL½ìëþz¢•]+y ÁG÷`‡./ÐÞ$Àõ¢šéy4ÒhV\QJ¿÷<†ð\ó‚¶¿ ®X6L%pš‘å°ÞÒ³¶#‰û’[8Ãd²V#‘nÜ4—Ë+ûÌb渑úÎ:Y„DÛjNŒ(ÔŒ+@’ãŸ}Øz¦2 \:;¾ýræÅ—HϾþÎæå¾kÕT¾·M0È-JQ L‚kÛ"Dêw e6 å´òS|“;Em«¶ÙÃI¯<8éfè ÏÃȯ°¦‹…hÂßaŽQPÝâ,IÇKŽÀgÅB¤1$OaZM•¾Yr +Û±û%<7LmØûδµ9oD‘›a|âÙ8›ÙÚaˆ­\hú! T 5ÌúE‹„ õrE :î¨U¯Q råœÚM¬ÇÐÎQ#˜ýJv^^·éÀ_tÞÝ»B èãS¢ %n?1»±õÀØ¥“²c÷’áD5¥Ùù±ã­ŽÃR4½ëJ¹€jÉÅŒ$ûøÎý+²\SKÃ’·_Ž1+Y‰K†Œ¡=¬#‡[ש„1² %$}V–}¡R†Ü¹•ö})ŠQ*jr9© ¾ÃooêI‡U7jþ¯ò’²—nÊ¢I‚ú70é† ñ¼7¤k4ÎâóˆX7A‰¸B¦—lÁ4úTþÒˆ¹0–¤˜ÅÙ»rÿÑjr 1›î6OÅñ¾ü{»ÒÈaânæƒV¥ª ;l}{Íb¬ <¢ •:`¯åDZ#‹ß—Ë=7vªu­®uÝ6eùR-÷÷å« czì©òq6‹ H<àõ…yëÐømŠ`‘…ïjM °íyz ;0Æ÷ÕLjl·1€J¨˜eœSÒl(¢Îjø±˜‡±“Ù4Ã,º“¥¾iSMI+ ʆjr7q\k)@Eo`À¶®j®[¦'S#°×‡Ý"UÕ¡¿Ù'h0Â7‰A×E®‹L}pø{,e3 øb1žèü®nüÞþH†avÜ}¶…~ÆLéó<êÞ1€ùŸÑ«R–CÊ:ÌUSA¯Öo@K'è÷bW:ù¹œ{¦ìÝWUyLú3Ĩ¨ÈÔV 爜ŸÐ<¯æ:ÜŠƒœuò`²›Dc†šúññ] ’zu-†ÿ‘B§ŠSvh¥>%–˜E½°oû'3¨dUìŠPn¿œ¼»»Õœ¯Ôˆ&g:B…,W²Å”øT7u ë–nè?[ëgÐ]dGmBC¼êö04URhí”ê]½Ý†`1ã³²1‘?hÐ>ðó®¡! Gzt½¨L«žDß[ŸÄÚÍWX3³ƒâa׊Ï]M}6+æ‰bYÂPKžtõsžBÖt "W²Nòü™[F¬uú„ìè¼ t̬Ñiݱñêòã†&Cþôí< QŠç¶K/jr_šŸ£Sð¸MÊGW()—OoÈV‘6â &„‡å‹B–ã•«mí¥zt’$(ŽøpV̽Hä‰Þ]®¦T²º}A?µH,U)¹ëxD¢ÆiæÈkmé°îØ,x3®òNR÷I—(9&¢á—Xuã½pÈc$ƒE§˜ :šUR°ÔÀJ˜MpÖç:}‡¹Ý7~×O3…º-„¼†XÅp=µ³*, ltZmŒþ¶uü^Mù&,[ÙêÚ“Õž«&·7íá+M‘.õâ¾¢ö­i%ô~eK{«Pcña—àlP&þg01sÿLô_i““wÔ<ƒÉŒ¢°uè ËñX‰:néžJ+–n|Çv¨7ŽGd7E˜¹ÖJv…Ó€b<ÞñP·•y!fÑøI¬éüŽòEˆU–1ìçCÎ(BRžós ç…ˆá:—r\š ïeQ‘³p~Eø{Hëä‡\ ë‡ × ¡ˆ%Ôæó 7ÎÓ,‘ )¤Ÿ8)Öï“ñá¤~~ä2ù¡È<ëûg®p\æ ¾eiþ£´~ÿkô 6ÚºÁT¾SÞ‹’)בâ_=Y~lÙ ­¿µ¯šJé5Ò4k°y-3ª ö“G`€Í*ÙšÑ)PD‹óŠø½´Ð[U% 1 5i“¿ƒæ¼O Èߟ4¬f O/›´ËÖÕóÈï!¬}Í&‰tvÙR†2 ­¿zóÞœÃF\+e‹Aë¡NB†—òN$"óF¤%ÛÓºüî2!TŠÍËj‘b‹Ä}o*%ŒØ+j'âMA@ºÅap± ¹žÄøk1ôòòX:VT¨AôÁrñà,]/þˆ™ÌÂ-¡ýi!¿·êº ,tùŽðÐò~5—ŽlÕ Î´†:©LCéÄv°Î€ ½>Zœ\QT‡=´ê]F^ I¶˜×ù+“"F^rÈòyÁCùòÑLãTg•]Ï5 ˜E¬Å Gëéá‚WØ¿ZM5Iª¡RË•£7~ý¨Z¹j×Ò$H/@ˆ¦nº¾ê…Îôlg0à ¥“ RŠ÷v5‘˘ì­¤Eahó-?ݤ'¿áþ¤vÍ^*œGS†«t!FÂ_^î}¢8}Ùºòç1¢ç(JÈÖL0A3Õ¼R¥¿q[Pï#âG ™è“zà=që:9°ËȰ$(«ÅEü¶nXl…ÙcNÑ÷Vº>-—ÜÁ:¨ï¶UG¶šaDŠÎ]wH§)ÔÖpñBÁìšhÎ!S†ê‚ HuaN 6waô¶¸²$ÝþM%fTHö‰½ýÁ€bPg$³;O˹Ô¡OJežñ‰AÉæµìAÎB_¯¤ ;^Ç´,ÐÔ”HŸeÌ’²HôÓšµ] ‚·òˆ¬…߸…Èn%–çs4§çE¢_Gæåå¯6/g=.Ïþä î——¦Ìc©LcôÝg鈴®(·eÒÇÝuý,Õ7…èRÝ,Mÿ³¬´ ´îŠASÍ:ë"ÚtoUd©É~JæˆÓ^tg‰äï¹9¨”ÍÎjûr‰§êu¯{tõ ô+§òòùé½øãCõûSõ:Úv¥¼zÍN×ñľôŠâyõºv×~eSª1 7?$ jÀgªŠàÙ¸ä«àHÕ 1K!,D¦ìݬ´ u*²  Ý8çËÄS«ÆO°‡êlcñQ&Ê\XïϪ+åÔ(«‹u¦ã ¹ò8ŒÑ ÍÕioØ¥Ô~\VœAxfw'úEWMYÙÆÒ„Fibµ‚;M¶Tñ:‹í¡J½“„|5%45Ò' 9h9`¼ŒHH)Ò*Û›oÉ™èà‘¸rq^Ý´p#E%Øj멉Ë÷Ǫ©›96å;òÚ¼¡¹Ç*†O÷ÙŠ½‡o%韟×ìëµÉ𻀰z]„¦`iöçrxd_O‚­‡ÿ²ÿZs[I–†áó}òK^ÂÈ5Ayï=d`å[R«å͵ÿŒÈÈgïgÖûý3KA¨ÊJ™™«¹Y!éI‘h¸ªÑÄסT‡ÂV`âi<Ѥ®+ í'ÂÜÓë6AžG|_:¿—9àJžÉËÜ”=gL/ÆŠÊ Œ³}:Á|Ž‚ÓbzÉȘ¼¯<ûc\Àƒ¦U<àˆÇË¥ü‰(\#mV‡ni¬Ò͈CËe5<¾GT÷ØmøÇ¾ÛÄOÑ ûÐî*|r&Šßü”w%Ñf4´GVÓÙr×ûj%Î |i«§&wv…*g¼nhèÙÝ×µõè—]3àýú‡¶;7™ñd™”ƒ|HtBóV°xį<,ÄÏóo­Lä|Ñ´`(Ûï§tŽ$[H³¦·P,ãOÔšHyê!V•G1[ìë¤p·ú)5ÆXy{!f‡GÉy¢ç¼û-Äbåb ž]\R[7«üº d¾ñ PˆDÁͶ·eÒ[N_q_I™°Ë¾µUƒGGÓš3¢ì<‘ƒŸõ2ôŸ)}ßø]k4/#ËÀ½ßölg®ì%ÈKåø£V?ïOµ¦'¿´d¿uÛPck}óFœ%.Ä Aþžž< .}1­3G²X†éï+íŒ3T¿%D¯Ÿò§Q¶– жM#øJÒl×ò ít˜Z²<={HsÞ’Û¡oƳÁ­ùyKƒx£.Þb.« ¨J7lç­çWõ”MŸ7ž×S—ñ¤ñU&@sJÿÜ@[zÿZê‚|:"Ö*BåŠLr•J 6üSŠÿ§ø=ÊᵟU%eù¢ðú½ëvoNx=ÝŸï/Ñd2£ó±?Ä’â¶žíJFvúÀ¶£ÇÓêÀv-ªØ µ¥¸s«&°¬š+'`Ó8ê@œä‘I¸Yå‡iÁX’:«C+cR/òÃZClê+à ¹PfÍHðÅ_€lYW g&qžâçD£lG8wfE•Xƒbç,~År¾–6@j²~1rð¾Åøï ô;/.Mÿ„l7JعùtY4ßœL=;9úÞDm¸ì’Ó`r©þý­¯{ë,[ͧ\Î7L}ô|×´ Ðþ–‘S¯}¶¦ÏøsªC›n· º·_tPØ¥‘—ެטâ™Å=JL)$¶9Nè@v8Üs#9˜×ÌžLé‹V¶È“ðC~»,þ^ž7iQ²f§›/Hwj§í¹Ïè)9Ö*—b$­×.2“r[† ûšô‘2Gï²ýÁ»“’5çÞïS8I«gsÈ0P>·“Ƈu׳Aæ€Â|Î$ѱ»rü:­n˜K¯w›#‚ÝÆrk-%7ŠàŽÁð\±ûzŽŠëã:pÚø±ce©ŸÐï¯ý[ ⽈€±1˜gk[ëvqpÊ!<×Qmø|Ø{:ÝoìÉ]œ÷OV?åá6 WI…‹ K†Šì¼çÖSiCGA'²ýyÓZˆ–\Y“nÚ ›JÜåcŽnry¬×º£=9ࣂr;”F8¶×5©™Lv âTšfM©þ‚3û ;;íC•XÛRlO:tH.žÕ‹‚àâa Ë×FiQ4Û>¯Ÿ|*^ÇKõÄý€þjxåÒ_¨3è„1¹$œ {¶ªð#Àé5IÈlãk¼T*Ï®;fÒ`Ù€óPJºcǵÛÅÅñIôGjÄó“Vð+‡ô» ktì‚KÜ1¿à™mtK-yÍ ³ŽþªÞÌÑ÷wH;…þ1ѱ…Cšr˜v„ý+æ¼ìÕ‹iâòët_B®…êKcöεooÕÓ¼þp}5—Ùã‚;Ó>ú+‹Åq%ÖzPæàƒ¥Z…YìÅÿ=µ™þ×ÔfŸ\þl§uØNW€±(!“.ÅÌú-pêP’Iú8/ç¤fýÍ©³gkǪCOôHÅT)د·8Ï,ÕÉçÙÜSÙÿ\š§L]fóY<³ÖæiÆe\Z‹ó™UíÍ‹,)þ%ƒ˜‡áÜÅÿ­ eñ°ŸÍÞ„¯Ú³Z„uØG¯&b¦AAB×€RZuïÑ@Ýs²1¯¸qÆA’¤2ìê¾PJ°Ú²P¡úq\Ø §A4~ ºê6ŽËŽ6ýSêÛ.xcrÛØXÉ¿Žî³?гOÞ““XÙžf¿6)Üí{š–ô¬~ýÈ]˜®‹Èx£GçŸ(¨™cÝôF¤5!¸$Œ©VW~Ž:t×ö¥ãÜ{¨ÑÅŠ}{)×§êÐåœ?šm ‹‚“ÁÃtƒ0ö1ù|–·RCc; Ÿw‹¤ 3LâD_í£Ùžì›~(<(TÒ¾U‡V¿©©CçW C[Ф·1p­¹a‹žXy¦ÅÑ‘Àr« غY!Þдù8¹"Œµr¹VxkNöÕ3e[¹šË;¶žrê 'þ–- Û®r;Þi—ñ£œ<—ºçwÑÅF$íÖµÕû3u ¨µí½¿’ØGtÕ‹B9à-¼Æ/‰yk†¸uá4O³Ï~“`rÎ"¬jöÑm$÷¨ø)…âfÊÊülýUƒ1ºL’«<ÂHÒ$6M¿E3;²žü‰ìaR½ü=ùÖýøüuŒ5/kJ“P/©eËE†IcEg굆Rü®Ô¢à#‹gƒ vî¹N„b7k ÙÖêPˆâ+T¼zmêNâù ÿÚ®=ÿ¨6/#&ÞSÑ¥iêµ¾ós’¬®\®š‡|< WÜŸ¹£K3ar(3-†M½ugµÏ YµFù°¢¨NÎ'75œu ˆ>‹¬êHî†"åÜ’(JÿƒHø[ï­ÌÜbÆÞa?(Ñ•¶›å?H+欻ĸ@³Áè¬Ï í"ŠñiÕŸò~~M§§.º»PjÔVüô<975P¡#«A;v!øáÐÔ ÅPzQ9úÝt?Kd«{ùä'N„Ô6,J¡?KMkÆþ£Âöÿ‰Ø@ Ë ÿ3@ÌÌþ)Úòý„S‘‡*ê5.î¶[™{¶Ù1ÏœÀp B#¬yWo)±ÞÝâ­Yšòum-lZOs‘yÊ!¸#k…âëõ0ƒg˜ñAÉèÙn¹yrr¡Ælð~¡\ ¹£h[+§CŽ‹ýzh^sÓΩ <6?ÇîÓ¨é ôÃBÞ·úv­z]ñOâa ©­Û)‚† à@ö|1 ~L»âNzõ jÓ.¾[ èÑ=ãÔUÝc´‰ÔZ‹G—U²c-&c}¶@qˆÇÒ£àÓÀO‚Le?È"Z\Îñ¼É½£ÃâÍãÉÆ°å}ˆÒòƒ×&½L?~¯EŸßDN{`°k¦E™­š³=O7~Þ«ÿ£›U#_ø¬ š„íÉi“ÆÌ«m’”(Ók…î:áÆß±_hcWMFAÚÎ(ê’…èfBúÔ† !ÓLUІY]7¹jÇ-Óvnäá™[–2ÏôPQw{RkŒnŸž+éRhƒè¤~”—ÁN¡T9ÎÊcÚ]içèÄ€O…4Ó+Žð»¨²nü‚iBr£ïëP’À(*Ì äµVì\éŒÀÁhª- ¯E"˸Ëì!:0ùfÒbvÕéKr.b)Xk5£'X™'ÅÔÏp©ÞïÐX}Ø!ùDÖ¨©’¦$ADñ¦÷U~ѯÜõ-ÝjÀ`Ê¡XÜÿ%ë5ÂÉ.(Âîs° ²“žÍV8ìDÓ[Ÿ/‹Xâ¨VNsˆH¿Œ1°’-ïžAˆÕü.l{·xrŸ;ýD¯=EŠÍœÍB?CCs:MQ[(ÇÓ·ÍâA.hm°tùF³!û»*œÉmÍ£L4‰DÀ•£‘¸aêj«-~Ú0ça¥(°­ÝM.ÎýÏÐRbÜØ†’³|´„^2²¶ÝKl4NÔ¼Ìb4%n ÚE)“¯SÒ¢ÛÝÅô!êÁB®F¨V"¯l.r——Ò@ìi;§~ÃqRÚ6ª‰Ðò(n€ÀF'«Ž’O÷áŽÁÓŒÂî pLéu%ڋ𜑃–á4]Ô°ä–;ÚD©{Œ5`}=}“ö!õóÕ:Œ0°§Ç& båCÍ­Ôû;Áý¼‰c¦o° +ÝàŽ›‚FXøÛM±À~§tN¦U>²w%7ŸîϪ›œ+;·: çqŠ2ìQâ2ÑÅO‰ì1:zÿ«²¨Z‡¨æÿ‘ôE™|­Þzfƒ%ù4ðv)íÀ»ˆÅÙ’; ȹøPý} –²€;ÅYØï¢Ëͦ3Ο†Û€fB4zþ««Æ?'í#öüç ßÈ”zŸ=á„–æœ;[Rt3m¼³þÕßÒp®o;Þ°ëâ9”°5Ý }··ßôð5J—ÕÁ‡ú´Q´ÎpÌëÌ]ä(1'" ÁsÑCþ†ÓUc4{c¼ÐÛ‡£dœþ é"hFB  œ> ¥3ߨOþÿ5ù;Øðî¥m¥¢·UAcæ-ãb¸H²48m#F¶3´ô;„J ËáyH—@DÇ|Dzf-뫤oʤo©¤o!é˺Ö2a—Ûx–¤‘•‹Z—ÛztýÞZiÉ8K‹-Ôßøi¯ l>Ž1l—7媑äð[j‡«köÕbVoHæõTïÇê¢zky6¢%à4¤waÜÁ?‚Š% ï Ù°E. 1”ÄàÎp'èØmÁ«Ìì|Z†·¯E\ýF.7K1CýÏ–ªç@<š/uHÔ¶¬tyÑÎFÛ ÚƒYÞcrÕóå];6ú•r2 eѯ”řϸúôsQðžÛûq⻵߂\ž¾·oh‹ØC±<‡_B¨Æ¡bÎ/&} v$þˆµ”Î÷Ô]›†N÷q|œ»»û¡Ãó•rL­ƒe8›v´û8G‘XUÃûì{ƒ÷X˜†Æs[Ró©Zþã‡èþv;¦¼ïYdm£k‡§ç4N¢O'†ÝKWtJS{Ù…6Ñ!¯ýå§ç ¹ß->tTâ®ü™Ùåqþ¾C÷Fæ+>‚¶rò‚ÏæTgT(hì]øxðŸ¯É@Qš¤“ÓÆ‰TÅRþ7í= Ye +hÑKuìA’j¾%í¿Cù4¤ÙÅt±üU‡Åìø’ë8À'…lÞ Ÿ˜cãNΠ ¤ƒóhñ01ô›‘èæ<ŸäoeBkâÅ“@ïÎJ·„„ œ+¤­ØÒ²ƒT8'6!,š-· i®Hs>+¨«›>/n×[Z(¢b»7ÎEÎÆÅ™/µ(×¹­ÄÈŠGx$écˆFäÎI|í2}ò}p¯©ƒK;{˜Êt.³EÊYýøV>ר¸u”îÅÚ”àT¾s×£-(²s±rvÙ»‰õhwbíúê¼Ó!Çòhme•8ˆc»Q‡6qÞ-B±{¯¼xFÍסÀ«ÏîÊ«÷Éàå¸Q¼¬U°´?pæ˜%ÅFoü ¯-ÀÛý¹2'1&åý´i]k‰áÇnKðFÙ|Ð;r‚„ĸ­ÇÿŒlˆ¢D4;Òsr–º@™²TÈ;` ¡ëæŽY Èe{¤’ó©è1xgÆÝ&F߉ðª8»ìy ô 1•pØt»ax Ær3Y¸.B-¼xûM±WéƒK…Ð^ÆÄJ´96…nÌH§ìR½6ͦVK¼;ŠÒÆyzã¼± B´Á¸ö…{éÅÕzšÆNtí x1D­ä9•Íedâ?9õæ´)ƒ.Ú2ÖS°l#ÄQ·Qr¿6~{9|1å» tè°#Ï(©Ñ[w!§ëÌíž–Î!¥.¤vïCßòs¬Œy7=_˜"ï9[œVºhð;lM¦/³ŸöÛm:`ÍZg¦AÕ%]u½^,}dWþ– ‰…>ঠnm„5†‘=¢E+»5x#ä¿f—& nU·?í“ÈÕ‹V„†0ž²ICz¯öy`›õ”;fæÆd4$žX â1Ûh>Ä(¿:Î_MÃÊ#IR´ûÙtÅ0þ ÃÊÛ.Þæ§'l¢ vÝ™^N®v³Ž¬âjû·ýÉjÍqº›M.”L×9ƒNy%½"ÄØڼ럃çÝ}~ÝE'L•ؘ˻«gNÒøÙíûe¿°u„<{òÓþxé°\«@]H­A#´Úa´¥k‘Ô~Êkã,ìÔFªµØ³¿”ò?‘<ا D‚ÔD3Ì/ã ƒÉó•Të¢s2­ìú¶),v½‰Û­ †=xù6‡Ó1!(¨·pšî]Ú‰?¶z’ÓJ.ëÓ¨½.Ês?· ëß:¬ÿdøè´6¦ýRÖzt<ÞÒ“RA^vM„Ô_;ÃfZmÊ­%¦7äyéÑ 6‰]ìw‚6ÈLít ËÊæ\Y¤Æ#ÀŒ½œ8¿˜÷`="ÐuwÄ|dr“׸Êeó}I5÷dU†òêLýÿØJÛR½tˆ_‹æf²L8Ëší ¹ˆwŠ* é+‹—`t·š˜GJ“Ø–qô†©°ô[ Š$;9ÂêXþµzôdÍž&ŸnM ŒÿV‡ŸúQûö–%ÙùL)Ä¢¸¶vLºg7õuçbÛ¼f«t9tY| hü|x˜ÆD ›.y3ÍÑÅÝðɳ7^ßÔÛâ'èšœêûˆDVªVȦÁDo‹¾Õ 5y„riº’€€ƒ só¼fZ/ŽÎéy‹\ÂzºL°]rîj'Ì MÅcÝu)­K{I2¹8Ç´£¸0Ö6:èÎÒu~e<ßé^ÿ¼5o›:ðkà'Àªyƒº!ûæ¥ ¥í™w±–E;\Ê6\" ýèt»´ÇX–¹Š,ÙÖ±£X“•ìöŸ„0¨$ÝÛ¹ÚTu8ÐÝîI‹G>¡†í5f;ëà®´Þ»SHØ®7™sDbèhÜ)ɘõš{†ô²þ5½š'ÿ-½ ¿®=lú˜£!IáöÑ%>öÈ ûØ1’Ƥoµ…ñ¤‰N‚—JWòE¡5š7˜Âº>Œ4¶LkÌòÚ|æ™Öô.e³ÂÚö&3¶æMK¦E“dβÚ$K˜/Mʨ,8X4Næ j­|gEÊŽÁiœüïê7øß¬`à,J‘K]ýÌŒ=€³¼LKµ²Þ<Íæœ'yÎÿf9€f™=O”Ì3ü9ËÙ“8Žgihzlc>“hî5À±õ?ÎÒ8·NÃé¿÷_s¹sÏå®þô¿s¹cùaZû(”1‘®¹gÒ3Þ$P¨7¯|ÍGáyd‚í­ü#¶¯³söê„¥ÆDÌ©7Ís g±ÃΜWÚPÈùX‡iTäi=•£g¤V9ÀÚÛAö«GUä˜:<dÒBCw¡“JTŒûI2c€íí•iþ牙»o÷å0Æ¿„7·Ü›;.—R*…~Jé êEÀ³~Ÿœ”É( †+‹ÓlÔ3a–$?œ‚Qöë°%EãiÙ]÷\ï|1'Ô—‰=BÇó&Õ Ä_Pï˜ ‰€YzîuóNV'6'¯ŒÜÌLO¹Ua¾Mi>‹ tv¥ÉSéêЮ¢ ‹ãÎ9pk ELâ¯g, 1MÖ›kÀI?¸KEÍÝ>rÀúEbÛíÁÑ/ŽYîšhi;!lE÷qÊÕóþÍ™MkN=;L‰Ìi…F§ý ‡?S”I„umÈâÑ=é°uHË3 V*P"“Éø…ÈnÅÇ58~²£Æîx­ºŠ²Ì*ù([ÐOu(p.ó[*¡é#ÑÕÜ“´Zà_§¢8ßE«<@5OÈ ”ï.~ûF¦éÁ¢5@›㹂ì‰Ã¦Hj§Þ ü ¶®äŠöd0jš—xþ‹vL‰äÐñNäf(ûí‡k¦…cÄøônú}µíSVTýUȤ¥ç:93C¿Ô3wuhèj£xF­vd Ci¦ß]æŽýÐRD P ŒÏ@Òß;®šú¢žÄQxB¿³`M©æÚöܽ=N³é·ôžR©×%r–£'Ê[gT•³±Å€]b±·pÉÎ,¼°ŒRgYJ„ÖœÖ/®µ'²öo_ì( W³^E‹3~V¥5b bmO˜“5šOé­†ÚñÍ{Èág;V›xM0´“äÉðÞ…8¢/fh…¥øe±—¾¥olg¦ìýGÿÅ“J 8.j9ôÏI‹Î¸¦³»ìÔÎÊ-O1°ïª½+v.ÓŦ6˜4^[{´ØŽ_[¨¦tGÕ2;Úa´m‚âÁ|G,½=Ø”iœ^¢œ‘=±°+H¾åAxj+`R¶sÅÒ÷Þþçõ§DAs¥oXÌÑÃ`mï°ör©²Á±é²‘bƲ‚Ò¯¼\‹¬è‹Vo5îUn~»²‡Þà"Â;¢UgÃ~䮄æ,/$ÅB÷œõœ3˜õkE¨P‚s{ãƒ0 wpø]fÇÜþ´åŸÊEØëRPTjÙžÓ¶?Å=?y_'y’ˆèFO奬T=$‘šõ6·©%æ8Àñ^ÚAÅ:aÜ· =R ˜ÚÄúÁf¸V«‚íœY•&ª,©AayûÜ­<£û¼º‰Gçx]‡¶ì­ )c*¢PÖTâ?“¦èâ÷¯‰­ª…†×£ñ²:4ƒó&MìPÍ>¢žä]pœn ˜3;€·v*¬“i§LZžàz€¡š¬znóÀŒ÷´>œ_›RuŠŸ¸w>BFŽ{aš¬5ìÒäÉ€²kz',A3›îCÚa1álqD2L¥ˆ;Œñ"’ç™ô=yF¿¿ÎSù³XC ZÛÇa¨¾=$Úé2Î/жå -†Ý‡öª±ÂRÆU˹ìAÞ×oEªP?]Ü¢ýý˜Vɱ+–+ð§ö¼Û%Û!S´³~ ž(̽™æ¢0ûŠi¶’HŒ£ê“ÝͺÚÒcûŠ4—ž7WB(Í0çn{‡V“3¨ K-ðà2/òx=:;³-CF8XüóNHLf椰Ûì1Úqmâk^ßS*V{£¿žÌIétéŸãØ[ƒß7ÞE“„ºf émqz4Žò°8Ôäiäînó»ì¶ÑÖ[>¯#ºX‡*ü"õÖé8˜ÍŒ EÕÿAà„Ò¢÷ÆI ŠºâÞÏ/gÕëÿ–êÍÚÌæ%Þ‘‘w_ÊqaÍÉp\n]dø$ÇʸÄjîšX—­¨P±\?Uën*óÏ·èí˜:«bDç|OsbQ¶eµ!ç‘ì†Çܹ$‹Œ¥@±r.­òó¥rê+Ë z›O9‹%Û˜¿­Cc(6mÑZѧ³ ;íâq÷‹¼~>_XîË<ï]™’L)ºRÙ¢þgÇZê„“G9 j´7“ŶÒÍÿÌÉÕ‹±?±<¢TügÊp×+jTˆ~ SlèÌaÛŠâ µj£”´…ÓÚ{ÒBìDùX¡|Eè9Òèš¹Ls“^çÌ©Ð$ä6þÖHÃãŽG/UWìê\ùUo„'=·­Øº˜l¹| ]µÈdqøU¢Mv%ûJÍQyÃìDá ã+WÇø†Ù?æe»òë¸gfH9 ¨ ÒÜ¢€›âˆ${©ãmuØÖ‹Æ¸N{˜,gj°Cl.ÉZ;Ф †|lÎÿè#,K* ´ÀYïô疟ÇYO^(‹sGæµGï‚ûDz:ç˪Ò.M·bjJ—Ãý ÓÙ¬\éÅMðçò(i5²¿ÚuŸÚå P'¤tO\ÕÃ1ÝRpyD•zA!‡æ¤ÉdžÈ&†¾$ù´¨5õ’?7L& ÍábÌQ&ÊÆcój‹ÚÊ_¢gó!Çô>½p\Ë€0½D½_¸#ùè… »ynÓG ‚P]¶ï׊“îòÕ¦¹'øú?v¾UKÓp´:Rò¹OÉ`xÒ£”²îié=FuˆÙ‰ ÁCʪܖ’ã7úèÛäE•éÚ*% ð#8~£‰ëµ ÔGåVkìíånÙþZ\¶}ƒ2³Ãü²tÍè}¯:óXúdq÷Am3…Fi}mÙf¡ó c|9í<6G®qšÛÊáÐèíî¥03Ñ3{Ë.>Á$'8ÝkêËÊ7Æ:´a'®4¼Sù]gÎÙU³èî}AôÝ¥…鈊ڴ@ )¾pBwg¾•\I§>vmen𺻥·8†jÆIáÇébüB͇¶tÃK9]‘ ²UáeÊn•(Œ,óÇzÎ+Zl¼0ÇÊFª ÝuÝmÊN%-|ÓVÚz$ÙINb+ùi¥Mp“®Šß:ä’MSÊm¶–ÀÕ…¤(n™¢âQá*g‘5«C›påöÖì¸_9p‡¶Ü›{)ü¨Æ>ZE«V™®˜¶‰žÛ–Ù]s_ì>˜Ý°®Å/ sµ[5?ë@¨Tý㕃|{^ÉDbR‡¶c)› 8º(Ñ[›Õܰk)Ꙁ>ŸîÎÈcõç#¨`hÆ.ÇĶ@_³¯'“ö¢¾7HˆÆYìOôQˆÚ£»0<ô7oûîžÓ ó6ý³c¦©)´ T!ùÿOreÿµ†pd´p鬞ßótªz¢–3Có™„Ãñ›ÍŠ·f‰MM¢ƒìJz6/Ùµ‘´Œw³‹÷‚%Ö§e&6-3™3Ç•{Ž«øŸKyÆrÁ8.˜cŠó”Y¢Y1÷•&1§g¦óYŠ¿iRæœ~™Fl1›Ú̲Œ f ’"ËY28›ç¥eÏŠE„ÿ5ÍTzóÙèÿ6ŸíšÏÎm$©¦uÙÚû«}¿Šâô^]Ã’4•ªB9k ª-î2ù÷sím¢¶MÕY‹õ?¯vÒú6&,ôé pèâ¿ë0ʃTK*¥v©õùø²éß®pÍû#ösÒ•xK4u‚<äËÊQÒ¼CÈn™»@÷ðª—"ClOÎaC³N-«þÉÛÕ´Sj§sŠ‹Šh†Jo&†VÆžÝÁ‰wà›¯SfŠÚèòäödSñ,±´®ø8=ÂÑCêPÌÖáCæôíûõdŽ}ØHSÝ EáçkÁBi¬\ +iô÷¾ôÜ—{…W—Œç-dM&ÑùC}Öx°žàt?~‚¸'æ ~€ù.Å–lŒ›ÕŒ'’ÓxDtÚµéIJ½$D–Rç—‘”u~c‡9æMÐ↋…&tì=nÜ~Z‡†-#Ê å7ãRVÁ u(㎲+È„lGq+ÑXFW“ŽL°–Äl¼ÑYÔsdí>©Š‹Óh·hÆJ /ßïñ…ªn Ô¾M[Êh†2üÚ°q°s”ð†Ù*6Ü"ɦ9¸à±Ü’¶ŽÏ¢6vŠbº+‘ÂǬÒ#{a>X‰•-.ËÓãoøs´abñâ껵<&k}Ì“ÅOì÷’;6ØÞ¨Lšþ̉v|«Ã0¨8{Qq0[< ‹¶g>©„³›ðoí°n9áÍt»†»ìµÌrÈή¬CÓ.¶§›=`°ÿô0Zˆuª9èâíƒåg–ñ \1_KöFµ­ä÷ùåŠGØÛsa {Ñsù E„V<àI¼ºkŸÛ(Þ÷ïÐû‡p¥>ˆ¿½a?‰ò7›ÈÈÌó©ó+ƒqÉ“+ ”ÑA¥ïŠ„!CbÝP¿›½ý¥ïqšµ'9_‡Öb}ö ­â«¢2œ×!/Boxâ­h þ’#ïÒË—‰1¸¥®¾š]«¹'œ¿â3*gDrlµyÚ_YÜ~Ni#»“d¯êÕ·:䢇ü!ñ…’Óz*%Î{Oœ¼—žc?–N+[;–ªAyùê'î c)K6LüNm]Joêà!“PÆïnÀ”0Hbû¾IdU]º¶MÉñ%9¤„a5¶qØž óÐ^÷ì†òÍzŽÈ¤›Ó ¿Û²ª) ö)£% ï¨@åž?zHeÂmD¯Z®aãÙ‰›Õ.áímuÁp“uýœ‚ÇIá!«ûÇ9 ˜ø’] ¡›xþâ_hdÛ@)‘0•¬ßÍ aíu‰ÆK½&츩ëlÒªv|p…Èlh—žÂÍÚrüèì+ "ô$Þ‚À6¡²NP^ý¹}‚PnÂ`g¤@±M”~9Q9u†TeåÕ…äde¯È)f¥ÎA—œ¯¾<õ^;,’¥ûù½ê^ó$É÷X½¹0†¶ª“%¾Å^ÎóõÅØ¡?Q¡Ê°_úk„zöãÀà+­»>¯ßæ¦Qœ®¤2 Éi-´¦^ ”.ôšl·CµYסUÕž×'`ç`©Ù¦)Ê•)a¯v.VlÿÀFOУeÆ‘(âmd|§u¥.6|_#]ÀŽxÄΩ æT³+µ¿&ù¸í+ÆUǪ¬ÔQÆbÕÚ€ö|~ }ÐøØœDÔ×Ö*RÆgå?Ü·ƒH€gʺûjè…xF³oªW€Ò¢ê9Kxð¤Õ'˜ N¿~VýÁØ©’˜9qú~dئ‚ä¡Q !ë¥GÎ]jë˜Eb À.\ÓÍ橞?âo¢tÁ`Ó/1 _e à"ìnJOÈgˆdŠØ`g+3ׄ Ÿ"D½++°¡(‡µß9 ]e8ׇé­hsSÎdÝÁ˜‰m,Ûz7"6jf[ƈUi•,LÌ×Ë ˜›šÙ ®öu‡ü¡^}©Ù;©Ž‹v`ãïÂ’ÀUíþþÒîÒúHï„ ¦§o>øTIý®¬è-á8&ý+œ„ò¾²Ûœ¬§o¶ã7šŽº2›Ê¥Tç¶Á#obÛnÂA‰É; L·SÏVr#^¾ b~ÃTûvQ¥ç¨ÌN¿% 4ˆ+µ«ÓwÍt[錼ʘ#Bˆ¥ò–H†rlÅ˽ciRx0Ö 1†ÙèÊ .;¥¦x-+ωc±|Fô‘Ƴ Ðá–Ü×Ö°³UR¬÷*þ¹ü@De±—;{Ú´' ‡†”8úDZf•åßøŒ‘Ú;-[,kªÙÙãLÆ´LwM~éÔ¬V±â‹ÏXpˆðxí+Æ…:Ð ÞýÊùóOÕ§“ý37F™F1¿°YÁ»iŒ †#ýÜQ<|ßoEtcí7®e{Öuê¡aÿ­m|k—]Æ Š†Â5¾ ¹i/ݱå«ïV œ›[t:NÕaÞ7;Æ«rƒ(§ dƒJP%4§%*KáË#Çz<v¢W”r­ŠK2>–öÀèÃ8ÿ©·îËí²gµ.„3[¹m[ç³»¸[˜y$Ê“Q sQ´D_5‹GqÊà‹á¦@ ”ãpv•à¦è¥»}»r“êÁA±€û‘ìË>°mÚy;›DÎpýš.û#dлPpŒ%3…?Õ“¯çìš–dÿ|ñ×Dޛ˳'(ÊN¼`gUÖç‡Ö0õôú]3ò¸/v›Zw.[ÛÔØræ®qX;†òKO ÿ Ã?„ìñm ù‘@tËyÜ’cÿØûɧ Z?døPåãA!§¤¦ê•Äx]7ÄŠŒýgm€£Õ,,O…2ð5ÏdÓ”R"KpD``¨˜šZÞÅ#ޱ™A"-‘M‡Ptês?ûy"ìÑ>–k”9l¤ù8™=õ ~nÁ3Ñ‹nxë(ê}}gÌØƒ[Ù¬e¬HFp¢ «‡™à^؉ƒ“ä\6ûÃÊŽ“Jaob¼µT^‡ºÑ¨»$ô?¶O"ùxí}Ü»‹[‡œuÖý⬷K÷|Ÿ/i_‚㹬ñ°yèc&ÝÝDSýWuà9s" ä/PÀR¹¹®žëDj]Ýû¶žîÓãALšX'O^[êÈâž“u“ÜÀÚ´èÂ\‡3Yá?¸0|P†”“°'§ãzLOöé}Y3ë¶;¡³ñ¬¬ÃÀVl&nÃv¨M¹9a½¬×O&ÒƒÎ<\À¯y9L4okõ.Ë\í5ùÕC´‚ 9ý+¿%˾òLëð2‰ã+’IÃu]öÓç×wöTbýüƒÏq:~ÛOxZ0(Ÿ†ã#^v˜éÁ˜•q[êõ™®-=:¡Åz³Ú½­ÏÉ]h§­îŠç«ÏäLJd6õV™]oWr #Ý£åø!Ûì®Ãb#䨛™?ÇÜRoç×({HÍ›\-›.‹f… ‘HŸ 1Tï÷!<¨ö‰Ç~&Ÿœ¾œðò+–pØašbŒéõƒÓ’´³ƒÓ×Lä-ã'±›£vMáü±Œ*p»äÓv¬#‰¤9³q‡õlÌz¡ÀˆØxJæÊ纆RsBÅ8º8*ó…!®CÎò°töR8 Ò|ŒŽcqsL/’Ùðjž1ãå~è×rÖ [¹â©ëþÅY,€6œ6&U‰¡ÎHn²]…™È¿8í.Sì©zr”^6OÀ´¹âbh®ÀJ]ïÄ‹S€àî–7´)tvŽWÄr)6˺ ñ^3W‘¾ñ €*äÍ£ íÌA3¿YJZ#ôõñ!ÜÐh=IZçšÄ_}ÒX”ðW¡‡£üd2Qþ|’/N ï—Xwø¯o jËtMÑ)Pâœpû¾³ƒ$;ßpÐ|/2vËþåÉ»zû•«ñÂÓWÙåÂý·ÚÓØT ?e…CáýRÊC¼æ_s—Eô_r—x7‘ç››ìØTfv›öýÌ»GÏü`+Ø3-P*òåea ÒÏ{pÜÖ”ñÌ”%”E¬e‘üÏ¥"*Jë[š1ß3©8+ç,fK- ϳˆéˬHøy1c‰]\”3d#“Ù,Aš2™Çn“Ñ ŸÍŠ˜ÿM­[ê,OØEuž,Ý›¯®/ø_MÚŒ#–ðe«ÚíþY™³T//#ve-R«º+æ)·È³‚%|iÁIq´z>h”æ% õ¢²TéÞê!ùìI’Å–S)9›ÌÓ™%W“‚ϧóBÅ|‘ýRœÅeiK‘Eø—ÿ–w-f^Þ·Úñÿwmä͘Éq]gç±ï-L87‰é4lr¢kHƒ;-¾<ªCÇ"Ýa Ù÷hDÏ™³od+Æì.Bm •!ØÔÅÍF¦«ÎËBEÂ'7Õ4;b¿)è:lë[˜ëO‚SZÎìVŸé&Ì¿O>X‹ÜÜ=`äÜ^¨§î½}zòîNâD¿ë©Í³øR·ÄX: ™a,îùm^sæôY¡t…"zíìGqÔuÎê¿Ý=Á_M¨¬Â$ÒD× ñð²’(ÓCÏfŽñŠÏ÷TõæóÉ¿-çûh-®ß`âå¾ȽÓÖ«i%F‚¥½ˆå¶~ÃÁç5™¡|eV=0"3>Æ97‹„ Ç&ÅÏ:[àIÚøˆëµ¿µ&0Îl¡Ìwdž~àE»,Òl£êê.¥N¡ 5ð|[y¶¯(Ó Ç-»R–C>;céCzÝö³R/$éJû ˜ú瑩G[‹MÅÑ­r&XE“ÕÆ´u.%Q›øËú%7-`h[tûgèä¤x¨øN>a§Â,Â\ìýáñq<îõ¡ðÔÚ„Áëì5‡b±|— q°™âôhTúœ™†VŽS!fuÃ¥íÀàsSÀœ\áBvÓ‘‰×‹5Õ¿&¯ÚG6Þ€}@6Ê%ÍUÌKfèÇTöAGïf%«Ë5_^܈&eÛ/¥ÅÑä¾P¹œ3Ø HÚ¶òÄkYÕ!Ô±nÚ&PK/@õ2£þ£à L´$^>?¿wëÍÛ½*pm¬HÕݪEñ†Ô=—õKð¡QŒ/’árw¬9´t¦üDj†q†)ž Uäò,,HЃ–L“tñ[ Ñ®k g›MýY|²9T•”'ù©‰a™ƒ¶i¯½>o4ƒû>H¸˜?ª§f sϺT&2„»p„ø¯óz­NX"2Cù®ÝgÆ1´(îÙe[ºîd"°ŒíŠé†Uv6lÒMr˜}Æ0C/xþ"pqÚ}©”tÒÆvÓ[­õó½oÉ™ÊY‚à×{-p47‰ÊÕ£Álg»êà‹’È‘V°*€ %ã·~Çf‡’eqš't§½$yÙ}bJÞQfÑÄ5:†ÕhëKxÖpsjýŠ¥çøU6˜ñô~ÙI•P°Êœ³´‚ YÌ/tÓ '±AéS\*“‚#ÒǼ]\‰Ð÷‚LU4רïéÄ1»Rر[)¶»…CÓÉ7$§2 sÌUˆÎP½–. _2’è‘e-%¼XäÉ¡˜U'Y€˜Íg(Z-}Y¸æ6hnF‰=fè50V;7õ)óO8¸ ú±3o)2½®Ъ²ŒW–nS) v6të³ÌÈÃØaÍ@äÝ6„dqÖm‰*›1©0ѳÐÝüôfõœTÖ*`%Ìd4•uõEéæ*ÒSü ýò«ÂuYãÑV¿îkµX#šœ¨vj¶ÌØ!7OPãamý'°­°óC졬"oΕkS! ñò¤IQ1û­"æbh´È/J–O¸—bÞV„‚‹«Oµú¸,ñ‡o”þ7Ê~s«uL„Tù·Àˆ;Ù %Ú_2ØO——»}ñjÍL_ü4KÍ—ß.ïœ, ôÉâìÇÚª©½ÿ«Y¦¯9½u„ÞöÞ6´a°ñÊ-¯yõ1@GG°Ùe´¼d~«­a"ö‰E«>n$î‰öMTà”(W«áÒÌY+w)”AÐ\°%"ªE¥½üunÒÝ𬛠TšQM0âhi0³ÏÚìÎסR/¨;Ž—o=Ö¡N‡}vzsjm°š,i²ÜkÇÃýê?©¶HlÇ4{] ¯žÕí­­û³±Í”±LÐt…„aw€¡¯Ðȼ‹Îí­ÕrÅ>‘1V²©¯c­1‡Þ‹Èbo–Hè2ã ëÊ^˜¼ÅéjSåé®||®‡oû[u¨Ï,•ç"K&ÂLu^ÜkY‡"U¶SKïE»貈]zß¹ ú±QŒúÕE.çtAN Èc&d0ל^r&i(ŸÎíMÉ‹¾k…’åƒ'uè”ß«HÞhˆß+=‘ÍÄtø tM=5]Ë"¦åÕãõT„®²ÙQlÀ0é7$Mp ÈfŸ®´½ ™íìyñseÐyÛ«’%>î SÞÌU°±´ÜÃ`#ÝÝrÃØã¥Aäl€¨ÍoÓïµ7î MbFWBž™2¾IÜØ[X°;i¬+Yåœ0Sñõš~q›·Ïå‚•~—ñÃm·kø'¦þNÇ.ѹüÍ¡8¨{Åöt«³Xo½Ž§uì³£Ó_8cŒÈ¶Ã>1ú¿óÅ>ŠÐM»^ºÓ‰ÉΧ[Éý¥à@9¾‰_÷Å9ZÛ¤†R¸¾µÇ9 ×ó”ŽÅ@ïgS+{R?27´Gƒ&œØ»²X>”Ï(*(ç%^ ËL5_ë0*ŠZ²]êšöuüóƒ–õ^]õä ø÷;™—1%aX?` ì*W.fÉjãc´¢ÀÇ4vz!fDYHU™Óù±»<ùœél²Õ8>: ˜¿4ÆFø;kÚeeÏßœ­­2³ç馧sßä}LÝgâ™X‡è÷MÇKÍéPCö`Q×o] yÜÆêþ uÁ¦IY†³éCÍØça¶ÈÿLÇ¢'Ö\™Á„ž<[N“¡b,l%VÞ!8&8 `Š&L_.ÖV넟%–>¦‡Ëݚ΀®i¸žŽT ëõî5#}Šr+õþäþê œbyÂio"` ”³Ei¹"ïÄТ{]5jµ*ëÊl^]ˆWR&3™,6[–¯º¶6νJåy »íè™ß1)(ÆêÕgÿÔ KqHÉ)MË’Öó×l¤xTf‡˜)å&án³»µu€í¥Å,˜™KBdÃâÙ9è0`¤FH¹L A¢!«6TVáaëƒ9ÙVSÂÊMö*p«4Ý{ËÊ;©€Ê“ª5ª›UomMŒaˆŠe†©x8buÌ5æq0Êb› zã ÔY7ÈG;\kÃÜÌOÙ¢6˜¥îx/Ћl§ØÙ¤‹‚…­Q…ø#Œ÷nÉ®€£Œ‡r–SÎ6ø«ØÈã Žtx©]»5sÆ"¾jSæ9E.ˆ_˜O6öêš]Æ„a©Op°A_ÌÀ” 8£Zƒ+ ›XÆm¸ˆÉ´E¥âÏ•O{MÐ)8÷OÔVÛYˆæKϵèzùBë´¹"¿Õ–S hÇ$%ËÏIŽ'—C‘·˜M &T['xeì[•6ß’û LjqÑ ,ÑÁ<«gdo"v0LÁöd3qªÙñŸ°·ÑgÒÎáCd9–ÒqRHFÊ81–އýŒmQ‡>þ¥…Õ¤e-Tœ–øÓÞƒ!ñjUë]˜°Ôƒvã/¡;µ:?=æ-  ÑÄ›9§†-+ö/7nîö/_”Ô–ÉæF,¿ëÐ?‹ 2&Y³ž¢«þÐ*ëžÙ%MÑ•}{xùàݤӠôx°ºêÔËcxßæÚ¤8;!ÒǾ—i²ÜñŸ-%a²H27®ÔõsÛ_›¾ñ^´Š„u®CKÞ³TÍàÄ„nMç['ä$y¦WzÂ^`¥¶~ï9¯ãxÙ#ž¶Ãbã}X€¼Xš¡n½ìãß ÜŠô¿¸‘Ü:+´Þœ•sÝ›]fêUÁB“Ÿ=.÷£4Ÿ£PõêòOԀԽѰ—¦÷Íî«ë#óf%“H³„I¤¹'‘²ÿ¹T$6¾.šÍ³ä_r"¹×¢­Þû?_ì‹=ƒPb‡è˜¼ íëJ]ݲóç;ÛøÎ §akQb­Òëµ¾N mŸ¥äU‚b‹ ÄG˜îÕÀ«7vD 2Ψ-»êã7̃æÞ0CÁè©•nžž"!Ä̋ϙ™?/,­xç ÆiM|æ…YG:ü…ðHÏ6³qüӦ岚œUK>>èLuI•-.fÅMŠøP‡R˜¨íoqÛùvõäG-NÚÏ1¬O6P?j}-S°*nñgЦ|”]çRÜ”º.6€^ÏQ´ƒµ¦Iêl•·ZŒM‰£k•è'JÉtñE»¸Qvî/ÙÖBé9ÓN ¶0F j^}.äeAß2o>µD‘ú;µ¨U[ŽADö/帹´kÁÇÜk,Áaäh×VIüŠç?žHÍÍídGZÂôýÕ 1a N£¡ôô`!/d)µÂÅ!9…b?Äã£d¾7÷ÔF –`pæo¾õNª¸ý$q€c€ÙhÖ›%¿.ãtX!%Æw„cúÒ×{ªkPèÖ)þmçßvËWï¼_\ÞšÜ:W E"æHötR}‘Á˜Ø­JKŽ ?Éáià,B¾oi=°‡,ö  ƒt…šÇm)â9yþË~‘ÞИHOX»Ùî(}îC©Š‹{ôoSŽû€è©|V¦Š&ëɰ¦'‹5²}gЙ÷6Û…I…ýçõ†3{j/Ïí”íòÙQL'öA‰LæÈš¨nÖ¡©+b«ÛúeÇÂëË#ŒZêü`í¯ÀF€‚~¸Í‰)s-?¥seEœ`ÝðŸQŠs‹ùµIÈZ'>Ã×›µÚqj\b¨ƒ‡Zu(šËè³+ý¯Zqø}ÓRÞý!BÕùæ¸ÚãRÎSðáÐ ÆýëFõ£NüÒwuhúÅ6]ª\‰ ¦†XuÑ ¹#ÝÚî·î.Ÿê¨Û;Fø|“Ca*€½ó…°ûùL¯ q•#]-}QØàK=±Wv,§A–³qáÈn(äˆoÃÝ?âËŸJ³F'NJF „›‚ É~ÓyV9¼Û\OƒÛ r~ŸÜ”TÀ;h;Ê8WÃ.Vç”Jäj«‹À 4Ù)0Z„E­úÂË•Áµ“Eðo“X¢JÍ.k¾Õa*ÏÁ¨B¡^,ÈÂŽS}v‚uãdCuç¬ÌRÆâÃÛõT-\Ö"ßëâèŠ@»èè÷:tÌ)³]BmñQ{¯QO9Px‚=/lÆ»®ÐÏÜ8‘ÜNäáfZ?^ó[8£”ó*8ÝtÛZZîÐ~ø™°9¯çp1G-$ÕV*± OŸèçupˆÍi.IgfZï0k û  Ìäè6R‰Ã.ûäbÿÚŽŠ©¹#@•¡rVÉèU óöíx,§ƒåœ~goêЬ•KS0›ÒMhõ j¶+,Cáú‚Ø) µÈY>]¹zŽZ' /§«;Ç®¨]‡•<ÁAÖ£ã'ÝvŠøGBñÊ•”íAEÛñw³–­‡ç¤‹6ÇLñ:ØÛ®wyÅY31¸ûÔ?ͱ: je¼(# ÈfÂ8phÛ³¸æŒùœÃºí/ëPˆÒ'?5(ªLyª‚CÍHù‰Ð86åƒk;ëPwÎ×þÒA«yãøxbó bFþã$‡_×2Ì´OsûI¾˜7™.ò ·tÃù¸¦"^´»ÖÔw~‡"ô¸½5!¹M¯ÌlOº'A…lÒöbtnk7=±ç¡–r–×*Ìÿ]Û Y*¯áÃc_ë­:4ò‘Õ*Çï†dþ¬= ټܨ",o¦—ÉOL:ªÌòûuˆË‡óåì,†vYP‘j"pBâÔuRlw ­épR¼ÞÁfMðÌ1Õgï×Oú‘Å&ÜîPYˆ M4‹ó¦âµÐ³K^~˜ô ‰ ù³còƒÜÌÞ ª˜ÛŠ_]¡æŸ‘K>ØY í-f¦BEtñQ3JØW§™®ìЬ¬”'WÌ1ø,w»ÇN‰×4°°3â5Í›rÅ W­Ýé@Éè+²ŽC.=–ùS½œ¿›Þš#;“éáqk++í *Ûâ6kW6wêнË×’”T)X^†î$íš í‘#¡F‰ïTY‡:…Õ:0É+70t8×´N|ï&3¼Olkíš¼¶ŽI:¤Ì.›ã-¿ì¼YùÐŒ`Ü]Æ"2‰9c­¹_ù/OsŒ‘Ÿ ÛëP:Ñoó<î~®ù§Ö]‘~¾]sÊÖuN1•úà>Äoha¹ÃeÙ¡)t†WÍPŽQO,q)ìdB¼hj*•¨†îÞ®ÃDNR)Ì/ì„¥QhŽÑÃø‡??²ÎoEK‡üC¹˜gÊ…·½Ï+¦|'¥úù‘0j0´1§÷ Ã4@û¸ì¼è­‰«åðkCé HAñ;)ݪ½à#îB¶,öô·®Õ"êí8+‚T Jˆ-Ó+(X@1‡»z >S~ƒ×ÌÑךîN?—Vø¹¥LsÒö‹ÃQ%œ{Öx×Yö]5–£ü “»c£ô¯!äŽöÌÖNp3ÿ;g¹w§fn×S‡ òkhŠQüŽÝ“ãø¨\5†}ãüÃ.·Õ7¶ÅÍŽ÷N ¼b§WšOâç÷ÎÙ}H¢ÿ3õVç_û¶ãÚ¤É7ã/œÚ¡†:Î`;a Gñ©O[Vq&Í5:ìg×õ ¼¥\î_}'cæŠù†~¦,MÉ% HHÓu‚'ˆÒ#Ùå»ôûE"ˆ¼3,dÙè²&ýÃ_:gO\üøÛ.?=Øm#»ïMjuÎòÇEÔQžÕ~ãÜ¥‡ª0Bܳ£ ŽPíkþÁÍ;|.B"ØNާZGk Øè>›öò}¬C릹&* (NûCD†Š{,¬Zæ•{nÔaÎÓlm˜ËíxÆ%P.˜fÅtôŽè,"cÞ>9ôÐ)̪Êu³jßtÒ9hHmæUvY±oR&8` îJEòìâ5À‡æìhR)ìæk`Ú ›DJ@ùÈøBÚܛÓ§’ú;΄L2»uâÓtYω—}„$ï:)¬fœ®’J+Ï9šÞ~caçÑèŸýœÂídåVïý3†éíŒÑÁ+Îå› ­AàŒ'לϕ+Çj]˜³bZp›ì¿˜*v/ØÒãú´qc¾›}Ì¢„a\œ4—ÈÆ‚4îyÁ;¾ÔvEè:ÈQ¼ÅUa®-ö6~M^OÔ¢üöb_ÔÿT†hƒ?däVÕ¡ÒÓL× ­,M›V¬$u³ž¦\7|Iš—ªSïÜéÞúî'zñŠÑû[ OiY£i>ÏìŽÏxÎoN9’Bc-õßÒŸ½dêÝ.ˆÌñFó\°9|X ‚œSn›=7µ,3™§œ.K½H3 ¿ak`Ò³OèMƒ&*cwo:bð™ìšWÖê.¤[ÕˆÌD ~ÁQ8™wŒŸL[:ÊÔ»•ÆÜ#šX ©¿×ü"sßßOsÓÔ×Ô>´fTýdÉ¥úª ø—³µZcݺû/]ZïL»S¶»kÕv4ûßH²/Ó@<Þ„tŒîÌ{¶ê2œtH³‰Ë8û(]wÓ.·%¡Af?Ëâó¤¼ÃxX˸6n={óŠöIæ 2÷ïyïâ¿ä½'ôÖÐwÈ›ßÆÃ®_¤jì¯CIÙ,ƒÀ —á¶㜡.Ç8^²äiôú‘KÞ$ë]]-ÝÍÁ…E©tw¹z¤"-þ¥ãj‡Ê¿ÿ=Ø/ºùRO†Â§É ¸Íüótä­häÓÚv6û–ÙagIÌ|rÑ;¹©n®cüý”. ù=Æ5}ÆJ€˜Z‹[ÜÈ  ÅSre·üèÄ ü;{Stxïüå¿_¬·÷/;æêôÜÙÁþv¨þg¹ûp ë Í(gÛøÙÞ%2qsÄUx÷Æ'˜[áòldñðW-×à† ǬٵœøA6‹Túø§qw,MÖ½µúê‚]!žÜQý"ÉêÐ&›Å.ù{×bW!¥Ks+âµÌS”=&ܲˤ½X²m3þ"вiÛËãÒšt¢æßxvEOŠAO"I£P.„nX2øù¾R©–p%Ô Ï‘PVsPÁjdµç¼žº¯"V7°­¼ÿx™[(ÝÅnÈ8“¾*æ¿Ädbï¸\)&t‰_ÁŒqô´Þq†3:*ÄãëG“ °¤çñ¶W†úþt²Ú¦Þ^~7«àýRp,#¥KÞàôæ<ÇkÍÄ0ך††º°ñŠæ2‡¹P…bïe ŸK–¢®8‡no9¿â'Ç‹8,“Íò‘¹É8‡MÀH¬å<(w³óZÛâVmŒTNÌž;88À+Ù½Úxs,¿rŒ/•\¯¦Ã<߬:{«ÐU<¹-T¾” 3Ùš8ªCÃR².SücÉIÕžÛS¢È¿ù˜]4óéçÕ«ËF ¸Æ'£îÆÇEÌ5HVÚ!›ÛY·ˆn.ˆ3B<ѽ97ÏxÓ䈅Ÿ¤"%Sdʰ P 6ÔfáP¶]OÃ[Ú›„W.Y„ÝZ7Ö£j𜸊¸+{´óü„ÿ—Ñ]/ ÍdÖšê¯Ea-°mJÆ^Ùd›PÌ uÃGwºKÙ“¾Z]Wï¹ù´®–ì·à ˆÖÇ 4¢á+ÝÖ¿ÌÏô ÖnÑ$^-ÇðŒë?³ãjñÊâ87Áä¸Î‘f™(# Ñì×ÜÂ>{v£²3õKŒòü •ljd¯ÜùrÚ¢±;¼34C} 1Ñ›)u…þ-š~L7*€M.9ŒÞ[Ð~œ@ûÈADUïÓ*3¿w²ú|jŠ­^|Ф¾®\¿-{oË+/šÉâ[9黑…˽§Zm¾gQÚÒ¡èîþÏ=™o£¥ùQ1Šˆ©ùÙ$ƒHˆo©,Þdš1ûÔ×ŽéØ¬ä9u`‘ù›Oª/[Š«cO Åž¢»blœ1ê®ZÝδ‰ÑÅ#•åÿ˜>ÿ&øG?Á¸(Ê«w›“ñàZ¿Ïû;'ªß±C¹À\¾L±93cÁÎ/™[Áý,öÓ¬a,Ñü3.[Od?ЊØ-·6.TG¾Ö¡Â7”̧¯AÈbð)ûÞßó)sʬsrO+å?$yh*ºT¥×Idæ»1u­ݸ¸ÏH+öï*Ó£ÍiüTOõØñnuta~?õSmê-Ì}ÃŽß*ÿžãá9Vs·ˆgœa^ÒЦb3¬[×âSõŒ ×S·¸Ó&>³’ìÅ‘1óÎM‡;s·}YEÒ(¢ŸtØÎÛÚùV²ïÑ\‡b¶ºwo­†ˆ£JñM²þÀjèήéánʦp}V—ízêÕ0ôk("\X oè€*0˜@¦_ÒNãȇmŽì·Wá#è*£TÜ—Fhz[n+bÆlÖX+ýruù+³ÛRõ¤ÏÏ,«‹Îôyárg²[F˜±Õ$þ@;ç9öµµs´~\\÷ Gê0жðÈœíK¡FV#}1‡Ð+² ñþ‰o°N|vpz8YFS»r_ w¬Øå[øHê8zb~qªì¾ÃM:áUad-"ÒNµ…ÌÍ{$y&Ï›}á#½“$œÔª Dd¿ç•åÎÓe«b¾6èpÑ: ’dEöµ6ã©å¨»A .ÈxÜþÒ5ΣK|ä .¡Û´…J4å鼺âS5#;mð‘.ÁNi»½èº ʼnýðÑ´"¯Q0r|üA_<¾c×°»,¥´úiúÝË$9%3%Ø×ñ6»ŸªE`ÒùŸ™úmû¢¹°1ÒšNKjfè2ÐníÞâ¬.à±vøÁèÌh?;ý«×‹J<ÄõMeX#”¦ÓÉgþˆpq±>33:”~m>n¼úa1èÖMìèi[ŸH\;ùËg¼°¡è©ûK­åèöH¯ßÒ‡bÄÕ?4é‹%i–Aô[~Öï ÷îëßFË%¦„`½àPFRsYíFAz×¹(ÈÖúìsö¼ÑÆvñÇSR$pf9Ì —Fß$.¡ªÌcÀæ+{ŽN=U‡IxMÿ¼Ï~v±V[î¹rÄ&4‡ë0X©aœkšòZ=¦î…4¹ÖíM”³Å9ƒÆÏÕ÷ZÄ å? ƒÅⱌ°ž…mC…k8JÃ’TvÒŽæ]¥Xâ‘OV‘ÐX˜@PÒøì»ô„þ3TÕ±¶Wœë슙€ve(üd—vÄÆhQÑFÜ·¥*–˸ù²,óZÓ6ð‚÷ÎUí>ýúëë©Óo7»_ø3]0Ê1÷¡ðMúí%*ĸû_š¸\+ËÐ8 gÇA»fKŸ¸†HìqéµÅd}âòÉ:°Å9Û×\rx»°ú›¶ö­ƒù–+/YŒߥ¢{Îܶ\i6Îé_øÏþ‘¨{@ÙѶdÀ`ûdf n}`:Ø ›€s{"k{z.l›à…eÕ^sgü}u ÄP¬Õ†>4±rê-÷¿ðÓóPЇÃQì‘è.ÕYpk2Šî«c£bŸu¦¨^À êÓjLJ:ô®`ÁÙÚöŽ)pìÔ¦~b3æÓk¸èHøkÁ£Ã1fZ8zûfíã²—ž€ßgZÃI¬‰@ WWL…XDü£˜â^öªBTVo-xÑ™HïÖ!û_ ÍW//ßp›²˜9@³)h6ƒˆnL°@‘œn×®âeʺ²¾E½Ö5äC½µîòñzú¹"z:‰qœà£ÿÞ¬;±–k€òØêåÙݸ ë_‡­’RsÊÔÒ—ù‘ÿ޳Ùë’#|‡J“3»ðÖŽh'LN~š[av‡t¬·fŒÍÝS™JÓ2Û¿™²xK~K¯áÕwîz­"eoÎ6ä z÷CU)öÔ›‹&—áâÁ$ÂCì¡û#rn¥>Ûþ­C»dÌxØè‰ú=é.ž„Ô)1¨€ÂIJ Þ#aD±iñ‰ÞÕ¼§žˆ”À G}¦ÇÌÄSãQ8L¿Ý«:«ƒîô^TÞºHwå…Zy¬Óöt4}R‹×?”B4a8Ì}ÎÖâñöÛ¤K¨§Ax숩\e¿³mu]H]9Ô¡IéßãA#(`ZÒC w¾æeñÑóPÛµÆÚ¸ª»n·2pÒâž0§·³RJŸ—˜;èn !ÒÍ„pa>¾°{Æó÷¾>êëPåÊ´'lÀÓpzwÿÜá7™ý°ÓÛŽ7¤vœ2³5™?aØMÚ°~âɧ‡/Òû6„óÌë)œ_ŸVƒ¬ðÐÙŽý2<ûÂq ©¯ðñ¿6(çÂt±Ý\;çòà›÷ ³¾„!B&ÿ« ÀIàäéâã+§„œ°=sA2„ ²Øó~-èŽÖ!õXH/vÄž3“f»r÷¾:T*EégøÉ‹ãuj~¹æi¤(ñçx¼™ yÐE£ÈB]| aDQÚSO4„.ïà?‘LŠFå>–ÈË0þ•¶iGuïËtÍÐoÖaÖ/Nò1áÞ›DûÏÑ9•Y‚í.g@"Yp¿Œó™K×ò'¡HJA–ÂÄàâ±[—óç®T¶ÙÐ`\°ýy[ÿG1ìcÆmã8=o$Ù1RÇW\ Z:DÂiÆí‰)d7Ècó­è{e¼Bí1ê†\Ƴûć}„î×m{?9Zì7þ¨N˜x;2öç'çdw·°6{Ý´Ý3Õb¾bc.{Ä5ðu ´xúfŠë±ÇµlfHÊ?ðbqp´wè &J20\_“;'¡ð}°Wvìp¼Í»xyÜ{ öŠ•¦]æ’“Ø2@ÒÖÚÊ)ikÃÓËS£¾«Á}ÆôÁ„@Ы™»×[šX»üÂ~߯,º»îC lÍù¢áy”uË=ÞÔ†~ÊkÅCz‚<£{Jmsø`òÂ÷ˆ„«½Óú[UtEô(š°³b%[ ÚKT9s`i™ÿ];u³z›±IÊN!•3êûtÒù]ËkZÓfs«ƒi&3¼[½úi¬4aãT9>Jm׈â8”Ö(.¦Ÿñœ-¯8ó&²Ö⃛ì?SæŸkëï8F'Ý”&ô)•kª›D‘ãƒ8$ý;g“vëÕs\?R‡=]ú›5|sénsv‘Œ•/•/f½Ó2H¼/Ö#׶൬Ë.ºÀEQ(Só¹Vü‚ÇXZ¡Gfž›ßZÝAÌ¡Jé¸X€£˜Ž¤ˆ–@fuÉ™Hzt”¨rÆQF|>¹»î=8©½IwAç }™z“½ŽÃ³yÅGüÿˆ×àøof¸ê (íoÕÖ±˜½‘Æ“X^¯×J €/±Õ$ÁëšAád¸¬Ñ޳3_û,®C™ÄX饎#÷‘‹…G׺ÿÄrØÊˆŽe1ß8¢è[ŸÆ­ÒìŽZRMµ‹ï—}íz¥Ù"iZ΋F·OìÄß害§ã`OØÎ¿px¸y!¦ÕyðD8½)εñmÆ\JØlªÀŸºÌ‹Ö2PrŠê5Î}u’ë#¹çx¦†¦ôM¤_^&~|å8àœv0.!UÙQJ3|x1üJòêŽ+êÎ'姉šÃEl6;¤sÂΈDk™ßù‹id ^8Ý6QÝÜJ՚؂R˜¦°µðcFż¸KÑTt…5ÂÑåÈŽ2Î R&Ÿ§~¾²p(CKKÕ18Ôx øž8vÅc+©ˆ"xÏú™y¸œgÌsõÅò¤bÉkRÉUTyÛ%ŽúÒÖçæ~sr?C/5ÎtEöÄg£ ©x ýfOd¤˜r.ÉÔ1¥’)OËïP;ÖÂ䈰N®óLG—5C3ºŒA«%Ûh´‘»Ðw’êÂŒŸìªÕ€ªÊ·%{ÖBÏ_]ÚÕ…>ÎvIæ™dÁ’’SÖh}Ù©t¾³0õõ¨äe3åV}»äÔ×Ù=ÙGbƒ¥­ð?摸ÊÁ’±  ÊîøAö”L…Øò¨ïöDÁÌÍ©SáîëÀ…nghƒúP žUŸ;šiÿ3Ùd™©—‘#˜ÇÌʃIÅß"Ê‚çÀf°wŒƒT…‚.ŽÚ%[{®»Q£µŽP=N@fI-ͪ×Õ[³ýPú›Ã0™éL&B'€Ù·g˜¡AžG~$Œ”„6Ý©[•…N½-on!•!õŸ¶ÏU¶$¬Ìå”nDƒ9b½Åܱ•E™áKˆ<®Þלk(æYO¹kÌó0ŸwÏ/Å0åˆÌݼ’´™“TÁ抣ÀjB˜ÿ1¤¼Í•d¥1µi&…¹¥CψáíIËñˆY«óË1 Ž~2Õ ÓÃÆÕ}¢kJ´¶ò¨‹Ë슃À}XÖ·&½î£&Þ:¿Gw·;â,F&H€EÀC%‰¿rSlÌJ©A«iƒa~Û¢[3€í_Z%dÜŸÄnoôÔ%ðDYê=Ÿ„±MoÜgïÀ«Ž²7uHXÀ0i¹8j®¡z‰Ä8 –ß9§?ůi­R;èvf’ÇDœË'ò¦¹GÓv‡Ö•(ïT·Më:Ú{~Æ¿Ìâ+4Ï[ynÚʰ½í¿UÕü˜Bý!=ëèçWüdY½Z£¿-êÀ¯Æ+V^é+Ão<êf™ïP. 4x<«žÊTŒÓeÝ0‰8z|E¾ÃÜUYi67ÐRhZÐcG’8\áb1¬I./Ê`³ë5WfùÂ#30±ãý•:)Z¯)O*­~$ª"Û+&X”;È'ˆ_}˜UOØÓË_)WhMýÈÐÍØ½Ÿrœ*'ȈãC"Lì‹À·Rþw&sùp³ºfì!++Ô½†F{Rý9f¦ð£-˜ÍÀ[YñÝ;,owÖ6Àðÿ·x#È/r·ÐÀ#êqMlÇ¿ˆ·±dLKuÇÒÊüôÝã¿ìÈî,fÚöEȈüSO<î6{ë¾ÈÇ÷žW¹^Oó}dL¨ùi~M1€ÿiMÙK`ÎýqÔè‚©Ò2×vk9ö®}<ðE¦¤ µíz|L”Bj 5ˆ+=xì“|ÉQ°›AOW½49š§ËúÂP"¯ÙéUlÒOÆ»s (7` NØ¿›™ ›õöΡ·s·rÅï습¬Í9——¹*+qò'Ó'^[T²éqWm”ñõ²ézÖ­B?Îâəξl¿î—µžÍJ*(þÒ'ֲݙ#hì@;ÕSãï8] QÖÂÏ7UN£œ]óI2vþ§8¯_ÏN'W™q»åj1UÓ£ˆšmQx^ª&ŸÈn>½SÔÂ)íx£@X(œNÀÆQÀúJdvøáîš.ã‰ku+ºp݃ðLf |?M¹VGn>–ıÕ?e8ÝS®†)»@DRÎK£å¿˜D°¢³.°y+í ³ëõßmöüš»ßŒôú„ÞW«q2þòGV"xSÌB¡„·u²²âÕ†v©ºóL­Ý¿ö~ Þ‚íÇÍìßÊ[rÛ!:k2ÓÕžãuˆXÛºÖ ’@¯eåðoéý”mðŠÇRÊïÑë÷½'‘Q¦¾¾„ƒV½A~:Ö¡‡&um¡ÇJ@]²s—[¤Oz¨TqSÛÿÔÃŒ† š{ýKžÄq*“ßZ˜Â°ðFk¿òWI¹dq´h?Ë8ºèõTFâl%V¤òÿÓ•ýNbÇhO­¬ÑìÿTӳض%…u±·g¡#Ï¢]ÒáÁOÄFÑs†Ëì½nÊζ”‚5~WJ~Wš’ß•;¿«øŸKe™r€ñê¿6j9‹0Ç8Éâœ/4J9Í9’9+’Ÿç³rÆÉyÂÉÎE1ã(æ2‰æà‹•E–ÏmTr2ç@ã8K2N?N¢Y™Ù<äÌæ!'ù<ç\åYÙ5i¼z N†^}Ÿÿ’¯.ÿ—Þÿ««E8[ýé50.̦œ1ÑVýNœÉų'—vôøï„hp¶‡nãÄçby·ÖŒÄúœ7߀6.9«4)g`YБ)±gå=Y)Îä#ý~ô-‘å¿Õwù©ÁË€u“P—94ž8OìèÂmåÍa`KôM`B-¯m\¡—¢ô‰jqÆôÀV™Ø±8Ñ©íÏa÷Òä†ä³h EÝðÅQŠ1C˃˜Ä´ Ç_̶ðÊh©›Ø²0õÃÛ6ËËæÿsj cb\“{¿~f –rÇÈÿXö´" ó:ñ@Goå+a¶Õ˜íÁß7Ôû—ìÏ®eÔ-÷˜&Ë ñ~ËŒ:1¿Gœ°DÄ*XùVìI#_éš•2ÙZü–«Á‘$»¢‹‰ÕˆùG%!ÍX-ÕQ4ŽüニÓ'µl-°*>dÓ^=†/¢¼N³ µÇ1–iœe‹ÞœË±ˆBˆ _äŠöÜÂN> #ÝvÕ‹—·öÞX\4ù:hOD-ü"ÒÏo,¦ ˜’ÈÇŽüæóƒW¦€4Bj4Ñä+Ýòf œX1ãn-7Ð¥¿6Ü[fÂb[.+qˆùx äyϪÍ7$ü²) vÛ€Å, Ï—\æ•fW›ü]îcWÝ«}:yÍì4QnO¥îc8ß(Æ¡EHæïd¥ˆ¡(ˆ»ê‘,8úÞ˜g\5«nÐã²Òeö•N?E$!¶³F«Àp—ÔŽPº9dY¦¦F„–:×$Ñl×8G³Ó_—ü-/ Ù&‘]°°êRBƒ¨seØÔr2Ó¨OÙ‰šX±ü\ÿÃ)Ïòõ>x¤XÙc{-q{%.Œõ^’5'Í£¬EÙx~“kýÙ3ù ’çÌ[8¤J—oËE߻ͯ~5-DÇdJÔ´·j›Ûƒ‚gÄ$˜ hëIÔ«I0®¤îŸÄ ÉÄ[—ÕU –šWЍñü¤I)%ÚÕ[˜MöÕj»›B#ô»øÇÄͦ'wâã·zÉßß• «™¬?”$ÿt’¦²} «¡š2ú½«¶)qMzê1~5=!lbrGx•æìb•>­ÃX½Ð÷s±‰Ž}f7èD”Š¿ gK–­÷‘$ªçã¼`’¿´N©ØÄÚSÇåo4P-ÎëmDíh¤–QlÜÌl½w§1WF…oÑ×jfYÌQìHõÌ)þ%Ò¬HÎGågþ”(v1{å‰"lZÊE:h·^]ƒ±ïÞÀ—Ì0rjH"¢ /~®õ:§R0¦ã%~zöî²ïa]2ÕÌb¦q¼b¤q .½Éx;ù¥û2òƒ&²ÓF¯||ªõÂË–ýŽ:ÐÞa¢$â¨n£Ö »ÃD4Jà(ž<¶žÊdM豊ùDvÖxWîûÍáŽJÛ¬ÖU)÷Ã>8âznæˆ#Ûö’yº1‹vðœ­j„HÃéË6ìÁÙ´qöD%t˱çùbßIùúíØ“w°/aSÁ˜YkJ:b·nn«E/=îny:'Ę¡ÇôlÑÉ÷!ɑػº3øF¬ˆ¸¤Û˽ õÀûÜ ‰ÁV5…6…†»;[<±—¡¡ãƒ fMÈæf{ÂÛËSX.nÖeù¬]uUi™ù‡î*0#ŽgÞ©¨5dˆaÁ¿{¡›•Mxåã½üØewNT¥àã%<–Œƒð\QDDÑ%¾ã?¦ÉêÊTGNìà™ò¢'—6+ÓËðµ9˜j¦[0OÒàwèÖ}’§¼ 5]_”ä¸òäFñ‚Î<1KÜw&w Üãì¢ÿ„úJ­<ÖÛ7<Ôšïtà·5ùlæÕ¾ µØß¨qp67[ÐôàJ°[i/8eç‰^wÆ+7úËžÌσ—vAƒPÚd®•òš"¹&Ì™I!€†€rV]ß_‹8ÔJzʃ„ ÍX=}B”i?t‹QVf¶KMÁé Öôþu¥$© jb4k޳c:©3)o,éXįäOyb>(G._lQ¤õ°·yÔà`®Vv¯Ù›¢¯š_â QØrþ Ýî‰QH‹Àe0ߘ]Eû&³E‚öž™‡»ÚÕ¢"$³e’µIݱw`òô=ðxÐð€lÎ!Ý¢3)—)ò¢žzÎöa” ¥¢;‹L4U”Pc7—Å4Ï)|ƒðØa6˜îk5î¯í¬v“&ekœD4ú§ôˆ*!4Î6˜¯PøÎQ—äÖI¨ŒŽZkZCeNZD8}!­ßOV™Æ¹?kÌß-^>ª=ŵiÎn1V@‹tc« ŸY R/LjÈ^3ПÔòº®3š«RŽç°ÑŸ ÓÖíSçÎŒöÎð•PŽÃ™¸ÇCß³âÝ.ڜס§ò °‡HȲodé9X¸˜¶ª“GÊ+K4Z+ Á‘p›Ô–¹òl²å6†$uïB]ÈÏZ­öÙgò”ûÙ'UÅ—¹~x”â”{p·M–Ï ½`*&kÔÇÅx^ú'n2»t5³¥O–Àé,#%ÊØV9òdÞØ#š_D¢¤µÃ^,vµüåIohÜù±5uÅѽDÊÕÆ€,ó¡”°øä&òbtŽó)› ê$£"ÕwÖÖÅÛ¦öÍ]Éoì ‡ÉËa²¸¸,¯þÄ.åµ±¼ÈcnëP¢G*Õ®îûÓ)íVÇìÐ2övdJ ÚÚÛˆq+šÓ§ü>/¥n;ɸ—E˜wtÚÍâ9&YŽÈ•òLëÈ¡‘ÉüôWxðŒ‘ñ}““¼ ;xÁ÷BƒÉÆ•šs¯ÛŒNhQy¿v"¯î;Q ÒÀˉ<æc­Úd[®¦ƒ˜E{ÍvØrݶ,†e¹±¯ΆV°^ØÿÊ¢Î)o^ÓKeÉ$8£RyVó§ÞDÅZ¤Â´0sA êМ²¿(¹iN¹Srï[­r-d _Àsm“úǵHg£-§Ø…ú”“ë³(ŸšôŽ-Áälâ:øA»©©dÄ&æòZ‰Êì2-caþ.ÙMêßëvié •˜NöêUIheÿÇm©l*ç9¹˜AN,9`­ÆªµÅ>$~'54`2áYèäi39Ø]É|åªñ×f~ ŒÃæo;™™ûÜ‚›—Ù;wÌëíûâc€0JADŽNº–)Vj'ÏÑò×îl×KVÌÛ:”úŽ3¼“ç(R o2?×XN¦í×@^ÁU~[r…c:kƒ)ÃA/:²ý¡ÿz{—UÎàWÛÑtÁ8 V’}y†~‚ï™]ë§g+˜NfmýwΙ-بó›ì?ú™*Ç̘ùMP}°@}«C;Sd#‡ÐÆàчàZ‹ˆbøýá—~Å s¶ì­<‹Ã¶¥ ä«^Ìw;ö«åúlÐ_Ô9D¿q†m$FK«û¸Mê©Ô±M<±[VªÆ7(OLÒÇb©-$¡C-Z nØØçZ~ LWÉ®±¿ì]ÝÓYé³à&‚Tžê+KæZ[F<þ»’ù­ 3ýx@ PÁ•¹bojÍÐ"Kóà¯xËt»é¸]û.-Ф„†‡£"½!C$­ZF‹wGÔ©º‘=÷xó£û`W”¦êPÖ€d¹I´Ê˜¢*d»üE¦ Íýð\|N•¤¿õ‚f:ekË’©²NˆŸK—«@þÌ2„môãé'‰QOíù¥WáäÎL²R`$½w,c¦4ªëêÜoØ­’ÍKÉŒE"aÎ:çfxîÙÜþî¦Yû§qÉ ÿ×ãš"É×<’Bñ0]œsD ”ïb3y½D‹þÀf…Ä#³¼Åt²XÜUˆ0`Ò §åŒŠª¡™÷—EçùÖw¼èÁÓűóÒ¥ãN®æ¿32ã(ú/”L{aö"wP½¹~ýì¶É)‹™ÐñwLƒ?)SÆú¼Â4x›ž±‡+ã{H”ÐL´g‘ó`Fã?&?Y·½43ŽbÑ1ã(ù&ã™þG3':FÙÿyÎx\KÚ—žíeÈrÖDÛÊo ûŸ;Zr’v™÷=iªïus!WêGÙ €‘X!=d»dô™Ãµ >íÆ2UG·¨ã>Õ!Z¡g™¿Ü– þÄÇÊ/@§¬v^½PbÁ:aͦ¯sƒttÕ®Ê>J|3¢ø{H®Æ³Ò…i²Fq—7bKRzz>‡¨?]ùR™æãGªJ$òü‚³ÙË¡ºMÞ:ôäè¤y? ”åvîÌd<þå|¿[Û@„QloÇC½E@£0#F«-VuEpÌÈ=2w¶‘ÏÞ‘PÞ'.Œ”Ì“ð+{)ú‘¨êvœþ쯿‡hÙœ=@_`^‡Þ4Ôå…iD.Tjg©°î«uèEúâ(A6µ*Éf‰9s^fW¤é:ÞÂ6>°,ûîÖaêT‹X84Dë+^Cc>ºo߸ñ@¬¿ÂbQË= ÷hLP?1f/pAó]Ô¢XqNá{çe½ºÌÙØ¤F¡Wûî½é T9 ±}£Ðj÷ÍòUõtÏ)ãVÄôòIÒŠâ%¦÷²ŸÌ Æ—´Õæ·596£¦†¤+©û±Š(>š²´@ó£¹€^‘1Sˆž¯¥*3,r½…ýG×dWo¡Imƒçþ’??\ˆ£Ër°Ù‘Ïÿöý‹Ì!=ö3Õáö‚Ísb0p:OpÁ‡Cž^Û´ÿ°h¦|ºB":Ž”<ú—¼Ø~áÌ@0xtà0,If:ñüvç«O× …à°¯Z·,ös½ùøg/Ì~ƒ‹®ö柒Ðì¦Ìýª×¦~?|8‰aï®TÇ0©üÕ]­`Ôï®áãn 34ÞÔ²tr·Sl% 5EjG“•lèB^þ0º¤qð?“s±ìa:´³[çü1Ì Æâ2v/õÒ1Ra§ê“¼¸„ýÖptk%F¬ý)}¥3’°p»Þ"ή¶Y,P¡Œvüþª¿žÕàb åSÿ`ÄQ  ˜=Æx§vº¹)zgŒ2М';fÃtY¥Þë¢ÃÄtñRè´;mØÐb¿[!o eÒÂmŸÚÞV*µ¯½C¡6ªH§!:܇gÿžL o<«¸½€Ý.¹Œ tUàz¶‹¹à9zÛŠ‚g‚ÍUãü)ß“9s$:ùÌ»ìÔa¿)TGÿz¡\ÆÄƺ9‰gŸî¾¶Øeoº”"½jgèÆCöÙEöà?Ð,2Á+-Ì©¡§àw T1 ´ÇLX”(á„skçGXžëºf†Àí{cãméôp^ZÚ¡]f¬¬tÑé$s6³õjž¾ÝØi+áú AKd¯H¦³0O˜Kúeêæ€yAa4ÜÌláˆ(¯ !Á±[ØTÄ5Þꌖ9=yú¦b]cÙõf=›)`ïMHLª+µ™ØBšJšÔN=[ vrFR×ÀµNð¼¹uÄP¥1¾5¡‹ÞÎÈ+âcâ’?•uÌdƈV¬}­êûÝÏÌ7#ƒ~f¶×öç´ XBå!Dêƒ&)¢É¾úwËvŸp !†ÎÉ[v\¼À|õ¢›‡í¹½žeo‘Èr¿Ð:A"¼ÇÜ ª<íÂØ\“s‚¡e­k+¢jû&Ó̲iw5’b`úÊÞÏoHv[^‡š}¹Ûݲ¿üž?O{4|\Ÿ+_Å®ó ~5Ó¨Ir-ʽi‚§j-Ù´wöY/‹ 9r?·²Í ýk\»é8…qmñÞ·IÎ*¾zyŠÌXÇ‘OsÔ&˜q¦V£.9‚,?æ5/±¯^ÊŸï8°&Sƒ?dæŸDßÔ ¶À0ÇPË={âØ*Gwñš¿&;^$Jˆ\#÷€2æÐ2»ØËÙ»H<æT—Æ1Äqvr›èçƒÅ]0rû´a‡ÓÖþg«ñø7!Ès<´0pEPÅñÖåó¾¡,ê€ÅG:Þ–ûô‹Gms(Ø_&Xº:ôÊ5©Û7 {×÷‹cº, ÚÎHï^#YÒôrØ´Šyë;O†Û@Nòð¯?ê(DWO+À²Ë¾âå»/)›Éél”šã òañCíB'NNëùöÌìÂÊÍ8xFÆ$ºðÖÕ%¤³ù»x/UÐè÷±öÐÀ^ÒÔ6ߊBêçói?ÐÍÛ4°éúp&cIºÃí§ru*wžS6mÏöX…LåhÛZt‹»ç…ùGŽz  A”?¼‘a<<]3 ËÍhíR’Ô"KiE gð”×èf±”ާ­{¹x5ðwH^e3¤äÆtù×dÔ46OòÙï¾ê9¬[ÇþwÀ´òÅ-;?ÞÓ‡ép2 ¶­Ìá™›X£øH…j»úõŒ?–à\$Ó[PJ l¥èÎÔÓF²_Azˆ‘úY>õo9ã¾ÍÑüÓ?ïtÒŽÅu˜rH‘l/+RÇ'eªþNÔ~Üìm¬ áà20Ý“èJ™'R[f*sV¾R½xq¥:e´çGereÐ 4¿3yUt:Á8™è<Ù‘­©[oòSx 4[4²‹òh–ÈNÛs“(KŽ•JeªÎÂòÚ¬´÷’MöAŠÌdÛoh]€$® „.˜ãÒ÷Kõ‚j‹¯®ºD¸oŠêÆi½èÒmW]7àI*©œÎ©mмòà£Ö¤mªÝ›ô ÔÜ'·u€¡ÆÔ0?$o*`€o"IÃn³®¥‰Š˜õ[ ¶ZÖ–¬»$($úôíÀ¤þÈÀê*®öj¦ÙG)XÖKÁBûDUvFEÑ©ÍÝa—2ÉÅ×öJȸ9z ¼Áwcmù=LøßÚÔ ÝRx$«*[ä³›b:Aq®Ìm8Ì–A•ýy­±D=v Š—Â®i¶l+'3×£ky”.w8)Φ¬ »c±‘$ȼžFƒ6v¢Ì9]‰ÀæR±ºy¨o¥)õc\@:{(2bfÖÙÈ$Ø3®Œ»Ys²œÎ—ÿj‡âþ0C-3gžE. pc_»ÃïÝ™ØeæŠÕ4Îo!¦?_O•e(óµB±üï<‡ÝµüÇVÏê|²ÝÓ>3¥×סÍXJ!‹‹(×Nò”øÊkeÙO¢”¬¯ŽœŸçë©6 ±ì‰µÊ‘›‹ƒ7j«ûßñ‚‡¶ÒÖŽ…§N<ŒÕ©Ý©Ÿ±Ê–מz2Áª¤Îz‘Å-YiNžu»Ÿ0·¼„_âú}µðÁ»zùô/&#{ø¬‘›?q2Ì×=dÒ¶Úë¦å ØíøþFøºZ˜Ç149 hÌÄ`lÌ…Û6‡“Âö“3s¨Øf¶{æ¢ï¦G~5š}MÅÆõ"-óÁãÚŠ/)šéˆ£øc·iV8Lܵ"ÒHT’QBºà² ç““¹ñöÈZ”“£ý„§/_ÃÛ8+YgÈ|ÁTP4[ž×v°!¢šÅé×L‰±Úì/Í÷Ì÷Ü}wöâ`kHÜq8»P<ëš–ÉA¨Mv_ K L ±_'¬ ¯êûéäÉFŠlLªGLÉ.ž’*#Dä~œO>Gg®gÑ/6×".ÞP-¾+«ÌN4xðŸW·„cCG!©§Â¹Â<Ÿ‘-}Ø÷nÚüµ1NªÍµƒêX±iŽ3TãœLÌ¥ÀÈÎlqãÙ mQY;Æ–&õva+ỔÐý?r¹éÍåþÍ^Ô*0,äQÊô1ŒÿRÿ??îú(µ4·äî<$w3&wÙegåqÊ©jEÊî:ѼDžy™'èšSÄIj]uòmpÊ,fž², ¶Å‰£Òåij$cŸY:×ФäGóybíu²(ÊâK)çžRNþïr’Á¥ ‚:´5½aÀæÏ{Únv,)§Ë¢öjj6I7-}f~±k7_ëbvCÔØ§¦˜¬»À]ýŽ£ä³:2sœ èûÚ¯w§3F1ïëÀ{,õT·ÅxC=ÚFqÖ[è2^šN@$ÝÇrÜ„—~.oÕj~ƒ¿<¾2…·=˜>^qÔÆfÆð%”‘¬Ê0ûVOCZ[”|jŠ h»uxGüW=ÑóŒI†Œ/½ps±˜€⤅Ҹ-C ûþn¿îÖ…Ô?›R_¹ì«­ÚpKî±·ŽÝD¶v2 ¢Þ)Ê#¬È\·‰Õü&ä_æ$ÞöK=ÍÕ‹/¼ ¥ @Uþû飕™¿¦t ÍÜÕ·¦À½‡M%ž[Ðc.œ_écfWzÌÖ5pè¶Ì}AúÞ.m¯ $}iúÖ/ãÞ8ÿ&± ñvÆK^šد+ èXܪ}éIL¡žhéXû`‡Í°›cê@ŒŒæ×²»yû÷šPõu`EÆJý.¾Ý>yÒè’X‘—àx…..ÏÖŽÓ¿DêPûÀŠ.zzE¿Ð^ÊIÀÍ#å€\}‡¹wƒe›º±“Nûö5¿Áý»ŽƒT¥Ç%3¸Yyã?ÁÞÛØ¾Ç•µ¬y€Þ@.Î~×a ,{owÓ1a4fï u}<ÏH^65‹kcaS1È{Ù/ Õ+¾qnœS™þô”ÃWáç V’ˆ™?cgŠu´ÜÉ‚éíÞ„J6Šù¡:Ìçaï'•™n¾—3³æ·ÝDoÛ*´óUKEŦÝþ°&Œ ç¹Þ^“—¹äÏkM ?ƒpWª7¸Ð­6®dtmî¾{|üÒžÔÓCQ VVϯº°ûê”ÚãXq¨F3m·3ãPkçõ1'°6³3“ðçHíMQë©§lãΉk‘VΗÓ+TÖ×¾¸Q‡ÉU¸{ŠnÔ3‚CzÀˆaVÆCHWþ‡ÍQÒÈ_`˜ï £]ÓìAa‚Û†z§§`q‚4•©UþžãkÚw•F;•b°líìƒ1é%õEÇf1ÕãgkNŽÐM»æ“i¸q¢[»jyeÏbÏvñdmC"8i²©½Ëýjƒ6ý%i7ø@1l³¤JìZÛj•Ç•¥d©+æØ½·N´ú¡©ö Èá™~NßU±»Í©Õ‘£³kÌù9l/ç^^ãÑ5¥9LcdÏu„³“"d‹¾aOJB„wMm„9ª£ë!}aã$7ßL>#LÄLVf\;[^Ò ˜cK ·±¨ë›:jqÈãÃÂûÏf¢\¨jM÷—øYoר:¥íx¤žòí~"ìÈbwH}´ñtdIRƒýD‰?G%¥æûkgõ4´Ù¶­6†tÖ¦}Ç´Éa;ªmö˜»JôTŠrRL¬B£‰©î›ð•Šß†îS暰Ϫ+»P†KÞ_œHL°]i£ƒ°:¯9ž[ÖÏX"!ÔÆèqŸ7˜.îëP‘Ù ‹XËQj-ùî- ZíÆêT@>2±í¢_,ê©…)+ƒ_€˜wè0F< ½ŸÉb’§*¥¡[Ü3ÑôÑó ÃR¥˜WŒZï^n#•ªê6Åà=ŽŸó©Ìeìûíª•:¶äÀ€±q î½ô¤¾Û±QòM—’wòT 'áD× }YP¶QF‰#Ö¢‰ŸHú¢pT¾ü¦ÒFÚsöªºcNøzës4­¯Iô¥:¿U‡BErf3Ž(aF²Ÿ&®:­WŸÉª1ó½úË?{§è=¸áÞSDx=ka’Ôk#µgõ6¥KÉ"ŽÌ‘éú™ÐïH5ò]Y¶ ŠOLú–Õº£”Òˆh²™U¯®z0|]Ðn^-FhÑ|†N1×õ÷B6¢>q·yiÕ!C<^YÕ>äî¼°çð 7°4´J$ý|‘Âb©PÉ-;ÒóŒò.¹Ùm¿ìö®ìËô1Þ+f|B{»!¥É†RÉvÍm;ÆÖ3¦±a–ù7àLÚ¦¤t&z¦"[_Ë£±EöHór—{ z—@„› ž¹Ä*° J'|ÊÕ©À²Ã¼Ž³à“ róêÄ vµÁ {s'ÐI/)d²6ÏdVB¸:—«_¦ém’Sogsð¦3c†-¥¾ p-ÜM k¼nÃŽÈ_WWïR|N év^c¯ו V˜‘Çç¸Qà@§Rþ^Zm™Ãå>-h~£1(¢L—¶Z§XÍ …\*ÅnW8”¼DiÜŒ«c?µ“ô»b· :$û+ÓgœkH^øìò„D ÚÆaŠ´4»êh Õ¥ÁôI5ا+s¼eÒìäu;ÚfYF–`Ìçî­þ@ÏѨúð]ÑEÅÿ<’é…P2»¯œ@ŸW_ìè™8…žÌ;×Ö6¹AØ=2ç> B®yÃË>]4g”HNË¡Ïoé&Q÷Äcý|›vq~ŸN4c>zø}vî²ÿL¿öðö”¬³;{€àcPoyLp܉k%™l1ÎJØ N5d¨;áü¹“`©a"“Ê$Æuh¸Ã˜ =÷Á&³é²%šĈ@-ìõHiâ¢]ï¼)Ñr·7ŠA-Sºyé²]—okGôtpÑkuŸL§•CrÖ¬·W©5B,¹dtqJ™áv~É·¾ýL×%ËLJÑDÂ\´wÂo”—Ž286¹7v.,¦?wVEöR8ÊM‚*Sö'£Ýë€.Ôåo{"¨˜‘²MîøÅµêx¸Gï¤xZ«Ö“—qÒÚ¼ºvnÂmØÒÊŠ1…³£bÈ£a àDùAÆæÌ=¼c#cóD¯Ë ø?s´ÄßZ°à=ÁÁH‰Ñ•"2¸ ¡UüÀÕ ¾ñƒîÆñ:¤|IðUÚ|·OÕ%EtvÈñtß$ÂéñW•I+—>õ¶åõIkÅÿ¼:Îy¢’ì™a–=ìp‚Ò zÏÂ=ÞLCÉÍdÙõÊ´ w“‹ÿö¼£\Ÿ/^d÷çÔµÒ!ÓaŽSó³öíŒSxwÏ' +?‹ç,'=c)B³÷§¢çg*½É|š™YïRU$—–dR´“jî„ìDÚ–%ú3‘£¼¦ºaZ9¨É¶;â wx÷«cz ô4H\ºRYXþ6¬ø6VM˜œY>b²¹ø¨D0ú?Zx_‹ØävЪ–ŸÌ_ópEîè^x1½¢ÕƒkÀÊU÷?šÏSÀ ù)œPÔlá‡ÝÓÀñßvЊwcD'ϖ̘xJÇt"-2˜›æì±mqÈÅfâÒ#AmA1…Ô´~é ”hŒŽ£_ÿ'd0ÌÎL‹G€¹‚/s9Iz_Ï“:ºS*‹c2{ì—T°o¾gõËŠÎìð8å§Š$§¿•@ѵô\$Ø)¬ü"}£¡–wçáÖ8E4Q–¨ÁLÂ~@7ÞO!{“²Åü(Ò,Ïh×ü§¾V­´TÜ!Q‘ì{?íV‡”(NdØ—ƒwžÛ‘47m¥æù4 ZŽÝs6¬«Š+^£4µÇ*t8 …<}ysÍíïƒOy¨ …ß{UŽÉŽÁ¦Mé=DOùD+CŸ±QèLî§!¥ìx÷”–ÕA#ÀB±|29=}w¥’yQyU±mk"w–»å÷HbVwŸÃ_Øâ…³€Þ•g t{Pã22IšemÚšÒwgò£¼¢ëb‹L\šéÅtµÍÏÆŒíu}ÂJ]fìzçèÂ^Š.Y¨5ž}­mŽï0\e Ø)ûÐËa´G´A½xÂù}ýW/„**O0zä”þäÕ9¿æˆ^ŒƒÒ¡GXšLá±]vÕ¬àj…¹<ö:_§g‚L!Ò'‘¦~sü!x°7àì ¥‚ÖÇöÏ9Ž–½ùN³<ѰDà—ë‚.–óý‘5ŠÿJÖˆD¢Iö~ÒIOŸ‘U‘¾6ÅÏÏ(÷‘É0ÐY¸S~ÆÌ-phÏÈ=$<™ø-C1[ggÌIϘόžQ:=GùêY9ˆ´‹dõ9h³$Êøßy‘–‘fY®Eš—¤kdIáßó"壼LܧŒ£$ã0¤$9 )Ï N[šÅ™ýˬŒbþK:/mRVÄö/Y‘–dtäiù¯-âXë—éÿZaºµ?d Ó€œ7Ò=_r`méWdƒÄûùO–ÒI¹Â<ð8c=‹Ýf@›bD@s|ßž<Ëæ68m‘ÔMlZ×ÇH‚ßq})ä½û"®¾ÌØÔù¥e©w?6™òõ9Œôa…±;‡åã˜tÞ³?o,¿ØØ“ïöo,”~O-/?òVžS8š_Šc1s~/ ÎuäÁò4sdá^;&¤Î Bë·’åM³aÞœœï¸¾x†ÿbÆÓп\C¸goNù‹´ð÷êPîÎuï1+X×û—oíœ{ìÅ\ØlïìÿfÏò•—ÈͪÇlÿ܉6ä ä‹° 4ìû ”4if™'3¢9ظ8ÈÆ» F:,&§pAÅãðâ¹íšµÙW~Ü2ÜD/Þ™‰Šãå£WRpô¾ðiÎ$Wê-4`éZw㯙ûÇ‹‡²w…O40Wò½í¸cÅæ_Øíå›õ`ûëæ¦×ƒ²ÀÒƒ1MXªrCÊ7NA`p§4»|bq†iTŒÈ ×£çñäùÅÁsÂMhþóÓâè]ÎRÊd=ÙªHä¶øíÛ§ [2øý4ßx¼¡ô› tžõ‹}°>ìîJhõÄÁæã"ô@c›cÀ…~E‘ì(]k™5¤ ó¬ý°º^üÍ8sçízo‹÷náñ#f „kvŠ<-¬*ù`Ýм:Žf‡~NKz8XNx*娎Y­–BÀ»ˆæ<š{j+Nf+®ý¡/8Xe£»ŠPNö´“L÷qõ`ÃÌGœþ®„j®‘tØ((nN[k×OÕù‰–Œfw8ë;"v‡'ë¢sÄdâÐÏæra߆è‘C,ˆ¯JïÄÊ&lŽH—µDý¤'hÖ©wÆãÙntêg]«åxì”1ÿý8­.{é$q Á…è£öcÆDôÌá—#æu6"æ³~ÎLb•Wõ¹::Þ ïè¬)%$‰±s³[[«e"¤lNÏB0òÌ#æƒ;t#Sôeûƒ'ú^ú 9祗b`òâ™Äk9ޝ<Ä™šI¢ØËMv‰dÞ)/¥}PÎOÛ®ŽQjlC;ÅìÓ[Ç~g¿$q V&D`¢mEÚs2Læ1`ìý˜èŽÛӮ磎vœÞ¯EQüaØ[¨{Â=£-]·Þ\tî.DÆí"¤Æ÷~ìØŽb±#Þ ¨™ÏR5ÙÂÚÁžy_)ãaµ/lÊ^»öÕÏp|¯ #¾ù‘/a1Nˆ*…6;‡¬oÞáÑt”8—÷äk1µ3ö—§¯’#èôˆì’KAþìŒDkn·öÊÎq<ÑþDɰ]Ÿ8Á˜ß×/0;”L×ô36[{v×É/ÍÎC“Æhºúg8½*z ªsð`á<ÄãÅé°Âå2Ú4·ÅÙvDº{zf™Q+e}h@¸%9h®¯±F%™&ïaéêµë#Â?¦+eS¢› oKI-þgË´ÃÉõTÂÔÚ ðzmi Çy#8}&xÌ€XÓS8k¾GŸêP =¶ÖÔ†ÀÀ+LÚ­–ñ‡t?|}ÔqÅ+‹:Ta3‹&ü‹Öª«U4k?Ä”eüÜ—Z̪݆JzF»š£©mê‰ßÙZ;p8¦œËèÉÖôS¡§®  ¶:Ô zj–yÑ j¼ñÆ&ô€ìXZätþý¨°„B:¦´¥²Ñ–py–µÆ2ž°ãK“‹ÿW¸Dð^lÙKÔb”ýÕÉRFN@j‚³¢Ì•§öO>½(¬7=]{7æyÍ­¾ ›µj:ç¯Nwö¢„Ý7£ÚÀm…›Ç!’.^¹I¥1Ú~HÀYš‘Ÿ«±­AÛæÿ C²z—~¬Cƒ(«Ô,?|KvrLQ=ÉN‡î=õÖn’˳P°l£öåä2Ïmk†³6&›×«Åm7ÙŽ¹òDC~Á¶—N—Š«ÿÕÛ3.ìA¡»¨Aô®ô@D[ËQ>T@¥lB£ì´?GaC«ïõEa4(Ìíé0ßÂêV†ÝÖ?bsÌ’ž¥Ý¢Ûóp©OÑc:vÃÁÈwÀËß9=„ùÃ/¾é÷âÓ29àzù¤HÃ@‹fò¨8V´·ÕU_Ó\?Q=ÛXAcF÷8¾½ XñÐïšÔÚX£M˜á'.Uãß:Pm-mF)Dÿ¨}`¼KƒÅ9m˜!é€2ðA]wõHe™BB>{`I­ÚâË.º;«C-w4ÛxR½{hñe½:í†(ûΧp y'¥} q¥¬\ûò¾•Ù R<ä–,—ËM§–C@+sqè˦ô‰ ΪãT+h«Ü»4dè{Õøé;ÔžçyΆ£° ¡LW̉͘€ø²u¦¬Ð¸–3à ½ê*ÀÄÆä—*S„(GA¡³h±ëÃÊn3öè¡åtÞfnÕí/1{eålÿã1«Ë JÏ<‡êaï –ÙV¨-™J‹ó˜ÿT¢ß'·Âc÷q~¤ªCceA€­D|¨ŽUr˜ŒÕ–àFZ¢óÓ1 ;CfdõÑÙ¶<™1?R½lÿ–œ7’èCÍÆ´:ƒŠwN͖̋siÙØ‡ƒÏ 1 Ên!B “E$xÏ…Ý8€ Ì]l‹jøÌ¤åžãpµD°§3FÄeæ‘Ýò v!*¡NB Uª¤«ñcÙû…¢ašpgÊAˆ{TlóÉñ°ásÇÛZ2Qóˆ=4XéÒã0T~inX”Þ[<„/ÉfÒsWiK9 E]cÝÓsÜÑ_ðéR`‹ãøZ@ IK¹ÉÂÎMo¿á©0¬ªwͰ˜Ù+’ÙÐ!î·˜„ù¾'‰E1_~pˈs’¦(B«Å|ùÅáµ?‡UâT6¨O”ç ›æÕð…Ÿª¨€"$o à®ZXDäî°«Y)è w ÁCåôàÙßÅók9™%ï°?º5 þþjW—,³[fÙµ%SœŠ'eÌÒóÓø÷E¶-´"@}ÆŽÏSwxáî¬M˜ÿêŸä„ôΞzµgªÜ¶ š™¹ÛqƒNnÌ€¤ËûŸôiÉîÇ0d£È`V?œàŸ »ÑZC¬wÂ]Ñlœ—:õ#j1ŹÏž¿ñtõ+8æùQY}‰ ºù ‚µl†íÆÏsöW©#ÝUç¦+÷ œçÀ³«Kب]œ;zpyã*ÿqË€.¾µPzoš>r ¢ëR,A"Ù›`~ÀE^H»kqàzº¬7Q†1Ç'?²0³qØB‰)lGÀ7Íÿž´Š“ÿš´ê»ëBЈ B¸Ùj=‡;?»<ƒ·ŒÙ­Æ®ƒ<"œ”XdËÜöÉÙ;Xºg…0¶W–빪’¹ª,b®*ž…\Uºú,.f(!N¢¢@•oÍ™ƒJÓ¬@f)‹r~^äq’2UÌ™MгyÄâd–%±e»ÊÒ’Q³ÜRO³¬`,žG…e¥æyžÿkjjˆ‹ÿ³`г}ñT.åhlSHßÅÃ;HH±£ýr˜“uMÛ¿½¢6Ö¡ ‹ý>øûåò«\Ò¶|0öaá|µ¦€ˆé5dzêÐè®É*`c³|#ˆšú±¹Ó+¡Äøl)TqV›5À<Ò`Îʺ^Ö¡]­…37Mà8æ®^²°¿»±Ï¾ß•@#rMÒûËYOôéâWúH¿a‹î,Íø¡¡:æþq^e“ﻵ¬Õ³ä¬‚D!æ a[äÛO§â¹1Iæ5Cä•ÄW±É«‡uÀ 8†aŽÑsCs‰§ÿ7±¿ {† ‹Óœ—B¼¿[ì<76Ë&*|-ŠÙ[\pÀnÎ^Òl4.Øæ$ÿäk’ÑÅÅ7šSKÆš_åI§å[ÏhÒ‘Àò¯žÀlmùÙšðïœÚŠi&æ0ûo`ï|Ù½X‹d“1›3Çzꦦ- Çd³ü=ǧѲW>Ì¡úºz{ù?2½Jˆy‡è¤°/ös$#}Q&pbâGU½ùpÆ]‡L„›rRv èRçëÐø…âÝšú~÷Îegß°¾ìà¹JbËû¦HKí!›Ú”§Ymó`ô€×SNÒzÕ]³Ó(þ±„d[oby­ZC·(÷z¾¤½Ç9.®ËQ„‘;G•£ÒFÜZæ †NSíÂåÚŸ6¹yXB!iÜœúÒ4@58z<¿R‡2Ë2ŠwT7¾ÕÖï£I~ס ±ŸO¯Ì±GsƒZ¹Bµ¤”L¡1IÜ…Ù{´!Ú§çÀ?#ØŒ­G»%´)Î|še­n\•ON¡Ž1´5 b²+sû€TäR¹ `õ^…kst Ûü•N!V6?©åãw¹œ­Gò|úѶ˜±A/ÞÒÊíý_Ǫóvšß‘ˆ67á^¹ÜG˜á«¹›ÚVh‚+*M°¶»Ü@³,¶&ž=­`FnaS«–RÂKH…ò1(Ýhd$«XÉUìùvüš;¶¢#á^pZ±Rl¯ük¦~-Mò 2ï#]WÏy ¿-ô KÞUGMã;Å2Š@b#\D÷T±$ ?/¤å¢Ó±À¤ÍáFµgg ‹l1ñê _¾Ôâ;ñ osÆrº%mž¢F‰yš•êjaäM¹1=—\îÔB#rÇún©´éQD"ÊIÁMÚâ7üŒqŽåØò «G‰Ííìöãâ²YTc*ât——'³]\U‚c¥;¡ 镦²;ƒúÏq8‡d÷1‘ÇEŸŸX¦ëë@5¤ËLTŽIf'Àl‚SúóW‹ì:O(d<ÐS“#v,Ž˜Ò"4KÇ¡¨“=XÉû€ÉCgf¯.ËÇé2¸¿0ñ­Ž´|ßUmkì÷:g7½ô¼ÒgÑ•ÀdŒ"ÁsɘÚIjÅ=k$ lýŽ˜R=©Vzí^¬iܱ%ß°¨COÀ2gèj Ƨ`àòÐ`ë2îî쬹û5Ή7(ô¢‰Z o7Bƒ¿¬iåÔ{îHô“( §¿{ý»— ’Ÿç‹ §YUkª—Â!z½xs½­N¨–Ð-Ìu2Çö8[œ*KbG¡œ³ ñôÉ$EÑðĉ;½Ÿ³ÅS«^ÌR¾Ò˜e2#Z ü³Ã.®ÐZ™2‘,.k Éߺ+'sQþ£ÎýøMJ“z&«C7b§ãÚàezŽMÅ!×µ*.çÇžLÐJ2` >pÏc~½q‡³•U œ½ “fÖ§£±¶">_¶M×2åL½! Æ£ËYêÐÕ‰¼ŠÇí¨ÿi«×ÏêP>̯þÑ*–àÑiö´J+,„«Ý /ŠhB£5EEškõ[¡®•F@éLr–|­‘ÂxJ{zŸÏëP0âö„¾¥þn‰3bvÉ¥é2hmdyW mÃÊÇ?—øeÏ.º v·ÖLœêÜçé&lÒOOëq£Cîñô¦ñðÍsKßju=­L[pá(ÍÏm%œÂQ6€ðój»÷mÑÒ9ÝÌ{…¯<€]²N!9LZi ᤹@á 0H£ü\}‰ðäK6<žÛg§vÈ«c¯êP»O}\(õŸºX¼lvÕ¢ƒŸRÐw½³¿s<™ulv6 ¡¾åðR6¬ìÌfšÝ-½؃çäêÁ@ŸŸðäâY[Âh¶Ü:3iÿ(öÎ_…> |JÒ¶ækêÝ—½=Ù%ø8 &Ûe‡ø)*Ó˜€ð;µŠJÝ"Q!j©±]¼£o^énè·¾rV¶„ƒ”ãÚŠÅJMrÑFCµ –¨©ò˘oœÕj®½aOh"ÛUÓÍûgu(BƵޛÀºÆ-8ÙQ³»¡vË—êÿ(.çýœÏÆ;Õ›XQôq}È–ù´(Ôƒ ¸!ÿ2i5Hk#”x6Ü"†kº-kÊ.;oÎËJ.¾˜þ³·R#€¯0•e…Jm;€»^N+É[YyþÅñ:”… h#l”šv°MC«b%Û 8%³É 5$Rf„wÖ¡½þm'MÅ*zU¡¿~¤íãú—Xÿ>—ÛÍ~Šú•±Žkðþ‰ƒp=W,p§M‡}¡LË›…ïh¾ý-;^öÒï„ØÄºŒ·rィ'ÊvýOZÆTPc½V#Šº­ f¿µ>#žlw0ä ¹Ó Ycò$JŽúÁ:nrogã xðsÙY­©½{§å™ÜƒïT4EL…].¢ÊWººEDÄ":Ru¼°j4Y¶ ë¤)£?¶æÚ›nÐytFt>Á %ú‘|b¾œ›~íEó9ÓxY Ó>ᆛU#­—»Ú[·29¦Ïؕ⓴u05êF~Ú9í¯/j¬EÏO7„”” ]ù*Ï<ò^*¹«´2_F¦Ù /yGeBAéu±Dà ç)í7žØ/ r oàƒxefÒÅÕB'I&ÇŒ†7|j1q}H¤ÌùCWöÕ¢|xÕüÌ*w·'%a»¹ÁûOµYõ€ÿù©WyŽYðëåOÞ ?¦g¢[µ—|ÞIæu ,GéÓ È¡Á§úß@ì^”Ó"Îoœ É_iŸí [dFï|›íuà…±-tcǤŨÞO@|úæä•ƒ0ÍVv£lÚÅŸ×"¨ØÒ³«~èTžÔÕ*&ǯ]5÷°¡ƒÂ\G>L÷$»ª«§ó˜éã’€ýc\èÏYêåµ(=Ú†ÁG•‚¡ÁXó©}Óz¼Ž3ÖØ¿Ö»÷–³ì–Göp¯o曋õÔ•Œg‘ìçíÇfpÈ}lŽ),¢»­’¤M0CÐx©t'=6}2¨¶Ç@´8Š+ºòÍäŒÒ-\P€.€~«˜M‹†»c“ú[Ït|r!ŽŽgëÀDã@¢ÙëiçÙ‘ÚUInïãEëMù„ÁÜz[ÔÖÁ®@{N³Ù(}$þûAP“Ÿz$ÃýcÎíâcܨƒöçÄì¾N‹üÃí }ÿL6§voXù›šmË-óš2ºbÔ+³„¥cågi“ÝU2Èñr+âGÿÜš‚ iðÍçR¹Úú­½赃7Wäv;Š?Ï÷I_x·}{Å.hVçzžA@¶ûxMûg‚ÙÚþ·ÙÅÉá€ÆÞr:åoºfÞ€ûtñ°·…ÄÔR…²xPÞä'müL S£è~S<~Z‹Ù˜Å¡Ð.Í\XŸìÑ\ôãÛ¤dŠàf.ìÐz!m¬¢'ß±ŒYq—zb }%ºæÄ‚2èuî76d­¦—ï_ØqmÍj¨Ø;Ö´ ÷™ãLè°ïkìtëÄt(»Ë»+9SÐÉ¥üc>½7¦iËo“ë ÀAƒ/îï:T 2ˆh×¢Ñb,S¸»ïÔÓ ºþÖºéxWâ1¦Ïxyo,ûãñíuï†á‹(ñ¥óC#¶Èt¬Ù›êPá7—¥Á“+sW`ïîïÐS+0ñM ¼x‰ ù­„íùP‡.*0€N VéËÞ:T—3«Öý¶¿6žMTFÖ?íÖÓs‹Žêüº£ˆ}„Q¾gÎÕúDÑ+×áÙ98´˜73 SÕ­m¬IàA6ò”œýÁöé¤èºf[‘⸞ có§Glîç ½“{È›þ2E*ÿÉ5Ñòà#w[`Îót(³y¤?ͱ÷~Bðm9PX9>}»”6¥ðÍì§í ¢åÉŒÈ÷wN„Ïðì~ž°Æe{RJZ½Qr'IvÑoºå)}™ßàWzSGè¾x + ,Ÿ]¶ÏÕÄîò3]0´§¦û@›yÍÕR]3²°Žÿ¶S˜–"yrÒŸ'¶Î_³TÁöŒ‘‚®d›-¿lˆNO›±ÒÛ§üñµšØYë×–™…q9Wöµá/þ LI½Üįç¸Ooêµ¹‡¶iœ¯“¸Úúí²¬|6Êæ¶3 æ|ù‚oþàÞ¤gš(Ú£§¦Å {±INßÒ&Güb9KvÂþŽì¿Oünì5-­s%¬ó3>^T”èÏŽžÿÍÚ€uTœÙºïÙꜭ]öÇ1}(#öÕÆ©18lÒwœG±ú,)¢äß(¥?}4ÿ¿…ÓsCõÙZªEÊ\Ä_; ®Jù 4Ý{k²5!ïÜŠX@¨Ó˜WÝy¼n[]4Kõ"+ÒêôKwÞ?š"* 'ÏE¸;OãGÀ·)r‚oø}òÛuÈ–û¤“u.L5s}ÙÁ5_o0§˜1}Õ–¾†µkºö ~aùbgmôZ—Ýtµ8CP‡|˜+ßš­›ÊéÊ!ÿñwiþ5ëfóêÏ­é™QpõkùÔÄ»(AÑð¢,ÆÓ}þmi1!Imme–œÅ=»2&ÙæÊRµàqûÔ/xÚ|ZÚ gÑgÜ”¡(šÈè¦ .Vt¤òËiéùpÍ›¥)CÎà"Ç/6=a»x7 à þ6;ÔaIfà§ÆÌðf·”ž›+îYsØÜóe=ø%Õï@f°åo;TðP›¬:u·V…Ðc8–ÊQÎ “à ÁB4w0|…¬€¾z$sË gy¼ákˆ…›2ü2rÛ+|įµQBq›8šbÅrþá‚Öˆó9É¿l-: ×°šàÌò˜à{¶ÏloNwØXfˆn]×;L…Ø·?±”Z%XÑQÜž~#N¶pL†ùkbÿ;.ùRA:Ÿ€­H‚ð‘§£ªCùFÓÞ=¶ÂÏHkÁÖåôE¿_9´<亜 Q¿&‰«Eúg :D7«~~s1>:€IÛ”)²9P<áG„mÀà*= K#â-¾ÚCºË,þ†sÝŠ=‘bùŽ£J7[²ÜŽÉ}–û*dºž¦L[›ÂY ¥±k{ÍYŠ*¹X‡òξøBÜø:ÎêÒuI¬‰ L%õüâ­+Ó€Ÿ{ì@‰í,ß“ ÂhW±ÕG“Ÿá³xçg`ßÓÚZôŽ®²WÛhÿàÛË"rxø=^Qq.ùF.ÉssØ•#é#=Ì 6F.GœƒëC—ø6 ÉÖ¤š!PrêBÌÅÙÖïòšK¶3¶‹Â£4h½—“lwé/8ûj…È+'.‘¯ažA'‹Û“€m…ZW‘<ürÂ<ÓW¤¶yúYÿ%UÒÐIeÓ÷Õ¾Ÿõ\±5'™v½5žäSlúElmñYꂱO_ÑúaN÷5Äë¯ë˰o[”£Çope=e—‡S|âéʢA>™Uæ_œVœ¤5ÅùáÚúÿ83Ôw:{H~Ù›Užsx ¶Ììì™#¹ÍI'òµÖ°%ŽHnH•╸ÒHÇq¼P.]Ékv—#ÆWsÜ»ÿ4ö¼®õ£èÝ–¨î°€l´D%Õkˆã¸wa'˜økKmÚ57ˆ8›c¿ø¸z~|z©1A:s8]‡˜ž €vüO#aÀèQ| yÛìùY@b}GXÑâ, ŽÇadûß1ð-ŽÝÛ4¹+ÓôkMÅC”PpH3OÌØÊØ|¯ÝR²U÷L;SNgç¦àžÐ(ÀßE¸5üJÍ„ ^¿EdÇ}§R†lÏ “µ$¼G† ”ây7ÆØ‚ÇmíOÿZÎ\£ÜrÒœ+žó<;ôÉð«‚v÷2Ü‘ÖrŸ¿q½µ_kßÕ¡Y ‘}¯<åÁ/ß±7ƒHnn8Fèæ.~ñn@¹pp°U‘࿸¹ñÌ”ËötüqGËX¤ôÀW¦œ²ÃH×s—çwßVr‚’Ã7¼:€z~µÚûÞP¤³é1=có<ï6ºiºÐÐæ×›ôÒoé;ÔV·§ôcT/ÙâozÈ= Xü‹’V¹”¼#_é§Z]<^!ùJ„¡@ö^L‹×–õJŠX(–¯§½‘­Í~ÈÔÎJi>á íxaÂP¬cGuÓÂËÌýÒ'“J‹Óý†d¾×Óz€^Í±êæÆæ•y;=>ëÑ"²&|ÄÁ$Gž”Tî‰ÕgÃøÑÄ'·ý±ÐájHªÝù"ÙØØceŸTÉÇÝ~˜2òù5åpçÜD¤žð¶…ÚöSè ÝrÛ±†'æá[÷ƒéÊ(/ž”eŠñé\´ðN=ÊÙ­Ì=ÄòÑ„hÓO•‘)dà  Øt‚_<Š}\ è%ÍŒx3Õh.0ÆÙ5ôí@¬b«ý'Ÿº‡}$8NsJOÃ»î¨ –p8§FH=rjí¬ØeíhýG‰I>¡©QþÖ¡Âà bX ÿÜîòÝ6t ~‰8<"aRHiÊuNA#T°¼R'r,vûãݶB#+7mÃøÃ8 ëûO:ý3͕ޑ7 Ú)L€fcÓÌD¶l‡ã‰PeŠ lªa” ø)¯2 )C.Äîd 9f;' Ž@lW~V7;Z‡¹°¥öÃÓó0">[¢‹w>­CŠ\´pÒe{¤Í9Xz6NÆœ9âÆb0eÆ€P:¥Yß6~ä ‡ôÌ«äÈî”Iñê¶ðêèzˆÁîbé [‚v͇læ»ê5³¦% nÓýOpËŒuî7;€’Øš»‹:×Õ»dèàð¹7íY¼»2IÔýQWÈúé¹¶ºsg4þ3Ký ¯\‰^°Ìžåî?!±F&ôÈoŒ5±NéÃv¾»“è÷6uÈT¸Æà/3•çE¿#wÛ±aû¾¯ðgù'qù¯ËÆ Å —òŸÔß í$²7oü¸šñ•ƒ¾o‡Û®ÀÖMÐ×ÞaÖá̤²b+ã8fbxxêPÐX‡>>«õ*ê©İ©Íçä­d özÙø®`F;¶ 3Àšq_ß>fýÇÅ›¶ž|”Ñ,}˜'¦ô^ÙböÕÍZzy,ü°þ2½Ûö‹wêÀñâ3߉²EE¾±Ç`Aè2LóÝ’øþªNR϶ƒ|¼“»p«z0'hˆxzœh‘¬ž…)¯ü /ÏXÕìpõæ÷ôTô[×?²SÅ>û ¾1½e«ÏpWé¿q}váýÚÊøÁæ.Ñ´Œ Ý¢µ%#H†9ðLh&uð~G7TÁJžø!—2䦧×*ºb™Áãa‘7éÌî½&!}fîÇ`øù{pÄ]ðú7“Õ*W[½¿³ù ÷MÆ‹ƒ–ä03†u.Š ±ÀYËõ¨ôíèï!dR~EW8ÒžrHBðWoöÉŽ½Îu`ÎîÉ /¬Üë0d³Â`.Èg{ÎU`¿ãëäð÷ †Ñ3¥cx>îÁóþŒîÖ²á|kì6›)ø½Ü€²sŠ—{°¬'¼/¦å*pܯ1_²o0'&ZKL–ȘƒzËö„%TÚë(ÞÈ&÷>U'`®‹Ï¢Ž§ö2N$Ü€EIss×§Òçd®ì7º Í9C^ûÄ6$å”wf/ ˜ü¡ÚaŸø•=Ø£Þ;:f¥¨)ä/^bñ9列vÖC7õR Söo™\\Úi§êý ý? ÂÙ/¸¯Ê&ß­G Ïì•8~èv­%=¤Gcí¥Œ¯Å7¿Ÿ{õZ."+°3³¤‘%¾_Û¶Fl/ÚÌöNáG, ,ÌcBCé8C¹»ÏÜqÑ£ èi¨Ö°P–г7WT–.«a”ås”¶¿«9jöÇ®üÚúY½´WKуm¢ûlŠ/àøEkÊœ3Ð ù6.Èûž¹¦ý«DºõØšV¿sÙq£“âÅçË·Ÿ=.»hn‘Ñ"E8lú™÷BÜÞ óþ6-j» …^³iï†áyè_M…†!XéPÒYˆ`¦ã–)¹ÁPÀù–íÁXñeTC°RÜŒM'h›N-Ç€þãµÂ3"~)ýÁ좞Úí‹wb¶ôó_l¦“œ•ƒAmÁìÐó0ÎÅò.Ú¹¨±”,×wàp@¦—T8âü™vvX`&~³éJ(ýfîÞElG²é0›§ ¤‰ÁÄÛ4å9A‘̻䂳<ÒîäA¹)µ”¿Á’cwvRýÝì¦{b÷üºÊ¢¶‚u¶_si ÑGépQV>—×t‚•Ý@²+<´å= IØyÌöaAC¡¹YßT6³©¤»QWýy3¨ù×z Qôð~u¦þágM‰A ÛËÕ…úkÎé¿Õ` {x/]¿¹f™ Q™g²îheî5ó:TuéÉCü¥dîÈ'iê0g#ÊÖÁ`3¨Y•?ká|Co>·æÕާtÒg?IRìЖ Zlé\]C6Ùu5æ@Ö™Â÷ÂJ9SfOÔäÒ^³OUÌQ‹žVÅ›ÂØœl¸ˆ1°F yQZ’þ]P ýãŠõr*¥Ã|ãÆâÅÕIçv˜»:bÏ(viîOÖk…„w£híÜô9@þ|Mw³;•筢ǵfâmœ°íôËX×0¯C§Ø¨Eóƒæ´éPâfë¾jª`'.Ý7Y—QN!­Ú( Üz ÑÛº†D[Hø² EgçÌšû¢C¾aH‚µ¿£ áNÑøÁ/û ¼‹X!³¹®Á¡h=ñ84ùƒïÍN¿C4•X‡‹çCä0`6V$zSCÈGÝôGëz±×$‡¾ÿøÛ•àeÍÌX%ÈÌÞ®%Mû@=‘åŽãÂN,Ù-Öÿ³c’>!ð{ŽëÊ~TjÕ’…씸Q<ÏÖ|ö$mgµ™ÅâŽP(W\™ ‚MÃí˜ë*» Í9܆bZ˜«‹›FEu4ªÃÈÈ>G¬^,nÙYî­1¹˜ôíp¨F4vkÓƒÕ£¿î…Ejh¾øµXT§.La·w賋窑ûÔ¿L/ôÍ¢® Ó Öœäï5•Ndg”3{3zÑ d÷Þrf“E[ÿƒ:ËvþgrcÕܳ9$DaLþV'LŒ_ÙÕã3I„iT­á×”³õ¦²sÌòÕç'k™`E#&×Ú)رdœ®!M‹b¥ÇxÇÕÓwÓ5cfFY•¼W.Ïeˆ{†#Ü–Ýæ”®Œì]¡É<äÇM‚ˆÎ$ÎÍ`›ó)ðtÆ ÇÌm6Hï2I®`×@;L ì-Ŭ8"0þÈ\¦F-VNÙ|QÎ*tO¯SØ/¯.Ëì(ØÀé]ZöFž/٧؆]ýÙÊt:cdxË8Èœ…îäÛù›+•‰Ûd î¡¿9›p«¡éo1Rþ^m…¢ÒN®­Dô4Œh¾¹G„¢Žü‘47 7'{ß$»—ÞÕS)˰—ÃâƒètÅ=oëÀ²‡òè»ýËßËzâµ~ "ʃKÉÍy&¯—hØ[9=²ücomݤß$ÀÁRŠcKs£‡ä×äú°ƒ+ɳ=ßšò;>õ6ÕÎç±Êñã¶¿ÅZcOÇ+¤öQ½@£ªE{£a(O€7ÆêNG™Je×ãxj VjH6õésàTœC¬ºÙÃGöq>²7vhÿ/bjܾXKʨT£ô´C™µ‹ÿ×c‰ZkÌÚ‚ÌÚ$vfm’Y›¦ÿ¬MfÞ¬,Nþ× |°ýa€)ΠÃ…›ì§œ¾æ‚þ92EH( €£™jå8B¥ð­“§Ö *,†= \&œ/«Ó r—ß\ùüƒò$×¼'ßÞÖ™‰6õ–@»-çEÔtöéï ˜‡´Í,yµ}Ĭ1%zÑûõR¥² t–æf:üveü—žË7ÔöžM ÖŸ3'åI3æ(îèÀäfÕ%°ã^ÞyàùtÃ1òåí®ÐñùWZ÷á¹Mle_G??ê¹E¢chƒ8´§Ÿá(|×"q:aÂ+±‘i`rfæׄºu·õê jË á­‹œ›éiÝë.Ö› Ä¡ X¼†Ö'{–q²øôb-Ì,ÕMCS²²äD&?ÀOËp¬}ûZòŸ™'[Ž@#°h!{Cêhö‡ÞPkÌ_Ö*ût×upa®p›,Î_òšObè3¼dµüâÝrü¾“5°„è?\}T×*ˉB"Â.֢ޣ׉ZS¹»öÖÓ@g`E[Së[Zs¼_t™ýä—Mø­¸ðï±kþK´^ì•%™¥°^_r…¸U[3º «)äP8í8xP»œü1¤×ëPFKÀX •ÞƒX(™2«C‘»Hô,sëmí¼6ÌK¿V˜XÌw¨È}¡/:©r¶U®/¶¼H5É”"Ò²ÛéV„zÿ‹¨+5øåýôð%Sf,Ü|v‡ñ‚ô>h“”àD埬ÏÙ-ÂfkºTß¶z7hëb‹ú½­§á¯DvT·:ŒÕÀy,5– ²7w«Ø¢¸òÙZ[X7:-œW&P\<€{Å_frÛ@Òûü]*ß™_ü‚nÖ@f\¹]θ] gh^Ì>Løö Cb Ù ¶Òwo”r¤£òû›/À 3Ñ+ßã÷PB¨yÜÓ*4ëØ£ÈÖ L Ê¹w*Çwu&¾Þ­§Î:ª{vEBÚ_q±³œ‡„Þ’)%Ìç"l½xw¿\ƒ•bßœ2ÌœnŒ­Ìs‡òŸJ´ŽÙÂèrã¢ê ~„>C÷jR¶D[ ûjkØ…Ã3%3\{s<„•í43[+ Þ).­áø »QÕÂA62àlp6L/k³sL@ Ç’pß¹!»œ3…^~r¨ç´iÎ-XÅ5nXÙ>L^a,.¡íûÈäMHPš¶Rî|WÜøQ¥õ5ÇöÐç)óGiþ¬º~Ûç‡[ük³zž c¸íI1ð†µ蘅¤è®ûýŹZ ’N?ü(Ķm¾Öÿ?ÊÞ«1nmG}Ÿ_a9mg“l’M:©ÙÎ9çåÀè,Û’œÃoÿº Rgæž3sfζšÍ&WÀ …ÂèçRMÈ@‚å`©˜{ÍtÔÅ»zPK-ý©˜iÎ]kgͰÃÇœ=F²Çñ·<Œõˆm|ï1óoÝñ[šPxÞÆ¹ûkÈ$9þ é$“ýóÁ½¯:áêʪôLÄ:ç€ë<Ù†¢—€ËÛÆ}CËŠ´DgªæI{2#Æ'Ö¨®õ»¦fMÉUq訿RœêW:³!zw «%9}Ã.Þ!µ·úóU‡Ñ Ú㡺p[QM©ñVU?m ]­i ¢+NÝk<š¶Ë¬Å•Ò)€)*¢ß¶ "Ý­‘·Ë¦a‘œZ#ZP_n°å5—“ÙÌyÃ}a”›èºewfïú»ïn„Q¿¡”6ˆ÷}ûü'†"ÈGŸ¬_ *œ_˜Q*aU«£~ó7¾9ügÿžoj3¹æÃz¿Ô¿„…©=A©³ŠöjHëv7¨“‹÷Ø€Ñwüõ.hî #ó±ˆ74Ìÿôë‡7zCæŒ~é%Å­+¯ý…;;ÃLæö*lÏ#üDöׇþv&)(ÔÝú.ôèèSÙ—1ã çl}ËnÉ: (MòΚ=éÅÅB,=‡u©Õi‘E8« ’EsG»³§ºÖó¬6ê?èíUÖG~ Övo^ î9›‹Ý€ïåÆ(XÏ©³È¦ëA/hãë˜÷2þÒóëöx}³œ B˲ä6olM/™#Ó܉”³Ž_ý0SféîV¦,†Ò:þ³<Š`ƒeó„À:Y¹s$ËOal“e7=9„í¥¿äÌŠj8ódzÞvxhÿˆ†}r‘¢óø)ó¤ÖÐŒ<¬mö«¡ P×åI ì3±þdOcÛ&ö“¤»&iµöhPéÀŸ›~Ͷ…ëDçðú^íæº±v®-qª>x„S|÷ʺBåÞª–•­WÚ Bþ\«Ö‚•.n1䇛a½nKǹÛ$ÌÃØd•Ëj˜ìl/²¨åùžÙ¢1SÿÛÖB/æx› cIÆÒéLÁÜҷŽÐ¨Ô©ÙÌ,åÎ8a _ø­02°‹Êñô4¯Ì›Ú‘"…©†?–hÐMò±‰‚Ú<ËhÇ??Nž¡æ5*mZýn5Ó‚È›2Æ|ÙÆ†mÌ>ÌsÙ<‰ÃH' d4-°´Ãä —íˆ7 6À\õÖ˙ܿì°xÓ3±f”~e ÷ÝÅC®ë¹Ì‡ì½-ïxР¸_ì8Uùm “¶9g²ÑéLèÇl¶ÍwÙ¸Ó\êX`kÉt-ˆË|j1À]„Ì BÀJĽÔAè‡,|V¬[œ{ NaËÉAcœKl‹”…I訴ÿ³‡ ö;qDK+Úc^¦³UB½[ z¥ÎðZc§ÞGíÓ´ún†Ò®)ß…©)÷üþù*ŒÊ¦vžÍ·©JÉx¦ý¿ævû@ñW±°£MÐhA{”ÿb-Ù7E: â|´£ŒWùëƒÂüñÿÕ©,LELá(bØÆ&ôs3hFøÌc·œ.ëe˜Æ „= ·ñ›ÓÌ]î¥×èÄŒÌ1‡ø*|»jÝ–ñHCi´ˆše3ô‹ó,ES¯"›Åøw™sþ=ÎÒŒ-½ò<*Êÿ”%ŸëÕãÕeÿ£¥$-ÉÅî:;§švýÆ´?!5‘DK¼ô=¼³Åç‹Mõ윾B>Oƒãƒ"»9jøÉ†þFšÓ '5CIr9P•c®­H{ÖØyÇ"èaxþëoÛýÿQàËtØgÉ’Ó·â•ûÉÚ#ÛÅÛëpÙƒ¿ÏÆ«}l SŒ9¿kªç{qóÊžµs@¤.ÁÖìªÝM°7Øw°èåêá ?ƒ?­rjzgòˆ­S¥2»a”*Ax±Ðñ.E³ÏVXUäô7? 1çVA”ÕÅðϾJ©ô6ªìãÄß}´zh;§­ÍÐJ¥°Ìù¬ZÛ÷©fæ®tŠZ''dœy¦’þßÊaoP”Öõh]çèØ!¬Q\Ī¡ú"‚}:`0ô•S2š«Ågr!QRBóˆ÷¥ÓÁÊÿôãà ¬üaÓ! û¶RVpxÁ¹;¯1"x@2Gút¿‹Æš…»Ãöà1¨LÓGI‡>7& ã‚g¦qèªO<æñÍž`º\Åpˤ˜ÑÙ¬šûÖÈ’˜?¯ž$Ò7$ßàíº!èÝh»:!Mÿ­z‹÷Aµ\Ísq®çˆãו™þ•`8YwÅ£ôŸG 7úúiµd¥‡NÅ~~ hWÓ>åB~©‘¤&ZBêãü†š õPíã2ýêC+/ŸDJQ—blÆËI¢ožÚ6ü'«©Ém/Ep¾ùSý„©HÅ>qLéÔø#Å …ª-ö ¸g‹Gœø€ÕIu³yÙŽµ¾DñglÁ„fÕ×»[ Sóg ¢¶¥C‰Ìð¦ÓyË£Žö8FÓÛ ë˜ÇÕ.pcÂ?‹36À}öŽ;ðŠÐTÐxh†=ûAçÃÁŒ1YYoñ¿#6Q²ö6&/BaÑ?—¿…üZù½Â©HS‚EÃtȾb¥ý©XFÚ$ÑóT~›g'²Sž¡7…¹Î\"‹Õ¾œ×r뇫‹ê”#ùi¾TgƱ·#È£]¬ÐÈíÝ9öì¢A¥îR¤2˹ÚJ顃gŸëµ¬8ö`Sß'—oÓŒpÜ«Áz³&!~ù…ÛÐÆ ~“VïSàU1úÜ’}Èž>”Qk„Š8i’åƒïN¬¬vV½»F±–!úEÌû°b‰²bõª»­ù¡ìmØ*íIÛ±F™góaœGfcž6/+_>ZT»úô|!û\ˆïµ³k3Èiõ˜B •-Y¶‡áœ‡õlÌ\UF ^[˜ðŽŒ‘¸rÐPÀ·!xr½¢‚tÔÈ;Gc;»Ƹ6Fq5xôšï¹_y¾'€˜bÔ$¨2Ÿ¯l³²öË2D$w̪k‡§8!BÛ(.¸!ÿ­™£€ƪÕ@bW·¾ÊP•J÷Z~Cü s_ì–ÝYBB/ýã³Öƒñ5*ÅKö ¿m73‡Èø49«)ÛÆâaÐØj!µQèo[×Ãj¶79($t5a,úãÿ6OH§c\…Qt×c—n~æärâü/-ðÿèöñãÀí Zídº/·dzY‡@;ƒƒy¨ât–œ¯N,nÈ4•#?þíÝzIõñ:ž‚‰Üæ(:A.=“@^ifÕÁë….÷h%Z‡n|ÄY;^¡«ØÊ3YpÉ'¡)>HU²ŒÁG{6Z¬8íÄ5üÇ‹;²Ä%~”lOž{°peF³jNˆañ*B‡˜|ȨÕʉzôç†0–v±Ÿ<Ö“ôÓ³ÅDñ¢«š”°ùÂÁñ€,<Ûhór#Ïì©»aq<}{<æÍÅXŽxœýÞo¦µé¯ÚßÔ`æŠH ìdÚŽæŽ÷cì ©Jm|–0ö'‹‚³Ù)É©ÕÙ\óÁžÍ¯aÙ„vý– ;w(ÔóþîÌ•œ4} S;»äô;‰+ÃN("R5‘!ÉÌ­E,ø(Â(SÖFˆœ¨@QñFiG )Tˆ;ëJo©gæ}qŸD€†TDGÍ\ÛE•ÝŽ]t꣟ř½€¿vS.â Pf,ñ³û‹_tUжu9¿Fõªoe~å«]‡¦ÅJÉ å âþž_S˜Þr|çäg½ «ñq°üOdP½¦ ¬Ë¼h¸,ûŸ UHZ羄*SMµ€¹¯Á6@…I¿ï?hÊWJq1vlº¦Kÿþà5rkáµ%ÑâÝ{‡êoÚº.D{iqží¹ò2ŒõWAèÔÈÅ_L[Ñ‘pÃJŸ(¬, $2œ ª¬…ò4Úcæ¢ëÖ½¾TÎV™î £šA4'fp83WÐ(/?&è¤nXXn%Úa„Èq²M¼k>b§¬³_ÙÏS︡ëBTý@ÍjM2n#f¬}²5ÝÈQ"+‰áÂâ‡ñzZ ,ô|¾oâtáã„Qzªžÿ{§ÇŠÁrì€Þsè¼¶É”’ë­t;(wµ{µÐ}”:í­eݳ0¦†ù©³v `nÓJxòlJâhéròS÷›“1Ì >>öŽ‹ ¶*Qà8LKU•Áúœ;¬uðHMÆû §'…M‹‹äzëy°¼ªGšMf$îÁóbiÃ¥=)«pv„½Q{WK„”cHÄ”³Ãž~:…w¾¯-<¿6–[BÈ´‹ãò YÄçí ¤r ëÌ"KQ³ÚC¬.qÿe”ìrÝO'UQÏô3…!Ãq´Üw/ˆ%øôò íºN{5¡ƒ*³Ç–¤\×/}1õI_|t54vzNe˜ÚÒSCK!b³ Y°Û7I-½j±„4Ò0f=™"^éøaT,'?bîèúCÌœžáŠãçæ~z(Øž$’¦L¸ô¡áaò «Û„M†ñ#®xŒ{#B:ƾ˜­ñQMégžëÑ-¬¾„J;ñ£þë´ò†X7‰‹7û–vƽÚúÆÍYÑÊÙ,ß¿ü=æ!½1YÖÕÊøgi{»„fûæÕE« öûTêáÃ7?j 5Ýd‹JÏvÙo~„U\ÊEWÉ«ÏeYÔ\¶%®¡6Eë~5C:–¾álX…+Ë‹rèñ‘€¥Ân2ÄèÀò›ì…p’²}òq2:C·ÿKýÿ¾{ E”ž•ÿ…Qq~¨·¹MŸÓ­Å®… Ç€ ‰WÀ1ÉEϲ|×­dg¤Lð ³ÁÑpvGº'gº§ˆ,ÝSzºg¶z 8Kfóÿª/'Q—øßlžáßYÏ#¤Š2Ž˜þÉ3þo™ä²?Q6›Eü"Nù—$N|5ž¥ùêÝWÿ1²ô?eˆfñXGý·1zïªþšK]‹ÛÞ•kl&(º_î©Â?WdƒJÙ)Meû¾ âSù·h±»žìŠ(¿z†—í#Ý7IxjnØ+{¼}©:ûtúœúσÙ=cÿ]»_)­ÔM—‘Ý›ØßÂâˆf~‡¤»_ÆFåó a¬¤lÓMöáði´Ë '.yÊ6ñ[ºE<];U=¶‰ ²™`3Œ÷Äã?NÛÆC¬®®XÐÁÈ=y[ä¬^tô·¤ºeé»ÖÌcƒX©Lç;SYµ—Q¼¨-õXfÕ3V¤¶X½Úˆ”çD\æCËó(^\‚¡cn¦ÒtÊ×KàúÎ©Š”³ ì¿XVµ{",ÎÛZ¼ÚOØî³-9¦M´ñeaÀ #a¬:HÐÒ»®I¤·ü~ëwP¥ý8>ÔMrG².qŽ4 Ai.¼§ØŸ_þ¨%ÌT^Ì†Š·ºî$1Bµ+ikþcé.Ñ<üska£O¼§¤\¡2)¾£,+𑽆uÙÜÖ –X”Õ÷»¿…eçrVIÜð1ÍÌžÆÙâ IfÌ2¶ŠxÇðG7p—ü:ÃÁÄ®åúbú•ØÙ̎⎺äŽ[hì»ùW®¡²»áŽËäü\ô+„8ñ¶ÖÿA±8ãò7Öí¯±eçäuX•ÝÍ_ ı`nÓoÛÿA§íÊ x¶õW 3 _6‚´ñ~Z(ÑÏ@¢´–Í ´ö8H·bR3*á»Cƒ\)9ò^ÕÂ)&u]Õ¡C–€) ¡-¶U¶~Å^Öª°ñšºòÒŰþÅ.ñrq0ŒEt] •ný±rç8âöìï ” ˈ,ܺûÀÃeyuËÉ] c³5ÍçÒnÙgª*£K1½&”M¯Ùh¦xýYÀÌä pk‹ƒlGÞÝIs »Ä-©%ÈjÐL>áªäéº@Òåí» i˜x"¯ÓEÚ¦‹åÞZ_‚e †Í­ËÄËè(çTTYWà Â?ÕOõÌõgœºZ4ü®õdŸÑƒUB‚‹¯Ìáûò†µo‡lóEÃâÒq:yPØ4÷úŠY’,·Àá¥Ëf}ôMbŽ!èEr ‹ËËîMí ÛEX>€îéL E5$5ïÏÔ¬¯-!jÞ3(QQd³Zçö, Ñ( ‰3O€® Yí]VÞLŽ"¼ÅëõÛpdàåÕíÕršõ¢^®ÃεP$iº^3Ù<À‹‹o½ÚÓpñÚ´Š'¿Ðf -­Õ*úgùàÄQ!ÎÓßÎÜà …/Y?öƒº­XtZðo΋ÌÇÙ«!Hž¾¶ÃÍØÕðÓ°Ì©ªÕX™¡R¸f˜Ï,°(÷Å'ìï †n£C¸ TÖÕ{ïá˜d R>ŒdÔãÊÎM¤ƒ• +åôÙ#ÊÞÌÚ<Uí}®'Ä£ƒî¬Ë]æÄx…%ÍXzq©¡qºŸ£kØ-¬2Nìì$—>ÿºwYŽp«=#Ù]¼ Ø¿g™Ø+9ÎCXµ ’ć/œï&QåáURJ^døf¸÷ŽŠ6…“Ⱦ Š]£9hw-Oísüç®@ƒ¸áÌï5»–t)~ê£ sº¶NîZòEC‹íâùwуÝü¸QZ“qðnêÛèæ~|TKú¡u¼¢mÂEýMÜïZÞ”ågЄ»×mî[ÁÜvŒkÉh<+F­ÌÎFž—áxDCæK`Æk’¶ ;ÁkÈ¢,•Ž‹ë'Iä¬ÔÊ=BV^NÁlVq2A­vG¸³båͯ®üZLñíÊŒþ#¯*²•Æ®¥¼]m ›K ‘»\‡Q†­‰ÿcñR jDJóX!4Ù¬ÇÎøÕxöM‡•Ætq”vª­`ío¾í]~zA€ÿÕÏ0M)NŸc;Ä,EP–`(~„Ió3Ð$iň©lXŒ¿{ûð’(`”,Ń“éù>ùQlƒáÞ­ ,œ°‘›ÙŠŽ›)ØVv¾$•¥èßÐ5Œ—/žJ?Ókz˜f}Ûzö‚7¼‚Ù«ñÏþfË“ûTÒÕ…*ºáØ\fŽõbŽ›Óû‡aE¶#$Á¼‘¦ˆ96‹¸¯Þ=±|~=Œ%+”‹‹´õºv'ÑK0ÚQ:Íæú¥¨=rfùY›²M¸*v4)&ÃbùÅ¥Ýèz=â³ÝÂv?»´MÐ;Ëkö@/κ—ä²¹Æò)ª8vþ¶&²ËË{ò¶8Ù¿… q¡C n¸[_þÑ›¼Vÿ]ßä¶ýFÝÇF(F¿c ³;KÛ€£JddljÞõteÑ? pñ|^’LëyÃBMÄœ¶%ŒœZ0ÚpEò8„å“»:-"û”³¹ÿä÷ç:]X¬gÐqª’°íM†ŽŠb¢\d5 ×øƒ¬—|Éõ_U­l<a;z ôaJ?¡ñÕÃ-nÎ,“•|úÔý ÓÏÆÒÕ9’…PeqPÕÛc­ÌÔ¨h¨ê[¾î;µMËŸàMÿTO€çÏ´3ûWã¥Mn?ò§[C¯»æ42ΟàS˜0!üZ¹þ´¿Ç¹ºåÝä-[÷³þ.>ºd(Œ:÷Åú…äîòØe·hYúql©Öc±XÃûÉ>âw»ì(ܰöù­¥9TìÖàg»†‰rhoê`+‹P*Uœ^˜gRÎn,ÍðÀ=²”’øÑéŽú¼bªqòP¢•^\u›_ÁÝG°wÙÿAGDD¿V´‹À¦ÈË06 éâ’lÐìÖ‰ëÉPp’ÔÙ›½8'ÎI&ÖæÕíâcØ8µÔó0‘ùk;…)ÐI¤·C“dŒ+™äDÐûâÿ-l/wóùò¶Þ;eoXªš!H޳|9˜e0ÍfZbEºÜo?k¬•Ì~¬ój‹Uü¶Â¨:d„0×îDËÌöŸ%DN›Yì û÷ÍQè'ý”"23Ý=Ò²uóë0Füà)UxAê(áÊ'~e¡“ëÒ´r½zJ›D ºó‰Gaæ;){ZÿÝÃ8à@4ð~ê0@ɵÁ¿jf[a ¨ƒêv+h¸†ÖÑS¥×îoÒ|ä¤=µ‚ ün•zwY‰ÒŽSÊÔÔ¤©—aŠePwØS]ûÍØì|;ª3¡Ëz^¥ºæ³{ÕÜ%JfhÉB휉8ÿàû×=ç+ý\XkßÝ ’û8óáVuá/ãM|x+¨C¶Ñ,B&Ju´¤Ë꺰êØòÿ*³ äÌVæsÃSú4£´ Å~öáú½$7OëïCl¿º‰çR~hhûMç–Â] ¼Ÿ^à¦"=wŸ>ç4ü¾ðFf”¡<Înèê}×2¥æ7s½vl¨ÔG#ÞÂ+‚uÍñ<<©2?æfÒXàˆç²'ôE>¶Ö4i¨ÞŸÁÙZ/E!j$š¨AózeàžØ22˜jx´ñœÙdž0}r”ÇB§Øˆ–î²<]ÓË%¸À„Yæ×<±ÙDäÓ½ËJ90.©«ÂTXh‘ü0ŒI®S¡EGŔҮùuˆ×ܵ™·42ú7éÑ¥hòvÛNQÞ6>KÞÏ7¦ïFÂ*xu°kî˜ôàtMSзŠåàf@þ)žEG]§–ßOŸuùnœÁ`ζùúò—žÞ%îÖ0ñÕÎ,Î’›Y¤7 c8 Â&dÛt7|ôÙÙ›æ‹Åé¹+vt–®‘#4™ ƒù‰³°?'°ÒoW'ÛÎê±Äò‰3æg³1Ÿ˜"Ÿ˜[60ŸÍOŒÓ¢,çÿ)˜9Àø¿½Í+Å;¬¹êe4±uý!ˆçE¹}S&Þã»s)ÿƒ&xK‘q£5ÙÕˆ‘•†™6Šx'œ†¦–H—ÄåZȪY£¢Çi¯?ø¡]UÚæU [Çm¤\T”~s·ãrI`äeú 2o­I¸ÓíYOaìÇeN@¯”3ÛŽÄ ÒúWÒ¨›}¢úF5&æê™"¬ÒýÌa? #§´öä¬ÿ)’‚þ›[a$LÖü”†lxƼҿˆ\ͪl­EÃkßT/ÜÕ;«(7Ñ©ÖçÌÕܲóËqÌØšÇVr–]p²'m„×üË}Ì)Ðk5xœä¹¦žôþ\iNF6yŸ¬HIyL¾©MóKYs^C,‘ÇÍ×°I2Ìñ£þ(›°"‹`Úm=Jêgþ}C¿ÛÊÁ*Ðø”—‰k—õZ¯Lç·Iz¹7Œô[.û™Ž7X¨ §èÈýéšhv£VAg8ÃYõFj—ð‚ÃBæUCy¢NÄn䳘¢<-&•õËÒ5óá¤f‘‰êXÞ ˜wL$FÕµV¤ÅfvþØÑa—m™_ËõWÏ>ú‰– Ëâ¿UÓͳ'îoheÈxÚûÍÇl¹BQKb°×±Y|–Ÿ¾p+·¶î_O‹˜º˜æ…ÆÙA‰ÝÓfðÎ=tdÛbc?þ|H¯ãV´³®£ õ{Ýžé öŽ^m|1qºß¥› 0ææu&Ï5Фº Ñd´1íÛ™ Šm±úµ¶ÃØG…&ðB+º:rcŠL¼sˆ±JȬ%xª‘Ö¹0•¬è™ý‚ë3ôaÔA\Íóf+*H*+¶*{ú5´Ü{´­”æRmßUa$:˜ßž/ajo&iªÁƸ¤§oµ»ƒé{ó¸zy’ä)U8À¶®£U»c9–é0R Ù€q~Æaî2z÷e çÿ±Št‘ØBœãýW¤â×äZ½Ì§Vžåô^òÞŸ›U—nL9”ÁAXþ{ˆ³J:Ävœ3ßÌÁ”.›Í5RÐ Þ¤1+`´?L[2¯ ‹éb^Ôܸ6©?FÅ£$~±™R EòçTuÔÎS/$e`®ã†Šºœ7l/–ñäþ]á~|€ëWª0V\;àÒ`²\ŠÚˆo÷ª—Jû3 —äÞÆOËgHíÓt¾oþÊJL}›…nì6Ž_à‚w6óý‡xT –t‡ÙÖ=ÀþÁbí;X:½ÆòÅaóÛÏêÞWÙߘ¯¶Éó¼¶e³Ú0ûÃØhuÅÆ-øä&X1ä&V¦ÍæÅÃÍôSØWŒÌY …I­cþQË$øÜŸ0²<Ù(¶wHø.,;«éSš~Ïñg:Û"íX,S6mhì– ÷;J.L…Í­b ¢×v&Úò¥Ýx Hø(,]÷iTÎåW1—;§íýq;ŒªE1úÎXËõàÕçÇ”˜×ÍzIqiÛVÕ*¨º·ßý üGÂ'¾ÏJ·*Œå¶J‘&O –àšºzwß P²”Hö3ÚCµu=Lå,`a5Òü@Ö¡+§ÇÔZ|Süæ¦ÿ ² ½0%lX_šM«Ë3v'vÛdä9³Ww.¹A°­ '°b à ¥3û¾ àí`º{¦âQ•Ò5U·Ë׺½fûÇíðäƮל›ƒ—ï/ÂvÎϲ0ö f=!“dñÅæ¯+qw•ž’Uc@t›ÅÑ ¦îÜxO°û8ã ûЮºv-¨P⪖c²¸Ã^åáÉàW›õ*æ± œz³ß„6Ìr±¬vŸ»…½3iÒÏ: #ÔzApÏŽ¢žô«ÁƇrêvá†þ Ò2„޳óXä]Å~Z¼~„'«PT>4ÕYrGéݾÞ7A:¶›ë°P+uaæ&GÏKÊJT Ôìi#°ÌóµªgA’R]FIঽrXn?Ù¡Éò‰&~(³²Å»›¶ŸWWü~쇺ESqvV¦€§+[W²\ß)Ñû›Õ¡OüÈŽhf;jWG˜òÿáç¹§bÝн®6/껈uºF—ýþ¦½ÂjO„lð”çƒ\¥2ƒÑœ)ò¡q ¨í„fâ‘ÙÕ‘[¤‘ÏÁ>£%ÿe×혪lÐx+†1xóVuÜlY°6ˆþ&æúzÐùx8¢+$å<0Ÿ†ù$þ׉ÞDzõƼy*?‡}Møå¬Ù²ÿ©Ë3ç|]=ͨðÒÚ„qqîŠd/À>¶‚šËd¹ãݤräÈéÁ.íp7E˜¾zrô”]0ÄÚÆCuÓV©©Yà8 ¤X´ÜëD…)óFÎc}°Òœ¶¼¸åã ;ºÕQïÑ@\x}õÍâÕâûðà7Ä'Ý/N¾ Ú#Ÿ"&fzô¼ºoq ªžH¹Oì<«ÇýMJd"KOépC“‘¼ÎâüXáFÑÞa ö Å;Tªèn ™iûãduýl¸qͰ‘´›UØëI£wZkÉp6RaÏ”ñù:?üJ?Ý FÁ‹òw )ŒY*2^”b¶ÁYHÐ?€NôÞ?¬ŒØ›åƒ‡óï4f_å¿GhàÕ©x†’PÄK;˜3a+¦d*z¦›£!Úf.lJÑÌDsomñü W¯ªì·çK8tÙ>Bf¼ã"СÜüŠ Ç_ürà W.äèNxröÛµÈö¬†k{ÕXxd©AíH`1íŸ?Ä0Ä×ÂÈÆDÔG¡)*HÍ÷_« :fÕí¶jg˜0+ÓOëÕ™wŽmÝÅÜ›!»œT/×ÂÈe¾ºÛ%ô·¡ÀÌ~6]ÓÅ›`ã4*ý¥¯ß‰þãÈó*–ÛÜØrõz›º§%õÜ¿W†´fT‹‚ú&žÀf"†³½šQÓ[˜}+F°Ùvhí[FZ9Si)]¥óbSrÈË b‚jù&Þ®€6+¹~[&‘ÅšÙ‹ùo ˜›‡–Ï/|1‘àr·ãY龬…¹©Ì›.°4é1Í);Šyä•ä~e“´ÑòÛ{ÅžÑÛœþ©Q׌­\6—,ùEÃö¹FœŸí r•¿OÄõõ¥=]Ngí±A²ã§,ðJ—?×¥ŽZ$wŒ¼Ä<]‚î”>polÇ` õq&†ûžwv/¸òe¶ä±½eŸO(§ébr™g5 Š»0Ч4Gÿ!®¤K'X®5LãÐc'lí×ՉУ®¨/F¶Ùf&–nl&.ZnÉ–>MÂtÃK¹sLqY™ê5ÁþAkT´Ù–J¤@Å®ç xEó‡A¥[(*Ý6`Òâ£pCÈj`”pÆþ§¿Îù#K{rê´x´H–v‹º6ÈWP…Ò™ó±R˜N½¦ÕéWÛâ²–Š‘Ë7—ˆægû–ߟ‡Q)“®PÿIg&þÁú®R”ØRóÝÍþÒdŸÃb_Cú‡¶A³Èbô\vŸ MNS´ËlXOÏ:tïtYþ]ÖŽ…‹qÜ}—ìzbæÔ´/j½(ºJÍÛiXÙ—}Û3ß2lÉÞúþ3?Ö`Þ½œ»…ßH‚n®˜X¨¡Ö¿Ôe^RÑÐÎÍ;·ðÛaÆËêk<)x Ï—Qéø@TïŽ-ÝsËÛÒD‘WýÆíÏSàq÷h–LAù­o—'L~ c«+töD£ÌF§ÜyË¿äiØãž=frࣺ#«½% ”cWþí¥ï‘¤IºO~6Ìè»ÆÇ§Å(£Î¸ô~˜å£ÃDÐ~Ú•†í/ZÑ]äo0ÚY}P6¤W.‡^U)>ÏΦC£sœå±½Ò?ðFŒ‘Ø ^±bnÙöñ²º¹MÖjŒïîL’#Ü:<´Ð…yx’£“ öÌ#cüû‘ Qo¥Ü›G¬Ül øñ¨X~{ì1áaáº+öÉêä…ïÖÉ»všËV¯[Ý”•÷Ãdék‹™-;»Õq©'˜‰ ¦æ-ÿpµï73ë™Ü P‰%(ÏÙSÑW#¨ØLÀx,ÐÑ“ ì=WÆzP:Ɇþ‹0/…‚‘ 9CsÈ/ƒëï=³úÙu·\ñŽ1ÂØ„«BgÌ æ¬/›§T´òI·Ò™ÿ¥:s–ÿ›ê‘0JºÛiŒáQXM6ìªùdFêôsE¨VܾY¾±°a ì+s%3‹ªÙ™Ž“²#©:³œªµ£œÍÇœjñ_—ã¼,RÔfÎÓÊ›³Y!·ŠÿÁÿ–Q±Þ2ŠŠ(¡Fg”ÍSþGžHµ³L˘UšY>ãų8ŸÿÇâÌÒå;ËÿÞä‡õÆ?1Nï?dD)khÍæÃ_e•“H•€¬WÏîžµïcÙ‘ ”N~üŠÉaöç¶Ž-z6îB¼{åoÂUNY~¼F;>× üäÈÒø¦.=‰í]Ö—B†j1\ KdÉVqemª &k¾cïÅaØmo´TtͧÙô n Ëmp ;7~È3„ àÛhAž§ÔÛzc×Ej&ÎA‘dј¥F‹8/'-Û_ÁšwÅx÷×w}ýº¯O½Gç¨1 ˜wöJ±†¨è…Q1Ê •A"s&‘%˜¨gwЗŠE«9KÝŸ™ ŽÒqÑ ªÞáÕRŸ”¢®§jçùv yMg!<ؤŚ@ûa ÄëÄWÉ-ݰ¯w…±Tc(þ„±´î¡yÃÆF„º+ *Å€ß×}à•ñ´s&ojç½×ƒÎÑ¥‚æ•VÓ]ö_ä‚ö‰YßÈÃ$«ž©V3úI^ß±±3Æ'Oí =NW¥Ö•¥rŸùðÉÆúÑÞÆ°Æ¾êÐ4IJ:‡ô ©ª¤)µ¹ÔÅmbŸÄ6¹ý €´‘^˜m%7=GJq¡¤Yué>;ÊE½èiuÙS[ Æ|=9ýîÒñFÙ@Å*ŒžØ8ù2Gö|ë˜-ö%”;=!,Áêíþšýžz=þž6’¦Y͵ܩؽõHÖþomÈÙ‹®å9詽Ì&ÂçûK»fsZÐÜW¹]8†oz¢Õo›‘1¢.ÄÕÆ‚ÒZ8#×Öè<Œ9Þr~Ƀü™í¡Õ­nØ:ôfÚ<ð=rKî^$ؽO³¤pcÂ*j;´ ¬HjÂHnê 0ñµÃþ=ü\#—¼ Dw%ÂÄ,’0PX`ÛÐæ>Ez¥XØè‘YM¿ÐÏ?Ë(f†µ55ZØ‘GlkNâ@?—»Ô{ËR/=v›žË©Žt"·´ƒ|>ýe,2ñWâ ÍÒqÙÐŽím¬R­=¬/ÊxñðCá¦'›É{ïU£ðó ê)f>-×3­=Òùñƒ¥@02S4½ ë‘´öH-U?Ñ5qV7M4Ù0Ÿ¯ÂéAÏS‹®n,y;æ:ªÿùàZâVDôXcÞ¼‡¸v‡"Òq;¥·‰ÂgL>Tbؾݬ»'ûËtÂ/H !×ëÙ肵wtÿþqÈywËÚƒéŒnò÷¹ ’À éÖ-.o»üÍÜüÔ¢­ÎUSöM4‚ÈÝ‹’QƒL®'å±p³Kþ¾†wP)Öóæ>¼Mû×=~:Øâñ°²+Âæ9=±’Ü«_ŠÍ)uÍöÎc„áUlf¯ö“®n»®dáñÿÇÃj›ø¸V%o\ì…} ¶•Ð0½7õ¯¤–ë\ƒXÎò)Þg‚0Ë^Xo–Ê5‘ùÌé·;ŒH¨ œ™Ñ/õ[=ÓïÞxæDj¿ÇᥟœOP.{=t(ké¶®è&fa¿}1Ÿ¿é?bÙP}1»½#ò¡#yïŒíæ?J~¼~cŽ•ëf³b"Õò‡:ưMذ`¿º™œcàçMÿ0ŒÜ\Ì5¡œÒ®ŒÐ²sµ¦¯4eaÿK Z¹Ñ–v…{†G”‰âØ®dRÊ ør]N6Ò ${c-E›O¹¯[2c²òŠÆë0¹½2÷lÑ8g³Üë‚¶8š¥í>2tñ"z¤ä’_§¼'0—y îå™0*a`Ç™¦R®Ë4uqåB50øìØñvýä®HuÕ®ìäE äíxˆ'n®·ÛrÖ”l[™õ—§ÃØ8¹hnÑQŽäôÑO«lYE¯{Qä5%ŠÛôÎ:øºW­4¡Íè•mòÕe¶¼z:àKH±´Ø0«”Ëw@âo§„F:“ Rš(êo+n*DšÍN“¡­î-Õb¨(Ni¢AŽ:%ÚˆM@Öm¸ü¢{ÀHüÅ›‘_²áä÷2!7S¶i`mšÄR€¯)„¼_³ùÛ~Ƥü™V,´Å© 8TŸÌ55m…ëBC8N—vë9¨£.šôê×7•íÒ˜·äŸµp+)öBÞ_üÎbüq®AmæçÃØç’œ­Þ5kEðuøn^dQkVÊl‹AšÀôm¥›¯Üä½’„-éò(.‘ÊÊó2AÍá¼LfÖ².Nñ÷2æ¬ELÓœÄùê£ì?ä¼ÒÙ˜ó*þçÛg{Ä%²_Åò‘mŕ׸PBÃñ e WþX¤H)îìrؼ=è%NÔ:Œ<ª.ŒÒÒ ¤èWçó¶ÝŽ4Ô•ä¬oãHˆ†emÛ¢›-ÎۉьÐ.y‘6Wð¾Ð%vêíVh_àgòƲy™ç8èOeË­W° )n»àÿ ¡q„r0ÌØ%oÐpØ©‚äáÊ\¬‘‘¿P# RËz`FÞ8›-=ÿÅñcÓÑ‹ƒ‹,XÎTÜnÚêV xú¬ =Bp‹o'”f˜©™lDæL¹ªµ]Ù+ÕÅ:r̳'ƒ(¸®ŸÂd9¥0{Ô^Ö3j¿¬ùÓÆzË=è â{ØÕd©éu†üžöQ›™_gígšƒaRóF×¾¦«T ^8dM߃+ªúTÙ½ '.Ø lŽéjÖ§Ân&Ã✥ Ʀ˭íÙUÄ}» Š¿ ýž Vöfê²G0ýÉiɳ=Á È€¬Ø‚vÔ¼H&™¼MK+“zÊÖUo 3²¡Î+_+¦gÑ9áÍõ3WâUa.£í>jÖ×ïØ¬zW¨F£S¤ÕýCðm¨T‡±­ÛÂÍ~Y~gvÓoÙçQC–(êžœˆáe³×€ƒU<Ä[4bàp‹ñ•4,e¾FdZÞ´÷ëéÑGÙÜm$(“㕹ÅX|µ)þï)*JtúE€XÐu埦¬ÓêGÿñø3ÙzÙÏ`#î‚ú?¬Œˆ²û ÐÂ[.=½‰‘%k¾xò׈Šx&—ì"Ä«-—J3F6¼¤¶{ s“­#ØyB.¤œK¢ Ú§mÔz¥ÊhžæÛ)ADò~vûŒ–A¤bdK€Ew;RIXÖTþ¼-SÞûi‡¶]‰Îö¦íwêñK»»«ÎÂ$rSÞ}#ªä¡|4tÜÇ>NY.Yiþrí9¶Ûk§‹Üv²•¸)©VÖt[þ¾ß:ZÆ´`>8?e£\Ä;G÷º;º§0=€ß;¨zøL(&;܇« F¬?„¹šì‹°g¤Í©`;V×'ƒRT7ñ´»dÑêþìØž™¢*6ÕÁÅëûÏp¨Îª“ƒÅÖ.<#íS¦‹;¨…äo^Ã1À®ð— J!ÔBvQþ¥ÿc>ÑdŠäPêñ]@+”²? 9Y<§>ïLv0ˆ¯Læù`üв™ú{¬–×nÏäòJYŽáIK·†ø` `ÙÆoÿT³S¤’mâÁžËÚ` ÄEµëaØÑ³q—&+j÷^¤øF ¢ÃÙûé½¢ô^ÕÙõ¾0¬àmÄØeFz›vS<ÏÆ´íwý&®ÛB´ÇërkʤA˜µ…5 N<ˆ›a×Dfö }ÂG4?a¨Sû‹Ü×–‹·QẫM… vÍ73g…ÌËáòSÍØx·ÜV„SgH„˜WŸ÷8àÃ3lo®ë„cû¼bÊH~²‘‡Ù45eõòÚ4V\û?<Æ^·;fž4À6Œ= âð;ËDrõKE†NG_›éÁ*¨SÄ´ƒzç ;ü’Ú·º²ÚȘMŽ›Ÿ2‘qʎ¸OfÛ.|c;Œ®<¬Ð'n…˜Q ‡Êé|Êm;IèKÇiÂÈ ²c’1Ì‘Fæñ?\VÜ þ¥ õÙÍDzj-ñËNš·ãŽdG*5û×güç®*+ ó[@¹› ¦±˜‡šb@sÝ( vkVÈáh%Í“W~ cÕ•)f,–'ln^‹U3`%ޝlŽˆzÇ ¢ýJC‡§tg2ÄÇNGP™}ÓJˆ7¸–nÇõ³i;˜ô±~]d¡•‹>ÖÀ5qôh˜š”S²²à‡™Ñü©Vü%l송Օd2eô”2_{l[®®Y»ç‹þ«=ªë·¾ÁÓ»¡pì|z?ª?3ˆ¦ÁÔJtøm®ü‹sëÉr€Å“KT w§cª@ ÛjbÞ˜g?IO wp&ÜÉÐ2}¢7…¹€Ïe.ŽÒŠ«Åº¥SÂÁ¿ô„/ÎëåÓDŸþ«$ç_˜+ÆЊï,A˜¹›Ÿ}·=~{Fêv'Ò½3°ëîGPOóÄü!sCssÀûÙŽŸÇ+ rÒéÇñîÉ‚ºéÍ•`uèN+ïij“‚Nàuqc`üe=ŒUýLãtÁTfèÂ6aT6¨UogÏúã–G‡ÃX…ßUܹŸÛ ¡hX ¹ò7Þ†±ð?ÆŠcºtá>¨ö3°á?ܘ½eAæX♳r¼/~‘ª—Õ{Ĉ²¤utuº:}‰I»"×­c6¬fô(&qª:·kº€¿/䨖a}«n}™®È:tƒÕßô2?§‡a!ÁØUÇZö ²UÊ1Õc²@&®HúôbÕ*õ8¾–WëσÅ8ËÑ·Úä®9áï‚Ú2¡åR½¿:O#Ìœ@© $>ó4¨·–ýЖ½µ ‰LûÙ¦‡§‡7€íëÇLÓÙ=úv(w6ÀÐ,ÃX~‚÷ã G>ål¯ä'/f©3P×Xƒ­xÊ"Ì·ûý(}aoU°¸ÕTó×5NÚ Lr7”¶ýH¼„™0ï¸QÚu(zš€54YአícÔM@žÏÃeÊ0›Š{0ü‘7¦¼™sN‹ü‹»'Û¶ÿ™~ärBŠžrmæº}Œ^åcŸ±©ökâ¢ý1Y«ÞIÃ:Ù½± ‹œJaïñìg5Êbäã.Ë}qgÊP4Ù0ÒK÷Žíʰð9>e?>¦""[ Ë2FÍ&þë¢Fþê<æ?|_q’^ü6!É“¹ûí›Ø« øöãòÕöŒgZô¶q^ò™æë“§4‰ØÒüNº!.?[¡åaÒ)l*|j¢þ-²Ý1$›\‚'fÏsÞêÄgý0*ÕŒü„ËÕ"€‘[#þú×¹·Â¨bÒ¤o]z¥T&™}p0­î6DÊ*uĺÏÁàØ¶÷,d°AGV=·M C}ÁˆNñîíˆËXè³õ‡õÒZ—N©,ÒËÓ!Šƒ¼ë_îÌ!Âs'…­ÚÑ£de9‡±#({¢¥;œ‰f[‹Ô;4y8^ä;_I3öHAÛ’¿Üé§<±ÙÍ}"`Ñá’ž­ßw¬ÿùêfôÉm*Yrͧ<&a?.§æŽ4®Ä_ñþ7ß+×FÂÑ{N㉳Çí™å¾½ª²×‹r‚ÎÝ›¬Tï=˜°„µÚ+“Éz¢ô®Hl<±“iâB¡…­ì+²d‰Y>¯³ªû “["áEØ(™F‹óÙÚ·m †±‰éÊ ÓX5^+áðЬTÊŽµQ˜Ä–5 f¦²a¤¸QG8cå[Û욬T›}ã­FŲ3btm4]£¡å£k4ì·ßLGj—Gûõ1³!£J-'Š£±¶%Õµ‚ê{œ•½OÝ–zLªÛúa“HY³^Ušë®“áÕ™«¨RˆÂ(be½[õÜÏ(¡§a2a,iµŠ¾[OÂÔ¦6Ò¾ñ­ŽÍ̵¸u;ìÐg±Æ‚g…–wf§‰¯¶<ï6ˆˆµ˜»=T*óXDw…AªÃHq/lú5ªð±7ä>±„ UŽäH! ¶w=¾_¬‘{ä:ÿܽÔâ„ÈLÄÉŒF¹~bZÖu]«Ïè$Ó[÷µÊýÞëÊÁ $··å1Ub ¼rÓžx|¼üªV@ﱕ«‡õ¼êbï‹€‡ s3x£Ž…ÆÌ#Ÿ662)•H6J’ðk”q³vÏÓÐuÉôI õ {dï:S•úœ2¼í}—ÃÊâ”±âd²\lyßëñ‡T¼1Š…ÅÓ³³Ò>ý”Ú ¹Ö³µ/õÿ% œþÛ$0Õ­\† ¼ô²$q¾Sp©ø˜>Àì|Øü«o¤ò Z`KÓž5f–¹CgØ7¤¨ïL —È §Qf™álÌ çÿu9.ã’Í(Ër†Ìð,. TJf³”•‘Yš¥(ŒÌ³y‰¿q^&ìj%T©бý‰á¹«Ô&ÿsD0åpqF~>Ö|âÁ‚¸^Þøíº^pmB`¤°GÜï@àÆp'RÚ ëp”#£c'ôŒ¸cô•¹¼%¤û-<ûiQW ú½RÂĬ¾ýÆÐ=*žx"ûÑw²,šew]e¸"=hÏæÁàzÖªÇ3eŸ"Qå–qwv5Ñ ­t¶ÆG['²˜18àf0Sxh²¥s2M“ã.jÐãê•“N)™Tó^”æÈA6aÝ#¨yf°²ƒšTŒ2:ÑbÇ݄՛ŠÉ„ߢ…=æwÜIÇý`øh#«E=tlpD?°›á81ä‹÷zŸ:(ÃøóVâj4LG“e¯ƒj( ‡Å;÷à³A2{{šA Ó`:­Þ‹™®®\ c”>À‹+u¦•PÞ.IþÙI™‹qx5âÇ ü¢¯<€çb(ì‚A‰;–[eⳈ¶>‚ ìçV“Ä™uo °¡!ñ‹“vA™>#9~vir4ø¿3Ñ—*6oÒ'7ž]«ˆ%B®¯‡Y‡FrHGÅÃ)=Y’ qsÛ>vGé`Fê“JCUqMoµäÆÀ˜À»‘Î{ü¨£ÉÚUé¾Ê"Ú‰åwâ”ÐHƒ)µÔ§çÃXm[xD¿5Ôo‰À\¸çùˆØ†xÐC7ÂÈõaÏÃÖcª{oåÊÅkXÅâ0¯¢ª ~t TQqgq=ŒD¥6~¹+Œ½¥kdêyÊj¥ÄAq—#OÙÎ7ÒÅÙÎ=ñÈ6€·Ó*¡bBù¹ ç|öF±Çj-j‚Ò3¿ÏxŒýÉ}€X¼´~n†f.¹¸ûh˜ºŽÂAØð ÞÆnˈÁ8k\ Zv÷ƒr®ÃTõ ƒÞ0RÌ€qv€éÇŒ»Y€½W˷ЮSŽºoNnûjÄ ðÁ¾.ã½MkWÛ¡'2~ŒpŠKŸ#)餕§;ÃßXVyŽÁ>"1­ÞÍLr‚TÊ+|¡¾§¿ƒüRè¢:ºèðF¨À””ùógáœwCƒÈßD&.Q6’ùÇՎ§}ëž™²ˆEqè¥nPÜY ¬ƒ˜MÈ µ<Ú’9 rbü~F)Y¶žqF®ÎÔΪã~М×`S9»5nÖ÷èÒ0v~¤Ø¡?튢Äùp}¡º²ïûx9æfõñü ö";x¶cO¡‚ÅZªef2ÜÀ]İÙ>ÿÑQtÞ†Þ ˜°Ý &&¯¢ôo ÂëdcVWÿZ¡ò |tÓÊÖ},¥ÆÏu=sMÑcœˆïÞüÅÚ´Z¬‡q~dwÙÿñQ‰z.?áÝðG¶5èêãÐl}Ží­]X PXÝøªîEa%h¯üGyG®ïòMXAãÈY£˜hä +sHU!Ü™`'ÓwA§sÆãzÝi N{*l¦ÆôIk39”ëç5’ãc?Õ¥¨í*ò ì UøWoœöOÿ’YºOaÔ¨mcN')¯N¿+È“‰PEct÷9ý¹¨Žø‘>Ǧn2ÏØp‰ Í kswãYµØÆTK;Ûç®·½³~KµÆünûßólæWìªÌ;\ã²]¾;†W¦÷÷+¯ÆÒný9ÛlÖoV aDæÃ„Q.#uÛwðÙ ‰LÂ×ü¡‹Ö/Î"ÆÔl–ô?ðÿ6µGá••gåªsã„wô®zER^E]Ž;oµd£ÍnnWG6¶Ó,N¯ëwŠäAµUÒôBë¸O‡é†’ͱHÛèß¹qÀµ¼ôg«…}OªÌŠ:"­#ù+>7’¬-…" ¯ÉŒmûÕé[´Æ¡ðõ*~úé€#Ñ'`6òá-/Ê óZÔ_M7爜=&¸3¢ò»²H¡nt˜`ïó( ‰úk+q>TÛkûüñ(8([£»ÜßX#§B³ÏÜÁQ¦?ÛS““ç¨$µ(Z ó õùäÿôlÿªÍéüÖLT³Øqût²­Œ(à€–ôâ?Ðìs©l bzw,Hí±Õì\w¶sŠÚõG¯‚•K–Ê]Fîq·¶œ{ªð £ciî‡=‹Õr\ÀSŸ\¼µè˜½e$ùé9¿‘*޸𙃛lFÂ… ¦’VÍÍçqå–6zçù˜6³h¡dí¦Žm›£Ï.É1@Óm…ïÑy#¬áJø%äÉlü´™>„PÐ6C""ãR¿sYĆ„°ž±%®f7yH[wã»ß¯!:›¶z1º¹‹â㥬 xX[š«A‚×p#zA–EÃÄzþÑÞØj§>Þ¯”^hrX–ô íšò¾Ábhªúv¶*Ê|" «°«bpW4ÓÂI¥˜@¾U½û„Æk•§÷,àG°_zð_XÕц¹ÈìñÉ'#¦ÙÖÐ軿 sR刖àÒ_J%ºcI,è °ÙO„ô[Ý-~ÙqÆÂÞ¾GBˆl³Bhj¶h«ÏøbŽnäÁu‹W–,› ÊzݼzdÉbÄÆ}®ëò./øAk††—Éqøþ÷4(f jª5;+› hDI«Ò6nyô|•ë@~GT†Kß›jŽ}Hæ:Ü-¾,mB»·²s·w Ymh¸˜é:ÐÀÜæyNò£ç¯sT§tÜb•9€\ál–\¯ÂÄ>%DÁþjê¡ðÕ^ªìÁ;Rê ^ÒÑU«íq»Ê 5ÇÌÙm¢êò“ÇÕ½×Á*—[5uYÝ ›-Œ²L¦ãüWCÍeŸ¼¯ô’zð|12’A†ù6I‹ìPžUH<”iUøZÕ ¸P¶£…÷ÞU¯~«²Ó|›#·´À(©uĆ|¢J‘áR£'މÙp ±ÐoW—wmÙ»lk•™œÿ«ªzºÉ·ÀNn+–î=£Î|ó™æ9¾'1¨[ÕüÛ§êò[!C<ų…•áz6QâÓ¡º=š'\ ÝçêþaB»óݸwü?bPAåç]Œáìõfõê¡Ù®9F3AÓߊ#htôàÀZ…ÒBÁF<¦`I“UùÁÙ¯ØÀñ7_3ŽüC0ô3)^ÅõpVÈ䌨!µP)äѵ?äT‘ÝV5N€B•qò«š}†Ï‹r€!éúŸâÖpìZŒÎ<ÿºWï5_ÖÑ!˜0I¢fwÛv¢ÁáX]ðóÛ~“±ùɼ°¡Ü§ î³ó®<LwÖÁ&÷sVÖˆñš–ÖÁð #Ì"’áigšÿ>ÙÉCa;þVÒ:éqœµXs5ƒÛgwkkà ’òîéùé³ALDT-‚æÅ¡£‹{öæ™KË3—žgÎ"䙋ä?53Íâ1Müß5sE™Bµ9£%¡,ø/"Û?c©Gl˃Š!,¸da†œc eûS›7çË÷ô¿6*´uZ“P‘’È1z(¬â³BË„S#4´´'°VXÌPb0ô¦Y/Ïíaµ½À&Œµ:Lü΂•Äöytrq[§ýsÒ€ÁEËëh};oàW÷«6±‡NVAu<9|ì¥}Ì…·°Ê"Ll?‰ˆªºlHŸ­‚4ÊÂh²rØ|—ÎAd‹öWïÀ eØD;–2ºP=¼¼EÀ5Ëk/Vâ²yJžµ¬×G²¼9tÞÜ`_•@¤z²«–öȫ谲-µ£wÜʶãc¿%låì “salØG—‚¼ÞOT‡§moÙT‰0¾ày[è@fY©ç ó)ØkˆÍcJؼùä¯Ä³ËЬêÖ.HÌâ˜Dï>¥%²÷bŒ6Œ<´f8Â@ À E½¬ùéàF‚xV¾ ÓP"zb§#¹}‚ÓŽQÌðð4º‘ꈔW¹5:rŠöl…£¢çJR¬Ç2e8·Eàèp¯2·•ïrÿ4ÑÊrøà¿qI^bÔ"ÞÐi}1=Û©3H@ÇÕv@~x­eƒ¢Šïº—Õ)Mï_F{äÏ6é†"oíØñ 8‰¹õ&½ÄƒbŸ¦ÂÌÅ?æŸlu;{ΣóÓ!Ÿ„æY<Ôé†<@=ÕDºdÏÎ!ÎêP¸gÖiÏFQ¯aØéj×` uî@üìd6¼0Ÿ…táÒA_}ýØÿ±©ÅÓ(Ò÷ŽU?„ø’'2¶ž€ *q¹«×x~iBÖ qbK³2FÉðÕX<³ðÌZZÖ-Ì:²s{^™I¤s«Wf'ÃE(÷b¬ÄNJ|ì_kX»‹NcB ‡Ò¥ç·”Ã,‘"o²ïyÚ~ #1šÚ?ÍÄßýÙØµÄX>=µw{Ž÷¶„gÄ_ßÏ Úu¤® ¸!´µÂÝ s¾çëí‹„Žx<ö¾¿wækØxYÉ 9Y·@ÖŽ4ë½u£§{„w¾›å&ÎÃH„éÚûÕã÷ÊáÆÑ.϶³£ht‡îú6³ÌÏú”}ʢÿ5gG›þË;û”6>¾ÆOç§´B–“Oõ×½)÷£™â+[\µ’ï\UÍݪàkþËÐ3ÃòwñnO©1{Þ–t'šF™>d•"kqœ3ÞÊ\‡f×Fv±íëwL²á±²ë›xS¸j%}D‘ÓMÐÓ‚¸cý™R‚©~¥NߨÓÿ‚IïÅ;Ž•{\\xŽœ¥¸²;I€ïåGn™oUææ2¡Â­rÁ-ý4V)e2L¹l$­¬þcÁXw*ìÆÓÀ„Ø•gQY+ƒSÌÿx¾Åw0ÛJ@«½C?cþéfK!ô«=y¯®1à tÉvÆç§ÜØ«lóãTÅ¢¶óÞ±ÜÂÚáãûDæY¥ÊùóŒJãÛ'4\HšµÁà¤ò¬‹9ëÿ8W?Ã(Oßg¶›VoQ†—ðû7a,ë!¬Q3fïTòßqâ×ñãôf¾?ÐcôׂÒÊ]ý¥"¡ä¹zr¼§é)æ›;¥Ç.åPðNÍb€I鯡ÄÄ<Œ%‘<KíòÕ°Dü©=£vÍá{•~4 "ÐìµñQqδøfuþg©<%’_^4]F§.ò'ÂXE÷†s¦ÕV×+¯ïîß0¦Oc%PÜÓŠG`Õ;êÅÒ aT§`I³«úÅÆ |€c{šsýL‹Ü åtÓ°3/¯ù &f%b‹ßÍÀ ×úè¡+€ˆ“êÎ5w¾.Û/ŽjêÅn%§Ô_µ‚ž óú–µÏªÝi˜í¢^­Wå{ð»"-ØŽ;Twû…àüÃòÇ;œcæRêÉ­°zžJkîdß±{è¤vp6lF0¿TQcv˜à¹Ì't’æÊ^±6×-=ãsw@6*áÄzaÉj›l—û¼½ó|X¼6í Ö^=76÷-íµràõŽÒ&»3|ýüÆbx5aGçTÅ ñÊ•ÂMÐ$Ú6Fab­ã±çWÀ`ÑF»˜¢±ªFز} & J/¡`(^²pCʸ+¢Gþ+Eøg¯þOÞ@ë“ o4¡:ä'µ.¸Ét_útœvË‘i½§}}É‚¹K¢ä%7ÎHó³i×ß,>öa$¯nº©×bÕcói¹!š® 1i.Ì‚0(S€‹ßÓ5uy‡e ß…óÂiâƒa¬šÀþë3ÒÑÏ™»Tbé’ÕNÓgÅ€È÷Wx°Ý°#Ë*A@Œ£¼X¢8tÁBCºš”é#B­¢¢žHq4å_/b66“ê.³üäu`׿§ÉaôØõsgƒú7·'`Ž E顜JQæw½Œñt?“¬=³–Ô/&0b6çŽ6U›îbHUûÒCåk{W/7¾>†›@Ð×pÑo ö€aÊ3•x–£Hí8orûövµìv˜,zÙ-–¬ïQÔCAÇ$—’Z•‰0êü|z: 2^¹ãM\Ü'Gª©„µ¡8JŒröq2Tù+¤ðO!€4¨³)²Ëv.g4Ô驸u\A¿ÌN¶[?O»f(±mig#,]Äk>™MäM¼0íä’%ÞH±û¢r÷T×ìþÕ¨lºJ/v0ü„g·Ú”ƒ@?Šä,þØÏ¹ (§¶?xAßÜ SWõú²b\™iä>ܧ¹€©™–oäh¼›*'þåG®û‹“¸{LÑVåÙÜu5.ͱ‘ tÚ†ÍðoP}Q ĹØn¼üP)#”Rõ*¦Â©z¦“cY§ÕÍú»Þ`Y‹…r.]w”N °Gèy{};3ò…oãjˆØµ7ÀáÄžÞ\q€œ¦kW´}{n–FžxuU_ïÑ‚o¼ ˆ¹†ýÅ8äÀ{nÄWÁØá®m«¶³Œ¾ÆÓ‰À8›è*„M¼}Kvç;̘¤™ÿtŽ 5\ÐD ÿ­nÂËF’c‡&[2P#¡ºvÑð©6zKç„'ņYCÓ½ÁeA·wóÀ9÷Ÿ¡À7EÖ”%ÑÅÚ‹mùW©~G#–“ѰŸ<8ßš~ý£cæ²Ò]PÔª½r ­OÇñ¸Ù%&_©‡Ÿ‚Ûg)¢XpfŒ¨ö™}è[ôNjZ &âIaÌÄC…AvÿøÑ„UIô>™í©ÌCmzÖžÁjÿ.à+FZjã ÏP0ôŠïP}-’KúN]r^PjÀïtåÇ•ÍÛ0S¾€èSPl¹ÎÊ…¨ùî‚ÛÍëŸlÚoÂä:ç+•ÃO%·jDK–‘Ž®%Ó©Ëö1ÄpzÛ§ ^úô´×ufã™… EH¹v·>ð:¹[ß`Ê¥E0íµtŸÍJp=³IS£MEŠ`¬’DbÍ GЀ „Q£žxEÚ`NT™V¯Í›±Ž×äͱÐpn-­9•l;š C›XŒxvVÙ[—‡j2“–çT vìbyEuļJÄöÃIZžÓAÕýH¶Ò»U»ÞÐjmÛ`ÕTtåÁJ!ÿ"=§­Mî'G7±ëRkèâ’–Um St7¢,MqYNG“~‘ÝcÜÏ`ÈeÙ낞ArV}L‡†*”1?=P™ÅÛ|)|vˆßóƒ'7ƒeÐéîôyëú4?=s‡ Áü€¡Ã#=oÝ>”)Ât„ÀÌÂìÙ9½êN¹ìŠü9Qjì³Ò“F]š/sÔñܹɞg­ï`ÿ”ùãN¾a|» cÃ.ëhœ¹\÷±`¸·‹Šå¾·*L%ã‘ÍãYDÕSQ‰¥Ñ)_-8Â÷²cJ¬'(Öí Ž|\@ä(¡]“¼ó2'$Ù6+HuDír㮇&Šç†E¾ÇºÁö¿øˆK[¹$:“ •¯>>óUÛ•i«’Cm¨GßѶ¦¸hgÝÖVELXPô·“é/eaW!Õ ]zŒYû‘vë­Y$S %ÍÆ¯8Úýî"XàSÌTÿM‘ú]f „¥TÀ¢a±\xÎfn{ßr±Ý«+ ”ܯ>ºü2ŒüæñëgìŠK-¾MvišÛ…PÕR—y‡Ï(ó*RÓÖgA:QKóǰ8=ºhSbÒë/̉“庭1/Û/sÖ¿ 'K–F¡ÞÖ†¦ˆ€»Éëxy®œÂ´˜Ô(ëÍ6”žÈ²»»{½qGñ¹#úÔ FìÁ¹µXÛ}&Ä¢¥Rôu¼–x)ÁÔšo»¹„°‚‰yímõk‘ù6«‰ÜX>Ú˜"jJa•Bü0B=# åìyÐ[º¾"=i¢«ËËÇúD|u+$#3 A ¨Bo:lõZ A®D˃rcõæuþ•÷úÏéÞ,ù7éÞÿKŠôU˜ô, 61³ÒÂÄÝü?>Ÿô¦™ìMn:›ÉÞÉÞ’EÄÉêï(.NÒŒ²Óiç(*žÏ£œ²ÓE™Qvzõ…9Û°ÎâxÆÿ(çElÝWg3*QÏ“2ÿS9ÈÑÿ¬3VŽi®ŽAD¡ºÆ=8)•G³äq[¼K`!öZæè,A0éS±m2R¡Øì‚.VeÎ>áÇŽôÃÙ„§3ìíãj›‰­jë‚r;@AYî›3çɇ Cv‡ðY„$¾½̶ò‚ÑÎ-;Va¸¶®²j4ÎvÐÃo[ýÀ¶p!*ªÏ:¡¾¶µn«ÆPVÖèz“»ÎÜ_´ ÆŒ,QI×fÕ¹‹Š?´Òû©ÿ—Ýx¸ÓùCí\ ÿ¦ÏŸy,6ÛPÌÿy¥7ÙŒ¾I¤zY/þ¾¤Rl2PÏhî*Ï_dœ¤¨ýH/èY“fFèã§›91¸Ê¼ïˆû ‚8yX™Ùµú x´ó£vk–‰æ*³åŒÁж×v@ñ}”°Ho*Øu3B(ÌöÊ¥ ê4=´þ&Sßo9ÀÑ ÞÄYmTؤƒOM+DÚ½Cå&J– Å GhN *KijtìjÛo‚‘¦†á ¡ò7òTkV½A²;ç9v<îlkñ3L,&;| @Í~ZÅÑŧcä„}МQì¢õcô°’ê¤)2ÝÐù×òd:ôƒQÝ=Ä<·0ˆµæ=í. Mž+Ìö:O éÓºÒ¡`=”Åô f‡è1ùÖ5šc[‘=ËPÑ-c˜_¨¤‘djMð½"@CÁºòDeG(#,b&çÌ#Ÿ«è¬ºÔCwJh¶@$¬>‚™&.ä`ŒRy"±Y5yæ‡Á ª¶ r11o†×è¿)BÖ2›‘§SVÇ#›;sgzv«¨ö #Ga< »Æ 6â¶ ¯Õ¹Qt()Õu7Hfë¨ ID‘í1ËóÁ=b9Žé…Š&h| ‘Y¿ž2NÃXyS"aß2ì|zU¶ÄŠÃˬ ör±¸F€ØôãQÒK‘ÈÝEó›a¨Ú±d<`†a”Ï2~´ AåòZ¼òñçÊcm­&XÄß^=DC#VX¸÷±'ü#(– rË|O˜T3û'[>ðOôÜ…×Ë{1Ԕ̳¬Ú!=e©¢É2› Û©AX}©R÷ ŦÏD÷`l˜-QnäQ"ìw8R§£- cß4wv{;<#UC‘¡k—Däø° £pï çïJTl²èÏwa·§¢^š!èæ‹»¿Â¨fS´_ÃHi‰ÚAÚ=“ç]vÃD«É•ʵg/1(­mPå^ #xe™¬íÖ5½í$+Å<‘ê‚¡yAXå½ý¨¥«^õ¢T„÷ÝÌ®úŽ(X‘!eg _FpÃñ•ö‚ÄK‰€ú£#!™²(­ ½Òusž¸̲ÙnØ#ˆ2•,dlùˆ§w§Ý0$pRé¦Wüµí½0Š‹”3þ8WÄ[…Žl}Ù…‘cÌF„|oýP‘ŒÄóÉ»Žiìf‹nC!û 'aêt[â$™/²ç Á™"J|=Wèa!òïKÓ´P¼Ñ™(‰îò#òîy¢Ý¸j7Ðlk ¸0°¡™Àùs‡ÔS…±ñâêA¢òwÌSryl¦Â‘-è5Ï}¡ @Q^ž66£Àl$×ÿ¸¯q®íà6*õ¨:·Õ§sô^¹v™ß³¤½§_9‡+s«ÐöãVk-îZ ”Ï4_ÔjwBa¶×püÔ[/´a› ¾“™YíÒˆyãôB¬Y©ÜÁÙŒŽVGwáâÈ”2d‘8…ÛTäÜî'Íõq<Ç'«#?Ù-ú¥¯c’•Àâ2{Ѥo55¨Ó°$ëÅHŒwœõ÷Ìòú”jÛ`¹ð˜6¦Ñæá›û°”W?1EŸð·æBøqs®kq pRf6ÕãM¢›áèõ„Çðÿâ6“•Ðå¯ÊBZ?áæ~€‚…µ¼\Ÿ¼Þãw8ƒÎe NQ#ã9¶Z¹Î2®7ß4O–sàã¬Ù>'€?ÄëúùF3äöš:s9’ x­¯¸m­[Éýî±»”$E½“wž<ù̼ÑuhnØøüc6“‡"6›åhV¤c'ø§›9tqÅB–—øÛÇ0¢a… ‚õ>MP&N{KÂúØ"+±].i\ó÷?“ùp§`ˆÈNÉIIßø½(3&¬ƒÂ'xd‡w µÉãÓyÔ:/–"ÌØ/µ\TN—5óݺ†N+7NÜ\ d--¢¨%¯‚Yp/?2»å×”\'¼‹²h>šAŽÇe,g Ás4,tóÒïxÁ¦•Á.–LdéÐì>cú?±4F;£—3¡ùû“¥¬Yn3U™Û@ØÇ®h¿ a/Zæo3ü‹¶[ÑPbÊ3Ñ‹??âpœüÄf¯aQÆ·½àoäµÛ‰½nÝ$(ÒsÓ"#D¢ŒS!fÏ*ÆÛU+r&fG®¿épQ3P¼:(ë7fò=4Ù¼Þ·`‰ºCrµ™:ar,á{ßÂØB³°MgM„»¯œÆH(¯AÑî*¢Ã™: 2‘ãà VäiNÜÀYI~ö ¾›…µÆîùmê?þøvâ=¤ÙÙ¾.n& JŽÛë+L°!XºkÓ–Ó†-½ÚÄZÓ)ùTäw|šviÝzUaÓ¬ùënn›6Ëä´ïÝq±ÖÏ#y!Ìw‡ÜIfÜèe¿þi;üÔ¨:·_ñNÒA“ÍvÃŽoÏø¦'7ú<—A¹¾¶ÎN÷5‚ïžoaTË,qŒDÆE›Âè WË$Ç ¨Dð»ký‚æÄþÁºž††©ž,Ùô²,”žÍÜjÌ'Ÿ¸žßzVmþœÂ€9GÄi9„áïã©j„»ëmOiVg׫½—¦3Üø2ÐëÃ…Ê6n´£ò¦ˆ*^¾ÜiìQLÍ@²LEáXæu“Û8ˆ¼ ¾æjïˆ×¦³ªnAì`¦²qgDôÙn7©'öV/žW\|±gZ¬Ì’‘¼¦CͽÖ&éyÙ§ ßÑ›!HK•ƒÍøfž¿±ÚÇ4Fvc›ó ³éGö…±œ¯,K¾ÌÃ7Êt±ÿVY‰+÷›ÃñôÀƒÅ#¹%|¥½² èaI²!^o¦Ä»­Qû ý]\Gó¯NîüuˆeÙ§Ï'¬%¤ˆÙ.Í„û4÷˜&*Ôaƒ§§0œý˜[*¤OÐU…P‚xÞV-ùHöØ3߉¹·ÖAë“=Gùð) Á‹mk—EÏw„ÿˆ0ç¨] }áì@Xu¹Ó\—·±#Íõ˜ i§qccªOاW®œ1†ã~8äWtæ"l`½éÈ-ËÓáBù <•¥¸) †&š†˜`NŠ1ÞÉWåÁ0vKç3Ô¶ˆnãw9¨Ô¯ïõWAü#vá_ÈCE½ãW³«´ìpÅFRaƒXÑ.ÃÈMVUjëÛœyæ~2,˪…?²gÍà€Åö¿,ÚãÕ³[aäSú^vU‹÷“€©ô„T×=ÜaÇð鶆õín6›â·CœRÉï0J„¨øÉÌ™ÖS{Ã(Ç2²d2é¬úLýÊÏ‚$jp2>9ûg2ÔÍXP¢U«ï»ÏFvy2]_ ÃÔo`ЛۇAÿj|Kþ˜pš^i,Ÿ+{œ.nºz¸éįMKŠç"GóˆýºñÎÂ=ÓaŽ•ÆÆˆ­Ûµ7aê_Ì%M=¨æ}÷›g@^s?ûÎË“4Óó`pËNÄ;‹1xÙU‹Üzú§¿ë—Rã-”ý§± ›wðw3ñ" uõõ0òåÈSIFܸ¿ZÍ,Lz€ø½ò>Œî•Yam=˜õfDDžæͤâ‡ñ¥F#xŸ]ïgpqaãÙOGA¸‚wOÃKA@sŠãŒÃøS~H§bÈh訽<×Öá.Ï÷ø£ÿ c• ³ËC7p×ùÚHl¯ZSWVéTi‹'¢Wü>ŸaˆŽ é6Èͦ‘×!ÜÆ·ùq\^úÀÄ8ç÷Šv 3äîú¡|_çdÿA#ÈX #q±!ŒB®ì;ÛpÛ‹_‘ÃËjà8¨àÔ‚(ËÜýe`ø6S1n›Úk lVµaÔ}œ'= ùèœ×”·§ÕÒ—÷rÄMNKé‰xþÊ>X¬n].ò‚gfÒmƒ uþSž½öwÏÂØ-¼Ñì—^q¾¥Ëà`híøxê~¿(ögk†$1û«ï±˜×ü/Yþüßu“óÆð‡‡H;!2m¯ƒâà«]nžµHMLo<±“–ýÜŬíôï:Ŭ§·ÌÙ#Dø?›K§qbÙþù˜í/þëre9²ü³"š#Ë?OcËêÏÊœ9ü()¨%'9‹À/Çù¼L’ÿ”Ì/ÇnÒùˆ!´^O½Kº` —3j ¢T°Ã]ò{å‚ýp#‡¾~¸œ–[ãÜHÂx¬B¥”@Nĺ;ÿ·zX ]ê³´ï¨LÀ…ì†5ðJ‚‡ø±xþ0g܃#Éuè: ezÖ(e‡˜ï#ßÂvxÁ‘¢èk€îj&W;çŸí €`w rŽuãI¹åÇêÔ÷œ¢3ÍÜNœ4ñÅQºrQ Sj¡›ß{OøçìµêÑQñ`›âñÑåk‡¹›ò>9 Á¸Þõ¼lSëÔ‰Ò{&/ˆ7# ofv5!ó¡ºôÔ2µïÇÎa£S`Õζ„0Á2˜/ð—2Ë®ý€²žõì æM•S¡Mû…Â`¡p«Xj> D1Cƈ´@ভ¼.n†¯; SÚ`½>U±; ûÞ0ëQ…ÍN@„Q቙‡x‡é+¥ʪÝÌùé×Õõoiò £Çò¬¼â¥D@ ‹‰‚tàqÙuééKR…± j,m"á½Õªã©ž£V›Í[éÿŸâ°UW¾G³‡žk¨Ï¿ïJ',/~…©}(k¿¡¢áže_mÔž¦áY¶ŠÙÿÊX8,F±[­ìÍ ÂØžT8GjŒ~ âIzÚƒ$ô&^6ßaHíŽÊ¬X!g¿QÈEH/‚€)\;“ü¼{Cá·Ø8©0,‹¯F5X›×ô€v•Ýç^×àÔš¦áå_PYð«&ZHäu&aÔfÅöŽ x«ä%¨Žgï¦þÕ­¾Ù*1ѺB ¡{<¨á[Qàc‰‹Åíå}L%–z5, "0Qÿzlãƒ^ØF·‡«Lï¢ú}Î#“ûæ˜à%kD˜¨˜YØ;ŠT‘dWP>jX” wG{Øð6­n Âvc&¹†õ›«­û X™±Å&« úk°â\8”©™‚ŒóØk0Þÿ•¬lm0¯¶÷ﳿk‰Kêί‚ä¹DÎpz°“ºûT}_ºÕË[Ýn«°‹þƒ9¹°,¶7¨í2ëûº²/›¶;™¬iX)¾Ü‚C”+£lâEÙuQ¾”ÈO9CäVÃÙPÀ:Óz~+Q¾UOßñ§Ç Aá8²½ þª7„×Rªw¶tÍ‹}¨«ì¢| Â~¸3Ç ‡ÔKÉÄÑy¼õŒyäÊÖy?;¹¸[,ùл£HCf´žЦ’jgaÌH+ò›x|çµóÓÜks•'ð–å)ü½‹îsÆJó@{D§ßœ‚Ú˜¡èXkÆ™=s’¯dºV˜z,?*€ßOT—÷Zº ±Mr°‚žžàM^+‹PX>×m¬6Íê1µÔ5gQÅPÇÃIÚH®žÊ1kPĺ6^}ôæj^%o^­^D'+ï”ÞUO h¡Í²“8Ë­7ŽsÖ°YtòàTÕr»b&MG¸º¹çŒVKéhNãpšÙ]à¥ØëtÖ3JS°ŽCR¼‡}!G¡TMïçÃ×¥l!ðÍaç†ê\ÌÝÃÚås•™[²lfòz#ÀYF2êÏP³ÿ—T‚š¼:û˜f^ˆÌàr{¹ÙÁ²=Š,) zOsSø51o!. ‹…3ŽÜv¢ƒ,éE¾›§I«MË*ÞÆý¢ˆ•ÆG|‚±à°'ÕÞwÁä))èD&ˆ0´‚%2HÖþ#ô0}§g£Ò¡:Ðø×3ƒ´qi,xŒy°k/‹¼Ã55gÊMY{²ì` “EnÙÖòŒ¾d9,”¹[Y®ï×eÕKY·¢^œ¼ÃŒïSó…¨NG‘Æü5h â9t,Mļ±Áv½¾¸Þš·²šjz0Uú 4£ù}9A¬pžiròP{t¶®(Â5…a1+“¿&ô‡ Rù$W:ÔK­FçšÌfwæâ]Hoµôʸ€t8Sà´Ž’¼®v=áipÐþ¼Ã`óº:òƒpÖ\Èßœ ¯†×mcênUæIàaìÞ $A êÊsʲVvèû<`BÊ3”UƒôKÙU‹Ç6um„@µ8LãžhÿáqÌ—"šÇ%pèšãV™)£ß&:r jfÓG%UÜ &2tJÊgï츺ÿ‰öúÉ/mr|½°yb ûÊ-=^‡}ºEà%²€9GÍ¥Im ƈRl±[|Vú‚‹6 £’ œþ"Þ8Kª¢ê‚ä„lcvñ›-PÌ3ü¢l\Æ~)ä 1oµþôÚ×ê×á +o†Ûë[J°AÄËc–½=õ·Û³Y÷’%1HѺÑ÷±|Ÿ v(¦“¯oâÐX¾,þa[¨’}5^cm Tï§±DÁʆ„[(ø"04éžw«=p×]¶H¨@ÂûK\Äw¦þ¥VBÉi~Œ‰=YÙ¬—3¹ç Á¦1Y·)ŽW[?Ê‘+µ™ZGUqKÙÎsj‚|±ûwællfë«ì¸ƒ«³~Jo”ÅFØp§Y®¬± ͺÎ{O‘ Ë:½Þiw 55$dÄãØN.òãÑ=¼M…¤˜Òi†/аÝc²m©_ÿËLYƒkZP¦ý**šïW:Ì¢Ç6zT>k~ZLÇ ¸¡Ï‹³vJx·˜Öùp+LùXÒ~±)ÿ™/‰Ó©|8->2ۻřgAÝ€ËÍåIJDŠæx¡ðsÄJDƒ²D?L‰›²¡*‹€œ Å­«V¶s²¯9ê"—9·hçLz@Ñ—*ßMzÆ£”œåJtb,t/lð8øÎí:; رjÒuÓ(ŒÚ²b>´ ¨d%g.µ€bLô¥æ(Ø_v òyœ\Q,ÆîÝ„S#×§°—ÔÅUX.O8rŸŽMê‰HépÑ©â¬è¬¬l̳ÆÔàÅ_ãÀÏ¥ãÒ‡‘Yë„o+Ï `#vHÆD•36€ö¬Þq„Áta£Ù Tµt„ (ÔÐ8dc| Ê‹÷»˜öz­hÌéS‘y*Q#‡ºË ×7€HsŽÕºš4ZiDî¯iùK›þŸ ?§(t§Ü%ø‹“Ý>ãEÔúª=à‰^=ýÄ¢)Ü<Òu={(å\ÚŠØ  +t]ãlÊü %D…•·7¤0Åc„×[$.ß¡mAäwU‰…X%\¶¹c;š†ŠSuäùŸkte"ñY­(>7ÔÈp6 ÔXÚó—ü!˜Ë˜8Œwà‹©±-³Ô‹©2é!žRX­%ó6µ×NR¼K¯†Q»+{ÒŒä+›ªtý}å«À.aZØ-íܲSQ¿Œì¯.Uéý×ÇŽó3;âxyß&ÜICƒ²ÆžjîeÖâÙ2±q°+O™Uñ‡ç,Ž–lyÛ¢oÿi*Ò§í ÙçË}¶e ((_¯ÉĦîƒ~L‰ñcqc~ˆa‹V@Œ`HÒ„I²Öz ‹h&À‚¶%%wx h×ô¨?ÁßÛµ´5D¼BàNoÊ#®ãw{–Áêô­ÊÞy»o©õ…‘¼‘@gö5'ôŸåK­Tîð•»Vך$ê{—‡–Ú³ÅÊÃè3n¡'×.¿…QƒÓÀ»!«·8¾´ÓöÓ5dÏÊýd¿!F0½™&¿ˆm…i “#¯±D‰Æ¦a$ÅÉIÉ¥aÖí|ù~ß´Ô›ú„ 3 «éúõ!Œ:Ù°ú½þ°z»ËSïýSñ{òü''—g&Ê`°GVlârLŒ„²ihLÊ‚bv5œX\CMé|z/.¿’ÅŒ $§–f<©/¥ÅXÆç\U±}qfyÔLF馅QÆm½;|•l£ŒúÒ±fòè'¶ŽÖ¡+Ûjó<îéEŠÍÅÒ¶1½N®²ó­<þ!½…Î#uúÑ!©Ã~ºV¦Z®}ùªg¦Ãª/FÑùåRðJ).0}óÆ/h-—G޾ðä(†DÆÊåòDD³výL54}g—f¹ ñŶøºš×ìÂŽÂC{h1îKÿ:ÎêOÕÓ/Ü£9?é‘XšòëÃ]C¢¨)Ð[¿ µ1>-ädE:Ocü÷4¡m|n©Ìnô…9¨ËþÀñg°£Ð t@ðb¥£*øâ¹Ý\Ô–#¾Âä'² ÉŽšÓ~†k¨Ù'ÕéŒÁŒNy Ÿ=U©Mnðï¨H/-ÏÆ'ª½Xöº¾ד»ß\’g6ü‡hFW?ôÏûG•½p\>r³œò5º¼«ŽÞÑÓS{-¾°Üáÿ—¯Éùæé€‹Y©Xþf/1ã“ÞÅŠ>¿47ž•HôÁ`K|D†è G¼5ÿ¸È«;°€zŒ¶M±v‰;µL–ôÊþQ¯iOóœÜï¹–þ¾f‚Òð6'ËŒû ìzóWK!nOËfVK§Á´¥ö aè&ie¾n(Û{Ó"î F+©¬cÊ–“¦€ºú¿âJ¤U2Xù'œbü zØl)ç'|]]½ sÐ,Ÿ[º¢ì"ô5ÉÂ<œ-P‹ª—ë’Õ”õ–çàBUá"±u¹¾i·¤Ô$Ëö½Dç¦áj£½4Áו¶+Û“•©¾³g)|¶eø£:;=íº¢Y[n?6KªK/`€]°…(¦’‰¢d“'û>sÂãnù&ŠžVŸè„‰f[:jÉ¡e…™b{´l _帀5{ÑS— Î.ë!CQ%ú°•òjv’’{ÁuÅ£a÷¶ä1|s 5Jö`™Ð?f´!lŒ ŠŒúne#ÿ‹Lµî˜cfXÃô:³%}¸,§¸Þ«£Ç ¹s²d¨àY !w¥UÆöŠÝ𯖂¡¸¯—rAyÞ÷ʽ7Ðþ6ïè²È92õ8l{>\·3ºßÙ³•ªÿuy"ŒU¢Bhá|ï±(¢Ÿ#®¦À‡8úY…eÛ»&[5Ò==a…ÏØ4ŽÕϯæ ÿö(„}- ø~Ù=éKd‘ÔÐÛÔñK´ã…‹#” qK œ­‡¨RLæþßùƤ´ð˜„U †(´¾"cóÑzï!0ß‘‘ˆŠ›Á ª™£<:oldLøÏWî«ól WJÃ(àµ*Ö¶•2Õ;aÑ{“7øëµ‘OcQñ¢H™åÞ3»…¹eV}­5¸4_£õ%›rõÕѳ>öƒ-5 NïŒvø½"Î1‚$x­ÝS ~²kI¡k%Ç;r 8 ™HŽ2{韗ÂXÒe±?eí%ÝhC;Ïôt÷s§Òˆ–ú½±q=)L׫ïëš,O'˜Z¸IŽÔ\©¤7e`å©uõj >Xž¢ÏÀì‚ Òx䃅>çQë¤j(#Tud5ž9Á‚À·\?Ò ye&᪸¹†zOû¿téù°Í7<ÁpôÍÏ md­‹k—‹î7Wγs}cåÁjœa++pHÙ5ØwFc‚Ç’9RÆÊ­hJÍ’¥×¶.Ä­”h‡«5ѽ% e6Èp1íÑ„©Í:êêAXtá …ûßþjdÿIl‘Ý Ò¥¡éQ®p½Sn’Ppž…:-²WΖ(oOýý7nŸëyŠN°ÁÊI añÍÌc\„õ£Z•©’XB$„ xu«"¼2C?ªåj4hêßôjò£<£œ¯ÛŸ)rÑ,ÑçÆ+'ãÆ¬o=—(G—÷v©x'q²._(Û†©[Y¨Mº·‚÷+ÙüFéFöjœ¯.±eHÏôlP0[³ìt30ß¶Å6ˆS7/¹®ßØŸØw%î¿[Øn2RèÑÎÿJ…QK©2¯òºoÆ¡¼g‡ÑꚟGÐÂS¿ÔI)”‹ÉÇa‰<'ëß"ôRg„]*Á_¾1o,]¢Gk`WÜBŒÃV}ð®ZÐ/É‹ÌX± ƒˆÛ쯹6îx&—_hëë|dv7b}ͰNÊå©é°(X/÷ÛÀöÙúm¿àÒQw°c²lñžÅ¢ñH5·âàµ_¤ê,ílm#U€ò·;äcêÙB¥x6¶ˆ .¯b¨žÕ?÷7›F}5TÀTûbQiªZñDHèýBц*0´¬z1"ñ\'Ë5Ûôñ¬¢¿- Ý·Ò/ÇÊŠ>þcVž3+\|uÁKìc¦‰k ‰§¢Êš1Cz8À¢9Š\cÿK’%ý·¥8 ¬»ðrïOó¾íQØ|FÈY4?¸‚JÊavz¡Ûgo™ ê‡%Í!¢¶8ÄÙ‘b™YŠen)–lL±äL±Ì!–9›§³©–lÎ2›,Jþo–•¨Ç)²tÆzœ"šñßåÜêr²y’æÌÍÌòyñŸr3s×Ö\ ÔË6=š ñH„éVÛ¤˜ï"˜™Y„ã„VÙþ&ñ­…¦\è9$Ý­7çÉ2»ô²Úì ¶#þ¨0x­÷®í‡1“O=#98usÍN±ÕºæÍä÷@ŒÄJ ž)ë•hstFY¹mÑ[P<¯™??Ð6bâóéJî”B°vtî…Ön¸S!6îoɧt\473zð×ä©.Ò²£ªÚ±> ­°2Œc­Qž=þvÍW96ä| þqÔÃe¶Q»:Ê¿O—µ³÷çõŒ™1,Nu¿Œ2ÏT¼Â•(ëàA!Êó©šÏ/üˆº&SÜå_ýSÇ9ñ03Ðó £y¶ãaàP(ƒ‚ L’áÈÅàf]˜¸nƒLæ] ¨ÓðQÃQ…Ÿ\,ª«‹•䚯akp˜ÞjqBt'O³6Ot[§ SHÚÓà·ÃÖ”Œ¡8uêàÜIŠÂÎwǃz/c·<Ú¡¢"3š“Þ3Œ9kÛ[L(-[§$´Ý‰–jÊæaì,Ø$é’åÃØK4Bõ£•Ž–Aš ‹ƒ[ÓÄmRñ;¶Ý^hOÓe«ý´T‘t38]ù¢­Ëñ¢™»3 U’2ªÑáè• -n>ýÞ'¸”Ö[ÞÓÞiÅ7#Ë£m>…QüÀ}:±ÊT†f±§c‰©&Š,)O«[Z„Â\{ߨCDœóÕEax£[S‡‘pT+®ŠcÜ WyE˜µž¢/ë¬^UÆ)äuΦl'Ý“5 XÏã=#eE¸Y¶à°–ÿökHIHð7ꨂª”¿‘¨ÒcÜïJJ~ÁG{Á±«R›°Æ‚'ù3çtöñDü°çr¥\Vã¯tÿ™¤ä~øç6£Ì“°Ç¿„‘’Ô$·W¯^yÒoÿFs¬·Û‡@{Ùè[oÌ 2MƒÏø¬'œ,àsSÚüp¬âí­_è'º“Æbì4Lª4¹Í£„ÙÞû•4ŒÊÕ)’°ìå é]ûVl¦F©’Mû¼ëŠ!䥊)kñç„øæ¤¡ãoýQ¸Žá¥cÑL‡D‘Ÿò¦ ó`ú´3/O-›Ïd>ýR!Òª "-meûS{UÞ%±˜=æ›8­—yM瘮Ê6ÇwµÃÚŽ×m+Q†÷ÉšÚ8cnÊJl:ì«÷ïèWá 1©±ÓÂØÈbôŠ­ŠÍD¿‡ &Ö*\¿+Ô'’Ò\s×ÉèÓ‹‰;’ùdˆkS=jv²q™iì$ó¤^¾:¦›´pôKD ìâÀE þë¼¼Äìh“U‡/MDÍ wxz’šdd„®éÏ(*Ù-Z!!8ªETßJ ´ŸñÝÁi'cWÖEuü’L~«¸Á=|ÇNWâß°ùµ Sz)Å\ûC:8‡}Ä ²¦è/ìPR!W‹2Š8!º‹‹Ãûô:2°NYì ñø’<¶~œ-YÇŒ)çèA0á\˜ê¦ÓÞ^ùà¹öš9³¡MŸæ³eB­ê¦8è°9zM­LÞŸÛì²F/Ñ™A½ù\嬲ºý*½ÊezÛÐÖÒ­[Db…Ô¹øŒeN ‹p.7Uç{»¶“²,ÐÔ»Ðݳ.‰ùE'h^Q•Òý!¦—»Šß짆‘H~N{ŒH‹Ìnn+Ë„XMƒ‘£@áøW&™YÑN9ÊÉÌ$³x`¦÷ùE%:j~±`²+O+ûQèWš¢ºÏå‡l28{`MO Ü« ËœŸFjcŸñ¼cimÿˆQòMë“bÿ¯ü£MO̰ʫ«”ýjÆÆ)/Øÿ[£²ƒÏDhªOO/ùsÙNéÒê&ÀÂVïɽr¦4+Wì5;4^ò»l@»”ž±Zk§©„DŸkгšob°5Фá4õÖ$àÈR —ÚÞieÆÄª ªsw8£ó“Î7J‰]Ï.žÑÉYìDÜI´oªÏ8¸¹’tÃ~þZ¦5fÑ*ìd¢ÙÀ(v Á$ŽM´4ù]sµY'j‰¨eÜÐò^-ß§·„T’Û“ë„„»ÇÃ<ª­ ¦ŒMl3y›ø‚líá§Ü ¦ ñÂnÆ6Û1à¿([B¾qpÆ4ó?*}‹tÜ«³«dsÏ{.Éë†}n>Ûç>虼÷(~#²ñSÁöQuí£'n{Ò¨9+ÿ6UlŠ/tÏnœ½­8?‹¯Ô0âÜB¥4‰ÿ¢¦1«›Ä–Õ-=«;_=N’F骓›Çž‹ýÿ¨“ë|ËÍ‘R ïÝ»<ŠÌ§‡½,L´Ü0Ï„R5ƒYbË%,Kss#Ðì­á󑹌96þ×o^ðB™ÒÞnÂ×6™U·aØ8ÿes×ìm3\2ËÓÕ#ðUòÁëÙàÊu§ƒ8{à îµRf¸¶kJÆDRØÁŠM›ø+Lr´¶I¬ø§rl΋<ßg_ngÚÀY1°rŒÞ?lvô`“ûõ1– ÉaÅG}·ÈYl€óq~K€2cÆiÑ^ù¸¤¾õ®Âx¢7îÇ™¦’Öƒð&ókwôxàÁ‘ÁÛ€?ÃííF&4g˜ŸnUOåKn[w²Ê&¬v}Ðü„Ý}Ôäfq—x(ÍP½ª0'Šw ,јӮŽokODS e±G}‡ÀȓĚÉ]2„³tOÞ;›5r<"ÛO”GgÇçÞ–1Ѹp>=†èè{¬lM¹ ÍŸV×Ü #'¹…®ƒ²&(Íë>¥€À.ó纬؃æ)·gÊÌýqJ“õ­œ–Œ&«ëZ¡ÎˆH”-t³ÂfSØ;13fßvvÞÆ‘ü߃v•k„`1þì¸^ЙÄÉ÷f²ò^nõitŒé!£^±‰9#„Yr¤¨–uL0ýª™/¯žòÐe~ wøƒÃ0B @+Á%¦{wý/wÙGQ̨U˜f­¢& 2´KAq±$ËâbœÑ¶-ƒQVËöK¼¬Y?¼>³&œËs¶]‹½ic¥­Û#‘»<€CßöS€[¦ì켎Ø’Á)•Œ÷ø¶.ÐÙ÷±çÁøúx D †ÏqV,ì­YUBçKêüåIlk´×¤Ý‹· ±}¡Ë^,^}Ò‘L‡bä“Lÿf{õ@ÏV­Y €Ï›³RÎMòi&^·³º›èº^¼³X}àYÉ©tøÇq›z!_Ôü’OÊþDd°X/v™™X 6tî¼Õ5 Û'ã™êÈV :M Ÿy¶¢~¦‘Ý!ÿã6C>À#¥‚ì: #ç#Z–Õµ#œ›C×=˜»$ÃÉä6󌄰b/½œ2>vúmèbË jƒ|”Ì›˜s3£ç3‰¶Y¬[×ÜcËSG`:r~R®·]òÆ ya,‡ìBõË2¬te`qäÌ÷&¼Ö¤NÖ=ô¯OBcz°&´³å·“ïä{‹oæ¶ÁÞTéÃÅ»ø•^Å~í=sƼü8"8kòÔⶹ׉ôø±"9es#”ƒ¨Å¾˜D%ÞSmíåÜÚ[ÏMùKË$iåaÔR«†åü8i™%s¡ÕÙ-£ûLånÚ{²A4 o¤h „—^TrfNÅ*H?¨]ÛW”ñr9ð™m k˜GŸŠyHŒ õï2 ¸ñ>ÑÜ.Þd­ç¾Oþ¢ [hnúÑxŸù\Q:+ŒÈËÚÐyxØ×s†èèÿVZ}o„‡å:™lótíŸäŠÉKÔ²¤N¾Ê©'1 W¶¤ï‚.ý[ð}ÄÖ[3F寕sò,CmNõmØ`Æã—jiD`ÚvÔ>(>1„ü ç¯eÈ„ïp÷Ž*áz–ª¬â‚[?ƒ€óâðNÚo›‹„媻ǽ¦¯Ô)«-¸ ôŒ$zÅ#R¹+üÐlÔP´‘Hçï%Žèaá;& ÷¤cÿŠJÉ'ÖýŶ¢ë¡Eݾ cÎkÒåS[95•ç/´)°À˜#Ä©G¼vaTsŽâÑ‘ òƒÒ@ •?N¦%5m>s©m/OôDÑÓ;ï¦û–VupØ€Õ–€¯:Sƒ‰¶ûŽz˜wJñ[ÏžOø v—4í&¶$xÏalÑ[üG(4 ¾FWÏ•:#ט—|œ,Ea9i‹#vÉ–'ÿ(WJÈ;3åTŒ¦0P€» êoÌ­zq@˜š­)á²è6†&®—vn±íàjÈ.Kg-1—€}ZTZwí7|¯ÂHcªU–w˯xfó‹ ›f#£=ã§o1U—iÉÛÈoð#xtÛ¨¤eÉ@a–ÂS¤iáššy‹«•v³B4;Uâ~¹ÿ˲²sœ½.hîìVBY¤4¬ÉIåãÀI¥ø,. O´9\ÙQD)”ÜMÈ»5¼]<¬q/=Uøã¸Q´{isµó A£Uçï¿ÒÐXNK™Šäq0ý±Ä°&Ú¿dÍXY½jí娤¯Œð\Xª,hd¹[=V}ƒ ø 5¶^ER…3qM‡kê8»†ò`£jâ0ˆ3|ºÚá‰?Ÿ®ˆYŽs`yåÅ+X硜~ž¨A¼I…z0V¸©Ó/–ÆPY€26?³tTf™å­ÉyómûÅØÞw±Ã1ÿ÷½ºðwš®Í×°Ëãs`ÄÄËÐ0!‹O{4EæÊʤƗ žt×íÝW›áx»³:Šßú‚À8°ó{^©$¬›–u¦QÁg|³ª5ÁöÆË›Ü6xÕõ ™þÂ<&Û]èǽA£‰eÖm^kg­ZíÛßfÕcá“:»`3ï•/åù žH*n鏿¦a]´+î6Ð|±Ë}ñ{û–…jÙ}% ©G—m—&aS)ª²¨¶BØò9¶Ð5j—z&'iK³ÏÓ¿Z8ì™]é.ˆxLÇìÝ!FYÀáÙ=NË*’ú¯‚u£Èê†Ãìq»Ô#ryÒ•P?qßh¸éá\qWZy–GÊ›ï:‘àq3ÇUWWwk…ã-ŒÌ… æZ¤^tåsß5Å*Q„3Îü Ç<—¶pèIGlÏl2Ù½§›¶Lèõ·s[ «óûÇ{Ç—äyÕÞF®ãÖîÎŽ!…2¶à«uòÁôäôp„Ã̑ę[ðjkÄáçþ0ѽ?§ƒq˜.•À>§²6߯°»¯¼@Îó 2A…9߆€ e1è³i&/²Y§öQ,—÷µZ¯{B ,^Ýé/£µÇ6 ^š?DÌ(ñn©í/«ÉoqRÖÎØøðÙT Ä£¡Ãæ´z°s6Ö~®­÷k wòõÛxú•A¿Ø—dIaí'çÃØà0NokËŠmÄ¢Œ®ú´1!}änÇaûÃîÍÅûm‡Oœø äüÏ÷n~dCqg_¢}úœúðOÿF`éÎ&—Òਠ-H³ÍÇ=FÕsk:yN«'B‹« nV땆]÷õ>³‹¯šO8âúÏøcÏÌžWbÀ¹T‹fßõ d±ÝXS{VCÀ'¡±·ºÊÆ4\Û|™Þ¦ÔüPZŸ­Ÿ#;'ªâµ$X|MzºzŸ†‘–ÓȽ×-™Š yE­ò2Û ._f´ÖOG ©Õ&÷|ý\;ÅʃçÜoÜš–DÛÜ¥ï[‡QÍlT Ôx![OQˆÂ:N·ŸÏfå%­ÏÃH$h£ZàÌ=D§´A ßatJŸ“5¬ô³ò袹# 8ö†±¸¶ß¿^¹ÓÆú¸Z¶é/W!<”y†^÷Ã(ÍÉû`}>â¬íAº$´E\Òo“Q¡ÁÏUj5Òd’n$bñ8õ7e}©ö~iB©;ÏWûl6jT½/´’ØK©nÝIØoÃáCÏŽ,…9Ÿ—w «Ý™ Å?¹µ:×VEäÀÒĹLõú¡ʨSsǹ5C±*8Õs׊mÑÙÁýþ‰‚ê‚ÌD P¯1reЀÕ\Ĭ'ÈÚ1RXŠë¾Šù¹~¤çd~è’P0ÈÝfª‰ÓÂ×Ê>[_,ÜÀÂb[›ìÎJk‹UtmQzô›VÒ|pKWý|é««µÕ>Vc¶JVÇ8£44~YÙO­¨7Ï‚ƒçvnÛdíö± aÓÖØH ÏutΫCÆÊ;óÀ?݆äírÊN¥)MvË/Î%О.•*9˜rh§_ÁBæ³,2>qU+¡/§w!›$Ö5mûé†~.•êdöîVÆ•º?—Ow\ ¯¡'a2yeiÀ™êtî1gR_ËŽaÃèz-¶ýD\3czH¿üÓÑQ$É›5zF¯é§+é˜Î4%Ը웜Ɏ©md•“Š5Ò"{¯ßqCB4V†ƒÜÛ€ krwî@΂3Û2¸áÁ­0éÂŒÓÊ|©k„.xF®M¬J2µë÷š»–ŠÖi;uQÆGl¯îLeF–xƒXÕËT¨ºÈ”ÅÔÑ®ü!ä‚Õ/ÇâF ;Gqk[ò_Ž…Q¡«““\ ‹×6#ÎgˆB]Ɠš seY‹9Fv,4#í‹GÙb÷×0RÊ9&±|DG}O¬ÿ|2íæºxÉ0Šìª}r_{¬îÆ GÇàvÅ¢‰Ü7´¸jè¿êÃÒ&¼«á–_ÆÎ¥Ãœ*î)¿ú§Ôöå:WÓvûýDØAµŽßXÔ6¤ŽÇÓ{à ÜÚÅâ̶}ŠÁ¢ð#ð•-ˆf¾x~Ê%B?.¯KOÉôacùr]ž|Z»…ƒa¶ˆ-Š#v zè[h›l!LßìÉ»…²ïy%™«¢J¹‰¬- ëµ€fÌY L…Î+_…IõíV“9ØÆëc4¹ÄŒ™ÖUwHQÈR8 Bñ¡R]]äV 7qï ¾˜íßgß°·«Cýt¬ÓæÌ¾d·ŠôPu닇ð[p&’ê²ÅÁt÷i¡hx¬‘Êõó•ù\¿c¼Šµ^UÃñ;Õyá›ä×Ek Þ{ê_ÙQ‡Ó6×*s$»îSú£}óÈË»”ÄXù5Ôµ×b›à¸{Â6àLøTvDÐy4Ýï~IùäL)1J×4a”ù ï3'y¨3¶, }ÌÔ!߉ðú-´+¹‚"[͈‰`Ž’OÕ òÐZé\8΄ÉɾW7ö{²F0skJÑô†#ºœº¸mÌl×RÑ9žíX‘<§ÙÞ¿ÈA5/-ø±E;ÆÐâ—•`w#xgöÐÆKñ´«˜ñQX±õ ÒY „i*hºÒÛà¤'.D‚YÔÕ»6[ÝÅÕËÝŽ,é¼äê¬6êª~}’u5öLœãEÈq›µ)š/:ô`\W£zÔÁ„ô<=  @žÍPP‚Ž cûÓ}6³$ÈÇ ¼gVñ6l÷ºVGd/ƒõ½­ÑU—Ñb©e¿é²}AXÍÎqOÍ¡óïè Œ¦v÷î3 ¸‡/Õ÷ÁÔº~äþâú ¢/,óekë\+ÀÙ !DªÚŒ•ÛsJ0´‹Ø Å+Ì:ºgq5ååOÓKu)ÃÐY£‡ÎTFèã¨ì¨kÚÞ?ÇÝBÚ»œù®ÿĦܫA8,‡¦‡/‹#‡rÆt¢sÕ+ãi•_•I¢¢úp¡:{‰‘ÚYs ’Ã>* ­ß ³ÒóÒ¡©Œ4ÙühzG™löß.éÐÆ¢¹F¿ŒµN¿®äBŸ4l ß=W¶™Çö¡±XY„õ2" †Ó+—dM¤ dÖàÑ9/ 8µ³¾þÚv¨TÏ¿S\ØÚgT cáo£ÌBŒËœþ&sëÃæÞÊ"\Ö2ÅÕÇ4xƒîAs\Xš}i)—Õsß1/“ ΘYb0Ï–D9PÍã×9µžQg+«qµì×i2’Ç«Op¼“Å­V.= ðê#yjTƒ¨©yOTef#ŠMwvaW3¿ìƒ*AèÜ´‹+|tü<£,*.¡ì¡¦šê3Vûø^ÏÑxc'`Ñ-ÞlÐö¼Ûž1-×l,Ì`¶W'ÃÃàýÏq³èìâd.»îÚj·j•Š­, ¾ù ¥i©›J'Žldz©CT|”9S½Í>­Ûv(çïä¶õdD€uÕ¤WϘMé¸"QqW{öV$¡{õåCòp;Á¶<¯g–-m†Ÿ¿/ƒªÄÒw{à\’^:ØiQ$d7C„‘f„‚Ílôí»{”ïP‰ M¼] !Ú°32î5‰ˆ’Waõ•ga$C5Í®6´¦à‹šWJáF¶ú˜íOª5ðJÏïéñš³ŠbñËvñj5œðªïè‚&°\ÂÝ ]›²}QBÊ7V¥©úÔÍd}¬æ‹”BJató.öÞ ²<†Iý©Åï«‚úyD gãÛØÔëfÞ°·E<jº¦°=õõu‹(Y#ÁLkdà‰ç Ùo¬¶·QMXoþÐÍÄéõ †50jêí\â‰Ø³úÄÓù07¢ÚÖ1ó8é¸Xé lÝ¥ø,:~˜ÿËéõV´ /È25–㇠پ †—¯ä!ÀL0&Æè „˜4†÷ˆEnuLo6 éX™^¤£è³a% ú!Ö%¥¿ù:ßî–Ô[È“–Ð|…2Žƒ'çÎfFÙgŸ%WìZêŒÅOŸ`‹HüFºáIÆn“]üüª. Ûç&׬éÈz³F9Ózv€þÝç›wªïï¥øÚÕÑËàÅ?W*óÍIŒá/[*¿¢·ã° Eß\Ì(+˜§¿íô˜+¶·¶ÌI}‡Es´²0²ìüÏOuF‚^³½<ø5¿:$aD‘?‹Š2 O;—od»„x‘J˳µ£Z*Ç5ôÑ› …l(_cFìÏÍ¢K½’fZ"2þÇ|x‹^?"@<µ“1òžƒuÆ~`m Œ"'mú…ø_s÷­ïÕæ•4TS¢Ò}û7(gû ñÐGäî`]H;ü¿Æ_8· €'á‰&àÙ§:B”Ïs_[ÁI ™Œ+‹óL!œ£móqUXÓ"êÁB‚Æ~÷±}ïo{@OtXÑkâ—í #Wë©q<ˆ¦¦ÜoòÔÿOy‰üßå%6aæ÷ØjXm^f³^#MÏ^{I…ç5Á”õ²`·Í¥²Ó,m„9š_VïK´Ö)³³˜>³Œ„5¡ÏÇŒDŒD>Kþ«¾\ÎÒ éešdsüoS=ŽŠ’ÄQ9‹˜»H’¹R³,å5iEsþG1“\z:Çíþ}£ôý¨üo£bq;£¢á‡TàÛå}ðç=`Ç0(%gWî`Y×v¾…§¨V^âM±ŠG=¡˜yòW¡…Ñ]õ™‡g[=ÛTe ÑÌôÒr‰Øºô\{_úÇ4‰è›UÖpQfp¿ú”Ÿ^Å£Q³~‚éŠæ‡øLŸÑANDiº¥Ùï!=ü@¹(ÝËø¦6“– óPÅ™¥¹ÖX€”=ÁN%ÙÆ7Á5Ä‹K¢NèÌBf²oëÔrvPžS]QiQ›ý9±”ƒ:Wl·O¼ç3|¥’í8r•@’¿s‰Vs¾üÊ<3´'›N5 îlñãMrKþ;Â!ì¿H 3eñÈ᭔Й3ÝŠ>ºpQϤó¨[²f=DkGPÆy"§/n¸ìiüüàÒ^€©¦H¡IT{ù4nõH^ùÁ[aSê0¦v°AØ7žÃÿ‘¸Œ5ÆÛgÉ2)sÕÆ]U²Y5hPG¬™Ù|ÍEr”ÙŸ›ÁÚaQÁ•JŠÍììnûz!>UÌ&+¥y¿MQw&HC©õ´»Õ¸HåâD˜iW‹btyúõ¬Öéå‹GÛØì²È¼Ä”èt/ÒéºQ¾DÃÝÕìyè}µEÍ 0ÛÊ8TÅ£ÑÈl¢x âZi,öÊ%*”§J¤õN×niÚ§«P—×ð`®ÌÖc„ jñàýŒóÉŽR2e Ø,'%kOúØR ÀcK+?ÂúBV594( ße>lSc cÔ8G¹Éã×ðYàm˜â¯\ávS¿@в>ïm¶àoP)‹xÊìÌuk6éM›ø1’†W¡pe_d娆qÐ)Ü6þXeߎ3cßC 7;%nÏÒD€…‚»`b¥,T˜±QÁn´N»É,ÂG‰£ÁùO-ÿ )¥£>ö€àõ±z[xV<6ëêû—`ýÛYûÞ„±upÏS›eRXãɺJ·§üX!£-Ø Ž]³þìà”WnT¢i„ð©`óå)Èœ“§Þ‘¶ÒÖ ¸­+/NØs'<tñ<_é*ì QÈGæ#Œ„ÔÖoúRqmôá²?ôÙÂXq¯qŒùCÖ[Âî-E*{^rŸÜ_êÃØÛ¨E£¶õåÍÍüÅz#—7ð\\þ &‘"Ý„ÂèŠc…:9¦ž‡+ó¬;¼%ã%Ýb€Â¿6:«K¯„±ùy£h¶/ªlÏm»€\N­ÂYu”Ïrë™~ÃêÐGšË1B^Èj@Šœ[À뢡%ºXÓžÜDÁ'yôÊMú£5aðî(¶ö|F÷Û4€Ä¢·ÄL¡9…×e 90»uCã¤cÿÖ¢¸çæá·RD½b~Òq<ô¤­ã4w¿ìÀtås¦Ü\ü! £6v” í9Zz—ÿ3 ‰QвåCü¼‰1UÏZ™‚Älwm"múÆLJoÏk+D€ÑnÄr&Dl¹BçPz »_õ¢GÕcùä>Ÿ¨=ZÛÒÝàö~ûØ;*2£Øð¸ú8†b×´YÈÊilJÕýñŒv|û²á|Óž™Ä¬B3í/gþ°—€Ÿƒ*LÓŸaìíF t K°-„:ª9µAõYðS®S¤](£ÆP+Û\s ¤šÛºÃŒ] iª›iï¤ÅhoËûgÑá™Ë±£žHQ< òmØF—ZŽN¼{üö+­3ÀŸŸYÞ|c·àôE§øàÇÖ—g“ÛN.8?B‰uwƒ:$jÀS0…ðÆìøš¿”a ÝŽSÏ; ù]R¬X–õÐ>]ý w9DpFy„€èäЦ–‹åiØ& ¯`?ôǾƯ rëÙÌùÍãc Vrâ8PæžøÖÂÝpü¬"‹Á{/χç–A{·ª¯aS4õÃ³Ëæj8™Óœ/ÇR¼Ëc›×•dýÀ' }¯ÛúЗŠÝëNOÑÕÕr¦ 4Bzgœ¦fhKó0miµžò£û7 ÖövE^Ýzã“€@5Åž`ç-ÓÐåâÐzf‘ÉP.Ïu(Ž,Sƒ‡áo3üEL›éSk™3[¾½ŒÏ†?Ž´Õºlb“9ÊéÊííT쯕)æ(IÈý37ú=üåèÒÒÆØéÄÞ‹®¥‘ø†Ÿ;´´áikE4Žƒz+çXÅN°± ¢Ç·Çh£–4€°Ò­ƒRޡ˾¢‚<.öãùuAËHý½ËC–δì§L}¢ì1 Çý°fÖçl™z#„*X¤ì€h¥Ãíg× ÁiF’œ‚Œ5W›Ð)«|>žÁ3;-ùŠi!h‰¶½°gq¹\îbòFÍZS4v²n;Ê.(‡Ôt[GýÀÀ7cô}()ºÞ“â û…é"~µQÕ]d‘€Ø,”Њ èVvƳýš-p¬VžÈC¬S¼Q”üTm(5Ý,d “°oV‘µ†k^ ºTzˆÇŒÝÝ+]¸CO ½ÎVžö7³#±€ARËû`Ê,µÊºLË$2”Ò|´’ìÇÊÞ…õ>­\DøeÚÒteËêæå`m‡ÛÙï0*àã¸fkšLse¨ž¼˜|X¹ê$³±‘è\ã`b¡'c»ŒBí ¦Þ)@ìVž·´„H7¾ýSý+®þŸüqÒ½Ss¬²¦Õ5ýý)¨k›ŸJºöÊY¿Ϋb¡äî]ÁŠÄ{èîTú™v í"Tá¬Öðtcr}ƒˆXPÃp^]¿Ìhöó0,Y³Ûs[^UØÁÈ?Öe.– ÓµHH¹¨lW°×¡u9§±b—¼špÞis™l°o¬`ëÄV0Õ𺾧À»´ÖÑøHIœ!ÍŽðzõ°“f6phQ”èí¼®KÀd¹×0„M…”èêÓô~¥ë!V —‰1Íý§gB›F¯ºZi_q"úü›&SÉš¢X¯~ÑŠY!ÛAúès¾ÄIØ>õ¡ˆ.¾š·kJ“LzÒܾqtñª­ÅR{OÎüM;:‡f<_¢zMD:ü{2ÇŠd‹d2ÎúûçÛg ,¢£Û,wŸÙ§Wd⌡áÍÃÁÃ:î´­aqH$Àr@üEcÑâ0Z5‡ñã ³q¯ô&Û%Ï9qnvçí°¬ ìp‹ð»ûáæÑ.[u8Ï(É]}¨Ù§”fB"]þ4Œ”è(µ!°>ÇûÌíµ†ÊCÏí¢¶øä3ÒI˜€K„4¢ó©w§ å§ŽÊ07KFõ„ú¸’y¤€÷ô ]º¿a¯i­‚/ÚðvMšß¡^gÆ^ÂE¯uÍ ò¯5‰5šbÚe½  ÐA@×:¾JQ²Ý/)äTFŸ²‚í´c³›6š§‚7€¦Î#áEö]"ºi·°G™YhÞrCãøòì.º£Á³º¬øÅ/@Áu)ê«-½¹<Üp^J9š€ÖvËjzæ &>®‰íçÕe/0yâ·w›,Ûà%x?žî [þsþMîîô+&xìÙJ™É6}F§þœ9[à&yok‚PpÔÿ‚L"†›ØžÕÁí=k\—ÐÓÚYV¤º"ës\ÄžÅCP’æÙª*f^3TþOEl*®·“;Á$SÆò/°aÏ L>ì•ùÏìý½9@¤J‡Z\™^Ù$/H¢œe¦jå\hLCG•l{%dPÇJV¹[ºmmÆÆqdò^vbÏñ3DºÑ½ÆÁÛZoH/ç’­Fæ‘#X)çø·âCH)AMV3àônÂX]õBNbWqµ Vô{PÅÝÛÖ‘÷Ïo7ÏDò?tÎ2ßúÀÒŠ-×3³3¦¨i>½ùTæ´>3;iMo[›äÆË¼SÛæžº ‡¿±ßØÜ6®µúv¼,Må¹)”Ö|’‹Jòùö=dŠä™A|°óþôœ1˜Ë|±m#i`ÖmºR*VbpiÂÃÅ©å íPœ´‹v¡<¹¸Ìb />J>ÙlܳM@†Káé.×3\ÚM˜±;Þ ÓunöXÏZC Õ`Þ´ªV!¦T±–Ö¤|GAºlPZî¾b1:ñp/JÖ²Gö8H0ŽÕ=¼ ©ö”ŽAt¿C $¿–ú™ 8FC|O À- «¿BZ¨ÃÙ^k™—íjE}ìFµï=¶“6Rcãäá×#y¼+ƒYŠßÚÿ¾½âó$϶_”DŒÍư>O¶†mxgo©ˆ›oô m(Êh ”ZŠä¤~—2dñÑã ‚A)cǨçr%˜^Š Çì2È2ìÒþK9CTÌDZm­Ò„Þ‹™kL·ù¾“,[t‡_§¡ç|Ze›Ó† Î3Qî p+MÔÆŸ¡ŽXTÃùßÑgÛÏæ,÷†Þ±ê¦õ]-ª#G0 c£tXa¦Qš*ß…34jü¹˜ßجƒo1 ÷t‡ÙsIyð>,ð`<¸}P/U¿xoVÝâš36t«sä…©v±a«Ì"åÛæ¬¬ñ ÔFÌY3Êrqþذ!оËw„>”/ÃØeÞi+øÍ°ßW§€ôc"htõꈵšó{Ú´2 ^G ”ÊÉô9b³y¬•Þ´OÇ.XŒ‘b½ÁHtŒYÊcmö#á©Îß«WLŸ½¿~Æ4 .h_ è3úfo|üH®g È–Ù¬EöCq|böCHtޱì%©²øN›V0Á CÖ^9 >„‘µÑÎ8!ՓÓY/)D¬ßmX~L®K^úûÂþ=wFû ¢âÕï½½i‹‡0óò]$…V»žƒ[Šúg8„W£ƒ¨ÊPÉÏùÅ5#~ 5æœ[LþM9E =|L5Qk6¬ŠtF{]5ÍWtb¯_ƒ•žñ¬ÏäèGg¿ñ—PæU25úõ]Á£¶áVïð¢ø©)Å=Ûš©Ô6«u&ê;¸§R&[{5bGaµ®×“»C­Ây[R‹%.Þy9¯ÏJiËÄ0.û_CϰƆkSÞºÐñ_иa»:ßIÖ§.Œ(Ggø+N¢–M…ÜÅ_±«_ØÔõVeü5ˆñ¹ü ±¶aкKì;q›¾Dúv†Ò;êõ9ÈŠnàå}\#«¹ÞFPÙV›-3¦ŒWã°&þL½£ôÚ™?Yî…Ù(ð¸!ðsVù}N4ð?‡Æòˆ“Ã5»· – kÞW·×<¸{=_3·•nœ¿c' *¿½h2%‚ JüØ‘‘1­­é¡SàåqÑ…Q2„ý†£`µ`MvŽ0ïÜу§öÕ¦\\Ž0[¾´ÝãªfÀÒ®aôᶘœ©P:G?`C˜ôhXåËcø”¶çYi©³O°Hc¼š(^¥«9³ÖA#œ'3¹v€\>,v6þÉï…I¶4²å'Õ¯ŸöñÔ(C?Û]…ªû¸{qQ T²exŽlµ}z®]š²m1Ó½Ü3Ypñ墸FªIÓž¬¾]Ʋ`ët ]8&K-›ˆõž2KHÉŠLØÌøþš£µóGÕ}Û¥LB²<w–§ëÚjþQŸFÙ1±ãþÌ…} >æÜæø¼?ÿ½*ø$ì÷“¼Ò˜xo›U`w†DñèbSv.f,òá ÿÊm]‹«Ã ßëÉC5Y,x*G!áƒÊc]4ÆÛ’‹ïRÄõüÓàIÁd©-ÊNßÚ‹d Q½&¶k°o[‘Á™~ # »wþ&X"‚\“Žiñ¶0j˲dÁ2MºEÚÎEí-ë4öƒû'ºAû ³­M^AnµóHÝl“]k(?ÞX,7 Õ…V´ëºë!%¬NjZS.+w¶C¬ü*YˆÃV0RÌ{ã\¡Æz,ªß ¼*ìËâ™^¹—l!ÝÀ†&yu)„šo²+G¥ Œ_hlNçщ’¹:·:[Y×+{ÙÒᎼ—¼:AR޾Xtjí§wE^7ï)­Æ£©ô¾¡¥AµÕŠÕ߼➹ò ˜ä;C½$¨mÁá ¿¥ääåµ¾©k…"‰]E+W,Û·ÜnƒÅ8ÌZ%ç6izšôëW¹u°&y‚>Eà€ÀsfÁ"¥Ž29>äˆ oà¡«=ÿ#8Áÿ;e•ùY{ kQ}Ü–ƒ“Ø‘I\¼(…CÓUOráHм㶜-E˜-‹êR˜Š›Á cÚ.[~?¬à‚çFê„JŒç8¨ýÛ€×= Ó55“ë ³°Òü«6IL!ÈêÅ5û>ÿí¡Üq ½óv¹l>V¢¥ë£MT6øà¦ A4¨Hmõž×‚Uu°¨,¿]uü#™«d×6½¬d’èVŽåøÒîåïÝQËÿ‚%ÂÅ^´°¨ Ó8òpú´MsÔ¡°˜)JAÍ®ÿt“£ޒˈvÑâ²ý—¿ˆöä©Ì¼@áS™û­±--ÿ—›y‚’³YYÌPq–Fi^àã¨ÀßÓYÉjµ4Íü=‹ ­eI—øßYÌë³Ù,ÅßóÕuüßÕPî–—Q‰ÏçQÊÏ‹Y’—üß´ÄçÅêÆ¨}+²œ²}eœçëè¢9ëç²Òj㢸(S+›ËbÖÏ¥ÉêáøÙê.üyQØ”3“Ì“"ã_ò‚²€ÿ>³7÷B:LÙ›º¾»FâëG”ÈVI_þ’¬'yߥ)ó†,?NÆ‘ù1Ó™Ö+‚7?X´©Za•d£ ô<ÈQa³±-oLçršiê–JÚúê@µ‚ÇLMù=ŒÌ*‘r·õ¯ìQ˜¤œ‘¤Ðu›Ü–›îÐ•Ž›ÃòÖÓÝ\ Ý«upP—¾c ø…ðúÁ†Ñ»±Ó~d²³–øv"tv‡Q\ˆ±\''Q`ÓÎààÑ<6÷×)ó/¢_ þÆ´1åœøƒçŽM¾:€™¸"Íò0ʳv·Ýq%KIù{®…©’ OÕLÿ^…*ünöÆ^bÀ>qÉûJ“rîÖ)ùL%m&͇d8º€È6ðÁŠ=Óš©K¯àÖUÐF^t‡…>´{ì:¾…®aomÁ$u¡QŽuêÍu||+^d„ZšHÁ0 êf»µâ¢·ÑtœñÍyŸ/–_¿íµ6úaÍÓOçõc^ÏEàP«¢ì½”‡‰fœX¦0UeÙÏ mµøÆ£iÄÉë4ôOmÅ5Ñ´êÀSÂ…jÌVänöºN³ ¶#K`!_¼D¨5È¢÷(;´u÷W«ûN²¡†§Ý=ÐÐ`—Elýrô¼Y6*ïMÄ8¿éY”®6z^ïØTåq²‰ï˜T‹)4*ć¹q˜dçCæàÑ Š”0Iý•h‚ÄÙ&¼Ø|Ò1mlÈF OœÓj-i]ÔóæPlH¾ÔTGalGûYއ¥%J^Ò„DWÍLúæ%Z÷þãX³p„‡Cr›9Þ½ÑH–74q+þòv)¨ì»U¿×2B«µBy1Öô·n‰'>ùÚ ¦)Ø ÐÍ¢A”Åíÿ£ì?·ÜÖ’¤aøÿsòG^H8¹"(ï½ß2°ò%©TòæÚ?Fd$Àžùº{ÞY«çœSA`›Ü™‘‘‘ɛˇìëLmÜtõÍoš÷^5mLûÌÂZUÑÔˆ¬}-vƒDO ®|ÌFéáÐìÔ½’ð/õ ¼ßwÜÌh ]v¡êßéÊ•Õ aìt@›Sœ?mB©ñŽkµ(#3&j7Þò@ó"·“Ò;|‘Î’íÝ8ñÆ(‰fìÑ+$½Í¼KÕw¼=Y£79Ì…*B™ÞiyL»›90oî.…qq¼b4úg•×q¾<aåCçÊ,ê—pè3áíö°³ÕºrċғOì7ĉMnWaâÄpTê~ÁCÞç+¥ÙÄî–c?sÿí#$G˜‘ ÃF kË&M³7XadbPb»ŸÆŠIÍôg=# 6‹Ë†ûíó A¹XM¯¾ùŒ-Ä?`ŽtvFYšøèaŸôC¶¡I¬.ûcAå³×Íîy5Bê ÍÅ]–—¨fZ…l€“œú£t¯ä‘qn2’°sÊùXÝÄȹtŠ@ÑMWº2”…õÍ[Åêp¦ØÃ‹—í #MÁ]2Œ0Ë7’?_×ÿv3ÈDL`w7]ÓÀÃ0‹£÷mRè]2Ǭ¡æóˆDaÒÎ+¡nå…Å!.~ù³DøÎVPY1nÜÑþ>6ðcu—¯§Å“U—´ß¥ 0ŠéG¶iÝç'ÜQP´¥A&CטjÇDÁ‰gá”ï5×™/s°d1'æÐt<,¨=Ö†‘¿×Í Pcâ7‰Ií¼úZnÝа+ë¹ÜøÅAE¶1™ü'¾÷ÇŽÊn Ê5Ž{O×?öŸ7ǃ²˜CйøÜ“1-¼±¬·°ªý3Gãy¾Ýu˃DnR9á¶ Øk{K“JîÿOzÏ<iúO×'sÐÕ[¨ÛX-Ogéag6,Zªë·•P0³3ç¾³Yà–y'P«ŸMÜd1Ïà?âÏ1{-~u<'ê3LÜ£f ‰Ë¡ûàŸbÖ[‚ÏWwª{ëßò0 IW é[;Ÿæûü,Ͳyr!¿fó §<ûe’r÷ÇoxX¥ w’uHâ”Kß Çz,ð+¨èUhbeÙÀ¼¤ÉüÇ—É€ †žažç!²{¦Éí,“aVtõú³guÜDÀR™škH³V ZÊ•c†‡EEu誉EfRaÞ5„7ƒÐ{®—߃”&lÈ«&µ!}ê×·3Ïý\6•¢}íþæXjŸ½sÿ ÒTuœEú^iÿÑɩŵ‹[BŽÁtªMULßd£&ÊF1¯ëNl¡d€#[š3²^Ø iäÉÆÇ¦=_ˆ¥R‹]r+Ü›om³˜9KåZih?Yƒü<·êõ~U±`£e?ŸØ2IVl¶ò7›Ê}që´[ž«ß±yÿfñÚžw<¨£ŸAÅ<Î>Y˜&ghqLŽ–s›qmvdf›¼ÀYç”KF³?˜#²¼gk†×‡K'½5ÄõâÆ5LôgVôbDD±dg}y„Ö¶P\. ‹h }ºV3¨;q‡Í‚È´ðò_•æÕû(8öšú{”8â!1g®µ‰âä%¸›½¨¿Qn>¡2bkã‡öQš7csúÒ\hËŸ?³ó¹3ɵúò Ã9cZÞÛHcÓz+fâOÒ=(/(>‹lYóž3·yßÂØkŒO<¶tËí½Çn|‡tüî*ùûÀÁ !Ì6F ¨â‡¾Ž~ÓãÙ„¼^ÁêîøŽ^ òœ4¯aÐr[£ÚØ%ôZÔãW¢ËevVWöU9yÃaúQ—ŠÑaQ›W~ÒtòÊÛpÚ÷L © (ÖÅë÷<©8–m(Û™kÙ¯ÓççÏÂÔybݳU~t´.n›4ðÓµo¾½8]ÖN2"_Ð1éX§ÆÚœ®|Z¡>áVââh,0­|4ŠÎÐqï—¦9È…X$-Û9P‰_@€:vUHŽ?^'ÏmwûY/mÛqkñ|*ȘÙÇrf¹ù>›ñ¨ûxüþ¶m)÷©ÙQXÔåÓÏ0ڮ݂^7׫ˆy²mñ¢mÆ¿_†Úu´¸¶áÔ¢ÕH‡‰>A&L`Oyé:rãÅ­’ò„$T_d‡¹#^0£âˆÒµŒèETfUãbZÞ?Âû uí98‹ùð%8*œžŒ±Ál.ÂÍßK¦•@;¨áDÖ!T‡Íøs‘œ„©÷@¼³2¯‘e~‚\)7‹ÓsFÙοÕõF$Û-¨Åm¼ØÜ$—ñ|ZqÔ(j·Ñ'½¸CËÕoé¡ÒÊ¥ÄfÓxì2Ù¹o}Uø&o¿+H8¤úù<8ÞŠ`[Çâ¡(Jï›l†$ŒØf&‚&eòÇŒ Ø Î§¬ç0—ûFRJó<ìC%º®Ÿ €¹Æ&ÍÈm’çW;ôÿ‘KM¹L8-ÜÑõ"ŒDxþ¿^ToL6„»º £F(ï[0í­×w "‚—zîWÊ« û»‘âhÃô“Q]_mÝ1ÓëÏL…7h33ÉÌË×ýiÛ–ÆD<êãeSó”éÖõz²šD·Ü—Ÿw2?ÚÂ,¨3.{¢SĽàgdÊ{qÑ6\À²¿ij{Äx~GîúYŸâugË· -d2)bSOþÀ€p/Ê–‡m :ñ5I¾ž—mò8cÑ©8þhXÇØµ–Á3†Ë×6V½gc‹ÊýÊ–¸«°Qz/‚Èljì§ïÞ„W R1^MD À_ß,í%súý]{Óän} ^ [µZè*ÆÏµäXÙ–4ëóçå”û‚]áÁ1@¶É›ÑsžËÇÓ¤cλ=Ž!ß$æl›°Íì°ï]^ôéÁôc4奎ˆ<Œi€Â'ÒÖ:÷Í 5Ęï¦Ç¶$í"Àªý±%–áAÑî7þc·ðJäÐeGGì¼sE¤xž‘c4³50¸{ Ôn”¯ÂÁP“ó4ص‡¾›M×4ÍæqRîMGE K=úѧOAù箢ß{¦=Ê>PÔΉ£›vÆ=ãéēנÄR +wc7œîYðÙÎú•­›jV{8±@{|(Îcš˜Âóã(³˜Ê”›hï¥eoŸøÌ%•Rç——'¬שdrL‡âÏÄO}üKc‰eÑ^]š—×ÌN锈)dËÞg¸ î®J«ÚêZÜýoÚkKÌ•oâK_ëg槯/ãUÿ…BPü ÁÕG:gŸÇ*NôR™N‚ W´šsÕBí-òÚø°ÓÇÜþ\·-Æjçßm¥ilG0‹ŒH`·EéD‚rõhIF"Á¿M¬—±¿Nô?ë_¹ð¥nf JßkÈ´§´Ñg–£D²¢}écþƒsµK¬1‡gqʯ1j+˜h0­´¶æuÏ” bà¿ë¢’øØ[ý|«ýçØN}çļ‚Ã;>M DÒÔÚµ–2-ùƒør¾–³†\Ù ÖöG<§õ­D6Æ8€¶â½=EµÇ\£…õÄU7ìPî¼Z¹= SWR²žn¢ê¤ìU·O?8 S÷ÄôB°J!™¾dÃçB#dà9ø|öÅXKÖß½U:ú¨8÷ÁŒ’Ÿ¼,9’Ëãr7–KÕ^8ìƒ#éC÷2`§ ¬oðÙ¯ÉÃv¤£¸xZ[IB¬Ì‚Ü}x ótèAs´Lî>‡;9_}Òg¦JV&Iõøé­J“\Óo³ ˜‡ÙïU`‚,]}ËÿÌk÷[ ‘½‘³Wöº 3N‚GèÌ{àÏåì»vJhË©0|¨By¡Õ).øß÷‡±f”Fº•âjvºFÈθæ”3ÇÚ }ÚÑ:Gºès°®F,rôˆ§Î­ÃoÿÐmÆö0ŒšÃmüÍvJCʶMÕú²5¦©Öã€6õäZ2wñÈ| }ïØj0R´I `gÝÀØ,<³5Ël k ûÉR1•Ý¡¹ÞIt§o_À˜ðZƒZæÛ¼æÑ>ý°ezZü§?ÊìqÝ?cßÛa{ žaê§E¹©»±m³S¤’hæJ!qÛÌ' f˜íÈ…€kßâÓßAå¡oÞM<õtb¥€HÕ?¼Ð‹9âÓNÈ]AØ–&­qì·Ïu„eˆóY³,¨®Í³ï¹Wf/p"F¿Oʱd| åÏ¢Úu†_¯Òjù² Š_ìUæ|ô¥8:öHï_>Q‹¯éªí§KÅ>±„:cVŸ±+Ý ,òÌÎÞ†:ÙÄ9ñ´Ý»í 2âËÿþá\¿Å0–º5í§ "òš”|a{¼Áе@3ê&¼æ*Öþ­ìÉ ú°Ž\(*§V§ ¶ÈÔe?ÔRŒším…sî‡._±¸¸3˜"z”5X¤Ô*˜è±Ç`kSã!™\r85ÎS±Ì× ésyf‘ x:+[›‹³¯?+žˆÌO& àÍ^¸Î½9™Cf¾`jzrÈ‘ª«=Þ=/²Å³_Y“Û– ¬Ð2j Ú²\…òØùÇ`ͳÄå¾ñÊöÁÉJçi5Õ T»hv-Ÿ¬ 2ø€ïY)£ýOª³8×ÉW¼:ª2ÃOJ^ jAÔÍZˆ²KÜüxü™/÷K{¨bº+ŒñxA¬(ïXžh¯×åþéXãÿ²ê³ížºÑ9ÓÏtœÃ5uuG‹|~ g¢ã±¤ ê¶1Sª.¨Ù›Ñ~ËB½,*ð¨ÌNLöˆÅ÷”ßÖÙµºcòY¾$áÓš÷†PtaRcÁXùÅpcS&Œ@Í_,´æÅÙñH²¼Ú³„®n¶øÝ-í‡<‹ü™à•(‘›T̯`=á‘\ hÒÆ¼H–OOY|–«‘=ÃÑt¬/Å…ñ ±ë~öøKI?oAUŸ¬Jô¾ï\ãÍp?ŒM­ÚøõùV1ô¸¼MÕÀRyš”3#^ZÉ3í•;…%‡ïéI*;â È ÈÞÞÄ5çýkÚŽïOˆaÃv]Ó/x‚S•8í06iä´~Þò-­3¹Ž#[ò»!²<µ:¦Y«c¿ÃX`]ĬoOÝÔž ª%J9>}X¦Ž·Œ,Ìå5Ä‹†)3ô»ýìlÆï/3:×¹0L‡g©zÉêsí~Sê4*v€4-smQŠ­&$²üvÞ`÷Ï®}·‚Ô’„h¤þKÅmIÚY5–¦™ÞF«!Œç™Tàñ[X!ìyÑky¥þV=Ô> ùÆpê‚­›qthµvx^qí€D^ÇîFc»"c_ îÏÙD;Ù_[éÛ/äþ>·s ìÁÄÎ^]ÁÇstN4½Qé{bW†¯5™g?[¡ŽÍBs¤Ë¨S¬V¸ª¼R‚ÅÔfI¡ûЉø¶(ÏhÛò|Ö°‚Š‹Ò–<ÛY–óÎóâÇÖ…øìé:gÃ?åq9U¢y7­Ü dOÅMßNîªS^+Z|´gä5L“¥aL‹.cVžê[†›‡“aì…È’=»3üzmuYŠ5MN?U¾æˆÈ0Õ|±&9£}«Ð‹ÇUÏŠh¶kÎ)¼ùq€ vlŒI‡`ÇÓN@$ø³ ëŒÚÐuõà‘pPˆgÆéZl˜‚Õj:û¯Q6ÑñÕ±þNÜC«&ƒz,úƒËêØ>îŒ Ÿ<·‰™èÌ爴³Œ‰F–ïœÜ§öÍÌÌêÖUÃ0àx%muMžo&W§ŽsBšùGz™»ho¾ cåCÉ3æ7»‘P†5ç3ß €áQgduÁßËŽûìu/½n_ð >é|øM…¡ AÒ¬LþÞ—2ålزµYëtj½Û‡±(¡LËëvîGж6 êƒpä³"‘Í Ì¶ä¯I{hó¼òQ/(}ÓøÉ™±ᾂRØ-X::D{œ&‚ìŠÖŒÊ‘V*·Eq™¤°î]R L”Tiø‡õ {ïÖ†®Æí´u¡ÜÞ&!³ÍÇPVw0¼D{Ü:Uí|`þ ‹"{ÃÝ­ù ö`sH·êe;Ø©d`51ê”ÈXô÷2 3Á†R9þJæ'cRX<Ì¡¯ÆBcr@Žé·æ¿ L¿ft¨Bzmͬæáɵ}uÇ (–ƒu©•\+™>Æ<’¦’˜=kæþ¶©0 òIÀÖ4läA¥øÔìÈj¹jø¶Ìl˜v3Ζ–º_ŒŸTîÁš¦šnjê·:K¢Øu²[o« <Ú™æ{úE-'0g”ë£Üt¶¯ÂtÄ>æ(‚u„)£;Çåª7½&Ë•Ø\–=XÛýZMqÈ7?'E°óCò7ÉämnSn =er†N­£«Ç $©Râ(ë°¸ØúÄ—¨É`4M: Å–06 C[S.»oqb/{æ$*ùÙp?:¸ˆe¶Û·K$ûTjʘ.âÀ…§;í"6cÌtµÅß¶8fžÛóŒ2t7Éd“n+E¸#^³áˆ-ÊUÅè‚8ºAõF±Üzñl‰)ò’©­.õ`£†ÚòS`×¼8¯yb1pklÃ׺k\ÿ²÷ÿGz„chµ1éÿÁÞäçG±4fä:÷c Æ"ªzŠ u³ZZ§¾ºcpþCV‹JóPþCyRQƒè)&0M”ÕKšr`žÂ¨muSù„9pGÑÊöý·Nl &k,‡ÔOí¦æ"|'75­~Û\zV‹»¯äRxdŸ[‡ƒ0r¹(—a}\¼IׇM»0VíÅÝmʺ¹ý¨·Ÿ„©q «mîS·yÍY3ÖžUÆS4¥îC­Èš?wÝ3\¶ùÉ̓èJ,¯/j´ÜIšé2²¤R™¢h£þýa"8ª.r¿;"Üpë6+Cô8ŒØ‰¿Rmùµ€y?°—Üj‹£>«®êCùç19îNŸ¯a6ê÷jýbÊ:‘DÛU]Wé'³¿&äÜטE¾±c²gkt\ðxâe—Ìãö>EƒŽüÆô™àÖùJA—š±9¨6p#¨ØÌÙò¹ûNÛ°^ì¢%Û[Þ¶ NæŠ+°XRÅ“[ï1?çþÎQóíx‘B1Ó1Û˜b5˜ïtP7ÑRgŒCD’Ïqï g$Ëj¹fܶΨ\Y¯¯™ÛðóꡦßÙ¨¥æ f’tâwòؽ¬e¢Ã?ø~Q½¶Œ¸f“;ZöoÞCI…]9é»Ã¨ªnC½ƒpâ:GNJµk$†¾y\Õæî)mXÆ*ñ,lßæ¹r3Œ4.ø TÅàÓ}Ç7.V¶!)ÇÉ´Øë;l&¦E{N£)øfmNŽTeÝ¡0“+ï•mkµÏàní×8\½ì:Û›’`k¿æãÙçOüÖGÌP;/‹ÉëÆÇÁž:ÉfwÌ¿à™…p¶¬wZdþIG(þ#Ú #ùp•ÌêÛ¿ëìe»]ppµhu?¹hþ¡÷Ýîš]J?óè¾ëw:¹|¼G?Xcüz15ÚÙÍi†éÌä`á²Â,ÒOÇÍpÖÍýäìÿí’Œy¿Ù£Õ>´‡¯ú^&Ö¬ÿNoOÏEi=7eD}ÊéCÊFùjéO£ðLO;¶Ï¯Ý¼éiüüVP‹LÕYŸ+8ȃÐÞ¦^·ˆGl(ËÚí Ö–pWsÂ$3Ž‚=¨.^ƒ³€õÞyò1¶-Þ´½+áÇo/M‡Óž®ÑyµMl «ÏÇó3Øôz¢½“ÃëÝHI¦¡˜ ca‹´ËݾœÍ¥q¿˜ѽ*ÊŽsñüÞô3è¼¹nS»ÁhI‹W~a[®ŽËãç5Dµ-cH·…l/tàë=O«°›ûc;ŒšØìI ¯ÆÜ 9¥\”æ˜?–àâÕ4ê÷p·µR“x&ÕD¥¬"#ÿÄüÞqnBI ³ #yÞ½({“?¶]´œ5'ÎúMl±‘Ò3;c½KH¼šÑ£Ã€qÉs{äÚå)¼b¨”…ëÇsaŸ“ï?c5Œ/*3o‡í\€ƒm1²02õY2‘ çLÍ´%Ï¿t:âqÚ¹A>fokl(xËVC°×¼2ož3_ÙÚg0ƒëîx2ZØäLïÈ?$î¹VÁ·ÍÜz•ÛŽ^í³?ÛØ?—…ã@CäÃ)eŠeclÛÀ˜³{n ƒžý˜ÀI”u“)S/ò¯‹+>Å©°2îN,|ë,Þ|£þa­‘rGž’w½Ö0‰Ô³05õ*íBÒ´±Ý¢^Cé*‹)N†µ¦÷î Í4YÞúüyßEpÖ²ãzXªÚ Ö-úýá_ ËL}ãJ9½#I/½2¹åÍ\J°E)·-¹¯¿ÃX,Õ—‡yÁ޽Ôk{_í;9Í>LŠýÜÏ‹c“ôCP ÅÌ“¯ª(¬5ƒPØÚòÒÒ,­]YXp1öC Ñè‡ùѵbé•Ó,°²Ø”OffM}Ì8Ñ3äK¾Ûiÿ¶i«ØCIžº‰xd›Üô:þ3§µLþÿsZw‘ú_ 3…‡û¾çf¯þßq×ÿÆšÏÉg-g#Ÿuþÿ.%żHþŸ5u¡¨üt¡á~ MO<€6öþKúýï‘¡¸¯…‹5åöûº¨·7´"Û÷:ÐQÙ×?XS¹ã…n›þ “8NjS‘.ŽcÆ>s(ʹc -Hu™ƒÇtd›‡cЍ…s|º¥­à%ê=ZDçgêÁŬb'3^tDÈîÙª]ýГw“OÎtŽát€#Hä/º7 )š·Æ, -ò}S Œƒœ˜õ̇ŗa¬Ë`7æˆÐ›·—a”’ò#¤!“†àõý§GGÌdz¨a4QǾñÐØkPAoe-ž„ÓnÚ¿ï‰nDRœ ¦øœäÇr¿mìÂ)¼a†^­Ì¼Aê`êhêûŒªÀG§p¸.þä>u¨?Å"hnwë¹ùÜeŒJÅhu³5!!ÿÏeÈEÀ϶LÍ_ó•ÚTú¨TæÆ?ÙÔ,·…0cg‘‡‡ÈD“€]Ž® Þxê(¡KLæMäšžø×÷œ×Ã$æD–õ†0£Ùä%0KØéÊr¶/O€Úó6û¬O‡E³ÓöüOï‘ÏÎé ÊuÄò?°êŠQ?€±&’¿ä$»gÌBcëŽçŸ(À¼KëðU}EׇÕÈ´EgX欇çswˆ>áJ?f† fpÁèÌ2­Ô™…óÌËçìlÍaÝnã¿ýä¡8göÊ®l´‰ÝNLs ùªÅÀ†B´ãeÍ”l¢…Ïm7˜.þÙo‰îÁw;fîŠKðÃëŽ ¸üâ„HƇx½kyÁfb~Wç H·vC&?O4ÖúY7—é„;šòÊÚ?^–Êã©Üs1õǹïBv‡îW}È—î=m.4Êw[¯I]`\WOaÓñÆMóO¾nËuŒºÓ)¡Jw•ÚÞÑrªnå8#rbjc[øI¬ê<¦Õ.!Tã¯mÚÑ>5íZU‡æq~(-æx ̱3Ë ¢ÏtY¤Ì‰µ ½‡³C7%ãtÌжævƒÈ¾;©RÚ#í;øU#ÂëY½X鹟®ý(Tý¼ê?±‡ŸB-úÖñçMa ìQŸË ‰“÷íÏd5ö*Þ*ç÷=´Z ›b©3•TÈ1³n´t¯‰µÉN6¾­¨&’Éë‹g×< W|ä×p*¹c×÷§|À !ñ7[‚Fâ ‡Çä|ë™:µ§R”Âé&õç¾U=•¯ÂX…Tæ¿vø8­þÉ>îx+ŒœzÏŽ6aJ2fGÏY`gQá½ëw0j*ݧ‡àÑJ¯z3g–MýÈ7ôn?gËÔÏ\ôÎñÁ+vò®qÄ<+ºf‰wegb u,ZÿûÃL ‰ÚqqSã#2»mÖúÉ/{* ö,AZ™L–}ÊÖS¡9åÑT39ãoiÇœGˆVÅæivØøÇÑ”ÄTZÄÃ`×ʘ ·—µlìpš»Ì‘C¡`âî,7н–SoÂ=7Îôq.-PÁP´< ËVèd04@TPÓþÄ:J“ é#éç$…åê ±nKq<-]ºG4Râ7å ðÞë»ëiC¬ÜFtW@Â͸Bר§ˆæšEŒ”VëY(Ä+ðRk<8F15²NÍðK[‰Î‚j§Hî+f¹S%AÅqŒy¢ðýL•Ï ­Þ¶4–ÙÌ6Ásn˜œ#1óó÷0u’‚Ï?Dj¹OiF柧TÏj‚‡êÔ-K¦!‹àåõ[¶Ä›éb®Ë×××â!¦v’ çWÌùÒl¢¥/ž*à³v-ûϺ0[ëI“†Ë–ô'ì¿þ”Vöº¡¦´¾STOnkƒÚ9á@ž["0$ÌgÓ ÅÂ1¸Ôì阾ç‘iíx*;ÕwðÕꪹ¾OÏ ½ õ ZØ›oíuÓä¬÷¸s†’"CyÑ&fõ+È͸äOÚ˜çkmç~“Vhð#¬ž!ŒMž©µÆMž¡Ê[ZPáb“׊Ÿ@=ŸÕa½ù„/£ç[“ýd¥7·Š3„Â@ÍÃØ…ˆÕFfÏ¥]™#ÀrUR*šš€å° &êKðñŽ˜7ª"Œº˜ŽQ0>Úû”«àÓ½0rœÙoPpBã"Èž $6Êì?² ý ¿Nf〟cº€eFÆ¡ªN`P?ë.…-7&·É®;­û“Je’œÐáÐÆ{{ŽzŽ›t¨ñ¶G&eõÑó #b猡;‰šöÊäúE÷+JzyXï’ã瀲ôuÐijO•k ™Ø‡Ø—«jßh:ŠçD¿Ø…õ Š±œº£2àìâVCz6©´ …\.Ðg‹6tV¼1léç|FXPÍßhϰÆ\©ñ<Ýh¨b<ÊŠhƒêƒ@ãÍI U–L•¶ÞÆF\d-µ‡*ökÈI”âP¹»±†ýáXW¥×§X‡‡Û£ö ¨ Ùž12YýóäCP¶ØÇx¨vúg>ÇR³²zÄZ 9ðÐJn>VŸïj¢¢swˆÆŸ ,&rkV‡‘,VI€$ESXf÷YŸ™ÿÔ©hôHšçÛ‡=U‡uÞª„dn/s¡Ô|ʺ¢™yÄ:_°Ùj!_=µµW\ ×Q;™ ²qÛÞ{ÆÂ†’ŽƒÙõ–†iP ¨fh ò\×üá’º»Ð¹«²Ú Þ¿neHé0Ψ«OøÍÇÜo9Ëô51j¢êþ’^³˜Ö8¤vêšúf{TÍ¡½*“ŒC•»ÞÙtmº_¡ñbª’`çe£VPE›ÉF5 äì¶¢†FT ÍÙƒØCu„<¤…a}¤Ú/n‡Ž³T¿=[ì?)/ˆ=cá·°¬†+Ñ.Êž ÍûëYký¹·€IÊ܃š?êT…ö¸ ¿Ÿð]©eŠ6DkÊ ïÒ?ïlÞÀ8Æß‹¿§Í4µ…fæI ]ù4Ä7OËj‘‚À€òBz*VD©×ЙΦ“¨Ÿ”e>Ýü‘ýèu<öZÍm·³âêb€Ã ä-Mìû¹²yKNÐ9;—{)¢ã¼ ½%½n»€4<Ù¯"Ûâ3m*3ìG³ì6zµ¦ º$/T·"S/ c!,Ë0æˆ :Òi><ê›g/’Z«kÐugd›?Ù$«_¢‚oeDÔ{DÞ_Ñ3“‰ëšføê¨¦ÄËŠã‚¢Ol·åÄ…Æ?—³£Æ&:Å|À^ hV Û¢”rMÛâÉ´$”»Zyauõ’ÁðÝO7íDìàòce@¦U “ÍØ’<™Û¶´ÒÖÚÛDoÛduéé{† VsÇîÆÜÜðuòûPz]-à]&w“ÊU°wÙ8±«å?üÔ$ 3n±ÅÁID%E~vÃ"}‚i8ø2ç«öù³0Õøs"ö±#èÌï3–¿ØÏ®Þ”ŽB̓?é9zÖ™ô¯…µÔ·rñÇ'l]”óÅOáä…¬W‘zhñÂ< V±¢çiíN!pBKq¶S¹‹Öh¿XK*w`†`ÇìnÕ‹àb‹'û‚iz×èùÃGbÂ}#e‘Jm¤ƒa€[¬^í¡£oÞ¾‹Iª”÷föÓ Zén¦Mµ°¡­ä• nãW m'U¤c¬oH§´,%aªX®áÆeœäÒyÈêE»ÑÛÅ)©¢Bò ·YMÁ¢dëÙª-é6D¢i$›»þ·Y±FÐêžãKþ't·ˆÚ1žW–hs­:BO‡Š«–•ü!ü òΨÍl§\I>¢Ocûô\Ä<4he'æâ3º¡Ã>ã‚à¦9¹‹`”õ~M˜„ÇÈ<‹ÂTìSlóœÇýL™¬ù¦#©-':‘b;4…´¹µüâ{…€¬3é-É4´š¸ÞŠ”lHÌ_ȃ4Mð<Ñgõ0¬4»V/*Ï»ô³•àdr'’+[ƒ}±š¯ì¦àü~جx˜„ýÂMmþ¢74Ž4°ÆšåìhuV·dD|ÜI?à¶^€bóä{jfPéÕH3ÆÀôÝ+'É@ò“ÅD¬¼IÝ~Ì/*z‚¯w•ª4È_˜ÁÑdÔÜSŒÙóÓ9 {Ç$=ëèµ3Š‘Q):îHó ¹ë_O&…²I!Þ0Æ¥Z–pbŒ›tÚÁåp€ÞwýtáAsES‘÷Q+ª1¼töH$üTùüYŸæ ]‹åõ³0ÂU·û«^¡³œ.»ÆQ/ ~îȱ´‰6 ´cõÒÎ^FÆw¼—ÚûŽvùãûÃ<„Ú)Éi”ø£«ûUÇùbÝ_ q{C¸Œ÷÷A°uò5® žnõ)`•é½ð6Œý¨¡“ï\Z ]Æ^Çà14·u¼ky³·¨ÌdŽAƒÒ7»—vÄ«˜O€_`uó{0¦õÇÝUëxý&Ì÷ñÕ>IQ¥¶ÐhUöÏö/ "#àM1¼ÃSk½óƒËóöEê”ó~ºI1Í!´k¤!ôd©Œ§CÑ `k––ÉëÅÉskuÑ‘å+h,¯×n]_†V!ôÄÜæfØkÙÞòëxÉCn¾æçµÌNa³å5­Æ. e)Ÿ~¦‹–XÜ \D=œ\{L6›²²ð%žüñ˜¥Þ¼Œ¦Vb(йÈüøMúò+Åa)F¤/ÿEƒO É6„_y°¼ üV,/’¾Ÿ<F%±ú¡X^9ôVé|rE¨û\¦¸-Jöaƒ»C™u^øí )§?€šû§ˆìâU`ý_8TÙ¿áPýgÚÈ#ñuíbCÐ…CëJ,ÿî¹ôXÿ›7Uo*yS4‹Õ“ÿÞT©ÇÇ‹ü{ÿØÞmZ¸}åðwɺƒzñÃ06êÒ”Lÿ\šCGÉHâp¥Y"<Ô&MÑk½FLGÒÒj¦ƒü‹¶¬½c³5Ü$•ç¡c`óøÓÒV®õÁYØ!B\,Eœ8EoQ¥4í “ $b>¬{»TØWËýoóŽáe×^-…Öƒú°G-ûØâ_æ=:z³Kçm'Õuu~Ñ. ½‡/“DÝwLá lÁ½"XY…Ú?[.5óõ§|W_ß„€ÅâBï öiaø›ìÑR{ºÆUˆ) ©ºú”£ri9‹¬¼7^ÐæõeòhW¥a¦¿7ÅÞkK[ãMs¤:¼Ï¯OoPÓsºrj^ѶÅ@ŽâáÒÒÐð¦CìV؉=+樅Ô(îòÛr¹[÷wóáãÙ%µDêj¿¥ü"sz3Œ,å úMˆ™Q9F7Ú(ª–ìåsܦ!†ÏÚÍ?RGuNHG@ǠܳýéÔr_.|árÁPRœX^77}å¯ß4$©¶¾Á·ybCu£l«S½þ^4÷a% µÍõ78_Å\Â,f6ó%ÔÌ~`s¸º(R-·vËÇ¢&Dæ/9tG– ÀWËÿÃqýÕç—_…–§Èd öHOW§Ú¯2C P#«¾»'FNG´G+¯á€ < Õ8Ê ñp¡ò¥*mˆ>H@¬±1Y9O,Ì\í«3Áð{[3ÁÔ†a@{]üÂ;†.jˆ³rkîi7Ϊ+7‚)†a©°Ðž'I/3!®|"•º'¡[XfõøìýÔW"„ÑÃ#<3…5E.sw@µ:rp0Фe"^nàÝSŒü¤Rþ( zŠ e F¡4…„8´á;ÃIT›šÀWÁ…)#x6|«Û–þÝÞ¶&©“—}âïu$}fCB‡¾*¾C¯±ÂL`ô,s‡ Šß!»ÂŒŒ _Q·½©8ŽoëuÁTö"•5¯BÀsð»úª•CÂÕÝ;éåàüo°-2uÈÊÐf„†þ<¯Ôædµ¾k‘Ϫ¯ïÛJ¡´5˜?¸kª'‡ñ"LS”šQ²©ð)eÛâ£_ØÝ½§Y¾ ,ºÕÒò„cgübu†v]°6&B¦RUZû.ýÂÁÚuŽ3·aQ[#ÒònŠcœû§6gü[­ô³-Ý:¨·5rPÖ?¸²„GäFŽÅuà¦$+rx jd¬ùÓì)×è~³ «£ê´«»Öv¾2ÖД}õéܼˆÕSsí¶ÕÒ¦`õœÃÙOF¤”Úèº7üÅm¬œWUý“?·Ã'4»õ@Q$‹6Ú®‰ìÔœ‡¾ ¶º~“7||€G2M±6Ó-ª[Ù^ÝÄä§uàѲÚcÃgFasl~ršêÜ(Œ~ù€Ú §9à¬Ú—'|Õù™*LôQÓi´“‹ù¬v»cvÿ8lU†ðze3˜G˜Ý¨Ì`\œËû [³s7Þ©|ËÁÌ,l ’8;Ÿ6*îUv´2¡¿.·x ìï?€SDVN½AÜØ ð ë'p*(Ÿ·˜ðT?%‹ŠäI#—Þd¶¸sr¯¢‡ôÈ;PazŽN†h]û¥R ImKngúDÈ¿Ö-‘ [²dðw‹X"hý yÖDÆ,6§ÊVéj3r³ÿÐÙ(=^ÛzT\aÆJq›å:Ö³ý¡§è>E߯ EIåP°ÿw,ÍÆrÙ´­Y¸£x ×ä÷Ýa8G0äC' ‡DW© –¼ÆáwõˆÉ—´Úÿ6Œ%Ç𚊖1‹ÐfrZx $°2‚¢Wä¼my=·Ñ–×Úê ÊkÐ4)ŠÖÛÇÕ d#Û "Õ~”UdéX×f¶·è„§å?8~Ýç²oá!œ»V*jŸŸSÖ¾ä8]Yy»{^sÌO±€!ò[_¬NÇÒ±‹©±ˆ™Å8G+zSS¯ƒÊàî•g,_ÊêÙvvJâú}„±]Ж‘òÊÄ‹5|,ÁèNʆP Š'ug&wì;Š1H™¢ °2üï¿„±Š!®O3šD2œg}3{Fv=?“À tFÂCnybƒÙÃ<¢z9ZT–»Ùp¾§2ïÖ2k²-ø‚q7Í;‹Ë*1Ï…ZF̃¥a,W[Åà+»´ ›„éÎ< ãE¾³ùàŽ+Pב=§k/´hìºÅ;sb!­c„0¯Â"M¥Ø­D:ƒÄ½q"“‡ÊL%G=ß‹Sí?7TJ¢èß$Nþ]ÚOÞ³J!Š$@+óÃí± 9þóüïlI‰lIÅÊ–$Q²zŽ8N’ÿW_šeE­þÇYÍÿ}ú$‰fž>™%ÿ3}²2$?uTãQg‚?=tkwu°¤é[¬­(ßÅ‚,Ò=”ŽûŸ×&»^XEã·L(Cs®Ç#1xu{eïí?Ø4kÆ6/wë‚•gþÚ¢ú²¿Ö +X“ö±ßúžcW&N0²}öå:”w§Ü°Ýš.µ[+—šßD­j®£ÇÞˆŒB:ì´Éó7Žû$wvêÓŒñM°ÿ*êÛ4Þ¿ÃH‘iá¯u)&4/Ø,]ÔÂRÉf«ÐŠÄZhg{ æsêMÖˆ¼‡“G” %iy[Àvz}[Eâ5Ÿä»`feqõ•†ÝÝQðN¾§²®ájsÔ]£s¤ƒ¦ë(ÁMuQ?›¿ü O  ÿ"*tñ`(½!G·Ó¾ðÆ9 g·²­É ŽëVú ºîm›ZÓåeœ×»6 µ¿%1SÞú»FuÞ¢¿Î¢Ö½6"˱¨Fq>[—I(Bþy8TS9¦Q&ü̧’’á\0ôÜÇÅäİ¡¯WQ£®k‘ÀY€ïºÔñMXÃøËÎ.Ý`³P‹kvØ£”ƒ¶îȉ¿ù"j¸›9µ­{ïÑÌŸ<µ¾éu -tN\îl5ª›ô÷Yø—òüFöÒG”“ÝÒs'v ðö¶Asýrçõ൭-oÁPv¶m©,îÉ o ÉÕ½ìƒTÑÌ éx™rÃ+:s#\Ì“MWf¼òàò£ý–ƒÌ&róûi¿-BºÑÃsa¬&íÛމ—ö?êÖà°G’Í;גɘØêÛzÄ߃ê].§oÞÝž¦Ý$k6d‡‹ 5­£HfÀÉ!¦º†„te!©"•ôØ6Ü‘Uò­6XÉ Hn6‹o¯‚$)Oú R©a|m˜Ý† ñY.Ì ÄdäùpãC’xËÆË£L²`BY‰áú@a.`¬ŸžM&Ú0 "µÛð§y}LQXãæ±“G¼ukQý,ܲwûóÉ5ñÍê+!ÖȺôógÊ|ÜT‚')ñ4dÙ:12Þu~é,$£µºáýx¸Áœ4û¦;QR §f K7F¸÷NÝ11‹ZRGSàPäAL²@9Ù4ì-ÖØâ0é¸?‡åuÈs…E`¨01ÒÊ2övÅöÅÒêÈp:S"k½žîÆò ú Õ ;{|Ä«1ÓÆQÁÄû[)Úä" •»®©ãñÅ·Hå%ø1˜öÃîñ¦ nXQÞM£O)ô†ÈÏ{4 gk¢ ŽÀŸÛ­ÿèÝ®T6”²à/ì»`FN¬Ñ~¨.Û*sŸ½dÕ€5hÀôøŸ«A•¿:±ÊpƒunÀÝòþ©µQá·¯ 0M—‡î[ÀÅö›ÍŒuoçN…ÍeÿÓ?ÒØá ·ŸH#¼+NóÄÉô’äŠan“å ›a;¸qó]ecÁ”xu׉²t¾;#§ÞcSU)qOù‰-Yó€~k€šåU;͹`äÙ̃´rÍôà`&Çs‘¸“¾G ¹Ñl #&“#鯏§ÛØô­®üafW¾³±úµMaÿ¸¡³ÞA|=’…G‘Y¥ÕeËm¿à††tcôWþÙˆî½UþžúýPÑ>™Æ!ÎÙNlä­q0ä?ôS¶€N±êšþõwÞ­7§Ý&.Mtxã1åE¶ãäã£çm$’LnÞk>-ª${%¢Æ¡½r‰ÉtYý}¶ø~Œ.f7†i‰ŒÌ§Pôî¥Øƒ¥|÷øðÒ#?ܳŒA§8iØqà9±W«Z”1ƒpÀÈ,ð»3’ÑJ4 º  Ô$¹)úÁ—ÀJ,Ö¬ÌÔµíbÏA0­¹ó)%†‚`‚Ÿ=¶T_Ð&[<ôÌ×-;vï{ÎIûŠãH¤#ð¬="Ýbãò>²`Í_n›9NÕxvb)Ã9L¹;VGL¾áÔ2¸’°¢ü&å.ìïMFÆb¿V …?“K£[ΪåY!·ŒZDQ£ì¿gþ3¹9‰æÿ¦é¹Yþ2Ÿ¼/’bg¿ô¶4Pé[kù ˜žP±f“8ÐívW0½¹F‡°Ȳ`MstðÈÎ3ëMωޥ‰¡wéˆÞ½çi ô®L“lõÏù<›á¿çEÕKóÕ«f³<×qTàó8Š’_ˆgI‘ã“x¾ú¿þ%›çó9þ%’¯Égiü!ÁÜ•(ÿWgõ Ž™ ·dÍZŠí'3£a6f0G øÔù–1ëýL( £ŽÖj÷ªxMƒõçåÀÃÌ·Ÿô!<èÀ¦>õ¦ÉõiÛý:€JŽ2‘—74?ý£ôÁš®«ÒÂóGƒ>¥ºT‡§êⷽΊfN ò½¼ X»<{~öúþ>™®9ŸÁ8#$T.´)¨§°j8•=V2þŇ0'm±k‰†[Þµ…žF!9Á¦Mwà×;[e.Üc»‚Jk·Ýòãw¡]±¹Ø5Ö6GëÍŽz‰ž‡é›0â1…—ßôDœ^²šÄ-V´;’¬ ( ‡ÌÇsÈ„ ²L¸ÔIÍ´–ÀwŸÚL@,iJdJÒÜr#I×Ã*¨là¹ÝgËÏÃX˜[t‡|B$‚ Ú¡¿ãÁ Š‚f€PÒÈð`‰eÊ–Åß_Yùhƒ®7¾:úÕð?ø/|U2…á*»ß]÷Ÿh»ïÁ¢;Œa"%F£K|W~c†ç~=9BT´¤xÙSu‡äãr/.À^—Ö•yOä!ã¾WË"jÇ)˜©ÓêÅÝÉcõ3寱æJ÷×smì²tܵßÉLR(ì^éðØ’_Ý@~Óê©ÿ™.rá!׫ûWØÏU6B”~…Qð³@â&ªÏýMÄ%UCaÉE+¹ùˆ°XÓ‘DžÑëʬ¥Û\õ ÿ¢—I¡”ô¹(DÅÚ<0µP{*5ýýê™Dö£ÝjÔªO6¯yFr£ó—&¿¤H£3ˆËØB³$«‘•îŠ}Öþ„C½»uÃÜ÷áÝC•ÀûYwçyöcN‚âTÇÆ£ïxû€»xO ,‰ÓêòW(Túêܽy#¨.¦{5!Î=Z&Ù;íòó®:ùrzÄÚEá«üË#؋ŕÓþ¥—Gó¿«àsX˜´…æ¯sS*㢃š-pbyãÜ fE F>nÕ%‹mûŽyë§evõntzÌ»ïOÎ~}˜¬ £}Ú­ÅÕµkfp+ø ŸÌ‹¬ç‹k‚+u uw;7ÙÑÃ:ü±8&aìñS4[8ÏÅô1‰ˆ0žË}á'Ããè1üñvÓ7ÌOanq°ã£ ­>Ÿn‰bBë03ˆ£š0lÑ®´»Ë·hS¸¸gݨ}°ïÄVw @^4á+ÛËžÀˆ,Qã\¡Ú©fýéf‡=ÆàYÝMô~‡y„uþ2R ©2 ÄÃêd F#_øïmÔ  cë….Æ<ý”˜éçŸ~éÊÄ~¦ɤ×ï1Krps2ͽ3ë”óíÞú»¥ŽÏà‡˜z³äòöÚ.&Ð@üúÂK%·Gèæ¯°kãëÁ-Œ~ÿœ. (WÎet줂gæà~O×ôB]ê›|íUQvM*oÍaïÈŽJë-ôRæCç]KZš'ŽØÉÉß:ºi«g¼T·FôMÂÏûì;~Gsc²os=‘Ím¹vq áÏ‘KW‡±‰_‰i>OÖ¢óyN—®q˜§ü²óÔÃŽì6< ø’ˆ§aÔùU ö œˆ§è¸Lxñü½s3¼³}Ùx*¸1;akdß|ç†mH«9ÀÛƒØ5/cïo ÐÚu€äf}•Õéƒ ¸Ù×0eUãiu·JÓ¸ôñW ÕÚGòhnû³Ž…°H5XNù˜—ƒ ½bR˜KÐbœýì«Âƒjÿ‡`µ‘Þ7²"¯·~(ý¾AR/Y`ô{Åqö”r—þÙYÙÄÅ‘J@ñ|íÈJ8ÿà¢,>Ò#tŽ(:=\™•¨KHÙáÔ™ ö©3ö°ÝITöü:OJÖÈDt=^VJýDÓˆw²ã:Xêâ;^CÜà1ß:?Qá ¡ÑË‚¦9†0JX{Ÿ7ƒL º†"Ýô.Eóαóœ Í—#Ó@ÐÝèïp2PAÁ¦rì ˆá-‹Äˆïv(3yáðÿûie6Ûnå6KÌÇŸ„é’¬C éŠ)Øœt¾ï÷5"ĦGfmŽdAÛþâÌcÒi¦àAà^f$AÙIëaiW‰áíS;?ð¡ c–³‰pýWª[¥àQy ;e Ê(X¼ù fñW•Úšï8bQy©¶Ê‡Õ·Áðpœá:zÞº%Úcɬ~âžpl~ýA,»œÛLtiu~&WXÎõ 5äm fY;L­Fls@5íq[!™N¿€C‰RŸ-"á\é‘Á¤Âzú“ÊX&ÀQÉ~g÷Ãvvé#\@)f¶pbö›ÜÁæø}hñpë¸PN?Óòh£³·*¡,Èÿ³œ¤ùÓôu-+K~³D“ŽkFízær†ËÕ³¿xy”¥{‡ò?h5Q FT<æBEŸ.ï9÷×Îb°@y®gHƒa’o5¯+ß°8ïãÊ]›¼l›Éã±VfI¡Ó¹¼œÈŒ^ן@iUB# ¿ëïÒÂ Æ…Ö SU$Ê6û޾l¥C²k±¬…à’ ÐÒ¬­:WKžÚW{4=b—>e*S§€âΗl…òéY5K1ÌV*Q³!^Yo†”ðZùRÑw¦)Ã)Ó #;«çHiQ†+7kI†Pȱ¶‡eÙòŽÅÒØ†ltÕWÛXdl²›)‚¤0ÂL@ å"©rCôböf¹ÝzÑTxÄjXµÙqÛ'.iØïÀ'@­~W_Т†Õ±Y@ꌂLÖ á67Å3}—M™x¼VvvGí3ý37µŽØe뤌ž'`j7¬ÊôœÌ¹Y/x|ÿau³Àk½}½inT´ ”Sêû¦¾m0$p$»òñ’Á*vGKá¶vi9{ª„\×âéçwt]Q¾XöÖÙ¸œ]¿§mئíÒê~~Eg}?{Àü|XB7Ž¥‡e²Aܾ~½ü{îTU®â¨P™Ím²wËûç)nžD¨ÞÏ>.Í¡©K¨ÈÓ…Éë¸*æŸ1pч]Õ‰ô~¤~]êLˆd(ìÝÞ¨v¥?1p¤¶²ºyÏþB!ý³¼CÖ°í¯,«ý$S-íXc?jQÌwK|AÇGÿ·œYñorf±¹qŽjƒܽٙ â½Ûg1˜å>ÎØÑ8Y~,YBOµ½bn{Ÿ\T.¥Sú ×Óc±òc¹åÇJÏá)f³h^ü‡ÌU{檌ÿdz‹RïU™C:¢j|ˆÍ£\ØÛA<]µD»lc+”»µ§Öµ'[±- *ƒº,ŒˆÐ–\Ç&½èhÓ)ÔÑÒ3Ì,6óôt#àÃ9"˜ê2"ÿh€ ½3+p¶ô‹ÙÊ v†m˜¯¢»6áçm¯@?ªÄ31ɃÝÏãx5®›:H0X¶ŠHçihñHáŽ_éD:›„®BP;¾GjJ®ØQ,ª§ 9?šm=pTÔ°,zÊóŵ‘«çÏ‚w®Ý€0°çèÉ112¦s^þÌ 8eˆøŒOå(9Æ9dç2Í3_2/Íy÷rÍÌÆ6Æ•¡—ÊüÀ䉗ùQx‹[¶Á ÐýÔ!!Œ°)!‡vã[é‹òÛå ¶ "V”å†y$$Ž ÈE@%6h‚'¤WGhíÖÝÉq§nÞ¡;e˼‹v8b>˜76v­*6èe]G\ GNî¬÷ÿ Òr #é›ÑQ»SµòqtÞöI3|y6¡=CzKíeˆ”¥zdg]¥Ó•ýìé-]I°ÔµèïAc½Èò'ê .$ºôÃŒï3gxη±Ò”Zÿ³ñ:¼q*ÊÛ €Ö±9 µ¤véýóaRº®=,Äu+ƒÈ\@#ß7óå$€¢ßEçÓ%ÞýL;%Èš‡QàŽý¼[¿Ò¬,W+ƒ¯6HŽTµÆ„S*b@k$תnT_Ü(Š!6¶ªså\×Ý«}‹é©0#NäYíúÖKÍèJâê¦=ªL;ÿÆå Ã7VoéMòúoG²ú©5ytgÕ ÙÀòÑE·Û¾Ê šèògÏ5Â&ž»¶Ðâ“Çaêbëwç¥_a„ufâlª¯õ‚Ñf¾Kv˜¤ü[×|ÁÂ@Ÿœäú2×Þk=c©È©@eÇÂ\7_€òÑK÷ŒvgÛ.Î=%Lvf<[è„£ÿÄ3 Ä8zÅ&#.µ¥×u‹jXu–Ú^w ‹Céèdñâ9.¯ö¾êËø °W¶ç‹#™Š)“jÒy˜Ð‚ êâÄ A­ë”al{žzÚvz=ItA_Bä\(sìäU¢xÞ\/ÑÒ¯+ÐöÀU¨³ŽîÍ…¦*†TN ZŒ•:à;%’öÞ¬Ø(¯¾¼øMÿêZ˜Zbjyųêì÷´{[b~M ;¸Šu~Ê6×Õ›Óý-¼BäÜ€ÀOõ5Ö¼Ó5ôæŒoûÓX”À}HŸä±C(ô Y¨ã3,žù;n>‚()‡‚ÑBur{ºó0ûxG>¶• ‡#1÷ó7n¤fÁuÏÊ0¶Vg¶{ö\î/‹*êêè¾ m#Ó¥÷šÍ¯è ßÖÙ£o¿‡÷Ïã›(×,#ÞÖ$û¶+³—¥Žé9(SÖøýlªÊP• -o iƒ…JþâP™ëˆ€èæÙ¹ºÛŨ±ÑègÕ;³ˆck³ãèʆ™jëT_Ð$ËÓŒ¾nÚ„­Bô—oÃÈÀg£È^áYÉ\o‘y®­1—… §,¿ÊK…vºg’âa¸9°³ZQ-„Ãó.ËÝÁ*cYmάh…nO©±ÚzÍņœPš™>8úœ·hûÔ7¿« »9 ðF¼bß]úYݺ¤™’[ˆ¸àøFé×êÄnpeâ]çŒxNB|©Dç9Õ’PUe p$㱘ÈÓåpO“w• ÛÓ”BXõä)BóÙ+-ÃPìʪÂDö:èTÖ†n j&„ÿ½L^(d'£óÐÊáŠþâ”’ 1.Yâ¹äNíÄÆð€ØCƒ*öØZ©»|‘“Ä Þ!¿ç½2¢@dQ8<Ñ×»°qÑn£-ˆ?æ÷uÛ–ë åíd¡Î.WÁZTΔÇñ¯c‹ãŸ/Tʽð´ÆßËghß\Ï>žÕâPpAš¶Ž8)bèRY†2˜Š:s/–I·¡/ cÀ>2ý@ÌH¡ÀÊêB10Ý@ý:w“YolÔ(‰ÔåN£ ßxÓª`Ì«Ï{f”S)–ke«·PÆ}ÓœBCëbQ‘—šøk6'«{ÀðI¨ÈnhÁÒˆNVvŒ[ÍMenÿÐQïŠôÞS•š¯6É©åSM~®æ’tlœÔ~{-»6«§üM7)9J+Šj –‰g•WB´Ñ³³Ü”z@P ‹Ck¨´;‰”WvÈÅBÛ…UÎ >GƒÄ°¼íAºîüh cReßù’ò™-´*úÙó“\q ÌæÜ 9'mtƒÛQ Éeƒ^À&qw~¤BÊŒŸZ#Á¯åp‡yî¼)Q46ã«éûKTA»ƒÓJ–\LÎì<^ÍþÙkDwÏ9‡>)oO¦!;§—·5\싌¾ÿF,-$;kBFN,Òvi@è óFL¦m+WæœÂß™ü #RM=z„KÇpþOØnY™Bþ ü¨#CAÅÌÖ0=E ا°gOHŒ.i͵€ÝÌ@ê Å T‹(u‰”9?u©_ªîÁ%"‰ÚÚá~X§4O»,)Ý·'HÐ|ÌkJJŒwÐãMxá()¿Ðã‰dè>Sf²Ëê›Ô-:@°ö 2#<:aÎóÃx<4’,Z Oùº:•ž G¢^~‡j˜0‡<4[å óæ1™j»5*¯,Ò³ôê›ï~€°ª¢Ç·…W>É”NÚqûÕ’»p}‡ãIø™ž !°hü¬wöà±>lœÆFþ‡ç z*œÈÚ‰kh &ÒƒWìk»¨NüÔf‰³ƒñ)Šy¬“ ~O®Nœ |30‡²0Q¦ê*;Ù±a Ô>qügN,·Âã—ˆÞtnU»‡ÊÚX7SÂPMåÒ×âüÁi»,”ÂR+­wì<¢½"BÊC§ZÞ*¯Ì€ûvÎ ‰l³cwÁÂ2ƒÅÛ¹‚â*9N Ô>Ùêˆ0mwŽEï]tèÖ½²{Ÿ¹Ÿ¶äà1Š ƒúCR\¬ â…?´è™é¶þ¡­Á¢0OÉTKBéåˆíQ”6=«ÅŠ%™‡‘£¶úE;ˆt”yÅRÔrL îÉÏg±É l¨ßï cZœlpþYjͳJt~`rxH5åEÃ_­óçl4–È+Àǧ¹-ðuEPÛ—ÃÔÞŠÑ'ÀóŽæHíÙVqÙ¦;NؔݻjÏ*"}}Fj}Û`ºh8Î4ë“£alƒi‚mõ`G²È∟‡í§¨ö‹æŸÜ¡ÆKËEkÓ嚦õ‡ù%0ŒZàý8;f‹Â0^ž9¸B‰^¡Š+žãêŠÌË‘³=`ƒtiÄ+¿kfÁÝüA€)óyNàñX„t‚Ôôš­æ˜"µ‰V÷™w~í4ä¨÷ zËל¥Ç´)÷ÂØÓçêÚXÆC¾x cõ·­—#¦º²hÝW¨jÐã’†0¤<Ë~Á°/Íâö/½VLŒC¿Û&e½u±xb[ÔØ.ÛŠ™œ^#^_]/è$zÔÆ†¤FpAÜbeÁ¶øç÷Í;u…-;‡yaOýwlžiôlƒµ¤BýË|Y½¬Í@G™wÃJœ†ê_NO‰Ñ š­[Çø€’²½í]ÚÜ4—L—õh–m ÔÁ~º[#Ç:À×n º×²:è6$> 4¤¥ÚM—Û½«|Ý|÷9x*è|£~F܇QM¡èA g”vI'¹0H‡ºqMmÃIt±TŽ-™0ÉZ³7¨ÿ›Õi²«=€¯§Æ[syj$˜Þ¨HE†D°Q“H‡±æ{ãS{×òP_[Õ&Ræušo¸<›ïGÛ$çN[»(¿êpÚ&§¿RÚ¸‰èɼtó*yƒltM¾áàêâ3…„b’ØæAƒJÑïÒY*³Ø ÞÃ0ž"­þØÅPo½-çÖfoö6,#qU8™¹w;‘_3{è©y-$}ÑŠT,YºK™ŽågݬÖ+…e¿EwFÏËýïÀjÿšÄØç\ 3?v#SÄãéÉ¡»º Õ ¸GάÆxdO¦g(bj»èÖssOjÁÕë$ñÅ4J3á e¾x£ïuwøÚyg:€Ô$€*'¥ˆÕhµ÷’€kt#?RÎUªlõ‰ÚÝ‘v{Ê!n.qïÏä­Ãƒ uƶ"îE \òîÉMqQÞd|c1½H<{Œá¢îîÈ’V†Î´+æÎ¶Å´=ãó€rÀ\§Í»·ØCÃ(úÉwol]E~ö©F­@éÚÐðUvâ„;l­šf›ÓqEåö2Î¥¢>cž¡Þ1„TÜžh{ì éö—<'ÖÙ›ÛÅ5‹æét h§Lçž_`je‘ ÓáSìôºŠhÍ6ÅsßË;l|Ü3°7£•ßþÝϱ¾–<ÙN \ÊL°C<óÎÅa ¶Ç1‚"L‚Ýû F³ø¯ÖÁ=‹r¦nÄ¡ÁÄKÏ*~Œb±=¾;«ìÜØ_—#i>ÎdQcôõãŠd]Á“ê×w=븲«ú_™½RlMç;²kl¹ç¹³r»ze.Uã·þ¤LHd«»s¢IéÙ+ŽæÏÃa¤ìÓb·ÂL:9'ιì©Õìu-Ð^¥'ÅÌ2`/Ã(õNbˆ¡“ÁNT="Õ sTšþž'•«Í³lŸ/Ab还yaס&Äqñy)ª“ÓÛ(èwa©D¢½ÀüVX£ãÕ‰Äm‡mÖô_m:MÖ67‹ãI‚&e™¦dRB+ ”s:äß$ad 6Ã+²íªçü‚ÛjT/Ñ£‡h‘¶­ß »K`¤Pì!`­¯_#?Sœº¶UÅú áÖ§—Í`5Vä+µfÆÙVž,ÕT–Õ½»¡>ÆV¼%ž ò&¼¯y[ÉO¸óŸa{™è4åx}ÿ¥é„iöÔ¯eÝçF_¦GÏöÈ“¯JdZ igÖË=ꘊ]^7ÐÙüÄé²5Sd^ÉÖee¨ kK#Wåò}ò@úÙ\æ8 cwµBeÃÜ‹ yØu}i›…‡×ŠbÓetœOܽÍ;ž‚Ó¶}‡?E[ÛbQHº‰ñÇõËä1 ^³[…çÔaH¤M™¾ĸ!?)Ž2xå­xf:Øjfª~맇HQGÓEý5$9×Â_ÛX£0cÚ¿ZZJ6Nxb¡…+t“iÒ o™Õx‹äݠƧŒÖwÁ¾=[€£<Ónœ#õ”K¢Xþdƒ×%ÝìËrc—ø±A~XÖñÕòåÍm|È2Ç%êáÛïåmØÊ3úѺt—íŠùEù°ü|Þ•ggfÕ›ñh£ó¦HÿžôùôÜ¥ílÊ,™ö°¶ xHÐŽ(Ü;ªê,€E#;O‹ ÞâRü#i˜Úy̵Q°khûK…x(0ÝxF‡@Ð/•Nˆ}ǂ˱G8w½€¿ú¿ðãäßðÿ/\»¢ ÌXõÅ£0N(¨AÊJõÿñ1×¥qS6LâÙHœƒ<8ORJâFeYšXF}fÀBÄ7ÍN™²}ömS+I¤*bºC£ b¿|fÈV¡£s¬±•x {βã)0]CŽ-#v«kN)Ž×ÒlèB³Ÿgc?‚v_!Lzx¡Ž¼¶•IÙ¶ÏWVì©¡¨ÊöZ‚Ú>Kwf±’A'Œ6N ïÅô¬]·²©q¾_452G{ˆyДÓúïÒ ª—cRë!ˆ~ªˆ­~>–W÷°VºÖwÚ[ý~¶š›ù “kK¯½ˆ@“²¸v«; p ^Òt~-ßÚ€¹$kä,=Ä—ŸÁ”þ TД3¿æOY`½Xa«Ë–wÂ([PŒ]4†¤±¹$³?AŒ®w{”z‰=S¾x*7<:õ'ŒB¤‘ BâHÜ,©âWï_š°¶„ë2—UË̽‡±gWå••ÎdØzÒ|#ùvaMð^q{cŒÛ¥"g&Byœ.¿—aÔÇ7KyØÇþÏ–f³ãøÀÚ'9Ÿº‡¥/¡Eó²Ø5ÔëìAêïçô3…ªï¶s“~~k:£؃ñUn¥%À¼ˆ Ex;4’¡øÙwá¼fÞ ¨A:—(fèÑãüÃWõæÓw}ŠÑ]=Õí}Žxi±y{-Ûl]˜{ÏNðl=?ÒE{U…³VlÉi‹Eú¡šK©JJ÷‚úÎbÅQ:´Ü¤‡ù¢ #™”±gF•ËÕ^ ;°S).Ê‹Ú:óp¼Þí^J?Ì.¸-'ÑÂÕÍÛû–Hôø/Ðqm&o¶mŸQ÷Îàø½í~‹®oãÔ€2VÛm­cƒ¼b-2y‡2r=^_Ÿ®¡ÞOÃҖƼF îö"Œ5÷eºÁNƒE>æÙÁѵ °ý†Ëd¯Ï^o#k¿Šœòôò\&…ÔÁÌ’÷UÂîŠj¹û‹çævÔ;`´Û³Kl´ù·iVk§’ $ˆŠ K¢`UmÙýGÛæâò öͶÏë†ÇëÈeõ—pÔ”‘>å93 x/ö——z—;¦½Bç3üóI/™ðȯ2¿¢0¯èß鋳±ÊM>Ôyî)tºÁ¤Çp}‰ÏFáÄÆ¬“ÑÁ‰Èo.÷Á°ó|Ì7Õ/‘ ǺŸ÷ÚãÃð!HÉâìÍ{ؤ³ï4 7Ìš Ì+ü*Q:BÛB:a”óuv}]<^ž–äÍK#bnñ_Ø7{Ç•s8£šÄ{±´ßzéó4¨ÃHZoæÏÛ%zsõ;|ìž•Ü]àô¨”ñdŸ= ätQÂ{ÉKÙQRÙuÔQm½ c©Põ«eP3DÍ4wu>]V6³×Ë0ruýЊ£Ï~ V¯‰ò‘pÜ£®!½ìõòÌÁš‹ªù§T–¿^²Qéö†’@þ)U‰Š7Ks‹Šl—(=$èf?ÃÛå-Ô°¡kí;¦ï×IŒh„•1ô­ 1GŽ?à ø VéýäZ˜Ëª P‚á&eb&ƒœ•¡ýì¿H­Å#òpÄÉ‘r°1qŸbŒr±âmDñRVó°½ñj9 ÿì¬.6a¬éÛ]˜É&ß˪ñÈ¢´ÞAƒúVD4m§s¥ZPYÓ £Ò]¿¨þ¾u` Q·´U——Yw›…±*›äÿ¬YÞùÂê)1ÃÇô½•Ë[OU†qåz‰ŸzªQhÚç•*DÜ|DíÇz¤ØÚTB—ô²ÏÞûòåºüm¶Ž¯}Œ¨@3hª‰G ’vŹ4nû›0îØ,ý_‹ŒÞ´5âú;>G·°ñ*§ëkŠâ¢»Œe&ç±ÃXâvq8~í´Iì·JJ ¼'%KŒp ÚQ9­Ìsf\ ¸‰ùžÕÎæü#ÍO.7±ÅjNö]ÿïó³XBF‘M\šF@‚÷ÚЀüŸ€?¹«LT)Š–jU§^Ú< 3J;´|j+€TA±ãþ5òøœ\ìâFƒùFâm™|Ù½td—ÉîØÃƒØ¼uÆsƒ ž—µH9”êSÎJæÔr…Ê^?G1>ŒÉÀ2£†%‘µ;•€”~BÀÛæ \år¾W'‹…×ñ”7˜)l!7<Ñ0¢¨6¾E¥Òeøç6 .Ú¥bˆGØ>ƒÚå3Eá^-íÇkä¢tù^`[ù9#&«šÔ:¶ hD~qfò`Zà†&ûÖ\G·K’¸ÄìᄱO}xS?Äôš»\¢O‘±[ §Àœ%˨£D=æŽõ¤z2»S]8çÿ†—]ÇJã›|g;“õâõö4Je¹›èè”/êóÁ˜ÓØÃŒÖÍjß/þLŒu¨€ÝPbΕõIJÛTBÒÚY-½-ycøHüʲ‰,êïå oÉf¬ª•ÑG‹‹¦bÁ¥ÆÄ$fu|yäé´¸ø·^@»ÌäVˆµŸŒštÛ)·1õÅ ¯@QŠÜ—ð3[j^Ç*?C‡wGug£e~ t«ò K[gôÓF¯cïÉ>_ÆpàÉÌßøhKÀÃbƇ³kHK kXDYßcí) é-8A༌–Lé8SÚºµûÞò¡Í»»¬2ku ÅMùpiÇ·x2Í ™¯üá½au:¹×æsüÜôÕú{àÙÒ~’­Y|ẇ±lah4‡?Ô[¬üÇ KüøO®0ï¯ú?èïjÜÕù«åçýþéµãžšž}~·üùaʈRÔ)™ uh2è>ÀIˆ›éÊù_¿Œ¬ÑúóòŠ’µœv«ñ ’áÛÒà(öž‘Mb¯žµŸcV¤üµ43¯]É6cuXcÂnü]^}æVÚá(ÞêÄge±X…¦±#ÌV–þî%ΖÊm•£›oKÇ®y „']Î< ­±åV³'ÙÜËä|OóØi3µfƒ7™—ú/Ù¦ìß*¹cÄò- ”õòmÑf¨n®a„>‡0x­Ì‚©H¾Æ´¹™Ò«yxAITê¸ü_ŠíYlI¥|L*«æIùŸ´ÔãÒ)’ò=w1ì´ÝÒ ïß…±5Z/°ƒEAQœ"wmÙIÁ…*#Õt†j‡qéIׯvQ¬lWC¡H!F¢­xÓ¥ÎF€p P†(F®—eKrÉ(q4„Qq7‚H6+ŽÁ&‹êZµ\0<^êÊ>œpÎ:xåÛMNÿ›Á–”ñ1-/ÿm/·TS»OD÷ÃrôVj.rÉc0^ÎvºüûÜž”©Px"ÔÚ–h(Ô+ UÏwÚMšÔþ0 Dhæ¯Ì:nãN@KÑt’c11„–2R ?VG?˜Øü¡oÁSŒËü°OÈc}Lẜž*<甾¬Ì)½£d­Ê“¥AsŸÕƶâP*®"×Y¦|H/r6l‹Ú5©åŠþ®`óÜB.V—^ŸÿÎgàÓ9_ŒîÃi‡ÿ—ž´ûÀî³ôÜh“­fé ¸Ó.ŸZ7ceæ6ÿŽ£åt £žÙkÞ8†,nÏkJ,±¹pÐh-ôí£‚U­gìÕØÙ±üšï)Ž®2–•#'Ñ88ÆÀÄ{y`¡Ý4ߢ #KÇš¡ÜÑ Ö6$ì:XÏnù=xß.ÀÜPI´]÷ÆàCìC]] ôPè±Chõÿfà‚¡OX`pÆ8}DF°1é»GAùÂÔn^Ž#‚åì²3hÀ)á.+Þ3mÜDÚ™b ­ÚŽ% t™d”%­ó\I«BÏS±fÑúv¼°¿ÆÔŒÈTàxº jÎXY˜/oÀ2ÙqôâkÝ\Ç•gK¶ùKÝÛ?Ó5äðÒ¬,ígM$~V¾ÒØ67øë¯7ÃåçØ$6l~ç_±¨¶|׊!6 t»¶Frð×—4"·®ñïõõ0Åi¡ ‹BÎ oû2ŒM„à„43™*ê¾Ï5dŒŒÈø°Õ5 úÅ®.øðGs$¢}ÉOʈΙB8"c5»8m×l»¯>ÅË{,X X✧âë?ýmgHGßœ'ï¶ÀbÅÞï?ûù}¤}òf“Oõ—=\©¢Ó7öòáš`8F„rð;ífïË[ÉQ^³:ø¶¨†H³ £›uuеRX{ klâò¥9ͱ2¿}Œ ³¬™ïÇÓü;¨1ÃFõç9Z…ßAž–¡¾ÀªQi VŽ{Tµ¡¯ö‘oËJwfàÀ±×aKêû%ÚAu«£¾R1{p»ú YŽ–¬ [Oèdç ³;„z,Ðkjèñ‘[0ª<•ï&úùtud¯>*Yª„¿ÇÍõCÌõâm#.c·Ôè°æëaõ¶Cù®X@>!Ê‹ÃqÝ6ð«ï¡ñKqàšéºãô‘¤·ÞE­#{÷º] VÌz9_AI[Yýù…¶þyÜow²F{iÍ—ÏrÃ{òM±ª’laë=€"Ô)÷ó²¼ía]ÀWiyAÂæ~„Žù§02-qÀ£†iº(K6zÿ•¹*«Çx¦²(*BÍt ©q Ǫ¿?²à„èwZõpJP¢cÜÆ97óŸÈcª¢tX%X¿¬D{…žË^nGãWlõkÇòµÔzeáaÓÈ‹sæoÛNî»êña=Oa0Žj}uz޶ª¯¨°‰Uît-aTÊëŽ|ÂÛÍ×XËM>ŸüÎLYxĺRÈsÕJï‰Y-;õ`1{L%W¯¾|úN ¾Ö\˜6å•ý¨ÃÜN¹6-ä!“A_j$ÚîrPM öu«k¨žjø,<î/ÿŠ9ÔóSþÄ÷´;¸"÷7Ïb Nk\ú?Ú}”<±¢8øv“Óæ­¬.Ø£ð€nÿ—ø„æMŽø€mG£¶†)ÌO•no[=0ˇò ÌõZû̳š+eK+Ý#B.­ùt@`VëöÄuõtÍN¼,Öc~6Œ<‘’+K<,¬ |4æJ¢…Y«¹Áßß$šÏöTï)¨Ùnpv”†ã#ÈtÁÅxxÃèUkE*qå¶úìî^Ù4ž×¬ÚgŸM]Ð{wiHP”á¡öÜÈÜ\öX¾Y¬¥Xïçþ<¿»‡žà”j*%D]à‹'ãL.jFÍ[ªéÔ³:LF[y4¼~nc¢xÎ)oòœäÕ‰½acÀÀü^Æ~Q%e§s%ríºÕ¢ÛÒu5dßxdu»ýŠÚFrs›¶ä ¯R¥Ñö4Ä¥$Úû³2«Çi埆©iGWoêX-½G¸@7½õÎÊãÙàw5‘CÃû‡ò×ÀŽA «÷ÈYÜ)Ýmº¡›ÇTÞÁ3ö^Ùµ@É ÏoЪþtœü°9ù>},ôˆ.b£a·ÆÉÃó!X¹pÿP_F$b¿®-w®ýúüMxfîƒ÷»(4Åé=¶?ª~Ý[û²H\£ºK ŠþEu×"¿?Ï„B6ÝvP£Þž³o=·_ÚÆŒ)Ò›¯çíZUîXÂáý"lëüÁO8 Ïó)cE` pL³ØmñƒMà ǼG³Ÿ˜F&½ÿ±ð÷å¨Ä–Q,Øe7|ÀýN¨ZÔÝ"ÒY;–¯¦ÚÝeŸ‚ÈÖ…9ÖfsöÛ01ÉÊŸ!<¶Yò$Q¯ÃD‹…žÙ× Æ€ð¹öKÏâ…Œ@ÄX;`öÔÒØ¯l ‹hI7;6ˆL‚+Ñæ§¿^\3gQÛs[~§¶Aµj,99>Óz·‘™Û™XêzëbDÂcÄŸí¶[6 œ1ñ/Õöv  $ ceþ‰ä˜ÓÕLDŸNCõæ ¯Ùz&>¨Ú´½eéÌ+u¤jã{'娰 1 #Ÿš ßð€sæt{i57vY)Nªuæºc{ÂûwÂkœ¥={ç—¥ÈP{9îØh”à®ícS¯ÎÎåA5 „.ËÉÙÃ÷ñtý0LG=Þ·0rŽÈún§‹ãY«ÝEÞÊ)™I8Íøæöû‰#ð ~ðÁGùšÆõi,±ãBºz2Œ„¸óå•[Eÿ~BVX›ø9¹i/‹i`šv8ÆRê>ÿîgÚ~šÔAòáøs)ÆO€ÚݧVâºÃÚÅü±t²cThžíZܰ%áSÙ ŒõjÍ®|±µîùe¯ÂZª)˜V.þ‰¢æâþ"1hÊc©c#×)–Ábßc®Îgši7Fh(5 fc}Œ³…NF~Z”ÜVºÜ¥7åH ¾*^Ë»¯¢«Ã<—Ïúƒ=ø2¥xm…U©m~Ž-øÆ;så<’ÚºæÞ¶CÄ“§]qíj¨„™Æ6>i[Á’žÈôÎ!†Ó ÇwÉìNâÌ8Ó‘‘šS¤åýïÚvtd¶ak!~š@ŸÐZN“ïlOeÎ<ËWx;qYL‘Î0곿kqó]žMÁ ¤«Õa¬Y"=¿ž`uæm°äjÆorÖV¾Ñ2Lªé#D·•­Œ·™„Ü3阣ÁìkCm°æU+ïÙ; ëŒ%5Ѫì§õ{l{Ü ù°q<+ÈþƒØmäœtyp¾½áþC$å¶aë™/p¼±9Õ Ö8öQ|…ÿ¦HóÕs÷*ŸJع«°ø¡p÷šgf‹òT¦¨ŽÖè.ô'»}JØ;ª Ò†Gi%›7ŒP‹Í\`ö\}³.jJ°ùʯÕ³h…ãQ?æÆ÷+²n³‡?u2” âa9Tì„—ÌÆ-T3.bîUøV¯S psíëtŠª‡C¨ºSíÌ“*ûêÀ‹ËÐ7ü(ýC<ýSØD»:v£´’1> ÖŠ,‹˜mUâW¦Óçæê¸| ê'YÂÄÈÎk8)þm,~x¨yuדÍ+S²©5…å¥9Ô.5P|zjPçHˆÄ 6Pà<úÞOCë™Þ.¨ªxn:íYõ˜VO"Ì“"˜ù§ó‹<ÿÄ­by³ãõü¢ïB;&LÑ4‡7ToØÓõ5§QÿÞ¨ÑP¡,l¹ÉaÔÁ¥‘ìxKŸüÒ°ö è 9º-rǘg¡ýú»,á_æWtàF×O>Ôm;¥û­ßúý؉O¡Ž^>(ÙÙ3»†Än&eu*ã¬ZeóƒaêˀȈ$êø@6‘KÁÊ{1tí×1K©ë¥f2?ÄAÝ39ûs&zy!D$ço<{PòGX4œ¶óp>K˜ÊF0ÉËÌV»éݶ[9äÛ$‚#¬õ»ÅH½ŽÍÛÚ‰†QGŽ0íÆ€Ü \ÑÛ£l’PªÕ¡‡ôvžÞ·mZæÓr)æ8÷ ¶ v^(”3ב†2Û“[4ÒíKFưÙËÌéÓ0Õ wüØ…ÃM¯TͽÅR5ò:‡&»ÊîWÉExjê¸?ÿ¼À1Yv?éë²!p7X®(A«¬¡<êÂü„ÿHõóh¹ß =+ ó‰aUëx‰ø"§¹€FðØR«¦Áq˰¹ô³1ûFÂIš-?bâü‘‡³?  :!ɵ¶: ‡úÙ4Ú §,SæÚä÷vo9¦ƒ-H¢q«Zù¼aßÄÜ ¯¥Æ²c‹ö6HtÞ_;Ñ6Úd‚ƒŽ,>ÿjjþ´«TùÏ\ŽEÖÝŸG;DsÜÑÁlž/cÙ!:ŠûÎN¾xß×9ü9n¯ÙƒŠÜÓ-˜cþí._—$ý0 ›XïÜ IbïÚÆ¯Ð£¬/eËOçÃH6&e€2†t®Kz›8’HÌ-ñÚUlê‚×PïQ¯G‰-hMÐqlWãýÜ` k,úæÏ{·jì«<”±Ï Õ°9ïÚ|ÈüŠ/óüOª­ÐÌÂX‘G÷¢–øï›½ËOAÄ-û>1*ÏmÀøDóÝ¥ºtt/ {åLzlÇ’Õ?ý»ˆ¹ÂÖœ‰O6¼Æ'ÕJä@îðÞ jbÈ…V.l?°m>NØz¤Z†CCóR–¸y¨gç­j Pl*ý”Ès!¶‘¹‘ñ?Þàš1åÿZˆ@zêeôW‰È†üy?‘µ é˜Õ42-ÎÙ;G óM^‘=ë! ˜ÐÃÉFß'~ª[›œ:dSjŠ<¢Û5©+Ayµ0ª˜8ÔÕ`T”Õ´mÝ#¡€€±œ¢^¹®3FÌmÍB.,RW] p§îžðíš5À œq+²ÛúA륊¿üySªV²=VÿØîN«Qsö` Ÿéq1±Í»†ýâV¤w¸kí[€rÐF—CB¸‡Y’.vj$Zeùp©yTGFb–ý×}ÀfZ‘%êUj`¶Òlô{ñÌL /ˆÉÆ.L·,AÃ|$bÖ¹Ãâ5³·Ÿ´è²«za?= š,~á³o·'tÖF/oîþªA Ì&XV´Iï h5Nð\¬é-³¤‡„]ûBÅémò›ŠZ°k±s`J: 6«E»¥¶AGR½eUÈpÐöâÒ§µ°§Z-ªM¢s chRÝèän=]É…EX[$¾þ}X¼åÄàãX¡*QšÙq¶‘–]ù®¸¢ÐྋÓcØ ‹ë«suSg‚§¸+@Êb°’ÞÄãýsDç´¶ v[®3~ÉV¿ðÑÖ4}Úd~$X®öáÙ—'ÎË Hlzúù¾JË«¥¶î L¾aIœªNÛ´Z)H»²«e| íQˆ’{Àš$çF$È.·¯« t„“©éר”ˆÐ"Ôm· ç[™«÷¾s¶Íi úBËÌEev£OÏWíø<•ÈLuÕˆ¶1ûö2aón06îZ3ÅN‘í´#¹X Üÿ¸S¡°Ð†ÉÓzV}<§ˆ¨Ãp^—çêY“\:ÒGŒgfwµårs+X!tWø€ ѵiM¶3â "cet®Q‡‹U$Zú£ÊçL–fËËç´Ã¼;<;è«™ýÞE‡?ù?Àm«sw¹*Ê'ï´w{3™ìC¾s¬Ð™¸Pýrí'J^ö‘§=—~w Î„hpbC{eµp1Éý3·»6MjͰW”¼Âú‰ÖÖʤ±x ¹HDˆ,:ôÞfOÌÎV5íÅ®ú»ÑŽTŠÊ¼õÕ‰K‘H|i£€êiâju00Ø„{Õˆñëì\-‹Mzô[Œb.¾ã¿PÖ@ (ùõþó¾:­{ÐeZ˜­%!ª¥<›¹6\Â’yŒÎ™ôÊï¡íÂ÷ÕÇoˆÓñ³ NG¾U´‡_d·oj#$3yEµûË곓!РÓ»[ú‚Á:~(eÐ(IÊ®[m{¶wßKréùVÝxÉ¿`Õ4^ê°²‹ˆ]ægÓžïŸÞ¯Nɵ1´¿Ö÷Ï÷ºsr•Mvé!åü°Ìwì’uØ7»S)ŽZMí#{8§Ït¬w»,â@d×<1ó0gX#öÜzö²áRC2ÊY3ýp/¯6_é#¦¥ñÒ&îúèÊ€=ÔÇ.²ä4˜&Ù»¯Rö1ö[pLœ=ÖŠ›ÑVÇC&N§å(º¡Xbêµ?îôòŸ¿¹>ÀjA7ŽMX,wóíPŸduª»…J<çH®ÌÑÀuõ'–9ÌÃØZ¥ˆ–É—€1)줫çM˜DH{uÐR¡…¯eÚv˹‡Í68ŒÚüMÎ+;¤ާ›‚_£äJ¤­šAΛÁΛRÖࣖ1¹RMIUv™§Ñ^¼6Å$§4KJˆRnkþÉ[~Qª§µŒAzka¿œ'÷p”I0´°’ÅÃnÉÑÙÄÙ÷0¨ ZiF]àóŽ"é:á‡zã–k«kN îå{îTüzŸz§nJ^vršKè‚·óX§F'¢‚«r±ð ?¼Miu#¼žqêÞÙãÓò2“`•2ü° cZwk䔕3÷dV(*êˆJùMØko^+åy¾tk,kWxFìŽT—ñ(ÁvÖï6"5Dº²ç m/™G\K¾óüê°ó‰öd9 ùk3Ù))A.n8G³ó]²„5"nV´h ê§=9œ‘ùÊ¥9ïa,$ÛÕ™0Îb~œçý÷)0­ûýa¤ó2£ëLj‡Q'oÈ3e“™’úaR‘¨œò<¤óáÄàÕDÓ<ÎEPPû,Œ 'Z'á7x;ªg4J ¹°;¹Ù­Ûó!޽ؤӫA- 6´£¢Ùñ†jœ[A¸ñNù~°wQ!Q<ø_ôê€ßA [Ó,^šm³ pæ^ã:¥ÓäZUÄQuQܦ9îg™á<ìÝÎE?Í:¬vHq^Aü›ú75k½9XÑæ‚Þ";c¹çßOUö¨ÞûÀCv>Üs°_ñKV*28‰ÒàTpèß>ó]{I©ÒYEö±:~V3ýúo*-6BLdÑÃîŒEvÄÄ­+ ðaý¬Q|¨3ÝÅúcÇÏÙõ`ìÔ"ùþR˨zUOåÜæHë×ãH׆K³Q[¯×“6†ÕÃ3Eúˆ>>šî®\Ï嚃?v˜2 2Eô;« bÒ²_"%Gæaiÿ­c M¿ƒ}âÚ¼cÑ{›Àµ`½O~^ï÷vðÛí†ÕlÄÚËŸâŠBÅy«ÎÞ’³P£b¡«+Uš»ò,´Â§²=âƒ>³‘4Û¶“«âÖ9,0ާ¢‡\èä€Òè?xY>¸ H¤wJ•æŠT³Æßb긑°¹Ïé oѲ~uͶÞ[›¥ ô6›)¶ox¸Q¦´ú_²Ýó“í¾në³kÝ8² J¦×ðÊ^£(–¿9„ÔÎz¶U-obr—æÄ’ÍFÒPý•XöZ’;a’;,ÉŽIîlõ$YZÆÿ¯¾”®þ/Yý3KóÂÉeÉg(ÏçQiÿ’'ü—yž¢ þRœ%efÿ’FùÒVNr×VÎÿwa|\¼¸­ULCD JmhGˆOÜ+—#·.›ïm! óÛ¶UÚèK».òkX€¹Ö µµçŽ•"?*“¯ËËnµ;¡Ó1›L©I̽ѯ¶”ŒpvL[LW²ÍºU¬">L=!2{ÆÞ¶lR«hÕZ>çB}Æî|åpŠ—A⸣çÂyÅiÛïULÎ]3zsÛo˜óc««Î+`UJfR;V½²ŸÉÕwéÌ©pWŽ™ÏN1‘åË<Òï^¹cøêdI‚X§ý ˜‰U§M™eÃìÃ^Ý—~¾ê*¥<×e;÷ˆVC‰Cþbdî í¨rë ñ¸~ñTw+Ì ©ÛÚ›J4ظO¦×¬#6±»8ä 5;!Âbï¾úþ‡âf a.11¿¡K<]Ÿ$wà$Þ†0ò5{/—¨c…Í ¹ì8Ç*‡iª‘y ¬ë¶aÖŒ=cùÞ«À‘ÿ¸ç#à±C³Ä¦•siSš2Q!;[r`˜›iúü£þó0ו†ƒzM€ÅÊgUf¨±a˜ÂÈŒåên¦\ Žð!v?ß¡õe½ ¦°Ó•8áð˜åZeE¬L’%ߟÿbÆàµ¥p©áÔϹgËáø''Ü*[Úg§=uʾç´\PšìtaB(#%ÿêÇå4õZ]F,z¾-±O…Ø`®‰º)4+³ž…N¹¹Ä„Ãß^Ûœ{ E—àܳ-î`ß@>Ld-€…ÉEiû‘*Šœ+Pg™P&ýbø_;Ѐ•Ô:¦D+`Á.ʧ½Ø·/‰öl™ðädßí÷òøU• v¨·vî}ogW´Åó}ZBC'Þß#£/[C%ƒXlŸ‡‘¨N€ÇD4°µ_+iǦ¸Y©^ÃÌ—]zI‰†ïÄtY]\u~\¯Xv /Bpž,€é6-ìÃ(f2D¿§$O-¿Í½¸F•¦¾º6Jtô˜Â½»Ûv/kPñr^BÁ޳sªšw›rƒ“bokÇh›bçW2¹k&xË^À‹Ü¨ÔQkxŸ0AaT[ɦÌ5•ÇQBÄÚ¯ÒȉY«1ªޏž1³yK®ŠòO¥ÉÊü¦®ˆ½uK!þç¥,J[8Y„jʪ›iµã±¾Pv¬óë¯  c×ëÌíáy3ÖÞRKã2êÍýåÃêµk }ô…ª ÍØa/œîôeeöÒg®GÉ¡K’Àë(1q#•‰ZÑÍg›C§c`¢Hç {ðÆØ6ˆ(2ö$p³_£<£ÌC?8Vî¶ 3‡, ‘Q#­µ36 Á DG×&wd>˜î&A XS/,0O(HÙË^¨HÜzÌI4o¥ì— xmã.`º7„$;7ÒâѸoȘˮ¨$§˜á_ ™É²ôŽ…<ËHË{Æ‚[®·4dMòÓèqÿ˜gá]ž ¢—û| ˜–c° @à­ÇÚŠâÖS¡³k_­ÃÒK岓ƒ/Â,ˆžt§6÷Ó×Q; T"Üðg'2Òê̈N]˜&ˆæ>c©YQÜcÈ‚C’L8-*au%™a¦p9n6=rι@"ð¹ÿIãàxò¯Vÿ aTùi¢Î i¦uk'EÎvÙ ;ÿ½ÛåÏÓ ¶Õ#[Œîs±ê!³ÍÞ Ô›ÛŸŸ²f¼'=÷ãaTn졈=á3a¦ =‘ìÔPŸÓ]¶mh~)…So°3CFÅB†Å4ÞTÅ^ÀӢχӖVûîßùÀƒÛk„½£§‹í;|zR38E±Ø}zÍÖuöXæ>Þ¸dÞ¯a,çñóÉ×^LVjÍæ-ØZGxb¸#±-¨Í*ÙªýÊKÂxïý`ÝÈé€vÓ/¡Ê_÷ž"žDߎ¥F‡ä2øú~=ßXž•³k¾(ÏL¯i]?V*'á±›aìÞÏw‰²h7Œm#¶ƒJÜ8Ñ•Ší³Üm‹Íœ¸& œ3è½`™ò!³ÉÆßûB_]ÐbÖTy7«þMÂö'&…ÿêíc ½—‚4ñ/´l¡ÿm#o%ž¬AÂmS£á¹T£ÂQìë³ØE/cüVEãñ$·—¢äEyÜÇä„|A¯gJì°*gÕyÁS6µÅ‡ZTµ*²˜oA{6s}Ìsš®dÿnBaïlËÙøžFʹ¿v3X ÅAÕ…Vt¼i§•‘ÈvüdBwË,Ö'Æ—ßLþI-à˜Q8*9n`ºð»E“kÊêóŽ0VîÕè@jîÕóó²RQ«CÈiš³Q³¥E Îjÿ’µÒœ>tŒG¶‰ß {»e4œŸ®akN€-}á«xëa­j„8yC–q·–vÄ^ckß3«Þæa¬Å#TÑ„±‚š|™ ¶ݘ\Ô´)Úùu¬ž‚½ÄÊb'›±s9Ëx 1ž¬¾_sSýÑímBû¸Òvrf¨ü1ó„gƒ>&}V¡¬ÐÒO¯…R 4 Í§§‚5Wþž’Pd ú‚`7'ÜXž #;•nUmÞ*\¦í`b½œ2-êr¿/= XÕB@‡UŽ~nжsÿ\'·ï/!´}m?ç¶®îÎŽÎH}kذñ$Ê+Öø˜Û±mKÜ·Y䜼2¡Ë|,;>àÞì•Aào™ÕÂ=:ÑG̃-Í÷i°˜¢Y<¹å5ÔŸ,&É®_nÍyiÆ”^«;ª¹eÿ ø½ýNvG»£»ï!|¸™¡ “¸/k.º«*‰<’þÀO»Ýò|Š•‹úž“JЧ¢w6&À®Ñ_¥ÈÏ`p&ÐS† ô~væ,×=>tE µô /£ßG†Lÿz¶°€›û` 6¢íƒå̓ yi," §¶Ïëü&;½§Lów§þ¯½¯‰QÝÅèñ0ž7ñ”ÌãôâÅÆ©ÎÑÆ+pUnÛd5L/nìW†Û̪±*y30My¯„¼I7›–Ë\1¥ꟆîB5{á«´òmSÝÉîW¶4) ËÓ÷ßñ`x(¾8µkTno»ã¤1¬_:tÑGÇÝóq›Yß#,ÃBƒÖg¿«·§yö%×Р°¹oñ9XÕG¶ž6>% çÊRÄÙÞ`%J„@³2©Ý¬ËAáÂP—q×r4WXˆe£bn%ÜþxÍ™¢Æ…Æ;æg¾;•eA‰A’4½yDdaá–Î+NŽ›SË<{Kßl€Â‘ÞeŸ·ª‹'ÁD‰9~ÐkC6£«ê_š¾2{FBô|†=ØP¯Ä§ÈöÍxÙ°A“öøu°& ¿@ÉnÎU‹y‹xæ'Ûk{Zš¤=Wú˳“x_r¼²ÊŽž´Ø‚íÈÝ>û>¨¤ %‹”Ô*Ø—À‘˜·:iNžÆ žŒ×€º¸šAð‚f<¢0צ àñRä~¨Nï ¦¼D‹šûÜl ]bõ΂KÈÇá`%Ó wݬ'vjѹÉéH35›Õyr!(òÝLþãáy%o¹Q^‹öѽç¯oUÉ_Ÿt"?Áˆ4dçVâ/›°\ƒöàæÑG–ËÁä³2¬U a;­lñ±‘sgOî–C±»ú­mÕT ¬ƒX·áv~¥U³AÛäþp»ë‚wÌFzɃ]˜×õÕÉ…ÿ&_œ¶o'®!¡ù{{žÒ}’4ßk5@x‘ëŒ$Ø#g, ²­3riXïÌEý‡yÀµìXiÙ±Ô²c¥gÇf«gšåE:û‰­YìïÿïÄ5@æ'aì·åi‡šŽù“/®(œY6Õ¯i Ö[ºjJqÈxº¦ŸÛfÝ_>Û-?CîÌxŸHðAZ½´ÝÆ3;yVú5wÂdWg_‡±^2/P¶Œ]yr¬ÇKq_’ùßt¦®\rÛ¢×ýcë‚Øu²{/^½’…ð`=ØŸ] bL%³OLå nÑòÊqW؃гÿw;PAq#ƒC:,Å3ßõÄð…$·èMIzÚ©Ü’/Ɉ aÊõ_˜Énñ½;w ûït.³AzÄ­]fÓAG¢ÞL0{2FåPÍš}ØõþR;£š×KaB02¥]¶¯›0Øhö:Œ´jo¿·Z;™R òeù²µ6Tòæ>ÇâÊuÇf‘sò¸ãœ²Š •eÏÃVÀTBOfSŽ1«a2?Dg´;‡‹v®¼á`¼užV8yy¡ß+êm“›Å°DÔ 7h(;á=sÈþÞ#u¿ïˆÔV÷ž…±e_;|VÜ…¢¥¨ÂÅ-Û>5û‰¦òZajü2fër¤Ëб@•Œv9]ÆDS¿­ÝVØe[¶JgŽå|£ý3¹ƒ£ÇËjY)ï ÔÀºT¶Ã¨$DwjË@oÚ¤®\‘3ý”Åi?ÝD#\Å Kûi›æOøWÃa¬dË4£Ozÿº¾QíT7 K®ÕFŸoî„ïÖà4t¢;¡‹ U!ãû‚º$è—™g*ñÉ),&@¯Cc­O_ƾ@²òdå€>¨emݦôsöF÷ºF7EˆGm]R>¸8ÁÒŸ1ó¸ÛpA{RØVàü÷E-À΃ñê$}´m·ì‹s¾lp“o•=ÆÊð¸—\(¢mµØ¿tÖ³)„&[sNÅ‚ )C=™¡¢xrbÜîá9ã'£(<¦ÁZôT[—ìãÇ8¦ gu`z±t9·Ï~`¯rö÷Þ¹XÝø3=Q\Ü=âçÔ¾ ð}Ún²tÑ<^; Ë,…äï`t‹„"Q<亷‡«³™ý|ªcÈU±«zøÆ‡;­Œ˜|ôµ”i!5ÚÏH–|dk!ª{¯Ö& %¶ã‰6Ø~‰pZþãmÛñmÇÐviq}-î©Asp†øœáf±ï®_“X•“]Ñ@ Œ}'ãz,²ÜoËjœaÖ òÎ4œš2 \õÓïçó`ÌëfvÄ/»oŸûP:€Ÿ6@ÿß–=ŠOÜMla%k¸Q;ÎúÑ1|q3üÙl'+šÌ-›OóÓEnEOàUòŵÇÓ.†cêì+Ë#|úŽ–j7Ù4¡ ‚iã?ÜSŽçÈ_>\·Ìað,e¬ü9œŸfÀªñ¦-Ô2®g?ô8‘ùñh`wÙ¨ Í’k;í2æåÚiñ7]O&O e i½m… ui.¿Sî‰ÍS×6JSïåc²cÍIeeûw4,êôn1ôÎÎÈ6pß—ú:¯%™Ù Ì Mt–{aÛVæV¡Íãš-:}ö¥îƒôZ¼š8žÚ}Ù¨fð“¸÷ÌsìÏo†I0f&P×õÅA½²\²iDc¤pkj—~´ˆµ+3*¾ÈˆŽ¾o&ê¦'”ê[åêuFiŽÄÆJóeÓžÃdöbªEÃ.¿”:zQ˜¨ò©ÕªSÞ¶›øœÙ*’" öAC7ÔÉ.§ÅÁ@+ÕæAËÃØý!üJŠ8‚5Í8·“ÝÖH0ÛL+xM,.7Έ­µzýÅÚGÍoŸo<2CbìÅZVÛ¼VléÓ‹ßÂý5š‘`Kßx¥Ê¸‹9Ûetˆñ=<@¡F6²'N©Wcî3s«qZjT¼eš9‚›wO¼fÎXZE^›fœ›þùÎ ’,4[lÞ¹¶¡’2s£Oso°.)Ù‰‡Sªÿp…Œ}<«pN$—vJLmÎ>" ÛUw©­kÏêd'§`=·r¢%޶ºy>åq ¹ÊªDù²dñF€ž'M±¬èäâ¨fSUpþçתCh>[²©vŠÛÐ÷ª[†­³sèàù\ýtß}0Š%$¢T¥~²ar»”jFðÚ;ÀW‡1»X&[.èšÃÕ1%½¸Ž]ôZÐ^<œ¬`Üü\â~š½‡{[/®V!þúüÅŸ­‘kêȳ»~ÂÊ„Ÿ9ôË÷t&Oø³>û»ÒÛµªKŠÓ×i–:;ßt9!ñϳo¼×ÐR–ÖJP}uX‰&™R;ŸÍi.µÖÓj#Œ}WVû½^ª´@bÌlr2[çeTý0—˜ÁpÓ·S²ö;;Õ}ÇgÕ½šž‡œ¢^¿Àéé¡`#[{ìΞvõ;7ï ÎEàÕ;ëKŒ[ÐZ¯!g¾Î8.›f ž”Ã)Æ£îJ(PNJæ˜-)ÖŒŽ˜¬¨ùÎ*ôuðTÝ<ödåæ ùHûr^QdV•?E‰HÚÂê‹<ÎbªÛ]ÁÊ”#f©|£ÃŒ»ªÁV±ÿ R[Y‚N€±Ÿ#iœsþ+y o»FA‰sS‹•]šUê!oŠ{ͼSl“´CËú¼Á¿ýÐà•æ¬ÕqõãŽÆ¹OkWF2n.ÞV4«`»”ø9ªC(šÙáÃÿèú$áÝ ›¾Rv %z\6$×mÚ(”l©\Üç¢|w>Œz 1QU[…¥Ž­¶Ú!—Ü ¥Á&«`ªE~7­§½Ið)ƒ•µwóçÊ–P,®±ÅÍ~q”cŒR{ ªöÚ%”À–¼)ù÷¿ÿ®~<®#–Çj¿á¢kÁâU!¿±c)´Ÿ„¾1¿ºGMkƒ_x»æ¦ù B‡‘7l‰SÒ’;,ú¼UYd‹íÐã‚u^«g¢ÝÞf|zsÍ ¬'rº¨úUÙ Æf_‰Åø&@E\½Âö+¥¹Fšp9¨-ïFHË6ö÷ÿ1µ$X5²L–d‹2<=·™‘"~Ь¼Ô¢Žq2c@:)Ì0¡cßì›~³±j.˜žWÊá5ýÙ÷Uî‘öqéÙü®žsÝŒìòj¤šÌ`âö!vNa6 °³Uù™«l+ËÂÖT¸"Ugv­’E¥cÇ0 MB¼:õŽ›÷ƒ!BÄiÄ‚8rHg5\ñ»ÓÈéîÅóL§C6–ƒ¼:ÙÐѤ݀–þeëÍüªÎA.ÛôÆME/´ÇÞY)´Ã/Õ§mÕÙêÙÞ ñlÚwGÍöFéCL^ß]à!õEÞ‹’» Úd¯ÜΫ¶îa¦¶ø~Û~^0_Píú¥}Éx¥V9.;?ý¨´½É©šßO‚J b-/{e™}mÄû`$‡ëÍLY½ñüÈó$!CļÇYjœ·Á~ÉË·RÒ¾/6q,æpÇ™‘TÐW$[ÑÂLÚÔÔêÆ¼&Þ!ýˆWÛØC3…Äe;ÖòQþ©ÙøþG˨”wÝ)$e3¢ #çiP˜¯|¨ÞRŒAïÿ³…¼¦,ÿÈäuà®ï9ªqEf#ú©C)bñ+,g /ˆTà$ŽØ.AàD/\«ÔEóÅ·êÅ`À?câ™B 6ý·/ÔÀuR|¨™‚`fΚ-8ED|Üé+]ÍŸþkï«›«¥Ìr¸]A…ÜaÇêèUeïH“‘Z’;! –-Rέó àðÌo˜ž-žÂ†;ÃÔ*an¬ýtq^`Ÿ97–8¾àž)žïvt;k}HŸÐ¡ƒö~}¦²‹zË ±˜³v?½@½ΞÕ’ç|½ú9O¹Ù› B0~?í Ä’½îád€í¿ÆŠ•R±@ÜTîHF0n„‘‘]Ί`LlÅYõg±ïmë6F[å:®´W²>×]EASQ†3]^c3·ûx“SÄ̃‹áé¶6F4wà™H`¿ ‡="Xg|Gýñ I,Eöد¤“&a¤}ZV.Ù±·#qíîét1¸1—gò-(5’™·iÀæì®\Zrú±q0ƒÛú·Ÿí#‘¿£Ý/'‚Ëî¬þ¼}/ŒÔë6•èK¹8pNÇÄÿù#NK†÷‹Æ|”Æi Œm×Ȇ«}øÏ⣭m»Ë«0ÖÎÅJùµåÆXä¤çVì!«Õ êK­¶‡ñxåù0ÖY·ñõþ’Ù“:SÉ´Ö ™¬ñÚŠèèª@ÝÊ|âYÂ,ˆ½÷aää 0­{A%ô÷éˆÞ´¢ÿéb"¸Öˆôò(¢»§•êòWß¶ùÍ£ŒªG€”põs{Œ±\^ÔÓàL± žßf‰ìLŽ0¶QFO5+Øoó`]N@„j´¹<³²Ó/ªÛ\}0ζßúöÚ £PlÓ_ÔD¯’'¾ßþúŽx,ÐRˆgŸ£íóãÿ°|n§3*æÏë÷™ö›*WS”j˜ñvqFÃÉ.ÙŽÚ•½&”É<Œ¥OJ¤K‡ýnÛ·8QÛZBÍŸ?š´ÄÎ\L AfÓ„ÿîÊOPºNnn|µn3ý+§+ã.¥ÇÍ~x=>}•wðÉ Á¼ƒÛMóîÀ }RÙj–mäSx ÛÁºX u\¨xgþNüÛ¹waê¨[üàa+$‰O!ž.L °ð-¿úû·Sà{e™ù¬ns|aÊ@ ïs{dÛmú¡ZÖ[ç´V]fˆ¿•q|F‹|Ƚõ@"ŒI®P”¿ÔîŒH®yJ½µAö–˜wáºø²Ò¤Dç?ý>¶G]8¢åsúìË{Ý.7eü¢×ÔÞkÏ5JX“C+W”ëÐèæ¼ó ‹/é‰SÑ;—X8+ãæ‘#E•©pRÖáþ3{ÍÀÊ”wìØ³ÇÏV¹‘[Íì  •ÆèªWõ>Z“˜<Ü¿~ GMú’k÷šY….….c²±µx‚…@:ø=æê7v”<hè{6¹Pô2äl„ñ‹°ÿˆ+u¾¸£?;´+3nоa•DÅONG=u±˜jÅ#À=0B2J€Ì•ØÖô‹W DšÅ>åDô¬Î¢ŽÙ¥yÄÀQ‘aÍì`‰ìçÆÞixˆÜ ó/ȯÌW_€yÀ§P)s-ì&Ù¸ ¡<ö°EÀU&ÏÃX™¥75ßÀ¢&¾ÎZèÚìî×›Œž‘IœBõ@O»óPÚe¬®GÎ:”•ùaÌ˦ gü²³ƒˆ@ µDf„zlQv¹!;„ü¥ˆ§¡W Š Ð8¿ç`S»êž¸‡Ä‹¥øµè•“acü ˸’7àÊWa²¬ß)=ºäÅk„å2ú3›™ (Îgãæj b Pe%ÖqçIK^É‘c¾¸z{p·°"¯#6aKx§ïH ž½øéyâilQv¬ÒֳтÔQv5!CÞÞ¥jñÜØ¨m‡Â'd,E»σ8¼šùÉÊÌ ÆÄœ¾Ïo‚ºþÐ[]  ÉÚàÓŸ²Q%\¡9ƒo çYve§>ÐpÿBõ¹qúkV1fqæì(=m¬ó¡W°õ7+Û1½ê-lY‘T±duÀ5%wÛ0ã8i*Þ¦«‡g•{ĉHaªÙgcód5Òb¤´È py²[;ÏGˆ"a¾Ü™,H—ñË•9çÌûz (&ýFsûà¿ugÉ¿mÑò¥·þ!Õ›T&@òEWA²@ûÿñéÖ;µä9iº³ÙHÓ¯ž¬Èçñ¢é¦Þ %Êÿ×{”d/K‡QÔ_S¬<ñAnýÙûür-®!/_¦¹ÃÓL³ÇWqrÖùC­2ü°FãèÇ(öD±µ'øó]W&yyinO%÷‹Ôe‚ úèQäVXž°¦|rii{"N÷Lî…s½ÈÎ…%fçÍZ”>ÌëgÙž[Â0—àÂzã¶…JÅܤy!,ÖšÉKÆébi³;Mì/U¹‰Ù¦<½Ôæ­Ýü­pptZ1,hIDui'“Á(²»Ÿï÷EŠ•3)(¯ö&Ýh“УaÈ–?ä«p©öª)Ù–>cŒ¼…à‘°šíÈ„ÑGÕcF˜Ow¹cU¯&ÑÞ‚ yç$Æ‚§³éè²NñF±ÝƒŽÉÜç#-yÿ³Lh#èÍ:äÞ¿ÄFVs(óÛyÄ„ù†K³§ð7ý2‚zÝô DHpP•^Ôz¿k‡Ý`ýýY`.j[ÂöXsåæt‹èŸ/Oüò‘¼`”_cn,ÇÒlöàTR,‘Bp ƒ›¯ÊAa@HÙv¬„ä½ö'äQ@œ |žªwK|.A¢_¦†Ì¸,Y‹¯íNÁ$*‹üˆ3fž ¯õáQ qís‚ËW8Áöô Æ­qNz0LjN±ml‘ûö”´f:›^²‡ÑñéŠ"¶ ‚6ŒÜQß¶}´çfon ’¶SÇS7*g¿f»Êš +QkSuóþš“VïER)íc«ùê© /¨¡¤Éä yÊéç\›Â¯tj2…ñuÑš³ÁIâï*‘ÜvÕ³k{cxÆZ|O;·Ì¼õO$Öµe3å1z/QÀD7OaLn³í#¢—¢B#)™ñßvíRIòÆ›mÁK56‘‚.[-bZ§ÙØÞT‹‹SMãBUæY´Ìœ]#CÇ—OÕ®jN€‹“ '!І¤XQÝ^Ë&Çí¯0 Ôéág[€Ü¶²ÛWÃÈò`ýjÆÓù‡Mm•ܺßåÅëŽä-%bpIMùéÙ>Xâê<6‚)=×ÁÆÕRhñ ÄŽ¿ÿÊ–ÈØœ™VúE¥E­ä¥®ô“‹Èãåê×9Kb1¢l뵫˜U„ì;i©Ñ‘[21DÙVÞqïJEŠ|[¶æ?gª³~ãÛN4 çyÖÅWÅl&¶Ë˜ëò™ Q+Jwà°Ú9½'Lœ/RÔþ £‘™NÞ²vKš4tŠÑ9¬NÄY9òYœ–jô—ÜÈ ]+³a·«ä4‚ÜX%Æ%¼í «7¸èùŒ0 «ñôÈœè?Õ1 ÿzìÌÚ"5þòûû½@ö³¦bI<ó–î3©½¥?wÄ=#°áƒŠnVçä‡0qEgàƒßUû–LN›¡»+ÇŠqÆ2Ÿ:}¯%1® ŸÛyéPŸ• –#[¼C;Åß@ú|º¸“ýô;×ÈßõÞk}BÈ›ÒJ,ÙÑvlCîOÍROÕSR¬‡ñJ,³(‰EŸj€,˜6ê™—XÇ3´¸Grâ(ðÛ]7p—¨à$süxã]ÛtøûI‡ƒ‹­oQ¿JGXY†‰´Ü›»kƨaçI´‘œY¶½f ý²•,Þ¹„J2eÙ© #1¸5þ„ÐÊÆ3ïÃd áø°ª  lVØ•½Ã뜎ÏÂÕd]1jÔ”N¨«P;ïß;]É*lC©ûqЮö!„Ó×0å²!`o>ÙV6©n%‰œ’•9Óéà©ôò:„.}Z¢ÿ4’|þß§Öæ zxµ°·§ŒìxÚ¾¾Û<½.3ù\öÄ–”Ë™ÑÙ%ùmqáAÅSz¶§Õ5^“ÀZb´Íteä›Â+ó„0DÖÌàŸ0S<Ö'¯Žp$´`šÞú5_íŽvÍ]±8¯ ³Ý.5Öe¯¦mXôûÑ,’§ tÄiéÜÃù 4¡¦¬­§%äôC—\¯„F Ai›;†Gø3·óc„¯ÈsÃté@*ÀÏò=L6Æ OÈÖ%oN€ï6³çàÊÒÌÄæÕ«uàC…J&Ϭ”Ãý]2ÜØüÍC>×{_ó;¯"… È2J®èYí£•/ø:1Ë4äÇå¡#i<1Ô†MÉú±&?9»Ê¯ r› àuÌ«£¶Šeb¡e‡ô°lú‹×ÜšöE•-ÚÅÁlcŽs«¶qs>XÛV%ef>vãÇ´ ™=˜vb¸õλªÙ;‡ª|NŠ(Öu”ùËÙâî·éÎ[ëÓ?ÙסÉý!~s9¾/²eÖd;¿cžöi¯^ŒšÅŽ)ÓÀ\vçMÇà[ái¢ 3Z~&`@¤*)Vfðœ”å0ÜYl$-–ÕþcðAÓ7—§{uÝ]Q{ÍÒsšÛ·Ó|sÇX±ñ ?Ñ\%W’5x÷\ÏEw¡•F<Õm ³A4óš—íz}×.ˆ¡Ÿçî0ýÀ|§‹ÕzÒ£Ê×Ó)Dİœ ö[€³ÕF7íØµÆÜU« û½/Œ5 ø¾ËÐ- „,£%OØG2¡—@üÞwt,P¸ô€éMË ¾²¨ÈŒøc³f¥Ñ<·•œq@gfݬï>¡ ž:bŸ6 #ÝðÍÉ•Ôl£ëσJnÞ*õ+CG‰á6LT›) ÑX›T_˜Jø+hX9.[ìßxÚVª)iÀ½(ôlEóÈq³HÑýxˆ_œ™ï"Ïé¶Oè£ÐÇ=¡_¿TkPrÜŽ¡îRŠNt¶V‹>S,…t8ÝQâ+i ÄÉø¸ c6t&ÊÂ1eÇëKÞœ^pvlLÒþÙg@ˆ¼—{ŸÄ¶ËŠzCö?×Ö÷É÷´rLM™uÇ1Þ¸Æê:8ÍËÅ“ª6ó}`{@¼èXŸá3‘±ÁŒ-w$æqƒ9VRî˜b•†ÙíBGÆÒœ¸?2‹aŽFŠ–_ô=ù[_•u× Òá‹Ìž V$*º5¦‡]äø‚‘m­‘H Ó^ËX`ž0<^vЈ»V²"%–'ÍÞ~…X \íÃw†öLÙð1¬Õ¨ö) C&€ê]n#Š+~4 vDv „©[:E~|nF0׺–'Ì࢙ìk¬ªµ&¯“Ží•5Ì–à:$¯ (avSŽNÙ5c›ß™íÔ–i2ò`x7AD–t{$¬E’Êq1xw#Mà ¯3+×Ûš±ZL—QXš`ÖKôî|GË8ŒI>âËsZ«? -˜q<¾*éØO6†zÒEuEÁƒ¦gL­5sÖ8U¯öéIðXÅÛ ”ß¡½ÁzÄB~k-ÕaøÆtëa™ýª´§êÉÒb5ô¥ôûƒ »–ÏDhÊÜ¼ÙØ¸{Ĉ<2I½«ÖCÙHR/cÇžE9ºóR7g$ȪGZþ«•ÁF;°Sý7 ñp¯o¬3Mñè)Wª÷eõ^1¡†ZÀž¢Ã:ÖÎyâÇ3´q&¯”tH¦ÞƧ3Æ}vÜ×ó•µßbú]B˸.ê õŸÙˆ»åF§uzP¼‚ô”Ëá¹ê Ëúýôår~j÷òéøìÑA<¢W;ö-m›ùÙ „YÞ‘Rmyžn³û’#ZÌùúðÓ+Îf„êñ1-Ä_4Ȯۃ¤¸³¨n ƒg’%Ð"4¦àc{¬c¶IÒùrïYVÞSn›îÆ6½ ͵™qâJ(ùBÅ\#éÀy\oŸ¯m ä@3$k†z¿°X ,$U Eµ_¾woîÊhDfÙG/Â¥ÒWË‹WÝ||²ù«ëi¡ 9’Pâk'übu°k Ÿ|˜æü2[‹Ò¢ ˆ+Œ¹Ð>Bò,ήʖGcÒ虈T¥W–fx„éõ¬l(Œ ¹"Z\_V/¦ úâu³í ²›Ë‡§ª‡‹ržžu³ÛË:ŽŽ»(î)•ù½¥ÿ8ßç MÓ( Ïj¢LZpc¼Ä×66wu·/…!¸×^b2É$б?]š¯Ö¥Ó5´ èûµÚˆG_,?Ž(^Ôã>»|•]œ2MOßs0ùê¾ÝæÏ†¥ÚÂÙ‰ÿ¥wÊ,û·ièÿ’¾½íÂÐáë§G¤lŒpÐÿí™þ%ù\Xò9“Ï’ÏEYü§äséÏž¤ÿëéÙeª^ºæÂ5I>5¨ QøNqPœm0PÃÜ{n¤KFŒ÷ÚuC÷ͺnã»Ïø1E¨9uß~ÑRÁÕoE~ßN©Œ%0Žw±ŸPî5£*ø³+ßÞš@ª¢¬®Ö’6c™]c›pÄàNb­s˜su5¢ùIÍãµX -Ëb¸ˆÐæÀajnõ5»³ÅItÚ/èÙ„†¹[Í üÌQhløLÍ®Éÿä’F¶§ÇÓ—8å%õË(ØÅÂݲÜX—m!y{›ÿúÏc·—Z+#@þã÷}Ê`&¼ö:€Á¦Æ.C>ºy¬ñ‘_䣮  ú ­0ԎלˆDCȋѲuT³|þQ7l•{t˜––g—6N6\ù.›ÓE1ùÜjvÓpZYœú*Œ=¥ÛT­XmzV.Ð6)úÿ™‡ÏöÀ8$W®SöÔ-Jò¬Z¸6‹‘òÊÒuw9†OôEÿÙfé™IÓ*\ßðüÛ¤8¤aó´Úo¼èþßo­Èú­puéIØÏm[ª>¦Sö'äë ›þøõÙ0vm‰@E!) ,ÈïõWllû›VÂéƒR~rs‚{ÙQ(V“°…óóÓæÂWóËJ%,ÆžÕÙ'8€ ¢w~P”Å-­‘ä-ÒËåi3µÅ(ܦ®¡­¡¥–wsúÚãQòsl“twoLa®=Éù@šž«œÕ%DG@6iŠoÓ›“*[8NT ÷ŽHÙ¿±¡~õ-ŒbƒÌ Ìvƒº™~õ+Ò0òÙö)˧‹çaMï:0-…~®,3~æÚ³è’—%/,Ð&§á¯Ð,Ë÷a´˜í £ì\ߢ/.N@Õ0²ék~éF ¡«=Ϩ<–÷—…qÇhSжë7¤Փ[\áR{ÈÎv *Έk·k™ÍNȯ±([V;n‡Q»†Kcî?zrç½êœÖ˜?UÚÇ>о¬li² ýZ¡ OǦ°á“oäÞ÷¤íé/>Ô_ìL“ MÛ¸°×§ìÎÖšz-’kx;§•óš ˜Úúá²=såûð+”á¢lùTÀX8x[§jQÉ>š›,Œ’u±Ž*[ó?‹ú·úïÃHµiA?j?ëùåé.X¨±Î†6¹†*U€«¿4²â4|FCwvp˜½Ÿ®aadæᥱi±§6€~%[0Ε×HžŠ¿0¯€¦ 1Åñ¾â&Ô|Ìuv”©ïÞüДÏËà2ÆNöÁÛÅwe_clr^Cünî‹ãKb“³ÀdÙpP¬tiÔêGàc0LdõÍÈ×èÅ­Ú>ÙN©­ÈÖ,Š­r"Z1朂‡Øv [oº}é'Ì«‹:w´h-¾y¦c…IŠƒôr^¹]—Õ.¯‹fG!/Ø $Cè÷XŸPA)¼—ÉT¨§âùË5ÔVÓ~- æÑDñž%y·b"F,:¢.3qõ‰“DC¸ý›î –4õ0hq6DÃÛÚ„X4vû9;XoÕ…mùdã(1Sgƒü3ú}W±lØ>þȃ?9‡¡}Æu\O2¡Áš Ã,ïWßîø§ö9TŽÎ n7d÷¦ï®¾öLõk†K"Juù(«‡K‡£>‰]Å}AÊyXçžå¢_D–ó`39ž—8+K ¿´|ÃÊoèš8èijcOe(R㤡äé ùë%t=Á°ýç¯öÇL®‡déá΀1Û,ŸÆŸÌ‡¯W`À£Gmç 3î„ÑÇ¢/˜•›ÙW„éheÒ«ròãªé·¢ù†ûÁx¯§Ø“ckÇr#§BSQÏá)!SÞö§§Ë:$ŠG'¦¶mÒdìƒòÂ?Ùcg–¯ó-ßêl¡ä”Fðyù7lNïÆ6„>D>Z·'ýdY˜73$kφö5nß`Ž‹þÅâ«\_ó‘Ö.7JÅúáôB°…upMv< £R^\ݳ8O{!ïƒð¯ðË…ïÃfZX沌}÷6ʋقuäRsdm„ŠòØ”9ÇÞaÃh˜‡)&gƒ’çÂ÷ÛøÛ>JKÖ³°&øö:LÝVć,òo6j~Y3“ÍÑ“lãËíµ;Ôæ{J%‡Š—½²œ“òÖiÇ¡,ÎIš­æ~sÐEZÅ8öp5Œ$®º^ NÏÍ¿œó Q6è? ¿&xˆÞša®‚¬¿HŒ±¥%ÜXÇ£Âàüâº{Æ2ò"±Û¨Üò E!×\Aüò½ Æf6j‹vcõÈ®‹”Ö`ëÓl\>p¢Ù§}½:a„]ƒôéIb#§O€F©^ @Ëy®ê3°Ü¹ Ê0pw‡Ý-ÒGûàÌ’üíRË޾ɰ©¡ž]óä²sLûŸiä\´óÕ®aœƒÌà$LÕ‘ˆ»Æ°fþCÑ{üí¢¼¶è뷵ǖ»äø\#n+⨻ãÅbä:¸D¯nÐ4#WZ®›Ü™3+0qù-¿ç•õ°2’æ ¢\2§n²Ø$µ¹<ó1%šÈ‘Z;E¿ŸØgwHì;ìàýÖ=‹mKêÑE_»g o¦µ f7_³ ePóí­Ì</t-’‹ÓÅ”èe~‡©½ñ…«éí(·ËÎÅõÆ›sal5ÞÍÖöõ0|½°8h€‡!‡NM;µOoc'°Ô|ßwû: l^ÄšìÄî èqÊéù¦q2£&ÄÂVÝ^†îolŒL$OkŸS¾î­ A9óÀƒfŒofí`z$‡ùŠc²8S»:豟qb9CÍ{|2k8(÷JE°þÒ‰uÏ&Gß É2¨¬°~$Wü08 Èø0|­á'faÑ\õ)@²"/Ùh!«]ø1ݪžþáÊ{bŽÉÄ5—þ'#˜ÉS k¯²agÀÊÖb½—2*«Ñ YžÒ ¨fV+Ò†rr/ œ2 Öê–à9h¿&2šÊßÌuJ‘ÚëäæÒàxF¯un:0oí5l W[a§\PNYü.˜Ì¥ûff Ww<á#3ØR’Å. ôãëÔnåiÚ˜Kß5ÐC¢ªÚ B¿…OJM}ªRAÓ’'¦UÞæº_Ó_Gk¥}L0W–-F²2&µV¡e—Þ×5± g§>Ñu²gó¾Á/kl9‘šçXó&ŒàSbÕ³gZM±mM÷U—i°ž««ß9®A1ž®Y9ï›Õ•=ZuŒ¹_5÷ý~9˜b\old-b³‹Y0¹q„›üB³Ñ,/|ɽ2ÓoiÚ¬«G¿ ÐpéŽ'dÁ4\ìû›0”³„ä}Ù6öuT\]G–±rÙd2Õ‘X¤SRÃ7¸Mô§ÝŽõ :©?Ms'Œ´M¶9äï²z±S¹ZþEÚ&jju’Åœ†±,„ƒáUTI}^Iy×lÌñlÙ>pJ{†¯‹“ëž%ºmaðØb½³'Љ'´ö¦cgbÀC§ÇdŒE!Üíœ`%ÐÅôEœ³<5Ö¾mç*‚bËô{g*It€¬Öêï—0Vô¨cæ,P0?U¾×ÕÓê@ÌŒ©žÜYiÙ†-òaðÕWä_³ÉÕοaJë&XÕ‘¼·2y®AVxlÑ—ùBCÑJÖæl1½¸ºZÓ8ˆ:~6»Ä}zm;sõeà{öÍÂ6åXàìyz‘CÍkîõUp+X7hâj¤òj8¨Oi>æ§bìP<ÚA_’¶…cgÖtÊXÕíß¼æF˜ÄÀS†Ð XƒDݤȬ m_PKu¢äS>ã ùÇ— }ºXNo=ç%õV#Zî§¡ÓÜëôðléQ= d¹©m5ï8»Žr .2e'Dr輔ᒀez •F’òmÇ)ßÜ£!êó-f8Í@Õ™~³íž‹~èÅç„GéÀbJé'Uæ1‡ƒà-]À/›‹CÌ’4$ä1<©gvh’W‘ËyüÛc0è³…-âr¦uÏ/]Òu ‰‹Ž{'éÍ«öQ$x§Í‚US\ð6{ò ¿Ê'™©d‘UÀF½¢$#DȪen3)®@?”¢Ò'Æ–/®¼æ°aY$¹Ý5Y3_ ÿbCÎcZÝ/èAË[ø s1ãÇþlñ\K•}–±Možò!8ÎDŒŸQ£`Ÿ¼æY?=ó+B¢èµf…ÒUí+ýòΫ'86_LŸ(†$áƒm¡ŠÅ}%|hÚ/øÏœæyôo9ÍÿXÁ§äôȼöJ>1:êÛc ËþoºNt.f$:Ïc':Ï“ÿwi%yöÿêKó2›ÏWÿÌÊy„ÆQžþGô|æò[iñ¿Þµö´‰S“a %䔄QÐ4‚Âx²Ñ;U:G¯Ö­¥ïÉr…óVóâà îWT­c¼Ž^?°ß%|Û ”‰ì<JÏÍÕÊvÄÊö1'ä|ßÕ »å:Ÿÿl†çæ™x…\\ïöl,}ÇÒàE2`S¸]Jö¹ÞùØ K.ßjÁÊkvÎoÉ¢e^¶Ë0¹˜r“­ÝÌËÖh˜ú¡´ò†þy „n¶O¾|ôýÀ”c4z¾ø CûT·è~)¹‰_"_(ƒ¥é] ºjCän+™ˆSI ‰IˆÒ¼ÌªF­øÌ®b”|’TyB†\¸ źH_FA ¦Ø³lÅêG¶ů~r)mZL.ݯԮòƻŭŸf„F—Ä™êòYY‡žúNNŒ ºžT„±1{P>é9ó'[¥©bXþV:5Ìœph¸xðËûh‘›ü©x¸ŒÎÇôõâ’M‚‡,rI¯ãxfg1òºÀÛ¶¼Íw8¨·««Èòišk®h#¾]y@mÈpTë%¼=y ¬AÄÀ»ä3œ £ÏX&{ÑA”ú-HQ:÷Xâ …œÔ:hê«Y<—‡1UÇ5ÚYYµí›j×× ¤ØD1[ˆÁ —@—áq(=(ÊÏ•[é´Š„Êq°ÁúÈ@;cq |æ¾fÚjÊxÅл RÕiÒˆûÒQñÈ >…¹æ¶wZ§á¶>?w>â9+%1,–à)¨K1È쑊z†H—ŠŠ'È’2P\8S8Hàž~ëâoB€›Ù.ágÊTF9&yö¥e^ µrarß æÅŽGÎìÈc¦¡ü90‹Ò8GѸ*™ªZ’<æª"ËLE0\äaˆU²ÉœWçú"/#o¸Wù%k‹†eYTC”RVP¶w¨\o,¯.šÂ«BþLÙÀK«3ç=X»/§¬Á:4›P錙MP3!=AG±ÀV¯=S#pÆg„s7õ)âÅk˜ï“Ù"«M›$ :4/è»åÛL!ì°÷[½ô¥/çÃå „3iÔL »õ^Š TâÐ[qºÉ,Àß´£³Žª©@}nòšéª Z]}uHGË\APÝx9oXb®U.£¯²A´˜ý´øÊú¼`KJ×ÕkÇ"àÍ2¯îPK"«ö¶Úô˜ç‚°q³½h‚T['kçü;íÃäj{>ÃÌÝ8!®L5bwå0Ô‹›ñÐ?*쇥ÙôÁg*O•4äðY赇˜J·‰:½yéïVV ¥T%¡áB(iMãevÁ3o{Ö¨À¦äl¾÷&3ÎoÐ'=¿Gd}bª-öëúJë?Oü¼&Z\+ô)i+–ðßo›¦KXaëy:ÙYëÂ2\Ã!½(…•ô¤!,–ñ ÛäWžêË8=p2©‹‘q‹= 0ؼܠ£osÈæÎFÃÐq‰v]|’h šj=‰vNŸÂ…б.`Èb v³Üqô¤ú9çd¹…5^^UëáÃ3'£#7¢™}¦9ctY=$S'w8Î,<äŠ3혳Dp™ûÏRbà[ë(wzHêï¬3S–ß bCÌwð‚{yDv«Â¡Å_¦Ý¯µšæØÓ,µáŸ=‹Ì$M«/Dk&²#€á›¥ó$i*y¤]nôÈG/%8[™‰àÁ8§™ ÃUÉÑkÿèa³ïäH:q­U¿ŠhÑ'n×RÔî—Çæü•/ Úxn8ƒv°¥OunÌS%A½HyÊ^¹U…­F¿Å ÔÒ䟈ÏW,Bž o˜IEÿã•yŠ…g† vÙ­«Ó7P·¹ø>ãkØÿh€š5ÚvfZ3¹` ›ÐÃãQy—Kç¸|”/QЫîî×*À2ìlÒçÂâÔ´s0±äðÎ vN ‡œ\´+r#H»Î5†q~:H´½±'cv“!“&Zl¸¦àeï™ ÉÍ 0çí­êº"Cú¬ìíÜÙ)Z¾KMØ.×0<ÖRiX4Ø,¾Ý„¸bÍŒ]GDOù1²âÝýÕò*}ë¢Õ×,¬Lb³ù|¢ÅË„0 qWö¿Ò¾Sâ J)ÀÔݳJÜtW`Xð "UÁ±U~”Ëã«Ù£~ÚÛ²²y§Uù£"ìµõH!—⬠¾R‹f[›»Þy -¡©ê¾üm™KÖ7ÃꙈºÿõˆ«.¿ ‘ݧUYݨ`¡›ðìÚò€œ*p‹qGRÓÒIr»RR)sè"öüºÌÄ'G¯±I¨'0 R/úÒ­½+…ñÅÝ5Ï0¦¿‹&]áK†HLŒ0x ŸINW»Ï³Ê÷âO‹X õY¬¤ZW Ô–ï„ç¶NÃÈp* \颭×rmçÏ!· h=ŒŠ”õ5ýÍ´zY‡8Å¢YRQ+‡#€ƒäŽëL1Ê‹DEóö€\ÇÞó1ŒSw¨ŽŠÀ.߃¹¥Ý"uD¢š‡•‰vœÜW»…¿Õ×… 1E®Ë¤å³‰ÝXÓŸ†Àã4Þ¤¯^<÷ºà–òÒkAy®Rç°eÂÇQLêÙîÛÅý‰Ý\ŒTV Et‡\cãæËJÛ?ëqø`®oC§îñÑÉ=Î:Ê^‹Z/£ahÀÈ®Èõ"#ÏLK&Ù©è ôoØ §×¯é½àüå¯úÙ†–10Ä<Ó"D¾˜Îj„Ռޔû‚pœŸ½ŽŸÞÞ3^½¤ùæŸSš‹åƒ÷È=Õ­=N¯]õ—®ÃµâS¹D^ÚŸýëkP¡uÂ’³ÑbðÅÇ^ŒÛQ«\ºÚb“–—ƒ _âH«‰‚_)¹¸“µ·êí]ÉLí ²¼d㇑<]jµ´dg›ÜBä„÷bŒ¤£b@PmúB›ùvˆÜØÔ¸¹<›Äv2õκ5ñOë3!vE «èÄ*¥¹iWú˜|ý3jo˜.sß‘7!Òmwj2ð¨œÄë}ú Ë' 2ÏZ‡8XŒAL¦¼/’),žº*Ÿ›þs½†‹Ë0ObÚ׿wúö˜¸–´ÞhØ¿Þ?¾DG†¤ÔÄ&ÉèÚ/^OE­´¥ú<‰-vÍÈÓñŠú䀑 +Á2»;Š ‹!–ó]ÜÔ?'ç4®d“Š …Èèâ¼-ýä¶ÿÜÞ…¢LOkÍü(mº~4–¦¸*sníía4jÞ†äùø-M©iZm»¥d:cv‡J'Œw÷­ñþgÆB·5cù¦r<Ÿ•îÜrÉ>ýM6%W#À6ÏËÇOH<ýÅ]eƒ6ýõWrúÈt§#ÿ¶ qZëbSßLþèp˜LçËìJƒÁ:œø]VjÛž%bH §q,;= £4ÕŽŽ³­~{êT2DîžE8cçÔ|ã¯E.¢“{Eˆ÷†Ùv ¾s‹W™ûîŸIËr49§š‚x¤"xotÙ.{¦_Ï(× W)¦÷&•ö„Éo½7 eÔ5„¼‰åj ¡)­×ޏW^6‘ûš*ŸOÜî\Î3HüX^Ñ·“¯ —w*¯…i$é™ÞêÕ‘¬Yóù®J÷ªu_ЃSÿ-›o=˜ó`ÄŸKÓ:‘;9·¡h²YƒyRyp*ÒÉv’È qág#aÉ.½å#ÅüÖ¬‡o'¿L[óC`Rœg+ªçZSNŸ¢×vëïüMÎy¤TµuÄÍbm?ãÚ&Ä¡jmڡц‰*0­â—'!b[Úôѹ7tòç-4»bÛ .bÑœ? md%t¤Yáà‘‰FZn\>§´É@ÚQÏ Ã}̱Àº/¨3  ‘­Ë7L1Ì— 268§óåÇ,Ä1©-Zæé´ d{ßœ¿K7¾y¾ ­~·\hŸ·q!ró7ý›£;—v(ô‚ø²?>Ú}j¤¼º³t€ÊƒÀ…7q9ÞcÍëû—!’ØÚ0“O€ãÞ2ýqhùÅ”±aȘÏÝyÚ¼Ðdz lz¤wàWŸ3!IÀ ÚoØ T!4›kÓgø—1 ørS‘\ò°ê¨é÷:?½ï/v¦ëäbÐH7¹G…ÃëSK»äõqââ\> ;¤=LjFá~PfJ©èP…-.Ÿ[î‘·Ë:æÓuó\y4ãuPwÑV"Jp%;ÌÇ"hâ¶í¾¢ µŽ"Êèë[Ë£ò¸¼ýŠ­i`eŠ{Ø„áƒ/`‚˜jn?ÌÔ£åyåÁùçÇfïf]ƒ¿Ž@šnݾâmáÔQd ‰¤d§þw’—òæÞnùx—o(ìü‡,ž¡x¹„þõ®) ÜÔœ5ÆÌ9¿YR\½ÒÓ»‡Kõªøý’Î…|Ä‚‰x~Ρùä"2yi šÉW™<ªû˸©l[w°*5_âä\¨ž&ý¶TT7賞— K¦‡~áнîoû˜+0HÐhWÿYš^+-Š1k´ò»€ÖBüO’îöîh™Óã–)º²%¬Öì–6•í팟*{ÕbºÌöÝÆO›‘5b¯ál¹ —å–^U@g´…¢/Ÿ/¯n¹s›{Ü™XùÃ`@Ëÿ‚Ê™þ[T}ÎîS 9`Á¦Gý:c2ÆÆ Œš"j[9+>ÒLþUÉÉ(=¨}ÛÉߨVø=ŒpýuPÎÔ@9SåÌ"(gPÎl PN>ÍÓÙÂàäŽÁÉþç›Ý},¼Gºõ>Ä ~üoç[üÈ^ßšî¾ÙÕ²•HîúìâXfÔX»^KqZ÷‰í˜ÉO¦¸àï÷ãOË&•À6Ãñ’u <¥#eK’O¹bœiÙóJœ²/,bÂ55‡µ†Ÿ·ãÃSÕyp©Ë³¬Ñ EåÑf*“ õ8Ìa.g½jw£ð({*—‹•/ñdLJc(ÊÜ®üVÛ“£PÒ§_î‘p¦g/ûO <µYÇÑ(&ÞšóæOÅŠA›o<°Ål× Ó€¾!li-!Ì™Š¢FO´!¾¬„'/:ˆ#-'ðÒÃ}]³›ÎÄ2ü q´',J¨ÒúÒ™Ó_v¸Ûù\N9%k|(&ÕÂR'á!‘ö‹ÁDöýº¹ü¤jQv'ÎZ§9.×üǽ]pü†{R z™àL©“Â|Ц?kÿÈìDºQf&"$I·îóka”ù¬eoDJ÷î—g=ÿ3‚„ŠþŒ4=°Ò^Ndšjn’æx#ÖÌ2%$1¤„­­4r7_vÞÖ9Ñ\=ù&äžg÷ËÙ¡´P2r9(¡8WLæ°ŽÙaI¨Àj¹aîàJYWv…alfÇß‘$p8š³ãòiûºòãC,–ÞjLL0ò¿'æäS”pýˆ©ˆŽà×YòkÐW2ˤ}2ÛŸHÏ\©gÊ–í‡9_íâ÷ÚÅ’gâñ,üZgOdû³MaĽ‡?í4 5ÒrÎÄÈ&½‚ÖDp£ïùsVœŽ‰Ž#õð·–0˜#÷>FvÎIJè¶ ‘%ˆ™›æëxXé 6 ªcxvby>kOÐ×À,FR¹#Àá™Óz¦©¬Ÿû¬éGkºxsÐxˆìåOÕ–&ÚNÞ—ÎgÄ~±Ã)4@:ú¯nO«‰¢}í»~<ŒóÏê‹kÐ\‚ßæòõب#d6±i}ÌRß´Ÿ²H89FZ3ÖüžÙ_r”ÊlÙRŸâa6ÓÚr†A ½úî‰Ü8ù*„B¹„uŸÃÈ^3ß×7Ýœc¦{SI”\b®¶fÙÞØüF›€Õ›R3ìs¼¤ÐÚ,ÙÏd{“×·BìéÛû{SÖªuZ3vˆ3±-!€®oÝoŒ³){7&'w;5)s³ð/<ª 'ãÞtO£ Š,Ó÷LÁ¤žìÎ?rj1FöxM¹'Ïw†uNìͼߌ=1þ·n˜"FïE¶/M_ÙEx súöŠÎ’±o&Ç€Èñ\kXžŒ¾@WþÑ7¤³ó*Ô„ëÎÅP×Ê÷3'í-+eþ{ôPÈIdƒÒ¢=KXÙC©[`;Ålý|Ó7tþ czç,b"¿‘ûé*´ã“¿º«È²Mñ°ž)«7õ~+×ͽ®{1@6"Gé‰[YyFAý d€K=‹„Ò†qÌCGoSÍ\7Ãoy¤Ç 3üïÞ¨ ¿6Ä ÒÇîæ3Vášß¸úVÚ:­¬‰·ˆbs&'G…•fcÊŽz׌@Ñç'ýŽØOcK«þné̘Ÿ²™¾tßÿ‹[`ó;:«Þym9ý©8rjÌT]kÈgd¨ùŒÚñïD­ÚŒVÓ;ËÙKég&Õá@u’û²?_½;lþÁð¹õ)FsS›ÍØü¬’d:m×®1rhÖwzà hO ô’;AjÂK‘ýó*ÛÀNBŸ¹¯©‰€!N?@ÛÌüÝžqÁò:Ñ+S»Ò6Qæ äœG›ª&H8DCFŒÇN}²@íêžóØã˜äæ_öøi/uNÍŒ‰^ø†-;î˜O¹ä Á´¶#êÂ]TV–üŒ ‰^ÝøïœÕÅhÓ_TRŸÌ ±»xø4%%„dÛ?5ˆÕFÊ{Ò{“aSD—ÏãÞøC9ƒ®-Ç”%^ˆp4>Éüœ›•Ä<ÃÛª²W£ÒéÌ2|þÆš^—ÙVæsz©üaø4¾.¼4eh‹V¶5šöîð¥Šwôe8G3jg¦x^ xM´Ï®h>ïšÔJOÀ‘³¥™Æç\qíý˜_ '_JÊ=ØOw62Õº)¶Ë߯ôxt 'æÜ‰¾º±]ºôÈ·ŸÝU^RM?»Xu7=\é^…ØBÑg»TëfEÐIÍÓáîXs‚i\Ó@LûÞ·ü„_qà±jå·ŠâªË¦´u éÞÞf{ëÆÕB.@;xWíjˆN@Jޏ )}M¨¸—ÿÛù5¨¦˜lì@¦ ƒŽúDÁk÷Þ¤iè}CžÔ_ð‹Ö ýÓSáA»L}/ˆ0¦8aÆÈC·6»ªÛгÐ.UÓÕplâèñÂFkz1ÕÆ¢{i rß3¹àÍp/D Oßßåšg¿»õب÷c=®1Vì¹Tу…E‡ôG¾$¯Ô‰ž´ÏBÔKÒŠTç}ÝOš´Ñi·¿FÜ9’òýy+í/ŸìM !s(†B(Š—{ü’:ÒO¹·Íô¯YEºÚvF̃AÏ<c¯‚²Cúà:b‚TµàáÅ I»žzÕ5™ÇÞ¯Ý +Ùw½‘"º©õV’8rææ&Ê4ô`m!9¯,2Nï®.OyiàšÛvc~I=¾*\^ǯ'½‹ÊÖâ nRiãB½O‘YRÚœu…pÒãÏÓW]Ò.~½¨ã`ÝÊ;/¹›þ‹pò5Î¥Ÿ?²÷14ñGjÌþKØVýÀ‚ ‘’v'Çà&_Ò¿¬·å§ù–%y*xô¤y0ªÀ•9 ,GÂȨ<\Ñœ§ (Aß k©”aØÒø–ŽÍ6žÄol=$;Zç¹½â°LWòç_Ž rì,QþÕ>ªC[·kLF`sõUã¹SXQ>|¿À¸î\~«lk 1îë7!Î`Ô:ãþ³!ú³>¢<b›(Û3&¸@Ïž͇/^‹Ú8špÊ,<Ø¢»â 5U§Ÿ”n«‹ótlqçkmÛ[?ôæÝ‰ßþÀv#šƒ4†­vy˜oI,S çùnÕ¨êYÅ~vÏMºÐv\FJ«É˜¤ì[Ú¨D.½/K0(¾p—^ÔøÈA§<òXN%H™ùœ©Aª¾\_¥ßaL̦Ó/Ò:ÉÓaäÛP…¦ð¯6cnDl÷ìø|{$3-i|ÙlK7õ,¹ÃÃé»N=õÜÊ1Uþp@”8äk[W†8ù…Ó•RóÂ_/§£åKtJ6äã„ÙV&ý¥à'ʱ¸ÿéxÃìÎS{ÅfxÿnÍ”ïp·[nƒ]ØaRR­áh†ÌËxBVËg&ü¦©SÚ~Ó øÖ‹~Ê€¼uc‰oïýÞœY0ÑNp—úk^Áë û6Ž}YK§æôX1ç$t *ìÕš†H T`I7ù;h°€ï ?õRÕÓ}hšèqcazn²VS²·(¹}¿_Mºk÷»3=ɰ¸lÁCúêÐãÎ3?ÓàfØ#Ò©xÛö|Î^È—îh''BÐë¨';4R3”È[‚áѳ·¨’ °t²ÕÕoÊýÝ ©ØD†±çM ¹¶PÓ“GÎŽmž¸¾ßí†G*×er<¡…ÑÒÔÍŸßn+(‚Ñ/»]h—Åw;š¼)¶BA×ÓC@Ô'ýo=~º'•‘å};‚f³´s…<>|‚_›N”8f²B¤w4ž×)Ž'Ù‘!½'õQ”‰³3ðž±›®…HJ]×Ò}Mrïš`$uê$îðL} rÅýêšÉƒã$SiŒFBVgeS‰E$JDa”I¬ìsÁ¶È>ù…ÇÎh—©Å^~­nX"ÍËÄÍàM Çp¯ 1;ðW;3ù«ÄM1ÆîM±ÉCó[;ŒŸ)ÏÉ™ôØŽ ™ÿu•qA’!¹§Šmªk“ñy ¥é èù{°O”c(ÇNJ,õú)þõ‚J´2Dœ39.„öpWœÔx'ò®¡[ î4±XlÁeÙWÿkQü[¬E29ëžÏE¤ídêßxÿ“ËÀ¾1Sܺ1M¯k«¦¦å£Ã3?ÿqòøp¹°È `13€Eé‹Y€E1IÁv2Ÿ’ý$Ÿ%ó¬'iZÌ2üa2›å%þ0äiŽ?ÌÓ¤$3Ê|ò“ʘ¥ŽÊ˜ÌÿÇ<;/ÄtЉ›¶Ôï6Lµ§¦+®¿2Ýóhã.NWi*‚'k!b‹æü†ôÉL™]VÜ’ÑåK‡×ņ4É+?bS–^ÓÒ½Cö…b(,ü’»|f³'¹c:›Q`è~MÆ*"c#†"§Í'¨#íG6F£ Ø»“ >4E”ê_VÜsïãßz 0IW9“qD¡F‹ÍÞ[è•aÆTÏàYÀH-™Úc³”^„<µ^Ac¡¹*K’m˜˜:†25Ÿª(ÇJ®Áº h7˜ÅqÐÙÔ=©º•0ÀÅä¹ÛŽ#¿F箇CYc+Ru¼:”ÂFïQ¾â¢Øp÷˜›„X²«÷¥¶#²¶œÞx4ü¤÷cCD9½ºñÊNϰ¿ºwp¼ ”µ=mÓWÏÖ|œ-N9e~ š]W™ú¢þÀ'?äÝ_|t~|`gÑ®•|æ»üü18º˜EV^V¹63!sñД`dr{ÃØµÃ±4ó[óùéš'_Ësn€=ÃIª"ÿÛ¸°_ób÷Ðï“0Ф0+|_vô¤ÃU˜±jןôèhÃ>œSÙ†ÆR0,Ùûu;Yá¨íßåðx–¹nw"D/K)ßßÚ+¶m³{â@–´¨æÌPwMá¬ÙÃî<‚B/Ü]\ìÔ£€^_æ/ùs FŠùJN¥(ÆäAÓ2FçðE[$v;¦_:@ÕÙR=lÙEµewí‹,5‚Êvn·®éϾö5 ]³:rÂR‹ …>¾%–GÙš¢Ëdzó§wÚnÆ5ìcNë€yêé|ÃNb§cá'‹ãcA¸£ÎëȱŒs-¼S‚Ðá°PÓ¬Ud™èû¯!ÂJÚÅß³¾×p¶ÍqH6ÑS©#ÊÀ4TÑx…×|²Lqd'®lÇ’Ë"ˆÂpaRHÃB×`ß9UlØ«inz o’nsNƒ1ùÔ”‹ç/Ý®úåõº™ú )©^¬™6Þ:-ã(Rø ä^vlq,ž"j-6¤ÿÝoF¤IÓŸÒºHƒ—ôŒËÑÂî3}]šn¬f¦Ã]w°db @Jœ™ ؃4aÓó§ š‚- ‚RdkYŠ®òRÚ°ë1‰ E½›×¸Yç oÔÏáƒeù˼ª„õÝý_Õ$µéêMþ±Ÿæš3ýZ ,Ôûý#ÿ¯T>hå,ž¸èÕ¦‹ž‡«{#¹0éìDq½ÚÌy‡ÞÜ dÎWêŸpf°›ŠXªp_–¿žáOqŸ€]°u©gõrI&•Ð%ðÄ9 D Ø[ÒYáp=fIÏ'ƒ|Êê³pl¥ô‰©Uò(´ÉVˆtÂËÒ¿{ì|©h©Âæ䘷ê1Üz¢=K‰»ÇöýAkc0SÉíȽÐc·!I<#O¢¶ª¶<~Aöªe~ÝÎF?TÚ—¹gN5_x†|‚træ &úàSšþ ³aœ_‘LAÂ?©>;‡.£÷¹~ ¾s¸M…d¼ó'ʈj`ð¤úª—ö18O˜Ø4KÒ­0• ]{›O¾iu—aÜVj%HP¹Ù ©ŒÇ_]xÌy›&W—tJìôK¨ƒÑC²º§Û@²NÁÇЕG\ÍázNª—ÐìÓƒÿ.Ñ©>²t[=½=´°Mž,pÚÒ0à7Ì&´û•|l¨™9Ù( ý2qÕå9¼!—UûÄu>Ë-³ê<û-Þ¼ìõ(œ³\ïÅx~f_¡¯Ëù¤ûœô9D+x_Ÿ8“4$¯%q|7݉í_B•ç<úƒŠÐyÏs(° sÜHN[R˜ôtå¢ ¢õE7Vû‘¢…®Á¦]Ü1[’L—õÊ[—èñ=7ÿ-†d¯­½¨ª$bA´¡¦Ãšô·ŠšÆL~{aú+Eâ—w2A,Ȱ^¦¹ŒàÐ]Ãî̉ÌÑÐ!lm{®´×Ÿá™_òç/n|`(:Õ@ÀàæWNcg¤Ë¿f£]1@Ú Óy°[ägžëƒ!¤"I­¼‹™ÉélylÙ½^Ôh‹¬•}y˜êB:—VúÏ(]¥’‹¥M{§öÎ?œ*"ZÈœ–Ë¿»ÝY&9aK{nö8­—×nyl??t·™ë¾£΄Ô+m¿ÍrxQ¸®|­˜[ž Ô+ ÷Y¿Svž¡dΟföík¼òYnÓ'GõØ8 ÅTÍ<ľ³“‘Ëå½AدL[O;ˤµ¹X… ?°'fМ®ƒ³Ò(ø:çš`.º–«Åº)F·¦ó¥=dáIV<ÕpK¿“ɰÊv$¼•I¸'ÛL<î½8NÀnY-kæ™g<‘Ò¤ä`Xîÿô™?ݲ›ï3Hêîo°AîÔ|H”,Los¯Ÿ¦SnmmŸmæ+–$§Ž€I°Aià«Y¹Âg ¤2k–'öž­ñ½\šTîÌ,lêUxËô#¶¯ö!އaYÎZ§ ûÏüSöUrCRe7‘¡°Õà æEK~>$Êî¸YÝÕO_ª ÆEžl&rǦ÷|ùò²=)+*K¼‡PÐ?ør±e™~í†çßR»·Æ÷:7-—ky#)±O­”ö/y×—!öY¦Š’½mFcé˜8Ü<‘»:WDЀ%ÁŒö¬=¥rz‹‹q;¡†ºš[bµñ~%2¿PÎÛ‘aåm]Àç½’j È ›­i0k|u†ÛGýŒpˆ½€aêÅ⢡–*Üö,Õa“g¤ÄæÆMtÚN§Ÿ`lÛ@\è®›r‡.vcwlÿ‘ÁÁR–î@ÏIÜZ^•æ¥ôéBé¡Nf 8VÖ`Ò 8ÿd&ÏYQ:³;ô¨P?±*è…v_F˜t ™YYå íëp¬²Ri:8ßM¦»L­³ï§¯~@k` +Á¦CüʬÉËÉÇwÕ`_¼ à¿A‹þ¥Ã˜ú¦¼±\#ƒi™ê_¤O´5è;æ¸ÐRÆŸŒ°+ ãë@ÃÕ9 ¯®pnŽÛ"g? a'cº¸WŽRyüµqŽÇL ª}ÖÜàIS¦W˜´¥.¹ïœ 5öí¤wíV“þ0UŠùlçû !Rp´ÁˆBS™øÆéA9ÜÇëÀ¹ù)«@ ¾y‰Þ’¤‰ãë [Ïpùº åãΛy™ð™†O¨vYB¶›TwO…I–é]8¸qjßJ*RfµÛÇ2±·Àb½?ö–=C¯Î¾Ø?°Ë •â:BÛÒƒ®«ùTs Îyä1| bÀe¡gŽ™tœÉ¥´|úŸÕ‚¦€F]¤Óýç ¼mй¥¶­wù¹o·~˵ʢO–,ìÔÇÏ.+Ò£O?£ž}†]é_7=«hÐÛF«z—¥²El:äPÛéCZ®ä´§‹j;}¾>1/+Ëyü­·PÎä=³¶W&e£È3AÌs°`Ll|™ìü¹0æépX¥Žˆ=°pdš®bÉN=!çÎMË®«ßÛŽt¡4ŸŸô°¹ÝòèOR nB yU‰{iw,ÿÀnž!k‡ÝØÎz¸9n»„²4Ý–ˆvu½œc0ÇØxúKŸåŸ?[îZ¨ÈNÌÎåQŒ9¹}þgÀ¦¯iPÕ4ñulý.î—)@j°YyT›¼‡€-5 ‘\–€~oe×wõé¥jù­)ÓÕÊM;Cgwȇ_·– Ì÷ÎO¾—^DßTÙÝÝ#iøç/‡tIÅ´ÝU\¾ö½?cŸBìÊ ¡Rs‰ÑÃ%{ÜV²S^§8~än6ù9ã–ÐTj(d,;»¼‘Ñ¥}¶·ˆ\`¬PAïÔ*C×þ9»±Ö_óÑë³C…yñ»†@úÙ¯S4¥Þ+ÃÃTæBvñDqMºñ§uÿ|÷òzÜ]À˜å À?ì€~ïo°Îî[cVîÜœæÈwK&¤Èç¢û”$éë+úñÊ'þgí3äDÑ#@‰¾¿Ù&‡?…ÈïA²ûAcÚ_—½Ñ')é<ÂQ{Pv¼^þgCTbÑ.÷(Äú!õ¸h®÷ã¢ÿÁDî³´'û%¤]”‹üáE¬‚áGI åàLÀmé)üåµ7”ô=,§¸5*žR7¿Ú}JSÛz'÷c1“¨^ŽÝÍáP%YL˘ˆZdQ0¦C 3íì (ùËÀ³a°ýXꊉ" Øï{°ƒ"†œÇU±ñ¥[ÆIûIBt°‹ p‹8˜­‹Ÿ£ÆeÒ‰¹Uκ¤2½Š±WoÕèÕ9TÈAïYHÐöc•ÕoÜfz>3éÁdã¹ôdúë.ÂK Zj𹽕ßÛAmíÆà‡Zd™Ž .ŸIÖIUu™mÂKµ²nHÏ!MFðƒ¼_Šéñ†®ÇM%‘J§Àš„Ôz·^½ŸÎwØÌŸõbv¹%SÝ ê2½wLE«&ß"åV 0‰uŽ]þ&§º­?ŽJ”ø·™×Ñ_d6¥y;DV÷BøNb8Lμ¯ìI@Ãñþ§çDã×U;ö›<Ã¥íÒþ )!&’ÐC×¹/ÓªØ0÷5-vV?í;‡{¼(ÛAÂÃc›¨™+qÉM·fHñ²eˆûpJÙ GK#-®ìòuiˆÓÄ;ô²9ïÃõÅjÛ¾Ò¿®í’Á»uŠy@FA“¿Ú»£Ý±‚âÊ®]ùã[)¯×KŸßáÔ"X cE¹­ +˜ß“Wn¯¦£Ü´ÉíñÆqZ¿YýÉÜî¶xÀ”ó¿ä²ýëdêÛ£*k W8álº\[#3íª»›ùD¡žËeÞ…±]sv[Hæ£sÚ4DLO3ûÃDð7ÓÛNWÆ+4±ÂðVмåJ]Ž„'·ºI,1ÿ¸¦ü6L+¾Ê{ë©…5†ê¹4D Z“0î_§²7Õ0Æo1ÅÍ1+ˆ{o%²YþF¹íDàÎØ^9SW¡H·óªþ4.ðñ©±ÑÚFDá³Êápˆ`Hf&²hļBŒ§ÕÍ{¾¿!k\S|Ï^äKÍFeP _×I™­_¹Ýþ’xçöý–ûž‘ݹO/9V§B²Ÿ3þ}¼—l¤L‰©Ø-»C¨Œ·Å%þ,OˆÊxÿ¯¡ô9'A¹É#pK(@vR£V8žÝ Ý?â¼åBZ¬3ŸÒÃ~šªF+Ëù9_6ØEw÷!yª¯k ÷Lï Ùm¶àê–wåƒIƒÍãFÛÓ•Û¶AGŸòÍïØÉù¼Ä®>¿Ïà¶Ï ìJ¡2’:ò]Šªà í^»’¹©s$ØauJh¡íHa‹¦—©}Ðâ°bŽÑƒ«eN{6%(Øn–ÎZ¤‹ëÉ Kižˆ÷ܰx TŒED÷9µ \Iä~•ÆxuÿØI… $ü¿c„ÉcJd"3ABA[·ef¾%lÈŠ4RnPßøÃx5fI展D£û²V_B-Fá 4䊙D»x¿ƒº(«³ñ&'~Œ÷²gœ)žiXÊ\É0[ùÌÌ•áKP/ÙÆ9 èì™n1­V»º3‹×?}½—5ÁPÏ’˜[„µ§dwJàÙL"´u£Ã“dqzeš“`µšqçûÂî»BÄú°h1—>&¬4á [:a\8ªßYN÷à 'ÝÞqïé 4 ¡Ó:'ÄÙH&î)7ÐcPV=¹ˆÀ¿Nø£ƒ&]ªò@ßcb@9@^²qLƒ ,$gþ›iλ“Ø¥& +™DûUñKñc™èjr4Û&Ìn³éóºÙ$;Ë<ãërrÔj{‘â&0D“ê—9z´\MR4ïSç½…†—^¶[%ÆÖªòíÐ[z|¬mvûû.²ï¦R`×÷ŠWMÚîc‚Æð²ôǰˆñx<Šž&§2sD›K‹6ýä€ÇÜÄàj³Ó®\ç¥íØ9ÎÈ©ZyÎ/ÒØ¥ìg¸md͘q{‰m3âÜÑNk[aá\(¸z·)¯öÙêÕï¼åÆH½©«o}fÖ«'ø—=ï;õ®LMΫÏeHâ:¥àÜl‚WøV{ñÆxuJÔ@™‰i•…]íÆ!ÛR‡É2a2•ëÀº Ó•ír³¦|H3;÷2x{ÊÒ¦Û¦ ´ ‹×”£<ààÊì~a¿µMO½nNÉàÊ¡+fÝôʧ…GØtE {óPNšOR$Ð_©§&e  “ÏÕC{ÀÕ³Þã-Ø’|Å˰zã…BQ¾.èij\Ó‚-“ñê¶£ãÆÄTŠé ¨ûúA—7’.f–¹ÜÊîÒC˜¬…Ã4×4•ðxo|(ªõF²1ï/éKIYX’y ˜švWÉ=>…‹èd-[™ü©$ÊŒ“+€FÜ)o ¿Ðª¾ùНz`Ðý^ìê.o»§GüN…±#o²wB49à/O¢0ëA|s$¢¹au›îšó€…Ó6ð;Ãbç.˜*«MO弞ºXb–6b(JOcgÐÕ…Ùjø/Çã_ŒÓ¬3ÕPæ‹ö¸~Úô÷ÆÄx7¼A4K¼SGÅÝ\qÖ %êj‘ì6«¾’˜Gž!²¾çù-ÆH8²ÎäMÙØ ]m7á’×Õ¤ƒZBйö´¹¹ô¯fÕÉ]£[Gò¤™,-iñé¿´iq„×ÌÜPVˆå`…›JA åÓ¹Ø ß@¢v*ç”ã{¼o#Sµ€+s¥a8+½5»²\ ?‚2YÊüQ.ÒËko¢ú›ÓÄr~m.ÃìŒþ‘’š­m£ü->[£˜¾–%èŸNÌâYÒí ÕèW –#€Ï>ܨ™^Vâ·&’ÒßÔ>Ɔ¦êùÅ™·ßÇâF‚ÌD„µL¿êSšx•.‡ˆ:âô¸ C}z9Ñ^½aÀʾƒÔÞ±œlWeâ…îí1=\qõ]‹Ó¤{w¶©´ô3ƒá9†aùCá‚O^T¶bScŽÃl¢)=ªþ*}âì!‘«¸‰es £^ðÒX“›ªœGÊÙÙyܼìM‡µ*I鮕÷SÔí›!ö'“ï¿ ê¬ÚJç>ú8N jNyúéÌ‚¢2‘V0›•G?ÿî0Ò }6*­~r¼stÓC(¡à ,j¼o§m÷šcHVöXVg oJÙ?ÚÚ‰ñˆE=Y?¼‰‡Wn†*û \ k?D*ƺþíS£™f«ÇOa °ö:ÈФ93æ%Ù,Û;MDW»¨²˜§õŒ'ß_V\®ìuYRó^ÖÒnµµÃÞ¦*»²> Ãë?Bd‡)ú¬†¥í’ØXœ©hÀ3ÓÅ s‹yák7ÂLI¬µ¬“–}ú US‡ÈþV {¤ã|+êŸhO«=•ËïŠ}”ß07“wÑ;eMÇçä zÖ)wõX™Ø2|òÞÄÞìŒçNè;–ÐOE(µ5÷»6ݹòœo…‘Û;“s¸ÆeÀ?zìÃ%E¦ Ö|.ëŽH–ó]r›ÙqÏw±úOï‡ï]½íIL“gæÖ5&Iw–Ÿ¸`Òd~È%û¥šñÌ¢÷ujü4áyÊu¦¯NÙórÜ"«˜«wËW'Ƽ×#Ð$£€õ´¦tvèˆêŸk>*OëSÐ?1%=9ë?ºäùr‰d3Q»l tSd¤ã¨Ã)&ðöÍ)X{?[sÖ”Fkø¿]ÚF6¸¤!vä¥îW°-«}vÖÕ™/ à­'st€Û?Ûíôe„<á4X¬ÁeîyIö`$x$ˆm¯û;©Åe'å®tÕ‹‹·´ýe6î@gM%=:1êø&BÖîyÉIï]E‡óþ­{:œéȦº]‘Pÿñ#ÿ)ß`ÓþÍ3Á?þÓÓ÷µ³eI¥-ëÒ°ÆÚ¢˜T§>éžxš=j"r]³±~A˜zE¹¯S ²èW¦ºKt„Û•;2Êe~=Nb'¹%µÙE;Oûb-%o¿ìæÞRÙ߯S3{‰ÿ'SY~Ô« ªgPÅ_µ‹³òžÎ|—šK Ïkö…¥M~G ð>Cn>Ö_é”NµôUËæ&˜‘3$5ûÑ0o×<ù¡-Tÿ“c¢Öf±¸Fµ({°kÍ—Ïu-¬]?þ£Û3·|]熘š¢bNzš˜«|-gZJ‰@µôô´Eò+ÈPý|Þüßn*7_†˜H¦/ÎØÖtõéžËú®NÉvZŠÉ!f–r±†~©–Msõö(Z£Šÿ_£šÊÂàyy„ç€ç•EþŸ0x¥cð¦³ÿõ¥;½¥dDßIëM鑦Ëz~|“ºË„1>]ûœs÷‡.Òü< ƒ«“Úe¦?«ÙÆ™åŸ7ãS¥õ¡/ m-+joɈ‘ ´|+Ú&œ¨Ü´½/ƒEȉN:±´ã\=W|Rô~pöm‚„ [æ™Cúë ¯¯çËãÒÐ`å¾=Ť`¡,·ÈÓENN]Ó·¯«L¨Ì8ðÿCùs2E'l7;†'d0'W ·›Áåf,^2Ù wƒnµ=Ëæ¦Ç»çƒæÞÓ£ÛÚ¿4ÓÀ9Z[טiBǙ骽lÑì½Hü€îdeù³nº 7pv3¨0¬sIè&•¦#RNžIl‰aá6-RIh¾' O–Ê‘¬…‚Ìi1Ù¤ëÊf ôá_I#à0)òJé“AEÉ„ÉY f'Âvu]Éx¶ˆDÜg‘F2¯nÁ7j1¼’ixòÐNøqïnëaËÉàJ`Þ’LQ[Ù¦Ë[£kܦ¯çÊüäF²!¬Óæ¢çÛHî-.™s5Ì«ûŠ{\ûß‚qûr>[§ôpꡆžuP>yz ÄHÍ~^iž³0¥,XRÎqeÖ|"·dƒäS_²ˆðšY&»¨,šÚÛ$^n¡Œ?6“Í'‚ÌŠK•û>YèÓX€ðA%12j‚ªùŒµÝi3:º ማrñÙÞ¨Ié·ÍeÜGá¤6›Ê™MÙ¶$ƒ}ˆ`4$Ù^ôUþi´í¢ß]˜bÃãªO¶-zZorëÙ)¨Uj…›i´e:¤!Ï& ƒl¡ÉìC$K…oð8}þös+ïä^¤¾èúvó5øÍð/léd%$¦¬ûñÆí® n¼qÑ,ÀÌÐ]¢æ½FXÀDÞ¥e²y¼²}+•±¢l÷zR eÇUÇî…±j®¸mµµ¤¿¦œ\bsû¨´C³Ø?ÞR¹Î 7ØülúÐ…·øvØCÆ·‡µd¾Ågö‹–gà‘©ö!]<9º8q,¬ñœ)²ã6æïþ,BœŸm^mf&¦Ä2Š´{vò8‹›-Ò…¥ká—“1®-žŒÁþ0 ÿ\\˜$×eˆ°ZÊH?®ÃÏ8½”¯ÕüRr²üŒ”)ÌìÏ7°6$ò°bË^š/ÆéK˜ëTN8¡í8cbý6§möfNšáПtI1‰Ù‡™7;ò^¿3Œm²ÃåEÇ‹FÌYPWºœ_·ãµlµœ9î¥|3\µç 2/––ß 9_[f×_S¶{}@×¾öu›'}E_ï ±×.=õ§ZšÆˆ¹—Ô\ªT+ãªÔg7½9D¶~aÉÄch¿ÿÒÚ‰1{žŒ÷ªÆ¿äæ4P ]!¨™‹Ö§¨/" ^Œ—±%¸…\VšîKt8éäΓÙ7WW× <U`c“2…óí#ê%ø“s>iï⾋Ÿ¤ÐËL­Å%i$öa q©î“È=Ç fPïØé,ˆŠ^à䯷 ôÀy†©Žé˜¬ìÕHÒ‘Byª\îc:»6z?„V°“-ÇûGÒ6‹Ñ=†E>±8mgj¿3r𢳻_.v¶côØs€!bÛ%\cÔšÉm×<§Ìºx%_c4 jö¢Õp»PZdçiv²ÆF¹¸s'ü ;yª¥´X… oÛÎ,CÃg¦-oš1C,f96Üçnÿ¸Çt v(õrgj=‚¾Ëø_é.½5Ò%}b“e¿oà™ÑÉd0tAHtžÚáq;½k·ê˜s[씂­›pü¹ŒOœà°¦Õ:z/_«W»ÝH›CFuš>g^·›Ÿú× <“™Ò¼ÜðÍ$×”ƒ:÷æªxì`²/’/Ò¬Ù_¨¦9áôýÚsÃ"x­ºŸ Nk$§Ø¼·]ô²w™@±1¸Àðó ö›ˆXíü¡9ÍÆï43uæ‰ 2ô¶žPFGáÊA¼f»qw]áydõÈ4EõÁžÂ”ÂÝkJ"5ÛIàÚE¹´[9UÙc£Л¸Êè¹wBQ°$ŒÍïoâ¶™ß !6¨ñ"tS) õ"`)%Ž:†Ô–Õ¹"8DñŸ R²Ø"††Cõ8–2LœÙfÀ%œæ´Ê„·TZËŽ§x¹/«?«³v–ZbN¦:°d¸¦H„|6*£rz@)ç©¡ ‡òr`™úÔ8qÞLTÈñ.:V`Z%§³ -™×®¸ocûµ k¿®N~¯¥oV>£ÕÖ¨) *Ü#H¯×>· €«·ZÊë“È'Ù[ÎfK&v¯,Iñâ¦Ïgƒâ6„^Ð'cQRm\Á½ úh¬™ñÁZéı kpG VOXq6Úb_˜v60¤©Ä6p”ÑDlzp}ØCòáÎjß¡©1n5 V ê‚“ó8È*]^ciCÆÎ>ÛÐìá'lîôáEå£`hÒ©!òǰ魥äŸ4E¿z“­KÁ{T ¬»éÈcÛ‰¹p9*^¯´Å¶¾-AíÓð¤í/¥9ûoñ³.aL»öñޤhxtÀ¯C'àÎŒd·ŸœÖ¬õ<µî'U.;˜ÙÓöŽ>ÁÙà õš™+ÖWŽúNÌÝY-صïçÇ>QuJ 5L7D¨ÏÚÕi"OAäJ×â²Á!¢ë4ã•~¦@¬®nšŽ!l9»¢Ë\ÖÏyŽKêµ-¼u¹to­, ¡7ݰUœº<á5 É ]—.;:SÖ¦î¼>â‘ñö]¸ˆ3J^èö³[˜ÅH ñÛ9@$nk¢zÖ7AÈ^ûñmµ¸ÂOük2«¼2¹áOÅŽCþÚTCz(L‡s[à&¶k_LÊ6g•¯d£X÷± ´×\ûÁ,óΦ§>^´QA\rÛ¦šØW6—¸y¿‘,ŸX¾ÇP؇.´ïnNú¥9Ûadø/¥Œ·‘ ´þŽêÛ[í,ÛOØË‚l(µ]Yýüäc2SË£UªL•¨Ë‘ ¤—ΗP®…ý§¢4nc0±8ÏU:YÞ´œQ¤é2+Öm+zŸ-k«P”ƒrnmwÁ¯»Ný²ónÝ ·—yªp Ê%Ù¤áš3Õ\Ó%œšÏȾܶ± _iˆÔÉM½ˆwÈ¡V eÀ³eo0šŒÿ£„!Ž„Äš Á×ôžßûg~J´ÑÊÙ+Leûr=A¢ŠM1£j2×8ì:+ÍÈìeâþTñò©Dk`KÉþFö³zûë¹¾·ßÅßàÃê>×!ÆŽØj²“ýŒÉ"Ô¶­~"o1.®Þ¯Â?wUé ÙÖzLð%pMïÜŒ20mÜœDê¼!œ#»|G_ U¦‡àݽ>™aCn @Ý•® ÞëÓÛâ6ße›ÅªíÊìjã¾!YS†Ä¯¾åFÆœkœòM†ñ5IîÞeoŽÉê;v1ö r{ N|`ÁŸ1‡¦ß¿5¯¶`Ó®_ÒñüÃîÄ‹4~=l#¾Bœïom\©.¸cBÈñ°Âº£¹¾IiÃïäwêÛÃÕ­»v¼cģ̗³à¼øiÐc)˜ÛÕ¦<ÿBó[S9u²C|ë‚Õœ¶œ[¾J¡½c—yªeDñg‹ÑºS![g¹Æ¨k®É¥šTI°._ëÈ9سÏ-¥½çŠï§øcˆ(’’æÂ|â³1ý>ÓP—¡¸ÊŸ^7§cµ`0-⦢ÜðïÎ-Á¡ÃÚ‡È=[ö:Õ!$˜µjùXŸwöÁ_žàÅžò0Ûî*¯à!¿$Ô|ÍXµ+§ys?í§n ›w¼|‚§s7€eaP‘A눖:´ƒcæv™J“å¾/!¢úŠÙäN¼'ïÒ@Wòuˆ¾f6¹;žåê}¶–{•tàN=Øy ?Þ:*ËàyöS(Fžffƒ}6—;LÒìÇGñj—õðDëRœ¦'ýûÛÛÔéêª\Y¯oþðO‹³ãdâd†RëbNËÒ°L.Â@¦h ¶| nFKÛt %[¾8ºáì‚OŒÒ˜®6*׉å,ésÚšÖþ¹fC_ݾè'ÿu§£afÊÇv•EÑЬÈI*AU}³­5eþ*Œ¤@tAŽçÀ០ÒeùÃ_ö‰ãé'ö¹rj6 …ä/š}…ÄYF‡žµ+uF4äeÄ›vóŽ„6#Ó–¼Òn¯ì8|U´ƒ0¬-LZÏÍË9õ nÌ”~}Öûd, k|YöÁóI‰É˜ÅÒ¸{ßt~¸)Y”Sa(,&_XÀË5ƒzyœú‘ ƒþž!öL¦Ku%X÷ÎnÙay©M(ÿ¢Ïò4ïo{¢qÔ¥*¿4A›¿Óí Sdî×ü¨Öt ¡êÀûM~†ÈÍÍäsígÆß¡ü˜-;g_¹Ú÷ÿŒ²˜'ÿeñŸ {;ãIÈ>÷8^%šŽÞÿíù k‘k1K2b-æ©c-æÙÿ»4O&ÿ k1Ÿø{äåÿx“ï¦!ü$úî‚\&µ:yœà;v (Œ°Þ ¿s0—ôˆ \…ðƒ†móþ†n Ñe2Î0å\‡…P¢î7üº0{´=îSÛÙüLl÷|c4"l·T7®6¡M/¡ ù0wl÷-‡)ísaŸ8» 8éz°syu‘kÙP{LßMŸ‡H¾Ðõ(LpfmkÓÞŸ ¾¤iÊ_I}uLçfc×&𖙆&óеJ‰¾gØêÉ™Jö‡û “¢Øb‰/éÏþ½H—ܦ÷2CI/—&_c¾hõ;Ÿ|‰{<‘T®Bò­[ØÁavZ4sÜcé¹HÓþ-uïZl?4J`*q»YûÕ…ì×þ0ØgÒw/Œœå¶ï*ÅÆÀ…P?¬èwšUF3UïÐÀY‡v0à"CZ‚ÿΫÄEtÿè^ 5“ß×§ãu}PÙ® Çæ£·wôÀÔ¿ZÆÁbò­Öså–«›WJv¨);œ¼œ¸¡ÓÆžú€‰tr!Ä,q›¿»ªÝ'^GFÄPóûäÉÐ2¿¤/iÏqøh ¿œ(X£ÃÝ*Õ™ÀsP[Ú³þ<ÇvøgõŽá`ÐÆ€ mÍŠ4C°0d ÈLGC¥{k(™b»±B¦Îf-O‡8öyÔn-ëGf›Ä’ر¹eƒFçÇ ­Âa¹®PÚ|ò•ÇxX¡ç‚ãɦÎg¸ËÃ9½Éøñµ ±yAWFLJ•M'ñ¯•- µ=˜9<Ä;ySabFÔ¬îë£!btú佃sÊKxÏ”jîî§6“ÕW}#—ý×¼Øñiüº.{?^ɽâ Áç~ê²û¯}Ñ;B9y[ÀËsXJŸ­±Òžÿ õÌYñæÈlrøvjZ½ÛçŽÐ“Û£  õ~§ƒ!æÜ‘‚ækè1Ï‘#µk9Þ;(¤Qux)-²­Jcý_â•oîßÇù7*õ#«ûCÄïJK¯àªù± @öœe›C#d‚‰üÔõ1î\Τ`b)G[õ¤mJ]….[/U<ÖÚixŒ…G†îK½CC%KÙ±2±5®£Qt@3ÒKÃZ߈]e+&Ó¡ÿ& „eºâär3 ù/VvÕì@O_À~¥(–[J½W}L®t×£(Ui¼Ž|†–Œñ¹&- %Å þ„Kè¹9ïÇÖæ/³êe9ŠH*ÐLìàšÞ Öl•ª–à½ZÜ—5 Ú{HŽ©å*¦Ö3ËEOd ÙÍ1Å{ÒϨÜ0ÛÊ| á¡Øødõ?§d°b?^j"ß(Ÿkj!HÊyuªWÑË?Ç„¢lªÌ…¤ÎŠqõ)„eÙºÙÉm~~fí[æÊ„LAìÐÍ(GN®}ÅÜT'/±ä¸>ç¯)Ç•åì"¾£z=£7úçÁZN“êÑvÂ33¿)nZmªÉ*ƒ5sÒd”…rþ9XwW?<§—Ëtá¹FÅ>Nìãè‡)}ö>yÕÞžNoRÏ.K@š5»”ÉÚ3 a˜=dJp¦Þ“.œé´z{–¹ èÄäÁ$,¯˜ˆe°Óv.å¡dJ ‘ûÉ=?x»7~i{)ôjÁˆguE9¤”‹Ži»ê×. ÜìÓèøí{ AËÖ(ÝPtgF-S£‹¸%eûÐ×®Á¬D×Lá^QžòK_„ÈÿƒI<‹0ó–A8½.¸©peV½º¦ø"ÕÄ-Ùé¸Öªgïü&™Û¦. ²ÅŽ$(%B¾ µ9O¸ly©²U7õõ5YÊí¤ØMÉšÙǰŒò¼ýˆ%CxíågüÃÞû£ÒKÒ*Z&Ùw›kk>öaS¤Vöœÿþâ üà˜¤) qƂӷQ37iŒþ¾2©®†­ïüè» x³o¦W:ë×3þ*¨+"詳˜±‰ÏSûSÔÝXü´ ¤ÈªÇw¶]e4aœÈÆ«JŸ@”T[E~“~ôÚ‡b¶U½ÂûtA³có!Û™Þ浓ÃhâÎ^}±×*¹ë8¯tþõ½oçÑqAÃ8öZ…¦£áíxŠC[sšõL²uýk=RÀ‘ìEpnrúÒOD`'ú;@.D7Ì7yÔò“ °v‰¦b+­BuÊŽ Nǃöàî¡Ô¼ÐþôïÇ,ô& Ë4’ùa&fÄ3ih(EN©Ï·hJ–PñÿC2n(«O$:,+7Cþ”¹bºô,§N«5xb¦VœÛ÷&:œir×eóPälÛ¬ïÀÎ.CìhÜß,ïÒæ $³Iù‘z"5A«^¶Y¼‡nvÇ%ÍóG½ «—u·ôQ†sù~|¤÷ôÀ& gSæì¼¨ØKÓ—‹g·˜6ü`~œ7è ›/z&àU£êñF ¿X”*åºg‘›Yˆ´ÜlŸŠ Ó1愈tiˆääÂ!@kqå­‡`D0xb¬Q^W£Gƒ>¬œcvÖú”Þ¢@“@«¾–fÍ!iÚ£±$‰íÄ›æ #<‹BúZ>Éó$¤¡!y½9!,ÃsdŽž.Þ*ÃÇ;gšÓ:ÝØmç…AXIÞF>ÞËZþçí)U§s]TËs³ôÏ'ËêãÙ¶”!¡ —Ç™ùù)W{Ñ`~ED¸ög>JoÍ)W‹ }‘Á<nÖSKŠT½=Î;ÍQè“Gº^LxÔiw D3;‹«ö|$yA½‡¤ ÀLNrŠò¿”·F=CTV‰tæÁr§_2^n¤¦f;] ›¯G…ŠSg·Õ»Ø6©§®š…™6ÍH9ñrݽ›Á˜˜™Üš†ÈâÚâ†n“{Ï©Aߘ8:¡l^)€Nl_‰˜¥¼"ée¢~Òv¸|¢,à¨p°hcªÉ˜m'vâ>>GŸÌ+ŽÜ´Üés;5€ñþ*¥Z ¬‚|ü£™V™O›ÑVÙÍ HZIXR LƒÚS±áàÕck7ï‚×7 0i¶ àØ>IšœùWí:õ¬hB.¤CN>o— ShKT{‚T¦ÑíÈ/îÕë¦÷@7B¡ë•{LH^š({…=¯§¾ZOö0çø]‰s¸æw¦/*»Ø§eà-æÊÊ’¼ xúZŒ.ö¬xÒR¸ê²?¡@ÖË£Yæ &£bý£„ëÉ>}>û>l˜þ(Stù&.`͸†MÀ]’¥|®¼Æx”T<¤o÷«¦@ô9ÓÞÃ5Ov݃n"ǧ3A>Ï?€kš¯„Uáfa÷K ¼YbcUè–)‡†]mh…_Ï}Ó’6õñªý^ &ì9Óû$Ñ™•KT{Ä>ÏUåeê´ší°ml“ €6Õ~TŠêõ…iˆvÀI4Õ=ô™·Hî°!P÷¨LÎщKMxS`çž{Ä,zåL9äÁF°S™0/ãcä È9Ý*:fûh~VâØõègA²Æý`öÖÃ7ÎMŸÃˆø×D!)g¦ºÌË»7§±œ6©²·¤ÂÞ·_*å Éä,û-0΋(èhZÒA2çzúv ’§Å¸)ŠˆùÃðkN–Ÿ(R·@MΪÛ2%ƒŠÄ¤õ³eu= [ ÅKd$oÕv4ÍÔ¬ÚIåg<¯î¡Q¨!hø™Þ#Îó{ï¨T.4%¡c?,^˜/å<{fŒêS‰ Óž‘öV.!ù†‘$(MsÁ®$"5ˆDñå•`”ö«a,FÃ¥UØ~ÂG¡N/ÃF äLæÙ¹'aHuàr°±R…·­ódgË• _Äz°DYò6à*ïÇ¢ù F8ˆ˜8@Ô.U‹?úÅAkùm9„וÓX³¨M@WÚâÔY£Û<ǧ}%‡ˆçD°pŽÞØÛ®<ëJ&6ù~®? Iig²m¤âŠ)ÇnÔ¶=ù¢Úi™½™UÞwDÖßaå`6ö‰µN€­¹•i*ëem[3ê¶) ¨‡¤3‹2«01Š ´À«`£JÒV‚ö ¨¥!Ý]íÿÅu•AñÉ ÿÌÏל3yÕ x‰l´Qe¾BqAùε$ê~ZMðè¬zBhŠqë†ÆbËÕÇ‚lœ©'"Ñà§2Ž™l¯žÝ•^KÚ¨VÍOâ}f™bל,NU‰MÙø‘ʆŽH“cgüƒAáWlx$®lÓ¡6cÂÈ’5„ o®}‹]Þ@ÅïqlWŸ9î )ш o®=“æMvƒ ¾ëOéc¡yJ²äúÆÝJW ÿÎf’TJ»MPHJÃ#¼ß›£z¡¥š•Þ Õ _¼R°Cˆƒ5­0XW'œÙüÊo&sô6p˜$+L¤j9´Iž >Ko| ÃüÔ41¤Ío ~ÚõØözEpM†Æ€S–WîëãX[_…çZ™ýMs…IMs†ã©¥-õ9}‰<håÊî{%‡·t"C–¢·xø_".‡4­åï –”ƒX—T7p¦P¥ºŠÓhp,Y¢ÛéÓ…¨ U*Ϥ9Œ´0\Ö¦ÅÖ—lÄ# Ð+«õØTxÇ­››Ê©õ9]±%Ç…îêLËõ'!Rœ7ÓkZV”?õu-Èxÿœò”,$¹ú3]䕽 !råõsΆ«>šÏµÚš[¤î]sʬ»Wû2x…Ÿ5|‹29Œ…øh/e”å…Ôî¯5™½I~ë~hÜä3;k[àNó©’‡9¥ý°Òz$Dj¼–â%bwæŽj¯ƒÀŸ))ì Ýšä‡FCŠŸo?©v_¡"k&É¢±Å®ûTaPá-Xæ8=*¶n!sG?ãÍü3n‡ Ðukä–àÃuu°)E{¶ú¹Á[Ð[œæ?í'·8žru¾A·k¯Õ®”Éf–¨¡½¦ƒ`î®òzÉ,­®>&OBZsÊ.V&l51!;‚“@ÒVOvI »É¤ú‹µ„O©œCJå*yLç•ô¼µ00I`ã9À.Æ",Þ°‹P3sgeË?Ù>®BÅ{¦Ä,)öˆÆn»R^Šx€Åµ‡!òMôýOE…$3b¼³ØzbW%ɤ{:OM@Ša±ïé¤h0e§ï» Ô××í±”lØ:¦˜Ù‡ùôÙ†L–çpS&šà÷·Ãk§M¤H‰¦” sTR {nÈW°íí1+Íi^s®®!Uo[¡Ð8Azòu!o¹|Îe[f<-íróu¢è¼WSIËDh=ÖTKB½‡kË'suåÍ0ÒÅ¡ÑÖ¨/´Ù¦Ýþ½¶ ¸Å)zƒ=û!;¹¦ãRÒ˜M”;JìLYsV3 §<ÏŸ>%â虇uµÙ0VÈšß(íĤ²c™’›?Çeåloð9”f;éC:•ŸÆ•‡2ľwx„©JB ïìNa1Ùðõˆ¤¼O€9û5¾¯—.-¿^´«û¼¶ƒôU¹æª¹ÎìK>Þ×tÓ šÎ^æÇÄŠA7·× “MàSÓÝ÷ù-¢Gð“fŸÜç4HòÉBUUMŽÝ—–Ó«ŽˆP˜`•ÔK-Ȉ‘S–¹vkÀ(Ò'Ì4 •_ØçpÚ 0î.ótƒ =CY±þôÆáqó:Œo²\æÅtãò…µËU˜‡•êûºaãÆá±N“XxYm)}ÉÂ0²D¸WEàgQ\^<탣6Ít:9\ß_øÉ|àëÉi:¥©ó½Ê- î¥ùôTo)WÍÍóÌÔt=‡"¨ÏôqߘØud»acfe{J³ëlÙ(-×9wv+ÕÕ¦wþ†Ë$0,S¡£mŽõ†󬡛cƒ^O÷{Éa{_ˆ,Ë]²P醹™«úI;&×;h=†yD’tQn¨ã”YÁÚ‡XŒ®€T-G¬æ!öŸÓÙZEDv;§˜%‘4D¨1ÖlEÍðÙ—½k<‹Fœò ì<64’c2±%‚QC(€·©Û‹ã‚møŽŸ#“Áü^eÚ¾LÆgnæCä-Hš•qÛ”•^7‘ssÄldý’±]3¦¢yïZ•d°]iŽd[›lÇ5 ÷Æ‹Áv‰ù×JJ «QÎõ¯4îjÿ—®ìÕq‘zƒk—wöÕ…?‰/LŒM"æe”Nv›²Ì£½fËDwfʪÍ¿~,uRí¼B)Ú‘´4Åõñ)W¶ï#>~q•¥ëÇfRìN\·s$[ý[Ö¿ÉÆ8ñzá§eÛI´¹«ØYã‚[î #ü¨<˸äŹaSMÄ+6oÁ&ÁªdÐ^ }%LOÐ'2¾ï-Ôò¥¬7¨ÖA:“•ªÉ­±bÊ93ƒeošÉð Ÿ=Ë¡Øèb"°9[áŠñ|j—íú°’žsåq6õ_æAÉ´Ä=[4WXÏÉi< >™ú”¤‰4uYÉïq'Ú@ºÄH¿Rò¾­~"1.¡&W{FœÐDòA&;rò2Tç)òWwbOª‡ûÖÊ ø‚<¥’e¨'òwHöWδƒ_ȲZ°ËL°¹¡P“ Mä!]CÒ½¯C,’±­Ì®Ô);»Õsž5‡©Ðç°Æ8§œ8À7E‘ÃyP§s·zÙ1£tH…Ø…V_Ô‚V7ÐÕ_)·×lDÊâè)t±Îa·‰´©Jb³™$© •Ëc K§;S¦øþK§Óôßt:ýßúƒúá9S§×Žx…†¤Êûþ/Ïô/ÝMSënšÅî¦ùÿ»4-æyñŸº›rg’Åêÿѧ5dx˜B±ÑÁ3Üò¡J/¹ÛU*Ê(i÷íæH?#åUJ™?‚õÓ}ÖÐ¥Ihl¼O&OṮù¬™—?*‹˜“ô@õÞÛþQQ±1|â¡øtÀ©M©¾¹ "¦¤çc_úN-0“šì• `w·É,ø.—0]•iµdRÕlîÄ6å41«;™‘¦¯^©9–\Áó™Tu¹î¤ËbÀ¤·Íâb°Á+@™ú–¬—“ZÊ…Š}†_=Ä€¾|‰=î8Ú–uy÷þñ_X:´,³¨Éúçs²kC×>·"×öÒQ…õÉZ ë•ó:è½4\²~¶ØgOoª+|¾­å廸¼©@ŠÞJ‹£­³h¯ ܆ϵ’‚”>+ìà®LLß6ÉbCHoÕ`„Xj»b~FL>k>¹›õÓfyÙÇL ʼðÎõl˜ŸðÝè“& ’ÿƒ^%o]ƒéà¡|yǜŢeúîÂè´$ºlÎ&}|ŠF܆„÷R÷|€Š'.c!|].æÌ¡u›}ö#ל”ÇÉ"Ì̃ø»Ÿ?ÌslX ©ÍŒ¹y‚ûM¥\> š+¼˜žtï}P÷Ì2ÄáÇm·P5βJŸÍµ[½óe{~úÐ}‡ò-¿E„|Ü;6ºÒÿÄð3zˆ&xgrÔúWÚl8ïØÉI²…51˳Zw[›âdˆò“̟鱆éføî“»úu°¡ñL¹µÊMÄusIÎþªå=™ìùb¡L<=†£f‹ÙN.°2X͇$Eˆ0:mŒA—&¡%L;%c`€[ÍȢݗÐ`Ø…Ò£•—ô †·$ja‡É4¯Âä¨1æÜ»¦X\Ñðx’4­IB`òÓ25ƒ¶¥Aÿœ–AË÷afAÞrL®%ví½K@¦–Š‹ËÔÃ1™¥ð«˜oöпñ­¤”Z´”Æ”ûkmN£L&gÒ'¬ÞòW{YœÂ©èÚ÷‹g7=õ»ã»2àiyè.v•€1$Ã5±I_G‰þ˜š ;_±@š´’*Kqçè³·£\XzÍ··«Ó·ý«öì¦5Ɉ 3´A;°%­Ê±Ë=Ë W–þ´›U0pó²jÑù, ÉŠ!޳b( õ‘©@¾7ÍFêÀµÜð0ÙËÔ-ÌP±×d™}L}PŸÆ{Ó^6دý$[‰x®P†ÊAåägõà±Ô)ñ*Öw¯°Í«êƒ<õ6ùñнê#˜õÒ¥vðßëYïÒìãYævoâI=ï®}úÅV~ñ½ tÏŽ °å’Œ@ÚŒ¬ð“­ *jëÜ­XkŠÚ[©|Q›ü¦ž¼Ì¸Ñ½ éòN¤Î=Õ8aÅÂâ£ù/Æ(ºx´[K`6Jø>­®ä¶¿öñ¸4ö…¹€ä#«5|áËbþ/±[b°–c³ÑgaúwW’]¶ CS4ç,/`íg_Æ•$%4Yb[ít¸½›˜ìl=­?ÌN}×étå ÿyîСe=îxÞ)J=­Lk"غ÷jW4 Ù‡ôÂC}šÒw4_ƒ]rÈråý{æzØÛšÓ†Ÿ-F™ä,·ú?íîû?\µõ|LCs8ßmºsa–¼é.Ü/I‡ñ>VZ\šõN#ÄÝ“í\`FW¦Ó²û8#l/­˜¥ƒ5Þž3ad®•Mwøe1}9[¨ŠPŽYÉq¥—/ }š5‹#™«švù˜È¶»1&$hhS¯†îBZaXÝ|êFZÚWïà^$6ló€+èZжclè €ÝÀÄvp¶Aóz§v«˜è†_a´Ò°hïSÖ4wWRÏ]ˆüôÚ…Hv›–ÏT÷¿ù‚£Šì<å‚CZ…éçíÜüCzåÕÝñLóSUPÙÅŸ|ÏÇq/êú-à[Ã컿øyËz˜Á!ËäÕjûyˆ” ¹n$=œÑ0¹SaË“µ$Ûôa¬ˆ üû£Âš5|ä—Ñ1ÃØDXåvø¶æÀ鵬?³rï˜Úáòpu:ªË €ßæ™:îÖSól¢Ò)TRgmø^mjßî j ܰ,šê¹¢^¾û±)|x$"ñB?å½4N£‡ˆ–DuíäÕZú—ñ¹·ˆUK‚jw)+U ²†i£zV¾2fꌚzlz:sËÌ»ˆÂ¸ZœûÎt»¤-íÛ,ÜÚÖˆþ¨S/CwÖ“Ò™Ü0oŸ)cÊ+Ô|Ÿmh½P¥BýÏâBûäR¾öü¡Õlå å¡W1òÏJQàMIæWŸÝÁšãtò92ø†ù%]Ãpù˜Öç´QK†Ü7å†T‰õ†Ëáüèømó`dœl]mÆŠ^œªÂR?”3+‹,Dp¡åÚ§qóª4Éç_²miâËRÕ@l ðõ z‰+a“+îÊ;"DhbWÎUpÙíá›ÍMí”ù!Œ„e¼hÌÖžü£L`—ß ‚*ßjŸ)h_ìŽÝ Ç)³‡·$Uɳ ò?0bIþc\P´:Ð{«€èSØ&Vy,ô±t_ÝD@sB‚8IJ­rÄ*<ê*Z÷ÁüMOá^нÈ%ÂRmºø¾–ýËO”GK‹ƒ%²Ayãç}÷ZÐõHm¿hkuö¶SºÆÝ%%.lÍ^É!qxí³ hF›Â‘ácQ¤¶…žßà5IÂÜ%²’EŸvDHÇ,ÄFûd²Weƒ¢ûk·Žfã‚>¹ÄPïæQ¼:áñ×woóGïå¡åÂZO½=CÎ ›¼¡îvmgzB¯rs3XLølõšT¯%A=‹:Ä’î…HìÍSo2Ï ÎôîBŅd^.§®0n³iñùí}YYL½j1ÿ `ÊX†}ÏÉä“ú´ò«ïD8»TÍïRü»¾ ¾YâŸ?fý'ã9Ö¯›ƒ´m0J.$ÐuS‘]Y‘çÆÔ­| Í3÷ñP]ÆLÎjšUù6/ï7Sõ½Q$~UE,Í_:ÉðÔ.Ñ™‘w³êaù÷éâ³WÞ».ëâ„gˆSsÉ© 6U2í¶}ïòç.å˜/¶º¥{ï(7n íã Y­Ú$¢÷ˆ… ¿â~ÝÙ*0ã® é°Úë§JîÒ%aI™çukF—ì±¥U?=æqŸ5›a„È¿âE[ÜG–M±Ýä7áüD2V((!‰D/©#¾rÐG¥œˆÒ»N—§’££’iÎunÝõ§bA(,!à¶µ¹Wr«îkµß¾Ð¦º á-ÐΓ7Õ—ÝÚ.Òøî îÇí$½RdÝxk:}p¯3•þŠ3v.¦ÿñZWªí«ú)‘çyˆU[6 Í*¼”OßUçÊÑkeS΄˜É‰‰ißV?»ó\¾9 $öŽ¼æ¹¬¯c¨ÿÚxc"[T­ÄäèAøùó[úcÊkå; erødm Ã&Gœ‚÷×F†)ðz‘/·F¦œ_ †à`DÙù^ÉxøX³šC?’Ecn"#Iž•Lõ®m¿¸tbpÁ¼:ï=„lrþ”%oK¦`w?#‘(¿¤\»­âS?k˜Xú7ˆ‰½I+×Û¡ñÍI? N˜«€¶X3TȦ™ãƒüU Ü[ÃñeÌ(7tî†Ñëz Œ !ùF€¹Û‘BHŒÍ˜ÓO”Ƙ.¯˜#-n~¨„bsÛ$/›  a ñ2ˆð ášËðï}cPƒùOcVo–G½A‹³QAâ<’ÂÂW©¶pü·mÑPô‡6ÌÀ3`G*¾ÌÿžwÁzˆ'=)8G¶Ñ[zj¡¬?3òj6—ÇÖ ò'¦›ša7Ålsyù”6¾›Ãó `ý“f¹ã”Eê6› Þ¨ðÕ,A:&®¯ëO ZŽHHËþÑ©'×^.TöÆÏ-‘´ý=c&¨\€5Ä(gþh“1Cë I´MõC¿ë‹ž¸\%•‚pÉ5*f³^«ÖÏâs)\ Ö¤BòX#â 9úÊòW­¤?øWž>¾àq³VÆ×^²9è´PCˆØÆÎÍjÍwtõöœR“…ˆ‹$nÒéänà¡ÌC9Ö²ãÝÝZZ¢£oßXጠ%Ï’"š7 Àœ°Ë9·}óV3hlî8iÕAÕt‹;Ò$©­ H¶ 7ç²ÏÔIÏA+Ü×Õ?oâ½1NÚzNJ9…úG¯¤›SÔX§¨Œ åV·ãPu°z½Ç~¿MÄ4G*ýbXžfŒ¼×AÃü‚•é÷6·+;º¶Þ™hGPRXÈjªÊ#:Lµ5/z0‚ü·ЕT7ß]èþ›L° Žþ LRulx teÔþZÜZp¼bQ‰™€Úº¯á‘h—cQpªSÊ×¾× ×à)´2õíäåAí>æÞõ´ÇÓûr ‡ü®trõl0HÁ€V°•‹ñéðn½HóNAVÁÄ$»6`ªŠ|žx8¬s sÑaÁ)á”ìW}˜ýQó²9™4ßГͿÈé+%™í¤ÚU %+‘*ä°òWW7Iì™ìzÃu¦ƒVÜçá£v¹ÞR&MÚˆ&™…©é/èäN²’@E[Yò¨îÿJžrûÞ•7?•Ø’å5·\–©<™@¯¢‘ÿó“­c–R›~=/³”¯žf6É‹Ùÿ«/¥ÓUP=ÿà¥×Îd€â±sÂ{/ƒÏ ëžûîO~¤ËËÇ5>XÈ2Þ?ì¼ FÔS驎Æd2æ6™™P2 ‡åª*ØE‹æ@V›züøƒgÑÏ™R ± oÕTž-Ž>ó‡¾V¡‡M0›ýeŒ 9êr:†8t™Z·dɆŒ£²bÌ˯,Ô¶y‘+ïó“4Œ*x‰\¨Öÿ\rŒgZ”ʸsTFb_K–hs”Ôµ^*öìë ¦&]ˆÁ¶ÑÆ€§™z¹KG¬xŽ ì|&RûÀãôi[æc1_LˆYn»Í¹’Œs)¼ ÄOËåm{t±ë´ä5K›å“ëBYDrôcU¯VÕȰ§ôiÖ÷õPÙ¾¹Ûª¤ãgtM¸-¿{sT ˜â åì†âÑXÖ`.—g¿pa âa3t¸{, À¦÷?ì{ȪSe—á÷g¾«G–=ý"²®ì>ɇ3õ$³® -üñ—‰«R”¦„ÿ\ÓÇÙZ“fd+}ŸðÏ csø8*SÔlYzä:ü V"A}fù8¡ÍµŸ4Á9Ûþù¬ìŸ¹Ý¤û½#DÄ,k­S¹z æ¾D£FĬ—vpDt§“GÒ»I¾kí£»?)ÑæOmƒ7íùE®S’Š~âÊrmŒmfþvß^˜‹íV4}¸ÌMp³b¡3ÖÎß!å–ÝfΕŸñÔ ¼ÚÈp”°4ñEs{®Õ"j”;zU^mÍŽK* ôÍâ&Ûcûñs $¬$Ý–8=—1U6Õe§Ãˆ /DšNN¬Ôßë;šá8ÂŽMA¨ÝäwJFVþ,Ä©”œu%ØÀš×O=ãöÈp¦Á‰(ëIܼ¿‹âýÍŒÛõÓü—ø¹j+àS'ÜzÉBåk>0]›šœ&»ƒñ3´å¶å×ïšnp$Lª@µ®¢®ó=¾QkÝt´=–[Eö²ÿüÙTYlOëÍŒ× YH¯b6‘‹X¥þ”!äìVf*Þ»•Ù÷MqñƒSÏÿ.Ü]J%lŒìJ°[Yòwf’nùÑ—`®dYQs-4Ã)7í;?k·æ°¦|¼Ñpá{ño4CÍœczf.Þ¿-³éE~V+æ›|¦&¸L2÷p€BæÔ1ìVWÚÑbŸ—±ÉDSž Ž«PçS3üÞã²ÓÈÐHÎ:Ò*îc„'Öõ˶RTL–ùc>SÜÁ¤ÛSòM"•ãM¼Œ‰ýc‰Gà_Ž6iM»‹1`A.ߥË óñ¡ìÓt8 •Ø\ïÆ9é¼eGU}ÑglÐwh3g.eù½ñæôRKN‹žC¤±š˜—kèüà›~ž»KiÐDò™À:Àšé ·f©j_øË>U¾Ü?¹5¯"Õ¥-û'.Æ/.nçoˆ´ýìß”¸“Ñb©Äɾ>Ú·Ef äM‚ÿ8~z;=¹ºz^é1}ÁqnÌð³Ïõù>²!­ CÏ‘ ¶ÉÌ;ºªýœBðá 펶ÍÁíõðó«öizôœ.o ßIìá¥êò†þ4Äé)w!ý].!·ô—™ÉGnL$ àÝ)© Ù› †ø¼(öÍõ” ¹çš¯—N¶…9Àv_PÁNë_¨ØêçÏ7É0Åæ&d¶)>Œ®žŸ”oŽ©ƒ6^4ÁñZ'ÒÉ(OÊü~ªè(ÝýJÁ6>9z×£V†Ý pIâìDwäFðÔ·€;Ž]Lpy¼ç®có¬rn *½e7n(ÓlRwÛ^˜ÈöxS3(ʽ».o2Qzk:n)T#;Â#¶Syy’7dö vFÍ—nUÏ%­J¤å÷þx0¾Pgâ°¹Áºòt¼ª¤›¯½l ü Âÿn"~ÂLÅö¸õl3e&}·Ëú9û "SÎ]| š¥†ûjÑŽuË)(JÀ‚m÷Ãù(!Ž&n†Åû=aDÿO-Ö$¤R¦]¿8y߯±ªä¾½Ð;ì§ìU­ àÅ7~b—:Y½O3àr­9?>Þ¤­¢) Á^÷ðžØ*CtÝÁwQB–vÚ­¸_ÍÆàÒi9êLøqÙ½Sa¦ÅÑÞ%tØ%)¬ïNG±^i— /Ž ’ûz±C(Ëìmuã÷ø[=g’¹/Ô½ƒk×sÒ˜µ ‘B·éŸCA&óµòri]3:U3ŧ¥Ug›af$Í^Ñ¡rÅ~Öu]!H½;(µ€Ï++§Fð¢vnؼ.P6¹´ŠT¾…Þ«Ö—Fpà £Aö­~gˆˆ@˜Juïó3/¤jÜ3hàÑÈñ¼;óhd°K!·™idóxî Ö@Ó€Ë_v!¼7“ù/’£7¦ô" 1ÿÓAÙÇjÕÕ5ÎEëý:ÜpŸ_ýë,gÔÀí÷Å>Ïn=ù¥ìq1íF§™ã Ê1ye˜ƒ”@o;³Çt;%‹¬Ä!ü5?gã¢GL‚)÷}…Qž‘‡»·ÿE¾•™éœa†¹!û×p"R0+Ï@ô£žä_·ÑRåãbþ,Ungucÿ ‘Nœ•ær-ö›Ûñ1ÃY2QhñÑ=ÓÐq&h°¬0ÙÊ[×ýjšÇcœÐO÷0É–2ÏPrœÞlü,ï¼½Cù‹ÉÅ pý+“®t²Ö0Hí?Œ+)Ýýx÷H1ÅœÚòØÍqù>×" ¢ù{}fD™=áRÏñÏa¥9ßG¯°)-ÅïûdûÃ$ï Í²íø(æ®þÁ¼àUKê¾d’ˆóÚ<,k,D‘ÊöþqL~ã{N …Ã;"$ÿcÿb¦È„5-üZã÷o‡|ã•7x”gÆùYG΄í%y)^ÈIÕŒ®Ïu²é<³/¿Ín¯îÊn“eCA#·±SPöÿxl÷оÁQÂl_³ÖnaP=@i‘p —.ËLÜ/sY¬ôqߌˆ»v-'vjôFˆ(ìºiƒ(’ï_ F1A ©ë 8Fq ZBCqâ¾»n¢Ù6ç—¤Ö¿ÍªÍ &ï}9âãÝžMÍP[™¹Û·¦¹¡jÜâì1¼ÏÌnÌ8\ÙOÃýì4¶4 A;M_™ BÁ›Ô²fdãkpñlÕã­ ÔÊÓ/¨d1ºeD„±Ã¶kn¦)Ïy<·gWˆ3ê’lö™”¡k‡X4w=´ø†ÔÇÞ7n›<@´AÑÎG!6üÌ>9Íu0“’q6} >¹#å¥PWN×?otƒ’þñèsWMHr¦¼‚IÍŽ(uÉî§5„K²Ä6 ê\ØŒ¨”0oe6¶~ªúÏž'ä·QwÄÞÙHPg/ý6 ¦çü›T^y„f~LÓ›7ãdºçvÉB¿ü,ºæ<Ç3G™3½urTÜЈ]#øÇGÐ3_ø¶¹"BŸc9ù‰Ÿÿ¨ŒSD(«‡l ‹'ßnT/¾yCòòµ˜O+{3âë<ã™(®C6JªKÞV»Ï†¦µ¶Ë€1!Ð{~©²AJ O,Ï”ýÊa“Vñ¦nŽÓelV—$™êh÷”½ðe ˜ù{R§¡Ë·t†£6¦|(Á8,Îu#UVZ³–&}û˜†)ÓB_|Ps¸'¡ÍKæyw²8²e¡‰½ÑGÓeŒ ”C'5¦Ô{¢­4É?[²¬la*¹§6Â|dˆ‹é1¹ ¥2ežüΧÈ*÷(v„c“¤kÐ'ÔÅm`ÛŲ{MmÍÜ”bÏjãD.™K’Wx!cu ”d{-î΂ڋ+{!’xÖÕ-óÁÇR†(!ÿ(“>)FÊcœê¡ìQÂeÿTc——®e3Û„z®ÍG&»7…ÔbÊþ~'áeƒ ξºÈ Òòék©º4#+4èÈŒ ¨1ýþ:ˆ`ꀉï#! ¥ÜqÜT·ñ¬ª!Ç*“'Îw!‰I}¹Û(û¶Õi¤9:øëùyÚ«O.íª†£;ä¢ãb8¨º˜?©y“•»—;í¾[¦êC”Aþ»}K*¦-O²~ÇMª;!œ‹Ã»Q¤ù Dƒýäsª=é ^ K\«âÍÑ¥ékl_áib/aªEÚ¤@³uNZ¨î^êº'²”¡a·`÷õæ•GUP[‘ŸMüx® ;¿þ\üUQ–g‘ÎÞWÃñ%¼ƒùÉÄìïW9eMvo×xçûÓô›—çׯ’QýËñ–‘΋M 0г%´þš#\s8X­3÷çœÇ¡µnL˜«¡¹Ë/9Æpx‹t0•#¯\Ý]YoÉÇ‚r+êj–^_ªdÞÕ»R6¡Âps™tÇuXì‘m‰=íïà‘Š?ô–¶ «ßÊþÜ_š¿×³kåÙmñ m-eK™àô—yϸ[Ó§Ë¿G¨D?Ãêé_x±ìlCm^Ì%ôáÖs‚GÀ¨Ø (ㆠ‡Ì†å!³,>>£ •i÷›ì5CØí‡ðr.kÆ:˜½[NRÉ23t³?U;ÅŦ‘Jî„Xyj§ßªKÓËÿŒ̳ƒ¼6Ÿ.õ ½Ig;9ýEˆ€2ûu‹Ú:DèÀÙ±å+~ëÏ™ÿJ#ä-óC²\ƒ f, Ì'*8ý—f³¤ÌþBpæÁ,ÿýÅaiñ.Äù?IºOÞº Ùk “ìÕ57½ÞQ?’ß™šÊOR—ºf"&¸Üë¼é÷‹·´w!’aÏϸ§ÜŸÕë'Ã+YÑœqƒ»ÛM¤IG‘§“ß1WnQµ?rU ad†-¶¿®©òÌýí;fÒ½°Tf—98ê¯"s!²ãcþ¼/žÿõ'žŒ²Y’HÑ}°/Q¥ÕK pùÊdÌl³Ý¾ø¸YÜN`Ú?±4Üœß{Ù®Sï"?µhÂG4‘o3û¦ÎMq[ùò­ …礹™Ü½—Çê%ÇBèÂï‘k,dtã)$(˜»ý]rYg4¯UòÒì„y‡h›)E \ûËïºí†§Y ÏVºñp¬R”òÌ<Ÿ¶rfu ¸DœQ©ˆ±+¯Žqk‰nnouf&ØOÿÅ©D£@ÎÆHæÍV®^òÛ•X¦LNâÔ{r¤£$ÐäÎ=ö|fiß q¶8ü| ]Ó3¤tKš£ôá‰8tÞah¥ÅÎæ0A$Z+c‘ƒ»×ê,„õÈÍÇ–ÒµPf5i^®}}‚¿zbΛ[îÙuç‹S˜|%<42ÊhùõÏ(ÀŽ_\vvø6–£,&ÊgÙ›`ÇŒ¬ôDY‚(»Ç·¥Î™î[;¶vôˆ#š’B룋§îz?95~ZÚü^‰qÎ|Œij’±©€H¬=wgKX5”á<:¿¼„ja±Öå»FÀ¾÷6^;÷³kãé´vúH¹ÿÄ„!™°•e1GU8p‚ru¬š̽wBÙ½÷;iŠs<ø­ƒ¥å|%Ž­ÈÆKN¤çˆGÄn®üüCy²g5œI|A;âšrÊ‹àÑÛðc‰%ã—ÕíY]´|rM')è 9ε)”nHíK›)Œøà™ŽÕA±Ž¬4G›>|["€¼ƒ·‹ yk•('wC,oÔ©ÇêgB#JF­™à‰¥T™å†w¾;©×„ZLêƒÕIü­ñSZTäfAëÔfî¹Îh¶ šÄº}ª¯kít,É5WïOÏÃU/ÙÆÄG$Œï—Ú Öw¦¼ÖVg—úqMˆ+;ñ|Ôp”ÂL¾r:YðNO¥y&.ÔÈA0‡ùj·k¦æJˆX.ÜHäô]û’ê¢çxZÌAŒPçîƒ+Ý8«×ã^c¼úÃ$yá \ ‚eÛµ7m{¯í8¡ÔÐݾÿdøÃ_fÁbñ2–à¶qÒ•ñ5óØ=¦²u‚ï–jk­.‰žX€›Ùó+Ò'ÝÂÇŠ€Ü©¹fý Xw¸gŠq1VFx„¯|íkš0"GIbÄï»÷Y£~›æüø!µ[ÞðËy¥Ðï “ñöX‡lo# ש£É ‡‘®ìR«.Åð÷¹_¼Ôw᮪Ü3ý88,˜CúÑΑjZºÔèÀûGú¦![[ÖÁðõ¡ó/÷µ¯}î”àõ•™í¢ÍëºjE™h:Z¥öü3aís/‡Õf¼¢Á±iùh/Zæ~¾k‹Ðj–ôÐS_ƒŸqrc4!ÂKjù #ÇXŒgª¯ºà׊+|åäƒcg×\Ôkök¶l³ý:\7õÌ÷Âb 3¾¨,O>éM3ç¶ÄkÎwº!¿Œ¤†²Q4{iˆñÏö!6s íÈ5ò€QñÌîù¾¼]ø¯ °ýòRÁ–÷’ƒæ:œÚé>þÁ{!2r‹º;!1Ζ·-&ôA «èÈU›ÚûAOXA{¿ç¦ðÀÒÛ£>ïBoÙ¥RŒ~]]œs;Üž_»½½„;ŠlÍ™îÔ~v[!Bñ…÷LîªØ ]DšbLl¦Ååõrˆôm2þD%(ô’ …éðÛÝÿ«‹ñ2õÈÕs³×¢@AøJlO¡ï|LÿÚ oV'~³ô‹‚¾|ƒ¡…€­HP™³W?ý­õeþC®jœ ¾ø£+Á¢†Ç‰ý {!ÒCXž?9Ä*¥=S~c­XNþâ€d¢hðÄÜíÌvšt˜«“ !Ò—A_RÎ\…ÎèÒ3æ.zîš |šËbfFÚ-L]–CˆÃxU´µ­>üsk!º0‹™k{³†ýMìž3LFKÂOwH*ä‰.™víBDè„8w‚øŽ–U0³°]ëbÛ«â2\Ú…lH»NØ÷û›<ˈ2`=~‘ìå”…‰6ŒàêFo4Õ¦•6a6^Rܯ-lóbëeé¸í‹Û²&¸ëhäî‰-¸¯J®Ô…蛀%³:¿ÎvÂó"н—Åý–ÐQrÿ¼Èº ëÅÓñXð×ÛpšVwvÑž§þ«ã]!/sÇŠÈÕÇ!Ò˜Ô4=²Ms/üS-_„d·ÐGŠÓÒÚHéwùKƒ|ŽcêAòŒí÷ÅoÙ¤äËMFkW¾n€ÿŠÀå¨ç§â¸%¦{zN•ÅÄ/3þ¿˜|¿‹?^aþuÌôs{½ÔËÆ,,ÞTõ‘ƒ åÝQƒÇ$®Bùö®p>D,±ZþäqP[x+†ÕqÑ™âi/þ"“Ã#Îtév&פº¸Æ@H¡‚V—Å?.¨‰k)ŽW`Dñ©Bªòq¾Ì•1‰v°w™5ÔPX̱ér,¼ìÚåOŽ‹ÕWßN@HôƱ=øM% 8ÛsA[×îUÐ; ÇÙÁ dâ ª ½Ct»æ¯T/dƒvª/‚ àûæu…‚M,lâ%ðAœ²Ð~}SÙ¾±YQª”õÊkªo-PWÏtàô.UoŒ }ÇGVCén ï ?º¬1 ¢¶YED–³wà’4ÐL }„ŸU´ÂßÐ1á•êVÍ #¶ºƒÓ/Nœñ‚ÔÌ“~¤Ýßl¨A;»¬K­5 õÚGëB¢Ò«öD&Þ9+çevðe‰¬EÑW{àééQµz£ TÙ¶4–>„Ö%:9Iq‚q=õ˜Š?CŽðÖ\wü©Ù«vËn~ª"×,+å¥ e]=ùy½ÚÙÍ'ë™7*D¼2 S:b Ò ·ÃÞJ&ëßU$¸3 Ý”™JÅÃä'¯ZÁz”µ8³ÂàÐÄÆg´wvTz ¤ÞާTv]½lR›¬m°ÿ•«3 ÙN0Ÿbˆu†‡ûʾÄ.9ö±^6¯ñFWزš<žì>Tì$£$QÇ3s VÏrÍ„‘(5¢vˆ“ׯÐFO*·qØétØe ¶Mf9Õµ`ÀŸfÕK}¤–ÏOúÕ £çpèžòEŽÉi«Va/aœYN²ÂÎÔ8»{ÉÀ;#U}Ãm:d ¹««CªrLù…0òåœÁ7IäPqZ:Ò(¶f~3h>Nƒ¡<6?ZCF4ø$§L5›dá|5'иM9}ŽyË…]v÷Tf©@×9&seÛ óŽhªÉù'ÕÉÎõ²þt{ÑÞ`â"¾›þ÷ñų)6Õn †$Ù·ÊCœÄ™Î¨ó_ËGgX¸0UDb¦Aò…tKy²0PÙâ#§êéí°µ¼ñ Rµñ[VŸxVĆ¥-3 TPB;ç,R‹Gh¯´5©­yþŒãòÈ ¬Ã°ës*}Ϧ³ùò#Vï\(Úg@U™ÌÙäCT‡Ý©:GØç8Tò7mÊLZŸ…‚÷SÔªù`øQ:´·öK,ÖÕ.¢U—J–ô$›è–'Õ™ïú)¯kyq`}bjç¦ðV?Åmèo-ÌC¢êã° –üõa8~mTn’.kÿ“ü*=ËÁ8x êþ¨x{c·œ@<Âì–? µ;¿8O½ ª&<2ý˜s–ËC Õ§˜i^š»Â‰>õrÏgì´ cFOÍo¼ÆŸ^57ê 8z è–DéÕVžy¥„äâufK…êÜè²|¶Š%rÛ[»‘öã©)Ťáô¦‚yPîÇà/¡Ì6¥¸;^Ú/Áƒ5ÒŽúœFü,y¿“ÕýËúQ[>„ »ÀÕöpãùǧö4ÉlÈ÷/åJ•Z0ÔöØeþûÐòæ?ŠÎœ¼´Ðõ[žéuáyÒa1íI9X›m¤´–é}ø¾.'£`kžîêGpYgÿ0ÿ7øƒÿVȯšÓ—;|!Ä‚8m9žé{¬uÒ¢,5$B‘“iÒ¢,MV þ$¡tHÂ,û_ L… Œ‰Í%>«~Y_dÂò§u|kßIýà^1Ïâ!aêŠ!WýF?z‘-5KI>ÈU¸°ELìÜL@Ù]dùYYu¦2¦¯vxüƒïè~µAi±›Ìï|0Ë3t•9ßÃÄôäÖÕhºä‹ª…${bf¾ª9 ÒºÒ-7Ãæ³0¦1s§ý-LÎÈ;L~YªýÞQ§ Ε®@[V7Oü2î"AïkÛã•ÂûН}¬ý…TIíûïÁ‰çUµŠ~'pÙa¸t4íÜr¦ä¿Ügõ˜é›t—ܾ§cº[ï5˜:]™ôÃ{î豆Cüõ½ŠM ‚,IÿáðÞ ì©B2¨!NéU,´ *\öÎDwålÜà^ þ™Ž^¦Ï8 nÅ»Þ ÒIè‰Ë[W“'ž´g£­ððÚ` ÃìÏ„˜*R-cv­tó>¸_…Ü~ÓíÑÛ—¢Û¡Ÿ*cÏŒ¸e¤í/E./‚dÖsJÿÝ[»Gq!g§Øã^òÝOÎìòÇb´W}Âg1A¹ûœ²ÙÔ~½­²»ÆÄÖû,ÌŸ=¯/’AòÈÉU³™¾SpÌsM7§˜dÏ)ö/ ;òº1Û/±ªeiDãmø§2—«ÉøÔß.g` ™ã´ê!2ɾm´5x‘Vªñ½Á‡+¡ž€Æ¥fcÏÔŠdö“‹zË@ošW]ÓÿèÜèé¹3+º-óEóåv¸¡S ^ì—˜0ftq‹·u ÿxM^‹rà Ä[¤ÿiõªs/ÆOd* áw/2ÏÌC¾­D÷ä‚¡ÊÔã‡1e­z­ZùŠÇ²„I ‡Yã…>ŸiVÌ«‰í€u1¼1'’1 ö¦EZÝÝÔ¿ñ˜ÒK¤Dòý¨šWž<¾ùÔ+håìËV%´vÌîºöæËœ¿«àÞZªö¢â?/·wÜ-ç$G/uaé §«ã0ÿ‰‘†‘‘öt ibß`iø[¦Bl OÝ¿b,ñø–Ëb q¯d0!Q¹S_`ål­PNËgqð­ãlÊ£ã9tù³}ĺ˜•4‡—;/Ë’m#dç,Œeºrú|¬—¡‚5‰J‰ÒÂ+uÐõyˆ-5…_(Dø,ÔÔ!Âé×cu€mØOdH蜇XÓf¼_†ØéP ¦KZ£$?áµ»K¦wâp Æ.C˜,UóId+˜Ú)˜¬„vÁwÙW”è¸牨”1ÝÞ{Öô§Å6¾¦›m†6ôo­?”ý7IÆÚÛr{G•zõâFâņWVžìt¦$”ÿLˆó’˜펆˜°"ÿ§±U˜‹“œûÓˆÀ’gl#qØD£z˜W$ØQ§ŒÔÐ[Û4%šcSJlŸ#¹šÃ!vú¼Bïs%B±öåv7æ§ák°ŸŒï“™[eˆž£·‚ª»¹å(¨ê”¢ÆL•Áôþ|ÒôwÊ©eßOîñÓ± cu§ofòív ,³:Óc»Y !hü¢=„:%µWDØ£ùÇû=jÙ…›ªL§–OJîD°×þIwIß–…ÈÃܦ0{¦M˜Ê …½ûÉË6Ô5Ü{Àüøƒ£^% ÛWF•6îøœÚçÛ(­qø¦«ކUÜÇ wC¬½¦ó—›Ú$¥U⦦Rl 2¶…J”4–½×O+·IÓˆFÊ”u¥)¯‘YIê1ÖÀ/ýÖƒ¤ö¶k(éÅ’û]Ü8.[Ø?Et@½^â7mÔQ'õ4CˆelõÖ~¹ü1ÖVò¹"“[]ì6kóôzö(Qœ@¸óÊ[¯Z¯65uf ]†¿Õ:ü·Ûkispô6èÅ7‘¹‘ŽƒŸ*³& \N/ÄaöJz[EåÜÉ]þMwÐ$Á*2Hú˜›:=lzÊ‹9øIO×þs´ÁôC&^C£äôoûݸhÄ.]Ç‘â÷üÇœSW`%dËl22³T?uø—©pÿ®ÎT‘UÈà>Êܾ‚ƒA݈"µÜõ‚¨Àì sá·~fV'‘ÿÌÙ[ôå¬[Qvè0ç÷€®•Sv+DÔŒÍM>#Ñ_é§mý±õ* ˜]Ê^AÁ`Ñ—dïã´¨¼··Ì‰ ªù.üÆýš:‚}6p²ÿѯJL*lº Ó.¦>µS¤/cÌÐÆ@Jæž+ßGßVöÔg²ržI¼Y?CìÚàÿ’—ôÛÉÄá¼¢×Òå[nšÕ’‚IIÖ\ׄwÜjRI?Y[òáäÚ¥&ËÚ=!ÂRVûÂ8]›8éüA^ëpöÇâlþ]X8N(}Ùõµš,[„bênÛvûG1_ÛŒ6¯ç¿ ¡Ç²Ôøš©ÉÎ} ধJQ4¤µu'ÌxYiö÷²„Þâ'»·Ýî ±ß… ”‰¨DIÇä]ÉE"w%ÚsÎ8šç£zú!–ß OøP{¶¢€ý³c­¬ ÅÔð÷~'ÈO)¯‹ðuÃýzµßÅf’´f£Kíú8gŸ/¶õ$Dúêü™6FÃÇ-+ðùhO ×e4†1xëáùx†}]¯­òž˜á"W!š®ÍDrØ ^^Àß}§©Nß0±‚]®9.ó#õE&”t°y%!ö °‡u„T)ñî±_T;þزžŸóL[úF‰Ÿæ$ƒeýêˆÖd·xE“ç!bnÚɯÝúÖìºÊðó‘b7/ìŠ÷«3ÀÀè•ù{îŽemãUâzVS³<µë§böX¢F ×µTRHy¨Vίh·Ò›0}—õH“‡ãš@ë%™\½` ’ü´/Øe'á“¥s20ÿ‚Cg¹¸KÓíð¼Òözri0nx³D™í;­ã»âœu{?¨›Ã¢ú>?>~53ö4=WÍ,w^î.œ˜¤!BLGCòØY[Ó’Ó’X†ã}ø§á6æåÙÊ-ì¸ä þ!k4øn¶Å?°+n2ýR(Ï·Øg¬þsvO$,ð<úhŠ¥“ò"˜§`æ°T€Ÿfa‘‹³ Å¥—º^ šÂÃòªïõf‰º!~ùråxôò¦!b!S¼´íkv¬¿éƒýÅr9Ò ®­‹¹ßÂäïC·e“=A ·L¬™æÄtL«´@V×nŒ‡½ã‰·}4 »»„y쯎iwêR+ž9~,õZñ;µæ£.+%Ñîùµùu?§£v[cÂEŠáÇ–f"9ˆ<Ùogehÿ«–ðte\›AãŸÍÆ8¯dÉGøDª)Ï® â^®GüEÇ0¡ÒyfþŸ›Ž›Ù'.ï`ú°ø_Kœ†Eñ[rËS@÷¶f`ãëøËç¿AM_Æ8´ë­Å`á$¢^„šƒg³c_Œ…öºözþ4ˆ×ìQØbèøVYEט¤KñãAEý$NTÙÖWÂèI57ÆW­ >p%žšJro‘üKmˆ}Oë¹üac¿åù›a‚‡ß5ûµÔy2(Ðm<—Q„ؼ ¿?ñ½/)¹íZ{nûf³Aú‡•ö¹q¥¹E=¬–g×uL aOÖL‘§(ã]&œÚÉQÕ¿>·PoªÅ§qÍ|tºv F] cˆ@%Y‡8_·—í%¨-¯„ÈV:É7kn .ª&pž€*³qæì© 6CòÈã5ShMM”š"#.¸ŠQ²Ìíëd…´ôàm?üÇœ4GL’uKYQL¥xÅ~åKR¯L3Üud‹æ6œ¢’o•§ã¤ßTÖ2=Ó™"°Á½<^%KkײVŽå 4E[¢í¬ › Z*‹1Ì*‹\ýÖváL ~¶auµ™¿‘;˜óvkÏ2>c¶oyöÔÚ¥äLôÎ)ß•/»ß¾æŽ¼yO¹°–b,‚WÃH‰~‘F軹0cy9®¤p<ˆ…'f#SXÒ¾¼öTÔëB¦ùòv6îç5¹/‡A¥Õ¹|`ÝŽØÍáøåÆ|†´_NeÀü43]vG^£|5ìÂãa8µ&½½8*›½Š}K’JPûNþºÉO(ABþ…ftYYˆn磯‡…—úMjAW<ª§Ç–òǺq'‘Ÿæ$_7ÌÈ–€y7v‰Ÿ±±‚¸¡ŒÓó•? *ãz@±·ÔW²gÎÝ„Á.X$oœ\>27Íu œYæÂµYµ±4Ç¿žj*‘zµ’T1,‰y3*Ì”ýæž…˜\?·”=¬¥1j9Ü\väÃÅ¥“œƒšŒÂN–"OâS…\Y†8§Ä»²Èj:„‘þ{È®ƒ´¥Œk$gþjÀ¨-ÍØ7¯¹y\§)Š ÙÓ‚öLŸÍ”„Ч;Ñh—½ŒÅÇo’c£Ú†­ú®ÇÌ\úîÔ¨Æ1ò°Äí7éá l£÷Ã4ÂÃ6€8"kÔ”ú5ÁŽ8*¥àŒÍ>ë'ŽtáÑþe»Âä”nk¼ÌÇøéµAüf<’_Ÿôûù¯‰>@„ÝVýæ‡Ñz’jU5Yr Ã,qp*Ñi*É`i¾ø\£ÓÅÓ:ÅAo.‡õDozN¿²;<烄½YOÿg$C©x}¨…¶Íªø‚&9¡Ái&3!-™kÆeH[ا¿»Jò§vè¾&rÞJE˜½²ý]³;Ä*0sÌ "“ºù€Ë˜½â Ž@+5 —³»®õ6n"к{M{ ÿ|ù½?Æ…q-«Jƒl|o!g{‚õw¤ÉKŸt&ÀÀˆˆ3©¨ÙÓÐ ¬U>0µnk°÷µ„ª˜ìT¿ðfB5@3¦nå¯y_`1[·ÍÜW…^›¹Ò÷Žë‰" ÂqöÚ°{*×(—F-Z¶‰ÀQäìúI=2î]ÉèÛ/«‡¿Üú4Öt)ºÊYE¤Nûsiüi×üÑfùЕC—mšgYpÐn]*‡ï„xö˜ìŒ§I{f³äïZÌЪ‹ÊÉAÏmÿq» Wúê IìU¹vWòI=ö”“ž3pbXj¾{1« /ôÓl<ª³6‹i¥qênø âî-[Aej’ le9—rÒ6i±oǃéAþÎ)ìÑŸJ—Ô•Ú7ó¤u±¶®~—H{í¬Í~]/‡‰'Ÿ*JñV,H£ƒÍ^b¥»_sHl1" Ðf¥‡[Ôº˜¹Ñqö*~f°/N îM2žŒI}6OCÄžr"ÂôD°=9(ûþ…­ÊÉ+^NÌò@¹IØ“.U“ÇÁD?RRC¯û2}eieê8)¡UÝ @äÅÎðf!²%EAÀÐ7*Ú$ó¯ÁÐÆò1qei_ XLÅÒwu7ñº0Ý>„ƒpbÃâÔuÏBá×xÆÍb‰Õ=ľ%|ÀÙm|ñb_âåºC»dàÉ€àxS© Æ+w‘ìÔë7í ‹Ù¾p×üÇr÷õÆ_á(úqY—î\^Û_Êç:>§™ k“NþR’¢"Ù"Ä~®5 €]Ö4eΠVRÚÞÖ3àC@`KпñP»Ç•“i’BU´^×ÚžHN? ”ãe­›¶7Iµ:â°IÐå”âgº"Ë’eËíÍ//žÊ­µûsD rùâ‰öÚHƒ×ê¥ÃRÕ%·B,wíZ‘vÈŸ;"}~-ÄùRæ[xa™õgR¶^´ÖÍ}ÈNÇ‹ÝÖvªgÇ^$]hÌOuʬ’\®ütœ¨?1*Ø¢2—0ö*W 6ޏpiúÀw&ºkJ¹Ä…§‚@!ÝV¯?¹`¤*|‚-\ö·ß;"tmý9˜©`T0SWj) µ,Wâé ž×>9ÂTÅ?n]¯Rj·s;ÂHxÃb²JX]v×I}Òâ㸠6]îH(‹–ñóÚ*i´YÔ÷ô)þAçݱGsÊ*X÷‚DíÖ+Â…•ù>1kd/VjÐñxÔÿu Ýw!r‹`"þ<5 ©--„½dWÁ„éì± ÖÓ3÷·R‹WÃ> FHb[\<>>—MÇ=l¯ü}R‡“ÍTÆß¯Û‰X5©9­MQôÚ5+/ÃX#¹cªlØòeÏŸ{=äÔOz„ .öO`1¶âÍ8œ7o¾††§w8÷ Ыg¢dwü¸âŘPj(G×$ìÎëXMŒµ ¼g#ÿ9RQ¹™„Ø8ŒI·ñÏ'›žbÔŠçÍÒþ„ºœ8+Ëü†ïV¾‰¹µüÚÃñ³‰‘åy^±Ïô4Ý\Zµ"¦ÈªT —é{±ÿ%ã”O¶).^´)Ó1¡\^èÎ6kU3Åöq7q<ÑÓÚ‡GX™£m);æàñçæŠ´¥¶[(l¦Ó%»Xª"Gä9|šä¿èÃ1D©Ávâú©Ç/eqžË^~ëríì«_>¼®Àˆ•%DãH?ä­ûÇ첿]+;éJ ¯H‡«ûÑMÖîÿô^ˆ“e÷•Ÿ¸us\0·„Ç \‹ƒ9ʾ—5ÃNzá‡> _\E<˜›R õä‚GÆÃ"Âqf…¨x“挰w4 Éš!*]öئ3h{»úú(ÆMqå©^…ÆO;bs¯ýâ0Y{WòY~¦Ç~Jî#/ z·Y㦹ðv¾=¬ 8£ ŸôÞSd¿ž\ïO¸ZðÄãˆï‡ H$%Lõ‡¯O]cI¯9d!¥} —Ÿ˜tWƒŒ1tYI5Õñ+}aN³’n©—Ö˜ýÒbœ‡ßíÂ8 ¦¾ËÐ}oøºbL :Biºë’,N‰r=Þ˜2bA_1,Æ“7u<·ëÛkÉfXÎÜUé~ÜÃ+r3“Ó¥tm7N ¹k×!¢âšëŠâÛnoˆÍ$"ÉMÔÚä6û?aÉ¡Œ(ë1ÎC‘ï3Á²õ!}cýT®mÄÔü[V‹ýÆS÷uA«ck^ìpë7Ø!˜cýz MÇ0wUÞU/{Õ³¿¶£mråa2ÞkN öjõD@á 6è<°'÷‹ô+”[—\>0JQ[ªUÚQí†4 ‰yÝ›úg÷d'ú¾íÓÏ›LU×àwãoùë¦ïÜU;k…¯"ñ1’µs¨Í!·Hù¾—׎ºÉ~=0}ÏØyÿ£W婘ªé 3µ1gR˜gïŠM¨É¸Þ´†»`_Žè†ˆÛÅSFuÌS™¹wqNJFos4¨™£ì"¸†g ØK̺•Ž@´¿qÚ,_ßkeÐ÷íõ;ç¼åÍÔü³,w›ÄÔó8 |~u´ ˆ‚Y7îõ¹ŸB±Ët¢3Âq½Džœb4­×)x¸Uç¯éañ ˜Jf‘ç}³5ÏuÚ§ì•Vцƅ‘ûÜšº{ƒc¥<ší-pˆïƒ±”þíÝävÁêÃñmj›Û¾¡WEzAp¸GÛ:y¥ÀbHðÓÏÅêô6z£A–Ïœ7¹Ž[JÖqPfRü]«ÎìË ½T˜3ï ñ¸%,›è Ü)ÿLŽÓè}å4 Ï“ ÇLãJS#·Ù#{àÂ!´ ù»öÄ3ù生bØt°]н4ÉóoúÞ!í ç %lÛ>óÖwלsk¸QQyMкz3UÕR\S|;£Ë›§ ÉWtž4/ŽéŸ¡†…ÿˆJ.êŒK‰g“#ÁtNŒÇN¸.D4%%0ž\q ŽøçlˆÄ„Xæ´ÎoîéS›|ˆ3ÓݧkÝ¢ì„äfÌžË%HÀbâƒ)¨èó¢oÉ<‡”›z<¥‚• s»96Êõé ·P—‚µÞBÝã`’øÉR >’„ó†–Gúý;k‰Sç=Kèû²É!A1mòúþ-a¶‘×êËoýn_b¶ˆÏ›NÛÒ¹0“™T»ö÷]©g` xÌT¥Ø”ò¦Üš¬Ÿ“ï"?ŒQËéíΛ"ÛÇøB­á¤IöFþP$Òû¤¹ŸWgƺB+¡!¦;Ûɪô8Mˆh¤±›üÃZ]ǬE”6{´tÆðT(×Õ“ìW&:ÀyR©¾Õ©\Áqs‚ñÄÌX„¼çæÉR ·)™°z¤ã,;táÜjÛžðc·<#é®öž¿”è–§ò/H_æ^œ™¬k»±õ•=6cH<Ëf¥_^ló‰ IoȪžÜ,1À5fETðÙ´]¾¹æªcŸ½eÚT³3˜åæ„ÀæÍ¼ûÊ¿"û²{Id{ôžŠîNø§ÂðÓܬ9ÂR—GXm¬kÀ4™æ!2'í…Yuñ Йt³ ׺Íû“•}ý0ÙÕÀ¦( å®ýg*3Ãu‘.¯oÿ­|_ƒØ”£ g“eqæ‹6«¼WÿÌ1×®È,å± ëü¬šl@·±$?uçfÚ¿¦¼q|)xb´uk tƒuŽnì ˜K$’a‹…E¦óÅ4&BÏyÔØÑߪ²•-p˜C{úáxÕ85©HÛpn¹÷ 3ç÷•.ÊÀäÑå—ˆ¿&ô‰.šú&Ù£UZ¶ä¨ƒéY:3¦JñÅõ%ø% ŠÁó¤Õd¨•ÝZÊ ï4Ê–ÈAûÝçP•w—!<¦ËõÒΠ ÛË×&[ž´ ±u&Õ™ôGž,/í\KT¤‚ødÕ—úÙr—%½†*bÆ/*Ö=ÉæÀšíÓµ  ?s£ü€Q„2èäG C3ÿÀ|:}¹4A þš?Eà\ÿ¬°eÓ×½´Ù äf7h=’o—ûç¿#É<ûÌ=þôî¿ý¦ÿè÷Aŵ1ÂÀÑŸœ)_Ãùð‰B„ô??Ý¿p¦Í Ý7‹è¾9Ð}%Ð}—Ò¬,æù‚ùåó›Ìÿ× ;:7¶Ak9+~À´& :MqÀ3%Ð:1c@Z#,+Í´DˆG3Ýòä’t¦ ,¤{ÿV /1!MòÖ—:d5•‚œ„kÅ6æ¤5ÍráYˆs‹ r‹„ôô„Gʰ¤±%Öh²ØkâÁ&rø>±ž.à††˜¦±uŽAÎÉӨͯ^ç®9T…ðàMI-Ëi·Tr:öàMÛããöXþcéŸïÎìük%5ˆæ‚´XBsz͇ƒælüøæ»·„—†d&ÕÝ|®Y@°5ShË'¿é#‰G¸åd ØÀX>¡Ó¾}›YÛ¯*7µ c,9 'µ+VL©ë.o”¹ú§ÑOEyú%6o89b .ž*V˜^Ǻ¼xÍãËù%} Ráö¤K€rëGãîÛèúøô(+•jU'Ëáø§ÝQÈ=‡º½ïAÜÛÕ:?X&—(è iÒ~î^[‹Qè¡}†½t©¯$îZŒàWâþGN4Êj‰ó•çá_ktr£»¹ì“Ռӿ/ÇÔKSœF“Ú@µ8§yÇQvH—¨¡ è蛽cHŸ(…éñLhS¥ÑWÒk*×ò.jS"…,G§1 5Mo:äë9цþoÆf;¦S èsvÕÇlÒ*!Ð×ך#•Ëù+DgëyT„Aƒò‹Aœ±¨‚É-“ G–d~œv…-:úðÛVÙ4öÙí¤cOûþ³êÀ¶÷ës­c幓_«ò’’#üòÜ“³‡ðÎŒs:F$µ#¡ü©ûò~ušI`j‚¿!‚ñÉØTƒL˜ÀMçјé¨¦?Ô‰¤4â =z(CìÁüåœÝpH"@i[çYò#ëW>ø¹Ëk¬¢ƒk|rBW.<¢åý½æè”_vêvqÏâµÔË?¹½Ž™Tâþþ.n)Æðˆ°þº)Á‹ÕûÏ_ñò,o¥å·ºÞ¸g™©{á_#6o~?oó{uxÍSÙ²áL&ö|v4_~z–)–T)T>Ú Ë©WéXö²fm¥Ž’ù°×µDâõµË^¦L,«>Lv¹ð¾Ó× *Êì$I¤r}×Êæ‹WôެåwÙqÞŒgÙL)s–aâ‚0Ps±'ÐzAá#Ïž¦ŽùñŽÃ8hcŽàØ4·vJlj†FL0ݲÄY¤¹*<{Ѥ>h.UÒ:.cakR׃£ôlùñ;ÛáÁm75cê®&¤Á@ø‘ë: >–NŽŸCn¼ç®y‚¶‡7Ïúô™ x& '˜ s?jSé_¿1©)bËð߱˧<õ&p‘. ´_l”uJÔ_¢A`ß]µn^V.inî…aÂÓQuÒc5Ï>®@öÇ ÐÒ¦¥D”ÜkÛ'VB?;†ÿ|ºÞçÆ&Ÿ¥ÈWÛrßÓBG~zóy"½ì÷…HÔäÔD¬$›·Bï4¹Ù*K_4–Ip”cEµÆ’pˆ"íeÒ13gø@ÙoÊÐùÙš*œïùe…“%Z8ÊlI>ðÈíIÄ¡(Ò%Âj5|(ÑÁX8Ð Ë´í,‹Ã:Y!t¯ûg‰ùH>YÂnÓIKx s9ãœwé2È(˜º6?GñÛlG¤ÃÜLÆ~;qPÂ<Ë¦Š©„¹êR5ÝUËdç†$ˆuâîg7‰ÙS×ÉbûX$_4S.x®Tª÷‘˜È«7H¶ôƒ6C’*ón(JèÛ‰ ‚õìxˆ€çz>Ês›¼€qYýd<%jÉØˆSk¹lû³ï«~ÖÍí¿MóU_×å_wòO[p0õcìtÚ§®þ±×wÕ<9øü<%ä Ø–þt&–RÎN¯§InrÁÇ„¿P„Ÿèy`{"Àµ_pw.Ñ0=öŒ?º…tù`6·Óµá’DÇûu¬Â(ÈzÓo™­¶ºñ›íOÛY|ѹQÄÞãA?;Š5N¹É\–ñû„tdAÝyèÓ›a­‹Ã.\_œ—¦mÍ—J9Ü)Ž‘ÔDÅmvqûüŽ¢.›úDØÆBŠ"ߨaÚrÄÓãÏ·%R½‰UÉqÍö¨f’þZDjÒ&ݦ.x¦žH­ÃVË­› aº"óö¶&FkŠbìtC~_1 ?{¸“g:°«ÛÔÛ¶SnÏwHr€cý¯Æ¡®û%ï^‡ÍÅ{L³na¥Z0''°Ò™­9 xŽâY1=Åb‹NŸùí;ï]<3s«RÀBëô…{² B¸¥—¯ƒø6r[Ìú6e_Ò qHýO(èH·ðx?ìvÉ+AUzšß¿ßz®á/Nó;²çƒ½ µuAœ&úR¼{åŸ9\T<–m=ÖöÔ:>æ´¥‚ò„M‚Çì¼3Y.´«©K ˜¿êbÌ^Ó=jôoòb˜ÌË‚Íh¸S”ßÊdŒËjñ)wdÌïŠí2 ÃÒò¦~äîQn'e€û ü :Bd9F8Sê"¯„ú/Ä¢%\4LhôfÄTðÇb¶¸#7ËsØØøAÑ!³±`Áœˆ:¿"[j Ü£ú'㘻BÐŽsYŸ‘"‘&_xñÞ·Š³ið–M4ûôéíuuˆ-Ù,8{œ)çAjÓü #BÇbÌ-êǕԸ̔TöTdÀsH"0 Ö”º;í¿ Õ0|Ã=V‚tæal\¥ß´B†ÝCÚß[:Ê—¹µãH÷ÒÑàÞ¿1uTzwLÑœEäêøÉž¼.ÄZ|Q×#Þxé‰5BEšYAˆ*mЂ‡Ö¼ÐD*²ôþ¸.¹ÆØðŽÚ™¹òx™B°þÂTr…Ó{>>¦øl»ãäµÔù)ŠÉébN™÷~Dét„qO³£ÝÞJ£C¶åî+Kì°Ã’ŒJS–ò’±¬B 4÷OxWªàê|"ºˆ¾Š;èR†äÜR[å€a²:¤þjÐ hTÎ"ýǶEg¢¨œ ‘od&Љ´./à(.f3/˜±ÑŒ*‡9Œ\óÓXœ³ÍŽ”H™">ü_:QÛ^fkÕfèƒÈ¦ø fÔ Ô’K¯GÅÃûŠº}Äï ^sòmñÛì% ®Û{KuÝÝmyËŸI‚RA×Éôè¥ÅÉ!6Ìp°]b;õP¼­4L‘ u¾º \ëÔÍ™|ñØöÇñQ5&›2pÊÞ~;°8à‘‹#>'³üÖ*¢^HËd!N¥§ƒß†ØP]É`“$»ÏAæÇØ ì÷°3E”:‡q¡€¦M|ø€äA`â¤eÑúPˆäéê3[¥3Û¶Õʇ–èu «+^ïA, ªµ½¸làÜ’CëzBý÷Û ŒkÙ3QË7§Þ/(Y¡.†“È5eà ã˜ø5I3ú cËŸö—3i€9­³ #Òw´þ¦šs²2™{y¦}AãÖw³Ý Ác† »„8®o’î^˜e" å½Â§¹Ï&áŸÑàÇÁX–Ž+oÏ^PÑñˆ?<$T‚•YhŽylè˜óO7qåx¾ 8ý€&ášñ®M˹?SEþTD!Œ”Zyjº{dÀ}éiß’¦Â¨¹àÁ²T\Q™zw&`,S„]¢“{ù7‡9MlÛÍ æ§DCqöbŒ½Ä̼—BÉ•³õÒ>1öv6/Œf“-¸ Ä/ñ¤RÆÿn )ÌÚGJYþ¢˜Ø;p§ƒˆÛrƒ¥Iš¬k;€p¤€Ípȉ˜õ½¼ëÆÔñÝÆ¹#!6¯’`p"uÄò?„a¾!§Åƒi^ºXhk&‚s¾ÑÚ ¶HçËç#:ê¶;¸ñÓô„ýè4¢ƒ|ÑgÕ´§Ÿ™†ˆQÐúLîe[ðáž9òIkÈà0ÃÔ8R¸tG^Œ Y!{èG¶ ¤PêÍ©dn¶‹[o§Ê]~h‚I >¹?.ë—{˜4ä—÷âãûŠq‹bMTÛîh¡˜tbÏlq‚WBaô{ß^ׇúÜÒ†±Ói<cé~×(ƒ{Þ—9ÆÃŸCÄ¡¶vA¶<¹­½&èJñrÑ’ ŸàišIˆÄKìÜœ„5ÞŽfÊ8N7¶@‘ÂÞx+)>…ˆZ#ôt6jï¶{¢k?ä@´ÉŸ­53Q«"3ÍŸJ’’‹GGãT"äõ½â ߎ¹º÷cŒÕÍÆ73ÿ£1_‚‡Q˜…óDXÓŸö2 \6§é‹É¼·7™Ý݈N*Í×5ÈØËg)æU™dòü޽æÉ(°R‹sÌÆt²ÿ^ÂÆÍGçÌh(×j31¾²#D¢(8+œ Ì‘:$"ÓSb-…¬Û¼w÷M:_Ej1nw2œ°‹§¶ÅÎ+,Þã½ëÙKåŽæ7Ü×s‡r¢ÿ·È<×={»ÚÓÛ ´äÒhŠI<5<¬…:¤Fw¹³“=¬e¹=³SF’èZ°Æ‡’•ÔÌ—)›öŒòîé׿LØiCÄ%uâç÷†›Ü†H‹E¾†VnyÄÛÑUl0R°leY|UcŒ¿“?6ñ“Æ”âÒ!ˆ¿×]×Ä>–.<{Þ{´oǹ7ëÁGò_*Å¿¨ ºà<‡Ö”{I”Y¹–COMŸ1ç@!Ü÷C -³W!³%Ò(CywÌÃ3ù9a>%3>Éÿ¦¡* ¨R:P¥\=Ù,/ËÉÀ§”iœé—üoÀÍD"ËS{Õ‚!!¨ qÌ”¦û%¤+…iO› ØdºÕ¸ø6èÂáŒx‰ËÓ·>òLw?±n˜¨­Šš ÅQÉAÛcã³Mºé_8Òœy&²÷#…ˆ±.oëš6ÅÁ[ú¸ò¼ê ƒ¼&Ó e#xD£ªÎ KœL¯ñ…Ïý ×Ë.'Ú3q,ÿ[Â+P‹Mˆ¿áGFÅj&IùØÇöÄû¼j[L¿‡Xwê§Û.«ûM¥Qû\ ±žŸK‘ð¼0Mà»O×+óâÓï^AIUfæÓÚ¹¼e·–IÂäÀOY*êÇÉXxB…Ìýèk !aqá¢=q Á¡;';FåÉ ÞÕ•Ý5+Épf²,}cJ§‚˜Œ–&I®ðô¿š~ewŠ3ÕùµÊ‡Ç„ì¼6Cå°(r\!òÊÖù=5Y´,1}vA_ŒÛÐ<Ö³Íì}So©Ê¤¸¹øÈðx|ÙAñ,e<78lÁš ÚH¾½bó´…0ÅZï'ªAÀkºOmï-=Çtå]ß‘ùéºw›P@FˆÏ7m=_i±ÙˆO75}êB.Èlá=z”zÔ|&Öw™I$‰Öêx˜ñ[Jë{¦ÇqŽ=¡8†Dª'È* =åô[ˆƒ<¾á":»@m%~ªÞÔFÈ“K6Î@QÇRxÄEù#l½³ÿ®$÷tµ[ù<íl×ßz§ïDø•Ü@²F¯ŠWk¤ï|sqJuõöܳ‚LøC°R³…o!…ä±&yí‚f0US~ubcÏhEÓ¤êös°‘í)¤S×—†QÓàËKŽELl“çÓúó¹òÁÏÈ×OÁÒAïßë ¼=½&)ÄרD/Õ5ê=äÈq2g§c>;M·¶ÇÌ5Gã%Ø ËÝß“»êZ¶UOÍy´Ô»mÔÏBÌc*|Ôo?ßã;ÞRNB§–›8ÀÄê»6¿ºAÛnV]øÆ¡]³R(>| Bûž¬|ù%›7¤È ˜Gõ‚Û;˜€8©Ž§Ì±ù"ì0£Þ|ô!q©HË vºdNÀe*ym1C¿$D,C-ü·BšŸÌ˜÷!öÜ JºÚèèÂâå$yfv>"úäHn—¬³}iö̦TÚl¹ù>Dþž2WPŒ0nyS'í>OW®==Y+ˆ^ÍÌF¸Ð°¦Ú‡ˆÌ#š5ßµ$ȼwþk¶œU¥tÇŽðÛ ~C*Ü1ÉCÍ ûàÒ XF_Æ«gªÄÂá>'†¾3;i× Ø‘æÙø~ÍpdÉWÙvïøæiú@þøü D‰‚Õ>3žGÛá;HþÓûdÎc[sóÏÚ oÛrv' CèØ»· j¾Èe=I›^î]ò„0rÿ¶¦ÒlTLm&„”I8_WóoÖéŽÊnÍ©Ühx²Çû.©ðŠUˆáôö¨crdc>îòJàÉ‘@óío0™Ì§,D*ŽâÎOËjì§Yoµœ³w£µ£öÛ08Ê×RœÓlê±ã#Óëµ! n†­å†…±I<7óÌÚRòÝ¢êÕý:m×Ò_ ÿ…Þ«…["?Ð"SÅYÐm¶K;$s*v¿Æí«N”1©ÌS.å¾Ô€ ;Sˆîf&©Ô¼k9x'ë®zk/ì6’¶¿ùBo"Ü(Ý}ë½3uÉ|y¢Ã,‰ -õ òÔ¿h- µeãKÎkö –ßEd•K¤3SEQ=”fæóËVÕsé¬÷"ÄÞç8­Nî ý^‚öÅWŒh²ÙÕ²M€kò :9y]½Úá.í;¹.žxªÓÇÕ¯÷!öc7Ê"w‚¹‘›:»\íÿ‡-ê:ˆ~»ÍÉjn%º±së·{êï!G*³(ÈËyå5…Qv( ÙÂqçH‹*H›9 çÑ0ÓŸÚ{²G‰ØàÒîQ¬ÖήzÈp]•švaÏEÌŸ|•ʉJÄN¨+TÔà-“¹¥*eS›ÙB¦È ±X9ýèç3´Š¦l“<âüŠº¿½[û‡›ß_ü±Æ2i¯L³M}d¶oQ›-²¬ÊÝÎÑøuVÑvrs¬Æö“›†AÞ”‘®!>·³.ÔæÓX'(÷D'd·'à'N¢òVv§Æ;Ï’º¿VýÈ3JÆsg ië5‹ «YFO»Ú*íˆÏ%®[lÆnæb¼’ÒQPÅY™÷™AeÞ”¡äÕ ¨"P”2߯ û’óL«Ì^?xCtqZ-L{yá„^Öo@|ÆZZÀ`=øLry)–6÷«X¾´˜<#§MšÝó>Œd ,ÈYõ3…V%k–ßõ›é[ýsW_UKˆçülŸ€Ùð0ƒsVšsúI’Èx˜Â_žœOͲ£Íþ³ÛÇ׬SÓÎÁ}6.ÛhóÕ6 Â[9”£$7r“\Ü8·#ßïŸÿ!Ä¡?ÄKú¯1ßO¼×.«%®¬]Èvæ¡lfm½øÿÊ*ö—?¦ðì†Ã¬ºÒIÚ­0NÊ1<%à¯}ƒçT™D/ÇC/P@ì `´áN Ç8ça2WÎ\w…¥C¿+^ÄðÈ;9"‹ ݨì G˜‚ü.#è)’Û‡ËD%M¾ÇèòƸºw›ÊêªÈß–ÞS"H–?Za?w3ÝÉhÜ ×;ݺnoŽžµaÄlxüÛhÃIâÓ‡HVIۖƱŸ<ÜUu¦×"ÙèÌDÅvþ7ãŸê®2ÂÒkÇ],žÁ9@„ÕÒ%nwX}ŸqH¾Ë’žÄ/½6®Âq Gå¿°#<~NÉ…aÝ,­Ð!1óï!â$5ïûë9™g^±zóð8~ knÙ¡üù¨¥˜žF5³ßh6žx„Fñ®ù™œråðx9:Gˆ‚Òù…긽¢ë™n¶­¾Sìv‚ÙÖvTT]>íÀ09p§2icš×•ÛT(GªA«ÌVWJÅ£v+Ì€í)žáCP§ aI?K"Ú¡«ÔÁcŽ'ì`;ÚÙÍw&V¹ÏY6WîèÚL~&îâÚæÌ÷žÕÓçù¯Jù‘zt2YFÎxEfâV¸”÷›•ZûÀÇÄ~ï^Y§MÓÃêÁF¯Ëjyúfô2lwC˜¤Á®tÕ¥ç!Eë@÷ÖFè0™²Eã ;í¯SÓð¬Ó¼úuÝOí¶)k#‡Ù†©fë×°ôÉAÒz5ìˆÔ‚XÝ¥ K®âo‰R=«®ô ÆàÄñĜɚQÌúçxårøaíþ“þе’î0w9áØÑï¶ÇlC¬Û±(Æ»ÂM=}íQ°1k>¤Í×ôÅI|Ɔ}“1]uñÚ¸€¨î |w68înfofk`4ßßYISÄ7Lü§ïmi-ÞÁ7š‚f¿^{RC0µÖl9À_I%æŠb–1µ-Eƒ.ªÇv bËМÙËm@c× û»©¯;oj†¹ínjoܶÕýc!bN Fäà•Ú‘Ô]úW_Ì?œ®ÎI ÷ÕéËãšæüÍÊDÓªú•™f?]m%gÈ“*¡È àÂn&¢Ò ÓÐ_ù„?ÌøØ‚ë¶šÄû…PÈ«×Üe/mk>)ü›KäÑV‡¯ù‚WúDò4Ð@ÌÝÎÌÞÄ6ÙÔþ­†h•ó#Úv^¼b\VÔ× „”7gÁ^ÝÖŒ_\6³ÛÐôÕ¡ZSB4ã…LdÒ mý‚¦“­S¶Éÿ0…TIî®VºM3…ý&M]Ç6ØNrWNcDøPa—ñ´ÈEΫ»\®5ðq q }1–U\wñÚ5æ³>B¢Z ÃÖÏð‚¡7™,ŸR•²½;3·ÎCEB÷.·IšU¾F.;CŠÊ%Qn½¥*žËm—•â¡ ÓxW¥VÙ[¨ “}Ü/±d¡¸€¸Â̟怒õ{Ä :vìmn(áC¶…™L!mX¥*ÿx€IÒ¹[*̸$3ÁêÙþÑ/Û(âê²9 ±×{úìÐÒ. iJO–£R†—˜çàï•@ Eè #mþÂb#7k¹•¼(Ž!›è÷'Å2ëŒUØÂÅéóØáÄòf BÄ•;#oÄ5Û`¦Ý¦-V–¾Ä^­/êš3ËæÅ7)’‹ëwŒìÙ…%a"ú• I×Tñä XV,åÝVÉךċIÅMµt^‚êµFå×%wW{€ÖkÇ®q·`\ÓéÃ%vê´z#¥ê(r‘Å“åoŽ%§’“!EÓóé‚N•F$íÌÏV‡e•ålê&âeÖÀþà„z¹L=T3+n×mûõ›åÅÙ´™ª{{àÏYÛ³÷Ë ‘IÔxž$ñEËŸ¬¬ó<Vcè^+H0GÏ‘q •Û–€/󋼯ü!H—˜Òá¢ÜÒ+·Çý ¸KC<-&ž-$>°«vªönÇôÔ¹; CF­n~Üê=ã…­q3Úò]eâ{ô‹M·ßC7L¯ì7+»ÝH‡“%’Qq"úð%Š~k‡¤OÜ(ì€xUÉE©C$&02ˆ1WÈÙÌ+ÇìË¥0Ò\e¶‘¢uí‡'•ê¸{â´õnŒ‰=aËTÛ ‘êÄ{)#éþ7½Àý¸/Ûkc1/j²óÓR½ë|DF ,´ÑJÿ+úÔ ™œGáÏ«pë—%"f+·t¢Sw”óç{+´²o85IaK‰~¡ '¥å®Ã:Õ¤oìF1¯`§ü~eh<Ãn0æ¤úŽíæ©’ÄSH=ûÛY‚IÈÿ-#E-É/úF“È¥{åÔ@BD9¦˜mçÔöSðŠA™ØÁƒýí4È0 •º“wË\r[öо˜óÕŒbtŠ´]@ü rî ‡´¾Ýf²'äæ3–‚ö| ±rCêÃnÌàh'éð ›yok"X™´ù˜uKÙž5[Øã׳1áÓ{Ï_~†Ž ÔÉ/RQðE÷<×$ÞgP.öý ‘dÁà뾬U 9Yœ9Fz5úÙ[¼±«QPüÉP„ˆŽát›jØJ…鞎'!ƒŽ¢þB²ãøÂDB`½`Ì-tÖ‡œ£Úf‡¶!‚ÕÙËï`D:Ê@bw2å…‹ê©D:=ËÌb·@ÃÓÁoûÆ ŒçQœGÈÀÆas$”ßz£´!šžÚ½¦b}TCo 6<¥Âē;†±a3áâ exÊ%`2°4AMæÌX¿ÇEt>•a+ŽheA® ckýÜlYS`Œ¶Ð¿ƒs}ë0²dpàJºñæRˆÍò‘pƒí({Á¸¶ÁŽ!Øù!v–à—ˆ+t+³hÚE›Ü½W_—›“”ô‹åÆÝµê4$l¶ího ÿÅFò!{^ì^\ž…8hˆ‡• @€ë¬dsù–/xùUßÑõ7îJØÊ©8Å…çÈLÓçÅ;Ù-û¥­‹CyJ—n®^eZ'ŠÎÇæíØ‹3õÄ„ôÄ÷k~:èÚQj›JET-)hRrë£c•Ì.T9p ìXpSM‰(ÔäS׋ëTkÒ]Óó²¿gºx» ‘߀ÓÇkMÏ)Øo1Y|{§ 5çoë—‰¹öV6º¾…ô6<•ls¢$ öØï3Hž…f`Æúœˆ‡ß¯ýb€€áxâØ^ëînì8ýv³CZ–HQ `pu¼ŠÉlǽÍëÑê³™¹Ø™†­ûöÇa~¬bîøaˆƒØ'äƒ=I“×Ü­®…8‰Žj…úèŽïÓË×Õ™…Êm©ÔLq[߯ð ³0ÆÚRÿü–àƒ9y)™7®É^Bw¯Í5¢Û”T§L•{ %í.©U°Ã̰²¨@Mêh¾¾°J‚FPTÏì¬âqë ‡‘’ G œÇ±$€}‹Ó&;Fä›:7¯‡ úíÕH¢øFñ}‘\vë„8Õ¥´õ/F·Ý‰{{È­A"EH ,g0Ü{9bÕ¥¦ü¼¶¥1éZ=Xrq,C¿'Mlg<«LÞ¹v¯,µ{Ù3BΤsæ T=š‡ØªÎ¶Æ©æ˜Öh«Óêñ‡±ÄÂ*GÊìQ!ÁUuÔ}’~R­›Qö€chÒ5Ÿ…5^/-ôöÌå I‚!]ËWÌlÊØ“ ªðczÊZ—ÛmV¾*úJ76Ö$!”ª!‡±6§`ÇÑ£Òaµ¥kÈk[ö‡ ¼½—3Uæ×•&èÓGˆ’|âfê¾T\÷8ùíä ûV¶ä⪶ð§G©âðÄôBr¨6KÍÊkŒÉg9ÿV™Ÿ–££^Ï’<çÄy¹76—ø)$²áÖV¹…“úT©ç¡Wm¦v_-1¼ùˆ]6ÿÄ֤Р¬Ë¯§[ÕÞ ‰Í‰e…úh¿üÊþkÁm-IFïç)Tr[^0$Œ,Ayïý’•/I¥’7Ï~‘‘û›ÓÝó_ôÌVq\X&MddæMtë&{©4ã~åDJeWñ pÆLfàço'eINt0Å´kѨF–îS¥ÎÍv‡6)&X¹0£RüŠÕd1 XhÉ"lð8¶øBDº…!MfèýëüÊG¹†CªðCByžxÚ§Õ¦ð›>9Jqú2Lù²ÅÉwr¤»‘oF_Z•8ê’Ïï+óšÙ­JÎŒõ…¤¹H¯4¾õ¢’Öót£³á:y–›‚ìzV†Mžlý œùògå<Ïä­ZÇ8;,å·†Ñhë<01d…4ˆ z ©ñþ åô3“”…U9È[´ÃLZ–¬o•XF¸xE#µTâL­îág;=eSAð²=3S’ÛÀ—Ðæj%a`޿ܼÈvqõÈ3“f›Uá;Œbÿá+á þÉ SkN@·‘Æ%¤US1XGÈqÄŽ;§|îº9O­Š*mVÝä".3Ô’¡Äšõ©ø”öþ)IÈër  ˜{Îu©ÍÃ)Wo&ßV~èsNv{ùÞ±ŽFYÒÄXä<ЛKÜ©FÇ kEÀœŽi¯%^N6Y,ý˜ËçXÙÖ÷ é^ÞUN¨;6[‰¥’‡Ø+A½—ù‘ÅȦxÉ sy4¤dg›FQ$ìKY’©Š&YÖ§÷šÜc©™Ÿ•ÅÈ$¿˜M¸’KÃróAíG{#Ÿ­,±S»Mï“·5¯˜ýéÀ0˜8½¡¾w»§íéú2›z“l1V§N¿z=8$O‘è4¬¹ Ñås—Ç 3E¯l ¬Vèyn‡±,D ¦…µƒú`ê?ƒY¸fáís°b0iØ;»¿F5ØiÐbŽ›r³‘lÎgBm'˦‘ ÀÈZtÙ9“"±("KJ6deËóyPÁçÛú}ÜU¤í¯ÞóË;7ôÿ^–…«Ï6µ7a—êl¬Dâ7I ¬xÑ| k¼©DÎ1᳃³Û®ßÈóJþÈ!šÛ¹¼´3ˆÜdïÞp«#û ’ ðPŒÉO§î €éËzØ5i%fÃGùq=¥Ê¥÷¡ñƒ9¥ç´ƒÉ†¸XÞ<FV“ýÖýJ-àvu”û äÀCزş¹ÌXšWGž?¦DúS+ÒÚÁæa¤) #±AoÐùÕ™-÷+ÒB³ì¯‚”,§ƒ*¥,OÈsòd¦Ú÷Ø_åoÆÉR@‘›Ú5l BÌèň3ñƒ¸N¡ß‰8ÆAbcVFu2x=D4ôŸ4KÈó–_.!`NÎX9ÉDw‚çKÄõ2rƒŸ˜ÕD³†›yNÝ‚)DŸ&t†c!` cè¤×\üÖ:¶,lí8²˜¿9&”Û³6¢±Ä$oÁŒðñiÝÔL Î) K›Ëâñ$ü=3ñ•hØ£vÚ_#Ü^²hPP/FqS>­^Ëö:¥“]‰ÊX~4tÕºVþNuƒ==¬§1ÞØ‡‘®Ê¬†¹q}ØM\-Ä xü¨ú!!ñÃZ'&±Ï\„>(ç¸é=CCþIôsS¢…9¼®¨b¶iÀ.å~xx©áV0Á€Âõ`XËnÿˆÞòˆÜ¹úTó1Œ™˜N„à 1FhfFôî”v½Qëß{lšÙ$œ5šOç`µX›¸Eóœ`ð‡0²°Ü«ÇPÁ'æá³GWÎ.B¥ù»ËÔhŠÅwéÀD#r;”+[âáÍ`žH3SZ?jo×É?¿ =´mîu4:†´V†Lgg!ž£¿\á^¿Ó£èÉÊZ±j8P}¶¬yx`e!¨YÚEÍI¡G .WK“î:OLB—ƒ;¨¤3 í`í1j;oª¹žš­=\x«œŸ?±iì0x¥fÎ Z&'ìœÞðÕ oE@"û¬Ä>’¿Ñ¡ç#É-H8³5Õ¶ý&ýƒAœY²"vQ̱ ÂjŠ9N¢³ÃÕÕÕî#ô*~“P»63íK½UÊÑçî-\b©Yf ,EÕGÓ …^wÈ‘ÕÉ›caÖuÆÒè} Ük Yky¹£§$iʪ+'Á¢m„œš0þ/ÁñìßÇSn˸HM÷Py½dµŸFvñ)°Ñ*zS^²ûSÉêm¤ÀæËxOÛs×bâ3‹‰§Ïǘxñ?—²(*¢ÿø.Çúåÿð ˆ÷–ø FKèLû®<Ñß<ð.5ºó(ZØ‘PUí#¦´0–kéå8ô!j˜º å¬~]‰ØKÆGŸýt “—€× û =9… ºõ~;Ñrßþˆ›SØïì)š>#«BU Ù†ñü"›ÛuùoõvWØB‘ysŸI£ïDVè³v¶É*›¹IÎwH7=ÑÖ ?æ3–Ö–0­W&AÉêÁÉd¦"Æåx¿¯^}ÆgZ¿Dü½Ý×»PÔÊq]˜ÛÙù›W¤Ê¡ß[+ u˜«¦a›¥ö¸r­7Ä]!Ø“°#šbŸD*{–ž`‡º¡5çð]I`”Ã!ÁcQ–鿘Dìµ½vÂW;ŧ]v?7.î_AȺá·j ¦êÃ,éÓÇVéHƒ™ƒÕy Öoxz ›ÈšÌ¥«ÉÈŒ!y{xtRضÕY’uàH—tÐ#0×»ž>‰3 ›h^Ý6ï+«wI)½5|GÀª³r% Ùr•¬ÑÜšcºFk¬¤«SJBÜ‘ßÉ{/ñSØ(Gf ;@IJ#;$tºå à¥É•|ÔÏÛÕÑ,ˆfô⨣.cPõ(·åÿ‡tçGüLZæMòUò0rãæ–þœ.;ƒr ÂÏÎ(:Ö²®±…Ýj*[¦½[€·`?­* fvX~жC›{ï‡)ŨÙÏŸNOÐh} càØè¼¸€‹°YOH+ÿÞ‡1Í“ é¥ÇÍ]Go7»0¶b‰ ÂöXˆþ¨cÁèàn©u¯íA¤ƒDZ%¯ñJø« S·¡ÂmÚ…)Ÿ±c½•è< ˜½¶'žŸ–LÂØ‰À²[Ö¯åûî#…/we6Þ–Ÿšé7sñŒ˜ ^¸ÐØcf(‡Ñ—š)hÍKŠãè„w^«bq)áüt¹½nsRž:ÜÓú¨Œˆ´à¾ üÿ핯î˜ë/\É‚Ú5‹±~?q $ÿ²vR›1?9¿X-¹±m¾'î.stî=2îsd¹¤=Bøm#ff“(fUϯ„±š›]%º²)5K¡"påäùÂô·”ÓÌA9O~^ #ƒ¥Ì÷P´¡eûìŠÞ[bÁËu–è8hæ*îtKRË[E–n|âDüâÎ×›šn¶5Ý^£›AaVRQv–ÏÃHÄ2¯~Ê—Ö ‹©&oOÑ’Sš#öhVm“gB–Óim¬ S]gl0óhÏïgfÇceýlžd¡ñ/fu™Á®Ô{@¯‹çÓÉeÌÔQb® îEœÎ—ÂvŸtëb="¡ëHv̬uAT’w["›±Ìœå×™(¶ðÉØÕŒ×'Ù¦¦°]3Öä¶å\uÿ'‹´ËBô2ГN®Ð/ûþŽÃ—aê Û/¹Gø±SÍb»r#ƒ2yþ¼ºöòcCkÑÄ¿¡Çº×ôB±Í|dd?îÒ‘Ñé99 Å/á=ÞØÇÆœºK¥uÂüðÕ×õšðòä2°Úêõ˜7Éo¡Ã.¯á…×ÌÈ›ŸÔ´‡>Vl”|Í¢ºñö3gejÛq,òƳ`,,ù#-“¹Ë0Æër+Gz ÓRCŠB™QR¸©å„V³?=àZá^M?z+ùˆºNÔŒ™‰Dl¢äéƒòHþ<ý‹-Lá(AwhX£¡ùºYS)n[0BÞ^åiÞ»ºK$‚caE`öjdét6t ø7p;âø™ ›×ÓÖFMô•· l x®íæUfö#O$*ƒUl›mÉWB(Øž–òä«mµSrØa¦m½pó’c§ÕëgÐ'*'”È€€i!µI+²ãGáÏvTŽyþF§˜Á^Nó–¯>¦rbSé>a‰ûl±àZD+Q M›ÞÜÄüY–Û˜ #¡˜Q˹ÄêÇó«Õ§ca̬¡ñ•ù¶q‘ÏWfØ ½³®ÛsË™E÷‡S•°èl2©Åõ¢•DÑ’½—3§Æ£©Ð.]v5ßX½˜ÌÅv^úá.7„s‘o˜|hwNgÛÉŠ Ò¼ä α† Ñ5";3aï2&ëôœOEÑg+ï&]åUVç(쬱úO S $7‹Q£}º/R3 0[¼ß ÿRY—ù:i¬dœ'txþ¸+ín;¶}&¨ E.$Ú-ËHšA›P¡öœÊ>û˜‡’pB÷¯ jp ;Á½ˆÖÇñQs“9Þã“å¯Ä2Oõf²±=º“Ûõ·1±éâROCD²,§§•l±ØMW1ˆdl›Z› ”rª´zå|ÆRWlNÑù~i¦a­`>ð~4m¹1g×úÞa$ ÔD™Ü5!ÇI#ÇZ‡þò´þv`>Ê÷ˆJ>DùZRwö%ŒEwó6‹ :Û/NÝ #g‘áè^ ˆÂ~'Qœ^¿†õ݇0öR‰³ ç]Ñk`rש·º§xH]ôÓµsQ[‰Ž6—°’m)vI%ˆ+D% „qæÔsÊiùødâ=É1®_ÉHš’LCJ›ñS!µR)긿¦"Ǒݚ«04#×ç=ä©Q|˜£l™f‡ž¾pÁØzX„Ñåp/žû}±9Vtß‘AgI­@-y‡0V1ˆæÃX…ÞG¢I–0q»ï™}Ij“21ÿBŽˆÞ½lÞ&;-‰Ïb|Ó¶ Méã0Zvd“ð¶ƒ@E[þ O­p®s¶_°&1ŽYBå¥ÒÖÙ‹)l^3:y÷`|«Æjº˜s“È=FØ)vã1Í9еøÍÞ{.ÿðGÎ=:¯Æ<4<å—Õáê0º“ÜY@¯GšØòb¸¨§Ñçó¨ÉÌFyãMÖø2Ä7E¯í®šâ¯Xt¿$ŸÙ¬#qÐñ ·Ep“1/¦pE[ì˜à6~«êãíJ:ÑÜ2ŒÄ©·›V«5·mðžk§‚8`3è­VQ!&˜ÃeÆÚ$ÀpWú©cüézPyß0YôͤËĔNJ%n˜ßøÏ4¬–õºCôÈ/ÇY;†öëθ?~ÅÔª7~0!4+~~zÚÀgÝìT Ý®él³Z#åÚÑßnF¢Åm·G˃ʶ!Ÿæ®ÄͼYÜ*–ßá³ÚÕ1ge/_E­ X¨ðØ+tíÇéúFûzÿĄӘ$U˜Ce—ŽwÌ›gбÌXÃû´½Íiì6éaüÃ_…PñγI $oÞã?¶Žæ’Fd6Rà@¾ðõâ¿_ø‡›bŠô¾‹'™ž}åÌAí7 ÿ†õ[A1ˆªKéj3ž^4Š.h[ê³£*³Æ,ƒo°XÉ=ñü™»);uy]ö2äqWGb^®¹Z™··ÓH…î2‹Õ꼺+€†ý¼“Iô3Ùc|ð“¸ë‘ìßX"LÖ]»W…Ä;›×øŽd>²·ãoéòªI“Dý† …òµ–ÝÐv›w:Éb a ¨Ó0™?ÿìð}Ã/ãš ? cïµÏ¼ ¥·­$£&­†ÞØÈ“wØÈ%|nîÚ;Qc\jK å)ƒNX^_’¬—ÐðU«…—”£œgÃØ½°™ õ&ÄVŸõtc¸¸¬á7ŽAÍ'‹KBŠí#ždîþF°z¡ hx5N/Í÷ûùP4²¢dBcì§Ü‡Ú “.(y•Õ¬^º“…©øF!1ÌH…\ù}n‚qéæA‰¿ˆglÑ‹èã ÜÙZ˜wÿúí`åX 6›†Eðºí&vù†)týS4Ýe‡ÜcÈ&"Å€Ó¾±×­GÊ–­Ë•ùË^õÉmëb|&4ðìQ%¢™†A‰SÿòLþ=ÿºÚŸM«SË‹kAýä([yŽ›ÎÍÙ¤rêÙ †ëBp»­&6žã¹}Ù*4zÏÊRV%·ä9Nùܵžîb¥ÜÆ&€òé/X¥”ëa,—OÆM3)ØĹÒJHÑëå¼›UŸÙâ–F" ÏŸºx~¢Q$1É(híñ³fîYs„æY±ôlYø1Ô5A=_ðï !l„åJ©Ð±ïXoîàØ"|—WGoL¦¡ýîÊó!%iQÝí}䳇“E²7éÚˆ¸ƒR`Šç½Y¡­³"f›Wß~ù˜ÇQ?h2±ë«Ä^Ñ~èÜGÔ?Úì-½áJÛDàyì²@šRßU2 Çò=vÚdúàÍImX­â¦^Dû‹Ýꋉ‚Â\ˆD1ÑͼíÌSÜuP6+& ,gÀ¹ŸÞí–ÝG3ÃW.”~™ôOÑ eõܦë`W3/§Ÿè9Òù³calxaÈba>[Ütv\,e¦{iI¯sbVb¯ ó"4v•úmWî5×鸩–žŒd{ý_êƒÔ—½ëú¦Úþƺ©ñüüDZJ”J¢é {º`#ž»æi›áøˆ™2¨¨Tw[£–‡ª×/v¸,Ë™Q<Íì€uçr)鲺g][?Ë‘¼ééN3%«P«)Ò TH—yLÞ°C}¯¯¦BE±sòT´(n›êÝW:^¡bì(onwN*vÆ¢<½È^Dqh¦îY8)+6Û°ˆ…@Q$Á2ûîˆlÄÈN/ÁpW°O$ÁÔˆF4éi^Ôæ4(þ$7It—Öcuã1´'æ»á•¦æ"ÁE=Þ#ÉbjQ¦Ì¤ÃØ¥«ŸŸ›¼e‹>g³‰Œc¤ªÕå•0²3Ù5~%é6ß]`˜>L}7“3ühÃF™)/‡ÅÀ¨¾šö§ loÉ‘Íí­m­b»"«9ÈÀ©®gwÜì?ð—ï› [Õíëa¬ÌÈš]O2ªœ·ähc…¶RÝbŠ»™™gÌëÓmˆ¦j4í±.³óKŒ1a:euá¼ð·d—‹|؆ùW'„øÊÛ”“ƒTKq‹Ä°‘$a¸µ“ÔsäÂÇÕÖ'°ýJ±@Gî7…)Ç ¥1™ÝŽ5*;{dWzX´@}T6˜(MûqÏk¸ó¶&_%³ E›¬$O©‡hañÿ!šVòއ++Y­^&³–Z ÀÏÒŽ=—)𯔍¡ÔzÃh+Í[ÑGtýÙÐoŒ*dŸw,‡=ÄþYÜ\åÍ®H;“4KZ>b†îÛ”LÈvcbܼzJEÔÏÌ ƒ®`¥ÐIÕ#O’ç>ûóyÜàw'Öâ^ÐÐfïeýVµ™¹®Y"–HoÀO*l!ײÕVgù—9ƒ«©<ù3™?¼éïJ§Ê^§34S%ZöÈe³^½ X4ØmN§Ž‡í®’6´<ÆAظ{]¿±ÌnpQ_}˜d89ñÙéņù"ȹ,;˜x«5fëŒ&(ÙFšÇòùûYõ”õ ´<°—Î*,1ç›ÊVÓM‰==Y°«ÕÝú¥WÀádÄÖ‰Ús“í«c vb¹^µÏÔݨÌìõ(Aö^‘iXIœ;™ínÏ|ËܾÀatŠ£0¥ ænv³ÅÑÇ:J\û.Œµ°)p`‹² j¦ã5¾@Û‚IT ûy’'}þtù‹ûì?Ø'¾H­¸]$"YÎ.,Ìì:íH̶@Üñó•ø[`>ZQ‚&Œ…{ zÚƒ =-l– ^+Ï ™40ÞÙµ`t¡×>¬ì–飪=J…±{W>i[õ&s sã,¢ÁÄŒ5«¬I¯Nb“þÞ¼‚…ŸÕkmcü­èÞNƒ(ììž› €;öýíÌ µ¶2‡Š5´‹Yf3L÷¨¥ Ú÷fZŠ=‘®Z¨ÞÆú-qÜrzw &wœBt\Q ´#[B_¥`)^9nòTæ—fËöƒ½q]‡>Œ<„º½Æ¢)¼^s}+IwDAïXXY)t:þ"ÅG-ØÝ S«Cxäd2Ʀ‘y¤(Í3Ú¼®e_ïÕ*:1î£r$×T§D.‰ø…¨’G0ÖÜæ±ö=Ѓ‰ŒßöJZ¶Œ®Ð §%ItÍqÄ•­ìJÞ FÑm˜4Ç÷¾ yÝè§êìwµ%9hÛ¼…?2bÛ¿þ$)ÇCPO Dæ e H%jó3¤3„Ñ}'…¾÷ø Üîì9ýr¬„'$:›|@–â~eZ½Œ&ç³a~>Η7‘5îÁ~A¦m‘~»V™\€Î2áŒBhŽ)±mX~j7›¬å¶µ¹–PT4ÙmÉËßÚR–Zź¿Rµvç€`Aº1%ì"NÊ•ªï:È~ªqÔ ×L–×d¯íÄ›R€+nC™š¹cT×ûýíÿZ0‡§nsõ ”;MRÆnS¾¬ÂØ–Øp…æ¤=²XÓ…ƒÙÇ×ì?„ÃJMaºöØ~3fû| n›^X©ú¿æ‡›©ñÝNCï°}'œ©g®’̦¶-=pÂæ^ Õö:LPÞž"oÞ(š5 km£¸ÈqæQ £Á™!1Ï0´peÍÍlÍÈ…õè™Ô‰ õZžT„ fu†2C7E¹ÚÒ䊭ü-ÛÈ•0+&k±vKÑ»Fj¥W¨Ò0Fà†çn;©a­y0†ñ«K}Õ|öï…SY2 M=Ëä̦÷ ·vpÏ?"Iif_q§p¾ù ÆjcUw÷˜-ÂD/Wˆ{gLaü±Ã7ú¸Va5›m(f/þøèfiá¼ò$ͺ”£PÄÜ´e$ ·(•ãS3Ƈä¼FÖ3ªÍ­ì'L±Ñ0oÜÍã-{á•õÛfFà ÙµÚŠFÄñ¶Ë—ŒC'æ¶Û…9€¨ ë&`Eº·@ˆ žRÌŽ÷SlZ߆²f=R³–e‡ŽÏ§G•Ý}±x®¸~@ÙêJ‹Í°á°®ùEBÀëoþ©"mü”&€'&í¯µB£Î ?ô¹ í=l̦©(z¡LÈD³Vr¸Rr !ÐTïxªn®¬ÁlÃGáT Gö$šl9È‘ì9H¿ssŸè|,XÓOn>“<™9”ÿÖ°bnöëM9K ¼:€/hÜF&!E:25q­å×?PɹókõŸ#Öä,û©[aÌ{kx{·—ožßýÀô’ Õд\ 1J÷_{¡K,‡eEQ¢mþdxo:‰[v»âuæê¹(SìrÓú¥©s¤MÍ–¨<](%®žñ+wÌ,;«/Š¥È|{vº´Qêɨ4qR”âÿ‚MLl™Q,®Í7>‡Ñ—`ú›®j"ô,{iî‡RØŸÒqjF=É)XšjPeÔŽN6%å!ØÍþ-Á6e—L±v2]k3÷ùbùöd¤5åW8‡‹ òc"¶Ã}«ÈjXBÉê«(Ø7Ó›’ÿ±Kȱ›ÍŒc79vÙÿ\ʲtVþ'j]>RëâÿÝ~вÁßäîÆ&Ï< D’÷N¢˜ùžäý@áä{Ô Ä àoMm̳xò—ÆÄ37 “÷'”’'ét³È}—‹9ˆ£7ÅÌ=0Û7jYcå¤aªÿJ“Äú#Ù'§Ëéé+Sã§i¢é¶‘D^S¦lIT79¡ñ·×Ôõ@×€Z`õçÖîÇ|#Œ\ü‰{†©zâÙ~bcû˜Ntaoa•/×rXE,—gÖîR¤rÃ||`ß¾pÄûrØòšý›än¦’z4XÚ ú±žèüåÀ«u~„ÑýÜü˜ ·ä*ݳ£cc|—z$<úÆÄý Ç¥ßíð\…Ĭèi#¾NhsÓþñŒ»Æ†Ú‰1D Œ`xojý– vì˜uá´®¿É¯îâì¹¥§¿O@;͇QŸâ&U(ˆêñéº!‰ê„®ŠßÝAÄ_”é>ïýbôTYÌo’=iá†åÚó‹÷m›t³ÌxNëÜÞ)>òŽuPlýDMµ]×&óŠ ±c¤ž,çnø û¶S·×d·GÿYWwSÿÄe\DÓ3Ÿœ›¶Ý;ÝK Âñt,O´á=+zðítpž¸izÈD¾“è£FŽÚ~7Ëܽ ¢@žã¿;$õ(ËžÑ;³^ŒªT_ñ©?ûañƒáRk01‹µƒÒ·7ít5ŽÙa¬lÔ#Ž?ÁV|t%Œh«ŒŠ`·ðÒîômÈTÎäŽ K:d—!Ns©ÎbO‰°DA£â>*­ãÝÌNNe¨UzaV×I3€Vºúþ»5•? ÿBI`)TøFdÞ¥v.Ì|x§¨=ÎG9¬Ú[ž «ž~M®³X V¿íí¢x~ή°y‹§L³v,íÚ$kÐriÈ\«ó Ï2xã68 M¼42§ãî®/–´][¬¨ñŒ£Ä‚$,¯;«¬BÊäö éV˜Ê? &hÐ nój“qÚò—21J_iÇcëÞEÊ…ãLêxkÇΈh5t×ò$¯#¸Ø©J=ve÷òuXV£ JvèŽû&8¡_<ñD.S/OÚ™qФÏöñ”.¯½˜B½ýðQgtÌþGס%ï<—餙ûù¥ n,9պؤÓÄÍÚ6kyÖvpêF%?6íÁ`­ ðvŒ·Óγƒ7=¤ÈöšÃ|é4’¡C–óKÎØÁ$HsL'ÕÔ ÛÛP±:X¿>ϧ(!S«¢ó¾¡÷Ñ™SAÓÜ#ÞiqÑÆ0+'PG<¥ Sâ.­w55ô†$q¹Ìâi Kô·Jáâ¶¥„âÉ­ór·‹ðñùC;ˆä¥“aCä"e®ÐÏt—àKÆ+xë¼»!±PG{ÐSÂy÷,Wt7õëØ—|ßÒÞŠþŸ;‹\ë[v&ÙåMóeÍZû|Y¨t×¼:ŒMlßL¡xV"GÇ8’!*Ž.ÅñQ.üönæÓQ1bK;¬×­¬í}N’?’åÕ¯n¹ãÊæú”ÕgÜ31ÙÝfoºDYpåšݲÈevmˆ·/_ë7Å]þ˜ÜÀ•¡õÖìÿ"«Ž_å,¿ƒ~F‚ 3û[Ù€Ák˜ Ía˜O¨eÙwœêFÞ0?FK°ÛA.œØÐüjÚÀšèd*³5BõÄøGÀ‘É«‡g«ÇgÂXJ¨PÀ†œ·h¾œéûÝ0EØûÔ `iþ„õÎåd›‘|µ@Øí¡êZV-Í}wŠnSïjªÊœ&:¥$£¸E‹zœD1ºÚ¹ãúàò¹N>fô¤õU)ˆ%u`æøwuƒ|VH9V|¤Y}úÒÈ`!¬úAâŸÑQþŒB˜¢Ój$óÛ3Sy,£àg¬Ï7“ÿU˜_µ!øãc^y °²oz™mö˜‰c›Ü† +F:ëÂÈý!5pÉH-ƒqŽËôPËü‹Ÿ.x›ÿ{ §yX*VmË‘„ÜÊéìäŠÉi÷׳oØ® Uo3µy÷þ)Xd4̫׭w„“—nÞÚ Yu`£³Ì“ìôȾe,NrT– ,O­WV ì‘°úù-EréÕ~ˆä‡Y.P¹Œt˜ZTœ3'­O«§®®1ìó/wûX‰FRAh°O§ûÅ%ž›F‘Mmeƒ®¤Å¶_Ó×ï(!öìšÄv~ÕÂÃ/(WÎ\Ÿ" C~ÎeÀI{Ê{°Ã©”æÐz­8>ŒY•IÔ! S¾v¼ÃãC;ekó@6òÔhÿ’Fñà7¾k?½C8ÅZJ:+ñrþÈoíûêÈ·ð/E IJödT‘–JàøžÊ(c#èN šÒ¸>aÑð%L_y†º SSg{ü8½¿)±×£ÏØø¡ï“LAŠKRÝÝ3yàuql$Ycœ–^zÙL“îšç'¢P05µï=JRÌ×Cqçtÿ=A‘ ¸^ÝdÕ~³óEæStþè‘ÌË0ÒÜYo›‹eb;*á$müúGp1à}uÕÕ=Á—›öEK7ÜoŽ -&6al©#GÝãY…¶›¼6ºS8.—@VˆG¬ˆÝ•äÈ=SPË3s›ª3 ù£Fº‹tT8¯ØŽáX>}Ôïª c÷Åõ‰0-E+ÊjÿÓ .ìQúüÊ3¡ŸX³²ØÊLÆJ_sÔïÓ.4çîò×B>€ñekKdê-Éxƒ _ô†î2·Üí@c ðAg%gÓ "Gޤ/´¥³ãÉFr^4õÇ*a>†”åÙÏ30ß_™Wé— µ=>½Ä9‹…L,â%>2릠cÄ@AeÛDû;3ê¿ÆZ¦B—Ö‡3*ù†VÍ€~Œ¹šé%G?¾õÓ:ÖÐÛäêK!¸@ÄÓiþú`Ê·?hôŒe£@ƒ‚?†¨Gy‚•Qû0&¨3y ¡"âHpëô‰i­¸÷­}êËÔ^´§M`ukè~v‚Û½UiÔž2£¡‹{°+oÇbø{OHJ«xç×lÛ«ÿ'Œ}‹í†©(e <ÆQ*D<¯°HØÉæ›Á1Sv=ùJ¬øHÌàÚ´|,ðÀÆ®øG´u¿£—b/uÏâÈ.K6E‹йE3LŒwê“~áòÆ[À‚Žî©äýð0L‰ RX,“gYöŽ–¦ü}>±âôV}Hj)w@¥:7zaÅ Óý»[añ¸Î…è„þ°#fq^pR#ÛvLÆ€ïÂVr+SÀq¥öoƒƒ}„""d´ÇTgµö†1a£¿ðNŸß¹è§¢ðxÒGI„'š97ºÂíÞØö—™’1Òþˆû7OÓÙ +Š—›ñ‡ài/ª–èòh¤uy–\÷ŽÛ0†¤ã[+YÜÀ°c/n‰Íëü'oèÇ‚Ãp̃—‘ÝzvÂî J¨Þ„wk雷CÔ•Ç‚¥S­îÁ& õ½¦l¼Ù A§L€]ß#uïÖãéq‚ Ä…æ[²€$ñÏ+ajtÓU®¶ *¼Aqw’Œ¶-Œ¸Tˆ*1µC·Ñÿü .®=Ûd'GíhuÔ ÓÖÂcØÐ¡EÚ”ãq.P±)%Äü1e6šÕ>»ó²ší S¥m$1ÛL¶,ŸÒi»2yVuzy ,[QÌâ~u.›|*,Ÿïr“°ÙÎɧ‚Èef •Es‘w\’uN=©zäIYÖ'¿P©ÕÒ˜üŒr^€6þp?y3ý`2ˆsÙ€M¬\è ÃxœÁ‚ñzS¾·×òL,#’Ü„"Y¼h3…À‹d˜”yˆ)›º¦cžïÌU =¢¼ºv&¨ÈÀU»¿nM[ç»ãÔk§·/_¸"ƒäOVÌÇ2!ðî¡kÿ÷±"]÷8(sø¡åµ®DÙ²ÚÚë²ñ¬©g4­ôËTèèÓ5ËG2ÀYh¬¸T\åk>›œ`:î2SÛøÊóÛ¨0À>œä^_‰f舄'åƒtÇ{ý¬ö~uêÄZŒ¿R°ã»O(OÔ¢Ö®éP°]ˆÒcsþq¬#œù/ÏH¬&Y4Õ}ÔÜDWrþr2ù™ÕêfD¦Z(ÜS÷¶ú0Ñu áQ²i¯C›18õ#tp‡þ É5VŽ : µ¾-~^Þc^n=ddd0 aÁsP ÙGìšKSe?fŠAÃPé‘GÌQ¯^gèUӯŻËþÿIÛó•6Û°gYú·í9ßÈ c(ˆXåRŒ­÷:› [¶:–ÀZ ¤Y‹h—@pJ‘ÍçoÏ«§}bv˜ŒdœCpl·TÚ±·Õ8„dðâfK™Ê[ñèÛbÎ/)«® ª«—ÜWûfª5B°¿î^«ÞÑ¥×äæ@ÁGÑrqÈþÍOÙÂÊy½ñ•ë¿×Íwᧃ8¬cÿ½ÔfR‹—½Ês·ÎØŠÈå“‹Ì©CíЉS&¶á/w¨ž<Šd"ƒÈ·é&ù§ sDÿçÕ{»SSM­³x8üìÎSÿ¹fµ«“îMU)mPÚ<¨;µ.Wú-l³Z'„¯SÌ•v!]eMìò^oÙcL…î*_DsT„ ¤ ã n£ÉK•Jr¶ˆ;Uõ›ƒ5Î &"sð¼÷»áÕ‚O9Åì†û`´7òSUlÇs˜W¿ö¹ÒÃÑÈ/˵¡†Ë9n>!äq¿ûƒ¬eÖš…9v=#±Ã`DzzpiÔÏÿ<Úª~ÚÕ¼Þ··¥n“?¯e¡‘¡Ö.QÀ‚…A©N³ƒŒäBÿ’2è]…Þ’°µC†= û òª’Žf|€oUZko2È«¿»ÝŒi5)êN^Õ´:6SŒxˆ†VŸ´ºÈt­ ðoz±2[’ÙlÂìW´°h [»êåOîÍäGVóÆþfÕC¤p IæPa$šgÙwEXc¦‘iÈNiÄ‹ãCvÛîÖìË: ªY}¾¬DŸLZ=d§§w“Iw&Ë‘=ùp Öy¹ƒíü–]W"üŰ)1h­[ñÎL´’ÆEI‰ÿá2ñø^1 ÈóA; “øm† î1ê73Z+¡˜ñÖ®°–œçž…;¶O[Á>;d‡$µÂ9ˆþ—Â'Hö£õÔ-µŽ¥É–(_v'åî°to-ï½:p›$€äÕT&b£Da{ã䌈g'€ÚªI‘³ôÊÄcÔ“öCçÙºTþÝ0# ¾4%>$Šñ7Åù‰q„ò(É…„JÒb™»'Šƒ§ÀÄéò£ ƉËÙ¦xЈ8­ñlyän°’6–œ(2F™]Àq_Î/ÓEý‹¥sNHfB{õéY;b,»@ b¢4ØFL©˜kÝØé`ûvW3a/°ß6r s„õ f5·ê!?¡>úèwç2ùd ëý¹féI·™àÙòÓɇ0 ›VÆ?ë]Ôú.KP–€°)û{•Ý$j;ט.zs í w`<³®¸ñÖ~©žþàGÇ¡qóå vþÐA¯·×›pt òø‰¬lvÝ¿8$sŽyfæYÏvÎEø‡#˜!ƒ„ÐÎØÌ^¸}­WÝ^ѧuqâ9 ’Ýp'ff›]‹>-ãÓoÂ? é}• G2 a®4 ¬7„«’÷_4€,DkV ð#[¡Ö8›öåËþªldu—©¢³FÈö)RoÒÜëwÍÚªÆÃAÞþÀÈx|Ÿ ^—œÉþÒìýW!1qÀOÙÑÏð£û÷y$6$»ùÝžÖ >ÝÒKÇ >"f}Θì ¨A °¨·žÙo[®õc‘r ªÎ¥t*öªõÆÜê£{óßaôñŠ™Ÿ×¹ü<VÞÙc½Ì‡Nù’»Í@\-4mwÜÛ¾ˆ Úc«"E,eãõy&„ÏðÔ”’–“ÖÎ*u*ˆØJi.É ãß 28ÆÝ â}Ì–7ú0¦Eù•GÓµg²3d0]Ùñ;R'ð&Wbk¿£u¢¤ÙîÉ/;j+Ù÷þ‘<ÀcíÕ “¼Óh #m 飋4\ÕB­ ¸-^ßþˆ[øÏåI‰g&,Œ|LèŽ$±®Œ¡Íå¯þŠÀ2`w}!èëÓ0fØ0¢‰“Àx5”¡˜l÷ÉQû®âýQÿCJhÈOM®îêZü㉵Ã²Š²Ó²Æè/1´’ì}H÷þ\Ë)Ñëd–âöG Õà~³©-ôsŒªüvPûò¶¹5³9t›vÂùúî)ë OV½!¿%)j@›ßÿéOÆ¿Dwb"YîcÒ÷ŸQô‹¬x# ·h—?`2xLËOç^ Éêeñ‹1ûDì7bˆet¾{ÄOß7ZèX@?’¬Å!âcظxv;Œô Òñc  3“ò·7Ìpœšý.‚q»b®­!ÇÀb+ÉÒÏ5¦n^ °‚`Š9ND0-׆G {4¦Èü88óãÓ(ë€ Ñë¥ÇÞ·M£®Æ¼±õ³;íÐÕs‡·k e¹è1ÖÝ¡CúZ±¿ÞpNzk"Úcë“ú¦–‰ïûÚ"EÉ„z×ÈÙå–¯´Î?rh¢÷gÂØ –êŒâ¥Â6³³ ,êçðw&g„º-™øcÆ´@²ž{;+t°"{‘Ø5ÉRx¨g²¨8øË±0Æzy˜éº|n`€M¯|2EpÙ«ÌOV=\ñ1×2–ƒ}›+k½nFçl=EpÎÍ‘]ýc‚^ A¸žhFømÜ­BÜ^š¹Aq»¡a ´,+ƒbû›^£µG¯^ã÷y}añ;°/{7h—Ñß b¯HL{³„Tm·YÆÝçML‚ì©=¯]EvÇOÊ‹Æïì ­†ý:ÕèÖ_žœõC_Ú©|е°-×±±KC· DŽ¥µ÷|ŽùWnÙêXVS@ ÍOâàg¸ÁU¤©Jç5yæl¹³í?”Ê誳¾ëŽ«<W_ó‹ÌK†Æj1¹hçÝpȧ—Ù¿³²á%"ï©%2Tþs\9Nþm\ù¿ÄcÑ_³5ßêøSrDÿËtÖÉó9Éq:’gÿs)+óYúŸÉs$ÏÊÿ5ñAùF4©àê2$$Ð?Ê“)Ñ‚N`k³šJ¹ÌÌå«zÿûŽöÝ£—2ßø¿¯ŽÜ¿˜Ë€e¤·8††çká4¬mã½N WÌ01-\ðÞäËÛÄôòh°µ ç-&Aâ“íäíRn1è7„1ß¿ÉØ¸siâ€yÒô‘fe)1™F¶ýq™ºX/ ï^d f¿œaùg¬‰&ѬÈ0NK®iy9k3 d›R}%¹‚aŒf’¥îç×S¤†ÔŠžƒŸþ•Æ´P®ÊÀ·ÎÄÛjÉ"Î -Æ—¶o;Àb´@ñÞ {=¶#ßö\|i†m ›ËB„hذ'lÀ©2?H¢A{À¾®0@P*Ž¿4³ÒèÚ ª·(LÅÁz›9ó¹:RäÅXÉâà†ÐÉq"9Rxi¦>-ÇÒÓZ`ú÷3µºkáíºøðœ™ìŠašq™ºEö`—¡þ%ç Ò®ŸšÅLIü‚´ªÊI&eÃ,Ä´)µ”ºGH ®6Ž¡›‰5³Ü©1–ι$‡N„1àÈ0FŒcžmb í§A­A?&j:d›¶ÐÆNws€piÝrËØÿ1žžF‡0R×Ç=ù§¯LƒXú.&Bý.lË7c úµ×ë¤`ûXhcT*˽ӰÂVÂüu·—Ó=©?EìJVŸ4æèMM'c,ÓoÕ\ÆùTÒ\ãfÆöøÿÌäÀ3#O„)m´d3f3E[ºô¼/ÐÞimAP°’Šqúp_D°#ÜÜÒÊ s!™&2R­Ñ P&grú„æƒF2Ê‘Á½„ƒ9g¾fòÜÇœÂ̪]¯óI:3cŽÇücPË–j3F»ý“[RGÖ(ª2#{è]"æ´ƒ·üð~Ë:Æ)I»l!ÇÒéµývÓõ¨v·%Øm¾KlâY4Š„9S©¶Þ¤:êåŒðöï‹aÌ6ˆ™gÏÕÆOÏ64—ÆDˆ3’)Ej¢íOƒÊçé.£Y“Ëä!GJf1¥¶¼†ò1ÿÜËVõŠ׌>¦â|2ñ³I\e¼~.(W’Ûè*¹%ųÍB$á÷Žw®µµ1Gì¬B¢« Ãtë©¢oÆ`Q š'ÓþºPpî†ID¢§{åYó·×tz[g?ª7Ù”EBB‹<›&»ù®.ê§81ï /6Vü¡ô ”mJÒF0•ic(zys%ð>†© fdÂí6™È‚„YdˆkôÐÞɹ],ÃžÓ .ûœµ1Λ.‹MXpÚ*›u@ç³¾¥0ÆïéÄâä¬o@³ã*Hî¤Kw²[ÜCOÍ*³a¥9o=0¥7Ã:e{¢ðÍp¾‡E'T€/óNÁû` kY{ϧ&LMès[ó±èÔWý¾Àìj9Tô“iXœf;aûÓ´ …üûÉKÀn‘dÊzÑFçútkú~‰Tܲ-×Ì©¶±¦«MËÐ7Ô9ñ ½6'³ ˆ(J‘pn_픲—Ïmv‡-d²ôáúc3§5DÒãÉDÐËl¦ÁÆo4‰ÍñÅîiùÍ>ø×Úy‡€©NŒè¥j¸2ó¼wßÛSÆÁéA?2¯yåÙ|òüAq^¿%‡1šß–yKÀ¦¾¦$E[%‘H'à4¦»dyƒab-G6ÛØýÚööt£˜$T„±øTïÀ ©ô¶¿as6LdpY»¬ýêwÎ÷œ•Éü¦õ‚ù=¢0”@oºm"ÌRëÏC1¡ßÐ1– Äl/ÇT„Ö{$»¶ÓK3WÔAf ‘ýL„þ“Ú÷Ÿu>W³Æ“"êbU„šï^<«Å³œ–…·H~è¢à~×±[³_ψ-PÝôoô‡rL%€yë߈ÊäO\Nõ(f³¸z¤b•cÖÌfˆý|'ãî[qJËë»û¢iK1ŒÃÚ“‘‹Iüÿ¿ú?Å^k‰ •oojÅø€Ë²žµè,mUKUÅ2]ƾâƒÙQc*Cj›müóO¶)dßgÑô52XŠŠÃv4½Ýy[˜5cË5|Õ¶!C3_ 0:7ø¿7l¦|?ÍMï?˜›Oi ýù?²Ãˆý-ÂX…¢DÏ€DêPرª TT˜àÖ~Gù±cé)+ËÁySdVE>òÕ/­J¤@iÄÁº²–X×–:•,Í”_Y;g妿ÀñûÌíxû·Âˆ~º¨Æo~œÞÒ”="!ÑÖöˆíiSËàØñ‚¿4åa wïÝb±[r€«ôÆÞÇ«—±$ZÇûãd=̹ j¯tÂú€°mòÅyNs§‰Hã)}°¹Z[ÄTÒÌ/Q~4Lµ½à‰´=úZ”'§1­_¼G—H߉²]>¦³Ûè—œ Ë)ôùÚo±OeFNäâJ@m¡ÁVÙù¸ƒCP=šÚn${&úUpèÚíO£Ï_ÔvWâ‰ôa¬æY–4½Ìp)r ØBy>ÉÉRæä^BU¶aj·:ȦqïàšŸ­nŠº WŽIùö5ºd÷<¬VÐ Ïò ”bÅÿb§Üów»ŸWº ó02`­@m¸Û[h€0ôkLßìÅ¢üðÑý’Ùd}D³“qÊÐ^÷M°FMŽû¼clûSÄeEg>–xÕÚaéc:ù¸=#~‚§â¸¶l›#“ÑMf‘¡êñ‘0Ñê ».n¿·¨YY¦U{dRÑ5H^зÐR•Nþ_/?ËFÚk´æ^ ÚÊ+©äé ²„M¦,ÝÚvÁh$Å;·7î pâËž½J¶Ê¯ n ½Ûu)&#gŽŽCÅhú 9 VÌŽEþ`N_é”ÏäÞmÊcO„ÍÐià\ ø3z‚,ÿÃrÍfÉw” ë1\€ 2G£(öE2ê.VèP³ÎUXù{[~_ž4ª{KC™Æ"Jx|”4lòóŒjʇîäÅ ¥«[Óá¨=¤DŠ`ŸU÷¶‚è© ôú´ëŸ €éD¨´+ž,éù½Â§ ˆM9…ÛùGž™¸MuÅ”¥)¾L?Áò0ŒË P)Pp%éq¯ùw‚u*ª]—§È-ãN¾±"ïD€,­4Ær)s$cϪ{¸ÁŸ¦k%*±’!Û\©[/KtÔ«³h ñÖ­B9§Vê%NÈ6{lªŒ3róóC©¼Wc¨6òêæÇµÇÿO ÙͪMöc§¡r͸?]\]¾è¶3¨±óÝZæô0ÍBþýÏûðDhN£µsV£ ÊW¢âõ¾øŠØ± ‡œsÌ[!Þä—%¼x¼÷”wæ“Ä#(M%ÌüÚÙ½³qLPÁB5¨sÙF§L ( ¶-½êc3 ‚ozS¶îáÆ¡kÛ‹3_DÄAÏ #BáMˆ¿¶âRK“UÙU¶žgðZÛÎ ¢!¢×Zù—Ä’¥_ýŒ”ÆEõ–Ä…}:»­b0ÖF Ëy¨2™Ð´:§%o’ïD&òI¬ãì±²–¯ÒE¸Ðut£‚wšñÓL,öZ¤R?~QôpiúeÕ]Þt\Ã/G'Œ°ë…@Õ¬eb8¬q‹î:ê97#‰ú¡Ž¾èšÖ"=÷œ@g* «åºîLaÆ-ÌAˆmyÝ+®"ÂcÞtªXï«O0m&lM=÷ ¶4®+ÂŽ8¢æ÷T’Ìo"3f *¤hCHì«5µqZm™èUp형#σ¨Fê>ÒšÕ°D†¬ÚwN§M~ êÛÁXÆ­¬pö£€d!>°bXY¯©Ž„µnsù½Ó†Ðƒ&ë³5]Å݉â'=‘ÕSF¶õM?ÑMj@ÞÜœõb‰jRê0V¢éY궯$ÓÈXeŸ6LE&jóV7{qE¸<þ,ŒäÊoæpyk¼§´ëe Èbžv,K™ÀÞ!—2ì¯ÚcÛDVvÏk‡1Q´ŠIeìö bŬ&Ë„’yŽT³1a¡½gˆ{ Ȇ Ÿ“À”úLÛ–Ðpm6; _1Êì4ñ‚,Q3¯ÓñżZ>ñ2N¬Ž’qЍjßja¡¿fãíÆuù¢ ÆÌÊÝC7“—Hw)Ñ_}:3i<Æ 1±áyuí²ö‡Ù™ãrøkt)â€]õ„c²ôPµ’=ÚeÚc868ÜÊÔ«À&ËÞ3¸ÙÒ“ò•Uï$ÞhÉ‘u€„,‰„düÈ †Õ°ÛŽ(Hïò  fÎÙs_î’û£âãÅyuó çãe”Mg~Öâ°Áý[½Î)[Cy~˜’ˆX‚Çiµå‰"ìa³8&O#­Î˜e.Ÿí»¥}½Ø!a‘á¤ækþ>㶉T´•z“…Þ8`õŠˆHu‹L©Õ@ÝÔ×âÛ' Ÿ¢"W-çP"£6_Ïù#4K#æØ|EÆÈ»Å_vû^>yF*\Ü|Â?öª¸õVŒsÆqGgøþ:í*ìç}p²®IvñE`»Õ\;séʹ…V%%"îr8WŸYØ4¨Ûy?{î«¿…£o¸iœÚ–ºÊaæ}‰j|,³Â <Ö1SMl3iüÍi³kY9…¡ãÙ^ÑGºö^ô4ò_¢~Y»š‰é .iõyPg¾%žÞïÖžÕv¸½”u[À‚—ç$[uizàa]§p@¹o‚֊ ìj’äZ%H¹ü)ATç!¡àãgpí——j]èðaw‘ÄÞæ Û’!™ÜŽÅqذ'ˆ¦ÝÒù"š œÁãz[oc‹»å·3,ñ¡'&ØWc˜?rX?ç<+Îê¯-§U {ÿjØ>•ÓX¥žóæÓ[¦&SÖÑäè“fÒ&¨׺œØUjåY: #¨¿7œ>/gG0w‡ƒ`¥ ±· ›*Me‡»b;‰eI /ä%ÐÌeNYðÖÍT·Îaæ6ú/„ìßvþ?ð^,îÜ÷ÉÍ1¹Öb™ðïÿo3ý.On\ž|äòÿs)ãröŸ¸<åØŒhö¿Þ©e:ϲ¨ã‹nù¤Ý2ü3gˆ ¯Ü)«¢¦SþÇC*éöé·êp¥qË (:'G…eœ¨ã“7 tÐòŸßEâE—룡ï_,‘­—Öè@]ú9¶2(Ÿã.6ÝfÕ]bÐ<¹õ«6»þæÛì3ëF“Kž‘ѳàòʪÊh¤äGŸ¡€.Ö·˜U÷Ÿò¤î=ˆÿÏ;OfäyóAr4KŒž,MPB|­têËCLåGmñxÉ… f@Jà›ûE¹.³j×Y§ù ï-ýVÓð&,sS?\ÂÚWv=3§‰Íyˆ¹47èem? õdÿâþò–Ý£•™cpoXbygy›°5‚Íe*Øm`»›K‹ÛñâŽ#haBáúÒ´óH-Ó7PÑô~vÿÊR²hFgã·œ°:¿p,èÈíÿºù)Ž9dý9­.¸¢Ê掷°ÜOφ’±«Ë&ò°ì0;…½Cÿ6%§›!x äñå†áQ,ûÀ„X Œ|3¨ø”Y­éˆÕ˜ {O3·‘äÒP°æ¦–˜ 唦¾Y{HÄNBè4¦íÝŽ~q?ò³U›»éP× E’ËXŸÒ¤T”È‚ðlèp`iÖ“iÙÄ2·}kôY š0'ä½­l÷H!o2 nâO»‘_@VfZ½û¼F…ÀaÍ7–+˜yF Mô†¡¾ŒNV@Ö±ni‰)Ogñ@{õRù2«17v¸é\³nßév–vÜËÙé–0Â¥P,†1ôÔu<»^æüŸ2ˆ÷»E bËžÎÒQv;LÍRIîb)+—çy¯&ZxüÃd"o'#'ÜÕÉJT!/ïYó{Êâ´|b¯àU£Ý ow™}³¥oúŸ§–•ª1ð¹éú23"0¦Ÿc‰CÏa%jÛ0ÖxwïdÂÍù`,\jæbà-ö˜yÛU·fôÑ7l§5cp«U¦Y×Tóã·ôª‘]=‹1¼ÐÉx¿s«½ªî¢Æu9$v^1ïÕ€á„Ç:~> D…¸fKskƒyüNù+û þ‹%ê}Ä8,L&×ûY}û¶àMô«Áo yõþÉäòW¢0Ò¥Y)G™š2ÚåQóë¶Æ†œ°Ë»ò}uÿxïfêˆíc’×ò FÅuSvN‘f~o”ÐÛ(·“ÒOz¥Ôý¢»K¿wŒªCï c‚>/å§*kP»kFÔÆwËo.Å“20á~‹T›è°§DÓ×õaœ?Z‹F² fË+‡ò­§Ô¶LÂ0û„ §54Â&ÆbÁHS‹›ecbcì«aä"d;öKƒ3U8›ÑTœOACråg;RD±ÏK!,hˆï÷»h¬%.°~J7<6÷¢¿Ë@ºô¬·0>C‰Vô8‡f"$|•”èüDwÜZi¥Ü?1ÙÝ$ëš30¥êòò´y”Fk4ËvþäèRA¬a: »;i³¨wÄË2{¬3oÀ ÈV§ËWv$mîmêa ºŠs"„F™YÒ:þ„–/•<õ³‡j÷"ðÙ‘cK æÕ)T˜8­ø/N,3Ö¾uBZwRØ8ÏòÔÒþ55Éásd6§÷«åQ;ÖžîZÌó€oõgüb5í#y’G­$ãsËûöòNeªûcÙô{mv~)—0óXàÕ7žk"»¸4aà9[-ëÇ7|G{·&ýœ©ƒcctã=w®.uÕfA½ÏìôD‘˜Ëýðóôñ¶>zGÞÐy£Eumù~‡ò;ËÙSå·®4ìöõ%Ž^·5I4",#½¾Ä†äÌ$»n„k,߸H]ù˜¼©Ø*Áâe²}Wÿ•^0ìÒsšGÓÞ ÆDV6WÃ@¢7<šÙÍåÃÛcy‘æôq‘yÖÞ’‡MtÜ3a¢FtÞAX+o/eú5Žò€”‰rN£7½³|µƼ3>ºÝ×p­îáWÚúÜ‚)½ ï‘{Ø=Dz-ñâdng*Ò;“(ÚGt‰Pû=ÒX6Lo†”‹"¿ku(Ü*¢ƒ·$ÓçiÑõ†,7’ÿ<®<ä˜{>cÉÛú+yúu ˜‘†HC”^¿3}¥.þ¼C‹â#%W>DÙ…8¯«÷¥~B´h.ûëp»|Gë‚äÁÒÎe4û¹²®ð-xžïã­ã(Gó’•-°BÙ]œt¦¸™,¹ÎÌí»R'/¢`2z¬…`ÝôpÈYÉ`VS¹Ìßj@\ž¸¾ôÆA ¿þ\à 5o ?œ÷ž°ue⮎õL¥..áùˆ¤²JLõžEé‘ z[2œÊêçÇ ~™£³K;"e G¹ÏÎMË7ÄÕrŸI‰r¨>¦ºÄ¿òÅÒp^V½b€­<ºÐrÕýé¥,ëy° ŽMû€7ø>ßITø îa(wðžÊ첞_ž2•Rç$v™„‹Uc½ƒî£À:}&¥Œx\imw²{ôû\NüônÌQ¨‚uÁCÂr4©–èLˤý$_µ—Gt¶ëø©¤Ü¸b¯`V9jb ³tÜßÞrFÓ©¨ý XW>ù6-A!,ñíYšÃ<,SÑœ¥¢Éö†abDàI¥à0ræ¯Õvଓü§r§öIËÊkoM¢7eµó膫¡ë²=X áâ ™l̶Ҽ¶R.ôXÝ´5  Ë}Oz+ܞɶlj Tp±,aÓŸž= c›cë–%÷}ȹ§#pÃ~Ô3.ò˜ØZeg%RÚ4¯NiÎÓQËTR’±ÔÌάA%² HÜa¼ˆ}èŠùdrŒ/ÓBç ë'ƺÀÍmúÔ7tf)º#nûÝ3W«ŸUê/¸rzo˜ï„2ïèÇv 2ýí!PBnµ6`i±äK ’õY½ì'k¹A~YËJ7ì­Ëxµ’á ¦8›5¯^èÇRùEÌŠ§Ý×É¥ÇÛid¼œäáÖ½€gOu@k£vÂ’Aàéù}ôˆˆËÙ{ÁJ¨áôöc¾Áá 8q…²zí@bW<ú2›ož¿,­)š]#힟Qú½>©^íc æ`ë¶ÓÀ¤úêO“t¬,¶–Žk1¤ŸÌäˆ~]œÕqý®B}gËXÀÂæŸ×À9d›<ˆC ¥n„(Y*;<8ö0ä$.½¼C_ÿžŽq'›r¬¾˜gçð &t\k«d° ÂØI‹Æ;1TöœeCží«îè,FEí}Zë ?†mp1HÃæ¬o¹Pêԕßq×6ôœT¾ù¶­ÝËåçÏï%LƒZqFøþÅRaìe¿™Ü—a«2V—8/ãÅ,^.ÊSݧˆ)Õ°³œ?DŽ5=…ë¶lq³x`g%€ØTiô±«[cRñC”gõ)Yæ3“ºÛw&+žô6Œ”þ ²„tF=$²Ccmqpè®Seí°;gÃÐ…žòˆ±vüHêðW²6­xm+¦Üuw&¿«¥êŽÓ¦­,¬4yrÜ¥…®BE7:¦R`·Þï}v$­ƒ¤"º‚–dEkž]œá:<ð.¾U½yèNä]»oÄZ¢kਡE2\!Ùƒqá5›†xb 5(œá`ïJºl†Ñ?(Vöö]à®?1á¯1‚KÖÝb~ðÚ1'U ÁzrИѳjÍáSÑ&þÓ•Ý#]}þ”$`ÑÃBfš\;)ó$XÀ—g_¡Emöë6ÙÍ×~º×/¤Kr üÊ$ ûí¶&ÉT£óØm0✹Á¦SswŒÎ>>U Mƒ8Ö;mÖæy=¸’W‡~O¢ËÙ^h)>“F…2FΊîòhò*‡ìÖáJêhF>3ùôƒÑ'x0'èË`xñ-ÅNÕ³Sª·]àŸRɯàmÿ§ÚwoÚßh&Œß)÷õÑ=xÕæ¢«£ŸW]s$\žxè/»Ö ÛwÃÓ(œ•¥ÀLç»Í6}{ êà¦ldæIšµhÛ&Ü|>¾ÁÌWu¾4C¶¦ ´c”¬$[7¢0Ìéo‚¸åð<Ð…ºyäfÉ!éTnê/¤Ïª ˜þ±mƆCò}—ôª ŽLðÁ` W«1 ‹ïª?{ÃH'×»›–:N¿~%M.¢†aéÿ„±~(iÞÀ7˜9È`¤«Úd¡1õ_éäeÄÂû5ëíR,*ò‚™Í‰ÆýëÄ8ÃÚee«Œ´W±#]ü–é ¾ì5KËÂ2”»¦ÍŠ“0¶q&F„3è1ÒÿÈÂXß´QjÅoÝ_”ïÑ·±Û3-‚`!QŽš»£0S¼M#ãa[~«HÆtD¶O†A€ÖÇ&äÈxÈvô®J#zÁŽªŒíòšéx²˜e'¤žÍ`îákS}>,F+©ÆêÙž£/Ö…±‹XIF¤ñi1¼k)˃õåÁMj6~&¹Hnö–%0°íYÊ¥dåøü_çmƒ WšLíDr?öaßàȲ0n<'¼qtÇø„Í™E\ ƨç#һܭl"ZßÒKÇÝÚÝž¶§•Ô‡À ‚“ù>7jMá²/´Ùùi# #ãPflÑfõ"óµA‰ŽpæL…zÖ×IÖn¦ÅIv>ªuP:SË6æ“#z˜Piu$b“²6à–t^TÅÛ*M3¹t•‡`Ïñ7šdsÁϬjÝ3Õ‚*1{ÇE´;d÷éüN!Ûovèx¶'L½Õsƒýèjð»Fĵ c£4Í• ÷—Adq#Œ™¬eùMËÞh;PŒa— š{°ƒX°zwºQ²B–‹B¶Dô]›5Ø¡Euk›G·Šw¸cI“+Ìõàt·0xµ]LàŠýg>Rý[>ÒäÇWhþ2*ˆ‹Ý‡5ýpù˜Ê:á(‹H8Jb'%Éÿ\ÊÓ8ÿOŃ’TSŽ‹èMš$éùõJ~DLV÷••3 3o~–ªïú2°íWoüãS$b7÷„``Ó,·²£Ý *í·!öÛæ½tÖdtloH(ÉMD±ˆG «”Sk %ÆI=»§˜tkióàõÙ™Ý~„‡ò‹žÙ„NY´_ Nt+’k S6Dއ ÃA-ð±,ŸŽó¨æ#9l5æ8ùøUP7ʧ÷š¾ÄPí÷ l¸¢ìÍ^_A´³Äƒñ¦å׵ʖ]ýÐ#S|´£¯ænÙní2Uµrïž”‡i²c#¹Y™«{qΧİ2£J™\ÖÖÈ1E\÷Ãie¹tF’sÓ|f°?øìﵺÑéhY$÷xΗL¾þÖÁf—(JhŽ-îÎ;Óæ,>ÝÎ>^ÖåîìG’€þРýAȩޱºŽ½ã©ýá3yK0Ëf,Ç;ézÎN}ÕÛÂDöI‚תÖÝ4ýè O-IÙµ"ß&n­^*¤zvDú ‡¸¯«G{={ bÄÓÁ8ßÌ/ÈØ¸K¾NJ“v£e°øÕk7ÎÁîO"i3B ¬-²Aö£+néhMÎr Cócv,Ì‘œ“„chÔyôã6Â7‹€éM{¸§c]!†0œà<³ÙS›²ñ×ó§A)­wñ/ñÌÈZa §’c>hFñ…#žÅæ*Ë’(¥íIŸÌÒÌi>°­NÆ­>^X Ö[¡w6ò›a̱$ïu-=ƒ5ͨ'z˜fï’ÿ)]M6MCå$Î õF0–Ù×w„ÝÍ´•ô¦üþ¤#(cÏd‚ÄJ-?ùFv)¶Å„Œô‚‹‹µØËt>nÿéï>)ý×WD¯FM)@Q÷usˆ9‘ü ¯4¯>¶Ù€Uéq¬ÊyPóƒw¦xCg·.JAŽcÇÙdÒZ‹ó¥"ζ)M–8Ží5Ì]”<ФB¡;Ø_•Wå©B£µã)ǃêÝÊBÅ?ÞØ­/”R¯¥ÆbåÝcqF‹!Ë..áÑzÊOOKùÁ9Þ°Ee”Q¾Ó·Œuûk9±ÑÍ·Lå¾é† =ZÁBÄêy—U?‡´ÌÙ-=' ¬k¶šŠ¼V©ÈD︊øoß_:8Ø2ò4æ?îþ¢Ù„\㠪׽©Y‡èËèò‹0jáé'AY úflùR¯ŠsýÖáCTÉ49Ð\H}οì?i“8ôޤiöÖzbó  è˜â.½4\Ë"€¸¯ÑmÁm½äJ9*HqÔ¬ÈqÞ®‚=ß46ÃÅubƒ†œ^‰©ùÞ­† -¦bevúÑh[S5î±/–n•—&¶êÚá•0±ðSÓ¶žWÊB\ISËè¹ãè—L ޶B¬×•îèæ{&€»CŒ­tÞ33³ySXÔÁìå{Ý”‘‘f ޝèðdO—áò?l¥>=G¹#Ë¿@kKÒ}üF>I$6´·ä¢¹P‡±(XGÄ]/0 Á´».c ?Šì^¾­_°Ön’ñCÒãÓé‰Ë‹²²#øGã…Ý”î^8ÿ—izn׈[íHÇj·ÃØŽèB'þgç<ýâžG.ÙÂNÚî-qȈÖ=–3a¬%hy”KáQ0D½ÜßêG·b9˜]yAî/ “r-5$kxèqÍl‹žô,žŽ³Í¬ôÈ©ôÔŠ¬@ÎA±F]£ÒƒFÌ<™9$’ÆÍ"/“‹ÿÍ,ϲaßcëÚx2Á#\µÙOXÙý[§ W¯¿¡$»‚ùtÒ¾¯nÙ–Oþ”ší²ôßZ,¥qÐh®ÛHO‚È6÷µ¨K#€[ XÈ™ P×a ¿4·™äÁ–‘wÿóôqÔ<¦ëÒÌœLÇÍv¡vŸ;/!Ö^'IﯼX9íQüýæ$q‡Œ±‹Ò¬]·/”Í4^?@‚ˆ)H®z=E ‡>±â~„Ÿã8Ë“#lœ†=²AZ ÎzD1l×aìÃP'ÇH…|mGÝ|þ#e3À7Ï5´áÍ­½n/?/ÖD„wÆ¡y¾¶456¥•õÅ’@s,D"x¹Ãuöt_ßôûqNæ%Ò5IñÈýW7nû:]ròËΫk1ÊÙö®–on:À«á20LÀ­î˜a_ÂT÷¸ó@*§ÜÙj;õEùrçNÉŸø¿Fâ[Üÿô7eLTÞDZ‹.³†Z]GŠÖ¹&i#·þº«i^aÙ ¶aq½Ì‡í>8 c9/“a§ßL¿Ø*nèÊÉù[Ø·a¿ÆÐ+`Ë …ޮ@G­Ò3bê¹Ê°óì×a (k'¬o”d!uBº}ï ûÄvÜL¥ås†˜.™–}ËÏÜ„hC]âëþ«ánÒ;@ϦÄë²e§‡0;6ÑX9K[k˜K^ؽËEî_ìé»1ÿ“.ýR×ú.ûëœ^¯™¹ó 4Ó¼¥CØH˜â9I*èŸÚ3|–4èÛ '¥¼¨ü7bkdûÙ­Êdô*¯$Y²ê–¦Ã’¢>(‰Mþ>KRªŸÿ/a®Ù¿ sý÷ˆ‘™ŒæsK÷ÚU.d÷Ê=ó6LÿǹþK,±8Ø|Œƒeÿs)Ÿ§YñŸâ`ùØDãÿƒËàù®Q¾ƒ‘”›:8 ô´Aü¼ÆŠz0ú5üVVÖsÊ£ ˆ(ãµç{µC)Î2éX=çËùþÊ^R•®TŲ+«2;P]ÃÍóZBÎºŽ™±3c辕‚ÍÝË>­>bæT×WwOg‡qŠh ”V¿÷윾NdžLÌ\k?¯öAX¨´_ÔÚ¥£’Ú»D}uî$?ýbFðP ý—­—øŠÅžÉÔba6¼)qït$ÏýÔæ:óñrÇ»]|CS¦^Ø 6uî3£C‹a—_¤À‰çËCºG„ì"ùRìpÁkæÿ`ËÌ”&ãUë&3øºþ 3íÈ ãûÜ4<…ÉiÍì9ÖÔú•.íÊÚê|íå·ÛBYR9µ¸ék ú¥DEØ“f-È(ŠcdxÔ¤;¬7ÃZ¯tºM—Ïȧ[ì±)›Õs@®Ý\!ø%ÔÁJóm¹ÁöÃTtå)ê…I¶)¡þ.¼—íE-c–¦‰ ÇÞš+âvÏ~.ìU†|"Ô‚ 9 6)܆âö‚…Xµh8&C¬ÌçMnzYM¸ÚÌÇb¿ 9<ÖìÈÍ›K’ÁÛ^Ú?à#Ö[r· e¿sš#ØB5ÈngG'´—¾V­%ˆ<‚V/rl%–éM2éò¾\©n!;‡Éã{Òðè| KqXìeüH“ ›œôöãDGf åêaS6<>E ï ]”£ŽÂ£ÙI?‡AŒÓÅ·1ÍCT»¨Ĩt¬Éº³í\Ëröž·f®ålP¶€„kÜž[މ¤ f°ó·†Æ3R…ê[SÝ™À*l3;Ê (¾ÅÞ?‡üƒ-eÍà"Œ•¦#ÙIœ¥ y!Ê)¬0È"Zɵ›¦€j^D·Yµ¹Þ艅.»ù/ž¶Ç×§uýZÁêžÌ—añÁÜ0å8IUìºoa°[û•±J–hßý^(LЯýíx2œ†wïæ`³3¼+K»´ªG‹fcÚÂ}ƒ9ÇT&x“Ý©…äô‰ILlZ9‰öÀŽ…í ¸ân‚Ê8Böp °bÔ>¾öñds²“ü´mß °„›Íb,L"* ÔÇNO30? #'žò ÖÃßóaÿióÅ øåUÚC™W++aóÔÜŽGVàøe„"bÜSÅÚ#láê„(•¬¿} cõLR<5›)}ÄûÇQaüì§ØjÛ_Ù®ì»WÈ„Ðl’Muñ…! ƲúH”4ïgdv³2‘ @…ñÃÅäw¬ð ÆÛÿª [=*°Òq¥ÿ©(¥$è•a,±ÜË¿Ž½Žþa˜ïƒ±……ý…‰Åâ•§Ñ7Sub‰u.z™a.û¼w=r Óhqtí¢Fæk°Â‡üù.½ÿjanjǒpË÷ ²±6¦‡ŒíØ=ÖY€é׸†eñòÓiè–H;íûîÎúI±5^¬[<ùaJÜÆ<·½êÒÄÏ“Ù@èîÆ¯I¿–DìI&–Ï|Ì=»›6lw˜‚fÈyAÊHv{6arì”éÞ­‡àò ¼PÓõZøœ »úŠl†©ÌlaúvÌpGC“Þ8îٗ㋺DGgÏØlŒ¯…ÏØÑ¦ÃÃ!ÔT*°}Ð¥ÔÈÒ8 j®ÐÅïÞJ8ƒd5Öá.~êPò8ÔÒ0°´qOqS{`;@ÚZOCE´z¤µnãqBbjõù:•ñ‘¿¿RÀŠ'²Ý ¸ IŸNŽÉìÅk]ˆâImg§Û`¬\YÀ„œø9´òpê¾Ë °ß€Ø\Ú×òßœ¾¶ŸulñÈ+.?þá^âz|L>Y(÷õi݆Vn¹_Ý>ýãq:˜WÄAÁyVæ°ýréøfocD´ÏáÃ¯šŽ°˜N~r Sƒ­+¼d[íEaì^ÜöÖ{añÆŒG禓EPN Ë—`5afÇŠ¦š÷Ì®‹¥ú¼;E‹ý³Êí¨„Óaì£Ôëi” 2¥á i¨zsÖk°@žßÐHFF›†ÔWĦ=“¬ÄÝxÜ}f‹ÎÌó"»6–LF^‹G“ß> ¥ÙÃó0²—¬ôú𿣠d:åÜô`§-5öòXÂ?¾s¼Ò[WU‰]ç¾`Šuv¶jNcqÁ|²¼" ¼ö•mØù¯e%¦%ÿP>k­ý\o'Ö0`5Èþýø†¥B4í|8€¼žu{\oâ2ìÄÕGK›x»RhÇ‹¸ ³|D£qg‹ßU£PºƒÑM¿Ž^®YZh«ál«Î%K•Ô:w >5ÈmIY… ÐÑšƒ6Dÿ>¥ C~ãØ7Y˜u9¯@ü´;>}Í]™2/¿úVL`½·í¯OÌú.qfn Hèç¨ÊH 8³ë46JV8ØÐÔÃ÷‚•ÕêËû~]ï›ÐQ0 hš²2žl+L ¢ëU?L§WR½L¤øÏñ ªŠkšYÎ'µ³ecNØ:ŽU?P‚œTmˆPÜó/…©µêR²²+Š)€eaç7´¹‘‰®¯®TÓb­Äû–3}åSX+@(nŠ߉L’ô¹P“8Ÿ.\OCÏ áé´°–6ÓK;¿Œp IÌNN£ij¥D1¯!¢Æ½§Žä]0¶äÀ×ä[Qõ«`¾;ËÓ°ŽÜ¾~+ #4Íü9V «µ.e1H–…0™HaB§7ñ7 ϸ¬ÈV" «qF1Î]wÞ³IÀ¬µÜ‘Tû6Ø…9uÓ±]Ìj6VÃ…#Æo%·ž+…=´Ç‚*A`Üó*á(Öß×UM£Ÿ¢&»—Aì³×©†ö'kÝÂNª­Ë–­öÊG³,iõ>ú ”Œ‘Pry`W·s‘ƒh´<‡ÞñS¶L©ø)/¯ x;«q}2Í竎‰q=µ÷áÓ‰ëó™1¦Žº–ó7r"©VÛɆ"o­ó‹tå>Oã#a5®%ÄDZ;ùÃ. m-B'ïwÄ^¬jí½eS 2i0¥vVœo:Ôסá3~ôþØì¤´6,‚“O¾6ý¨†VÚù7³:“#¬—™Ù+YݹO2xf’Í´€™æ4³TôìõñdBãúìb0Š~›±nôé¦/|@)ÌÅ2ä±»1À‰8Ù˜pxxúÄPIEœÔЍç!\›ºz£Èz‡ ÔÏWH+á1š`æâÞ¶{lfLxÀDèÝs|mq5HFfºý¬$|ú@òÎáGië§¡[—ìâ1 SÇÑyÆ;òãДڃÅãLÞhÞ¾ÕÅÛÚâÍ-·ãlHthÚx/ÏùŽ5çJ‚}˜Uõ! Ð5|nƒùޚܬ”$¶w¾Þ~ êórÙ¬•Ú”ÛÞêïÉÆ*šú”L…Ùîj¾ôðæVŸ>;·«úu$ˆ“ºoÆ?"Ún¸„ÖóVÿû狞 爙q&¡“íz1£WÃ^'°}B<çÙζù).,ã}HÙ†rñLòžU¿ØcfºyÛéë£Å»µV•é¸ÉèÕÙg7´iûî8)ÅÐrÛcª6[ܱ½³(ÛóG:¥”j]‹cL4€Kù)ìÑÃgVÌ0lçÑ·V¶çJúýcÚ­˜ÁAÁ\\XSÐDÁò@"Ä é¬£F#¼€-· ºV™wC¬k°©áÿ›#ôLvhYí“ÎB¨¼7èžRÃ&¦muö¶^›Qì J·0³Å:fU6 ØôŸ»‚×ZÿǦAS€XZŽ>ÑÑ0õ˜Cã¯ÞÊ4| cšKÛÜóe–^vS€gÉ¥ Ýš›“z,Û§Röutà€/Nä´ c;©¡—/\ÌÏLꧨÆ`R~! B,¯Âã½L^±¦EØÆá¶NÛ|ÃðñÝÄU?f-øs&=~ŽÿÏÐ2b،٠ÉÛ61`âHƒ( mÇhnŒCid±‹2jR »¨ö#ñÕ.½#´ðK™R/Oh×ãŽmŽa’W¹®ˆµp5Û0–3dÎlÂ%Wrz;X1š†)QòŠëé=”˜ýòÛˉÜ08ˆÂoI.³èLm+Ýg7xO2o^Az,Ÿ¦î%gòy$"6§FL÷f¿úÙ\‘îÑ–KYðN+È çâ<¶…‰[¬ž´Î»`óéÆ:ÁŸãXïÇǵÚa.Ï…}¨GDNîhóI”x DNQî^&6YŸEÃàŽ}.ü³üizcìÉ”Ѹœû—f¹àÏ(0ÓhÆ´ FtÒC˜’emدaÌ6e6}‡j€ƒ8€c ÇL$½(KrÕÉr:£ˆ¥h.\!1ÒÊU0ÝÙ!¹Æ’½uþÊÊS]t4[zÍ}UX€é‰¥rÞü|²ÛÚ|B[ËòÃéå.[@o¦Õ§_)¢ûËå·“aê ¡Úãp+ŠsË}÷'YÜG'ÖV/ùx‰mî’ñ£iÊq—üêò‹ ¯×ÆcÝÀÚo~NšsX{ &%w—;ñÅçykz‹6= ‘P|ÐD2³?µ“ÕæÈ~å²KH[ s˜?Y>€p†yƒ.®p*lÊÇÖÏt/kÔdZù^cj®Ç‹zyø€ EÐõ›9hÀž -jÇ ³–2ÇÔ¤mX%t¸Îåý2 #粌ÒWŽÃÇ}zkaœ*søvi±èàžÆÙýZþZѼC­L?»ÍÿÎä—è‹#[KDÛç“ÁûÇš·b ©ë_– èäaäÂ|dEÙ‡åüË7†ôžškh©žfÊš•wyÇ÷¥©}ØÎóngç|ŽX‹1Dé@¨]XJn*ÂôçßQMhX£0kx¬Áõ¼åù·åa”ÿ†Qò߸ “ÀÝ“¤rRµ{ò˜(rªÿ/Sü"IjD’Ò‰$i"IçÿH’ÆN$Iâÿçe®¢š [Jµ×ì—V ¢£xQC‰ÄmNc Ui_%ËýXÅ:qî‰ó[1…ªMÕϹ¢¨ù˜˽¶­Ì‘c¹ ÜÇÐaÿÅî %bfÖ0ÍÅåÖÝïT˜<«OÔç\‘LðEì œq‚eCú|WôÀ›OK;‹8%á¹RXú˜æó}sùlTÕhnËâ€8{§o,ô Æ6á¦Â¦W%Í>ÉX<¢‹ÖLÌ$ù°Y÷«žCõåð$—›$y±Ôá€ñ“¸7Ûø˜·‡C ñàvPµÃÒ~³p)–|¸±|†x[]zç'|”/]ªÌ^(ºµ5`–¦KV$«ºkòÌ÷æÜptiÿe–weÖëói‰Úâ …!™¼ÀJH:ábUGöU¨#©¶E+ÂØ]Èr[”CfÞh*+ìLMËlö”FTP-w¦÷—ƒ¨ˆìwÛ,q‚¨'XQ`òWYoDî K¦a¡ø(¾Ì ‹ÌI3>{uò*òA*,À¶…Š·Ä$J¹rŸËª XÊŬF¼øì/« 8u9¸µñ˵û©:`ADþY¥½5™%쬘ÒgI„GÕ¯ÜoÆFP)kâWT»Mºú!ÀN2Øè^‚ték¥²êj·5Úñæ›%’ì×M,ž™BïÁ ¢Á_jf¿<þ=¨ N$¿‚¾&Ósx o3Ýš@SÐp]!éÐ>û  ™KøXɃ@²šëˆ ¦ ÚHòÒx*“òsʬb‚j+îy¯µãfÿÁÒ3‡Ñ¸Í'çÚœ[ŸVGeËSŠˆ⿈×ïâm”[eÄ“Ð]aBÉgΞ;3ˆGV£ô¨|x8á†67+ÅíÚ`5‹|cí9ÍÆéJÇ4 V5Ô܆;—W¶ÝêvŠÃðÜ?½nŠì7½ò9@஘³{VnžL;EÑ)² ]˜©‹›²éHü ߯뜖êC…ç¯„Õ â£DXÆmŠî«£YRÔº•~ø¾xvQò±”yꇜ%ÊÀ"Ë;:Z°ÒúQþ,ˆÅÄv7Þ§N§_éPœ·Ë‘$‘vŒ÷¼Y?·Á:@Ê­cÅÁÈnuþéÌÉ´Á粄V®êTGÕÖÓé¼&œÃÀ¾Ï¥4ŒWŒøéÞ‘U¦B‘ʉœ$wŽ[¶òÍcÒõMª£ßÍšÛ8¤d®MˆC¶Ž¤É±0õÓ‰ÓP#ë–ɬÁÝ¿ÖrsnˆÉ2¯NP·s½o(jå8\ó(FûAf,8›h~'ŒMæÔÍ~U7?Mñjnì I=ˆçÔÑg=jô#zñà–轫¶Ã¿$*Äí%wH14íÑä‰&'P_¾ÌE²g²|`wÈJ<q¡¯ªišº 5ö ÿ…êoUIëèsÅ»ôä@ WÝn)`ß’é ³¶Cý0©®]Š¥''<²NŽáÒwÙäh¸>8PG1cƒÆ¹âŽ\«ØOM&¯ ¦uʃá좙…1#„Ø{v¤9Ͳ/Úy¬3Nç?Z³[þÖ¹k؆–;*; Uz¨¼*­Ž·µ_¹LŽ,¯ø¶”,äEzjªÖ±Í+wb‡t´!•æ‡Xõ4B?s»ÁžãÅéS!@ĪþCšÙ½ôaåAœ±kéÁZÖ<΂Âùwn †ß0¹ÿ5ŠX[Xš‘¤]ÕY«CçWÈîÇÈÕ˜ýʼnÓ9¤àG#292²?¤n£ ‰9­FÒ‚<]ÿýÞN×J@nÜ'¿a Žß.þJ:3`ÝÑœ–M>41Ò‹"rˆ_§ko“ÍGâpõí×…ÙòÖÌr:Ý}4dŒ£Þ»0Ð yœu­˜ˆ+ÃÒ”Z]¢bù Œ5Yü% c»©¦±­Ž‘¿Áb½oØ{îà™1ïXšƒ»iªÞ©A¤"µ:[‘u7 c‰µÜ‡ŒJ§ÜëFÞ“üf+8òºó.©?Ÿë—GÓËôz9Ï]˜”ÁË‹Úæ¾Žƒîw§a¤§æÓQÁš³ #ïÛ³·-=ñ¦b"¾Î‰­¨ÉÓmå(™¸Æj+¬>9ÈŒDqLÒ”®ùâv“-bª#ô;q¤ÕèúDÞŽá¤‡ÂØ—(‘|¬ãÒ¾k•å>ºö Á…d¹FÆNݛƒlµ‘‰Î´ÇR­ßå·#å¦$Ä«‡öÃÓ Í§61dµ\$6þûg_òµÂ²,'”†‘Å>h©®n‚·vòXGÖu#ÑŸÃÓQ¡®æL™¹îYme­ÓHöOìÍM…/óÕdÍýàgníóµ ÝN¸>üwò‡nA¿vÀL_½-ÂX]¢žmÞÇ4uîÔué™­Îô]×°bÇNN·Ëï-:²eÇcd^cÍd!² ñÚÑò.‹Z!RÈb9€}³¦Þ>L•ÍõÎV7X/ÌTmG®a1½3^´1º±[Øç²)f?»Ü©Î-ÂÍ#®~Q]É’vïQIt—XƒÙïc¡· Ÿm93Ž‘K¾šµµ)¹!›À®®æg§oѽ{´<ëó„iiñT&(ÐÞ›'6&t¢d€â8Z‚+àY}tíý$æš2ßîþU³Q½ð IPü9±0<2´›6Á• Z‘ØòÁϧ“*nÞɶkBFÓ¶@ÇÌ…ÄÕUp͆'Ó-Ž”æ¸^/ˆ5©âÓ3ÍÍáÂD7ÇáìÈb¡KS„±ZNQnø=¼nr¤`Õ½ÌNöX -1©?6=ÂÓ÷éqL½°{d÷ÎìÂöÃÀ—.Ãtޱc‰µ7å»iX_r£61 4´ tÃòß#³5¹Íˆ{Q¼šDä@Û×]ðN®PY¹ÁÉ{çÒâð2+KW4ú!_ŒìÓ\^²—Á]É…ÕM÷€…\½”9Ku繑L‹uóú.3SÛŸôQ3ËÆ¢SåÁgY ¼ð-Añ*÷¬qæodîS‘¸7ÛÛ¹pMÓ“¤ó –17Á7"±tÝV¢8æÊùéäøðV~±_7ão7ö6gYløò‹µbºú7¾ÉÄ\Öp”;ö›Gß:3¢vÀ¬ N+Mæ@³$FÃ=PJx¹Ìtä„O(Ðâi­Êª)ØÀ¸i®)8ã)Òõßé ?œqQë/2rÅoÞ V±™ÉW½kâ×ßÂDïŸÙ4EMÌ*°‰yÞ>Ud}-ĆœBY‘åJ¬0Mø8 §T&ŽÈ@p1ÖØÑ1*ϦͧÍX[´uû† ï©<œÆÀ…#áÝ)øÊ&.Ç/§a¬2 bØg{íõzïAˆ-5#Ëó‘|E";¨ç¸%7ÈMÖö`¬>Z~ V`’%æ?þm"F ÛÉÊþŒåÎÛîjQp—É'mÀñáZJüÓ¥BÍ+FÛò;Ayf½D‘›¤£‘=ªÂìlohÑt—$¾w{íQTï© UV¦Y Ͼz~.l|K*E\ÛM6›{÷¸¤c’[êž6g¹|ý)¢õËËO\ñni@+L%Ž—N®ÿ6Y§wÂÔ6¾OÖ2ƘÿÖˆ™Ú*Ó( ZLK>cdŠüÔ·v%bt/”½4&±ag(0•MŒgáIŸO†P3-^é0ÜßÀ8ÛóÓ‰ˆŠ5±CPb)šf´åÎ0"˜ÜÚ@1©_‘ ÈOÐZ—öí¤ûÒjr#®l{Z÷¢µ }›Ú‘ÃÛ[)•f?ºÈarþˆhvúœÎ7N_wpyW 7W-býì/kûd,¼ [&R¿tæªåwàj±÷ /„nÁvaÀþæñò¦þˆ8Þà ×TŽ„p´î§º«Éme (Äk©Öùfpêì,_ž·}23 Æ÷œ(Ç¡÷èlH~Ó|²£ùßQa¶,N,ÃöM7]à«ÔðÙ¹[§–ÇŽ»­÷uû‘Þ¼ æCS{ô“iT÷{TN£K®ŸA÷7œ/·±ºèóS]óüé¹åE©—h°à(³ìi”\X~¶;ã¨9õ[Æ„{g—aóå„x1.Ÿ×ú(ˆ|ŠÆ6m-D*¶%Ë: —u>ú™¶2^Å Ê/9 š½5ÅÞO’X |öÓ€zvu¹ÿ‹gbô{)Ìúwl‰˜¿¦×BèHBŽñ¼þºîÅÉ¥à,^º°x|c‰€I7ÚÙ‘D6è ò Š13«ÝkÇ'èkÇÄ9iK3.|3„k6£Gï wõãò €Y˜Þú/Ñþ4ù7Ñþÿ wyS:A5¨#@N\<ÿu~ÿêŸ1ÔŸ¦c¨ö?—ò,ŽÒÿ©/Åi–D1þcž­þöŸ‚ÿsþÏÿw5õ’ÝX/È]S$ò/ ã·Xö;Ö4R±6ý kkǰcÿ¤N½µ×êÚØF(|[}k6¶ÑÑÅÖ\ÆÊ4l”{ìb¶æÃÊ€)X*B~Æ·CRœ—å· ‡‚‘*Èx”ú BJ^f¹vê`üPà5k¶Ä·§H®l£>@q”€ò¸‚R›%[æ¿1« ¡È\—"i°‘â(I›ü ¦þ0WÙº![ã&g_ ÎN=¨áû¥·òÚ¼ÿš‹Ü9ÑinR¼¾Æ°XÔVì>É»ßß–1å•ìƒ!È´ÃuŠÆpHº*¹‚‡?­ÂX%ÖB¬¿ôK¼ì`ÜìÌžÜð¸P#µóyBöÜ¥s”ý«´kúŽwL).Q‹Í™n}¿i–ª'XFÍõêÞÉOØOK2‘ªkl‹qøÚ¾bÅT]ɱöbe«ÌΘ¼‰ŸLæÕFCßzx¡òöˆH£êä0fÛC‰¬ŽrÐôãïRx9-3‰ÓtÝ<·‡}®Ë #^ ë Î@æÌÎyÙL4*ŒÆîŒ`¿©'éGšé_mNqRm< cBK W§=k kÊ¥×êÚSì%³Kn}.±PÕ†úú+Pð‡¢fÈM*zûÝLg Ÿ1½QœÔî}|ý"ûB}¨;,6ä‡úü†/®ß3×b!—«Ÿ^’l€fî[m¬Õþ PÙÖßËL5¶ù{XÔë¾ðþ̬)E6eqŒMˆpƒêÒ»o H»0»±çÑÑÛî,ÜABùåt‹xoKrH aÎcû˯âÓBôR«÷»¬NýWO¶î!|­{Z§Ç:ª±ï¡^·ÈR¨¬³Ê9|… ©ÅjRxH$;¢²§ùÑ̲^0?ÇÓÉ¥“JÚ½¾`öÚmÉ Î‡Ã”ŒvÈɪèƒbð’²]:š‰+udþá‘fñ]<‚wH\ÁEަÎÈýC¬¤V5#ep-–Šdϳ0¶ÖcÚe+(Z{¥#9r{+L% [³ÆÓž›L±C}%Œ¹Úú/Y“EýIS0x¨ëÝ(‰±II¸*YK}WÆ.)¬ª; w)¢Óé^Aî !jÛ6Xm‘2Å8&»­È*[ØEÈ­.wëð 7ñI³ßY ¬¦Ó…Åg5ÌÈŒ-tÜ”ï%OÀº(iŽ•aP Õ’ísÓä Rua2˜"Í~óÊ´çj à\¤áôEérœ—Gªû?§£ˆcIómÆOž®itž ,<ƒ=i†ðé­áù[žä¨^T&í†b·^„µ ëõXn‚®”º´-Ú/Õd¿e#F©¤Bç t°xëy7·2"P¹èpZÿ"̈jà1\â¡ÖÁmY·ÙöçñC`ÊZy”jéHk9| VÜ€•Ö±È3D®¢žêëKÏY‹¢ûÜL|'–j‹…®œ5se%;¯}×§#ýä]3pŒÛöŸ4†g¢ƹ[‘!AõÀA•È}õ]L®7mÆOÏ YÉ孓ĆêØqï E×¶ÞBðŽÞiåå•:ÀÕ „±Ð9Œ)9ì¾Vˆef&ðÀæD©Št³ãÁÊg0XKãÉ’u­‰7-kæfc¢|búSXvp.¼ƒUÈq5t’bR(…òjŠ)Â$çdr¡:³L®ïðåƒl&¶»}ÔåÌûj‚–Ú{™eÛ>Á©@Šn>îfnÑᝠù<œE&k²µƒ5$½³@)˜Z€~”.‘D롃¦}zÏDçÛh¶<†·äñmì¬ ×ô]°¬Í¡8Æò@;=u&"øi1•Í8Ô,ªºˆ©²>$S¤«ÙÉYîÖ‹|ïcp$¨µ“ œCyC=«1Å7Ї=æ{4HS®›Š ”MÀ|´S\6‹ß¶ÃÙë§W¶•E¼ØÀ^±|yÖ%òÀ‹ë yVyØ^>aiù|:›ðcÖ:˜½bŒf˜u1{læ´í8ÀÖû,•Öåêƒç,¾{ú¦é¨EÎê²Í‹ŒÕöTÄ«³µ ۇݠòRB3§|¦6 ^j=ÙÿÅLƒføn ‘Iª¬¥U„1ɉ+×Úd›á/Š G·I´rî$cL¢Fà×X“„‚*¥Ñ<‚ €0™g˜1úÊt‰ÈT˜ÉöDʤ$K«_JQÇîÚÁ4Dc ×ß%î~9†pqó«4~¯H%‰#­ØÜ´ÉffAY¡w¶ÛÌæ%ôÒN!mš;2:Ûhó7‡5Z >-ÝF"s™Ós"GU-tëH—ÈÎÌ€Š cyÅýx­¡j`®Þ+V´0ñç´aì9¡D÷­åç(ŒÁ£éööˆÃZrœ¸š<ŸrÈ~½ÖŒ±Î«ÿƹÑVÑr|ß> Þ¹e“*y#‚ScáZ=ܶ‚€÷¡©‘È)›Õ õ}Èv¿ûþV I' ülª1e{`©i”ç*€÷cíêôÞGâ9‚›<‡PäËw_Dã¯Ìuåâã‡%Îz­¶ÇI°Â‘{È`BQ¨Í¹×~°¢ó7eÍÑe|ã’Wù¤Ö¬ç­™în'“{ÐÅ™®0&1ktl<5+5¬W8°ìµAu'`_Þ–ÅÏd{z8RýŒ¶ûEöGà;"ÃMùX`ћ°ð]v…ÑÓ§<ÿà †­Ø{vÑ X'÷° S„¡ý‹£^ I)¸'̯e#3Ÿ6Tf~i”Y™6_ƒ8ÆLâX™ ­»Ji|daÆØÐYìë#ê1Âì‹ògŸTt:bѕǽ%[¤Aͯ²[ìÇfïÖŽ¸[̹’`iBßC¾‚¼¬ÓT @…È>±hÀ´ö ¢®ºÏÝ"¨Q…€¶áq±æÑ ›ÄP& LzÌÊ5‰ãU0ën—fY¥}|‚á’<Š®Ðü  –ÆݾòO²â˜ÔÂÌtÇãø r‚(+3ÓZ”GÀN;¾ºãR'¶è¦¸‘{©O¯âûAر’m*È™A½bE%Ù´ãX3 äªY°¦’ìc;«µ6AÄ^î…h¼u‚¦‚u½S?)°±†{]Ôö¨•öE;¦ëëõ&Ytv@ ª•_S}“-Âf™h - ¼AƒâOž7â˼º sÙÈ>gåœbZU¬…ÇÀLsd@"ääÕîûi}5ÒÑò¾iÒÍR0ï‰'!5ÓÍ«-s îyÝ®gÑV/Í®ì˜#–mNSíRpØédô±,êa>„±,UL-ÊdDçÃÿë×»tÅ&W#÷¡ ËÓ̯ï•Ü⸲OÖ2 $5j¤6 .&bÀe“>?a9"(I×°°£Ñ˶òåñµ­O5¬U|‚-žOcuFþáÇ¿MÚPÒ²dUÁ0åôú¶K_0¥iµ!Þû›‘Æ“¼z›Ë8ª 'Ä1¼Iâv -¶ž]´>à’|Õ–°·r´dÚ“GöÓ‹ˆ:É‹S¤wƒª 0“¿§“‹™"ðM-Õ‰Gö1’ L@1”’ð]Dè7<àA8 Y‡íòÊ«OZå9 wõæ2¡§¿éa‚‚cU°,ô¼`=¸…õg3 yñ v3-÷,Ïáfl»ž{^Ùñ+ó}K¿+ZÊÈGvcÿ9¸$yü›}Ä¢ÖÙSˇéŽ,©<7¿k¦8òÙãÊäÉA#¶ôC? »rŽxgŸ´Ìge”ÐiÞD– DPHw¢Ž¦«œ„)ϵÿr5˜ÊŽëkûUOÿŽÓÍciÀEöàžxZrkD½ÚþvÅl¨~/Ý@u•ãÓË·?=ÒºïÄ.wϲÊÙ:#ú ÑVNéAäfòœÞ[—æçÆ+I²}æÜÒd‹þ™ÐÚDEì"ï/,¹Ša0‰,” 8§…Pû0†VKý¯xO»·½²ÜoòÇàÒÿBçÈþm;f—5r÷hÏ+ ¨¯¯ï/.wÞÆ /ÎdA¤&«ÉYžéRZ³ê1þŽ¼Èº¼ÎÔ‘#5"Ç܈ùHä(@ä˜Gs9â"ýÅJçoDÿïËœR®QÏ?YyÁÞ6¯Ôˆ¡eÉÍ:ËÜ'(XuÞ …±‘#ÖÆ7ÞoOW º]Í3fáyHµì/Mgœ°Ysç”y98¿ö¨ãRF¡ èÍi¨¦ßaJ0él]ý 3^ ÕÑŸ¾òešv/ÔËj(݇”9°°pºéíî(Ê¿Ñ,.Ù±÷:¹N™2ãšÙÍE³xböÛzÝWRýÝ|Vm ùý|>¤H¦3k ÐetÕDÆùši2ùKD6ñI»°­#ºñ×rš…;LV[\µOÆvÕÍÊãÿXj|9\Fæ®G¦Ù÷G¿îµ“ãY•ÍÃHú.Eô7÷¸ÝA‹&õ jfx˜„‰(Ý!VúóŒ¤rJz7”’çlCûIHÑæ3†Mì~¯kµ§Ð>¬}l«ØdÕáYg9nN Lü6]uò¾G-÷Ú Ðº £›þ^¥"ù£šš¡bç€,²Ö@‡ÉþÄ{EafJ¦ÂŒK”ÇtêAÄl-‘Ϩ6Ôz7¦ï=¡+jW…}ÁÏdÍq#^˜ÈߣïÃDM!d°¡…¯es•fün…±$0ÄbÓ(¦W++ŽE7kP@»Ô%öí½Ó³˜î™š÷Os3Xè¿UD¢×ý^9ï„ÃèYl‡me=pZÄsc“üuÈ7™‡zyÆdê˜EÃ{JšýÔÒåíaìƒׇx¾%b­z_cKäܨ!)€ƒôKì„àhéRtã(Oí!‚Z„â]Âvó‹ìùÃìW…B^ž·Õ²7lkùÕÔÖ8R…ÞŒq´û·§Ÿaà‡ýa—ÅÉr~1¬¥‚ çµ5ÈÛsˆôu°Vhû¢ÑËú‚s@`±cŽS;ß¼Óñ®—ûÚ0–b¦7]ÑvMè—3{Ïäë£$xìx»±4¯bH\ͽ¾#ž7Ý­l÷òˆiøZ‡ÃÖXÿGX°åÞ¥ùÉÄk’„0µi%ýÊNÿô;L-ɱ¹¥(Q¤Ú…©œ?\}ô5jÀc˜ìì!#cØåib|Î,„hyûn¹ÛCóò®ÞSNã%Á¼®Hꈔr¨™>ìF*†›ÁÑûö„|¸=§Ëä_Wbï´,_^9'—G8ç§ÈéXy, ñx.@Ó>Õ­ºýXÓøçOô)–Õc/™Eâ%ßÊ(÷)EÁk"£Fa’2¬7bÎÚ¬”s†°¨Š~þX_é“£­Ç¸zøˆL~¸ã“ ûP‘²”©i%±®êöÇ)Ô5bcxâ ³_þtrjypǬ*žø_™‰–ZÊnK΃PQú@œ¾Â§ÅìÙe"Gû­‰•YÞ»Õ…þŽp,øÌ‚´5û™`È%êoã-ºîçfÅL"þaæð™þ¨dzÖ3ûVÒû¤>ê«Ý{h·KïÜ$ÌΉ—‘"PõòhPÖfe®Ó`Áôƒf ÄÌÕŠ†—é÷ƒ“bkU«žÂ«÷e/½¶½R1㈠LO`r÷Qã7A’Í‚Çm‹ÁØ$ ‘Œ)âÏ+‘uô%¿yeSæ ÏNø¤w[íï?çéÏ7&H(ÙÈ TœNЇ™mÚ"A׫¥†uPðéŸíØ¥{m1Ã8…~žÆbMØð ™’v¼È˜Ðzf])®[FlL9ìtu±#Xna/@:­a››Á è“z{KÞ´¬‹jxó¹ºÔ 3N¤i{ßÒ6&E$3÷K­+‘ìMàZ²¾Ïªhu T½è‡,ÎÍÚ‰ÙÅêÈ¥É.ëÝ 4°>TVà€ñ îO4&:Rá²ïû*[ݵ:ÿAXÎÀvh´'0¶¸Ä,ú*ÔŽ"XZ7J«Å±0r“jD@ˆ•Í×5‹“B“x`hcÎ1=ÌúÅ©+a¢‹&B’a û—…Äal6/H·PiñP6ÒxÝ5â0”]ÙÒWNÙ^vkôÝ’©1Cµã«¬æÁ®ee®Y%ƒžÖ4`À1þ +ÓÇ0·fS%l*–Ä8*›ïrrð3): §TŠbº× RçÈ"an5Ö=úEƒR¼Xæó"T„1nÈöd©-šÂíªW x/bAÞ­bÒ:ºX¯yÑô-UwØ_ÇvŠå¤Ì|$k8Öá<>|Ùäî$˜`—°ê)¤loìè£Ç)Ò5]Ó™ Ü¶G9pÙÇ÷\%ÂE¡ÂrÅ¡¼T½qqóÛöº›UJ¤1þÐ ¿X ‘§¾º•:PÕüš.Û/QÇ*Òkˆ˜çvzúC‡ ?+¡peòþ·¤bxè·´zu¥È·±O¾^ c¦b‘3tU¹ÂáŸ?Þ c]«•)ëÕ A üâÒÒ|3˜HQ3+wÀêüF&Žç@ÕÞ¨™OüN{€W'c¨õHh÷6¨pþ£ S_°TÑŠE5ywÜ7-×ѱͳŒi¾ž ^þ¯1DgÌ‚I3–9óÆ:¬§uÌmIlôÍ×|ý°:œýÖþ1K«Ök²ZAëbô܇Š+¾FªÎ_[?Üèá¹Ä9ÃÞÎ]f}2- :t7@‘ÄbOý˜´G,QÙ”§ ¹Öüûþça¬­g8 ¥nã˜á¥Ïì€Ý²•‘»¯^Ãvò­é±Ì¡¨©NýšPkÖÜ£àú,n™Æw¨„kÖ¶†8G·8øz‚ˆô>ì­}¹.g~:,òÁî?§Ì \xÊRP™Ÿñ4&Jw]BFÎ^‡†–œ»9ñƼÒAæß˜øqbš:}nà©ÙiÍÁÅxÙ]óeØcKÓg§pÔ÷†©KDfZÒ;ư1xgÂV\o¿4ø¬íý °œo2YƒØÒcå¦z¿î°´dâ°`H`ãÑ¿‹>_bhx—0¿¾©)òlNyì×&ŒIœÍ 7|Ô— w=8¸eU1<Â0˜„¶†)[˜5…˜YºÆÿú0–t*ó›Ž^ÕŸ&̳Ój›j=ϳHM *éHMøîl?Ö‚$Ù7Þxæ€ùq[é(öUÇ’cOë Ç ¹Ñê?Ç'gÑ¿OÆÙ9š.ÇíÄ{еÍ2·ý¸tjùÐNŽ%!ÛÊBKECr^¶[€yZV‚5Œü…J#ôL"‰žžX1Z4DžUFßdN”…¥æà|ÔâZ’wÀŠL9F°mÊ•…°i’n’ݤïÐGºc‹væ€ñúÄÕ«C{Q:‚6y\}0_©ëª‡1¾Ì(ö&ÝhKCÜ]}Fð‡T2©ç%{±Æ(Ú³üÔ·ÒÛCÞ›â &Ý!{õ)úôÅD*oЂé²?0É SfÛjïBåÇur­I0‰ÄšŽfÙ×m] 'ܘ;¸ÅÝ>ór«ú[O«ãÿçEÕÙ—ê°@Êö¹l˜ùr×é?Õ}*æLv7qLØEù.ŠàÔ2‹þ£ ›¦8Œï Ðy û!ÞD‘ˆ~yk¯;f0´LhŒ¿mH®x1T/Ãq‰¿Ÿ‘ t<™‚–îÍ\?ÜŸ‚ò)YĘ·ü&#÷§àÔÐ՘߄±_ ‡a,à}˜Œ²‡êokñûÛö/Ë^Qœseœ~ÅCU\›µrX :—Ð:>ôÅÌÁìòôbµL–‹$J»2Œ%ŸÙ™³£j`ãÝ… Û{Á†Ä“+á~rߨn– S ¹ ÓZŽö'ü‰"t;Œ%Ùãâ„6ë™Ó®Ì£O¬ü£˜1ž&¯ÞÁVn”K=Dr‡¤ôNáߘ): öLHè  :eÕƒH`J*Â1XÉ^Ž©/!ÌÊÙgb•/¥\xöòDZ±J{O¯€ùņ˜spà™ó#mUBzç0•eéÆsCôºùøÒÆ-ôÄ–sí ʈùËc7Ò-*ÀÂè¼IÃØü$nŽ5Õ+Ðò¨?­z¤æ<;{ûÃCWVÇÎ ÒöPXŠK…ÁböLΡ n`\ÙJwÊàŽ–»OiН;«=׃e…u$ºi¹x–Ì-ƒ¼a£x_—a¾x}z¥PÛ{áW¬ Îܱӹ©<%­þräêÎûÛ§•ÔĬb¬™Ómtß¶º‘ÑΤ•ûÕG…íGä'ÁbTh¹d`™)ÑX¸ ÞÜ—zlÚ r ìyð,Ô;;…þV(y#°’øúc¹«ÚhŸ¦éñðÎÄG¶ó»¾§ƒ:×icÚà‰º'Òé<‘àII Éõv'øn¥ûÝ0]ý"]ûwúÆMÈïÞÓC;§¶r‚êfÐÇzáÁÓÍYý0*Õ˜¸{Æš"ØfÜ?ëJ粘 Z°1Ím¹l_²ï„©€#«H±é7Z}öû„êAü±Ek-ï;‘õÁ*g«Ec&‚EÁ¶–ZëîÆôþ}òZÏxe¶ÀBé‡Gú#¹/ÊÌïVÃá%ß#’ó ´Ù 0(g6DÒfñ÷A)`ÓcI°–}óKoÎ._ýôS¥eß|á¿j&†'Œó+²¨Æ,5Ð?³s;VáAµ-fuµÆ¡úû¶^–„ð×®§H¢l” ÑœóÈÔ; k—'®õJ8þB¾&jZ¾àÒÎÇÔ\ñ»d”§{ÏYº˜åŒâ0öô‚'ÃÏ ·&%|Ó®›‚ =T–~ô0ð+vΧ5fëª!Œ•œñße ®U¯°ªF†°Öz›JúèrÏØjø†ä /ÂGlÅJ±mß ªxûãk3Ô™ÍÀe."×jøäJ zø¤íŽ-Mv)‹c>þé¾àO±ob[+«k@0{L„/igág†K:š¬4ÞøK¼~wviw®h˜pר#,™Ðž§€ü­t4†\æ›`í¢óË'9³o˜á¬£P${/ @Ü)pÛw_§³ò² KÓte¶éc¾OÁ ºúÅEjŠçÊð‹•Ïäls+™zÙ¥¸—c;^-ÛäêR7¥Õ•eý­4Œy+ݺ}}‰dÔˆ×þÇR [[´héLVtί•]§Ñë[˰Uœô> Ê€f˜Ýù/µ|g³\›Nw%ŠPÉôDÀ dp±X`'gˆ]¸†]gLtXù€¥½kݨ:ݦŠQ·´§Ï¬Wf\É-¸2ƒ+Ùÿ\Ê‹Ù|†XJ2O f%ù|ý§ JîY`åÿ®â›pj£§èÇœ;¦&µp¦Ä1ù+¹ýg7ÚOÊçÂCÏ\ßÝc6rã*éjÞ^”1}øæÜ힦V§ÒxøFßåžmžxþ_tÏ™ìù%\YAÛ2šÚ–ñòwgvW é/PÉ\‰y„iˆÍ–?¾“È*kÅ6›Hj'Æ}UÜqv[g ØÜÆÊ¬Ö2R•á®oži„ñž¾¯yçàpª¦¿®Ï Rk†jc3j»Bj–Éb00ûjñ<2Tmbő⨓£PÏhÖôà˜Åû;ÆÊFÝå1í?AŒOú1–œsvT?¶T ¯ñYsP=ˆ®f‰Î½ï!ö,Zq»ÜÇvÆj›ÛÞ>LÝ}º*6áÙÞ4ÆÊÜ…Ô&Ë7S4F"2Cà¼g/m(ËáÄ•ƒÃÒ쥔“‘z\cQ‹åÇ$ôHr˜hW¼›†Öå?ajLXõHÒpÜøݧ zf#ËMôz6O`jÆdž&@T»Ã?ÊTZ“džÑÌñ9ÔTk÷ëv¾=ñ‚2Ô£dnM­yìSã†]{- Éº…8±&·%7RØöíßÊL™r4ævÔ\qrzñÇ*l=æ¤÷\8  TÀÜùa«bÒœ9¨×«gû¼PC¤Cg{€Çïò“5ü c¯C†if¶§Œ2‰ÔcJ¶ø*IÄÑW¼ è×3)G®îÅIèûèÀôúð¯ÆTƹ ¯ÚF–së÷ÀüEg· Q 6ßÂÏÛ6œ³9yéU’›#™8Ñ›+¶w+{ï|P)Þ3¹~žµÁóIÏ´é³0õÜ*ðÎ|EsÖaª¼œÆ0¸4ç ,Ì}tž×l|TþÕóag3ÿmléi `?œ'9’R˵ rüâŒâáE7-ÌÊãü9=í´fTPÍæÐnÞŸþI?OŠƒˆ¡ü^øÄcÑÁäðù0Qb¯-7ø¢+ÃHTô«Ñõba/Ê´ÚÊí0R˜Û, #ë‰Y­¤Çš âìäeª¼O[, °ÕúÃU²®·Ã˜O·çÃX~ª†²3úñ33‹k—nÅ}'úpf,…VšsmÙs÷³ðu‰G8«”umu6ʈÀÄØ,†÷ਙ5ÎÒ‚ƒÕ¸ÿ {íƒ8ǯ¥z$Š`@³/Ñ©ótV“O·&IG|ni1Ó 2¤6ËB>ŸíÐ[,YôM¸Š6…˜x<-nQ&Ä:‡5θ%Wí¥,yâÔ}Ãã™è²%;ö…1•¸-w׫’ÀÈìÇ\¢ÕÅà'¥´7«zÖ²„xi`䦇uPj[Ë©ÝxëÂë#l;(ã¨ß£´‰¾´wõã<è^(ú>¦ÛööT¿$¬Zå´òHN|»á—ºö£×ÉrdÓ¢ë5®fìÅ×Û N­F›„ƒžj6š] ’I|ìÌç³Kmá}_©P×ìt޳ëôv^û–Ò¦áàí‹þP=¸‚‹ÛŠ\ *n:_½ìðNÝE²‰ÚÙA X©òöê?i´>·±ˆçÞ‹7+=àoiâÄË ²Û¦š­°–­ )ƒL‰ôUþ:Œ|ó>yÇ5{ÄÏ?õ¶ c> …w9›ö²éâÓ¯Ä|!y<¾èiLü{ Ö& +òÏ0R†ãaL¼‰ˆý–G‘MW‡&,)Ÿ‰Ì„ÓŸìwœ„ÞDÀåй—ý}ê0æ0£°=?=ˆŒx”–`±M]mFƒ“üÊ÷‡H,˜#ƒoGóv‘kÚY˜º"ÑIKÌlÙØsrÛüÍ þ˜d!‹G žêG-ûzñ8ˆø‚?#1pö ˆŠþà#K·œcÑõ:Þ«lH3Å‘iC‹I‚Ïíàò$(Š=ÿ¹¸!È×s"ï@ ©ýŒ÷ÈOøD¬ÇÓz©fÌåzR Î*N ³“‡øÙB¶^Ó^¤*À9J.]ÃfÀ&kš€^®î´5çO£äÓ®®Ûæg?ßéÕNoM6 cà0•x’»—¯íä¹X(Gá%íÅÓ d›mzÔò-òÙBI8cGBGÞZîP\Ïé«0õ¬žYøß:3ÀY-uËcÕ‘‘j…±ÃCœ½>Šõ€:–Ü”6ö‹€©Ù‹³1ØÒ»Q7h4cí'¶ßÎLXÃ{&\‹b¢}vTEþXLž¯vᮈ„‰A颾æÀÒ=S…TìÕº-{6ÃØo™õ õ~\–æé±EþqsûÚyIP9ûÅâ®&Ce{¯:š–®àð@–x¶G4{ÆN!CvïÆâæ•É' k¿U0#1ù½²+ÂÂÀ´¡˜âdº—26’Cù–øQÞ²È=«XD,)ËׇÐf_%àcîÊÂOûƒ¹Úc+ËÜ‚´ÊŸ)rdCâ 0· ¢ùo˜<.¥AJTˆ-‘+^"•ÑàÞOe›Æ†÷+•L‡Ù[±ƒÚl¤R›ÀÎäÝ,N? ª“ó{_»Ù¬Š«dexìõåæÔ~)á š{Žýub“¼vc®IÆ*ñm´Ç¤©(¨þ‰ïÄ<€Õn‡± î0(ØÄqפ¨ØI4¶÷,åXñD¯?qø±«:ümÍÜe­×ôOlêYÚÛ{$ !«÷,âå‚àäSG(^˜;ç}x>:ö¬’à6xݘ¬·u?üôZuoáŸöWÃØÇ‡ºzŽÈ-}ÄfÂ8 «'Xw×*3/Ù˜A×|˜½õóôa~Ì2Rˆ]žxàÑE:V³=YOÔ†#œÁÇÀjæIuôÙ´ýÀ0e;ýÈI¨w£/wѯc±ßÔ&ðâL@`x–F,&ï4 À%·<’…ï…“¢ùU¿´N6O•ɼ²†¯2“‚]Ì[ò…ŒŒ\ÿcâÍ0É VkÆ[òú"ncú×'“ÀXæ±S¿dâ‡æ;n›„sÉÕ¦ƒ  3çàTq¯gˆ(Ö¤X/ ÞDéœÌ· {µx>… ˜Ü»<†5rôÅâºÉ-3÷ŸîÔMìÊ [3ºë~câ©#ì‘0/Æ*ã’>{0©L&J÷Ak°ÔzïRàŒ«§æ Æ,×ït/Aæz¡UìGî©ñƒ´¨Œïå_Z=Mè+ĦÙ@ŸÎäÊýöÊ.œélbC—jaÖƒߘÝD y$ß´‹sv2LÅ‚¥ép‰ÉâØ¤úô„“ÄÙK€Ï 36,·7Ÿl –³Þù>ßÙ±¸Ãl`×ÐÑ3@GÍŠK,*Ûúð|=̃ô 5À“ cÞ/5˜EoZy›™¯LFžµ©z®™¢¤eDk åÜÒV­d+g|Õ¡ÊNß¶%Ë>aæÀº“[°ì§ÃÖ)÷Œ‹ß÷ÃdÙà¾ayHßlÜ‚~‚lU6ÙÂà`ôf²ÂÙà ѱ“Pä§wÙÕK®ÏZUˉ’]ÏN ç˜sÊœ[qží[ØÍӦІÙäØúžs•vS>5!f¶Âêõ4b»$Ó¢·oz{òœ˜¬›Zåä:£„-ëªǽ2Àüô1­bm †™¸¬³=röXR6õÌRyHlÈØ³;{¶¤Bèܵõ½ò û[îR€{³€îú–þùM¾Èßq¡²,hC;l"cqÌÇ þ³ï£æÔ`PßlïrƒøÒMšáaKI*á2Ý˹ćvk²râµ³ÊgÉÁ˜÷BZ”…ÅtX bäš;›,ûH‡æ|´#àmBòZSjXaºct¹X,‘÷‚Z×uí¯ÚÝ+îÇ”d[ö ÄHz_V6;àìžÉ¡85¤÷ï”q—ä¹»I gÓÉjHÝð:ud±—û8tëŸÑ_&_¬ãnFãš©uCjv бmw¬€ðøì´î,NÔ†±9‹üDWmV8§M=Ý/É0‡ÜÃü‰F‚uoþù†IKʽmùdžÞýt—W¾Rûo +7Ý©ËêXO.åš»–©ÂZ…¢û““Þgª=ÝÆwŸ˜uÀh{k: P×̘”-AÚQ#Å sÝU'NSºI]¾—þÇáj׫¹ l¾†™Cîš/^Ø+™½t]™hT ú´SO‡WS„ˆ¬è$ŒÝ‰Èn¤þ¹3™ÁqþÒîŽgW’Ôç›øŠý‚:lI`9z»ô‘€ZDù¨ø7Är_ØfÍîtð=‚®­®A¯ÔÇŸ™‘Ÿ±ÛþælDË»÷1çSr ^ü­!z¤Ð®ûRŠܸ~¯PŠŒˆbmb¬¨Ü«*E§øŽ ƒÝ—|¡›;qù ŒÉ£4ñǧU¼Á òàà±’½{®Yø—ö‹Ä¹ •ÿ c±2âûid¯¤Q¯_èð)˜±yÑ%Èsé¥}ÛdÃX@MÊF ”&SèšãaâYÎ3ôƒõˆì´mð [i'oŒöàÔ–ÃHKhç»$u! á–9©¦QVË}B¨®„W®ìÙmjÌ•ò0VÏÒ$¬^ÚUŸâ~9¦vyXñþÑi•½+5wÚùC+Bö«q› 3€ãfÇ´öƒ‡`ÈHN Åvð-pü㎢û•­ü&p)¿Øj;hŽBY gšÌÞN`n¼Ãå"2º†’^²D§Tërº×œÚ7cæIÀ°±‘g—”  œ1™¦¶cÕæKO#$GƒæmuR"#årØßqÍe§ïSvò0f³ÀdB%£Ç£ƒÃl=Xò×è]¥hwxÚ®(™Ü¹d–ŸÕ«Ák©“É'¤aϨ«³-R_˜VÀXŒVõ3݉îfÂXé08<*ûl¯¼up¦yYWà&úsÄœ·Ñ«f…Jç«/¢AÊDé+=X€›‰RäXG€Øã[î÷çŸd:Øžì6AmòÌÖž…ºŠæˆ sÄH˜íëb©” ª ·}ß \”kË6à¢Ä£ZÛ”•\ ‚Ì>èîù˜ŸäQ—“¸„ãÇ «b,1#d‡ Cg¨on’6€{à[Ýþ,§/VHvb¤è}?ˆ@—¨ÔF‡ôÇ>«ÒW~Àê§a¬`]cyú¶ÚvÊ m‰¢)Ûð"±<žqúÄP¾ùzíÆùµv•¾ÛgŸý¸UÉ‚4s¼ûdÍ6¥¥Z£¶ãIÉ-þmK)àlE©OZ?k#Ò㯭ˆ7šEŒM_VÂ/øœÎp#ÎÖa{É\U‹†dÓŽà·b‚¶©“hRÚ/|ÂSº(d ™¡„õ¾<ÇÔì›’{1‰R;>ú÷w?Я#úÏQÚ±.?ùZ·9á¸NËì±Ö§&sG™Ù,IÉ@ÕRW1ÿªë—–åâm& ‚ˆ—žùé'$(é%þÂŽ¥Š:Ë·Íß«te™ßßEFîƒßºY8gf¿AtÎ÷ˆÙÁ¬jã_y–~Ó7Dí¿•ìÛþ;ÍœÐ_¦5)êýhDÖ1±&œ PÌ›Ëí0ÆÐcTyðÌ(¶ÁJ,ï~ŸÀ'…Ý*¶ØšG¢¡R85ƒ¢}/«]Ú¶¢¹,¥ÑÝN–\oqL Lææ%6Ãû}ÈÄ Y[ö_XšÅÿ–æÎOf_;Øp—‚8#º~ÜÁüaåä-§ÂÅú%™ë|Tµ_Y¥Ûbp–9k<îü«óçVV:As¾šH—iòè˜óØé˜«×û阄ŸçR åà¯RÝ»-‚U$W”Ó¯¤ 72MµµƒU8#%FV)xÑÌd›á8ÎhTž§6kÌw¨­óc7óp}Æm,âƒ>Eõ&lßÄÇofª°…2lq…ô+ëûâ7Ö-Lƒå†6´w”S/P)vµ§iäMsi1FñÛÊ4#ok÷%öQ,k¼ì/{Ñ7æ…°DàpŠšÇùÝš-i&úÍn›…ÆØ0@¢‰°´k©?þš%ß 7þÞ©Â?ŸoU?$O £ØÂeDé‹ÂœªGæ‘Y´üûY.o¨r"h*(·7;¡e0CHFH1‡Ó;œ¹BÎ_Ï\ùŠ]$#MVÉíÓ°™,4 ‘™ ð­8;ÁŠt3¶ÿ;%°¼W(£Ã˜¾CÑ­vñR8¬Ì(úåîêS¦Â+û³ŽA¨ì¶=Û>½øP‰"ÀT÷œIÛ°n8ÕÓˆ%Ì@¯Çæøq߆=ÙÁ£uPå&Äbl0Õ›î„>Ćy½!»¯®é½g ‹é³Py!éㆶ†ÌFÝA’”æRËA¦0‚“Ó<Òe‚&g'sëBpC‡?¾ ý†DÉ«›2"C+ñ:~ÉšÄN»swó3ŠËDð;]àÈ_ANtõv ´Ñ³ØkÏéËhj#wŽ-ô<²’‡ƒKp‘wƒ"]„ÈÍOÇ xÿY1Ÿ}Y[›ÖhÝ+ºm‰ºÛvxÄŠø«’›{ƒ²!1ÉLèDÜT±’í|¬ÆqýGCv@ ¿€ä7\. Þ ½l2tOÕQ¢8ÅÕ´ ÿ6ay@&Vn*íÈCgW Ñv5\pYâbkÍnL/Xô‡c"yn5Apf[Rq¾z¡c™ëÄ(s½ÈîMF5 *À¸õË9ÄiÆÅ;¦¢_X’bí ÙîµäZÕ`4ŠˆÐæ6·‹÷f”ŽtØÈt›¥óy¬™(Î+uy°N¡bKSýóB‘!èXræ9Yî 5ñ† ¯{u{c\iŒk|<ùaFÛ?‰&}ž`RÏwÑÐ9aT]"êÁ ‘Þmr^€®ñ‡ˆ)ç“oõ Õk=÷ÖKØ;ÖQX¹aèd®0ŒVghšÇÓɦ_×.ŽJŸº ¡ïùcî¯6ýâ€àâµd.¾,y«»:_°ùµ{|m„Ì¿ ]#®€*C. ·&O¤tˆµ_Üßœâ-ùð#Jˆ,å£>›tјÜ6ÐBªä+ãÂÒ¢5äNVcTÇîO/ÖSWïS<µžIvFkd C'÷šÊqd­Ü–¦YLL:Oo˜âLH^#ÈaVHï:¬ë†/_³6y½37ìÏ@ä³GÂØÔ€µW:=§ér‚Ûs[/¯Ø–—8à-Îyc{ N0 øíþK$žB“V,CßfNëŽ3ä‡=TDï²%£:pR°D¬‡{åP&Ö®FF;èߣgo£çk”&u˜ùÃÌ©9÷SÆ\,ˆZ6RiÉ8Î0Œ°kç`¹mlÔV ðRí±)i«Và¡UºËˆ4Íó/˜­Æmbè«$«lÿÓ =b͹~ŽË8( EO¥tþ€‚Ô„UT9bk1[^ n $ÀÐ+:Vi$Îgt#!ÙÊìËu}Ô$õ"Îuz2eÁ¯ RA›üÚcþÛ[à;®íõ噟O—œ}׎u cŸfP°üÆ^2mFÃÂ6¨îêD ñ«ò±÷§­‘“¤¶÷au©´+y£ÁÜ ¡x<~<Ï#¤£'« hYˆÃÙÆÊ‚¤©2ä7]pàŽÜ¬æéX¿¥s#@â<6 Á?,HÛxàÆc™ÆÃ'Zß©l±vôKÌ>æ/9c†“N+²ßÚߘÕ×Om™Þ"Z9¦}‹|qXÂë<¶69);qH>LG‹ÌHJ"¨ÂôÌÊ1¹½¾;õ‰¡OPé›égºa{:댚:Ža ›Õ¥ßôŠýÚC`nÏW÷NþЛøÛ: žq®¡Ú‚40š#+CiåCò™% âßzÕvàϲxtîyPŽþÕ»5·a?‘•ÆÊØKš(+g“à}¢Ü‚å×Ïk 5ÛHyù-`G¬›é¥ÊÙÛ±Tð`VËÏ3ǧàº\£ì¶ÐΖy|¬ºñˆp˜è_í´°LNW®óæ—éªÔÏ-Û1ƒ³Û~¡-ϯ? EÀú†ßÜ9à¡­†UV½eÆr"¹3#×™u4yÁe¹“géýå0]É®¤1^‰Qü^;€š ‘kR<5¯¶ïèHðÌ,²wÞŽ[AõD•^ûÖŠ>À¢äVcf_ê©u¼:w籊#‹Ÿ«ùý×4†F},„³™×/ôUt˜õnÉô¶~dÚŸŒÖxÒyiµL«)…˜SƒðvLfÇ€ GåHÂEÛ mÛ*ý|W/JµíÑmt.cI,hÞ2Þf»FZ.<Í‚T`ºY³ ñF=|ZzÂa ¦ŸQG\7hä¬Ç‚¾¸ÔÔÇêpT£¹÷˜²Ð~ÃÙ©ümÏO2“(3=ºcæäj|‘J8È|:=XC/ºRŦt*KÊ­  N^À í4ËÈ[t°oˆÄ¢”L÷š7b[”¢Áù¶|l^ @òƒŒ û³]Œ÷fE£ÄŒ²çܬl…úê†A E»„~¦kU×&¶=4Ìø@ÍÛÊSuXóÏï;‘»•檳jïA1ð¤nF[v˜̕H¸Îÿ3£6¿iÓ–üŸ` 2X>!Å"½2r…æñ£»{7¦·¦¼åq|t+X»F’?ƒëò¶Áý€Dai-IN»!ÖôÂüQ¦§kø@²ûÖÿ²ÿZ[É•†ÑûýòK^d‘E#×Å’÷Þ§ ­|Kjµ¼yöS5³ÿ™ý‹5#©Ù4™H˜@p%7±8—r˜D«GÁ ›ºVà†5j…+dqö´ç"¿ßø,¤‚7ñõï¾L6•XCË1k[×&B¿ û?¨ÂØß”ñó@ÌÒß‚m¹Ž?(ÒÀŸ… ®bw¡BWDg®G˜¬:6pÜÒ õ½[³ÙsS ~%wz~½õ¡ú&Ûoï—u \â¦Ú{vº¬£µ1ÒÈ@ZªG…_ñÜ4ÓÈ*éMŸ¬|¶¿òb%vCõ<¶gã‹Åßί‰ŸN+Ý6ß°†‹}cŒÿl4³qrúüivÎɦ'´ª]´[cž>#b¿Vz½MÁ'ùõRž½Î‡w†c+¿ÂëÑ"ó~'²ÕO“–©.*ü£ù5yî •ÍNÙ§®¾>}3…_Äè=ãÍL‚v¶uدhÊÙ_j{ÏòÏa¤ï‚~Gž]þ@DéÛZcâ±¾©æÎBž$CÑcæž7*wö·ÿÆ>ЬEüã‘EîùJ\ÒÒ‘wg±ár:Œå‚¹¥3‰a:[4aÍ`1}ÝòkØ]X®Éu@ƒ–#!ºóô‹ü)HWÑ„± g 5îh4¬úªôNé¹ æu;±ü>œk„Zìvö ¨Á•ôÏü(ÝŒšé.úz{£Ü½!5jg÷²ÊÊ”¯à(–,æäîÞÄ_C³ÿLn–ahå,"tº¾$%³åÒÓ»‡?í5mOS`,áðÐφéÏ‘^7¨H$¼µ†‚úN?ÛpZ¾|¦÷ÌO÷~hôfÚáº>îGÿÒO—‘Åcje㣜2g÷ø5@#‚w³7,`ÙûدÁ÷¹Þiø¯ Äöôô2…ë= J¤víô'ëñ/ô9ÿ{By>û3þ_2²„øâoˆ•‡ƒ&eÛÍÖ,âÿÛ+Zz9¶ô²õÿ™'cz9ýŸKE’aæû¥8гeEQü·¡ ó¹'œçåÿ‘›êâÚ•JÜž47«¿ÙÞ†´Ü3@™Å(;ƒ:•~ T!Ȇã6óI·–Ñ žœ(“rñèçôSöójí'Jp²Ø¬6mÔÐM*66 YÊÖ°¸zÐÝmìk©.”™°ÙŽl5^sÃäÖPiÑ0ˆ[2·Ó®‰Êq¨V{R©ô8fPàþ\•£Ø-„Q§~Y¯óì`ErƒœJ¿XlÅ¢r¶õB>Ÿ]÷›j@ÁÒ€CÑ¥‹ýë Vˆ7ÎçŽM¹°Õ9ù‚ñte‹Žv#±åÇ÷˜Æ¦‡ÜŸß mÙÕØ•Cö` ÑT›‘ˆ]Oû?Ó¶Ékk÷˜õŽ2Õk ÔvÃDðNùß&ÂIÜnÀÛ¤q¬Vq‰ QM æ~0!ðYW-[ãÕ“wîLEyìiÀä BRkÖjß1uP6“w»dásœVÆú—ûY©‰lRFùÁ;Ñ ÑB‘Ý< ã£bØddôÕþÙœBÀŒM˜©¡‡BÜU¯ŸNžonCµul Ò1É……ľqzÊÕÖ‹b'øpˆ 龕…±-F_¼Û ðÖzϼyÏØ6¾Ø ýªPoiÙ"K!x²+n_¤²¬ÃØû NwiЇÁ´aÕº"*v‚‰ÞL—öíáj~tJit%› ñÕG«“÷¿S‹øŠÖ.nUl!­*ö6R­¸Êù›YE–%ï¼ ‚Ë…HÖuÖæ;y>+¿LêéÝÝfgR—½BŒå˜œ¡µ(Nû: u||&• + k<7$C1:¨Ä²ÐÞ¶®…±dq¥œ‚Ç6CþâbuóÀ”c^¡7wÍJpUjùE^PY ¢{ÔÙÖURQ.{Bñ¾\EÅ.9ó¡W…®NÒŠXRk+Š¡Ùu¶6¬¿øúÿ¶ŸÙ©ë’›ìxŸh›•cªw` §ü.lf~æ¶~Üš¼Þhwÿ‰<9B°ž'ƒè:1‚à¾AO÷ºÛð킆oìÀ“^W¦»J+Axò7šâ‹úÈ2I´Uì•Ο>ûµ êf_ŠZKU@´“+з?P¤'¢âÖðó½mÑý©Ôkndºžw¾ù<Û’õaiÎ_5L¦ †øYïusy¶ÖNމus³£Hb2ÇåF(‹ŠC'üy¶–OÌï²F³5šÁ!Ù+ L'RÈÞ‹Võx²SÙ7ñ&º>qE€O2ü½vµGÒZÆîðø^b¯ -E˜ç„YÌ›p Äµ®dÖ2ç›íÖ²¼¬UÙF¯€[ *Ï¡ÉÝõàÓLÿ±Ï`.RÕ)ÁÇX‡ÕÝÔ¦Žâ²ªIÓ®Ì]mÙE/²CÞÕûƼXàdT<Åú–b~’£4`ùk'®±ôÔKÚ®ª>1ª æ'ò•†“Ýu@ðÖ 3÷Ú ã±—äx@ìzNÊfò%~ׇêU$ »ÎÞŸß0¤ž¯„ûŸ7ÂÀ#&@U·k?”°úV^€@.SЉt>¹˜?_\ÚtÑ)mÀƒi~±Ô)o #NqˆE{êâj7±f¡È­âq纴B{)rXŽó¦^›þîæÈurK½’Õ3…Éß˪óßðp!úµÿ.‹úó ÝçªÅ jNaþZû©mñ¤öÌ¡õÈÑêŸ,RfX,ž“¢"g?©@r²ÔozÚ>bhrrm;ÀwczÆÀ@¼Ò)¢èUÊÖ›IǼ¹žrÙýä†\¼Ël1(lKb*á²)ç¬ØéûêŒS©·ïk0‡^ç7dv|»óöœùÀgI³WÑT]WôÍ®ñõÑ]RŸƒ/ËSÓÄiYroªò”$§…•—«ßA %¬l2÷ºN^¬ìÔÓËÊ+Õq­´ x‰ýù*ŒM4û¸ÊLòV"ˆM)ÁÀ$2ˆÃzsÔaþ·z´ûŒT'–t%-,ÖüPýH—Z$‚ cûÌþ9uÇ7ü”ù7‚KÈ™tÉ ´¨+ÚeeÖ…–:©®\¬ª7–Ø{ÒE;ÌrÎC-Sº ”B­Úœs¬d¾ƒssôc`³áV+ïië8‚Aì©]Bú™yÌ™P…¾òLÿḢ¹ÙfXû£ÝiÃ:æìj*KJ‹ÀÒr(j~û~!ÉAþ¹³ \q¦zýS[h pBX\¿p¾:x„ªø6Ìùï°ÌÍÅÊ<0,…ñ{K»](#éâ:ɹÐ;6:5O»é|vüA©LKݾ2/×Ôå/û@š˜Åã{ÑVÀMCyeÑ=Ónr¾ 罟¿É4ÁœÌkÌpaãoÂÖ¼¥±Â±ŸÕß`s¼9¸@‘àX3Øl¼ÕÉé€ÉZmÛóÉH®¾DçÒ/ð ãõƳ ù 8a^®2m=Bõ6`í 7w¡ëŠŠŸã4ü¬Ì¹‹ˆÉàtä:ÓÙ­ÐX³È¥Ô‹wå įélܳh”¹Ì"~O/òHPÏ\$.á]­yé¿¶¯(ÔÎÄ4AZº;ù„´Ž3eÊjf}ÔÎW!×§/oÈõ(P&Âc×f„ƾ`Î#Œ“˜êß]vc¢ùç\0æ»Ãò]Y]T‚ÐãEÊs]ý…(ö•™8ØkùÐóóz QšB—ñ})—lDWò?5ßÁ}÷&ÖßæÉÙÂ^`OÇî±ùµ0RÍzÕ9¬Öð’ÌÕP=>ÊÀk65Á€«Âô þçqÛõĘ^¾2ƇƒúUHΘetüeuw0ã®&x>kä\¢š1/àz,ñkè0¼G—¶1kÆ`ÈoAë®Ë\¢I “M—Ñßgô®žHqôõ©0vAm£æ¡Öµl ÂQ’¥b–•—pX@¡ˆ†± R83 .}!Á4\ÑSjåá Uzóæ™ÑsiqL+W¿ã×Ü®›Ó¯lHOV?v<‚r$Ì•uɼòü3C«Zf<ÖÒ³f–Q¸;´«­i_“ºüx 2EוGuàYaI ¸ûcDšáf˜¦Öe¦è7¡)n¥Xë=34 cSØN´É8¯úôø ‡el[¼rê€ñÔªíÝƧwŒN­ Î盄±¯ªÁòh9QU@ä’±Þ…‘GÖz-¯–½Š„«Ž– pneo"Õf·J·7k×ÉUöyÿ‚EK5úðÉ ;9Ó¼aJØ@Pá·ÉòzÛà"ÕH†VT‡È¤»êWÞ‚+@|&–&ºp]¶Ro4ÂT\ؙσxZóéÔļSÿ€ZX¯ZôF°cø'q€é ”è$¬cNœí`…*µ±ª}¢~ã¼i'\KÉÃH]ïE˜-ÊØÎ¾'ÝIÞ`•í4aÑÆ®Ö“üè oUØ žF,%¨"9T– bªÿBpul±Ûd»bÕˆ2»Öí¿³_‡&^æß`f°3¡·€oèoC7ýinÔXµ3˜/á ˆl£›Û+—ÆA>S"ÐÀ ÆiÊ5ðGtÅ}hz&%Þûe_¿¸Ã ÑáŒﯬ½§Æ{޽0 ßÇ‹öà¤èk寽ûWÙbY¼øbûi+±m¢0ÂÀù9ó½ ¼­|¦¸€Ç›À\~.¶Þ¨+ßì“ì N˜ŒÚjßãÉ~4@²Æ”ì“TçLðD&ùêÒ7Áªó:T­úeÍðÕù.ž³#£01AT“6µÃÎYEßÌÇWØ*; c 9 {œª0gЇ¿SB^Ê%¤X‰¢ÅöB"Ë[€L;-æÂÿø%3Ó´ÆçÍbö¬‚±Ÿn›X{–wïò—rÔ›QÎ #‘^ÀnõÙ§ÊŒ:~âyh¸±*oöóÆïê›i gŽès^ã©2XÅf‡¾Kvž®Ê£i'“ÂË8¢Tã é )9Lö ñÓáôt‚Y’‰Ä·æ< d å|zV[Þ´Œä9[ŽRåèîdí…Ê{އثj†ê„™tû<–†0ãÿ]àa†­…#áëȦÎÉl‡½Ä˜vË‘âÙúpÞ³’eZÚyõ.›Ê,½³€Ó ·˜ AÔDŠ‹ÇZ·f uI%Ûî‡Øµ+f»-ú¬Õõ·“>¨Ëä´ ãK~I`9.¡Q¤Q²˜³¸8-h>%®†úƒˆôœÂB¥åaj•ô¢â×96Ë “âq2Q\FrÕ4æŒóÚ”÷è¤ïÙô]—9Áï]g½BÒCªèÚ=":¥N¼•©Ìþ½´n<Û½™ñrò‘—SüÏ¥2*âè8q4Ëþkÿ‡Òé8É¿÷ØýwR²l±_ƼcɆ&Z:PÒ ×`Þ1Ö¿¯7| c%%utd©ÏÄYŸ/.¸æCi÷±¥í3‡À«Qrf^(„)‰–jÜ—B Áfˆ¢aGß¿8†žx"Ïë8‰;KÎ->aêq›>€&ÀËtÙÓÅ'Ñ^WZån¾LŽ¡l! ßÛ$uͽ;âùwì."yìéÔoîÄ ¼jùw]Laªûþ«|jyÛ|Ov¿mḦ¢£‹e°f÷`Z°ùk+0`$gü,—Ü• šåT[õÉ£sKYõ2Xis”r5ÇÎü–X÷º^Ü2KäCÙž*Âȼ•*ÞÂi]¼²71(Ë‘_[ÚžÐjÑ«{擨µLÄ¢ÝhhÏñ¬}P“ht¨ën-M`Šø²ŠÅ ym”¬Ergi;hm EKê•)å°Œ¶»‡7éÍìt`ZYÒ-ŒM¢ fÅ–.½Ý¸kÆtœý˜¾y¸Ô¢‚ÙtOé<–§ø1ÝÁ¾°âµ X4X<”‰äD4FèçLñz“ió’ï/‘ý›¸¢Xʺî+?c~^M ñ(6JÕžàëù ‹‡“˜Keqä¹Õþc‘³[˳¶øÖâ†as†N#N¯¯/ŸêÉÆQØ|³†g"«U^]~0õR:R‰ný(ÛIÙ ›×ó (Õò‰œäÌÕÝØækB«±×žføê ÛnpÍLç–â†Rêä ߦ£fßúØÝ§«Lv,ßìÒÖF“¦tFL1ÙXº›¼Æ,!>÷ïšž\ m(nCdÆ=Œ‹;·É@ÿ¨ÝîˆI+.xí—/0ˆácœBî ¤è,”MDó©$z¯]`#3Øt¨°ÍµUø”ûÓeE<°sR¹ÿ5~šÙ¶Ž?Å¡Ï,wi¡ û GÃ~“ýP\*R߯'AÑ.2ÐÊö/á+õ')ÿ<”ÅŽûj/7íª=µ¢‡Ø9æÏÆ+éÎå %7ÚS¦ÁØË^rDg³ SóúûÆéÇ&«ÿRs>§Ó¤×Ï‘©n“MìŸ6Kž‡­}§ÃH<2Aý{ãl‰•©Ñ±uBÅ&C$Η»PÆ×ž¶ƒ31å +[t¸ZÅroÂØv{å—âg‘¶Š¥ÈZ±9s™â>Çæ÷Æop|N›P:5oR#l–SðE§÷l…±}âñÁE†r¤ötšyt ¤[4_¢¨AÓ•ˆ%k{ž(t`¹‹¼;œT–:xÒ(l«û¶ ìEŠþ3<=ƒT8Nö)ç—;쵂UëãºKðL_™èõèÖnü"‹ dž±¹ò}N@#Xšáx6]`HŠ&N)êe©o³&X5“òƒó)OK¬:š.. ðX¬Ù| c§ž^õ(v™pS濸ø ‡I6káN¯Uö©{¬þÒ{²Õ›©¾sö‡¦®¾°‚Fú‘Xyí˹xÝꓽ4«HØæ{ÔŒ»ôýÌü%±¦F±åB:É·V ‚Ù$Êvt@¬ g ¶FR*BÀ‘…‘ÈÞ,dOÍ«ïÁ;z:)VEãEWÛà'•çäæVö ÈÌ­9°Z!0›ßØ«„ç¿™>"¨*PŠJFÇÌÀ›J)”Úâ6Þ,•ÅçKÝÚñÀ вg@ØÆ)Âù‘³ŒÙSÏwì±UçÕQOn al‡Ô©’Þ Œë†‘S[6´Ñh¡Qíµ$ž#VŽQNè3«Íà?“‰Á‘b»¬n»}±Ö`°ë{s¦¡Îkõ#»Ûÿ¸†?gÛì°³êµ÷CùYÊÏϽЯʓ•’RÜŠ\û0Ã)ƒ’ð…­¶ƒà›9ËÏ£Õb µèUzR{刢j‡@qûRF«.}‘Ã$­Ì‘$”EΉbk㔢#Ç 6ïþ–1Æ›ÏɸØg¿æo†µ%‘„ þ4Œ=Xñ®|µ_ÌATÅ´ %Ëh 9lmFü£˜¶´s²·Ü˜ò´ZNÓ–DB„¹ëÔå:#6˜;Ñ;vÙè>ké2‹æÕC¬üJDvLYžò%¼mõí‘_sð§Gn_Qò•˘Q£]0›åÓrúS›É;èn‡±^‚+ÐHUc³¾Ö.ëö†±¡™·pb`6q˜û•sÓ3äI‚QM›îÝô+dQΙô¤º«B«ØÀ0¢Îm¥2Ú €š©î‹s‡"¸ç)ˆ‘üu¹ìæS»J@“¡nå= cóŸ.ù=9C†“•R,—.rKei)d3s¬{&~0ÞÎÛnÔTd# Ò8©v¨ŸÚÁrD„ü'Ç;ÏÂ¥ÈôŽQyð¶½Ïí郛m4>«GRC·¢t©„C?ešF¬«öpȉ"›â•\TOᵦã[·—Ö2\óµ~øœ¦ÂôBЏ˜.s:£’옛Ǿr(ÎLW IÊØ¦Šº’òðõ„¿É{gãr¢uJ°à×WØÐŽ}¤©–{X ’2_ žúvº»Óù^Ö˜X=fSc~å{¬M Sœ@Š(­¦sž;pM© i­{F¹‰µ9š̺Æóµ¦ÉAmå´´U6Gq˜ÛpÂrì®þèÊ„”Á¯kÙkregZ¤è°Ü:'ÅÁ±1Ý´!Å<› ºrf«cš¨·Èc¬ØOLEZzíƒ@tò —/üŽ`÷cgÞÎ-ÿ>Óƒ@|s._d›¢£ï6D'ò8æË¡0Òx·ã37ísÇ^¶­´8S‹ù~·…Wí³<Èfú;þ¤¡¢ë™ÙšaÍî”T&®ÆÖ»Î|eïkaÄ'€dÑ$€Dùí ð,¬ŠaL{XŽQDÆ !ñ—Ç©é'ƒ»ÚèÕm1¨†öiRk¤™‘> ’>²ØIÙì.•³"Ëþ ×#KÆÖ+³ÿõöíü«é;ZmŒ*‹ëå·ãîK`ršÏÎÊí`³mºl§ÃMwÿÈ€>Nª.`ü6›Œ ëÕ¹#Ñ|S©>&¡Û0pµ*߇Íè缘6/ãØ¤®sVgl*ŸÍ¼dcyO'¦!°Úû%ßÌýöXоõ KhI&é$&ìÎÍãè.hÀ"X;E§¹=F7XJE7æÇÜü²¥?€¤X*D´¨÷2…x×ÁýŸÝfÈè{ØZ"æ¨7ý ì”ñÖ<‚Í%FG÷bÙ#´©çwõâÊq0WÈÑ™,;,λƺÅ0~OöbÍDù_8dŒré ü#=0’VÕq\{äÍnË€”1»Ú/¯ÂݨIYa?î®9ÊwÙÔâB¼Æ'= ý6à‰ösõ·ð<â­·M»ôþˆœy–ˆÎÇ7ý%’Ϋý°lœ€ú¶Ž6›ß±÷çüþní_ýÇt/¨k–BÓâ—“)`LjZ“™âμQ/ߦ)=ïÔkž#¡^Úêgä®é [F«:äš÷îÝêÏÌÌø is3®›ûR½\¶Wa•α*í#! ±—´§Ýuþ¨O‹«ðÏ–©[^‘™Ð99§MПåÅýÞC¢ÇÛ‘àqÈÛ •Æ{×aïËïaä¶ÄŠÂÀ¾éŸË‹bbm$3k ”+ªg2u4ØdËÏÃ4{N~eÑÂé}ð#¡br÷a yYR=.Ô …\³ Èm“Ûß‘ël]+19Äïߢ>4/øÇƒ´í»÷Àϯ­õäD˼KÀ§äë3…¨ùôMv˜¥•s}Cœ}YóìSû¨)xr|Ûý“|Á¯á‚mQuáNš±ËŽÈ©6¸lxÍ_I‡Tiylª6úEsÀßÈ^Â]°¨xý}B*ëKrÑÖÛgµ—ñíCˆå‡[üé/ÓM£;딼l£y ¶&ôý»5˜ž`Wv3z{­J“îr$ì‚ߣ뺇.&ðmÌá¸dËÜË爲»G‹`ù(¾è·ó§‚Ò7Ã8ÁÏçâ8Ö3¹Çz¶Ã¦¬I ‚ºÄqÝoaìÓºÜ$SNC`Ó 1޾ù‰ˆÉô–½{ó`÷úq-›À`k~B-wX‘·'nX é–™ì-[‰©o‚³gÚì‘tI²ˆÍUö zõÿLêÌ{õRÿrt<)˜ZPĘEé$-¾f~F¾f“À¹–ÒÅÁWá_òce<zlÍT«”f»Ú1[•ØÍÆh~nG-ê«7S3ì› {Œ[‹çNÞK?˜ÜÛ\ ÿR \7»QFΤ[ãëq†Âe¨÷vØ<¢ô ×Þƒ„tÆ©+!þOªU°1櫘`éML+stk×°éE!w‹¹¯ã9¼Dמ÷Ç øØK=?tIÓ)móÈ”•÷^¬70‰ßJSŽˆ÷v{»¯ÎÖ–B;V{ž0{{=\4ç\5ÕØò!f‰Ù2Ù¤­34±Ÿž>²+ŒÅÌô³» @×|l Ô³žl ËÊ^K3rW èÏÆj²Ï’:â]>mË4 ìÁ;‡Þ(»j0,ÖW—‚Âûö²=ʼ:hÛ?*:¼Cʦœ0pÆZd’еH¿ï^r®#SÅ©™$ññRÑ8Ó¥RM[=3-ê vT¼®‘ÅiuÌ`$ËÕzTc_Ò¨± ©mEûÕšœ”ø•¬ÓÂNBJ:U n1šaB{W §=nÓqtrŒ Oì<×Ô壶ùjiÅ-ÈQõùé¤/9à²à×^#@²ûA=Ñ Êú‹î0ˆ<Â(fpÀ‡_|@o…ò0oÖUAZ'ÆÅêÏ[¼î”Eó xba[žÄhÒ Ð}Ã]8ÅÖÛ]™ìÜГêX[úDBX$—°ir%ÍÒW]¯øˆ¥×s®9µGíù«ù–dÆ1çÞ-á(Îy“sžª+ß’‚yHdT½{"/Z¥k¼b¾8KÉ‘ÞkŽ_¸,eÕi=VñÒW)OŸãG¥T_!Ò¥´[EŠG¦) ìÝÔ³"©,Vtð0\\Ò9¥¾LØý-’Jã§ z »Ì¶A½ôb³|2„Á;¶3Tk€aš‚,°>}}ÞM€0Ö²z1o´Ìu­eædÍ6©Q^*óùºté›Èâ¬;ûcòà8Å ?ä>°O#™&ô œµs/žÆ¤†z`³À™p= )˜*»«ójÛ¬7):Ä•jjev¬‰ ; ›Ùí#ò™z Õbë16ÒÀ»RIZ 4óêm,4ùfE±ÓIÙÀ¢¬žwâYC¬h:z¬ðý°)6ë‡ê+ž`™xºpAmïÓ^ÂÞôì5<#‹M˜rÀ\…>— t«@ÝFߪIx^Ϊ»…à6Ãù0N¢äÄØ8¢àC{ó~ÜÙŒA¨‹»êû€ ¡ŸÚ€¦ýŒî¸l7A÷ðµ»U7ªÑ“Ê­è„wWª`  zqù ß!ÚÆþ׃êàØ#®)8Qe¹/Üøœ^5r‚†·Ým ˜œá2«ôó˜VBrJ¡^s¥·‚:=Ŷ¯+Q{ÃSeèØWæ 4³Yv´Üói wÈ™E>r˜’r¢¸æø¾<×/T^3´Õ÷·a<\_ˆÉ“u!©¡A#ÿ¶|W.¾›™æ:¨äÒMªëw,ÎÚ`]RÓ †–ýXU,v)÷ÐUßÖxK¼ÿ<÷\WLü{çþ *ü¯9ý4Ã%ا‹g®Ø« z€QÌ6®òÝ«»‘ÇáøV6ý1wƒ9‚ÝlòN™_!,§/N™c¶øî˜¤{kFŒðz'£ÈŒ…Í‹ÅíÁ<:-rreq'ˆ|ñXób[º|u³&@—å)±ÕÜÉÇÆBæîóæA`Ñ¡R GÇ7rµ÷Ëê™úLÕÑÛ`ÝI»òØô¼²ØÔ¯Öì/« WÚfs)Ü2žòçV‚Ù¨ÖÙ¾T2oÎêò3ž:´ÿxYY]½ïèó{SËãün̉"°>dƒØ%‡o+”ʳäZD¤&/RÅöøÊéB†‰YB mþÜ ñ¦>"eÜ+¤t ¬Ó—¶_ Ë œs6Žô'+¹åü’xx¸ÅΧQ!êh^¿¬ü£÷Õ­2Œ4‘hø¥.ìð@k¶–éÑ\}Ä~LEmmvØ[L“ÑÅU•¿W.®7õªŸJõp!.Û>;ŒÈBŸönuïÚ„€³ø8 còÊxn_Cj¤U5ƒ-§­CéÁ@] ã=wí)gÌæ,¼äÐÙJ5MV¤ýwÞS¦Å@Y#•Øö”ÝüÞ²z&ˆiû³k¿}¶QIþ&DΦ›Îƒó¨†çY4 ŸÂ8†¿FWï'^FD_ù× g‰Aƒ†D+ÃõÏD–à·õajªãÐTØÒ™³é26bÑsÒå ÉÁæ Í)Èåþ¼ÿ{£:z~²Sm^†é`ØEw+¤ ÝÒ•Pÿ¶àGˆW+ÐmÖ e$ꑃ8v«“…f±ÔlõdwI~è'¬ƒ-rb-NÐâä¦mL8¼gçàz2ÿ¬N'ÔÅ ž('Üðr²?G±H°Še&/¤*í@P‡©»«øá\V¢O[¿¦ŸÖ𡪠ž¸Ó×µæG'-]l±œæ"Á$’ò¤a"ÅÜWŒ3…—¬Wšû•ìvšTß vb×›ÁúÇD¯.QE Cå÷Ÿü§û?@:*æHI’>ÙùÂ Š†¬xh/ƒþ›f:íƒß˜)`J•)°9ï§ò~à“ëŽ3dO…6±]Öʽ Y æ{æÄE¶ùìZ;WçBV¼Œo,-c=z Ÿ²4œç‰Ùç±6ÔÚÍzxÂhâ½ý¶_0ö˜I÷u±gXÜ|ÂQñHT¦¹¢TqTËY9öNÿw&ýÿæÎ@¬þ;ûÄÄòëí»âÝù…†»ÿíÇWÜõïsŠÒ¨4ó‘J“ýÏ¥2‰Vo†¹FÅ,æ’"‹ÿF®ÉÇF*Ùÿ¦‘¾{pqð½ŽKÌiLÃâèb±×Í×[Sq£É ‘öÇ œ #’aA©Œ$è¥ålÿâ@gP£J”OlvÃÃ.oM |f*bÃR¢­Ïâ°Xª›='œKHwM»?ÍjX 5Ô,Y˜ÑFÿK›”x=Môq‚—`zb«c$üL¶k¬lóŸ p€Q9¨]»¯?,æf$ó‘:}ê¬Þ)g$—£ù 5­yáî ŽP·8uÊÈ1[PhJÞw=ð;”,²r,º;GV«óiM{4ñâÆo±œËገ…1-‹aÊ­§èAZ Käî€Ì,žYó˜JK9šz–//?µßêöëìFf­Èç(~±èQžF,XN.2è™ÄnO1Y0Kåʉäm#Ûã(F“öÚÉQpn¥:¨î·­‹lVñî/a¬!îDÝl£[´¿•Ùïžj ;Gg^š¢çDzãf&äÎ"ìK+¡÷P5§' g¿D†¢Ðf ÃÞJ¢WÝX4a=]¸ ×ö<Íäd§OY¬æÝAêºe•RCõž ;جàÑÃWÎnTŽÓíƒG/ÏÈÅ82J>  ô<Éë­í!rÝÅÛjÿª?­¤IÆi*†j ÿ:ÇvÍwœÞÞVžŽBq.h\pn¸o£ ‡³ #ç»â}ìlÀ)ŒG²õCNZdRMž¦1·°˜wˆÞÝ6ŸÛÊñ€uu’tRûÑ‚z˜³<{’ýV7Ož„±•n§ú%Rêö¬2 чƒÓ—ñ¬yYë›4Œóëæº_I>M ‡Ófjã‚O øõª­d(Z¦#硞NW͉à:ù#g"2Ó ·SvÄ<‚¶¬ö| ÷“ƒGžìÞM!Ö‡‹lÖëö…J­,ÿ{X/ŒŸûk²kç\×ÄõŸ*‡±«õ˜€…íä„•â¢8ZË)EÇô;­Ä©iIû»~0ˆ!ìW¸ Joóþí›öˆq 3Ÿß¥\mœïôÕ*ƒnƒlslԸǶÁƒ[Ïä‹ô ŠXÞè¾Þ2‘¬f‚Ùæ•g…ÂTñœ(às† 0­[puü\P]Ijo3 m$LóU%Šp‹¼P¥WI!t, gV êœÍܶ[—¦ëTª4yœÁ‡=-«… Ó ™2QBV¶öû-þÈ[zTæJÍwÙq¨Ô=BM ë΀³,væ5ïî:`“™dµ½ìd>è5ëüd±LŠÃgJáúüX†cc!ȱ(X›…ֻƋÌ?…Ñ#¡e½PÕ¾äÆ9Üy\㪜‚Û•¿†Ý±z   %ªóëòôóAS³E}>³ŠuV?=A†H<¡|8YMV€®`ê$ ~ávÍÏSéÔûõÃ8P˜Wq  ,†YáÀXñöÏ3)l›Á„Ÿ²³×ˆx7Õùm­r[~#“ªlžxnëÜ¤Ý¶ÒÆ¨:‡Ö¦ÑÛ·z4ÆX_ W‘c ¶Æ"1q·8x÷neshï:½ “…Cƪ[cž‰„ T_4¹€m[û…r¨Ð ˆËQ`–ì8ý8¿¬žŸ-Wa±³ê¹ˆ1¤Fºq¥«?Ø!f¥ìû×í<7äX»X,Cfí^\U;ïPÚš~Ê”BBÕr¯eÝ̦Û5'íÚn`|)VŸÜOÆÆmÝ9Òh¥;“R0¹õ¿¾¬¼ÌÀÙª”]ü”–~v|É+öÜé% Ô¼`ë<\¾ÊÖ»öÄ[Ô<ò st†=r1÷Õý~ÂbT˜­ñ ó|óêÅcïýÌÆ¾«^õà¨nš¬Û—«Nª¯I;¶!#Yáû×ÊiÁë8¢S¬6ê¦%ÙÀ8оW[‚QÚ™‚ª•Êú=[½M'„ïÃz[òއáÓ»–ӨДzžæ·ãˆì—Ÿ…w’í]ç+´;wÎbCˆÛ[ãcL‡Œåòæsz€Š³êÛ‡ ˆ`c|ø MuÞ;64¶nSÉ5àrˆPˆ ²`Vj¢q~ͼ:Ê®ëˆ/R;G^€NlF¨aŸí%ÃöqÊFÄo¬""A™ Ïb‡n‡Á4éê„¡ê¢?€žwÞ©”÷Û{¯~ºÇ~Ãp8A-vÍ“ ¦a•…pÆ~þëÍŠÙSsȶAïF|Ûþ•©Ú»Í=: Ʊ¶Â›‰pɵæÌ…Ó¤–ÏEÊ»µ8Ø{4éPy9á‹8L=)müÀÆêÕí]ú½ÞL¹afÏäL¤¤%w8Ÿ=‡´%MyGÂX¶¬æØþ…ÉG†pÚ¤õõM=¿Ý¦žÿ…#)•}…u:Ž#‹×M–Ù9¡Cç&zí¯ô.Œ[v˜‹ÝñÞ|µkb 3·ÓtUz|¨nß ã¼„A§Þ­{À”To;o{˜¬®™ã„ëö¦²E¤n¦AŸ ϽCI¯„¦‰Î’³%[C¦Ü¸*¢ë‡Jn¬—d³%`¼ ±0¸•vÔwEõÚ[WQ›¶ÍüºöuòØÂ»ŸLÀ€$/sr=\ C¯?ßòÙÅŸÑ"h|pÓ¯`“3¨àfjS_^O‰›»¼€/¿F繺M8{¸U¤ÄÄ–”ËØÅ©„l1¸ R $ÞL°vͨ+µe›1fÒÄ7y¯§*|óé²H8“‹\¢+¬®Ö7òõóÖÌgyhÿ°Òå?ìÐz…f=ëÝëAc_ {$Õ8jÈOtAõ[ëL°¦Ea¶c>iW6>"å׌±ñ‰)ÚÏ_…±ýN—½ 6áÇœ°º£öó0NûjÙ¤kÅ®…õsß¶«Ré^s6³ß©žtR4zû¿zÉBƒS[ŸA<²ôÙ캷ýˆ¤,IxaG‡4Œ>2S³ 9´‹2•«Ð°ßZ'³sæS×4ŵ`AÇj»“Wc°thƒÕ¼×ùñÉ06äð d•Þ[›¿Êò]¾@ ¡ëÏLù£0–’tÑÎ7•-A3ókÎ^”Êß5jW‡¤ü ÌLy9ó»K^_¦§ÐøßȺr!@PKŽW[Zi^°ïcPý+Âų¬>ÕÓ«µù±)>"ár]VWŽù5;…%JÙ œê›þ®‹AM¡?›k;¬ltPiY  OuNý€†ƒÝL ‹YÛOyT‹ÒÚ—„U:1š=óŠØÕSAÝ œhÈ )Ãû ÔìÕAEóazæö%–ß=¨ôI£¿°r6^hŠ›å‰O™§á¤OÆÆ”=˜‚ògU(byÆûWΠ Z~vŠYûù±0¶Î7ÈvCPø™ø–ÍËé2QÎpiíJÊYæ?gŸiy E˾–™ij¯‘h¾Ø5/CxoRÖ Ýš² ¦²÷¾ƶPD@";1ãÜhqs}-Ø\ÍSšN7)YÜ÷ÛÞÖ[P/ˆ¢×ÁгÓ¹†Íô6ufkfe:póþ†1%ÆEÑiÈÄÄÉö˜Æ:Mº(¨óV.¿;)k²è¸¿Ï?îõ¥Ç±`ÍåÞ(ŒMšá»N1ÃÈî̤oÙõ€ïp|‹ùyÞ”]ççÚÏ7(K±länå=ý#†ox ‹r »ÇÂè”ðM(g÷=•4ÕUWAfW¹þ˜-÷¶Ulqbᦊ50¿õ'Ö“¬q\ªŸþô¹CIfdˆºi;û~ôÊ?ÚÂ9¡¹E… 7[äp£Áü]L Ókæƒq¥ê°6ºæµýžUå|0æ˜{7eûTF,Þ}Ü“ºýj÷´Fq-Åa‹z¬ü‚zÆR²>âã=™ŒNÜüïR3^~|"0Ôc•;O±à-ùoóï·L#šcòE¸›ÝÁ|–IÇYsv‡Á\[“=ÏR ñ{s wj6¸a¯Ÿ´ê‘ôuäŽÖ-ÓÓS Á£aìÈÉ^±kþ!£D ɧŽíJ ã”HäkæÛrûYÐÜöƒq›€Úv‡ŸpV4üíeëüâ²~%l{vg¿Ô}d„5^vi1ùz¬iËu¤#Ô:Œ @N?Bl9„‰µþ³!|ñt)lÌÊsâG•l‹¦lÁÌ‹.™þ”¤Arj§¨Pcš.ëD[5Ûe‘¿ cE]×MÓ”ƒ!,ijåC\ùÍΜ]öË´¢Qà”$HæEÏ/ú‹Oa©„uÊîKº4óûç»wë)@—Ñ@E™«cÂÏþð[”L"›ò"ÛèóJUñçÕQ šL¼É•o­}ü@jh{ˤ¥>ñ7ý_’ Ž¡ÿÍÆÛZ“ìX-Ø£ÇÕA´‡tR_à";­#Òe,â²G¹3JàÏ¥â‡3ÓÙ±oH‹NÃ8‹>cêsŽ‘™è¹ð›¦åÙÅ’–%Á?±÷ª±Ö™äõ#v¢»´½h8{›-e0|µUKfã¿tT±1:ed4Òi ùê­Êù'}ä±Éÿ"}|•ŽŒÇ 3m$€”ÚãÕÍjÃôåзrë3üyüE££ºž¢´çëGüß3sQÊ e¦Ð%Œ°ŒC­ÑPİðµí†ÉcQ¶B¥½ÕÓJóx0Š»¹U3ÍžŒb"§Á“º¢á²}Çs¹÷¹Í‚ó_œ“2Û%#ô ½ÆmëzhÉ•$ÈBOuÃŽb3›—܃ñ%®›LDz„aÉU›yÐèÆ…}"º›T–5Z!ÉÓ§‡¶b+ÁÍ}Õ‰ Ì-éÑ–¯#R„¼$=y—u&[îKp±Ì¾„¤ <ìº7t |IB;%&EÑjÈÉDaû²ÓôkÛ†²^\2§Ô<Ë3ç…áÆÒ¯™Þ±)‚OvÞ˜ý@Å%Û÷†™ÿÊ-R-– Ö,ò)ʧOÖ¦ׄØûâœâS¨ÈI¤@¾¡Ó§qMlÒâ0]³^ÜÌf ó( …ÎNƉ’4XinÀ¹ ©Š1ýZR´)d›Ö…µÖÖ`9u·ƒƒ:­s…ÃPWLÎ܃`1Ë>N{^Àf£JPØâÁ>«íR‹f|xÓ>v@¶e©œ-~XÓv­WÆ¹êæ°˜.ôý ®8©†C2&zPà½r4©ÜToøðÞçí‹Ë|ñܤÖC×_†¼ÿÅÊa"Ÿ\bgY©ÉeOî:KH’0ö;åðà1|;(GŠ7$:µÆÁ”{˜€+ås°GØ¡¨ƒ|솼i³ØÏ¢Æ5›feli6Á¶5*¹›½ÿ`PÔ4×ns`XbÂ56G,t•"1zÛÐAZés¢çĉO¬)ÄYDÁã,¨™¾«‘“ǯ9ôXaêÂØ žÉçÙÚâ  ÛºÆ6ôõðÄׯ¶å ü1úÓ-ïSÚk'­—†8Gäxdaû³î”Ì©‰znW¶Ù½÷"¦ñhú%ä¬bAjÒßêkùrÏpäŒRvUt—n¤7Pä19åBzò*\ŸOÁ!Wrd¤_> c Jdæ“iF=teØ×ö*ù´sÁ5ÙtâYCôˆávAÈæÍqò'‘M†Š²Çu6SÓ Šâüçê~-”‡m!³Û¾·Ï£ µÈ˜ÿšmŠâ8(ÅKj—TÆZS®õÌ·¹³£DÆX1ÜckaºµžJžLw#3¹\CPLÃ’®Ûáwkì0â°õ5XÁ§Kè…ø«n7 cóˆ5™æŒ çŽÍœ ^ÈñÚY±U×”{sŒ}~=ŒS\à8ãÔ­îvÿôÚC“ÿþ&´½e¡U¶—í&}ŽÖ0)8†l§›ôP1‘Ø”DàOd 3³â<‘:EÁÿpç‚áþJy⤵à­Di'Ùõ*aŒm› ¯Ž·Èž#‚7ðì%¸ËŒ5ç&Æs4º%j82ÔfãåâüwÀJ,-/2T¬[ìº*Ò‚åëeÄÀ\}•B˼Hlî«0x Ö+e ÷û`…í)\I}…9g.»EúÌðCJ3ºD>Deú·fØW…qž}!`…P ü?²0æ_‚U wék¶ ^;CßëfŽ2d˜âöøyü1"+Oˆ‘¬¬v_´¨Æx²½ËաРշ&t«=\>ÐÂ0²g½4VÂ@¦Þß*KbF¯R¾«%Ϥÿ\¾¯ bͳj•w(Ê-ëG` ±Ý-Ôœ\­2ÝøjC¡ ·4êÝQ¡!pqIÕ,œÜCª53Òlô½O²`¦H>3t)~¡¯»Bms dxVßD iž>\„q¢¯wäf§ŒYV†Í¯Hž´#1?7oÆj£åóÅ)dY±>; Í*Iîo…¸% ؘÓU™ìðÝZxŒbÚ*ýˆ_Ô½èâgôv2.,„à«ÍIË(ûZ–½;+ÙÌa;ÚªqÊÓBd¯,øí[AÔå¹xì¨Þ±d{~‚iÛ-ºK”æs:%ÛÆ°ÔV¸i•ÂíVkµÀhÏ¡¯þÈïÅcx䤞ˆ â…2ÍZŽV›J†;Q²…jQ½j¶QI‚¯Àô¹aFÕ éâ•n,hCt-¯ž'¼‰ví«L¨Æ j÷ð¸áÐÏEs¸K®¬LnB²ú½™L0‡1Ì0³ÆŠÇ¿È9'…riì’£kbaD.Ü*©R¢«¿ÂØç?mÓêÁ¼M…ÜW‹lfŸ>áò%P8Tøýè-žØðqL •Ê¥3¨îžW7·f˜´@.;+”ÛèüÀ2kžèVegª=‰QtÆòT›GÈ”2ÀjØ‚‹È{«Þ^ÑîS·*óS£,æ,>ì!{B2©ÜPJH|^­^0SqNF Çº÷³j/pÁÕ"…/œVØ®”˱’©ßÌòŽm­Š›lðœUœ5r¬Ý] ­×äè”À#M’`óFiÊz¸Y¢G;-BNiò†Û ”å'ª·0:30*ÙjŠ^|Žz£š›|’‰ÄaLÃK`ÑÇ3|öÁiÐQˆ©9œq]¥çQÿ¦WIØÌLJƒ*ó¦¿ ú„‘ÊÉj¯Äh"«á…ô!ï ÉÂ^ÖKÐ6Ç('ïÜTÖÕqóèëBé·gï‚€ •W¶Õ‡ûJJEß/böQØLßÅVM®ûIðîB¨ªVìêëAÐ@|é~]]³s.×ùl²æ”ÄàZ“ieçnÐ!½ªÎ˜û°ÚELpnåÿ²‹Rÿ®ÒÍHä¢Õš»{™Î>VÃlÝT—÷}’Áê£íê0 áÕ•adÅd(}×g¼!÷Kô§ec'ãþOuç¸DEÅš;žÞ ) VIN(µ¥%´ šÛ+Œ™U‘E(4¼øªcÏ„+ëwéT%a,¥në-9·LöU·ÅC@-e6ëüE°’ôF-cNŒg[Ýêõ-¾ê×Éãš´Ë©ÔI샂ç*_5áá;µQÓÓ²žO#ñºÕ‡b½7F—>æ·3jø[ÙYž8¯®ÓD˜f××ê¡íÉ©­Ò6þ³( {W™{Éji2úº†ø½ù–†>X×ßWa*µeXdL~RÇo±Ÿ‡õ œ È”5Ú’mõAŒt;ËîTíËXTβµ6ˆ‚s7º&ÝÜWãºý c18%N.TÅ­ÕÓ¿ÅǪZt`¡ÆÈw9§‡…ÞÍñjG·*!fk‹ß´gU~álõɦNÏrµè`e^=Ë¥ï¢fZ𕳹»"Gvíç0Ò«¸Õ%ù‹Î¨Ò±z¬üq SŠ^±ÍqÌ]±Q³ÇÜ6Y<ø1n¤ÔJ·0¾Jï°gl¶Ò> ¸4¨éŒJ¯´b#Gœü(©Øå‰Êk;éγ,Ë{Xõ…Ã÷L×0…"Q¨Ë—ø¶uzúz‘˜µ Ú'< H…q´¸ÖŠ}·E Êx¿ß¿._cßÒZj2¬ïÚzáø Œó/™‘À'[1¨¨3V.&Ê3³óv™QE™“E{zû~ˆ_ÒFöú¯!úƒ³·aœŒÝ‰m×à§]¼ñÊöÑ,È3J#«¿·_f²JQbÙOÁ«.ÊézoßF^ï`>)sÆdšœ¹FV'»ßÕú¸‚ƒx(íýì×,Ë0N\<1¬'.ŸøeÛw‚RÒ6ÖxÔeEúÎü޽ˆƒ<ÞžœD°¶¬«Óî1æsªŒ¨sñ÷Ú5ƒa&>M¡E³=Û€ïéÊ-vÒ-ª»$Š~­ÝšÃ±N‹›µ­øgº¨é½EB_ßRŠ•S › ÕŠëÄVJû<*ÜaxéàØµäŸßaÖ³|ja°íì7Šó|VÇëµâ&w‚2|_ôÒm Ìç“ !™>pö"°EÛ‡6æÉÆ-!¡<'·pTô;ô˜Î€’*ÃH±Ù¡a¢Dåa;^<FbÙM˜Ú‰×Ðm ÚFXÕ]yrÿ¹*§°#W–Gþ¥‰¡Ñ¸Î}ãÙÄ^šº¨m]¼í•°¤å¢3ë­P®¦a¤l±¿DÛ94Þ®áínÓœ4C\ˆ`²œ9¶–nš† à ößÐ,J‹éœJB¯ ÌÍMêPJ¦¹ ž$¼Æ·Ý0EN[aÌÃh÷ÇÝKÁÝ_¼K9lõˆÐÂ[ŽIëwñdX.6þ=9^…Ž„±£HÇOúP늺'2O³5ƒThó: uÝ®ñ'A|ß³ ÷ 'ÙÕ2ÿFN0±å<ŒÄÖ2óšê:¿lnhëº÷þsÕìô_ú|ÏÓ!oMÅÑЗ(%;¥ˆaZÚLò¯¾FwÂTx “B;Iש cû6þpbJt‘gÐב‡¬nÖ»ÊöìA„ƈ[/]HØ6Ë[Y¯î6?þäâttHâUØ´ÕLL7gðtã§"²N [gJo/ÛÇL[eŽýàtz Wä~®)s ¡»azm†ÍÚoª¸E*ëm#Ø;µóõ²fÕA ¿a0Uåͱ(t¸/ýÿÖôi«}¯…¡Ä§%Ô Ì³'aä¬wé©IÐV~É–‚¶ô/]·f7Ýãük&˜Ø¢b4Ÿ>µP[@¦“ÖŒ fžåÚó=x €­Ñ*Z8k¯0ÖBÌÅIs™c@ÈÀŸÇ–[]n‡‘~IÂÄL š›<K¦Lç¹”Êäµkªó÷,/wÔÜÚ3AH€²ð½… OÞ‘ÚMН¯ßé:’Iš1ɧÊ4gç–éE]GSœØuÀÛ¬`vŸ‰/10ø“+åºv§HÕ%ž£b|VcàÆênº®ÄÔ‘±±_ |ʱVWû™èzx“åéRK½¢{˜2§”¦ÀMÀr©AH­ÛJt‚ñ•þÅ= ivÊ(«¦ûü$[¹ÞÓÅe»´&Bˆ%̦û°' ¹Q‹Þ¶MÝ.ãé«JteO, S[‘f1R$Q}Zè…O%Z „aÇ êº\PW±xr•©#P¡\Ât ^¨eôƒ¥s~H‰ ´Ý¬YNºð»SO:µ/A…Þ*:{¿P¨Ý+gìDWFÄ ëÜ[¸‘w¨z&²®lB•ÕŽŸ•ü.çûõÜWqù¡ÒÚgaäøÔàŠÅ3ˆ ¡è8ãeÀDìÃ/J÷é9/q)ªÑ –lÜ£t?ŽÆÉSòQ Xîá3žÃÑì¶÷j‹È8TÙ1­›²zóÍ™ØIÖ»vÉÃ#üåÆûU•ù}ÇlËz‡;€ÆääïÓÕ!$—’êg"v ñÝOÇ1 žÙ8ì­D3^«~™põÙbA;è$Có>ÚDÛLæ2®ù ;x.#À\9 EÉϹ¼‡ƒjÈë|¼xö]ôHókNžs¹ñÜ{ÊGãŸ2¼ã vÙú¶>5oœâ7„„Œ¤g¹VÉ5j"á*AþÅüŽ1”ÄéTzOS8mœíå` »5 Å2µ„À6Ä^áð³b¾~²Âr$üB‹¯êÉÙd}ä@ÄFÍžßÓÂ-ð+"d›¬£â„2Tsh3¯ùe‡œÙKø21zÕ·Ñ÷Aed?éqÝsÂ'ûrr—be³˜"zEe>؇©l¯ù¬?m½´œQ]†ë-/Ž…Öq°&ÑQ$°J”8¡ô±õmÍ Ù”3 <`¼…'¦)g¶¿ƒnÙ+võ€±ïÍ£;¦ZxÙu‡>“=A]¤ë ö ¸ò†©ŒqZé\™Ù²2ˆaÓ#×üŒ\»¯‡Í.ä²áÍ¢WT$—õ d"™ÓèÚŸŽ=Ó:Äõ—½úuÎ$r¶Moþò`ÝW𹎕Ŧx<Ø!Î>㹦®!´Ûv¢¸‰Qóç©t‹‡]ôîÚÁ,]~t[÷ÂZUÎ/C.Ôg- âS˜É¡OþÉt^ïcéð']ô³Ñ)þgmÀ$˜#™H{¼âŸsr÷ËÞv•±@ôßiâùì?´ ü?©Õ&b¤8*€ç>ªÛ™´íÚÛý‡—û_Ë„ ñ<âéÿ\*ó37/Åó4Ê’ÿFŸ{ÀÕ7ü;í=Î@Ý@ž%}½R¤³óv<e‚A€™ˆÓåf/Ožã|8ìˆå:"D‰òl3¢àÚ`?Š‘¼'«¸Q¼73{Ânc<ÀÇ-þˆÙë\Þa!'Îë \q~&áÂLèý‚ÝA:.›Bâe,5ɲà²lø—Ùc¥Š%êŠ w1ò玃n˜åÚuÂÍ XBþÙ‹A‡ª§&N–W)׋ÿtÞµ6ƒÊdâh)<½°M|¥w/öXÔ/çv÷"­qà›˜[Êê·XI¦™­;ûð_VÛ²½¼ýZ²73-ÓŒ¥væ*D&×bn7Ì¿Y4*¤g5ÒÅü€¢Ù ë_ªðÄœ¤d(YVÇN¾Ô'ÑäŠBeF’˜&àý0¢¾¬žÚXûÂ…vÂm0>ÛÚ«A43ÎþðÐoДÇù//htp¿ÚdÿY'ìˆÃ hàè‹AsR—õÊS*³áw];J÷MÜùê¦ä†ö©W–¸ –4‡¥µÒSZvÑ®³A¬6¬\Ãe_3“&̪?Òl^#»æ‰ö“ÝãË“ª†(ØÚÛ_§Ë¹^ú®Ø§" Éø6©áw$Ôù.Ù“W1³>|Ž(¥SÌRÇ,|Ú=ñ·ZîR¤Î3°f9 h§šÀ ™ƒGöé†]ñ-©Þ ®RŽe´6ë'>1G@¤E);M®‘JÙÙ¢Ž¥¥ýçÐs†EVëFЃ†§^Ï2“*¶Û¶C'¸ ™`rN±¬·+³Š~ø|ä§¿¡ý‹ ÆÔþÌ"׃_ü‚© U˜²%ÓÓdî}zÛ¼ûT——&¡丌¹ƒè×åÊÀÏ>Ÿ$¢nkÏšþ|R˜Ý8B²…ÂKõÈ —ŽUçÏM{íÍ;¼ªëÓ¢¼–ºöíî†[SÚ¨QxSä¬ïæåCaäŒtsŸ‰¶œ cŸ®¡>þe#ÌU†ÃĀNJ±ð,ÏÒ$ú{º8ydŠ9Û8›îÉQ1ÑbeýØz‰¢£4vŸ™›ÏUô‹«ZmJÑ›×~Í'¸•¨˜*1*ÁS4씜úï&Ù^\8≩#÷§g°4`ÀŒúiݱ+|ajÔ׫շÁÖ6¸0nÂØ«Ï5ÑsCf¨`ÎFÒHv÷|m·¢Ë8äÑß“̱Ž?Y ¾¸50ÅèE…0Á¯Äm½˜ŸKVØÞßá¦rR~öf&wãÅyãÚã²í“'tãì’_†„~"Æ&åÞŒ”É¥éC8 B)Ä6ú°˜îÆ©Z¹ïdz¨Þ0Ö;‡Ù=;F ÎUBüoä^¾-ßò¦ ,ç‡#ű–¶d¼… ˜=#“<P›ÛŒ_±žf3¡»uQèæ/ZºŠÚ‚ì,Ä@Þˆ†}]ú0ÖaDÌŸ!ßHußÏ„i†·'÷<+Ö)Ó“L¯Z»\œaª]–Že3¯p=çßqò†V2p•@ÄßmkvÔQb#±&ª—tNé'íž0Ö|Eéûw“2(뫽u=Ls´á)Ö`dvãþH`œ†ÒsQüë€S1˜\œ‡i¦Ê°Í4ÑGXç êõYô¹µ—XÚ8cß߃v,Y×2ÝåÿŽrüw˜6‹4î&Œ#S` Ùù}| m½ˆª¾—}[–P'ì²3<–iûzÁì)‡©Ä‰&VkZ”kö++`F~f–.¼õFoÙš‘Vèmð°q¦cOm4»fúNÒœ2SŸ›Êü2Qß5z{7ŒýxYÂþX•\%þ–R<8]gï? "uœKùí¨? Þ*ÑŒ–"ûS¿ÇI…ÎEŠÍÅ`Ëfò9Œ¹«~L7ØŠÍKiN±Ìow˜¦)uý´ÆÐ[Mò`ñ#rl¿²;¨¤íÝ¡½Ó!d'®è0½ AU<¨à$,Ãô6ME¿‘h$j¥ƒŸøíÉ”CfŸùÁÞX¥$müò÷´¤ƒÄ‚3Çj¿@}RýŒÀCc &'Ÿ9 #扖æÌZjßb_%·×.Ûgv¾qu;ÿÃáuL¨úždÂo¹F·¾ŸG:$Âf’ì×M:ºÞÜ«1âÔjUºT!«›ºÞjQ"+Ž¥{ˆÊ ¼ÿæ3½Íµ÷ÚÍ T"CKÎ\ôØŸpÈÜ Óιݔÿ8 À×öV-|µ ÇJèw†©é\ZN^Y3ß4RReo¸ÛÔ™—C6-¤ÈKÄØ½Ì—AŒHf8Éü$k|¶bÂMÙMW¢•¬“q*·‡šgòÓl±,*¥©ãù™Éh7Ø H…ÉNä`C&NDPÚ^nŸ #û¦C±ƒøèÑyájl¶ÕÙ51º¬bÙ#&~¶Híð¡B*³Ë޼èFn~ò}û>õßøÇäÍ&ùÊK3ã¿GÎ…“û‹ÂJK9¶J/mi ºÿm›GY\ûüÙ¥5*|f(ÅáL¼¦6ïÔ§ÕAÞvЇxP/»Íl›Çqî½â:φ7ׄ3µÙÎiá!ÒÌz:·4çñÞ^š˜2¸rÍYê( ìR…­åîo¾=Ïάw­¢€a¹i6Ç…bxFvR”³|oÙœ›ö»`ó§x¨‚ºá,5º› ÄËÖ».ŽD lH,¾›^'f OÌ;sºãl™Ø‡“Ò{É‘’—ì%@zÖ<6¿cÁzrÔHJË¥bZÙÞÒ‘õsƒl+/+[/0@»ÃõŠpþ—ñ+Î?›¾´Œ'L²¯3·|Ôßÿö:Œ“øÁ½Yû,DZp}…V1Ðð]hèÒmáÍêûk;ÑNþÕe¾†âyæÆ9¥ì1ßÄÓ­™›áÎz=@759Ä“»Õ¯‰i £Élá•ã,šHY–A€>@ÓuæðegòeÛAS#sT-׳m‡ÁM*Šzb-ÂTܱWió<¨µ£™v房»:WäSzÚ¬P‚b¨4µÊ¢ÄïÞ+—7ƒô°P³›œ¸Kÿªe"N+"ñ4ø}W,Hp,&° ¦ál ]:̰Fv{b[wL˜ü˰(a~˜1Œ/ ½1•³Cõd¦¼;^™Ä·É´7ô²’AûŨ[îÓ1î<áŒw¶d†Ú#ƒ¯±(Ë_µŽ“3wXú‹)]´\³ n³øG(ÓÀ†)ŠIü|'P+\8‚$Y\ý°¶ÿžPmcNpÈ4Îú` “‰¸ó_€·R,þ525-Ù‡†Œä+n‚¬‘;%„çæÚªšâ<;Ä|õ£qþ´Ïdá?ÅÀ”¨zWþG-NôæLA²M¢üšy¬ý‚ÏßÜ0ƒ‹Mrð¬3âG¥Â˜¾»nútôDP5ÎöƒgrUÚ­)x~d̉*Âf²Îa¾Y‹lت.S­F6› Љ™T)Oûà¤S1Æ-©t%ŒÍ€˜ð”еx˜)1T¤??iÑÕÎäh­ãØÌòɹå“ó1Ÿ\üÏ¥²ˆ Λ‹ËY:ÿoùärœ7Wü¯|òÀÙ)eö¦<[BHÙG.úï›AÅtS ªf»ïLø¢5‹8´¼z:©ÀW7É9:IJ­zÁÔ/`¨~Ô“GM-ÓW/Šw¾˜7¯¸Ó »‹ç¾ÙÉ›r^2wAJ ójT=üFe_”·¡“Þª‘¬6Éì|[ìGÇË®Þ}£]B-Ž;tãǨú„£¬~zµðË"ï š™GƒRzØ©s;Ò7tÙÀœ@©µ<ÃŒ—}\•VOÏ<Ów%¦{Ç>íµk+› Ù=ÖMšvíY…Ñ…qÈ3&õ.ØQ² >{Š-ŽŸÞÅ?Ü1·Õ=B» ^Ð5goi%²Ÿî¹–Ä”è%ÞçÊâEò1íšYðÁWð Î)‹“âî!‡Ô*cµÎkyYÕ¼v%Æå¬>#ZÚ3’Ûò¼XWžp5Py^ª›Y‰¼¡ýtqEk¥/Oi)ø±ºù E¥,«m¡7þôËX7•Õ(•R3\Ó€£f.÷ƒê-`;9ܽT†Š½þ#?÷Í1þÃÓÓx[èL†•ѽcº§Íjƒhn3åêŠü£Æž–BLz?®¥ëŒÆÆ¦É¿ øË,Ýc|¿‘]·Û)^¨qd™¦£C^ïÖÖ󌹩ë….rÜpg'?¦™"µ²Å°N¦Få…;Í—à09ölÌÕ«Ù‰»Oaì%Z×KöN˜WDP lGQJ:KÓð]RH¶SKyFGC•½¯înѨO¾ž,û»F}õæmÿZ w2‹fžW§Ÿ±›«ŸþŮݽ)sWèM}0+ufWÔžpL pJàd}4R¹,*cÊIž/ ÇI‹-» €`GºùÖÄ”¡¤úüÞeaëO'W´Cžs‰ºÈqf¬W08F3\9Lxkë‚ðC= *7Q§ÆZÛ¹/î&ãAg%WÅ@!J¦ÿ*”xç¶5Ë=v9+gŸ¿þüê7¬n$r!ú8^Œ¶ó¢º¼˜lC–<Œ5.öþ4ìôùˆ@%Ǧðf˜A‰\¤ü–íœÊf.÷±X×¹9[¾ÈgLB±æîUÊÉÍ'¬±-3³¤³#Fdìåø4`Ãn ĸ@î.Ø:LO¶ÖHxÖns*ÏoR>ÆMNkc²?^XçèˆÝᙺ²³‡n½UÙ‹²Š‘/·m […°Cÿ³²?Ñé‹§¾M© ö ‰‰†^û<¡ê‘"Ïű¥(Ž^Ý9ïɰûÂ8ƒt`ÑYÑWLåXQÔ‹':¹»- ËT®»djã#ÎD£_ç+õVâºcJ¦•ó+aœ$ÌJk¨yv*Xc0ù+m-}Ö×ö¬šÁx¢T´ÃÂy¦Aˆ Úê[µž8¢ÆÖE~¢½`×P±à©Ô€ò j¶à=¤Ð¯ÑÕ%#ò¼[ƒ" v¢ÔwžpGa6þVpŒÑûƒ¶­Ñ¡Ï‰ûî™ðNa¢gxʆá°\,ý0%êæçG$@jdæz¹4ý,Œã5¨jqr›'·ƒÕå±~Ôƒ´X|}L}£° VVUØ¢š@dn^/L·¨WùkW3ßaE‹gØ!l9à–@¤8vn,ŒŸÅõ½FPבIá,°¦–·ª Dr–ÄŽâÌ1Â#à›²Ñ5Ì2d.’tìõ9ßùýß`½W¾.è†5ÕKÆžŸìÍ–2.k À@f»=ŠÍíꔤÇÕ£ k±V+Š ·¯4qêÓj÷« ?%.ïE«áó*:7yE\«ØžšS 3àæ«ä‡€OäÍl³Ÿ¢K\DýYn%* 8¾}Næ•£Ó0hÙõê-à–bÄ46äLNOUX¢¤q˜U÷oAÝàsª®ÃÙ*;þˆ&¿‚£Kg_}µZ¿,±/vkn³m±EK/FªQáþÀSeõÊ2lñ0Ec$¡Ÿ2ûŸiÊ9; r ›—±Äß• ò ÈÚU?ï­9,’Æ| ±ê£È"qç0qâN&gÔ#G£FY7s §ãÙÏ÷r“í·}ØߪCÈæã$9˜‰Õ-µ9ce'jÔ˜HÆ%t°œãؼ}&¥“膬ÞäßúòäèõiaãdÎdh º3*·ôþ½ë+Ún:•ý÷º¦¶Hü¯»IW<»KzÙ©Ÿ–2s˽ëùRä3¢Æ<8Õ/î_eK\¦ºyƒ?ô DŠ; Š!1_ï©ðJN–,` ñ¨\Œ_Ú Odë¸"¨®’ ²fÓºÕ˜Ó²:Ïpkéר±Å?k‡Úæ“f¶(ôˆ#e#|ÇY¿škñéæg*‹o”Cw"l3§’Þsy‹ßp;8n[K]‚ÁÚ¬Ö$góëú+BhÕïVÕÞ0zOmÚÈEßœ¶ ¥í§ âÜ–â]ƒ¹:~ZÙЇ„A|Fv^ië0ÌÖ¦ö›²º€eŒÑV,‹ˆ›V6%צ’Ô¤qeÁ3X„›±_%$ÅŒ1ÚŸïÈÈžû+‚ÅMNnûèPïU¸’R…Ó²0#y„ö(LSKñYŠdcëÌÂÑÙIuM“ú@òVÙ¤±Â=;®wf‹›L…Z¶×"vŸ\Ôdrü r ñ1úl­ h©Š‘ûF ŽM»})Ú?\tùAÎ]ÔÓ9ÎÄ3’ÝGma_nÙš‡ú.ýÓµŒ°­b}§¬‹)'‚D‡‰ão >>Ë×ã.ï’IÂÉÓ³²\?]PA˜+w¦¼p×-égb÷ÑN)ž®~é¬R?Î7¥À¶햞„&g”lLÁ‚P4~vŸ8~<Éþ€ÜÇÊòß21òFÁ —ça,f$Â4HÅö0a]SŽ<´PÁóŠlÕW瞆q¾"/öˆ×>@"Ø$"Fk:h}§ýXÓc·½s³ú}‚r>¸3zOŒ7QÉ3Ù‘’¯E>…·ê5írÐ|HÈí •ç¹aMWÅ ÈDû‰VáÂÄìµUwÌ–-x:lvýsWŸH}Z3Å8¬Í†18ášø”­ÊÊM|½;ˆ|†E=é`âð¦øtΚÉãHüÅTyÝFÕå°Öë½¹€Ha‡‘Z¨V³ÞŒËªrqå]úÀFãÆ€è뤭Y)ÂðêX…%ùâx‡ÂwñÍ-:_Ã8ƒ‹ öŸ Dç…>l(W˜žV,¼e²2ΖKp¨YÏhC‘qѰV‚þÄyãPò#ä `¤+=Œ-$Ç.©í^¸$4`Ö2èèÁ3¶²P'LQ*ÛOxÄ!ž5(œK{K“ý¥02 *PKT¶¢0|µ/ÿÌŒ‚Ct…'Ñ ÃÆŽôÀ9`JÓéšá6·±›,ëã×€ ÆhdVöÀ¢tèÄ™„ŽuÌ^º×<7ufYßW'è€@l#%K\‰{~ðÜü-' p&2„Ú<³ga$”6ÅÕ0v—,†æƒç,€³$îm»“ÃEqw‚Ée®´7ÉBóïqZáÜ\<& £ùG²6ß àþ?—neO€ô)IÁL±Ynú¹îP"Q^§ UÇD2ÿ†1ìæ¨‘FS]Q$þH€¨ÒÒWBzgü)TF%s:=Nz8ý_y,Ü0!!ïߨgHЇ-ë~òYÚÕ €³µß!kÆöq¿-(¿‘…Ý`%nÕÑ~½L«¥õµG7sËuÓ!PþÇz»Öë¸yƒmaÆåžoÚêy'x/!*Þ*:û¡<ïMýÒÙ5>°ÖÚ 0êØÔbÈ­öÆ(´V9uÖöE1”»6š2¢ÖYÃÀö•ÚOæµ/úýÙÞßìÔÍÌ)¿?#¾‰Þáõü[ņ·N*M¼ªpµ°ÿ¨F2‰LŒØ6—ŒW¢9hóÔýðˆ"§Ì @Fé†ÝP2´ù4b9'>y€A¤NµÁhˆ„‘d÷øút̲ éÿÞµ‘hÃûôf­â;ÖÛÏ«îs›û°gjv>p¹ÿŒb6x†æÆäº}¹Ø¥£Â>Á˜8gZâ°¹œúÒ4oyÁõùÏ÷h!·‹}ž‡þ`¹¶ñ(çÆ°1Á)TñšjkäÂãá°GbxÕÞ‘«óé\Ñ 9²-“J‰m þöéC¬x¯S“Rf?,†¨+Kò®ˆ³´þÂ×0T¿NË2mÅÊì§zÁÚdœ.aâ0åõ[èÆË~4-—uXÊ>ÉÝ>c¢[XöûþÓ?ûx·g¿u("9ô¨1 ihˆÛÚÌ«{k)õÆ`úÉXlqP‡Ýâ’Ãõst_n’Í„LçzÔ©Ú-à…:þV™OèÕ`¼¦\›š\y1è¯Ç&§¹C™ÅaE¤#1÷Ï[÷e+E+ ¨Dñìž®bHè~ŽT"¾$.g+dÍ´—µj )tìÖÑœŞ)Øá»Ôg鼺v~\¯ ÀŒµyùÇc Mm½_Ðȵ×}Šæ3œÏ;Ÿü²mŠ.R¶Ð8¶DÏ|ñgæa YÅ!—äãO3AMWs‚BW½Á ¨ãÝ„Ö)Q.µÈs¼„óg?sòÔ| öpr´Úq4ŒÍË:QB"ëã3…àäw8[MÚ‘ÕœQsoÑŠ%‚¾Ñ‡w°§ÍªÿÎÚ(¢ÿ8)\Üü]šÙŽtîÙÿ+ng~4“{†ÕéT}ÚζŸ^\Ôö̺"&oÉÙ‚ùòßùY4#_£ˆ¯QÌþçR%Y‘þžF‘ø'ÌfÿöoÍYcfÅÖj#õ:WeAIôWÇ0Ðvöå˜\~&àrJ ú5°¹ñ ‘Ý €“ÕƒÀ2ªç†4£Wrè윘Ë?Àƒ3Ýw¬+Ý:+,¬ON‘òÔq Ø—ô¶P<¸­]Éÿ’i]‘!4[‰ó?§>Û¿OnýHfßï3öc[ÒOøbfLL0“Ôy´V^›ŒãÚìÁ_~bÖ Œñ± Û»õáªâcŠ¡®÷ïñï‰~²Jé§×Äñ(£ðàÃH(l[W·ÿz´ ãÜñ‚ < ­z$ 9|ZÆê!7Eé`eØL¯ÕÕøWrnf7žè»ë†?ݳ_º¬‰¿Q™½¹¡ßÊýASE`)RaŒ÷M¯ÝñKÄPñX² ]ÓêN«iÜÍMûg7q»[‹JKÔ³Ux­IMrÝ_—±€]Ûæú 6w§GpÎ8­Ÿ¢§!ÑäP"˜‰´3K*Ô9lÂPž£`æO™¯QgU˜ãØÎÞbSvr‰,N¯6͸¡[B/Dp7M³}>»‰Å>55¹³ßöÉ—³¥4S÷#æÝ 0Iª¯uââúÇb´òºÈº¨£‡Éô}ý\?î3§¦·³}/& ߱ޫÇsÖZ µí•<]C×Z¡pÄ”ÐÒÆŠ ÝÆ4¡~†äÊ$Û ÞšC:âyyï>˜„÷«Ç^‰,7d)Ö5ca?ç\ÔÀÈìl³æ+³qP¾&oÃtq4?𫺶‚+†ta­- ÞèO÷ý‰ÿC›•N—uÃÃ7ÕIóÆ(¬0уx8òjåõþy0]7»ž3:?ç©ÁW¯§Ÿ²h;~$·‘ÉØp6YGâ¡`ã»~„Ê)[Yfç}%v‘ÑÂÜh<ÁWQO·&Q+f§±ŒîNwfyeÚ8FòÙ1y>C6¢sÿ|÷0U¼«* ̰²êÓ§•ã|,HöŠ0½ð£ c5Ží-–¡z0y p Ù×BSÔä¥U™Á;Ñ`·Ó& ²;ù"mÀçõ°6éЀgâÅŸ{îµr¿Éø`××d‘X`̈ëöuco}ús$¿hÞánOËès{/ðÜÆدC˜úY÷žÖXEŒ'g™éîØÁà dÁYmP‡©1Út\˜D3W)æ²ø"ϵið¥ÆÑ^˜ø2Ëè@l+4Ú÷c†¿pŽAq9ŒeÈMæHÖ…›–-.(XåR|0”ßÀ½ß’'fñÅ9|…·u;᳉\Ÿaæ[¢ó §ìH¸]»ÛÕ.Žë,ØÆ ?•'Ó7$ Ì\‰ÖÊËõqûîÛŠ ýâdD‰ v˜WYÈ–­{”WG7E”oajm~YXϪÍ÷žÓGrØ–'GÙ![îÐàáA3u®îì/ :X‹øÞ†/"„KæOÃÔÛVÒÈm^aða vqìœüîð¶6¤é/1Z Œ'#—,•Ù-Ì÷"ÀÜ9š“k=ãúÐÓ NU;¯®¤Ú¶xI^¢s-•T]½¶osÿMý©RΘ…}ŠÆ¤F:ÃFþ®­XÖ¥o‚zs'€ŠÓ*··cAu#ÕP—ÕÛ˜•ÖxnÛ¾ ñg’nrö‘.TŸ_~wê4J›ákæÀFZ¦úôÐn®äwg 9J¤÷8GŒ±QCüµ½¦Ÿv~­Ý#urŠ8´³L»öwIõrÏoåÃJN¯#S™R»ãS5ȉµ®  “[E"Õ»ýŠY|DOÃ4K4<¨ì;W®ÉcÅälsœ_Tì \)Å¥°QoŒÝql"Y‰-/HISÅ3²×+mqÜüЂá'ÓðÕ”æy†›º þRs=°½ˆH&AóŸÕ¸kÇκ tÛÅç×üi}Š_–!U/0J›7d$i(ö;Sõ6…;1]]ó“Ù†êpVæÊBð… S·oå/N-dfºÀ|_–i ìç{®ø¯Ãì¤Û lXÓkb›¬‘Sߨ’Ö©m,Tcz”…­ýgÝnÄÏÍS¤´ºìCþµ:x©ÓhùXw^¹›?Lul†‘‹a`jÁiÎ%ÏMƒvqÎ\a8OZu×Ô‘eÓ1nÂ5HeÄŠæ6åõ·ë7w”¾£BB°V†{Ø+5Æu9·35‘]åß»Ï ­E°M¼'J­u"Ô”„V¥V+qÙøÆ±Gµ¼W2F£`'à[‘…@k ·ç•<°LBƒ0Wž ñ3Ê58“ýYZÂý^SŸ†‰RSËV:²Lè +éYhË2›elÞ5OZÔxºfjž OÒiT‚€aØØ éZbI%vˆUïDDÇNûn;3|Sk:—tî÷öþu[½éêŸJfÓwYßê2«ùúð+L$…ùWN€§¦ëŸÈŸÂ¡¨Y³SÝ¿-eBØE¹3‚¦%¿èT-“£.Óy¬ïŸ–äÛŒIxêZX6síÒzEU"»[—aj'Ò-öówZˆûæ”z=Dƒº-Ó1…yL«×:w;LMÓ2;%+| UNX“9½áШÜÍú&y3‹e­8ãâ y¼l‰S¾â˜·Æ_yŽ•â9aÁƒ1h2"”&O‘z-$r…7Æ&åíþÆ÷j÷Ñ¿úUžÀ[xéÏô¸|¯N¥a¢TDñ‡Š•š/eXÇÃÌkÍYô÷ŒŠË÷Ëqj]òäÏW7}—a¬e Ëx˜G‹Ö£œrö´:ðs¿ä•á‰Óø›KÑȘ7¦szÂDØk‰¸Æí[¿­°I¨b9¶U*{àAć ÀyŒä‰Sù g0PˆåLˆ±­ :¦uqŸšyaÀ*­«êdºIQ–º'Q­ÑPBòž~Ä¡˜ï¨Rò™/mPϸýðÒ2óüÍâÄZ…ó@sÎ\d šï]ÜxêPM)°’’£ˆ·Yã•9t§ú÷¾ÇxÃ&/N?7Wh¤{f_ºÙBH! k ·‘;‰“‡‡µ†Ñ:o&†½\ÄYoaÉ \`riÝ{¢HY¿¸y±øjñdáÁÚ,üK›È¢·gÇ„…ʳpI%kW6ðp.úâYkξ€7$Ò†"…ú޵S“!èŸß€ÜQ[¹RådÝ °µMõâ}lˆ$72mQØÜ©ÝŽîMp¹ëìˆ.µeá6n³g‚ ¡~­67ŒÏj14ù-$j8ðŠÚ£‘ÈÿâªÇ;îDùáV«öIÃW>Ù³í>„wÒ*$ix L„3NÇ3*ž±ågÈe9õÉq‘”G]ÂÞZk°QLðÛSŒ0øÊ…Þ<$=…6 †íÙ7½~·ˆŽë”ä7…óƃ]Vß¿¤#(Üjÿß O‘5¢×ò@'iÆ~Ñmt?åKA»Ø‘?nÐd£‚,ú’køzÜßÖ½jÛßÚÖnkšédïïœ"Kf?1·£nÝö}?ø$ŒÍC Äâ… ÒJÜT‘½á2z¥e‰ŽvqÝ%…p èó¸Ö¿")š?Eµ¶@Í·÷Þ!=(~bW\¤×­Ó—2'/1¯§/GFÉ–T°XMž¸Ì“š0Ud]0ܱcØw†|Ìfzqj/¯~ìßël?lõl5os¬Ÿµâ^:ÍÉ3Û½ß:*#Ñ]¼ωukÂÛ:xÍ)ü¨j††kY¦çc¦ŠËÎÔîÈâìðPË/]SÀ+ºRCø9¢ ƲU×LlÇÎ1ˆ<$ µß<÷uÅvÒK}]Q¢€r˜ßSÄÜ´¿5šÂ‡S¶3ô&t™µÅc2Ú#ìâl㘠Eêë!h¤½o ºƒaôúý†DŠ0Í~ÍàLéÍŒûÅ”·h-ÕÑØIŠËÅ+{ _Ù;±ŸûÝn¡2¯£Ä¯iÚ'kÙºòü9B?×§Ôb„€Ä®þ~ìÅž۔Óz·ZB[÷g±¸.äxv(Œ#HGÑd仨2åh—{”·U+U‚{ÌF$S"”6zL1¢M÷gíxÆ´jÙ?ا­JH¶\|Úé?…$,G‚•e¾gqŸ=¥>zD¿( GŠ’¨O÷'\^;Ì™uba&ãåt»·Ž•×éM”åáéš¶;êy^àÊQSqf(ÿ ¿ž±×ÇÇÕùG¾h$xŸ–öœçrr¢æ“oÍë3Ë0¦éí b\»†2çÈֲdΦ‡_ câ˜Cú0Ëò—÷wV×f~Cm°eÄÁ?»+Ý´ cš¸ˆÞŸÎß#O®[«î+Š£b: ݷ݈¢ëh͈ é%àl6hY¯Î?µSG ’uHe†W(“|2uÿá…/Ñý՛S“ž\éÇM¥ùé“4DcÛdÓ.î“j…þ çÝüŸrQ68Þ}Ýn¾-ÃK:[t*7œâé-óxèÒÓÀÄ8Ä®—oïòL'îîü[Út§åÓ)á.nDS¡„Dë02S‹ú®i >%Ç©+~¥3,ñ³r9à?Ñ'ÌÝ©×êèÙYÐݯÙÝ“Áë)äµyžT%îßNK%&›B’œn<Ð9tó<Ý÷ò‰0r–‹ö˜‚ûÙŸ/D,‹‡ad==^-“ÆäŒ:²H“ë’@m^»¹ëߨxµKG@×4kטŠ$ÆòTË)yb;V÷Êi/Ap*í…;Ðmò]€ÎÌK7VXÎPþiu ½_s}p¿¢ù£þÜurOû6Ó>æB¡ƒË’,ú½Âœü2ÔîÙà‰¼¿g÷~e¢ žŒ–õ«%.ß^£×ØÕÓe®;éNÍdaYAº¬¯Ñ$B0ûŒGb׋é5(€ûýt5GÉ·vJý²¸E4k®³¾¿¶¤µ³…=:bÍuì8­\­Ò¯ü® “n[9"ãi/ÃØõ˜y KlÕ't—8hô£_vXÀ9ër£0UÈÇ;A#ÑÁkÊÁÊ·Ù¯”9Ž=»7]Y;é‡]f\8X«øK¨d«jVù1}ÓÿÀôý Ér.`·¨®5Œ«’ûÁò,ÿ¼ÝÚ´¯,²i_Å|dûf`û¦qÉq_iV€ö{)žgq’ãY‘–ù#çú¸øw"ð#³*ã àü83F¯>__žè1š “sfá0$è2ÌïªÃK“ZÛÉrÙ_ZÚ¬!æ~¨s’T‰2]XÊ÷¨y4دŸst’ø,~”žâázêðveJiÈ ^·Çïè©R-ML-’žZš;Óέ½än³L ®Ñ¾ã°‚ùد6RÊ xtÝ`‡´~ë‹q@g³ìïÍ`ôûvsJB²³ gÃÑ¥Ýr`íÌù`ƒˆãêsrh)DA?·±Ü0³m´{?bÀ ¹*´Ø×œÇ¬zùkïRÉÂõãÝkD¬¿\Ø_ì÷†±(Mµ¡èÈ#;pÆ9Ú|ÏLWVf¿|`‹`ÈÄ6TkìPU7\è?ò„Ðf£Ã:íA¼‚|Y3#Ö?õ†) v/hÙ 3[¾Qu6‘sRæ gÂo6oL链¾(tÆ3Ñå°TKo˜DÍ…™×+?¹ŽJ¬-*$…WÆ}{ù×ÝJ ÷ÈÞ0ª(ÌŠ2páŹõ$HZsïš«ÚåI¿æ—)Hp.“è"ø3³Kóõ–R‘|ª¡¨öKî3ÇDú@øuÒ^ É^‘|¦AÒŽI€Âm¶ÞvÐM˜GÇzQquŠôQm+ Ïé•èì˜a—Tá&„葘‹*å »²zÆ!$Ðó¿•é<𥔑’wmëêà-AÑ“ÅËÄ>OsžÛÙaå¸ÍÌéEýÂÆß·¾WjƒDÑ’¼ÌÒêì îQþ-$GfÔOè¿mUW–:ê™W¯ÇCê¨ß¤¨Ü 6–°«ü‡a›òM%€ÿ’£Y¢ÂêšòÌK3c[ÁR§ãi)àÕ¯‚]P†‹ÛúYÏdâ€8Xå,„=²p¥ËÇÕæ³¸yTËtâû°•XÚÉ.ýS ìšý¾ë{Aþ êà‰!‚©ÎžGé­êäQ=2^7 hé =Åè'ÇR lA”u‹‡'¯0ö‚ªÊªó?pñ‚³} D.`ÍŠu.ÝÂV£Ž.Tô$¶¤âJÙÉ®Ub2žGê©pϧsè‡>Ÿ­Îž• aýî\<™b8{¦ #£»éH?™ X©¿í%JÙ‰¥‘ƒ’?"£Ý œ)¨«cïOTG®3™—ÚÉbÏ(z8(„œnÕc`++Dá{ÒñŠnßC W4KŒýZ™¿ûÙ³&y»¬î b…-4 j;ðãìïSx$(Ã÷¿P.Ñ[NQ¼]›g˜l£ YË"á„C%ŒßT ¤Ý¢ÅKöÚ§ÃÁIƒóŠÚq//)œ£¨¬î7¨”~fËm™jR/úèkL»õYmÐÉ#¦.Ë $Ï8س]’L-ºF•Uš-æÈI¶Î^ÙÆ=çø»CŸµMãþòöéŽÊ’oœ=€/vòÁ?OÅ4_LŸBˆv4_bøv» ¬®|ª¤w1t’óØp|–«Ì ÒÂñß& ³’ÂìBŽ2ƒ™¤órU™. E QuÀV“Í!`´}®3;´çÆxu]uÿÓbµ)X̾º{B  Ow¥WzËËæ:ç(Î3S½L@JYXG&B »tìåÂ^3ˆZš‘Õß‚ùêš'î^£ª¡î;O ³R·8j2hõ5Í`%øw6hMmÈŒPk²ÛÁ)V{¾/ΘZ§JŠ VV߃†ßñ­Å …„Ø9{~ta À†"Î äªÔ:êD‰‘^mÄÞ]b*ÓÌm =è6i. Û[³ <ÑNó½SÍÞí9ŒIaXʩӈŸ†ohpA%Y©E>{º ue³B*}å¼´Ÿ²è‰užwA$«}h£T‰K3ÜÿxNiNMx÷Á^Û嶈À¸â<ã­ÑkÛ[’îÓñêÒ1úx8& ÔÞEO 0X9©Ê9†&œֵĤY£rØ·s8£˜;²ÈŒã2)kdÜ’Æ’›95sòí¶åÔ1íè›”IËݶ+¶ÁÊ%A¬)®é¢è§Ù·D¬KG’Û/˳!ÎAÝ9o, YÉÁ—01’Ò"{Îî} ¯u•%ÅAòøÈ|ÁU¥FnÞºå‡/Gñô,(0"“½È¢É!g$Pž¾kÍ!ÃÜ|ŽáGŠüð8¨šèœÂêX »Ps]ú%©,“´ñ©›'õÅåç`t«~¸eíâQaß!2ˆ¾?ùS\UÌI’RY]Íèó±ïÕïÔ84Ò¤Íäu€@ißTX‹È…Þ#Ówo«˜aCl.;nàéà2É^QyÌnñ‚M-´£tí=vø‹ÕZ•ÞrбÙ2zŠÞ‘÷3"ÏÌ3D±QþHö é=œi›4W÷Î}43Â),ôo‘ò³±„¸9}WÇ»tÑç&°š®}¼òu„J•aiÑdöë)ýâ*¸ìSѽ9ì} zYüêÚÅꛀº²ô$ ÌîÄgèuœc3¹ðÈZ¡*usšƒÍgS„ p/fý£PÖMz%A“»ðÿŸ9?ÓäWÇF$~¸—¡éãîpõ) >ò ŽV®à’õRéî •øö{kù° •±y½_LOô™¢»ìhÞK ßöaäYq!šëaœËÖt¯ mUP#Œs8YQéÊ’nUg[ììSz ^˜ºä|ˆuÂV«£éóVtž2°ÍbäÒi4·í/¶OMÃE¬à$ÔÏ_üæq:þrØüOæ»Öè¸Ü%fƬĖݺ¦ åÌÓ ³0Ö̳‹îýˆ$|ŸF1} "EÚæ­ÞÊ—õ¤Do&ßi,¾„ïDf]}Ès6÷Ý5ˆMͳ¼Ú72N†Â¬©­ê/t£ #f£8ƒ…+\.ln¿×Cg²K˜X̹ñ±–Ì'Ðÿ]¼ç¿*%ÔÉL{lïQß ‹Ÿ¦<ÛŸ$aš§” ôo‡ì®ãeÃÎ fÒ³Zå°xjvÁrŒçË)Í€áS¼xÍzOƒìÙ®|¦&ÍJü²XJŲqËO”ÎfTÆkîÉ}öçÇ›¹hÃЗã?Ó’Ê7òFtñ"L›{¢@rÏLÓÍAHßl(œµ+/\c[´‹Ñ£uÊ™Éù®0–7óò‡¦‘¡Ñ±y¯ÅýM¶±ùÆ×œàù½>:áa“koñ3þÑkÒ??¹qØ\O]ÅÉCzœC`˜nςґÄñ(ò†ò’¥8=}—~½d¨oÿò¬œ³ßÒSبSÓ· àfOn®Fm6¼ÈO½§,n—9éËu"Œ¤IEO=QÜl«[?‹SÛ†ÕJmÅAk߀qÆÊy¥r„f^“Ám>DzrxtÙ q®t­_n²0(©‹§v+µÅ‘†vÝ—ÿ[qÚ^…$*}4°ïoéiÞœ>n'þá=>ê®ýˆ”ƒù‰Ó(™ïc¢¶€Pð¼3‹•ŸÌU{qöpCãÙ‡²¸ÓÕý¶½ÞC}©Œ5;ÎD/O#ÿÎDÃLǨ@ñÄ,B¾¦9Í6m’ƒ"Ýã¹ëXG9?­ð9&oáÆçNŸÀ0€E‡0J¥äå!ÿü”˜ú4C ?VÄT™ð^òx`Û÷~œ²­×Óã9§kµÕ[Rk;æÆÿD@ñ@¸íønÃño—h1]=óÕö¢lL¦Z&·š”}V2,• Án’ªÝï»`»Eã+i›¬%RK¤–(= PFHdinI€$æüC±òÛ˜ ÀÜËi‚?äñ,OþKZ ŒÇ´ÀÿnrÂ>tPúöC^;§q3lxÞLÜìDE†þŸ¥ÀÓøOEäô¯åë‹_àÅĈE”_ºEú@‹ÿç¼áEhå±D1ÿì]eègß] 7ÿøÓò²ô°”€Ò°uòžxÁÖ;xŒÝìRuÿÅ›¥¹ù€[³”!½è7ãëYðK%JB„g[›mÂÇÉõ߈ñú’pSw†c!"ËúÒ¥GèXôÀŒcõl©)aà€J¢r7e蟶¶ˆï0[Vo¾?\NPþê߉Ãá8(»+4ÇÃf—ßÃÜuΟŸßÄû£ÒêG`}ƒ úi˜º¿­_a¾\é.ºf3MÿÓvòŸ Ž3QÝÙYþÎLÜÐŒÅxç)–"Ûô·‡­$ÿ’+%`kñó›Õ·[åÒL ×h¨®ì½†‹³7sf+!éó›—* “Û>^¾yBP yè,£ŽwG‰ßsÚ/þ½¯!Al›>?¸|v›)…3ø­“‚VêàüNþ” ¢û²zvN,‡›õx»%[ö–ñ°|÷[©¶6asQ£Zå=:PU à’¶7;†¼362laÉÎáêUørÂÉÕ Ý;Ç€½ùl¾!G ÄŠ–ûáö¡ê†yL]ϧWƒö4M‹ß--LgUpÚb&ïŽ8!Ê–[›”¿›Îƒ ç½AoÖÛ„±)rq?n3Œþ³.ï¾à×Êá 2¢Ž%¤‹8…4w_¨Þ˜ˆ“XÄúü©þTçûQb‡_dsköqXJ·»«=φ=Í5²…¢ƒû1hËØ9€Ò s`Éñêv/Íus‚œ©Q °áýŠÌÜP½CdðÜ÷CR ySbŸ£‚šå>±`0^Ú¤ÚØ¬Œ“>ú£Õ–"áËN¯½_pø÷±Ês\ÁfÈ€jVøÎïbÊ,:g•$sþ€¡ŠE»sP‰ýˆ)BØ®òܧo €ø[À6†¸~ª2¿ŠÕï„}›Þ01¬ëªŠí´Øn65¤Š5fçðZéw]Àˆ¤4{Ôp´fy©Â¸ëNNT®¡£<·r„ë¶*î…‘¤\Ð#¼!€53CS°ùüÖ½ Œœ~2yH¼9ykVXÒd•r¯6nÈaù°ºò «U]¿?¥¤cc„ê[ÐDq­|\8(À˜üE¥4¼:âQlêÁôÑ¥LZv,Ž©ô冀{̑ס£ÙëïÔˆá¨vœ­1ƒŠ=»®ÚûŦ¼¯òåwè\Ä­DŽç•@.Ò?0c“-vYò8°<>uX [ `SfÕüF[°cö¥:æîr˜”.bûÃæïjç&{9g Å:°û¬c!3Øc^õ€¹IŠ5Úz'˜8X a,`fŸ„YØ\~”{-Є H-¢8NgMÆèLÎoWíxçš{ÞzTÑÇYÐËÁ“å7X0Vç=™ F Oœ/——•Šì±Ô!KÍÙµ1í{»† fÈà…Å¥ÿX2[вHðÔãJÙ_•Šo‘)¿V›mfA_?g›ö¥ÙÙS_vB0ÌÊEwxŒ@ûHKùŽdtªt\=` ŸøP+T*z) ŒH.6¿ã´îàuϯ‰8Ó EÉ ã8˜Iœ0•t÷ÌÉnÄ%'ûì–KD‹ßñ –v¦†9/Ì®²y™q´É¼dç=“T³H&“[E†)F¹B‰Æ%ªº° ÎÀ®•C(:Ü’ ¶zâ èqÔ,Qˆ¢¥JNq?G–aêꂇO]Æ¡rú‘šÄR´ ìš½ºsÊLÍL­wóYÇÖ"öµÉzoåìÇí7MÑ ^¡Tësæûð»³åõ.ŒÅ6Œ'kÙµZü/[ÐÁ`nëK|£FU‚Ö.}W˜_ÉÎÙ­:4uå5 fJR|;糣v@-€@ÙäqÀ´Â•øÞVþ¦£lî+ÇÄDšÉð;“{Z­2}¯ÜÓwd¼/7 Ü”-1oµ[H¸Ç=ZXϺ‹Ýì¬Hÿø$½@®8¯¾ìѺæéN­r1ƒ{ѵ{˜%;Žc¹kY¼<^=ٖа‘f²›žä8çä%J»EY¿gi_ç÷И㕾ſtH_ {:‰ì†l÷øRù²RÀÊ& К͌4F[ìï™ 4¦#Õ²ë»Ü¯6ú*U}Û_Û‰Yy„ܸ?ÕŸn\Ðpµ ßVGÕùÝ:~-FÇŒ 1bŽawÏÓš½ê3MZæfV˜öÅéc9ZíÆÏ—Œ³ÙYNÔ ó8ÐìDOìŒ2G^“_ŸÏrò»îˆi°„ëQVÎåÑà=wƒqrXÛß”™ “ÅY™ªå|K:õå#Ä×xƒtìùªÌÝÊó¾P€Ø ©Ñ#Zô‚+›ê“òµÿR+ãÃZ9û?m³N7)æß+íR"eÏ2¢IèìÐôïüF¹_ jåÞãÏkù/Ö'›³¬9ì=„®¬{a×°/ÆI¥ÑüJu<ÕÆàF ÚÜ`'3SÅvPt|ñAd\Øïæ’¤+“Ý ›Dõ`.½ä$ˆnÝêš»ìÒ³ô ÈÐ/nœÕØŽÞv¸–kÝ·ñÍ‘oiÉŸÅy,ÏÄ‘¦Ô˜áGⱎ•}O"]F.GÇüá™·HÑÅCKùf³`ya¼¤Õæ°c–órþ—ût ¡zïué¦Ûy‘œ¹Ö±ª…™ÐéìtÝe5³…\}Ø5{OÒÆŒ7”¢ãæNóËévKëß©ð¾­Ð L!”ÆÕdî1Rˆ‡G³š?E3Cf»»†¡[T{Ïñ׆‰,”Û¥t8ËwÆ—>±4ÙöÉê$*%PzÉ.Qù'ØbôäfDЈJ¾reÐ@=<•mcZ˜Žnl ùjÿ¶á_1…p÷¦´B1ÿÁµêÔåŠ~Œ£ù}ì¬Ò•wØõ}q[*‡:¡Ñ_8J:ú¤;$ö6ªU–¯®ŽýpW𧛟šSÓŒü´C4½•Ê¨È #¤ìÔ¶Iá)jäšm*M3Þß;Á+_é´‚ÑHkK PÉ8vx$C° ÞÔUýÙZ¸ ´õóê÷^ù2…vul Çnxe…Ä÷Ê6ß31wŠ"Ù¿-ÑiYfÁÅvÞÞJü#Ÿ«ëO*ˆŽr»ǯoêõŠ‘t§³×Ë FkË%‘—Â$>TB\Û§¨8~rNzk‡¤fRJ  ^ØèFЍœ½g»ýÌüôrYú™Åyƒ‘ëwNqL<´ Ågþk&k2ôß´‚©ÂPR§b`Veó+ärÚi­a vµ$¹œò°a¯ÅéousOÐÂ&rÏé©ÄÁ5ùQY5<:·Ùò  lîZXŠ4‚{= y:æ¦'òð¤8Q…”'õˆÄî7°F!M¬Ï4<§NíN PkV?>|G&›ó.ôQ«ýŒ€Ô¤Oiñm§b9kìqg”ÔJb9Ð#µsƒèÉÛ®µ ¦¯ötœ.?˜¯Eh“ýzKøldÁ/o9"„I<>‰‘]±å‡ÎËÙì–¢ÄØ Þ‹ÏÛç¡Õ¤ËÁ3NØj6¯ÝC(c*Ç•š%·v-uÆqHÍ£ðcΤÅyk›çÁ¸ÙÖ¹üÓ†Nf N"MM uõ9˜M5œ€,°9å(¾£ ƒb¥—Ín:‚‚£š^Ư··éßßTˆJиûͺm°[Tm…ÝÛ:Åm2ßøL€e¥=hÂæòvâ8¹Š7=/¥„lôîMøNy©—(1cuå–ü0_·Œ6<”“Îé ùÞŒ7hº}ïé§sPìêáðÏ)—q£ÆÆ~Ñ4‹Žá{éÁ1nØ00“ü Fi¯ÙñØ~œãaëqûzç%Ú÷fÂô¼ÓÙKöŸj¹×Ãöâ°­ÝÊú>Ü\­Ïmó´Vgí!—°­‰rù™xeÜ·qå’¹bQjôlÙoïÚ,mÐ%Õk2E°ŒÅìˆyW±†97–@õ Åhãîqµ>–Ml*Ä-j¢Y#s\Ãw!#•e{·< yÌóc¬cгr8³Ç{NUpüaÐÙ1–Œ?eÙý˜&ˆý\uÄcQiú—ôòP†)r;0DÅë &Ú¦X}?÷è• #QI)ÞJ†µ5´?9ë£ùܶ»Ç†ô˜ô[ M0sa%ç!îH¼žƒÓ=yâ~ScO)AwÏÛoahlºjtŽåâ_gÕ)„Çl¼Í¶|?½>ÕÜL0K™ïS$Æ’¹ød3v1«$½‰­: ÛÑóè"À\üMú{‹—v¯ZðYÝ]’¯ÇZ³lq⊖1:ºÃµYjª ‰p lèÑq ƒV¼'”M¢“0RÓˆ©Íå/âèSÏï‹p̪_¾ê~Ó I<O„ñ2_:«ŸîõÐoãPÆÚúivóâË€,„U¹ŽŠå5Vˆ 7ž›ÓÒ=øëbB°ÐW€6yŽƒv,xYÝŸXè·b[$6°‰+¿m{ùèR˜ÆÆu·ÂØñ66a{¹ÿ›L?\¼ä¥^$zʆÂâÑœØm™XÖ‚C7oËà°'¡8£¤‡Dvê½ú¤µw~Äæ¨ º¿ü(º¶ó rPHE{O¯(Lpu$;SE+G†p¸Li¤ÒJ°zÉ1·æÄß¶°K¢Æ‰ñ)Ý ] KéU庌uªvCÜŸÎÔ¸õ¥É%ÜEŠÏ²Œ <€š´yO[»2Ý~k0ìßÐÔ «R@´=#Cù’D7Úxeêƒç/j¾ÿ²_ïzÔK% ÞJÃá£éÁ@Àa¾¡ð7a$ö7(§§›¨Fíµêö!~ )vΟbµãÑÊÿqé–ÚƒT†Ëçq«…ÙKœÆÁÈÐïÂXŠ^Ÿ/Äe£Uc³:‘• O % TæìgKÃÒ^gŠv(°ŸƒvΔíÂTæ8l¨p³0ÑË…ĽP+øßa'¥éçNÓ»x.Y/Ü ñè îµÉôJÍuØŸ%t %R^vKÉî²ú²í\\œ§Þ‡Ð‰8»mˆD”"…ÉALdå± ŸøíÌ!¾Æ„>0úU4¨šïlŽ3}2 Ul¿Ï]Êt3iëDD‘’ìÕM*jO«î>Ô:Áï.å çúrßqT˰tÍšeœ #5–M~¶Ú·“R âÙßß¡x,NÑ&’_·a$j²Ñyþ¯É)o« ?¦QÉ8fÌ{¼–sܶ#8-Êt/°¸-Ï—Ã÷‡~WwŽP›8w°«ß1·©€‘²Êi}¹ƒuúqI0 TÂ8 º†íâ`%µ¡Ç”“È¡7X_ù‡{` I Ý%̉Ócçæ+¬â4ì|½K[’™em‡êQÎÎ}#Žá€ Åʰ óЏ8†|¡R’;é/?8²JK[ÐÞ‹‚è×D+Ñ kуíP—=¥p°ŽI:’RLm{‘a˜Šå5À¿% ëQTìÀtH`ÚÀVÑ—­ÇyP!XÁ…~îfEuÓıNiÝ€¾òsš!‰ÇÞÝé H—5Öªš4d#‘Ê"!æ Ù—eðË9zWY&‹å|½Ü8ö›ê§õæ\8,4bŽP ‰E—ÅñN¾Øgé¦v˜Øú55'>®>üüû0"¬V"Š~1_±==ÝÎtáxMj*‡±÷8Œ->V+öâå 1°ñ½ò˜ùáÖX FŸyKþb‡kâ ¬: Mv^–žh0µÎ=Âê÷È¥‚¼6ìÃÆd¦~Þù3‚±ŠZ¶×àØµ™¤²?˰­ü\—9„püp0Ù}͉‰PzK‡¢(úlKíTVËÓ³0wŠ8tÌ8â Þú ºZjŒÀÆ`[í51ÝpäФùm`Úê©OÂØ•±ï·tÅž´)ÃÁÂaoHwOüD׫[ìV>šûȰòखqëÞÈ;Ý™…®øÀk€÷ü°æøD¦»r~üîóÒX”ª.L,8;3׉-‰ÑT‡au,ûržñ'g>Ý ã\q:‚v~!)åêû]á J ts‰–§ÒR1åg#†ú“”SÇz#UùÜâ ±ÌIæ·(Êr–òëC§4¹6K~HaÍCøþe¢Q« y¥¼¦ànüY{íùŠ{v¨ëyuEø—Zm˜|•2ZŸÜÓǼ—>ss¾X”Zæ„?Ò ñVˆ¹~†±Zƒk C#Yµê À( s÷µÌWGÄaiû\FÙwÚ>’QJÚ팛1Ÿï­½Óø$2”î㽦é8'³UlÚÐDã¥T˜nÍkáþ5ìÔLåòô¬ƒ°ÇCÔW¿Oµî¤»¡³SXÊ0T¦‚Ö;Iw‘|b•1ïP&á§of»ê»\'7È^ÆÎÛ5‡×¢ðØÔ@ÛœªlŒÃt0z94^ÆE&÷Ìü™O~ “í9¢ üSE&Ó~nn.£‡AÞôeé+6ãºBáýc뾊*¾__ûúÜ\a몦„ŒµlͶ+?ê²rRƈµ{ ->j×ïIó߆µQ®æ^véâ§öz©r;kû £Þ ibHÞÚª r‡µj- MüJt¶ƒ‡ƒ·V ήìÙ¢{ÆÖò16ùì0ü¼Îo.ìL=ÔwÙ;{­(Ù¬áZÌõ4'|(©ë=bX@K¹áœ"ƒdwÆts1ìÇy;·ùˆ-{£3åšß“÷JR°|_¢ºT`/@Ï"Ò9œ½ä¡î³_aìé ÚêG·l1-j¾&3åß½yú™yè÷ Ë ×aìØM&¬Û&6¬˜OÁ#ŠˆYåãvK»Ó-CÇÆv˜©F—(Ò,Uÿ8ˆ&>LJÁymUçRš™´Œ82cµKgb:À¦_ž¢¸6¾sq¸¸Eu –¶Ì?9„òË‚Uò^¶#ïõÈt¯màùÎs¾ÜG:6`û åñI/Û|ðÓòú€Ë,%Ÿr÷ìëîÀÒÔ¡†´7Â$-Á¶ŸKÆîžÖ V ½¥'yEµN™Ý®ÔÙi¸¡‹µ/uM`¡cœÐ)z*GÖüƒkAF~ûùä¸Iõ«8_Tq\¥ óŠ>boˆºí:0¶!háH,ÌD«û7‹r׫^ñxjÿùß}ãM ›á[œæ™HÉÅœû›£C§ÀKdçÂXµ=HNm òë¶JÇm]¤­þÉ܇71šOˆKŒ¯«²‘cq±À„šóÏxßzæGÿ¬¿–BÝç“n¡O1ì‹úž!}ÔzŸ½Š-0B ñÛž^/ÅþšQçLÓö„$c¾eŠÔ\á‡AÝAQ&S Ü$‘/W ÂOÞ­tVOÒ+ýñ·Uù“J‘k ,[îÒ­ ¡G›¬ x9 £ãÓ¦R½  IÀˆ ž |êO®UMíàÕ!{uoZ¿³4u@X¦3 #[~ÁàÊA*0vçæð æÙGLl¼%fx»ó´cIóïZS¼Î¸w× W¯ù3îM™´—_&¼ª(_†±Êœ¥Û…¬ë]#à’p‘xºŒ¨(—áןàåÅÿ„±ݱyœ]וlÛ†±¦µ+n¯-W2L8+Ìï4Mxõ_ãaâGŸãÀoìÀzøÜŠWgîÍÃØý¯à¢Yhч±r»é‡É’®Ú(³€œVo8ëJ3ž @°‹}f{öéeÍ–í]ÆKÛvtÇÞôŒ§¸BÀç z¦—âvÞA„¤…Y UÐfÅñ±t¾ð^,ÖofeY¶:tZæ,S-hÏÁ"Ê/MòR4û ý6DÇ‹ØëäÚ¤©ÈŒŒ§l] cM:»qeS8e;Oè ­Ù6o¦ Á%Ê­‡¶íe•VÓ@çó¶jƒ«ïr^.Œœø£ÝfÒ©tuaÂ×'ºx ÝÍ»§ùb:"0ïq¡æáµÍ #ò„«\ü­É¯Sæo›§k’ -ó+ñ¹Éte¯æ£äá¥{ÑtíJ6Km§ÓeõžCB|àIS¾“6íúÔ´,¤ÁrÑš 5öˆ^y1{÷ÍÿùþÆôì(˜³ïúS°Èxbc瀞ìký¥«Ï»Äœ¸åXòÑcüÚcvðÆYÈô+=¸¦íkSCléþÌaò<¢KCª‹XÏ›ŽƒP¢M;‰ÿ\³°ñ¯1 þƒ@·ð[úu²gÓ® óCÞA€þµögGíÚ&t®• ²­¹@»ÃØ•ÂVúÜsPUÌÎrÓ‡>%™CÂz-wG¥=¢QvWWþL¸ì?2áÈÿ͘ I¦¯žÌ^†‘ØîÎrçNáj49½ÚyÔå S ¥bç²eÚ3•ù¿êÈWÏ'7.¹q¹qY6ûo¸Ò pñüß¾ÓêàD¾3k0Ksj^,«ˆš@ú ¬KísÙ¨ŠÅ:7º!6š… Ù~–c­ y.õF¥ÊnJñ%°æZ‹5Õ߉•àôBªc»–Kxµ»t§MCrDe=\©(.g¤}íÕoywõºÜX&·|ëOæ‡fñaíü– Ë¾8ÀQ7~œóNñÌê§è¬=Ë–‹;òïK; x"¼Ùr8B,­I,_5Nö[2pY¯€ìøÓjóØb1F¹R—¿ZíéY ][*zS«ŸÉPoSdð]?2Tñ#*d:†gš†ÇSÖû ¬”Xš'6X›Ú¹éx ëô-Ö|ùî°öñ {¤Ù\gEÛÞ+–Ȫœ½Z™Š&®Ø‹Œº~í0˜ ´QŸš§º™ga¨Ó’ZÂ^ú™iRh©o,Z9a1b]T'PÀcÄanñs(HÖÉ.iÈp¹¢8¾‚©AÆ×BÊ¢X¾0L}l\›šO\{õœuëYZ¼Æþö3·®ŠÇ™Áaføz“1"ÆÔ²« vǬÎ=›"øéí²©>‚ÞOÂýÜ<6ë7û°=+à{^¥œ}°5K±É¥¨öí»#qÁLÍyc ?Û|Ò'¯n_šŸ¶@§]ëÿK3ã€6ŒS yAEÏÖãPyµ3Œ46¾ŸðãSÛ}\ݹFǯ‰µfº.ùÁ”Âwó<ƃ4}¬Líc»¤ú$Sê¾[§t1ìTÆ•Tþ»\›ÕöÿÃj£èµ”S‡‰->pµ¹ÿl±_¯kJ\ƹ Eûþ-âÏ n0çïÑ)æá1‡°î*Öî)"ayDä’¬³y°Fd ¬;@GbT!\PÙ²–a-„+#Ôu“[h³¡Ø‘•ŽaN¨z$ an'ÐG"EÑ¡R÷æ€ØBwèãõkð) øÈv‹ÑBÏ«—xΓí£Ju ŠŸëøáÚzщ«ôî‹jq~úL&f<Þ÷àtÄ‹¹ã_.³Ã8ôŒ¡?è‘p¯IK¢êõ AgKÄôPõ5lí¬*‡¨ò‡ 0ÜLí•ašwÿ¼½§:¿—pé̓“«\£¥_ÜU_±"-ÚiB©{ÜÝ ×çÕ¾=F‘šNŸG¦MT¡™Y ­Qá‘èwÁº4ò³‹ná^‘dšÚ>@»jл¦A™boTÑ»ašXžÚ\ŠñJŠÎ ºX›¬½ÒŒä™;_ƒêT1ƒÂµL™X:¬u‰‚1Ÿ=©NãŽóÕ¤D¯/˜?D(ä¼­$ËɇìÜB |eƃS@cÅɯ5Ôéò5“«kÙŒÔÛ;²9Mǯë…ïxÞ†æTos\­Ò¶ÝÑó¸È›H ëËêöCMĉ?õ5„Ãʆ,´ëÅ-ÎÐqN½ÓV®–Ò#JF—ÜÇ—&¯ý¬JßÜÆO»ãb¬}r®$9Â9}ŠK™{ømVÍ@ °˜;¶]ë%H¬¸'Åí<©ˆG>ãEßQÀ÷[Î!F—ø’XêYŒXŸÉìå/Åõ¶Öž±•PüóQ¢@-Sû 1 ÈÆ]è²aþE—j1¢Ó=æ±#ûôºÐ1©vÞ²J”[)èA_ ÏÃJ « NÉ;6È%~Á lj5f©‰« Úæ©Ò9usœÏuªý³8÷g·ŸÇ6«VP'‚ ZO𨂵Åy,¬© ¸éqŠÁ;Û ®hHª•iµ#ÙO¶ÔmÎî-=a™Ù¯ÐÕ…4_”ä ‡çýHRN 8Ùü©äjêFú ¾â VŒjÀœ]ñÀŸ—ï^Ww¾`ÌKMb¸~ÍÆ/uˆ‹Ëù‡ê}kOS§°>œ( dɇØß‡ÂÍt³6†,'g©1Æî=žž¶õ«(žÜ›'kxr?¶y¬¡:Á˜®ËƒÓ¶óþJE3*R>c]³>ÔrÛp¢SÁV°&ap P¸o½û¬ÛDMªü!?æð™ÏöŸi²sóµÙ’¡­äÑ2LeË|hšlh«µ”0 6 Óå^uóXÆÒCp®ÌªŠ"l^¦÷¬çfš>^âIQ‘&õaÍNpœ[?×;/×òä­†ƒu{:žEÆ^À$&ôÚ0Æ_xà M;ií<³"îÛê!ÞB™£ƒíÔX„0˜BZIä—#Á¨ÿ„½Û) D¢EaRÏûš×1.ÖRR¥¶Je¢/u~'ǻŽëøoŽsÏ^*õÜ–× ¸ Ð^mMæG'?h]„mIl.îʼ ê¨#ehJZéÌ".³Çu¾–ê)î0eÍñ…hcú<9ãЧð<^FOmËHש¥>öq6¼†ìgîÍM±³]Ñ¿ á—•,î¿XŸŒÊ6‚¨\þ ¨øìæâ˜Ž”Ò¼ËüÅ;ÐŽÊQÔžg¡¯Ý)Ÿ1Òô¹à…G&Ÿè.߯¾ÞáØ×;ÐÖ6¿¡”Ì;â¿õ@óþá"I C„¸iÝl+ø8 6›ã•Ö¬Ìõâ¥:q˜ôÚ•Ñ]œpÆÌSülØÍúƒDAGù÷gÌ¡®ëÒå0slJÒöŠÙåt¶bCĤ´cÚU¿&æZ}Ù8‡‰¹.¹±¨„¼•1 ¶é~V½Í©dm}-ÌÎÐ/Þ–Äå÷Ù‹Ž |†Q%7ÒØ¢dy÷‡§˜ºëêô ô3ã( k)‰G.ý˜7R*çQ+†@µÍ䬚‰†C?È@ëµ3Gò\b7Öx'[ò–æ¨wé8L¥W£Iÿ(O„bZXT ±Bû!ø\û^<´‹¶ K8ÆD»«£ sï©€8^þاBÞP©„%™¨‰ŽžáO7ƒZˆ-LU’ËÀ\Ï,VÇ¡•„X°ží9¾¬™©™½~»ØÖ(è¾Èv{‘ãþͱo ÄbÝŽåH)ð |œùâ¿æjÓ(ú¹Úÿ’ã<üxŠ7Ø0±öèñò/¦Aþ뫬ù\½Õþnõ±2³i4cf¶Lçÿ93›b8¨ef³ÏÌB?džD”ÓJ<‡ZrPo–ÂíÁehQrË!¿Éo$ppØv òBX!þ±¼`10³~ƒèõu½XŽo¸5ú¨HMO»=.P<\gwÇ ykYÁ‰›´Ÿ–5p€Cup@@ 1M¾›|G°†TÌMAi‹•YRƒ¡?O;ú¼)éuøX|5dz¨5ÔF/&‹.ƒ¸VÆf“™™ª•Œ?_ž¾/ËÔ¯î¹]];¾³}Ìþ„í8ó×hìmó¶æzO؆Èhìp–㤩§Ð—ߦ¬DûÑØ»/o{®Ull›èí]ˆÞÏwd³€šwþoçóœ„#Ô…p}ï[ :ìþH­ÄÍò9×+ãFŸÐÏ:TáÆ9ºÑñ"”Òé/œ”ˆžaHdÿ#Óͬ›KèÔ f Ѱü }ÃD%¬Tà4¹”|)àå\$îã“úņ9EÖHãŠ,ì‰-47¼é‘¬Láõí/ÌïÜ ÖÖ«&Ù7©><»f=-팊¡”~)@øô0èµn^}B·úˆ‰žb#ê¤*uºr–«@#æ!~¯»›…¦ôXñ¢ñÆ;s¿øuÚè‚zþ+²qG°z¿ºøÎ›‡ò FA´Â W ï6wŽ©žq|›=]^0Lùò*¨­B°ó+Ø;sðC‡^-›÷ÉÓø`ëÅî€è ñ6]ºOª'6XŒÃpc Üg~–ª¦'9ƶ) ºÖ0mmNÃΙ¸K'Œ§ªW©´A{bÌ8 ­Î´Pâ`fŠVwVÞz_®í§,<.‘ì.Ò½ ÙØ°³h›ŸÞUæµ±W~wŒ"ç²ùñ»çøÅÁûêBÆŽcÌKd·+AÑб^‘’JXýÑžsÕñ»Lb¤èu¸y’¡ö›f‰ž´‘¤ôÿ«Ã€ñlZ1ÇýT*IPI£Z>4­Ý¬Ó4{º¥aœ4GT¢•þò?Zó©+úf÷â°ÇWay#F}ÿKP-\¨¹à¸M ê™( dàÇaœ…ÆK‘C#Â…(æ«FÔ/,$/ˆ­@—ÚDª ž…˜aëîåEiKLØ€Îïì¨^¥uj­kÈÖϪ¹Joä·mD™m4as›Glw¥·"xøã48Í{é£(½&w½ã$&Ž‚Lç'ÈKí[ Î éL{kÛ×tÙƒ;žðAÉ5Y´ºó™Ûƒ'¶è § º3èUÓ*ÚmbO<Ð`ÏØÙ™ßA±NÒÓ 'Ðỉ”fÊÃBÓ”3µÈ` žôÍŠNªW|ÉqeC£ýû±,"/ôŒ%ÅZÄg ¾3 A ô)“cÊE‰£BqF”¢9™ > jkcŠ|`—F‘_Ç(§D®¦Ò ;<ÁMb]jí¹·nwPó—¥ðÄ*ªÄ|ÝP`æ§'¾s…ÉóŶð=‘S Ìí|H]p‚"Q:15ÛxyÓ†BßVØÐ/Žœ cñ(‰d3Ïß2³Æ~´ŽD2—Íæ/ÞÁŠ Ÿ×Ñ¡PuòX™mN²-Î ' ” ÖÎÄŽÞ£^¢9Ælg@6žÍÃÈ­æ ¾üV³w¬]ët%§ºò©4 ’ °˜ôã Ù)×7<úònŠ ˜¢c$Ô ò$ ¥å›®T¦µô©ìk =»šË¥N9Ò>iâeìÕ“¦ëÔáëI°^õäL7a¤yD’3 H_ ÖפÌÏN ¡îÆÚæ·®vÝ,#õûÛ”(hZØmú½Ì¬‡N%£kLs¾ðàÒ_&7]iüÏ[ÁJe9DRÍ씌ôˆøé3¼Ðâ ½§'œ½” ÞçIÏÅüÒZ¶ÖÔ«¢Ùm‡%í C¡Ë9ë_²^T›ä¯.ƒo ]lëKBÀã ½ùáǼíBô*Œœµˆnô{ÌìŒÜ±´:‘ü:]OÞó]ÙO/]ëdUòE6ó„æ ­òîLrW²IîNÇHiŒª^×ÏÔ1«î)Ч ‚å|C4MhÓ÷ÙNŒÕÚ±éÖºËãò6»âf˜Ë"ƵXJµâ›¿ cYBO..Pçô$w‡©nª…‚“‰D8ÎEžå/˜´&i(‘¤±ø¸»"{‘é ‡ÁÙ´× ;]CsM–'ŽÜaaæ8Á©ùusmÙ‡ š¦Ktu›@ß @,bޤ6w(X•Ýsûåö3^]@bnÝ<Ô &ö G#èžØ§ÍG(JogO_†‘GÆï‹ÁÉžíõ§úTZFöû³]•mj?×KàÇ;í,í~|LyBü%Ï>Lä’á¦â ä—¹;ŒL´aþœwÝêà­>ssÂf ìÍN) ,Kœ•Ù­òaãÙÒȼ¡Œ.'ø·è>cTézí;} 4¼b€‚ÜvQßR„Ã0?þ9©Ž·™í2ã[¢ñ ”°Ý ]B2Cgßw†±Y Ñ'd‚"€º|fÿÆ/€ Sþ‘§W"CÄï/M:m€U2Šl÷wíDûzzP nvA¼u¥ÈØ?²]àZ‰T/ÒÃVÁófáÃ0ÖGÁs"[¡-ãØU®&œ)ã¨ev>ËAÑÐèW™ÒÖ´Æú2q Ârü±÷AaåÈg3¯5ùðqvÔìºyåã\ÊÆ„ÍF!á­Y6;ÛwÜóÇo…©“n‰*N¾åÌôˆÑZÛccìÏÑfÍ Zò¯ÄKÁ@Tê'o]Ðw•çì”4²‡Qú]ƒK€ßcMP,q÷†ß}+F6Ý”»¡ÎªuY9¼¡a|¢Ä_ÓPÊkÚäø =t»æj ÚêÏžØûr}ù£rêšêÒ n¬EÞ²WÝ­åŽü಼÷ 6 éãÑу»úifZØg‘ZëT¼¶¯ÌnéŸ Ó•¾°yË•rÿ¥ÆX"ð+×Ö&6²ªÈGŒÉšÄš ¢§·&:„âôî%ß·w~ÈM† `®sNlÓ0²X¼Ùu3ƒ®hÊ3CÎâ5Ûsb‰&ydò®þí… Û+ÁJj:,ñ‰M ŽbS;=6¡.Ù«ï~͇gÁŠâô7Ïd¤Cé2Ï1 ¦±GõZÝd—ûe÷m¥ËHJd†ý‡v»àrYõr·'¸jåêÜ·‘I·áIùoït•›ù5jÒ° iob]<«›[ 5VÖf,Wíšuf U¸è¹Æ^|DÁ™ˆœNÆÕX™Æ|<Ãß‚ôY'+$¶¸cêR€f‘V˜}êyÖB‡yÜv¥$VAð“ÚŸú¯Kˆ+¦-³sêÇ›0Æ"<üwBÁ3“3Ãôvy1ÑÆPÊá7åèŠ/ÖÎûÓ1b7ÿnø–'Q‡4ž[–—1[¦°µ¤uúýÛÏúnh¸lhMÆî$À|a„ ê JU&š[ïpËÿê¤è+6ÎÔêbax‡ÒWû².fž}uhZÍ–oøˆHÖ¡)iè’»[Pœ¾M¼êÎä¤ôí·0ò¸Øm¨!9"5oÞ[6J‡ù6ÇÑý •l¹{z ºðŽM±æ‰ú™éV§drÄCé—áÑœ+Á¦Êå”(e>µœîÖ$¯0*•ŽÝ·YÖrìÖ%¦RLøGÔ«ýø²v«XÌψ¦µNíÌßóo´,ptáãÎåÚÒi:ñpº¬é¹ÍÌzþ„³HXìÁ•½«G¼EH“ÖE«V[ð3réW`¸5£§fº2-È.;ˆé)ó0›Ó†‰Úf£ò+ÉÙÝ=jñû¯‹Ë {ËXTy Ké—é •“l±¤Eš’ðhgòf×ï·í3Iý&—MrïùvnºÍëÜ4¡ Ž:æe—µëº’¢|˜Q¦—¬]}H¸ÁoÜ ‘Û‰ q;¶å´kê$“xGÛðÌ*‹f—½ Óô÷xïOÙ~Û3üVä—Êøp—x‘<–ãÅ!ÈP§„$;Å?8jû¦¶#Õ/~²ß#·b]œvÃVë +F¦pguã­°Ä}¾!7d­ªîëÚ™o_s!‹q$³›}1~&‚›ì²ý„õ„òoÙ„‡kÛHçöÝm½[Ú¹ª:•¯©¡æç8ÿn¶Ö^ª;×®Kúk(ÕgZó¯½D?ìXÇv<sÚ_ØË¹ú$e§ùn7deH?=ÏäéÈG‡§]£Vx²áfam¦ø«W#d³:Ê&;Ì‚ò~º—‡OŽNöÂqÌVm:6ºÙk©¦¾ÖG|érú{ßÍ&LîÐÔ’ôoæOjçÖë NO¤÷Ñ<é/I¿ vª[ìïrÑ>7-aÜ~ c!#ë\R䮽÷Ý8doh„ $.kº+çƒÆóúÇ<õk`Š»£z–*ŒLÞ>Ùs­vá䛨7»šô8û²öaìýªQµx°û H /‚x´çwó›·ð±tk¼†Å#áî¹:- Ýãï¢Õ‚zÏOO«V”Z(âk}P£¥TøÑêÓ¿‘¹¶ë£eg°tô|wœ£óÅÑaìÐÄ^6Ñ{m¯jLFô+hºuc*ûA×DBªý²U¹El$ßíWÄJŒIWT9Ä—Jù‚±£{Üé ó0ZÔ^÷ ?%µÔkùŽºV”Ò ¿Äu¼²ÑÛ°f~Ÿ?ÜzÏ‹> ø!Ìñ÷< ÃpŒûz÷RL1áp"'/ñX÷X£v×6¾¹ë™r¼Ô§vå Gû% à~½¡¸ŽnßÙp£;œ$Wñ,®‘"çäÎRFžªØ@ íCIç›Ã‡s¼’ql|ØCi Jz»ÿ¥¤ˆ@I™¿"açRf_é+ öþ´, UiýðµËã! ùý¸ÎEDôåèW™Òv›0–zÆÉÖØÞ.Y«xºÉ«ªó—]º£“P°lWn`”ÙMÀ{LOOJŽ˜û¨i EzV9<[è²B‰ >èIÏ·}¥ä1/íÌh÷UBMg¯§Ös‚+#‡?ˆÏhmëú2³ß×ÂXúÀîõ½TMcÊøô¯¹}cU ¥( phÓ þ `޵ÇYÉ65ݹw ÛòBP1 jd†gÓrDQÌÿƒÉ”þ3™v…ÿNæ¡’I]¿Rvõ?aìÉô¿ß®ÿEo*Þ4éMèMYÛ¦t6‹ÿÏ)wžSšýÏ)±®;ÈpÐ(«s?,ÍD=À9”¨A ™ 5GtýAwåï³á%¬^3ùêSè a“¡1lâ:se÷—ê¨épöv2V<»{÷Ïò0¶˜c=âLXsgùí¥¤ßÝ„øò¥™YWßÀ,®º†êŠ·°mtIºÛÕ%Ó5ÊîÖékþô)v 2‚i ]¹nÍ"ºú<¨0ùO¡ì¬ß[½ÙðíÌòvIŽ÷ÁÚ­ìÕÀk[”Në›?U¬Ïnó“ËÇ»†Ç5º=0YN%ÇAIðü8h=ÎÁ‰L:× ¨~3Šô‰Ä<'xQ){:$W9cøÈÁèêZ¬´6væ–™ öîYÏ-¯S½&ÇØÍûŠùó#.­wក;C f8re”‡âÞJy¹áÀòî¶»xá’ɦbQŒî‰é¾¿¹gùþaP3Á4æûÛ·;—¾º‰ ò÷N%×l¦¤kenï3²Qq³ŒÃ¿:|,kÜQ™‡Ïr8%…ë],¢Ù¶E,üÂЧX€ y„(3ˆÙãb&'™ó¸sÓtÔõñ'ðÏ¡œ·ÔHÀ€Àú³:ø1§cÎ~åË×çüoSMnr§?¾4Íμ?Wåý®MÊÙmg@Ó’D¥tbùúQ^]Ä`Š‚…flQòÅÔYÄbƒ™ Æ2Ô¹Š‡XÁ ENSiN'¹Ôåì ô5×xÎ$Î šžêýR\†B¸ã0,–0tÞ]„)@£* ¢µ_„-æ;+Sm}Âí¤þCÙªô »ŠÅµ1×vÓ½ñ0¶rnæ ÆÆ1Ëæu©ä Ñà Þ½¼W¼lvN‹Æ‡VÙú¥ºÈ™z¹Tt/ø¦•ËÞÖŽW¯†•Òhc/#4`©çÀÿ9)˜­êìNPSÃÆ6%n!µ$…Ç2qµÓ5äôÓ)Á‘Ë3ÈÏ®QUÎ/FVqeÞø°rªß] cº±h’‡2 /Œ=7:¼ør•`ЛWwo{¾äÿGÙv¹Í$Ë¢ð÷÷W<ò^’äš ¼÷¾d`å[R«åÍo‘‘ÎÞgfö½kí{æ«I *+Mddæ …Ù‹›J]:‘Ù,ç;´lþñé‚ft‹Ê5ÉÕ˜9Nw,€IM~ò…·éÊþU’1ÛP"5‡yDÊ+É4B­&°ËFA¸Ù{I]“\ ßµ1™ö,Ðö]Æx‡q683T‹¶à”ðáÇãJ WÏùÍRȈ»¼eüТÔÿCÿ§7­ A 02Z¹H¨¤HÕ’Z˜(Á0㤩fNw?;’£˜(í6ƒC{a~þ»oìaÉÙZBÓä7”v0„Ì©ÉjT}i…!ÍT’È›9+±RÌ£!²êèKÕ‚ ý7‘»Û6‹ëùÉÔ›º£öÎae®Ùß§Ö× íqÛAnAaF~hÂ3„cMþ:ÇtfîØÊ€íÿÄ [¾“'F†uÇ‹kGClØ µÇŸ# Ù5Y<¹£WKÝ 5Iì8H†­©HœYÚ­0§÷½oW/ô%†y½¼)t­·áž‘Xf¬Qœo·Ÿâ€]s“×ϲ>Î_}j?ÇÊsNtÌ‚¨qÛ?ÀMË0eVi!`mœÑvŸ±ï#fj¦œèfð'6ž5úsر85Qª•plªqc=g©øâ©-tŠ]™~ó=¾¦ç³1)#þD£”Q*©º¿í!‘Q5˜Þ³Xì»ùF¤Î¥Ù“1‚%ĵ¾03…Õ7N„g´7ÄKЛũ RB¬©_»Wö¢`Ë´yˆyw–• aœ,èlÄlñW+=1Ñ!0d5;~Â]ÆDÁ½ÇÝ:ý“yZsÊ9¸èfˆ“سƒÏ&p>Mö‡X®›˜5‚?4Ì_58¢0¥ö1Y¤7 ù¾x!cå™ÏÆ…¬n„÷8¬_!öÂj •ã½%ð°×iw¤¶+×d‹§·¹ƒÛ‚¸}qù<Aº°lÄûlnyÝÃ43¥iŠüÂx5šá.¿ÒRõ).Å ôôcvcÍg<äbZðxˆ¬ÑTyÊqtÁTP,̆O­£œ«{òŒ¤Ðš;}—ÒX]2Ñü¢^lºVÉéiø þ¢çV|P‚¹eˆÌí•€íli(Dn‚¢;]6?›¤á¦ø"2(#Ù$Ä^€ÜÓZW3i§¤„6òBL¸6 黌¸B[‘],cºy’Úÿ\‹šà4ŒUÚš'±2 Ö↑gâÕi©b‰^V¨ëÎ’`†éJw·ÊUÒ…“Pï õò¨EÀö)´Ïð˜ÎÔ~Q8 ³[õÅž^a{?ü”´Íßú§“›`‘TYÿ1iD7J|£r¸CîäNðò&3³sþ©çœÌ¥dÄ=Coë|Ô¶y.ßµíoè·ÊÉ»0ÖÔ@—“ŠE|—›÷c~ò5óŠ¡0wá¯Ú[íõ° cHÓì«6—Å{#’S_gÕKÜ3cÔnþ±$¹Å:ðñ’‰ÿÔDÁ]ýd˜ŽÇž–ªÎÊwF3v¦·ÖÝù4¾?¸TïþAMS¿ä”S@!nˆ2Ћˆ4»)gç.„ÈwćLdÏ«]¯˜§Ú|!ٞȠ¶-:êv³Oì’›ùúŒ™ Kò‹y§×ß<•¾ÿ®"KKsyj3Ê"!@Im.cŒQ29ùþȸ¦D÷w.À™79U€Zè¸ -&êðI,z—BáŒáa\Y³8qlÓôâ›ÖÈÆÚšò […ç%H·vâ«ñ5Ø Ëàâo¹5™ùšMsÛƒÛÆôñ–÷θ#@;XA¶ú+k'ÒËR#VAýɬl@¡—}ê«ö z 쌈³ÄÖÝö™Qíw‘}Á±ä9'÷JQÂ4±°|âGgXL3E'ÛÖÇpTKd-6g íí†é9®·œê $¯MêÑv’ŸÔ¹^™žøÿ²’xi}@î‰À[â”X;.YSúåºóœ· vB:iõÁ®%šú3Xï&¯ÉÈ8lŠØûÔqàU«½KïÇ~Js–ód¦A­öñÍuÏÄÏ(ïºî41aÇZl]Ž˜T 3‹¶Éçÿ²q W:Wu@Ð\÷!ÒGX6Õ9)`–#m¼GÒ¾Ñs®ƒ(üƒÌèl|(öý˜Œš²Õ—K£baî>w#vèïg´=`Ò?õ=žÚÓÅ]B.b)#:NÍ³Š¦’ù¹•èqVEcGcew‹•¡HzÀ¾8ïŸmCT/ò—>{H2Tb™G:½±Q¤ÌWºo"´Ïœ+ž¬íF—>×” Ò¾úPûV„í§k>þ$›ÿØ’û’ -²–¾ˆN8l¶ÆÝK"…sQÿ×°ä}ðÇÛ´S¤¯\2³”ºÞ“#åJ_%‹ÅœÁA>þN9?6.#­®=±°žÉ R=]ÿ¶Ù8„ÒY±§3nL·¶LGWŸ†”Ü ±“QêpTA à¥胼‰Ö­­lkw9’{Çe xíú´-¸=ŠÒ9ˆE+y{ÒñJ5ÉCìO׈“›.‰D¯0F’±n/9sÚßÝ4Þ½]³g…™2=¦Q.&¤\Lr£\”N¹À£¥“ ­fþ=Ó}hŒi1)þÇÝùzãॣfC6wÍþd¯Gc!0+I@Ú]ý¼u)¨Âô¡.PQÛS)q¢p¾MÒËT0yÉÞjÃL\ç©ËÙ£5ûÝM^¾©ãÇ‚la2„ê2BØ5ŠðSEÍiJ¬k²‚úãÇ.}”]©)r¸þ”&kûH ÓÜ&?oá~¬™ 6>–1íþƒ/POÞôbs°¯ËT¦¿Ï?}¬^¿j Í1Æ· /þ²p!¿§Òog\Ã|–³N:lãœVBæ2‘jÒ¤K¤Û vñéÎé °ÅuÉn k?ê[’¿"!•â —ÖIÒÏTú½«$!Uf˜¬hEœ;¬ÆµY]¹¬ö¤Á’«Ë«¶Œô²öñÍ…ž“Øå$W¨m¹:y6-§O— cÛâcíwzÛ’P Þ·ê¹éèD¾¶ë»òç7#@ʶÆÙm,¸ ü/¡ÿ²sG¡’úÉIE)»9­vlˆù£sº³OM3¯|þ#B¦…,µ}¥h>e¶› ÉU”X2Õ™‹ã8ð³g“P†HÏcÌQjMOêê‰Oè~(Þnó—ZA$žÞ逿8ÆœûõTŸ:ý·aRoºÀ÷)osºL0Ö‚†ä9»Êã;ëÃLÒ~µwÏp[^Ö|ùýö*å¼j>…XZZfî뵕é&)*Ö¹R(Îàíµ¬l·•Áàñ­!ÌhL| }4GÊ!MS¦a ²EÐdÿ™ûH¬ÌnKÇ ñÞL1ÆÂ:[Æ»Zà45‹ý ääÕî{ žgÁvDý¢±wu`¼KŒ|¦æh°/Y=Ýö éžËW‰É 7E‘Ô¾r³S•þ«- æªøoY7-k믟nü­à{›ä.{Ò.žÑ¡`„Fi¾Ç¯pÎCá‡>Û»Cšv«é&WûL­­w…5ÀOÓ7qÇízc¹VÿeµÂÄnˆUv' aÒïIæO3@Õ¹»U|rhUÊ)!,T—öMÁÛ~$f ÎÉŸÒÜÚ?ÊËýkžÜ±ëaœž]ßðÀ/ÅaÎ…hIä|ðrŸ:0ú†ÛÃâ:ô”sºž½ðvÇN&QTî3±V°X‹Øú æ %{!=FS›Ë†ž´â.éÑ“ìϨ |,ÓéVZ¡€¶œâxs¦ÈÎáHÉÙ˜ ˆfÊjÂ믜ØSÄÚS -¢—ÿ^©ñ7;Ü&}Ø=:â6o…õuólLu¤ÃÞñÄÙCj¸Äî[M½ÿ«m›—ð5íÖ=áÁõZ†Û3¶ ›™½ ‰½«<Ž¿ù7ñJ¯8¹@¤‹OŸ•1‹RFŽÂ+ý>?|âôr¥òwŽouîû6ZB¶K0$¾Ëçšë7ÁSl8“|¯>’GÄw_+P<°xŸÀŽÛü"yÆ6î%yW‘üÖtK‹cÚ³F·AVœvù¥»zºÄÂz;Õ»ê8ØÂýñ¶J@Õ= '™“ XUÞ\#1—Ì<Ç©™Ë¢¯¾¾ûÚö{ÇÃêÑþÌŠ©Û5뙋s¥žÓÛÛ„t?b£ôŸÏì5³–Ƶ™eròšB´ÅFÐ[¡­áð—©ÿhùs·v 6i¦J)6í1FÙGbð…Ù?oôúIZô ò ë¥íú¦éGëË›OÒæ0ðs×[92”»Ì4"õ¿ °gÓÑW¦ÞØÁ—Zm"ˆu³Çú^bñoÑ|”öMA÷hX´ÅN.HoíÑ{âããÜߣ´± IŒ!-0£d6nSÛþ­”¨ðB+›:Ćftäf?«ÛA©ïŸ»ÖbebIÛÕΟkAÑ gPÉ}ªÔÉ[Pø«L¨-…UŠã^6·X+bŽdê2¶ú;¶xñ÷a%=>„È‘a!/rð*êä¼Úê«bcpÄ€á] 3âµþ\÷µ·ƒòªåQ^‰—!?êË–Êä¦}µi¢Ü&~¾Óv·§©µéÔŠ"›äqˆ ¤û‰ârñÕdÓˆ¸~åñS§ì”º9rèlL(6…¦Ò9dƒ8ÚB?ÄÀ§`©-ƒw˜¾B~m¡-KëwõÜè#gËÓ›”`:s1gCŒ…é6L¡ö¾Sœ \lõRÄÉo`cj\VæÃÜÖì±ØÒnjfZn„ÍfÓ›áÓß{!²ˆÓv¿›¿fx~Ž_½¥p %z¤‰€òoáùêÿÍ_ëŒÛëx¬iÙF:‹,°VcrãÖ†‰¼¸%Evò§DpfJ¦AøM±$b‰‰+Ÿ%úé@WyA‰{ ©É¸%s^²(yqÎÞ=-F«‘LxŠ£F®Á°À–$ú™—Ð%¦^Ø6¢Sš:ñîQµðèF‚b-3©ÉÛä0µz4ˆG“[,Ú×hŠÔJuÅU™Üä œØéÆ£Ä<‡Â+=™î†'Yž.?œÕ3æÐ¹"#ᙜàš^% ìGXJ}1qS| 6f˜ª%3‹s'#° ïÔ$ˆ4›–àžX–°›_7Ó³Ôj€Ûqjù{^ÖGY¥Ù !Ì,mÂI› Æ.ج"•›PÂé@Çèn¦;`lgYv~]²^>¿E¢dׇv¤ª¾÷á¡eòVhÎq¨ ¥. qÄgÓˆZÞ&?L'›éAŽÙ*Z_›{ÔIɶÝkŽ+÷-ÄúP¼8~‘ýd×-ùŽ‹Ô¡‰w&ÙNìkÙ߈¾ÏéldíÌܸëü+û¢-r‡4Öçcö³>٪ϓÍà„™©WŸ´!¶¬l¥}€M—Ý—X&óJÝá 1.Ê{ 2ÞTXÁRÚd”›T|’ÂNM÷÷VðófëåxÙÏ+ú8/Ø-“y˜É¹3ã74Ù ÊÈw{ ƒßïȉáþcDú º*ÔÊ”œ½Ü‚çÛÍU¥7ö—E±qT±ŽC:h[íŽP-eœô‹Š§îì»ÌI‰ËÂ7IÉ2RݺúCˆþ.9cIˆs|RYbV°W"ŽG°ßҎƱ²‘œ‘2à hÇ™Roܹìöî2oj_›!°ã—Gƒx²«)“"ÀòöÖ¶[Æ»{z¾Ò+ïsç- ½‚¼m¿=¬„lZ“ŽÏO侤‡ï¿©ì\˜»pêVÿ,Äivø‹½]ØX»[[–˜ïž5SӢ͛9΢źo]8µj“Ý¿îòÛ!U÷2HeY¡¨oݰbY5ûcL•L-Q¦lA0ʧM?¼·èžøj§ä‘­ùc÷¸žWže=¼=kƨ·Gt[þó4á}§’r‹´6;‹M,JÔ]ã´µÁü):$¸'0:Í TÑn´CZ&Ýa>’ÅXÙCÐ[Õ@€ä~ˆ"hÛÉ©«^ÝCoù'gpP(o¤ŠœEFAÞåÚ…Àì•vˆâ’Y‹ÑO*ÅHZz++¥­,å2¸*êô¿­6d£o"Åš(ûg18ºÇeËÛ¦‘}6dD°…]Ï—[çF´¶À\×&ž>·ñÔ™]]_I_°‘>‹­ââa9âö»¿¿¸Fø(Œ,ÙR;É—½Š`"_ž¶["h'èX:ÙV0ðÉ`‘mÑÙg¾`i[œ2VfŠ »®Qòá––jÇã„tÇè=5°ç}蟬‘Y8¯²ñ‰¢™ß‘® ³©6áÝÿóà2Œ>J¡8!º°À²¡þ3~O1â`Ø<ôå)»¾€Ù¿ÚX»ùþå.»döCy„Á cí_^ÿà7â’=”K  .ÝÍhÇïG€ÓßéâèÒ^?™„XtoíA}ÙÝEºÜú=~ [N÷þé_¨Æéò»ù°¶C;k‡Â@‚ ãÎîŽÚ„EÕ݈§‘ù=;¾ŽU»¦“hÛ²¯Xsj¹½Óë‰D–˜(™n±¬lïÌNÐV)AÈÔQsfyH†ÏµÞd).CÝ\@.nÎ5ß·#Š&ÓâòÒvˆê{ÒœI.n1apëèÈ|ýˆÜCcMoà|©ü¹ìήqÁêA7ï,ƒ±¸[ו“5ð¿¬ç÷—á|¼léЭ-›Î-ï››ã&”¸MfhëeXÁ–?¥[£#Td™%Ÿ<[Ú‹R¥ž8Ë«Æ\Cy¬&¸U‡Ø".¬PtL;Ð"Õ͘Ô1¼Æ@[†ÌölX~¦ºvs^¿‘K1{½Tðéz(±ðÈØ±Ù[ê˜sAüùkßü}½÷ï$þ,,v¿£¼è繃ð¯Q±†£rj6E£#SŒYÝŽí ÚEÙfÞãýò¤i»w­¡ôSûŠýo×İ1ÉwX—D¶¹üÏ|ƒtòoøÿ;;Ÿ°>TA1˜ÙŸÞöŒ~¨hŽÙoÎônÍ©”’ùãçe›;š†-U¾³+ÁlT³½j4Ü“®Kg^ý—ãï‡ñÀðWÝ%`°×¼±¿=”¿©Aî[Gƒb³ß~pø÷ÿ£æí]ùetÇ¥ÝÝ„·=íäéî·ó‡Ÿ]]aSõæ¾£À Ú—zÃÉ®?zèÎô¶…ßgËÇãs£Ô ¶¶,&òÃÂZ² ù B™ÌƒÒéY‡÷Ä.Al‘>íö¹H4æ_ÞýÎb—3Ïåó§WÌàXÌ×îñPéÕCéi$•Yêêµ!àI §xgŽ®uÖB£Àùîû¬”J#ÅöUÉ«þ›xPâœûÔ¬œ»´û^ŽM‡b„Rë ð}[zwúîÀÑ=×ÊV9w5ë°ÆÉúkz=äTÎ~þkLáIF8w›¶ÍpÜ.ª'þÒi=¦ÂHeE„ןÚ]ŽáÇF%!6[c³6º Àw1¾Ò…—yšÙ¸±·‚1*BϤ÷Úsïþâ­ô…Ä£Lë/¨SqVýâ±ô+Å’ #=jQ Êœ0ûúq¼—ðÙÜ •n‚†ý4ÜŽ¬Ít€|ü;è³ÎÂZ§«ß'ÇÈ”Uz¥ÌÞ*.û%ïžOõÔì9+Vð·$üZ4·ÇÓ%; û— ÿçñÓ`œŸíÐ(8»1ÆTHó8òÅi¤ó ™1žëFïÇ/íŠû•eŒ©åùõ‡÷ާÀ1ΖKä\pÍɸv—xaû¥bUêÜn•²°+SèsR”½sE9Hùõbú°Æ8»¢ß¼¬¯ŽñR9±[Ï”^??¢³Ûæ7Ý¢¼ÿÔZ|LÀ§xkØCçái¶Ž,%kÎ7û5«0}õmƒµ éôÛö¼·=M·ìwIm·‘”!¦x;‹9Ù x¯™õû:0 :2[dþ1yWm þô*í©}H@á;’ƒÃüfˆYghX|û[òºÖDªfk>ò`¦ÐæµúfIkƒ!b—Z)þYkz¯+«߯à­Gå‚»i] ¶×ê«öõýÙ*ŒŒç‰éCHýîÊ#ù€rQ{Õgñç™ÇZ£ˆÈI×ÞDã`Ø×¢6¿>T˜ÛD·²P:j¨¦?B¬’!2qq€ÀÎ@‰¢yj'-öoã\Õ,Ø3ˆ ^ÂI CùȃÅ͉`&„Ò+g#Õ;õ/ü ­¸üò{S›ëa[ü™”»¥ÆºÊþ ³ñ{}`<渭¤à†Çð?ÍR¹ÛÉ*I#3FÌýG~˜æ5¡üj)#¤ Y–‹#s=¸k¥9s ]"-ŽÕ ÓQDS6Î/–ÿ×”­0B7²â®§lR›º´'{-ÅÐøý ãÀÎÖ3x\ùIÀÍ\w2…íØ|æ?üÏ‘QÍ1ôÉÒ¤”'~Ñ ¡Uܳ¼[ ú§¾¥»8àÏ!Èa/¦Ÿ†ÇaœLÁIns×RÊ«ãy‰BLÇCäVåJT@8ò¹–§. ê?ãîo›?¤$¿0ÅÃIÒÊ#(Z˜-r´Ìét=øõ6ç ÿqÌ´?€:ÚĸäèǑߑbh÷êÚî±g¶‹óÒwŽöÓ&¸³S·;[Øî;] v¸+ª_kˆd“wnÁ7íjÛDÀ©é]óñ¥%Ì!Ø_^ûê ö¦!-îð¥l-Уe 2¶æÚ®0¶2˜+‘?E– á·+jE§îì´vljf—˜”çËÜ—3Qñ”™gçWȘyþƒn×@Œ½8éËzëÅì<š‰àúá_^JÀs„w쀊ÝŒP,©ËD¬ðàˆ?Ý<~•æÇÅ4|çîÐjgâ¹zá”2^wä^¦OªÙvX›”Çï§¾'ÿxE®#¹#kDT'2Wf•TUçà/x/‘Z!ê9'‚¤=#’qSå)±OŠëAÞA¶êSÆ^Ýx<~…eµµ[¨JÄ1c‘áÄ´NœšU+ÕÅ7æ Êa¡_¾¦0“ÙzSG`²% {bìbqC«[fZ”ëm346лT[’4ýõ{qðWˆ”6ûtcT×i^-Æwµe§Ïòœ~ÛµLgjNÄܽãŽÃ}Åé„Hôñbºk4XÍðÍsÑ(¼šŸÞ°+ÀÙ㙤tHƒÈJæýö¢j°vs0í6¸@oBäæXL:È–Ï﻾:dRD…’ìRÒ¦Wš)»î6í….® $›w âWrØþØ š7æQøh;¶`K'ߢ'sÀ ÇBkâˆ;ýw2Ý9ê䢽|uüªÄ³ËI'­Ê/Ücç”H¬¶e_ˆ™ö2îïðwãªB¥\:ÇÓûS“¬)“Ç¿%†fRƒ´pw-B³£}.Éž£QŠÚÕ*_Þùƺ'4¿¼UÇ&ç6»“B™l™.nšrcp¡b‡D7L*k:Œ Ãs$=¶L¼8Š]˜ï½/ ]YixØL3øµV¦%!Å®>çO鵚†Ñ‹E7‘5uÞòùèCÔmŽ9ñ5ê±C’òsþÁß÷7ª¹Œ^"w‰ñwî5„Ϥo¡®AÇ&ºÿ(¾Vži7“cŸô‹Þø¥È8ÕO›Êb6ú «WÅH’Ƶ½ç±’Gfú=ìãdAZ¦J›‡qbb}}-E)’âÊʼ5_°¤‘BkøÛ×9¥:E%gëÈ‹îÆ˜¦å‡aAU£CƒcS(ÁÃeƒ»zÀؘƳ*‰i±ÉøW;5FB‰óu¯Ù’¨±H¦™“W‘¢Ï÷ünòçMÑÙ² íe¯üžä¦%,ãþL˜M‹Z…R'Þ&ìmä`¢¬[V}ùTãúdÄ”Ø ‘ðt%‹6ÓNŠƤ»gDá„ö“êÖ{݅䯬¬Ãɵ¡Òý*g &ÓË!ì´Œ›tò¤@¹[ÉUý¢Óq2èp„U°¤Phç‰Õk0Jo/˜L–Lœ|eŠVqæÌÉ®²w µ•Ãv‰|™v\¿àðêÓú‹ Q=îG~Þ‰7^¨×xÞ+Ù¾1JZ‚A¡É€†¨ƒ8mrÓ¬®¯©ÁóK'ËãS?Ê÷ïÇOᱤOžiW=€˜)a¯Å]"û†''ùµbÅ›ùè+•r|ûÜîƒ]Vºük[<ßœëÚ8?©‘rô}ÃÑ•5æ—¢’ • /ýš 19ß³<<S,¥‹¤û66ôÓN®m£Wíl”€éšwŽä;:5=îH;dègÌÊl#_í¸<Þ$ÈN—%ËFq50$Ë5÷7m’-”ØAðögRõ„ÉxeÌ]Ñ5Í–#°hÕ¢Ás‚êb'!—œçs©N,O˜÷äÆàÌe‡Ý†äÔÒnN-[ì€nSº¿½‹È"’‰žÂæ©·ŸÌ€¯òù†‡uˆô¸BÄ¥8,5û|n)ýïäæ’ø39éÈH—˜gg$mÔÙdáZLÏ\"AáDQ¿—(@çxzE™íùD¾³ ÷t‹¥× Ë×=ú7†ˆWôCsÃ2Œ«ïsÖ)ÿSš¹Œ³þwš¹€lOª+—47”Í‹àÅo[ægiºšA’Wé‹X¬–T_päK<2këçXg3TÝÎÖþa Æü’Ñ£C0ÛùÂÖ˜Q°’ÄËì$ˆi`7ïp÷0ŒC÷Ääj;¹s픥¬ÍßqM‹Ö±l¿CƘyò9°ã54.ûÙ0n½£ç(ëHGàéêh¼©OØíƒË&A¼ÐÂ=M¼qš¾Æ¿ª$ðÁ¦5“{ìÓ£\—"þa »#ÔKö\ì|Á=\ز¢.Tj?˜Å³Ì”6³ê®Ú™ñˆ5ð¼ SUlÞ‹<–7êÉÃÚ,S|!ü#ïOÚ×ì ~¹±Ú53 È¢i6´«Õ®§›ïáßÖ(GWÏ««ƒxD6ÛÅ×Ì/ Êb6c2•` ŠÏ”ö»ìtÛ5{%nƒ\6ÿ!AÍ•ŽiØ!›ÉÌœ*_Öפ§U{ß±×àQ{¯§”îIû4κî/¬½öÔ¶fá*4j;Ùyy\Ã̸͜È.îôÛvr\Ð Õ_…`ç•cõWèã¿6׋T[çˆ{מlÅømS,c›æR³«ÄŒ¢<e0Mµ4nm«bËI€­|Hžû™MüÚœ1èÆ¿ªm®ü©ŽZ~Á6–ž¤n³&Å·*ìSÑVH*§lrö¾ùTØ”ï2¹õ­ß[;û™þÂÊe´ œ‡ 5ò±·Nof*6ÑÌ.:-¸Ô-Ž úäßgÕÖó3OœŠÑ†Øß¬Ë¿r$tZ7XI3ª+þŒ_ºY}èX¶vÖ‚5¹“oGä°EÖxGöh£rÜGóaWÌ}Ú ?X4²ˆx´v%í¸¿îEƒ„âæ(ôZ¡{×WŸ«Ð;þ`Ž|œ›Æ¹œÉ€þO¤ÀÐõ=b.ƒ·/Ãÿf©Ké“©†æþ§kKY‚MjÞâ³´žªÈMaÙ6ýq1„HrX¹š'ý$·N}YÔr‹=,(÷¬É!¹ ûe>15wÉ„n¡¡3·ýaOí^³¢ü_÷,n´c9Éxy ÁYTÛç1¡›šÈÛײȃu~çUj™w ³eï‰{Éík¾âBê¯wøDˆ6ñ[¶ .³u—F¶µg…õíi½ùVé {b—+JÒÁxSušáµÇw϶g7 ²Ç”URÚ¾÷t2 —R1 —DÀdl¬[†a꿈LmK?üÚÓéÌ Áû3¡Y)ye7 6`ñ–ÅTãðZ¼!+v¯Ý3‘ìÿ4ŠdÇQ%éaC‹'yø—.‡íœ•^¹…Yžs+ð³evºI"‘Øœ¦?§RfÝT£…êìP›j i†ï™5 g$µg·B d]›'™§ïŽ5ǺýküŒ9‰^\®>Ûôá‹}ñÞ]ÃøgÌ©nŠQÎ)ã‰/{t•Bíà/0•ˆø“’GºÙ›'®pŽôãØ%DÚ¹3ʇÇAÓ ·Ì—޶¨T¸ìé^Ú¦ø°]¯ÔaìŰ·ß­WË…jJý0tž»_þdÿþñqXf.­·rL·ÇVCŒF}/Ø¥öw:%Äžçu¶%ƒ3Åz ÷Ê“Ùç1<”ÜTZŠã Í„ï0ùðÚ».u:@1<ôm9`N¤Bq&¥ë*‘Ìùã½Ým§¾±±Þ\ý‰Ûy6ºÎ1‘\»¦U‹bàL¬Üñ;0±¬ŽÕ“{Ѧc’5ŒÞkÉv¯—·h༾(î2w×Y}ÔCùÆä-{óˬðM¨œñsk£Eg" ]Ùké騯±kç€ ÙøD÷¡8Í5KÇ$=0Þnh%<ûôK€´ë˜sÅÿŸ\1×ÌÖRÆjƒï”³{èE[âËØôgîXøqó§~€Õ¸í€%ð¶ìDU‘R“>½(Ï{Îýš§í(×}ç"ôõ¦¯ÉjÖ»*‹WoõhTã/Xó@Ø|,Sw7S’/yÄׯkaËYµ$pž=ëæŠ2á=ú¤àÞzN>èGàïý$£ÃJxš#˜Ów»Dt/çkmšf*•ÐØ¦ÿ› ®Ý°IìÁíãõHGÜB9¤×] k­bÑêÂ÷÷á9æ…˜4Sä‘1I3J28Ê}.¨†afù Ÿà”Z¹ü-©4ʦ2OØnùÜߣ5¼3Nkƒµ¶Ç«ZÎ=Å4Š#Ä+³»ýU?;¡öéä +ˆ¿àÁ¾IJ ŸÙfWh´ãî×Ût ‹­³[>­kò zžöÜ ÁÇKä“g¿ú7áW©Íþ‘m ÏÀA4ÿñ²LYËp“—Šl&iSL&§þù:ê«|ПwíkýyÝŒ®Ç\Ð8@È~G§¾¯© ­®D+êkh³Ì·t*—›+á ¹Î.}¡Àâ¢yKzLéqÍÙ—÷yP[_µÿL஺`Òj6£°”vç…)A§¿®®ææ'-¢”ºTL=æK-kšÎ?J˜<ë.ýM£ ÐV·Þ«<)¥Ê‚•nLÞäCÊËù uS/Z˜cóÌߦj5Ž0›§ÇÏvÒvíü¥ßŸë£~‚ †Kè<ÌN7ׇÍôö¸’ìÞ©¯$%m-bìR_Ùœ7¥n±S;f.Åõ3ó5Ü÷#†Џ½ëÁó!ò©ëìÑ£ë†ôøfÒ‘K=}_ÄŸ—HF…ÖC:øwÇÚ=©×ìP¶Ü á§K®ƒÇ•oß ;*Hsòã›Gª:"ž\=žmžT ¨nƒmzÏÅñ2¤—ݰ8,.„ÕÊÏꑦÝ?š+¾.cdúwÈÍïäÔšAú©:šu¢—Eƒ7ß*Ò™ºN¦è‡àˈ kŽNýQÚ¾/ŒÇ‹9ÁÞ¥==F5²ëô(JNØò5œ2ÈgpÒ¸UÊvT +iÔåõÒZ<ûgmЦoûwË&z‘d£ØÊ¬ÉX{õÌ™®üÇÂ"GˆkÚ5Þå¯r(·©ÏºVð`{uµ×ÐM‰<âp3¾jþe:‰~ZÕ ‡•Æhßrrúç¾éMçÞ0gòÜB4ÿždúEÃYšr¿‡ äö9´—‹žk¸ •à…úþ£uBŒý7¯õ¨6õ%PzåDL&¾UÆv¼ÃÒWb”UsÎï9ëíκµHÀz«¥\Dfmí4ºË¶øã5'#´f‚¼6®í·Æ/äÅí4‰¶Uƒ £#ýHÆep@Ê^9‹^ùtãR©›¯¤ÞËwŒ+!Qî”åß}wã9y¤Ë èÉa›SÙÅHÜíNÖª·’ù±u¯Êžr)‰×)_šºû.ý˜ÌY0£‹„'‚4$…m4Jmr„PªìkzÜó‰“qKJ_‰4¯ê¿³žÿ"JªWÇõÊís%zÈ$ÐXÉY³Í¶¬—w¬oTöX‹õݨÔßñ³.;íÏùH‚Ú+q¾W=>ç Ê©¿;§Ã6³åz,:Ëu’ýè€ã›ŠÉŽ…ˆ ¾ G϶‘\†Ž5ÉøÌÎ9•y¦ø‰êïµ…zŠÚNÕñ%ù'W£wÑ·_ŒðS½ÛdÀ´Ì{ˆa¶81i ÔžÒÚp ØÄ†=ô%4ÎÐdåŒSJ ÕzÖ8Z“û!“C\ªÁh”d¤Íyá.HHsŒªûÁ8±‚¿‚8g^Tpg²×àhf`;Òê¢=PlÇ=»<®)gγ sÆFëõZLÌW™]«äed®mŽƒ"gõ‘»•à×aT\mö|<6z#ÓríðÊ1 ÅAÆyõü½P¢¦ð]Æ2ç„ã1R×OûÞ¿¿‡cÏ f¯?S®ÈšF{z™=#óŽÌÙQ8W:K+êbG°ÎÍL†—ÎÃûé}¨ÜjQ 1ℨIXþ=HL’‹j» )[).z„8fʶã™À¢¡ùã_0Ôˆ†Ø0œLS9éÝêܸâ ù²jÀ¹oe’4þ<è2«¡šÛ‡‡Óœ,‘_Í‹ê†wÛIä¡=\î¼s ²“Œý‰Dz%w–¡Sm–Օ­YØ,¹%!eù“áã&ê|ˆŒ‘ºrS0Ѱܯ˜[l\\•5ô(:AYÛæ¸‹GÌ7ú•VÁgš®Ñ3›éRélS»Í|F.ct6,Î[¬­v’ÁLßjûÞ[0 HœðÚ›å_-ø-m²ø»TTñÙ ‚Õ§½¹,u²ñÁ^¬‰qÐ~=A?)îžêx?. ³<·7Æl=†ßËlsÑŽçúx`ì)6(ÍŸ,jM>¤»ôíKϸÚáÎ&}Ð^ð&aíÿæƒóÚðkæô[–ø}ˆÝY“Ì”¥%h&DM-“/ÒBðÙ»ßGzÕ§¯aÑv‡ôGòä8×<6±²¼0‚NŽì§xuË·eÁ¸?¯à¯G͘Ù&ÔõåÕ¢“† z[Jïž•;É^(ýåç“6£9˜óÙSù4!]æ'œ ‡¯©Ïmؽ^õ S •­(=æJ6̘/€nc‚¯cBö2pö2ʂ۲¹Ã<,C®K‹û¦±ùgöæÌKÀÄÏÐ}þ§Ñ|–‡ˆLÛÎbÛ[(^Úªér ú”@¸|¬r¶x~-¨,Ú8ÄvbxF=_<ÀãÃâ”ÅÞ1kÉQ#HTÀ0£>Д„ÀÆ áTÀd¿ø€9úM6ÁÈ]Ó»v.UCͱn3Ç?_–¤±<«bèNTLÅoûÅüÝB”Ð3&Õ±WA<ó{è¢ÁÆrÓO´«/ôôzp²òר÷p»ùÃÛ}&ÅYj±…i?ZðMô¬ÁÚÙÍѨC{ê~V½>bq,4|Ñ'œ©ÙÉKH¡¬ B÷þT…l—Ít+ܼtÄj/ÃÏ'bÐÑ£y"9¥žü½W5&ñüÔ£c|›ãU·ãD³™(2þúÙó÷rZØ «öš«å¸IðSNIoé ý´ÛehÌ9QýáGÁ‘7TWWLbá&ÖB.¹[¸}«¯‰× §OÊËòqÁu-Ÿ>§C±6¡w‰bM¹ì—²ùžïÈ\ÓVçvÂðTÏí÷nñÊ<þð¦–ÚüÄñ)¯“›°Æ€Ý ÛÕù3oÛ{7y~ÉÝ¥ê©ä3yØ0ѪŒÌË?¸ ¬e„FêmrYϬzü b‰³dw8=¦³;ÐâíIB$À·r–·BìœV‹ˆD‚-›¯@¤9-¶³t€5ªX qn0îruA®÷kž­ôõjoþ˜¹[]Í×c Ù7y.ÞäËü²‹§~$öU=·Ÿ)WŸzÄ´ÞªF~uȪÚÌŽ‰1æ³j°ÛÞ`(««æÈ­w¯˜dzNïYHí‚+M8>U ‘FlæÜ_æÍS]2\trUÙ H,ñ*¨D¨ › Ó8´Šù ÕšVeR,˜VûÔ§{bÍý*t½ôܱz¥™W ó¬ù¹¤¶ÒÞôZÓ +>@LŒ²’ªÔ§lrÄj•ê¾b;NomðcZÃ.¿Œ °«K…DM«ÄKÚŠ3fÉ-éaMþù·â¸À ”t_Ñ¿„ìÝ 'çL´=Æ*õ_Æü Õû¦sQ{»[Ô—eÿ B˜’F&@jS¨3^ù—÷+F8üôƃ`U÷|¼æ<_ð×PW‘4¯nHP˜11Ô´2‡©HöTHšyÆ“.C)™'›˜[e•ÔbÔ±a.Ã\†Ô!6¾žœ3›mÃ^ ;ĶYÀ£óéåœ _ç¹îPvlEÿƒ/xV T_ýLîëû»Ö!ž§dfiûÛƒÝMÏsÍ_àV¯wéý©#×]ÈŸõü÷ý2òÓáþˆRUaä¥wÈFµÉ«»Ž“Ýc¨IXfØ­Äoò[|œFg@Ë©¢0æé¯}ÁíÓÚ Þ¨D!;´IñÖ×\µûĦ´&xôñÓG'ëŠo>ç™b-€œ6}yl|±V€>{Þ¤ÖaA\›f?õØâ™y)˜ýSK i9 JÛMç-}Åp‰‡­Œ'uô~1¨*©½çeûƒãýkæå¦>j.2¿_¾í¬ºùëoXóuIù¾oâf€@¾=¦W*k›¤0Œ­è͆ïS¼,Vé¸àªê[88 s›–ÇE$èàh[ïÝì—òéóOüô¸Eñ[1¤ Xeìå³ús†@Ö$ ïXîù×"¬õRö\@!õ¨(½ÿÐé (Õà3ž"Ó‘ó›ì÷kwަ âü$Œ êÓˆ×Ì…è ˜ÄD¶ÅòxSÓUÛ¦Õé^uÃßg¥ÉÞÑÞí Vãê‚eUž|Ň%f<»á2ÅëñŽ`W½~è^ÐgÛDÂ[´iMùZ,oˆuošõh8°º/¿­ëȈû‹GIYJæ›}¡éY°nM-ÅÒ!q.7+&ä4€'3Rê“ ^²8OOàñ\Y¨)ÿ¡‹o¦j¦ÑB÷è•é™ Òô¤Lb¢=’V¹É ‰ïZáŽÚœ ¸\^z’òEˆ‚¼ŠÖß•8Áñuæ†?ÐoÀS+§Jßt`W Ä‚²1…³ÚT)9x.Qv‰ÞÝ9ƒ>¼}A‘>þˆ•IUîpcI÷OÛôÑ&Ý Y>þ[aÖÚsVìå:gÕFò-x‹¶må;ù„X9{X]ûÆÖÒlÜNqM6"Áp+ÔÿûcpÌS§77¦Áâ$ØR9gî51t'¯nk4iA{K⨪Z8&6W®tÓ¾ ó9›¿ޝÁE;k{Ùì¢êš+ÓÄ5wueíƼð‚¥ùñ×H+\ÏB“ýpù¾ïDâ¸Oî,A'Ê;“÷nnÚ~™0þœ“ÿð†¡¹Égüµ-P/Ÿ{+Lø¿%´§ÿ¶ûqò“Ù°>f?DÀ/í`ƒ"Z);LœL>Ñm‚û5]*ýÖË—ÿT/þ¸\ëE‘YJ{n)íYLiϑҞ&ùL`çz´(þ× y gÂÉôŽôxjá.›’çFAè±Ę&¾ìèSQ`¦zÏRrƒÆæ˜lQ6V…é"<ÔLoùÙ¡!X×'ì ÓwCuâUˆïN|.–luâ9œAòlSOw˜¡H²eùU)‘"¿æ¾ã»8†|ç¦î‰p´Ð–©G+9sÈú­9!Cc2Ôs·Ü ŽÒh…‘&}&׃ç7óLÉÜ´=õý¥Rng9  Líëø]yDJ#¼­+4ê²ê¯Üs§1UƒtT7©Êéû¨ŸR+ÅO|µ/&æ?ú€:!/o·œzCžÕÄ7¬„8'!©8Öœ¦T²¾—>®«ëwrZî\P ?ÑXánÐü:aœþ†{ËÞp™r³ü*ì}ñ½RtÙN«‹ÝÙÆÒž}êÀp¾m,å­lßABÓjSµ°œË“Çý•uÃäû ô'gAZ~%©v›è4¾£'-íYøñÁ0ö¦F§‘šï4ÿ6+R˜sXÙÑKÛf‚`ñÐ0êˆ@ß?ä‘X…Ï7_ùDvDCÆ~¦VŽ·UI] öTnqÃÊšŒúãÂ|4".+x¦T_Ö,¸ŸPPc›Ó:¥Óž›ÜÖg²"¡‡g´Š¹…dA‰÷§nhDñÀ)Öà(1Þ#Q~"éÅàÍ’‰É—míxs@fA±;ÜåÒ}þ]:†:?cË|ºQi v!#¬mVTi<ŒM{‰¢¯¾Ç‰Àáÿ"Üb‹àökÏøXK"àp’­·URî,û7eêêÊÔÁ¬—¾ag D—Íß-v€JL¼ð¼?|ðÑÉÑéƒêÉÆè¾6ÙIXY8géäVeßš+äaeS<ó;w¥:sÊ=[¸zñøvN $Ráù£§/ŽUçÖc`Aõôˆu4€baQõÇ«÷‡:¸nªÓƒ:ôY&]ñóΚubÄ[.¶³ò»\÷#ÂÀ˜nâ°?¢óyØÇ\¦Âîž  ®9õ{@ÕFöÓ4®¢?°Ú´VZVn¹w§ qøpMjeq²Qh~>Žýêk÷ŠÑ+ v™ùÓéø* ö0]\TêÖ‘Ub>«ìg»Éâ§I‹Lôå ›³P³€ –6þEq½.hv ~qYY·å™î™í¨n)"+Öpoz´E‡7dèçÕǦ„¯v0Œ‹ÒùŸO¶ÿýˆeo_òwlë½W{Š´¡Ïæ¬ÙžËÎß>9<²ØßŠ €±Ð’Ó˜_­WÂS.é¤Ð(iÜ{N æyÕ|Íá"ât[mˆãèO˸äô&§M’‡ïÆ‚÷Ú JjzW°ÚÅß°¤X9ÀRší¥7ŠVµf¼õac¶ØoZ+ý«.›OCðT$žBÓã¬aŒl×FÑ»ô`„[q$gtù…RÁ±CgfÈ—µÞk_o bþ İ^èáýi¸šj*Ðßˬ/!|à_¦c¬|ìeˆe¦­§ŽúñQŠˆÿš€äX4DÇÛvxwN^ªl4 ÐJCAïèÛ“ ê]¤˜SuG' åç›ê7u‰>t3Uóa“òÁ›fv¶ã`Ü÷þ`P‚>ãšYôµZKvwnîé qgæ¤ÓÝ6mfF/9O4õúg®Žè1mïåÇGÑìfà¦Ù}º8™RØXÑ¥ú×É X}î”•Ž­.3„驚a{ãË–E ò-pM~AS¿ ±Y4Ë–ALóMëlø :&BÀ›,‘ïóm¼|5ëݫެÔOC°Ê|gÄÔí>1Õ“üšøöü|=27ZIr(f#ìÎ<ã„Îç¡ãal[Û Z wRÿ#[˜R eÐU3Ã4î¨P¿žmê„øhö!I\<î d˜2ÙýÒ5ÇnSlÞÝ“–(ÓT3‡ŽòE¾*‘ú5º·Kγ¦@:Ý,£]üxG¦Oÿq-û5·c£m¼þ|ƒöf4æœw›FEJVæ×Ñüϻ䛔‘†…vM^<…#A¢µ[VÑBEª¶¬Ö Ý×`ó|*8íhj 3ΈgáÄêaˆ˜8—©ó|‘ë“"v÷ÃóÙK0|M^ÛišìKS,A›¡5‡õ‘©IwÏË ‡mè±÷¦¬éÛìrdž t P÷òJÆl`åö¬eµ˜- ìQç¶ ã«Õ§ÁáEr"†œ¬…,žÞmòã[RRî,¹в6N™ž?ç{<N0 ±Ã]§f®²Ê¢D/¦À‘Rt›q“­¢M¯5ce<ˆdô¸ŒGk ¨ÐKñ8ºf1æz9ÉåÄe Ã{X Õè¼<]1<%JVnµ4q¨#+`‡½œ÷+ÃE´[…•}ô7a`¯É†ãTÊã k‡³Aͺ§!6Èn§:9ë6¤(ÝÒ^50HAì…;²ÊÆ «mkN‡ÆÉi1®é@.lãó Ãlm|Í tIé›K:Qy+L ×m¡½ÃeaÖ{½C]ßûgyÁö"º[ícÁ«4˜Û;—oï­m¸ªNܽ <»—†'qãáÝëY¨É½Ëý#(’^Æ“S/J4åîÑu”[üƒÿtc~h9kÆTŒBþ‚û‚¤Ú˜GVIqŠÔSqlY|=jÎ+žj]Ùó’`_ ¹ïä͸ºl1°¹-߯Ýp–ìxpz&G–ÇtÜ-MO[„Ç0‡˜-øáOøy¾–­N߆}KÓ.Q¦›Iõ%¶åÊõø‚¡ÛÔ7~åÊâ‚»g—Í7Œ—¸§¤pÐ]ñO§’$•eˆíìÈ:Ÿ––üÓ!Øt©Df&¦êä¬úb¦ËÜ6܇ÄÔóÃþOVºlkùþݘÄëÁ‚mÈ{{˜¤X*ÖˆCo”q—†}L¦ºÅL7!Žú(¡Ý LP-”Cí O‚[xö…#^òê=ƒCG€Å‘ˆ ÝôÂÆ=kÿL”¯e7rÄ›è§ÕÝãcb›t¤šÎ×)ÓSF2› 㼤éCºÊ›÷ˆh^ kï‡ÏSò~“–)ˆThj´AK·´•ìõ…žƒÐ¹^Ÿ_6õ4…yä£;2Ž.‡Ÿ2Žl\ &Œ !ß¶×mIÙú"UNº=w¼–©6öxl„uõVô8ÎÁíîqYËæõ4ˆËñÚ—äŽE¤"ÅÇÎMôœ(Æ ²Q7Xùñ½:$#Äc¼ürs< ¶å\ÇN w›ô£Ë&¡{ÕÏ]£~¯ZrÁµÇgñå u¹½·¯|Ðæã8E‚Ô–öÅîçYÈÊlÌÉöøÞºQr32QF†<bÈ]×û9Èö×(ë…íãG·èpGœcFÒ4g¡ª7väp=ñžù}±æ{¡£!üŒO¶¯<ð¥fqJx¶Ö/;D‹ƒÓ¬é:z‡´,5šÛ…tb ½––'ú‡“…º\¸CÆN”ñKhÅG v O$XyóÈ>éQ?éí™;íÖÆ(l˜ˆ37Í=ªöŒŒ!oá€îã“kNjo‚‘8¬&Û ÿ%{VüÛìÙÿ)ÙdgÝåŸÇ)f ƒwÛ›Géÿ˳®÷sŸ%–C+=‡–%ȡͦó)ËBË<ý‡dZ–z5èdöÿèç¾v]›âè;Éz‹<0«ëåx| l‹?, ç§täÝÉõeoF-œ€JÕ£ú¿TÑ`TƒON)‘0ø°ñɬ‚;³ø–z-–,ŠGX°!èº\siK³Þº xG?;&0A1»¶?Ä950ºC=,ÚG£ÂÉ9šÃÿײ>ÿ㸷ÌBYÞð#Ë…óv\V7ÂÈÛ›J7L_7FÝMÄ2sÜê­ÅÝJ82_³Q±V„U´2¤‹?–ÆÙª¹ÝB‹ÒîÙÒd†Š vÆpìKÅu>¹-I¹ÃÝ//…¡‘ÿ 7¤`Jinúǽ9VbkJ´û€râV”?[–ÈÿtzCY³_xämjíÍÉzˆçZT|x.x%DÑ©pvÚË•m'3>üÕkN¯Ý½ê–T˜ãõÛewHŠáóó ¬qCÙx'±¯=SPø ±õÆ&Ú{â³r„„¥<v27èõ•_0ŒòüPtaAp sHÌakv…µ‰²¹“EÉ70~+ö‹§¿z+±2AEBºè†Ô‘Ô}=¨á&£×3£³™Lb§ˆ¡;¼4Á~¡™„¬Î,öZ"Uè¥y4MBìv’Š^V³.³ÿ2Ï0Üj$±/`c«oG‡8FDÛe¦Öžž`Ŭ”3Ö»OPÇÕuóæz?Ûõv8%P`ºkådî.#GÊ:Y¢€?1TLîuÌîdªñal OxÞõ’Û¬tze/ÚÕl4ŒBŸ Äúâl`KË–êˆ~Ük­aÒ®¥ßú(ÄA†Ü¾þלÅÀBÊfçܦ¢DdÎÇx<"¯ÔTÏ$>‹µü{C‡£nÓŒé6ÒɘˆG|€»V†‰°æÖä;µ¦AÓË÷Óéù0öPjŸé™Ù('É/¶ý >ˆ¾1­>_C‡b.eÖNvïV1Ba3:ú,lm÷¦òu¬<åøUi6JÌo È«`Ê[¡õrÞ¼‹„Œ²xì:;ÀÌú´[àíûk«»Ì³%¾ijËZ·M%ïSRc·ÖÂÔåzQ#næó±`ðð=•(§¾“r3H‘0'îMÂÚÄQ‘JŠþ³O!§bÎd,41@Ÿ™Šx£ÿJD•\FÂÔ"¡2ð® 9ð}ÈsÒU-d6©n<œÌ!{­/x+ „‰ô¾XT$–ª«Ñ';ŦCN;lo(ž‹_qZ{æ•Ò}}taßÚ¯UÐ4úkÏŽ‚>Τl};ÏšºßbŸ±T½Žó"æîèáBRÇÀsÀî°ÏÚl¼·LîLÁüàܺ¦Úó{TT>޳µ^k_±!©Éo÷öë6'£·©SUñK|+x®,ŸŸWŠ>ÇŽY¿ì´W!ëí×·*e&,yu®»É2‹._ ˜)M¤ßJ@uµè>â§ó/R‰UUUP²ù@î‹UMn §7©æê|¥Í6¥¾j¤‚xÓù¸s’CrÆ«:'f ûš_J³TÇöºÚ¹§ø>éŸkke=j¸à{!©àá‘<Âè§æ§¿w‘9%®7áZ(ôZÜá ‘LNàb®§zxÕëlgæ6 3”òÚ°^W½Kk&fT–ßdUÈç´RØ¿¦ zÄZÍðU'Öt§µÑ)y(¼h†¬zÂVŒ©FÆC·®ÉÁõôÅh´Vr¿­#íûï´*çË»§±Ø)SþcudwÍ™m<*£;‘jfÑ>¨M¶]*wyL_™@T…f¡ jXª›ÒÚq¬vþîƒÀZã-¥x¾C둟×üpg:5.–ÂX•G¥a ¦9—P„—Ig³W•êpÇ•h/ä·"ÀÉÄCutï¨ ™‡8²~95÷ŽÝ›XÌ;ñFyÌhÌTt {ÌÍãÒ±`ê´í;mTcw{\Z©>Æ4u/*û¶+©Ñ„ÀØ1òà¶÷¨kñœBd ˜J^ù½;”§Êõ¬KpŸ“Ò³ÐÑtÄÎâ! y#gzú~Žú2ίɪ¶5æóâ\Ê#Õ“;‹¶‘æc‘³«òW VÝ]$_Ý=ú.Ú eBdù•ü33æQ›׸˕¬Oí"Ý…8˜¾G*[3«žÎ´¦P¸èÓQ˜ôÆÅM£)îqÙ÷çad1pà;ºQß@–œºFš«"X#ޘ͉IÖ æif?‰Èœ~Áw¿f Áb´»¶%’&ýðÖ7‡-¿ÌߺaG‘.>šó´úïvq,ndøÍ…Y3¢#T’óý#‹™GhÏ[‘Ã8“¹õø9³ÿîŽ2Oܳâl1Ž­»·žw]!'že ­3>f8%Ϫ¦VºgÕ"u^àSB ½µFùt-ègÌTlèÍëi½i ÈQ6/¤­Èˆ{)÷§™.‰¾þÝñÐ>"Ã(£"m³%ÄwÆ;R+=I,‚*²7fÂñ6ÄY¶,ðw§ÉšŽ“kPÚøÈÒœÕâMõò„x>G½óÌU¡ói*” 9㢇ൠÔÄÖØOŸ’LûÄüÍáå½LU !áGæƒi„.œ+îdï!Êò} û­Õh@œêij-3Iﬕ5AM#Õ´Þð©°@A¸,û Ã+ʤàº×ž3œØ»»ÙâëI¸@TÇëÉø®¦EwrÊ2ª¦pP0óˆî³"-Sš7{_Ü¢a84.è‹3øbº%Çá{$·¨À³Ⱦ°yå ï3ÁjèøÎäÃ¥>²IÈL6ŒñœÏ¡>ÃwÊ ])^›ó#p´ÃcwÖ¤îÌ6aøgOñ› :9—ý?®†¾ƒåH´Ò Êê4pÒ×®UÏáƒíºúFüzsÒõ<¶%;ýÄ»>³l!?R™bÅ]+»ÓçíRD‚ËüÆ?•œÌZhk§B/#šîbs@²`8‰© 6ž©âV%\9æF¦9v¿A ¢2lˆP¾9"•–]8”4íç¿‚55‚xÖ38D‰j\|.Ûr’“±x$MR•î=¨ôL¦÷Mˆ² N“ݲˆ4‹IPyïBYêfŒ~ÒòUPaèn®™ãrŽu¤vò6,Úþ;“â·WϾÏÏ­s'«\ÈMÙ_Ær{ÍÔÙü2»Öµ‹ûgÈþ"k@ôWØÕZɇaîè‘jë'Åνx^ãé¾1·+uêÌÔ¼ñ¦å¹àgwâqPÿ$qݼ4eTnÉd¯|iR†tUÒBð›¡SPóýÕÅw!R|Xm>‹+(hC·µêäœIæ [±ßKƒ•Â[7‡ôV ÉצüÓ•‚Ý|ÆÞ_åV4ÄáP¯ `0£É ÇX pÄÁj“N±k óT™´À.ÏøñØ›oð§´â]{Ù­jØ"g¿> $‘]à i=s•xSZ °už"¾æOP–üØ&Él–HÞÔµ²5½Ùd–êöƒøÇûC¬÷¤ß4 ´øœßR&‹Ó¥­…%ÉoNùœ¯Ò;m7Â"S_a>ì „“ÒüÈüêX ™›‘RˆUè5·BɈæï±)AÚsxô¼) òQ0NUÛ<cÓÙùp8Xæ3«>þu¸St "x«`y3öv%{¶¸vWßÂEÚäšçµ–÷õl…®Á+µ:ÊÕï×z^åî·ïƒRˆg@E ú[‡8E…õ™µç5kR‰{Ž¢ê8kEkõ¨lúTËØ©"ñí—ÅIŽôÖŠ(ù»þÔãÄ›{°£®4%È ¿.¶8Ga…#å¤ÈáÿràšÂvüÈtàE‰nyØòD-£˜tJÕÇ(f¢8¼Àà/¯Ø«³‹kQF?pMfRç=K¬ƒŸ~Sãù½aì±×íáØ…+þC3îzI&WW½(¹à¦tìÄ¿NÇÅÐ?ÿ‡kPœGvÂÔ­àðß=¾±¦¾â@¬^BÆà²žûs`ö¬í4Ûq>秘JkíîïR:ºO–úÕìoùÿ,߸* ݳ&ë-ûö &¯äð󣎷Ìw«ƒP’À,Ž¥I\ðû©qv%¬Ð*ö‚$ÔúsKìj‡ åzF´'S+c~zŸþwÛ«>eNí¶º 5¤¼PjOêR ¾ʽµÛd‰Ê|Y|ƒÍlop,~ù”¥½·8Ûôþ†Z‘3;£‡+äz¸¦à‹ï@(£‚Ýs¶êaq6”½ÜQÄÿ²|¼ ƒ‰ª†.c±4ø­¬> Ø©c_±T;ÖÌ_Þâ©>Ã8fÈk4¡lÞóÕ(Äɯ”Sþyð0DŸ}Õj5-isnøƒOtö-J„°ieq÷æ+N^MÃ9„¢ÐÜ»¢ÍüRãBÓ«e‡âÛɦ®Œ{°{ïô”#,êc í-<Þ¶3í„è””}£é”x¥±šh3¬¹O\ƒ "X[”Ý­=øNþg““üGô^«Ñ;¹D§Õy•AKVh'P=—rqõÔˆ~Ë©XÅÅŠê|S´(#µo²ï¶‚ž¥ÌùgYÌùO™óŸgÿ1Õ?ówIòÿñ6Ôë˜'˜îÊ%ppH¤‰xn&pËŒV­ ‰¢¨Tñ¼3‘ßKUõ¢à¬´™Î¶yD'ò³6[°0®ïª6Áoúzí#âä䱉#míö_Àc¬— O uGÃá zLl~qÐÔDÎk" ³ì™ã† ¿ÔÐöÃ'ª5ú“Ú…R¹|¯äo%î²v¶7¾’Ej^¸ÊÒü~taˆ8õ=ÚJùÓä€#/Ï¿û‚ÑÞ ²OמT:Œ‹:ñ‘›¶Ú8ìŽ,y&¿ßUÂ=!(ÐÙõ0@Þ…­ùGÕP½zb±H‰‚¡Z  Ã\¸ºFî1^­ýJ1”À”úÕŽˆí'9kØ öÌû£×³ZZ”!v*Q__Ë]JÄJ,Y2šZè —êúHˆm˜ÓÂV³5dbòãEÈ|áÉc$h×ý¡¸c•9¢ÖÛ ®²CKÄÚã]ÚR2±ÇásÙJ¤‚§}ŽÜÕYáÉ8ŽÃA¸Q†Î$ÖšÓ¾-°ºËbÌ Ôg/ÉÀB}”“j7Éüi´›.=µË³ñ_¦èÞ%-Rê©îS-£Ã1„È·m9”ÂuKÛŸVßÌásªk®0·”p 5JWvö"D&k¡¨œ¨!ÕaÇݺâ k-k¶ìxW&*¨Ó~e_Þˆcb’(AÒ™³va"(Èc§o0ÇU(ÐÀ"ätYö[‹NãaKKú¬\ÛFñL=©víwöCsN+Tˆ¾;Ñä{Cl´Ðˆ€_—¸+¸ªž—'f= qJüw¼%™šœæÛ èHÕ »ÐåKØZ™9ÎdÇÝçBäùB׋í¤S-N[C2¬¹ ²,Ù_×{•ôò=ñ®Ç4WµÊìíéW߆) 6§aﻯAaŒ®#¹‚…žà“w)ø"Á£ž\99r‡Öù¡pÍ.²º¨ÞR¹Í>³“ÆÍB™]Ÿzè÷ AÂP·¸O]Å9±«^%ë܆ßÔUe•¨‡}·ÃVA¡ÁDDîdÍq:ö$y¥´Ð\J‰àœ`¬D=>Ê Ùwb‹=ð„µãèãîÿQ'ÛÀû[‡0¯$ÝÕŽ2Ô{OdƒÒöñÍ}É¡{Yͯyô.Û쪫Z\iWÓ\c§ö»Éì½üTsõú[ã ÖÓsö 3Ú‡Ô—Ë1µ_°z ÔG¦Þ“;•‰#nŒ­Aºµe7zJùU~Ã1nÚŒ”ÖjŸGýO½FDH¦ÏµW,Áì‘« êÞû ¿Å}†„µ(.øz^ßÅÞ¾,ø©1^Ó‚ã¹Ìk·}IÓýì(Ÿÿï  Â1÷´—Yaœâ›Zl(Æõ­î¡mºÍ%L 7Ûä¼»}öÂϰøÉ\Ÿ…ä%R~]r»z-!šƒ£iTqð:›i-”"RÒ€ ¶ÇÇ u„UºÝ4.Êâ‚Qà³ð/„â´^˜ûVŠ_b‹!h³Ç<4NnQŸö·ô.Íý¨Ål½ãUdgÙbçrb~3…/ø¥b6Ê]oè”®ïtø¢:¤¦×4ÅÉû#ñ Ó[Êœ‘K eJÀnjû?I y6®ÉÅ6Žà• ÐY,szò=7ç,nwŠ»ÙÆ¥«~­†þfˆ,Ä¡Ûl®3C:µ³ãéž)ÉSN7”m\4 ¢G¦ýüp½a:Þœ 7-öb2=µîÂdãé}_Ä–ØBó AÝjN›ýb‹ŸË`&6ÒDçfÍÊîÄ£Cã2æ†ê šÙNà !§M¿Sð‰ß왈÷`d?u¬¶–Q_¾3{jµíoóøÉmÙ3yמÁ™ °äJÌPóßeååZF´V–qÐO·Ss,lýößkLYd瘮= ú‹'*iˆÃ/x Z™äsßñ(½÷cñe󨵆Qñ€‡=¿Ÿg"ì`Sö¡ì~Ž?Ä)JÌW\2½cât-ljlHª—gJØý* ¹Šˬ€.yઠõaä8ú lIBÿÌÇ×>ÝÌrq;liOÈD+¢‡·%¯ ØÍ£â#}9Fj ƒ'ZÁÙé[æãKFOwÑD¾`«ñÂî'6ƒDÖ.Ä&€lç•Ãköà7´.êÌe¿-Œ¡©î“¦¡›I/ó—öš—›Î´ q ~ÿ7Ï”ü%V—Ƨ!6ÕÿàDŠ^>=cHRDF}’’¤Ymý€1G±3DóK2“¦•ýXꑺµÿæ–´ z`„²ÐÎH¡V)MŠF¨þ•sÆ. üþµµ|_øÆÆ“é'¶“«ˆhÏ Æ_Ë!–Ì X`HZ(õø>)• ÈbP¬«Á+÷ŠúZ% ;ØÎ †lÊ™îïåÁšºñÙ`±»ªS^Ï‹Š/Y­ÃoÇ“‘ŽÑŒ¯Ã(mõ nNlÀƒN×òvõ)ÅÄ]y"ý-5ìÍMLcåoáÉ™ÿe±=6"Oš>­ÂYö%åH‚<ÄÛ|˜ÚD¦.ªMó]H;æûäBkÒ õ&Å޵z)HÊ7Óÿ˜Êb³ãÜÌì¥Ï”ÏÅà>“ 6 šk¥Ôÿ’ü öµqâ/)$/†;Þܹ6½Hm×›²^}é×½÷Çì^ÞVŸß3ÜîØ¤(UÊ ºRRg%ºp‡#n ÿ×Q~×ä~Ø”/ÅЦP|ny\‹*IB,nχ?™°Ï$šáޱ{N7R˜¼•D­þÚ½/¦¨õè'ÙH¾“’u àÂΕ2i^F*2í]ÿ‡ƒh†ÛXðÝVÖ[ði z†‚>8çai;" ž ¹_3ܵ˼ºÀŽmW& cŒÓ¿L¥¬þ]ÃpjX¼Ê@Že‘Â'pÇŠŽ´‚€Åâ·ÝL~ÊDyòKÿËÆÏ/ÌoX—^'6‰ƒ‘Ɇ#ÙF0<Áu'R³ŬzãY ÔLbõý+ßá®{ âØí »úá?˜‚³Pƒj®9$xq†¡º­%Ô÷Üá—Ÿ»JõÀ¢Ù‹ÿ§œèÕ9~âð—Íç&¶«÷ë³\V¥íÎkƒõÚ¯H°Zev˜@¡·í§Ý0ܽŽìI±&¾`fNv³z²ê£àJ˜÷¤³‘éê'P{—T›ÀÌY¥Á©ÅE+h.Z«€`"Û/k% Ç$œ\¦GÝJ[n]п4b”Ójó=ŸÌëXm`fmàn¹«C’ PcsÛš3æ©ñ­ëü‰Tr**eQJϱ×pQ–O@]öBVú«V¢¤ALÒd$e?**JªêY’È«ûˆœ¸>öPB/½¡ê_uJ=XW‰…«M%…ç‘1Ä'RñE‚\kŽ)PMr›qXÚ–:ˆxv D»”®`ëjJºö5:M6*âܬËJýß2 áa‘uÜ®4 É ð¨—:,íû\w&XªÂ­èêÓ! •9gPü«SšÊa;ØéiRmˆWw.gP_M°ÜP=EK–vÑ ý¦ÎÃEcÕIuÒlñ]à1M-½š _Œ—`ñíµ®ú}‡ V1¿~®fyeùט8D{¦GÔÓL3Rûz‹AŠsøqÐÓþ ½ZJT‡4Ã3ª/øÏÜ A”‡X*óí>È\E)+Û4’öÍÆç×Ägfí8¿¯™áæ«À‡Å+ÝY¹Tú¤4h¡¨9VšÃƒ9ÑȘ¯[æí½ë ÆÅÚn«ëÖÎØ%3?uÅC¿2Uû›Q£“’5Iuñ¥ì.]mfgÉy‹ q,m²ãÉÌb³Rb±Øæ)ƒ`ý ~Mù²üŠ•^ü!“ʘI˜gÍB£î7uî‰÷!6µn»S­tÃ~h¾Ç)ãI©oòêI›$QM0ß±óÞJÑï¶3è¨AÑ&ˆ¸dD²è{Rʉ.ÔVI9çˆ6 ñÜ9àt¶ü». ¥ÌØŸ»°]-(M/ï2¯Åº)?TÏN…H-fC$ÌÂ-²7t”¶¤s•Ý ‘T ‘¦´wÍÙ &(4a©æ©ÝôÞ3Ýxjþw´ð1/>iïË«îg䓣Ό®/>Í·®UXYñxqK_>Ü: An/y• º·Míoœ}o¦ú2ªl{6h FÒöÑÛú¶®‚§•º4ì«ÌŒö½ºYù® ^!lÚ_EÀä”sâ¼ïlI´ûO 4¸m™£"ßÿJ…h¯a·¼ß¼LùBþÐ%$¢ÚêŸ#!²V¡®;ç¸Ã¬(´¿“‰ö4;…†žB¶Z5 Žì9ð3ì9Š;œ} 1¹^w!)>›†Ý’°(··+¾U‰€ôÄûÜøñ3~›ŠµvâSjüK&¹Þ3Uüé¤UNË«…ɳg%ý¥[xà9ñüe²øZêA:[ôdä{þþ|aè{̘P”¦A!÷rùÏBèâ|üZCá³þ|,K*ØÑúž¿ÝŸ!Æ›¬å„ªžnì¸í8ï¡ !6y*&ÌÄV¾mOieÕ·Cì7S37|:h¿Þ{ýÙ>² £×öÀ½ð"N$]#®vÃϰÖ8ã&u;Tr‡àùrB ùé—Ú")“Ë ¿‚ú$G$,ÉÝ=A}ŽÎÉýжqìÐÏ6|ŠÌò¨VluÓ¬‡ vÿj;$Ä9¤!RzSt¯3…‚†Ì_ï‡iœØï©Û5 óyˆ•@-½‡üdk°[Øm‹ tŸ¶ƒ† ⿆3ù—òuö9ÿkkÌ“iË&ŸKÛ ;íö–÷¦gŠiÚïvyÑ:ZÇÑìóç.??\BïË'á¯þø¬E4ÜS¦iû=ÄD´ røˆ¾fÉ?ogHPïé&¼SûÍ¥ 8ûÝ-?C“p\äE‘ڼ⊣ü<1«æø§d‰ß„be7”L@\ÃøDGêQp„ç;TK¤v°ÞYŒ™ëaćկ*YyÇ3ñÕžÁÄð¸’ôÌ}=°Ÿ62Ô×r¤È5óð/•å̘:Ò›Š&».6|É4ÄdcێʸAG¾8ÈG*×Ë­[åñ¬Ãgý|ÌèÑÑY«¸vsÕÂüë˜(leEŒ{{:Â9 8 :¶úÕ/mˆ¨&ÛïGÒ«J(΋œ›B=„uL–D8`[â”ßcUâóÖ<¹X‘Š~•^àÝÎO޶Ã+cœˆÙ÷‡CäkÇ’¶-ûò0àR‡\zÌln4I7þœÕZ†XKÜÏŽºÕù¥ïP24í^ŽËšz+Äžàœáɇ‰¬î|\Ùb˜Kã\¥ÉmçDc†Dd•›ûÈ=¿÷›|àƒ&)¶â‹¾6/C1'¹÷é“{K$JzØÅ»üA£ŒqÁ|æ"Îüˆ-¨Øt_ùõ†#¯HMœ+;59´5'J¡„éý³vÃ·Ž«¾»CQQì›9¤™qÍYis™93CÇ]Øíðï±ëÊÈÅ ®M¿ÍeOw­Ÿ°d> ò>Ý1J,kRüÆ1ø95¾Xj%» MF…Ë"ÖùéñkÌÕáàÎÿ —oüX«Äà‘SñÛÂ9Ìy… k†Éüy¾iº51n ¸¸E1Oÿ·ô^[èÑõ?zm±Uó4ÄÁqÐq° Ž¹É,³é~9F0Ù"CD,í‚!–çJÓ lGËyhð‹,Ukê˜Ru5Öž‚Ô.¶ÝÕÓÔvæ¶C:+W†T¹9Í-šk¤eê•óÌ‘ÅîçÂל†%Òc7(ÆékðE^ bŸ˜‘²žs <öüâM{Î ’\8Ó~ :?Ôšûöœå=•yŸ˜§'Á“ îþœ‘&t.L«òÅ-Åk\ 61¦vz¤Í'M·[,pú„“×x*öÄØ.16ÍÀRó‚I¢.Àv÷h‡Ø)s"ãºC‘K3pûŽ6†¦+ ‘Í©ˆŒ„Õ¿¶v¤Gg"ç9s¸1þ o‚Ú¹±ÜòYˆlbø5tÒ8ÔEL‹"¾¿ #›xöD"Æ»¨Ÿp]Áv·<ü7¦F¹’ØÌ Q–u®•Wdñ ‹Õ€#øÈLÁ¯gzÿÉwøLÍâjˆåÐѤxêe¢”8Ó½‰»%fL•×5ðT!N¢3ÂEüF®C™<`\Á¶¨ tÇK¸„“{ÉŽh(ŸO…±Ÿ,ÎÛɽô¤K®ÁcÖ`ìÿ'Dboœ-Ù¤#–7’'y)œ“‹óá×NÜz°qN.ëà ν½Ázz³€¸;À ˜3š©Ú#U˜ÜZêX²ÕÃçš-DòltŠ©HĪЦ‡]Îp†Þ·Ù OÞáÜ ¹ÖS÷‚†¾'î9’˜‘…ÈÉmÛ él;çWyƶ”5”b-¤CÚÙñ îð¯÷ºæ2“t7ɱknaS¥¹\é‰ÅUü¶AžƒŒ à V;9´ƒb@žé9w¡RsM /锩íÕOǧi›€mw¿;­óÈÍqÓþ’(òZƒ—‘-^ÖUãéÞF¬9yÌ@bñâvˆTá´¾üÓ7â=n÷âɇç*2çÐ|“ÚfRàìÓé¯ÏÒžuP7=fæîx ›uÈ _™S‚Jiåv<å¶Q¡7_&RÞ'¦¼ä¯ëϾ–HC¼StéëÃrïSÛÇa&¹BàÓ嘀g¬ ÞƒêüydwNV·?_ÂLÔô¹~ü¤âZuÒ>·o@åîDS - gúµþR]¹Ÿã_&fÝ»ôGeoMÌÏÁ´é¯Ãš= 8Dâ7™|$²à¥ÌªŸc¬×*š/2Ù2¯Sò“bs9äwu¬ÿ@l·÷Ó{ûT=Èjë=ü2Ä^“õü“þ¾ä`xf ³½e²¾uZÇ$°åÈ!$ü©ó»¸àšÝš¦«>˜ðX5Äô:k×Rå×Z õ…ç/pêÉ&ÙÒ—ÜÏ­NÉK äB/ ÷%K(n#Ë€}„æcàÕ Ä¨îgx6Âü-³Ã‡ëÛ~,2Ñçv-|~D3?}S'Ü™ºcž¬–ãµ>$f*Kºw8CËL‡èN5¡´ë‡‚U'´pt¼Õ)ãŒìRýn<“Bó# N ,}ÁzDô“#a$½vð=YR¹OäÊ2²n"ù­çDlÈf‡»ul»2¨™Ñ'ÝUÈۢ這nm´ÅIä‚å—a ¥Jæ̆Ô´¾ ×›”Þ4X{ NXœ_•\ÊRù ,Z1­˜©áè”þ5£žç¿˜„@k—©fúqž§f“-ZõËœ›([\+ ÄÍà‚¤koàÀÞé5õ¦’½)~…-®Hb{¿ƒúY,;˨MìR: Yu|{Ï ÇÕ20ï 'úQ+ædàÜ~èÎA[ΔÞ5'ÿ‚^S gCä¶ö3U«r2êôge–“C@”)‡Ã*ÐEàÚw_ª 9(÷p:Å~ù^œè§ê²9°õtÁ”£î–¿7+å€VQÀ}¨#:Ÿ ÿo ÍŸe2ÿ&Ý‹Ãð—æ5 ¿5Ò÷î4r’t‰†©Cyð(¾%ûÄã@USýJÉ¿4á`µlé´ZœaO“þ9(]Cvè¸_Ô÷o9ø°lPÅÀæó͉ÑôÇêuØ|«(æ a-tÈð¤}ÿ…×)l"Ã5ùx„‚qô¾²Mœx›Jò•¼­4v££µ^ØË¥[2KïÙYQKsê&6™ð€Y–˜`Tož×‘e»‚ñ®Õ áÊâ+ç|…Y’šWSCKïöU¤¥™f`+5ÕýÛ´ —*©æ³zj¾ ôlU;á‚·f«VÊõ¹®0[Õa#óËÚŒö`—»AÁÇJIbÚÇ”j컜Jæ‰1Y²ñ"™&S= Þ‰5äˆ`Œ .Öí^¯›:k 0‹àYnÇu´†” 8\, #Ž]£Šaÿõ5} jªa°Ù÷nðïjä—4°z}V}ÛÃ^%z†¤!Ž^= ›|ÃÝú-oÊ«çU!MÇX¤M«ÝÔf•òËO¸}èïÛpÜ múì¬.34T™µùØœüÊÔC!ùò­IPE‡oÆœ(ë„<(À-«[ÌG£º³x(¹ï”žäÁ#è„ç”`d ÷gÂkußdo%„òdº¼>Óe\ýupÙZ`Žuù0ó;`FÆø:ÄUAcÄ\ïÐæÆs%¡¬÷3ë-bË––4$«aG¦r“-Œ¿;ƒße¼Bÿœaêu{,_fàü¢†RR&3¿•àç… Ã\Z“™Û5«-`_8sH‰üìÝXÿÞZS}¼©X±™Ëžó˜j*´8èÄñb¼rÐ6ð'"îì’ä]Á&ã÷Z=Oµ…³7lmûµ¯Ø’1­+@!ù½ñ¯ØŸ‡ôßY*MÉ´Ž8ãA2K• ËÙG`™)˜­­›š&]…foaº…õB%²”Ën(?å H‡)/ÚOfòôjL‡ñ¾UŸ}ð~Ǹ†Õt@íÒWþÏÝø@­²œ+ùù FúèU¸w—H?%r7úì½D¯žºÎýè:•]ɶX§o ƒ„qó¬ºñëSˆ––­˜¨ú_ÊQ“ç7ˆî0.’ ¹Ñœa'B÷²ÑVщÄÙ§¨«³oãÁ‘jôRÐÁJükùCÂ…‚¹ÈÓó’5Ÿ\1 ñ!èuŸ[ŽÿL-˜&ÿojÁÎðÿ-Ï*Ò‰À N†ë.{­†ÿô°ñYwþ/šÁ”4ƒiê4ƒé4ƒr–MþÍ`šýÛ‘^ßXM~ÓœãÁíITIݨÊÙë™3î¸ ¡`œºÙË`ñ«  9"~²kæôál-ÉJŠzÐý¤“`‡òÛ½–™G{LVx·“3WYqöZ™(:¹pN’G®¡Oéfüô K¬é¾ØŸÛ}¼Þr#ÄYu·×ÕD$ËékeíÚ„UîL8|²—(ý«0%Ðʾ?{hßÃÄU2&롾™>|Ó¹³aãÁC%…ü⎓!š6¾‘׉z¼GÏÿѲiwöY¨5÷¶ÛCöÜSóg!Ž–kÑ!>Ú‡—-5ë9³wÎ!³a£ŸþøÁœˆ`'þ²‘®O}mšwt=‡Û/YPþÑé~Øù-|´i¡“Wå2õÕÈ™'ƒl¢  Z—œÆeÝF¸ç¯ÙQ©L§f%}×}™2s:2ÚáwÛvù£#ˆt& ´S +™aÀü#Ëš>!F÷Áü'÷&Íâ¥~xúR‰’•*Übs]êðä£!H•iåx:­›7W¥U Ë®ÞìjH f|bSñ߈é,!bf…UbîÇ×ö=Nÿä·tJu—§ί’ŒÔ[%vÍw÷UejíێΜæÃ`þÔ¹™LK/¡(¨“9cĹ(°ãÁÔß%aÖã¶Àm§ó—oĘí&”Ú0DÀ]Q8ûS ýkX*µ…ªædí-#±oá®höv̳ïBÇR†{÷õõ"ñz.˜øz†‹“>µœÀ©i>_I™¤ø¥²Û‰ûæßm¿ýw‹ò#„'½â€®ÎÈ“ÃÔ.·¾²Gô[ø¡Ëy¥ß>¼_s<Æ1Oµ9À–èauzLo "u aä 1Ÿ” jö½2hð•ÒßößwéMåÔz }fÝdqy1ÄÖòݰ?v©AÇÿ A:®ð{£Ø•%¹í¡ë|¸ìÙ‡™·V…Æ‚{ç›zMC'O.Ù%:/ÐÀÄB™F¾•¢ƒ^ÿfõä­9,ñ}$^1ÍŸ*Há7£rñϨ›˜ú1ÔéQÅ“iÏÁ@é_Á‚+Wh‡<ÚÔÌP—ï[ÿtÜ~úúºÐÜ·Ù-îÍ7B5†a;‘ ·°œí×w4?׉2¥|ŽkøæC£T—žUIáèåj5«òظá¤ã­U'¤5‹€®âŸæq»úú7–~£»ßÊ­4è´;¯‹Ô•Ÿ=Tõh{ímúÆd7·¯rŸ…….®°)üg’#6ôC~-ÝKe<šè†÷PËÜV¤œ/»/DëV ¿š)¬ˆ Z\Å,‰†QTÄ©ì²7á_ZÍã˜líöo†)©‰|7„Ø·ˆ•¾¥¤…m&ûSB$¥c_ }Ïí­ÈG.¿hðBæ°\²o$,•èî‹&媎¿È§—Ëa~@>Azrs¤I!üuˆÈ,¬–‘"ßìõo»p„£Þþ,`l?ŠŸv#˜|ptZK\êq]Ù`VÁŒBx´>!>]Ž/ÀÒúÎiS•ÞħúÑwáÕN¼ÞÆ›g!¶Žè§7Ö<ÀT9³ºnˆ”Æ"ùƶRðî'c‡»ðùákÀz°xŠŽã•³ K(e®V§4ƒ<Ïô‹ñ½›!Ò=kÎÝN×qHCœ±âÈ3sãzív=Èw[¾s=NifßÿÔ|S[ñÌЫ B#\Ä‹QÇÞ±›â›†ýí&XL…ÿ¶*îðMÃU*çÇQÜÖãÓwÓwîË¿—±À{ÙÅù8^è¡^<®, õšþs‡Ýr¦býü RÛ>¯Ó|:g·áРжrTÚ3ór»-˜ž §d¹ÃíØ˜Ñ+Ѩ׺`6CÃ2«ÓZŒ™"ü0¸IõTÃÃVæä‘{–'¤½Yz¯\³žsËÌG,ȳÿ?$Ç}êNù8 Ï¿‘1Ui*“Ò.hê½v,û¬jø‰WЬ4ºËDJ„Ÿ¸Ù!DXpÂØ‘l#Ô) î2wÉQ¼-úZ°ÈšpXƒª)Û‘/ÇÝ*Îd™kTý'ƒÃêo9äqÕ€(ã ÀÑ3ôwË\5COÐw/Aˆ·ï¬¡r9Ч9Òuôž9Ö.x—Ðmó˜^K…¬Ú#?3ÿÄšúV”Âôé(Eù6ö€cr.Ü'_눉¯»X^—šX›5óë˜ýíÛÜueû†©}Ÿ'{­ñÉ‹l+ÁøÕ†ÎÅ3ˆ,;6S˜ît=rà㸀Ö~à„¨"Œíåè½\‰¿7ű²mû{fRdP׸†YõUñ6-1…"w²“›6L@]¢ª÷à1b›û]oH6Ý4F*Š®ÖNè.n+D̽\œ.ÿ2&ŒÞ ÉG’¡U…»ª.ù§ ÆäL0¼ðÍ<ê°ëûÑÎ~çåCÑh v̧ÒV%¤‘Ù Ø÷´[Ň?¾‘È$2kÏÝЭ苛ª¯çïÜ#½"‡Á¹{ ÁÝÈ(ⓜ)õœ}v?Ø(þu6"»j6„v*{î¨îöÔÌI\2 ¸'“J޾‡£„å.šé®%—Þó€è¤âŒLGœ·ª]{Ö2¥Ž¡¨®>†ÎÄÐÆ1kçÈt[Mßâv•Çq·„øN |úä+”Kwo¼•äÉÄ¿¸‰i…Šj^õø m~žþL á „*ëS©²1ÙliÖíÖÝgtd¯qMZ ö CÔ£çRã3WþôW"ÛS%S4èi£òþÏt‡Yãå 36Ý–(è(”AH{%ʉ²´-D'?®K~Êx'0Šæ÷á¡y«j”Z®´åч.8·L¾V{|l.¾d 06œ¬Mjë ½‹(BÜ’ú`E)aJŠu¾;«5˜¢3?¤XgÕò&?ºe—À1„2ÿ¸¹z™èËñ¾uí.Ë5ÁÖ³jצ‘5³Þ$•8‡‘6ÕâZ9ÿÄé4*3 >¶36qF°7dœbÌVNôÐÛ ÂEˆNy›¢Ÿ7T Õ‹½î!fWÐE‰$æAP–×¥ªh¯ž®zhg#(ˑԢ|Í©©P¦²Hp¨—~.Ú½ r*d)5MU's@ýÈsªÎ¾ÕáÛ½8:s®Ô¿+·Î޲”«@ÓsQÆ!­Nrƒqú7a/Ä3‡Hÿjd™{ô4WèÓlÏÂqŽ òùøþYÒø±#¦ôJ%=.KæÇ W‹&}«[¦b3‹ãoRáZEõ«5; …ðà¶-_]_Ìßè’Òû>3=†Ó-?8à‹f¹ûbãd‚Cªãs—ÍCì«RFî(Ú=À4ÚW)Çá°uÓ]{ºqu¯>MòWŸô*îJØôþ­~…ÆÜñïö-ÔŽ:tÀÂôžM+Ÿ¨ÁTf~`àY. É" 8ª–‘ènm;N‡CŒ““z—©,oòõBP[´¶vÅÚI&y¡¿“»”¶ëxK¨°ôûûWö[¦&ºluºpüFÊ"“m,öîh™>›¯l¬«_÷äCQ1”¡!уÉÔÊ)µÉ?ƒ^'iä±föõìLâ¥ò‰°’‡‹B ’£—$âœÁoùo9 &ÌÓÿJl-îyÏN…Ù¥+’¬©2f˶ì!l Ëb¼H¯Ss³»µŸÚ–»7µ£ÇŽ@÷ë››²zò»†püjb‹„ÔÙ]µ=¿M[žÝ ÖƒŒu²ƒ0ÒVåÖª¯U ©ÞØqÀëB2*²bºŠ¿xÑ<·34d¬ÚîÞÕEPÏÇã’•,¶ÖÏT$GV%ÃI Z+·¯WHk¢Ió­SRøÖ>†| š;|:ûÌOÿy¬ ^’¶üï'GNé§ÅDjØA‹pK&/¹-„iÒìƒ&oô‰=ø_ù“³®6L×s<@ŸÍª#8ˆËãÖ°™ éô<½¬í›öi]£<¶V–k-ѧpBØ<›É›— ¦…þ€æ zç¾L ÎÙýUÎìŸiç.ýY;cŸ\îù/`<س"©~. ÊÖT&`íÛ¬ÈÊܦf¢—濞Уø¨¯fuûôû]Å1ˆè+r¦ÇäühKÚá8:¯2íÕböwÁbˆÿF+˜þ›Žÿ5ÿž ?èŒÙâÚ³½x@¼ÒÿõÁþ…C03Á,ræ«fé,›ÿ'Aî‚òΠíýzlyÛ¬Õ¸+p¤Åá¥Ýî’jÅ:$N)^‘ï_ÞB.Ñînè6Ðâ·Û³¤W* ŠØyiºº’;ñ;—KíÂtùÆì>Vè6AD·JÃ“ŽœÈ®PXœIÑ.å¯3fY^7«›ö‹·˜ÿW¢ˆ"ý6—F hê= Ûu¦ æËoæ,'ír~ôÀÂÂ)¨ ;Ù¤•ÙZ*‹˜&‹Ñ˜¤¤¬ã’îaZê‹À¯VÜxj¸d‰½á 6œ¬žè]ÐàXìB·¼±P>…ð(élÃÓés‘RÈ–÷»„ÉM'K öÉæÂ4ÿd¡•1ˆ•±ã<ÆžÌfVæ·ÃŸZ­™š*u¹LiÖ«Ú(pamŠÐûCVmC Sr“² BùÅy _²#z0Z6îeÂ×T¤s7¡àl´¤bgÖV°+7+“@&’þ”6‹ç?ÒþVæU%ˆq•›³oÚÔlÞÊì8«S±Æœ¿Ñ?—®+}ž•®Ù\òz»8Ø Q!ju)w²@]õÔÑ %ÔYv Ý)˜EªÑ“¤ìceøÜBª Æ5¯D Ð’wß U 0 ª®Ù€zs÷ô'ô@”N!I-É(€„Öò]«ˆ™%zø¹bØ.»ƒ_ØÏ’ã1g'÷vë%â ጵV”àÈGž?©(ÇoÒMÏK…Ö«øïn_rÃî Ó­™”0c2ð­ÇƱ[zMÊ7ú¥ÓEϱV–õ6öµ©Ž¢sz_þ ÉÄ¡ñf¶¡¤˜Ç66è3L¶ºEé‡?QIs˜Ì“$ÓŠWí0œßY#A”—*;;6®†{Ëái¥Ü F0¼Õ¡¹ÀV±ôkC*þÌ[ 4c‰e ™Gaz†àÁWÂФB™AÅv3Š Â%@RrWÅä¥+à~ý†ö3:íÂ?bsQª9WžuéSÎÔ+Ž ÿK6wU«±jô├XzÁpI:C‹Â¹bn"ÊÓî¾_WX“Ú”5Ð/ؘ[’ÕQošwnÿUxE»0(+À£™ü¶u3»'+ssîÄe}†|–j‹Él{¤Ì>ò«¾óWˆTœ{=e> ‹UÀî£ó†ðö4ÑÀdi7ݦK`ÁÎ!ltfø1n£U§_df8ëvãöi®9Z¥ª‡È6L ÑËLätAÕ9o²)1qz¢¾XˆiùÎ ªØ\êYn)v›Õ‚O}ëšš=w¬é®Ôò»D¾'|Šé6»yó™á‘¶cl*È,8ͦÐÕ‡²B€»àD¦=zzW7í¦PÊÈL-Cd¦ÃQ܆Åë R fC¤±lê²Gß%ºÆ¼û­ —}¦b'‹MÛ1®aÿ»¹ãâ.õèDÏ>Çß¶Këù-˜k&&±ª EŽÚN{baPÑûlSøËÕ¢Ÿ2pÊ à+-NX95·W~Ü‹·aÌ2ŠU•ÂÔ±ajÏp V²Û2­©6VwN!€_Í¡EÎ.›<Ú ¿†m¿œˆ`>W/íöCoè¾Õ§¹í…w„äþ·Ì@¡ *ÝШXD<ÿSUv¸[X@œ0Q¡N?œ¿R¼ÏX¬’¦Ù"Ï>iîVv÷‚9¾MøíO:T¯~òãw—Ykƒ‚żúki`'{Sc,f›X‘üFÛxCDÃ(¾"^]â–>.ráêmzÅMððVº„ôîdå”J¤ÚêùY›±*Ë]àzä€-zû¬é7TCKj‹v³ùXeÉ“×v¥W.××CúˆB˜žÕ{³a"Ó|Aë(#ΗÎs)ùÛd|ᡜ¼cEÏ8!Uùº5:W+÷„ïÚ\¹Æì5|»Níìôa‹[Á”âiY™¾U€@ˤw×øñlq¼z¼°Ì!¨ð…spÈݯ®nRºYu…ÒãdÓµNca¦veƒ'¿æÒȽ¢ŽdX-¹¬>L+¿i@f@g±4‘;çÝ!WŸî7§Šš… õœ¥%'<õPý‘¾˜/‰€}‘W açï7Ý5Y¶¦<ʵGôôæ û®•¢,Î×¼DÌß$.bt›N"–Ÿ²ƒ©„Øš­äÐI£%™¾L¸4ö»ÄþÄ/IçË>Œ?Ñ élàå¥<4Ñ(5v£ÓWZ‚“a‰ö3auJrÇ/Ò®U{®Ö8‚{¬a$Q©Ÿ‘zoËxdàPàÔµ'£¨l°EleRs0ãX ”›dZtû¼ÖY±ÔýQIs ùNLŒpQÓ½V5 ‡„×ò`”U¯™3YPÙ™Ó`íÈ.ì¹)(bŸ_Z,ÎYÅXw¸€é~–wnÊÇö©ÜÉo°.”ê#ð¬ÍÌœj“~Î9²‰å§èÑ»ÃmO­ŒZnMrŒeÃKT£gòw3÷øôÇ^mƒMàmÍ-̰.¯•Iöƒ˜¦îÙqСDK\Æ«4ŒÅï#£S@RÏ\̾ò«–D³£‡˜ ooStš&¸l}T4Rz ¯Bí¢Èv,-¨1°1Þ€‰Õc1ïµk9·¿rG®h”ô3k²û;Bl“æ¶Ã©ϳåþ¥™pþ³«½ZD™r*Éùov\=*ëU T‡Ã¡¥®Ç á]TÓÑp«,¡ì"AÆL\Ù³h6pzTª£¾Å'Gl©G1+Qj Ú¤­x´Ì‹*ÚHæ·IRž]ÓÎOÊ¥s§{'º¬¤Ö)æ#è3SJÌRO–ÍQó ÄMýìŒñZâ½J9Ñž?Žã29Ï–_4;‘µ³m­À›¨V‘-Û&:e‚&‡‹uŽš'ᄱrþK¥fôŠ'3&0²0Î`ÎEGÐG«oØagkÌXÆ'Ît&š8]nà÷ø„¯ ÷^‚Æl5áþöV³¹=ûFŸ6KbJÓ§!òÈ¢!â-²dg6[Êo)‚fàX÷KBÂ|¾”Urb¨Ñ°àŸ±X8'¦¬žQ!`, 6$Ÿ²´ ±eE¡ß+"¸ŸÏ¼$²ëFã<"c³dü>—dt©sÊ—r¬Èœ2Ñ'<„CòEPþÞåÓ¥@¸BçÉBPae±ãÏé-áúf¿üØŸñj÷ß§ueqÛ[‰ãìår HëÓcrÊ’¦W.øó¾Æþ%Ú÷ä†þ¼6½ký"_í8ºÜò˜28ù8ü€b|˜÷ø´ÀÁn±ÑCé!mP]îr9°—õ’¶VÍ¡-úé=)•Ô®(²ÿ¶ ÑA±wiåÓÞ !{"%íÎîf˜Å¼„[ÿLî•U‹ìÜA¥Œ>¨©÷’D¾îòvŒÖ&Èð"‘z/lÔä,¡HÃH=¶ã§0YózS¿Åò *Ž[øÉÔa*{]:œ@m·‚ˆjѸXLÓY>7÷ÞeCi6k3=&[¥É2³Íã¯$îŠC,\jkùßÈ/bHù ?» ‘dNÖJì­û\¯ÓÈíZ9з…$ÇùLŽF¯Ê L&W­¥fÀÓ¢ë˜áCµ©ëV{yÁi—¢#R¹P³Þ0­HãŽÚ/b‰¼›ÕìÛ`€àœàÆL¤uÛšê‚×G.‰hC() ¦J€Ke»ØÊù”ØÉdáÃœÍØÒˆÐkíN‰)¨2ÆÕAo¶rL¾P¥MO>Wþ«“)%#+A²Ü™ÍiýM Hæy¡Ú'ž¹Lé.¥¤ÔùIL'ÓUí>¢«Oþ@oUv?`RÎË«;Оf`Z0Žƒem’êè›'‚ìǦ1²f!êYä Áø+÷èG0j\š}ˆø¸p²o"è Qfª˜^A WƬ\ˆ¨8œ@uèåk8f’tUŠ©¬n›ÜXŸVðô’t >2^ŸíäX–ÌPVû‚7Á»[@ k3$7CœEÞ¡™ )ÈŒ‰àçò”H,cêá¥=S“7bsÍ¢º1øOLÍÝh²ê ÈÔ rgeüôÂÝ`lÉNnáê[jsg½0¿Éo&xÇÑ ¼S-h”M ˜ -Ð<ŠuŸlF+yíô8{’hf$ªQ0«ªem“³ær(aßTXÁ”¾Q r œ“Uõy%S™€tÒ™}(̆ïÓ›dž;ÎÏÒ¡äè/BG7íû™×m»½þ©ÑVßCG£QºÓHq^JùÔêBB„‰NÓ$Xû²öÖ‡ý4qƧóšýÓ°ÖpÁ|y®i„‡†bÏyn ûu>AÞœºiq!Ä™E¦9­^ðR' ™”ŽÄC‡;¿µÀ 2›Å {fª™¹Þ„¬¥¾ºóÖ€MƒÖ½N§b~I;}É ùK?ÞÏ2ŸúO õq:]^ýaÞý©?þA‡È#'9&1(‚jt€X=;òf% K›®€>qNýP±f¬]Þ2Íå<·c ²gSò±Þ=îÇïPÉ‹”þÚ%EL8™æöíÁ`u_F@ÝÃìháQÇ' €8DºÈž#¶€ ¦R7í¸e²Î.Öì¶59¸Š™yÊÎä“VùÛöÈâžBÆP̨yГ¬oá 58Á^Ÿ’6‹}šJ w3ØNœqÂb¯dŽ•f°6a¶„S: ±|µDTÜÔÕ.è|Yܯ;™x°o Ò-©8¨ÁQV‘«²WïË´Uö¬lظVðï§4‘F$¶w‘† ;Vl,å¾äq7WozÒ´/ò“ÅòôAï×A±“†àtñ¾Z 'È•¡H‹‹4<õåÏì,{²œ‰3îfgàGÔÿ˜ý¹‚Ù8äS¤»Î-/ŸŠ9X¤± PÚ]`’ŽNߊ ­Úâ¶½\û´ƒfÒêý…+Ä­Ô*Ý|E­ñüí5ë+WŠ/{Ö^‹ýmIG˜ßPÌ©ô6ƒ¬ê©T¦n/›÷.´'M˜éu°keswyOyžÆ!çÿ†œþ ±m‘…ʧǔÃy"åžUÿ·Çúj^iÔ¼Ò©y³Ô¼y1ýOÔ¼YêÔ¼¤ü_oа. Õ•±ÝfË(S±M7Z¼ÐäT'ËSزýAÉñ­ß’x(¡D©:Ñ’SWpÀŸ{4%Á&&YöJš'a$Ã'D¤™Ãuð¦mŠÙöŸ þ?“kJ0$„VÄÁlQ¦ÕJ0à‹ØÉäÜC÷»ÎXpmB h@©&×÷ÈûÄZN\”$É2¢{4¼Z¿EîŒ`ú ÝZˆØrÇL\ZûJáBN®'$2qµ}žI–Ÿ2X[¡ggFŽB}ÊåÖc_$几>/@¶ïâÝÈ}ŸŒ& ÊsH5•¢þ cu‚e÷‚‚ÙûpÒéÂØ ©{1ºÊerOÃ)jv!×Ï¦åÆŽ`èEéS' .Ø3ÈãD¦®ØLnz-¬4Á0SC#‡Ï¬ëÅk-²t±“ŠÂž¢½¹N>‘­…3¶)ç"ŠÃÜä ¢­^hÂ|¼qO„¯Còv²<âTn–Ëäf›f‡™œ±ÄJu1=Á YÈ"0ðÒmâ ™˜¼tp;õgè „Á2þA%Ùø¶Îz}þbñvŠA~^]Ñ–‡ˆÜb}!²Kjq*áb¯ù€ƒY2—)ÌÌWÒãêCìÔt?„æ&ââøJ:©õ'sÌPËôê;¬$(µŸõB[¶ÈH™¡}`†ÐÊ4÷Ú°aºñ3Ô¯Ž…H' _íɤTþ©Ña7̉"Æ…¯ÆgcN vÍ‚ Î=è»#!–°ôÓýʽð«Ë›åÃÁõ©Iþ«a!1Ÿyˆýˆ˜ú˜ÿ÷d( 6ÞÖ:·˜)ÿ$µ†–¦TàX{ËìÈ ž#8‹Y¥íäúqÝô4»Î¥(ÊÈ™Üß<>^ ¬ Ò‚q–o§«ƒþäÙ"˜'\WñaöýžžbóùôÍWÝs<(ŸLO É(Þ»oÌS0EvÝœÿ8÷‡¬SW*kõ2C rÂXÈóX hÊ‡Š¡Q{™æãááýŠT@{Y¥k tmö׊…_Áí$"°É×b®ù÷Ù‹r½û¼ùÕ¯>ZM!¶t:^ÆA.‡÷ êÑMʉ#‰”Cìâ >ˆ/®õ^.Ø‚åêú$#BŸÎw:ÌýZÉ:óÖ$G?P¯9Ùéi6 ®]¦nOªÄŒè&7¬nÔy(™¶ú„qùÑQ«´ƒÙ°mo†ÒMæ»}· €oÛ5kÿ¹ìBùîìÝôÓK×½é\òÃ~–“–Ó­îN´Ý–¢CfÂØohzP)§V¦¿ýoŠ›Þ°ÍO"òÁÛ8+Öö5A½tÎÈ*ɇdŽ*E©A»Ï Ôe¹äÉó]!@ 0î®io†ˆ«–©xt>~aÊZt)/8BIÀyg_\}á@Ä™µƒÆz>ŠÆ°öëü·Â@#2/ÊC®»?OüÅEÁí›Ó-–°$Ù×°9neQßÃ^mß=¦i ôc°#9Üï^< òtQšiˆ8¨Xš×ª1¡»îõ ²²Þ]¨)P¢˜/nKÆì ¶ Üó$çÆ³ÖŒÂnÝmÃ_¹¶éûo¸ˆ‹R_<£¥yÀÎÅl”#Ð.øb{ B¹sõÃü) cé{:®c?ñ\ùñT”i[±Cp›~Ú"y“)©æ0ª¶™/Õ÷Xʸ;¼±““À$ÛÈ_àþmí?ÚlC^ÜXû7çãê&÷„™WïBìhþXXkbÿ ?òºz±ö^µŠ>½±Ž5e|¶÷ò¤doÿÛ˜¡û?ÀI«Š´þ;~x²R®£VÌK'Ð#]AsH'¶ÍD|Kçí:15éóf¿½È¤A”Ö ´‹mÖ»cøÁœhÂgD%»û¹uÊäÊDlÛe&ZÕÏ7ÖLñpOÚ'µœ±¨8 öÇ6AÓa½Ÿ=é¤]°ÚAMç’<+žÉn[ÚÔ l2‰àö¾|ænáþ§ÚÄ¢^À½zªL€mzŠlIA(×}ú™ÁÊæÕ± È]kOåÖo@Ç4o É x¹¼ÚõÅ7Ó®B1F+€–3ú*·UÞߪÐ{‰!« {e0Ø{"²ÈgÎÐ}{ÚÞ[³@¹9¹‚žL¼¯žßTx5 17íÅ{wæNã˜OJºL¸ß…ècñMJÓÃÆß6¬mfì…QY–Y–o›øÙöw`9úÑYpôÇ¢ŒØÿ$—ê¡|uv‡=ð!jÕÆ&T‰EN}[&ý®E Æoï÷+!7…óN’ž˜²3i¹bf‚õþó¢ÏõU fDñëº$=}@Üîý3J2mðŒ’çtwаÖÞd„a$TD3óp¼˜Þ”¦Dƒ~ +Óf·åMHMÅ^¬S&9*Iºƒø;žé.'6j¨>)\ôüšÀw9;ÃÉš¥$ÛÝ$ª¼·{\±Wö>pD!¥HM5øî³:]Æ›æŒ}‰ÓÃèrÃ, Oj æÎÕBèüÏÇ ›®ã,Xÿö†æëN'v#Õ0ŸË6Í~¤Éâsîj÷€m_ÓbŠe:|e[çãs·ýgþña{´5 ,\*| XÍb<58šb\Ìfã®7ìÚ™`ê"yÿIõ&Œócø˜d⦠’M«C/CìÏ2€ËÝÎ03±ŸìÁ„-ª4÷þÝU²\%,¤¨» 6“ÛÛ¶¬ÌÌÏV¦mË8I¤í¯Qº@Èën)n7ð¦yʶ=}V /b;'„ºÑ~òóóš¨+ÞÉ3L«[/Ð ~’Wò,§4(kBÙJ&t‘hxr^ìÏÊåHõ2òõÍ(ž›_Õ´çT "Oƒs΂ý/fkø°-ÊF˜"¤ÅSi5BùÐ K@;ÅÁˆI ×ýr<ýʺ*"Ë)Ï¥€eokÐ:ïmrä·ô:­/½f4"òý*ÖqdËË®ûÑð§ô8~rÌ”U’/Oža²iÿ,Äq* ñ§L-^R`6¯~Ü #¡oΑîÈu@ygºö$ÒÉÍ#Ñ#(E¤]$Ê|1¹@cbêª!z¹ó£Ü6›Ïvk_ŒœÑ‰½aÊ€ùŒ…8&üy'ïš5£Iõô¸d÷íqq8 ›~euö¯†ªÔu½›…â…ïs³CÊ$Ý û”%´þE²#ý\ÓA“æÈÁe)ÅC“–~Õýcª7;¼ˈïØ^Ó‡§ýýcËý—åß1*ñèÆ™g-•3s¬õX¦qžâ²É–wÍLÔiuã‹*A’ö’ ¤ÙM*N©à°à¡Ÿ+ñÔxj—Åèó3Úl@Á¢@˜¥Ë\Y1cWüü89Q°ìeuð-ÛÈÿÄóX~|æ·¾ÛpÅ_óñ)Ö‡’ßãÎgï³+Y5ÆÔa©Z:ºÚlîT²ˆäí3äûŽ}añçiª8ƒó“š³FÀ2(ue+ÏëÓž‰ÒóËoHJ•Õ«$g.CˆæƒŽ&dí̇d’a‰ôݳõ •‘\óëPÝXšòe`oz÷‘¿(ž=¿¹4í™Uä‚“ÞkŸÅ·LÅ$k4»¦  6M~{9ÛíìÜYóÝY^À04¯ IunÄ0Ò»oQèäÑ’âD³nzoi{FZ©ÆÞüåŽKe¸ÕÅR­–‡G¨x!DÎù­„fô±uDz²#[>· SÔÀ»‰Žtæ3RA#.ñ)Ð4)̪C…ˆ`ŬY~D¿'¶ ˜^¿.¿ªé[äZq@Ö  ûôgŒªún)Òàs:¢_“g$ÖA}h««Oø¸?/¼\þçôïlòoÓ¿ÿ‡äéÏM_ sæ¼ÿ:ç ’‡ÿð\ëùßyÊüï,‹ùß)ò¿e2MÿSþw¦H‹Éÿx…«¸; Šv[æëŠ]{cþ#ã-§8:åশíÆ+¼©ˆ=µ–¼Õ QˆL/E$H²ûB s‰†Y\6?Ôsm÷Ë6ªê}ª:êØûØK_áòúôx@Ìy¡A~?½å†}OTf椵b²qÌ"0H‰~’ LN˜C×Õh[Q±Õ5â“aFWñlPk˜…™ÉapøóÌëÑš“רãÙˆ±¼)%àƒ ¯/ìïà`Å.àX;c1ÎÉ?SuKávžÑŽê¯;dŸqe¦nRÅ9†Â›ãd5CŸ8Ûi1z{Þ7)¹˜ŒVÀùʵNÿ|¹"Äò%¦ž¦œ¾úÁSxŽ ŽU´ÈÞœ¬„ÌL˜ ¢ßóNy5Ì<†K•&•Åž¬ìD²Ú­w²¤IÕŸ˜ñ„+Ò ³¼Ýq ²Ë=NK‘ï_”£ÅVfæúg¬c7¼øŒ% ³ÓÕë;$a¿³­ð:šÃáB{0K»˜=ÐM‚fÏ]¯„Æ)þ‘Ý—Ë4ÿuaSë ¿ Èñ+é›Õ¼œùôÈqÁ9ð ŠùÛê8K¨MÞD=¡çöáHšókwí5ený_ùðuÞ{áÎ\j_“X­NÉÙS­Ò‰@ØŸD‹È‚c&DNLãñ.ÃÃ|í'§¯d«Y 3S´ÎaXÙ¸¬É ùLm=•¡$¨ô€jåÌ=ß|bŸöÅšØN”ì"ºX)Õ2}2*vÃth”Õ«+gNâ?63yóD<•öòIÙtiãF»& ‡íOkŒ~ñUˆÀ^ͤé=ÝLâͧ`q:y µÞ°7ÅÃ]`²d Å;;ík>›ü¬|׿ù«ÂÁØý¹‹ö1û]LÎÞÒKyκý1Ê?3]sÄöÉ­¯ÇËÆéóZÊL³‚ýÛZÇŒNêË ´W+&è£Î5üÕÿzëšä>ðå¦{>fÊôظ l×V¾#¼ó×”w›Þøá v` é:£Ý­Ãi”Í~üv}™>”DÇȵuûÜ—‚#y¶ºüGb’ê׺ñi©çf©®1u·è®°®býçöPÈozêïã ×V÷à«4¨þ%'(Èe³0‘‘0Õ4Vrá¼ obáz–H*UGeYŠbó#ýé/IBXi5­ $ÿIíSv†ŸÊèWà€9Å5g‰dÕå§A½nÏà—útx&KS8ÆŸ@ŸJ6•”éÓߊù9%Z¯ÓçXïy‚dªm×H,—„Æ ˜÷hÿX*9ék¸k6`h÷¶útÝÝ.ÈëœWïÁ™—øþÜ HL¬6yâ S»ÍG÷‘÷”¢ØÚÉ,×ÄNÓÜ£_‰o8{ ,lðTrZý$*rŽOX MÝmÖå•‘Ú“n Ñ$ ‚-Tÿ\XMŸÌY\°6qrµ`4ýƒ*ý$CÛˆ‘’z⣸z¿Z¾¸åWѰÄT~ ;ß³¥grSÏÂG½Æ;Фí/\b¥®V@yФÙÅÛ•b±V¿œ>~1b†5ý¸[Ä ²à”ã}‹9>]ñè¶®oªÔѶá„áš§“»ŽtÎ$œÉþSEˆº'Õž»ÒÀȼN+}MÛ9ëx·=ç‘t/CìàW?Vô…ö¤Â„¼SÏ00ï;ù%ÄxëÂì Ûƒðk# IW Ž}qÈñßÏŸ·ø ¸=ÚÙ¬\u‡}q*Ó—Õ53àÃ,ãæbgžCh³‡¹!ƒ–åAÅýü¥ä(‘ƒä죙Cq­ô» ¨xìÉزZoŠ-nILÆY4åsGch·÷uo“ nÙ®3’'äU÷¾¨ÞmŒÒÕƒG•:½ôGOÅ€‰Ï|ï7Û"K-¡öa.©†CÙL¬È$Xf™œ•Ù.JôuqaÚ¯L!kÛ½’X8€ý»Ê BIs€¹åü€_ <ÜGo§_6Õì){è¦×nK­Ê»Ðï%{åt~Ò¬t·Ë¤‹g’z³ß+]öN(‘ø©»ÔÅð«2ßÖŠm_Þ•@®"lX‘…¸WJ`æ”çox¯¿ÕAÕ¤‚oÛ ÔŽ¿ì®Œ ÜxËí£S¹Þü¨¾ù@É×Íͯ¯]A5`¹|akë2ý¢}¨™Ä¦G—Ñ2û ]q5»1’Aœðƒ‡÷h×Ǭ¬jv ½+»×ÕSdïiò¢%Ôdy ¨a§É˜ðͽ³}µ}+¨ieÑ i`söú/Ëݪ-Y×nzò7ðÚOw—ý݃>(Ž ÀªŸÉ«¼ï×>¹Sí´{”ä˟ǹÅ/ÎW‰9þÖ%ú³£«ðÇÀ´æä²5€JBx¦'Š|´º˜±'ü;ôtãduÎD/™£´îÄ_çö?tžXµ'vj­0ö™§³J-Ö˜åFkOþW LªŸåÙB)ù<TÓBÊÇŽ`Ý©ˆ§°F thƒÅC6!<#”™˜’µöZ ¥YõÏ{æX‚‰é›ÅïÛÛ9zº¬³ïÑ2%e?OŸ{>8h }ÂÒ÷Z-íYè¹Gª.^ŸÇÊã²W,ÌL‚ÆÚÞaôã9ÍÒ-¾HHÙ5»?;†È ì÷Ø‘=ŸKõ¾,]ŒÁ:zÓí ^ût̘à9¼_Ÿ–"·[/öÜW V?(p)„ßßjåq/IкÍâ¹¶¤Ð«A2J9j€Œe—è(UÀÐb•þ Ù~&-‹ñ†‘Æ1¨/_#©®Ÿó…­C¯eö/Xúm…ó`s ÝŠ!³Of³êÖ…k¤ùs˜·Å1*ÄIµ%ŠÂZaЙ=ïfP¨ä«â] læt§fñò¹”ͱª@->¤2Z<3g­žs‘€9Ï[°$!#ôea,)µÎW ý¯‚ÍQæŸ'f[Øg˜àÍÄb겯f»¼¾%ìTÌÆå*Í)Yqçêñ†×æYXxÈ)X9Òí|*Êðî-êˆ1^¦dépü›ö‘ׂ%€¸í;â ¿íëk\ôN©wð¥ËÈ›Õܰ›ëÙŽ–dMsÔK"Äü¥¶´Û9Í*U«0ÊápÖ¼]†XˆœøsÅô—Æœ°+c¯<ÔDùÐROžÖóÕܞ·²wÆĔ¦½ý  Ijå¿ \ÏW²Õ> ’þ‰9Qì„4,£ÞƒÌÛhë‡âtÝb?®(ñAm#ÁfÎ.qÁÌÃÖ8E]ê+Ž}Å _ü—¼Äüßä%þ3¨oÞ#'‚:I@–!"­rr»ú¯ö/©‰ÌRyLM«æ rÿ!5QziÚüNžÇ¾ ±Œ¢…3²ðY?Ûr‡Ôcªä‚3€ 75«;"íÝ.¨³@#(hÑì¨7ífyqF‘Ú5g_?æãSçÁ{ü·D LdûX5›¸HÜqæË5<Ù×|@‡qó _Ø:;Ìt)2ø¦¶^éÓažÞjÙU3ãoÙSh*ũȅã6qáI3áN‰dv¤Ñ+v3Û$}¥JU‰`ŸË!¨ë„ò(þëh Öæç¾·î¼xõù¸Ší³+Á–™E‰tH:º8Þkô7Ký BŽ$R@V«òÛ® ³¡ÉrcUBeçÖ¨€OíÀ ßâ“ÙI‚HØmCd²Â›)'!’ì™ãÂÿî+q§ã¨¸éù™ëd‘‘qÆa^Ná*úT@»oL=“Æ‘¬ái¥ÝÏA5©ã•ǘãJV,9£?hLñÃv\éòRè¨)Ó­ûdæãƒ¸®Fò‡¾#®º>õ·UDïµ_l<5 Þƒ"7%M8Ž~[¹¯¼ƒ,îZc2ip›wü­ž`pQGè·x_ÕßGä3!ö bˆj><ÅÀsŠk ĨT5X1¿y£ºôtƒr¾ðþLt ÏÈ[`k)¢œdW¸o9G£ (r!eG@"¡õµºwû*%N§!ÎL'ì üž,¤\>®óÈÑr¤CðEÞxBÒFa:À//Ïpih<éÿ¯ö† ^Õƒ#⬂ÔÔ˜Q6€`ö±\îþ‹ÚŒ‰é‘¦Ñتp—Mïñ+VÛn—õbzÔ„ *_9ªû›…™8hž-ÚðõeÌõa;ªª?ïR¤¿ìJ§åâ®IyœåV™ÚtÅm"Øâ Û:Î:©¥a£úrã¹°WœµÒ'jBa†m§šöR9Z‹Z²Ètzr8KƒÂfûNìÐ㵉¸ÝL¥ ÈgÁ;«]~g?Çä/ßµM}ê þ*AÀïyvOál«‡5{¬o)ßgŸØ2* ù¹ …óÓ§§@m«±yÛÝzÂväɆ)¡rBRksv\ÀƼ ” ,¨ò¯!’;;éïÜF%}Ñn ŽªŒ'R O¿¾ÍusqÃIq9ü†M-ÎCùBº—Í\Õgvåz w¡ b¡ÊÆÑk7L1Kß/Þ?z° ŠÚç¾³m@&ªû­`ãKj%Mñœ~©H¾ô'¬ÕõˆÿçUkÅ"çJ;u§Â”9›éoEìÖØMõ3ýˆwOmÕAm:3–kŸæà¨Ø'lªíêÛÝ•%°êçT éán $µ.ÂL–?ÎUse¸üù˜]?V²˜ß©ìØÚXC^J1u…É€ˆ¬ Ñ<œÃû!jfû·¢Šà§ Э_m¢Ô‡7÷ºM&ŠççÍUDÄggØ¢Þ‡pܾT!ó'ž0Å©å7+iHúìxëéÙKϹ><(“KûÈ0p—±;ËìQuXq+S~‚kÞo>åsþrþ7µ˜ÿ m°yNàŽÒ›n4él™åz²X*IÉD›§%ˆ¶r)ˆHåž 1oî¤3ÖÙÍ*‘[šÆ­fó]¿ÑÛyË|øÆ[,€Ú™Û0’‡j0‡Ù¶š¯ñû¦rj„`´Îª¬ ±¿”`Ýþ¦:¤f­ÌÁ®å½µÉãc?ràRV÷A\‰Mö¹Ú} —óbÊ2E4›ÔgôdÁ¡a‹¿Ž±)ÃÀ¹Óy±a6bâã¥ÜH×Ê }iü~¿@œA½þ_PÜc€üvþh¹GPS?›Þ«¶.PÍ ÓZÊȧɘÌË0x8©~Ü §™¤Oð¯)" áȼú´¦µdê¨{‰‚]@nÞýÄ üáȦé}V àƒ¼ânô(èÚ{Ò¤4eö¼œÖ÷”Ý}¾Ã%BÕ¸°ÿ9´w×=¨D'+·4žlõé @Ý|"t·ìÐ/”h¬SŽ^„rŠ–3ñœR§iDí&ßšì*ëáuï)Äœü&RT]`|öÕc<­tŸ†ô@N’£>*iïb «äÌ+'–/c<¤—%æ©W¦Ô9–Öæ`cwÕè¬bâK¦ÃX*%Uó]Šüž=_ð[R¹ŽIÇCϺ˜ê¸|²ÿ¡2f»üáæÍv${Ѓ%¡Íkì?z6¢›BÙ±6uj Š óè5¾âŽÏš´UJU¤Rw¸ëäFq§0iè‰á_’ùb»@yØÍ©Ž…¶ÅâÃÁB0ÍEÞ¤“÷Ü47N©Ò….5™<ÉB1(TÓ éùèÝè2]Ršèmûë‰Ôw'kR7 ±³ËSÄÙUÐæ¢A­VÄ„sÀ¹žÖ  ·ý³ÐVÁu¸5D² çïêò³¡kH Ç*™bÿ"Äö6+5ž)Dmž(nB­mš´«of¯¬² ³0j„S`ÓEeî%6ƒ³FÐÃJ¦ßÐ,ý ÖÀuüåU}Øí®1@íí§UùÝK†›P叿ÍüB0êþàUn×@zòǺ­>^ êÅçŽC>f›´;wïœÖ¿Ïw†dûLÖx¨‰D»ç`Õ^Œ(³"5paSŸÇ”eÔ?Z»v¹˜5Þ´ â"«q`}ÞÌ#9˜Ê\y³Z%ht q˜eWhØF¨ +›Ò;ÛdŒ ¡‡à—:ø-Œš(L¥¹õNÍ ¶Ÿ}_ÈÆ´ÂPÒy«P(Ù»´F¨ß(Y y‹Í J ƒ]¿ñú»ù>«/¾"5Ïxܘ[½‡Ê¸çߨ’ð}¿ËÂPºb¼„uˆˆ vOdž /ÉIëgÊWɶH1XWÊÏt !œå?î ^°wÞþ%+P§ç÷¸ßõÑSZpMagÍùA-hM‰{c`VÑÑb})ˆkk;H2IÍ9ØlzSš†iˆÝ5JQ[.¦ºÌzÂazTpazÜüÜž™Ú‰|a¹7vc¿Ñ)·âZ¤ùdgˆ%"‰¶¼­7ññwØÆ^¯Ðr0xÇj„ËŽ|Õk¿-ä'm¯\hÌ£1wOÚ½´”ÆßòÒâ›ôˆ‡ðâ<Æ0È‘i½]q‹œÿ^—qÇšûg„˜+a¢­_û* d£’–^<œîé pÊ‚wÎæÈôžkoÓïÏCÄ ÿåP?˜ûÃgíçùõúïz¾w[§áÁµgæ øí¥Å+¥,Qɸ˜Áo÷x¥^.§èÍ@u˜¯¦Ð:©Î0þùPu1}z1h8¦,L1x¥iíWv™L¼{¥ÃÚïe](…'ž?‘&HaÓ®š‹9>…pǦ… _8Ô÷Ö·ÑÄ3r#ù…®Þûw£†aoÖ:Äžˆ…*ü—IÃt\$}"q“¼ø4oa%±a¬ä™›XSRMˆí˜Ù(â/´Z3Nþ€€zCpY&lMõúYˆåIÜ+V@ƒàP¨ôГtúÎoýª›}e}åTÑ&wîê sÓׯ®}ôc œåºÝÖ’7)¦Vj'J$Ôñ('Φ]þ0Þ’¦‘¦/óÙîñ › ›UÀûšf©“úL? ± 61)Þ_ϱU V–ÎÆi¦uaEÖ©\^¸‚ÄËÏø®"^[ îûæà™9A@Ô€{N±6<Ο…8<ÂÌù=}5ÂÁFZÁqõg­,SS{+³3Ÿ|ýå ÖÑ··õÆâ°önxn4¬D3†ã^ÔpÈ‹(ž•~À—›ÆI¤r š»f'j=4UdsM4=ŒhaqR—NÒLw´wŠäHŸÜLoò}˜†BƒuhTËb—¬œŒ‰¨#Ø €é‰Âo¿cœÍÖž“΢®k‡åóJ}=ëÜŠû²¡ ÍfAMÓ°õ‰ñxk«û8r*ľ‹mëW‡^Ïô@õæìšÁ¯zž´›3*á@°É¨ÝVÛ¹Åp@øOPmØkb¶_pæÎ—DÎL¸c³vémqüõ[ùu$ñT¤fŠè†Ø¦voâÓqÛ쨰‘•…ñŽ?hŽAŽÙ+Ƶóç£ê'$ÖX›è›v-V¡ñIÄ_®¯ç&äm|3ƒ4ÝÖºÖò±¯›X8±Ü» ¤„éx4‡íDì‹Dvlºª]Þ N§Ð$.¦Œô»í1_Á¡oÏsàxˆR±:ñÈÜ’;!2õíqî¨u¦Ù²ûî$º”(tuòµçUh ÝëÇk@.‡´Ú? q|³<Ù/áÛ83¢©Ê065vg2±eeÓŽæ \Ž[q]€«âñ•3lJ¬2|Öïin俢KŒxŠ$í z´ Æàí2G:ˆnB­Ç·Í.Sˆ¿!™4ý/uÜóäßÖqÿ_™Fƒ(mV[)8 œUÂbôÿö\ÿB–š’,5O,5Ÿ€,•ÎVü{²(VF–*þ'Yêd°šìC%êÉû "Ð …Ï€QÈ:õÔL7åí»ÖZż4çQ"«sMæk‹M‰ÜäÒ©'fYÅêkÒØŽ¦³ÛVôLâ°ñÑÄh¿Z‘4×\š_àÃ>¼mŸ©Ô­°Æ$ø?UÕ×õ¹Ý v¿ªO°è^ÚMÌÒ4Ê·¬"8Çnä7xÑE?ùø’àÊ_¾ð5y}â²_}C.MX7¾{§Çÿ=D,F›¨ÇDø‘÷j¦ÉUÛ¡-ñý†ÁÔQLÍã×Ê¥ð´aPoÒ¯†0R©ðß³•k{µåDË´ìóÑtŠ4Q¨d­iÞ†Ød·Ï¯§±hÄaGØêVÍÌ,vVxò@ÖÚ ˆ¹i¢JM…~…žmÃzÁ©0u¤C8'ºÇaræ¸g°·i‚·ªÝW¼ÈÜÐ`c»ÜCº¢Ò–ªnc7ð”j@¥%¸aL:µ¡`q;3ÛØM„©ƒU#âÉÂHÏÉ<ƒ°0ÍÜÕgô‹ý¶/;h®Õ0]8×Nž+î¦nz7!U¹’l½> ‘‘DXª''a„²1ê,§½æzõÅbò"xÐlçë B/«š´2’zG>úqüú8½·C,m‘Ñí‘ê¯ÓêȃѼaìŽ*‰à·õEbíZ²'ĪED.Ö»oaÊ¢OUrC³MCeZIM§H7p…ø‹W”éèßý3ŠS£D¼Ç{ß¼ì¢üÙÉÙü•`ÇÁ‰ ªÎÂ8±5 ÒÇÐD‰Cå|[fo’=DJ"-ž~´§èqCÙC‹GCƒ¤6,Y}ÉïOad¾#¼©„ý5MÍ4Ê &lì]çe¸…ÿx@²øâŸS#ÇZÈæœýG'h§ÎAØcï°L¯[DàõkÍ|±ãKPe,Þ&öW¬¡_æ‹Ç39Â,éþÃGëºÅ?vÀ.>œÑÙíлf¡X¡Ð"ébÔϼK¹ŸdÕ2’¥ŒGuý™ˆ›¹§Ë@…©›¢¹ï±ä!S?V=úß9‘•UGÔówì¡|îöƒe Ì”ÍĬ¨uʬG¶•›&Gä"Îy€ÝÍ÷õ=´³. Tè²4°â…ýµuyÆüžT¡ ø“÷zpT±àßoª)xG^€m×½½Žž%}MÊ$Æg§ÝPÞÔ=ªîü¹;îwIÚt+bA“Çv¥È6rQvNÚq0_4o”tiz )mËw${$§À³éòƒa¾Üi±ÛE5_‘¡j|¢ÊÊïD:¥ÜüU5GçÜÈçøV0íæ©§¹¤øÜØ¢Ã_@¿®Â}ÁÈj~(#¶«/îA•¡Bˆ&¯A“1gix¯ö¢ͳsRÌ0{#Z˜ÊÁŒØsæ…¿3(¡Äꉘã´Ñä4EbF›Øï°P¼œ*cBôHôŽŽýø dÍ9³¡‰Õ˜úž²“÷èñèe‹JZ¦æõT]ú”$òi&ôÐ€ÕÆ3oÎgŠ 8r¼`¸ì©€aÃM³DéïP/%}"!#ß§¹!i!BÉYˆ 7¥‚c›îIÕ-è—DQ,Á'š8{Um³¿ö´ºZÚƒp2³ÌŸ«üÌ~÷œ]4¢0ÞóYsi=@Ï CvúéQ¥Ó˜`Ьº‡ˆ¥~Ð÷ ðâCMŸbö§…n$q\Ë ?O&ó…™&į°ç89q•éúº9°èQÆzäÌBY¶fe˜›Ý y#Xz•ÂS{´MÀèÛ⨡¶Ì¼³†¶›£f&ƒ.ÎÄÞ„•b4¢”ÜêÞ³Yœ–<敪@,¹ß {X`úœYþÊâtŽW$aºG3ˆ|qx cówüé;A=íï&_f©ÇîaéYÕ˜$ˆx|¦Ÿ¥M*ù¤$G,v A]J2d¯‘Ï#Mœu‘“]ÁêkYbÆÓie™­Œ)#ˆ¬ý ìH56VRz¥èEuymƃŠÄfšœÚâ¶:ª•Þ‚h3 bQî€ñ"[1³ô%1G—åØ$œçHÌÕ ×­<5»´º¿Ÿ`(.)“Õcì8Mq ÿÿyud'¾_ÉçϬ’nÈ·®ò{;br=¢S6mÈ£42áŒ2辫MGŠ„ÊædˆÄÀV€ÓêÛ_61ý]’HÍÞ²ú°Oã·áÙç€ó× `ã?Ü|‹+·Ì.¶z;ò¬ù¸Éó#kß7ÄF3_0”›ÙÔä”EÙöªÏÎYˆzhjflõq?nC_Þ3—>Übòúݸ¬™–"U Í3¿•‚´lÍGhkJëCq½ÖÔ €'JtýYÝ öáRÞž§d\I’OGdé†t5údÿ¸†hã\³&ÛnG-õœÝr)=r\Å¡Dúº»æ·¤í“› F È“ù6Zr”1WñÚðÒ‘rF@aªزßÍȯåƒb¡È“…‘&ÛÑmk°š:©X#-Šw¤ç€ÑeF*ØÔNqëzˆlN¤É„¹shAÔ}¦† rÞú¥¨¬®Ÿ„q¤OkaKœàŀʆ³ìf² ^Ê8óŒ ŽÛ,ìÃÉ Qœ(µGþnYŒ¹zMMëÃb ™U´?ºßnÆ»ìþqÅýZzxÈÞ¬¥¦O@ä,À²‰ ú"Œe†$$]­®ö§e¨œúׇ§Ðˆæ_Òç'ÆdÝîþ9"$ûœv1ïBlÂÍñVÙ«ÊnÓåÃ;qø¡4wNä­Ù9DÃ>ÆNžƒ7Rÿ¨n/Ægd`Þú¥šì@o jlIÏ8wJcø-fºòD/ôeûíUM÷°q+|6 OÇ- ßžÐ,Ýf‘ôŠàß‘lú‰§EYD_õ˜œÙèè;¬Ê4Ħtý€ù)ìq«o»ûm=)Rƒ\Å—mÛ=“@\¹ ê(Žs“VßÍLÆ‘5ùÝû&Å'ù®ÌJæ~v†ØŒ°îVØŒGS÷.†ØÎgÆÜ1AŸlgPázk–ÀzדÒe5ÉüŠìLê-”õjÝðC·‹°Ç>ñs‡~«A¾¥c+·ÿe×Ý5–l¿ LòR·º%Æ­&çœ/A‘ì±I6ðÙ_ŸS§¤Þ÷~»³ïùíÎôµtuC…SU§zbioÆ|‘…§s£ë|hÕÞšÄh­g6\3:jvâxô†qFÔ—Ç·-µfÁžÚÖ¤0Ëüö¢@ÛZÔzV…—Åe•G7X8€ 5ÕäÑŠv», òçwù.Fy³›|ƒ!Êõèã¯`KY&wË‘e¬‡ï.Äy§1²ÑÑχ‚¦Æ0Àf#—© =…DÕä˜söŸøU%2¯,õ÷„R^©‘ÏuByRЈrâÍHÆ&[Ã0o‰¦!ªÖOiÿåæ·)v «u<ªìµúÿÆJ Zìá}lµ”uU^S³”õ“mÂΊVLšPüõ3DO¤Ç`[öªVuÁ}Ê}ZjåÖŠ&9žè·*;·BÝ{IÁÖ(BÜ.Q1ÙrÇòÎ lìÐæƒÚq€^Ô] ´[Îã VÕçb4B´©ã§W¦lÛ®X[!J2¾<¸XDÎb à eÊY!Ü‚šžb ‚ÎSR|º>(¡¿nR¼ ;\d3‰ŒRma4Û§PÔX•Kö fÄ_ëzï¤^˜¬Û•™Î;ÔÅÙ_xXJͦ:iv°¨k Ê*ä&ô-D[4Å^Œù‡Äµäß$®ýcÖ—¬áÄî ×.[¥òAÆVûßÏï_ئ–À6éئL`ËÒñJ`K=-ÿ?l_ðS œ•©ð:D»&®ömªº|güˆ¯ÏåÏþ-ÌLJÞ7’Å÷BP=Y¡ *K¨'’£— ãh“KEÆ­ìö‡TÊè‘>OãíúÔ°B'|z"I"$±«Ïよ]æ&CzÎü*ü ßœ “1ÅI“™¬º¨·ðÏK¤Ø0jQK§-^N4A€1)îª$ÓT‘­“ác¿õíF)n/2ªÎÝhÕŽh,I;çû¬ÆŸ†;DË:æf4ëÒé)æÒ%ÓFõ\ #”—Ýï^0šÁ½k×–äUr}?ôùT³¦~ñTa#Œçî§¿ÕVcÌÎG9™Êìi¤dÃ¥¶m5ÈÝ›Gµ,d#Ö|š¥‡>Ò;Ò»ÂÝ- åx©)5Ùþ–¦-|°÷¦ã röBÞH¹Ñ,0H]<Þ·ƒDn`æÎåŸtM” lÄŠŒÝ¨8ûñCpOàè2uÊK±Í²Šh ))Áã°8 ×pÂV†2)’HÆ“žÞ³³³Ôã6‘ôN^|;üʵb> y& EHá<}®sœ¯ Ãêu Œ6ÐfÒbeù¹ø¿g|Xqé’­½ÛðˆÌ!H‚L„ †$Ψ_,¶žåáôÉE Õè¼ÉxaºT9‰4–cvGbŠôÆ*!ïþ9\pL{E“%ÙºèKcj½ŸÌDn-)åùBŸRšåÃH’·Øö#¸pÊL,uÛ|L 'ÂzwBâÄ\± ·–¾ i÷U^¼\¥¶ÞZú©NÞèæÍ ?$hñ0<ü9º««2` 7õ°ø"”¼^æÈ®ÎÇO–NC¹8äú°o$M\ g”9ˆAD~ðXdßìj™ 5Çj¦Ì‹#~·f~±nÙ:’G5.¯xÖ¢{G‰³1çi±³`øl¯ßãºzTÉÖâµùh÷Öj±)Šƒ%IDRn’µ‚<ˆHQ2 ÝHÂÙ ¢¼œïf´‘»Å÷MÛõ(Ÿ‚·¤Ìî…¡m'…Xès™y›5ÅÍ_nC<|äêæ>Û yâTÔ™Ÿe]y¥SE*yv+ä Ti”g(y| ÷bq<%fón}æÙh’¢„WßN]’aFOã= È©Ê/¿go1ÀçWP»®Â0 8núkó½;·kŠþê´ïûG…©2’!²QöQ§wUH<³a7QºËÆ['n˜’Uɯ}jÊêÔÜJ¸-go†¾©y ¢Ÿ3ñz,aµ!ýÛ:xs`æÁ¾ï21àå1õ¬ò15Ÿ=LƒÔ.p˜ŽH„!3*Û+*=Á¯v~¦&/TrôÌuº¹Òýì;Wÿ ÛÈŠ•©,0ê¹­„ÓWzôÕ*˜}©hn!¤Ž(–Ëtfté'2"TÀÛuÙÐ â5¼zB™ãÅK™ØöÛo|³r ãvƒlPa¿zÚ+ÝÐTÂO÷’}‹9¿5~®ÒÓ‡º‰@xÅIo1×3Yùïåȱi”<SÖ0Ôa(ÞB–¼e±pê€öC.νEL[‰Ðuüw6ÜÑx4xÖö¾'ihÌ>5°ù°S¯¯mëmIÅØžÌîeDs§¡o-a›GÎÜPÚ\=ð\ 4¶€9VrUï(eÑósïêÀò™ÈÕj×übnœ$ .‹x[t‘™Ñ°v ÿ1ßs †E=?ü E’"„¨÷•ãçybh­"OhÛ÷^à Ç9Š™ezð^è+û3¦¿¨z’¤:ãWÃu KäÒËSžwYvõ3ñ§µÐg0³­c4,^¿óEã2sl»ç¿<ÄõW¯¤V‚Jˆ¶õÇà‚i<ÃØðãÁi"ˆÛµñÅ"z¹z6…*.u™µeV†mÅ{Ü%fÅ//óü[è³—+ 0ä4(ôŒë´<íœFc8:ûøÜoÍ®]@«â°½UÁ ÁGÎv³ }±:ž±|±8,*ëvz¸¹3mZÖ³?¡/oð+Ä~À± ãÙ³ê˜;²w´Xz)ä Qtnfr" U-㽥뙆$g¤œr{éŽ<\Ó¥;ç˜%ß´J ´GDpIÁÀ ”9Mÿ‰Ž²/£ÒúzS–HÚT÷#ÏŸTu[Š|AíðÞ8j†  ),ãoš,}füÒ¥öWô Èwn]éÅ+&AEϼóüv±½ÞGíU®´¡CÚúIñãÈ` DÁ¦.4a˜·Ó7…eI´§BYK—˜ï>ÈÚ„°4àóÚ`o³p½Ý¥»7¨k’õd°éµßH¶\FÚæÂ’k*Ígt„e2¬T$»8rœš±O¬\+¨¯eIM˜¥‹<ó›©Zi>9·c#)î µ‘ICßËÏ|^Ï̬²ös+χÐÖ‰ò<.¶Íg0„S`aWè·Âv™5K˸wJß_ðŽ¨ o—vª­ œZ˜˜ ˜&É 8q¹ö$ôìIð0ÒBy½Íç-„¡ÒÚ—ÅÓó¡U·ñKÅ-Êì=Ñöo}³^QÄ#£.™ÖÊüƒÛ¢/.yĄǽ!N¾+“Ê­l|®ö™²7ˆy熰ëÆÁXjå>Âr"9 pc›¾¸ÊÎ×\"ò©E¡oQYu­‚<Ô[0§­‡õ¡Á´!6Ö°J;a$¢¥;^àSÀ¼˜Äc_(‰úæV¿5Z7·×b_ÈüÃQùÞö[è,Fï\D„íÛ´¸vlÏå:„åWÄ ÛeÆ€9€Ù¹«¾†×‚…¬ZDe±4ã‡üØ›äfT‰ü­„°VÐ7ƒni[üN×] «MTTó–»ÎT{RK+›Ýâ.wpLHNˆí]*bÏ®æ˜çf›7#‡3=û*¶UÎâá„“à—«2¥]á´§Š~û`Ú& ›1ææ†¿hìøîœ”çÇE6Œ»Ì`2Á„zîìeÖLý·²º¦cQF[OìTÕ]bÑ!bëÓ;ÀóU©ŸjBr9!{òWÕ–]ÑMÛ-övb3Þe|Úx$aÀ†Ó~Aj•—°?#€ž8'vFn¿%µu#Y‹Ç§ BO~#åål!·(ãϧd’’w±„h"ªô·ó vk³´pz*û¶|)í!g…±Ä£ùä™w–fpZ ™:[?„þ¸L/bhu1æe¦®Yü%±V3ó©-Ø¢ÀCUõ¤o¡9BÐ/Cí ZRtšuJ)¦6.³@+=)² Åk Yò—™d5‡ÿžHnQ‘áÂ- Mqÿø—7vüvM´´Þ;ƒ»%aEÎû\´?úõü{)6¬œÐ*E”Ïé¼ý ûéR³›åXÀ)©XI)®òA_ç9sÚPήõ ˆ)‰—dÀ’J$ëuR!԰÷v}¬~nd¶ùaÉò’ &H)ç§tÇf¼÷p}@F êÏ&ŧ˜?= ê£ã;ˆcªŒ]†]s×.iúU[’åL"ž?sä°"ØÌÅÑå²:§Öö¯ÿ¡åË'Eö=X»¹Ì^n+²·BrK ùùgåAú¶3í¤dúZfêg¡š“s¡§\h˜˜; ÁUFá’:vsèÄ©B½ÐÇœêMÎχŠ×ûÁqY¸Ú[m S ÓXdHõ¹UúÔ¹šu?Ìœá˜.,u!ÎLäE }ƒãŸ&N&„ÆTÿ³ ˆl›­TW~r^î¡hs<»pGގϹ°•ÓÍžÒ'o"rxá½ÙáU= GOÒ8šÛ´úŠOH“Ìg·lÃM>µ_Ô íL»å–_‰e¢8Åv»÷ÈœÙxov-ˆb¢À5uÿ?ŸÌo3HléDW„¾ N9ùº2 =ÿŽ ¶ÔNœ7&._â‘‹LšÅq½d½GØ[¡‰ RXÝeÅïûŠßÒ¡Ö”lz #ÓId¼äšÊºžl\A†Óö6Íw=Ÿ5¯6ÌO!ƒ@4Çžgn–Eü;¯-¥wŽ´ÿæ¥Û>Š\¡Â˜&n¬l¯›”ÌEÚ0ùh}.LÈcw¢Ñün 3™Ÿ9|ec"%éGã9¤;–C“ÃÇ ¢ô+Të¯WËqÀ(×gAøÊ)¡½Z™¹ÔèÝUG+v #¦C±O¯ùMYU‚rY­Ne8ÿk[8pz2·«¸äµŸÎ=’¤ )YI8•™Ô*‰¨Ž„Ó9‰Ì÷f OŒtNþoôè„ gLy4á˜CgÔ`>ÚU”гf•çÀocw²Úk "O“Çðéa«½N> €ðÅLwµh#×as8ªÞq¥IÎ[fü'sõQf¹ƒôªñº@ROnç™?l#Ì͆¹‚m$µº ‘(2RØòŒß„ºLšÃ“Ý'_9†,jf׿ IŽì$ ä)ìtƒÆbÆû|µKÔ'ß±T^Cª)Ѽªƒ:¢Žåh–³’–ÂV2ôõdgÔ…ÑòîŽ\|šÕh6ÝUt­ Ÿ„¹1ýLÑÅÝ^1A×Åêª&"S_ŒÄLPÏØ¶§ØZ­$ýÜ0?h$¥³èŒú¸¦c×Þ—†ÊÒc÷{¨“?O·("ïÂx¡QCÝÚZ KTX‚*!Ã0jK¥ºgtÚ: Ç¬™ŠèBàÝŠÝË=£ó™Êm²uû~Ö“NäŒA”’CަšNh39¿&šÄê¨È'Hôi'{$ûæ¹aŽØˆ¦êØ¬ÚªÝØâTê¼â*¶¬Ú¸%eJ,˜h™áhÍìD2Ò4)DAd¥´ÏdæÑZ*ÌT oé…Ûgf‚X¹e_á;ÌvÅ¿¤Èò&û'÷‚ŽÃ,l²Vœ]ýä †! ÔÃäfAD†>¦>Á¥im÷2ã½q^ÛÇ {+¨[ÎÂ.®7o’jYO«rv[ÐÍDCm˜£Ð2cŒº+‹cǤï˜w¬§RéCI9Ž.ã(¬E§ßz:;,iÚÞ°«äF¿e4»m«Ô°d½´áÌG’­ê‰I‡Ÿ**ayx4íf 8‹~“HW0õªU  rš¢¹FkRŠ$Òc°t¸™­F+L…P¡¡ƒs,¸‘ÑÜakÔg¨ßæØKÝ"´žŸ²°ü6ç[4ìVC³4.ìó«¸9¿ø ŒóA#›•¢Ý ¾‰­"ïtÛ¥ßÐÒ«c)ÇŸƒòb[„…è{lÆuTÏÍ ¤èOfå®Ê=‰öj~Àº>Ñ ãès;¶¦$¹Î8ÄJ[¢hsþú´~«34&‰/…Lzü «‚ ‘nvâðÊ9>øZØŸ€KGbž„q¯¹]^ÜñÚ¨ff×ì&ª}§óÃvRs²‡)!WP‰ÉÎcÁªÉÜä6ånÎϯòm×Q±iIë®P±ªë™ÎSû©IA e+sJMi’ZK¾8ŽO®Îí±ßkgF™õjÅ>FǨ€Ïú ÑüºµN³Ç>øßd>š‡Ð¦ú—´;Fïõn4\üS[ÎßL­[ë4÷üÍt18M³è?äo¦±çoŽ¢ÿóxå ÝÈ;¹÷5ºÎ•ÌxÆ•šÒÜùd@ùöŒ@±CVMÄ7›#=)‰8Ýø¼ðÂ8?,o1K¶¹ç{gÉü¯ÊÍ­r“e-ùj?Ó˜øøYM`žw³{Â¥LºªÏK7غ @†Ê[ÁxªøŠFjŽc¢—¤ÍÇY#A&„D²zª Ƹ9½m©,/’µŽÖÑŠ)ªvd¹•S&‰18~J±ñF¤š^Ӈì)_KgY"#`Í2C0ztéõNázMpnž=`ۊɘlTÜýú"?kÓu;þ>ÍŽt̾½Y<~Å4¹Ï¦ò¨ wê> ¡4À“£G@¬I*ß™õîUýF졬<&ÕAîr«€UŸ<û¶lÿØKƒ˜k©èB|'}ª“A׬äøòµ¼_lõè›7ü&$’z óÅþ†0«Œ‚_»pg` &Ó Ij¤=@v…étÂʢ݄NNU§•€êšÕ‚½oºIöÇKú@lÙe?©Ô7„ìái¥rN¶Cޱá%uô¾eqrkö5’9¯M&zÓ ™b‚®›­ü/„RŽR’kþuXh#1ø‰‡Bv^‰˜«Â¢¦RÚŸ2šXYþQV:±†^÷[ž>€ùÒd£‘±k?z"6Aœé6¼¶c‰z6Ä ‹Ìjÿ¢»Õ8³ðŸ?Ûì½3¢ŽˆÛÃ)£½Aǃ5O^Õ m@¼C8¶5•ž›eÐÄ¡/?¢k¡òì)+šÀžRÎ7>ÿ%i ƒËL•nežŒd`‡ËA.ò ºÃÜñxMÔV£ÿÿ¼+,A°]ÃdÉùæýŸA!ªÝh€§lQ½pƒ¡CÄ’N‚ÏÛÙÞ2l–ÎYç‘ðÎVÞÓÍ[$[Ó¦²ÌuÉZhp‰Ì£­‹C~Ðä4p¾oö0ÍCŸáckaÀíοœD2meƒ³:yqÒ7çv¾_Ò³-™þ®Qš0 ¹S82Úµ”ÏŒ37¥¨·ª#á´W+—ÓZZ ‡dº¢SìW¸ªá0<:òrGÞÞÓQ®NÄ·›ß½à¾öš!åV¨°ibÉ2¶OkåØvª_²²‡sözŽdv=#Á6ùh¸z´™ñ •EÞì¹ ™rí5ã¾½ÔÒÇ6Œeë¹o4½ÕÅæ@Ü7B*ö°â«îjqªþF$6Z¿øDÂy4œåÅ]b˯zãÈ_Šîàn«…7–|g *œÛ¹g½ N ™\¢ä¿\ Á¼O<§K6‘±]M®È"ìd Кý`wÕ$J"†L1k—i¬Oø©`-ÄjTçsí@ÄJôlá·cA¹fCfÛè²á´Ë0#®‘¼Ö¾Á†Ý¶í¤Γ»' X¥g”f3„ÙT—÷¢óPîy„e]uŽîa><zšÊ“¥u¸#PÓsžøpTî㙎0½J8dsø5’ Y¸¿ÝÍbûÊð+yBKéGý6¾fªÎ*¢ºPÅB3”O„6²#{H¦b²ajv÷²xðkø# µ3ˆUM e»èóÒ˜ö …õK[ÛþßJé7ųâ;^Ÿü§Mž¹º³îªshÝ=êÁæY@¶À&Ä l¼#×]'³‚튠‘&}ágŒy²Ì¨ rgëºý2œU¦TŽôøª±•ÌڢȆCߎÎ|'ôÀÂ|áˆ_—o%ÊÖ+ù=$°Â±…`õÛF=’=%¼³%TÀqt/Jv¯¯’Ñ% };:7.ºézq•¯ Ç êÑ»ScjZ?1›Íå.yÎdÇðÕZpò¡Üe×%·šP².Ì&˜­ËÀ„Óä(…Qð_¦OAše§LÜyñ ²!ð ŽÅ`²YØ“éÓÕ2г%éNIÕŠÉ"Ý»îê#j^êJÙ ”¦5aˆkT¡0;¹Œ öØBÀÑ߇É2e=‚zõéãwúî’¦ZVl½aÓ šÃ›E—âhàô²²Ý fHÏo6¬YUä¢On@ò×b½ÎH|Ô*aQ¾ÉƒÓ‰íÂP˜…ýú0 E(e1»Ï?7Ô §¼ýt‘[°Sؾ±“LŠ´äx¬ò«¶½ÏŸá¡äõ$&¯õÙuu}1ÿÛrô¡`޵t,¬„ðÒ»®÷ƒ’§J2boi±oî_¥{‹g¶Ë¿`êâóé’Í¡îßW+Á‡q^–‚̶ßz¬ŽD Oà;݈j¶˜È{%Lf?É,Œ ³nâ¿<É7¾ù‰¸Äoz}_hZWª˜šñŽhܽ\€V°¬–ªC¬‘7ÛuO}–@r±²›¸‰ƒá5Д×^|™¯#OfÂ~ºmchõ´”7§öƒda:U.Ç7®¿x{s1ï]=-u’ùyÉléJ°¶®xËYpäìÆ˜ýcЗX;SŒŽÉàQ¢3©´šâ)À)ð.@0P[•rËZ{š•š"ÿª½ƒ¸Q~\Õ ÐðPž$ ™e¶8"Gqƒ¤|½6¡™>ƒO@|L»d]¤¨-¹§+>V¡g°@M4b SB¤-רÄS5HÒ%kyß½˜‹{ïÝ Û+ž¶õNƒàLÛä†ùªìhGó°øk‰0’´äcbT¯MÅ/DþÖÉ TplFÛšIl&C>-®Þ‘]Šâ†r¤`Õ§ 41ÝSß-¹ü‡./RŒIþ9ô‰û4‹3Ze/éy©ƒ3÷•gf o÷oÃlÊ©xL(Åb®Ô­Äù+޹‹ë2$6OÙqš± _·‰wëüÁ^̧K€Ml¿Ñy`ž%~ð.\üL@§š ö"`»äD0_aÉ¢fFÙ¤*VÖé·7ÑɬŠ+/†ƒ‹ËZôTv?‹ÿÅ´˜Øý >úò5¾Ó¶ù•àUñk÷<$¼AØÚ¡xrw™¼s÷ÅZ¾©|*^wÎíýG_j´Ãá° &š,Õ=ø Ño(5,GzM¹tx`Ë›»v¥“ÙR׆1U~~ðùHv7ájtÇ}Ì ;û¹‡F”2ÈÅgŒzzjŒÚÊ\Ô$šq~YbWmúeÞûI›ue9€v½‰>p<€ – ƒ4Ëüñ±zöˆ ½ Œ<;èÂþ›!ª¥¶‘…ž {’}Ÿ8Ö\Ö­`zS!»ÆJöãˆa êb=³y7ôÁ‹xrB;ó#ÚÕ }Z4Þô1v]+w4Ûf+¨ dd²X^Žy3µÆ àa”}Ú¥-YîÝtF‰¾¯è9–_2Ѫ:SÉ’øýªŽ5‘³Ê:éòG^ºpu€+Ën!5ÝJ뻉­^Æ@ÞÀ'¦sÇ[6ÞÑîò Mý°|ÃkluêÈYUg†´)™(¬çÜÁ‹Ã³! Á†ƒkÙa³kkH”½`8¨Áã«Ç|‚1m¢tB¿«i¼´Ä•Iõ¨þ‡Fuéè߆Šÿcuå·˲¹Cb©ñjñÿ™Ô¿‰­K]:îƒÄ ƒÄy–þ§ ñ¤'ùIÿ×üWL/ÄÓ9¨+W£K.3—z:¿€ z%7‘î#y؉®¹,ÕOýH–aäÆƒGXÊÆƒT}Ì–)y3ž_Ájz;Ú(ô•ç2qíÆ÷vthq(¢ Ír¤ôïì4“X2—ç‡×,¦³£ ´(ú>¨—gÝ•ÈÂÅÙT¼!cr=:”ž¾AS¤HdåF™^Ö4³7äÍŽ‘æ¡/k3?¦¬¢hŽy±ñÈö<ó=FóZQ4² Çš]N{Q¢vFÌ ê.¤ìÕ¨˜/­›´±TYÜëȳ±ó·­„r¥v™‹G™bÿŒ4Ñ6(v÷¹Ò`i²Ê€»²'&†TìÈ‹ºÃ^9U™[È#–öØ>îœST”8%+ ;B%,í̪ŽÛâ² €™ö‰Î ¿}*ÿ›ÎR¢ä#r,w~ò¦?éF3cTrÌ Žº1‘“™*A–iPmwôáч|Á„ù˜TÃPí* `ðX‘º;yFŠK=ó€3¨}‡bØu^T{χÚ5ª LM,´0ˆ¾D™6Ò~ç˜÷œôr\ ‹Óßšy dœm´Df¢ïó'¾[·ïîêÉÞîA3D: Ö$î"&NóíWeYÔÅî¾:¶Ý7¯á¨ÌƒgcY†–Gg½ÐgdˆT€ÝŸ—õ÷À+›Um9çOë úg¤ùeH:áӛ栤37/‘)¾xËQt=Ûò®W¶¥f3–æUòAý˜åªÏ‚bâÄðª1¿‡fûØ4˜Ïêy@²°³™ÀÿjOë!¥c£+B‹§àDkÃ_Å*ãTZ3µÆuhW Ž öê«ØÐä‹ÃhV(õÕ>Ö9k7#4Jœ2ãT/þ*Hù¥ÕgõÈȬ|¦Ôj¯Léòs²%-Y1ôŒ7,¼…žñµÂÄ‘ Û¦x;œZ_9éûªBGÇ$j!׿‡vFTC »]S< CÇdÙøÖ‡tÏ9æP苬Y- Ëž=@y#óAÝxn¹•+”ÅñõIÌ^ãni“a‰Ïê̶ab÷™0І%Žwë;Ú| ¢îøÔñÇ%U8JøÔQ1-Ú·;å:3ð©Nˆk] =ÏÛeÛ6Þ²?Ž<rÀ€•s XÓn?m»Ö¶³{v%Ü‘ÍÐÏÞØžNj-Æ$6ß =a‚[ü=ýuf[¡;T6}ì.¬²¡ÚÐ&Õ™Ÿhus¬— -öê4j€›{·f6'kw¡òoÚé3:è,äÄSžèƒ©°’ŽÃx­m\ÓM/mL•í* ߌ¬õHU(yõa˜?ŽBªDöX£ØÙÈLSr_œèA¬< $çô#i¦npŽk…×}³ñá=m9‰(ä‘3¡ "izýNn$È.,Õ*öK·#ôƒÙZ«÷‡ïÍ1vF„ެáóÆ žDÅj+Pûmê0ò 4e"ù9¡Ï“±[m›õÐ÷gŸÚuª’a03dxކe‡ø úm8Ë¥óA*?¥'$öƒ1Lï=='[”>ᾓð‘ ÷ÞNä2·[Œ¼PîѸª—Éì:ùÈ®|îsÞD×<\YßVÔø€h÷3ûZ#‹ø´1cúyÉCM;5sÏ9 È«4STTÅJŽÌÏí7Þ2°VÆÈVŸwŠù‰DMhÍ4Ñmó’íð„ðizYvDU`Mþr8e2îµþS­”OOXt-Q–—mÜÃA1ö¤êŽø“—˜ø“Æú|M$Š{òx&Œ7ÁÃ(§©„>=¶(&¬~Ò.éÄÆl=‰“ D¶Sv_¨?,Ÿ†²Q™—ýÄzPç–ÄC~ö®Î·w’àJU°¼¨¶ž¬¹’óŒ7GVô4×ÌõKG#×!;†ñXF`¬«û¥2±¸°ñIsãì¶¥‚§ãÆ OöÒ[²£ƒ!š·\ü—*_r™¤ž¡]âBŒ§OZËe·z—Àsʽ2- öôÒ`à jÒNßëÓ3Ù½ž9‹ÒzSë9™\úX.„ËÑÆ(£ÃÎ FöøÔ×͇pö.²ÂuóíÆ°šGe5\sëY$>^ÚX¹®,ú­À£)û^#¤›ÉÔ, ɤ±IÕ&'Ôp]9J®yjóþ:_àšý4Ú7…š*®¡#flwÚHÇÝÄ>þrB½‚­˜¸pÌí®kW «ù¥¥_[#×þMþ‰ßÀ<÷²¨G~ò1Ë:‡‰tYÍÞ¤Õ’KSûÀ컫ìäí&åÚM?ÓW€ÐBNB_“Ï^êÝ Æt‰$vuÍ»ô‹w0WGäÏûÐóUÁhcòÌÀÿ- ‚ŽÕ°ZeÃá&Çû·ïaŒs¿zˆ–yÁv´vpTr+}ƹÀ`±žZ•µ`‘lr+ˆF³‘„×Þæ•€†`êГmæD'~Á$œ%³yïh‹øÂ+ØP"%g¯úŒŽ\—ÕÆª[Gؼ”c½Òz!ŽtS®{ÿeˆV‘r’bë áÌûr:;?Ó¦ï<‹‚}b ¸<Ä?í‰ÐCKÇ8z’ç}®Ìæ?0 ¦ñðRЙÀåÌ`ËÞöÛ:öö¥ Ê-œ‡Ã>âw'Mg·BO(æüÒþ²hr‹:öÚƒ¸‡Þëq̺¦ ¯—†/Œ2”ŒRˆÐ0]v%µ¥QÈå¶‹§Éê9‚ò$Áè´»bûlySÙ©5yê²^ä=´Š‰ÇÑð"p倛I ÏîûˆÔÈÞ otU_Ͷ—t‡dEïÐU&½/|4þf:ò­©»^ÔKx?æmOêñÊŽ¼“VÊé±vß?.r§”?g|ˆ×CÏýj¤GBß’Œª C™ØžÉ×Gì%fžÃïðÎe-\S§gÎPâÆ~)™íþËØ¾ËÝLê¶f@DÈÙU‡pICè{6L¼ã¶=µ]r]€»†ÿÏOdˆH 7Oʹff3?VÜ:zejÔè_ÿ’QO0‚+÷0Ü­ÈÿyÄÄ”ÑíÚ .“°D'zY‹±´j "Éwùqì+Ð$ÎH†:UÞ}>jû±›sì$Ê­\mª¿ÈåEvX½ì¡.?º~?ô‡éM‰\Kye{Ï6JÙx_‹œšÉ*.‰ îÝØòÆpjzŠRܾ®ü-ÁT'—4¦¶“Rƾ|ïßõ[¾8$j}çbCÂ0~C­˜õoÉ ÿ•^ø¹Ð›Ì5éÕãô•î‘‚„tnÜtà‰©uÄrç½øéj”<%p]°f´:ËÞÀx™­Šï fŽ=1@ ™b쎭-à j{UÈ£F%Å“ûYöWåCèË—ýà®4Nå}?©mÍíù3ùR*ƒÈÑ)ŽCŸ_G ì¶GüeW)E¤þ Á]l烮²}ÞÎö½óHQ­„s°)¾ž<Ä,IZ—žt†—&?@zÝ3M˜ÓhŽo9fOôø“Gÿ „äÆœõ-¿7üE]Å—Ag¥ŽXt<57¥²Í® Êʱ&]ŸnkRÈ»4BSn¢làNO=ó ÍqzÎïîi®ÊšŽ€§¶a·Ù Ùôû°À²¸Ìm¾-dѺ…þ¶«TšfŸ3!7ª”POÞ‡ž=:ÇkœÕ‡¬¶ºAµL[ª:—x„#ƒ•ªML²(„±\ ¶tºÏ©µÈ^Ôänny˸ž;VeÚÖKëÍÇiTp5düãtÂþ‰Ÿnn=øª¯ÌˆM@Ð%¡>Q–‡‘ËnßqéQ= = ôW‡cŽ\¥Œ8¨ÜJ™[Ä$å¯q‰hiýcPYƒÙM­9Âw¨øõ¡g(àAH•ƦvÝÚ¾v3+ÆÅI@èi1 ÁÌU+¹ì`|÷ l/X‹Á¬<5ØitãrÉkÂÎ4wƒEii>;~ݘ–s]]¡ "ËÎoè 8Dg‰½æQX–ˆü+ÝÅb •“æÉ\Hʈ“™¬tÃ_~r„ŒâöìýM\<ä–;¡7-d•áÞ·ð+¤ìn9¬ÌÐ4A3{0 "Ľn‡±o/Z ˆ …¬òÒOÆÌë'ü‚\>“H·a'”—ë§›ô£Ñ,ý2<‡±8ôTÓ¬ê`Õx·¢dYõ®öÔ2k2ËRº(7ÜKh Ä,AM·]‹ž_óˆN‰ÔvÖ¹äú{I&V+d`ÿšÃ…áŸzé÷ر]øž X“]§û¬È}ꑆ2ùÌÐMiúß?Ed±{QðbäÝBnKɆMaú¬§puÐ+œ Ë­nÌØCßå¬,oß!0:Gå𠣤CTš{Mè;}“+"^rÉ“æ¥b¸ì.©ÅsÊM‡u‚ÙF•nFí»ÃÊL>¡§{VïZ2#GFÕî?¿¸ƒµj»°œç,¶[‹=d¤x°Ëë‘™^¸¨–œþNêE1€Çü³e"ƒ¯4ë]oÀßÔG–KÒ!"Àù™köF dŸ7('gð-ý×0™1k/Å­k³lˆáá}ðD:·ÝivÑs;g·½L t4öÍgÏ¡’à62+tÑdº¬¯yá¯äÖ¨¸ÒøÏ?¶•ƒÙ²ž#/~æJ}œŸä˜£.Ï ûRv"ñP`Ž: ?ÕFy.+,7?ø°ÃÊVuN™×zæ@'§˜i–jW²ê%d˜™Æì^òtÅÑS%ÝZÓÇX—ÅcPø°’°Àî^PÂáä‰ éÉ ˜ R%¦ÂXüòâ»'–±¾oz×*3íìú;ìºAX›š† ÓJÎØÿ’‰íKG=·¿C. cèºâÀ!—˜0-'»è¤ñüù̽ç㯩# [C2[…v·ÎA´(TvAØPŸ^¾wîJpôñ Èâq9¸Þl3ž=´§@̱sp=~rˆæ£J`r6Bˆ©›ñ FÁœ<ÕÁ1ÈŠƒOPøv9¾âdµY˜L¾k¡@]mu…PlתàI€¸èûƒÇzêNõ83ÖXqN-غ‡¤½‰ Ç\K严$=òXhHIL>næ¦#Ù¾A„YÆSO¬ˆLîÆ¨ïjûãa5+V˜ɹÐt°%ºä•àè¦;j¡¶}ÔÐFÞ_žXF™{h¾ú’—Ÿ¥ur;¼~džÛá5oaûç}žÝ£˜\þußuÊ*EòYhˆcó'o·ô8\ò ‚Ð(ÏÍÄÉíõçÊxdv{bþmW E÷íÄê¶×æ”þ»W\€ëʃ²õhmN«Óí’²à¯?q0׿‡¿Ð»\¿ËÿHí½6búÆlä겞F¢Ânm~ÊnpŸaä”c€p´˜ ûêUAô{-}óËÕÿ”R;ý7)µÿ˜’š™ùK[!:ù÷Êp`26Ô`ÿÅä†ÔÚSÿ‹U!ä[!dipy-0.10.1/dipy/data/files/C3.pkl.gz000066400000000000000000006576421263041327500171410ustar00rootroot00000000000000‹?:*MC3.pklŒ½åz[²ú?…-3ƒI]mfæ2še[–žývDFViÎÜ=÷žï챤^]µ WB$íï?†ÿ\Êãö÷£îì{½Ñ¿î†Ïûþù¸úÓ»É?—Â8ù§¹E¸ú'KKü“Q€?Fyœâß2ŠÊÕ¿Qÿ- ÿ–aŠ¿ÇAžGø7ÊùyœE©ýx\\ä^’$a„qIšñ{I–Åêß4ˆ3ŒK“4Ç÷ÒÕ,øo–ñ¹i®ß‹2Ž1˨ˆøoš˜G–%ÆeyÂ÷eErQRæ«‹² ðo™d1ÞW–qŠña°Z‰ýG¾†A™Äü!̸†0Lò2²ŠÜ~È‚Â>Z½€›…A`œaÅa–ÙQf¥YiƒÓ<仢" 98Žã,µŠœcâ$Høõ8 ƒÂ~ˆ3û!+ \†%v1L‚Âf˜d)÷7L£"ç+Ò4¶—bÊ~Hí/aj“ÏV¯·Ò2ã|²,Ðe‘s«sµoåAhµ::žÝj8ùÏwö½ÿðykEXé?ÝÆ—÷í>lGßy·õºÙÜl~üó|sè>l|ÞÚüÒmýó1ûg¿ûg£·Ï?æÿì¿ü³ug_»ïŸ­Û‹Õ¯!þ[½èRüÏ–†÷[?>ÿ|,ÿÙgߘìûgõ•Õ°Õøì_»³ïä¾®_¿~éÈŠòñßê‘í¥Õêïì»R/‚ú{Ó×ß»°þ^v«ßÇÕïíê÷hõoˆÓÅê²c«ÿ0 Ÿç«ÿÓ¯~/Óú{›¬†«/ŽÅü@NVÿ•|z5ºÃ‹§ýi«'«ÁMaOËÇëÆÕ£ÂÕWŠÕèf´G«áEnïõ÷aõAß.J›JÚ°!zÙbÌþÕ—Vó0ÿ!´‰´‰VÀÊ´ÌÕ¿Íêß¡[l®þwõ‚/ ­€Ä6,,…—1c{†«QÁj#Þ[DöA;Ø{±ÎrðÆQŒÇ1'íÆé÷Õ x‚i”xVbÜe6¦OWƒËѾԮþ- ޼„wµ³ÚÁaõçÅvc»Àá¥6o ë0­À€S_aí‹SgWЖ8ÕcËÖU¯fWØž=«A¥ j»«F[««±A¾Ô7ð?Ú„ÕËR;¶zûÐ×[«qÅjŠŽ"Ö9aXnÿuÑŽM<²Â7¯ØAqbØìÞ¨ÐÎiõoÏ‘o®†q+Žc^XI”óÀ7+TbdÄ7á¿”aOÁLºÕçÁXí´=u6 xlXhë3£¯0¬ê}§m>v>¶ÿÅ q«§õ«­ £ê&Nض”D»ú·ÏÞ»èÕ…Õ˜¸zo´Ï/Ùºt]¹Ú‰0©V›ÚF¶zR ž‘!p'œR˜rc5ó}ÁjEfƒ° ,‰ÃÚüœ‘w ;äºèïêCœbÑþòOWCK½¶šÁ˜ãÖâ°³ë>ìmMN*ý»úŸÕ_Cœ`}ŸçÓ­Ö=Æ¿ôÜ~EOáPá«Ùevõ9í KúnÃðü!\ã°oóMÄ[s 4½‹Ê®>èl–4ôõ\©òX]ö®WÛÅïE˜ ÆàDegÆv¹í2l½µ1æÑ\ªD:#‰òIúZ¬×-P]qž€O±ÅÝK 0ñ±úh¤0Їxí8ÌÔÜD_*°ÄÕŸîEƒËÔί©AeteeòÃÚ&8ã ÿ´8ƒˆŸŠ‘çö²¢¬ŽÚLí¾nbr0¦1\àü "À7{Zø lâ¾6d0š*zB|~õ?¼8¿þÞÑ„±<Þ‹Ê6”WŽÇs ×õ†v¦ù‹¤ã‰ëaƒÇòª¨=ªçôå5c‚]øaë²(©=yVá/Œ`»°‘_Ð’W‹ÀJl]=wùp¬à¬^ãâ€1N]a°¼.úf¼–oÁã@6Å0¶ÖçËffj üÁÏE½ï¤.v°— :h[D €'%xeÁ5áÝ lFÙ8ë}ÎýûšŽ¨ËO‹)b Í 1Öã F<çÕ—R;Jò¨ð<ør(ºë~ã¸+ûEa¤ ";Š1/q†Y%©Zhªà™!¥xôìƒ(.LŸl:?p`–r¸ÿE\AÔ5<JÁ½âK9è-ªÞ<¿§ë75»´¡… £úþúyžüÏzxööOµë² ˆ}&úÃ^ä7^ù^=ÿƒ?SE nƒ%io 6’ÏÕm[S(š ‹›¦8ãêñq®Œ³3¦åü© ßV&!TðÍH.ÌfÓö/+#¼ ¥Ødiª‰çî°—¡t¶Ü†uÑgcMT© ÁûyNì;°ñCoÇÎ-(^<«0¡ P6_çO± }þ´Úc„ûLíJ—ÁÒúgÕ¡=P•Ƶµù»·üy%¶”C´¬¨°L|†¡dE×½À&Såé×í8ñ¢PÔ‡¦ª·n„‹3gý`šÉ‹ 7ø¹0ñ È>Ý÷ zP€BËZTƒïΉ„»œàí1TÂøí¼¹$€§W‹j#æÝâ´¨Zì%lVZ%5ìbxÜO½=úƒÛzŽBžrxË çïo+Ô bGe‹4椺Ǚá>ñʴ…¡3ÆOÖ>ÅC1Ëqšxhð½ d‘U`¥©p“‚hƒêÛ)\ÆÊL“ â& ñ– mdçÙ$Õ‘ïg´ó˜,N(Ã7‚þ²1>§UôÇ0çJ¬R5·/Îë!­imSýÜâ?±uF8HG™Hå_Ov\Ö™óSl Dc×T L¯`ÀYã*«GxøÕèRò»q –Ú÷mõTq ŽˆYeÕ¦XER=ü{]sŽ3µ—{‰-èPLÇßpÓ¹‹;ÀÌ +7?:%S0à6ü†Ôá&—oŠ* ix…N *Ç8TÔn‰¤!ã‰xXuä¸áRÒ±Ô0h;à76ÐZ ¥ƒxiÊirØcH°ï˜B{l{iü1(øéi¬n¨0Ï [Bï.¹ èƒáx·2úÍùÒ,….ÐÑÚíÎT&VŒg Ïî~_ów¥¤Å ÞXâÜ®_ñ ûúOËÖ´xp˜‹pñ›v‡(jÅÒ6—г³¢xlÙJÝ~„Í—f¿u½zHŠa;À ÃÓþszfÔ8§9 »Á%—&Žz»u£ñï àÍÇmL–6Ù0åÕ= %%­îšu¶úôÖ!¾@‹‹ Ä/Cš˜lzëdŸl×1_´ÑЇíÁg/Œc ýbMOá±¶ÚPß/ÇǘõÂì : ƒr„Õÿ ¯· ö¨ãñ,Æñ)îÖ:Ñu~úÎl¤ÀñÐnp“Ë^osíɰâÝ[®xœÄY-@6f3,ï˜Q83Œ¤ý®^µâû>›s|â£ÖC³*\°™ŒÒÛÛäñÕÅ=:×jÙиº{¦v“\~7–4HG+º+xú1ª#ÁRÚhÇNµ§ÛÂi¬ëH(T—ïíl;·ÉrQ}¶nª nF0€³ãõ¤µžiãBÎ>\Q2´ŒW&ð8!Hôá]²!1Š º¥M2Æó§oí‘$ ïÌŸÆð»ðòKcu]ðQOh—Çm÷›džî@½;x{QWnì¾ Ÿœºk ÎŽ+Á0v)U¯è|а†0A€Òàƒ6þ ALyX©ª¸ûN±…?©3jèÖùïÕ ÿè³ÂôAâ-Aòiz@ß}Ðb²ß³ —lDó\0h3 ÕD0¢LwÞÖ+Ći7¦(­vì«Ïò³6(èÛÊ8"$;ÚZ¾ÁHî5»eD€‚†4»µü ¶·ï5u J<Õ®K;ûP<žÓÅBÙÈf½üxÐÁ†&SC2–qùÌ| 64ò=»7la]¢Z}ôׯ&ùÒ´ö@èCQ#cp?ÛÆ¦€÷UzÛY­†ý–¡]hëCI3{#†Äž–á{ î‰k ÞÂ-*ˆ£,!«›ý6lváJbÌÙIè„+Û‡®‹sñlÛËÈò"› Æñ=Íl¤„ØøÕÈg¶A²þÚLQßMhœ#U¶årûõ-»@£¬’ ÏOí™m,4U‚­ªÑÄkm×¾]\u0¼v ú²4MûÜ !˜™ ¶@[$YÞ±`‹q'.üÂaFK“PT§‚ôÉ¥:{n/®~6 •u%3Á>þëMi¥cÛãýÕ#)A"KWOE®¢-yªú`*c£‚Üi›WFŽãp«Ê^øE†ò™ª’‰ª~€Ì‘u†©ð*Øh?PãnnÊÆ>˜˜¨7Ù}„|'†ÖßON¶RSÝ ÈÙ>þÀæV? ~/#i ‚…LßPÝ~/Åldg'„KûZ7ôý>|u`ÞG"ŸaU ?ÇD‰0†2e‚ÂÎûj—ÑÕK\3ì:¯[ð[’ïo±mA»vQlì:†ÛYg@ëÕš][‚›b1iµ_Hs&=“ò(Ðõ4êõ`2ªšÉÕ—ósx9rh̸ }Z=½h‚¸•ÅJñST—`ÖôÕaìc{B'çOå½ÔÁŒÝqpÕõývŽ][í_—ZÝæ÷e³„áŸKaLžSdÀ9ס°õ4´ €Ÿ¶Gw Ã®ë©´ß°ñå3Òý—ç`§ c'4ñ©Ø Ot»V$»±sa‚°¤”©„ÔgºðÑŽxQرö¸$eðIì¼^]Y75pª=ÅÆÆòÈëg‹}ÿlµŸïì{õºï‡}ÿ| Ã^fÿìù<\a$WL×Ë0øÇU`wO ‘œ;m¶iWž}gš7€{طŲ?+f™‚Æß@9{Æx’Ëϧ¤ÏmÅEzFS¼¾ïŸKYùÏçÏ—àËÝß ã^Ò7&ÿ\JKø#s¯†Qš+³ˆrú#óM–+ ÃòŒ¾Á8,º…Ó’nâ¸(éÖÍÂ<æ¿E’ô2— Æ«7óß< c´L҄ϲ‚þÜ0(CûKäIanU{Æj.±¤E@6få^Ð4Í š‡¹ýPÀ¡ýùeúÿ~©Ž#J¢ÿ:0EÈ!×iº âö€× mqS<4Ó±jè:íŠ2·Œ×ò¸ð‹«ê9m'ˈ°uémŒÑЖ£”iu àbpÆt„P^ Î½F}uý3çà˜€ce¸¼ ÞL?ÑTzÓH'@,‚{T™w&j7ê…Ý […ÒŠ{ðôAjfߎ;l9v‹ŽPÊÁêïÓ`ÚáÞb0HJ Yµë>Þ².þŸÌ&ÉÀ Ö)¢Ð ×g$à®/_á6T³Ÿªïù¨·Ü¾È6>4lD+\߬ƒí?’…³ “Óì–ÚÌ,²Pœ? –‘ðÊWÙ½d@CësBy ¯U1®WýÚhº [)m Ô£Xd4ân§Ò“ü "„W›®Ÿ”È5O-aŸ°…9¬(€åQE ‰7® °ånÓ_ÇxýÛÏÙ¾u¯ØàÆòQl/Nš^e^šÄ2¼plaÆÉ “j]ó6ó°9£3Úœ–eþJ6µòþ.L} .~ÈÀdõ|jôbq¢0¦Í§‡2ØÊhÇæÂäèÕ|1oMþ®¼1%¨H{è2@¤‚,÷ò..nÞ…bb¸E!ý‹_OêÉ<æÇd—•Íy¨àøôƒri‹×°6ObÛv¬äÕÒvGid<½0üea·gLÝ…_íiH° Šæ6/ÝëôÍ¢¯6¾ölqÌôŠV³º…NÍ W²n.îè¶Ê'C°¥¥nõ€Ö¨£È¡€¦¬ñÞý~8€d3ÖŠ +¸€¤ç²<¸xeƵùf¯èãjçÛ-®˜ùos(ÌÐîZŸäPó[›H+shŒDQ§Mÿu;ΆÄpÃîbÛVK¡°èq<‚Öîf `ŒÆÖMí¦>N…hÏg±n_m÷z’þ¤q(îì`% @¿„ùºíg¾ €Y¡VØ6Μ6Æ„¥ôrûùê•îãuº™m“ÁŸ…+Çä÷ΉáÂ-×ë¼ñiç« Úq§Í¤w‡wþ”È:4¸;hÏÇÙ ;¦-¿ñ`ŽK—mä¨s*4ä¾h+lQ£-èe_ø$×®Uæ5 F7¬[akæÌ™¦Õ§çÚ:sÈmÍœ‰Ö Ìcš±A;4Fƒ-1!ç©ñô ©v]•Àƒ•32޹GS.W·eŸâE‚öÕÌtËxL2`~EÑ.Á½+3bÕÇ~-.Çþ‘Y™Ô Ý£ˆóîö.ö·ZÀÆA¨ÆòØjŠõá…`Êà«1@ਇÀØxÚ"2¸™Ü•ùJ×å¹-aDpXõ49÷Ø9ú˜"-´túBÅ’‹».¦ŒÉy{H¹w¾¾ÍòÁ%B"ØBjF©6ÃxË$žÅA—`„*Aˆ9veÀÑGŽŒ¨áI4jà°²\äöéíÙj&>8®q‰T,Ô‘ä‘k;áŽZý²ÅëÿІü5ÝÁpŒ_öÌ@ÄFGH9˜ÃÝšÌ`;ì“ëí–û8¼’(xø÷Ó¼VìÓj¨Y`$¤T¾E±ÝtŠù½°Þ2®Ù ý i¦Æ»0`'n:í8ht+>í/‚ôŒ7tE›u¯W2Â¥³qF½cû»žÜú^Z(fÓD6ôÀ3êžKÁâK¯P‹ÐÃÀmp‡ I~¸¹IÄ…&u­±-/Åk‚h]Œ:0=ºÈ}äsû l]u7…“ݺ«‰ÃgmžÓF~½5&t•©3‘ð¾ð‘q Î#x ðÞÝ®…  VœšA(½á2œ'€,S _j¡|ƒPˆ`çY<œŠ¢ƒšÇõ„ƒ Ü R£‡…KÈQ4‰ä%v»_êÖ‡»ƒ¢•tKH"ý<™ >z*èøÞüªåk}§Ùñ9//ð(ƒ·'ÜJY7>q²žâˆõ´ÆØZcxõu~¯§è¡6}b(X;nÉÔà°öƒÀºlŸÚG-tó&›’âÖ6óÙŒ\)`Ó°0xä>Í.Í3+ ÉõÛ¸÷6?&‰ã€†ÑçžÎ#[CwE;»Km¢|d CKüj8E'9d¼m–­¯mçá_xËiãP—}Ø@ï£;ÎÜÁ£`ÂôdqEð.v»ÅP8ôu¥Ó>àçóódZ†Ú­ ¢ç·Øí?¢m¡]¥Ô•æÂ:uBToaÛÁbÔS:[º=c…tBmtŸ6ÈG»IF†÷1Uê í›Cº¾ç‹²é%EwJ;•?Àû sy8JÓ]¯DÕ&£‡ùÞàš…©<Õ£±‰Å-#j»ƒwaºçq”U»Râ7ä÷•ÄŠ}žð$t‹ÇÑ$3gìbúzŸƒW0ÊUΜ)&8ÉÈ^ÓÆ;ož:?ÚËê¡ÞJ ®ì­™±‘ëv°÷Ìå¸y|aVCÌxð!CàÂOË…¼¦¹³oº” ?}~qÇàž¤h<ôÚ·êæ‚8½IAÄ-… „¹>t·aÉ5ËY‚ã™íðIÓź»@̇n›‚Åv_t:xNvga6s?ÎלŠÁøSO/Ý_&§ï£Çˆ°Œnàñöà!t=íÂ]£3T¨ø™B™ñN×ûá£èœ6Ü´Ò>œ^ì~ãvoÈxÁhšŒ.Ót¬ 8VOáÀ”Ÿ XÈÐÖŠô}òEñØ, ÖÍÀÆü–?OGILõ4¥ðz~)OÜ¡J%#.‡Ó?ú¢úe=…:ãþB·†@Âή&¶1cðŇÞ"ǃÏûz ½í~㌭ÐñÌ~vìÀõ²ñ»Lw$ÇúF%^àqê¥Óx¼“*#¸¹¥{ì–{Ð{Ù}÷ ÌÑ‚Cž(RáòÎ+qÃî¶ æ‘´Nâ÷lFe;³‡ÖØCPOD{îNCðþO|UOú)á*§eå0s¡2£b»øD,y“B&¦Èô™öˆ'¥aäFr«ÕlÍz"áŠm3`ÌÃÐ\îô_xøÄ<Œáö”c뿵yÔïØŸmÙ;íÑDfJ@|C|¥ýl›x?£çÿǤ`é'lÄÂ=Ž<°Ãw\ˆB mÂ>_˜ 7„ÛåÈÃd å‹û»F_]–ï¥Ú@083~gj€«!Øckûäñ 3•tŽr v'6K½Mj×fÅ„ÇM -yíšÔÒøb!z£Ðÿ‹Ü×Êf™Êç=ÜÍ1OMö’ó `Öo¦JÉW™í—«€žã7]žÙ\ÃâÂ+S! ¨Ó®2LÄ„ô³›n]I?1–“šô`—Дԇ˜€ë©½)-xÆÔ™¶{Û,¡ï@© ˜qÿlô´¡©'‰Q£.:ÎptפdCkit_Ãñ÷¬Œã ŒHÿbè Á;ó¨à-‡hþ—Jiæ×ÊíÜL!ê÷±ÿŠ"EDI&”¾+ê9ÖÎÝA¡”8h‹v_h÷·-`MxÁ_‰¸³vñQ·ÂµkȂѾ±z‹—–¸ºÖÖä (îF$œb§á6{fQÓÀ/ëp‰2è0°iøj]‰~¡„˜êâÞs·ÚÞþpø!L ¶›ºè68¤ î""º{û·x~ʭƒ'ayHl']´Æ1ìÓë`t ßUu‹‹²ú8 • ÄÖüú7ÿël–2˜/pÓ”Q&÷F —rƉ'ù/a³u|±Ãt%yg€E0Ó²=‹cŒºm缞©§Ô› Iu{ô3c¶»˜#\P¦ ñ|ŸAÃH×Câ“ôÚËhÖ œt¦Ëމ±p›0 0óÁŸ:k´î!áMšêáîãâ ñïzNã Æhq š•žêœÓ\ÎgnA}‚øÃŸ“ýZHg“yRbSÝJ Åpoˆ€œëÌ+²ß F§ù{Q}øáƒûY '·Aí?×S¼qªç Ý;“YíøçZ=E—ùaí'Ðÿ27íF)ÑŠmÍïˆÜBíoù]Œ"ÕoPï uä6›&Ýí4væ mêž5ÕI ^^Ü¡¼eñË¿õu &? T*ð;ðוõBW‹»º!ŠFxBZîõ6£ÓSèˆÂyÃ\‘“ÜÉ&‡ð1ää”Ä7‘œó³ÝiikG4T1Á™êÕkžä~‰ëÛ_÷HãÄntRõ¿ Í/Í‚êö†EÑ%å[9<¾«ŸºË³ï2¶9D_èõî=tÇuaôè çMøò]=Yñ¥°;s†?p«òÆw@Ô¤‚]Ûz´³‚ÇM Ú:óKü¬ØS<ÃÏ=ê»!=°·šz Æô°g³À®¿\­a¼»=­æså…†:‚+4‰¾Ð®S™:åÊ=ük—80$Køˆç’¡Žo¦¦ˆ[6ô±Sî%• ñL€¨ü;ûqËvSâ<øru›>”Ø9zv6fFèœ#^µ:ªU£€“ð„΀ûߟ¨åw:wRÛ~ºí;vq—$Y#w¥W]iÒD à¨ÊŸ5]Ò  P¤ßâ%íí€g÷ìz¼£ß’G·ßFÎs'v‡NЬ9ªÏááÊôb¦ö};þ `ÜDGëÙdgl‡m|÷Ax‹û.#0ÏA7¹e5í|T]á@{`ô$£l«»€+vTûŒ˜¿øÄYm¶d|q\OéíššR½_À éñ8#=t¯å™÷)óǦw}€PF-@o›bÑ=rÃÕÀq×R#KÛaÃõžÿÑ¢‘ôZgm ½¤™ßúWOd(2G‰QÒÄ éó-ûbÇL´àÆÜ04ËÑ(â×IŽžœš¢ÒW¦BòôÔ‘Žì—9ïl:ðtÇå¡8,ó îµí}Pu!ôŠ8_h¿n+s$éÿ·Qf¨i%Üñ“Ämžªª·ˆMËiïéq8ÇãoɴщÌrqOÊÐ_8!¦Z†ê UƒÙ9Âhµ VRï„Дžaãä;^Ñ¢aaOçO\Ëç 'NÏH÷þymFå$kOõ4<º}áË\wVúø¸–©>ä“u^Óq‹˜ìæ­SHKY-øÍ`&JöÏ3? =‚í˜ ‰iÆÝ¥pC&J´õö\ÊÚ¹ö&æÅ„ç[S\Ëù½ì”öá¯|;÷ú ÷e‘‘®!Ú5úeÕÞ³f&Bé˜<ÂdÉÖ65¹ÔHŠ\•\9ö—yx3×õÒ†xMZ ùËmgÕhwë±+—‡a­¸MRÜv©EyØ9C· t£\ø²G‹a00’Ff0ó¶Ucçˆåý˜†m}{¦Å…÷g(£”vd/F _H*…Gkr·e­x}ø¹y4sQ¶É»·rãÏëÓûõd9‡å|/ À†ÔÕuœÏYzüßÊ?ª?ƒÇI`BÊoÍ\pŽîÍä-ÝÕQ>¿¡‰§&”íjïR¤Kêô\׊Z²#Óý¯OU ‰‚_Ò ƒ 3‡XíÙ†kf}Ãy³‘´;o›Qx”qò@ì¹ÕÌŒ)­]uª‡ÆÞTÚNì¥s­’)]¾±¸°‰§lRµ\ùU$]>¹B<¡]oMkØØÿK³Ç7óBÄÌâG.ÑÆÎµ».¥eÿõÀ î·Ý!¦œ"ª6uî$7šó.Öi4(ä˜OúÄ6Þ‡$Ïj!GiÓ)èׇ1F§¹gÃÂììÁzÒ5pmœR‡ðí5;Å#âщÓ3W¤)?§ã œ§ø P¹6’I'0ÞP$ ¥Q… õ1v>!VðùP=D¥Æ]&ÿ8 R6$•…|Bæ6L¹wÉËNèä†/Ž”Ø3{qp°evR»: bÔéÉ ë9ª¸ù¨‘Ýg»oÁoH‡È,>œjö–³Áyäqwq(4ƒ6í{θ ²Í`U¤n/8a™B×RÓg,mᨖG"z® r¨_Å@(å&¥­úq}tKó,ÿ¸éËâ/Wð¿éü´•ÀÙËçê¹RX'/РNÖëh¤§æwáƒl)CH0Ò5>eêÒÒÌA‹Íÿc µËºË1Ø&t ž‘)ƒ4GVéj…HÛ¹”ʸãk +¦ïuæò:FÐäçgHœ¹¹^‰+eOê©~‚­¤®bÑÌÛ8klÂÔï×éü¥' ð¼s®bÇKßR˜à¶Ã“^ÈCè.Ð'JÙØíðÓ(×aG̻ϯkòPš=ë&uÌ)š?]ÕĘ®ßS )^ÌT„ÈÚJÉþÅwÓ½p*è² .‹uÍËÅÓmv;è£éùé¢VlÌâ–á7Ž”l8æ*òpÒÅò× YÙÝK:@¦@Ozd<¡}­ ÑJ‘QEeH6ê){ ²¢õ°óX›Æ€‰z*ÂØkCÊÎÊ…ÛWõ>…GÙ–=<¯§¨B%­Ð1Ä™7gµ²’žS0ÌV« ®c«pˆEw«²¯öònv4E¾ÐŒÂãJW쳸C()ÐÚÀfŠf«zÿ¸žÜhmÑwαZFW/lîh€±¶±ÞD„ OÁ^€ ,;·…î“î™W”U¿Ÿk®0CÇ$žgÌ€·Õ[jzèÓh~kO\»‘íp¹|zw¨%Ar¶q/…ãšmöâ˜sjxG‡Jñ6Ä Âô·ðÑ Fd*ÎIzZ K4‡ü F·=â:èÞFF^ÖÊœ/”wÐ÷•Çò§ó"†r¯&7ÚCb ‡qJâÊwî1Æôâ¹újsò€&zA)Æ Öy·Ùåsݨu™¶}´”„´´v;,ø¯±4&=ZÜí<ߦ;-¹,nÓŽVÄ×Òåö(=‚< C‚é ;ÞÎãúå]õ$¿1ŠI¢Eù³ÞVÒçë'CÓ[Y*©o;AÈÆè¬>âu¨e%F¤q=•f5ÃÈÎvÒ1©¥ý¬¤Ýarˆ¯RËë&ƒœté¶4i 'z¶{yá¸_Ø1ÞP¤Iôû±ˆøq­4Ur®k³, ûÃKi”i=áý]üMî""±ñ±åý‡õ¤b!M!tÜü5k(êtÆM|ñ~‚3Ԣċ– 㯴\î¨U ¸A?~ZÕ@~1mZRÆnÛ×oZâ§—Æ©˜‰c2´rtä1ùÄ’Z… ØÜëJ×é×g——vøïí•bÎîepa)g + ÝÏsa`É•%Õ±mP-«ƒf®™\sd´È6·M(ƒIJ8åÆ[K£; aggq­Âƒõ$ÇôîR¦nàïEB­9 ƒ‡KlÍÍyJA}Sc±¡ýP±nh”‡ÎÆ æbülyó¬o’“ý¼IM‰°}nF2ŸBüõ‡€)÷Œ½N¸EÚ¶¥kÜLx¹´ÛG¡Ê¦Xù0††o–;&¢Á üêo‚öÕ¾_~ÓtÜ…äÊ1æâ¶—PD¯µGDá·û_>/Ma¦‘æÚ‹òÀü)ƒ–¾.3IYþù¬Ý#Û¤­äß—ÆI=ŽÖHûñGLTúµìNÖSQqð-°Ú®ˆ$—†ùò¬ÝÑÛL»³e†sÁôö|ÏüÆiAÓF缬˭_ófÖäó”¨SDD2yàŽ >à¢|@½Ó.¢ÓåÿôüGÁ¿zþ;B‰,èæUÔXˆK¡÷¢M>‰("q»L–I|µ¶RêŒ? ,)…ŽtñN1Ø4Ý"¸xv[P@!( Š2¶µEÿ ;F„qi$àÍÏ“¿•¡õoˆ5YˆØ%"Œ3–' “$á¿yneCŠÔZ&”QÆñen±eЀKQ±‹E‰uÅÙt!JJ¶cˆÒ æïiÂ÷FyÎnq`óˆƒ4æ¿¡u£ˆã„0Oùoñß" 0Ÿ¸´'q…즔>O¢‚óJâˆóNVëÉØm#ˆí߬°®1‘äaÁ¿q^ðß”QI™±­ÅjÕl0‘¦EVdÖ" ÒÄʸ$l‘‘…Ÿ“­~-øoÆ}ÉÒ0´îyÄÏÓ²TW®/ îKÛ~æq™Ú)¥ì2’§Ö#/²Œea‚´ˆY&&ãz‹(ckbµ^~ž”ìMQ¤!ϳHí¹è®Áïe1÷­(¾§(RΫ( îO„Œ)ƒ$·ßóÜ~/¸Ïe’p_ËÕ²{Èê{¤‡ H¬MÆê~²úÁ*ß„AVªÃH®ª4+šËôCZؘ"ayœÕ¶°0\-€Ï W¤Ä1ájO­ÕH„ö—¼TÏ‘Xí?¢$¶6"QšŠÀó‚±0aìm;â)ð9¨ÉcÉ­êæDÖF$´ò=áŠìŒÐ“8eaŸÕ¥:Œ¤q¬Œ¨Â¤ŒLSƶœÕLí~¥Afs^„­+]ýŸ*òX¿™±Áei%~²¸´f(«•‡jG²š,È#ÛÕ¬Œ¬¿IÄú!Š,Ê'W£ÿ=p'ЧÀàÿ2¶}OßÌre)‹㵞U£Í¾HÄÀßh–áó5÷1J}Ïk Qx\Ì=S-‘¿7äÌðVË<Ææ¶"e2ÈM¼®ì¦ž[Èf¼7îá‡Vï@@>2J1k•F5Ei‚†yõ_Ýÿ¡õÚÆÐZºˆÙiúb3©Z9ÔÙà»aŽÊÑ#Ìv¨›Pît*5™ÏÝlCÓp[;íñ–odQËžk…8œôÑd*kŒ{M„ºÿ¾KÏÖS’ø˜?<-몫 @ö3sÃ(ÀfevBov•& ß*ݨÈÖî¬K\³B4(ïÍ×Ãâ+ø¹_oÞ¸.raÃáHNz fl°ç¡Þ-fpŽÎòþš2ÛÈÇk |3…¹•DÂ9~äòËp N#¹£[ì}馈Pú) §­ÅÎߘ-žžŠ‰£I…ž-¾ÚNæÕh4löØ.;ž¡_(ËY9inÞ¶Ê”gj ®‡nCŸ‘º¤ííäWgöó4K‡Ø¿Ûs,½çåÛ¬žÔÛ3[x¥¼×%•=DþC©ÿ£J1ehMw 7ÞbµŒ®…3ÞÏÚíÁÊðILÍ­åRö°—| Ê›aôäõ”¨V¢Å‚Eã` Åɪ ÷WÔ d¡ˆê)D•Hcw¡ÔÕSž ±ƒÄÃqé¶wP° Š8fa3ž‚Çz³«î¥õ¬]´ÏgOO0$Ÿ«#Æ,báÌ6£ÛÓ 7Ä;˜ˆãqtCÁè›ÄþTUhè½ ÃwôKmîuW1L‰{I¶Wó#ðÛèÐé/ yœ½g¾¯Ä¾Á®vÍ»zÎÛ®sÂȯ!l¾%Ü×ϱlRèÛ¢Êíâqßô2’G.Tf`¥5s×sæ±|qg éËîÙò½‚|BDÛõYuNWÔ} š\c˜pOfX™ÝÀ¢n>…_ôºØìWïÎÌ‚W©WÜÑ^|%­®>vHôh¯Z¬8 *ûoî?G޶ÏY2C†úõÛ^+ŠÌÓ{y†ï8*;w¼:·¦I ˜%G¦â”¢æ¢ð®…6–suÛ¤‹Ì1Šà*þ2VuýÑ!„“Æ¢ÜÆ"…س›ÉòjëçCÄ3E,²â9Z¡4]¶3@Ç)¶ºò:EDºÆ^¶quÚÖ¡êð]Qà–Iô–%Ôˆ–¦Ì½49ß­˜z$Zf)¥ñVµëût6—T½¶Hx¡ô«tIÄU€>ö}GÛ“ÞaÖè0†³¼ÚU)º4„i=åp@±d ORi—팕Æ?7&È{Ö­kìú•ø‚ÁWÎ`ÀQRr³ý_ð `†טÕ^Ôx^o¤hž…¡žò7 TdÖXƒ®ÐTïoïtAüR¸Éf¼´ÃÖ.-¤Dr.¦·i›êÐN…µBöl@ÿ{ˆ·$d;Îm@çêÙm=49ðÙ¨sÀrFDÒKÁ+ݸ¤èò”+³gøwY­]ó‰ÎÆÀW/>¨ŸØúÄ¥¼kö=žÒfOk«ŒKS&œÛJ4³×Cv;Q™iUä”FW„=ò«™f>è—"Ö^ ÂIW;´…¢QÅ8T ­@Ú©õýîân`ÅaL™uAuV)º‹Í=ÀTÃl>G–âaàb%¿.X‰ÌšsÁU†/EMæþ­Uƒ{0‘aéA—PE£­¾™ÊjeF;ó3O„J¾-"m›…˜UõTñÝn#k>KW³»ê°ÜõœüÜTŠ/]®>‹YeL^{³‚Î7² äpzæàåa².ú`¼'{ÅD‰ó|ðÔèh•Ú&rëF…¹XK&8“‡VØYﻸVÏ!g,¡ Š9dŸÃ€ÇpV™æßÈ^('ÃùXîm1'¥1¨a¤%öT'5(™ÉtÅ ÷ðÂë„ûµÚÛ“’—|Îûù4%š³°Þ:¡öl6ŸÔPh¢EdøìjÌIÙ7nã¤é^½bŒ†ý^0;k …1H~ k' 5€…¿»Yö饥²ª,†µ€\6Uð+&RÄ{k«#?°¬¾‡fRà·¿ÖíªÀ._ º¨5Q?þmZ§oá³xiS~òÈtShLЮ^ó‡¾Ù¶—Ò$Ù`0Û¦EãŠE ad!ó´T*^ox;& ÿ‰“’µiEÍìA æ(¢0¿¥Oµ*¶‡íY¹'™6”1ðƒ$0?¸øŽŸÂÉcÆû]Þ®=m£æ˜Ô "±8ÖtÞò˧Ӊš¹kÞ $¥ÂÀ&bj}ænÍb >Ú¯ Lbpi¾üSɹìÅóxA»»V/–ªR=Í£Ž=°ˆ–-Õs.§&T86#¬‰“EkKÅ’øìK…h0cPC,3OIAµÝö!˜µœ®ü£`8¢õT'J’]‡¨EX~ÂE#l¯0ÚÆ§À–ûíº[šIhJiGoj•}Y¶ ¥%àVz¥7‹ÝWëÚ·£žà;†Öêet9G–Vš.B­×%öwZÊ3F P£””\6øJ3‘9’éüÍi+ѶoÆY9¦å ³šR »9ö³ÊŽ ³Þ&K“§ezfaÖi; ­ ê)Ý{[?§]lˆsòAëF'«Ú/%Xìrg&j‚]ÚÍ*÷à4OÿØ=·¬­ºÄeº§¶z^XÈšIbÍ`;¼þ üÚüVOÉ,¬伋(ŽT7÷㎛µêÇKÉ6ÄeBɦ ^É)ô (TbÞ±¸Jpµ pyqõ Uõ‡:˜’ŸÖ§‚ÂO<:ùéØ,’2Ö*…5vµWžñó]§†rÍáÖJw >¦Ñ5`8!=€QÄžäO¬‚zie<€õY(ž»gÒå±Á[*¨»…Óœ+d:òð_š¡Gýª:Û”¬i®øÆÙ¦vqú¨BeVÏê)&“1Ž)U$¶]ÀÆcF•îAü©ÍæcãZ],¿£VG£¥K6Õ=4l†ÞId4 ÚbŠ« Ó^¨ÅRì½e`´š}&WÂQï™ ®×·²o­51~ ~n R"ò±¨PR¿V§qS.Ótý¢¦1T—†MVu5–dã˜ÞaÄl³°b®›¨­VHF­4ç §\[éš‹ a6œ-MŽTîp‡Û~aQ8YF™viúôÆÏź±BEbåW7R7¨`ërAƒÖ”¢“./󟸋ÙbC °[K9æ­GíM£ò†wgkùó ðõL‡ªÞ®×è²Õg ›#2XZ+®ºµ|¾ûžJ…ƒ+…q\ãxÃs”"Û?ºÎ# àÕG‡þ Â|¡Š\ö(ÛÞ)£‘ ßvüÎØš%ë§hÍR‘=¤ä¬v.#¾p$Í[Ë7ìæî¢BÑ‘m”òVPœœÚ³wyÜ\WÂC‰z¿šýKU†gÕ!8vIbª)--ñÝg/žŠ¬‚ŸG—§–‚P,ƒÝ}KPS“ÐÔj"Ö¡{p› œ.ÞÇê—é”®w1ç±uáM~OéÙØí¡‡0øßÑÉ¿Fk„ ýo¡ZFŸ³Ëm ÜÆãûøÚ¹zJKj”Ên‚Ož“9Ó¯Õ‚;êšÎÎê5ñÄh$¤Á®2QêA‚4Ì^"Bó%ÇyhE€„¬Ìé_Ï£Œ®êÁçÿ9†7Ï!*/kk3Ù}d#ÓÔ&aúû/×—ê¦WÁïfUßì¹ý6Èßë|¯vµÂÐEϳùÈ:É£Õ±b^¨¬ƒ €†yQŠŽPjpCEèzßæ:(Æ{4ÎÕ›œ€ÚLí—ŠQ.c¹ýàyŽ–7)BkdìX«LÝ5 ‘ÙN€ù.°Ç`Æ×=&¯CKÚ~b²¥ðU–&M¼¦kZSÆX+]_L„™a“<ÀÁ{Å7ÆÀÝM¿?øí)¢#ZcòÒÉ›¿1ßPöOÕW’fUXÏÕ.31~´‡ižÈëòÚ ,áÙ:CHNB Eäîe+Æ?3Ká­(¦ãq_VÚê±|cS/@Îü b-.öÈÍz*rd±ˆ˜uàŒ·E×WãöçR¼qM“HK"q‰6¼„î8í/vé½^Ç—"B~ý °by½à½Ê÷=’[ƒïº•þrj¯ ä åÔÒöýù¦«‰“uî¾n“O~™8G¨åM\WŽ*çøcðf òô `x²­¾b_[ßñÔ—óp–ã|\ ­Àv˜{vÞx}R!Ñùd×Θ¯—·å4{bÚø€Î·ƒÎÖþÌ ÙaVO% XIÏÝüLJ£/Ãá5プ)dÁÒb>Ƭg&ÄäZsö­Éüõ«–7sÛ‡Û]d»œæܯå˜I û®•oë9Þ6ç• Å]é}á_Ìt’PlùæÓß»zª"·\}4ÑïÑâ}ñÃYÌêqûjÅm^“‘ßìb{¡öžˆÔŽ„u8\% ì÷iÃÛír¶ÞVjB;6ÔS k€…Sê[i„àÕ&4p_=ñs²+Îãö­zª5ûU#¡T¸¨º¬Ë2yÍÑG+w­°üUOYé½¾bŒuÑY‘;ŒŒ#zMúà-æêGØPË#¨·6ßMÔ[«p±í¹ ÊÆ·*{CoCH6¹_~k'©ð ™#K:2Ûþ¸Ñ™%/<ÎϤ7vºcl=[ÔS塦¿ÌÊw çÞÒF),Âå”)2¡KŸÜ×!Ñ#ì:DÊæa­ÚOÄp_‹Jƒz[ZÀhÅ öXe°ü¡ÀYs½“ÖJ®k&2#ò m×?³8»3Òw‚_¶y¦ß}Æíö"‘q(/Ü·¢éz·Dæ#%ü7‘W|‚'äe'†|/£_ã><õKü¡žB/` R÷¡3ú†Pô%]Á úúåT=ueè°ž‚ºÞu ô,ÄöV!OÄú=k–Xáª(·]‰Žh¥Gå£òã &†Ðö{HϸNµ”+!Õ)ƒ ¼œ9F­‹õm³¸e(©§‘ÐwÐø}~I4`AD¥žòaZ)]Vö:g~Ô.|¶ƒÂ.£C³”Pðb4V¼ìŠOXò nR@ìÈÊžï,To^Z[Ú¡³’–.ËC ·¤ îÜÞ ÷ë{∂…ãƒ{àG—…—%ó2ÆWv^?ÂSdJaÄ–N  ðaŒ¯•F8,ü·8·¢Øœ•¤"¸xrәϺ3ƒ¼sìŸïsáÅ:¾Löº6±ã¹€Ê}¦¸oÙâh IŸ×SÏÓ‘Ðb93lußéôål¤ãÙ¥q6Ùñ2è%“4vÖž_Ú™²:°Èdj´ÅgÒériYO‘@Ó°Ä8ð»p WQb¤›´>Í"˜\ʧn¢Gø€;»¤Î`ÆÛwðˆ=—÷ )Õ_¶k.ß_>5aæÂdÿB'8Þ~„÷åÓ’¿‚ꞈú³u½´s¦6̯Ad9/NZ=_Þ:8k·ºÂQ=i—?LhºúÐô;ܯËËŸÝxßKÕ‡| ~¹<)÷¡i‹GfÙßß,ëÍfÖ@1 »j­ÆÁ †÷¼Ê·jKHa·³ü¸T@B4#‰}z»&Î?›~sùξiWVnó Ø9ã ¶‡ÃÉo¨÷qšÇwÿ@PBúg¯¿°‡0jw¿ÿ?J6ÿÐÀ¿À2o–ýÚ‹uRycé,¶ÔՓLj!'Š© –]š#<þþÆþ¬J><ívØqaý?j5Ä ˆ­VC©0€x5·Èê„yƼü8.™¯'!óó“Øê&$e¦¼üŒuÂ8ÍË"_}ƒ©âia)ûaæ5²ÒЬL˜,+þ= = Èÿk×Fù?\6 Ãi7r“ë!}{³IÌÜF'ùl—s•ZíP–f¾–Á ›¶ínFë¢ÌS0‚ÙÀ+>aY¡°^Þ¯Ÿç%ŠØfÜìì»&¿ÂÖ'WËm>­çÂøéîr‘k¢q°3µ‘ŸvP ¾Iÿb@YÔåYvU‹KÆ:,Ab0nS0U2eí¼·]…«ìbžnâ¦.ð©À"Õ®n¹ÑÏ<)ö`ìd¸…|sP€¼˜à ÊC }è+xy»,¢C4!~ŠWÄÍ×\ËtVÒ Na.ÕþzŽ–Å~6¦_¿ßáX½<;Ã$åð“s½%¸•î$8´Ì‚T`Äú2Tó”¦=Õ3cØ÷f0k¤ «‚g–8¹JÄŸQû¶2Ux‚æF1—‘ýaz]SÏyXUªBŒcœ¿«LIäm6 ‚å´o$t Û®çf ]¦õؾ½TÅâ}þ¢4gœ9>g”ao„íM;¬öÛ¨¹áÕõ ×y€°±s('@H§ÇCS=ÓÿŽá¹ù),ϤšÔ˜»'G0صu<¡°× ùb}\Õ|,kLJ[°ä3ôƒ„òlêjŲ¾›apémN½£Hc–¼ žMíúw®a]}ì¡”u—;vOhÊêª=PAà Ú_o gX¸Y¹ç®ª!zFE™¬ÿýà8Kz¶ªÝåÓ?÷ÏTCeŠlørçÙ™;Ó;Jr`€-Q‰µT>8…õ¥“ÄP½ /\>JN¿ñÚÝZb$ù„:M±íq6#4ôJó*ÎÍ™aÚ‘#hÉÆnÂa¬ ð.€ÆØýÑã»^XM#_é:xf%Úßígþod wĨêÈñ ’æU;_~],bXï==ruçƒ;¶AyMIt§81«+|7ŽX+᳘Eæ`Æ“+Îíšîæ×s9¯Ð›ð’¤:o0SeÁL {M:½jʞÄ’G¡dtá1å¬GÀ=† < ضåËèÂâr¾ž~¥ãè¨L†‡ŸÏ—›R©ù"¶ÚeÇfFÆ€®™#3üÆ6oÃàÑ3.ÙPÏ“_BÙªœ6݆sÕ/wgU’ i `ÑIH)¿¯Ï¹gvP -±8fò•Xñ6/YQïðxÙms'QO&zuÛq”߯`¦Š²µÍ^ÚÑÕSAä²û䎎3Ǽy°ÛB{H°­ˆC€m+BúÑÖgø®OõT.EyG?«=ü@½&îÜypÅÕÿD£iü§õÔý¨S„ÃTÊ›­hÃ.xè8²ÿ¦Þ¥¡ÍçËõÄ€jNÝñcãâò+HQ]¢¨o‹‡¢¿³iÞdÏÜ\TüÊ”aÖSswÒf–8&ÔM9ï'o˜ÞOâ¶œŸM¡ÚדVc“>áT|¬ž:/âÂôÛ¢> BZ¯uîòÑ s|´í4W HF¾s±HK(–ãÒ˳ yî ¸Dó–úM2–{üªˆû¤{«µ©±N° ‚ƒ¼ñ{!‹Öê)êrÂí"LÃQõ¾¹¹G‡ÐšQc5(„š‰N>¨éMÑýòO_¼@D\xç« N”ʘº)@–{¦¦]Ÿê[ìò1^ˆ³ @.òãmæµ0¾Ýy9’1nSÓYÓª(¬“ðýÞiº[þ÷¶£/4bœ§³–ØŒ¡©Ü3£¡Eçòz Q Á¼~%+Ô‡Þ5>T+T:H7‹<– —Ú=ñ©)¨2i‚Î1À[Û´Èm²÷†&‚Íü=Žâíá"»·SJ‘8HœêêP†î'R89^~]à¹Ï—?c0“öè’M&®™ˆQ™y#YÓ<ý¸¥Õv5mÌÁ¿3Î"õÅyÊ]9Ó i2u%(¡{DäcÞxÈу³x+Š;9¦žÚ¼`ý6 ¢pÇ€Á<ø•ÆÌ¼BtÐíQ (â%œ ¯‡ñ]–äÿ²-´v*Gèp7¾Drtû@³09àž~–¶Nôæáæõܦ•vË-ÅÍÉü^3U§3$—ë©€(³]xøÑ]7‹ Mo»³©€ZÚvÉü¨¢yâ´Ý–ÚÜÐoÁ1'í”-"ã~!G:mlÚ[,ŒÃ¿8È*؃ç«i+¾:Ð{ÛÜúðÌïõ-gÅ,ŸRz°KöÝ;.3ž<¬§äsJºæ³óJ;ë§ c%oU¾­ïòGµÄ³'É~¿@ï*à ’Á½×íd]"uœÒ‹(§²»§I¡©˜G•7ÍSji "ïìÌࢦž[80L‹VÚ¸‡~]ôÛ0Ê_—7‰z»rwÏ9ºì¥i±{lê1Ù-ÅîñŸS{Å~È„½vQûc·hŒž TXÙ\Œ*þk4ë} ZÆõ”!L¼¶‡>Eš©Œ©ÏIÿ`n? ßD¨snQ•À}½`deªèã|<8ÇAÙe÷a¯TÚT®– Ñ©·õ”:ËâmƒºÄˆãvS<œÉûòŒâ®Ž¡·ˆQÄ…>œßQO0a“–â(xöñ8Êr¦o§0ñÇÒBÂpD¤À©²óØÔÑn¤ÃÌÙwÅ(¸.Ä—µ¿z¹CWúáúü4¦tÞ6¦0.ÝO®ï=³—«h.I$ Í“ ÒÇåö„í6=M¡î!]ä{uƒ6 FéÊÍácí™öm G꟡Ú) ¹ñÇmÙ6zÙ° H6þ¦d¢GhÇ-ÎùíßÙɱúKíãݨ§ç¦Ûå®ÎïkóÅ^z+^2šl%]>§‰UˆÞ#Ž˜»¾ðuÜy˜žÌŒ\>êäåm^ˆ5/QÀBÖa=ÅPQšÜ_×¥±‰ß8«ç­¢E\µÂö@Mòœ8ñ¶P ü•ÇBœ²(´ª®{áFÄw<ƒ¢âæ÷@옱;®:Ñj0ô1ŠÄX5#Pü‡E°ó<ú¡ôOvܪ'E²o÷Z T¦H¢5!]eä¸@ ×fé˜ØÍ¼cGzF:°ño=…ñÁ36‘Q¨¢9›ßlÖSß  pÌsâ›Zé•õ¶4å¶(ŸNþdþŽN‘Ö~UtíšËÁõn‰fÆjGç&±)&¦Åm™1:shä!skÚªø¤×¿·4ãÉzêâÃ"+ñ |xƒiïåŠÝf­ãI›ËÙ‰B´z(cbcÙ¦­¢!ýš(žÞèþ”iªæ8J„½ÏÈ|æîðå ÁdÏ|ZM|ZPaWÚÁb*®ÞL»oÞÜØÝÿòûÊ„®Þ]oˆñ_w ;· â´›ôý—JþÈ¡pjïwò@í%¦^Øz!]´µYØÐy³®˜Óäof¿ä1 P‰8DÈ~ÃK,4èJ"%xoûnÕ.¬ˆ»÷ÂÞ;HI¤ÉÛË÷„v¬Ï‰¢7ò§ìXÓ ª_ÚOvôb`Ž´¬²GÃñ5äø7´ï|å~1t$µán’x¹é÷ê©Ì¥M'‘é@ƒ‰?óøì—X£>ùÊÐ'–k ›‚µhr>2|¨2Óƒ}tÝÁ”ò·nÕêpWÕSµw0µå‘FP×зY ‚Ö€ãwè:kºfÚŠe•â~~ŒÎ•µÐ¢@ö0¼š`@Äf¸³iô‹ßL‡°G¡²6(ãúÀ‰ÌAËÃäÚŒäºË MVW@ÂÝTñª7‰Üºzî!~Ñÿv“ÇÑÿ»›| ë?&Å%þ`›Ðxêl`A è²£’ᲓØiÔ¹,¶’¸Nt²­§ãÔñ:·ÏÀÞÇfPdžÝ~î:&Ý  âõœµzN’*¬Çp% –&Ã{½n Ê¿H¸èÀ0Û¬9¥+hJ­p‰¦»2ôêÓnµÑÿkyŇe[»Q™Ûô¨ý‚îǻڢþª|jôæ -9¢õŽ%èt¸¾µS‡¢¡ÞÀ¾F»ˆC‘58à°Awg~ÅxSË\|r•c¼1P+`n 1•)2úaž†ƒï\šÐbzv>[¯Åã@ýØl£Æâz5½Ë:r¤Õ#áÃñžpz„ÚùŒ"Ïê)ZµíÞ `[½É^ìey4lð‡Dúe:¨ãR¶\én7}q‚(Õ=Äàä…_§5âläšÜ|Æg¡Ø%ê$¢$¡ Z,uPøâ°Þ"=Ɇ5²sÝ¢Šn2“ùî6™l‘Õ!´­,D™­_owËŽÃTëx¿< Œç…Š1œ:ã¯Ü?ñÜôù啃˜o„È6Z?d„Ò ;SÞ®GóÍ/ãóI) \?†:ÕO úl4ºsÚ ë `êk)c€JIì>ÅM›–,s»üµ‡L)Ehë€Mô´¡/ÕjW€_®ncçÐSk1Ëóam˜Ýà»—³Áßg÷|Lÿ™€ìþ³³0”šì˜L;î¼êŸ¬;s|-Ç¥Æã}Ú ß…#k¯ØÎ×ÇmøsRbÒã«Ê­ܶ*¡TæË3Kcf Õ8‹.Ú®xîbÙ9ðÍI&§'<²-ôhƒ=ÍLÊ>¹¤“OH3ÛÅËáÑO²Í 󎓭2†»-Uk48wbmLbVäòþPþ}Óq„Ÿ‚ÛxOÁÒ<†ÕÌ2 Z>‘çÀ©*S¹Q ÍÝãN•¯Gf¼‹²n‡r!ñÌ»îè µzìéÂF‘|VÿGO‡ m”‹ÀòƒÅüÀ@¼nò¥Žˆ N£L¯Û^,C–Í:Ï} =‡ÌG2îÛ‡bÁ°¸iª“cY¿±TÝÓó s€±:˜ë¹‘±DÇçAMþ{¡¸LJïÔΑä.â@Ëh†ê“zª3l6¯nM²x÷¼žÂZA/eèþïOÌÃë7L›0F¾ÃVîÀŸ7 ë›ÅNÃhÌÀ~|_€0ûüB®g‹sŸëmy`Ææ ùZ•;+Û ÖnéÄBY’ÀÑíÐe|ek€¢b‚è[=5C°Ë‹yîªì1÷Âýú¡‘—i{ï ¯°tp7ºÝ×U1_,VálªJàzSOÏ¡JSÂ{¾v¥2‰Zl;siDõehÍÓîT&Ö QÌ’¤ ’_¼Çá³ï‘áÊñ0¢.WŸî4Û,+€fñÑ…˜â0õG½^©Õõâ­‰¶Õç_ß×SØ KD‚ìâ…‘.”–Ôe…Š®žƒöcê›j…A—’çÒñn~i,å~³¶&9«î~}Ì+¢‚§¬ÿÆÀôÀå‘bÔ/(ÇDÌ6’,Fï–eb¢Ž‘Ô$cÊ(°€qsVX;*]ôp¬‡Õ«Ÿ®(]4Š c4&`8R±–­Ö§ Ó¨æKx…}gF)crØAŒ£§¨‡‰LNy›¶ iånãfi³ÜïoDƒeã!zH`ÇG–åm»]E”’¿#NÐ-3:ü9¬Bá™ü&Dæêí´›¾˜t´7 ¤AœR¼ÙM²GÚ¬z€Òud;.ï%dXX}0>ÕÎó³¡Ô¤`èìæ#߬‚Æ\2Û>^ü¡ñòFÖçI­-hêñ>ÜmØÔe3G§Â¡}ä,é“m+Q«…pdáéÀn¨m˜±æAĦ‡ÂTw7dX„ ;&oÙŽË… Åí=û,ˆG’†ÉG=Ý”¶…34&ÌWêÑ•¯oÖmO‡C kÁf<£4¾aËnº ûnº a&”xrÛh~W€^pÌï3éGf@‘ÿ;´ñ4ê¸áÍ[*ÂNm³øB9:A¸­‚P¦öœ½MÖö|— XmÔ-»ÅòéL•âd·n˜–ºÚ÷7f¨LF7(ƒ™³kt„TEy0BèÖ6Ú’*K‚èàÝTí• Û#Ï…É>RÖ”¶f†‰¼ÀáI^¼ åJËÜîÂTôq48p¥ ~¯=ÇÈΠŸ¢¼Ùs­å}±ÍèÛ›RY‚ÔP•70óÛ õ»:ïá!G­=¥Ü-óýÁžPO)ĸ§oaá$Ù#ƒ?Ü™e1;l _*:½Ý°Î¶&˜tâ{èimXOi­Â!Ì2~ƒ„›jÚ°d²Kä s‡Ý >Bnú"n\àqœÙ/óÊé©ö´õbÊnAjÇÁÒùÌQHf8d¥Òì£\9)#;¯Ó=|¤*¤F?É*’{ï¶ ’åúÝ:¯QÑúxE_^Ùüò^IÿC•`‹µ¤f¼î½¤è§ŸC è~Ê¢8`Ÿ“ìKê!ÉysK& e'œI'8:‘Ÿ˜ÖD¼Á1{D “ÖÐÍ(C›rÛ¸Fê¨]~ÏÏc€]ÅÑ[£ÍÒX"Û»~a¿Ë#Gv+ÙýÊ£ —ôÁ­âk¼P—5‹ànl¾T{^Õ*(ùå!ÿŽúúÅÀ:¼½Ã¹ o¯Eè²½[)®ÅP¡ò)?Å%(Îj#À©-^a’éîY6,^Ò’âvß¿»KÇš~Ù…æŒìÁÅ“¹¬ù¡[¥“j«ÝÆí©ISayj÷ÉZ95Roí¸àÇŒ\«Aë¡\\X:»|ƒ[©O[À‹ZÒb÷ûmùä|ñ¬ö”’M/Žqíä™;%/(å?ÛªËhñáâìIe‹‰Ð/ 2J³ƒï›Z)FÆÞ„µh~XH(53,(k úz\}a Ýt×iHªëÓ à¨›êþºÍëmx”Ø ï×g9aa*¿qñJ3\§2ÏèÜ([f+3í¾YAR›ã†Z#bI+¯Òø¿ÝøÙ¿g»4œSÈh¿ØæU”GìíÒö_Öµìrþ=551Œ‘?U˜çK (2Î:±Õ‡Qµ-×Ý*Þ§ù¹;ò‹.E9+ܧI‰‚÷Q˜°³y¥%3Þ‹ À¿ÉÊCáû$Ù/=-˜»~)‹ 6@ÏkÞžç%Çå«?³£}Z°ƒýêß̺Îö€0Hcë乚Öꪗ…¥Ó§¡¾•®fΜù,Œ­@fÊ«Op€,9õÃêAL°S¤ñÿk,B9%ØÿuPQÓOa¥ÙÍV¢(&žºd2ón‘QuÈØ«+ÜfÇ´ ~éî-ŸÈÜp÷`ùJˆÞ·—¦±º†û£;Ó8ÊráYÜ`ïR®-6˜†œd„ø^zmùøj=%UÈŽlš–\^Z|Äö^q$‚Ú …,ô #bÔMãb‘’ xNž[šÚÏ6uüô(N­ X†KE7±³Ž%o¯­»ùÇë˳Ÿj…0^6ý«ÇÔûv*æ“PéÂo¥µScâÞÝØ¯g2œ©cw4º p¥•Ì¢Þ¸/ßšŽå9_m ø>\|ª·Ø‡b0¼Þ+t¤Ð‹ö‚m{Xw†Ý?¤E”®¯ckÊôýå†Tu×{zÈsœ.õ‡aÏrS>#퉃`Ö û5×–¯ì¦M0FÙB„è*XƒµÖhCö‹Åc鮌¬~×DPC¨¯Eަ·›¶t„ì›×-b@´Ü|$Ñ윲W‡'Ë­ µ"Ö¾ h$Qlv±²^ wùÞŒÈtÊWïA”/“sõ—‘ôDè†Ä^<¶áÜìG ó“Àʵ‡á–eã¢8K°Nv~è&vß¼³àþnB#ðE·wùˆSÆ5ù6î`‘KÎùá/”é •Ú7•ìPûþÓø‚a±ÇtÛ>¬XzÆë…õ«]—‡ˆ ÒÀê­}2Ù7£2ȶÆJõ´Íó~gðvýöêçißµ¯XÌxš+ª [<•oo-6ÙçS&ié M„HRéÕ]/X°X>*K¶Àï¨GH—²KDu•w@õ<rFà—î…/íû­bv¨}7Õ™Ù(6úf’8¶ý@Σ]¸Ü9K+,¼å˜ìýSЇ;ä aŒ™šQmÆæÆÃŽzò»ÓD,Bœ=ˆ_¶fã«Lw)Èžœ»?+`„Ý?¸‘?ì˜ }xˆP]lK¶h£¶>kx·³2+ué&+ÌT÷rÊùñÀ‹ Ї 5Ñbׂ74ØË}Vß\3ÁüÓ{ üÅ ³1c}îdt™ÉÒuÉny¼1®1×òf{^‡0NùZ=Û÷ŠûðÖ,ÏÛÔsÒÌê©ßHV«»–&w†ÉÿÍsõÜÖ·9¿§E)™Å†Ý1+VvPš(ÞÞî©''nŸnÓ€M…Ñä†;NOÃØÚö\ÖʯÔJ¯®'!4nƒþdÀvèÅØ¢ò˜i*/Í Œ›(JEÖ„¼ùÉyÌ¢WÃùc~*­¢|l ^—_]\º3¡ìox™\Ú¥ &øÙéÓz Aê†O¸9‹-åû˜µzyÞr†Dã&‹r"(e ŽI{™¬­¡˜‰=hOQÀX3(EÈ2„Œª“‡ª¢Ïl×[óÑM×…nèlùvÁúÁ`}÷¦Óÿ†‰Þ!_œÙœU!!ëë)ÆÃè æm—òµ±?¿¡[@Œ €zɆaöËKS]X-¬‘vëÚG$åmËF½U¿è'Uá±S.¶(²6+iÑ|UYÙbמ-ˆu Fg>Ë µÿiðD ©z_˜Å|›Ê”‰ü̯CekÆÌ¹ô ‰{RÍJáÙW}³÷{—ÆŸ.éOß>Vý}ÿQ+UÄŸÅ­œbá¶¾8®•àmómæm´¨Xa!¹¥mëx†øÔ¥ê6Û°†F) ‹ƒ‚‰Émd~ ÆÞÒ& Ü5TîqõSµð/}Vñùq¸Ùè˜7ļ~†bë–òªºdZ¡‰…/¿XWñæ÷ V|N]‰z¼KˆiøãØfµ×èwQ3]²œõ-6ÿ,·ªË[µÚq£—g¾²zxû•F ùųõ‘3Åð{eº&²6€OeØq%“Ó2¹O4%¦µÑÕß7LíËá¯êYdQ/mš²6†â;˜r%={ÔÍ.2£Š9lÐW#vþ¨•fjºUOÁ³ ãb‚ª5ºl|ÌXoÞ’Ô._XÁ91ªàî5£&Ú·5À»x¦¶E5ÝcÇLðæÄ_Å$(nÀŠÝRë£VáÊÙ¶1ÉÅ![¢½¥3v>ZÐÑæ]t.AàülÎëè·ã¸ Xø·éÄ ƒ‰VÚÃ'ËÅ9|½¨Ž¬w¯_1¡Ó‹[vW‹N.k%ëø Áºbeˆ ¦Ø³x‚ŠaÅÊØ€…"gˆ_ÉóN}’…â ;yú‹¹L¦[Ì”E~–«{ŠÉ„JÆå…r[u²i¶°omïuᘮË&8G¦æ)H#«=ìÄFü$çÃ{+éô­µb¤CÊ]Wèc¶ÜÉc|œ«yqŒa]P]¹v¼úü9­NËUƇ¤Ç.Uwq¹NT{!ÈØxŒ"x£g€m‹2ì ¨£ÈíÆ !æãj‘PÌæÛŒñ)Ð%,Ìo£\e›ïÄ«ä )à6o¬ŽÈEƒW—ðk9Â-Ún³J„UZ0Ôcv—šÉ ×¥tUÆ8i63Ö åÐ, $ØãÐ;C#ñX›9´réÇJÊ,²Õëµ0µé_ÆÀì2}!•ì¾PÊ8:f, h/ rVb p[I0åŒKz\«ÖCe≡#˜Š@ç-#rÀÔWÓy%¦Ã+ÉÖ,5eò;FH0X³Jm„Øx‘óÚ*ÞiBÌëD^›‡žµ¯ûÚ"N©'*`w]Hk®œ3t]Ó Ð¶¾T[`(µkÚ¸UðŽ@ܳݚžA® û®6÷³w£xsᲩ;6ô„5ŠlS&©bÊ%}Ò¦žLÏΰ¼gw›‡Ñ¢8øê$î~I,?®ëÈJc÷>L–Gì$š¼R ß+÷aü¤"µh÷Œ"C¦ya!šp'—Ü™þinŠΈ ù°[zX}ÚÛ^®(lñ¶K¡.£±Ëýý.W— Þ ̾÷Ï`½Öl眠‰6™Pt¦å€19¾WP8ã¼øh¤Á1Û›Å~´ ·FˆØPÜΘqØùÁ%zŽr=t¯Z0£…z@Òì;>ìkµ"¬LÕ ûcûÙ2"ªnÎE‹.\ž*I÷al’³]¨lÜ =,{œd‘ÓïlÉDe1Èò¾@ë>*X¥K/¨TfÎ鉥1ÏÁÐι²úýØ?<½4>ä«ÇÐ{‚*|ƒ†›}±Ã/3 Ç®þþ?›Ið/9Ê/oã}gÅ)è„<[OíG´”YÙ×õ”mÌ\xšø¸—ÁÓ}öS!g8uø.nxpF†bŸlÏNŽr:5³NÍ$”S3‰VËB¶ïN³ÞÂ8‹Ë€õº –çN‹€¾ÇÕ§æ; ’,°Š8¬wšÓ‰EiLc”•Ý“Q¾úû!Éì/eT–Vÿ»L¬x‘†|NGVí5Ã9&ÉŠÄJƒ‡qÀ¿¤¨n­Áƒü8,Ws—Ã2úïŠàJ3ûn²Ì«dÂÂc…‰`ñá×2³´ù5*ŸÂãcs5Zªp}Qõ ‚á!~ðrC– 5à†TýBÑÂ-Æ´Éù{6Àúb³:äOp« ^ž®¸mŸ–ÁÍ3²ò TkÌú( LEÏv¨¶“ª™@@ÅèÍuûzĈ›>C\îϰñÚ+L†æÔb¢áñÏWôè«Iq9ÜP÷'¶'Žw@½)­„˜0· ïL[ q5ž÷‡àS‚7×ðÍX!}#´NnNñû»æ‡ ßÖé6‹øqf÷×cð™“/£’[‘zJ‡4C/?k~G¨N§FÌ ÕÑx¶ÀJ>㬜É–:‰rÓMºo7M±jû±Í©Nûf«°I>_µùpN JÞ¹UÏÉW{‚ºƒø™ÒšƒñÅ p…HdªÑ¿¯°råß?Û y¥o2òSW{´Bg˜ÌÞm ø>2 Ôü @÷+·ãMe {aãÑ]׎¨ˆ:±Ð8²1 ¡*f£žõµòg‚²³«0÷Ðaðñt˰Ó]¤hmÏ®:Tº—6Œ‰V=k =½[ uH/á‘#Ù›º:¯¦®§ÚLl'f®*™®p4’ÎPO…Ï‚âÂB Ëv+ò‰ñP}- ä½©ÐÔª[j‰Ü ‹çyïˆÛº®làâξïÕ<²žrû DÙi³0) =¾¯3öîéfE^,×Ïš9…õZ2©êåúì–×<¶èB­¬|˜VË„ ^©¶ž®ÙÞ±²Hª]ÜŽ?õœÝJ¿Sðwç_LY,åaS^§ªÐ^Çw »- ëô¤‡Ø0S‹ñBîÄÔ…¬ž+QF‰1?ËlðÉ Ëå퀞NW¸Gk5µ*ú. \=ws^I1ZŒÓs#²žÅ¿ {›ÇMýoûÊy[í1ÞãÁ<‚©S éõ+à— cwØ­†•¿ç½6’GYÍcƼ­§ªBi¡0)ç¨ØØ×ÖÒvOËêÊôqÙïqš,w¬Ñ®!)ꋤ—ìöW®ÃŒ#`2L#p•Çýó^‡4KÆòÓ9†£ëYŸààÖ è[ùK;nWì3:SýgßÒоòàd°˜ðZed2Æ~fȨ̈pé!fÞ sü±Ÿ@ÛÃôºã”YjÏ>‡G‘KÒþ(3›–µS]³bµÊ¿ÐÌÇ÷õ\íd”ÚÈÞ–@Á5æØv£­¹‹*ÆY„Rä™Pï¨8Ss%„ÂÁh‹*i¨HCO½ß& ¸¹)-›dVS`@*ù[´0™Íà…üÌÂùèë9™~cy}^N½öš?A'T®CzOö‘5D.‰Ÿ3"7²ÿŒî=Gíâ—àè^KòÖ«]øëÑÍ™Ý1f ”aÍT _„{T¯‡ S´A%ò=÷ÑÝ©´¼gI(êÇZxÓ.´.–}Šõ¼ ¿˜s‰Ýçx‹ª­õ”3GLoðâÊÊåÌÛáN­Ü»<’C#ÝuÂ|¨§8&ëg(%‡qV‰v©ÍÅ}¤´°úçxVÌôŽ! ªº:@䤶ò™ç0fÂÆ£ØrG‘t@Ää ö¾GfMpê”35ÅYèCR*ƒØ9‹¥â7%"µwD¡ÄÉ=â32k‰Ð#Ñ+ª‰¸ Û)®¡ Ð{DÀ/DnÜ Öÿ†§jÃ}^@9ˆ˜óŠêã8í<ª §Mˆ4Ž;c+Þ/±g‚‡Ê¥öŠÏ]ô½Qºûï>z¿¶¶)eúvéf­„¿@‹Rµ0 Ç)´•*`QÄU q±Æ³Ž¡ê•Júº°ËŒa%÷dæ|¿¡˜æRókšì sȧâªKlE4NßÛO,G3ÚÆ³8@?ÝÂM±MyR~!è0ÁyÐàñlCÕþY_ÿl¬Ç?eFW¦‡ ã=)µ¥3`“VxMcÝ«s‹Í+ód…„¬VüÆ Èr37Ë«V0ceãKÂß‹ø¥Úc“`ÄÚœAEÉÑ#E£·ÍãZY*­¡„>Y×!P‰Àqº„ ©%·Q•»$ïZeÞ’³HU`{lîgCVAüP<¯k œ [’å.Ó¦Z æßZTFJl~檖îŒ7åÍêüÝŠŽIO˜Ü~ø¡#Fémz:‡Êøù˜mT1¡¢u2“ÊvuHàg`ßæ˜Òr7¨—pOaúbÁœ âÕI{$͵¬ÞÜDUÙË/7¨˜Æ¨‡>Aeɱº"hxÒÎÚÚzIÒö`Ž;k8°i"HHŠ‘®Vìbe¦Oˆùµü²ÜìÖtLÞBû9Y©j9õ¤vÜÞ|. *vo…¢: ECB.9qˆäÕ‰³¾ËÙJÔ3fT eµ&öV;ò# ÐÕG_p#c.ùe·‚îÖ"›ø¹DD žjó)foŠ€+ºô V涬oæœR¥\m ËÈõ¥{° 8¿‚Ò ôëŒ6XA„…À§[÷ç¶v¸÷XŒ»zùé´ï£³K|&öâB†ÑÉùÒ²þ^€‹ÖOO×Þ(EŒ D,FÍÀ ¨l8wºzé~ìàç<~¦VUA2òÊç¦ –%“ƒ ›ùTJa ÅË‚yɲXH£ëá]Dù†ÚÜçAº¼ü›—mã,ŒsöÑ¥X®´dY™+Ûó=¶­¸\³ÚfrPŒOŒŸ!óH3ƒËK €*½U}:ÀÒ>³Ô(ÜöL%wK¶úlË”5çz]ºRôoñg~¯±©¸ùÆlÝàp%apPKU×ÇêͱÕg©©LSñ¥‘8le’Íòr7Û&ÌŌܧ„›±Zèoûh=Pü¥¶:Žìô5¸J½i”¹².Êï…ãC¡Ð ‰ãñ2h:C“Q¬ufC°ÓÜJï3•…U(™Ôº† ¶d1ÕôR’¤c6, ô±õV€V+rþ&Ý0Ç^0ç‹§q, tYO!¬L3À_„Ò+¨·ÇF$P•e¬ËB&3¨K£@&ª]]¢,,ò˜Ùýaÿ·V<Ãk˜××JlçK¥Uè_®C‘IÎóö_Kúy}Ú¬Ö-ji°œ‡D¤ÅP'½aìZýÔŒEnåVÖî3»2è„Á¨ºb)çdvË¢ïÊ’•Lúè\}4½Ã;•Z¸“¢[KEv­¬RþJ|¾æ¸-½R‘Ý25ì­UüŽ05¬ +Ümnï,Ò+F,´vÛóT¢@†W|EjÎE·Û/“pF­v³‰ª M¤óù@}·ºq?‘¬Ô:a}©†Ez'}…ÑŒøÑ½œÊ¢ «Ûdxç†ZA)»Ÿ F`{Ì{åP¡ÅêÂiQ“ßåæ«¯³’¹¢ˆ'¬sŠ"ôJ6Êaòà+(çå£ÐÉaÅ8qŒn• •*Ì Œ¿¤®Êíß…7=Ôb”8_¸‚ƒ«N´þ¼š_Ö¤ˆŽ㯵ð:øá ŘÅ…OبF–Ž…ÓƒóPÇ®Œß‚fR‰sIöõ”aËr€ôŒ35<¨çˆ¾öM=…à°`ø¢2™*÷UJ¶ê)ܱi~×uµ!¹F«½Ý@”#ª4õ>nå ã£v­¯¬?BÝ£F±nœbûb†FÁéû„¥žÐÊÇ0>Û`ÏK`«ë{빨Ó(âpX8ų̈q  Ï2,Ó‹¡)´·àP§Íå€cv¸ž‚qO‚î*VÄ$Êéñ¶¯V ©-üfƒN~E~ªž“¢G¹[îÎôÃzëA=u÷fìMqT|ÂIÒßÇ.˜|øÎ¸ÇÕ¢Ôô­AƒŽ…ôú`E±À¾¶wÜ./‡Öé ôädk¾¯×je¬ÞZ7H“g¬ç*6v·¦”~&©³þ‚åÂÌGØÀª›j9ŽG‚¹•Šlt33²UökXùbç²Vxç¹z[É=쀖„ù¡ —fà CüvÊ…0²¬Â„âÜ‘—Û3@[cì Z˜ÒXÔSºG]޶RFB×ê¿K‡Žä<2”óÉÁÚÒiHy©ŸocØ„çͳ&0—`qáV½­e›í—þ`¸Qúr!ìg¨§¾müwÒ•h.܆ï*¾ZOuxBá¦n½~·T®eÇÿƒ;õ.VUHêéåUôVÔR;à¿®÷1ì0›O¼é?Yš¶|Á,xå3¬ÚIƒì€3ñâ«Ýu/É0„-[¥Ý‘kÃl¬71)>ð’ÑùX Ü ²n§~XÔŒ¨›§&ö†RÅ0™þ¢me\Á|T°dUuhøáJŒÄeq*ùçÃ[ç±V?0bƒ@ˆR©›ÕæëÏì&M&!2Ú"ZÁ§ ûºæ€|p@ ºB¾näO'œ®/É–êì_26l5QÕ]õ’Å£í|‘¯Ã)dµ_`X¥ògöáÁ­õW~ظåW4ûbˆYáÚõC@€ÔpÇñÍúÓ33U2L5»_Ò‹ˆ(mÙ>‹û™ïQÚ™…”°—ŽÃ ­ÿy¢ek‘≺èñ 5É*ƃìröÇÑ“ë‡øÑÿHþ=:7p‘š”eØqŒOa Û‚É(ɳX ºÃÞÚäÃøl­ÈÅCK©K¨%Þ%÷uW@*ɶtè(bè@Î|è$õÐÔ$/ظ; £ü()3¶Oâÿ"Í¡yiyÓeÊå, bþ—öoDˆÈÓ„‰ÒE0Qzex³pzQ–ü^ã ‚8,ùC˜¤–¾¼šBiáq˜XÀAœØ˜(.³Àâ "Nc5 ´,ê,KÔ^<,ÊÿÑ^5ÝLüŸcy¾UOE”GXôe.±Á[ä ‚(ÝÏxdwŠJQSÑô@~ROÛ‘­JÈuNUܪ*MMÞž‡F¹„;á“r ÞíšÉN³Ziè7 *±¦9ŒŽ¦»*A4{$ûzÎÉíÛåƒîB‡fÎD ï^&3´æN;Î@wØÅ«=PØ€ÎXÈ3KA'VxÝøA;¿ç.3™y+³jo,9=oT¿àŒËÀíãÈ4Ä5]ycuÙpÑ1•a2fP»Ppcèfgb3¾&>rß@Ijpû® ñGöŠq@}B+цÙ|«çä\r:ÔtCX\µV3†¡]À“¸ø„&¶ÀÛB™ˆ 0ó²CØ‹l_–`|È&Î2ÓÒ‚TQrá8›Ð%ÚØxMØýƒ|)YzÌá•èâu§q #[Âo‘ÖÙ”—ꩊ £ÛzkyñÁÓu³3y4%j Ë£Ò= ̼X½÷K£ƒ˜ñ}ËÖ´Ê3¦g»2K<ï.ßA— æ4œtÃÿ2Y:­¸ûÆþ…í9›ŠÚr7 uŒß:-2[ƒé[‡?ÖŠÄÓºEýÂmÃâA4¼ÓƒHcî'á‹Ik¢'M@ÐÂô¶G!˜6À°Cü4.^Ös–$Æt7žAça[¦ŽåÖÎÖ4rË׬¾íÇ6®ß44ÅŠò|4› «G†swÜtpš~ö»dÀcà2f0AèÒá˜ÝBAˆ CÎ5;|ÀiDÓáë”ÒÑ~üNÁa‰vfy™ì™¸³;ÕÊ€7§$¶ ~è¾3x~ÔSêÔʳ’È~è•NÉ+ÔÊö<›€}æ«Û•n¨€ ·ó:Öá·ÿ•ïJ¦æ¦îÙdœ!ºyϰž@Aê‡ÍHõ/êÓ}Dd#6x„ö µÉ7Rˆôv5C å!ñô+~Jh0SŒ Š:’L $B;æb¨N|UX0+G”õ”JÔ†rMçÕ¬‘y"ˆÙ‹±€e¬”±Z­$ î/½²2çXˆ«{ƒ=EUË!Û0­ÉµvK˜»[ÉæÌ…\¦b—ZmôIÌ"gç18ëŠ;`bOu€ÉFSÃàÞõÝ'êM‚û‘î´F–éàD +ùa7‰æ,–rГLîÚÖ3çxŠÊñuoæX€ýÊ =ö±Ÿf³Ëõ„dõ—ol.ä~ÁóbæüàBô»vëï:¢hñº¬£šý£Þ·®{W¸ò™ EÙŠ›6J ,3ÎÚmí±›• ¤Sè­,ºB¬ ú5V¢l{qƒàÃüÅÛ²Õ`çFÄÀ½/¶fN®•¢ŒºL§” e'ÁN\40»´wbxl[»^‡ÜÌyzRiMÝ«výa»P l ä³÷:ëä’6\¬JçNÝ"8uÈ~*©oÌ6ðPOY¥ƒesD7ÍHsÓÆ1õ½Õ|†ÒgÝY9˜Ã¤\îÒ ;¯/IGc³ˆöŒsøê¨sšh:{V/èoëA<4MñÓñì²Kí<é à°-»Œf½·z;ÝS`´aö¦žÚð°mu,~E½ãì.=.u«‘”Œ¥xn¨Xë:¶ßà ¼¢°ËÆJè‘ÁŽóH) I/|GO_ª‚SŸF”\Kâ8 e=þCšòZfóȦøPOíNè­ô…]z{›³%04(u§´4OM=í,ª§bÃñ8…Ã̦ÁÇl0u+J²=kâ”о q´~¸ï\–äv{Ô`ÜÚGöHAqÈÑL–]¹ûð¶1­Õ)%$p,ÿü<¸êfâb—M¼W:¯·"³ÁhR¸öšyá(³ÒÆ=1áà“Íõª ß·÷çwL#Ñ,Kg‹RwÔûÙœÚSOASe~NB_ÍuOxÒŒÌ —9\Ï ¿9s'µŸvdÆZÿ²”¥(bèLÙ]¹š;“{l«Ð.2Õ2­76_Éæêj‰ðì¾7ßÍqÅOÄCX}¿¿§#)m:±CYo«L»!N±1üwËHÝ¿†©3éÏæ(ÌÓø ¼—~Ëp8¯QjÔ¨gL€Km#õÌ4³ÆXêŠ4¿ÛÓͧzÀàçì@0Jʳ²PõšóÖY#®¿ÏmÌO˜z7«ÃÜ\_3jŸŠÐÑüò*¡î~®/lCA ãÁ™¹2¸/€Óo®¦ ëa8âÜì袓ìän¢"ÐànÔøã³Å®+N.Ÿöº@ÆcŠL(ƒˆ¸×è>æñ™ì÷xhËRrz*Ërä$Ÿå×Ú¢P™Ö¹!U§}…à}ºH~JmG,UyèdÃ-–:ØÖK)2©m˜p⚊iP@û§•¬î¸,ÇT¶­aQ©º¸ß:†|zc$š½Õù‡n.&¿ùÑo0k—û¹ž:r—ã5}‘uþFøÃÙÆ¦Ÿ•½±;îkA°ZI‘õÞ¶¡ùáèŠD¸›E6äȳ düi»Šâ:šZ²U„Y™ØÏMÿ4E[ªùŒÐ݆d_ÒÁU˜EËȆ°ž‹p!$£G·ä…ƒUuÚ¬I$YuSX*‚Q:”tm-ŒÖ4¨a¯«a¥íT“TW¥ˆåó‹ºF7žöy©¸$KÚÒ´)§èÕÐͤŠw§žºpü¢£V\¿MÑ_BÖœƒ(—x”}W+¯’ö âo:Äà L”%áµvè#ˆqÐäˆ=Êz³r/w,¦Š­Ígª`Ÿž}r¬@ž {WÙz #"6k[b/rƒr#WBâN=©)Â¥EÎÕ¯k«?L³‡ÅfYÍ4s Uõ:šžÓ®ühßgVó8+ S¶jaîbx’ Z3Æî(qƒ8êÒj;A\R£ÿŸÔóî`­,3f½K¤ •:‹¿p—†srí®§ì28÷cŠm7ÒJÉô³z*]^4äða”¸?*Ã5`’pW«×I&7ôå®zŽVwÕ–òê»0Hl·Å —!2V—,(ÌO;9¯î‹îo…ŽÖƒ€‰±,7,Æ1ûa„lƒÒ~Ûòˆsr ñ—Š Úº>÷ÌVä{¤ñ¨ Js®Nîý™Îìßg%ÅzÁ6€ÊüóDÔÆ§a¾­û›ÐïvØ¢ç÷Bm!Ðf›Ù6³¤§ | “Êǽ‹zn³à¹4 æ.ñ"ïÞ,n½ñ½ÀµÌWg`–°ý¢/l{m#AQšv%K.mÍb“¹ˆ|õP3[ÏzPžÃ~äzÒk‰Ô±~ÀÒ,OÅÊj'%yuÌUs¶Ã¥d”›Î nWxhÍå*±Ä„x%›\xG` ŽAõ¬¡ÍüïP¯›Kl>ŒX°¬j’Û„¶\’š·ºS·/w¢¾ì&>79¶â·¾3™½]Ÿ/r+Ü2S{:kº5ÝNç Ï€›´¢Û¹…è`/@NþŒ±ç¦A¯œ8×À#µ–‰7*2:Û&–N¸ý¾žœèÁ¦Ñ\+Îr”k'|`vµž5ÿvm¹Ä,UH奈‘9®¹Aƒ¡ÝQ ÂÀªV‘·žðÈ‚1LXfŽufÕ“½æ8ØÒU£.õ¿Ã Š 'Qô1ê0Xh0±ÕÅ{Ô$—a,´ÝñQ‚ŒSî(h ¥•{ÆDp˜>´?Óò*ƒŽ§}ú6ÞHZ AÂ@‚R)\êeÌÊèi„Êèÿæ†Oé!zú_Ë ‹OÊs¢*Úˉô¢69ÄpTgé ¶åh¥ SDzJK&ârÐï®à[ëÞ‚ŽÎHB´A’ÕuCìVJGóAhë• n T@a‘ȹ²´B”œ\Ù 8Y)׋ãühË8?²# |R¸mÆtá‘öPO­¼Ì°õ ®übtU9¾C¥>ÀíbçÑé3*؈nd2 ‹ID¿ØÔö=ô´n²2 )hyùª]‚Ûì±°æFH”Š+ø}Î(ú§ 9áþÜ]*¥ÉÁÏ¢0ó%’ˆÒ·§!ÏCyW–è¾£¨ ƒ;áyC!"Lû¡:ïVâš3ögÐ΢j>]ªD±³Ž€±ä¬+"³‚q€­ ^ãý¨ Oo)ãï ùÏ(!Ò%Á‘Ùü¦'>ÇÖ[(f0õªÎ$ºÆÊJ¹Cî¢NóàV¡9[5ñWèêl35JÀаc‚hüCF©ô\ÈÖ·„r=2°Øb+X<£m-Ÿõ†Z-ÝÆ‡zV‡0 ©½Ã`ô=ö{1å‹›»g {A†OßZS«Õ ´lÞœ7rj!úal?hÌH”ƒ¬pÚK©é…'q±÷²ž/v}Vüý4&W÷ÌÒ:ã¶`j@L‰ìkë6Û •ãQØE6Uˆixõ&Šú´©‹½g¨¨–£ä«‡FÕ—µ9üíÛÚâ(0!FÝ0±«0Ñäql¼×i$ ¹y„1î×S»[ê)µ/ȶhgµv¯žòw Èx*f¬œA¢ œGr–À 8` /ZFØ÷z*ŠYB²®>…e;ZêæZí=²÷=Óäžšœ TÌÂÉ0,íè>Nõu}„æÅѱŽuÇ~RZq8hA ʺ¿±eéösèB×Ü œ^:Z=_“›aÑ }š•éa‚õoˆë)N€µÓa=°ÅDìÅ4úoŽ“}Gh”•ûº¹»Ú”.Ç%¬ n¡K„ÐvVWž VE -‰yƒ%tûª3ù<–%± n8ka—„%œÎ#ƒüHmÅÔB¤«‡ hŽŽZOG´úX´%4¦´ï|­¾Àë²8áÒ?ݨL­†zªÉ´„ˆRäØ7£þÚˆÒ‹òƒW°]Z=<É;Ì®ZÎŽöÈýG÷qÄMÁ€$‹ÝeKãb²06¯Ø`§ìX°¸lzo—.ŽIçàÙ7,¬ wBþd­6]¢v,Ó›v‹O7pÒ †°߬[ï` oàÜ@@ÄàU?[Tði``Y`0ÎâØ¸Å¯‹-‘x= ¯yÁ嵡2X;du˜ëãÃÓ%»°WÅêÚ`ÅžÅÚÛ×:fy kócb º%¡B‰É¤¯79œ)ÃéÖ}.ée¦E':V¾0Žvä·*CBÕ#·¾¨ü7[Ó5:@,5Gû«²ù ¡Á¡T³yNHa‘¯$_¬ö}ˆ²¼©¿{ýeÊFl¼¹lõì¶x«¢´aú¦ž‚Æö¹j”ñû,¼zP*5ˆ«®Kô?ê©ZzÇb ^¿ 9ù\›I‹µî‰e‡;ßÎÚêàwõ” 6Ŧ:†Aähét Ï7“è‚Ø;º³dT¤¤%§]7g”…A]óÐ6÷süô^Jzð\.~{ÃÈÊK®·h‰í¤Ä:ý]=u‡ÖyCÄ'܃ÆÜ\¢Xþ3vrVh; ±ŠO¶1À»]€MMïå~g{zî÷#AòŽÌÌßïšCßÃP˜¯h7gË,ã©(|¡-áq!.ŸÀ–õ}&RlK­²y\Nnq$] Ôé ÕDÂìä®zrçó`=¤#p·6ÙŒH¦ñØò¶é?q=%®öͳ ²4eÃz®jíL|&—®Û°‚LSOá§%lY õû{…Áâèâ©]xïb­‘ü-™ï³¬¼ Wß~õ÷Œ+1·­1µ= Ìf²‘{þÞ‡%c!휘ÞÑó°¶rO!J]N}QYàÃJ¥U6¬Ûõ0è‘}b‹ÓêX 7:4$‹JõTÛ†#óš»ÃzÊÄeú|8o8W‹ª\œ4B2ß(òùqêÍ–Û0ÕÈK²Q Kt=`íÐÖ̤©RóÉæµ‘Wó¡s‰¬ ïuàX¡*Æ8û÷CccOtkkE4j‚`<ôÄ l¬Áyÿ‘6ÊIœ‚ ÊÃÁY«Åóí¤mÖ£E/?ø”ùšm×m§Çö"=Ý‘p2à,ê,½ýu #‰8‹£¶ ½žNŒG0À!«µþ‰!ÕïÃÖý¥õ$²Áî Uó’|ÿ3Î÷ÑBn3¬– –š1¥ú’½ÚônAÜ,…Åj Z2Ä¥¥îÁÈÝ{i©f›“I³Þ>KcÓ"ie 4J%³F ~ȘÿaÏ‘v’Ê(*Ñ>“å³qÄ8J‹1½Z«YtuŸ¨8‡Þ˜µ¥2«Tò °¨[¿_z6ú;Žá™ªÝK0Âá^=}P=ŽîW¦Ö±ƒZ‡È&pYËð?žô¦]%œá±õTÊ`ïÿ©"ƒØ]Þåë¹ ÀðNŽCõJ´l{̶ßX¾‘²E€ÉjÌ Áaã̯Øy‡OÐpL68‰`u§hÏÓ5㯱Z¤Ûµ&XVTÿñ güÎn‚¯$á¯Ò¡šŠ„ÉO÷ ±?¯žÛêmµ0}–*ȲEpTÃ¥ôLÛÊj·¿‰ÂÊ Ž5½ÈèUq¶ ùâbÆîÞ<ÑF¼”0gßð1‰4S»x–°c=±¬ˆôƒ­÷Ç „QxbyÑ• zɈÛ5ç²?ƒÜéW=«j¨3éóû/—mNV<*ž£ ÐÃXK‹¨$ºQô1âªyÇxÑ!réæk,%’`°yFfç`L¿L¤VySr7!˜àÞtkË?&Åè^YÔ×Ó^›}˯ø…03+SzRË¢ÎvW^­Ui?;1ëøTcVdB\¦5ýmÇ} Óþ ð<®YõòW=ׯï—Ëš\‚¢û õèºøí)B› x¨Ø_EúC“²+<Ñ9¨vß?…¦1¶g—W³è.c¨ðØóÙ¯àâÒΉ'×^˜' ÝÕ¥i’PZë×¾6  ßX^ÄÃXŒªù8¯ŽIâ;€N›[”Gô0mTÒ x°4ÖÌîÅa%XØÆŒ¯/íËVУÃÁ ¦§tußt 7Øm²™yÝ,ë ¨&t¼tÆ>m €LbR5©„úV23%{©­ ¨˜Ýðœxaö‚£½Y ²^qàn«žè‹æÐÆò‡)óV¿•È6³èò§å“ËüèW´í[PƒF$bëj+§ÒåÓt í¿-M­£ÚZV©]Sraº”?1  ¯SévTÍžŠäœäÜ2?ŠâÒõ„¤Ë¿ëÚ=V%Ž]Ë¿è`*2ð¸%Ó˜ÄQÓ ¨÷G ºGˆÉ1:Úíß¶·H—7˜÷5œG¤Çw®2fKƒùÙkq¶&;špNá²üŸ^Ú4úW/-SÞ<¯õÑú>@K벿€ý¬.¥ ¦ó÷¦^~Š üM°\;C£w·©˜A~f»[–^Ù"†W6Ý+›üs)I¦I§V„=K˨’ŒyÙa˜çáÿH›NS-+,ÿ»ûØxúbh¦J>¨ÌÀz-{ÙLÆSóæÀ³Xž\ºÃšj…{˜P=!ÚS²ëæIeìèÚºŸê•ñí•J³!!C¥uâzãkmØP ˜fj3 “ÜV¸ce¬BqlŠ ðì‡Î]÷¯525YR# A¥]ðç‘G[öÝå tò½­gDe|n~¼‡šL¶~¾¶°Gçå-×Ün³'m°þËy‚»Ò]†žB›æšA£ÀIjDJªL°ö"¬^ñ*š ò)xhj7ì.ß5çê)ÿŠ&rï.Í[à Ú¼*·µq¼•Í!3Lwê‹ýl¬Ô†}¾=ë»Û’¯Ý3VÔvïZ'ãVƒ‹d½žg¨4&šxxmr·>}_+Qè&ó =Ýnxí‹0ìm¥ŠB^Õ.·¦øHE¥LSI-©D±=N7?¼Óiÿ£q­.¸g´îŠ8K‡Ä2½ìá2²Ñƒ)èÄÕãâLEíAŸFA!AÑ›·ç5¨ß9£ÔýJ" žÄm»]OV`ëS¢ƒJôÌ4«áù|w o:ˆÚªí†P¹P›™!º“i7Øv„ø½ž©QÉ­‹vÔsžâhÒtBbúÇL]diùmÙFÄ‚õX†èäÇäcV‘F¸«žÉÂŽî.ì4Vû-ÝN¢^™¡‹•!ÈÏþ˜úfBê–QX°FA;•T‹Pv›²›{ä#F wSLFlråb=Õºøk±SøG+3y?²×¸Û—Ìë]=ši¥@½©/@(A,Ħ:ñtit ³&æ­¥VŸøÄ‘äid£6‚~â!¿æ( #fvCddKßÔ\«7ç`tcEJcÚaV­_sö¶þËë<‡f÷YXÅ / ÇlᜠÂëtU,’`f¨,sPˆ¾•„½ÚÄ8—ÆÇòìpå1=ŠÈ\`;’åq àícÄtã0J¥¯~Ü<ËBÞ…k·¯®k ð¶þ¦€RšfFe:uEŽÿs6Èš®/¨ëçYß’7*9Šz*iÅlÄ)šm°ËŸKK-{¢mq’ÈÓ,¼¤gØÜQÙÝ2#é°p^+±žkX÷ ³/i­ÅîlÖ%]åÞ1¦5"°êŠÃ3‰Šj Ó‰©1UÈi¶„-0]HÉÚRqõüh=UQ°†Ššhßÿ‘eXjŶ\Û¶ÓYdyêíažsÚÑÒÝ€‘néÃ^,ÅAÍÇSßãþŠ —ûw–Ä*³´äK»àðé™pÌârË6h\OrA•yù+U\;Ð×j—D}EN­úP¹°yG°ŸJD²Ðf£PªÒÍq°Éј$ hI£¤©ãã´™,¬ÿÆO\³j¿Ÿ‡0ŒÝmW±2£:f+xÉ2CwB“8âdçI£9?|¶çÐ8l¹c‰œZV6(òˆ¨ìÞyC7;Ãèï=Л*JÎqWâ–}@ŒìÍãìz ¾5ÖO2\Ý®}’«¬_?e%.2ÔÏ)œzUn§ÙÍ¢òy=¥cµåT}§}Âf­}Ÿî7Ç…•\yC“´2<¨§—Þ C€)X9_·Œ ²/$ϪC³ œ`¨“õ”Ód¬ui¡»ãzJƒöäuÆÇ’­ lùŸRƒâ݇áõ½+ädýï}ä+{cqGô⦺ˆûT¼ñ1o3=‡¥N¢+ëö4n€î …µ`øT[î|£yÚ­ÜÉ\W°Hê¸9ek€~š?Žà&WjËûÐAÊäÛš=’‰® ¨žEÚÉÇSf¬ÙŽ­i‡¯ùYÒmé‘Y+ûuÆ$‹‹Æ~K`Œq,X"%yµˆeht@µ…´2öºè”\•t àÅìÒ £Íöˆ·ˆ[²CïêñêÍsåWX:‘€!¼UÝ.øE”6DÔ\Ð>© ëJ]a椵>á;œYq7˜/8£Ú‹êð«r‡’+‰.·eKì~Š¸ÆŸ,nöªL9Æåæb5}žaÍž=r¦?Ò9‡¥z}u:¯Œõ Œr t=º¬àÙ'ä4Š-³3Ctž²z òƒý;BéHŒñ~Y[/€n£Œ@ªì‰Dô¨xF5÷ðUZŽW7*J| v~ôI+¤¶6¸WZîjÀ1ÌÕÞ[[­& «¤pÅà‘«I|ˆÕ§ì›ÔÊ“(~¦/«Skx,ëÕru» ÿ šC¦' ,Ý[TžaLe1x_µ"uW .*¦°ÔáH-™óß¼Áý¶¶Ì*¾¶¾pe3ÛgïfØgÓçˆ×ðœj°I3Šh_¾Ô¡²˜ýE‚WÃå®ëüÈCäy›ƒé[ôdt&¦+@Y¬Y$K0÷Dê&m"<œ‰Â+û{ƒ2Eã3t ǵÚnËìæ)?Ð3 :IJbØE0.•.fAvï\]ÁåuŒu«Ù/åYF.2]˜Hêc˾ºVVûG°þ ˜LF œøhuüS½¹dÜ/ã^l*z?À‚,brÄÙÁùÔ¡T2.ß AŽKÜDëvòÆTé€é„¬¢‚X†¡|%¥(,™ž† îð­hyEØ ™Ý=ô¾QDC´ M¥7Žüâ/Z$-‘âÁBýv³¥atøêã?õ¤Ey¦ZÛ,\¼1{§±C3-û¡- a¿Ãâ§ö€%‰<;&º„’àíâÈnx5ÔSRTI‹¸_ü½¡ãmpËGwh`ûš‹3Æ*H<µ¸ž £tÁÍ{ŠÌ ÀŒæNí¤ŸYµ±i;Û"„™Ô<>CÙaå_„j3Ⱦkàð¸•^t6]G0([b•VÉLúo§ÖuGGgú¬úáj8$FœœvôWWuˆmÃMyý"¯ ¸Å€ #«s/o¼…À´o×V™j4à{yøä94Šwj…À2É3T½;º 8âÙ s´Ý¡ÚV“•êþ߂ռ® <úï`¡ÐI¨ób鑈0äYÜ_ö~îòݧÙÓç*hTÕe:úöMÌ’!:6À¿bÛ§U»{KãïÙ¶Ïätj¥¸O5òKràé†êF,~¦®£zŠÅs©æz*½©þ§„Ð*¸zŒJìSÚÝAT¸‡›’ÊÒU?ÞÕSXMôd'™"u‘³G\„Y,¿˜á’:•™df J×^©§(ô6°K¬ ôvô]ÔìoàOH Aò0P À+ ä F‰Z‡Ùμ¾Œ ®w ÉêÂO/6óõXm)Y÷¨d Ñ˜^ÙãÐÃêö®zª÷g0{b={ù—Z.åþ°µSÕ²ï•ú@{Ô(}izñq„ ÎíHyEXÜ‚/Û|ø åTÿµY¬eÝ:ÞHÑü¼Z/gk6„g¾oæÝC²4»ùüѺÊì=(½ „F. ªÿ)·ù…³üVe&ãê"Ø…ÝÍÂ÷oƒ¼¡›O%ûZ!&øý#¾~§z÷bFÞF&³çšçÝ­Œ àˆzNJêÿÌlòVÖsŒf(T']‡ï£ûÕßµjŽ€Jä_§«uõC8Ÿ½Àh(lÄBêÏ*Ò½°õP.È¢žªÀ„ùögóS•GäõìW簉ؒ÷ÔÞ·_z=ñ€ÿíÖËþÅ­wJq–ßm.qÛÆ!^Ñk»wLÚ"Û,å9â04wùËxƒ¿Øª>ÖՊ̳ÔÜöìKK¾,˜|™æîæ+þ¹”d)J'gA–§L ŠÜ4‘µcÎsæqÆÿÃßWº¿¯ÿ;Ý1m;Ç‹4WØER‹%àŒ ßPë¤dK?¶*³m(Üô±O+½'9«&öÕ%³~KÌE™ÔFá2ÆqhÀìÒX ¥#²×’÷?јRuN§{úÛOÀKVéatK{¢V[8ÀDÅÚd/?ÆL8`@PCÉX'j­Ì„êŒO”*¨Š;NS¡{.±2(—¥ƒ‚î·tª1 )“J;ÂÄe'·Pz•ç¡+€]3åwÊ„(£éXH«ÃåaÛôL6{ÉîvúÓ5šÉ¸Ê?Æ×VçcOV†ˬ>=x¡VµŸ²©\eóSÛS(:aelþ6­#Ì«ãò¦3(N̨«ã¨Ü•¢„µÝ zñ€lCƳhžúVd6šn´ø)äòÉõ:×AVóx`ªfƒ â2;ÉÃÜ›èpÚºøêý¯¨ ñU$§kݺ´°IË&ª€âi«óçå’€°a–¾‚â^´ÕGPô¸þÀàõÕa^¹KsøON¯[ &íãNäÂö"yEyñgeê£ùSÓ¤XÅ£ÑVŠ¿¢;HË&Øi•X?ŸÏ_z–Ù ¶¡{Á)ÉMnc¶Byd¬ë²5rNžì‚ÌÀÄ«y*ªöÇ>#-¨C**=Y¤¥ZoõÚ ÊqÙg°bÁ®L}ü¤²kÈtTT‘¿ÚñŒb…ÑGìÐÞ7¢ãe‚5ä—ñÓðÈ#CÃ.ƒjÿ‰3¼!ç†ï69ÈÒðt%$gêä”Ðjȱ"¤OÂDé‹/¦ÂCçí,û€;õ*aµ«P  ­ï;P+>,ôÊ«¶D w|pU ·uä#—&‹Ø&¨©§0mæeßAÐmœq3vÏJ!'Ö°6$_TwÌiÜGI‡É»Ê„6»ÂI=EÏ”_í ƒ°/MðÖ-œÓá§Õ'\‘ç´AîÕ •AËìÞ*Áá½ceŠgØ ¿„ÕÑÄhNSf2ã£4^^8[‘¤¿‰» ¤ÚtêæI©Ç`Z Ï^±Ï}³Õ–f±E®vþéÁzJ<苃‡Y=­t³©·UU¾øu¯”;z·Óêņk,H7/ÖtZ³ 44ójœ wˆ« ¯;vcV3Ø™n,|¯‰Ÿ›Ûn]¾4}%lª»GÉœ×ì[Þ½»ñï dGÃÖ„ý5î€yñûTG¡WMÌX1çôW½YI‘gD6eχzÊ~f•–YÍx[(TQ<¬§ª~Ö4°¸w›4|½R°WaVF&·`Û °yŒ"X”ùTS'ÃDÌêÎʾ¼kšÜèjgs{`s£Z(Ç̉— çØ  1ÚÆÊ££0éi Žƒ!l5£öO^ʤ‚®ÌeÀJ¢$F‹ñ¸ñ½­dXç¹ÒN׃MX ¨ÙÂYµfd?ê©pSÜc¦s!çÓ÷IÎ}]ºà€šIܘ ²º÷sußÀ,­•2r×h€ÜÀìÆÆô s¡œåH¢‚îBf+SÚùÉÓÚš\öÝ—z*˜Ã¶21ÁU*0r‡/»ØpþU=eÍ1»MEz‡‘ÖÖVBH²ÅšCéŽw̧N‚_ÍõÝ‘TŒêÙCüKÏ"àèë}‚-ÁwÉÔy¸_;æ1´›òFþxè•B|®”ªLÔÃta‘Z+ºÆ„®/¾•+ˆ¥¸’ ÜßÇ|¤+¹²›ÉÅIµ9ÌÎ…¾ÿ*j ѧae°¿¬ÿ£VrI d¬v¿"ú}ÂÜaîþp(du!“ùýûF=U¥èÃÇÚœëý’Azº>„®RnñKȦb‹V¡c>ßä©! m¥]¥¥ÉËqÓ.ãÊûðÉ”å6Tv¡…ÿc鸈á8EÀ´Ðؤ=‚ýîO óˆ^¡·^ÉÈ%%»C ØÃ•fXp#é9E!°æö³â¿,ÐØ•XÜUÛm¼äú™ÚÒóËyã=ÝXz•Û +kŠªߦ\é1ü¹4n=”£)”_ÏCÄéE ¥ÖŽz^#‚¥¢dág£•5£¥ XÔSœœWÂèûKvÙ7ŒÅÈþëXp*¹\Úð†Œ°ÈNþ ~%ño‰´.Û)Ä6;©jpì”l ºÞ,þƒÐ×EÖùñÛzÝ>õTUŸ ë´ ÖÛE*ìèmýçÏÉöŽAŠÿü•LtÌå#K,ê)éš>¶lŽ‹ààQÞ±QP¥%`;æ¨ñïÉý‚2pk>3‚8Ü4Üã•mZ)ÒŸ-Ì'ûtm»om½°›6ÅšŽöéŠrßžeõÊáejîtªuÏ„n1¶˜îŽãœ¹nõà ^­Á©â{Ê“çƒ5'LÒ¿ÏÙÔÛ"ƒ§x•~ÕÊPlÏø6‹©ÀŠh:H x§Ü£¢ÌrÍÇ#ò†Á,4çQEÃÐñJ(´%Þ|4Ñm>\Á¬+Ò¢m®ç öô2Už±ƒ`­Ÿ \wsî‚j®äÝŽ¦VÜņъsìQqctˆµT<Œƒ€_â¢â4••$Ûz_Oå=(j§šÙqª' (ìå9·æ¸Þå’“ ¡¾x‘À­"8"¿.¥"­¬Ê6‡ì’ŽïÕ˜¤©-Ï«DÓUÏšw{]Eô ûêû Dí¹\ƒ{“˜Ô¿Ý‘º¢ØÐlJD¶=‚¢abqö ÂÁ±TS–Ë!×:S›;±sÊ$€Yíþ;ëžV?}§Æ„µ2(*S^ArƒÉ(fe§ñéà æ¹ >f]È©‹=™•IþC«óèÄÈèË)l.{ÝÉì>ZÙ8Q¦}Þö?ª‹\9ÖUší”ýU~Ù…Ë|f«yÆÀg‹'²XÀ=ŽjˆVç£ÛÙ·—nVß¾ÔSÝ!bÃ]­ð´ýçÏJ±aÙl§"¥ÌWBÞ~N]/Ñ0Ù‰$pÃÙƒ°¾èY&ëD}pãñ—w`´ÒZÍAÏŸw¦„!ä™f•äúÜæ`¤Ò™/ 0pîv=8b/ÏŸK–áb·iÕ#ʶñÍü;n'»$P”7œú¯ÉHvZA¦®X´Æ™­K*;LE›ÓFplÒRäâc…8mõMI\˜¨$£öðÑÞ`c/§°§ç«yôùÇÎ-@6WØGTö]=x½Åòþ`ÊÅwÙm|ðeáld¦ta»õ]Ü’“7ë)·œ¾“ðÆú£z[ŠùŽõ”95äû%ƒ s°¥ŽŸf{ÍÝOG/_ÃH÷4 )žž×´ìñžæOUK¢ š‚9øÎ;cD‹b[–±Øûë9S=ûíÚAb„äkâM-„ó‡@;Ë6°„¡;@:Ž…´­×§ l¯Ù5Ê tÛÒØ áÅ0ékë)+±o¿Ï5VfEwÓ ¼V‡K` u]±JN¸4çõÐm&BGÒd˜¦å>É0 ç í»RYèÿ(XHàT±6¢tA”ä«ÿýW­àî¿W%<ÃWêIÆ‘‹ÅÛ˜ rSpp>TÉ‹HFÅxÜcõP”îÃfÀÜPÏ=‰Ë£'õ\f(?Õ/`ßmœ­Ëجú:Z²à_-oÌÀAÑÈ63æ„ÔÌH Ž–ýá°]ªEc`œSQ=ˆÑ3¿q½Ãå6?Kf~–~–,”Ÿ%‹þ¹”Éÿpžd±·Œ£ÿ³Š§g50 ¿j¹»Qi?"êøîI¸<6ÑïÍûkSæÊq¸À¦H(Ë„Õ „, HfªÆÞãÊÌ_Š=ôµª…ü“?°æ 2#Q+5wyäIÕ¸¨YàɤÆ8÷OÕò.Xnê2ñÝož¹WŽiƒÇ–ÇY:EÜ©I´3I ÑÑåû£ä=ýÃZPñÙ‘¥-’ïøÝËE[lë#{6,nÔS G!~ˆ“fÛa=¤½z\oÝ×ìÆs‡œHŠÙ¤¡ù=Þò]^\>ßÖ\¬HOIgg&[º/¾¸4fx 2sèrAþïÏõ” @©g‚ÁÈ/ö.¿Ü«§4€.;ÁÜŸ¾Û³-Þu ý´DWûï»ñÖà‹«ÛÌ»æ]7»–ëõ¶0Rôl±õbÿ®¥1œv ýÏlUªH6Ö–ht˜cÁfBà‚a–d;QÀ¹‰¤R•+ÉJ¾ƒÑ›·>Pˆ"Öòz.E5yDzV vØ2­ÐÕ‰ Ÿ²:d¢MoƒOõÜ5©•¶4FÐ–Ž‹dÛ  ®%_¼”EéGÀr¬ãì¹`È\Ø/½”%C¶ ‹òÔE6bÙë~\窨ƱbŸ­dÖ×o×W'O@gfm¢€xKE=•b¶Þµ•¶ÆÙ‘:+îeÚuÁKÑVBb¼zS¤:/ñ6 ,¸ªb×S†Bâ‹ùUJ19B+zï>%Š‹ôxd´­t@tíƒ?0H£­{i{lËïFmN¼.‚œîÅsËÖÉ(9êC3/8UX;,ÞÕ(ŒäpÌÆ,(éa/DÊÐWº6r­Jƒ óÛBã1xëg°c šèâêãÇÏ>èE±m¼5¨DD"S£ésU½\OeñhÂ‘ÂŠŠ§_u*¨AíÕÆf²Ë«Øõ@-jäâës,7_¾Ê3‡ 8poÃk®fÄhµºdá,H¼ŒA¸c=U÷²&²Ò¦ ™¤Tã“vàEÌL¯¥id o%Ðl™JÜ4§nõ1¶mDµjW˜ȧE1AëUS[xS–Ètý+oTõUf­Û§d½ønJ!d4dßz¶‰mecÉ.¾‰¼kh|ÆÖˆÅú3Zö•Y‚¬ºÜÏ:@Ñî]W[SBµ=7ExpÓþfoˆÁNkŒª#»$‰…¡*’ºÚÚ°z:8ŒçÔI2vƒÅºNÈüè¹›‘#}õ2‹Y•¹aª”øÕŠEŸÆk×l‘‚¼íCjÑ¥+ˆ*d·Æ^˜ ÉkA š)×ÛÄP=6J(…ñb$çïj!X•q]*ÃçŠs°oÒB„ºî¼tïÈXP7žYœ°+×§p÷3RtùuúìbÍ †öí1ië‘ñþ¨'3Û“ F}o¬Äèh'ÒíFïYKn½Ï€#:ø ‰jµÛ6 0’l˜GfM#Rš.Çùƒ ÂB±ýÄ_] ÆÏ+Ž@èá¬v‚–­Ñè’w¶Æv\ž%ÐiðFÐs[Oöaî6k7ˆ„Ú”}3q¯3;À1¬âónÐÒÈô¶Óc^m=Ÿ·ß)s³ îÐWÜŒŽ¤Êe&ä k;&žåÝ9I}ÞÕÅÊBå΂ŠP ^‚!ÎH—&þîDSOî lŒœ,—µ²f´˜XEô½s£Ž7N, ÑmôM~pØ£Îè†ÊP©TQ.»5þ±slS0"EüŸ]Z¹ t¾Ë:Zé(EÊ£:ƒÂHt5ìŠ áPR~”3côiƒW±Ü®¨Ÿ6Ò±­Š!+Mƒ'ñ 42t‡áZJd?cgc +ŽM¡Ì ñ^½û£©Ó…ÃÀšˆ‹”å,Y (s»õ͆Sp4Âm Töùá0o˜É»_òW¤(« 1`2¡T ßvÜ0EK`Óªv’,8ÖÍy ¥¬ÉÕ+o™Aí‚ ”ÁB·¹¿ö¹f6ffá×$ll«ðt¯&´R„îÔ_3_â‘+N®È(‡¿ H×›F„_Qà±þùðu¦|zJ¸[× ¡Y CüW(¥n¦9‚tÆ„Z—מP«Ø¬‹¥™$¯¸žW¦è|÷¼6s«sÛXî"©Fê ·E`T«pEƯ¯Tƒïî¼LöÌ/#r›H?)ÚHt‷²oÒÛè ƒ=×¢Q¨i>I«#xŽ €|SQO=¤Õ~ÅZ”Œzlã‡bÄ CWÉzcLJ†Í{óò™’Låó¤:k¹Ð+sc®í¥þ½×.B˜./ÁëWd·ìɧ mÀZYb­»ì‚¼Þ÷JÅ %Ò4­Å&¥Dà4|‡_Ý2±ÉgòVvÙ¹üsßÓÒTCŽauë”ÆÙµÛT_Ì’ üë86“gq·âzmNš¡üæ3ÉŒ{ÉÕÕWjÔßZ½î¡Ð2L&ý»Ó‘X»l͆ä6ÅÈó]2À©é4ÚÍN¶<Ÿƒ= ab±“f/{‘ØåX«ž!.p‹ýŽ Îþ-ˆPqH÷/éãÛ¿“¬ùÝÅ=hÊåøsMoB·¡ $ÐÄÛö fÀP¦džãžVÉÀh–µÆ^1î0XÀ¸`6tsÀ îØh¢“}ÐGÇ–¦àaolqVÈó»ï“qßÿÇ7N®áÉmÀUV‰»×ÊRúÿ7+óÚ‡ôÚ—)½ö©{í³.¥YÉ$È .Kü•²%£ LQ 5Ž#û7MŠÿæIÎË"@6e’–)~OÊ$Âïiœ°˜jš”!¾—¥iŽlˬ 9~õ­ãË4 {ob?„yÄ‘aÄë°FqÈÌÍp5‰ b¦füKš'E€²°äóÂ<ˆWûúïáù”»üŸSÈw˜ñ»V[ “…jSØ‹OõÑÞÁÑÃ$É.züöÉ D+°…‹»è0«l2n6*ë)ÊÕ"ìèþDXÑJE|z­žÛÂoϳc47 úˆ¡£GJæóÄŽ{•|×í›î4>"}‹Ii=9ꉼGöß/W›<€ØÁ>Ú¼ôXñ€lF/‹u™b¾ŠÈð²¼îiOÑ.ÞÞdÂc‚™Q„D èNxU[æ_Ið’üóú'¹†CTC£j9@eô@ÀÕ264ÂC·Y©LïÏx;Ë3µàbd‘Z9­9ÔÂꆥ^¢e7#’…nz6½ðTKV÷/¥gò¶¶õÜY®”a1¤>×3W™ˆÝö <ö×KtÍ’XvPÕ†ÕåSbcáƒÄÌí¯-${¬à!UІ©‚©¼d,FÖ‡Çê)Ž3ËIs(½Ê¢Î…ÄË¡Sêq” å"h ¶¬gãõéaÒ:ƒ±>÷8Ï÷’ ièű¾.žÃ\…ضÎÈž_Vé¥~$¢ˆèàaÂÀÜ…Ò»Ç+€Žy?XG+²¤Ó¸a„ÅMe­Lð4ãG h|©^®eÊFƒk²SŠÝ ­뚳˞µGûtnò¶‚JÈXîûÝʼa \œ= ¯áÖ$^ç!7ªð¤6(iD½îf1ðïKMPT(:S÷Úô=™…öûZ¼»l?ŠV¦DxÏ…‡MYUY­foXäõ.þ‹ý3ÆØ8ÚÍœöå,L0Ó)uVSÂ`ä0)o´)tÁ†q‹ÂãÓòyy¯i¹Ù÷zŠŠ§í¥;Ñb–änòí#[i_ì®xK>°Ño¿·‘?W|>=+ÂùsØÊm®' ðj´ñú¦-ÜÇ %¶¥a½ã®År—¯]ÁÈVß 6ÇðnajK‹™$qš¤:†ÒŽ ßíE!‹6žiÍ ¹1úùàz-»À% Ô” ™EsµžÓá8s{vÅ%w<ÓËã™Æþ²Èm„ï.Œª÷á6zìLµåÖ˜%r?C‰¶é+ni§|Wha?®Mr«Öu³Ýg+é‰âèa‚çñû¼ÚîkAµþÞ½D‘<]†ªŽ´¤‹jPƒ8‰{îÅÒ(8™ÚÓÂÄà€kU(Mu‹ŠêS½qIÚQ³*„1ÒÚâM¸ÜÁë­:y|Ò ‰BÀ†’†S¿&ÙlÁîªôœ¾Æh¬¢¶Š Œö¤Ÿji~€7 -©«,pŒð "2{¯Â*Dzÿ#äøSîÒäÈ?èZÈe 7Q(õ‡J¾W¦»©[2΢“âÂêýËêç•…\j7Yf°KV†2m£ïæmÛ×]æTÐdÞ¸F:J<®Am"µd£‹z$ÈMƒï4¥ÙM»' ã ¡¸#sŪ[y¦´E‰V)÷/ è\y-?",– ñÙÔmGÐ/2Qµ%±VÁØ;ºÀ2Já+kdb·í¸Ã…`ЋvÄìÔ1Y”ÆÏWn_ª§<Ò•í†t±sMôOªãÓA°‚e¼]æêë{︇ Z+fgŠ˜Ó;NÆÎL´SGp½RÐ[.îv½­ðõwš½7Á¢ÿ|¹Û$«éÚgL²]ïQ x*dí^S¨{Óh’0õÕ¨dË4jËo7!ÜDÏ;MVÎZ}Õ‹üPP$ˆ1 ä]’åëóÛœcrL‡,‘â†Ö¿<4‹Ø?^ƒ”ÑV8%sf‰¿Â¨°]ÇCìoz¢á/÷ê¹­%¾~?m !˜ó¨<›)䪃‰úŽ’ê܃YÝeÊ °/Æ*óL‚áke=”§¦Õ™§"úHÌm)L@Æ -†%zÆ{vVK¨P6ÒðŠòŽ8ä_ÚwˆÅ+¶eNṫ€  Ôö$3cb¼¶³)éO°m#êcÆ…Û'ÃÑ-ÀiKîþEïâ׊< "DúÝŠ§>ÑŸ]SÄD¸à¶³Ô¶]Ÿý|L¶Ý)=”çã©mëjXÑöúùKªÓ?s‡âic¨½cOƒ‚y«Å¯z΢iŒõ;NßàÚ”Ž¬ƒ'Z6Ëšp%Îà8~óªJ ýçKß;ƒân“i·RýuÃ6mˆ6â#Iú ™šDÂfå•âR­Ë^Q f?]pxa2“JuƒZÐnÆñ#ùÚFT¹_I‚«ê)+Òú$ÜÓãàŠ(ÂJ·Ñ“’ŠþÏûjö 3ëçi±TMóH„Ÿ'©>óu68j¥­¢šSñÃòÍzŠyLï ¼ÈµÂWè-ÃP;ÝEÓŽjïb‰ì=Ó6ýÎó‚mÕsåC°ôîyõJïqã];æÙM¬Ñ×ÕuµÍ°pšídjkfìm„¡…¥ø± Áö”TRUö´2ºâ àï òw–ÙDk¸–ÈqÜ«‹Ä)ßæÒ6ÀA¨‚ã0R¿œbõͶ߳ûÕ“vÛÆv»<¬àú[Õžû~|WÅUù¬½Ð_.ToäâçÆˆ,¡ÖÊÀ°6o63Qš^C=¥­ãwòÈĦ4”gµÒ@Xî'Å_ôç¼5Á“0ƒ$ÝÁ²8ƒÓᙕFÓÍA5³5êL‰È®‰­Ã¬S*ÍFÕm2‚¦xì&Þ)f¼H£/Ö³: |*ÿ(ûÏm©µ%iþÿ\vãAÞàV©ðÞ{adñ X,¼¹ö¯"2Rª>ß8»ûí1No T%iΜi"#3?M(¦qű5¾B3ø’!ÚMЍU†^ØŽÀøo}«§ö£š¢žŠQ<áÛÅèkÍ \grD ¡W™s¤MÖBJ«]Žb!Ôt*ž"^ˆ_ëµa¿B â‰O©†dPÎà¤ý›ñ{ ó[‹|Z‡o=ƒ¦vŽÌW;·µÌt±VµLâtãaå!,ÉcM#.¢Y°¦)²³?„çoþÑ@]WÎc¿ËÒ{b‘þ36;kùzÝþÅQs#¼˜ˆÕ×Sx˜+Ò.Ø&LpÚC ùä\†Å­µƒ©ñ¬"rÙ˜z{¡|~1ƒ¢mq\0,¥ ïØØêÝ]³ {“EÆ% S)˜ˆ^—–¶z…÷%&§ö0£m»íï[Xyy¡Þ¶G›9í©€ùçB|…"*,g¹9—â Èãˆ_< :»Nã•`‹  WPLšmì<0;± š3‹ájL›,7.ÿ¬5 ÊŒø0*زyǃ‡fVM"@dª¬a¢þÛŽéñz¢›5Å+€c[<—OÁˆÙ—6®·nkíð×ôΆ¼ÓdXòІïÅôÕ¼n¾s†JÚá; oîÁ€ÝÛ´ç.?g² ïEO_Ø07†Á’Ï”žZ”î8»a ˜£ê»yÍÇmß¾ÑÃok•Ó#ã8ò£ÏòÿuÈMz…mWäwM0;HŠnb›Rf7Ïšœæj¥fe¶7X—KõÔl–¸–)9‡¹ý?&ßYOÌ2gÖ§TÖ'_=XÊ,ÏK–ä¡¿JðŸ.ÏÛö·Žk'ì…ÂÐë„÷Õµ;PO ÓÌ# ©*1޵0jƒù °IvÁ/%Œ-p£¶"|NƒËüF¯ÅNèä—QX}*ýÓ‹2VdÙ$ç*Óóì–ÅÃ÷Ä:ølÔÝšRú *®%BUãñz¤DǾû¼ «hûsµe Õ?娏¡¶™$L½“…‹~+‰”¨äŠ7p8 ·²‚Iv€‘*·<Âl2òÙÅ|X»€å±<}d}|³Œ^IÑ@òm„%T»FŒ ‰†ÎC£&ÕŸ¿r®±,nõH?‡£}Ãa-{€À+aôO/;¤;Jði†+µª)ÐĨ,‘.yö+™n¯§`Zª!´¶×ŒÉê©qœ¸qÕÒZµAX«hÔÛ;Ìj/æÙ4gž°Í0€îCp£ù«ÔTÛ$ÕÛ‚̆èP& ŸàsXS=ô¥cÿ-T¤[ÉÑ‹Kú”=2Ù8¶Ü™ê–ö¢e*] °q9= „ªÁØ·SdÍ¢’çÊœDg~úÙ"²`¦YÔº_j8V[­Ðب§B-–ä”.£$ ‘Òoe2”Ɖ2‹IÊùRU+»´­kˆ"2ù§kXÇßH}µ“ý!צ°é «%x%]Y€-°Ð‰[™|A2W›Óßb,¿ÿ ?¶£r<®Í÷â¨TŸë¬"©wÊú¢`rј Œá<\®Ë­µQÌlHWmõoPþ}ôgv2Xò• š" >Õwš^ÕŠ8}”ºÁÉ‹Ú:£Áí,Q|,#¶ÉÓôèBm=ÏŠlû“¾¯Ðgõé Ñ;8$9}ù^ÏÁ —ÂÎéA%Q´$@ħ5Àüí!©Ðg´Ñqb¢‡ˆgh³ÐNoÛ¥ÒÄ®¹ ]~•è-‰‚†î„@X¶Jÿ%+ûÉ*×CÒJ<hJ¾R¹ÿœ~ ›˜º-ÊJí‘:¬Q•²òÔ¸£’(hRh?ô-ø-!ø­MÑÁit]+;\ùÃΠL1V‡_GÌÙ%_Øl´L€)ÃÎSÝDyS´ßlh3Vá…§é áì&/+°Õ¬ÆÇšêjë›b”Œ'¿BNéÍ_­ºDGãêÃ{ÕDÄEƒ%-ZÁýEÒߦ Îù†?ÎspKsýÍéÍl`Ê’j›åA|dhqf¥×Fõ‹^ŽFù¹QÙR·yª5éGô¨ Ûk§dEÛ,Ñ#¶ãÝÊTea¾NÙM¤‡â.é‹Týó›²<;ÃÝê$›wëÐS9Rñ4‡îWvÞ™²Ïi8E7¤ˆbî4Ê:Äl¡086¯iÇ ¹Œ3!¨Ì5G}Ÿñ¤’ËO !)½>e^/PÝ:zpaö½kõÑÈB·G|e°³ s Ëп ž [*[ ÂH°"ò[ãÆÏ* 5TQX=3~È^@OFE‹A<œ©€Yë Ãá"Gew‘jô˜ºµZl¿Ä‹e~Êâ&±¯,äו ÎL†ÄðÑ¢œ“[¯é ¨ª± ^½pøòª²ågOúwÓPí|þ¶2Ÿ!)4Oéô5“~Õó0$ -Î9W³ÿ²©þ¾DB0¼ñ”4ÎOÂ$2Žc}—ÁAïCfïþܶg–vÁ˜QõP¼«­í-ý+€Æv:¡S¸2][QËÛ<Ô>eÐlp'2ž#ë,@lkÃzáJLN¢Ð¡z ‡eö5¡58¨Ã«bmtHÓ³†Ö¬óÛ`jË¿/¦­ÝÒEŠ•.ý¥këÁ?ih,xŒBgrÚé¶c¾iÂk2…Ì*vfl}4Ñ^?ƒMq¢.,7\e”/Ü&ÈA“uíÝúª" )4]õù‹1†:¦òû§ZfĘ„ÊIOJê©M&;Ú†ª4 ÀË/}ì;ì¼w~슇2ÀÝ(,‰]£ S™› EÌïå)äh™ÌÖâ^œ¡%fÒ•MØéØ­!&ÅÆý§ [P\–—¸G|ì ÚÛ”ì¤]šBw“Y>ï²!úùm+ÎÔbǘ*]ž<?)çé®tþƒøs€fáÃ4Û´è¶©ZŽÙW™;0†¬0#$´ËöcxjwŽè-O Ù‹°A#».Óhi,3Uõãû8úl•ØaH‚ÃzncípÑ.¬ŠEéXVN¿©‚H•âGFÓÁnWJͤÒYìØ)ïéî^N†_%¢H6ïSËü¾ä˜>B°˜<”_Ó~ošGlpÌ  NÅê™ùj·óùVCÇFÈ‚bÎŒÓ CQÈ ¤:†Tyº°sÚoZ•–ÓÊÄæÛGáWzÏÖ±9;¿ Ž[狳¯jþ ýÞ_Ó_PÑ_˱ۆ:Ör*¢ÅRÐ(ÿý’(ÎQôn°ŠPÄçç*#”•¢)Eük„‘™®7¨g’u-ÃöÊâµyÊÞò«+O¬ý(a)f]}>®_׆&†>†0/^ ÙÂàc^8Àá‡mc›c””NŠ$ÚÌ _R$˜q>ë½h;^§3@ÍþãÃ{åÁ`Ï|~4ïÑÎÏ:°ƒ^'ä2¶%´müSºk÷lYÏEöù)ß9\Ý×s3Äüš©ôv|ð`Þ~ÈÒîˆ Ý±,vÍòäM-Œ3úÐAM&·2‚fñ}€–5v¼a¾g¯\ g3tÞ•²E{k|®žŠ5xûñ†C«7¤ùsÇÙ¹µêôŸ3Ò_¢”hšB>|÷TÊžÞOØUY*Ì]wèF‰át ÙpÆa1ü¸ Ãë{3JËæÛ³4˜µ$'Íh“ö¯‹›îԌ̒ÔKž:̰5Åe³00A_v?{3ñvðañÍ•º7ä¡L öO¾c2 5ü4Lý²ö—b·ì[” 1‡µìI>eØ÷Æp㛥ö¶v™Ç\é±Y?êü`•Žž£Ü2òWhwí_¶àõæVkA¹žg§N›°"ü„ö/ìúÅ[“,“¶s»äØâ´1m«·fÙ;òo­A½Õ™°–ÉBp™©?¹ºÆÎ¢ˆ++ãž‚sÐe½m OK0£™±MG¿& `È*g6ÿšÏÑ{¾]ü¶]w“„ãÐÇw'sÒÊÌðÐL*ÉèXŠ•Ÿ“Ô)Ûk–†½u+À±ö@Úñ§û0ÏêM^YÝùêǯÙ5ÙÍ{.ÉP¼l²,f'‰m%Ú»2jEtš44銾p ¢#Ì/äßÌ©Kˆ¯9M%¹†€¹ùb?ŽðŽŽª@ˆ|ä8¢Ôý?ØëD×´ªý, P©¶øÌ¬à5¯ìà–Ö{Çœ·£Ü;Øâ½ížµÇ{ô”í°]'{º CWºçú[’¾á5‘W^>‹ç«¼)ñPàJj}†¦V7WÛÞ ½95QbÜ}ð¨žr»lÖÞÜ & 6«T6‹ .£X¾%Ï„9ȳÉp~=?•£-Ò*$¸V(Úí­?Û,ä€\¤²+—ü\á׿ f”ŠíG†"‹¼h•=8-†¢½×5€[àdÛ¢u ê¾ã š^—JŒ«…y16G„¤N~m3‘zˆ™íT˜Å2ýч»ÊæÂÉñ¯ö(+G½¦üÆüž¶¬ž¤¢*5+˜Í¥ÛÚ†b1ûg ±¨pýmjžôJ²8â'¾´OœšjiÚêÍwEèA÷‡'y¯bk¦9ò_gô]"‰°Ïu¢¨‡®×ù$X$ªàòn~ h-£®¿açãiFæó"?—4T½@Å ã%"á­#v؆€5à6Ž˜Ò…‹jU*C¨8À+ýˬz©óAŽVüu׬9Œƒï3î4?ÅYU…æ_Ã÷·$ˆ<½Íu¶Çš†sd¦/VGÐÈÍïö!.[qè[¬Øô‹B¡ÚA… yA×a0C>eš:˜®Dá×lÛÙç5¬â§k¸!pgf>$ö÷2E|”ˆÀQç|¤;›\ží›ýÅœ_·7?ðP(~)ï¬)áÔ7>9ʆƒŸbë¿Ýâ<1=Sz='d¤[^àÚË#Fc¢Ÿ¡$<´Wµz ¨Ö4.GY=ŠcÏXH2ÁâpU«RŸÌõ»g•{ƒK9t§‘2RF‰òÇXUÓQz‰Ý/x*R=:û ÔKžU[PÄòмÕ"nÑ¢41sâvVèÁJ÷.›ßx¾ì²g7Q0Ú¶ÕW{8c¥܉ÓhGäØä£©^×[®Ùe²¯ÅêÍ’¼0\:= -Œ¼ºýÔ)ÛS!"g¦kÌÖn8#?§—êa}=!#Fï„ö3²ª7©-ï³qñ ¥[²svièĨ#Dç”÷–Y¾­®ŠÑKíSiÂ¥é…Ô‘ŒÀïG3Ò­&QŽmú{”oùéwmæ¨òÙS0Ç€~×ëv_åPXÇÃN…¼ûG{õÞúôš‚g‘àÈSƒDzqÎÔ6°˜…ѹÓÐ9| Æ›–cº© iipRvÊþ}Y*¤9:z@)–‘¨Bç;¬I?ýºØ¢]“»ƒÞRÑëÌÒ Ð«ùÙXm*a@€É çT©ŒrAŽû“þ »¥é^¾X²èÌ©4ð‘YÿÂ|p¨”Qg;Š V„• ›È‚æ@šÄœÒb‹æŸ±â²ÞúíáÃÊœ„Õ.m/QãÙ›—7 8‘“rß—K=Lc•—…31‚‰»È>RM¼= ê}ˆ÷:¶jì°£';iÒ¸ùŃÙ°;sc(Öê$œÏ±.Ý éத »&Y­Â .ÓD¿6Uø´*¢t òùk$O ¢a®×¹¼›÷MpÝ™òÚÅÎwzbV¿†sÐ1*óG†}nqÁ‚î¬Ç»åm¸°‹Ã_!Ãè…HNUÚš†%ceí}îjÑýqM Ë[:‘–°—QâÿÚ'E²HQóŽzѹE'äœLC åÓ=9æØÈL<%x,_ešµ01÷NQ¤M’÷¹0ÝȰ?‡“:·ü®§1mNBÓa%‹ÇhéÞ¼H'@Ãvh‘VèÜõôÆœlN®'Oš—|&ý¥ÜÁÌ ýgÇè©—LøíPLÁ.'Ýk%‘»¿…¿OÎÖÖÃÛYßú×gmü–àgmEIÐüð^ý¾jCNÉ!ýŠŒ~n6øùý?zøîW­ÂMúŒ¸²}´VTÁ™ ‘üÙàüܰ¾)/2ͧZ§QÓé‹É‚ŒO…Pn¥Woo·Ï©Á7Ì$ÍØƒu˜‹‘ï~íè§Ê&iîã´øéŸÇoy‹ÛŽm*ŠtÄuüÂu+߬¡µÀ­RâÕæCÇìCWï7\Ô Èù kÄó{¡ÕL¿‡ÀÝ®þʧvÈ-. Û>Ü]o#YÂAÆýŒÜ2ï‚SN¼ùò!¸Al|Èû6Eå x ÒºB¿ìŠ`M>Ê¿²óè¿°ÿ/Ä¿=kð_ћÒ»§ÿ_žp­oErªw;ƒ1ù—ò"MÙ "mvw’dì[‘eè"Åaˆ~qÆè‘„EÂÿ–Y„ë³8eŸŠ¬(òˆý)Š‚ÓÁ“ˆ¿[DY‰ß)Ò‚­'ÊlõlS‘$QlH“ÐW¤[gÄA`m*â"ŽyqZ†ìžfEšX›Š¨ˆËa^¦ÿuÄø›Z-"$ȶ^n±¡;‘HŸqÔÒñœUAñ©^Í÷êð®ÚSò[P¿þ9}¦ä½ÂJøgž¸ZEà‘ŸœŸtŒc3>~Y)˜Ák-¡D‚e-}óÉÿSXkÒ‹ÜŒµ*´%2³M˜.¥v£oñ£J¦ÇË2œÎN"ú~ü!Í:_Ы ¤9…¥¸jºÄwg$mfcÝ.ßä Œ#Si|òî¢ZdßsXÞUžM7;IÒY¹°”<áÐeÑW|`3ûû4µx½* Iq÷é4„û-ï9±{»s``1Èèf“Õ³×±Hp¹Ró«ùR1‡ówÉ$Πê4A·gð•Œ[‹nÇñÝõhÓ<‰7Úoz+ó.ü²Q hY«êÒ·ZÙèÞŽánaâÜW Å ÷tò˜­âƒ!£'±ŠN®å ƒ0ÅèyΙtYÌíËÖeŒÝ“J@ ü=Ö3ûžrW?ÕSѤžZ™YI9&¶ýXO‰Kb×ÞÇœuÆÓ96·ü°­¿sÛðÍÈp¼–Á©3<ßÜ'ü8A "±­;ÿ1[øAmŠSlXΩË27/ÎÈ´;±Öز 8¨T*‡ÓWãÓU=‘I=‹3I˜ý: 0Re‰ í-À™Ñ­_)iªPdž+Š>ó]ôòUZý]#>0TÈ•³¢ˆ¸Úc²hלz-ŽoRôyÎb±B¨õ¢¤ôâ!tWÄÎýpÞ¾ð3‡Åèó¾}1_ÀÑƱº]@]ËÜ?í>1ݺq±Ó=ýlþ.9­§z†½ÿ š“c&óŒz¡ÕŸöGÀßöua G9G?ÿ’›¾÷åFáX'ªËƒ ¡2ízyv-Ð5+móºC7¥ËÈÞ€i’èðs¤¸¬U=÷ÍU?æ{>a.rWÌä#¶µáoےº½š»fökI V±ÐÛæWÿ6ãe%YÅ ‚o0‡té)=ƒwfWç:¶³7çç°»GlEëUqšÚ¡:ÖÔÊamáy¼¥È hlž—×[õ¸«ÌåB¹¨"¸&ů«Óæ™1aGÏüÀliâ¼;:’[+eÌG7تcüŃ÷xÁaûM-3Ö7Ü-;ÝÀ9£ƒâE¯ãcâ†L’ÓMŒßÖ12™Ä Ÿ"3c±®×S³¦¶ýY¹–¨Í^‘ÎL¦ð6xâyðÜ)A(ÿom/¬!ƒ[¸îÄÈ6ýØeºÞü$7J%ˆ¤ÛÙO"›ú²¼ðôVhÔÃð–Õ)lÒÖ [ŽÜ²ŸXyÛåãc¤Cz’ßY:ñ2PöF*ÂgÌD 5ãuBš®áŒåö·¬A˜»3ž¢þ¾×1¡Ô0›¿—³È$v3d Oã¶¡æG@;ÓocaºßXF´”ÍTx¯ iPêß}µÏ÷±ëRCS¥å€¾N,ãêe’ØæšF¶<ïBwg÷¸ pR‘ÍÛîQm}é×\l²H”„iåù² +HŸrM?µÔÅw–Ê>ÎÄfz+ ™#Ú¶bu–—­¬ÍëQÆ€‰ØH¨îP¢„ˆÉ5ÖóòšïŠõG©¶8ÎðªCæÀò‹{Ö-²ßüÈÞ8ºìP^êKsCšã t2¡¿ú¨ÚÚô<ÎÏÈÈLVhØXº)OE_tfm#¨|qYyÃòÆen´8íÖ£ÿ›ü- VÂV)©¾½ç†?Õ²+{ÿÒ³”ªÓ§‚‚ |Ýø4>¯ð4ß¼Ït¨ú¹˜­ÂBVÆÉKæ)Æ3ôÏe\‚v‰Ö¸š ½½Ÿ&¬Vó*}’-áØŽîÃm?BD™ÜË—ßßò¼Q£¶ÕFÄ–É6ŸRÅ) ¹Bl¬Vܳ¶PÙ=ò#þ¼¸ ï21õ˜K,&]Ÿ=!èÜ+ö÷S õ6a$DqA·Ü´ÐÁô I~è\߈3Ê4ËgD$à¯Ë9 ­…çÙzkùmJI™F'ÈXì6i€}Üâzbô }ÉÅ} ûyꉿÉÜ:^!^\ºÌ·¸}΃‚m }»F>þH±>’ÏtÑ¡A6iµgc=1èyG ïi’ÅKShAÄÞINàjA¶)ÙQª·cn)Rü€êZ ¯¢£¾€Ë58^þPNVj†G‹O‰„}ÔÁî ¿ žìØâàcxÝÂ0µŒÃ, I~„–ÙãPÉk뜱ŸÅOlM4ª2HF×,ÀÃÈn‹ÂvimõÖ|FïÐDˆ:½~Ú –D°³PùÎ𧵍9£4=:æFè3Ç¿:ý as¬ýJunJzzsÂ0{{½F™(ïýL•Ä QãkmÕs°1É üØìèz«F u`‰{ Â뫵®e¬¾•!ùW1 ì¸v çË_íÎ2=~Gˆ-ÄWÿxªÊ¬$Çi³ëadË:õJI>ÖSÖ +Ë43ëÝËqFæÊñ‘ç« ý(M©½»ã)¨Göï­z,oé…<¹;ï+‡z)õr0Q°.ÇýÂn¿‘0ƒWNÚ ‘RÚCOÒ¢s‚ÇZ‰(G*i¹ønηB —ía{‹fl`Î?Ò+Á(ç8…þ·RÅãºsØ\’éöVâØš@¹f´˜¿]Ê_,$s&¾÷-Ü…WKôÉ(U³æ¦&f½íqöÅ&:þA§%ÅÁè{ÎÚÍ­YwÓm!ý<=ò|yñˆ¨$?Ó¤,”ÂŒêzi6/H¾ÏÏÄ K…Ëç`}“¯¿´^X¼-⤆ü°ûKKÊâ5HæZ0T‰îb0Ê+2CÔ}¶0Í}·÷Ö²®3?BØ®FwîÓÛ×ÉDù6#°(y4¨£P“_Y¾‚—ž†¦£ÍXÎþâRè–·Þ„![+‚þüRißr¾Œ?³Õ/ªGgálZ¿z‚Ä8UÕV¦Ú@r¯ ÿ‚bAç·=y”™äA=1$Ìš± c¾ÿÄÒbå~-ÙĆ',sYfÅòèÙN ‚ Ú{"]ÞÂQBBÀ`— Ÿc´¥ˆÝ |±|g¢Á”†4k9Aö°$Õq¡x€aìK‘ºÅ»Ÿ‹žÞß¿|_O3—`+2`‚â)†•…ÝÃ5+§¢îE_üÝA‚Ó÷zj‹Îê(<l»Š—Õë°Ê‚OûD9âųŽ64… "âP'Öý*ý?P©g”zÁ¿$À’ÙfígÌ©"v‡Ž|àtå#ƒÔï4ú¦ÃeíÌ.Úê5ÁâäßÚXõYë†í¼Ù2g9þC¹ÎÚqE>¢Ø¢ïŠÑy«‘ƒ õÀ%áFTÅÅ¢\ Jü²ø¹×ê:ËiTìçDÀ.x:Þ´’££Ø™œë›Þºm4’ý‚ÀW{}‡ua›FÔau²|eö 7R9-)öˆ‘Á”ñ» Ú°MaR¦|“ϳcÑÇOÞil,Ñè¤:u¾VWƒ…i=ƒ.¹Í°Ô…l.7:Úo¡]É ˜_ùgï5æÝ’Ïv*)R 9•\™d’»-Û!ÖnŒ–i(;ÏŠ'gx›?ÛÚÿlRð¥zq¸žúd²IzRO܇î)\Å–{‚_í±úöñýêÔ?AvÔB²{ƒh÷yb¸³›Éö+­FQ±—YŸT{î Ôï>S> #z½»úd0‘£éн,/ìɆÕýsõ4`‘1­Hm^ 0Þ¬ú/®X®:5úÖ¦yTý¸è¯Y¨âî-ÉùrþÙ<¥ …<ƒÞ±ç‡ˆeáˆÉÖé}¯á$¼&7¯–r|04bT±¥3Eyï©ò%ÉûJ(¡Œió8‹xPV4Ø:ŽÛÍßÖ%®Ueà¨÷o²ã¯%Ækí@˜ÕÊ&¡ýMÙÚ¨'SÒ/*–9=¬Í„‘‡Ç,uDƒ-*Á˜¿‡ žaaò© é:±‹V®4 Áû#@8zÒ~ò˜¨ e³,þb÷ÆßêLÏ‚Ô]®Þøçè‡Ì:IŠhY«†õ—|¬¸z¸¡|xøA[D%ÿÓ”ÉþÌ–µþ„re y»ÁõV9ÚRÜ¢ÐãÑ„ÝíóCõÜÕÔûäwr­ÚFp:»óX!6f‡É•GÁ¯néºø‹¢•Pî•-Ѓ]æÒ¶Žã·p¨x\m*3ò%ȱ™`ŠJæR1€Êaj$ì9>œ®–¶*£ö>`-øþríÚ³q[&çÅpŒõ®G¦ègWƒÒƒ‹zš¥\ŽU9{]ðQ<F⥒,#–Ÿ`C¾ì¥¾ü*Ëœ£â|G/ £Ù³Â7a‰ÃÅ<®§š•Qì 5˜»2Õx£àÑMª½­Ò>K Ñ L&ÿSÙ/ .Ç òŒBH[r¬° ô™¬.E–Ì“%c±jèæºãWG”€ÇÒÛßHžŠÓ³µx&ß_ë©™%â »|÷.mØÊþª%«5(Û©£L˜Ò’.Öi²39êfv2 èÚñRÌçö ü‘‘¿_–ÌRVQõë2±ŠØÀ†œ1°®¯š@§ÕþðìéGWOž+kFè ½¿a¶*$Ä‹ –ŸÍÎr2 Vx/áèÓ Ù©¶ˆög>`ôX(`–²_®ˆã…ýtž`é.|^Ò{Ö°Ç›øµ*e^¾Œ»,\ÕòýŽÚ{›\2"]{‹šæ2FÏYŽJ+ïû X„òpíÝlÏïPš¤Í/ãi@öC…áUÍÑÅÓs×–YÛˆTƒSxëa¸Aõ§TB™¾!©-‡ÛK»+Y,Æ$ƒ ¼]qoi“N Š|vÿÔ÷0]ýpÙJY¼¿Õ]‡¼?†f{¥«ØÕ‘§¥mO>ãL2^òò7?沕]C5pI ÈÉ3ÈšÚ{–¥"þM‡ïúêÕ~¿¢œ?ªð*Inú¾]~¼òƒRÌa¿ÁÙ”Ù%—ºôgõI“fcyqkÉžÁ˜VÃ*Ítφr8Ñ—¥yAO†“£`-ÆÓÕØ€ò¾Bóâ ôãÿ^* (ônºë¶è¶Ódwñox:Ò!'”±mè@M-ÿ5AZÿ5AZÐLög¾^‘ǃŽGC†š!&k‹äÚñÓ?ÂÒâ=ŠÕS 8_žØß±—%Áœ3ì2Pœ]/m‹˜Mb¤F‹P©Ñ"Z}RšQ™eÈ}&YXÑZÎ/¢,WéYÀj¶Õ+O‹ÊÂ’ qåV•–Æú—¼Lb•§Ù¿¤Q–òëi–±S.bfc³(Ϋ\K²I¦ñM¦þ¨-‘"7«lßÖSQPl¾«Îo9Žzïx= Ê †½#K‚ë•>E —`²·*-²¼ '~v‚b£î:½e!¦¨Gp«—1Ð+ïT;dôGÌÙ"êê±H¯S·^¨çe©Ú- ¼/U÷¦:Zæ¿Ä3ÎÇO<äkt…b½î3:wüƒ¢kzÆP*Û“ò 5ù¢²X“žŽ“áQ)g…@d,blzÚŽ»µ„#A’‹ñBV~}oÜ úÍèÀ·ãPò-JßûºžêŠøñ‰Ê>hÖÒ(ä¢g: Ñç'<>ëë©=aPÀëŒÆsÊ,Ñv= ±áŒ·©èÚ¯ ¿”9x®ùö=EŒ"E• JeX‘Öjæh;N°EËŒhe˜*³‘ÿ£1kki…@÷¡ /)´>´ºIËk†xû Íp>3ÀèmeõTÔ÷Õ5 2 Ì‹¶"yÐÎwvZÓ‹L¼Ø‚ x†z®ÊRr[;V´qéc=UyޝA:†ÛõT5TŠ^ShÅ8 -ç„Hð?4AÇ2Ô£qäÊð¼Tt?•€ ìuA«ýÛDÞ”»'ÝÖ7 ¯°i#:¶8³Ž¤Ÿü»OÃéê僵 âÝÛz’öý)†ÑßüÓÇ_?øq‡DS4úÓw¡Þè¹ò‘tÆô±_°óÅþÆù“ÕŸ“óÓÛ¢ D§ìdО—moº~ ¹h¬sm¼A\Ø]’¦êË­MîÎ×y›ð5÷.5e±²¾‚8M4±é±é!t{»£02Üõ\Í‚‹ò‡"UÈ< ØÐä³eðS%+è·)ëáù¦“…LÿØ!²D€€Ÿ£\ü1g'“ÌN Ð;„Ǧ)kŸ0@Áz§r½ .ÁᱦF™bˆRõ•†?¾vW{Ü™À7MåH€'h²³·%¸¡Â#F8-Óܽ>½©e‘%í«òíIÅp¾ttôоŸße°mÍGVI]µà~õ§N8Ž…m[Š Íœa8œaF¹Žc[K[¼ 3í©t2+\'G·Eú.³?ò©‹æŽƒYŸo’ìüð¼–»Kƒz"‚ËžŠÅÌå±Í;¬dª£ÑéSQ™!éX¢’ý3ÈäðÌYäÈï’ oCÉÓÏ“±ôÛ¶²ÌR˜ñ¢#ÂL(æ~0ÐŒ½‡k¶„Á™·M¨¯à?·³G`~N `e'V.ñŽSÜ (Në¤üê/á/ª}~¸T| Oô‰ŸXTmi¸ˆÍTiCØÓ \éÄ®õÔZµ¡¹`<+òóGÙˆàåþ³ZÆ?Õ[TíÄêNâHcúæ}ù2÷—¢ß+I?ÿ¬Š×¦X^)»=Z6¸æÑÏʵ@×[/¤ ¬©ô×€ ŠrÛ‚ ö©…X{gT~#ú%´¦àŒ‡ñÁ}ZÐëüEä”ìÓ_^ð#¬søK'½Nýd9/@mrñ‡Ýé£B÷Ãb ò¼é§ßDš=³:‡›Q„~ ü,LÒC¯Ojã k ö¥ë’Å ¦³¸Æ?MWzd|º ƒÂÂ\%,ä¡– [qjàÀ f–°0õZ`ˆ´ñ(RŲáà­_q^)úÂTöô¹Xç~3ÚÃÝGsøc/¢P…È"¥²¿„Z’Áë¡9ÿ¼ =®vŸšÎy/”àöMeÒÚä*^á¹L}âx?,0ÜwÚe뢟J\Ȳ}í:M ʨŠw*XeGdŸþ] wd3BR…7Ù±£?+-WÕ¥³µÑ~I©±9 ðSö*Æ÷ZO1ñaF–‡¼ÕJú¼!‰Xþ&ýà ”óxen++Õ{{ÁºÇ—B̺ê)Ζw½kã뮼àW³PÄõ6ã@¬€¦à¾éïÖgñRn`…è¶+¨?úgRTqÔc27MV"ÀXÓçmõ6õ¢½ä£«{õC ¢Èæà¾ÐÔR^‚êâ`zEû5¡ì O²b§Ì’DÆ—‡øå}!–cyQœ4ÕM~ôQg€Ý¡Rô‰bj©¹®ß_©Iô²&b‘ØÓЍYK?ÜÔþÙI¡kmÒ=œÉó¥¬;k#€ï„Oèh®l˜Þ'üvNÏ=©yç„= ? ƒŒ`UE7á¨j‹ X^yyKò>{‡‡M®“ÁÖä÷½ôvøÃ&1Á;´„ù!•Ò†ñ¸»¥rëA»D«Ò«cá»§ŠäZæFƒ4;Ýn“óQ¢)UcMΆþ2-òµ»6±ËŒ®áƒÁM–ˆ½€æ;¤è‡8Ƹ4Ç@UhÈÿö»ñb9|½äÜ ”ƒÎD:±¾J¸ÂhùŽŽ ~ p‡CS…†¿‡ñ’±<ªmž@(R(é„ÖàBi4C*­OD$A¡k½¤°9Œ½BKGÖVgø”)A?BØñNc³0óÃd3Úç•Ýùú»¿E©„=ç ˜ìÆkèÓæµútï4%Þ°ã;§Ë‡¼:G¿âd‹®ðUR¦R}­Àý‚Ã… ¾ÒõÔ§ /­ÑÿÓZ Ü …  èïÜAtö<ý÷-‚ȧ멯ƒ9»´dì¸m5Qxþa­ûH“ÜDw94§^îú0‡¨Åø±Þç¦)©­–ˆb‚9 Kš¢Ãr‚3Žkï멼œ´]ø”ÉÆ#Û 5oØ*¯o‘Æ+bètf Œ3᎙?ê’ÁÄ ûË[–ã›€Š¡¸á¹yþ#‹º£fÆDÕãÁåmÇ¿¶Íäp–è7í½[ÊòV­™FØYVø‘!Ô3;-bx²UO)/^ÊT™bR§“sp‚tŠñ3÷L[U ‰ÊôŒ¿fõø»Ò:-QôЖ¸ç/ôkÜi Cƒ,8Ý;O­~gïšß-„)è8ÞcõÒÕ+àËø‚ÞØd,uÍ”Cì–ÉåÊôðéhŠJÓ'fu`E«#¶n1ûÎ9©iââ%ŠQG»x@/ YæèEÒì@ [I·n“/Š3ð:l½#„i@£îQä>°eZY€ßÏs{N9 ¥¶:ði–ºßÙ6Jc2¼ \?ÚC{·nòIãYÕò†½ yˆ=ȃ­ðÄ=^‘˜™JìÇ|ÚfǸJMa®üÇOºŸŽkªØsCûÛô2>}$aXIÐ]—R¯ˆ‡ËƒwJtÏÂ_>~ýRɨDóQ%ÜyàµëÅõ@pc¾ÏkÞôhéFbë©£yac=÷‰b)-}î‘ ™JUváéì&^ål\…ð¸–<¨ô¹<À‰´ü3§Öœ>dspV9ŽT²ŠÊ—'~åD+?í—•(,²½T§/ªfUì©.×S÷W}öLÂK’˜sD:© ¾ðƒî üÄÞŸ;|ï5cxï ó4M€„¦ž*E¦¼V™)bÆïöR®³W˹¹ƒÛLŒ½7¦ˆŤ( Ò§ü!ß~AÓ”–ôÉ¡êøÝYÿr¬E/7 Tæ£ÙUYt9¦ó•P¬úäšý3Mé/”ö˜É[µF–9Ànâ¤'Ž?7Oºdº2î£mˆ RÀŠlß´aýPìš—3Ì_‹³¿PŒ›Ï"ͬzêÙEG¶v Œ€µÛî>AVƽкOh‘þœ¹Ìô‚BB•˜PǺà6vø¬à7—Ëj‰Ò‰ºXðîH=Õ ‡¨/hšÅõÔ‹W¯FŒ¶¶°8‹‡z[­x¶·=`å-Ž!–bÈ>ÔSG¬¦ø[Oý›ˆàÅÂ>ž¡7Lƒœ;iì~Ëì&'Øë¥Êzm¸5³¸µøø¬ž*‰Ù£¨ÕÚÞiwzaÛD³Ê»`Êuf_chª ¡u_¨(_îÒF°*eç¢3óâCÚ»ñ§ Ö®‡é¢žfRØ>ƒ¿°Å=ÃvQM¨1 `Ô'yõ Pú H‡Ø;A¸då(ç'’+²a@ Øir ¦ìqÈmÛnäÔÊ›³ö¢«M_—Ýkq³>|-¼¨o˜+°æ” ýƧ³._§6е3ÈÊøÙ˜šO7ÉпmÜ4•leñÀÊ:BÝõ7€s’[î}£SÒ¨à©hò;œ¹KŠ:ú28ÀŠel/ohã׫òóŒæ &ú[,H)êi;e¼a0øhëÊÆÃƒõTíO»Tx¬Ý<µq[AFcÿÖfß|ü:!£üĆéVeqávßòÍÖ&#"¯¡}5Ç)‘G^óïÙÝä¿dw÷4WO$L¡fµLîÕSÿ:¹Çg.¡d»Ó“3€F½+yB#Êa—˵ù‰<ò~\®'us&uÓ‚IÝÔ“ºÙꓸd›Ð8É#+\-ÊÔ2´qÿ’bÍ=ÅšþgOÐO× à?ô¼flëŒ$#„p܉èApÑjŒÖb^ðèôÖœ %þÒ™ìÑ/¾Ì)Ì2xûWJ¨=É»JÊLîySO!}!©U˜¹¼xÚ–AežjñÍ¥¼ðjp!¶=§ðXÚµ6ö -öYûnéÊÃÇâ#+¬£ï‘ŠŸ6öòª ô:5\~óä´üʉ¡¯e?näãëÇ’©ZbpY=Õ*’ÏÏ'Zi—m÷CtŽT}$‹Œ‹ƒµŠÕêÉìÜ`Òÿ|º¡€áT!WO­6Íqi¦ÛZŒe=©ÕšÙi*¼¤Õ»¿›dHççÊûBF“•ºÑßÙäu^äWús³ä¨]ü1‹dþÓñZ„m¹!nÖ%ÞËlÑŽ[óý‹Â1gØžá‹[Ðzßq1Zàá‘gNXiøêÑ:ºÞxL%†ïf»`¦¡xé.w”DÏ mÊÀéÙ_³†è’Âv¤<6#=ùK»M#Ü ­ ~êÆ?õÔpl÷T4ßÌV£C·40Õ}Ê´n"ÂóQë¦â1lÖ#š£ýîÂ@½\sB°ñP™ÅûetÛÙiƒ‡œ„ÔÉ’ßwìLš–ÿlÛ‚jÓÔ¥]ôë†kðÓ/k1%3;žB§øzýLdÂÄs¨Çb)˜—+ÀÔ P±‘—wÈpÂ&úò]z)‰&©Ÿ][KÆJTpÔ‘% ñ—ÜÓ¤xÈÏÌR@-Ù *¸ÿ& Þ·tnþrÁªÔ“çè£'‘H÷g~ «—pà”²òÄPúÇÄ‹5g~Š­@Mä!‘ „ƒ0µŸïØåë³ÒY<âĶqYoŽ­•Ù|øÄ[$vø½tèèyq>ÄïÂúÕ²²e §*gzMôÿ~Z°À*e„àTRú5ܹè 5¾Õe¥À†>˜ó¦A|}§„¬‘ z±-¢kØ|o§;¬¥t63ïQ…XæyŽ“Ó`vš})bt"%ÿ›NuÑæ€Üä“G¦*H·K$æ3Ð Ié© +»¨O¿è-O-áÊç¦"Ø!lÈμÒò¶¦±üø %ÎMZõ¿ûéý>Öû†ÀÕ‹›,xYùÙÞþ!¹b #:(W½\V¾þGõdä燎ÌÂ?f®H¼µƒ3’+Ì 6¥~~«ÛزûX`±-ñÞåîtçÈU&~PX@MŽ™Þ®çÚè™r7- ½¸u‹#ð•Ä"4ºÌ ¢úÒ´§¦h¦I™ê™Ð¸Jn<)(Îtl&2§ÈØJÕõÝNíÑìš[f:¬hlʃ¬pøŒ*¹M2àÖαCCçvÜc“‡²MûJàÛlóô“P»Ñ]{iõÕ5 = {=ÿ…^ ~>ÌØ`V(jå±ÍýZÌìJ°ÉÑ͹ ž/, ƒ²{%&–MY‡ Ó¾*Žõe  {I…ð´ÙÒWÎaWc°ˆý QaÚ7 ì`ã»öø@mâÇ †‹m2”‚v9 3ôcò1µ£Rãf–¦Æ»‰¹GmQ•çvSaýré]É;èÓ=­òo&3»Ñ4”&“>ª[{.¢"{óo÷ø¾¨5v€òzê3Æ¡%8äc°2ÍwXN02MºzRÓ%RY­jÃMDòQÓ\CXS4¶“9ˆ‚3¤Ej>d|ˆ#—„®®.‘¥-/*ÛG[S¬T‹#\ÉÍǯz~Ò-m âÉÈ]B›Ö••|‹šX]u ó‡²y ¿ÀAuåŒ×ù´Gö'ù¡?ãôºÑÇ÷¯?}¡õx£´C¸ ¬’j¥ÿÌ7àløžM‡K­z—>ãàÕÕÛZø¢»§/öÍΚ… Ö.G£ÅhSÞø© YOD|‡•ö¿Ø#‹À¸ÂU(jÊü¿Ïß.F"<˜ËÎÝà4ßiutnMc&/”éúã\bXDí#|ý'ëi²ÓŸª(Eu–iÃìŽÇ»ï™åª^©­"T"ëW‰cýcú—ŒžÁ1FöÎL¼§¬]!‚‹Sbþç¶y—õ÷¬z`^·û«ß)úPà6ÿŒ#A¢s©Gòr\®Könñ˜} IØ« -wÆcÜ\Ä¿‘dçèÝd}HxÍP`íD‘¥¯ßÏHºê‚¶AºÚ ÕfeQ¸¦!©;ËÊl y-Ev¤žzùñô¥‚qzåJ¸¹e°íáÎI‹#Ø6ïI ÓŒwÖ=qå/8+=WnÍ™ZsÇÖ 6N‰uÈùà>¦CËä‡C¦ äØMÏzª^«ç*e CÑR²V;” öè˜DˆlAŒ˜]ÜИ|ÂÇYxQ× {Ã’7ÕÎçŽ"´'˦ë+ª³¶64ëXp'7X Bû_œ¯§N½J¿Êh£$»7怡Î]AU­ 8ZÜg˜¦QNN3¹‚ö˜ ýÖÁþ‡ý5—L!L!x—þ[ú®ž›¤:õao™¯õ²jN„âTž®Þiªp Eøb¨Ô\KG¼—}Çïy£•/[_µ‹h”r©ŒBø¼Ìíz[-”[9‘-‹Õ-´vapºžz«¶ý âe§ðBÄ#¹‹ô¿åÔè\¡3¾%3Ì6‹.””tÃîÐíš#ÝÆßÄSÚF)¤†,­C¿¯§úÆÍ`9çjèn̘LjQ_ÂçÚ“"ÔAó ”Ëõ ‹ã ë~ÚÃäRIèÔÃé´Bý‹ ó ”Iõdóxh­ ½/ï/<ù0ovÕÊS;P‹Hdß§/Ùñ⎲µTcã›AÊX,|ÃÜØVøn;g|°eöZÉí¡Qc³ymÎÐ0_™Â…F‰¯{ƒº`Ÿ1ÛÑ·¨o­%y€Ëønü®ºHÌ\ç:Èyâß™SçqâékßÜ’Œ‡ξ¨ŽìŸ¡>J¼šü àîqõèz½6×äS=µÞé‹â>'Ë¢yÁÛq^6/o{Cñ PÐnà!ŽEæI9^æ4’ÅI\š¶ÀÈgî4™fthMØCU]úäOqK6щ°i]çðÚÃhÞçUÏí”Ã룕ôFê‘ò®g³~©(ÿQh6L¨š¼Aì¼s#[y‡óäqÜá§‘$ÀØeíòZîÓBFüý YˆbA¼µzªü…³‘Ó“=›»E¦#}É}Ÿƒ`¡N&»‰áH±8×?LÂìùΛš3K£\ð´“±ùx†|݇ÿf¥ÎÔíãøãÙø…ÍëjñùKíYùM“£É6fkkWÀ!šrŽ£)3G×°Œô›ó¯³:¢¡Ÿ^0›/ÝÜ윮ÛüèÊw:ÅþJ§>ÍïW$¯=«±xÀb€CxúÂð‹œð4ò×½S_¯™ô¶—Âï½›+wœ'–?’½#€Ö=Xwe,`l0àúöî_Ôw«oNΞãøøîX@äœPÞ±¯–‡.ëù’µ²Œ&ùZO|/²å“~œÞøƒ<ºá>àÅ[G\}Ø;™ÿúgûwÎôkè œ×w?kýKÛ2ïCÆwîKø(к‘\•)³Žüøªïüê‡kŒ­~¡—k:¤/×\$¼_²æ“8¡i§\İGuÙ¨Œ™7SD.˜Ú[K}‡-£Ö.#hкúkôgR¥¿ˆ€ã±]Vd^<âjÊ;‡+T¬˜rÞù¾žõ0sΩa4¦Ãœñc ™Ïg¶Ò›•-¸(ã²ÊøŸ¸(#´2ØrNV£±Ÿ6"eÓ|ÇVÚ®/Z{‡éø³ÌŠÓl[{ÏÔPšµ+t´ÍÊU¹^ç<œÌõ¾SNuÃ[ê‰à:¦WkuTX/†ÍÇÄc§«ÊPw˜+DZŠÒ¹}|n΄ݽڒS…gs=Æ®_K#XWöL¾¹"j줕kŠŠén‚¿Å6ž E<¡¡üù HYYE¹æ?ŵ´P[ƒÀ³µ0WìQîbë‰ š2ÿ4;s!'ýé–ìáX8vÅæµ+Ûz*\m3¦ˆ"K[ŽÓ5›ÇgO À÷%}Šfsî[Ë-ôœ@óê±øSkäà°>b¹ ÌþV,][Æ­zjÐlÏŒÉR7™0œ\OËï|1sKu§iDƒÃ)'¾0{€„Ý™µäa(Î…u´c¹ùwƒB”œ¹Þä¨-GÏËJZD˜_qÌf´ùµWÜæ¯öp®U“ƇÙ\|¨åYݵ8ÕÝq,ƒåéAÒPø‹Btñò¼,¸›ô^ë8yWòåÞ~A#hÍ^{ëÛql·—Op“[…I¾è8XÝÉ¥Pàpí“ö‹¯'jû£S5ÏmðmTÈãGeen·N/T³‚dÄ$å`Š!=½´3Çòh µ»Žî^ñ™N-íÐk{QŠp1Z!èpòiSQü"Óá,„E/ÚÓó‰Ï}|æ(%ðU‹¼”ŽŒ¤hØÌ†IçCõTÏN[¢ú:£¸–c¿>„9!§)‹Èi*Åi*WO&E.Sšfœsœ¥9NYž²¹VD–œ ›õQ’û­þnHmNs­®µîqžØdç$açÿ0+‹¬øïü¨2œf&Gÿ±XÌUd²Í(H<4%3X!*1§6‘¢6«02%WÞ lª©€cÃÔØ€d÷0² 3T ÷B—±1TXO¼xÈ#»Ì¶•Àu+òJLÒ&/Œû[[õ^'H¿Ö6y5ÐÀþ\ó×nÍáëXÜ&²µã<íÊþ³ÿØ/UAêéw5¨§€Ke ÕLf AÌå7];‚+œß&D³¶¬ILÁ|÷¦9RUWwèÓ¦°Åžæ‡à õGú ܲ*d\s]E€'Ìbý%!½( „6÷ˬ wå÷|6ŸoµŸh‚æóp"Fd¬Ò›D´I%—ozÜÿ€%Acµèhd¼0¯³?©CÔÆ¨µ×|EŽ¡D¿¢Îþ?-ÒÂsžxawM£5¬vLEë'ì߃N¿!Ç0³íÒxRöo&pSmïžlát»òôwDTeåsÄoHí‡9»’Ô xLãñ‡í Ÿe™Ð:€’Yª"Ö€1< £Û9æ!ʇîÿ:dÚ›c,*Ó•ýÄá³Í^]ÀÒÌC;ÕË¿JìÓcìÒŒSø¨9´”ýÏ ƒ_ M§—&šýi«:¿ñ]§Uúz…Ÿq´û§ýTÙÐßµîv+Ÿs ›ªaw¶¢£Ž× £7.öæ*XKÂ21éÖ4Ÿðì8ª,1ºÌ˜® nì@Êø©Âf¡X0æ&¡ü Þ%¾ë€&&sÉi Ýog3¹Fpô3ƒ¤þ„í m2àÅ¢7 ¾±ú·õ¦ÍÏ„Zð ·P¾¤È«Ý·-0Ç5…È2Öw{‚Ä;‡¹q)Eô0ˆ1%îV¨jmλ§roŽÖ-݆Bö¢‰ÔiÚ´ù&k"¹…4uߨyignš01²úšÞ`ìâ,®ê”½¢çÒTß°5Þ4"Ù1û~´ù:…2¶… Ùd¿Z™`Ý#z¶´Íù¥KÞ=Ç-©#.T‹ò²ïÕ1ý6i–`0„Ð×|Â1óÔ¿âFQ•é£y帳ÜH û"÷Îeú°üC3»/=.û%ñåOž@PWWbDï#¿B”ù‘Ý"‹WL[. e°vA{Áá„n-Ó‡¾Ë{¾×S3!gs €ÂCð ͼ3ëÒX ÃIf_™]ŠÙ‡d)\øÁò~=! !˜úÞš¨ÎÖÖ¤ŒWK7U»Ä¦ÕW‰žÿƒÔ€èyÆcÈמÈþÁ²O\”…õÚð‹]µªz $GÎ鉙PÇ–{¤Ì[ýu‡×üÑë8ü‘XéÌ¢¡¿ÎË>Ø>LEµ…­„±Â^A6‹/—8í“ j´Ÿ_ L±¢å´¼¸îjm#×*Ùàgqí‚·õT¿ÒÂ7ö\( ðÉüBÓ˜0t>@cËfôt3`f½z(XŽ6/Ô×°Ìß×[¨¤n™gFÖV´£–› è)®ÞTF¡U) ‡–‘&ÅÐzc¾¬d!¤ˆ™6ñ\(ý |‰o<´Í—Aõ`9?F“îRK”.=~J>kÎÄÖÅ—¬(¿¹}>@—øKÞ…ü麱8ÿDŽý#îÏùcžS†¬E¯eÞ|ö0Ef<Ñ˰ Eñ½’QÍ\Ú¶ñ"â–z¸•…øÛÕSw î€Ó¥Xå^ A®¥ðÛ–AXtóZms{Ëæñ|€8RfTDÓûkv?¨…7Yq!ÄàÄü(ì¦ÛV;/ºx?ÌA •X^ýÚåGꌌÌh¯‰•ÍÿΟÎ1<{©¤l°¥óÏ´ K Ä›_kË ÓH¢WQÏIëк°ŸzmŽ1¹Ntá¦,l­>´|ªouMÎj0¯•è•›îcmäÕí?¼1*‡e¬~ä ’=ðÌH¢ÇUl$ˆºOѧ–ic¾Rcôâ&ÀS$ÿCëB~•^tÂV«9NÅ!D&PøêƸv#JI™â{"èY2öRX)cAxw¤C]&Gf b\bÆ8»j™j{Ï“tFz#«öÞñajÁy7Á“f{ý/?HA;¢ŒöX?Icšö¤Š:[K èððTºŸžb4Z]ø@…véO=‘õHb:ª‰öhKAæíüF¤ ‚YY·˸‘ô,ÁÁ– Yv(\c…fÑ8&Q‡¬Q>·)*¸XCjEãYé Øð VéNŠjU™™ÂX)­Ž(-Â,á[c”ýó©6* g‡b¢D¼;PÏÄèPøKT‘ЂÝ`»àÑùfWí,5l/ÌP).‘½™‰âŠp“ÂÀŒJ)èÇÜš@~Ù醼â8ßxÉWÙÒj6†—$‰ô+ÿ!Zð8Å î%$½ì°6%Šsz ˜«hQWŽÕ'3¶]Z!ÄvM`–z¥²^Ù?5F0»éϺßÔ.Û±µTIô'[@ãµn½ª­’)¦¡YÜ4µlK|RÞD‹õe+Z;•Xš¬&¦blQXxÅy¾…? f™XJ€`») ‡Vp! bºp¨(â“•ÒÆwÝ_«Ø7^^ “M°¸èXÓ.È_TõTl4›…ížšx«:Fs*æÐií­‚Œ_ˆJtJGŒûìyóM¦˜‰¬¾Vöz„Bí½_ïH©©ìw‡ÐÛ„¤I¥NÙ3'£Qú„o°"*ƒL ,rwûÿ,eéÇ5ø}!ÛÕ”µñ¿›öœFpŽZÁ!©òW<òåsáv¡XÎÖ]£0Âù}ïVF p^Ãær¤>Pé§<¯7øénè6ÿNqSÛ–“¦ÌVr5—%d©û â }pîL Õ …a_.+º¶“M?,اæÚ¶Aq@X9"}B>Ž<Û" 3Ç ¡eŠ ê÷ýTÄ;™’ôÈ;¥œçw¡Å*3ñ×Á¿E¯…dI AœJ©ä¦¶áä]÷ò˜kÒÍÚúh„bà“ÀÊþ ÷ª2²Ú%“鱬ÍG%‡œMd•1çqvAO #m2Iº á6J«§­W9¼§ÓB%.¿Q­P†‹VŽhN-9O§W­Ql_®¶ì„ñ²VqJ!BÔ OÁ8;H—$—s ãÜbùY ‚TŠFUHÌǃ28j5 ù‚l]ì²Ûµ¦™ˆÎæ8ÌÂ%4{%&%púèJo ï׎ñ˜ìW¨2ùêí²”uk¤hF7ÎUàÁ´›•*eÚ­,×¢¦n)Ì&†É<ÏÖ’n3²»ª‹˜F/gèÑ0¨\ÙC~š¢õVD·Î¥«+ŽècžÀ7xÂ|ñ©B. ¿_:ÂŽ1ñÎ…2 «½mæ•se¹UÛeAV»¶[n,-Þƒ+µM¥€Ft±Úômóë=Œ£Ã€·6zÚ€Çò®pe0ŠS0f KFM•5’cÈþ É•Óv#ªžêøv=;ªÉãÛÐ/Oí«,.‘ü3õÈÉ:›Úýtkе„XS"_×"Ç6iuèÎŒ½äã]A½£S¨KsBœ© ¥¦/>¥‹&ú‡ŒNŒ°õ¯ù—2úïs”Ù,Î#‹)ƒ‹Oš6Ù"„Ýû¤_…†p>’‡Š7PXΠ«0˜“ð~OQƒWÚÿ|º>E9´)ʧ(—±g`’Õ'iž¢ñwÚ8å(.PK~)Êf\â°‘M‰£G'¡õL“„oÆi’Ù²ˆk&E©?”e¨1:[a–®N8ÇT‡yœÿK2*õdT^þ§äl?­kœÕþÔ¬ø†ldW4¥Îm¼WÔë˜$-ó¦Àc½•l<5Yñx 4îÚ+̳ÒS;Š.¿lü4ïÁ0Xoè—(¥Ä¦‡â·LÕYcÇ~_ÐŽ”C™0@Ђ€±a/³r¼§°aQ>ùì1˜—’…ôQÑOƒ¥w\¿§ð¡W‹f“9G4Å^{F&TÄVœÏô¶æqqè‹· >¨¹9’8ê VÍw§ŠÉ¡Þô °ÈPÄïRŽ–¶¶—ß¹p= ŃÅ%Ãl bý‘ÍÁòAêçÐ[VòlÌem [8Ž uWXMsuçâ°Eà _]³w6³Å€Ž°„+šzjbÎæS(š§@PŸ\ÂÀziòx­;•ጒ èˆ8=ZñŽ{Í×* 3‡ò·.wgäÇæuçvQ)l”¯ÖÖ¶Ñ:g3À\M1˜iùÚvñÞâlCëÿšŸäÒÁW&B´¨§!EFTølReBp9)cí“z"…•åßßòBÌ=á‚8à«å¶öñ?åÕ},ìD¡¶?~zD†—3z—:bÕù“y¯‹ø !Ïzª©l 6ÕôŒ¬Èõ!ÉUˆé.RÈCq˜œÍe“ƒ@:‡Ò¤­÷³õ(ä/pð?þTÿO2‚E º·~͇zm„4Nñ÷eeç‡#Ê<Å“\©'YC#~…ó¡z¢Ný¿øwTŸt7wsâM(ŸÄkš“÷,tVŸëÕ¿ùŸXKþ°R²¢Óʆ:œåPpó~ó–90¤[‹{ñ‚0ÿàô?ft¯)6Ÿ"v’­?˜ñ[Z4ÉÀØ›|51:œ_¢Z0ÌËÁ¹¢?urhúô]%¥ÞÍ‹; pbbo ì…õP‘ïÓ“ãž²ÅÔà DÃ.ifA`‹´á“‹¢b'R!Ðcªl‰ü¦¢F"«ÍæR„»†r_à…«maBâð+AΘ{®èÁ5à³D”¨ 3_Êb`Ó|ý÷²­Ì<ŠÑ†¨ºÿµžx+A:‚T26öŒ«O_ïuÑ¿e>Ç&ºD¸…ý†Š5õÕ(ÇM³¬ÛÕ|;4Rt  }*Ç`쥠ž˜ŠDz 9·7yh o"„`œ¹RVÉŽö»ýXúkkñ5zÌâáÅñÑ—Üp|°cŒk8Æ9äôeïcá@Šg-ñÐUph ´|”aš ·Ï i˳ǫç?“䊠ìþ˜µ¨Â¼GPF¤±¿;Û}ÎÄIƒ‹Îü}\Oýæ+O GI@ét;™ÈÃÝ‹û·ÎÃÏh¡»Ùy”y)¼–$¢±ú°ò†0&+}uU ýã.3œÔ|Ÿ²«ÞÝbàþÄ<Çv[Ñ®X@Úf¯jÖSoÙR{2‚”И ñ«ÓDðþYÔs=;Ûíöº…¯„u”§@ñ\­)¤ [[¡ëùÂ9† QPÌRÞN…F<¢$Ýø@ò(“‘Þ3HfG•óü"‚­¶ÊT$muA@/à (‚Œ£ ]Rõ{Ö¼ÝÔ,kº °ˆ<¹&\Î\rÃó*ff\Ýê©Óå©—U¶„,>++ÕÆxܥϊ‘²¾­Õ?z8/zWœ%™BW5|“Â÷ ºe$^Œ½#±×S.§d+Œ=Á}æN³w(R¦^«;¨ŒÑ_€ñeð˜]¾Ún¼hñµªUë﹌Gf°XÎÎ6ùP}ÜòTȧZ&±ßÁ- ‚Óv<IÅ†Ì d•ÙÒp-<¼Æ¨Å˜Ô û+ÅM4šÒ¥ŽAذQz2§å±VÝÅQÖSÇ)†èImUa{Dû†ýÃÌ!ûµÍlºäÅö©0öÊ&£Ùˆ¶1þçÁky¢6Q{Tȃ¦äºYÃ|…¦¨åZy!h(:ªàÂ:áTÙ?3 Øe/j1&’cÜÓߦVœMÆÖ;S\WÎÑhòA¨&”å´Ž^õÌÑùCršß.¢ÝÇãÁ|B7É™‹Z¸Êy•bœ±¿t+tG†`À¬XÒ ¸œ)õmЄN:ÛÓ8³8ۻ겛w©Ø*céÕn*.1>:‹°V>ŒqÈÞ˜‚3Dç­­ÃÊ|1Qhóp »)C¬U])–¿?g”Gg͸5åŸZ=É&p†jQΪ«n¿™Ýç‰Ý©‘Jor´Òr'Lª-dúøÃ1¶+öÏ+ãÛÑô +TÄhÆì—Ø+g`9zœñÄ4‹Ù†×æ1Oå-Ð-ôAçyÖ¦FŠäWüS&¯Ã¤2â2©Œ|^í¹_ EØ{ω ½‰ÍÊmRq°U±dzäe[¶3–ÍÌ-sG™ÍX¿VŠCºÒÀrjaÖ/NÔký˜`d÷¸Î#ù›ÍN߃R™INhêy ú‹„.ÖÝ\¦µ)ÝóSÖeši…ć†Ó¼bžç9÷«„ñЩêìÌMD=q|ÿ{8eY±O³ž¬ë/¬9I‘i½Ò§àX}!¯Ü<ì¶òÇÏf{jU^%æ<9 S#°ê:éKSqèð|ÞÈúˆ?W×¶ê©ẖE;ÖG°þ,žkM¡x R¯Ê÷S9ÿ{„]mTnààÇ(Þ¿é3tü˜´Ñåzn®ÐÊ 8çŽNº¹1òxe¶s 3jßìE0Ãâ@EkýðrÞ(@ìŠCópFÿ>POõa-Â[úúD+Òzêm^ä³(†¢LWL`‡n—䟊cϽÚFJÞ£öÅl´¨\ü ªw¤Dq¥Ø7„+Õß°r‹æS­êÞé§,ÓÎ7Ë;¿/™(äæÎ…ùòÝõCÌßÜ«ZDLérZ~Û/{¥X섽\ޝ.]•餯þl¸ÜqÿÀòlâ½ ¡:8Lfoí×Úp–€Ü X‚Õ5[K0÷šýËë&ÀƒŸP÷Aq?Á*ÕQ A ø `â¾¾áŠ.¡£ÐììÀ{É>ü ¯r”‰áÌW,<ûB7–»låÁ]J_˜g_“òÀRŠÄm|`:™aÀқ`<ˆkòÎç† ’ÐÚØâ8)þ*rìcß  ˆ§7êœxŒAß@’ñFã7[é.¸ºá1çpoºŠGö}ÓZ&ó1`xuí>¬Óxí¥Ö0”_C“ÞåÇœï•5{ Nw ŽÙÊÃÜGï!¸Ïª [ü€ö¦<¢Ï ñH×!ЕêŠã:«¸4»Y[ïRÛ«ð¾ {†Ž2 4ˆ>É÷BDqàZº/%?½•Ûµl$ é> Ê)ª·›:{¤?a>IÉtOHsÁ,;]Øóœø–úÔ®.¸hòTYÍ%û:Ÿ+Õ³õãc›Z„t$FåÙº¬êÙVhi>=ZÞâ±|’‚ã×:,XDò6 iºÎ=Dè¶|~ÊîÛŽ7Ÿ:b0rk¶—#ÃGÏ»ù«ö›š$U§i/Û £Á’¼’ùÄ/j£Ñ—v˜xõ¡×Ò`³vEèGg-dQŠ@P…Ý1#3Ú6~ißÐë©Æ+r¹XæšnPÃð5š_NFâ€|6º Ÿ3 KbWÛlìEø¥8ôÊ~˜]òÚ†Û‘]ÆIÍ&Ød§O¦ZW×\ÃØ‚ˆˆMé” Ææ ‘ã5&ØÿÁtåK[t 4Xb;Õ¥˜ÙÄŽ-Ô;‡´dMGvúYÆØÃá°ßaÐÄH{ìž3¼K”P¥ ÚZ¤!@ Ø1®ì€™7 ^ ­§7ÜösyЦ@o³©ø% ^Q*: ½sÃÂÍ{k}*‘éa¼l±ø¦²Qº²e=·Ú¤ÅN-!?OŠÉ\ô·µÞ""<¨`­W´j­]Š·ÊµÂR'0ˆzÏ–r³†b.¸Ÿ&¦lJJ÷ê¹'¸àփĠÎóÊ ò¦¦¤Ö7åOZ7¸¶>S¶œmÚs~–`ÀPÏó9HÂ.É5yæÙÞÏæ¾zâ~ÈŽá -²às°’ÇZóáÇíćÁöJ®oü¶øjq„²×›’xdºî Þ¹-/ìæÈ0§á„Ðð+»¶)š}R}C•r²¡9œ*p®zÖºh;V_Ï× (¸(óÓ&¬l„Æ“õSçM25pºÚÀwà†Ý1e4]†|+ Ç8ÀÖ…ÖßbÏUe8ØÉ¿À›¤ñÆø†ª¤é½ŒNëaqû jw„móF"jukáÇ• ý;ð:Q—F®ThMµ@]žŸ")Në÷MFt7R„—ðrª¾¥7ë©Cäa4¸€æ¼"°˜+t'ô¶N§´-ïÍo8 `; ¸žZõ²%x®ßìM2'9R*Ã0…W°¼^e‡ê—^—áä³üÉ«müº­îÖÁHÌž›S-mwUô©@tN~üØÀ%UÜÍqñ/­ÝxT+Eüôo=h¥Ý)ÅÜ_¿p'ð’„!PðÕSG‰©Šþü¤\BÆÙhBƬ@Ÿ4 Ù‹ÍÎÍlÞÚü:zÑÅ.»„}KûZŒ”CʹóuÞØã·˜LǦ•çGáÊe™ÓÃc¢Uˆ•ùeÀØ{:lK;õaé|Ìh횢W¶¿ïz#ò¨žºº±”¥›ÝÄ®«5Òãõ<Þ´5L+‚ˆòQÚ(Èïóeap\S¼Gr’˜mOÌ· Èòˆ7˜`o[6‰ý™¯™úäÛXçzx4íC=Õœ–ñ÷~ñÌÐÈÁ/.¤'Ùú„k_ÐòùÝvP¦Ÿ[›ÔêþÀê–Ç5¦(è_lDÁººxñƒGÒJ|·~P«™=Áfðf÷&ÖJí¤ ²6«]ß§$šÏÇêµîøb{”]EÕ5…·zß.Ìf,óBñ½MRÑBÂx.ã A;¤0r?iƒ×™tçü²Ù°,"YaÑm´mr¹B}´÷;mÓã ?YÙuenÄòYÊö³ÿäxÏ@[õZG²sÌ…˜äýãêä}w"ÎA rŠðg, dø µN؛骪Þ|Ǫ½À¢ '9M'H‡è%LÞƒÙ8uW]9Æ[ÌßÅSpS…ÿ›³pí®RÀ¶|ü-ß~žû{)à¤ú]èˆr8ûI‡§«.×ê^£@•Î׌Ñ%œÉlY£8jÃ~ÓÇZ½ýóŸ•,ût…¹ÌlW¡°w =;ÕJÕpß7Lõ=7PµLIÜ¡k¥=jP MZv [^ú¯bváöí yÛŸÃê÷j÷§>Û·‡½Ù³×–²å6åìþZ$©ôf­©ÕJ¿¹ $¤Ä&%µrw]ê”i.ò*%ß:'(7âMp™qÎõ[6+ZWÒ›(ë©Ë-Idd1Wgnx¶P¸³b±ïlxÑT¿¶øèGílyng„br „œÈª..ÕSw \ ªAq£¯s˜N–áÂ5¹ ÛSOÃF7\ÏÌë©Abó&8;¦‰l„µ½£<Ž¿hõWçàø?Ÿ+3ÑCä¾ç[ÙŠB’NƇku¹>ÍûV"‰$VáúJ *¡½Ã[Åî@‡Æ Ë;åÉV̸(zàLãp …$èåÂS¬D~A>jÔ~-:¤ì‡Z¯ìï잃“FçHßÜ­»‡åÆ)ä(|‡îVs 7¤ÉôY9ìàDì²:¥BJóŠª;å°ôhqÙY(ÕÎzûq…%%p5°>!&9  pÖ(?W`~0Q°ˆæ=åh#~CÒ4V.ç´ˆmãØÞƒÕÌJh³{ Ž{-ç¼PªÍ$ÃiˆßÈ^ á~.)Û€ã£à,G]GŽc#à ¯4ÛÇ'ÛhZ`e[æÙPðÝšbfg ñ™é k8›W{*fÐÍ›êžy(ôj±Ñ©)IÊÖ|‹Õáº"Т«v|ª[É&/¸I,eƒ8‚ +»dÃÏÑÕ¡'pB.ÜEµ‡E\K„2e5Ü'ô{ÆÔ5ôSc|ÓÒ¬õŒ«¿f8¨¶Z šÆjãAöý¶uMŽsƒÛ“Ň! ÏYQè2mL). åø‡2—ìO%+/oýCv7F ÿ!‡Öôf¨\nG•×03ÔÔ–ÖðÚªÕewmÛIË*å§yõVÞuPÜâ!Þ WÐ*ä¶õìê‘QC¼2ŸŒ¢8&œ‚Ÿ`'ĤºõK‹Æ =ç â‰Mõ÷¡lËËÔ‰*V֤؅Óã­¯oj¨ñVgÜ=Á—04…àý 8Cˆšá¤~¡§Z¿´Sì lh´¦W'(çµ1__šóÕ¸8½”6myì—…Ä>ñú€]VžÑm»bõésÅÚÁòöyªâ\ž5‹tÓoJuã5ÙkUªÇ ïbœætIõøµºto^ÙI§TSmV& QîÊl.³ÿ,¢€ËšŒnq>Ž9£+ýˆ\/ÛÚE/*„A´Üc;@ ‹Ù„Oª;•Ò퓟õÖò á |(N Ê–iù·X%=“|ÜgžãmƒayùA#I\éQÞ9ÿ¥<+Ø©‹ÌÙÍ9†. ‘m.ÓWÕÆµÕ°,‡™:g=7,‹c—«;œ\‹GmÊøSeŠ©¥Ÿ»¼o¯fL»F_*oF!p©´cW|«~œR¦‘âh¹ÿ °i?prØ&ÛÇ6 “žÏÿf©ÏȦùàKóúƒö¯ž•6ë2¢4—‘€•¼=Í›Ôûžî aƒÙ›Þ‰IUª„dçrËh¿f4CçCXl¹ki~*3é¿K ø/Ì’ea0I !'ƧY¾x‡ÃÿÛéÚÚ˜$)˜$aŠJÑê£"Gùóã’„Aìd’<ø×øGðM^í5¿§4I@^5pÚ³²—â}jQ]£× Ó:|ûþÀúëÑ7…Ä.à]2O¿?ÞÙK êèMã7œñ‡¸ßf¹ï?|èS~GÂÎ``’ÊœÈîQWâ¦È;Cj”ùùTŽ”©+®ú)žŠpñzi?µÏ®jÄQc· fÐð)2YsrAèÌ$¦ºÃhñê*ßêúkùñh´Rh[‹zß[­,C Ñ̺¨¹ÅÙɯÊ1š·£pWjì7ÞɃåʲF†{“Úé[]óèTmP q\&àéhžÆ õ=X™A-’:ßøˆ|íäÄ3d‘aµâñªf]J(ïƒ}IÑ:ØÓ 8µ$¤ -~]QH™wÁL\ºñò]m50AúÙN½²<ñ@…Jt­ jd•[ íkp_n(™ànŠOf€Ý;l¨fteå£̳*dç†N‡±c •¹´Va¬KØøa‚L³ìe ŠâyrÓS%âIR „ŒöP… nf/2¦§í̤C£è‘¥ ZA$¹løüi[Z´®RþµÐ""½d-¶O°å$}"PºÐ«9™þÆÛƧkqQdû:tÅ!œ(› d*zçX‡ËCõÔ!ÓÙÖ,êN ®¢éæ”íô—„I…EÚä„m„i‹ µÃw-}†¤8Æ“EhF^›Æ±ÇÊ4ý®Ó(aò%6®ÙÒÁÙE 4?As§þƒôüµµhÜfea3tŽt†Ÿ¶£eí˜V#Œ³„àó=˜Úàt¿wÄ»`v‡äƒ–bLšDóW0¦se[?æ¬Óò³zjMϰ1XâÉR¶T8j¦`à/|þM[ÖÿÑN€¦S›@ç¡M/ÒË&FwŸ®`áí:9@êž0Æ¿>Ýcw“•§Ñó¥Ò²½aöŒ´ÑäÃñ|þ}DV— èær=!î<ŒAŒT7؆‚Ði¨C­&Õm¤è ‡Ë’³¬#wàûo­ÒÉ¥ øŸ–%yA¿Ö´Û;–U¬–‚¤l¦¶“]Ä'ر¼¹åÙ{/ßÛs©e¹c ‹ØIË—Å?¦gØV»ˆv ÎرéÁèOO¿@îã8Äìã·ç8l2U#?âìÇÌ;ÙÈ ÖN æIàJÐlÚ¬WðV{q(„ô ¼«Ì4´:è€w3Í‚=6¶keËw?HÑìv/oÙͬêêrŦÁ÷ð»—hNç¥ ³3õ7¶Êé=ËçëyÀ*ßâ‚€uf{—r$úZäpÔÇ×íªéôèòÄ\ 8¥€Yí°ÞfèÌ Òȹêóƒ–gëµ¹,óPºgìN„ÃMdÝé—,¯TÞÉä÷ÐòœqokÔ ¿4 ˆÞF~xùÍ´§7~ p›µ²nm{diN<6Åhó¡"?Ûåewó¨ç-úZÅ w_BÉÁw)|Ú‚®fE©ìþð[ È%<ºdGÔÆþ-H_{¥}Ç–ïfÇÈpÈgÒî(s)ÃcË ;ïÓL°ÞÜP›æÓï®ç këya#¯òò¥ °ƒ»…Rø´6^=\ –¹)Åi`c$?C7nÂw‚ë£ïÊçl4›,ß›ŒzYr×\÷ŒÙ9Áò¯9‹ŠÌ ͧ Ü…Ó/×o -ìœnKNýJ|›¾Õ+ž3‚‹cK%ZåèHAfø5,¸vô lÜ“½3ÛPúëÆ×¦oæ5ЙYщ'@Ó,ŸìtáF©ÚTÃoƒë "ô]=%ïÃrÄ(,n*ßÚ ‰™š=Ç{,[`b¤ižb)ƒÃxß`'䊰ÂÏÊŸÃK–óépÜ yj¼ ?|xùðµU‘?¬§rVŒ |w¡é9–þE‚9qXÚâÐòáõT¯çku£Ëw¤ó•CÆœ2ÙeÞØ‘Þ¡¥Ù™ ØƒmU¼]¯™ƒƒ‡SJÓÚÚ¨8‰ Ë Ms(NPOz ãv9“e~éàòײž¦µÑW×I0¼1™×Ù5K¿Ó_Jðz¼I=õ>ƒxš3½²K;8e£»Cþ¾žçTCµ¦$irþÈù^Omæè]Œ!ÈØ+ý±mÞ)Ù½‰°—ƪÖuŒ€Sµºàúóz*bŸò|¯Ÿõ0G€.º»ôÝÌ÷Ð\­T’™,Ýdºfóì'Çg¿ôæê,ã7+ÓK¥bbÂÌ„¿Ê¡¥_îþA—_ù#¾¹­ºcÔ‚ås<ÏŽÿÔªÏÛíÖÎÅW ýòËÞJ ¨h…0¤Â¦Vţ͂kVz D(Æ sœ ‰’íý[æ=ñDÁX $×2ßnj’YPIȣŀÍÚG»;ç™ÄOtÝêF`#ï—³±c~*›0;¯F ýnî”w(›‡‚tðÓC­ÿ—×*|zòNoÑÄgµ­Á»£õZÉ“NY+§ ]${©ÿùdR.T®M !.´`î0uÍ“Úñ²ÿ³[²…<·¡£+´üÇ}É!àíày‡;—¶¼}Iªñ)-<_íÔ³()ÃZ¼ªW¯ë©ö‹PT€¯“¤›Éêå³Y²KH·c¹Ãœ™F‹j0í¾G±r:_íP|ì‹o›œ±` ÕÉkŽXH9  B–€ª…é?çf’-/¾ÿÏÁ‹¸œÁ‰—õ4UÌ;™¬¶`ËvosÓ—ùÒ…;^û¦÷¦`( ê_Ý€Sߺ¤…°æ£´@QWF†|Ž !_Ú#³-O«£Ùê4yµgF¥àWN\-tŠ3/áŠ)`ŽõAÉtøæºâmTu¸²PÏT²&5L6?åÛè®9ÙkÈßzÖò Õ&šk¶ñ…½ë’æ‹cbHcSNÀküé*¿u[ñQc[e¬öèM«˜s«adÊTJ«—0ZjcèÕåÜ{6¡¨Þ{Eoæ:€)š@ _#8úÐb ¨!ät·Mk;•‰0–`?‡XŸUÑ… $ûϹ¸Jð`ÈIÒ…á¬:HÂ@)#d¼¨LY‡ŽOŠ”6ó# ‘Á¶¸)¸G&™C[ÖÈs…C{ljŠ@ô,N‹óY!ÂâIQ÷¹=^ÛM‡ ðUñM¹_&*´Ÿ7>6†´!ÚãÒ-Xc`®–ŽñÀ»Ì4œ¸$çkücZ{ØÒÚñeûÀ<1Í]b>•_FÝœ)ÁÖµ7·qÇ+×~§ØË< „|–ä´NäÔìZí Ù «ÛÜ8ù\aX˜\Sb°ÌÈÔØxsºžZ6£É^T”Œ€í½íšì?{ôY"EV 5q`R=jóéÛ³%D«Ú€% ‘i'Öч{ÕuVð”{ì`/,IÎ Ø<­xFA¼8ÖϪŽÚ).ZaÉi¿ñXn£¢Ø“"9TUž†Dy)Ê|%φ ¬á¬ìÕ†r±aîcà~³0 –Q²&%q$¶=RÜ„T’TÅ’Š|n°ÙÈ1Gé3.’Î*Ž­Ë¬©i«üh XdÏ÷J4óçGI)˜Ínsÿ·­6¥f»‹×‹cÎ<„ï„¡ë;Ì-ã‚A“YX¦3V‚ÞëµT*tÀœqÌØšŽ û¡0SÅ„>_ ]Ì7t•ÆÞ²­î\þ D`ñÝÕŽÛÖžYÛ6è²Ð°5 ¢NƒÈkXOPzB¬£R9q/e¿éE8øl£‹#yÍŠÒ.×ï–¤’“öúª­É3GKñvýb×;Í5^‰Ø¦Ü䯋½Xo7ô‘úàÙ&7Ñ®ÃÙºpÔ‡äÀôôÇØv?Àº.ZÀóæ×†r•H#DáóK¯ Î‘ õzØ•4Âíe²ÆÖÎû™ÑsN§Ùþ­dž!F3ÇÇ>uÍÍ2c–„UK8ì3·['é°·ET »=Çùßå©óï”ý…JV§6kãµZSÍN/„móÛzêÖöïêir<'‰õmuÉÌŠ¡ìâ¢u}‚ؤu».…Mq8§ äî ýQÕõ1-¾7xÑ.Î |~öê+ò£@uÇNH "®s²+„eM|QzSkÎxb>©”–%ì˜ Ù1 :%µhu”Æò¦Ä(ä:ëðSCõõê%­%z´ŽÊ1‘;ÇÄ5ùàAÃØùâb7ò‚V©Ü²;{^MŒýeHûÑYú¬kç!A[ R¨†ÜKc1?”3'A JŠ‘Î†åÌy¾2‚`ƒÕÛµÍ`²&: Õ`4”/~±% ž¡Ü½[b›j­’jFéúå9?"€Ä>8H:þb×ÃÞý̲c«ë÷m’I>¯ê©„¿MÁ›ZCa‰†·×P8Gd/¯v޳äÞgÏ•Ibç…¦ŠÍÔš•lþxïH£Œ–`v7‹´ÇÚšåpq¶f3ŸVÒñ ›™VÞÁ½f" ’>D ´­#D)Ã"Ó@&cÉúÉN¹ÕR¢/™¨q[ÕÞuÖêê‘£òÉ9­k“”@«þ¾žF²7ãN¾>Êz‚ß%°þðÛ;>(» ¦J| %4Bð÷¶¢:qVÉÝ7öE–FAév{õ@ä¦Å,ß20DÌÈqÄvˆÚÛ|nóš¼)cD)*„Æò ¶à¸¤6 ¶ºÂ‘Ìy>° Ǿº)¼0¨×ÇŒïë¹€Ù†mà6¯ßK ²Û&=Ï7^¿{#øÎm¢?„ÂEƒ…¼§HC‚ÚAxT ZŒ¨Ï^­8=®«Ú¶Î¤(̶`j©Ϫ ËÓÕÞ4 ÁÜùZCiX£Mððô3RHÈ>hu È%mí²p,_kvëJÎêA÷ý„5>m‡b¥ö-O]å’sÙ“wÊuuÀ:†Jt½*ÓÀìaØÒòÇ–2Ë )$èà? MË|ÛFŽô¡‘V b_”è%âË2Áã95Éek©ïµ'–×^à'*¿_¶ ƒà åâ³Î µ‡”ò»ôË0©™39Œ™mëGU(¥Nœ[Ú#ñô—U÷ê¯}4$7/¢`_º®=¨Mžc,»+K¡ ‚«wûÍZ¶Ê¦wÍõ圼H'¹“÷f#EnÝÂÃG÷i*:û û3 “;KÓöÆŽ®4%Jµ´õö}â?ä7ð ê{ÖöàÑ÷‡KÙ”AV²í·mÝù€¬)y ÞO8ÝœS’®±ÙÓ¥ýÚÐ~ã!¸:¿æòŲָ“ÏRd8†óKy¿üùER €Ô˜)wo¼”|õÒy 0ž2òSóõ©’ }[™[K&µ;j6›BóûÀˆ`çíŒwvn-Y®úRŒî¨§×JRĘ@×?õ€xŒ!øŽW‹ÿÁ­•Ú„£kr(ƒßË›ÌB¶å&+Ä—Öó4á§ÊÜÚ–¡7áî"\î,¿Òy8'ÛE—@C˜ïÄ:Íe~zÞö¢H´cû‹þÕwé‘âÙ¿þƒä¿0¡þÏ"ŽÞµÂXÒÉW‰œ ÿË#®ñ¡’ 7>T:ñ¡²ÿw)*⛆âKö*Ñò¡)ÕCIÏ^ ºƒ¨*¸÷ĸµi…¶Â©‡oDÆŒZc˱R@†ƒ3Âì¡Ʊ~´rÊþ¡Î&ìwΛ&ÔePÝÂÅ‹¥° Tü 6¹AìÖƒ@Zf§…γÔlå”Ö·«‚òäR1ÔØT"¦ÎÙí;à½mòÕ¹(O~/VÄùòç±Z¬ÔÐ\‹Õ§D¾uJ«®¬ë¶¼v…ë>€ßÏØB„îi×mÄ| .¾ÅІ½=¡W mö±¶ÆÄk96¼,zsÁòæûLDÓ˜Kˆâñ¹:¬Æè¶§Ì¾–ÖÑæï(•tfÃß›¯¿òz¿>B„F8ø`å%l8¼Ä|l¶}UO@a(Ú——ŽËééÔÒ I°•ƒõª!‚VÐm|ËJœˆí½‚ºé/fp×H•fí R7 )¢jµ>9+”Ý®5,ßžåÇŠå‹åØ®vù]„4ðÖ¬øgƒ^1¾Ï=4°ªI’×€‹`´r>J{%>Âèau!-جbŽ¥%‘z.oqÈSã¨À¨tNËŽž¤¾½†øG,ËÂñï¸A7˜­ K—ŽG+ªOíšc—š“˜ýíœ›ÏÆpiµyM§Ž˜Y£DÞ3Áê.ÝD©;rZ¾$AÔR©®DÚ8£9ª(ߎªð^ÇêDˆ¤öÎÞÕ"´c×&L: NXxã™m޼k•Z,Á0Ç Ñ/º'ÈesœšÎ 169Ð!aµ¨Ú1È+ó-Eol{ ã>*–†Ø¯n½!Yg¿ŸÎ>â¤3`Ge£E.+õðívmÅ5äû…º9± hª= ÃÞ–‡ä NO¾Vï~ÖÖÄ8@×šÕ …Ž;0ÚiFýíæˆ‰Öåp«ú|“Aʹx'ž¹~ƒáɇڨ œ¡RÒG!uû({Øô 1™¤Ð;i<&†š1=\µßþT×@ßæNjmÚwéN‰5FYœ³`SÓ"÷nbc5’8ü·$ùœ@|w±g¸x-Ç;þŽ9€ˆP¸@Á1›¥Å™ÒŽå[Jÿ‘º^¨þ¦õúª.EÛ˜»æ‹ÛŠÞ)óA{±[Γ©«qÇkÝɲ`;¥5¬ l{“Ò1•Cw—xìµÛxôKNìö]Nhhe³\À?yÙÖÄ2Á"Xƒ­ËbÊ⥧ö»/ˆŸ¦S$( ê[õ!¡ÏÞ*Dcë 39ôN¸I£Â&’…ËXA|W=<¬ÄKÀ‚¯B ¡¡ácz¬pF8s8¥ÜW’¿Ø~zÈYŠ_o³EOe[D—À7ÂNt ®,4 #{TjÑ a%’åµ~+raµ¢Êºx†[”µF÷.‘e?ûõŒaæšv¢-×Z´´­°q¸¹§—X œI_À—#1»¬žösr°éPHÓV'~I¶èMb•¬©µ«ž4sÂ{mRÀ‹#üh·EáünïrH*¸Ë[£ýá0ƒL‡÷ûh!ä•“UÜy¸¶ñ|¾=z›Òl‡Åæ\2Œ÷t_©£Wí ×ËpæZ±;ŸkWh-zÿ©'î=ˆ6ï`dN\f‡§ßñÀÁýr¬]g&õ<¶exKeô„½Qb”p•Êùwáñ‡n"”Ò£{Ö z¶(èœÐG K.ڕשS6/9g¨ü[Ñ-mzbÏdų‡=]ÀÞœ<ÙÚ¶:÷ˆ =‚Úšv1xøy`‚D˯²ÓH/3Ó•k rV„÷ß+pVŸ²#w'ZyÅ÷JÛù½ž¦£°Åíp·:wΠ Œ…àk¦2mÓ1 Éúõ²VúÜ h¹ò?AÎUÒ"NØbÚ³Ãt Aö­:~¹žX_¡xClš40†nD× c}³ø"(ˆb´oXXÀxA7<©Ò¢õŠ~^}ì†L_ »~(QLÔ¡{†µ í…i|äÁòG•…¡žð~’W ƒ&Ó¤wª’9ß³1?àÝ!Ø}­2ojÖÁ-Éž k{ì¶LÖAÓ$ßë)‰¹r¬Û:Ôg±çHîÝž"ÃÆqlNÉÍ(UÇ"ò´4*ÓèƒãÜȯÓÏ¿9¹!_`µŠ1p|%7G9U™A¼ƒè¦Aç[& ¥Î?õkÄEÕ‘<_ (°ƒ<&èó5679 UÑÖî9³ŽU­Á"†6*0PÃÒ‹¹ -Å/ÓÓÇD02ìlrA²÷)ìΰ,3ß; $‡ûÊ8ixN–1Ì›³Î!¯' çgçé¢6¼æa=Ð#Ã2Á؈œv`÷|vºrÞŠïRnHQ6¡7 Ò]+@L¡'ç2f Ù”“šnáý–nħ:“ÝÀ"¨ÛOÉ”¸;‚âÞr41ö ³ùïÙvÙýJAD繿 E=u)i.û›• ^^eB«<‚ÁüÛÕey¸—ó  Á8—Û] a-ÔÓ¡ª>äÏ ¶œë<ûì$eîΚi˜7ɉ”BêûtEiz‘,ÇqÄtí¦¨LÞ=Ÿm¬@Øì¦†¿/@0<'àÛ YŒ ïWo×ì=ÇI’h¥¹…Ž^à%e‚¸ü1þ9@êÁéšé'kD/Þ‰ž1¤‹§<Í{ç›irʹoLwRŽ4B¡ ®Ô}„+Ì:å÷}_šêsvHN@³¤»‡âÐ^½ûÀò^t…úEõ–¿ÿÕ<kŒ~ÃþR€q°zÄ­³.շꩽzß¿0—wLîÈâ®vÁõ_Í…>ž-àßðH®ÌC}5 Éq¿9w/SÊ<4<£/.òýÚY‘úÜ ã¶¢ipùrjHÏ—&¶FƒÓU´7ûMöLœF;•°Pr™Fân­þWǾ×ó„ ² ÷,Ì) ‡_o…ÿ²é’óÁcÛúã#Y¾5Ö3’«±à¬xú+zl–û^Á„y8útc4õëdç^œ ‰´ÏÅ7d ¢W³C€Ð”DZ¿uâ^=Tÿns|ˆŒgKxõ%=]ôFf%°õ 9}¤Ö\« È”¢!’¥#Ç–xs³^˜"·f•ìFØ®Bйþ}îY§æy{÷sâÚdóMœü;Ž'kÕ tv_Ÿ#ÄÏùa?Qσ$êúD„®¸ÿÀ®!>Öbk>¥³áÑB‰áN=úÂNô0u¼Ø…ˆ»0‹œ]ëxØéVì~i/³ºl+wô躴†6Šdý´žúß’[6ÖâY;Å‚¢ÕسÌ]pí NsE=ÄG¼þ¦žzgÙézª)i˜?ºÿE=q^ºàžø¼ûÚz¾»n²«ÂþûÄ„PUH0½Kc*muiM×&kop´ÏN¤“›XÑÕÓÀ–5³ éA¢·æÍÔ íì”^ÿ#&ðÕS1NŠÀ?úÚÕ:¼³²žÆ”0ôJ<Ü;O.n9èk—2ÕQÎÎc˜ÿ¨'ŽÝÐ|SÚç“Øt"‰‡@‡n“Ùú0‰&?ôC‹Ü™Ô8 ½ Øë2  §(þÖ)¦(ø†á£Y¹r€÷&pÿZWÓˆ™†ôÙ]øË½¦ö948àtKBjåÎ@B}v†æ‡|sóZ=V}\ŒÏΑè5×åó;]M–Z#¸~¥Íi Íç22"¶í˜J;l¯k”@J,uÖB²¿C4ÿ)J^ 2Dì/ÐÙñ&?ê â¶@ád¿«ž&òAµYž×ô.óœ³ïÔÏÆæºY±Ó%{Ù½Òñ“ªÚ‡rO=ͧG–Lá‚dw-.ÍÝ5È~éy?#—Ýe»'¯˜¯ðeÿŒI±(3›6‚mSü‹Û¦h¬Ѷt¯ŒÙú@Áž’l'2 K üêÝæ»µ“cùMÚ4p¾;/{Q«OþrÒåhÏéù¬|ÛÕÂO-8ª5J Bµ ›‡¤èÑ\oÆ1²¿ÝSIûÙGeöÆŠØÃ…µãT(“.Ãø¼G5_#çÙ~𤅗ڹ.‡@=ÁÕòÅ ¤²ŒƒuŸU( 8ø~´CLÂk·ý^çð s¼ñÐnÞíçÃH´<[µi’ˆž• w%c–L\À:E<Ó4Ï%`×Á KC:óq-ö)é¬ã‘)j¤O|¶µk°\ð‡MˆÃæ{=ÕoÃäखøzÞÄR.´‰tmÇü<ÏɆ–¢€X>L¤M:óJ@¹ÛRDT,n(p”Êi‚Í‘‹z¼¶f"½Ø¥¿ ÍK7[JsŒÙËòGJ©~†Yb¬…%yïéüSÓÉÑû`è÷V~Ôê¾UräôÆòcT]|jN¶l ÷),ÇŸöW´ÜÎlNps.B¨.Y‚ LÚqœn½4§ée·Õ#ôV8Îp—Ãf9z:´ۄ胧ÿH6¡© SW y ƒÖ°·5¥(?‰Ö^p¯§Ç÷ÆÎ7˜7ýGbê_…ÞÇ^Ïn;41ʡ­§²‘0¼n 3 ¡ÈÞôE]¥„ŠOse0È4lHù8U$B(³5‚§ «ÄBPzŸ凊)·ÙŸ™Ïf›±†ô\µLhu`CWð€ûŸ»S÷á¤Á±ì]mà·TèÊN•©ëú Y÷¤ó©eú`J­h«+›?tX•L÷Âá>yÃÊ9Ó>X™±q;á4µ°AŽ5ÌÍHñ÷Åjf?îÖ5…j«Õºmâ6çOÚ­Ø+«5FCy—nrÞ 7îõž9ÎqFXþW/h)¬™Ü}… ô‰ÕS»ò^>}QV¶Qæ‘]75äN‰Iµî…¹ÝÓõ|‘_wGgçA]ÃjùTAd`nÁæJû3A|Ÿ6ç”ý ¼¤.,ßS8ê¹6»ÕÓOxu¤vô9  ˆæ@”4§”`ý…röÜKGÜË\Éy-Y.òo”ï'fwuìïéØÈjž¢O¶îü2¥ý@óVË¿‡öR>‘÷Lžna.p™ßpÛ|Û]ñ;IC(„1T@@*¼ðÔ××B Ê–0ån‹½v³wwzÊp`PƒÚÇ´rR7S—©ûNõöÎz*ÆLª[Ä4w¹ öȼg c$^¨Lß0›âbqÊkRÙX¦?U¡Å&¨o¬[†£Ÿ$Î6&ŽòtÝw«Ý]ï«ÎmÔSÃtr+F{ÙÐ^de¨›1ñ!G ]BŸÌQw&_(sx_ë× ÔlTÜ;GÝôR×Âbù§ƒ’ì%¬e)‰®,‚kt™3W &“Wü2ô/hKy™y™bDêɘš‚;Ñ.^ý©•‘{öÄ?.ÒÛ0Y ™ZìŒg‹, ÍtgQÓýzš5bš·Ý| £¿1ê}Ò˾á'”¹MÑAºku~Ñî˜0,Y6ª»dë8ïîX…ˆŒ\³WYÔÚôÛtN{I»¢×FkcŒë«¶ñL]·²ñÀè}¸:Âð)ƒ¹^¼©§iµœ7Ýæ5›¶ê~´­óúðÞ³ ¸u™”“ëëþÀ:ðy›8ÔS;NŽè…èî-:HÎèd< •¶N3t{)yîË÷Tu`–Ù,>ä£kózŽ"Ö7òÈqç`Z´x\«aô9Ë~ƒMóðLOôõÔ,ÑP¡^ùošˆÀàLÇlJ=Ϩ,Öà¿À¶¬]ɼÑ=<Žl½¼"/æGV%ý¾ù”bZnf½ÇY5MÝй€ ÉˉT4d2M!ü.|¦Ü3§Yv³*I>Ì)Ö¦{»æø´|p?Ö?y-e‚ßoÛ9áay:gj¥]ß– äž]q«¦ü]Ïí:ÆÆ+à Ö/ 4?Õ†@|Cˆx\º·ÓGüÁvÔLø8t©B[ÎÏÑÒB;²¥œcðÑœ:ÝÇÒs¸_³ïãå3Ôi°Øª¬}ºë>ÃJ¼d™<눆jK¾¨Üö~ðzå8÷z·&>y¶/+7 ç™ã. 1F¸Ëµ,Ϋ¤TÃ\Õ?ž¿ùYÛÙ‡BîúdïÔLj/¿5ëvX“H,áöD{ÿ|¢ž0MìÉf,_ŸÒƒ–Û¼æé]ÁJáÿÂH.þ #ù_I¼L? 3BÕrJ´$Nšqy‚ÿÛís‘WÏI.ré\d(Àt­ÝR¦óêÒSòÚ[ƒËÜo ÔÀ„ÕÕãˆˆÆøŠçL—"+Y½sG“V¢¯ a$ 35%MW>(^¹E¹3iäSþ ˜‚Çn1riIÌh•¦cOs(dä-ì²/—ˆzèR”™yp³CËÊ"Ý‹ÕÆ¤¶—OæËzQüØC«ÌîÔÆÍé””õËFW5Íâ0ˆÜìgœÙ’Ú{¯UÅ.o‡ú–ý`Û˳5åty¼nÇ?@™À,µq¶ °HùïXÕ]^¡¯‡·×é£KK"a­ÙØÁi·¯ßí Á¢;†/è#ìŒÍgØ© /Ý8•ЂѬ¯VÅ]›Ï÷PeÏÕqÝ7篙 u‹i¹RKÂ2 ŠñPÆ5u¯jõœì7X>h;ÚæüÂkT˜?e©ë¤Ã‰uü|DHÎ2‚|ØXŠTØ•ÕQÔÖθu_’¿~E“»CÆ9Z^ÿ4CÜaû;$¡6¬ç"¿;k¡.»Gž¬7—ŸÍÎ{êhŸ3NͱsEŸ3vÆ×•Ê.c¬)»``âä))u`s¨N wPßÂz ·Íù:’#Å“.?_ kr½¤@Å’ y¶ü@GE! ;v»fÒ¯µuö ª5å‚ö©§B¦Ùö0Yžºäº®1‰P&kM½„KMè-”ÑWS`û8¡–€Õµ±ÛHSiEtƒ¦Ñ̆•8‹ÖEo¿Ž~ܸ°SëF| 銕o“D“IzÊh¾bÛŽŒ ’^cûlaf{´R¾Ÿ9v1Ú¶Q.Λ÷´K€CZo†ß²Ø{•ìøžþQ­læÛ°d3û¾„³~šAé=‹#ûaqGÜ~âOî÷´öVc»8lp,û“°·RJgt¨U'Œˆ ,–nÐËàÊÿ}£¯Pú’ L$ZûÛ'¿`>Úü°LªµHâG Šê6ÝXg©¿+³—`z0;jìª+wô Ë# €æá(?þ‚ @/kÕ rU+“…:„÷Èæ±ñx?¼v—º·(VÇÿim Ñá(4+‘œJÖ›˜OMAR€â|ÖÞ0`¨”Â5¤t—Ÿù#ë–ÕÎy¯lá„ÏF6®î£Ø•Øž(Ñ›ñ· ˜iÌP°KŽe GŒFØ» Þ5‡ÝóÄa–ù†éUimê}­ú6:©…Õ ¶cE>‹-Ì>­®¦ewšø‰ÞšÀxT«tW,+†íû»Ç·çøéiStÁœó]‹[ÁŒá0"Äé19bHaÚl>E¥"¬¢¯žåÊ]­’LlåXR _ÑW™lЭHÝ!é x­·?Ý;Y;çFŸ[ö¦¬™·Z(­mì?òÊÌEª@·H‰Uè¾éBr]­A]`éG‘BÛfÅ”õ¦žòç=æiÚÒ2ÁZ½ÒÆ1-‘+]±U{(o©OŸYTºã˜àØfFjµ’Åv’Qß|p¹xk¯´Úªn÷ÔK½7]´J1S¨&CŒ#ñlt3œuá¬Ìà /œÒ n?žàÕ1‡Õ¦ùa<|BZ7¨ÅøÒZ•f 8r‰Ít’«õ)3 5öZÍ5ÿ„™½á9ÓÖ¡'Ì›´µMÀ.ƒ7z½~ƒñïsWGŽÃ÷*#‹ÜÓþo’ÎkäAûô¼¶¼ûÔXfy‡6’ÊI•àoCMí—–*¤nˆ¡·Gf° âCó2³€¯DÚ‡ùE:»;bÞy¦w¥Hw9¤ûëͮě·±·Õ–Š º0q#Ö¢OCg}ì,úÔX"»©âÈÌiçe€ìeO¯„y>Cc‘¶¦ÙYO$‰6¿*Ú zR¶-xÜç¢ý‡™óŠ*âê +gjsɃ䤻 ¼ YÊzrÉÙE+;¥»tÒØƒL‡?åkWާõîý7™7ƒ´@ŒÑJÞú|Â]*¬ 77$¸æ?ÂD[C7!0VÐŒX»ÕE7©Î>û Ó>~¢ Ü…¥cíEî>:¼„’ïöÐ÷¡ª7G‡0?è/kö[#í–Öxw^ É#T¢qœ£8i=_ãê¢÷2Ûípæã'â4”íŸnÆ9ÛAËÎçŽUõáŰè6׿‡Íµ5yÃòÈz©œ: ú½Õ‹®ž»?“ÆKÏ›E¡ûI²S¶vÙhÑÐËï…ÛwóMת{F×1‡E›Í&+NcùcË‘SÕ™ÇkÁ ” C­È€:Ö‡²YÅ“KÅ9ý‚ÞÑ/úÃsâˆe7ý€lbFYʉ#õÌ <“m+C° b"‚m‹¯À{á)·Ô¬ï¢"ÚqÀ£©@({¦ˆ„‰ësj^¢À`„¸ç©(êáîÊ8’µÞH½ÉÛÞöh•œº'Q‹Mv{_T˜"¶:à”ÜX^›ÈM¤í»å)”)—™£û…°'·K]°¬àß–rW†ÒsV&íûÔ®¤}ŸÞ[ÊfBž¼+››òJt°bwZ–a¹;‘žBY ŽÆŠJÔÃF¬‡1øµ¡_(ŸUóLö»áq=une]IðØtø¯øf¾¶C¨ oUg~ßä÷kâÆŽ gެ ßÂÓ ûü$<ì!¿eéR5Nöj•Ž„1½à$våп<²¸†cu·~ЖÍË…©ý¶|XIÓôÖ/Ëå&IÎBສՂ¿žXI¡˜rуà3¹Y™“ð"€‰|QoþìPžÉövžÓî, aG{ÊWÕ‹³*í0€bä4(èç‘G­Ñ#?ÐOj6ˆžá …ùÛIcצ+Bþíá¿•óõTÚfñ!”D<1E¤Vš†×'ô6œ°Ã2Z{øúç¾_QÃòöåÐäuEkʼGq^§ÈkulJ"£†°ËÁGaWÈï2Ìe®¯6 ãóUˆjÚ‘Š¾¹}{d¥…Ç$B18PÆ®ù ,ÎGY±°'@WœÖi rkn¡"˜à¦ÿʈóÂÚ5iD¨¨ÝzGÚÍ>ÍÕÖ…326bÌì8[HuT§nݯÞ>ªE {'YgIÀóë£ÿÖ¹Û#4EŸªv4~Ç‹àÙ±"5f}>ûLù£NøÖ誡ى{$»ü—cÜh.˜Dì„SE¹(|¸¯˜FÅJïò5_ˆï‰ôÏ&C^Ý{#¼§ÍwÖµÉ>øØ'7jµ“-\õ©%êj8uq`gY 7:š’æèFþNj.yÛË{á9?:Ï„8 Ô2›„Gh'S?Ðm+²ÆN"Yͺ†µÔÚÊCÜäð½ÀlO»Í=DKÇÑLÝo¦Ä~*™oYŽÄs$Á}™™ì°VñعZÍéñ¤ —éâ·h¯.cç̒Ƀ2ÁÉâ¬yS=ŽF`-*¢Xf·]íŸÞ¥ •Åzxxòºà¦ —ñ踂G&ÐÍ:3¾¶D}MëÇÂÖÎàø&Ó0÷yÁ ^M ko/?ЧNÔNC”'.IK+ÂEsWk‘ý`ùHnP Éee=ÕAôéÑÒ?Går±Ç„¦ê6¬Îãå7(œíU¸LÏüðîº^šf¡ŠÐá¬$ŠD/?}Æ_Dê“”¾¼Þv_»9óbùýÚˆfðüˆ^+ØÂÀ LJ}¯iÄÈg1M—áT Ã{ˆlxꙜVÖ10~¹øw~Iý~É-4ŸNϰ3j!Ô6Fãõ5õ$,’A+pÿÚ_:qðÛœ3yryÊÍ™¨rÖ¨%™QK"RKÂx¢–$ –dQðo|‘Ôù"å¶¹Sˆçš,NòÌRúß;ˆh뺳…óÉÈ7:VHIÈgµ×%ü Ññ@3%Ê ¸ŽÄL »¼ÉQe©4㺺Íçßdx—(1ßzÉ¢ õ` ˆ_¡+´ò0xþâ5Hktí̯)…éWüTfûÙÆÁâ¯í¸wíƒm ’jÿ¥« …˜ùø\Ö>òÇ9Ù2Ÿ±6Æa–Ki$ζÎ5p©}sl|”n)äkõ³‘é5Çy›¨T§Úðëè¿åA,׬œ¯aYqêÕsÒFaî"ÍÏCäÔÎh¯é8Χ`*Ééei×?ÑMé6î©t¦¦Ÿº|¬íèÑc ÏëG–E#δéÀšÄò¡o×mÈþ= Ôo€Jœ±|5ç¼úñÈC½üZ—^&œ(<Ïÿ>Ò>±,ìwué•§<÷ÏKÉR¸B?r»ãƒcYòGþØ–í¬1MWqî& õÕe‰æ¿0vâÏÀ+ã§çk¥Ð«CV,…@…Ο›"m 0G Å¼sA§‡eÓtÈ܈nþÅZÊýÔ»peê1¬< sfvŽ\¨lDÀ57‘uK@x¼ï’„ô^"“37BÛ›Z³añ²KÎ>F‰sÂɔĭ«M‹lšåÇ”tÌk!T%f‹òð‘%ÈѶžµþÛ;±ÖPt¹–SHòꪩô>Ý€Uuû2±ËW+v âl8D‹G£´íŸ…i‘Al½“Ÿ´y°|l»‰|/Ð’R :,çu'¯c⇓“d0ƒî««ˆò aò¥íè_È!l Uر´ú|XNh“Ü®E‡ »å2;]¦(÷gŠ—h&<á„×>pO¼/îÀUòÅJ€ïL’1—íŠTŸp~®º®8ná’®®+ú³§´kØÉÕ¡ùu޺㚅ÛÑ£6ÿ÷ÿ*£ÞE?L”mõm7·rh‘†qn‰ÍìûdG »‰}[]p¿V[UÔó-›üØiG²éC”ÕöN‚ ²æÚ‘zêF 7¿“Hkœ]ŸÌKÑüÖ‘”ƒñð¦ÄŒÊ„ÎC¬Pˆ³ ®©úO‚Ëoá8 µQPÙq²"ȶö1ªXX±`ªEWq´º¶úV4`PÑß—Ý0»2]c3täù4nÐèTÃ’L¼j˜Ÿ¦ÂR¶º¦CÑ8§Úpê3Üæ„§7å^š®Î !ØÝ5'ÞDÇCÇB#ØØ8œœ5¾å˜fSQƒÖkeƒ™@2äÄf“*{pköPÈ¢â/ÒÛæßE©#®•±{`Ƙ@ÿ˜¦5Ü2íÂÅ-aîµVAxÙí/´ëz‹.‚xÉÙŠ´ÂwÔÙƒžR±ñû†2½§ö©V" !’È––땾åt¬”Ãyó ¬Ç<>*Åõ*FÓ¯ÃK¸&ƒwïÉ¡é+³Ãy½½|_ïsZT#NLml.1üf=$k±ù[ŠZÌ—ïÜ îƒƒ«àvœ-Ëò°®ŠIÓ2;ÈdE˜?;¨ï”Á)&Ð>—æôôð›í{•„`eB°O”Oe|îýrÿO©7nôéÝÕÕßÊ}Уõ²ÑçÛ8½•Éþ·ºæ³é?ã í2ý´ŠŸoòÓ× ¶Ž£kpÄ8Õ4f˜Àá §ÑÉ>-mȬÍâ&üÙ¡5=&|á;œ‹û€ÈÑ‚Ã7ò¸Ø¬%Wr¨,Ï”+Ý£ïDHgçí%úÊ=çœýR.þ2Ð^>SOTÒ„»mT{@•ShÚâÀ¬6ýçY˜ªx”`’ÑÌ 8V+‘E#4Ÿ,‰Y{´<×°qßΚUV¸LŸ5ÏáÙÀ\FN7’Ç3þ5b<\" ‘:„Ö…ÿ® :DD ½]´• ÆÛÞxöǧ)ëyæÌ³z¢06wó–ÜÙ•mîæÀ{ë>p/¡ žd^»Êâ0>÷ƒ©>5RL “#Sà…òBg…›QËáE÷‰ÏBû¿›T~§Â?jî ç:ŠèËÇIWi¤¤aý½T5¤àmÉî¤Ù¥?ZO¤_ä©{²&Z¤â䔆¶Mæ‚ù_Öä>êÔ ±àJÝünƒ‚k‹ïr(Vr-ºz™s¨žúhöJ¾56+ÁŸpû€AðÆ„k¥k¿ …``±4HϻҌ¤²Z¥³åµ^)ŸŽÎ€:G£B+w ¹Ä .O˜z÷ Hý}¥ÍŠ£Âv1”øR$X²%DóÀAV««ÆÃ½+t윱ØáÐÈ©_ aŒ¨ð¬§O¥®{Lk… [Ìd³Œ¶bÈxWŠv°GÜWæ4 .µ¯õTyÝ'@~Z¥W¬]˜žYȬ_Ù4ð‡Å}CŠü²1ú[‹Ì{ßø {%c0»‹Ú€ Y/ç"Œ‚A-}w?\'«þ¶Rã ;‹åèû>B „e(v-„ñ9w24ûÍrkÞñ30†|c©Ý ßï™>‚œÝøògíu0’w"¦ŽwáIž²M`µ…›íÖþÍÍ8+5Ñ®¥Ç×RÁèy¸JËkñBets{Lc³³…pPŸ–ù‰y’$¶”ÊDU…‹qŒå÷sõÔIÊÛ:䆱ì²5…I±[eFžˆ å²ÄõÔ½¶mÔ³Í*òznÿ2Ê>ªÀ‡lżžºûpdP«èøûiÁˆÖ¬ÏöúÁî©çÖŒèõáí´Øh¼sŒð|?ö@mýÉ"Nê©ÑÔÈó o5<ÍʪË>éÙ‰ÉmY¢Ø×瘶‰Bˆ!ÆÐhJä®+¿ÕSçá°x½1«Pwz,=5;$T©}B÷ fí2Ã&ýgi>Æ^áÁ÷õÌÏeÊY7Q•‰!~Ñ×½õ¯7ÒAµÜ«%ªíd„F¥xXÿÑe¾ïÅUcAo}rÊ_'Yû…¢žêárŸTj¶ÑàëÒò‹ Gé±t~29•+þ®ÛJa°­œ¹ XÛ©6ÝæÖÚ1²£®°W2gfKW'ê©‚°ìÍsuÃÏÖ@Ùçù(°8Q7/”$piµÀœ·þöù†4܈)ŸN :Ý¥kͲy}Î-4ôC,vQYî¶sÇæqèLbÛ¯&}û(JH8ÃÛ+'†€åÇPSý‚ñÒíu& g‡e.—ÏlM†lãM=ÍíäÃÊ!r×ÎQ-Ö®¢ Ù1ÉíÖéêÂöFnì3[OokX²ëdÆÙ^M­ÎLÏwÔS mwŒÙ™”Š%¯¾6µÆ4)€zš("íðï¿0!öÊAH8 È Åļ¡«)tÛ±ÁÝwìW¡û)Ý€2€9\åšÙ± p›ÓóA‚~áµG10›Kb‚±ejÝN½](Òl<„¶y–\açïÀ)-.»º¿oöÜO Cþ|¨ÞŸíA9G'8¯WÞøæöü1oíˆ{h d3CáÖçæßØÅ¯7s<ÄIÊJáÁ|bë=™ ÎeSÜ5GûaòÍÕìY©øDp1›”„¾ v+;›¹)—Uwåðd7å­q /š>šòTDMÜO,zsÖ-„‘‡yuã}׿l‡6~Ý x‹£ $¶½“¬2§ÒÌG¼SÚÃÆJ™›ðþ‡g˜ôC¢È¢Èê5žÝúpÞH *óÌ›|ÆSºà¯»q/ì‡Æ¦_Ì뜪¬°¤ÛDLv¼žÝ&Éã?—êi@ZÁ\o¹,íhúKp\rê—x|j©÷_ãž5ýÇzÖ@/þ—IÆaö_xõÿ7VdŸ|" zýc ?k#ÿ‹ÿ/ú?zˆÙ<ãÕœèY¬2ŒŠm V:Ñ3Êþã•°ÈãN½m£7#€ŽÍÞ,í‰ÃŽÎöóãïìS*Çâ1ÜWÚföI7ŠÈ„zÄ‚…˽ê_¿ò_~Ú/7J«!úôr^»¾mH’þùP²…p¤”­5>ÿóå-l¿»ÂÑ }Ú&wž.óƒïç/–>O+Ÿ,“oßêɶy?ßwH ìîó¿ÒÂáàtÅŒÐá&²ß8á¡ædt˜£>¦ot4ù{¡2÷|¼µÔ˜Á©\®¸üB7êÞßpиw“Œ|÷èâû«Ë/·fW¡´à èImry™ÙQu@Éš=<žW°ï..Í#hà68#?Æ<9¿4/<\‡£ QaÈžÎ.ͨ‚²ãÞ†,wG{½âÂåõTà´:Ê»Ñ@ô§—ûÒý\<§ó6šìÓÉ¥ ’ãËAÀÙm9­š´À´M_z«»¡Ç o0[Þy? ÐËa¬LcSpÐq‘ßs/3&BÑ8ÊìG¨íϧ˜ Ý0219úG—YPÏ#ü†X)+3U‡ª€ÖpwÞhaÒÚóh?Ñ×Çs˜¿Rnõ üÒÞåñÍÿšö‘’¿  (ý°8;;ð6nP| £c“”yauMôÓÈôóWÛ—[Ïg3]”‰Hˆ92î°îeðÏl|ÚÙ Bõ™eapWO]&Æââ½ëT¶;ê Mw`fè¿îÒÊ-H¥ìÌÞM)¨ì’Ú µªÝa“©FuFŽÛqZãX«ûÐ/=ø §©r·½:5 Ê”B¤KÌÁÔ¼ìÖþzjÏÒ¸Ñâ¯YúN˜¢©òýœž8jQ3̬ç[é—òÆCíö” 0Hu~å{¼Ÿ Ï6¼€¬êï8¤Vœš0Û lêvdø‚¯.óO]=qé~Lloê©Ñ‡æõ»ü‚]k`g¿²ž(uesëbvPI·ÐÇa!—«hðŸ8*Öq·p/ga6÷ç£+Š×ÓÙëƒ`³†jBuG·u6ïŠþò/Ö³‹›Õj÷ ݸܸ±rMÀÈç2ûlÚ•Ô.gñ,ä"´ šÙKZܶÉq3Î>:ºú•$ LèÜKÛ|6„âôÚÎÂÑÝõÔ¦aÈ1‡‘ø*Ôqæ]â/kÙRHëx}ñNé1{1ò t-Ä>†ÝÂ`}¢%ܬín sÄ…hoM÷ÒÅsxèþlÙ:+¾¿q³^l§™mÇyìRƒðFö3ÎëÉÉf¢Ý¼¬x  oÈ.;¼8ÅÚO㮃Loî³5øí.™ ˜²ö¨ýg7޾µšOnÍÇzßG»¨!.ç¾f&lcJß*ŠgÊâ´’Û'G¼¹_Æâb÷ÕspI¢1¼suÎÀŽýbÁûÄ;ù¡à/+ï¾lJ•ÖÓÜË2PÖ¬!S¾˜9æ¼¼UOµÜ£Êˆ¦A˜ä‡Rvνtã®™2ÀŒ[=œÑ$XphC5l€ð‹ãì5c4…øDAøDçO¸ßöÙ,—-ç¯ÚFÞ[3“ÀW ®_¬¥fpïÎÚ ì%Ø#¹ÈžÑBcLZì_èP J>×—­9ÎꊗŸõÊdõiÙ¶D™¤ú  Öa{ Œß&¹žn¢ã¸Üo?wÜÕLe™Ï·$ó:ò“öJDØ$Ñ´Ä_ ·c饬¬( ‚Žk¹²®Ý9cEu±;ä3L>Ð¥Y-­Âýilºì_xâþM5Y·_M‡LòÎŒž×Ä@Œ´d±íÙTlí^‚ìN׿உoˆÓ^Ù.J#<’L:i˜åšÇÊ–4ÍóGá–,ä/ÈÜ’¦YWÍÌ]h²þëiˆY=\Ÿ°:±¶Ú \?0ói½åå1š»~Ás2g™ù±>m‹Hv6ÿìÀ›¹ë-¥UƒSE=—4ƒóá(T‰ÉšÞ®ŸõAù 3®Nî¾Zmh8=Ö¡eSíðƒ€éÎ “ý…ŽUðg¿Û•ÇØàEÛø¹ýN¨øÁ„ë½0_Ÿâò.þH­¹\þÏd4ŽÓÚ``‰Ü箞RIV8=_Üïñ>œÕ”+·Ê›½´]÷L'û,¶‹ÓÇ6ê)wn)joU×û67Þt±~`k1L.‡9)r=}»åç-ý4;‘-ù1šì³.ðßmcìw˜‰yã-’:?fhæ7 2A É¢Þ>5«°°ü<_ÔæWàSÈÓ¢Q䯚þµúø°¶\Crb rôÔÏHc:& ¡òíºOì…“¡Á{,Õ9b¢i§åvþ[jøKyå¤Úpí»á´Ö+?è"Z¶“A1ÌH-‡yk²—~=T™cÖ¯YÛUÇ…q’YÜMs¯ ÞÝmz•`f{+oÀµRß]¨åêlnrºì·_0(þ0/ìÎö\uâë|A˜Ô^Qk¿˜?¼\Õ[æ+Êá‘o!ÈÚÔaűm.‡y¶—nܯ> zt5Öyñô"šèòíÚªéÿ<êdH±yð(:ŠÝá”´‹Û‚,w›£Ƶ­ˆf¸R*}‚ïßl¯¹©XA3¤W3Vv,Ê5W–õeÝ”wE/ÍþBÉ1ž¯+²ÍOøÓAûÈÚ²8qŒGúë-æ°AƒP+6ø³«ñkê!40?̼€^W5pZúþt=YNVîõh¥jñÉÎǤŠè–°!lçÀ\G…¾{;¡r«¿Ûõ4®òI_ˆk‡T>ü¥²zq{Æ„8CЛ‡np£äÕ¼æœafƒ?‹U¯žL.Ž j$Å+Ù‚â­žšÎ´ùn/mEïZ¸•Ål×à:F¾?Œàý6»„2ªîÝÕZo?×”%'Y…äª'™¡°ƒ\|’ Â&ô©½»LLŒ‹*Oš¦ñ5)Üõzsïþñ¨Ym#9õÿ˜:Þ óÓ¶”5¶E)•¡“?Ñl.Þ8'óÅ^Ë6°Ÿž¦jÚTcN‰awëȶ|z‚BóëL=M\ýwÍŸŠ†‘oeV{bå»?ŸgË“Ø!X«Ã…Xî¦-•]ƒ¾ƒÞß²×¶ââ½€^N$çè—€Œõ^ÛŠ|O_n,ß_‘؉+ÒÈ‚Ö rsÞ›ý+ûbjœŽ¥ËÑ“hä8oVÆšs#Àµ‹® U4öx›\iÊÄ1[ÆŽùìq ©°®‹2Â`‡àsI`åeUñÒÁa40éÙ“¨ÀŸpŒk lnô:¼£\9ôF³—DcLCvo¹ÿa­\rlg[ñlXjúpyPòÖWûÔÓÀ¸å㥉µ˜íB˜Di?xˆAðtiºŠ¥Ä÷á^Ø\|¡®5¶I¿•Œ|6Æ‚F0yD½ßïR åX¼é”Þ›EK bFµ¢%£Å5ô£¢Ëë}êaŒ‡jx<¼>†UƒæŽ)Ib“V_.UŒÌ‚Å0»Ã-„ÖH^/@FRÖªJŽèèÓw˜Œƒ°rí€;Ð0£Î§6—á ¬^iû¡ rHg>~±Œ.Óz 6‡ãÚéí¥n²ò&/ÃßõçÆEÝ×eŠómL½èŸ†¤6ÿXšdÑ-b£ÆKºÖ2ÿPjóGÎ1ÜÆc8bZ#Î7£¶§ïK͇Y³5æLz¯¬ÖbuÖ·LÏÚD‡¸>¥ÿ © þ ©àÍÀ/M)6Š|ÊôãìstlÚ,åÿx¼u*AdãÈVÿ• ŠVÅqù/T‚(v*AþÇ‹D“v!í2S^»c˜Çƒ¹Ç¬¯çaÆòO$0MoT¯<÷òõ×zzÝKkG¥°L“Þ9Äó ÙÚt|}å™–#—<ƒ;Ÿ¦õ)AøH¬"MxÙCKN’¶J“µa}*„µ´ä¼ (àÖ@hçµ£®1ÏÑ;ÛáÑÞAQŒÞ¿¿ìlÈÂË\#b‰Î<‹D‹z¢¢³ÛÀèxØH-Íääy9&‘1‘úT‹8^¦ŽÙyßS< e«–RHŸíÖFÁ6'åž…¢#씪¯agCL(eæeÃ\¤2WScü¹Q’¿ë+_¹R[µ2!x»áõ|½OŸÃ"5œr]¿!-@$tŽgAL¼.<¸’ôÚwøeåÌUÂî‘5Ë?ά]î©§ìa¬€Ùúoýš#B×Ì«ßV‹ÕJ|œýI·!ƟнÙ­íYí†~köÝÛñ¶ ÈfÃÁK'x ý„ÿ³ù>«‚ãŇ—Ž_rƒŸ\íÖ«Ì”DéÂô´$?èîúÙDÁÃXãñ(¬TÓ¿Œck…ó›æÙNÅ¢©¹Ûí÷°yˆG6çË L(2€rë {XУ 6ìGE~ †€óÆ9¹ÍîÀL7¨å×Y gÙîñ n)QËM;`bâ‹á—¦’üFÐÛ' ¸ØSOIµªªaÏò ’ïÊ•³Œ°KÌ5É7˜èLúÜ‹PX]b½±ç 1ëêºÀ-'äçÏàM`Op‚‚¶ÍÓz*˜ ó§Ç­}Ä~h{·¯;ŒºbR„°V¦GkL‡SÐ.>€VÏþEitâg&mMºP¬Êª¨@ÇÆò‡ncfB9H‘éu´Ñ6{pÅ‚Öú´Ji•˜pN<†ÐŒÿû`r Ÿ³„ p¬ ’Q«@\ò‘ѶDkè?ÉIÏÅ¡ÁT“MËøTcÛ:¤ž “5û±¸y-øÀÁ-3"6ä'?_,:û¾ˆ‘Ý«`¥ƒŠp´ŸcÕ*â¡¡G‚]Ÿ@¦dƒ ƒrõÁº}‹¹Wæûmw_+ `zÈZFmOÎPÿXõËnf¼æÞoœðR¶ 7q¶úiþÏÝüîŒöÇ{ $Ô*}P•¿N<É\³}P³Gƒ‚'L‹ŸÚõ^¯lÔuY×dm 0)/Í n`fæ‰ÔI)•¨²þt7ŒTОñ-´ó{[ðȘ·ftlBkún—]Và <ÿÇne/倇‡Î……”ž»›¸¤T4gp³8ó ·Æ.’DxUî†ni™DÚú$T£ÇÜ©¢{Îk6NN>©™}«`H×¼%1}ï(Õ3ì¢nÊ?Œw[¸é>‹(ãLÖ›¬ Ô¡2‚øµ{/ð>FÔDšƒã³cÛ TÔåXˆÃØ@úV3ºžh9¸™íšRIRo‡É‡PÄZÙ±#±ç߉mwa Æ”}ƒ×Í¢/’êhá÷ìwÿØÈm:¹>"OÁ€<Óe}ÚL‘5)( —ܳô…qŠÍþðÂMݨÄjM—ò¢ƒ‚ÏI™¤7kþδ•#P‰oðÓ~ü´rËmË™¬õ½{ïéõÉÕÖÑùm9t›NjtâF9Ö&ãG”‚ë,ÜilÖáñÎß^FU蚃AÄŠW÷X´¹lFn•züúF¶D?3oûhdìþm k?~5yO˜ "û1Ž;§„: Þ©êÙMÛ†ä4ê´æ9ÚÅÇÿOgè\Åej=æÄDz•T»‘ÚªiÐÄFNa®Ä±½&؆œa sÇ—ãyFbQµûEδ¬?ÈÅwÍteÉ ?—‘¼@’%ÕL»¦¸)°ïu'@76>ÌAóC#lˆš“M%–”ø+–¿Ó%i^=~T½wÞ-:xmÃAmò Yn€[9/…”øÚÐûîÆÅïüæŸ"D´iy‘•ú¾Üö¯|dgpåƒß lsFk¤¢?ä¨=ç|loï¢o N@<=$óNÞÁÉP‘ò1/Ð5œ*-ú©‘lc²èm|èc¹°ø¤s¡0uÕ{‚î\±x±ß¶¥_‰“MTÛiÚ(T¶‘E?§p“2ÇŽPëO.îZî;RÍ °\‚hÇ"HŠÛû³zo2Ôcm¼ÖÊò˱‹ô¶ <üÍg‡R±Føøü–ëæD͈=àh4h &<ÁçÚ §+™ÖClo¸j§`䙯º ßA¥rg‘=‡üÍìcu‰<9UÜ’Š™µ€ ˜€æÁ ®fB/Ã8Ô”4 ?µ¾wsÃi ª-·qÚyä5­D~B0?+ý„Ç×iíþHpz#¢+iÑ=Ç ¦8õ³ë.hëên½ïƒwÛØ÷ §®#ÃÑåfz-]ÿcBbÌQVÓÈæ]#› ̓ùÌÈëòê5-ÆÀ^sÊžÛîq¬æ¸->óÉ7öåMïÜ*Ž8&ø\ îã8³n®å&¬.|Ôù„¸š°‰³RÚHåì–F³ÏMyy^!û| ca‰´8¾üØâº1x_¹â{þÎ5†2oé¤_wßžÙñ˜ÆÓgõÍóéb[RLÔÏeq«ñÕ;ÒGìŒý+áØåPNÇ{8R,Å¿“ †ªÌ0å£]›Y’0êö™Ô¾™•ÝÛ黓¡)ó=ÀÔâýì<ÅŸÞšÇ#¥7€«ÄÅÊ|ØDq°îÏ걊0»dæ¦óÒý0êžôí÷k“mcøiM`Ÿ¦»'“¥¼äèœÛ?:Ê~Š:òhÞžë0T<çžåÕý“úÄÆ\èҨ5wv´R?ÂîüÑ‹ìãT5鳇iÍŸysM™9’ŠËŸíЯbJˆè§§Š{ìÊ0jÎöÞ®Ç'ý $ÒÕ¦ò¾µÏGÃÔ7W¼åŀؒ~Rm¢êödËà~p{½óZ• [•Œ:§øãƒ™{žûfwkÙ8½ëWžS=VG–ü€Æîˆ&²“3ãÅ_7}ÿ «,û¬²ÿNÆÂ®ëö/£Œ¼ßTŒ€ÿÞÝ¿‘Ê #•å#© Š3YT$ÿª/åÅ,-Vÿ£Õß‹b™ÍeýOÁ³ýŒÄäµ¹yè„2–îJ#…v…_Ù˜Y[}Ôá÷Ê£÷ãLMDÙÌö9ÓtîáOô¤”õKTx#‘mi_ÊXsƒ]¸ªŠ­º „#È_à©Óö&@Ÿ|¿{ãç,¶¥ÐI˜ô­­R¶–_(ç‹U.T ÀlE ’C±Ç¦ÿíÔ¹DâŸý cd;$~YúÁgÑwWGd­~ß,Ók¼]ȽcÌœS8·Âu ÎçŸàn’ݧôSœ×8ã sÎ<ÚÄOò¥l,³=4Ñß|Ä¿^á"ƒ^ +\$2-m~‘‡àÃ7-Ñ0Ì”¯îaSZF­,V |ÔÑw™hÜ ØRÀ ºèä¶òI}ì¥/Ë“`jí2}«<Ýt\W whÝïcP“}QÕŠ9N‘³ôLñ úCýŸ°yC˜f£²¤·-{VC° µçX^<ðÈiûäŒæÕ ‚e[ÚàAÑ=÷õs.ýP­[`à.”Ž!¾£ÏA eÂm˜_jìc®°"Æ`‹Õ§Ã¿i¾q¤H!užZî×`ãîͶÙp¬¡!M$¥¨¾üœ<›zªðT–¶².Ôæ§Ã4”3þs1Œðg‰·˜¹ÑnãßßÝžçÖ“i&E¸!H.GlS+H<¢×ßVh=už&k·hŠà“ YµlŽmsˆÉ–${Êþ&AÐcf²<_¦ÎH¼kû¦¶®»Ñ1;Dê1çHŠƒ–ˆG¤-Ÿœ·Ý>Ôp –<•Ž„ žâD]u„,3_ZFիݦ?e¶X>žáþ¢Ü2šüJ9£=)‰{‰¡R#2˜žwtþì“æhìw°mV·Ç¸È?8O"KöSÔr#¾,ã]d1]„ÍUæŽØ0zhÐLE{œ84 €•ÑÄÞo<;ZmüËph§?Óî ŸG›¬oAØ@V• çßð—JÙãöe«ŸëÝ&Àkâ :éøû°CÉ~õôå·ÕîwÌÛtÃDkãL*дè8CÙ0Æ¢“T3íå¼ó ̃TÏÈë ‹k§××çýA_ZÜÓÅ2àݶm<`’Ý㦞 dìHG–tú2ŒTl„·Tkà|g(NYÀù¬¥cx©äl-®Û1wÝâ%³é£‹tÓª«EæÄ1ó­ÛµÀYmn”oZ§¾íï©ÂzP‚®Šíø/»ëà™‘–Ð/§ÅÍË=á>i;Ý.{MÑ|qz¦iõˆÿÇ¡iƒÈËó3GHwÛSÚeP»Z]“)Þ+ÜaTñ^Eô$ ás ¶=Ê&8F¦Çc¢Î¦JÎ6™m«¾Ïí”Rç³ Yt‹s" n2-XòG(Ò5­ƒ§ÿ–·â„nCFI¥ÃÃb/v ŒÌ¹–(Õð=% ´èCÄÃtR^ôðøƒ%4S·ðá2pË ÷«^B‰¶æt%Ä(#xÿ_lk4ØÙdÍ4Q¢ea³Ó5(7oð§A²£Ž#dÑý)œ{bÑ)r¶æ ‘Í|!Œ4:¬ßímî¤}Suv¶Q[SߜٖSÍ›Ï+¹fÌ÷ã²`Âå8ZØÆ3Œó£fŠßðñ8x\2g™Bˆn]Kk½Iº nA”7t`ûüü¨Û¿Aíîk˜¹IE L¿Ú×Q|œ¨í.;‘ªKøâ fg*‹qêQS¹6Ûêâ?q}æ f9Õ#€—¬}ö£„œ$îðü”4zbµ¼'˜]Až Ù3€LKÊÆ–7búWõꄲk¢ºÑ-+-ÝvW{]ß¶‚íHÜMÍAmÑÑ;º3K,Ènúï±Yáa8Å+Ž. 'eÆÒ/•—Ö\j»)£Í&GÐÿß—WiJ³ô½1† _ÈØÊ[xÆ¿z+Úä‘=A1_ù^äayª'o#DL9بñwaÊÙˆ¨žu84[üéÖ¬;âcRØÌ‹§Öç›Âíˆ3¡±ú¬¼BôYâûs¬Gàæ2¯ ¸c¼u{gê KÜùt–­q[žÃág¥-Þ‡ÇÂe§Ë3Á$ˆ0Î&´uMâœô9Ú´Š+Ú#Òì/Õ‰óuÛ÷”ª«ÁŽ˜›]bžõQ ÏLÎzŒà2N\póq«†ä¬¦Õå/al?°» jÏÖ·½&“ yäm\·¼Æ‡B)YÇÁCs‡^ïÊ—ÜÎ(«ÀÂb´cí-yß-ö˜5íêÔÎàË›l7ÀþÀ Ïz^çi¨®‡Žƒóbó¹$k¸„¤×ý9µãÁa£i®ˆv}(OUËëA¾l› ;= ´ß0Wä_û'¬Rs¦Te–Õ›ãÓøí?VŸ,;¯9MPNeÞ€Öèjü`5Ýùäs½Æa¦œ»ègŠÄkÌÕ)íBž(È)v®“êüÇœ>›•\½±_†Cóµ/ê&‹'œèJø/÷yÄ“m5R•¬êš%tÍRE¹Ðױ퀸ˆ’«Á)‰ãjíŒeQÙî%sÏM›¹&a¨NõÚPÄò³É*r«âj6)»êñµÉ5ñ³Ñ]:ÿ«åØzã©åY[GN+gþEµ(„–¢¶wf»Ölb9R]zOuï_U²ˆ×ˆ‚Z =¥tûlYb`X$asÔÏpoü²ô†,ÇNŒN¦Xu¹9%ùQÞóÉŠŒ1¯êÌy`¥@œ,%¥ñoÈ‘ák{‚@œ¶Û0EÃ4¶¹Ÿ1<º´ú„‘R«'ÚÂ6º«-Ø)ú¦lE­ç +u8̘ü¼µ¡Ú©8Œ:Í z‰›š ¦­»©SF÷N'‰ž›Ä†øÂêËÙ06„Dí§`,V»Í꺔úÜ>²œ•¢4Ý4oW0ËŠÃX›2s‰——]±!®›*  %%ˆ/}þüyuN»€. îç‰ì-,\#¹ÐLþ"¤ª,ðxÞk ¼ÀÛÝ|ýA«ŸuÉÑ{ÕbÉkÐsÝ\]¿ÇY£%§çFôHuÜ>®à$–B†Öûrg«HfS/äbÀ?(C6`_ÆóçÈ=©Á5[üòÚ0h¦'ÊÛÿeÕ#tMe`Á5üIºÆéo€—ùxã:{ÃÐêÓT éšk䈳¶»F€·tíwláÚ:¹ŒFbó#¿+³žÃ ’½¥@Šn”)îs¼ð$ÉûêÑ#AÚ…B¡•¿¾s^peX‘T÷Õ†£.Oc&ÖF3‹¿ O¾ØÊ³«¾. Y0hsë(P`˜QwÖÔ¬ZGg=E`¬l˹–X~w^=xM@fì¥è!µîˆî|Ví‘åeæÆåB¡…“qqJ¤èŠ?E@¡¬¯ž³Rù¡ÀŸŠ 裂=ç~ 4³>äÔqmuA,X’¬Ïã=Twƒ® ×Kª¡7ÐŽŒLÉboÐÙÖ›­R7Àr Âôcž¿º¹}_…LÃï`ì<Òê`¤Æ8¿(È‘b©Œ^Ê\–1Ñd•hæÕE˜óZÿÆyƒ1åÄ¢`dÏH±ÌjÜ0ƒõ–-{g«×xa—¢‚ÄŸÁŸ†:’iõðãÄ·¶}øÓ^ÙìPÊ11Ã! ¶¸Â¾fGŠ…ŽBë"EŒL–-í[*Œ2^¾ †X’Ý£ÑÒ>ÁE”,L©^ž5l{#ˆ©¨ªEY~Ði‡#<ΨÄÿR'÷ÞÑ ¢óZÜ…¢s*®÷wÞVí&jv—T¥!Ád`Ö4 êu¥ Åœ¿öáò{î=úåÜJ‚&gCì|£ Ä|ziû”Á{l™ôÐp³x8FìÖÕÏwá3¿V§Ø¼€Oì¾ê÷æB¿ ÁÒ‘¾ü9Ø›Ïä #èÐÄýèÑà·Z©‡ÁTocÙVÖÚå­Ç*PŠ.§ûõ(˜:;é¹JH–®^à'¬$Þ[LÁå:áK«Ÿþ—2añŸÄ' ðÂëP}IwÙq+©ºÃCŠ,%¹ì3.д0<˜ØÓÝò¸9°6]Þ8z~»ÖDʲ`–ZY°ô²`ººƒ,Êç󨦱W‹ÿ©5á°öÐçý§í¼2±Š—§Îêu˜ÎþW[%„ôÈK‹Ãšôo%œóAL!ä·m§­ß4‹wpìO21Ôßµîý*¸¹dqEÁá"ÿöÛ©¿üƒÑ]zw†x9”&~üñÚ “d7álc‰ºxô½ú½›Ž>¿ø2Ô¿éÝBC$øÕåpåæR¨×œíS{•u¿n–a˜]SÁ‰cèAZ%ÚȺ»þ7…ˆêýðÂÕY\skÝLH1\\žúBÇ|k¹„bv×Pû¨þ¨dñÉ<]¹¶ÄS3kALæ×u6`°-»·r äqá&02“3UÓË—•ptÖV´n7×Å25÷ºJìJK©Ý­4h9®|ÕUB ëf™º ›•ƒ— y»8»PDBI`È//|«tt&ÆŠ#åR •àXþ¨ºñ¹ÙøE»gyÁ;ëKj_qÍ9Ÿ_v,÷ì F¯' Cú&5ÔIUZZÞÂŒ“;,¥ëƒš_-F $£ŠfVBJ;Ó®‡ˆY=D¯¨‰ÎìY›tý%;{dIIò’>ëºèî"Ú¬œÆ:+¿•9sÎÌL×?ŒŽäâ¡à sfÿëô”9 œXé0Û ÖÃB)† Eq O@X²®€·ÓÐæ_— ´™õÁ”üÈ’ë- iº¶ÀÌèÇ1ÃÊR~Þô6n5Mi[¸ç‘mvض8cž•ÎÜfª1ž= c£0Œ­ÎEµëŒ½:M鈬SóáM0:f%D££ÈH(@5·û±|¾ùÆ‘×ø¯uAW–=2o·T¶ cw<}Ù|U®J»$Ñ9Ò¨êË#§¶b«÷|9HÐN@F2ô.¨óÝT;¨ÚÃ’ÊþD¤¹±×§<ÔŸ¹×NîÊ`^Òç§ —XËáÝñXá0#Ýaì ?,si,T[Ųôm)•Å“6èyfi; &¡Æ À­Š¿|ß&ÖÇþx©lÇ”øîÚž*¶x‰¸!Â8Œt@™pT1„B@^ªoífX¼ø;ý¤Úýˆ¦çoxŸœéöY4k‰ë&+ OôUÉBÄ•Ä^(ȺÓ±Ä`$#°‘e‚Ø¿öA^M¶ûÇâ>ö£¥F¬R³òrïb:sÁÝÂ4O¸9g: ˜ãäÂVFt^í¹sUO)ùÉÖïY°K½¯(Úq_ˆÿÃô³m¦û«¤©˜×‚CàÎò§'qŸo!ñŒz!Ø…ñ è[iè_!+¿¡?EéH‚àŒY¹Ã Ñ')…ùöíh säZ6U&8m²Ôu⎭RÝ{aµh½ˆÍS0Ù³ÄÂÅ}"q(ákbG÷*¹¡Z¾S]jÛ~ZÌèå Þ›½š©ò²u܃»ùÍ%ð¹Âó­u™µSmᆠÐþ¥ò¦€‘R5ï¡^8”$pÉ,¤õ}´Åé“ÅÛ|ãp\å¶ÜZÑKòÛYåHÞŽ,MéDÇ+‡-„lŒ^~O0i+JÓ8¼8ÓíôœÉqk‚.‘gź½\ÄÈÙ§8Œ“±#³_>ÀxP[‡4å¹0R«q«e¿3Œ¨!xŽi§Ê5ÓûÙÑm7?Z,>©<Ê[‚ÈT^ä8|µ4Š‹ašŒŽðªV‘*ÊXX¼Ðc:Q€µÜ‡þ~1¤³UœPÇ^ ûïVmüiub€‡úJ4_ëP±*RÕÿÛ±•õs”ß9ó¿VÌ!›kQ †\z%:A¬ ®œWf,É–I»z±©Iã¿ Œa6çiûw/r˜:ü+?*=FjÕªTÐæ§u¨åæ‹Cö^½¥®!Àã Z“kÏù#A€‰¢lŸW†¤G¹Tògs…[´+HG¬ÌñÄAêñèÿå‹eU^œh!,½Z‡ïö´Ö˜âÕ,ŒòDÄ'b¯Œ³n—VL-(F¢¦7nɺ"böN)Â8‚ŠS5׿pÖleCxbObÃû['úÅbÛÞdª [*)Ì®umÍØ¾wœUX6d‹XÝf ϱÅ'±ý3àÉÊf‰žjŒpz5»½ñ?é°,Ï1(ì'—â%Õ;Š˜Á–byuщ0êÛôõ[»Ã¦;¥‡wüR‹][{Ä]ì/±ÓæÃÙOJ<Á0«iwœ± ô" ^¹ÉdÁfÀ @Šm²?1¨œ6 ÍzñPÝùA¥=4+ë¸I|¡CüŒB}ŸíÌù¡µžo8ºå=ÃÜ2‚Q9¨=rºZ›]›ž³³ßëãÍpQBYŠØËD™¤Î_w»Ú…§¸F®.¼«‘å>}5úÁ YF¹&6~ ak-‰fIá ï#ÞpR°Û"ùt_Qr½ HÐ\‚‘NîüQ0š¼2—YDÐj( NsDýË{©"áWÙüuZNÉ<ÖzÑ~®áh¸ùuIT2JŽ…±Ã­C´AP|µ\T6KìöØM¡bcQ¢˜}º¤Ð&Ö5œÌåe¬¶ÏH“Ý#DR×°¼™«`ƪâðjüÆ&ÐF)[{q2:2s?ØÎskÊZ‹‚«ƒ¼ñÖþqeZ÷…Qëb^uQDD5 ÆÔ˜Ã'ÁðÍ{ýó°'ŒJs½V´ìªwG˜Š6A,ž0²†©Ä’Yµ- Ã^ù5NòÙïb»Ñ/AXßìùGÛ5”ŽæÈŸ~è¹E’˜«[½‚o°›?ôáî;(Š6S¦Dþ(G¬'ßð·\b\Q…?{Çw¿¥ÃvH·*s¼u£ïa½ªTŒFæ|;T49?&§c¯ðïžÇ˜?©~ZgÛvý[sUƒ²K¼P"4 «õýYd‚%fjS÷nä¶ë8àó¢ƒrϘDÚsœÑ¸ú6´Î½ò £HÞû€v̲Þç~*«K…8xØ%Ú1к¶ƒÀÚ²…˜%¿òëG½‹\5M‘ˆŒ“r%ôÊ”™’Û®iÜÆYEs¬ýÙ(•ðvosZ]†FïÞënë‚1±úœ¥9Vvµµ{¨Ê8™“õ°Aå; #1OŽ Õ±²¯…CqR½9l&cŸí3îHÚp[VZÙ‰•€/御Í0u8–ˆ¡Gc×ñ{³„ªÜÖ_HP Xð6™‚“¸8äf„v¾€Èü¤Ïbi§¡£6J.¾§P†m‚ºí§}¾Øø& ÎT>ž\4ëò½B:Z=Áw½Œq-2žšM¢ï9JVdä1Lî‚jÌRöiky¯'Ñú²vškñ]EÁ..‚CƒX›¶D>DvûøpÛ˜bê½n5(u»øtû¬¾Bý">h¡¦ˆñ½˜µAšÕù¨5É"h´ÀÔù‘Â5Þ|œÆ6TÓ**‡ã~«BäeKP@š~q3ì›û xÄ–ÝcÉ?…CK [‘(´Nx, ‹™„@ Jõ¦;ÆÖຸÀk ç0H½“4æÉã]úö÷·Ý_ S “¨y JZ«$nßtƉwyÓ4é|¾H SqÄ»Ùé0ÊÞq!÷þ¢ú±S³¶GóQ Ãg :ÕtñšXð†s˺‡¢\<’o©ýå™2ÉNX[kïcýöŒ8¿úÌ1gJbá›0j Åçt•a~‚Û6¿ÆûAØ‚w—’Çlv ãvòŸH@ºAd!P9‘÷Ù˜ó9õ“)bØAC¦Çzp— %Å¡u VÙ<¢YQfŸ©°eßy5€²Å™ A9l#äã¾(»cHÓ9¥+¯µt0Ðä'ÀiË&¸ÂÁ•=pÀ.km(³'·ŸÊü` sÝ„­êËÕÉFxzGÀH<¿ƒÁ].S!»¶ÊC›) Ì$‰SpR8ˆK§Éèra^ì­ñ—öìÞ›:çá¸FThÈöWwN O ¥/fÈ‘=Jåxt*•ØëJBg‚a­³{´bó=®íT6d &îæE)E€>?ýÉέêÖ ‡Á®`¹Pû!7¢HT:#´(ŒFµ¤¨®¾ìqÃm…Ùü{ýúÍèÍÃÈÕŽÓR:•ºÌýçêÀ‹0êYrÙppË<_úSx35±œ„Þ?Á9eFbjÔÃ(Â×84¸»–â-zŒes,¤M·`Üõ^«n>tl²0Ëy'“IV‡ e›ã¹ÛŽu ‹k±nm ŠkD¥Þ.K-Òóê£Yõ¬°Äתy”™£Æà±7{*;p%6bpïLƨkYéÄP°Þ«xcÏdež©Þ·*ÙEÙá'aЏj¨ŒðµâËêÓ ÛDºž~æƒúñmÅÏß,+“Àdž>éòW[+O`9²VèBŠÕPjÈ[ ²p“VŸ¾²êÄ(°Ì¯~£ts[Ù;¢šcQ¢;ÙȱX§—¤öY˜Ø†*èuQõŒ# ø]¿¶f&a‰AU«¸«\RÀAn_ìÚ¼º|Éí¢Y*^0TtS¬¾®¤"2wO÷À ³ºlVwýÔ¢“‘¨Ÿƒ/ œUÑn3ômñîh¶<|]ŸïUEk)>¼c÷-#s¼™ö…Œp¤ÂT4,¯o¨ögÍ‘©}oWCÏ¥g´lfMhÁú0¿‰‹å–íõÕÎ8åÑS¤ªJÜ-E4n2PÜ\ïÓe°ãx—êû¬&Õ_Ï¡"áQéÚò¯ŒX bV3v¿Ä„¦A6{µ³÷˜Çò{`“\|l¹iŽ“Êc„NæÓƒø‘.? "íªïWÝö½ØY,_› `q³¿œ‘3ÚÄ»úÄÒnhkSp}[‚4“x]lV5æJ¸;m&#¦g–;mOÔYu¦ÒÉoäç—¶,Vã†N%¡y]SGÙå¥}|é¼oÞV½íN`°s%Úæ1ŒoØ»ú²z[p-𿤾yéòç›w–³RØ]c=¶~Þ_ÎÌѪFà'?„é}´”?aÃAų´¥ˆ!²—µr o2½N~ßö¢/¥JLTò±ö›Ø²÷òí]ºhHÚúD ɦYz?I”&Ϻå]3’ÖƒÁˆ8W¤Ñ/—¶yJ6Ð9­ ÁãÛ.Þà9Ö’ÿÒ)319‰dÿ†mä-ÙZŠea$1GÙ‡O h^c×t‚z¢ ;m-ÓÌ\c¿àÔÏoË7ô#’†ó0ÊäszsñsiáOç–p=lÆæžþË0¢4ù|°ð¼*E›Ló@sl¢7APøeo/ý?ÞÚv͈lNrXšŽä°ì_—²dVDÿDËõqý‡€9e”—„P|ƒÚyåýc ¥Ã˰©ÿ[íšà‰7š*ÿF€G€3ý¶³­tè&3ï›¶} §±3*«-Øaã>®0e:‹4ȵçìÐ~xYm D•ǾÖe$]µìî~a^ƒSQãÆ>•–NUÝUœ°…H ô 5ÕG²w;lGž¿\—„ì6ù^†Ø²Ûöå«åyˆUa¾÷ÐhXò sƲù䣎Ú{º`P6cßÑ6šsTC¥ÖÆ‘¯ùSƸûí§D þó KV—R¹t¯]€c¦Câ[Ê ÀÃä*Á»’’y∆&bÚƒuT”+g€Ï±.¸lËpQïÐî)”PTWˆÙBfųm'ÿZ0Ù ôˆª?,[ª —ÑÐj~šÂ‚>†ØÉ‰9˜Â»MqÎxtO-Ïþ ù uïüÕuбéí -ô @¤ë6ÓâÒ±Ù¨¿è±rnŠ£å”^å9¨~ö\ƒ<±Ÿ½€7C—;¯Ê#\ Ï{¨ßÉtBP3Ç6¬© <â²µj”¤ŽÏɨþþk­–Êš¿†ö›žšöí”k—ÉU^p>XDœñ G„ ëÎÄÔ¦ôm˜š£(ó##i¦Ë¨ØÃ¤’_œMeµˆº ÞÅ.2>_·åyöš8^C½Y6ÎA•‘%rÊpãêñ­`T:F#I%öôE’—D÷Û*$"aËî-˜Cæúàz«딢`¥­Qrév‘íxÆï}GÑ^|ßE1mŒ,¢=­TëE×]÷wcÞˆõ¶ úf.ËA#]í¡E›F;¶Àõf1Ÿ+Öl0Çn”E‹(@m0Jʈh€ã,{=-0€SV =&»%(\Ëìò¸cÒ•°$>O§Õ³KÞsŒ8H@¢ãjüyTÕ¯íCkø¤eg»K>ò¶~q•-³eNØñÛ¦Ô—ýsæi÷°½~èY¡±z±WÏp3~Âázç =”2¾‰+ƒWQ·ƒº %Wh©3ñ"h0ºÒ+@Ò0ák/Éae Ssº!˜@q9»MÑîPw­ƒ± /ŸXXE÷CËšyŽuÁü#»dÁÐb¿’Ša„ä°,´Xu)†D¶q€*ª]”/lµÑ ã«ïÿÑÂÒ'Áº( UlL<„§Œ|¾]OùŒMüS™œbJLA^Ò~a_e[Õ^eÀ-†Q›rbe!bÔdÀuÝ,]#1´²³e{í ¬J¶ì´ò?ljK_W30³ÓO6¶ù¥ºx­hŽkXÒÉŸæ'?*€Èà°ÖíQ1è¯ÒêÔ·ÕMÞ÷ kÓ膉³¢˜]Áb,˜s[=é¯h‚P+lúŽ/po„­O¨\“}Õ/vríÿÊ €Ä/,®#²9ýY]=ºŒ^}$»GÒþVöü]´£dÈ=A¡–TP‘Ÿ‹+Yû•}þ«×̺ozxYÉçÕܲ¹‚Ëyuv§ú¶—ÎaË̹5Ñf_úêØWå4p}ð™%Q ï…Ò&¹ŒÕ*ÏÅäM¹CÆ¡èr½±¤C ZB)÷Üm=/…•¬É¡ÒçGZ–ž}›”×§® m˜½Z9É×  4È´ZÃÕV«e—D…é(æîêc²% öÕ-fxB/¾”­.è¨Æ yŽ•w.´¤Qư7ÑY‚iÈIl$§Š ÁÜÔ»Ð[rí²g÷”Yow;CnhªUíógfqö½s¨'RÜ…«1;ÒB¿ü¡.°J^j­Øfê^¸&” {,P*¢Y…ßt—´†å¸ú؟ݶ¬÷¡-)tÔn ú6v,'ÕOÿå¾,T*qlKýPd‚¯êÓ Õî\ã'x‹g3ã0ìÕ[ ÀªßblÙ…}ëb ä˜uúJN*jÈOÉF·#´ºã¤V'à„ÈÂGmcõ¥f‹c¶oV?ÚkÐ%²˜ÿ†ù]ܪô[¥¢k}ÏðøgõâÉfïtA~/Q3c71ÆVïÚ^EÌ Ãü)# •™ð®ö 5MÙöð]ËÉЇ=fÕÕ£Šn»ïOûô‚1Ì'Âqt7’sN‡ûÒ¢`Ÿc:ÄXð•ñSVÈž"z‘žX23P É#òŸb39ô³o~Œ[½,oFä¾ CálSп[yÇóA8LQ¶ëa¢¬(%;qWe¤hl{è…²Ø3œÔf.^õWjQ#X`ïçvš[ePVÊ#6¤ÿð@ÎþzI¾ù$û]ÆwÑ(„.îÎ+ïC˜ÃŸñ…DÌf¢}FñþJÒoÕÙ„aÉWü.ÄýÃx£2ú­µ“w,´û‹Ù/ù„U¦åZÜróI†!Ú }¥õÈßxÇäÚŒòó@˜FdÍé0ަ0Dµ¹;Œu zKÙÞÖ2ïmö=ˆ¸øÓ,SÑáa<3ÈrÎ`V¯é{˜F` ¸YxûǾÅB—ÜΈ9öT '#Ðg÷ù®®Ë7p¼Eaaœ¾ÿ+ÓÚ;]‰o: £,¾hö]¡õÀØþ‰)Ä.‚E;>Ë^Ç~lY‹(èuD¶hNŒßXÖ'¯ÃÈ=ˆLGÆ–r+0Ís‰ü˜üÒW³”t»„qÚV2§•]µÔBÉáÔ-áªì–içžÇȺYË=àu/pb oéÜ9qŽðnt?gieóЦöòŸ`]#ŒZ|1Ç–ÓÃwÄn«[ŸüGg-|eN»z~Ij./Àø ›"ÂÐêk0xhJRŸÃì“-èfaÒëíômõõ²†õÄyIÍ´!‡¤L²ò¿™J^J-P`KH‡šïê(bK5a$ŸPœ ±ó¬Šåv“*µ-æRXm÷+Nhªàž?`îRì솣#&æ±¢ßÍ,FpÒÁ8lpî~A’¯¶É¨zÊVÙ½Z¨ºz#Ãýe»‡k(™Þ‰¬âçEÒ!h©q÷å©êù± BðCۈݜ Pu¢cá{n¶ê19£Äa«åp5%t¦i›¥è¸–n'圫 ¢g“I$ÁaO± ½­ã¾Yàä=›.(âOÜ~È!QÛÿ¾£02/PëË8‰æ ÉF'˜Ö«â¦k'ÿÛQrªIOì°ódVÖÆ\§±wE¾Áü9yT¼òøs]†•²‘^ѲðŠ»:Ùà‰9Ñ[¾¯_YãP†>¾9d„dxÃ6qŒe¨Úƒ‚lÂüે­.ÛªƒXÏÍËú˜¼ZÊ.ªÍÙ:q„ñZéîäÞ ZùÿRƒ™ý‡Ì,_˜Cèr8Í4Zü´¯7ûô¾¯í˜¼´Ì|,Àÿº”Ñ?wç—ÞŸþonÛc@‹ÞL–MÁˆ¯~!ž1W}.>ùKÒM!)Ö |IÑûf?-‹©ìIcÞ¨ù4ädð„éÏÚ5=ÒÑqžr}“ì\äé“06÷Á°8jÍൖ64ìíÃ"G~9¡ì&"eùª@¤æÄyKÎ]#æÿç“À=ÒÔÚv)ÍëÌŽ‘QÝÀÅÌXŠøêœÝ“ÈØ,QÊ/;¦Óuì .¦»\nã¦Éð­*‚@ cÊ”ý»íØGJ•8tªco‘M_#§ös;X¶kÃ*HÄÊ[Áø£]¹Ç®©)Ä%ù1¿nŸÈ¹ö…H®Ühu«½ø)•‘\—$l=ùÅë^4 ÂH/c±zHßú¸*–êb‘bkU• áŽÂS«¥amª‹õ)kl»ûa$hâ Åé0’"‰þûRÄöͱø»T4Ù¶ý¼ý9l«Nų3NÔŒ@ó‘W*©QÊk.a£¤Ó›ìs.B*·¶ºð!é1]‰2§Í ðSÇoÄã¥*ÓŒuL!ÛHf*5°™êu5Êz‘< )Ññ´"Mç<غ½áÅê×ÚEõ_›Ÿ·;8pMÛ4>wlúv9ɨZõq3{öÛ;ì-ÆÛè¨s©@€<âtG+\ìžf5ë…*cÞXÄóºSË¿oû÷¯ÀZ”'ð,7&Ü›zí/ê;Žâl·¿N$ž×';ñ›ñ;h¹ÎXKă‡kò=íG+znZÐn&¥v¾$ ·(óµ0’y)ëæŒù‰žÁÞ mëWÃØ÷eoœžÕÖj€ðѨÚ^ãàcabH“«“„‘†Ïo.:éÊ©„ÃÚtØ.§\7—φѡ¶¹Ùdß6aTjæ,×DŠº]sá˜{¸16á–¹:½Øž7œ<ׯVHAÂ0{µÌÑIèÊ»a$œv³ÓbØÑ“&Ý?Ú2X·æ_ ŠËŽ` è¿c; ÿ¬•®À^>ÚŒ~eÏ6¯Áó@nBó™LK\\x´wi‡v"1‰xg’,²ÆÁ/ZÅ×Ïø6?ê?} ¯Æ³²Ó;å{SÉ–7pjë meö€'Ó팲½n[ñ‹»¦%eGöØ~Wl ‘òVÊÊ–ÓfèUÛwÏwÜûºœ4ÛfÒ—n•ï¹I¦Óºê¨Ü~s3îg0p–,¯< lŒoE ¹ì“O½¬ï‡Q¼GæÓ¬–IE߯Íű0 óC0Þò²OÂ80*†¢¸‘ ¾ÀJ’3úñ†ù¯Õ w·’|ÝOËÊBù7þéÆ6Ö9~2½ýü ÏëO¡ÞÉCÀk^ù$‘ˆ¼»Ã}××ü œ#°zú©Sž_Þ=½‘n¸æoõ”‡¸pÄ%¯Ù¢â˹<,Ų6Å8󌳶 ×Âx@º®ÎQ ƒ´ŒE:OY oèÆ”zf±ö_KeS/˜ç{+ý‰ÏmüØW–F8ÆgÙÖ5ý¤‰'Â#ÐÙ6kRºÌdl¬ÍßûžÛ½_0U½÷Áã˜wŠ_· Ô>4+VKA£P6$YÜéìôŒ»Cv$×;TÐ ª ÊoVógû`>Y@wج;é»)|ÊJXþQ²‚BëÆjZÆ.sj†»8Š×vA\ì4Õ<½b)ÂDzªÛö§<¸Ñ,™Ø<;e²1g6ÊáãÑÇìËäª)IІ±Ùˆ#vÛ/aì@â@Tþpÿ]75m¡x-§×[âv۞ל×#Ûm6¢ðýÁvµÔ \ÃXÌØÂ§í)Ù?ï‹8³[µ®Å‰7ëïï©ÿаÛûóõ»O…ªÄ×~Á#¿ ¢ÅW;ž»ùðRƒ8Ÿ#lì0Ô€½BXÅ3Që‡NP_­ S«”Ö}3sLo‚•¨6L=«éÏ µîõ‹¢œÑ­ËÅ'ÞKI镘‘Ô“Û“Á!O]Ù×'§[-©ƒÆÀãk¼[¯–Ì}ý½È¿ãy·‰øøO§öFÜüf·Ð÷‹¿OüŠó·§üD(r¨ßœ’ UìN¥_¦j„`9œX¡¾&†1÷ˆ}PEŸâzÛ}BÉh$ä ŠtÙ¨ÁÞ³ñ¾¡ÄWxˆ?Ø6ŒMÃÌvêøàÌ-z£7ìUù=㺆ª±Ò 1±€®·¹V-iú„uÀÐÖ¶½ìUÆ*v$OR¾:Pø5äÏFþ]GîTwçaš† Ÿ=×_`öúô9gŒ9Á¹kºiBWÉ;h[±¬È¼;â"£ï£E®¥b¡Ì@ÉV¥£ Á[ÔH2ËÂ8 kûE´¿Äž>Ù±v^jk]!E zŠDUÀ¶¾ãÅ"z‘]ÉB´EÊHi†vœ^L8ÈsïRF§©î¥+Ç_¼b+œXœÓÍÌøÚ‰šŒ{ß~=¯ `#ð> Uƒ\ÈÏ u?èʶ%—ú«C&Áúcb³Ö‰ukgýXÛµ9æJ eêË…ÓÛÍŒhüçþÛâûç`Šð4¡s© !*ìçÚ[%:ò¨egƒ&Ÿúó ü‚6URéE)ûˆÝç^o•!F¼û¸NÕâYó™y¨~©ÆVæÓš”<ºK/x é-G>{ÎgD ™è0ãœYëbuû±"@nË’‰Ç7Væ+ ±´Þ¢DÓe”éÇÚ?¤'e»e2bÓp—}êò ¾I}ç`“yI„J(ñ4g¤D¢@¶Z²ç»'ƒG"«Hs²'ãwû‰ì šrS=i•lFç› ½›mÈŠhÙB ü0í·Yt¯Q¸î6¡ñ¶}£q­ïÛ‰äýpKõ†¹7¬%ž–<ÑKb=·Ä8yßL&ßúÁ\MÁHuºþrËtÛb¡ÕO=Ä7/nŽŸŒóþ0¸|1¢ÎœŸ|ÞÒåÝ‹ÁóÙ å-,¯™ñÛÏXìÞÕmêÉQ K‘O˸\ ‹ÐÊa”Æú6x£ìžÓx_6_Ü÷ÊA‹p'’æö»3Ͳ!¹B´Õ´q©ŸÍÖ¬¶Ã`§Ù u$S0~*í†FŸÆ±Ï3ð%#‹Ê¾Ë7ònQX=ÞÓ½Žb6;Ý*݆®ñ„­Ë»ç8 2Ù1…\-YÓ¤ o &¤^övûf²l™•l’Șr,¼rhçÆ |G%BeÏ»d;rŽ×¸[û2Eçè­Ä­™ù»¤‹]@lÉѱ„B삺}A\+0WõuÕ³[Yˆ òÒW/ec¹´øÀ»TL@)8cËVžS]‰ªyŠ ÖüÈ8~¼€OÖLM[UõVšˆÚåYQψÚ{˜†AÞ ¾âÁãÃfü}vðL0MøzV†qÄ">iÎÝÈA‡dùÛ6œ‡ÄÌròƒ Ü°‘/»‹ ÿÀÛi¹TpXδ^ú ôæ[B7ÍþÅÙ©0ªùpÚ rªX UW–ªÜÆSjÏ% ´Ê4÷í\~Rú¯ Ù9Ž*ôâhcÏr×ÇnÎÉÃå‹à³ƒ÷-Í+Tò½·«Rof•ºo\Z$¸c„TJs÷õlñ#:¼´¥b/œçî%ýåâcsti7À|‹ßñ×.-ºÅAlè c…«4Ã#ÜÝÂv[“sbmªHŸŠÈìû‚þn G€¤ £'•wRJw{æK?všShãþ"Hå/¬A§ŒÁ,Ô\[ا ùñå ;|¸[4|ÖÅ<šSK˱b¥.^“èš KãÁ­Þ¥‹3r oŸ,.”h¦é‘™¹Ò‚ ?¼ -ñÌÒŽ ŽFÎ?¯Qfõ(:†»Æë3ºÃ¹ÅÐq/ŽR]DÛ1éÜ*Ì#’áÛ$¤Ó=¹óJÀ D‹Z$bD×–ŸÍ„x¾PPÙÈ…æ7—}㺸+k8Y·­V¦wTico˜óÄR³{L›öóýå³›JßãCkøjËΠøÜ ÃàJû„n¾þÏD‹,úÍ®ÿ'šÂeåËžs…ƒçOÖkô_îo;áb–‘p‘ÅN¸È’]Ê“YYþ«¾4K1E½¾4/¢4^ý·Èò9¦§—Eg˜žžÎ“ÿgy•üC9›óGyÍbþ!NËÿÎf)ÿP¦9ÿ0‹ËøŸ†¯cVƒ:kÿ÷Š­‚ÈMg3•Ç]?/¹üv‰&£&5GY²‡ñë¥-pwhÃmMͦ´S4,¡ý©ÔW6^Æ(g;:íþºyà{[Œ^íUI½¼pž»í÷u¹ž²|ƒòb¾FÆÑ:ÌgÅÓ%G¶#ä=”òœå*±XÚ{f#“³q‡{º€”¨æáò….…DÊ_Ýø‡Üº¿ôÁ›ÛèE-¡{”.êg M…Qp©i/¿PP¾ºµ”³öß„PpÑpøÏã7dn9Û½LRÄÌéB›^•ao¶åöôfñc=þa1S|½ZSΞ=T°3Û{iiƃiþXt<ˆ:*êžqya©}`muðL;Qs…¨`ßž•MaϺ鳇·µJˆ?fà´qà¨ò7µÅ“Þc“N¦­.Ÿ;{‰Ýpzi‡r/Ü{»ðåÞâlAº_?8,|#R ÿ+wýÁœ®•Ç>ýU 8Ñl¶¼»s›]®ß0º`3CèFf3qÏhuçŒÞǪ̂8Ð<šàœ¡}çÈÈÊÿÂ9ÖJÇÚ ¶C#Ьî>Bù¹1çùé}ãwb6úñVæû—né™ábæO§Ïî]šb™ žn1ò†fÒñrÆzà Íy(˜šÓYE#WçAlyprR•Œ™#Æäà3Uù¦Ð›éŒ•Y‘/÷º-®/`¿ AˆÁÆ/üÞ)š ‰Uƒ7E±®èÔ%·\ÓWw³ ! DP.<±šìüÙ*J½ogÎ'Kr(WÏBlúT¡0 ÏÉôÊØKžE~lOÍ–¢:üVÎNªLK*ØL¡y;Ú1\ˆ¾C}vÙ?ÔAvîooQ¸á*÷+fÝ·m†b~Å#}±½8CˆÚa¯n½q8e¯×—v„Šü›^Ž0GGåcâ ÌK°ŒPQ#=Ø›£ åHq$<óç,á½»6% -Z÷WyÞU¬Öí`Eš¡óâîèZ°Ù]}òôœ„Ì“Š[fôlú˘…»ƒ ¨¤}#ú ‰rÖØí·7u+3;ͽuÍða#îœõÜ㵜sKåÓ܃ÿ;R>í,Œ"¶Ë‰×NRä]\ "îýBº˜¢Ç¦—E!Æ–=™v“’T_mZNf²5ëfVþo0Pºm“ιˆ ¤ö>‘–¿—µµ6Q×&§]ju´Ô´sÀÍèÅ{Þi¯Â2žïø5ªRѯnâxÝUÂÄOØP•f†CWï>m T¥{gÝ⌔4H–K9?èwkkJ£RVs¥53rˆŠ)9kÉ«•˯Ùâw˜*̉mjBÌÛó8.‹£¯ð‰[Áz"U¨bf© ƒ^2aÑwšírùâèæ”b–³{|P磲Þ*'Û°ÂØ‰çÕŽ7a³jíˆØ&š[ébµ‰–°C¥2ã¨Õ€a½œ¸Zb¶`p“Ž Áò§lŸ-«­Ù”awhÁê½¥~~«:À¤ð´2}Djn/¸ÍM'µlq ì·¢ù 0…|‚ùäú8¬¡CK$ÎÑ|¨Ð—ï h/^'-§UâQ©ó7ŒCC,p‡ï¤¢!k ÷‚3FL©‘ ˆ£x6ÆÐL.G±åË'–Ñ•»B™TC&vÎø˜º¨Öž8ùŒ©:§k=¬¡¿È?í±³ºÅŸuöMSa™Aÿ&ŒäˆR }Zm^àOàÕ‰ ¶Pâ>#~wA-Ðj'˜*jvMž—°¯RÆ„‡;–`ƒM¤7[ã|5mÚ‘a9³¤¼/!÷Ë–VÑ:Ë8ùi±ø:†™öp]Ê„£rÞËa»CÛÔÅfäˆ,w¶ØEZžÌ=ì’mÆjÇsaq-™ÈÚÀœÑÍ{‡0{Ê8´Í«VS†4«Æ9Ûêó‚HÍý®`ÍØ¥%ôúÛöDoêäÏ\p¨)¶´6ÔÓü ·fx\I´.?õ— ñY]óYãc\´ðªðÖg’a,–Ë ç:Î8cpnŽaå°¶Ìc ^BìÞ<ÕS Dªaj9!‡y¸Æ®q¶¾q‡taXîq@Ÿª>%º`(…±¡è/@ ™]ÐÖ/ÃÔµ'êWÌ¡J¼çÂÚÔUâEòqTm]‘ã%èÚ[BÁob Žn²ýã/Z ñÞ‚w^Î]ü—ƒMxÞ>ÂÔá½œÏ •NC‚i¥¤º8©7Ó° :ý.à˜£;³0MìvÙ øvÚdÌòAò>Þø×…EîxK<‡Xœ #Æ@î0ŒÃ6ä™°ì¨É§l#F§/= +,¦Wª«¦ž6oÕ ë×ô"a3ÙÅ‚ŸÅ”Žê(”ò›nàB—@+\`~Rц±ŽZþ½Èa|Òá™}·Žw¼[СŒÑ}Ö°ñ2’wˆlYV›oK‹PÌ?®“£5='Ó2\ñÛÃÏÅd.LÆ÷ùo~€ÍŽº ú'¬¨ñ£ZÞhñ‰ÅÕó–®êîà´’VOÒ@β©ÏúÛ~­ w¶¼´'˜V4×ÙitÙ->n`vÿWÝ[{'+U˜^«“×±ìÕÕë÷ù™‚•ršäÆšMŽêºk¾¿:{®’3,÷ê&“  .• mþH>ce+6õ}Ncé81Ôgšè !ä®.ÜÑ5]Ì~¨F3»&ŠÍK²ÜEH»VÝ¥¬ÎÒ"nÒiLÁšz§ª7¬1x?¥ÐÐì².™Ü°#"[ÿj¶Ç"V Zƒ.ÀÖwX¹õš£xhŒ{;üÔN‰QÏî¢õë·q +ä€uV™N9$oõªu dT©`BY„î×a*o£'9F¦M³4 ËÐD“½zY…®^Ü×íåÕO[Rz€'ô|Y‹Zå–yõ™m[xdj¶FìᯫËT9-1ÿc够ëóiQh‚§˜ ´a¡Å*F¼p™»ó¡Ò:Jt;ônKЬ´ Å>þ´GKOþL¤Òf°¥"íÍh±ŒÍ\Ü’¢í{yC×_èG®÷ÎáK‰ŒBâu]0 ¬n1e<¦[¢Ø[Ä;Ø}<؆’ƒf“åƒkr¿‘xwdW´ó÷îýlrçÇýš²õf¶¬U˜! Á®Ã|ñÔœ¢öAŸÀ°mfEÝ,¦bk˜Ä;-ÜC½ªcAíHØ\ZHˆÐV–pîâŽÜ°|lnµWì0\fâXvÛ“‘XW?GH5²%YOîî*ª§ØþìúâôŽ`ðNXSŸ£Fe‡Šz‘Ã7ó‡J!\p Ju ±8ÈÚM»dÖ±¾)aÉaÆv(Ãx¬_¶%‹kÀî¬öF“(gPἸE˜ÃpŸ’M8yñ¥Óa”÷ŠQh0I׈/ñ§ÎÌÉ•°L™­à®é —@ã;·ËúùQ¤g±BtZ Æü Š­ hvsiÀh樞ò¬ÅvÍð_êJÙÿw]i×»ñ^9׿í";ÿ">û qH¦(`Û¦MϯÎðøsêÑÙ}A‚SgÌfqÔL\íÚVF²±Ú³ÜêHùXGš¡Ž4Ïç¨#Íò2Bý(-2‡Š=Çõ¥8Jæ+AQZÆö‡9DXWˆ³yÁúQ<›çøå8IRVŸâ4ÍbþK:Ë¢™Õ¡"Õ¡¢rÎ_Ÿ¨ýCiiYñ?KKÑÚœA÷û a·’Ùðæ#¼¹æòúyÙ}“ë%»¨ºgYM&Âl‘î âXÿ6lÙ2«ýQmWØ—ìRûf¿ÌU+t§#4×}›Ækë_'ð…½w3L’N,H(g­Ï8e.ÂÒoL$î¾Úeý0ŠÆ<¹Æ®š–„£ßÛÿFõªîeS•–ß›zÄ|Á\À#W«ÎÙ{Ø[æäRŸX¨ZѸ—#6ŠíGá(o¬Jìzuj(C¸% Õl÷Z Ö8ZÑ’.kýÇnÌ 8C… @ÁÅQ&×jáü<°¹; ûI¶—õ‘m‡yfçÃÛ(xQ+VÅÛà’ØòÅØÏag¶Éß*óßaúš†Ó°¸†¯sÿÂüvc;c6¬[û¸‰úmçcº]'”óã›0qè ­ ×ôš…åÖ)öâŠç¯½Œ¾´·é©&‚ž®Û†>EØMs𓾷.Åïy}/LS—“°©n²‚=T\È f}Çm•2äldñ2ÑÆçDÒÚ~Â5ÍßÄͽŒ­aµ0Žt‚WùÂÝ€æ`Mœ¡ŠÊu=\7ײ¼³­lكȒ­ìŠÔ[ø)‹ó‚vÙ|`™âð§É6‘®¦³Ë·0›_X„q­‰G]þ²­Êм­ü³`/„Qš†Í‘öŽL(¶LÙ,5ÉÚ“JºÆ@‹*{Ñ{~œßk)ƒÅûÜé9 ñØFÉOCÊ´(:ãlA~…Úw”Ø£ùÅ Éòö¾÷Y‚M•)‚iÛÕ Q6F\:¦wWÞ|âì»·kÕþýÓ'™k݉±úšW:­ŽÅ`Bo´Ëêã| `úî›ñ‹7‚ˆ|UÛ¶=L!…ŠÕaÛPIˆ[é{• noPÝrC8‹ó*´1çvóƒnØ^aú‹“e‚{¸†UnÞÏ-{†¡HBçåø~–¨Œ†]Nàƒ ˆíþÉèÔñB+SGwñëÕí=aUY,0ö§€nkø~$~î¶yк¼™ û܃[`oó¡‡eÐ^9¨ìjŸþ #›‚}³,]õÑ)á8¬b*ÓrX\-Ìdõ¶öiH»yǦùØþlÅ1,c'!¯XË*nj57†<ìE^/õŽät°àlÿͪ³ D¯µ+jŸÍ>B¦á^gDNÐù,„£ˆ©ÿVç~b9k€¼wàse®^ufc îÐ+‘_Güa2ôÕø³ÏíbqÚYDl‚Tar0£Ž}‡öØ^°1ké&ê’ýƒ5Hˆo“Þ #-Òê—fí`™=ºfŽ¥bo-Ä q#;Û†_¤‘S/Îß$‚Y]=¯a:ƒOŒPw­½µ ß?0f¸©mçÙjC*uBûœŽ£°HÍÇØ7¤1bl»îÔi-\;]3±_]–¿ÄS®o°ïŠm‹ó–8Í1ž/ÞÄ“7ˆ@FZ=`±îñâƒmT_+Å"‹÷`Ò+ÃâýÓ0–S9°$&³´x¡ .•dÙ»ÈNÉÊö5ZUÀ™ Ö¥²›Æ/ÙÛ,ì-Ù|uo¡ÐÞ(™+D(¢ã FmuòckÄ-gNs‡1roì‰rÝu.N”À‡I'y“V#*ÔÐ,\!\×ÏT+KH•˜=&€·¿Wùªx.yŠ$‘cßV)¢0L~‹Ü®š¸]Ùcs¡ »‘«s{òVÁÃpiHŸøD“=FaOLdÖ˜ýR¥¬¡;6*„æ2sÝ`Î9h6f"‘hr+«ºõ\¾™Ë<8=^«fŠ­LhZÅ:8Î{•ŠˆÛª‰€E€22ïDZü) u&‰×í’á#ÂLw4| ÖÈx©¾nC!Ü ƒ¯¼ú+È éæ‚=òC@ú‡ ¢Ë 6‰ç‚ê etMtlÖ$g'Æ8™•…ćÕòeæ´SL] rgñáQ3úîë–luuõö%¯7%áó??ÉuÉž­^ó'¾|ßeŽfºaö‡ä¸S6{ëÑÊ ‰BÖb%»±Þ`Í·^ÚÇ >À§ÛÜÜUÛžõ ƒ{(”TP’w\m‡JÔ=%%(s­³=¶åÂØ|…™eMô4zYbÐËV[óµVÅ{áï|@–lþV·2bÈõq+û¦Ã—¯ÞW÷_ëg…›{ÙÍ ¨B[;(¯·ù ðîÊË• }Œ°ãêoc#>­8^=}åU¶^6—Ál~¨ºðPÎÜ_–£–D°±2£§÷cÍeÉ=èW kE­ŠFmµQzLxWHd\½<¨ïŠ“ad~ŒÉégím„•Ù7e]0?tw`8Å 2¹Hüu¸ÃM.¨-Ûêh4³Oa¡-°ûË|qÉ€[¾×¡Xªïÿñya.ûj˜U/¯Oè*§üÌO/ÌŠn’ÈÚÌ&œ7ºzî < &ê¡5çT܉sä0 rYT¨¶C‹ 0Ÿ†Ú=FÁub¤ RËßçÁàŸ“,<œ½¥Ÿ1&.G0`ó„â\À Ãg]D¨q®hâ9vœpJ"Ùvö!Þq@î‘Ã2‘€—ÚíN'îå>ãŠJZ ’VŸùí#:ñ1hÏ­žèL„¶¹„-‚ÝàóÉÚš±än8³‘†šk'Û¡cK½aB}tåÀIÑênlK9#ÕöÔtA«(ׂe@<è¿T]ŠÿØÍC%ÛlÂî¨¢Ñ ?íÚŸfÏHhšïøibaÙ‰—Yú¾àÌe¤(¾ÄõÞúu¬Œƒãí =9+1óÔ*1¥WbòÕ}åERÌþ¡’Çc§Íÿ–PmçGmFÑߘþçT´‹pеUâ%‹xýø ‡¬ÛN09óu;Êu±!út™L—Å 4´¨Ô“\}´°ˆXÅäÚn²Óm@a¡™/ðŸ’"ÁOUªË•Df̬ i[#ªyO³ûF² ¸£ø¤£»9˜mYóx~Š¥Vþ¨ÙËýpÞü=U¥:åË-mßYP¯.Ë+ÏÁXÔø|¬8#w´8×h†9Áê×2ë:l‘$HN…·ËNҘݷÀ×SÎaé,Do¼Ð×aB°é|^Dd8œ¼ž€~j'¡ACN~*n5º¥“„Q„ÚD Ë7ü¥7 ‹ ßåvgt4aTú¼Á’>)5Óâ#l Æ<WüÂsM7~z§"ý¾ÃÎ(B™a4kçÐç@6¸î²Í*?¿¢‚r¶EmbðÃv2aìâ*8ÙÚånåÒ}ë0/õÏÝñ0Î&½‘Ö!÷ò³ ,/öVHf8J°ðêØúꘫ(WÜ4–wpc]‘Y§Å¶òÍ–Þ>ÛÓù)‚I]TXE½ðn˜~8”B–-•K·Ë?TÕäÇìŸþBx[ÞÂFšX¬a~í¥jVÒ±§b€br<•âö™M´_ºoÞÖ'Ê2F+§²Á rìg ݺ抵v>_Û‹tlVÖĺeÄ @›†½;Å„ðÔÍ[?"Kã Ì4øwþòºpn¹Ž&ZwÞÒÔBýMüعE t×ZZ¼j3f»ªaІ2ÚFmw§¼ŒpûÕ­}/ÀŒ›¢µ¥ã ÕÞÝé÷÷!l¿­è‚7ˉ*ƒV—»î™L"•hµQÓMF¼5´ÙáýXAú8%$6óÍNVZêÐsvÕ¹ÓÐþ\Š­maÙîfB©y&p‡ÃzsmZIlcŠÌÙeûÎìb»õc¯–Ü0ˆÃ?…u—ö È|ÉîÕvðŽF!úQ\­ösfýî¨ }±/Á pñiowâ5œ!ÆTítðX“ƒãéÔù゜ì8é¦Å®[¨®$V:°¦eÅŽûb÷˜{Ô—â¾äãÖ°ÙÆÊûhߌÒfç fÿYWÉÚÁIó¯>‡z¦¾¥[•)ưœ ñŒÙT±Šú?x¯•½/|Ĩä¤Ï·ÒÊÍ ¥!®K¯W¾éÆïÝØ[½\›‚'¤9,~Îý`|8­ ÎáCݲïqcÁ˜yV’eÖ6àÅ¢„ËŒG=œ­„vt–š>LýŸðéÃMŽêÊÜò÷¶Õƾó„1Pg£•çu!J×gl’³/™ëþT°Û@$Ïmÿ0¿¹Yíy|ÛjùAaﵨp0Ää=óÆ»ž»ID;g«‘r|^»‚¿§9 Æ Cp ”ƒØ¸¢å½Ê÷¥¶Ôôgv“PnŠ\ηX6’߉ŸôOMÑŒ:N-GH­lýæi7so'ߥ_I˜µz®6MÛÓ>”¡3rÖ^Ïùs\ž„Æ¢É:a}Å mÊvôÚèÊÁ q–Ø,½¬-É`F¶#§^õåc.ÓyÍA‘,‹AÚPóì¾¾¥¶¢ËŠÑ[3ª§pàškEÃÚ„¶NJôÊ¢ûÞñU„ªÉ]»,jàÒ9ANäÍhÉm„»¢¼2Gø»ZÊ­¾E?Io¾–M%DÚ”ŒZ×ìX>޳Ï#!¼i1û3;ýuzÚÖ”*SYu玽ïöx%h12Ç Ë×SÁ¡%˜ÿ@ü‰hÔÊ·¿§ç^Ó‹ÆØ¢¾ýgqÊ®§ ±»ÙTÀ‡ça_voBV^$Ș[Ί-ŸFö ŸM[53¬,×è£E¥ü´¬s³£:Š€VÁ¨ó1;  æü +b„„”™p¨X('Y)¢UµñòD°q¥‚ Ò.±™¸äÖ"V³É×n g[­ zÓ­ùIfÓÊë|û-'62X¥"ȱEG~V²œ`+vo1ÎÁhf¾ENîR‹§KŸ–8Ô«-º+H ¢²=ÂùdŽÔfú´ú¥$£¯Ö„Qu2ê߬bÆ ³ÉQsyËØì8a _Ë"‰éÍrÚ®^ªL1»¹pcΜƾ&¼–l¹ò¡dµŠ¦â0ùÄ—/V»¥­Žýš¾ˆ£2"ö< “Ùý½ð§Ò ¹¨XÂÔ4LgB¿Òéy«IF¦‰£ÍNbl‘ ÙÎl›cžÄÝS)Mgl`ˆbAËw"‹ûºi?ªÄKð‡â/|[?½òþÕ>xèѮܓèß)êÝÁÖ¶Ç!séîs—"¼ÓKʰ·ê† M`§8Á©P±zßè†ÂÈXÛ2Ù^»ë9n6…²k?ûB~6H­ÏÐÛM§¾‘»à\ž'²Ùh] YÅhŠ,·ÑeêòŒÚ  }7 ½ ÙN»ASÿê\ˆ—Þ´‹gƒÅjlتlA(Í̶QN[òލ^‰e[ÝLßJ·‡¾ßã"/—Õ‡Ë{iÎõ¼q&ÆÃ¼{µÖf%ÓeCª=@–vkyÚÒA†yn2Í`×ô‰²&"üÙöúLvŽóÄj»‡f8¸é÷œ’®ˆâ~;¡dÚåYb|±=Ó켂ºÈ+f$\^åó+{Ñ~­–Ÿ§L„'`1àÖÕ ƒ>¶<åÊký¬‚Ö½2MÏOµ3KÌüQšÇ~“9wŽÁ-›xTÚÃ]v¼Ì’{b€„“ Ú( sh2­Ñ8K_HOn€­¼¹ ä²3@ÔÜK¾S%’ni)ÄǸ§é lžm³³úxLr9¬3Ë*¬{)î85‡B.Ž3[-òl˜]·ê§ïÁŠm8KŜ݉µxÏìW¦ãð¡ ù¯¯jâ³X9G§BÝÜväÆî0qq”5GùòÌ^ÝUü¯àS‘ÌìFމÎÑEÿÝ3­Þþk¢ÃH{[e !Œ’OEI7íRT‹Á3½Oönƒ;ñv(0Gaå‘ÿ[r=è¤F€ÈDœgJ`q ~0“6*(g—ñ¨À2‡~‚`âîûä;Šèì0œ 9àÌý0jQ ˆO)WC‘ܳ¹FÍ^èïó÷»@6O× íá0rŠìïVÕT¯¿ßn»©ü <æx¼h¿± j¤® úÜþÞf=–ÉV)nãa| ±7œñÀ¿c¡ZöŸÆAã¬Ý3íœ8Eþ¤\¾~å9he!Îv1ø&=¹¼hÖÉAl )ÂÈô C ÑÆ6bÛ%/U ‡Ð[¼”—'A•oཽöQœÀ÷¹ås[Û•ç,Üû7-âøâÒœ,+¤ÎÆd8Š#vW „ÀiO­â ~>»¾„»ïä Wp3ˆ8uæ–ì Òo1˜Ïë©$öµÐ¢*!jîlUÊŒ2ÄbÛý¥YF‚§žMÍû©ˆËžºîÑR »¦P]™K8\Ë×ϦX.ÖÒ‘²•?×7! ±›~®s)v‡Á–5„sêrz0fž·%B„Ø8D‘„tº2RÍ`œo’­½\N“]vÚν•ÄÏàÍ@ÃŒØó0ªõtPs) à ©î”™)¶ËNÙQ±:<ßäî*ûÇ/šëóB}“>E‡˜ ˆök®XBà×àtÄåÜÛØy°`]úÀwÜ ¨Nf‹Ò ¿âhö‹|ýlz TÿjÏ&—‚2"¿L;ÌŸ;Û±ˆ–7µ¢™…© œŠ2ܼ|½õtaÀzzý É×Û.f{ç¶—\Ïöb%—òNýø ûžL†}B9øD¦À= ÓrþÝCÁÇwð,‹­ì „ùˆÞ‘ÒXôZ\oRÈÖ´?^æIí…²!—b©Í©å+‹}G ÃÁ–½®uÛu|ùÝÜbéÀ'8"DÎΜ¤ˆ%›ör†Ì?ïÆ);å‰é¶‡VL+îâ\uÛ ³énY@À“ñ¸­æÌÀZ@y‘°Ãª4X=⦾Ó(Ù}8 Çlû†½‘ßðGå~ÀAÝP#ý¦7‹:þ‘Oeó~ mÚÖlœùmÈÄÖù$ã5íuÉóoj„x#Ž;‘o߬³;~¬'+w0™Ùï02~°ˆõøq˪¿”9Î&7çkó£Ô/¡‡»ë*s^·‡ñ Ç€S óuКF­ºPCtla#RyŒà;IÆú Ãù›E«Õ]‘öªßPOeC$pÔ|u`T1[<ŸÖv¹? ŽÏpÌtØãïþ–m±UjòÈ^…÷3·ÎXóàfÔµ‹{w¸G‡.×#1ú-^xìoYW1<•‰™jQ©­Ö–E¾c;ä«lá™^MXk/“2ž“ÆN!¯ä»('çJ€j¼SK»y@Éâª-è³ôhîµ,™ Šö {tò“†6°G04lEÎ…·DóEFW-‹å*øáì„ÍX¨ßáoÓŒðÍÜ›/gö&4-ùu°”íð⽿ýÃS½¡˜Øh®ÈÈBú¥M M‚à»Ï¢%⪲&š¸_¸[Ϊ§çÏÉ8QJ"“aˆSÌáBµ NìÛÐëÞê6ñMqŠÅòe<XÑ%îU»nÞuæÉd.ãöiõ]´W.Ë“BŒ¸ÞÓWG¹eh‚ŸUÇuºÊô ú Áý"׿)ô XTnÍUεLQ…_v˜ì¾Šó̘Ù4f„z}$‰wHñíÁl‰ÈaZRËŠE¶™{e²Ä€òJÓHŸtu‚q;:‚ê1/Ä'n7BGƒ2½F9 Zÿ¶Ì.Öº=*tìÅê©çáÕÒÄ—oäÿ¾_o﫬!›3jâk©Ê@ù7Î;ìoÊn`mf_,,z¡ P"ÐtÊnìˆ3ɈmW2›¬å"¡D/AAÌ„}ñiøúlú<)NÍÔDKM¨\GÇ·àÏ ‘ÇBÒ¬º}›×TjÈ+N¢ôøì£„ÝÞjÃkPU,ëføø)RîhìEü%?{ÇÞIÛýd6ÜCæ¦"žý>mf˜Ÿªôä¸i¶‡¦`$`A?æ¤ÙÆ yM½µsaö»œƒ»»YÒ4T…Eý°X ª”\é\P1|wzÀBV1rõU~Ü'`²?¾S£n}µj1ªÄeuF`d¿8¢Ø8¥])EçU¾hñ†FµŽñ®Úiþ®+åÂÚ²£Uìón¨ŽáŒ'à@P¢²ÔmQ°†{iÙþÊ <µg·¶Stº¬.¸qA™o,Y o°hÊÂv¢”„ã1ĵ‰«ëº ­ŽŸ ûÀëÉYÇoŽSP)ßGÕ]kÁk^iÝø³ãÕÛ£|ÅÅC½Œù@¤™4,R¿ñ1‘EmþhÑ]¨þ<Òò9Œ<ŸqÓ«øSbÝž= bˆ†ˆ¯W²Å82³êÏž`= „ ›ËÕ^Áç…R6À¦Õ ¼òsUg‰<Š·A[±¨±Î1t04’óäTvçCFÊhmKbÓ@7)Ûjïƒ ì.ø}Þ0g 2M«/'Wï.pUÕ¦‘ué»]UPëe0Š¢?d´ô>,”8I8z¦ñgîû§xçÕÁs^‹Á>i)à½z=[Ô*˜sÙïÝ»‰™t¬ÆÆ~d˜6TªÛ¦ëÕ%›©Àyæ+¸•˜,TL‘&ŠÂÄxaÛ…xUG“Úä;ª5sù]²¸k9Sƒ•l Ã³˜-îM›.v“Ì ö™QõyÀÖ ˆãev¯ˆu‹ÇªXjT¢¦QÃósXƒAòƒ2{¥ÙV:‹Ý¼Ø|Œªå ?¯XO{Ïf°WX`iºb¥|Ô8¢ìý⤎?ÃSö€°ï9 ›/Çÿê$rЋ§ÃÖù{‹‹v#‘lª%½ÙÕÒä)Ì[Üú«`@|Õù€ â¨qu û쬜D‘Þ\ –î¬îó¿TöfÿA˦à?WÄ^ZÀHíÀþäÏ0 ¸EvŒ-“ø‡ÛÚõ?kzEd5½ùXÓ+þui6›gå?ÕôJ¯é­.û÷šÞ+Ë-èzg‘£ë¢p^Î\.i ‘OD b¥¿™ÄO5E6Ʂ±y©nù·ﳋ( 8(ø¨…üºØ Ù„s’ÇDˆ!†8ø!£vå®âÌÓø|[dɼ&òÏ=c´7:ÅI~%õ·š±Ò¼ïõ„'²âÝû¥8ãÈR¯<ëFMÏ?ެŠ!Œ ˆ¢ØeÇ{„ší®vjÓèרj¯âõï©ÖÞÀå9í£cKUŠøý‘©Ò>êS«üÍâM¾;ù¬Òç…tz¢x"°°-jÆÆ8õG-£a›&G«¦“Ø1õ¿X_o§nT¡WU¯=.N ©„‘U2îÜí¿ó.Œ‚4E{%Œ¼.ñŽŸ¶Çþæë!µ2©Èµ];ñŸïæØ­ýÿœ-ª±„+ À´Ø¿›»2Mœ~£JV“-ùYç”ßsa1ìö@ðÖ\“XH-ÐÇ L¸ýfÏ6Ú‡IwDØwŸéY^y^U*½#êmkï!À…ãQy‹ÒÐgR5Ïá:®=/NˉÅ-éôθ½¾KŸ&ÄÕ¹]g—q¤®ìâÚ­™v²sQ:â¸S­`â¾Ù†qÊFŸ¾öØAdÒ8wOž‡i4^Ù*‹ìÈ?æ÷ßßñK¿Î€6šV[ÀeJ-O|¥·œÞv|;S‚`Ij­^Θœ{ñ5ÙFåQò!;×:Â'ÞN“ml«Ìa²™õÁ3úçÄœ§‹+Ë“±Í! qäkÊÓ„ ÔÅ{«›¿ùµ¯Ž‡©V¦™î¦«Õšƒó_¸áÀ¡>úTøiíà‹©ÃÔÍ—s¯lø’c»×"6Ã(ÀW¶_&”k(¿ ŠPbw̘\¼Þ­Î‘G§å¥GãÍܾÆ÷,^ôÖŒ}ùÍ -ßwOæ(F/˜[â”Ã(ëûÃØÒD¼ÝkzZÔq|0²„Ó« E|oz j‚·ÕiÄãYû¢ƒ¨Œq£m|ÖÖ5Þjq¬”¯9’ø’mjÂhýÛ(=ZÈÄ_wÝ×—òÝ~¬GUÅæ¬ž%7 çØ L±ã\ܳ,2¼8hç¤6žÈäÕ寘÷zô±hÆ.ÆÊÍïƒþJ,ÒôŸBC3=`ƒ1ØVX¦Gwˆ¬¸=F\©Žýænw¯‚Üþ…‹:”òâC¾¾C]Ãop‹·ñ,žvHŸêö…¢ªáÝyë¿ÿÛ}ûÍÁêß÷BVŽ@1ˆG — '`FÜôûõ t¼Ã9TÏIÅξê) +Á&{…3°Ž© )7 ³Ð¬¸¢· A„,Ña©o–;'ñ|Óéüéd÷âÞV“¦+Ý”³Å9ûíQƒ”wùÖ>ªexÕd m-o/'Ó£Ù&Bë7,ÄÕð:å€;í>J<}(PC•ã–±>ÔZìæ)˜•T˧A ˜îŽðµþ{Ѐ¾j:¡’l SÔû0U£­Þ}özV`>îm3ZúÌÈu"afæpÀôtÂR&ßSî ª £%Ý)’Õ*ból[ï*¥årpGlÉ5ôã!äs®sýbú¤«¼è s¯#”iw®÷•­!GZΧwDå„¶rNH92{í¥#|@_(3±©¿˜Ö0š<—z1п·°×`ɨ“,S×ãÐ$·m?ô¸…7s’½~Ø•1GÐWv&…e¸°3p¡Bw¨‡Û"  -i®¢lS\+áIù6µj > ìÂæSNTâ±u`9ü þ”"dù•é£àÓ5± ®òGué†ßÏaž¯}z .ªýǶ=Bñ!Aó드!Òj«ŽM"Ù)ÀSS1cQåFzQ|MHíì¹àÒŸ­6tåï â|ç±W*L@v‰£>Ú¸W}Th¦óÛlsZeþ¤²¨™3§KÔÊŒê·øýîyuMhpH<²ì±=&ýÑRÂ/D•áajM'æ…À¡ØûBúb›I"éoþ¼z†6Ÿ®úv%Œœ5ƒh èsÓö¡Sç²¥O€…±œp”Cä–î ½_Á0[± ²wÅŽq}PÛ®¾Y…‘7fË6ðÜkBõ«•|\^XH<ÿ$«Â¸ð¢®±â¾ 5Û¶DѬß>­è¬ÝÃ#ñßYRWC—˺‘ý±*« 3t;,n¤û«O†¸˜R0"þæå½˜õÁj¶'XÃ,Kjæm±„§ŽÈ¬Ð^PCR†ƒ@±r£ôƒ *—ÊHGZÙ郪VÄ (' KG‹Õ¯—|Ÿyêáúæ!6›b½HÖ TAÚÊç©­W»#ªT±Ìž^©XƒÁÂðœ[ਹ…ñ»ìþK XG·´êH?ÙÆt2ðpåê¡3¥ý—=ç~“W_x“aóeµ“#¯qɼرÿ¶2Ói]c¸€C[¼¾®Û¤Ã ©íêjŽ˾û7w*WD”wð¯­ÿV[h£Å0³}™ã„Æšì”ØB§•À×1Í:+Jdã¡B®HÓ¹ËxΨ2Õá~¹fm•?ÿ…'ï¨dO,Ï.-bò‰°uê«~­Õ ùˆ¥%C×éØ /-gtdÉ¥`‘%¿%ÅJ [_96hõo,á`geÙ_˜¡‚A¹Oeœ•˜ìä^}²9 í]¼¥ºDl‘®Ü#áÕ"ýZ}õ¾h+iOS&Âר=Ta§Óv©va›Ö‹ï ¹Z‹†(Í0h'•óÅAæCUþ &î€ï¬g ”SZT­É©qmŠáìáÅ À?”ãlôãÕ3€e‹²cÛÅ¢C\s`@uìöusÀMÿ³²„‚ŠS© a”þ«g+ÕÇJdÄÕžû~CÇæsÎúÏì1MÈ 6b]ÀzRí:g. b aKç5Ñ(újí;ó/Ø@(Î!bcTÍ—s(LãìPáËû0ÖbÆP"1ÿऺvv¤§çG¡sÚJDªúŽêÕ¸³[Õ#,º*@í–Óã¶,óÒy”«úݘ~Ó!lâmH@öY±`—åŸdÿ†ØaŠOöV‡Œ¥„Ý0 ,DZ×kgÙ ÉÙøÐ!øŽ"%çg¨ãb:]úÀ¾Ôãæ(ÊO6¿ ÔÖªè`ä!2êÙ ‚ïŸÝ„€n“§qUÿ˜ÑB·9Ê`”¨¬ÿ„Ç ?Y ÚίUöRÈ/ð´¡Pi§u½ Ú*ž±8ô¤üaçœ# Üxúä}{lVÁ;'gX;A;X*͇›å!Ͻ“Æú²<’Dׄñð¹××gCèäo¢\7‚BHøÀ{+O…±ÿ±ms¨9á(À ®Ò¶«¢öð^¯ÙÙfš‹ÎYeEõôÔ„‰#z½¼l>‡«zä?CŽÔ®ŸTðÕˆ“¬p·Ñav tjyb߀öËœr[ú‹@ÇÕPI<êZ.á6µ*êÇæîA÷›ÙhñBHù©·} v½fAò E‹2ÜÞ(ŸVŒtW×<º*¯¿³ûr9x'Ì¥Frùy À[ÏÉÉcÄñ%LúZ—Mã¼ÇBWz®ÃTSêUýT G¾3=,jíÄØùÕó3^{9 ø`¾øcqšñðð¡…Â4ôú#—è¬HhþÑ ºî[ç½Ň`ÊYl»L&\”½¨sp}ç O²Iªÿá…èøÌc¼`Ó f~P\Ÿ ã˜b:sÚ„Gf`HY‹g;Â8X¡m»+þ)tFƒsº0ŽNÆ"uaž(WIÈ똗Ž~#}xpŠKÊû>Õ„ˆÙÖSÅßmyåµóBYcCÿhߤ@‹ˆ‰¦ú(°³ŠÑãFÄîUWŠ•¾^Ú_Æ®ã(HTbqEˆ®êL±ð7Q%i[}™Q…J~Xf#X7(U­Ï¿¨Ê×#º÷<6nqÚf*¬×6.âŒmµIp£_±P=Ikö9Ì@²0ÊÅ9닺òÔoÍ„Qœ®É™•ãËY‹}ØRM´CçÓú÷føYÜZ^Å¢õŒaŠ7Ç.•^5› lÖ–ŠZRØ 8UÕ1ÆŸˆ,ä[]sô¤}õ{›aR(Êè)7ŽäÃñ0M‹ìq1Ëüĺî7±â‘¨ Ÿ3ãY¢ûÝ‘x+ÄŸ*{4µ@ÆY™Ãd;h‰·à¹‡á2ƒæv¹+!ÌÕÊ8[™ö’>§y$ Q¢Õ:ôôªÞ”°R5bQš|—…×]€lCHžPè¶Îx2zï‚§awòÙ¬¡«M ó)TX½Q(д 0J«J®_RÄŒZm ‚«où ÅéñÇôÚ›=Ðç7óÉ ðBÊ=`|Ó©¯Í/z=ìJQ]þ žfrè”[)ôA–;ªçןê­A2Ç5ŽpûC{ ’·.ŸÙ5œàÞxÑŽ¤ß´B9 7Ì ææ/ÍÌ=ËNq:ýŒeÔÃaê¡“¸ÏÏ%¸ßûáú8• ‡øæ&ŽÏ_ê ¶fF ‡áÙ-R¿ôÞ&_yUòà‹Õ¯Ÿý‘ìÞšJ•Œz£§•¶ã|Cï.Ï>ó¬"ÓÉèå'~¦Y²ñ“oï+óaZè0µ÷ ððÍ· _N¢¡ŠýhÓ? ö‹«úJ?Éâ¬àºWÉ'/"Ëüüzç¶þŸé%³è?4ŽÿŸÙMV¿ØÂVæø¨ßZWÿ·›û7’IL’É,v’É,ù×¥Ù<ò ™ÌRW«.þ·ZuQðeT2¨å+6xE½übëoLÖÙÕÉgðÑ”sŒyîôÔˆj¸!Z,¨÷’ü .œxqº€:jX„œÊh3]3´wüšð{ÔÅJ̇ÙVRÌê ¶ £ÆYl†<ÝHÙ1Ã7±AH.¢ð.»ÓáÙÑ`//e_ ¥»£Š ¯$Ôý{©4ÛvÍÈd÷¡©,O²Eºúþ?\i}]Nɧ•³é2üyÈ?£×"C«»ÝiøçبÃè½ôäœåz¢Ó‘,ox†?¼_X`m›• ªvÁáÏo–7”ƒÅO²›¶l µÑJfin̬Ÿtt«ƒ ÌD·Ý*™U-4qQ"V©zb÷dKŠØ?[~ý@<ï—y„±â„U¡ÑžÍì¹€'Ò3ß“?qÍÃåÅ>‘½÷ÚTº{"!ÁÔiÐ$ÚÈû²*¾½T”Mg€–ÚÖ>ÞXÚ¶"úÆ‘>¹‹ÏúïWqŸÑ›`…ý¨w @lŽ/îÑVOå|†Õ‘3Aõ¾×÷Î-u'…À/W“(¼è‚Âlœ)‰ 2pü&Þý©%Ò%ÈÃx û)O[i+IÞ8–±‹ “Orÿlæoʰ˱`¿ ¢7Ç_ 2–D=vw`§ü8¼üÄ`¹ú|/ŒÃ6¹íš°oiÞAR=²ÔÆSx-Hw-k¼…. £‰ÁŽv˃‡xÁ½ b¢vKdŽ<.ЋÎh(á„°lú ŽÁËH—÷ŽðCYÎ0Níì%P:ªÀôù&ýôœ–Åo-¯Ë7Sª ?³Õ|F6:ß6ÚYgH>N/Š@:ŸKàÜŠêtäÛá³ÝãB3—Œ»¢úö<ŒÅaê66AL_lB”ØŸÝlº’>‘!7$Ù"«¶½ÿêó2Ø”Z¦©$êÖ¶?í‚'õϤÑ6ú ñ’ί¹f‘xb‘ýå5Ÿ5‹-­`1ÍjöEÍ2Œ•ªzø®óF¾y¢oé ÎïUî¢=ªÃ—oø§vÌ7æ†i:µÛµ¦Nû#Œ “µ¼5q½fFŸ ŒŠÝÄ~ fוƒ *ìšû{ü>îâöÞYÛtË^Ä(i‘Ç+ÅD«Ÿ‚N4BOp›/ãÝ )«?'ý§Ÿ±þëºPd+7R;+;3#î¥O§…Ðv•å}²›^vÆ.±“|]‘ã*¬ÊsrV òmç5VÁ¯\Ü{ EgÌ·­X“½h­”NBI<ê1mÃ1±œY’¯6´n"P<&é(áŸêðPGcÒø‘n¸í¿W +`0\`yÓ}¦a’Z>O9vGþ[ŸEü~Á~-§=ì¾Û¯„B3àà˸òx2]z±AlÆ5W¼%€G«E©ø”„2ɃD$¯‡#&Sµ¿S™÷Á÷Ž3—£›Óƒó`å¨Õ7:ÄFG= [“™‰’»ç«G½Î$綪ÝQÂit_‘Ù3ó+ŽÝ ¢ÎÀ<'°\õ‰uv$ŒM»¦öëã(›™_öÓmRàÔ"ª‚ƒ´>ÎÔžÙãXÓrñ5qÿÁoæÀ)JöØ—’¤Òª€f\›pÓ’hU=ŽC3@6ÜÛ¶¢Ñ¼ê·‘B±²ÁqÓŸöÛ,€´sßJÕ hé4“ÙŽì'^ØW"03á‘Jø $tE±Ê(Œâ$LÚ3ÿÖÃ7ƒi{`ÏãÐŒ<§ì™_cËÜ›ºYcðŽÓ]Êzÿt>£n÷/0fÊuHÊ*¦k˜Áãþ³õ7¢Ä¸}Éìï½Ì>)yàŠ­ÓP5¹S­,¾þøò©Ó?ü ¿¾6¡O}?W-/jEä¯ÏU]èý¦wØ?4Ô­í&ÐqP¤¿ê& “ê† JÔŸ‘ªÇŽ¡‘ç h„êŒÛ•øcS:°S'a’¨Àž¡6¾ÛIÆTl¦"áÀÜI»Œ®¡Þv1:Ø\¨…½’c65Ø–ê\Œ`ÐhEjdaÅW‰ŠþÜ —屜³– cªTiQñ`Jyƒ è˜g÷ªÁMlæMÒW_˜ióëJöú£Ñ‚ú ¡Èö¦Ýày–¸ip^>òaFí0’ŠúÉ õ¡ 2EÚ^lVnFJ?Òâ–ï‰ãa¢ö_Â4$¾óX MßT D¾<@ÈþÅ]wd²=Eêqît2êNŒvì%âÓùt1){#~ó#þtOÿYõ\·'}zà»/cØ6„™ðáæ¶‚^}JeÑÍgvRÛ1µ xÆîÒ⺣£þ~ysÂa…Wc6·ôÝ{Ø'¨0}Ÿí2þ\ׯ.ý4‚C›q„‡’¬?5aäàQw Qk|‰q–4aæ–Ý%4TÒ—²ªÎñ4ºÕúi)¬˜7~ÿÌ£øì’Yè0p˜JS¨«ÈB#$‡dg³D0·ÌÊz6€½Ü7*r5³ÛðZÿE…y–ýGæÿ^…Â{Ù¹–]1fxMØ6Náÿ|ÿVO›Y=-ëi³]š'%êi—Ь(ËÕË4G÷¥8šÍçó*´Íý£ÿýˆMÖ8™ã° [êuNé£3Û¶y§t[ƒöÍÝÿ ›±aYÌÎP’‚•k—C+´Fuxk§—Ý—Ù K‘È:ŒÝºì]ABOä)“¡êÂ8HdåQA`@Ÿ·M.Á†Æ<аP5.³+n@OšÙ,Œó)ãâìÄéÔçaãÅI²çïFkv³Æ³Ù»´RLÝ+PŠî™ 1ÿvÞ8½8²®~ÐénÎŽ<Ó>÷h£W‡‹G¶yá_a¶P@dS™«†Ìäl"ÅÝ!aúqvçc˜&o ã3c^ð|Ó-mÊu† øf|øJÎJ~¼°'då,ÝF(d™QF%†jNý*Â8 £Žï„­åeöäž>ÕLÕÊÂòò UEãäöºrÄÜMv°xlÉêY·caäp`ÁEíòŒÕƒzãR£›Òõ([½ÈåWË'c£Œ½š,^Ÿ7¬©¬]Ú½ø~0Œzµƒ¼.Ë-Qÿ:;EMù¹›þ#¬`—žXÜzG+^ݦ»é⨽ 3x/h¡ñôýìeا^@&©ôÔg;­kŸ\¤<6æò¦ ö,{K½Ô­Æ6!~µF+qo Ù"ë”ÇI·…¼õSã­S8£ëÚpÛSÂÎŽç°·â ôÅúý[ÛÀžÞæ&bBœÔ‚rÎ|ü¡ÕáíºÁ䈑24#]ÊÞ i¾óÊw=­õëW¦21Øâºyü‚OC¤E726ìûxbÙú' /ì™ÔÆD]cŇ^LVÆÿ¾0m»•¿ßcwÈ‚H?îÚ1.|Å5 v)&ϰ-½jë3ìÒš•¸ñFì4öž;ˆš„Ý)SUepe_+²hãWÊÛêIc›‰”y!ªj춬̪Ù;ÑV(¦0’ÐøŒñ؇»íƒ8…ÛâÊo˜ß±[a@ÇKâ³éœØärˆ4ÅÃŽ-ûõXÉßÈËâYÀ÷4ž…Kùã1ÆÚ\E;¸ }¨*x$ÎO7J>&)ÈÍž”¤‘sÅ[Ú@Ý—4…™v!Wç§-±Oï)c3>„l‰~7Ú¸ÿîpÐhž£{‚óWI¯´ ÊædU xTÙI·°EîŸÚªÈäN§ðÁIà08¢¬IôR§óp´i/n½ £ZiAýs3Ìï”­ç8>Åë0*«PÝ1Ѿ¯ÝÄ~< möQE¨É¨ÍÏïÊíN´Düµ-¹‰ëf×Ù 6|¾&åâVi c`Ø9V`B4;åD‰A|#«ÃdMÖÚeÖ «c^¾éì¤Ùd%}Ê0±DVvÝÙw2¢Xžþ^›ØÙ¥5éY¬)ª&øù8ŒX-*ÿËÈDî휉QÚƒ`ÆÌ^¦_ÏüiFÑ6?ôÓ£øÌ‚¨R»o pi‹§A*,°;=HÀ»§höAÑö÷9Xé&² Ö÷Lsl²¼dŠv#Œ2.ôÈÁ³§§ Y›ež­N€ ]<ÛnŽçþ؇º ÿúûaÏziçŸÁ )¹d5êჿ’»<œºˆüØ.LeÖÄV²Ñk)Êã=)½ô*q«PkGÙ/»ôÓñ©¶Wöw„mø}bW|¯'´7féß±j ìôÎfíÑA®¨Kè;ˆ"×y)UÂ1äÙ­1úm÷ÁíyZÉÉö–üzÿ4ŒMôjPRÖtSdëź.j8e'ö3cÆÇ< Z2û=a”ªã)¯gCNôZ5T~FFª6̈5þââµ5ÅòƒNª“f’LŸüÌO3ª¸-jŸm‚W.‘Ã.-è7Ž…ÚÓÝ¥yϬ‡r×äC‹îF˜dƒŠ ;äL$NÙ¦ÔO®¸Q=fèÊÓfŽ˜ïú‡¸Éó€Ï?¿¹.”¤™®ŒUÓÏu¯ bÇVy¯Ï*0z|¹%té@˜Ò¯¡™ûN(íèD`/ãÀöÍteÌž#{Õ×`ÁjÉJÆ}ø7*üàv&1gWÏ!EÌ¡™_¹ãgPéñgHR×¾lC¸s©»—_à÷›?þcäÐín-]ú§wñåÄt§íjkSƒë¯Ì;ý; ¾’œºT2/¿j+_f‹ýã‹CEJ”IËÂ{’ŽùOŸ‡Mnº_,9-.Øn³­skœ¿5ÈÙp5kUƸ0ǯ’¦þÉ s=[,§5‹³« }Bgî`å³×,5°½Î¯÷¼0ÞF"M2b¹9vß¹¨WÜ(Rä,—ùc?…åCrË×Û¡[!†,‚½à?_oâ?›:ˤ…çgÃ(YãQ–wuñn¬F¾À&(Ù q|(—Ál°%U 3Ï•`’Þ}Þ E—.Ì’nNf¥Hk}dk¶ ÃÓÔBÓl÷b^Ì ô›ó3pò›…59É&r j"ÆAÉ"溹˜„gHЩÜ׋§¶uì!1é?ûéy+SêNæ2DuGîñ÷_Í !¾óyÜmìNI”LŠñ`ù˜%9p8·Ø’è=š¨cÀ©·Ñgw×Ï ´OŽȪx¥n"HïDèè‰]µºhöÈÇf /ÌkdÕ¯KS¦N!€…·ÂIíŒû‹ý¯" ‘Ê 2!vM–ÝWænªÌ ¶S› Ö)©&îY}©‘Ă;YuŽcaΉ„²Ds×jN6_¦(_V{:ÁÌ­¹€þ¾žBï~ðŸèÆnüÄs’ÄèðÙ”z©˜ˆìÄúû޶nÜQU ¶0G»cO­™ÜQÍËæ÷éîqÛxkÔ£iê#“§"·ÓC,‰ÙâJê ÐC½e>Tgg¦§,'ÅÞ¼‰sVjáIu¤YZØyÒ=¶-í0m’¸´p Ëk:3Û·¥^šciªåT&üSµ½$ˆIÔŽ6#”WË0êØWë­Ìe;´ÈŒ*àÑ}Ø@t îO„ éíÑG6 ´ëüÆg/ k(û0c)¹–ú¥ûQK‚DãÃÂvxO΃g*]¼z6}N=žŸóîæ«EØðð0VùG-¾t~qjm\„ÕªžUÀ–`5;oîL‹iòÅ~A°".6z»î úݵx‚äIéÖ·ì¤s”Ðû•-S¾HHgø±É”<êÊŽJÇÃpZ;v¨ÔÜ÷‹¾˜y/…î”ó‡al—ÄÛá’ûÉÀ“îð¼fãuc'½4çŽ L¹|Q;”¼;%s£½þºííÌÆØ±×|§gÓÌþÙËþ-Üj”ýn¦4ËÔdÊpi­·höfä¬éûšoXBï?pÍcn_ÚáðÂŒº £<7“)1¼+ÚkRÀÆáÚ û}¹ø ¶üYØÈ7ŸÜÄÊ7!³0Ê/¹B<=”?¦ˆknLn1z ?Á+ÏœrÃéxÆ@ÒìqóJn™€*ýÀO­GÁH¦£­EhUÞГĦËú"Ìö|Ø/(9†¢y²ùkQ\mÏqhÙS_è—òœþÌE§vyª^ qÀÖ/tZ_¨ÖÛO,²þgú@ÆÂùü¸-'Ñ<Ù‰(Mý²«—/szûÇIÎ|U!£lôܺöúè5Ïë¼òis3 ;n!V7ª–vÃ8Dš%ïùÁÅy³Õ~'Ž˜â"Òäþì"HvgBT¼(Yx6—è*‹)zh:[„B{†m¶í]éàpŽþ„°·äŽÔKèÁqÉõŠH–X°òíïïÅ‘¾_§(§•s[¥B[,VzùÜc¥×û…oÁ0ˆÔ¯ÐB-t7¸goÙb¯9âúŒÓß“ò?çPд½iKtõþeÓŽ`ÁÑ`­çºJЋ»þb$_­lsã“–!ÿ¹8¥°L%&«9IäŒù1Ვoó¼.¾L_éÛhI1것¼‰ªÊî‘&ñ|a[¶s‚{k²u²z}—¬ƒ+SÎ_Ö4mZx{iaÁ˽‰»•µ‡óÈ\ŠÍò”‡xåžI  ßaLÙ“¢ûÓ‘æêA¾ã1×zvãê´ºUl¸øfœ|¿Td=;3}¶çÈ=wµ>Eáh\,Þ†Q˜·ØÎ•“ÕÝ'ÜùâzЬ/ífuGíÝDíâµÕzL¼x?¶8?®E-ÑJ±‘· iÌà)Y+Tßàì-o!g- ñƒ’Ûo°vÁÉö­_ù¶ÉÛ·gþ¯ëaë\˜:+Ä*s—Èmërݶ 6ñxYriV0³u- ‡iþÉ/ìY¼~Ϭ7º½¾[Açæx£’s×ã¹ i)H±Ë ­™M;ØZ NŸˆ·-DyaÚ`èÛôT¸m·]É$°óT8)ëâÉÑ¿_]6B÷NYB*ÆÊÏ•H·[ŒRÌF­™:£‘¢óß=·ËD­~ ¶b;¤EP*›ˆCctO\yÍ,¯'( :ÁóüêC~%7§3fJ+ú‘ž<´¯¦-Ë´6#KNjÁÉS#VsLðŒ—³uí½Èv/u”Ý…; “®!½¶7Ë·›pˆÃ½€Çµ|%ÃÉ0b…p fÎh[é&‡âÍC]ÖØ+2CtYïJO]’f…ž Uµ9kñªxõ­¥:|˜Ù§É,2.Â4'ôv/ùÀÓ•É´©6Ã4vîß0½-‘øª¿šéqœ—ú‚ÂÜú•m%3fÐÞ ©\ £Œo›t*¢šW¶£MÂõž…ƒæ/~Û§9ªÝ:qÔk\­™3w.usC89¿&zýªÛtýt%Œy”»~_—c^m»(ÚóBÛ±±]à‚ò}÷Ö ™£gné ÏmO[¡àãÌ—ÉŽe!ù±Û&ìFüE!îLïƒ5[w̱°mn£2#{‡¹Ø˜OáC¸Øïn¯ Á±®zÕ#‘ò‰Ýù*õôêô`ûdÄxË)8j£k§ec¡¶vYg†Á‘d÷ýK‡z¤«™An‘-™üí3íxY ’§ue™=§žîqæ[º9e¾vC—lo˜PñNÝ*·˜B'³{ß6ˆQ×·ô/Ø*0›öãkö‡~Œ||«¾TEoló³<¶£ÏHïÙ߬ f¦y$îÍ^V,Ïx¡H=ÙûÆ¢¾p¼‡W™½fsú1ÏèT%s à ¥"ˆê }rÚ%‡œ°ñ1u<"µÊÉ ±šG"ýâDuU&@̲?À@;"}UÆO]»Fá÷®{]¢Tåi1¹Ng ‚l½R7ëtkë„íŠý`t§}žrþâ5®:ež~² ì !Å©U‰pW„Sñ…-ÜÛs^·e'ÏAöFS€¶3>úWó#ßÖ­œaôN[z^†Õy¾€>a}9Z~¸¯ ”fÙŒ®‚"EWb+4‚|ºùŽ0¡-õM8„êã]{LÙjÊnÄ[MZ²kz³ka䈷¼Ê&¹ (¼*åx ÷ÌAˆêBokÀ{‚Œ¶·qš">¯¬¾žB¡¨;¸;ˆî^2A¤& Ô²ºŸx%çÏ`wb}ú××Ï àŽšïë1¸Sêu{ øÝÉ&ÕAOh0)ãkšüÏô0’ç!Eë<90 D¹Óºlš…ã¨X?f}¼þÃÒ4_à’²óhoÓ#8üë´™p®Ú§µJøÆë-óŒšÅ¡ç|«v8Œ€4ƒ›ádøNaŒŽ~Ù¾ ƒ)®ç{ÕßÅýÉ{y&ui»¿ÏŽ,ìðOÕŽ¡oÉÃæ2ýÎCnÒÑ/2*ÚÕÏluÙ.è®z–Ý+Ûº¹¼ho.Îχ©±+'—dyV_߬¿åz§ÖÒʰ04 ˆØq8 ÊÑ:96–HL#XKrGZÉÅ7akih 16ÐÊDmL(y«Æ&®elU«ÍSw†qQ/¬6ØvR¡éØU†!<ƒ?ÍñÄ¢DjN¦“à‡6ß©—[Ò*}Ñæ¨Q9Ô| F)Œ…ZÚ9}sÃ}êŽÁèc.ªÁ?˜õ²™˜A…=áÐVO^ÊSR¿÷0â‹…:¤Kù—ƒfˆ(iÛzH‚=Mž"ЫÏÞÆò:5Çþ`“²Y°¯¤ØÇàIH:eëD•IJqùéN·_;QñfÙ É„ì-3Î`ÓEÜ! toØSÑô™W…#;ÿ@@¬”w^NG,U^ çå½üE4à w>(ƒCò  Í@¥²;Še Û迚‹ÿ@h~qìmx–Fâˇk‡uKð•ôeÉŸ3rƒ©ð]ÎdÍ-Þ’ÚîâˆìQl¶±™3c3ÏÍ\:›y¾º¡yZds²—çÑ<Ãâ¼ÈSþ¡ÌV·¼úC–Y‚?äù,ý§yUóxd8ÏÿÃH]ìÁYïÍDq`=ì}¬¨¢èöè)øS*æÀÛZ棗øi×¼ Ö"ß×w•qònìÆ'èã!±8²4¸ßƒcÊw²Ü¹ ÖC@Ü"HFe—äñÈØk_[ìjI®Y­˜Tq+Û¼‚¿nå<@Â<¼!®ÈŠqe‡¯a¶ý@Ķ<Š+«Ÿr”>°bðVxjâ4rIeÕ(oN[tƒ¯ˆùöÕÄa‡u›Ï×ïË*âµ ¿MË>¶€¡ŒÖÃÖqC<†/õ%4„Xv€…½¢8Dº¼gé;hšJA>ŽOÆæïÐWg~î¢/BERI¥PŠ!ƒú|ßW‘yõ ܹ«Š×Rw§/ÂÖwz†¿—ƒu*tɱÏ"=¬ÎýÖ²5{Ba”¡¹J<óŠýÛÊ„GĦ–PhÓ¡agI¶³žg“O™Áà`çñ"ÃØaåÂÓ?¶®ôÔôå|/\á›8˜‚!bõ™´½Ùr¿qrQ2¤êñs{.~ÅÐì$q€ÓUð9N£ð”f͸uÌУ‰ ËÖ²öË~ߪ°48ÕËŠÞæõUIu±4uvj'eŠÊJµÙ»ØjH·‹Ï›øàê­y|4ÂÐFÛ$Àbñ–ûY¦ÝÍôÊ¥=aâÊ""F“lÆI1xª¯æ:„…¼pë“w©[T."¼ì€½Âvç6d_…gèôHŒ‡ Vªx¼P¢ÚëSñ]8É´1œƒ9+$ióGÕ+;BFWž•„gÍý÷¾Bœ@ ({ŸÙ1ÊÙݺÄo>·µfU¸²wϪY7‡È¹óMuß³ †zÃTÑ5ek™Q«‚È„¿žþšVg-ÔcóM×gY!çÃÍÍ7T1O-$*Ô‰Am öT鳋&K²Ñ GTªæ­!šC†šT¹Fµ ³ã4)—¾a3†>¨g䢲B<=“ó ÝvCñ~ò $¤72-¬B6ô@Á0r ¢GГ}Aùe ˜iâQ™¾àÁ7ÏOlÕ‚Ò>*™m¡ª6 Õ ûõ¡]\Õ»QŽ $ã.O›ñ%±€9{FAá”Qš!ÄB@ØQ³Ý±™6«0fæ*¶MFiží!h$ž÷—ìÍÚ\_Àüv‚ÈâHht²<¤vô¨!/Z)Êë' ‹ãôE†­ØdKó@V¡Á{úÀ3µ´—ÍùÉDYâmEÊØ¶ ,®ü ½Í¢ý8¥y,ìÍxoï¤2N–ú)û$ ž,sËzL¡ý” “hþ­.ø°Gjt^¿,è‹Q(éÀËÃæ½dÎFU<©·Ñy8?·ƒ0έLéÀ *>QE+]þp6cüø´ÃkïÒQ rs!œ¦{?®äj“=tß‚hº µùK˜ôOqMq“®…'þRY•+YÚ0ÊåwØD'0NÑBwÃ^Ý´øÅŠ=Çå[¼)tÿT+ÕÉ“ùúä”r™²9'Ù߀³2„xïoþº2 ‹ñµ¥jóÑ#a²s¬9K÷|ˆ?Âëx¤ û!ôaCAFÚ2R\Ú%‚‘ßmÇðJÒ‹£ ‡®»ŸŸ•¨´kmT‘mP¶mÀ÷#\ùv¿œr«˜Å™Ë-½ÿqÞ˜N.+ŠwAz?…jcÚufAÛê²#ö ®5ÐÔÂH ¦TJ¹-uåÉá} ã(0†žñk˃Só…6ø ¶iWÞXîß ã &ò¾q:jD•LŒÚåÁ=ÒÕjkt-˜©ÃÃþÇaµ]rP`°œÍ€¹Nçÿ€C–mœ>cdØ™éüÁYÅ;­>*@21[§ ‹´ í|uŸàjvq²|`>Þ’ê¼V]š/Ób׳æ3¼HݺÛGäàÃZV—E ÏG{•8=V£oL¬F°´UêNËI“É>­l™ÙîéÈ™þ¦_ì¯yÁëÇa¬E–hì’Ž—üÑF¬Ê$, 6]Ÿ,:%u©2§¾U‡.™°í‚òš¸À,Ó‡dª;ÌP>£ìN‚~”F²M‹,¢¨:e›eÂo"ÿwž•w?f•º}Wo ¾×ªÂ¶+Vf{¬‡”{ÂPk R“)ÇÏe4y™ÛjG0x~ž8Ž1sú†Ÿ¸¡cʉ%VŸ~´»úþ‰[›€øœðáÚQytžµb¹c %3Ð\âÙÉjý¯`ÝDWô%ØXqªœ3àü?ivÓ,‰_°Ïj¢fº¦@Ó¢éŠ Ÿ³–Àä¶È ±pg(ømû™WçmàÎQÚn†¸Eß…39§ÃQäƒÑþñ‹;g†×´ÆO£æb0Éëƒ_êÜÎí«Ï¿iÏWÛ#¼+Ñ ñ š¾RÔÎñNÄ»sÄf(ØÓÆ6®Ë¦º|OÞµKš¢*ì›(%‰8"îëØÜ™#9 ˆ 3|œ‘®ÚF_Åþ¿AÜaT Ø™å”gÛð æ÷q5;)¨°ëÎ) zÞlË‚Ø-u¶"éÌôuýœ9»Ü¼W¿7ÃS§(&ÕÑ}ßsq&º£gmq^XAÍ;З¹ Ï/δÍM›‘cAßTرԶÒH£ÌTS&¸7â¬ò¹Èéhl°&‡ ØŒO çì«õQ‰Åþ&Ò™*FB8ˆÖéØ:¬–cË„R¦w^Ù"ÊôJ@K»ÇþÞîƒ3…ˆ§ÖÄ^4Þ’5; ,Âþ£[‹ïÃØüÓO¾Uׄ­ÅÑ;aš3Ž4¡Ç+øÚå¿×YeÂAÈ•ÓÜÄdÉ2YMÿûô£:¾ôQ¹I7¦MO¶ñ™¨/”lT cubK6íæ%0½çÉl^êŽ-xL‡ì­r´"ñÜÆnÿ2”f¸€Qr©êJtBž˜O›ìxϹHeФØé×Ó ‘,”íUàØ%c†‰—©^¯…±‘Jí¯ô .ú‰ah”~k}#Û¾øŒµþ[éL[áñµi™ð©;«»L»ôÂrã¹,죨>i5Ø›Š·@ð-O ÄÈO:ùÏuYvPǧÅmq#Ç<…ÂȨFíç`Â-Tv´‰Šg ë ºøUù¹ÍÒQš%«ÖÄ<~“ÛáV–4U}nÒ[DØ/­ ÙI [ÇCq”7>F½sdyw´ÁœK]–¦šz@L‘'ò“O‘ð\n¥,Œšk%½‹÷$(Ä+M‘Úl‰Rí†]¥ý$˜äxF÷:ŒçVbbèrÝîvuÍF1–îŒÒPÐ’g©B¤S®WDOû;QP]Wë\g¯ Ï_9oŽsŒ8ÄnÐmhÒäµòIÔ¥‡ÃçqÒ\Ö7œÆAWnL‹d"=,gÌìίyÇÍÖ„mªˆ{àè'èÆ Yâh›xŠ»™0gòÌe´ã¼Èe Po¬SE&|þ®š2X ÏQì£*Èqmý _Ôí Ó”øþfî%Ïÿ FO¡‚8ˆPðôÓuîæ:Gùׂ( í³îD¾P] ÷aµ6ÁT?åítGlbz&Eâ¦V Îa‚гz¤H×ô¤OYûy.׳m7¯;‹([ì°ç˜xºŸx7§´¤@çXs£#J¯É‹tDÞÖÕêÐÕ+Þk)dÆ2CÃÅâ¹6üuÕ_þ,, éÆRž*k¶FÜ}}¼xvy”]ê1•¿œÇ¸GÎF̼a 2j¹Í¿)Àï/í´y}ϦÐ3¢Ù f *Ø#ψÖò3¿âbïׯ^ #Û¬ËöŠ’Ît˜AÄ·ò«îPØÉ?!Ù â×xL°ðÞÿˆöI¶ïþox¬´Á™þ0«s¥ElC‹˜›™qÇÁV.8i÷y‚’fx'çÚMR|éÑå°j”é)6;ƽµŠ¬÷ó(ü™Ÿ@ýØ"›ŸÐÔm£«×ü¾<Œ¦«S¶ïn˜Ø8I˜è™óCÓÀLΓNš¯;À½P½'z{ÑóÎg\:庄e GÆÌ\22Ó‹¬‹~lÖf)G×qêÇ|ttaCΈæ³l·c°ýä™õaêé Ñ‘^ž§×—³´£ãäýRù¨zZä•Â6î„\6ÙÁþ’¿º©Ûc'‡ìtÉGñŽé–( ÁϹi¹k/† –|[«÷f¶V%ËQè .¨%ŒÅ›€õÞà’ÿ ÛØºZ`Ù¶?t €(LT\AÄÎ95…°ézê•̦ëËzMøņg€ŽSx:ñv~tÄÙyÏ%¤Æj¹> Š5Aš.ì²=¶¡Ýï׳-½~—¬™ÖÓ‚Auo#Klô%§3š®¦9e?m ˆµðÅI¤&`Âü UHxøÕtú(–·\X߇qÈs3ÿ>]ÙCÖàÈ{(ç ˆ‹Û57>jŠ Ö…ÓX“’£¯5„.J3EK´‰E˜xþíçgzâß² óî¶¥#C½~C¯ $½ØÙL‘%£…Ìw/|=¯×®íÍÊÊTì;Ìÿ˜èÇ šR"·Qªºié;hv†0’=ZSÜ 7po|-) 4Ïy;`ãRÜi¶)V:J÷=ε,Bév;;á.ðº+H‚p׳±¯tW®ÍÎȲ½6ú‹  yÞmñ3ˆZCwòZŠÇ…oòݵ0U)ãZ\]ÿªã5œ]™‚léù6Öz¯:¼¿±†þ–k¼Ãv*=›_S­>†‚q*§ÈH6h$I±r‹°Õ,:ÆnƒDùâÉ-«+\ü¦3_Û{oaF²7\¼GS¤Ö 0(9Ë.]S,µÊÏ…Q3¬í¯ãwß¹ø|N5„KCñÊN–’M#sëÇCŽÅî`i}¼%L=›ÔÝ a)÷à²þµš6:ï4ŦôÌF÷jÿâG·0"ªZÙmF¤ˆPUh 4é\6ücß¿¬~>D½ýí&&¢ÆèsÌÍm=¶{s‘jòÜ{¡ t˜çDÏ‘ŸyÝA}ÈÆ6î«Ê  ƒ_4×— Ä ™‘ÉûÒ 7Ú±ö䛿8˾Zå uȰôQï¦\¶…¥ØŠufJ¢ÜÜFµÃžHX¯1>á‚k¶ÆÁ­ÜsÌeÓŒ5÷èmÐtz\q]  Ï6cñô€m —.0b…sp¢æ;Ãè¹øBdìqbÑš*zfÐx#™ÿs*„³å¶µJj3HÊ„]>K…|c©ÊnQ³D#_‰f«ÓѱÊþm¼=‰ÆÝÛ0¶‰ ‚±f±å“ßÏe¡˜>Í6TA’Ø‹©WV¹€òÈNèÌÐaØ$ È2d±öõØØI>P]íÖQgàøµ±ÛH=¤hô<ÿ™ì†'× ¼9¦fŒðÁ–N'BG 9‚ª‘Z²©jïdèQÙtí™!¹B PÛžö±ÍµÂÎ1$S×Cïófh®<ÇQr2JöÌÌY‘dÃ¥‘)UdŽÀ‚Xï¤á *ÁN®ŽNlŒá%@nk› ã¨"F­ç»­rÐW$ç U¢lí¹‰iE‚t§—óÏÌÖyò¥zÙrÿ=c¡!kaírJI¤7½ñ~*Ö³Ÿ²}4ymކ€5äœ mú`÷ÚP8¬î½Ú:#µµ,Hm§#µ5û×¥2.fÉ?±Us=Eeÿã9Ø›Òùƒ…5ÉsO‘f†‡šÿv7°TUP ÅX®^õoóŵéí¶,¿ZÑ^Õ\³‹§Taˆq^%Î|yWGœ m 2£<ÆŸ/…±+ÀUÛ¼ÓpP…Ÿ%Ç(²DÍuæiVʃӕîV»b߇Ñ1@J!OekXÔŸcmŒ3©øN‡΀aŠ"öÉjžf£ÃÌ• 9B3Ãxª¦´ãó*€“ŠFý »æ!äÞûhÊàc$ÎÈjYº(Ð܃jÍ è×(=SUf&œˆ!£héüYq€%ÄÁK»ÎO™šW°y*Æâ0SXçM&|ë<Ú(¾a¡9„'ó;ß¿_¯´ #‚nŸ†qØ ›'€ïµÀ‘ز?_<ÀçZÿ¤Ïš«Ÿ¡)ÙB£8‚°ƒ¢ô<˜Ãw ð)4@ÞRßE“ÕK’þðmëšî¹||mqÖ^î\V=nhA1á$ž«K?ê¿ë|pqu/eÉ1”ëq"™U"ûÃÿñå!{hÖÕ,oŽ&müUQéëäÕs„ÎAÕHí½¢‚ lÅ%Â/Zm]gÇif©miSÇY:«gAÅG‰²W1ÛŒ,pj ‚Õö÷ev7oÐÖò«:²­*Àùcn³e+ïª5Ú¼ –:èõ®ÈNâØ>­\žÑ ?ÿyÛø-¿½é' 'ª:‰œËŽN"˜˜Ù™G€¶±í÷v½7™ÈÜ,ŒÂ·°Ãõ¶–ðAß>ö!ç÷¨òÊBiÆ11Þ^NG»†2åîÞÍ—ñœÇ80ÊvÚÌŽNÖpU·¦Ïü뢡”d*¨ M_ÂÕ8¦1¤ÑãçnÑ1ºg8¥oe­Û‰ºØP4üâÃ÷àv(¸“jKEy?”#êîëÎDoU‡â÷alöŒç÷ø;¨øŠ†Èß•£ÓWÛ:…^®cÊœãÜò\í8çÑ÷-Ëö ùlï×ÇàtªqØ#œ¶}j λlAÇ õW™°hçñ º×§ü¤d…bnT@m(£ZÉ ƒÅM'mDfÙ³0v-דáBdÎ ­!£k˜]g0k¦cÀÿSiØu‡Fv=foVñ‡ª‘þÉ=v¦×í´Cäàe,Φ;­"÷Ð'’9HÂH„èç§Ã8Í©íÎ%ÌÕGºž<;9]/Ëm(øÜ2‹#ý¶Cåˆ;òù6} Æi¾†±=IìugE×´rª&¢·Œ=®nÒZ³«=ê%’h9áIµ¥Î‡ÓªƒÕÑ'?7öc¾³~Ú+QÎÂÚáb:=§0YÊ«F7ö08R“XýɉÕèðQK\ qd«˜ï\Ÿª;D\££z^çk®m+t²0dpÌô äÍ÷ª!ÅW„±C¾(,bՙ܃ô¿ÃH˜oó^ñÔêÎùó…—”ìúD¥Jµ6Y…rw^DµÕ‰ó(™¬§ÁnÑb%¶+s¾c˜#‹‡ºÂã>Ë“ãaÛTÉ­{úôh*¨™µ£ú¶sp‹‘ïöòžï±º|î¹âS:6œ63#©„M¥¶XLÌ®Ù?ÇÊ`m»¿·eñ³È§W§öBÜOSª> £Žy™ÅÅé!†xB,{½KÅ=WdŠ˜œÓÅE¿#xGÔ>ø\ÑÉãrkÚÙëµdî~A¬œ‹ Q%ûÉCH.w!{—^ñË.üšªŽg4ÞÞúmí]¨œ!¸à9÷Ûò¯>s³È¿qõÙɰË.Üÿn&reÙô{Ýüü´´TǨ%QÔͨ I–S¼mù‰Ñh9‹ú+‰Â ƒf™0K÷¥ Ï}fkç×”ÝIVòƒz$̽ð]C]óLÆ6Ê3c%âßë颦éNkaê{{&ƒUDÓ7õñ’¶a-Ù©f4xbÛY±H§QMLï®0y‹C—§è©É„‘ë5Ô·iê[¶âÞ}ÍäepP§8<ªøSû➟)üúŽ)Hl»×f#ÈŒ¿pÓÞ Çž}ùÕ£ðs¿yõ ZhžÜŸ»J¡:Ð/¦å1# #* Ǿ™…û¶˜£†6rN£0ö¹Ñên;eÌõbÏHn| £âTÑ?™V›ÇÛRœµQÖPà+¹§µæ½ÀS+ =ºF0#Íz[ý»K§àpˆ¶I!÷õ¦‡®“ëœð¹†Ôp™]ÝÅ«öXžùZSްVMÕ´ ÑU}ô-î=J–†qÒ'":ê]y,?û:]ÖA´²Sѧž…QÝ$î>oû4¸«NÁøˆÕ9dËœùÅJ`âütØz5UÍX×ȧëjNÉ›k¶ëóZ[/ŒJ_Èìp”.]œªtÌ"ŠéÓúy¹X؉ÃáðaC«ÌiŸ_t4û²`otªÍôÛL¬çôú þpöfÛrÕ¬NÇL{¿P˜ÁßïÁKìÈ÷_úñ9¨'Ózáí³U>[Üúêïz=ò·|̆ú,vž™ÝÒùTžÃ:‰¢ó¨SeØý{îO­J„¨Ep¶ïéù»éÖvU·,f°põÍÝ0Í%¸x”åãÓQŒ“œGXù²:g‘Ÿê–ÙÞ:'çgÑžAÓIñêEg´$¥Œ››FÆ>òÇ´ˆ6‹æqe›iµz 9Øn\ËgÇV«*Ûš¢Z±Ÿ£ÄþËÖCY ME¯ª‰tô`—§!X­s°rùX˜«oùQ?ömUX¬Òsæµóž2FN~†w=Z¥Æ6®-ñ +F•+î7ÃDËËUzå·€¸PV¡i{Ø9]œÜö$$ò$köâŸ?ª¸+Kܪ"Y4ÕÙ=ûýfnO«\©$|(rvæì²Ónüe+nµä¬ºäÅ}sO1ȼ¨~y6+i…w]vf-3}ï.ªÝﯬQ³Få:^ît»t—]tÏlIÍT2^ó ¶»æŸa`EÝVϰ3NȤÏëÇ[‰LãE6N¡wøïöª‘`Â*}$}_ܳ‹îÛÙeS™MŸfTw}]” |@Üï˱=°aÊË~Пà+Š3ìT{ÄxVÏ8 ¢Â‡gêËãÞgi4láÈ@Ì)Ï;ÀGé#ç®° ÜmÞöxe[²æ»ÞÊL¿¹Ÿ³{õkX¡£a¬”‡ JÊòÜ ›#Ce–&U*AŽfº¬uâh]uï@LÞñw™n¼ìÂö‹n‡‚!Îyµƒz›°­ÚŒ±ÔëxJw†hu#-ùG1àgÿ"ÎÕ|Q½èK£+ôš?ÙgÞeœ¯"¸‹!äÈuáG•­iÜØ3X:×jˆz+†Þ3ºÿR˜žý‡Âôÿ­ [—?„òÉue[T¤ã§ÿËÝm› ›G±¦çcaºø×¥2ËfÅ?¦Ë ;Ó$WÅÇç8#Ï¡›ÊGãî0‹4‚ G›?á‡Þ]^¿y~ ŒYöêû_.Üe Þ€=ÛjmYƒîa]ÞÀH åˆ8*Í8€0·µ·’â…ômõU@8ÿíŒÃ8úpÂ%Ÿ8Á, “Ú-èòž„ð½²Ü¥Ù?ÐbÊàO Š˜Õ3¾ ÙEùFw¤bNÁ9·×à«ÊY¤éc]‰^²Àٟ؇‰fÝ\ºìk€Â,ñFµý8ŒD½¢F-1 ±(û:n²^vÚ™ï#bIt"éªuWeÎ6Ûêá1ªbvTÝxÕñ›ùÂÝÉÌ×°¹¶Î/OàyƒV-»ÚgWÇ=TfM…Ä×îÃ=»¦O‘ÑÏ«»÷ÃÈÝo ‹Å"ROå̶ú£B Ž´¸|ú äwÝñ¾îFàè3 (Ò€Žî>‹NÏñº˜²Léòãs÷ p³9g¨·-àEª³¨°1ŽÙ"}cfÑ &BÉmû¿Í‡HŸ-,†Z™<Ò+;2ø¨ç”`Æ>_†yÔòL-DJ6‘ñÅÍ—J ÊúCË‹Þ`PG‹W˜ /ï7îŽßBX°?FpIŽý}Îôsa!¡¢tyÆ¢‹0ŽØïf ˆ1†¡Æ*C9ÈdC³Áfqä/øl–ͳŠÊcw²7'1 E%Þuºszk««Ö‚dÇ—»®*¶kj†Ú´_#¿¸/ôH(…p›jêÏ«S²©J¼”möU/îk3àn³ðç%JèV Ÿ,-•èl¸ÕgD5§*ó/ulìüò”7Ý!—é/U·Ó»&ï#yüû Õ‰±†ì-JÄlrͨÃÃYc”ufå“1ûs<—J!@0ö_Ì–XCËXÊ`ã>·é«„é@ƒANÝ•yaii¡‡‹o³{¯=WfÑLüV·AR5M⮯²Üüºv Å­…ÿÔd™Ήzo)5d )q¶Ä ?Pê”ðÓ¼×/¡* ÈPŒŠy¢uÜ-£L>ŠÆQMa”Ž7Ô Ýb¯¶ò,uó—×|ºÆi"õü7æ¾ ƒ¬« {ÃÈjŒgG$^9^Ëg!‰ÏRµRÀéFh­R6MN;Ü&òˆðUzòõº,B vßJ¶VRlR%ÒÔfuX»£P/'±nä÷Êr§£ Ðë²¾Àޤ7oì9h†ÓÔçíÆ•µî®Ì‡¬ ‡Ó¨p~Áرön /6Ç´7ÿ”nÖ˰1¨Z6À)Œœ „ß™´ù€ê0[M«‹OýiâWåŽÛòšé7ì;F’á·]Ó‹%·q^½¿F‚FY~#%¸FDFõ#NŠ'èOÖM^¤Wa(—öû¾qÖAÓ‚n›ÅѾ5Ž„cËõ%jÑík>öÕ1ÁìeŠ×ÜbZ}¹m·¶í½møø×/ö÷-¿ÿýôl¸i¶eCf‰T‰ÞOÏ};JYÖÙ'Ç…>¹›ˆ å°wB-­çáæÖ±u$ø­ýÅo±Ä€Ⱦã§“íE[€ó?º~—]d› ¯Tæ—Míy) LݱÞÑbi‡È.XŸzîð÷N5‹ýçeDù¦Ô·)gq2î 7L¿ðtÛøD’2qÇœÉ.Ò¬cJ><Û¾î‘lk·€þ¿Yéúßö; )ºX‰&9ƒNàÉì³ý›œ-ÂÒË"ÓÈH yÙ­`zßÑÙÆÌ¢Ú6~˜†‰þÛÙè‹Åk/þè‰Ì§Ã™ýlÌ%èšÉÆP9u‚# ¶`V_pÏ[APÙi¹º¬ ²}þ2Œ8Ì»Ïôvͦ8C¾H¥‡ ‡‰ ÏwƒFx]l°ØxæZð¶X3s"áü§A½Ql5tZ;Æ!G¬r“ aÌ;Q9„µl""›!Û+bÑîçÔº³´Wž€LÞóY/tgyóÀ8£ü9w{W9|‰Ðª¹µà¸<ª;Æ7Ž*åüïVÐÞh:-ý=]PJ`lÃØlLF=Æ8¿:eDqÇš†jÀÙ—'̃PüìüRò ªKP…ÏÁï#µµÉ™ S¿Tö™Žà¨ý6mŽ.þ l!šóÖÞ¾åꬵ$“Ü{âæ 9(è¼yjP2‘À»´ Ãæ»løÈÝ*]õH/̾ù‹ÑqäPŽLŽO·×v{iEgº€ÞŸsFcµºÙÐÅæ¸øEDÐJí@QtZ œÇn¦ü”²ØœìTÄ“e«eÓÒ Ùwk£‰ãý¸€ÝV¡ Öq˜I©ü<Ħ±!3Y1+Çä*9a[{½å~©!ؾûú­þÄ{ D¶jƒ—Ïè7±O({Èž ã=^7k-@Wöbrõ_ju2Šo­efÿï³j%~x!„‹aRr€yvv›iÍÂF)u1¶Þ@„¶Ë7g¶³A0’Ï>ñö7Wò>1 ¹$ Ï¿Uæ`8§Õ¦æ7–BuùœB´3Ž(s¤—’-ÖvªpÁæŸ!Œ ¬…D êið5§·ÂØ>UÊç³`c˜ 1c|gÞµ¶]³¸og±hªŸg§3KÅÉUÈݯ‚ÍD¤†rêuØ:»Š_^Ø?­BOà©^I*£MQuwE ©¥™Ø¿æh¥4‰:‡Rn·ñÌE´¨ì¦8Æ7­ɥɾ2؞ݮöØÖ0D ç.¶aÖC–š„tޱán’£·æ_+sz…½ÓØð;¤ÈtŽÉµÌ $Stên³¢F‚žNéÖ‘Y3Z,äÁ3™â’¥„êõËðoÍä¦ç³Q¹e1L ’AÊÌlñaWGð×fa|+å‰ðHâûlfÂXÇâjâš¶RvÀú÷~ÍóßÁøOE~[¨)V[ü¢SöþˆòÕê¼¶Îö޶ƨ°SØâä·H`DQ‘ãmŽÌJ{ºžÀæÀ®,ä±ññ¿+jµ†d’ŒÄžTë‘Û¯L'«Ü@0‹(žq6ÿ54X^Öˆr‰naZ¯ís¢dI ú/oü†BzS€4#ÖäOuâ…/ÊŽSÄ·Y4šÛGoX|dæ±E´Q³œ[.Îè·Ø]_Ôaíç–†ä‰î‰âÐÝIYÄôÜå¥àòÔT<ýðêRLj‹@ž† ÑnÁG×—æ?9o¸æmÕÂ…â{?nâ£ÑŸi’û‘½LæÊäwt·°çëãn†è²*}bÓÞÑ‚‘Úi/âbPíÛvc7»·´ãË&5NãÊí}—ê©]¥áÁÒ/¦ýÐvçj}“ž‡¼×?^ ŸÞ†h6ü)s,ÿ¼úgeýGeŸÿNi ½Ì°·\GªŠK +"ݱ¯ÖÃH‘i#ÑÜâÙò¤}•÷¼3¨±º‚“‚áUèÖ×Ð#÷\…\L¡Ûd¹{Ëæ Ät:ñ Pe¨g¨Dx)u6ÈÈ(¨ÁDi͹j«]›þÒF‡íµ¬üé ñ4ÕÜSÒ>zê`'ñ~¾cÃⱇÙÏðÝ…Cþ¿M!ÇøB|Îyb'Áòî.KbE¢‰PHïÿQöž[n3ɲèÿý²-/Á ×å½÷%+ß’Z-ožý2"#ž™3æÞµö=ó‰h(T¥‰ŒŒdóßòÅzðÉÑ\Å-ý}¯*u,oÆ~·d9X l)?ƒFIW'…‰¦œS\›Ï`žMÑÕ#\ñ’œl ¼F!þe(QeQufÆ*âÀsì}b;g ­ìdÛ˜êÆ©‚åã[€wšê±ÁÕ(ýe'í’\´Ï*Ķüs2MjËa›þ&f¥ð'jÝeKÎ_ï-gµ ¤î­‡¯|§{0AªÌ=Ùr}vYœÎ¡)KMhNrI-ráO*a¶íÅ‘T‘„1‹Ûj«=µ´ç#z@ví';ƒAæ®Á,e+лѶ]•ê¯i0M¹½±JpÑŒLΪ8ÆÃ¦P.WM.R@¾²Í·`Ó ©ÁWSü‘ŠŸs9ÆSü’è€èî~úð.¿â56üí5BD89†®9(¦ÃظÄխǪ3îst¸CŒ·ðŸ"ç4uφÑRª+¶ @;ÎsÅq/<ÎH}kï«Ë«{æ ꨺þŒ?qË¢ ¾÷šýeµç3?:$ðÀÊ<ÃM6 6›:hsÙÖ= ÖÞ^‘ÀôUþ¶³ÓÈ™”tÄ‘r€‹íš@Ì0QÕI«Ïï¾U:<®ãškã"ŽaPjmIb¹­ÖeZùs§J$H¤FD#‘W§+ËT€Ì»y,¢?Úé|5ëó0ë•ÞÆ+GXÕ,„§Õ«GJ?pAúÇÔÊ0€Õg|æãA|‘Â0Vf :«‡»±oÁ§ná2„IÄv“!Œ<…-¯9hj•/cû]®Þé<ÃF¶øýZHiä«cò›™¼.[?cßêbýÅQ¸K“P•CâÁuû1˜'ëfPÇí§ªG°Ò¾õqoÛGØv¯;Ï>Žø 8ICü–*RžBEÎÄ.b9öSq-˜çWvÖ".Å¿ÍÉ]ÕâzGN'çqºayH–Q5zJOx}`+à j…îÿÒ°³  óåf/$µûZ-z-[†c~OnüóØòl<çZwý'¶ÒV’?oy̨Q§ì‹W-+Xñ¹(X&Óĺ .N BY(Í>ÜÖ§Äa—0L¥³f{y ðüìª_ðJ8xt"×7p)µ2ÜQ¾)é°›l6^k=Ùa¢L[þ†ì‘@á¢]G†ªøà^ß…Ë mJ-Õ4¦OìE­.ûò~JàŠìGÒÛÐ!ì18©ð:5Ž+ä0\H²Èå¨c±]ŒI»ûœJÌÃZà XÙæÄ'jwr§·}O‘Úv³ ᕌÞÝ/˜ëŒ)¥Ÿ±A“Z–a#cÿ C8Bרw±á©…ªªk>·É¹o‡À‰~©Í„‰H5¿C¿†ÇO ·IäôÐ|žSØoÚpxæô—Z‚èŠ[¸€jQ«O7¹ö¤äÀþ÷ìK°·¸ZÌ͇¬?;ü¦²›èÝliÚ‹ ×Îï@—Û±®³Ïþ؃?â®ÓÎcoBë …ôÙFÇÆšyw+6ÄžÁJâY¢†X$¥¡Có.u>ÅëÉò>œ =u˜ï7¶ÌxŸœa‚ûÓú k7E6ƒ¶ÂµKH +‚5ÒÒÐ6Œ5n‘ñÙ"Xæ‘øªÃÏuF ©›,ehX+}Y¥O÷q9™76Àu¢½ôdW ù3 oY…ËUŽ¢Ó@Ì=²¹)¬vP©„áw×.¯ùÛ2·ÌJÓÐâ†êå ê=cSFe8‹OÌBê7´@lPŸaD;…UÛŠ_$­¨2±mG˜“ÚpMZq¯ýú>;ëü ×E%„Ã9è6‹Ù)îfGíeeF¢p¢íëŒO»e IB#¹Ès®ÖWyP†çr]å¼Úó‹$˜…Ò2ð6X_8%Ä€é#ß:•vi¡]Jø}¦ä(Æd6Ž ˜U‡npËü1ÌÀ *r”‘`$IO4b5P±¤ÚÏ;¨ÞçV=gÖÅ»mËQŒEãdÉÒŽ¨µj'gh÷Lòq3Ð5‰],N{¡ŠvÑ?ÞŒÅ•å ¢ Fˆk Zª}e3ÇXˆbö‘Tšï¤{Tf "Jejl´QL$›Z©=Š@Oêb2únÛ=Û|LÁÁ]¿xü•=ú[ï…Éâm2r";"9Hö(^«ä:¶>E.€D¶(³¯ùo^ƒ)m®ÃÕ{iyL§ÕQ±*){­<-üg¶Ö_‚(§ïºÉl,ï…ÛÒ9U]L,ê/wr|…¶™ÑdöÊ•Ì^M&)‹ý_˜9Š&[£BïoÉ×ùÈM­Oc'ƒ–8ƬQ×]³¡·´^~I«ÙØD½­¯BD0©É΄‘È•WÙÿÈìñên&aœºAï˜ò-ÞÉm ]ln¿kx'O…O²±’}wN  <}å3°‹œeËA ÛÊ»]"GÇ’(Ì6+‰­a9úr^/Öl-’Mc¤ç=ajêÆ)É_ñü 2óœn¼?øœB»‘ÉW,kÍø§j½Â¦£„|òEûa(§ÃsŠ×Xëh0©îܰÍ(r`á¬ÖýÒjpHD›1ë Ž!by{¹'qÎŒ_‰jp¡N¼3VÎ/Åji˜üvçÀ¶ë¬÷OÂ$mÆÎ oÁg"'#5özü2V;µYµ³{/+‹ÕXçá5WN»¼Z_\ — QñLß+Ý• ¸ãyrÑ&á ]”(Îè.>ºX…p%L­äÁXVÚÁ+jNUf-  ¢~æaštÓ•èÜx^ÏMúɳ ¼…è â—&zSÛ”žž 3vO+ÈêÓYh~†QQÈgƒÄ©œEvOºÝaRi郤 +{*”ô~;/ö0ëzýh?阠’½º ÿo?üº°K†1ý–™S+ûtòÞâÕ‡0²ãÈ¢£QQk¸œ/°ŒÔlå”Ì Å{³ Z¸-Ê]¾§Ì&Y?=êÇÜ0܇;gÆŒ#'-¸±º6°æzMãöÕ“wþ½…~YT&ox®›Í± ]ß”«Ì×½çìÅ8x*ŒÄ|¤õÇuÙ™ç†`¯y“{DŸõr݉×¢Ÿ±ëгõK—Rí\ž«Ÿ˜ýaÑ«ÝÒ«c…˜^Îò£ë= ~>Z»}alS†®ëvøkÕøx ˆÿ±¡—…ij#ºFp_£ð3«ÈsÒÓÙ`ü– ±Áß 3uªa ‰O$:ÜÆ†ÚeÛ"B7.›Š:YçUP·ÆIØU”Ó%uÏ-^Ø4Y×8Ê_Ž0RØ3 £'Ug§žeÒsà~{ áA¹†ø(úËŒ!Þ™G ¶ïªð+fµ ¯xÆ)À£ŸŠtÌnz F6•øs‡œDˆ—¬?ß#‡FÝ‹ŒÀÞä;sÈ®Ô-?ÅæÊÞú©eŠºâE´-Œ‰\Ñ¢«©^»8ŒG¥c] [B›æí©…ð¶Þ#Ø„†ˆSp\/ö:;×3Ž‹·ìPË=™º£LQiøµ¨˜<ÄJƒQ8t›÷ü]×k{íqÜXÈ8°¸tQçëf±ø(- äæð(ªÊ1å[ìá.2’%ãtVpð-íb÷!W&¢XÆk°‹ÿÂ>˜ý[öGmÎt\9…:=CÝRìîì1ì”"®†Ód§³hXœ±Ð‘ü~Fûºrâ}h.Çãö‰<º9FãµiÿÞÇlŸ¾Ê \p­CéâÞu·I»j r<—_ð¼Æö#:ç¦æ  ©`¬…o…k²Ä¥îŠÕ5‚ô¼t3;­q¢Ì[ëÉÖ ì#/äÀ*@B—WæÜÚ˳Ì-ådžÙÞ}FØš¶Ù 5{';ÞYoÅ[3—¿ÍF;Ë3Ýp ~‘iíÐ-‹ÌÖ¢^×ÓŽëƒA¢+ÙgåÚ%aê¬Ã4A×¾o û7–ósÂÞ\gãïS§Êê†ÊÆ}Çã/×ùŒß'㈋½yþ7&í12ã8íȱþa@ÊWÐÙ’;Άäíü>&%ØŽZM>l÷Läa”:ŠÔ¢m‡Sª‹aÕÛ|7ZÝÿóm&ÛÕµTL¦iŠ µa¦ !ám|c=ŒtXà±xÄ̆hrE¬:Ñ3Éh@¨Ð'ذÊÁu: öý µÁäÛÚi†tÓ8'‹?»q&¸æßÂ8\šn¶xLŠ. £0O]îô¿ñU¤†D¢z06TÛó2¸¥m·øhn˶îÛQÞ@ÔQÔ¢G=beÂôA^0c;6AØ,lIca¼·Þ|§ëå«·–B™·k®þß­0vè`K1¢ž£ÁwŒfÙóÑ…QÓ—;«g¿ƒIñDÖþEc’6û”ã0Êv4Læ(“™bž«Mdn´“a³¡æëA‹Í<¨Ù溅w£Ò"öS%¶«'aÔ9exM¹C;4¯‘£Dï§T˜†7R°zø÷%t"¥hñÅS+ÊfþÇXÅ´x²KÓ‰x!_&Ùxœö­ †ªX Ö?‚©4 clrìù×óÅL©bį`¤ÕSGŽÿ°7 %·eÚ#WÂ>ý;ð¤cÎøy‡wüôÛáà$aR°bö¯iÕhÜ9‡Šíü*@Q~·=šPú4˜uê«úÙie)Ñ€9\ä±qæ÷ØÚ U1ܺo©95#9ê†Iv¦‚‚=+Ú©¬øŒÃÒ‹0ISãPZGû±ªµ†sùH‚u© >Þ1´‡ØÎ<¿BûÊHެˆhûò¡RBbs˪ÄÆÐqüw¤³‘Tk¿µYâk§§TÖEu=ä]ûôdêÙpk÷ØÕÕÛ§:ÓTú,§¾o;Þ¤=‰™¹3øÕÌã¯X(Bº?ÏOÆÁKê‚ôÆÙHû¬­!ÞQwl}ºF)^^ÓÚqäœá6½¡ë="ã‘™[æÓtÕS;6B|ƒ™¦±þÚكǴy$Œçµ]³Zß…°²tá$öq2^Æþgjk“WQ™¥cŒÀpâG=V…y0Yxª«cfÝMwá«}ã໹û¥Š|,«ÆðÙwjŠcøY¾ˆ³{çtgåÅ06v·hm¬ãêøKÝjôÚö‹Íu:LÜ)%Dà0 O>Ç›K†›¼ö»æ4ßø¾0 †jl­ ?ïlãЉTñ©kùÒ´ºX>Z¼¾Ô|{¾Q‰~>»³°ç¢…׳–³{Zîvq,Š›î€‘ˆDÑ=(Q½b4_yéð‚}wñBˆž¿ÄÐCU§°‚éâ‹y¿qr@g–¹™¡—ÀÈ£*+²iWaß“5X¼Äþ%¡¬wèUÒ"*g>FÌù²oð=:Üœ¢ÝöËêÊ{GÌšxª+ñ½J(jîîðïG/›IÕur(/N*5¬ÓÓ?«—¶\V•ý^Ö—3?èJø¤µûÉÇ_iz¯Øf5‡b¹Ó-sÒÆ•sàÎ_(ôþ™äǬlÐhªÑn“2rhôóØ qZíœïv¿&Mòr$óJaAÍB{ º)Ü F¢"ç3³¢Œ³6ÊÌèyµó¥BXÎTÙæ`;uÙðfJ㣆þÈ] IŠ$žU¢§XùâöÀ ž‹»†Û(â—, ôçPûG,õ:e§¼„‡9Óde7”ª«GýÞvÙŽn‡JƒI¼.Wú:D¦¼Ç£ÃîŠêâæäÚþ =¿{Wü:c„hr]]ŽÃ7`M)¾²óÜo{_ì$Mìoš'ìtýÕC‡lˆ;¶gzÆ-; ¢mÛèš¾lŸŒM•TÚ<Œ¹íHcLíyÉñnšxìGJo}ÈxvY×ÀQñI’²1[Ýlª›ib¸_b>ÛãÈÁ&väl ø ¸ÄÌO|¶â¢4ÕCŠ5ÈjÔiftj{¬Þv…±“ÜSß!]Ã:ä›ÁH <Süì™8ÐtÃ`µcæ¶Æ3²¿ˆXVN,QXùõc–Z>ÿ۾шŸáp<ó}þÆ{lVÌYBbãmJ•ÉÊy€G`ÿ›Ó`ãxÃy,èotªáyWª;«,ã/-¹ÈÕæGòæ™j¯j ûŠ NêtnËcùèå ׯlqùåÎ0õS<{©3m#ŽcõÊ0 °Â…ú3ˆò”)Ç+ôêúíaµfG×Ï_òÈ'²@Ãê™3¹rÆ ×Á€M(e™O¡Ü| Òfxƒ•èXð òWÖߨ>vö9½"•{ŽKàð7yÁ}.œ¯ÎùÎ`(és!<׎#4{Îm ‹èÔ*ÎPÊ w\B²­ÝFjì뎋=ÄHøÈ8F¬ãˆo.|þ3Y£Óª2 ¥= &Zûƒ‘¿cˆ·Œz¯s[hƒ÷ÃÖreúߨ õ’q¡>ÚJ½Ù WˆÐhoë­*±·ŠÞh …Æl·õ žZì S2ŠŸÊ«ÃÆæ£.ÿS¼£¼$ ªÙÖ‡lP„O©Ëµ½" û~BOøZcacì"µä{[3Gúqÿ}ýH“a®(¥µ¸#xKÐEIÉ^Ý«/JÉ1øuè †É:ýp"Ê?ÕÛŸÓ§äéEþ2wl}­v˜>m0Y¨!zø¸JþŽlƒw»aŸÞIPþ¶º5ók:³®#Ëæ÷¨g†7ÑöG¾È¤ÊP긟6 —5³]m¬ÝÑ•J~AD(n„‰^Ý®ÁM°O£ó|èNq­²ûëgÓCÕêɳ¼Ìåþ"¼5oh6=x£S2:ò³•VÖ_`§ÎM|Ö?ÄË!--™~ Cç]Ê]áŠ]D×øw…mÈQ¯¿·ò?-&©ºµ>.µ[2!mà—µJ9G"l‹¡º¹ÔD|GÎŒÇê0"SvNÕ l´…£æ²£±|}I¹ö³ÓÓQKu¦™HÒ±hÁÉ$¶ÜwlïÝl^€5nšÖ]ÁY»çQ'(~.xÎ"v{¼-Û#–˜äv_«»Ãnÿ;pÍg“ãf71Ú»Û†CŸyív/ŒÔóźr3‡PS³ømØHºÅ”hºi϶#UÄáäÍbÇÇ0–-©ÎÙO‘FÑ7J}°K;_£aB½6Ÿó¡‹Mßg,gr`ÅfWqMþp‚áZaŸcÒ_ÜÈѯ0Î*Ú;~Ý€ݹPàÕkS•Îiÿ”D5,žìã4 ògèµ9];ƒ¿¾›}XDöíãpЖ/RÉgç/Rj@õþ‡³C†]D×…ñ#×hazèêÙKª 0ƒ³˜mKYc±jí5ß¶ƒRÆ‹wz\µý–‘ÚX?Å%~Ž ÞÁ_ÔC[‡=Zñâët®âÜ?Fý½:Úêi÷Ñ·Bš: ]_fÐ{ØîÖNï÷CÓ‰ìå<2¼qÊs~HákŒ9¥ŒhÝ%í/9>³¯ˆÎö(ô3þôMR­þ Ù¢ø7d pªlÃÅÏP{OŠÊ³›û0]›Ð2ˆ„ã¦Å"sS}Ù„bG9ÿvcÚÔ}êvrEbÜŠ¹q+JçV”«Ÿ/ó ÿ–RQƺeÜü?Ý´ã>¤“òƒ*pé]ë\Wø:e…Q¯Ë ²Ž¿—íi¶ç$†}—}ÀßîÂ5¿ì%zIR FYµh³©"ˆòØýÎùÇŸt7°†Ùy» Ç,ƒž‘_5ïåsÉzF!hƹõaµã•ptsÌM3þG±‘éøþ˜gç°ÎA¿hÞçB¡K]Þ £F€C0WthñBW`|i«Fø9¸y³´(AÏåöN_ÓµGÍY8ùÈ>ÆCª÷ð‡òÝSÌÊù$xKò1>Môi{¡ /6¿ÿ¸cÞal—Ĥzî¦Ýн[ÕpY”ã"ûK¾9v<åö¢÷ï§©,rÒÈ@ùlÚŸ÷™Â¸«¯ÙóÙ¬ÿ»Ž¿™NkœÌH¯;ÆžN—ˆû ‰Žâ#S†­Æn%€10×J±º[S»ùª©8 Na´+¡¸Iƒm—Ä\dIüÛšù· bã>¼Úç Š'al,Æ_6¯9Ôž^˜“ÚèÌ»¾7ÀŒ0HaPk¸É N÷Ð…ð°ä#x$â϶ýJ 5d~ëCùO±èívÙKúFl{øÆáSDbNëMú§aÔB/“3Š(ãµO ÄÕ=ëåÿ©I+â`§ÊI°·p÷ç }f v.•OBR?%eûM™ü[äÍ0]ºcÝçô/ çË¢¡.\?]“™%¶ú=Ž€ã)@/ ôÛZÉÌþOÃçƒÅöšð&ùàßÛÓJEñTViû“î]‘ug·JÎvy¬?á'ás™Bì¦øî±¼íi8G0p¶êÿ+~y8¿çÛZðüµ{¦3O×6X›¼wÔˆ€Yàb¶¦PYù ´ãÈ8$:6'QξÈ8„‘¸·¡?_›–=.Ä;§°Sã!ÝCå½þñªù×NyT ‰LwO%€F$8¥Î…@x¨²úF{צCÅ"«¶mè|‡/Öݶ±ªèu óF+[§_=O†´»ël7ݧ'³1Ôùk;€x›‡•Wü¦Ïû(Š “[ }“+âÑ ‹Ø6w·KHÓ7¿ yìlkÏÈ[æ¢ììíɘ"zìU›*»îgš;tØÙ•@î“0N å÷öÔ—Éj‚Ü(ƒ<µ@8ù™Í 1@tURŒmÎÃâc¿µé¯ì ]wy™`Öê¯V—4-ŧC”L®¯Q†obÊÜ΄µùž© Ðd_'Ü)œŒtÿ‡Ø„q8f«¬ÇRkÎ0'Õøª%þö R9 oôˆT !áYpšS5‹öGuKâæ­3X;[`‹>YõO,¼Mñsó­}þiÚ•ƒŠàfÄcÅ(PY€£fhÁí°cº;?7uÿ84€s…}JYlU7a¾ÉN.m9ªˆ>‘¹¿â’áîÉÁ!²/ªGó›*¾œ} [èH)ï¾¶¼È1¾ž™Á¹…<_Æq¼„fŒÐ p5„4ÐQ~Œ_’˜Å¶6’Áì¹|ß÷Lø~¡Ã]–„z;…‰QqÜ×ìjuD•b;Äž˜vx“#3mn¡c›/J{O~³ÐÖÿû¾ªVÃâ¢ݱ§.­½prSPÛ×ôÛj.ì'æbÕ(̃‚|!²¬]*¬ß øÝOÁæÛ±jUL_%¥ôW®²~&DÜ.;·ðüÌ®doeA-eÕõ=-¹Ctc>«\9lp_š¨Ú•ìüÚzæ(Ÿð³Kª{”þ)\›—8µ¹†B Ý™³H±>–‹û¬st_òƒ¤wv½"[óð˜U„ƃrÀ*цÖjˆ§_}r[¼ž_ȅЃ=’+‘øØB]5êt®•䫇ßÈ;”? Æ&‹g¦×õ–ë>³wWΪ G;<*Ò²ˆZÈ3´·AàåBŒê¤‰[f6ñöæ6<}1©JéipÐ&àR²¹æ¶wò'–jb*ö&MÔ0ÄrGv9n7€N”†dD\6×¼áÖMS˶1XtÊB; ‹d&ü˜ž}Ýßd¨Érèì¼z*S30F6CÊ.6-åËiVŒe³`ÙGö6ŠIlþÊ­×µ«‚aJ¨Áw]u‰=T#‘f'!½[°dÊÁ`.@Æ¿z"ˆS4³ŒÃ³æLó»úÖÍê&=š0ú¶ßRŸõëI›ªdG·òûÚm½TŠ–‚ùÂÙJ³06Ù‚ŸsEîÚž"A’Õí8L’\LçnèLÖj9°×?2~}²<<ƒóêí&ó{.Ó¸u­ì±›òþëCÅöÁæ©®Òça0€Æ„ø‚/ ^GY½¸Æ bã$A¦¸™¬‚¯ïèuD,… LÖb4ßuŸ]x&(‰ŠÛL4ª#‡/È?ú†Õ6ƹe\õú¶ôŒH&,x\@8.Ä´A-zo(WD;ªø+ö\¶!¡é~±˜ä6A£&ròÞbïüôFê$¤`»YÜÏB Ð/½¯Õm?ã‰@‹¢_%ö`€…KÎ`üAíÔIk`‚±G§Ž&Àfþ‹®y™ü¿‹]»þ{ÝhŸŽï?ò†HN±¼Yƒ²ß·ø¯7ºë_dÎs–ÂÊt,…ÍþïRYäIFyòÕÿ;ûO5±l¬‰•ÿÒfL/SOq7ÅRê)™ŽÐuàp'…'½ý0 `W#õπ΢ߑ9YlÿÆ&{&› .¸é ßš¥Ã2ñ;²DpýÛúÞRb¿”³mFÒI0¸Æhlp_ÛX˜”y'au–=ë‡4´?Q„‘¾#¨¤âÈØÑ,°œ@è ç5vtÅAÒ<ø¼øÄ"8oaÀ8¦¶üàÀ—'A5ó»L°ÏïêÞƒmhÖ\…/ƒÙ6„é¤þÞ*q_¯3køb–®uF–nù¼Öì»SëÍ&TþÐýc_õ›þcß…Q¤Èv‘ ¥†£~ÛWôCü1äâ…Pp‚ãBU¶ûŒGPe¸«»“v¬ºÅºR‹S“(ðÇæãÌk2Ši” ~.Ù*¬ü'žÅÝS°Çß½ôAŒóŽÒ-¶œ ø´7ª½ü–w¶ É»¥(Ê÷!seŠÎ>·¨`™×tƒÒÔ×a)I5MÂØžÆh2ŸÀ¶bµHÁ÷ü³)ì„;¸Õ‰‡ïÞ˜_òDÿH3< Äèݶ¨=èé—OìßÚ|mºOöD“¥ˆ"+B<¾ë0Þ7Û~gåü4GÚþ¶erÜmPúnF„,wz'8žÖY°a&bP‰•e}yõ#!ŒÌ«¸j×ì>¢G¹Y7\±W©mà»!`ÇUÃúlzOL§c"¤·,®‡Øº[-ƒ‘oéÅ`©Uqþ†hB&g%ôÏ–þ,h î&rÛFôfæ%-Hy¦tÚ+/…s;3¨ÅÂŒDîÈ¾ß v&W.ЗŒÖt*•°í-î\¯–Ƕªäò޽ðÝ~ÒN =ÃCdaTƒ)²“åcd›MzO¢•“"Û8f$>Û)$ï ¯d.w#›JÉìV©—±¥jpÆáЦ(ƒ±63WÙ{ó&ÃèÖ÷ugA-§¶’¯&ÅôĩSÔÍ÷ ÂOwL eѵ’ì*Ð3ŹX>‹0’žâøc… ¿gNޏ&âœG:f9÷a™N–šûœeS­åÞý)šTÃÌíš"3(ôĽêeœé”†ÅÝở*&´špO̳¿°jñÛ@¿5ŒjÏÚ;-âšӓg`Ú•*m,ó»Az1øú\Ρ.9M/1ÇËòݰàöÓ8 */šÔÛÒmñœ§;x€ÌP²¨¾_¸Ƭ2J%4HÔ =Âèö/¾/^<»$«SÏÏ"NKÝRú‰7ŽN÷¤²CD¥½Âãéïxý™;ôþ^ªun0ƒÙf;—*9Ž@\úœæ™½tÚ­öËÚø,¯9 `<¢Öúou,)ñšÄvû*UùpýŒ.Àf(u3ùþ  Æ9–,>\éS ­ÁͪKøÿ‹ËÆsç‚~4L˜?”Ñ]]@fŒi,ÁÒBgÕ©\Þå‚»dbJôªÔ‘:]âhm©ï¹° k~ËÍ/6nν•™#è¢ Évæ•\0wÕËö+Á+49=½mTÂÆ–{*ÜŠ¢Ý©wŠ!o {0YS¶ˆ<2jÏ‹nPç­LgŒ9T^Y½à6F{Ô¯°èŒ£9`'#ŠíÆžz¦‹¯b“຺?¦ÐgªÃ‚m@u€•ÛßÔJçÃ!§ˆô¶®r&îê ¢¸säz©Å CR1gè±¥à‰&&¥óêæŸk¾sÏ…‘Þâò–C]ý̶Õû¦hJ‘K_ò:¯ÛPðôJìZÚÔ5ïœ-Ø?t\2žX2+ç&ØÿÎÈÞBâ¢cÁâ4_¯9Oçµå9Å‚8}&w—¯=Ùe¶”ZÜÔ¯M4g/?ÙŽhvyd¾QùÜ!±êY+cÊ–÷¨*K ž$Œâ—yð‰4u¯ê'ëeÛb¡^‘ìêº?{Xr=›x°GådÜP‘¾›€³Ø«VNìõ™ ~öHï[¾Å'¹ñæúa-0¶b/8&–»«S]’\ÖˆÍV|öÃvã=ÔŸxM¬WXņÚc‚S*W%Ë]¶Ÿ¼"Û¤m˜Tàj-EB½ùØ'LðY”äYlÞ†ÓMê%b÷]Š)¼‘Ð[°mâ$Nœ ÖdT5ák]÷1„qrF\¾£ÿ¥(‚—uÑKÙ½øJMºÇéGúˆ:^zZ¥@¿Ì.o¬óóCñø‰u8ƒZ³¼àïW…×1”ªý}טŽh7˜(,öømÐÏiÛ Muq{+UëTIÀ5wõîl”º_–éE(b¢~íoYýOþë}ýBí—±Ÿ±H1”_VëJ˜‚›Ú6Ìr4’É—!ØpCmÿðšÃ"µi 3™›YDÏÔqn†‡›Ÿc¶5{â–veÉi”ì'<F!è¦Fûh|ú´¶''iô/|®¶+žbý˜e \ŒŽÚ/é£t'àKÓÕâ'p ÏŠúâË,ØÊÐ}æþå(U—9š8ÿƒ¶²eq¢K©ðm(~–z |Žœ f90Û(¸Q VåŽMÝ–Àpwj˜c×€¶ý° Fô‚‡ê‘y’Ïjµ‘£E¶SH>év”Š®¿«, ÕST Ø–Ê{eCž.`D–œ«ö¼&!8¨ Ó×è7n˜bñ…m”ÞJfAs!pÍÖâeuÆ^:ûßY?ïóÕñ¯•Nò<Øü€@ŽÍ¸Á D3aRâ0ŸFÀ,´u±ÄgDmUs_ÅW ÄT.pÑϵ蹫XºË¼6©,ŠÍ®¿Ã®?N€¢œ<ÞÛA¸B“¾ÖÓ¦ EQϪ[ˆ¬.·¼g\b?¬B½‹æ W!›Ë|+á ³jBÍåþo0i~œ‚ÚÓT&­²RÙ¹²bÈP|ÚÜͦò©”råìR­>)ÄuôHfˆI®ŸJðm¦6ëÙGVåR»[vyGdŽ)Éc¾©Ò6JVJ²cy5ÜHŸbÞK}µFñ)šÏÄ Fñ¼)„WöF˜zò™f8 )Â`¦1¶DowºÿŸ¤Þ¸×éƒ]“ƒ"(/ÿîF&…â[a¬´¿z ôÌt úV‰ol§Æ$¿¿Tæ‡lz>öw¬cþŠ3›‹0r„M)’áÚ‡ž½”žöæãt ›_¬luâ™6)2JöÒ~ãꤨîQDܹ™c’R“C¦™#4ÊsÛ\2nCU ñ+bÓo@Èɬ틟i_,¼€£h†U°Ç¬ïžêƒ%n"cT¤88ÌIóŒ[i–*r3––fâÃ:‘*æœÌüK?Wi©±Ã=óBäòdP'#Rá< ãøvî–z'†#²}^©ŽÃØ_Îu)ìYþ¶r/ @ø<¨Í6GÆS‚ôËŸ¨‡ßSx2̳ƒ¸ÉyÊôK‘Q+N/·ì×ûÜ3ì!Œ¬¾¾ulù\d‡Ô,<ÝŸíH–À¤áÁg'ÃHÐ¥ NF×1z/Äík«÷Xùò,æÛ•Ø3C››8ޝ9¾´ÂÆ&}ÈÃmAÒÙÉåô´:ö=ˆ^ö2l­/oÀýQ¤OŽ8®€¶ÍYµDæwÕßµ?2ž0@ó3K3Îõ°£ºõCÇ9æç–7¯›Ê È’R×1ºŒÚt8\…-qDL¦5œAT©˜=§ W—fú›âK|ù-·Ìæjšã#‡]v²ÈÞXê(¶Ti½Yg?^TÎOÉyŧm“‹Of……K Ñ1Á%«eÚœÂÃ2½¡\$âWsÚa¡D„Ç™tù[Ö ‡×A³÷îá•â¦#ž„ä¿U¾æÿ¦ò…èn÷3ÝÚì‘z Èæíä~’}v’=’íde½Ë˜j þp;ùßéîË-jýr¿­èÊíú—°ÂÊ^ùXö*þïRYBszÓÕpo\΢ÿTÿ*]f7Kþ©þuA($¢Œ!ÛcA‘äëë{eÐ?º»¡´qÃþñÁðsBÄ ² ¦Í eùâ›-•éee¶CŒ±sŽè¤Î6C+Z³-ÕK7D¾Ÿ.õ¶D$†gÛRM\Øý]2/ÎG)…í˜$Ð};eE¿(veêð4Ûlö{(33ìzr"LeÁÖqM9 VPu½æ¶Ï¼ng%#†NôÊÙ°ÚˆOn-coh0¿™£XÅËëôö„À˜o¡Ø>’Sr…mN&o‡jaŠ^d-ëˆÎ;PqÖŽÉÊÆžY]ð#v¨‰t¾ŽDH—'_…±g♌9K[ K3庒Gòôìb¥py¦Ë˜`ÅÂcØÜ=¬n]× ôÃU¶ýyøUÌa£åçMQ6¬‹ëÒ’ö ÷±Zè}~ˆ$!ábLÂÞØÜ;{À´+“êá£`bf,N¢e˜â›ªï8¯æ ˜Ó5D¹ÑU^ç•íq(\þ&:LŒN(R‡Úè™öŸ9Ʊ7œû1t¯„w•é\A³…Yõéh0鱨xà¬Ñ^;G‰õ¶ëWt œ¯úœÅV& :WþP`UÁ89ùzŠÇï¡Å‹]ŒX”c¨½NÐΔ'´Úµm©¨´î¼PÕ[ Ó—à ˜î4{ÊT»?.®*™i  Ñpuóé~«î×ÂE¤°¥íX8e¶ƒQhÓÿT˜KÎtR´àϵ£jÂø|yOð„}iˆAU·‚‹Qèµ6+}ÂÙ*Žý=÷޹YÃe:dñ¨(”x¥;µ³$i\ÔSV½Û¥Ø89ù†züâfØ2#åYÙ¥„‰£™ðkÝÝ3 «µÞ.G‘SGŒK³_a¬ã2 `î‰Éeƒ±€œCà2pÌjre$üíÕ­^ð²}ÏÞRžY"†É:Óa,Õ§8ø¾[Å<ˆXàƒ:á·\žè6ù_·²2ÃBúPQ\¿µ¸yÞ?[¥A\Ô˜Fikñê¸}zè>_¸è”OJ PyÅ~«’­vÓƒ0²j9{»—a¥—¾aNŒ›Î†fZŦێÅ”YÀ#²Ó’6ºdÑáöA“üBžºù»§fý›Ádë“Çßø° UE…Hµ’ØN·±²F'äcZ‡`û0–A•¤É*g惭7!¥y‹»fQWoè°-Á&Mfvòñ¶·ÞNP&{…Ëi»5õ[ZÂæ¼×v |ÃrÆ!娪÷פëî‡fo£´“xÖ«:âþŒSî¡6ƒd5<.'ßCý®Z§Š|ÙVs$˜Ý&t?Wô”ämG5¹¶ó“Ë2Ë…CuéÊölˆd-(D Ff;ß €\¹ O©\¾Ë J“æ4 ¦ýÞÚÛ›Ù¢¨h9;åUK°‡|–QG•jZö/¼ÀZî>â®ÍJ ]S´=`Í ×NÉÅ8”VÊñʱ—Ç›»Ü¹2µA‡©˜jPöcºŒ ˜E€(ã1X;s3i ±ºæÐµ ™ø7xÿ †3{~ ©åØ{?$2{)¸hÖ6€âŸ2JsŠÍ5Mïáõ þ‡8üô½§8ä×éÚîïä¥×¸}ŸÆG]¼68­gÞUG‡3ÿ€ 5|ò â§ô娬`Æ…$_Ž ˜…‘1ßÕµHÐ;oobìŠaÉšRA½ƒÇwx£HS›·=¥Xá†Obwb‹ÉakÔnVBܼÆÃcã­É4'|§²X&õå¤Ð¶ÄÅcøËî}Af“iÃ2œ›æ ‡Ý aÒ›ê …uÔ&žŸªnfñ‹~—. åŽ*9ú0\Ø悯‡Ý°]Ìý¼æ#®—9ãskØ‚•ŽH?…öôǰ4R ´Ë—ÃÈ*ºSaÔìºãa« ꉘê^ÖÑ3Úè-[ðˆ^#Õ±óâÆ¬2Ô¡ DT\ô½óÆì·×ðøÌlÆ^Ü·HÆ[8¸|[¯â?’‘€µDƒº|¬$÷pÚ¹þÌd`^ìpì°C=–ñ:™—‹ò~›ï¨(ÌÔaø–Ý¡ ¡cEÕ~xë0vtZKp‡äxá*½ ªÎ¦ÌŽˆðPj5å‚«Ån=¶ƒEýòƒK·=_ìüÅmÿ]~Û5ï#ÁŸ5Y p‡éL‚·)¶,[QËGªœÍ¾Y¼·Ûµ¶Œ{19ëÞ³d›Š àêZgÆ}CJíÎOi3w Õ)œ8ÓQøÝ “¥AöT4ê˜ÓÎѾ<^‰¶º†P< #mÏðÃ/ãrâ™ð"ÊzÓsÖ”bðFŸØjšÅkŸôL3ÛÕÞ±Ù¦HX#¶Õ½áV{ë#ÍÛ'Ë……}qßoÖ^„÷ÞðçŠö© 0¨Ôßy"¯µõi}=¹5ÄOêv4¾‡ÿåP&{ã›ÊÄõþéÊYlCÈÖüàúìUðßM?†^Ī>¬ÊøÐ]ñ-Tëï‡ÊœCß!‡ˆwÿöÍsÖ*01óÍùWWŠˆlqÅŸE„>ßm(×ÖQ_waNÔ“-){5ùÒæªñ=ˆZ„8’ÎŽâxåm¦›È$ðèñÌ¸Š¾[Lpó1€omE3‚ŽŸÚ»¨¢ óãîÀðIP„àa OP¶ÚéÝ à‹YWô¼:Öó5|yUÿ „²ˆ1A|…À£ÏNié†î­Â‘–£¿ÀØÈ®P¶¾‰9+¥lâ¼¢qáüWäìQ&v,×ÂôÛãOŸ¿!•jj}F „vªm;ŸDÄQ£ŽxE¢¥›Ã&>òQÏ)"€'.œÝ»ò®ºvXt.ÄIÔÀÊ‚ÇXÊr~ÅPùÒpVךOmÅ””»˜\¨úÕò „Á‚Eƒâ?½Ú¡[Çö/¹Ëž…±a§¦ÐÙr¤rÆ^ÄÌì«EÓŸðÏ’šÙ•¯ žŸ„‘@MЩ·ûlÐ,e«ê‘óXÿ<¿nwUXFe 6 VôaC8²|"¬†#&‹06/‹©8›ªžÔV…ý°“9&¡?ó½JæÑ«0‰/°oïÏB…2Á‹‘b›&Ä^|ü¬Ù¦óà‚dÿGZ?enC°–šnöwr Äлì=vÙ‘ ¥@ÇD'.ÙÖ`i™Ô^Oe»z#¸€Ÿ­ÛiW؆2bvÒgþE‡÷ìb$ö†ù܃òǦÁü=‡èál,lk0T©[žgèrT)y©ŒÑ¯±h HD9üÐ÷pbà(±ÁãðªÚú¡›,QµÇÀkoTOûb ­7†S)® :wÇ“ßÆògÌD`ê‹;{‰µ©æÎÂ(‡[ÈaýGÇ8WnÞAµÎs’¾[Ó?·$óF³³“ëïÀMárE¯ö5 Þ«¾ZµNeaN„4qFW!WIJâFªó2šEí—mi›³Ö rªua¥·•Âc(]ëêŸEš÷I;U¾ˆC˜¨”GÈêšå1ß ×Ž{ž×^»ú.±ugsËÂ#îa|Çê&öh{–„ k^óȺMÄëÚ2Œ±ÅÕ5þÐìS˜tl»š7à .Õ)+ÐZkuºw̪ó`q1倪‚¶Î¡¥†N¬òó~h34®wóêýb»??‹’4ÔŸ™ž”•c³/ ,Êå”BÈÓÅàJpÂE£ô¬©E´¤u¨– ÷æJõûäÄtRø2ùÎ;.pM9gÂ"8;ZÄS{²K~Óªž ãÜBê‰uÚMÕæÆ³°áÎZ©,;¿± ÝFuâ+›ä.Z:SYò“L-aÍÌ^cݵˆ½áÎEl¶Ú÷¾ ˆ,¦ãA$pmLñ ¼¯c3 g&¾Å‘ŸDF·`êùð´½°H æÅ虯Å<á·¿^¸&»G¸kç 3.Ì›ŠØ×ÝÊž‰âGźþ™>L|#\PŠm#Añ!H« PøÎñÓý|ñj›8ƒ«oÆO'¸gÏsËt1?¤g®“׫~{Gk±v„Vˆô³ê!˜´ø™üå6ª^pÄWC=…z±&àÈ›U–Í­¤Cãe²É*aáâ›…vVÝ eEz[/{Àô%nSc ‹W7öYõäŠV1ûÃ{0’8ÝÆì¹ÖVã4©†Ó/:-~ôŠ^Ï¿kŽæŽkùèGTü9!’ë œDY’˜ÍÜ C¥dÁ¼ºôÛ™1o]Í –ùîÙ“n¸QQG£†@€U ML Ãr8¢³CùÐ\eÆX+•”OÈ0 g˜¿Ñ¿5éƒ ž5€“–Óþjþóž›^¦e¸û¾Ò¬ïh¾T€`ÄÊçKä;$æ e†›ò÷³åÇGouîVÞÆÒâUj#²ÄÛ|ǽ°6—Ø=¹>ÀÞïû÷UÔ$µ4Ѻ€ùrò‡…¡¥÷²áÓ~~æ³Ì—õƒ‚²Q8´é}§¢€Nû¢q)Ò°õc;’·#^ágC+|•”ÀÒ08Ò’Šá  ÆÝÀì…–¡Ç¿Í>kÉÙ 낲Ìw‚> ŸÇOËŽgÿ™Û‘DÑ¿—L)ÿkU §$ú#¸g‘¯gHΫ¢‰ÖW:7#oË8 èÐÆÃ•²¹lyöÖr¹MÒ7%¡#N@èH¢X„Ž$JþïR•ET’ÈQàþ-‘#‰R'r̲~œ ËZ ®qL÷‹a:*_؃Íð(ŒDWÖº»(N©9¾òò¸³o¼Í1NO=´#X$â“yµÎl­”§AúΖ¹x‰cõ£§‰}QÓ¿µ$"–wqHØqê×铆qôÉŸ¥¡^[óãuöÉan6ü^zÉ‘‚›tèGÁïvõ¥½–Ø¡F{(c¢)“É×åFýT©#5çБ ß՛ؑé=jˆ¼Û‰g0ªÛÖ‡¥í¼#@}¤9õÔ¯¿Å_æ¼ º°Ó74ë@ñû—K¥js*—”Êu¬z×±/¢\Èn0P®ï8`äM½ÄhΞðÁBqh¶~»y†#ÐÞ„ÜÉ×4ëHó'bbu¥ØýCó GrÕúù£åÁÛAe,ı8àÑú› Gáü¡ÔQ…'¬~¯ãÙ‹»K ߀];~T²áåþº–¡¸µ4[C·¦Ü¡DE™¬¯áÝ‘‹Õ˜+28â§E 2H@QþÙ0ˆÒÆŸHËX?tðÒRÙkí`ÅE®5RÅfv~i‹_ÆÝwiÛü:Ê'yƒ#˾ |ðal3lÒÁÛâùpjùôv»ËèsØ P~åøÒ\#õS¸^‰@4ñ/«Ä¼6ÖÌUa¨;ŒˆÅío[XÈ¢¹¤ü¨¿ƒA§º:¬‰–,¶‘½4FÑâÔÍ#K‹äpšÄÄRëš»KÛ5TPºgÂÂH¶þq ÄÌH­&÷Ç `¯ß½¶k©<4ž•¯Üüµ~ð íôÓ0ö¶¶ñÕ>_ß´G‰kÙÓ&Óé¹EUC ÆjÆ1LRäM\ãó¶4E‰k8üœp –þÜ·ÅèâSÅm¼¦¥½ÊX¥V±I¶h¹«íž7–ÂÓ ¯¾¶‘AÊMïQÎE:DGÛ8]«€°yåÄ®éÇòþ_D-ý®3Š\¯Ù÷¢¾iF¸A!íâ°N™µÕ>е:'#€s"»*{:Ör6ËwϰQâÜŸÀd€eFŽÂ€n|+ —cÿ•ý–[ïSDÜq¬D»9Ýn\œT5E¬eîr}%Ý e=n©x=Z*Ó$øÔ‡Q"‘jBêG¡iëX‰©ôB]® fh·rÊôƒöƒIå¨ÁQœâI>ƸÀy’QŒ^è§ØË„Qù0 ã ƒ.}¼¬ìû ª~Ù/½Z›Ò–P±fNب_еÈ| ^ÙÑE†Èí*'F{7‰n®/¨¡ÛºaI9º»ËU™µ<ÿeÝàUð.M•‡úÅÞ.ŒüVgal÷´+9`‚XÆhŸØx]Ç@UËB9YÒ§vwNqñ¶û"Z$ö3f”‘sZ£ˆKó s5Ùô^=ñ6ê7ÛªâÅ3ææ;i,¶£AÂè³ä¶gî0»ÉÙÑErHaUg7N7¿­ðX÷{ÝïR´Ã–ðfòÀÄâgšü̦ËNÅ…¡?¢~îµE¼ÔÈ]T¯ÂWßïÍ8ôùµ>d5ࣣuø»úÄ´Láµgëö))êd±± ø“í£FEö!ÕN¯æ×ü·ÊÂD_ð§ ãâìû£É­uÙdб£F%HèØ Æ={·ÞÅf×ÿú¬­ÛÙôFžf8vݭðm9úïÛÞ(á5+um™ ó7@ü¸Ûã7ŒMÏzçÍ³Ž¢BIaÆ’á‹ÛÞÂÔ«ˆGü"ÌÜN0C‚Ö¬,ÔèZ,ÙÝåå üû\Xg9{5V"Yôå¾áe~ÿk·-ñ€¹ûn&߬¥ýÚù®ßV^%%!u]ËdMFœì_§öºDÝ­á[¥VŸ6í¶¿OîèeùîµÉ”ð_WoIVè¼§æäZPÑý,‰«”.mÃØMÄÁ¯ýäJ è"ÙÑ:ª,—·Ò}Ò¼ŸjûÈJÇó·ÆAD‰+ÃØÌK+W áñ;œ²e¯wŒÊVßôëë™0ŠÑà~ˆ9ŽÌ~ÃŒ7-Îõmg϶O³&¾É;DuãPZÁRggÏÙȹ]Q‡½Ðî,D áj0la#–è26WaîÖè‡^Stâi˜ÔRM»Ê 2Äî£9[gÐsLdbÿ†ës¯\Èå¶Lò nŒkaœÆ /=h‡­î€æ{K_*·¿ö¡Oc[›¯H§F³öÛVžqoö-ø¦~!·­©÷ŠÿÏ:¾#{v&“,ôh¯G”øRt×b~Rá; ã5pô¶¤`Uæ~‡39,tF[?¿ÝET|ÖþE[‚õ¾Kv8‰t)o÷.dÖvXçYP>rÿ©%L0ôä á…‚¦ÑÝuÓ寫_ʰ%Z'ÞÕÛ°M&L÷Þ©FHÙ¯RgPɹ‘ǯ¹FºJJ¸[sÞõä?H\á¹Ò‘u㳿ÿ—ßìpøp'æ‹[¤¶‰Ç7ÙÌP‰V„$ü¥:¯ì]øøÂèV/Pjú‡Q„½dýäf)u¢ ‰¿ÕˆìñxýÞ”Œµ”A» y¢âÅ”‰²`îA9àÏ= ؇“´Œ&ÏßôßÙa§jìsŽ69)ðšm/‹ñ0 =ÚðW#ŒÜŠm¦Ûn¤ á¹o§sîµ½k-Çï)˨™öq3Ô*©ñ>6Ë0ߤ–DºUü‡·[ÓŒp4EüåCÕÕå+>±m^ïÖ/&Ñ62~öU?×'S†S¨õËØYO·˜¢i–ˆÉ’üyãÙ5–¥töj S±aî/|ÆùOOíŽ9>–Æ5® q‹Mcúˆ¹gÃ#1'ÆLëÙó[2(é•)&nçŸý0|Ûo×ОÔÞcú_x!Œú¢ü·‚:äWñ *_Ì4qF=jBŠ|4¤A3>~Šã5#ŽŸ„Qõ‘•I9æŒTmw÷ünÂû¿×¥í‘Ý‹/T”ß?LV+zÑ^©šÏWƒ’ª©ÃÛt/ÙŒHn\-§i{®Þš£™4c1K½[^}4m‰c»}PZ:ÚɺýAß`oÂØQiC}Ú½*ÝcëÛ.}Ù†Q ÁhÔXÔÛšÎE™…Ñìåн°xÑÒ"wzíp+‡aض}¾M—´‹÷Bs†Äã:ŒÐ•jÞÈ!ÕݨÇÒL¶†(žmƒsX¹=¡RÛxx%ê6#ƒß–¯£Üh’øçŸvXGÞ%ò%“ýBfcw~úêTÃëú(gÖžÎ{øëtA›¼»´4·Sûñ¾œ~ˆ(GŽ’*ÍoáWæW§kV ÀÆÍåN/À¿‘©o½!'ï,UÜ/À:ð¿ßÝ_>3»4Vßff¥Ç›À9KP-м{Øß6b­ñ™;¾×°T|é–m‰ß/b@Ú=‡‚7ÙÛ„v 0ÕYƒ{ʇéKêò¼C¦€Ë~yÆvÑxAbà–ǫܹõ+¬œmû­£Ï&èµk£öߟ&Ü2JæÓ—´å;°w˜ÅŒ7sCn8Ó­GÙæ’$LûøÕÍmA4RÞæ ÷Ûé7hæÓe5¢oK;Óœlè7€Pa Ÿ~ú‰»iM”ÂÆP¼»èÊÊ Úõ°”ê/<ž:ÃÑVZn\Ç-‹,žšÛ¦/bT‰CÙ5^{$u¶Ú{ƒv÷Å~á#óiȈ›-ÿ Çgöo8>‰­ƒª&íZPû1-9³¦ìQ×cz)x±Á ñÂñRذŒ\!^I÷Æj×™âÏŒñ“ŒŸùÿ]ŠãtžÛè‚y±z*Pfó8ûOÔŸÜ©?ñ?Ï0xiOèˆ,úÔ£N$¹òHu.ïÅ.0ÅØ5¸Ù÷O09E›\ðŸûz>eý8-q<}-E‘´œ±ê$…C{)þÙ¢{Ÿ%»'‹i釢ݖ¼GvˆðTÃQŽÚ{t)!›Ýa³mv‘ô&FòŽüR]Z÷¦8©Œë#ˆçŽ#æÅap.L­ÉáŒß™š“¥ÞQk·® ÛÊÔôƒžÏ`±5ûG{Ý9hj,ÐÍ•üzæNe÷‡f{I²|õÙ¾3Ö}OxïÌÑ¢£/‘ÚD{öNŸvÖkFê6‰@&¤,,ÿDHá]½½«úc ©CndñÆŽ‡~µ—F@ƒK¢aÂ[YÂñר6IÍ4Œ"Ãç …l»Ex7`º’ÀÝ/]RÛ¶÷ÛqnÔÕE~'§U…'âyÖ‚×ô^HÂnè‘`) +Þ ò *EB«ÆIÍ/‚»¹½ñ¨rÔŒë.S£6hrñ›Ùâ·ð{–³k¦¾c|AC9ÂOgeÈ?Så<°‡Ÿ (!PÁ\ÆšíÚK;öe±xZnÂӒY)1¼™/ŽÎ'¤Ä£ˆá3jB¦‹“²›Þ%ZÇ.ƒ37#8 JÜôƒ£È ‘Ùx^YcÛWlŽmˆv¢Ì)Ϋç NËɵ.&O“­U5ó} ïëèdâò›q¤ ym~Éœc7ˆï×ÑYÐ-²W~p¾åG³w*{|„wýÄnZF^€¡ rÆÁ(5•ñ)Z³]È‹ù¦ £'üèü#Eåºh[±èô‡-ä‰I¨/ 1¶õÎOéjZ#Ð&};’?æ}¦5ªç|£ÕÙÇë.q¯*:YØÅ8»ŦD/2×îiâê£|€§ýŒ²µ_8U§oTø¬ (ÜôÒ(k¯WöHŽ[®‚Ûs”Àxh5}õéµcŸ_«5·Ød›U¬™M€ãÖ-Y#о­®ížAîîf§[rs€MSÝbhËÔöLV2uõÞJu<Ø[XWwß믺äÝn¢±¡Õ oçzœÚÉ ©ì6E²§MûF‹^ä A}‚Ômvê¡Ê¡½A¼‚*3ª£i,¬„®•Â#¸¦žþþ6Û=6–s 8ŒM#÷à€€þ©ô¹,˜g¡Î¨wz±;¬Q”e7ïK¶dð¾ª&Ûàîÿ‹ƒ²]§,-š/áÊ žŸ*oë—TXæÈA©õN÷§8G×_qÛo,Ïo†‘ä‹€ÂZP¿Í[·ËN!€Rÿ^±E©°‘e~öç,Uÿµ”çX˜F‹“9ƒ_‰‰H_“þ€ç”ãä,i¼ÅdùÎ"vNúá‡È6-ib3¿Å™\¼FZ5‰àedËóPŽšyÑ#Ï”oÿœ/7žZ¼ñî§ ‡(LM®a.ÿE“z[Ñ—XuÇùK«ìâROˆêî­rôèƧÖË]ì;ô¿7Óä³"b%§«ë͘Á•»ìùœ‡6?¬ÿ!.7Ã40žš˜–J|´?çMµlóÒLnÔ3 ÿÉbù¥*/â>«žŠ~çËMb Lþ&é¾ÚîÔš-z0b™&\±ýhøÍMÛÒ¼¦(_„±i£¡Z¡q!ÏêçJ0ÉŸá'Ç„rz ©$ßg‰ÑìN%ÇûˆvŠy´N€ý&‘œ¿²½n‹AyËsúÞÃþcŸE{nP–>¾zùúâ’­ùç”bâÓ^m cáGšydüK®ši>U¥µù™\ÁOà=áèôhêð¿Ë£âÜ0¼€nyõ:Ë©‡ñE|˜c­ß|q]¥eØú!•¬GÑcQš%Y'ãÍÏ”Õ9j'Á¶.ášÌ§[çðÿ8xÄæ0oƲ\±¥`¸)öadË#«Í·/Œ ÓÐiŸs…ât¹¼4óîÁ~º-ï\ÕÁÂJó±ËAÈrÙX>Ô ³"?q¦Ù‘ŒNz–¹vÙYâÎc\ÖŠëÀ`&¦îWÿõÃýŽÞÓ’N P¾ütF%;£ô¥rÕFÅUÝØ3~ï¦ÿ¢C PçP#ÈDâ°éNŽ7zûI¦¼$³NsÒvRÁ„“ ÈŸël#[ëž¶³SA§ÂcÑn®_°Së )9‹¥E´pÎÉö%ÃMÒMN뢈%¢ò"¤ý#Ï€²wüô°¹¬Š[Tô‹ù©ÌOृë¦Ó ˆVcÖÑ:Îuƒqj9k» ÁÙ<"[ËÙ¸ŒŠÁ 3 †ÙŠÀ[-q\fVŠÙ&‘ކÄÈ`k­Â“ß`’qãÕ‡nu`fÔ½8])§ÈÌ×3m¯‡½ím¹u%zªu%’Ivª3çddȃԅè/f‹ÙœðU:¨\²øpCE@>¼¼f,G(?Í«×f6VÁá.óI>^ JQIªÓ˜0¬«º¢IìØJ=åªP bf/ÕçÈö¨¡·50Ó0­Ìáp(ŒÂpXèË\/ˆyAP´_…Q4ÈÛYõƒÂSZ.Öôœ¼šª~dJÖÚ ¹Â¾¢9p˜õÍY¥>Ïv¨>¢0 ®Zïþ2eƒ2á_ÁsÌo¯[Š+®·þÿ"HS´³ FÝ®?Åæ ,9U)p$¤´®ÕÁú—aˆ-Pþ Ä‚R™J÷–]íÖ©Wdg9m¢1(÷ª¹Ÿ3 ùmÛ×Á´èk˜0,ß~³Ð®&“†÷@f˜}ú±Øi?Êt"VoÏÊ|½·W\ÄTX|­ÇíÓÓ+ûøÁ|O1_IXíÕ'o‚q:=c^N Çt¢ÐÉ`m;Œ»ÉÑÕ&¦¡äjÐt»É›Å]‹pC¾¹ª·ÃìÖâ±Þøy}Ô—çÑóywº[º¹¨½utqé9MÖ@¹±Ü`‚K<‘ÉÚŸ;Àq¦NRi\à ±†»­å[áÅ úM 3¶‰-_bCg¾2c¬=(Ö²”—¾¼w}O OÃÕO<²Þu˜3›X¹7Ñ7xƒQvËqWw¥”%ËÁCé¥ùó:‚â Ú˜-¤_Þ<ÆTæ³…—žì\3t0%†‚K÷Ëž˜no(Î(š¦žÉÀ6ñ zŠH¡_£È­l!4’VŒÈׂZRÏ*Lnk;¨’G‹€.ŽB®—72šOÀ1ѵ0Fê½`ß­rÑgð'Ãü± Z?†Of©) L®Œ‡7BZ™‚-R{¿¥OúÓoÝ_ܳܰ5ìŠjy丈ÝckËTEè´úùu¹èûrFØð4Tg¼Þ¾9´<ÌÿWV×úí£ÿR2.þ­,Öš 1´k0„J'àËhxa´›}#@'QúéTáuAs}õ·Ùr/â>ÎáS6×e‹‘‡H#+—^,ÆmÅi‘gå( DZ—†Óù?=Í»-"e ˆ<€çJ¿†Q‚x`e‰&¼¼®€ISqyJ‹ÈÛÌÃ‰Ñ qan>Ÿ@Æ^ÅÒ²« 9Y+Q,1lÓP»_0Ñ]¹N4ÒNÍd.w1HÖída~¡M "?¶Mt–Dê “J?…òèj]C^E6í“7#ÖþÁí)h‰ê§™Í-=d‚quš‡DÔÚsè¯$ÁH?ÒŒ{U†'ØEÖoú¡ý³„÷U7¡À Ù\ø»aœOÁïÅèFûžèè´;eþÞsQoiL„ZØv›\ù:mÖx8Æ|¡“bƒé3ÿÚ«®ÛjóºùåZhlå Í=¬ ÄÈ( ã/Ô ¶³ `aȤ|¢ ­OÔÚ’Ú•÷^ðõžQØ]L×ðÁ­·m0Ø$oçÓ P¤Šÿ½fQ¢Arý/% (;3Få*½³ðguÔM×ë±å1¶à, YaO¾ `NŽÊèYOÊÃ`º…I.ìLÚká¼½Üo¿µÍ ºÀryR ×§á Á‡` ŸÖ!¼–$õÕmù·„î–í¶l‹ŠþÊ÷[J8…ÞpÒ}þñW,1ÝÄ#¢òÞÌqì¶xÏÁÂ'ãr„p[dÏA£+­~¸å×ü²"Äj{] hp¸ÿ£¼ÆWsëMÎUx¸ %£\$6¤}©¥€BÀxHk{¯«Ë(ÍîU-3Ú~[Ù^q»öî§2LtÁmÈ*ˆïÉgéÔɦ-ïÙU¹à3ÿ6 ¨ø ô$Ûä÷‘ žÆ=}¢Ö,»­•nû§æ4êh«zzï¦^Töüû90 {U={][ä~ŸÏ‘ g «¾˜ýã‹yrúÝŒÃËÏÿãCer¦âñÚÔ@oâÒýtO#«>°-C—a?ÄóýAK‹s4ì—ü3ôµÅCÅL q 'Ýä£WÝ ÙѪѓµÉÇCdH‚é«W»l¢ü–U!G˜’ öFüqóA“¿©8îW}fÜ:˜å L¹Ê±1o f»@í­°½©pMôÖ(⊙ÞL¦…Æ€”þØáìëX¹M<9=ë+ç¶ñ9ñÏÈ„÷ŸÛ‹ÉÕ5B»£+ ¡V7¡ÌrÎiv–M+ h•pva´8þv—6Ý€ÎRCnD zF¼}ðvW>U£Êá|qSÞÝÚL*Y¦iáÕ‹=V}pGX£äôº’‡¡X|t¸UÖ£6¯áª¶¦DP/=#ÄNP§“V}oGŠzëyî·ù‰ÈÊ Î£h© ±ºr˲³£ïÌñœ×a7Ÿ6z[‰ÿPø¯=GÓc ¨[GÏzý³Ó,n[HÅV“¸¸¦VòÖl¿÷Îc¥×óÅVhj°º6 ­õU½GÉ IxYŽô;Xìšòe ØbÕiy=x4ÛqïÒ~±ûVPßá 3KÞ Ä'ž_[,ŸSý×>Nýé}Ï~³«ì´0>>6¬â؆Ðê“¡à[ì¶7`|Ãsx÷Æ!¿$ûµ ûǬÈIxŒ‚c]¶þX¾Âû.Ò'l>» ·×¬¿ ïÆ¿Ýßí¢ ûd§Çúºm>S•9²AÌùdzÒuAøÍ´Í¨fê:êõl7ö:šÒ#alå²AÈ7ü8©NOÅ2yÛ@Wß vnÄ׊3Ie±÷‹ßvVõì´ÅûìèbïFU{ÚÅÙºlZ~õæî¾P|Ø*ŒzÉÔÝ ;Äl{¦§j|Þv MäÄ"õ-­6G‹ K§Š¸Ï æjâ"ùÈ´_Zû†ºÑ|Š8ò6¹\Š—½Qæ‘.ÐÚ×½ö° ½åØ8ظT3Âú*>TÔtgkß’ÝÌé 4ã(ꯆq|yÔœå("ªÞðÛ‘æ×¸°@n_g•¥YÜ6kf:™qE”²£ºp~$Tt¸.Ñã‡+ƒD†œ‚7ûE j2ÀÛ『ŠêŠ:¡,Nùx*x×—»1)Œí+•%ËMá3hŠ-òõ¹;]t§:3ß3íÈ~þÓ>êõÇ„e;—ã2©0öû4ù³êÛÝ0 ñuDwl5Õ{5>Õº¯Ï­Ch.~é¸J-wÙ¹§xyJÕØò=ã[ò`‘·(ÝòW1@~³hE²·Aý”f{˜C˜S–óà¼ã-áÐõB^ùëâ]ßÝœaçŸ[=eC_BçOûQòaö*ÈÃÑk6õé•Û±ð‚8¼(ß¡Ðø… ¤+¡ƒ’Ñ$vT×È D—1µ2RdÊÚ¹*ÔÍpÈŽXÜW•íïrŽñ~ìÅl†Søï#èe;JS=CØÕ=¼pR»ˆÍÉ«ŸÙ|su}¶¸\™•ä@³ ÂhôÊ×Ñã2Ü· Âº1X5Èc³ð بv¬wmé4¾»ÇÙ†O˜¬Ðaº)uÍš‹Ö¯ÞSÂBU›¦©Ž|1™×QuÖ%ª>5òÜÜF‰½£дCû›u5ù¡ fQÝv4<ÇŠLlz·¯7¦5´e…ªiP«•\çMív{ö­Ug*óÊ“cêO“F¢C›Ž©bãCo³ç—Ú˜¼Aõ‰GÛq &VòÐséqD<½†²4 žÖëhÏÞEœäaƒ7$4°=çEså Ë|¸FLŠphõ8Áï+±JÑè¸Hϵ\,M7Z'Æw)?¹Ô\YÉé³ÏI7Æâe¬h‹/ó¦eJ,ëM4cq)ü8Ð8i·SÜÖýŸE‡‹k›AnÛÄ@*¥2–?¶‚ _/ÑEÌ?§ÖP¬·ÒDïx›ï,ª65¿FŽwVýJüAç‚Qž8ìŒ5™Ê\à`ì¼k'|W4¾‰cª}1†¡šcÒhœnéIzY2iÆ*sàM_Cò½ë¿UŠx²`:ñ8QEs£¬Þ~”élæ˜í2ÌNU¶šáµl=L‡bÝp<Å2sòSçd¸AøjÜUßö˜=Ô$ê‚oaYÙßš½"(B„¶¢ÁÊe"a˜Ý¬Þ_%”ÓÉ.h·®bPW•¤ìv'bß8½ˆRÅyô"»6b³Á¹?ËeßMC…:HöbŽD\áÖ(AWêÛF•(zÙÙi%ŠFà×^,ÙÓ·†C¹?@8í$‡ê2 ¦ ÆÅÑãþ;r‘J0 „'LN§¶{¬O®¸Žì`rë€6w×Ü³à“†þduìÊ‚æbDˆÇm~Zf²·•yf´‘'§"[„\¨ů"½R8€N5R~g[U¯ïê:gqŒ³ËäÖ–rƒòéA=æ·ïÀe\¨öì 6“#-‡0c( :†Šl4CÖÚF…<05ÒëÕ{K»š¿3fÞ®,cÀÊ7+ëò×ÈxîîÑâ} 6h ,vÝ“q/>âö!j SÕ¸üIÔ¾]mÜ¿›òŠjŸ{uùs<>S#œÛ±‘½½Ðúqîe(‰&¶aš Ô¼DT‚“„Ö¨8F*»±“ßzºë(ÞLá¶¹Oªœv¨û™o±Ú:,÷E[‚Í|5ÑV/—Ú¬)¢â‡D’ªk÷§Ì³Ëobæ0e´ð C-EhÒ”š4Ëa! ÉÕîoAM† `&àÔ6íD,¬Ì¶aìdõ²x%¿ÇîóêÛµ0Ný²#ÈZh-/@ÛÛØ¦l“é{ê9…,(¤?8‹‰²ãc±˜ØÀbó±^Üi×ZŒ'·µžœ#“ó…±í¸‰¯\’£bžWò·’0¶8×ýÃEõT/)A=ޤV¥Cù–?éÜú¢ZfÍ—¸tvÞ¶ïäfËxlÍ´ƒÙ÷»ªËNDgÅèÐãÝÞÂÛ˜ ~ë.«0é:Ý]Ÿ5a¦CS¶ÏvÓ£¡àÉêάºr†Nð™`.®Ï‡ûØ}ªÊsøUWù dovÛ WäÈ2(tÒ>h;EÔWcîĽЃSHdÔ™ô7·ÌQî³?½ÑØ’;\¥Ü%œ/5ïu’H‘Ö/y[ìfÈR¿2hØð¥Ñ\w­2䤈&|¦Œ¡È;iîž©NîÓŒ«ž8] }ŸYõ×ek°¾†õy ¬ÉW÷o„QNšpf²†Ñ%Qº³²ý p˜ƒAÒõ«f?V±#Z‰œ)Ï¿\7/5a/rž}e£mþܪk”¦›¨W.M6¤)þ~ V G„Ô ‹[v·£¢@c†ua5"Ñx¶ø*'ÃÍs=‘èšoJhz0\,4çéoô „’aq'ˆ* ¾÷d5HiL¯„:«¯Qƒéò{É|X“¥màDï(ØÍ¯ÒŠ'Ç¿ëkJ?¸·èõÖ¹õ ½7Ê»Üùi/©S‡±)$ôÖ¤ŒÙC]ÚB«oæ‰,²AÚqðbo{ÒÅ]cé…‰ñÝÓÚNúRÍÚq{Ê2©îŸê¯#òŒw炽‡6bõÕG"nc±.>ó(Œý; 9yo.È(qNxapÑf‹þY”ßyg•=§±kÿsɳþŸ%ÿÿ¹HÞ&h`“1e&M ¯þ·;³Jl•þ˜•þ8+ý3TúËbîÝàQúŸJþ™—ü³ä_çZÀL·ð»¯…±™ÁK«–°¨ßq_/<²íÀ;ž<¢š`,¯˜ù„G ´Ĥ]ŸÁПKò¨î•pÊê=“Y*{›˜mw‘^‹–}"]ËÔ”ì»Æô ¾Œrû^*`Mê þã²Hsñ÷” $Ó³p^Žî«Á k’?ðØ ºOˆ,£)’‚m'­Ñcô¹vjòj¡Ml!Õ"óÈ„V» £d•Ëfn69„ÈFXš19e¿èÖ¹CÓá(¿¡€+úª<ÓåL ;’¦ôðò«ÒÚˆg<ÏÌf˽«¦ç–ÄÛï¼ÜíC õ¬H~ß½“€q±”âVŸß”Å‹¯¯)Z@)nYÞÁ#Œ™ua[PÛ{±bæuED…¿$ô_%“ùmEû$‰*‘K¤Q:ñqzfë5µÍÍ+õÃÞëO”N^˜}ƒÁVæ`;9Ê€ÍÂ4!Õ«SwË0MW>b;PŒùõõý'¤:+`Å…Ü•( ±}Ø; Z? chÃ=o©×¯Ý˜JwãØQ}!¿œhïºls6U©u2LËÐkI¢–Œ—^xüÆâ?U”ì xÎÍá)ÛkVúCXV$‹™ÓóðZ1GÊ›«¹¥p.â~-ŒÒ£LaâÉÀ² ¢¸Ç”øëÄ(êÀÔ±ÇãÉûE}~ª/9îÕxŸóP³¬ó=A}‡O#/þ_:N,ÿªYo§§÷D’…ÄDðb«d8! D•~ÔZhíL7X=ÒP²06)ÏŸ‡±ÙH–¦^œ°¸vlRT¥ÄZsŽï ÆÅ.‹^‰ë²Ô«“ø_}ºx¸aT‡Ø„»µÔÆ•÷2 ANÜÆ øÆç*Øè:†±jõß°g‹(0vÇë6 -°¦BìÌžMßD%ý¨•8®ž-GU˜#cü¼³uËêÇG{Þ‡gT厲zWõcËW : ,ÿ$óPô‚Ù%CSï¦-0ÈÆªßxÀR™#®¸ PŽÍÏL«^Ö*‹€†vÚRM}ž ;wÕ}¥¼lUâvÜ ‹ ô,­¦q”Ql'Ã×–ô]ȵ8n˜… È‰—肪Hª¢áóT´…>¥â`6Bx¦÷bXöY×ø°‡l|óÆ#ÊÌù´JâWiÙåßSP°: ~'øæRy]*™3É€™ŸŸ6}>8 ñÐQ¸™MÉ¥û 'O´8Þ‹f¦àðY}Uo¿Ê¶Ô&»¢Å+)w˜œù!´—*þuåi×Ù<‘Ìì«Wùî!!‹ÉtMÁzSbËÏyC>q1*Â4ë¢ÞÔ–ëddù£-è>¦¢Ž“Á™æÖJìç\|t({Ûnbé„=WÔ`ŒËhã2P¦mØÈ´½["nÌ¢7ZCçO›Pé£é·JçUqå({__uµ ýüê•]“š+o7U:ÈZ÷xW™~È[+ ÕKŒÏò€K·ó‡13>™¯ G>pGËÚ?&-ãÌ! Nb1ðZãËKš¬5Æ‚•ª€&Ññ3ìÛÉܺ.°1J·¨îÿ˜ ç«QëŒ )xuÖ÷Ò̹ë8Ôù=òqé>'2“+õ´W~B±œËZ_^/ÃHã§`RWA´Lâ faRIš™;-ÚJK_ªe ûŠèlÕ@±X6ÁcÝæ OZ å£È¿èäS{.ýÔ?˜.ãìº\…9-lkØwvÛ×yØSy¡ç¥"E× Ð½áOú4ñb&¡tTLcçS¨åË$&£‡A¦?!;[ £×•÷¦ö#sú¢nª>C^u·¨·Ñg8T6cÁcó”Ž{—¬ù›;s\6ÛÛÔwöú`b½#6Fž[²Ùe˜Ì›D h“Ý?É_dO,R;›Á"ûDMॠVŸø<˜Løý›}‰žÆ²çtLå&÷ý#šêó­ÓÕ‡ûu=mg)ø¶¨¯c²âPªÁÙ]Uí½Ñq÷Lÿ«¼¹[¸:K$6MfƒÖ‘m$Ôås˜Ÿá3+6Â17¹%êºp87\E9C§‹EdHbþšo A¼q/󾃯kuÆr&ÀaBå,Òëªíœ–ôœŽ²ëÜP愤E)d ÉÉK%`½¢¨®ë!æ 0 ­¬io©.&øøøAóͼB—Qõ¾YöÔQ»r²+WŽû2¶¼£\Â6»¥ºùUºJÕ¡:+(!7&§;·å¶1·K«£èÕ*ªï¾Ý#¥e«[ºd‹ËqÀ%Á`ùažx€#žΠJŽò‚FAVVíz@4ýîâ¼ ð'­ìECTÎî*Ÿèºœ§‚w·ƒ5õ ÝEzã×ï´-;L£²Þü4®ÔÁ¬×|²j”Mæ,”øXPüÊJAQºÜõ±òC\qßܲWÍ–ŸùëËìRS¤‹›í·$⪓ƒEÂâ4½VQªÝoXðfb^±ENvéado³GÏHJCmÖž‚8üXÖ)êa5_œUéëØFë¹Ð! õ¦S3Ù«EÚoˆÀ(Uõ4(Ì„§ZäH¾mä¶Ïñææ) ÅN§7žuÞÚ§·€#˜sßèAz/‘õw/ŽÚþ‰2È‚R—AïÓOÑâM¬ù,.•l(°¬ÑŽÁ)¡­b6‰Õì'±Ø{Ÿ Ô”ckX¼tهŰV³Ýë7ìmPí"VIÏkX„%dŽ–¼Ñ¼Æº½P.‡$8Õ˜ÈÃ`·Å|Ć•Ýœ <.¼ÐeuŽ55VTx DHímñ1Øxn Rùxçv*ë‚—AÒ g]Ä—½9ÃÞ0–vùĬšÏ]qê°S<™N(+‹yy—²è·%Ðý%ŽCšs'ˆêÜB`[g‹î\ÀZ^3u^‡I<ýáVßái”m¥¤»ÝÐÅæRòÃuYy.ãÍ]³Gjl6÷ß U8pˆ[%ÂÚÊ›wù /6œ·—J'ú|†qwy(ŒSÚTñ¸£–ËÍHAKTu¯>(‚<>™œ"WÜãÎçæ¼ºÏhû“ÁÒVýöü¶tdn·´¦b-ÕÝ Ç$ãô~µ`0cá³Ä™Jr7Ÿ}PXF®Z|ÎúImÞZ§hc¨®½ÓöŽÍªÄ…W9ê߇::qsÙç2[¹ ý×|z˜ºÖ;ò'Áô´¨V‡i¦¢*Ù…þ¬îý‚A%v¨k¸}Š0NÞk“Ÿ^íÆQð˺îà6èß×}¬ÞÞõ μ £&2 â-g€ a³kf¶Gí ~Ħbe‘¾?W í";ðh‘À{a²Ÿù·œ´Ç²¿ÀYÌ¢ƒîuK·s;U×w¸qNM0oA$ã­»×+["ŠÃ;t^+ÂV:΢æ¥ëF@ŠÛ¥"ý5U(ô\,üš²…>©LòÆ‘úe…Bû® “,²~k”g˜u€\ÁfÊÕYÇK'ü²”ыٸ©Ëz|RyÞî~Å&×ýƒ£ÜÏ…Éò?û!Ù/mƒ»)MÄ[ز Ãq¹w‚¯ñŽ™¬èÔPø?Ü¡žÛàëáþïR˜¨¡·.~oïkœ\6³¥-éÉm:,.Ò“½ŸÍ¤ÖŒi¸ðÞ\½öHê…%èM¿8-{Ë­—ÚbNé5Ò,}#ìÒdŠÑßeiñYyÊßÄÛÀµ™B8®Cæ°ge{Œº\öžÙ¼h,6[M‰áúqñ#«DÂ’iÖd‡êüÑ©”Á4w˜2é.ÞöUv*HðU?µ-3 P1]%Á[?¤šª*ñÌ4—“ꮂ9…õ±Nÿ"vQ­ñ½ ùúæÜ¶kf› ÄŪxúúæâí`ßtä™pîÃØ7°½–±2Kä™3DU´…'¤¦5×’M·÷Iàk¶NXDgŸÃ"7Ÿ¸/ã«þÖÞ\|Yv†9n^‰cGEqT§²Üð°ûd†þãÕ¯•x5ó0öŽÂþò {Ê^†¿ruݶâå?ºéºJyEZ­Ÿ÷»ßcåÇñ‹²ÁþãÕÓ¢Sk9ß¶§‡£Ä”úB¨I#°Ð.èÌü t¦RÍÔõÁ–t•%Þß?¦H²E¾µ`Ù¯ÖF.lS•>¤÷n¬h°Ó®¼øF0%uT:ï)rld(ÊFv`ýÔ[ô8›®óù8'rèv ‹æl”¦Âf˜b…½¬Í’ñlº¦ë¶ÑéW¦à'.O‰£ÿ}4Eôª…0v-ýº¿Ê,¥åmF€‰m¤w<˜ˆAUb[å'x.}ÄFL²æ©¡8\uëaów{Vdêø$œŠKæ6‰^åoée`¿u»ðOÌÚ7ó ì'”ÏYBг]þ;v:Fòqɱñèw®]+˜ Ò&˜€d›HÛ ‰7dö û‚´*ùßâ‰î,²+^É5¸M¯¢ücÇ¢#ºÝý^¿‹èj®CW3OîÁ‘.ceþùp†gmkC˜~‚“Í­Œº&|ò_8:ó+ËAV˰ !¿ÿ±±C¢j‘Êýä¾b£çRf¡Å„šsçæv›¶¸»l·sÇ'ÿ2Æ!MŒ¯“|‚|2)þM§tšNþÏ4Áz¤éÕP\k´CH~ÌTLa‹ÔÕJ’¦‘ñ,ÈzàL[qz –õË8}ª‘ÉcÐ[<Öïü5…ÙÀ\‚¨|Ã{¡+»0ê´†ÚDQ]äÖ‹ÓwÁflÙWR™kž+_sÙŒ¥ti€öæäïì¶Ì0MômûAÏVÂY`ïØqŽãc¡!^kYTØ»Fv(›\ÀpÙyÌ s¹¡Ž˜—0™šwD+sIÅ”Po ç>aà z'¢l3ŒƒMÊÜ_bòk±^q˜°?¼¸ÕeãÎ+9¥”šì<ç¥Â(`ƒúödeK©pé)t牧ÎLSŸªþÜ cg ’XòÏhüa”êeôÚîˆÕÊmîCKG8ÍçS£PÄ”ÖÄŽ/T07#—HÌ–Òn_æ¹=FM„XÁ®©ÜÜ| ð¿)xÌ[ù&JŽn<š]©¾> #ƒ þ‘c§¸‚óæ*Äì¨Oïœvq:Šr2oe}µ²­…—ãúïC¦Qq ÒÆ—µå¶œ¤Íg²:ɧK«B¦HOÉœtKŽï=_ LƒÈO‡‡Qˆ¦ÎwœÕˆGîKÐh¥_n}sl–7·¥=ˆì»â«nø@¢Ò1÷TÝfc+&ù¹Ráq1÷ ŽŸTÌPvw ufm-kºÂ+·‘¸ÍÔÍ{7åU¤™wžo5§?²zäHs鑃D5•˜˜5ÿñ8LKy KÄ¿å톑áõåQÙ2+èîš§w´Ëa×›Ü~Rá½ÞC§˜sF¢KïþœZʾî¯úóÔ§QÕ#ÉqÆÐùÖò<]“ý½?Šù3Ê™œþ}_›‰R¾<x£T9EsHÐåaFƒ‰­0Г&"€ù5Sö©éùÝXŸVù-¦ Ïñ¡ã²w? Dí¥0ŽmîÓݺ`^æû~œ8”úõN ]f5¢ `Vjr‘AÊÂ'uQíÏ·™¥v©ïAêÏš7“?ܣÉÑì;W‰Úv@'©£>×õ6‡aô çšE û±ßèw¹¦/v±@{áªwš6#›¸Q‘•ƒ¯ÚyÕ_Ÿp3æªD¿o¨É«Ù6´Žú”|Nî Áò†œY…“ßjõÝçÍ«ý·Ý‡Û1¯çÊøbãIWæõûÈ+£ %µÊ >rŠæ¶w‡AôíeQv°À»Ï§h§žÿò`P=\ ;aÍrá›uÇ’²Å£ØÂ³“ Ð_¢1úh'…ô&¢¶3·J§.q~*¢ N{ Îé€Ë©–OPØ¿ÕãBá(yÉj+…4…Ê6[9G­€ýLŒÇ&}¬Y¼~lI~rº¦=63î‘ñøëü³’©Z‰—q•"1€ø%ñEæbí6Œ¯”¨V9†™­§ÆGZJð¨÷‘¤•1“ÿjçm²¿’˜ &Î' ¦°ò'ïC¡Ð2VŒØ„íá˜,ÕêäóŸA•¸[dãÁ‹‹‚ Rôëkµ×p–ˆÞt²ÒxKZuø¿#Gh™1Y\›¬‡Ëξ™ œX|~D³FŽò ¿æ‚|r§Ü-JͺÙuR£œ\ÛØ×­¬xªí‚\ß§;/ÐDÂÇ)ã!Qnf®Ðl{|Y}K,Â2SOcÀ¦¸¥˜:©„8a­kÉDŒC)#æY5§ðu‚½£ÜóÖû¶'ŒºFâ2gÙàš„©ÿC^m@bý˜õW<I­<¥ÍXg'UTÅ6†ãœª…^ (ó“Õå놪ý‘;Ìä•ûèš¼÷“åwì¾ ÒÃíì)ó—d^»¬ˆiºâïûv™ ) ŸTOÏÿU„Y¤±;‹HW†à«íÇb@¶0žÅ^€MSÙÛ ¿3él¸âqЇ¹afЉMû‹«ÍÀJºšòŸq\‹µ(yNb¬eúÓ£Á¹Šx´š»_ˬii™*²» £Y Äß:ñíEXºÉ4¨Êž!_†ÏŠ¯Ã³$ëôzÁ].n,J°Cuò*=ÂwwAìg(øÑ#Å#CuûµÓx{Û¬ürŠf3P­ôwÎ2bkt¬[eˆÆ —ÔåÎ,î„áÏ«–ëRZ¸§qä5OÈ‚7'ùH—°(þ ­öŒ+Á0I«;/ù,_i_ÕÂŒ-„…3vXd>‡;›‘9¹IK†ú¬ŸÎ¢u$Q¤È¬ª´š”¸(d.½ "š-1n&” Êlp¬l?q¢'$¼ýrLg£mžrHYM¾‰M×É­Ûoû•;b7Dýòõïƒr@ô_ØÍŒ£åÏGk2Ó,LÄUÌ) K˜óúÁÚöM[§0‚¼¢¨øéì™j)Œê8¤3ÆÄö᎕ódFh\¨ÑeuYoçÃÊs⑚Ôe‘+¯µôÊ“¨p¶Šç7t;mö`ʆîc0RRŸÿF\Ët®êtñTÛ§_¾ÚF]ÆÀC9[ì~çoNÀšEÕÇÌéâuPÏH_ì a˜· »>…i#«LKD¥1ÃeD(Å5íJZÖ:Œ“º zJ%U8$ÿQŠÑaäÏ8Á"gJ!¯ÛŠVêzŸÌ_~m=Œ}ê‡çka¤ß× †¦Ï±#Ó\‡kâ3d^ÁipÂd .âüæ>qp¬P{7Јðþ„«n”a¬Gé[»ÅÓ>ÌÐV/¾†±ß™½ìb¿˜<”~iâG ÙjÚé õí.سêu²Ðì=Fá ØÆ®©öwÚ×—ÏÙ1&˜uÄUQšvQ¹¡ùô+¨V ¦xøwZ›(0÷§÷yÜ9șھó ýüƒEâ+cðá‹ï8‹új'•õhigG?Áûƒ†rYð›;c‰“fæßtYd/ÇZŠÿØ–£s£`k¹-îgŽª÷KS 7Ø(0 ñtn]g R¤|2éõµGž‘ܰ#;YÛwXŠ~Úñµ¸}|0ŒøA¬®†ö”»òþyÊDü¾ú{KØû\[JŶUc•ñŸ 6X愲ä×#j_#’š3 ¹Z+$ä(VÂßñå ?!WÈnXí™Mœ¤ï|— 6'Ï««5b›5ù/ý²M¼9}|\§®D~/öAü'‹îFç”QZF®;Qãïþ£Åô…mz=Œ"XønFÕ·Ó«,õÇtR{FjTÂÂLq¿svQgaäáÄyþJ1R>qŽŒÒ6Lpï*˜ÙÇóu~Ñ bÈeû`ÞTÇæþcïTTòEþå …<Ô qjZ+ÕÍ;ÂÀn„4OdËsaT눒§÷•08ñM_#ÊvÎ%¤¨DŽØcõÒ çm„ÍK˜ËÕ©Ôÿ  à#ÌN¢È|Ë1ƒÌœ ñQ¿à׎Tñ6¬š(JåíiÛ¤lPhëOaœ’Z/݉|´WGÕÛØilL&·ñ` E âI{íŽO0.£²FN$ž„wB™’RÛX›”}…‹W{ýGïPî¬ÃàL”TìÊÏn‡±í%¼P–ñ'4\ŽoûÃ$›ë{&Zì:&úXkûÀØ$7íóųјcK*ïíæ% Îà®oƒxmè'aÛd't&a‘¯z÷Yß¾v,ðÎõ~qÆÞˆohN)<øÀ-Åov¬­eÐMÁí fÓG[2¥±ÃH£Ê‡Aœ¦Ã–À–ˆ þK÷X7‚bŸèFÈNTNãÖ|ñ7LÄ´° µ™ÝŸN.¹¶M2íÍ;¤?2¨,ׯ÷‡IH c”“íSN‡£äê ŽHÊ«¢™·ã£Ér®Ig¶)¦sbäÕù•¯§˜±Lª–AiÛœåöV-„Ìg™dßÃ(iàâ#’1yªì Ôãyº5r².…­+Õ¡¥`z°~Ú|ú±¦ÿ|Û³çx:D}M×àIêá!´¬©ÊÒLÞnØÖVÕÎÏ)×ydùõíô) {ÙK6xåkj€B´-"V4EM•ÚÎF™R:8rð—ìYåÂuÓVïJÛ¢öúAÛ™a %EæÚ ùò:LâŸ536å órf¶ÆöÜ {î"«^ #›¯™­M›’¼õœÚæYß󻃚ôsùÂ9—oNÿFÎe<ý7‡¯ç‚8”ʽWç˜ýâ.Å`~%6³¿.&<Íto¬•ÌB/ï#a1›Vƒ•‹N xýr¼ï’YÍqàCbˆ¡AX‡RC{ýºm»ç½£ìø# l¯Þ´“çUh¶y[ÉÝ/“Ák]ñ!'^€ø¢þŽé+Ü©8êsËø—löPú`t°Þ…e+þèÊ ¤}»h£Æjw섦‚©êñQd‰¼p³$™B2. X|ݽ0ž¡ý¦ ÊôÆÿ@.K¢C.û_¸X{?ûã±­‰pØÚýPý÷ôÒO)©dIìT²$Y}4K!Põï©dIêT²Yü/Ü8J,ÍebìO£ê4dèÐ9™*‚g*82ž›?ôÙ³Ò¸Î'‘0xâÅ—_)•ï·xFsì*¿àìe$ ;i®ÒÔ ­S»¦&‡‚L!õν€Q+üVõ¸ÿO—mY°RâhÓ-Ýô—~Ñûo°\Lp7Euïëø÷›gÅú¢3­"›d"¿ô­F;Úè¶snÇc;~×0޽Øê,««™J»¤Vl»˜Ml6RÎÖˆé5JX lѤ ÔdÄÒCQ|Pš˜Äì­Æ´< Ñ™Uk晌¥‰JWQaÕí­õ0¢šž§[_ õïE{2¦ÓT“b–ƒ€¾aYúÙÎ0œ¨à ° [À Þæ·ŸJôP„ÿëfëÿð0–Þ¥ÑþÔtë÷ðÉÚ•N:‹ –º`vK6am Èé˜s†% ȬÚx'Ô‘ãxØ=º.€Â¶äŒÐtþ6–´„Ïkü’%À•>é€îºp1ê€öjc²‰\¿Áá®1dÙ¯1 « &ÓΓxßëöŸ¸›~µž[ê÷ˆËìÛEwëï8DÀ”>·%öœjvZ&vì #bìü@ŠÑé$ô @…Æ IÐÌÓ2‚†8šr *„…š)BCëmrú½Ž lДä3ºÚÙ<l hòC¢ãÀNÏUŠÏOÛ™Áwsº&GÍö®sx}è´³ìå’Õ—§‚ÍΜ¾¯Ô¼®þZîë"D¤ƒûO§öª†–zÝó0r¡Zˆ F<Še`üG/ÉžŸ¶ÕÊ@‡mh¾ks·†àvM$ö³üîŽrÛdùgû›~KÙkãí¹ ÈÐmÒ‡F@f“µcïíSÖü ÅÚÜjóéá›C‚w¥³NÑ*aÌÔ« ÙÛq$êŒÒ„͘Ðt-6]'‚ ™že‘ˆ¬,ÏšŒBWÃm$}K[=†áØ(ïDïg/óiaR{¡æÂ6þóJ¼}V¿‡hù.Œ­¤Ž£·˜ïI)©bˆ—Ÿa+¼†1+?Oï¦mâå $MÎ_ÇÎlð?t0µlHÑ?‚ÅG_9o•ÚAl¼áëoÝAò†æ§0¸½Œ4xÑêÌ™„¨Ü½ Yïº_^ªCçÐ äƒ-câ5úļ1<î%ËïLÄ·4g‰?†Êb“°{ß«UßÍSZÑ/lF_RþðÂ׋ÛAdÿçØú, ƒîfÕ³¿Ÿ§j%‰z¦šÅøE5—ƒÓ·°Q(—ÖÝvŽ;¨õ*Ø!EËê®#—‰½ØáøSü@‘ÁÙˆ?+9ð÷ ¿Ê}ú{Á°nF» c9¨o, ±u<~hu¨QÀ¾=;¼<|ë°vEjoÚàt÷âþ|ðT–hœ ‰ì•EÚ·¼~ÛíÎÆû0©’‡`¢¼éµÕÝ?‘ºìÖžå!×Ùƒ v:Ôþâé®åÁ*òƒ?˜BY¤ b‹öW4Á›Es–W±R;±a"Nî+¨»Lœ˜/qiÖµÚÞh¦FÝâ'"BÉ™MÉmSÒo13ëÁˆÚÑï£Ó/åÃ¥ýË0Îþñ —E/áÖfÿòˆ’-­K/Êš7õ²¿Ø¿´íšMÛ~z u€N`§"BÛïË çâ æ”âõ:LÓ`q>5 Þ)þêLrEÑf~÷Ð6B¶qó­,Ì¡ñw3~˜š‹›£‡—÷ƒx” ¤8¤ÙëÎ]‚ð†ód]6¼¾˜“~G–ÑÓu7‚rÃüÛ+ŸŽ,ü8«¯-ñp¼ijšbÉ0j×c¯->„Ëe(ßDf£0àUNʹÍàªÊæa=­žùŠùþhù*l‰‚Ѱᔜ.:¸x,f †£“ã²óÛµ Õ™@w‚&ºÄC´œÊRF e/÷Ébf‘xT¢Èã|¦º;-O/'R§Vva”™)¸iéûÞÿtG²-|èþØrhÿóŸæ×ñåûFçb¹§0ñúþ–YF¡ÒFü´öf(³èk_kÑÌ jP….ñ²(7g/°¿F…ÒÕ¢àSJ÷Ìüå?† §æ1íŽà2°CœzaA|§·ÒYn t*Giq«½!PšJ|¡œ&ŒMm,8FŠ©ê¸Â5=aE+ÑôëÈ„¼qìðÒ\×0›Š³d% Œ±‹ƒË«ö›ÎCX¥2oõí|{´"‘ð|îPtšÃnì_ÎethÕQÍ/µ×º¶L—Œ†ýÐ8åyØ»<¶,G!ïï¾þ¦±g&ÙÙ¯;52N#-Ž1.8‡qç“·“-³ô’ïȻݓs©¶BÊû²YNÛQîÐÊÕs ælÛO»ªE£þTG,؆Cìð ¼·ˆÕàs.è/!„> › öêË k¤;¹kwŒºµ‰­@𲨱¼q•õ Öðöøsá©wàkçw‹c‡_3öo‹ï$XÓ]>¢-õô.Æb ÂI>-ÆGP³úÉG'õðáUœ„Çß±\ßÁjcsQ&Ñù¹…8q*sÎñ3™vÐÜÎÉ*‚Û}Æz⦅ZW£ó±8BnuSmØwò|®ÜØ>F:x²™‹ôY7"X0¦àb–ªnuföÝ×=ä¶Fñ|‰>åþ~ë8¥=æw¨µÌ˜¾;ÒSÄŸ‚„l!ÿE.•š[Ö/è«IÙ5!ü¯úEá: Ù(d*çƒp)¢¶«4ÒÖZ¾nÔŠ“3„½ ÚQ¾·?nJsÄ,OÅ!hÀv#ñ«H~ƒKñV Ž 9”ü²]akùâœêr­ÂƸ8×±Iïì“ÏúKD~%À\êeµÁt/QÌ(ip~²î_œÖ‰³ò`Axd—º Êß²tY¤šˆf ~D¶þàÊ_aÌÂ’tS[ô»Ìa€J‡TÙ³²cÝâuk»ß‘5¯E/Z7c`fºò&Á 5 1äZ©¾ið­…ø£ðÖ Ý'q ä–yÈ«k·&°™¥ã5Ž!ŠU&%e­Ÿ k„IÃìüz}ñIåÐ8c· n¬wf«{käˆ9 Ÿ¯Éçôø»b—cî”À§ÁoÏé –f»KÈ"¡g]/?àpWæÇàm­?ù™\h½þÞÎ^Ÿ¢`H¡D·âÝå` 9(rƲô™±ô`?EŒ3[œ¾Ëú÷+‹L½»TE(_{áû¤,§E¤Bm²8·¦ ™Ð³m5ðì)Á¾ÚUb¶,ø‹#öG,`$ÿ9Õsøv#Ø©¨š—Vˆßô’íÍ~+´kÊž öDlöÆmaÁ i¼g ª·âTùmçâ5ÎJŠ•Ô³äî<öFèÓ ØóS ½(fŸtþ$Ô®lM<ÿU58é™];bÂ÷Ðg=Î*µ€Ø$õ||/Gy½ï5{±ÖÏdQoNÒ˰l–­/£TGa"GÞ4·ò]jøB °ÿêW¶„Q‚íñÑÁSB,æzp*{öŠs“[Çì”7}…#Ÿ9Ìé&´_ùÚbâ›P#G%£¸R Jаž€›Sd°W”˜|Ù­ f°H“µPÊU ûW•3P­[‘II~aSUc;×/#aØK4'fš°øÆtM]ÜÓ™ŒÌr9 —õ/¦Ëz»Z(=çðáwëêÅI¿lþà 8o¬ÇÎ,«Zˆ–òò®»àYç!Ìþ­¢Í¯Ú\ʇ3K­ˆì }6Eiÿã]þ ¡0B6Òæ !äé<úO4„Üiå¿>_ïpeÝòp2 ¹ëÎ~e5§‰†¼Q狳ƒh¾j^Ã8*Yß{]áW‚°£~"ŸÝ 'ÖïÛóB@ß{4½Úa~zÝV«¹•ØY­ÊHÄ>K‰¡âˆCTÔâ@qÌõ uØN7æqnÌ|K¿J*i»~ØrgâÁ†H¢Vezë~ ñN=¬ëkW'—ÕÏ~­_9àoñ"‘ý-&Œ(WÍî|¥kíyÝ F¸_BéÑ×Í:£ÛNë@÷‹6_çTöÉ F§ÆàSßW6jfÍ Y[¹Â’¡ÔŽ ï€ƒ/ˆË$°´]¾þÔÎŽ!h¿î³ÛþsëPì° ÉÖc-Xµ°ˆÂý jb3ºðQÅB«Ú\ìÝ&‡Q·kb6• ÛÅŠ·ê ̳VzW”#û)Þ½ã`<ËÀ`ŒÑõþ-=[bÞÉåHÌõÖ¶.¾¼¾0«áJ•m¬Îx«_õùm¬nf¾ÇK1˜|»ïx³P8–Ú¾mã'aœoÍ{,Ú*°6c%˜ùû‡a,qŘ] Ž êœor߸bçYxïÅßmHZl¶§EÁÞu±xû8Œeä`5¾³T|m" :k»ig’e7ÆWĤ°SÞûWØ“~šð0›¤‘P‚á§’\Jíûû‡ßbGc,Ñ ¯ÛOs¸ßô†ÙÅ®\ìDŠ)ìƒØ”ãdLšãÁytÅ1¿D)ŽHÖè³ÛÇÙGs˜Î{§ŠBF¹Õ&E_`^IäÔ›hŠl*ró¿ÙAb©ó”œµ÷ìŠ7¸ã(ÛStŽÒ¯óÿ9«: “d9w÷aÌÑ*Gy ;²dòö–DqàF‹ÓW5óWaÒÍ÷h~¢*ͬy‰ƒ"X­~<‡À Óuí¶ï? £ü!¢öŠ(C͈ÂÆÏñýÆÖ›ÍfÓ*E>ÉÂVöÜ]°T‰7Ów³gœw‹IèÍñTÈÁjìMYÿD5%zz-ž]s¼œJP<1ù ˆâD¹_p绢F*—p[öbà:¨Xê \CKý®:ö××ä‘=®ïæ3ÈSþ§÷……*›flQùV¼;­9)au0™¨QØÑ kó+‘ÔŽEx‘D±—¯ëoùšñùØSœù<7gåE0æìí]í¶¤¶ÞÊÔ×òÒ%!²5gu3lsƒ:L&±÷&/bð Ƈ›ö6ïbëø™$&i@ÌÕûÃÒ0IiâY«@à¡QônW¯hS‹Mɺt[xm5Ùv:êBMk3DCØ0ör:ó€Æˆx«Ív©LoÀaØÙ^'W0'Ò¤ÕOAóf¿›a´@ý)PjHœŒÕT–½a+iµQ‡±;”4Ã^õሓsWojs3ŒâtM~°at›¦‡î;Ãþ~ó2l\$¶ Ì0§”p,"{ Ûs»ˆL £Dö·ü ”mÚÑ`³x¶?©÷̨T/Ú{v)#˜Ë9úì^ø,¯LíÿÊö”Èþ}ê9Žè:¦OœœEÄfb&ËDigÓ– ÄJòÒ.à¤ÂÕÎK”AæL¾ÓUì“—ýÿ4Éi(µ /¼b™¨^FS2cS“°ÅO«÷f ìœì¢K¶‚G¾Tç¬oj‹cò©çÆyëÌÛrÁެIï2ë’=ô‡ßýP#j MÉ´™ýhœ@ã‰ÝýÛšáJæl€ñ˜YD˜´Åâ«SâvÒÌcû £^>¨\•­A@QÝé÷êÅw)ÿ_æ$)Ó¦ J1ÍÈþLVŒäV@i®_Ýõ/)êqà k'-/ hXÓÜ_CJˆ(Ï9¡¦£Ý›jϺa¨q¾í²âbpa±cxÀÓ§wû§ s3.æá£rŸ½}8f§Bi?мµô®îs«25Q¥ÕÓ·‚~:4“Û—<ø+ˆâѪEtLÍFþ+ä:v|–M)¬‡&F¾hÍIsA8…£Õ®ÂÒÕÊö–`©Tߨù«oS9²QcG=À&³Ì˜yÈT¹¿°Á§“ý~N™èîM[ªnS†²Ñ‹œ ß[Æí(~ŽmÇ6óì˜D ùÎk‘l‚ž1­~ßU³Àg›þÜy04–8eDNÁç‹“;jPT£–#ÉXÞ¸ž}ÛêÌñ€Tb›…}â=²_x[çg,l£³Ž€›Êÿc¥ã”ÆîÖ‚lÖœŽknÕn{äTW!È‘‚Hâ~[ãÓ;„圦ÇÙ;ž }<ÙC J¶´QËóŽcÃÈ? “̶{­yuÃl“+ àòÒDÛÏË×U~'ŒŒ 꾺ñ/1U‘] -dl]Ã7Žö4|ôãe² Ò?ÂfØ?=õçp"ÉQ“|[å²e¹÷Œ—Þ׉dc=™Ž·¶v¶÷ØéQPñÀÈûuá‡\Ñõ*óÜš’gd,ÃÀ;S¹mªwй¾%ƒCOd&ò¡*e`Åÿå†Ó¦#»l œÀu´Ÿîq£3—ùchYO`C™ÔR3ˆ¤õé²½AÚ ÏþîÔŽ.Ì—>^©ˆ&`#ÊïO¯ž{‹~5·˜vð-‹{'B€¯fÓG³ ¿æ]¾m;6–Èqu½òûí`l¦ÆÑš}†XŠõƒà‚o•ûJqJfE±J®[:xfú”2Ú”9¬ò^%3::ÖĨË;Xˆc˜Ûã“Á¡~cK™å™y*g@uP’”Üø™Vë—‰{u9Œ£Ìq€»h­Ú|ê8Œ"Q×yËMŠÛQ¼j„ì@ÄtZ Ÿšð\¥jÓHX)ìÏìçO£ H³3ü £0§–Î|»žDÙ²§¬Ô¥ ìÉÏrúl8~”Ãᢠi’ïª-ñ{¡Û Ä‘Óܾ€3~Õ­»0‹'w'qˆ¶ÉôݦT"ÖÚ5@ ÇBÿDûuaÙœ¿rž/R fkÓ3‹Kªäé9b=üvÂi‘É¢QÌÊ'ý.QTÞoQ€îõS£ZVmvØòW˜¹\6fé6Û’Ù7Jöm‡S°Þ«œ{¢M•öøí"ë÷`Y/*ErîmóU¥,šnJçðÿn…Q.” "=„o ¡ Öùòc·ƒ—Ï~;ø„ÛDÝ`¾š†‘¸Å æ÷8Eãû:BâGi}Ýâ(&E±ß!¢/µcS‘~u ˜#®ƒƒ8-òÞ9¬ÇðL‘G´¶Éݳwçb¸4ã ŸYê›Üæ’r«¯ºN%r{E ±úªüCGqVìε¬'oHìw¾í¾‰ ìÔÎl Y‹Â¤„\ ×x½¢Æ¹ûùÎ ø'Sèø`&Ð_%Õ ;Ç(/;ÇÞg†Á¨uó…o‹¼cÖ¯ð·ñÌ…{'‹âž¦ÏõR¼ºéFn`V®uqýšÈ=ü{e¸’ˆ“FÅà,l²S£Øêë”ë†åm:­ ˜¾ëûlWû &àÚ¿çláÿqÈè©ËÁõóò5Màîéò„â ñú·4wìšû¹½o€E›ÆW+Xêuõ­ÁæÉN&¼%ŒŽ«ô%L£HiÝj0˜ °Éˆ“ÛúÑ»0JJqÖX =>ôhz}0ƒƒºõZ!j]}[bFñ°F8 MVW ´ƒ^:I²r&8·Õ!² Z[dê1MÝœ@Å/þj×™2Wc0…ËÓ/Îø×sd܉:¸ufN»6½jùÑk×Ý=îµsm݉=··ß´*Hõü³GöÞc­#ùó06¸°ÎÖÈnÇ'^†Qu®,Ÿ8pŸÿ˜"2<ã¼aÚ~«W<ù)S±ž ‹à˜g,ƒG`ü›åM¯L†¾ÔJy¹‡"Ä¥Ì[ôüRgüIÂæ+%¬vmŽ>aµ£{#ر»j—qÌé|º²¢b‘&²‘¾ÚmŸχŸ¦x§^[ ¦ªâlÛ¯‹¶Ð»mÚ±hàÍŠmWåUþ¼?Špvxú´)ž…QtŒÜmü•)³0Îllã¿W¦Ë¬ñ ØØÓÆ×{ãûtM›=Ç‘áy—V RsŸø‘BsT´Àˆïð¢#­ý‘Ró2M´xb§D¦nÓö­Óq( FÂ?ŽtåÁ…÷,æ!bJ$@€dÅøÏçÌmùk¤26V懽}…ãõ‘üϸ…ÃÇ9;¼Ç¥RP>›ö$µ†ëýÕ.í -BÑ=ñóJ%Q¦V–ÎñžÉ;î&kÒg™Á (êGä íÔ°ÎÈ!+ù›0ʸђÌýšßX–GU™Òæë«×a¼Ûy}±83é*÷Ùÿ5{‡°Ÿ‘{Ý|Lxnû\¸2•Ïbôù¸Žc€öÕz•ä¤üBö´ýÕ²¬ÇóñÃ+ÿÖT„kÄš6ç&‘=Ø3]6â¼°{÷º93‡ù”X@@8q¯t—ìó΃žÁÞdQP›'ŸŒïjIì¦N“"™ë§É+ôÂDT‡zzÏÜló Dj{ݻ͋y+*g7”¼æ½½k»ëÇ÷=úqY¿ÕÏ®LÇb’Èšÿg–Õñ0ŠÒ0GŽ/:jµ×Þ'Å1ùÒÛ Fì3üög×ñ£$„ÎÃ,O˜­rÀŠs&ú¿J%aFâ;úßDZ'xîb ÄÌbdU)sLò@ÞU×^Œî–X%L!!@7l0¿}<Õ¼pçi¦5„@Z“vœW”‰cÝuöI‘ü$®üÕ3òË0üõDA[ mî¶u½°·c×ü1‹ÆІ=‚8¥f¤û4"ìVû¸ã5‚25©  I]õ9?¬'hÞùgÜN¬|`ãÃÔ»)iõxEîþ%ÌØÚHH˜cЦ<.@¦éµtDZü×(C\GÕ¯s¶Hû‚·©'æi|)lÉÛå9ö9µë0 ƒ¸0„ÓzÜ”æ‰W¼„ÁŽª ÍiÃMì¿Á‰Ö½ ì!‡ò¾#«mÉ‹6w©̘­>£;ŸYôbO¼ßŽ:Õ|›ä ]³›þé'3­&fßp>[í[߯•y£†‚ƒœ*“O—‘,BwPÙR6à }›Øƒvå+…*eûÛzïÝ!ÿ•›ÁÇ¢ŽVjÇ‘Êé@mÊøq°ï¡n£=khk&P»Ôªg¤õýªîÝÿ™¬ºÊ—‘`©#™®¡+0­ „8Sg·äÀm‡þ™ÖGMÄL€ü“w(p|›¥:³±Âô×±*Z£„`©B+马\P쬙l¿ŒÏsL±Ãú¢:VI­®ó_آſe‹þr¥…PuªÖµ>ÍÔ›·A€ÿñî¶³Dg‘±DKg‰¦X¢e”Äÿ%šÆÎ]Ýü??Þ¤7fpn e5cë“H 5ãa—ª]õ ”6NJÍîM!^'Þ_%gB#óè9²·òܶûÍ£‹£H棟Ý&Ü¢WÞ ÓŒú_Žð‰ò#ÅžŠ*nÜ c$N˜—ážÚLD¢û“8äñ T¬*zäwus·§lháXYðÖkÈn"8‰#eP$iÀ Ô´£–NF°™Ë[ô*=²dÒ¥/åaH¾â‘y¢R^VÝùB&Nbn½gº³™‰ÕæOdßÿÈs¹lËÈÚ“ÈÙÃj…q¸6·dCÓù%¹_a7’ÑÈEÕ¹ì^u6Œ¤z°bsr®S”Ý»Wí=4³Ø<Ô³Žôw|‹̾Ök³Á«ŒgÊL°°\?rÆnö €0Mn>_ü¸Í;¢?á\µù¯Åü^°A´D¬Úg:×DA­›_ÁÄ.Mâhyá)ÿâê"Øp#z’œ»®§²0MÁмžð2JÓÙA…¯¡®š¿o«m//Á”3V‘ ug¯>TXõdwõhAŒ™“í*F9ý†î‡8D†ºCÜC„µ,÷ž¯®ípûŠ jµùÎãÕ<À’ûôUÂYòºˆÆã5ˆYÉ“±ÚíáWuÂÊ W,Wáñô ”ß¡|ß ä˜QÎúÈ-Yçƒd”x0Ù+¢µ.¼_æ§XÓz+@‘«ŽYFe[A&õŠ3ã}kNä©tÃ/Ʊòñ{Ì]ÔE…ö§¾€lí)*ÚõÕ‡›At ìßÒ7xþ‡/÷·ž£¨îépÅUo¿iª³Ù\·fqVß|>He¤Rù¯ßùŸ¥A® £-8È™8l%NQ]WB#Úžªâ„ûamzðº~¥¢~·Bþ@4x-šY{,‹Oˆ7Ó‹I¹lðÔ,}EO¹qà‚m}d‘Py…Í6P‘gž‘ôŽæ–¦äÓÍ[äD‹«Wñmø[¤:´¸‘ðõ%¬Ž\®˜F;·û³ä¯4ÏRôÒ"Ç£F fÙ ÷cp>_\°wù€‰²Þª´ð;íÂ-&ëq®oñ–ÁªõÇ‘„×· $\íid›Œ}Ž%ÚÀäùȞVl+ákÙ®ÔBRŠ£Œ†‡ÕK‘ššáŒ=j  cõÝj÷9¥¹‘åê<ìs øv ›nv8H#óçH']t­º}üý#% ²“ ‹ô{r„Ø)"Š.ÃÆâÃ{½½Ÿ–ðOF ¶.×I â@¥™tWLºÓ,M”¬§O€nàâ\DZLªäô_g§´¹hzfÛ¾AË× ` ŽÒ¸ú•V1ucúcxiÍ­Nœ£„çPìÜ/óÒ`Çì¶m„Êl¹³²'Àׯ^2Å®…zGi´ûj‡ö¯¨Uô)LL‚è°Ê$ ß|êx4J7C¹qTP(ìçO È-e­*·”3×Á‘VTa'õ-ǼeÑ ^ Œ”/G<5 3I…•¾·¡½™/žæ^%,¿õ@‚%!Np€[H)øu†K¯2 ëœtÑ6ÁAœ>Šš^ピ'?,N "¶ØDŠ}ŠbëŸ×w¦R¦÷_»# mhÂ1ÛÜŠ,—ìëb„U-RJß±·º˜o`w/>Ü £Â†ÕNè¯ÅñÌÅ™‡lÔ?Ui kÚ%ëŸÌVª °ž± $*ÿô ý²N%<-ÊÞ!:‹@I±ÒAöÞëWó·wtcŒ!J~Ý,ŒÐ"§" iÂÝÙZ‘óª4rþ¾ã ß %Ìià@ƒ~ª†Å…§ÁÁcäw0<ɰåF* όߊ¹]c¥¼#ƒ¾vˆßN7ÔbxÈ{ôZGšãQfL-‡ØfsÄqèSKßö·eñ}aÉ;çè…Õ³»’N—ÿã Eô2{±Í&Ö¾b7|÷n0ðÉ·“^ÚШöº\Üš…©lþÄ+4 Åæ¶+HŽ$â÷ÞûŽÖ$^lÚ’ºV«päåÆÜ¡ó…rÎbB›ú‚W©ÿ(iM»my ±x¨èv®CHÞ6J.„q~@'ÿà½4s¥õìÊ*Ê0òOÝR8ѪÇ䚦Y|0Øu”¿oÃ8}ëÙÚk`m¨™Û…‘éÓ 71BÇ3• ¼n#oo@åAó$ÞããØÈìJWvNé÷ú<—¨ ]åÎ^»†¥2¼mí®¼,»$b¶_Å k3]¾ 6è¬/”•ǨòÃ8VGR%Š¿ÑbC°Þ<ò<­íb/|ŪNØ9]jP‹åLªéÜ|-Þ.ç{¹d+< | WÙÉœ7Úo«†ˆÓE6«UÃó‘R­¥4šWï÷j&aß< JûF>d_=6‚Ï Å¯Ap}-GCì…Ñ5ˆ"ÞÉäïè ˜ÂG´–Oþ÷{Xøà-«-©Cå´qkK冇—¦‡UõkŠfíLõø•KÐÆá 9³•a ø¹”h ï­ŒW0¶ÅumNm§a¸¹ iYº‰N~ ãŒv§ÒÕƒ„öΖæ¾GäþAäÚ¹J}ðRÄ©HépŸ~¸kŸzã¾ÛÆ–]°§ÆÕÖ•1ÐÄ‘d«:.§åà á­þÚ.»i.s•KŸZÜί¡˜&Æãän=»¢þç"~;U=ZEzõÆ'Âl‹ìdPãÇ`Ç~•¸>Â)¦ŠË5»Üy¸1[ Îñ­±Xæ[¦qô¼è ¦ch[_ ²"}×–ŒYvµYÚÉšö¥ƒ7¨-E3§³fžXéù ’I°ÞS82Ü ÒGý~áfð¯uÿÊ—JÁžŒ^¯ÕjÚêÒ&5bv Sç·|³;øç¨wxµ{êöÍ‘ÍP¡Q|ÐY1FPm, ¾Y;brïŸëíӦΠ’åÊUÜdÚ&oƒd#«××¾i?ucßË{Á?†¨CÉ7IëÉ-ÞoV-ææ7¶;N)düpn««h–ó‹ §¡×-˜ÿ˜9Dên7rIä¿ÞCmÄdr/œð©÷ÉqèD«hŒn…Q5¼†¤ƒùš¯X¤¾úe¯Þ%e˜µ';ô=´ˆ{“D˜+Å]ÍŸî cY…•í _¿–År}I+òh¼0tTW:ë—qÞ{WWW‹ µÙ~»íM u»¦B μ3Ïa}ä¥c8Îõfr3¾J«Ó P0CrÏ„¹¯ø[;=ÄMñŒËÔ×þ0 tév`ú©ô@~¼V‡¯×5©5¬¹MÖp~y AØÝ’k3â&Wúìµï½¶"Üš®$»¯£. ““Ì‹,Gj>ì«æ–cdòÛô§ózLàyµ2"»·×Vˆ:‡1TzãØ¸èÌj{7Fý›`%¦Nô>zЖO­vº¥½ŸËrp¶¶¿DëõXóm¬úκ@ß¾Ó%/m3™9þz†§ö•™S¡Ù 6ˆÏ¾4¼6<ùý÷ž„©%%³‡jÊ*§aÇ?¿Q2î´ÍL–Šž¡ý èІðƒ{ðäQ…©]ª˜_4?FÞFÛ§zJ-8.¢žOáK_¿>IY ϰ{‹¤4ÓéÿçêXšüÛêØÿRTr2SsÎ5eh b‘ž[ÿÿ¹×¨•Ù`—4ke³ÕG$UþS­,ÓCÅù??Öi[gŸ“iá¸3>ÂM¶@†›í<<Ü' 4*ÝŒLóÚ­(ŠÌŠ`çÅ5:Q)9Æï?÷QApŸŸ|®L6u{´×=Ø6¬iŸUNOÕ¹(¾c­ÏŽbl|éÕg›gŸÔ½`ª™@/Wº/Œ Ïeù[F˜RóBD•SZ`Oe e&Öå}¸É3íPgsš6)ÍLw¯²W×ÂS¸%²â4n÷^•î¹FÄ£NÃ$‹G÷«Ó÷NêA‹Æ1‰lu»'+Qpa…›7ܼ–XN¸ìµ5‡Qdžd“òöf«è‡}ù]<•ñ‡äôÍJwçÙª˜©™¡âý ´åútõ– ËÄÂmr~±rãÜ/C Â¶–,ø½×uÔ}¬0cÈ}cýf_¯V–ÖÆ5ÛÍä,"-Î\®¨¥B:øóS jçîRFJm'J{ÛðËnáñ/$ÜcÛ§ŽŸßž°ãŽ •GæV¢d]Ôo¿&nŠ«Ê:ÈWNÖßÙV±;|yùzeÑaÓDªîF²Ðõ+x«§ß!|Ý&×GïUMLEfÚžžÖ­+·°›Ù›:,®›±ô®i*COQ}BúÒsQoÎØãg†‹)[£f([ÑVµ|¥ ðêú •²º2ŠžL;{vè_WBT’\Å·¶É°5*ÆptåpLŽ‘I¢`àCó™Eñát5ÁD#û Íì'Æ×`SÙÙÆõAXD:¯íü‰ƒó¥G¤;Ì^²Î®ë µ Â(Ít^YËn”B±Ò’ÿ {ÉýÊ{£"¿f!,r&­GúˆY&–cL]RÿÁÊ^#û3¨ T ÕÅg*ð4†ãÐ~A–¨LPTeþÍ*7~é1þÕ•MVMÐ =w1qòÊ 2Fµ~¾ÉŒÖö‰² ƒýiåŒ{oþFÅ”’ðH^}{¢ýS£h@fç :oˆÄöOWŒNâ öÒߺ;Æ@š4¯$fÇȆmÁ ‘„‡Am "`M0ί;† ¼L‰ó*ãq„'ÇŸ'½ÍÝ<ÄÆ7üíüÁY?¹÷ù.öÛ±P;ÔÑ·NòÅ,ï% +›ÛÂn¹¬×–YÜÎ _ ÒÍÀÿRN,=­¡9ôµ²JãÛ¬¢Ò?Oç’7LNùÔX_ímü;ƒ²zQh9Éžgvn©y¸ ‹a )ùg=+ºž¶“„ƒJ[Ü“ ¸Ä¿¯Ý6[=?XÉ©|\buÏz”™´ä]ÁŒ¡úióºx{oêAOÆ«š‘mìÚ-ù929µö³ÇJ¢}wîæäbäÌw“Ë/¥ʺ9ÄIzá«'CW/ÏTJÌåëAOÜœS³¼ƒu¡ÒìnVŠIð® R× [çôÕè…(ç ‹¢~IºÙR‡=²cW߉0–ï¾ÖMã °œGÆ3MÑÒ"’nЦæâäü 7SÊ]š1m?=ý9øÖà’¹|8ažr²³v¹]?¯|`¾ÄK¨Y§~æyY7Ýw]S}eý¤-Poä©bB‹dyj¡zаÝHp6GF‘øH€<^Ž£û)Ni \QSdEªÈP±mý÷J4Z”ö—}]Ý~ã‡Î“’‚0¥ø¥çïã“”*—­Ç0ø¶òú®ï°#òädð°§•%ò죛ï×`çGü:³TŸ“)r³?¯Þ3‡ ÊèÓ5%œjäãyûèKr)_šÚW“ç³²ñ[@(¦!å®hq7d3y̓×ìVÕÏH l9Ÿ"0ZÒb¾ƒî”îõ ˜¢úò ØK'¼%Î#»Ù:VäÊà‹Ñš®íN²”Å[ÜÇÊ¿ný£¯7‡Ðû4áØÖ¾Më±iqSWˆòW²]ùd>°·ìT ÏÀƒ³ƒòÃ鶬‡àeQÝù)ïOã[Oñb¹É¶«þÚV¦ú særg›„C„Ë^R¾Í³ºÁçaRµ‰à”ÊVñ+¿Jñ›"Þ’*O«î»âjï@ù‹ÏÝÉ(E•Q*Ë($U«ç=TþåíþS;âj>iYxÃèzs:æœõ ,á¡Lîãš¼jŰ›RL‡MPz(2{ååÌ!_ÜM;eí×÷´?¼:ªã/ƒZ5¾Oçõnì°ÎPŠŸæ¡V±,™[¨Gñ†ë0)Ôª½”²ìï®QC"êSmù‹!ä/³AM¹8º?¨ëê}‹±ùº 7š¢;^M>i™J™j{Öݦ’02,yÍš­`ÉÍ ß”Ä‹SöÜV–;ŒókhNg™@O\£5î}0¼¸F޳ÊÙkwù5”›\}ÕýÎ2Z±ôME¤º›.W°£¤.B%elôç\Of –c%Ú®TïÍiQúƒa6îµ»¥kÊ N¯ÙLQT|Qb¶Ô*<úK#Ú=(I1µ¯0NÌ­çvçj$\íÅ×Ü#‡UV‚DÝj‘â6¯v٠ο•%n/:ˆ7ع4QœV•O/øFýbß¿Úåg dÁÞù>—4ª ÄP_}ÃíH¬µû޲m–%šð—º­ÆÇËHûèÀ›NŒdï6jE”oWyÉ«'öol&ÚÖwTzk7AjÄÁ%âÝÖÒ:Ó lª“»P4‰/ï™L ²!вDʲãD• ŒÍÔ¥Ì|<:§*÷±Ñ& “Ga¨ñJšKãìnLögu«ÓE$êB Hˆâ2Ÿ£‹¾!é«6l-Æž×^5®\ú¦øyˆÑôüCV TòYöŸF¾§¥wÑ ðO2cS%ùmvêHêð‰ÅÀ É q‘™úàçn°>M÷@ÖÅü£Û'ö" >Ë_ˆ±QöœI±Š6‘¼®ö Æy´$„|w|-–£$]—Ñ‹u_ŠT¸<Êk°ýêAüRžèf«Ç,4cjkß«÷Яî2'¹úaT¤LÍ>3¢àipBö0÷­«fÕu/˜Ü#Çð4^•ÆÌ²ñ.ɱMÀüoæGÃÏuM“ý–£'@XRƒüwÓëC×M뇌®–€Ï†ÝÆg{»ÖìÈóÁRå+…G¬…vbKåÈ*Vçz·©¸jÍÚ’ æÒF†Ù^pm-LåôFÂÄpìå(!×>J5ç’ßóšÙÝ)]HYÄ[Â=$( ®·e‚¬ãíR'A(‰Òîy;{¾U\’šëµuKÌQø‰êæx0ö¦´ö>Ë™âç~[™¤.Ÿø$rrK2ùG*šmTNâ=¬I“Ï Ù¶ÖæKÆ9Ç´؇ܾò`à ¥«dÍÔP8àr+×zÎð±s•Æ -›^xò)†ig‰²£º·™ë¸HŒH'Z±y¦Õ×ÑS^žœ[àC0‰eð@!Ôgù›µé™EE£}mGÀ¾°PÕ§Dîäcƨ…7×d~Põœ”¿tÓŽ¶6Ž£“è«ë''oØ¡*¶ú·]Á{hÞì zf+nÜ¡L ¹'i¤ÐÏ\Zg~ûÆ2†1«~µ~¹Ž39•žÁZ½ø4t/WžðßþÆv:R6ÇöÿïVAT†å Ì™ÜÍè$€’]lÖGÈ8 I…u¯þyÍ‘´ª;FÚfé ¶ÇDÕo»!¼÷ Ñ1Ó‰Uµ¢l>øÕNeϤj¤«{†` &F‡æ;ÖÔ¬Jð2ŒJMìi>ocÐ*Ʋ&¯q0¨âŠWƒZ*ßXIÂ,_ä儌ÙÙCG3Œ0µ×|=Rs QCÏq¬AÓ\§Òóèì+éû†Â;?ÍhÚ·Îls—¦a|>0~ÿ[ß×fH°jel-D•± ÞÅiÙ…,C3Ø ·s†¿®Žßí·2hŒéŠüãMeëÜ¥‘R/Œ>+ÒË(Ú0uP!JÙ¸ El"˜Ñ:ªÈ!╽î:z³¦‡àD´"®N}±Œu­Ä.¥a2‚;:ûþX§ÏÇÍN¹š½ü+8ŸQ„ÊC4».Ê}ý'œNVöX ’*Ù’ØÎÞû#  ½‘‘‰yöÙf7G“L3{’œj1•·„Mî²7ÕúĵHÓû»ü«]'ÙW“žvâÆd;Òw@p¢ Ø=’+$YæjDîï*LÌe7L¬ôeõD?°|ï«2¨· ¥‹ô>×á饒pÕ‚gÓ½!„õ#=ûPHc†¾šülöèWe! œ‘Ü ž_½Îß?¤óÛ È~;¬ÝåP½+@ÃÔñØ…(‘¢Dñ }Ð6_Q‚¥®P¡t»†Ó*Ûù…ü2‚ÅmdqaÌ5ÕÍ †W¹9Õ):þ^OÙͶVy=+ÕŽç\ɈCÐù’>áªö&á)õ„Ü3+óðÇ^Ci]œ'ímʾZ7öšŽ×¾¡Ë{„ TÝÐ6f‰ÀÎü:ììò ¤aî¹67‡²D¼¡9úˈ´‡5Gªr:PÐWûŸëx“øívŽrà ­þÆ_J¶“EUÛÛ )£îߨ\Šš2»-3ªæé•ŽÕž×Úÿèž8ùjA¨½™ÒR@Ð"•°c\µ#§eï[ï±ç-¡¯‹.*å`ŒˆqóºÍÕßÞ³ÀwåGO|ç¦Zÿ¬'ÂYò‰8unKÿV˜‹M_èaò è‘;7Ƚ’œÕï®ßÓCÄ`-‡„¨{÷çªw«BxÈ»ü ƒ6«wz¨!þaWlÝÝ•™k$X&苲I¾¬s²Ÿ.®ýS=ÞóÖ]ñ¶PB°1 µ¹æšs"Èó°Î¨+ú~ªnöò#0§&7¼P‘§“›âH³ÞCœù`­&¦dè«’Û2Í(¹¶¸gGÚ¾›Ó“Ëj¡g¬)6§[bÛ“ÛÎæÏÜD:×&¢,jêQßÜ,Ëe(&³“!û.Ÿ‚ƒáÎl Ãí`¸péäƒ(OÑëÆìjªuÕðæ‘©Æ[ùUÃx  qÌe,âúcG{7ð¼+ó÷öž¬LW¾U¼Døï4ó7* |óµ23¢ŸçÌ¥¬,ì;­´7Ѭ ’$ˆ5“&g$ F'é{J/5rùŒÚŠÝ¿àÍbˆÛ²CŒ«­¾e¤IŸ*NkfA#5+;®C Oî ZÂVñg¢¥…Åìë-¤—Cì#uñ4u¦¿¦X÷8R„v0€žØVi/“7ߪ-ýݩ«Ÿk•©}4À´˜íZÅã“·I“5·§17R„Dsû½Õb½³—@BD/&­+Øõ*Ã2ÄÉQÂ]%ømç»{[d¢ äïmÐÄY, ÷è¬Úy%Œ˜ß ,”ίSÄε ºØ…IU.‘M™ÚÎ$4<ü¶;L>j¼¬ÁS Ô²àäíš×g‚±n| ýÊb¾·7ÞI‹Ö0kØ<3×qŽÓ{Û `Ñý`Ü+<(ãЋx/µèò0*ÃrŠK ø„ ©I“L'Õƒè®e\ã46à2ïOmmaÙFQÀ“‘iA¦]²ú?¨é¯6åº2 ª—]$­K+7a3·Ø¨x;,9Zœ4pÞRwõ ÷P³w ‹Öè2Ø&’3PWyナŲÿpQ'ûš*‚´Q º?ã¨àÊ#zÐÄÍ8ü Y%‰y»ì°* Yï¶l’žÛéH60ÜM-„²a QO—q§¦º­¸ù0×G}KÆ|¹ð aE S3þ¿Æ¾³1jliú¯—ŒÂÌH"˜Ñƒ‰ &°1É€1`ÂòÛŸ©êjÉûÞ÷îÝ÷.0š‘tBŸîêêê&º¬•ÅE~Y«ÝïO”ŽcÊ%̼èõM*H„L•J9o®„óX!ž¾©¼î1ò̰¢Öñå“« Añ¤iålÖŽ24¦¾…–?‡ÇÓ8~ôUdÏ”æ`ôÅqý3êÅšz\xP‡îìÞ\|T¶¿ºb4¸óéêB@Zâ8飋{2 Lvß[„¡`8¯Í Wr±>À’ë„4òøª*^Ë'/-”C}ƒ>žz dóütg¡7®éŠTÆ2”°N=·!Øñï×Ï÷dZp7/v\õÃ=È¥í‡ÖY½±°_¤´f‘Øÿ–XK+Ó,6-ÈóËŠhßžÄ2ß­_üVŽÙyRèby$¤»M¾óÍq\z´áUî§»Plä”tª†7¦þë&r?&TMH®.?-Ö$唇þ‡ +ž}^تê§~ t”sÂ-5*ë¯ 3@Q?>h3;ä—!œn¿ûïD£yÍ¡¼=¨À’‰ö×âÝ£ñBÝ͘Y£QÖ…†²ß3á(:ñ+¹äý) Æ/ëu„ØLÜ4w'ë¼­úeÏ‚±%E_að…æ†Ï_‡QS±—mòzˆ%góu`ß=׎4òô³Å_bZ–âݘÎ[žú €Ýd¯üÈújs=ÿ&¶ñr˜™ÏäÃɤeCiLÍu³€/“}ÕТrÒH7ê)‘·‹æ @çò¿”þS¦""Å—ÁMÿýH&Œ1þÝý%0#K`;K`’,?šEQ’ýKU‡ÆHþSk“Ê(•Ûþ©­*Ñ‹ÙÜm;È¥dì‹Ørâ¢Zɸ5b¥ç†ŒX– ó/8Pcù [ó||:ÐÓq]1@п5ñ·gÂç-‰Ì0_æ©Î‰lÎÂoYÁŠL*9jaÃ>?ñh¨µcq¯³yZ™é¹‡ý‡öèl çÙË|ÊÚ)ÆÓž®Ú[adÌà&•”¶ÚáðÙ½3ºP,„H/@¥ Ñp‚UûF×[ë‡)‘ÝZ¬¶í›µ¹3Ÿ±!ê‹:CµTV *(äP\LÍ‘²óÚÏæÖýÞÅiÄsàÜeAÕ@øû÷n’5æñ,vüà®å²:Åsù‘X5Jyrä¹¢¢ºz4úmuwLJà®ýÁºßÁAÚr-«moØù –lúÍ0ôÇ"ß,'†ÒT$tDŸlq¸Æ¾7•htÑžHôSàŽ§ Þ¨²CýÙàyÏìW s3Áwàh@¬ØÑÑ>æ2ª¹y]¿=]‡G»]øÙIÈW eŸù¡ x„~8ë©o +‚Ôõ½çWpå+›ä}ËÍs´û¾R^›7|¤é~1¹o|‘íi å—ÇŽô]R®µû²ËÆ@ÀÜw( ¹q¦Rô•jíâ:ósÆîë@q^¿õó¨î¯¬‡A©Ë|¶0²s’ý¶)X Ð uVìÔÌÉЉª9cy-š.•°öÈm%‘ÝUF#º¬hè¸`K?Á‡"¦ú>ÊÛI0ã¿ýLÇeCÊF%»X+²÷è¹ÇÖâVÜo†©Ÿ]|Q…AC„Ô«bœlÆôø¯uÚý1ÚRZ&aè*¸\JÀ[¬ë]÷[žßw%+Q£‡ó# H½š«²…ä.‡³s…SÙè)±r3 â»m,2‘ɲ;%ŸªS÷g.}ÂÞš¿´ûø5¤CïX›œd®ºã£Õ®ú=é¨DŸJ.eŸüÜ„®è=tðsvÉŽ:vª‘%€!íë=D$‘JÎ{{gVÜ14œWr‹×îk¦w2ªåä{ž×Y‚æm%ÜsE\¼ ÁLAá">ÄH%Á6sHåËc# ]H r%ûÊíc~©îè8ú]v lXV2ò[kêbì¹™’h|:úƒl²µ¾RâP²IÿŒyá}ÂÌÜ,´ãÊ©™dâ_ò|ɶ#aƒh¹Ø5 u ì ûèk="h&¿£›ÏPnM²§m„+VF¿¥P¬à)Ѱå2(HhV»±Üô–O6nœÃêù¾aìAòϤ #ƒ3:Aòô‰ â!VuUaän’c9×”ÀüÁõ›•G¶FCVw@œýdc„iK Œ4»¤É’ÙSeǼw³Ê„¬/ã¢gÂIº)ì€t¤Ë"š±êh+õ@öt…€’Ëš‰Ø Fkâí»Aíí8øz¦¶³µÍ2È®;ÔƒòÂY~ç›’5©ç;÷aÑœ~îM¬—7’~©Á”p[ÑÏa™„bz*±Ÿqغ¯?°AÌ~=4sír„Í Dt;cHü™çsùúº;~`<4Žì¸‹Ó–¨*t°¦é~øÚŸÚ¯Z³öêæ ?¥ÅaÖ˜—¡|È” Ÿ7d¼j§jNÜLEP zšœÑe®´ƒ®Ê8ò”gÜœ'ƒ=1°yöȧøþññ%xÖV6;tÐ(aJ¿ r!ÆÂ:ñÔ@Q<<8Ó_ž^+ùgUüãÀhÙçØDè¼î"ðùQØÕÁ0¶sA‘Û&þzJŽ\Bõÿ¢¼ôS~jdÏ …9WTYyýŽí«mXW$”ƒ‘×MiðL)óèí@‰ÿ!˜ AÈDXÁÞo=©H™m²u˜îŽnŒÏÄ{‡¦ˆ¾É˜„±ÕUÄ»oûÉð(ŒòìUýU~a¼Ú£9ˆ‡Â3ÍV,0‹öÔêÂ0¥•y+¯ºÅTÝðˆÕ»À“ÞÒåÎÍÀÆéx ‡¬ÓÃ4Í«·8øÒχYfGòYþ[yZüL_ûéÍ2˜Z%8ª!·+ñúë9çì¬öd‡}øâ0Ð3UUÞÖ+³nà ÚýF bwH»²l!BŠÍ@+í5&’†µÚÆû!ßÚVÖmsRêYÉ&1qY„ Õ¿6²[ZÓ·Û‹Òý®ì5xk¤z$ÏþÄPµsîŠ÷:¬¾ø.?Íø0ÜRoeÜÈï€¡Ž¿òˆ:$ Š<ÃñDÎq¥XФv>Ðð‹nm(¡P¡ü²ª(]³cÔΜ€Nþ3Ë[fgÆ‹•P•Ì WlsÕmºû”Ù)GnH5y µõŸÜÏ›jÚ‘ÝU Ò~N}™ `Ä”È °Î^¸ÿ1±ÑåÌÀ/@=ˆ¼Õõî]›‘Ç»´7x‚4K»ütÔ>½|pXMÀr}—Ï_àì¶ ˆ‚7 ‹á#q2yüRÁ¹ì?R™ÛÝ:­—Ê/8)UwV“Mç©e¯ÑMÙ¯ f¡—Õ"”fðZÖð–rx'²C´² Ä@;oy¤§5ƒB^cå£ÞU›©»™hÙNÞ!ÁÄý“.Š_'–äÅk´¨»Èéª|æÇ§@ødÅ~sÆ$u²«oF³‡\Ï•K"Ã*¹å®4OuP±[à Æ®çØÀ+¬“VLÍ @ Ýd¢åa©a(xåÅ…`”@W9#Ùäå=Ò¦ H打M~T‡p†ö9n¸Ù#.Jáõ¾rÍ‚å(_<þk©Õ˵X?H3õñ-í†bÄ’”0厢zñû7ÓAQ÷ó–Ë}{qc£Ã“êVNæßà¦ö‹Óßm‡»@;÷ÖÉ"Xm†úº/£—óaPwl ½¦Ë”²p·¹M1QÒdQ\Í]..Õvbùnq¢Œ#58ýD žbB³O°¥‹Ãí8GvqqcþôK–ÍF?#5†}N Ádq¶˜Ú¾ÁURƒox¼Å#;H\>COvûg°5_p…XVý¶~ ¥mšóãÚœZ)©Àcðâc‹–OqË Û jŸ+ h.>Ðá‹UÁñÜ_,®+·µƒ™ ›-Öå©Ó÷Å®5j²üñtñj; ´Jˆ;ØP7ìWÊÉ=çðëŠÝ<w†DžÞ‹oûÃP8]$ ŒŒË5p†̙= ñàš_‚)%Åb U‚’¬3üv¦ðÙ/‹= ‚ËÞ} C¿áœáå5Oì¼7÷ëAåÃ#èfóxóvDnj¶gcü¦VU±šïúm¡ r5\Ý­åelúò[ó˜ ö¥óóÅáçÅ{ü¿\[†ÿQ˜P,×ÈtGÖƒGG€Š0ï˜Ú÷¸ÑHû˜ÝÇ5×¶`{²ªO—g&±x§ú¥‡d˜²ê‘/OÞ:RW¿f9­OY[Õî×<¡=²©Hÿi~dÔ-jkiƒ+n™æØu[œãÛ.‘kZc­Bå£àñ,/CÅa'oÍs{­,ø¿lÕÞñКÃ`š¤¤Í–Øò²×çÃÈûjÍæ8 žg[þò‘˜°Mt@ ‘d<¸(Ž‰Ëšn S>©RÝø4럎>®uÅŒWÊËÀ¡žèÑ/Ó/ 0Xø]2¹Ü³•‹rõõ0ìÒQë2òo°¢Ñ‰œtÉÚ±Úg'tM "žÍWuqÝî£pÄâ×J=?ýD¸êr©l/.ýÚ¡Ñb$ˆ‘dˆEMÅÎùÄÏÿÈ^mùg.ä-a[4à`Í‚P\víÍ– q¡$å>fæZñÍŽð/0r°“Úby‹9L=Ƙ’\|Ƽ³ÇEmœ¶ºÊ#óü3ŠÝ! h‹qOÑ€¤‹‡o6JfŒŸ]ð?’ê“ÿRýÀ¿OLÿa‹×ØaÒÝ×ùב?ÍpôŸôÀ$Û K¶O‡dû Éö4šü“Xï$s±Þâÿ-É¿ÓAw³GÕf%Ÿ•SN ³ü:Ié<>¯A 7I¨§B7¦)O¿¦MA@´Š¯õÇòözÏ$ÇÓ}¿ Ãj¡ûSÿè”mEuC;øµqD¦éT­i©Ö(J¨žõBI9wÊO«3Šë†±—UÊÖ: ‚âsBwˆÅO€ ¤[±ß­›ò'ösTB¿~PÌîÌSa ImtF߯‡7É!³ÂuZjÃÞ-Ô:¢zßÍ´±"ªEÓŒLo׬šqY ð°ŠLë^Gp“äÇó«(}é&ïè¬i5¤,ŠË×ß‚äp&[a"/èÎf岞V¤6"U<[Â:*§‚Ïq(ñ‘Û.K•Ä»wít(ÂÜP-5ÑÚ/ÂŒ¸{ú£U¦‹e°NûN§ybF‡2Ëjˆz¡g{2 Úïy³­khlÉO„o2¸æƒ îòvs,`´»r’ 6bÅÐ[/!´7QrRX,ýûH—+!´W•_žéã‡íŠ÷¸n–‹Â0•˜(&±ˆ*½Þk»céKíĬD§þòš÷»Á4á %“]í¿›xéƒÃðŠu9­ò¯x!¾»w’f@T-µqÌ=fõ›óI)S&Ëç¥N¬Žu[n+Ff] `/oœÀ<‹0Ú©F…öYùä„XÊV0©PÊ­ÊØäáê¦ð™zÈŒ t—Yîñü¦mÜïãïß[þ,ˆ Mr%tSe÷ þ„×ÄîG”æ'ª!_¤Ÿ¢Ü ^Û/³À9sä˽Œ`CÔ9}¢ ɈT‰ ‹{IãÌ=’×kõÁ§ǃ8ž±—È';âø$DZS\%Ã,/äêÒ\~`Ý@ý¤I^Ø/ž|ƒ†ÍN*ïÎB_gãÇþM!ë²îslÍÅ·*NËÝ–è‚–Kfµ*@P´J£ó´[¹oG•Õ§f¼–Æò[£ýNà±¹®·fæ'/ï$Êž×Å0T«ŽPy !§®{G,½Õ›ýo”©ƒµZp°¡¸3=<Ør FGÒa¼{V¾!laÑ Qz#lEò7ýˆ‚“–ÃbŸ'ü²‹>”†f²ù•½<;šývŠÄáÀz»Tæ¥sêd~_¯û‡:…a=%´¥Ž?²J»ZþJ³–…­Ï¥Ù˶EÂÀ:ò”*~|ÖI¼•?¸Þ•æO|uÓâ'âþKn}æ….}7i±Î¼Ü)-°à;Pù»©%§ d%qX2§ÈºÄà a‚׸`<*bÁ±‹)xDâ¿bwÑå"nªù+œøBó¥Î~”ærÊiÈ—W¼æ=Væ¯ò“\Òæ"ÙüèNò¿Js/qµ-%€'ÊÍ‘<[^°ý⇭j2 z}Ü¥_´–ªÙ–N‚èî)`8Z8½<ƒšk¶s¨¢grºÇZ¨L6Z¨É°ŽúÖL0‹~¶!÷'²ˆ¨eR)ù²Ë Ž âáÈìÓñé©b4Aê>s 9ÿ‚Ÿ¶ßô0‚2¶†ÝÍùû÷Ï Qfæ§°ueÅŽô庬=ÝAÈ‹Ž#nT¶U8o¦ùʬ߻…6F»!‰­ÿªvY“7kuWÓ;ö}K.dâ,_š5‹sJÚmÜPf-ΜQÚ¸õ±€*kD²9%Ö†RRÐnwÕ_צ›I8¢â>oU}‚S¹ÈnºY³°myj´nFb[YÕ„âS{úQ‚˺Äc“†‘Ü&zGŒó1´ÌáÁqœ’m{Þ†ÕÔa ²êš%]|憆™ï™,*=BÞtÔöá`à¶éu¾³øÜó{°ùzÈsíô²;ñRèLk>µ¦0%Íνª> "bqñé©¶½HVPå}Æ€ ëçn³ñšiš¥frß:g>±üþ»ãa(Ë0À×µ3&TH-5Åaa,äÝ·z 8Ë×QŒìЦÏô$Õôвy‘XFå+¼à@ð²Ìæè8†ÂíSݨ2§d9—'ÍÓ³t65¿‘B?Û¢rpû§µäèuåå¥5ý|l)®Úz­}‰lm.ÕÐò†€ ×Ë®-Èå¿­8ñYÃ@qÕ!ª¢05L&ŽN¦‡Vñ0æ§ލUˆŸìï÷¨ÐÅ=k“ÆS6xMŽX”ò ÎD6ÄpØŸOÙâ= ¢ªl•È'ÐÑu÷87Hu7¸NÚ+Ò¸GØS§Ñ^Ò”?uݼ`27XCÖûET¤©-FÛ$‘Ê£íg‹žL )ÙžxC&•X¦Ã˜² ’Mb;pÆMu^W̨Ù[NN~T7"ÁX¾êyí3t÷O…¿Ñ:¨Ì%Й„ ‰Ø21DÖ²s@  éÄ@˜ Ê­ýr àc•›ÙÎÍÐ-¯tqTâïóf#B¡|fcÇ£eéŒSúÜQÒ¹miJç:²­“ÉÇ1b]×”à•…¨@džêöŸô^Ù˜LâQ30N[¢x KÐçßí§Z/Àj™h7QŠ; oM}m1c@Ú^‹+E]&ѳƒïòÕpyc›/‚ÊLçf<ùzzÒÉ3a¬ñ/›ÞŽ*‰6”áÅE Ô¹FY¯‘$\8/ÍOrúxœ~ VšPu×,:ç¯UÚ²Sdžd~eú3ˆ’§˜Ä’'ˆ*!Mýü&ãܰr=e‚çùü±Y"Øt™³¼iîÙR&ݬ¯ì7úfþÑ-£{ cP,dò¸o•1È÷2°‹4ϽCJ¨LÄ•f¬›¡ tî Íc¤pòòåaD€ñ³Óa¨ShªÛhï‹KïÜÚŸ £(2Γæ4Ÿä°W1å£b;,ܯ›Ï|>•°í÷»ðI‘<Д±7‹ö^Í펞öTƒëœRË–»ÃÖ?¿Êkž—šHZ ]iëòð`#²¶÷¹Òò:‡·Ów~Ëñz3¨ØÑÞ_–ÚšžÇá’R)8ЛW%­$á·å­l1(ê?”?gT,>m£ælU+ƒýVÊšMæa8é½LÓU9Ùýô(ËÛ ¸‡UˆåJOK!nå,öéqÑw—KЬ­§|Ok€îñ ½ñ+WJ'±f$Ïo ðE£b‚}•BÃ.ÿSÀBNp¬ÅûÎ2r%=â‰HºÛ°-¿ÞÞpE²Ý§5³~ûœ Aáµ1à^iDf˜•×v7ôÀ½Ž^'áæº&-¯ßçι}#Œãñ™%ò>“×nµ5Ùëzñ«<_}òåþ ¸ÖÚ†{·¼|ƒ4ùûfa O]_ù"g°‡sˆa†Ò·õ“Þ€ÏA•ŠdÜ»Mò“A©'ߙƱ{Âkºy»dé™?Ïà ã…ðÔtìmøˆ¸¤h·ãeZM\ô—•ˆ,6´.Ф¢ˆ™îÚ÷¶ƒ¨s^+Qo¤Áenšýó‹/¶„A[ ›åâ‚×Èä¬rXEF‘ˆ< ‰ÈØéNÅüñc!2Q÷tÌpÛ¥çaë…ÀoÂêžv5ÞÁˆºµá¢jWgþó³'ð¤æ‚õR…m–†¡›du–•Í•htÖ\U,»²µ§êZIñu3ûV0wÌb•(§vl' §!ÕË^š ÙY—À•ž"0 ¿ ­®¢irAr£-ÁG÷j¼¥yÙ^)jGÉÐ .ñ ÒpFÒ †áöÔÑ­5ÁQüD~!Y+ôǹWÏBâ5ã¦`¿œµ½Fó×»ŠÍìl9½¾jÊ_P¦åÞÌ»`ÚÜü5ÉÇ_åPჇe ÓÒaiêåû} H:ùöVŒº±i§nõýUÍ’©O’-õ½¼bö­ªþ‡.ô$ÿ/µžÿ#…³óu$TK+­@«VKœóT{sPÓØrP…ç ¦rPE:Iÿ!5=•Ïþ³à3“ÃìE×ejeç("ŠŒ'Žò“¾ÿƒU4wr^ØÝ†ªO ³ì9>f69DE#s@±¿Ø½È‹_xÂcô®Édcfah ĕڸ¥ëö¸mØéMŽeC˜7«ÃXã\’ô§Ål^ðÕ ÷iJ÷Y¨ÓDol»šñ®Ìœ¨jU¼©\¨}=Û C!•«¼{œµ$…§üñ[ÏyHœ5›«Ö ˆýl¹žUTƒõÀãú?lÛ6r*»îEeV)Öû,ÝÓ?ÂÀ‡²\] Xø]°¿ÔÙÌ E ½¦žò`?u\|õŒæ²n_ѽ:öŽ;%lõb<à û å¾0¡UAÝÕx1]"傜ÈU-È7vÒ¿½ÀAã>"úˆŒˆÆö>ÉÏ£Ûaב¹»0Ûõ1MœŒÑp¢Š&bÎìqlʃ~&ôűφ1wÄeè¦Û?æS7Gò0}M‰ ª§Ë]ô‡ï¡m¡Î:4ØSUNM ’‹E-R-¾SªÙž¬µ‰_…QþwöÛ·Þ·}a½ÉÑpÉÊ€þ´5\­ îˆÍ¼t‚ ¬:!ò'¸o ¯SÖ¿ÐÜâ}rò|MÎDÚž‰¢»á#?”>Nƒ‰åàËœ›ÔKJÀ«ôd„1Ȥ€pMìajK™pÓŽè ;Â=ZÜ+òæêË=-+ ¿èÆÍ1Yå^xÇ”ž«ÕƒT37 Ï6žØ5$äc„‚بUaŸU›œèbôñûx%h#¬IåƒÎÛSQÁI®¡ßºÅaº¨˰FÏVND"•í$ŒÙ]¨…BÙòN÷Äë ¶/šÑ¨‡±V˜/Ǹ¡x1ùЭ¬` ã0ƒé²ÅѺSp„ºë#&I'Ñ~éìÂëù‹`%%œ‚UPž|ùcåÍ|jo^k+e¢ØØˆ¾1(“U÷•¹I\pfâm(¦.D. UC}2:ÙrNøŠö…=»ˆµÍm¨ó¼{;·}[yAbå*[™Ð3JæO6ƒZ&¿ÖDó§Ï[0Øeó*ð³Å´¥CÜ%ì@èDlˆéÖ@‰ÐÚQÇ}:GɈ;A]µë>ç›'’×»ä‹V5ŒQ5lãç¬âKG¾T×ì°ðZÒ‚õ¬¶À¬Íؽækø›$ i-J­ÜvË ×mÑõ @žZÍÈÏ›Y`½'L¸’…4¥yŒùZHLΗ½ÅS¶ê¹jFl¡+qF¹x€Œb|jé_š¾? HkȲãFˆ!Ò=A~vhz®sd½È‘"ÒRÑ·¥Wá& "Q@˶ÎÓm4_gå<ÇîíÛËú´¾ymÊéÕAzë$êDÁðXתáT¯èœè$ÎÁÿ^^ÝËñ'r2µŽØå+§(øx›u{"ÿ¿ÆsÍÙ§0#㜓6´˜Qƒ·Ò0øQ´—Ì£ßaQ#a­Rœ5›8?p® ã¢ê ÇæÍfêç;ôÁ©&å_/è0<37Îøk‡-`"ÑïJ‘^®ôÆæÓ(j.0î"*»¦­˜X(áÒþ Ý(~Ê=·™7êØ`†€är=‘<·²ÇŒb/7•^;ís¤1TõxˆÐ>ZN?¨¤ð£‹-äŽFíüTr÷‹öJçL®âš6UQ¾ßäö;cfŒÒÔýìcm} R}òݰ öB’Ö-[ùàl؆ϋ•`­Ú©)ÆÖ¢&ÑusHäôl'˜•_¸/sÊæ°Gï2ïÎ_¢,…-îíþü|Ÿ`eRŒØEš#¿ùòûü®™²¶._G€Zo0°ƒ®°¼æ§m[³¾ß,)7·ñk16*ë.€+.Ûºoq Ì«Ô Á(¸W-3+ è+xÜeMº¢ÏéÝ*qZKm,Ö;°µÒФQúkMˆÏþQ¾ÛVšX÷»~‚Ä£À8ðh~ʼ+†5jÉC®®1“Ô9€ÿNQËé9­yR;Œ‡™¼æ¿]Ð{tu:"ãMµ†?f›`QÖ¾H)yQv:”I’±„û8–¤x,ŸnËlvÛ”ožy~ä•aÔäÙ˜Äg°.dب$*™ýCÐPSÎl\YWS“îl©‹Sï€|Òò5t"xè3Üû™peª|“ƇÐK†¹¼°©*žûR‰ªeá^œÆc,™qD^ŽI¶‡AÍó°Æ,Çû€"Î&9k®H?¥¥P0_<·•l‰%—(÷Ûµ°_•]ž»,I„ÌC”’.Σ뗆|2úçÎÄtG:'8÷²<; UŽ” )ÂÑñ¬oÉˤޞ'ÿÅi6Lì :׳‘×ãòˆŽ*fýÝ#åªøKú·¡ªÒN$>1£ «I®#YŽoüz#l—wÏŒØO܃°x¯“ˆÙ¯twL}1ç[ŒS£ ,JËsöåA6îçI™©ÕòÊ·AÔ6ý`ÿ6 ¸§EúxÐ2¨‰„ñ§|¼&ç2²æMXøL„¶ é·‹'$#ÿäÙ4ù¯B©ÿ6÷´&hVž}®{Ãu_þý#þ-“–0“6M‡LÚdùQ–äé?5XN]:uòŸ™46“Äá›ÏÏØqÇur~ &êg#T`;P¡ væe°pÈ,%¡5OÒW^ÆS+þ$ÏnãäLy ¦Å¯¨ T­ñ/•WÿRô¬…¬»8V‡€±%‡Ã:s¸ÄÙ…_´4¥æ©š¹ _¥½;¾²Í n>~ä(t•È ¡Ik¡bå°eÑNy}ÙTôíh‹¤ð`šÑ EÌ£5mÜÐÅ™ónï¬ÛvC‰ÖQ••I1W3CEgIFšG™u,/­q”°Ms!‰ ‹eS¸0$ÅSL¡“;,;îýIŠ®¼Ê>ì@ãl”&)¬ÔjÅLX5!±@áÁÛÌ&…šyûX˧a(ë¦Ì ”Nxè ¾ëÃ>c«’² ‘’ÓµÕ$(iW ‹c+¨ýŸŽ]"bŤCYÒ O‰HÃ`«#OŒÚ6TÐcžíÁÒì ®‘}v:±¯±ÙïJSå%d8+”¼*Ú ­ÛŠ…s{ê ™D¦”N´­mF:k.ï‹iªCº&FÖ–u,mzÉ&“£›÷°¼æËáàu“橨lk×%u^ûSq)}9¦ Ëþ½‘?…*£ÐLV9:¯~+W¢‹á¤…D^7é«å3(t5h€S ud/?i–v}[n0Ù;¹ôä†y*ÖÓ7µS®çøä{*È¢ô%WÅëGr• hÂXùØÛÄ&呚 ¯VOr–~ÔI²ÑÑLL k0aíØõ÷\¸ýý`=±±bûêËh†XÒÀØ%Ã1JsHžá'\³foÌb¹¾Âk²>1‹ÈºÃAúBµVGc‰c>ñ"2Ö,ÐÒYuª¼Œ¨VY!¶·mÝÇ*(·§œ§Õž/xÎâÊ·tÙ¯—ÁÙ½;> ‰¨sð‚fÏø}‚9LWrž„ÎÄoo' y0*e—ðbö›d‹BB¨³BúA¹¾u%ø-íå¦ò8uy÷¹êÆúÈêiΉ-Aº_óé–̃^–ùðÜq º¸î¶wåK¹þŠ Ð±?UüÑtë[¥©v©Œ4ØKn°Ø_ÉDSè§–wh/ì>ä< e^nŒòüE_§B`°È©dkâHJk]ó MŠX±Õ=Q\Ug*c° ¸™Ô¨j¿ã1[’Jâ6` ëòÝ[nl—¬É÷‹»GhT»â_ל|ZZ2°Î©Ä„…3£­ùëý3í´®9#§)f€tg]?ƒ ™j¬ý,†JM¸¡¾Ë-3ýÆr*Ûƒ0¯žË²˜F.p™Iê!AñéXü„Ië9 š;ÖFam/X¸Äè¹Ê‰ÊÉúîèKÖhcl!±Ò³TáUß7/¡IEæf½¢éiž/ë<ñ¹½. Ú™ÙwÂVUž¸™_d!R¤_k¢s Ï执 &ê;CPÌc ö)qPa]ÄXb²‰Á›]¿—‘C+ø¼qþNžž55‹äz B›>ýÀ-Ó†‘o™zÆâú#†º‚µçpY{¤Éê&餕`‹éŽxñãºüçŒÝ¶s€ç\Z ‹ÙÈ`æÌÌ&î–M®€ŽÖ×?Ç„"¥™3Ç ú­õ—g§íš¢þtÞ—9ÖÀû7C™°yÆšÊuK 0îêëYÔ˜”[ÕŒ4¨Í­ì*qPÐ’’Ÿ¯% ªdŠßcªéÕ+îÐìÓ–fô–uù†{MƒWÝ–Æ’ŠŽÌ&Øîæ†Ö\ak8ïËûvä*]»ƒe{[6J\šW67mƒs®à!unéª?eÞ{§‚51@B(-±ºœˆHRî;¥àq“Þ×é@J3CñÐÍ–ð·W€y­[†:ìÃ%þİwÂ'©ô—êÄb$‰ú«þÄWÑDÿ¾B+Ñõ†¥PÕ45Çm(#&§²«˜A9š¨Œ0ÝиÎöF32‹Øfq1Ë9“ß_ƒ¥)CÚ‡1Ò+nÀ»J²Ï¡ò›×Æ=‰·74 {¨aÿTÇÂP1RÇg6ÆõIÒ|…ˆcøãêOÞ}'¨©Ÿž®h QÊÀgÆ™ØUl”ìoÐ<ÆC§ _¤(äÃP‡ÏOõ#¬c­èU“eÀ-]Çî‘7BÇP¡ú6¦ ð˜qÆuðP. ª‡ù€1ÞÞÓJjž€èÊhf¨ Ã,ݾ«Í ï´Û87‡<×’ºîaùÄœÊHõÈˇ֙GñåÒfŒ§ã]ýì˜6&–IMÁ™Þ޳µÕCU‹éO±hâ€]SX)³$‡JÛ ËqÛS*V Ž?…Àˆ„e–µl×û_|çÂ{‰ª4oí'v1Ú´Í/,|Š]q9Â|†KBöùB)Ͷ{Þ•¿ëJrÔ_ÙÌvärÔæ€!Âiº·Áfé zkŸ–-‹Ÿ¬JlÇ¢¾™?´At8E ¦ëxÄŒÀò@îù™[¬7H&Çayçf–Yæ(%>4- »u;™_é=Í´Ùd‚2*[Â’ îôN·÷™¥úw6ßµõiÀúoó†&!Ó 6èóúÂ̤·SÂÇ;f•ªb~ísÊy*0_}S‘èÈÓjn¡ÌØŒÔ<bàÜꋪ„Å]¸Ì©b‰­N{Ð{ìÓÍŸS(à¨.·~7f¦‹x¸÷cÛ_Cƒ¿|m´uJù•¹bÉhû ¤Û‡Ô‰=|…ñEÏFÄÑÛZ×oä*»ùÉך‘uõöÑ&”JÕÙõ ¯Ÿ=µ_˜Ûl„¸X†ˉ±Ë6§ôÜŽ…¡å'©6£hw<ü›³ˆy‘Cgù°£A¼¹-?ú!üð’A„v媙źC?:Ïü©ãréRœò¼žCî±WmPîZ|àuj Ï·¶ˆ›Ëaì/Ûèåñâ6èÆ94Çšš¶VÎdvw5 Y ¶`æóîh|ÞDÔ 2¿:‘oâûFžC8ÇJ ¼wòd+ð¿Íæ¨L§ä¸àb/ÔâßÑîªë™0Å(‹] ó ÷‘¹æÊä¢_ Ëßèv1sl1<Å<߯¥Ñí!pWR#m„,è§ð2Qò ·þ‰å| ¼²î?Òjÿ°Œ¡eíG÷´f ;¯˜Éš8+áñkV èk8ë‹_óÒÌ×rý:Ù,—áå½7Wo¢×{^q°Š fzC–eâla®=¦Ébx˯ßÛx¦g4wÂ÷(Öœ¨Nì>œU%ÁHyº¦ðÝŒWw"ˆ“cÜ5çBx€ÿ>¸ùºüôÛ¹/I0Qý8}C–¡0 «2VÖõ»™ˆ—<¨²›åÚ×Ìîfö–fn?ÖE_î¼Ï´Š­;‚êzmiG î‡|ª6!ŽÞWåÇÓ|Ì÷ÚªëùÛ‹òÎ&kö®Øü"c3^¬Ÿ–4‡$Ñ´ Lœ't½pám*—ÕWìH Êî ¨•Úþ«“D¥qs2]-²‰žÊñ:šZ´Ó®¿^žÁ~tn|ܽ·×ˆ¦ÇVË/ÆÅ ϱy¼Œ7ïcöº4!s%O ]A ­yÄH«oh{Žx)?ìJõé3ÆB«{R°+ùÆÜœ…¶ß(Eá5R(«àÀ¦%]NØ »©r%;ß°uæò ²wåîí0Pô=kòùÕÛBvHwáJûë'G¼Dýb—ži$aEîÄÛ;›šhI,žØ¨œDÙ ®èœýIÂZÆ>ëJ‡ÐÛ"S{F¸GšT¶Å·¶Naûõ/-PßÙ C»S:hÍ…òÍIÅk]¾ÆZ9,§ìÎò+ç­åâ <ÿâCUŽ0>q™Nñ…&È÷Ÿ¹0¿¥C!ÝÔ,fnM(Îé¯~±t['äƒ%v8b³MÂPÜæý+Š –0mM&ô„å¶ñhß3VâAÒ£J&´ „; ,§ ')Ë»OÇkXèn!Ò_Pù%ƒ@ ”£µÏ!&÷ŸK;ô ]p80cÔÕ›ÒB¢BÙMVÕñ`Þ£žRŒMˆ~=çŸÙy‚¢„hLѤ@•;6¾m[¾úø¨üàUÜr2Øë›Ðð}EíL§hšñT¾¥n<ñû»<Úú0–]`ªÉè¢êžá7\êžô­¡ETšŒ”±`™&þ´M¶À·«l3>¹ Œ­k ¼³mTvPh°ûm¸{¿xMEó8ûsxccÜÍÂÖâÃup¸*qS†¹ë~†íÅ‘Ky¬C…v//’*ÉÉï86¯×Ö4ò:bÐípq;ÛÕÞ³2¼`ž Of‹oøö/X6²åÆzb'yŒ•ToÃbJYóáëÇ cúI( Þ.ßK½ï)õ tÍ!äÙvëãÁÞÑ\\|Øt@tjN¸¥ž×û#‹0týâ½;ån^Òíc‹×æÿ榴q% r›ìòÉ…YÚ¨×~‹{¼q­c±ž^|·É-5u8ˆ¾rå>Ut§Ï´á£ìWëá—6$4Î^Q8ÉÓçeÝgÐPjÄXÆq¸¢»m•”5¢U¯Øk„œ£†PÌTau“þÐí‹ÝóxÉŠ„ÐÒp¬xFÈnX½²ø¥¡ú>*:£Íѽëb ²xLNfâÒ>«Ø°M}y¡CÊR‘Íâžn·×äÌ¥‘­àîjrca,#.ŠÁöö¬MòðÖøÔßnJ.­'>³º8`V¬¢ìVu+ŒýÕºé] ž 9^P€Ða´ûÐdƤ[ à˜åЦñC|½Þä{­ Oå­€õúá„î84…\Á¹TÜO׿¸Áð«!@ˆTÔ¿úæébËveå:”5„ix¯¬z]蜬ÓRFÓ ܦ¾ÂÂN÷ªù_ ‡ÙoûÏœ€;Ë{ )Úû†…ì¼# òïži¤4œþ? ªòæbËdipy-0.10.1/dipy/data/files/S0_10slices.nii.gz000066400000000000000000005710041263041327500206350ustar00rootroot00000000000000‹uRÿb02.nii̽g˜UÙ¿½Öº÷Þ3“I™™df’ÉdzIïtzBèzèUP鱈"”¢ £ˆ`éEiÒ ]º ½ó?Ͻôø¿ÇûéýøfŽ™ì}ﻬr]¿ëw•µö.1üúW 'ñ3$Äÿüü¿.J Õ'-å¿eþþî¬mW„àûÿçïUëç÷Õ“ÿð'…Óžéÿ¿KF¿õ·‹ß¼ö½›.üí=7ÅÊØ›ìCnà›Ë=þŸÆrìÍåžÃû“þó»â?çóöÿþ;dҌꛆ0"4óC]¨ð;®ú~XhâõpÞ gL‡ñwT¨åÈèÐÀ'ØêY]¼n ía$?£Ck¨eÎlCÃéü­ãÿaœ5’{õñz|hãª2¯ûÂX®mâØðê9M¼«çÜfžQá©=¼öiåÐÏ«añX OÊψÐËû‚ÿÇq÷.Ú72”¸S7íôžuÕ#Í´À;Ø—6î1<$Îh©öcHèdj9w4-i¬^ÕÈ=[8k,Çê¸ûhZR©¶»Ž;9>£¸[cõøhγoƒ¼¯­Þ³‘öŽç¼6®hçXõ“q\ÑÌ»f>³½£½fîSÇ(çúNŽÖp¥=tœë«÷m¢=5œ9Œg̤=µ\Ù&r´•g -ü´òœnîÔÉuœ?”WÎA ¯ë97rÆ®µÅ%Ωå~M´Ï>7q÷ÀChm gŒ¬ÞsTµ%­œ×ÊS†Vï9žOÛcÇ¥¿=aBu®½w…8'ŽK}uºxRsµ5µ|ÚÉ5 ´±ûÛ3gTɰµµ|:ÈÑ!¼³¿%ηÃè‘ã>œ{VxçÓìMCµÝ-¼êâŒqUyéC†óiÏʱQôÌÙoág8#ÔE? îÚȽÆqžçS”Ï6ú?‚óêiïȪ¼ ãêȧ=¼WΫ×Ôðº“'4ru#Ohã¬æê3‡Òæ¼˳ÙÑôªsÊܵOjŽŒ`¬Gs¬ŽÕrĹƒ,æ™jd”Ôv>¯å“&ÞÕügGp/õs,O]GÿŸÄ=êic/íS&{éÓzTÏ“š8>ŠgU®®«ãiŽGŸ·ðLGª•»7p×ÀYC¹rLõ˜sÞÉ“sÛGó©5Šó%{1ÈUyæ"m÷Óþ/Ó¢aÜq8÷QŸ²DN¬öq÷¬áîb«†qv÷QëE‘vŽŒ@F0RýÕskª}\¥V8O¢A²ï•]ï&RŒsx²hÐ]µ¶êè áže®ìähK˜ÊØ «>yŸö2:ʺú¡®Þ—xÞhî×ÌQeA-ιê»r¢¦Öó·‰c£y~Su Gò™è7†§us¾2š×^7žóŸ9Æ5Üe8g6UïÚÈ' <¡9Lc–Ja.º7œß¹ôÁñQêÊ´RùW»Çpß&~+Èñä8ËY3W4s–ÒlOFsØÈq{îÓÄ‹¡Kë:ù_üëÕòFF¤T=x’3:„»ˆ›uœÑÈ_G^VnûxeÏÕu{<’Ïj¹›#¡¤ ¸_gŠ«üURZ¹OÁ™Î’ÓJKÔçݧM¢ý#è·w‹DµaÃEÖˆd+óœ¥ ãŒ2Ÿ9JŽÚfð[¢ö¸sÆð®–³ìñ(®ÊõÓiEïÔªc Œ§2¤þ{Ç‘´©Ì=J\aOµ üŒås5Ó;Ùš±¼®pܳú9§÷òäæÿ´O;5—³ë9K{YËsìýHΙIKì…¶Á÷¢Ñ$ÆHû2yÇë2-;”ý‘Õžx/Ñ´›ÿûi¡¤N VÇRØC¿´Z5ÕžÔUµV‰sNJü?«Úf¥ÝsDŵÉÕþiÿÔÂZÞ·óJyµÃ9·›³›ÐŸ¡)øTMíä˜(ãã8[ôWcù¬Ìo‰ÑèdTê9«›övpßqŒÈ|fj.r2ƒOçrïFŽÌc ³dÏã©¶bç×óª‘㹟"–ئp÷Þ•9·sÆqõPZ ¢6qmÆ"yˆG‡Ð¥ºàÿvŽ)ÿÃhÛpÎ×’÷VÏÎX©Ê]+çôò„Zþ¯ãJµ@ÜÑöˆ©¶Dûi2ªU½»¸S¤_öXLWÎ{ù¼ÙžÌèmH?7¢Ïsy?1¬bÍí¦ñj c`/1zMäIÎYýne>dY8ª†ªkö¼‘{×2ž"¿|Lý ´X§Ä8B²¯±Œ«¬«—v¨Ã‘¿­ü aÞÔ-ôîÛÎÙ5üÇüÍ©¶Q¾!_‘…6c~çò®®ÚZÙ‹c&†‰Ž÷pz¾90š'ÍàØxFk=Æa{Þr^3£äù¢£íUêµÐó8&¯ÿ3§«¯öË}•pí©z!ðie~{h¬©•ÙÍO7ý׿ä?)xŠsœå] RâDv‘Q»$жóÚÙT"}ÞLú×ɯ20šká%a9gû©’)ª‰ÊJ—x¡v4s´ƒsfVÛ9£Ê„ùÛNß7­JÏ2Zäœ?±WÞdä%ú?“×e~¹ƒÖ×ñÉš)ßÓšämR¯ÔÊNÔëÑU´•Ç©»çU8ÖÁ¯ÖoÏÂ3ËÁ5™áéñhý‘A-êà\U{+ªjÉÄue îíˆÈ%”õ.p¯:Ú›ÏÑz¶ kÚ‘)Ü]äói´Ï9î +ÙôJ-œ4Év†#ãéý<γ ÿµµÊ»vBY÷Ô Q¤Â‰þˆjiutJ´Eþ§^Ë=´!¢†=´ß2Fµ¡†;ÈÆðdÇÔQsd;ŽG 3#_UšeÏMÜfµ•¢’VPßH«×Å“ä7ʦw‘“Gî+Ò7ÓZy½^ÒXfy8G;ÐŒÑ=ÂÙ¼Š¨Y}ôÞëÙ6Ú&W–õÈò8C©—ñÙ×aüÊDJßÙ·<‹Ú.cò~­b-WŽç3uL‹bûÔ*ù…½Ôzhkdº ÜÑ9ÕWJ¿Fñã|Ösm‰6L⸼PÞ,F”øÑêŽbl<¢录²>®k¥Wú‘c«}Um»œk!?-UíšÄµø‘íÉsC=в,³Ê~–¨ßÂkgØ=©ÉÞ³Ö2 œ# ž5œ7ò©3iÛFUGÄ«o²¯.Žˆ*ú'Þ³Ž;Œãž™}Ê ´ýöp ø5“{©ÞWž5¢Š ™9‰…õÜ͸@=¿SiÈdî*&ÈØë«/ólÃNlÅ's¯©ô{=°Á1tæíA]µo¢v3×håõ=õú¹V9“)ˆ8zæ2½¡¼åäðÕój½50Ç;MíhQí­¾[fñꃖH¿G©WªºiE#÷“±. kª£—¥cáoah\¿ŠÛĄ͡ Â&adœŸ®‡_ÄÏâ]á9ð~"Wë½V8c*OV Z‘€-ßRV¿9/‰–yÔÊfG];• íOà¯2QÃÑVž©ÔË”´¯jˆ¶]^ØÍñV”-9^²`9}¾Üšªæ÷2SF<¦3*cœôhq}==Ǟ؈´Å âU±4x?Üv‰EÜ#í–>CèýKáéðVØ"~ßAâW0/ÆWŒŸVЉ½@ £Å™cöÑ}™»¨'>µÒ61Ù色^ï>îŽëbMÚ2¾>Óãþqb\Ÿ¿+âüöÄ-ã5é´¿?.‹;Å´¿ÛP·@>þMG¤?è¦eùÝ>\¶Á~Ψ¶Ëù–«Rù_{7¶úwW(½æ>dbêQ–j_ãÑŒçËÿhu÷µvž™eEÍÇ Ó8*ê©ar¥R [vÆÎõ3ïzîF('‡ÂÄâ¢â¯Èý7â÷™ÙwÃgá0PoA¼,ž ÖEXëÒ:¤`(¿-qxì``GÜ1–âá'žŧŒëvHU;wM{7EÏÎሺžxŽm‘ë[ EêäÌJž­ß’Yw–}ÓnÎ’!èç*㡊“²¯Ó²gŸF,q4œa-„VÅè¾: ¿©Í7Ž^öFÛëxºÖA¿ejø^8)Þ™I»Ç»â÷âJí3l\mœÇœ_¿Îü÷Ça ýFqF¬Ä5À&nÉ™­ÈÀJz|'yæ8'ìŽ'­ï¿!ã°q8dÝ•¾ç2®%Ëó¡öbD°D_Kó!²‘&Zho”ñ=û=ô__¿À܉öƳg2%å=Çk h9¶#ùŽqãÉá ôÞX·ìÃ<ÅÞ°¹Sãåñ‹i³ø?ñWÌý4òýJ8ÝÞ«ÚËMx?6¾z±ŒqDœ檩¼š bî“ÞŠÛÇ£âY åaZ6žq‡é@ÞAÞšx—ó–rm¿˜§ß£Õ–·«ùuœ'(ú™r©!\™°%‚7!~=ß!GóçÅõÀò=üµñÈøsÆcï‘øZðoXÄÈlÅ8ÌÆžÂ˜m§Ä9ñØ4®Ø Ù=™—怎_c6 ¦`ä¨yXEKÛy¥¶ÉÚÄ£ÌóÌi£ŸvðZA97[â|éë÷VÏ5Ƨÿ+ÃP—äˆÆ`Å|_W¸sƺ:´É(§>—>™6X{bÜc§ê‘ÞêEƒú¸-Ò='ÖÄÆóã†ÌåhŽLÇÆŸ‚ú×Ä¥ñ¹Ð7 ·óã_â@úcÔDÿÆ}âñ¸8+~~˜ÎNuÌ|#¸ØœzŠ?¤¢™bíÖlÚ:„QîãõdZ ¥¥“¿é媳f¾Ì½7blÿ‡Óz½=¹‚³Õim…ùŸœ·1­%ÿ5¦Ÿa|Í™î«úlj—ysFç[Ñ©Ýy¥çyZk¸$8¯ÃiûzÌåïa7mHþ*ôûx$Añ.=YÄèœÿ™ž*Po£vìx<¸+~X6tqU{: 8˜§è•9ïcá«y¾2/“—ÈIí¥¿²SgÕÈ¡ïDwÏÔgšÂù2j£CŽ˜Ñ_õC‹¯ßcnL^ë1uZ­jf¤ÍêÏѯíä^"Åhy ÿ;3扷b½> /„H[±ùÇ#í;1§ÎëUéîÒ鉸3r¿¹èгÒWS-g41>#AýµñP4G;Ø&´ðÉ(¤çøøKÎx;°ˆçÂovu:;ÆÌä€Ê¬si>D¥f‹êæÙÄõô£“sõ¯õ Õoù,:Ç´ªzøb¦V2GY”y¡±)õDÿF»06‰\ ƒçka±ÏÃhû á.þŸv…ív!ë]Ìö|ðp§âræó‡ŒÆwƒ£ð†Ƿ›pÞ!11n`þ!n‡h3Û‘£áŒÁFa¢™Öa”§Ñî—ªò`/µBÎM¿ÚnµÙ|ŠmÔßSÌBªÆ&SqB=gxÇò^TÕqÇSæãuÊ€ÕÞÅøPWæÊX¯Öp6׎ŸëAï§Ã+áÙÐÎoÉ»Ìó °àæó‹imé7qnlÀÊïÀì~;Ä¿„>zúJh‰Ï„ÆÓÓññ[ô¸ ix1´¢K»rîrPrw°³>nD;ÌKXÁï"ËZm}Qù¸¶]OЈ—¾PŽS8ÏFa”u¥ÂH@[¯Å÷jÿ{é_΢‰iZ9™‘ÖDÿFo¹à¯½Îù´¬i¸è–|¦Ç¬†ìÖg6ßqëTì\O' Û»Æ_Ä/Æï§Ò†ñþx¸öfAoæÕïÃg¾Œ9Z¡cŠ6_©‘x/ÇÆ ¼Þ^ xiº.ž/¢Wƒ0þ¢ªûÃa>‹âŸâ—éϾ0ýùñÓ°ÉŸ¯ cñöNevÏ †§ÀÎ:ÆlU ïßûßÀû6®?…;œg§ÏâƒHÇ´]œ…-œO/gã.eÄé\Á`VS_H¬×ÖW“ÙëÝ—¸Âl¿ùÙœ³(ÿÓr¬´þ²‹ÌÇ!#J‰VN™Ùž ¨—óŒ0ô7Íf_¶‰·ÇmÓµÌÝ^ñ@8}}lãï\úÞš¶Â¾oª%ìæqÚ°~¼4ü0”°kåxþÑPŽŸ†¤ÿ#îÎg¬c¦3Š¿/£)!}‡勵áQ]Lï§Ó¢Ñ`ÀøEÚtíµ}µí±8fþÍš*ù¾¸ïqÑCÆ'BX«8®E9µófTZ‰ôJÏR~l6Æ<¤Ò¤ß;»…‡,çs¥m!z¿9(~6 î‹ñKü¬fn7 ÿ}ŒÀ‹1ç"ýp£)ñîpIüñÂŽpºð•n 7#-Å·Áü‰HýÔ¸aZšÎeö×…§•é)ÆïxxÄÒÝiŸ¸÷Ý窡cáVc£"q-¼Qoc[ªý2[¦}–óµ·öPd4rfý“c¥äë5èM;ÇÊC¶þÊ·XXÏ=eæE™a þœ5€ÎÅê]‡ ÿ(<®½!â‰øUãÌZXúnz0Ü BÔÃÿ€34Ý÷Mß g†ik8kø2ÐÜ'fýÎx+2ò¯Ð+¸„+> ›b1ŠcÒ†HØŒÊ Úg¥‰Qômª3l,VTS.¬¨ªÐ¾,GÿÈ“‰ÝF{Œÿ¶Òÿ‚ûè#9&JuŽsë#‰ʉýUþ#ÇAJ„k1¯›‰KÎ `Ûòø1vüyØïƒXÂQ ÷;ATŸ~SZRìS_±Q¼š™<:Þ/H¥yéïéŸÈõ³áJfûµÐRÅwèõbp˜ÿ:̰KðØ8 úöì`D6gäÍÆo€²£¡§®^Šwƒ´Ò ¡®'hNCôÆx̲Éb勿¿DByrö0Œâè5Ë„µ"‚2¥ÝÑúkQÌÍìÂSõE¾þ>²Œ·ó3…ß™Ìç®ñßa<èî8XÚ!IýD‚ŸÁ'<ž®`´M/––—ë¥)ÅgX½]Á¼è†Üo-Ý4ö¦WÃ0üÃ7êÁ3h@Ÿ–ó¤óâãxŒSéÅLt¯ ÌŒ`®Ç3³™m´ ×v‰yò›~ÆÊˆ¡ybã…öËüÎ *Ûʇ3nO»AÇÏ*d=¬Aþ϶A†¼oÄʇ ˜­ÛÒòbb©/ý!~—Y¿šnˆœ@{Ÿ Å`1+õ¥À°ãâ%ñǰÿ+<ö,þX¾§¼miË´Q±AÚ3>ŸCœå—ˆ•ívHw”v`ç!K‹ùбxŽÅ¿Æ+c)ÝI ûÉŒM‚y/¤m2óÿf¬ŒxŽäS5Y.§W¨Çª­wžE ã}ú¿r\óå9Î%ØOùóoNe£e.){JÆP'åYÈs{Aʹ¥[Ê'”——ÄÊ_ƒ—?4½†$ÌŠŸ„eñœpmñj¹XV)ýÛ¿¿†øVG¼3Rz¦¼U¹§ü6~/¼¾oÄŸ¡ñCà„Û1Ëß ×í•é)2^sy? ».>Bß?$òc´êoq'Z·O ‹¨¨™š,ΚqÌËû3¤ê¨Á"¶yãcÖ<9ÿÆ´õs.Õ¿VNhïÛ¸“~¯¬ÉšX™¯éåá7ÜÝ\àïÂ祟”¿Z|íïƒÕ´ÑÒ}A¿~oÓxQøjñrùêbtÑ™G“ð|çx.¸ayxeAyqeBñ\hÃ.´ÅÃx&á!îŒtl,ÝPY\¼‡ ,„„l­ŸnLã‹}ÓÏñ§Å~æ@ÌÛÙÑGqîÌkv µâ¡uøÎ¢±¹7;bF!×°ÿÕsÄÜ\¿Gfýôùä ZP#rë~ŒŠ6…CÉRÕ ýhòƒÅ 0|-\v%|µ#–ÑÒÏÈç|ö‰·„žâàò¢Òm¥—°\c`?•øh8ËP~¢¼ªÜVÙ­ô@ø7Ì`]˜‹]X†¤‹¿ÿ–Tî(¦ ESÁ“5ÈÅù É“°‰gҕ鋱!í—öf>´iÇÒG\;=׳1¶/n›Êqë„Ì”Å4âmå†^¾òożQ##ýŽ¡,@¾ $éWc‘771> ßû,Fd2àÄxß Ëa³[!ß_F’÷CRǃä›âúÒV¥¯•w)ý>Žó)öñ ˜ßÏC‘n-?W~¥|Xí¹å`æÛ|ösØý°á¦xvظRþÅ‹ÇcûúáÑ'à9AÄø H±ºtYjˆóÀ¥Z²ƒÆ¾2û•á¨ñZ¬ žA=£ ½šÄ1yHaUªƒüל±È'7–ÍXCSaœô“äS9ç/ç6î¢ÿX ýK¹¦ ²3²ü°ú‘x8’ùÃÔ–Ó¬t:Û‚øzü´Ø°ôíÒ½ÉÌÖ‹èÈ aˆvFº¯ôBñ·baå ås8Þɹÿ ròr¸*Ôà}«8ªô:ÈøMΉlÍŠ§×ˆ–}7x þ$œ_EÏV1-È¡ö̬¶3iVÊÊë\‡ž­šÖA0¦ç¯‘Akn¬1î­ÍЋ´ºL/X&eFM\ÅD½!sáV·ÍQ†‰i£ “ãÃñÆôZ:­øYqjº0MJsÐØ±ÈûSaÏ8¿Ø!ÝCl1s(OhÇÄÓÒ¦Å6éŒÐwI#ŠîôIئscø5¨–±k£`£ô::þ5Æ¥ÜXÿ–^*½Xô?M÷€ÿ¿€M~™±œ ئ¼^źºFæÖøµUsz½ÖµTùçb¹#a¤Àú'ãZf®Ì›ZßS®Ž¤r¤ö( 9R®,¨®$˜‰÷?‰Ø÷T$ý ØD$ïöxHš_¼ï#^× ^Í@ú_$ÇÑœ¾¶_ËY§bOÁŽæ”GûØ>ö‡–.ÙßCçßcö—ÑÓeœw6g®Æ^n –ìŽv,ãÕ9é®bvÑWº%‡>Š»îõú«½5naퟱ³àzìúBz¯ò?y¿uéj†|FžoþËX‘Ùµ#¯Ôȱk&Í—Èžä¿ÞI\/E—•HÞaaCxY#šÿ:¹íë±ÍÛ€à«`}“øéŒ#ëÓúf8ÛÂt$3¿2-I÷ç”6/Wü ¯æ³øTå·åS‹ï—6MµŒÔOàA3`ˆ'Ä]À-Ñü—Ã& â,îó%pLj..+Óyñ¼Ââ>´n­ë¦9úmÍ“–ÐH¿¾»=T½~-·x%bËwr½‹s<“s¬Ÿ0ƒäx‰nJºÈ&˜ÿ5´fϬ¢ÐcÒ{NHÍX8×DFêí¸I¶E²çÒÖwÂmáªÞÁʽæ µo†Ç‘wûA·‹Â­ágèÂÕaq:±ô¬q cñrøFºŒˆ¦cЛ[8ã¼pM¸ƒŸ×Ã}áÆ¡ŒFÜç¤×ÑŸ‹ÒÍ à hÇ7Ò^qЈ®Q.™šµß²{®ô[¡dXÁ<•ÚkL;1ãªso¤D ¨}°vÜ‚(jFAv¬Ö8’Ê”2¤-Çì¯6ƒýü’y8Îþsö4­^Ç<‹ÞW`„µÈrÄ¿{98“yý-}»5<ЗߥÉÅuÄ?Û±p½ÈG¹›¨öåT^d¼îåõãÄEÚ‘¤n¸e–æ¢8ÝÿA:5}kò(3€-êg&m{ær™½ÅÊrn,ÎÑeGç«â¿1çö„eÆl¶»›ã£9W Ñ?–#8Êæ¸àÜ»‡Kãò¢žXåÌâSá¯án¬÷ƒHÁ+ð¼ÏÃR¸à“Ìâ|ò Ç> sÆóae|#L ç›Ä¿o7¤ËèéÐx/#w ´{Ã[‰'<ÎÏí\=ítÃw6 Ö®–OÚ:Þ†§•V³8KöÅœŸÑŒ¹ÖêiÉéOá¸ñ‹ŽÇ”ÿÙéäל¦‘0ã#rÂÉÕž[+dÆHä°Ê*g%h¨ÃBjUþ ËY„þ™½y½‹Þ?û^˜àçB+óz ŸPßw'}z~÷.ƒ§àN÷•ö©\Túï_ô¾}‰ŒåÛhÏ`À›ý(LáþÕXð*F  ë8 Ix2LÇË*âßéÙDú#¶›É3e%„‘K³!ÚlsÆíŒn(óŽ–5UF Ìÿ[AfV×ÙÖƒÐãë༩œ'OÔ¾Š'Ž›:âÚµ"OãÃdü¹â³ÝÌÿY~}} YŸJïjÒû©©í·ß w¯ÀÔ’ñé‡Á…G‚™kJ;WþZ:í^…”7"/£‰˜EüŸ:Фƒ]Î(žJ—†yôà¸ê¿‘ü·ƒ7­J| ­__pjé¬Êõ¥c°%ÆdQk Fòù|c1íú2Lè´§žÜ`%5¤³âÓøçÀþöL3˜ŸÕÙ•ý¥4.hDÏÌ ˆ­ß’gÎêiý~ýY«hµ—}ôXm±"öÌóZáffPÎ'J æ|áTFúžðë8‡y» ì{ŒÙ¿ëw3ñ쇰÷WAǑϑü‘Äõæòûúý.rðvÐG:§¬ü´´/sý&Øð$¸÷,ŸLBošãœ÷0Üï®ð«¸SZ‡ô|Äx-® ‡ü4¾ÐõËÅÉÔ®drŲ`F%]‘×½4ñZ‹n\Säê?³@þ;‘¾Oçk®süÛhŸy/+ ¬¡ÐŽÊ„ÍtECÌqf8œÑ=ŠJÕpž÷éÑ û/Ñ‚G˜á_Ù+}`>¸vI8£›÷ÿtø##ð!±1NŒ¥Ò5§–¯GçߢöíÏáBdèF¦3þŽºáŸ£Q‡ ¿Œ¿*ŽÂÂ4£M-±%=™þŠäŸÎ+½÷‰Û¨Š2š©'CÈÿz+Ž‚þ«Ñ+ñé3¨—%ÉE¶iüêÈv\ièøÈœœu¹¡öClDšD“e<ñKœ9… ÎÓ·˜õ»ÃïéÁËhnw|>ý1Þ?õ¦ppXËHu¡Ç¯Ðÿ¿‚¯‚êû‘Úµ4¥æÙÊ!©¦÷7¤æ7èÑçÈÊýDÆ7%¿wm89.a¶/( +º‘ž§‰ÌޫЫÓMxVÔ,¢5Óþ™àµ±ôy=6šeÔ#³kd¬—Õ†‹s~"ã7þeLÏ•MŒŠÑAT9ÏÕfÌ̬˭” ×¥¶Á}æ†Ñ»Ö0“>ª™×àßL|[ueúBy~ñx8J °=‰DŽä-¤àÐa$sºúý‹8·<£2½æ’b]xhŽ·‚Ž÷2B’YÞjù»Âñ Þq—Òå¥rjçó¶x]“>/Ʀ½©x&ˆEîF‹¬M‘ÝX÷¢…2Ÿ©7£%sv•QÒz×ÌmDú*ûÓ‹ÔʵrúʺŸO7®nFÙ*ê˜ß®Œù=÷ ÿتéÝ‡á•øféåÖô/äÖJÏ_Q¯u–ýTäùûÈ÷ë`ÝûHÃŒÀéŇ•5•_§èËÛ4åßHÆw‰æœNvãì—ÂØ»_Ãó¾]œV|ŽÝ—®Ä§Ò¿Ò2AW0£àg39²›+ùDpµ[¨7oÆÓš0ý@ãŸF ôôÿ™ÉÖVä5ôYn Ö»nÃõ#-hDö¥äú@GÐãYTaµ1KGaµûÁvrS«‰[îSúQ«kø]§çO!χÀ¾N¦ÚÿJáQòÞ-é’x±wqiœ’fQ~-ãôWzý-4f_®:+±ý_‹¦\·,ÝQl †FäíàxdÚþ;ÍfnOܙ֚••ßYÇ!ë7 ª'à:eÞþZ¬$´3×þ5ÿ©ßk>P~ ú›Ý±ŠLI0w&â9ûúSâJcøüv:1 cG—“=',³k™×g°ҿË7•¶Níéq8šÏï%½Ž*Ùo2³{PÇ»'ñ£ĉoMÇ÷ËÏ•.¥Zr ˆ·_ø½þV8-¾~Š'0—|Ú èwð0O(æU®No%ëÀv^îoo¤­ÝÈÿA\+óW5×gÌeZ×èã€z±J´±QW ©ÿQ¬Ü̥ͯh DDù“Ñ`}!1Óé4ó4®‹ú‡­ñ€RÌI—ÓÊÃïoû—G”ö*ý¹ø1µ>Û¯»lxˆY¿›±ŒÞ­àõ;amQ©Ü·®ÜY¾!nQn*^d»–£¨qÞ úzp)ödsXä¸tvÿÌxPqTù`jb'Â2gàKïÉ<ÍAç#‡“ès–]GÀ½>”àœïÓ«sç\åš‘^ß®Bÿã%²¿k,È8`Žxéï‹(VO°>`3zßÍsq#ÃUÅ5¥ ±óïÃÜkÒõ¥—K;–"³s¹Ÿƒàë=èÇ{Øõ—±q¿ã¯Å¢úíåMÒGÅî•¥éœÒÅ—`{`A¾‰Ö¿ŠÇÿö~q ¾þÔ<]z·ôYÚºÙÁÞtXéšb:½Z¥è“¹6PIµ6É8OŽZÝa®C]6 % Ö›õVCW™ñlázkŸôrrÆÏ¾Z)l…… £bÞI_bO‡Ý5WÔîN3Kp·EÌô±ÅSÅþÅ-åQÅKäz.ЧUpÕH$h¶`.s7”ÜÕDxܱÄ@Œw7V^ŒRô)Q¤»°$¼p2òþ±¥‘TEþœØ8þ(ý´¼²4½Ø/Þ?sRWyD±(ÜËòdªòXk\] ¥îš÷Ô'2ÖÊÿ¢‚ë]›ª²ø_/ÁÞ¹žÄs\wfôXÞ§µ×V8æLs$mJµæk{ÞOÒÜâu|±OÂÚôI*SÊ?/¾È¼ŸJ<ìÈ4\ü'¶¡¾² Ñ­^â%gÇ{ˆñÕ¤ýXý0ºôdü)lîV²ƒëQï4½nŠä—ó®‰Èáðtxý|£"ÿõ™Ä€flšî,õ'ÕW”È‚sþ×ÕNm Nýï ïÞˆ7”î§vé’RCyVúïiïòûÅ q*UOà³}_ís´ºV_Ã(k‰lL¡ræNNh†U/bÜÃ÷Ù€LÀ—Éx®)—Ë'ã Ÿ¤½ÒV o;+bæ`SÌÙMböÌUÚSm•þ­ú/2BbEˆ9 #yÖDÉ ²ýɪúÚ9ÇÇ 2ç¼Ò (3ãZKWÐ/aô¶çÕÙØžíãuS+7=åÅå£KÆŠsÊ}E=]ILü>ìü‰ØÁÙÈ´H82Ýœfà϶â9ü€1zë¾%µ?[ãIn—øQoí]Y­”=”ŒßIülPŒ/ŸY^¯èÃî½Ö”f–æÐ¢U}Ø>Wl+¯Ö´Yì6ë 9·êk®ê0·o-·cãgF åÿ"‡x7X-¡umZS…µA®÷È{Ÿc<µŸžÕò|—1¼>¬+®/Y_™ZùNå‚ÊâÊOk¾Nîþîx@ü˜˜å&x+Wo!bQGîêJðð}lû•èsúWœ…—ôU¼ÙÝÑë³âo‰NB†s^zfüüÄω ­;€|ÙÏÀ‰ö´Yú˜Ê¿>0/4eçuÁð–¤'Òèâîâ„òÄÊ[¥¢¼Qy]ú35´µqývåÕLZm>×ìï„j«å®ziflµn®M0¦§cLÈzf³xöÅù×ó1Z¨L[ÿ¥ÝTú]ÿãZlc«cÁX+GäKîs·<Ù Ü_^/uU&kÉ]Yó¼1|õ›¥]K¿-]\lQ O‰c÷¬Ç[úw(#Ñc@²iôãæý‡XùçÉçžÏµ=HÁ§ØøiÄ·@À`ŠçGûÏ”~_z8ý<ÉzùøH{ ƒî)¤ï+ŠëÓˆy/#ÖmÓÕ*ÃrØŒàÆÀ´ÖûŠèr÷}#ì£ù« ”wr5¤Þ…¨¨'1“¨Ó4ðÇÝ ¾…4//}»Ø’?ˆë`ß6Iç·SRH×3—uøF¯Ýú DâŽÀ'‚ºñüýŒÉ~ðƒã¨•6kSSéœhõÙ¶x½°Àƒ´Ã·œÕ0N'sW‚õ€­Õ”9*ê‚ÖM n—迵@rÜ\)l¼TË Í×’Ê ]¡¶È =˪ñr[ž{°=­øJl(+.Ū=~›Z‹ŶÅd¬VÀç¨z&®ó ÞÁýDÿ?Âz…¸éwa±o0NÃÒÅ'0Å{ÉŽ¾†ü¯kq £“ÈŸ¼F(+h©•HÖ÷[§+¹¾%"¡ýü¯e32d½GΌɈ\³–×ÿ«ï2¹£‘ý1ÎÚ¯”èYx÷¼Ék'Æq½k¬7 _AÖb÷/ê‹mÃÑñöpkz¸4P¾¼xŒøøH¤<ÅGˆ®Ã |ŒìÈÄ9ßÇW8 ~<" ¦É¥ÉåcS¢æóžx}þË0 -Øßw7ÆáQ¢/]y¯éIü§€8_„æåú·Qè€^mAò¾Bj´–_FhTÀJ#_zŽ“1m«‚ôEIã»m\oõ—£§ÿ/W2§ª 4§ìy®¥¶æÆñPšŽâ“=‘ÂóˆæîB>à­0ƒ9Ÿ¦¦^÷c­o¯fƒÞÆ| ðU°ÿé0—>®"‚7/ÝQWÚùÿ°óüaØ.0͘‹­8›Ù€þ¼J„ØØz(²0ÎcäWÒûÉŒAmqå–ñ9ÑÚÌ­lÇŸ’ìÜ PBÌæ»2NÍP+´J|ÙYNü5÷£Î+JƒüA¦Ü Þš1rMzd,U†¹Ÿ¬áüÙáÅ5i6m‰¼à†àýgatœ„ìGäyD5:ò Èÿ0qí#סÛT»ÄgJ-éµ0 ù>Iù ?ùp²ÿCaHõ`䎌Ì0Ň²Dµø=„…ä¼!÷GL±É™ ŠÕÜKx%üè ,åúôØ=Ô–ÑK÷šÍëÒÄ-ë“Õt­›¼O­uníOŽ»þ+ï„fäÇø‡³ªço½¿ú¢f{N™ƒYP£¢fEd†ÖA¸ƒ\Âû/™‚Ü (‡ ±kG᯻ŸKTä <¹ñûB`X¸‘1èóy ;ð.Vá®4´8Æ7HÝÈýÔ?ýŽHø¥hÂÑp…7ˆ’£ç#±ƒøÀó F+ŸÖ'"õ[ û«iC'ã`öÓl‡ö)¯òÎûÁ©éθû·éù •Õ0–gþ«ŸëŒÙ#ë]­ Ñ"óv–eEbƒyAÇ@„ПhãJQq4 | ±»–0=îPLÆc;¦{ íVØ^ .S¦oï3ç® û›FœççhñF与¦ìpàJtyb£S¨ú6Èÿm>{ޱêÁ âo‹½¼4õ•N(­-?œÆ#mTcÞi³•¾²;×=¹ãÈŸ-üÞéÿ¹ÒËzðÌ`ì¿3-ëuý¿¨&SÐKÖkv?e­¾}Ô“”!Ê»ªca½©ŒI0Œ'»‡e;Ø~úðõ¢·8½XS$ªžÏMÿ@[Gàó~Bôç±ðz>¹Ü™¾5ÜKôç±t5Ñ­/7a庨³;¶øoñ÷ÈÏßAˆF²3‰‡œÎUWÁ†G×Ô~\Úž\Ó—ð¼§Ó.½YÛaU»¼L^+È»[´ÓãØ]üdK8XaG@«W2ÔÑÜŒ¹™r£ÿ®*õ õ_Ý—ñiÀêwÔ?pÍÑ$Ξɳ*éçŃŔJKùõâDͺ»2>Œÿ&ôVgqkt›uðiyéÙtkéÁâöâ¾Ò1ø ÃKK‹ŸçW¶¬œ\ÜG,eX/CoDýoÆ7Ñ©ƒ¨xžZVùèù¿ä‡¶£…óhž‹Ñ*£½ÆþŒÒÌŽ5 ú„FC]×!3°ÄY¥ÙÝBÌÿ»zY¼ÓÔvªÛÖ„‰ƒÞ7[O}DÑS.¡´Y¡_dL!!»#É[Ì ßÁÂ_¶(¯Ø‡mnã™ÙdÀ>`•À‰ìu´>wQ|,î[þŸòÓEkù¢ò“5+£ËŸ”·¯]Q·[íðÚK*—–.Jå´w:9þ…lê§hÍÔ8–Ð÷Å/—šÊ7Ç`Ú¿^æØ ó½röœ¯–Ëæ˜§ÖÞ(—Ñ/½ÕÌf¬µþ!Ç´Œÿ9Væ í­kÍ’8»Î¹ŒBÈ÷‘ahùÝáPÛ蘘ŒÈj¢wàN‡»X–.ÀÛ??owVE ãÿ;Èþ] ×Y‡$ü²XY9zȬÊ)éàt`1¯æìÒœòŸ*gÕ¼\ûHÍR"<Ç—ŠË©¸8HAö¨8—Øè)Å4¢Š‡3à›'ólw~à¹öЩ¬TÐ_•¡é åu‰¹Øs]ãlÒSp”ä?Z5ýã%ö6ò™x NYGgÄÓª‘Ð5$æÕm’%ãð\«ŒCïEÜrëxvØ ©'½€ÕÿÎÿi؇ÕþgÅ[KGÖVÓÌñëaF³S?•]¥½ñƒ^@ZVÃHO§¿éY£ VPÿkO£ËïÄ_"«›‚’Ó«­¨öǹR/Íië—å}¼œã@b™˜™›vÛ8¦rlu”õ¿ÆG¬öò¨ìHûàÿâ¿Øà®KÞ] rdÔG̉;x•{UWhÕÖØ‚næx¿xm8ˆº¯¿¤/¥Àÿ…ñ²¾åÒ­ieñX¹TžŽU˜Lé@0þ+DnÅvÂø® ûq1#õJ|¿8®x”k^†/€ m™§Ss´/×­EÓäcSªýÍ3•w8R×óÞpöܘ–Ë >ëä»Êƒy/+ÀôþåZûfXæo¼ÏêaeÝ]Ô/_ædÖLù‘Q˜[ïàÞÖS¸R`}ØÀÙ°ëÂvdg?/Æ+JßLWÏ÷¢Ê¯¶æÖ;<_›[Ûš‡cÀ±}@‡‰óˆ¦míJ/7*v-¿Âyzî q8:µ ޱ”ÈÍÒ(¯ô@+ì\YŸ¥²ý3ÆyïŽ\F…å9²"£ÿÖ ›ÿ5’³ƒÕ±µ„æKóÎ3Ö@*ãFÜ÷Â삚f|ØýŸeZ“¥àÑ™;&\™ö,ŠÎR{ù¡x3¸6~=Œ®ygȯJǟÕž¢ç›Â^WcÃ;ñcw¡¦Ç´ªt GŽ}R“ʯ…Kà„méÍtL\L›»à»ƒ`¿™3ò\ÙšÙû–QIöb Íák£üþ{Y 0¿¥ÆÛ±ÜõÆþÕ`W“ëËûefĽWÜ“X|•[c5r¬ô«wʆ»·j»ˆº·Òë¡§´Iù;åãJçÆ/P»½"^[Ü>dXÅõñß'w²}pG“>¼¸éDr6!ã½=ò³‚;8 ³ñõÞ(§ºcÓ#ñijIΈÞ{^o‰±^H[µÙζY>cWVè*Ú¥.Ž÷ÑR½±ùp=Éî•뤽¯±2çŽXWg\d#î2ûô@<¾TWNåút¼8OÖüoy÷øc"v³™ùåœ+žÌ@›]•ÖFoÅX¸–t6ÏÞ”¸RK|¾rKyßÒ~Ň0ÃU¶çžÆ™ŸY¥/;±-²9GDKç;­RŸjåÔ56¯]s_ºÌe]í!ãÈu­r|#¢Ch…úd +#åUy¿ ­~®3—yYèžH¢¡hc¬ÐúÂIÖ9ÄSp1—×Ïã¤òoÊ“ãm`ÛQXîYTmÈÕ´ºJ“;±åuûr1yŒ»0 KKË“KØ¡ÿ¶%×´pgW¯Y›-Œ¸q*½¹¼ŸòhíÎ4îi†o€3dŽ–mëÌlÈ€ô}–½°WæŒÕwG¶BÆø˜ž¬È:HWÒ=1‡–=@£öApÔ­;ô̰'ZüAQ[º¶¸¤Ø¯ô8p.³µŸv1Nz«®Uw|Ý)Ó{Là.®ÕðNÛ‚ƒ†Ó‰‚œP•Þ¥ ãD~l±ÜLOG>btKüU²¸ÒõŸÚ»¼?“Ø'²ѵϙՈV6(/¾ZÑàüZïe¤CœU´‹ÊÈmÖ·vOEQF»)wÔJ¼›ÇæTô?j8R ¢Íåøb°ûú´[±k±k:ô5°¡ŸODQ+”´3æÕ{™-‘Í](Ýq$ï ½9™Åó`ùSéÛè•;dÒ.%f Š?ΚLÄȽìF;`dÊè¥6:k©z¡ÕÛäx®^tôäõÊZÎòÈtµùúŠÚƒ¬1òÇ ï% 2:hÈ8£hãΊF•r–¼Ï”–èËz<*9® ³Xïv•-öAÛÔK­Âôµó¯oí.úÖ_.DC:8{1gº†{^Í㕫έ½uX¯uÖDÁ ´½Ÿv¨ÙK½r=»Ö_}©¨·f²\û¨½òWûç3îËlŒ{[9î.qzFÇÌ*{Ì ƒqe¯ÖöšMrlPírE,Ó\Úô¥›¿;#ó­`Û",œ£šó f¡r­­vìÕ¿Õ`‰tŸž)ôy<ï¦qÏÙȇ™µyýœ#Æ;Ÿ^©¾¨¶KHVnµš!%Lý’-8cÆHÿ[!'kÖÿ·¦My¶ö-¯Ž6jŽÛ™Ôã÷²bÇÒBb®Ù×ÕùÝDΆ± œp/2#ªî\jœe5µ]£«³êÞØ9J!êÊÒÔbëŽõKa û™u%ØÌ¶ßà]ü6õSFIv^ŒSæ,¯’Ÿ+¿”B³Sžm¾*çïÝÏÄxˆOroGÛÊîqôÊü‡£äÑî¾YÏÒ’êó:ò]™ãaØèˆ2W…Ú[¦¼Ò•åz˜® îàv{€^MdûùÄÃãˆÆæô!\Çltv2?«ÊäæÎvκ+a¶Á}í|–öÝÜ•8ltʪ}­¼£$ª›·QδŽ}¼rKÇWÛ"QŒjß‘í)Ùê”±4m€èhÝ[ïa¹„’f–Ñ6åx©>’VH.&þeé3þb m€»ÎàóàÀlzUGÿõ eÕ¶Êþµ!ã=®5êçWV¥,+µz_iäøj„š`•¦òè\ÿ×è±8fyÍ–«™ + ô€ä¥b€ÌÂØ‡ÞŸlPû˜×‹/Jµ¾±Uÿêwm0{dUôèªîêKŠŽ%>)qo¥\Û©æ˜_Ï18çJ„6 £­Ðƒ˜ÌyÚŽz•5OŸÌjzÛšcò޼w‰ywÓ3Ϊgç¼NBbõPœ![ëX爾žÏxîkËäîÓ'¶‰€2 ûáh¹¾Y@/ÖÏFÑÇÈü‡¸/QgœYWÊiì›( âäõŽ˜¤ÖFæ%)“²¼ÎÎ÷9¾ g0"¯iY娮-•¡FÎz ÷²­ÞMÉ¿˜i×ëÔ–«…ò…>µ½z¶]y1%^ÈHµIꬕNžá d]6º¯¯îjn+rLÛ¼ˆrküS«¢®äݲ2÷5bžy°'vìsæÏo(Qï2c˵4ÊAö(äcÆšý17áL©»úUVœš3©£ÿVœŠ'²>5Ñ žQ %Ý‹3žk÷óšv-»ß9šÍýä "”ÿ[Ù(›µ ²W­¹¾’™ m½þŽ~ßxŽëÓê³YÝ!J‹ÿ2«ÿkÇŒèçú­³×«‡ú¢¤3¨×2Ô5”2-¿Þˆ³Øm£òLgÁ8’1I™…yd{­-'åïò+soÊ®ü,£²Þ¼}T•¯Î¯X£UóÛ ”ccZ×¥+ᙳú©­3¯#vË´tYÛgkaòþÇ¢Qn¯£áœ›ãÎ_æLõ¼nó”J×ÚúÍG¹bÜ:í¶\­Ž¶©…Ê…º­VèÝtò‰XsTÔ9£,2L™‚œ¥^žgŒÅ§9[Ú}=¼ì¥Ðƒô9r>9B ÏÖÖêAåª~Ñ<#”Ñl£˜~kœ1_ÇÓyÈõ¯âƒõÚôÆÍH“ß—]TËu¢®so~ßÏà9o¤ïàzkíŽÚl®Ù]Bµ‘Úsùw"¯þšY6%N½qE‘ŒBÿUD›W©9_βQ-¿ @½÷Ûj+òjïfÿ?£b™Ñ ³w2 õ^lQR3‚ËÖÜõB‹¥'$«Ðú‹ZœãçŠqGF¡£ÿjßÕ)£§ê·¡z¤Æû³ê?ª;âXŽºÏ€1ÑRYµOj…œÀ‘Êh¥×­ßmü6'ñ»‡3|†ž„­°uVëE(ý½üŠdú˜bc›ímt?cùþXµè¬gY÷©½ÜÛž:9¢’£Z m®SÈÑéÕ1²í9Wä5îÿ üiWÅOW‹ØÃa`˜5ƒ|®¦(ÖRgÉþ…Sö­e¹b¹x«ýÊLAÝw­µ‰¾’j4Q¿Ù ‘ß½e2LQ%Û ãoÊ µÙ~¿‡–Ûx£c!3ãcÚÙW“Ý ]Ö©#ßëç×8‰ú(;È+§^«£¬kË­Ñ“Ë#e6þæÑ0ï£WäŒe_][ç<+ >'cÁãŸZ¥RÌ2^“³²eH^iÁýÕŸvî®è!ÊcŒ¯Û+±B¤¿È[äŠF~ô‘Õ‘Ì|¯+Eî«§¬9J¶AÔÕoÈ1 íˆ}ËqgTI0¢,ÉuÄH9«ž¢–ß,ŸÜ´·úY“lP”ô» }¦R+ŽÙ?åÞ¾‹Ij”{Øú¹¬ÀŠGÇT‹­·dü[¿K®iQœcoyOGGæ3•¿™Ñ©ç¢²£f56ÉÓªäøŠ¸'7ЯËm³5=´ÏsŒ7åX› Ua~ÂQ5C᜺ŠYÛ¤­Îx§w7ŽÞšÉ×C•é[Å–}=LÕQ‘aù¿¬ÐÜVæ¬yÖoG]í“#ØO1ß“9¦´ë«çœƒ¨åÚQ-¢èiÕ—÷Êì=.cð; !¢~¨¹/# Ð>wíX}£uñ¹³ku•ÏËùõY‘0˙޼Ðñ–ÁÔp­±X¬¦:âÊÛ8Ðcíï©jŽŒÞÙͲ)Be-š”‰Õôñ‰¾¡ì¥‡û¨ã®ÿ’ƒ)%êLâIêOËhhå‡6ÔÜI?Ί^ˆ;¬ª[“i“+^; ƒü6QÃ"§óÉZPm^…ìGæê ¹­¹ŸŽŒ¢ž‚ó*v–Œg(ýF^Dj5_ö-RRFV¯–‡¨î­¯Fª—Ùê‹å9ò¨Ö;~fÜ[û[Tçߨ£íʬÏçÈãDDí™>”ÌCßÏ܉í2––e]Ýe´Gî3ã=ÚÉ]ë!ȹ´>²¿ÕÙX…Õ9£ª”š%UÊ&Ñ.q\„qü¼—þw®L×µŒ|æúÍÔi¯•Bã+â”\ܶjͼ‹²“m¢ÚÙ]Œ§ø]÷¢|óxŸ×º8ÊfbewZ<ÇÔ±Ò{Ôº8¢9ÏhíŽ\Ñ(’(^ˆî¶AnÛ‹<ªE"¢k&Ü@\——6ð©ß=›Q&Âw>ŽÊ^´ïF…´Ÿr×]:>c¯ÔÿÆß¬RÉÑ'½ãl£­ˆ‘ËŠ'ÿåײJGtQ–Œb9zŽ…öOœåEj¥Íçg®¨žêˆzµŽ¦QýŒìñ*{z€Î™£gìÁl@¶"î 6µšÝ³’A °ÒIneTÀ•¸òÙs;laãδ L$óÉÝ´Ê9Qëe b 95PËé÷‚«U2bÆ}X%È#އhª|zX—ã„$º&i€³l£Yl%P?,×× C’­ËíóÛïÔÈ'›T¿Óc+ú¨qÏ6ÑFŒõßôØýÆÚ¼÷Ôò>æÎ(›|Dùu œ—,û2xYœú«D{}zmGgõn¢š¨ª]Ö¾ßζRÐþ[+¢ ³…b¥ù³D޳ÖC uöŒj1f{rМÇ1é‡ÌáÎ9“"’ë)ë7NæY²Xm»R6¯q) ÂïÀuß)=8?±·ÆŒQÎc”rUªÚ*ÚUÒ›VFeøZSû«¦h w™cî¿XŸý ùŸ5frzm˜~æV2j™†’gÜ#³ µN¹{dÑQyqõ˜2îo/­wTrÆ]ßÝXÕî£Q˯ñ^[$²d ™Fô´´‹ƒHüLþ.eL•mwf,[V7-)U?ËHîü9Ú½6ïoýšà_qÞ(ª3n/´/rcãÆÿõŸ9‘B¢/žhµ^\Ð17£>åÀ²!¿iS»¨ž8²b±ñ°Z4 ׋r0ÇÉ™q¾ò4JsŽóu0*J”vKäV*åÖ¹æÈÀ<ž`ïe=´I‹¸Œga ¦p?ëEÅkyƒüÕèŒ-Õä úÁJ¥»¸Ö!‡ò/åÒx…ëgÄ?óÊ}® Åã.ÆiQyŒxØ_Ù©2•÷Ê‘”ïáþÑ[q~´zo¥Ë×èoù]ò]Gߊ±|l%ÏpŸ3¹ÆBsìÝo)pgÓhc®Ð´úÕjgÇȆþX=‰ÜÅßJpã^Ö+8óÆô&屿-´j´z¦féÿ(uÆÐ8£æE%T¯ÄüŸº`„N</µŽÚ:m…^…9c¹™,|s¤WÇëõ@­Ò¾l~„ÓŸÏ~@Žëù-f“ÐÀm‘=zÑFÍq´•û-¸Î¶ÖÇz}gE£ìé¹ú\-·1dùŠV蛣éwöÙ;qǨ¥þ§1xy séúoÑBYqÕ)¾÷3>˘ŸöQ9ŸÀ_ñÌqÖÚZñæ5Æ‹Sµ«™³»³éÂ*XF5óìÖ±g˜%RfúhË#ñÓøÕp½MŒŒY!WhåLІTæÎ·BÌfï£WYÅz!kØwá¬nÞ˜ýkX}6kdzÙõçð`2O°ZÖxFæâóaÉ“x­®Õq_­™Þ¥=È=R¯óº|ëpô÷”Bý"­šÒ¨4ûΈöS«&ÿsLôõå¿b«h"—Ð*jݵf/¼‡µ!Ê…ÌEvçHÛÛ1¤7âhMäýBøÎãì…rLÚ.­Ž3ÓάqߟïjOßãÿç¹Ó2Ö¼ý…Õm»³*töuþ˜Õ®ãØ'ë{ÈÇ Å Úc­l…Ù?‘5Êàê6™„è(7ðiVwˆ—Ù;×Bæ Ž1|¹µÌXnrUºµ&Ó¹VÄÿŒ¶ˆ®ÛIä<ÎxŽÉme/;Û6ÊRä@ÚÆ:î)ÿ™_ÃEànžäžì سm[¤û¬]>½Ìêü"•Ò¬åÞ#~T8µÑ;²Æ?èù¾ì|ð:kß «Yȯݖõ(mÛ±²t1ó¢çчŽi¯ gN™­×^iÐöé›ÊZs= 6OÔ°¯â…9G«hµ^âœ#d6[ŸÓHŒ¼.¯²3ž"BªfOdRZi±Ç8R|ÚT[dË›Åݶa—×ÙéLv¾z•LAò¿Hß ‡°p<û·Íe€v†9ˆ½‚†Å'Øóe§ø"»ÂÙ ãÙg'Z8‘¾ÈGd@'±NR¯É}úÌEéýf?Í e‘V|0V£MT›ÕQgÍ_{“¿HŽ«Ô”~Ê.«+Y÷¤‡× žì]}Ò>H™OŽÕù«2sÖ:gŸTœTÖkÛ_ë1Œ÷¨Ó~½r›#<Ö?ÊÕ qÏu;ZLíyŽ}1ÍÕ¢¥ûKš!7Æ£O§ŸYƒ%;^çê(¹ÀhPíOaïâÉ¢þ,EŽdG÷Ø÷`BœOæÛÀÚßáì ~KܼXÇNP‡²×ÝAìq°wuϘ1ìñ13vç–næìÞx c+0Î5ùß5‘¹”ÉK£[’}e×|WöãO¹l#3ô\W£GeÅz×?äõ2Jƒ>¸cã**õÛ¼F®Œ‘ùØ[µ_¬Ñ¿2âÝÅ.ˆËy?À<¸Þ¤žUnÿ`Ÿ†µéxvîè§ ØÁÄ]:±p‰7²ŸM R>‚~úøV´ß‡/±¾}!½?Iée¿Œ¿³¼`‡ïy ¤ßz\< Ù×7~±Ž´9sdîÔ–È:l“¶Ìz-ý^Y¹š/ë5N§ìÌkÑs}‘¾´Rbý[öÿ[%hõ[콕2 ¦Þ‰WL•}«EêÕjÖ*ÛŽ^®‘WÚ°âí©5=„½k¬î…3œÛÍÿ;‚|•}í67Aë/¼¶b”“Ùõítd»­‹³'Þ5Ø„/#O¥·Ù-ãz²qu¦ñ¤}ñŒµ@ƲD%ÑL¯ÁاÖN”×’ñ1ã ¥?³% Çå=ŽŸVÄæ¼…ÖG$”‘{®vÑX˜yË|¦#³hdN6W¸Ãdw>ö@y’ýÏNfGÇ1XµÙìe¶!»á~›=¾€Ë.û‚ö¤sжô+FgyÚ&t<ç%û‰ÛØÿe{~>ÆŽ7ëØõªÙŸO¿¦ÑÎ9h9F]¯]ßÚy³ÆßY6; ÿ•‚5æÄŒi Õt«”_÷?Èy,­yfJž¥ÇëÈiI¬T´VL?H\Qê­•ÕþNdm›LI‹'Ó<)LA‚+È÷!lóö;v¸œŒì¯DGóo†ë­åOEÖ÷bGÄ#ŠíK§w±ÃécÅÖHËœ¿9HÑ gø ;¾ a_Ì“Ùh{EÑ#WÉô€ÿcá™ë1Kr–Ì}äIµ|ª½×—×në_*ÿfWõ$üT¿0Ç5ÔóaðíŸ>žˆaÆÚH“ysäúéî"—4㥗¨w$WÈÑ€]ˆô”‘Kmè4Ž¿Äþ61o‹ØÉkóý3v/YÍ ®b?Œ¿Æ7ê#™ùyìfº!{þ–ù?œoþ“ÿ–°ûÛ® |NBJFÅåŒæÓì•þ2¨·+ýVcû™=±†Ö‚Ø;ñÊVßPÔS%]Íͧ$BèúkŽC+>ŠùËû‰üʃž³ž¼7t£m¼VM·ͱUöÍs‹‡cÙõF&>ÈYÊÕ•,Iº…1HùYÈüEñ\lÀjæ|G¾×kv¼ªx]/n…ÏÌÞZÒMé:¾ãm~ÑÁ¾ÞÝØÌRZÉ'ËÙkú0ôø'»E½@†‰ГAî/ÓÑ[7®ëÞ…®’Α*wºÊU"ú2Æ?Œ‡æ\¹÷3*©E´&OvOIy–ì_Ž!ð^Á*ĉÈa^¯ì*à…0—°|6»;oœîbž¿Æ´ÁæVñêJäxÿâœô"«ºJ¿eOóó}q_ÇB\ ÞŠæÿ5\ìW|ÌK ÀÇHR:1mx/,gÈk±›îõ<ªÊGvdݘx¬/,¿Ó#íÝÕky­¬1W1d뮇&‹SçõNµ™ÿgKQ^¿1g®e¹¢Z^$bqäŒÿ(aî­3;êQ‹“—‡cð^&²gß |·í§`Ø6àÿl`üÿFåQdáªø(ßtÒì‘u;~ÜÊ>¸#ÀB¿ þ‹†Òy|ÛÁú`ß(pãŸì ¶!l`(t>«èOIì‡É³Í¶LÆ?’÷ˆƒzv2»¬¤ŒØ–Ø5T¢€Ùb#bò+lµF<Óhº<Ò•îÖ¥«MÆÕŒã‹„¢œ¾²ú¥‡¥¿•¿kh¬_ÔZ}Ízü¸`y¦‡Ÿò}¾{1ó%Žt`ÛNå Îg.÷BÞ‰Ï!CÙä(pñ=v÷y†üd؃o8¼=]È.ˆkØ ¹½¢FqV-òf˜Çu×ò}—·ÇÑ«hÆÁÑ:1PîãªÍñ´×6þ×Ã1.arŽÚ]¾ä0Fy” £…ú¿ÖáY  OäÿúNÙ¦èÝ{޾1Bóå"Š÷Óó]ÎÓÕ±aÇ0 ÿ~€^þ*N,îH_ÀªEæn }<›o­;Ý^ça÷7âœËùI`Ü¡0áÑèÆ£DHÏñ†Í|‡úMéYÎiã“MÁOˆ=ú±¢[1G²ŒU3õ͉5™µ5æ¬-È߃eÞÓ ˆÙ)í¡Òo ‚¾²¼Íªñ PÃÝÿÂ8¦52ÇIœ‘½D{­ ¬‡2Ó¡!ÌV¢.&Ò¸ì$uãTFÒ[ió2ú¾;ó×E?æ±Ãí‰|‡Ã ,Û`@;²Ö„tCj‹·‡Eìùó ãuGÊUÿCïŸ CØçé#¾b9ˆÐ Wì‚ô*;BNçŒÃØMýŽx:Ñ Ùà0p<³c%k^ƒ`\@N,kË5{96*¶SŒéÊ ÅIq3ã¿Ø`ÿäÆß´ùV›ä¨–ÑWýM3†æ ̨ ‹x¶ëJçá™-=ZlîÂìg¶j™ýV0o8x$x¶„=ÌŽø?4˜UÕÕ†ÏÙçÜ;CGzg`` ÃÐ{ï ô®ˆŠÁV,Qb%±GM4*&±·hŒ%F-v±cA±wÅ‚üï{÷ï3ÏÀÌsÏ={ïU¾õ­µ×æÿÖÄøÐÑ>O¡+V3ìä/Œþ[ðÂèÉ`úþ½›|M§¨ x€FŒº1Z0d<…¹²œº¦Fzb·ù`a™iu][D«¸V>¡œ”~Î¬ŽØ]‹ßš5öLkw/h7Å?òc1“¢EÔoD¾ÄhʹTÄ•" ¹ñ¥ŒO×z²–µÖ-²™ùaç?ŸÄ³Îäéla7ì×h}tú˜¾Cxuþ± =ÐFañöDnbü?'óîá#ðÂ0¤æÇäÜÐ5xÂY93Ò¶è-ÐÃ$,æAŒ|²?‚§™¥rß­ó!N±9z‘^QË!ý¾6Ϫn+MåÚåôh2'FIñÝâEG*Ê7n4÷©Í]›r>0î>¬~@ga‹«é×õÙá9æ`°[ ,otá¾jñÿ祟Ðí’ KñÞSÉßéú½Ó‚˜š¢K±–•éëIý½Ÿ ŸÌÀ Vc=K†yWóp*Ý”×Òt(Obâ%øC#@³2˜Ê€•$Zì˜OÑBTó³¼EŒä´™êHCÖMþ;Ö}ÉËéÈXµ"¾1†eûm¥™ò"žˆ•¥ ÿ8ëƒèÒ´¤Ó‚(þ,dõØ­-¬o~ï‚ô€5x®•Ÿ‡¥áZN¾è…C8óå~ðòZºÜõ†!0Bø2IÑŽ©p_÷§ëÂ@t§hù.lê"ÐäBÖÿü0?¯ û¦‡òÙýÕlð Òj¿E-J|d6Ä1ƽê¼=”Z#\1¬^"¢£„k+Üë.ß';$3XÃèkyWÓÞVÊ”+sd‹äO$"3£Ù#y&y^ž°ŠKý?€õÔgWãÉGÒ®7Œß40Ï»œ^ûayº&dÀn¬€!k‡loAû¿Fâ·aëšá)ă–c?w$u%<´ š1/­ ÷…Û97ªYªîµ@ÿÇóÕŸ547é8bE„±«3!ï=—µñ¯r‚²ùF;®°ûøê¬å´«¬Òá»—DÛ.²ND4d݇«/Ú-£{™=«Ú€v £Ã¡x«ž·þ® v¯ ö~£?”8ç°p[…)<ûEçöxó³ÓÚüÆ|VX‘¿ç<‘^Ǽ<ëÑ›ž_ 91út+,@523.©œøe²/8¡³Sɘº ŒB ð³¹>³º²Ýf¦Ü•ã¾#­™öÜÜŸL’ùoåØWüc5‘£¶s…|¢Wªê¾Ì’HÙz--¤1±Öm±}‹¸W=rroz}vgø.û%l¦[ý;œî± <¿º;Ÿ®ÅW‡µœò3/Ð¬ßØ¼Ó&xr8¦ð;ÎË(—“ÿxÜÏ$ú~žË ô@–ZÐ?ò¬ü{ìáï𙣑ˆ…ÈÒtF>—~Nç|±©<Ï VW89ksÏb\÷*ýâ@ë4äŠbÝS<ýÓõ5ºÕŽ'ØO¹DQÍíÚR›'çí\Dö;v‰“c)Íås½ÃääbÖîÚtlj¸ˆÿ/!ný cŸ®[Ó56Œ(6ÎÎ""Î!ý­áÅêˆjOÍ6.+œ›ïÁøZýtÂ<Èi!o õ§! ½ómÅëÂWÉÁ%û0«ú0߯qÿœ™ó™¤É<ûb¬ÔxQqI´Ïz¸ ž,æxEýú5ѽÖ[¶ÐÎ7"]c÷ÿêÕäÆÄŽæFõ¦Vîø>+VÌ3W‹°=ù¿–õ¿*¹íʶb¿O€_:¤¯%}Ñ€]‘ØoÒ«9µê¦ìÇü/a?®ú:Ù ÄÓ’.Öodÿ)|·/¬%ßÓ­(põÐ0:û44 {¥/† › …2ìB{ÏÉœ‘0‡“TvÏ® ÿ /åO…Õa>`À÷aE–Ý(VîCÈQ»÷"æ¸D¸Z1ùë_âŽ]±‚±½q]OFj^ã×üº’%¨u1ß;žOÿ؃èmiúš¿NŒTÇbÿ᫾§çSBÿ]rwúi~l–æ*<Ÿ·O$Y à’¿g—.Í·æ=ñƒ½˜—"ï=N¯;ÂóHÇ…ÙêlKvKö,‘áV4ãòô#ºd¾ffÏ`m_Eχ݂^ /ϵœ'1jS‹­ÐŒ|ODµFèŽM½ÖÖ™Ùˆ6ß¶ÿ­=•¬ÇPwÄ<1ë¯ö‹—üͳDÌ4)'0~íM§d$šý ³ðy¬C°{2Ú¯þX­]@r3Óƒ³¿Ñ}¿¼H—÷"±L‚¥ëB´&û‘Hø‡Œˆ'iG¬û4= Ÿ¤?à*ôÿÁty¾!ûgglLp·¹X…‡ÓÍœdÇàËÈ"üåÄðw,p_žk.ë&®wÕ•X}¡Lñ¯vÀÐF«¹Q’åzÄp²ÖiéÏôrÕŽM\¨Op·õÐʈ|ºÜ–Ìsg `&Tið¾bl2ñ¥ òì¤Kz±Û`ÖçUÆø1(ÈsÞnDÒÛ£íÊEQüë¼þ!«ù*2ð%«Y—Ò!7ý4¼ï%ëvð꣜þpï{)y,ú»Ø“ß×èi+¿uW—1§Ýñ·ãñ±ÛaÚ¦í‰CâÿD6æ~¬‚••¶2Z;hžG׃Çìec©æ7-¹ý_E4Ö19_J»YNí¤øÈ,B^SzÌ÷Wbý†ñ©U<ßZÐO´_YÝÈs¿Œ¾zÊ{/düpüÜ—É;ÉD¬À‹d¼73o1 MÓ××ÏÉÙéÜ|H¡<†•«O$x&e g@?Ë•oð[4k8v´ ˜i=wJøù+pR’PÍ]Ö1‡;‰ÍÍX³bfË,ŸŒ­;”¬£Ô«i¹d¶«yM™0Ö1/`ý‡<‚Ù!³=Ö øWÇn´;”tdD r£JÁN¥¨kïy ñ„“aHÿ&ÖçuNwjÎïo3ºV ½ãÂNt¼/Ó×ÃöùˇÉóŒÂóš2žŠ´eþ~¡*_Fž¤9^îsÎù‰Nèß# ?‹_é¾74Õ¾y› :hÿ1ıï{gZGÅÅ®ð2šVÅÈnéíYô‰µxFFê®9ëWEòàîÕ>(ó‘ÓÕÖWñNûâÉõ˜Q¶­×h9Œ ›cmúẠóÈÓg0y?±úÏ#Õí8©Èè,x«C²Ó×Fx½¡\ᙦ_‚¾`[±zÑäÙÁ…G³ ‡Î`¥’»¹ñoFwª`>¶R°‘3u›“7ëÊßÛ1“˜—±üu9óð*h¢«ïYHJ¸zk~Æ*•ˆDy"7íÚ-±ÎX_Í5ñü ™"­»ñŸuîÆKÞIîH.AIñìXµ•Oˆ·–2—$‡ÏtBË7¿g0¿% ÉQôå̇áÉlkCýBCÆZ‡Ÿtn>ÀN4/iÍÏIYÖ±øs6$Àêÿ€Ö¼Á,6Æ6Å®Ý<¼OŽèÉùÙËy³¸qÑöd,V¥Ž¹9‚ï]à{ƒÅ{øÏÄÝ æÄô׎ÛÜ@äo¬ÕS Œ^Ýìþlkð­þt欲‚ºgµÃz¹s«…µ%Z‚XhýÙ0Æ~"ü{˜¿YÇÑûÉ`ÖñÕ¤Mú4ZqYúÛÐ3ëÏz5J ÷qR<?þvýy¼äÈòÖd@vqf^5KÐMœ"ô WÎEÆïaTÿB®€-i‘õ)^Ç«¼ÎLö'»Üž¹¨ÆÂ”‡,íM4: (ãe–Ãü•’î®g­»,˜2û+‡i.Ä×dÌÿ¹¯Ç¨I®Ï]°ÚIåCýOyÕÝ7vÑ j_7gñÚáž§µ¡ ù+µ™ÍxÚ!àœeœÎüÊ4˜›‰ÎN¢³?$v;Öñ;t¥9vq€8([]¶¸p1’á+úР陉tÀg¬ÅVþi˜..ì™ï”½Šîô@ó'!WåÌÁœt5㮃‹]Ê™Ÿs¬¢¼N¬¼5Ý‘Å4/®×·RÅn¢]¥Zü«#ÌŽ¨!ÆDFO®¼|¹QøÙ|º¹FQ5לҀ“(æà¹!Ýϱzïc×:‚à.K'îË Û·˜ç|šèlýÐoGƒk¸r¶¯À뻂ò7ä/•Z\¬jTò–]ðoâÇ[†T­F¸gjžeE<íÛØ€]È&N#Ö(¤•éJž§ŠO¾ˆgsg…œW£v϶ž[Kß-‚wÄX?³zŽË|¿ûÿÜ«â¼T2:=œ’bm‘ÈGÆÓ½)Vø.mDsX¯©ÌÁD^¿ŒˆìϬéíhõ¬ xJ>¢øHf‚¥¾vî N¼?:¹‘ñxxg¬dKVÿötN6®¬CÙª0a V­,ýôäçr$å®üb€%x6ÏŽ¼…k®¢ÚåläëTÖµuZº;ñ㊼.ïÌÚ¿„'iú Œø=QXÕ§ž¤!³k ڬ܊ܺ—FjäRtÝÝ ¥kÍë¹þFÿqç¿–1r¾ÞË5r4r’[r'üp *1û¤5H@_Nîx.ôÄ’MFgÆw½›\Ÿ]À¹ÇæOs¦áÑÈù6p왬ý¹`û?P¹uc{9™Ï™>+³‡Ó»ˆún€í;ˆõÿ949™ï}Ø+ssügÉxšÖåÄŽOd³ 7£óXùÞXcŒéPF:’çÏXÌS˜½Œ1€, ÅÄtZ;Çc†ÇÝÑ1_¬ç·þAîÃ]úkÞÔ}cieÄÚ ñ±9JÉÞÈ»Ýê»QyHó{Ã.!€h¾à”£uù3ª‹«ò¡ðUkÕ;É£¬ì©ÉåŒ xí3ôäâ쀲B¸/ÿ6›Ž/îú§ç’G<’±ŸÍµÏ-}ɿDŽåa:‘Ï¥çä­ ƒCŽ>Ô•ªêF€ ~æ©›#‡ÖE÷:¹}1ŸHÅ|W¬ÜÖ³Y­¡uÎV±Ù‹WOavÐ^z ‘‘ÎfŒœK¯–S52¬á:kGƒýóÓ8vûLNsÊë„p ˆ“š²ùÙš´gxªðp6ªTï8%}‚µü„ð8öûP85DFŸ'ehÐ+–ÏÏׄÚ“ò_ð‹C˜¡c’'’"šþ x²Yº"ûK32'm‘X8 ˜c÷V }Fìµ8µ¿×lпñL¬rvî4Óïj™õ÷mØ—Ä+c ›Õ¾æÿ ´bd£_uÝ›æ•+å´ ZPuÁº{wʸù³RüVz V Ex<œÅ$-æÝ³KÉUŽíú¯þ5>¯ ~î'´C2†kzg×§…£³=òVáÛÂg™Y5èôÍì…XEeÐ'%K¹:L OÂ\”^’7.\œ‚ø(YvSöpöã‹î»“Ñlv´eV©ÁLóåÚ1’Ó¦ië\Cm¢™aó?ŽG”{ÅhïÝUeU€•¡Þ×ìŸUDî†QjºRûåuÜ£mrBÚ%[‡ýZ–„KÅÜôî¬g&c·Ó¬‡—b—ÇÀGÕØ²I°[-ÑÝ“aó_G¤-³Žù[äuðóÉØö–àš+ðo91E Â›É ÙÛ°×rzÒ«…^…Ê𠔘Кìöt8«Ð6n\”ü†»žÜ7¨¯2b3~wE£^<ú:¥Ãü¿«ªœ«ŽÚzHA­Ÿ˜;ÅÚ™#÷ÿ.ä¯G`­¡Þ;Ýž’&çÏ“_€GX’dõßgôÿõ ßAÌ;‘ÑÔc'똃G¨ ™‡]ºe·bã.¥òñ.®Ì¹bžàspbc¢‚MÉl2^§“Ašþœ_\¨ [“A`…W’ã9Ä^Cx Ï@w¬z6uÞü—q¯qŸõM®’1¬qŽz,FËëÿ¯;f}UÜ,¹ïs¯¤ ™x?rÉbd³DîïZÊûÑÜ•ùlº®xOáÂ|%¹ù ø¬Ædsß ·…éáaªZæâÇ"µoà÷Çc½:²ªÒ‘¡’ßN…ÓY®£*| Xéj$`2(ï¬ã×øÏMý¹9ö÷=âãç³+ )ÏÄÿ5„OoŽÿíöÛcÏäãn«¾~ݧä:ÚaG7¶7GdÍ–vAü§\èíŒ Ôœ¸î΀»M&創…òCvÁpnä{1þïx,Ú3aYùg……I…íÙIHû,Öpr8ž¨ímª›V ,Ãc=›´Åw×±¦ Ãú|—ðxBU@zR¸.tFX ¶[Dîûòô ¬þÏÌáu+æn g¨¿–hžöÍÏ,|Âÿ_pÜ réCˆzç ÿÖêöCKåfdèôàb8ù9Q;Žˆ~ů2"F:ÊB¬”Ñ6ÞW’Å:ÖÉÅj!ógZ¹ÄÈ/Ç~Bƒ¸÷Æ*2pN¸£pk¾ ?«Ð¹pG‰ánÆe3­d´OdLQë»”ÌGÛK+Ñœø÷h2d»;ùœÑaHèŽÇN6äê…áPd¥ȶ7‘ÎDrJ¥Û@’0Sí ÅÂë°*¯$ý²uF„%ë;ëoÆÛZ?ý¿6J›m%„þЮdƯÚ<»fŠ” k»±þ¢[‘|™‘³â+# ´±¤óçž(¯ÓšZIa£…àÔJï©¡sñ‹â¦Â…#óŽùËùªü¼|d¸ ®Þhu‘OoXÒOÑ€§’çó[‹§±º°˜' óuá¬ûp¢š¡Ä4‡#ðñ£Ñƒ ÌämŒûr¬Dy:1[[ø_þF¡~‚:¹ü‰â¤t"Xa>_ÐA+ø­´Z ÷Xå®ÎÆx_ü¢TëÊÄ:8ÇoÞS‰•DÖ¹ó[ý§½° Ú8ÊÈÏ}³J™>s r²'LÀxPÀéýÅIec ÿ(æe-ËN( 5…¨ì?‡qœ _¹ëß ßý'Þ>ßµ™~ˆ<à6ty @-Ú€Šö庡X‰›¨º†ëâþ{³ûŠ +Š÷æ—°;d+ûf1²ùØ¡:Ј}Aíb¡T›v¬®žunbbcÙQ-£Ñ±ŒøÏ½ úv‘® š5ö ‘?1/`ݼq¡VOÛ â²þÇèbŸ½ˆHàþäNûú¡Ð©¬añGNì:-û8|—v%C»ƒç¿=8Û.ï1ŒÖ‚ôæ¤ yŽGÈr=‘¶£p_Sñ ]Á¶Ï‘áÚŽæ÷Ç ¨&Û9Xˆîÿ©xzñÂfªäîÌß'/8õ:íŸÂZ»cT¯w²ÿP¬Ö²j_ï}¸è_†ÏY(C;\ùû–Ø©ÙYs•£ÆDÎ vuOˆ£µÞÛ¬‚Öv1rŸýZÒ,oQ_lN-Ï:t}*‘\=Y¯ÙåÙö°(pv'^ÿg| ëü ȶ=öî fæÝtI°â¹~ÁØž $.n¶s |ˆþï*³Wó …‡òãòCóÚð|h<ýz4«ïyVéÑ‹äÕcñ¬Q½Yp½»µ¾b=wèÆ~mq'Œ1ã>R½ˆº¡Ýˆ»­xIzEìOâŽP%ÇÞ3éüÜÝ[‰ün,¾S‹çþÏu0£®y!Û'[®a„ðíMðyo’Óé——1¾aäµ:† X‚å\?œ×„¸”ñ·DZ¡§P/=;»#k–ß›=^K/¤œÿíðPØÏßËçYQ²žV«ú„öû0ºÕ“µŠÖõ†Æy¢A= È@–\4(þµ®1Ž–MÉ:q¢ówS©û¾j¡;DBmñ¼íðƒÝ¨Ø7y5Ý–/ǵJo!»±Þü 2v燳ÂAŒmòð1y¶D¾í° ‰Ý>ƒu|(mfc)þAœw*<ˆµQ¹ªL·õÑ£Ò± £³~Á¹¡N${<»9\ÅÍBj‡óU‡fZ•ß4Ð…õл‰Sôi²""#=€õ€5\éØì³.ÿUÁoú}ûኌõvjzîìNGcí¦wv6Üw9‹ß&#+ˆ¿×%˲ úá0A‹©ù{ìíná(´¿?²ý cÿ6ãsÆÜïŠ;&˼èéùY1L [™³ÿòêÔ5  úòliI¸š¯ãàQ DÚ7¦eÙ”t#ˆöW±b]xîÈúy¾šVJ[&‡'vÕ®ËÉøˆŽÍj×]ýŸÕ`²æî2ÒÛ©ýqO€LA†îÄ RQ6Q¯â¾×f0Ï{`ûð¹Kðw-±ê/ÂSžNÄzdx‰—ÙnCò¬ÖvÝGI|@l„¨ötd×ì©ÂZNB>,œ”>œˆÜL€õ~-éÂü”áï·Â{~I<¸ž\êÓÉ•an:™ï†0 oQ+㙊ƸÚÁ\§ãµVTDd>AT%Ç^Ëûô/»â÷À ŸÆ÷’ßÀø4Ýî$«ý€¥ßÿÓ ýšÕûšyÈÒÀ2C#İoøGáÔâsœ ú›Ð9lÂ&þ„ôXÂ7ˆ‚‡!)àÄ‚2wŸ&íÒK“¥afz¨¿18˜g‘ËŽÙ*ŸÎ•‹Ú¯•RVG03foÜ(Û«>ï¸Åø?î‰?˜ÿ•‰Œ‰pC®²ª¦ŸaY ÒbÆlˆ{¾ƒAD§.On„Çkʪ¯ Û³ ¶¯¦*c4manš¢¿eHð[ü» YÿHé‡0ªxY~ g$ÖÓb=>±&Œgç\s¸ƒÈùz—ÙËaØzb[vJ'’†¹DŸKþÇ.qÝÐa±™{ÂŒpì³ã~.w«4C:ÝÍcÌ®5Ô·Ç.æîjÑþÉoëi!µqÆ|±nÀ¹1rÐz˜WÕŠ1ô/J—V´#ÖÿP¤6=›^Ia³Ú ¿plwX­.Ø:³@åX´Fؾïñ-ÑŠ.X÷]Ó ²ùcT}M¡Úé´pu:%œËÙ×µ¡ œúg0ÅÍûà &aE§ñÛðôô¤IÖ#,aÎûÁ•¸Û%>¥]ëžO)S«Ö*Ó=ÀƒÖðz°™<™,ãû?ú¯À½Þê€|Ÿ½í¡VTñŠžBÔ¤UQ>´¶2L"†fð ý©„95éš-Ë~J†]yÊVèA +¿Ã=,cùý&yô-§[î‹îͯWpÅv÷ìþœÁ©Ø_Rß:$½{ñ9üçgÉX4j"»ŸF†•d}¨% åé`ØÄÙ̺µzj¹µhÖyYÏàˆc€3aÔ"“c½¬QþQ& r;Ž_öC)0lþ×Z9«€­˜ŠøIÌ+³*Sb· ³VA„ÒÌMá ®%(„Þ…åT(\[B ü"ì~‚íkŽDÔ2ŽýÓDv‘Éœ ¯±+»¼ß(ì’}›æÙ©åžÿ)k•Ý ð!UžbûDVšóÞÞ¬üªç…¯ð,»‡¥¬Ð Œß¬zž«ß"v;ˆmä¯fôÚ>³ÚvùL÷ÄXëÜ•¯´"P~WÖØZB#tœÊºèÙZ"k´‰vy5FòÝêÔ¾¬ÇÀ䄬gqxñ»ìÑpr8¯ÿ=2\ +8ˆŸ?‡Ûé„Tgéµì|ê–uÓÍ,RvI^‘_SØ/»,{»°¢°k¶•hèo à»Èü‚¾÷eÅÝ×ö¬3œñ-T4Âë.güâ>c3>²=v{Ÿh±cÍ»  þA«åYvå%mŽëkÞOþW,#ˆu^"`=¤:¯M4;.Gî\jùd’">ìÍëîÆò„“ñ°¶£Áãµù•ÅIÅŠϬrù뿲ûm{æ 7è¯%óÑš¿ÊwË'7ü¤I‹]¬/û¶xM¡¬lvÙKÙõa#˜`öó |À÷ÌÀ)ì¤ý…Ÿ:Àí‘]csçâuûóÜ¡´:J¾5¾îu Ú4ã!Ù3¢òVƒ»^Úsù\ë¹å?dD½N—w—@ï1ÖÓó‹¬íI­}ù‰Ì´*qúIqQlà"òï³òàü÷ŧø°rðÌ*â¯åç9ÄCö·9%}0Ì)Ü’mbüÈâ{ ëÊö.{%¨pþ—BßâÙ=Ùü°s8,€ÅxËßèçk"â5Üa%(ñ`Vs1ȧ;ÏØ‡Ø¿)²™Jƒ6Ýꢷxv…ë§œŠ†Ä¶²<Örƽ!Ú ½¢Q°6ÃgzºØûÅ~(zT5&2 ÖØ÷A^L?iaäÕ’(|8`O¼Ûmac~pXÈ s=U¿žqÿÄþÆoÐþ=÷ù+ÙpáW&áå'b1·c›}OawÜ‘Ô~®GkˆÇ\‡ lK{…©ØP-Ùüó'ï£ [·ë>ŒVÄAâýX¬ûVOe®¬~‘ÔÓ‰äFÝ7&vLΣ3ã_j¼€ˆ×ª?Áê`sGÞU.À8ÀÚj3ªv×ÙO89=?}?<™L"óóg—÷Ä—Ÿ˜ÞšL ‹á.®J³üåìa²+8óûÖd4™î7É÷ݘœCæë!²C%+éÿ±{žg/ìnMF¡9]Ò+Ó®…Iy]:Ö±¦„hì­—4ó¯Ë^6Á"z2iô}b6Ÿ]©Õ[‰]ÃÈ~ÉêAÌ¡ˆ’õk1Bp ÞԳ꽡Ø)R” eÑË%(E}ÉL'Ó=æ^'™ rk-&?î¾ùìéjCŽ£Kvv5Ùðe\76y̺ž³á‡/&›|;wYE®Y.U8¹y Òt]zH~hšÖñŒv?ðY­lq¯“öØñ:}r¬V±¾K«çJËÿÛ'Å*c½>CeÛýùÕô´™•OJÏÄûÛçs(îDsЛ¥ø®ù¬Üp´b/|ÄùaXùô¬mø–|ð@°À+ß’³X;«O"Vsg¢òilQ\!½•)Rã‘~-vJ”ËVjÔë¿Ä‚ÑîÙ?DgXŒï™"5@é’G7sÈÎTÊŒ˜s?¼J3Зu=}Z³Ã½T÷tgµ¢¹iá’²ÙűyUv¾bgrçf¦üÿ¸GàËú‚æ"ÜÏ2•÷ÜR¼»üÝð˜Â €ïГ™Ì]'ëyƈQµj"\ùYщº,¬Ï‹Œ‘Š;ãì}ØŽgvf DVˆhÙœ+}¦Òù`gÈÈWÉÐ'X ‘’¼b¬§±ÒLkã™|>‘ÕÕ½xÆ‹ÃÍù$jz- Êþ–ìÉ~ç~ÅÚ§æí³út‘‹½‰kxÖÁHûæ«’Q·döú0 sÈh¬Å <–ôoøyq-¾°;qa’.bVÄsæ¹Å¼vžrícïѾ<½'öhÃŒpôMfcFK^Ô ¡Rbý¢¸(â±°þÌšp£ÅhëÅ:®÷}fÇõsÖ»ââg9%g˘ËkŒ¤å‹ä $7§ήÎ÷/„ü²¡?æÊWÎÁC?æ¡o²+ÆãùÙL‹ýÓbýfO~ªÅN¤.zMù’|{øœÑPžaŸàYu"¹%ÞŒµÞœžOœª¿‹õnƶîZí™óÉÒèÅÝ'êþ×Õ“j\G5C$à,‰|½VÛ¯–Û×Nܤ”8CòkbB¯r%dNµ*¢ÐiØó~éÂlC~xþxv`Þ¨ønöXþPÖ½7W؃D+ºœÏ¼ª%n„ÏÅ7|Ÿü3”÷ÎgÖä7Dºµ<£Z_Í;´ÇîGô)ýäÈÚ(¯ÞY&_”c-\ä¾å µý¾Eÿz½·õ¿ÖÈ*AÑR*ÎÜaÆ• í‡vDôc e¥•«èN!õ¿9’¯¤©[ã°e{ûVeûäæóÃdý4F¨¦¸7׈\nÙø-æ%vbl>…ø£5Vqv4EýÏèçG/äc•hm\ìàf'yïcLkÄq««7T:ô\úµ–HnÜù-:0#®¬‹ÿR^ÏùW ²ZB™–ŠS9¹BŸLb4,»æsêU\;³+eø»¿ÛI¼ ÜP-VîòdV˜¬þœÔÏÃ?šW·°ÏTÍgÉËÆŠ3åÁJÓ–%TW –œVâÖvç^F]ŒßÙÒÛùlUŒÙ7Íø¹Â>­Ï#`÷7k‘"ß­]°F™ŽÞ2òÝeŒ_NGŽCé1>2ÊÑçŠý´«Ê€Ùý•ÚU­«>ØH ’ŸÜA{R¹‡°)Vl&sÑ‹µ †ô8¬ú<ä¾{Iw#—j/«‰zñ~+Îì)evª'óÛ Mow</1€ßZp'ÑŒ'){dõÍMY¡àÊŠLÌà¸V+}.¥_änL)wÚL÷´¸#DûçúZ-«?ŸM±·Ǽ‚ýG=;Û®Œ'·âNè5ì¾RÅͱõaìö“¨Äº÷Göµsíø_ÍÒ;³Š­\¿Ø‹ †g‘Á­/ÝcŸ0Dä:õ¥ÞØlç ÙËBÿ% wÖµw¢weºV衙Ê8U~×Êpw±ÙÁÞñªåvöÍøLWX̱®x^£_Óf(›Z&e>ž=«O7êQŒ)´ÇZ­’µZâ*¤v4Ö¬/ïõ>ò’Ú+³É2”rS²)ÚÄ^Œvsdͪ^ÎÌ«£׫‚ŸÝïgݦûÒÍJˆGÄöf®Åâr³Z!1VÆ~ÆÞËý®žœ(ÿ«ê7]9ëß•Hq¤(R-°fF<ãÿ΄s#㢫滵1â«”ù}G9´ïªD6ª +_ÃøÇñ÷Ò|T#Éb¿Å­2ÒúTQFg$ÅŽe2Ð~¢ìCW4g©`º”ÐA5Ï+CSÅ»´`2µQŽíÙaõšc3b7Þ÷É´Œây±R”U;;¸Ú*ñ¯:/B9¨ÿâm‚9b;h¥$Í «Fœ]™I#˸»Âœ`¬6W ´lòn=ùÞå©Pê𳧤h÷õ"úæFèŠûyÍRY£­ÇѺE62ÖlÇÓý<=o¬r÷S´[Ê´öCÝ–ÍR³ììaïbç¼;ß1bëî|kUEóòÿVz©#ꎈÂÇWí³“óªíp^Å8ŽÏõ‹{Ç=˜Ñ,œhÊÊ#Y%Y$ãCH®•3íÍÈÚ±"õÜ͓δxþjÇTq‡ØÆ]Øö³èÈœ:"ã;çHT.ÚtžÕPåS›d„îJ4æKÒFËvk¬o³ÂEË¥ÅÐòhe„kD"÷OˆÔ½»ó#Þ5Š®ã=^3žÑøÙ:bý†ç‹¨ rÄʆvÄ~`λ8½–¿y?{ã;z… D5ãµç¾\¤•Ð{«4›>Î'ckÃc]–XÕ¨ÄO½ÑÛéCD z#_m°²¨xVµñz-Ÿ ŸëÉD=x—öÁ|¡VÔ*ã:«Ômý“²¥Æ«£¢E_/–$Èj»ikcô¸FÖZ¥¡ª4~G眱¶÷Sª}ʤ4‘vGžJ¾YÖ‘‘wCÆjyV1‡ºÙf+¡òèµúuW8zzQœ’-†qVÄû®•^ªŒOt&D­12òçj~–²—‘µ\q‡”ã·Cš>݈Б»c4Vи',f¿•tõÌþ9ÊŽÜÚ¯q£§6yG¨Ä{‚bàÿÞ )¥Ñ¿ÛEÅ}·j„×ùl=á2:cŒiœë2Þ-²÷³ìÅ-ÓêêšÕ–‘ñS´N±ï¶˜®+Ö7ݸ'mkÏܵ*âSkõZvMv¥´¹¢³ØÎ–ÞNDmì€kß×Î1Æ0‘3Q—̉\åÔÏÜKk¦þ¸/´£5GèL«­Ú-­™;ñÕIûiÄ=5FÙúJ»èh=¬¾1†ñn"=–súë®û¤t½ª«¥ô¨eŒàWÞFD®|Š]bæÒ1ùl"KµÙzë"DÇZZ£6qBŒ%´£î Ó&hWýI‹dG£k³‰q‡°þÎ:@åMÔ¦Çõ•*Fái$æõb>™JìidÓ™õµRËèϸÊs1ì. ]Ó⊨ª¸“ÖÕuˆ]åÍKès|¦j>Ïu5{)ö¿t÷¿ë¢ÏŠÝZ´UF£Ö-µbe´ZæA#V×¾Êݺÿ+bí—Ö½¦4^éë~¢VØ™ŽüŸ#ÒÆ9‡rârÉÊ÷sfDÎíYW«&dH#†4&×+‹j°y¦jF®¦Y*ŸnïQ­uœ5»ó›—7þtµå(ÕNÏYpž•kñ¬>ÝúÕ<¥ÊÚŒæJ}’óÖÓúÌÊLd¼ü<5R<`ÿCchñ‘öNÐ+ÇŠQ÷;¹VLdæËOvk(Â1Ë+CÌŠE•wê”"q‘sæìD–ÝQéœåªµr.FåîÄÒëל?çʱšeðÓãøÕ wæˆè\‡V%«T‰&X½'?à\Ư˜ R¾´œz WÁ÷»[ÚýŽOùÖ¯ÉnÈ"é·ÄÚQ5D4Yëö¿Ë*¸fÍKöÊç´®TmÐWëŒmÌ¢hg}r=¬#3¾Mpª+"ï` ©OV®ìpªýqÆ´þÊbôéÆ@ÆJFõê\–HË9ò~ò5rqqw«§-ª%r–b85@ýWb•gO/ÿŠ,\WL‰PBÕý2hÎ×uuõãçêkÕ*mº2å½´õŽÈx¥'Ÿ¦D¹úþUÙ“oyŸE¤`ô#™ˆ@”Då@ýÒ‡{è´îáZãO°Ð–h/e£Å8J»ï3gÝ£Œ‘¾^Ëè“k3å?E7úí–Œ÷×&Kª©F~΂W+_ú?½œþX­-úw{*1Úp×ÀOwd:Œõcݱrç+2j=økD†r)ž+GëZ¹3C[(çnD«Ôå<¿ÖÙÈî¯ÊO[fÁwõã]²]òŽzM³ÓÎFd2Ô¤¨_>¡L¨’縼ʈù?ãGQ¡Ál·6Õ÷Ǩ'ú"uƵéηùkÌe<¹ÏY5ªúµJÔ±©1¢@WUfÎ3¿´þ¯*±Z*+ ÔÆ˜[RÓŒDÌbZg}´˜Æø+Æ¢856òŽzÖºÒÓŠÇ\+#"y -ˆVG¾C|ùaõ9z*;Üh#ŒÿÌŠný £Y µ@F"FË~¶È$zyãh·µÊjO®SÿÕ9eZnÙ¼‹2ÚzgV®ÈˆTdª-¯*Í¥^RŸcé ¹ûÜú%ý™h.r‘j„:¬ÍÑ~ú¤Îž£sŽ|—s+%Çîô>µ¡v¾VÝÇPÁ=ôvâã¯ÑÿEíÐ~‰Ÿ\ãÖŒGt,˜È™1ž¯Äœƒ³½>Úßž¬·¶öTß­'QæDMz¹Èš(gö¥ó´~š~L6V¦BÝT‹{”î¬>D|¢uŸO }ÐÎÉØV”æ9òdÚ %Z¡íðJ{¬Ò‹ê%õ·Z¯h«e_µ# Jk¨Í·jQœkãGWÈ>IÚÄX_!· £Ÿ3R/ºzF½ZcykíõCΉk§+i"óQjŠì–ë®ÍÑèËü4ŸÕê8ŸÕjM+žª‰>Íèh#|‡ü·º¥$èWÄ.z7£@#¥ˆú•BçßPž7ãxÍ€*gê¡¿kyµˆÚ/™`¯q‹Ü¬¨Q›ÄÀz]ãYw\èù}Ý1)Ú^½‘s(ú·þ@_*Ǥä˼v♎É!ÉŒ;jŸZÔ%&× Çº Y¹(íŽ5kQ ½Â±)ÿΧÃS‹ Õ‰þHÝ–Áˆ±‡±XÕ±».Z5kbD¯J¢ë9h{ðhµ¤Ñ#*'Ê‘Ïi\®|ÉE‹™uîÆh­FTîãî$uRyr­d<õ…>uä±Ü¯hgeRùsΔ-o<Uk#:}¸s mˆ)e0;0~3~ÿé/½‡(M$+V÷,}…õoF3q½|6e(f\'#/ã9#Rw–ÚyA§56S$Çm¤–Õ“šŒý»±.1Ï仜}¨VÃÏÑ(qÆ3F24>ƒÌ–l…l´51nŠW­6†V_å”g9ŠÈœkA•3‘„VÔø'p•:/k³žúc1\”¬Ö0Wj£HY;«ß6û©u0²Œ'« â®r*²>£ý—Ä.ž_Åý,í‡O¦ô˜³Ã¤žÇ¿j-Ô7c#½mÆß*y·± ÞS;æÈeŒÌ&éÛõ òγ2ïe„)—£'sEõ†ñôcJ«ÞÄ?¢R£$+üe·ô”JíŽÌUäUý»øTë¤WTÞD§F,ÑâéI|æxQ_ fM\kæH¨Òn¹W³Ò§åˆçáÊ­8Ž8ËÊ€¨@öGk¡ÍëÇ;}.¹çÏ«Õ gLߪå×jÇŒ®Ú%jÓþÙ÷ÂgÕwÚÏ@oé*Ëÿé»”wíT·k¤Í²jH|§ÍÒZhKÕz£´_™‰&ÄïbY+ЕE?ÍÏ¥É(¹ [ò«¿Pbôò@FTÕÜ5ž´W[;TÍshɳz¡m]ñG[ïj‹mDa¾ZÍ3‰üÀ|"mAŒQj¸R+âú©ÆèÑûU•ÖßüFŸ¢Ì‹ý\m…6VyQcõz¢(¹Êˆ´Œ\´R½¸Æ*09>­µùR;êé”D£Q ~ã×l‚2¤Pwµ²F_>•¶ÇÓ:œg£:1PôŒj³«­VÚbF˘_vWýR«´ ±¶ÇSºåfd¯ªy]¬9!×CËéŠÊÿhÑe¶µ‘zY«d¿EΨü‚rïÜùŒZ´¬iƧ©áýæÌ:(Cî’sg°(QËYÉF«mŒå¬¨CZ6cm€{±äÐÔç\ï¦|ÉðE¶@/k$©.9'"`õÜ댈"ŠŽü©Úi~Ç•pdî·:Ê 9.e[û§ß3ÊΘ×rÍåß# ö‹4­Ž‹ª¦ÉˆŠ7ŒáÅ×f`Õ`=¾Ÿåy=õ|¶6\ë,r‰Q¶ò$*HYsß¡esL­¹^IP}ˆÙåßqšý1Š”÷ŽÙ/™^ç'z/ãuÀl®Ò¯NéÍd ÕV?G̪.‹µ¸ÚYû[å&î2¾«YY¦ÄjßÔY£‘ˆ¼bÖß5Òß;‹â óxö…ÒƒGãü»–Ú£X±±ÖM.Þ*ÁÚÃÖ¹ÁÊ€é-õV¢«½Zg,æõäì=¬?“™U{W5Xͱ+óæÅä äÏŒÔ#z”ÕÉ„" süæLÔp×§†g‹ŠòõݾÛhV Q"‹®è3¢]ó¬ qŠ3_ÍOî#ô_Ï&W’ü«q‘ÖÅ1ú›ÞÖ¨Ñû¨³Êk̯è‰Å`ÖdÈBk¯Ä:"CbTcœæzËä+½òìò@Þ]œsZ$ã|WS@+"!™GѸQ®ÙN¥ÁyÑʪ3FbZÞ+cê†úï;Ü9暯–Aþ¡‚'•3èųé;´®Æ *œºó”ʪü®Þ)žØO[5rÚ QTÌfº{ݨKEŒªµ('O ¬µEK¬,ù¹bm¹ÈRo Ž(kjž2¨öä;μ(Æ,‡\†þ#⑊حüÿ™xí¡FÌàxÌÅÅl’9Fk-]{³ FñÎŒ–ú§§t¶ÅNä}'áƒû1>ÅTªÛ«Ø¹A‰µ7+Õ…þƒxO?¤Ï¼„û˜#ƒ¢Ï”Cמ´鈿õ=>•õwÉ5h)ÔjuZnÄ\´¶ÑØBÝ÷qw YÛù›uîÆø=k^›)úðLÞX¤¡˜³0:ðwåÌÕ³s„~IË­e‹Re—Hmlw°FÇ>Y½u%Ö­?ÙìQŒUïVÅHÆ‘ù¨cÌ|M£æÍÌ®ŒAôê‘q]M1p'î•È’÷b”Fb-µG¬¨-«ÐOiá¾ô°FkֲǻTqOíŸ#µúÓØJéVÊ•Ð×)sž=/Ë*.uÅõ>£Oo¬uŽû.ä™Õ/}“y1‘àF­Lwäÿ¾Ôr aÔ¸_kþ]Áø=Íl •1³`æ1Sæ •N-·öLÔdÚïJ[¸ΆL¤š.§éßD-ânëud¡b¾HÞND£„Šg]­r=Oãþ7WÞõU¬ £(ÿJw`UÔ11˜Ÿ-‚Õª‡®¿xE^D†ÒœŠaLfŽª/è·Ž±ûš=×d=«Ø#0‘WDzâ㸢'YßA¼Ö«ôž±h‹èÄVî¬ rO—;Ô½ww1FU¾´·Ž]nÅõ÷¹D„æFõeþ¦ZåªøwÇ$#áUêR7Þmüç|¸~®®øÜ(I»+'2ŒoújgÏùôUc2}½HS‹îëâgåɪ¦aüM.ÛY•iÑÞ–3ëVU—øõµŠoýŒ¾¿ 1˜š§*~wý”E‘šÚ«Í–3²#—k,¯lLágš‘P6ãê[ç-jíê;Œ×]cq‚ºkô«”Šçåÿ”Zñ”<¢tm±º,ãâÚÉÚ¸2"S³×JŒöÜ'ë̘dÙ"ÎnÏ*;2ŸÎxÔYÒ^Ë/É6uäùå÷ ;ÆV¸LáKžX¦]=3Έ©]{ׯ;w5ÂÁx71Žª–DK¯%‹Qº+¯Eø5ak^Úú?ßï©X겞X4â¼ù»¸À¬±ŸXÏu·6Ç9õžÊ˜OäóögüÝ~›C¿VÙY6‹ë—ÚjÕ«Ñù=°–S-רþêÙ; 3ÑŽ)Œ[Ìá̉æ­0þ Ôó4jù+Ÿ´|1¢ot©¥J²¹;Y½µþÔœcM¹ j¸øWyQ›d´b¾×Œ³HÑQh]äÔD"a9™xB·Ä­¡PSå$b>¶3£×ÚZ—³¡Ý¸k{´WëbÄj~Ô<•‘‚¹Vw«è¯Ì:ueަUÀ"š ™cYñ8*ÎÕå=êè¯õcò™²¤J¥'æŠ5Ä…1 !Çã{í¿6^ï¨4ˆ´Ìÿ(Q²vf­õT×"‹˜Y‹&?¹V=¤^0ÆZâ5O›µ ©ìšº6_mÆK ,ò´Ȭ­˜®3?÷)ͯ¬ª½5Ÿ3€ëÌ’Š¾êу^ÔÌMÄ::J­Ó ®¬æ/ZµX>$b½ˆŒwFô8â;«žÔ8½»ü¡ýP•æèËÕ%=…õ¿¢O9„:®èŒÞ©‰Ú» )}ò FšÎ§’jLáÈ™Ä^ãžЇk¬"Ìø͵q¸*xzë‘HuOf #ϥ丫º'ÿ›áÓ®‘y©£2o³ØSaÜ£9õcí]«˜O×ÓÊ?ëù}Ñ´Ü„u3FMJŒ˜Ì ®<¾ÖH”(׫¾iŸÌ`DM7ò3íø­ŸO«‡fÔB1’ó­Çˆ±˜²->ó]®ätpŸjnÉš ®x‚¡Œ|2>~;ôò>«(Á9µÂ³ Z«ª?²ÛÊ’^K$ukxꉈ~åÙÌj¨ÿÆJ®–q™ˆ^ž@«UÉ+Z^‡§!ù QƒäncÜ©ëËoúo‘oG´`1ŸlL(·F·=Wì‡$ÿŽ.`+‘TFûyúðŒÞ¯²st*(è æM;*ÚòÙEŸžõ¾˜UwíDCz=’<®öS¹Ð Š˜Äºþ¦µ´ÿ‰öÁZ“X¤¦;·^-v‹XÅš•ÝžÏË:†uÙ?òf;…ÙÜ­×ìHZ§/'sÒËÙu{‡û¤˜?ãÐÌ2iëbvɨƒzµˆÒEFâctcMí±¾[†N4#sa I-³¥½Œ–º’»ø„Æã²ªúÿ VT~]¼¥ßsžär´ʼÖÅL€Òó¼òðʤÚá|;ÿõÜy){—”ý^ÜßH}8ã\›®Í_+œR\•¡³Á’¬_þ}h›.ãc8Ûe{ƒæ¥×%o±³õÉä<úÞ꘷rVÞ\VެìËÏZ3í–,x Ob6À¨Çª¡¸ÆÚã(£JlQ£ãS-#5R9Ðþ¹þÖ$ÉèEõ„ÞÁÑ9FïðëNWÀº¹æÈ8ʉ ô¾°û=Á®ãKO¤Epþ öƒJŸÏ,ü;‰‘ƒíÎ¥;Ö¢t$áRz}ʞȟ“z`ÝÇÉ€…ÝÒ“ùÌ´^|Yºžœy<š1X)cÝK/æVí7zV"”ØÈn9&ñ¼3au‚ÈÆèØÚ\õÕÕU.ã(ÍUÈ´Õðš;SD¥Æ.F"õ\ÉOPï¼_´ÎµQ‚–C{a7+ïŽÙžX)¥ôtÆ~8»½»…3òóèÞ½AΣX}Ú›®ŽÐÑáxv6wbd‘NG[è¾”¾ï±ëÿ+v÷ŸYº“3nþ÷`lä îYÉ—¬¾l‹Ñlui¼±zÃÙÒÿəȇ8"*q•ÖÖ¸V†Ü¿ˆüÍÕX©£ýÐû¨OÎ5å¿2ÓZEëÈôÃ2ªÆþ~–'zmƒÞ„4ÏÄÒ‹hµÏ‹èŽ×ƒÏ»³¿õÌôݰ;gV‹Ýðcèa÷v²—ÒÕg\:žþöDÃ^¿ëÓ—B‹¬A>5[ËžG3dÖù æ©§Óx/d@ëØ#_l ŽRⳋ|EB¢N÷ŠÉÊ:èï´Õj¶»úëvevµaÆFzXm¼¨TËjUŒ ¢1‘Œ¯ó#iñhÙüÖržÈ^V¥V€^%ô+ž„µk@瓦Ì}QÑì>ô„¸ñ‡pvCKº7Ž ý “ÃÏÉMtGÛƒž7kèrÛ/Í8ú>öŠÿo‘…Þéjîé }ùw¾p1þÁ5÷/il®>Š|\/kÖ´–fhÍMÝÉi¯ôFòÚÁNŒ?"ùÞ¼ÓÊ+¥Ô±Ëô‹]ï^%1wãG®¦6Ož7fâ­ÊrnÕeÝZ€– »y\é|Š5ç$pæÅjN…YI'§9œfÛ„žÿD^¹:ÝDÏÓÈB/ÆÿhØNH÷²»³UÙ`®ÿs2’wäøÃ¶áN:Ç/cFÚ G€,d|ÄîØ‹õn†^Gä¥uWGãº7ˆòeéµSÚ5sôʾ’­×ñÇÖú?=šc——1k38rFij•¹£MYwgN„µ3ã¯ãs{—f¾g–L ÇŪôKú\B£6¬¤]Î&bÙŽ¦‹¥½‘úÓçL,â™á:+ýûpZv#þÁè÷eô °Ž£¿ñPz&}Á.Ø™éX@1±yêöôÚ¨áßÞs[RU:ã®9ý¢f€ ¯ô±éxFÙ¬å®ñÃYkaü–«¼QdbŸ(ÀˆØ Š=_ô[Õ\-nÖ¸›(ò_21V¦Å˜Z=Ö:*ïrÈJ¿wª,͈²bì¤GèUÒÊÉœ€]^ˆ§û_öPz-o„ÆÙ_=çŸÞ ;v"ÝÎb ƒ†æÑãz:Ò2¼´“÷¶´,ôË.¡gÐ=¼£3¶$3ÀOí˜yÈÉFºÄ~ ¢¨ÀúiÅ{‹ìÁ:™W’pݬ•tåÕ 1¬Y{åB‰1B‰£åZe'rÒ;Dü§iýÿ÷É (1"%ñfÜ£b̬lyçÎH|{¬‘qïtß‘ÙIyËp&'"H'ã;éÿ<K×>Xjþtá0ú,䤨ÍéPº NÊ.C>.Ã[ü¯ðYØJô÷vb X¨-šÒûæ·à…œ}¹6Ý>ØöͰWB5HàHÖ½'Ï,"–«ê­\_³$õülÄ"&qj†ºoµ•q²Üù_‘‘±Œ•÷ÆÚy/Ñ•žT¯ad`nC¼í¿ò_=ÁW;ó Óùø¼_r[ៜO}zv'[÷Ñ€õîÖÍÙ×5h}kdyßGaº†?qšqìbdü«¤3ýÀWÓ t =¾NÅ÷u¦ƒÈvº…þ™È`(va¸a1ž± Ù—Çj“¶§ÔîÄ==vQÐö³É ÅŒUÔgwÊÖk¹b%Ÿî~ˆ{Ь|Aiñôf>bNAo`¶ÝêE#9)ÿ6¬DÌØ •œG“çÂŒ²vœÚ8Kö¾~‘M´çuí¦££é¬ãA¬ç-t4*²Ò“@„ËéŒõirÝ»쎌t§çC R1 äXƒ>T3kc±›é˜!†i€¯=‚絊í­%•Ï4޵r@éÖÖ‰\´ÝF‡Ö&·çÙe–¢üW‚rfEV7ògr^òÆV°zú㔑¦s"—¶ˆkœ kÒoMšWXŸ<Ū Ãzê7Dú[1Æc±h]8íïzXþ˜Ž q~ã p>«@ÉÿÂ&ÜšŒÂnK6Ðó¢-«|bV£+šÐ oÙƒy©B&æÓñªôž@o7ŠÝyvk¢_rÌf¡dGÓñ̉LµyzŽÈV™7'Òkê™mŸñƒ9.g!2fz=³êÞÝ÷ɘjGÄr¿Çqít4qN-›’Ž,¿,û3q|0^3Fe×ÎX¿#±÷5 ÝOÒ—ÃÝô9ý+øð·è§§ß„¿áv¢¿÷{¬úYŒqžŽ¤?º¶¯)RP &ÞÙƒÿ—#-Ofg‡%Dì¹cKšó’2æÖÞÁ»B1Ÿï“Z§3Šú5Zm—ÁíÅøeõ F~"œ˜)!Èò8k"A91÷B¸ø£ >r)¶hw´ ;*Î÷,?/»?,gäkyòYáE¬Ý8t$sQƒDt„õxMnÏëmñîöÿœB§¤NôöÞ¤ÿqsöUrX¨3øîK¬pQA?fðátçìÜlÏ=‘'žÊçŠ »­uˆYñšuDö°“ɲ¶UGÊy3b<$÷aý‡+ïÚÍiûęƇZY¦xQ¯1“È_Ö9%ƒÝŸÿÝÓr$ÝüVd…l_$à`ä´ˆÖÞBÞ¬ýŬéNÌÀbúÖsv=ãÜAtssº! çÌ&ÆMìZPÀt¢ã»è\…Ô|¶{ÎYoÆÿuÚ4Ïlu °-·rÞN;¤NDjÕ€‘˜6JéŽ>_{ ºWSý_üëz혛WÕ‹ ƯÞëÿµ‘â3œvpNcä Ûa\¬ÏÓCYö`ÌãTIf÷„…èæá˜pk_C¿·Z| çô-ÀÆ{‚e[dáÝ´Èu7s†ãMéÙfðró°!éMoÄIHÍtüÜÝðcûpåýá¬þ$4^æÕƒ°~ÿJ7zü[ Cšãçñ$±¢Ü¸]Y·ùŒFkÆvŽÁJóbŽC{ٚ綪¡ã× Ê¦‰ëbìØ£432¿¢ëŒdÀ¬ã+´ÇãA:ÜÕ>ž8~DF¯nÖk·Ò¹vøœÍšÎGkçè/b\}Ðí¦Œì0: ¾”ž~Jš„§éo±Ž(¨=sr!x·aX–žÆ×œüúÞ…E2ꙿù93ƒÆ„sÀÔŽ/…˜_½’)/ÔÕÁ¸SMô#~1_)ë+êU/\G³|v6°þшWIÑŽ*9"?YUw ‹ÄZAñƒ,ª»‚̓k{ä_û%ݲÏyîÝ‘òH|G|üÆ>™õ¯æ™ÿƒ¦¯ÕðbEäbG²+ýŒÐ½<šlMÎNÌöÅÎÝr^z2þΜ*yZáø¢ÕèÂü­Šo{á> ¾žÍI¹é„¶hËúb2q®§»ò­Pá¨Óâbm¿¶@îøÌ¯½)˱þG~Tm·"*æ¼Ü÷ë¾ã~¥^ a¾ÖŒ‹Ö¡y®™¼&{sRÍ©¼íóèú ,u’Ц£»û2#'¥­ò}Љ?²~=±íMyÝðü¯ýC!œòö¤KèÂI¼~"‘àÿ²…Kñk¨ÿàÛà?÷Ä‚<½†<Øqcì÷Ú ”w“ãVŒ|ÍGÊþÉÏ[ÛfwuIrÝmcZŒodœ EʵØÈNÿz¹T1ü‘9keÂ’UÌÃ/ÄûX«SŽí»¼²(\êÃãx·}9›å $¿C)~]B+Ù[29à’Žœxý]7ÑÛk.lO!_ž?Âu» ùvúìÆŠD.K{äfŸq~¢1ÃmÌè¤é4jzuŸ¶)Ÿ_l•Ê8Vƒ.g-ÌÛË¿h×£÷s̲‚Ê»y2­¿èÝñ9^QùŸ˜Ë7ƒ9 kÆ\o3=ƂʿxÈ €ÖÃüdSr˜V0u#=ÏT–¾wŸJÿÚÛ±ÿ7ðœß&íKÚ0%^85ŽÈæ2“¯Èv|“4cD ‰y³Âá\Øß7é“úxŸWÓ7ÓÂÛÙÑéUÙÉ…ÓУéÌËpðèÓ HÍ:´â¤ì¸bžMcµ' ìM×ÁJF&¦Qj«¾ '¿Å\mVÒÝM²Èzs¹c+ ôf8´}²ìâ^W\?ï>=që—Í %›[0ËVIŸËÎŒ¿'U Ãñ3QúîèùNh÷wI9Vû—ĸ¯€ï›’/ËɦvdÇñ>HÚùŽƒ×ø&K¸ tÆúç'x2ê[à¿þt.£Oàðô?ùÄÂÖÞhhW“cA·¡ _YÝÍ*Ü›ý&l V}ã7Ú‰¹ªˆ[ä´ñîZÒš!6'ç¹OB‹ÞƒßÌÿ¹#W´¯Œk?d6ŒäºÌZÃ$[d½„2ãΈeÌ‚Þa[²ˆœEc¼x+ÐÚf˜ïmt‡Ý“õKÔ8ý[òû¤MúWþþ8Ñs_¬ûær4£÷½9™Î™hQ!Ñ™hÅi ˆ'8 4Ô1Ý8Qf6,û¨üs"]‰‡¬SâW\=ã!óÓúq×^{g$àøÄoòYâ íŸ5J±*JÞGûç¼µÇgèKee¼äKdÛ5¼sŸúXÒ5|V–a·^F÷7'šÃø¿Çl´aÝÊ`>%:^ÌÏ[éñ^Æï::„õíx”Ùº’~·§§…&a1£oÌ•Ç#C§&3aÀ`ýka†¢/߀3–‡¿d5XŒj˜‘“°kÐýñE­‰jyBóãzr%W»enÃz­XIížT£{ë…Ü­¥v»þî°VJÕ<«•3²söbV)æÈ"w`‚=™½ÉhÞSÉ:ì’§”=ÉX¶`Ùú°¾%o£Eâÿ›Ðû•3+}Ðüÿ2/ˆy—râç¹Xƒ#™É}±x?†wC wz¸#¹‡ó_sîz2óØ ÙŸòëL|>’uð¤/Ã5gVŠé߉wÁ5†PO])e5v®WæE¼FµñD;çAîÒH¿Žñ›ó“ýÈšCEDX=2ºÐg¸AœYMÔQãWŸŒ'’ý1©KçI¿L<é„þÕŒ÷+l\ °ìF» Ëà‰8;ðý13߃~vÁœ›×f½“ÛÓ=’k²ÝòVHÆ­ÌÏßé}&x`;§߉ µANFq§MX˜Þ·ˆ b#N}®!ž®I»…CÓ1Œ½+Ð.BŽªk+ç)nÓªWñ¬b¹»ªŽÔZ&Ù!ë_™ó"§c^Øü¶<‚~O`†Dàn»>”Âù™uî ÞÆz5"¾K´ò?¬aSjz¦îÆcû>äé9ëOùž~03bMÄA…sÿRè s²5éÊ7áê’ }y˜‘Î&ê hý+hÕhüëÌr‘•¯C#¾Oöá“?„œAXäiz#ÓîJPŽõUæõlÖÌõæ_wš‰Ù¢/pôæäZ1w=øhÝì(â3Ò—Q‰1@¡äô©VN€{éB]£'<4íNg^fÝþ,ìØçÔ4îɶrÅ Vªl :ðßÞMV¥ÿLj³Ë‡å¯&+±™:¡{6Ævæ­H”¼o=ò NSú ®´c©SúÛàǶÌÅ3xÌ÷’G`Úûàÿ:cÆ–ÖP|óÓâõ×ú6¥ÁŠ'9¥Ú,§55õ%ù\IÄóÆÌbf#>+cÍ-˜]2¨-´Òª!cDÔÑ[Ý Ylƒ¼÷J×aý+Ê9Œí]zvœÌæÌ®Ë’QèÁ@fhüOÖÍꮜ¾î{¤·'Ÿ¦‡ÿ.€ÙÈ{ßb~*ÿá ¬ šnªçL”¦X³¡%ëA™)w/g>wÇØ/z<9¸Y<©8×çÓ†[}¬?WËÕp9Bm~¬•0Þ¯¿#kóíD'ç©XÍ®´[ˆˆP¾SnL, lÇ\WýIˆÝÃ4ÐÌ`ž_ÿÖ§ ‚ÍÉ P~—ÝîF_oãYÅ5uXÆ÷Xã’¡äö§!o¦3 ;°£y½œ¿«ñýÑ•ÁeD~Ò…] Ó‚'†'éÜõýVäs°–Z÷ã’¬Æ#»7Èq‹Ø´ùfGÌÉ…ZAw«DèîHퟑòת ½¾Ì†Ö¾),Ÿc6~Tj¼JT8Oº”ÊãÓeÙ‹¬‘~~kòeÚ0k‰ìÿœüœ–Ÿ`\Q_ GÔ›_Ž¼ÉŒ¯ø„õÿ)9%R<‘ä÷H9˜õ-°ö2žÒk°jç ΫİŸ†/Þ‹x+˜ùt¨Öæ¯X‚ k´oiÕŸúí^¤zþ5ço\o®G çáªÊ‘ë”m¥D_׌ٓáÕf#ë­ïðì(«ÙÜ/§Ð?*Sû3C1þÓ{²wA¨-ÿÇÂÙ' Fé£ÉÀ¼]^Íþlÿ:ãX…Oß„®¤¬WGäܲŽC‹/ÉÚ•?›õ×ÈõzêóWÉ2›¨rÚ—~Ù¯¢sA~ÛÒyÓ|èß8ñîu;hàmªMNH{±þÏâ7å-´xÆñÖ_Ê}ªí2úöÓ»¶ö%±§ç÷˜ÿ–--ò^»É¹÷Ý5v—ºdf–y©NŸÿÌ>,ìVüOXŽu«fäõÜç%²û³SâNÅø_2 œ3Û-í•/§Bzãߎø^ôylÉuFoÚ.Öûï¸òÖìWðW9½™vÐú7óùÖÏóØ!ÁCæy” ïá˜4zÒ4ƒý]OÒþøœK“EáŒs°’Ú,´ÎêX³Ã³cÃYpÙõx…çÑØÁvçñE®ð?èî•ØÊã ›È}|›·k¾œÓŒ¹:‰;.gž¥Öõœ¤\òd®ý>ýŽ3¶Ó± ˆw‰®»¡CÝ@šÍˆ Z#ÊÀ d×F´/[)çeç‰Fènuó@rþäzº/_û¯÷ÿY9 JX=)×+ç­¾[e%º´®P¹ØŸñO…ÅKC»ìßáåPÄ ^”þ7;VªumÛY«ÓÀ¹Ý9Éê:,öôõŸd|ÎæëÅdYúf>µü–ü¸ð 'gn.{2 Çü–œþJ¼ÅzV÷D”ž}<ùߣ]²EÅ,[Ì?‡œ KÔà!žlOž¬d•£‘¼5[ŽÔü^Ì Z¿ %Ó˜-4ŠïŽ{^šh)ò£þÅÝ"_kÂÕj¨CÖúYh½h÷½²ß 8:ʲ²yùdc¸3û4í͸ŸOÿ–½N¤¾ó6 GÎ>ÌY±»Ð…?•R÷ü¯åÓ‹ïeχŠbû†ýóÿá7ÏdõoQ¾‚x½éµ8«¿'yµVÙ…º\†õìÍx±¶dŒç©–ã§áó¬…”á·òÃÀ®(Qÿå»Ì€› ”÷—#4¨ÿÓÆü‘ü¾Q£UŽÒÝb"­€Þ5r#ò(Xý™Tþ¬¼’SÞGfWä[a&Ÿcµš€Y¦¦/„Q…Ù °cˆÿÞMú>¿»ÛgcÒ ö§]–5Åÿdý²³ +.Î9ï$ý7~=ñ­'ökMNèÓd>vâ*^y>Ý;_’Ï„ˆ¯¶$ ÉF¦Õ<ÝLž­/Ïd„¢ÍîÅx¬c¹ÊºsD».‚3Ÿo¼3F;öQËK_²VM¥ÜG¦H_i^ÜÚR%Á¬·Ø¸öv(Ÿ¸úÏ,’ó8;¥¸W¾‘Ø6c“~›v+ü&[M~ÿh¬WÖ}3žq;1NJ†ã¤áÆdu¾¶ìF"y„tï² o%'‘Þœo¥Ô— ¦“*|ÅÕÄVÊ4áÌ´‘Y×ìd|G]úH²,¼þŽòüWë÷µiƯÍÆýSbAe^»wÊ[¹#–׎é´q6Ï(Aéùøok$K«ØO]r>äÎ܇8±„€›'—%•áÂ%Å“ KCs"Õ1X¦WÉ`IµÇóÌÀÉDxð“¤!x¨ß;!!'¦£8'E†[ðõaº,ß„œ—§=Ñõo’àÄç‰zbïþ¸’¯£Ó³òO³k²1%dñ~2>»8ËJΣ ËýŽÚpQ¾N®VK w£.›É×ÚcÂÊ_=ÖÀü§uÊtÜù&ì>NkEE?u¼KYµE²äÝ“µ'•/»uvDóÞJgä—åó {åóÃA6MX¡uàÝ‹à©o‡¹ì Jý[í v_c½÷§½šÈ·&}§ùÿW“«‰•Âk}“5­Åï÷€õ; ®à*jóñ…¿S)Á* NWe3Ò•¬Á"²@•XY-ý_ãrõDBîÆ1¢Ñ'¸cηµ^ú9qžü¯#³¶ÚªIûÝÉXá—%Z¸ÿÏëŒ/õ© ˆ ºâkyßGIüõâÀâ1…³åèmh¸kú.W“Ý“¹èÍJ~R~*™‡S8±ø/ÎÐôe<äÁxþO© /:7€Ü·A :áM;[Md´+ðKÈÍ.œ’Ÿ¢ükÚŸs‘ßoñBvýƺŠnõVJ¬ì­Ï]r)¯‰ñ”}9¯3þS¾ÅúAw‰›=±J¬šû3è/e»´“Ú5ÇÊ2%k6 5𮙜œ•)[ZXT8 E–öútXhž ‡ó`¼Ÿäwsá+ñ‰oç„Pœ[6({>éDÍÇMT€µƒC5:ñRò~¸=lK¦ õ#/fn¶óÛ r¿Àf…¿æM KÂèts¸.¯ÑÎÃÑÃ>X}·Ï&ú3se}ƒ–N7âñë´ãQCbXÿ/ÃÝ ÿ!60'F°sk¦´ÚOc*™ y÷cT£Uƒó«ŠO^+Vfgk²=²Óóýòó,{‡ZŸµðw¿`ÇOF3¾àœì=‹g”·Ìkð Cð“;ÒÅ¡G¸;\@u×ܛաX“õãoß|—ðΆà‡@ÛÂûùñ…çò} äR³;ò+ ¬íŠRýÕž°’QËï[·#sçªz ƒû5ÈëýªóJ¸k×ßób¬Pì¹WÅOFÎZÏip7—ñŸõ°J–´æÊŒ áz©¼ž½[¬,û±8¿xlqvñÖÂðüÄÂa…ý‚7פx–®KÊ©€aBYÿÂü@}ŸÁØÚRÑòBúz`ú¯äèüÓ|?b"s3?’Èz-|Àù’âa…Ù…ó }Šwæåß"yÐÂQ|ä©´Ð)3`µ‚QZÄ{Æ,"˜xšƒQA7þbÿʰÿŸÔb}÷FfL¬ˆÚ FÈ•ªZF-„ò"Ól‰¹ÇÕüÛ!›Y6­¸ºxeqpñ­BYar6˜l_Á²° 8­îQbþËлÒ[A£ñGQQz fÍ=%ýpòß71;;1gž ?Û¹4.Îo(.(ôͿ̎ÎÌ·d7¦êà.Œ~6kÔPZånD/qç’±NçÕ^kß*JßöIÔGº~ÖÿÆN"F#¡˜Œñƒ§¿ÙçÁZÀÿ£é>à쬪¯¿åÞ;!„JIHHd&=!•–B€Ð)Ò›"*½ˆ€¢¨ˆýÛö.Š‚ET° V@&(E@"¨”o=s¾_”{ß{Ê.k¯½Ï>¥þ¿dOÉȨ ‚™™ÿ@,õÓÝÏõvíÞ’›_ßÒÜÛwd,ôÉÑü'fmŸØÅ{ƒûíÿBØàòÕ5‰Uµý-_¥è¸XÁgó›åÉȬKµÔ+³J«Û“ÛÁö;ÍöG:#Û©í7’™Ï·<1èŬŒ†1s}ukp ƒh@ÿõ¢òxüC‰aðBêÜÒ ^Ä;Éᨕ(7BA~° w6K.»„Ù$z?5x^0à¹Õˆöºî˜T÷ï›=/xgl<ÞÊHý&ͼö„œåZ¯õ|rZSƒ\nÍowÉ®þ3øu|ó“ÌÿèX¸³²Û ý=1ߎñ¡ÿZš“Ê÷7Ç:¾˜ß’ºÑš;Û¦ySóçØˆ­ã}‰î­Ì€n²ãý™‘ ЂT 9Ù Âá[¦‡ï‡çKÝ3ÉV×€!";‹hýôü®äŒ`ìYyº Û²¬ÍEù¼7‡žÐ\Ñþ¥Ú.žü°–ã³OTeÔÏÖ4?ˆôËŽÈ|¦Ö·…š ŸÖçÚúžzF²ü;ÆKÞO??µ³«ã;çEWî®FÅf\’ÊÿkâOÇÔ׆óžÊùÁ¬äôöáŒjÿØþ}3‡™ë$o+î+ž/ÀV‰ôØ4Ú!zUa‰õ‰ÀZ7Q­•aÝ}/#ÄSÊ@U: –^OØo–uÓÄãc—&¦;3Ùµí=ÕôÈ®›zŸ¨–Ezßëö‹Ô¬ÎɾN œ6d|0Þˆ0`?NDØÖDzݙøñáz¯flsGtâ/ÁA;1?•ŒÁó‰&ERvÏ3®yÓhÔý‘‚gª‹ë³§»ÇÝÇÑãõt'Ò/IœCnÍÖ›œ£­%‚#~†#Åÿ`ÊêüFߪ!+l¨ü(6AEˆÈi|l½:(>”]ŸßläqrdáÊÔ¹|chOW‡Ý¸;ð#a9 žÿ°!Û72k0.;ù¯Äƒ£" c²ë[„7{_÷«í¾©˜ÔLoæß3ÊvˆÿȆÊy>R4KÊ>ª(Võæþ¤’5¯ÙX¾Rt¬¶DÇ7Ä¢úN{yÎ3á1. r»8Z?3û6%ö¬/1àš¬ÊŒÄ5/ƾÿ"Õ|û7Õ»4ûw®ïnÖ}«¾íéaÇ6?jnmŽŒô´Á@£òwxìÅìxÈYƒ^PòÔúìvMóòÈÜŠÄ>P:ÄcÔú!ªvP•Ë?™u9­¤¶Ç©ýͧf‡±Ø¾†D†$š´ÐYA§ŸURÑ„&?‘ÿÅñ,t„õÓÃÏõ«Ý?Ì>Õøö’ä(þÆâ…DÝÞž>d°ye»:uoUuVjIt篱ÿ«^,ðýX—™áDwÞ“[ f>vÐÍ ÆC*Õ†ó…$º©ùS¯æ´¢¨W… )ÇÿȘ“žÂù&l@‰ˆ;ù ° bj]°ìºL ›*¯(¦Pa¹_ìà`µKû‰Îf½ú~Ö}m;)Þ\Þ³NìÛ&ä‘`ÚoÑOOÍÓØv~wrgEçêÞºM2bܦ+†}¶×­^Õ®oÎNEü~<ÊfY95dÓòŒvˆIûQõ£©2pûû¾ùÔ¹ùtu æé öZÀcpùz½QóTf„Ì‹‘á?¯ÐÁŸõ`ÍÉ °ñ0ÍÇ"°©z}8 ]áÁ ãòÕÌœFÚ4¶úìvRï€M>×÷ÒžM•kµ8z¿¼žßk÷þfϬÂ5õS‰ä–¦jþ‘öÂa»Œ¸<ìçÍíœÿ¼=¨½±ye󻦓ìà’²~Û×»?3[Ÿ,ÇéᲉM¿ ÙÁ½K|&99ísYçþö¦ø½ýßhàɰàoŽ>Ï?¿¿aˆåÒC$ ¥©ÝÖ1³0õ8Ê‚gí7†Ï¹{ÇçëʆËóÿf«²«Ô<ÐêC¯GCª%Ø?Õ/*§q©N]–¼}Ò~ÇÌgAbÒŸdt+S¥¢%&,~þ ío›‹«¿¶ÇwϨ÷n7ík{õÉ¡ÜpWxŽ•õ9É Æ›MÏð¯Míßåí{ÿ©ß~ð’Ôä4PÖ䀿¸DÒ ÛÔ îWÏ„û†ùœè´7ò>X{šl¤jv`Üb±ñßæJ÷É„Ñþ«ü#0`9-‡Aùš/…–S%:“}hBu1”1,Ò¯SÀ ‰‹5L¤hüììtF»¡óîìݱ½­»«êƒ»ïê|9Y®Ã3’£3‡e'3ûõ‰bÇŦN“/%ÿópß?z߮Π8»™“ÎAu{UwC{HóXν®TòvS)zòY  “Ìx¯ÂÙÊ Èñ° jœHs“1Ê{ȸOF.˜§' ¥göW\-¼ê1úcƘžÃK‘y€Œñ¯3‘l˜Sý&qýÓÕmA?wÔ¯ïü0Ö|Rç{ÃÖt¯k®è|³Þ&³^—g®È+צ–öìUλØCã)÷IÛ}š@—ñâ6™þ²2Ns{Ÿù›‰x¹ôÐ`ë!~NIJz_‡1c˜ñ¢ð±¸.RE1÷²³»Tkë;ë¾ÎkzÃ{×v¿ÙýUï%ÝIÍnñâG>òNŒ -ù7e”J[ÞzdÖè¬ÄjþÔ·°wmS'Ÿ4/ý/f%Ö’áÍ€¼Þëè'9‚OÕþx¦ØŒÓÝN3¶)ù#¶Áx‘_1:fq¿x“× |.’°2ïž?$‘ÅöY¶}z~® Ä¿À¥ÖGÂÝczXŠ™™-«Á³0›…ÿ2òQÛ”ŒL¼CÆ­™J±­¾—ªBEB8ƒìûÃâÚy¿Û*òÂf²jSsá´¼z¿ŒyUF`žSÞ«“*<3’®YǦR} nߢ«á‚ŒdNÞ¹[¢Š¹‘…Ò·zïÈÛ¸c¨/ã°Óê¾Ôo™µL 9Ð󊬕† ›á  H‰•Àÿ«üqÊ…/ûÓr£ð4g%زÃÒÁÉä—G-ãØGÅ*ñ.îNô3£ÓÇ{ÛøÁ¥ùz~Þ·4ó—Gå/Š·a󱓠²|²Ì^á쎵¶Z»EjVåýóó=œ…Ã&Ÿ¥JU¶HcFž[ÖÉ+ªì5ßå+÷¢¡Æá¬o_æÖ%ƒB6¸4$‡Ÿ-Ò¬±¾ì\É©Ø{߯;Àô|ÞȬÖÔ<¬ƒ®…+ƒê¶Ë“E˜lËÔ!¼E~ä,ËÍ’F iãÇä]î‡ðë­Î»wÎï¶ŽýwžY‹‡"5Ý< "³@$¼:k«²"e64Úîn¬y'G¸™<ù9oÖˆ-¡|\ªŒ§QáJ±ºãÈ£ð…¼])lÍbMTHB%xS'1ص#åYV¿63ßÓÕ y"<;¯#iÎ/cªeÕ&fîú4C“<,gÅGÁõª³U5A¬,¼¯Y{; K æiåçd„­‚^Jn¿äùùË*ŸbLD1bÁ¢I4ÇëÄNb=vÃy"ñ”½U?:Ï(ýÄKõ…Ü€gÁ4ì+Þ”/À ,ÈϦel‡ÎÎÔ±ÕÅç7ÌkõZÒÙhA>Ó\J^ 'M_`4~oÉF—ó%’ÇNØ¿­³¦Ø^ò¦òÁš”û ®Õ+Ç[ÞE7ð\¸Sø¾/Ÿ^<–„V’L¶‡„;Øg(0âÎíļò<¹ZI5„,’h|eæïΉtCU¼„šbÙ)UÚ0Õ¬¬',`4nFaé°3ö­ xkÏÚûlk ª¡Ó|¢ÓÚÅOÑ}»Ç¸ž]€ì¤g“5oÅËÁõÎP‰"äJÈ<O¯h;[XdRAÒÅÅd[™ñè±i>‡/³bVÈd 'eönyY”9¸1¡ÜÖ<&ËXqXnX.·­L‰‹ŒÌ{VäýúáŠN ½œæçs°‘…µ—˜ßì–säkŒ* ’ÓÌç³²ü€Zg½,ÔÐUznM26¸X„¬Ó }¼éŸ3ñÕb¯¢ßâŸrÊ´Ìʪñdbìb7øÄR›ÖŸ÷OÌ.OËo²£2Eù‰yòcØ9ýÜà-Yü÷Ì<Í}33Z[z²èdÕ{i_mŒ…õ‡ØØ¿’+±O9·E«!`]‘èŠýg±q‹C Cµ?ú€B9*Á‹…™9ôLd½ L![D3}š2æÊšc™Ysˆ~›9/ÊûæçÙ[Ƕû$þ­ô^¶W¼4-„ÙGe%d´H}›ðBj›i·ç9É ¦#›ðd ½@lð˜YÚ+;ÆŠ³”P<é`E…2ˆ³ò½;¼®hžß`@ùR9TX¿ÔŠA©¦÷iõÐ*@.:àêRNÇ­¿¯›:C¨ó~ç{Y-ùù‚6ËM…ªt0åV1˜ã@Y!߉N0-ö•í±VЯ[MEÂF[¤–ÄXY#zâ{–¹Ü† RÀ˜Y9šCª°Câw¸ÄîÁô®;3Á.o›5ç‘q¯QOĶðÕ°›ø„%…dÍØ«‰Ñ;3§¿Pw—ˆ›ºÉriž©·çÆ.=Þ§>ETãÙrû´ÌzÚÅ9C3³îöëc·ÍA†ý±Au,+ÛJ–ä¸É[nçxl½1ƒ0[͇­ƒÕ´r*ƒð?>]…¤(€5„ÙÙ]^@DÆæ³Dâ/vÝé!8ZG^Ÿ¹8ëQòì0ºqyJ'ò=/_‰fœB¯³|jT­Ã‘ž™®³ð¬® -umtÌ.BcÆ û°ö³³öF¤.ˆÕ òsÖOÄAæÔ_“¬™½†N1*ЋÓV^õÄ`Eùjó/<Æœ<Õ'“¬eC£-~Íê”U£«¤±°Ž,¢L–;l¬’,‰Å¯¸4b3H&½gËH+¼l}Ä?ª$¡Í"Y˜Ï´î©ƒ€±Dœ¢,U”ÖÝ\%ûKV±rV‰”šµ˜SK6äë±wΨÛIã–‹.ç•Å^Ó³z³òDïV‹²4ã„AKÏ•øŸ²ŠN/¯Êë¡ZŽåé’ :)úãGe÷yøìR'#rð¾)Có·¢2&»ƒm(õäb¸Â¬}Õnde %ò¿2Ÿ‚ùÀ©Ö*¬ÞF­ {Sn‰ã‰H5‰å³ì%;Ln¼—E$sSwñž0¢ÛA¯)]œålȺªO–Á|ýÌxíY©  ÿìÄäü±^á4¨§aÅDµî)öS’Í3™…Ê žšß„ÈÖÀŠÐ~Ÿèv’;‚Kî´ô"‚± UXÙ«`\Ý7§ä„Fbå _Kzh6ëlîøÍÙÕ¹‘î¹ù¤IáP6âÜ6càù 6ÅáGI_9éÕXWñv•Ÿ‘är¾³Äø¬Ï$ äuíìMVE@$­ÜÇIèŠ[2Pp¤Š91‡=µr0˜‡‚´ŠÝnódr®k «Àæ[Sc¢ÿ>ÍÊ`bÌ£H½<Ä&‘ycaÀ•u‘ °ç¤•]-÷6ˆÄÈ5Y€ !VV¸ìü? ûø,7p©€laN£r&‚‡#Ù@ž C÷§åµdRƒ•XE™•u²_f­ëŒ•'_li…da?^S$P´:ÌïT¤%ÜNjÝGþy]r¯‹TàS±7ß·²SäzV†¯ƒiy*ëÅÑ:ųªsFvžÙô"%*Egdä0ÉôÌÕêñcì'Y0×¢õtcªñ¾Î™Oa¤Ì¡ÎÏdè ã$æì|–ª:‘’w)Ù“Ã×›Ë.ë\¬w¯ÛDÄ®ö 0"5Ñã¶ñ©tVüŽ¿'³îÜnjϧÂÀ4”M†Ë<…´ÒwÌ1Fþňùú™y*<ÔÍWäŸNé´-æöñ¹u>R¼1'Ÿ†/aÕUÑâcÄòf$N†y0^ê&2Öܘyw¼­ˆØ!þDèW•cÚ1ìž`<¼,[PÐÎÝ*ŸŒ–¼”ýödøÛj²—³ó»’· Å>“ò ÷“»ÿ°àƒÅ̧zH ·"Î$sæ 5“HZï™ôsVþª@b±H¨O(xÍž“€‘ø'™ù2oX¡D&“ãEœÅ‘?ç:•TúOŠ5í¶U„È쉓ñ E"A]ðíIéq :©XFgí½Îìe…ì#ô‰-c#œipêÍ*º®/«dPÖN, ³Òd©p«l<U/ » «”Ýó\þ³t—cQ'g ù%Ÿ×—¤Õy\Dƒ§f¸ñ.fBFÒjÐz{ q‹Áu¶gGÉ„üõÄ’á> |Àã²å~Ë“"X¨ø¦ò¹^Ú¿ðjy®'…¬+ŽUpß/_Á‘¹ÍP¦„þòMˆ„È*¾›]‡ŒHµ´‚FÅF²§|8¯ ÓŠüYKŸÒfÜ%?Â"𣤒MÃ9’+§"ÉŸý÷L6̉XAàuŒ©ÜO„âih?%v!3¥žNt#ÿ ¢q?Kï Ћ[ ø˜×àŸ±/32;è‡Ájb€X)ÌT †1{bíY4VJDj<Uù4Œœ9B Ö&”3Þ^§jaÎÙR QX7ó§aêdð¯VudöÑz“!)†æ£í ÏÍÌÉ'ªý…qİ2Š>¦¶[¼?@@ÎÖ•SfëytÐüdœ¬N³ÔP?/§yâThhnÞÙGÕA\Vœ¿€Õim?KôÄvñµl°ã{D²pEŸ•ú7l¯=Â.ùƒïÄf±öØBd+[—"!tÍ.гÔpx:ÐÎØkBÓÉŠQCo´Þ ÛYl /c¾P PêQ½Î>±2}æÆ ´ ažö›Îг°%ºáSÙf{¬ëÖ€¿${äלàh„.NÛXd,œ -\!¿cù7Ò×cÈ_‹ fäýp¾(C÷)·F«Ã$m¼[m5¬·ü B’àm¤ù¶q‘:gwè—U€sœ_gùx9»@â„Í„‡¶ =ÞKô2%ÿú™O™Ÿç°;²ûÞƒUV­GžÈ |kÿEà^‰Ñ·¦tŸMãøZ¯çÁØ,ÖMøÓÙCã…;ñeXeû'š3Y§å, ,úDúŸD÷ñàJéŠ+8/`¬ö»œÚÄ4Yiþ…´{=ébhñàb=}¯E=°6LYjvÌPD²XÌBáh8ïCš!4‘)‹Ž·(ìÄÔŸ¯EGì‚SDËí± »lbYCò)z‡¾ilÉÇ`¢Drü©l]Äû@r䙿ò©XS\+^‹Up]ÁmØ‚±‘%¶ÃûÍ¿tsÚ1ï‚à(èÓhV0%Îлûó{£&ÿœ< „7â;œúŸ›ŸÒO:_¸>¶ZÓÚ²ƒÅêØgs úË/³ŒøÈíóIôÕ©`)|¬÷n‘ìÞ©hÁ,λ<‹á/ÛÇS«c²'ü7ÄŒ…×b4ì?LLÅçìPl¯|~‹«x/kl%ÌA”…#Pÿw’r²RüO ¹4ù#fÀâÒòdÍíU'v·hæsònžw÷¢ ƒ$WåßÁx ½j×dUË)„ÅÉŒžÓKæ‰+ó ä`žJJKDTž%oEJØ!6¦Tþ°EX]£·çìθð5ØñbœuÀÿÐRñHa˜ùþŸƒÜX3úƒa¦[¥Náah…=†œ€Ã‰ð±âH6A÷´E#$­ÒS½}öÖÍ¿‹SËâ¬þŒdófç7kR uxj¸÷ÌOwʼWD²¸,(ÉHex|–—ü‰˜¡Uó³äudïëN¶­Ä§øX8Ö¿ðƒ¤…õÕÃL"üš?´%>dMqCûÎ÷‹=pJ´©°©°¿Œ¿P=±,Ê+ Ȳe0ÛØìu¹ÅzN¤@µ: ¼]~:9r¿6¯!Ó£³"‹óïºTÍÌŽ,Ù?Z( 1ø99H šPI47ë¦^×ë¬ ^ØMü‚WaEqNs°ß…=±côqv~¦bEý¿Í“s\…1˜9äçiVÓ¾ySÁ%R¡E8ŠEù ö«FÅ[økì$;³0¯„‘|¢LßÌ!ig…ÔÊLÉìçe\ƒ‘9b3ÑÐyŸk¯¬,¬ ²I$߉…ɉüލÐçã×x)3ój!ÄÁù¿œ™g°–ú¿bŠ7…ZX«Z²•Ê`þD2f_òÜ‹aJxu†äǰ{þÌÎ\ñ‰Î¦³ Åë—:œü!â§*Ÿ=/«6+Ÿ!o÷.’áˆAy˜XÌ`­E9b(6+§"“ô‰ˆñÄ*ZÙ-lJàŽ?\*ì?Á¦÷çóJžˆíá­È|Ææš„0)ó¸¯\N†ÆÓlëÍÛÉ¿MLÍϺ¼V¼!ïÇ?ØGÖïAºÈ%或˜‡)Y™ù Ñoù'ÖÂùWïƒbD%b´«øÔÂØBÕs‡Fg‡ì:†=ä…ŒÞýî „$RÀmˆÝc}D–…!"[Ø¥yÞ¸ø øXÆv°º3òÉsS=+ÏÁ[ËͳïÖ&:õ²Nü$ `ŸØb¸ÛŽøÌ-ÚYÒ.2£Ïp‹JÇ‹­Tÿ@Æ‹¼ËIš·XóbVÈŽç‡} 9¿ƒŸ¡+ÿŸ f4¿/_/Œ%››ßЖ*¿¥÷Óó½HzE¾£yjðуùÃJVá¿ül¯¬Þšh>ÀÌÄ>r(%JTeeíK½­=óÉöSÉ' öN7õ …ýÄÛ‹¸X:ë'ÿ¡÷ÃÞ¿dÁ÷æÇú¾QæO¼U˜µ’s&3jxäµÐäæ\Ã`ÞÙ{¢1Â2só*¬ü!÷lÛćæýVÒY*Ý—àmèFP=ÏÈ+ÉÞ¸|%Ò [ú±‹ì¿aìbaŒÊN¤Æ–²ùð?„TPP¬Ä»z‡×b»&fœ° ;;‹,J$b/X ë>"¾îì¿Û7d?½«<%¿Ÿ’]Ù>Ï‚vYdþ€ ˜8ô“6£7Gþ‰õç?÷ˆ,ÍÊ;!¶RuimŒH^»…[‡:JT´*ë,¦ÀñóŽ8R—âõ ÓY,¢Ý•ÿ`›Éî]^.ð~»EºYj3ƒ'aT¹TÖF\§>IÜqê/„øTXÀ_nÆ]ïÏÈOHo³Ù9))j‘ÃÁãíš‘ŽM8,2#óL‡iß0&há È¢©ê>|’}œš±˜3ŸÌ¢9냡'…ƒ?ÌoJdhr~Gÿ /ƒ €ß0ƒøoºˆ=eó»æL;YhvUn’Ÿâ}=»x-«ËFñL³ò{\˜èb×!Œk½úþÿnvSó~rÎý¥êÕ¨Þ™î˜+ò›™y…>‡§ƒÀùûÆTJ¿=ççvΈ°<~|ÇTÿÎÎÈÍ›õÖÓÇb I%Iæ›Ì–L‘]ˆÞ«Vy§ÛÉ&ÏSŠÚÉ/ükIJÑþ“—Ã7ÑtÑ~±Õì `ÕUÛˆpD€r$ô`aÆð¡ô‚˜ F›à.9*•cêõ9¿²Uúž×\Ôþ8³bÛS –SRÿÊIßÔ«Ó9jnýÖh 4IfùWúàž^žL°ƒÆr¶—geÚ±¸<ŠFRˆŸ7J¦Ëë¼ÚN³Ú32b~ ÔÿˆòÈD±²l Û¦žð ëùzŠ 2rA{±[Ö— 6ò+sŽÏ“5€æFª×äžë·µÇ7Ssî»ÕÇë Ó'áí©lŸ•Êö©ÍÑõ9|yseó‘ægí@s_NBͺ³…›FöÌ|TŠPDf…÷†7ȹƧ’9x…4þ £y•ÜEÉÑu| 4£þƒõ*ñYŠÊM)ž‡×Ájô B¡×Ù·îªÜ³KdùÌVÅÛ2˜wŒÊl~\Íëü·]³{æLà†œ†Ý+=}.É+ÿ‘þÇ›æDä›Ó5øúzDó»vUóTµ¨~Yô`«hIÑ 1AûÆnbçÇÆºBpýùZŒI»ác(Á§Š“Ežx¯³*ƾ0¯2ÜŒ]Æð¬ þ‡dxjq{áÆ0w4„ÅCB¢,oÆ×²üZÉŠˆ&'¢Û-úÌ·áqÌãÓñóô/xkó†œ`;6'â–äüÓ†œþtî·Û"=>«æÞê+é}äžØ÷ÕÿmÎOo¯éé|ðÙà§2Jº kï‘“_ËcWéƒ]+wq¨%·ÿ¿,Þ–/AAv_„’0hØtÞÐ ˆ£ñâyL<½ŠegÕÐyô"W¸Zû©²¦YÖ×9&™å=rÚcvžGb­Ý”D·ŸÈ\Þ˜3€ÿJ§¿§×SÕºt´a‡ÖÚûÓáò“9yazmS*§]4ëêë"#ÓêW7ûæŒóâØ='D^žLé!y&¯„)»2%ß©ä"•03ì/Æð}ò‰":R`iK!ÒàÙu°ØŸÅ÷è"·¨*ÜÐÄ“ÁW|äŒ<Ãþ«¸âófç_¨\lØŸ|³ró㪜lþwõòô.X“®¯›¥ŸÃÜt4¼,½|^ŸÎFMº$™µ˜¹-ýlß•ÎwLW´ÅékÿDzý.Ÿ8'dä;dNª~» 2¾å·qêôÛüdWÍÃý¼…qƒÃñæmÆ ŒÇÑpùVƒü“ öŒçPu“—jLoÂψ—T‹~J-Ä´ø®Eù½H–t‹uûUzÞŸÝ^“ûUz¼4} 6DʧçdìëÒ·ô“õ¤Üãóózfζ>ó²ÏU[Ä.trÖ¹/'Â_Öü±¾²}¶>=205’?z'¬Éí Eaex[½M,2¬«±;…Aý ; ½êlÁÐÑ nœ‡+3''P,|Å–r”OpÖ÷…éÅÇÃ-¢ÿMÃÛìšw”ƒwB:˜~8öì éý0.ûëö¢É‘ñÝs–F:B¬Íþ_X¦9¥]š¾Ç"¾#ë³Gz;옞!SÒãb‹üÔÞ•^¿oËL­õ±€£Òuñ±2xƒiYkìÌ&ª-Q/ÙÆ¿³‰]#ù,A‰ŠÕ|ób…§³ÿåœ+ÄG…5a õÝ»_æŽ÷°Êì§HaÛœ_—Ÿà’Åû«ÓṜÜ>,ÀVFÚÏ­OÿšÍ£Gç«mÓ bÓœg¼¨>¼©ÛuÍ×ã?–;Ýά/8>ë㤧ª™õ>ÍûÓ3à¾ì¸*Ç9ùn}t V‘oacÙjx¥x/^YL¥³—¤±Ô®a [Vx3V þ¥ï¾jóDC<„³-ëUEjø6S‹Ñ'1»?6#:6¯W ÉO¨.Í þ6'õÒˆ-YºŒNŒÕÑù¯Ôî¬bMW€75/T[vÞÚ½¡9¬ùDzE}00óÎnÚ67’ŽøÿI?­‚ JM^7žlE|Â|2¹…ÔäÆJ|ßÏÎèDHЪø¢Ã£”Ѝµ›™›o•÷‹"°=䈇d xX~ƒÝ“©À(±-gá §6^ê’è'{ˆ}™±MÇšñ™-ÍoÓ±âœú˜ü»s$üùàíч-Óér^nýžÔzÛå_Œ¼†N'd—U×°lª°Uæ«0ƒOĦöMŒ­ÇPÁ|;›Å‡•ÜžZ¦»]þN½ëÆóµb–Ñ©L«„é¨Y†žGý:¾ê€yÆÅëý"7]¾2¿ÝsóÑvÙëµÙÍuYWÅœ©^h3×m7½OËoþSý(·^­Oo¯m‡º¤=›Û„Þ/±gV¢ëpjýÆô’^ ,š³kFëÌ&¤ËïӇͷ«l4.ZÔÆªÃÂ$Bãõâì¢ÿò ¥Šv°ÂP̶߬œY _xVE~‚½,ü¼[gŽÎ³x…áÑÉTgGÆON¿«ãÓëçÜìÞ}Õ”Xõ}²›ÇenkcíßûçN£?å^ئþ`µgúZÝ× ëœžÎ>3òg“|ÿ§jUn:?–cÓ<ësõYíÌFlßfç7œÏ8yù@~P¿(ž– Žó(«AkxŒ…¨EÜ«Ž úÃÿ å~KÚ_Ð¥<­º gLyžûÊ;ȲŠá€c‡4D¤Î¼´™Ò¬ ºÛ++§¥cù‚ ÞNϾYƒ#Ó·ezæL’¯Í-†I4ø»ÜeºylÑÁ?ïnFuvjÞš^1Scõÿ’nÉ3²ÿ—Ä–ìi™Ú|¶Y^ÿ_ÖRôƒ{Pdƒ×)xŒ„’^Z_î?åÅD˜ è˜~—zPÑ%Ÿ(þ•…(ñN0ÄÜ<ÑžÎÌw¢!,–Z»ûYCQÅ`öŸæMŠè¯­~Óùs3-Ýlæ ÍbZ|þ¸øóåù~ûø·‹ÒÍhÒGx! WDÓh~Ö$°(]’/Îû®Šu\ûøxU§Çß¼tÈöKdpNV±‰–ì“Ï“ÃÙ<ŸxNÆ$ÃS2¼*üù({ìô$‡í¿òVôSœ,f*õþð1/Pù©Š`õ µ/…A‘}æ}YBÑ„3‘ìâ„xâuyå–Y±]¥ß^ŸØ•{ZîÎÞî}ŒæŽ¢Ù>] ^’;=ŽI¿¿ ›Áìéÿ‚swª·Î}!#Ò ïÂÜ…ú¿¬S“ž˜ûÇ^î:$#óïøØÅ½ò 8ò_ÕœtOÞ!Ÿ68¤§{gt65ëYC##Ï%*÷ +ÁŽÓcc–­,Õ…8Hì™ú(Ÿ<*ûR|諲Òü°»@^RíÞî×ýo»º³&:/ˆæî˜´3+öÿÌìêvé‡ÔK ¼ {;-u¼;"ú½I}euwîÅv£Í¬ô;96Òã6 Ú2!–d·XŒ“c_’ÿ¿ºþx¼­Hml$`§ŒHVÙ2•ÌòåE»ùJÞ /É¢—ZPr"w…©Å“Ë@8˜MvL$ –ý„ª çéyHß\ÅJ˜šuB~g}õ}y]ÌšëÓŸtRýnÁøe§wˆ5››>Î'¦ÇÑö™ƒˆ“²«ûf–›¦ßÝáùùÓé†vJs~ý“ØŠ&óÞ1s>9ÿ.ÏŠ­‰>Œ¿88«qV¬ÁAý±´f3-w_˜›Xž'†Æékͱ*ÙÙDÑd Rª°‡|{)þwê‘ݤ3<ªL…,€H¶Ä¥Êûâc #uÇâQÈúÂ^~ºšÙìØ9©^Ól“½?7gQüÞÌŒÿ¹j‡Èwn‡É®žMØ3_Ÿ}>¢¾µ9¨ýSæøžê˹E­Êú Æ&.öß+݀˻çdæ#5NÈsf=¾%=ÿÛn]„E;>²q’RgâÔ…a¸œÓ.<ªý—Í„ø­ù ¬8|KÿÙqzcÅD rY";œó4ú@ºxHqï]ß,Þ:XZ=ÙùVçoÕ9ésthF;:»·0;¿>]@_l·Wö~ûìÝñé|xG汬¹±î¶ÿk&Ç3¼§zu¬û1ÁFóó]úAgÎb8"«µEæ>:ké¹7ä™O5t&4ÓÃóÓ ’m¼4 Å4;•^%^‡gôé·%ãâUVOÔÑ©AÑañάü^7ù£¢Ãù»r‡'ű°Í‡‰û˜—N¿¬OêÝÚ™Øì“yn’t²kãÉöˆônˆí;-?ß2Ú»ª~wóéöÍÍ^¹)b·t5Ù%ˆàêꉂÿ‘°OÕ7¦Ó×@pãÑyíKóÞ‰±•U$é€hÿÙé:¢YÐ|#}ÒwΊO3¾6;4˜ñ@&":ò޽0þ’ -Ulü$FS#NµŸ*.Å?°¡5£Ëóò.5"`•B³ò Q* #4›°oð×f‘§åžlì¼5ú<;¬ÈNþî][û÷æÌä‚ìâ³±n3ÒËÿ+Í·š7¤»ßeAGŸLw°]£Ù ÒÛñðæ„t;zKÖϺžpsFùïø‡ôO»8r´!?ŸW¯Èhô‰1ù6´»…C§8rUH*ŠÔ¹¨d-1"f—•ç!1CbV,Û†Á 'Îj—úsü)ý—yÂÈb¢—ï‰ìÌê/M7׋Ú›§ëQÍ¨Üæ2:~.÷"F{Ÿ”{töt}zâþ;Qq´óר€[ƒ¿™Û³?Ó“ž¯çeÞû%2üd<]7¾ó¹êÙxÑÉCš49Qô¤üü¼û„ ÁþÌ{vöèÔ|:ÙåÅèåOÁñPœÃ®cÕLÛKöÒ]öQü/:ž™ß¦ÌZôçÉ4Jd úN.À¡ª1tØ®aääzU8|/:}y8Œ5C^ëÉÜÐrb<ùÊèì1év}V{GóËÄ97W£"ÙwVË2³iõMÕ™õ5ÕG«NsT:DïÓÜ̳I¤¼/–îôøŽo¤kÎÁY‘EA¿Ï Í[Ÿ—µ;¥ye,Äá„xÀ½#…òBpTBÓ›ìl*[UgmTÜZ}ëuööGnJT¬þ¡ô Â㑼ž' C;OGÉ«òÀ}Kßý£†ž<"½_¿–=ÿ{fqFüÚôìþªh€vF¼Ü§ªÛ;ww®®Þ–ëîjËD÷m,û@ï;£o¯ÎMG»w&2¼1·Ýý9¬Çóñ‡e?Üü"^𥱘WÇ_î–gíYÿ¥ú|˜Ôûšyó›7 ¿2lË®CzŒÏÇàDÄ€z‹È_ÊWM²eÆ0²ÓÖ"%6]E‘Õ{“ÂÌÏ,q¤,…xJV_¼$ßÃÚ’‚#cƒÊ«—ç.׫·×§5“› ‘âw'Â;;:;-Ö{Eæõ“N“.^§E›ÿÆWOË¿gŽsê}›Í—ªÁHÄÔØû¿Vw侟¾0¤§dþ_ 2þLpñÚ Áw%b˜ŸuÝ%Ò°0’6¢~e÷Þî1í¨æ=CuDÇe<¸}{l÷ÌP<ÇÊÓuYõ XúA ð4ÿón'„e†J&\՜̿|Z©Ã" ó9=?…‘õí›Ù;²úDv{z¼ô±õŒæC‰T¿k\|ß´x‚j¾Ù¹°÷³Î›Û­b ¯ÍÍGu$¤?¿?´YÝLÈa÷‡-|>:³M~þÓ Ã ™ãaíÛëQíƒí‹Õ yöøHÌë¢5_ˆEùn´ì#M_÷ßñ—D÷ŽÈVdGêE‚𘬺ºVöºD72Êн꬧S¨ìÅŒ¡ù‹ñh§;ðAÀÉ~¿"VýˆúæÍyY•*·<œî¦ß¯vË{UmVß[ßÙý~÷ÜÈÄì ‡Y•·ÕÏ×ç5/iæåŽ”_§§æ½¶}±€ýñ¯Œ4b¤ r;çÁt¤šÈÝ„ +Q2«.ÿƒñZX·›=e#Ùu½t1 l ïÅP‚3‰«ûÍÎçÌ®þtóþØ/þýÆjdðÞÿÂmž}Œlˆü_ÕÜÔ½ ;"·Ã4Ý-›¿Dο›Ý~kvuC^û÷ĸ/V#'w§¿ÿ_«…÷]“;#64ÿî|´³,e^lÂÿ"Æš\{m³¶½5ÝrŸn—vïÈîÖíÜH&4WXmãÝ5;€í,¹Æ¡ÀXPÕ9ÐAÉa ÙNXú‡å™²º(³Ý-»„½ÝÈ/ž~Ç–@F²uΨ(çMœÿ—Í)fœ<,õÞøè—ÄKÀª»øuJtjatæ–jCüØøÈçðpºëÛe™û¹‡Ó½^üóhõë Û³U4ãÑì±0· VÜ9Öaûfuç±ÈóÅÑû›Ÿ6£3·»ó¼ksûåÍY³ß§–èÑèÈ Ñ«…Y»‚¶Î*ôaYeó`¨Õ:Io’ŠI›ø öZ6òáéXy:€ £ë¶Ru*û/^€±ÀØ/\¡Zœ8}‘… ÷-~Ü#Ìjv<ö^õo¢¥÷%ª9³Þ²ýOsbó‡¡xïÝáo3âýb‡eî :pKó ±c›dü³êþÜä7¶ùHûÛÜqiê#–׿¬~øjv¾/ñá]ñ%ÿͪáÒÇÄ^Üø`ÓpÀcó]ÛúÞìÿîÉ‘®ŒîccdÔáÁo¤™ï.§”`–_‡=<€Üm'û·8sáÍ'†¬…( ·%óAVÄùdH† ÛL"Ú ÿóÞ]bþ—}þRuS¬ÔÊ Óöøp:÷„Ûü@$ö¶jI$ýÈÈÆß3î*éÚìá¯3£ç1?Põš[ÚºßêûfwZüØãÑøß y÷~æ~„ø;ïÚ,z¾!2sO| |щ¥y1‘äË’ý_uM³GstF³U"ŒŒÃB4þ`Äðö¢7,¸½”½“qbþeÇÄö¸}ÑbéÝÄ_ÀÇ$ÉùZ¹¤¢ bÄ]â)v 05ØïªØïÉÉîìßœÚîÓŽhž7Ø{‰ŸJÿó»c׆eÿ‹=x ½\K^glæ/zYýxn29yØ™ýIaF·ŒŒ?tc´ä¡lKæ>1{üïð>«ò OÇGü3ñÒØØAøêóùìgsÇÜÅ©2êÿ[–ªUÁaiÌO†SÕŽxˆmçéH°Ÿêx#þ7_Y]èËoµä•U¿«¨+lÑÆ3ðê­¶ ú™Ìó²a%oÉnž–[Ë~TþÉ`Ÿý½ÞY-ΜÉ].SRͲ ¶Û®Ü^Ù¾·šŸ5Ù3ûxbspïkÍÍážIàÃU',ÁÁw§{ð²XÕ…yÇãõÏSxa2Èã3^ :$vã©ÄÂ/Ôw¾Ùœ™ÚÉI騽:–JU=X*Vq5¢`ù!¨Î™ gØÂR<ùOË»ËÏ ò]Î(ªrKâ—Ü7™‰à;wˆ;°¡>+·¼ÿ6¼Üaͱ‘ÍßVß®G7 ý0÷¾:ñʽÕÒ €íbÝÖg瞊EÛ*+³u2£;Õ_Ï­€_ï|9}½æŸJ'²~m³LÁ„èú„hÿâúìÎÑÓꃄŸgPK°[¤a§p/}Ïyc:Ê‘Qòo8JÙ)8§ÄÅuf,{)V…ÎÇaJuª¢7t£œå Û*WqÞú¬ÀÑ0”ì!®Ó»œnX‘§—ù÷×O©^ž|ïöïÝÕ[ê}ÚëS·tNÝë|4·´mÝ=ˆhd|ökê)±bEΟÍ÷uäû“ÕËë‹ÛíêoW»;O’ûª&(b§`¾ŸGÜ·U}{b›ÚfþÛFožÏòš‰ñ¥;dôi¾9UK2Rú+>‡dá»,Àfaõp~Z,ÑáÿätI>ÎDDÓVÇ!ÐŒ—³qp/ÃÛœöù‘ê¹Îа[‡%F9(ùç¹Çc‹ÌåÎfeçÓá²ìý¬p@_ªöÇÑŸûGö¯Yþ{ö{‡Ü7.(wq=?¾'4,vÿ¹ ÜÉA¾§gN›gÍæ¸!±]Ô®l®Ž6 ‹§m³ÚX¦*«qWÆ3:ºru$³0ôNFËÙ8£á±éP< ‚îeHqýº<À=å”y³ j`(WŽ…Çw"Á¹'{ªÞQ¥ÿçDÆÜü¬/«Dÿ±épDÔZ7Õ¯2#xqžeiþï|ÛnÕNÍwš—å»SÛ_·ïmwoþ¯™Ðžöâœæèp[ÇD“ï¢yS0Ârÿû¤øíõ‘€%‘…_?_³=. ÈU‘ë•C6R àåÕ«|,èúïÑ€5á¾ÏZ¾¼ûÅÞ'›"#‚z‰…;ó@FoVEâõ²)~~døqÝ=ðõîud½X€zhÖÃóZg‰D òÿlÚ`¾Ç©o§GªCœà 1…"?9„’yÔ‹|Y2 ªUõ]í×rƒé¥ÍÁÁb¿®_hžŒŒŸUÕùl;%~qIöëÞÌýËÁvŸI´ÿLup4Á8¦|óöÍ]õ»šÛsÿëáÉ{ï-ø\vþ牉¿•÷ü-VbrVê½õ+›sºu/l#ùâGž‹ý¾º(QàÖ© ”ß.2ÙŸË;¯&~£­´«Б…?Ÿ“Ÿ—Þ.ðÉ™™ß©-C‹›œ“²ã< oBÄO/Fï–ÙL}âëÛÚÕGæ–ÇsꟵmçå™ñVõí-ÍÕg#·2÷?Š ü3¸î½Õ·ÃmÍÿº >½ß{¼]ÌÎŒî¤îo‚g–Åêwê·äÛ‚?~®šøÆÜœte=®Ó×;­]•g÷"Alàmñ¶gÖ S…¢"|Nä@e?D䊩Ã…»-gðpxf+Ã?~/k̶Ã|<fCµŸê0–D¦ÀúÉ€xýiÕã©Ê? ¯=µÊý6¹ùï·ÍÈxÂ%‘ýc™ÿW­Î­Ž/‰ÔKý«X€ë“ëyºº*pM°ìCÉ<ÕݪozïÞf·fxß•}GtÎx0Øï‡Õ á~“ý¿*VÓÉë¯ÍÝQÃûö̽·u¸“&~eQÖà¡øÒm3†Å‘hc»à¹YµÒW‹Õ2#5ÞÎ0òä:sªæf-Êù‘kÉzˆñ]°€•ÂsÊý@øSØ`·Œn~0ÇôX¶&™Ë ÛM;uNkwîŒjÎÈfÖmsdçíýûØÈÿû«Û«1±ùw¥FêŠê=ñsOTWt¯ïûJßøîµÍ¦Ã¶Ùä‰Î™m/9±kòÄ;²Wdÿ‡GΆþhêÅ'·ë»+»Ë›:6ÿ×Õ´ð*këÍ›7fL§Æ#É`Ñ}¬?K^æmÇuê)¼¼èÄX:’/G`GñŸ*Êœ?sÚ’µ„yh;¤)ÖÙ}º±íýÀ® öÙrèNƒS2’›tÖ÷fw¿ÖѼ'{‡hèYõU¹Ãé²àã%‘é_$êÿþïê+‰ê®O>ï„ê+Wõý ïÚÞ³í;†õmrTç™ÿÿâÑîOÜóH^Õ$Ï;6¨éƒ‘ý;êÛ Ã´ÛÛ¾:¶óöjF$àÁð@Éÿ¬ÍìgÆnñèêžÕÀ¨u^§VÇÞ‰çÌ[—ñ?;aÿù6èP¬ìŒ IKt~Çü@År'ž9Žß[–ïÎz,¨N¨oïûݰ‹Ú‹ãûWæï˳§µÿ ²ý^ýúŒèûÈÌþάÁC‰awˆýÞ¹Þ5Èé×}¿ìÛ¦·mûæ¾×lòŽÎC‰›–ÕoŠVËxÖyM7²sR²KŸOtõ\îûv½¡9¬ýL³]X²g’s_Ø”œ:„r¦Îy«ú,©¦ËüÂùÑ{µË…ß°2ò?¢û:óQňï’CÛxVŽ?t¦?õ|Ìà˜Ä>‹³‡¥êga|õ.Í#}‹†ý«YW(¶úUÙý5õæíáí=õÄf}šíÉÜ~·t·Eb—:9¿­ë当‡-ïÑ\W¯l¯ê;±·&qÍÄÈͳá=&$êÅvö%›ödêà>œ{o·n>›÷ÿ¦ùD{l|à¾õïÛý›£3‚U9RÆÇÖ•{xDê‚È9‹&{§¾Ãž‹… @:aÿq¸l²‚¶Ã°„W²vz±&Lõ—š™‘ÙýµùÙñYý0͇{é}±óÑö¶f»æÒ0 £µçÇnÓìÝœ¼Ý²à”‡ÓÝt÷÷ÈÁõÚƒ‡ý¾ûŠàÞãó¦6ût_j·ÕléÞ&ìY/v4¼w=¦½ª™ÕLlÞškaî>ýlä`}ªEt®­Ý¶,‘Ï„D$NðAìjÕõ»Å’®âôÔB‹fåätØ0ÍüK/|ƒ2œN9S‰3*¹.µ.¥…7ÁàA ^ú ï¾&‘ü»ŸèíÑ=³{{óòÔ­ÔñãÉo¦¦kQÆúÙÄi§&¦k³§¿Ï|#3Þ¿]Ñ·yßõAùÿ Æ]I?;Qä¾ÁÝÝ^iT°þŽñs®ßÚäþ«T}ô_ŸŒy@²"wÖß͉7dï_]\šlÔšÌÐy'8ÕBE27%oMï;ù¹»1¡ÑMÙ6ó§ß}Ñ㱉K¾‹ à‹È½/]øXZ°yª/Ýý¾rè&«+ª×tžènÑ{ogËìçüÄBïŠÆÞœûlo¬?¾òû±‚«ÃyÝ—OXÿ±s_ß“½UyŽË?“³/‹Ã~\^Ÿ‹¹$ùšH¿³mä%YÁw„?½ÉMØÝ¿÷ÞÝ{G;§ýR³e}Aìþ™ýâìÄÒŒ×I±xV‚DþžGo…ýãûp@â=ñïÆ<±Ó–êq%äS‚!,¾§®nÄzLÏûÿ›3„Ç}¥ó¹î¼î^ÝÕíuÍ3Íüö‡ímí@çvÓö¦æÉØ<#Hî¾Ü{úîî)ÃþÔw]3:3\š³.u¤ã ÑôõõM¹9ñúîùêêHÅñáªø’£S/uL½WûÛøØ[;$+ö‹Îg»ÿi>Ü7!>xm¤ÐùvœÿÂvàîì’.LÜŸêmþŸ,@3EÓ« ß‘Š!`:Ty•SƒìÿÌü•äùqçxEV¶?ÿNŠå•}:¨úU·Óws÷ŒÞÝ[»Wtîþ ¹®þî½5Ûµ‡¶Od;Ç*¬¯?Pý°Ýئ}%g4*+ò£ÜæûÎpú7ß &•ÌÁ³½K»Ëã>^½*Vr^¬Á‰ÑƒÑA_oöh?Øœß<Ö\Ó¼³³o{CFº*r¿{¤'mŸ ²ÊŸÉnéP*öTwÈá‘-™&úC=v\½+½7o"QãÂÌR-‘,Œ¼ .tnViljÀJ%Șêã›ûvëÝÒ{:wŸ®ìÝ7ªïÓÝ¿µÿNäödÐÑ[²ûûDZ¯Ëý ÉÞß\uç¾:{»o3)ðŒfY¼Úˆú Íäî_b=–„C ï—W¼!Ũ—´ýaÓ–7crú‰þ¯ù~æp@¬Ð!ÙA^Må´O¯a9± €»*l™€†ä÷ÍSÂÿÃ|8AgŬ“š‘Ùy¿³âi¾_I}t¹O›]’ïvˆ 8&?{M=¯wIï?Ý{:‡v–uí|)‘Í·ƒVÖ_ªï͈—$Þiƒ‚Xo kqM˜“Ó“Åx[˜±ãš¿Éì˜Ù®O|kn }udcBôUÐÃ[cCÞÜìÙ>–óR·´Ü ý…Äç5ë2†=#Ÿ{dï•îe_xZ —ÜÌÄhâàþÈ Ï™', 9â¶DzâìˆþαX²Íb á®5:TeX$LEØ&Y¥Ýâús b~çݯ7ÇûÌb¾kãóÆ ì»ýò°£¢íGe žŒ€k>J‘;RëtiûÏö¬ Ü}ê&rkx‘— LB^îì5yÝ‘‘ž™ñ·Å² Ä/¾.YóÍ'íÝ,µKÆèì"O_¸JžKÏÙ]ÓJµ;îWŒ ;2éVÿ ÊA¬¯B6‚Žœ!”#s¯l¹ ŠÂ#à’¡G¨Áž˜¿‡©_Öü¨}oÕGûW"¼[ÃòÞœ(nUâÓOÕ‹›#ãÕdxö÷¿;Èö‘‹›r×ë3á>Y™—Øñ]©”ßžˆ~›ìüühpÃCñþCÕî±!׿œðì<åóÕ¨öÑz¯T ¹sS×¹ÂÎb?ygÞ‹—SÅ>:3ðïôÌ®±£ùJ•³»ˆÈ?«ðØÖSu¼x‘%ܤ+#ÍÁ°è>¼e"Áéáªr )?ŒÌNŠ7Û>,î_ª%Ùï‰Éhž—½™8®*š–ßÏ˟òß«·j¢=´½&<Ñ]ñïÇ5wÖ?ËüþS-È <]m;0-r3"ñÐãÕš°$W晇Ô׿^¼/ÖÓSõ19~C5;2È2™«y³S¸,ŽÏf T¾ÒÿâÇ¡$çßͲœ)`œ?ë'fí°â#]DeVEºÅË~.ÈßWž9Üûßê+zÇwúÛËÚ«›ç²g b¹©Ì[ëÒøôr›ùòØùG#‡'“y~ý¼æí×ÚS# /mÞ×<˜³Pgõd8Žm“•ûo5,_ß{ùŽH€Ó%cc#nËø÷ŒõYŸQ©OÁÝb®Kw;Õ fA¢}íèY+£?33 !¢ 6óWè¬oO`vNTT|‰l‰nz9yF±¡Sã}ŽÿINý]Ñ}¶7¹3¦ób{Y¤Ô=Ýýù³03Ÿ¾8y°ƒj^LãÏÑŽÁÔs­­ÿ”±¯kì­l§¦¦çåÍña‘>Wÿ:±r'1ÐÖáóŒ*¾³Êsö­·hžŒ5­ƒ§Îʈ^ûo$s3Nù:>s5&ò@ÏUu‘i¼ ß9ÉêÄ€ü&v“DëAg؇Rëe‡ù@¹”RNæÕ“aÓq$Ö’öLòöeMØ€×W«Û¾¾³r¢w»ækÙݱa³ŽŒG{KVbmüßøðà2—Ï$²{²:$ÙÂý¢ó—ÅÜÝ[ÖÛû}«Ôô\Ý|¹©›ñþÃbfdî“¢÷ó‚gæ /M]Ý9aÁŸ­®IÖŸü44zµ©tÒ¨ñzs¨ý ‘HS1l^Nõ8ÓÁkÂÿ0Sé8Åjx™³õlÞÌȹœ> pKžW:ÂÍÌÏvJìñάÐiÕÜÎü`ò‚Û.¦»³¾?·•jvŽ'Ÿ›ý” ëDÆÆª>ŒÞóŠÁfQûùÞºvejàǶ5+š»››ss<†kAV`\öý¡p‰¤òîWå'û$’^N`›X±S’‰å³J¿ ̤½ð4P½U툷Åà}3£bÁ¼RüÃòé!B3è4…Á|•N(tL )Wˆ5‘MÕ­tçÄà{¥gÃÊöàæ+±~·TW×ëšáí9©vŸZ5LÏ%ÇuiVâÄ~{ÏŽm¾ÚÛžØÝ¡wiß/;'6ïèlÒù[ðÍIÍÙaž¯–Äöωå{6³*Öpt¸Ô_ä'ã[¾Ú,ÖCü¼ýd·X;š,¦ß:³ÝŠõ^’Ñ ¬ °³ò¬}“¹¸N†ÄZA¼ýù·°g%#^²až"G>eèw,æ6±Cç%xfóÁæOÕ÷s^ñ?õ:ýgë4÷‡Ïy Ñ\·žÐtﯔøþ”úÕÄK—ô ßä¡Þû~Ü;¯wbw|ç{‘—ß·ÿ×ä¬[8R‘ÔãÕ3±GEröNeÐ%Ñýê5íˆXÿwgžN}ØG²,2-ÞKjûɧC{êÚz‘yèC$~ÅòÊ{ŠÿØ7ùBÕ]Só½ØQÏ ûŠáŒNîÎO`û­‡4\ÕI•ñBútŸ^à»™¿wÊ¡Ùk2_2 2!f`yR™+̪àÄØV¾TåÄàíW$ýX*Ú^¨þÕ^—?”<تìÿÖñn§åí?v¾ßÜù{÷W©þF¸«+ªV©{ ^¸%g!NÍÝï_ÍlŸk/ëûB3,sß¹YÐ\[—ù™jYòê×7‹ÛÃcù—ùo—1›ÎҬ씹±âp ;ÆòéÝæÄ‚|‡š>d5Dúüû‡#’#€­y¢72ÿ*Çăx•ùo5ñŽX]­•"§Ç®ÉÊŸXÝ™Hæ—ÕìxºÁà˜êéË»—vþÕ}ggÛöñ´—œé75}#µN?ÈÙî³~ œÒÚhÑõùé#Ãé»9²tHýåF·„ó”‹‚hþPŸ™«½Ô5´ðtθ©]” /,Ÿ½Uçën<\§4É5߀㓽ä!àYN¨O ¨Œ¿,ÖNåˆ].d²é¼6Ýy‘ éËO­ÔìœÎ]—œ• Îq©Zùoâ—ëRÑ4XÕþ§û¡Þ½½ß'{ñßÄ0ÛÖÇ$Çõмò ØÍ%A?O ß¡yïKÂg]ZíœÞ {ÿN»8ˆçWyRòæÍ+¢+Res{²ûg¼"9|ݷ܈¦o=4=þt%£§âѿȎM€Ýe3uiò‰Uþ/j`EÄl¨»ì¾È€å—!U'Ìo°·ôM…œ| «ˆ,²¸kbÒ½#¦ö…¯? Òÿf°÷DïÔaWö}»¹;õ·Dæ÷ʼ÷ÌHçõ§V×EbÌ®.ËŸUAu ~šÞûÕ°÷.L¥ë‡ÂŠž˜n!ßj©aÑýòùX*é¼¶LžÓª<óFĈˆa8H_š–ŸåÃo–úoϧë!6¢í¼Ø—·ôTëWøÑ/®ˆVÀ^½¡µÜtHÇTHÏÌ Ô'Ý|¼=«9§9®ûpïä¾÷ì}*8aëä5/Í©‘=¢+nùÞ>zÿ“ìé~ùÊiºùùÍ™•ºÉ]7yIïÞ äCê•Í¡ÍìÎmÍ÷êwg„d™Ï¢û¥W =‡¦d§X?¬m9íÍCmä|œ_…ç.ÞžËðÖkFæ3-ßÉxM'Te%a×Y2\(Ùç|5:;‰cédgt;žßÎïÞÕÝ­7¡wiïý½¯õì;³>(|éÔp¯Ë\ûóÇzÊ£ëñÃ÷:™+ª84œÒ]Õ9IÃŽï^^ìzuç…vÿ¬»MÉ´Xå¿yY©ù‰(Å™¥‘ÏôüÌnÂq¬]鈧ï+Î@.Pcþ¼ÔLÏK­'LÌ*b@ÔQa”YD5uå, ÏàÌ%à ª UbïmbNNmê¦í¬Þ½'ºÝÞ÷»÷ÄÞï˜Ý]Ô¾.¯p2G-þ˜Øe¸Z'chõ*^$q\ªéÏê~ ÷TçÐæ¥Í©ÿ: ã%µåþSëo¥C•Ì…S¾xÍâÃ6ÏSÊ?çBì¸Yâù°>ðûôÌ@þ‹¤«5_§M•Zÿ)Ù:Gt`ÄCO[F*|Udect´(Ïm³òãÏ? Ë÷Lõ¹œV»¥ýcýþDêÛɉÞ{“²ïÖŠ5^‹± ŸìD·ñëe|`<Á˪CëgÛºë<ß¾³9:vrMÖÇ,ÄúzAÛ3ÁOóxf‚§ƒKXór_ƇÆC,tÚÉ7šS¼7ŽGãu±l#­V©Ûoˆ5csX»ÉYCˆ³“¿üHÁÛdgA^92»¼ ¯Ù+{}EumòÃ÷fÏ7ä3aiÞÈ:ÊňÀ§æÕú`ÖÁèy—©Ñ”•©¸=U²…:;vQÙÙŸ'+¾#?[ëÍnÛc¬žZz€» ©f#‘PcÀ‡”úo<¨j”ÄOÍûì·HÐ'¸ÏG]ˆ]7ÿUÃôž-pR"š•™ž§ˆ'3}Yø¡#‘.²ï¢Q²£ÿ„9¨/ðÉêj‹ f©±lîîÜ.ìòK«Ï§jæÜÈŽîÎŸÉÆ©ÖôŸ#— ùà@H.œ.:ßLËäð0ør\²¤Ö£=+í¸úWõ ra%÷_ªè†îÅÇæè_äµ—xrªsì.Û’=7™¶ûª|ªüã@4Yžg§ü^Eq¹û 6÷>ÞVÔ‚e'AN^mŸ[™•Ü!ÿw Çʈ:É*+ *E=ŸH·'îÃiÃ~N€Yuceôþ°Ë¥¼çàB2äg¢DVÇGzD€VÜ@ùö\D쌩꘠ Dy”Ïi d¶ŒÆ•WôÇÏÍÉ“D*èØ-‘[aè¶ŠfcíuìR¨†‹O ·²!{k÷ w£Û~ñϤúä­0Ý%Ë'[K7ÙþˆE¡ÿª^ÊéH_q?ÕÿŒ"ÿ#³»ú[`¹í€H/ |;#XõÑÖF¶‹r ¾W1…ã…rJöŽÎï>dÕe»÷Ê´Žô¿—§zu9Z:ø”˜UQ•¸2¿Û9³—oµ(u›%E›tÏÇXн§Ü²‚í+Ù*¸ßWâ!ëE³XTä?c§1¥&¬ì'í…©œ¢†²0ÿXO>ÑH”%[´Þ«'f·é›±ò¬sò*§«J]1Ù…O䩺Y–ˆå÷é$ 3­éÏ»'GŠfÆØx[UÆ JÛ6Ò!Z1]ýXrÎOAÿ|–݃Мêd­Ù×Ù±·¬î¤/³·ßbç%œƒ á4tëÌZ¾†.5d‰Á˜…SŒY8óR%8gh ò1žeÅh ¼,Ö€IJRwjø²?:05£WóGæ)’³ŸÓâ!¬•î|tG=“ëÁýÛ{ñŒ¬N¹A¨ söùN°.žêôâÜ<Ñ@vð{Y°$9Æ$Û_(IÍ(ÀÀÖÃ"Žb=ù™Rܪ§ýô‚ÞØ™y÷`¾.5”xU»=9û&~¦Mb ÷Àèä¥.Ue-…¼ ž/–Ëmò±lR‰YÙq«Âî`êYuúÌúá€ÔzóKÅ^9㩳OéØï<˜Š)Q3þK|¯fˆ,‰æ¡HÄ^xX«¬¢ž²¬*Æ€V¨atåE=y47º›tIFÅùT¹­‚œX:4>h¶h°Þ†¢¿%y‡)yº¹Ñ@+¦ZHtM«œRBŠX1¦ôРو@x³M#Eì¿8¾5C¯uÀ,0*ÜCÞÊŽÅ+š7KË_v‰ìÉÒ«ì)ž ß´y¢8Õ/ùù9´ IŠÐp³üŽõb ÞAÆÃj/ÎVÓ|l ÿ—¸c/U€Œ)ΰ‡x&¯¯¨ªƒkø*V±œ0ç­"Û¢Gˆ òPS*ª÷êÍRŸ利ա[½À+:p“zû‹…ÈnBº= ü0¾Í¹TêÙŒ†Î©òOÒM¸X¾£ô,cAÄNîü.=ƒÅߢYpõÏåÌ7YÖCs˖A, ·[V¢|ŽóVå†zë”ë V}cFÊ;ó´-¢%v×ú˩Р3&Ã*8ø~‹O+«ÆŸ{’ÈÄZ’q( 0ÖÁ<Vƒ–õÿX$2L·Ýj ›@^NCñyØOr SòÿÐ0þ˜ÖÀà˜¯r'kLJÞ»œ/ ©[°€~ÊšÚusPh‰¢ÙN,‰ c¾ÃÈ36v‘Å1¹Ï¡àI¸’Ïâ‹TÀvVªäs¬4Ôg¼/)¾(¨×¢~çàh63f×X[ëG/¼Ÿ„Àtø²..¶þoÎ,»Ïã=í‚øÂºÙe\•§‹®é5ïÀ¾ˆ RwšÆx$ëÍSXsÖ–Áµ^ÁÚ™3ï—^,4dv~¯"Œˆ÷œ<çaù+ UBì;Ð8i¡¸gjž'Ë#²³B4ËÓìHÑ#k ‰ÿ|ÖÀÐ*!.……×ARÖKe¥ù³‡°âô|>ok]‹$={NTèJ<>rGEQþNÉ3Ô•ÙW»€¿¢of1àƒx-ßÁ%z«¨8U ’µ½ÙG¶ÇSf ÍB}îyô¦Xzþ™ž¸ñÔy§÷<²Îø z¶”¨ÆáövÀ­ó²?%W@nÙ1v˜/(Ü +Ї± äÕ˜Xºkõ§ìæ/ÍÄrBkøL’Uç·…Ù°<¢óÙîLƒå T» ûÛo|ì%ŸÎÉñ”^4C%š_‘¿¬ /¦²¿uô,ãÿ{•UÒùŽÃ”S´Ñ è+#xzaVØc )ž;%õesÖ †çO ;˨¿*†’—•Q âãÂ`Z%øÒª”z>ùë›û|™™r#zÁ´Ð"Ô‰sõZшۚá75ýþªû†cq >'î©F]“¶ÔsxQq'¦§d¬Í)\kñ l¥þšmflŽÓcÓDÅ´Ùê0è…Õ¶—¢2Œ$þÐ×!Yãë!ÇQ‘b>%´†l??Ærˆ5ù/•[¬D!7åÿã²Öžæ”‰ñz7?ˆ© Ža` ÄKd¯Å`³"%ã‹ÿ²î0¤Ï&ÃV% MÐz˜yjÞ)l¥ì‹_l%ŒFªØÃµÍÊ÷bnúAX/væ€Êé¨ù—ª»#&€]ñM, Ë Û@e³òÉvÇœØ%8Ÿq iîИqUeMU°¬1ÜRz¼˜Év›êì¼Ö¸2 8GÿgÙÌ!¨Šó p)©Æ¤Á°NÂ:ABh,Ä á*ù •½S% / +èÄ-[¬Ÿ.[ÏÍo`-7Ñ©I†äIŽX$γú4·ÝñEØ2#Ö­FÌ#‡»4_ãù1ϼ´5÷uÈš-±¯ÖndÙ+•BRUÞ]r™$™>•ü ŒµŽ<7Ο!eë!øâ}þÜ¡O£?"à)C‘k±>NƒÞ1ÖÃ\—çyf©¿4Ý3‹ ŠŽy•ÕcÈ@É`“`ÒÆÊñ´ 3€‘p~MæóVFÁΑì¶"ø}{6&sñ*õ¢>ˆ“vnäùJ;(òóÃ3ÐUqˆ=ã}°ÁäKß¹ü 3LÉgÁAâEù2™&’á,:þÃîû©óéýy~¹0/ì–^_´¾xOXSät†œ_KFaK9:¨š”ɲðibG 1ïecн3 Vñ‹0û·æY™ý.\䯮²Ð¸LØ~á!PöÖúÌ̧ðÀôÛúÁb^ûçnJµóó{ŸPP„瓨9ùË:›±¨Ze•ž%¬' `ii†Ù°|ð뜌öÓyNaï6vý/>j 5":6°p÷ì.Å>ˆßÔ?@uøµÍ“g˜1´·%‚žžyâ-}¾øœåáé0w%)Ò…éR5ìÄñ¬ü†&|Ì?ð_Ð' ,2Jmº n¯idA\4V§ì$>•wrŽYÖßç³xì<Çö±éâèÅ*ò—^w%~àC̆üÈ“ÌÊÚÉÓ`Ø}~^É'ò*üÆwxbÁj¢‹ýãûÅ ¼:½uËkO΋¶ëâ¹|:ÍçÈZÉB|fÁf‘‰1 ü΂Ð[µèw±Hy¯½qð€r±Ž0-Í¥q¸1U°$9Åô˜þ:ýF2ËI`ÁÆY91†u[´ëìœ Cß²'…ÇVÿ¹8QL.‹Ís§­SD4MæÎØkvÉça¯p2nfgíÌf¬³±ƒ=0÷ œCví0O¡/«`_¬±'àBì|ÑQ¸Ò/ùy{ǃÀŸd ž«]տȋ҅â¡àb77óñN”ð¦Å ª~y±”âð’{„þ†çõKó=HÕ%©Å˹`.uigdàÄg’Ì ÙfÓK_5¦ðŸï_2†±ç‘1-0­ÎlRÙI¸¬Œ ®t Ÿ¬™ 5$®f ràGYV ‚ÿD3´²Äbp+&-g=àW>‡„±Öü‰ïJ€ Þ.XÌøÉ3•¾ÊfÊ«šqá~Äö¢©ÙY/|œýËVr¥†M¤D“Ë'©o„¬ymÞBÞ*ü´’¾‡È3Uüa;}-íÈ#”Wâé‚ñXØ€Ž²ÔtÂÅ 8]CxoV¹ ãYC_ó2äVG9û϶²2v œ;çÍ^Þ£ ;Ø¡Ü'<7ŸãS'fEH6 “ƒ­`ýÅýä@ÖÃÍ©°F]l‹!›ö%Î)¬TÁŒ4ž/¸­D‚$ľÓaØòdŸÀÿŸ…a!IõŒ<j0_¹aÚ+‚±2t…þóYvžG…A°ÈC;%âš‹ç“Lß&Áì³³mÖ >à9Ä처s<šì Oï§äѳTFÀwv1 ; ÍÍxŒœ¾ðM¤…$C–¬fH´Yä›ì—=’+ù qÌ`µ­/ÛlÍäÌÄKöœ´Ë‹®H I€ÍŒCfŒlA6ª%dHø_öØS¬B‰@±¼óò;˜p³T-Îïào~€ÔAü)y±Ð!!òÀÿ¨û³«ªÞ~ʽ3IH)$¤Î¤Mz!½¡·Ð{ï Ø@EÀ(vÄ‚{ÁŽþ­`CEzSQQDà{³žïÉ3“™;÷žsöÞ«¼ë]k¯MŸqðÈĬyš^‚Gdyš&ï²tÝs²°¢c‹,ª§W×GZ`53Dr=1¤¹Õ'Ù‹f±^br|šØBm$.ü }gŽÃïYÉ¿*!ƒgž±6³SÍà¼÷‰_Öfõf…‰–ÿ,‘ïª È«k‹$¬žhkÛôÒ‡HÖÌ‘=Z/Ûï@^7“ЕkA%¦QÿZúüCqMÆ„’=%ü¥ ¡Mïÿ!ƒò\*©ùH½fT`œp5ðù¢< Æ.²6-ëÏ·öçKô°2™ümƒEÖfìë³öë’ÙÞ1O¿!3â´C­pVt†­6JŽW|Y*wfä~¥Ëü”¹e0™VZHjyL>‘GãEV,4ÅÒ ñ/Lç¹éE±ü<´ùg³¬G±—>‹3O¤ÒÜêEeêUñ‰Ø y²…YÕ9©gÜ>cw¶ýôø‰ù¹ÆÊD?ó3þ=3r>o÷¼ÀªVBÌ¥†Ã®í‚ yÃÞ¼Cg+œ)D«ò´º¬<ì šf›é»è}ž¸ØF9BöCÏ ÷R=kæpI#l¾ƒ[q&jÊ ‹t°PâÑÑèŒ 𛫹·¹ž×¶Ë¸vIÔêèüœ¼C¥£,Õ@þÍÉüð<â–Íó—õ™—u¹ÂìÁ¹Ç“Cѹ¸ÝZ ún~ÅlâQ¤õ„y§R§¢ Æ5CÖ /óóòY×ÂÁâ?Å p »kœh€Š—i>‚e+l…¸>÷N±*ëo^çGÖ10B‘!=²äk š±.Ï(£Åžº‚]±!t¢ÚnBÞ·|°Þg^^aãøÍyyÕMÍ;ðÈ$ËDçÙ1Y^ÉzZ믯£êd¨z(hA…$ûJKèy±v¸Ï­2¿j¤x(¶Òwöƒ\À°æoT÷àuv¡ð¤bVÚêÙ0;øq«àÜæ’'áç<¡½ÄFÆj=3 Êþ»ECvKîkFf¤É×6™½…ù„,¸(û+‹ÌÑu«£ÐÀ‚Ä\F]v*@pÅšÚå+&(}Ðá$œ§ú8Ê-ú÷[!“3R¼'Óøž¤T~AEE6`M3âyøÑå‘ù:¿³"ØY×-86²{×)–vrFW,÷ÈÿÂ|r]´ÊêAÉЄ8dažÕ8IÞÌüÎÆÀGЄL:ýÄéSˆ"…4X|fÅàLO‡ï¡…¸¦åvCe1@ÃbQ>³Ü‘o¤1jáÊ BÆžÍüˆêffýÉ?ÆÆ3­Ž~Ã<'÷̼¿ÅR…O;Ypèžî`fV§blU®A¿­_/¶†ß¡çÜËÁ”®ôž§Ø#ÌkgÜð Ãk™t³B£¡h㯩þrxßÜ”¬fÉúª})y-Òiæ!{ú_²B²ƒâ/žTU2~ƒpÈ+]7Ó……ƒà NžºXOÆG®ü‹¨“Ž‹ü`û[H¼XަÀ‰2ôÅ÷DÖ•×1Š`œäo³Cð"í-¼í¦ytüdáá¿Â áxÈöØX øi Ÿ…\ì!aûJ&D,`EDݼ‹ê=¶X%ˆ˜GŒ<.Vef[´.F›‘X?çhÀ…béÒ‡×Åïê#(ËeµX£Rß°2öÓØø}{zÅWXjf‡í6Û컿8ˆhrdžtUÞZ|¸4ûaØŒ ®Ò‰H䊖å¤Û¢rºWô”Cä%;Ã.ãÝ`zíiÙ„rÆÿ‡?)p ¢{q¹¼›\ªù0SØŠ’³€1fäŒxÁÛd®äPqLkR±»tPöÙ Q‚‚VäYëÜP}0ý¿Íøa:»g¬ý!ÙuPöî ª`ipÝ,yUÑ÷»ËR´§šþ ìi;2ï#)®6™^ÏnʧYé±yö2þ9ç¥Ì­_zøåéïx]Î:Y×ìÝÞÐ~)óóf ^I¡Éž˜ÍžyÈH¡8:!Ëü­ŒJaÊH·]¾ž•ÿ‹ÑYšÍ7Z3Ò‹ÍŠõÄFWv°¨Â({i 3Áî‹l ƒ퉦dþTwˆvK¤î½«³§ëêA¿%[¨âLl¾oz³þ·y&û–×fo_vÅÍLO—DzWðÈì9¶Ù¿¾¼ý}z¨þ(}A&´ׯ©.ʧðl–ë®ÌUåí¬‘8ëˆ]fåØW|:ë KKRE¦p²8Âûa/~%÷9³µòÐøO\ÞŸO:h<©àÝÍ>q¨‘ìÀýŲ­!»jfÖd÷ë®ùë81:?2+yR: |2+—5¿M_—?e‡t_ö1Ÿ”Ž(ûÖW¥÷WÕl^Ÿ—3fןI/õKÒéçÕÏÒ÷vEd ºÑÌÈ“ÊiC°Ë;;Ï ÛX´þ¥õ)9È&òS²C0 üAÙ³Ì>Ò Õ*þRò2ìшy +¿‰•u'Z\ 򿃵déè Ó[vÁ­ÏÓé (âä¿vˆWÿ~5)'š ©·oÖ7Ûd?ûóÙ |@ú9\_Ïjl¦ewËÏÒäªôz0]ÿûÓA}ëìs”=³ ê"AN“×kzרÅ=l—=Aü¤9fgåq34’&]ü­•…gJv­/RÀRù L%;ãSX°)âàÜ Æ¢T)Ñ/LåË‹“§é›9‡i}‡~6åµnf¾ðõXš_T?I¿ŸÙéYpxN-ûP:aNL'˜¤wÁyéör`³KvÅ¿)»û.Ow—[r2Ö„ìø~¸•]îkêSrú×/3 Ú%ÖYK¹],ÆÓïeëÌ¿*‚Ç‹<%ÄÃJËXð†dÒÂØ³¬9iå»Ä°å´Œ#Õ¨.¤Ýð=¹æyñ¼ø 3D# P>zb‘ÕT²KËãÝÈÊìøøeXöîVÍ…ÿŒœçõ`ulvÃ]–έo¯oÎŽÎÉ™•¯Åò}1–p\v·M®É÷Õé2;;>õ¸ølýéìý^‘?eÀ”Èÿ÷c鵃-P)Ö J#ž¶x#ñ?¯R*^ðwÍõþÍ£KÆ® 2ÈÂT™#¸J·a×gæXbU°&ÃrOÑYÀ·À`å{áÅwÉueFåfT¢ÕnÓî“;g¤¦Ç­éÞñ|uQz~ì”^÷¤³Ù©éñÍj«æÈv¿Œ÷ÜôÄX—}®ç‡p—î‡;Õl^ÖÜ‘ù…âñ?»äÚ—e䯬 ÃG¨0–c,jÙ3„ WÑ~Á,P8fºÎ»dšø˼¿ªJ_ÆŸÇc–L«&„±]œÏa!X?‘ïjì°ÿ.‘~ò%ºÌvIv|ÿ¶®ãÍzë¿×uû`|ßqéa°slßÙч1Ñòáérmüá[ë'›sÒïëÊtDyOú[,È.ïÉéû±uvЮn'Ö—Gÿ¡{y&Ƭ £²}î¤F¤xgñp°~ɦ–è—ÆCÞ¬[éeÃMÆJ‡Õ¿‰Gq€âh–˾ñò=é³yAeb>‚½(•ÖëÓHd'Š¥&NÍJž“.-cÝ>ÖŒÏYnŸŽ¤÷§Ñûržß.鎳,ò¾.{ä?Y½·nÚ«sºÁùû¥éˆ¶$}ŸFåûûªŸ8I÷ä ãÅY!ˆuN¾vLçõþÜ»ÔtÃÆÖDžJ‚†Øh¬,¬H#ؼ¾|‰°<¿Èˆ…”ÿbõD¸âˆR] â-”ØÄ³t8ì1Û)*Sgµ*¹6¿±.üÑEéîqEú`-L'óþô::{—û²}r¬àÓ¿êÚ¬û;2ÞUÙÙ¼vý¯eœž.i«Óéÿ-éz¶ ,½bþPmÙ¬m?‘ÂuÐøHî3;:`mfeOÙÂ<Ǽül÷-ô+òƒ Ö»!Ë?#kÂúcŽaUY‡’ÃC@‰Ößë¥fÌw5D®5°‰p=«²ø¢Ò"yz‡_šýës3Wægbö;M?'¼îŸ[þô8ïfüûÅê_ëQ¤â„tò›~®Óãﮌ¤·éo3+Öï-±ãÒÿªŽÝ)ٿݦyº~"3ph|ÅœŒyqF#˱)6ÊNHºÌbû!š’Ù€ÔÙ§É¿˜u%»Åc‡R¹"+Så7~¦ìÁ ÌË=؉’c-]¢EÚ|ÏȲƒ<ƾéW°&ëϪÈàu3Â·Çæÿ§Òõùñ÷ËX¶Éø×õ]˜™92s²YºB<]ÝT¿¡ùFºlO×Ë¿>R¯û)‘þÓb1þU}»9.çû\¹yyúO¬·Älm™jIþLj-þ¥Áì²l#Wkýôe´CcÑp½<.„}4jë/‚´câ·[ÓX`øRïõFbF¯Ð):"·-Ÿ¦jB¤OíDý‰<é±î9¿+]~î Þ=9#_žXGeý÷M¬Ícý2Öýê[«›·ä¤¤ÿūΧ¾Áï§ËSKqIìe“IÛ6/Ϝ쑞g×5Ñá¾A\@î±dlÁ¹ì”5Åfó‚¤?ÀˆÚd þߎô/ˆ4ÌÏ»>›5?9óâ ÐÃb=ÿ–Î ÷åµþ`æWE>†Æ[Ê1ˆo:é$vVdú Ü[9 £XÕ¨ K"ícöð€ôC¾ˆ­#'¸–'Ç×m5eùÖ4/¤Wf›YY”“m¾6`E}sUë<l|q:>í‘ϯÌÖÅš\‰xKléÞÍÜö•ñ9º_M ߢ‡ÅŒ¬žµÆÕð°*V„íÂyél7'sÄ‹‰†°2Xürþ»¨‡ÝÄsˆ÷J”_˜ÖRÓ¤î†÷sNzO¼€šµùù¶ãÜΈö‰êütwÛ<ϺKlÞüAÝŸ¯þú žÑ±l7Æ Έ¨ß’>HUÎMYSÞ–~v£C£:dJÏ»õñ€GD~¶Í©‚çEë ~^©øv:`N­·Ë=eŒÎ 7„W–?ÖdÄR*v‰Â,ûh}J÷ÂvNäyZ,–ž…[Ú¬•Y÷ÃÝÛ¶±^ÑXßnÏ{F:¶­?D4+ñÖ×·7›Sâ5ÎBÜ™z²ªã/^qŸUhæÆ^NŒ¬NOÀ×äõWÕg&Ûß=ý÷ñï2l³óL˜²Œ ßÓ`´ý^F,o!ŽQÁ/Ùûå>¸ a~ų֘0–žþ‹?ä–܇n1(Uö¼­¯K—óQÍÃÍ>é_xPì½sOWE‚÷U;93Ó­J,8¾Þ¼yw3#²Ñ“‘Ö9)jQóÁt€~¼Ý³}U::( g|GÎŽÔLˆ¬\˜kÝ»0#ý/Êuþ]]œ¹€òfG_‘Y¨@#Ý¢oÑ¯ÕæY5ü9;(¿ÍûaHŒË_ú²o>C/ \5¢t_žxÑU$¨‘éf>f䵡‰úD=²ÛcÒÓoeº[äÌ—3›'²ö#¢å;Fwwˆ'», Ïãñÿ\m¯>/Vü°úî Ã‘é¶4’žßõOsZÎØù åÄÄ?†5Ø+2¿,Wþä?•õŸŸpTøó}›¡õ±:º.ª&µ>[gtØ ²Ž—#ÃÖ¹ø³Ò½A&T‡7Q2f“ÅgÿÈy‚ÿÈo¡ÊH4/ŽðNµ0 RüçØ`pº§äÛƒQŸ«ÎL,sKXá±ùgÆZ9£Ì¹¸_Î)»Çîý2üÿ± ïM7Ó'3¢«ëü Ú5ÌoÎvo.æ/Ï_¶‰´lêŰ¯‰.ì˜|!Ñ×ò|úKÿÉé|aºmL—¤uy&9{ÐNñ~8,»ðŒŠÆ«ëÍÁæÉ¸ÒHþÃýáFÉtOcøä”Ôc?äuKU,m*HiB¯Ãóöõ‡Õ§òÌÿ«Î‰6?L¢—ó£ñ«³ê§Æ¼­¹¯s[VrDìû®±ïâÏSƒt>ž™zwµ]ý‹xßdî~•³¦¥÷ñß«Ù顸|lÞU™‰XÌÓˆŒßÌ Ä.Þ—žp×¶ïm0Û¥ jß …ËâóKn@UôKDˆP<i—Ÿ=Tâ=x N2"HG~E¾2?ªÀ¤“)¯^6÷^±2ä“« ƒìÇfÝÎHë'ÒùôËßòµ(öëÐÄñ?lÎÎéï š=£ó#ƒž­®v'üIúâ¸:%³òtäýÀpAc3+¿Ïü|*Ï«ß[Òä,Ée±}Ñ›]â‡Å¦¼5=“OHwÙßEæ¦OÒö‘ž/´™·VÖ—&O͸¬:߆‘ç²ÒÐÁˆfÀò²•° íÁ‡ËžÀDòkê—ebyÒÍs†Ñîûìtþ½#Z¹Stõ?ñ|—ųŸõMwÍjÿ3=Þ7&’Ù"rºYÆ?&ûïÕˆæu=?èÙ¹µ½/zGbâ-‚…§¦;èsÕ×sâ–ÓcïKdz1ÁÌ·7oœžô…áAÃççk³Œýê°£»ð¾|¿/1×›Wg}@²ž²ðá<œ®ò@ü¢jxxžmãÑ­%ƃF«tÒÿ,æÙÅzæP•ñ²|)yÁx‘%|ÁŒ¬þv™…ä<šûƒË¶Lo¾ÿdl½ü3k91cœ™Y82¶üÃõiÝç»kÚ×vj§Ç*ÜÛ?)^Vs@4æÚHÁ!9ê‰džËù8;匧o‡5›Ùóïî¿ãKŽ›vRlÀ†ÈÖÛ3òïæô÷-š+sÖÍï6{ÛO `¯/·MÙÃ’+5ìFȃ‹ s`¯B gÞ­Z’áó„°o™¿²wÃÍ^ƒþX¿í£{£ÓÃò®tí~cóÑö‚Xêõ‰pEø½Ar¬ðÀ œVŸÜyª»cût;³û®æ™êé{ú©àÿ×Ö_ÏŒ]0,Zò‹ê·aM:õsío;ïjf·ßm¿×ù}¢Å¹ÚâèÈÂDTcÓ|¯vQçíÓ ²ÛÔNËJ,Œ%ÚõÑ­D>Vþ†Ý·ÇH´Ù™UêÌ íÀ‹ÃÿØ}IàbÑŽ|B©Ë ˜ÞCå)Ë'Éý6å5^÷‘Άî1í?s*ÅÄŒ¸MÌ;&¾ 9Ä#«qGuFûÅî>íî9=w¾ß¿U¼ÂWªoåßµéüù‡êwÉ|?íß1£<¢=¯3­sNûúæ'í¤ðÿãc1g^· ~>§^,k_Þþ»y >7ÈøøæöèàúŒüˆAË^|§/QVXMœÚ ±¯8™Ã4…-¡ÿNFPï„+ÿ²"%µó–¯W³Ø_è±ÍúoÊwõ/c:Wö,o—†Ïû[ü÷Îñ~k³b‹b­­êhF_¬Þ9 vÿö í3Ý¿´_²›)y"2p|"èoælÀ·W¿Š<7ÕßkƤËñIA>[eäË£OÏT#2¿{&º>#?!Ñe[7é¿MØÇ%Áb3:Hý¥øÍoø (Û_ö ÐêaƒµŠ°6Üù·¥²Ží`x¾žÈÖ«xÙ2œþ[Flb²‘ëóîHÞSÍ;ºû5O‡ýYöÁœLp{0Ð7ƒë¾Y Oä?!hõwÕ9¯itNG¿¯î»œ™®ØÛ&ÓûêÃ9üÏñÿCãßöŒøb, ÁKÓ ý±Ø‘ÿK.N I«žI¤<1¿mŠU—»ý¥zMNOpúÓ¢D¢¯ÍóX55|¶¸Çª«ü´æÐ€Ù¡ÛeïŠ*þ?¬ ÿü¹l‰Ú)ø Æ~•lˆ™PICŸ&fôËòŸûîæ­ç|$u Ëóï=ÍÍÍÔfIsqPûÒhö–Y§?UwWWæ«]Ãõ¼½]ÖNj¿”wެßÙgXÒ¿ÆÝ]?±Í„äÄF6ÿ¨Ž ú¿5'‰ƒÞ–}íxl»D7äÀþWœnÁ9r¨j?ʾ^•8"’$#Zv¬³{ÇÌ˼]•µ¸5£zc}\ûªîäέ‰ÐG¶“»íïéýeçZT»y|ýféþÛð?EÞ'$®ý`}uzú>¨ð^§Ææ]‡EúMbçç"ÿ—ŸžÌ¹`³#÷ŽØ<6e«ÌЖñÏç÷ç«EÁ鳜ñm̳šU36n©T?£¤ìˆ·ƒ†Mà'é2ŒÏ.¨ÿ›™¿Ø¥ ªÑÅ“‘ z#Óªv¶M´ë¯êp6Þ«çž‘ ‡£õ°UMo÷ÂÎIÑÔŸäd¾wf·GÆ&Î ²[¬×øÄ­f4§§ç½YÅÝ‘¾¿™Ûü²^Û¹?«8¶y1ðû÷Méü\äþ{y÷?Â…­â}8yBìÃÖ±'K33ƒ˜ž‰-¸;r·²îOÝÉ–©‘X=8–ß<@»vË5ù_ìï5u ö<òÿù :0þ…‘8&ÈK–ŒÇЕlü r|¬æÎùÿ¦êȬB_¤üOÍݳÂã^ßUÙ¾Ø9¤ùNF´(Öz¿¬ÙðÌÀ@<ÙÓÕ-Õ¿#Õóë99Ïô¸¶§sø™ÝO5/Ô?®–¤ú¸ú[ÕªÛ2ˈ_Œ/=5qð9ùÍñŽçÆÌG}*?ó®sÓ_ý‚zJ¸çQyš}³jx Š<…L6ƯÔÉÊ’•î¤b\QŽÌú[k5ØÐ¾ìMPÓ)ÙÃfç§+•@¬Óßæ…õÙ58n³æÎê¨pÕW7û·æ¬ª­›'›½:÷6deÎ *£ÓÍŠ=Yx"ë:4¶, V^;<üçèΊÞÝUÍaA¸ý±”ã£å¿Œ”ü'2°}|Äš¬þüô<ß3²µ1`Ïü›˜U'×8µÙ®Y“ówFÇ#Ÿ'-¸M]f‹Ìc4ðCð¼¼¥}=êÀä|Õ͉äÇU€AöÐLU±¡]‰-‘]µ3u\ê‘Ææ„êÝ3þçrÑíõ¿š›:ûvÞöÿ æ'K:9µ=§•¾,' d¾däEñûì\‰÷žûׯ³sjO‹9¥Ý®3¶ûûÎôö‡Íóͧ:WµÿÈqßCÛ[SÝpµC°àቑßÝMy.^¬?Ñî¸úÕ{êÓ:ßÏš;ÿ}yÆ&©Z}‘_bïDÛ4Ýí‡ò[oüþiõ+š÷Ç<žÈ¹·Ùо«^’µÿR*ïDªÅ.PŸ h™«®Hµ†Ê)8ÀxÄ3ªœä? {1–·¬°Œ¿¸ÿ „d'«˜~bŸá©ÌÜ<ù¿owNîÞÝ~ =2§Ó½¢ýGsm»¤{H§?gx\š .äÒŸ§ž=xs0Ë´úDHÿŽ–×ßVïmÁŽWGF^Œ¾ß´óBæft}|°ÐÝñ2†¿J ÅMÍí†DC²Ê_ËYÓoÍ•¦F[^Wÿ"ë¶,røÕ<¥j',¾Q³rAfCÝ›Š6EP å8 PžˆV@‰tœ¼ˆ¦åˆHíÀôÄ2ÂEö Î ^’õZ9˜ÒÙ¦ç§ñú=éö}n{Pgçî‹Ýݺ¯jª08CƒˆGdåîOü~AX‚åÑñ±‘ó)oÖó‰ú¤Îû3Ë#؈ÑùyNÆJÝÍìÜRõ ÎÞy‘‡„ù—KøG|äïê¯6gE_ÖG'nÉ“ÌÎç~šÕ_0(õü>lë ÞÁ„ñ…$Y„ÈüÈgà¿ÔE™%ž±Ô„ˆ¥yy¬o ’ ‚ÿÌÜìÌÁÊ|fUÆ¿{{q÷k‰ØÏËy—7tÓÝ¿;³ûl{|û½ ”ÂUI½/§bL«?ØK>7¶nf,ÁÎó?ê¡ÝùAºçFV¶Ë߯,¯×E^¾Z]Oùßj|¬ÀVõ’T‰,m‡6TNDûq56'†Ì cv\$@÷¦q‘ 9Êb¿ !> ooÆ®BûŲ‹òÔPbÉ¿ø/ìS¬‡ï$…ç”!•û†ƒŠUÀú§ÃlÎN‰‚·l†äDÖ+:ÇuÏíïùeç‘ÎéíO²Ò·Õ¶#<ÿãï^É>>1ü9á~wÍ8·Šûú ¥hOmn‰œ‰Ÿÿ¶,kßWߘìæ5Á©&'ªØ/LâÒfrg—ÎEÍ7‚ŠݽùDæïéš’¿9ù`¹m+YòXl»~ ãÃõa1ìVÁMÚU°Šü¿þN¸¬¸xˆ„”Þ.rIf¦°ÃxR46+?=_ #qoÍùï—v¾ÙYÒÝØ}kûÖæÍ!ÉòÜQÛ¾-'Á¿!: _fãÁ3‡'¦;0x(^-£œ—ŸvnÞq¾?ìAlü+Ã…6àÆ ‹÷g~]-Ê_¾IÿSó‘Î9 ;¯hŽ ð³j×ÔN OüÖT…à"ì8.«+ç[ç‰åªeép»¥Ú>ìØ×¬ÌŠ'o›wáÅ‚8o+­¬x{.J5´L:nÑûÏK Ò†poÓª·ÅûÏêÜÝÙÔùn,ÔÝáGe·«oí,nï¦Î‰¼>œøhówâýg&úT³ |ßÖ9ùæØæKñ—'î=$RsP8ï»Ò5þžœ‹ò¹Ê)°ë£ç»†š×ÑY„ù«öÇÍÆpHW%³öTlëôø?l¥Õæ­­4KÏþ[7,vaòEŔ١ñüŸO¼ƒ)ƒÄ 4ß»ççjº¬°œvX,Èë7&ƒ¿0Àœœüö§êOw#õÍwSýsClҨ䴇u.¦ýh$zŸDñ7Wï þ}8q`o¤¡Î8ÿXoÝéËÙçŸÊ:.îœÖ}¡ùtÐâœÈËÂü!³õD 礸Sb/¾«qqX”_wöë\×¼22596aEýH“êšÄÓ‚Çô³Òðš<8›¯*V¤ÖVµ0yx|‘ýO졚)+ÎnÈ©¢A3rU¶C¼=÷Æ nV},–yiö4¬®~ ýRwÙ»:ëÛÏÕ«’ZŸÕœÕ®l>Ķc|ýÃõü5¶ìÞŒè«ñt·Ww4¿ê5tRÏs¢ÏªÞ›†Úý^ìÞ aBþ ÿdØÀœœÏlH\¼8‘'ë_µ·v&´;vÜ.Œœ útõ–vS½o¬ëøpbxg½â¾ø­Ró$Žwà4\ÝÕE@½<ú'û}J5Ìkwª V¼¨àCÍXÙ502òÿH0àeùÛû0؇zïÝй·>»ù}žlÿØìóë;7wœí»]ýHFr[|ôŒX웳f›Ø¿/Ôßèùuï!ó:£º[ ]4ä“]çü,ˆûaf §þ^˜±[Ãxd¯Dðå%õ·›cÚŸ6¿©¯ïŒì>—k-JøÉÔU õúX¹ƒã¶#Š-vœÔ²ƒ4o+skO–/’‚å¶§Pf˜?œ‘9£ß¥‚ ä!á&וO„“Ä„»û™(pI®slìÓ/ÛÇ»·G/w‹__ ŸÑÑG²V£"Ûÿ—uým"Ý¢vßÖ»û;—wŸ²jÈqÝÓªwD¢ÿ‰z°z1ÿªØù1aIÎ)êß gôLØä%õ—›ß¶æÓMòªk›¯Dî÷þï–ÿUtXIžZW)+.P¹mFØx6“/ËaW€ü¯xÑlÌ” 12/ÂÀñ:‡¤Ãš,èêX…bɼÿ¤Ú»þz»CgNðN7O¸GÐÊóÉ þ¨³e{|ââ÷ÆâÏL¼ò¯<óá4Æͪ/¬þÜÑû@oowfçsCþÓ{n÷ެêÞÁÈ?­~ægT´¾Ûwyìâ/›ç“ Ù-? ?ݱ}2>æÅê'Í뚃²–…ýÓÏz~žgŶ‰U`@¥bUÎ{kïŸ.hº<ˆ‹ì.]žD~%z°W´“Œï³Û zæùÕÊÙÝ9%^gÇHžÞWÕwÏî\ÆßÕnh:Yý s†Ó¼dÎhþ8h'ñ>¶sdaAžÏÖ#zÏÌIÑË;Ûçt¨Í†|±çUy_OfpNr`½ÁŒC£9›‡ =½Ù¹Ý§ç‘¶r\œ°Eê¬~ß¼X·1Í1ÉÂì6nj¢ùbçåö+òüpìú_â/«÷ï\ßÛ²¼;:íÃÉœ~¦ž×þ½m›¹™§‡ÂÞ øL¥fìœfq÷¶æ¯É²]$1¢ùKçöÎç;?O>mÛzç<ÕÆ<ÃŽy–%‘i+:=r[2P?(çÃv•þ`¢#ÕSr2#ªGazÕAð±ù°&ø.9S],øE»¾  Hó¸xœ3ûïÈiNs›oõ<Ü}KÏ=ÍC©g_›^r¸?7PßòùذËc¯Sí+8,'ºíÒ]Ü{@ï¦Îc1Ö%¦ß!YÞwdÇÀ©íëÚ+"ãýÑ€!‘ÿíc;ç6w¶/k ’œÞœRÞ®éÛ½¡ó©ÎÂî›ku-¢ÿ;Ä dÜ"YÈ•#Û¬¾šEq ÙÇü©ãQ3ß…íà>oÝê`ª£ž»Dƒ¬ŸÊvš…&²YlÎ@,À¼0A«ÃfœØýD÷ÊžÏv>\% MêùêÔAßþ™fvNðѬÔ€ŸV—6Ë{®ë½¿g—öàXÊ9ñ‰wWìVxQ³_wY÷”æ€ØÊç2SÛÇ“þ¦>¬¹ §#þ¯þH3!9„ÇšŸ7»´O&—öšF/”Õá=–æÙæ™Dé˜ÙzÑ+쮦“iyñ¼˜VG±Êÿ^±Â%N˜‘ùaçÍ‹ho¢úO]]•ü…Þü«òúšø@g–ý¦óxÏ9ékFç£Í©â¹³^ÖÓ\Ñ~«ýSj|&ä´îEAl£êïT¯íÔC¦ôÌh'Ä’ ‰µ¿2:~lF99‘щÉëÏëÑÓÓˆ¶ŽlÌç·¬þJsxûXæõ‚DƳ"3óƒÿŽm¿ÛLÊ ÌŽ&b>6ä©°´ê!y*Œþ×¶ú¢ø%ùwCöxr:Ù…T»b¼ùIÂo–€<ɈcÔÜaQ^ß33pt¾¦}Mï¡=ÛõÞÕ3¬çî0aWt&wëîyÍáñÙ§ÔÛæÜ×½ã{bþÔþ²{r³y"º?V›Â›KÄÃ9×óá¬õ^Á:74ßï^› È”ÌÖ~™…÷ÇV¾«™ÕîÚû8&Lè.õ•Õ¡ÍÈä~ÎLîò°<“ì-O-:£2Õ*×ÄÃ%úÅT5øNšIŠñ[[ù1uzü¹šØY¥¿¼!‘ 𾓖³›ù<7¹‡;ë»z¾Òót÷;Ÿv~”PŸkokÿ¯=18çµÉØíÕ¼­^ï5'<ØmÙÑñ`r=‰õÆDëÏ«OËIÀ' 8-ØaÇ䀶†œ—Ñn¿ñ|u^„ÛƒþV4·7_L½ø˜0Ć>›èwVêNgÖÀ±|vAØ5ª¾ß3–Œµ] ÅþL úS%ŒxÎ3þ9ùÙgÈå<ˆÖ“"q$eFETö êˆÕÔíh›xÃÝå=¯OÖë¢Th- þÝ# ?lΘ° ·×Ç„ýÞ"1̉Y‡Öw\‘JáSb%–Õíìž7_ÏL¼1çω'÷NÄ×—w†hCøÞSSí±O3¼ó©fj°ä°p@ 3‹+óŒ ¢ÿdÝÊŽ>XEå‚ÊV[¼ŸzÞÞ¼Ÿ¿LϘå!#çßé%)LÍûíðÓÿ‹M(ûèõ(\(û§ög˜šÇFÿN%æºöÉη‚\7 Ë=-žjUVê¹ð7#ƒá6e$Ë#Ës2²‘ƒÉamÞ^ÿ>9‡3/—µÇvþ›º¿ÓRóò|ý²öªÇæDn†%žžI97ŒÇ°à¾©ÿ«bW-59ÞoQžjaFÆöaªè§<.|_¸™»1:Æ0#ï²úÝ<¿øO-]‡u$?*™c3§@lhç#ÀÇÀAºfLHÞqmpÀ¡ÕÄfS÷žØ·gé Ϻ÷&ë¹]ÖðÅü´.ÜÏøÌÆ¶±q' Ÿš žÆò}!>òóõßÛšÅñ—×¥jú[±nãcEvžª–eÖÆGnFÆn¼2aCÆÿ½jlý¹ê+í-ÍÚøÞ¹‘þiýŒH'G¯Î“ÇÃ…bq&Æ>Ël©‚T!H†±Ü*ð=vð¥Ö*P/`;í5¤1â|”ÉЗé‘üÃbOúZV³Ûß×nÙ~6¸¼jNŒ6wÃÔÌŠOŽlb¼Áï“ÿþw·Œ|Cfd³êÍA>y>þœÔ‹ãH±¹€ÔÈOÆÿ[Kãç1b¼«§þÉšöe¤ê°ý*Çœ/ z„ ñŒ¼+Ý'ri¥fV^;,ò¯ŸÁªÎ†ü£ç™žw¯i6Ås$~]Î@ÆUÌÉo»Í}*:u0²šxÜåíÉâü«ûøuF5ÿ—*ÚÏæ}3³¾#2{ã2_ÏTkŠM/ò÷ª3AÎÈëuª >y¼4òߟÿeuËÎOùÕ;jXEA8Ý‘‘oÖP,ç‡ÛÁåÑ„ÿ‘tsÂÇY]ì‡è€y!CѰ^>ðËÂV¸opjþíÞâ=݃{ë|1ÚüŸ¬ÓÆØø—§bLæb›X÷‚óIþÿõÁÇ?J/é‘O†×WÏØÎÒŒùsÁ‹g'›¶&Vc\$e«üÿxµ.ŒÚÞùù ÂɱGG>Ö¤ÊÄž»Wf4ÆFwá[v ß%Ôé¯Ëò—ކœcôfåu«h 𛯷)\À¶ë€FÛy¿"Y^'QNÀjéÌÉбbVòOŸª®i6öllöLœsSufðìwS ò²hòüؽ³Á|«’\æ.ùù ±íÝhü–íùÝô>ѾXoÑ>Üß¹¶=%óµG¬þ›c'¶ŠåS?“ª‘í¢ûÃãEžŠ?™Ý,OÑ”èþº<ÕôÁ‘ˆhèq“õµŠRäú¬?>_w8^þ׃£ðoé3¦ÿ—I~LÜH›ØBÙÐâ[Š=Qi¯#†€WtÎ{Q"¢cëG;“RÏxY"ß7ÕoË®¦k"½W'e5ߘS®Ÿª«æÃ±“š‘íUûÚ©íeÝ3ÂlÖžYßÑýzÏáÝmº»w>Ý>!57Djæ-Ü™±[ni²)§$?>³Ý®ûP"WäÕ,ˆð±:Ð{q ƒÀàñtp‘ïyÝ«jBº±ø_~C5ˆ~Üt@$mKM¼*™"ïì[AÃÊž‘þü,3‰o-8³½§==UsšÚkÚþæ Èjä~t}Iö=Ü\ÐÜ•:¡¹íEÝã‡nvíÐ;GÞ1ò¢íȇF¼8ü·Cfô\ܽ¿û§ðæÇÄö7 ¢=™¹ë2ò3" WäÕ/W_jiVÄÞì‹¥zõ‰zð•ð›ÚNÕ†t:Áx:wêÓ… €ôxø²ÿAM‡+‰~ícT€‹t`@hYŸÂéùÆŽaõ-{4n0¹8X¬§~mûñÎ =?èÕ]ÛYо=ÞlËÔ«ý¼N“Ô<Ý÷îv³ÎÝ‹zöòºÞF>=üñá/ŽzqÔUÃÏéùK÷“?ö<ÑsBó±zÿæû©z4WÜ*ÖrBâÊ=bOh¾ÑÜÜ”ùÞ-÷ÆmÒZ¦§”û-8ž³ÜzÑ•ÝÀ¾uåDÊÞ¡ëY‰ÿÍ6ÀŒþ¸äÒUÉØñnW)n™¤àËÕ ó…"#É.˜=‰VÝY]]Oî>=dhÏWºï ®ë v{cz¬è~¬Ù¢}e»¦=¯}gNµ¿§þSª#.KåÇõ˜Î+;‹ãÿÖÖïi~Øž7äÝŸ7çu†&›<)3ð\|ÿ÷«¥Á†×Ö_ïÚ¹,™ç¥á_U&‹ãá\ÞÓ]"v6ñ%ÛÜ—À!OéyÅGª^qyjøM0Ì ûGRØ  'Lø >4ê¹¹ c•~¢ý‰§Ä ü9y«aÝŸöœÕ=. ÝÉSïP¤óÛî°vXrÛ5;ÖŸNÏc‰ÿ~žªÁV»×¿kOoO®?ôü¦p©W·Ïõnݽ¶ûH»{pS%úcuGøà%‘£Ë»mNŠ ΋¤ÎÉæJÔÒ—g¡½:XÐN¹Þ²ÿ‘÷2'úH©}­óĺõáD9vŠËt–þ[OA=NµÕuÉ l½´£ÌÑ,]çí%]ÌÉ¿Y¹ãäDCÇF^ýP7w¿Ðù\;®N{¯æÑžït§uº¿&«sjóåÕ/ªaAÄß‹o;ªþCsj³_r¤žîìT<¿·sUÏg»ûtwk7¶_ 6&þòáN÷¯ongÖ¯HÍ?[¬GTé•U¤}Nf¿ á ,ãóˆü4_çCBžßž9?QŽXþÒ]LFÌN2•Ã<½èˆWá[ùD܉ŠbÈZ„¤wå¤H€=w'%2ùPçšÎƒá~ŸJc s_ï»»—uŽN—ŸaãâÈï;Â^Z]ŸÙ ûÊ èyÑ ý’ËIÖ0ò3¯{@Ï;Úß7ÓÛ{Â|-¨÷çñ ç6lï¾y"’¼"O#;ƒÝ`Ø%ÌŽˆÝø.ñ-\×ÉÌ@ÀÐMÇ’ùDÒ ù žC”T8><™`’Ü«ûàCÕÓ™S–ÖÌŠàä©ùÙ.P§O, '¼$? k?Úýkç³Í?Óý銞ñCžíù|ss¬ÄÞ™ÓµÙ=rLF¼G¢§½ÃO ¦9#QŒžAëM>^]Ü<Ð.è¹²ûÎD‡[5£ƒöwHÖÿá`ª½Í”3Ãtº#í¥&B…It0RMª=îæBŒÌkÓ Zkvt_eÿÔwêÈH¯§åoæ† Ùç(F‚è»iÖôÝÀ†é¿BBÌ ž©ôñS<:Õ1gEîìþ°w}÷þæ·Ýçz¾3äÞž³Âì”Ñ;)p³¬áaÎß]9%¸îÎê5áÓvÍ'§fGÉõá4m~ѽ³÷¨ö«Í'ÛG‚ V¾¥^šgqÒæœ<Õ”Á1á±ô…7JHØî4ÉNO‹\;Cl nIU ûe¤tX…‡úR1q©±–üY¦‘y1Y2ÈWL¥K‚Þ†Ùƒ²H½QGeŸù[Ãæ^н­ûX÷ = {×ô.o.Ê^%ÙÔyƒw±±/ìáâ¼6%Öca®Yºè™™Y+:±ûdïšž‘Ý’ó}{ÛÓÞX¿+ï€t¬äG§y~‘=\Wtl°‚ìk8: ¡ì 7ð¯îùðl‰å¾J,Ó‹/)_ðhø~ÆÕRÊŠë–Ãö„MÆ¥™‰þÜIvÄ®I¶ûØúík»¿ïž×=½ùÕ O_8xѹ,»=¼ºX-€®É­~Wë#ÇUÿªèþ¢gIÏÊî³ÛIé…$k5?w²ŸîñÙ$´7«×—¿Á,ºb«¥§*×úgÇî'ç¦ðÙý@ˆVÿaUYÿ’)–ß`3åÄeÌ茒µ E8PûrM½¥XCO$fž™ŸN"ÆØ+VþþäÆ>ûý­T'nŸq¹~A6Î^º]ó޹рƒòy-Ò§‰ÝΫ¾YïÐYÓ}¢óãve}A䆖^ö)ÐI]\H=ˆÏ’ÓÃÊVº—úþZôسÓ}|Bü«”R?nýcïH4ìSjéÔËñ¤j&ÔÆñ M^IcÕì+Ÿ—§ï‹ œf`Sj>” ÑÞ±‹¨ü‚U!Ml;â<àþüO’uapZ«jäÙaw?ZÍÏÎÿKRå>?>ƒ·¡‘âS²&>sOc-û– Ô‚ Õ6Šƒx¿8|†5…sȬˆþá1uW5 ‘ù7G¸$8ʼÛJg`=vCþ@…++×Ânßé_o®e÷äΙ…Câ Ž|ïž¿ÒAQµý…üHÕï¬Q©Éq­YùÒµ`vôbCõñÄ9»æŸŠôE¹Fñ|v¶–ØÛ+tÔsYoü¼Ø³ã¬…¨ˆÖúnÓÝ‹-(ûéj±—X.Q{¢fÐZ³æ¼äÊž`›k陉M‡ð„ØD×ê´¯ŒÅ_š'Ú"–If±Øjz+:‡8¶Œ ¨Go|¬ Œájc'fæNÉ5T*í›ßHiéPˆçc“¬¿n®>Í»clôƒ¢aæ·cuÔõñ¼)bkàæžÜ]ü‚C *ÿEI"+‡I2¯b–NäZÆ–•(•+ž§}4‚…V‡Mj½&1³¼t&†µ7ÍXÌv•Ÿ {¥§v‡®’‰â%ýlæÔÿ›W=}ìôçUÕ¹è³I3J6À§ìãm|Ñob6Åóxí·Ѓ{é ažÆÆÆ‘H?a¢èð¨h)]š’õí îŸw;GŒ«ª8ƒ"å,Uj›ˆ“!U¸ŒëªÉÁoYCxÐÓÎ'ñ²÷ø 6ó뻽vû«ÂuØ#2àe J… –LØÕ/$…eÕ‡ˆ>È‘Bn6¨åºñâèìeü[Kfú2ZŒJ9še€ëÜÇyç¼³ú8QÕ&kz®g.­{9ƒ€”’Ñ«Ów–múà<˜eÌYPY´®ðópxñƒò®@oq\VÂXAè/°".fáÇ­±I¾Ðý ø°Ì É.Í=Äê«ÄÓç—¸(c4«vÃ]˜ywðéôÙ{žqX;gçªêt1cyøJk‚É3ÿÖƒ‚ÞðÛì+ ÝÁ‚4ªá-HS©èQÿJz¡ñ!¯ O˜<ª§WOF/ù«’Q4W:c”>Þ k±8bSÌžBq–þ¥tÈNõþ¼G¿Ñ™òÊë˜iºÏ“óêlåYX:ONÂÔcè*Ö²:b]^­.U/e§nK^O[ÖŽ¯1•k¬¿Ÿ¡GÒâ]püïj:°¼<©%Vž,‹Ïî¼÷”\…–²8žßóŠ0­$&Égpæ¬Q×è—“UtšW­ÎªÄÅy|oN‚\‹]/>¿Ì;›s‚gð”…ߟÑ2^ʧ 7íð4ÍŒñZ0‹¹äUÓSˆåÔ?×y…ß&·ž†MÕ)׊³2¤Eä¯_tžÕĨ™sÒf‡(¿ÌñŸfKJ.<µÝ¢®á|cA æ¦tSb¹Šw.h¥Ô^l™h¢<Áì\§Tj°îhöØ)«Êö`üÍWÁ®tƒV´à;ïBF{òTX ˆŒÿ×û¡[&ÿ@ x8^´"ÿíéêÈ!rGó€oã]ø.Z‡p}–ƒµž•ÿùe /çÑ\3_²’ì-â}ÙÚ‚c=½Ûâ‰xAzdÞ<½E®Íª˲û „ÎâÒ2ªÔgváײÿÿ"Ž…‚ä¿!v™Ï2V{|D…¥K€¸O¥™ä׋X}~ˆVБ?|£ÿ5© Í¼’xrJÆ0#ŸäÏø sïéôÓgË!èÀ==o ;ˆ/ŒÈŒ“¬î¥ø=˜SW>Ã<ñ@ú8MÉ•`|^ÙŒ;¯tÀ¯+Ô‹ñàSõßZñ¿œˆÉ½HMÖ`kl¹ÄƒˆØR%»X‰êQ÷*:Í¿² *ÑæštA|FýæIøOÏŠ U8&ùsÀî° ü&2^ÒùÞ[?Lžvwúºÿ=³/šÇkù»=_ü ; ›mïäÿÉv‘J:ˆS4 ’ÅÒ÷ ƒh>ªðM®Uv›ñ™¢é½ƒ¿AE<ˆHRå©ßÌÖ­¡t—0"w….šÜ·äX19¬&kÊ2°$G”.†k L¼<9ôÄ4ÄhYʾÜÍœE¶ÆÏ%tr ÝPèâø</oeé0îS6 Š6wý‰* F؆!²»ô¡à2£s}×ÂÊ›a^_ÌúRF[cÅaœK©©Â@ê|—¨@¼ÆóŠd_ŠÙÉ<û.¶ese,üŒýb¬['AÅÖã¥Hµ9Ä^Š2TÃÃÐb=Ùrݱrt’ÔȉeØEºbø8óÏ?@N,Εn‘ŠŒ”†»›¢1VïóôŠ‚%`ÞâUŠæñËjVK§Uw¤·ðªY+Ñ#ù,ÚdŸøÝš_6@¤€¿sІ5`S|ÞÚ{nØAöK?#ç¨oÆXšUè¤Z#3K,®¿3Ý(ù32ì~,”}ìüÅ#±n,’ñ,C®ùÏ ÝOËÚñêÎÈ »´Úº³åô‘Yy…çåStºæÈ3;&Zå Œˆ·óGÔU¼£/ÿ ¿$‡EB¬,î'ÌÈB?´i,#"%¢V·A_ôIeûȤ>rÐëö¥ÔYw™%Z33÷%“ó„tË£–ÆI¬‡þ„ôÔµE|â ŸåÙX Ùy¶Âµu§¸2ÛIèh¤gfT&ªpq¢ XÕCzªþáß—âÈnnæ„O„䬈úÎò>OÊÿ¹¾3ßxMÿÌ5ý1.ö3èU³*à‡É©âñ 63Gçä©fe&<#«È†è›Q°˜»±»3ó…¿ðdkäâl5YfD|Nþ »¯Ç-¤Ïã{? æiÄ b_ÖŽÔb§üј[þâÀ¯â Db¥ª`oýèµ3úãÃh³‰ù„Ȧء·Bj¡è+ eIù6ûÁØCÒ[›+þ»“9 {…?ãYozOg!!È ä²Ì0ÝÞ22@CЬˆ®è¶Ï@fòyîF÷ÍÏ[j{øè‰ã­«aöÈ6kÀêÀ9:"³ã¤NýoÉÐÿÒó¢\‰”– Ú˜ÁŒ DÅ·‰Iùó qÉë IúÈ8;/… ­Žh :ãû¼ z…0ò||—QY×S‹¿ý\|8ûïæVOOGÒ¹éYï9y;l¶Êž_þÂü;ÔÎ*¸{aŠÍNO>éVÿÉeÏËëdvz~Æ ”ûŠu!{ž ê&…oÀeÏʓ̿1ˆ‹ÄÀö’Y±RaŽó Yfp³|‚m(5‰s#Ѳx%‹N¦û2«< ×U³«Fƒœ”ú=€íËÕ­.KÏ[øR¢…b!5>äA]y3n–•õT¬ºžèžkDM0û²ÞÎ\ð´°´ŠòJ…y`ÅÉ/mc?Y`~†&ÎÍ_Ȫl›a>i»É“²õfß •ýzìÏÄðž˜%ÎÀpe‡*7VË}²9.k†¡fïȦ¸Šaey.YJ‘ )r5<‰8€¶ØlµŒß«>_bÿÍÊœYkÌ“ñ¦¶§7FZ¬FáŽÈ­ñ‹ÚÌ—ÜÉü| Báp•qY7ö‹ññ¼þ§Dùä—ÿ*V„ÃÒ,Ê'Y#WåAíhÁsÐ}h¸tjäKØGŒ®O‰Gš^’I³ ³C²§çŸ5²ÿÕú{?Ž3 ¿4zvž `¤Rí€W–íÐ}¼dÁØ ±‡™áùurØWT‘m“'Ág‘x˜C=‰'YC¬é S°¶XGËÑ>Èé}±m¤½/O¥ ÌY1L„Æû‡Œ—l›ƒ÷c¡È’ëÓ@½Ùfw Uø/~B’—a‡!3Ž*/»ä­ Æ£T‰rx)W¶&ê†æäž,”hŠîcýôÜ,; ùð‚Í­±*tÈÞ;à+ö­xJìNoË{É]‹3H‹]¼ˆ•pfÆÛìCŸô¥ÇB¼T£Ájó\°,qÓ¶‚$Jý‹ÀÚÁÌÆEWÍ¥~g|ºøÔŒ›kFÉ™QcÜÄš“{íKŸE±ÛKû Š<ˆ½ù*}¤X71¨J{ÒO·° 7´GOÍÅÌÁÿÍyñ‡V;›sGŸšì ^ÓÓäý°¥˜6Ëó<1›ÇzùŒWð lÆ•me-HLý%y*Æåþ,5)wm³Ë:™YtE„%œ•O¨Ißá+ús§ºk)€5Yj‘ž¾ÜÎr3³l ‰ÿìÏçŠÌÁØ@Z75ÿ—¸½HY´cwFÞ-KC+h.ÎN¤q õ™aL4Åw²vô•%ÿZIc17l4O¦ù&ñ:¤M¯Œæ‘orVI^cD,>› rŽÍØ&šÀÛðküˆgUS‡X£ÂÇ’/Èî²nb!Ù.²gÿiã—ñ2DЮwC@bNúµ ¯Û£€S„qiTAv'y¨Æ èãeì”u¨Vèî!ÛLõÁ'9ý (¡Vû?ÈVA„î9ûò›»,Ê{y0>™ŒxN¸$@Ëæ•…2Q‡±[W¯Êîê<â«V°2¬?‘ãÀÎZ}5Žx’CK|±Hb\¥6“ìʳ@ÀÆÈCÈí“U—›d™0áæUÿϲêaS2â]òqîK62Ç÷ø^²|³ø”Ô°A0kDBDh9sÏ ËTä»HÙ5°VÓÜÌ‚/NÈÜ«'à¦F–t6`½Ï; [£nÈÓž`Fy s`Ýýuv~7‹ðºÑxJt³Ìâ”üEü/bwuóUbuS…3óN(„'eµù6+ìy¸H„&ÃkÈÏÏœ[–™GuežÅ:ˆ–}–­twò¸(¯ÎÊܲð$œ…¤ÏêCf亸6ž^Ó‡¼c“'égtC†æ±²%š¡qIሊýc§Ù5ñ¿wû{é÷ˆaòÆë±Ê"<Þm*uւݰ¥S6/Ïb1òl f\–<4»Ýصºcò 1熌g|ÆèYy~îó3FH‹°(žrõ:¾ž68ï<¼˜Ã è\B#Í)kÄòk-Ä;BlèÜ‚üÝ.?°&n–Ô‡Êv`Õ!à eçÈ}¦;ÐÛ ‹)‹%)™±Úð`:,9Ÿ@z<‡8‚üø,Ï;:#žñ,Ï ®KMȶ™³Åɉ-È»W¦Nj¿<á¶y{YsøTå¾Ü;ûn=xV–|³ oªÎû(š^¬oAEžÈb/=…Ž@Vïói¬›]pèÚŸ÷ëùÂ׉ea ±•Oð)P^˜±§`A®X:Æ´ÂШ.cÖ®/£v²÷‚|Ÿšqª±ž™U§ñóòÛŠÌÏn™5VP,ªçpáÕ.ñ"°PfÃe”"[©'f™e„nH(Ô ÙAÂ,ÞšŽ˜;v‚Waÿ¼2&£ð$çÝFá51ïQ¤y³'V­ Öj™;x5ò/ 註̊DÓgçcÛcf¶H ¹Èa#ù‘ ±g{%g¬.@ÌȪÅÒ¼Sä£ÈèÄ%™¥…™~ÌêXò+.âûà~m៧ ΪQà j¿i®þ<5Ü ¯Èµá ‹EC5çóóWšc–hBd>zðÙà$±„>'÷¶Rì}˜•ë¬ˆŽ¯È3—¿™gD§çš¹÷›y?­H-Äy]œbíí­áÉt$‚à`9’02³ÈC‰•JW>ù€‚#ðbâkVËZB¹P‡qAcl ÿà ªÿ3ƒæ¤ÉWáeoKÆ€×a;ܵ0ÌÆO¯±š ò~Ϲ2ï’õS)d¾ä~7D§‹-*ß ãnJ gO£yUÖ”åõÌÓ2þy~’á ]‰Õ—aóÜ¥înbî¥ßÛK'ü°ðC‘•’“.yÝÂ=@|/ÛÄÂÓ Jÿé¸qX_×Á¼Ó-ï1ƒl”³n¼D#χÙ‰½„hh¹Z­^›Y˜ù£É0MÍlòqØ ¿“Â¥©û¡ÛÅ/ÊÚÈÔY¡rÞ*m¦/¡gQ¼IÇÄ~j¥ŒPîÃÚ²ž—¬y•×f‡\{(./ç_ó‘/±tX£Âá™s ˆ]6„Äš#œõw]Œ[È2,ÍßŨ%N€†œ[KŸ° sò^>î–©)ûÌÓª¼KíŒÌ”byöQØU‡ öOå Í™Ÿ'Æ.›;~QŸÕTð½3 \UÍI™7™ò¢+déù^ç}ä—wâ½íbÿÕ½Ñ$ø¿-’ㆳ͊ՆäÅ¿…Åš6xÂfëÆzAÅšZ gUþ÷Wšƒöç'œÉ2§hmnÆê~¤S\ÅÃ87{U$žßc÷q‚V.ȲOÈç\zgÉQ¸oéNØ)^»`bQ™ˆGY4Eo3r*nQ@q%cA—D“r¦æã5WpWGñì¹³0 ß#V‹©Mü ã3/פ™ø 6³XÁ6]d–ä5ؘFá¶pyªÙge´fK¤¡Š)ѸYFl.hÀ¾ÿ…Yk§‰¼ÄЖƒu³ËsøÙl»û8.s133FˉAh½\ìÜÁ×T°^dEæ„|1*µÈA‰'Kü‡ÛaiXK³k%`PZJ§iµñ°.ò˜· ZЗ=gæïýanHÂÄHà@ºèͨnNG½éñ¼¾Ü]òŒ;d^–äyDÇÆ[/œQe±f…wæ­å¶Ì,î‰Öc_ÔðÉxz]$9dðç¹ù$;ÿ²©òt"g3æ)x¥±Ñcùþ‚ܱ b3«'ole Ÿ’=©zB/ÍH Y"õKsÞÅ@öÅ™>—_¯~›îŽïÉs¹)»½r®Iú%|6;ÃÞ“ý2%Šá¹{sÿ™³5¹CÉ$³Äeå°›gVÅ£¥>Éø;ù]|ȉYü­Îüy+¡šUÜÍsZ_òo= Â7жÉIÖÓòÜØqÖÓ¦—Úfy•=æh#¹)ñY_:¶)O×,R8,«z\z¹>[½)=<Ö¤·Á6ÙáÿÑì›ýצ?ÀØt¸*Ý2¨ß˜Oœköemå~:Ù<¸{¶ƒOp¶}™ñüäÁ烹ØRrJ²é)›n†ayÙ&q;;nŸ“ Á@~ƒ=ä¿h»Õ¥ñÖ­à<6ƒŸšv:@þ`iþsf~†®Eñp\üØG³ƒ£¿*ë ß²›orû@:Â-l>•gf?äéìpM¤eTº®ÉY/ýÙßül57§¾?›Ý"E¿e vŠîC;b ìöO²²›çkaîM²­†"Çt•ôŠey ~P¼mÄéì9`kæ'‘ü'J(ȦDÊ¢1^©xgñÔfoéyòbN³!óã]ø¸óŒ+bù ¡‘ù´Ùëxcµ¨ùVöó>›q‹ÓõcËfû쀟߬®ß”~ŸÌ®æ÷g—÷Eÿ†ôx1Ýo~‘.™:³ÎŒÌËCÍŒ’Ùš–;‘ý£²z2 ,;¶‡²:%Óiì¢W6¡ GºP²¶ô"Ÿ”ã2ìŸu. yOž¼ÈêDU vˆÂD° <;WS×H¾ø†Y¹»vÏœòI˜µþ| ·wû‡9çò¯9³fSvô¨i~ÙlÌ.þ§óêÈtyÿJú½œ]?ý€FÔÛg—ü¬ìs<§Þ\‘;ìÿ7'3,êÝ7•}_öÏî“Õ€Ywx n¶>Vœ”ó F\p]˜]Ø^Æfé`<*×Sÿ(c!â€bÈ­ái Ü-ûadxHuœdŒg„ xQø¡ÑHh¡7Z ô¦ËçÒŒå´úgéo=9ç¿,MOgëŸ6/Og¤—§ ÆMÕÅé²*mœ²cv¹ÿ5ó°}úD¼%}°¶¬Ì5èñ´\³/£^Oð¦ÌÀå‘6ö§«ì·ÕƒPŠGUÑq¹‡z ¾gñ| ²•Ë´þ%£Éö‘gH³ÄUòü¥ÒƇf0Pì3+è¾q¹Ø}²ú†=!juWGbJç²mÓ÷aCöüÿ.{!¿ß?ÍØ^—ó/÷IOŒCÒÿdiúD‘Ž0Ó"JŸüCóÛ²tY”ÀÎÈŽ¿Ãr§å‘,u {Ä·î\•~{ìÌH×e«xžrbå  (S¬%ÿ¤‡o«.r†|ù.Ï ÿÁÄü+Ì[$ˆ…#wIAZ˜c-± Ü …Ã0“ò”ý¹ƒŒõÜ|_4ó•ôxœëG×§´—¤_ýœvq:]éì·Y$þÜhü6éÝüÍ]lJ—ÏmÓçæ9äÕ™‰Óöø…w´êŽhsþYV}óÌçØ¬oæ`~ìâ!™ëÂã²´"'ÌÿmNJ”\âtHeF>+>-¼—µÃÆÊ‘sü‡èõ,º£òM<"®‡5*¦-Åóñ4f„†l¤ºW¾ãÌáäìü“N¶ 3ÆÞzSsrû–¬ê­±ùk²{yEz8Ÿ.HǤ³Ù+š-š¯¥Ç£ÓN–¥gÞÒ+­'¾qcº¥|!gˆŒé¹¿sN³M}R¼Ê’<­(KîrD0Æ.yÖ¥¹»§ÆßÀÉbAò‰RÙSê^ÅtÃj–ó±aZ#•_åÿ¡Y;ßY–BœC—i:].uñ~‚fñ"w±)Ú1ýßfå¬?«pJ¼øþéx`zöìZ©9¡ÑËf}ºw’îu›âÿœw~=5_Ÿ¨§¤;POvø/Œü|Æ=>ÝÁF¥GÖât]Ú®jûr¥ïÕŸ®” œ›'àk׿.üMÆvx¦R•Tx=»Ê HDL(¾í±o4D%Æ—Æ©ª0Z±¤}¹¢y;RÙ|~²ÀLj XhJ¤2?éM™-•…c"ù볞¤_c§95{Úß“ºÞ^@}Ïú Ÿ7gìÌú¾9;¹­ÍŸ=éirZ$~«ìp¿"r1˜N(G©4Ùlž{®|Bc’ÿ(Yg(Çzó…,ŸÉ;Oè…%c¥}‘õoðs‰T `ŽX`JÞ£sÂ>ðvd„–©êW3µGðÊiy¿ˆ^mÇÝÕ=éiô÷ôì9"ˆçÆì]nm#³ÊgG'M¯‡ScÉ\’¾6¦«ñM9ÇdfÞ;-]ŽN¯ )ùí¶tBš—¾³šâ??Û<Óœ”><ݲ<‹|ìééÑKÀ ¨ÆÅ—ó‹É+KÛo*†éÄÿ‘—‚ËÉ YRÿj—’\{Á‡d‚^ñ¨ªoàöª”“ÆÈˆdÅg$šyYÞ õŒŠþtµE|ݵéþº{lßߪ+òô“Ó¯«å;&ÿâÕfGÖÇ ®Kû7?hnI?»¯W[å•Ó!jïø…‰9Mñ›97✇;''<IùL~ž_o™W›Àê^‘a“Äke\P“‘t\³ÞÈs3OøiÌçH6­0zìŸxAdƒ_EB÷Ö—üË`•=§¥ ãE§àçõY{;ܰVö^\n®¬¯ÏضŽ$N×·ë"Ímt½?ó±<Ýëž æ_}íØ¥Öì“~‡¤Ûó¢xÀ‰é•tl<ÁVÑÿ#ò‰‘Œ]óúšXËsöÝìÆ©C83ŒÈ«bqõV·÷ÑTJ•»:bs!Kן/#‡0æ´Z­ü¢þQ…Û€uUkŠíÆ@ÂÃ8M6U$!þ‘Õ¼w—Ät*Ä7푞mn¿•f÷Çÿ¥úÐ8a¼˜*Í©{ñBÿ˜Eq_Pº¡@Š% F¾±ž¬+´g¬ñó°üÁØ ²Kó» ‰ˆ!ŒbssVÎ)/—Æ·½*:¿åài&kÓÙõ•ýÊXÿk¢Ï;§—Ó«²âwå çšÏÔN|¼š™“lfgÄÇFfægÕ—ÆRôGOöKŸÈ%ÍóñoNñÛ«ƒ6vɨg§ÇÈÊÜ•µƒ>İrOð;û…é€âÔaX/#„exÞ²°g¥ÿ“½>Æ E•œ+¾XÜ`Õ /&Ž€¸ESÐÐÈŒÿuù»¼Á´`ÔwTóÚÛ£©çÖÄ¢­ÊÛ3ë=5Hw}~:3sà$ˆYßßä´çë]W_ßÜÔ>ÐØžR¡Ú,Ý¡ç;ä¡‘“3‹óuVfëmÍçcW? Ø©}C½ë $¼gžÂŠÊ–A'V7Osù¸ÏH`#xïf¿ñ®âZYøWÖÈŽ6æ5C¤H†ÿx©T°X„¹C˜+qš´Ë«÷ÕSÛ3ÇÂsÇè`ë¼£#ñÜÙ‘äñé‡8$z°ENûë4çÆ¿£=#ÿþŒ÷d5)mlß!ñGÄ>nÊ»4í“ùÛ)?÷¥oèçëÃmÒ‰·O̸°l"ù¯Âµ‡Yùj6¡°1äÖœ?0:5I¼Y_Æ-.€Jí|ˆ OÃy‘ ãàh½ø_åÈðêèt5[–ñ²ýoúûæŒöXîý33"Ç n‘õœõ_ÕNoß;hó~Ö¼·ýJ{xÖÿ‘jUtãë±Ä:’ñžkw@äazæoÛ|Ÿ™¹›š+¼7ÝñÖŽe\ºï¯Î½YYmq8–W*åU¦©¥0&ãÅVÉû-³ UÞ!oê¥ï!LŒïÙûÉ ð¨fÅù9п™=&rQ©¾úKú:ßÒ~¯9%Ͼ4Vª‰÷;(R|tÆ0#+øòØöÑ‘9îüô7,‰E;%ç¥-iöl>—>ç›ãâçvÏûwÎ_¾½Ù.Ÿy¡êM¯h'>©º«:"¨ù¸ŒrAVëÈp X|l„'µÖ¥Æ£x0öoqF'ãRò^0T†TõÇK»&ä‚è4<]²vˆ@›ö´²0,œûLôa‡§dõõ•‰>¿z¢™ßœQ_™“€OŽžW‘û³cÉŽÏ lŸØ#>ê;!çVÍnw”áñŒKÓãpipÑÅõŽÍ;ÓÓ‘ìÏ*ïœÈø#± “c9ž¯ºÁ„N‚|²ª#E9 ïW;®¿ÈëµW‹(FÕ+ÆQž›ŽóeØPY ú ¹ŠYx;µ°1þKå~ÓXE2b]?ãúÌɇ$±Qb@ÜÇÒt´1Wù¾_ýÏÈz7zº1§?ìëwtäôý‘ƒ½#»{dä¿Lßÿ]‚ô_×Ù,N‡ÿáñ çĶ—§èÌ)ÑŠKÒ)rÇø¾­Ò/gCØ€×ÇWîˆGX—×^¬îM/¼}rÝ]›{2ëyª c"»Ÿø8¼©Šyrñ> ¨"Žíã¹üEõ®£ÌÃÁ¿òLp${ÄÕêº-–±lò•âÆ:ÖoŸ\f¤á-o?±®ó¼‡Õ4dÜ·¥¯ùÇ3–µÿYY÷¾HîÕЬÜ[óêob韫F7Sýœi[ä|Üœû›×Ó<2ò.Bº>3·<š?!32#בè‰D䬼h”ºÄ­ƒºöÎ,à ŠWÃ[Bg|O3µ Š ÉÁ<8~‘“¡b±òFô‚Ï`ó ¶f)°_2ô"/Y´6¬¼]ós¦ãõÁ.‹Â`ÏÍsž_uOxÎ敞X©A.{'Êy"g7øWýáAyfˆ~Sç'³//*'§° t?=Ï,vÀZB@¸Uk ÿâ° ªW{ÆðšØ!#eSÔñ“¤„Ï˳]> ;-̪ŽËXªv«o¯NoNm×6Ýf]ÆÙÄœu{Ug\÷7‰oþ˜Ó_Æeu7ˈ¬¯j椇ûñýÏWß®‰öß&äïÕëꓚO¥Kþ%íVÑŸ9éÝíÚ,÷Ø93ðB)¾?r´&ÏÜ0'¶̳á$ʘqwÖµ°–l8„WªõÕRª9óNøO.K­‘±º–ÜÎ/üJöS•Ý`HÈ‘ù+žs]õ‰ø·_WÛg]úbÕ¯ª'7DF{"ùýYµ¢vnìy8èèß9-kX,ÜðÁèOf¶ªŒì¡jdýÅœ¢uo2 Lj–w/ïÜýbçÊhý.¹ÎóÕèÈÌÓÕ¬ØÓ=cQ_—¹ü`scý²ÄÃû…eWù"ÓÆ;A$œ—bå¬1Ý€aøE,Xéd΋Ùÿ'–pÖÝ(alû¥XA/2†°àü¤bßü¯fí_ÉkLˆ¯‚R–EÚŸ­&FƒG׳2î™yeç<ù)Ýïô<ÙÙ¢ó¶Øˆ?Ç>Ÿ6=|ø§s"Ü Ñ›©‘ƒÒ 󯑄…õ“íÕÝM£z6t/Ê ?°0¾b\xÂ¥™‚‡ŸÉêOÎ9è‹ò ;ňñä qC˜a<–*B1Ÿ<#ß]¸L‘­jzÙ>\¦úWx¦D¾4Ř'E¦ð½p#d A¨êd%èØ¨hýþùÂKþ=1ïéfWót4~~løÈŒè¿S_VZ×ëþúÛœjÑ9¾ó®vmýáê9õ[Gók‚h®¨Ž‰~, þùSl@•3³ïm¿Ý¹±¹¾sWÏß»Ÿ w2/2?#WÝ.š°G$íêàçàÇíš/·‡Õ³ƒÂÖ'›¨òX÷Þ½pª­T¢A{pj*l!+¯þÁ(lþ_¦@ it²n,ª:@ó„;€ôh¿²uî8'÷í»¢ùKF0³ýWûPž´ŠµvÞó!‘Ô)ÑÞÕ}_ñ-Ov~ݹ¶ûd;:òýŒõŽêµ‘‘«/åSγýBõ£ô=hNé>ÐÞØüµ½¨»²û³èÆìÁ(`lpä59!æ—9ñ{xóTüËÂ0ë3›x ùÉ ‰Syvœ'N\¤‚ÿÑÿ…ÿ& jPK,(¤Î2fÿ&æ}x"–^¼ #˼©ÐïÙŒ«WìßȰ>‹¢%3cÞ™S ^Ó,èÌmÆGÞ_¬N†9 ºpyl6ôvd<üÁÍU½ïïy ûΞEÝ š·¦‹ûÉ•n~濯6F®ŸÏÿïHøõê˜öoÝOtÞ×¾¬èùgûïjIlÅüàÀ킞?šîá? ú{cPÁþ¹×Ë’9¼1O¿s<Ñî;.ÀNñŽJ<Þ§Wg¬#™)› vÌø±ÃäBWµ§l…ŒžzG8ŠÝó™9±‹£ssby.©m_ÛîÞЉd® »wuý»d|>ŸÓÏ3®Š¥Z ðön_zÜÿ¡óËÎÐÎ/êßV÷'þÍêÕÏ2òœ!—ùø_d}÷ö®Î97ìÜæŠÎÂægÕÚàŠU‘Õ±§c2 ësÍÕñ›Å/ÖõøæÕõÖaBæ'/Èî³ñXNÌ=¨r…·Ã›_P¬Î#Â5Øqü0”ì32iªíùÅ1É­É2É»¦xŸüfçÔê¢ö›ÝK»{6S±þObÕÞ4øîz¿æô0ßÄ"®Hçþ_×/´¯o.h›ž¯µOG'>š*€ŸTïÊs(gc>XˆçÈ º¿J~hËæîæ39ïga0S±ýprÌVÑ«añãòÿ¬`ɵA §Ör™3Ãí“‘.Í“Ù|k%ÃAbÕYʤ½å=F¬2dz†öðØ1öë-òUí I²$È•—g¦hËÇš}zþÐè<Úü$¨äðxöþ Û%õVMO{rl÷@žxxºŸRÿ9縑ŽÀˆe¸5høÖêÇÕ”øƒm㪯h¶ÏgÎ~˜‘>’“íþUÝ–8úï±{»æjóâQž©&äkXFX2E_I†ìÀ ËÝò,£oȈå¶uóï‘~X;ò± *_ð°¡Z6Ñø¡y{ˆÂwzU†ŸðRoF)—×ÁÐA-ý¦Ķóh´Y%Èüü½”pu#03»(ºƒíßÄóBdGvâ¨ÌrêÜ1á°OjNû4˜UÕÕ†ÏÙçœ{‡^¤×f˜ÂÐ{ï]@Ä® Xc×Ä»Æ{oA½÷Þ¢QQcITbרˆXÿ÷ýðð Ã{ÏÝe•o}kíµ³Ç²O²ÙÙ^X©2Þà ºœH×fCÃ2ºc`ðªÜþܼÆÎ=KÃ:úý÷ÍžN?'g#²ƒÙ÷¡é+`ƒSéõœýý8iNj O^­[À tc5æ?ÉÎVÃ"ÝÀ.­&r£´ÖI¥_^\ËïLÄÃf0´ÖÚéÏ­$qÿý„|ˆþÑØÇìWDMù›ÿPîÍ X£?Ø›wN"¶~Œãƒï’Ýý>¿®ØºÄ Õ²— Â¥ÙnDÃèi½o6«4§·5Þcq3‘òt8þ>ß3€µŸ¶ ýðõïñÛÁG)x²5+Ö‹:Œ½/x!Rßix-iŽ=z xx¢ÌhºÐ[w ³2ç+ns´Æªê´hU¶VþRÃþâa÷Òü¿s6Ë#n4§­ý°—õWf5õ™J–qŸøPÿ±š§ìh¥NÚ*?4|žu.ÝPœ—=>¶ väN£uùt°Ûa`€ÕÌ{‘Î(P\0ð@°ÏÉd€ª²Xú·ò+Bï0<Ü–Tqóã©oøžûÐdŽ›#ñ#ЙmøÓ¹º>¡+‘ps<ÊxVcϾ„Š¡‘xG,à’ÆQZ÷à,å‚c¬k”n–_$c–ß¡zõAþCÞPáúßÙU] ‰7Ƴ—"^3j±Î¨'Ì[/f?’ –Îà•fù§ÅþÙ:ìÚup”ÁÕ•²Ÿ‹«°c}BlæëÉÆ?–‘·`î=ígcݧ¥Ï‡ç'”?Í—…XÈZ¤»)LGÁý‡?€¢MzÉvâ¹qHüçtD¾›ŒâdPà8â©pDÝÁ1÷Ðç@A"¿ÈØhíÌߊ𹼭6Áy[£bŒ¾Âø¯žŸbG-«HERÖ¯Y aM¼  6Ek?iæ|Ò¶îai2°4°˜›Ý›Žçj¶ /`ù^!¶[”¿LûWæÕ™XˆX† ÿ_Rf•>ý}A,\“Ò%¼´>;€û-úbçÞKšÐ/ýs°s5Ú>“Y¶æ©‡p÷ãHV« šð|Z¼?g,±ò?Ó{ÂÿÂÖi?vâabëþŒÏÈÇLHŠˆÌö™ÉŽõÚò·ÚÆŒÜó#úAã?##OEø ²X;)fÐúųHU¼K¡ìFô3[øÎKŠKc‹o©Ùy9\žD"¯€ã;#ÝŽ[úŽfÔýqËr¢ØÝÀù?`Óš°³Ü\Í­M‘ù¡ŽùzãßËÌs¢ÖÏéLñÀr¾"u( Bš4þp_øƒ'‘†²kŠ?†£©|Ïš¥‰5×ãžÅì¶–À~¶æ?Œ‹äA=7o͘ÈÏú'c'™o÷[ÁÓ>1R0žý›±Ê$#òŸÊ3ñœšä­ìéÒ¹ù±Üh23»K¿Ìó%¹ºe¡Y¨aö‹Øµ^ß ímÀ24c®M‰ŠžâsÓþù•ìùb¦ þ߯E,E»»#vÇóÿ™èêØô¨0(ôæ•éo ƒuDŒ;5ìo  înwjPìŽ+Úu'ÒŒÝû˜2#G,çe^ žÒqþýY›x2ÍsGbCµAÔÛäÔYÒ Š•Ïã›jùŽ~ø€Ý]LÊN_`ÅzS·qy83;¾£uÖ•]¬ åL…åÜ 6‰žÆžN÷dÜüU:6›‡D]Áñ¬Á 0+ÌGû0®Œ]Û/óiÎJÌjìgvÇøÇ<¸è­àÝz£>ýŸµðVÙy¤™#;‡h%Œôž=ÆS€Z’¾ØŒþü­Ô…Kòƒ²£¹éàYdþÖìë|ï¢e~÷À¾…Ïú=qÀwèúÛÉb,ùp¤¡ž »8û5­ÿ7ïÙFc6+Ó ©ÌDßáF!o ÀšLÄZN —gׅݸ ¢ 6u|8"¬Â ´'Ù›5¨a§Å€zswÑSÖm¹ê½¬wÖû)ßž¥ö¯öÏ:wQQ ¿·g’õmòrFÁ±ZJpÅ\c_t<ï¤OúRXÊýE¿„Öy î¿]“UeG±¿3ÃãÜW½žê-Ø€çˆöކ 1n‹Üš¿5y›lñíɇèû­Xÿ¾H÷dÖa1 n|¸‚À$2ø ÙC˜ì𬷇,ÇR|Œì ãЯ³•lñ¿¸}©–yYÓ×»qWÍåzžDÏ.{c í¢UB"cy!åߊ/óˆÚ÷ˆ‰däN¬U:\­¡¸I Ø 0 Ô]¾(98Û.¯È7å§f{„ þ}™óTâßµÙ‰0CÓØñÍÐŽ}mào8f˜‚«ÃîùááwÉøì]­[ r&+øü0$ûfrj눔g2÷Øå§³²ŸÂÙé°¦‹ð#CÒW½áÙìíÔÙgQalnˈÕ}Uæ­ ”¹Òã[®÷×CšõP“säÿ¬ 1ª3B6‹jß.YƒØºÇ¼nµ|ºµ9¼ÇÞpo}Y÷’'‹š&7Ráº;8ÎÙ“ÑT>]0Ï…ø»ŸÀóñz`ì[K¼ÚÉ»ùmù øk“ÇB)ü ©ÃFš-ï–¾‘ÿ©8/ÃÞ¢õV^õe±â_¦Ot+éŽ{JÂÇ@L'ÿgœkµ«k¢µTÔuí]<—ovÅŠ)ÿ%e° Ië›\ì_\]1+[Aή%š:€YT›Õä‡QàÓènvüøÞ¬M´`Wñ›«òrq}¶sVË­¾çgW5 ä³)kô±Ï#DFM±~¢¼S©'8><>+ïVj¿›ìŽy%Œ.:¤½¸;£|ŒˆÞHÎogÆ&¬?´PÖBk'ó)†‹9 óYê¿þR<àé4m¤Änú³Êƒü¯<©ÜQ«ärß;ñ‹ÑºÚlv©i¶#wV¥ÀÎ,Ä‚‚z•›°ï ¶=ûÿ3z+_¢ìý¤ ø§¬Wy]©Mi~Þ=;¶tnÅÍÅÓØ„÷8°kù*‘Å÷øƒ­°òKðž¯sÃú²}ЮÑakìkqv÷ôx‚ùèà6ìpgì—^^æJž~0³÷ÄŽÙO,XÕÏ8h ¬y“/6ÿ-¯gfL½6Ê×ÿÉòª fSÍ’Ë.YíígÛäN׸WÙçié)¥K—Ánöǭσ±ëƒ÷§‘÷ ·Þ“ïû÷ߤL|k&«:Wþ¬4µœç·ÇUœSѶ|ìæwÉKÌþyr*Üö‚ô7ÅNçñËÂÿ…ÃÃ6Ä’ÃÓßÂYa<«²}z\¶<]ú›E.¼+^Ù‘kå¬qRæ­eç;·È×çËwË’Z¦6#‹’Œtœ©çíë©L1…hÐl çMõŸæM¶ãvŠí@óмqÉ—Ùí¥žÅÌpY:íîÉî7Çc×…kÂChúÉø»ŸØÕ‚uy?ÉÓ“eD·?¦•>(M©˜XYº¸btÅ#Åp¡xÁ[fé;à¡÷’.ÈÏØôc¼ÝÁdDûƒ!_I …Cá 7R q–xÖh¼ûи_²|ú;í˜ÕžQ#¶œò•Ý3Ò³–[¬'ÿ)P·å3¬““ùhǪ¨úHñ‚vÏû¥„<“0Îq'V©3’–†gò‹¨d›DÕNsì÷QXw²\áØœWA+;áï¹hŽ·«Äú÷…Ý8%ýwixùžŠ?–æ”n­ø¹¼Gé|äNøÈ&TÎmK¾¯¸h!Þï¹´W¾}6+° Þcs26=›8£gzl¨Ø—¥Ô!õfÌÆ[£WbdâZc`#Bù-ÿº"æô㲜eæß—×<éc͇}Ŭ ³FOb6HOa÷SkTùA¼ru¹u°nàüâ¬p"§ÞLo„Å»Žý•­ø#lÏg`ü5HÅ(xáO‘êIé›É¼ûúPY1º¼U“&¥ó+*UœVz ü[Á:Mƒõn ÚœTã/?JÍ*ó§¸Ið#Øàzô¡{úTú-w§>‰ìƒüí&v#¡®šý°O«^@~GæS¾FY0wcþÂÓ=Z­§d;Í”Ëþ{oŠ=È”ruAôãé\ׯÚ1+%¡ù=Øÿ1ÈÞàäëô!î&~0{1¿'kš ÜÍÊnoMT÷jºSø&|{_AÌò ±ýgI QÒ”R^qxÅ~¥ü0*½w¯¸µâoÙfw«ó §F:³‰¿5\˜ý”v €œ¶¢zöbŠãš¢ªhF «ÃðCÑÌ©QŠ>Í\˜8ÈhÅþIJúoåÙšѱ^^K þUïÅ Z+e;=;¦GŒ½&=Q¦Ý°9û¾+¿#qÐ  C³ùåAEEé±|DX Þ.€?äþë°>ì>ŒAžóôŸØ€¬@·°²èP±¨bßòšì÷øŒuéÉY]ù òÙTàFìþØÈãã†pƒè³a&’4KP•¾›¾ ‡zp>«4·Ü$ó\qGä¿Ú_Ϩíº!ÓOŒê±cµ»ü¢X)om‹0žòü›vÝjó¥Öxþ_–г,VëG´zÖËŸ¬á÷Û²Çr“i]öE¹CùºÒÔÐI é„ œÃÍ•Oroßÿú–ÇXýɶÙUÅCå´â¢b[nöúž b nz;=¯øg© ˆhö³=2P‰çØ!›M ^uñEÏôœp5LÛëù¯yÛRšgtƒˆAz ûƒ™…xÏØÍuÐSÉc구ÕÕ*z|gèŠX%äþ!*#ž¦òdˆ#f°CS<#fµ'†”½ëV`îÞd€=æ'W¦×+JJýÂH"Õ>ì–µŠGà­o… h^O¯&¢y^v+Y:¸¼g¹2Ÿ Š•ïì^ø·2Ý7ŸVNKo‡éàÇ·ð«»ðù¯³5¡;µ »S÷²Ø1ûg¶uö7¡á~D=×Îev£³=Õc lõ޹ï5P·­Ž±&H¿m˜ó'Š´†ò£ÑÊù)kŸí¤0+n$ažÜœE•¬ü,2`Êû–¾ /&ð5èýL"›?Àf_¦sgûE°bæøÆcûÞ‚ñÚ¾´"û )ÿ®c:>–xç{bš]Ó—²ïÊ·”ZÁš‰åþ—qßåÁèR_8MÄ×ûc€¦›ÁX…3*HQ½gåfb5´Œž{*.Úuÿ"*#Õˉuå?â)&#ÄV¼_œë¼]!ã"…hÀ®3ÚC¥j+Øß®d]‚LNΊòc¥cŠ{²Ï³+³£²‘ÙÓÙ3ÙVÙä(ö¿íÄ,·B‡{3Ã5Å!ÇǽƒøSúkú^èBVäXØ¿&pd'd7—î$¨Å^Pí ‡p^Xª± "?e¬Ã]àãcYçëÓnT‚NÁÿW3ÿx‚sK—µlQ¦ðböÞyh! œ™ ¡õOb~Oné!fÝ¿lº™ïjÞ¡wP/´ Ê“}‡ñœí‰ƒ$ûrAصüZi7Øþ#Á½õÙäìHìvoôv>>½QàÌwqú·<[Г™ý?0æèˆ¬þìÌt=þa"ÜxÓ`•ËoHGK0ÀáÝðtº)ÚŸz7j©G¯³¦}ñ@SÁ~ý­SäðÅ'Ö¢kÁ­{ÖBÊseÌI3žöˆììh¬§,˜í’“é5×éÜ­s¥Œ"= n2F0ÓTÇ+¾¼ö)/ÂÝ·× ûM‘Ö¡ÌzÖ®†Ÿ»‚€ËøíJö·V¼<ða°#à ·MåŽÇ8xli;æ7™Ù+Ò¶_o1…Œÿ ¡:•œØO`Ã_’‘èË' ÌV¬ÿx$Àì½ö]|jµJw,‚¾Ï3œzðÈ™Ùñ5¹ Øe'æc•¸õ`V‡¸j" «ä’E@æ#³æ+(´ ñDÔάÀ`,áÙ¯ÅÃìÙ0f¹ÙWÍm‚ÇnßQ‡ÜVñïÑXvO·¬Â—õ&§s@ú_Nî—=š]@ýãmü|-Èñù$ íâ§V¬”ܳ´ëÑT0FàxгÉb8ø Ìo{%ÛgT#®qÞV®X×ëYïMŠ7cˆŒÕrÏÊØÂú‡h9¬ò“–3Cë!jy]Tí±xÂL•ÔùÍ.Øß%ÉÅÉÀlq¹s¸$9¤39ŸA¾§ŠZ§2Øw6k,˜¨«r•/bé&¿ K2ÀW„%HÆÌþÎôìäÏhJ¯´ ±@w¬àèûvp [ ^åÖØJr?æ†åžh¿˜•€V?™Ã6WcfÏýíY Ô¯‹\#åÜYØð¾Ì?¢;ßo¤þB ÷<”YAåʺ§ÚÆÏj=cg>ÑÞÝ-°>‹A ó’¡é’ò ũܸ}Q¸“x­{Ï~7e¿ Í{¡ÙÓ^xÅâ?goK§ãoRï2>`sÚ:¼‘¾ƒô·åO;rEýøl{°ôk`„ÍÉÓÔÈ</Ð,'>&íMõç4ªú°î»~ÍÍ-y›ÀˆÕ^‘¬;f5‹q¾( Öx_€ñO¼#ÀøÎS?Ñßiåe#çç}=ÎÝOÊ«Gâ";­FúæpàÆ|T“ž¥õÅ4¸ß>DhÎb»zös…ÌWÂf¿—Π~§=kt"1íÎyméɼE¶"Ì¡†ö-X:æ}™”¡`óe/0û;àƒnMþÁJ¼‘ü¾Ä7òõÎáȺ±‰ìÈÅ•PZ­gT›Ý­ˆå]Q úll[Åü­“ÐÞY+¦÷³ÄŠ(½€œšu@bFуùÁèGcT-;¸\‰%ÊÒÎM~«xª¸?Û…ü|Âø{‚žÁþ5 ÷° ‘òŸÓ‡ár_Ö˜îƒç{—üùÂÒiÅÛYøƒ—”ŽxŠ.|¦–¿)«¶?mÀê¥hÄ“IW˜…!ÈЩŒíDf#—鈬}W“½‡ÊXݳæ+E°®ŠÀâ|O¾Xýoüׇ™Yÿ%Α=³²I_§ß*‘0îÑ®èûäÍÈ5Û•¥»¿5pY²9{¿üv¾UØ ëÐûÇÒ¥xµ_`?j˜ÿl~::N¥bì‘ô²ä=4y:hxM¹²|Eqy1 .ó;Þhò½ÕxÍ1üù {ú#˜²;ÏkŠ,|A½|*IìÝ<¾ÛÚQOìò*cá.óz†S®Ë3Lò:F2z9ë ìºì^ëÿåFÌ|ƳÝvƒ3› *RKô®š €šïéAŒ¤Í‰$êÈ>Ë„ü+ùoñVi ¼~/æ{tz}h?a[ñó8,À`,×4÷S*A݆̔½ûK>¹É„â²ïãëßäÞØƒ‘“&àÝXÿîXÐöá/a` ûãõÖ‡Ñʬ¸»ßìnÅþ=ÎÏøÍYÊÙÉ÷›Ôû™ÙzêGY×Zˆ œ¿#ú9³Åž 7S®5Mø·Õ3"icŘV~̧úÿ«F5'ÿ4šˆèïÉÖùôò)ظyø¶á|¢ MHîqpÓ¨_;.~df;†KóGò.á×ôoáÝâòŠ–ùTNIŸ Wð u,mÁÏŸ&I?` ;á ¶O[esèŸðü!ñ`ÒŠª™ØœqH@߯yd vu–Ÿ’é°¯¤ûe ´² ¾k±ÔÏùYù7Œyêÿ<éd=¬˜Y.ÜèFŽÃÿ[M-о%ESì¼à³EÜ‘¶Nh48ìÏðði»â⬽ÂìðšßŽ}«'c÷gNyÝLv¼WÖ‘x`—¬MñNÅŸ*~-vovU³ª¦OW‡Çó{óÁù ¡:¼?VOÎãá$þßÛ¹>\f# Ñ—õÉ.á¬t ¬Ÿrm¤2„qoÁk"þÉn‘_³aò|õÌG fì'ÞU‡•]ûŸ¸2…òAòÀöƒ‘11æõuŸ®tyæÀSQòÞ X]µCû`uåäqÐHÛ°gÞ¡èZ, «±v_a·OM¯¡¿ËVàÉ0,¿¼»o~@þNé­&4û­Õo­Îl>·å-în9¸ÙþMö+oÊž"¼ Ûß!›6‚u{¥Ù¬f"ê¬çwétmßéNÆÞön²æÕžÚ0-—ÏþÜê¾ñŸþß|yÑ‹gØå?ôïÞ]¡ÔøW_ÒÀ+±†*ÆÌú­¨5r¾nUUŒÅ=ø\ Ïœ‡< ù2m]êYþˆhïA,w;¢¶•áXXŽ–aU>³Ø‘ÓÌ+Ã…0ß§•ùÍî/íXrš·<¬âòŠéÍovJþ~²Èïà0'kƒÝ+‘û8>l¢ª`ß´Evm¸’¨³+mFW«¯o·fdwÔt£!Y»^ÌMÿPÉ{µŠZußï¾Édôå÷ž”ïñZ1µÄhÏ;*´ÿZüx2Jö@žHÛo|$^t%Í*Õ#72iýÈÛ ãÊÃò1ð>í±dߥ«³íɈü7۽ܣ´;ˆö|ù'àÚÓuùi°…ãÉ^ƒï_›¶/]Ûâæ&W…C`ºîI_È>ÃãÑ)¯¸,}æ{iÑ,,‡wi×86G®UÒ“‰KÔoí”6_'zó|’ò{‚ÈàE–Ô¸~Áúo­¦»é'´˜ú1¾~ô ê‹^R«YÅ¿•¨XO m´2 ÄzYUЫ48¹/ù-¿tLØD,sMr¤â+i×ììÒÿJ=ýàõ=‰™žKFoÏLî!s»”XàCêà¨øK×…n‡•N.{—<ÈPdi±ÐMÙ¢|ß4šªé²}…½‰eîÌþ»3f7´ì2CV†ø×OÄPKnþCkn줥°›gÝb|dü' *#+êEz9Ÿb,Ï?¸fäÏì…ãI+€½QU[#{àÞW)9vÎ XSaÿvçÍf‘= ?¬‹_ž¾Ÿ=TÚ¥âÃÒžá+øB릷Aƒç`)nIö$¦;¸ „{5\g'«@¶kýŃéòì®Ò¯Å%™§%¦9µH 4Ö¹U3²ÞŒKÉÖ?«ûqì&æ÷ÛãCã‰=;Ÿè!ÕwSÛç™óÿÕ¬„2¡Ç°®¾ÑÙË¡‹&c•˜ZD{£ji­1YÙ¤†ÆÏõG¢³ÝN,žÌ7dÕXÃï*¾ËáÄîD$¤{£üŽ"j\ w½5rs‘Ìöün9ñÍ4ø”k’3òqù.afùߥ£‹VÙ8ØÓuÉ»äü½Cìf—`#^c>o²T®å&ëù+ÃeXë/ª·¯ºˆßsîZ ™wU½·þ£†ßØ+Ï5,3+5JoÏŸ5ŽÑ. â渌{õÓö¼”™·¿u žŽÕ8­s< Cà!ó_b%WÊø7gWDJ„±¶Q-[䎪5fƒÅS>Ãøy±‚ñ‘ly ¹Ðó*ö×6ÛÐfv0r},•õòvk4ó¨q¥#—®/qe\S¸µ9>TØ E?Îåtñ8$e*O¬ä3~—ýv"ãw{Á>Ôòø¥¡–9­™óôÞ q€ÇﶃgÞ­ ·‰´wîOÔJ9WÏÙcJ§&QQéq­˜w<)hþиÓüªý¨…W­BwÆ1¢¶¼âí`5ÌÌ:-¿ßµT&´bV7ÛK¶fÁ}r¬} êûÕscvDñ„­ü[ã+ë#FŒ½€ìº¦üˆ¶ØEí®V_îSû`U¨Ï5ŠUzŠTyó<‰Œ‘§†¢óc³ÈUwß´²êÏS«£:¦wˈέBöt­1˜ÙÍ!hÅh~2Î’µ¶Ëï‹Ý/º2FÇj$+j¬Vúê…þÑ})k´â)ŸU†=ÿ­‹òÅ}ÖÂ+ËfÀå¿Ì%ÈyWñ>q¯y&Ï›‰Ì…Zº¥ö@¼h4y&óæúj¹w¥G»ë:GÆQnÒüŠòÕ‹—[qvvòhÅœµŽvGîË7â{Ôz#gdt.s£F[³)þRD‡J~£r,µ<Ñ:+õ‹J·xP¼h¤«W³fÔ÷jý͸GMx‚;#wnçxcµÛµU\i#Ç(÷Qå™# ¯åõtµ´q§]s»lœ7h{]3¿Süá;ÌK‰n¼mIOÓë!{]ÍwUòŠë‰ú£‡W?kä:•cåOÞÓ3KFÀ‘év¬²6Æ0J { ŽW×=ÿ¡L»£õ<[ÕÃ)‰kÌ}»†bA3L~›1¿l’{܇5qåÕ_=mÎŒµoîiU£&hœ•µÄZà<É›ŒE~›\œãðSÆ6þ,fñ™ZbëX\õÈä:oÙMµÜÚ=Çn¾SËd}‡±Š«h3«6íkâ¼keÜß—ÕÕ‡šÿp”N=¾(RÙ—AVk½¿|ßn5¸À¹±e”6WÒŒ‚öÖ‰ÙkOyržä'«áÞüñw±û¹q·i%cP;êøhT¿fGOåÓùDY“}1e¯E­c‰õz ¥ÈnZp1~ÌSËÕ(ZöXª]ÓèE´²"]ë¿"3¤FxÚ½7 T_”wóèʬÏwäœío×ͬI<{éúÕó{-ŒOpg•{õW1®áÌÞÞØÞÏ©eVRe¡š3-¶k£Îôoœ‘¬bÄaQÒä+Ì¿jœµ’cì%aŽ×sŠæ)#+ëèíXånê dn´ fJ½G £F˜ÿ¹Rê–+®Ä:Z5Ò H”D«ê6ä?\‰È-ªM¾_9‹zé·9skíDZK¥"²¯j³–Ën"íxF׺ ‹û6"-‘R+/éz¨1V"ˆI¬BJù1šrî·zº#J¿ÖXTåéq¯ñ™ fÆÓ©Ók1=ÿé絞’%—ዼR/þm\`•Xä”Õ½9r=—#gÚY^[¨¼ËŽˆ¦ôIúQµÁê)ï^p¯Ô13‹Z3+óÕJ¿ÝL‚’cíéõZžkz|U¼'º·š×»Œ7ôY"gåÚ^Mí‘åµ"Àž ù>úQŽ^K$NX»ºFùT"Ý1ÙŒJþ˜7ˆÔý-ò=Cà¨ô–ÆOî±v/æ[´DFCJ£½ÜEŒJ¼6ÍQ)'2ÎDK"þ–GY±¨vP“´üJ¡·¿ÅºâžfÖZÍ”yt•A-ŸÞصûÞ2dÚ<½™Â*§è‹Ýc¦Øß[ïÖ‡YjqµÆz2y$5ÀØÀ}wüê}eÜM%A» <ëÕýœµ#ŽÑŽ£ê·¶ßŠdñ}¼LdÞ½+!ÂŒ9wÇ ñn¦:^W'D—Yã;µˆZ:³rê•8PëkLîŠè!õÌæ-ÕÑ×(ù²Džƒˆq«6;Z5ù/¥ÓˆJÙÖºÛÏ5Ô“yKff`þ/ÖÈéÅig+Ob+m Ú£ü»ÊFEʹþ]=x¿²ýµSF$"Ï%;£Y÷Äo£x†ÁgEV¨Ä:fßoOCõ8Þ2åŽÊrD@ü¨T¹Úy¥NllÔ _Ö§ÇŒ·š¤ÿ‹èÁ¸@D$Ê3žpOõ ޵–'¸6"½˜Gу»žF~“£cj›Œ•ß¡>ë•õDÊwäŒÅVÎ(FÎCYóöÏ_k“展Çh„.v×ÚF”îcD¶Ê–«g7¿Éøj™ÚˆO™pdVv¥ÉzYÿìn‰p化DòÚ#a±Žöß55t'µ¨z5-‰±¸ó‘yÔš[C$JOÄŽc¢,w¡LGDNÆãr1z“hÍ"†ÍÇ[÷ªø¼ÓˆÆÓF2³j‹VPËãˆÄö}ù6±¾3Õ~éíC´3?©Z*yqåÎhGü¤$ˆÿ¢.È ‹§Å úd}LŸÈyZDjµ<ÃYªÿîƒ{`]ø®žO¹æË´11¿Òšg*Õî©9m¼(ÉõÐ(ÑÚt5V‹ïí>g¢ÄøbVï¤ñÝ‘sÖB( îœÛ¼>×ﲒϱÉ[©Q5OŽçB´eƶ޳-óaþÛñh+œ³R­6‹-µ~·øNŸn¬¤•ñ¿î±ü£ò9‚Y;yYs,â1‘VG éJU€î”*¿Á:BQ¶xÜõô~^ 6bÏ©‰rœÊšë¹…½ k•{ûïÊEhÑÕ$û‘é{Ôq¹Lˆk©gwÿz´l®’òa–TþO‰4V;}®È^ï¤?×É3E®ËÝÓÒh»]ã<±˜ë©WÑ3º*êBd!bÆAÔ¥æê3"_à7:swH¼`ýUdXõ»¢Pã™(}—L‘Ò­?q"1ª{¯®©ÆòøÆ{Ê®|œ\¶û©^÷æ5}†uÜz _÷þ_ûéý™Ù1Úq6Ú mªàÞ‹7DäÚc½´^À*Ç>˜GK×—WõÄJ¼ùD{PŠÔõ=j­8Þ1Ö0–-~S ë}¢»ØÃ¯]c¤ä·i9”½ZÆãhô­J‰Õ8ŽBß©E º/[ì’ñ¾9JeA_)ÖŒ§÷«x·ÞU]Päÿ‘Ý]3gë dýœ‘QŽèM4¦¯t]´Ð•ŒÎÎÇžÏsÕ;ÙIùí”{hízÆcïì¾E‹+¶1:Ð jÙŒëÅdƒøT¬4Í8^-„ · tÁÿÕåËQ»§ÚZÇ*6/+ÅžÖ3W'þ«ãýî‚2eûĨ›îäýFñ¨~#VÊ8v‘H%ßëª+»®©»©…Ó–haëÐ|eÎ(N.zôNT«Œëoå|\5YR³6ꃯÄjuç%b3ºÖ·[k+eä -6'ךœ¯XÄ@ü$£`MŸãQªõGÖí¹ãÖëh·œ­»ë'bE„ã¶îÇ‘he<ÿQÃïO\±¬^.Öú8g3{‘/´‹‚ë¿ÇJK%¨/k"ç©Òæˆý6Ÿc®C,`~L+#.‘Ñ*êï•:c<éßšÆsÖU¬·–HÍ·¢Qî?rîƒ?Í:Úˆ |­ïWäü.WÑ»*ÍÑk½Ìyöå÷úI-™ü‡~^Ž@o§”Yëêyý¯^XNÍñŠÌDeî‹6#ç¿Î¶Š¿z- ¹7ñ‚޼Gôkâ#÷[Kª&¨Ù®£vÂ5SÆD’zñ¸ò¯‡Ð‚¸>µü.ƬÞ×y(o!ôûÅ“)?5á¿î¡ˆE>Ìñê½Õó¹j¦¶ÔνZ e¸ùË4Š<ämå&õ÷úf×+2e2×±°8]ä!¦ŸðIvA…Û7vToôbu<5cµ½E|b„,aöÖHCäz˜§3§ì8Õtm”;¡M]ë£cŽÁµQ¢”xuu(Ÿ®ãwzѧ€žÊ]3ŽE‹8•ýUìŒ/NW²¼“-aõ5²(®°ßª ‰ú´È‘EÖ×èE\÷J»%—ª}×_iƒå“Ehfx¯ß¬]ÒÊ;èEýúReÀQ+Jœ}µØî¹|‡¯ÅqæÑ.™çÓþ¸ûöö÷÷~CÄ£fƒÅ@>ѵ‰q”9­¢’­gTK<ÿ©·<ˆÿÝ-=VÚøl-¸Œšv^✵Qò1÷¡‰H´X•ü×üª¶(F›ÚBõѸWé”ÓÓž9GÑ ë® U«´š1­¬ú;í=ÇDNîˆy—X‹«FA ä;ô,Ê¡>Æ£æâå±µ°29êû.¢Ó2é]}Eö[û(×aüëÍ%Ó+=ÎZoïÓÌ§Š¦Œ?ä:2WuYì)ö«¾ËÊõDO•påC©Žu‘3“qéÞ¨#®â@ÖÀ~2J—9Ÿˆ“•9`y-¿œ¡ÈJ©‹(± »¤?5JkGùÒNÊU(ar@òÉú@eÔ{ãüí‡2Ý…Yº’"wñºñ¿ë,'!ªÓzÊ˪“ê¡3Ú‹Z>«T‰iµýFÅú`×T£Æ+ÏJTÌ1zŽÚDL­M£•Ö¡+w®µÒ`5Üo6~²»®LwÂç¨uñ”†kmžÅˆK|àžÄXUÞZ;"BWRc¾D½Ö’XÁav4þ,Ôÿû ‘–Orœf`Œè”5JVP†ÞÑk‡Da¢¯Jƪ¾NâÿÞ1ÓºQïeAdAµ­ˆš´ëV¦kDöV•Èéw]+/ªy¶¸ÅÙ©â£KyÙJ¼¿V\~Hϧ,Êàªa梌+äÆõG¢L­ˆs•v÷Õ-¼ë+Æ÷éê¿÷[9mŸHEîZkE•E«ˆôûÞ<å~kïbÇ`ñŽwªÚÌzžãç­ Q'´‘J‡:&Ú‘y5Ç£¥2b´êÆ]¶¦#æÄZýx׃¾Ý×_ÈÌè)]]c u%¢ƒ(ŸJ»{â7ºûzéjVAýÑ9ÏȤ;Wõ¡3sÿ›ó®È[˨&h¡•M{â*zN1Ù`Þ›¡Ñúé­b_€8CÑž²£îº»ÎE{¬×5^Ô7g´oÚ¤¾ß!”…vÆÅÎI Ž:)2tíå®ôdbAo² F}Ú =¦ïrå}šhEm5ó[ÅwÄÈ@ÕÊ: =žËü—ÈÌ'ê‰åbœâ.™ÿóÛdþD z½‹ÈOF%®Ù~ë»ý•Aã#‡h'õ_žWòŽë3\q±¬Y;?/›lþÓÈR+o´$žP÷ý¬¤Šs0“ÓµþWK¥ç÷"^Vÿì#âz¨ŸæŽÍíˆzú³šö–QÂÍdÈÈFD÷K%2T®´úm±¬‘± L‰§œIάÇð5ªE—ÞiT¢•·¢]ÌÙ#ùl™l£QWյбŽü‰ò/öÐÚûÇ=vÆzŠÈ jñµ¢3%ÊÙ:ÿ/’èË7F;®Ç…Ëg)Ñò0"m™Hóå~»riÍKO>'4O苜¯+Z˳]o½~ŸÆíÐø\[†oÒ®ºŸÎ8áYúþ-9#6#N£ÀˆŒéD‹J¸‘bŸ×w¨âûˆ\]só[î¸<ªÞHÐ;é#µ zsqî°ÏQÛ ¬EwžÊ|ô’ZhѦWƵ|VŸ¨LŒãÏdj&óÝ©o¨æ÷ž5QØ»ÀqÔ³XˬlDFß9DoPǸ´äb"c1ý£GÞÁ]5–6^ÐâˆsdôdfSåM}ݺ‡1´Z¤¼øªuÕ¾.á’9•ß2ï 6pÏÚ°ît£0Î6vr¤Zó(ú OF†pa•p‹©bON´†§÷GGünQ¸W|èë”EQ•Ѳ1‚q[ ?k'•ze+rŒ¢O‰;©¼™9ŒM?àŽè™Åÿ"ÊÆU×É6͘³Qô_êgä.ý—ž\6ïÏ®§R¦OŒñ¿n=}=£–­ð›""ÕŽ©ÑrCYã7‰dȵ»‘¹îÄÊwD·Çò>¹K1‘ò ìõG+fbéä@•‘µú'oj?”¿¸'ÚÜX„zv[ÿ*šÒÏÉ3ëIÍ h]´ÊúhµU7·9ˆ÷èõƒêŸW,ð³Ü„Œ€³÷üJdwý~ù?¥K+ç7ê'õ©ŽÔ÷SɯŠCõöj„–9ŽH´¨Þé­ã®bÆÚ Ñš1õ$æ2½÷âÓô&ú5sCbdý}g¤Ù:8gg>+0†oÔóy¨½zt×´ºq­­¶6®×'èNôÚ×ÕÊD%NOâŠ×ð_¿Ù<§Zœ£™Ê ¤ü—ïuž2.1_ ·¯ý0ÒÜÂÛÈ“YûcžÍU266"SÖ[c½û5Î'"(ñG?¬üH^wý´+êU?¾Õ=ëÉMÊß÷FÕl…sAå°n´«ûàþÈe)uV ˜4PWõ)R£4¹"±®ÈµéЧ(Óúc3tæ[ì´v‡ðÌcgæ%÷¬Uu¥]ÍÈãí§ˆÝí¢¥ Õ¢ˆôÌ×h[¦°:1ƶ3fµìJ­9”¡ü^&«?+­5‰q€qŠ,+/ëÖ¸ÚÈvèÌrôɪ½ZF,žmjA´ÚïTgc67Ö®»¦¢eÅÈÁU’+‰¶È9¹’±B¬'Sfd"ÿ£i%\^W ¤70BC8ïnXiµ¢R®Öb©_êZ{¥o™Â˜Ô¨ üûÖ¼*ïVNûðû:Þ¯5·NߪŽÉ"ÉMâ3Æ>ŽßZP­r{ΆìŒ˜QRÖº³¢òž‘ƒû˜Ì¨ûó;ý”ûåZÆÈÊHBþ&á5w\ÜeÏBqn]£¬»b-káÄ?ÆYZHýœ£Ðê9:í˜L#À÷Èð[ÃâüµQ–}’ùïËî¿ò¦âY¬Øh>ÛŒ]\ȹ~<ÃüãJÖCÔ®uÕGÊõAêæóûvüdô®7‘ßëÇ*NäSÎN/,ßæLDèµ|§øÚh@½õ#åÀuUôÊB” £EùH¿/z_‰‹ÿ­10/)&0#¦Ð^Ëçi=d>ý¿Ñž~Hùÿk‘´'j Ö–Yxžg ú«Y·<ˆÝÏ©¦‘ÈÀ jÙ•êmø½‹Ô¨‰tÒÌYùùÍ8Î}´cfÖÜdüíÎ)9%`ïÄwhÌØ8ÃÖGÿkŒ£wÔ[»ïæ¶õÉvyu½R^“QÖ†ÆúR+µc-¬þÁ•r–rÙúm¦Eë¡åRE?z=•šêÍjÆ:f'¯åR:Ñ·ï8üÀ`ž&ãÖÀ,‡‚ó‡rßÉRºåÈɦ_NoãDÀ$¤#ãLÇÉMÜŽô}2ÿÁ) Áx¿¹|Ú˜¼+Hh8sŠÍA—óL±~Äáæ[c$3‰òFŽF+`~K(ïlÌwfâ ­ºÖD/lý¬ØUK(ª–aˆO0«l}6GϨF¨ÆïZ+µMŸ£”¹ªJ\kdþ[έ dd)ßl®Þ³'Óánz_Ë-³“²GÃÔð6½@öa Úsî2NÈ•8þbr½îE?æ±NÞágŒgŽwZ³ùéÏOzr+V•vw¥†o×ûštWÕd­©ãõ’«F‰œDýê¹#VŽ‘†ò¯ßs~ò°zP­š\‰^ܹYýgÍØ¶šßÇ\Qà5u_›á™Ìíç>¥]±r© çV±ó¯%Ëòó…i‘ÕçO–Λ…3é y=Ô¾¡‡÷ôÔ{<ö'OÐb"^£Ÿˆ½Õ”¾èPçHÆóäÙÞŒýG¨ÿV ä»Ì+š‘¿ÊŒˆÅ2g1¾—ß (VïÉÿÄ-s ¬kÔñ˜P›ªæÉÄXó7€Ÿcu¾÷Ëc_¶e×Vóiy˜vèz'~ ŒóLºU´È:-+®/V¥cÃAt»>™vÊmÔpZºÝ\î¢7JÆéøÝÂÏôÁÝò§Ó3¢M(°#»ðtw¯2Ð °ë»M˜ÌHõî›yF­˜6Ê8[ÛàìÅ ÆžúѦ•ar»r\æF)µÊ¿ÌBäsEø®“ÞÈÍv ]èyp0§X?KÖÑ"¥ÊméÓôI»™sÝû"‡Ð e$R§ÓëäP¤a>óÞ Ð i8r /·‘ÞyÚЋ{Dâz0k d2Ý}‘ÞÁ™s ´ÃŽ5Ú²Œ½‹ì¤q¤HJþÏÌ»k!ïc÷\3h¢ u¾ïÍQÏ­dve´—bZñ•?ÕâÙzó]®³•“£™JŸét2y0œ.cnß$•ôîhÁMèèì76]:†ç“¹t¸¿ֲ"ãéiV¾¦cêsaSqTÖ>Wƒ‘‚|¿–Åš§ÞXÇð‹¢V3ÚbQ÷L„å iä<ÅéFò["yc+põ”‘¥ÖhMµtÞå-BÔÃy&̬,™,C<õªWFô/‘Ö2Ê Ù‹ÂšA³2}ÙÑI%Kî¡oÏ ôöšˆgû‚n¾Ýè 3‚žFíék²5šÒÕ£y¸%O/Ôz:þœE¯¿žt‰è•UpüuùùùÎa,Cº¦öw3þö¬žq]O:.žÆ<̵ʊFì¦7Vö¬(ІËŠh"bÑ«ûnÏEjJ¼W†ÀøÇØÙÎO27Ê܉9Nã&ýLÏ[¸ÊZ#Cý¢þ§3{sR"ÿäJÍý\•n —ÒÙ©]z/ý?Ÿ¡Sõ6¬EOúßL¥/Ê2úá­J'óÛ3Ð…ôÄ+!3øøïqi®M{‡û²Ëé¨<o—rò{%ú¤Å79Ï ôQYYoŒ*G¬¤‹„ô z3uÕœŒUVêƒ9x1’øGÉñ,—:ëšÖó>3zEço\n4-ÿ¡-oûšŸ–‘ô[”¹ü5œW6v-؉!|¦{º>ýýyjBkn5}‰ß“ùM ÁBìûÑØ9HÂA¬Ez,bÖÓY™ÈÄ*úCM¤gÆmœso›½ž Ó‘˜%éÒËé"0‡h`FµÉ_ðžW›­€“ƒÅ½²èþ‰€e•eb̉ˆ]• ½ºUþ_û¯õ‹\±hÑh]¤ïk®˜žÂ•ÔÖÈÑheÝmŸ8 iÀÌÅÌòzs¸Ýx:û½J¢fÜ‚Ò2¼\M£ú8œžÉn. §O5-ŽaþOeOe{rSæåÌ<¡`wº~,¡óÅnhÆŸéø ÝsÆ!E/óîÓ±±ØgåÖþ³+ù¯ž^_¼oµŸQ¼ëcµ§º¬Tú;«ŸÜ-Ï‹)Än˜§ì·ñ>S6Wï­¼ºìó´q¾.>Ž’ ûiL¢ÿoæYÁkÙ—žhÂÉt:>ŸlϤ³7z‡WÑßýÙÝüÛIìíé]5†®†=ñs›’YÙÅÙåtý+1ÿZz[.E?¼ãñ}4f[nQû†~zÍ™û)ôÿ~’ŽñÛ²ÞÖšÉxmLj¬Ö&jóbþ>f[Çä7•pãp½¿±·ì‹–Òœº~,Ú?= <—uÍÞ'«¯•!?”ÒyÐX¿RÂÒ¯àÛõûŽ¢M2/ý í¾iï…Eë×xZ†WïLŸÏh§tZèÀJÌýÖ³ß ÒC¸Ç£‚9–@•ìÿYè…·ä%(co @'vDgþ„`«|›5#ÀAÖµiÙbŽK[ þj`GäcöDþNY0’7¿*?,‡b\¯ýPÿE fî"ª4’жŪCŸSf‡E ²¡Ê—Aô±DRÅ÷ÕWgѳxPvÝn§…—½Ÿ’ýÝ…ýì‰Þ{jSºC?ngÖ; ï³™å/Éuè·¿›Fl¤ÏË®H=¾ªAEÿâß+x†wA/¤?JCXj¸í«-r¦7Yëd\´ãʵ̽kb„¦m“ ±ÚÑÈEÜ#ÒqÜf{Åmò³î¿v_.Â\‚'õ\yWë¬dŽbÎV”­ž‹ e®2ð¸üÓpF4ƒŽøëéJ¸5²û+ð\fÞÄóÏÚ1ÃvÜW÷Eº"ü#¬d‡·¡+Ü8º‚= ¹Ï8ƒN‰Ýé ÚÙh`Î_$­éÖø‹r$«Ò ñû´IØÊw4ðýMé1‚yÇ-ç’ Ò±ò@»`ÖF?(ê ø2³´rªö5Qg´¥½˜¿Oˆµ."'y^y±„¡5YÊ…hH¶ÁxG)“‘ZÆëZIÏŒU%Õá;dùh:Ôï…lƒÜ»ËÞÙ»)8l3*{%?¸†î‡‹ñuy˜ÏÊt§#ÐÛ Ú¯`F#éí•vHÄ/I ƒÖj:‰Õ…Ó,$á»°$¬-ÖiK•ùÞþÌÕ¹èôaZs¥#Ö±íD»(óænŠò¢ˆwŒµ]ˈe•uåÛyÊ™[W&Ûow1qµV#ž}Ô Ž!Rµ¬üÄðÝ’|QÍ—ìüXt¶%{:8k° ¾„~»f{åd3ÀDvƒ\@gë—X¡ftÉz“Þq°œ‹ñƒ‹ùl—Æ®]X¹Sà.£ãñkiʽŸM³»Ò:vØ|â‰Ä‰ê¨cìÍ™±™'ÕD¦VejÿÕžËkˆøýEHúÿÀüµy1Ò3g*¶ñ‰²ªþWD))ö3ëãþ‹ÚГaG¾wòc„:0{¹ø]ø'Þû8<ÝìÛ¦d"R>$|ó?3] ¢_²¿â¼ kÇ0’{>ChÎþoLZ"!LJýA‡“ÇÐÿk!ž òú„vá¯ÈÑ0^;o¸'\€œä6ðJæ|e¦dŒäÕûÌÜù© âYyZ«Í9ŸhÑÍ=‰ŒÄ"ù5Ù#«ÍôñÆ6~Âçôç5ñ½yý„8©%lÖl¾ÏsÍ à¹û?zUŒ³Í¢óåÃt-j`þsA:{ ÕûÓÏj7¹ÜnÄǽŒÄ¯Eþ¯Í.âžðoðÏqä«H}5s_LT4–ŽY'" §­ >Úišn¾¹ʘ¬¯<†•óX¿¥ļ’±øT¤'–‰\}ÐÆŒ±>Ð*$ã_;½j?ûòšØ&f¶´rÆHñ¼iô2ÂVb‹ˆ:‚û¬Òlƒ>N'®»0{+=•¾¦˜m_zW­d!û³™Û$bfí¹=0¥ûѶXs虿´Øž]?œ•;‘øhø †§<Â1ÖVwã{·e¼Vèõf¬fzenä®”dã1õØ|€’oݱñhÏzg‚ýb]Ëçj‰DDJ»Ò3MZRußÚ ÍÑøe¼»Š?ýˆÔ7Ò¥û«äÓôÿÂzìßñŒ÷B$v;þh öcMf0«£Ó“Â;hgk4/p*ÑŸ}‘_ã~«9`„o¹'d2s]€$ Ú†ŸèKè#‰Î&6~d°3”ZÃX•\¹dÙ2³¡ÆîfÌ#Ëa\#Oâ‹kÅOJ‚Ñ›R0KYgÏz#ù-§òaÔuÁ5‘s¶Ö´ÙÇ^|LVì—éx¶ž®o ¹EæÞlDiIöe2ýŸÀó—‚ ÏçÎë+Øû…ážpTú~ø4óÖ!äÊÇ0ªˆìeæcNÊ3fðÅú27b:9c#7óÿÎMÖÂúÏX ®Ñö™5’ïˆI`¾ÉXÚc† ¬ÿpÑvô¸ ?ÎúSºU~na·ö¡ìAV«ÍžÂZ´Ç9’[aÞE&®MÚÁ•ݦçÇgχ۲¬”g?¢ HH3Ötöï\pÑŸÀ‡á®Iï%–ô´ô|ºåÅZ({Y409NÇOɱˆ€Œñ¬à ©-öHRÿ­Z±ªÇº÷W´¬<ˆ„´w2KÕ¼KœlÖMÖdþ2ˆµ^N>£2¿"V0Êayž$s&û_÷^Ldû—üøò¥¥y¥ÉÅ´ú?ø‚˱›%~SæV‡·é€ù÷"½“Ö¯äEñŸâ_ÅÆb%xp öoö¾–?ÓбQHÔXú¦Îe¯ Yv:8”8¨†±È}YɪýVÊ­V0Çgä*.2²‘q€P ®ýWOä7͘š×–ý5ÓáJù.+>´bh¥¡ÖϪ•X‹Â9ئ¹ÙülºúìF>·*ìKvc{¼Ö0ÐûëÉQaEyaitqe±.(ü‘¸©¿æû¯à¦ÛЈ–d@È¿áµ[óóm¹Uxd`£ÿìgìBÿçÎHÌ/ÉzJ¯!B~&ð~Æ% µŠ‘Û  šQËŠy>L@¾ÆªßȈªËò±‡¯Z.hŽUZÉX­$ÄÌŸ|ˆ¶@¼`Æ[&ÀÓ¿{ñ¤¡Xã“}³²£³»ÈìŠDˆ\žÍÎW…ûÈu­ ‹A­(xSòuþLÑ+›‘YÔgÂå=FŸà‹ùû QŒ?5eG¿Ëê‹WxÞÈ|B>;ü€•ü%éC±”ðyŸ¶Ì¿ÿ^<þô ü”t QèžaßV£½Ÿ|5=+ ç#ªu Ô y@3¶î²xÈ\»+%B’)éÃϾ32"­xް¡ñÝj¬ Å«æ9‡$§e'”¶+®%FmÊnõgϪثˆjŽ dK²£Ø©Ýèîûºx?ž”}™Ÿ=ŒOÅ(LÖ•`^ïü»ŸÈïP‡éá‘ìyï‹ê€g؉_:xÉÿ_ŸŽ¦æ¿Á ¯`ÄGc”kwØZt±ºµúÎØì•>L»í¸§Zó>WKü§÷×™ÓÑ7™u“e=Çþ,2rB2õ¼ËÎVÍ’Ÿ³~åóK±óËÑÏñ àöìW%ȧOºgvhÞŠXf*ÞþIÊ;6ÑÕýT»t~Ñ9{‡{ŠŽaŒaÛ§®$Ö›•õ Ìz¾à·$½œÉ —^Âæ¿/…·Ã·øóý¸~ª"Úg¤£7ö+¬ÀKÉû° ½ðû• êí蛟„:ðEž;WßO7‡ÿ†ó9ÅŒc>3<•ë߉•‘íØ%±{n½Š<€Ûª -¹°ù½žcňûmŽdKöÈØÑÏh­&’1-Îäê,DqHé£ü˜üœ¼=.dl^o4ôfbÖ5ù;Ù ¢÷=`qà±>NÆã)ë¹Ñà~X„{’ÖåÏ é½K?çŸr·ïÞhû­0amùoØ•Om‡& î’–³«ÂÎéKü{/dk8wHÏÒ¶M¾Í)ýW–*ó®Øün`•qèîÍédî*ëU¼öAû¿ï $"ÚÈ{õÁ†U¥en|¸'¿8û1»6»”û²öF{*Ðö_’®`Á èÖÈûŽdD—c÷ªÑ€9¬Ñùp!­ÙÿîXË+ÒÂþ¥«ÃÉÉu`‘ `¡•zcuY+$³qžÞONȪ «8Œ”­ƒõæs\ ½Ãßkô¡ê¼uúÇ&¬³uzÍð|Sù]ß{Gv_ili›ü$¬ÿ`þÎ$þ©dÜŸsè£Eñux'Ù=Gl3ÛØ‰8°|g/öpSºS~v^Ÿ=N¶x,Ÿ-ð€Hˆz³Ž=ðùÃȇNGkóóaØÓK@SUÄC`ÂN%Ÿ ž:ÁxXÏ/ ¤ç2[ªÇãÉï( jºur²æ¿åÄÂ[¼‡µ/Î\I²VœhF V|šciAÌ1ƒõ¶&`‡°cqr>‚Ñ.­|Êþõ`Ÿ€‹ÎËVsÿÇBäa#Þö±ASÿcèx÷t÷ðKQ[’m`Ö›“ñ»o‰*@“‰rG 1Õà¾GÂòp7ÏëŒ ¼Ÿ=–‰ý¬g ÞI~ ÿ,€ Z s>/õ¬žyÉîû©·n›ꜻÝ(¬Œ‹'ô•“x>Éì˜gù<ÑåeȈH%›æù#'Ÿnö¤Šù÷umƒïëC¥ÃäðD~#ÛFéFÙ û4•±L/ ’ËB†õs±\ÆÐ` Pß÷ÈÀºä˜ôÝäéìÊÒÞáH²=°wŸÁ|xóÛ|Þ¹-¸oÒ4–»nî ÷ÿ$re“ÁR‡åk³‹ˆ2öçÑ#³¿•Z¦’“éž};d†S~SoîIæÈì9~sÆúkEŒ‡­}2J”ÿÑ®Ù)V>ŠúÌ YMft¯=0SèéeÁ*áHÿn°þ¨wk–}žÿÞ€„îÌg3Ãý~Üý÷þ`&³ŸLîó8vo¬_g¤£+z°™=;›È°]þ,·Œœèz^~5ï‰MaÅæCo—.ÉnáΤ¿Ã®tËGpSÎÉ<£EØm‡ÿFÜ K¹Msž26ûøÙjæ´cNCVËì¯Ú/š‹÷?ˆoêÍ÷ªfw\K{þ*3®¬q±URÚÈQpŸ;;­õÛ>ŒÎ^ÀZ†uÅ8g„}Â)aë|H>/øÊ"¤¡7{¿®o2v»šÿzCðGtyXöÛðé)5"}X›>x¼ŽÌ¹6o ˜¯ :?<ûÿSŸQ9VGm§ìp÷‰,JŸÀrÌ¡e©ÙµÊÑ^byÙ¹*WÂú-£:5ÛO6Ãÿ:™{€èe}õüFÍZ{Ѥ+b•§q„܉•>Ä=i›ì£}+»~ ˆ´7fFvZÆåÙÏá'öj‘ÐÏ ‘Ëœï`µ‹ððuÔ€Ü ¿ý ÷¶lbžqAŸ+þ¬ÀuÜð2/)…O¹Ï²3¨¹'k°-ža,öm·#ü‚U’Ø3ý,Ôf‡²R·/½ž®ƒÃ®ùƬ{hžïœZ3û>¶³¢Ñ³ÅÁÆsõŠUSf©ß’ 6î“¶³œ±8@y÷<ªŒ·Ñ£y!O©º×ò&F’öµîÆ“<óÓžÌß¶|Ê,v ŠÛCÿ0+ì‚´`ïdsú"µKàë>güõÌçXõQèrßFÉï cT®/îËŸw`ß«ñ‚GóٱģùÄH,ÄÝDÈ›óãËÑš®az¶¿9Š{A¾eþCéYw0Gï¼ò4à6f(N±RGdÌkY<3à®ÉŽYÕa…œY;çü­su÷åDD8ñFPc±ÕCæYbõ°Õ'žRª c&¼õ%ù…a6ïߌ¶ Vîg¼÷Pª7'4z½Þرn¼à_¿%CÒ¿£3g$ͳãʇçÌqKÔ¼âÜÒWèÃäþ·F?æ1ëçˆ>ûKç9-kK-ÍíØ½õø‚i¡YÖ´¨+ÊÙ¾Ìûpìñ°Iì`cm§ÌR»ßrbžÛ1"÷ø×5rvöÿéR?´žÎÝŒò£ÐKľW±ºV lÌ¥þf 6°sò»¤W¶ÈtW¤÷öp<³Ü†\ÏY¡]ö£=iÿ9þ n|8Üî¸:IØ>[YšYlæv‹ƒ²I¥çŠQù“ø½¦`ÃØÁ/““VHMS8„Ó»ÃÐì{8¿Ï“#ðªO¯¢Æb$YŸ¢>tÇòÏg,[‘‡‰ÌF`ÎZ.+ì0$þ÷ >rßFtΓy ?)‹œ´rbF+žcMIñ\Oô‰±JÌJêA+ûÀ»BZ…eá‹äÒðCøhÿ`vo42¿7#Ríº— ̓Íä~RÁðô‘|céû¢_yÏ|Uñ`éúÒÚÒfìczßð»ß;2²_º8[ƒ=ýé™Í¿w _„ݘn þùý™ß¸÷VŹoV¢YÍ"zÓXÏ£n»Úpí¾öÞÚÇÛ`þO™èÇ{Ä|2¾ÆOÆA®…|q“l·]~¬+îHî›<%«¾šºÓÒó³sÂÚü5n4Û~œŒÅŽwÆ¢_™îžÅJÏáÕNÈuS$¡»º ²þCö‡rçÒKåûŠs‹Ë+Ë#K'¡C}™{ppsâÞÖÈÌ2üæúô.ê®B÷û`EçÁ‚^™™¯KçåSrG9œ\L=š8–1º‡z8}¶¯l{òE‹!Æv2¼úc û?‰÷Õn«`äÄÍùš7¸ïZLãWÀìŠuÕË‘}Ï1Ï>•œ›g¥ï³v¡ F¿ùŽlHîíëDÞîv4ø ø­fཞÈ@Šœßœ™\Þ¿ô kЫôkù¢ò¥¥xÇÝX£îd:ó9ƒÕÈÒ°ð^XF ¬_72 “‰®/®àV¡ Ù)øþj,e‰5ÐÉíº¿þWŸ&–1n·ZÛ:53âúy-¯Çúy21£ì¦:`å˜1,¢ë³ÿ¾CÞDß:ŒÈ§;ùgó®3“³² Ч@9Óý÷ŸÓûðÀX·ÇÝί»´€ïÙˆ J¯KnÌÞ,ÿ¾4¥¢(>̧U_^S~?½:ÙõY™~€çïêýØ@FµXŠÕ!ûÛ¦ÍÑ’{’µÙy¿b±Ï.Ìé|Ʊ ú¯ïõPf(ÝU½ÚPÍÿÅ}bg)Ráªm”kœèÁÌŸó´ žõ·ÒĨ!æ…¬ÿ1×àiívœí˜ŸBLÈ]G«¹£øL*_+³ÃC->°}<Ÿ² Mñ÷_ƒñ+@èCëôâƒò%åÛ*ä;g åß•o.Ÿž½„½#ù3Y¿7Ɉ–‘÷]`Q:…i`«¾O^N«‹ùå{ÊÏ–NÏNÂ&|—¼ž¼“ŒÄJœ˜?ZžRÚ*;ƒÈ§_׃oþfb &Â{À«›Òóïòiù ùîÅéùLÆæÛYÌ·Š±ÉTÄ^-²Y­‘¬±›ü†}pµè±žÏ3:‘ÿ¹ß2@VŽÉ˜ Ö¸ïVR¨âF»¯(U•üéIf‡äf¢Oª>K?”n,N€ë»x6c½žnkâÞÀ«Ï}D‚Ò›“6ùÚò”ò°Òáp½·$O$o&C™ÝûX…yéUYûòôr“\vãëdþ¯]6=û!Ù›ÏÞÍm²7¥¿„³òã²ÙáÍôï°§öΘHb"¾oãåyNÜ8ÇhÈ|—>Ñó½ÖˆhûÌíªñ¢?+ý­‰œVÌéá¯VÃÌ€~TûgÔè¹b?)`N`"¾w7VfD2§xº\*#¥÷¦ÝCUxž:À+ÈPœþ Ú4°x øïµ|[øò,÷aòc2˜ÈqûÚ„üi²$}#dåOJ_°†Mˆ—;ó„uaGô¨o#¢:kò DNÔNd­×ˆ ŽÌÎxR9e—ëù¿Ì1œú/“©ç‹ç¥dˆ”l£Bõ_4,÷',îí5æ9ìa*&’+1þqå\±”Oéúòg ~pVpÛl»òOøã‹9éÔ*¿-k–ygý‰aÏ0½m“;«0Ž9¥Ùºl±ÏAPêÇoi+> fø–ÈáÖðv>50Ÿ÷\÷þDŽ›ÁCmÓrbòФ„ÿ<‡zØ:¸{AˆD‘õ î›ü®;ä (ëÔ›²ãJ·•ªb ¥YF[ß`ü3f÷ŒsÅÆúCÙþ-•ßñl¶Õ*Pù{ýuÁöM‚:?ù)][~ ô¡|Nn|›ÿ2¿€ˆn$Ò]…ö&îK´>Úü‘­,ÑaF„‡@s;Âí\Ï eHÂ=œ0–̈– ô¦w8 o–òÉ›8Y5'ý¿äItËsÖóÐþØZ»nÍ—½øÔùØ“QyÕjñcþVŽ_{&âü­f×úN=¿øGì¨ßólœZ Œl¸1b­ÉXØ……¬þŠdAéžò¿òRX€üüúe’ÃæÀʲ£°~ýæ‰Xð®xÂ÷“1ÄKÚó×±ßRÏPAmë1`]*$±ž­Ùñ‰Ì}Oø5¹‰úoÙñ“gÙû~<¯ ·B7IÇ€zÆÃAÈøiÁz±—âúˆÞ¬Ø“­Ûz–,·ìžóùéÿµrʆõ^"Oú&ëcÜàjÅxjÑ–^<¾Ï:Ë.DYƒ­“ÊüÙruö^ïþ¶Ec'¥-‘üN ¶Nø‚±Ì° Èp |æÙØ»[©€[Ÿþ–íšHFsù¿sØç’‚÷×â1­îBü’Â-¸XˆZ^›½hIìƸ/0‚ù‰gÕf¥ÒÛ1ìÑlG/(Ûge°žÁ¿z=«Áì˜`ü«§ÕX¨l[!#®½ÓÄ ÖPi­þS»ô'ž¼v ƒ¼fz…»Kße÷'³˜í°ôÿÒG±Ö“iuãZLó æ7½@B“Ò¨b;“•81-l› øwVh-¯<ÅÎwåO;x”^|¦X±Ë ÃÓ†W¿å†á#8;7'ÌCö—ñw³²>#fíÕM¹ÛØkÅWù?+ÅÃ"BwÑL™½7¬•z:ÈüžE@ÎÏÕrÞòB>ÃØI6]YS⌷–³=áþÌ;–? R}9ôÏž Ãåìôhöq(²ÛYam˜ÕÐô.ä¾w"· ³©”|´¸„ºñ'„ÍxÊva%qoSæÞ¬Ô€ÌôàS›±—›¨¯ú1ù4¹#þ–-Jw çé {¹j£›ˆùE®„Rn­³L¿²¡V›SòõdHJè»ü§¹`=½9c@Yô˜)qÆÆ z?§ÎØñÙ.ž¢G»…lÇû=³ÍîòåI¥¥Îù/X&Ìúìû þü„L7 Ñ-ÉŒGžÇ†›ÃðG…ùe¥åù-áOœ«‚áLÃ|°ß¯IOlÇ "À%Äÿ ¬ÝpþËJ4àý^J7ùLFêú°Ê´#ñ4¶ù£xÏfÇ»»ÌxÓŠwfįÚGs;ÎYù—á±ó¹UÊDD‘±—¼6Â'èÌ’›3˪VhYíAºPKÂÀÒ¨&Ï—Î+&…yÌ;«wûÂ}üÆû 6ÏõÇ›¿K=ïÇá—ðeX”íRl]ê™/ȶï×ô@jšàZð¾Þý Ù³wðóAý+Óû±“ÐÑiÏ0Œ1¬bbs·ñl»xôR"ë Øo{Å~¶~ÅÊgh„ãl­¶¿¼¾O¤£¿4ûWËzXC"/äN›’Rúõ±ÆH™²¯ß>ØÀ¥øÂÂó図7ÐÚÙèñæpN¨gï?%ø†º¿­˜ÃI0ƒ2~ߊˆüz8 Ñ¼óêA_Â_6EâcíÔPžS‘¾Aü±ØÇב›¬ë«ÉîáéþØÜzf`ÆÊ(Ïü…œfôWî5~ŽV/nÈ,¶½5j™½ÞÎ}÷ü—ºû…©!Ê„ñ­Œq€«¡%9k5ÅUâEï]ŠUƒÞÀ³=Qè$j¸6e¿–:‘Ñ9IÝ%<˜ÝÅn ›m%Kú<ÿq¸)?Ÿþ{ÁÕù‚&'熯Ãg`¡ýð‹ƒ`:à7÷9Î#Àgp~z/Ð%Ô~¼•ܶËÖasvmœ‘|ŽÀ\§û%‚3f‘éò¯^¿;(IfCË׿1 Ђï[ÿÏÍk1E72¡Ö‡x’&ew#ÿ;¸ÖʼܑŒ¶õ‚•ø€co¾þ4X|„íß?½2”@¹o&m‘Ù’׬gMîç„à‘Ùùùyù»apv`vC~Ty|“KJÏfÿÀïM nžt“Ù‚C}œ“ðÛa-RlÉcøåp#aŽ×‡#ÃjP‡U¨±ùmm¼óõl¯ÞIìçÊh¬]ÁëãÕnuA#&ÿÊ*Çz÷™åõôˆL ¤+¥ 03b§wÏEYi®´¨ÝÙÿpˆ³’ÃB©|eé Ø°ƒðü?ÀbžBìe,Úæäéä…ôÇlivsñsyQ¹i¾}þbÓå6Xº{pu½Qýq ¢9Þð­ôÌìâ ó…÷‘mÕX1ôU22l$ò\Ü8W5ZŽÚ¾¿q2<â÷ÑXµ²l—(-žüO¬ÕsÛwRþ«%2a,dh÷D» :cý¡Ú£Lùj¬ò$}¬3©ç's%®”çª;‚ÄÆ0ËäwVì^lJVàµþx®},wÓFÛ='û]±}֩⢦ýZü­åÑ-G·º¸EhöZ“‰ÅùÔÏ-e¬à ´¢;0 d|eø(éîì›V‡á}¾"†8%ÌȬGô$™ ѼÜND¹Z0s¿¢ÚX¨Ýrw ¬ QG¬’ЧyþIÿ¦54bÔ_º†î«Úoí“̧5ž&U‹\qûúÉ9YXûãÖ!#`ù)*Šó’vàùé@rU»£½uÄ0g„¨ë^^*F­JUÍnö[«Oš /õlÕ©åÜ–+–åçf'P×»19ÕÊÂgù£Y{üÇ¢ôñpv¶& D*Ú…‘d|ú0†Ø¡Dœ/oӓ;µÁÊsõFï®ö@þ&vÿPj”ùQ럌 Ev>Ëœ¯úášÙ[Eë¯dõf̈­([ʯË,ˆž2¦¡üv ñà€pm~ÚÊ àd5µNM 8ÐsÂî¥Ý*Î ÿH&‚~›`ñ{ggã Ϩ¸¿I«V››ŸW±¦É]Ín.¾N®h<ë0ˆÜÀAD»¦Wg÷åOeÇgwsl{âó¾QITbeåÌúÙ;Mëlî[=u´öÊÓª¹ŸúCûbÅþÚ£ýŸ(?žp%ÑGèOœ©]ÖµúJ„<ªýÊÌœ«ùzRmƒ¾ÁþK2Hu¼6 îr!‘pÂ>I^O/Ï;ådqBuéO¥+‰Æ$—%ëäWè}t2Uϳ“_Ó‘á~v»éÊ›[ÞTqQþ0¾…[ŠUáéd%çþ®Ï.É/.Fd‡1&#xµµ£‘Ë—›¥D¤oîÂ:&ýtìÖ`oí¶ÌúˆÔåÅü§h0f´ðÚRí§Ù/3†ÎÐiûµŸ~§y09=q“ÏÃ;þŸ¨û׳ªÒ‡ÿ”·œZ„ROÎÉI¯N) ŠH—*"¨ Ž"¨ˆeTĆ€uì…±!¢ØÿbCÅÑQQaP@¾ûwöp}äJ8å}ßg—µîu¯²×vºèÈ0Âû«ÿìÞÒ~¦zCb?K\pRî‚ÿy÷–hòiáIoNÖìü Ã1™çéõÊ|}\õ«dE&ÇÊÿ³û‚1Ïé|7yó/_ÝÙ³sSâ$ß«—7·×&ßUNä«îۇOÛyÑ xÍÓ7.ý‚I1Ð÷B?}ºÀ¾é÷À”þ7䛩.‡âÀdœLð È·Õ¤YÖ´øÿ´†/àu»še¨{x¤—äoö¸"gI~•ø^µ´sa÷ðæªöÁÎ]͹ݟ´ê‡ÿTmlwˆî/ÊhFò¥U¹?“_ø¿¥oLö·dJ^L&WV\G«cfK3ÜPM>W¼¦™™—.Y`Ý„ñúÆ“äiájKDUz2O Ôë[;)œømÕ¦zbç®Îº¯îýW{_f·w8âœüV¿×Éž’™_–QmÊŸíùúè¬ÎI‰©¼¯z°ýlgïî¢þÉÝ÷vOéÚ¾-uå#ÍÒŒmz<¾E££#‰8ˆ9‰Þ—Ÿ²–¢¾ê5d-ʘÉn3:7öŸäÊ«îÐÿUN Ò 6p0ki>¯Ð9g~!>ål $ðž_€µN‹öÃDGÇÇ ®LŽô¼T®žÔÎì<þ·9qÚÕñszÇÊÌøˆìú¢ŒC¯Äsòw^|ºíÙÝÍÉ~ìÙ>ÑYÖêÐÝÖÖýWóö&µy÷^Á™¹C9¿)Û%6×ðþ +_²œô’ëP^U"8+à3¦fþêF¬da9ôÀw;f` |qÖ–l³#ù=¿#fdÆô +Ù™åá|ò¬È÷pú#ZM®oI}âEñU—Å[Ÿ×©¿]Y¨È!¸öÚDqÇŒò§­Y§õ‘“OVkë÷4§t®é|©}{sGxñ¢¼cIP†u§Å°¢9³,Ê…õ¨Z ½‰½wcºš/ßá ä”lÐk–Žýƒ”~F_Øu]XD8A¯Š|É"a n¡W¥’&¨±ÇŠóÞbgõ‰[`nfµ=ØþœèùÜÌ_$nFÖEĽôK^•9«3É'ˆ[ÎÍkt<[ýxVu]´¾nö‰×ðŠà„ê=•|ò6,ÍüJú'ó…Y8ïPIÃú‘qþ°ÏÇÄ[=É“õÕ…‰nER+Gæç½jA^ám=!õDeTCé.9+0%ké)³ònýHÔßä³Y°ùž• ûä“I² ¯›œŠÙ‹x¹=D,†5$C%³)nMGÄ:ØyÜ€…Ÿ1º« €öø/r¦t8)ñq™°"UüH§ãÕ½ É;Ìc(?sÊBÕ$Ž-ž‚ Zë9y¾®]#‘åyÍÂ$§Gœ´^œßÌÊ,y*÷1OuÖäÛWó3¯ò„¥yç–`#­°Ã¤ÐÌh‹ˆ;Ç2ã<¬0¯€<ûdóí? æ.^¯†_v£þGmxá;ð `‹÷LðT¨@JK6ÑüäÙ Ÿ ’èaÁ1Ö—„©[‘gÐø¹£Ÿî<ºHÄÞ™Ó¬¬Ž;$h¨™™Ù.ÈÓøðr‹|ºZþùÑg,d¤fäyz8ˆ^ËûÙ+Þ‡*Wþ öÛí4LÀû0Z‡Þ‰äZ¥iYCÍSÿÇ ì2dàYÑ!+K*h~©€lò<’Â*@Âö›g‰‰B%üØjó<¡Ø£áüv^°@/C7üèÜ$[ãk’(³8œ¯Ý# ‡.Šqáùâ|M9mUú»ÈÍÓ,Lˆl«K¤¡O£ÖôÑŸð‹ 7±²üº¡<Ùy÷ òIúßöãóøÀV‘\ˆë8é†%•؇(£“Ä´ã+ü>‡o†F˜¨¨„ódΩE\šO´ÆÖ¿œ,¢·ü (ƒwXïEù­>èpÚ{KYå§Ù%mt:èÙž‘Ùb¬|bZV¢UΈ ¿?ôTž~9ùËÆ‰ÿ⬢ÆEo˘Âx‡ò„b "Ìä ˆ°ž|‰y"êì2ù‡†üI)‡jn—YRq¹û+.‰=“ ì‰}"¿¥g«ØD©Ò$•öÅøh,©.ŒŒz¾È–ØféáÆ^Â[¨*!ŸC*}%Ï!àü«5òd'¿Êèh»h¯VtÌhi“¤ùì_êÀ‰+ÀGxÌCÀ'JB|Dšßáî4 ÁÐ…ý%$ˆ_bmXqè$¾ø…¬Ý ÝsóJžKYuºSðyxT>i‚SÞò5btÖŸ ÐÓD¿]µ:åÎt;ŠÿéñeNØ2_ ØˆŒ›éŒ1­7¿@VÄZ¯NÂýmÖÞ®–¾Ìžj×Ý~"ÂÌJñÐYŸˆ1‹M?›¦ÂíÂ&DrÕÀe’ΞÏÍ¿½Œ…¥"VžMÍ^ƒ•ƒJ´\_[+ÏÊ«`ááéñßäŸD’*q_9²ñAo§#í8&6™–:sH¶UJ‰ËA+|’M$K37rhåÕ•È©‹ÆèDåÖ&¹vÖNyš;MÉ ­ÓOô®â-Âaz]°‡Ü¨Õa›xçvRþ„»µÌÓì‰?Æï¯ýgw¬@‰^ˆЉ’¶ÒS¤ É´¬qa° ¿^–çÐuöÓ½ò˜#ÝÂ;õ#gÛœÌR…BzOƒ8¼?ÈêæNö ‚ã–2Vbrzó©cç³c0xލ¦/Ñì æËÒb-ôzø|ÚÊ—ÅÑKç¬а z:ÿ9Ø•]ÿ¼ÞãpZ.M…™¸'ÿW´‚,»Œ‰nú,3=²näŒF‰¹¹M—t*}eþÂf¹zúVÎ\¯šíäàݱŸ#ù[bôFf7K+ÕçÃí>0¿t±/;+VìëP8Ì•óË%IôÌ~A!ñÖDZCèÊC2>öƒ†7y÷”pQ–Ž^’t+ŒCZQǧBQÝ™E¢`ºè;Š™ˆ¾[?™s¬ÕîX³rKUvëg%/º¡N‡°ËzŒið–Ô lèT|uÒ@ºà~Éü å7üw|Í$çxˆš.Hdþ¥êÇL|:ÂÊÑGg£ ÜÀáH¢Oó)ØNþ"ëhF{e—çþnfAkÉìHf6œÏ.<¹Äͱ»äWTh7>:’ŸV‚•ù£†t;ǯ ãbT|âYy5ɇ’$0¿…“x%Ãb…Ýä]¼D»ŸØ5ý`q™q”†é0“Ã£ÌØJ ù5nò……AJ^Ÿn*/åŠõ-õær'֘NJ‰ßÈ«Xc{Ä·…0¤ºd¡0 ³³Îø vÏÚÐL»ûUí”8-í÷<'­yaÑÅ*pÒ;-óš9’/³aÿa‘5co jÒ7‘6¸UçÿqY –¦DDÙ^kÃ#™“Ï&å8+Aý=`±}v¾ÄÊôŽeGy¸ æQ¨Ñc‡Yi¨S"4Cœ•7GgøR°È –å3X;O1;^k'þ‚± lž¬·®pú¥aÈÅoà‘Ä2¶lâRð€Gl-è8nkMí<¼5H‚³ÍÍ“`D9KÏúx—£ÖÚœeTeºùž•Ð3îñÂKU.ËMDb ºAë Ç<¯Ü¼Tø\ñ­Äòff-1 òÍd¡y@l¦‹õ.OàÓAsXWÈøýR= ‡-Ëů¼Ò8Í Ïç/@>‘qkïœÐ¼¼—JK쨬RÙ µHFÍñ(àö¬¼ŽoÁÖAZ>*óÒ›K²ìß\ÃŒŠEåSÒvY>,og%e+­V¯¦ ËbéqŠ2z{èpÒ˜ä½ìœgä?å² ó‘%³<+öî·jÍŸ(.†çæ±¥ykÉc-™H¬/å©ÀZèqÙ#£å1À¸N^Ëk67Q@{FÿEÆüÞ^”¼Ã=UäJ\Fôå›/çzY%² "´ð,˜§º—…›ú4øo%ì‘'cW%ßQpÛžûDº©; 9à±8°š–¹MgjôQ)x¯nV/%('ÒÁ'Ñ9›å(¼ÌËÊ&òÈí¤µónÒÁÓ ¼-r6'?³‚sòS5ºz¸;¨D‚ÍS”0 ;À£Æ°9Þôhò¶ Ô¾BÀ^æOßIŸø&.A¡;®Æs÷¬ì;f MD½üN}>#¦`ï/b;›<[u!iÀÛTʳxMñ$¬±'Ø]\.¨/ð¬‘ÏÛI­H™¶B4ÇïŒvv>}×DÓÌ7ÎZÉX}ÖjF^…1—è=¯Q,##1Å.ûZþ;*'`°!6BÎÉ'™£œ&OOÝÌ]vå VfYÖоáíž³ £¢©¢ÍâyÓ26^Aaˆâj(ÌÃãT|dÈæ·ù¿ø1V²f ¾Wïg\ó3™©yKÎ{çOØyq${Y²|ÎÂÎù#dÇØ1˜ HJuÜ^žKÚyòp×âoêáîæD§X'h‚•[{~,‹+6åóKLT„&íÅáÙö’ŠpÐï¯2:;AãÍÑ>•ê²FËäuÑÃUÙÌRyå.?¬|Æè*›Ÿ‹ FFNI&XœÜ²Ø ÌÁó0ß‚ñ‹´[3ûç¯>&ös`•ÔP`9öW&O<{Ön(ï#º€YG‘M².¦GâÅÌ`½`?dåãµÒH2ËÏ3f|RÍ|’//ëá“Ä-è§ó´’ cÃ`ÑÂ|Ÿ‹ÝÆŒ„N–ø ^BŽÈ)4OU×l¾Õ5~耥ó“Ém‘%–Ù<Õ!Á2~gɱ’ÅÇÆ=h*ô1køUYSøï½öº0\èÃæAjc‡Ð…Ù“)ëç7Åv–\¤°’l;Má9 gI}Á»Ë6a 3Fç­²ˆâþ;O1 š{ð ÈK!ŸDò;ítÑRr#ÌbÏË«Dû`¡lXñJ‹Ö‘iultß:ûë]0•¥5nñø™É.6:>?-,šm ×EqL2ÙY’bnýQŽPj0v–*6‡‡ ã=Aô³îºªaîì¿,UÉ…ó­*ý¢ âXv•ÉÝÙcìÏ”[ãÁ‰JÓÎY k‡DûqZŒƒ È•µ¶âS<ö‘|ÿ–°âÅþAxDRæägÅïó©% IÊÅh qÎfÒ0ýgð^ƒÑ`wÆ­óJî {°N"|è€ɂ˜ Q÷aÊ,‰‡{"dÅæ©iÃYqûÉ'1ö@F–ÌÛ ø´ÑO`ÁÌ…è÷+>Rüø •h†OàýÓaŠ?ðôØ«…ƒ†Ç(^R“}Âß0Zì×êcÀÖ‹36åv.böÇM–¢5£¸Ã`¾¢Â:Â÷'õ8 Š~£XÞ OE#H tÇ]¡ [%rHçÊëȤxŸsÏX¤wÊ0ê%;7¯ÇõæçÉb%΄ÑúÂ)ìÖeYȶ]•1ƒ|ðÄŒH/,xQñ;¶q0¯êÅ‹ôjcÀ…Hœ§×ðš@³¬*ù ùL\€Çf>X·du¡;òŒÂE’` bÍí½á(¯Ðíãr|EëÀžñ!I–•d½YXRÃh ŽÏ2“ ¢ØöDT@Uú’|RáÑ*^h¤pGQÉþbIže?͉/ÏÇgíejd &¦²Ä*ã#þ-vŠLZ}²ÀŠ‹>—È®½ÁÚÜ'ËÇÆÿEbtãò¹È€ñ©í‚tö‰Üt‘qzãy7ä‚,ÊXXË9ù)ßaÚ(:A»ÇÄl¦§ÖkEž½)ÕabÜÅÒ˜Âz‰6‘"R Ya6†^Ðg(´*+Pr:8Ð |gfÞ‰W±xÉhðTQP³ )ÖsQ^i— ÿî`5â~Ï[pš˜Tø³Ô2°F\jÔ’KÕíÊiëåù®`–øÊ¬š:¯•éœwhêÂVçää~™‡ª;\òƒyÑb,bJêIßÊŒczF¯ÞìT:®O•Ó~‘G13¨À[QqÊšA/^¯¹A¼bGJœFƹDóÙ¸fWèAÉ܈Ú3Œƒ%+^Ý-'ßàŸSÿb¯øX8U±tŒfBÛ- n=à=øDÛí-åÝó}ÅǤ'‚Žt³ËÇäï¡Ñù½G×÷Ó—fBð^'•¥Ñµ‚{çS`‚ÝÂ÷¡ –k®jgJ\^|”ÍU%B&Iºø¨§²7îs‡ƒ¢K$X½ ‰¤“r|,/» QÕ?‰NÛg²ï‰|Cx(;a~òÍæªhbFB Äù‹|Q ç? `ïi M€¹"`›Sé»6¸¨šMÖÉÞŠ×A"Õª@WG?Î*¬Î*ˆ…@oöb~>K&Íz³×¼  WfKK¿FĄΰQE6½ŽM”‘ƒ¯2‰ÞWôÛlñ_2¦ªÕ{é iHáç¥{Öü¼jNF WY=ñ|h{äcÉKÃÇö‰°&ë».{â·jÇ ÝÔ¬#G_™Tœ–'/EEÚd7xYeg=…ÏÀ*‘Ê]3VÙ3{kËn•n¯±+Å%0€w,§C·ð¼ÿ˜L"%ã3ã`™¥ø(ÿÕS0¨É:ñ>œ!7F­Û½áïCä“TÃ!5xâIx&6ÀêÒ\t\ìÿü|ßöÊ×¦â±øt^ƒ¹ËFQý|elô¢Égñ¸ŠF`®ØFá:“ž‘b6‘w'NÌÁ°ä~ægð1™^½ûg!‘3¤ß%N>wtn s bM~E†2J½ö1 ^ ÙçA‹’K~¡S,b/ìƒb ùï•äÀiÚ$JSü¶½Ô*”õaíàð¼L-þ‘5&ý¤®ÐvlPäb0Z¼wðî˜Ñ©“3ö5±zÓƒóƒá|Ïåìè­ÊW#~æû¥y-_ëМ¢Zœ`'ä{ÔÌ˧ñ±äY½Ì[Öˆ¾Ã"Þ5/Kÿ?|U]%¶Ë»²{E÷X ˜bõ1SöŸÝ°ûü%xê¼#3ý43Úãkv“m##[ȶx¶ÄWGBׯ¢«87'ÁTûŸV½$Ÿ< X—oGgflîpÞ{x¤ÂZÍȪ£Åù‰ˆ¯ÏoVåÓÈÕÒ¼ÚmðüŽÙyÖìì>&,[‹Ù“QHö‚/_ÙŽ‘U\§fAé6ߊükeá³ÊDˆ K<ÆÏ¼«Ô û/ó´‡B 1d¸ÂÒ•(­±þµÿ䉿Z÷©™ûe9Ñ´=ÏÜ+ócßXË•¹ÛáÃ9Åð¢t€X”sÀƒééppýþ áÖô¬¿0ç!¿V®Ñ-áý‘–3# <¹]{Ve–…=è4xn¾ƒÓø•g”:RœÓÀ—T3È‚ó°Z Â¼±b’€ëÁuV×®U+(–‚îçðÈ’Iuµ#ðÑüù{¾ÃúXzë]»W_É)¶U±ö|Fü£I¼ï2›óëß7×çŽûW6—öîó@ï¤Î9õ‡3«^=ܾ¹º²ù^{^NBÞœn/Ò7†äï¿óòdÕó³óµŸ§fÈ“Ä}ÔÒ‘tvš†“{qÓâ™BÍòÉ@ñØÈÛ¨êBªæáTù=ý'Å 7¥Óó1 3¡­EÛy°~^çg4ªxrÀ Ò…ñªˆÁØ{ˆ*ÚAæñiùwÒµ1º¿&cÃèÜ`uy$ùóÍ™™í mÛŽiÇ6¯Ìý=û¶Ç·ãš™ÍÍiõ³ª[«O¥¿Ë`»_çÙûËÒáà·õ±9çþòô9XQÿ2h(‚n°=dK´á´pD’ŒãÁ13ÂgDqJΟ×Ò‹öŸz†âñ@28Îúa;æ$þ¡+„h0²dÒðøïµVDHô kàu{¯»`âÚœô[Éðª9ÝŽ9¹õ¾ô+øjûÊÎ+rWÉ5邹)½¿¶Ô;¥#Øécyfý£töx¢:0wº×Þ˜‰ósîMºFü Bþ+7I~¸ÙPÿ[>騭ƒe2ûåïåANœ’Ï(.`-ø'üI–»ø2g©9‘kSÛW¼qVQFÊL«¼žÉ[‰’Òì¡<ççÇö! ŽÈ÷v¢ óä—Š¡è¨A/ç·0s0>îÛª›#ÉŸJoŸ·6O¦ƒÍäÌlQötMú¸Üœsm9Óÿ•úÐôF¹²i>×~$½®¶Gfå©;ÒIú†æEeí£ÕœtÉgUÔÀŠ’ D»rã@)Ëy)Ùr Ÿ¯3/¯*™8Ñ4cgDqU[óL1üWV[üˆÿW$I%‘#Âꉾ@BX×dfªapäC²vüܰÕEy%Ä=:¢š›ÍŸk&5Mç´ææêŒt÷þAµ4'ÚÏH¼…é`¥Ë啕×õŽôûV½­ýp¤ýøô\[_ÒLkÏkÏï^^º¥÷ÕÅé›0­×»[ͳS†zm¼:ã4R¨ÒJæ½D”!#ù—C§ß¼x¬¢ §W‡A¾ÿ 7†ä8!.é•ã‚ap^lÏêa¨X Õ‚3ó¯ÛP]œu§5»¥÷ï2/÷ÿÝ–;nÞŸÎVýtD<2­†ÒÓm¯Ìüéqµ>`þY½™>ÊÇäV…×LWåM‘)±­U‘Ì9Yé-Õ¢,`©J)8Œ•¨LÚ*Þ#VÀ?’)‰O€ñüTˆ(¢Ï¯u6DÅÒëE”Ht©Gýãà›–ÌÖHØüsòŽ*ßëE˜hI}wäø˜ÜV÷çæóE±{ïKgŸ“Ó rvfïîž/ç÷'dæWÕ¯oŸÛŸÿÿ"=¶¦×ͬôÌ9;]Þ”ßëG×ë¨úèôˆø·zKX+Vbj3Ã2¶eîä“Öòø÷"A¤]ü‘ªZˆ~ðsDvHH‰L`À<ú=ðw«¸¥'ücˆÈ7*Q–¢Ä‘TãtgÅN çÙ/Ÿ`7%~ñ‚tªkº-ʬַ_k«~r³srúymŽŒŸSMÇÓGªý‚CÍ{Úï´;6çE65kÒnaú;÷ÓýdQ¡Ig„™é)~oº"k¯õˆ̳Èî¢XAþÂ@ä~vžn§doÝ]Å_·P]<¯Xn12LÉ÷|{QNñõïôY|מóv -.EÊ)cÆ$¢ä™ùäØ,¹&}Ÿ¬’ ù‰9ó~Aúx”FSÓÍo]{NsHzN®ïIŸá¬É»ëÍí=ÑýIénrƒ®NÍþí]éöµ_ôÿ¸ô€;!ž9—¤sòŸªÍÑŠT×?N7¹Åé uNPo(£€[»fîü&_"CË2–Âx1ZQ_õ,ç»ÈnŒd䤷œhÿ†jöÓ*@ }Tqž%_Öû`‡Z11ì‚%Ý’N4Æ3.rpXzT½-÷œ«¾OnzUz6.ß}ez—-É­=o/íœß/¶ïܬË×›Mí±é‰öHµOvûútüX è¥ÃÍ 3ó=Ó;n\dàÌHÄuõ…͘zïŒL«%[¦©ŽB—F³ƒsÐZnÎ^Y#ò->¡”ŸÀg`ÃD øú¢%ÓÈ/‚u$Be¸J66Žç/òäü¬wÙuOpWæ©9Ÿ KDéFR:í#¹Õáñt»Ù waf2&ó˜ ?:}流v^ÙÎ šŸ;>vOo¿/6§6­f§7P'øxDÐá„ôJ›¾W§dužJßqùù´t€Zމd-ß’§ÈÃð>̬ÄVJÅ“Ãnõý˜©Ÿ’e¨®¶CÍ0{ ΋é` ê7ðqµ’s/¹Ož¯ÆåiÅnò^µXc©Ô =;?›X”¿‡Í_Ð~<½ ÿ”}Ü/{·O:Øí}Þ-3Zš}Ý;ŽÏlÞ×Þ‘î¦ ÛYÎÞ/x¢úu5%¯t:>¸×˜•ï:éš>)çþ/<íí8¯¾2HpBF¤¾lçXÁ#² r3´Uy1™1ö/ÂA0iˆh-ÔJ_œ÷Ck:X½³™ØÌŠß;ýž†b͆‚gS2‹ÉÑé%±q rûñš¬Ñ–öÀô󺢾=Ø~CæÚ ÓÈ¿'Gî·¦¿ÛÂ`ßäÈ|¹¶v—öG~V5ƒ¹óãmÝË2>'¤Ç§ïò¿eTK" êãDëàûîü§jÕ‚r²SòŽ"Ùkö ÄŸüLþsJlyé.ž*8!§ ¿OÃKÍýYN}à ÷À–ß²†ûÅ»}¨zN÷¡æ¢ÜƒrMï!Ù-7½ì^{p¤}Uî.yQ¤ák¹Çåñü|U^qSî=kö}iô¿ Ó9®¹®ym~~t$ÿütüÞ)ò°98ù`ýŽæÆÜöö§v]ç•݃ußfzZÐW&ÔÅgñ ¾_&‰ö𠜠ó\‘ »#ƒÍn‘r,ÞCždÍädÄà¡lÉÁY9!>9ŽÉ.LªnoŽî~³=­ùhnæûYn?|í(Ï[žUxFvq}zž‘^îÏoöIÈ߆!U¯k^Ó¬o?Û™¾gWS›Ï7_HOÈÜïuzi,å¬0‚CëÇêcš¿5íÊô‹›Ñ®jW·/7H£Ý{¤¯€j$h¥òþ9‚¹‰.‹C*QóRg×ä5OYý“WåŠI–Yòx­¾‰/Í᪥ZODebõ޼›Ç¼2Q­Ýcí«Ïkšx-×fnÉ–¥[éò þó²“Ïɼ¼y ½6Ö­I_ëó“Ú4?nßÚ| w&½?7¨ïÖ¾¿~vs@dcïtËz^â xL_ÌMww7¿M·ÐmíOÛYÍËšk‘ 6i{âjNÿGÔ‡—ÂO㵉çAþZÉÈþAQRoM÷—3šŸ·w‡=Ü’8ÁåaÂó3ò™é‘QêIyè¸Ý÷µýùSÂ×/’«0#ÖÒ^ªNÁêx}¸%¯äFñ?¹oZ/R,R «HH‘!²Ø¸çîñÈo¬Þ$»)'·iÞž³6|gud`ïðø/„׿8ÿöæ/í§‚nKƒ mf?ôx8þßÒ'¨“ÛBi¾]í,Xø·¥ÍY=pßÛGëûÚß´onNi6žžWcåòÌÏ‹ÝÝ)Í æïÓ„‘ѱŠ–\ <àõÊœl™0q ¾±œ‰p†Yl³Tˆ™iñ‹ÄLà‰gàÃSâóÕR­7¡úhzÕ=»ÞXßX×¼»=©Ý«ýkvõHòöŒÿUчcƒ„«ßÖ\™nn'ÙÝ~C˜ñ–tšž÷ÇêËAGªñévRVn×XÂc¶åë)áÓ§Õm.h¾Yš>ôXî:&óß!9eU$+2: Èiu{GNËYhÙx‡ûøš–“}}XèÏÅ ùò%¦+°Ÿ`í½\ƒ þlö¢ îÛ'qŸ5éWõ`3'{õŽÜÔ¹pïèæþf[s_nªZœ™”™œ—Òß²v2Ÿ†Û^‘{ÖæÆà^tdC}k~ÒmfÆöO ú çWÅnËþMš}:>váEé§{ydëæÈ„ ˜lÑ›¼ïF>@Ô†ï.#G{1|¯Š5ÙwÜP¿y(õß*àü«.]M›.0jƒ+9LoØSÌZþøôÌ\löÈj ÙжÙ㳂x[#ë†Ç’þ®oÅŸŸï §™íÕý«{wv6¶3ê¯V_«æÇ6ìtÜ=ú±KVê‹éúÃü}(‘íþOw×ÞÍÝ[ã¬Ì:‰:7w‰]võËðŸåñV6ÿ“µ~FFnïʸdŠòÏ!¸:ÌO½hɈ©PÂi·“Rü_‘ÁNæ*Æ,JŽ;Éù«Ék¬FñyyÖc|ïéAÞMékg”ã²Ï/ŽsV{Xg\{l³{nê|¬~{xýªhÄö úûšgõ?ÛÿgçÎ`sCtã—Éyîݸ8^àî‘÷ÀÿO5ÐÞùßNÛ_6ðÐÀ/ºge]ŽŠï4)¯4™¹Úž¿›¾–6GÕÛã OJr0ÿÊ깈^Ø<®†Ñ©S;_jÃXwÁ¯ÅÿÛì)]ÀàFuX˜OPCS2£*¯á[°8OHôåôXÿ/„ñ—ùôt?¾ùtû`³ª]Þy¢y~û·Üjôžp>ýߪ{ê{ßî¿6=QÿÚžW¿'ý±ê™ÁÂŽv¬ß›þðUvù3;Ýï]Ø»¯OûßyÕ~±z ²>kbQOõuѦƒ³.îÑøW}d³8ã›4Úš‘—L³‚ï˜@‰ Ûkq?‘lRNf |©šÿä)‹¨”dUåx|¾Ø×ÄX{|Y¤dLbþ;ç™Ë"É_loKüöméÜüŸÕ²úûõ‰‰ê^ñ>'òýÛêüÌáðÜ\±¼sHÿåݶ³{÷ºöËñ—žˆ Ä-ùY`JºŸ_Þ}ªódûHçî3»?ˆÖÌ~ž ðïù÷ ¬Ã¤¼ë¼øÍÇÆ›^»ò“¦ªw‰.O$ªDºxíªVHCñZ±a8FªÉ‡=g)p&5À¢ºb*­ÔíðøEuÔ°“qrÝêœs!xÃNÑ~™ñ‰Éyÿ°{K÷ÎæÜ¦&7)‘ž1a‚“£Û‚\—£é[ƒío­évÒõ|mïÝßå–¯GÒþoéôycº‚ß=n}Csmw(7!ü¢sIçæìö˜¬áÆø@ïÌ\”5¾5²²5úôhý¡æ‰‰,ÌóïkÆF…—QCÁÂcå9ÓcÄúÁÞ _ÍSéÿKvO\ÍïÌK &KPj$TÞâÊ4K*MÙ5w‚â¥ÕNÝmý[šÜɾ696mßìçž™·hXq¬û`ÐaadøÑÄÆ¿Ù<Ùùzç½a¸{ŒÞñöýÄM¯6æ 1Ùá ›¤'ô™ígëëb#wïÛ9«·¼éµsr«ð“ÍØæ%Á”-¹eîÈÜ«¸o"#íü ÀnacoÊÈõesÖÊ~Ê òsÄ3I¿wEf€鸂)‰’Ý–æ÷øŽLK)"㦖„Ìðx€>_•:ïkQ2ÕI‡ÞÝ›÷%bñÄíß™ÿd¤û¬Ä²žU/iþœ°§Çû˜}ûauM½¡ÙÞüªYÖü«Ú-+ÐË*í›×^ ¿'÷ŸŒÛ+žÒ.õ_¢ë‹ƒtzÞïWÿ¼ý·viûòö;¹)ý yE±™šûPï«ßÞþGf´*lìÖŒwqF¨v–œ‹ˆUãïNCóE®qV¹Äºñ<‰Lð'ÔÑÒq+ÆvˆcbƒÐA¥›ÐVÜtkuW]w_’¸ß õÚöÈö5‰wÔAƒêw6ßn~ÜÜÐym{Uvïìã¸ü=3Ò|wýƒÜö€Û­«?ÑìÔnnÿ–láÛŸÔß©îŒeØ=·ßMŠ.MŒ÷sYPäøøŸjî¼ yóšcÚ÷FÎÆÖ¯kžh—wWv?)<3‘·dtj?ì¡Y«;Æ\ÍE<—…àª`Åf!ûéª-5XáÜQý)y™Yq¼PÅ‘:Ù½ —V¿ªèîßýPûºæšæÃÁòÇ«åá½ë«¢›×w´3:Û3ÓÕ‘ÚÁø>î7ŸœÝÞ–ÈÇK›%mÓØ{Coywyç–Üÿ•p€¿¤*â×Õ’ð† ‘ç&2r}¢†¶»tŸÑ~%ñO¶c¶Ô§äÆtŽ&ìØ™Yu8 ÄÇVƒ„êðù´ô.™1u%â¿Ö£Lø© hF^©ÊA\p8¿³–|Õ“™Ù×™áÔhÇÒø‘Ççο§Ú?6祖âeõÝÍÚÎ/›q¹ub=Òûlÿîìúkr'Ö‹³Ÿ"ô´ÞÝøŠõªñ+·{˃‘=Qä§åŒ“Ì¥ú~q´E™±š¼Au_:ЬТ²„;µ7å7sÂooÿ«û¡øñ÷dçî«~–{.¾ˆÆ¬Ø¨{ªÔg¶Û‚ý»g=¶E3VÄÊݽþeäû·é=¹ûŽúãõìÎmíÕ¹!ÂÍS³63ÃW†7lŒÆÌ œ9¬9°™ØžÖÙ/8ð£¶ßÙ­ù\}BugïSc>?üìT\˜1;ßDyí¸¬¸œ¦JAÙQ ÙyfBvMü£›ß¨“Á˜ÈÛ/ó[<ÀΨW(ÂnÍt š’§”÷«[oû³ö×ÕêØð/Åš¥¢)¨Hô}KvsïöKÍõá.+ƒXÇ%¦±!Zý×jN¤`—üvIý–ä‹>\ÿ¬½¹™X»úE¼Æ'ª6RsBê–÷få]'Do†Ãz/ioi§u®ë¼«ó«ö}Í!ÍåÕ÷;WvO “q쟈ԜѽÇá0\Ùz¾,OÆ 8²žó2¡ßoÉ”À/ÚÁó‡êÈyyP”Ô©8'Åà +;57nï›Ï¦ÿ•›È®ÎœöŒô/+]β-üô¹¹¥ûÒfiìâ`¢G…Çž5™<‡ð{f ί¾&ÿÙæ™?ÅØ%+8'ÿŸ–õ;(ï?"r¿S¢æÿÚÛ0ÐþwóŠXÂ+;+º_ïÛ>«ùKnGü÷ª-ϸֆ›åì¡-”ÇÕ9Ê_‘ ñ Ñ^ݺØU8½!£1°—;Á ËyÜ dØ_Ʊ6Ÿ;3‡q±pŸŒ—¿1–ì©Ýye3%wÖ>ÜÜÏþµ™í¾añ§Eþ×Ç:.Î:å>óxµgV—7;v.h?˜Û/ ìeívŠ„Œœ¬í;!XpHXô¯õº³þhçG©šú]{AûÕö²Î™o„enkŸjÔ®Šî°Ï¤^ ÓÿKüR€ç ÝE¯E¹K´”¼³X®X™ÓN7›7¾Cf¾#&"c»ÆãúT:”•Ù\ý©ù`{CPêªüy0·ù=Zÿ8vêâx6ßÉ kêO„­Oò3 Ÿ–ù»Ùô¯¹×éöꌼwcsW{Kâ?Gæ7ËÂD>ö czVVsBð-aÔÿ/7^ÿ­½®Í½’¹eûÛ‰„~<ÿß¾¥³g;';r|bׯ—Ó{ÉHUg™='½bÅ ”jhŒtzŒOWï…f‰3Ê볘2Žä4ä™ù»8,ps5¥= =*·¹½;qé_…¥^¶ßK„·ÎîI>91Í ± çÆO^]˜^¯úMî úMsGr9¯Êý.¯k®lc9÷ŠœôóÊyyýš¬Á?ª&öäßc;ÿž5º³®sëçÿ&pdnV_Р穯¶wµNOÞðãŒFNá0êÁXœ¶Ëþ;ñê ˜Ý3Å 2µRN¢”ÌÊw„Ÿð“dû挮 ËçýçæÿóRƒò¬jz²vccÑß]wCð{—|µO,Þù‰òÎɼ–0ù½# „×*9ßÞPÿ†Î™í©Õ“±î'tÖ·Ÿ®¶å÷+"3ƒ˜ÿkâÆËÁÍ­©ý]³5ñÒk“O9 þïæÀöÿ5W5on§„ÿNI öMÕ³#¥6Á |ƹ¡’ñ5“÷¤ã¢Â²Dø/¬Û.k%FâwäfF~.-U ò%ÔFìí_{VdàûÕσk/ŒU—¹eDzs[|uøúš ùa™Ï¸hþœü+þýTî†xA}Rÿ¾þ?ºózÛë¶=¦óöþ_ºWŸõ“9ß©ù]âDýÈÁa©ü\ýóæ+í%Ñ K³ŠW'ž¼¼]ÓÞT?ÒnnÎJÆáÁÒõÁ#a'|äw»­ÇÕEoh´y@tY 1õÍú_í'óòÛrÇrDΚÈ§A8.aeÍûyòÄÈÞË#±“³ï/O¥ÊÑâU‘Ø#ƒÿççÆú‹Sq`b¾nŸÙ­nŒÏŸý›ï÷öëߨûtÿ¢öúΑ½³{[{;7/ŽvôóÊ)Ùã¿UuläüÌu¸9-·¿ÜÛ\^üXRÞðÍ]ÍPìçgj7am ß+ÙXú®Î]8öÔ¨E.h5&ö— _ŒWüÛ µ ^Sbƒ|`»¯²ÀŒá†z×ÙY1º0>žÔ±õÛƒ€{DÞßíŒìÔ¯š5÷Wωä¯w›™xYîsù|æ¿{ìÚá<ÝHÀÝÕ¢¬Ñõ/»cú¯êý¬X÷»Ý;ztßßu{wuXb¡ò#YQuÏŒ%üisuüëEÍö|ʉƒ]¸)7%¾§ÞÞþ,Ü÷ØT¡ÈQoÏütD\k`/yüqÕ¥ƒ*öåçÿ’+Uò¢çâ<â¨âçb©$žg@&p¬ Yóy“+ «³—Û;Fj¬.ˆÆ#þÊ«¢3ãÁHðó"3cõwÏmX“ò³)Áö©õ`ïßûgô>ÐuçË oî_Üß±ýH$g ¼ï÷ù¤ßýöˆ®6ÏkÎ[Z­92ö`ÇðÈ_Voo×wë|¸~M"à“âûì™jˆbÛè9®nŸé´ ñ ±{šÌ×Q³ífÿqd>QRª±+dõ½ïélÄ–:Ͳ4:·uv}Ow¸»6 ·Û|¥^Ñþ¢=±½&»_'nÿ¯D8ß8êù<–9Ý[m|/‹ìžŸxøžýïö6wÏhkë.î?·sgU¬ÿ}±CYËß$.4!·ÇïÑlŠ­‹ì“ózØW¶þQçµÝ'²^ë¢íë‚CMp@T—~— UOóFw*–®{r:"bò<Ð 2ÌÉìDÇDŽDIŽuÃȃH™ ˆ’gÅgÆó[û·2_Z=Ðê²½µ]Ûùz{^çáæ Ùû߇Ï. £Û{uqäx· äØ|ÿhuB=¡ýDoñÀ“½wuþÜIÅë.ÿìý£÷¢ö  ÞÙéßGÆF“~”¬ßºàÝ‚X†scY™Hó½Õ‚æ]ݶ·©ûƒìúñDÎ(÷͈qvg"UñÑeQ ³àÁÛOóÁô±z±Rü'ãt[ü#p¢M®*Ú}q?'a¦dUU~•U;%ð­A§3qàôÞg{ë{/îŒÄ—›m¿?ã_?gÿØÅwGæf{Á+êïµ¹#vàŽþ;;_Sø~ü¾{ªõÔö5½kzhoŽ~LõoƒªSâ÷ŒoTÎ÷S:/¹à«“ «›ÛÛ£ºu?×ùF¤ïÀpÐeÏŠÌݾªf‘óu&©Ì\ìÛîí‘ß`w¢XPîGý“ºnuCþÊùÉ Y õt¾càˆ9S§þ.aƒ‰;½»:²}WÿšÞÏsk×±YÓR ð‚Ä/ž‘½Wýõ®úþx€3Ø3Õ»¶Çõëoè?™ªÿGéy²úPuK°®®ïlfõ¾Ðûjçþ¬Þ®‘ƒ™ùÿé{<(˜ñTµwtŸx…“Úuíöè~Óm:ë2н¢ƒj€WeL$“´‹`m,•j@~öï̃“3j»HŠ:0öW(¾.Äèåa‡êU1 ã_²jK¬œ¨ŠÌï`ò.KrcCõ÷zŸþóÜâ[¯^ã ©W¹,^ÛűT§…½ÝœÙV¼$÷[žÜÙÞ?º÷‘vbØÌm©Žw»"»{GôýSͧ»çõ·töˆÌOÌl÷®ï šŠî–u< 8pZ2 Kµôq© º Q¿( kAÆÓËі̳òZ¤–ÿÊŠ‰á–^-Ø®hp5jÓ|Ç3Ý·ZNˆ†9M:7Ÿ-Rl5¼‚ö¨“Ù’u88Üs}"ðïêžÒßÖì&üú›Ía©êúü(îmÖ ß-þÜüHÁøúâÈîšáú‡‰>û•ºi^šLÁò ßšä¦ôÖuO OÜ1èq`¬ß× WÇg^r^üëfe÷¨¿V=/@4Ç©y}Õ¾ªV‘ÅÅSÔ4°^$ë+§Äɲ8ˆ¬ëæþ7¯’Ýe?yÂ2†ªÞD;Ä’YëV˜Ÿl* é&…ýʽ_íÛ^Ü?­sóÂv×ÎêÎAíQÍG²có‚d«ƒ{²w+"Ó[²?N–ô_A÷'ª‘ÌúõõÒff÷‚öázZbÈ“’)|~Ó¶å]Óâõ“ê¯cWE>žˆ¦ÔaEO&K^¥ŽàŠÔºiiköAŒÂéÛQ,ƒfÐßžÊc–“ N;”Êis!©²{FB0ž2¾XÎ¯Ó Ùo^{* ñ$1¡™ñž•ÏÍ œS¥ÿÖþ’î+Û$7qx¤úÁÔ7L Þ dï'dÇædþë³—#™K?<ðŒð‚kƒï³šŸtooï¨o®ˆm»½Ú!ó>9¹-±¯ƒý~G4g0–ôw£HéÎÀëS7q]îØ|¬^öyHâ "ƒÆ¥â£t:PÉ*_OVaš3€jÕ`˜êiܘžÀ?Ñ]p 0}ô™*܆àþØ“øñpþOÓ0†éažë¢nlÛ¿weÿ[™ù„ìöÑë%‰åÌÎìÿ™,æp¾›”58(ˆ¸SþלS¯IýÛ†üÙ5LDtºé'lv¢_¬).ò+¢m&2¥ÎSËwã?$Ý>‹9Q‚îzºg¡Ì†hÿõÎçñŸdUÃ=FR‹öÜêôö“½oÄê”ÜÍâXº5‰ù«·$6ï`™¸ßÄüÝ;˜ø¶ØÄ;¢ËÄ‹y}û¼îÿæÔϱ’¯Môle´c¼j$žð²hДT>”lá72÷ݳ*Usƒ‡¿«65_Ϙ/easƒÑd”ÝÆiôÔ¶ÓÆˆ¿Ë‰bÿ0>ÌÏ+¡A•=g3`%ßÁéè†%Ê"ªùS]ÄŽ¨Y%Êo·ÆòìòDõêÞeá/÷gäï7tf¢u›c·~ÏÍN.Žì‰Xܺ29Ì÷'šó¦ØÆ‰½{»¿¯'¤ú³‰ò=˜Ù²`áH´eרýÍ‘š{Ã~“Ùó©†ó/­o­~Z¶Ùì?+û´(£Ê(¡9ÖþÑt';Å|Ô4;ÿ –!w#÷%JNx†ÐÒÙ(lAž‡¬Ï ¢`OÅ('$õ! ƒ-åd´ùÏMôÅ9¬“«éÝSµsbw]gAç¢öã9±²G4÷àŒx0ŒvF"šK²Ÿ;%pd¼ØŸ5ëšÜfZOí>³wUnºž•ÜÞ ›=’IÜ+ügr^÷xµ.³,ï[•µÛ)`mÐïáêáT ¿²}K}LøÇ²X`¶XÌšÿ¢R†Ëñ”skÙ‡¸¯zoÌ×YP,Á-„m^kþ⾺3Yÿñ JÌC{R,[Lëõ÷tsžOá ¸‹`ÿTaÐ|½Uÿs½Y½u®šÓñD’‡²ëKFQí¸Xµ¿F{ׯ‡qê¹®¬ßØ<ÞYÐ_ÔyF*&NhÛü49%h·Clßøìö±W&pb´é¬èÇ„¬àkà ǷÇå™GÅSéò´U¶w$½D)°uÖƒ#éúž¨‚ác¬þSj!øK½Ì Óá;²ý˜mÀ÷`&I-iyº Œ) ^T åÆÎÙÝ_µ#íùÁ±M‰Ý^Ÿùªo=;çÞœœ4Û=<æAþ›Ûïvº½úÏîü>™ÐÛcÏŠ¬8µSfLZÆdõî‹< q°5©€ú\òßOVÛr³úÊàÞÆì™ž[NœóáT¤±Ìâ5X ô“ÝbïJÍ‹LO';æ„'=ÿ„f½ü„|”î|ìÓŪ§óÕ@ÐÒ§æ5âÊ%Çæu„H`^$ñ¢äô~Ô×¹%u­+3ò[ë©ÍÚXÀ6ë)©èüS⻓²o /Ü·jèÜÞØ=®whïÆT¶½!òggï‡â3¬Î>Ÿ•ïE ~Pý:qõgÇ"ôÃŽo^\ÿ¦j›-õsbù–dì2šã£…"ûN*A@#ÉÂXðzù ¾á켆–æõv™Í#ÿªºÄ !$–0+_ñŠeÍô ‚Ø2“_ã_𠜔_–OÛ7öï€Ø#’L{ªóÕêºúŽÄóǤ®õï±õýèðqAÄÃè?{Þ„ MNlNûTüºwKoy²/in »ˆ¾8µ0Úó±°Ã=béþUý ù¯+Âþ\ßÒlˆý¡Þ½Ú/#Û†ð,˜Îμ‘V^ù~äžmcü.ˆh‰‘Z ö‡÷X R£G™Eá9Ò] øÎÃy«©‹‘•aqVg Gf ž™ßÎn6ö>ÖÜV}#6uËòDî¨ç5ßKdã¬ú[Õ]Õ—êß'vûñ·ûO¼¹7³ÿpâ››;§§V䊰yâ ÑŸ ÍI©“_ÿ¸šSßUojîÊÝçû6×·6o«çÄ߃ÃE?ÍÇ™R ÄïÈ®h¨xf§jE< ¿‘ÝcÕñ?ï+Usbä´g,«Ç—Ìë`n5ø O™›9YGý57&tHõÅj[û§Îìvmû¥ ×ŽÑÕMÙ맪ƒëͯ³ÿß«NM>ç#©æ|fκ¼¥sìØ»ú¿8eà¯Û÷…¾,ûî¬À”°ˆDÎÛëâì.¹¤>;à{’ ¼2·*?Ϋ‹ùËÄj`»y°ø©¨ó°ê˜h­¸Й}\V\̉zçßÄDÌNFˆÇ'‚OŠò"¡"=S_(;èfH«jl‡  “EYðžêºæ!TŸe?k£ËÓ£ñ#Í%‰Þ}+§Þ?Óy ÿ˜‡Æ={ìWÆž½ã‹Ç}büK~R?Õ, .î pJö¾D¾^ÝŽmo­öJ.é7é'pEsmpñ²æ©{uwܨÂúJ/6Qk5mæVg‡xiÍ~;ÏÍ!#ý-rÝŽÎߊ”,ÏÓöÂIs>)‘ /˜¢Ó\]ŸDT-~$›b ㉚'}¤Ú)9Úyá9¯Š{jb¸Gדã¾0‘п5KúÛúÿxj'þ’¿/ÿšq׌ûŸvCªžf6ÓšÙ¹áþƒá|+2ÿš¹Ã#Yšj‚º¾¸ùe³¹™ÒN®W‡ï9™$Û%WÎc‘…Ò“ÇÆów:Z.fÁBh áÔ²f~ÿ`¢¯nÑ=vÜOúèŸ×›Z Ëº;·oŒ ¬ ÷9µþŸ4‹­Oåïš«;_ëÜ٬Ɏ,É“œõ1/¸g!ú¬ÌDŒWôBg£Õ´aýäU—j'šÄ»U¼ðK½m—å°2úˆzãLN†=/4Z¤^¬Ô“TOˆ âÜîBY™Ï;µº°½ªY®{uó÷NÓÙÔÙ%'B®l^Ð{xà°f8˜Þ67µŸm_ïÿʰÙ_uÞÓ½aà ±ô7 |sìúþË›“R5rn¼ü‡Ú“:û ¯o&v.ê¬îþ°ySÆæ\æpžª*WV‚eÂKyfN÷ŠaðóDlÌWÝ”÷ZÙÚŒùâ‰üÿ%£s¥Ùr~ëœ/ÁOdNt €û$‰‘[4c§mI¿ª˜‚%SS¼½zSý±ö‡±üon÷ì=Ú{_ûãú#¹Ñü’îëÂn¯‰‡÷Åø½W‡ ü4ç¨Ôtþªj›ÞKû[Ç|{ìõc¿ÝmYŸÓ¾c›^wuóÒêsõ¦Î‘ÝK;K륱7SÂùí?E“NÃvß,½+`¹u+N<ð¬ka~ìötñquϼ'xÉS6{kVêঌb?\âf&-Ldàã‰ê>•“{ýd¾öKœV¯Ãòž¹ùÜ…™±“9"‡…ÍMOE™ŽÀ›3êÏWªG:{õÞÒ»²Ý»ó³îæî@gss~äDÔ [³ãÉàu2=ú½¨ô鵿¼X§X¾—R×OrU2肼gæÏÒéj ßåÊY?µ bž¾VG¦zFG/=g}6+Q2E,¥Þ7zBÎË* ev{D"ÝÍsVžü®dç^Q½!ÿ.̪lÍç‰ÒÎɸæå“d.ŠtnHDfS|Z«w`ô`‡p¡½›‹Ú»s^¾ÛÞÞÌ«A³…²{¢û:oÑ@Už4¯Ì[•.ǧÌjùìfÉqÈâ;z‚•óoä_†v²}nå àPPFB’ ¨ÏæêÁº¨*às³3ìÛ}ÒäœÐpYÖlKÖkS˜8-™—hÉÉØ­Ì¿ûæóx'{e?6ç•"VscA&|4–á=9qSõ‰|_jnÝR¡>ƒÆ–elÔžy–Ø…Ó?vhFÆPN¿ùÐþÐzhNgDóJü[í+)vjˆŽû+fÊÛÃ È ¯A„Ð:“ VAÍF ±\Ó¤NL.ÊŒ×e†³³ç·$H¯òïäÖ09¯’Kõ$¾¬§.ˆ'±,¸ðºàÃÖÄx¦ÇZ¬Î+É|‘PMg“p5l¿Ž·Û=ko7D?ËÙ/]}¼—#o¢¢TÄýì"}ÒOÌ“HÄÓ½åÆfÔů‚·Özf¸:»Â##ÛKó9Öçä_mÁÐÒcH'#¬/³<ŸvDVEJÑ5yÎÂŒ‹k.>©TiAz~ºyA«b‡å:‹<Ò• ºUØ9ÄC°jð@ü“$`°f,/N~ÍÁ*ÏÍ×ò),ƒ¹ã[² r%â„:eà“üEìݱZj°yGö‹Uç™ÃS~ˆ,3ÿI-úHVÌýè+òsVÇY™Ú(±O¬ÃÚ¬' ë^TÏ)ìS¼'S»çSIY”áU­à+Ìg^^­ÙmÌ„éNWké~àd,¤zãàØ„»œ1Ç ñ*¹r(¬"Äh1`6Yg Œ¬dŒÜVá*^¸0¿×S†V°@âì²#ù V¶t¾µc ²÷nЕeÉŠŒä3Å¡X˜2CÞ˜•ÅåØHlÿì„ý÷0{R]rü>MÄÏSÅ9H84´ßøïì¼Îé€ñà+˜ÏÐèOøÓì…»¦ ¤Úñ¹Áß#™ø¢:iD½ƒ®%L˜‘ùܼ#'ƒ,+É0~1e¸ “Ø+ž·^üñkíÏú<³‰¹ðSïññ-ç™í®F^éP©vÌëê|׿÷´b1bÚÏãÿéç}ôD~ @6ñN,AÌœ†Ð/HBöqC8‰Yð’dÕáqÉCË'¤e~cV¤Ó‹¦­ä÷ƒ6ún$„×E?w‹Îã–öLTcN$ai~¿xtü¸©  bãæÓyhâø2=v›¤B(øÍÛ/–êé¼]ÆïŒIüS¯72¥Þ‡¥äÌX¶_:‘úi_¡Š³Ðfµ8âäA E§^<†X&ͧ¥FÁoð•‚ZF ÄÊœqsÌ;u_„)%AŽŠ£“þŒ¼V¼3bx{¢¹î¸r¾ÅØHš“-<ÅRÇmñ?z +Œ>9ÿÀÛóµÕÑë†D•ñ¨É;H~‘eQbžs©4 “4 (ˆUÛ+6ØîøTòIÒ h£V ‚áíÓó¾i™™Lý™9*EF¨×K •á ·‚ðLF‡Ž±ÿx¡¨8M4o«õKjO.g›ù,c¹;‹<ã†tXÞ@—S+ã¤6¡rŽ<ùi©÷o‰*²-ð—§!‹,›†?ñ¹`Ÿü »gÄ0‹¶yÝü|WFJ#Åo`“™Ê/’T–Jšx´ÆêpM&Êi ´=Ów¾°ýåEɳõ6þ _®•{è T-‹ÍÈ –¨Ga„pVï =Tä`:‰¡s%úÃBcfgT˜ÏSG ŸË7àÑ@VÊ:áî…û”¨I%½lŒ<†Ï¡af\¢šì¸{¶h ©¦ j>í <4v÷†¾dH¥¬_Ñ%Yl»@GÝR'þEó`›rA»PY‰ˆØ—‚¬$ÏÞ}Âhà™;Kài΋Ù}–¦ìÕífX­I£ûn¼´möèΩ1Â0Ôr°¡4Š—J.Ø5û§7©ß-ÌS`kùk/èió:˜#6W*AÉ«Ÿz td{xD¤[þ£0|ûÃ+ Ù^‹à×Ãù¤bÝÄ…J?vzf=±OLZnZÓn?§ƒbLÐ_Wzò ²Æá„zxÍÊO­7¶¦2‘¬ÛÑ’±%gâ’ÖT~—ÍŸš?lôÁ¼ù}¼x®ø¨>™,¾ÔËʲ‰8KËtc eT‡ðØ'ò;˜1ð DAݨP$Vo xª{%dÜàŽM“çù£ÿœ•óIªIJÏQ¬ÉBº¨X_Þ I'ᾬº¼ªÑ”ž4ðáé9šYñŽ<ÿÉaÏù^W´õ.hKéÜÇÖ@PZUºbâ®jœ ÎðܱŒR+&»#›Kxðt³t†Žcl™UÆ­ _É~æ;8Lû'd}Œivç`$Z÷bž˜u¹kE]m©´Ü3ütRVSŸœ‰Ä蹃åA9ßÈùYczÆ3ÂN¦…`]ü>7GÑN W„"ö®äœ#}f£.Ê©.ß³Dtaø~¢lÐõ‡pªå ;gpX^œOŒ6adÏJ‹˜òyÑNc‘Zlcn¾.D¹!Ó]*âMž{Ü%3ãŒ-¿ >¾713%õžB¯I1]¡Sö…ŽC¸2k¤^rÀYëÁK*5 dªd‹äq;HZt7,}”á0îŒJ¨ÒƒþNË­ŠjaV«ÄCå‚Üm‡Ñ]ÜaptFüzäy¼gÝĽ³Ÿ½³ŽV\ÿ؉G•NåóTó³tl' U&˜·³:º“åÂW1]O2SlŸlyOéïwì¥ü I;¡x¤·*|Bïs¢ŠÒqÿ/ù’:2úSš,2±Yèâ+5çÞÉ«’9¥v€|ªÉ‚i"ªøI9Ì?€Á2lð ÃÂ1YkLh—ÿóå°€òô¡Ñ϶d‚ ˜0¯’ÇI*DfÕmnÃö«Pá:ûÿô_­to.ñ3»M“h÷YCdž¡“Ï"x& ¸$ï›ëË[³Ò|/|>X9RÈ^@!ÖbØ{«€‰àÝØ*Äqèܼü-~yÁÝâÉ`û-4 ß>µXÜ‚%ô’ÑN»Yì é^2ú:Þä¸S,‹ý7rŸÊ’ùÎ.©ñÀJ>`Æèú³?ØOÊÞ˜W/¨¶(ïö‰ø–™°‰sòÁ'ú®xc³â°À^¹¿KÌZMÛ6;kŒ1zwÉØg‘)öÃxì'Y)ÖSäo1NïÁüxd á"ÀXB‘dZåÖÆ"ûÎ:š?fNÇÙa¸¸8£ÿ;:+ïvkL‰ƒ^ÐF~È€ ìgQþÒ6=é°I²ªÃNâÞ]XŽ÷‹ÞÈ&¯ÈÏÙq ‚ʲ¨ÄQm”ì’9’9.#6¯…­}:z‡›Ñ·&cÃoKo;ñ?(bîö‡ŒKÍÌü˪òäá>‹À·õ•Ï쌅½Þ1¨D q¬ÕzÑMš0#ã˜1ú9ÞiµùX$—.¼ÜHuaDêYÓâ­•›xíÙuÁ¥K^§²ž’ߒŧý6ËWÄȰ;&nËÚBVã…ðÏ™fä¯'©¡ò„·/ø.dÕ_ÜkŒPäVTs0?³ò¼ÁºK^2‰Eˆ[Á1sÙ#Yñ—J4ƒ-~{·1{s ]:X‘4{íÅñd5J ïœüliÞ{ý‘õ`í!ŸO‚m4K” „MÆ m1 )‘%çxÔP¾ŸŸwºE¾p=þ”ø$ õû&B#B¤¡ø îŒõ”¨‚ȯS#NŸðxäùeȈóžÊC¢¢=îƒ5yùtR‹âðóó×J‹IˆƒO‹Ø+€ –x$Ý¥3d’feä¤x ˜]e1FòÙðŸ¤ØQ¼ÂÁÝÄð28÷pÖGÔTÞÌ\¼+Âã€Ãø½y8[H{h ÂþèÑ69:OÇìþJ¤¾°+ŒeÌÊoŒ’u´Î¢#E+ o‚tðšÙ Ùy=çô>£f'ê|ªg²ä,°™ÌË÷x¼Õá¥Ðhç_`ƒ˜±8 ¹‡CÖˆ•!çxáܼžfc¦¬$ »°>• »iy5 ó|hâüJMÌ—§ä¹V–y.V0œŸB;ûVôÜŽ@6>+[T¾cð÷¦c¡fÞËÊÌγy…Xk\VÁ\𼆕SÃOnì„Sâü)ç¿X-Ϥab}Že/K<©Í³Ê'—¸•|¦†‘ºãP͉•µ ‡ü«Ï"Ãù¿¸§y›ýäpŒµ‚!åµe¡a9é*HÌÔ§[Ç’·`Ëþy•81d-87 tVËŒ àwÆï=4˜•ífÎ`ŒÚý·Ê…eÎÉÿgf–¾7ó²Þ¤•´BØ-Ý%û¼W§ðnÏÃpĸEkx†ìš˜ÚÜÑYA€¹ùO3–ÜhöʪÑQqÅ’1z¯Ã¡y(´‘m¨ó3Q@²¨ÂKTÁH°ï±—ì'9ãÐçåš¹ÑrO6݇Œû--tÏ#Ù¡‡…­ _âüü5Ú-^b/‡òYÅs†Þe¢^ØÁH¾¶ºn¥bÃD/ìšû'=›Ÿ‹¬¬•œŸˆ{‰]‘Ï"×X3ÕÐçQ{CòDÕðWÜe\ö˜uQd-ùšª¦ÜÑÓ‡3£¥1V‰í"Íjè®}‡bl-ôlV‚Ïi4u^Ur vGÁ à)"Î8Hy-ÝcÍØ ¾ çãôÃaÙ³âa㜅gC`¾WA voTõbNðÈó‹µÄ<¥T€@]ž$#}¥‹[ÐD¢ì‘9à;tÖüqcï1'úE ’÷Ã|ïñ9‡’dÍ1^#&—l×ÌÑ}ƒ$ââ¬ÿ‰´˜_'»O¶pˆÁŒ‡õ‘!±¶,г‚âŽåô,¾H†x”h¢)ªöa>Á\Ä<›ßZðÆÜ`.y‡Ö§ä²`õìÑïveˆ~ÿ`¶]2©æßæ³KÔ…  uFA>É­9óeÉ^¹]–äóhÕc°Ø86¯™%·RâaÞKšŠï&ªBBÙ.’ õ  a/gä™Q‰áîdI SE*Ýñ¦©ÖÅ>à‡ÅÀ#­¦[:`§ø{‘qvbªã?CH³²vô[x:ûa…EJÙ{Ägò;äé¦ÈB¨•beÊèY¶¡` ›Åk/þ1žÌ·³ v {Ø+ zË«iÔy‹']brâ1ìuÑI~·8(l—[Ñ٠˜VêQÕxØ;6ÓòjŸË6[OŸ,Æéô ú<˜>±‰VËnÉðÒçCx”¼Ú]Äò­D·> 2r’@Þ0D¶Jû =×™JZ&·EçÌ Ê ë ð#J&KŽžÒV1H£‡ ü§‘ÂËá3ç’ã-‘Ú"ý4ËN«aÊhØ"QYà~æGÎda­­¸—¹Ñœ‘-éI˜° ä Ó”§mœ5-ÝÓÔÇÁÕ’‹äÉ“‘g÷P-ʧ—\ Û‡iYI–j³ü¼™’a•Âui8‰eÓÄ>qt±Tçrؘá|O6ÅRdü0º8”÷ñ8í1mƒ?þ`žìŠüF‚ŠM³R%›h…ÄòyqöÂÜhާZÕ§#ÆQâ2ô3ÃèéŸZ‰ùc½v‹•É÷ËSѲ<ÈOúXC>O©¸Q»Ê>‰,’ï)yµ\‹AŠ­!F½$R£¯Ï©ó{Ø"ÂÅþÃpÒÆS*qU;[*Æ ây®h¹–)Å\ÍcæA@l׌JqÙÝÄ k«æ–Þ©¢æã,ÅïÆg­_Ǻ‰£šØ7ŽK°Î KFGIÿX{¤Ï,ÿK|›°¿¤û3^¼WæKÒTV †~jOpbZÂó,ˆMªDH8«f§qxÅÿ-}QY×^^a¶ì?['Ê©–JÑØ‚îÀ\i“³ vK¼šÿŽB]XÎÂÏÎlL¼buêAV¥æqsêz¶å3Öæd…ž³™b)ÖUvç/ŸÍBQ»-ÊFZðCã³'ƒ™ŸfJ¤¦àä–­*ßáÆ¥Ê€>ÉÚѨJŒßávV” ÊÛV€àÈ^—¬°=ƒ˜V}AÆ¡k Œ‡ˆâò¬Ü„Ìó¬Ñ*>>;É^“Õ8$+±=š ª…÷&Îæ½ì=¿ å]³wâ÷¤ºØ)>5ÄàÑñn ”ÿ[?\_°^¥’ Û;¹²->fŸÕ?cÒ>—-¯^†²(Oð©-ET7ã·tY$… ýC‰˜®Îë¬õôH&ß×ÚÃðÁü™—Úßã3SQßEy‡Ûq—eÝ–EŽHÝã¾Ù9·NÏ:‘ h  µ…Rt6±‰æÇî–¸uñé‡|ûb¯ø%¼Â¾ˆ/˜'m‘K)Qh÷?•"*>e¸Ø.=ÄYHÚÚ²%³×ñW ¯™›OÛ%óÇX5öŒÅm™Ÿñìù­MÓ©£3Sí¬îX\Ë~ì$\Y8&Ú°(˜¾)UNäÖ”* :^"o²}l4,~:‹‚ý‰æXŒ” °—€üï ÌÌ÷…±Ák'.ƒÿñËI­#Oüx"Ö@^Jgø¢X>oÚkét‡6"%4µì–ˆ€ó'øÂöÑû$]tX„ &X§"‹Rº&Ò±<ˆpP>CDA”N³³0Àˆ‹ýµŸº±A|~—±ÿ¬|ÇOe¯KǹûÏjð˜È bOéû?¬9€ë¢ˆõ”·1ÓÍâÝ‹‹Ò?:7>ãÇù|8¿ß/ñ„yÁ¹ Y«âg‘¬\X+˜^ì[1Ç*³EpƒZ´½‹ø s"«"nÅOÆ~eáɪ8(¾`¿!³½Ã|§Ç ½ÁeÈÙ„ØU™û¾A¶9Yc]ÕæäûRõ½ _óá§’ x b"öty,Ã’üž¥·öd”L=nŠBúǺc§rE%aØ]úaíùâÅN@.\ghE þ‰6ÀlC>½è3O\ؾñßi’Ù‹rû#ÊRЈ4©9¡ÿøñNá6‡g®GgÆ ‚ò›£#"€sósRȲÁŒ`âù”é™/,\”×°2‡D œçZ?º¬ÌÂaÝ.y5[ÆœKLAü”[%ZɆÐÌâ@f|(ý ÿ³R…‘Ëlbã…/yZq\@ÿÖUõ™ÅðùüøE9qM¬Ó¬ì)~úŒÌü™áyk²‡ÓÓ§d0ï^—§›å²ÌgŸ¼ÊžŽ Þ-É|Jdg~>¶m޵­€^‘Wªçræ=VÙ¢7%™0›Öñþà1Ì-#º@.q>è/O±àeÁVòO>Ì r@ÀÝ2fܦœuÂ1Qù?ïVùÌÿÌOÅÌX Œo0ãZ›Ñ®ÌW[òTùú•ù¤­YƒI™û–üý|õ×ôŒ9$º0%+4+ýóÏŒœœéX º¡z~t„_:”w.É*,å+"‡„;çqiF©Pô½ÄO±$»dTîóå+ѯ.Õ8 Ü)d9Å؛⣲¤N¶™1~GÎäb¶…3‰µZ?ŒÒŠI±Ü+r²mkƽOöÓ ÖvCäû=9ï´=w¿1möI÷·§Ò¯vŸðžssÆa\îþ=;}±nÏŒÈ|!§¨•óAsƒ!¹_((²&«uT>k(#§kn7*1*H]˜;Yà'ØA‘E#ç;ˆ˜ÉÞä¢b(<²¬þI­7¬hò>¸í;Y/<Œ”Ñ&RÆ/ù':ÅN8_¬ðÚê·9Ñ7#»èöµå‘þ,³2óC«ÝÒéä»õŒöÎÎÝÿhŽn¦×âóϯnk¾Ù~«ó?9ùÿXNyþ©º=½sfG[ŽŒD¨—_”_•š—pzh¿¬ñÊŒŒ–ÒL³ãÛöò=Þ¶WFÀNûnŒâbÖkÅ(‚Øió(Q|–°Ê{àO"âN*G|7’ïøª Ø%F/#‹÷Ê)•¨ò´œpùgõÈ̪—ÖßnêÎËÒ%æìœ8}`¾–ÁÛšµ³€¸)4<8+Ê98½zeôÎã¨VÂÿ†—]Ž•âÁòöŒLà똬êCóeÕKn•ÿowÅF§ege@È€hKÁ}¢,¡YË”ªŠàã`¥>wRíàQ¼Rié$Á²Œðéjw_uZóÿu`VUWÿ>gŸsîzïm€iÌÀP‡îÐQŠ‚*66¬±Dc/±·/¶Äö}5vcb‰%±ÄÄ£1öˆŠJ¢Ø#¢þß÷îÇç/0÷ι瞽÷*¿õ[k¯½*}ƒ^?8ãì›éøu?ýÝÏKî@ãç¢ûÆÖ‚X-ÐÈÏ'£O£øw¿F«£z=”ãòn~U|eŽ@ÿàøE´£˜ÅˆßÝËk@#Y‘°ÈÇu–U–s–¯mªÌ…~*î¤t=”ëlìü W9žØEô Rtÿç!t㈮é>*Œel'ÐûÙôú¡\A‡ØÿÐç]Ò?§;ììô/áYú9C·ˆsÙû×ôèììÉbß¼/žþ‚„Ldf{a™kOöìˆ%Ø…=´#yz#O£Tu@‹¥U3Û/ƒ®µWcE®b*=¼'YˆjEkÃy~Geþ?Λ8ǘۨIÆÍqÆhß}a¾VsDàfNŒõd™jü=˜­¦ìî"ôz2NÛ¤? wäÇq²Á2ú€ü#™@o‹ègº™ÞÏŸÒ徉Wõá'œ{ze8œŽÑŽ ɦКuÉ^眤ý°‰£èÕ>]F‡Å¸“3îè‚7¸˜qçy¬É³ZÌFžI­5Š7Æ‘u¯6ëæ“[?#$Savßú8yJ«#d‰äÝõ•V ¨²ÏMÜ©+DîEË ˆåäzÓŸ‰´‹;†£SðS‹ÂAô/9)}6Û’W…Ûð`ÓVF3‰.>qn×J:"}ÀÞÆÓ³cÂ1Ùnt;™³èw÷DXAïƒ9Ýk"ó¶?ýþ?¿eO}䊟¬«èN·¥m*²Q­òóôî'ÐsYm$cD¤.+΃ësàÎ…þCRœ-ÿ&N’oÑøIq¢XYÛ§ÕkE"ßìŽKNÄWi;dÍzÿ% Y5gí‘ÎΪ²}è÷ñ&çÀ¨zÐÛh*0’î=ÍtÚ9ý({1;"K³õì|ŸÀ;»§Oð÷ÜôÎÓø:™ÂÚŸÄYÛgGÑy ÏשWJÝù¼ˆç±›‘u®~´FÆE²:>»O© ëùœÅ\¢"Çí½Ö-¯è±ú¯h‡V)7âÛ˜¡× ‰ê¹§XOT!êî‹ìïÊýe©Í#5ÓÃòïájVy #úY¸—ž]Çb×^ +C;Æ~¯/ ÇÇÉ z=N³óé’ö½ÁúcB·»Qô-á'ÏæŒà¶éxÏVº}MÈo DZö~£ë!n›TšÅ”kÕêE^Oo­W‰ü#>Q“µ1ó!JÒÃ9â˜ÿ‰ÍŽÊä:Oj\—’^ËìémœiåÉo ²³þX/àž“S’oéì6™ó¯'пãïôz(3ÎRº B7±Ó8Éw:ãªaŽ6Óhó¶Òáf òq}Ðûª–ãYú@5¥o&v¼—s‚ÂpúDLF ÌÛ¹ Ë(7&.fÕ‹©±‘Ë'Ëkšƒ16÷÷úIc#/sçæÛýOkfä"*”éóˆÝ}ágäȵÆõrþ²""¥<¶Ÿ“O’ü4-».Å–ŸÐå<ñŒ§!éFzØw¡ûK)û>ÔÓõÌ3±'bë/Áò7ÒßÅâ;à'ìp: Y8t°=Õ¿N¶¡bN{=—®ŸÓµèþF©¿‹wÔãÉsø|Wݯ러€RÃͺ¦úwÜˬ«ç®«{ð¼Ê<»ˆAÎЬ–þÌœ€^ΘØH5Ö·O8/î[M,SÃøÕ°zæìü|/úvÅvÍ¢wÕGÉ`þ=›w ÝüJËÖ‡„Íágô8ê˹‘re_úaµÒs*Ön ýâ&ÒëçsläôKû&YÏçš‘¨ÕÈÎïéÿ5—§“«1[Á7«™çÔÖ9V÷ôè錅=Õݹ¥‰Õ•Jµ½ý«‘ªÚlü£E0®R–d=Õ9)mº¯|iûä·ä“¬­ìÎ܉ßäúýíA<½³+Ñð3Ñç&F4nEÐê«°£ã8N9{„œÍãð÷éð±4Üɵ[“Ît†\LǬé“6o¹Û5ykr/çs—¦ßqnÖƒÙ}é¾±„•ïžQY«2–Ð1ÖòLVëûÄú/÷Õ™95"ÔwÉýD¿®7·¾DTgü¥Y~ÜÏzê•1–hH„à,i#EFW1ƒØ_·’ŸåŒ#3r1ý mg ɤ‹*ܪÀzcùi=ÍÚ³Žû¡çgd'e;Ò×úËôtޝÆÖr ÒhtüQf`-+Þ@Ϭ)Ì×·Ìıô¿»ˆsã…ßÐ÷o9#ÞîÀèWówDôFbF5f»äE´ãjrô_v\ [ÿä‹ñ´„r‹Ê¿œ‰ãV.DEÖÛEÑÆª2;V8‹ÖÈX+*zn‹ÚƒYεآºtm±&»‚.owrÜ™ÌÀB¬_là·ôoò4Ð1X‚£èg½gø)sq$øæ`:œuDBÞM.«²c±7 ç­XÃ&4ã[ÎÊLÿ_Ï~}íɘŸ]Ãqi+OÑÈS4%—£§¢WÀ¨Îç7;¯Í“c´H Ùˆïªùb:WZ/¢ÿ3Š—ÿ’½ûXwj­ øØy564Ïî¬ië½Îª£UDcÖahëéÔsG¶”ÓOŸdÑÛìpH¿‰1wAaþ޾ßA°{7²Òßç1>óD¸1œËÙöuÙ'É$:=žÎ¼udF`FbIoAúwâýõ`ƒóè.Z½‡äOàI+]!¿1ˆ|¬£Rz]am¤øe4Òõ#f ­Kñ*9#;ñ;dcõof­¨mˈ­í¶¢Ðh×øOk¨tƒ»qV£¯¸,YLj–ÑÅñ'Ø÷LjfËÙ€Ðç?ˆØn?FrSZ“ ¥÷“ýrôüÆ´GØÎã\ûÿ!þ9ûe6 ™Œœ 8‰Î¿Ó± À…ž¥æ)GbÏI_Á‡è¿µJ‡€¾¬¾§ÚçXW ôÜæõ|R-™yc}yc+S¢üÊçËhÛ”výHìkîÆrb"çÄŠÂ~}ˆÜS3ß-³$c4’hg’>˜szïA{×2Žÿ“ï`$gàÉVáoM÷;ÑÙîSNÂè‚?{—ó[ }èÖŸNO¯ÐßîQlEý"wÆæíÈhçsŸFߊýœJ/Í«Â.œÿwR61{NÅUœ þ’‹ŒN¦?Ö‰Û‹Ò`½©,q¬ÕŽUÁr$J‹ü®ûßµâE}„,¢ÒïëdÔÙ[k™Ô4ßm‡:ŽOYÜ—È¿–^WpÂÁãéêБþÿÓ@3‹XÏVòžc<”ñucü=A9£™“1i¿0 x–g¢wÆ2œú2Ú‹~—ûò©CÁ@°îOÍd³²Áa3žÃ8Ö\Àj¬ ,¤ì°úëÌÕZ[£ÅZ¿ Ãi4,_ßÝêÿÄj´ü†ùsuÀsEÔ½¼ŒÑdÝ6ÃíµÐýÌ’ó5>ï;"ÕF¬ß§­YGúþž~ç»0Êñس“YÍ„xzϳ+ÓÛ°ÌëÓIa)³öߤªÒçóOxJÏ‹8‚Ù›Êg¶E¶áúaxÃ+°¨ãÿ×!r¾Æ„TÌÖ9Ø•çÖ×k”WsV™hµôÎÚ9»™i·Í(ö·7o!û%ÿaå¯vv‘’Y2dݺØWßf¦[ìm­ùucwX_¢°YDéÂß°i)±íOÓC9ºeàNT;_èyõ;òÜK±,+ê9çÝ‘ˆý8ñö0td!ÖáeNNYŽœÈ¨Åû!ýÓ¹fWÃŽev&~9½›ë?O¯ —òLÃçjžÙÌ´9(W?2?qwFŒ{Ü×9ŠQÚÃB›ïþB£@Gã1£cCÆœ‡²cöÍýdF„î›KÕ¡yƒagZèÛµ„“ÈnÅÿ½´õÌÇíâï“Ý ~[Çó/BÖ3 ‹‘‚ÅxƒO8Õè<[?¬äéáX<Û>¼¶·ûþØo™É™xý•p#“aENÄ~L!,ç½ÿ}›v KÒgÂ1i5:X`Ý“eÖшL–Ö p¥]¯n¶Çœu11B–5!Šy̪ÿJ±¼¦ŸuϪ±o¬‰Tbd¾¢69«þä»k+ÁNqã²ÏÃ[ô3»©ž¥{±Ô¢õkñc{36uý(¸¯ÑèýXÐý´eC²k;!|Ö‚zÛƒùºÑëm¾±˜ñºáï‰þcäÕèÏÃx¾ÙáþðAè“_˜í~>!;-ÌÁ{ å9†òxàÄ7ðºà,„W™“vd6ñ»×ÓïòϲÑ÷1Ø6hüm¬üaxËÃ9ù¡Ùšpb8"+gùþvÈà"Æ2‚ÿEµîù²†Í\yDu¢WÇ¥Ûy13ješì˜û¿µzÖ÷¸ÎFÄÚ½ºv%Tl£˜RVÔ(CY…ÏÇçå jˆc:Óç÷¥ä±ä…d*R»Œ~§[aÃ;1òÉŒâ $wópý!Ñý×Hxle-–~‘ß×tÄ}‡‘ÌL¼Â™¡ò¾¥ã‹ˆ˜"#SAƒðgÀ£~œ–Ãü{]hÈ7f+‘y¨ÃyRÇ w©ç3S ¬ôŒyÎÆåüáªÆ;Æ»rÀæ¿•~c)¯°K¶ yc±³R¤­':;mÁ»Sx-9˶9ùÓ?_HDz¿§Ïç6 ÷XëyèáÌÇZbÂg‰/BÇßÇ[TnSú`o‹¥oÀJ¶E~^CzÞO¾N¯Ì'•.*+½…—ßÛ?$Øï8º xîÈ–+ó_§Vƒ´g%Ì iÙFó¯5˜V_[ªîÆÊ:3œ>­ë+S¤½Ó"ÿŠÕy%ŬŸ™E= ½”™]ïê¾y÷s*? ù.ebjr6z]ÅÿmˆqV©çÙ©AÖg6Ö®•Õ;{½+6ìð¥Ø=¯f®ÚÂq Æ6ôÁ6¾@tWÍïâÝ‹’»Ó4!ÿ²ôHéáÒÚì?̭اà=Îø6Vâ<Ðç9÷oqô <“Ød ¶X}Ík×NŒb$ã,ˆTýíŠ!¿gô¯³ï†Œ¨ñŸxÀu•Ï7òqdÆÆ‹Ã»Ÿ¶OY|±Ò 2»M VÏáa£\͈^‚ѹ3¼Ÿd=×bñwÂÚÏÅîA:¤»æg•Ë¥m³?¢éï'KA<«È¼ID<ˆkÏel§%·†wŠcŠIå»8n,ÙjìßþŸ‡×¨7LáÏ4té´á0N¸$Z_ˆøÔzæhÇ¿L®U™úD£W3VŽQþÂÊwq¸ÿQ_«ÌQ«Z çH.YiQ_Œ{Ìøo{ßí’Óñ=¯'33òZœSÕ/|F‡õÄ}­¬øNX¼aX¼1XÀAø°û“ÞùË¥Ãò^ÅñáNûÑÊŸÁ)vrúK KIÇCNÇúoØ»tIñlq{yE±'¾¯•Ñ7rŸ‹9Ir{¤d:p)º´ êØ’.âéšYÿ•'–ïÕ·ÇŒ–õl± ?eôòƒæÓ¢t·i/ô"ñ³¬Šþß=?Î_dûõ²Šî Ü!v¥YÃŒ_–ŸôO;åǤŸ¦kéÏ;/,í ÂÙ}ð$ìÁhîñ°¾‡¤Ï$G„NåÃòоÅ´¹¡‘\3û¸Û‘¦7'w‡æ¢MÑ\¼\´+_ÃÉ~Ó¹Ó|Öþ¬ÿ¯Ã„0‰ù¼†>Òÿ%J¾íYÈi«›a ÐÊhdäD,²€291h}x¬µV"Œàeñ´‡þm®]¼c¶Ìº èíee:Ô‘X¯aÝ‘¼“s´‹1ÝXž|O_Ò1È|’Ù ÿÞI€¬ÎgìS°]—cg³†ÃÒ¦ây¢w©cÖÿ—0îW±üC°ACï'Gå½³uùQ¥§™Ó÷ш©ðÈÓÑ“?¥[è¹*\Kt|JX’eœ—³ ¸ìP®Ø®]±LʪHN.3ò²ø1Ú·:fñŒ‚e ­f0'¢ý;³E€Ž½90êÜÄlÙR³èF2Éu`ß^Í#YÊ.ÊçãÇfëLDÞ'Âø}‡WlErÇb‡uXƒ=ÒG’5aS–q~óWùÃá·Ø³ð/ —‰òº“!{«øCñËpYÖ7ß/} _2 -Fü}zmÚ6üšÞ×Û…޿܄"¯ËÚÑ ü÷|j+ÙrÏc,fU‰ò/jµC¥¬ Ñ­µîˆö[d¯u”ÿÕÆÉê/‡"çú;³µÜÁº{уQ†U>íaÆq]üïAÉ^¡>kå G?¯Ÿ/Dº»°r'²nÂÚu ‹X¥©¼×ƒ¡OË—qæo©XÄú~‹hd¾Æõ~Ê9òÇä·å ³—°j¿NÚzšÖ¡H@–ý;Ì'b> {'@?—rby“÷á>NÇ3ªNÈÏ«ŒÔXlÅœ¹M£ý¸ƒAŽTdd½Šî.'í¸ñŸøÏïJ¶Ì¯ù »`Ä|Ÿ3#ê‰õD"&-G?f  þûàä©P•oÆ .ÇC?n Í`¡z¤¡ Ï÷EsÏaS±†ƒ°CÒ³‡²•áËl\x&ñ¤ã5`݃ñ 6m—pnøIøKØÝÄôÙ“á3°ßšðarÒðr¶›Ñ ýél»|pfü9ÉÛÉèä@õ×FrFk>¹‘A‰qŸ×=Lb‘žùó¤î4rg ¼€2Ć1Cânl?£ë´23ö ììÎég­ycéžð1±Ëcèæ» ¿ÎŒg.'¬BÆWP_5X` ºñEòXÚ”OÊö ׇYÄK_Òáýb8Ý7A…Ÿ%hfÔ/r*Z-R1q¸Xï¡ì¼|§ì6æ˜ôÉôòìÑlDv^•/¨\Ì"?Ž| ýeÅüîñÙ#^Óhé|ÏY0³i¦O;g ^uEþåwä̲ïA‰îð¯hQl Ë;.‰cçaÏ?»'ëUš_<íLk´àoI#1ÐI¬À@N½K=?¶m®f\ŸròË_ÒÛÂÛÈùÑÉÒìç¥ë˜ôáp🉠ÞOú/4c9=ÿ²$µ‚ó¡.Ï¥£ú^x—• É·Ã0—fçWõ,–Q=µŠJ);ë³ÌR8Z=1-¢>@Œì*ºÓ&2Ýò…‘ÿ••ûÝZ»ªE‘Ù’Šu~Vë¸wRFÐûý(5œƒÖåÿ› ÈÎ kÈØÿ=yݧ53 _¥=³CAFû†„,G:&ñ›p™¿÷ÑÙ>ͺ”ÏÅžï™u%Zþ71À— þ•èþ¶ØÓ øÑápŸÂäl~~ov)yÕëɕׇ7ªüÅ¢¥<µháÏgÄús¥\0îzto¤1žËñ[Sj%q-cTçÝÿ«Ž+Æì 0elFHÎP¬T¬ù3ªÍÿSöO¶K÷‘§ Tq=˜tgÝfaùwàß×C¯ìƒd.>|9«x÷Kü~wfgssRÖJ½Ë Ŗ죬{x;é…ÕŽ/lFW†âë—ñ¹pÏhpâæòyœpg€ †ßfÛ=‹-Åáù®Hé*žv>믬ŠzôbF3îÓ‰;aÝý­7”ßvŸ“\¦Õ;îÿPóÕ #£«¬ô;KôšæCµ'îp1¯Üª½ýÀÓJÓz¬p;Pzâ´aØþX¯÷ÓËÃÖtçÅêí_ÂzŽ¢æås<{ k~\ö6ॼ-[Ÿ¾ó× ù<ÉXóÅxÔ½±€+‰ àßÇÂùß`Êwÿ WðoŸŸß™¿]l ‹À¢‘GwÐj©ïôãVôˆÚ­’±Î}³C*c±z»ŽÑ‰tí³„Ú Ùbóqç«Õ¸ÖÊZymÕ³ÝÕíÁEhÝ|M]ò\(²Ûß—¨ohî^ª^æ‡ÃÞðÚ5a[ðÿhøŸùÍ Ö}È/gwN—‡—8Ã÷v¢æƒÓÎÙtz?ˆñ{îŸgÜn¬¬D‚N1Úƒ'X=—ÿš,úVXÀ;áTÿ“öÎjóŸçû{왘ʸ͈[#¶5ß©´bz8ã5?&’ÓXg*Âã¸òQ®ãÞãÚXŸk$eW5cK’˜9;†šŸ™üÙ+™ÏÌ?I®÷-­°<7pbçu¬ß,ž[Ö¼¥‚ƒ¦ –bÏšà;À^—CÏâpλ;=_÷•A¿`nºsí®ˆÿØ-(ó÷{éšp+'€Èv»†^dÆŸ€ Ý™?g¤Ï†?¦Ã×2¬Æ³ `WÒúÈ´òœæ©”[Ç[ËÈ}z9P£ÃÖÞÖØåØž"]˜ëÛ͈”µF{²Ëž d-z¬¬‡s°6j_¼Î•Ù^Ùkɰ–‡ é ü¹‘5÷Ó¯°ämÿ2´c1`Vu ñ/h i“-,?™_›÷Î7&W’ßkÍŸÈúÁŒb‘‚V<Å@" 5ØÎÂìli8ÝØšÌ-E6}Gf²Öp@*S1?éç·1^cë?¬>Õ~Ç}@òXFÁúw1¯œ–qœUsâ3Húc=Ù£8OÚ÷?È‚[¥Ç»NbÝ»1kVvžBýêGÉÌÊó|NncS²Š' Œb+´k?§âý'1#ÁŸ'{¦J¶f©: twéÀ҇䅾Ï6—æ—/ O¨ÈÀ`®„F-à®»aKëÃÓäö¨øÏÙÈÇñÄ#9+2E›ÌYíÀ¹C7²BrµF²Æ>FfÍ»Ðè͵ϑ«YÍ€›°þÃ<Ö ù»héRFl ´¡vDì(þKÎDþGá¦Áõ½M¤·ÿ)(tëãÉ}½é©0«‰‰öÁ"öd4ž†×îïuÏ›«Ž-Ï/O/wÍšŠ¼´ <·j·°€ÙêÈú!/uiè ûy 1DŸ¼K¶'³±¿0–y™‚ü?–ÃÌNF×ð4 *1°»Œ\Ì{È™©12‡'ln_vW.Ï‘X·ãÌû¸Ê2?ž` 3È…‰“eV»U´HÛÚkóg"Ž©|ö¯Éå°zM¬x+X÷$S¬·<;5u¼‹¼F7PP-ÛgIÂ(65žRî]žY~³|`¾©˜_þOqcyI¾’²«<ˆõ/ÀOmù÷¢üÏÒepÌž©~<êLæ`k²[úlò•6;°úK±ÃýA@ú*³Bj¼öÏQø¯˜>J¿Âø(ZA÷ˆõrèF8ƒÐwfyuÆj®»ˆ9b+¡F&'¤$îÈéÅ‚Ë[ʪì“öÄ:í‰hfôeV»7ˆ¨ÄxäAÛóîá–dEúhòPöÓò5¥æò»å#Šþ¥ëÊM¥wËïä=°laFÚ -_$°Ÿ û ÈÓeèzäl çCÍD6zc^HÎJÿ‰ç›Oí…¾Úîæ»ÍRšù‘»Ìxvsy ŒÍ¸Wßfe‡hGpÿ£Xɹr´®µQ‘»‘yåÌõ¥1¯¤÷0r—|Szã’ÜLÍÓçp»“—èzQó2ì¿=o yýVXqkûÚ`«>IZßÑéMÉЬSùRÏò囋e¥-ågKÿ,É_ñÂ~ø?9Làïž¹ÈOÎ'¿NÆ3úUØ„Üïídbº˜ÕÞÿoÇ+ëó}r¹+€«5pâµjÆ)P3DÀ"O³’ÿ”18/΃˜r.#èúÇ9ŠÈQF¸öËóžzÃL ¿ÇKßžŸLAG׆'XÿìYgdö½¤DÓ áøëð‹O$_d•›Ê³Ë, ÌŸÍ;T•Ê'—¯ÍoÏf´[Ù%ñÕÝÑòg˜Æúbò5ÑÁ8¢ÅÎ`€îa0ÿV¥Æ' `ªaÁÌTê§E=ö׊̿ßN”Ê¿ÈMÿVËØüYœcý»Œ±XW¾ÓOÉøº î|Ñf÷X ­”s-cuæ`u~C4rPÖ)|žô&r9Ž~g¹u…¹ù$)ðKg,e´ÿ[leg´ãcÎÇúw±¼¼²üeq}Ö!´K‹gJË÷¯bIvÄç %´Cw–£ï7ƒ[XíNxÑIü%lɱà«+Ò§ÈM@²‡!îÖuƒÝÒŒäųޯ¨¦ ²¡3Ûk•€y_ÑŒ–Íø_æHûn¼ë/&ÎÑÆ {ë?zacd̉±ëˆ€Ö‘{©NvHç«óZ,ßæôîÐ%«ÊÌüƒç¬ÿÇdx=É· Ü×½¸1½.?¤´oyCqz8’ßO†ß:1{¹x¥T“Ï̽ Jê¤úƒÕ¼¯0›×§¥çå7å»ä£Š‹Óñ<ÇD²°Æ{>µ¹~=»»UÌdéåDwâ}¢–Oë®ׯnÆFFÊÆ úSk Ýõ ÿ«é?EÍ"EyùÅ1°_ûâ¦$'%Çï•:æ×qžãÅ{ùâl«ß‡ñ¿’T!¥ïqbñ¬Ü—HÂÉîœl3©ôviIé²ðmòZòx 2ÑÃiá‰bUé´l5¶ÓLz{î0füX"ˆ1Ø»žp2‡2ƒ²ÕÅÞ°eKÓdÏÐ+Ûc,•ò»XY®dÄÈ@‹ØùžÃN„¡TÀ¾|ö©º¢Ô«\ÎOÆB½ .Ûˆì[Ó¹‰Û°vX² /ðZrM6¢ü»âÃÒ{‘‹éÔG_Jø s–‚ƒ¿+Žé–Åv áÎMÌç“™¹ÍÌÁ(üì–tTÞ+ß™j³ùŒhrèþÉ!¤f…Kdª¬z0RÏ\¸×I‹{hÇŒ ”yùOÙjƪ®è/øÒ _®¼è-Ìšh%Ì£h7ÝØÜ5œX¦»þPù`xŒ+ñ„ÕX«SÀúŸaû6ÂgŒ`,3@l{±þ+øùp]¾$ŒáÊ¿$—â7³eÙ;éNa(VÿëäŠ0²tuöC²=8¡wú/<@-s7ß÷=Ö³-3Ñ‘Y¹‰.-¬M#ë0 <2¢2ΜQkÛdÂÝaü§æ«÷fƒä°µê®°¹2ý_¬j7³o-‘¼©Ù/ñ‚þßê9scã"q¥ˆ©+gÕQqaòËb}ùðÊîÔéTQ½¾ÿÒ×у2z< 4¦Â ‘>À °°ó£Ç%p93Cc¾Olj¾õ`‡ç’?p´y”>\Ÿâ÷sŸNŒ:aF¿Ç‚´eVG´Lâì@³sDwÚª³î®cuŒTC¬3Öq}«{¥d¹\wíŸÙøiù>ke„âÎck#…5¹7¹‘¨H¹ß‰hl;ÆëhÜ­¥—ÉÒãë ¬d× ˆáÅüZ±ÚÊ(=ÿFÄ3´"õæºb-Œ¨Ñœ±öÂ^ΦDã1³˜P†h.š³3²wcrY©])˦†C°[>©±àûIP¼¡Éø¯fä ýMy¯‘øí|²¿=©+[³upË©•êŽdô"~XÉ]zc¿ÀŽ" Ÿß±öïReð'¬>JEY‡0 œ÷›‚Z÷¯eÇFôbî×§Ô/Ľ1VoÚÅFŽKû'Z6þײ‰=Doç¸Õ í¦lOŒ!õŸZSm¬Ú}åLäc d¿â±Ò)Øç©Œl.š0ÐÂßêõ6 ÙD?¬ê4üù\pRÆ*œÞ>`ÿÇÛám¢úñŒz-ž°#ó5žx¡X· vâähcr/õ¯£M[ˆ(&°sâþœì¼÷t¤¿'ò¯MvýDxz;¬ñ¶Ãêt`AÅOÙôbM¯IŸ¢za·02°+ ë[üd·5MÂzêÁïeœý_æ«™O~HôðYÒÐJ®lóÐ-Œ ã²›8Or"#iaüÆù‚ÙiÇðIþT¶3~¯™®çÙ])w«ê‘Íõ‹Ýµ\>µaÝ‹c1Ž{[íà Sfü§|È‘ÙmÛYʇèÉ\ |VPVE†Ôñz•Üšû,µ"™.HâyÉ}ù~EgrÒhm_Æz:=€u›ž %îé *‡ýߊW;úId<Ÿ(Þ-Ï+NÎ_Îþ XŠö÷1ŽÀŒ…ý茽4¼„7}_°[XÚ°bB:†Ø«#{OÍgˆÔeª]mퟯÌn*òZZ­¸ÈlX^)7#÷?Ë Zû*þÓ*Aq†ì¬*;¨Ïˆü;§<³Î¸ZÌ4‹g8ƒ_ëÒ½òåHìgð‘“©ÿ”± ù÷&ëÛý“qlL%ª†×¾?]™ý®è^~²ø7UÇ0O“Ðî>Øÿ®È¾à)ÄŸà+D†ž$ÇûÇd_òéÂSáFînHm”X¿šÿÍìûÔV=ýÉï‹xå®õ…ƒø_ÿ.¯kH¬îWÿeM”}»µŽÑ˜Ñ:R­‰1z$.Mj åÎÄ—£yÕD,d_âc“öÙ áe²áµ¬ù_ÃÑè~ ÷)øËÀ8ÓÓz4ø¬ÞŸ¨g\Îæ”Þ+n§R¶„¯8™)³îù¿}:›„ÇÑ…ï“_0}‰£~€]~=Ô—„<‰{4ä-µPføÔéZžÓ:(6k•òÚ¼ \—U›±ƒyB™m÷sÈŽØWƼ–Zïfý£,|€öÕùr†äþÄ úO‘”uçjÞl~·_rn24}.;”LçfâÙÏÐôdø2Vz×ìõ°9lÎ$fàpòD‡‡[J‡–n(‹©fùÜ|Ò±;¨¿QC¼»CØ>Þ›þ Ä0ÛqYrCVß2e¯®ò¼»ˆy\Ùj×MÞZ.@-çeg–_¿&g„6Aý7ckž´±«Iì$o†8vqÒx«Æä‚Ì1Ë.;î}‚ÌfGÔˆ02ûö¹&tg=×!× Ç;e—†e ÿíˆ ž§ŽáŸéáæðMéWmÆ”–”ÿ˜]Îã¬ûÌÐ ðÃZüäÛŒzZ80üyø'óêb¿N÷ w柅á|—LŒ †Ú,/'×§ö¹b}§Õmâ8­žÈ¦º‚äeÌ">÷ZÿêÜXAì¾ÚØcÒ»A©2é±V6ÞWüc_m_ÆÝÕ#ó+Í\gß’c’G²?«²pW3žÁ¬Úôô‚ìhlÖ“Qìù_üØ_9 ~nöDÛ?´?³|w›‡ªÎÈÈ„!ØÌFjF~ú6ò ê¼ß‡7ù ô¿‰LK–µ-6åÀøZímÍã$\vÖZk]üÛ'«ç=ñzDDfÁÔ^uA+WPË¡üûŽ˜9æ·”s_‰râÎ"WYÎKfEË¡Üè#õ¾§Tôgnë‰Cü¿:]›Ý•A‹‡°áÃÑÛ™iuÞ7»9iÞή ¯„_懕Ÿ-ÿ£ýžî´±íáíh×ê†oÉ?rÞÎïoä?¿Köbwüo‹dW†rŸviCvfqi8ºò\vˆhÞXÏŽ†ò’â5]«w.h©ìôä>9sáê­û´pî4ÿí®q±½q“ÓJ=œÒîlheÅ€JœçHËÉÚ“Þ½…Z^+#‡ÀˆOBŠôðl›b)y±$õXò/ÃÇÙÐú—Cçâ¦bz邪í®m÷IÇžm÷)ŸS|Wµºý‘ÅnÙ7T3ý:¼TÉü߆´Ÿ‹'Ù3›œ÷'^ؽ¸0y>›T\”àùd7Ü×d^Ó)F¿f¾äæÔG£ûÉwŠ‚"°JP}7®·ÿC5¯Ý1âzZ B0+¨·PS<å)v›¨g´«ÆZöT‹¹eE¯ÒÄ7D¦a G†óßbÅ6„²Aùfú܇6ô,ÕµmWõy10ÿ¼†ýC;2&ÿÖW_n-½Q:µtt¹>ÿ.}Ì߯±úŸ§·ç;…_$ý±o§3òÇÃ^<¥gÊѲªzå¸ëC;çûå6”|õ;Zj1ŠìžOê¸D;bW[þ[ÖcÈ +75üFoa¬èÈìe¬‡tÕwWÝû‰äŒíÀ^" °ó“Y·ÐÝ ²›©Sÿ¨HK×W_l¥+ÀÃÙkUç—ä~&ƒî·ÏE½é´OvKö›ìOUûµ}¼í´òcÅ´ütâH"¥—“™ٓÉÉéyu^'ñ ö*Uyb#zëWE€®¾²*ï/‚“ýÖÿª)îîqV…Ѽ1ü·þ]$//fup̹Æâ…x½¬èÒjàXëÝdØe˜E Í|Î^tóa„&%·°·q·ba¹¥ô|¹Tz#ÏJ‡Pññ$ùºõÄ4S‰áo¦ŠbwjèŽ&²í—ÖQI·‘<àžm~U¾&|ŸLÅw4ƒx—<_0ò³|G5Ï`m“~Øl…VÏŽâû±šË¡Ñ+ØKIyÕâÉeYÁ!šÑ(Ãêþ?æHåÏímc?CW]«o¯kog<»~¨ÙÑf¨ÅÖ¿êÅô¦úQw Ä|¸zæL¹;Ú§ ŒE½±š2£•IÓõbŽ” m¤|aÜ{§4øY½¥ûgÆ0B‰8ÂDîE–¯ŠU–2ÓîɵÃŽøFe¤–O厑k÷ÁÊDFyLnäÀÔ5õܵ¹Z×lßµÅþäõü¯-×ÊìÈÿè¬ò½¹Q¡ç±ÊȪ»oJß/3 ìË(‰*Œ«Í‹ÄMF®‹yc#%Hïâ“WZ…¨«EÔs«6‚'÷™Äžd…A#ïÚë|èÀY±#sä|Œ=döc·H%VyÖi±åAä¾´^¢óaúnsùFŽî‘²¯VȺuÇuó:‘‘œñ¯•qbæx.Cœ;±zçšÊ7ɧùÍVh3”£è“ÔWÙL«žÉèÉ“ìåLÅèòìâ+g2î@rvÝ“®}Pæ}×|ž±6¥/>B¾SÉîżÈG[ÓÜÀ•J˜ßãRîÜÌ}Õ4{èé<AfÃS#üý¿2 ü»fÕYAWþnÆ®š8KÔ ãä:Ê:ÈyøÊj ‘´ãV–ã®|§3²§fVÔ1kîb5²q†g^é‡]ë¼^½Ò(sò«Î½+羞È݉¿ÝÙ)“ø„³i¬çÎMWÀgÖ?dümäb¿&«ß›jžÏI½Tzõòîÿô¬~”KЛˆÿ<;ËÊ£Hï`|©î8SòßÖÄÅÕ·ÞTù°ú@vÀˆÊ<£>ZfÅÝä"yX¹¥Ì‰}´Í¹Z]£\Æ>~qÖÕ9­ú,_å:ˆ7å¨nb¶^~Gߢo’¥ô™µ)¾­;÷jÚ o4ju†¬ÓC;r%È+쪮„ëÓ•‘éjãÔ,?ë<þx"›ß¢†˜Q‹A䜔6åÅçw]m­V/fV‹¡·±'•¶ÉëQWÏu0‹%'cÂÕЂ*ufí´zö}õ»`”ÏÕíÈ7jßÅÆ1‚wÕâ:[á$nÐêDtäŒjkd0äÿ¬iëh·ý~}…<Š6T¼éÈõ-Ö¸:Ú±–Ê ;&-äî$ÿ¢ÕÆC>É9±.ןŒ¥Ý…å.„èYµ|òMʧëiÇ*ss®”ws ÄíJ“ÿšw‹;ú´OMÜÇ<…¼­^Ë9Ö~kí©¨×“6µd±ƒŸ^ÊÓª¹Vß&NÒþ‹z"¹2ý"¹95¿ÅE6ØzBïk é8\yíž+¨9ò%v_ŽÙ6Gf~ЊAkŠÅ]¢Iû黩 fåÄSÚZÑ€,fžœI5Roì9”j³i¾Cíµ#¦wò}~÷­ø2#ê·1¯1‘ø@k§Ö*kµ|B]U†ã·fLñ™ô±ÖŽ*YrêrÜÚdã舗ÄàbOAQÇdUÔgÆẌP-rUbWÑx­¬„ù6çÖu³RYË /ŽÄyÖÛáS¦t¨?±əѳYw¢©æ_‘¬Y^å[é2æ»8ä*|}iœk3WÚm€Çj?3ãj‡>BMÓûY5¥Ý‹Ì¿»GDYFSF½|·R/¾ÕºŠz@ïiäí‰Çܣë©gŠH§÷™=ýBO©ÝÝ8Ô7=‰WÊÔ8“âIµÖ¨-ç+­×?áÄúN½VžO-6`m—#4³¹¾Ã¹»÷—QµOú?Oæ­ªãV ëSô·¢2fwÌ{GñcO,"0’’ tÄV)ÊŠ^ß{(—Ú8w Ê+Ê©©½âH+头ÞE}PþE^ZX±° ›9v­§ñ¬¤eobö”2£µZô«!k'‡ðñµÞÐ9uµ”`½ªÀjA úq­Ö^üÙ×ÕŒçI¸KÜuvUÝù!ºÖÆÅ“ýÔA£`5KÍ—_r‘ݽRÌ«vE”­,BÖ½»òY#Fëh\#½¯(Mj|™,ý½r§?r úóØkÌWâ\+®ò9Ìõû”C§ÝÀû0÷úý¨>Zˆ¸¼§2®´9:÷?ùÝÚ2í›Rj/ý‚5Zn5 Ö‚h­Ô:õ]íÍÅX@m0Ë¢%²¶º}E´àv!Ôãj‹<ƒT«gOFeÛX¤#(ßì›' cV”¯Ô¸wÁïÔ?ª%úí…kVÏ•ö;”»2£]®ã÷jóù×]ï+X#–…yæˆûŸ¢¤ûØ5W\ Û«ÍÝjQ¢eÓ–k×DeŽS  Ò_úI×YžÜ9UfõÅJˆñw5’OõQ÷|Wï# ‰Q´«¢¿RæÌM+mZ5ï)zÐrø¹¸ÃO|j¾kæFsó1ŽòTfc2¥Áì¦kêlêÉ•5­´t(k«vYÿ Ó÷ÆŽ/~—XCd¦ GTçH""±P„ã)žõÜÅ ’ù5¹Uñ±>A‰“=óo¥ÈÃJœQ—šæ·ºÊò5δö-f5ìEã÷ÛOÖÕ–9bg§çQ;â3ø®V(ðÇ|h´y1¿¡æÚC òô{ž†¨ÕQâ_ý©öÀý¯ÚE­¹^C¼©ÿÑû©ÓZýjW¾I¯+F®ç®¡±‡ÜYŒ µžÚ¿P»è(”Z¥Bô¥­sF\7qš`îF-Æ‘i×ïšÓ×6jSd]ünåSë"b6/åO>·A ê\ˆR\'­§ÈÝUßQ&”Uˆ²¡F*‘¿ÐúýÑ{(bHcv=gÔ~%UÜn<§ÿplfÈü&WWæIÆB¤…õ»clô«&ëµcæ"îRR^ÌÚ*Æ‹î”ݫã•Ü€øTžÄ;úDz¹<©çf釔9ç̱¨e¢QgÛyÐ+ë%£-Tkí ªk;îX'c”­¬ºŸ,FðûÆÌqÚ1Gt©75¡öåeÌŒâ¾;OªS³jøNcfq¤gnë±l%Ytcä¸'G;/ÎÓ{+µÚ.×OÜc„cí¾úat¦q¬zjO°‘­u.Å3J„ÎZc?%\™Ð&èÕq}˜ë/ïâlÇx%ãÎu¼£½]Å —y uU|«ä›;Qó\A€+#ruy?­U¿wÄÆbgç¾+(N#³^Ý(U«àe•ÕÓf»šúR¯s=• ×Ê;ºks8¿kä7Z »ÙútÑOi£µZQÇ­*ÉúU%Ä™ È :#âP¿×\ pZW)}²VMüå7È›;ËŽÄçÿ;~m­ßb|峺rê©‘(G++¯¤ž;#²OFÆ"“xÚßä³)³ŽI,!þtîœQc';F{ÜÂûž=e%\¤&ë¿Õas…~R_£g?ÆXŨQ{hþK\e„æÎiGììºëÇLÏc"WK¼«gÓ6ê ”|×HîÏY‹ĸ3b%Ø>¢òJrHqWºØA4ãʈ…bäb…‚5 F0®ˆ02Ñ΃^Ú8Hÿê,Ê*Ôó~GØRy$í¶èW–@¬9ƒ®ˆ–HÍÕ(U\©ô*¿Ú£Oc6÷ŒxGŸ¬ž«½«~Cœ B“¿jùŒ9\O¹-’QiŒ·Em1’pMDYÞ¹=¾L?ªnjqBµêñGqDܽ³—εwÕ7ù×sG¿O¬®VjwFðÎÓ8~§îÉAÊè‹#ÆwõzZÁ¹9ÏoQʆroó.Æÿ®‡rmM?*ˬ“R ”?åSLh\á¿ú5s1ËäX•ôÈ^èõj¹NÄíÛ'Qä§T‰ä}Ôh¥E ±.M¤£U·ÇÞäz/ïàÊYݣ橕ö˜vnµ ZÏÞ¬¼’bL<œk¢Ôˆ7ô°z%[O¬–ÕpÜŒ+*rpEFs¥öO﫽ԺÄþÙZ-–ˆÛY±CšÞS™ô"ºQ³Í^ɺ*úË‚ßñ4ñ¾3 U°:Æ9)qZ9uÅYt$Úl;ËèEÿêUâcãDyeãl%L™¨æ7"Dù{ßšÔkÇ<½OhÔ¥k›Œ‘üvgR½‘ýUS])w½ aü>›2c7L½‚ÖÇèC‰7¾U?]­ØH§VˆÍåÆîÁ¾ [Yo.P®]4‚¼¶>ÌÑÊ!kk͸‰º'1ÓÞWÙÐ’‹#cæUf'Ú/w§(mç'1‚±£³¦ kÅ%ê…ç?èQâʉe͈ˆ÷ün# µB»§N)z8WL\¢´ié•`wØè'ÔñBDWÁå¬[Œz}z3fKâJû=…÷tôÑåJ¿ÁyUÙAI0w§år®µrJŽ<©HJýò|Ælö1.ÓûˆµÔbYBGàY¾fÎÕ75QϪ·w×,~B¯Wë\OÏi“ís…µÊ“‰AFBlm—ZQ•œ[Œÿe[b%‹l©~Ú1iM­âÐ6j¹e µ€¢å„;Çîy^s¾2àj½W‹vãyjZCe@<ÕÌ'˜Ä:Z¦È‰±äœYÙž•Ü„#Á˜c©á³Æ/Zñ&ìº:¡9Ρ{xd_´L꫹Gë™ µÌì¯þÍõ’§ÐŠEk¢=ˆÌ¯ÖG»¯§UsÔ[ÙJ™%DæM]3š×K(ZãD£+Ë” Q·ñ·ºª.)ïV½ûŽÞ^rÎ<Á÷G¶Ô+ý¬¼ªk¥–h=\q#±²˜Ñ÷Ä ~‹~Bë$O)ç«•Ô·®óùäÕZYQ×F«!N°‡¶ÈÈ™Vª”_%Bç§Œ6­5rv#‹¢$Xu¤/ªeFµTÚ­–ì¤VÃ+8çÚg£k±Š»¢bc¿EÒ/È=ˆµå¯´åææ\o¥±šçÿÈø9ÛJ~[ª âªÈ¨9{Ú4-¤™;µR”Ú Ñ®¹RÖ 5òüZuÅk´Bæ‚äyÌÂùìF3bàhñd/ÅE"±¬Þߨ_\¤‹F‰¬æ>Îê`~2&ÒkÊÿÆP?®.š]R“•ï#®0ë`ôíSi¯8”•*GÞÃS6'ðdC¸^ýÖ79­]Ì/û”z"}6KýWæýneAà÷ÄüHÚÈI9säÚz­¹q’ÕõSO¬È0B·–®™¿Õ?%Ck®ëœ3y§ˆ"GV¾EÙ7*PδŽÔˆ–ÇhOµP²óJ¬ FŸj¢óæÊ»"Æ×-\1–Š"ãý†|ˆóà ú¤5|ÞW«õDUú¢èÿÕájÞ×Wx"»õŸÎ›²îª+}"͈)ÌdÆHDï_ÃÏÎBôÕ\iwÙ Ù„±ÜÕÚ§ˆ~´ÔZMWC »Š&ÆÊ®o¬QÒ³»1g(—PË«˜‰ˆÝÆ´vÞM,†¶þGfK Ó3™ÕSžÔõXO£WjÃåáÍlë!ý­O¯o`ý‡6Þ+£Ö8Çê‰vÒ•u^œû®ñÛEóFìq}}íªz¾¹k`}‡H8æÑôÖÇç\mçݘO̤Žäj¹Q»ÐÄœÍÿg¢ÇÑÛÈ¢‹ëÄ×VšˆÄýúµ˜P²•m¥ÛX[äµ]kªýô:¿ÛÌHÌGÙÖV8'ʬ²fÅ`ÌË+×Fδh£)2"VÙ$íˆkªÇQªåG´Îj›Ì¼O£‡5ã¨w0>ïIÌeõúž¯‹á™ž-ÈLÌõ9Ïê>S»*º°V_¬¡m2®ÑJ©ž°+càg\K=¯XÃZw¦5ð:öÁÓ“‹³cO|û\ÛÓÜq šÿÕsˆ%õñÜmŽXMN^9¡úžþÄ‘‰•bÔ s¥eÑ¿5˜âkcîˆÓä´ ÃÙ/½~£¹O QçÚc$ÖšÈÄÛeÇψ” ‘‚6ИÄy5J^ùÝ`æLYIˆB”A-`ŒRµœJ¾zîÙÞ2l~ƒ3¢ÕÑûŠ\­„ÙÕ¦øÍzg55Æz£„hÍä‡køÜ±+ԑ¦<™ßÝŽµUÂ]{­œ8Csü ün!§UŒÇRlÇwŠ¡Ç3 ¼šÂ{£¹^ •Á°¾FÛ¢V::-ª2¢Ñ:Åx%Ú&í£úè˜jü(ËÆAz,ÑÜŠüˆnœyq¹Ãè×Íÿ‡È}QãºÆJ¶×›O¡Æê%=º3à“Dé.mžBäé=äŠÔ$gªŽwd=:Pÿ;ÚWÇi-£˜_¹ÌzN¥ºkö ¸wD«¢æªU1®5ªR‚ãŠÇ] ruú~ëüµQeÄT>ïŠ"Åþqu•v³drLFEJ¨ü§Ì²Ú+~eè‰"›³I>Od=AÇÏøZ^Ç\Ÿ,œú3‚Oéç•C¿]æK MIM¥úµ‘Ñ»kÒ«œAýž| ó1M˜Š]há~jœ$µß Ÿî$‚q†cn_¹‚®›LÍÓc¸7ÀØÞ*D-žXÐ8VÛoDµÜjyóêŽþ_O×Óßëï]/ÿ•+U—•hwOê!õ7b¥ÈÞÆ“Úñ¨1‹÷{ÅŠuL­ðlhcñ˜XW½0—‹Ôßh33Ý‹!RêµKâ;íÞAé×îêåz¡;¾o®×xÙÈÕ¨UY¶ªLù“Kø­s!RòŽÑf› ›Ë#Æ\¥˜Ù•SªÿñŠá|n O¯çR¨^[Ý ]“™3SªµPô{j¾Þ%r~ΜÝ$þ5Ó2ãmµ–I«6†W1û­]]ȸ´êÑwÃFDëãØµ¼ŽÊQ¸“M;¤UµŸ•ö]; M2Ç"ÂS"bõ”¼žÜYÝGïå•âßN̽¹žÉþÇY?,Zw>E´" ç^.ùSj|&«w•µÀÝÌ=Æ|Žº$R˜Ån¨9Tr×s·nèú`žÉ}ƧÎug棑Ÿ˜‡&¾a½,«ñzXQL<óÖèFþ[^K´æÎ5£+y‰ÈÏ9_v}ˆHÉVô>¹w=:_Αÿ+ÕÖЈÿ½‹–MŽª–§¶òBKi£|±ÖÐèKÿªDGIò»bL™R%_¼)Sek(uëKéO6ŸßxvóÖS[­m³š¤ Öp2¯E=ÐŒñhÉtìàtf¼³ —˰.¬gE2ıJàpžCyPc}ŠhqäÀd³8Ç1ZW¨4ÆaXe,z¦øiíÿV^ßode/ñ°sèŒË*ëâ0-‡w’çð]gÚèIï"£ÞÈ·eͧ°¢ƒø{"Þm#Ë•µØùfîb¦J]‘ÁíC÷˜>íIóƒñõL®¯e&Fr7ëÊG!#½¹Ãt®tM­Ö’kõ”G-•ëê)t¢eOk!¨W4^²ŠÈl³¨]oe­·hTû'òó#uÒ|–Ðz0s FuÆé~‡2¢m4ö3¢Ñ"‰#EŒugN=ß_¶‚²3“Ú®m·BsÏ—ðw+Wju‡TƹžpVüOe|r9·ÓËä v? f­Ïàô¢3ÛBF7Ÿ½Ogð·|dO~çé Á‹ã™¥m¸óvì‹YŽd‰üõåFj>¥˜ÛÙˆÇZ™˜ÔÃ9Gѯ»+ÃèXTGý¢|”5HΟò.’—Ä­ê¤8Ed«^é·d/ÍÐÊrZaŒb¥¼öFò2O7¾ò§{&§/ÃàJÛa{bWÿåìÏÒùèE=}îØÙ;“Ýí½èñ0#oåy:3Ûùýhî6‰™hEFÆ"O{1»Ã+#КûÇxWo —3ÎÔRÙÊ>¨r8Æ>±vAFÀˆÀŠ7µXþSK/·æ|™s³>ÔL«q‘ì³gH+`ÆÖosþõ·Fùæ†&íSÎõeÔj·Ñ‹ŸêEǦÓÓs9µàH:¾(OO¯e÷÷=i »xyÒ’½^:;¬£ÒQéýaH¾)=›½?®jÌ׎Egæ0vס-:<›NCx¥Óç‰u”@ýž²#€˜Ñûtf`µú83Ù¾ïs‹¯å¿Ì(hDÛJzŒ­×kIµ²æõ€ÎªŸR6ŒzDÃHübd¹•w«ùcV,á|”Ùß8!Ì œU”ÿ*Ün/íš?OÇôyévìTìH¿ÀôøJï¿…šì:A¼™ž<ÍÁÑ|Ÿ±îh®463¦i Ûàræ!öí‹Ñ‘úiFT)º•—Owä²g¯ívfħïÓRjñÌÁ á9õçrnúrѰ¹5¥^þZ­0#nl¤Ç60k)c»égvE.Gò­šbEÛ±Iöù÷§ÇÓ‰éÛìq84o èò]rt:6ÌKN¯Âx:BµeŸÛ¥ôCDWˆÓ³é2ú>´`5ú2³mxñ—Lß4•ñçùbL§6Ž»)ôÆ«"g­š‘L¬›1BŠõ¢Ýˆ`= Yþ'rz>¹~@ÎKËçwšG’·×x'ãóå"^¿I_3€±ÊE™•2®Ô_?M÷ºÁœm4)l¡ûA5;YGÑáâõ°?ÝÆÐÑðÓäaz¸‘/-ÚÓ!d(»ÛÇòîN„»“=Þät‹¹ö×¥ÏÙ¤«¨áÛ‰Èw1vÐg‘·+kµd¹ŒÀb|""™šX[ª¬ê·ÅžZņʵ궒ì{Z?gèÇ@$ríµ21ß­Íô."LmM'ìÜb,·HQ)»1‡}½{Òïkvón“Ý“ÝEדÀë:úšät¶¹‘>W_%ÇÒÙå‘âÕâ·ôÎNïɬý–¤!Û-AO ú¬+s¶œn9ïàSwã©Ä+ šìi«ñfGy*k-ôÌÆB®¬U ê¸Ý-}nÇ){ ý3i×ä@Äúó¸^« i¢åˆøÚŒ›ù”˜ °Ò˼2£¥ƒ“Ó°Ðʇçë›.¡SãOXÕt<ø-}îÿJ—÷’itµibôeÎ3^Hv¥?èuy¿Òß…þÌÕ~ÌɦôHº¤LKÿ~v¤ÆO锵¦à ¬àˆÊ÷Â<€4Þ1ÓmüeVB;n+¤­Ù¨ÍV¯ݘ0_*§û‰Z³WËùñ‰è‰»€¶&íèƒü ½>ÎdTsØÁ=4œœ-¦/ž= ¯ä|[ÂŒ¿þg÷r²KPM·ÛyÕŸÙº-èCÇûóÙô|há´“VüÅlÎy’ó’K5SÇÎÐY¬V=£“ùWÓÍo‰äôïz|µ4F2®gÔ|+&Œ¥]5å_*ÐÀõ®¶ÞDÞ^ùwç·Œ«wÖÅÙÑŽú ’Ÿ€L´¡ZFO„žH«/Âct­9‹îG*òžæïÒ¿}9Ý`ŽEú»fÒfcò/ºÿµà÷º°ò;Ðéh,Ò®„L¢7JžÍ£/h[:ÈŸÁ,ÞžmkÑùžÛ¸¤]Å6ñÄz÷ÚŠ¥v,rÄâG)Ö1Z*áZ*1¢£: 4OmVXíU7…ѶOKãÞí†@~Xëgü"»,®E§ñFÃúƆd8mn¦Çþhû"pM#«úT:'{ˆn˱„_§ôÆ “ëɽÈÉStKyŸ^–K*WŽÄN¤ÃëȰWC7œ¯“é´}¤nû¦»€˜´_zzOÿÖºÒúüxʶO;™T£{«®E5îöó7ÆÚÖߘGÑ›Øÿ[&ÂÈX†Dû©Ä˜òîú­m7.’SPÚå8e€ÄÌê‹{äåD¥VQE\´-Ò/.›ÈuXçûémü46®ÄÊÃþwÅçµKç„<¼“ÌõìFW¬É¯xQöTV¦Wj—0”ЖŽW‹ÃYNu«£CÚÖ¤•§÷¥5á úgí2<(í.ã”ÝÂ.Ìs¢«ºŽ±¸vúó˜_–õQ.}%>RÆí^%ÒGÊè©ÆŒÚ ¥Ùøß(?ææµF-^á¸Ý1¥Qwô 1êìÎ=;ã…æñmòbîÁéŸ,¦ƒW-š<ˆ5œD›ñû9½ÛŽfEwBzç£ãéxVúGÐà:úÃ%a7°`-+Köa6=û9º°~qHúoNú¸Š~q£ˆ•ž¥Wâóa'Ÿ^&¤®fwb¡Ù[Âó8þqÝb†J/h˜ Öï(ÅF²fcÌx8J3+Fîæ?Üi®%‘{Ô¶èÔ³RÚI?­Tô¨fk{ÀYË7XûЄ|›ü*ë–}AÇÃÓçÑà±\Ãú‘x´QÌÆbV~(«»šÑÒÇI¨MÓåä´ôŒì±|TØÈµЀ®à¡I¬AÁ;§“Ñá,ã"´à_œÚÂSÉyNÆ÷Šå#Œ‚䩵†ú2ß5îtÕô\>{”}˜ÁÎ@ƒY5ñѯ6S¬ïx]SWÖœ©ÜŒ¿‹wP’´¡úƒ¥Ìo[äQÐ/Ù?=ˆâÎÙ©œV÷Ïôé[X­žé ì^ÍTìú: ½Kìw5?wfôï$µaçdO Ï ÅÖäHä¤7s6 „üeÒïY‹vœÆ™oÛÒq'dg>ôëéõX*{=T£qv PNE­Ê}Ü£l…†u‰ZvGኩ±úÉ ¬¼h?¯¬¿?‰Dÿ΢µäJv%ÖpɇYÍ«Õ0®[.àg¹«2öONÄî‹ýæ<“|7<ÛmxûmY?{·Â¯÷Í}‚/ÜL`oÛôËÿžÞx¼™?“ï‰æÔð~ ëlÜ)xN9gÌ-Ä«ð-ø‰U`ƒú0ƒg0Û|èãþHY˜§WDlâsŽÊ®#1çk¬!Ïù×_Ýv·R¬dµæH9’T"ìn«Kåä"h…¯²ç¸œ?5DHý Ö¹gz?–]~ ‚;ŸŽÇ« äýj¤z'þ À"vÅ÷=ƒUŽ‹+24,iøërÅöhËd¬þ¶`_c¢Å¼¿Gúr³‘»=.ίÏD ö£kŒ2ª”Æ}”î…“cׂkíõ FõÚAñ¿˜²oFÚs^ä¿DJf¡•ýx ïŠòlSñ¾w³ ÄZ3yƒ*Î~݇÷ÍšvÍêµá컯9Ýäá°)SÏÚßG7å3B9ûšŽˆÛ‡eÙù…Hå žô@¬ ]SŒK¡¬ˆ®žßE4çÞÑ»~QD/¿h+æeõÚ6e^V>Ê‹:£Uчʶk9"7äBÙÿzxË™ÌõؘYé%œä0Ý”´ǯ¤³WÏðº=É‚Eß…Ø®‚ †âá‡ÒÕÖS¾æƒêFþwó¿Ì,¼–ŒíŒæ3»0ú‚ü<z ]À^‡K8;~ËÞ¡ÚYðÆ=`F×ð<ök‹ºÜ&f7.R‰l–ûñû¢­±f¨)Ö…W3¶¤2B-™²-öµ†Í,[½ÖO ¨¼«9e°÷ÁÌD¢ÿ–älVdS²7­ðLû3˜‡¬ÝxÎìð4ä•Xýɼ“Ñyº½šwú…©ááb¢Åw’ `AO}(øÝ1¬ý|æe*Ÿ=Ýúç$D§þž-(Fæ¢6ÌQ¬~-Ï'¶Ñ«kûÄçÚ{#aõ?bÙ«¯ãî%9ÄØÿáGÛo ™­ˆîdµE„‘?1£WUkÜ»9…ÌNÆ>‘ù?ƒ“h{îN`” Œ·@Ï;²Ž=Yçíyöix´cÀ1 M'o=ã½’¨öªôª°68WCÓg`O;qýsôx_Šî?ílà³ÃП¦°™+§gó+²?a_ßI 7äyz@e¥©J»”6”ϸÇp>Ý—»”š¯“ç“¶Ìë9œ›ÐÞÁísÎç‰Ú‘ÇóY $z•ÿ‹UiVG»¥×;eݧ¢O7'«órf}”t­žYv«œ3#˜50î5Žö{Zø]3ÿ®L~F`ñ¶á9ŸMoφ[}'ƺ>®'º=Ü:+þëôÊÐf ï[“232„ß—éw?ƒkF2¾-`ÿ¯’áÉb^ù¦òÍYwÎÓ‰,õÆNæÿ½°šÓñ¨]ñMÏ£ú$4À. C°r¾fdÇÄ‚âWß(VÎK 'BR®­ÂÕæ+¿ˆÆÖ¹4Þ×›»ÓþYçe…©þŹõwVk¶ ùÛ0 ’ZÖ¤?§ÙžJ‡÷6Y+œE 6nKRź¶eÕÆãÅFòçgééÅûÅåá<¬å7É~Œ¿=‘ÍŸýÖä $¼ ׿”îXü¡T_Þ¿üløˆp0ú¿=½?Ï/¯\ŒU<¿¹or±à¹©ñzο›Á“¡¸oÊHOÈÕWw}r½— žº+ÿmü¢mTþõê΀5"a=ƒ£w—^ർ¢‘Ž–_ #Þ˜+¿|OyXzEؘM£Ãïs<Ûæ¤?ò¼9/ñ§ÀÓ÷ÃrµC7þ[dåÖbAø7ÒßÈ>H~‡¶ cDû!žlqk¾_ÕÏŠ1¥Ñ¥{˜¹îHÎ<|á8´}b˜'84|º¼5=žˆÇ|Þf%⇦ò\qŒÆ·F©îÁr´ƒ“;†e䇵ŽZÅ~<½ú"ZÊíY3¬…ŒUDZ²Ü™ø±êÆìˆrÕ€ÏiyZqpjx6»5“Ç~™÷œ®þ üuâ±[fe>í¢|siXy»|wÖuC2 ß°#s÷ N³Û„M|šžÁW?-fæmKµyŠÙ’Œ`æî«xÁ]é'?={.ÌÌžÝ9õu7ÄšôNÛ.ðÃꥫg­ªÙãC»˜‰­«¬œû{d‹ÍÚïX›¦üGÜl¬cßgÙ뙄Üá+ad=[\¨ÿÛ“{Éÿ—“%¥Rñ‡ä<úÉøïÁöè5}LÅþ­a}bÉÆGN ÃJ[Š‹‹'³vHÉçD -•(૤ĹXœ›7¯å?)®ËÇÕS°~“øìùÜg1WNa¦:Ò;»k~Nö Œj§pR:™H³ë×–”<2¼b]²ÑŒK^Dë¥v‹€¬T©f|f+ÌìÊ’ÈDöÌùiç̺ÇôGeD¨­‘M7v؃ÙÃσ’—‹»ÃqÉùœw´•ó FûºÅNùÊy´âÃô„æ¾M†g›‹c‹Góƒ‘b¬àÛX½—’áé•XþÑÅüüþ|d¾ÌßæoÒKê=í_ísô 2ðy»¬)|E&¥?r8‚~¡“+6K66æªã°ƒ™‘zo~Whņ–Ath]—ù‘‚¾Ñ®DV·©ùÊA=WÆÌšØÁ£ íɤŠþÈ\þÕœ N©Á¦éýG#ÿ]ð\³ùÆá9î½™zÐÞ˜¢C¹ªx›³‹îIˆ§[™ƒç.O×Çæ—‡7òs³95¬«ßÈiBg¥_‡vùªp’ЈÜ-½;ýozch Uœšþ0'GíJ0íYÁ“õÆ}æÆ2j¼5cæ©eýèÍ|[çmï@y{ó?JŠ–³ŽÏŠýcFÃØI©²žFÄØÄŒÅ‡#ñ~îàšž¤aiö*©=ƒ}žšï‚¶OåU?üâF29Èߟ$3³ÿ)ý¢8)_’߯©&ñ“ˆï§¥ûdo…ƒ²Có了Mf>KG„¹¡VýNrc§sïæñdüÄÅirɇ‡äm›ÜC<â“å<›Þ>"=¡Ö[ôj-xÉuífD´ˆ‘ÿ1’jÁ68S"H«#d¾½Z–@¯!~2pçP=ùGk÷–sí®Å>ùË0™? ÈaH?LêñÖ-À ­5y®¶•zFp¢×=VTWþÕîËø{¾©òoíXdxô ÚGkc´ ΕºcE¡L§UOuü¿†È.ŸížÌÙäm‰rF²Æ›#¼%`³ãyÇ󬦀—1–EÈô®TAt!Â#}?_^Ôe{³ó+ÓíÃÎéм6»•ñ¿BÔ¼ ÒˆüË&Ô1{×# ³'²{XûóyU†dòc³-éYÏâÔt«¿ŒµØŸÊ=·L¾YR#7¥ØÚã7µ×ªK¹_ñ½6B?gý“cÖS˜õŠýƒŒ¬r?Ⱥ3J ÒrȪÎúgöÆ&ûeÇ…k’sY¥Öô]p¯']®cµ§³Þ?A.Æ «{0 ÓXÓo@Eï$W'÷gK yK1§4'{+]]ÜÙü6iMŸ4£'û3{`3×GXîÎÖdß"E»2“ûówK84¼ÏÚ#<„%ˆíŸJ~\e½Åî£0OYT< ¹|;mèáDw±ŽË³¬ä<Æ(*4~ŠÚb=Ѳ±¢ùÅèW¬u‹Q¤ññb0`¸ûðdbvB>ñ6g?Kº"ݘ‹=Á½ÝÀ-=°ù®¿,ö¶Èó»Éþé5d¾¿-]Ö»º¼sÑ+Ì*Ž*]˜ÝTtÏ.%þq`OüÜ\æ±øÿ*üÝ<*HžEªV2û"s˜ë…XÍè¥ožjyòVò8ÒlüâÄþ±JÞib[ѱ_”k#­»¼§ù?Ñ‘ãÔºG–À<_¬©ß®ãgÏ“ÕaìÛUPôÞT>}’~”FÛÆ£»÷,^wVp<Ø‘w“ûPfd&á©ä0bÕáªòÙåÚÒ£œzñe^z´8­P5.;ŽbެŒÅvz†à`ÿyX¼_ðN‰ù‹>t‡[«æÕ48·‡`!Exë©yÿl}ƒ;ÜÃ%ce¾G©×ƒ»ØAà G+€ÍñÄú9¹CÇ\Çõ2¿Öpë÷´ˆµ|^Ë©ï× X‘<¼Ë3.i“>šÝfOÂç}ž¼ÎxK¬N?l]Êl´g<ãÑX1ØÈ×’½A<5ÙIåçË÷–¾--+]”.ÝR:¾t6 ë’õp`ùL3sÙWú¿‰ ‚瘿áüÁïq÷ˆ!·$©µ_à® Ÿä)eð]Ç¿ûY3¥¯•¯ò[Jµ{½Ýî®]cdý„5CÖÖZ‹î«Èÿ;fŒÌ÷é̶ZõÚ?ù'ùç™èÿÀtB6©ï˜ÞÎø'òÌ¢ßnHCb¸w’NÌÂö¼»€¨§\¿cú—ä´ðxéØò_KqbðLNƸ¯”•^-/)–sÝD°r$¿;ñqØq?¤çÌðÑÕr^%znƒý3ÝkgÊ3lgŠ=¶ž™>% 쿈ÝhÎj1ïŠcÝ!aŽ×žl"`«#Œô™ÝïL9wæ ¬‹¨«Ì„×t㌂ Dÿ;%7¤}²_2Ê7“gˆa×±Æ5¬ZW_w¸Þ÷’ÈÅ5`ŸŽ¼ßk0ž¿¯à$˜=ËÏ”F•¿,}—?Wl-½_|RšUzÝ ‹jÄ ¢ç!øú5ä”džS˜Õ~D54ý&'&SAšÓÑÈb2ÚD>^ÖÜŒv]IÕ^Yùìî q°{(Äóò^±ºAþ×ó Ø;Ø;)s-¢u—¬—ãä!å?ù¹ @Jæ¬F΋ØåE&êž:ƒìš‰þ[n&Ø?qÐ÷r§ÕÕÒ óYÉÔß”Q­N®çŒà¬8÷™x½£òQ=2ÚýH½¤ÿíÁ—+Wööh§tW 6\0XÝ?<:sB~?1ŽN©—9¾™êП“Ý#rŒæRwL4øûÔ¿4:"‘è¤ ÑHÆïìF×?3ã,;»¬d¾d‡¬áÒÌF.CÍ[_}Çp¤Âô°b?êì< Ü”_–ý­óuÇôn¿/™‡ùéÚ95œ-R¹±þ~ýPÖåôúÝfU³iVÌmŸëᎋUOÍ×w«IY½ñ¹ í¶þ̓WûWå&è¯×{æÐ×ú{¾ÑÿXúÁŽÉk§%2œ|÷wÖ°6ù‘w«:XxR¤s|ò^‡äi‡¦ŸjçŒjçhâÂDd|û¼¬«•²÷[ö®ôËØÑZ-«_š}Û)…ÃñzaØú‰î9`'%áþP³ÄÊ0¤ñ™û…Ѥ3Â;çVo¥âý‘î¯W?ÚzF}t{M÷D¬|R¬yóhN7?ÞpzØ1v¿ 9®·:k?±»"Þþþôx]P?ÝØ\×Öô·yÍ[yåpÖú•Ü!üNn?cO³óó/$"›{Ñž¯ÏËËk›}³NÛœže†…çãbÝa…Ñʃanv ‰cðxõMó—áfùN¦€ ÖÚžz±ŽÝ4FfÈ…Ïλ'ÿ55»T¶Ëûß©–ôè~_œ<ÝíQ½YíêøçñÉ` â?V41ö?=x0!Úql÷v¿?8»;ºþi5/ë8&??((:¶]ÿâöØ ßôxy¬x^´.Ü&Üúêt‰]Õž™Šë/ەͪèýNÑBØŒ¿¨Ý±dqŽú…^?‰\uÛ^ý]â#±Žù—úi‰öíù‚s"Opw‡üˆµÇ,í¤çåÔç³—ÄN¬Îè­ë=ÝÜß®î®ï½Ýûd{áèØ{Ég·±_¹à a€³~ÿ^}¦YÕo²Ò—$ï3&Y㽚×sË×;ÕëÕkÍ.ý9ýG›mãMß­g½‡SþÓ¨§D*ÿ|= °ysZwa»Oâ¡f Æ'ÿµ$³Ü%«SNÉÔ§)Ó‡õ˜)î. ÒÇ%Ÿ…Ðî’‘ÿÝ›ëV ËÈ‹‰šá!ö§rX꿬nïü¿07_^Z=ß¾1¸·Jÿ‰ÞE½÷´7ÆnÇÉ_H$üNrý¿M6x\FÞ„Í=WÍn¯éßÓmÔÜTMVðö_ºßµgu¯æ7{'Îû›þæ½#ÿl l“ù¿fûF¼èÁÑ3c[—ÔÕ3ÛMûöîêÜŽDÿì²ÂcÄ«jؽ]Ô²ûNá‘øHïD†8D°§©œFgnjHtC'‘ßÊÉ&Ézºè_§ŒˆyëèÜÞa€óªÌަ™í Cç NUú±æ±üg«ÙYí ±Ô^¾þ&ù,u¿T3Þ˜»ðî‰, sz¡~ Ùµ÷w½¿ëúí9Á½mêýÚ·»Wò„½#‘ü{n0à­¼}î&ú¢7ê‹ÍUÝòîòÞ½ÍñÉ?-TƒÈêë/=:7±{ [vd¸½¯YÏ·$ó·ãp$«Ž­Êò©èòc²ö²]zqù0 õû¦Gò:ñÌ1àæ[»þ!%ÎëìÕsÝdcï‰À™²öËÒûr`ꯗUwôžíÏά‹g:/,¶®æ>¿Õ%æÛ8?‘ ]ï¿,+ûF~zp¸ÐÑÑó63»{ã;ÏC&왬ï™ÿ”¼rÛúþ๠ê•0€õÕp¼ÉõÝÕüÄQ?Ë-ã“â‰ü%0/º/{û6œ˜©ÿŸE‹âÊîV?È,ñx–¬ÿkvæYº?ä8äËù<((j‚)âdÞ¿ôÂÊë››wž˜\•^ ]ÚS·÷¥—mU"”G³óé±ê‘D(®þ±$’[–9í‘5]2ZÙÙ9+ørueê8‹š³ÛÿëÙ#ò9n3Vų/Š4&DŠŒï{)Ox¤z8÷?Wõï’®Â,ŽMÞmQ³,kowíÒ¬„ŸÿÃñ8¥3T¾†<  ê•jFÉ`–ý£ú¢ôÿ–9-à'q ÌG% +‚údÁ.dŠTDfFrzAöŠ?9<>àìêå~¿ÿb<ùºŒp}59LulÆû· Î1oüçÁ–G ò÷^õÿ&‹ùXóz»mòÛ%Ò9,ü¾ŠœŽœ¼vJdùdê XÂÉx~\ ÜRŸØ| Ù£{½>«ú|phÿ¬òÒŒSfRäªK±æÎÀ0ÜæA4lVÞWöòüêçc²¢ÓòÕ¡‘¼¶Ÿ5–AÒaÏŠW…ØËÚ(è;!:xlõTwwï?«ÓÂuìù:7lè¦D= 3Û’ T¨‚˃lk2»¥Y륩íÚìÓMèÞÛü>•À§RߘŸn’ßÏÇW5 «üyõ@fÿ‹ðÇ۫Ϧ‹ry÷`ï‡ÃYñ’Œ,Q VÅ«yâþ¬Õ>`]Aî¥)• ^Ð)à˜­&±®Ë{ˆiŒj¬¢.Ó²sØYÎò©ti‡|¿þþ\ÖçÍVýßÑ>ÑlÓ>ÛÞØNm” U›Éd¨ƒ, ìïžxfM¬üæ Á§›i©ãÔ|+]=_Hn_·ÿähÎ;U/’Ø&Üg(x6kÿ« IüýøÉï$ëúd»(¶·4+¤Ë·ô'ØÓ¬îY"«œ^©ö=Öù"ó«÷IUC~@,dG-® rªb¤þñH;THB7‰}#˜–œˆzÚ®ùó¹êÆÞäÞÂn|ïÕn]ï¶n³öO™«N˜Ù™Ç’à‚ÜÀHxÁ±©áœ›Ž®ûÂäRnèvhžIçÄù©wܔގIñýÉ&åÿwÓód,]´ù},v4+Y¥ÇÒ¿gtߙΈ0؇çÑuÙŸr~Av,‡“Ûçëñe>¬œÿTzƒÉƒö¨xÛÝâ5ü¥ú!¾ ŠpÞ*/ëçjiôcj°×i\×·ã«{··G¶¯´77Ïœ‡â7Š ïžÚÍÌèþ~}“ZÞøfYvÁŒ¤ûã‹õ¼î­îÁäù?¸&÷;ÿ<ï™<Šþ›å½møó‹É§ EVŸNÎûØæcÙKtkóû|æžYSó3Rû6 /ÀiJ\ÇRõ'ãw¼äϰ<6,?ÄÓ« éê´ïGŒ˜©¼?î‹I¨~áО%FP UsYyØ£ÞhpQ{X=­93QüÓaîo‡ÿm–\VÕ<’ìÀaY¹3·÷¤~µ¢¹ {@ŽozÍwº++º›šuéèø`ûËæSy¥Þ‰eA v°ipcJ4gŸÄJÇæŽÔ[Ã>Ój÷Möa^þ˜‰îju:6à=˳óç*ºöÉÛßæÔã– TãÒ.ÿã,q¯e)²_* _è¬y3{&KÄÄàˆú œ.†omtj5®kÚÓ«“rwu]ÿ š.°:+ø¥zlûl0àÊèþNñé›$ÆûL²§Å[×ìÖßwèèÜh§š5¡™¿·E²‡]âÿAÁ—àFòïƒâ3^¯.¿î?ÛûAron\‘èø/†¦º­Z —4xyy |MžSÍš èi#ë/g(k„7É:—p"$8Á‹Ž‰äNKöª¼î˜° ëÿÝÑ5.Ìí¬Ä±çå~Rýssd»*½Û7d.óG`y¢þÎdzÏw‹þ ½×êàYóífm,dhg†9o«9*úßÅ2ú±ž÷'+x[uWýBj¤G…ñLHÞÓ»Ùgedå¬ù^PöèçÒüU§Þ',ÝÂX~(ñtÁˆdØÞ/3ed ÕÍ ¿V?×Q°Yø„pÍêIíáÍfÁõMÓ ³óRVý©êÔö”öþØíÞAÿ ±îñ9à¾t}ü*·]ßÜ›4x±ýz~²&¼xÛ°ýwƒs»Gÿ›XÏ?Ôˆ<\횯qu}AõÝúµöï“÷¶÷µüïœh'VXs™jùZP¶›†Ò]Õ_LJÂÈÒÑSö¿ºWÕê—Ÿ§ˆù=Ÿ(™RŒ_¼ì”µÓ3­¯·Z“ŸjÈêæÄî°äRó‹üVfuDý\î;ÿhûÍpU‰ßÎÌ_­ïHÕü»íÇ»§O.mO©ïH]CÔ»eXÑæ‘Q¾ð—D㚛É»ØÊå‘åWë{ª[³ŸöÒh­³étã‹TU3 7¾ÖfÞ"»` –ê§Hžæªn;NýÃo ƒŒp‘P9±O¤Dƒ¤µiÆé90ÓÙ¬%.*ÕÄ9y‚ª˜lúüüÙ=lðÌjM;§ª?™zðQÑõã³ÛweóÕnQ»UXÐÕõyÍ]ÑéßVÓs?ø‡z'6l;8½7?~ÿ+‰Œ¾œüÖeÉ!geôH?û~šwãý÷ÌΙWS+Ü´}®]Y˜ì‹xU$Ïó‰yJ”båØ.™Ø ßå+)`8ª|€H"èÿbÍ4Âû-ì„}bæÒ7[âA'!áT:Eññ€S€¦EF½ÌvðhUöä\Ö|¨]ÛíÖ<]NóãXéç#ëg»›ÚóÓÁ{TsM{GûÚÐPÿ˜nÿÁ®íÍ7›­›óã×eÇà ±€gãñ_޼Õ\š¨`« À¾Ù¼Kü+3_Þ¼Ü`ß¡-÷ðpt|ÃéÉbBVÍ_‹ Å9NÚ.ûŸè¼T:$d÷ û!lûwz•ŒHÉ CE2„3ÎçssëN‘Ð’ôb\ÒÝܟܼYý4ÑíÃuzÝKa¯?Õüu0¥·O3±Ù2»„GºóÇþbèÔÞÕÃûŒ9¯Vw@3%¨wJ=?Üñа‡'óö²—âåt‹ âG&Å–®ëV5ÝTí^1 Ÿw*NñÏt×—¥ÓñÙ–°pC§Ž™MéäÒVz 9-Ys¸±áŽçÿǚ✲‘¼Ó™DvÆ@}s×)$ëì„›yùÜeùúTýfª¹·´Ç5í×\Ñ]›,Õ¿ê]šïÉÝØÁO‡Nl3üq÷>xh£#ǽ0¸·y0õœÂ7n.iW¶¯'Ø"xø¯‘Õœ0¡‘zmõd}d{lF±`töå¬^+ƒÁ”=5M¹}£srZÙŨZ>¬plŸ#…²[ÖÛS+ë#ɇ»ޤàÄœšõ?áDîW±»ÀùçòAjí[eæâÍ£|61û§š®¿_{w»e÷£ÔyviöO‡Ì¾cÜÙ›8æ¢v;wÌUCS{g6ãšãûwntÑðGr;ü‹Í«ñû¦Ãq}sr;Üœ]ßR ïž©þ)¸ð³ô»]\óßc£eÎB(6m¶ìÇñœ·†¡89O#Ýñ:ùY0;‡Å¯óóy? &´Çž$Ì™&ñå X¶Y‰,›“-†(ž$öž—¯‹ã Žþ(Úϵ/õ®œ0æÎÁÊn‹îýýs‡·º¿· ÷×öíd|ÍöõåÕÕôt…]Óÿyomÿ²Áû[vÏ''zbî…íÍÝÕõ]íõÍîшéí)͉‰¹t¼ÉêŠZŠ×V«äëä¨Ì‘Ÿ*UP^h!*(µH§/'Ãä­oÉùA,7”GÉ”˜#°×ŒÌI«Ü äüþ²d Ä´p²iÉ nŸ®­º•ý÷–÷öì¯é?Ù{µN·6^üªDvUßIÇÊÚDõÿŸñxÖw~ý•î'ý{†Ú¡ýú#½•ÍŽõÛ:yÑ¿Tßm¿ßÔÑžöã¬WhyYÙ9#Q¿tÎŽK&<>;Àaí‘ñƒ\3b7˜1Y‰é¬þG2Àoð!Hï q£8Qgœ¿ù ]òƒ°_ì,·Dªr´KܨkrûÄ%‹«[ªƒš´{÷.m¿Ô¬ Öo—*ù–õé©V[ÍL ´®úAæ°[>éøül•.ÞœþðNýx·ñ`d0®÷ëÈiY·[w[}mû\ï{ÝÓÍõÑëE™‘¹8Âyz{D2c‚ ð Š©}¨€èj_˜ùÓ3a9N.’€˜n9ÿÕÈ7ĺ"Zè ÖAZ/ÄýñG܃-É3M8uó3ЕÍQÉ mXæáT゙ÌÅÝ9ÑçkÉb\›¹NLÆh^:Öœbq\bç÷%zúZâ¨Cª+«}ëÛ›z‡ô_îÎlW÷Ö÷‡{7vO÷æt§Õö1]R¶gU%›Öçˆ=Äögæö¿ÒZ.ï;gôU¥Sަ”þo«ªBL¢cóR-Þb½Â Ÿu·Ó»ô•™ëœ|²s¤Ù”¾+÷TA†í"çÝZŸùÉPßÿ7‰\nM×È1Éší–5?(s^“Ÿ_œ^šÅÉ!¼m9íÝ,ê>×=Õ]ßÓ>ŸþÇksúÃÔHÎnvÜŽ¦ëf™AQ+¦jFN§ «ö{ÙJ‘‹X„°D,Ÿfˆ -îeUX€³í`¿xQï“L ¨ROÁ´ÑgÓ;2Ä&KA®nâĉùy‚s:™|V4öàäÉ—äÏŽÑü£ ’5='3]Gg.ŠD—¥švD>ãÐt2½?2î|pXäú†œùôáÑlëÊ ŸÑ[i§Ö²œöÊíðß­1Cìwv~nUx<þŸÖÓUa§YŒ§‚òÝ2ˆ8 Ý÷»r¿|ð)¤i§Œ:‹9‹€!«œºépÖ\Œ5)O¼œÞµ4U¢]³Ê;VdÞvŽ”ó\p6•œÌ‹EËÿyæè+nHÍÝœÈN~lVþ/ç|8íM®ª„øÊ–‰²ô Š—ffN ó‰m~¿ Ú¾bTÂð‚v7ÆHž¤Wi“ŒÏ ªk¢{ vÍ\Ž%ž¯sbåêÔ ò¸mr^+:cgm¾Çi¦ú%|¡¶ýšê!¼ qk_áî%Þe|A•×ó!ô‰^»ûªø8~ÂÈD ìIE“À d—å–øèÉà%}ôiv èJY’'ʲÎMø*{³°ëFR›Ç.Էͼgæÿ²¯ý#ù÷Œôöž‘gì²WÛùLئ‡øŸùõ Zk}!<p.Ž&¢!>F²nÒ" xÍþˆöLÈÎÏsd¹èƒZˆ(Rè)p«fWáC°ÑqëH`E2ën˜“¯ËcG4xV,Ç|ìÆÁzY๗Üm’¿°îrTÐAÆ‚¤Ü1ÉCë‹ 'b#ûKþÊûK¥Óú !'ön—y©Œ› Ì㻌Í꓾•$n4¤@ÇFYöMºQ³ U2çOá7¬VWà›à?6!Ú0È*,ŽEÌÍ'8±Å=£²,öeMŽ®bâzø0@ºËªÕز•ÆsÙ0ìRçÆ` šïÕ€É ï“ó‡t4Ú“í"“Ñ‚ä`öú¡å}q¤ ~ÆS}6ßÀçÀ‚íGŸnMÃoq"Ö`æ8™¸º°T^Ko•(ÅÜ7Ï\ô¡Z5Ú„_ÊÆãcºYìç®óê™ù·Ú›î5¾¨X›k ÏÀôéé: OÀÞð7ÈÅJÍö³=·Ž‘‹=SF&Ó«íú›¯ÅŠd¼h²Cùañb©²ëœ—ut8Ê.ªr¦N$чZ›Ï+žEg’÷²BŸË"J~A.‘n°¼žCЬ‡•¬„O/YxZG—q ó„ƒâq¶‹ËªÙèé£y8,ýñâl°E†ßgà<ƒUw–Ë´üÔç{/«bWìý/O'.ç¡k4ºK/xRö)«àÄ`úGgé1ë6o(`‡Žã0£tbâ)˜ ÉŠG «¸Ýé¢(O¶czž!oM~0AÖÂoa¸•ŸßËà@>WKÆË­7<½ÿº)ëëª ÒÐÂù ;¯`Wõ‚üœMC6™AÞ ÔÆÜ_¡ƒÎËÆ±p÷Ø…fœÊDé;ŒQ§ÄyÞÓøèºxœæ»UE<ïùrôÈ©Ïós+j©oN‰§”ísò´y‰ÕÌŸG³ Nœ.@Ì æÃ ¾bn¾ó4‰“WÉ›Á9;Û 7ôé¢b™"ýÀ<õ*Õ’Yù¹o[ºxÙY12·÷ºøÌi£3¥ü†ÏSYö}¹!\õÿ³¶>£tí‹æ éá ò{^Á¿³ïpß]¥-¤jLt°ÌØ åV—튊ûÑ;ùÚŒMdä¿ èdìVTÇwš}éã+!€è®6ùßïxqc•‰sf€NQ()Âò{:ŒÁLËx ¤1ÓZOǯŒ¶œ¹lÝp#Äc 'm1?º#Ó_j;~Χ«Xl²ã‡¸…­¬3~9~>ø„"A«b¥Íß+øgy‚ XHÆNnóÀÚrâ±OݰKºŒL ½ÔØ {‡Oe¿„ƒÆÌ•(nâì1„y²T~V=Îù:ø'+6V–ã6¡‚c$IkYù’ˆW‹Óh -…\ü™{a4ý•)LËûxµÿ~iÙlíKükvâ7Ú%ƒU4mÏϿ誜Pñj:L=—¦ÑX™ršI×åAX v®6À¶ÅÜånz£,œ_D?Š·‡ÿâÑwËÁ±³ña>×ZR$OY”é.¤e¢}åø.¶Ã2¬™ø‹þ“ž`Åôd;ï†oÁ »õÆK06%;²ò¥s»°ëå·ìFóÀ,Šß¥I2ÆÞÅ‹a¹Q¦tGÐ@ ÚŠ›œ?™ŠÉ°eÕEvéžmnžÍòVÖºŠu­|%ÎÌ»eeÙñ“ºÕ)͕ҋâ‰ò0…Cò¼ ìÅèüž¤Ù ex'¼öjúa§à;²3ÿ `³JlF.Y|Å“‰÷¾›Å`wú¿è‚˜Ñš‰ÙègBf˜à4 žM¤"§çxæ9ùŒyùý’pCØ`yRŸ‡ ÛÉ{ ¥¼É쬟¬ºhoŸe¥E_l»œ2SìW°fêmbyyÅ)É *ãèrx·™ñ,ÖB烘xV~Ž;ÙIŒ­oÅSKD^jåø}÷ žgïïį~îdXyßYšdü»äõË¢‰> f”^š\˜Lòüqùt Â;K–´Ôè0Ñ ¿ãÓè©Oàfå5%ÀV¡é;ŸK?36n6êir8 32²ÁÓ‚´Ï(–Eö0b[aÕCŒ‚äÍÊÊêÐV³ÃkÜèÁŠé4+5u]’rƒ#Éç•=3t&Æ·øtœBv\ÅlFæ-ïMx ˜l†ä#†'\nƒ.Ìοt/ÓþÚlÈÊÏμÉrYc#zTØŒl‚5cÓp‚_”½ÖÓf|š›K{,]°ªŠ¾œ‹Ãæ0ÜRëà7EkQ>•?g{c3*hˆÉ©ÓðÂ;‹”åÃd[qN«dä²4ÎJB¹ùu£ ¢@R4¨-ŠÔD‹Üº ­­&{tz™7‹uâ[É!`ÃjA¤a‡ÏAÛØkÁ?ï,2¤¯b-U0ÈGŸØŒ¨‚…3û‡CpNö §6_eÅœ—SrMXŒm`­"ƒ’ó-I2:¥¡ŸÔ~ ^‹~óSEË}*™¨KàVxª (DÀDø(.¢w3"„*µ{²Ò©Á!rÉ“ñxl‡eóÿ°)ü@.B©bÐO>‹÷afI[pÅ¢læ™!¹+æ•E†l—¾‘¶‰ØHžÃ¨qm¼š3:##ÃÌîÉ“ˆL‹w×Ó"Æ'¡ÉÁ6§î'CWj×tJ–¾ˆpJmÃ=gBtÆSñÁÒTw/ÎsxOá@NÒ¤¿$%[DXDé}‚:,’ìE&ILj›ø Õvš_ØŸ °ºµŠ ÛÀܱ)z$!cŒ ].Ñ[ɳ°òàÙ±«í£+ã}hÎR:Û°X,îå.ǯ]ÄaDŽ<=†203 š"ï€a—Z~*#KY›Ûr裘Tl[žÃË:yŠ5£‰t»+¬A§x{ûQ¹Ê<ÐašO.ü¹xÎ÷î¹ßÍZoY+qf”%º]´Ld%X9¾…]X9ê‚£¼ˆ?…ÅÏÍ»ñ?L›§t§œOe%²Üu^Iäøkź` u:ÜÜü”opg‚§•]¢XWw–:ÝÀ`dÈŠ°FZRr‚ ÁÞ1¸cÝ|âµa 4(Zëæ¯b^e<¤çï’±'S±T‰–±vD ä€H›5¨WÕÿ­¸`dipy-0.10.1/dipy/data/files/ScannerVectors_GQI101.txt000066400000000000000000000100151263041327500221400ustar00rootroot00000000000000-0.0000000000 -0.2773500981 0.0000000000 0.2773500981 0.0000000000 0.0000000000 -0.0000000000 0.000000000 -0.2773500981 0.2773500981 -0.2773500981 0.0000000000 -0.0000000000 -0.2773500981 -0.2773500981 -0.0000000000 -0.2773500981 0.2773500981 -0.2773500981 -0.2773500981 0.0000000000 0.2773500981 0.0000000000 -0.2773500981 0.2773500981 0.0000000000 0.2773500981 0.2773500981 -0.2773500981 -0.2773500981 0.2773500981 -0.2773500981 0.2773500981 -0.2773500981 -0.2773500981 -0.2773500981 -0.2773500981 -0.2773500981 0.2773500981 -0.0000000000 -0.5547001962 0.0000000000 0.5547001962 0.0000000000 0.0000000000 -0.0000000000 0.0000000000 -0.5547001962 0.2773500981 -0.5547001962 0.0000000000 -0.0000000000 -0.5547001962 -0.2773500981 -0.0000000000 -0.5547001962 0.2773500981 -0.2773500981 -0.5547001962 0.0000000000 0.5547001962 -0.2773500981 0.0000000000 -0.0000000000 -0.2773500981 -0.5547001962 -0.0000000000 -0.2773500981 0.5547001962 -0.5547001962 -0.2773500981 0.0000000000 0.5547001962 0.0000000000 -0.2773500981 0.5547001962 0.0000000000 0.2773500981 0.2773500981 0.0000000000 -0.5547001962 0.2773500981 0.0000000000 0.5547001962 0.2773500981 -0.5547001962 -0.2773500981 0.2773500981 -0.5547001962 0.2773500981 -0.2773500981 -0.5547001962 -0.2773500981 -0.2773500981 -0.5547001962 0.2773500981 0.5547001962 -0.2773500981 -0.2773500981 0.5547001962 -0.2773500981 0.2773500981 0.2773500981 -0.2773500981 -0.5547001962 0.2773500981 -0.2773500981 0.5547001962 -0.2773500981 -0.2773500981 -0.5547001962 -0.2773500981 -0.2773500981 0.5547001962 -0.5547001962 -0.2773500981 -0.2773500981 -0.5547001962 -0.2773500981 0.2773500981 0.5547001962 -0.5547001962 0.0000000000 -0.0000000000 -0.5547001962 -0.5547001962 -0.0000000000 -0.5547001962 0.5547001962 -0.5547001962 -0.5547001962 0.0000000000 0.5547001962 0.0000000000 -0.5547001962 0.5547001962 0.0000000000 0.5547001962 -0.0000000000 -0.8320502943 0.0000000000 0.5547001962 -0.5547001962 -0.2773500981 0.5547001962 -0.5547001962 0.2773500981 0.2773500981 -0.5547001962 -0.5547001962 0.2773500981 -0.5547001962 0.5547001962 -0.2773500981 -0.5547001962 -0.5547001962 -0.2773500981 -0.5547001962 0.5547001962 -0.5547001962 -0.5547001962 -0.2773500981 -0.5547001962 -0.5547001962 0.2773500981 0.5547001962 -0.2773500981 -0.5547001962 0.5547001962 -0.2773500981 0.5547001962 -0.5547001962 -0.2773500981 -0.5547001962 -0.5547001962 -0.2773500981 0.5547001962 0.8320502943 0.0000000000 0.0000000000 -0.0000000000 0.0000000000 -0.8320502943 0.2773500981 -0.8320502943 0.0000000000 -0.0000000000 -0.8320502943 -0.2773500981 -0.0000000000 -0.8320502943 0.2773500981 -0.2773500981 -0.8320502943 0.0000000000 0.8320502943 -0.2773500981 0.0000000000 -0.0000000000 -0.2773500981 -0.8320502943 -0.0000000000 -0.2773500981 0.8320502943 -0.8320502943 -0.2773500981 0.0000000000 0.8320502943 0.0000000000 -0.2773500981 0.8320502943 0.0000000000 0.2773500981 0.2773500981 0.0000000000 -0.8320502943 0.2773500981 0.0000000000 0.8320502943 0.2773500981 -0.8320502943 -0.2773500981 0.2773500981 -0.8320502943 0.2773500981 -0.2773500981 -0.8320502943 -0.2773500981 -0.2773500981 -0.8320502943 0.2773500981 0.8320502943 -0.2773500981 -0.2773500981 0.8320502943 -0.2773500981 0.2773500981 0.2773500981 -0.2773500981 -0.8320502943 0.2773500981 -0.2773500981 0.8320502943 -0.2773500981 -0.2773500981 -0.8320502943 -0.2773500981 -0.2773500981 0.8320502943 -0.8320502943 -0.2773500981 -0.2773500981 -0.8320502943 -0.2773500981 0.2773500981 0.5547001962 -0.5547001962 -0.5547001962 0.5547001962 -0.5547001962 0.5547001962 -0.5547001962 -0.5547001962 -0.5547001962 -0.5547001962 -0.5547001962 0.5547001962 0.5547001962 -0.8320502943 0.0000000000 -0.0000000000 -0.8320502943 -0.5547001962 -0.0000000000 -0.8320502943 0.5547001962 -0.5547001962 -0.8320502943 0.0000000000 0.8320502943 -0.5547001962 0.0000000000 -0.0000000000 -0.5547001962 -0.8320502943 -0.0000000000 -0.5547001962 0.8320502943 -0.8320502943 -0.5547001962 0.0000000000 0.8320502943 0.0000000000 -0.5547001962 0.8320502943 0.0000000000 0.5547001962 0.5547001962 0.0000000000 -0.8320502943 0.5547001962 0.0000000000 0.8320502943dipy-0.10.1/dipy/data/files/aniso_vox.nii.gz000066400000000000000000002612631263041327500206600ustar00rootroot00000000000000‹äå)Mÿ/tmp/new.niiĽe˜ÕÙ°½Ö½'n3Éd&3™ŒÆ=7b$Á5$¸C)îîV(VZ¼¸¦P\‚ÞbÅZ´H)V ”Ò÷<÷Õyú¼ï¯ïß—}ìÉ–û^׺ÜÖZ{«œþ?ý+¥<¤üŸÇÿ}SEª,pôœ”ŽžÏËüß÷ÿë¹r~¼ÿ¿ïþÿë¸|Óvù½G ¸èþÏí7çÿ:ï¾öŠùûyÇšÇüpÔƒ»NzäŽMÞø~?ëÌGg=°ë^ñâô½æ˜{»ÝÊõÕ®œsì\¯ÿqØ{Ô„ÿ|T‘ú¤þ©"õMÝR×Ô“gÿÔ›×U©SêÂû^©{šjy_Áw½ø¬[jä³¼]û”ï«ä®®©N©û»¦Î<*SMêÇg~Ó‡;ûó·7p+§+¯*¿š‘z2^Ï^|ß™g-ŸôàÎj>©âÊJ>’êS×öá³nå§cugÔÎÀìÆkçÒ«<qê[ž}>íËg‰OzóèÅHbQ]¾·’û_7®;çчÿ¥HŸ4!ÄÜß—wί/°ª¹ª’±…-•ú1Z%Ÿ:Rwð3±Ï.ÜWÉU]€ÑgTJ-åW½ø^ T–Ç©¯Ni8w×¥ó _#ð+¹Ú±ø¦/ÿ÷,CïÎÿͼªæJñèÇkç*&âŸÊWö➺ò«î¼rÎR¤KyÌ*þïÉs3˜Æ@þýVzu¦Ÿ†ôšÜ‘/½Ýœºñ®'¯¤VæÛƒ‘Ú8€«!YýÒ:|/¶C˜K=wµ”©ZÃ'½˜4V‚ÄNZ*=© uá)»ñ*r¦[מ¼–«bÓ˜f§)i$J  öä4lÛÁz¯ÛÒ8`È»:(Õhõå÷b'Ý¥|O>IŒØµŒ·œT²*ËPúƒ³s’•i*Ðæb‹6OóÊsªá9;ȃÓé×ù°|Zž÷Ae]é ”`!E”máJ[¹ž€sè 5Õ±ÌDmëÄâ^›¦m..IKËXÖ—)¥D´‚{kjÍÛä7Ózù˜¼>W70²”Sš•‰*Æò½˜©?=€éÿjB%˜©“B•ë5|*ZÓÂôLn.íX\•¶H@ÇzpÉHJÉhPäÖ¼]þiÞ1ŸÕr_¨+e[ F_Þ_kù¿ |„©í«¾\+'j·š9„žM¥K¿)ÞÌǤ™Ì¨Ž±¦ÃÁڲĬ•þž&ó‚<9ŸÁ]ÊÝ@píQ¦—8kKú£#j‘”[õW «‡¹ZûÒ—ñjÀâ¡ô]¾¦Ô£teq_qZ1=­ í¦«ÒprcT2‹¥)yÿ¼u®È[1B?è­LöftGRóèË7Ê‘vH¾ø:d«7WH×:>iO_¥ÎùÞ´séãâöâ¦b—b9<Ý#]ƒ#x,ísm0þ1Uç“sCî‘'AÚtš0µ2J†öM¬,cœÀJ›Ô§¬3j’³êÏ\káÙ,%$í_ìQ\Q\]Ì(ŽJsÒóéœÒ§é‹|^: :4ƒm¯\ G;眵6a1;—GWrª€¨”vJ-ߪŸ!)¾–Ý‘õ¦²”7q^Õ#5ÓŠ“Š Š9Åšhàù¸|mz4µç{ÒèÆ€ôôMªÈŸ§¹#äQ G€©Z=QÃÒ(3êJʶß*KÕ\ß~5ðN[МŽK?äÖ¢1¿OÝóŒ|òXÚ—™N‡ÀÑҳܣò1€™öKà‘º¡ ›­¼(Cb/uÅ_êk#‡sõX®ëOëàn?0º1Mbü¹i~º"¿Ÿ~™.å“ÓÁ»‰9^‘.ƒÚò!üßÌõÜÝ€e”Ö!Ÿú9±VWôÒ>ºñ™¾ÑOû`Ñz@Ú›Ö5mÈ7#ø|&Va'¤öøtSZ–ÎLw3³©ÌDxjD¯F³éèÌßJ^ë å¨þJlå§žµª|}Ÿ+á§Þ¢š‡>us8ˆ‘Ö盦´(Mck¦“ÒnÈëžéæÐÌ5uP®§M¡‚º¢%èÏ8ú¿áŒ$FFÚ¦nÀ”]y/eýN›Ø\ž[7`®Íë@Éé®´0y{ät|:9-椸Ë>ýÁ·¬Áñ´S1&ŸŠ%<5m“ÎI?Gª´üCÍnà¶„Øá\ø–î9<¯Ê+‹¿æ•hʦ`¹Oú#öhXÍCz—ÂͱÌe£êõò“£cÜŽÝÁSPbï…ª 6ªìËw­ÈÁ4®ê“FƒÃütTº:-Ê'¤kyì„Ñéi/>ù)\•6ÁJŒg&³ i¤EK×Âl„|>ÏmÊŸIE­]øìˆÅÌŒÑÔ—6ÆÀ•õüÇ|W3öIé×pìž´صCémÓ¹­´«;2­ËÛ¥§X‰,ŒGr¦àéÆÁÑÁŒÙÆS®iƒªÊ˜ª+ÂÒßE\©ýmå¾Ü£ìƒmÓ¡Ì|*·ËõÅ2=—ÛUüMF3þ|¬•D û!M"¹j™vMKÞ}Ði Œûº•±˜_ºé´CµqÜQ„ÓVX…6FØ=ç¦Ã»åxÏRÞ#Ob~C¸¾ .Œg–ý™eœiå~íoxšÌ%¢Jí„0ågÄíJµ::ªî‰d ¶rÐÎ ‡ —³ø|4£Ö§c¡è¾é1ôd0£÷áín w˜ÅL[m˜Va£ gL¥W[ ÿ ¿"÷•g£ï*¢ÙŒ4|ôxUe.M㊑|Ò€ÝÙ‰lmÁÔ×±ÜÕÎwƽÆò~>øæQ=‘/£N±‰\Âx¨ßøkžäwýÅú2µZ¹ßØ¢‰ÑZ¡îdÆž >£€tnz+,ÕÆð =Fð¬.Ïj$¯fq½±eÿª¹ªþ» xšý©—RX¯ÆHõÞŒ»*™µÍú¥S ¨ÔŒ5Ü;¿”oÎÓòuð{!0åè (RËßX ?ie#/ÇU[ÄSŸ­Õ7_ëÏÿF`¨eVâ»TÔ˜« Þpìç$¸%‘ÏÌ-Åàâå¼{þ†ïæ1Z3måïìto`ä!&jŠ|3ò3nP†">ªçSsV鮼3ÍŽ8V¥?ú0ÊáÛ-€y\±"ß”Ç‡å ‰L”æ9ÈÑl¸mäV w†1¶šèøæ¾ÆxÎ!ñÊ(Ð|Èè¬8Êw¯ÐÆLêÁP¯Øe×À«<šÌ×/§{sr£ËøOƒÏ­À„1У‰Zÿ#±½x¯4šƒ)·]˜>¦Øi›œW_¨ÓZ–Ó>Œ1ïZˆ6Ÿ™øÒ›‰g_Ìbç_K‡Ïç‹Áµ‘9M·Ñèé@ µðÚøENÁË·ÈC‡ô¥fׯmê°>EŠâ}àà²<˜÷µÃîƒ5;Y•¿LMŸåйÅáÅFX©5¸,3 –k».~ýùTíÔÞvbLc͈4•ÔŽŒ[m5»lgfuÈÌ(F†8>=“îÀ­JŸ“òûyƒbR±iéõâWÅzik𜄠ƒ¦Ê2Žûú1‹ Œ£Ÿ?í™{gf¨Õ5+«€Îz†~D^ã˜c¼Àh“x öî³”Èa^+–Q\TWÜX¹š‚UÞN6ðª Úê´6ÌB¤¡­;Wߪ#‘ók'ŒHõ¾}áC?î®ã®ñDŒë0ûcÓÏÒïðÑ»q]1ÊÅø¸£Ó `¸,m‰ýh'Ž©çÿA|ÛÂßnÌB+¦Ô C‰©+ÃŒˆÚ̬°Ì†ó½ñ¸¤{Y•Å!eúÍ#ÆQï'!©Æ˜³‰w—uNƒ&¸9ßÙxÍŒ®W Ù©ùOæP ýßyi­D©5F¡VeµƒmPU»ÔÍjqÿ÷#*Èha3µ‹ú,qÍçó˜›už\ߛѭ â=ˆzؘf}y§´˜j…ÌΤ‰™j8V‰„ôEêë¡`/`8¢v¥ˆ#¸Ö¬±5rW?^÷b$ù)½dxê°·FcÚ­¿q„ò¦/°®U­m8;б[Àe$Ÿ†qŽæf<*¡º9˜™ƒÜ³6a&¤6š+8}ö€ò÷%^G†¤…Õ"9(y=§«”-qjcDã$©e.îwà¹Øµ•ÇΈƲÊjX¹¨#Ô0ž‚vHœ•m¾>Õ†¼î køÄ1Í9ÚùNÏ/|iÙÆ÷ÚU+lf¾Ö1¥Ž4’GæÊF{x¥÷êÄúõSÛ'>Fcr×¹h•-ÿ×B[1R椬 ?+ÚhkÖqCÊCœ­¥öAz#š4ÂëÏõ¾Ó—éIjùß?ªZy²+Ÿ…dF©ÕŠHÑèÛxËÈÂZ‹•‚¨„|še‹®´Þ2'|íµzVcT­ŸÕJõÛ~ˆ\ŒžM¿(4éÔ2“óv”øF,pÀd/Ñ óÿÿýìø´€.%8^úÏ÷þï•Övü÷w|ÚñÝÿ5FêÏ8Áê°zžEyh,rýZtLK­kU´ ƒÁ_ýµÑ…t4žÔ¾È“¨ªi'¤«t¶ îýÊüT²¥¥1‰”‚Þ%EôjLH‰2a}ÌÌb´ÕæØÐ?÷•Hç×ae´ÜÇJw5ARÎåÒSÖdÕpm·=GÓ–k¯ë¸ª Oú*Qä|丹üÕ`¥Ai ®Y³0;ѲDåØˆÖ¹+oÊ­²'nú+Ôaìi/”×6ó}-ƒ6Ö±ž‡SÃõÒÊÙEÝ9¬—4wæb©_ј5Hå_ÍjŠ“vG‹lÝ¥†èd¢í™^Ùz[sYž‰µ=ý°œr)æ,䬒âçýxkj£ƒŽ¶GÍsq¿:œ›J–¿ˆÔ¡,æ1¿L#}çÚ®Ìè㔂Ð?—óJŠ1˜s>r^;ã矱wx´`4š(aC¢A3çS‰? SŠ¥©²å_£ƒ°,!WA[ó\åGx…CÎvpؘº­¨!_ÞŠ(ÌŽŽ„V¯Ô _¯O/PœÁçùLÿãhrÍëôrR¼Ì4Í–…ßë?íä:çZ"’Q<Œªw+{é~üÀçR×^Ù·iëüh~&”7¢ÊÑdsYíVtA…%ü°rúOaúN‹¯Çî^%ý¬iàùÓt?‘ú4bʱ|ª^¶”±©KîÉGåÃóÕùù*p޾¡ºSW†.Å´:ʰ44î?í»ô•—~_ε?gBê™'}‹_äEDÖÓø´‰LØxR>‘wóòŠ|hÞ›~ÄO‰Ï¢¥ÜIÙˆJ䓺i…H’+ê‚”uZ|ýz¸´R9,W|X\PŒ(¾çÌ~$•©Åå*¦ÑüØ4;ožëæ-óZÌQ;¥mÓÐ%ËYÊdÐ6"±÷JåRmŸ@½ë2pz%?TœX\Xìœí?ö%/¹–*òžhÃæ0—¬iv•Ççq¹ï• k_zCdzÖè¨ê‚šhÝ$äÔÏ´z»õdF³±rõèßéÐâÈâ¼¢KanÍô—üÏÔ;Ÿ]W@‰‰éS:.ÿJ]Èעǡvh©å¡]Tí²«D‹³ñP@ó½t­áï ,ÛX$µ˜ê]Ê=Š5‹Ý²ø¿’¾Ê'_QoÜ-mÏU‹©ý5½É£ý?Œj¢Z£$ ]ú¿X33©¬Vj'¥Œ]²ñüo•i4<¤óÅØƒaô®&çwóMéDªEvÝ WÀ¹MóàCN{Õ“aÜ·5Õ“»3\ÂUë¢A @2s ¿eEBh}¡£fFÜçŠ}–Ü7+¦Úèaü„ùéq:­»äR±}^Ì}àeÔCVPŸ^ÆåçéfÿŠnÊ|¬F;Ø6”G³›9Ò:(=á‘Ô½¬ï«1fBÎs6÷NÄgÉ/U´Ýn-m•·€Ê‡¤yãÍ¢f>œŽò't´¯§Fuµð#°Xz|³š OüÄA½Ô…õ Kws!­1µÊ1hþ>ÅÞTKyt¾+ï†V›†¢7ý êæùk¨ý}× ªÖ÷Q_ø 6ÃüÉ(t2˜Ï’ѳ+Í:"#³-ùÚI‰¸Ïv2ybÞ¼˜ŸŸL—ç–¼s>žíKýdÔè—^ÊcxטßK?`'s÷üoª¿ÖäËT4X +¦¡VÚOm…ß™åvEÃÔåÞHº^ù‘´¤˜’寨,> O·†b‡ÒMޫƧ¾y´œûæWÒSél*)_ÒMwÖ“ø¾ L­‹†6*CÎA;¡UTCó™¯f1z+½”³ó>ùD¬ÛÕùå<,Š–N«qhÇ$:/@ÄÓ“`½X£ŸÑ˜Á(#ø¾‹"í"*QŠä¡ºbܪÂH¨¬«g-é´´n~•nõXÕ“ò˜Ü ™¡“¯Ì›ÁéË¡ÄæÄÇåó©]†|]À\g0+ã•áÈŸ~[¨f‘AÉO3VŸâ뺨 H»‘¬ùû8üÇ5pé•´°¨,ÖÍGä{ód°ÿ}j­ž×¦–:ºüš.óÌü RûôÈ>èÆ\ƒ5Bº—CUí‚Ýfí®q¼:£NvøÏžHêeÛ ù[Y¸ª¸2M¢oÿe:±¨ÌWðÙLæzi§®[æºb3®Þ¬ÜC;Ø»b+çÒ_Û¿lƒÖeî〣ÏÖ XKÕ¾Flq¢ì.̬ítÕÌ ék*{—ÆÓ­˳!~ä6èö“ü˼s§ó ¨;ÙƒDY÷‡µß9´[ÒÌßÁ@#cžˆ ¢Þ§EެMÚ[å±r5ÿ×ÀŽ¿•úä³àÕhÎöÈÌ$j{“XqE¾²X\½´ôرV Ž1¬s¸ŠK0ÂÒƒKSm‚^E^:£0õe³µÓ6}ifÔ‘X´x®õ¨áNû!ô"ëòòÃEcÞ‹kí^.á:¿id %ÆŸƒtŒf®«y:—9\QìT¬‘/’ñ üo¿ÃñÍ£/©%ÅF<¤Ý—Þ~o&¡ßÍcxe.v}ëo¤q¤ëôX^»x¦øuñdñBñgb’Óéñl ôevõ­uÌ¡‰98¦T}ŒÊ:˜1·ÙžÍ4­jé{g0Óî ]ê í¦?£ãŠùjðûñü’$üSdn/è2úÛ¿S û“×´ðø kkG˜æ~F*zs).å€×P`§˜+ fƒÐôkÓþùÇ45?V<–÷Íçöâµâ*"½ÛDh`_²žÚÑ6; rT}³°Ì•$­’•3Q­’•©j>mÞÙ“×ãˆt!Û9?”OÈóŠ»ÒƒÄ( ùªb»üCþžb^™ƒöÌ郪Vm¢ÊaMɈP˜aõ̓Ë+Gvg­,Zct5h_p°~fú[•?ÎgRý¿?] ÌÓŹwÞ6Z99ŸÊ½VÇ” +¬R¯±Ì?!‰±´•·QéQªµ´F(MÜgÖ©ÎÕ"©òD°ù ømz#m‘_âõ;Ķ?ð|&5ç+±G[ã¡gÂÇÁÌ·¨£Ñ.eÇØÊh0$F¿rÞEÞª=òdMþšy[9½‰ÕhÓËyôuz™§äòãd)ÿÆæþ9 Îï3ÝHµR?îÛ?·ÖÜ„i„¢Å5s|5Ç•KÖÚíMã©DØqÝ…u`·â«þ˜nþWD@Ç·=ŸŸÁF}•¾‡ÏŸ¥•tøOÇ“-@KŒ]ѹ.÷fæZ\ó¼ÐOí‘õ.ß©¥ÒYl«Ð¹þWÓÑÌ•X¿gñ—oõ|ƒÇX#ïo`eØ«iͼ(¯—KHñ=HÒ Ø+*Æ'þo¯NjYy O*žâ­ŽjÌyÿ´ñc™iî°=—\úºôdõ­ô"4~†u6Ç˽òÔâùâûô~„ÝÊŒ&BÑ&<ìh¤ÁúÕHèlœi”«6ò•²j¤±oW ‡aTÁËf^­AýÙØ?ÓoËr3)˜*‹Þ¬{ùe>ž¨whº/”½ï2ƒ(­½6÷T·Í夥6@ì”!ã?×,©¯rºm´a Áõ5Cðü{ñî×`ó2«¥žÁ¿í ×Hõ¬éÛK0¿·=Ñýp2z‘£Ê÷Õ2¶9’µý‡9‘ëå_dæa‡¢3>úÊõ ÓáTÏ;‘ Òo€¹”÷³€ìz@c£©\c>jN;vSl¤¡¾ÌœÏ¸9h«TiÍ•%ã¦^eyÓ"õb”Áäa޳ <{®°{d÷e<³šÂØm\Q…´»ºÑú‡\´ë§¯T•טé³å§š«ô(ÅjŽŸiô¼®!ia|#÷¼õ8äÂXÛ­Œfäc-{zéúˆ|¦ÑÚÆ*g3à¨ðÉÙÈy½B®šgkëåw0ԻɇF¢ƒÑkáÚ~àid¥laFÑv"'ElÚ•+"F?!¡Æ#æ¼Ò4ÖUŠ©t5ÏWª•$mawpX‹1ÅÛ~±ò¡‡s½ç\ÑÀ§æcÍT–Íêb=¯6T_ª§ÒgKE}vØ<ëÚJUx4ñ”³Flö'ƒÚò»”´Ö4 î™ñéŸå›+%å™ù7º¬RT‹Iø1{ÂŒJœRdß ¦ãxj˜¥>y]ØfiåSHÖe”{©F5ÒEå_Gˆªˆ˜ê3õ—á?­mˆ•xY#Œ\?´FÙÒÏÈç¤DË)k?FŠvéÔï‰J±¾HziÍÔM¹xuP2bÍ€6Áu®×2V1Æ©R*OåÀ~›kö¤¼ EzDOÌk¥”ñlðG‹§ÏŒø2|™¯Ãækí]ñØáU•ZWÊTñW8ž_þ8¢=6±u­¹™}0¹ã7Ù+Sõ¢‚ûo¥«tŒ¸×l\^Äü#OuÒ@d·œ€•úZ¬½ô¡]•¿Æ!ÑKp­Lgî2æÑîçF¼©~j—¬Wi/üÔ‡‡Qr[ÀQ4O#&•vÚðà£vFîØapt=³º/}…ä<ô•^m~›Êr(ª÷Î@©Õ‡:ëÀÚ}³î˜‘±dgæ+gì®jS=ü¯ý³håN)¶þ•Ji¢ TúŸ^ÐÿîýD(zHœð*;Aq}.¿·ÔÑêx¦èHÅw;:Næ+b$Žê`ÌV>Ig®oQ:œ­r£ô*…â*×”rm©Y‡:¤ž÷dFòÊz˜ýQ¿ŽF/RtDeòÂlÃZ«}šÞe{§5 Ï#µä‰œ—ò·#Ï‘®Ù—pµ1GqqñWÚª•v2åµVLiж!dعig"›‹Z§¶ÏšƒxÅÚ½ „÷Ë»øÔÆ]ꎺà÷êŠÜvN!©î}ªbéìÇÎH®+0+ñbsñ)3ù_j·É(-¤Ný Ü¡“Ò¾ct%W\í¡‡MúïZ8y¦ëÝœòfïikCÍëÍ´œ_±ÕÝ&Fr-Žc¼¸l)VQ†å˜~'L3©#7ôšZ´ˆûßÈ}3–ÞÄ='õk¨5ÞÝB„2cf4W) Žcþ£ïˆœÕ%eÒ®þ³CÃR…O°ÇáÊ´>ÐÜ®–ÑݧR$T½Ä,<ëL°¾Z uuºP剑th{ØLuBÑÞJKi-¶rSõ•¸éýìz !YB”%ÆÖò¤­×¹ÎÛŠª±»±—•Xi«… ÈÖKBÂcë³Ã‹‡$û3³n¬¤j‘*áãNÄñó¡äp°±*1³ Ϻ«QÞrhÞD ?‡È¤:«§ý€nnü‰¾©”Õ6 SßÙ‰‡ò%§¥ˆŠ•+óŽIŒ;ÔÇ@ôWÏØf‹í|·{ZB?çVªšÛPÎÆúrkFzÁ +^ÚsA± _ÿ¢—q>î1Òj§þ´I9X§Ø–c.ëíÈö¹tuvÌ;åg᪻-Œ¿šëµXZõOµþ¦ i‰ýFÕ©­Ü¸e<ãŽ!'»„ÕèV¹ÍbGQßÛ€O•î%pàŒ4ýH{æsïHÑ+µ6cJÏ+åC~5¥¨ø_ÝÍ'òœŒä¬NïRƒr­«ë‡v!Gº„*‰«¼­ûo”æ ©ömQÖgÇ•J/‡Æ†+£ÏV+µAbêZ0õÏ>R+8¸"q} œNft9{£¦RE®Âë刽 ȳ¨•Ÿƒæ_ké­’¸ŸPËn¾ >a„­½ÕÊIçà©«qŠ›©H¬Â)耲°E:œÏ”žÈ8Ï/†å_Ó{qeº«1®FW†3®u¨X×§ŒJ³ðØò+öELJ«Ú.åRmrEêìëäfQKü|Ü­cì#¡r]ñ-Ú±.ŸºÚf3Öqç®A\o½b¸Ô2ƒÁå‘嗜׮;ºº¢=Õ¦x•¾P~ ¢ºÓ¾3¨BíË+ó¬Ý¨äNäó“©€?EŸ5ç™`¹>Ÿ,GGÌ/ÜódÍÏÕxÚ:÷Á8¢¶E¸B2Ã5woú¯e³Â<–Ï3–:ñFe OžAnû¹èo©[|ÀØM`½q Frå ºëª­ ¥'ò§×V:•(uO±¦xF­OkÜΩ)®TžŽî ä-xµg>ŒêÐóôÒo¡:å.’¨ðs8 ìÁs&ùøìÕHÆÓ˸¯HIR^„kSÜ£ègÚ(1v.®•µÐu·¦ƒs_ñ½ÈyÅ¦Ô –S›¹ŒÑ'`–’ñ–»÷ÑÍ>Œúbìïr(4‘ñì°Ø%SGëȬõÙÚc- ìê¾pÏŠN?îÏsÍÜ«ôbnªxªÓàŠÐË=Èð—C׉PsChQÊ—åï©¡PyÌÇÂçàÇd°uÍd_æ,奚#å§z"ÖÒÚÚ¼q»¸ZoiÇú-Í Š>ì€Ú½´„ZÉIÔSï§öduumt§ êöÏïð·-×çnô}nÿV(àJËŸÁõDlô æÂTS]û%öÚG£0ë3®\D×a6}«/Ò“ìÓùiî]€4ÆÓ ›SçšB•¡)¿ý_LS±–"k5ø!×QÁœþ›•…3Ó¯¨«Qc4Š—¯#ø¼•žàT1gÑaù½«îT¾®Æ>­¿¸âMT5¾§ò7¿²oÞ$?Ìêˆ|·%0›¹ÎJ¾…&jÏCnÛFüÔ¾‡5Ÿ‡Ì߬öÜÎ~ÄgÓɹšŽR¿¼%–a3út»­˰’µÎo±oçwå^ÝùÉ<˜k!Áµ`¹£ñ‘¡Úu5úͰ~Z„*¸`Pm¢UÅž†ÕÔ5ßHï²öá 0Ý ët43ù=2{.zQÍnÓ=¨1Þ™>C¢W³Rs¸9YØž«™BÔÂõÙÊ“6Xë¨ ž„^¹>øhøáTN›sªµÛ°úÂüNޱؘËÓµt7£‚ÓJ5ó»<˜~Z%ûkÈ#ÊüìŠ4Œ‡îÔˆŒWˤwýZž3ò¢®HêQèe#z? [ppú/R‘—#“s‹£ó¦y6q,Øýºô¼&ô¾™>ÚÝt^òwùÏìë›ÅÝ5H™¬µÀ äÖ(ÄLQ~þ—®j‘'ìçí,Û/ù4Ÿ‡G~¬øøôÈKòÌ|!ûÜÖ*ªé9 G¡¥£óØá3™ÕA3œ,ÊHxºHæ;‘Ó™/Чþ&ì¼¾Ýõ"j‚vw(½¾ýs{uïÈ/³bç$i>s?i>&-݃ýYÅû:¨Xƒd-Á Ùyp}Ñ@4Í>‰{ò´ôñ¤~Åb4]™¦÷6{Ö¢?koµxÚvy¬Ÿsuûèº%±¢oL9„xr“ì.ÿoÒ^¥RÅ÷Å‘ù>ÛÓòö¥¿³*Fæç¹Zîs‡«9@%÷1iËÕE5C;úi¯ù‰+©{s§}á혽ýh3‰‘¼[Ÿºð.iÛÒç¥ù¥‹ó-TÄ;—~•ß)æ×ç2#ýCÄ6VÂÄÕ¨[©5z'55zt‘i+™Ûô„*ëñ˜ —Z€î:›…hùrlëèüUéˆâõâ‘âRìÄet@cwG.σŠmÑW«Öp]cäauWÈ‘¥iÛ;ztZ…È@‚ßîR^®¸ëFÿÝÆ„—Ø3ºôv1¾>\”аt7AÏ7‹>Åoòv§µüw”<µè®çžÄsAÉÈ2CWì0YIS³l»‘K™ÝØ2_ì'ýß±}óÛ€¸s¾1_ΖÝñ`צXñýì÷Êú»þs˜%¨ySxÕÎD…*¬¬~%rn#^5Å|˘m×»©ÙO©Ë ˆKÞcEÏst‘®-fÒ7{«ß+ßEœÿ^¹ãóçt‚}¡™¨Û\eÒ(ÌìV)¦¸iÔ¡Ø fä0y‰^[ý©ò·Tÿße‡àíô˜›þ„¿Y'¯_\‹U7"«`Æ?YŸõ Ÿû¡ªµ:s#=¢õh±ÒY£ÒwF´`ncµ¬ ÙuU ÷M!fÿ€þùÖôŽîŸ×ÁæA|Êß9ÅàRúgßóí_yveNu¹kž™Õ­±ÄmØ&W舟–Vk–œ™ x««Ú$w±(KB_¢‹: -hÆÛÀ¸oõ>J·°Bëj¬aŸüýžÏé¡=@¯§žPÕ2wMº;IýS7Ä,ê&BK½¹Úkf-Ô1\m.1’O."êø Ïñ> Ž/±¾§_i·bi~-/Íý¡À—¬ jÍo¦1¹ß°¨æOöÔʨë·µ·ÆFJMÐV^ ]isëPdb*‘û¿Þ'áßcd&èI1ÊO|¯Ýï¤èˆa„‰À¼7õËw -«áàk@Y \Fã1wò6X曈B‡#wV{G …®ð³ö=«È í èËÌá”#†¨•h{;CãO;î‰Q„ûký®Àê ZÆzhÑ ÷˜ÁhÙ†%r…°vA©±ÛñZcÍ=ügXüÈŸ¤¾ó³o®51ö4¾ÞÕÈðvd ;ƒ·ë&ð°ó¬ÕJFÞZX;µö<õ‹ÊŠxéÏ”í­Q´ß…Í÷ð´­ü¯OÐ3 c„&dЙæ‘ýꊟ:^¹ÃüÆ“‚„¬ÿÒ?+zlçík÷1è9Cn£¢•ШC ͊ƉúBw™Ùû>ž>4–ñ]1k¥ÑU‹öWÍ7¢¢únÇ>j'î:W‚\Ë£ W'8yjΤ+GR±¾’`´d¥a0øÄ>Tã¡SßéªïÖkãCë¬UH9!h¬[ˆ‰6^kïCŸ®¥’#Ñ%ÑÛ«Ej\54Ö‚Çc,û!RÔ•½Ö@”A!xGTpõ–á=c=˜s׈Mä¶Qƒ•»¿ÎH©2ª ^œ…µ)ÕH¡˜W{½‘5%GËVUÜ£ž vµ.fÜ)­[9³ðæRÊqB¾Cä’|‘*Úcÿ¨ÇK/m·öD_2dÜ66âx©ì\å òe7,¯± x™¹¹ÓJ ŸI ±ò^±²ö{gý¦ ×zú—³UG´7ÂïW¶}¡#ö¬üY–*YSdüRVž9/÷=I#i¨õ’*æ!B”ßúF9g…_Y>€Rd”"ŸÅS:DÕ]:9ž5i#õSìñJQŽ»c¬UtíUÄ5Ò©C宣K£° rG;'›¶Î]Î*ëRTÉÒö9?ù2kp¢)çÄDy¶¾,}ôTöp#[ˆ^†œ— Qcìèÿtô|ŸÅþ£ÿ·Ëôßë;®‹>‘÷ÇñÞ¿^[ñ?ãuÜiþ)E¥‚Ñ‚5Iy²¬äÊuqT§å”×{¥<=…X(+ÒÙóì´î_õ:?‘³ÚßÐ@sAïÓF+z J¹Rj5@-·Z),yïŒBS|­Txú< ë)1¯´Q‰³S÷ÄSÎÊGéïÿÎ&0Õrê[媯 ©¦{åä­õ•VÄxNÙ(ñ4ÂÑúkOÕ~-žë´·®ÞŒ I ‹£ IYµ\  VáûcÏDd]±a¥§tù:o틺;éMOÙ™Í}žµµÒa|âþ‚íR΀¿{3grr>˜‡m÷õµ—ñôœœjdX|ÄÔl†RU¦œ¯çÏêu›e:cŒÛEéWä¸Ò»ú ãN§R´+:r«c7aŽ#ø~3Îgž·d¬åZ=–ÖH §&ê£G'mõ¸Âÿ‘üÊ8£e ]Ýs‹ÝJ·ƒ¨YTQ­¾šnÖ8Î`ü;»ð1ŃdëY¡z[þiŸÊL7k­ÞfeÊj‹Œ3”lñÔ¾*_!Sf_ž-Û‹Y[jFbÇ–z ‹ûJk•–Û°ôn:d7*?ycFß2=ŸßçûoéH4°Oqrñ$çpC÷4+s+ùf ¥ÕV†Ì7<ÉÅØ½ od4Û ~Î;ƒép«ûPÜŒn€KsЭH’a ªæèËŒ»õ«O™cõ`´zèÊY<ÅGéçùó¼~ŤÒñùÑâ`*EOQ›z í—OeV›äs%†¨‡Me­ü·¬ghBÒ܇w”¨×e8Ú>e*¢¡¨2êa=q4T•VÒ;YÍî•Ùt:>+FJ?€á»tÑd‡Õøb/dóK¬C§r½ñ=Öw?MÏîJdiQn滀¬OÏ>œý2m“Uj×ÁÉY3ù^HÐ0,Ù{qZq7U˜—XÕüöxíŸge_4ñSºÌ"ÿŸP‹z•ºã[\WËÛAyS¸9—yO@*Ü•'Ï´9ž&¡½S~ÿ鯔%î^äoRú0­ÏGèï¼ Ì?€Ç!ùOhÍÐàE¸:ɼY~¼C†¦òx)µÎùX•etó]3kl+f"rЯD\ª$ŸöfŽúߵГyÀYEEñnê\‡äyTN_KwÑ—< µ8?‘Õ¥¥ìØ[¬ÎͬyN<_NƒŠU¹ÃJ‘;Ôì7z:UG4ªÿŒ3(#ö4Ÿµ»XƒfkGŽB'ÿH%ó‘tJ¾*ÿžêÜb+úsÏS¿R˜—3ÃéÀ¿5÷d>/§]¨0Þ‡O÷L×Uõeîf˜Ff{Êjì}h?"1+ts± ÚÑiXó·Ó[ùºôý†ÞŒ×\Švì‘”¾ÉwCK/€ÉFéPv¬ŸÙ]—·@<9iŸk‡ôþÆGžíläYLë$ÚŸˆ¹Ìé\MÜŽ=C·üt:ÿ¤S·<Ÿ’n.Í Þ>Û÷&g§ÎÎ]òñùŸÅ/K73ÞlÃÜt •lw‚éË6¡/bÏÂHÉHZV×Sºn\ on®7ó3kPž=µ”{×ÀÖÚ~5pXþIiZéˆÒçåuòûÓq=¿«ÂÖ@Ã[˜ít샲9zÖAÛ§%ô“ÈAÍ«÷.ï/:ŠíƒÏvg×çÈÉIy§4¸X·tRiI¾ŠnëUåº|N;^UúL=§k1:ä‰ÆÂ½áà ,™žÚ¨ÓHI?£®³øð½¶¸Mn„º2WO ‡Ÿé'7åïÅ¥¡ÅõøšÛ±`úg·”g»¢‡Óýñ,3uß³ÜÓdUP(F^BPnýÞØ ¼¶ëÜöB†ì}ºzÄXk§{°±Ãô£ânzÊ/³ûò*<éÏÐGé Ýbe¼â¼â$| [©r„:Јë–aWº®H~j ÌV”!¹ë~uO©òt£á\5󝋿Š3òÌRûGÆäKéŒ^A<Oº¹^•îÏoû–¦²ßì3îhc¼X¡Vf;Tm„“Æ—ÂTcõØ~bVèZ¾ÊrÜ1Ž×êMñAï܉ý½ŠX¹W©ƒŸÄJƒ‹kÙZ[Üšoa'Í-ô<N·æOŠéÙõ<Ž#m¯!™õ<#ö4î èFór42Þ:üîÞPÆõ“5é> þÈZ„óûaìÄçôwJOpÊÜ(Veݯ¢&ÿº{óýì¦Ù€±ì™¹ÅýÒÎØÀêž±¦ºjLf¦bލæÿí ®Æ¬î¬cUÛ¢¼¹YÉŠ€ˆnï~=û n%Ö}š5KOðÉ[DÃ_¤7Xw§–Ú ðVò-êúlyh¥Bµá*·F(µÜ9;R<œÿˆ¥Ã|6½©'©÷Eôp ²{Þó9ü÷³xY±)}Ñx:WzN¬ëî¬-´1šqm¬A3´2ç‰2úO)aNàL+Á’3‘én¼O\;é½ñïâÝÙÈʨü:½ÇÐÓ°ËîÍz—>áçys4Ä>I VE+k椽“²Ú±Sk¤·}hý{aA앚ó¶ãŸŸ`Ä#} ûìáœÊî¹—óyVA¼Ä*Û{1Ö±7‘KrïÎåõ€’öܬ0ê}æSfÚfVa‹\ËhLh6è•ÖÃ7FGÓÁîAçñwP÷CÞý”]Šg/ÍuS?@ç— úÀ<«ÙU=ëÐ_30¦TGb]uØ!5T+µŒ0­±ý5³CwãLÇsÿšµAµÄ:ÏÓcý ôý*ïÆõ[yõ­•ô ïI‚㓱v\<9vÁD<« PNõÙþ¦Agè¬Ý7žqu3ßYkn,gJÃ9ãuâ‘G€p1Ÿûæú!=;±žf%¶÷s0í„Õu ÓX^k-Ò¨å?³Jcþ¥ qi‡¬\…º¡–û”o¿‰_êÍó; ­æYÊæ‡0ŸndN‡ 1ÿÄ[îÃݰë®"µ m17*•ûÑ£nýV ›«äã+_fB–.öO×cÄ=é]} מE+V€Q+šŒOmçÕx®iBN]Ÿ7–™šk»fE^já­n*¥âiæÕ«ÙÈñýÛÌÓ^t2äNÙ·s(Úº<šq<³ ™‡–ÌnŒQõŸf†ÚšQ<õZ8µÆ¨+žW¯ÔŠ«å+,cCù¯Ê}Fqæ®tž_agÌ~ѵt×tt;¢Úç> ½¦ÔõaÅG˜~&%Bo­)ÇQ+3Ÿ²7/£ÔQ|ïØQÜ1Hîú°v)çb¿”Q¥U c׬¨ûJˆÑ¥y®uMaDö •­šHå·K¤[Ÿ¶·eìæI@æÖúáF´)úUÃù4|…TÖžù^j¢UU>”L{ÊpBŽ"¶*%n œ¶Ù‡³Ò:) ÆŽúxáéuÜ‘±²' # ÑΛӊ¿Ò+FFðÒ6V2:²µwc1µF‘2V΄ٙ9[ˆ:ˆÙjÈ€«UžðYæ“V+¬©Ö)ÕKá…©•ä:î}½ÉØ´RòÃúª=y¯cm·)}”7áÈw+÷¾7¶1êQ/¼ÆNÔwÇQ:¬WHÛ°´ÆMqòœk6Ë8E[é+k-îŽR"¢‹ÕQ-‰×XÅ ¾‡÷•wQ•vLmzH“P´CÚñ¨¨:skÅREZèg<³Õʇ´7BTÛ¤°ŸYǹ'êéz#õ"¤ÂÑ¥„< ˪܊yÄÓŽ$'Œ]"«‘ÒXøê‘Õõ¨œ?EEKžI#9Ÿò@J O;`õ0¤W;dw':<] ŽGv‚HïþóèèýïkãÞÿþ‘bÌŽQÿ{\瘱CFÞ‡fÊ qxðNÐÅWâ(Îj 8õc€2¦¼+§ê›ø‰UÇçÒÀOMQnµBñ}X^Ç“wúi¥…ðZyò¡•ÔrY#–«BÐ^ QzšƒIç°@Ñ£†÷É}ñT›ÔuG øÚQÄÆN€Ý_ÇS–Ôg%/4Z™ô^ÎVsìOYŠï†ò9’Wk•µ!BWæÄÏ^µÑÒj‡vWì“~QºtXÊÀ!ä)¤\úi·¼Æ¹H5_©+ÒÇ~§ðôžRIZª‘%ß»ÂÃLËú°Ý#%«ÎH =wÎÉî“r+ƒ¢g¬]‘ʯuµLê(biÂ9j5ídýš³ÌëXü üó\à63®6ÕµTŽàœ¤VXñ“~Î_ÿ"E¤rç2ž¾’ÎÒN©ÓÿªãÎËzžû½˜o!¾ú<<÷[t?eçšÄ#3ñjã€ìš)(¦J¶Y^H­9·\û>¤­”8-ƒœP&´–J™Œ»•§à¿FÝBŒ÷ê4_“a_EœàJW»;‘çÊ-g#wÄAa;]~*úÿWN´ÆÆÚÆÎΪU ±Æšd»ƒˆ.%’]Eî°/ë¤.'WÚšúÛÀôl»™Ä@ÒÏnò¯ß {¨5WrÂr+ûò3V¼øÎ™èÍÄx(ï{µFxçÞëvb°9¬+>\úžþîË-äj™+øÝ¹'‚ÉÁècF‡Y˜rÚØV©‰u5a'B·ŒêCõ ÑÃi%‹t îh8ú5ËÝètC.v5ÔÞʺ’ÏE~•ÅOàUjÕKá“ôÑêŠ\ðá7R¿Có\)¼1Ôµÿà¯÷Œ¡·²œqOð<ŒZŠõˆ5íqxœ’â ÆÿŽc%C.É_õGšËï°}!ÓW{ ©ÒFPËNÔ:È­õ»)TYeÌ>ŽÛÛ]à·»ÃÝdoïݯî )¡ÅÚPqQ×ÃCEœàgú.3'i«dÂÖÈæº@œG¤<™ÊLdg)ù÷¬·;‹ÎÒ:À´ö°!u¶1dF“á};\+ÖA i”§lhÿ•Uí­ØGü¶4zÊž¡½ˆl‡`žìœ^Gáî‰vRÖÏ]¡ðȕݥeÌÐßÀÂÌŒË| -(TU6µ¯ê§Ôvý‘v7I7(º£w#œ‡´¸ãÊ=^—S×|¾î†¶n¬eÀÝ\Ým7 |=sßÔȃ¾F\'L=¡30rè°õÖK† ‹Ñ„sÈ€>G7/!Zޤž58–O¥n¼6¸O¡þu(ðÚʶpG‚«ñÍ((±“xе^ÊÚ¸qDX9m Ôkiãþ­ÈÉzèdmþ)Ð䣙ÁiXÀÊ|Ú²)tXÂ{Ùʃ“¿h6 Qn‘¹( 9X?Õbm“³Ñf ‚GUØ€ÈGÚù+òênTh‡³ô%`îÇÞó©ø¹‚ñbVèï‡4-Bk¯À.Ž*ÇùK¡­=̈†ÍÚý&ijΫåCmSXƒHŸ§¿º’µ/{}þc^I%á8v©ÜgßSQ8½—WCíÓàéÀ¼>Yé~ü¾ÙíÅ/‹@ÙÅèÔÙPJëXèk¬é‰ÕOm“vAÈñnóØZ5 wGåW¨Ì¾O.ÞÆÚý+a]úÝì p­íÉpr_ú Š¿»—.*6¦ú¿e19û{Y_‚ç@òѨHhoô©Zù)]Õgä±Þ|Oîh`̳©F?RL*Õsóü|6™ýU¥[¨ý•Éœö&çÈt-ý¼x¸¸” ØW©‰“ËØÔ¹Ën]ÆÖŽ«—Z¥E~Êañ¦Á:óx©Í¾„~Îqù‹âäâìÒéÅÅžÅ:ô. ÿ›<2?œÎ.®Iß•¦ûçr¼^7÷¡^Ô^Çèn3÷·•ñPZ¤£±¹ƒçiwðT xÕ"¤Î_3™B᪉ ÅáyïÒž¥ù'ä×ó¶¥7ŠGJ·T,ÈŸÐÙþšz›`ý*>à7ÔWæIÔ1&BáÅŒoô®#£e(¼¶ÞZœ{©»6?Ò–þHír";oj¨øg~Ïï'œ˜õ÷|>½–§9Õi«âG,ÄHv›xFÚƒx×·©ÖT0Ïy@lÇbÌFËÕRµQÏ¢ì„/S†"˱Jí*×:´n0ÝÍ{‘ž:ÂÇ·¨ÆÔäePq1]ÇïÙuño¤hUÚyêÙ›õ8>•þ‚­ü=[ˆÔ^^†iåèòÕX<#.‘Þ‘³5ó™¿7˜ ÞTïæ!£o¤åT„‡_pVW ÕÛÛ󯨺ÕcY? ú~vùyjÕìBø%»±}obÞõTÂßö›Hëµ¥O° £8[7±gfhñZ¾‚ïR³=KýåWgîgçÕ i]ºK™³;Ƈð¿V78h¼ëÆË•¨ˆô»V³†3ÏãÃë©¡žCÔ¹ô'NVú,Ûò+žèMWÖËŸ“¯£6¾ ^üXº!¢Î{Þu6ÑÝVG”G6ÚÖ{ G› 4ý—TV¦íý{*^ •ç'ÙEќĮ]÷,¶¤gó0]سò™Xú[‰†6f×Üù0®ŠõÝ; ,ØÑ]×ÀϸÊÁó9ýÍ.=›šjEC›VXúF¤ßßä™P5T'#“@kö ¢÷à±{æàª;.Å«^’ÖÆ\XJµ‘½m[ íVÅ6dͱ•ãae¼:¢ì¨ƒ™¡jû¬-ù«£ðƒ-ø«ÂÏâ5·ç—6oÊë1“ãÓ6¿ñ‚Žy:‘îÖŸ‹«K#¡é<ð:¨•µp·u$éf\r/€»È´vÊr'aµ¨GÖÅ×åÎIPøt4ä'øÈÅü–Ø~Ücú¬8®´aþ½€« ÷`zQz5\¬Sñ|þãOÄ&AÝAàªþ5;ÚWåHìä§–O;þÕóFçBÝ1ô­×F~V@·5Ñ…Ð÷¥K׿Kûî鸷’úõåÅÅ©ù¹ôuîY| uíÚú[¨ëq–ÔúT¬5N‡Æ ×ñ ø°¯Î…/[ ÏîW™ÂúƒRö\Ô‡€x1uø¡ï­Ðù ,äÍØåƒég/Ï®Š=$®‹…°wnÜi´mï*üuôœÃ{O& Ù¨Vއ‡çäsóÑ¥ÏÒpêþOáÃnÁúl̯øœAOéEâ²[‰¿É'±ê…Ü€ìz&˜ûä'9xî”qBœ2¬~js¢Ça,m„è ¢ÛÃÏ-¡»F7¢3µVžÉo|vÂB¬&kyˆ_¹™]|Š\Ÿ§b‰V‚õ9ôŠ|ëcx¬?Ô[Ž#_éÅŒ Œ ŒãͨÍœ‰2Ô«7{{+rèYÚ¬B¢o¾˜]ƒ_ƒã*´ä,:êëÿelAß|2üýqÁÅp5VkpÞ*[ï²{¿$ék)ñž0Õ›ˆÉâ×ÉmŽ×Á§Íe]û„ݦkÒ©úÊÞuÚ‘§ŸÒø »oGéd¨}5}ߊü}¦÷ÓñÙØÞèѳw£òïZ´Ð g&êæÊëúM öÙ¬C9›^f=ɧàðÝäˉV€í+ùNòÐ#·¿`Eϵü}_=¿}5TÖv*½Ã€£mëÈ8ÍÞå§ –0rPí‘ñ¶û*Ì´ˆ7»³ŽgQ~.ÃõhÇÏ¡ÁsüÔÔü8{’ÎEŽ~ ?o‚îû öx6Vv:Ò _ôb®±ÔwêÉ¢_f$¤ôúÞŠ¥Ñ¼y°û½ìcÖ’M£³òÝœWÿbp}Ÿõ7´¶?ã»è |Aİœ3Öï/Ç‹uh÷RàºR_™‰:¡ckoÅR;¯å—ºQ«CO¨R³áÜ»ðîibé®ùf°ú#}¤eü¶Ö0p½Ù±ƒÔ ÊŒÅõÔ‘ðÄõp®r~Ç A˜_üœubuW)ÖnDGÁuDø¼Å „Ï(ÞNÇèÙt8»øúÿ}‰~< >„¿‹óy0Úí™oæ¤ÀA%6>ä¬õ„°ïòÐϬÕèQµ^åêÏp[_:•ÕIµ¬h9«÷]:‘u!9¯ÂòÞE—òi`÷æWÛFc¿‘³¸çÄ ß}>Ì1åžu3Nû(rP¯f¤¤=4ÕËH]÷Ö{ê°<‰ýáýñi/C¼Ý¸Ý|¬íŠþ›á'ðÁ3ïì‰X½ËÝJ§5jµTù¦š²kå+xó¾ÍvÆ OÕÂ’„ܾ‹~¶`yÿÂëÐÊ;‘¤ ¹røÙ¯pʼnkŸÄ&Ö%D,¢øÏˆ,¢jéeýJÚ÷7"õÛ¡³ñÙo`ÙïC/Ç1›éTà=F‘1xQÏáð¬ëT³ÁÁ1”Q)j,}‡Èt£âgý_éR¯†”©"7gCøÔŒÍÞO³3tõ•”!\¿äÚŽm]ž¥}6sMcPÚ A{ Oͤ²Q‘x†¾(e>­Ð:;yce#p2VjÇÊhc¤ßäÅ}”í\í “ŽQvFüuxeCû§•W‚´ JhøGþ¯ïõ£¸ÂÕyaŸíò Ï9øôÙüïi±þ²êH¸æÎÍVpÇõV†ŒµÜß*7#sЦ9fè§°­†Tù©¯ä@óTk•1¯÷-O¥ôT °á±Vê”û¸ÝÛ¦œz§ÞÌ]ŽÞåXŽÿßúÒª +TˆÐó„åwÞ«»úO¿êïN© fôãÊ´ öÄõÏÖÝ•"ÿW‚W¡©ÆCJVD_Ê™“ïé…J)¥87Çñ½#»R;öÚCvÇRØ ÊuJ…£9vYE=>ªâê˜ên<ôjsXxm÷OÝ‘Zz÷¨JhEŒä¼2ú=ÀÒk¦ßÅš%g žAqeZݵö•[ç-MÄO8ê­sÐfG¥2x§ŒXϾ¯]m¥WŽØ5®4oÐw))êŠ1IøLçî½JTภYÚz_È£j¥Ô;mš^׫Ĩ¹J»èTEf¿MxÞ!Lã܈rõsb-ÎVZÏÞ\H‘y¹ô”c~ã}fÑÚIe«"‘ç‘CËKzIÕE&jßÒ9Ч(ÛòV[!}ì,xŸQ¿24o­•J%ÏÙ†žI7åÏ9:{5'ü°W+CÚôI=Rä½cEÄïˆZí‡ØH}õGþˆ¹xû]ðT»gÿÃ9K«©íuAÛ€¤,É?UŠäŠ3ŒJ¨°ìiH3áGǜĹéßõ~Î^„,.!qêJŒo]*Ê'y¢ísfvεV ƒ3ú{5<*æÆjG¬œUVÌŠÄH¬ý+g©CÊÅÆ±åšö6¨k›åФš^;¨è èŽæü]àÎdóF½”¶IIñôWu`¬®H_u>::ÚTaSûyø?‹xAékéëj)i+<× ÀÈ¿%ž‹wï‘Zœ–q»Kqí°/jrp-Ö‡­²ÒÑÕS*Ãþʇû=ý¨^ûçÄ<[U“¥q§Ð_k‡ÔU­‡ ;¤žUÍj‘ò‰ä#·Ó!Û—\é`*‡@ë9Èí®t;¥vr wÒìJÝ`:p'p·+a†áµõ6ÊlÔ¼"S?¥¦3Ð7ê#ô¡½‘ ;C?¤÷XþâõóÉFzçsÁôl•ù^þîFc)²»šÞÇÍp÷Kð\—ÑÔãžðÅœÌNŸ–#ì’§.*C±F(bm†øÆªÒµÐ‰Òï¨Gÿ†êé3¬¿šƒ=Èzê€'³w§[9{9ƒJÆýÌêB`º‚Z;åï"F/¾ÃD¶q‚:% ô²vÉ•d×\ù;ÙyjàÍùC2ƒ99á.¨{!•’š|TÝ•ªÕ±P~GNèOÔÄ_†FÀv"²ÓŸjA]Ø›DÔb¥FúZÕt›9Õ|äp-VÇ'´²ºOåïÐñ4°»•^Çdô{ Cg@ã©!\@Ì»;w˜Eqû[K9ªRj½Ï÷J–v+¬‰ùI5Xºr|JqEêÊ/ <Çs›³¢ù:¤é^öÜFõdõ’oȹ»çS\ôƒÎäg=¾Ì#uQ‰‰@;`=AþÆȯ,‰«9ç(  ³úhZ– –¸”_#›ÿuïIû@ÉsЕÓÈÿ†Q‡|€Lx9ñ±àçëf®Z’¶a•*ãŒè—©-ñªç2ù‹oUÜçyTÕàò8Ó—¨¾ÏfOÃÉjWbÝoÃöw¯¡j3½ùœ_ïþ²Øºx‹“t’«Í'Ÿ2×p±SOµújN¬Uweš¶X›e„:™§¿?×?k9qíŸù‹<¡ôXæ—drÁ¯ É`÷S'z‹»:ï¿?£ÿ2£Ôšÿ˜–S÷tÇ×2Fš¦a "¢ÓÒD^&tc,y¬<û‹sýᆿî5*//(íWz²¸2?EÅé{vtTVL)†ñûÕwSñª+Îᤲ7ò3EEé~«m œ_XLÌkƒ©'“¯ÁxÆ1¶X S«£LùŒ¸zøY5ñ‡{S¹²˜Zú´ø€ZÂÚäö-ÅúÅÈâËÒµùÀtf~¿ôhñféèb1ûw¤~Ÿü-»vžÉµdoBÛ_n‰‰X†®h§´¾ÆPƺ®õmâÙ‰ßM¼ƒÕè+KßÐ{!AÏj›b`ñ\±[§®].ìül§]‹ ÅpN Œ&}ŒE|m¥vr 2¸&~U(Æ‘ÛkwÔ1vFæCñNöF¶¡× Ûå?±šú´âÀb“¢[iãÒºÅØÒØŠ“XÆU ¥ø6u'¾õutõV­¯…¾^EU4ü‰£ëÑ•˜ÿöå¥þVÏgwÎsR¯çT¾ß±Oï},ß'¬%îE×õ0¨»ki";ÍÞÌU¥k¨eªDÛäÅE¯|ôüë\¢Ë5:í„Í·6°µé¹CðØшÛ=mþÖ†{!÷§.ú• ¾XÀ‹ø5òéôWN£ê?“þà9ùÛ¼± 5mé¶Cíónôô[ª(PýsíïÁÈЂ2õBOŒ†õeBÖþh/¤·§¤–êžJ~Íð¬øÌýÖb½Ò¹y3*œ›ämóüFÈ·ifÔ•ÝpjNŸÞÈo@<¦S³rŸãÁèÌe [R~£¿"µÕ\í±u‰_ #ðŸW€ß0ήº™JðÎ¥ónÔ« çòÉ/ð0ÇQêF·îDtè¼<¦8‚êÑIÔU¯À6ú;þVàÂ2eC÷Ü/Qž;ÏŒö´M£Ëûgkö"ÍÌWbKŸN)v¢ªø6þå†|ãþ ÊŸK„r>¿–ög®¹ë´¾`°;‡:U2~)j*ÆÈ±ŽÍÜÁ3ß•­AÄ žÒµ.–vµËÛ÷"Ö üœ}rËò©øì.Tr/„_'¯ÜFïá©§`q÷¦ª»W}¶A‚µ|ö9¥Ê(ØxÚ€vxp9FŸ½…¿õgö<¾E½ôm<å•ÐõÂrDv,xž—öÎ_Qµ}”¨aºŠÕÑ¢ùK‘ä#€ùðs>ù¾W¢ÉO_·æ#‰ †pßbúáx 5ÓèÇZ¡0ä6lžÔÕþ¹RÝx¢ºl¥pöûN1ÿ{jÁƒ¾KxqíLbƒÅùÎü´¾¨¯£+ÕÐû;hëêÇ´ÚÊ”ÌXu¡Å±rcŽd.,¬¨iiŒSìÊ«Ìá—÷öD;ý•©Ï ßƒÈn?4´šU(ö‘Þ‚¢¿OcÙé:‡(q+jèVÒ…ç³#kr¬cTWÕ¿1f1´ræ/=ĉñîˆ;Žh¬‚xúúEãW£A—‘yŽàÛÈR-ߎÀ“Íbõèöp¸c.PÏSë`ÅϬVü¢Þg½Ë} úTýL誚êï(xþx“{¼‘Ñ·ð#C/ªÁyrqž!NZÈùÃo³Ë¿/´°Z~öNKÐØÊˆx)AŽkž­F*/iG=PùU–=µÔÑÍuÔÑA_¿C_~D7/žÂ ÝÌ<¾L³è<¯"þV~ ÖD{*SÀÆšœÚ:a fŒ`ÅÂH]%W 6£pŸ¬Ñšû2‘ÄOÒ^HÑ.¬*éDÎ{«¡Jùäg\ü4½FOÐÓÆ=?ÇÀ~3MQB„mLèÊ“A[«í÷;aÛI02Þ8Þ B^wEúAÓqù4fû{òÂ[äjdø]4d>×YMð¼0ŸÊxZ3±Jõ߆dE'ìíŠó{b¼u7õµš¬Çs‡6cíÎÑìP~•oÍÁ\ã·ôœFL³„J™ëóÜ?¥ïwmŸ89¢•hëC¾Všôâ~oÅ-ª*æ-îX×ßAÌÆòµPo&öØÝ«žì=àéæk,†ÂÒ x’¼W¨çF%V/Õ í­õ/Ÿâí'ÎA öû(®mPæÜËg¤=(‹ð;ëi ³˜Ç<2%×«Í ¬]؇ ”¨Æ¨)1fÔRµBò¡i7Bªjï•åұͶµ Æ jeD}Ò]ïp•+9¢—bÎSí6£.îÔ߸jg|«Œá)ôþösFóW«—RWIR^£>ä¬ä´øKÿÈÿ­¿U~÷x½©Ž½VXÄË>š;…ª×TWÆr•Õ½ ­5Fϧ¾6Áª©Lì:òP¯”âZŒ¡åÝ Z$}¯"8àIYöâ”9³kÒKíÖÆ[íR"K[kœ'4ãk4Ú<ñSš…--¬êqÕQeXir §2¢Mv]’Ëû›r#5o#Š“"¤è¡¨!Æ·á·¤cÔ²C¢½::âj¤bÏT“ëÚ@ç½3mÔPï¬<Ë[û Ö…¥—3tÝŒßiÏ͹äUÈbØ<ñö•r’æ;±ˆ!V„ö„±ƒ§dz§RìTé%>ñ©Ð”«ò2x õÂ_‰‰V%â¢NÍŒÍ>Þ¦c×QäýRÊmúU!:Ce\) i°ÃÓ—øVMrÏcœD¡„jÅ„©L…Œ‰§³óZϹòjí‹Ö®~ËÕ9báž‘VøkÜâ®W;ùžEã}Ê´RÇXÂÒÞè£ÃÞ¸nÇ<ÛkÅÇ\Š»=?Ó%“ÊÜ3n='¬™(ëþ2TϤ÷¤ëfÚ=‘-–GË£}Ȥ}à©– 3äɹ†Íï‰Õ4ƒÕxòÔ| uÔç©ÎlÞžŠdg.ªÃõŒ¬„êÍÃ?««JcØpg¡ ßÕD%Y<ƒŸÎ¼ h“‰VÏJµÅœb«|MTú(oœ¡.4­@•ïfV«.Ë»–}žyµ7cy"§”!1õ½qRøìÐa-uDÖRFykÂ?û™Y¯LµmHé0*yÓxŽ\Dî\,)ýM¤fÆ¥gÑÛ'tǯ§Ž«Ijޱƒ2=uLkŸx¶€s57/¬¤²õ{2±ÉóÿÄê³ßò‹ ƒóµTÉ%sù‚¨ï|2ªSÉV\c„è‰1£h;ÄC £„(1ÖÞì<ÿ¨½j»T¶#g 'ùy¾¬ÈÝ$GR)_En;S£#×=ƒBɽI‰NÄ,îö$²8ÍO}ÒNhe”^«~zeÈ}ÉÚmV×2m„ëÊüÁÄVûÁÏX)zÕa¿F¶°QÑ%_O]í@òÓÓÁøy ŸL½z ueiX01Ó†TšQ‹yØ!qôÜ;uÆ«ì{¸;bIÚ»ø˜ýòÍ“¨M=CæyKH·eù+ߨ>íJènrÞG©^]FE`¼<{MÏkܨÝÕ/‹µu0µÄSÙbEœ¶ßÌÆ^µëøŸ§v0ݨÈ7íFbêK¨‘¼˜Óy½ŸZØÏ©>^GcÎÞC;QÙæÌÚ j€;¾µ"ÊŽšê_åV]t^ê®BîNäÝdêøŸ±Êÿ^xØU¨cò™pðz°úˆ3cVñÿ±PýBæR"¿ê~ý•[φ’—zuãbõÓLBï/Ô„… ¡=WÊ”Øî蛿†¶ØŒJÈãtP/¾¹9—ªÁËiûü8ïKõè`mX>Yå<Ö³7 íîZ4ÏVVû -ê…:5Ðø×|ÅBZjm¼Ò¤Ï¯f¶žrÖ;oRTæß‚Ùûä$„c§£9ýè(½´=y÷uÆGy]ÃÊñ÷€èÙßî š‰„èG¤°zÕêèó*Å!µövíÔw%b¶CçÉxÓÒ/ù}ìÇЧÈv{“u^‡s~jƱhåþÌä3$ÌG%½îýˆ¾&Rað —¥Œk.«åsEX{ñT+µLRÚøÃy¹ãpÚæúÅ81«µ‹®ÔN2ùtÎ_‚ç/éÜ=uo§ƒô.°aœ­wG©­t •°Fr O‹ðîz ª¡Zþ8}7âxá;m•²Ýƒü«žLd–SSÏüxÑ^z¿XEå2±"ÔÕã›Sñÿ›ô7ªÊkÓé9 o_¼Xœ^zœx/j #ÀT}™±Âƺzå4jRÒÝS€Ý `=g0›Ë¼Ù$¿\L,YÚŽ%É0?@ޝÎÎ7£ò¡ùEÖ<¯Ml9½Ÿ'*ÞÉŸ3§¡¥¿m cÍ3;m‚~Íø?bj£¥Xªº?Ý3™3§*4þ»âRU1£tû›>ú~€/᜻+Îa/ɱEcq1g­ý˜äW¦Ïâ”§Ï©õ Ó@íîK¼àb¸äéBFSJ­zéúxé=ˆ×J­ 9j%ÏkMÿfŸÃ®ìZ¯´U„Zúï¦½ŠŸ”¶/uªøG§¶ÒïJK;]‘ÏæwQfÒ×™öïÐ!pEò¼›r5µ+u/âTW+ãé?õqꬰÕMOÙ^¦ïïÒŸð"cŠK›s|Þ€Zæ{¥·åa¥¿×—.-õìÔNÏ¥‘úÝötMYÂ]w= e„Sy¿DÚѵ„Ú!ó*mØhÁ]æÖªgÐÓ¬¦úul^XÑ›¹Ï¤f²?ûšJkWtªø=½¤›JÏÀåþTq® ß_ ¬°Œãè>\^ø‹iþŠš„±°v!²m‚^DéÙ®O Ds²g:½€]ÿ1ŸÇIgïÃÉ…ÈäxªÑKs+nʇsbÕÅöt]¦æŸ³£¦gq-öð&,aoºlîñìQ- ò"®W&8i.e¤lFaÌj½ÅßJë·@Ÿìqj© ~kQ”Vä&â…Ÿ7ÕKËóƒÅÅ&Èì"”m‹[è¬üª¼3õ|è:†¬ ¬’Ѿ²«õ‹8Aìä¤>L¾š;ÎDnÇS Þ¬ôW~÷i(>ä9V£/·Mn.]Núpª'çañ_L×#Y‡_M¬2Ÿw1žÍÞú‰øûé³X‡] W#G«?eH|µCƸ±–°n§A‘žÉãÙÓö28þ2}\lN‡ù:N X¼/ÇŸ®ÄƒÕSñs7q~WØþ“™þ’zà©Xbóþ9ÐÌÀj…QˆžR˜Zƒ¨D©+}é€Ís~ð9ºÕû»—Pý8u£›ñ$ã^HUïZ"—J[#­CÑÞ»¨’˜÷¥¦r˜î L§° >™ëÕ)­ê§ò#•£*gÞè*fWSlF­íN<ó­Ìúêô&}ãÁlíü{:-×ï2,ÿÓéµbõë×Áë:Vø|K§å(*SÛ`á[YW´84G Õ™3¨+FßFŠZÃNð 7”ÕïΧïyüÙ†çO‰ë¾FnS¹|=(­Â?”®NÑåyƒ•ï€ë·ð÷,h±ˆêØbFEÝØ]XVcµCâ¥Ï6*ʳ^ÎÌ©û.èËtŠn'öºÞí“o¥_öcš‹©+~ ¿°èÄïoubóéõ|Kÿq ñÂ)xó­ñqÓk,\òüž9`d.¯ìtþ<Å^)2z¯FÊwËuØÕzœ;1 §±7’ÙíŽç|‡nëÅu¥}ŠÍòÄ ob¯šsgú†Ø!Ú£¸{²G™›ž9=Þú¥H 1Ö4†«òÔˆßúéÀ†‹ò/ˆ¿v*v!Z¸ ÜJ0ûKz›}|+Ñ’' ï3D /CûƒŠìz¸èƺ4w¢ Y´ÖmÄl® ííL©jœ¯Ow}”»Ñ\+}%ÿ¤OýQ1²bkºcc±âã©»úâEf²‚~²»>oK_Ñxûó+RöÌó‹Ûᵑ| ²(ý´FÖa¢·lü#®úôøE›‘ÌÐÊávDX×–þ•¶F+û-Œ ¶ý?D˜•Åõ‡¿™oAEDª ½,½#ÒAEEìb/Ø{¬Qcb¢F&&ÑØML¬±Ä * ]šˆH³!Š  ÒTÄöß{þûäÙ‡Ýåî½ßÌœ~~çÌÌÛÈÎSŒõ%r{zúUw‰.Ä{ß›úsÃáfVÕø>Ì\ìÙÿIňû"*]Šl×x¡2~>²¿'Ò>‡ïϘusxùQ§•ùçXë4b¤‰Ø›iüþ¼¿ ¶¬xˆ:Ï’d¶mÜÑZš yšœù™Ñ¥ùŠˆ‹ú">g„­—9‘ÿµ@æ{ðÝÝu±?÷`çë í@„2™q–cOÇÚ©Ã9µKŠ=°ÎC¨=D½lÇŠ†tᙎ¥ ¤ |¶VÈlAúzú”œ–§"=½ðGVg.çÔÒìo]ƒþ|W‘Ó7ˆàë¥YÄDsxm#³Ù ~Ëqfºl•ÌzŒ¤£N¤ïŽÜA]5ö­ªŒeÞ"Šdî;[¹U“´&æùöÍT[Riø˜‘¾GG·÷6Ä_§[E)#6OͰ)m๳–ÍŒ!<·²« ©©þ^ƒï˜s ê÷Ú1rüàéùkêsÃie=ÛI{oj¾¢Œù.ûÂâVQDcÏ‹ñD&«Ñ'‘ÔuE·<¡¼›©NDð‹©˜ýL.¼¬‘vBûò¤¶¬¦´ÕŽmŠ*iY·aL35%FúJ½ª§Ô‘ö`“òt;½Ì]ÁÍvétbÌžXÀ×9Õ³s>ˆõïíâz"ïöªî™1·ÖâˆÌ*3Ž©íU²]»`cŸŸ9F[Þížso«D[ àTºÝ~C¤÷7^«M¿.ú§óòZ|@WòÇ!Ч^Å‘†£3Þ£!Š ü8VÔt"ËÕ"ˆ°k"Ôo¤sµöf·áw{ÛßNÛç “ëèCÜ}Ýÿ`ÇhÞ7 ‰ØìËçwãYÆbC"A±2åÖ8ÁÈÖÛÒ]¥³1’°{} ¿‹€9÷Ýø¼çóíÍ*z¡¹î>jM¬3šî”]y}8ÞÒ¨±-ŸÑGÛ{ƒ\…xkDµQ£ »àº•gù¡7vã5gÑ »r¥Øód†1N[æaÍj/òTqƾ•'˜™mÚý«öÉC%ÄßÝÌ\©%ïq<ѹ°ÅjZí_Ûë™ÆübÔžÚãm›"›"$Ê·gö¹ãʪÏT诵tQEsL-ºkS²\»«’ÒâbÊAwþI«ÄÖÀÔ_eÍjŽö%äß“ú¤Žž8N¾5Ú3g7Ïóõ\c#"c“°ÂqÒ¥c{¾©#âlçÞÉsíÛÂÇþü_MV—½ÄQ¥Cx#£ ÑÕæØÛêʫ꣫0"‰ºˆëôÙÊ”˜Ÿúù¯’Ñ>ô®¬ÕN`ßgíHì_*xº¾òáûÍøô!vo÷áÓ®*ª(‘#8ºZ*må£><$ٱ͵¾æL<«U¾·åŸµª@×Ä´•Ú3sKm—ýdvcE÷•Ÿ—R;~œÍH¼¾Ú'ãWñ#;m¯·¿©-¡«Ú1%%ÐIWìÊ›þHK꼬V…ñý!½ZXm_M$¤¦¶Þõ¨j®~¼æNM÷‰Š:XwðN›@„¥DO/õŒV#:úŠ’ÊggEA<>ºîœ™>=N”>Û8ØßäHw¨¦EvçªÜTJã]žŒ¦Å]6úEg E‹ª‚Q³—cÆCÚöÈìDz«ÕûDTš"Ï=¥JôQÛ+/Ü3õOófWR£l¸ŸlTëÚ}ÍZƒ^*°GÒ²‡Üø$W¬F¸Çó/ò'¼ƒþ/äZ ô³ŽéȾÏ9ûSnù)ã,±g¡l¹NõT™ ¹Õ—:zìqæA%Ÿ)…ü LLyWZ´î>tLÏ#hF² ./¨šZ_n¦Cèš4;Ÿ[vÏ=ó1ù_i[ð¡ÝÒ—äÁF—qF“\Ñ_šË†•5j“1˜:àÿ݈$ø_ëæmÔ#ˆ”»ÑsUˆýSpð­Ä²KÈ#¦Ñ |Ñ»ç9½K>þ0ñtB;ÀEÝ•ã7åR W~ýÍøVþiÉ£‹@IWr•#OÉéAÞõ™ßΠÁÞüû0‘æçşȼZQ‰¸ül2Yý-dQ¯ó곬kg$Û¬LbUÐ'j´ !;Ú%;rsâmø”•êÞȦ''Cγºozƒ•=ޱ’îõóó0"éëõYrêKéš}§èš'îÅ8±Ó1¿’¯ü¬éýPb´êJÄgÞ¿Ò•q·¦çÓüô5ø‰]Šƒ }DÖ7”~· Œr Õ¥?1âo©/mËjÇSÇ?ôsZ饤Ê[=òbŽÖÔ¹¨·þÍÕ*oÝ¡ëAÉSvâ̋ё» îòßàq“×_ÈWð—Y`+×ñÿ«É+úcš?j+ÕÇÒJ…¡ŸòØ/5R«[h¼>TÚRlO5'³¾'@,Ÿ'Ï{‹Ø½{ j§%Pö/ôßFÆt3yÒçdeýº§¨[eŸ¨jg´“a¢ÇEëà+¾®d‰J `Ìe ð¯³K‡n[(9…¼ë)P†$ÑtˆÎ  UÂÅç@\çR½›A$4KÑ ŒÈZÍ ¯y¦¶/<Šr&7µýþÍóMz“·¿ÏÚŽ±ü,f èÁV(¸‚ïgMuøë|ª? ·—Ó‘:ƒOŽ„+»a#[±w;¢ë +çyoÒÝ}D¦´ÂzÆAHî0¬ìI`+J´oz ‰=(í µ!m¡fø’5mEÆýÿk:#{—@§ÆÔ%•ËðzÒPŸ§¬F¬©uЯ(kÚ©^Ц7qøPÅG¹[åDê9×lSíGͨ9çŸÓæ0‡W±ÇåWéGîcy)ÿ£œ¦ Æž°7 ù ßcV›#?õå¸R÷¶¶'9> 6vq@b0·¥ &ýéHm¾ðRó<ÿœ|¿3;,~.¯.‡dFFÏ<_Á³=:츜ÓwÔŒéªÿŒµþÞà}‚¿‰l<ÎþíÁDc“Þ,:¦qéÒò²|*hJ3Z W¾xiÙ¼<¤cmºŽvƒ§Ö’|¶+ѲiŒûË•‡Çöö%µDþZ¦AåÄ´´èš÷£ý )ZL¨!÷/=Ÿ'æ§±uÁnAëF¬ô¾Ôªê{d|ÿ<;÷…7"O=à«£=ÐÚ†/slW­î„7jÍ{=k£!˜Ö¼tk8>OŸíZxç-[ÿ,&§Éå6Uý¨™Íc}˜~ÔÎi¼Ëúò׌9"ÏÆ ޲}Ò ÄJ¥l¯‰¶^ C‰ ©5{~J[üôNTqIUùw¹u¤Õpr vf~q§Ûm›o.oFº>ÈCòô‹vCwZR?k 6W‡ñL{Aݧ+9•cjÕÔˆo]¥¬]P¢wD›=e¿c>šNúEî\u ¨ÐiØ»ì§hξ¶¾œ“U;Ëï°£­!>§ º ’õ”˜Qœ–ªs'ÆŠì içÔšðaÚåG› Þz¾ÜÜÉë_LÎ'#;Çä­¹9|ÛŠ6neÖ¹Ô"¤ÿR×ù¦˜OòC¾wÀvgß`©väØ{ð•î<Í39"Jµ–lì˜TX{Ç lܘËóËzsÁ—·æËiø‘IÅ/éWÿ(]ˆeo•š”{¤k°Jcóié,Åùhì4,ÒgÔ‹ÝÚ„%jɓ̴Cr•¤ˆoõ&þ®†*½jÔ±Xjo…8‰øù´Z]\Æø.Uå'©×ŸJ½sïËÔ»§PëFíjb²wb š³ [Ø>õ‚bîa·/ZI1ÿ ;´õµˆ@ë1¿½°ƒðLuË+A¿E‡· ™s¹Kæã\æxâ0¾•üåùb9”^…ÿi …ŸcÓ©²ý O´;Ö‰fž|]—ÊvN{«oÓƒ+]žå?€½@ÞŽ”¦·ó‘ÙJìâAN&üwj‘{—¿ÍÖñ—afa“žÌk°ò ÀŒ¿£ <›é7D 1ŸÈ⥬s/8ëéðÅYz®Ñ. ¥ÙûxÒîÝD$_/§2Hͨ_> Ìÿ¥âÈ<¢¬*'²ž¹T[öÎSkY„ÌÖK“A«VàM/Å×ßCÌÒ = Š …«»1¢¶Ç=Ìê§6–6OWŽzE{ÇßýDWOcÆy/úæo‘‹‰¬éºt}ù-~ëäôSñD^Êw0i¨ñVj²Æ;wOëÄíçð¼¤ð•fÇŽ©—6f0r7S±÷ú |Ë^ŬÌsQï%>XûÓé1gˆÞF·ÍûH.{¿ÀW÷ÂlÀú[<„.ùÓ±B÷ãmZ1ÒÅÐw$œíÂSŒ{å§Tõ{Ä¡f -¨æôÆÎß ~f9¸¬;bÜõ]‡™IœÝÍìÖ‚06g•Û¢¿›‰ ~…%lš·Ë˨ôBjwA~ºéè;\©ãj´¼æIJ³½¦v‹ü iëXôJeù0cw¬Z-ÖÜ›ö˜im*)‰‚«_ñÕœúò¡Ô˜££`,u¦ÕéÉN-wý7‚Â"c‘ ÉÇ~Úµ1‚½EÝ©}ŽMè[ŒÎ¯aÉÿêäA¬ô÷Øñغ ¬ü$Ì}%_ ‰Û°Ê3‰vIGç%X‡ûðv†™E™SŠß˜±Š\¨+F%Ñ™ñŠcw¥ö¹œ7'û'õª1Ü‘xs5ºAÔþZ¦/ÐWëd˰;‹Š6és¢˜m±ý?SS;9eD»ƒ[ ‘…JKi«çŽœWŽjœR´ j7´t8t™Ä®¦?§ÏÓM¹~>‚s wJ?BÝ&Œ;ŸºYm“æÃÏÕDÁ}©I,ÇòÙ¡ç _MÑù¨÷¨éñŒ¸OL@°°n9‚Õžôö„·E:my-ŸýN æp2³+Ön{v’µ¦žõ}Ñ,-Çî@LÔžºOÝd¥UÚ6EŠÌ Íõóp¥æeá­]§I›èœ"øÐ5b‡»êaú¤èþ¸ºê‰^ìÛ55®Trús6¯7Fþ–ÌiH‚yy7ø½‹zã"íŸX´ŽL0dجю9ïôˆíÜ™-Þ)ږLJµd-S5cµæùðx ñ"»³“úh{/Ê“5–ßœÌäsvcŸ‘bñh,C=´”›½ÐÑˉBOCŸ¤õ5ô5uHwcï¬×»;Ñ•7ý®ÆHÛðbJ®sˆ\1²Ee¼klÇÏ!x:¢Ò“Tê–¢mø÷(=›ò[é%$kgøz-¯6ƒîÒÈó)䨚©|Úe¯G‹,žïÿüÖHÊk›ü[OæìY«Ÿíð‘/ÁÑc8ý6çÃò„ünÑ·|ˆzò0º£Î¦{:QÿtÖeæ+Õì´’®JN $ZëŸF´jˆÖV›+ÖPÓ ÒÙ_ë.¡ä¾û±ºƒ¨2ï„ûeùjñYþ™›•§{¨*…Úú­•uYzQ‰‘|Ôy]>Å5J‡ðÞAióQ»6£sxvç±¢vêH·ÀÁéNÞ}¬ØÄnê—˜Åôh­ÀvD£Å!¬x&¬$8¾+tÅ9„•³Ú@ùÜCÜÓÔ =‰ê—º—`ñJuêÕ¯¤[ˆÝâXúeøŸ±šž"cµÌ݆]*+шÛ'Œ¬kA[å7Vè½WZªày`<­*9Z;üá£PY$õp¢IÏÒû#ØUöþÿ'|g¾Ø™ì-ÆîêÊ+51ˆ+s,mŸQŸ×ÒËÑÎzP©31çWL]ï„\6ã¹Q÷T8Ññ>ìò¶ß#¸/¯I9/¹(…Íˤ£#;g£,¥8ÏïÇÑ“wçiÖìÆwç™çöy_pghîžFh±(¤•w¸öª[ÉSöC;#ï÷Ý®'<­+’ªF9ʧúi·¿æ'#Û ›æœœ¹ÕB*óAŸ¦ÜJEÇr¯…O0ÖË•ê¶ôq\g¯ôë…åax‰@Ôå‹Ö;N>õ·˜kŸõ |Hš«+Ž~Dž+ÇÎ7zC¬|ùwÇqÔy1#»×œ§?Ã/8›xŵø” ´«Uz¥”rëÚü‹ýR^Ûã,´ þŒnydu¬|³ÂÒŠÏ{®³»!Õd%Tríç”DWè|Õ¸Ø P“¯D4(}ãfya—³šè¾9ó «Êí±¾Þq­w’«"ir %OÞSçé¨öFúT;yEp5>Ï8Aé++W]«•´ÐP9äiÕ»aË<­þÞj†%•={Ì=›Áû$ý´6Ö1ÔõˆÃ”Èິ5.qejoØzÇ’úRD PO¬¥5x³Ý îœ×N¶«Ä•V“š|®Ò uƒ»1š«3Ž—êÊ´­&:qZ÷“ôÅgõ幇Œ$žü#Çpv\„·~|wTð4õÇU[OЊÙ[lÔኤ®ºÒ蘾#´Ï¿keC3¥ÞHFÝœo^šÎ  ¸1÷’|\yM: lVþ+æ¶÷¸ôîôo<§=Jî5&W§¤³˜r1¤6¸'?CŸÂψ 體ÆÈd5ó?„[+ná¥ó9hwª*SÓýùœ²SêG.1cjq™âéI.G•ÙµÜZ‚ÖÂ<ÐÕJ[sÞà§ðƒ¥t/RË"–•‘t3»’ü~eåÌ sÑ߉úä—ÌzžE?çÑá<¼ä ê‹X—˜õ³ÌæFfs;¾‹("„µhûQ›#ÇaAEÀ´ºZ÷XHÇÒŸh‡”ðvDá=Á•€'Øê>(¿&‚To*š€­.þŽMx”‘Ç!YuÒ¬ô!>1 ÷»͇ÿt5‘E`J³R­|‡þj=`m‚hÝÀ*ç‚çõ¢wp}Ñ#¿Mwß$ær'xàhvÏü¥Å® ßÇÁ‰G‘o3ÆÕ†ªÒ5ÆUŽÌWÂ7*±Rßþ,#Ô‘ÐçK¤v*ÜáL6ÿ6R³{9»ÆšºÐƒ:0ú6 žƒõ“®FŠ×€j¶qã²då;Ywgƒ±é­ð<[Ša#·Ÿžäé§}ÑMË—´5Ë4SÓꋚú×vÈÏ| 'Qê•Æ’Èó·¢ý¿@ïEJz¥•Ä ðwØ×ým+» ¤|ÚÈvrÛi)®¥ô¨›®N¿¢ÅÓ²b'ñ(dww¼H?xÑ{·WêoG>CW¶g÷È)X»aô”ùVj•Û¡ÇM çVîL:+ H‡T¬uKÖi‘3Ó«(1®Óø@ ÍNeq$-ÕAÌÑN½ƒ*Ñ_7¬¸{Ùæ°Ê~èå©_>‡4ȯ³ÆßRwΫ­‘µæH×Ïì/k /÷çyÆzýe` Ê­tv•zUQ—–Ä¶ÆØ­Ø7]mHÒ<|ÕK¬¢O~Ž/Ù¥×ÿ1 ~YÊä¦S/ë›ßäì.­yw*_ýxšq] O5¨~ÅxÚÿ°ò¦ô÷š}žÏ÷öX´™EÉ3÷å´Â3sû<3=Æy¿;–9ß@-ç úïÆê¾ÀÙ­×B§¡k tÓÝÈÚVc°ˆg•R1FŸïiBÎǵzfŸ™°xBKt¦7shÁζçŠyæÐ|k~87Ï7q*äëiU¾.ÿ ÿ\x¼„Üÿ*§ÖÉø<Ï@¯,Míp¼VýÔ¾kÿ´EvãÅz(„;ÓöÇâïþ\,/†CÉ.y%»ï'@ÛÉ–~ŸNG!Kké^x•=œýy¯•Eû‚Ë6”§®JŠZ[VOÂgGö¦¯“ËòT\ØóÐ"£yÏ UW¤t ¿Žñ?™Ò:µ&>Îoî9ßøõ”¨QÞG]KÆ}"ý•gRÓžÀììnÿEåì;Ö7;÷ ¥™°=Üúj¥(V%´RFhê“Èš;&Ü!cÄ(vÜy>–ŸÍ‰ôÿE÷túiþ‚!~î]»ð>o×ìË'ÔýèÓÉ6ÖÔg+CáSÌX\³‘š¾NŸª<Ø-Ý™|ÖÜθ40#ŠVôðµ`FÞË쪤ß>•h'øÚ÷{þaÄ%ÊÿŒ©E¨£Ž9¸ÖH{X“#Úï—7Jéå¬ý»z}²Šc¾§ldå~ŒÒ˜q93ˆg»š°5Ô“ŸRZ Û¿)ÓÎÍ•‹pêU]›ÞMºWÌ)å’Ú¤Ô™yYÛigQYo8Ñ—§jƒÔ¾XCäÜ5øPÈ“Ò,]¥°¯Ä»Õè:Ò÷i/Í;ÔmGêÉinw€ýì#X±œKã»Ü¹8´úiþ«¬¨=ñLÇtE¡­Ž,NlU'Æ›SÇ•ÏkñÙÁ53?÷byž†™®èµvÆç¹?¡~jä§Q™öV<9ôÕwE¼59+Æ­á—}jymæÏÙ¶êmgC¿ÊxbÛÎ%h§ß’ʈýC¼ÕðÆÜ42ÓXµ¥ Ñß{f•´³:ûe<¥@?eÕ®#ïÌê­HDõK,\{£ôè•t-oØcz¹!ü«Ï²6ç»Õwx¹; ­šãH;¥Øn‚vüÕ{JC>7œµô¹á·ü¿r:#ÿ"2‹:ž#É)(ädä<Þ±î®-ªÏ7'±ËÌ÷˜)Ê«•õA™•Š"è!÷)­ZßåšbuÁy÷&i”4q­j¾ÄÅí­Ô¶ˆðŠœùD¥N*)?JvP((9¶r M_¢et>æ4J𸼫‹š‹ÿ÷w5HÉóP.Í•cNÎ[DXj+‘îs2#ñ'GWª\·ñù‘;CV¥¨ž.<‹óŠ«Iú£)WçÜ|’þ9ø%u‚ʉÏSþ|ŽÝ¡r[Ø{åÖOÉÍ _ª¼Ã'XcѶúã5-•š¬Ôº›B9Ô>¥Ä|Ü›,U}EiŽ•+!RϹ©aÔJWè£÷jYœeœˆäI±ª®È‹ç9ÈK;ó¬ç(]òÑö\«Jºº*g.×|ÅY?Iž„žY—4—ºFEî:r?»ƒaçÝU»(âÄ›ðVÒ#Î`•›î›ôös¥ÒŠBæ¯J†ò¡Ô챨ÁnÂNÁ(¯ÒÕGÞ3hï¹þÄû?¢ùN—JTß”Ò;K<Ñà ZÜŠ'²S³WY.¹*W6,t.|šÔ4¦Žzž~Lþ§)Ÿê—wÅ(sé©8ƒ³Mæ°wxw·ÙŸÉÙC÷¦{‹–ôÆz®¿gA+®\®#8¢’öÝÈGýŒˆA ­^„nˆ{Š~J»†ìIš_涃›Êcʹìzÿ¤Xš—’ ¦¼ ¯¡Óí¥t)Ï÷®+e9¼¾Ö<ð`i«t]®Ójax¥Líóf¤ÖÿúœT<^f°‚SŽ!3©Å‰;ämÀ5V dÕ#òBð c}­ŠÚá¾ ð>vØj“¤6^ù teæ‡zX©a¼Ñ‹î³ës­rz¤^)ðt†oÓðrz vô<àß‹gèèüÄ\üIìÐÚ½+Vß}žZVsk˜kr/¦e èÈ~JmrNbg­é—¼ Ts¿Ü‰|sc^K¾»,ý:ßLî=*G7:à®#ÿ€õæÓ;U¢e^¬n*ÉîP¶”Ò¨uè”$ëL¡«fî<Ü©>ìFò¯úìÖá¬Å pfÃ"P°MÐü–Pø¨ª•èQ™·s×Xôœ8ZØǬªŒ§mÐ2yFeØu{ÞúçÆôO¡l=˜•Ž¥T]ÆæÇáë  Ç/‚l¾–ü`q=˜Í_Ò_ˆDa£¯ÕñËú´–1‹[õC‰VšŒ ÔÑþ`:¯##o’< ²Ð,}AF¸ŒºÀ×E_“ïA÷n缃jȵpõC2ŠEÅŒä ŽÖš{V(©ÍU/Z³#i×Z gÎAߣ飶‡3øw¾?Wå!ðíqFxÑ_Óü¦8ŽÅ᥻±^ ‡x¼ñr¨©à¶O¡xgPwxe÷pøi9§DÙê:õð1õ§6º½=ŸêMÎÚù¸†ŽpNÄ‹šÎ3 -+‘Ý"Í„®¿Ý{ƒYx6ÿÝäWƒ»ý-õe¼®H¼#Ý”c0×kn=.ú×iŒªý7>ÊÌJäô1ž÷4¸áÃàj+8ùgSqS1™ÿßÊX”{K¿BÝç]úÅoCwªÀÅÌnº²ŠðèÊ®g†×6†PW\µñiK~6ã4#–Ĩ—PÛx ©™ÀxãAƒÖ K«Î­š•ŸdÅW¦MeuÕ  ‰dö3‹¿@çÚñ•ö—êKôSF‹zýüÔîÇY*áÙ¥²ùÍ äKàÔÍPneñodf*?HCË+«ª«6¥7ËC«¶ÍÞm=©8š>Îôäö̿ʧçG¹kc8\µ¿Pk—2ªl:føoç ÝˆHIϼ/ûz¢ÚwŠãRp.‘ËUôKÞTÕ·ì^U ÷uè0Ý|$–÷A|Qj…¶WÜXUëà¸áA9â[ùëꥳ–¹%hÉpÖõJÞ#Ÿ ®6NCz?ƒÆ+ Þ̪6åjjî4z ß¡«ñ:öJ¥º‰>Ù¦¬ÒýeÝ*Õîi—h㥬ˆ£jÛ==´ ØŸ§¯e§HS*3Ùí° ‡L=Éèc«†±_f8¼œJ<$þ]j.ó€|,hõÄÔ Ü›<ɾƈÔý†¹„vHΚ÷3îÄZ]XWžUtIìÀíS+XÓ*$v’=Åe/„•èËåT”_¦úð9~´kz†›ßï¢+÷yVØDëHäHÙÑòFo„CÔË´FÅflbQž%ëþ»‰à^ÓxÚr¼ä{èý`Àó™Ë†¢KþSý{€3[®F3_Ôwã ζ;?ŸÏf¼.œ˜4“çª}®Híº¬¹ÊM³½—ÑÏÎØo¡å–·¼6¿ŸæRÛi¦y3–λɧ³ÖÓRÃü>ÕœG±}ƒ[ý ]ê‚·ÙPìÃ}Q=ÒžÉ;|§£DÞ«URõ+Ææý™Aöc¥]XëþœR¸<-Éè=ì“R:ŒUZcñæ¥Mt lÄË< GÿŽ÷j{ãë±ÿG:;ÕÁ !VÔcIÚW+-­Û?l[ña5•Ðjþæ.×3гÒÛ •+ÁÜ.`ÌëØS Éœˆt=™ž­ú‰Já§ø™Eô£>„ý ‹¸‚jÁlªH–÷ÃÑ.ÄnꈋADôÆÔ‘'Ë͈ÎÅÍzñ.¬hôL*ŠûæÙe_P®{©o?‹eØÀŽ„Ãʶé5¨7µ?Å¿eÅÛðþAöÍlÀǬƒãMóžѾ±^Ä â`ÆAÚÛ°u6XÌzà“SÐO@ÿ·§Êø'j,O¢ŸÏ]DoÉ‘øðœV#?+‘$ïyxµRÇšš;ŠÝ}uËžHÅ®i1w¯bt}™q_d1‘«†µ8I¯f­-ö-Ïß#}Â̬T<îbßîSèÎ$zDšÊ=§¤» õÎT#^eäÓ©ï7I»§ÝòQy`…ZÚm‘¨¿´×4‡ðUk±‘)ö¥–;„Õþ‹}$¿¤¢Y‹Nü¯àÓ»¼þ÷â7Ô1¦ƒOé:î„«*§‚ ]<’/$|¾8‚´#R¾uÁ}XgœW¡_Ó„ís5±’X„wO mX¬…F[Ó…ùÄüÛìäÛƒBßÉynJ—e¹’~ü#ËcËÈUGüJ›\ÍJ'"S‘‚ùøw/ïÉj\‘vWD<|¶þÔ1ãŒQåy$Ý%G±»â'0ñÞô!ü’Þ¡:psŸ¼:/¡.øxê]¾âö¶Kór(깿½©ÎfÄÅ|¦8?탞·e䈌ôf5ù ¾Ì?Vy\5>ežèFn䨇EðæÆÈͲüû܃ʑ2´gþ–è0é*¢ Á5¤Wq*ˆvhnkÎ`rgïÞ¬Æ5Û©§Êk·+X ò ‰úÈí^h(5t¢½'ðœï¢ oBã@ÀĪÓ7@´Ù…Ó6/OýÒ[Euî•3Þ½é#ªÚ«ùûÖ÷ÜKÏíñTv›ÇKg=©È¹ÖÁ<¢c6`­g¥ñùát>U‡Ý©áxbÔ•ùé9úðŸÛ³ 6U•K¨ À_ASKÌvØ¢+’‘¼\ÒÎhጰíÖ¸N‘J£#sQñoUï¤åJSó|è9ƒóœÖãWަf×½¯WçëÑŽ©sÜE¬u¤éPöyj—îjìBj Â܃‘Ä=ô+®ÈŒÁû1‰8PÛè;:ã¬?ta/ï/©Ú,fEO¨Ø†+¥Y¹YùPñãØßñ)´¼–Âû_ú0ŸM…Ý vÕ÷&׉3+ì³÷¬ãXý§ñž1˜ZkF%΢ÆvAûÅmwæìÒœj·‘óŒ/(LõÐÛVå)ÔX®aOI¢‘o‹zDa ‰aÞ¥^vôÖ²=à L™5¯Ô6D­CÄÂ×jÍ{Õ ÞX@ë¥{ûQüšNì7qYýôqª›-*Ÿ.䯫ŽèÓB|Ùtäb‹;Y‹»2޲+Ôt/¦Ot mŸ|”Òžä<ä·±Ÿ÷¶\†Åt‡øçÅaHÇ ôkN¥îpºp)ötQº½Ü’¿O{ä±i3²ý5qîÃéE"©Ð’T)”s.ýfÄífÔâCâ)êü­©i™ 6bž§! ö’µ$¾ê€UŸ„ŒœìŒ¢~ýr¾:ïÄ®ëˆRî@K¼ê²t<èÇ÷èm³ W ­ÑDýgh¬3pÅ^™KémOÂgzúlù ¤c:¾ª-1ÈQxÊ ˆ„V¡7³ñž›Ùsóz‘<«¬9™‡|4§µœ“²Û°Nó^y-ºcœ&Úâ®:QŸþx‡>üv/½¡íØ£ø<=—üwxºšèå½´ ¯>%M†æ·Z#¬pe[øx ÏQµÂÚR•+cêIE]»Ü ûoŒíœ›IÕG»²âN¹/qÂSxæ=±yKàr†·‡ ›SÉ2Þc_–g,Xk>aÎ`Lg¦âš‚†æHÚA×ù?o㻌îõ¬~oE öRž´3ɪô\~«c'á³§æatМ’g¿Ùáù×<Éý£vw÷çÝZOPj|šç89¦Ï9“±Iz¨µÊ¯ýÙÝákwÞÓ*_VœVr-3èHö²ŽØþ"¬Ï{Ô¯­ÐrôhŠô™ùÊQ}–9¦gºkek3fìÒQÌñ)4'l†ø¬UØÁXmõÆ*н+ѤFÔ­"Ç]@Ä´¬bsì}XÇoâtFíjœ]RWR«vÈøR>Šå¾¢×Q¯BW­ Ꙫà©è~ âZé3‘”%d½Oó<ï–0S–²-×µ¨™òQKod¢dÇëMu6{ò 1½¬VX/¥Œý›v7ˆ¬È G¬FRº³þ&rByrýJ§Æ)õRËøÉ/w¹š'[Ãòüî³°™"¾Q%Š*¯ã*IÊRØ!+¢z4é+®7ŠÄÎyѫ߱òüöüÝOG•Í.f¥\ÍØ‘cíÆrÎU:¾-#ê‹XSú9¾öȼ"ó[œVZ]DìÌœ:ñϺ~çÊ;ÅפR#Ö¦¤y/º>DIsó?¿GTà_jrû(y§n(åfˆ¢› ?º|ôx½Zûïõ|á%ÄȽÕy7þÙêêä·ÝOÚÓ¨…Õ‚’¾®Q?•"ß«Vú»‘¨ŸÐ8 çì<ä¤wËv«P¹ÅïÞÃ; îiÏ¥V|$Zé¯ñ(RÛu‘¹ruOߣ–Æì¤uÌÙ]ÖK¬ØêiÅÝ/g¦ê¹’•;+í›ò)ZY®1¬¼“5)+2äø>+r6¹î{´æOFMþ®EvÞê¹ö"x.Žè{”KñÉðúù#-kÐ7sñmŸ\UªâŸ:ë»—<ósê´º&Õükx$ß!½Ôjß%ÿC ëóä G &Wœ›¼Snµ7RÅ'ioÛÏ*oZ+gX‹«•×ÎF>«¿®ÛøÂ¼N™2_ ±3T']“ŸSÔºÈψD|†cÆš}¿ô3{‹õ+ÇF¤f4;ÁGÏ¿ÑÛEO«]V>ÇgË™@·ìrs<ÿâh®Ç¿>äl¤»\“ŠQß3§ˆÌXÙó·H¬'Ø´3?;óš7tèq” ’6ÂlÏç9Н:¶t•!·Ú?¡ÕñjŒQ PÜ•Óû²ÿ7î‹¶»Ü=5®IÎèmãH¹¯ŽH3ç-uË5újÔ–õ4±RîJU­dD æ;£ƒ£Aû3²ç´Æ½ðZY;’ýÞ%=áNÍqÕ~Þqb½Zrÿ´UtP7CÊä€v»#YÇ`¢ã6D?vB®%ÿúS^†>Œyˆ”:3uÞ(Ïï®ÏuJSV‚×ú•ˆƒ\Òåw¥%l‘q|wž?<{3ûs–沬]^A,?…3(¦Ò/µ„ž¥}˜Q fçê¬[Z³‘ºîïSz}ª;†}~Ä}®>4Gûj´+ÿÅá܉âÉ·]èrÞ>_EÆ»T¸hÔ«¹%(ØÇ  ÿ¤¿qLÞ—w{O¤5vsó­ÿé½ãZsFÆ`ꪆ®^¾†§Ó³¹{¬;<ëÂn ³ÈÏ¡‚ô$1æÝiw<ô±Cör?„æ3ògÚ6Òúoi+ôdÚ{eTÞùôðÙá]æÉëڇ݃Ì÷«L6HßÐG 2Þ3ütþ{z¸ýzŽ'€ûŸÁ¹-ÓõH³gj{ç¡zªüª#r6x*ß\gH±TRÕ!ßaìmìÑ„ÊÔdK?Etù*ñÖEi$ëú#1æ áßíÉQ6±±ëz5!64N ™‹ã÷ð4Ú?i«´)IFJJn`E=Xa=*5ÏY¸8ÝGŽð_ò• ›ÉrNQañ×… ·ƒèïÓË´ý?™»ÞËU[›ïu^me¬Ûi©v$³w·÷_ìgÇÜ›¬h&™Ù‹àz­R¯¼šq¾üÔíc0EǞȪFÆÍ<=O™ iQï\©H[`©ú…èe’ÃÚzq+È×rKn»ÔÌg Ï|™ªØ üà°Œ§àð½¬ý52\wGƒDU³R«ÈZ ½^R*Š‚ËáÈË”\-˜>Ayó}æÅ+Á5ß"¯ÜÈ“Ÿï_Dþþ1øW;0£A÷Ï}$ùNðdûÒVÓ?kUÍ|]§1€h›ÿD5ü-â5YoìOs~m„µê³èù<œ^|»¤ÇœLF^ûœ[~p"9üÐú ÆýÖÈõN‚ÆgpbMwQOs·Â¯ôJCí‘<³ÇÀxH_iÞZ²vÝúÎ(,ÛéÔm¨°ÂÃøšÁ:?s/]?4c4} ~&Ÿè¦užõ…ç®wDúvgTÏü2–rJk芖Áßõ•á}Ñ;ƒÓ<ÕXKŠê›XÔÆÈËbýtâýGÀ©¬b*ò3‘ìr™É‚¢nþOùpùCîÄÍDeUËr6a)è‘çõæLŒ%œïyøÔþ/Ô¶²6«GÆejC`oþ®5Ðÿ+·zŸŽhÊÁPì¬Ütè{lÁt(ü™üÇ Ôµ¸Ùfun_uE)ž<•-¸ýC2ýÇà77Ü$=­7òèO¥¯;ÉÕQG·F§^š/Dt㻯‡{I¨¬´aŸÃièÿd¨»˜ç½Ïª^ÈÕU Ë>U¿¢&èÙ…‹¨ÜM%g]ú^o¡“~W>ßlTüÃçGÔÔŸEþ©PZ•&«îÕp³;Ás¬kpÏXZΨ€4’_æÝ«Ï-«•Ï@ñçÐÒXÀ»¨”‡Ÿ"S£+ ®Ø—u ýµ‘™4ï‹ní£’dm§I%æ9)yn¹#i*ÈÁ·È­gþsïyQ53Ýœ—³®û°‡÷‚_ ‚ñZôýçãÓ:ãªÿ_óÔÅK¯½õ÷ˆÕu© ²Þ‘x€“Ì@og ±²—÷#ìûB ·Áeêak‡/ù,ón4ö?¼¾#(d/pÜÁœ{ò\ÁJ»A·žü‹Þ i¬ÜˆIéO´QÞŠ©æŠ‘XÍnFuh ¾ã{Ö0ZŸ ï&áÍÞGïeÜ=¨ ÎÁRp2Voô—HTkôz½vÏÀÓ%D*÷“u ÿá—Ä]'1VIfzñ¾¾|-–hRÚIðëŸðR®™˜ï©j©vÈßb_º~\Nëu¬t Ã2Ø~Ñ^U¥º:‡;‹³ÊùÔÿ˿֩}zˆÈz{¢´wád-ê†Í°íc©„fòÏù‡^è·Í한ˆ\]Í—x°¸êùihGvp#¶h)uæ[¨/l¡öp2qÂ5dÞØ™nŽå­ELT'é™±ϵ)§Žªoq®ÅØ$y©¡øÓw4¦îu!<µè]jfuÐÖŸÐÀþDòž«9€Ó”¿ÂꬃªUØŠÝổOOîÚŸÑ72 ­@r̳›™‰Ÿ(A éC\·ãh‡ŒQ"r š£˜‹Å´¡‡§ ¼Ý ê,@­ò„ü+ìÑ#Œü3îζôOcøT?ÞÕÚ¨ Ž(íÄžä«ü5çuM®/ø«UˆxÛï¢[r¹ 1¹(_ ´ürÆÚÉyý­Â Ñ‹^>MÁ…̼%QC»Ê~5A?%õäXÐUͰ7Ëûš¨Ïß[¤„’ä§äI_$_O`}r_4ïpòƒ=9Aùrp†¶ 72/½V]ø>¬yÙ©éXÊ=ï>O9Q?ÍŽ”Q»ì|‡¯«±v®*MÆÁÊCr-÷ûÔCBºKˆVU=8?yxºËáÞq‰ÎðR„^;:è8>ÍŸÎÃXS;ëŠä«œ•·jNXäÀ±cgäß=¤õ‘ã–üߨÍêƒ;ÐpRù*Å”ZikÔàÿœ‡ ÛákÒX^È{uÚ»µc?Û F%ެ2:ÔG¢ÃCØÙ}k4Î ¼Äõ¨ÿ᳜‡ÿSWüò¹Q]‰Š4UÒü©ÞUDò‘ŸìKOÛÏÓ‘ˆ~$šÜ‰ÿÅLÑR¡¬øtu0l_Mí¬†šæ¿Î+xÞÝ}¿\·guOx¶úЇøõ@ªåÇ"Wî¼d™ú‰Ðgî+®Åõ«Ÿ!1¡—>ÕÑÂf¨£ò\?3”j·'úIKwì´cuÆTæËRÎ÷륞4ÒCÊåT´?ì­k÷IÎ#¤9äGÌJšû$gk÷÷ðÀZµ¾ÈèOIÑf륜+ó}A_¥R{+ D•Ãæ:Ž#…u~Žåkþ46Œuú_w5¾ÇŠ©Ò¢ÜG6ïOçÑÆÕfL?!5¢Þ!-bv¾*ÍŒŽ´÷Áçb†#Å"Rô{èDèœ8fî|"# »œÑöʼn¡=¡ŸÎÚOÉEc±òš™ú\ù«o’¢®Î÷:ϰŽø¿. ih‚±ž36ñ³REÚ*áÒÊ/)'çÅpäFH¢¯»—Õ*¢þ.Þ%½U*I‹ˆ¤ ’éœ#R?}Íw(WZ eZ›çZä„Zå'ý„·¶í…=‰õëŒõÓ6xµ¦£i7œIÍgk¸TÃiß6Á1…ë ÙSVä§t4ò÷~ÁúëíŽ$ñÿÒšW:VFèÀ_}gXY‘õ9<“Rd´.Ÿjð[³Ýà¦U)iÔéžé`ÅÊÌ»#–~ úèy$½ÐMOÒ¬FC½áL]V#MpБ¥zȽI`QÚ„X§º -"ê Û¨UpÏUâNkTðŸà7Ý?} çÈü™>ཙ‰Y‰TޏÎQEHµ€Ë=qŒà:•JWs tAMÐζÅïÁ7¶¢ëéx0®'sçò³<²¸„óÞ£wi>Ýâ‹à¬c]ùç§Èù9Q?ÎY4_q>ᯔRéêxj¯ôo˧›CǃÒù†ü]Dd0Ëè/O ö;$§'3¹$Êj½ÍP Ûb·‰O¯jsä™J¦£}p2d:,¥£ÆéÝ]ˆ <™þ“¯$ïêLàtî™øü¶= »…̧ä ®»®ì¯ÒËUe¾Æï‡o”»a‡Ó˜Óš–º¥…ðöOv¦›ñÝü]ŸMˆøîÁx­¸‰Ü0<~^ñDšJft8H±{Ý<›Æ:Ct<)Uj·<–ÛÊrøOµ+¢Û@Z}Ÿçz;ÃFNvZCv0šó¾ë{–^»ªœòwüö8ûÏ·#Wù‰¯É¥ÜU±#3Õï›™… ‡/Ó^©»òS„6‡}u6fÞuÈ«” ¿Ýýœ¨øÞÓ OKÈVæŽÓCˆÛï£B7·XAþ¹ˆ¹}XÔ%W±kddæá Ei]_X¬ðŸj°t•¦ZÈíTµËãN.y‹n¾‚aŒs_tq/òçdimè\ü7XÉÌâdw1øØ:4©#v†ŽÒÖÜ9èé³Õy+²ú2¥ÖÈ*wf{ wI¯CNž#o_F1Äö]ö`vÑ•Næ)ð÷1Œ'ñA*__¥~ðÃ*wdÚIkÍî/ð»«6Öt6ZJ9©ÄJûjFíGø bæži9YÑb(;LqUº¡hdcFšÊl^黕¯‡áè ©õß>HBc´Õ¾PeF-ÕkÕØœˆ©µ ‘:ª²·ÜØ“ÓSÜ9wk¹—•ÌeÜ|eÎt™‘Vñêd÷¤÷)*W‹@.ÞçÝíÒ¢³^|yVÞJ '…µ3úLí‘@üÓþËåºXÖ^ØÓG8f Yžu£…Œà)\˰ûåÛÈÆ6@ûº BO²Æ;ŠÛ¨Ó=Dã”|:qàpxÓ‘QvÂR;Ž+·ð»cª?Áï@qµ]ÕŒybñrn›ç¤KÉ©?&›ž‹N N¿#úyç±éµt{ÞŒ-¿~ùz™œ­ Ý›cÈÏèµK1’'ëeí‡Ô‚ûOÁõ+[Ò¶,hñIåýì%–¾'}‹1—±ŽK±±ãA/šä~åÍHïÛÐà0¾¿S}xŠ±Ç¡Ñ£Az¼mÖÑŒ%ŒŠ]Ox:ÇTv"þßâ³½Xé¬=ñäA;/aÌàV×tG¹•=4ʵì²XPYÿô¥3xë|ÏKܧvòg§Ÿ9žú^EY2?‹uÑëñôö—ôeÌE—4ŽªÉééMhê«G‹• ‡Ÿ¯•_rª]ŸªK«^àÕIÐtˆIýäùK@æ¤xŠz žkeÒSÑ¥¦õì)%×™·ŽbÔ.Åþ`nÿÅ€ÈóÜ7‘¢ÙPrvÁSU­Ë3ªn¨:‘ŽÔ%Èî;؇Ó@ŠýÛÂSÅâ{³*-Œ”5_7£ÔWVS+hŸŒôF1ÇÜ ·{ÞƒÎâ Œ&W±¯äl·yK¾=ïÇÙhí±@‹É럅Û{+^@†Û§OAqìÇèÌ*Œ]‰ú †yéËÂËêYFâóɪSJßQG˜ F|üFôï]¬ÃzlÒ½i¿ µsÑÞ¥àËAÅ>„ Kø½+s77׳iWµ Z£+×iÞ`FlÄ`$ãŽCøù u”·¡•·Ô΀%þÈËyæ{ÅtÜz®æ$Öž¡ý ®ï#Ï}YíËHõ^ŒPÃhZ^#£µÒœ7¢uÇÖ‹ÙÙÞønp·=8ßèsîAËÉ;ÞZ³랈­YP¼flMi*c~ÉúŸãç¶œSøër‡òJªO7ƒ3Š*‰†)'zR{_´Æ&jª‘“V¼¹yÆ? ì÷FÖó@:2w,ÏIëÀ¾Ö£…o!Ucsý²šºàb´sèßR|Í™¹ç-¹ßwL:¹´W©²ÆúLuÕØÄ‘ä°œ”îÞÛ]iUüŽnåéùÿK>-e§J'ÆøíÇ^‹wò-ù™¼MšZÁ<&±÷ëK¸=ŸŽ—Üþ#‹è÷æ‰Zx­v\9ÒöY§—¾•Y³ô šFÔV»•—ä~Ti¶£7½þåE4ð5$êPÎ.¼̸ Þå#^yŸ³˜µŠ¿½‡í”Þ‚Ú©–aWž±™Ò=˜ú½µÝFÒW Åù£ƒ™Ç1Ìö·é`öu´C"½¿þìЊtv>/_Zö/—å\ŽdÏ}Ÿüç4“µ~€o¹ i: ^ÿ=Hî†?’ç»[ÚÈ$âks×mö[S-¬K–pR¾+ö| ^e=kó¦°hi«Ôª|0÷,å¿SÀ«a¿Ò§yqÞ½tþ»hÍWDKïßž¿GÛƒ3¨ûž¬'Sÿ¥mðÑš•Ö]‹°#9Á0Æý€½œÇPޛا!xâ¢âÔrByQ™ËíØE³=º ݸ&íYN.—ÿMsðt+@9®T[<©5–;r1%&rdmBäCF#5ã6åòD‘sŠ™ ÄŸ§+g€&¾UœZÕ¡ìPujžÖÜM}ã0æ´¾‰ýݫܥ\€=žŽÞdâÒ‹RSäž@½‡‘@è…щr±¶)â!Ϧì_ÁÚê”Óҙܭ²}ú¡hJÅUóÙߺ[óg5ÞÁ9]›‰nMç–ËË£Ê7 Ì«Ðw«úÙ‘}¡žm¡¯”£FF¹ÊÏ(Lÿi&¡íw×Ëpæ| ^âGlÑ:¾>.^­º®ª'1ûÍD wQ1OùBf3¯¸0.ÏÍ °R3 ïyD¾µˆt[`Íô®3Fô÷SË«eR‚͵ÀýÐOvÛs6Þ Ä~C©F-ÿÞ¿eçÈëPûÞtN¾Žª5gÝQø ŽÞ|Œ­XŠõN¿ÉodŠ(HKö]yÕöê DõŠŠ0á·.îke¥; 3u ãÏÄ ç£Ÿ!ë©f5ÊžùÙ˜ØaPš†¥àÆ©´k|bêŒWñ©j|­´„´j‡¤±£úªQš”¶Š7¶’;pëµ…ªüGvu}‰gÞHf2 Yi;“Þ–@õÍXàyT“v£&{68ý-D³ž¡Ûµ2#õÁ)f¤ú½©Ô¾B¿Ë…–`‰í‘¼‡Šù ºŸ†Ó¾Ê³‹´ zš¸öœb/ö/~]ÁÅ7àmÀÛîXâ¶ÉnDÏ{3Ú´æ'몟ZZý§”ެZÏ¢Lû×máé |¶%5ó Èv7S{}ëö–~3ëý?¾ «ºœß6V¨½ ~v¦ƒ¨zižZ…vÚ[+c¹û]¿¢—º"?À¹ÓÀJ×Ñà‘wξf•+±©žá‰gß‘Éü•ˆóFì¯W°îµp»>YœÕ9û7Gó õω&HceØ\PDPûîßS«ï|€ÏÈVºO"û¬C4¶‹ûh({<×iî˜6 UkŠð®[°íC¡ì1|÷‰®G+d¶:øó1Ê÷Ÿý¾Ê“goÊŠ{0ú(j¸ ¢à^WªdÕÄœolDnÛ°ºïÐåöhnût$ŸÝ…Oÿ•O9š•¹å.ÈÀ"ÕW§ÔjÌ ]«h‘£îÃJGa­; ìv±n~½‘r9ý•}½;§5ø®ZÌà¸ä>ûQ§ ë1I`üÖá´}ޝŽh-Ü ¦wU¦´’­8!`8ßÓô¶Ò-°Ú¹Còö°&xæ#ÈWF¥mˆ—sÿÔ›sy=¯«w(ÒHEõ"ÆñΗ«F3´‰Z)k¯Žz*^Æž¿Nèå‡xè±P¹ ºs;joã·õXõÆHÑØOÖr÷’{=•U©ô“·ÎaÆ”‡ª3Z µUÌÍµš¯º³­'´jBWÙíT˜·¢ÿqVÍH"ÎkAnÖ³êNØDdŠ‘¼#ò0ž¨ÌÈ1;ѵpæ ®C;$§¥¯òå“ÈÍœ“3 ¤½9voNcüù_é}úŒ8ôØ×©i/VX ÿ½’>¦X£§ˆ]Á(Æ¢$úk×{qDx5¥sØDí€ÿ Ê+×þE+i¬zòk]sgjë×î¸÷4ʃ©²^I<:–¿)‹­Ñ}3q†‹¾¹&GüD¹tÌȺyÓö†eRcBÅ¡E.Ï$JÒ‚t!öy®‰ŒæÕ±t`yG»ý—AÙð™FYz+9糕ŸnlbýÌÚ§†ÜÔw‹b’¤œÇiAFÆ£©l_Í:DÄFü›¿Å>–aü­;3lA;¹gȧȭ ý§Qƒ»`¨¿Žîùpr"ìˆýÑúûý÷ÅŽB,êžãUQúDŠÇ ÇzGߥ†«›rKÏ(_}–”3ŽWzÏØ/~Wšô¾æ+ÒÓÏÄ|­šòz*HÜÌo'Qµ:ŒFŒãH>EŒÑqƒ¾!‘;¨‘Ò>è©L›3ŘÁy¶QÍvÍ ÑžnPÖ5ÞÖ\½‹lK™räàªôsÖæ¼±^í¯ïU~¢"#]I›áÓ+æ•)%mü©Ü›«;—x‚Ÿ±¢Ÿvñ„àg䀮3tÖ';×19¡5ô]ÅêéÕì IÔ*bw¡s ¬ËqcÁ×x¯3ö©Që0ß .û Q\µIIRÀº±ùä,´-Ê´û´Ô¨°ÚFŽîG3ÒÚzz¢4µ3S­ m0¦–î>wî6±ÍŽ•N%*ò+coeJé”Nþ4R•úîU”¦~—îrÇñ<¹IÓOŽÒÎÚß´»¾ÃúÔwÿ£=Vr|²Oó̱8÷>¬Yè´Ÿ÷}>ÓµHC÷xK'eÃñ|–O•Râ&îNò½¾Û=brÞó÷BÿÂ’DÃPâª=À=¿É»=#±&ã’ÆrR--Qn¤†ü®©çƒ)Úÿè· ¿¢mRrK>­WkŒåk~huDê=×]{]ùݼÒOÉ}1 kÚÖ»Õi}‰{G ¦„ÄåÃÞ\od®ÝÈ×Ý]ýù­ íG|îiÒæ#ž+·øˆw ºÕˆ\¹Rª¤ÔT¿íí­bfâáÆ Žråºýœ§ÕIg"}[bݪ±Žíør×ìXžØ•ø£7ópL7žåî[Ï‚”Þ×£–ËGOjPF=™Q±¿BŸ­Ìi×C"b\©­w‡ÐV×™'Zp÷.LÈGØÅ^¶ÉÇ‘U\Åê=/Ê[ðNû:¼ùÏq¬:¾;+Õ-Yà`Z'w-;ºšìB7ÝÙé=@]‘Îitþ(@/noâ¡%tÙíA¶Sí%+fö~Hu½^³ |ž;…]sD)Úm_x_ tÜ;¤º¯èù{@ÑAœÜð g…Ýúô%]¿dó”àrÇÓw.€·Ã3:A-b)y£-U–Õ9¥¹wHÚjÑ­ªéO|¯ûå„÷„yáÞì7?*¿—»€dü‡¼dmq'ÖGÇøU`|/Ñ߸C>+yn£{È¥’VÍñšû?ëZòÖØÄÕº/+"yíkŒ=ΑÎõÄ=Ê+ÁDž †ß>ý˜Ï¡šõ Hýjzlfï€"]šÎà™žEÕ–§É#-R‘º6AÝqÌÐ܈ÃÂkjßÔ›ÑP«´æÖ¼ ê2òÏÿi=š:2MOÏÓ¹ý ‘öª¢Lã¡ó&xoûe›j‰<Ó.?­B͘®Ì3ÍõDváÈI1û6|ú/`ÁÈl_ç•îeÄÚàñ7æ·ò!äGžs÷:ëí’¾!ªOîë¹­öú±Ø¢®„oÉ(ò×ØÄ˜ÆŽÇ1/sÝÚ±#áf5(ÞB*sÀK_ÐçÊéTézê„/ï÷$½ÊÊÝÔ®>ùêÈ.‹W˜©ýüq2NÍ®PñðúÚí­:£Ïò\ÈÖd =ˆo䬂%œý?)ý޾Ðé`[éê;3O!ûnB>z?ÞÒû!«}–(ô‹äî¨*F±&2ÒïXó0Ž\ͺ¯¯ië¼­š^³r·üèæ“é'äu XÌÑ`BГ•©j<ÂÊgðÚ¿Øqu+žUüÌÞŽÞ|Z»µ ¶!,®¹‹Q”6^®kÍ=;KÜÄÎŽm¡ˆú$°ïpÊ›dæÂSïÆ’;„u Yö3Œò*òu£>…4õ×9> Â&ׯ ×dµÊŽV-¼ƒñ­ì©wòÐ3þäh;¤§;ÈɉT‰Þ'ï{ˆ(z¹ç<Æ\Å¿/Ó¿å… ¯Qµ›@Uå~°!1 ÷‚¨ì\Ñ—5Do\­–¼-«3ÐéqÔ&G5âjÍ,<ÑÂû¬›—OÓƒ¾…ük3yý[ŒúqCºÉØV ßãû³ðô~ÖéÝPA—Ý’åR¢`íptÕÆÅ õZþÐO£Qyj¼Ñ yïLÔziù{²ÜiŒö Úÿ!ã®dÌz©û=– §Ï` çS‘|ù½ ñ5؉ŒÙ¿Ðd@nŒ;u¬è8‚5q)#k½ï¸hû¯ò:0„Ÿ¨/F~f2vAßï´b_ÎY>~ OŸç}O²¾qT™n䄎Ëò×ÙÞ7¥POª.˜˜†ÏtL#=õÅ“ß}WÆ›¸÷ägj;QKxÎYûÞµ&ã|ü`=~†oríôq#+~±ø|ãX¤ñT˜;A+££;}˜rëèê¤ç¥êϵ5»² ›žÉMEé}zjÅ›ÎêfSehMísS¹kù|j–»5¯Ç­1qWæ,°¢úi–ð|ž6‚QÍ¢ôgžÈ¥=Ò_Æ(ed Üj½S¢=¶ówtv~°„ÿ®¬‚Ÿë‹WS¯ªÍåØrUy@U½*÷Ö}‚<Ï­pv¿? ¦Ó5É3c#ËsïšÿܱkÜgÖ­ý5{2†’º!A Á¡6óŒ¥hÁXw÷}Í“M=«^*¿(‡–íª*ßF—¾‚ϳû]dx<|RÜ@ ÖÚE7ž«ïÔ’7aÝ¡›#Ic©A* G;²wâ¬èTž)¿a[yç4°µGVwÏ»pVÕ}åwùJäåt¦m~¤¼ üª“÷goË÷iRyaùÛ²Cš N!NX„]Ê ÕæÝ±‘·ttD-u_ã!y)g¥¬µBíÑÅH]?x×"¿j¥èé×ðwç4¼ê“rï2Wm%VyyV®+?*/®ZœW뀟 *vM6¯hŠdxˆ¼Ç¯Qn•dcR31Ï?ÈŒ}«CûøÊŸ@¥bs7bûÎË•W–­«Ž¤Z÷ ±Ñ±NMÊ>åüÜ¢|´þ+ª0ß#鱡ºÒ„n@uOÏ¡ErÍöDÑš úŠ4ð.‘C‘¢]ðGÃ@.«¹ßj"±È2,jãªëóUÊ¢«kˆk÷I“¡é~幬j•ô¬?ÁÙ÷áí©=c`þF<~iãõiúlÇ7Ö36;ñö„6hèdnVþªÞJçNÃô)žùŪ—ª@ÇwX_Çô$jÑî¨Ô±êH*ZKxõyÆýþv—<ÚŒ5ÕÀ’ß\m-Ættóbc}m`«Êøž•ÄîcôähpÙyÐõk¬ùUWWÕN±<Þëu6j=–öÞâv÷>–—2‡—øÛ£Ô™Ú¤ÎpóF“zæZŽíOã>O°R_"W421Bô®¶îxÁ±ùPÄÉðÇ}PTNfÜŽ; ÷f_éQÔðo'6êÆ ž/æû øm»´¨xñ”DbF[z-ã×ÈG£Öx¸4ׇMjAœéÕW+Ðöƒ‘^÷+v%¾\2¿ n—n!òå¤Oö:dj¡sð°+ñÞDu\²Ï¤WE6" WU7Å3¢¶犊íºþºàw­ð.øAª ŸR;€Š¹-~úרöרɷûhÁÂî™Þæoˉ”¬³wáU»Ug•æÏjJܱ!Žä˜±}Å AÆÜ¾¶3‘¼¾æ–â¯U­ó/è·{›¿–µ®K[ˆ÷Úã½­ê®)Î¥’³º"­õ EK*¦½x–UA-\ØXï £j‡öV ÕÏè·‹™>‘,°9ùîãxŽíñÄ%c·¿/åçEÄ!§PãXk§­¼òO⣹Oí7ÉoA´aÏP`Úý¨¹’1µ‘^è§µ#«Ež‡÷,`´ÌZßyhË;P®™¢; Ù•zK (Þ™úž(wçsìÝû"óÃ+6Èì¤&ƒ0ÎÓ›¨+®XoãÏš<\I6‡<¤bKÄØ³Ê&èÌ<¢ä)Êe+ž"u嬲“So©¼ˆ»£ÉýšxÌ™D?ž&—¥‚ZìI‰Áeú±VOð;f ÒOâ¼ #û ck þ¬é‰›+U”¬øwcÞºÐ+¥ÃìÜÎiaF+%ë0ï ÷ýQÝ•j1š60äE2¶Õèë´¶Z­–q“ó6s’f>U´ä§ôRž‘c/’R¯V›é±ÔKyX”²¢ôú¤À‡œ‰Ò&Õ´³ÎÀ…¥¥¦™œ^Ni y½Ò¾¹&Ç—;Ú3é¡…ñ¯Žªl„Åq=Úx?/µô<êPÔuÄÐ]¡ÏóòÅq= ¢9ß©Ýt~6¬¦³•WÁ¯ÐD£‚©g¬éŠ¥¬íscÎÚ1£ähòÊ5©—_)ûê°Ï ºEWEXoŸ§,KAçru$c=µB^%}ºï•C"f®"âû]ÑM++žÃ(ê#uœ¯ï“p9¢®¹²Èÿ\»T i3G’vrÒ/9íÖ~µ¹ñŒ ]wüÅh«ŽˆµCS:0®A»ˆª´£Ú%UM9–Ç>KMTnµÚG%X®¨mÒËQ½ÎhͽìÚ!+;®ÇZ£ç!4gÅͱÃÚ©ì³ä±6.ø¡¼HÁˆQ-b0g´ÕÆû\¿ŸnʪödmaçÜaºc…º­yÝÊRFíŽÏq½Ú,ç·6Joi¥ˆ93ÇTœ•´V"µ©zÛð+Rm44&k²q=9f½Ôƒø®rÿÓ^ïÄ?w«´®Œäjâä¥ü(ýŽ¡'1Ï–JÒàZýM©wvbÜÃ*^£Ñ.˜4}®kèÿ[ü%Ï;‚Ê?N^Úµ2O«1ö¸Fo©4°k"dGŠE.ü”²±›T{{¥• }ÉèÖ–O÷"îúœï:Íæ¤ëóïètn@ëNáŽLÞ­ó4©Û‚O‰ jÓ¤€vT =ŒœWêºÊÿ}…Žx~ð@Ö{]ÙWçÀÃ'èT*Ùô@% û‘¬lz™fõÇZ‡±””rRËú¢šå«úÏÐ ý¥¯(5zs5så6t­Œ§ wUš &u&Û˹«¨_ž¢p ;£úл}9û¯ÐÔS =;P©0FQž´+òUÉqÜè{ Ë/·µtz^­Z?$¤+K¿§ŠÓü%QÓRúrñPº“ˆèNªJCSG¢ûMdô7§é¬µ-c(×ÊŠµaå(êEQù—®Sß®$†ãwµ¬1ÑMož2,Ê­¨èt⤈›ˆ3o$zo–ÏDvng¼ÝÎãA2O"ëm’Ne­žÁéÎ4éé ÄÁ•çá³µ·Ñ#`|g5B+ œ×èÆßÎã^¢æäÍcói` πϬ$÷» 4úsð ûÀ»f ÝÏLû@s@K1¦º#ê]Oj¶FdX{ªr½Ž%¥»ßëwx:4=·ù/ä¸UýSÐèqdî @;äsÉÔaÔ·Á0Þ¢NW²þ *q¡1™‘³Hû¥¦ŠÁ©I)_E‡m—¯møâìLªžgó¹©?–©7Òd @O#…µ ò:ü§+SŠ•Ziª¿ß5™¿<½¾öoúÝgÃ=×8 ¤ë"êÜúahýôô¤·«ÉMOJï°›ÑÝⱄÒRK ÷—Z)¶OÔ‡þÈSï=hXœÎù’k8áMF›D6k·t-rúmÓ^y ÈîKHÐftø× @2ÿF‘³ôd•‘Í+•®H¤i[•em£¾A»Ð‡•6,ŽÈŸS“ò6«ç¨L-e•‹û)Æ=(ÿ =_a¤qTt^ ¾ò uÐ'¨ÈQí >ÙŠ|ÂôljžÙu)Cæ„þnv¤ñU»*ÚÑûp/'_´¤¶zJÚ†|s6™ç*4cnq|šÍF›ŠÉ…•+O÷».àNi6§< ¡B2{â=¾RΛBõÎŽ0Úù5‡ˆš3¦7êœM6?íÊŠ Pþ oݳ1—á›Ü· ¸ßfp‹× )|•X«/‘²§ÀÉåÕöºƒÏç+-zp-bà`ê‰r#õý­vÖÌNY|cS™ÈÉ;PðìÞ2ÎcÑn)Ïß¡%ïóïE¾¿ýß`ôï O7s² »l#š—sÆšrÖÜ?|œ­RâÞïA AkX×bh:*.£¢´ûäŽÊÿGÔY€m]ÝÿwÎ糧º»»ÁÄÆš3çtŠÎÍØÜ«Û\³ýÛº¯Î؉…"*  *a` (  ÿÏçþ¾÷µë¹žç¹óœóí<ç ”=¸üµ|½“‹™í)Vô&œ»þ¾­|6²Ò¹W¨Ýôí´+êqõ\¥æq%ÁMf—G¢G~ ß7ÆÔPÔeúŽnØ/róòþ<–Lòsùiê£ È¤ S³¶{ùÛ’ÈÛ½7½ÅÙ¤ž´ÔË7^ ßW²éüû°Bö¸Â7ÍÒFr_kà×ÕÔ9~ _{R¹™Œü‹ytT~ÊŽ‹®i+«YTl¥îù9sºËïe ÷F€)X¶ðÌÕGv¦ê‹…Ïòß|ÍQ-t™¦ èò•Œ±Ý^ŸjÀGÜëÓ æ­²Nùeº´<½\s ¯~ƒìÖƒ¿—“¹•šd:&:Á}9ÇV„W¨N¨úxá#hÙZ’…Žß3]”¯NÝðBVç|22MÉÜ]¶«ÙTv-ÿÍíi'–ÇÖ¼š=Ût 5þUtƒovåÂ…Ý™s*ãG½1<3ó)ÆŸAQñ­ÒbïÇÜ‘î×»áe,òj ;£a7ƒë.5½j^+_åÔÝæËÊË%ek°Û“[®zäsÓ–¢#Üõ4gþµFëöÖM=µ¹Ùy( Ö~*¥RÜÓ ¼CÕ]¤ ¹\æñFŸ­ô<S3¶¦]Ù&wÁªæòžrÏšSò"tÒo©žÎ\û°c:írîÆœâUgô¨µÖásµ|›Êkb –ZÇn¬²'·Ð-L·çòHNwk›SZK]ãÀškÖÏçÑw¦îœ³yvMV³–ÜýÁyg8ýVúhªeÆÖ¬Ü¨[ëb—DÚOq«Þ3N2õëî·-8Ýmmn™@j¶£vµ°¨[³OͲrP¾“lã4ûÊô«rjÍå+Pû;Þ_Åß³¸÷ç/ÙÓÙÓw@F=!Ê9=½Y »¨ÛC#F9ŠöÒÓ*=ÚÛáÕ¢K×ûä™5GÖüIx ®FÇ?ȫϔ÷Rù]@Îq"¹ñ𼻀ÏJCÀì(ôm¶ÍĉUù6¢猨ßpÿÄ7:c³_C·qƒUžF¶¶äôÙ 5ãò#@ó,úm}EÓÍÁ~m@^?F;ÿH»93žÍþØÎŒb_šÙ{.­Eª}#¯©­1Ó Ç­|ª1ö„‡`Ož`gÐðáJdp=XGæç{køs©¾n@€Ö«Mäš´†µTºQ¨~ßÏèØ…lžÒ¨”èOj¡õ´4fB†´9Mð¥„í‹OØoT i~‰¯¾MTÒÇR7]¯•‰žC;µÁb..öO_ 5a%ö…,€kÅìŽÌe< #!©‡ÏzœúBvZúÊ)X¢Dµå2v|ÇΆ7b[Ñ–>©ïè`šÉ)lóØ}U ŽF}ùæödvoHFhT`Ô+2 ¯HkêœjB­¹}þ1¿Õz¤½§[óúôÇü=¹ïç+û]´º8;uçTÊ«Ù1Ý”óKŸb[¼°Sê ü+ñdäMa4ÿá¼êcA=“¨Ó‰[ãÒЅͱ¼žâxzq\¹ã#¤~ úHš-#v©¥ó¤%u-o¾»+7ÛZ<ïËy¢#˜¥-úS¹Je¾ºWGz†?y$}cíðÐŽ¥–hܾº‘?Æ.o,ÚS©_ ÿ\@Ô´ž˜aÜÕomq¯ïÛ>uNë:joÇÓ#1"RœÇ»¥FM¯¯æíS³øŒßß íŸóu¨>^oRÝ4ŸZÄ™X¼]ÐþKŠQtŠ`?Òñ|Ë>Ý]*ó…÷%µ´`ZPó ¯DtdÂľÑÔ©Xzk;é2y û2ú°Þ¾Âfz¢üÁ©inŽC3²ƒº>Ï*ZÌÓõÞ¥©¸ 8ÕsÚláoUÉeêŸ(µz.ÂìiQvU5âÝࡦðêdÆÿ|®+Ö°ŽûÙÕÑ~r§à»E ³^‰]hÇ"áú¯J¢ÒY ³~a³µ2B&¥ÅqT,›€×cÑÓVzâkÎçn×Ùl>ˆÇPNZÓ”U¼‡Ý{ ٜˌFƒñäÕxÖ3´ÊfL”—¨u˜uTûš] ûbÄæ+rð`5Q‹Ôü î}›XÁ[Ѿ†KG !ÍéΨ×®¯D1¿f×»»s»VîS’~ê¹HMš!bAu“:1²*Fkúiæsôö"ú0¾j Ì'p'Þp8 =’*ïÅè×ñ¶¡£–æ©;ŸmÆ®?;wô";âìR52Aêx¡—ÖâToߊŠÑ‹lfñPöãtbÎ&DCCòx°ú³õJW0OsäõðÎîi#[ 6GËŽ¬üwdõ·#jA̬ëe†] žRÃ;‹^„> ¼dg}ð—`Lë0œ^3Ò弈!HÊøõh2F‡³“y´zküÔ%úµµÇ!#áÇ ¹š°Óf•[ñ’ïËojÿ¾x+Þ‚Þ /ôf¢ì©øî;;MôyjGç³'üy—æ/*8’;\¹{jB*Õ­JŒpJKu‘yÿȪú®9J*Haû)wÇwhË£ÑôŸþ‡U ìf·¥¡ŸQôp¼Ô ¿­ä ¯ †¦¬…ùSã`g¨Ênø»~N Ò/vÐîH6n Ï•bïDñ†³Nà~8]4žà(g8–tòS¡Û\¿°8§0Zmq=Îà åoWçLöüøýTcì!Ûþ µ„HKdÜh6w:þipJäƒOŒŠ‹¹Ò€NzüÎóºëj'ù¸óèº5Š}VÓ˜Ù{™ÌǸ a?ÖaõÚ.{Gò“B¢ä;sèp!‘’â6æØWz;§xÑ“ð¯¡Z?ôFtDÆn¤a-g5V^pdƒ–J†ºÖoi-²µ•ÑãxŒ.|µ’¡|šPóÓæÛÑ,,a}ÕÈ2(œï·ÌÉGÎUDm¶:Gú†Í–ê¡€P ¨‰±-Õínƒ~NžS.ŒEüTulgTÇ߸u¼|©]qDWåˆaCÕÍ>¶r)žÔŽüåÚbE®VJ„DùjÔQOÞ n”>¾âÚ^í§"B/„Gï¬z úJ1ªk é*ŒQ…–Ž~Vš+ÅÎ#,ÎoöKl £+WC›<$=¥´´TÏ+©RÔ画«<áêìR3ƒ'ö«ïû ÇuÖèÃw%®T]X =cj³ƒë¾Fß‚\z@BóʃæG ì]ÖW*({‘Uäsáô[þ¥ṳ¬»´ÊXAZŸ»Bw0j+Ü‘4ïÞ>R{ëá-cn5‡µy3¾# Ü-)WGdäë¾üû?ÖE®¯ µ&ùØ™]iìñ•nŒcvT*¹oøðÎÖÎ<6­þp~m ¾ˆØ¶*tRS¼)œ!‘Zr1AÙ’šò†YØ1xŽêW!°Ð&fhÍŽLFßwv1lÞ×ñí#NZq\²¢µ”2r­ï(mrQp¬0´¬ä´œ© #÷aTû®Æ0çWkáFbá¼{'°küáŒJ”!Ó*GîMÎ í¡žÌ¸«Šâjãv¾¶Ø–©A^œÚ“¼ÿýò"jxgöÔc;¯ÜC¢”ùmñù±5WàÍoq‘<%S vsî ˜€4’*˃éÞÜs뽟ò}*I×â¥uaæ®@ï¬Q[±ª$õôhÌË+I>Wšª5gn±´·ãܳô:‘Ñ:4uÊò¿ñ¸6ߦ[ðƒ.Å·?ž6Ó«àßáüºI -£|É¿Î(×_…?ä«Aav~õG+¸²¿µŒyP}ƒÿ:¿·K‰Kþƒ¿ù^í i½§²~k–í±pÆ;ʧ˜–7”çTO‰uu¼ïÈçáM».¥¤óíŠü{Øz}GæUd,Šü0õ6y!yñgñÝ?"O²Ptÿ¨Ð²g…ÏÝñ#%YÝQ¥—°™«QZĈr§\ºF1}TÅèJ.o=õ¿Ã‰ü.'ßu%yòù/Ìù2ÿw‘ÅØ™Ç[9óýit„}Yæ×äD¥UYP ”jíšÃ½$Î]Å»+P—yŠäŽHE-ø›'y.}u5é6²ñ7àÉ×ÏãàÙk©r¼ROŽ÷j¼ê'Óyx¼-˜Õ\f_F Íh§Š¸JGvN%H(…Î8\ù#àÅžx9÷r~Hsr6!Ãe–ÿ?äpÿ'ñ,£¿ñ*û3û»d¤®eWÔÐ4ªzŠš] æýÃ;‰ÝmJ³ª‡œSÈùÔæä©ùþ·œø=Š 'ky'wÍ&;6—éyòEÞ1q´¾“|IC¢—#È^4OÆ=€5êGÚra³ªæ–k"o¢sF¥GÏÖ K_¨³+]Wû¦¹Å_ÓF¸ô2|‘Ë}§˜Ë)^æã·©8ü^Zuï,ŽI˜Í·ÉÈ^ªwåY³äÚ·ŠË1æm\:WîjÅŒ½¨™éy~íCôùp=HŸïué†<5%꼞WÇ0ß΃|”ŠÄ£È©wÌhóÃ.‹Ãº@¡·§ÄêßÊAZ̪Vö÷¼ô ›Ö‹LÚÇŒ¼žŒ÷käÚç³Gçâ… y©·˜Åû§þÉœ7ð©]8ÛýŠ4‚èsw´IÕÂ(òŠÚ\Û1¯óE/”Pª1ú£ËØÇ’.¬Dº“÷Yà ï‘ÇèJ^ª5ºaäÆFBg³ï/YÍÿ{Š‘toߊ¥ýñ’2"w¨ÄmH§òiŽ^«7¥©ŬU 6ì¸#8ʼn|‚7$­/¦YŠîƒ\¾ôÃËÉÛßMã*²·Eš^© öcNµšƒbj¹¸›\~\ë')ŸÍáÚŽðû¾d»N¡Ö±ˆ}%69ÜÀÜ5äiš®"¿éþ«eè„éœètXºjè×Ô˜'ÀGÓÁ”\cõHX«+ò&ZùÐ!·­áÑÌë)J_"¨(4Ï[|-Q¤kSêIïƒí×ø™:€ý‡õx¸è1b(-ª>Kè<+¾z‹òSô'„7¬f íÞYüžÓ.ÖVêoV*žsé¯38MS7Ú•¬øBÖâž É$G^ã9VZ žÁûÚ 3ÎgŠÔÕ–É3þ•âÚ‚ŽÀ¸7a;î[y0Í&÷4­³šý _Ò¡p*X]Hýæ.âû¿SéÞŠ–_- KÖ|ÆÓ`ybºŽh_ÁnÕ H½“ÎçŒA͆d-~Fôúwlä:2A5ô=´‚K71Yöý0õ$¯·-âÀ¦åá•\ë{@ê)w ùÖ`(14õgÕSÆÎ}}Ó°'î=PbõIb^{àö`•SÈË4"§97Ì|o!«?’éÚZÔã|ßëÉ"÷Èç‘Å>¿¼ »ÏnÑݯõðoÛÔƒ üTæS»›ãÈ!p«æUBÔ»RX‹sÔ¼C7I ²·êª¡¯æPîçÙ›Óî!›:„{B~dίщϒó[Å 8úËŠõVñ ¥¢ZÐyBiÉä¡x]Ÿ©xÝ];›ÎŽpã\ ~ÎÜBæ½/wE®E ÿž^M½±^ãó5åPê=‹x’³Y½H¯H­ÑQè²°R‘}ó±ñ§VÜhXk¢ìª-Î!+y1š{ |ú2rùn†ž§§£Ëís3*Y¿ϧYeÊ?ðNƒ´Ípmúß|l¾œ}`Àkw~"®e ËeŒ$ŒsuEÄ@“Áì(:Š®ðúy/2Ï#ÒçPt5'ÔŒ.Wbi^.~"÷µ’¾š‹ÉÓ¼ OT §Þ0ˆsþ.„þç§aȧw{k­„IùÔ6k?…WÌêG'¡¨väw[¾4Æ£GÐÿá6Ÿb7†çS‘Lw&6j¯sÒ̼7u3€¹×ì}V¶kÝ‹E3fu°ÖeÎÐúÆ®A-åÙË»`‘&³à¿ÎŒ´(Öó³=]þó”´‰Ü9T¸·Q{ÿäôÿ+ÈËRzCÚ$êkpÆnèOO/Ðã ïĨÅ9£Ã4ü“XS+ä³;V»sî&ás´G³n€;›r>`ƒüÜõ Ürkùùxš ÌwèÜVä¨Ç±ï"ª‚CÈýµ$óç^Àˆ å­‰z(în6úñcAã´Óøt/4Ì1ÈÅV8dÚ¡9P/B_ĆRüžµ<¥žƒŠ|ç2Ž×±»e»</%%³ƒ3*£©qôIbGYØlmŠ:1Ö#£ßûAº–Èâ|¬Ô9>‡7Ïaì¦ém,øb¼¿UT^A––²žåð8’š÷§ÞóŸtü¿;WoÀø@:ÊKæõo¥°Ùw>TíKäÅ=uŠZÖ=&­CÏŽHßSغ;¾îò‹[Ðxë í·dê7!O[±.rŽô$¥#ræÐçTöY]~‚ƒÏŒ'Œf´ç-¨#µÃ¯]PÞ–¾-Fb޾õì28™Üô tØ­¡î0S÷«5"Wì«*45†~ÿh_øæ]îûœ߀nÇpŠè7ظñ—–òü‹bV¶¢½ˆýI^¯jq»\Ħpšå3óé‰AzgÑ—«¬*˵h{÷ŽÚ 9“®Í{áÌúØŽFø%á' E.ƒªm±9=Ò×i,«k†W2‰oD¦wàoø\JkÕ–é±è•„—dd¹ŽFØÑý±„ZÞtÙúª{ºø—C￞ çÅLŽ(Õ„K?V>ù4/¤&4;%ߊg=µS Ö|>9(#Hº3ðNî†wÛà‡ÍÆ»_F ÿk*w¯ÑWÄîqFoHO—y@u¬ZHiPJÂR3èS‹ñ˜E/ŪdX)nÞÅó`f‚c3|tmc±^·ãS_<íŸÁ±œìŒV¿)™5iHMgcJA3¥‡³9Qèx× U1:òU±"O™9×~^Æ{g×zdÿ<¼¾îpóè%錼ÏôdG1§¼ïXÂç~o93üIŸ §^¦ö+t _ÄbÊ5úÛ©; Hìšî?÷äÛ­xt1¾ï¼.ãñÜÕac.áPö…ËUDÝÁ5™óöõ*µÕ¾B.nÍŸfèü½oÛ²ª#ß™ñþ8O³ÿ’áœJFdÍNK_eÁQ̓é{j=ÍÍéÕKÛÈŠiÏõ“FÆçCÉ4j+Üq£y¯¼Ú‡Ï‰%שϡq¦½Öô©õÁôDQŽ6V”‚B(Wkoc-®ÂO ™§N‚rÞrÑ÷€Ÿ»"~ÏܺؒÅT‘#…FHE=$ŒvŵËE1§ºB ›-®ÊµVVm”»ÊºYç;å©d–$¤]n¾ŒÉü­«÷“jCû5ž?~.j£Ú8yHŒ¸:¹:¬xpL©á±Q¥¨ü®•ŠHHçsyF8IÈôH„ ¢1îjʼntÓšë4Gé,攤cYíÿU⬾¦4„¿ì:]±2¾fXíêP?ç§c…»âdr±éiúQ•rÝ®ÃLž« .‹ýOfeä+‘ÒÕE]^Òð©«§s„œúiéîj¢ìföv<Z½`u¥² õÍkä2O¿Rƒªo唈:ƒnAÁÈ'ˆ)ùMÝ`ÍÏOÄxb±Ê»r¡r&Õ£ëIkëÈBàlŽà8bP™ˆñ¬H:Žz7슼fš»Ââ<5¥ßkú-Ò\-à`îËQF£zöÇÿ¤®ñ@Ô1cçˆ\( f6«Uˆl˜ót7Ž0X5påª.ï¨;Ũ¾›§SMaVϹhË£‰Œ"Žô˜…\í}sÁÒÛŒ±Üåya¯Ü£XÕâÒÌKaÏ„J‰IåMhÚ ôb¶¸‹ÍÊ’»d<ƒ¸#ZӱΧ»ÉÊ»òŸš vµÊ'ÒS¬j¡ƒÃÍldÚ‚à!qâÉRV»&¶Íky¿É 2rgôü»3G¬„Ä8«sÉbÄ’Âl~(¬§'7ª»JFs Z?ñâ© MÁ¤w¤·»žä¬5ÇkEÁóç¼kCLDå̽vú:qÛˆÚS[¾®z#rÆ¡}”[ktféÔ[3Åîp—vs¢aNGãÕ~ã탙³/ïxV–¸ñ4J=å&óWoÖ]k#n½}زXË; ½!±4–GžkaÕcN6ÿ0÷áÆ’E¹_µƒÆÚr÷døysâÊŠë×ú„m?İP++~NÝ'}•uýC3«b¿‘hFmŒŒÜËÇ×’y‘»òutTŽÊí“y§fà¡;>š{l”|)§Â(7j—ª—«®Î u™ô–o…Ò8¹%vx³yþ`“Ô7·ÉÿÈG¥ŠéD»ÞÅÔ'O§p+Ÿ°š¯÷Ý•¹µ‹ž»%â11îÈÚ3ë+J¿4rû­ª‰e÷ê}é Ð{‹W;·˜–í_ŸbWÎoˆ^îäÜóçžñfåоëtJ»VOšª¡Ô5A)ûÆÕM‹Ä¼â>|5qS~ÜÏËÛî"¯Ð%-!Kò5rUdSn#‹yrqÑæï‰c~›F0‡Ý<ž1ìþ¾°æþŵºÃ±•^sŒÒÖþW­”º³#˜Õ÷9ب¯þºx o_^G,ø8½®WÙBNXDiÙÿÃÉϧköƒ4‘ït3î•”÷Ô¸+£yŽZHM6[¹p_®X•Ë”ek"/…ÖÀ1æ“ð¢¯gŽ;Èë=FþÄx®b×̺‡ÖàU_“eÖN舮Œ#lÞŸé©UJŠ]9áµëé×ùŽþŒúD«'/»ÿo(/¡ôœ¼•ŒÌ«ìy€lçgÅ?Lnæqæ»ß}îÎ>ŽÓ/§Žu/™¢›ÒÍìuøˆNêZÎŒîd¹C38H®Ýƒ!5ž3 ÍvnWe·ºNäÅ&2?7ëPmØ Áér|î?Ú‰êò'ùbëUÔq.#Â^ÂŒRù l7HÒÑȪu­”xuåÖ³M=o\¡Ì*Î*&¤µ;ëTè^å<©÷sçô}SœFŸÛÇùr ÷3Ë]dlWá]ë·ç!Œë­|rR0¥M×ÓuçQt¼ª‡¢þ¨,Éoþ*¹f^û{æCÛ³¶_»Þ<5“ÚÕ‘ìb¹ˆíßHÏcä¥>§‹ñ9"ý¥ôåÿ&u¡: ~ÐéIh©Ô©r²’#níVTù(NURòü÷Åÿæîù«ÔÛÞ¿³ßÏ_Û~7!l!ó·=ñ$ZbNÑŸ<Ò~ÜØ²ÜÚßÕ§YSUBvô¥­ FÿŸµÃèP²ëz²YŸ¬¥{CÞàvŒÈxßÕb²#&ïuy……Ðñ}ªJO€áwéx¾&µ†ú·Ø jGÚHl”¾2¨×a–Hm.n• Ï‘›¡ïôŽF°6úoɈÌ#'Ä)-ô¯$Ÿ÷0‘üoÓ¢b61àí© T^J^ÕzaS"ÑmPw>µü  Š~Œ2*þì l‹„zï£ç¥ê“HK½µƒ\d°ýô«¨Åm$Cý 9µïÁìf¢êd¥¾,Zç¨.l%¿éŽƒd«æÃ×·Ÿ^/ÞK½ hF󌭦ݪÚnávÎ]½!eÕ•Ÿ›O]ö&;1=/‡rË‘Š ä…>eüçÈ \•Þ#S²¹ü„ßÀÿ Ú÷æô|q·-D^¦UxW¬)'r“ºFz†×ê߈O”“œQ?•\õœ²3žJF·|}úx~"´ Fîý ²šž‘ó-Ðo$K³²¸¥’k8#Ý’'æsѳ*}¿ö¢)¡êpééœZõÈ£èS…~œ@Ž'á}ͽA·b!½Ü=WM¨SyÔ’¢ä¾oá[Æ: Þ{N›W%ù;ޝb¬ãÙé¾¼u85¸—~‚y­¸?Ú01<|ï/ˆäw'×6ˆ¼é|¨V‡lâf2šÔàª×ØÃ±l/¯­‘šïÁìBò8î [ '5O]Ð×»3š|"œJ¾ÔNåµz‚µGœ¥Ž9î[@Æ«û4¶±ö^ðR¢ ð)\ô<\3ˆ?ƒ²Ë*Øý(­mÏFnþxÏHv*Lc}A½#¥Un±n¯Çiœn¤#–ÝÏ2šMë0Û“Œâ~±UEK -‘o~zÂÌÏBÇoµ^ZKÍê1ÖJ¾•ö9©ZaøUÙŒ.iu¬˜Î8\ÞÒk‘ƱœŸR›¿Çëê—ÝW¶”±¿vÍÐåo’wŸÌÎŽ÷€ìC8Y)ú«OßÂÚü»¼!ý*‡k§!!Izƈ^¸þ¥|kĦ–ÌÉvÍ|,TX\™'ÀCO¥ÖôÔ¬¿Û°rîBxæ×ä0çBéÍÔ ­,ö푬¯àëùÅ™É3¬Ç0®ÚMY0.ÓpNí¦râ+j½Þæè„6ø%7Àý«¨R½å>aWC2|Û'wôÎÎÔWßE»ô5ŸX¦|.z ó™Éü ÆÒãÑZʧr«¾IèC%G­©HKtB|“ÓÐ4=©®ÜŒŽýÙCŸKê%Õ®ì9z{ùÝúÛAåטùšô!–`9´•´Û{1jxºbÑEŽQVäU÷* ©\«öÝ|³÷.5._£žÒ— êrÆœ@Îøôß02ðßRµ“º°–e̺†™ú¥Ü…u9yOEjÆÝ9‚K<¿%âv}ê –ŒSÌ0ÖGç5 ¢½š¤7õÎí˜m!X[L/D+öCý„FÚÚr‚S-Tü¡˜ü6Lûäöåiådh3ÿF©¨æŒÄ®\ÿ6¼‡ð΄ҳ혱ßÂ}YsÁ.½4dª×Gag´p›Ñ;½éºÛç_£¥~@?´Fvâ/œH·Q#8hþ‚þ2¨Çõ_•Î%¥û¬/×gN{ôîH* Þ/ó1²úܳŽ\*vƒ“·oMw¦±cño]Ç‹¬ÉÝŸëñ˜^d¬¶D=™ÑÈËLƒR(¯ÊCÒP+®{ü”ôXÖÙ‹üÖ«çf>W“á§Ö•SýΠþÙJŠtÔ…+¡èA|jxö^Ê6œ: ×#÷ȹ‘…ŽXPýã aÚ4cn»nÌÔ7cÛß5.ΡšqQS.BÓÍG®îÛ¡oÃôp1;ÿH©•Oye¼ UÅ©´¬ERÔðÚÆÈÄó)EÚMíµÖÌ[ÎíÊ#»òÈ[ŸÍOåEŒûú`9õ@ûÜ6“¿-÷/ÎWð\Ø¿§—‹¹}cÏ@;V‡€QqªW /¢– 2.5W¥EURô%ôÆÚâ/þÙX_bïJ‘¸C¿‚gÑ;ߟ¦Àç\ö½=}ˆ=­“î'>5škOÄ*‹þ~˜U>¥[Üîj„3tShûÆè‘YøÊÆuíˆSÞÂϽ 붘Üïõ(¼²€zèªâz$r5έ_r>7³4æŒìØ#-<ú®FÐb9|-™Pÿi›WÐvKÙ}*•$ýÿkè0¹›ÊäÐô3¤óhvºÝîcαž?1ï-)ç_”Æ8}Ð'S1*žòªq»Y çQ÷É]úñQó‘w]§öŨé8$[Ù9y-ÚpMñ"ñUxé¸ôP9#-¡nvBþ |‘Ûa©-ÖÛkQÑvš#‰¨,âlq-–ÝMbd§DŒo¥ <¤…o‹Gr5qèœW•üè¢Ú7ÏÁۜߴál½·ÐÀÞ~¶=;ðzðMÇÔ{¯Ê§3¹Š¨]ùªÖZ¿$2­Æ«æ³×ƲóÆX½)vò¸ò«´+çÄÞ‘7 ýþœ[b×ÿLDvW¹)õgŽ6؆¾ÿ¥\jVƨ]YTvÌÕˆóÐPRUnö%ÔÜ¢½aF”;VÖÓ†éØt#Zgfz,O@S¼Žm»¾ø ù“ŽåðÊHÞ!n½ÃUÌ©ïª~5>1ò5¶—²Ê®ºý#ùËïÙù­¿#5_k]O…jGÉ‘HýÀrössy5ûwkù|=|ŒöœF&Ì3“3¿ÞNbj¶*ü!©§=µ_IoT»šRÿE[«e;’ué-¶ÂkÙ@ŸqÜŨ|kž˜úWÞ³g/¾w>ÉÂYYáPVœS=oSèå_e52 J±Òž«³{“qóþ5O!6[!G´à‘;6ûT|ã±ø¨ú•¾ãxRKÌ “X2* [&™y‹ükD5FnF¨æ0}GL7cìàu–ö]/Ǭ£·W·g%;±.%<²KúxÕ|©Ðè?;SðÞÈõGîU,«u#ŽÓ®ºVõˆØhD–j83¹Ȭ´ß+´£„ëçäO¥[ýœaÿ•;ôÁ”WùG-°kÙ[@óˆ.¤­™83Ö®Âõµ`ÖáD^3ɬŒ†«wÓ±_@~ n”/”øÈáj³”MŸKOýñ+ iV«QËRçÆnG4'i^Ñø9öˆÉ‘®(´€<'Þ”z³òB%ݜÈ|«^4zR F][:ú-õ•ŸîÈØfA]p«=uB^ oÇ7á5#.%\ ¹°Vêr×1¯ºÀuH™ð[ùMIvO—6ÖèCÍä¼jLé%î\r ]ô™8›z³Ö7¬Åù¾˜PV”C)ª$ ‡ü(šwÐ[‹£ 9ÒÀ¥ãD]ÓŒ½|)&ý–ˆœPÀì»~2øÍ¼‰ÏÄ¡Ð:Ž|VÝoá1g0ÅÙßjTñ+ïºZ#¶ˆŽÕÁêTã9uRûŠÖ±¾ë}òÓñ÷ýžß”6A!•®Á!â2¬‡ó‡|ªûü´<ÑŠR&¯ˆOù'°µ=ó™ÅžAI7V gÕ-èåÀ¼¶º†_yÐ_¹ß‘£êz”œj}EY«RµûÊ/Bé J3|£)H©T5ãsöK?ǾyEîtFùÙñ…¦º—?xH>3^‘‡Äº”,ûLêhA…Ϲ÷&«¼ÎoÅMÊvEó åU¥VÚšåÈÿjñ¦„„.r.ó ÒC !8§ò%öÕRJ¸ó·ÂÌáìôò\!ï0ñÄë®pT/0í½8u5ƒØI—3£®£õMä(ééèµHŸiu½`u»‚ÌyÒ{öÍx‹H|-{é;à3EÆIäCÇ7k¼¤<lzUê>9.¬µpJ¹Hûé|‰=¬—™sEöâ:Î’UÔÍàûÏ|žÊä9mîoÅ3OOQ¶­ Aèj5¸pú¾¼ê«¡!ýŒT‘žT>Œu›Ó¾œýûŸ§nyû|-í[ì¤YI„ÿòÁîd(kw“¸´Ò¢ö¬Ê‡¼­\8—|kt¦-UgËeñzäÿšéx‘ÕúGÙgõ:hv&§º‘îÓD_óutßÀž;‡‚ßüµb&ŸÉibLÔ؉+·8§ü%•œí*r¨ÕTµÅ£Úº™§?·øÝÆ8 {nñG<ú?»\N®æyö!Oüßz»¯g8öœJeGËè¨rŒUi,ÅÔ Î^•_×öl{<ã㈒úñùÃ8Ýû 2SO§?ñvy~ºš¼ÂlâÐT¯ê‘iÀL=YsGV(ÕÔfêvåÈ µY\åCß$t€”ô‘?¾'5CKëåãÈFŸä›Ìò&ûýŸ‚ư¿ìv漿IÎê"ñ;ÐKÞÑÜ‹ïïH#3¥ÁÅÎ.FÕÎ)Ìw5³úß=îÞuו»F.$/´?lMtÔ“8m1¾t·tUŽÍÄL™Sƒ6ƒß6¬Q/P‰”7>äH!ô¹V=ÕÙ˜I ¥vÔ>¯ða™ž$êzž­Cöâfö =A&÷nòå·ðøjÛ83Çnö#ÙÑwƒ{¯ŒúZÎx«¶T®®Ò3lXøÐ¾¯µõd²±œÏp_žDÝ¢?#ßµÔ’ž+–‡^ÎóÛ8‡mYqçDÞ_”ùPâ²Axq2¢ZOm¬vV6‚zâÖGÿí}Œˆy÷¯ÔRƒ»9m¤§íyjo³Ê.õG¨®KK÷hZî³·é®ÞDžoRz„,®•ʽÉLœF¿QÄÐò°1¯VÖ¸_kEгô­r "+Ù“,MùvL~b-™¢Èå>B®-ÑŸ(ÿÁ³"ý“,ÑOŒ¿ˆ›> Bö™9tJ»!Óãé‚‘;Í© ‘Ütk œêïÏ”kÔŠj!Ïé9”µî]|@ætµí9cs µœ7©öá„ñµäO¬ ¼VëçUälf““ûˆ½©ç&o:9sõ²WmvE¼Šu{YŒ«Z Ã&"mçRí8í·d¯`–7¡ë[tà·¡yš÷%ržo‘9yŒ? OÝIÆur:nÁœj´Ð/ζ$üx©¨ ÿ¶gN=¹)|§Û>ßAžr|ó)qî&râk*¹°½¨ Íâ$޵ä|÷=2ô›È ϦùMv{ôƒGƒWõYDrŒÚ©z–žÚؾ›Ð‘bþ$úÚ³§àýü·rôϳrÃü#9þ¯ÀÞ‰ìÐÛ•zg r _³«›È”í›W]þ€œÍŸó`8WÝ)^Íù„Rå!¡ÖNëè=Ù´FŽħl‘wg×pSòNÞʽYÜB¦púCÚ…Îé`±~ú nµ[üC~_»Ás#1'aQ'°úð9ÔFêZ3(æÆÕ Æ5Öï_gfq~Gsnp81ýÈ~ÏãÉ[Ö£2™á©›¨ž´Ã–Ö¤QÜT÷8ÿI²2ˆ3‚ZçAèüyèêþp…:@éw)hmU=¤œjOµÌZnï.ð”öQt×þ@å=rMg“µµbVŸYoæuœ=ÛŒù„›­€leÞeTô÷Fªf£)I=áÝq¾Ôp|5XÕ”X#eýn÷ïïAþƒÛ•É7½Êˆ›Ð2èyøŽŒÐì8µOýï¹;wŽ%?¿‘ £;ìžC‚Ÿ$×ÚR“<v$#·hŸ-Â;Ю¨ì62 _© {–wįâ̤rX9’z‘7ám¥fæ©8uÈãn*ÞN¿×Vb×õßSEsÉnÃÚ?7-g“÷kNÑ?¶Èq o› œrPh(-XÔ»ÄGo^¬È'`­ÿþü¹ô®•mÅOðÐíÔ‹fR»Û|K¨£}ƒ%=„Ï*<˜]sGN³¦Óy1²3FSî¶´oê[ûõ^´rVÛškoøö%2y_à æû ù”6Àk¨{ìÏîŽÉXñ¶`|-”\Ãì‹øÌtýp7ùDFô,2-ˆ?b9|j9H_^ž5kjFêðJm°%çÔ½ŠðW*8-Ñé¡U¦6ø•±}‘–CØË2™ÝŒž]†Õþí¸Í´š5¶‡ƒ&3¦sªw…1l‹|kœLý3#…†hÚnHÌÍEýòQtK}:6 j™)AÏ/Ù?rI~9ƒ&ZO‡ÈblÌ ävF^†F¼'ý’ïïŒV09­°+jsŒÆ=ò—Q¬'ï{þDW¸hwlà½è·Í`s-Ýé3Ð:Kë±0oPSµ[ÉsÖý`õSÖtU~ùÎôtrÝ3ðÈìD4QN_½.ß:§xÖWò‘²Û„L³™­ßÓ“4ÆZTuN Ö¬^ô£hi(ôü®]Em`m1™ÓÞÀ[ø‘j¶žÿ¾¬\k¥dÈ-ÒN+£|ú#̾«FÛÉÃO@ª;;c'_…†Rë)|Êuø ›yô]òu©\½ w§æð6ò2‰êÄÇň´+еSFrNPRÞ ÿV{)dê'£.ó¬Îݹø3þª éOÔÒç¤o;æ>Oó<Îjh“[0W{8vK1>Ëͯ`ÕûçµÉn´.œu¨õþWÿÊAb9r5Æ/æÜª¹¡è 9Üôeþ_ yûâ¼…×u1³·ÃfŸ OFWའ5Óóú³Ž{£# v!Œ%ÊÙü9“3‘™¯ˆ9ÃT.¥µöMË­• ŒöM¡Ã¤cÙ »¸¸h_¦Òq:•×׋Ÿcqà|Ó€½n>1}NýîÔôŸÜÉì„fåPzEŽQ _ÓWãYPR»£‡Ø†h¥+Ö¡)±Y»|AR÷öÌKù;Œ]zó‹!œÔw»O/ÄÖ|˾¬Ô¯$^ê‚}èˆ-Ó¿Žˆqõ4ÕxúCÂ$ÌúaËžQǼt÷޶ãѱÔx_¤wè14Þê sÁùØÐ¾ÐouçòtdéefÔ^MD#‹>fxœÎ–DÝçk‘Óú|Bªuo]žå}9ìdä¥âÔ| :aÞ×ÅYy9–l+¶ón|¿ÁÙŠ9m—Õz®—Ò!\QY0{k&Õy¢žQLÌ+¼®Á5I ½"#µ&ÔåæÈ Í^x «‰ÎBï FïöçÞ¬b>•sóõ3¡¥¾€Ø£âÒQÕrú ³>‰°GŽE9RïÊuîÙ¡ò©nX•‡ò.ù*~¦€­sþ–~¡9y}ö|½‡Ò³Ì×{r0~jØiÇTçê È-bÒ)4„øôUŸ™Ù‘×̽™y™†Ì˜Ú ]Ø"?š^ÞSþë½ý{5ÕýûÓ”rÏÈã¨JfCÉpÌW˜åS×`íJúü®Fk.ìbCÿÈjIK|²þŒ±òó$>ÂÈ|Vn] Oäž¹oQvÈï1“¸œˆöò»V¾Ä¥Ú‘uLká'XU’Ô?âAÊÛùxµe3êHî¾271;rrº‚ç{Ò]³Š36¹¡€¼I]Üú)ã{mµZÀ1͢ÃÒS^µIç”þ®P~õ±š¿!Üß•G扌€ÂêLlv5ó¹B¿×‡XÅ•û\«ÄÄsåCÈä[×áÞñízœOŽõ7:~Ķïz¢dD”Æ8Ú¿çý´vº×¯?¯‡Oå„$xD˜Å¼¼5åÂ÷”Ui­••ïä\åFPžêÁ“ã¡›ÙFWa®ÂÏ;Z?úÇúñ(rÒ^ü9’ß·ÒçOô÷©ù¥¤ú¸×ü”¾¾>ŒQ¢Ù yXüÈãÍu8ÞÒ8<É®è8wa À/íÁ'´YRÓ,”3VeB¬‹mu»²âÜÎeÄR_Yñ•€58YÞŽþv+Vêš¾ÄQÞUÔ?DYì»r±ue! Ê…d:†ôTG˜ipâÃoøYçs5RÞYõC¥½t©ækõ]+­¸vßsô¨Pøjà6>Q×|_ÕŽ©ï”äx€ˆÎcõ!ÕŽ+Drµ<áʤ˜kö‘Tò¿"Gˆgý¿ã»êÛà×ïs¥H[!ósÒÁïºë*>–ÃÃ?6ŠB_ßðCÄŠkqM~SJ;˜0?$å{n¤”´§~߈7ä Gû$¥½{+´¤{$„R¯ÑÌ„ßÑçðSÖz‚÷Ù¹ŒyåRõBø}bÖ9]“¢ª—Ìgé?øXúêIøÉ°¾¸–KBsªg‚ÆJJ¼æ+òØRçÆg\©ZÝÕjCqƒF2®BíçJÔH±÷·šo;±)§|)Ó®BZ*7Ê^ø&bÖ¹V19ºø¼ãËAj?õ¶³éÕù\Éñ¯ÜëOpˆX ~‘’b#d@Ä]ä0"+$n•Jµ²«Ó÷”ªŽkf\½íÜmÊ}ɯyÚ›c»;ÂYԉΜÓxIJ¯(1Aùðj•i.íÚ9$œâIèÕ:Žôö¶)Ä=ÃÐ>žV<†÷䯸¼y°`r©Þ´ió…V8äÇ }+EÂqeDNwžªÄ«)úrR«»u…>Œp@%ŽV b_sø ñlm\(‚¦1Zx8Ö:Ä…3ÉQÊU@Ò¬,†í¾£ÈvgFïáТµÄÀÚÝ=`V@n®ê@¹ØñÔJwT·]‹¾¦ïTu¹=ÂèúĽßqV-æáhq»ì…Åœl3^3zß׭߸ní™srBxzj­€Â¾€ˆŒŒ‘äV훸fiäýªêZVòs>×–YœËîo÷êÙŸmGÆ1ÐØ9±*7ÄIG±wK½àXbSZYQT ™6K^RËk½¼'2¢¥õç¬^jXÑèL‡c[*֖̾{Yw(ëLOëjrƒzIœ¹nǬfä§ÜdL÷“®N¬ y{2WO¬;]ÙKнӄâ²oOI[‡Ê;Cȳu¬¬Û½ïJnÔ†•6i'.•˜°ŸGõbØe-ººHÜ›WïŽL¸¯©9qÖ\λhœ?"Ò=#ŸFÌ0(]Ä»îój‰%Éç•S»NŒ¯åa©’ ÎЖjWÜ[fŸMpjp±4VÖ…¾³éñ %çÿ*5²3Òîôš½ÅNŸå/ØmñtC>ÑŸeŸV^…S¾¿Ö;´ÐÆ?ÒÔ:RÀ[‘äqë¶Î­/Ð 8ÜÓ6‘HóV"¿Gé}{¸8/Ÿ@ÇâX2ðO‘ñûk:ê†ìÎ`î`Œ±…ÐTu‡«þ¬Ø rÞÐ9‘; М‘º# }Ð<ï[89áJÎuz˜ŠÑ_ñ¤¯$ºýÝÀœi’ßád9j8Ÿuw¸¼¹×šJmªü+ŸâÀG‘eŽ÷êîžðg? å9újï!çWŸN|NËâ‹ÉÔ<ŸÞ"#´OÎybà¨çXó6zÔò¨ùÔzÒMz©Í¢oÜ‚§Â'RšÍà´%Ξ„Çú]¢×Í/&ó};Út÷L·€ã%äo+ÆæéÙîœfA±YàÅÊUhWùµjç•ÑèR}ëÄmhGmŸ|0žèÄná+ÙgÐ3õ£Bu5½Ä³è»m–Ï¢²t)–+ÉML—'r:Ç“*Å®·¦)ëîu¶ð‰B÷¹m‹¶Û}zWé ÍSùÆãÄÓ3ÓóEO2ff’…꟡f´¸,>NîŒÚÌ85¨1½lß‚:Y^ M(VÃ3ø³ê‰«=\úÉÈu ”ìHöpœL¦éAöʼ@`›oÈõ=¤ÿ¶ßòÑý,¤h((~¬ékyõ3‚ŠZ‘ðp”m§ž‰¿VZÄ„Öj¾µ;Ôëι7cÉ"´Ì É >M$ÿ'C| %½EgSZJòýDßT,‰¶Ý]¼\{ÕÔÏA¹°ÌòŽô”oõ1Ã×Zµï84‹÷n¿›þAfè%FŸÇeo2¶÷K7̱—î‘¡È÷½@Îd6Ù±»¸µ`:ŽÖZàÒgÓzèçÉ/Ꙫ-Ó§•̶êyÙç5]֙޾÷¨Ôã ¿Ýó9´Î+Åä”ò ùp2Å yæ¾™Yirס×Ò‘»ßÜ,)âS¼E—¡Ú^Y‘kô:ÕûêX#KWt*ÜÐpvé= Œk‘ËždóæÑ«Ù,¿š"c»’Ü×ËÔ:Uf|‡ Y{*AÏ@jôcUc59U?¡js‚¢®M¯µ=}™£àÂ…Åù8äñ²²«áOÉñOŸrWÈÊülêC¿ó»|f9ò‡¸›ïPººåÃ’»|zciôIä}"gWëÛAé¨ýÃ÷ò¯ñ‹‘ÍÉHÈñä÷šæ òfý®Ý/ý@…ò{2ã#न«¬A6#?ßìî|êœO?ÌƲáèCË;[;y–iw¥z+ªH§@Ë9ìýôÄIÏ‹!ÓEVx;2ˆë¨.”N͇åO‘ÑðP?¤haÑîÝ@MæuÎHjG½y£E ß ŒRÑKøñÊûmµoz'­ððv‡*Ü¿–ßEÓ^˜k€w 3'f©ÏiŒ«Ø3ý ^éÁ ÙÇɰvd_GY^EÕr#Vm´éÅ,úê#Ä`ø}Ú9ý#=‹–Øçàg*õ“?æ·ÉÈ÷Îç’ÿ>üí¨ož~ͽÒ'RI>ŽI¼3ˆjV=ô~ ìÎfìÞ‰•x¸/ò ï†Ö¯ê áŒxËŒAôm++ûà©÷å|À~d¢›P¹˜B­·9ýþ Èn¾Nõo}º뽞Šd ÿì÷a}Vž¤½óQùR¼ÐqØ@ór«ü"uÕ@qN¡¶M¿/4½œös¾3”ý{qÿäçðȹT&¥žôPï•–±oc:'rMÆZ¯d¦ÍðÖëìœÞ;°ˆ[`îãÄã#mÒb'wÄÒ-ö8h?å&u†±Š^´\}˜íϪFùxòÐßÿƒ°e˨>l+šÓ¿}øî GÂJê"©Áó4|‡ödáf–‹‘•ý+±ãk¥Â“²á'ÈOΕt­è`¦'µÛ;ÀÝ*0gßý&(×ì»'CN`ì_Ñ|¿€³ÏçÞFØm+:_ÁÉ¿ÃWéuìoU—ŠÝˆš<·ÙWô-ÍÜ÷gص#zóøb5²9‘zçYdŒßÎÏÈÖ¾Kžºó]æ÷§úº̯BoìÇ~î…ÃKš‰}iϺ»Tð¦>×Óúu[©6[Ζs³{ågÌz(§^“;Paø€ìpcrÄ¡ëNN7VÎô”FHOk¼„Å@ëN–Z¸mYÄè3˜3:†ƒú½ò§±ƒóéwÊSî€W+YÍ™Êìuðuê@/O{ÊWTp<›´:ç°95|Ä«ƒYM;d¸5s.ò*L'`[̆(“Wc—8W]›¦] ÍYOAïŽ&K¼`+¸ûŒ9? nµ”|êëE[N{Ìœ<·šç«¡6wtæsßüS:=ïÅoCÕVi”'åQcu@Ô®ô4_ 5m¥xG|›n¼¶­Øòuñó¼K%ëª çïgÜQ²'r´ýûóô2ëùßhR´ štCRŽ`T¡‘cCJÍFx6¢žˆX ?ºêÇËm—ò oûíÍ΂ïØq´øÆá5,/î â°ÿó{hÛ ŽD‘?¢šô+ØŠoØm0y“GäI%ÅÎNi~¼Ñ¤÷nˆ]u¢#4åÅšÎï©éÜ‚ÔÌÃvާgçK4àä|q.é]¸ºþ„§”¡îWÔÊæ¤ÑŒÓ +1¤•öË‘…Ùqå[užQ„«Mdœ¦GÑMoæ 9zv4Ðr4y¿<+=ÿö£z’;‘#†pöå¼¼±¨áщîxÏN9­Š>]Œ«ÊCu™ÓŽ|-µ^µñŒõôžvà'n’ŸK½ê·HèKy1zQ±½ ÓÙwß¹œEå÷ýâÌr;/¨|ç¡Ì8¨| sï:£öÑÜ‘þ¦9Œ°Öêaׯ¨­´“‹œO­ë*”g¿¥¦ðÌ1%{<|ô$1à(¤¤•Âߤ_ç'óÀ8 ·N§2›Øš„M‰}IâÔ9•|µsGü)„¾«¾ËjÇðåíý1×o×}î}Œ>¾œý½¨¥BöSXž]~˜V Ém*ëÆwôƒB5²"a»·zÔŽ®u‘†r®«S+¹:%¬+§PFçe-çŠÓÇ—þÆ £XÁét,ÝmÌèª[°*-ˆgSˆ7÷·)Û“ù Ý`í*²Gb5°9$ñ®Þý$´ÝèéÆÚ„ÖssŒñ<Ïä"BO žNè}r-³ß”ƒkÕç¡É·®FïAz+Kƨ>ŠUdÓâ6 dÌ…é¯É_âÆ|{ŸÌ˜a5/'eÁÞõ¨×¸çQ×ÇœJ®<¤iïÌ+ŵ¦j)âÚ;`Wû2«Ÿ6r¯å±™/éà¹DfŠ[¬)!û~S½æèÎ5yT¸BR´Õ–ÝæbG€«ó&voDñ4»þ`WŠu€ÃFòã ¤ŠR^­X“~3ö g`R­µÐæ•i?­f8]µ1ÏÁŸT‘‹qh€±øÐv\Ƨô^KÖ¯Îñ±#8Kd3´Ÿb8*†± ´¤zKüšÃÔ¦*MÖrÄ—UG’VBå#s3FµâÏÓXÏ1EgêûÅ‚u—௰ÛZ2ñ¯Gáú"­ŽÖN8¾ÜY =»¨CE®DÝ¥Ì)9þuFu·ŸoÂ)¾bN%J½zH­<ìwŒ„Ãwq6çÂjTBÅ,~Ë÷¥¥ßCŽ>˜ŸùoÅ5H¹N® ÍåŽGá6‡(¥´uZ}ÇtÝíø5®SGFöÅoê h7#[ªÌF>¡9\µCoδâì,òTè!ý)s•u*³yçVHºÕióÙ!ƒþ/+2©—+߯Ž,…­‘¨Ë«ù>5¡T^ÁåîôŠq=bÒ¼™¢®±w6ücSýa¹ÇÇæÃGVöÕH®Jwî¨É«Uù³v/eœÃzvòª'i­1Öì슺]x]¾iõådc4s³UÞV÷ÉÅÍÑ!ê|½zý"ñ®\;N"ÂþÌÓ*Úé!îåyÏìÂ7›b9c¡ò£¶nåbX'ôgè_uBT •.©r"¾Ô3âÂ]‚Kœ»~ãð>ŒÙ {bÆPæu”÷ñyŸçš¨…;|©^|X)eE ßÀ¬\ƒ9AóéÆ/úrݘÁ›*õSú•ó|ù“»k…Úâ7ôgí¾+c‡VY E¯«»…Y»¢VŽ ½èÞ5ŒòQ2Ž·ùtg^qÙ…Ž¡ÿG¬y=¾ÍÉ_v­ÜûkGéh<oaU¢ôÛ\±ú]ßÕq½)Cî’’ÊŠôóRu£r~¡ igbf{>'S/ýË<”l@¾:ŸM4¼3£Ö…¯ûñ¾žŸsYS3ˆC­ŒøW]h/¬tv.¹B •ŠJ6k2PZýãÌô7î´?‹zN‹¼CÞ˜ nb=×KS€ß©IÄr°Rïª ô<•µ¾PªQ#+w†Çâ|Q±žäÉÐjcŽ kð{½ê¦•Ü.=%wÎÒe{Q~œŽø^t£ÙÉ࡞ª¼è1É—®^Õc‘y²?An6G¥ÆRS¹£^ìÈñý8áéP^ïM ò*W¯Ñ3Ø-™Ï¤¾ò-ÿÔ¬¤WòsDjê‰ĺýX¿Òá(ê")¦l«ƒ¤¬=ùZ½ðn¤¹uK¥RÞö ÷]™¯5± ù!²Rë®H¿Í“Ê‘ÜñorÊ“µhFOê䔘«‰¦„Yë%ja)+TbÜÝâö÷ÉËÊ‹þ£§XDþÜÙwEÿxÑiùèüX~‚ Κâwäâv#¬—þBeãNj¼8Í-F¥ÃˆêÍ„ì ÷:ZøáÉÅm'RU5^ ùTµÎ)Ýá^TKz²ÿ§c¾3C~ÿíâöt)•ÁûŠÛèK½—¬ÌÝÅÖt]þ’ÜØÕTÕì˜ê íÕFÚTùÆ _ø§úÚ óCztQ½–³œÑ¿5Ôsv@‡·'÷$=§Üu^ŽfoàÃÄØK˜ûßì.{] ¹¿oò¦âN² [­ŽÊМò«œ,–õ;bN}7w¾êÕh“¼\?Ó>Æ£†Çåcò}dM/-ö,?j³ñ“ò%y72¯SaºªøG~7_ž.a'To¤Æ³Žº2Ú@ÙSÛ†±­ñŠÜª–ÆÓX÷šÂƒÇ#)}87°& L#éÿÉÉ\þ:_™©¥“Å|‚œÛ¡ìñª¡6y=ÜLýXópò&ÖèÂ6Úµ v¨Zmu‚ºXéÐ;‘³¢6۽ų8ÿ9½A}õTp»”¬ß+ÅUùöükö©˜3žGçøCÌ~»zRùÒ܃la/¾kD%ghû•Ô°2ÂqA`B: w[ðz2•úÑÅ£é|vj4!Gñ&ùâƒÈú-'×6$=Kæôm ^X,¦oýþâ>ꃽӳÅÿ¤áä~cÅFê[íŠtìˆ:^K­–¢Õ.'é½ g¨¹Ë}x{¨x'Ã%•åÐð²Ão¤…Ì·ˆê§d5>g?Ï`â_Ô{Z¦¬ºßÕÂ8¶<6»3:§Ò©Ç§ýT‚…¼;'–ás—ßQKIMðßi#8lDþk=ñç óÄòÛÅpï0²7oÒAŸRcêmË{À.çÛT •¦æ4[ô9”O½×ªFVnä£&èÎÓáø¶h·ËF5½ÉT_KŸÀ|j6?@Á§©áü‚lØTíV°Ž¶¬äömÉãÊSÁÅ/S_$uX…Oô’¤ªž«ú-rÆžèé«%„ Îi)cØÝq wftO¿)7Õ2ú¨·#£øN±8ÝÃÝ{—ýÿ}:ŸAQn¦Ò‰äáÅ­e¯×Ø™°u]{1¾uAOþÑWgèSªo›C#áŸåd»¦!#Ý8—æaª£®‹v¸5íTÖ+-·#·ù#yÀf¬ãOÔb>cnwIœ›"-3¹ÓÿÁ¢&’;å)uŸ>uæ=_s-rôd¾±#Ýñ³9c¶.²Y[ÖÆóÊýÉ ?ÎÉãÐ÷ævìÈÔ\º¤µT*N,Ÿ¢°†3»#£'?­Yu¯}x@Ö®Œácws`[žjŒ>9]r&{Wo¦’²¤Ø9¿Þ¾`ÜÏÐês/rmyzyL®¥vä];[è‹8³|_âì4!¢A%êŸiYm£¾¢>Ð7ÕßS5dÎi`fdñ#•›j«_0û6¸¥Ùø/Ç>œ.|9ëiÐt9ø/‹1y UÙ%ÔCÏåÐ錳7ž™< "‡f-´\ޝ¿¯N°r¥µÓO2ªT7KÕß!atޤ5ey7•¹ã©S5û2ÿtªe/äMœÆÖ¿,+9Üí©üd:'¶RíiTóó4¢¶ul=]qùvý>1jÜ)NÕ‰y®ý<Îm ÿ’½½ð dàq {—½uÏ£^LÍéú-ñpÂéÑõÀr&S½…*­·qvAÂ#R‰CùF_ËZGDsæ~´éršqV+8Àu¢‰¸-vg‰n¡’ý•ßÔ꟤6ø]qAþ%¼´œŸÐD‹ -fÇñ!© +÷´ÈEÈCJ½§Æ;ºs·«ÌêQ›¥ü+úÖáËá•fpÒ«T¨£jötÑ•úÑÍéżG^Vô¥Æô$úbPnå¶ó•Heg*t»0†þXDxááT÷É«úÞFÛz™êE½ázpÑnèÀFT={sÚí/¨±. ‚t7Ún·<‡ù‡à=|_¬…¶› ¤§¸>ÃÚGB´GãgëˆQùÄHG›©O­_¤Ž23>ZèAs•ÞäÔ’ÿ± j#Vj\z±hRÎc·åLjÛ»çv蟖ìn»'M-¿ã¬Ø‹©@?Íøž‚pwŸá‹É¥úJ‹q¶>˜’*çFN\o7dðs2’*ÅkÑBÏÒãAg@ù"'îŽËÊ%¹9{:êÃ;[ŠëÊ!é ê¯=R7x¢ ~ÔPÆP꥜ƒy)­‰zÈùü‘›Å³ü­7j†¡ þPw 5‡å.臋›ØAØ,üÞF é¤ôRÌ.È“8=úBúþÌ!µDœÍúÕ±ú±1²rïê͛轛kË»FMz½ñÈ5t$‹`å¬1Øú9ÖñBÎäž…??»¸,÷*)Ï/—áQo-ºÕü¼œZÎHî†lK­Ì³§õÖÕy‘o’¶Ñå!é•!›A7Jʼ¦diáÝëX~ëˆ^Û1^~Oíxg¿}À9¥çÒ±ŽÞ¢9eÓš^ÙûZâµM«Œ*ÕÂfÖ²‚ÌxúwúñJŒú×Z„Êg-£›µSÊEÒ2,¸¡a`¥öo\áM -ñêì¾uEæNœS¹ÇhÆafŒ"Ç«FOÁÈ/r©Jªpªû¥¼w¨Å>sOŽ«éOôÛƒQäwo邨Iª,{Öä~ä:¢ _ edõÔ~öª‡—-¯¿™ÏÖã–oÕÉqª‘ÚÊ™fÀQáYÉf•ÃÈäôª`(ô‹ÜhfÄ¿]5Ž¡|J;ý{5®|ïøÈù}Gj¨)Í5¢f</²'#Ïi•Ì koh©l[Ÿ•'œ[^4rC\…Ü,nÍó‰óÀ§úW(ý„²bUÓ¨Ûoi<ýgOb¯±9£±Sø_{ï€3©ÍÄ¢£˜³0÷§gºM¾ut¹IͨÌ(µ¹òMkIÆFÎ% ÌÄg>k–Bþ~óâXmmy/õ§ßUN£B¡^òôdu‚óèñºFåÒ˜Ñ_eÇjƒ0ú ¹Ø×\µ^ŽzÈ2òMí›&ṁæ6G,­ä¾ê9…ÊFäŽä\¿×h„O-™È.éoé‡Öà&ùPŽˆõ…QŸF¾F¹S…3VýwÊ‹þ‚” ÑsBœ;t¢|$äò€ÑV5Ÿ%×DÕ_®17*÷¹Z©+Þô|ô¯µŸjs~F‡bÜ=5ê`q#ŽÌĆU·RTòš··(—‘p\ó὚ÿu+Ÿq%Žïó}¢È÷…Žvq'¿D.ÉUJŸéE©‘GªûŽ8Ñòŧ„H~ñóòŽSgû­à,a1.s|¿%•Ǩ™Ò¨´„Vz•h5›ŸRnƒ \£)QB%O¸g5‡àÂ/ßæjªzÝ•WªÂ“§õ&”1¹ÎU;—?©Ï¥T¬X=ïùÜ™"ªWI3ÇwNiè8Æ,RQ-¯T„þó°:æ²äå\ªëãóƱ;É\£¸ú¨I ±t äâAœ‰ÇK¡ó„-,Lð¸Z])lŠ'¨6’å¡t-ÁÃÂúC Š ¹GŠ µvÜ9Ë<±ÓÔrþü¯5g¥îÕÒøLÎÏÜUKm!!ãB«^Îs%r¢±ƒ¸ï*…‘£‡bWÁŽ {;—º–ÌèéBý*Þ–T(ÔXÁ}~ÒWœ]jÉ{U<Ä«úšŽÒR•?#=´„fþ¬ê„^íŠ õÖ¿þDŠ»à‡ê'…žÖ .CB^¦yxa'æå[i6ÇXEêø™øœ<¼5€^Õ+ñS»Zúòº6Ûj«‘B¬UïPÉVg¨#d jZÑàgsRaÇùJ¹8´Pð¬HùÕ¼ŽÑ‡QB3 f+'æk¥™ã)5ÚïóKþ»ÊJh>=?éªÅ’’á©ÙSh4Ú±¨PN8â&¤®¼î.ÂþxH£+øÐ†‰'!TGøÚ*¬©ò!„SùT·¸ýu™þ•²¤÷Þ¹’èÊ\yÕ»ðZ"-µD0Æ1VÌö$ÖÔ#5û¯&qdç‘ºŽ¬ÄÈÇÊŠzHíà»R%dF¬Ä åÇäÐöÄ£«-¡ßÉE—Ô‹üã²ã˜ÛÜÁ`x«ŸŒ¾Ü$©©ôb#íž½°JIØ+9 "8W¹×ˆ_ÿ‚ïÚˆúÝèm•éV%çx Ùë½€µ+餽+Fÿ®£ZÇWZ®ð{„Y¾uEáýHñÐFbÇÝsS‰˜@Ë6@µU‡Üu\Ó7äáì»ØFFÑÓÅíÎîýNìk.çôGX…F< §²£æ ›ìªÄ«ßSó·¶À_/0éÝÎ óyù&â¿¥óÓ"îÚ¹œs†iO8ÉûfíÔ*eN)Õד«„:xÅx%ä·Êå¡9â[­€×ÛíZ“s¼Šx÷È4Šóá—æ6eSÎT—ö漸ý`8st·;3{UߪAõžÂRž´Ä‘òàî°#®P®R÷býõá‘®ÀöCN=ð[îi;û—= é 2WæÚ|&ìöL %ú2‡¨|+WêC*³úäa "?¤F—êÊ¢ñŽr#W$ókÝÎdÀ¿MBÁ¦d2‘ÿlÔUüΦwt>=Îõˆ@{AË.d·ÍËùÒI«õ36’¾¦¬„Ýò3>Ö Óò<¨=8³F}ö<½”ÖæË·óëä½öÈKÉÀÝÇ^¤Ñä¯kóXN¿{šïôcΨ¨k—"–‡Æ‚îFÕò…|†^”³|_œk“Ûc·Ü9SËÉ[÷‘}ê˜þTžÅ®áéë\7”î¥ù 'ôl—º”{s6ÒU|Ç:ö$~•Ë€Àþ¥E©Q_è÷ÉCb@½¤—%W‹‰pÏ•kv';»œüé ÅSåNÙTž,¢ò±j¦?v72ä×púI-õÏS §{+pXAåTˤ~÷×8[تþ‰ò¢Tß7Æ*ïOPqEö7’UüŒ}ŠãÈÇ|Æã÷Ùuö)•œ“Èà¾LûãÅ[Å;yoÎrQŽ÷An¤œ^’s„v°?A:[PG8—™j«xMÈ yÛLä2—ß’?ü’];W_F~ê3´Á‹ÅëÔ“>¤j¶œÚÇhˆ¨ÒíM¦`Ùí£©Víµ‡B«&PÇë É¥AMý!µ—= îMëPüŒ~_N0ÙD•ìIª ë˜a‡43ŸE†q)ûU¦­éÈþœìì{’¾õ¦.x/žƒ®tèw‡]‹fTdNNéP¢Ì¸ÈqÓñ@† CNÍèCï˜ë§gÈI­.zQsý±ÈäÜ>$ÿµŽŸÕPø“\¹ƒ½ü2ïE'Áph:)³BJ*±Î¢î“žú§ê`å6¸HýÞÌžŽã¾¢#k^çìŸ+8ßìutÑUT\>g‡Ìçd©ß„s–“õ\ÆÃQurÝòfj¤¿³×x/"pñœdV-ò&Î.fÅvhY¥ó(ª2½á–—Ý7Svfݧœßyy¡L5} Pkùž½#'ÀM«‹û©®w§Š5œ|‚ŒCRƒgWOW¤j³õtµC†¥¦Þˆ+Ý[y^>0}Fö¬²O>!yÓ”;Ê×±#ëk0»¹XKfw3+ ê!_»zÏö ª“ü{+í f·+Q1¾¼Lnx :h5³h„Íé?åRöôèÛý¨]5 cÿhÙ›3G¿ÊÂïCá]û°«q»Yc%sãÚ¹U¯ÁÌù|~2žköÕÖ˽ áô¼ø^æd°%d¥¿)ΣÎY§œÊ~ÌÕÅJð½…zǸ›3Sq}6ý‘úcäÊðp•1kÞV»"VÕ~UßÖO6¡æêÎÚÅÅ%yrɉYœA¶ž½:gç¿äé=¹”Œñ5y¯F&yk±7·TÍËûpsÙÙymÒ{ê|;‹£j;…C,«oc‡š'<ÁÈv5¡n°OÅ»{œ»‡ÎL5y2û hÆçÎTn¥§òùò<·¬%gü ²3È—/Cóþš=göFô‚6QË6‚*µtuNõPx}F*ò—¶sêí Š£ó¯ÈK羌§¨…žB.|1Õ¤Ùô@<Ï®’Ï©×ïŠ|\€ß0ŸÝ—§¿1Z-ž¢»NIäU)V;ôúÁØ#pª¤ê%¶¥;Á¸oDñ+ö®í”ûçWÙt/§è}@÷ÅúbN^œ¾ÅÞtFGšŸ¡:9²¼3?‘v3qÏþ›×ÇUµfux¬ýJ㵪7wáªÎÇ~¶ƒ^à,ÈoÓmìÃY_4-Ò 1›ÖÅHÈ8tÑFö„¿Nuw%ç^¾Êþ§{Sk¼¢¾ì0¯«ÎÓF7ÉÃÚõ­Ê¿j ¹)¼àŽÔ\û07Ñ-˜Ü…Q›¥Ÿ¨Ø=WlÌ÷#èŠøþý'w}Y´fçNhùÇ4H<=wÆ2;èøQx]ÆŸaáìÕUrõ‹¤§ÞaC8w[`'Fâs­F âœ.Î֥ߤUZšI—¤ÊÏÊmù( >"}Í>A÷uDNzVx&ü®ˆ ´ØÖ;Ìkê‰×ÐQÁG_4ƒ¦Ãøœ§ŽEéH·ËòÒ[µº”GÕ´//ÇrÏÊ?ËÿÊ;—¥kÙ‰Þ£2ã4Šˆ².ÎÄœ\£7&n£æ+IGWàÜâß\j'*Š}ùާ¶ÏFû¾—®.· !ö¢n߹܊ú]XÖ-” Áô@i‡ËŸùž9hcæÀ¨'û £°IO5„눘T\Êiæ#czWrÿúl]Ø£{`êYY>B?XÛòÅüë<µÜ¾¦u9Œ[‰ïâä9ë^Øÿ±WO‡Bª–óQÀžã‡WúØW­ôhó¦Â¿QwoA¯ÐT8ŸÉ×§ùeôÜÁåÂ4ƒáW§ó™Ñ]&}ñ.ÜÕúTi7ûñ„¾‚y0¡4s£.”ÊâBßU¨7ü´;3Õ&rVöµmæ<ƒuhÞNT°Žâôˆ}’ý„öR䓞;b—¨´R÷„Ý ­®„8g@/~õÂÄxð•|n)ÅG‹¸c&,íCìỞ´#è ËéfæÒw5Ò‚ Óߪúsj1'gª „DÝã{aÏ}äoxIêJŸÛ[8¨²&+“íˆ ½ù±FæÚ:"ÉC™Q¾ñFZ=y¿³ªï[¾…5tì“#zGʉßt…î*¶B¨n´ `Ü,F"öh ¿NäU;œõ(•6yÆÏI-åEÒf‹á pø„í+ÚAoM+®ô|¡Þû4î•ë¥|ì­ ¿¿0Gÿ¸nWbíÒy#Æv~ç“~ÚìÀ„Ÿ‹9~y¶j ìáví`'h6úY¡•¶®ß=vö! ±ø‡Îà:õ9į£)3rz¨š¿•o]¡ôX…ßê·rÞñû ýø;Ÿ^<òl]oH“#Ô>Ž U&íûA[±%ߊoy3òU¹”àßÈþ©¿b^×^,köƒ«&1kŸ î„Æ„+* ú—R.´œ#Åœ¡Ì iw‚g?«kî*èéiÒr‚8v9LÉY°¾êZÂ’ˆWáwŽägå&±j½L¹tþµ:,vƒ‡ã5_—Êò@H¯¹>Ç–CcÁãê_ úèmÈ=ʪšÖ•;¢|ë8â ²‹J‰üº>rßQyr¬ð±„Nzû¨ªÔ iV9G®RÏG ½<’ï;¾z8¬‹¥k’+B’å_éy¬ ›ôsuGŒG~Æo«·C’cNkSñ)± CïF_©Ù2õ{ôµZt6©dNḀ̂䫪̫½Å»”ˆ(E]…¯FüéëaÇä2ñ§,ºjWâ ¬‰cã¿YÝÐBzU¡û\›±òäØ~ßHH*J+G ýgÌ+ýB"BsÏùªø š‰+5Žï™=Œ}XÀൡúTú™c¼âÍXÞUDü)‡ª…üQ»úi?yùÈ\)Ý¡Bº•|ñì¨Â`ì< ì;GÐÛ¤CäDäiñŠ>¼ïÄØBîûâ3t \}»ÂyeW”Õ¿Sg¹Ö𤉔8\CèVÿ:gð“½-bþ¿µ'×òék¡³…,ð:É”qžyhy@ú,Z8}ziâœÒØwÕyá5‰3g”žÁõ¡“å_·aO¤®ZÕ¼Ÿ#>¶æ&¢ÿV¬©ÃµÙ±×«~1jžA­­E np aPn¢¢äþ5¦¶0bêèúP;Å:ÔâWé&ŽÔ Áƒ>veâÛU8ºœñ“œãìâßš†[F4Bk}ÝZ‰«~)«7'.O,Í"×¥?äørwH±\P­Ù;«+qÅÚgO–ëC–`,ž`|mo1ÿöbUi”må@H]‰šÀŒ˜¸ ®‹xÅY­'«¤ªü$>/lþ6Árí@Äî ;’éïkåA¯V½½Br‡¹ÓÈ]¡]œ)b{©<+dʈ”»òEäÍô\{`1‡ À[p·à@fÐÛÓ¯u.ñ+}ü+øH[ëœ>ÓÒMzú\,„MõUá ªˆkM€®žkÜ©eìh=i"þ§ºPʉe4xB_8°šO>’g\‡ù!9ªêikE„3,¤úÃÓÍþu¾|ÒÓÏ¥¯¬6`Ûꕼu±çcGUBba—\°…ß'—‰qרlÉùBêjåP3ûžpaO¤\Û »ëÌ*ó0Ö2²ò9kƒÒCýž¬&O†V›j¹ìŠZZì|Ókp­ò’ÖL ï9nÞçŽwÏ…·‚SËk>kŽÏÛ“ØÂÎÎ&P\[Ï_žUý x|5¢Au‚ðEÎÓϪé|æ·”V¥d™ç~p©§º{ÏšRßʜ֙­œ äuÔF+ΦnPÛˆ¹ª7ñJhËÀ‰>LØ(kGV^Ç;|F ÃÙ7s-c¥g{>QŸ°ºOq,³šÁw—™­Ø§/f•=q«nV‡…o"ͨŸDSÄ€lm‰TjÁ^=²«5éuºÞŽ'Cq {¢¦£Ðx¯ÔXÁ»#LUÕr|P©ã}Å×ôQ¬0+3Ê´º%¸GÓ‚“¨çýÒÇôžÎ¤“{ ²÷s2ÏãT_Ü ? Ó¡¬F‡-’°ü¡ub?’PÏh-Å„k¬RÃhÁýzmsS1%_V^˜ßÉ SWöœ‘_£“±&?DnÐìÕipp_Vª½+®ÔI'%S+'œÊŠ8—j)9\] œ¾æž›!`JxO朣‚;`:RïxŽ;&þ‡*ÖxnÕù_Î…•vÃÝÐÃý˜]Î:qä¹|¦ÍRÕQÎÞjt±ÈarÚÕwF‰õa´ó‹:© Û‹É•üPìKð2F_åkó6ÎCú‚ÌøT Åß¾Ì)UÄià/p*DÚu¼XwÖj<"öů¡Máן‘t¢ŸöÀôDÞ£üˆÓVÓ+ÿ§ ½ÈýO5d«îͧ–ë2÷,0×txÚlBì§‹u‡õͤéœañäY×bÄçzäëžhTïÙ…<ÍKÜpUyIÙ“ÌÞ ìðºˆnù¹ÅqúYJKyáM-EF’Äç秸4ý–¬ÐIäܹŠó2ö—}•ÇPWyºÎ8úWÌ9X3’T ©ñ¿¾¹3n•=¹×HF;¡õwÿß!díŒ/{sªå†bÇtlù=•ˆ;Èî=’§±kUœÖÙÛ×…ÖMÈ¢vg¾ÉwD_©QsÈ@ø\zRò­Ò/¢ÊafÎO©7›`—g0ç9œÛ÷³ryÔZÎ>|‰™ ;´ü'½ëóŠ81ñåbaîÜ“éaøµ³AÞðü:g hÄoð­¸W" ‚Û”S»<³ÒW¸±æŸåïÈîo&3ÓŽ“Ò3ß!?Lðó¢Ezƒ½ŠG–[Ñ…‡”›9ws pž‹t©õSY—Ž­nSùßwõ*”ñ/ýw¤/aô<›ÛÊnÌ{æO¸éä2²l{³ó«âÀ|JZÌz^#—ûÎWÈý«|“:éÉØ—“éÀ k½>úUʇ¯iWÔrúÎõHg­ƒ·¡¥®z]ÚœO¥æ¸ŠóãŽ'ß¿™ªd‘8‡ŒýpÖäay5õî‹eTõ;Pþ8‘=fqRGÜ{g—¥ZHÛfþÖÿq:’ó6C³Ù™1óÿu'К•Õ™€ÿsν%CŠ©˜ª¨ª¨¢Š©(JæQQAJTAE† bPÁ¡5ˆˆ1Ž‹DÇ€é8ÆHTbÑh«ìnŒAÑ,YÚ*¢vÛ‰mú}îÛÿrÝuïý‡s¾ýí½ß=|ûN¤·||ÂôÀ´zá é¸ñþÌ@|!³“÷Í/N•~мÍÜžã[Ç÷L—äl¿ŸéG æïEûéøÃÚ šµEõòÓÉŸdßµ4µ-38ŽŸ={wªá_œ^5}zv÷x×´÷tXv³¼!4ìH}cf—/œÞ1›ýÇÃÁ^¡i¥¼<_Ö¦¨ÌÛu~E¡ò¯øÚ¬ OÞqpf7Þ7Ü;>s<'g÷ýÓìYíÿœz`žRùýaÈüÑ[† L×e¥BžJ•S ??µ6?Oc[¥IºætJnX¬ÿ<†ø§%^ûIÎÜnZ?<1» öŽg]´2uðÇOëòþ›™UúAìçþÌm_6]1þõð´pxp|׺´%ë µúˆúY~•ZÿnlêŠ-ÑæÚXçWó4¨û†³#Éë†Uãæé2»ºûpÓô…Ã&Ï»#UÜŸÍŽŒoxÎôÔìDøãáÜàosPd¥´@¤uÁÍ‚è³s‘¥£_úÄî;44/ÊÓèÞ47½%«Nþ6L'g>åúá©Ó¯²Ûë[Ó3²WïÙÕ÷µé)¹bìc<$4VÅõ´ºÊNõÁh‡…à“u.æ*Y¥5ü’9˜K3e]ÙéÃ_çôÊßÏ™¾NŽ¿ŒŽ¿•§úýl¼7YÑÿž“=vÿ6})Ô®>~-­-Ot°+—>ÅgZD›üÐä{×»‚•·àûv ‡‹^ö‹fÎÉ<Òòé!™ýåì³ã!Ù³òòìKº=óÈ? ýµÓƒÃ%Ó½³ïÆZž4ü~î\¯ya¸åoÈréM»õChª’c»‰N^Ÿ`&ö_g‡ggצÌ8>|ç´N¾ýËá‹9©ô™­û¿³åÓÊìI_›¹ÖÿÈl¯Õ&“§œµDMÔ(¯xDŸ¼Ž_T½b¹b \’_û§wë³îàÏ3—½Ãð²hs>™•Ⱦ÷7 wä´¹—M¥¾4«{Þ™¬BÅæÑ±N¶G~¤‡–‰®yAY‘Xf ËV*³OÜBÂùÉê~/ü~xöªÌ½~xúð¸]v<ýÅøôñÇɉ>¸pöÂ2gxM¾}Rz¾W¬º§½‘˜ :ãÙ,›O¨DQ¥D&¯G²\«²·eÌ©ö¸)gnÞ<œ?î0ÝçhÝ9}gú“ÐüÓñÄ…WNžþ-ûëþ9(÷ôÇg¨û©´ØÜ5–CŽâŠÿxö#‚‹è²n9Ëvñ—ÄN;Rºq¶s2®ƒCéÞéyRîuÃo†'M§L7e÷dÎÙ ÞœvEò š!»Ž®å{¤ÉŠŸìu®ÑŽÄHCM”ÑŸƒƒB{xSã#>îöœîŸ<\Ÿüàžñ¢ñôáUу“Î×&·81íw<Ô?D¾ôkÔKŸò•’ŽŒei¢uÞ˜³I4vŽzÍpkæ­¿ü{VÝ îÙ™œÍzz­j×X«ôå–úÝ\Jq ]NáRiší|>!ÑMÞb[ò¼ÿ«—»?9QÏùÇüäq±Kº¬•óÜ­UáŠlÅhc^h%w­“´þѸ>á«#RÏui–ξ÷ýlMÙ³ÌÝn»#ƒòýòI9”§¶õ•w­[ï«à ê;†hÆQmOÉ©±?–döΘV¥ËЬ­Él =9Ï udÉw—žìD çoùþŽŒx~Xå•ï-Öå‹rÑCÏ©¶ö ¶úJæ(=ßö°|çŒ'¾‘¬¿?°~sv<^ð·EW¥iEþ£àNw |c7ÚbŒ921¯±¢vm˜¾ahXú¬Ï@Z–`zaFÁÓ’¡¶–d~˧µ9ý&Óe¹j'j[AñT%縨B«E©qóQzÝþ“m[" r*ŽàÓ,Î$Ì÷ªËVÛŸ1Ç?Mоxhä¬E’!y㟅¨Î«6s$-Þ‡pÃÇY©§ÝybÖSœ™Ëžz¥ì]?Å4Ü ÎåA[ïáMWèUç?}Ûù[ ÑlµÓ)1eßÁ²ñHÇÙ=Ò„4h x8¾Å>µ…¼n$²ÚÐYWêîC~a &ô©{æœçãÞ–òh5f×®ˆÊ¢è‡ôøž:õQF\.ÌE”_¼hÙ™yN\eû›–ZZÄKÀˆÏ~Zg´-.yYôy9ú&?¾ ­öGݶøȤ˜1;(“Â#½ °Oþo¾ìaä ius>3b‡’y¤]ÍiŠÈÉáÌóÔh½>uy¼6k)Í PuMe+>Û±¼j‰÷Ý£}C}MZõ|Ÿ‰Ývž{‚&:yÍÏi´2äup¦žÀrpm]ýŸ<‚lïbîOñéõÜFôC¦V«öùžñ¬gE¶kÂÇÕ³§Œ×N—OoÌ\ä׆3³â÷糌¯Í9‰oÏLÖQ‘é±EXkÆáÛê8qªL\©”¡¦ç¥Ùü$¯N•dËNvÈþ²;¦7N·f¦êÁõ 9³ô ÓÙ7òíÌÐí35oœþ!óHwÏŽ™ŽHÕíÔ<çá¬Á™­{äžÍ‘ªL‘‡wR ß-«D“l‹•ŽÍàË YŒÜA%hKtÏšSÿß2}c8v×{~Äž…×%ž¬ÍœãáÓëÆ§g6ãÇ©ö}&•ñ»òô¶²Çë«Ã÷³‚üÌ[}}Ø[=#-mJ}ûÁ]íQü’óuç=¾É–>ùäfª¥­.±6{ªd!»d…ÿ]ãU©ž~m\¿<Ý™çÈ^¯Sÿæì¯²ƒå×ÃíÓNŸÿ%^kU|þ£³ªnxx½wºƒ± ïOýñ©ž@°u;vÙçÔŸx´ýãÍoË.Ì£²“d˜v]Ø3û†]~:î’³´>•§†ÿþð‘áÓ¦gM?Ìé©{§¯Öæ>-}Ù:×Y/Èr››°Wž‡´ ÛbÈ©©Û'ýð`ó3YïÿíÌæÜ•¹•½2cvÿì’ôâµ9'põ¸óÂ˧5Ó+§¿?5þ6w«¦ïŸÓ€ù4­æSZ…){IäÓâ‡,´£0ÚÝ×D/Wçû3gÿ+gÏž1‘=‘÷eÞja<úÁ°÷øÖq}ô»]æ%¿3ÛexÙp_f›® —ž¾x|ê¼5ïÓ•5ê FPrj¹šq˜H#ªödÙ×ks~ÚêxÜÝg/ÊY÷ Wg_ÃDzGp·ìýú›éä…K¦ßf^ð{9Ùî{ÃÙÙ=sAÎ1~'OöÚaúõìÎáæØÿ.ÃQÓ³27¹~øÅô¾é£Ï“s¥lûÄÙ›CeUZ‘7Šß¢3ùñJæx\×Êi{N¹˜#¢­ŽïtÊïr×lïñ½Ã™mýÍì‘ÃÚœš÷¹Ù{ò´›}2£ô¤é°œ/|dìD6´nö¢ô•UÔoÙï›Öä´g\ÖÌ[þÂçñ<¥l§Hè¡ìÓY«ôöá[ãmÓ²*àøÌ=¼zvÌøGã™QþIÖ}#±L5yßhò¦\§þʼ¼’Ç{%ï“A°\EÕØ—neðFwçÇJÉ;5øsgÿ2¼fœe_ôe _2{ütütÍtÕÂæDU£§¢žœ“å§¢!ÿê©°ÍŠèË.^õ>ñˬ³+ä`^É¿ô†í^ý4wOOÍy­/ÌC¶¯Èy Í›/ ÎÌ®Øíqnæ‘ê½y7YÌ šSc³ý'{µ$Y'„5"è…Ù§&Š®NåŸÛÇ~¶åTƒÆ[ãU_<2<6Öh¯Õ†d~×Ç‹˜ß%%Þ–ïéÊž÷bY«&ñ ¡Š>àM6ÆâÎ ¯í ä<…œóûùÌ‹=*‡VDó›â×Ï ¿ìÅZnÕ)#¾@^§N畸‚¾q¡ÖÅj”œop윢½/KÌM-„ggÆv /oûFêg䯙¶ý×+ѶzÏçë0ø(œ’4ÕÇ;ÁžUÕ ï˜Xl• ø,µ,y·ÌyYèŸOyF®{Y]Ç"¢§>Õª›¡iˆšÃü‡Œ}QƼ‹ªØñ÷§D.ƹ4­6ÁìLüØŒcŒ1E0÷A .Д Òz [áíñ<¯U‘ +Ń«ŒÚõAw^އd¼{¼éòä´ƒ¥ÓòÚ0&ÇS‚ÇÚ„<–’™<.µ>å.’íh¸ã*8¶G„m«,jc§¼?%ØuþòØÎæð~`ZÀ‡ H$Ö^« «îk~kNǘޙü¢§>jŸÝÈünO“`Ãúfßð·6t@$ª66Ç:ܰR¥E´’‰ÉNä&07¹%yÚ­ÎÿòG>÷Cªj^…‹è©Z‹'vÅ{yO’c®‘í°šc'ÆOú ®@q+нi ©¨×áO;| àRëóš„ê LÓ˜*ú¬;|¦}ù(~ùŽa‰‚‘´±ƒz/MOy5ÏþhìጬÐ5§†÷VÑ›ë ©Ò£ëZÁgŸÕ)Žd˜ÐÈ‚¼—'4nº“–Œð¡M/ý§=­5.à‚‚Q‘µò&,×ëêÝ™uúGÂPF¤\<ï•\ýÄÔ¬­Ì=.=±¾F6ˆ¢^‘¸LKT$Qråßh–•‹Uò>1•q=œx¥ÿêdéð^½wÖ_Ÿ,Ó¬•Qß³Ó6>[£…v¦÷b éAj|L3d1›®x=Ñ Ñ™dz4úÖÉ|ž˜¶5­ÝG§dlë FY‡±ù³jÄ—zhÆnæ²­U‹eZô …úÒL¼8’Ð ÿáIZÎ*𠪕ÉÜí²ÕyÊEòIˆc!­Q°B-v}nº.•'«¼E<^‚ÅÓ‘2÷Hæ~ÈÒ }üÈoÍM¬KOœ¤·wh׎HÒoû òÚ†:¤O>‡ÎõM ½±¶Ð:?`GׯüZÆÛf;×¥7æÑXÒï¦\W‰²]6Ýj)¡¨Þ^èe2ŸÿÔrðÑ•5jÖØ¯ Z×ä3gùmYªêYéf†ÙÊÉs2R*öœŠÉëðìdNYü„iRÆÆyÅ¢zP]ë`ùÖڞɛrâ’s!VGŸSŸ98|ó8#Ëy¦Ô̆… –5ÎãÖØ€­øž%A[83s,›Bǹ¡·å ½›sï=9ÅëùÃ?ÆNáéÐØíé{1³Øx‡Šu\Ð"r4vˆÙ8Ã{#ˆwüº”ëÍ jã1K’½.'-Ë1Í©`7ÏΚíF£Ö…>!•º£Bäo××ÈÌ;ˆ0$,§IýãuÙ :ЃK§Û=,ã臅3Y[²ûáÇ™£{ëìáÙ÷õì<Åìªñ á»OÎ{ý’•:/Ÿ7ƒ©RÆ%ÜB©ø‰G8S¥b£Àši€=$’=;~À&ÿ‘jÛ½ã¦ñĬ“üøÅÌw|8{+¾™yžµÑê~¹îÚH¥5E6¥m`“¦ñÉCuLä×HÀÎÅèçä4«õ¡½*¼Ü—ýz[Æ ãŒg'M«ò,‰»³çãÐñðì9óä±'çygžî»Ôóz~Ö·ð©t«NíS˜n6_{×W=Ù7Ø8!Õ4«-ÞœY²³R!¿3ç¢Ý?l˾‘órÊÑû§—?Ξ„¿ ‡ÇŠnÌ_cüÁŽ(XOîm‘­yÙVàÆl2èƒý£R¯€ÇÕ³³sÒÑ»¦§e¦uõtÌô¢ÐÞ-§WœgÒ=&' >+<™æº z[ø ¡ÆBX©w’ ãS/ôÚ‹Vr]+V4NŸàŒÍm³íÆ¿ËLÜvÙŸóÙô`ίûAÎÉÚ!»x^1ž‘ýg¯É}›‚¶ÓS›Û°t·<¼+ÇØ߆šõ•0ëhÕž ­Nõ÷òÄSCõ€¬QÏœîø‚Ì ®Ë~È÷äü¬Ïät»;ƇN—¦ú÷­ÌQÊUÖ¥wžJSên¢f³2~wl¥l5*ßèUêkÛ²íÚø}ƒÈÇæ)xwŒçL·N‡¦B|øtÒxbvë¬Ï‰”ïÏ©só´”uƒùô“Âë£c­j´Z‚XšäÿÄyoÏwˆêü¾¨ÀVèâ´œ<ù°øÔuyÞ֟弨 ö[øÃ÷fäÙ{/ËŒä §û¦•Ó§ór.Øçƒ ³ègå¾'üÿ6ù®F:>‘GäoYé< 1¼Ñ~¯ØÉcCQ5x·ì|ǰrzÎpaž{u_öœ}6Ïdú͸m¸løÌ¸]æÒ׿‰,{D¶kRw=)=¥?íà%mã¸ãÏr-‘x‡.I<2þìšàa÷ì8Z–*ÿŸ Š…ÞŸ+—eçÎcdzb—ŸVM—g¯â#‘ðð`÷¤ènI’ͣɷñølnÅZ«aß‘‡Œè%‘ѶÈk·üý^ž‡t_æéŸþ.œY¸rº7VºÝxXžÇ÷òé Ùy¶b`ûö»ž–Ú1ÝÔ«Éå "¬ü†x¤Fl^Í—Ç\œ^®WfÛÓÇÏL_žî™ŽÊY`+£É_Î^3Ÿ'`ý0;‡nȼÃö™ëXoupò‰‡…f³obu¢hó»YZ븊ÿå:F€¦Ý¢Í›ƒûÕéûªäxÿ3œì½í:¾{\7^3Þ”•ïÍÞÞÃOq˼sä³*TŽT¶¦ßEg#1»QK‚9o@*Í4ù¬®p•¹_Nú­'<'OP;~ü\âɲ̮þ*óÎ_?;~e87s¼›ó¬+5^32çg•–p3$FŸ°"ã…>Ù¯ÛDGÑ¢ŠÏÌÌ×£ƒ\YóŠ<)î™Í~džÓxÿ´{"Ø{ÇGŒ_îÌžºS‡ƒÓ¢õbÇÇÏ?#׊ù"Fg¦P‡˜æC0 Á¢vGÏEÂëÜùäDΣr÷šøû[g¯.Êî óCó‚áÐüçáùÆ3¤Ödæ‹3‹äy³²^ÕØˆåÛYÌŠŸêÙ>$kÒÎ\šO+2¡ŸG©OÇY½~@šüÖ½ª¶eÄõ¾²`cÓzcc»ÍÑì¡¡ž(ïh2—cÕ÷_ºCfGn,[²o€÷ÊÍx¥’Ô&ÏÔ…Œ>ÔïZqó}k/¼Ô¦ÐZÒ|`ì‡áAÏ‹úy6If>éØ@ŒnLfT¤¢Å#¸Šÿ%_¢h0ãìs6m>¿k SÏ´R/Ë·Ê7Ѝ¥ÛâŸèÐ Tá”ôõ #%¼¢KR|YÇ|™@>`Ç(lîÝô¡ëT*Bi̼C5¥EÒ/b‹×êF{úÒù¡J‰ x¥îiÅIùíx“.õAÏhxîô•>›Ýw%Lw'ÀÜgµÎS‰“H¥¡òEVæIˆzÕʼ>²4²Æ¯Š.½Ð ¨¿%?Ü£ç{rmo]Ñ»¼òC†zÝþÃ_µ{xA«ãIíªÙ HQ?øÛòcnŒ´*a–ÄKtާó¤®Ozkϵj»EP¥©Çò} gÔ›‰Ô>½—·£=—M@"šîÐwŸµÇj>üUë÷>-4dztd[Ú“ö•^}ZŸ ïÍ3}[­iÉ~ªM6݈Άôc>KŠ&9éŸ,¤È©3´K[ôà.²í:ÖC¦íîëÃÐ,|WnkÏ´EÃE Šè–2ÄSývGž,QÌžóB~¨’ $¢M†0൞úï®â¶ëwç¯]EƒmM3°ªB¨%Ük›ÍÃË­ÝÉȪO=ë+*Mw°¤Ú l™ž6bdQ8Ç•ž8Šc1b°ö½ä‹Rí¥X†¡úáyVw>J­á.h‹8ú’SÏ?¯¯ª¿¨|]ae-Ç,HzeÚÔ«u+£ùVíIç­:7PÃð™;ôˆòaì r+mRq7‰A3MBšØA¢ôÙ]oîñºÚuµ|œ;ß«‡ø¬æç`Yl…œÑ‚ò96È E<¶ÖqÊrUvhÚ\olçsñ¼Øh|@“ÎØ“œ¥˜œîɺ–ç/j(™)QkOó‘m£ 7ôßÑĘ;é™®ø¡¹gcéE­ÿîn¤ÑÉwÌJÂúFd¦5|h×ÝúƇÁœžâHk°©M}bŸ¾%/8Ó‚kyÒj³9ľ¡é3ïÐ™ÓÆ9¾ 2ç´x™z([“Ù*-í—ÁÂ\ŠÎuYÝ;3˺=ÞG…¶ßÒÛF½–Ü Ú®«÷ö­¾“*¾Ø}’PG‚zQ (|gí¯ªÿÊd\ÖƒkMÙøÃÚkqѬ„ž¨¿IÓG½bµZÌ‘‹uRôÑQ}½mð?Ú…`9å>¡IFÈìÓ(†ãt][Ÿå{ßÈZ ‡6ÑÃ…–ÑäK4‰"=¬Ð¨W$ƒ’3™UÁ½¶rÐj>;œðÆ&ê¡ZùÀïòÈF[¬“EÈ8ôÜø>©´‹\ópaŽDŸ¾ìjS%Û˜ìÝ wæ!Öäñˆ4yÔb¶TIT¯å2 QGªP™g3|]#±«Ø»ñ Ù´*¼Q¡3 ×eܰ>ßcÓD©D˜‘j ©×€1šÕ.nŒ‹íÓH«ýVÍpB¾~7¤BqMÖÜ¿2Õ—fì·viäݬ‘Ýš…­¿Ä|)Mñ‰Íø>vÃPšéµL̪\5ä­ ýiª6Ͻ{ö²TÎMõÉùÐ ù {oä4ÏΊZðY;æ9Ù3ÿIš¾ël;«T#5ãº>µÕG¤sr(›ßç§R{JÞ/Ïk#ðZëñAf´¦'Ð7ÏÂäC¿‹l• Ò<îi©–“ªÊ¬]+3.ë鈌F?’‘°=^}F´= tÔ¼V6PÊ|.ei]ûA<¨ëé·³—­|Ò’Óß §ïÍ Ug6Øïeåëúü^–ó¬NˆÔ÷Ëgæ8 R$06›Ç@>Ççµ>¾vcÌaT¨•´kÌ&ë·S=®JmæðXä†ðmW­yÉõY¥ù´ÙÂpqFßÖ‚«Ó¸_ÐH¢úà}qÛzKì/?54Ú\&¶T÷K½ú{©r®ËÏ–Œå÷‰½Ü’³ú­+Ü’Þ6|jxz8ueeE:p§¶‰:4w~EOü´žÓ¬Îú™ˆ¿ë3C4§E¾»©w„ÊÙ9hùðÑáoRyßkifëÒìò¸(ßã­Ñ‡OÐã¶Ž{> óHdØ(H®²úNumó2Î(¼;Ïy¾3’[•™Œ«Rûú£¬k¾wzUžõíTˆ÷ º—5Ð7¥.¥Ö¨Ï+‰rPT»©/5þ¤EÊç°D*äï½zÓS"×w¥c6òšœ´öÊqãøßf_ß2ݰøàøýØËÖXУBñ©K9õ³ó÷úσù/¾ñ=ø#[þñwb‘SwJ¯{xeZ=:ÚûTžïuËtMžöúéW‹__|Øâã7ã#V¦æzzäÿçK+Œš¼~GWxâûê7æùE×±ÌõëTÔcò­3Óæ†àeû<Ýëö޲6}Ÿ|ñ®…O-ûJæ>~ºÍ™™µºjöÝhþy±_³¾¿Ëi`²X€z|¥(­ç…3uWQ‡=höWyNЙ©í~ζ,<¸8,þýø‡Ãs– Û]·¸qáçyBÑeÁ¬Ýwç¤0OHà_t„OH£üéB—Œ·D×3óE{D‹;¦>û‚Hv§ì'ûøðž·pý²å ­¿]üÑâ)ËošùPµøR/~mæAkÕE£šY[†$ò·Å2Þ ‡çcú¹wøû|NÎ{Jpy@üÜŸÍnË“¨>¶lͲ‹—]4üíÂß/üjñ˜ÅÕÓÙAÏïE“kcÁïÈüÈɹS|¦Gžzø\(nMªÞ¼½ÝˆÀb°UÌyjDNY<'}_››‡·Ï[\³ì¿.|tÙMÃŽÓ ï[ÜmÙϧw—GÛÍž»gf諉°Ö÷²?;IÐÆ¡ú ãçhÉiÈ[f'Æì4>;Þæª hk®Kv­]:Þ²ðòeG‡¿sÆcÇ7/{ö±ÓÙ´1ë@žÊ_Êy£OXâ§z’EtôÕüªk"h¯õ ¨Â—¿`xEöx½7úÛ'ñóêøä¯ÎN‹­:µš%j׸…7oLákškv¤Až¥.ÎëªßŸ}<>Þ™õÊd'ÿ:[7\™˜v{$ÿ±X’óÎÉ\–g ^¿‹ÇŽ‘ªC”éŽO?k©2q2ñê#šmòÕ#ÏÛsz磖¬ÞžÃõ¶øÕ3¢gçïÎNÍùë²Ã÷5ydzh‡¤ðW¯GzÖÃYO­VñêI¥a<âΡ`ŸÌ¾>éÅ©÷›OÙ˜˜¹<|­[ªÌ›7?-ØùVüñ±‰¥Î ëóŸµÈ‹“´–XŸPëP™Ð3ÕVä/´CÚk#á7%¢™œä ´Ä‹Ú€G™ÑAÎUKÑo[–8i&ÄöûÛ, nUÏZ)«6[93nªtÐ]=5ðEáöŠx{ù é9{S2ú7‡â‹BÑ<ø #ÔŽ§lâÍoµÉ«6fÏ÷+±"ß‘6JücsPýÙ;’}b<ÓMñöF&²¾ýK^oÇÆ±I1ZTlµ¤´šyÁKín­ÇžÛÑ<#–'ÂØ|õNíî^]^8{U|+/qB¸~kÞ™^ÌWHé³¼£Ö!·†bÒ’±U´öF/üFk™¼‘]VÅž<|§ø›Ñ驉4¯ÎškÃùÑѰkéO΋5vyml‹ÎiQÙ¢ÏÖ$ †—UÕw'\7Uz¨ U$nŠ$×=BÍ’ ,–2ÏZë„Uþæ)Ĉùذ² M±¢ZßɉÝéµÏç£SôÕM EëÆ/ü°¨ÎGvŸŽ»‹' ÖÏaN¤ãÿÍx@{v¿~²¸Z)Óññzn XÇDõ{(ËOÚš«õ˜ŒÜÅ&诚wÆDåƒ3¨Ç¥W­‹‘Í|ø#ú„3ÜËópÒ:Š[“ê R)JÄ­Šuúën!¬¾«ŸÑ _Ê×h—Ϊ¹É|T¡M(×< 9ǽ–EY½#1•²yÅ¿ò›W³Ñe{æd¡§ãƒê––ä ÕVñle„ôX»Fz­Î4»˜Ç =g!~DFïjùö÷ÀZë=Ö~Õõ§ó+èšš¯§!§æ •S±(ï.ªÙ™¶Íñ"Ú®|ñÞùkèÒ ¨2‹BQ¡ƾ`€DZ©á}Ü­x‚ʈ´ÑqëñÝõ;+†O÷Ð@«ºjt2g<Ã$}²g«ÀIÐu rÿZ;«­±X÷ÒüœGÇeG dMNxkü"ÅzßÉÁp¨¿d¢³z_Ïé²óMm†ÖdP¨ÍzW¯åU[Ò¯Z žÕoqÁÆeå—$HNúç/ù£Ccvs{ÏÚy4´î^ÜÑo­àžÌI°öí>Ÿî¹ÔKÚÚiöÿGÉì} xdipy-0.10.1/dipy/data/files/cb_2.npz000066400000000000000000001454761263041327500171000ustar00rootroot00000000000000PKËx’D1QÎ7¨_¨_ points2.npy“NUMPYF{'descr': 'BphBÊnAÖBwBÛA“žìA¾† Bó)AÜÇAÑ· B :A³U£A•ÂB `AQ4„A\‰B/û…A‰ RAªƒ B7P‚A%œAøâB7¾IAU– A¤NB+PAÉEA["B±‰x@P$A\rB)y Aã•BQÚAï• Az÷‡B“üA¢Š A>…rB”¶ B”Å A=éRB•HByAyb2BŸBàðAö9BÐBËÑA‰žãAïÊBü¿AG(£AÀtByÔ!A®¾JAS›ïAÔ…(A"ÿÚ@1ëÂA’(-Az6¼@yG†AÀ±JAqA¤(A‹âqAb†YAŸè>@GzŠAg%—AŸ7Àò›A]‹ÀAl1 Áž©«A=ëA5ökÁ§lÇA›Q B;S™Á6‚ÅA â&B9vºÁé!Ü@®SGB{ÞB!í@4:Bü Btþê@T£-B=ÌB=«Þ@®Œ BºBŒ3Ú@WB1”BÆAÝ@†BK*B»Ûç@¥ñAB@mõ@£-×A§# B²6AZ¬¼A> B¬A{o¤A2(B0ˆ AFA-ˆB•§/AAÍ<=AÉñA NAFA›_äAùËgAÇùÖ@þÚAF`€Ažq@uŸÜAŠ\ƒA3!J@ë°æA™ÊtAÀ%?®@óA£„KAŠjA·HWAŠíYAGA}7cAëeAJré@•äsAŸhoAc`Â@ Ì‚A]EwA+¥—@?)ŒAù7€AQV@ÿ}•A‘ü…AG[þ?§3žAn+A ’8?QÒ¦Aäv”A^P×¾k°A„™A÷¦È¿ªºAcf™A£Ç5ÀؼÄAöæ”A¥â‡À£ÅÌAßðŽA„¸ÀïÒAþ‰AN[ìÀüÖA-…A™ÁÁåpÚAްƒAði,ÁŠ/ÛAµ³‚Aù¸FÁö×A(ª‚A}q^ÁÏÒAA4Ÿ@é°PÀ¹Ü§A–¡ñ@¢£¢¿¥Ë­AÈå'AqM¤?3 ³AËãBAm˜@·yÀA©Ò:AŸ“ú@ÓÙØA52+AC7AŽðîAÑhAÃmzAæÂýA¤A( ABô>Ad6ÄA‘šBKŠ÷@O8éAj¦ Bßê@w!B³™B)è@ÚBtBÉZõ@…è+BÿB³AAH>B€­Bªæ@ŽpPB ÁBs—Ò@m/bBOÜBgÒ@”ÏsB X B¬¿@šw‚BÜ#BJTAi VAúúAßn*A„eRAÐþøA¬AA*½OAÝøA®[[A–7MA•BúAGjtAÁàIA4'ýA…%…AÝ­?ArëB~’‹A©Š0AéÚB­”AÞÀA6Z B OŠAgã AYæ Be×Aâ0ó@§»BÚlAZã@«ûB äPAÝáá@ÏyB€Z4A£Ú@& B¹ßAž[È@PBBÆ,AÍ´@ÁbB3UÒ@+ ¡@g`Bž‚§@®n†@²ô B–á€@Aïb@o+ B¤57A4ÛÞAÓBìP8Am¹úA4BzT9AÔ B_Z Bˆ¢ŒB×ô B·bA°•BáJBþFA¶V’BSý#BôsA-Ð’B9+BSû@BA-B¤cÏ@dB° B~ê@:`Bv?BœA1U?B½GBÛ¹ñ@½>BI‚Bþºó@¹úùAkî B8oAÿW·ATBä³A>#mAøAƒ“!ATþ@ÜWÓAÙ<$A#Á™@ú_–ACAŒÆ A5ê9A®5eAäAIAtº‘@ý„AØ2Aízá¿á¼šA&¶A@…÷À‘n¬A§³ãAgÇXÁŒíÆAÙA B%’ÁÔëÇAÕ¹$BÜf²Á˜è¾ApÊCB¬ý§ÁjšAožZB_ÂÁ»Iø@‘Ü{B=oM½‚‘æ@Q½„Bi?˜š¾@X)‹B¾Á@™6ž@`’BñD@L}›@AИB®@‚ù­@e¼žB€`Ò@eíÏ@S¢B%°A£Ðé@Ôµ¢B:lOAÎëã@X Bzò‚AÒSã@‘í›Bé›A;Ïâ@Žë–B•°AÅÖâ@–W‘BEåÃAÛå@Ò‹BxÙÕA8¾ñ@“I…BUPåAïñÿ@š}BÝÖòArŸA¦&pB’þAå9ANbB©Bñòõ@ýTB5ŽBר/An ¢B½ _A~½CA:L¥Bm"`AväXASq¨B#é`A†ÞmAƃ«BÞÃ^A ~A$¯B‚»`AøAé²B¢–hA*‚‚A­Ü¶B*äpAHú}AF²ºBkiyA£rA×¾B(·ƒA¸ÆbAt&ÁBÞ‹AKJPAÊÄBþñ’A?]:A顯B E™AþR!AAÉBÒºA<¹ A6ÚËBA AªÍí@Š4ÏB‹ŸAj…Á@p$ÒB­œA€¬†@N¬ÓB½›™AJ@³TÔB‹ƒ–AxT¶@þ{³B˜LÒA…ô@(`°BÂ’ÔAÓ”Aµ­BÇÛÕAjÔ9A\àªB°òÌAˆ OAÍü§B)ÈÀA|DYA˜¤BÛ‘·Ao_XAP¿ŸB„µA‘£LA¹¹šB¥Z¼AL=Aâ1–BÂîÈAóÀ1AÏ¥‘B%‰ÖA¼¹-As›ŒBi³âAC­-A2]‡B+ÀíAk31A9 ‚B'øA­”4A\JyBmÞBñ5A9/nBóúBºn3A×bBÛ\BO1A"=WB¥ BÑ-A}}KBÇÙ B‚¦½AkÓ'Bžž¿ÁKÿÎA8ˆBñ¦Ác¸AÞÈøA~nƒÁ{þ¡AFÏA²5ÁÇ‘Ac”¦Ašç¹ÀýÊzA®DA Ýk¾ñçRAû!AA°€¼@D7Aß4A~§EAu4 A"¬Ÿ@c¥˜AAì·ø@´ÑÐA6Aì¹\A~ÛõAÎfA30ªĂB¸ê@«`çAû‚ BÞ@ntB¥/Bî·í@z;1BšsBÔäë@Ñ&PB¢~B1´Ø@ÃnBG× B,±@ó„BµíB‹4@m ÈBXã A©“„@³ÇBïœA¥Sµ@(PÆBȘAЖÛ@„LÄBszA…AiÂBËÛÞ@ ù AKj¿B阿@œ¾A¼Bï¥@Á-A䞸BןŽ@3àA­µBKR]@X»Aò²B´Å @/U A‡ð¯B§•?lò A«i¬Büê ?¬½AQ©¨BKVÈ>9žAå¤BÏ—?§A¿H¡BöÀŸ?!=A7ßBó‡@Y# A§·šBÈgC@Ëéú@Á—B+¾z@¼–Î@(v8Bÿ1B$'É@·˜+B1?B¾Á@¼úBñÑBO0¾@MKBshB’ŽÄ@šB'BdTÑ@¤üéAá§ BÞ@¸ÎAŽ_ Buàê@ ޳AÒ BiÃA|ï™AóaBOèA˜º€AãÒBܹA}fMA¹pùAM÷%A¯ùAÑ/ìAxÁ5A¿Dï@ƒÁÚAUÚCAÇAŸ@äùÉA8ù=ASj @+•¿AÌ %Aãx›¾Å¤ÁA}:ü@oZпp2ÆA©®@ÑþÀ˜ ÌAÎÓA ,¢@=îˆA$î@À`à@©m¿A`¹õ@Sá9Ag—éA_¢â@‹á’AüAÃïÜ@VÝÊAðB¤CÊ@Ô®BlŸB„Ë@ËÉBõ]BjÓ@N:B ˆB©Eé@…»VB™' BÄ:î@[MrB‹¦B+pÕ@4ê…B|QðARÌ@Áu‘Bï‰ÎAëHÊ@)Ñ›B°ÿ¦AÔ¬æ@^Ÿ£BÀÚoA™j·@5©¢BÏ—AùÒ@Lâ—B¬T„@Â/¼@|‹ŠB$Â@Ž¥÷@L{BïH¾iD@&rÀBwBÎ@pÚ¾BÊŽBGvö@½¼BåBš°A¾ª¸BºxÿA>tA6еB¿øAÐt+AÈà²B>ðAP$?A¶°B3æAÛ,PA s¯BœÙA±˜ZAð¶¯B[~ÉA$D^AÛ7°B3T¹Aœ`A¦Ë®BÉHªA†{eAŸ¦«B«-ŸA¦mfA§Bì˜A9¹]AëÁ£BJ³–A'‡JAÓ> B —ALj8AmÇœBI›As,A8[™BŽü¢AD5(A þ•B^Y­A_°@` ¹B|½úA ùÖ@$8¶B3ŒûAÿAo³By>ûAoA«r°B7øAUx.A™Ñ­B?âðAÁÛCAe ¬BˆkåAqTA¤Y«B+Q×AÁ^AŽªB¯ëÇA_fAœn¨B˜ ºAÑUiAc ¥B+±AÿcAQ,¡B½®AtÒVAqBS®A'IGAç™B<³Ahÿ9ASy–B عAó1Amæ’B‘ñÁAíì,A{1Bó9ÊAã–+AÏh‹BkÓAmû,AY†‡B/’ÛAH»°@Ôú¿B¤¦×AÆ¿È@ÜÂBÕÑAõåï@ÒÄBØÌA€þAÌ—ÃB„8ÄA˜5*A’²ÁBàØ¾A‡?AÞô¾B¯·¹A¸¼OA²»BhJ´AŸZAf ¸B}÷®A¹ë`A8P´B|ä¨A?eAdɰB—¼ Ar“iA^­B#—A'ÏgA©B¼A†Y\AíG¦BŒÌŒA.´KA€î¢B¶Ù‹A~v=AKÅŸBì,AJÆ1Aˆ²œB —A¤4)A«Š™B9ÚžAÆC"AØr–B^À¦A‹D„AŒß~AêOž¿¦üA >jAñ®l>€{AžœWAyçÞ?E6qAÕEFAtòV@HhA–6A'v @“)^A²À)A–1Ø@ï–XA¾€Aj6A´UAà A[ˆ"AfQAØ%ò@øf©dAtsA*¤§¾=þJA¶K,Až/g¿ú4A^*?AÂX¿¨ÖA ³ AC‚’B|éA*”AóÒˆBl6ÿAŒ}A¹R~B"¡ BðD AíŸiBÔ’B™5 AßhTBœJBsȦ>B€jB¬A}Û(B­zBEAªGB#BI A9½úA Å BqrAׯÎAí– B@6 A­]£AíÑB†=AQòwAg£þAVAgp.A3éAË͆Ažð@IúâAÿ’šA#›@pùA<¥A}†?ÌBZuuAüBQÀæ+ B3~/AwÈ»ÀéBÛý@Sk{B‰ü˾„Ûº@š‚‹B´6@Æ“@´™BÞ@ešË@ Ç£B¶9AáŒÛ@‚Õ Bþè†A*ùÓ@w—BQ¶AmËÖ@0‹B‰^ÝA¼lô@³Í{BÞŸûA6óö@=Ì^BJâBÉÖÒ@¢v@BS+ BîjÍ@`æ!BÓ» BÙšÍ@¦B ÆB–êß@‡†ÊAÕîB*=Þ@­TŽAöÕöAaÀï@UÌ+A‘ßAt ì@D#Ø@¿B¬A©ýA*¶ñ@-’fAÜ1ö@X)JAxù AÜÚ—A"¤\Akê<‘‘AÙyEAˆ@o—‹A¹„/A6’@ß+‰AG4AC“Þ@ÁêA7A4 A4WrA›Îþ@Õ‰=Aæ_AdÉÚ@·ãbAÍßOAn¬@Ù'ƒAÓ[EAZ@‘s’AëŠFAú´AâeoA 9ª¿žRÃAºŠqA4\ÀúÛÎAOcA:3¹Àã×A³LLAýÇÁYàÝAxÒ+A!Á¨òÛAÆA7k:ÁUÏAå¹Až×MÁ–¦¼An†@ ¡£B–Bˆ’A@¥¡BüFB:ÓHA~hBa¾ B²—dA^Z—Bm×÷AàQAÄ BðîA’BAj³…B½äB®:A3yB± B^.AµeeBý«Bã%+A•¿PBj”B'r.A «;B6=B½¯#Aè''B»©BÞŠA&¿B)BÍlA›øûA] B²( AzüÑAx±ByŽ*Aœw¨Aï²Bhk=AφAnöúA-GNAõ=A6²ëAͶTA“–ù@uª×AÊ-0A†A¦BBçgGAŒ¤BL7BÞe[Aº¡B„´÷Aý$iA˜ÒžB+ÐêAÊlA„N›BMXßAöådAo—B/ ÚAxÓVAĬ“BÅ¿ÛAd9IAëåB0oàAu$AAøÀ‹Bô©çA­&>APz‡BC#ðA?AÙ(ƒBCÉøAÜ—?A2«}B‰¹B€+>AÕtBÞ™Bž;A‡¯kBL®Bæœ7A©jbB_ BnÑ4AÿþXBÌ{ B¡n3ApOBòç Bîï2AÉEBö{B~xý@ðâÒB樠AÆPð@0ÖB25“Abaé@‚ùØB „Aõ*A0×ÙBz&eA¥^Aš7×B`NA+à#AâíÒB*LA…ï3AØŸÎB±ºHAF>EA'˜ÊB•j=AÚ WAb»ÆBèl/Aý‡gAî·ÂB²¹"AxA˜¾B AúƒAæ2ºBnÑAÊM‡AÚ¤µBëQ AÎk…AIû°Bß©&AÂ*{An²¬B),A2É_A‰™©Bz´5A¢CAä~¦B„:AÌú'A"£B+è:AרA¿-ŽB³–óA Aÿß…Bp{BÞ Az!{Bc? B( A†ÜiBJ”B¹ AŸöWBìÚBçA-EBîDBšÔAÞ3B jB…)AÞ BËBVAÏuB«ëBálAQÍ÷Aí‚ B{„Až˜ÒAÀ BâùAÅ­A"–B¥ä.AAŒ‹A$'B*8EAÌUAƒöAÐ{aAÙAÕ½ëA~¢AyÜ@HãíAªž‡Aί˜@NRõA|ÆzAÍ÷?F—þArq@A“:B[BE¬@A¨CB(·B-µ?Ao¬LB¢=B Ó@A;¤UB¿ÔB+ÂDAoe^B¨B ÑJA‘gB6 BúQA˜oBvà BB YAîwB´ôB“aA;ûBÓ˜BEìkAØúƒBÑB'vADׇBC·B'.~AšM‹BéBÈ}AÏŽB·ƒ Bl tAªBßÂBòNeA,†’B¥çBµ¬SA¼”BË B²‰>Asò”B÷«&B('AÚ:•B˜,B,Œ×A ­A¬…ÁOv£A>סA¬CÔÀ*‚Aú‚ˆA\Âî¿ø cAPïKAÜ7k@r¶BAŠ€A²AD )Aéµ@ð4}AX$$A*°@w0³A vAYATÔâAp¦Aä¡A“ÑûA”®AÒºA‚SBFæî@`ÒóA4E BFê@ ÐB-šB¾¼þ@Ö¯3Bª%B„ü@*×PBìDBšdô@•ABÇþA‰HAb])A¨ïâAëø AW‘¸@>,©AÞR5Aâ¤AËâRAå»PAúoGA@ι@p²~A‰A‚ú‚¿â“Aæ.µA€ïÀ]ä£AôâAv&^Á‘{¿AÎ B1ä˜Áôî¾A¨d!B{·¼Áé¨@¹,‚AѦ!BwþÃ@8©AåúBðFç@w’—ABÚûAîÇ›APBŒAÇ©™A^1 B‡2AÚšAÊûBRfDAá6ƒA4Be WAd#kABŒBúËpAmXADÿB1UADÕ?AXB8‚AÜá$Aª/ BWBtA,yA%B•ÊYAÞýA½BJ;AWe A4!BMAüMAœBgÄõ@~1AmlB²¹@ AɨBö²ƒ@’lA¼4Bú.Ù@¦l—B'ÔÑA`Æß@tÂŽB^IëA%åæ@ºr…BÆÎBƒ2ò@ÊLwB%+ BiÌó@:ÄbB_BÞ2AE MB¥šBT§A¦8BV¸B°õ@ʨ"B$æBG«î@éF B‘BÂ÷@öŽïAÉ B/îAЗÄA˜#B—qApvšAåVBPTA“½bA/h÷AT|&ABHAkæâA€À1A1¾@õsÂAÊ&AlP>@4Ç AB æ@YT¾ÀUŠA¢;”@YhÀŒ cAseAäÐEBpsBaà A[8BLB—¦A)^*B-"B½*AM½B€§B ëÿ@µÂB'RBÄÃA#äBçfB_ AGâåAߪB;KAÔùÉAié BÆAVœ®A;Ð B[2A “—AgßBôŽNA¼A‚œB1tA\A3ÐB; ‰A³O6AžŽ BýYƒA| A*ŸBô \A:aû@ÆBõK(AuÉAWçBkbè@)îA’aB×ÿ†@ÔXAšúBE;Û@düÁBnÀAû‹Aœ¹ÂB²¼A]+A§ ÂBd¶AKr2Aå©¿B‚u®AðJBAû»Bþ’©A¼NAÓí·B;p¥Ap WAcÛ³Ba@ Auª]Amì¯Bÿ˜AMžbAb&¬BœÖAY ]Aó\¨B9M‰A@çKA½º¤B†|‡A:A–,¡Bï|‹A(ž.A>ÄBF”Aæs(AôyšB<üžA &A,$—B£ «A^Ÿ%A£´“BïöAû&AÇ$B©áÁAZ‡'AŒbŒBbÕËA»*¸Ajç!Br6ÄÁÁuÐAÏÇB©Ü¬Á¦4ÀA™]BSµ‹Áß3ªAl)ÞAçmXÁl&™Af/ºA0} Á`™‡A€÷™AâÀ{ÀžhmADrAª¦?Ô IAi}lR©A˜k`AHy™¾KµA¡1qAlb ¿ŽŽ¿A릀A¨ûÀË ÈAf Ï@Ò¾ÄBÀLAæã@’ÖÅBRc8A›T AâkÅBÒ|*Aæü"ASÏÃB*»A`[6AŸVÁB²^AÁDA%¾BÕ>A_PA’¥ºBìA(ZA·Bò§A¢Ÿ`AfZ³BÃèA2_A®ø¯BµªAã–VAÛR­B†á$Aƒ¹DAZ¬BÔ/7A8é1A™®B€ÿDA5[A*t±BÖòGAz A»~´BV FAc…î@¬x·B©æEAÒ·Ð@Õ¹ºB à?AàÀ@Ðì½BÃR0Aͯ³@ÅB÷ƒ,BeAÅt“B\b-BÔu=AÒ€”BѰ$B }`Aëd‘B˜ BÆsA<åŒB¡M B~lA«+†BÀÝBÛ]A+}Bï. BâöWA˜œmBn¼BîÒNAW¶]BãSB…MGAäMBBIB‰èGA+L=BRAB`ÛBAó-B’ïB†:A¡5B+›BÆí3AX Bµ B¼H2AëüA%bBVé1A^±ÛA¬<B03Aø²ºAèIB·È9A‡PšA[ýA8™\@åC¿B +ÃAzQ¤@¿ÂÁB¸ÁAœÚ@ÃÄBr½AýXA³èÄB¦;³AJ&AoKÃB³j«A½2A€PÀB×>¦A¬=DAfå¼B=C¡AZQA<,¹B%„œAòXA>µB=ã—AZœ[AÛª±B[‘A¿\\A©¯BP/†Ay`Aã°B ñpA¡iA¸`²B–ÞXAHoA1¶BcŽMA…àkA­3ºBèfLASbA]8¾B©¿PAÚÛVA%ÂB¶WAiÀJAŸÆBK^A—A(¤{BfÔ=[|ü@Ï}ƒBZ?JHß@ÏœˆB]u@˜½@«ŽBð1@ïæ¯@Á“B*T@PH³@a™BBr”@ݬÆ@¬©BÖòÍ@›Øà@0Ù B[¾ AXø@_Ó¡Bæä9A5µý@=Ž B«hA-|ü@JÚBŠA‰Aúü@80šBœA½±û@d÷•B„ÿ¬A›Îû@n‘BBž¼Ac±ü@êÏŒBÄÎËAPŒAчB–ÂØA³ÕA¨¢‚B@wäAŠÌ AûŸzBEïAoÀÿ@ÀP»B½0ÃAhAþ¸Bщ¿A¦%A¯W¶B@è¼A<*9Aδ³BøG·AÉGAÚH±B/¯A/RA1®BëÜ¥AN+ZAÓ±«B&àœA³V]Au$¨Bм–A*£TAiS¤BŒä•A GAá® B'q™A¤8;A"Bd6¡AñI2A¤È™B$<«Ah¯,Av–B¶+¶A•Z*AÓBéÀAE'*AwBÚ ËAµ÷*AÅ‹B«eÔAN,Aü‡BëÝA³¡.AׄBMðäA—Â&A_Ù+B§‰)BŒ.AQz*B3%B&IAC'öA1% BÁiCA`œÝAq· BIaJA€2ÅA²8 B3wUAg[­A°íBÏ¥dA›é•A ÿ BI:tAì$Ao\ B)£xA“VAjOBúíbAv©;A'Bà;A£46A‰"B:ÇA ¬¿YÜ@gÁ™BhØí=ÐÇØ@¡Í•B€¯?ÍÙ@‡Ë‘BágÌ?Ôhí@ç¸B%„?XßA㹉Bÿ¦w>,A;­…BÁ¾ý¾«AdÁBƒ´š¿ ;1A‰}Bˆ§À±þIAÕSwBûz<ÀÔx`A/sqBµ·{ÀÝQpA‰kBŒ5 Àzç€AÉ>fB9ÖÄÀ@bÄ@6@—B<öÓA\o»@PèŒB‡ðAméÈ@àëBBFËÚ@KƒlBG* B/aà@FCTBÂrB§`ö@|o;BøHB„ÓÝ@Ü£"B~B^aÙ@Æô B«> Bòpç@wâAäB¨nû@â5±A´oB(aAv÷€AU™ûA¡Aû‚&AêèAZ AFhÓ@}žÀA¸UAE•@«‘A<Ø2Aìøö@ÒîOA$Ë7A, 3AiÄû@€aA¨[Apñ/@ÈÍzA~å‹AÀÀ}}´A¥D"BWÉÁmÉA80BÓ)ÀÁ‚ÓA€iBQŸ¨ÁPðÍAH…BéøÁÞªÃAÝ™ïAš¦€ÁÈ”¸AåEØA"éVÁª2¨A¤-ÅAFt+Áüv™A{k±ALÓüÀ´,‹Aw3ŸA¾ÞœÀ¤úuA|x‹Aà½ñ¿]fA2¦iAµ?¿LA§iGA5WŸ@à>1AÈ/)Aƒ A4I4A~"AF0BA¶r#A'³@XØ{Aa+A€æ@[†A6eó@…Pü¾«S^A eô@œg"À°)A…”¶@誵BXåº@1=º@r_³BÇ©@«cÂ@ÂÞ°BºÁš@×&Ù@ ¦­Bˆs@{¡â@“<ªB1ìz@E¥Þ@Kü¦Bù¹^@1åÕ@xâ£Bï3L@‹tË@)¾ BÞ[D@3º¾@u•B‡NB@:>¶@d$šB¸i7@þ‘¬@H–Bþì4@Fù§@žÒ’Br÷+@úþ¯@ÊBu@„Ä@>‡‹Bª“@Ë0Û@X#ˆBBÕÁ?Ìî@Dä„BÕB.?‚ý@©\B/g¦=À8A¾h{BÑŸç¾ly»@.mBTS5Bƒ)ï@'{Bü54BXÍA“B¤ 3B2AGÖ“B{–.B?µKA­ß’BÛØ'BƒÖ`A€N‘B¿  B½ZqAÿ‚B`ãB¢ñ~A#9BRB^:ƒA vŠB™í Bøj‚A¼ü†B^BâwAdî‚BB68cAÈ5~BÒB@ÛOA´vB8êB4FA3ëmBŽB€â@AøîdBxY B)§BALj_B ¹B–IAjElB¨÷B¬šDA¾xBcBUj/A¿LB,KBÞÅ AfÆ‚BILBv$%A}e…BPÍB››A¡L€BþÔ*BbÞA’®~BžÖB”f.AÿÀwBÛéB&?Ae7jBÀBH8AeYBCŸB|Ë7Aö GBA4Bö&;A¦Ú5BmBæÚ.Ae%B[†B!p'A›Bê˜BÊ¥'A@üBÖBrK1Aƒ`âA„e Bbï;A.¿Aö8 BʈQApAÞ+ Bg5oAµÀyA@5 BìmAR¡DA‰êB»Â8AO‚3AGÖ B×ûó@5Æ=A*(BÄès@š!OAÅ÷+B¨¨A %A î@ªZžA²vA°óª@¨}§A¾„á@^¹AB³A…V¯@o±,AÆAq‹@ž&PAjâØAJ†@4u^Aú@ØAjû•¿vTA1€ÑAáï”Àº+UAÍÆA[ŒþÀG^AÄ5½A°0Á8írANǼA)TÁS_AÀî±AÜÍ~ÁØžA¢•¡A'¦’Áeá¬ANAi¦Á€¹Aï}A¾ü¹Á›ÄA1R\AÈÉÁJ×ÕA6ÖAübBîpB"˜MAl5xBt¸ BðÇcA¦H†B††BLmAPBD®B~—NAÚ”BäB¤TA~•B€ÿ'BXãA:ñ²AÛ×Áº§AI£AíØÀ•ê€Aw…AH!¡¿"(SA&DAA晬@Bj8A~ù@ IA~Ò A#¼™@8„ŸAv²A“jA:ÛA˜AêiƒAU­úAƒzAÁ ÆA3B¾¸ú@¶wBš BÞ~A«}'BjeBS1A‚àIBYB2|A°íkB‰ö B³A†Ñ…Bò>þAI&AWU”B®¤ØA¦] AÍ B"Œ¦A†AF­BX!€AŒc@ú¹¸Br{ŒAÔ|®@ ûAÐHBoƒ'AgA`ÙB3ýqAÉdAfZBã†A¸>A u B¬_A¶®‚AÚŠBbÒ4AÁ«A>BºQ$Aì)ÚA»ò B|aA\BAžB©ñAo©B"ÆBÊ0A^S3B üB¸-A–uKB›™Bá.AbñbBÙBBå)=A«ËyB>Ä BÒoFA1<‡Bí$BŽ(^A0Û‘B9éòAÆSAÖ9™Bü Bä~A5DžBtB•¿@ZB¬BÈÖÌAA¾#AÂ'AZJ2Axõé@v€YAârAh˜@ÛY’AAAXÀ@YкAoAvÃA¼~ßA3 AäBZAŸDöA}ƒý@U—A!½B ’è@ŽnÂAyÖBÒïÔ@zþíA{ B/ÕÆ@Ÿè Bß Bj É@.Ð"Bü#Bä×@çÎ8B1áBq±@"åMB²B0Ò A*‡'@OB:é¤A!Øo@ѱBæq£AT¨š@T öAŽzšA û­@~êA<AÄp¸@äKâA$ìAåI×@æÓßALªmAvADŽâA.¢`AŒsAÖ£éA¹ïRA£_6AõÓòADUEAræNA\÷úACu:A†kA0‡Bq0A,„AÆ>BT#A襑AIBå§At{šAø˜ Bíð@$›A¥!B©gÍ@Ùó”AtJBJŒ§@:ŠA ÷BòŽ@ܾxAŸ½B ¸%Aí¶^Bx¡B0í=A†<^B(oBö8WA#¥]BZ¼ Bù_qAôÓ]Bl« BIÑ‚A|ê^BcBd9‡Apc`BrBèDˆAÞaB. BÀ†AHcB‚û&B`ƒAÔÐdB£º-BÝÜzAžÜfB 4B£RmAA/iB>á9B­c]AžkBÃR?BZ>KATNnB¬0DBÊe9AqqBùÊHB€)A¦uB\MB,•AÖðwB†BSBÈt A¬3yB/ŸXB`}í@ŽmxB–|]Bßâ7ATÇaB²¸BßR9A2rlB—ÙBM!8AQÎvBÇþýAó4At|€B,OõAË/1A/…B ìA§M/A÷tŠB%$âA«@0A‡IBÍC×A75AüÝ“BIËAz BAâ˜B“̾AºQAqœBg´A´¦\A¿F¡Bº“®A•”]A€%¦Bîc¯Aâ]WA9Š©B‡TºA˜*IABb«BrOÉAN1A•I­Be¤×AbEA…ô¯B‰åÞA€·à@‡º²BÑ‘ÜAÚ¨@ÉæµBZÙAû­FA@ÝAAåòåA(ðXAu2AsöãAÓ™nAík#AòyãAÕÔƒAƒ_A¦§æA¨ÿŽAÃ` A+ðíAøM–A3‰ø@ 8÷A!ö˜A20Ú@"¼B0³˜AZ@±@HèBЛA¸˜ƒ@3BœœA¶Á6@QBQ!šAºõ³?õ BÔ–A-Ÿà½³†BHKA|ŒË¿@¶BrÂ…A3”;À PBÁuAüh†À¸€B Ñ_Aæo«ÀæjB+LAÝuÁÀÅ• Be9ANÜÅÀÒæ B?)Aø6EB•… B:/A3Ã]B,Å Bú1AluB®ŸBÂ;*A^þ…B: ñA¬å*AïÑB ÙAÏÂ+A²6¾ArIB¿µ4A( §A#nBm¿AAño‘A¢€Bþ¡NA °wAZBŸQA±NAíþA]l@Ï“ÁFæýA6=¯@\i„ÁÖ BðbÜ@BacÁ²„BÞ‡ Aîï@Á+Brz'A«Î#ÁÞîB~á:AÁMBBøâPA‚ÑÀzeB~rvAú¤Àf‹B4’‹A&YÀ@oB¶É–A@@Œ¿ J BŽ”™A…ÎË?:Ð Bu˜šAÁÞ…@šü B—1 AIÇ@Û³B1ùŸA¥zù@ð¹÷Aî@“A¶ÑAÅóèA€bAöÆA>èàA¸ÿVAáÉ.AëÏÜA¢’2Aó2CAêüÚA¨A<Ã#ÁY ¯AÙuŸAÎÁÕµA¾™šA>ùÀ1w»Aî9šAÑØÂÀ}¬ÀAÙjŸAÏÀýÂAt ¤APMÀÌÒºAø¤Aêš ÀïÄ®AÕ¾¤A£¤¿‘þ¡A,ç¤AlUƒ¾òj–Aër¤AèJˆ?^$AŠç¢A¹}(@Àé…A>æŸAÿµ‚@á{Aç…™Aµ‹ª@4¢lA§A€XÌ@G``A¾ôƒAÚë@€XA.äoA'AL‘RADWA­@A9ZPAÈâªAÓœûÀ~ÉA6”Aâ pÀRymAFgAÀaÝ?rBKAÊù*Aðbû@Ðå0AŒÜ@þLbA@eA…&¯@C´¦AÍ6AfâAp ÚADA8«xA¶Ã÷A©} A^ü¶A¶BC»AÚºòAæd B ÷A<BúrBVWAí5B½õBßäAƒBSBý©BéÞA…ópB BËO A5†B#!Bæ. AÛX“BF%âAiA{žBŠ`·AîW!A¾T¨B¾A_›™AëQ^B‡ÂÁS4¿Aƒ]HBü:ªÁ#áËA½.*B‘Á«Á‡ÕA¹7Bœ.•Á];ºA©ñðA?&gÁ/ §AÃÍÃAÑVÁ•Å‘A¸r›A9+ŠÀ¦zAó•hAÏí”?ó?OAÆ-A-ñ@y#5A«!Þ@[aA/Ó#Aì’@[G§AÏ7AïÿA*ÝA4à AÙsA©GûAG2ô@í0¶AæÑBx¬Ú@÷×óA¯‚ B‘Ï@ÕíBýéBé@œÇ7B+B¥œ´@DêUBuÉB¶A¢bNB±˜¶ÁrnÇAï¸@BD¶¨ÁÞ ÎA:–.B†Î¨Á²uÓA6îB¯v¦Áö£ÚAò6BŸ‘Á«¸âA#ÃþAƒÈzÁTmëA‘¸àAðDSÁ" ùAglÃAle/Á^7ÞAw ³AíëÁLv½Ad#«A+øùÀº´œAZU¡AÌ`ÆÀF ˆAy‘A™æ;À8ú‡Af¹nA¢Úñ½ÜX|AkDA$M\@vìlAzú#A,Nî@ô-ZAÖ9APî5A€wAA’wÅ@¸-tAÔì*AhO@4,”Aµs—@J³B‡wA))AªB ]wAjôù@Cg¡BýižAÉè@ÂÚ˜Bˆ&ÆAî@…žŽB–FèArù@}?ƒBBBšA nB Ä B‘¶A@5TB~BÇAÿ©9Bê„B\}÷@WBN¥Bfãñ@BO BÜtþ@¦wÕA5ÞB AÃO¡AmBº6AÊ\Af×õAæg#A lA”ÙAÈ-AI“@úP­AÙ,AÉt„??¥ˆA¡™@§´BÀS*RAnùÔAáRB¾»ÁNîAñ¾^B‚Z‘ÀjCAÿoBRn!À Šæ@¾Ç„Bžç¶>Iw@‰@•BÛM@ûµ@z.£B… A–uÊ@&{¡B‚j‡AcÈ@2v•B­I¾AGÓ@ó؆B§oêA-Ëñ@¨lBæ‘ByÔ@òÙHBªá BÅÃ@ž}$B*´ B²Ê@ïhB>×BB\à@Žk¸A BÚmã@"@cA¥ïAJxä@%§ï@óÀAëA ºÎ@ÕçwA Æõ@Q”FA+" A;ÌAúù‘B2êA—.#ABžEB–"AwB±)BA“A™„^BÿæB™ATEBÞBgÔAŸ,BdbB› AÛ;BfºBnJAöÉóA² B A€çÀA'ÂBà 1AcRAÍßB¯ÓLA¼¯FAÕðA¤A”Ag áA†‘¡A2ƒ°@@#ùAZzšAò¼Ë?¬J Bür„ADfÀR‚Böñ@A؉ÁlxBá^ A–^JÁN6BÕú„@ñU€ÁhöBŸ@—^Á©½'Bàä@L¢Áe&BjTAb]Á"BVþ,A‰ïúÀ–!B{ FAߨÀ!uBcA€â©À%Bi~AÁ™fÀ?ÏBüBŠA–HÕ¿‘ŸB7&’AzáÚ>¬B¤G˜Aœ~@3BÆzŸA="„@‰¼ B=¥A„į@uBeó¤A&¥Ù@LTùA•›Aù@Ú±ëA$ß‹AŽ»AîþâAPuAâ+AŽÝASAy&AÕØÚAV'4AÂ8AjËÙAœŽõ@u}B~+BlÍA‘Ú{B“"B`ûA0À¤AËE7Aˆì6?ã)ºAiÉ!AK½Ç?_·ÏA¤‚Aááñ?-ÙÜAl<Ç@#MÒ? (ßAݶa@_‡?™EÔA*½A?­3?ŠÒÈA‚ÇÀâÇY?Wb¼AË:™ÀÛÃÎ?‡”­AýãêÀôÏ@}/AõgÁž“E@½ŒŒAÚn>Áà‚@û”tA?ÀQÁT…@ŸVAVŽIÁ5½+@3ðSA‰S0Á:J™>`:dAH4ÁjTÀÚ•mA!¤Á4†ŒÀÝJAšb¦B4¢A3oA«(™Bz†ÎA² AH‰B#fúA «Aü,oB¢BÎyAs»HBA]¾ìAµ"A^1º@—±Adâ6A­Mý@VåTA`YAìkJAÞ“£@#ªƒAãÒ’Aƒ¡À;Ä¡A`Ò½A4 Á૽An.êAþnÁêÌAÁ_BnTÁcÀAc8B*§ÁCv AëWBçP½Áqò3AÌ´~BË òA÷ÎKA=€BÂòöAÊdA°“Bs²ùAäÁ|AêiƒB©üA|¦…AÔ†B~¬B̈AºˆB¶|BG‡A)‹B BǃAÒ?B”ÝBŸü|AÅBS½Bu"qA!¡BPÐBžÛcA è‘Bêð#B>gTAµ&“BS¿)BY/CA<5”Byf/B—Ô2AË•B~5Bå#A³Ñ•By:BÕ¦A–B2%?BøA0ЕBoÜCB0ó@vH”BùãGBˆ·SA÷ßB?™Bµ-TAMÛýA²B“½VA4¨íA)ª B8ãZAÌŸÝA6 BÈï^A¯ËÍAH| B8‹cAK¾ALì B­"jAÌ$®AmÆ BƒÆrAÑ¥žAW÷ B yA\AÄw B1~AOPAç5B ÅzA(ÉiA·)Bï kA3‹ZAáöB†TA06SAi~!Bc;AÙæNA%‹&Bq{!AU$NA£s+B§Ê A›ÎPAPê0B,§ê@=íXAûÅ6BÛÃ×@AªfA;Ž=B6…¥AÞÆÁP¬Ao AràÀ9¡±A(~žAÖ³¬Àt´A>¡A¤æuÀ¸›²AêÎ¥AÏ-Àéñ§A¼W¨A,쿵šA•e«A¥uf¿ªDA‰<±Aά’= ‚A¢.¶A¾Ó?m+tAºBµA(R@æ?cAÀ¬¯ANåŽ@uSNAjݦA(å®@ ®8ALÿ¤A6Ë@¦iAM¢AWëß@õMû@d„œAÜ•AÈzÇ@‰ÞšAVRAV<•@c/ŸA-ˆ$A<:@`§Aê™'Aà—?Û@"AR¨BŇAU0 A!‘ŸB-H°AsAಗBKÅÕAR Ae¶B‘òABBxÇ AyÉ&ByUBÎãAÛ¿B7ÙB%4AìäìA\ BNAÉ[¼A BcA—A…B D+A! ?A;žîA O6AÈ—æ@d²ÏAs«4AÍi@q/¨Aëþ@ãRÊ>Ž]ŠA{)¬@usÀ`AðUù@p:ŽBäUÃAQù@¥Î‘Bû·Aâ1ù@2b•BáªA)ø@OÀ˜BÒÉAY•õ@²½›BmDAþÿö@tWžBX5Ats÷@ö B/[\Aýô@{¡BW¥7ATä@ƒX B:aAHîÏ@Â9žBÈ`ç@n\»@›Bí¡³@žÅ¬@˜)—B´¶Œ@ª@hÝ’B¾p]@ Ÿ¸@äcŽBõ<@àÔ@4ŠBï½ @åkî@I †BÒãÓ?ÌAòøB.Š.?àý@)èzB4l>¼ éAÀyE?ð*Ù@ÚßAo¥]@gÓ@6ÓAáü©@àI£@ƒ‘ÀA«úã@ò³@惫AÄABÉ@(”•A¦AˆyÜ@x´†A¬,AùlAçÚzA@ÿAwu6A…5fAÒ‚è@mÎ]AôYUAƦ¸@QÈAáVJA&Âf@ßW‘A!"NA”èØ?öB£AvØgAŸ˜¿>W|´AðŽA¥¿yÒÂAÆ·vAübtÀ1ºÌAÏÖfAêÏÀ)pÓAÄ×[A".Á-¬ÔA˜hIAÐÜ8ÁàtÇA¿u£A¤ÐRBBP»ÁF·ÄA‡0B$(§ÁþÎÅAÈu Bk®“ÁjV´A…ÙA" TÁHò‘A@í­AúùÔÀ IlAjw}A"?|!7ARƒ+A¾Ô A§ëA›Í®@Š‹A@lA4JAU{ÖAœ÷ A®‹AìPýATþõ@@ÚÛA– Bð­î@TÐB- BéaAÜ?BiøB–¶APÊhBƒ Bšÿñ@&X‡BçªùAã ë@ô—BÄ ÈAÉA+¥BdgŠA´ð“@ÒX³BåvA3¿@A™dBª  BÇ=DAï¤B’ÊB-.IA¬Ç%BÝJBá0LA¡O1BúBrOAHW=Bé†BŸ³RAܪIBlvB-«ZA»UB/uB£±bAk¢aBHB|¡fAkmB=qBiAÄyBç BØsAñ5‚BqóBHÙ|A‹Õ‡B'¡BKyA9ŒB‹ØBD¡iAq BÌöBkRA[H‘BR%B£¤2AN×’Bs.Bæï A›!‘Ba–2BþÖ@xBÀ'4Bø_AÚVÆBJ[AyßmAl‘ÂB'ZTAÅzA袾B:|OAŽƒAꢺBÉJAT,…A j¶B(MAÔV‚AP7²B‹‚PAÁáwAV®BÿoQAG_A5«BeZAæqFA¨²¨B3`Aý·6AÒh¥Bâ´jAö‘+AJÈ¡BBšvA‚±'AˆŸBrnˆA(P%A“NœB«d•AvG#AšL™B~—¡Aš"A¾–BÜï¬AZ–"AQÏ’B(¸AŸ #AnwBÌÕÂAè%A4ã‹B,EÌAdÓ"A–š¦BùBsPKA¿/£BMöøA?bA“UžB•iäA×YAù—B‹”ÛAGéHA‚–‘BÜIâAÁ@A0§ŠBÔ¢íA{y>AIƒB¸BüAècjlAЯTAfÚ3@…’YAf;Až\±@Í#JAL#AÐÏA ˆBA2iAl2A‘‰7A­å×@ëÏ^Aë^(AȘ@Žh‚AAú_@Zø„A@´AýÄH>Õ8jA|’AÎj‰¿”µ?A‚ÿ A$FÀõ AÅ©EAó,À­.õ@ôµ¢AòÍ®AñÀu‡—AÅ^žAše¢ÀžO‰AèYAÊf$ÀV2‹A5A Ø?B‰+B ÂA‰".B˜ÒÁÁcEÐAÀŠBm»Á$1ÒA/BŸÁ•œ¿A:ëBÊFÁ÷ä­Aâ¹æA”pÁbl¡AçÍA«H9Á“–APL´A˜‚Á% ‰Ay>ŸAU”À˜xA:‡A¾„Š¿ô(cAä_Aø…%@ÊœBAÞñ?AN°Ò@J :Aú’AæŽ(A{+AcFÚ@ÌÉiAPòAl·b@¼‹A)ú@h:Æ=:OhA÷íAϧ¿·†&AUN=A3,ÀT‡ó@ȃA8êŠÀâ@±õ)AïÛyBXšB“Ô!A@jB»9BÙBAq†ZB"¸B›y A¦}JB8­BV$A“:B{†BòÀAÌS*B?B­jAYÅBh?B‹_A³– BBÁB(=AŒÐôA+¬BM"AtxÔAŒ B(Æ,A˜U´A£ž Bo¯FAù—A‹Bø‘lAVTzAd•B±Q‚A¹dDA­bBÒjADªAäB}q2A9vAåÆBï‘ë@Y*A9#B}2r@Jì2Ab, B4N!AÒó¨Bhù†A‡«A‡ŸBã^®AgøAÊ–B€×AÎ AbŠBÐöA WAE{B¯ÛBAh»`B+dBM·AŽÈDBü6B,!A9á(BT•Blü@z= Bª BŒkÿ@5ãA½ÍBJvAh¿«A‚yB(ÿAÍHkAs¢õA¾ŒAì; AšÙAÚéA”‰¥@\=©AB¬*A_ÞÐ@þ`mA,‘9A¢]$A‘ÎA>à_AžTAñP@ðÞ}Aü»‹A€ªÀ/UhA G™BÃÐÉA­íWA!–B£ŸËAeIEA=9“BžÐAø­8AJ&B7×A°¦4A£®ŒB/0ÞAT94A 0‰BGåA;W5A^¦…BÝpìA¥]8A½‚Bà óA©#;Aåü|B}ùAðY=Aí½uBÿAðÑ=AS]nB'BáW=AUÕfBiâB LAÔÜZÁD͸AYAAc4ÁbÝÕAÉfBAF ÁƒáA¦€gA>›¨Àm›×AŽŠyA[õÚ¿¦¯ÈAšRA$ü*?:j±A#bDA¤ªP@~Ñ•Aœ¾UA»·É@7:zA<«rAŸDAïü>Ax͈AêcAMAUDŸA@þAU@3f¶AX_þ@ƒ'@ ±ÃA¶öx@¬Êå?*C¶AÙW>24@ûØ“AÝЗ?Li @,G€AúŸl@öŒ>|gAwMò@9|S?ˆ'AAüS-A Â-@è5VAhþ@PEuA¡'VA0„Á@D±‹A `AÞýv@Q¶Aº¦šA k¿(¨ÂA[«A,ÿô¿bGÐA™§AýÞpÀÆâAD¡AŒ#²ÀÃióAÌY™A›ãÀûæBÆyŽAËôÁÌ B8U‚A`Ó%ÁŠ‘B{oAd¾JÁ‚XBç2bAÆ?wÁ®âBè1[A¼±’ÁA‚BºNMA6ÿ¨ÁŸmB&Ü3A£Ý»ÁŸBøÌ AÎÁþíBtôÀAŒ§ÁdI¨APá½AâSÁ @œA–Ó»A©ìýÀdVAà;¼A®×ÀÚ…Aמ¿Aœ;©À|A¬ÈÂA!:kÀ]RrAæûÂAh ò¿„uoA¨]ÆA~;¾=lA+ŠÉA¹Ç?¨[iAø—ÉAÊ R@RdAyÀA&PŠ@ WAþ!µA:™@œHAÅ™¨A莰@\>Ag[œA(Ì@U&9AS‘A²ï@ø™5A ×…A úAª2AšØsAsØABéFBGà@ YBùÊB¾¥ã@¾|tBžY B`Ë@~.‡BްB˜ø@æô”B²áAXö@}ÓŒB '÷AS#AW9„BŒÒB«AüvB¡¬ B½AI—dBÇcB=áAåÙQB8BÚĄ>B+dBae Aq+B‡©B}òA!‚BÏïBýoA}>B Bù" AôÏãAí) BQoA½A" Bp $A1ˆ˜A©¢BÓ—:A¨ÙjAÕ·ûA=÷MAnê)AœpèA£½uA€Æå@è´ÞA¨·’AÍ× @P‘æAä”A±> @“ÆúA >ô@Õq1BB=iB_ŽAXï6B‚·hB®y&AŽ9B|&eBù;A˜f9B"å_BîüNA ½8BÚZBÒPbAVd7B TBhÇsA}6B}NB%€AtÓ5B2ºGB¯«ƒACê4Bz@Bš2„Ašª3B9B¯Ø‚AÅf3Bo™1B¡‚A¸·4B5*B8á€A í5BÏ"BR xAÝŽ6BjÁBІaA—.7BßB5ÂHAK8B¬Bér/AœF8BâšB0ÏA![8Bè§ BðA0]ÎBxýAA=y*A¤%ËBõ9Aè6:AÌ0ÈBÊ0AbIA¬PÅBF#AÅŠVA‡DÂBñCAoúcAñ ¿BJzAüKpA`¥»Br“ AÒ7zAp¸BXA–9~AÊl´B@WA Ê|A"Á°BsAäsA\Q­B:~A›ÓaAÒ\ªB­ &AP LALÙ§B¯8+A(–5A¡a¥B²Õ.AØ%AÀ¾¢B`"A7A«a¡BÍ|A{‚AͤŸBÜÛ@ˆqAºJBˆ­@h›–A§Õ_B%¼Á¿×¼A%è@B\}ŸÁ3pÄA1BUj£Áãu¨A“qõA…×yÁã¿™AèpÂAÁI‹Aá5ŒA“‚¿}nfA¿^BA}K×@ AA ‰ë@,sAôb8AÕØâ@üÁAm5A_ƒlAMQóA‹¡"AØ{ÂAu¾BºHA»¼BÜÐ BÙÆ+Aí/B…œBc-AŒVBøBÃH@AÝ|BQ¡ B°ÈZAE„BïA ÞFA›»›BEøB`–…@ÐVŸB¿PBXç7Aú;eÁ›@g`A40_ÁJƒ«@œª‚AÇÉLÁ`µ£@ñŠA"Ù0Á䚆@ |œA{µÁhëH@©AÌçÀŽ@üÛµAø¾¥ÀæÇ÷?¿;ÀAv°>Àà7¨?{¡ÉA¿ä7¿Â\+?¸žÓA¢dÂ?{É(?ÎáÙAHxp@!ª?dÏÕAB³¼@á}ü?:šÈAbùú@9 @¶û·AùïA²×ý?˜É¨ADÙ#Aâ” @ {žA€x Aó¦M@T*–AœA/p@â‹AÀAм‰@ȺAˆó3Á̸AGAÈK:Áò˜ÇA“; AÛE(ÁÎÓAÁAšmÁ ÝAÁ{.Aÿ]Á;+áAÏåGAÅ\ÛÀ-çÞAF¹\A{¦°Àˆ:ÙAu‰dAý}pÀëÝÒAoSnA À=rËA<aA‰¦R¿«xÁAüëPAÿ > ©¶A7½@Aʶ?©ÃªAíþ1Aݰ¾?ÃXžA_sA |?wâ”A©mA•ùʾ_6AEzÞ@Â׿èÉŠAŽëµ@ȧKÀ(Ù‰AÀ¬@È<‘À˜}Að^v@‡|±B€&×AÜë@*ù¬B±åA6.Aš©Ba¯ßAcLVAM_¥BBåÅAj5WAÄ…B°ú»Ah@?AK–BÈ£ÍAw.A˜B²âA6-Aèþ†BIóAÜ2A>}Bt°Bš_1AØ”lBBóv+A¿ßZB… Bý*Aÿ²HBÇjB $AÈy6B@nBíAB^$BÂç BuºA²‘Bz… B*ANÛBâÒB®ØAÛÃÝA¦-BƒAj´¹APÓûA4ÄïAήÎAô2Áu”âA@½æA&àLÁ®ÌA¾âêAvÏFÁúÛ¿AÏÕAgZ&Áå%³A65¾A*DÁ-.¤A@¨A†×ÀêÖ”A®™Aø§„ÀÆAÜ]‡A¤ԿཀAÈueA^ ?gmA=DAÀy@Ú›[A\ú)A<4ä@=†KAjï Ac°$A:@A¨ƒà@4WA.AÛ£@ÆùƒAqêA#Å @d¾‰AA©p-¾¿õjA¾¦AU¤ø¿¼B9A "A€eÿ¿àËA0AA4”ÎBh=A KATDÔBDõNA®{æ@ðÔB[”}Aëóè@% ÑBUÎ’A²ŽAº"ËBM™A“¥(A^±ÆB=“A“MAÃBV=ˆA‚MdAx¿B÷´nA2rAF¹B¿NfAëoAIã²B dA¶ [Aê®®BÒ´Aé–YAÔ°B}Ú”A¼VAß2¶BJA²ƒGAË.¼B ö£A¶ -A¶xÁB€«AKÐASåÄBl¶A((Æ@¿ÂBhÊÃAAg@`;BLçÅA¤÷†AºÄƒA@¹º¿(ByAðQPAš0,@êµ_A|)A`î@0hKAÑü@ô«AAÄå/ApV§@B…AÑð2As@‘@eâ¬A130A¢/ï@É›ÒAE±"Awc8AtYðAé‹AK¯…APÖþA¶€ATݯA²B0oø@Þ›ÛA — Bö¸ê@UÐBQ BÊÓç@ÖÅBi'B”©ö@N”/BSŸBjêþ@xEBfB .Ó@èîZBB(QÒ@{ pB¶B°?º@ R‚B2ÝBxÔ4Ab˜“BN‚6BPRAò ’B×)-B]ßiA1B›S#B¤}AÀóBÝûBÄ‹…AW¾ŠB¢-B­M…A.†BðlBwAI0B>ÙBy&fAî¢wB“ŒBó­YA AlB"} BôÌMAÁâ`BÚB,IAïQUB÷B3¹HAWB ù H„@^0XA“þ¨À’b@¹c%AV´$ÁÀA@Ì3É@4%kÁà¹@»ˆ@PÆ£Á º@yó@åsÍÁóÌo@[Hð?kAÉÀ[[“AÜ«Û@3ÐÀKú’Ao;2A8=‘Àiï‚A“&RA\y·¿ÔFDAãXA.X3@ËÈA¶h8A’óA[APšAK÷RA^¶,AãàÔ@§Ð’A .AÆR¦@áž¿AÍ.0A¶ˆ@ý íAÛÒ¢LAPÈX¿EÀ1-?AW(Z¿Bˆ ÁËQAJÔ9?zÔPÁLoAKKI@W´†Á …AxÁÑ@ç:ŸÁ?A³#AµŠ¶Á,ž—A'¨\AúêÏÁC£AL†ˆAZdçÁRt»A.מA]ûÁ-l×A®È¨AÚÂ=´A E¿ ùìÀHî*ADÒg¿  ªÀÎ7CAW÷q¿m QÀn°XA÷ù_¿´G£¿ÂmAžøl¿¸¾?®zA`œó¿L !@Õh}AüvÀƒt@¼ésA3ÉÀô“@cAÀ Á´?©@±¾KAƒü*Áœ¾½@„†1A€öJÁDÎ@A‰ÖjÁíóÛ@nQù@„é…Á‡Èç@ôÍ@ì—ÁNüô@í©¬@䧪Á{ AØà’@aC¾ÁáAë4}@ pÒÁU.A’5\@gDäÁµØÛ@‡r@,_…B¬0yA Ô@¤å„Ba¦uAÝzA‚BnGdA'… Aß|B LA\wA®òrBV•Ae"•@£(NB®MAªÙ„@Ò@B9éZAŠŸo@O¿1BÈ·bApéb@7#B/»^A¤ðl@eœBŸt[Ar|@÷ BÉþVAïw€@KïAUNA§ô@vRÒAgEAm¹£@—‚µAG]CA6¸@ΘAÒ"FA^-Ó@T{A»CSA:wOAXKm@Å—FÁ¦ÉZA!ï#@_å1ÁúhA ZÌ? Á.ò~A4-?ÎìÁ2ï‹Aú˽§aàÀï™AÙŒW¿V¼ÀÛµ§Aw É¿xË–À;S±AÈhÀ}?LÀóß°AÁIÀ·*¢¿ãJ«ATfÀí`º>B€£AŽäÀÀÂ?½šA.øÀz™@’­A–±ÁÛqB@—†A­Â0ÁêtU@ßM|A§(NÁ øJ@ "rAPämÁJG@|nA¼Ò†ÁˆìS@®rAí•Á¼3@‡“9@0WB寭AQ2¡@üàYBý²Am|ò@¿ZBr«AMPAN#YB]W™AZ<AãVBÓÒ…A¹…Aå‹PBlA1‹ô@æHBå \AyEÍ@ý=BOœYA'µ@‹2B&ZAíù¯@ý9%BVWXA°@ìGBá²XAÓã³@] Bf•YA½ º@LŠýAmOAçÂ@&)äAåbEA£ÑÑ@#»ÊA&Ê>A—Bã@ò+±AË|AÙL9ÁCâ•@&ï#Auâ[ÁVÎ@ÚÓ AL/€Á&÷¡@¸`ï@J“Áã§@—Í@“X¦ÁUhµ@ƒÜ³@ákºÁø·¸@†‚ª@%ÚÌÁŒŽ–@Ô„ö@ãµB<“LA’µð@ÛMBO¤?AÚ½ö@ÝPßA\›5AK2Aè½AoS/AßÌA‚¿œA[/)AãAnÕwAY$AÅà3Aâ»9AvdA5ôGA]ä÷@ñ*AwÇYAÙÐu@bÐÜ@ôÍlA…e½Ê€¹@ÆuA0é‚À…²³@A dAËyÿÀu¶Ò@3CA]§5ÁG|ü@W_A•iÁ¢ ANç@A ÁOAEÓ¡@©îªÁöJA²¯`@å»ÉÁMRAÐ2@*ræÁlûAÕð@¾R’Bv@@@ñ[÷@3Ÿ‹B]œ‰@eÁ@Ï‚Bï4±@* @árB vü@_h@æ]BÒZA¨¶@@ùèGB_7AÕ@"@XK1BufBA©,@?`Bΰ@AuoA@ǃBä:AîŒ^@ ÙA-–0Ai ’@€®¬AN+AxšË@ƉAÿ0AgA3A»»%AËq5AáDÅ@Î$Að^LAŽ–?œ½ AŠ91AÝÀÈk]A¡9Ø@rÍ/ÀD…Aý\ð?Û¸À_å‘ABg¾³Ê8B$ûÇA ¤?ÿð;Bÿ}ÍAÌ{8@D >BŃÒAns“@fë@BµäÔA›‹Ê@íBBM÷ÒAÀ£ú@¬}DB ÙËA‘NAådEB±•ÁAa!A’¤EB(µAeñ,AØ EB…F¨A׸3ADˆCBÈÚšAIÛ3A„GABKëA‚+A >BP‚AaAœI;BnLrA%c A»C8BìüfABÒé@—k6BôaA›ÔÂ@LÌ4Bš­`AÍÛ¤@Ëe3BÑbATà@ì62BÎ4cAñ”?§«ÈB÷vä?ó«,@ëiÆB BÁ?%ú†@p#ÄBEO“?ez¸@T ÂB@W5?"[ç@ ‡¿BØî½J'AÇÀ¼B@ñœ¿†‰A0ª¹ByÀg®$AJ¶Bq­YÀgÄ-A¥²B›Àäw4AùÑ®BªÀÊÌ8A¶ÎªB’ÛÁÀYü8A ¶¦B†œ×Àµ+5AÜ¢B¾DçÀ^?-Aº¡žB¢øÀп%Aý‰šBÔéÿÀÄ&A‚ –B­=þÀþçAvG“B—FùÀ^´Ô@ BÁôÀ?oª@y?†B M@|ì@vX|B¼1¼@ Cr@kB;YA—ÆS@:sXBƒAìH0@ÖPEBÃ.Am‘@)»1B$6A0©@oìB÷4A‰0@$ B9\1AÐ8H@IíAn.(AG£v@ÿÆA— AQOœ@çUŸAQ›AœwÐ@UtAç AñÐAE!+AÝApJAlÇ@žnAºø:AÑÉ÷?|… AĘA…Iµ¿ë1AÍs¼@ÑÜ@ÀDÔLAïÎ?ÊÉ{ÀÿA_A@ïº?€×ÃÁàÛy@°@!@õÄ·Á Z @T@¨î¨Á3·@Xüs@°P˜Á:ÀÀ@9»ˆ@ÿy‡ÁeiÅ@Qã”@ülÁ@õÁ@¡ ž@ÐxKÁèµ@›@)€0Áif@ôÁ“@òvÁÙ›+@w”@ÊÑ Á¨sJ?ì‘–@¡€úÀ@‰•¿û¡@Á¦ÔÀ–’3À¤¬·@éx­ÀæÝƒÀÞ˜Ù@’I~À,—Àyñö@ž!Àô[À8EAÕ–˜¿Ê>ÀJƒù@R'>5¶¿p~Ù@ÀŠt?2o>úá@éïÁˆÜFA‚°ý@&\ÛÁ)?RAd¥A¿RÅÁO!JA<Š#A‘ê¯ÁÉÏ9A!6A±-›Á÷¶%A·HAœš†ÁÁA®^A5eÁ2’ü@âwAYAÁCØÍ@ ˆA|N"ÁÏi“@PA–A$¤Áù§C@æ°¢A«n¸À€ë?Mv¬A|teÀTlÁ<>°A ý ÀÂÿ%ÀÒö¢AÌ«“¿öÁ—ÀXlAX0 ¾ZOÌÀò•yAûÃh?â¥Á©Œ\AP@(=!ÁŒÀKAR4g@;Ï@Á'1@–BdAÙ:—@èY–B AA}Œø@2x”Bc AA²XB©ê@ˆ²AeˆBözÓ@hÕ@N8BÈ ñ@Qä¢@¨tB¥ìAÿs@g€eB¡¢1Adã]@DUBgÙGA@ªA@¸ŸDBóÚYAt…'@x¸3Bq»dAÍú@—‹"B ï`AZ@…EB~]AÊ(@nB? VAWo<@áÞA¿FLAhÊh@áö»A™ IAG‚@{›AÝ{QAÕ¾Œ@ÉP}A)FeA„nñ¾‹%€BH7A‡›@å Bêô¤AõûA·ÑwB¸Ð‡A'A||kBüv>AM`º@–XB9^)Aà—•@ü/>B³>A½ˆ@ãö"Bï??A‡'“@ž£Bº9A±©@nfÙAD¶(Aé×@D ¤A­$AÚ¼AÙ__AIAAIÕ%AeCò@Cõ@΄KAÙó±?˜À@ô€bAž£—ÀUñ˜@üÖ3A&Q(ÁØîÍ@h½Ù@‘ wÁ…Úò@‡~~@ÉO«ÁAAOŸý?é`ÚÁq€½@?GAfAЛ@`.HA9‘@²&@ïFAŸê?]ä_¿«¢?A€¤ù>ðÛœÀ¯?A^?ÁÁ«ÝHAKUõ?"SÁczWA1ìŠ@Ð…ÁƒVjAŒðî@™úšÁ'&AWõ,A^®ÁêŠAO`A;¢ÂÁv%•A”–†A£ÍÚÁlç¥A$F›A„ÚðÁ¸Æ·A°|¯A:IÂïˆÍAk0ÄA¿Ú Â'ãA4sÚA_pÂåöA’ôA­Â7¯B~B5MÂ-B'BXÇ)Âp¾’@(—BÖ˜ÞÀ:‡Â@7o™B íÀ¯Zì@dÔ›BdKôÀÜ”AŸAžB7sîÀlAë ŸBéËÆÀQgAÄŸB¯ÿÀôãAîžB„òÀ8B!Aú žBl5í¾Æd#AöKžBS—Ä?œá AË÷B÷æa@ÌâA‚ƒBµA«@O‡A‘ËBá¬Ò@³_Ê@ ‰žBPOç@‹Ž@ø„ŸBݾé@0ÐA@ý¡B¿øÕ@ÏŸ÷?\ì¢B S½@¡e?B,^­@ŒnI¼o?¦B½:£@\'­@óUãA= AÓ¾Á@ÑÍA¼! AÕQá@³H¹A5 AùÚA=Ú¤APº A¯lAPºAt‰ Aœ«Ak‚tA&ŒAf¤#A—}IA|û@š~*A GAº¥à@& 0AGí@±„½@V-5Aû…Ÿ@†Ó‘@þ[:AÔ+2@|7@"uFÁà“A ¹Bä XAÆ8A,ˆB)OAôKA‡ìA íBAûA¼…ÑAŽý9A$” AVf¶A-ó4AÒAAÌX›A]m3AùýA”“€A –3AA0AˆŸNA>§+A÷ÿCA%dAuA•øUAŽ]Õ@cAA›ÏbA!ÿY@ÑA&dA Â ?(I(A¦M\AÊ@á¿r×LAú‡LAr~ÀÜrAlŸ/Až\ÁÀfX†A°éA[§êÀᎌA?]¬@zsÁ»WA"!@¨Á혊AòØ@é¼7BKª{Aø\@þš@B´’tA@QIBžkgA\y@êÐQB†]AÜ:)@ølZBIhQA è3@rþbBt;EAÔïG@ûnkBt¦8AÉÿi@gsB¼ì)A¥Óˆ@åÄzBŒ™Ae×@kì€BÌÝAn´@,œ„BìLå@²`Ì@[ˆBräÉ@@ â@ûŒB¿"¸@÷ð@WšBªŽ³@*bð@Nó’B÷е@5®à@P¬•B— »@8Á@·Y—B‰/Á@Źœ@Šd˜Bâ¾Ä@ ³Ï@“6üA'A1ïÖ@ßSêAT"A¶Õà@DœØA³³A í@ÝÆA?¨A­Óý@ÇQµA˜A AÿΣA1AlGAfA’AAamA—”€AoAÐ!A1^AQÆ Aég(AZà;A|bA¯Û/AEA{í@-—7Ašó@'Ò@e>Aq´@S ±@$6EAÏbt@o²‰@íˆFA· @ö6=@o–CA ô3?`Æ?Ó_?AD¿:ç³=ÑÞ9A¿N俽†¡¿[:È?Ff9BzÒ|A½ˆÉ?GíIB)îeA¨ªè?s|ZB uNA»@ÝûjBð¦6A33#@8zB@£AaB@@«@„B2Û@¼­„@ÕE‹Bò@1? @’‘B§Œª?‹¾¼@i“BÙO0À °ã@q¥”B«¢ÜÀ°AZ)›B‰êÁõÃAÍoŸBw”¥À6­%A2=ŸBÆX¿Ž&AǦžBna@×»AÐÌBIã@uü@,ŸBA=%‡?ò2£B®ðð@%—Àñè¨B¹xï@ÀA"ÐöÁI?Acl"A ã×Á„­PAÏv8A÷´ÁÂ5ÿµA>0nÀzóqÀRÞžA‹§CÀH¬çÀ>HˆAÒ˜¿ÿV'Á‰‚AQ‡?Ÿ¨eÁAšik@•ÁÖÅœAÍ;á@2 ¦Á¦R£A Â'A‚M¿Á¼)œAÞG]ARDÖÁI¦A~CˆAŽâëÁø|¿AöœAUÿýÁaòy?!•Axg¶A¶™@hü,A=|¥Aô©G@{ð9A!“ArŒŽ@Œ˜GA1?‚Aß„Å@;4PAü³eA´KA„ÚOAþBMA»ó!A œ;AA¢Œæ¬Aü°B•/»A‰ @äA…wµAä ÈAjØ¥AejùÁÊ™±A‘úA¤éÁV›¢A¦þrAÁâÔÁJAç¦?AÄO¾Áì—A*H A2;¨Á]ŒA°ª®@ªœ“Á]‘A·#'@\MxÁ¼ùA|º>l AÁ÷‰A7Г¿8ù ÁrB›A§LÀöɯÀWs©A?¡{ÀxP Àl¥AÃÑÀBŒH?º–A™—ÁK-@­„†A+œPÁlñZ@”uAÌë†ÁÕƒ@G‹nAÒŸ¤Áe·¬@<ÈÃ@"¼XBÒ%#Ad6¬@qMIBn0AÅ¥™@S…9B>[8AiŽ@¢Ž)BÝ5A¶¯‘@ZƒB×E2A¶g™@%~ Bè¼.AŽY¥@øfóAh $A T¸@»õÓA¦®A‹Ò@­´A ,A}äñ@Ôš•AÂA" AüÊlAh¹AðìAôt.A¼Òô@"^A'æ@%°Í@·¹-AÝÌo@."•@Î?AZd@?3‹@®,9AÌú¿NÆä½ìA#†ÀòìÀ•óØ@(œÆÀ‘ª<À®U@'À~p”AP Aw9†À…ˆA9JBA×YÞ¿SA,OJA¤<@š¨AEÆ!AuùA’,A_%ç@@nAÛŠ,A96œ@ E©Aþ)Aà h@HÞA ü/A&J@ìý BL;Az4@â %B_F?A"‘H@Pò?Bþ>:Aez@y-ZBWÍ"A}œ@dðrB'Çö@ óÔ@ÙÇ„B•@ÿæ&A˜ B,Ö—@_AgQ˜BËö@ ÆŠ@µ¶œB‹äAÞÇ·¿G¡BÊ®$AJ¼Ñ@{UFB%¨9A`3»@;u3B'?A£¯¯@´@ BY@AV³@} Bú:9A¿]¿@šÃóAøã0A¶jÓ@}ÍÍAì&Aïñ@;¨AìMAêì AcÇ‚AÛATA?‡Á‘ظ@µ{€@éê«ÁÀ­@vØ@:EËÁ†Z@gÛAÉ‹BõZvAúp;A»B„B6A/^AÙ¡uB ÈAyØ­@N*`Bõó A¾5@ï_T”@p*A•”>Ä=’@ôäÆ@jD9¿Jîˆ@¾ÿ“@¿#ÀˆD@v+Š@ÀG”Àü T@“@€‰ÓÀY@Ík˜@–¢=Bf8WA±²¡@ªDBæËOA°Í«@ç§KBj\IA­ò»@LVRBiEA_?Ó@pXB9\CA“·ì@ƒA^BÜ~AA XAôhcB_íDAkA7WhB¼òOA=ºA‡‘lBšcAÄGAMoBFs}AþA ÍpBùù‹A¯†A§‹rBƒO—AÃ.Ù@ÄtB†¨ Ad¦@‡°uB2+§Aö’\@§ wB´Ê©A‡ÚÚ?ǘvBEˆ¦AƲB>&uB¬ËŸA/G“¿TšsBˆ—A° Bv»ØAÆþ„ÇéAU¡ÊA­ö Â÷AËAL´A[!‰°A½óšA°YòÁ®UœATû~AUEØÁT’A+zBAF˜»ÁäÃ…AVìA¥‡¡Á+èoA æ†@‡ÁÆXA}²®?JÁ¶VNA{ûî<¦òðÀ!_AVHÖ½€Àš[„A¢j­¿˜ìð?4¥‚AdN·ÀÏ/‹@B×_A€1$Áz¾@§-A+AcÜÛ@•'pB¡(AA š@_[]Bt‹:ARíx@¹íHBº1RA¯AP@NÝ3B÷÷^AA:@¬zBò…_AÀÂC@ÔúBj`WAl¡Z@ÔçAdäNAÛÛ@Ñ‚¼A×ÔHA¡ƒ@=Ÿ˜AI…ZAP7h@t"€AГ{A®Zù@–¥„BßèAÎ#Ax¬€BrzAÉ^/AÞ!wB,?PAƒñA5’mB˜V-A¦zÊ@9tbBêNA¿’˜@ SB"Aå€@bBBª.A)hc@ã¥0B}4A'î`@ Bžó2AÒp@/j B0A5w‚@Yã÷AÞÑ'AÔÊ“@žFÕAðA§F°@çê²A¼¸A!äÔ@³ùA @A9Êþ@DC_AôCAäÁ AøÔA;ö@éAêG´@dPÓ@¨Œ1Au Ø?~G©@äps@ÓèBã2AÉ…Ë@ŽB,!ATAIïB²µA¯ñ A•ÿ‡B ØAqVí@gg€B({A;®@ãXrBµÍA9„‡@FMbBŠ6AbØd@ "QB;TLA }F@\~?B³„]A†Ž'@g“-BKmdAöJ@ÔlB.>_AJ»)@Á8 Bî.[A‰Œ3@£LîAß²PA<>Y@`ÊA+HAyI„@V¦Aœ KA®Z‘@ gƒAS¬[A7Ú@ñ+sAÐP‰AKžµ¾‰ƒA™“¤AÁŸèAÞ¼ôA#Afm¾@·ØA•ALÕ@„¼AëA@Dð@e± ALêA/LAyó„A AuAÚ5RAâAÔ˜A9hA_Ãå@àä$A³Î@fb¼@„ 1A²Æ]@·ö‚@ ŠxAH;ÎÁià A`§A±À7A¯b)AŠ_•A1X3A92ADƒAŒ1AÁ¶9AIwaA‡3A=[EA9=A!¨/A×RAWìA`['A@^A¹²ë@6y!AQ~fA#q¢@g¸"AmÙiAš6@E<,A0ffA Äg?ïÈ@AIœ[A®¿ÝS\A)AKAa$ê¿ ºyA°˜6A'.8ÀôŠAc½A@¡lÀs ˜A:WA¨À".£AõÂ@ãyÀyy­AEɃ@I•ZÀÈì¶Aü(@+ÂÀð¬ºAàßN@î²vB¿ë­A Ø@_ðxB AhÞA }rBÑ=‰A¬ AXiB Ü[Aß¡ü@ ]B"3AúC²@ÍàLBl,AXN@I8B[Ä2A oƒ@7K"BŒ5/A8²‹@än Br"+Aæ››@ˆ·íAEqA¾5º@ïøÂA‹ÖA¸ä@•˜A^Ð AŒ¹A„(\A×AyAqÍA®uÜ@ß:&A›j@ON—@á?AAT鑾·:´?À"AnnÀ³Ø¿¼uÄ@Ž9×Àl|7ÀôC@^cOBÍÖµArûÏ@ôÆSB·AÚAISB®n›A/“AR LB­ØyA²ùå@þ`=Bˆ3\AŸ·@Éç)Bt QAm³@©§B'íPA®=»@ÞLûAbyGAtKÑ@í¶ÏAr9Añíó@g(¤AÅá1AÂwAÚXsAúš3Ar§6Až$AšUA-÷UA'2¦@·LA9#dA>Ø>àF"Am UAÇ\Àá_cA{%-AøÁäÀ—0‰AncÅ@‹!Á>ŽAG˜?Áø+†AÊ%@k;WB'8´AOmë@,×YBÅ/®A«ŒAµWB'JŒAÞ®AÅ£JBQI`A“8»@³7B»tMA§¿©@ô¾B’ÁHA»"¯@ËoB|(DA_ŠÃ@…ùØAãæ3A÷’ë@ôj§A³/)AäÆAßÛmA„#A:Ñ5A<ðA·˜ A`¥UA®VT@‡xá@JþsA:o#Àç]¸@›`A§(ÁvÚ@Ìî)Aà¸VÁÑè AóÛ@°Æ’ÁŒ:Aîhw@­’½ÁoY A @êÁiXA|=A¦VIA©9â@|EAÖø@Íl¢@“ñGAãd@äSý?À†CA|„V?9ªÀs>A¯§ç=]êíÀç`FA½~µ?AŸFÁ4ZAY`Š@ᵄÁZÈqAÀlA\FŸÁQÉ…AÚÐBA\·Áƒ|’A0i}A})ÓÁÿQ¥AÔ€˜A–¶îÁO8¼AÍ€±AÉÂ= ÖA]²ËAÀø Â|PðAo8éAXü™¨BŸÄB©ûÂ}YB·½BFÈ%¹VöAÄf)BÄ,ÂMêëA(³0Ag08@Ôa)B°1ASTE@ ÖBv+/AGsS@`N Bè·,A}øg@LÛõA™$Aéh‚@žH×AÀŸAJ_›@ßö¸A§ÑAµ@—˜šAÆA:EÚ@ãzA1| Atò@Zn=A«A™ÿAiAèÐð@çAú‹–@+“Ò@ÎÔ3AT0£?‚îÂ@Õ9•AE;„Á7_6ÀG¤A§kÁ%u½¿ˆ ŒA0CLÁA¼É¾õA)H+Á)£&?)ß•A'x Á¯c?k/A+jÑÀ è@?’A¥AZS›Àb„×¾ʪA(“zÀSNÀÿ¨AR¿wÀxò”ÀþCŸAùXÀÛÐÀO)”Ae7ÀEzÁ@ŒA—«\À…ù#Á:—†A¹ÀÊmBÁó2„AšíY¿Ø`Á¶º†A\™ ?êª~ÁÇ×AÃÛÍ?Í¥ŽÁ’­—A“[8@ð ›Ákx A“hŒ@½¦Á§„AËzoAÙŽÍÁ~ã€A…$HAI¾Á¹JyA„9AöÝ­Á/$kAUȾ@ºïšÁ‚`Aà’8@þÀ†Á2eEAƼO?"®]ÁÒá/A1$•¿Â—*ÁD8AâoÓ¿žnâÀoPA†xš¿ÎF]Àb£qAþ µ¿1›½fÚA;OfÀz$@JŒ{AÕväÀùAƒ@þžYAÛ3'Áúߢ@Ô­0AkNYÁu°²@ô) Aïî†Áž¼@äáÖ@¼K¢ÁɽÌ@‘ùª@t´½Áu§ñ@NI¦@jÛÚÁÂ<ä@‚aAÙx‰Á€Ã}¿Í3bAŠ Á¤x…¾l|dA©*gÁy¼>OKkAÑCMÁX‚Y?ÍtAßh0Á|°?2á€A—ÖÁèÞ?³Ò†AÛ°íÀ!Î?ˆAI•³Àdz?ƒ„Ahã‚Àªsʽ ÊxAžnJÀÄÄ¿ÖÚfA:³0À¦GÀHOX‘A1Aãó1>ýŠA½E4A›K•>¡Ç€A˜¼FA»í{?M&mAëSACÇÿ?<­WAiUAV@·€CA (MA…Ÿ@ëŸ9A‹@ûŠAÐ÷A#š2BS„6ÂhcûAôð$B—.ÂKBÎBJ…'Â3Bˆ?B|g¨òA±ðAíýÂ¥¶ÝAx3ÖAILÂØÇAF!¿AßÂ6À±A…’©AN·ýÁBGŸAé”Aã¨æÁ²,‘A•DzAÃ&ÎÁî†AÒàGATÓµÁ»vA+­A…ž¡Á`Aò±@ÚJŒÁó«PARC+@uIbÁÅDA=áW?Yå Á¥lCA~Ó>èø±ÀèANA—°?Þu˜¿¦¸VAV{@†(@&?MAþ5Ð@©ô€Á8ºHA:'‘@ æ^Á†GGAnH@85Á‚­TAGyý?á' Á¦VkA–‡?_áÎÀ»A>Z|>œlƒÀÕKAn'xZÀ'«DAè@q…M?ÁCAI’¶@\‚@Z¦>A¦ÑAAçÇ@Ñ6An gAð>õ@b»AmY¤AÞüÂU1²A^BŸA²ÂéШA¸÷”A¿*öÁ±žAHÅŠA ÁìÁL˜•A&™€A4aâÁ;AÁTlA:ŽÖÁ kŽA+”SAŽ ËÁùâˆAæï=AF¿Á¯ƒAê‘#Aú•µÁ9Aù¹Aª­ÁÓ wAv}Õ@€û£Á¯¹mAú}Ÿ@[šÁI-fA²—R@opÁC `A4ˆÐ?"þ…ÁÜ#XAñÃ>š‡vÁ0¾KAx$‹¿ÅáaÁs#FA-+3À\V\Á¸ªCA'–ÀøyaÁØ}¹@hìnAè‚IAðìˆ@^±žA­=AÜT@ÖõÇAu=A7N/@&HñAGAx•*@f B;¸OA¸ø@–v"B+ÎRAè$#@¨g7BÞGRAÎè‘Bq]„?d{;A­yšB4Û?ùe1Azx¢Bvn‚@Qˆò@¼$¨B(º@ÊQ@p¬B«´@à/§¿)ѪB€¢@Èã=AÓÉmAkHASÇJAÅ|@A}« A{ [A¹8Aàþ@$ægA9óË@%©ê@Ï;rA‹ôZ@aŠÛ@Øe|A«}à>{ìÒ@ ‚‚A•G$ÀÌ>Ð@EAפ±ÀPã@Ø#uA¨ ÁÿAgíaAý,ÁQ¥Am6KAë7QÁp/Ada5AK yÁ58@AûA³¹‘ÁÔ¯KA¡oAUA¥ÁWAØÇ@¼T·ÁE|[Ab©@½LËÁ»TZAÀ–E@k+àÁ\\PA à@ðôÁ`¸=AU0?õaº¿Åz]AÛñC@ÅÇnAÆøRAô 7@3ÁfÞnAûBè?T×,Áù…„A¹:/?‰ž#Á"‘A–¶Ù¾üyÁ±tAŒMÇ¿&± Áåš©A ‡-ÀûÀ¼_¶AˆwÀÌæÀ”ÃAʲŸÀ šÕÀA4ÎA"³ËÀ×1¿ÀË¿ÒAC«þÀõç›ÀhÛÒA,ŸÁfOoÀÁ¶ÐA€8Á+eÀDÍA,KUÁ€À¢ÇAéºpÁ3±•ÀƒƒÁAh¾ƒÁþ,»À~&ºAÝ ŒÁÀúåÀ»g±AŒ‘Áï Á¢Š§A*Ø“ÁèÁ‡æA)=BÞ`*Â# øA«þ%BŠZ'Âd4B¦AB­ß Â#ßB'§öAŸ#ÂØB«kÌAÍ'¦©äA±A=wÂAwœA‰jóÁú¥ŸA8yA@ÙÁ´á–A Å/AÙ­¸ÁEAŠAóIÈ@9†šÁudsAƒÍ@IoÁ«š`Açe”>jÁÚ¡wA¤¿dÀ°bAÓqÀ@¦†?·ézAQ¹ Áåbe@‘?AÕ'XÁé‹@º&AØ•Áˆ—@„ˆAk¿ÁÍ_Ó@d Ã@|ªB†¢Ÿ@{¾ž@vîoBZ2ú@ÃÜ…@DsZB<ØAÚù_@Ä8DB .A†®?@mv-Bx3AÈM@€…B_×0AÎïf@CfÿAV)AŸ‰Š@ËKÒAüäA}?¯@Ùƒ¥A¶¦AŽÝ@Ú“rAL AºAh/A-€û@Æ AKŽ@ƒËÐ@kcKAúg‹¾fË¢@U?JA}Ó®À&W¦@´GA¯äÁK%¼@rÏ@:LdÁvÓ@²Ýƒ@}R™ÁÏç@Sƒà?Êã»Áübå@úVAR÷vAŸü?ABªAZA—9AX÷ AÇŸA§7A‹ìAðñ°Aµ¦:A “AØ$ÃAø<=AßqA7GÕA’ä@Ë B)ÆaA-/ë@â{BÑ\bAWç@"ÖBpLdALá@•%BîìjAçŽá@f,Bý¾vA‘AæT/B ¬ƒAú5 AÓÞ1B¯ÈAñÛAW3B Aæû@¹2BŸYªA@g.ÀÎ`¾B8¼Ay”g@g¸B¸§Ï@kAy:±B4O’@€LA¹£BÞ @ìM*AüÇ•BÑ2Î>“ÐÄ@ü9‹B\ ë?—@Ð’}BZRÉ@ëd@Ç]bBmAnÁ5@%„DB³?A^þ@ï¢%BƒzHA.9@‘B)BA]!Z@_ÏA>š5Aë´ @Ï„’A5Aì³ AJµ;Ab«2Aê‰IAŠ¢@<9A³JA⌿OžTAˆó@€'Ó¿:]•Aµ?ùž¾ÄH­A¤¯_AtÀøü…Á·I^Aä’ä>%à…Á¨ŠbAw?œ@IâšÁ‰lAl‰A©°Á¨yAüÅXA,ÂÁæÅ“A”®1AVÃÁ®.ŽA|æ@õ¨ÁÔ¢~A… U@,·‘ÁÒ—_A!‹>Ñ™hÁÅ'3A».«¿ü&*ÁIDA8.À‡»ÂÀZªmAæÛÀÝóâ¿É8ˆAw¨—À‰äù?¬uAz§ÁÉ£c@3>GAÉWÁÐQh@>#A†±Á+Ïr@h§×@¦q§Á°µ@€ÄÞ@ºãÊÁ°ðã@Ò”AœØ(@%3„Áv=¢A åI¼ô9~ÁôߪA÷€@ÀÇäsÁìÄ®AZÁÀybÁw°¯A¶ ÁSÁ.U¯Aô™EÁRKÁçW´A»mÁ‚Ú1Á|âÀAÜFoÁ˯Áë<ËA·çLÁ?ÝáÀhÎAÕÁ4ñîÀ SÄAŠÿÜÀŠpÁ1²Ac •Àæ‡ Á† A|µ$À,`Áj¢Añ’ð¾F\4Áÿ­‚AŽÔÍ?Ð!QÁ’¾mAI¤w@$ámÁO›VAâðÆ@©ƒÁˆ&?Añ»A6Ü‹ÁŽù9AIkArÄAÔnDAÞ¿2AÊ ä@iOA*2ø@Ö»·@ UA?å@Ùw@ÒZYAÒ·ã?¬‘ª?}ØJAr_’=‘ä¿`>AfE_¿z{ªÀÇt2AæÒh¿€ÎÁ1Q@AÕU÷>! EÁ/XAÂI@`¤uÁ°•kA«?Œ@ôzÁ‹~Aä!æ@W ¢ÁãˆATy!AÖó²Á,ýA0mMA®¶ÅÁo”AnívA žÚÁTN£A ôA¦ÓìÁ‹@µAþ^ŸAÈ_ýÁbÅAxî¯AÈ€%Š@ÃæÁ]ï@§¯@UK·ÁR” Aaø@F)ŠÁlåÞ@ö=A.ÒGÁûà¾@úÍzA’öÀËS’@«ˆA~ÎÀ|ã?n‹^AY9 ¿,eTÀ2ZA›À>^€Á6mA4@6sÁšN†A„rç@õšÁ¥ò“AYAAÔþ·ÁîM AHa„A̰ÙÁâ»A¹¤A„êöÁøþÚA§¡ÃAï9ÂsßB˜ÈAÇ> ÂÆÅB£¹™A Â>ÄûA6UVAAêÂxØB¬¤2A,”áÁ`ãQAFA¼[Ä@НOA¬}¿@÷‡@úúLA\þM@üsâ?LHA‡¸„?K(©¿`Æ@A‘1¾@yÀ¶å>A‡ä¥½:£ Á¬ãGADw? ÇEÁEÕYA?7@ê€yÁÏmlA,*­@Q–’ÁoNA¾ÚA+1¥Á‰AwÑ5A^·ÁAçA†´bAËèËÁ“›AzÊ…A:áÁ2­«ApܘAQ·óÁ ½AÊQ«AÊ+ÂÌÑAû˽ArÎ Ââ!æAL”ÒAF´Â’“ýAœ¥äA×ç ±@¾#>Á¨¦@乨@<8)Á_Šz@ªT¥@׃Á0`@œ"µ@ˆËÁT_Ž?¡Î@ ôÀxfY>Zç@ˆÍÒÀ0¿VxA+„ªÀÚ¿>xA–À.ò¿–2%A…Ü"À¢5¿Ê3&A¶Ÿ¥¿²ËÎ>Z>AO͇¾?ð¬?žuA„ª«>bä?i¿Ø@ÖJ´>ÊKÍ?Z¥@ ô—½ê]?¹@g‚¿ ¿å½Áp@Í#À²—¿BŸƒ@·qÀªôÀ9 @ˆÂŸÀà-TÀ˜¯¼@N‡BNA;í»@4 ‡B|QA²ž©@I|†BíHVA…º@…Bà¦VA¶„@Á‚Bà„JAs–@šè~B0I@Aôñ²@0ô{Bú"5A{SÕ@ÁY|BÙú(AfmAÖ€B²"A®žA.'ƒBèK A!ßAˆO†B»Q(AJ'A`‰Bv6ANTA‹BlžFAÎÐ@Ñù‹BfxSAß­˜@­‹Bž~YAhpE@,=ŠB&wUA¾Ã?)¢ˆBvNKA޾s݈B $CA D0ArËÂ@Mÿ¿AKAMfÂŒÑ?À–…[AoeÂþÁ{ÀôJkA9ôñÁŠ`¨À¯jyA:¯ÝÁñ"ÙÀ ˆˆA¼ÌÁNsÁ/¸—A ®¼ÁÜ:ÁTŒ¤AÅ…©ÁH¨-Áà5­A[Ï”Á4…AÁ{ù°AÌÕyÁ&îJÁxù³A²JÁ VÁûøµA.Áãœ[Á‚†µA‹[ÑÀ(GdÁMU³A]dÀš×pÁ¾­AõÀ$¿¼¼yÁøU¡Aì!@úã€Á®5AƆ@³)„Á(JvA¹@X …Á€?ÿÅBH9?æx¿@…^ÀB@æÄÀ¨á'A¾@ B†½ Á¦> AF“”BÂÁ5•Ê@ô‘B«2‹À† £@ pB3PÒ?Kù~@IƒB3´@…=@œpBš®Ahã@.WB¥ð8A÷—ì?ýr=B¼¦TA­¬½?°î"BIòWAÕÉé?}QB·9RAÚå@¨ÛAW±GA£N@,§AæðGA³¢@@_ÉrAD-nA€ Z¿œXsAô ApÍAP¨@pù–@Aâ[ß@a®Ð@„tò@4Â?AÝáõ@þÍ@É8ˆAäèAH1¢@îk°At'Õ@Ô AÄ5¾ÝÁÜ@“hÂ@yÀIß@œ¾f@y²ŒÀ£ç@€§†?•°ËÀµÌ×@¼¬@ªúA´‘²A°úä@:vþA1â¬AAïäB¡A²¼ Ak¦B[dAfAK0 BÛA[Ñÿ@ BšnAHø@e'B™aAZø@ÑÑ%B _A½—ü@}e0BxcA¢A&£5BÂísAØI)A-:B"ªˆAPË2AK)B¾uÐAn¯˜@—)=BÚçÔAî@^:BldÏAñ=œ”5B8ÆAëR¿õªB¥Âè@IÒƒ?;Z§B—ä@ìÍ,@ë÷£B‹ë@0ט@O–¡Bùtî@•Äá@Ý" BXWå@õÛAMçŸB°Á@ 7AßÓ Blv@TŸ&Aä;¡B¸Á?¿'A¿Z¡B‡f¿Ï"A7s¡BHºRÀCAÀv¡B`6³ÀÀ A¥N B8ùÀå$A—îBxÁ„¦AÇ{šBˆE8ÁˆÕþ@ÜA–BO—FÁÍøä@gá‘Bï>ÁÛŠ¸@óKŽB9}1ÁkÚv@§™‹B^'Áí]A 󥿵îë?ÑþHA‘ @Ÿõ…@Àú6A¾½@/ÌÆ@׋$A8´AÝ`ö@öEAÉaAóq AVA±“A›¨A$Âï@TµA(AuP×@;å×A|K#Aƒ9É@µŠúA»/A)4¿@å²B=€8A“\¼@ãP BðI;AáÕ@Ty0B_·GA|_AGð8BÏvhA5Þ/Aø¼@B¥RŒAØ(ACBy˜ªAqtAHrDB JÄAa'’@ÐìABc[ÍA+‡k?ß¡¿>¼EBþG¼AyÄi@}PMBþÉAN\ý@)÷PB*´·AÙq(Aú£NB –AWÒAˆEB?enAÀâÐ@Ä7BzæXA‡*¾@õö#B†~PAêAº@kBX#TAÄ@µÞöAÝçFA‡ÒØ@_ÊÎAÔ9A›pö@p—¦Aš‹4A¬A¥¡~Asž5A‹Ó0A8T5Aî™(AjœOAz Ø@êA³’bA¶ @šBA‘ÃWAÞ㾿•NA6As@ŽBN§;A¬ˆ@t‘ôA— 1Av‡«@JÍ»A;…!A»¤ä@΃AAQAöñAkÅAÇ=.ÀÊh¨ÀððlA¯?À• À:ãƒAžeÀac"?C¬AàÁÌô?ŠmAø=Á3iº?@e[A@«xÁ•#š?À fAÑá—Á ?TâÐ@EÒ/B^’@AeˆÉ@g¹$Bû(?AÎæÆ@˜B@ܾ…Bkß×@Çg@“™ˆBêü¹@'°ƒ@ôu‹B¦|™@2¤Ž@æLŽB´5m@ÅT›@ ÑBÚÖ@d ²@,¶’BVœ”?7ýÞ@ØZ”BF#Ä>™VAÖ¹–BŠàª½Ýã Aiø™BI¯ ¿ÈWA¦÷œBÌ”A¿2›Î@åBý [¿ñµž@ªêœBô‹ ¿÷v‚@±ÃšB…f¨½(f}@–—B`?K™L@L~QBå»A€Ø^@•ñYB1DATÜr@QbBOý@Íž•@0jBçÆñ@Ýá½@ ÁpBòð@_ëî@ëÚvBM®ô@?A‹|B¼AÕ+A}É€B:SA—~:A7#„BûA¿f:A…’‡B«1AdT.A¥£ŠB€gFAÎAvNŒB£&]A)_AezŒBm7tAü.Õ@Щ‹BMõ†A(ƒÄ@-Y‰BhS•Aøº@¿c†BKA¢A3ó²@ï‚B,­A+ï¯@Ñ›~B¨·AE˜@ÝO'BÚi,A­æ”@O¿B_4*Aˆkš@9 Bð#$A3`¥@¤týA|Aj°´@ؾâAßAajÇ@&ÈA¼[Aõ â@wέA^v A´ÁA×·“AÜ}Aì AÕ…rAä£AèëA„z=A³Kð@–"A¨È ArÐ@Ø "AT«²@4è @÷ )AÒM7@%C@xñ-A“4?ÿ7?JŠ)AUÕu¿¯À*œA|WÀ¾š Àºøë@ì‚HÀOöòÀàí²@de‰À`ù Áeš¾zƒAD¥A'y%@ntAÝ…Aåi…@ï5A#¬WAÌÝj@÷A£éKAB3@¯ûßA †NA¥o@¨7BO©[Aä@ÿ”BÜbAá/@š-Bö}hAf1@ý&AB‡cAòMN@ˆËTB›ÞLAö6y@yægB81AëÀ¨@KŒyBpA°øÕ@Z!…B,ê@y­ö@÷•ŒB¨Ë@rAŒí‘BáýË@XØ@Ϩ—Bäé@¬…{@1Ù›BV[Ñ@0Aþ?D˜B\·@Àf€?g÷AXY£AŠü @H‰óAtî®A¬Õy@ÖòAYöAD»@%-òA¡·A´+ó@šôAÍ0±AsÌ AèÕúAV~¦A“ªA¨Bà`™A2ZAD Bð#ŒAüTAÚ¼B#€A”Ý@ BúúoAíéÝ@ò¿B‘iA®Þ@3|B6[cA•±Ø@TJ$BCU`AÔBÍ@4ñ+BA¼cAl«@¨v/BjuA+x@Rz0BMÔ„A4uQ@¼Ø1BC-“A`“Z@I2B<Å¢AÅAïÝAç†ýù"A’P@/R@¸‘A’_Ö@Jk©@ðzAØu&AãS×@ÌAáãcAÀQö@òþ@’]AŽMAYÙ@°¯A¨ë A8¥º@êÎAÔIA”ÖAX#AÏúÁÞ«»ATAøVðÁ’r¥A(ayAÀŸàÁ|Œ¢AÈKA²ÎÁh§A+WAÃp¸Árp¤A2‰Ç@‚T¡ÁŽ8–AãñI@^ÑŒÁ0AV%â>ifÁ Ù™A6ê&ÀL9Áà{§A J©Àá ÁZ'ÁAbâÀ zÐÀúøÃA¹>Á2KÀÙ4³A(!Á8eH>´ÀžAï—9Á4aO@hû“A8ˆoÁW³@—Ç…An=“Áä7ó@¡{lA)¼°Áõ*AÌÐKABÉÉÁ©%AÞÖ@k„’B>ñ2Àް¾@NXŽBcbØ>­Ý’@wà†B9Å]@ç£f@t6{B\ØÍ@ò:@ä;gBD½AÁð@¾ÆQBƒ0,Aɇð?eº;B*?A æ?%B šBA„·@a{Bwa=A¼¡@ÒïAŽ(5A|¾O@ìÃAaú-A–Ž@3ÖAS0AäÒÙ@µm]Aï5AÊ AôcA"¾!A¢â;AgV@xA¡Ý2Ad»Å¾©58Aìá@¾ë¿KÀhA,­@‹u›¿˜¶„AÁº@*Ä BôÔ\Abe·@’ÙBDâZAQ·@@òBRâXAÙþµ@¡#B5üWA–å´@.&+B>ƒYA¶¸@Ž"3B¦%^AÒöÉ@f¼:B&\AW¥ì@,ð@BÆq[Aüœ AâEBÈfAõ²AÔ9JB yARš%A¦­MB#&ŠA¼ÏAÞ³OBZ™AŒi AäAQBBû¦Aýô@´vQBÜ“³AüDÅ@˜PBã¾½A*NŠ@†·MBÄàÀAŽP8@/jJBx·¸A°¢@^†FBðû«A0(\ApF£ÁÈÚ3@…“MAqÔŠÁ7 @ÖE^A¼bÁftÓ?ü^oAâ‚0Á¾ @ÚP…AbôÁ"ç@IrŠAD_¤À¼¦?¨SAÇBÀø@x¿ òfAq÷À~ÉjÀ`nNAN“ÀšÑÀ6ZAAs”À,ÁŸ}EAg¯<¿/_GÁ•s[AÄ—r?ì^oÁþtA–,@ª‹Á-„‚AÇó£@­«›Á%ŠA M÷@æ6«ÁQ:ŽAÌ%AþÊ»Á.ŠA·ÒOA–úÉÁµ‚A8\sAlÿÒÁwYÓ@úOƒBr“AòÓý@¨‚B»j‰A& A0Br&zAÎÈA®”}B/CcAö‡A¶nxBè›MA‚ AåÓqBY[?Až â@î`jB£…;AÅ@ï®bB·Y@A­°°@˳ZB~vJA@ ž@‘RBÉ­SAB“@P(JBm\A£5@õ¿AB9¥eAéè„@([9B.ínA;x@þ¼0BŠüoAx5p@b.(B€×hA;!v@ƒŠBIõbAéƒ@_×Bíu`A§6@0Bi~`AøKXA+*É@{§„Á›.fA}£@<è}ÁD¾sAd˜i@OnÁ=oA;ñ@ã¯]Áe1ˆA´ŽX?“áJÁOJAh7õ¾`ë8Á[§™Aÿä¿v )Á¥n£A¬ÀEÀ§ùÁø®A§À˜¡Ád„¹A0ܸÀ÷aÁ«™ÄAƒçÀ¯áÁÜÌAyuÁëGÁèÖÍA˜„.Áp×óÀ5ËAtÑMÁ¨7êÀëqÅAsjÁƒóÀ¬ð½A+{ÁºxÁß¶A°c}Á/>+Áì„­A}RvÁÈzEÁ„I½@ß]ƒBZŠ@é @®ÝtBL^â@¶+…@ÔYaB*3A• e@OÄLBÖö&ASw=@áÁ7BþÜ2Aåo:@Fa"Bå62A%{M@Nþ BK-/A,Çh@•ŸïA­š$A+U@Ò¯ÅAÏA'þ²@Mð›AµAû®â@×áeAíª AŒ±A´Ašçÿ@ 2"AK*Ž@wlÙ@qÕLAb?î¼F;É@6XAä"žÀI,º@µ.A²CÁaÝÍ@¶ÙÞ@LÁS‰Ü@±\{@5ì~Á"E A@LÏ@}#BÈl/A}©Ü@¯éAq#A,í@êìÆAacAìÂAàʤA PA… A‹‚A†ë Aqá!A(AAÏtÿ@k‚.AŽ?ÿ@¹Ò@ ‰9A¹æ‡@WUŠ@ðˆCA®°Œ?l¼¨?ªC4Aæž™¿Ò À_AéÃÀ#·À È@?5vÀØNÁ±™@¼ú×À=A¯Ànt¡@ÔÉ Á>Å¿Ú=ž@ü;+ÁÚ@}w­@tmeÁËkŽ@24˜@[”ÁAf@@(@@pm¨Á€?|¿ëüB<÷¯A拾öB¶‘¸AX–?5_BÙOÀA œ(@ÊHBÎÇAʉ@]˜BÉ‚ÉAþýÀ@‹ABìUÈA÷Iô@,BëÂAAA+B¼»¹AÌA?÷BV€®AÔ -AÝB]¢A>õ4AäLBt™”AÃ6Aj„ B낈A†A2AHÝ Bâ§vA 8#A‡% Bü_AìÉA»# BƪKA»Vð@' BæÊ:A¢Â@ Bd–*AÀ”@ BH4AÌ”½Šð‡Bh=LAliÏ?ŽŠ‰B f[Aã¨a@ZF‹BŒ“dAÂ}²@†EŒBÈ×^AÆ!ò@ŒÞ‹B-èQA0$ARæ‰Bô®@A,AP¤†B„<.A`¬AÆ¡‚B"ø#A^VAnÈ}Bé$"A¶jÛ@z~wB–'ATÁ¡@zµsBlË2A]ë@пlB·^>Aôlg@ïŸdB2EIAR×^@¶u\BäÊUA‡ùJ@23TB -`Aˆ>@ì·KBù:hAfË:@¦qCB/ŽsAЦ=@Ù!;BlP~AðëVA\Q~AÀ¦ÑÁUˆ‘A„\OAÏAÕÁem¨A—9AûîºÁu”§Ašt”@÷v›Á^8A:'¡>,)~Áâ«A1 À¸aÁt¯A€m*ÁúôHÁÜ[¾A2`ÁA°Á(ZÌAzI&Ám:ÙÀ²`¶AbزÀ3ÈÁÊò–A™lù¿h¨(Át„…A¸×ë?šgÁ·“Aûü´@.˜”Á6#ŸAt"Aó†±ÁŒµ£AÖÞkAtwÏÁÑÝ·Agï–AðÏêÁƒ×A{ųATuÿÁÞ9BÖøÁA.dÂàq@>ÇòAÈŸ AØ@Ü]ÙA èA%U Avl½Ad–'Aª•%Aá  AçÞ,AÛv/AŠ.Aņ0A;YCAröAïkmA$ßÀÔ•0AncAöæ°Àje[A/¥BAÁ Á‚ÖxAf:AN3Áí™zA[5¼@Qè[Á“€AÔJ[@(—ƒÁ+ÙAxT_@j ¡Á¼ó›AÑÉ-@à[ÀÁª£A€4Q?–³ÙÁÄk§A"O@eƒAà—A­x@Æy|AÛdA¢¡´@¤†AZA²¾@ÅñžAz+EA:Φ@Ò©½A|rCA«’@€|ÜA=¦FAÅÕ‡@OûAÈ=PAÂÏ„@„, BóXXAã–v@ÂBnÈ[A60w@òY,B)`A B‰@ÞÅ;B ]Aæ6˜@zéJBåmNA¾æ¯@ªÉYBtÅ>A…¦Ù@ZîgB/Ñ/A’AÍ4tB¤I1Ax8*A¶@€B¬FAZ!Aéq…B°ëlAú@zW‡Bvm‰A€In¿GN¼B°áü@.@?…|ºB"Yñ@x@î¹BBYÞ@•pŽ@6›¸BäpÎ@&)Ï@h¦·Bž¾@QJA͹µB‚î©@'¥Aƒ³²B¬å—@à+,A$>¯B8σ@ê;AŒ¡«BàÕ`@é7HAVʧBªù<@\KNAhÝ£B†˜ @*OAáŸB¢E³?·†IA®Ü›BÒ•X?Š:9A<2˜B´ÇÔ>â;&AÚ¯”B¨p¼=‹ýAŸš‘B’v@¾ýðè@1ïŽBH¨‹¾Èx³@Ñ‹ŒBø9½€JAØÒtA¤pËÁ52ŠA6MAˆ¤ÕÁ¢£A–€AÇVÄÁ,°A·™ž@¬³©Á$±Aô¬>hM”Áà°AɰÀ|î†Áœ«AH ÁÑKkÁЧA¸­pÁz6LÁ v¼A®yÁf±Án%ÌA¼2ÁËÀXSºAO÷ÑÀ³æ÷À¶XA]æMÀãã#Á³ýA Þ><’^Á€ÁœAjÌf@è¶Áî«A33ï@„ª«Áq¦£Ah:Ae ÈÁc¢A^;zA´ãÁx¢ÁAå•A4#öÁÀ>®¿1ÝKBRÌA(Z-A¤ÉMBò~©ALx:A|¾EB¼ˆ„AÏÑAÎ×ÛÁft¾A¢­‹A÷®êÁ‘oßAå©•AdŠóÁôÈBˆ AD½öÁ{•@ýCØÀÛdA„ŸA`…ÀÓ8IA}QAA4ã¿M&A°JAøx>@!jAp+%AƒU A°ÚAóA—¹eAT$A—¡Ä@/Ù¡A=U&Aw'š@ðÎÒA@(/Aá†@“ Bõ@>Aqèw@«-B+EAùUu@|I4BIAÝ)’@„ßLBÀm8A xµ@'ØdB´æAdAókxB=-AÅ6AŒŸ†Byí;AõJù@â’ŒBýØvAˆ 2@χ‹B&Z•A–>ýÕŒBÒ§AÀ @'½sBh§0AG@Øô~Br¬ Aí(@i…BX´Ø@©s@‡‹B`¿™@‡P@69Bä@)J¥@U“B*zo¿±6¿@–ÿ“B‡ŽÀâÜ@)¤”BlþÀÀ A@e™B.+Ám|AYHŸBÊèÿÀ A£› B"ŒÀIn)A€u B+Žn¿OA)A†Z B%‡-@!ˆAlÚžB_ŸÃ@{è@¤AžB:© A^p@øŸB¬AÀB*?j´£B»¯A#þ¿®µ¨Bh¥A°*þ@w)BØXAYÅñ@h B…ú]ANèï@ÌVB–ÃOAì¶ö@@ëAþ°AA`×þ@ÌÒA}û9Aø^A3ºA,8AÅp Aû%¢Aÿ×3A`-A¥Ý‰Aj5Aü‰!A\DdA µ6A2ú5A&J9Aüò)AIHAéÀ A³yA³¨YAdTÀ@×Aã#gAC@Œ~A¨:iAˆ—>ÄÜ&A’`A+Ý¿ã)KAZÍTAç1cÀ:qA$€BAÀ'jˆAà2#A ÊîÀÄß“APKËx’D@ØØØ offsets2.npy“NUMPYF{'descr': 'Pbt†˜ª¼ÎàòPKËx’DÍø½¾ðð offsets.npy“NUMPYF{'descr': 'Pbt†˜ª¼Îàò(PKËx’D1QÎ7¨_¨_ €points2.npyPKËx’D¤Œ¤b0b0b €Ñ_points.npyPKËx’D@ØØØ €)Âoffsets2.npyPKËx’DÍø½¾ðð €+Æoffsets.npyPKäDÊdipy-0.10.1/dipy/data/files/circle.npy000066400000000000000000010001201263041327500175040ustar00rootroot00000000000000“NUMPYF{'descr': '\xb7s\xd4j\xff\xff\xef?\x00\x8c\xcb]\x1fmH\xbf' tbag4 (g5 (I0 tS'b' tRp11 (I1 (I3 tg8 I00 S'\x08\x99\x85[\xcb\x92\x99?D\x0b0\tT\xd2\xe4?_6nvHI\xe8?' tbag4 (g5 (I0 tS'b' tRp12 (I1 (I3 tg8 I00 S'\xa0F\xb3R\xb0\xdb\xe2?\xc8\x95zy\xca\xac\xe8?\x00\x1f?t\xcf\xdb\xce\xbf' tbag4 (g5 (I0 tS'b' tRp13 (I1 (I3 tg8 I00 S'\xf4\xfc|[\xef\x1f\xce?T\xfci\xe6\x04\x16\xe1\xbf\xb3\xb2Y\xdd\xcb\xfc\xe9?' tbag4 (g5 (I0 tS'b' tRp14 (I1 (I3 tg8 I00 S'y/\xafK\xfb\x97\xec?i\xc9On\x9d\x07\xd1\xbfr\xffU_\x95$\xd7?' tbag4 (g5 (I0 tS'b' tRp15 (I1 (I3 tg8 I00 S'M\xc7\xb7\xbe\x00\x89\xe9?\x14B4\xe0\xf8\xc5\xc0\xbf\xbaCM\xc2"\xd3\xe2\xbf' tbag4 (g5 (I0 tS'b' tRp16 (I1 (I3 tg8 I00 S'nX\xcf\xfa8\xce\xcd?\xbck\xbf\x94\xaf\xc8\xed\xbf\x1fB\x8d,4\x0b\xd2\xbf' tbag4 (g5 (I0 tS'b' tRp17 (I1 (I3 tg8 I00 S'\x91\x95{\xef\x95\xf9\xed?\x89\xaf2 \xe7e\xc2\xbf\x17\x15\xcc\xb1\x1an\xd4\xbf' tbag4 (g5 (I0 tS'b' tRp18 (I1 (I3 tg8 I00 S'>bl\xbe`\x1f\xe0?\xe7\x80\x90i\x87\x14\xeb?\xc5K2\xf8",\xc6?' tbag4 (g5 (I0 tS'b' tRp19 (I1 (I3 tg8 I00 S'\xaf\xb5\xd9\xd8\x81\x12\xd6?dx\x8b\xc7\xf4)\xeb?\xfa\x96\x04}R\xa3\xd9?' tbag4 (g5 (I0 tS'b' tRp20 (I1 (I3 tg8 I00 S'\xfa~i\xee\x958\xdd?r*\x81\x02\xcfA\xe4?2\x06 \x86-\x01\xe4?' tbag4 (g5 (I0 tS'b' tRp21 (I1 (I3 tg8 I00 S'\x88\xe1c\x80\x9d)\xdf?\x05Q\xdb\x85\x88\x88\xd9\xbf\xc91\x8e\x19F\xdd\xe8?' tbag4 (g5 (I0 tS'b' tRp22 (I1 (I3 tg8 I00 S'\x92R\\j3\xbf\xe3?\xe7\xed\xb9,\xea\x9d\xe5?\x9aX\xf8\xe7\xfc\xd3\xd9?' tbag4 (g5 (I0 tS'b' tRp23 (I1 (I3 tg8 I00 S'=\x1b\x808\x9c~\xe2?\xe8\xd7\xe2f\x8f\x04\xbb\xbf\xc4w1Q\x17\xe5\xe9\xbf' tbag4 (g5 (I0 tS'b' tRp24 (I1 (I3 tg8 I00 S'r&;\xd6\xd6g\xea?\xbb\r1NR\xda\xe0\xbf9b\xaa~\\%\xca?' tbag4 (g5 (I0 tS'b' tRp25 (I1 (I3 tg8 I00 S"<\x1f\xfd\xab3\xa5\xec?/4\xca\xa4I\xcc\xa5?\x96|'\xc0}e\xdc?" tbag4 (g5 (I0 tS'b' tRp26 (I1 (I3 tg8 I00 S't\xb4\xb4j\xe9\x88\xd2?;.$\x9b\x90]\xe1?%\xa1\xdd\t\xe4:\xe9?' tbag4 (g5 (I0 tS'b' tRp27 (I1 (I3 tg8 I00 S'x]e]\x0bn\xbd?J\x0f\xc4Ke\xd1\xee?@hW\x9c^+\xcf?' tbag4 (g5 (I0 tS'b' tRp28 (I1 (I3 tg8 I00 S'\xef\xfa$\x95$\x9a\xe9?l\xa3\x80k2P\xda?|\xa0\x14V\xa6\xf5\xdb\xbf' tbag4 (g5 (I0 tS'b' tRp29 (I1 (I3 tg8 I00 S'S\n3q\x9e_\xe0?%\xa0)Q\x89\xf0\xea\xbf\xec\x0b\xa2\xaa4\xf8\xc5\xbf' tbag4 (g5 (I0 tS'b' tRp30 (I1 (I3 tg8 I00 S'\x8e\xd3\xb8LPF\xe9?\xf0\x89\xb6\x0f\xfe\xab\xc4?\x83\xcd\xe1\x8a\x04\xef\xe2\xbf' tbag4 (g5 (I0 tS'b' tRp31 (I1 (I3 tg8 I00 S'b\x17\xe6R\x85_\xee?F\xc3\xda/\xd4\xb5\xce?\x0e[\xde\xa9\xdd\x15\xca\xbf' tbag4 (g5 (I0 tS'b' tRp32 (I1 (I3 tg8 I00 S"lmL\x98\xaf\xb2\xcd?\xf1]\xfd\xf3\xc7\x19\xe9\xbf\xc2'\xab~Ih\xe2\xbf" tbag4 (g5 (I0 tS'b' tRp33 (I1 (I3 tg8 I00 S'M#\xcb\x89o)\x94?\x00\xb3K\xf1\\\xf8\xc7\xbf\x8f\xc0!\x8dum\xef\xbf' tbag4 (g5 (I0 tS'b' tRp34 (I1 (I3 tg8 I00 S'g\xbe\x9e\xa3\x08\xa1\xcb?\xff\xb6_%\xd9\xaa\xee?\xfb\xb3f\xc4\x10\xef\xc7\xbf' tbag4 (g5 (I0 tS'b' tRp35 (I1 (I3 tg8 I00 S'W6\xdf\xf1\xe3\xb4\xe8?\x9f\x81!zF\x80\xe3?\x83A\xd5Pb\x14\xc7\xbf' tbag4 (g5 (I0 tS'b' tRp36 (I1 (I3 tg8 I00 S'\xcar,[\xb4\x83\xc4?)\x10\xf3$a\xcc\xd6?\xe4\xe68\xbc+u\xed?' tbag4 (g5 (I0 tS'b' tRp37 (I1 (I3 tg8 I00 S'G\xe4\xfa<\xef\xa4\xc2?5^\xd2\x85\xb0\xaa\xe7?z\xc5\xe7q\x0f\x07\xe5\xbf' tbag4 (g5 (I0 tS'b' tRp38 (I1 (I3 tg8 I00 S'\x1b&\xfd\xed]c\xec?/\xf7\xa4\x9b\xd5\xf0\xda\xbf\x7f6\x1e*58\xc8\xbf' tbag4 (g5 (I0 tS'b' tRp39 (I1 (I3 tg8 I00 S'\x94\xba5\xbdd\xff\xe1?\xc2F\x9f\xe07\xfa\xce?\xa0\xd9W\x0c\xe7L\xe9\xbf' tbag4 (g5 (I0 tS'b' tRp40 (I1 (I3 tg8 I00 S'Rd\x1b\xf5\xcda\xd8?\xaf\x1d\xc4\xbf\xb1A\xc2?\xa6\xfbq}\x8e;\xed?' tbag4 (g5 (I0 tS'b' tRp41 (I1 (I3 tg8 I00 S'\xa2, /\xfd\x90\xd3?7\t^M\xd4\x85\xc9\xbf\x04\xd2[\xa6\xce\xca\xed\xbf' tbag4 (g5 (I0 tS'b' tRp42 (I1 (I3 tg8 I00 S'\x9a[\x0e\xba\x01B\xd5?\x83\xe8\x00eR\xef\xc1\xbf\xb4\xe5\xe1\xb3+\xd9\xed?' tbag4 (g5 (I0 tS'b' tRp43 (I1 (I3 tg8 I00 S'\xe1\n\r\xa4\x98\xc8\xee?v\x12m\xb5|S\xd1\xbf1iG\x81\xa3f\xa2?' tbag4 (g5 (I0 tS'b' tRp44 (I1 (I3 tg8 I00 S'\xe6=PTW\xb3\xee?\xf0\xb5@H\xbe\xe6\xca?\xa8\xd8\x8c(\xf5\x14\xc8?' tbag4 (g5 (I0 tS'b' tRp45 (I1 (I3 tg8 I00 S'X\x1e\xc6\xb9\xf8\xd6\xdc?\xa7,\xf2\x8da\x82\xec?v\xc8s\xfdP\x02\xad\xbf' tbag4 (g5 (I0 tS'b' tRp46 (I1 (I3 tg8 I00 S'\x11\xf6\x92\x19L\xa9\xe8?\xaa\x97%9\xbc5\xe4?wR\x90\xa6V\xbb\xb5?' tbag4 (g5 (I0 tS'b' tRp47 (I1 (I3 tg8 I00 S'\x178\x1dD\xee\xb3\xe6?xq\xc07"I\xda\xbfX@\x82\xb7{S\xe2\xbf' tbag4 (g5 (I0 tS'b' tRp48 (I1 (I3 tg8 I00 S'\xc7V(v?9\xe6?\xc0\xcd\x16P\xcf\x96\x99?\x1a%\xcd\xf5\x9e\x02\xe7?' tbag4 (g5 (I0 tS'b' tRp49 (I1 (I3 tg8 I00 S'\xed\x93\xa4\xc1\xbf\xcb\xe5?;\\\xfd\xd4\xe3-\xe1\xbf\x19\xc2\x1c\x0b\xeb\xdc\xdf?' tbag4 (g5 (I0 tS'b' tRp50 (I1 (I3 tg8 I00 S'\x0e\xf4m\x94V\x14\xc2?\x83\x1b\xa2Z\xbev\xe7\xbf\xdb\xa3+\x19\xc4H\xe5?' tbag4 (g5 (I0 tS'b' tRp51 (I1 (I3 tg8 I00 S'\x93\xc2\xb5N\xd6\xb5\xe7?\x00\xea7X\xbd\xfc\xd8?\xae\xfePY3|\xe1?' tbag4 (g5 (I0 tS'b' tRp52 (I1 (I3 tg8 I00 S'\x8f\x1c\x9eX\xf1\xf8\xb9?\xccjn\xd2\x88X\xea?\xdcr\xfc\xa9\xdc\xde\xe1?' tbag4 (g5 (I0 tS'b' tRp53 (I1 (I3 tg8 I00 S'\x9a\x8f\x18B\xae\xad\xe2?IhMr\xbbX\xe3?\xae\x95\xb6\xab#X\xe1\xbf' tbag4 (g5 (I0 tS'b' tRp54 (I1 (I3 tg8 I00 S'\x1c\x0bo\xe1\\>\xb6?F\x07S\x1e\xf0\x17\xd6\xbf\xea\xe8\xeb\x9b`\xe7\xed?' tbag4 (g5 (I0 tS'b' tRp55 (I1 (I3 tg8 I00 S'=3x\xe8\xbf\x9e\xe1?\xeeL\xfdq\xb2\x81\xe9\xbfK\xcc\x97y\x18\xbc\xcf?' tbag4 (g5 (I0 tS'b' tRp56 (I1 (I3 tg8 I00 S'\xf7\'\xdc\xe7\x14\xca\xea?\xf5M\x9f(\xe8\x8f\xdd?"\x98\x00' tRp171 ag76 (g77 S'\x07\x00' tRp172 aa(lp173 g76 (g77 S'u\x00' tRp174 ag76 (g77 S'\x8c\x00' tRp175 ag76 (g77 S'\x06\x00' tRp176 aa(lp177 g76 (g77 S'p\x00' tRp178 ag76 (g77 S'\x92\x00' tRp179 ag76 (g77 S'\x12\x00' tRp180 aa(lp181 g76 (g77 S']\x00' tRp182 ag76 (g77 S'\xad\x00' tRp183 ag76 (g77 S'\x07\x00' tRp184 aa(lp185 g76 (g77 S'w\x00' tRp186 ag76 (g77 S'8\x00' tRp187 ag76 (g77 S'\x10\x00' tRp188 aa(lp189 g76 (g77 S'k\x00' tRp190 ag76 (g77 S'o\x00' tRp191 ag76 (g77 S'\x04\x00' tRp192 aa(lp193 g76 (g77 S'T\x00' tRp194 ag76 (g77 S'\xa1\x00' tRp195 ag76 (g77 S'\x19\x00' tRp196 aa(lp197 g76 (g77 S'@\x00' tRp198 ag76 (g77 S'P\x00' tRp199 ag76 (g77 S'\x0c\x00' tRp200 aa(lp201 g76 (g77 S'\x8f\x00' tRp202 ag76 (g77 S'\x96\x00' tRp203 ag76 (g77 S'\x0b\x00' tRp204 aa(lp205 g76 (g77 S'(\x00' tRp206 ag76 (g77 S']\x00' tRp207 ag76 (g77 S'\x03\x00' tRp208 aa(lp209 g76 (g77 S'\x80\x00' tRp210 ag76 (g77 S'n\x00' tRp211 ag76 (g77 S'\x06\x00' tRp212 aa(lp213 g76 (g77 S'a\x00' tRp214 ag76 (g77 S'U\x00' tRp215 ag76 (g77 S'\x07\x00' tRp216 aa(lp217 g76 (g77 S'k\x00' tRp218 ag76 (g77 S'g\x00' tRp219 ag76 (g77 S'\x15\x00' tRp220 aa(lp221 g76 (g77 S'Y\x00' tRp222 ag76 (g77 S'/\x00' tRp223 ag76 (g77 S'\x0f\x00' tRp224 aa(lp225 g76 (g77 S'p\x00' tRp226 ag76 (g77 S'\x93\x00' tRp227 ag76 (g77 S'\r\x00' tRp228 aa(lp229 g76 (g77 S'h\x00' tRp230 ag76 (g77 S'?\x00' tRp231 ag76 (g77 S'\x0f\x00' tRp232 aa(lp233 g76 (g77 S'X\x00' tRp234 ag76 (g77 S'\x81\x00' tRp235 ag76 (g77 S'\x14\x00' tRp236 aa(lp237 g76 (g77 S'?\x00' tRp238 ag76 (g77 S'=\x00' tRp239 ag76 (g77 S'\x12\x00' tRp240 aa(lp241 g76 (g77 S'D\x00' tRp242 ag76 (g77 S's\x00' tRp243 ag76 (g77 S'\x13\x00' tRp244 aa(lp245 g76 (g77 S'N\x00' tRp246 ag76 (g77 S'\x9c\x00' tRp247 ag76 (g77 S'\x0e\x00' tRp248 aa(lp249 g76 (g77 S'\x1b\x00' tRp250 ag76 (g77 S'A\x00' tRp251 ag76 (g77 S'\x08\x00' tRp252 aa(lp253 g76 (g77 S'B\x00' tRp254 ag76 (g77 S'\xa5\x00' tRp255 ag76 (g77 S'\x13\x00' tRp256 aa(lp257 g76 (g77 S'}\x00' tRp258 ag76 (g77 S'\x86\x00' tRp259 ag76 (g77 S'\n\x00' tRp260 aa(lp261 g76 (g77 S'@\x00' tRp262 ag76 (g77 S'\x8e\x00' tRp263 ag76 (g77 S'\x16\x00' tRp264 aa(lp265 g76 (g77 S'$\x00' tRp266 ag76 (g77 S'\x8d\x00' tRp267 ag76 (g77 S'\x03\x00' tRp268 aa(lp269 g76 (g77 S'y\x00' tRp270 ag76 (g77 S'*\x00' tRp271 ag76 (g77 S'\x10\x00' tRp272 aa(lp273 g76 (g77 S'T\x00' tRp274 ag76 (g77 S'\xa7\x00' tRp275 ag76 (g77 S'\x07\x00' tRp276 aa(lp277 g76 (g77 S'j\x00' tRp278 ag76 (g77 S'\x82\x00' tRp279 ag76 (g77 S'\x19\x00' tRp280 aa(lp281 g76 (g77 S'M\x00' tRp282 ag76 (g77 S'q\x00' tRp283 ag76 (g77 S'\x07\x00' tRp284 aa(lp285 g76 (g77 S'?\x00' tRp286 ag76 (g77 S'\x93\x00' tRp287 ag76 (g77 S'\x04\x00' tRp288 aa(lp289 g76 (g77 S'r\x00' tRp290 ag76 (g77 S'\x8a\x00' tRp291 ag76 (g77 S'\x10\x00' tRp292 aa(lp293 g76 (g77 S'\x9b\x00' tRp294 ag76 (g77 S'\x8e\x00' tRp295 ag76 (g77 S'\x12\x00' tRp296 aa(lp297 g76 (g77 S'\x96\x00' tRp298 ag76 (g77 S'\x97\x00' tRp299 ag76 (g77 S'\x11\x00' tRp300 aa(lp301 g76 (g77 S'e\x00' tRp302 ag76 (g77 S'\xa7\x00' tRp303 ag76 (g77 S'\x0e\x00' tRp304 aa(lp305 g76 (g77 S'@\x00' tRp306 ag76 (g77 S'2\x00' tRp307 ag76 (g77 S'\x0c\x00' tRp308 aa(lp309 g76 (g77 S'[\x00' tRp310 ag76 (g77 S'r\x00' tRp311 ag76 (g77 S'\x08\x00' tRp312 aa(lp313 g76 (g77 S'e\x00' tRp314 ag76 (g77 S'w\x00' tRp315 ag76 (g77 S'\x0e\x00' tRp316 aa(lp317 g76 (g77 S'Q\x00' tRp318 ag76 (g77 S'\x8c\x00' tRp319 ag76 (g77 S'\x0c\x00' tRp320 aa(lp321 g76 (g77 S'v\x00' tRp322 ag76 (g77 S"'\x00" tRp323 ag76 (g77 S'\x11\x00' tRp324 aa(lp325 g76 (g77 S'\xa2\x00' tRp326 ag76 (g77 S'\x9d\x00' tRp327 ag76 (g77 S'\x1b\x00' tRp328 aa(lp329 g76 (g77 S'k\x00' tRp330 ag76 (g77 S'\x7f\x00' tRp331 ag76 (g77 S'\x11\x00' tRp332 aa(lp333 g76 (g77 S'S\x00' tRp334 ag76 (g77 S'\x9a\x00' tRp335 ag76 (g77 S'\x10\x00' tRp336 aasS'bs' p337 (lp338 F0 aF992.05050244317545 aF1004.0307819709187 aF992.16372365672748 aF998.64382386853549 aF989.48344613176005 aF990.58854125405651 aF987.00457077448243 aF999.88224459176058 aF990.24926647985785 aF1000.4429426677075 aF998.16475718741572 aF992.32008352195669 aF988.2706913413632 aF994.63057077140354 aF985.57914467532316 aF995.74587612477353 aF988.20307136686631 aF990.75951822578531 aF1001.1083783354445 aF991.90841421488437 aF999.6582291142721 aF988.44940351310686 aF992.31413008681807 aF994.12050886666543 aF986.85780956899418 aF1001.5717049277649 aF996.32882435626766 aF987.80747919441819 aF993.85668754423943 aF994.71195241265218 aF987.35168048372861 aF985.06260837744503 aF986.12672062268973 aF985.48928715054569 aF995.12792207504356 aF991.89399589858431 aF1002.1866327590234 aF998.2199341226268 aF990.35905828638545 aF985.10772231282237 aF992.59917742412256 aF993.6172958073148 aF990.53378981226797 aF995.47758389009357 aF992.98732183421407 aF987.55356587877088 aF997.73723515575693 aF994.56379309079273 aF990.06942752292616 aF988.51781688375172 aF1000.747909545062 aF993.96117952476254 aF994.20318850889521 aF989.75808235351883 aF988.6777283166474 aF996.2943494724866 aF988.41722440296496 aF998.1975649976838 aF985.54779099062011 aF997.88768851250029 aF988.75360728578653 aF985.37260384645003 aF994.99028798954612 aF1003.0305096565716 as.dipy-0.10.1/dipy/data/files/evenly_distributed_sphere_362.npz000066400000000000000000000321101263041327500241130ustar00rootroot00000000000000PKJÃ<­µ©@"@" vertices.npy“NUMPYF{'descr': '‚Û?@ðBè¿À¡aß? =‚Û? ðBè? ¡aß?€ÞÒâ¿À”ä? ¡aß? Xcé¿à/׿ ¡aß?` Së? ýUÆ¿€¡aß?àl¹?k¶ë¿€¡aß? m°Ñ?ˆ8ë?À%ŸÜ?`É'ç¿ÊÒà?À%ŸÜ?À%Ÿì?À%ŸÜ?`É'ç¿ÊÒà¿À%ŸÜ? m°Ñ?ˆ8ë¿À%ŸÜ?`yQÉ¿€:.í?×? øØ¿€øSë?×? ËEæ? ãã?×?`ãËé?ÀúÞ?×?àTµí¿ ìú·?×?àTµí¿€íú·¿×?€ãËé?€úÞ¿×?àËEæ?ãã¿×? øØ¿€øSë¿×?`yQÉ¿ :.í¿×?«Éá¿ 9è?À¤üÕ? ZŠá? gè? ¤üÕ?à¬ˆì¿ 'ÝÒ¿ ¤üÕ?à“s?N î?€¤üÕ?­ˆì¿'ÝÒ?€¤üÕ?àÛ ì? KHÒ¿€¤üÕ? ZŠá? gè¿€¤üÕ?¨s?ÀM î¿€¤üÕ?àÛ ì?`KHÒ?`¤üÕ?àªÉá¿ 9è¿`¤üÕ? Ðsæ¿À”ä?€£Ó?`’Bî?`Ó›»¿€£Ó?`g‚ê¿À$ýÝ¿€£Ó?ÀVFÈ?pØí¿€£Ó?ÀDÙ?k¶ë?`£Ó? g‚ê¿ $ýÝ?à€£Ó?Ðsæ¿”ä¿à€£Ó?VFÈ? pØí?À€£Ó?€’Bî?@Õ›»?À€£Ó?`DÙ?k¶ë¿À€£Ó?@ mÓ¿`½äí?ÀÈ? Ïmé?@§yâ?ÀÈ? ‘nï¿ÀÈ?@Ïmé?@§yâ¿ÀÈ?` mÓ¿`½äí¿ÀÈ?`ÌXß¿€øSë?@PuÆ?ª%å?`äYç?@PuÆ?€vÕî¿ “ØÉ¿@PuÆ? :¾ì?@ÜÊÙ¿@PuÆ?€<»¿ÀIRï¿@PuÆ?@ÌXß¿€øSë¿PuÆ?À<»¿ÀIRï?àOuÆ? :¾ì?€ÜÊÙ?àOuÆ?€vÕî¿€“ØÉ?àOuÆ? ª%å?`äYç¿àOuÆ?àPé¿@¹’â?h6Ä? i‡Ó?N î¿h6Ä?8™ï?ßò`>àg6Ä?ÀPé¿@¹’â¿àg6Ä?`i‡Ó?ÀM î?Àg6Ä? 4üß?ÀmCë?TúÃ?`úÞî?@×#Ë¿TúÃ?€šöì¿ PÙ¿TúÃ?`¨±¸?àítï¿TúÃ? ¯üä¿à{¢ç?àSúÃ?¯üä¿ |¢ç¿€SúÃ?€§±¸?àítï?`SúÃ?€šöì¿à PÙ?`SúÃ?`úÞî?À×#Ë?`SúÃ?`4üß?ÀmCë¿`SúÃ?àF?Ú¿€:.í?Úy? ËÎï¿ :¶»¿Úy?@åÄë? —Éß¿Úy?àŠ#Ê¿ÀIRï¿Úy?€l²ç?`¢å?€Ùy?Àl²ç? ¢å¿Øy? åÄë?À—Éß? ×y?‹#Ê¿ÀIRï?€×y? ËÎï¿ :¶»?€×y?àF?Ú¿€:.í¿€×y?#Ïâ?Àwãé? #Ïr> oî¿`ïÆÓ¿ #Ïr>#Ïâ¿ wãé?#Ïr> oî?ïÆÓ¿#Ïr>#Ïb>ð¿#Ïr>€€ð¿`­¿@ÿUÆ¿Àítï¿ÀÃ?@Õ›»¿Àítï¿ B|Ç¿€Àítï¿ÀÃ?@Õ›»?Àítï¿`­¿@ÿUÆ?Àítï¿àà·?`KHÒ¿À»…î¿ —Ï¿ )™Æ¿À»…î¿ '9Ó?€À»…î¿ —Ï¿ )™Æ?À»…î¿àà·?`KHÒ?À»…î¿e‰¼¿@ìôÕ¿pØí¿@q­Ò?À×#Ë¿pØí¿ 0׿€pØí¿@q­Ò?À×#Ë?pØí¿e‰¼¿@ìôÕ?pØí¿€Åå£? úÞ¿18ì¿ tTÏ?@ÜÊÙ¿18ì¿w°Ó¿€YÞÖ¿18ì¿hÕÛ¿àXQÇ¿18ì¿ì^Ý? :¶»¿18ì¿ì^Ý? :¶»?18ì¿hÕÛ¿àXQÇ?18ì¿w°Ó¿€YÞÖ?18ì¿ tTÏ?@ÜÊÙ?18ì¿€Åå£? úÞ?18ì¿ |ËÄ¿ ࿈8ë¿ ˆ8Û?`ïÆÓ¿ˆ8ë¿ ˆ8Û?`ïÆÓ?ˆ8ë¿ |ËÄ¿ à?ˆ8ë¿ ÊÒà¿€à‡8ë¿€È? §yâ¿@Ïmé¿ànß¿ ,ÖÖ¿@Ïmé¿ mã?€@Ïmé¿ànß¿ ,ÖÖ?@Ïmé¿€È? §yâ?@Ïmé¿ šê×?€—Éß¿Vé¿ ¦Ïâ? “ØÉ¿Vé¿ ¦Ïâ? “ØÉ?Vé¿ šê×?€—Éß?Vé¿@ND…¿ãã¿àUé¿ R×Ö¿`ÌHà¿àUé¿@9ã¿àXQÇ¿àUé¿@9ã¿àXQÇ?àUé¿ R×Ö¿`ÌHà?àUé¿@ND…¿ãã?àUé¿€‚ká? PÙ¿ ¬ç¿€‚ká? PÙ? ¬ç¿`†Ê¿àwz俬ç¿ÀAˆå¿€¬ç¿`†Ê¿àwzä?¬ç¿À0FÔ?@¢å¿àëlå¿€VPá¿€ÌHà¿àëlå¿@nÖä¿ YÞÖ¿àëlå¿à1”ç? ìú·¿àëlå¿à1”ç?€íú·?àëlå¿ VPá¿`ÌHà?àëlå¿ 0FÔ?@¢å?àëlå¿@ê½Á?`äYç¿Àëlå¿@nÖä¿@YÞÖ?Àëlå¿ê½Á?`äYç?Àëlå¿@íЯ¿ gè¿àåšä¿ !xÙ¿@(éä¿Àåšä¿ zçß?@¹’â¿Àåšä¿ ô—æ?'ÝÒ¿Àåšä¿ ’Òç¿ )™Æ¿Àåšä¿@’Òç¿`)™Æ?Àåšä¿ ô—æ?@'ÝÒ?Àåšä¿@zçß?@¹’â?Àåšä¿à!xÙ¿@(éä?Àåšä¿àîЯ¿€gè? åšä¿@W£ä?à$ýÝ¿ ÂQã¿@W£ä?à$ýÝ? ÂQã¿ :ˆÏ¿ ðBè¿€ÂQã¿ :ˆÏ¿ ðBè?€ÂQã¿€‘‚é¿€`ÂQã¿`ÊÒÐ? wãé¿ ÊÒà¿©æ¿ à¿ ÊÒ࿈8ë?#Ïr> ÊÒà¿ÀÉÒÐ?Àwãé? ÊÒà¿ ©æ¿Àÿÿß?ÊÒà¿€¸zµ?ÀmCë¿à¬‰à¿à«´Û?|¢ç¿à¬‰à¿`y2â¿xzä¿à¬‰à¿@né¿@ìôտଉà¿;Âê?@|ǿଉà¿;Âê?à@|Ç?ଉ࿀né¿ÀëôÕ?ଉ࿠y2â¿Àwzä?ଉ࿀«´Û?|¢ç?ଉà¿`·zµ?ÀmCë?ଉ࿠ÞÒâ?”ä?¢aß¿ài¹¿k¶ë¿À¡aß¿@Xcé? /׿À¡aß¿@ Së¿@ÿUÆ¿À¡aß¿>‚Û¿@ðBè?À¡aß¿ =‚Û¿ ðBè¿ ¡aß¿€ÞÒâ?À”ä¿ ¡aß¿ Xcé?à/×? ¡aß¿` Së¿ ýUÆ?€¡aß¿àl¹¿k¶ë?€¡aß¿ m°Ñ¿ˆ8ë¿À%ŸÜ¿`É'ç?ÊÒà¿À%ŸÜ¿À%Ÿì¿€À%ŸÜ¿`É'ç?ÊÒà?À%ŸÜ¿ m°Ñ¿ˆ8ë?À%ŸÜ¿`yQÉ?€:.í¿׿ øØ?€øSë¿׿ ËEæ¿ ãã¿׿`ãËé¿ÀúÞ¿׿àTµí? ìú·¿׿àTµí?€íú·?׿€ãËé¿€úÞ?׿àËEæ¿ãã?׿ øØ?€øSë?׿`yQÉ? :.í?׿«Éá? 9è¿À¤üÕ¿ ZŠá¿ gè¿ ¤üտଈì? 'ÝÒ? ¤üÕ¿à“s¿N î¿€¤üÕ¿­ˆì?'ÝÒ¿€¤üÕ¿àÛ ì¿ KHÒ?€¤üÕ¿ ZŠá¿ gè?€¤üÕ¿¨s¿ÀM î?€¤üÕ¿àÛ ì¿`KHÒ¿`¤üÕ¿àªÉá? 9è?`¤üÕ¿ Ðsæ?À”ä¿€£Ó¿`’Bî¿`Ó›»?€£Ó¿`g‚ê?À$ýÝ?€£Ó¿ÀVFÈ¿pØí?€£Ó¿ÀDÙ¿k¶ë¿`£Ó¿ g‚ê? $ýÝ¿à€£Ó¿Ðsæ?”ä?à€£Ó¿VFÈ¿ pØí¿À€£Ó¿€’Bî¿@Õ›»¿À€£Ó¿`DÙ¿k¶ë?À€£Ó¿@ mÓ?`½äí¿ÀÈ¿ Ïmé¿@§yâ¿ÀÈ¿ ‘nï?€ÀÈ¿@Ïmé¿@§yâ?ÀÈ¿` mÓ?`½äí?ÀÈ¿`ÌXß?€øSë¿@PuÆ¿ª%å¿`äYç¿@PuÆ¿€vÕî? “ØÉ?@PuÆ¿ :¾ì¿@ÜÊÙ?@PuÆ¿€<»?ÀIRï?@PuÆ¿@ÌXß?€øSë?PuÆ¿À<»?ÀIRï¿àOuÆ¿ :¾ì¿€ÜÊÙ¿àOuÆ¿€vÕî?€“ØÉ¿àOuÆ¿ ª%å¿`äYç?àOuÆ¿àPé?@¹’â¿h6Ä¿ i‡Ó¿N î?h6Ä¿8™ï¿ßò`¾àg6Ä¿ÀPé?@¹’â?àg6Ä¿`i‡Ó¿ÀM î¿Àg6Ä¿ 4üß¿ÀmCë¿Túÿ`úÞî¿@×#Ë?Túÿ€šöì? PÙ?Túÿ`¨±¸¿àítï?Túÿ ¯üä?à{¢ç¿àSúÿ¯üä? |¢ç?€Súÿ€§±¸¿àítï¿`Súÿ€šöì?à PÙ¿`Súÿ`úÞî¿À×#Ë¿`Súÿ`4üß¿ÀmCë?`SúÿàF?Ú?€:.í¿Úy¿ ËÎï? :¶»?Úy¿@åÄë¿ —Éß?Úy¿àŠ#Ê?ÀIRï?Úy¿€l²ç¿`¢å¿€Ùy¿Àl²ç¿ ¢å?Øy¿ åÄë¿À—Éß¿ ×y¿‹#Ê?ÀIRï¿€×y¿ ËÎï? :¶»¿€×y¿àF?Ú?€:.í?€×y¿#Ïâ¿Àwãé¿ #Ïr¾ oî?`ïÆÓ? #Ïr¾#Ïâ? wãé¿#Ïr¾ oî¿ïÆÓ?#Ïr¾#Ïb¾ð?#Ïr¾PKJÃ0) *5 *1+B1+",8",2-F2-%.@%.'/D'/(0=(0*1A*1,2E,2?$3R?3>)4S>44 5M457!6N76C&7VC7;"8P;8<#9O<93:L3:B+;WB;F-<ZF<:(=Q:=I0>G.?6%@U6@5*AT5AK1BH/C9'DY9D8,EX8EJ2F@.G]@G?aGafGD/H[DHCbHbhH=0I\=I>`I`eIE2J_EJFdJdiJA1K^AKBcKcgKR3LS4MV7NZ<OW;PL:QM5TN6UP8XO9YYD[Q=\U@]TA^XE_>S`‚e`u‚`?Ra~fat~aCVb€hbv€bBWcgcycFZdid{d\Ie]Gf^Kg[Hh_JikLjLQjRLktRkSMluSllMmMTmoNnNUnVNovVoWPpyWppPqPXqsOrOYrZOs{ZsaRt`SubVvjQwQ\wnUxU]xcWyqXzX_zdZ{mT|T^|rY}Y[}ƒf~t ~†gy„h€vž€‡i{Ÿ…e‚uœ‚x]ƒ]fƒ}[„[h„w\…\e…|^†^g†z_‡_i‡kjˆkˆŽl‰lm‰onŠoŠp‹pq‹srŒ‘sŒtk tulŽœuŽvožvypy{s‘Ÿ{‘Œr’r}’ˆj“jw“‰m”m|”Šn•nx•‹q–qz–ƒ~—£ƒ—‡˜¥‡˜†™¤†™„€š¡„š…‚›¢…››‚œ™š€ž˜Ÿ—~ ’}¡}„¡“w¢w…¢•x£xƒ£”|¤|†¤–z¥z‡¥ˆ¦²¦Š§±§‹¨³¨‘Œ©´‘©Ž‰ª°Žª¨‹«‹–«ª‰¬‰”¬¦ˆ­ˆ“­§Š®Š•®©Œ¯Œ’¯œŽ°dœ°ž±až± ²` ²³c³Ÿ‘´bŸ´·¶µ¹·µ¶¸µº¹µ¸ºµ¼¸¶À¼¶»À¶»¶·Á»·½Á·¾º¸Â¾¸¼Â¸½·¹Ã½¹¿Ã¹¿¹ºÄ¿º¾ÄºÅÀ»ÆÅ»È¼ÇȼÉÁ½ÊɽÌľË̾ÍÿÎͿǼÀÏÇÀÅÏÀÆ»ÁÐÆÁÉÐÁ˾ÂÓËÂÈÓÂʽÃÑÊÃÍÑÃοÄÒÎÄÌÒÄÝÏÅÔÝÅÔÅÆÙÔÆÕÈÇÞÕÇßÓÈÕßÈÚÐÉÖÚÉÖÉÊÛÖÊ×ÌËà×ËáÒÌ×áÌÜÑÍØÜÍØÍÎâØÎÞÇÏåÞÏÝåÏÙÆÐãÙÐÚãÐÛÊÑäÛÑÜäÑâÎÒçâÒáçÒàËÓæàÓßæÓïÝÔèïÔêßÕéêÕëÚÖìëÖíá×ðí×îÜØñîØèÔÙôèÙõãÚëõÚìÖÛøìÛùäÜîùÜòåÝïòÝéÕÞóéÞöæßêößð×à÷ðàúçáíúáñØâûñâôÙãüôãõüãøÛäýøäùýäóÞåþóåòþå÷àæ÷æöæûâçÿûçúÿçïèèêéé öê ê õë ëëì ì úí íùîîòïïíð ðîññþòòéóèôüõ õö ö ð÷ ìøýùùÿú úñûüýþÿ  !!"$# $('( %%&,ô) )ó*!*" "1 # #- ø +$ + ÷ .% . & &/ ''2û0(0229,,: --8 11; //<óþôüøý÷ûÿþ7:7:ü38384;4;ý5959ÿ6<6< ==HB= )B C>!*C!!>">I"$?#?J#D?$+D$E@%.E%%@&@K&(A'AG'FA(0F(UB)QC*SD+H,HW,#J-JX-RE.&K/KZ/TF0"I1IY1'G2GV2)38L3LU3.4;N4NR4+59O5OS506<M6MT6*7:P7PQ7XL8-X8VO92V9WP:,W:YN;1Y;ZM</Z<B[=[b=C_>_a>D\?\c?E]@]`@F^A^dAg[BUgBe_CQeCf\DSfDh]ERhEi^FTiFd°GAdGb´H=bHa±I>aIc³J?cJ`²K@`KX¨L¨«LZ¦M¦­MY§N§®NVªOª¬OW©P©¯PP¯Q*7Q¯eQN®R.4R®hRO¬S+5S¬fSM­T06T­iTL«U)3U«gU°ªVG°V´©WH´W³¨XJ³X±§YI±Y²¦ZK²Z¥˜[g¥[¤™\f¤\£—]h£]¢›^i¢^¡š_e¡_]—`— `_šašža[˜b˜Ÿb\™c™c^›d›œd¯’e’¡e¬”f”¤f«–g–¥g®•h•£h­“i“¢iPKJÃ<­µ©@"@" ¤vertices.npyPKJÃÆx¶khh vertices.npy“NUMPYF{'descr': '‰‘ä½^œ.=ÁÀ½šŽ9>p\e¾šŽ9>ÁÀ½øð¬=bb¾•é‹>bb¾øð¬=ÌrÞ¼æÙ9¾¤×f>‚B¤>3Ú¬¾3Ú¬¾‚B¤>¤×f>æÙ9¾ÌrÞ¼˜§¾˜§¾/Eÿ=™„Î>/Eÿ=iƒ ¾M>¹>/ùä¾M>¹>iƒ ¾U’¾ƒ'⾃'â¾U’¾>Iƒ æ>ƒ æ>fâ‡>>I<á[&>AÄÙ¾AÄÙ¾á[&>Q–?3ƽ/¹¾•åÑ>-¹?ý¿ý¿.¹?•åÑ>.¹¾3ƽ6ic=œž>K̾<¿×?×?<¿J̾ž>@ic=ËæI>q%¿~W#?q%¿ËæI> W¾”Í ?Ê .¿•Í ?¼ W¾Ú`#?ãº+¿ãº+¿Û`#?/ùä>—6X½M>¹¾-ùä>K>¹¾‚6X½2 ø¾8ü#¿‰ÿ1?‰ÿ1?8ü#¿1 ø¾Ç«®>'cµ=Ç«®>,cµ=Ýá¿Ýá¿W•i>ùÞ #¾žè¡¾³$?×ä+?-E¿-E¿Øä+?´$?™è¡¾Ö #¾9ël“@¿ØYõ>Ó3â¾·Y½¼zóó=\4½>Añ¿E7¿éhJ?éhJ?E7¿Añ¿\4½>~óó=7f‚>á±*¿ŽýR?á±*¿7f‚>S–†¾H-0?@ÄY¿N–†¾I-0?g@¾˜yȾþ»?"@C?<¯W¿<¯W¿•yȾ#@C?ÿ»?_@¾¾C¿xhæ; Z?¿C¿azQ¿.—R?.—R?azQ¿ Z? iæ;¦ƒ>DG¿Sç]?È¿äÉ>ÞÉ>È¿DG¿±ƒ>Sç]?iƒ>K>9¿.ùd?K>9¿iƒ>.0?NçO¾Õ ¸¾RßH?Åþh¿Åþh¿DçO¾TßH?00?Ð ¸¾ùQd¿,ÖY?ß³‡½.Kø¾Ý—?+ÖY?øQd¿+Kø¾Ó³‡½ß—?x‹ö>¸ä¿wg?xg?u[¿·ä¿ÏWœ=ÊWœ=u[¿x‹ö>–Š»>§›5¿½o?¶N¿Z%Y>U%Y>¸N¿¾o?§›5¿™Š»>þá—¾-ÑF?^Àu¿-ÑF?ùá—¾—|r¿0ùä¾áº+?eƒ ¾mƒ ¾&Ÿ\?—|r¿&Ÿ\?ãº+?,ùä¾ Ø?öü¿¯k?Ìk¿J 5;'5;Ík¿¯k?õü¿ Ø?+Ä™>^HI¿^HI¿,Ä™>Ìx?´ûå>ü.¿”‘u?¨Ö^¿Û>Ú>¨Ö^¿“‘u?ü.¿´ûå>.ø??]™|¿š3ľ^h¾fh¾’¾X?]™|¿“¾X?/ø??•3ľ™!¿àv¿øF½#?Eðj?G½áv¿Eðj?#?˜!¿.Ç@¿¢Ä>‡2Y¿õ`}?†2Y¿.Ç@¿º+j>·+j>õ`}?¤Ä>$¿Iáv?½gk¿}?lˆ”=cˆ”=½gk¿Iáv?$¿~?y?qxs¿y¿qxs?y3%Ù|¿pqè>d¿ò5?ó5¿d?^0 >rqè¾%Ù|?Y0 ¾x7ž>€¿{7ž¾¼O?½O¿€^œ.½‰‘ä=\C ¾‰‘ä=^œ.½ÁÀ=šŽ9¾p\e>šŽ9¾ÁÀ=øð¬½bb>•鋾bb>øð¬½ÌrÞ<æÙ9>¤×f¾‚B¤¾3Ú¬>3Ú¬>‚B¤¾¤×f¾æÙ9>ÌrÞ<˜§>˜§>/Eÿ½™„ξ/Eÿ½iƒ >M>¹¾/ùä>M>¹¾iƒ >U’>ƒ'â>ƒ'â>U’>>I¼f⇾ƒ 澃 æ¾f⇾>I¼á[&¾AÄÙ>AÄÙ>á[&¾Q–¿3Æ=/¹>•åѾ-¹¿ý?ý?.¹¿•åѾ.¹>3Æ=6ic½œž¾KÌ><?׿׿<?JÌ>ž¾@ic½ËæI¾q%?~W#¿q%?ËæI¾Â W>”Í ¿Ê .?•Í ¿¼ W>Ú`#¿ãº+?ãº+?Û`#¿/ùä¾—6X=M>¹>-ùä¾K>¹>‚6X=2 ø>8ü#?‰ÿ1¿‰ÿ1¿8ü#?1 ø>Ç«®¾'cµ½Ç«®¾,cµ½Ýá?Ýá?W•i¾ù<¿W•i¾Þ #>žè¡>³$¿×ä+¿-E?-E?Øä+¿´$¿™è¡>Ö #>9ë<¿m“@?9ë<¿ÞY½<Õ3â>ÖYõ¾l“@?ØYõ¾Ó3â>·Y½H-0¿@ÄY?N–†>I-0¿g@>˜yÈ>þ»¿"@C¿<¯W?<¯W?•yÈ>#@C¿ÿ»¿_@>¾C?xhæ» Z¿¿C?azQ?.—R¿.—R¿azQ? Z¿ i滦ƒ¾DG?Sç]¿È?äɾÞɾÈ?DG?±ƒ¾Sç]¿iƒ¾K>9?.ùd¿K>9?iƒ¾.0¿NçO>Õ ¸>RßH¿Åþh?Åþh?DçO>TßH¿00¿Ð ¸>ùQd?,ÖY¿ß³‡=.Kø>Ý—¿+ÖY¿øQd?+Kø>Ó³‡=ß—¿x‹ö¾¸ä?wg¿xg¿u[?·ä?ÏWœ½ÊWœ½u[?x‹ö¾–Š»¾§›5?½o¿¶N?Z%Y¾U%Y¾¸N?¾o¿§›5?™Š»¾þá—>-ÑF¿^Àu?-ÑF¿ùá—>—|r?0ùä>áº+¿eƒ >mƒ >&Ÿ\¿—|r?&Ÿ\¿ãº+¿,ùä> Ø¿öü?¯k¿Ìk?J 5»'5»Ík?¯k¿õü? Ø¿+Ä™¾^HI?^HI?,Ä™¾Ìx¿´ûå¾ü.?”‘u¿¨Ö^?Û¾Ú¾¨Ö^?“‘u¿ü.?´ûå¾.ø?¿]™|?š3Ä>^h>fh>’¾X¿]™|?“¾X¿/ø?¿•3Ä>™!?àv?øF=#¿Eðj¿G=áv?Eðj¿#¿˜!?.Ç@?¢ľ‡2Y?õ`}¿†2Y?.Ç@?º+j¾·+j¾õ`}¿¤ľ$?Iáv¿½gk?}¿lˆ”½cˆ”½½gk?Iáv¿$?~¿y¿qxs?y?qxs¿y³%Ù|?pqè¾d?ò5¿ó5?d¿^0 ¾rqè>%Ù|¿Y0 >x7ž¾€?{7ž>¼O¿½O?eY>“¦=“¦½eY¾¨"Z>©Ð>©Ð¾¨"Z¾Œ…>z$>z$¾Œ…¾ø:±>ê—>Û5‡>Âú>±-¦=±-¦½Âú¾Û5‡¾ê—¾ø:±¾ÄÆr>ÄÆr¾iÄ>iľBÄÙ>R–†>R–†¾BÄÙ¾ÄU¾>]0 >]0 ¾ÄU¾¾ Öï>\ºÅ>ÍC>ÍC¾\ºÅ¾ Öï¾?{7ž>{7ž¾¿ør?“l?M™Ì>4fˆ>D™¨=H™¨½3fˆ¾L™Ì¾”l¿ør¿øû? î?rqè>»gt>ÌC>ÊC¾½gt¾rqè¾ î¿øû¿åX?À>À¾åX¿†%?L™Ì>-¹³K™Ì¾!†%¿R–†>à[&>ä[&¾P–†¾Q–¿I-0?y?Q–?y¿J-0¿Œ ?›>š>Âú>¿ú¾œ>š¾Œ ¿È¿•Ê3?È?•Ê3¿¦&Þ>¦&Þ¾R¹3?R¹3¿B?ó5?!î?\ºÅ>¸n¨=Æn¨½YºÅ¾ î¿ô5¿B¿Û5‡>^fa>Ú5‡¾JH?ȼ%?È?`fa¾È¿É¼%¿JH¿ëJ?6?=?Æi·>©Ð>¨Ð¾Æi·¾Œ=¿6¿ëJ¿ñ©H?¾ø>¾ø¾ñ©H¿½O??y–³¾O¿þÿÿ¾• X? 7B?åX?iÄ>WC >^C ¾ 7B¿iľãX¿• X¿™›1¿××\?R¹3?˜›1?™é‹>Œ…>‹…¾šé‹¾R¹3¿××\¿l]?–„Î>fY>¸š¿ð©H¿ñ©H?¶š?œ„ξl]¿\Y¾@ÄY?P–?P–¿@ÄY¿ùû?d?åW? Öï>´n¨=Æn¨½d¿Öï¾øû¿çW¿\fa>õ:±¾úŽj?x»G?•Ê3?÷:±>`fa¾y»G¿úŽj¿”Ê3¿ëJ?¶ñ3?§"Z>§"Z¾Æi·¾¶ñ3¿:Ÿl¿:Ÿl?Åi·>ëJ¿l]?¶š?‡¦½¾ø¾I@j¿J@j?¼ø>”¦=¸š¿l]¿8¹i?÷r?-¹³÷r¿8¹i¿ä[&¾@ÄY?I-0?qxs¿qxs?BÄÙ>Ü[&>>ÄÙ¾H-0¿AÄY¿JH?x»G?ç—¾œ>š¾ew¿ew?š>š>ê—>y»G¿JH¿:Ÿl?Œ=?Œ=¿:Ÿl¿•†Â2××\?˜›1?z$>¥&Þ¾—Av¿—Av?¥&Þ>z$¾˜›1¿××\¿ †%?K™¨½7¹i?œ¿v¿œ¿v?“l?<™¨=’l¿†%¿8¹i¿æW?½gt¾%Ù|¿B?ÀU¾¾%Ù|?·gt>ÃU¾>B¿çW¿É¼%?úŽj?Œ ?´-¦=Œ ¿É¼%¿ew¿ew?«-¦½úŽj¿ 7B?ÀÆr¾À¾• X?f}¿g}?À>ÃÆr> 7B¿• X¿¾O?{7ž¾½O?x7ž¾€¿_0 ¾d?sqè¾ô5?ó5?qqè¾%Ù|¿d?X0 ¾%Ù|¿qxs?xáI³qxs?y?y?€eY¾“¦½€“¦=eY>¨"Z¾©Ð¾€©Ð>¨"Z>Œ…¾z$¾€z$>Œ…>ø:±¾ê—¾Û5‡¾Âú¾±-¦½±-¦=Âú>Û5‡>ê—>ø:±>ÄÆr¾ÄÆr>iľ€iÄ>BÄÙ¾R–†¾€R–†>BÄÙ>ÄU¾¾]0 ¾]0 >ÄU¾> Öï¾\ºÅ¾ÍC¾ÍC>\ºÅ> Öï>¿{7ž¾{7ž>?€ør¿“l¿M™Ì¾4fˆ¾D™¨½H™¨=3fˆ>L™Ì>”l?ør?øû¿ î¿rqè¾»gt¾ÌC¾ÊC>½gt>rqè> î?øû?åX¿À¾€À>åX?†%¿L™Ì¾-¹3K™Ì>!†%?R–†¾à[&¾ä[&>P–†>Q–?I-0¿y¿Q–¿y?J-0?Œ ¿›>š¾Âú¾¿ú>œ>š>Œ ?È?•Ê3¿È¿•Ê3?¦&Þ¾¦&Þ>R¹3¿€R¹3?B¿ó5¿!î¿\ºÅ¾¸n¨½Æn¨=YºÅ> î?ô5?B?Û5‡¾^fa¾Ú5‡>JH¿È¼%¿È¿`fa>È?ɼ%?JH?ëJ¿6¿=¿Æi·¾©Ð¾¨Ð>Æi·>Œ=?6?ëJ?ñ©H¿¾ø¾€¾ø>ñ©H?½O¿¿y–3¾O?þÿÿ>• X¿ 7B¿åX¿iľWC ¾^C > 7B?iÄ>ãX?• X?™›1?××\¿R¹3¿˜›1¿™é‹¾Œ…¾‹…>šé‹>R¹3?××\?l]¿–„ξfY¾¸š?ð©H?ñ©H¿¶š¿œ„Î>l]?\Y>@ÄY¿P–¿€P–?@ÄY?ùû¿d¿åW¿ Öï¾´n¨½Æn¨=d?Öï>øû?çW?\fa¾õ:±>úŽj¿x»G¿•Ê3¿÷:±¾`fa>y»G?úŽj?”Ê3?ëJ¿¶ñ3¿§"Z¾§"Z>Æi·>¶ñ3?:Ÿl?:Ÿl¿Åi·¾ëJ?l]¿¶š¿‡¦=¾ø>I@j?J@j¿¼ø¾”¦½¸š?l]?8¹i¿÷r¿-¹3÷r?8¹i?ä[&>@ÄY¿I-0¿qxs?qxs¿BÄÙ¾Ü[&¾>ÄÙ>H-0?AÄY?JH¿x»G¿ç—>œ>š>ew?ew¿š>š¾ê—¾y»G?JH?:Ÿl¿Œ=¿Œ=?:Ÿl?•†Â²××\¿˜›1¿z$¾¥&Þ>—Av?—Av¿¥&Þ¾z$>˜›1?××\? †%¿K™¨=7¹i¿œ¿v?œ¿v¿“l¿<™¨½’l?†%?8¹i?æW¿½gt>%Ù|?B¿ÀU¾>%Ù|¿·gt¾ÃU¾¾B?çW?ɼ%¿úŽj¿Œ ¿´-¦½Œ ?ɼ%?ew?ew¿«-¦=úŽj? 7B¿ÀÆr>À>• X¿f}?g}¿À¾ÃÆr¾ 7B?• X?¾O¿{7ž>½O¿x7ž>€?_0 >d¿sqè>ô5¿ó5¿qqè>%Ù|?d¿X0 >%Ù|?qxs¿xáI3qxs¿y¿y¿€?g}?g}?g}?g}?g}?ä~y?ä~y?ä~y?ä~y?ä~y?—Av?—Av?—Av?—Av?—Av?­p?­p?­p?­p?­p?­p?­p?­p?­p?­p?J@j?J@j?I@j?I@j?I@j?.ùd?.ùd?.ùd?.ùd?.ùd?‚'b?‚'b?‚'b?‚'b?'b?'b?'b?'b?'b?'b?@ÄY?@ÄY?@ÄY?@ÄY??ÄY?”åQ?”åQ?”åQ?”åQ?”åQ?”åQ?”åQ?”åQ?”åQ?“åQ?JL?JL?JL?JL?JL?JL?JL?JL?JL?IL?/E?/E?/E?/E?/E?Ƽ;?Ƽ;?Ƽ;?Ƽ;?ż;?L>9?L>9?L>9?L>9?L>9?K>9?K>9?K>9?K>9?K>9?·Ò4?·Ò4?·Ò4?·Ò4?·Ò4?·Ò4?·Ò4?¶Ò4?¶Ò4?¶Ò4?,³,?,³,?+³,?+³,?+³,?›è!?›è!?›è!?›è!?›è!?›è!?›è!?›è!?›è!?›è!?Xû?Xû?Xû?Wû?Wû?Wû?Wû?Wû?Wû?Wû?Ö?Ö?Ö?Ö?Ö?Ö?Ö?Ö?Ö?Ö?¼ú?¼ú?¼ú?¼ú?¼ú?Q–?Q–?Q–?Q–?P–?åL?åL?åL?åL?åL?åL?åL?äL?äL?äL?îv?ív?ív?ív?ív?ív?ív?ív?ív?ív?dNö>dNö>dNö>dNö>dNö>cNö>cNö>cNö>cNö>bNö>.ùä>.ùä>.ùä>.ùä>.ùä>KçÏ>JçÏ>JçÏ>JçÏ>JçÏ>JçÏ>JçÏ>IçÏ>IçÏ>IçÏ>åJÊ>åJÊ>äJÊ>äJÊ>äJÊ>äJÊ>äJÊ>äJÊ>äJÊ>ãJÊ>tu¿>tu¿>tu¿>tu¿>tu¿>tu¿>tu¿>su¿>su¿>su¿>º¬¯>º¬¯>º¬¯>º¬¯>º¬¯>¶¬¯>¶¬¯>¶¬¯>¶¬¯>¶¬¯>,k>+k>+k>*k>*k>kƒ>jƒ>jƒ>jƒ>iƒ>iƒ>iƒ>iƒ>hƒ>hƒ>Õœƒ>Õœƒ>Õœƒ>Õœƒ>Õœƒ>Ôœƒ>Ôœƒ>Ôœƒ>Ôœƒ>Óœƒ>&*q>&*q>&*q>&*q>%*q>Šn>Šn>Šn>Šn>Šn>‰n>‰n>‰n>‰n>‰n>,k>,k>+k>+k>*k>*k>*k>*k>)k>)k>G>G>G>G>ÿF>üF>üF>ûF>ûF>úF>ñ~ð=ð~ð=ð~ð=ð~ð=ð~ð=ð~ð=ð~ð=ï~ð=ï~ð=ï~ð=ÎTð=ÎTð=ÎTð=ÍTð=ÍTð=ÀTð=ÀTð=ÀTð=ÀTð=ÀTð=y–3y–3y–3y–3y–3FY3EY3EY3DY3DY3DY3DY3CY3CY3CY3P–†'P–†'€€¿g}¿g}¿g}¿g}¿g}¿ä~y¿ä~y¿ä~y¿ä~y¿ä~y¿—Av¿—Av¿—Av¿—Av¿—Av¿­p¿­p¿­p¿­p¿­p¿­p¿­p¿­p¿­p¿­p¿J@j¿J@j¿I@j¿I@j¿I@j¿.ùd¿.ùd¿.ùd¿.ùd¿.ùd¿‚'b¿‚'b¿‚'b¿‚'b¿'b¿'b¿'b¿'b¿'b¿'b¿@ÄY¿@ÄY¿@ÄY¿@ÄY¿?ÄY¿”åQ¿”åQ¿”åQ¿”åQ¿”åQ¿”åQ¿”åQ¿”åQ¿”åQ¿“åQ¿JL¿JL¿JL¿JL¿JL¿JL¿JL¿JL¿JL¿IL¿/E¿/E¿/E¿/E¿/E¿Æ¼;¿Æ¼;¿Æ¼;¿Æ¼;¿Å¼;¿L>9¿L>9¿L>9¿L>9¿L>9¿K>9¿K>9¿K>9¿K>9¿K>9¿·Ò4¿·Ò4¿·Ò4¿·Ò4¿·Ò4¿·Ò4¿·Ò4¿¶Ò4¿¶Ò4¿¶Ò4¿,³,¿,³,¿+³,¿+³,¿+³,¿›è!¿›è!¿›è!¿›è!¿›è!¿›è!¿›è!¿›è!¿›è!¿›è!¿Xû¿Xû¿Xû¿Wû¿Wû¿Wû¿Wû¿Wû¿Wû¿Wû¿Ö¿Ö¿Ö¿Ö¿Ö¿Ö¿Ö¿Ö¿Ö¿Ö¿¼ú¿¼ú¿¼ú¿¼ú¿¼ú¿Q–¿Q–¿Q–¿Q–¿P–¿åL¿åL¿åL¿åL¿åL¿åL¿åL¿äL¿äL¿äL¿îv¿ív¿ív¿ív¿ív¿ív¿ív¿ív¿ív¿ív¿dNö¾dNö¾dNö¾dNö¾dNö¾cNö¾cNö¾cNö¾cNö¾bNö¾.ùä¾.ùä¾.ùä¾.ùä¾.ùä¾KçϾJçϾJçϾJçϾJçϾJçϾJçϾIçϾIçϾIçϾåJʾåJʾäJʾäJʾäJʾäJʾäJʾäJʾäJʾãJʾtu¿¾tu¿¾tu¿¾tu¿¾tu¿¾tu¿¾tu¿¾su¿¾su¿¾su¿¾º¬¯¾º¬¯¾º¬¯¾º¬¯¾º¬¯¾¶¬¯¾¶¬¯¾¶¬¯¾¶¬¯¾¶¬¯¾,k¾+k¾+k¾*k¾*k¾kƒ¾jƒ¾jƒ¾jƒ¾iƒ¾iƒ¾iƒ¾iƒ¾hƒ¾hƒ¾Õœƒ¾Õœƒ¾Õœƒ¾Õœƒ¾Õœƒ¾Ôœƒ¾Ôœƒ¾Ôœƒ¾Ôœƒ¾Óœƒ¾&*q¾&*q¾&*q¾&*q¾%*q¾Šn¾Šn¾Šn¾Šn¾Šn¾‰n¾‰n¾‰n¾‰n¾‰n¾,k¾,k¾+k¾+k¾*k¾*k¾*k¾*k¾)k¾)k¾G¾G¾G¾G¾ÿF¾üF¾üF¾ûF¾ûF¾úF¾ñ~ð½ð~ð½ð~ð½ð~ð½ð~ð½ð~ð½ð~ð½ï~ð½ï~ð½ï~ð½ÎTð½ÎTð½ÎTð½ÍTð½ÍTð½ÀTð½ÀTð½ÀTð½ÀTð½ÀTð½y–³y–³y–³y–³y–³FY³EY³EY³DY³DY³DY³DY³CY³CY³CY³P–†§P–†§€€PK·lF>—ŸlPP faces.npy“NUMPYF{'descr': ' 62B":1F(=%@'D,E*A4L?W>X5M8NCSBT9O<PFZ3VGcH[7R6QI^J_;Y:UKd=b@\A]D`EaWkXlSoTpZsMmNn_z^vOqLj[xcyPrd}e€RuQthƒf„Y|U{Vwgi‡\`…b~]‚a†kx“y”lŽoz—v™p‘s}›m•n–ƒ¢j’€Ÿž„£qšr˜‡¥wˆ‰u t¡Š‹|œ{¤Œ~¦«§€¬‚¨ƒ¯…©„­†ª‡®“”—›™ŸžŽ£¢‘¥˜’–•š ¡œ¤ÓÉ€ÔÊ„Ö͇×σÕ̦§¨©ª”÷“ÂµŽº—śǙÀ¼‘»¹–¢Ì¶’ŸÊžÉ¸•£Í¾˜¥Ï½š«¬Ä¡¯­Æœ®Á¿ È¤ØÉÙÊÚÌÛÍÜÏЦѧ˨ΩҪ·ã䵺âé¼å»ÅïÂíÃìÇðݶ޸߹Àîà½á¾ÉûÊüÌÍþÏÿæÁè¿çÄëÆêÈØÙÛÜÚýö÷óËøùñÐòÑúôÎõÒäâãåÝÞßé àáí#ï%ð'ì&î$ æ è ç êë÷ ö)ý*ø+"ù(ú,ü!þûÿñòóôõ&3%4#6$:'8.<€-@0/~!1 |295xCEBFDHLGGMIJNHIOKKPJQRTSUVXWYZS]QR[UW^TV\YZ_Xi``eajkafbbgclmchddnepfgqhjoilsknrmtuwvxy{z|}u€xy„…|~tv‚wzƒ†{}‡ˆ~€‰„‹…‡Œ†ƒŠ‚—˜Ž™’Ž“”•–š‘‘›£—™¤˜œ“ž’•Ÿ” ¡š¢–›¥¤¨£œ¦Ÿ©ž §¡¥ª¢«¬®­¯°²±³´µ®¶¯°»±·¼²¸«¬¹­º½³´¾¹Á¶õ·Ä»ÅƽǼ¿¸ºÀ¾ÈÁÊÂÅÌÆÀÉ¿ÄËÃÈÍÇÓÎÎÔÏÕÖÏ×ÐÐØÒÚÛÒÙÑÑÜâÖá×ÚãÞÓÔàÕߨäåÛÝÙÜæçÞßàèáéâãäêÝëåæçèéêëøÔÕöûØÜüÚýÎ÷àßÏùÐúäÑÿãÒþæÙÓÀ ìÁ í×ÖÄ ðÅîÛ ÈïÞáâ ÝåÀÁÅÈÄìçíèðéîêïë%ø$öû #&*ý!ü"ú)/ ÷'. - ù(0ÿ,1þ+<=4C?5@23 6 7 8 ;9:AB> DE$H%F#G*M&IQ0P.S-R1JK LT/!N"Og<d=eCf?h@'U)V(W,Y+XaA\B_DcE>] 7[ 8Zk49^:`i2j3 ;bl5m6SvQsPz|RH€F~GxT@M<Idpfohrgneq8J:L4K6N3O\}aj7k2_?l5c>i;]=m9wZ{bu^t[y`U1V0W.Y-X/tuw{y*o}? +n )q> ,p= (r;s"zv7              $)&+-/!0#. 2"1(%',*4$?)> 5!8&C+B"9#<-F(3.G/H%7*62I0J';,:1K.=/@2A0D1E4W5X8S9T<Z6M7NC_B^:O3L?[>c;PFdHe@RAQIhJfDYEU=VGgKiH\J`GbI]KaLkWxXyMlNoSzTvOpPsZ}QmRn^ƒVj[€c_„UqYrd‡bwge\u]thf`|a{ig~«°e¬±h‚¯²f…­³i†®´klospjxymnzrvq}|wut{~‚…†ž°ÓŸ±Ô£³Ö¥´×¢²Õˆ‰Š‹ŒŽ”’“Ž•–—›‘™‘š˜– ™¢’“Ÿ”ž•¡—£˜œ›¥š¤žŸ¡¨¢£œ©¥¦ §¤ª°û±ü²³þ´ÿ¦°§±¨²©³ª´¶·µ¸¹º¼½»¾ºÅ·ÂµÃ»Ç¶Á¸Ä¹¿¼À½È¾ÆÃÉÂÊÀÌÅÍÇÏÁпÑÄËÆÎÈÒÓØÔÙÖÛ×ÜÕÚÓÔËÚÖ×ÐØÑÙÕÎÛÒÜÞäßâÝãáåÝæÞçßèàéàêáëãíâïåðäìéîæñèòçóêõëô÷üöû÷úýøþøùÿöúùíüîïþìûðÿñòóýôõ&%#$'&%# '!$    BCDEFDHLBGMFJNCIOEKPLQNTMUPXOYHS]GR[JW^IV\KZ_]iQ`Ta^k[fUbXc_m\hYdRepVgqSjoWlsZnritkwfxm{h|`upbyq…o~avs‚czr†d}jˆe€‰g„‹n‡ŒlƒŠ~—twŽ‚’“x{†–…š|‘ˆ£v™u˜‰Šžz•y”‹¡Œ¢}›¤¨€œ¦ƒŸ©„ §‡¥ª—«’®“¯–²š³žµ¶°±¢¼£¸¬Ž­¡½‘´˜¹¦Â©Ã•·”»§ÆªÇ¨¿™º›¾œÁÊ Å̤ÀÉŸÄË¥È͸ӫήϵֶׯвҼ۽ٳÑÃâÂá±Ú¿Þ¬Ô­Õ°ØÇåÆÝ´ÜÉ纹ÊèËé·»ÌêÍë¾ñòóôõ÷øöùúûüÿýþ÷øöùúûÿýþ üì í  ð î ï ÉÊÌÍËÉìÊíËðÌîÍï%'$( ) #"&!*!+",)3*/'2$.%-(4#0,5&1+6-.4>/05D12A3B6Eì7<í8=ð;Cî9?ï:@7A8B;>9D:EHJFKGLMNIOGQHPFSIRJUKWLVMTNXOYSgPdTeQfRhUiVjWkYlXm[aZ\^_`c]b[gZd]k^f`hai\jbe_lcmv€s~z<|84€:~@x6@3<pzosr|nvqx180:.4/6-3wt}72=?u5?>y;}={9>pwq{ountry1;07.2-5/9+*,)(* + ) ",  (!"    !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~€‚‚ƒ„……††‡ˆˆˆˆ‰‰‰‰ŠŠŠŠ‹‹‹‹ŒŒŒŒŽ‘’“”•–—˜™š›œ ¡¤¦§¨©ª«««¬¬¬­­­®®®¯¯¯°±²³´µµ¶¶··¸¸¹¹ºº»»¼¼½½¾¾¿¿ÀÀÁÁÂÂÃÃÄÄÅÅÆÆÇÇÈÈÉÊËËÌÍÎÎÏÐÐÑÑÒÒÓÓÔÔÕÕÖÖ×רØÙÙÚÚÛÛÜÜÝÝÞÞßßààááââããääååææççèèééêêëëììííîîïïððññòòóóôôõõöö÷÷øøùùúúûüýýþÿ            !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AAAAABBBCCCDDDEEEFFFGGHHIIJJKKLLLMMMNNNOOOPPPQQRRSSTTUUVVWWXXYYZZ[[[\\\]]]^^^___``aabbccddeeffgghhiijjkkllmmnnooopppqqqrrrsssttuuvvwwxxyyzz{{||}}~~€€‚‚ƒƒ„„……††‡‡ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽ‘‘’’““””••––——˜˜™™šš››œœžžŸŸ  ¡¡¢¢££¤¤¥¥¦¦¦§§§¨¨¨©©©ªªª««¬¬­­®®¯¯°°±±²²³³´´µµ¶¶··¸¸¹¹ºº»»¼¼½½¾¾¿¿ÀÁÂÂÃÃÄÅÆÆÇÇÈÉÊËÌÍÎÎÏÏÐÐÑÑÒÒÓÓÔÔÕÕÖÖ×רØÙÙÚÚÛÛÜÜÝÝÞÞßßßàààááââãããäääååæææççèèééêêëëìíîïðññññòòòòóóóóôôôôõõõõöö÷÷øøùùúúûûüüýýþþÿÿ         !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<<===>>???@@@AABBCCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~€€PK·lF>Æx¶khh ¤vertices.npyPK·lF>—ŸlPP ¤’faces.npyPKq =dipy-0.10.1/dipy/data/files/evenly_distributed_sphere_724.npz000066400000000000000000000634601263041327500241310ustar00rootroot00000000000000PKx|Ç@[¡Vœ0D0D vertices.npy“NUMPYF{'descr': ')ï¿v±ê;¶?úÃ4“ñ¹?Íjcï¿îäï{T¸Ë¿_]_²ƒ(³?\À˜ÄÁûî¿@U´.ŠÎ?‹‰urñÙÌ¿èlLJ åÈON¸À¿N'ü;éÐ?töJÎî¿S?H'¾­¿Ø£tpg Ä¿Æ$Þ·î¿ë€àÖÔVÍ?ÚÂ]y$ £¿‘rSÑ<¡î¿w.Ë[›_Ò¿qb[f6Í?‚”›Šî¿±3Ƥ͞È?—;Ó;¤Ó¿¬Ë°Wúsî¿Q .Ýý‰?ÐâZN:¢Ì?9xßY]î¿{3‹@Ž~Ì¿ý¼Æ*¡Ž¿Æ$Þ·Fî¿`¨ë½#³Ô?«~5×4Ë¿TÑ<¡0«K®MпÃÈžˆÕ?á}kduî¿·é¸-§?ø!ø€;Ò¿o*š'Ôî¿Çǹ_É?ãêí›ê³?üÖÈê2ìí¿M¨úÃ_!Ö¿¹õœ—Ç?Šƒ÷­‘Õí¿¦½°—ÎÔ?[…ʹ¡zÖ¿0&qð¾í¿ÏÛzµ‰¯¼¿ý%½ãÑÕ?¥ÜT4O¨í¿^Æ6¥)Ä¿HHœVlä¿3‰ƒ÷­‘í¿ŸÏ¿g1’Ö?e[®'MÙÀ¿¿5²º {í¿žnÿÏ l׿FÏ/}fÖ?Mâà}kdí¿-y¥þÅ‹Ç?ˆdÖ®üÜØ¿ÛŽAÊMí¿Ò©)7º?9b–>Ì?g;>)7í¿¥œöÕ¿2ŽÿžÜô±?öçlLJ í¿„Éþ°ôÚ?}ƒbUBÕ¿ƒ”›Šæ í¿TA]WÙvп*!zΰ,Û?AÊMEóì¿åü¡âÇ¢¿ú^ì) ÅÒ¿íø¤Üì¿rŽªJÔ?jEOtÔ|a?+š'ÔÆì¿<ú|€Ü¿‚sd!Ó?¸FV—a¯ì¿òõ &‡Õ?&FòíL™Ü¿Dó„ZÀ˜ì¿óGθJ4¥¿¥*±1(×?ÓŸ³‚ì¿…]4œ5“Ñ¿‡¶1 &µ¿aLâà}k쿲em¡ðÜ? ŸüıϿïø¤ÜT쿤¹FìÊ.Ù¿éh ¬²Ý?|¥?g;>ì¿ç!†­—Ï¿?vsEüÛ¿ Rn*š'ì¿Uç¸Í§ÆË?¢&Ë¡_Å?”þœíøì¿/ØdÓÜ¿¶/Z»³lÇ?$«Ë°Wúë¿Ý÷¯ë_ÅÜ?ÏÜ+MP[Ü¿²Wús¶ãë¿"5²¦àÊ¿ý-=SIÞ?@)7Íë¿äxJ¶¬Â¿·.п̰Wús¶ë¿±KåÄ›Û?êøT67!»¿Z]†½ÒŸë¿KÆïª•ß¿6ð¸Ë”Ú?è µ€1‰ë¿O™2åÎáÒ?÷à£]Sà¿t¶ãCrë¿*GÍ®F°?š'-„Õ?cï[ë¿?–”Y'GÙ¿¯6ùR†“?AÊMEë¿ÙÁ5»à?IZoR´×¿¼o¬.ë¿M8è˜É Ø¿hŽ3á:á?ªhžP ë¿ú“¨¬Ò›?._ÕÇwÚ¿7Íjë¿iPÃ|ÞÕ?ÜŠå¿©ŒI¼ç¿ü64í*ޏ¿¯æ¢38Ñá?6²º {¥ç¿ˆ}â~óGØ¿ÝÎ0a7ÖÿÃ^éÏÙŽç¿¿fJØå?zW‚!¼BÕ¿Q “8x翾Ýmúâ¿<Š¿ä?ß·FV—aç¿7”ÕË>_Ë?\¡˜zèä¿lduöJç¿í¨=æ)Ò?˜À{PçhÑ?ù¤ÜT4ç¿Ms6>ä¿l/ü¢$Í?ˆ½ÒŸ³ç¿o`éää?øÛ¶.‘ã¿jcç¿ö¦ø}ÃÕ¿Wßö å?¡0&qðæ¿ï@ÿi–çÅ¿ê0gò™Ø¿/Ã^éÏÙæ¿#Ï1+@¹â?øg¾¼¿½o¬.Ãæ¿æK mæ3æ¿ÇaòÎ’·á?J¼o¬æ¿«eûßÿÛ?ªã]á›æ¿ÖÈê2ì•æ¿/CI—5kª?˜,ŽM^;ß?fuöJæ¿@Iy®à¿3Ÿd@Ee…¿ò!H¹©hæ¿æýü²i׿?‚„…ìzÞ¿Îv|Ræ¿í›øe"á¿Y×=^åæ?{¥?g;æ¿re8³Ç²?Õ‚Hbh‰â¿›'ÔÆ$濳øÏ^R’Û?Ä!‰¤}Á?)ÔÆ$æ¿h=ôãýÄæ¿yJã³fØ?µ€1‰ƒ÷å¿„,wDpÐã?6"#êuæ¿C-`Lâàå¿Û—æ(‘É¿>䫚ýóä?ÑÙŽAÊå¿./¯þ×ýÔ¿ºà³êtÇп^†½ÒŸ³å¿Üÿº(øå?!¢:þ^Ñ¿ì2ì•þœå¿‰{Ã1ñ忎 w$Lå?yßY]†å¿v­± £²Ô?÷¢ÌxÅæ¿ŒI¼oå¿iÚÀÃË?Ü Ÿ ¥Ø?”8xßYå¿™*­rä¿õnÉ,Ã? 妢yBå¿N¨ê½nç?ª•H¸öl㿯‘ÕeØ+å¿ßV &,Ü¿EYY4Šêç?<>)7忘åà—󵿪”pìªß¿Éê2ì•þä¿c‹S—<â?ÄWœõY±”¿W—a¯ôç俊ö#N×7è¿nÞ'Õ„ãà?äCrSÑä¿Oáù¼yá?ƒJÚÓEUè¿qð¾5²ºä¿œY|˜·§¿Md€ã?ÿœíø¤ä¿‰!…”"ÈÞ¿çQ“p%½¿I¼oä¿ÇÏŽ—Bè?nåíQÍÛ¿öJÎvä¿ó=V¡Èeä¿»–g´ýç?§¢yB-`ä¿ó ƒ¸Ç?Üš ÀM¦å¿5O¨ŒIä¿ý¨0Œú×?2˜B ŽÏ?ÃûÖÈê2ä¿:ä$ÃIˆç¿ïàY7Ô?O¨ŒIä¿O©$‹ ¿æ?°wü­/âæ¿ÜT4O¨ä¿ Ú‹"òÓ¿’µR­ç?lcïã¿Àö¡ï@пí#ÌT\Ø¿ø­‘ÕeØã¿\Ϩ4 æ?â±1áÊ<È¿…ZÀ˜ÄÁã¿h[ºn迚&OÀŽå?ï[#«ã¿>x°ìÛ?ú>Ç7<é¿ ³‚”ã¿ 9.0_¿?í³“¨©ß?-`Lâà}ã¿ @µbÙÕã¿\"Æ•Ž¬«?¼ {¥?gã¿Kô ;,cé?5E®yâ¿J¹©hžPã¿ÿPEÞ ™á¿ÿhA“é?ÖeØ+ý9㿾Ÿðð‰ñ?ƒV]Å>ã¿dï[#ã¿XŽó—óà?È }:Vúµ?ñ¾5²º ã¿ D7ò˜é¿S÷D¼BÞ?kduöâ¿ýÚõŸMÂä?iùƒ·Zé¿ “8xßâ¿_•¿ÌÏüÿg!€Ó4 æ?šÄÁûÖÈâ¿è<=·yóÚ¿·ôcs–ëÌ¿'qð¾5²â¿ÀÔ/šŒñè?ab´s׿´‚”›â¿üÆ?QUç¿Èe„§rUè?AÊMEó„â¿Ódȼ„ÛÒ?ø¦„€Ç^è¿Ïv|Rnâ¿Zü 1ÕÓ?ƒßpj&×?]#«Ë°Wâ¿Íò¾=/‡ç¿Ã•«Æ4€Í?êÏÙŽAâ¿úë!:é?äç*0ò‡æ¿w|Rn*⿉»ûvMÛ¿íZ‘åé?)7Íâ¿]Q ,N©Ä¿R¨UÜGß¿’ÕeØ+ýá¿ÔñÏSYå?è\'ÿ˜(·¿‚”›Šæá¿ú¦ÚTÐ]ê¿ERýã?­.Ã^éÏá¿3z1²‹†á?3tf}£ê¿<Ûñ!H¹á¿Y¨¸R™’?KÇêJã?ɇ 妢á¿€–Nv⿵£Ã„w¬¿U4O¨Œá¿¡,©Iͳê?Ví¼µÇà¿äà}kduá¿Þ‚·òë俤¡Œðiê?p¬.Ã^Ὲ•ôÈ7iÀ?¹@Egæ¿ý9Ûñ!Há¿ÖQ!åÝ?¸éó$œ¾É?Šæ µ€1Ῠu¾ŒÂ5ê¿,ѱøÙ?“8xßá¿_-ÍJ$¹ç?ÃL$$§é¿¦?g;>á¿/h3\zÑ¿ìÑk3ŒÞè?3ì•þœí࿌êïÑ*ÐÕ¿Y½kKKüտ˜ÄÁûÖà¿v¨È1äè?¥RtƒsÑ¿NEó„ZÀà¿Qý¼ ÎÔé¿PÝKÍîç?Ûñ!H¹©à¿p…Ô™Â[Ú?ÀMÍ™™ê¿jžP “࿚‡7ªZÖÉ?bû2[ŸÞ?÷JÎv|à¿Å¾vÆæ¿r½âè€À?„÷­‘Õeà¿ïTN¹ý*ë?³%à™+o忤ÜT4Oà¿ÐÍ„Gá¿ÊˆÏp‡ë?ŸP “8à¿-€+÷ÂÙ«¿MvÅ À(ã¿-ý9Ûñ!à¿iô¶œêã?üF&Ç›•?º©hžP à¿9¦¸Ó­ë¿Ä h‡;â?¬.Ã^éß¿í~E|çä?¬-úSt뿪ŒI¼ß¿ÇkÝ&ÈÔ¸¿†€š‡ñæ?Ä^éÏÙŽß¿–®D‡eà¿ANÃƿݷFV—aß¿é<†ÎVë?ÜÏyÑ ÕÜ¿ù¤ÜT4ß¿tÝêÌ î翎YÓÓ×ê?jcß¿é©êô°Ï?‘ȦøZ0é¿/Ã^éÏÙÞ¿’.mŸØ?œ¾%·ŒÔ?G¼o¬Þ¿öÂÏ^#ê¿i}[7©1Ô?euöJÞ¿e' æGBê?2´O¿9é¿€Îv|RÞ¿G~âp Ù¿{íÍì!ë?›'ÔÆ$Þ¿íN Î'Ï¿ ¸ì74ŠÝ¿µ€1‰ƒ÷Ý¿Kãgrè?”¬?žÅ¿ÏÙŽAÊÝ¿å¿ïç1Í뿚°Ø@aÍæ?ë2ì•þœÝ¿v•ebjàà?®OgB쿌I¼oÝ¿$BJ¥´·?YåNÀÝâ?!妢yBݿ掗±ÝNå¿îÓRÊ6æŽ?9>)7Ý¿zv I€ì?¿£Èž£ã¿X—a¯ôçÜ¿ÍS~é¸ä¿®Bµ<†ì?qð¾5²ºÜ¿(ç±Ý#°?1,ómæ¿‹I¼oÜ¿Ž%®ã·Îá?(ܨVÂ?§¢yB-`Ü¿=Á#o/Sì¿9Å„ê4§ß?ÁûÖÈê2Ü¿˜˜ýY2ùç?àÒ óßçë¿ÞT4O¨Ü¿ÉEŽùÿü˿˫WLWé?÷­‘ÕeØÛ¿:íÏxlÛ¿v~šÌ4àÒ¿ï[#«Û¿%f¯U–Dë?h;„ôÖ¿-`Lâà}Û¿Ð.}=…ê¿qåGjê?I¹©hžPÛ¿† 0SÛ£×?;4§`€ë¿dï[#Û¿ôr8øGÒ?0ꪴ?Ü?}kduöÚ¿™E[Zé¿Úü‹máÊ?šÄÁûÖÈÚ¿oTˆFrFì?%I¦迳‚”›Ú¿@QµÞ"U࿊FÀ›Õì?Ïv|RnÚ¿L|«êßïÀ¿¶ÃJŽ5mâ¿éÏÙŽAÚ¿bnzÉi¡æ?íž:¤•:«¿)7ÍÚ¿ª˜³n,í¿¤IPOýä?‚”›ŠæÙ¿‚??¶cä?lUòIí¿9Ûñ!H¹Ù¿úû†8Ôp›¿æ»Á†4æ?U4O¨ŒÙ¿ÝNb-ã¿dï7âõc»¿o¬.Ã^Ù¿ƒ?`9-í?àn4 5á¿‹æ µ€1Ù¿¹Á@9ÑÛ翼ýñ\×ì?¥?g;>Ù¿õdRønèÇ?¬£P¨Vé¿Á˜ÄÁûÖØ¿t*üV0Þ?瀱çuþÐ?Ûñ!H¹©Ø¿W³s“Gì¿pIq˜Ð´Ù?÷JÎv|ؿؗU ê?&ÂL뿤ÜT4OØ¿©®6j‰íÕ¿ü#!ˆ·ë?+ý9Ûñ!Ø¿ñsIýÕ¿xSö¼m·Ú¿GV—a¯ô׿xz™36ê?ÆèPN½пb¯ôçlÇ׿¹x²w˜ì¿l>¿ªIé?}Rn*š×¿¢žR^Rß?ÅõÓmBí¿˜a¯ôçl׿Át G¦ò¸×?…Ç^øØ?AÊMEóÔ¿¢ ?Šë¿ÀOõÏÒ?+š'ÔÆÔ¿?RNËÄì?ÉÂT&eê¿Fó„ZÀ˜Ô¿/Àc¹˜¿Ý¿:Åc*Ší?bLâà}kÔ¿€¢{yË¿O›Ô¿xn-ò é?.ü¼lŠÁ¿–þœíøÔ¿@ÕÓ–Ïî¿Õ·Ü©ê}ç?°Wús¶ãÓ¿[ó¹î»Qã?™º"eŸfî¿Ë°Wús¶Ó¿%ü(zþ©?ò’ÐBÔVå?ç µ€1‰Ó¿*2÷Àå¿!j‘¸Y© ¿cï[Ó¿¿ß…ý®{î?Þiê±b×㿼o¬.Ó¿Bnóÿ²3翚XÂ{œTî?7ÍjÓ¿ÛžRCB¬½?H%h>{äè¿Sn*š'ÔÒ¿w8Ö÷ÔÄá?m9ªáwnÉ?mLJ å¦Ò¿O!Ø~ñí¿ë¡#—ß?‡ 妢yÒ¿V7ü’¥eê?šP€æRí¿¤yB-`LÒ¿ä¬BñïÑ¿ÕS´ë?¾ÒŸ³Ò¿ü$8è#jÚ¿Nb"3׿Ø+ý9ÛñÑ¿¨ù}Úyì?PæÿöqÕ¿ó„ZÀ˜ÄÑ¿´’)ÚÌì¿ÏãÄÛgë?Þ·FV—Ñ¿ôÁøÛ?žIÀ­í¿(7ÍjÑ¿Nó¶jÐ?… e {Zà?ErSÑ<Ñ¿ÎÛvcÚ꿦ÓV+B\Æ?`éÏÙŽÑ¿zp´IËTî?,µk;¡è¿zB-`LâпýªC™šâ¿`¶ú}Àî?•›Šæ µÐ¿YÙÿN_·¿MU‰η俰ôçlLJп 3ÖÌñæ?…Õ!Pp|¿ÊMEó„ZпüŒ'{×ïî¿ô¥˜Ãå?妢yB-п’:iÊÇ­æ?oG†zFâî¿п ¤¬峿8¦m€xè?8²º {¥Ï¿t²»´ ã¿5“ƒŠ½Ä¿lduöJÏ¿*\ɹ—î?/¸WŽÚà¿£0&qðο WFê¿;¦»?™î?×Èê2ì•οՆ\ìggÏ?ÐŒA½Â}ë¿{¥?g;οÀ¯Ý?æhÛxíÔ?A-`LâàÍ¿ÖEP½ÆMí¿áóÅ ƒ,Ø?|ßY]†Í¿º”é²ì?ª,²¬œP쿱‘ÕeØ+Í¿ªwã4œÚ¿Ly&–|®í?ãCrSÑÌ¿þ„@×Ó¿xšõüçåÞ¿öJÎvÌ¿ÇÓëë?y¦4°Ë¿O¨ŒIÌ¿ÎOòqIšö®é?ˆZÀ˜ÄÁË¿Ø]ðß?Èá?j¾Üðøî¿» {¥?gË¿l•-AõÀ?Y®Ücúûã?ó¾5²º Ë¿6Ư^oè¿" ›ã-H¨?)qð¾5²Ê¿9<Í?lBï?5k›p?æ¿_#«Ë°Wʿʙ~¹¬ æ¿8æ@BOï?“ÕeØ+ýÉ¿äá.r£?¥PãÆ)íç¿È‡ 妢ɿïܺ*xBä?ð2çÃe­¿?ÿ9Ûñ!HÉ¿Ã!©bï¿ ™{(`â?3ì•þœíÈ¿>]ÄÖ¢é?¹8á °î¿ižP “È¿ž1¦Ð­°Ê¿zjÅ0s&ë?ŸP “8È¿³¯®¢ß¿>‰eÉ®Ò¿×Æ$ÞÇ¿h•ÄÃóî?A›¤®±ËÚ¿ µ€1‰ƒÇ¿ß)x uì¿ûkPí?Cg;>)Ç¿•ƒzêá×?õuú˜fí¿wöJÎÆ¿ðtF½Õ?Å3äWléÜ?¬Ë°WúsÆ¿«‘AþËýë¿åë|^Ð?ã}kduÆ¿)[~}kî?)7؆†¥ê¿0&qð¾Å¿Ôe¥cBÝ࿵ÜE)ï?Pâà}kdÅ¿³|¬“DÆ¿Åe¿lÂ%㿃”›Šæ Å¿ €Nßé?œz½ô˜ª¶¿»FV—a¯Ä¿¥gm¸s￾M³gXç?ïø¤ÜTÄ¿4âAþœIå?²·z•›ï¿$«Ë°WúÿL;šh£b?fÚŽ0€Dç?\]†½ÒŸÃ¿ØTq¥íiå¿8’Ïr‹µ¿AÊMEÿ¿×EN:…ï?.lí¢dPã¿ÇÁûÖÈê¿H5‹Tjé¿*¼wã·0ï?ûs¶ãC¿Uí.´ÅÅ?à$Ö*²¯ê¿3&qð¾5¿Ëãræá?Úí…V«OÐ?gØ+ý9ÛÁ¿68wœžî¿Fôè ¹YÝ?›Šæ µ€Á¿ôjì?Ðò`ðÏí¿Ó<¡0&Á¿‚'HˆžÕ¿Hv¢„œKí?ï[#«ËÀ¿¨×ÿ¿îWØ¿Dt€ÙÄÚ¿@¡0&qÀ¿Ó^ÈÒ7Æì?¶ˆ¤¢I$Ó¿sSÑ<¡À¿ÊNÍŸæDî¿»÷`lƒë?W “8x¿¿X¥žëT¸ß?Öͯèo¬.þ¿…;’Ë?n1_W‰7â?.ÔÆ$¾¿>(÷ú ê¿¡ì[Ê¡À?–8xßY½¿®¹-®„ï?ÏSu¼¾\è¿þœíø¤¼¿•ÕøŸÐo俦n‰áUÇï?lc:£þy3¦¿¥ ºLŒ€æ¿×eØ+ý9»¿r…åqû~æ?¬¹kªßY¦?FÊME󄺿¦Ð/Ìï¿<ØäúVtä?®.Ã^éϹ¿Ã ,–eè?ýòv0’ï¿ “8xß¹¿ýÒ¥ó²À¿ü"¿Qê?†÷­‘Õe¸¿{ÅÂÒ@â¿1 ãÜį˿ö[#«Ë°·¿¯Œâï?óœµÑß¿^À˜ÄÁû¶¿ÿ¾ݲë¿â2QŒdî?Æ$Þ·F¶¿Ø?Œbô<Ó?¢™Gêì¿6‰ƒ÷­‘µ¿'Æ=€áÚ?“•³Óy}Ø?žíø¤Ü´¿§(/©sí¿G/¿_»Õ?Rn*š'´¿82J9þí?ZÐB@Gì¿v¶ãCr³¿›|êÝüŽÝ¿€ÑÊóX×î?çY]†½²¿ïÓïôKiпÀbr°±3á¿NÎv|²¿›VÀUŽãê?‡Ãz·–ëÅ¿¶ãCrS±¿}7yêsï¿Sd6{¢Jé?%H¹©hž°¿{Á{·~ã?¡j×!«Òï¿Y]†½Ò¯¿Ç7Y†¥®µ?òm[£å?ü!H¹©h®¿çºJžç¿tëÎ ¨e¿Ìê2ì•þ¬¿¹”«£Óòï??Ɔ忬³‚”«¿P¶áö翼˜ÆÇÔï?}|Rn*ª¿dbô²ë·?ò<Üð_jé¿LEó„ZÀ¨¿$‘PþÃaã?ž°¦¥˜Æ?,Þ·FV§¿Ö@$±vï¿n¯eì á?üÖÈê2쥿²Mþë?ú"¸oJÛî¿ÜŸ³‚¤¿ñså£Âп¸íJÅœjì?«hžP £¿D¿ªÎTÝ¿BÛm¹”Ö¿Œ1‰ƒ÷­¡¿o–1×î?EDAØ¿\ús¶ãC ¿äy8Èo˜í¿|Mó±ïì?w†½ÒŸ³¿°ÖVz‹CÛ?¾Œî¿“8xßš¿@¶Qú„ýÒ?U¼q¤¡à?¸©hžP ˜¿7ãB£ë¿(?šÿ'Ë?v;>)7•¿<1l¶Cï?T豚U ê¿Íjc’¿íÞÜxðwâ¿Öä¤Ñ½ï?®½ÒŸ³¿!(•ÞÀ¿o³fg¯ä¿ïà}kdu‰¿ë)ÿçiè?8IsÖ£¿n)7̓¿¾`Ó`wùï¿whíô\ƒæ?ZO¨ŒI|¿®ô–Õs½æ?fyr"/öï¿]–þœíøp¿Î,±z}÷¨¿õÌWA,Ÿè?psSÑ<¡V¿ó×sxpä¿z$·œæª¿GV—a¯ôï?€Üiq$*±?ÔÆ$Þï?Í¼Ï §s¯¿þ¸pš…¿b¯ôçlÇï?–” `ë½?á/WEt›µ¿í[#«Ë°ï?H¤nÍ.¼¿=[ íÏÃ?}Rn*šï?{ lã7 œ?"÷x&;Á¿ µ€1‰ƒï?~ÆÔåLÜ·?Õ­Ò3©?–a¯ôçlï?ì¥<ÆQǿכ¯Éä·?%Þ·FVï?2rZÀÇ?j zýÛæÉ¿±º {¥?ï?ô4Œ(벿¢Œ‹_{íÊ?@g;>)ï?v±ê;¶¿úÃ4“ñ¹¿Íjcï?îäï{T¸Ë?_]_²ƒ(³¿\À˜ÄÁûî?@U´.ŠÎ¿‹‰urñÙÌ?èlLJ åî?¦ÈON¸À?N'ü;éпtöJÎî?S?H'¾­?Ø£tpg Ä?Æ$Þ·î?ë€àÖÔVÍ¿ÚÂ]y$ £?‘rSÑ<¡î?w.Ë[›_Ò?qb[f6Í¿‚”›Šî?±3Ƥ͞ȿ—;Ó;¤Ó?¬Ë°Wúsî?Q .Ýý‰¿ÐâZN:¢Ì¿9xßY]î?{3‹@Ž~Ì?ý¼Æ*¡Ž?Æ$Þ·Fî?`¨ë½#³Ô¿«~5×4Ë?TÑ<¡0î?º«K®MÐ?ÃÈžˆÕ¿á}kduî?·é¸-§¿ø!ø€;Ò?o*š'Ôî?Çǹ_É¿ãêí›곿üÖÈê2ìí?M¨úÃ_!Ö?¹õœ—Ç¿Šƒ÷­‘Õí?¦½°—ÎÔ¿[…ʹ¡zÖ?0&qð¾í?ÏÛzµ‰¯¼?ý%½ãÑÕ¿¥ÜT4O¨í?^Æ6¥)Ä?HHœVläÂ?3‰ƒ÷­‘í?ŸÏ¿g1’Ö¿e[®'MÙÀ?¿5²º {í?žnÿÏ l×?FÏ/}fÖ¿Mâà}kdí?-y¥þŋǿˆdÖ®üÜØ?ÛŽAÊMí?Ò©)7º¿9b–>Ì¿g;>)7í?¥œöÕ?2ŽÿžÜô±¿öçlLJ í?„Éþ°ôÚ¿}ƒbUBÕ?ƒ”›Šæ í?TA]WÙvÐ?*!zΰ,Û¿AÊMEóì?åü¡âÇ¢?ú^ì) ÅÒ?íø¤Üì?rŽªJÔ¿jEOtÔ|a¿+š'ÔÆì?<ú|€Ü?‚sd!Ó¿¸FV—a¯ì?òõ &‡Õ¿&FòíL™Ü?Dó„ZÀ˜ì?óGθJ4¥?¥*±1(׿ӟ³‚ì?…]4œ5“Ñ?‡¶1 &µ?aLâà}kì?²em¡ðÜ¿ ŸüıÏ?ïø¤ÜTì?¤¹FìÊ.Ù?éh ¬²Ý¿|¥?g;>ì?ç!†­—Ï¿¿vsEüÛ? Rn*š'ì?Uç¸Í§ÆË¿¢&Ë¡_Å¿”þœíøì?/ØdÓÜ?¶/Z»³lÇ¿$«Ë°Wúë?Ý÷¯ë_ÅÜ¿ÏÜ+MP[Ü?²Wús¶ãë?"5²¦àÊ?ý-=SIÞ¿@)7Íë?äxJ¶¬Â?·.Ð?̰Wús¶ë?±KåěۿêøT67!»?Z]†½ÒŸë?KÆïª•ß?6ð¸Ë”Ú¿è µ€1‰ë?O™2åÎáÒ¿÷à£]Sà?t¶ãCrë?*GÍ®F°¿š'-„Õ¿cï[ë??–”Y'GÙ?¯6ùR†“¿AÊMEë?ÙÁ5»à¿IZoR´×?¼o¬.ë?M8è˜É Ø?hŽ3á:ῪhžP ë?ú“¨¬Ò›¿._ÕÇwÚ?7Íjë?iPÃ|ÞÕ¿ÜŠå?©ŒI¼ç?ü64í*ޏ?¯æ¢38Ñá¿6²º {¥ç?ˆ}â~óGØ?ÝÎ0a7ÖÃ?Ã^éÏÙŽç?¿fJØå¿zW‚!¼BÕ?Q “8xç?¾Ýmúâ?<Š¿ä¿ß·FV—aç?7”ÕË>_Ë¿\¡˜zèä?lduöJç?í¨=æ)Ò¿˜À{PçhÑ¿ù¤ÜT4ç?Ms6>ä?l/ü¢$Í¿ˆ½ÒŸ³ç?o`éää¿øÛ¶.‘ã?jcç?ö¦ø}ÃÕ?Wßö å¿¡0&qðæ?ï@ÿi–çÅ?ê0gò™Ø?/Ã^éÏÙæ?#Ï1+@¹â¿øg¾¼?½o¬.Ãæ?æK mæ3æ?ÇaòÎ’·á¿J¼o¬æ?«eûßÿÛ¿ªã]á›æ?ÖÈê2ì•æ?/CI—5kª¿˜,ŽM^;ß¿fuöJæ?@Iy®à?3Ÿd@Ee…?ò!H¹©hæ?æýü²i׿¿‚„…ìzÞ?Îv|Ræ?í›øe"á?Y×=^åæ¿{¥?g;æ?re8³Ç²¿Õ‚Hbh‰â?›'ÔÆ$æ?³øÏ^R’Û¿Ä!‰¤}Á¿)ÔÆ$æ?h=ôãýÄæ?yJã³fØ¿µ€1‰ƒ÷å?„,wDpÐã¿6"#êuæ?C-`Lâàå?Û—æ(‘É?>䫚ýóä¿ÑÙŽAÊå?./¯þ×ýÔ?ºà³êtÇÐ?^†½ÒŸ³å?Üÿº(øå¿!¢:þ^Ñ?ì2ì•þœå?‰{Ã1ñå?Ž w$Lå¿yßY]†å?v­± £²Ô¿÷¢ÌxÅæ?ŒI¼oå?iÚÀÃË¿Ü Ÿ ¥Ø¿”8xßYå?™*­rä?õnÉ,ÿ 妢yBå?N¨ê½n翪•H¸ölã?¯‘ÕeØ+å?ßV &,Ü?EYY4Šêç¿<>)7å?˜åà—óµ?ª”pìªß?Éê2ì•þä?c‹S—<â¿ÄWœõY±”?W—a¯ôçä?Šö#N×7è?nÞ'Õ„ãà¿äCrSÑä?Oáù¼yῃJÚÓEUè?qð¾5²ºä?œY|˜·§?Md€ã¿ÿœíø¤ä?‰!…”"ÈÞ?çQ“p%½?I¼oä?ÇÏŽ—Bè¿nåíQÍÛ?öJÎvä?ó=V¡Èeä?»–g´ýç¿§¢yB-`ä?ó ƒ¸ǿܚ ÀM¦å?5O¨ŒIä?ý¨0Œú׿2˜B ŽÏ¿ÃûÖÈê2ä?:ä$ÃIˆç?ïàY7Ô¿O¨ŒIä?O©$‹ ¿æ¿°wü­/âæ?ÜT4O¨ä? Ú‹"òÓ?’µR­ç¿lcïã?Àö¡ï@Ð?í#ÌT\Ø?ø­‘ÕeØã?\Ϩ4 æ¿â±1áÊ<È?…ZÀ˜ÄÁã?h[ºnè?š&OÀŽå¿ï[#«ã?>x°ìÛ¿ú>Ç7<é? ³‚”ã? 9.0_¿¿í³“¨©ß¿-`Lâà}ã? @µbÙÕã?\"Æ•Ž¬«¿¼ {¥?gã?Kô ;,cé¿5E®yâ?J¹©hžPã?ÿPEÞ ™á?ÿhA“é¿ÖeØ+ý9ã?¾Ÿðð‰ñ¿ƒV]Å>ã?dï[#ã?XŽó—óà¿È }:Vúµ¿ñ¾5²º ã? D7ò˜é?S÷D¼BÞ¿kduöâ?ýÚõŸMÂä¿iùƒ·Zé? “8xßâ?_•¿ÌÏüÃ?g!€Ó4 濚ÄÁûÖÈâ?è<=·yóÚ?·ôcs–ëÌ?'qð¾5²â?ÀÔ/šŒñè¿ab´s×?´‚”›â?üÆ?QUç?Èe„§rUè¿AÊMEó„â?Ódȼ„ÛÒ¿ø¦„€Ç^è?Ïv|Rnâ?Zü 1ÕÓ¿ƒßpj&׿]#«Ë°Wâ?Íò¾=/‡ç?Õ«Æ4€Í¿êÏÙŽAâ?úë!:é¿äç*0ò‡æ?w|Rn*â?‰»ûvMÛ?íZ‘åé¿)7Íâ?]Q ,N©Ä?R¨UÜGß?’ÕeØ+ýá?ÔñÏSYå¿è\'ÿ˜(·?‚”›Šæá?ú¦ÚTÐ]ê?ERýã¿­.Ã^éÏá?3z1²‹†á¿3tf}£ê?<Ûñ!H¹á?Y¨¸R™’¿KÇêJã¿É‡ 妢á?€–Nvâ?µ£Ã„w¬?U4O¨Œá?¡,©Iͳê¿Ví¼µÇà?äà}kduá?Þ‚·òëä?¤¡Œðiê¿p¬.Ã^á?ˆ•ôÈ7iÀ¿¹@Egæ?ý9Ûñ!Há?ÖQ!åÝ¿¸éó$œ¾É¿Šæ µ€1á?¨u¾ŒÂ5ê?,ѱøÙ¿“8xßá?_-ÍJ$¹ç¿ÃL$$§é?¦?g;>á?/h3\zÑ?ìÑk3ŒÞè¿3ì•þœíà?ŒêïÑ*ÐÕ?Y½kKKüÕ?˜ÄÁûÖà?v¨È1äè¿¥RtƒsÑ?NEó„ZÀà?Qý¼ ÎÔé?PÝKÍîç¿Ûñ!H¹©à?p…Ô™Â[Ú¿ÀMÍ™™ê?jžP “à?š‡7ªZÖÉ¿bû2[ŸÞ¿÷JÎv|à?žvÆæ?r½âè€À¿„÷­‘Õeà?ïTN¹ý*뿳%à™+oå?¤ÜT4Oà?ÐÍ„Gá?ʈÏp‡ë¿ŸP “8à?-€+÷ÂÙ«?MvÅ À(ã?-ý9Ûñ!à?iô¶œêã¿üF&Ç›•¿º©hžP à?9¦¸Ó­ë?Ä h‡;⿬.Ã^éß?í~E|ç俬-úStë?ªŒI¼ß?ÇkÝ&ÈÔ¸?†€š‡ñæ¿Ä^éÏÙŽß?–®D‡eà?ANÃÆ?Ý·FV—aß?é<†ÎVë¿ÜÏyÑ ÕÜ?ù¤ÜT4ß?tÝêÌ îç?ŽYÓÓ×ê¿jcß?é©êô°Ï¿‘ȦøZ0é?/Ã^éÏÙÞ?’.mŸØ¿œ¾%·ŒÔ¿G¼o¬Þ?öÂÏ^#ê?i}[7©1Ô¿euöJÞ?e' æGBê¿2´O¿9é?€Îv|RÞ?G~âp Ù?{íÍì!ë¿›'ÔÆ$Þ?íN Î'Ï? ¸ì74ŠÝ?µ€1‰ƒ÷Ý?Kãgrè¿”¬?žÅ?ÏÙŽAÊÝ?å¿ïç1Íë?š°Ø@aÍæ¿ë2ì•þœÝ?v•ebjàà¿®OgBì?ŒI¼oÝ?$BJ¥´·¿YåNÀÝâ¿!妢yBÝ?掗±ÝNå?îÓRÊ6掿9>)7Ý?zv I€ì¿¿£Èž£ã?X—a¯ôçÜ?ÍS~é¸ä?®Bµ<†ì¿qð¾5²ºÜ?(ç±Ý#°¿1,ómæ?‹I¼oÜ?Ž%®ã·Îá¿(ܨV¿§¢yB-`Ü?=Á#o/Sì?9Å„ê4§ß¿ÁûÖÈê2Ü?˜˜ýY2ùç¿àÒ óßçë?ÞT4O¨Ü?ÉEŽùÿüË?Ë«WLWé¿÷­‘ÕeØÛ?:íÏxlÛ?v~šÌ4àÒ?ï[#«Û?%f¯U–Dë¿h;„ôÖ?-`Lâà}Û?Ð.}=…ê?qåGjê¿I¹©hžPÛ?† 0Sۣ׿;4§`€ë?dï[#Û?ôr8øGÒ¿0ꪴ?Ü¿}kduöÚ?™E[Zé?Úü‹máÊ¿šÄÁûÖÈÚ?oTˆFrFì¿%I¦è?³‚”›Ú?@QµÞ"Uà?ŠFÀ›Õì¿Ïv|RnÚ?L|«êßïÀ?¶ÃJŽ5mâ?éÏÙŽAÚ?bnzÉi¡æ¿íž:¤•:«?)7ÍÚ?ª˜³n,í?¤IPOýä¿‚”›ŠæÙ?‚??¶cä¿lUòIí?9Ûñ!H¹Ù?úû†8Ôp›?æ»Á†4æ¿U4O¨ŒÙ?ÝNb-ã?dï7âõc»?o¬.Ã^Ù?ƒ?`9-í¿àn4 5á?‹æ µ€1Ù?¹Á@9ÑÛç?¼ýñ\×ì¿¥?g;>Ù?õdRønèÇ¿¬£P¨Vé?Á˜ÄÁûÖØ?t*üV0޿瀱çuþпÛñ!H¹©Ø?W³s“Gì?pIq˜Ð´Ù¿÷JÎv|Ø?Ø—U ê¿&ÂLë?¤ÜT4OØ?©®6j‰íÕ?ü#!ˆ·ë¿+ý9Ûñ!Ø?ñsIýÕ?xSö¼m·Ú?GV—a¯ô×?xz™36ê¿ÆèPN½Ð?b¯ôçlÇ×?¹x²w˜ì?l>¿ªIé¿}Rn*š×?¢žR^Rß¿ÅõÓmBí?˜a¯ôçl×?Át G¦ò¸×¿…Ç^øØ¿AÊMEóÔ?¢ ?Šë?ÀOõÏÒ¿+š'ÔÆÔ??RNËÄì¿ÉÂT&eê?Fó„ZÀ˜Ô?/Àc¹˜¿Ý?:Åc*Ší¿bLâà}kÔ?€¢{yË?O›Ô?xn-ò é¿.ü¼lŠÁ?–þœíøÔ?@ÕÓ–Ïî?Õ·Ü©ê}ç¿°Wús¶ãÓ?[ó¹î»Qã¿™º"eŸfî?˰Wús¶Ó?%ü(zþ©¿ò’ÐBÔVå¿ç µ€1‰Ó?*2÷Àå?!j‘¸Y© ?cï[Ó?¿ß…ý®{î¿Þiê±b×ã?¼o¬.Ó?Bnóÿ²3ç?šXÂ{œTî¿7ÍjÓ?ÛžRCB¬½¿H%h>{äè?Sn*š'ÔÒ?w8Ö÷ÔÄá¿m9ªáwnÉ¿mLJ å¦Ò?O!Ø~ñí?ë¡#—ß¿‡ 妢yÒ?V7ü’¥e꿚P€æRí?¤yB-`LÒ?ä¬BñïÑ?ÕS´ë¿¾ÒŸ³Ò?ü$8è#jÚ?Nb"3×?Ø+ý9ÛñÑ?¨ù}Úyì¿PæÿöqÕ?ó„ZÀ˜ÄÑ?´’)ÚÌì?ÏãÄÛgë¿Þ·FV—Ñ?ôÁøÛ¿žIÀ­í?(7ÍjÑ?Nó¶jп… e {Zà¿ErSÑ<Ñ?ÎÛvcÚê?¦ÓV+B\Æ¿`éÏÙŽÑ?zp´IËTî¿,µk;¡è?zB-`LâÐ?ýªC™šâ?`¶ú}Àî¿•›Šæ µÐ?YÙÿN_·?MU‰ηä?°ôçlLJÐ? 3ÖÌñæ¿…Õ!Pp|?ÊMEó„ZÐ?üŒ'{×ïî?ô¥˜Ãå¿å¦¢yB-Ð?’:iÊÇ­æ¿oG†zFâî?Ð? ¤¬å³?8¦m€xè¿8²º {¥Ï?t²»´ ã?5“ƒŠ½Ä?lduöJÏ?*\ɹ—î¿/¸WŽÚà?£0&qðÎ? WFê?;¦»?™î¿×Èê2ì•Î?Õ†\ìggϿЌA½Â}ë?{¥?g;Î?À¯Ý¿æhÛxíÔ¿A-`LâàÍ?ÖEP½ÆMí?áóÅ ƒ,Ø¿|ßY]†Í?º”é²ì¿ª,²¬œPì?±‘ÕeØ+Í?ªwã4œÚ?Ly&–|®í¿ãCrSÑÌ?þ„@×Ó?xšõüçåÞ?öJÎvÌ?ÇÓëë¿y¦4°Ë?O¨ŒIÌ?ÎOòqî?ªIšö®é¿ˆZÀ˜ÄÁË?Ø]ðß?Èá¿j¾Üðøî?» {¥?gË?l•-AõÀ¿Y®Ücúûã¿ó¾5²º Ë?6Ư^oè?" ›ã-H¨¿)qð¾5²Ê?9<Í?lBï¿5k›p?æ?_#«Ë°WÊ?Ê™~¹¬ æ?8æ@BOï¿“ÕeØ+ýÉ?äá.r£¿¥PãÆ)íç?ȇ 妢É?ïܺ*xBä¿ð2çÃe­¿¿ÿ9Ûñ!HÉ?Ã!©bï? ™{(`â¿3ì•þœíÈ?>]Ä֢鿹8á °î?ižP “È?ž1¦Ð­°Ê?zjÅ0s&뿟P “8È?³¯®¢ß?>‰eÉ®Ò?ׯ$ÞÇ?h•ÄÃóî¿A›¤®±ËÚ? µ€1‰ƒÇ?ß)x uì?ûkPí¿Cg;>)Ç?•ƒzêá׿õuú˜fí?wöJÎÆ?ðtF½Õ¿Å3äWléÜ¿¬Ë°WúsÆ?«‘AþËýë?åë|^пã}kduÆ?)[~}kî¿)7؆†¥ê?0&qð¾Å?Ôe¥cBÝà?µÜE)ï¿Pâà}kdÅ?³|¬“DÆ?Åe¿lÂ%ã?ƒ”›Šæ Å? €Nß鿜z½ô˜ª¶?»FV—a¯Ä?¥gm¸sï?¾M³gXç¿ïø¤ÜTÄ?4âAþœI忲·z•›ï?$«Ë°WúÃ?L;šh£b¿fÚŽ0€Dç¿\]†½ÒŸÃ?ØTq¥íiå?8’Ïr‹µ?AÊMEÃ?¿×EN:…ï¿.lí¢dPã?ÇÁûÖÈêÂ?H5‹Tjé?*¼wã·0ï¿ûs¶ãCÂ?Uí.´ÅÅ¿à$Ö*²¯ê?3&qð¾5Â?Ëãræá¿Úí…V«OпgØ+ý9ÛÁ?68wœžî?Fôè ¹YÝ¿›Šæ µ€Á?ôjì¿Ðò`ðÏí?Ó<¡0&Á?‚'HˆžÕ?Hv¢„œKí¿ï[#«ËÀ?¨×ÿ¿îWØ?Dt€ÙÄÚ?@¡0&qÀ?Ó^ÈÒ7Æì¿¶ˆ¤¢I$Ó?sSÑ<¡À?ÊNÍŸæDî?»÷`lƒë¿W “8x¿?X¥žëT¸ß¿Öͯèï?¼o¬.þ?…;’Ë¿n1_W‰7â¿.ÔÆ$¾?>(÷ú ê?¡ì[Ê¡À¿–8xßY½?®¹-®„ï¿ÏSu¼¾\è?þœíø¤¼?•ÕøŸÐoä?¦n‰áUÇï¿lcï»?:£þy3¦?¥ ºLŒ€æ?×eØ+ý9»?r…åqû~濬¹kªßY¦¿FÊMEó„º?¦Ð/Ìï?<ØäúVtä¿®.Ã^éϹ?à ,–eè¿ýòv0’ï? “8xß¹?ýÒ¥ó²À?ü"¿Q꿆÷­‘Õe¸?{ÅÂÒ@â?1 ãÜįË?ö[#«Ë°·?¯Œâï¿óœµÑß?^À˜ÄÁû¶?ÿ¾ݲë?â2QŒdî¿Æ$Þ·F¶?Ø?Œbô<Ó¿¢™Gêì?6‰ƒ÷­‘µ?'Æ=€áÚ¿“•³Óy}Ø¿žíø¤Ü´?§(/©sí?G/¿_»Õ¿Rn*š'´?82J9þí¿ZÐB@Gì?v¶ãCr³?›|êÝüŽÝ?€ÑÊóX×î¿çY]†½²?ïÓïôKiÐ?Àbr°±3á?NÎv|²?›VÀUŽã꿇Ãz·–ëÅ?¶ãCrS±?}7yêsï?Sd6{¢Jé¿%H¹©hž°?{Á{·~ã¿¡j×!«Òï?Y]†½Ò¯?Ç7Y†¥®µ¿òm[£å¿ü!H¹©h®?çºJžç?tëÎ ¨e?Ìê2ì•þ¬?¹”«£Óòï¿?Ɔå?¬³‚”«?P¶áöç?¼˜ÆÇÔï¿}|Rn*ª?dbô²ë·¿ò<Üð_jé?LEó„ZÀ¨?$‘PþÃa㿞°¦¥˜Æ¿,Þ·FV§?Ö@$±vï?n¯eì á¿üÖÈê2ì¥?²Mþë¿ú"¸oJÛî?ÜŸ³‚¤?ñså£ÂÐ?¸íJÅœjì¿«hžP £?D¿ªÎTÝ?BÛm¹”Ö?Œ1‰ƒ÷­¡?o–1×î¿EDAØ?\ús¶ãC ?äy8Èo˜í?|Mó±ïì¿w†½ÒŸ³?°ÖVz‹CÛ¿¾Œî?“8xßš?@¶Qú„ýÒ¿U¼q¤¡࿸©hžP ˜?7ãB£ë?(?šÿ'Ë¿v;>)7•?<1l¶Cï¿T豚U ê?Íjc’?íÞÜxðwâ?Öä¤Ñ½ï¿®½ÒŸ³?!(•ÞÀ?o³fg¯ä?ïà}kdu‰?ë)ÿçiè¿8IsÖ£?n)7̓?¾`Ó`wùï?whíô\ƒæ¿ZO¨ŒI|?®ô–Õs½æ¿fyr"/öï?]–þœíøp?Î,±z}÷¨?õÌWA,Ÿè¿psSÑ<¡V?ó×sxpä?PKx|Ç@#ŠB("(" faces.npy“NUMPYF{'descr': '`S>>>)]jH  .6Cž«‰«žÀØúÃú1$íØíØú1FhFÁhF1F$੾êÈÿê! !êÿÓeCr©‡e©Ë3ü£ÅŽ£ŽlŽ~\q\OqL?a?Ta*?LT?2?*2Tvaƒv˜vƒaéÇþÇÜþ  é 5W5J5þ5 þÅ5J5ÅWBWÒB W B-B  “~qµ“Ê~“ “µ Å°Ž°›Žg0ERgÍgR00ùR0ì×µµ× 0E0ù×ù×ìÏñºÏñϺ˜­Ï˜-dBOd-–«t«‰t«–Íg«ÍôÒßô+wb™®w™Mb+M+0E0R0ù0ùE#¹‚¤‚¹—„™Œ»™¦®™»™‘¦‘™„ê÷ ÷. ÷.÷÷âe.PeP‡œe‡eœzwŒ”Œ¡”Œ™¡Œ¡™®¡®Ã99$íú1ú$íF$F1âÀÍ–ž‰¸–£–‰–ޣޖ‘³¦ž³‘³È¦À³žj3U”¶”©rË”¶©”Ë]r;];&]”r”]b@+@U@wUw@bÒŰÅڸţ°Å¸£ÜñÏñäÏäññþÜéñþþñÜvƒ‹ƒ˜‹˜ƒÄ¢¯ÄįVQÌ<fÌQ1úS19NAVàí AÆèÛý  ýèèýÛþ55þ ==tR=Rq~y~†yv~q~v‹“~‹†~“Ž›°†›Ž›†“›½°¨“µÊ¨µ½¨Ê¨›“›¨½/fQ/Q\“q›½Ò&H&ïï&&&33&H +3@+3+8#bM@M+@+M8MZ8MboZMo|ž‰ž|‘|o‘|Zoл™™»¦»Ý¦Ý»ò»ÐòÁ¬hЬÁ¬u—¬ŠuÎ>Sι`>Î`¹Î—ά—ÎSh¬ÎhP.CePC]PrPerXeC6XCX6K©œ¾Odq:\G\:O÷âÀâ«À‰–t«–‰–t£–¸–£Ø¶íÁ[ŸF[Á[F$ѯš¼Ñš¯ÑVÑAVAÑcѼc§Éc¼§cɧ’Õ÷ÀžÕÀ÷Õ Õê C. e.C.÷ U3ü3ïÚ¸ÚüÅÚïüÚÚ£¸£ÚÅ_Rt_tl_*2*ivTiTG\iGi\~Ü¥ºÇ¥Üº¥˜¥ƒ˜¥Çƒn¥ƒlŽ£ŽÅ£ Ô铨ʸ_Í(_J_ÅJ£_¸Å_£=(==_(=R=RÍ_=ÍÂ×ù× #EZ#8#ZE#ì†Oq†dO¨†qd†›†½›½†¨ ü ô+@ + @M„bb„™™„»„¦»È³ZȦ‘³È‘MÈ8ÈZ8|³‘ZÀEÀgE«À‰À«gìßì#ôßô8M88#m6XmXm¤‚m¤eC..C C! !CXCzXCez¾eÓœ¾Ó¾©e©¾‡¾œ‡z±œ±z±œÓ±ÆÆ±X±ÓXrzrwrzmwrormjorjíØúØåúåØÃœ©¾©œ”¶©”¡¶”¶¡ÃضÃ÷ÕâÕÀâÕ÷êÕ³ÀÕêȳÕÈ«Àž–«ž«–¸«¸ÍÀ«ÍjH3H&H3H]&Hj]HŒ®ÃŒw®wŒUŒjUçÅÒç üÚçüÅçÚôçÒ çô^ÄI^·¢Ä^¢^'<'^IÌ^<^Ì·ªf¿ªÌfˆª¿åúúåòS>u>S>Vxx¯¯xššxcxAcxVAkVk€I¢k€k¢4I4kIk4VV44ýý4àÓ¾ÆÓè ,AA,c,NcN,W BW5 5WlWŽl((=K>`u‚`ðýðÛðýYD{DY"ˆfQDf{{vn{ƒvƒ{{ˆ þéþ   -B  B¥²Ç²¥ ö-ö é\~“^kI7*LdBÒ½dÒBd-d¨Êd½¨.÷ââ÷&]HH]Ã]˶! !6.  +#+ g|‰g‰tRgtgREZgE|gZ;&.P;.&;H;]H;P]Xzeœzm‚zmmzXmXKmK`‚m`e‡r‡œ©z‡e‡zœydWylŽlyW›yŽ%G2%:G%2dBWBdOâÍ«Íï¸ïÍÍâ–͸͖«¶ËíàË©‡”r”‡©Ë”©”˶[´Ÿ}´’´}Ÿ´É’´[ÉÉNcà$íËíËàœÓ¾N…c…šc…¼š…§¼³ž‘³ÕžÈ³‘ê³ÈÕ³êPeËP.eP.@UÐ@Ui‹v‹~ ‹i~‹ ‹Â­‹­˜v‹˜Ž°ÅW°ÒŰW°›Ò²ÇéÔ²é²Ç²²Ôö -öÔ †“q†¨“¨†›d†q†y›y†dM8½¨›üçÅçüç°ÅäÂùäùäÏääÏ­Âä­o„M8oM¦o‘„o¦g|E‰gRg0R0gE³žZžÀZ|ž³Àž‰žg‰gž||ZEZ#EZ8#Zo8Z|‘oZ‘¹ÆÛƹ¤±œ¾Ó±¾±ÓƱƤ±¤±œœ‡”‡z‡”‡z‡œ©Ë¾¶Ë©Ëà¾àËíËØí˶ءŒÃ¡¶j¡Œ¡j¡]¶]¡Ã‚¤4ÄVÄ4IÌ•·ª•Ì·•€€•^)>õÓàõ èÓõèõõà,õõ, Wyްy›y°Žyd›dyByWBJ5lJl5JJ(²{ˆ¿f{fˆY¿Y²²{Y{Ynxš…?\µ µ~ ~µ““µÊµ\Ê\:Ê:\%T?2T?TÏ\G%ø/ÖŸ´}ŸŠŸ’´Ÿ}’’p…p}[}p’§’…š§…§š¼hF[}h[h}ŠuhŠ'<'I''I^<'^ D"?vTv?aóóÑÞ?*a**?Y7"7YnŸÁ´ÁŸ¬s{n²ˆÔöéÇÔé²ÔÇG~\   F9[<^IYfDYLnY7L7YD*"7"*  "  "  ;]&;&;P;];Ë;PË! & &.!.%]r”r]jŒj,AcN,c,NN99[$[9É9NÉ9$9p…Np[’§p’…p§p9[pN9»bÐb@ÐbÈM¦b»Èb¦@  ç{Y{ff{ˆ{ˆ{n{Yn¿Ôö¿Ô#ììÊ#88¨ßʽߨßÊß½ôßôß°Ò›Ò½›½ÒôçÒ°Ò ô ÒçѼÞzum¤ÆÆ¤ÛýÆÛu—‚—¤‚—uŠ•s^s<^<sQsˆQsªˆs•ªò)ÿò6ÿmK6K6K)Km‚_J=_t(_=J_(–__–tn¥ƒ¥n¥ºƒ¥aºa?ϺaÏÑš¯šÑ¼:OÊdO-OdÊö-O-O:iT2Gi2TiÏš¯šxxkįĢ^€k€k€¢û2ÁŸÖøÁÖŸÁŠxVkkVIV4IShu>S`Su`hSFS1F1S> ëø /Df/Q/fD/ ø¹Î¬ÎÁ¬ðÎÛιۘºÏº˜ƒ˜aƒ˜vaL7n*LaL*7LLnƒaLƒuŠ}ksnkljlknmkj¿Ô²¿ª¿²Gi~~i 2Gû2i2T2iGO:q:\qG%%%:%G\:%\)1>)!!)66)K)>K4, Np[9N[N9,9$,1$F$9F<Q^fQD'44'I'<I''/7D/"7Q/D/Q<"//''/< %-::-O-BO%-%- JlWJ_l¡ŒŒ¡Ã¡”¶¡”¡ØÃ¡¶Øõ,õàõà¾Óõ¾ý4AV4V+ô +ô+M+ @+bMb+@ªˆ¿ªûææóóæÑîîûƱ±œ±ÓœèÆýèý±èÓè±Æ¹—ιðÛð¹Î¤¹Û—¹¤ðÎð'<'<ý4ð'ýÛðÛ'I4I`K‚>`u)`>K`)u`—`‚—ëÖ´7LDzǥYDzaÇLÇa¥Ç7L7ÇYî%:%:ÂG\ÂiGÂ\ ¢•·€•¢ª•ˆû2î%G%G2ûæÄÑæææûæÑ¯Äæ¯îÙ·ÙûÄÙîÙûÙ¢·ÙÄ¢Á¬Š¬—Š—¬ÎëÞóÞó7"7 "ë ÉëÞ¼ÉÞɧ´§É¼ÁÖ´ÖÉ´ÉÖëëÖø/ø<ø<Q/QÎãÁÖãøãÖÁøããðãÎð‚Šu‚z‚uzpu}kpsupmpkm2û?û?T2TO-:Oö-ö:)1$$1)AN,4A,VA4pc…Ncpcx…cVxcAVAcN $ ,$,0#  -5B5- B5W5JWáîáöÔáö¿áÔáÌîÌ¿ªÌá¿ÙæûîÙûÌÙî’Ÿ´§’´Š’}’ŠŸ è, A Aõ , õÓè ÓãÁøãøããάãÎã¬Áø / øÖë ÖÉë´’É´§É’*L*?*aLa*?Ñó¼óÑ*óó*ÌîÌî·•Ì·Ì•ªi­Ï­i­˜Ï˜­v•sˆQs^s€^s•€sfˆsQf‚—Š—¤—‚¹—¤—¹¬Ÿ—¬Š—Ÿ  ##     R=0_=RJ=_¯¼Ñ·Ù̷̪•ˆ•ª•·ª·•¢•¢ D//DffD¿DY¿" ë"D "7YD"YÞ§¼ÞɧóÞ¼ÞóÌáá¿öᪿá̪áöá‹Â ‹­Âi‹ ­‹vv‹T‹iT((5 ( (0=(05(J(=JæÄÑįÑÙÄæ·ÄٯĢķ¢xp}pxsš’§š§¼¯š¼š¯¢š¢ÉëÞÉ"ëÞ7"7x€s€x{€ˆs€{€•ˆ€•š…’’…}…x}x……šPKx|Ç@[¡Vœ0D0D €vertices.npyPKx|Ç@#ŠB("(" €ZDfaces.npyPKq©fdipy-0.10.1/dipy/data/files/fib0.pkl.gz000066400000000000000000002734111263041327500175000ustar00rootroot00000000000000‹äd#Mtest0.pklì[i[ËÖýž_2„™®îtw5()&!ÌÈ bD«»«D QA…ßþÖÚ»â¹GA™|î{Ÿ{?äHwjص‡µ×Þ•Ó—ŸŠÒFù¬Ñ,—N}û—ïÙ?‚ÒÙF¹8L›æÌ>UìkQÆ«ý¦ÎM£…·a)k|<9½ÉÞ7ÍÈÉÇãÖ¡n6õEémÓdïg­æÇ¬U:J}<®ÔÈùûÓ¸ÔWóJ­rZ.µ^œJû(ðñüR-(µÜð¼uqjJ§I©ÏŠ"Ë%;ųã…gV¦§åÒÊÊJmX”èc—LkžWÚxR?÷¼ÿŸŸÂ~Òâ!ó«ÿþCüúpõóD{ÆÄÔϵ}e¢ê5ï¦þܰì=w»ýj7çñ6þ­•ï ì}¶¯v}šµñ…}òÿù„m~ýâ7ãïºÜ=^< Hþ "ô´~.=ë.YØcnÏšgVæ¬øûðß¿1ÙcÄé/¿FšÛíy·5«7îó ƒß0ùæÝ¦É?qˆ»®ùk_ylsþ6šî!þ¼Îœ·ó;zèCt”%ü´]4{o¿Î;삺ÚW?©ýD§îÑnî5£oþænëÜ &<’·Y§zÝÂ÷9Ôs®]ø¡šy,ao³Îµ¦} 3üÖÉo%Ý]ùÉ¿]áVîsçÃçç ;¹ˆí A5¶¤¦‚ý¾üá"äǡ׽»ÃôŸ¶Æ ‡í~·nõZ¹n¿Ó­¦ÿ¬öå‘åû“¦x ‡=\´ÿüveÞŞ_dÌV…-@2û¯ˆÿ¢1ˆôXvLV?Ðß´ì‚ÜrÓ»-ú‹ƒ»ýîyö§ý~£‡ió㮋Þè+mÔß³Èûˆ~Ï<í°÷ÐÖ“R+=Û(纥˥S!JûQ©oÿ‡[Pá¿ÅE§ç—ZûÂþ… ÍrÍ¢œå…t©>ì{­._qÓB'Vä¹­,,‚@P?1za…Î6ÕØŽýmÂØJ#+kv'VìsÁXTäv¾÷BÙµuÀ5·¶{™J°b‡‚¤ÞÚ_vS¬¨çõ²E\m§²óxCMq=’ @²ÅŠjõÛafÀŽKÑOYQ_q„%;(´qí±½p?ÃjHdº°Zς٦u§}Ì2ó`žw©À&vQ¨ÔM¨[Vá6k«vp1¹1ÌmÇÛ ¤ù`ÿ#f“Å,.‡•Nxõ²bho”õPäöer>YN£§XßtÂK%ÔcŸ¢YˆBE¤·ÅΓÆXž†.˜ÝºÅ!›û [˜«Ú3œ¤e€áTàa}X’·ª = ±½«—ÃjÜ~‘ ¤z X×W|ü¹¾xá‚O©µ1¼|Ç1y.”¿,Bß“ê¥Q±Ï™9™šTüœÂPÌÙóªE ò`«~mÀ·íp!9 ×Vœ„íÈSY%¼ýç=³o!Ѝ8KèM`«y¦KÍÛ5+'ì\29‡: Aê;_Žx^îM@>Ý㄃‰‚8Q›g¾™€ÏÆÝª^>:l N¨$.+;ß5Š . ¤PÉ×}œzëC74…’}!‰4¦öؤæHñÌ» g$"Zv¤Þ ‘íCâó@gÌ™³:K€€>{…'|§;™ÃP­Žl!]èåÉ8ã‡Î÷ž©%,6‰`³¤ì®"PNI:¬×ÙFΪªœ?#"ð>¹Z™Ä{Èè…‡+#‡Å>ò›IôÁÇ&æ.‚ÀèH­…ß /B†èÈm…] ÓËjg¬ÕàgËŠ=]D5çJâ`M½]0å³bU­îrºÔGLáGtˆpÂ3"먦@òâ&ß¡"àóØ Hß¹Äü´:7È›G—«ðsM=ØÃc8Ÿ•¦ìŸqÖÈÒñaµ~d°ö)’¬%Fœ. è0s°"rËêPÞձïbN1‹"—‰'ö¦)çŒ"QÕ›0\„,$Œ;—<¬Óewø.9‘¶áˆÉfÔF|ãÇìz&œ$Èi²ëCý¹žT—¯á€›l®Lc4(²Ý|VUm Š6}ö±$›V Ï9í@ 50eµê"*y?ÈEBÔëÀHO"á’éãzkPAª.·Yœ†ðC31P”LFï5’så¹bë%ñy2 š˜äÃì)Â4Õ{ä¢Nx“¥tÃDV"ã(dV™ž@‹‚ë‰Ãs‹*-’xÏ9í3ªxíÄc­Â=LØ9£v˜ù%ò¶°'B€É`þ/`k4î È@‘U /ÁQ@RsâN¤¢@ÈÊàœòï¢cˆÁκ9ˆEÖS`Šw…´ DBÓ܆—””êà×™«G2¿ê«·½Œ%8Fê¼ÛÃ"P%ÐCŠ&מê~Æfòbɾí>ëgÎÏ.éD©­cöl  ”]$?œáj FÙÀª¿âÉ¿ÁüqU°í!¸eŠó£jÆcðôâsðéøÌFÞã À~j›dqÿ˜ã.”ŠÚµ‘\aQÝžPs¥ëób¥ÕÀ´b-ˆôoP©µ&§rð ¦\QÄT' Ø S’0R‡@йÐõªÈFÀNX1GÙÐ“Ž‘ÇG¬ŒeˆÜ¯Ö×!Á/ >Åd® ú O" Û€Sq9(rÁW‰Î¢4Ë–?WÜÞIÂî\èרt¼ ÜE‚­ìZj Èóü''Ì¡ìŸUº\ïÍomw9" ˜K.ñ¬¶Z¡ÓtN,yÙ×’cà­/ ñÍŵ`€XKÆC™ÍÛ‚dð`wwØ-ÉFQì1[%ïAðeþ ¢à®üTís>ň4¨·ºTÒÓÑ‹Ÿ N)õun±JÁL4NVÛæd`B8¦¨ªÆ«ÁP!V Y…c ‰«~Eñ.¨ÀF\yP%ODj±£çÓ E@Ù)Ö¡Ûl+QOøÀyp*órGä`¸P؆(§‚Ћ/ž±õq‚<ßRŸ‡pÔÚì莚t^çó¢ yó¦âügò©3öX-9d5r Ý ¹ØPÜÍ ˆFܧ](­l–nrQ å „Ù_t„³pÎ’ áe/œ¥¼Ì¥Jdzs@ÍàÄejç‹äµe ú8Þèʺó,ð ¡ p<‹ˆøÆë› R!ººÊ€ Î“*wÀ{(Kúkmâë1¦$•!€ÅX&yzÔc¥T·üâe¾\]U tÒõ !y2¥9^8Oš~%&Õù[ljRü@N¯…_PZ€ ­}ŸŽmr*ý-f”…?¾&`*óûï¸ôÔ+ ßª%N›2@†Cq‡“Qi‡Ñ‚øYTa2õ•˜æÄ&äÀhD½yÏú#J ‹zÔ¼šæML© ΀Ø>‘†'Töû}Á<ÞW(E{ÇŽs9P+Rd^@'áwø‘¥(òçjã‹ jðyZ´ÓIŸ$?0š½EÊ5€¡¸_;̘Pß"ìQŸGÔr \ Æj©!¤+èt9Ÿ»HßB‡)hyV˜#¨Ós´â-cbÒþ-BELæ/–BS…€ý´<›íïÜéQ bHÂ"þ'_v$ ý#çGÚM™D `^"ÓR]rœ¤Á+v+*äL)¡fÐbJ{x|Š¢Š.3§úÈ£L§˜{Ãõáô‰ÞA.9É&[™œ¢0B²ñüa?M¢͓ϳlո衴ås"7^œ¾¡V?àÎ3}éð ps€ñùà\/àÌl„¢ŒpÐâÊp†€¥bß²ž&»˜0v>ÝÎÓþðÅSè+R=ã‘+žfB-½‡Œ#\žhBÁCÓM`b´=M(°åÚ’‚ñqâj¡ùDrµ tf¨n*Þ1F ëÌŸ‘S‡œ²B•jcR~ÒŒ«î·XEWº;UCš$ºRãK(Ðo?ü—®ÃƒLa5Ôp %î 2Yʹ(¢K-¯w2¤Æ$ÚkívjcrÖUÎÅæ˜ý® aº/1eÜåB˜xÍ”‘ž-Æt|aÌ&R"ZaïÑ!‡ª-÷ï§ÝÀޝ`Z^ÀªÉ¼¡ª+ªÓì%Þ-¡ÀPCÌá¿€wAÐeH(2ä¸Eyjç„e¥NJxÖ¥¾¢?Y #.OÈ*ìLwY>tAs½íø¡Ù¡]91Cx"°Fç Eÿ@<'þ‚ˆM¡'väÆ#耒¼Ïp M¨ –sZÅI·à…®œõ ™t>D´0pÝ^—´sÝ  %ù7N"T½[pFyœ³~!˜—Â䯼vžhI`‡r{È¡:ÿÞ 0;¨Ö¨  ô¨2Øü×8ÜVÁ=p¸"ŒÆkê-"ûpe!ºNó¦Ú:rõ³kPÔͳ¯#K¨2ꆂüÓª0„SÖÈ¢ó”v“~Iü|É*mI9èd…„àî:Hkì/ªá×®>À§Ò·HÅ.¿²p!Ÿê€ƒj‘Еgœ&A~2ÈîÔ ¿3ñÔõpö{kÔ†kuMÀDÂA†ÍwP‹È£yõnœíŠÕ蹫ˆÇ\¿¥ò6ýWªII3ó—TιîDí°x—ù\æ¸#ñe¢È˜NÌÊç%ï×Ý~’x™|}4‹ÂQ#½ ÷"šR;_^ô†¡KÛH»°j(© t6 ƒÞvXHe–Å› N¤šŠä½IÕÍýW =€Y1é J+oÚmó§Žô›üòïÄËiqbÔÌŠ]9œ0xt-°Ñî§ çfí®ÁÙ°ºèrÅäHFÄÛbaqYÙíThèɗʉ¥gˆ¿N2’éÂæ´‚'k€ªJï,nœrñJmŒPTƒËtU´ã¤ÔÔW…34íE2žR¯'¾…?ˆŒ‹¹0¥„ ÁMyÑ¥¾°ÕS´æpH$*þv»uâ<¡ËÈBï»…-N°µˆ—‘Éimä§0èêÙ^ºA¡ñ ñ eØ¥þÆáÚoD3ãp4ëS-êÒ7ÏÔ`ˆJ³SD#Ö+2bÞ]Àx[€æ»ÌƒÈLà<\ÞÀÿ¼mG“6^/šô ‘Ø‘Ž^¡‹AsŒRì=Wý=št+ˆ~ŸåLWÀ½ÕŽ!?¦ŒÐ)ŪµƒS„<¥]ý‘Ë©¾)5ÜSëƒW+'^æ•4[®ê0Ô¦É&€ÖWâL“ Cx}B5lSD3®kˆÀ/f"ÕÍ# S«,<—m5G¥üšåÏW xi~êZ¥¾+@exéÁ2"¡jñ²Q,ñD­cµË1Aà!¸ÀLÓj›K|O@Áh‚0Ì]™èŽLSE›WÀ(Ão°(®:Rø˜9‡ašVøÕNޱÔu]d±áªSp-?sOÒ&C ÚX³B/¹6°»x·^î¸{U#1 ›êɘ‰B)—ˆed;¾p}çV"GƒÊ§¢÷/9•î ®¥ãƒ¸©ìQLõA¢~äA d0!Uœ§ÝpúqŽËhÏ–oÍv޲009'‹¤tϲÖ餖?¢¯)œó§•³º»¢Šó¬»ÄdÅøO¿s0D\ºƒ;|ÔpÒŽõçê`Êu2€s~ó ¡Æ‡ Î>ÀÚŒ”Ghišj.YÒ˜úf(é‚I°]½ø•Z™r”-¢ôèéÚ5â×t5ô½¤nÚæÈF/¶q“»ŸiÎ=qvG€4µ´ü95Ëmº ÌÒÎeg€4Yé†[êÇʇâbÑR ÷[@-dz´Ò4Ýz8ÀßÞ"úw’Ú§9Cˆ ™1ˆNWÅ"ý™GaéW¢AÖ©‚̘ÌÁK€êîªR£ß‹â(Á®òxžOBWÊtMc<êÅv¸NQ¸L½[\ÁÓÛwi&˜Q½å¨­£,IDÞ ‡á¯Å’ºürÜn(<Ã)‹|$•  A§:ÜøˆÐ;î%()~ §5+(févÔ¤ÕQª—(Â#xÞÌÏ7³H%\‡ÓMÂçrÛÁÅ(P,r|1•øI‡“´ß¹KшøÄ c'ùˆ#Z‰óNêÝ{r齓ÜÓjƒ­Ì[Á†)w:ÿ‰)9Ý<†ÏËZ°8ÂO"ï‹å¹¹D­Hl>ˆ‡nyà¬D‚BÎ(&¿|î¸!E‡¥µŽ uÂT®Òðe¶Môä·wΣã›z‰2A“~K€æ5Œ ãDê*\gø1 ·0t«–¸ºZmèÕJüA_Ö—‘öH¥yÖýµMaš¿åÀrà"FIÄ'6L€NPD5zæZˆÄòN™h P£$©¿]DÉj±Wÿz¨ûªÓ…qPoáþ<Ž HÝpôÈ&ôºáˆUTû@åR¬89áø?º¾C»jmYöWœq¶²¦§sÎ0"(0`Lß~UÕ­ìsßûÝ}¼íµ¤:TWWg’‹‰_¥s-ÿSƒˆ î~ïâhq-ðJ NAÆêÓ:ŠnÌJA§˜OÕŠ©g Xda›,­Ø—rƒ³ÀõŸÖŒx97¨ #ózé« åºxìr ¾ËÂJw¦f·^·3ØÆƒ# Y2ª¬¼LžméMuoièŦªÆ"Ý0ÒÂCÇ—â èÖ_ŒÚ¡XTM<¯!ï=œ[ê#£™D¯¬;XqGÛ:f%9¿+1‰/%´‚sû ÈÕc‚ëÄ,_‰É6õ˜oQH0SDµ/ËÒæº¬}â¯/C,]qã>kØÈ<´œê‰¼Y»¯íÏ\·j_ñãʬœŠ{ÏoêE3¡¯›l±¦‡8N<}i¸?Ù°"€YÜÍÂÞ çjÜÖø²$üh.ë"8oÕß6¢Ôâ\„~ÆÒsëú×ÿ+~Íœ«ÿ™†â 3§eLÊûOW ‡c¼°Ìze/ä~;þS0Ç’}n#qá_ÌH$ô—Ôûç0ÁŽÿOr„Ž0!A0V9SòmEx ¶-†ÁÏë¿3ø“íœQÃÍk÷D”±•fo±ò"G­Ô?§jjbù¥ˆ†…´&X'/‘HÞªBzŒÍN¤Pž¥Z£E4ðÄ{}ÖÕ®•ƒ,AuuþŠì4OCÅà#,Ï;þ,Q’úGu`%j,i>‘Ö_NzÉhMMðb B„ÓA)ÿ ®8ß`³‡£`Nž³Ô¨«Nwí9[XÅC5àI¼‹î~ú6e‹?•åå{˜Ã.-Û¶ÏÒG³0°°†¸söŠI¹?MÚ†?0sê$œ~×Ö+ЍøH ý6OXËù)òM"½Ø†c\õô,½íÏ!½üO«¶Eâj9JIù|ÕŠ®|(ËpÞe2»p;FÀíÚÏÙų¯OIìô†äL×Î;gÞÎ^È~Ð_·ˆ±eŒÊ_‡Ìüo1»ðÄ´ -LAÚÒý®˜±·1E:E!( ¢Ïc¤®e_?næ¿„[³l/€s-NVñZ>¸ªÉËQWLêmó#;óR&RÇëp„©sV.êÝ%m63ÏÅAR«è¨ƒ ·Õ:+$·¨*û“7Ž{Æ:G™ãè’ÃZÏK¬É­ß;Ö;0)Å€õ¾>þ¦†ÓºA_¬*™¬ñ“bÄ>ȤÎáíó,K?ÕZ¼‡ñðˆy5óD~æä„.WÔƒ*VäDÙò"ö–Ün0Å›èì¬xUN2Ön¯qþO%ï‹ër^M”cÕ”Á(WåÈP‚ÏWŸƒ˜Oáy º’@ÑÏæ³Ù£ñ XäA˜~¡%Š2·tÒ&¸Å#ºжFþçÇöŠÕAG’K=Ѥ¨§œ{ò˜ãˆÆMùnúè„´'GB ^Y}¹À‹âƒÌßÇêÀ–¹È±òØ?FyqUî¾™Ÿ½äÛœânâ®ù³‡Ø–Ã{²9¦òÄóí³­m:®ß¸Ûåäå‘]þ®iO‰ÝÕç?A·ìQ9dÙ“ú¸&¹GMý¾U@;´{zÀ›äöèï ‡ø ÙyðM!V[˜ñ ý¥Ñ‹>Ó#Œ"¡®ºèÃÿ6ÕŘ,2îŒÓ|ÁÏkA TTþûNê€{½lï4FƒãÉ*ò¬Db¶ù㳪Ϊ‹¿&áNEâæ:9hzàá4Œ±h¼t^ bP&ãvà¯FeÑjzÇôÒróV¥ñh?´„Jà€F•×~´Ç„:fÓfbq}aáðl`(ú‡: Õ#DV]  ž ³âœ¼Â}à5¹ÎÀÇÀ>€J§­bw `¤˜ô_Y›DâUþúœU8‘.=Ÿ¸]e–iš—ó'Vüï(|ÁÂ÷?™„uÞitÏúµ£¶CÏ[LªÕÃ1ѼÜcÇáÉf@qb¦è”WÇ©X«êŽ!8Óî“u´°Ï ` r³¨Ée¦Æ(K˜Qá>áâ’ˬŌæ~XÙfn 9«øòö*8­d×Ú…ì‰MÁ÷a ÿß1Žïù’µÿáV€—‚L!ó $>ß%Y©ÛÒv@*kV‹§vmn=…=¦™ Œrô]ÿ}c…–25U±1÷;’à°t“ùþÆ7_é7z’·yË ¿JózcÉ×¼ ¡6OZ!g¢&š©¬lz·©Y/mð»ò€Kg0ʼ-îûåq+‘sV|H»•4§¶ i“TØs¥¿ÈL­R{Ä_1»r]Òj±g×uG‡†û°Q&µ>\ãB‚J€Ž'Ú"®A<ï‚d®!$•9þÛóô®%,²äš·ÓdhgV^ÂÅuÒÚ ÑPC íñÚd¡Š21nf÷¬)¶d küâ.£8b) ¶ä–AhÑ%ÈÎùoúÑ}lΟQ¦Å 0×nBË}ñs€müÊžDˆEŽŸ±¶·Ü‰š)ó|Ÿ» cÜØ¤á`|e¶5àòM‰§Ül~ɦÚ2ÿc*´|Y_¤ç †qµ!„ ø%"}¥ËÃÅC¯jÂäO^^²7•窇ï8¦ý‰fvþ,Â+ á"×#•G(cšÕNkX%G¸ˆHK ÆôéÛ;y 7¶ËÏdqˆ–ù°=ÛÂ'1ȯ5˜ì)ZãC.± ùCsm!H…»&¾Ó‰b;1csê^r¬kΑÖUÙ ¦“å³”îyÉÇ œîÙ7½ez·€Ïî%àNôuòâj ”4zU2n44'`Ä Ñe•¸Ü.‘;ŠUN’ßౘ«-†R8ñÁ‰qªZ˜h`T5ênBßéjxDмÓdô“ Âÿ9‹FZ¹pÿ¯Æ;¢ïmh^g ï¯âE¥“ñ–)EÒAy¯ª®^ôÕÝ {¾Z ¸^®Ð§—¦ Ô–âÌËzsVÃoÖXš(lnj¬f֗˘Ñxm P¬óùPÄÝ-Á&«è: ûsPV»%Ë—A“ÝL÷@`ÍiÅ“÷7k,Ò'Ût¿00ee¡¯ôu‚ƒ&þy‹ç_M½"Zíìö°à+gÍ>þ³.0,±–pH) Ø\+m¬R¹² YÂxލ~V_c×FÙ^÷îüÀeXeÔ6‘’ï.Á>XûùóʼnΦa{K>zPáÚŸwÃÓ“°rMÆÉÕHºÞÑVÅðé}ÍoÚ']Ò‰k2¿zú¯Ùæ±ÈZ0¢[ÁÞµX¥±ŠÒ.>/Xàà|+_Y¾ìvQý÷tVã×ùü©T¢ùJíˆ%ÈA3ßl`P­x T/aÁXeЏ Ô2`æÇ4Ï›7'/qs’/ú{ª ›ð»õ†Ž»·._WgX¢ŽáÉ‘xÄÁî)à*FéÞR¿éTá¯åèW.ãa|ru~H2·ºD\\ ?åœg Û‘=Â(ðRÅ/]€<{Ç¡¦Q$²ù·ßCñ?zügÃÔŠ)ùù¬úLt†"PË‚w`‘Ô#¤“eöß”¬…³È\|B*l¬¸˜ØÄB+¨n“•<ײv^£zç¥Ò‹Ñ_‚! H'é̸Õêû #ÍÃ~Á;š!«fðŒ«©ç°.&=6wñV,€•Zd®fÛ¦æ. °¯¿ªpeW›7$¡'›8‹]ñŽ #ZY„Ó«ÈôÄ-_ˆ5Irøõ¸–ˆõ±/‰/IðFã4ÿ-®ÜH/Uõõ°í°iØÐî<±ÑS9Tdßz?€œçõÎíW…1Øêæß@ß(È"9¶Zë­i’h.ÔÐ&ž™’+Y˜{ÔGðÚG¬ÈÆüçü•@!™'D¹Û×c8~/Ÿw@F_m¶Øg†Ž7ôUáû`‰çv䉗uõ\›Šòø>laÌ’%[ƒ¢aöV;r‡ÜäŠ W@Ä%P(Â3ÏØË*F)ÉáM×0ÔueÀ ú&íöÞâ %dM•èBçÏkI…²rÓ~]ÀºÐÐIІLÈ7ùuu¤»^oÙ í´¢¸î{ìÙ´Mo?*Fëü½„ϻ׫ç:ˆËò·î   ³¿DaRt_K[û¡­>É«äÅüÂ<º]{ÚP#…bwί66Ô¥ Ÿ¯OÒN‹”‰é â±´OtÁM‚»Éߥ—/?‘§óxA1{l8#¸ &Ê™3mïcAGã Dù£f€œÀêgøQ6ÙÕʦš´æ3Pv?IÐë¶0²k¾È;’´bÖÙqN–-[9Î42̪`GŸ ’[ÓP€VÄû>É´ïcÞéÛæ[S¤!’“tÇ„;–×j¢Ôu‚@ߺ14Ý»Ínænñ*¼‡ã/¯ˆ1«Lòƒ# C¨z÷Wœ=ò,…Ø"¢Ñ§T–;L»q´¼6¶‡*•¬ðZSaéÊ€„›qE†”¹qÒNø«¯IÁ!}˜iü}â±° §7¬ê½[¡_tfdÈ\2š$,VÀC­‚ó~ÔŽoéb¨…h·"/êºò÷,²Àiøäæšùk¹­¬«f>¬‹ºñ)|v<„ô´£kÔäè°rJ;…#äTÀ¨ªƒ@â›쟭!&L_ £â×@à Ó‚ýbC:y»Ï¿ klÒ¬ïÝÛT©O¯9¿TëËQ,ÚlM³ØjÊ?,g¨A:ñÊg¬Ñ¨}öSA…Z ;WðoÕu¤xº|¯F!›ÐÏ‹5z7 ¢Œì›,ìɦ†±zÀº5¡DýÜ12!ÿ<µèÆ54¸bø4Ùy%8¦+Æ5å­à_¸æYvb·ÍÌ9½¹aAѯaÙ8ÈðL ÊÜøw¸<ÏfwÒW_âöœÙÅ”" ©Ë1©tßȉ…9f«gvdÅ8Î{+æ>ÏvôuU^ô>”{ú_ØšíÀVgƒ{ºŸuÑY@ÖÏ“H¶‡×!Ooö5©œWNœ²GÅ‘L"ÉFðè°„¸su4Ööö‘°ÊÅ`Õ†M9EØ…Tq«šHsUŒ0‚æ0O|@쬒©ëï²ÆâÙsÈ]3ôls¤v‡ÅŽ:´„Ä—›V°³„ÔÉ#[…ϲ»X3§ø‰[Ÿm-[ ™j¶iPa¤ÍÂAU†×î@5ÏF,|¶<´¡.›È–+ÊDÛv}§Þ0jdVÔ{×¼@·-ŠâÏV$<[؃ò™õgUáDcM2ÔÓ½I@Ì×I›ÉêúÂ{å »À:µk1Ź?nŸ¼_D¬&©¹2³Š»úC¸\lgZ›Ae/ÜÑYÍ%‚tT“ÇÚŠD·ÔÄO6àïá™|¶VâxÊ ./^ P’*pYœ³ô‘ ÇM2g¦ ü²Ó õp놟±¹”ÞoGìRk½8€yý+M‡ô;IqÈ@3ÉíÈ.ä÷•ÞǯÃ4èiOŸþ/‡aÓÍô¸dÛufQÀa¬¥¢™‘Õñ}¼/2¬F·ívØ ;)¿bÛ·ËÜS¡DQE|üeñKNRréü•ÀøëðWyþR8s×h7ÎD¨ËzÏ—ZgÉȸXú÷Ñ´qœ£Q}~yµlåD³\§vº¬é#wªÉ2Ò`¡‡T,$PįÑƈ¨^ɳÀþ:9A$tuÛª#1-ÄÅ5ùi¢F€Á¡Þ‚S±¤ëŠd‚'—¬™NoµHdf?"ͺøXL,Ã9²?X²ÑI 6Ë’Qd{¨‹çWÖ×û„«´ü PÇËÐhK”œ)ͱ9ü–®¼“}e%‹òe‘ÿ»AËh¶­>¢Ê.ñkõÓ¤¾0>†|ŒµóºšÆ¥Ê+Ç ÔõsܼDN«“oÎíVZ¨(áݰ‡þž-aÔ!Š•»´=duõƒ},Y>©•.¸ûœ™.î '¿×Î#(ÈÉËýï[Øœ-õ‡Œ{25%¾ÇÎæšAÚlÿúŒUoQ(*9Ú‹VJ÷ªè¯I& ö .íéaE<œLa$kÉëÅËÝ-«MõÄ"±åE“Žþ€ÕJ¾ü}ȲÄÖ³øë°·7+‡é)k4åÕ‘0Õ1‘|îÊ’–Ù ǽtú,™Qǘž& Å œâø¬n;]²ŠÃÊÕ8GÉõ(•iÚ­óÏ Æ ™A±¢“.¨ •§—ƒþ:žA¼Ö|êx‹!L%{¤rKÐ bIe}Gɾr÷œDÜñ#œÇŸÔîo)ÀÔ„«{5©€Ö>ûšjC¾üªWîGoØŽUhD^ˆ½*JßþAŒSîÃ%=!oX\ºòºDX©f©E 7ü<ÏüHƒ.`&¤¨Á-&3ó²èìŽ~Yä/æõ´œ×fR=Ø­$ëaI¡æY6)j6ÉOD¸^Úé©Ã=x˜xFÏ=ý4¬_Á&¦¼¼8¯’i°×Dn«ÿ®M Zd‚´¡¿ú÷|–§V !%úP¤VtEj É+µxÑ2F‰¹é ¹: ¯<¡ŽDWõVÊ5Lª&O4½swÛŸámýÑÁ:y#Ïæ€ÔC[Âûúvœ3s®†zO«‚­hÞóÞð‹ÊDØ\+‡:U²|¦ÙI·b…?^W×Ù§°…»žØù§ÿ¥,`–u~d?ÿ/ëA.E£îƒ8ò–ÂßáAÜ9èeÀàì,[×q™¿îØÁ…L‹=›þo…·à€ÍWñcÍó”C‡Ñ'Âå`5&ªm{§8T»áÄ‹êj dÊ'ÊK­ìÙš¯´ªxšd¨hòÃgÜ9 ’xïÙô\B!u„æõxµm¯÷qú5ª æ›ð»¬?.HUÿa¦kîÆ>ˆÿrœ td÷Qàréu‹ÅüÕáæÚï)d­¼¶ÕK¬î+|࣋äLF9QVøb¹jhQÖµòåŠ?%¤€¼À¹4žv)³Ôkl3mØã¸²ÿðù¡Ä2rtêâ­|n™y¥Åþ7IìQË}é7“Ć8DüRm%uÏú{ÝN¸¸þÎÜ­³Xaዃ¢˜£Œ®æðvŸ×‹O7'oÍdÁ¼ (ž(2TŠýa‚³â[Ñ-ªÿÐ'úi¯Š¡”lñ‘b.•DœQz{p“ªšë,WeÙO¶Xy¥ F Þ{Ú½~pnqŶ匴•¯þ·ÔZb£ HDò˜9Z+8B*ºûdÕ°cñÂÕt‚…I6šTòBU(œiÂs4/€“˜Õ+B?Ç“‰y¯ÍÏž›ÞàDæ«cðl¹föD aNPוTe:'á x¥ FÉ“TÅÓ݇«ViAÙ‘"vûhuŒN~kÄÈzß&픲/Ð"$ÄËúñ$è߄“(¶¹Ø¦½¼‘¸žµkƒ’ü1$# °M‘¿Iûº *ÖòlVÒ† áVÆÒ/5dpÂÝKMœó!”$áùÁ\:*ج%×/Õq6Ï|ë* „Å‹œ‘óKÂÌfeî¬ÕЂJî9v7HAó]w©v˜Ž´y£IûšÛ“¶î/šÆÚ8P•m,ÜÝER#|Œx>è¹ÊE $ÀeUˆíÃ6þÄ2—­o5Q}¥„óJŽË¨í‘h7Iþ~E؆bD¸î^ htê;rmÁHZ¨¨B<àš!M±jù¿¤ã /Õ·E;£jèX€$-²Ù!ëX¤`·½6=Ò‹t5·×ߟ¤Âî`'†¯ ] g2xÂ}+õKüº©®îùÿW„ïMq+9sT¡LŽÀtwœs±ò,/%ÈéYëQ„’½às$ Nƒ„ðWpÆ Þ[p¹¨ˆ1„µ– §Š½9{´B5zñ:³¼}}'z…%íÈ=Ñ&ì¥Ùƒ8¸»§æªÎ†å ²“Òl Äs%§Hi¡ OÎ,%•ê¼È6öIÄIÄ^›âüT¿¦+ÝŒ¸j¢”~cuù§ÜuÇ;{»_ûÙ\̤aú;îâ>åýzYÊ3$;ÈÁL1h¹â«›rSlk©M¥#4­­YÈŠ–¦Þ¤Ró‹Ä5lú°ÛYÅæyŸLØùî ù±ØÀRÛ=ÝÒʘè›hr± Ô[<úÚ©Qá´U/ø–ñŽýúá­æüäÞ0.J>\jž´­eµr¤Ø$š¿]€™­É?ú¤OYì xJÇTM2Œ™°OÀÉÃ¥» C¶Æ…×øé¾XKéz„ô6ƒ9ÏÛÇ«8'ø¬r“ê c” Ó°K5½N pž/6ºñ[øÃr¹*ç<²‹.ެ#DåÊïz¹`Ô¼ul£Ò¿×¯“Ø{v'ÓmÜúZšI&]VÊØå(…ÂÝ|̪ÝÄ=+VwàèU•_6Àº±.Êš§Â¢N„Þûˆ#˜² ¿éØ‚W.»XpJHOvÔ68Î)ï—7Aß›ÉýÊ…†ûrxWì[U àbîÇu9ï!笒ÖTáá5WÇÊM´1—Hyá 2ÒPd)ѳ&dt_v'ÃÙJÊUµÃ4p‹f§ÇÄqWÕ—?ODn<ÜÌ6-ÃsŬóDEwH*£Ö&û~vÿµñ¸Ú[ö’yâJé|b"¹˜-†]³¿®un‚?ôü'Jw©Â‰6ݬŸLeÊñAwÀv<…œ&Ô¤¡ZÀæH Ó`ÿ˜á1±¯¾¨¯©Äµˆ['{£g¸Û¬y–šIº©*F"¨nâøôØ™3ö«»Þñ7¿›¹­¨oGSÓU XôëÝÇrGgF`á'$õÎJûùÙauÊÂ&;êò´¥œã*ßÊ­à¥#·øÀµÏÏÄKçþ\Cß:e—TE6°þoðl‰^´V#™ÞÃÿ•@5WÆþÇšeȰª/^jZYûdeFêì ŒäH*u®è(È}ñâõ3S°l.ÈïyüB>—|oÆSo®Ûupï)5\kPD¶j‰ZW¤Q²È]EѪ«:G¢ï  1ss‚à9GÅ37w—8eJ¸OâÖãS>VG‰R|n^\€¤ã/DZ~Û¦_ÚB9´þOÇ_eÅ¢,tŽ!÷0„Á[lëÆ=u»ŠÝ×5`þü(åÈ´=ÕÊz SE`K9ѳräØîã5Á:¤1)ýÝ´3§¬ Àœi;O#x3Þ]üï@Op2Ñg0ì2dguÏÎi š×`Ÿ4>¿‡¹E@°HÉ|aJ›x’m ‰…ÒüóÒtï.ëFƒöõÆÛbá*æ¾Õn6׸ûÿK¼*!ZIÓG>qðjž,‡ˆtœ½1·ÝN™Ð€OÄËü¤G&(à¦ó"ŠÀA ×Dà³±ÃÎyd^]£¦QM¶AH\_(ŠJÈëMÁ“2Þ#•GOz^|›ñÚì*TðCsOl=ˆx8:Ñ_XyÆ eÇXâ¼±æönnËŽW®¯¸wì¨md#Yûï"mÛÇ‚1”9xös1’&8%§—|h$ÂÑœœj\x”|ã½moržhŒù.®EÂÕÙvÞÞàŒãçÁ„éDôÜq E’„µü°è‰¨oÉ®pü&Štäoy(꫹o[гƒcdþÅÍ,JXÂ@ÒíQóú*‰ò¼l~U>ñXVÿÍ‚¬+“'$ûô#971|g–¸ò2ÑsqðÙ”pÀîš1\iS¤¡"oŸüNlÑ~¸jè¥ò«ñ=NM–bò½ä¹ÇUïCÀ1”«g\¸Ù$EN¯Z†×4Éê+qïeAé' }R%+ÎßË¿æ€Ãšlþ Àé|ÑgheCŠjÖ®ˆ+é–sðylÛódáHôåŒnùÄ—¥8Küc¿^¦ÚÎ-7‹pc—ÀÍi˰ElmWô§ñÃŒŒO÷¿²‘i Lµq‚3+ÐFú Ks/–ìĵ9WÏŒËlœ„}*_*ºi¢9&õ^ë6£Æ…pôTO“¬}©HkœÄí¨ÜõüBž|ÉŽÊššS÷(› Üì›QEIøoF±Yö›=8š¯'F9Ü#A¹Þy#g0O.šh"½f®”üT_bbD]³×ÈX%°G1ÔîœeÂ…x?xÿÄþ\O²¾/åÑ:*ºÎ§ëAûì3—–¥×˜§±TÄR ZÏy×ü–ü›á‹/öº þÒúo‡é°/ýw¸ØO0&jçüa×8®\õ=1È„’±pÌjF£ÎŠ˜z,n/A³¬ô+P™*¬ÐÔÕ'÷Òñ«g€`k÷±Íé|¨žÑ¤‰Ryypfõì…rªó ’ñ†m5^Úí¥h Kg%mž¢MÝ1W²T†òw@ ¡‚"©hoõ„m}Z ¼<¶ÏôY|1ME5Aºt=ðM½–$¥å\ QÇÄIþ.=føbäˆPAËñµøÿÑx¼¢¬×ìÖŸôlUùЏÊoÔDë4‘´Lùð$íÂgû2\/—åsQp ¦ qf†`ä|=É)YqféAæD <ÒßÜ!ö*8À5#)ƒ˜è|&áYî‹«Šy‹ÖÊ ´t“|!ŠÝ’Éc;g·¯'?n›Y~Õe5’hv Õ'<’×#(Ÿ3Å–ÙBκúy_'_Ê8 ÅÇ<| Å&gÿ§—’ÁÇ ë96dîôŸ™Ae˜JHð•9—ÆŽHë=-åSf˜3dUÑ3ɽÍññPøcœX£¤Ó×{œUS ê¬ÕãE)Dû¿æ/fÅä=%ãTYð¼I…–’ͽKöz2aïÚ$Í’=~ù\¶<3_Œ`VÎP±hpÆH§¢M¾eØr«Î ¥ø¬ |‡,Ì|`_m‘öpdË¢èÓËÄÔì™…4Õár‰ç)ÁOFÉSÜ¿¢X[ ´t©íꦽ²/‰+›~µ@»Wvhã㯒ó°m”yu Ù Þûl¤:·¿÷À‹—“)^uò«ì´›‘6瑎V¿ø0œãJMœØá·±ÆÎì,¡dN•¶Š¨fg¢RJh4çÙ£ßBÞ3•„Ìjô Y*£`¶ôæbJŠ0É÷­D9Í¥»sнî;Èß©\‡æ·"IîÝYÒâ8ãÊM»²wÒÕG]OŒf Q"çÃ(¹:Œ[HJ²öŸò®‘:ÓYjÜUå>Ü\¼GàHspïßoʦӾfòšÝ9$XN`Ä÷³W¹øÁ˜Ä´w0†NwÙ¸Yª!Ï$o¨#B¥†ïz‘¥Qd&¢Š—Œ@æ"Ý ËtšªÂYØH{Ô‘ñ…öë=†´˜¢Y »T¥¿ÑOÒ²<÷WAÿG›äΰ‘OÞÍ#ã*‚•÷RÇËË5ð¼(¼K[˜}Ï>•qFX’–) ÊY¬Žæn™¸:{žjÿ—ýßÐcmÙ6™Å-‡5T«c¹jìöknÃ…\ a•Õ¾§Å‘´*e‡Yóª¢×juÛkÅð¸\V‰sŸñÇ”)å"Íøë¥‚ $&rqÿçºmsjgHc”r‰.ݦ}³®*‡VÞ ÒžÚo¼Šü9‹V4˜sÙ¦ý-ÌRCEx¹æVÖ0C›4EÀ½Ö[y"&¥4ëy³Bf!_t;8;Ì?£´£0«\¢ò•zð8í*úÌ´žƒ%\#$Ïã„ÕæWK1Kãe“‘ŒæN¥=­Þ²úW‚LÕM|ôhÚ~|ýò§„jUÄ,½f9h pnrŸ§m ™¹û vÉoA'û…¤OØ%Uz ‡”T0[ì²D—µô°ÉþÞ¨e±w M›µ?Ië6’¶ê’Â4¡ 3›ƒ´§¯n*A#uB0>µÞÀ@ou1´==w¦B¹•ÍœyTOÍÉCº¤‰M$AŒþ'Õ_€6§ç…%p‚l¿™yXäZÏ€+g¶#òq!¡è&yUþnÕ±m4ÞŠj3Öð5hv'¡bt°ƒÃù¿³²žÀÕ²(/N©½I»qLðÇ…%róD„’ ›Ëµg`(pÅ¥ý4¤˜v¨kÜøíY,Õ7± ©ëK»»‡˜Õ\ïS_½GŽË²8ˆCtƒyýü ñ@å€ô‘•cîP%¯`ê·œãVž¨à„9Ý@¶ …,Åv{ª°sÒþ†Â¶,)ÆÇv˜Ð,:c8 $ñ£ËT¨M°sÁ¡íJ˜£;ߥ 9ˆ§â³Y»*‹AˆùöæyQ>ÎL(›",ÀJ]©pmܱèxļƒ$¸'_°NËK²òüZcË$²ªEÂ:™y™ŒÙ‰§­¸¿ ì1äö™%âËò{ 8ÌAôX_ìÛ%–HË`3 o_˜(V#j»Ã{*P7ûÈ)¡™è³À%S—ÓîÜ1& „àK-ÜX­¯p¬qñï•Ø³x[ϺD®_cÒ t®1Of¾ÂM>œ7Wã>fñW1E%2”Â_¾7DóONz $|H0Z3gÛ5çvM5š’"ø—qÚn›Vh´ºH |¼Ì±’ÚïËrCpüL“˜:–ëß?QŠ–¯Ë•ÍP 7W€ŒóYÝ_óvzV}Ð̪X²­ ¯ë@ ªä ä| Kwyõzd OµªA+5X´?¹DclãÕŸaï~ÿŠÑ:!y߈·Ëó)»8§Ùf®ˆ ÛÆeLI‚ã¸ÌXiÄÙÈ9¾.‹G9ÙÔ#™’°ì§gAe>þ1.‚OVŽÛg—Ùzâ#ùuâg>39Á¸åtyW›KÁ†ä]™¡W²'®V[LMrZfò™e¸QYê*`Ý6Ì9x° o l Û¾ybŽTFA €ÕœY–[Õ¬G]fËg#‹e ÿ.ß› .AÉ Y6%¯Z…?_¥.‘Êq§–sAò~‚áÓ8KFK‚ô§$›±cìëÜØÕ.IžLØs=õ;Çvù‡92Å£w‹r5ï>$òYZ¥ßd³®5wÆíÍûorµêìhØ„ŠTÂÏyù4TEUæ{$d¬Xmøõk-ILÀ ªéߊQd]=bX“YÍpî•óoZ¹=Ný 5$’`‰š0c6{{ü}±WõšmeYòF7o*/Ù¹Ql ^ÃðÂØ¯2ò˜U¶¢ü‚¬~jX‡¸¬W3’ÝÈ˃Û9ˆ˜×‰FD@Ÿ¨Ê4}®Õe£#ë_ Áœã“´\)Æ‚¾¹ÒàŽ4\ìyyÑ3ü¸*ŸRÌÄÕÄ>¬XÑÆ°<’£ÁT—šï%òýÚMDs ¨‚…ÂIÇN5}¦1gáý7 d‹i4‡ÔUâO(/×áϵ%_qV+i#2ydüÈ®Ö@ƒÜ…%Ò½ÐÛ¢„¼C¸Ç2A‡G6^o[ë6,vÍ/ŠË&15ßy *uào›!òmS2ñZ„šÕ›M¿£N±Ôq[²™¶t 86wr´^ôîÅóyvrdŠýgbD›<þã¬òÆbB×Sˆªá–`¤ðEõ’Zô"˜¿” ÚEÿëŽCÁ|É•KÅå͹ÞUî Rëý[ USŒÑíaÇgˆD˜U÷)W¬–Ç¡¼Y²÷ŒÄX_–¨xæ­}ý"¢äÄ0vžE×}bŒµ.÷ÞÜ‘H§åÇ µ›:_凹K–$p2u5‹ËBé 8Ì v¢oáZWƒ0Ý:!‚±apˆ™‹'–â Fhü&KkÿÖÀ·Š5êg‚E<)“¥ìA®©á¦ôµ¾œRÙëj ä5~…y)­‹Û+âôæßñ<éÁ·S ãs§%ÛqäšF!”œ F¬Â¿lzІqJhöÍÐû¿$âoþW"`?{Í*y¨¤¸ÆÃÜGµLxaŸÉýg}9w8~¥.÷äÆþÜ S[• 1.»»Ý¤·`Š#˜î¾žJ'>áÈ7¦™9{öÙÞ'*wK÷ZÉ_˜üšZûÖ{š¶*úÿNlpðA-ŸòÏe¶Ð1e³Ûvô©Þ_ü$Ÿ&· £03wôIƒ0˜Ø’> °¡WzzÆh3D•šû¾©–Ëé0.|¶2™W4èÅez• ïUØÅ¿Ì1Ÿ«Å„ÖŠÀ§}B‘Øß€jðÊE»ÛÒ„—„´Yš³ªö¶ÒŽ|lRMr•`˪ØŽœK‡…29xS`q—^ìè>Æä4¹r”IK(¿ ÎÁ%ÒԤ隊ÅC-„wVUY{m•üåË×Û é.$[cuЉ%±œ¶Èî/—¸©½+E›cªuï°pù•WlÕ0˜M"ò•Ñ L/‚; 72å̾Yc=:ÇF¡óÂ|w@&‚÷zÒ¢~Ò*/' ^Áp TKÄó—Hÿ*e÷ÚôF“,®¥=cA<=]IvÎ°Š–𨫠Ñ߃=g¿ŒÑ+,Á\Òj š d0zÏ÷ž{Mb6¾-€éj‰gìÝ–×Hq$ß01c£¤f™RaŒ¹/äG„JÂÒØ›¾iW8 4¥¬›L`¿^ÔÚ¤@¸i;íå¦~Þl´'xü\}º^y"èK;/—S±®ÛÕ¸ »~¾2j3oŠPê>´#y«ú½ ‘e50«‘1™žDò÷¾°›*…¬Ñæ©’¾Ö5Ûæ.y߻弿8F¢;n¢ Z}ÔTiÆvrjÌÀ(„ÛœŠ‚NšTƒ&™i >¤¸7s¥Y±¶½Û„ñH‹ 0±ð‡«¢¿-*4àdFÚ×T"ÖA°z#yQÌÛ–­ À•-a÷º“ÇÕë³ÑŒ ÆF°ûo‡ƒüzØm’¢Ïj|‚ò "æ–:’Ê&Ì(zÂE´ÀÿäVµ=›M ú§Ò@#“, dÑGø½ÈKŽYè—n€wÀžÅutËóïò|Ž£[_¨(I–+jl|ͳ„’ 7ùÔå «@Þ‡$µHâËU”ód„‡ãÖö —³Ÿ1¤/•aÚRO)Ûå>µ 3º’v•’DBÁ®øg£U=¶=¹¾1ëÞ±}W>¾Þ:½P¿NI¿`_С2Tqö&‚XW¿Ÿ1›åèæñº” *×´w-ÄwÚĦŸÅS46± ›[½×s€øSØ>§g2ŸX-Ÿ¯ß Y1À ¬ôÀÕ›UÊÔû¢ëÔPˆÚOP)Ê_¤4„>@®Ãðß‘_¾ó(ëc´AÚ±ô ¹“ïÄS!L+Ãè]±O2L;•Ò‚E­¥=ÿï¦%{ò˜³¿ Ü æó€‡$“jaӂ⎥¤ZÒÕj«úŽØ½›qÍ÷ó!Û«¥èi?,EOðHåbß¾{¥(çˆk2“¢çŽø)ưÎÝÕ4ÉÊ522aÊxùšè•õ'MΓp—øHìQ¬¾øÙÞ€&W­ {7xç)t˜† ÿÙèJþI-¥…ßÁN‹hº3aìõ´õÔm8 XÔãñÁýø+¶¤r|ò¹(™^}ÑÍr4ER­ž”†c|±Rã˜ôaj”þ œY,xVS•)£6/Ž©`l'åâI^iÐnêm&#oǾâ|ñ± b»áGÒ/ìjvŸ±34pÓ¶¡*]¶Ó[Ïð€oÝ¡ç Ò”¹›x¡­w%’2säàHF(¿nÐÌÏ4u'ÆâÈ=ÂXS3J– ®†Ôi§ø¯³1¬ˆ’ÑŽÉ\ö=Õ9øœ>©¦Ä<±ï$ )Í‹Ñ'6íÕ„cë„t ¹9hö_Pã]_ÖÔà™ÅêÝ){¬ÊÂIôŸˆ"W›€±,wˆz¼I‰çMH–;ãÐXroäÜJv³†ÝKDÌ´ƒ€Ø>ä³c•&#|û>náEaÿ§Á¯³ójO³Ý0Û?¢3 ‘SnSáÐÐWD¹nÏRåÌmØï²UIøü?~]ùNÃ4 ³½¯q ObÉÜï° ±ÓÚqŸ|¾ÙžõSÄûÇÓ@Š+Þr_Є#‹ö]¡ç›[fwÌ£ÏäHP˜½qÈù½ÜYÜ„ïŸ+Q¡›ÿDzt<'œiò§$z0&azï(j±MBú Ûàà¤âˆÃèê,“g«7“{ØKÁ&º,ë *vHÛ±ÇzsÍa³PÝ” ïàLÞ‰Þ¼ÐÑ/‰Ùkaè(X­g“:CÓü–Õʉî;ˆXùöà ¯”ËšŒ÷zÞuðËýt×vMsY‰-¢ì\°lGÒÛí­ÌÚ®ZêÕ§ÁêÑ×=`¨Ì-Ú'_¯´^Tu²Í ÷§æÆ=rÅ‘}Y¼çºÃlc^B-à‘#U°ÿÑ–3PBr‹ØòõO-3Œûÿ‹ò˜ØÃ¯ßÕ–'rëà ådø‰ååÁ……ØŽàþÕGCï2Õbèm¤“ ~aƒËö[{yýÛ¼7”„{LØiÁ'Ù¤T!AÓ—OÙ†¨$uö,plˆ³ùOqdX¿˜Ö%@Ú2á£ur™»¥­#®ô“µMȈÜK±ð™'ÇnZGø ¬>ƒÐ¬ sº¸a„)Šá*`tc8çRb “S£¯[jz‰‹Ž;T4AkO ËÉŒ–ý ®qMȱ¹q$NjŽÑ‹o³,·¯»”–$²R¢l§å  7·rT¥ž9 4+â· 4eÂ"ì‹ej~ý‡tõ¬¶”rƒáa]¬Rf#‚ÜÔÅÈCÝ¡±T .d÷™n’÷'Õ¦Gñ–t‘„LÐ3óI| ²÷‰5m„Xg{S6½™“4 …¯ÊÆS˜¸\ªÀa¸<Bb’l}µzÞØbëG+>S-Âõ H;aû&ï~Õ\f,‚B_Fæ…–8¬œR`=Ö0±ë>H;ca\†mŽÒ…³#Ôq¬R•XšœÍΖ›Hk9íp>Jbb jV‹Hr¯–wãÛõ¶b4ÐñÃër›ö°ÎUf˹Ÿ*S@§ž~jÿ£‰—Fqáá{”–q˜òÞãvàã)£Œ7âÿ þ½Kí¥)“Z7my\ò Æ»´éý¶à×t­žË§“Ä[^âZ%"¯Ö•3QØÏ‚ñ©2uh“¼8 a $øDi|€=‰(cQI¤UÆ]ì‹/c@â "“gŒ±ûˆÜ ”7 ¶A–q]4?%3%2Š*!¾Ì(uÇÚ/†«º‡x“D3 Ò[¼ëƉ÷qÛq” S±®ŒBáß#ûi¸J;Œe7´¢+fø©L(ë†%þ±æw)ºÒk®­½s¨ŽŽÌ\tIUF ÛKI=_Eµ„¾œ…:¬ d–;LÍ«áöQÈêÍÊà7ÏÖ×ñ^6¬Òà%}fÕý׎ý B{ã_[¾<æ †-g‰íß5H,Ú8¶¯_ª*©ö¶ÕJ´aÁ—½ÚEðL–¦¬gcåŸI¸›%zý²-;3µG_ÐvM0ôqvî‹J Õ(-ÕàºË0›Â¢T«afÈÄ&Q¼Û²®™xs*o4pgÕ³4ˆo$i†OÊ‘QYª¬@pˆñÕ‡gÆÙ°ç¿dX¥fîC,aRÌÌ_²¸—k AénÄ~óD¾šÈãÍÀªJÛÉ\z¤«ÖࣳJH†WhfEÿpô” L?Úƒ=ÊWÄ¡e‰:ÚTG1­¤}ò2ú=X²î/dí`j×î˜}5/›q'>{Çsa ¶¡C-&%‘:‰ƒóç ÿk"{TdÜÑ9Š€GžÞL †ŸHÛ·Øœ*ÔD£ ÈìF $¯4.ƒò®£°‡!SBí§?Âs©éÔŠÖÞuz·9a1!ŽAIBl}±ëo"§-gÕ¸PáqÀFøãá½A'Í-=¿†=Ý×¥®8ñ3|+ôw¬ŽAÕ¤‹u8)ÀÑX')B>TÓ¦¤\U{œšp v`—õ° @*Š“¬+òÐJOeS2i¿g Úμé§zM¡ÎA*N% JÜ!ÎÐÅ„-3ù‡1{ ”¿ûƒ£Â+8UòÐGLBïÐÒLŒÇ|0K'ɰNUqöuÄ®¹ªÒòîÓ݃´3.‡ŠÒë<ØïŸœëz„ˆê8ÁZân·•u` ÛÕ|hÊŸ·J+ÌÇHؤŠcq¶òqR\—+¶¾¢ÍRíΞ¤Ù;Á¯Œj(ëÕd‡n,ÿËü÷„ïªtþü邌6g8R¾u|e_]Ë'óäzgööµ-’Ö†ZK÷^WùZã'½)â6¯…'s‰Y¯LN¨#á}D<û§¶Wÿ‡7®OìÏŸó€6ƒ4ÐÅ?EÁm¢äL0:¨¨‚Liiï ­ô–²õì3¼û®è{¼a1|³òî4ßuíèOñ}0ùÐîC5\{øáå-Ø/t¶Š’»È˜­EEÚ Â>Ô›!^tçóâðW[Ž ï#ûã¯B› 1¹± _yªïÌPVjï˜a …Õ÷œI×½Áà³øhËte¬ŸÈXU ´N6îó?Œ°ÏW’ï¡têîOØ¿ÚcíŽBX"Ⱦã­_X 6è‘Þ.âx¯F‹ÖÕº8…ª<'±(]ó ¬£!ã.E¢›CåØJ°j+ IF/÷…7c3!’Ç ™]â†Þݪ+ºð†ÚŒ¢mO ,&c@R²½H¼há<D®Ë|Ê›UÀÞ…¬+…¥YWöOΣ'F±jMö%–Ñâ‰ðíp¬ž[L!6ádãG!ZX²K½A"Ø3Vµ˜M°g›Tó^-Hò€!Þ^—+¨€ûbœ3ï­í|÷„Ó¶…ûŠz?l±vdøÈ€í7*žÄÑY‘¨C¥ Î&Z…5vÖä·õçKäüí\%¶ŠeÿÎ,d‡¥Â¸,>”¬{éÄE({è*Y­S¤1¢ßV¼ü]S8‡lw²ò>•£PÆdTÑ3ÁE´t sÆ©±ÞìŽåÙ¬1¦«—‚' s¤¬Zæ"Æÿ>Ù'‰ÁÏÓž™ ˆCtºÑ°O”R-ÖñÙur*Blˆ±âdyrÒ.7 |‡A$6ôOqÛØ±Ë÷–‚Í3$íºbƒ[©Þ<8´“è©â‰üxôæûÎኂNÕCί7œ×\RÁœL»MýíP4%øâ™Æb¤«ø5»š õ6¨Õ¦Ç¬6Zòr[8‘MjaÚ>”£š–Qܤ§…µ1VöÓÌñX”Z!N¶¢Î‚'u\I¨ÿÝ4Ç踽¥¤ÄwD)ÜôM•ÎÞ*IÉàqw>ˆõ$ìÜ\7$Ű~Øû8èÐô6§ÿcÝó^oHß"AÝ“þ–(i§ËRÀ®<Õ(ßóz!Íño·eÚIV9cÊ”ÔX1SJܺMlÚLÕÛÕ-oqŠ!.Oo£¥[/*R`‚QÜ˼ʂ®¹/“a¬]¼ŠùÂ}õãº-óN–ÿí’Ù¶Dô5Ò+ÈÑ0!Ud µd$¯@³¶È¤Ö„´D%9‹š´GÛé9àIÄ›"P$ÇEÿæìÞø_Ä+Ábª½ðµ,»dÉôõÞÔNeæøf‚YcKáÜéxœõû\ã¡der '3/†Â¥{Béaâ0°í\Ú,å€JqlNц5ÁšìF,Lz8è¥pÒ˜`uÉ8ïP;3GbÉòØ|âEוËz:½;9gûSžO¤}òY5) ¼Žd ^£1Q¦¤C$¿–© û·l–&€ŠØýÇ  ”e€q7/°¤QD6“rVÑú/ü'ïg*…lÊÞ–#p^Åĺ-8Ù‰úî‘C±u¤‚TŸÂ¨A)o÷w×nb<â¨yGb—NÅ—²ØU™‚™±ù›¯·r[H;®VÒþº@¢Æuî¥÷èÇ,÷±E&R,›ò% \Ÿ%ÐZ[fXâîViÔ¨sÒR~# j²ßm9<¢3¿€€„6w3?»ÄóL°è‰t_MH”IÜÁhĈc&­%X‘w'‚ új’mùöùûë ˃§ø&§±€w’ÿ—5[uEëRëÄytŽëÎ;“Ëc×^y©‰Bílè=Â-Iêù«‰œCÇ‹I95lJGøqÖS•¶’(x¸øù‘ÊBÞ×]„8I“ ך=çýØò%õ( #}.¶ê甪¦Cm2À4>ÉóˆÙ{ÇkWγҗËOÝëÓÿµâµ»fwÞÈŠ!*8J ]:nñv‹Ĭ¦wˆdÙã(.÷þ<ŸÝ·,§Êi”ÆBfâdè²û,T«4Ý•xXÎüÆEx9ŒrnÝxÝÂ'B¡—3ÖqmÙQ“G‡òtLrÈÌš°¢Ú£y {ivíäÝ‹BuÃó[bÒ#Ü­š»­G£Ù¸›¿xÎ1i]΢JZ^Ým£ÉQêöŸqn®(úãKü‘AÁÉ¿¯häˆÐÝÑÀõF’Pè‹ £ ƒ×bMíÀI±(2ŒÓŸ!Ü›u[é¾ÒÂÄed7U«²ZÄ|à¾Ù~ ̲ ³^n‚3“&JºÑƒ:æs2ÈüØn3>5L÷ú¸—“]Å–|jíÜáã”Þª­e»eŒTJˆZú¨Û$ÿ²ž8ï)l¶ùÈ8ÓJîO¦:¨»å©%p‚®§ýÂët\JÊh¥‹d .uÌ(ûÞŽ~ RÆÐ=–’4©J{f?ÆlOÄß¡ ÜÔa#ƒrHûÂ)qŒÝ#¦ã‰y1£‘@[8Iïš»úˆ5§«_iW¥­ªi!?kÑ­–”¨J{Fóà Ùǽ™jGöëão—pª^–¶Ò‹JÍíb¸Ã(¨T7Cñj»ña7Ŧ»Šn8ÑÄôæ©ÞBCkщ`ßǤ?ÓÄH'%îB¼.&®û’ý ôÒÖJ3¬ÆŸ¹¶7f1«ð))€EÁ¤§XÑWâ}/>G< w³ ^çá»5ô5åtòžD_vÒ›!œ/öioae‚°#…ƒ‹3L –k"ÀAéQØF_„çCÛŽ8l¶oÏãÈë@’±D_$ †ÙÑž±ÛÚgíG—ÓÍúZÝÓœ#³´šË)­â™PÙ)ç€ôT„”æÉÙõZ Ì{Œl½´ŒuXÝý.0(A –E­V\B5O^rƒãNýÞ L"+ÈVºd,5Ããá´Ù‘†{C°Ê±ÝÜ…Oð¬!äÙKèW:õoÉ1Š˜óÚ¨‚§´·Ä£BœAPÝ­ëã¿jøÈñ[6½'4ó®ñì{iψ>§>²Gã8EÃ8C½P*œ:Á¯›VEÁX>ÿH_¦…ï2<݆e$"_ŽYhìDDZ^†§#_•uZ4xÄßêW*ñF‚–*س8½¨«É Y™ÞŽ›£X'´’m¢mîp<¯éSi%¢ë –¬Ì¦ áôf´_©•‹ÙÂjšbpš²œÅÐŒ™ŠœÞ¶R½2U¥ˆŽð4«øýF-&¼ôBäåfJI_ïêyûbBîW‰ÜŒ´Ûã‚K# €<ȳ¼¯’¾ÎwQ”¼-u"g)8Ó›ÙRà^oK äÊ8vñWŽ§ØŽïÙ´o$)Ž_ۆŦô¤æŒ¬)“·’1˜Þ€óóKªÈÔi§Ú˜ÛT¨E²ô\œ]¾a¡=»oþ®¨†ÝOÙÄb Ù³\ÜY}ÛöA¹€Ì¡Ð‰\£–N Ú1zywé½&bëiÛŠ… ŸU`ÝUV.°†ÞµCæ”+ˆÛÒQp<ƒc¤®ó8m»N=ìD¨x«›AG”êýx£döç‚UŽõÀèÿæ¡™¼ˆeUUèâ‘G0‘¿uvªgÌN^õtóòÔ uèÐôàÿ‹àÏÏ´3Ï:OŽ™¾}¯‘4‘Õ3½á=“›"_سI.ÍDôy“œ­*BãÃrÝ}êó{2/\/·×˜ù4ùýZíO“ê/ê6Vb¯xÂ}úo™Ì}.Ìq{ç'à(•Ll9<ÅÐÕ{þV®}–¼cÁÒÌ©³2š¸GÍfÁ±` VÈš—žÜV¾O7õ~Òn@Ñ?‰–Øû^=ÕH°\Ãøvàåš\–BÍqÚÁk®?F„›cO”ø@ŰXpÈ åÛNuÚ&$%l(RT¬ÚÛ.¾:²¨÷µY«GÚ/œD‡¥Ò‚ÔÆ½þÀ„¢Rë+ÅF¥5M&{Z™a;è#áÝÊ÷ hš.qµ¨ÊïßzÆno¼^Ó6Hu˜‡•¯%ª(’‹øª‰&ÚÙ¬•v¦&äAÄšQ³½…%BgÞbÏL8Œ$ qîõ‘^“ÐÖ\¥C‰Y@§†)Ñoáýzw†‡×‘p]°ÓO]5ø•ì ‹ôî&T ˜Ñ•;³aÏ;Š„ 2Å&ˆâ¹r€5fú?E¢’ßéíàø=â A»ôn§Içh„cL É>Yvñ6($,Ö|¤F’׸Wf­±ÝNð—;ºðxž©Jùš»Hi¤íçL þb]j=ÚM>~ Ô±1ßóS,jàä±!§óE³?“¹ãs ½«&%]*^jþâ^ÛžêDA7Æ _ϲ~¶bwßFêß}ɓݠ—#²¨{ØÎrQ–>ñ”"<×À½¨çlÒN<¤‚S/Ü,ŽŠ¯ô57’qŸ6‹ß?Ó¥M欺0CÙ~Î)]%åJÍ{Ù¤ÂIø@õ唬I‡ä QÀ[ûº@y$_ó»ø—\—" ©ÉÄôª‰7‹y ¼‘Ái¡þTgªH¨eªpµ-×V‘Æã¯ù6ïiÂûì#I6žp-9›”I*`½jÿó {ÝJîÅñL…ók”’ðD±þ›’0“¾˜Æ·«êŒdzõ[,(G¦ ¥}PèVt¼2s¯ ±Òœ¹îÛÑEI7ñ·I}1*>‡k’<çÈY¼äð"`%ö<žÁÕéÎRÝžbrÔÎ)ÿ—Ïó/í(Ì!ÔcÁ *ÊËö]Ê乜KbVNäëÇ3Žì/5M-(÷FÓ”åq(:æ>ÇÈ–<÷‘š¦h€Tp uA²’«1ZL¡æºÞâ$¥{Yù…óD3½ûªÁn|n¡:•Ô±xÙ%þ¶ .Ã’.œZ¹=DI´Þ"dІÀÖsÄ3KµÍ§ñÿ“ë•°FÆË‹å/ðÓ8ö³br'¡ÝUŒ Γ!´ ½mHÜ@zÕvhø¡1ßÛb¸Ìÿü¤{&L¼i{‰RÍ7ßìh Άz<˜a¿æÃGlddë/‡öŽÙ¦QãX2´ ªŠ«Ÿ £Ô,$n,(°ô<ˆUkk{âN¸;—:âu¢cÔ—`#ï#©á MÙ6ÇÁ¡ýõ•_™KÓQšqý ;ãņºÿļmÏ8ðžÑîð!ÏXÁïç|Ö~ú£¡N2ºº¬/“—=Š™7Ö냟³õß‘øª»w™Lî@É&kìÅs͆ÝCíˆÔAÌ‹–º@‡‘)¶¸¨G¥ÇJìnQ~ëßýŸßjÈ£dÁ4“è-œœ}Vò~!«,‹×äö´í"lWb•(Ê[X‚`KqVÞ‰\X7D!Ù]R«b@’rýM9.‚u“D?”ÊdL‡Sùú'(²Ÿ-°9fIõ6®KµP¨[êå|P8aóäk¼Ii•èö°©U]Õ|#5…gÉ|ªÍ«¾í ˆ#8ñ$¿t¸Õˆf½¤Máòw«ØªQf”™T'ñ>£å1´ þˆ@ ¨àA•ÉšÓß[.…¿ÿUxçXâÛ´WÌü9Ã340PKÖMUš^ €ü|}#ÌjA¬^Å-äRg>ÍvМÂt-^ÍQÿ8NU;~„C‚¬h’˜JͳžÛ–ÇúîaëâBÐ2•bL›§ûrü1àJùÍò´Å°e>­«Ãp[?qåð¤Î7ü•¸£¯]ÿ[úÏõHF p…«ñ‹Vå}h—>áÆÓ›C„¨”{8eò 3¯Šæ§¹£ Ä8´zûéYJ½Ýÿ$mÅmZH•·_8ÃÌkËxˆ qÄ1¬³ËTT±cbyÀ]+ìÊm«]™¸òðè:0ÎzÄ1æ>Z8(Ü{sv2HÜ(¼“ŒÙéZVN÷L¾éÎðk#͹îô]ü‘_Š…½ª,É®^Žú€.&&ü‚ƒÁKdû³l_iæŸÞÑ¿'ßú_0‘™÷ ’Ç›l³Î ÍvõtÎîÉ:Á•Ñxø p3VÒs6ØyÚ3T³nKhÃËbÙ×/„˜ç-¼ÏV7ÕùjË;°Ã™•¶š¨ôV¤:pá|ÿ?  m7â^ân“ N+8óó¾bRð°õO ‡Þ×=b/e9úù g~›P,ÜD¸£VÅwÓÒ {É8ÉÝ“PE¡·/—K²H¥u›_Kl,Þy Œ ñV¹i˜ÌÊñ‘ݓȠžÚ¢ðÓžÚ˜·"ö4£ÑB…´¼g¢ÒB°Ï¦°j¼…ëð9” aÍnSÓMÇ2s§W%+æyOïÏ”DÔÄnkŒ ÅÉRŒš%sû !×φ dm“i)ÈFêx@Ræ|]­·á¡Ñ Ž`4þ7$Sâ±ÎÐÿe+ZÆi­¡äÅlK„€QžŒÛß]‘”ýоoypä¶—@q¶Í{ó/ad«]q•wq„¤m,¥8·i†a⹓]\@\ÇjÕ ¹MùV¤¸™-&ry³rr“Ó4K…e­µDkp+$´åƒòn˜´Hàz7ß…½ K,ÿ¼PKÞËJUÖ{RCTJ5V‘"œØIºwݶ*`ã3X­šñÕÎ[’â\ IU÷eò‚úì¼Q±:zØè<[ëtè½S( 'n"ÊÆOÿB¿%憳7`VøóÓ÷‰.!¸z¹–?fíÚ¦Ýò–Åݬ¸MÛ°BB+9øûjiׇ$×—6ùÉéñ©¬+Ú5Q®àZªü„Oll…AK:ò øXö°ðßvSå^ý@Jß”/ŒR ͬÜW-wªUê)ôÊg¼— ДU›/°âe÷¿L¥ªø 0lÿüYƒA®€!øv¸J¾ µC²AL¶è—K(Â#áQü„"Cš&¼ÔÝv¦ìØ—iÙ~B>‹ë Ë“gb_XxÂM§6˜—v¥Eg "û•AZÛ¾3ÐS®ÌKE‰ &rM¡ùðíé%+D¹˜¾LÄ‘ æŠC.Ñè§ðÉ<˜6ÉË0z(m9¤ŒWîã#vë嚢ºÇXFß±“Š~ç†ÑîP$g›©:MÚ ª¾¼ÒJhs¾È"Y2yºÏ;ȹ¥’¼+Q6 mö˜þœ^(Ææ µùGQ¿Ñ0 Á)Ü©M+ ¿ÉXH0h¬£m-‡ÕáÌ¥^å–:©1öAxn’–YydR˜|21‹Ÿ’ft¨é•÷Nºð/­R) `æà3‚ìŽÛYö²8%9RŒõù¸ôɵÚw~†sÉxÃ2äÞ«S5,$àm“_¯…êÃÇrX“üÒ"Í_}dŸ1+` dA®›œiÆQj,P×·K[j r(ÁðžÂ9r˽åÇ¢nÛS!¬Šg„âKÈO˜­ïXƒ uëˆuMÉ©óL¸â84[VãA-œwÇ,Äç[ù¨«v»s .íÙÏ×êûÔ”•Á¦ÿv"à!Yª&²¯w$)ã­ÎO '啚ô:Wqt7P}…ª‘áÀ×2»Õ?!+qPÎÈëñUídÒ¶ÿ¾Ó3ŠÏé–RíáïîS,Y›JLIÕꈑ?9á¿äáEU}þa“LÎàªOo'y A|ï\SQ~„e|Áº Õ‡’JÍR f‹!ÖˆªÔ44ý6XÿUJ$Ç:”ý’ Ⱦv²ÏÅÇg Xq…v[á|÷Yå¥ÜŒÈ´ÎùÔ öÞ¥ª^NÆ(ŒBrއdm»Tf[· Õ‰³®û.#ü&Lcß^¥:Š456ù¬­FZAJvc Ì‚,17ÁwÕ…+]É. `î[H݉'qêÑk¹ŽµdVöé /ÇÒÿºE)CÚ? Œh‘-µ…ûøŽÇpEÕí‹‘ŽÜ¸JžNX³á‚ÐôŸ!;Þ!¤&d‘ÿCâ®vW¢Ÿ#UBORÆBBO´¨^­‚ê¬ %Ï7”eÇ—Çõ¼œ—ØÑho_A•µ¤yî˧äÑr»ÜõfڑɆ8ò·ÏÝx)%›Ñ7“C•ð[ ¬Ä¸r²Ló€÷{å?M¤±ww¨,ƳÄS¤§üø)¾ž³ÖÍ[ Š—©CØ‘/Lëir”ŸÄö­oÙ.a é“Ôf"/þ…½Ä¬¶gÝœM|ÃB0 ꑇ<¤þ[ÌÛÈ 0cΕv•S_›Yrzp<´Áü ·æfTïMåo Þ½£§óÆS£-g¯¨4|h‡ãÛ¿%ÔÉ 4¶ø¢ù0œìÙÕeÆ'P•ŒF,}8¡eÃRÓ+F)Õ`¥ç&Tó–(öã~Õ¨¹(A|ØusÒÒ::¡©ö€»V…š¥2œá²ŽöDt¬”ˆt‘'aPý=N…`ÏI"VöRQÏé ç´ÉjÆ åŸr6r­¶¢5u5q)v–QlRcMÛWï¶pÃBu&LÄ0–MÄØªf1ƒ“kËáTâu¶Ò[ÊÉ•ªÄ&)uÀÄ×exŽ¡j}þ²õíâ°Pÿ(kÊ>2wp"Z0.í¤F“Ú²+#˜ŸP£/’Ý*2à®L‚ó$õË[‚z'læˆwÿ‚Ó“L¶/‹™ÑôïÍ63UDy!¹±ÔÇy©*I.Ù Ëÿ’&r­]]Ó,gÛD\ãÂñ‰Õ^ˆBþ;Íùp.¿ PKËQàÓe³v2z±£Ö»góí–BŒ[^°“3–5ðm %É í£ø§IÆówÖöCúM¢}alÏh‡ "•<…a!Œ7kõM’ ]³r¿ìÆ‘Ýø(1 ÓĤޱÁ“5oÜù££Èbh 'h~\’pC&f‹I×Ùɦ}u«ŽÊp0÷š}ûxÑÖ#uÍÙCãÅÇë½7°¡>GÏø&†”B“}IÛþê”"†Y_Xà+cŸ68€i"l5*•qÄ3¡(M³Õ»d{a¡›V)ï”ö‚N:×#Ÿ)ˆ—Ïa’/]Ù/Ö7Sþ¢úp¾(;Åì·¬ßö^{›zÝœúï÷)*M:@¾yäYX]¯5žï;)åäö‘rû;ûV*/¯Ö¾£{×£ÜD2µãË£á4Wó‡0fɸÃütð ±}D6ê‘åïrè²¶÷7ƒˆG®X9¦`•ÁÊžÚž@3’VÁkkR)Ð Cª<~اŒhßû± LÅ«V~‚ -tEŠƒ¡…ØÂM„ßPÆqpÉy0Å2ÏÀ€¼O0Ü-ªË)¡ ÁÞ™èäšc±s1ö´g‚¾îÑ=Ì’TÍÀvS3¥R®­¶‰{>þ©þÛTËÀl¢©ÿ,MÞ«ÑÀp.psI¸}N[¹]YŒ„,‘Ê~vz›Š Zmfm§×N¾ÆIJJ”aO-+BáÞS\ ­ŽVhÕå‘9”£àˆ0Z=à„'ò7ÓtµÓÖänÈ ÷ ?øLæô‚¯ÝÉs KäWQ–/ݧ"_ƘïsÚÑ¡Çå¥^$~»FfI8:o®+Ð!P¶ÉÑ3}m¶“$b±H’÷a½oÈÃLÖ?ÄAÂ>øš#àrIôí÷)üº=83ùß[ GÜÂáäÌŸ5ÁÄ1\íço$™‘F«q›kDêK^I“!æëfZf֜͡ÞǸ…og˜©ßdØE¯W¶“‰}¡Æ &Gd£t!]-Þµz⥳zÕ&[uÚöO.cWµÜíòº<Òâû:¢ô“ŽW+íÖ3z•ØçÞÕȼf›Œ²‚-ùB¡Ù|IñóñÒ=aWtËú’íòÕ½­#oŸ©bŸ…²÷ä8ÊIËrEûÊ„Ó^KM˜Xýz½Ì~J]äëœÎ"¦ô¦E¹º¬¯Ë±U4vÇÒ6®z&ipÚ*ž¡­?$Ù0Ÿj!ˆË3‘ï•0D©ÖÒˆÓÌü|ŠÚÐ8Gªsc’z]ÉaÐ)sxb@?é[Þø–ZÉbŸ˜=„  °ðJVr–jÇð0–E«÷™ÿàFaf¯ˆwú(ÑRç Nù×gùK¢³åàší Äø{‰·Ÿ…œÞ†ÎO+‚2Üʌˉæ› s4ÝÏe™sge“*MÏøÔMèm¦+žø›6ÓDé½9cÄF¯øÎÄi.´¿.ÒÎôW*Û·VŒ é^…¬ÇO‹þÃó§8qñ¯i;ð[—\o>[£«r[,"ëKmßñ_*55aeÈlOþKžŒ^fr_E¶;º*Õá2š  Sö+GµtfØ9+Õ£†µ]æüM¢0#aGG(©;sOˆµ—qXJÍgØRáJôQÔùÄÙ@ÕÚ¿‚K‹i…åt*• Ç<»r¶kwyÐÖUêìGªÚï\É„¼ô.PÔœu‘vf–$žƽm§AüÇO@zÕDÞ+ê} E–£íY¤7YôGM†J‰õ=¬¬×ýÃÊgMŽË#RgÊ`S!(( J’ìͼt£kOo~?—SJÜ]ìÚõ'5FË´|G­á(Õ±‹öiôeç¿Ó˜T_KL†d‰I^ 'Žç'Wl…”@£aNïøv7øª†¡.Ÿª#ÓÙ¡BÙh¼ºÔ,&G4ͤoR!5ÈQ–7ÊÈ>”[œ":2dšÞ°W.+ëp¾çÅ==ŠõM¬D#•®nRÅv8/«ÐÉ@nµp¦î‹]h80¸EtbOPN‰ñ•å™~ÑÀüX+'ÐÂ}Ôťᱶ4_-BÍ#õ²þ™]N… ?ñqÍJ)pRÝ0[ô'í%$&»z˜Œb¯x6øSª¿»!U2¹¥[þßSUKöëÓƒ÷Ë7sa™ú,½å$XF™+wnßÈÕÉÂøžšëîa/Ê~èÚ\}˜œŽs`ïg„ˆ&Š-=q4Òî‰þ‡ÜÖo¸ÕÊËš%»„=ƒBÚQò&eìë¸)ˆS,K{ì KWd†˜MI©¬Ì‚Uœã¾q3á;üª«5âþ &Wígðp’ï(qZ ~Á¥)ÀF7صO~Áªºö›æ‰`—šaÐT-ýžE©Üƒûl;äáP÷l%‘,k°“É~³ÕÜåÛº‚.Ë€Áñø’}9&÷i|Æóùè¶iÒüåŸû8øÏìóê³Dr“ˆ»RKÒÁz ¼ðýíCÞÐ bK×½Á ÎN"ûn\N ãrÄÃrŽuZ3ÙÃ} ei¾°$œéAˆâƒ;õB´üµœ:Hç¦I[î"Y'±ã…€DϹâöwÄ5¬&—,þÐ׭ѺceÚ 5u8iß[µá8\¥„L¾CW¥\Ý„"ÉÓ=V§efmß°2|è©”C)¸šãЏºÆKf/4¢`ô’Ï1r‡œQ‡‚ádÚ‡Òqo+Æ¥‹ZðuopªãúTP‚&|U\·½ð¨SY‚¨¹BÚïg¢8iC€Å×'Ï%‡Õh×-×ÉcÅ~0òƒ}ÃÄåG‘¬pç„O¦Ø 1ÙÊtª’ýL<[hÓâæWÆZÑœ9Z‘=b>O¬ª-ƒ2Ïü¨5cD½KI_Z…HœâüÙ-1åb×±‰<š¤7ýw‡†D8뉂¤¦}âv\W6˜[@ÌuôÅÊÃŽÙ°Mô5N!³"ÖÔ°óÎôêî%ô¹XH&¢µ8ÉN—šòÒ¿Ì%‡¿?¡­DµfüÕ‚,Rî~D ÝÑùqÐæÀ€Ä ñZ¸üâtec²JzõHJiÖ:RÌ+h œA£‘We‰pKêÈÖigrLsä‘ê¥*Ìr¦«ÃúV ÏÌ<éVÒ;꺇i‡oÜ/0©—´‘è‰#Rì_Úδ …C’žY‘üœpºr†rÒ‰Š³¥_¹Nµ‰­ý^Òiaï2È{³„›+5‹•ú@ {å]Z–að¨•G¾ý¹Ô‚g©Jï€aÞ6]¬RfÁ•­F,ÆD¼‚K'¯ˆ8ðŽÄöy²b_t —ôvÏÞ(nÃ._7Mi£qSóH‘øª7ÿQ‘—eU§ùÒ1I@Q¼zqZRöD Ô1ëE|‹¦ž¤½NL5‹_$èÃþKC¼A¹¼ÀHZÍºÔØEßcÖøÿ¯+mr™5)ñ7Åabñœ8z™‘8]©=¬A\l ô¯åä–¥ŽFÛØq±>iwxĽôîb›9,Ú\ä×Î(ñÐâ­x‰:±¥»Þ^ʶK( #Š=²FÆìvÙÀÁ+j1^nñ­ q‘9˜©×b}«bó[ä ½wöŒ¦$v» ‘¬ÂÓnr¨XÏT¦z]én1C‰³´ÊŽNWЙFЧb^£ 6X¹`'X´¬UtŠŸOh¡·»‡3ãu öÆßë¶wØÍû°^MÜSý|­ gÞ±çdþk™ô‡\9„u¹5«–®Ö ¼n=løÿN#%á”ýúF$ù΢fß,¡NYgV$½?ËX$üñÓ70o‹,VÔâ眔dlp«t\¢n6/Š'vµùau\;>%ÀL¦]Mäõ„-ÖpcYô‘w`Uš¯ôX²?EìY ØÙ¼WNpò.lX«pêVO&Åê‘XJŒ'r›·ÍϽK1)_‘¨8Kûnûúº/ ™Oj$¤ËYbž¢\¶C¿äfñȳðÖ¸-ÄÙ§¡ ŒqeÎЋŸMÛYÿé†ãÀIå ­ÖùM”! KuÚñ”½éù¨^ÞÖ>e²ûÌ즭£SÞOUÞíUšrB ¡=M‚;E+ˆ¾IGÅi2b¿&£cÃeá,–ò%&~ÂÆúBÎ`¡l×™JÑŸ;¯Ht†¾ÅÒlrÛú@Ã*£XLw {á`6½è³Öß74j~ésK'¡ì™CþÔ —!08>*]37Ì»íÿÀŠj \³­¹ì$‚) ùÇV®#{X0f¯ ‡VA÷d‰èm¿ ãµñ¬ø¤Ö%Ö´Ó]bDâ%>žWÕŒÙW¬žaû)é@n«¡_x6È‚:þw1Ã`gðq»¢¥ôóaѨÓ ËoÖPS¯ë ÌDΣ²œø†#½qˆIèC’!SÈÒL\±sÄK]1 \€rFü²›¸h1ëRñ¾xxsdõÑýT× ÚÔžÅà*’Ã’eÛ-§œ¬ DüÉÚÌžZG4`;0ëk¦W”/ÁrW¨–4§d|ND-´ž”,¬²|@ì?ÀYsˆ‰lk¸cb©øpYgÓQ*‚N"úù(§€€ 6¨ÚdK•#a4CtWÏN¾†¶Ãœ¾á¥bñþ=Û!® ¢ é@&ù¥Ž5<›fÔú+í#aº%Á¢£däݵ2ݹçxþ9M|ø ú1Ö°`×W’Tïý ÓrL¨$©Æûêï°’˜óZ—bõæŽ5  d‹Á6cv0ð'^§h¹ÿó›î<ÛiX Ói;MÁ­È2Ç’½•ZV­ – ³.á©Xàq”³À M32kÏ‚ä h¥ï®ÔªTðb£ù’™>Pî#啸}*aJY[*@—iÎwÖۤѨ» ÞÍ“,äïÌý§‘§-hA+3·ê%û뽆høDÀjäi”œíÆk7¢¸OÛ€•]‘À·po)‹ž,R_•]ßÃb™ JžV\øÁDdÛvÑ×Ô/¼7Ú2|m EzÂCúëU9DXô (SªÇÈÞÉc:M”°ÿŒ—Ã÷e›¼Ì“2í™dùnœË÷Z¿Êy—ß–Žà:º³&#ËóorK]a¢.¶µ]xfÌ.åb´3D<ÅËäEÚ;Ÿ'½]á#å²âN@–}›tלÈ©ƒiNtéÌdáä Ü>8 ÓX”ôÓêÞ™ h†j’[3y'†™ø÷ð‰s&ÓâK=é~ïÅebŽâD‚Xã¬krëBê»­ºâß&4#ªq’Šðc§$û i Ó¤ œÖ3@¸›½icÛà‚,Ø‹ô†ÖÄ[ëôü•à)¤ª>‡|u ùŸM’½é0žIAåÃJ.2UÊ‚­?d¡Eœ ¹MbYlb¾Õx8f[…lŽ|I" Ū:Ò&vï­ñSoHyÃD• ;§èðæ_Æ×±ê×xÏxùRÍ&Qz¤Î•¯ÉAá<;?Ãq2žDº¥Q §ùd9?÷F9ªµ˜~1­ûYžÙùA¤r€|ÿDSK%Æ.*¾8$O{èÜIžlÙÞ;3ðÏq²8¨"†î­¤ò‰÷ƒ#bDB'WHbEöæ3«ï½l¾ŸHÇ*“‡è‘_íëÂP­+‘_OÏ빤ûVÚes­R2úHuÀ²úÃà‘}üg] ëÜßÜ·î´OáÙ‰wØ­ê#ÿ/ß<^µŒ‹‹ß—Ö>kuI·Ž4&h Ù0L¿9u¸g¯àLöÑXÉ2ánà`DòC2qü—ÃÛ|¶ÌØ,»Íµœ\Äeˆ%õz#¦LJ‘O¹¿‚¨Ø±¯ûuÙ…©Õ0Üœ€ï~>e½(d¼{±ðt“}úZy%]+üÉy–úøÛÅ(jH;˜¶¹ÀyYîrg§%Nb¹™ð Ðq«C`µf‹>šRœÇõævûioÚXSb´Õ$ØûQrDjìi8…K7!2 ½ã\é¼Ut å}ßi®Ÿ°ŠÝ{ý¡žò|½»ûrÅn¥7Uª×›µIÑ¡â_¨¨Öz GŸ°¾nÁg(²ÉµÇiΣ=Åt k§öïðÝOA­¬WVÇ5Gõß¼`u´(z2¤„swÕk*<ŠKȘ‘Ôp’h•³ëº|D¼!ÍW¤ºeüÀº¸ÝB±¤¬¬þÔ€14ß1Ó0ìÂ_Š ã:«Ì98ÍÎè‘õVlßâ‚þŒJ$CG,v)ÜÇzRL9Êbf¢ƒáµKa”D’I2ùa5ÙFâœlqÉ¥0@U¡Ùý7§PLÕú”|ÉVõi~–úäüŒ«”ãÒ»÷b *hrUÚ”oã‹ðƒ`»pÄÔåªçm¬Ø wä sú7’+qÎýPÜžáKŸ5ª¢•»×­*Œ^R²” ÀÂÑq VgÿJ,AþŸ!a+N;èY'ŠšõGzwôwfyÀ®Ü­Bn!gŒ™K;ߥ""Ê]ÈŸ§=sþŒ ee1æ):$+$~-Ù%/‘õŠ‚&£Úº Ì7¯7,»Th݈®…üÜ$,ôul ag'lHí5L¶–=P³¤ðl ħ}SÞ«dÌJZKÙµzõ·`‘]d³ÖÆ´&J.Üù´;a¨‡Ö˜ËßéVy¼67’r49ûazo@ÇHªr¹µ¸òÆ7ܰÉÔÕ°a´+IÍhòÄ^Ã7:“ÇÏÎG0 Î1òë&¾S›dOÛ¬™"yÚJ² Û³Zl7J*SË´©¦ bõ÷|uˆ›ûê_šûŸXS;¶Or½ …]—¶ÓÂv–Ï-h†Ñ†Ä±yùþC ;š@fŒ²:0|˜¢µd ºúE>‘­«#ïm¢ŠÆ”âxòxˆ½ÌÛ¨šP™9åœHF®·4dHGÌœÇsPGæIŒòÅ+ôþ7Â#sñaU±:T¿îT“¸¯å:^D‡KœHc…%9ëÕÅ™L¡ÆÝ.ÏåzÖñYÅù’œM£ ?7уìïš}s ä kwƒÂµëK#ëjƒÈ¹ÛÀmjRÓ·ìµÀü?(–Ÿa£.ÅÁæî°#ç_Ú)éšlÇàÿ&«¯^ïÚVÞ«Ä”:”àl0íêEäÐ=(‘4ø?F…¥ªÁŽ¿)÷AœåÖíF {Èd”]®ƒHÇX­@4`@Γ’>û%ë7‹Åz›¾@ä\ÂŽRM'+•|=G÷Âh4ÿ;Úþ¨vMíR¯ #,Ùø_“s G»0°ÎŽ¿‹X©%D}ÿÅ!¢z: ‰A±3›Ü3(®§ø1¯ÄÃ$‘¬‰ÉÚU¤†–#)mVB4­- 7~'•_—&ài»5¦`U¼#³‰—ºßåû '|›[JºÑËœàâžÉôBÜ’EßIH$ù»÷ð3p˦56.òÍ?é£oÚR7ÍXJ8³”¹Ý&ûN÷ÿh¦ý¼{ŠŽÞSïžÿ§;SQ€Ä‘`•ÿ¨KÈ›à+¦+»h™W-Q!¯/,^I¥ÚÁ)º¾r%“Âc°© :úWç¡¢ÔK‹Ö®½Ò t†Ô´3ž8ç¨z+ßj¨,·)–$LY6œ‡­w¦ŒMr)KëfhÇ+=rE74(§¼<º-kmÒ!K6´œw¡=HûÚ‹ ¿¦Jž]¢«)°oâÑŒì«"½{¹Î îË«díJ0…üýyÅT¯ÃÈ))GÛ%¥ÉÝúÅæ† g }ËÁº4Ð»ŠŠçš_à­jÛ±¾¢ç—‚ö•ôŒÞñª0r厲2šy³z${šH[F¾ŒUÃéG}$ŸÅ±ÊB§ã¡þŠ^“Æß™,¦aÃ. …͈‚¹Sì²ßä*èG9>iÄA}EY2ýAÆËyÚ£MCh¨A]ŠXáÂp̶ê:Mtšˆ@Þ¨,¥ip(ž6A%~5s÷ü s«Çö[|üUâ$ã U~&m›þñ/H0Ý*ãÙG79W˜ƒ4oˆF˜Ú•^0®þ9ÎÎþŸZÆ•\BQj4.'˧±>Ö3Ùý× ’Ãî¬ÚåQ¹`,†aÝ(ªÃ¼®e†“‡ù—óÕcµAØxón—C–*YÇû;„˜†Ü4õôÕL…Da¬º·¿„—ÔÌÚ`·¼=‰ËÝð´Î“·q”Ã͘N„"AÁ¬®ÏæÚJñj“j¥>UŠU¸jîÔÅ Ò‰ñ[W´Ã× O–©F4z„ è8SrhUæÿâç†~k_—±›ïPN¦¬cõ×iZÉšƒûè­D(eiPE^B¨^Xé¥"’ÑKôÂí`+aË=ÌŠ úYÅ0O&™ßT“ßeÏã¤fWt’ƒ­nZ¿3›ºdêN“®§2ÛÑÉ)+ÔöÐ'þ‡Àk–2ù+Oë–‡˜0A“Î<²÷ÇÓÜP#ˆˆ½2n4¥âL‰Ef)%ÿ1ÖÆ#Òøí-Q.mBnb®©ê‹ÒYÁÞÃôöghgÅoèbSKã_ÿ}L•ŽÛ£—ò0p ZØçžlÇë«T[ÖBº‰ßÈO(=àûÔ¾©k)"(º—§:9§^™=å°{|ÏÚù»_j=ËÌèýqã ö±&%«"ö)Z<'²ñß'5#¬ÒGóV>˜tlï0ÿîèq'Áä8­Ø³ã¤2 :{îÙ­¿5VbcÉPÉx߈ÇÜ4ûÄ5à½z‚A¢Í­Ç££yíP ´D3$Y°0ÅSŽØI64µ…ù†rÏ䂼OæÌž‘¢ÈŽoGb~«&Ô_þùL–1ËPÑ0úãÆÜVzM\ è6^d;c»¨Ùn Ø†³ŒØç#ÊxèT‡ð¾ÂÙ‚³¯AbëˆB¾ÞŠ“fU1ÒŒ±#àÊl‰%Iï2h_$Ùªµzü¥U‚Ù$õ÷b•¼QNGK–ä½p~F4£àôú“óz#Øœ1 º•M¶s‡½æ¨>óŠ0¾vÂŽÒ‡CüÞòƒ–[2[LgÚ¯e¬Wï06Ž\HFl»E¹¶Ü€s ߎP».ÄP¸E«då&ù™*·B²YI±;”‚¥rÅ„!ÃÇqïS.ƒÙ|Iö dÍ‚Mnäûk/7›âDªÁ“Gý“”*å«þõì x`ž³ˆ„. ¹â¹l9xT³ô;®ær8üƒÆ § ‹-·S8Ê%}®0ÅÕ¿á6ðöH-o$ÁFw-ä¼" wËôÏ,¥ãCÐïZeˆ ò<½™ÀR&_Î{ËØkD< µ€:ò‚ɾ „ì¾âÏ•cÄr} ‰H¾ .³.>Ž.|=Õ!Q‚Fƃ?sj·T— Áz '‘,¼eÝVÇíÁ.ËÆÙu(ûUqFKª@bö5qÈý¥_Î8D1[I 7{/'ÒmÞ A¸~Bf‰b¡„›,]%Ã5ßã° †VÄl-(X4‰ŒNzW˜ºÜZ@Tål"£t8mÙh°â¯vºrn}HÞ3V®xö5½Mš4M›¬2ÿÓSÎí2 ²8ÌIå0wÿ¢I!¡¤æ}jùÓˆLE0¤a ±Æ›Ý/OäÒ*e®ž?!QvÇ*ZZkÜÇ |)‘›|QCíé_¸ŒùËe®SÙÙ RtwbÎ2çµXݬ m>+±q™qiØa‰ÔÉoG%$A»êR …xÉŒ:U4¤1/©¼‘«>¨žËËH$ÈðÍ%~‰p±7""/øQ,1!éqÙðƒ¾ç²ÂÞ`Nä¹™UàKó;ôY?QydŸ­¤=ýÕûOvm»|’¾Iu2#®+I8«œü°m/$ ÀßúŠ “‘™œª€“µa;ìn] ?a+Õq7î5IŸ„y^àäëäèGUÅa·¤U»lŠ‚HËáóó K]x %åÌgò£$4N¨«óÏžÆü¹óáT³-)ä@•Î2òG3‰èVÆ£ÂlaûׂFïÈ2Çþº’ m²ã©0áj%>&º TÃõ9ÇBÖrÇøä Ôõ‹]¸‘g—rñ\e±–r~ÄÈèR[”Ôô-yh˨IŒœCMð\ 3rêß„gÿ•¢«|"n»fQ?ñìØGɢŸ+GaˆRÓmbðLãêõұŒ}Jìr]»ûFÜ2ƒy¼,Õ%$Í{’v”!k®#“1øÞäœé¸íFc`¢þAoW'®õ#I‡÷ì@¹¢(ÛGJâÓi-–zŸ¹ü‘„Yý3½[¶šž‰¡c@çX­ƒPn•ØÛǧ¦~¡ î­ld™ÁJøWçôªJùÉ’—V¦÷D,±¾‡”ë¶yàÑ/Ø£˜È­Ð£[ÈÐ_×`Üy‡M²ÿ önNÛä âÜ5Ü[d ã¢Âh¬ìã·sí@ÊEÏü|ÍJð@}›@ŽW‘ý[{8¯óÕ©=Êä‚PÒG’<*¾7&;Çú=Uçk&Ï4!Å&lâFoì¯óZ7ßËlW§{ÓMph[%vÙ¾šÄ7.?‘œÎбíc#»eëDYèh8 f`J×Ðæ• þÄxÏN¤qwäâqfý=·õkÃÎü\œYISâÏÝÁ\‰ ì¡2#pA´ØÇëâÞÜj?Ä#ºžöå,xÜ!÷Â7A P‚ ‚ð,ÕÎ4’ïe8²J°×ðž%.r5h?í<æóCûf-í‘ÇyZ@Å£ŒBÌš­F†ÉŒòqLb6CÙ|:€øè×.\$k$yÄ<… qB¼vuqàÞS•ÀQÊT¶ämä/©[á±òÕeÀbÕ36èö-¯±¨îJìꢔSC2…rÚi5…ÿ[C°nï VáØ`Ó$zíLv0@ؽÙ^ á‰<­ÌÄÍÅã6~a!>“840Œf¨º©µBiPR1Ôé)õº"§F^¨¯"PMŽ(7S;rDzs› ×NüC®!¡0U òDÃ8#Ót‰»»¼¿: ç#× ªO|C‚ÁOæp?‡$°¯ÑpoX²­ƒ›éqõÞ¢&•³%/ì“Úêq­’ZþÂ}·¦Ö”]Œž\7œ!Y×yËøóƒBR¤·xZIÐ0Œ"™‘o_Ëq¦›&t!2/t%žšy’à9b¦ZNû:$‘+éäÍÊkñ) /¹¯Ž8söy²™“`‹Ê—ò,ÃP1£w¤Íøjk°Ps&—Wý^Ý)‡…‚![Ø9h¤wÞÍÛÿÿm»µú'@…PÜ“CÿYœòâZ’”"h#ÊPNi¸ˆ¢ª!;:(G”‚Àžÿ¾î½]U7Í Ê}¸®ô&¿Í1¿. {—qÓˆÓÚªÔ«”Vœ …Om³‘Á_™_ÒCkë ñõïs¾‹zM¹ìgꕟÈ$‰¨êãcŽŸÆí#5› ¨;dÏp‹´JuN—íɶW~MF½§Ik|aÆpºgL7I Ô×OŒ?x: )nwš6‚+Jø6¹íDo‚­ åîÙGû‡DóÂSwQ©}…=ñŸZM´0È®íª‹+ýqwDEXŒ©´a£6žêieg—Û~¾rÔ´‹Jh^œÐ-ÄdœüÌ>×Uj5FJzƼ‘ãÉ ‚Ôü5²>V7ˆãJMöÿEdvšÿ2§¸~"ùgOqÐi%Ÿëv\óÑŽÜ¢TŒ,|“tD¡è,ú û ÌÅÑï½eÏ>ÿ(~’­ŒŒ/é9["ŽÑÀ:±wvÇ^¿ Û?L;³B°ð&(Ø @j²Òd9.†â.A·QÿçI.ÕèºßŽ¡oÐþìÈ/~‚8q]U5§o²+3À¹QÎË´§à[SIÅØûp€ØWÂMnß#£É7ì(B8Äì÷pO6“U«„÷Ú]~æ_• y/¡4Êÿuâ’T55ɼƒW¨HQ+äÛMêð3’"8üôŽù…’+¹U Vßc?÷sƒBÀÔ(vÅâÖÛÈ¢˜j¹š#°op52¶ ›¥çç¬àóð–>L0›êêqT¬sTñ>Û¹8Þdܳ¨ˆ©ž±# ‰‹82þ7³Oñ4¡Ç'tûvNÖì²· @Ž“‘ì¿(·( £¨ËŸôÆÕÈf2þ²‰ómÁÿâPKdÚ^5ÈRz©a®“vôv&×}ÚzH†¬ò£+¼ôĦ >ò9„,E¶¿‘/idOáGÿàC9ˆR‰‹•8C¬ri#*#ÿ5)þ.ÛÞ– * H#'º1…¨Ðd3o)9†^t©-0Äiý qWU®³¢A# P™Æ¾;`%°.äT°ºÁÎÀ‚±µ[¯ÝÛÿÚXN†ÔÙcüCríX{æ™*Ô µëîcÛk*þ¥íE䨶‘“xç-Ë7e§ô]‚;[Õx„%,Ê%´«©/²¿ñN©—(vå}ûynßÁœz WXâ.Ó{’¢Ó§ÐjÃúÐÐæ±ÚÀ’v÷ŽœjÀ\Ôm:!ׄ'vèRbrÝL:—ɧïäèIµn^¥m3«`×wâùØÑŸÉ=Ä€ÊKOÕ˜„çœðºyròÜ~^%×eO1›ëÂPö‹#8_“§:\5ÕÍ©J(TqÚÓe¿4°­÷Ç(€x¯ï®q\<ìpí=_> Œ#¾/WHEœ®`(eÌ2«™â”—XÕ1Øß:3bìzœöœK²6á+Õ‰I”Sìþ¯¡ÀUD!¹ üºwEä’æº´LŽáƒ?ôKQêm0ÍÙ·û£ßÌ%›vç¿Úú¶{hÉÀíN1¾]#_ò Ø{-Á{2oyˆ4Rs?©o¢§'¯¹z‚P ¥9‚3¥Fp<‘Fœ9'é±OÇ׋”ˆƒp³€ßz‘r£Ødñ-mN(J&¢òÕCg)¥üo蛜ñç0%l’¢Î¿¶žpº8ɼƒ|Úvªnªº»ÁU,Èy…  ÷wêV¿C¨Ã,ƒÍ^-%êÕp~r!A?¼›áf‘°Ìæ?ÍtÌo5|µbs4Oh€Ëý/ðIý%¬D´º¡{Â178½+VPæfÊ«bO'ÖG¨pÞ'Áî%eÛ9_†Uã“KŽUñK¹Í,÷šUø7*[ã“Ȭ Ù ïÖQ¢p£Öîà~ƒÊÖXWƒÓ<ƒ´¼;­ž8SOêj³YËw1Ñ„½¸|3À°û–e^ªÄËiž­h~"úЬ…†k™YW‚΃&žæyîÞ²ôÍ3"ö)ÿ[µ+‘na›}Ê+õ*壖l_O<=ZË|dc9÷}iÆ‘Áù€Ê{Š”šFªºPH”ù5‡Î •ÄŸÄ& ³X1(%\Ï+¼ONq±ÿùò´YÐ;9cEö•*–êzº5 G>9Å“[½ù〔4ñÎÉ;ñNË´.3ÍCÉ£é&Ç8»1SX@~nD§n——tÚ8’‘ŽËñmBáÉ´_ú¡®ÈYÁ3VÎô(Å¿¬ºl(z–ª–Ÿg—Õf<)fÇîåôO6R7)îËŸŠTC7dùW‘˜ÙŸðúnsi„Ě̙ÞB-ÑàÇ%Ê­R%'ºÃÙ£†*ƒ@Àƒ•Xô'h§ã^^iøÍˆÞ–Ë3èö1FïmW~d/>ýX%ÍŸAkø—l÷&胃ºßcŸ×3•hÎÍ _hßSM¥(ü»ìrü޲„[Á±Ü™ ¡~ñwQV°.C óÙ½ÿÁ¾Ç·;VZðpX |³Žœ\Nÿ;Çr­!¡>–rw6G\Pô=fÁ³6;ûóW1;±wãë—XÝ;2þOQ¤déЊÎõBª­‘¸"»öõ´D E>”×’ª; »/¸ _êXøE5Ò 7ÿ±á%x«OI˜îÕ&›£}Åy”Y³ß!«þ½×ôµ>·z Kï|Aî ”poÌ.~‹9&‰3_ÓVwþÑ`"b~^A•k¢èâ¯î-bÃüV6OŽå9Þ^ °Ožj¨bÀÓQ†ž}8’¬`úKÚ⻟r²&¼A¬[þÃÀð¤´|¬Xv·0¼"ÃXìLç<,B´3Ó(‡›"ÛÁ‡§`†Ã¸Òh*¢US‘&”Ü£¬N‹ôf@cà"Û—ÕÙw­è^¨HTæsHH݃6N&m {xÒa«ú-ó£Ó¶Á¶yŽuÐк£À ÒÙ+b¿…—`8‡CcV(Ë©ˆï³rÕnÖ³Ÿý;KlÏÉŸ-µ#)zfZÇKPÓoaãh[êgê>*9nŽ.r#¼´G$¡9Ÿ_o5Ë'ò˜Ñ܃÷gUR£š£œK±(“Ï  ¬øÞ‘$ILÃyõ@w§iŸÔPÝ„}3ÐuUsk‡­?h ”ÃUõë­Øn‡ÕB²>s=·çõ´ êl æñ§†‰ =b@Õ¬Û8±t²†Æ1‹'®ÜåºX)e©›ØjÏ™·tohÙzl?Nžeïߺvþ«œŸÜ_$‚ÓØ‰›w²@E½Â>ƒûݰY°ÀpBópÅÉxbv Ä‹fn~€Õíãx ï=·ã“r8Êèâš&š†›]­*ZÈs·ð&xšlÚ>¥ÊÍ˯r%úcÇ«àVÛ)Jšú£–7°Á%×NÇ÷îÎpÂ+±›Á§ 4¡ôöúÏê’ $@øâòØd½"z´·6ôaiÀñÝsMWØñÅWI¿¿JÂf"°AzoÜÕÉ’•×uƒœ¤Pÿòî]>¼`‹g!Ð]ŸÙá5Çñ0}œUØÏÈýࣻWôd›$|xËn㺡wÕ;Žu)ÈÀ'³gåŒL~ZÑ|ôêzaW1âP¯žC“åŒl7¼Ô@Ûû_Uk¶÷“¢Üè ¾F™z¸4ŒÖÈêë×mž^áê6e;ò¢ÜÀ^YXÓ€ô1T…>Åã¶³P*Èùn '}{q‹¾§é\Îú ¹3ŽB_E”Ø‘|1îD«S»ëFOZ0‡^€ÒÈ~n—ÍÔ¤4A!XJ|TéÉê›[òœ ሌ=SœÜ£‘‚HùgFÙr™³tí°ÏàßÈz›½Äø‰_ré¾@T70²o,5³žj”ºS4¡›Ý8Ô $A!5nbzÕj‡èi‡Éã^ÑÙ$Ú=…ߊï% @ç5ޤÈÈgH#K2ͤ6»+)¢\N’&¼‡…Ú2ÙOŠžJùŸ™YÛ¥ácÌz™=J áF±3Ö:©ìĈ’e(º¸xjŸ¶‚²¹?oŒ»Ó´7t(Cýn¢ # íø$ØÀM:øÂxO™†ÝW'6l$±bòˆàÙŠ ûE—h`x@gk9iW‹×-ÐࢴKÅH¤ëZð8ÕÉ6xK"YK;ç š“\y­¹ý 1à°cÞÛQ7EÏ"*à_ö%`«uyEò ¹fý|ÍÓ[Ïߥœž†›ÆœBâÛ£±ýkF 2®wDrÍ:ü+àŒÀ̽i¨”-iÇ_¢Ð™Ÿ ËÓ4F²g\‰p‚` †²íø«lùup¥¢—°‹Ìâ²N±Ôc*±Â‰ƒ‘ÖŽ¹ŽÇ¶öX+á,|Qn+°“yG‘†Jd0â"WîQ+ZVERç9ØTK ÿbÜy…¾ð%ÐI¥#&~¤7B·ŽÖ×IGÃGV“PÈKêÛqòn$¶gŒÉÊj‡MTÙ¼íê®ëUª5í+¶Y®­öô´³*aö}\[¦7•LÑ”0„9’mµS׉›!Ó­_(8î«¥ï›Ò( bÿDÖÚAü\úG ˜‡%­¬‹ð©|L)Ó‹„ó¡[…ü%yüW=Ã3rÎÍ"§69K•_GŸ°‡s®îdÂ#®¡!SQ–ß¾ââRˆP‰,7Ò”~̬êÖ€!€—ïÒ›íšÁ9„ûˆÔG÷âÔy›/SÕV‘”œ¤d6Õ'õ%æVËS²Â c”¡‡%þ‰›É‘­B½Õì…þÀ}YÔ¨©Œ˜Ù⠳ܕÉÒÕ1ajèÁ1bF.=>íeNá¹x'©ëí¶Ät¶£éAfÐià›{GËôq&t•††ø6Cz& Ý OʹÐý–‰€Œí* ʃ¹ù"ú©H‚Ša:³m{1ÿD”*~q„ÒLÛ×ÀÆJ‹5üD<}·Y{‡X“’k˜x5aµð ð½lëMߎôL»Q¥%„´ fÑás\;ÈÀ ¤ÚÄèú¤ÛR- ËJ9Åj«Õ“Í0œ–¥Rÿç>Î.‹l,Èœð rj2ÙÈ;'8ñNY·¬>y Û @ô¬XN)À.z–-Ó‡“ûÃ(YÙ*¬¼(¶Â3•™–hË1¤‡3BŠöÆ4ß3øÒš4á]ÙàŒ=`l!T˜1¬aª¶Ükýf"§¥ƒ¾EÂcØÎ– %<œ0cƒÞ*ŠË¹±ŒJ½Ð¸(e¶`?îKf<íèwŽ$UÑ’ZÛÀ Ë£ä îRnDÕ¤¦Oä¹+wHŒÕš)üƒ ”kH×óZ—+ǸmÉ4–þœú¹¨Ñ! Ãå¡zHÇ-®âFÆpTµ²E¨ÜÚ¤‡õN@L­;ÂXc8sü…"Õjñ¾zbDÓ\†+аäÑ/˜éºâÇr.ØÒɾ4²ðqÖûɈ]Âg'ãk¿ÚW=Ç¢gî”Üb•ìnªù«Á³³1$˜ýàuúè`€€,à­ªæh…’=_µlI9ñõ;ú¹c¿Ã|*ù±.gÕ ™Åò×M‰gRýnO’TWTóäv’Gkþ®±0ºö[L"; é'í§µAµ¼ÕÓ{ÎY:y¹9xp\ÌÀ°Ðþ‹qC½«þ.Ý}×<Ý(Ö1‘S .Ûñ¢3dn:F¯î¯c͸þ°\Xü_æø¨†5g"ý˜>b­:™Çª ¢r>J®,笚b˜À:Jtû5H3 î²þ.¼ÕŸåÞÔ̰B¼Ñ°ý8¡ç)ײÆé©œíPÑ*„á÷еc3f‰ÿ„r­JÒ›ÚÖáAë/ÝÒ±ë¦Cþ#aƒCcƒoßNˬEŒïŒ”2•èFy3,">&OSβü ‡ =¡Á€«Ò3Lö ÏÈú}Ót2ª± …¸#¶"ƒvtUÝ¥GYÌb¶ð\l¸ðç/ÔôS­_â19û=I{UºqJ/íËê ÝÖu檴‡×£^&a\w¾|ÁÏ+4þ(”rIœœs]BZÿ=¼ °Œ§ð/Z%ÃÜ;Bœ†–DÍ~bvÄ#åÏÁà¥8k\7ã:vÒ0&ˇ| ¸¢Û”¤•ÌûÁKzçÛrqo°YxdÛζ¤ZþFqG™ïìٯ׷ûçl€\–‹Þ…Æ¥ZP»B ‰ì3U×zuk³è]bÔcË|/Hį‘™°Ôû,Y%ÅBñ{ÉšÜÐD2æò´Ãê©ü%ž>ü«‡³¥•¤]»ZÆ÷ ÖV–CΕ’Í=ŠU7+F<»þý‘Ǽ§QËã!ò1Î&ãòÃ^”ç°åeHK;ŠÉåqz$H ì©#$mï–ž,lO¤ì2=lÞiÞÊYºy*ÎQžžPh%R À‘P7'™›*†°CùEªòÚ”B”6‹­§R§kY ‘k¼£G£àäþ»;BJÀcU ¡Ç)[-¼7W[çOLž’/OžÇË©ŒlDW,b(O%΄4‹õˆëòæ©I¨pÒ»¿gßôŠœו6¨ÍÓÉ6® ðУˆö64NëŒßÇüYÒÔ/>¸œWÏweˆ„5ؤüJÉtGf_b·WïÃD|ÙáôÓH¥ƒÉ4wXVÑ"H»TQmДCÊy¯Ñ6…Gýá¹wo€©·ó«?àsøƒ‡ì·z©zÍ2/»ÈN6ï9ûÏ‘à¼"ÒMr¿É]@0ÃâJ ÷éÇÝô+mÇEöI»ÎnÚ^òªk ›Ë¹05•›a˜ùñJ)|Ö4­6pÔÊ §ÚD¾l{+’NýjÕÞÃ~’pP3ùÞ°É8`^g'™£U²b¥Ž}ñáæà{1ÏmNäg„;ÑÌÈ+tÜu“ö´»iâ!¼‘v~¶œ»C@±+ÿ]Ê>tq_ìáÅltõ §­^„š‰7€_ Cß’(`ÝÊ=;5'?ã|'‰“Œ53 gi &8mÆÿ}Z®cý¸®Øp¬°»Ë‘1hvlsë’F¬¾Á°]²~ûéÙ3…GŒÖÿäÒSÂB°é:Gi2Kö%/Å04;¤}LžšP“O_2‰ºÜÞbk…'/‘ÅÅÌ0Ç!’ØÝ˜¼'+PÔŒ•Y,ç£áß5÷:]ïHñWNnÄv&Mþ¸½´ì :/fw‘ÓÁ† œ”b´Éy©-¯d§!µm§÷¦.½_$¬Û.Êó˰¤uô²ÿ€»T«¬¼++E<6gzIDy¬Á~¢^Ám@‚J-QÜão ¶‰¶‡©÷ĵ`û³œUÎêøR\˜q_ŸÚn(vvq©¶%wÎV7¿«»aG`Ƚ¼]$:QdŸ‹™.YŒ “Ì’øZö$÷cž¨½oPB N) ~ÿ˜Çãí ;`h™k¾ˆ‡´Å~Ð×'½=a©\<°‘#TùOrŸ5@=;¥Î›rV‚A)gë ’hîRíµ`Üa ƒ‹°6»o™Ò\J¦À’Q²fß^îÏË 4I+»³V)®OQÓøDÃ@öf+°Än5Ÿåz#6‘% /ÈZ«]}S=W-²½á´&2áßiV†4z@òE3ŒœaiÁÞ%´¶ýqZ¥ èœú3H€›˜k6ÍÆp¤Ënµ‚[¥³´äj¹ùªíU@«½„M$™¢ió¶µka}Ë/Š51Ïuˆså«bË`—­%„kqÃvæü‰}bßs~'çèÊH§Œxzû¡˜/-lÖ—ãe q7Ùêšý¨¯à‘‰8À•Ec8¢I$é3¬iÏœ»99}[;“§.Êó1!ü rdL¤95[K)onòVØCûº¼v‡”ÝZ¾^´JœÝ~5]Ô=ëv.{µã‹ 0–”Þ¹bç3~.„ï嬒–ÎÖ±ûý¿YãÊŒSÌÒ*îeînÚO/eY™Ì$qÛ»Ñ&ëY¾iöY¯QóÃø@R”<ÄY5Š  OOð¿<‘©F4b¦ ¬«VŽôÿÀÂdúoÀ6ƒ´¾º7 ŒÌ¼5X”¹<»åK… q *>â Ï–i¹Ã‹0uýM.SVìnDìoŠ©ÙkáSmÈõ2d^G‹d—ç,]dChMqãqŒýtRIÄ_'‰¶ÅÂPE^JnßÊ#½£ õR²äoxj»Ù|—mÃçÄTx¨ÞH`Æ\Á£¢›Oayê½½^ˆ’×Óè°ÒK)¥"! þ ˆÛp×ù` ¸~{ŠW=aÞ›,=W|Ù}¢ÁS© m¡;•8£A6™9[p,:²±”bÂi°)ÐÝÕG†ËÄò•èl“aª4ô1Hý‰/4Â%ð>°6§7‚‘@È“`†S1ò ºêŒÐ¦914žÙ‚`ï[%±@(@'ë×L,ü-I‹rÀ£ag­'”¼7XºðO‚óÈgÊu×¢·TB¸_Ëó'Xå¾J©C6[ <=œŒœó¼¡&Ié^q†„¹–ó?¤>¦ˆ‰¢ï¬`ûg<&m´X¯µå-W4tÏ­’EY.ðÜÛs³©‘ø’ó¯àZ“yXórÛÞã£:Á»¢±©:Ç©z{aÏ—$Û"VIj:Ñž¢N’²fU¿­Ï¸¿bÍwɶÆA)ó½Cû¯‡å5˜þW„\‹€Ñú5óåv ǺòýÃl%ò‰|=º¸agøhüÔ+ž]›!µÿtõ$ €ÒDÂ_–`KãÕK¶—eb7ëLGEäÅ––)7M䎳ŸÊÆœzÒã/ó%áÇÛ¹L{n(¦Sêy D_†ÿÇ4»& `cVW$“~ñÞ 2ËØ–kºÊ¢V¾6ˆ@“pd6!öµ¨ìãß èogÇö¿˜u/á•1ÈÈ}‡¼aÚ?œ­rçÌkë*‹90Ð Iý‚üT\5+ñ¶‹®sîíÃÖWf ˆRPòÃß$÷WýDùü;AÛ¢žœŠá¤ÓÒÁ§ÛgCôÖaš%ØJÑpß#M¸‘ºmµú d~é«‹ãeH¦Ñ¿À:V ïƒHÊÉò‰dª|žc«ÁG­2Ì“v(C/…ŒÜ}Ñš|AO’—vsÓ?˜cUŠ{Ë?|ŒÏ|êPl¾J¦¤?£Ù7é(,´Œ¨¢e¾˜ðÇÈ œ±\šx %^¬ëÑ6$÷È—U©’ÁW/`ˆ²ër¾†ÌLÆ2'¿û~™z+·¾žE‘RøêªxC¥3|‚¬—€˜‡k”?œtĺÁò3±ø§6Èø“doE.…ùKTó‹à§;]1º…W2Úv>wî=¶ìºTD f¨Sî÷ªñ2¬ÉD7Ó›• ÅSÜ2ÓB¿y““ïËW&É‹|Œì?ÊsÅA…»”±†*ŠÑçÌ8å.£iÀà%æ4JÍÕLþ”Æ]VD‚IàÙ9@ZWûWX¦øœ© •[iäÿ–œ3Af vHV¾j„ñF¹œl’1[–9oÏSgõþCüV†ck‚ë?˱T5 ñ 9ऀé'¡5sGä;õ13ðO Ã)Zºö ¡^þòå9kÁÞ ÉU«êñçÆÊ-ά|J;""cNóøò»‚GÞÓëVñ3k•QÔ¯±±ñº-ŸÂ»ÀÙ&m4 •’/’jvòÜc¤»Ö7B2gûX¯dL™}˜£Løq'mu9馓ó,stÏù”8³ÊY ´¬¨êË„¾.%·®ôþ×%.A^£Í/Ñø$côœH5-(åΟÆð˜C)¸M9BáÅ[õá¸ñÆšÞûÌœ0|KÕÃÉ—¿²ÔûôDÔÚCãIx[9õ?m5Vu]sNÎUäÙeŽÊ´ žìö2;Çû©eÚ›}¿U2©º/;7×Ù¶ª5ÿ¹úEtß®p'•Ìë–{dñöU—ég¢ç!—N ãV„Z$+²Y{ö*mýafú +ƒô»¥;¼…“5£q¸»"ž ÂðÅ2»€WY˜›§wçÍ%<ñ3.»à\Í#J¾ßÝš-¿k°I2ñ>•–ù%þ_G«$pÚìâ €,Ë$ìí…Ú$uÏwþlˆ5usÛ%Ô¢ˆIh¿lzæ ØOÎA&CŸ-é.¦Kè¤"] çrÇ2\Hì‰x¿ñÔ.iÔ‹L¢AìÒê"$äÏžâƒVˆ$!B›‚S¢‡ìÒégÓBÑ=é‡$ ùÿäP'u<ÊFoóXL ÅR2ßoVVÀ¼6¢e>Êä¥,1k…žzg“<“SÅI.«±°ª­2´KÞ1ÙòPözÜNyó†kN¦ã±7’"Ñ'g3Ôç2Š£Å- ;€þ‚¾v¸šiDN`ª›‹[g–j ˜Œ$#Œ5 5öÏÚ7qô¤¯K½GÝI†÷ðÍ ¯X‘ÌpN“IÔÀסNW·¬jÃG/–ÄÕ;îÏVo†¾žfr¥‡íq·M _¬Pˆ$¤6f Ç›…" òiûØëôÑSÍQØ–¤=¾¬ÉR¾Î ­Šdš ‰ ùkܼZ±d(Le`uV'ÈTE×–y|dèÅñÂÙíSJذŒy‰ð,µ9_ôIÂïªú¸\• >D”/7wH—Ƕ»cònnpŒcÙ"aª{¡&dê¥éñ‚%eZÙlLa-1Ÿ-ëÁ7ÌÇ£ÐVpÏu)¨«º0ÿ>/ÚÑgϸ˜ÔÍ£^^¡–«1™©4Æ`1¼y¡—!ÁÛôö±ôh©32iRâw ¹úrêp@Ý$нnQbÑ HuB/IíF¬BÛSó¾¢Î¨FŽ`‰XquRmy·¯¥.ጨ](R•xJ8Â1"Å‘»akDŸ:wñá¢Ú*[ƳoI´ï•Lú´ªAzLioKFêƒë<‡cLMAXÞ …µƒ»;fJcc‰‘ÌëbÚ®"&±ÃuóçVÑ-›Qƒ3ܱ±2¿K÷“³c»CÉ?+Èbz”§x±óT±>ly”cˆ¤ÔšEĤøT3š –²pYɆXîLV/BO¼f7e_ƒpŠójnöòíï û=~5{¿ÆàŽ …KHâûªÚŒîèmý^N»d3&®FþW 7ž¶¿.d)Xšs7Éb®CÁIB(f Ø•º’‘gé-µB`dþ#sE4‰êH}CÍ–ûW'¬°ÞcÐózQ]<Ÿ³øƒ› ,þN¿ ®Ü&¿ÑK †À‰úæpÕÞ š\çNs‚l•í}ìRÕB Ì‚#yDí6j>’Lv+pYíSE†0ËXMgعc®$m)HÆfHÿ["u†Ú¹”"÷$C¦C÷˜¼2.,¯Ó›Îd6¯à¹ïá“’˜ƒ =±’¦È³°²Çõ,%¨Áúà~”cò~pRÔi/˜^œÌ>=Ù%ç)Âôn"v¢jdÅI0±VÔ/vìjkXœUIÙ‡Zɵ2S‰'Ãôâf"åQ³aÝ1l‰{rÄ=ÊRQ„êc‹¨gŠ®S‘šëÚ–Ì”¬ Ø®ñ“ÌÞŽ!@ªÄ‘éÕ³q¼þJN®ßï 1í-"ƨKk—°½Ò/øäãY`#J;“zêäE¾;þ×ã§QÄÓ}¼Ò¼&S>L[ËMrxGr¤rY:ãÞÊ”ÚBâz'ú+yTÁ‘rý NU´¥v.Ó®¼2ÞÃö³nLRò œú¢Øa¾ZB'º€±(®'­¼Sç\JE;•!… ’XK ÌcÉ2Hq8ŠK;”ê7û=Ð8ãMZc„:IZ³Ãð!ûÔ·—嘭˜hÕ.œªÇòP ɧ>/Mˆ!v³H´ÀÓ›M±Oðb‰”FÞ¦½ºR¿ ÂË}õrJÍøº±'’€xQB1æŒ?@31c o8í«À¡WiYpœ¬~ü$MƒÖãûò±¼ÙÚ(v@pû—Kòl"êU•N^Èú,JÏ z7qó“¿Vãß¶úd¢+š—ˆs“ñïüË©< nâ²á¥ÛÄ íPûªx9ø¥:Ñ8ÁõwpÛQähìp„ñ6Ó\[mM`ÄÅZAÒŸ›êSå¼dd<Ìž8!ðåî[=îÎ}ÏLëKJžð*‚ ”óFAâ&Bê™*µ>$r£>B(„G†s+ ÌåM S:S%¼G,uB8PþÄÜ­éJ;¤åÌ Ùþ˜äœÕ'7© —NR•DÖvº—€ÆÊö¸HŽXÙùII"€­ä8‘ù8òLõÊ?P\çÄùLÛªjï—óôܲì$Å‘t Þëu«Q5È â°cþ…HK€|;拘{ {æ¿¶ìèOÉCY¯‚9 eø÷E‰i2Ù?×$óUޱƵŕìÎ;¢ â›NwOAå- V–ñü“ÕʰH„ò#Q$ñPàtoGL2ã®–k;Vª¤ »×@Î`ÀYb\PÉze‘ÿ»a|lGûô´œC´ÈfÌñËüøÛ‰í_EL!8¨×éGŽÊr³×ºåà©665œŒeqêÚ`³»˜9[‰Û¸Äík-\’¨ Û´ÅÎpÿëgü Ž~Ç%`ŠgËÉù!¹M¦=§Á#ö¿ÂݪØü†¹.:šòŒÊB9y+uàVšÒÚŸ?çd*š«=ûUÖ™ÕÄŽ%sè~†æð ä%8ÍÔ“KYú'#C%Eël³¬…ßÄÞdmzÒ‰‰M€ ±!ظ€Ò‰>¦.ú<šµ]ˆ ­âœ™E®Ñ›—'TÑ ñØ„îÓåYN÷ Õ““Ê("x¿+qYû‡›†1›EòLjDiTY+ßHµÿ5méó/šË¸› j^>}ËØVŠ7Srt KÃ< j]ÊR¸—¯YÞ-Ò<¿DòƒTAóªÕS¡Äq a·¤…‚ëün±£Ïдj3®JoDÜ&úå¨ úãDUüghÀ™xÕ*;Eüv-[ÓªŠ/£)^aÊÜÎ@Y7£hJu§9p%Þ)##¦•íÌÐm“8ï…g þøz¼KŽYÀ.•Õ™€ §É54Õ5™¥[ÔÎaa‰¦$ËšïoÁù‰Q³ˆ|ëy?­èïõõ„ÖN¾ª_Z+,PwD‰ý«ÞÓRLY·½‹BÕÓÎÝcÈá¦ÚG¼©ó¥¼¼‘gq2×h5kÍ'N8è®{³`ó‘ïä ‹Ú±ðSY÷«ÖH›ˆ#&s˜6·'¿ÞAP3Î(ª\’:&‡žé?5dÞ÷$mEä7F4'ë›,Û•JÆeÇDÚ¢å}gœÏ57²䛇va…³pþƒIÆ ¶sÑÍÍ@Ú’ ô„±ÏÏy·ŽO&!ÍÏzÁ„6_íËLël¥¸ŠÄ§X1 *Ýàƒ1TTÙ:ˆ7© ¨Ö‚žÊ«8Û”ÅØ`n—GûMx<«µuhH1jûA²réÊʉ)Ô˜bãÛ†=ÓÞ‚ï÷x•ꕬ¨¯ D9¦8¿Oºi|å™íi¶a¢‹‹‘lÛ½-¹œ&ˆÉ©UœËéèB¿Y;H8¥­ÀÜB¨€qWE´‚¨›®Ôz(Ò$¡;ñxzËYFF¾›+zIŽF†±?`{øXœý=*ûf]N²•v>"QšL 6¡…2礗*‡bñpÚ/-’•`PC<–§HÀ t ‹†J aOˆ+YG°ž®žÓD¿ÛÉùfˆ:¢k ç3«†F>¿+˜Êæø‘£Àœð+¹iÛúˆ.pÕÍVÜÅ »ðã5:ÌPÜ)ÔËö˜.«S¾?ËøÞ;øË­tHlß )lò«qJϽã®,Û‰oÚOD2‹Ï2eî:¬·&+eùHß$@_¬s($y$pJeþZ:]ïöÿjù¡PYÍùðö¼D¯ {ÒIqJÒ{\J—mguùÔYµO±+äÕ¡CŠ\‚“ôAñ.! >®‘‡ÄŠ2†4¡Ä§cg¥Ž•´W’I‹ÓZeœ¸Vë(‘d3’×X1+'lëA²³5Á´!ÝÌ“°,ÓÉŠU®2K>±Lߦ’I;ê÷e ÚÅéÐ#r0ï)ÁËC¶Uø«TïÂà>•÷Æjo¶¦.ì ð+J±=TõÅ%!ß—·¯Û´ 1ÉGSbï¤dûãiïhÏjEy.:}c/½µ½š£ur§ñNRß 1ÖÁÓ¯#,é‘ÂN’YÛÆ_ù‹â È‹àSŒ¦@J)TI±< ž&Á;•Éʱ¦Ep,> =e6§¡Ÿ3J”±’ÓMꯅH8%4ÿ“âX¼+È€ËäÚ>Y@nv;1>‘´[¥-mg­;Bµ´SźFص!4‚¯1 ‚ø‘ôÃgç·Gjš5ˆ¿ÊiàpêÀÚ>) ïÏÈR‹ÖR`æJ|WKˆÕKtK(Äc‚×k©­„!¨ØÖR¥Ý¹H3UÅB.ñìm¤2}*° gpˆ±ŒÄûÕÛR«8Þ¬rVÚJ®Ñj'Cº€kÈ'vI)eìzPNºÊ¡*&G˜ßRÄöö“$2Rf9д£FJć„fr}ólFöŽU˜Ã_ïÅ?“ïI¨e²5áÓ¯;ÙÔ¤9å÷‡‚Cèë¥DÆáà~l5:ca<–.¯.ìúSê²ëÉS¤2}ÊÐŽËFz,^-–’>¯<Û±?1ù´~¿äC>‡â~aœœwjç­³-W ónïä.çHÒ¤ëôÞ 1Õ.³Eù©c9HûË7ŽÕœ³¸ ÝÄ}um€Î½‚âÌaÂ:´ª{Iø"íˆW>KÞnÇ á8,ØO¯ne-YÍ©Žì³µeM:k 6±zι4ªÑv<‡U`“ÍöAœ=Y¸ Ù±º‘ÄŸKÁ»|^…,8ÄŸõ‘€ÌLõ[€ïD„å¸ëí¼ûœÍâœ8ä†ñMªƒ9KDi"y⊗\U½½‹ ¶­+$ïªáÆ* ûb7í™ÐWú=¶¦lñöG SWèÖ4o%|KšÍ «Y{¢ *uW`Û‚œ4ô(dðÑÐHކ&ò‹án§¦Õî2¨e{&‰jö«ÄõÁ;ñ‹e³ øTíYâÀí,šüðYŸ¥6ªå_ÀŽR1Õ)ViÏÿ°_¯™Piü–oÚï;l¥„“Ë×ÕjµæãûpóL”¬Âš4¿~ úr¸"»RøÔ| 5[$¦Œ.æ°·Haˆ¶Žri Ìû¹0r3ó-•ágÖá,ŒŸôÎK)É+v¬23$þDí€#í ¹ÚbTúI‰gíîÁ‰$„§iéàM_\ˆ`ˆ¨ñŒ„3™õîä;=2^؃«´‰§(žâ›™Í’]Ó£ƒIfaˆÊ-VUïªàUz ßcšß7Ð?ØÄq1j ’}‘Þ%‰\…`=~ ‚”2„ “QTOj¶ÍwÞZgáZüeܾ!§Ã“ ¤t”wí2Óßp)ZÑ u*Ã6ÿ 6àvî SÞ Íô¾äÛ­¸-M§Œð\ tíÚéIí³á¥Ô‚F¦VݽE‘¢wð• cÛQ Ã6±U°uèÈr°$RÌZù™\Dò3£Ê^&?#2çíHí2ŽpÖ¢Ãh‚,ŠUüÜ|.±vÞ(~j4ÆÛTÚ† k§™UΑÚe×Å4R×ÛdÖ•V§rPeÖáý*½Ðv^§éåÿà[¡3 Ê?–É +ÁÐõ˜R8Q`¿X×»¢-œöŠ…O/°£ÂƒRT9‚Cµh»ÃÑ·VC+„º„YmþY õäÎ<¢nçâ ¼_2ôq)aéËÚ»æ„,B¥WZA5æ0( ÿͨ¡,p,hÐ2±µdÈÖsýp ô®mEÙU‰}¾šWXÝЃwËT%Ú¼x>ÇáëìÔÐä'y Gôž’ðTŠ©¥¦µ÷šÞQIö,6¼ÁUÓóky´Î–õÇÙ:uc’ Iç“‚ƒ¦¢ ]E±ßŠ)P—»c> ,r6=Þ±;àQ^Mü‘'ᬠ7p•|KÍ=<–³h¿Ý››D;¶S`ࢱ‹Y';l`¬½Hµƒ—|»a{£9îm@j–û Q\ÆŠ­WU6¨±ÆVv(ž¥—ÒúÌRT•_–ˆUËêÐrN÷ŸÉ élžØg^»Ì?ݶx¨D92˜:<Ñü«ÉªSðNɘkˆénûç­¯€6”iJFÚ¦pE=Û¤·ú—f`5#×@,žUcX™=Ù=„Þ4&M þrü˜©æt€ Ú‘Àv$f2SÝüêH)ÌöW Ø1á£ívß4¤…·lÇ«³u9y°d74Ä$ íp`¦wœnÑ*Ù2Ѫ)ÕTªÝ扖œ9ÜÍé«ü×b›Ç.q®Ñ„ä|P—^i†["Ì¢4•¥Æ;rœ« ÝRÁ:„]mï¬Kím\éVzS‰ïêí$' %ê6E1Çu“g€‘)Ý©Îþ1ïÕþ1™/8ŒòN‹ZÖ“ÚC°t~ª%gq»?ç·‡ï¾%>Çóæ  ¶œµß_kŒB×½´iE¦ûÔðè|8ÌØ3æºFÌ=ã¸x|éøF´>Ç/¸ŽüR„’Àû12ìVzßØÊ›Ç¤sK“€ÚYŸ3` —Ê£æ\²kuL‡†ß %wö÷'‹ÿ< ‰e,T(7„$qÖÈoœÕ÷©xpU``;(JéᔠПy… ·¯•,ר>ˆŒŠ–>“‰8soðÏvbîk~i”—®0‹`…ÏU–ÛV¦`‰¡Üö«£6g×(™õ‰ ÈíÎ0ë÷‰HB´\èP«œä3UcTËäüEñ²#ßôæˆ%£O»§È7:mÇ—$Z(ª£\æÄwþÁ¿ß¶û¥á½ÛÿÔí»Ñ“ÐÉKN'b1˜ôÉdb¹õ%i¼ý¼Îp=m/\>â eÞ¯¨oµa?ö¦CÈì¢:ÄÒ4|S<¶Hñ(¨JpØd™ˆº?(=§/æøbîç×H¸©VÖ–ìþô=òŸj•¥½bòÖ’àÐàØößr·:‰oq,!{qÉÕ¾!™òƒRâÝáî:‘µæ_2Ãci{ûÚFú-Ú7s{>Ã7Ά-Ó.&¿‘Cí툻æÄ‡šT~Ì›`ÿo$ûbÒà†‹D´€Žb¹{¯Ãþê`áý^sU-Ê®9ï¼Üº}±÷ç©~³lõffsí–»Gs)’Øœ¨«`©¼T£ãÜaÀ;YïµZX6úúêD0‚Ž =º•¯©¤Zk^e¶å ²L4jddô'p|Åc¹uÔç£U\±;§š"†rð jÚ•¬RgÁåâèŸnvDÍ1§ü"ßYW—AA–IÛnÀ;§r;5i ¹Ë^lÇÖe[‹êÕcek{Ó¯qFÆycô&0/–4Hõ‚¤0~2rd, ²þŒ0aäè죀êL²}R€Pœ«Ÿ¼ã˜!3'íxo¦—¦"ý^µó˜¬ø€T<Äø‹žü¯øh‚Ÿxõ,£fMïî‚’Lb <Íü0žœm“%2z8É4Í*R¡þ} à–ƒ¯Fl7£øôíhðlÿÑð–óƒê]YzÒòñ0µ}r,†1‹Þ±¯)ÍYio"MNÙÈ'î¼6lÛñ<§ÄÁÔ÷¸ßy'y ,¥<]ù´v*Q%Ô*3™Q¦ÒÒ³q ›ÅQÂÁ.6 L) ƒíHúøß.¶Ý˜ŒÀr(ÖÃÓUc±€Ã|Ø@±‰[Ç^a² ¢‡»ä]·¹a½Ž7¾’ípNdInÄ~BËÑÅÉñrf˜â¥‘8ôZ¹¥.¹OUƒpCU êO´K¿¿ñÔw¶¡çû&mßpªHÿh£Ö€e 0ÃA…ˆNÉK€æB©;m{ûYØQH—ÂäNÔñæ„â÷éXÚ>I¯¹÷óŠcr_¼ç‡Ëˆ=˜e”Ã|ÎKõ–µ•nHÄ_i‡óAmBVœ.¼ßåíÏbÑYkç:¹áDþ“ürkV± îO!89„¤HÒÎ’>žIO/A=¹íÐñ½yEzkµ|ON§9“¶;7 '½¸Grvp¸•K¿£®Ý¥^~¸3~–}åDÜaƒ¡”³ˆíîôÔwͯBu㔃¢t ‡¤6v fBÐ×LÛgCöfìç…hšDÐafIéA´SõÕ•YÓóMÂi·Àoòyfã¶úùxéâR#”Z åUüL ´sã÷0<êvˆ½]ÖíËH®"³=ú´8ÕÚY8n󛺜çŽ ¸üiUíl9n5Ü)½Ç×é•™)ÈÊ`Ð<ü= [•ꉻ0Ïôh€+€^鳽ˀ™(¸ÀÞ¥vXó@ðFÜþ üÁäÓÒµ­š #‚×0k­Î»+À÷/ŸX1”eúò©,¦a—ÖME1×¹Œú•µTbØ­@®ì»¦oª‘ Þ€_•Å,ŸµQÑŠqßâ6ž\m/žöC›HÖÓÝïžcÇÞÏ?e r&KÍ0>ðòœ•ÝDó†),7–ÿõTΞð¨×Èõù{Éç‡QuòÆO·ÕTÞäó6Ï™Õ|…}è‰:5ÖªÖX¼`+h2NäØ8·œ,šÆrÌE- Rà “åàkòsí$nåuvc|Â[ù½'dg—™¶³Äüj…’mU¼.¿£2²[¬WàTÛ’?!OjH [¹ŠZ¨ìC î¨ñl§ƒ°šD—¼lwpë‚j3>«¾õfßVmö»ÃþÆ0XÇlЬ¸gŸR½òŠ¨çººÎ‹ü3QQö”Œæ—7&;|†\kHmÀú'~ò¾R¦P®û)VÝ8N¯O†n¿þ ƒAO­X¹úIBJº¯¹—à1²TfÁ(0â/Öz).ÁÒNÁr’'‰"@å¦C"+x&Ô5òìDÉç+núØ„ µNjò™äŒN»)&·ä$8=½oæ„7&ÝDÏéÆù0ƒí-ñ3§Í¬Ž)êcbü— ý„)^¡ùÑ)üæ’-<ÉXÑMúù.+ãpxˆšj¢á}ˆ½’…Pèa ×{È[LJÓ¬<³c¿Z.›ª¬¬ÚhN š<ü‚²ö¥nìŽbs{È ôþ^ Â.}õÛ¶Ow/bZJCe4Ưgö(Viù#Ðçòö­¦¿>íн±>eñ+Q¨+ò[_0 7 ûóC±†rÓîn³ïð.Õb‰¶‚¼¢@Õ9Ì9 íd±ü(}h-¦˜Õ­êØ‹Vß¼ vlÛ7Gr0Ûuá}*m˜Ê´ìè™oÄÿãÙ2¯®ü£~¢¥I=²5Á:‡Ü2@1UuÓ@"›´çtë"yÙŠý¥ü·ì™Ú¦¦Üã9íiJ"8Z³ÈÈH6Ä*›·“@Öö?rj?À[5}`Ï&hú”¢¥ if`Â_ÔUi†ÅºQx¯ݲeOfõåÙÍ™`'u oÞ¸•ÁzóÖ]@9„›žÔÒ  æa]Ø*ºÊtô¼Û‰“%ä\i+’vÄ- “}³€h­É:V³Ð®[©ã+%Ø¥ß[þ7;dBY7FåœÉYPAÞ'~ºNK®ƒÃ•9ÐHÛyù§€0 ÊN§6µ\$<Ñ(£\ ž6øªÅÔuLO S>a³O#±Ro”'ÑŽÁì‘ÌÓŒÏðíz^Îñ–ù ²LEžùM‡,<¹9õ8¾‡V¯ønß ½kÒSXgR“NËi1• ]+JÐþž¦©’&ï#˜”s©÷ÄÌ|£n˜B&‰˜” Ü ¿â ¹ÎV×FMëT€Ê@›œãª¨$$¾"¡Âb'3„ñe5g‚ÀQ³ç ÂUHÃO•¥H€$DYÄ).¸Ëê†ÜþŽç%ÿþZr6Ò‚TŸÜ‹ ü+¾‘-îŒ8“O¡ÒA‘_zÔ€Õ¨fGWí»=±˜¿%Ó)RL¯èD*¿?Œç]2úúˆmù€bQŽñžÄ²\[±ËÝñŸÎWIÛ#68qrž(k Aoásªõ°ºUO{"™âQx"@w—©^þG”»leO{c5Pŧš#qùF:j"’ßa°§µ?:ɤd¡Ì)åEˆ]öÛð„©Ïw3ƒ°©I¯¿"ds!¥úAž*b¦?å6t‚‹2PÁ÷‹ O”ÍÖ‹±‘&I¯†äeuÐÎ:%ßK#k—¬ ³F6Àžö;W`Iœ@VÎ I†â³Ð7ßq¤ÐÝDÙ‹*˜W³P å—c “Þå}¼«•“ÖÝSÔ2tc÷4}$~ï_ë‘&†ý$j®(©°3ñ§y¯ËÎÚžª™¡qä %”Ò-^¢í¯óŠôÇçâ­ˆò(¢D žò{YòlJ¤ñÌg¹¬/P¥š±Â“| lJFE=uøÀ«Ù6+öó¾¢Ýrhõ ²o°07Ê’!•ÞœFÑã<ïdéy®Óìsíæí8ãáüÆPxü:©q ‚TíÄ1$˜Å~­/Uëå.«=»§«PèÝð¾ÂãÊ5‘CÅ>süÌVz³EîälåìÆÜ%üŠDÏåÞpvBÈJ¸/_Æ…­$ -YéeHͪÝyð²¡b—æ{‘9RÁÈÜ¿r‹ÝÑë(ȨދÏc >ùL1v®=y­eC*o6-f„ØSŸ²¡Ä-œ7Å$¯Òm-Ám²-ÜSº\¥‰cÙ¼ÍÜ̲n¹åêº^Áµ¬.iQFó–Vù”ÂθUKH+³}ÄÄ¥·”+ÅV‡×f£{¿·ÛiÜMøeýì…D«â¼«ZUųœê^ykl˜YJ¬j夒êÜѭÔ,œ)G1³°Tj. OáØ¯‡7ì×llŠñ[1cíØK‰¶ª” |RUÄi÷¾åˆX[Nò[Š:Uƒ ´ñ1þ‰5U*Ú$Pêx8—u×ñªž\šg/ÔÅt> × ³ÌKŸzÙ9áöÔ=±q­}‚ªæØœäØd~U,ÇÍ‘Bä)DG å#;†„±r¬µ•r˜ÑVW%¿ ; þ-pVɇ\• n »ÏšUM™\­-®¸šÁÁ=fžé`xW 3–‡gbÈGé]”ÛI9¯¦®/,ƒ•^ëcç¡f4çälñø—¢=6ÏÞ¼XN6Ø€Ó]ð,e² Û]/ˆ#[xÊ”é éÈ` h)°М&¤é±M¥Š­`8›j8â/Г˩>•Øß½ æidOHÖ6bR¼f}É@ÿR *9- KuÍ üš p©Õ°Ÿ þw±¾jŸÐà ³Üç="}oJ 2¤ìžn2«@i~ýá9‘å†0³å4ÏÛ„:´³Ý¤± ‚Šü]qÒ ü(·¢ë_š9{ÿÉ¡„É~Oêu&lˆÏ޼/<0Ã?$˜b}|6ÍûFPžb¼p\ML¢Ç”—Vã(æ™ÜÄ+S–ÆÏû”=²C¤_­‹oÄê§õ4ž„±y_·>boŽ* }ˆ¾§¦^¡A=®¶–ÚßèïB)[þh6îåÚ漢MÞýšì„T—п¯V‘ ”å»Bë•`çéNÈ•ÛÖž%]ö’ Ë§._çJÓ%×ÃS˜_Ÿ®³Æ†õêïÿʯ ·û`+Ä× ¹7N÷ciSÔÆ$§|f"öM r65b¬GU_r˜=à4§Ðg£8äé%¦ 0¸príË)³a^˜ÍÌûd§µ§LpS<°Z €§Œ'Ôø{¼p›³rï!X)¬à–z¶a¼‹“Ö¤E4&@œ¦+rյŋØ7ó š¼n§~x]¬¼Q¡¼"Z£&ÌxÅÐ÷1 ±®{¨Ò†ðÈJbµÔ?Et£‘û[2ѤGpr8 #g¾¬b ù eíŠôŽñiƒjßVo òö%õl{ìHeÿ›ƒØ]ŒiâçÚˆ¡­JõæqÃv»§€§ÜÕL,àDnlÑ”V£_~A–_¿ÅÉ\±ï¿Ë‡W™hõhI„JWÕߺÙF/|7Û_šûUT¹‰/’~Íâ°¿4Û±®g½3x¥™Š/’£Ý–³‚_I‚ v¨_–ÛÀä9Œ«פ'M¡À†,r8í‰úh#ÿ½ ËgX\2$\Þ7ZTÖ×3t²Í~>À4Á¼fHý7‡}ìê'®lNØ×Î`êÞ˜ŽIÎ$Zö8õ¯O¡ùUì%«H€AÔ‹%gË5Q®/ôã@enN#ºZ±Ý‰y¤Ý‡„ºÛ‡‰è½’•CÌÊu¦h3¬Eµ¸¬U‡ EaYK¾¶{üõ‘˜C˜!máùP®¬¾/ßžBa8gžL7‚ûº´4™"Yyf×Û=¨òž¼ˆãŒ\®E ô¦¢ [ßpìÅ ý„¦ª+ ô+ÉñuÏ`VØéX×-¿Á€…«+ý x­Ð&l*ì~dã–wZ¦Ÿf‰7³BùT"£†â~EýJƒ”tšCÊ«ðHý´.‰táÔ‘±³=$už÷––qÇ å(„ä6¸rÌžÔf¨“ŽQû¶&I¤ µ¡ò‡{E—õ¤uµBª¼fõ›Lˆ·šhÐ i˜™i®Ë܉?U¥‘%%tòÛkFlq qN–.óäTòGY6ñçŽÿn\¢ò:¾H|ûE#óèw®Dn,t£ ¾YzF@­P3D°é‰1jˆÊ®‚Mß>?W£^ÛØ~H¹\‰½0þ+ú›¾Ä1>3cvB‚ËûêÝ…ãÖùÆ)àJ½{ž27d2™&M5zã[gá{“v^šŒ‚ŸB;XõoÂñ·¹JXN¦ÿ5¦i»ƒ ]q8ñÒËö_G!ŸJ tüË4Q-¿¹<Þ±5c=œ™É¼Wùúk1… WÖq?Ž}ÁϺ½Æ˜NÛùÓ;3ŸR h™y>¶¢O7HðõÓgö ¸âÌmÇQÿxq7Q \œ‚Ãþíä-bÆ.ŸIiªÎT©´¡ª¼sì`ò×oÙ4Nß@?üMx¦á=« lTýŠˆ¼‰R•} 4¦¼¯ç7$¶7w[–ÍÌ5€66ò5Þ»®*aî‚-¦ºaß6™q‘´ÖÃ…ŠæÈJ|Ï1-NÁÜ‹JÁc-ܦ肬Ýj,/üÖÙ48Heô Çá§‚ix¹Œ“³DÞ5¢HL·¿E}`ûÅêX²b3‡ñªùë_bå vºD;4»´rý¾¿oç{“Â.hCüK…ØÙMãËd\0â5I\+àæÂúkHzÂIÔÓd,3çP%È»y±g¿}λSjp'w1Y†=$lWf7ã¸=ø”÷É ã+¬} ÙO,{é¶ŒµìQ¶ùº,6™´7â¾}ÀŽ–)¸—ÙÏ_uUù¤¢éáÉ4É©¢1ì!ÑJ©j½©Y—VKw¥bAJj­« Õ9êÊ q ¹W¶€ôÐ3BÄ*ävLŸ(. îk³Jmvfùs4_»’åZúe a®Dšv“·:¢©èž:~0§zȭ㸇rx™îã‡+”â`á!ýg ëæy-`#øž°…â Ò(×,wLƒ‡âùoß*ªæQ¾ ?E[³ŒôV7VM»û—ʲ֤X#æÖ3>08^ø¯\¡ðÆn[çÒ&V¦³'¸uˆØT!jN{W´f½yˆ¿Íë_ý’#_…« Ÿ´¶ h‡ _Ñ-æKáÉ0ÓÙ&ó‹X`×à þÛ×)°äD•ÛR¹u­’}uP´×k±c„g(ÇC¤Ÿµ6† -!ÒOú‡œÈo ã$^³mËkªÚ¬&x¹h1¤×Lˆåï˜Í;ë–Ü;¤ÃgIk‡‹²,*¥×Ë!\ýX)#”œgRmªI^2”@ë15!‡»3BÙ·¸õó­oƒ\Ey—#Ãë|°çꆞ„v±Pá«lµš{_}o¦¸6Y›¤DO)±!"~„'eå¯D7… ªç"‚÷’qM¶I 6;oôÕü’¶Õž¹»ßµFk.,Çx 'Ä”0‹PöC‹NPžfÂTÈh_*1h>†ÞÉõ™…Šíµâë¾H._ /©Õ!È¡Ö÷°Í2Æï,o%¹®ÆìR%æ_›5ie“Yücø.³pŒr$û˜“HŽËÂ|à³ ë«sZõ‹Ó?(š²òÝdŠì5 eq†ûÀÀ¿"\|Ìø|X!ÃRcÂò”’¾NÑšHÑ*oÝ~™2ÐC—.Z­Œ‘â†×É.÷5 Êü¯†PV¨‚÷ý"ÅfÆÙ ßìqL ê$°ˆ†ÓÙk­!b‡Ófonô ¦Åðg©‘±[€ÈìIBLíäïÅ<ã÷”Fa«S*ŸØÏñK¬‡ jI´w¬Ë{ù`§*è#€~Ú ²`ƒgâéoÙn:bò'j¥y×Þ&:“ün˜áç}º”#«æŠ—:JŽiKI $á¾7«Ù/{ºúàÿšÓPøoÅ>}íxyŠÛÁÕmîÞÛµÚlWíšvK¼•TdÝk% ½a¤00t£Sᑽö#”ú<4ê”Bƹ­bueÚÚ“\çä—|`|/–” „W†ÊìT(6C Zú¸6PŒÕ¨P¯ëè5H›Wz”èQh‰ˆÃ4K"MmªbA|&…­&}pE½Èȱ5jÚÊSžáDÓ3ß±¥ìó/67üŸ­×M z›§§™4µônÔî?ãì¥aÁVM¾Íˉü’N›ÚŠñ:¬ÏÀ«…yÿdÎË õ³UùW2 š²¤ãœ2M×–/E‘O³VœÀ„ae¨,ÆŠI+“˜z䉿Ƕj§–PC“ú„¤¿ô”â‹+òH´®ŸËú•¤#Ü=$ ”™cÁÍ¡ã Xïué&¿å W+cGñÑíÀˆˆÞ=|†Ä¢8©žÝÅmM~"„¡¨8K~ ’ºM:ƒ•×Ug?em›\Û•†-ìOŠpR–Å/]ë~óŠû¾^ý«—± Td²ò¾8»`ˆšêÏòéÜOºÄôW¬e ÉQ—³ý»ÊÝãô˜JŽ5{*êbW³hžê.x <ä|Ø’àÐ…Uâ gÆ.ØUL>ûû”ýŽik÷ú26ÓÔX䃮\(¼ÿ1º‚—²_Í@C€<õ P†8VX‘¦Â'IÌɧ°Gü€­YÞ²ÕëÔš‹=nÄò<¶Š±4èÇ׿wËÅ:9´·ˆb¨‡È‹LJXØK©pÏDÉv^êó¼(/=Z\XMÂF±W©‘ïï1.^ÚàÉ#ÔyO:¶*ÏFý3¥×þµ&y1¯~³ó¯BÅyLß¿—ßšP›ô*ʃxˆÊÓÏX¸àu‹jg[|¥¦ƒû‘ldç(¢ ˆ@2ŸëŽ=s_èàÉCXqÄû!]>j#T·¨#Nöm,F¦¡H+GͨSd»ÑöÞ‡ÀÜ òv¿zi°Tv‚ÔÜWGXôß2–÷Z¸ xQþ¥˜ˆtqM´Ž£ˆȾ‰0á±u{c¹Ò(ð—dõ»IX!¯Ü8Q3^øÿdÛY?¨%u ±D%FÏqÖÙ`3Hë; Áf§›LS.o¹m¿ ~ÄàôDD½ëö>TBË` ½ÝîŸ\û_œ_sTð&0ÐAϼ¼ßâ°Å c­~ø”¡u@VC—m¯Y´ÓíîÄ-¾¯±{Ü‘¦?žßwP')FÚ~¡x7‹-Fðnf¬{ýõJNWÑy 4Ž4éÞ÷€†¨vgbÆá¶×hÙŒ£_ÁR h|³âÙ°dsQwjî‡_£2Ý4»{«)³iè?€_E/ä*ûÁÏ~Ù®œeòFôX JŸ~jÕ †>cS+ë«¡c|L;R¨c¯ÞjÚŸhVÅÖ¤e2ÃREúÁ†ï$@’X_Ô¤Ÿ'H°ÿù¡Ýð' û,=Ý7À9Ã+0îÈ[<øœÆ$5MD i×cvW}ü“ënÅ5™ú'’Y1£ f–4ºã טx^Ó¹æÝIÅØ„ÿ h±A4‡ì˜o’‘fnÑBˆp£™}Áù/ê1ÛzD£1R‰_ï¥Ï¯Xp.ʧ H vÂ3TÓ²[ë€+ÝÆd3{a¿5†yT„£þol??Ä~ßüãP€m0܃/m˜Fä+[“=G$ÉJ~³¢ò.qí8¨=}ý嬿ºß>/NVA($iŒì‰t‰ÚI)¯ 6 ).Ðpþ7–ÜÕ:ch@rTŸ¤¶!·¾$b~Ø!XÂúéš<°×Ø¿Ïå²5Íõ© ™*<¥#ÏXžgÐhœ{Ló¨DO‚Ÿžcò2ö<^³­‚^!̱YÅ úf÷Ék{ÎjTÒŠ2A% ë–yW*¸.Í0Ð{È)vpI-¥åí­'ß`¼U 20YŽÅü™lâxÒ³Òàƒƒpw•¸ÎjÞê=àüͬb rã¢/²>iÞÕù¯ËéyÞœçáÀ«òÍç´à‰‡õÖ’ðÃJc]‘GïëÅ÷ó; nU+Ï>ÆH`9|{öC^’ˆ(NC²>)¸ÁÞ8s;.þiÊéjM)sãÈL9R㛌¢} ï§h— 'î#§œ<²ù”ï¹m‹Ÿ ÂpóPc_ê³8…÷áÑ;Ù´/9ÍgùôšÎbëì NéDwÞêú])Ð]£DÜ”!Α™7ÕÔ9î d¤ ‡Æ ü¢>˜˜9KíîžšZ×|ºo¶‰d3ds ÑkâúUÞÖ¦;*Ýý“nVÛh¤Ÿ7ÈÎ!fkT9)»NfAçY_M=9ZC 1ݦ¢ÙꟋ{”¼Õ™P’žJ—Ùz®(ï>)ß•Ú2 ñ0\ÜÞ³¡àI6oÿ`!Í0 ¬àÐîÁW¥]IJݖ¼ú6oÛŠÌÊz ‡ÒyW¯y4¯ælëÌäÏÉÙÆŠO0Tˆa´y¡GQ}ážKlWiY¡rË $oJÕí'Ûvw€š_3eLóü±Äü2qà å9~¶c·ýñøÐI®æ#üŸLŒ‰ó÷ BÍœ0ÝÑ Ž-Fº`{E2;oÔÕ,pŽXM ÿÐø$V¬½|+‘'˜— L[;±Ù%eM#Ùó2%‘•3yü>Þ:«¡ìs«²ñ~½ƒ^·ÊüƒÔx¬i×÷³ÒtÌnoÜ‚Ÿ‚ÿŒØ<‚·š²ã`ú¯4½éXÕ·ýŽˆaÌn°}«jóFŽs‚G¤5y~@4ø‚u#…Nv=q&Hî3ùo+v'Í[q¼,¢ÆE ¹†Ÿ8«|°æîÈiòt‡´î°;÷ -nÔI Æ8ðOyÖì¯Xß7vº;äD"ÆÒŒSv1•}k»]IJð¾åâcZwh ÜH&ФÆö¨·èÄia¬òÚÔ—Gúá4`XóîëÛ=+AwŠl‡Jµ}zjøèñ!›ô+s¹jÊʉ?ðúfHsËÁ‰\°\ŽRÒÖ‚Œ7ŒÛFx%º.åù¨}L3è¸L“6?Ít¥õb9;l$$\À”_~R›}"DØ”:ñ–Ú¤°ħճ,Ÿ´öíf+h]ûöç²8Á«ƒÖK÷¨! ,TlÉG”‚äºvʲg®NP#• eV¤­B<؃Sš†€eªø8{ȱ:¿ªV–i‘LSm7QK[^‰™¡C}1ÅqŽaÞ?wmnI“Ú*õ5<$ðO*_,ŸXE¿ï¦¤Æ×ï‹E5áWò4ª­§w?b;Lúj±5Ÿt ³ aâ@µ»LFé„U–tËkPMW“G’FøÝa˜a~í\q©={Éú}ôï)êßS‹¯GédßG V„{ÄInždžœÖçËrá G`z,”Yœ>ÉÞefÈø}_Čϙ€ßõ\û|ãF¾„õÍø5+ÖêH‹B]JSC„‚eËÔ¯£ÕÛjgclïkPiA`Ø©ê‘ù½&š‚ lT]üæéá*\D–Ý#§ÒÔñòäw· ÉFÞ>à—»š3L¦‡ ø3–Ö¶@+Y ð̳\ûQ\·ÚÔ-–+L®Hº`?ýÒ8€$¡g4Ñ’æ—Þ,ÕÃn•¬ìd:hSí¶üsÞåõúÙ7YÚÊ_²_ıw>åO~‡Ýá„îwä|5f‰³| •ºd¥ó²¬€F*tæD‰µcƒí§kHJ(´àNΜß3šRà¶öæzúS¸Ÿ à£"]`=¹A1‹$|}¯Û8ødWÃU™Öw¼Úµ ÁU5yÃ÷)ÍÒ–ÆËmyÔÚPÓUäS0±àÔX¿|.LJ†¸œ´_‡äŠœzaÛ ØWt›-o åðùK 9%_úZC§"º/n¼6»Œ ½Õ9Õ+ð²2=uç´Õœ—PZwÈ‹d2o? ïÞëªÔdß 1æ†"ý¦ÁV6ýh,âöG5JMžßã=Ά%6¢Œçý«§ˆ-ø¤]œêÙn¦P±ä¦Wê‘”šl´†?XÇ¥¤±b7$<;‹¥WÌUýžk-ºWv–T¼¦x§Ñ¤¼ËEÈX¾UêÀ¢;€Ê–¶i$w³ŒÎÅ££Q|.—y7*f€$ùŒ%š\‹’ÜG_.cˆ¡d ]V#^%óU ͯD;²’~ùì#³ïü†T;öž‹Ç>¹/_§jPtIš(™êxY=ž‰¤v2ï;lñĹ3N[ÝYå°²õVŽì8¸±”.» LBAŠ-œñPt‰Bmg«¢•Íõ‘•;‘n ­š(üï×2!/¯ìRŽù5‹V%Œ óúœ¥Qýƒ*ËóX®ö5Ä`} :î$¯GLîHhͼ */ÄïwŽÁ¥Í/ç´I^h¢%ŽuŸ®å)M2K$ Ì/AUT V4K%QxAÊko‚aå¥mУWBžÔepùU‚QÍ»Lqf¡ËHî«'™L…È‘B]wb3Ü×òçÜíúa~e9Ô/‘À¯þŒªo`Ç‹¯Ðƒ@ìxQÞy¦Ž/'Û¨-Ñ(7ÑË#“ò¿¸K¹ìŽOƒsu±ƒ¡æþ¹…œÆ7Í{LÒô!AìÓÁ‹WGG Þ½´sKÇh­ê«ÒIm<Ñ0-^øø‚*ôý€›05;vêS®M~Øå3€"ç;,Fªj¬m áèŽ&{|œT%¼eÔMöÜjÕRÄ–ÒŠì}äÕ¿$/çÔ»Ò ‰­ìC£Ú67•_eêdzZâ„wÛ‹)0SJîùvû±Tj°ÿʆf‘ˆÕl¤ˆDçg?&)»Éût~<õur6ìÈŽN–¯Wÿ¾[´%ŽyòŽã¸YafiüQèàå³1ÙMEU_ú¯…¼["ÉÎäŠ9bÍ:¾â½~ž3W2¸˜$EØþ£fQ#am¦0‚+ } ¶5w©Óæ‰%¿*ËUN“CRŒ‚qõÒï5.‰9dž„o&Éq2Õóq„`±f_Ž‹é c–Õ$k[|¬©c|oÄÎ~›oô†`ÎÌ,X™Œ éÄC ãüt ÍCÎC>?Å2/Zvñ   'ÿÍ÷ ^göW¦û[+*A¥.Ãj‰¢/Yˆçα=½ëÞÌ:R£šQ]êÑè9Àëãü1rûèo '×£X¢1‹Â£ÂçAwåÜàæÁ’Ú¢èЧV>+Õ×ì‰çÁé"uÀ@ÿ.¢TûÚ–3бÃ|1Æl ü4ú+ÛTSç]ßPͤ÷’¶zRŠ1„ÝæôL]¿`3‘˜ox±dÝæ;„—¹=&9“ûØqRz{']P™M(fHM^Ø>z"“MÄzœfÖ't ^£n|ŠSUî¾8îF«!·Móú‘1­‹Øæ&üüAšÄ;¶u:o5¿4ÏËâÿ¢ ±g×k…b³Š‚e„T= ž3äâç.”ñ"²!e#c¡ËÀ )f¹@—Š8úu7&ù•0²7úÓù󭀉Gñ‹§³·uZó¥ÐÅDZò~$®ÞOq*â)Ž£©1ß«í×&*ÎñÇØb,Á?¸Â³_ê㟦ç!Å…Ù(Fpl\MO¥¨*gb—o5*GØSH‰/·d'ÿ)Ž–½Ó$„=óÚ²Bö0c“a õŽë'Þ)ïP%¸ ðN€ CéѾêàÂ)™ Åœd¦½¡¼_çûÖ¯0HéšHs/Û ¬Ûɺ‰#nÂr´c{zÚvÌ–Œv€­ w˜°õÒ÷6Ž^ÎqÕ€…Ë8êßÙ\ÙÌKhG„1ëcnß×ôþ×ïgösÖ+ZjEáIRbÒÂZÇq¶ «g>¾~¨š«¡> 9C“6¯DB|‘!uaü@Cú›â(~3H`¹h^/âº>Ô…å|LG¬r¼×†xÅv‚ ¶¡+ Ïr•ôa]‡Täѯ•þYáOz™÷KY±aª;ç¬Äˆ¦’¼}̽ó?»"°§6<Ó3Üoƒ›2ï›é~Jæ¿–%¹œœq38¶ì8É)™ñ.ž··º«¸‘ãj5‰Eòœ_°!@û%M¸GãøV*«¦g¿g ¸d¡߈ªÖ†™U“±!¸40T»†CI6^VmKB]2V:–ôú5`ó7iš·@´á–GßäiãSš ë#£(pÛˆgè8Ç‹Mj"¿ÄÙŒÊEΔäÛ™ºâň¾óUñ_’×òP^,ê?½‘‘˜{X‹FWI™ð‹­Ãí±Šf7²ÿJönÌç"‹ÙNpHÞôkráÊ–K.Š+ãmΟü Ÿ°êÙæöJuüW¤ÙEžg•ÁŠg)Øj7Äh ݃†äC´ì6+5Ø$žëAäsV)‡‚`GJÿª™MV>%DJnŠK\×꿘ìøª†Èg)Ù||!ŸÐp"c©7„=ßþÙ ä M;YrhµeêìH>çÜÌF»‹ÂÎÀ:×ɆeÏëäÁ£Ðî]|ÑJcýL;‡’xA'꘎Åö•qZMLœF&#v¥àQÍô€Ä=i)œ¡6ˆV²H‹ƒÝp3^«à{Ÿ‚—³V탇P—;±&c…@á2¨ y#Ç‚±!bM å¸t.$‹>ñtÛ(c?yYBK†ºÝÚ€‡OÛ²7jø ÕÍ*¤ Ç‚•Œø³êõãaq^ KY™'Q š‰+ŠÇGs¯ùÂûÃm‘æ*9™ëÀD pè×p²Ø‡›N,hdé­6YiÚÔyÀOR¤ Õ×GŒ3'ŸC‚„”åLÀ^Yó&$¼˜x¿"S–nÛÍY­ ŠBͨÿLÅgûåKø,ý®y ÁƆù´(=jn‚›ÈYêuɨúô'²aB¤¼çWoŒá’S΍^ÁµÃÃzª/t1‰£Úé R1²ëR ÌHS‡Qt;’ÆëyO¶I½hB™nL_À2©È*CÞR­é:³Rj’ëz´Û‰š ò½L¦q,ë Œ"…»üqCïBù›Ñ!ž±™'`9·Ê\ Ù ÎÛs(­À¢qüJ ŽG3ƒ¥È‚U,ãÈ^ÉÈî ¨fª-¹§ôQ #ÉïŒhÀÖ€¡R`ø¶Œöp¥á3öCQT»žJ–kã‹R»<Òš*²OgôWÒ Dðcvâz"mIq+6:˜|@_É™ÙfTCÄD°§&ZÐC_d‚¡”0É&¸gokŒŒ¼xF½*Ѿ•¡RºpüV°¦ôCŸvÍY,ç#,òõXVŠzÿ|DŸì0²M¿NÚ½B|AàKèuœ¤ ýOVÆ7 s›u›‘žëðö[#^kj×F¢!y?£VY#+7AŸî=îæúy·ßÒÏÎðG+¶¿Ó±+/²#'¯Ñ$’þ^Ò\ÄúdÞ˜2 âÿú3)Ï/8Œ'Éjã+Ì„aÁ',ußS}B™bœä­YómšËÿ/+€75gã¡7ŠíûͲY²@f$ó àÄC‚ e¸-K’EX!® ~L·*m"ì$ŸH,ˆMÊvGõá´!†z"³»Lƒ@êV°´ŸV¹ ‹àÞÍ#ueÈ¿õfyÐ:º«ÞÀ˜É ¥æíÙsÉâ©ä-H/D»s·ôß(ëû×´™£ k;…ï{‡ ê5TúhcŒYOòÔbù<’½7F«ô¾ ¬rÇZc«”‘ã9û‹¿ÍÈ2eRƒÚ‰KÃäñ"i¯Ž)7ÏD¬$êÜHû$(Cü°Æï nìꄚxƒ<®Nž³[.ÓÔWžCL…ÿ*s² ï¥L²ãüê‚9'¼ôH¢^ò‘›»Gö\ÿÞo9¿E«€ÛyÊ}9se²Ç´.­PÑ;nñôT‹>œró'±Gƒˆó¬jj &«j}‰ª­Ÿ ‰ðý“~{N#mÞç}˯û@“º™öJ4£ÛWd)?‡TÎw«ŠHS}Ð÷7ÅqL–&XÿÖ8Ë[œG[*DDåÏEPXoÌÕe “ é±|4ÓG‚ðtÀZª¬ŠjÑßRWË;‘?-¤aâºP…Xˆ½¬nTìx³Ç‚èôÔ3À²¤ÚsSÒ/›Sxö)öK5Ï$¤,Aad8Ëš59!§Šxêùo´ñòÞÑ×o49dß3)]ãTþIvFàá­r’ 9ïÇ•¡`nsºáº{H"ÿê6Tm28ÂZÙž‚¬áÔM·†‹;ÁŸ Æ«ß<@¤¯è¢ØWà¥þÍûý6¨mäM™”3]¢êù,D\åw¸~¥Jµ2uÁ^@¸¤Ö ;›« +l.D´[iZ‡áxPEa¨¼ãþ»‹qTçO.Wô’È©ñE¥1©ÃnŠv¾×†pŠ 4æà^ßÕ÷Š©ÀA)J25 k(Y4ƒÒ•ÏbÒ‘Ëðô7â‹pŠCÞ˜DbLNœv[‰[=d(R%ý¡_¥BÏZSo|Õo¸5í¯ôŸÐék¿!yäqù˜ë5>Ï(ÞÑ`ó©ýÚ$ÇVCªü-i_#âmY>@åæ àðBq-_B[q¬Ž &Ë‹"mÒ.˜ß×»·Ày­Œ°çõÐ7œ;yÃÞuIÍUFn]'Ëê›{Ó,Ày’rí‹#’¼zSͳŸ 2B?í›OÏž¡"a ‚éêƒ\ÇÄoêš³®m¨ˆŽZa½Ü7zUtT|Lú¡½4§SǤˆ…H&ä”¶Ïã±3,¢šLÜGC%mlú°…m÷4âL¯ë+¼× ¨1à-FÚÔÅþîªÝêÅ(»ì¯Þ¡£8þµÀ ¤ÐæêM‚cž|sz¥‘0®ÝF¬Î¥[@¨xY«„¤<æ;Éí ú>Ì–ÆÁ2ót\ïVо(¦Iá‹»°ð“9»*bçà„[ö»rR4§¥CvåQ> Fâ8ùÁŒ‚xV#*Ôcè…cÙv/:LP.uõ«±5¢VcÈäß s_¢@ºU%§v–½Žk)5|w$Ô°_ëAµxiÛn)LG²O à‰´Q»H&D&á±BW=2é9¸¦BÌJül¹øÅtpúÚd¶îé7wNx-5D`:AÉeÞíÔâ,T0Ž˜&üÂäbN>,ò¾¸˜W@”G· Ò¨õ§h玜>i=ƒ5§¦NWä“Â[áº&w­˜&œ.â±]§úëéKñ‚΄ÓX…W4óEyŽ$ˆXýÜlŒbD­á}¿Øè¥û(I:[Áª4²ªÃ[YgöèïNxzifÌ*Nlù5™La¤†ÙNÒf+lÌc3ÁÎŽáø ~½‚ŠˆQ»#›îy`÷Q /S_Cº”•6¸ 3Õí矞á$,ì9F|”Ö¼+-ã ¡å éƒñl®­%•î“4íǯ: áº_Œ]tõûÅÛ÷wLºOwe¬ÃR?Ô£F²ƒ2fD ¨1^ŠI§!Šdkú±çʬìw+(&žSŒ"+~ïhø„uO'ìùT6ÿ…rR¬ÕvðPUÌ#À"Œð ù.ö.¤vy\·‡ Èy-Q í4Ò«vc»ñ棿d³¡ÚƒëÚÑ"PªëkÅQGõ`ÚÓÕ?›Ò±3¾Q6£¾DaþJƒ°Z[>jàÞE5Áoý¢W ´”¢¦Æ¾Cä%]WÏîµAjöŽ: Xg?¸%[Ë}äÉc±âÉ'Iñ£ÍižÈ#°ú¸Z#j=x!{µ(þ&ƒÜj™€‹Ovd<ÉFÖæ;³íD .ýʯÙäØ˜¿KU;âÓ`T‚cÛcU-ŸŸÚ¾–œò±’#TkTÂë’@<ߺíÝë‰ÈÜxmS²‰Æ¸ƒdA¹lÓ¦)·ä’ÍŒ¬nŠÜ•òæ.œ9V#Ïü_³(NP3¯%8Î2‚¿dihR@m«ô„'2ТŸÑC?é{@|BüÄ£x;]û˜."R§æàv°LÀؕϺyñ„hû~Ó_ÒF’:icjAì|ê&Wœª]ÎÈeóÃMÔ Y;ëÖVà÷µÉ‘*^ÙÞl¼ÆÑ®äxÄ͵{~Ê$õ{ŠúÝ_  Êh®ÜÕ€·²ýo¬¿:&>Âî!oÏÞ_|Õ–¼†wÕ$÷×4dLlË|Ìëù>ç°-Ìü—h„‰þ5©á:9O%å4œ®Æp‘+ñ|îqË€,”ØÛG™L.>Ä%䜟2übty{¼iW¾tS;Ú”&Œ4#aiÑÉËÜ'«þ©,QUŠ—YÙ €QáD߬6oLêœ7™Õ¡l ÙK³·`ÁçìÈN5ñ†N}*œ1Õ´=ÃsÂ$ÇšdÝ”¾%²Wï°áÃϸ11†›¥£r¸Q>ƒ_P«D˜×ʯÑ×OµP–¦Ã‡3»”ºÓÚ|µ`3ÉPE šy¼’´?Ô”­Û?Xy¿×íV¿û«Œ€Ûs³4‚1±[ÃO¤÷)ªÇüKk8‚¤ÌUîô¯|y/[Ö¢@®q˜ëyÈw”¶»ø{:—Ë,v1ZzÔ:/{9ª^³ÍÒ˜û%à ßdÇj’'¸Ã{X§º9{øzHÃu-_(pá‹õhªXybÏê–ˆ1«±| AÏú´ÖF¯å˜«G‰änŒGÔº>¤2w%«Aq.’NÒ%ê¯8AÄýñ-p‘H­¶f½[+­ì•²C ÷3@ŧˆM€²¾×¬‹å`Oºlµàø?A=ëyŸ‚KDÞ )6á£%~ÔpÞ§K5x¢M˜A’Ésê8õ&~ý+ɱGÚHRT@MÞH¾D)ÃŽK시dB«·i! L£-°¨(§#9ªÜ ÒÕmÇ»ñî^Ê]41)uîÍ» žÛ½þLljýT‚Œhm’©h»¦¼&i™Ÿ"5…dU¨‘šs–ø£NdÒ1ßñ…;j¤ÙìȽ&Ûñ¼£ââX¦DK™¨Cx©‚ÎÉRô`›Gçç#ñ“ÔC{pÿ\1(˜]úÑCtce×SJ†$:èÞ‡ñ.:¸,_l‹ïðbqT(¸Á- :øÁ{fìlZ{•(hE 19@™¤TšƒßlâÔXQÒ;“ø”úBCöè.©_šŽaíMàÅvI=kDá?Ô9³9Qæy/Ô‡? ¨ Z"Å2ñ³ Æ<÷tG6§ò„Z¹=°ÖLù«$OÂÉŒŒ¹‹µ¼'Éä“£VÄ»}ÁQUÌØR—åÊ…ÞÜ›ßSÓ%×þ–˜!?¡¤ø¶Z1“|,Äë˜bÍ“†Ñ¼/·Óµ\2ÜD]U¿“>îS'å %&'™ÔtˆºŒµ Uó*ÏÙoK”/í%L.’sÖøµá‹s†µ¤èu>óÄ< ³<‚ <È'ie«w î$‰­òø&ó‚øŸq†›6Û¦Ž*×në_,k´×9ÒP#š§Õ¼ÎoõN;ZÐäýs°ðൠu'Èæ*TœmÏ·”6 Diá3™ú{; °r¤Ë{φV¹îw˜"Ewòâ‘‹•ûö½X@.8i¾ŒµÊtîèÏæÝ~ç¡eÎP+Á>‚y7‡EVòÕj‘P¢›T*©Ñ¹¿Xe8¡&ú(±sú"$“âú¤„Ø5ü1ýN¶òîßÛ¶/Á/„£\ø™—òIµ„ƒó0j¢j‡³˜g â!ü0ÒÑô  _L^à/­Ü™¶ivˆ{ü¼“»<+`bd!}ö{-&—³5s‘ áX ^B‚\1#ˆ,¥Ç‰òep½¨ ª²sŒg%þ-+ç\ÝÆ+¯5¶a…ŽU:N.xJ¦ øŠÍU$Ÿ"{ÇüÒ+üìÙVv|~dŸÂ¬WÍ}èo7j1Ù´ÛȱõIäX±7*Ë…[Mô@’ã¶Šg"ŒXˆ‘'¡eó›\ ­’¦Ê^™Tƒ'\Ì1:¹~þ‡eËâèðÕ˜)BZuuOc£åš’Û_È5ìM Á§ße“tÿTTÐñ&HÁòX-b•Å3øŽrk<W3Ϻ„ÏÁJ³Ñ -*êMÙÞŠ¡ùc»ÐåâÊÏ•`O÷†qâÇÈôYžd À¢DÜYr2ˆ=yuÛM¯]„ÀØÖŒ8¶D½ó-  O4áá©}Ê9o‘>Üû³)ê“&vß~ÜtZ+kûa$¸J&è Y™õ_n´/Îañz9Ï5=àMôÔÖ2VkÔ&XÍu<îÁ­v’TF<àöD©dÐTëá¤×ÿB»œ´Œvüè±@jˆÔûölåãÝÓ—T©þ¼{\‘Eo‰ïIÑsU%¯Çé¥ÏFÀ~6`fðùY zˆÿÃÉ'çø¾ß댶¬ï»vñí”~DÛ†½ó™þ£³ ¼e>Z1ÿEέO~ #Rbd ü£UŽ%„œmãä¾W®›h›,1=ü—€êp~Þ?Þ æ)±‡³Ä–Zú“=úÇ-‘‡Î &§_ßcSÅú‘MÍ2ÿQÛoâQ–WÂ,f {ٱķÁ™‹±HæÉž{Y2Z ½¤ž:ùXxöÅÇŒùq™·U0p‘ãŒî1)jÊÄûNu ç9ž8]Ò‹ß ™‹œ8rûB9“&CÄÛ‰q5C¶,óGíp·ð?¹½b—œ˜Óª\{)T?Èü´ªcœ‡0 :2÷ ÏQ]—KV›`K)Ö C[­=¢ì—Z—ç”qp›yOƒ»‘`+EFDØ™0ZýœO‚¼,¼G„rŽd>ñ?fR¡šd·.ä‘Éž«èï‚øï²íd¬Â0ïõÉ7ɘ^4VHà, =΋›®È$¥ÁÍÝ®vàX¢&C„¹ÜÐÎòÒ_F{ðŒîŒƒéUÔSZuÉ2¶9KÝ3‚ƒ»j)­MF@q–¹Þ°˜¼«pq­a±%b# º¼Íh V¦AO†]“§’ð+ò_*ÆW0pO!x‚¥ƒgöRà% GP/‹¬RÙ<Ù™¦5¤v³–á×ÑR#±™x=¦Ž¾X=& ÒIT­óüL#ÑL5»u³˜ú‡ù5äThk°á î»ß~銚_½¨¹ñâó¾n¬²}†þ½ñ¦™¤/—Ÿøòë¾U|¸Ò)­”!›É!Mï½õò«Ñ\èñ ǵƟÀ_ê$ñ[Ô³FôåLh×—þJ`ÕÔÇcüeÄË_¾Xª¦PÝ+ê¶ÕC0RO—Ôt´;xg ü‹ ïó)U40&ÄFóÛÛY°°Á¿©kÎûl‰ÁíYiÍ!"’ªèñö»ˆv™ôùëI8`†/)Š#ùuí±Ä­Z‚‡!Î~Å:zü]ƒQ#­ˆ­eÆ0¿„ SéWC‚.±ã%æ´<éßÃÃ’Qz¢12¹É€ÊÒWïvì>X­þkÒô7| "c´øQá4ÖD ŒÉŒÔÀZ‰¨l¥ªå ëp°žÁ<]Ïïì«Kwm`Ú0Vù}ux”úaovP*×f–*6·uù‘Bp:-'°‰`X®ãÙV¬¤à€W¿Õ’H,ñƒO½CçéËÈw“-Š?û ¢+°ušzR-“ŸþQw2ù‡·)ŠÿÄšynõF¿ øœ³o¡WQcn/ 4œÈ‡…b*¡Ž´öǽÞb)+#šêÇj™êÙØêÈ.ú à Ù~¯“ô_egPè®"Kñ{œºø¹">îÀνsê)›s8¢må, °ÃÛl‰08¾Ú$È‹ðµVIŒÂh ƒz1ü6É¥Hû”ÙV컉>%öo®´€-|)à[2ð55‚Šô—Öú9Ï–ü ¦FôîÑÝñZÓ°ª–8nŸò|¼R"aû‘ûÃÀ¥kˆµªI«#¦t;ÜO §"É´²à{Þ´ÑÂeoPF%Üù_C–|)tãÕ’1ü§O|,ûgú¯¼‰Aw¢žAÊ’Ôæ.ˆa}Uwœ¤i…JRDü¯ïWf“fÖAã†ï4[4jK†qˆy¾“¯Z-?(‡¹j,«¢ÈÔßΙ¾s`ÿ‘ëœÈÎÇê_3£}&œYP0"´×oDŨn&4~ð£Eî\¾»`_Q=”›_G»­"Ò AŠfŠ3xCùîÎ.\ ¸ÐåËa=1fó¹j˜ KÝC—ñYÅÉuøAÏXú¨µ·ôsáÙÑuT²€=i¹"0“œ‹ãuŒýf8k5!1}œǸ$¶ƒTŒBÌYæÍixÚ7ÎîM'ñFà |–Ó<æ³µdìÜAÄŠìv¡NžS܉®I"į}¸€ÒjªÏnÚ´)ùšËЈ°R§§yþð‘ÆŽõí€ š•ÑQ–Rn”ê,C†|3õÍ*Ÿògцbëz¤dR€͵ „'Y´ƒZ@2`;—®Ò*—3(šÉù—‰—Os©¾—!@ÝÚãDhìZ)B[¤-©·ÒW©m­jÁ*Vdûág½$͵²‚µ¯_42ið˜2(aVóšì {«›ño€ÇWP‡Y¹ªµë zGÅ;5å„;>½€ñžö5°è«Û…OÈ Ñp f×SÉq2M.2|$³._ÜY™çy«dªÁÇž”òÆPš&–çÌÃâø'vr@ýÿ\ñ*Íqê÷ +ÔSͼÀÊíØ¿¬ä¿‚ ´Ïɺþ7 8µ_¯2k¶o‰•iÂ×§öÕ «*=f+®X.& 9øÆé†s ÈT9j#¥B^ÑèÑ6X…e4*¯Ë¦ž”¶3²¹D\Üñæ Ä»£ûY+…¶åJfÕ¶ur%9=Ÿ|ßF‡)èTêÅàØÓ5 Á}Œìºi*K•ªàãK|1ÙÆÊË„ƒóYYæ6èØ%‘v"˜]*æŸÈ™É$f#Âq_ñéú€M4Ô¯†ÓÌñ©^ð¢‘woêÔõwÚdïþÀÏ;;T½Ê´–¥g2pŒÅ†5 ;–ý{Þ?vHBñ8 :Ç:nÖÊc m)`À$ëZ² þãs«7•Ö¨V¾¦‡…%pDtàÆ¼ë@^B¢NÓïl=TfxÎNi­n¡mÇ*£1¾$“&#ýÓÉõ“ƒé¼'G*G¬ûx´ewΖäÖ 2É6äsÚšç§ìKóî ·eÍÉþUÕ÷½¹BPG©ßÑ';õ™ êÛFב¶Ð:­‹én3ýPà=¹¬«d6郣ßOGt%û†ÔIü#¥l­ª \E$ÇÈ6—Í?žH0uÁŒÜÖ²>å³\é… 'É$ ‘3Iñµ.:³þþ¾ÚîœJM‚H—w¹¬‡°ÐÖ '5ò–Mä µSºZN,%hwd— žÚ[ö!gLÆ BJ`î4lI·Ç÷x íµVòœ¬²1aô|…|^Óqإتٗ ¥°_î©g}Ç”#µ»hY̘|µ&H$.»«Ogš4õ XzHµrÂî‹Só½cI-@°„zcS~~ÀFÁÈÝCïAÇÉß²)KûöɪY2|ÚbŠnìÚuü—TaCq¨ÅQøD&›VÑ´ µ)µ9Ò½,Ÿàù‘²ï¸BLÚŘ•È(˜å ÇàˆHzÎI›®"«ÆÇöȨ8[˜Rõ½¾örûJL­“#;­ik}ÄÀkÇ!sZ,ï,âÛÆ%J%®1#­ŠÙæ)8 ¢*iJ-}›8»ð5ëñãÏànf͸ ä±Úv–õK)ûñóU¦9V®ÑúæðD¯B¯ ‰ß÷8l½Ô,Õ¤>]°®ò>µ–Çëÿ 45.W‹c1˨h³Q±^“ð/S96Twõ¨cÉX"/?a:‘ïÚ4̵æù ›ÙÇ€uÒ·{Oéjñ¤Ö>?©UÅ^G­vY]wÇbõÔ—ÔþDëgð’ì‡6¿Þʨ◛¶üw GP¼ zXÀ$éûŒN¹ák!o/Ãeyë+¬Š›·+Ÿ)F΋š qå*ñ|MF¦\5£˜ —mC"ç¿ÒØ1ÚIó7}ùzU‘¸^æ}Óp¸f|uwý5øœ-®Pð¬ãì5z°xûlédËö™µ2úò€µÜ°ì"þøf.€Û/óÜHã¢#VSÌ>jÍ2ë™ä–u¶úd…9Huщ2‚J–ËŽqKÛB11¸Rv7äI“­ Þ¤#Žmo)u !fûÑò3¥ 8_CL*Œ`¡ »˜kT}ìâÓ„ƒD›| a°2øÛý¼OÜK²®ŸÐ¯±3êÙÇ(lqŒH¶¯)Qá¾î¼ÃßÌhtœ­w̘ßêê¯Zbwéöiï´"][vèùû§Ð‚ä°Ð ü CÏ[.KjŠÕ燔} ÆcNcôÚ_à Äîh_Îm§…ä£UÅÛýÏ­PP+ÿyHó‚Ì!?¤±ýÀm|¥¦‘tUR*°¿©÷Mõ†mÉ 5Ú•&¨ì½ÙP^Ò3°·§NDZP†tVºêÙüÚ¨©Íiy:£Â¶,eÔÃ; úOqYˆïth <”/ú¿¡€žîu?’¯h\;ïJºˆKí«ÔhY '|p”´rœßû¬›èúZæ´Tr·‹DÚ5€î§ °yÔˆá|9s=', àÃ3ÜýÁîÄâJáÜ6“c„”YL¯P HQà:aDz6€%fóöÇD´‹%Ÿ3›ã¼L.!‰+ç8DÍmKªÄ¼/\Àaó5Q“©ïLNýßyKÙõ4­Éšbm²ä©š,ÖdÛÑb,‚'+íacAç)l‚›F@ËÆ¢B³5ËLs/,RAv;ôÑ¢ÁÈY+ÙEMqºXsübIÊ>–SpŠs2ÜO&Vá˜ß­h²§Üœ:ÂÉh¨UÉÌqìܺÆRE !?1ˆLá¾ nÎ[R­ÞWYS›£°c-¸9J—qÙ4b÷³åke#Ï0k³'«êÑ¥f$§ˆÆªóɈàQ‘Ì‚6=ÐïëÊ¥\u0v‡ìÁûå\5†ªjX£gv”(‡¯|{»íñPzÕnL¸EÛ‹¥9oΰÁ"¤ïx˜\ûƒ] ¥1pÕË“.§äPâå•Ö&¨'—­t9‚4 •)âÅmÝt˜F‡örŠúÆô‘KÌSÑž\‡A懳 ^4¯)ëí Í-`£“÷¼üÝìŠq峑¯T}Âײ è®ÚŒ’u@t?7KÖ‹nZ½HLdì•'wþ¼Z9á¨X\&Õè«ñ¢ggÈšúåW¬oxÌQ{¢ò®9†•U÷öPW©ÓƒÛý¸œpòY¶·¢Ç5âH¼ZàÒÒC PG¤ù `MMq"ËÒù‹OOboó®’ž²uþù¼F_ EV¶dÍÁ f% Ï´ÕØýÉ̈ÂK¼ Gv‘ez LÆé.øVXé7²a6>Û·qÿL¶š=ûlƒ(îáG¸†æ@¯\ ж«Z•ìZ®•F‹_S"…ýbK±þò›Œ?Æv9€» R)¯l+ÑÅ›\9’·6¥iúоÛîm+ÁM—܉?_È¿ÖîèûÁ‘ºëÂGF¥Â9UùîµÿøÕ;»Bm ™ï_row4\®´ ¬A U•¶³ Šlæ«\õ2¥†¶9—l;A™ÏjcwG$kɦ‚ ýeºäÊg!Åe¤ šw²á¥Û‚9Þ‡–97?ÄoF=M \uÞ¥P°Ü×øÈqÇ‘•xî2ûÇïpz®ú‚®,bkA/¥´O­n„×4R¶ãó‚8JŸÙ—5\[nš3¨ÏJUW |'àz›ÊõÃ` ìÃ0øÊ@®ã â¼tÌÞ] §ðfÅšvìïN®S6ãÎiÊ#+œyÁ‘üò®ÑÔYÕ%Gð¤éT»KØd—ÝÕúNÚ7²½ò†Õt÷Ñ‹Y¶‘dãŽâAUòS¸X ¦ËòWü5d°®Å¡ÖX‡¤®D[õ óîHõ:[êĦýsª† ±UMŠá-8£Áƒ…xŒxû†´¾³KΔ㌗ªXyf_/ýɵJ³’¾&»Veÿ,ÈgƒZ‚X5Tn½ ¿i½¬Çz0Є†®y¾ŸÛç½Ë4ËŠÕ?8ÿOÖ,Ï-œDˆBdÂØ–X#¾ûšÀ»8 ù¶Â¼gs!«×éû!hÇwB ÅÙX­ce¹ZƇâꢹÏhͰUU/¥òŽ=º˜Ø‚à+×}×HÌ7? ’»"Áu‹ò`ŽÚEšÔsDcSk—î¡Ñ6Ffj„ŒþxT,h…É<&Y0¢ :µvUv²þ-¹v…àG`¦Qñ2Ø8 ›T_œ¼#í’2¢¥Ë£`}4oÊ@ëvöÑÓpký‚!z½·ŒJR:9wÓÑàÒ¬,ÊÙ÷ëY­z‰TŽS"•á)¬Ñd ¾'9hA²32OA˜Hž—”~c_õxF¦Øž@ŠéžÆ]1A„ºWèć¡&O*X¡¡ŠZeoß$ƒý5uü?6J­ï¥…øÆãþ¹§xŒSÛí`V~5}„!E½"W|EïhŒGVG6zfEÍ𹆤v‘¾WÒ9=Ux†Åë–ãHLÄ›Úó¡_§X‚f‹‡b(ïkñÃDæÚù |EG>¥¤OL¨ö²f]¾nÎß+<]ð7h…¼mQüÄIð€ü¸8<@–GÁýÚ©Áa›ÌüºÝA€„9ßlRO‰Q7ŸÔÝáãä>˜u-¥™oÄîYëfê穽 ò>!Kn°]ôÕ‡ÄÇ‹Û r#1–¸“PìÛQßqVdrY%F§ô¾È}ʪÈqt-§Ù(Š„%àæ C1(à‰~ Šq¯ÌûH‡ž¡s›N)±•¤ÈØ@ºdBJÀ¼N°ãfß^£!b9ß„Ô òñSŒÚ×/ô½hБ ÐýP¤£ÜHE«&}4Æ´ œ5|pb¤ü©y&3úå—ë¶ÆÐ7JÛ£&#aÚ}VPyÙZ2ò`øŽˆJ$&§ʖ÷r‘In¡!R’,Þê `}P8gÎÐAú˜ÍU…¯¿-.a²_)<ëwLå€ö–‹‰,™´EÞSK¬½1ûu ûúUÂæ†Ò3Æ=5ÍW̾ øƒ…ò”•™‚\]§A%@^RêEñ(ÍU‚}UVËp¶&Û|¤Ùnð$‰¤ ¿¬óft‡2¸ ·ßx¶µ}¥ h{jÉó°Æš¥¨œ9’þSݶhSJ !»à8ÉGf—Ò1ׯûàGÈ—Ýpñ,Ü7óÜHÄhœæïœìcP4霵 ™º1Vå7#—‘û’,ðØI Ÿ „ÎC¬8‘ýöÉO·Ùd! ”L?Gm³•ÒÞšø¯[ÛTm²ôZ Šdf¾â×?ºÀ¾áØ–`F»øÝVaž†—JàÁÝÉ, @¥]ÇÍ8—cMQQ:  ¼'û1”¿] ÁC{+5ƒ/g°RN><‡NÀÒ€÷A¼µ¹§1DgjˆWp¥²¿ò½ÛÆé&7¦@çyðÍo‰²á~m¿Ý—¿õhðg­pŽùÊŠ¬.r©ú(l«ÛË$J{KTr½›kç%n@ƒÀÏ]ÁÆÌ²E(y²‹ð› ‡ VºÌœ·ý…A€+mdJA#1K߉õ;–m5öD¾‡˜n:ƒÒm'65À½o¦í*ÅÅãÑó\ˆ²jȆ¢~s%kÀÀdbvËØ½†x»>·?þª'+ï»Ç–÷õ±>%ÄdNÐìWq,ueXpªÒ–ùåŒÃï~V¸(¤vAQÝÏ&4¤ålû2!‹']Qh¼‘à¬Éò+:ú)ÇÛQË~kf¥]—~Ê:tÖ þPô„ä†k ²²ZÍG‰%¤æØâ%¾þL32‹´ŠBº2n;?ÍOöÔè™SvKÉt ‰•¼ä4èGojþ@þmöobå¿;*sˆQÌÑÓì'ݶ'äè5r÷ÑOÓx¯Å‚ø”ùd½»a¨—“pÒAoN02’Rà‰&¦ \9&‡KÀ;F€ž0º~’+:¡è¡]ágX3‹çÕý!Øu%ì#›wµPƒÕÍŽšâRCÄvž½1!ižä:)Zí[° ·ìiÕŠç©\µÖî?–ü„³¨jD„¶Wü¹OUð~¾ù*YËU> V:Íã¡zj+Æ~~¤S–"IïÖ´¨G3Ï%q¶²U4†Æ[çì´JÖŒÒÊõÜ´Q`Äç°)-Ø{?ónŸ|•° MX«[à6Æ7ö$¢ ¢nÉœ¬ 'ƒ×œáC0֨ͬ$èñ©åΣ\?RøÑUñM|!¨ QsQäÞª| o®óvׄw5Ï$ñ¯DYÃÊâ¨.AhO%CZ²XöÌ¢péÑh§ƒÓ'ÞÑcÉ–fÈ «•ÙÑä2ºÇ3Æ.ˆ>ÔÐÞÌ:ñѦÆdKý[°o?4郖u½üùXô¨uMi„ÚJSÑÂìË:8îÚ® ¾ÜPëÈ5U> ¥ç¥óv&¿>>_u“ù\ûdòRš:·öe{Ózk ñDò¿MLò™Ì”ºþÑÚ+™¬T­¬– œ©´­!Fø+ëR…€œ·(Y…+~„ñƒ¼Þ廟ŸY[ÂÎV× à: e]ž=¬w>ú=ï£/ú,pÍr&U ì|J9B'Ûâ…_q :_qšшBoŸâé¬ü&U«Ã¶q¬º [æÈ(èè±°Õ² Ùw »Å:~~¿GR¢¾\¸¯WL®ØJ ]“ d›êxô§üìZLsOíSdÅž²°¢åþç‡ËOQ{-«s¦‡a|ïXà$œ0Wï΢lûí½D&çâÿ@%KŠ>{øtŠ™x[b¬½±C­qyU|h²G˜LÁ¼)VÆI‘äé{CH¡Óé{û"šà!I̬Qn'€à²ŽËÑpŸÑV¹eÇ~kU #ë¾ßÆ eÇ2bƒØ@Ç4Ø©mÄ/ÇŸŽmïv‰-4U*%‚ÿS$ý ²9ÕžhÁ¯óV¦Åî¶vÒœ¼è0ïÛ]‚Rd(”Â{,Ÿj4ÈÜe˜­W­ªô‘Èoc'4‚èØ¿=NÐIûQ«IjÄBò†*%)¯ÅË^·½;EGŸ÷÷\ÃroÒW}Æ—lY…¬‡›v#›Eû£G‰P‚ý’¢w»»zTÚ”âæyécv5i=€#,ð!…6²u9„lSÚбû?|½ÂùàÍ"Éml :«)e+õT.•²NÒ¼:¾ÑÒL]°fß53RfãTcŸÎ±M Í1jDT3¨–ÔÙÜÞš·äˆd¢n qŽMÈ¡¶, Gf 3Ò|Îò‹·Ê°Žˆ·gUÜoŒ.qG9G¬ÃB†’MP_)<ݲ}bOª« ,{¼Èpƒ¢½B¢8–x™ðÖ =Äi{l$„pñÁ,ûG’üÖØ•"¬ò¢/Ù”†=ð¡Yñø+N¼ ^è§F’¦BUåç  P£L0JgwˆV"¼apöí-¶VÆqÆh¸ Ä.[]â b-lÐÚcñc‚Ò¼&ðÖ¼\ÕûNÚ•Ððß%ve¾[¡É»ò|Xô(ïr(„_ÓÑßEÎþ¢Æb¢/솒)òuÞ?ýª³Äk´©xi¶»$ò. B±9‰¼n¼7G/ÚèÄÙ‡ Ë&öÞñ„¥;8ý¹pÊp…5-b+hÏc#{‚§­k³bŸIðÎÜy_Ò?àv§'X…ÎU!^®íKÒ|üRÓÙ²©»Ã±ÌÍSIѲZ#uÏxÚ¿hå–ëò‰ºWw€|”¸›%Î^ó.ÀëK‹êf±äÿgåylŸn"MÏ‚”Ç—±Iø" rråâDz)Nr[cVñ1&+Dò;ÿübx7IC§\úÀMb ̺ƒªßØê*âT̗昵ð›"Ôô>Ä´¢y›hãRT¼QGp%Èûzœî×2Ò[/8ÿéÊÙø äü?ãß{º€ž`5˜Áq³I Åiy ž.‡|ú/ '”l;Û¥£§ðš•¦%l{à4–‚Ùy$ //òGÙHÎÚ"Z·É#`–Cr´9)/ýÃI8ÒUÔ‰Yâ´_>…t‘‚Õ9$׃l–¢AªßiÅ"ã˜zÒôRÓÒOÒ~Ð%3sâž6z©ÉQ½ýÎ!ê«þNÛOT1Iaì뎣ÞCtæÍjp: ’UpY¥®AúZzÜ¢rÙŽvuÞ²ðç÷±ˆÇûþ!m„Q›Œ jz/€]›’¯«SV`Ê{³ ¼Rt‚ìá>ânfØ›EÚ^{¬°qwÖoAKµ=x{Ëõèë¼ 9…'.þ§aC¦iXÌÀÿ·<§{ Ï 9o‹¤mõÃ}`K$ä<½vÔ;·ÔÄ® ©ã—€§…Ôâç‰üCûá/•Ò_!±E¯ Á0 hÌ“³ÖÕ&ÂZ‡¼WËR¥GbÔ]³~‚ÍŸ£«î7çDÔç4×±°ã,¬qptºÚBç[IÇ©^îj©%‹VíçÏ™òK{ó¨}BøÇ^3¤«,[8©6jÙ~o}_áà(2ºOYKœÃT%…¦«pJi£ú(ðcÆZ ^€_^HÐÁ‰¯Á4yn¨!k¸>Ø£"ö¬ãÏ9í™$f<›kûÁkhXž‘Ⱦ·"_S«¬}ä½Mf§å´3 0’7¤g¤Z•'_Ä hf mJ™¿1'‡Ï‹ÚÁÅŒ™=G½;c‡¦Ú”×KàÄMtWú7#íiv\ç:IÆz»Ä%³ó{vrû2ŒªwÇ’¿ÿ3¡);%…]É2°ÅcÈü8³Â·$}Žh7V±%šd´¨tÇžf/F 8Gó?«þ¼(ßç½Nišm45'yÕ<œÔt™šÓÌè`‡íH(ëì@ÝË8¥F¨¯˜Q' LD½ÀŠÿì |)){rz;˜…õ>£²+¹ZKòÕMy_3JFÁ~¤çÍÚñF¹DEµ{Ÿr¹âp„4ÎQPsaqXŸàG-ç+ÃôåR°ò·*°Qí]t8¡–R­Öˆ9‹<ñLµ·É"r€s‘žoÒ,¾Öt‚  ßIê3Ùê…&ÑDDnÏz.Q(õCaÁ‹b¼¬Á¥þ¦ÛmÃEWs8°¤xÞW¹ž²o½˜£×ËIž£åU–æÜïö›;£Õ•…6ÇÊÖ$*qÅú2ýæД†ƒêY'HçÝ<¢·‹ßˆåm”ÙšÊP¿DðéàQ]½a­3ÚͯКÊ8™ÚJóÏ|{ CNu½Ö‘:H"4¥PBýï3Ãíæ2›e2ܤ’(¥†Ømí·4øºX€©ÄŠæ!Ѥxæ+­Â!ïvgÙÂúºÚÊ»„âŠOœ½%~ÆŠÀÊ€ àÓ¶Vuû¨oå¢á¼eaÇ舋wX¾W¿¯5iAúU*íµ„:G°ô±Óz§ƒ-ûlCs×0ýDÇÊînõØ3bèHŸ±Ô•”›VÁßëØŽ§ ¿ïäÚaŒ”+¶Í~ ISvˆ¤9µ"žû> »²ù5¶hB%Ÿ£ ª9=ÚuüL–ŒÂ(.—±EÑR91»“ öÏ©„ém¢9M¾»âýžÿyõ!s0uX7’>à Þ(z; ½r©¡‚iî­X ÚDÂæõ²n¢k~~ÆýŽm¯þ Ÿ¾Ê:›@-Ìù:nà Bàýýö4cAxÇDÃ_†…aùqx^H% nI'¿Å "Rö\âÜ,Ý´»žÖš‰Ý ¢xÙZ.iQ&Íûæ‰vSýÍû„Ûé‚ñ¬5y)Wm¸À4“ãQaâe‡Deö ;TèB‹šžÓ3òãÓ§âcK†¨µ¬xÞô¬&HDÊÉD«;©â{ñû …XÈíP>@Zª›‡‹ú©TyR6œŒ%êüú.rÄèàh†x^¨à ¶0Ei!“²Ãão¢YÎ1ÂeÝËÙR:@NǪnŸŠgt‚¼eSÜ£,ƒ‰òÜQ~QbÊ»3ñ¢ìM¤Ï@58OæÇ½™ÅêÄE\ aîÙžý~oÿZ.BEiLò”ѼY³frXÛ¶0oâïiëJ ÎH¦ø±˜ °Ö CéZN”+GˆàÖŠ€øâÏPÛhoAÁêË!¸m‚oš1 y¬†Î(ÏkàÔY+/â7R·BèwF$8Ç ©ß“•Ák^‹§÷Ê=[nŒ#–,ÏôöjÄMæ Šãï¿ËÇUpywxkÒ†¨„ º7­rx笹‘KWyðïD\IôYâ ý3në›áCx¥:Æy$Ï63fa¾:‚6 |ŠNŽ*d›z¿€Ò §ÚÐÅ•Z9ð¿-oF±MxßnÀPz³IûMŒ€£W+§‹ÄZ…0ÑÁ„,ߟ¶jW1˜„ e™wŸdïFqF®ÈŽKò“qañ` ÷£V¯™§°‰$nÓÌÂ1ɲAU☄=†aJ5ðùa¯Í?ÌU¾í?”p`‹™“§“ù–»uµùxñbںؾˆœÄoìãQ%ë¹Jf* WÄîýúèN× mÞåwöÖÖÚ ê•îµIÊöݤ‘zò3³a¤yßü«—kPÁ.Ë5ܹJµ?­6AØ~ìœÚݦ@òPœROMǸQ";;'>¢©N<½J”h4’Æá;„±Í ·QvË0F­¾PðÆ›à 彉š~DÅ-|b3.I/§™¶.^·ŒÛP.né©?É¿…áÒ`ÇM#ªo¸ŸûKh`xé衯í†mÏK]îœqÒ ŽRÖíïC€7Òž2“÷)H®ÜäÚ*yF>é†KXÎâœ~éM€6ÁgEÖÓ Á&òøßªyš´`gQ¯V†[¨.5_ycÄ(É2l߯TÛÏäCé0.#ÃŽÞ›OÏÄŸøÒ¬Š ÿïÈý#Ž Oì=!ï’x†;÷´ ìî/ZojyyXÒ!¡yߤ&¬«àL·vÛá¡u'5W,Ð(n| ãíë›ù:AµŒB­_毡߽7¬1"ؤ$lœ ÙM Žu¸Om"ž¼_¿ïÉæ4ÉÊ-O‡†4üëj82!ô(㞈]I5ØkÊ㹞¡Œ¢Å$Ô—ÑŒ-œc1îÝÛP/jêeñW´¢Á_ÆpÓ7`_ŸIž(ÊÍÁ•CWo¯.ôUz5¤YE¿,e‰.κY9Õ¼m¬U8™j¬_Çâñ£%KÞÅB[} ˆq~)´L… iaźJ†s`@s]‘ü‘55ì®s´lª />Ih¨XDüƒtÐV÷’“ ÃO,ûSÅ#T‹Õmø™°Š ñ¯c-Zdû]ÚáȺÆ}…çËõc™Å_·RÀ’/BP9ç=„—¿z}2gû1fµYÓŸw—\Ì_~Ä7+òfô¦è{üÕÿBë¤AØ/ȃãó;¹6k¨L¸Yä"û2¥v¡®ÆF4Ñoûµ‡X~œæ4ŠPâK„'YñrÎîÞó¨¿: OxßMXDbq2ñ#üÏ{ʺ³•ÕÇ»TæPÏÝWP­¸¤ðuU‹NY´iãBQ¤LýT£Dðîà:ý;¯ð ‘–fšå-ͧ_í÷ :‡—II¬ºœO¶ofòe0¦»!Ìé?„NIF_‘ß&û(™QT³Ó(ÃiBç+eÃPJºÂX7ݪY"ÇåÆÍšˆpˆ w?=Åéñ!µ™¿’ÓX8Ž»SOåV±z 'ß/ÖYˆ2É4Ì€Áäqj´±’³aûÑNˆ#THE½à«Q¤›Ô´Â{÷ÒÎ-¶Ù7ÉÍž–:Š¡%KfÞg…!°Ëõ** .†BŠ8XC)¢Rþ±¡‰‰ j"_Òº&É5êf>±H·Ê2&}†°t5’õNÞ'¼ŽÏˆ;52;€ÉÔA FìéD¬é ÑÍ1Z¡Ý ”‹kÂ3}-Uˆ¥žRVíSíéàkçT¸Ð“÷ÃqoÉ– b.—êuÂy¡X5ñÕÿ5É¢µ‡3À"Ü=æ…ƒ¬{)ð~ËeŒˆÊ³=¹b·|!¥·Î^#\¥Aƒ–=%G¤ùºŠ%ùPôw0d¯ø;9­)üCtp .ß7ðF,â_€Æžú¦œèNʺ,aA‘íjàI¹È:YD%ßXïæöŒ&u–ll­¾Ë_’ ξ¥”#”Xa=ܤà0±Êê0Aôže[¼ÌUŸOb~$ –‚-éçp71fº[=0C½A)†ïèád‡êÓs´C1†0ZŸbô’¢0<¾7>²¯O‘¥3ÁÀ†0ò΄Ÿ¦s;I¾iŽÕ…ïÿ'#ÈÍaõ±Ú¦<ü‹O ;;ú©[æŽ@®`ë ¿ä|¾± ^?’mñÔÍÇ⇊¬F@žîÙ#eüÀÐÜoJ«ì‰ÁKÙÑ…ûä÷Ú}Žraß)†…Q´‘=GÛà|e[K|0ýŒ4¾ÖPŸ£Å!òfø}ÿEÍÒ“6]c w5oÅöîØk'W«®ˆ"±^MÿR8Âûµ†&×¾FüªŒWomäY=ožýñ‰B¾<Ÿ³³8JÎîj”{&±«o庱m–4ñ~ŸãK'òv{¸ª§pJÅ$'ádî³äŒâD¡§Rç™êîÄcï°…F’ÄÊ,¤ˆ¢ËøAN 9vgÓ> )Ú&çgAnÏòÜp®£©½°ã„¯¤k~©ÞF¶ÉÆ~éî¡…ýJ]qsJ~mš¡Ú--‚‘#¤´Þ7R@ØØ½åTNNO¨;Ê”òÚ”0êÁ6DTÙåhˆŒócVÑl08%K–ðr¤öƒRÞ])Ç’BuݳuY\­éƒŸ]¯)N‰`]‘ûw½Øˆ<̧û¸‡šE‡B…‘ ,'#×ñ6ôfQâ2Ãtöª^´]R„6\—u¦ Xü^ƒ4¦žµõ‡³ÅÙ_„¸«±U‚Ƴ÷WôÔ¹Ö«Ž äÊŠ[ÆR”5Kµµ‡¿9÷Ô¾”PÝkŠ 1:6땦ڻ·Èn¥A¤+³Y{¤ÅHØê9 ŒÝñ£Ôß­8ÀäшÁigÍž’ãMÊÌHβwx¢·v³z°ò_ãÍý¨­¡³p"èþ'k÷GG`’¨)-¬fMÔ` Ïb®BUkVEê'%R ïKÿ ,„µÇ>!-þÒ“xywÐ} Œƒ`E¿5†Ú“Œ{0/ïwÏg:Z{,6Ñ7÷)»µ5˜†üÊUàsî¨=ŽMÞ £ïp 2‰wvì§ßj|£og¤ÏÅù€6;~Ü®õ s0sYTN2Æ›Èz¨°bügˆÌ0)¥ŒŽ5ã°Çl怔[Ö(À%g{£GÂüµ®Ð™•q–ÅféÆqà"}Å(G“h§ôÂA8}ÉžÝžŽ‚8áæõ"êšÂÈe®ò…—»´³æ×szõ‰‚l¶‡¾;½/«©r“Îå}Òß%›ŒË’*)lO9a4Ò( ŠJ !“·d{“XÅCU%{{,vEá†×¬Î–ı¦ÿ»€¯¶ÃÂúÔ°ZkÌæò~ç&±ý={&&½öÎ"¥£Ú{F¼Ië5¬ lš¯÷•¥ òTIË¢÷_³ñ*¹!­†+*ºÀÑßoð8˜A…§ZâhfQÍ UÌþ™ÃSWbÁÄ0ã›Ü›I;´2þ¬–=%7€Å©9©~¼Š4”¼`è· :-ãyÎáÍ4(â—l îvÂüé—"qìÝ&|¤¸¹(¤ãœÎþ}Mò9 ö&²ø8 ]öpú o‘J5æÞ+IJeî•ôàü’-òL5©G¬d×…‹p4…¥ Ò%ð=EÌÁcÈ|D‹G|lÝñÃo»h0™H`7¨sDi%ñA‘lÂ=ûñ£uL‹ šsj„í©¶¹yAÌFïÁpT­[\óÊû£ö—Ði;|èC·!†ž^cÔj°@áܯèœg&f)eej½Á¬Òåw¶¨oää¡I‘t££ôQ3}:—ö_£ù• "šv; ËcEyÓ”D|Žßþf„EúØF*Y4çË#s7%yÚÇäªC­b-ñ0™ˆGðÏÆD¸OTãß0‘Lÿ”½ôî-ØEóY“¬SݘVäVÄö‰ÓÝO:Íw‰[EçÈ©U„ÑožýF)&€ViJ2Ò“—i·Î¨óÊaI¦Ò"–p1ä#à²Æ˜øILÖ±­q2=Ä.»¢z“Zr¬$™Ú…šâP[Ù˜P¡GJg²ý£‡}„Óº%eÌ_`µˆ2ØÄÆß–ám¾ù(W6jϾ×rÑ©½éàøÑaÀ±Úͼ ±¢)ë3mÁí­Ç¾œsD ó³LvŒ1VÚÂ_~–K^Š JšÂ73mOX¿h'Wg–å€rüêÍ «ïf3×&Ò¿Gà“\óîå8]m—F/±öÑíÀ™r’ú^1~æXh’«œ–x/<>Ðà½×4È0¾¦‡ åákm<ËXËiÓPNó„@Èw!tãB¼??;8ÑŒ¿,(|PÇ­/£ÕrS7—4ê¾"¼(D$— Eðàü¢{pØ%¤uµ½¶ûŒŠÏF /™ÑBÚw½p›‚Ì!"»ž+ƒ /Á¹5¡ÆCT+HÛé䳕ٹ(óak¶ì÷Wb {àÝ3*œ†sœRDÊI-íË–qkP03†¬®&HmÚ?¿È(¼¹‡º3\êxDMQ¼Ž'f*T*éQfEúþz#QÕsÑxœÈêÉz”ÁW†þý§’C²ÒUÌÙ?]-4…A½¹[™€‹gˆ=úDëò¦õwMc'Šæ“4½§O!¶šjWNâCÆ…Þz'yFçŸÙ•‡ÊJÏž¼SÐ7Ìó;Æ6Ïûª‘׌æÂmÍf"6J‡É àÏ£ µ9^SõÍ×® À l”Ãßóü2–my§ùêÒ‹ÖyàHËÄ©F¶ ­/Aõ5‘<¶ =ÛM§ˆùéo•ràªFÛÚ®Úà˜Ÿ 0+bµ¤¦^°ê‰ã‚a#E©œ`?sËpÔå$ÛÇ›½áŠ56Ð /Fç 'YTsâMef§Ýɦ`ÖàY8äo!³7 °;}£©«I4x(cdˆ «…ÖÒT)6]$ßàÙ0›“«N "E’FRÉûÙY­þ¡£:€ÃÛÝ’P{O±ªv–d¹5‰n»àÒ"-J Ü«íy·Å*COúJᥒFÔD¬9lEÓ\>½ÈÛŽHøþ&„“©Ûr"SL ò;iÊÓ²ZbÅW+–÷g—FÍRÆÜŒû%F`S>3•cÁzp¦¦ƒ;zåªô¡ÿÂh®’S!³hgh³æñ¡h|Ï(œÐh\m ®žE·1ý‰8LjFB¨N¤VðÈ éª O_²¥ü!g¸µ@õ~g _߯7=gìÚ7µ% P±fÈž"”MJB'Âá6ÿO9_SÏkˆ­›pvƒ’ë ±÷¸êH°3=lž/O[Eê)Ek²'CK-Ð×6Æ|çŠBzìö˜aÉ')ȯééüp5@¼ý:K†Ø ÁÊ+®¤N>Yíäš•;ò¬+;NZ÷žýÒšº·Å²f¬Mœ.[eš‡ÀÌ¡ÓÄvHkd'žïÙöÜ>êDa"ß]j¾ŸæÝÕ.!>þý0¨.,³ã÷”ðOëèýFºpr¤ÝI ¬€‘G¿oÃû}KZtRfÐhüa|Þ³•}½5DÿÂL®‰—ÚÞ âÚl|få"e™jÚö[¥z–Ô‹gþb箑jFû¼iÂPkûa¢õXþ=û᳜™’PIuêŽ$:–¾$‚ŒÚ¡…UA¾$4•çp å°Ž¬8RDþØGˆ8 ¤®pĦ±JìOWâ°*R»’(¾¡-žÄ7Ø/oGlÊ\ RIUC`k.ÖÛíÁ}Š »Ö kìûoêY‹ö `À¿…Á%5oÃ?†‘y¢73ö ŸÓæÊiIE¤M¤°¢B­Õ@9ð.Ó¼a9Û“ù˜lÁD܃Ѕ’¸Ý ÷¹ÑéïÈþÑ–¬°Œ‹»ÄWÕè¿ÂLv¼åÄ-n^Yx¶?@<”Òd#Rã¸Ìuw¬jÉÑ=ֆ܈ŠL¨ŒM=…ÆVÈwCö™eâ›Ks ûÓÕ´2`œ“^ÙmyŽç†C…@•.†Ší„%¶Y~2èôbgŸòëÕ¨F™²-€‰fx˜grSÿO~ÛãÕpâ•/g;oÕ‹WÖø½Æ^óÜãÀöÚ×Â2 Tt_,SM¨ª6ñEjßýoPÄ›'Ô7ïuÿùn—”òËæ¡œ™¬“v¾Q?¨ý`{Á†Eüi©—¦êiI¡Šg»Z«…ލY ì¡´ØäÚ£ˆ5Uq„³=!¡ùË$(‹dë§ý)Ôµ¨†ÅD+¾bGB)©¡-Âáfk_­E\–Öj t뢕Wˆã•3r2²M\(ì–Ï,xŸ•ÿ„Áî2e,ªù¼OÇÖ¢~ÑÙsY¶©%U +[ʃUæ³*Þ# §böí¡Φ>ÃWÊw(r—¨©@@'¯€+éi`¾Ê¯’‰ø_=],²ÝiãO½Ü(•v’þ+CT±´sdj^ÛÚ“SHî&;±41~2†Ä´HÖÕ¦¥b;øCÞˆ*\<îK™¥DŠÿauT*ð(Ô 5òúõÖ­8 ê¤Ô7‡°ÅQ?²üb§½ÄÍ+7¼ØÃ6úf ‚Ã"§å{þ&û ¿\y ¤®Hö  >Ï–M¤=¨Y {;ªV»ÚyW–ÁÙÖ3?2eÐvAǶ‡ÌˆZ/ÅÇ¥MŽ_ÔÍx ‰QcæÖW5”øm ü¥‡1{!¦E.±îZa,FF;xåT6T¯¡å£vgšøtL2ÝÎÙË `Þí0õ·¬÷…?h‚rwÃúÏó>m7ÚŽ;4Iå‘Yç—à%ÃàÀ©(v8ÕÌ¡EÙl$j® ¼c/щ»Q` FªòTC…Böcg‡z:ÙãsÎëXQ:%ؘŽ{ëžFOzÑ÷~·¸ 5žy:ºP8~ãtˆ™ ?§Ð^%§»f€DAu´Y `¶¾Q3^µ ;P^+–·ª¨NÅ„#ÉùÙêÀWywºÛ ú‘_|q80òþk9ä˜%²&âü*ÖöÀ7ˆÞÝcvBoº©ç¦DOÈ€ïqêˆ@{ù’Ť`Ù>†Fæ?ì/4-ƒ÷{_2àë7r$™zÕ”J„ <£=p”…L àÉ8ê‡ #T§Hq J;Þ ãÏ‚ˆÏø:‡Y¡ª/ƒþRYØ‚ ¸ùvʪCqí”ôNª„Pµbæg0«ûlüJ4¼ŸK•åÅÅ£ÉÂvø+ž… ³ïƒl¨–Oà˜_òM¢.^ .À‡k„Òku5ÜßýK<ƪ#Wª‰.ðbÌ/ÃüÆt*Ô’8ý-Âo'ŒÞ ì¤Ñhˆ@¼’„½u76gŠ^Ëø?Ј(‚!Qc±cEkñ k´!ñy–ÊA¹~Ì2Ôe§È|E–¹VÚ.®À¶²—­Ò‘ãðT½5:œ}·Û÷ªû¦±%%Gu¨ñá# '÷Å–à^“,²Ÿ ?Š?HPF<@´(ÔDWùÀpéÎ|—÷±¯õµ2 ”,(¥4àÉðäïäÆkÃEÇÑ<‚¶”ŽøIN«S ¹jíp]ª!wʤëxCܹ:!cL±Ÿèè¿Çšê­,6sùŽ!Ñͪ½”µÈI¬÷í>ÔÉ(TB.²mª&òÖl˜!ùlG·IßHpS•GÌkï¤ïÿWþã—ÛTm¨ó® ªÉþÀq÷Ëû~=°ÿby0wc–9g{ÿÆæKÿ÷ŸV€Ž/gô"À.ºM»Yëq($1-ƒ-ͱº$Ö:)·KÕÂquûâ‘?°$¿ÚlC¯n¹°ÃÑØÒL—ß9ê6¼š Ó `žlÔËç«–¨€ïP—W˜ô[Š¤É —Ö—B5äNû@[áí‚õö»n c¿JâyîdIí¯!âb{ü´ÌžÉìùVÝö|ÝB– • ‰¨¾ ç¬TT¥á»8´Âxh‚Œ'‡“6`<ã@p°foßçu¼rÍÌO8J¸ê!°Kï+mý ]#‹cwš›ÿ¤á‚£~ >:#¼nŒj-*”Ḅ¦Jí}u×Q/ªç I¶ ךñWÄüã5+:Ãà4ÅsË6xºýPΣ+—”2„"@†[Ǿ£,›y’ë^¸ÀIkäH•¥²} þÞí6+ŒBü7ŠXĘÕD xáü¿ŸîK·WUy¿hSZ¯Î[e£q1*ÌY€:ÛÃ# »VÙÒÏs¹®Âßúfµœ8™Y¯Yž=»¹Q¦úÁ€ÃˆÙî,Ƶܬ†3È}ÿƒ¦ÂÑóg]¹x³ŽNå/KwÁüµ²FºÎfRi¡³_;Z ­£|X!q¾¥Œs §$Á. O5 ´4_Ï%Œëöæ¬Ä’ŽVú ‘L[EÇO˜9pÕ„G¦TÛ÷EaW<µÝ‹XÚiÜBÚÿÓ®G¿ÞУÆâÃIEáç0¿s(F²ÀN‰n{wØq^‹bd]x.f‘hi¬Î¢ñ×Z5¦œ¼(xØÑ"êÕ\J“hW©eœxF¬(éþz)ŠGx…xüàÁ1Ž~ïI‘ûmÞ?IŒµuëxýà“¦4q¬6#œëáÉ”\gSW-Ž…5JÁ¯¼#÷NqRóBÂhl{’fúî%GJ¡v¸™w;Ëåb@"‚L ÕXçd¹ÈŽ%f°©AS'_ÕÞvômÆ- Ì•€ÅØ ÓP¥;%J’û.Ó‰,ìé u˜k©½N¾÷ ,w"lÍõ2Æšpf²u<7û–ü»vÈVœÐr÷”œ)~ä(9ãé¾u ¯N5”§¼s%J™Ýe7Z¤q«ÃXÖ³‡øŽX {Ášk¼Õß²8³c{ª?pðTu)ï«òã{fI@/òV&WZNÀµiÀ€òí^Ä«Qޱ \ÀEŽ<Ô1¿èÄ]Þ•È¢êɺÆìÒ³ÍÓ„+$3ºÖ)RW'Tð|¶E+V8M$#íð{+ÊÒtÔ¿ÕTb)œL?¬ZikŸ„d…ùêà ¸WFz13e×VÊÞ-IÂÀ±‚Dè=-¢ÔšÓ°‚YÎä†} ªQ­Ùãìé=ñ™#5.ØÞW7MmD#äBBšp^Bš9<»ªá=êìï;¿í—ÙÂ_S³ÕJ¶Tã–@OwW]›ÿ‚Y=êLöÏÌ©=jââ,šÔMÔ°2rNä<¸ÆvË"×™9—yÎȆ%!;r¼·!MÑO½Ñ´ø¢ùª.V¦ØSçdP®ƒw‘Æï8/¥R+¹à<}·« VQVb‚MvæÛ‚æ)ž.6Çlt™:ذ˜Ñ(‰O-›¡©Ë1{ÇZLã_äªûAb¿Šë|õ5øoEDµ+O=fÀ—¨N‡ä4W²@&,¶TQñI˾ïJ£n94‰ZCƒ[K!2ÓÂKß~FbÜŒh%†3jêdA—2Ódªf¡(nǼyúáu²ò[­},žá)+æ^ô@8EG‰}®i4ÛVé8«é©D¨”Ú/Xð8gkj§¼ ™Cq€âÄïÆì·ôþWñ_“ñÚÃç­˜Óóe»nG¡– ÉûQqpO¬Ké #ýlfþÉÝ\(‡]U´\õ@mØ×˜Òù‚åöTÄê ÍNÁàra£Ëû¡=ú%‘I.Œ–‘a2¥Çbs6g’²K1–Pݰ?ÖQŠg^ø]ÕzÌ>‘[N0*3ÀQqÙ±¬• ¾ep ‹ÚñN—”  ò´¯¹_9ŒÔõ±ÏBñe2”ÏÊsvö•ž(oþ^D¡†ß*—²ÑÒPÍ{z¼PÌÅH6Þ9ûsýüᦠÜÁ$›rLeÖ²Ï- Õ¬Xo™¡çkh™j®+$j”»uD×eÅâ eèfÅV°ÜïÛðÝÔ˜l¿mʨÍë‡ûó—É€8à0 'èMÚñåï­7Õc¢ä^»Ý ÙbV9c¯‰G€-ek›r¥Ÿ'³þ„mA3M€â¥Õƒ V_rnŸ¿:¥Õ“âÈ^ÿ’œ†ŒQ ŸôzÉû/7É (D€¤"~‚T®:"c4 Á.6‚ŸŽàñ¼“6¬™ø!,/·QCÓk…T“]&?jƒ|·ùkï?£(✫ew?´¸XíØ¿"T—ûèá$š“.¡åû àt?hj_O(©3jü²è¸E·¤ÿ4âä2Ú'~u$)9‡‘¢ïêú½Xþš~»Kw%‹‹E³û­ëfì£ñŸÃ;ªOß5Þ Öª‚eÇ(š…#D™q˦úíºçoÑÖ ­È!tÙåì y»¤ñg¯Rš£ÚüZJùà×"ev)Þ<”8£Öûù«’/IlÀìSûYA)WíóOó’̳O‚–jXÑk’Xë _ʽâtÈtz‹þ“»<Ï¥ÀCÚ€¶gœc0Ëaôgyî% $÷ôÒÌ.5–*i9#Íå`x) ÂÇhx¡BÓ8ž¬´+åIZ\Åáy΃r7$Áof—;vÄôu(ð—_>S€”ž€J48†n¬A¡w{–Iå…‚`‰• ÀŸÁ±" ®í c‡ð',ä˜ Î?+nÄ5ç@<Ô_)™)fHÑ/–ö j;lžØ?Ó%4£µI–n»1Í(‡% ÎÅü ol0–ZÐðî\÷«¹¶HÛS0“tÓ0í·w¡ HgÇó~/=´Ay‰loh\£7({rw’D׬ÑgO11Mð Qðz ÷Yç?¿ûQ_Œ¤àqe0.®)~ç:¨ð¿èd®ëWXiGÕÕ¶&FþÆ 6ôxÊñ>ÀêÔ‡Œä©çÒî¥<=Ŏyfû#<]˜˜¦²“«‚tPkE[ó[}Åw¼YJP«-šr,é¡êÛÓùç­åŒ„5 }IKG/fŒWÉãÇxзSóÀÀêNT“cÓVÐSŽE’Ьæ]&œøa6|™ÈÝ{ýtZs8ñªRri¾é¡PÀ7†Ñ÷HÄs]ƒ\¹ Æ•…Yn#gÖGVÖÅ”Š6¦0™ÆÖwUæ›fÔV†DpW?†eB%Äq.*£t¿[adwM=&䛘e)CŒE—ÊžZú—r<ŠbÑ^õu$Tåž•þz$'¯²(Ó76G‹íGØIÞÂ7¹c矼mï.Š'~8é$¾)¡¶Á›J"õ=õÖÉìÿ]»/gwª7_>Þùß'?üßÙÏÃÿŠþ×ùqqùê}‹»?Oðs÷­xÿÿ–þïUò¿ÉWéÿ&w½ÿ]wþCçóN?ù¦óï>þñ‚ÿ]¿ò½ÿízÞÿ@vö¼ÿ»&4=¨rAµðÅþ?ýY¥Ëàný¿ò³ß{j‰3uÊä‚ÿÿçÇèž^Ýý¾Nõÿôgh”kåê+ΧÍÌÿ)?ü¯åÌþ{•ÿùñ9|ÎTß)ÂÿW~&æÆ¥Oï|$ò¡ÿßÏþãghµæ,€îa.Ìÿ)?¼Y¥]`Púöÿë*ÿ}Ãÿþñù_ Íÿ÷_þoÿˈLï„?¢Ù0îüïÀC`ô>Äÿôû~ðÇ>þ'‚+6Âÿdt%1WÀØêÎÿ¾Ìþ_¸y¼X4:dipy-0.10.1/dipy/data/files/fib1.pkl.gz000066400000000000000000002735541263041327500175110ustar00rootroot00000000000000‹8L#Mtest2.pklì[k[ÔJ³ý>¿B@¹ÙL’ ÓrS@.* èˆ¤»DîÃ(àí·Ÿ^UÍÞêå¶Ÿ÷¼Ï9g2éKUW­µª2öºY{Ñs´×ê©Dþ]*ü›¸vô¢§Ú2­òȪû˲—6[…Û*÷Ú¸šÔìÞÇ݃Ó!»ß*‡v?î´·ŠV«8­½k•vï¨ÝúhÛµƒ´ÖË÷ÕöÕzgD­ý¢ÇôÔÚÏ”ÿ(ñQm&®µÃí®}zPÖòZ¯ßŠê©ù!þ6¿þæØïi´§¶°°03(kôòSš!j/:›'Büï|Uþeª›Œoüçø½qcÍ“\•ÞÆ¼lžþR™6ιv3?ðë‚i¯¹Úåg»ÈžÛ[ø§|…Í^gùF×§)ÿ!;õŸ¢Ÿ?a™ß_øÃýWîn$ÿ2ô y¢„›Üó‡îmuÖïÙVÿ×7¥½<ýíäçìærk^mÎÆ…ëÜÈð _¼ÚÍ<ùoqÕ9+·}œ̦klÿÊžwœ—Hó+FèM|ds~…ŸÔîû¯Ý?aÑèmžHã_éA¸Vaì9w_üÍÕæ¹`3pKû¹òTçð›m^iÕ+ÏsÑaÝ–­ÿîîÿýc¼­¨½Åž§÷þ_Ó^uáÿ´¦½þ©\N~ôx¬â••¿ZÒøé—0Ç¿¯òe\vtùê£ç]ûÇÀKÍôûQç-tîÔײõÆßμ—2þz¶^jÔõBáÚöÿ&Îÿ j_Ëj˜?ôæÕ³_K|ð™ìÞxóÊÛÀØóæüuáˬs™yçM|£~sîÄ7õÌmmö2óœ{´·q  òKíüã<þ8Ã¥ÂçÊÆ»¹\¥s~†¸‘yQSÇË_I~qòë­ç]»Âð,›n¶úÕf¸`¯çîëò+]jø?Ý~CSnyÿæQÜ0Ân¾µÿþvåž·ÅÛ/-«Ué ëÿ-%ò¿Úë=ö%[ÜÐ_4í…¹ä¢W›ô7†‡õ®iû¯Ãþ¼Ðͼù¯˜qÕI/Œ•Û>Ô?«Èëlýš3þ!yn;`¯á­ÎZÛ½èqE»è©HYÛLk½›¿<•Ñ_Añ SDµö¦ôïð@ÓO„TÞsÊ þRù-‰áWÚ„^À.³Õw( VýµÂï¼B_0yí/áC¹¢0ôØÎý?Þd‹zË‹æÈð~zY£9È]ÃòJÄ–O5/jÌ›5oÔXÐ}‡~Î_ö€¬¼{\†±J|k³-^ñ¼.ñ5&SÃø3¯'·=îå†GŠrÎ:¸çR‰Í×sÁªªg‹¥Z›ÕoÉ*¿¾ó;ɬ¿¯Š&ü@ï)ãÍ%mûß¿6G‹;;žõ7y£JH©*"·<§¼çcÍÓy ùwÞLÉMŠ7Sº×ï¤ðïKç]Z%“zŠë¬¢jÁ¡(½ßòûxêoØ͇™…_BD~PYм¿¼:ø´Çš«+·ý¥ KÔɵœ={xÃU<…É ôçõäÅ¤ÞÆáŬõ„} “Œ`G#(,En§Äþ\DmìÙÔb>;¡ï²ÐÅq\l'aŠÝ@{dÄöÞpùxX:·;þM||ð[ŒŸ vâ–q½¯à{NSâ6Ì„^‹‹½q_¾Ç^dl†xE4ØÊt@b¿/lÒ~ÿ:¨%Š:{§€QoðmêÛ²>üWåX‰½ ܧp`wể±iÄO½É·´H=@ÍéGË|®9nÏDX±†.ŠwkSdéârÊI•Ë~XõÍVn Iä|ßÖE䉑ân;ª}ð;ÉYUÉ^ü {V7ë±YNvëW‡ó&wõ Wõ®DÓ±~t£rXï÷¬Ü:Ü…õ-’0Ú`!9òbø—ãR ‡Ø¨ªálwº ÇiYZîÆìÝÍp*Å›{úîFûôé†ûeÉ[¶ÐbÞ8‰–ƒ׋È+e•½>kªUl4B”æ%ÂÅTǤ (”è;þŠâ¥èÅÄ™^áÈ©ápcѰuóDiPØ$I`Q>z÷ًĈôÐccç>¾l`ø4ŠRL#8WŒd~E›bIWŒpT ”æúSJ¥ž5[/hV»€ƒeœA«ÇÚŒBÉ›<Æ©øER i4Ûûp:|‚É\¿á˜VÉ'Ì#tp.q˜¾4u:®¹fÓOžñy \šil¥XŸ8À>°}–`œ˜íÂ"È_™hNzYÇTPàÈ"$0¶]æÍ注FÇß]#A‘,²®¿œ-ùUÁß%9¡_EoÚÏé|6g”ë"<Ð3]:%£šÈ¯A4¼(Ì-O­€ÛL97¬ï®3Ù’#×"Êêzá1ŽDj˜d¤—¤{~Þ;tdnr!ªÇ©Nröà+NY /¥t‘—0„߸)eOR$ÁTß.aüf˜†LŠuŠ€6ø¼ÈçÙm°¹¬öVõ¾‡2ãà&S­hþÂ{®+žå‹úYm!U¿‚‚sõlô'¿v˜ª$i0¯õî2ó>ÅV4®@¥Îyþ”øùcHËúwÄý6,‰Y!¯‘WÆÍèwìYò|þ¬¹7£?/3„8 ²OÎê—Üî )šYÝщèqæÎ¡Ï ·æù8rç9VÃï:¥®€_†8ŸBÔΡĊìx‘8Cí¯¾Â©€yœÒ_˜ã!ßÓ@.åÈÄTÚúIˆ3 L`@œŠ«[`y[æ'݈ÁlN÷!ÅÜa{âr° —œ_ç Pó âå˜ ¨Mñ¦pOà°ûRg –[2gk«D«¢Ùú´|SA[eÝzPryR‡ÄpêsHÄh\¿›LfwÁ8t™¼]l#Kh¾ˆ„¯„dæþ¬Ì»f¿ ÚÙðH-7-Fn“õé'?gÿ!œaâGÝØ+P##eP}…‹wÇ+J„i|6­N¡nüÖiØ_*êV!gyÏ'«ª;¸ì–‚Ú5ùᔾÏÏÇÒ~Âñƒúó,èvç(î“h, S âJìOâ]гKS£T0â8‰,¶j$À_Îfß½úCˆ«”#f‘hÊ nãw]Í]±ò"ã™5øZ1}‚akU,è5Nª;êÓ‡#` ‹Á#¡ˆîé/+E1ÇI8Ëø ¶‚kóÍnƒŒÙfßÊÜÕKœy} ÑAg_ˆ=.X¬YCjžId;°7í¹¡C±œ~²8$Ç Nm’Ãv¥3Iaò÷žÝ›/ÁmpÀ>¸TëÏA“e¼#Kõ èËD›8Ïò²¹§™7@Ý&f˜’Õ#}vDnp´‘éÞf+ñ˜óa$À+2Üx’1Ü ×_6HGàH¾>"lƒ†ƒ‰_'î²³…Çó…owNY­õº6 z.­sZ›™@…€’J÷âZž÷ÄŠOHÝ!%xB‰/9q‹Ãnþ•¶±ËÄU¡/}áê BCGKð”mqŒø°lë™%GBõ3 ÈØõ%P4:€Ý¥˜ý´Ã¾$/•ú}æë/SWŸpð62ÜZª5bÄPÍ£Q——£ˆÝΣU bjNž‘ž¨g’wiÔ{š[~CiÕ¡˜²%І²èúY5›˜¼d›{SL¸(b¥çCƒ¦+FCxô;ÉÅOƒp,ÂÌ"Ý 5DUîõÓF¨­s¤S‰Tú±€É”•¤²ÁœtqT[ÅPY%/)$+ì¿Þófh`f*Ö H¾¤ÛpÜ©]¥²¢1•0•†«øC&bǹ¤_s@·ƒˆ—õqcY l(‹l>¤ i¯`wq"g½J7«:‡ Á \ÎBüåjp-—¡´Ä\¨¬¨y {½‚a„2æ>K53± Þ–¶ZO`¾È-ÖçÏÕŒ8­ù³J2/·’yäÏ復¥>‡Øò ‰U…XAÐYªýæÔ.q$–zV8L‡PH¸„¥Gj`¬eŠO9‰¨§gÕ)ðÁT¥Ç³(Žªx˜}åÑ‚k'¨*üüWðÁ%T!Õ$€Ô&è&xP¢hs”#DÁÕÐ_á73âTÔ FWé$ר ×ÕIé!®Kªj¿ô‚hœøbÙÕ¥@a%†hÏÓÕ‰&ÕꤓPXV«£`_œC•l<ÿ /à‚‡*÷™[UEÚD!äAa`q(è]zqÖÃxÈ5ù´Þ]ý&muéáN^”Ä’Åõ¢V%Сí›@$³)„Ï×p‡"q {ÙY‚d±Àsƒ:ÝvéýÇjð„’`€¥Q”¤wÚ¤Óý&º‚°¼¬wƒµ„:âxɳÍa”;Jrúç¬2?.9^wË!MxÚódçùÞ«»€{›húëÿ@EÀ¤ä~P’ºQð 鈧«}°¶¶–9hQJ“®3I?F–´;V9¥ÂfŠêG³‚°ôX{ÿßUÈÇTQ…µ"èò„c/WZgÕ“|e²EL?öÞ‹Ôž®ÁEƒ%⦟daï(ýK1‰¼Û¦‰ô É<àˆàPÆ)µJŽMúszm‡íG`Ú”‹?‡,‘fúQ`øÊxX ˆ’H|û2øÇòüés¡ZÔ§2Íì ²‡8Rü2ÃÓ°®>ÅÓY$/¥H[¾»CûißGõýMé¢LdŽ$ô!H dT¼Í >£¾I·Ì4[»ÀùñzXˆVéÃïÉœG 0Ñ•¯™úN7¾&¿§%K ˜#š ªš2¾ƒtREk‹°Œ @ŠÈ‹ªy¸/îÐÃ8ÜUäÀ Nj¿üÛ=ˆ¶:@J‡EÊPYª¼#÷BBÍù¹’?$¬¢ <ˆï*nô‡6† 4ÁÓ‘ó:™yÞ©°<°¾~¥ƒYJ–n;±\þR•ŸéUÔ‹ƒæðPz&tJ’g=›kú5§V•­°3•çø•¿Û‘*:ø¹œíÇ #¢E"˜¾Å;LÖ¼€guß3.‚¤g¡ü++9à2¤—ñìcä`÷Ê6Œò™°àû‚šï"ðÈ x ¡J©Žû‚z#‚œC?Má÷EPÒÄÂù]d;oB`Å3? ºû³Ÿ±³×pÍ÷%}°Ñâ¬ZÒöË ‡,Q$5c¼j8\á*I´Øb?´Úr°±™¦ºêÃ|èO!5Upè=;öD6d f„MÕFß"[ ¢6›¤á^kóÐfÊ‹6ê%Ï¿6e(\Ñ!!$ãÇ¡?ª6°ôO&–; ò·z½^ÆšušpQž‹fS ƒ#I¥£ø²jM~ð ZQèÒÁÆÒWéÉFh*שÑ3Žx:[ –gÕÐÑ{O Ô.r~œäH¤|ˆÆ™HÇ™H|ÆÕ§9í15Ò˜£äÓnB‡ÓP¦*Ó¬Ò¡í¡ÅÖYOJÛ«G[óÔ™oÁ+Ä5¡Ýœ˜*}K»táÙF6:”õ©³"ßN1ÓT‚ºÔ2„‹á€ƒ¿|Rôh†»<9e’ñ[iû9Zuê[èL·Àê÷¹"ƒ–¯l7~: ä+¤ÿ8nåæwzL3b%™Q±wHùÛ‡zy•½]%$…:õì·5¦r¼§eИä è, Ù‚,´ùÒ4èÒáØê§ÔëÌè ê²Á5jTïí| Ý pUÙðÀ«tymä yĬVˆ{:45Ôcnòá°œ/Ï>EjvýtBÿÐÞ”b5´¡T±g¾°a¥,¡$Qô³ 4šŠØàÅ0|WŒž.¾]Bªh͘ø/âý€I>öH¾ÐÁ±á‹$ôÄÕ*kWÌ2qP&E/Oõ…ö¡#Y+Љñp­ÌAñVœ¥­&?öʆuH›øÁ`¨¸n[g•fáx=”ݪxÚ)‚cK©a Öµ¡ b¨¨´Wê}›ÃˆÊ»8ÓÛ³À¢|ÜìÉä#ÎE¬MÓÃà 6¨SCmð±Q\Ê·XX @͈Ò.rOÈ=»+Ì6ÔÀÏE¨wœS›áìÇk)×#¡¹Ñl?`Ü*òÅ:Jazfœ¡¬¤ž5HOTX~£ª­Yz0P„掛¦Ž@³‰Š#µY‡~‹ x;ĈŒ;CÁEÑQ†Z 4’‚,|8‹#¹£_3ýÒÃ!üLïOðôðïæ‘"¢ÌÛ,ª*«†–¤&/iÝ(޳ó pü€&j,ÍnAZÊ{ð"~ìËÐ  à©tú óeG슮OóƒÃ… 2ó Y…ÒVèE8äœ ãW¡Ò#1ê?D4:whÓ ‘©15[/u¨Ù3Åð‚TUTCsÚl2Ђ­«ÐÚ®¨>löPK?eR¦ÇUU5RÑì#óÍ=”ô†x;ïã¶šÊç©Y€ H¡‰³' ¡H¤ç òO|Fqž‡¥cà s¡«²àÙa³M…¼\ M}UŒÌêõ²¯—Ù"ʱ›hª¹mÀ8C}ܬ“|V ‡&eaý­ï*Hzú-@} ÌgÅÕ›áaó”:­ ñnžá«yýSyð,èÉ? W†Ž“zl¶2ƒ€«út?Çu»èI=q…IþnàÞ›F–8p1õ»e¹È`æcµ 6¤»ó 4Nâc©“¯ìð p¡rãð‚~'¡á\ô$ø„“»/ˆ¢’[$“¨Äéy^ŸÕ‰÷ÅÃûüŠ¥qu„KÄí0•ôCESÏHr¢â•Ô‘  >ùÆöƒ'œ¤d—[Ü4Ÿ4¢;oŠï8 °{ã€[S̰”¡N~<¡×êŒúxÑuKB) YoRÏ¥'´ ¨£$XütºþPHsÿÍÝfk2(ƾ4Tö¨x'Øgf€ 4>Æ_—ìÅþ8þÞ²~Oì„…á0Y¿‰ŽjPî$r¤ ˆ÷±¢€BJ5"Mö`kY"ä‰î@®‡ü€ÁËì×ç¤?E•RëéÙ›!1‡ˆ.4€Wf« Ñjæa #ñ/ ýa/ë8€íjÛÅNŠr5ñŽ /è_ŧÖI¦°’ŸÍjP‡CÉ2C%ßÈÜ<Òˆ.ž <¾Ã¶òæ7È5ËÅÏᦣ¿wp'4B¯|IÎð™íºnôB®ZeÆáƒR_Ȩ•sSCγSȘê±bS¼ÞD§á³ƒÉ\Júpú•&€°³~Wj4HÏq†xU= ¤@À #?&àï<Ã÷‘ãÅÏ~NÛpM <ϵGÌW)Î_ñé+={¦ú&Á/K²Xa~ÍëRx mðhÉ5bÕXlYUfödH|‘ ü‘_ÚôÂ/¹Šôí«i»ÿI– ª‚ÂÝÒ?M1fu½¸#±£áïýÇO°ÔÙ &±¾Ž”¸b$~¤K—ß<á÷xÓßhïuIǣśöEä¿ò/6W^Ecjb°áÍ$%,Í7˜ã÷> ÚGIÿ\<ÜØÂÕn½é/-¼nÍùuøQœ Q‰r¯ß ¯µ¯ÑÑ_þSÚDúã刺x‹hœ;] Y4,ÈcÃM’-ÁŒ®"’ކ!­<_· y„§_¡@¼Loæù’ð8oðü+ Ld­ÊfmEÐôbq÷7a¨±úJFáa^›¯+Ý®š¾p}–Õ‡XïU¶¡AV9Ý=&Õ”Ík F›ì>Rÿ‚—eÅʹp¨—Àù›‚1Füý¬X‘­îȯÊ!*ý;Èp ïüåÝ$"¦,[›¤*W-^å„*‘Ë /Þó¨0¹&¹cw±)ôrãcBß;ÚÔ迉¾§ïåÚrÕîŒ]^š|*g¤lFa–Šzý›Ôu‹SdwfãOšú˜lÒµrLO>ön G‹¸‘7«Ñ(OµYIºŸeч¯0øí©»kÇåŒÕå;¹ôY›ÖfæXŽ;ÉÊÄíãÔ¥ÍÆýÞ9ºÄ"×î"ï+eµ™Íÿ©à‘-©e–{ß0^Ní±¦ìDÌñwÁ <Òåî<*—‰¾–€»"ä[%’qfeÅÔ!Îý’æ™p”¤›Ñ©iË4çÈ’ì9|üÃ%&áo…?"™H‚Ì44žµä’eé ƒ¤6[ÓXÍÝ zzY†$Qžv„_¤I•ÊŸêEeßU­É¨0¯ädW†‹Pnøå/¾!¶É‚Þ‰*ךll—6Ô,²B@çÍ?cY*ÒÇlÒYyØê¦X¥GFtý@1éHªB$°Š¸ùG 0øxö gÅqrsš„t:BHuɈ³0Tà$z,`µ`ê©üV’Ìûü Pû»H ±r ɯ*Úäõ­ÝîßOqÚ.Þ“´áÓ4\ð,þÃkÀÙX¶dáziZ¿˜•ÎòÇ3±b~Œgì''ÁÍÒý#Q©öJ¤>nDItÄ ÖoCÅ.6j”¸!ÙšÿWþ·]əɭD䑨­·‰\¨2|…C€H¦ž•OT&^F‹À·ÍkÜ©¯8È™Â×_?Ës9ñÇLÏ~!l`úƒŸ óŠâ õ|’ZöbÁþ”Q~ìOÁ3oÃ+§ÊãqA±‡[´÷O™Ñ N™&ð¦E‚À.`ï½W4#øüÖ×M«ØY9&gµŽWì|¥P_*wÖ VìöòÈGµÃ>Alì~ôþží/Sëô5<Ë­€™%û÷SÞGÜûKvxó½\*æðÍØ¤ÖÃ_`ÛG"y4§FAiªEð€ŽÑˆ›+¢w;tøx¥Ú»?Ž@˜>!‘Åc Œ(;ªÚ/»ûî­VÄêdÕ>z h¿˜ÿ3n߀ÊVÁ Oîhœ^2VGàšdkܬ/²ˆð*ï˜Ð¿y  S8‚œÒHÊeï}gâj®©ë}&7sö©&ø¥þ‹9™Å5ðýšhD_ïtö ^·y¿ògÌ*©¾*ŠL["é±<™äÀíóÝÎóó-’êý×?ÁJ˜¿ß¦ö”Ù¨]–âRxìàt•9|yͶ§¸‚qÛ;EðDwD0iPÇŠ »e^î?T¶ï/£­[k6eÿš@\I-P&Ž}øV,âφ–5k`h Àïh{ÞªÍ×¾°,yT-Ùç‡8p°Wˆ×@âUø°UGãªQ&м@ÂM «Êˆ¬ç}~¤åB²¼ö°nU2î¬0öçÓ¿8bS A{öþ„¤|e¡„*ßcšcÖ4) éÖ˜@8…iihR¨÷°c~š¡×ûÁ!Ü£¨Ë]¹"Kc¹\7Õyò¬¢Ï÷e%3\Úß iî¡S#µ'¤Ì—šê׋wPov÷—Aôd³0?`aX. b;ÆDx¡~Úì¥ÄÁL[}fæ0°à: n¤-vy2#¡ ëF>ü¶ÑZc⬦€ÍGóg5è´þ$K†ÔÃx»`_?3ÂJ<—N†ƒ™Æ»ü+÷-°x5¸iøåö4]ñÊébàe 9’Qk€32iwuU–‹N›Ìüù.$dØVMú‰ÊÕ2Ôš&<Œ=6‘ öÿÒr=bå(Ö±ô³ômöû }¿uÞŸp×Ð3Vþ8°sðmþ¥Ô³\xBçœ|— *Y§Õz@&< Ààh]*¢ÔÈ3eÕ©†»ª†ìYpmƹ&'†¹DVÇ#¼HŸ}“KÎà£ÜbÌh¨‰2¡ô¦Š¥j,Š-µ¢yªwÅË™[û™˜VÂèÙò7øç¦øorî ÞÞº^RœÞÈ5/LhÑêaI`ÆóÏL9CNóþ1÷&œ•ÏöIWXÅYªÌ1Çwºg›—?eýlÏ*9€q7kpĤô²&ÏÀØ·ë/—$btþ£8„ôÜ€)E› þÅ_™×«L^­<7Ã%X’ºx´“øœ÷ÿâT•шFÃU®ÅLú™†­?Ü«xõ6]”—KW,R¦jy>ŽZ{H&˜ÄÇü6 *® )ˆþ<Ž-œ6ùn™üAòt‰&x§«û«afî!Ú$¸ÑÈa• ‡×ráÊàmÒÁ÷‡O_ÑqÜ]Öx¾ÖZC×´cÈÉ(n2(W¾Ø8²ÁB·w/ÍT:Ò˜ eݲ‚‚·“ 3,ùo]Žü['7 0$IsÉKz¡lfØ'šÿxV7¼bEG.F5fiÌ—X¨Œ—GôYq*}ï‘X¯±1Q^T±Ð9…|Ÿ¦ÆWÄ«ª†ž~ŸS#êü]¬ñ*NÉÝŠ’×õ¹,nå Ù;²‡ä³êÜðåÙúú'þhn\}{Ìáþ . à›ôÃZ3¹qðºM3or¡`!ÆcìŠ3»ÇT!᮲úvè»æR9`>þĵÂÕ –ô=½HØCSü¾¶/{• ý—­0Ñ ˆJ>;Õ£ðÚ7âö¤4Þ”‡o5dgå K¬+­Xxð²M•`™ ‡t¥¬NáÚ픋”GåÕ6Эå-Éj3v_֜ճTv¶"C;C&E Q<ªY甼+c{ÒF–ɇ±î®)K]$6ï+åûlõªY¨Ï”àgÏz`Lš‡¹÷Z simý ЧW’°±vJ±(³Gb®±ö~ȪL£°ÖÓD‡ò»*†S.šÿ?ökAšž/w’œÅ\èØ·ÃšÅE;ŠF{dJ„šÖb»Ì1+¾NµP”¿=-ùký…|®GoúÐTê° å··›€6䮿Á l#0‚sçë6_•@ÐO—àÅèj ü ¹ù„yÚúLSÚZáöb-kænšýçü÷|ÂeᣬˆÜ;õ,î\ø÷@VÍ„w—EzÌ=ëÜû#¿Þÿ3„u~€…Ê<0†K`u1¼\zï¾T]„Â_–à ¤‹ÈV<ü«®Å®D×fý*M³û… ri½À™uÛaX ±X¬åxûå¹Xÿz7ª<‹³‰žrÖVô_Ø’@’‚fmOt~É·m˜.ïãMXÔc<·%ÛÁº$*É4›¬KæýŽXȚǹ‘+–ÞïË¥ØÂTí bXóý_‹+7 ׄ`iB S]t½G~týßÖdTsLBIXŒìÎè /È ,’šœ>=XÑH†›è?+†²‚¨†v[ÿ&×½ÔZ ‹óËLîÃT¿ ˜RThp°èµëq<Ò’ÆÄ~)›ø|©³]+CùMªÅ$yd%4š 7¢žŠóC0ÏBuš.0$ÙÓËɤ]øûÿð çøãZ3àá,‹ã£ Æ*=l«\ ƒÑ¸ì@’/XýÊ.)v…-+ Q<á—Ûz½5Н‹Xcž¢ùyø,î¸û¾Ö2:³‘xÙª8š"k0aU~}æ>^Ȳ·¤8W)†1<Ñûg,÷ZHÔ»=»ÿ÷Dc ”€ ¬—×eÕý£ðVW%ïÙÕîþ#¬ò˜]Û/àê=ëµFi„Ì`èÊ'c·º‰r¶•¿ŸÐÈ—ÿw3݉½é[eA;F¯æˆ"€›Ð ªô^àkc´â²ðI®ÏJKd4…£ ‹–òªôW.eöÌ<Yz© 9ùXºŽŽcgÊ–ÉØ´x$Ádâ‡Úgø›÷W¨É?°ý€ðÑ£'wL(òèö鑬Ÿ>fN1.ÌÎÁÄÒÙ¦‚½u,œÀö8r€÷ë½C ]:©š¬˜GJÝÀ#›Jäˆ:ÂÚ}]qwoõ1ý$E>Í{ì?ªbOšàÇ`S.AjZ_¹3«˜[Ét¿o!³h»³¼µØ7S£¼Æ—Õ÷.\Ò4AjruŒ\Þ·ÒrMÊBvhkY»&þ+f´j×4¢¨uøg_CjW ÑÁ½Y±?^Êñ§4ùb=ªU-öĶ¡x½ÌC¹(ý»‡C½$‹Wàr>à¸xG/SäG_Æ|)Êž”[쀻}眷¦á“Î)iØÀ¥>W¢(.Uͧ¨g„ÐýXzö—‘§©•Yూ]“ü/{û·b3”i)/öWPduÓtQÃÙ 5 ”ø—Üv©½ƒZÅÆGü+…|ÜÇF¥B2¥Ü55© þ›þ˜æ·§Ñ. ‰5Þè1ã–â{‡X·NR ’Ìã·*FZ0ÚŽOž øîm©ÅªVIF®5°‰äœg+Úâ3&Á™'¸ÖC¢¤€;‰Å'7·”'ÆUã¯û“ wõ/Y~'ú@0ñ–|pûb×Ö™I¶àHï5PJ’¨âÑI²x¸å¡†…@jtF!`ÿTsÚþFb—2 _àXš $ 5 º¤ÅjÎyf‰²ë¿äGÈoñ(SÇ9LÞaf…¾AP÷“ä'Âþd¶ó-à£iñF¦™KòpÄêjÅh#-\¡`ç ye ×°HÞÒýŠº “+ú ‰ÜnæÉ÷ZN¹æÝ ‡Çãðˆ‹KäDŠ^ŸÐaSw1)ÇÜ%‡ ¯P”Á“Ó™¥÷!ø¤^Vnk·o¿¿VPfÏ}…lÒ¡^B;‹¨ ÔªTî½9V‹ç’)9®5«ˆ€èÌ}üfîž™AÃV|Ÿíb¾<0¯d*9Q–°ºøÃn[  3¿yH/ZÒÔž}:­ÈYºÚÄ09¾.W6{¸‰ØTÞX3§˜)¤žsç”ðó|™16°çÙÖ 2Êd a÷ß(Húñ ã‚»C ù@턦5 k¸)ZžJ™í®9ë$\`)\Qå×O7àd™F_Å•ü ¿+¶hH]2ŠJ5œî `]ÏXóV’BŒvß{НyçÝ$Ý¥HÞIrˆœä³¡8¹%ê—ߥ€Õ@S»&¤0¿Ålð—qüiÛ>y ç=Þl÷û!XÍþ’lóC ýJ¥lÉZò 5¨Œì‚0h4bDÊ CB°›,wWÄYøc7ÎÆ†* r5aö?|ðÐ*€Î$d· ÙÑ|¼ZòÏÖ0Vמ6ÉWŸäypfpW|÷"@áŒÚY؃fïà ¨†UñYLèqÅnŠrxf,½žéã²éÞ1¢ÂxÚ”2ÃðËç‚8:è9(õðˆÔlÉÛvwTþY®Uæk •žK¶c”rPœ?:¹Nåk±Ušéif/>«Ù¶ø°O©!4*¿K8›ím¼´ø¬–ô†¼h`ø…ÿ÷q£~ë5ú/ »ç¢™lå3Y’5[º³?bãÙª’°f§ Døb9 õí:@Åx—çOŸœbckÁ%üé¤Â"·z¤e¯5ó5‰pßæíôÒºæh¥lØ.’föžV ü’à_÷¤ò2ÍcØe€‹ÊäÎËkÐXFÞDýåU¶Ì6‘.=õE‡œ†`ÓA/ƒ¬ççu§±«F¢À‰Ð>íÇøÉ8$z€ÿQý=ÄãÂë°tº¤£¶sxê¡ ê¶$tŸ«ã2c‹ún„´­«æk=ÇLZ¹&™;~qËä¯Lö_`òëš÷j— )”­gÊ/ÅǤÍËüº'šx†…2óe¾@Je9"kÚFo%¡¢$U©ÈY"¨'}L`#Û¤|(­eÏŸ°YEó$˜d&_ì¢98À*¤P²óÌ8µ‰=<ºÅ±;=µûù?cnaïqÀÙmXL­énî±dOEòž¹T®YQÕÁ0~©`ʬ…Ò12‘º©_]íX¡÷ä½[^›˜ÿ¨,à15…BÌ fµ´_€¶ëf-¿ b=y~ÃY®‡©ØsÏ ÖÛü(¤¹ꂯèÚzËl‡'øãŒ¬Âû‹v*ºr0iÙÕœ“v¡f‰jfµ¡éî.[…S \EþBóžRLßG ?@(w¤¨]ºVuÍXYÒ×ý)ªŠöÛ§5'pi]À£xéyk`€' å]áoÿ»ÿ|ή|ÁZzE¼ÅÖ=pèˆGúšÚ“Bv°2ÈËt%Wòë¤ÝÛ|uùoÙ^j û`ðבoWfæ$ž'ºÂü E? W,õE{¤²šHÑÄ+d¾´‚Q7£x²º€j¡æÚ’‹äyö¿m±†ÐÆ8ˆ@`çùE¤–z¶8Ä".ÛjÌÂÔ9ÓŒ’x«±ïÿª‰×ŽiPæ_€ï—~W§r‹¤óŠÛBòò+ž(Êì7AèʆV Ve]ŠxV”cçÇ ·âS~áÝÁžäà‡lV±¢™X¯S0¨œUÙ§ Û5 Šíe,¦1‹Ÿ0ާýGû@ºBâ áÀDÓ¸lG“BN8“•B¢Yê³'åV·“T»Y7û±ˆ¶5f¯ÿ« Ý ïi4=؈Œp¼6ù{ò6ŽTÔR#Gªn&ÈR“¿í»‡YÖRt¹à/ênƒ½‘—4÷Ð41²rz÷…QÉ6zB ‘/''S¿àK«xŠJÔôGìM³(nÃÊ‚}«~döS܇܃›JK9Ë0!y.6ßx?7ճˬ8ÎE¦…IÉ%C?ˆpy}2ñP†ìÉ?RÒƪ¡q/]¡dš’&õÒ,tF¼vGã””L}û,¿ØTÀª*ó-¬:¦GÄ/MÆâŠ=ô ßnÔBB¡]îu¦ÉvñZðH¾:‹Pôó@¼ô3cH5cp)¾ÄaÖ@ë”ýý@bðRY¬Òr_‹Ë"CÈzZG|t †Ñø‹»ëP§øe¸^°-Oà§»»r_ªöôÏ,‰…ðË=ãŽ1ì”:ò¡»wß^r%}e£Q°=d#Ù=Ç“Kôå X¿ ª‘÷ìè#yM¯²ñ€ñÐx<ò&ÂMô‰ÇÏù®tÍ'Š©%ÑbñîPW®ìûL27dH£·¢W/ÐPLÀâ’Sþv×KÓn¾òñ<½;íÑä®<ßhXìZ¼¥%àÓÕcÙš¾€Çæ9 …»è€ÂiæóDö؇vÅàÂ-ÔÚÙÒAFvòº<áè>k$Y®üCfìÊÊ(Ðyjz i™MS éuäiÆv;;ÔÜ‹Àÿ@^¬ñ–p{K**9!³è¨<§-µGüëPî9¬kÓnT׉?“ HË’¶N{ü‘ÙI!î&IpÌxYºÀfS¸³Áò¦àIäÜéL¹„Ö(i’fbW£º:öïÒ6ÖŒ8–fIøïY²É¯Þ³à›Gã%òlûYž?Ì4îÁ)iP¾óéÊ÷ûKØ ;–•00¢Ñ6 ªí–¸÷Õ5±¦ ïS(W/Ä;âE]ßïbÀzTh@ôZþ¯¼÷èÙU ŒËB,B M<†}àᩲwàòXær¿>é ñÏù¾!¶¾ú_] éz•f!×y(«sv9`] ´2Åw>ô§wÀš…ž,yº#"ù=´¨ÃµWí·P¾¯59WØ k;‚A¦küîUǪ>?§|K—”ð¶.£Oо^âs‰BŒ[…5ÙȼcVäÔE„×/Ÿ’Ñ \lüGrSš˜8-‘ÖÃ]äW‡ËšàeÌœ°Lʰmï}•÷ n¼,xÒ´3„U·bG})ú[ÉTö…õß:~ñê“™HÈ8 |AëÐÒcÄŠ ë™úÛ|^—¥jÙÆNt)»#L¿Z®€ñ~…3ãÀwkáÉÒÑ“÷H–k[Í\ƒWO2>éˆ1ø•wSÿÌžjšE @Tª Û½È(´¸D­¹¨f¡‚IÅö9ú³¸‹ Ù7vÕÿ0œƒ=I¡ æ:Ȭ=êZ(ÅÈyž½Rÿ_½Î/¬ÝCÑ)x|,NhyÚìhŽQOŠ#i³°Sì$ð£ì™`Ê{ÔI³²ž×½iëœ^àf{¹ "¹yð“›H; I| Sãí/ÌËÛUÒŸÑ|R+ÊI ÑÝ->{öãÅ”$F¾ÌÃÙ“ÈškAG´øÞ,¢2#nÛŸ¿L‰`c”(ìªs/¼Ý\gÜtò噦¾#Q¤HòÔb'É Š.‡)׌- X(E(;r ·Š‘QÉä43n(tÔ#øølÚ~eä=´(ˆ}úýs½¦2&ìvÙ­&vzXß?úSÛ7ÎûE‡Öˆ^hœQjCp“ˆ…òcûídªäÛ»ðÄÇÕð»ú-#Ê4رÀzïvé¿]Ôûz‚‡AÚZåe‡j¥¨Vå*.òc›__þÊ•Þ9A/^âp?B+`tFS~$þ!m6þÚÇgÅÊP„·>¶7>öjûx©=D&ö#m¾¢w©ÑrhA G5xOžÉïôÍ+•‰9W(—êÇ6¿Õ=ÿ½Äô£ÔTŸÑýàaçxQK¨ÿ² uÏ’¤3¤P½Úìµ6…"<³[åfV¦üA{“ 7)'¡‰r›l2 aS½Ê;ù\,‘ýê¦"ÑFoV# „ð™Óx$ zS;ˆÁµI þ²†™h˜ÔTK„³Þ5à GÔŠ¥Žº`…K: %»3;xPÀ6†=l—í/Ⱥ†$­FyäíSçG¼q('Só?f]Jª .cF<£Û$²XK}€y•ä°”1ù¸k;¶½¹4'8£wdƒ "²Ü¯£ñ‘É%—ˆG ‰éE3Àf Ö´;OßÖÐiÐÛ³‹oú%ñà ûUQIn1¬[ÍÀ€QwÄ¢ü[OŹÚ¦~õ¼S¯¤f$ÒXŠÅ¥¾}éP[‰R„ (‹‘ÈÅ,Ñ-ît°Èt‰„-¥?cïo²Õkï;¹^©¨¡Àœ„Dò‰’‹ò3Ï éò7 ÑR >gU ´Jà>0Ùˆöº¨Ä%$bšÌ|léë)ZÚY²leªØÛ\ûÌ郡—%ólp)5%b‰kÌhdêÏÚâ½¼>/l0ž¤¥SRr*œA`?TŒ^ ˜E2«·…ùŒÇx <±P†"ïa²yö]qѦ9À…Šìó¨šÛ&,+âòÓ%ûbú;Áàç3…º(U¨>¨4Ô ˜È~WÍ?Èïeß@•_pØ"«§S/¦&Î^Úô­¼+‘—¾µΰŠîý)_¢JöDòµ‚A¯wߨ©7Ÿ×¦mÏ©ŸÉšržÀž‘ËBð‰9/õQŒ“î@B0ì² ´ÉŤløÎ.¶J°æE q•ìPw7¼}w0@t’ vMµ–{Ëá’9¦ö”ݘ”¸†ÀkðÊ$ì))§M£í£q>>ª\U3fÏ>ä}¢Hº™Tr)ÔyÁ¨Ä#h–¿#N«öŸ=öîM¸Q5{ßõ‰šòÓøl²ì£â_ÖŸs!£îÏÇyæ#Tr‡ÁX°û8ÏÝêÎ …Øõ•¼/R‡tž¥”ëèíp) ×Ôÿ‰³­´4Àö‚P“$b~Nöš8 ½xÖô#ɲúlþ.>š%9MVLÞJ¢àT¤úýYã‡ò¥\¹6¼z¨(¬–qðÏÎ<²7}IŒ­Î,í|ÍH]Nÿ–HëļÞOÏ”…]•ôn8ø„ÆûÙ às]8D êÇ+tì×o/q2H£ rø ¨ŠÈ³eº¾'™2Asé莧ŽÔt'µm|u5üæÇ¯ÉΠeœWB,Ãý.‚âÀJÔZKv秜Ӈ_ŒDÿ Yžk®Eœª¾@·Q²jv_·lƒô3«¸ØÙ÷1/åîpÈ6¢‹Æ©~Ø v±Sq«ï×fýÞñÅéÚ¤'Hr +׫’889Ï゙ÀoíØâH®=‡ê’]úÀÞ k½ ­.º¹ËÔY0tÓœ5Ô+»ßkZhжl×o>±›ÈéºÑ¢+gQÝ@=—g>’—gïÒ!œ™­ ;XMÂï°†¢½Âd¤=µl3D£€Ãk½Fٕݧ!NE±ŸoFäÕ BlÀ/5ËÁ™M[Ö…ÉQx8Ö“¢âÃ-l\ñ„ðÖï>±Ø¨ð”’Zà²L­ˆ7ŸÊ;g‰QïW5Ñ Yä®*‡‡’´Ÿ“ŠÛ7 WŠ•°,|E>w×l/˜Ò…âØ‚2h·lM'ÒY”þëVæmíOŒÏßE;qøfE/V†D­ë†È8÷–g»{JÌ ŒRKeÑ\ù¾…?M 26äÿõÉ J‚u“„g‘Uÿ£ÏÊQöÖ!èq²‘Û+|5ØÓØ´®ã­þ×JB׺zn»¼…Å]eó‹Ü $¦k¯äo<*ú9ÿ 4£4RúfíßãÁ8ƒ¬Ã´5ç^ʲ¥®æl2ù¨4/\„¢¤_ìi‰h¦X³:Ö°ø²Dµµ1b4<ÊÌ÷øbX¬ÃGGcD;Ì(ö‘º*`˜¸ìP¼eÖF’€æêï,IÃ'…˜Ði‰ÏK§ô°K»ˆ›àð†ä×U)Ä (½¨–‹)±tuÏ4™jÄ{Ò7í^wx-©ÌžÈIÚˆ“„< ËÉX…£‹çí n‡O¢B .2‹…È_kŒwhµg:Wö6tÈ·Û[ÁB,Kéµ’ÞNéÈgr¹5¬1ˆŸ š/•»Çâ|óßñwÙF¬²Y£*ÖqÌgyæÊp”½`;Àú&W(‘%(²©HóiŸâç¡Ze_ÌlkI(Å5‘HWš) ™?$ •¦o²ÛÉv¬¨ZÝzž=]¥\à Ö‹­T!áe˜ k -jÍôõ8þê ÿ˜N õÎlþÏ@IÍ“Ž¶¾)¿Ù‘½¥Äö‘ú$—LS1òï›÷G–›àuÏ—!lr2Ù€è4åÄ—ºZScRœl«÷v=™ývðïË·»4U-ëM6"aœf¾Gª“+Nlã/J#êµø­Ú¯L¦Ç^Hw:µ…:ì aÇ;Ûý¼'Úb ±•1ñ©y·mCü¿µuã}݈ïfíÇ z0‡% 6í³å¾™šg¶KÏ ¾ ÅÄ`•9ƒr²à‹{4e`÷<%—š6‰>ì™Vhºet1À_Ë%¢™6[\B÷èˆu ËõsžË¹d7x2g¥ÍöZÞÑ„ÛÀþ•œŒ¨ÞSø®¨$5–R ;©¦Ý +†à¤µ1šŒu´Ä1¬ß¤ºg¤Ü~bt’Jd­8ê 2BÊO…~*$ësÔ”Ó|-mŠ$" cûà³îL%=ÕŸ4\ÁIëI©znA#’í–æåÜS‡À.¬ôüås©t»[z°ï‰%[ݽS¸'“”QòÞeZ^Z†­ÃP ó]ÄùEî)Õ+rØ¿'5¬ñFh»»Ò}Ýödþn$ñE¦=buÖ°ÿ²ž¼~¥™e=ÃÛˆå‹q\ÚEG§O5&ñº{Ÿyé­*¬Ó<ê(ZzÜ^Ÿ"³¥¿,ðn蜮˜ ŠÁ™÷ ÃQ?MÞÓëY 1Ù–±jäåZè¥4€K÷á»éUmt6¶‰öR{$‰Ç˜¿Ò”‡s”y“Ùk½ádœ×œ×ë4D«AÅß©XŽËÞh^æÝ±G»ùœ@™ÞÃÚ 6»®åª oôzÉõÀ‚ ^¿4ÚT½‰¿—1Ûž¤öu¥h%^Ä#K¹FMPìÉEð'~~å*pî5¥]Y%žJP¸'ØÌûô?1@¨z‹A–]%‹Á¬µœmÜ7g¬HÆB¾¦éñuÄÇù¡g?Mç]{Àß.(‹®¢WÈ·ï×åÉ7<(JçTŠH®å„²(BŒþ6' }”3õ‰äs(zÛ¦Ú¾®xüPñBs¬q¶‘øÃ÷¼#Ì 1ßwÛâõµöóý¤390œÊñÉa¿‚‰à5FÞÙ(„ö7§n¯Ú!´òˆZ#‡ƒ.BJ~˜Û°¡,1Ã<ù›Ü<‹Ë„üé¨qm»1k¾·m…+$ïÚ”Ós(»‘+âýÌeëg ™ù³cÁ_¥>oˆ:X¬7.gÝx@Â(32@bLµZ1 fÖìK©%”o|ºsçÖ@•BY2ú2«6½#ºÒúò¹?J¢µ0x ™w¶M°hñÈ|oßtF¸$$lwWn´ßÞú¿ïHÔŠc”eÑ?3Pr8*8þ‰öàíš^\b Áê •EìãÇ—ò/M˜Y5€Š”óWg¬vCººü!NR¸@¥,†_Ë0”+vÁ#Äqš\×õˆ\¶R9†äÝ6¤B±¯L{­fø@¹]üã?響ûC¤xvÊn÷«;”aj‘<—æ¹Ü½F ë™ü/~W9(Å»Áò×/H¥#“X¦_@¡ö–ì‡eÌÜšBªýš¼7ñ¨]ÓeVÅËŸ$ª´ÆÐzƒi±âU­¥ÚÒÝÓØ‹ ñbÉýk¥ÅLã—|\Ö{e|ì›I.h³‡Öò>r™ÉpóŠ"`Ï©@FÛî²ÀÜ[fضI:N¨åÏœÞÍïêë‚4^(?[ ŠgP­1‘·ñ’;Ò*ym×ÞÈ©ò•îWË -’ÕMðyfeŽ eóöÚƒÍÝ®Öø¥iЉZ@¡@ÆKÐÄ¢ëQõÜ]\°óXSi!™!Q“ÝEhkbž^ý"¿5OÁ~»bªWà[ ¿&¹;Íûæ¤ýš…»`Po4Ýò—|»¿šëXR46&‹v¹Ï#ýåp=Æ"º#Ndú¢/¾|Ùå;‹²b©–ˆ3”‹ä0T=)‰¼ÇÔ€-ÜúCûüÃÓIÝ3®c„ðrX"HÞBŽƒ»„<˳TÑÙΆäç^w KÁ¡®öÄÖ6>ÂH2ÊCíš=¼¯ÎµÝ2t‚B©Þ/ñÃÛ¢@íõ¹« D»hk†hNS¾!Y0y9‚…”Þ×”†u/¢<޶ò LŸº¤Pa>ÒÏä€úŒ+ÎÙj&g²×UAçŽfnάPT¦p‡öêÃü ½×ñ­hã;kÝD:àå T2öcÁ;%[…¢á¬±k›Ï}¤Å‘}|‚Úfô ö}«7¼1׎¶¢z·µÁ(#Íc¹2õ¡ JŒË>Š«ç¤öú+#‘¾Þ‘¹C&ÅÖ°yÒ_ÛµG`€ —•ÛìUê Ûz³6n¢ÏÃ;~‹>XGTk&Eä&b \×Ï#äT”ñúz+åëTõ¦šv?„ëKÿîzƒx±o<Í©n÷cúkÉæÇÉ©#S‘àÔu…‚"ɘ0rå›2Wvÿ,ò`Rß(‚ϰ2 {åoA³0 7úÈ,Ëï0iÅ[LÌ ‹¬Ø4é=p¦ì!ìU½&¶:èp­ «jñärÕ -{õŠy„ê~’ÃxŸq{Óƒ'›°Ö6ß@?e˜ž@ ®'BÜBybg˜8%Óc[¶×˜?²ïY¶½ŒñiÉ-¬Ï¯ê!wR¢HÄä3)©’ѱ8º*º³„b6à÷ãç’Ÿ·™óR~kÎõÿ—THVY¼‹Óê›+³±«µLdS#«(Pûn  _+ Êð¶²S'‘ñ±Ù0½ÊÍXnrA`äºð‘ñ n•Ž,Š?¨Õ+võºÝ8z–©•6$ÆncÉ'rAA}ò¾q±)ÎGc¥·‡ý¿hõe7s,i>0â(›èœó ôlr©^<Ë6»W>ÅÛoТ+±ecºHÊÈ•rÍhC0¨×Tz2²·`?Ë‹ƒCmžYµÕ`MVgK,ÏR>üØM'î2¬Šc@M·w½+¿ÞÄLƒ›³mE~¢’ ê•¼O¢ 1‹³z÷«kEõ9ÞU .•§±W6§WÙ DÖì0øgܲ«"û‘Ó$pgÓ—3ƒ ýµ·ˆ®¼"Xb]¼~7ð‘¥CØehè—ÙsŸNðä åR9¿™èËtS«Fˆ±-ËQžns?Í3¢¼X<®éEø}‘ërœ_Høv‘[('ºD‡ùÅ­nèyúí¥¼¿s•¸¢Ä2»QX‘,µ“;z"ÿqÃvÿÎ…X¨¢™|ÜÂSѕқýÊ–ÄXñW#ñ¬çÞ>´}Íßûüp`‰ÖDßçwßé29–Óæ½& “<´ëËÏr-e·77É»j—$$úëXûÿ!ÛÅ,ýŸîþªî0¶ÝåûzòÉþ2ÎÙ¹Ý8ÿ›ë€””£Z¤Ó&bâc˼àKör¹rO+ºÔíbršŠž<†‘‚Žl"#¦?–Û ŽìÅ[4€!b31ùð]]™ô&Otµk òPÍL“Ô7ÐñKN0E;½üf8«Ì'•«Ø™|E͉±˜}Wk›lûðy§Kí»¿©Fò‘E^ÚÙ¶©-Æ*£Z­À;gï6¬ø¾nH“>¾¤wf³(?ük›á"€j”ó›y­ÑW9dñgV„}BXlÝÔâ´ZD¾/§êÊo¹‹,°k›RéX¼gR“ŒË™3¬¯Ýf¦RLSîŒ{ßa×EzÏ–“¥½½¢t®“}d Î:8˜±|DbV•sV?Ž>ÈdÁ³‚bo(Ü(ŒáˆbÙ¨ZÙŒNâˆrn‡B`fNÕŠý~o•Ÿd‰j¥ÖV¢¿JPF’l¯á´80n ôfÉé¹Ú'˜©YP͇’»NiSMÉ1І­×Í!’2–|ïq¦²!Þ ¶À_ù^~2Êáâ庠XäA´©dG‹÷•˜ÑÕè…DiÙw¦õRc:Á\ukù£ªZ§”[¢Î5ø÷CfV A­ÂÉé%Q@¶<_q‚¹»ØÆ—†‘q6 Øj ®ˆ?ÃK8 *ÏK}×þM®ädÑ%eN™†¼ÑZ¡ï¯ØGÿå}£ú“¦ðÂV€™”L·ÈÞÎrUaì&^²l¦¤Ê}™kSÐ{3|ðƒ‚æ™ý€hÒ#„÷m‰òÑ i¢þGp=#N&]&–Å)xAÅ0ÿ–÷&NUæâÐ|b^\³p³~£¥È@*ií#õ’J€¹…¤»‰l:ËÙä7H¼®Q O7vt} šÿ3+3¸ée²ÿC«×Õ¤•.!LFzRõX^!ižÞÜSb›©žN†-;£ÈºÓÃ-p¶0.ÿç3ëŽbl>ªr2x±ÄäÏðPŽ*áϼo®\.S{öº4Ïä¨8èßšØ9Mݘr·²f²ÑŽÈ«f7Yý<±I•NÔ™£·,Sć–­Ê¥jïà ™ˆ¶2ÅÝ>ÀkÏ#!` ’ê +°â·ºB¿Ri!ºƒõjêòžyfß°©Ó[¤Ç•06Î¥ÛSƒå¼§àÔF!l{‰t 7“%J ’§b˜=QlxÍÆ…›îÎëØ®<9ß ˜DÂ=·5ñÉ(gþü‘Usj¸7uqåóÒŒ¾.žžY±DíÁ¼>’ÓT݈6Î)&¨ùùRrAàp_‰/®â‚¡H £v\êpK?âfÊ[ÃÊ:™}æïGy/Ú·šqØy!÷´O˜þ\4öÑúTMÁ)Jöõ€”_Xg`ã)ÕàïÛç> Ô '­ïASyÀwX}s¤AOƒ§üæ¶}5”÷µøbÿ74¨ìm³,˜*Ï(Vœ»ýöǰ Rj”ë—¢u$‚ öÌ¿XiÑúúÇ_ÏåwërE©U‚Î ^Oí|Îk½©¾ß[¦4¾¤ ¬]C«çJɈæ±ŸŽ¥~!·&±½úatQlªv+Ý÷eº¿5’v™ú\δ[º%3°úÿÃy—).½ Lb‰CÞ›§Ð1Þ2›þŠ˜ÔÈ¢ÉÙþ’ýÚBSOvY­W'ì.8NÐ8K:Mcÿ"l=F5œxŸ0€Ä1~Ó%¬æ±\›ÆÿBž—ßLÖ# hÛ§’YåaŽHÍ!xMÞW¾mM(™÷(úÉ›ïXö\ªÇm†´»€ÝË Zcû`°<‘tBd\~ÿÄkP­nmJ|Uøszʼn޺ð5NÓûäBuŠdr¾’L隸ÿc’®:-^OOÚÍ„ž,#÷"Të†8”ƒþpSBµõãÓk©z‡y7Ã]äÊaBJªÚåÒ”l¦i—†½98DhƒT¸àUÞiz•óý31ñ„Dµ&øñôïP.Ó{©‘âe•Æ ÅǼO¨;Utˆ$•­Cê/²C –xÀ~¤I:¡¢¤ÙPXd‘¼0eJ•¨n?òn.í4³ \ܳyýÕ'õá¤ÏáãÜáÞ[2OÓ\™áPS¦áE›)õÀ§%BîÕùòwèH·ž¸–5­Ý{PI‹3–’LžÙÀq?¦s’.£{È‘èuu¾â€8­Ñ:uNp'ËgH¾j¸c!†`á”ï7Gº›UòAaNžŠ>ÊÍâG”ŽK$F#2€Ð9=lx<¦G6zÓï¾ðò¬¯UŸ~Kô»hŽí×'»pRVmï¬KI'ê”SUªõNY­ª­ýðT¦ˆÂ’´{~ÞÈÉ…¯„ê®ä4É‘¤¦^Ô Nâ0F)!iýD]aº ñ…‡¹qŽ£Ø3…©#ý¨ˆGî®äñäv>Ðã¬Û_‡‡ø”ó¡uè0y/$Îð«?T¦E e|Ê× Ò’â‰Æwʄʢlœñ>>8±E†Â0vPC•™¬æALªðÙPjþv KëÔ˜~‡cv4Ü Íc<…ü3S·>ªJ°»i»»òUß vÝÑéjÛ¦ÊÖï²êE뮇­ö|ƒø«úâU ã·±¶š$Z}x}Xׯ«{²óUpòf¾]ã=øŽõ†•Z.ŽvôÕZûïV»¸ö½«ì@É!n@èe­gÕ¡ÕÌŒ¬úzy6Éôê7p2fU4Ίˆ Žòž bëŽñŒä”²åâhÉn*€¸J«sO#"âgéeK_€ùÓóäXó­µ»IÇ áó—5’ck£ÛAW4ç°µÉÉðŒ$ÐYMÒxwœÑÙ6¥†¼ùÁ§ªŒ}làZþ¨ CˆFY®yÁÈ€%†`Fx¶fÅžéÉö¯çB›ðËW8³zɧÔ-½0ÛÁòeøêL4É+Z6‡¬›5M«pßXøS”äe(N_GÕžZi_«c~üyf’*»E†ðX.‹_™þ¨™ %ôú9(&fÇ!ÛH‚>xÊ(*$4Ö}éd ÙðçûÇrÁàQÏ¥zʆe®° í« ¤xé»’W¬i$Ëë¬è’ð±B¬ë1íAs˜jåÈÅ s€Hó¬Ðº½‚À_ýröÇì`+šv»œ‹Áá)áª5 ²Ê ŸüšU:¼muá/üu…[_hÃ,¸£ï|óGÏ["–õ&¸êÅèF~1kÕð7µ8Ï,nrŸ|_‰¿­KiÛ{Ž¿Ï^LØ·¨x+5NG%#úÂq…|™¤v 4Ò´F¬_ûà€E ¦s½r9l4·ÜÂP¤« CT˜Â#u2 ž¢f^r–?£‰³Äa+ΕÁŽcNOK>¤‡=œ¿ ˆÑ¥Ä9Çï˜I{‡™+mûÔî|Å{'lÎ, ˆ8,ñ³lVg«9ncþ%+Þž )¼Hì–ø¸a•xlšááËMÀ ­ç³s=Y8¥@; ‘ÌkV)£‚ï+f’‰ ŽAœpÚÛæK{Z¬jK2­LÛÖ‰ªÕ„`“9¨ýVtJU©‚¦2nŽù&eµNXsæ®*ÁŪžŽYpÁ~%øU]þ"´Íj‰ðÛ‡7Vgð@šUÔY;À_Œs­’¢ C€ôž°Pà…%Ö1ú4óé…F¾æxÂöõS“—‹- Bìöá¯/÷ìþ¸Ë~ühÞöúTüú5ŽB‡XÜ(ö‹”—<މ«÷$×yäìïvgÕµa&f䡨Ÿ ^lMl½‚| ë‘õïÄØ“_jÌ»,Îq‚n¤vßW@Ø Ilî<ÁIjº`¡‚½T•5Ðÿ’ Í:<*ñ¡øjç^ ÑaUþÕzU³hEïR&¼¡¿n‹K½0l©94 »;¹ª!wê̵öt8;¥´±¸òŽr7¼ªW­lË+ìb$.a€æíë)#8|rxbTcbN2žþGª·N†ìE¬+b£æ‹ºçXN4c‚´ñ{%²YÝéÚ2©Hj…Oªü†õ>8ªûzÉ>}ý›rѧ®0é*? fLEØX>3VÏ”h€v˜ñ`¨:¼b'~˪ÆÎfªsrˆBµF¤ÚçlCÒküʺ±”ìnó3Ía½b•†ÏEî’I’ç¿ {º¨™óíáFÂy°‹W.U<¡ÍȪ\' åWd#-æ„ÀD¬H ¯ä:º+FÁ¥øã&)Ò™ÊzpíXº·öíÙtŒ‹Ï*·Çs2 õƒ» ×ÔyO½Ä­™84Òåi!ø¯éÌÿù›lH‰~2b4QDÁÖj¯üoGL&|íM¬¾™Nb†Å§Ž¼6Ú¿ ËÒõXfüO*ég®Š(3ÔæÍªY…×y#Ìú`–Ï YmQÑøßŒØ¶¹æåãYhê.ÉøjØan(å‡÷t“Ïp1Ƚ»³§®"X£;6ïšiÙBØHñësweþÔ””üóÉzK¹²;ºöâeÖ~N%@jãÊ«Ÿ¤”5<éFŸw9@F™öÒˆ°ü3OÛ§üív8uví½ËÌn~E];ìyÅ瘱=™,ÿ‡šqj ËÎlJî>¦¿ÜîÉ_m˜èwöbÕ$³Ö”vOhšÍÈEa ºæ,–ĽÁ Ø:e‰Á‹åÛc`©§ †HÜg"ÝOБž=3†KÁ%ìÑúñí¦Ñ+¸ó›&ªæ¤ÊÁACØÊSëvò®ó —Òê^öM³ã$6–4C9ìe'à§S¸tOáãu»vkïÛËÑZ RV¬š¶M{ïyB:Ð’:M¦àE"ÎÕôGqâè•  “TÚ“²T”íÈYÚQ¤Ùµ7½…Ø‹pÁNHZ̳WÙÔâË‘gÑ¥o®+×ÚDˤxHw6ÈkÎj8P„gÓº5 Ôw>,ŠóóÜd÷K8Å£™ƒ5Oj.Êj.¿Ž4IòÂÞÒßÛV½1à _–>c{é6Žå­ièKâŠU†ó£ì:¿kÙèÿæÏšgZX¢(©yØÌS}X –&|/Aâ—é§ŠŽ(ƒUÞh\¿Þh­ÓÝ^|óSS-s«ñ—€£š¼oVñ}Øš'‡ÙO[ŠmiÜÚ¹|Q<ùuJèðVׄŒW1Õ”†£FÞ¯"ÊÎûãð!H_÷fÝùÉ®Íÿ‡ÙÊ[ãµB¾¯¤\\]Œ={¾?jG’džE‚-«ÉÌ ÔL±õÜ?¯GïO=c…><™UXŸÐÜ ®Šôë>âŽ}f-ëù 6 ãZl,¨!ädc…váfÒæõrƪ`>†ó }±Ód®5½ÑÜR¶r­OûLÄEj>ÖuŸê5ÿå=†‚‰9„,–D€H›(þgM]Íwæ¿WÇf‹´}„t‡ƒeâæûwöwtÀÔÜºÕ Ç^†âžqUlä˜+ÈV;Ÿm§Õšê»M½=!ôð;°KÓb™‰h‡Ž¶B¡,ÄžÓ\¼ÍY×±ÜsÚÒ²˜ï,„o_R¾:Hºy™fc"ZL>eQÎhaMÓ(Gî!|Y9!.·®*ò)\ù² §¨44ªãv,2ø“L´¬}Nf‰.î3ôz7E¿ˆ^›`PqB‰‚è§V‚µá–©‘Oéa¿bûR•ïÂQj¯å7a¬<'"FrúLó~%¤(R-W¹Ôd•Þ’b.L»Ñ»aê/0Ò˜Ëw¿›«b~>Ôê. Ö™³G]4Ì ö¬£uŸÒ)äfä¬ÕÚ_Õ /ú±=LPhcúò¥zeØ,Z¾u´ùJ)Qyòf·¨7®ø¯ú‚mfŽ|Óo"ŸKê!O’^sˆGÏ­:SDcTŒÁâ3B þãåMœÀdpäÒ­Sk4‰ò¼ÿ=æ@!4ÁÓE¶x¶kÞ8¨*‡rNÛ¨êj¨ £l•]õ¸x+Ê›8 † ù@võT¬¢£mÐp–÷+ |y ‘°’Óq›ÌÊä£ÇŸñäŒJƒ·rȈ®ÍØ¡ño?¥ PHèSPÉq£¸û˨†gmPÑãëùàX3%6LƆŽÒjÖø™“ò`]ê¬L†`t vÌiïù€¸ãV©"<£Tï+õì oJ™D²”>•±yù½îєшÿf°2ïü;nÂÕ\kŒ¯,*´¥š*!G Sûü2ס¦âÑg>49W1µ¯ÑH7fyIW…Ÿ¿ … ó/>ÎS©\dÂDÉcï_pО+|ɶ‹ nüES8,o;—z ƒ”Trê\B ¤-C§‰œ6/èJ9`Œ>0¦îoñ.'Gæ¯'Á¡Lƒ)VžôÏ4xuJÊ9Ÿ–>Ȯ陞_ËuúøðžLWÄåÒ::±¦J ¿OéêÙЛe~F„%³l«pýàÖÔ†=Tƒ‹xkRv–ôÓè] ¼FÁ=IÜœLCí1d„Å)‰™+*†$.Û m¯Lй éT&ü¥@ñÐP= oÀ"nSz©GAü!ßµ_÷£LØ Ç¢À}­Ã˜I²ðAÉ&˜íÅ(Çÿ˜wTä%î}*AI]£RŸ*>Àñ/^ûº¤PO2¡gòP[ÊZl]í¯.RÊBÛ~ 9duòØþ¸¸tMÏ䯓†°×AHÖ3³r#ŠŽÖ¯£zdþ²Ix‘Õj£Ž"ʯÑ*âŸXÑ¿pÍô: Cͨzxv°gŬ<„+~©ýæð=fëÍÔñx<ÃÇ·Ø¡‘EìL:AïÄ=Á‡y1]{27¼v‹u|°¬~AHÚC²@U²o»+l®ÄÕ6›àØJ~½4‹·ßô‚¥dv]|¼’›QDÊñiSŽã­d%GÓ($ÇÐi½Ëà´“Y„¯óqIÕß@0ÞïÍÿ²s Ce;†æ¨}³H/”dùõÃ\Y¯ç93€Í}ßá@¾'Ô%2HÓ‘F|"?ï ê'ï'›Q¶BBͪ8sXüüñ*Ïe\׸œÌÆßOv4¼  m¦aª•Ø©O¸9YcdØ7.FV^R6£fIl?]²ÞN72­ ïêíÊÌk5HP¾OxΨÑ«¥uÜ ’ÿAÉÍXMø÷asUì_€k??Ñ»’@Ë¥ ºeæWXL‘’гUþ7Áʈ’OXœ¬äa«j–M…᛫֓]Û§ÄT±I‰¿·‚ üÒú½û@“q²PÊ" æW«H«ÔéE+%4ÓÆ-ŠÊñò?³5¼«üéq² lÙöî©‹Ð@T¯ÄâGãY¸'¯É£Ùì.àÓh…iF¯nÜã÷ú”™ð>Õ”Z Á@ú$´·ŸsÊþ·<Û©ôhçËê}L1×Á%^ÀÁ¼ð£~Þ0ÃÝ^f…H[Ô{í[>‘ìŽKÿ‘)ïÐùmÒs yük¯¾Ðlæ‹ð2;ÕÍ+ß Ž¹= ¸Hs ¦£µ'þ ±HJ,—ŽŸ¡"y¶˜ÿË¿um¨Ã¸¯7 惮E?õå\¤ô‘°$*#ö½Öbaܪæ…hñÍ_¹(ìÇJóæìÎX5$°j¢TB™^TÆŠA²¥†¦]´»oGmh*ËGX5:m~kòRíͳžAbÔ9!ÆìZ!%RMÿ-+ázOxìý se9(­¨×¿IP¥+¶¿ã±äéÛnºx‹¨s¿4RËön¢¡ ¼Z¨}IPn¥Æî0Òþ&ì (2œºƒ.H¿Æ—y*ïq¼›¶é£™MÔÖ1ÈAÜf3Ìj€§Ö4̶Óaqœ÷úpÒ’ù$¾ŒóOâuF waqÙÖK‚©ð'e¦…¿ŒUNìþÄ*â9|ž7£N¬¤Ê»ë’0 ;&ÓkX-M%ŠfæJË¥ä,›[<›yaevÔÄØ¨ˆiK­»Ñ0â!¸^£(–6þ§€5k]q~•|ÕCËõhwá`tZTúÜ—,b•IùI÷åvn¨ó^Z8çÃÀÝgû,ÿ¤¼(×ÎÙ§Uü&‰*Þîæ«…›·U—Ý98¥ØÔ:Yï ¬{mû«òËÉ"dgåbpB#ËN¡¿°;4йKA42уÐÏ ±d¤­L#Sï^P\˜®uœgþ.‡š„ê–&…íÎ#èŒH&+;‘ÒXÃÜbÿp¶Ã¢ç¾Mðˆ€ƒ›EÁü˜Üò*¿yNÝßÔÎÌ‘ÈüXÍãJDÅ{&¿Z…Ï”‡€gGG¦±=‡aÀ¹™`bÂÞªÛËð6¹Áȱއ+Áv?bvÈZ5HÝ25WfÅb=Ô<ˆø ¦£¸Ú½ ÖGq`]¥i‹s\jEŠ`8<°™ç;p¢S2ÔFŸ0íš'.ôP±§/{$ïÃÎúH÷†¯éo IAˆõÄ6î\-žŸ˜ØšÕ¼Šœkãý}©6Þ±.küù“Ã0C¾ÒyËŠÜýÝ’”4m$Áiòܓªë®§®Œ‚ªˆM‡{HCd7 ·.X*ÉÜ™œ˜B#0!¼9 ±Ñ<¸ŽÕ%«h0¦6x]NO¾=¡ tØp”K``Š‚ÔþŒ]FSPsGN<›(á(<ïßóð¡7i_};èÜ—ÚbšÙ¼o.ÈÖ“¾âNR >ªT¬¿ >DµvlfñðµÄ‘eql{å~®¬}JÀòž‹ck9Q•>œuQ”ÿ‹øÐÞ ˆœÂ‘& u%ß©mGÄ’ž=wþ;ñSur±Æ$=úM?Ò~ë7áéDÜhôNch­2Ò.õ?8fž<7+ûnp‡Ç‰®áÁi"~«j¬ãÅw¨5óÙ[ZBóÄDë[XR[Á)çДD/Ñ3ïÚD•);¬›TRø[ö%!í¸æü#«áÊ :ç»Eâµ;âÁaLÙqŸñ«€”À¥ÎRI’n«5ÌTâ(E¿¬«z‘«š “÷uËq•ïeÛá3˜ hjR†Ä£ÿlNî©Úõ2J¦u©Á§æ¬EÃ!­‘| /)ªÀ.&·³Šòžy‘B£¬îÚqWɈM:q%Ì 4qWrzšàÓ˜ýzMémת”Ù€ÿœ/áö-Sæ”LÎð´Á7DëGÃ_ge]èJ óem’díe{˜Ý‘ƒÓ¸’í²‰;Ÿ^^«©üáË1œÒöAXznl$Is.Ï综@ =k>¸­½è±\P\5rK|˜ÿcöÞHg»“gß44h4Ö¸5*hƒ-}h×%é¥3EIÌöŸP¿L?¸‘€kUç:šAÚ=Ä™ö4ÚT#òA6dS¶^ ÀtùHpÝöœßC%·7“4½gŸ¨wª!öY"êª Lâ%c„o%Óf‡õç2úW'êOŒ`ßyºZ{-2’•¼·`7FÑÒäšÛ†íÉs Ø»òz >êB üòXú‚«Ö•\gW kæ\{, 7 Š3:$åÞ·ÌÎM/^â½ÖƒÀ±8¦+#6Ùtw€ý 5#µ›öœÝÚè–/ ŠÃZD¦åy€ZUGD[¿N“~Åæ?V39DRt3IS´øNÓs/Œáç”Ç·’X‚÷åùÜ‹c{b9õñŸ@Vܺ}òNvµj0Q `À×#Ø“jÁa^EŸþ W©È(–ÊÏ©.ëÅãG(âÂ:8W é)o}‚x‘UÂþÊÃÕ¸î„úp ð Ú4Î^G ïh<å{_{»m1ð¹¨vÔ€FkÖ ÌŸ]É5)sk"Ìð*XB™ÿrQÎLEíñ"_™¢&œ`äŒ=ì HÈ(â)c²4ëccÐmèW]ã¼]tÊpÈB!>Σ«d%ÐäƒÒ$%‡ªfU¥1¸cý¢úóFÝ]»ßD¡Hk“>©åmQB*è!Vk˜³Ä ¯7¶…õ5'ž°j@x"[<]ÅnLq@®ùù$×A´y7•¯ÃMjoóÇêÄϰ@»Û<[œöìæºÕ3ºƒÙFƒ²‰ÅÑl®]]/ç}\Œ»³J:/¢,Â\(ü&±dT¿ï«Ý”ññØKÐSÙ)¨Ÿp@¦úv¸¢q‡ÓÊ!ÛlI·L5žv…|Œ£Å­ &Ç6’†Àš/ñëìé Þû+öz²7äˆ3ñ,ÕœøIî‰éämjMà«âPQ-ì‰}Ïv5$ gÚ¡Å×3«ÁA÷Ä­o¦qåøJoíoÞ×í€{´x[Eß í}Ñ9Ù¤*UbFH{MÕzU…e× oG¦0•L5»Þ^HÎ,\‡Û£LîÂÇ¡GDmJYÄQº°IÖTBôj¨¿†ÑÓ j_tjï¨ßP¼&i½$…Øprjºö:¿Kû›àÏg|ëö, õ…Ü2Ù†Š8ð,™›NNB‰ÔÙ`Q럛š¦d53«AëmXúßÇ®e”-•Ì€@ŠÇæt€eÌg+ùWÎÓ×ìÊ•-â¿5q'ÆeÖÃ;6æôŠ $“t40)Káä”Ír·àÜFØw²ïyNz| àŒ8®Ó¼™èQ‰È’°»Æ}­EX *M3¿z¯ÿn4ü­€ì¥ìB K[–2C­£a®Ï-ÓðºååˆýúlD¬õòË" è™°¹n–3ŠBq–4º$£ïRx¯È•5«8VØíßz"9ï~µ‰ƒíWçÝû/²—b$èîD—Ìvw÷2õnãu!+NZ­Júìš}'Ã1 Ôµ£ÝbâŸ,å=©(çFÙ¼[hN·†î‚Ó¾~ r³’Í. ¨óvoŒîÓaè³ ‹ÜNÉ$ æ_²3ß%¸§C!5€ƒè±<®¡ìë=¡Vé7ì‘Ñ\j¡ý9;¶)ǯÒ:½‰VAÈu“$T"ä«ÀÍeŠˆæ¤f ïÌV]¤gš-š®â ŽÂH9f#?Ô è#Óûø)ÙNѱ¡ñíÚR`ßW —ÚA¨šáÞe©žUا@úÂ,´ñ-ù1B¢….gHñÒFO™V˜“dþ4ë—‰•3qÊÒbÔ ‹£cžŸRýÇ¡ KXcÏ¿>¥=F||B\hÊ¥YDÁæR]3Oó»ä8– µ[£×Ëšò1£í]•ˆ™}ùBUo¾o"ºRTž ™.xÏsM ý 7‚Ïs‰}Õ¯ÜH¨žŒÄúƒ,H~“³éMe›l“T´… 'Ø¿ÎútGdä¼ÕFzä¢s÷5â«•¬F§¥q›ö]ç=>}Or¾dgNÑ»Ÿc ‹ $ï=¯M›¯A@ëT_Kjûú~¤åô&4½%áŠ`ˆ h0M<úÒ¨à{1 €'=<þïÒ3*Üq&ØŒÓL3TûótMc”Ú=îÆ úÃBÿÊìÒû±c¨ÑTÂÉÙò ûü£}j•#T¬ô´LIÕ6Ï‚0Ë»—H`Ft _Ø^áëcÖ’Ü5ñ«þ‘ŠÒšTx2§R?èÄØxþ c[ ÷—Õcþ=å&Ã9¸B³ˆ§¯TZ¸ò0¦ ÿvé,ãk$‡†]â>ijÏPf×7W‘«Lï6ëÎÓ’œ"&zýè«ÆË,‡Š›(}³lº}9×[•É ôC ‡±RòZV”RI!€Ú¯†VMl¨«fÑKµ(¥ßâ%çʳýBizóÈÊzfutd×çwÕ,d¼#-L7y'óN(†XŸàEùªì1“ðr”»mÒg³Gr’+s£ÃDx…Gãè°zSp ?ƒc˽a‘ RîU¿]¶Ù 95ºþêìÐnjèçÎ󋔘 _I‘6ܬîÌÁó?Ü(|˜7zÔè± \Õ5ÉhPþX“´¹lA½7µE ÊŽ0'æÚ7^¿>M¸£ªÀ¤,~@ñÐëˆÀM:x·'ˆªCAÞ'Ý‚Š23½~Šœý†}Á1™„66lóþX‘Ê£BÕÁä¥8+fÿÙ ŽXÖ9>»£61ƒ³‘­ GˆCð7µúÄ!¡ÅP !˜^·YÛˆÆtÕLì ûÓÃÿĺ8Ü×xKßÌ¡ä`ØQžµ¶õÉû ·|vo²ù6 Buªîzá³ñǹöïmÛ^\·ëBæè«‚(Xö…dqO{jíƒàÏ]K@üÊ¥ªb«$žªŸ ‹ð0€œ¡Ñ˜1÷a±Ñº‹ö“õÄÖêj|«ã2gÑÔ‘zc–“¬ß?l˜ÃÃyýŸ,Ý`õÓá9 : %«4x@1 âì(l,A”¯ªF<±”®CuKWõaÐMÄJ”·+§/Ö”VŠR›²ä_:B/z)ôÄö–ö_Ø0ß&}m00º{ô@  2e©‚‰å}1E¦8[±8•™=UºADaùõ¦»ø“òTZ-ɸ‘Al…M,ì&מ¹b…ê`H×NéPÔ6=–y©R-kÞm)[r³]âÀ|Ç>ôpzVÖ¶ ¹‚'åZïÂ.xv›äÌÛ"J陟yoªí¥Ñ‡aH fŠL m,§bR8b™!ò}ûRM4ŒDv$¥> µöruñB§,_HìEJAñM3|ŽHÄbŠþÐÕÞŒ¹ÑS$@F NÀƒÍý#åÒôðŽÿLeጽæ8Š¡Y0­«DFRøè–fÑ®ÕéáìX!Žð”ʦ_~•Ù³§yO‰ Ð'ÈõšÇbÛe¸2öÕœ$þF+zØzé“#þV+òÖKþ¬_zSª¦”$,NÎ%%Æ³à  jJÒJ}¢¦%M`DüJ‘ˆµ®‡¸%O)©dÈô®“¬[XCmó£OÏXGÅeî^ÛÏ7n ['÷–—œ¨ÀÉ}ûûßGÐVRB$Ò%p¹vç×#ö™Ì'¡ ×Ä÷Õ9Åùùvñ_ÉŠÀ.¥cðÎÓSMÐiî຋—’žç½aJ/ºÞ´ÊÁôBµÔUûihZ˾ü‘[qª1r{`q‰ë²õ8yª|ÿSƒœÚŽŸ…K[ÎÛ½é>}œÒÛ·”fíÎnAýÙ T˜íõ‘fm^2‘_ÅËç¯R`&wC/@d«9ãt^ÜG 3åâl3²Ï4i¹7G 8 $3]£ÔûµÎ›æó‡Õ[-ÛÛ4û !â8àĹ™CEâ§¥'Åìð~OàY÷ÁúlöÔä4¸£E )Šà™¼/Ž?: þ⡌–Oªê‹­f !òàƒ#˱Ë+òßÙ1–ÌÙÿGA>Uk¸D8_"ÙД¶ —–µ€’Ê Í,ïM(ÌIœ;ûÎ#Ý}Âð"•óDü]ë¢Ü†êFC‰p-Þ•ìPM„O«Ç×?S?õ'9߯ºÐàÑȪãuö:¤š¨C†ÅÒò_n‰žÈ””®xìÉdÉ<ë•uÞ©„lpÔ'q¹2ïÍ÷òx7ë`^ö%™x§ i ycÑû;ô¢tUcL'Ú4–«Ô•Å#’&¡¬¹ÊŒK=ˤÓÿ–­\øV½¬€]0¼G†óîÃüFŸ=39ôÞ‰÷¢†p6>…ªG†Æj§eiP'ð„wÛõ5Ž/ÇìöøœXì* —‡ jØf3Ã÷­ .JÔ=t—¤ \:g á"Š1õ„æ¢uüŠîôAÌét™<ËÝRPç ÓL §M¡ ª=”&ï±_©Sÿæ,S¶Ua½‹7Œß´Îº¾¬ù)>ƒéŒ//ÊÒÜïrþìïZ‰‘ÒѦ ºW°$¿‘õ6Õv~#/èÆ-gÎw"£þK ßDROñY>¡©9fÞ?oýH¶i‚ÊI7ï•åªúy²}>œ£€e;'m ¥4†îØ›S›ÅŸ’Ù.æîH¿_ÔÌ\5dŽ—è7•HŸØòtÀb5•(8ɵ‡Ñöà9„ Q9¼/ÕS¨¯UêI™pèéý¥3®½xúŸdöYÀÜ’¬dohe#¿™ìL‘K•öq5KTžÃ3x÷_IŠÖþöþ=¸¶4´Ç÷0û¢‡Ì=¡ÌŒ“¼ŽÑDørLŒç6ŽÕ6ß°†½èL³Ç>iÙp›wßNPŸÇCh‚:’Dß8Ѽwp8â3jÝÊœ–D ˜©»v7*ŠTjù¹Ûüœ¸-Ç·>´öãùIH\rÍ´=…7ÊàÏ(bÍð«ú„ãe{J0°“Ùtí½áÞ\É^Ò€Ârióº=ò°¾Ý Vc\–p!X#ÄÕô“À)Bvv5äJÔ‚Äñú3ŸZ_ÞgOp¬‰·‘TµþøQG>7À‡Î1œÜ²d!üÐR‚cŽâ6uáYž" ú–XÞ*¶ ލ)BUW÷å½nÓÊHÏžj»XTZUñÂ'«zˈ“Bð’¾QG¥øš—€`™É@[Õ›'¾$! ç“ÝÀpë! iò)¿¸—+›d’Ñ<ûË_þë2éó7š–Â)•›ÀÉÉsˆ"p$´>€#ùY¹nïÜL'mNhm–U÷f¬ÊÔf»µàßn/)4–F†:€µ,¹ñg4sá°%×L~Í»>õÔæÿäuâaÞ0ùwˆª½çèe¤×jnSpì‚’~«T+ÍŽ­Ï;ÌŽüþœà²}|%o̶ŸæÍ‚\0­Ð¶æô3G Ë_Ÿ%D½7x°Ènï)b‘!wabæýO@.7l]áÃdd‘EÕ¬/ î“%ÃT©® Áu+„‡Ãe¤+¼rdÒMóö ·^‘I‚h¡Œàè wøAîè¶k2ýåãª`ROÄñöèûy!øXß<—óÖÔ£Ù¯fæ_§º‘Ôo—¶œID‘ßÃÅ_»VëÙÈI¼’kßxÃa8εÞ(šÏVnf£‚GÎ=_\°?òëý? éPT—“²izñû¾ †‡x g¾ð~Íç0aN´‚–fÕ+FxÈ` CÑ›Åȯ´Íª5ª¼½æ…ÜR¦•¾Äu~u«JþxŽ,€$ïôLj³b­aDUA "¤àûmA”: ­®ko:†`­@Iaß»\®xósAv®$ ½­$3hA˜ˆTù´ÆÍ°á;QǯÈáiãœQÉi ½þ‰ ÆVÒ²4jY ΃â ›2 X/'=:º_îP>ÊkÏÑXþÏÜbæþ-MÇenL kÕ`ôW@òB¡ÝÂÝdmz’Ò~¦#Z9’ăÉ‘Ý/Ñpò‹eþ™œ*J×|³[è6vP„ò×îbÇ‚Pq.*(ÄW‚ËsÚ?­‹4Á×;Ç·2)©S=›M$Ø)•ŒÈ:îu6âžœ’§Èý§¾~üáñûcu2xý€‰*ÕWð«þå]ÿû†MczboXšºXÅÓ‰³AÂD#*vdY@™§òÆÛözoàç–úi}çD"2…8a9M"3?ËnÑÜâ2!zk5­"Ÿ†Ïå} ßPñ‘ØÓ+/áN ÚZ¬4è¸vþAçžRï¿P|éL×Ê‘°Ö{\kösYÓÁ0ÿºÛÏ¡Q`¯WN¾a}‡Q¸cW‡‘,0æ¯ZàÞèïoІ(œû–+Ò6Z«¤ ´õšµïÿÊû—v$6³ì Ê_énÁ»ºÆì§fÙŽ°Ù-É–4$ǃ‘Û±ˆÀ¡2Cº²> _¢ƒæã¼%ÕÿOMA³æ[¯j÷¼;F¸ÇÁç#Ü¥vQž .¯_â­¢Ìþ7ÝmIm×jí Þ¦:”máY+É® gcqÉ¢ôÇ糞Œ>Iõå³CYY~lO/·,›h‚x”ª\ÄÛß»8jÒJ<@G/¡ñ]p/ÂE¹EpUx~Òð¤©Ýt‰âÓƒõ¸¡L'ðHGœs"Wêf—”y?‹#*÷Á!ÅYpJº}Ò´78 ¯]ï˜í;3ºýŸÜã†*ë^oõ1OÄ ·¬=¼³Â #8°‹×K:³v'ÿzÚýï¡Íϳ×Ù¾e-åÉÖ=.©•¯G€éÒ ë0gäè0ïÍg¨f7iqus¹Â„–PÎØ¢:Z™yëÞ¢e5xÌ4P;ðš?Ð^/™üµmâMy_¢oÅ2G­éXkõßÙ.À¼"~ýKþjóUN©Õ¼ˆÝHO9w']8“ÐÔKÄ&š¼ÎoÄ#q9f1Þ­5û7 A`Èý4âE¢¥vxU'¾•ñd4Êäö«øÎÖcÐNhâïò)™Q³‰*Q@÷ýã×TͯU:&}­¹`‚†Ü_¡8FÜN¤C>O[ÉîoŽcÁÌÐ%ë/$Ê¡¿qáä£Za!ßßId9Ôÿ˜góz,ïöä¸bß‘G£±£þÛš«1½høº"^WOÒÚ¢ŽPãîè"W8Ê{êEeëÿ`ÛÙo¯~Mn@]­I¤åƒ¯ÌƼ óKZRé Q¬Eyÿ æ3uÆ_ê¶lšæë%Jædïæ‚±À«åo²ÅŠ^GKȘöê>jȉbáRÛÛе&ªúpJv0BL&P€­ºÇ“ˆsÕ葇%ªäô@sìZ„d2Â6€@ÿ6ÉžOØgÏ~¼˜Ú žª4?j쀠Ç[$!¢¾g ½'‰Æ´ÌKD5¬ø•÷qeÚ=ûœ÷ uðõñ¬R)NPî…,¨ weŸf(+âžU˜ºX@¦Žž’™Fâû¢Ñ-—àÒ—a¶´Øl†]ÆÊT-Ù[Hè(y6+›Èi“D 8ˆÓÓ Ê tóÁ{Lû±ÂPô aìå±e‘$$XFý€Aê#”¤ÿÑ”Z‹hvYO¯1[Ò ö$•¯®Þë·8ÎdÁ,LSnê gìó÷5žôê³ÉæÄîCx¬ Fþü‘FøU†c¡ã‚í¤{³°•ç1ÙÇ&¥‰ ø?§éy0§µˆ Óisôë¿bæpùJ²±Ó[ââ!T¿$vûÈ´¨Î¼§rñJBôèÞ‘#ä{Ž—m¸¿r*»X¤“·úÔÏ©RÃÉ™f’Õî«¶C"J8†»·$ô-7З™Îø„m¢Û±øf€Aä¶Õ»zA usXn0ô¾óî-:¨|AR~…ïäªz2±sÄùõò‚æz} · E] q ¦¦`C'U…mbÓqQü™aþÊÖ~Ma8¼3éZ¾ÝS¢,ÃÊFÁ&cß0†àÞÞîË}"Q‰ ç NMvF­i&{êW£Ñ?“û'÷Ñš%’ï95ì.±¨afZ³!w?y# »ò&ÿIQÚDru½éë±Ìµ½óHo¶Ù;Š%fi¿ñϹ|l!!EëQ¯s…Ìs*­Êþ°Ý¤ û¸ÒT‡ãŸB¤çக”á/!r^ø[®«£gîÑW÷†^Ý;là°vrDÉ8Mdä;u&‘¼…­ª…F¿7Òs¸[óö}~w{yכà ´œK°6C6,v¶²1ÂzØÀEl/$Äšåä»ä«Ï’½"éUÂh“¼X_<Ûf“O9gý’c;9VÕu‘0€³“i4âê!bgƒ—bÍøLÆp¬£ÿ0ªG´1NÓ‹²‰\'ùé}ɪiÎÊM摬2ã ¦ ˜$që ´2l¿%àÈ÷Ðïáqë%»úI ÀY}2¨QïÊ7íX¦Ÿˆ¶ôÙ6B]ûŒ’qNSýNÓ§lqèår÷¾yš ”Oq¼Ô©ìÚ-l‡5*$wÉ5Oºv„Tk+¡ÜQÚw'\²¸ég—²Â™ò€e$£Í{½@ì—i:ÇJù3¾;KéX]‰yó~´À¡‰Ôt ÎÇqþ`›ˆ týý ªJủ²¤¸¤ïîi˜A©¡JKóYWͲd÷â}þ²M´;Ùü‡L e¥öXüÃûÜ.Þþ:¬èÐð áÒ­ÉìhÅÛP>‹T©¿/õêöþýšÅW¼‡çÔˆN³ú¹Ü™_è8£Ó0íÑÕå.1Ã–Šµ\äÌL¨çmaùîpÎ'àShìX‰Í£ÇÎå†þs¹žUÚ?Ùݱ<(Áûêœ}.Ï{ÍG'ô2Fœ,©ÇŽÌÿ[“Íßlj@ïØ~æIÒâ§ðŸÛ^×ð^KïÒݲ)ñ”s§Ø/‚¡V‰<ŠÊlÓPóÿlÛþÔ™Œ³g™È á(@‰ókþM$’("ñ<×ò#¶FŠÆP}Ñ›Œ' 6êÿ: € o륱•_ÒÐ>ù;ÿaŸ‡Ïÿ’E÷ó»ÔÊ)nTP½´˜‰5‡óHÇ鈖Þ_ónÈk5"±¦Yü-I®5Œ¸ÿÅ‚æ"úõÇî/ÖñóƒëÿxlCM)arÍ㜲}ª°ýrÕt½­ì0„~»Ìr¶’Ê"ž™³g»ê umØQ¨WÄŽb oFü£P)Nx)Xœb©¢Š^õ§^?è°ø‘µxBxeIL?ÓŇÙ+æôUDËn:PÊñ©Ú¤h•óþ+;ÜØÊùcjÙË$ 'äô:VrÕÞ·37r#vöŸéµZ×È †ÇÜ‘cÔˆT¿°ƒ«ë¾ÉûFtˆí$Ë.ËzaMÜdTAWu·ŒwçÀOö$ 9ÖóƒnæáŸ…©\ëGذeü³ld úYŸ¥À˜2z®ÅŸ71nEëÙš»†{õTsd¶Ê¸‡]½`o»¤ Ê„›n¬eÑ¡—œìÙ‘LñXÇá>äëx•» k £"L=Ý@ÂS/yÒ‰+ßÀ±Y:e/ÇgXùÙöç‚á8CŒªq_ñâÇ3z€MòGïmˆßÎդЕÁ¶-_lhÅê6}t‹P¤L·Ø6€[uã³/ý‚qÄxÙºíc@6Ê*:”òs"‹êùC‰íu*à’ò‹#"ÁIÞ뵦i‰@œTç½f£kº[ò®˜íéÌcq<ìì¡$ŸaÑY¤QáçYXË*ûŽò’÷ß,gmóƒ¦ô]Â-6ÊÙà<¿»h•qM–º5´œ¿$ÌqÑNÁ óôÁ¢É·ÈN¦r°ÉH½[ؘmêʦê\2I’\0Â^&üH´â©ebã q°.;–@ƒ$ðsÒî´‹¤›²L«Öþñˆd¾(½šß!në`9È€Ì÷kÔ¼;(z϶kÄ™!p>~,³\†…Õ¡†˜#¦±›¦U#äâƒÂÓPûŸVh‰bEñ¨jxÞ¤:Wo’Ø_ðÝî"(šñüröWì÷+ñEýb¸Ÿeìèyú»aêâ0DYTð?+ßA§”S‚ÈÞ´¤Øía m­à”ƒ¢Å®ÛîÒF„H)}pîBÛ7 Pà¨Üþ3аH¢aL)Š“’5o"Ä}Ð&?¼ìÔa»ÀìdÞ®¾ý$÷Åh/‚8¥FÑ@)òøÙC„þZ¾ Bï,àx%œ'QÐý¶Ç¿|ÉÒB0©ÈJ2ÇîÕåBÐ"§+'®!‚ò'øð=„2?T•HªÞ(þuU@ÛHX£ÀV°~Fÿà[=Ù€3ª‰¼½»V>ƒâjµ¨È-d¬@Ü£¸~†Ó*}”4*0^fNRËO‡há:®e¯„‰€/¯ØB¯Ä¡úÚMªÛíz ÖÔÜ’â€nPa:²7@¥!¼Æ’ŒY½•xÁ:UwËJ%4Ë­Œ”¾Z,¯Gëz•²¬áÁt=ᵡ‰úei®Ã¿X‹ wk ‹¯­é_PpÔïú¬ =0ŒPJIÇz³ùL8ýMÖž j¤l%JŠèU eRû¨)P¬eËF]ÿ^Œ_ÈfèPf€BËçrme¦‚IÑšZƧz®Œu·Pô*dçCUŸå½F(¼"ã–yâ|@€"Ëž°yÏóVU¿ŽÎoMëÆ<´Cx3Âi½‚óîh2úO³-ßþ`%è.’oÃ/(¨QûÏá) ýË¡¨ëúÀjȸ¹ÿê2ðßñ/9®$%¬ž¼~Aß¾ÕÇ$CJY¢ÒÞÏ™/jýôôrÓŒƒE}±kç7Äõ1KÀ‹ÿ,±!a¡.‡×å#<@á^ü•[ÀÞ¤`ÕÝZ9Ä11» ï"Ý_îÚö¿§ŽÐ6Ôëþ×<º«kêè³»ýgîÓª¼uíØµikXAò^øÐíë'|·§<Ò˜²)V±và‡Ä¬ =‘ÚKnÝM™·¦ãê4ïuO³Ã—¤õNQBVH%Ì¡Œ­o°`7 Ž>ü¸j¥¡il^-øgŒ&÷!n»³!Uèf‘΋ïpcOð¥ÑÅô‹ZÆæ½ÑSML¶Gà계0ü&çQáW9=œ©”©ÀF¬â‰sÔ­+°y€‡Ÿcu¿Ž—~iþ‡¡du$]ºBy])îYd¯—Þðèrï=G0¦¦·RAŒç‘5=Fö¬Ò}=æ4:Y.ÔÉzx7•ýT!ûzƒNA’÷ñˆ fd#OMüÛû•<«»¤ÉR ¯RX½ëE% A‘AÕªXaâ•i°â¾¨‡YO/6^¬bóKŒ¬Èø S?O4ãàÄ÷¾áÍøÎ‡6W²Ù²FÒ0b;EßüÞþRŸ Àè•|`(°É„p2>‡–¶JZK ·fòým}_XÃè×K&‰Ï¡ym" Ê¿yßDŠLÆnpÖ©ÃÙÔ 3ÐÆBê¿A€ú…„“é\¿ä}#Xò¡Ö,|Zœ¾/8§ÒU`n‹hþ€ÜVü:˜’)š6 |p=.ÙmŸð !¢kV€°=ÊN»#9&UÑ9(æzæÞýîøgû7ÿÓïT¥·(?*$éöÜ _iã`[öRéB:qDÓÏ'ZÃà¬{† п0ÞÄ…ÄÇãüÕÁÕ÷¥5¬SxÔߣ—ÏP]Mß̪!-¢·‡²r©ëÅ@ì‰ îÿ+H3Î'ºáå6mVõYÒD.=B%Ó:ó<ÿ&i=33IK÷«WÈ(­zÌâ Ô%ÈR5L½1¬YáïªÁíÕI %·_<—û…Ìâ{¤5 ØÂl‹–BÂùž±3Œà¬Y´•_}”.`¹í™’ù)Ãà8óëþÖÌ#k÷;]]‹uÎØ6¸mµá§Ö†Ž"0[dóÅé…ÿ…ZU¥þ‚SX6¿—»SJMÿÌ(üÖ$ǯ ¸IÖSçÄ.Ïvë~}*„ú?!¨Y†…ì[=ÆvìRÎx­ŸÈ; E wòÖÔn!Å’Ù<ûÅbØ´]ªå“•Ïî#umªp³¿lhcÅz§k~1ôkU~3²¾ñþβ !:Ûªv–g¥ÑæªÖ ) ³ý›Éiœß9ý)W‰p*™jÈæXepˆu{YV∜¦:Èû¸xp DÃáò0}—EfH·‡Ï›”²€T¯#™ãšŠ\ŽO DÚíÝÒ-~Ë2elâϲ¥U gÒŒØ[!ºteÞ·ÆÆQ—c%¾ÑÔªÉ$]ûݘú(¤µ8ŠnÁHp‘K·tfs4@Èê¬nŸR‚½6ÄÞô”Dÿãÿ:xi…HPç½>VªÊÀŠÒíOµøa'3`ÛIʹ&±çÕ K; ˆ'²©+RxÚ¬¼×½g@U#½Íàk²)[ÊI²¬Åõ4ˆ®Wß¯É Æ œ«XÂ]Žƒ¡-1ˆÂÙª¤Í­/aB‡,æô¯ˆ:M˲’?f>ã1媩x…æ™Æ6Ï çíw²w4{Û÷ùEjºó”J Ê’4æÐ³^ÑÈ OXûßuX$ˆÿ“¾0xFOé$¾G÷B3ëNb•0.étik%®8xÉвþVÖ|/—ØrJ_¬©ÿRL­Ç  á郼Æl(¦}­²reêŵµÍ9] ˆ MzbéµÛço/H<ÉÖÁZž±.§/I}mXð É\DÑ$úE¹jÑÁK”Òû _ëõ·ÙDΓÃYHwÔõ뇷H:ÙPRJ90,å„˸tíÙ<Âh“ÉìgùwvI$Äê2Œ°©“!H¼=KŠ`nÈëm¬p –ÜK@xkFöì«/²ô[žŠl›#~ -l …3ö!"Ri"E3L?-#…µoÆ–5š‰)fCy_]±ú¯jñº'÷×$ jdbQÍ3Ð1ß½š,Î&ôÄH™r†}ÇÎØ¡?x–ûkáÂâ. 拉<Îuü UåKoY³¿BcòÚs⟊„#vÞYïEÚ÷›½OVÓ/¥ÁÑÌøCþ+, éÁ8ÎHd“*œi.5QÊ0hƒv!nù½Oä¯Î&•èɦ„ʳOçÚÚažŽó{SqݔϪh[`VTyìºÃoÊæ #æ7M~µ'ù.Sšx/¬vRBö…¾q³M•Îâ&_âi|·B †Ç¤­sK»fûJ©„$ çY°Nœ4…[Ðrì¢%½qÌZ•»ÜTdøWÚ2@B»¯ú­Û»$0ûãû*}È)Ò—J‡ü(lWý=ìP+_wÐŽ§ "¾¦šNPäeŠ¢ ™G~‡^´ù ´*wY(.FæC²¤¿dÙ<ƒ¼Üt“Íö"”Æèï{ÞW„”ÛÚ:ˆ•¢8ÜÚE$âPz®‹aÙ¿:]ÔÄé çsé¼§¼Ó ÒECYŠ|˜o Ç6ßX¾nŒÒÀX* ÎÆµ+9Ê·(G5ü©‹ ðÍÉÂR§ñ3Øj—-A•iE¦ /[=P÷“CñZøjÓ¼á8A˜‘Þ¼—Šú@œ %Ÿ¯îõ be½¯Üöçà¶pí&i2¢¼×G摬µ9ù<åë«OÄ"«:?B~&„Kå ìíÂûQ’ôJ&b›ã\øòNí Ô‘> U(¹«`ô€BwªÛàNÅËPâëÃI2ò+{ŒŽŽ$-NÕiô8ÙCð+#©ÂQuÍ¥R4Éâ™l8‰Œé“DÚ¥œg±+A5›<Íý a}‰õܯOêÛ5lÇâr^ð—ÝXÀúþ5lÚ°E­Þ,/¶È¤yê‡p„8y·$÷JêqÖ¾êh{~…` d4C…+_B†×—9Ž©Ç¡Ò¿û›Ë¨¨¬+/Yµé´òªµ1Ý–nIIüâÅ­Ù,kFˆÖœ+.Ü )€ä!o~¿úL&ì—aû3ÏOÅÅP›³f/$–ób–擄ü:‚ ‰Ó7È¥@eì<Íd†ÐQ®£å8×m òL ¹2É&QÇB¾P c ã<Ö±:urò§]—+Ø­e”ô¥¤/ ‰´ Yœè”²îŽͪfä…d•×``­4VuŒw§ [ÉÿUbÉŸÞÓxÖ>=ç›Êûš}¿LxÒRò©@-ŽÝ$6^^<‘´Á9puˆxšßäc0J‘–oñƒe±û6f ²ú–댷?Ô ƒU틯ôHÐ+’ú–æòÌæ×¹Jýæw׺©w¤È†bè|?b ¿ŸqX³Ma}ù{T̾—2nðåž²ð‰ßô-9ö¥ŒÇn|ỺÉêélá ŸìÐ~C&VïNWÈöª4oÂFÅ$¾3¤AÚ9!«»òi.ýi_€'LšÈÛµ²`š„º²B‘ ËÈÈ•!RÁNZ6¸³ùÁ›ÈUémÆê´«Ña“+N>&Röª`PAh€¬ÊµgœN×7]¶F\Ñ,ŒÈI¨ëM[œ¥IWôÖÞÄϯHWæÔQ‹àFË¥Øþ¸mÝG¯½Ñ”¯’0 ÷ÔÚëQÑÇήڟÃrOÉ­C¬×žÜ/°Ö¯h¬¿ßQoÈÄWo¾HíÐ*¶é—©FbÞœíÌ<ÍU¿NëŠM‰–æÚSëmŠ«·jDÆ·´¡gS ¹J]þ.ßÄK(ÑåeòsÑÁ±v¯Ñ"F¥'¡È:WÝðýR‹Õㄜ—Ò´ô߃¹ZµGÓB†[¨Yå/Y¡Ü1”*š1þù];´&‚`H*.ÕKy¼IVlS…V *%8S­%ÃËóõkíœÌ”\׆„V¼iA²!î½Oo¿Ì™‹ýŠ¿£–i¨E-#(~ðˆT“=¶@AõeÏ?ØÝTÏhl«ÎµÖ=ö?úFMZoÄJäU4´¹X\?FüÒ?—Ò& Ëâ-‚zņÎTÑ2ï…m ”2Ùl±¼ìýÉïyo æU‘úSç*3ú‰±™ö!RÕS˽°Ó,WÉ£Gx¦wŸe÷ÒÉ\Ñ[¸K"^öû‡¸°†ä>Üa é•oM/‘Ù.ž6ýÚPÎaŒ5Ó`bK$ÓÆ©×Üö "qs“óMþìR1ÿìX.*»"LfF‡AŽyòÉþ²œ†’¥y–u0âE˜5•sàZ–UDo)â1,¿!é I`ñoMA±"^<™Ç®Xc°w×þ3ùJ”¥¯8ÞšT¯™H¡ïÛ1ÆB&ßÞqy·Õ9{z1µjO@ÂdûÄ99c‚£aâqÝ]#[צã²)’@È'55êÈ(¾ÿ¸§Ϭ&¿ÅÚ+±DU‡˜a2¦Ós+À“)_Ëmc\mŽIeÎÄ ˜’±Á ÛëËkq?B¡8æ<µ*~ùmVæ˜àK±w%øZéŽÝ{÷F"a]R-'Éõ§êÖ&ßä…8m­9bß2tH›˜Ôú.´`¼¥­ ¬åËöÇß#Ýzf÷ÖVâÅö¿mÅ>2ˆ`q<Ÿç)6ĹnXRÛ¼›ÁÍWÛ= Äé$ ª¢4(©#CdÿÖs$ÒUÏ%| X':ù‰oEóU6¿¢n¬ÃØ÷êr­ý¯/Éð¸> žÞ2Û“S“GBÜ…&û¾"t¥:ó‹5Y’Ö,\oÝ/—mÚš÷¯ˆÑ\`9ý®ï™£{3Òo5´¥ZYÖ)X‰í`,˜6Ò(Á/‡vŸ¬˜Uw”1}9úœUê@ò =ÅÇÛ$`BŸ¡q΃U°þZo«š>ã5bÄàÖÈzêZ$ËŽóîšÑ\ô«×pÒ@ I¢i¨ì?Pà×T0“u‚6´ÛñäÐT˜/÷aUQÌ­ë;vhüÛGg\ëlíX.c†SÄo˜—”ü“ ùo~V½ûh(êaÙ’½s¥0Œf§hD_’WÐ@–²rµÙHeïp–Z¦íAÉ{ó=xËØ¬ì°Žþ§MÜûëøN, ¯ËÚ_&ïBƒìqo°S¬ùTšÁ³jÕ=Ÿ‡Ã74-}4k$׳Híi½›Š«é²ýv ñ‘Ÿ`Ê5ë7ÿkb›ÏÈ‘è°[@8 ÉNOW¡ ªau§höP¥…ž\åžÐ7¼Ñã¯'D†÷̪5”¯{³´I7³•dÁkê ³¯£G"!À‘é0BõŒ –¢‚EÌ?œšzh†d;3]J#M$ßÕ’PF†úXM}ïÞÞ6^•θþÛ¤=|GצÖlÐëz³I`ðÈ…ò´%ÅlòD-T-ÔøznKŒH"%ÝÄ_"»>þUSX.9ÍÎnqŒCQ+žéÉ,´Gé®> ûšÝZ"6ñ+S§-¶ÝqH䵊oövy:£JS׿8×A\XÐ!þ­æ¤zšE;†`k«þÏ®ë²ÚO¥"òâ[œ‹‹‰[‰®œ`nú«²Š2¸g +\’‹à1`í>㣿±²‚hÇA;\†P-gCÌ>‚+yC ‡0gë)ûNe—*SŽèa&·Ž6á0ïÆÀà¡@,!¶Ý\Ô¹J±=懑/ŠÇH%iÎòž61#MGþû-õí©sÞ& Õƒ—'T„XbŸŠé`¦ë%©÷ìåͦÚê€B-MˆB ùKlŸq½ Di•O×.gq¼Y×Ä;áZõòìÜž¾ØDÞÖ›aÀs¯êböBñýÃ,‘´,¼€í‹Ìº¦¤E½‚p¨J÷¬ì '~¤rå|¤<ªubA#3jD#Á×»U‘;ó›:˜Ô°Ä`=~ý ßÃz_öÊtÁÆÖ/œPQÒj.îû9ß [NS â%ctÑ‚Y£ù@¶•lðlczœ0~nP師eŸî±Ý1UÏêiTœtãÞ óá1’2¶Ùp‰§Bµœ0œfý¬¾ÞØX×ìËA.Þis–,¨›ƒ Ÿ(Rl“¾âšµü.ŠÇ1vÃÉôvü3ƈ^–ÕÛ­B¦Ÿ†]^«—…¯MBÆ[†‘Á~6÷lü+¶o·ùN¾¼ao3<¯F|¥\ú:^ a¸k#9Ò$Tèʰ³*° lh¬{6¨}TüQãB](\žÉ¶‘®ª"zšÈ¥j4ó°Õ$ØZ²37-,&Y´û¿Äóq)þ´A”¬Å '³žý<§>Æ—X¼LØDÝÈšÒ2m!kã†k2(ÚG+AùõÎ'ÍVYø+4“+Ŭ”n‰Êâ}ee²øØ÷G(4]ÈÀ‚!×wÞ¡»Fh¢öwx§#0gØèêù§·šôÞŒ çjIõ—E3åGµ‹q¬ió†SÒ¾¤-eüDÜ]ûÇÃr}ÅãôƇpU¤4UcX’ò5; bM;´dG…}'Éû¦¾¸/ÿW[È$H. ikƒ=)ïܸòBвÈM± ¤2eÈ<ÄÄ8ž;ħÃ!s,¥—Ï{ÍL¸[ì8[Ą̀"Óm.¹•«Rõ¦¢K[ _€°R“¹ª8«±ÁGYïÂ;´r‚jH½èÙ©%m QEsqbÏîLúÏü_½zÁÔš•(‘t^¥>ȘÌžÅÿäû¥öÝ„ó«úü×GôDÊ©w ²ôr_Óè~*ÅÐëc åNJqGSö¦‰ux²§ÈíÄF “ç„‹Jû82œëÇ¡¦!8`´“ÊÍ« ]r=‰,zÅPØ+m ààLýÅüF¶'áêP!Zõ)ÙÕ­Áæ—C¿·!\Òp¸T–aœtÖ†Ò&~І9ÊÈõ8YA`+Þ¡o¾Ñ(…#)ïRÝ&s™:‰{›‡vò¹Úç”æÿbY3ëª\~4‚çËnÄ«WáÑÙ,X°h|ÎeöÛQÞ'3þ‚`u¸)ÖZ ‘£å üW(C†ºô,½“ê $Múi±Ö…a\Ác1eµŒTolaÊNÜÄnìÔçªä“”õt“­ ­qãú? $ óá/k†EFY8ïêš R §ÍâR ̱•-½ÿKXŒL¿ÊÞ€á\‘M«=&a!¿]F¯5ÈÜ\?H‰ÎŽhpý˜æ¯– cfÈ&Ø×…¸JÏ=AéU0Ç.ú^¦ùô9mR¦i °å³ŒBr(3S–8 y/4šj“µ‹Õ¹ mê3{Š÷‡â©x5AW™ž&f•¼`±Ô5¬‡Te™]^ÁŤÉX7‹öZÞ­eá€Eï2•4± ®Ùë_ - = `»d Kö„?¼«YQuN-Øyê] ökÞ§¾\lwxQ çdê9Yº6å…0h‚UôŸ}‡Ã¹¢-t±ÕâòK Ú}MŠ›àŽÆÈ\¨&«+Öë›LZ²8Ö‹"’Ù p2²¿˜àãO©uâñÒ ‚&•\ìHæÃÓc$U±ï*¶q^o!e-ÒÀ•KæºÁ°ü ¡¸ä£¦Þ”kÇʸ+-U6Ñ"bËÀjè^sÿ"I‹”À–gÈÒ&bqpüæ"gÂGÓóÀ1llªÉó”½z6;Ió)KÿðWÿÞÖ4ÀB}yÉ6‘/úñþ%½c~‚ ËÐg H?Ëy…fDqh_¯aýVuØê²Ï¹J¤kñ#&I¢”—á×xl„—hA#ì”èpABí¦Þ·,>¾•-%jÓ€b€!±ä»Ð8’`¢P¯øÛ†ç#´f½¿¢a½ÚG†ŠN¼ u­D5鈦\>Èð+ë}Í»(ƒ‰ ¨ã/Ûå1áý3kŸ=”5«Â±c{MçgWnÏr,/ËøïÑÝZ$§Þ/v%ÓjŸ÷šŠ!Õï ¾±þv€#ÓÒkæôÒWÇßè‹—5v»¢Á.Ôœã3çÕî—LRE ºOZ=¥ ã…²t‚ÒZ8‰S;‡¾8ñïnDÓ5žøU;AþñÕ:L±²ëËûf¤ÝK£Ö+šÀñ­ Óa“kNBr¾¡4Ò«ž­Ú©Ná۸à 6ëᤕÄ™Uc 7÷^$$ Š… z^Ð’Óu+K¥3ŒE-ùàs¿+ÌaåBj^!ªq¬”B»”ín$ÔUQ•ßH?{ÍCõø"‹óC“8Ãy´$l¼ÒòF8µe¿oÉGùñÑ,ÝBóûìm¾Ù°ý%ƒJ\6Pq.m’¾øñ_Í}á“aA"K=fjæùõZÿ7ÁÏiè¡ø?†€Ë8ÿCÞ×ÍÀá®Es!úyOgˆ%A0õ|Ü´@Â^‰z£Ÿ<Ôˆ:aW‚”qHqK ô£%œB ŒðÊ(r®@Ú’=?ú£Æü&™YP mn!gŠÝ¢JéÀ…d·"¡ ¶¦ÔŸP2k’%5@ÊVac|8dã? 7{(q¦Ù­#¾ÄX¯óÜHœEâ?mXò:ÃkáÿIrœ(ˆ3(´ÊçóíŠvé/_Qeé_#]H—àZ 킱¶æ®äÃìóJÔ“ ÌV­"ÞŸTR¿awÑßn¢çÎe:y®¸Ò+oÆ÷³ß¦Rt x;ŒKðî3k©{â NNŒ‚êÞ ¤]¢êˆĘQ`¥¼Ifm~«ŽG—vPö^£Ú¯}OóÓüÁü”Dl#_ºÓ Zãu½X80M/,ç¼I|\ÂCµI…n&-à%–~¿z4jåô1£1“&†Ý‰ØÝàž‚Ë£bkµÃMQ5•m¨‚¢åËÃ]¥Ä+@<ÃêilÈšö?‡ §~Þ¸5+_°#ëOAÇð•n‚Oäú±ÃŽT#-›]—’¹{º€EÚE ‹Àža™+¦TRò¸9ùlrˆÒ=öÕã9 NÆÞØ °ÐHIw3ñâHWÜ/z?çÀ©áE 2²‹+ää ÿ¤‰±³§\´PK"òà$¾Fl‘ßbÿ¹±öƒ"`5à“qt‚SG–¯)øæC¾ýÅL`×POIÇŠ\xÚ€FpÿÉ 5eø!3Â!SL´®Cgòn_•÷DLDø7„z/Ô‰ß~x}Ï¢êP-Éy4$‚“„ÄÎiú\šqØ*~z¸j¾SXæÙ{ßéú—(…ùô42ÖW"AõIãÙ»ÏÜ¢û¨çöç=K¼'Øü¯áµ7 µ¤6Hº–»Ž†4"bµ·ÐÈ;ù±mk—5`þƽM¬ræHŽÂö†¦‡P€¿ðO-ŽRàäXw4²·ZŒ²tˆ€Ì ÉVäšh©LÊFÀømgù—»b;ØäÆn¨(븶W2;,ÿGH„/ßN., Ï~fÝÌ{ôørq‚µÙ²™Ò”Ù‹—íëî4þÐçU)¢SÊüo´ÚûON~&NOÄx¤lfŸ/ŠìcŸÑ*Äøì /îOHVáµ]õèéú¶xÝŸbñØc摬´ØËN£ÖšyªßK¸³ì¡Ú›ézö[&š­-\Þœ~éÍKVÆ‚cí Ž·)ÂÔâ1©Å.sM@ „R “&|$YDYS -ʯßΡ(T7—³Ñw—”:ÿ)JÀ¾OBTï!R4là).‹ÝhèXBÝe¹ÃàÙ¬³‹ý‰I™Ý·Ó½ Y÷Åt Ù“k¿îK%«È=ó­L…^ÿu$gÒ5öæ½\¾†– ²YïÝV‚À•3<¤(©% ñÈ(Ý_œ-š±>ϲù8:OX­ëŸ©54£9i“r åüí-Ñ)ìߢQÄÌÓ"¬!êÚ—Ñ'dy|Êž½/ºÀTîÞISnȳú¸‹Œc¹d4ê\ós{q Oÿ8צ¶v…j›÷+Ÿ»ˆ¡+Ô°À>§— L+Í'‘›?Ä¢Oªc/èû«jW’‹ddÚs¥@M!¹%½O|ârÙ¡†=FN•)ÖíøpÞ'Tù•sY㯇&c/ñP^9,ps£Œò&Y³Ÿ?Ÿ*‹Ò#*ÞÆ¬Z„éúà ¬}õ]ƒöPÎTEâ;Ƀ$9È|Žün¦Ám»+×t㟥öÙOõˆƒ¢“T[j>"У„u%TÄPã艘9¦}œ€$#(ÐAZyöhoK²'Ü•6¿´_ÈÙ%?)ýJŽâ1æߦ5uõý^(·*YÜCèR¾'*õ¢¼ û°-µžS²ú|Oþ%#KCÉVÑB–­RNSë·hìêì¾ÚóŽwœèÍ&÷Óäÿ(©µIøJÞ§X}o{F­ŠB½;£ \—(Èý¯„7Šg¿2’ LVÝ?B¾‹¬³+ïÇ&æä[QBÌ©ÿ"oŠpj ÞcÅÍâ¶ìÕCë‹-¾Õ³D!ß'SÔÆObYfÓmŸ8b"ÍrÞSñ¨Ä^²_ÜWßœèÕ«šíoh¢5”toò[‚) P§7õŠÑÍ)‡Ì#(õüœ;±¿ûÌ]ûKšmxá,›¿¿fw5]My3ì;}1A4Ÿ:vT=ŒÔ¶ºêèvU8>²â{Da !Û@ÇwQ˶—ìU˜T,jÎé$¬…±«  œªÍßôtWíÙž=üÒ3Ïë;–õöÔ[ù¾jó>± á3mÅSד =ûîʽ?€ÛÊ  ¥“åe\¡žÅ Áú-ÙÄuÚ¬üx± þpdl&[ŸEr¶‰vdèleÖ{½ mRs­qôdrÏöPÒ›ÓÛV»Ø¨eÆ›fâlÔ´©ïl×ñ*ú_§¬á×Z½6µ ’J­ÒÒ$Oj݇r·ÂÊè|rIÁ’ûâÞVà²&N"ÌÚøærÔR5`pTZÔsïÑ7 <Ö)}û³B sùM“dïK®M«vøf€FNQú÷8OówPe (°0E§2¡˜dÖ…uu·ÄôƒTHéI0™é»1,ƬP>jÍÁÐέç}“¨FÚO0þ9Þ‰Ò¤€{÷‡X•OÅûdÁ‚˜¸¢ÍÈíôž!FÖP õ6kŠçNG±XMQŸ(™¹: .P·b¹ ìN,gÊ~À£,I¦¤á½ZGöFÐû²G#SÿB jCɪåâžÑ{Åúè|¶è°‡qRаT2j‘>ÒL¨jÛ´Ðü×&8Õ›/Zäq4—«xPŽ•«$Æâ9Àc’†ÞÈŸ‹â—Ç\â'ŒzzŒM±àEáoêb3f¨o¦Ò£÷¬ú{Ñ)aùÓm¾Ö‹MMÆÈ–Çлíå‘x—H“„Biu‚ÎÈb ÛT;6ë£8ŸÌ0á’—[ #’óüîë =¢2{MŸ>£® øcnqP+÷2ü6 ¹~-V–dlz%ÂÈÀ£ü._yzx¤q ëKÿªþc’Aññ†#ÞK º±ÈWVNΩãPØX5Ñ]Å žšP\yVs`Eßl«ZQ#‹HB ‘g5DÁÚÌ媔´¨`½ó½ÕüÂÀpR´¦’Àâ‹Ï® ‘±É{œ6x%ßMéöï^GÀ­0ä¥zdâÝ­4§…P¦Z›½"ÊÎÆƒgr²êl‰Ñä€È[Êlêèä†ã¡Áñ±uÈV–B¾®Ö=9îU`c 6 žP¨¬£êso´ É%¯äÀùÕé¢mH&¹å‹sÊGUG÷îz‡ìQ Ô/=üÅæš$wX‚¦Ä;ŸÃÛªä£LŠ#[êHmY©rôRÃPŽOÓü:%YÌh"¬Á{íA‡Æ4{×;2œ¯70)ó·À¸ì.™{Å$3±I†òœ„Jtm0H¼áÃ."%/ìƒX0$õ½»M8¡¤Þ\7ß„£¢ÈræumäÂee(1²)§8÷>‡Ã̬MÇÚ×w$Ò,똬´Âmâк¥m°Ž5¯Ã „Öî~X ùC¢M¬ºÐøZ´ñQ;]vY—*žÛ³" 4Ã7¼»ÝÅÉeÞÕ"[×7B$q¬¨déoÍõ‚†c~®ú¹ÒùÿÁÔêW…¬EIF©¾3wâ;ù#È@YnÞ´oMçýD‚•0‹Fç:ÚÏWr¥˜i­Ú%KÈÚhÝ;s\­jìnŠK`G_;ÉhO „tH°hLÝn|p5£x<ÒxĈX_ž‡†NwíÁBð E`ƒtH3.zˆLpBréša;9÷æ›-¿Ü?{¯¿ö/ÛÁ1’ZÄ K!MKžÑПÄTC Ü yÝuÙ˜GvßÓÍCv_4â`«èξ\¦67B®[Ž‚c©G&ÙÀ—JtáÎ…ö|R†ª¬²j×?ÿX_”³q{sÊ–1@‡W ÿ ŽÏÛï¹êMhΨqÞvð|U\¼“y…¾†q—K6Äâ@iÛZ²$ï…«zxÊI’t¡d]4Ãæ éM ÄNаž8$Âofñãåˆ\NŸIWÃSb7·`ß@’ƒGdH á} ýãPi¡ŠÏ+õ|ËsõÂfml+A†ê#ELX”*4„`«ÒϪhÆzGŸ¿ì2³®ß%{EÏÙ(;FB~"à‰ÏÉE-eš vhêÊÖWï^KÐM¥öÀŽê7Q7‰ˆÏ"•À “íÓLo¬ôàkÞÅ‹š c!{޵MRàx¼K ˜Â0 îQdwxàîÂŽ0¨*¦ÅÁW Ž›ZñiîxG#?Gø2 YÈ`ÔŸÑz«0ñZN8ös€ã¥£úà$RÞx]ä7ƒíØ2ƒd‰þ”ôcé2À¡· ÀÞ‘Í<Ë’Ž_0÷ÂgãuÙQ¹/—˜—CmJÔæ$ Ÿ–œŸg” Ûè½á«Â™PÙÍÊl½v|–jˆ³ò}tÊ‚ -«ÔPnž<$=$z‘w£Wœˆ–YÝ yÌ8jPc¶¨žØõQ<Ï£¹6_¾·ƒt/yr~ŠbüàFãSθ3?/ÄT;RŒy|jÑÀ™;Òƒ9i´‘Nìj@)î@q·âí ¯4ŽätrŽÕp©Ì$mÛâzä.ºª˜’Fe†aIò| f™§< 4ó4¤ÓõMÕc©¢A´ E…Y={$1e-ÿŒ†ªCˆ(êÁF¿lüVj #&˜V/ùz… ÐìÓø«W…öêÞ4§³±*Ñö¹ÐM@ Vü+X|G—¾U¡÷{õꈄ3ͺ‹J³T·a/;¢;‚äeÉ/¨PuEPVþ¡£X¦È`¶‚I¹„•À@ü¬çdñˆÝéŸ&1B$Ú@W±ö~ÎZ¥ÿ}{þ¯rá]û[d¯ÄEôûœ…°6<¸Ú!“PË_¿à_¨X¤4×¼(j>©d8,_e–ß3L‚O7»t%ú3+! 9 ”„"ÅA€Î¬ÛÉ:íF߸„Š(eøúì~#nHacéTy)vÅø8šTÐ'³Uà]²€3üI×7É8¡=É{Ø<‚s^îH­î`s±V, km¶%èe¢¡ ‡¯‡³¼^g„Ñü½ˆ.çó^Ü–«jd©Ñ“ÚGÖ9þÅœ:áj'¯!ìƒÓ€’š ­ËôiÆMa’H˜ÿô½Æþ""ã+JOÃNsˆs&OóTcÙ³ý†ò\ÿ0kžõ^ö[ —[ùOp…ý)Q¡ägâ@Gˆ—i?Uå¬Â+WªpÐÙ‘]»U§¢‡ÁýüÕ$¨QKÊÓ{ž@íd2ûgY:úªø’ðpY,00’¿>F«jWä"Wjé¡z‰FÑÝ펆œ¹º9ƒK ÿîm )gïNv0¨´i¾`*``«çµì“KJ (ûíˆ'%yÇÒ‚á/ô3 ýq“_Gvö¸7çæáýY/TÀ¹,(ì5ÈÎÅñ8cd¯½š‹„óþþ)öß°ßL†Ô™®.§‘_±¡“_KiÏ^ìÃ_†öSëÑó>v ËÙ·†·é~^uZÆ2,í:ál[W¼ šR½Z²×/5|x´Û‘û™&’A\´ìaü‹y 1™B‹JUÀ…r­žF­µvfÑ씆z^½))·«÷†Y‘LÎå™=Ç!luޯĔÿnüÝ‹’3õIW5Î/· d±Ü¶Ôë Úr~Âý®º\°?Gµîiô®”t¿õ¡±å÷dÕ~ëã& 3Ûrˆßüû¿ñ<óúÂdªÅêyóZA¼©ÒÀ%m7RWÇhÈGŠRSÉp¦_³šbðÆ’;[63¹*Yx=Ï-¸Rd*oD@*ίvÇxþ»§Yø”ø~óBxŠ8Ãü´¼xu‡q¾ZšNcŽã¼úÅøà ºÉoù>ªÊ’ú[f ²†.x5ƒJQžå}j%¯fþ‡à…ä¥2Ÿ¦VÕŠðûKšK™pSì€_¾'9ñF7ÔÅÈá³yŽû"ª*NíÜ!nãœ,cMý‡AZ“ûLç®0)®‡`8É;Ñz;¬áÍßN±®ôΉ{&¹¶ùÚÓzºÎÒÆ¯¼'†!1SëWפñÞ¼uÁ0 't½d¢5Oÿ|EYJ|é@§Ë´neɼ(›@^W tS:›2î¦Vë|®‡,Lê­’$ï“ùÀ/>ÁÒùG8» 6ªÞƒÿ|Åà„£ä¦{h‰¿‘×ä7uB’Ö˜¨ÝÃ1ç.h¡ÝKÿ1ÌuWæT¿;§é÷3ÀÝA>ì8Õ‚K±Ž4e¹¨¯ñ¡“ꈘZâß0z·IB€9^ºø;Ÿ_q@g*¶gÉzÕ~3˜§¿x÷ÕÉSv§œÀ{ —*êI‰Óªì‰D@­ý=Ç8AòÈØ5xÂÔþsÑç¹áÝ‘ÃØî åhÆ)—‰VÞdœ(ùäÒ‘_* çü¦2÷€‘ûÞãLŠ^^«ü/˜°ñóB?SiÈUÔ—„–~²XYæƒòngŒÀ(¼P‹=õÜ17.“)$“äWÔ©ŒÕÜ!Ð’î:à2Þqò+Y¹I´³Èo¦ùÌÉ]€ *Ø[Ç>îÐ7=’¿å­ {Èé™ÑǼ§•Y¬WÓõ<ß“Gmrf5¼âc²KUH2©…€,@wLßëäÞG–œûc‹BŠHÑ)°ëÀBµµ,•wŠ~œ™€-IG×5ª‚#§Ý ·á—˱T0¿ Û}K>Aì0OÙä•=¿Ø²OóNåû»Ò7VÄyiýëïá|~ýAëY§3Z±©„]¤$£WN|#]¼´ÍJ-B³öàmŸ‡ù`SÆŽ3*¸=N¢¾Ü‚N»‚²”h”duöÕ·!ñ*E®´úKö ò”#Gnì‹z½}OYʼn»ôÚcf8ó9¦päl´bqWã6/x%9#oÁ‰LYb¨ú–ØŽæ”=øž‹nM¨~\bÝ„ÀáÙ"J&U6*˜¯=¦h£ÆÒtà±z‡Ø²äI–¹×€ BƒM~…|?!£-Ë{²]G}Uev\Éü22-‹Éý…Û*h;ìr©€GKX{Ò&,î”'1‹ãˆÖÌâ\¹Šކh:mÞ×ɶÊf÷âN,Õ&Uó“’u’)RÀVH©Xœ~&/Œ¹J¹ÝòâwYhOïHÀG¬Ëœ1ŠyY(\WIìRpHNeîKh%Ny6&e„›,¹ÓÆiÜY®ý“0šK¨®cKsMÿ”ûlN²h=¾ÌL0@Ô›.tâ ÔðWf'Ã…¯Ý&CíTDnî¼{ ÇÖ%}…½Hó. è:-\Kó3½/)k$vŒC(²3î^õÔë\gÜ‹Çpæ9w5<Ù¾œÎÛâ£xxÆ#Ù³oœš?̸½]ó)*´C6Ou g.5æ¾ àg”FâhuØROvàÆ@Ó5DrpF:d1L27Áá.Ð*GžDú¥‡&êÏZÃ<¨ÆO¼R|ÿf¿ß^ÛaTÓ ‰Îš9F-¬Ó´™“4‹pž xrr‘û-äs¾aåÝÙ–¢ß$¤CÑU_Ô×®¤¥N²t«­ßâè½è€@J_Û”¤†n´§Œs©ëÅAþåO݉Æëv!ó ;ö’2 ‘¦*¹Js¡Q®¨+Üï\½Ù\½ú‰¾&ñ¤$Ü`ªýÌûg ¶¶¥?núx®G¶oj)¬¾;îr'í—ÀæÓ6òr(.yª åW<—ÍæÃrþ5rc/N4©¨½WŸ¸Í„ç„8e ݰÆÚ±Uñ»øBŠTð÷z ܳKÆtPÑ!=›fS´HØæ1”Úá¡—šP;j¢É¸>Éžk!Ÿ½r šà½8=ºtªŒ;þD;¶oTä €dEîPaëisáú{Ñž-NpàÁfñãeûtêÓ¹$psÝP"çoËq1Y`¡­Üd[rFL¼ïuæØ%+öRŠø>#ÿ°tšÏR›OÛÇ/Ñýé}ží™!Xc‰§`j…åˆ8aÄ^þ”«Çþ|ü§äXî E¦C£XD`ðgä(ÉÜÒ±Mj—4eW v‡Rˆ†­ äv– K½-ñŽ¡æœ©m®“Z_â·ÉdYó¿7r}›¶ÏßccOÀT,c¢í±8w¢¿þ‹v)ùe1lüˆFí Ó'Ãpm$ÏÏ›IÍòÍškI\’RÄÐh$;Œ!=Z:coÔPB“åÝmÒǺ¯dýq|=W¯d,§ÎÈ,3Ð òN8 ïu™ï Íý ‡£÷d“=í„¢ÄxVÝÛ–QÚ3àzåÌð5ðæ®¨ÓjWè.¦vHU?‹dédYÈí0$Áx¼D=x«¤þEî6ú%ß^ùïÈç`›ð· )¾ ì¯É¹ï<8Ë®ÕÌU&âD®É.yèVÑhJW6;[Z,íJÂ]¢n³Jàïý§² ›­¹íJ®$Õ¥¡¾Y­K¦Eû¦þjÕÆ”ñá¾<…q)ê®?4ìøÝ(÷Ÿ–ž§/ñ¹Nc³û´sZª\;ÿ+”ÄØžÊ Sr_C‘’î«Ì;Æä#8Iê|Š2$aìÚhÒû©ß ¦±<\íϹjPžXæP)iufìÄ= §YÛGW²UœÅù?#¢2>gr*ÕÑ5¿Æ8¹!Ðëàûí½WSݲ,úþý „ Lûx„-‰¶òHBÈ›ß~;³ª§íçFÜ8/ç<¬½×B0g÷0e²²²vç´§»‡|INz‹á×qÄÜû˜,GŠ#fÍË"æšÛ&UP;‹ =;Êö•Z1‹)€F®I.Sn4Ñ GíøSÝ Íôš£¥Ÿr¥âPÍ®¥Õ&1 ¡ð%Á¾Dcj=Õkxög¯ÂUæÛT៴GóÙ´} ÍĈSkõØ—ÏŽÝxúî&¦mANœÉád¤â‡m\€(µxZŒã ±éŽ?AQ!£çîž=Å€âGw¸ãN~†üœl@͉„Æ{þB­¹²óxƒBˆ¸YH4± Ä–b]Sß®”°Ù-áèã!¶ç‰„¬: ¼±{|{Ô3\ä‰ýKHžcÊl^¬ÚcB¶c;uF_bs´wÂEŒ½æ¤âßí·HÓVN,޵W†vê[­»Bäá‘xú„ø§cµ8X”ä@9Θ—^éª^,Ò_‰ñ \hù,ŽmŸd’î™+£Iʶäà•VM(;^oRE»ºÎŒo ö“ø>#6JQ@—Óqcz²ûPV®ÎMwn|†ìÚAEF5÷+ňÉE‰$Û Ö«Üœ[ÈÖeë§ûQ‘kMnY¸ åÿå'6¹qÜa DÞ…Ê­êâÕ [`X˜ Æå˜²Ï;B“ TÝlh¢ŽçŠ^NZY.¥w5.XéFV«àÂÙå mO<)#³´§ñ1^áÜBCG¼¡¿FÝ(’ý”¢×6lP;ô_6ž˜G¹4úélmÿDs7V‡õ‹ÈžÉÞ1ˆyÙC¾ÅÂ9V¾ÀÍÅwSÚÖ]uí- MÖù"g«d˜ŽW5l¼ß1NÜõ ¹&sÈŸŒÒGÙ÷l³*¦·¤ùšîœÎíRvÐ –1÷¤ÐZb©è ÅÑÑ—žE£ò©,R{¯è?K±]ð¦TÃ6/I$F(Ó}'qþRùd$'ÓN€Ö°¤~ì©e.pV2ï½ÿ}ίÔÖc(@íÑIÃ2úÛº>°´MpAÆ` $'‡ä@Ò=DöÉ_¦Ð88Ɇ<¨É‰",Úî¼ä·ã„>Š·3îÒäírÅ»&ΠUÁ}ΰëŠ3*ÜTÅiOä!I¢£õ!Lv1w˜êDkÚÈßiocó„(¦—Ó¾)° Xxà¡ËNs-=6ñÅ´fÇ‘œ+Ž­ñÒ–Ù6‰šâ‡ð1* `™bÅj¶âœÇœ¾QóÇ€ ¯^Kä_©[–i÷}RÕÄp(ãPæ2ÚY߆7! ÀW, HŽç$‡òÙ?€D™³—êÜܳc !=î¿33s†±;‰{©u¸ä˜Ø`=³—ùÛ÷HoŠ´~ß¼89ÒÜ„÷€$`A+eÓ#¬²qÙ¹.ªD‡öø ,æ;/¢%;x*‡DVÏC.q»˜aî̃eÜ—Í4>©&íU“ú¾†hTŽ6~ ­Äù"½ÒÍ7¦‡L4ÚÅè]¸Å¨]ék¤œ[Ð3MpÑH—ÊÏíÒF1ºEŠH½K‹_Â/vhšÄ‡`œu6Èä‚Å”Zàrˇv(fž ³¼CNØŽ5,¬³áoòšû‰Te€b’Ù-öîõö¬çù5©%.S\\¾US[¹CùÎÚ´-0Âàtƒ¿“Þ¼<Ù%É/ûÑÉãF›ôëêZÍHñ¬ƒÉ;#³æESD tÅ)sÙ{€Kߊpm[‘¥p¦¬¨™KÉÃɼZ±ý^››>¿"øTÃXgGèÄꤢº4’…Äqã"Â÷‡ òà|Ì<¤Ä L§7”v¦ƒºñ˜ÆffY'X9g?=‘-/´sª-…µ*ájŠ×©¢¥.ü\Lm­¦}³j*EQ|›-ðW“c—ކqµSé5ß84N·ËdÚ¡Ž‡n`”š°gìÙê~Seo*튧ÙÊ퇙×b[Ëè …çûË‘ðd¼ê1,ÉP0Ô 4Æä¤.çþ´GDg€®.“„Št€ðº1åf[~…ŒÒÍ©ìƒÀ¡ŸÇŒ[_ {çzqï(?ÖmÍ‘’ÂÁ/æq¬iW_/uÂŽÎç„ÅŒ¶€F41)2³òqªbI8NÏ©r«˜#)1R”¯Pâ,{EÇ`%[Òè$y¾ˆ‘ ·spöíkOIžxßÛà1¹~·€æŠ¶Òž¹»'¸Ÿ O÷d/ù¢9µ¼Z>pˆ/‘$¸6 L’ù½‹ãAþXô7ÖL<ó:ÝKØò =³äkDžsêÝßæcýÈê+¾B»0™Þ4g‹æ‚~”ŨDàDX¿Ö´µ†ÓôpA ¤„"ð+OÕ¤Õ)¨Wõ}9m­š[Ác¹ß2‡VÝ! ÿ)LŽØœ7𠩰ɲÑ6Ñ36A`š\‡×·¼o˜JjìD©Ö”/O¹Et´ZΠæqœ{êÆÆ%ƒ°žÑáÿ#+foiÓ»“Ôš††Aü×\Áö"{…“Ì,^èýzòl÷†Ù¹»x&§—*TæÌþø1ûX‚íŠÒk$€º÷ˆ+êS;õBÌQåRp×~žqT[ØD'¶ï"åäQÛ/rcdbRz_s_ŽŸ×BAØpWo@áA§3[Š8Ñå6OÀ-… .Q©Ëé(e›¢²æN8©Â:¦Iïg‹æmÙôV×â¤Gšà•J^ |€ÿÎÞ¸/† à\"§/´8§Úwãè‘§!˜¡5¿tyóã³â dɱ—°d¡ U`J7¯Õ·ÜdÍ”E%Äë° Õ¸™EÕ:ïXvMÈ>2mRAzK˜7#ÚlÕásè1LÕk©Fî§}Må†ÜqÊŽº(ç¿G86EO3yj¼åã”#v¿¥í("¼Z¬“,äü=9}HcùÉÚ~k@”•–ž2©V· ––4å˼ËT™O{mnç¼>x®´Ù2\B¨]É©/QÖnÒ³…´£ɰ©ÞGÊÑ7LÐâ—%Lc‹à>vrsžc%ú ©²ñtEzó¶#_ú0 1 Àjf)ë #ìËIaº„s ¡jrAdœX*šj­ÜpÁÔ¡vËØ§…ºžonÙI*rH³Æ >E€#'©ù„}à”_°ø/uM±N½l]ÑfÇTZÎ%—¡yËõÀ5ÁËÕ«Áwß'ØQÉÌò¥ÁqˆM½é5µ&€O0ßR»n#•X>¥(_GQ»L<¦kgïnª×hg“a÷‹p°uz¾æªœ°mòvÅrõ™:`³Ëgr‰“èlÿHe\“æð¦ĨÔÁÒ_û¾ªª14ä{´Ã\¿jè‡Ë×›'‚ÈÃJ°Î’`ð¯A½6sÍ RÔL:ê€XQ…æ6½¹1‹œ^-uxXÕ¡Þ¯,x¨p±Y:a|Û×BŽa‹Xòf5œjàH¿€A«÷m‡—]e¸ãhSrWª‡V•÷óâ3†}ù«½~{Ãê9ædÍU¥ªŠÄþ,_®Y?·WìÖ‘ B‰™„!øQUÍ9l·jûט=bG|Á©Åã¶oµ˜k*Ä1$ 0I6Þ'ª¢í•­±ƒI°£Ç×$óÛŠE¤óç[Ç)[цú‰-_¦¤äÉ·×Jå,5|¬©@_e#0)žG7€{-#ؤ¨óWøž=?ëBñC´ÆýÔ¬‘s6F6H=Øgžxª™ÁhÄŒDrõŒ¬Z¿a“ÔírNöœS— <Öæ°¤ Ô̓oueº)L‡Lòÿ_7w}$ù_›Ç­/¢U­Î˜Öƒ:/ìi\bÐã¸}[zþœeŸú2~wݤBÐÀðõ»Ö?,ÜM-¾Û½¾®uÀZÂcfª0¶…èäõ€_xJÜh$x˜äl#¥«g¬Aõ¹¯‡[æ:Á'cÜœ2榿»))y4ƒÃ òøðgÙ½[Z6ÛUùŠCEÔ¸2 Zâ¯mm!!›#©çę׺šU yÛ{‘Sš¡•å% ¸t·Møâ{Ìqd ›€†S1­J³e±ß¤·æÞ0 OÔê%í]ü›êŒyÿÏ¢Hñn//IXUk~YÔœu'L´8fÒ«yÆx~ƒ.¼—Q^>Ç W²âƒËÀŒ©8ˆ·‘Ž­9õ­­.ÐmÃR@3Jç’Ì–gî¿’E—Zìd0c‘ìPË&"³.”Ó;«=¹— gœJ‘:Švõù˜Š¹e¥ªþK•½Ã#Ã*D0§ç´Cü0ÑG‡3÷b±°I~ÜD °(ùüÆ vç3ÔëŠÜ=`q,^eZgJf ‡^Èò­É!$¨Z/’«I›¢ÖD1XÿÓœï*ÕX®'Yþîq/8‡šÝ ®p6(¡Nó!q®bwø%‰ ØÛøÓ‡¿²c”oãЬmtñ”îíJ÷—g÷„S/2·# †±œ~©ûUSSˆõ¥gf5Kl¾M$K ’'µ¯=!îè•lŸ)Òg2F>o‚ƒÛRdµ€ÓÏ|ÞÈ Åã!5øíÌv‡-‰“"²×Ë“$oåú²übˆñ" å ¦Çå°Õvœ¼8[½Ö2ál“Z/sÍv r³ yÑôšæ>1ÆÂ9Ñ`œD=oGë-þDró9“sX…œüê§=º©œ8î‰Uzÿž3t(Ò[C§Ý=;q”½»ÇL;‹þ|Ö˜‡uü-›öSþµÆPñÆ{€ºÙðÀ#]Í›zª<´·Ñh#…eÿ)ùr$¥œF©è,Ð7ÏýÄÁ_¼ZÁCp›PäãØo‰†Ù*Ìο:Ü›Á¢D3Ô}‰ä¾’ö]ÎgàØ¿õ™˜µ‹2Ãâ¦8¬.FiwÄM¾ðÎQZ ¼~^ìïÙ^¢G ‚bØ’w8 ß¼6ÓLS6·¦H ¨ukvŠ+Q7¯ð`6ép] ?0ìðŸÄ‹8?þšûR,B,î dÓƒ•>Xk*#W˜—lãEèÆÛ­I¶T@ÒTv¥0ëü­l7‡hñïµen/Â÷“nœÑ|&:2KÆ ž¼“?tÜ]ªv'Ü}%Ì‚«—@¢Ø°Vió{Úë¯eã:ïÏxºòõ؇L Pôg“³8Þ;ÆŠ5sü'!©Ve|áEcÝðèï‘XÌZ7û¨´€3Í"M¼ ›ªÏåšÑc¹]™ÿˆ¿J‘r±Õ*ûnòôŠî‘z¬ ¢í9{/!¾)¸÷…$pÄ'LÂCYxváîGuðuÑè4¥»`4 JLJÈ7XÚV§Ëí6æÕ„š ÞOmEbï|¹b;ÓN°R9‡P8$ôår”cr¬*Oð‚+ƒmÀÝ?|ÅVÀRñöæ²y•“E[ºV­±{©q“W›ˆµvR_O îÁmI ñ‡niT )#-š@xœ©f”  +•Â%ÜR¹/4Ö(%”©ZgW¡½,åA¸dÏ~5’öµõÊÜ‚DU2"A«ÓÖeY[ªq¢PJ*Rµ’Uyz^þÿy;† ºÌN·ÆÜ¢hVƒÑèriKÖ )¢T¥: WÛ¼éÇ]æžó{F½4d±]êà³Õ«å‡ôÙדým÷uÄ1w°vøCZ®JŽ”La!iO›èMúÌ£B‰–pù:ízýž z.xNÛ#°'ú© b I]Q§O˜™ˆ±C+ƒ4xÀ|,d"¯œcC“PCÁÜ_Ñ?T’' A޹H[QM ðÇiO¼-4:zäâ+½¸._a×ÃØÖPäçö„Ï´²g£8pG©6Z=iæ7ÎâÑcúö¥Çj{ëÉæÙÓNw5 ¬§@wÆð€„*eiÔ–Õ7‹ó¿àÛ«êÛùj(\ç‡p•·EPJNˆ¹;úÌœZ`-?ñ씩œÌÃÏ*é‘mN ˆûá̼ÌÃN&¯ÔTÖûö«†rS­kîâ‰C˜#;b÷§ÀjrŽþÕÅXä½½e°L¬¢¢ÉKuÃhc…~”¼̸&` „Õ/.ð[S¤úac«Í/¡Ç›lÙbœs}ïKÚ-EÍiÓÿh`¾hÚÞ¯J”—;âùƯ,«Ñ¤NAn=`…9‡ åøvÿ$íë ÏKƒBu§ôþ6–º/Ö‡uŽÛ¥ŒÍùöþß‹öD;æúŽç£–Ž–¼­NvšXàmo’$.ñDCñ2=*Žça$™MåÐÊ+¢z²5ÆYOóÝaº“âÙîÍ ¸“/жÇ,Øe{”ª°Lˆ½nVâjc÷Íú>P$FÂxtá¡Â9ˆ4))æ$Ó9ÊÂ`bï ·óî™Õ`«1ø2¦jÅ\«æÀݬÚ.ѧaASµÒ úˆìÆ ÐÔÒÊÊ9Ä+ É2á"ìI± h’…ä‚þ2H=Ô6ªG>Ù¯l›XõáÑ £v?mÕ‰TZÅ•±×Ð:«¥ÍÙNþ=>—W*Xa?Hòîfš¹¸\á79#Ƽì(9ãè;χÉ%àdž:€Œ,ICJ²hă1”¨ç³v²VûËúh ch°3cÝvN\nQ ·›¶ª¸0¯Æôñ(ŠDÅá²êï;1÷e¢Ë‚)ã©ïrb‰móˆ°ÜúT¼{»ß ¦(Ïžk ‹;¼;¡À„'ÈT“CœÚÏ^§í°@£Ž/As_•ÁÞÒ ß¹ `ŸÜJë‹ÕV„¤¹¢i¡ˆÇw´qòá–Gè&ãè&¦–"«fã9±ÿ:‘çâöÄÃVS¼*@Ô^sŒ˜­j¨ñŸØ…?‰’çå¬p&++‰ïäñXÒgfÞ;C÷ìä_¿W;lZ‹”+D4æO­!„•)xß·5ÝíSÚÍBÂó®D†DJ0.7Ǩd1hØÍ9An]ŸÂo%ÓØÐdQ•kÛ“œA»Ø-›Y)o\M´3ßHÂEªhü”·ƒôçbç_û_ÒK’2šTÃ8a¹k?‚ÑM‚®[Ù!RXÛþ·‚q{$uy‚VåLÙÕ^ÿÔRkVÍY:DÞÅ2®Õ.Ž&£i÷äáóÌ1blOD\°g*è˜å»½ýJ¼ÜV®1Çâ ÁI´öæ¯áê³O·Ð6 ãO}…%ÊSÃñ@ ÓÞ=«èB-/CªfNûEA¶,Ÿ½¼ ?CÌ‹Kù•Â)øÀùæÑS­‹ì㼘“æö]ïØ }FgWz1ÎKÕ2“9äÇkG«÷ÈË»~GxZ£_܉ ûêi^W›V»#*5\£B&Š'; |ÀÍ:\¼›YÛÖd!W\ÔC\9ô˜Ù•Ì€>ÿ¨½3âZ“ǵ;21äÁ f% :ñˆä«!q«KáT¯O`ZJoë‚̇¶»†”G Ô“ò5±²uƒ=SŒ?ÏÈ͈cqI1cmá‘ ˆBÿ±¨–í>`{¢4 ¾€§2Gà¹\ÖeëtθT²Š—ŽäÐ'œ›…ËÉŽ|WœêÍ¡\ûÄ,Т<êP¡aÅ»€0DwnFCs¢¨T'ËÌO{fÙÀàHê’ù?¹–-CVò?gH÷¾þV»ê2ØLRÙ8epy‚+eX§3ík@  _­®-¯÷:£hóu‰@ÝìzÞŽ €]ã®Ôc ë†pÉâœ`Öv B'½Ö7'/¾b]ªéu‚ù¦Öbáõ“ÝõHâܼvõ2ègb½#WAÆÃ’-äÆAÈÛµø,±kVkÚ3{­ðÙŽ‰a$ É çÕÏõQ(š<ö†í.Þ®œaVåbr}m{ˆÛ™õª¨´¿tñéi \9馭î̖˴Ƽe¶–äòÛÍ¥ÌÎÈËc®8:ÓSûy ¼Pöå4¹<» p&AVDí‰iñ§:¬d§yÊ›G,´\£T9“#âÈ’ú©Ø­öÙîc‚ÑýbõØŽm¦]Š òÈNI“P¼”²'${ê0›{l·In䀓ZU°'Œ„£)‰ëªØ=²ZX  `ËÕgÒÚzš`þŽcø¶·Ëò•¦ü²ˆn±$üóX¢‚ªäç · Ìþ—/;Zj•$kìñÉÂÝ~ŠjÌå‰Bl©*fðâ 2JøLF%Þ‡åÖ—yгEIA“ëËa§PB ù ÆN£Ù^VMQèʃ“çiÔ„Þ–õ*¨CŽ„/ÏäV²ªJX Âø¥1ðò£‡ñ"#Þ[Ý`d‘îË>W†8$*¿^‘æâ\ dq?kôj çÔQY‡ê<.ÂßœŠ¿&ïãE2ß»ô~1oI½ù¯¶õ¬pí°6éáÎÅõ&ª:í>þ'’²µ‚È' šy‚¥Mo%Ày¶†úËžDy¸Ä‹Èó¾Ý_µ— =[/Ô†&zêÀzÙAÃXü+ŸÝb¤…·›æB½ê\Þì’mNsŽŠ,ÚÈiª2Ùd¾ÿG¹kŽ Ê%vÿ\ª"d ñíååñ Ç’ÓøLÜ8þeÚz¯Ü'×[ÄHÕàÀE'í°èÝN£uœ¶ î—êºjhh"-ó}"@åÂ_P"ý.ñ9•ï#Ó"SÐ-òì‘E|Eõ’þ¾ß×ÂXÂzSj¥@±Êÿ†bÚ»£ àr 0;J ³É3É9uç[„B’- k¢p‡ûâÐ9ÙÇìp ë6Áj »iüóTUOJùÞ¸ea†© §ìžÊ¯æê´¸ÍõÄ$n·ŠüA ¯Bm°Lâ>“§÷9!=—ð2Q>˜}_°S—r‚ÙlU!X#×$íªØe,KaL£—âÐÈìéM¬i> æ]9äГʖIÌPûGŸˆîPÉ v¥CgòŒ’Zþþê†ül‹!‡“xS¾Ð»ê¼Àu§.0›«ÂGŽù)F©¯±ÆÎÒBÚ+ôƒ-ZÓ-R…ñ<ªú,)ÒÜÞ×ö |Uü+"i¬µBÓíoj„Ø‘´bº fém6Çw/¹£iGéØ ŽøÂ>·3ÅÓ Œs7s8zQ¦ù‡ÃÐŸÔ #ÿ¡gô½ItâÛ´š"=ªE6Ûn ,‘È]ˆÙFOìa•]ˆqÂ'$Údæ£^n µó®bHÿ%Ãΰ­«•ó7ê¡´oè`æ¶"6,¢Õ ÆÁsOË9‚{dMÛÔT2g‡’ñ”.jLý³ŠtBÁ•’¦>w4dâ,dΊã¶hܘ¹5˜[ȬÒ^½n²ZÝ«²†eüqDå-^¿•DÕ‰÷%Ao¸90þ.õÖêéD#Îà);¨#¸o^Px$U™‡óMPƒ?Òûjv–2‚Îo9T¥ö²&5Œ1©|™\·zý}ÙzeàÔ¤r½ Fwé×’ió“=F$ýCáÏf÷â›ÂlÚRŽpâýè¤ÆqE©x‡÷t`{CæØs$òN‡%‘Û=‰è²ðïô&çM„b@®ê´–ýýRï +£+íõ…›¸y^Èu¬8Pæ„´!UžoÝÂ}˜t€óIžüÌrÂa/œEL¦ˆ·%µC£^ !Ø`]ãD+Øœ(à<øCíS#‹gOÈNŸѺè€-Ô¤‹Û!ußš—¯ÚAF"útm˜Dzóí¥üQ­·jä„~iX¦^ÈìâÕàõ¹Ð ©Úg5nKu»MW©*}«´øæ‰€ÎY&ÏÉshV˜áÄÃðÚWOQ¿Ïݸ œNä~À¡)æn œ¶¥ša7ñ¾†¯¼.F¾Æ°>AÐzlœ¿rщÝÿKÌÔtxªÿúG3gg:@Ú­þ>½Åpãǘ’©ŽÖÌŠ6=b˜ãuâ,ëYð‰xrÜg¬RcÉ¥o`‹5Ï×ÃwÊÈÏw2“ØJ U™ê8N5l™pÆÐÑ•-™ö›Y¯AEU%Ze¼Ä=5"¹^üx¢ÈR®žžŒì×ß»Äy6HgrrÙ‘_U/ž¼,M1‚ü¦ÄF’Ü´;ƒÙmvífÅ^ÊŸhE¢¹L|DG>Æ;×íáâõÜ=?²Þàá+B!'VŒb•sþFæR鎬Qÿ'Á·ô¸·Þ—²Å(Yà;²Â†i©²%Çn£rkj'¶o‚•ÈÂ1±Û¨‹h¾¿oO)èôrúªrÁÕ¦%N3õÃ^cz©µÇÐ-¨Ê¿ÌC pÿˆa‘ß Š/-‡»ë NÈ{WkOñápÊ>ÝÒU2úÊ[›J{¦£ÁxèCè¬I¤ø`äètZj9ÊŽ%õš]Žè߉v1D‚lûHà(›D‘ŠLl ‡M•žìC8 Á ^‘ƒ7l)A (ÝÅPÌœžü÷8ã¨-ž$X9÷9ê"}HÎA„‚Úiîlèí¡R¨÷V^•é@Æ ã»M•ƒ­›Õ€§,VÃï[ÔÇëÒL¾a­+ag§‡;Ãsº?Iðž'ÙØ”vƒŒñ1øÿæ’`æ$NPB©Ëݾ«W[É\6-‡Õþ ª‰ðæ™8ÞŠ]þ£ØU1(ýv<½O'ž)ÒªõºŒj|éJ`¡{ÑÔŒÀÀK¢¦:ÖÓ_Ÿ¶o”)¼L›d9×:Óœ¢Eò›OKå†Ð¬”í^6P{Ðz¸ÓC½ºª¦EZIT¢å É+µ‚¿Ìç¸BÔ¨aúÁ4Úïn¥½öîë1 Ýæ_·P}U¬qäòaëç­æ!xé:'WðªUD þ´ÚEeö0²¯?ËeSJÞ'h„†.ÅÔŒþ{j—à(—À»qóWö;瀓_û/§­ÔÆÛý(ïÆ6‚Â_O;cµ«ì\ú5EÆ¢gêa µp¹û ‡ISÆ¥‚d¬Ì-ßCˆT”7zKýéy[}×ÝÄ(xï%´¡JLÁ©d´pb @Oi¾ð;lTô¶XEY–B®¸PÛÐõ¼¹ŠçÁ€fíU9†[y¸)'xì8UJ®¢z@ŽB¯M+ ¨ª©Yy7bE²ò qÏ-éè\1 9uþñc1?‹þ!WÎ()¶ùˆtÞþøÆ:B$Ç‚ÛþZ,Ö½GSj 24”åœ1öúJÆ$<ïÎÌBU›Žˆ¤td<Î?™ƒ¹;c1بÐ8 –ΉÙ{Rê[k³é b”/œMÄ/*L'ú)¦¼ö–Vä¬eÙsèá×1*muø@ H§~˜ 4×°.Næ ¶&àK…Å7¹0Ü/½¶£‡`—˜àeqÊãp`â¢4dS_ä£I*ªÏuØíÊê5醇äÓGú­èuN‚35iÉ‘š„59¡òNvðÃ0& /u-´ÉÆ=2õ'$P´mŠÉñ¿FK:ù!3ŠxiZ~A’^öñv Ém±ÁÃוeÝj.!ÚÎ÷þ·jö}ùX1]f•?4è“5©k)[¦§ÀÅ{¨&–{Ok ò¾³É­FW`a~<–ŠJ+¸ZåBÿ !ÔâUõéÁE$v#~Y¾!t£¢xÕŽÌil-$=ÏÊ´.Ø›ÝtïW ¥°M[ç0ÙŽ¿tì7^fƒRüÑ«o[‡{ö°Š Ù_¶(ˆÙyï*Û@ÆXªèóZ蔓ŽÌÔî;­¹¯H–éB¤yB$©`S¾ÞiÜYO1+'ù¸H8*6"û,KP4åÉ;ÙJ_ >È8›³kÂcnÛµ+¹âøüÚyÍó ¸—S<ù…zö….¢Ûl­ÎÒÛj†m4ižZ‹5,¼cŠÿ¸#õÁ EÍHBÅ {ÀŠlËkÌ„&É+ÖXé§sãÓÄ~›Ä¥ÚÆ¥¦ÌÝ)ÉŠêÆš-•ÚŒãÆ¦îÙ•¯ŒQý²3š0ðÅÓzO|á|Ñœ=„êÝÜ{yŠWÇñ­¾þMú| »Èç×´«²”hC U qϪµËòù´[û–qiAç\¦Ò‰UòL¡Ò\…¿6Rm&çÜ9Wí? E¸f1Ú© ^H0”Cãè³^¶Çɸ„ìy>)W€t€ª¶¾œŸ¼ÚƪÏÛ‡X@S=€HJ²t2{.ëÍ6`¬ƒºk¿¸ ´0>Lމ/¡@L ^’umrÊË7ëm8Z §wÚ`Hþ$¤QIDQjæe÷\œjŽ™¬U’O£€-ç÷²Ø½D$ Á‘cBDBñ E.¡i*¾XÙ&gxþJ7Ó™JŸÍX°Ùx:Øáu®áF¯íhJI^‰^Œ:[eyùئíܨ´3l¡,Oä-n°0à°V7›ŠÝ̤Òö™¼½4ôÜn*íüŒ$º´Ïl`¢˜^¹6¥+…ÿ°G›’xg¿Aƈd~ÍËgzÍC3ËÞfSü'˼>’?“x[A×ò –R¸ñÐ 1¡D¾VµÕ(ò²ïpÇ Ò̳°–È8‰åþ˜ ”ì/“÷d÷ö5aRÃòùM X›£c1Ϊ¬Èî9mR ÉFVe€êm©­•–2çJL#”rßΧ×ù¦}¾%gÅÄDƒ}ÊÄ#Ÿšig du_…ÿ2áPµjrS6ÜP ×+Ñ.‡:; d6c·%Å“j†ÒàÔHö’ mÔ›e_)ëäeiJÞü„èÔ¼Luœèõ߉ƒa)”Ÿ9M9ã˃¿ÊŸðë!š…gD¿œ³m¿¿P[šËÿw“UdNzžø#i`W҉-nyþRíð?®µ£}—ô±ú™y0'¯*#4;nŒ³iû§Äƒšñ¨î8™ïšÉ;|K¶‰Œ`Ý>ŸÙWèÔùM¯P¿ÑÈÚH@›Õš§PБèra †“~Çófr8á½nK3io{åÖ"¢\â ZÅ’{ž=TÙõLë½5úZâÛbúlíGb°¨&/d÷â<þËxôT7Juæãʼemþõ[àéÙrk‚ PزÉþʆ;-'¬Š â;Ñk_ÁvõðFÕ2|ŠÒV_̨$mVv$iy„@JÊ †{’TGÁð$xôžù)"Æ–vX±SÃô˜ÑÀ  ì¯̛n©÷†WÞ{n÷G¢.,‹º#í@È#)õË’gƒ6ípi£øYûtûh·£‰eü4ø&dÕK×Þ¸S¾ÇœÆÙeV--aß3áZúå1èžôxXï0ÿØ@ç½Ñ%7x‹IA–kBr±¥§Ÿ0C>mÿ^–,ñP{iêØÓŠMÉ,VW—ÞäCȈR·3“ÙQt¦•ãÍ(.it*ÌN4MñW=–(Ÿž´rÉggÍ#$$—ºFÍß]w#ºR®K`1z/+¡aMÓA6úg ´Äo³‘¿(âdD!—Ó{£±¼°Cp¥|õš,|Iyüžge!Êý¥¤ µ»´Þ+)-…@êæVÔ~“"Ø—Xyò ê€'¸îiM$®Ÿëqêt÷ÏôLjîÈErX²f©ÛIo F6ðÐp¤_”IÏ‘˜KN‘¡6{‰±¿¨Ó 5_3†Ó“+€S4¡DÖ eŠŸ‰ëÛÇÑ…Wú.X¡4°ŽÐpßo3WÎqŸáNPUǑۿæ<»Þé¨}Ä„Tyò%–jîR¹¥'§ÂÄ’¶eÚBrà• 7tÜj£»!LC²õæÛÔá*êcžêqµÝU®µ¿,fóCÿÞ‰jg®(øê9…¨®îÁc¢ê§wàý2\±Ë}3sfVìFGž {ûµaÎBO³L˜¼§ìÖñ‚¼e\ÿ^ÕëBe.mÕ+âc†¯mò]y”ŒÐ‹~þÓ(ë? c<ÃcwÝÞj& â°B‹Ð ¢ˆæ› ײtá/ØSÿíøÜÇ"¥±póë裈}6T"g[r’E&7—sOp1[¦J½Ý_’'öúp ŽldÑJý §ÂiÒEÚ#™/`X7iÜ~é° –NhœWÑv¬Ÿ³Ÿ²ÅcùEFs,Uûï@€ªr†Oigøð”„KnmÇ&åý8—Ä“¯‘ -ˆÅ]÷êF[i€Í‰B±Ä}UÉÒ¿—v4ç ³|¼ÀÌe³ø'Ôz*QBn;Hk‹z[±(¶ ¦Ò“Fòs‰Œªœ¾µÝŽE±®E_ÿ%íåÞ5_Ðó¾Íñæ8òÒÛÐ>øg›`³¿ gªõýïiª Íëéͬ>—îï¶ÁíW¢Ñ›}Mé«cß~DñÛ¹<o³€dev?¨š{4 šIc…\{ê€yަ̨…™5vçódòo<%и¹o[ev)œ¨Eõì©3!¦Ôõ_MØ'o(kL`KH/Û¢3c—0Z©a¹Ñ[˜j+‡Kשª?Èßׄ†4b¢A£±zضöšä…œ@£zW4­ÿRó=‡ŸvðãAø}‘²#­>@‹Æ¤·ÆªDGÖ¸Ã,7úœŸä'°­ðDÕ+dÉ$‘9æ~;äCo}2·2ó-½O+ÿþ’®É‘Õ%× µ]”àë×rr«èZß'rÎH3s/°×¾=ØÅ»°sŸ°çÀ÷ßÕšm3îÕ3IßKR meÊ0.‡ƒAkX?–5íÌ­³–-m•l ™ÇpíÙ¶“=*'ð‰ÿ~\D%„"z,‰W¯4Qò®·tGk½•LXƒµe€â¹ÇÞHþ£ÖšžôøÛœZRýJX#Š|B®q&³£ðصïÏþèí‰;PÜàÁÆŸQê* ^(G¥E ¾3"$¦yÝTÍ.H¨÷ׄ_È?n‘õsöò;zM4”jš€Qw1 ç&ʘ ë¢S’QJþöl Ñ/ÉÁŽï;S.•‚œ0ü-ËU‘õTÛ>œÒÍDhm4²—Õ,è4Aå‰Xå2⨣|*f©kó¬§&Ϭ£æbúÅhÚ¡yÛ*tºk€ð+L“{ç¨`p”J€vu…×RÕ7çÀ)±ÌØ^ªþñ² ° 3šÔ2FÉ¡¾J“˦òU÷LÁÜZø.tøXȪãOóüÀ—ÏÅRpÀL}ŒÌkœ‹ÕÍŽÌcìµ´§& ܾx¯üçÿKº·‰@Dxû7Îò¥4ª‘G!Èeaß6RqBÝÙœ€@„Bc"é\Ìu{;&çíÊ/̓´Öè4aßjÚGNfÏa{n3m©b`[ÎË)Û…â«`}T'÷÷ÚžTµœ‚ZNÉ|Ú§aìÄ Ê´wÖÊ+‚:T §F)©é–×F±¡¿æyÖnR s\ç6½=šN¿Ïëvð)ì°¯¾tBIÉ¢¹lGëX¤ þ¸ºÃ6”MÏÏ!aÌÖ¾ì“! Ÿ[…6·Šê{l·ÃY®a› ÎbAë`Àþ ¨ÅB¬H@•â® á6N¥@æ§ÅF+ÏíÌ ù‹_³h+-É”è¾iŠûLÜ_Ë©ÄQ(Ý«;Þ[­ YŽN7SgÈ4¶ŠÁ £%ääε¤ÇnËGN:å<|œa; 4iLŒöÐUb1š Ÿ•¿¨k†mÉšX³ŒÔÚHóªz¦Ù=+g–ZG«¡†å6ñT©¤ø¹³5g«ë7(™ŸÖ®÷Ô™GT÷nõWc1'E”PͱJ ¸ qÖëé}d%—ÞÞ} ÝYKÀŽDJ¢È˃ iÛÓ= ø(}ìpîD¤6"~•RÝ˃*\ò\u¼Ô"#>š-’—àF'’lv ÏÙÿY \q±C6ÝÃÚF¢Q§/I3ÔÁ–ßä7]_ÜHa†y%€„ç³ÿ²BÑV·–ZfOé‰V±¤Ä^]½‘(? Úa1n¾Që¨Ó¦ê†3®ç“ÜAfÓÑUª3JwøÛ}>¨qÍ÷a²ë"ÓÔ—†»piÐQ¶„üÆ*¾äf ØÚ„–7vòÁþÎòØ’¸ðѰ@9yAoª}I'tÊ7öVÙGcY¨Âý”¬%Œ4y™*õ±·K¼¬Â„ ,EGSMƒ¥"Ûªó ¨µ¯è‰¹ÕrÚÓöÈ#vÝF´…"㈧ëØjp‰Ëâ2†s¯ÙÊ]Š…¤(¦,SóEhê9Á&bQTXç@ß) _¥:ZzüìÖ¼KœÑ#ÚÔïŠ@åz²ðãûsârÅœ@4t~É É”¨ã^‡“š*‡öYÞ$#Ë;}g¸É!®õ¬PñwÉ(·‹T+wöèÎ:7ZëßHSµº{=:h$Å”fs^ãÁ&ˆö ¦:'ž„›D\éÍX¯jÁj‡\}´l¥T'Nî6¹•ªÈ_af•ªøa‰¼7oîÝ ¨à¤·”EâZ'¿5wJªñëBÛE͵ùñ•ºAǤI}Ü(–%« Œ•ç²ä’§± “x‹PÁ‹æýx&‰e_·^iº¤QtO¿G’UIô¥§œ@(þÔ} 6À8 ºð6o%"tÐ÷{Õö¶í=’àY~K`òÊúpòXþ: žIÝx_t¹Dî£øy§X¾u»vðBs™øÀ ®ÜVêèã<à —Ûê.K%&šæ$†í´Êùa›Y*_Ù¢T+TÓ”}BøÂX»Ü;j“²—Jk³UÉsa;ºB“ÑPòÞf_>¬óÐ'ì¸p7Äš&îËq ƒt|ïˆA€©BN|ÉFÜR¾Žû«ñ&û­±Ô5-¤Ò•Eº¹qŸÑ3+TÀî\v‰o¸{žÕ‡ï$T×+a¨9u®ÞàÅ£_#‚÷€Ç¶ ]¿¯*¶²W…é9R”âóØê2ŽRVkI$añu”a2…¢‚eÅeݾå,ŠVjbJ«X[)+(‚áË$ÿé …~ÊÖlÌ‹ù£Ï/tîÆJøú¡>9ƒ©ó%{+ú/%á«Ê–}ÉI÷§r—æå³rgF=jÓ²kR×ëPó¬‰väë]#ûcûhúâÄÁ:IP•kó,oÇÀ%¨=WÕ #ãz U.ƒÆNy{x™P;¯xwúgPNêÉåMe“Ö÷g¿ôFWAËû.½Ót³3‰RpqøÖåå(6ò肽ÉÓ)$æOÙ?OÄdd”É*–jÊ«æ ‹šdήњP4ŒùŠýÜõ“9ŽF[†yMÔ¹pØOM|4ºA?.Ú/©,ïèv3öeˆ£5!üþTÚ¬”*çëÄFx‡ȾrVŸ—Ô€‘CùÌ7ðupèh€û^ˆam–R C¬ÇôŽVð€’?×ç Å æDMnÕ˜ÞNh  ]ô7é 9ÑÉüž¼`¥žž!}¢M{uR<ýÅT¥˜.+—ç­©Çì’Úc»*ÓøzZë,Úœœ=`,XÅïºÇˉHÆhüô¡]]NUðž£Ý€.‚E¶\{Ì b©Hs}Mvô[A¯8î¡3»,„eE3‚.äH'þ!?ê£äU¤wÝ]²dƒã6mRpŠ]Uwf:ˆd'©J¢j5 vN8é)d‡Õ•ÁÆ—Y±lMȮŖõàí<[T;È>ž@¼pæ~ÛE5̉6žKð%ôŽ*›ŸH; þ…³a{˜øy†ÖrÙ†:±êõFoP'ÓD’' &ÕÞÍ>£‡_òÈ.=‹Œç•ïzfl™2õÓTõëð+X†«ˆ'³™ÿ¡¨¿ÎÙJŽî5Τ+>˜'‰ùO›ìª¤Ãb·‰žQl_üBIÑÒ¾eŸ¥Ál¦ì!fH¿\MÛ‘EóDä¼Õç1=´zgóW9ß­K«D‘§–FëàùØå\€ý¼#[ 7úv ¦²_ø"‡aH#C¸–­Yå2Ý®¤Õf5 ç8ïlÀþ6R0vÏ埋ò&³ÈR‰4D*ÕÛ¬|—öÍ­«ò©;2GeÌö5D$]±‚ ~¢Ü(žMGLb­Ú³‰´Gªã´…L!†fXË ºFÌ@Çù~©^Â{@Ëq39#:ÏÆW\ +Qø›ABâ¾Zuã5¦ÎÝIéò0xHÕÍÔvùW+¾‘«˜dOv±ô£¡þ¤€Øô\Â4Nµdix䢤¸iÚËÂ~«ÄH:z’2Òbr¾™6*2ùÂ÷Lme¿‘ŠK׬]Ч.¶À'gÓK21!ôá|`ÝÈÊšÄá%39°"X5–H•Yd›¤û0é;~fíÆ/‰Ö5, ˆ"¬vÁØuƒÁæ}I{†L½;àRÚm±ªŒ½!L-ŠO á9èS†âý^ëY¢¾ŒÛ•+ ÞëVÓÆÄ ËùÃùÛ¸ôË{€W\ “Œ©Vhh/-~ØPMÂêléVêö`À÷z¬¢3tºí<몥:§íƒqЏ¢'coGbÿ…~áŒçK‹‹÷æàŠrïÖ<¡Lï[‘œÁ³‹ueŽÐ8¤Tú;3ô:ìEäS›…X¨Öœ+Agc–¸œ\‘ÄrX½í)*¶*NZ-+`-©©X }¦^z+w½0 Ï8Á±Jï”MX§²T\îr …ÌPÛšûà¬qà]å¬ÊBt+íŸÙ P®½’TÂÍ7}»ñbY­oþº%·½›Op½‰-‹ÕX޵ãÏlÙ®žX¨2 iÍ{ç¶5ÑÑÊ!U&@’Gö@(žSk¢Lz;í3¾¯mƒª)“Mq‰úíªžálÓÜŠ6]¡@õ¨¼Â{‰¨;;M­iòBQóªƒKæÅ‡Î|BÆ‹³˜eŒsÁúàÞ˜åÆí"½òm¼Ÿj™“rQ£†mXd£EaRp=ã(r[åŠó2ýŒ¼%„,}ñ},¶&F7@ ^¤ÂÙk ©m"®ô/€Uë–Îë¹C`þ"êyØ’#1›Lî§8Tì ](LqîñÒÌ6I²ÛV4abQ”…èñMj 8
?§mG› ²Ì;òÚóâXÝvÆGæÅswESÜUR§¿§l?¤ oŒ*)›Ø:ú¹Wkä¸ά|®cVì«ÓKW;;´óK܋ˆ:£Ü”$˜$¬žPE¸_0ìs*Ò-4ûf zõ!ŸA%Þ‰¼Ó›gyBGˆWòNL(ˆ«dÎL«ÛIöyT?ýv& È«–xCÉ'EÈØ‡Oç ™ì‘Pù0>J»ìöJÚ¼ÝÞÛÈQ–[ƈ¦r—ýdFFã:Až,3ÅHèË3¤’FˆçvÞðt^iÞìÔŸúmºçÊê ³ßß`ÿA¼—^zäLË6vîÝzÛX©@¿•»ïDsÐ3Ì÷+OeãÈ©çÊh/Eîh#O:JðUû5Cò=ޝH¾JLçf÷ReÆg™ÊôíØGGuݽmõœüÈJ®=5@¼Ó­Yþu«ó¿Äz=]ÈV1'óEò¸îMþ•U‘Éûò2`“I›ÞÓ^à‰ÆgC%›•³è‹.zo¡áÊé#…ŠiÂ*G1¯ÇcûûÃúL\IiØH µ[sl_ ¯ É›†^\³AY¨RroIÒš£Š­t¿1›¤É­ÎSEŒ¿Í=8ÖÕgæ! í¢¼Ö Ú žèÕc¹YÄ4Êu:‘Ì{qÁ~/ΨõÙG1åp Ng8Z¬!Y² ±*?œ„áYxHQòr“*Â}µUaÎÓN'c¯ÚßëZð*ý]JÚejmòg3þ»éÍ;9Ýn1»bçÎkNBóš„‘JKŒ†ÄhG©Z5»ÿñ?òÒ8¼å ,¯/I _cF¾7‹¨ùŽSíÏ+Ü^ÌÛ·Úg‚[¼Ó™„5r(Äh(³Â~(3[:ülx*ŸsOQ–‡gÅ즽bÔd0Qqïìÿz%Qvá·´¶&ySØ"Jï³s2Vð,”Ÿ…2¸GŒ¶¤T„6¸÷ZÑZiíÌ]¶# Õ¹ác6šø“G<´6Œ<¬#¨ÄáŠy91ýdÖè±íE„¥€áb¨›)øªFv®j g¾Õ}'ɶT„E¢*µbƒOðjŸæZ•ign5ÈsÇîWàm™uÖô­Ü•"ù >/ï©+£Ïò¿x éª8†ÅßE±tôÕ*%;«´‡ê1+R¼¯ä3+˜„<îò»!yVv…Tœ0àî¥}¢òùeÎÚå'£×˜°:KБl2ÓŒ¬5ËL¤ÍìÁÊÍ’E·'B_ æÛ|r²d®ü5Gó²nÌΪ—²Ê5œLí,mϼÑx0?Yeðqšöˆœ°f`/‡¶%†ÈZ£œx`Iì(½ZE{šˆáG-ñø3˜-ó ÊxËÞ*W²/yi¢O`ÇÓ°,òL_J„—~;}ìèãça§«ðãÄ †·œqPœjQ²¢Ž˜`Nîÿ|©A1Ë`%ú:¥\ÇÓxi—/ߥ¢»Qæªu5$ÀÆT‰Ýü†Ï;ÆÿE˜\ÓûÚ&SÓQ@§pžþ0BO¥¡¿•X‚¾¤Ž!:£;aÓˆÚøÊlœŸHÈõ ìFNQ¾ö€UXµ^NžS9 zÞúË—.ÒŽ=Cq?sô’–ɸT!¯’ßßÓN+µŒÙ­?êÙLÂmúÏÒ½˜×‚fÌÙeUlrB§ u½ÊƲ{®BUr¤´£oÆú{MÆÇê·“‚­))–”k’̀Ã@ÒUÆX¡Û[g‚‰ð—cÍ_.³F‰¹ D*çò bùp`#V3üeг 1çK#çòœJÈòi/Ã8ÔÝ(¨Xqr}%—(ÏÐÈ™;çm|„åø(ŒœÕB]¥ØðÌœqM†a@¹ˆ¦¬ú1WÓJ› ò&õÞ ÕÄÄT8‡£àv¸¢IÑ—Îõ–°×%¥Y¡ùŸk-±dGÕÂÐÜÙ¥*w˜¹¡†>‘*ì½¥¦ËGV³äʬaŒÿàÇ¡ÕxË"¬C<úº^Ó\{zJù½Ý6”)ÕÑæò½ ;{÷áS9íRùØDüÒ?dÊmeO’j1ÕñŸ{{ú3DŒD¹ Ùª" ©Ày®wµcç[ V6÷b oÛê²â—8ï µé|h‘»× yͼz¼ÏPî .Ò™mžùFѹâùåŠ5D®?o#ZE\Ûº+D~EÆ|›OÙBO0\BŒ¡/—#¯¶^}a“e†,’H¹ÁÀ[}.òÖœäN}tåÀ à£gÇ.a΂{Ôíf²Y+äà“çFí‡ZÞ˜YÌy%Bë°F˸_“6ß:½:Þä4KïÁÔwÅF:%B`³æúíd² •¿·L¿$Üõ‡³OZL—²sˆU-Û…u¹[.õDj!^D ¬ÅéÍûœG‚¥<¯§^‡I‹«ŒráØ^ @Ã⾄ï´Ïp¿ ž”EÓ©°¬Œ'”Œûy ¦P#”€Mä‰r¥A­$?ŸJ4§hg\c‹ý[ÑÞ ×þ:ø© äô›È¡˜cKú4;dWlAj!½O–¥b{D[8ÝSN¸+{AËA2ºR?ëjyxˆÏŠÙ‚œ{€-Ïò9Û‹HÜZ#B»Sg’Å”-µ¶gcdéÁ˜ÊI(ôÄú:õØgá)ºZ—ÓŽU6nÁx‘ "Ô –Ô«Ÿ'b»™´«<Cìa‹±™]…uuì‘ •Ž b=² ççèææãN¤ ùÕÀ<ºì·rªâQ#ì]ÆM(듉Á†þ¨P*1#óey<œÌ«ÓÝÙ§º1ä× £¿³_a4zí¦ÝA"†Bz™s‚3t3¯#™ Ø£@åâ—¬ãÞKÐMÂ:C_%ñr‡BHýÃåDÃ?êáéUþ«PESè¡–rWÂS”Z"hp\[—I¢sy]:’ææEßÔLÖiú€þîéç[}ä’š‰êzV"9qêUoTŽs8öý©füXÐ8°‡Z3¡k€ïq„. §®š W&¨Ðé6Ãÿ»Çü-Sš9Eðñ`% F øvwWlDŸk„SC×4½ÊÙxrÁØR޹+•{ƼW^ÜÛ.úLýnJU<t·¹ßFÇYN‰ý¢T:¶´>æå+•$Fü jŽ,'p'bŒ«$'T«ÑäCF%Ü騍½f³Êr§Q ÆB}¾[4Yœ2©ê Ã~~gï`ÏÜ œæ5]WÆì1x W€0ƒ|Éî‚—H¶X ¢®4(žPŽZs¦­¦µr Ø8Ǩ¤Dà˜¸¿×+£Û&Tybßl /²ŒÀ& ¾ˆãO;­–8úµÙÕŠÂŽïý36íS>¦’£IJV±±§^)ÑÔº®P©¯ØŸé¥=ý`pó••òzP¿Œà}G çÉÚÏ$:%Ž•¬üòQ•f+9›)iP·þv9~|ë.ã@rŽA$æÇõ5!R¥ Z±Y¹nVÝzæÐÍ>ËK­D Iq;à«-é¤$r>'áì3Å7 aw"Äù8«·Õžöˆiá ŒM¡pz)·¡ä À»`m9@$ ìÄâ‹så’$ùWÊ‘Äñ^€a©@W ʈÌÇ(ju¸¯@Jí÷9úÖK{ÆnÉ/Jf’<]•û“——ö—,j}C1(÷±¬97î“Þ¹'˜¨Œ"Å¥A{[cø®&Vÿm(mÈ™qŽ$Iü ·cg‡"¦Y~¡~¤.éÎÐFª8zsH¯þè9Eê"”¡"p}ñ3øCÀ5Iûarö…ì†/R•gâ|/hI’%IPY×Þ-íÁ:ìI1%7–ü÷~ bÅöË™Â<…ëNÞÒÏøécuº%yˆˆ´-‰å#€ ׯAȜ֑„"¡µ÷…“(FQþ´¿j,Ë´ïO;¤–äŠà@³|)£÷÷mŸs73‰˜.@;ˆ•’xi2{¯G­Üs‰~C"¨ðö¿*˜ÀØÛ—T¶9WïH$e›c¤àžÀmLO*³«ŠrQ/9+™Þ›IJf"Êvh}BêÓ-h@è_ñò|p2ÅêùI¹tIöuH3@.8yösø ™üãÈ7æEr¹¤iXV-¿øI^Î\s\zeMIÙ~ØêGfiY£þ`ź"Ñ£Ü7ˆ¼GÃ[Zò\|eQª—FûNUJ¥&àQ›»$ñ$N^}ÅQz;Ú¦s0y"…Uá¼;˜¯¼s)2ü0ÞG’ÔŒÁø%šÄ“) [Ýk?U&}ÖuÄ©ÝHå¢ï¨N”ù"{â:Ùc¼¡š†@çEõKδc0Þ œpw ª/äú¥G¨ïä‹Ïëéù]8² Ý“….\Tªòx xùÄC¶ô4³­öÊ#’íОhLqúá-ÿgoÉ¥ôBÇé­‘µ¸ñTÊÕ$3¯‡Å&ɬíè‘8á$gÝõ1°‰è(oój»³ædB¢¢•lT+[ÚÖåms¥Só  v ³ÖoõßJb”Û¢jù¨aO–%Q‹ÑŽdYhßj»b’ÏRi‚¾f_P&ÇÿE2€ÖƉDU'J‘:”ÀÕE¡dH–X•¦X¹LYÅÞ7g–Ôÿ2Ñü„ïZ©Á‰¿G­£àÄȥʋ1ü Û¼\ÅüèžîŽ,Ü8Gq¯®Á Êœ­T ú9fÙ; I‹ÆøM§ «)'ÙoKcÊmzxË¡[¢Kªˆy3ìæ %Úå•e9ï&°Çø3—ï0àA-óytò¼aO2æÒ·»Ý+nÜÆ²Çxĺªû¤h›Àű·Ð_9ÂA&ÓiËèX\áàÀO"$#jsw£T¹ 7©Hp&NÝQηR$"ÿŒû¹‡)Ä'«lyyüé}qÃÒÊeªómëæ&€×Ú3ˆ‰üŽ";ÆNŠ ’‚Jõ^§tD},ÿ£»æ‚j¶ì½ÀËáD¤BäÃß°mkØzV¿1ü®üoJ †ý%’*Zeøß¶C¢½3óêžN­¶˜·Ž?A.I‚8˜H½šÐx4¡7–“Ð÷<áM1F‡o—“ÔÃòB™xká–,üèdgJ Lá(îB,jè]c™žþN¯ìp»œ*ؽ$³3<]àX‘ag&!·— ̦Ǯ8Ú•òdœ³!9ñÌP|Êù Hð1"=në&2ê•™Ž×%â*‘Ù‘¥*Kü¢PÌõ .Úg"`¦y‰ÒŽºyZ.Ës¨“@è2,ÄQ¸™AªB®ø 2ÈXØÅXï=ÆUB_QõE¯«„r]žã–$B& ¯ÈšS³·£shI¡¬4ø§|g4ç+êHàM»™¡¹ÐUÖH•%vhïpZ¬qÁVV‹P¸?ª^³¢¸_ílR•b~ªs‚§µlcvÁ `vTY*lèJá@ý*­1Bçæ]WA‘ºg©(E_i—6 {.½W´Ï••®QS”«½u~Àr”æ{nTi]³3«J öÙS\-U¹lwÚ½¦ÀÛ? IPÏ%P.ž>iRÑxVp#èXcì‡}7¤ß»Jém,9ÆÉ:ëlé v(‚Š=1?eûpF‚\׋I=—);Û“;k¬ß÷w$à{„²œš{Zÿ£R°'ÐnÍ(£Ì‘A9ûr“p…Ä×n}¼ º´86 ‰:f5xìüˆ×Ô¼1“ ný¤ÞP-!¯U‡ öIïG.¾Y þyÏvHD߆‘&ÚØCw2ìË+}tW`©I¡ éK‚xazsDñ<Ú˜oQ-ÎÕKž±Yᎇ$³ôŽ~ÌɲT •·JÙkÖ½”ÓÕeñˆzúïþLôÆÚÛ¬¬TŸ¹CpSVËãK{–oÓ*üÁöj>à”€ð—iG‹™ Í˧×à¡´s­  so÷äCzý}%„@ {öÕ!Ä Æ8ÿÀÛîTÅ#Ñ7ê*ž½ÓÍ ÷Lf«›l•¨ù|±jÏÊV³¨&€ Jí€b‚쬂¾œo4a4‹ŸÕ÷áZ$Ta Of–;8olRÏÇ@~sŠ&3ù…âyÀ³o³¶ ÊQ³;‘[ÈËËÄgÓõÈÁÍÝ ûDj q-q\gTÌR´GHUP Î™á@€HÝL‘væ—!|(Ùˆ‘FBÊB/8a¯5= '„¬rð„;v=€·‰Ã ñ qäFà¼ü•o"k™}ñ í‘·¡Œ›ÑXÕ³«ŸñÐH¤ ûý'ø$3Ñ#}2eRwµæ«´™Ì8ÏPñn¾ó&0‘ùGÂþ êi¹s°ûŒÆÕ#›‘_MÙvVõVêžV‹ˆÕå²²"ˆ ðÚ©C]¡p˜ç¡hÃ`ÓlBw–Ý“%¦ZßÒ[3ðA"óp”êèÈWrœÙæ[Ø*Fû† @[#û[p\¯»Dd.Šlˆ%¯0ÄÂlƒìËHêãÇÚ«aj’aïI[?duƒUL_⊂Ðî„z03Âú,i=Úç°Zµ›ÿñ4dÈXR=\äæµÓæ¿$Ž«ª]¦»äÇüTP:O¯àRÞ'²™‰WµiÊXeÁMª}jN…z†kèJ8T¢e¿‹+úoÂ/µâþŒñ:2ŠàÕ9Ž|]¼¨·ÑL+†`ìófL½·ï†)Fà‰imX¹Âió¹šfþ¾mÉ™lù•%5 áª6*ª›ç<”Ï fà͹Z¸mü‰,2ãµzѪ6tu(š@d<™ÐÓiÒ¤p6û™Krs<‹v£°ïIë ±òBSŸ2<ˆú¥›³ì¼_?¯ÎìÃAY ZV2§N52g‘0žZ8‚£n‰¸´$ðé¯ÛØÿȬä—=¢0<ÝÙ™ËÇjذ±Ôüòš`³÷¢ÁÈÙWç`pˆ4©xö orN™çÓÐ ´šPï‡NlðXÜ¥[r–aTÃÚ2Åúª÷úÊ¥w±Ç ¤Ÿ3EÆiýãô¥V‚æ—®¹9ÑÀSŠò{Ñ0ûi-Wú)ÞŸ`{ö탷 78iWëŠC]µ"GT9ñ|È“$åNoèÑe’à X¤4¼%­ðÂÖÈa-–­¤…æ5ÙRÙªþDá&½¿eÇŸWïÕ«¹ƒ§à(ÿÆU+Ä"±)¼Ô¨‡B¹ t}ˆ 8žÚ­Žº†BÔíz¸ Ì­áud ÝÒÁ/wà¾j?ù&od<ŽöˆÕmE’µ1„ö)G[#qžÿ Ȉ-À—Îâ›2z¦ŸÃ_Q<ùq–öLgü©)ŽCº9‘½\^b¨ög^¦7x oc•d1?OuÔñQT«åî—J„p‰Ð+½š#›`: =6휼øº0ÛˆŸiŒ`‰Ý‰¤™ß¬ççO5…º5ìüÇ L‡ c&*%Òè-¨­á“)…F;vìߥ|Ëf¬p‡h¶+x)£¤B³©$•²ƒ)/ÅÊÕÙ·SN,Õssºovå9“>¨&‹À]oN·ŒåSÔªš¯HáãŒb(•vúdî·DÌʈÔ3`û–íl7ÄØ30¹lþ0FÓd—-„ °°Dk¹tg˜Ó‹Eêžn«wcé“bS2L™N+üEM§9¾eØâà™Ü1ãAÛ•…zÙæêÛÐÆMZ²®‹ô*«Ú1’=­.;¢ØùV,41v#H¿"¹ò 3sÁÿœjËG|ÇÓr|™P$â휖4à(ÔW·.¼ñQý Ïo<þgxüAÝóa~e´`—8nè³çœ•O {œŠëÂ`Û#^Sÿê§45›æ2­0säúÈDçǧ´£VI»¦"*L“#=ÛòÅõx"ÆY(Àã¥mBEø¨åýžqØ$óˆ3‡J^‹å&I gºBzEÕMš-u4‡`=íJ¤Q¼dŒý~iÆ^i¨ÞN©êÎg§5@zUÕ¨L™3ìÎl{Bvm_ź¨H‡.wQ“ñÍœ›È'HRˆÐzÈ–¬¸høÕ‚Ø>…ð½ÐEØDX.Fq‹$.ìO§k梡íÉ Ø[0›wðÊ‹X¾p|­É¿O;3šÞQ½u*ß¶;!fÙ@ݸKv²=±üjÙ„C“·CeØ„ûr̨TvÆÕdz˜‹0Õ¼Åá£yÍS!e›Ç´{Ú‡|ö—n oò^ަ4¾²£¡^åÂ…TN°›,Ò“©2¬^ ׯ—‚aàš*ª•–Ê_îtgq"\í€f…6¸‘&Ê—·Óæ°¿¥x©H2єDŽTÇäöejøëxŽ"SU%'÷ùŸYpæÛÑ“ßÁösfõ˜×!û"]9J˜Î&yU/ÆhX¸c€Eoj+Ìs «/f4‹+IŒ¦°&M l8zl\½Ð‘»lç]‰¤ŠðQªmV˜¢Ô+§W*õ)&Õ_Œü„›ï1ðš=t ¤ˆ.ÕŒ½|T]ˆM¬â6Q\SÖ²‰!îk„[ 7ˆ>òr¢·{¶vïüOêÊ1Ï^ŠPÛ`í#Œ‹ïZ bdË_h!V¹l,"{ôû7†D:•ô‰0 ƒ ‰Æ6”Ž–>ê皬pæNEùÌ×±RM ;'/DoP‹'­³vä yoŒ} ý<ºrçú•𯲤˜íÊcq›E ÓÁÒÒÓ|Àî–K¿é8ñ(oÖ9»°/P™iÒ³3ýÊìÃØãß=0ã2ÇO¥u’é×÷¥+˜¦ÉþfÆZp ˜å’xp¨¹Ð³§5uôÀ>ŸúV+Àå¦J&-ßêrà#8UBJd/´4Rg§ü—¹´UŸúqf?WÞ,9“¦þ•v†=‘¼ÁξŠÅvl0þ[A gš®—»e_!(/d‰1KçyÚ#›;Da¼°5z¿1Ô5gûâáCûùBnáù uê|bušµV"» p'[€<{¶³û"ÍVo±gG•*^>R7P+øR¸o79ÞûýLl©3F‰Æû_Ö{v,S—X¾À/SL%|äiÙÓõÛá€Y6"ι 2t[4Þðœ'0FK1¤Ôf 9–ÚAî/]*ánk£½F¹œµ²Iïi¢RÈ]gœ%„2Vú³ Öpp8«Ì‘H˜³5›<”¦ŒPs.ðWÝpø€O ËqË­Øê5E$+âPO HÐO>x÷í±Z°ì›Ã0W¶>Wn©3N ' Ä$.x„W¿NïÛµ7šZ„ÁÃ={–iå„Õ¶Z ¦¡¾Ær,u.7¹êõÕ[q †C5Š|óH.©ú(ΑÀ€ÙÞY8…÷Ü‚ýh>)f_„ö˽3­Áã[H^Ýâ§øpÏÍýk’•(3&ÅÁTÁ˜ ì‹ßjâ«™yÚ#ÀüDì œ_– qk¢I79¤k¾Z YZÒeci9N°˜ÄÉy±ÒN¸Jà¡·¾æF$J@>¨âG¸S#é6ØbÉuGRD»M‹N‘ñÐ~˜8ÊÞí®©›$|àœÑùz"¿XHï‡" ’v»6 j)‡KìuGà”劦 ¹R}¨'!5².– $BHö«±|E­†f÷ÒÖqã ÉȬåÌÖL©dà(x—'×8­·™¾r–.륫ËSíSÇѤ Ãg% rûˆªR- ›ú‘eRiöIW€ïq­dQÈ_íÑåhÂI(?oˆeçHƒ€ª?üK•ÌR¿Î´)|‚¢tüŠMñážÕ?Xî„]V( »÷ÔN‰là/<Úå¼}ú@c­Bn\¡e¤4» fÕÕ+¦Ó °\Ù©¤âøÜ¯HìSï˜aLÔ$\;ŒLpY=°ï5ŒÇ÷"f ¢¼ÓZ=FAP] «ËôúH6‡Ü[gNÏA¥Øcéž…#š±©uÆ~à,ÚÁc¤àØ^>§Zå×; K®Ó5Ça»Uz§½»(ª8Ý¢šÞ_Žñ¢¬ˆé&’ 5çé/Ív´a¡ãvv-c˜ê5"¸:¤ôkÒT2d›ÙRóÛ«Ââòœjã)HUªÄI+–~’ –»wc3<Ëžíª–#òbq6Ëàe˜õkC±ÒA>]päWù@®ôH…Û²G[,™}³qÓVyXbz'ç€c6ÓÎ4S¯AŒ¢h ×È($÷%ÕO9B… >»ÀXIÀAö°ë+º #†‹Šbp JŒ¤ý*CɨýøSœq–بß(Èá+NÐ8õÇX›Ï¨.Ú‰Nða Ö⧥ήaêý.â’}7Úð•(ÕªŒŒZ1% Nx€‹¿JP4¥gÕúnb7à>£G¬.‚:e€<9dˆëe5wäÀ#~*˵UûìV+m·zFýsˆ ½XŸNé)!GðvïKVÛ¾9Ëh茧4ÁwóL) ¹t^Å02Ùõk|Ý²æØŽZgœýSxæÄ}öZÌ,Ë/¾Æ±}ãÄúÌ4ÜS¢Gžxn¸›ÿ‘»é῀wRH&èˆ “GŠ¿w®¡sš1fÕHÚY‡ UûØ=¤8Îëçª0Ý>D:-{} – sQe8š­…åGÌ :áô…“jtY iåê‚ú!FLŒXedØç=üꧪG8¨/L„ö :`¦Z8WÜ£í¨hòsN“B Ì& ˜Š;#ÍÒð…&¹ÛYH×]¼ ‰_hËñuŒÌCÜ?^É»—PàO8À-žËñKhL!•s‚õôªWˆ#QEKS×7?$óU‰6y€^ºäÝP|Ò‰¤Á]Î ÎÚßLnÃ3®¬¼úÐŽð3ym¶Þ£ (t 尿­7تým™ÂD&霈´W®?¶ÿ¨ È$z«q=üCs+Ê3åy V‰æŸŠ˜t/‰,cxïqœùŸZ–Š äì1àpEž D_Åöbý•Ç€‡Y{ï\x8Æ<Ô¿Må}—ñvzåå˜%,drˆ=½Àq„ŽN¯8µ›ý±¿,ÿ¨ßlÉõ™†¹e¾#á19¾†œ¿è1N¢£x„5y¢É„aAÏKÊcpÜûiÅn¸g­*°(;ðÅäí õžeì1'ê¶­¥Üi6Ëû‡…eŽR#à=+ß8[ì5à;ßñ“Më?SQ׋0«¶wü•Ãì»3~hgT¹ß½ûO87 1ƒª§êx²Ç!¯Q H8M3”v‡Ýa5ƒ©m9:Xˆê-"‚Ž{è05,#a¾#9%¬7m³úí™\ìk­ÿ¨gBäoØýIY;н"ç þ1ô*ÉEì¡äaË×/™J5éÅ’üÂB4bî¨X­Ü¬©êNª›ÎWi¦ÝEZ*÷j™F§b ÷ÓûÞêyêØ#„Â4ŽWª5†'É L@Ïb0^A`T{¸²ø3J_ÉÞ$DêÔJéùÂp$Üv“àÝ™b)ÉÜæhÆŒQJoEMdfð4ΓiÙOƺŒë,¦qBFÚm݉š`â{Rz©8kŠÍ]‘ÆbÑø« YJEÅ')òNŒñEín·’ 3"U4"Üų½ÖáâCƒß©J˜Êj~íM{Z¾)È‘gÜñTØÔô祒âÿñ‰‡¥•Ï×ð·Þbá”båíe cîã>Uà42²¦BHÅQqoM##Ú_h¦åx+ø—Ê·+¬…U²«5éÒD–‰˜> }ÅhàÊáß!Ž‹yÎÈ€rñY~o¡IcÁ72oç†Ò|XhƱ…Ù‘ÏegÜÈ %,T’Oɽº¥ï6A%ñE„šæ*ÐK_Ugš M«ÈMÎ @C÷“É?7µ“væ†Á¸¸$äèwîNp³«ÏWŒë…&g“Àù;û¼‰Bþ,SF¹ GÁ§Š®Bùz°ÞÚK\¡vÈ´Áè*ÙÆ¨¦~ÝòÒC=½¹õ7"½‚8eUm°•šü›œà‹Ì²¡MìY$¢ây\ÔǃVÒ .Kïê"@xÏ0Éñ]²¹rñ¦ÞÛ…‡í-Dµ”¸:ܵç}ͱÿ2x–4Ãc'Kà}]µ>wD9ÙølU>Ï­³¯ yfI ö%3×vne×cÖ?HÇÙ¥¹…塺Õ]9ì¼dŸjÃáÀ௫sø.Z¶ÓÄ,>@w¹,’¿O¸Ý–!# ÑÄç» ›5|5í™ùˆ½—y6GíUÉŠUÆ”£ÈuR­O lÈrI²xÊÜšºˆCÂ’X—s†µ gíwÀÉg0vãÊ`‘'Ñ‹ÃEfEsô®°öª'*GÕÁ­²K§µ<ÑïÆ€W#¯—I8Sò I¾¬UE̱“›•Tg“]Œr‚;MðƒxÝ<}{ ~ ³²2'B4S@Bc/–n•˰ Ô+¡s&èVË·ã÷ÎOg$>hÌfýåIð—TòÞÖLƒŠ¡ Ûbàkb¹È —û¨Î”}·šv§=Öùø-=\éŒÓ†Ó䨝qÌ×'ó .ÜbyBÑúJS¤N· ý m-veO )Oé±UöKÄÉñ@0 Èà R•Ï”ø«p¿²WŠ|÷«*ò€È«p•LÑÜÿV+”6'”ì\ƒhV ´&Ræpá"¿Ìyûbþ´gØŽ´¸õÒõkNßÑ?§q‡!,¯·4«-œÇ°ùü¡®2ƒ ÿÈPn#6"¸;kç§qœcÙQ§‚P@N1Ÿh-í®(Ù)á^ê@MÚ@ *dA6J)ì¡=Ãq÷ù ŠÜ]¶2xj‡C4î>'E„ÄúÇYŒ ¢˜‰È¥r“w¶­Uhªäá–f…k¾ÊåM]Ñ–Š$|`ÓP¾`“?¤½£ÃŸí¶A¨"ƒk6-¥Î”Kˆ‘qÀdž¹ ™ o…ÏChÀ'ÄF×\îYæùÄèŸZÍ%ÚáGûštåJå£l¦a²P¨çÉÞ#8cæÔ›SÈ0D ³"^Kkn—3Ãe¹\ FŒ0Ÿ$HcÆcNÁ‡,ÖÑEž3¯îí‡ö;{¾zµ ‹Å0ØSü… RÞœJ£g\ì,¹4ÖL}G°ôxu¼$í—m5th<©hb) ešD›öÓ= E9mÕáľª÷Ç[°¿ÓûêsÈ}ɤ#²«‚ÇýHÛùæ‹ë èî‰ÿv|ðVâñ„ÛT±û•xñò­ù…?à˜àAi­Q «°aäy”ù©Hß\f#S¦]¿`q.”™pDŸZ%^K|G5ðcˆRÏ„ÌÆ1ÔŠáâA rêY+ß.ƒÉ¯ÄV$¼UÁžî¨5ød1†—§²Fuᱫ ‹_– °iIsØ,x‹èN%˜_<T7âªßªó'“IÂò–æ‹dQ#ú]ëRî-ëÆò•Ìà¥ýV^®ÄÜAǧ0»ð{ô›–IåÆmªI*½Ò«ŠÿtBÑ }¯ÄXØŽJ[*U½³Dªe‰œ|ÉÈê`ù0$’i'—šC“ɺóžq–†­ÙyŽmgd{LHβKÓ¦Û÷ qwýE>{xóL.jI¥=ôO<ì"´]íibA2̉)Eàëu"®Æ|©_J•yº**·ÐrWmZ%c‡ë´S= -tšùâßêr´}VJ³p€Ž j^+Ve¦µJÙÄ#yÚ̼+©53¤1+ÞÊ·â}ËÀµ,˦÷§ÒôLªeøŠo*z•{<'Å××Xá,Œ5 dS¨/1?Ž^íÍÜ–ü©hFe<"í¥ö¸6w†ä& ߨTü¢R²i¾î¨Däà‚,È0 Ò´‘ýNKŠ#‘ãÑwz-Ð[“+*ì’§°ÝEçËøÌ‚¨Pi—8>©÷mh'·"á5](TÑœâyÉ‘]^W'XÃAûvü™¸lF ¬EÀʪ ¹$-šÏó Ø)^9[wg¯á騹* ÆJ•fîýVíuŸ¼ü<íU <¤¿äDöjs¶’ß­÷, $ßÖårÖ2w­‚÷uG¤ûб&‘ÑÇêXª{{´gÙú›X9:)€/†Óv1ë¶Wr®®÷[é_z_Ñ‹í;v¦v<Ú#]i‘Àx^o—:Né&gÌåâuK r¯#æÎÞ©›/$Vº.Ø{ Ê.½ÑiXäqb¡ÃÖÛ¨×\"+'F•^náoÛÊ*n865ãŒjfšF_׬$ñ/ó;Ts›cþIVÄ[À/ LE«Muñ8Ñ(a›ú‹ò]Ë"ðL‘Fw}%$Ã$>èªq²¸2 ñ³‹f}*²òÊ*A[3îŽ#›¤íÌœ¹åÎøè‡RÃÓÃ5y4¸iG1l©[õ°'ñ-Œ:‹šÐÌ6¹Ï‹º2Ô •m–í;T òR©;À)ûÊu½^Ñ\E¥xú7цƜ®à¨ÁKÁz âøÚõU2m—鼑ÀÏ´åòþ& ²\¶îÉ:åä9ýrˆÜf i§;P(=|µs”u s¯±8W}œ>|™û‘ØjÞ»–çåô JÝi¦±=¹Jå¢=ÔÄ'ÿ;®Æ\ë1玳„~$fϮ¹µþßçíôWµ7 .eçѹ&Læˆ-³Èšð¦é¬â8ÇÒ2:5xOcP¦ë%¹ 2+ àº’&¢ãñpl††ízg$u{'—ÕðöiB4qïgä ú•JìvsfxîÍWšp4èWðtÈr4éðÕÃs·RïàœÕî†ÜîÜÅÜì/³—Îü…ub4ÿ¢¡Zš]Ô‚™°7rñì^¡.†ÅƒiO«"5Ï*3´ôÞÉÊe”+¨Ø;÷tM¸ûtÛ©…r]"èõÚ¾Üøš¬€Ø½E †õСø‰º¿ÐxeªÔsI]Ü€øCüùªÜO…}øEíwùñí •|±,eÇ™y“€Hí;ÀÎȳŠÃ¤eE‘ª&`Ú‘·kδ›Þ¥8,[”Y÷O3%¢ÌÕ¾ –IYNA¢ƒê¼Î’~ðºý-VP­åc{²%á\_§*nÝ /zq»ÆÖ§,ªÏfö5c¤Hî (ËÎìä&C¿ÍÍÉz/·$¢NÐD^8'盓[˜=<ØÓDÔ…rrs¼èGHÇXø)9bYRó6;•êç=ÍqeF4½þ5lÔ®5l™©lÉw(ŸQ‹W&åR&½Óæä¬‡?–víâw‰°I‘ŒìôgŽnqЄ{÷ÕRT’äÞC«Xx‰ñ~ôg¬m2rU±ïŽ»g?~_F[’Q‡Mi™6267;]·ýçûûøC‹ûr©Üê!Ž!sÜD„!} ðr·ÓupšY)²ðÅq¥sgWÜSªõ÷ Ãr-ýo0¨¬Ah\ÎP.ÏÁb¡"×t4ÿáXå<ŽÞ«áýA’î`€ï­þË®”Möògb•ž,CRós‚õœ¶¸ˆ¬¼DCdÂÓdoU«$HLù|ßQÑýÄ™¢\<§r«Wai&å²\ïK¢Y%ñD߬TÅòêú9oT-§+óWHµ¯·%Þ–0h­·á –kÌÎ ðPŸ2ƒ„‘.Ù wcl‘ž >Ú!–—™ä-ÞÍ÷aŠùãlÇëòkIµÆá†À¥rŽyºyx¦sv›}nåºÃûVVœ]NÚAݤGáZ–;W¦¾ñÎìÅ‹aÍhØ‘wf[´O®SIj9M‡‘ãâFèŸàl²sB ';]@ÔQ„ñ#@¿¬°r×ȯYVg,DšýˆXÄ‚Ün¤ƒÓõŸ}û «”(Ã!¬,ò¿W`+x[P„ii‚5×{`܉SꘫĪ´w¦ éC;´ƒr‰?3‰ëŽæûƒò}¦?jD›ÛºBä­cã8RPf“,]mÊmÏ‚uªº©²\¡ñ‘(\CI ÈZÒGñm¡nM¤PKNŘ„f'ÄlÄ–fâ}¦{SÝlìþfaÎaáÜñ_ÈqfÇ6q¶{6¯7l³é?æ¥NÅ‚×fÕö.µ›ûí0“ÜKÄþ•ÅJ›w ØË¿¥lÖ½Æm}ÄVbSrè$Øš^µl1n…êLa{s­A¡6´˜ˆÿâi ¸è¤¥¨Ç˜ñ Ã4»'‚Ÿ`ê—5zí"Ö°´µ¢§¬¿7·‹S•üD†t6Ž&Æ74þë>,Œ'zr&mEõ&×ìöËKXñê´ñ­èƒC˜T¢ý<¯É9§iÇŽ˜‹ˆ;áá¸Å8‹ñ/‚Ý=ó¦Ò«Y;•ÊøN¶ß8b kW `³É÷¶]))¬'éÞÀ=…w`;ƒBHÀi‚ÕcÎHðS*ÎR$šH¯ëk¼aóÝ;“R2gØvÑ gˆÖ9òÜÛßYÑŸÓt‘«Ë.YŠäH¥þ:Þ…+×ÞüÚ.ÄÎ$Ñ©©Œ.7 s$s@ÂEžc)_`„ýV‹»:”g)e×£ô–îÏÌ2ÍB<¢ tØ©%ÂŒFì§ÓK}·qGñ$¶}¹I‹AÓœë(ÐIOäÖ²òöhÎâE'‰¬È@Û˜•ñ€]¹—U¢ëN€€n¦÷Cî¿ëRXX¥²ŸÏò4õrîÀå‘JÕ’øš0–h¬,Û¸~›šÜág±±Ã]5M)CRzs½?Îû Aè]HªÛÛWWˆ„HiQ¼¸÷Y}|¹Ô«ü}õÄîÅ P/qϬ²[±ÂßÏ,&lî1Nþ·‡jë:Än‹š3qÆ*˜)·ñп´Ý–Á$ëqðRn´ÿ’91‹®'w°÷Úì!±6V ‹}ñgó# )Ù¦ç×y¢•ïè~Ê4ø ²…‡svdþJüpV@㓇©ÃÏv×Èpðïá´4wek¨EWÖ§|™Lœ:ch`30 ¦;—áù:0jB“¥;ì«+qoœüÙkJîtf‰/LÛuáÉúØè„5`µ$×Ï:û¶í3–Q3GëÔâ¨dcñ;Ô×ä¸Nåöo5ú$|—å÷o(ÜÏg(;Ÿ=ý¥·¿É„öe èàÔù:l¡ho nšÌo܃ÆëÁÔÖ«NˆvàŠžÞ"¹IU_½ol¶v½èÐhô²D¼Hëòxþ¬‡.špŒÿ€˜íÓ ÛÆfx(dpp=V¯.Pk¯l…"‡ çè^©¬Ý²‰5öAçtøÏ© _Ÿ·1bc;ï۩瓲lߥÌö]"üºmC=zž:P‡ñ„W(|Êñ­%Þªä3ï7Ød&²d^QsÞz§Î„Œ”Aç 8ªøáY‰æy*Ða0Ë>6ÚÃŒnàx+ƒß16Ð/‚ξ¬Â c°o9K{³V¯‘ý2ÎÐ"ûú‰1õa“.û¯u«ã²!ÞŸ_i#‹CH‚Š¡þl*ÃÂjÀR¯â ÎíÜþš"ÌwЧ¥l"…RÜ(ÔD; _Åmíµ‚™dÒFlH:ä¹öð‡nL=}Wó‡@gþdvÕ¢šzKT—!)èírªÂÃчƒär¾Ì%Ëé”Ò¯~KQÅC¤´SØ¿&Hs{(=cmG”[«ähÔõR”öOŦÒR¤.Ì1Gã_µ[#ñߦW%á ð¡È¾€mëÉÙ…êL]ÛÓ+WûÇ ¿–üîμYÎʇh¯6~;œ–˜;AP?”…äôi’ö«R|Pᢋí ¸#D‡3uʹæ~‰Öì)òE)Jƒ‚­oÀ’‘«Ñ'ŽÖœ”MºûZ­ÝÌPP*‘;A½™düÞ­L“}‚3_'¬_šBÆ1,ŠÈÙÅ3¦¥$\ã§Ç±1·´O4BvALjzø„QÛéiäËòCÞ¬öÍ;MZ` ²#s‘œXŽ™ÉR•þsã¿Cn\&¢¨Îí>|ïüËwvÛ6KyÆ z,_˜ö©äÌù®¾zâžhèUkXJÞm?©ÚJð«ªsTsýV&޾-Û=‡Ý=i¯5é¬3Œä÷õÝ%T·í%³ÌJÁSzÿÖÎ¥¦K¡Q[V¿šß姪Bò§]›ÞáØ2QfDÀVìH$öµ‚DÞÁ{+éÖ“±‰Œ?ˆÄs½#ñ€lGᇰ„¤ ¡sŸ?S€‰´od½c«ª¿bõ8%ÑìÉ-¿Ÿö¨kà•ŠG¡uFpã–÷@ÌŠá“KÌ2òI^2(÷5&惢Ï9KöÖqóéKŒýpâ ŠãnÅÁL™‹ŒŒÏæÑE½ö¬ôdBË¢žZÇš­uµåV¿™‰êh ÍÊñÛßîCÄyU?¬jrÜóÇeûçé:^óÕè ò^¢«µ8;¢ÁÕ$üÂèi3…HÖÞ25l#g¼§§¨e÷šÿ18À%,Û´ýƒh|%å”óàhíBQ³{¹Vž8|É?¦x‚9ÒK[Ba-ñ†~~’Œ¾[]·HcX-çý»‚ROøwŽA3{XŒ@®–· ®Â_ì$h©ðʪ–Ñ,²d•¨ô&òxŸ¯ú5ÁÑ3¡æq –EfHŸ7ÃèW^U6c[´æå‘¸´:™kµÛE/µ»ìDZÄ>y6Ä€A§ÿÒ¼{óSwÈfXµ²Á ”*žÄ‡5òà:„ož®j4˜‘½$[TgKï¿$#ˆ· ²Ä:IõèÏ•¡ÝÀowØeµQ·ƒãFõKRœ7—ïöåäÕ ˜Û¼¼µÖŸ=‹e«¡Š—v_ ð®_ëGw…ÿðªkËš ‰(#ª‰:º:óà /~šèK@±SÂß,ÉÔª_ØZ‰3­©GQöF™ÓgLhOwgÅsnݶ¿°;Eß©yŽûÅûÛå«Å ¹ré]°ÁYÇZo¨óî)6»{ઠÓ1RÚ1ñ+F,w¦«’Sʺ¶ e‚©RiŸÏ •3²(/žCí*@ˆ(úTˆ/ä&×éÌ2ÎÇ/À—T%DŒÒÂÛvºU™ tr0ì‰4-c:)žÊß276Ú—š`ÂvÉ[Z‹!Øê}Ç!ÿInsåÇÙÎ7…I×kiÛÑl xº£H×'¤R\*©o‘9Êa3®œDÞˆ'j«:yˆB'EA¹¶¹‚Èšá ŒœŒº¼X$}z²|¢™ÇçL˜à68öZÔè D4Qi–?nïcÔCŠÈéô’|¾ Ÿ¥œLC[p¿¨ļ–¨‚…’ýY17‡"|öáD“v¨5/ÿPKg¸Ì÷H#SfUWšÈ~å¿Zî×¥)‚Éß$H]jÀô2ã1fÈÓyÀçïI $j M ¾ÐŸ|¨£yª‡Á¹v}žo—WÅ ¸M§‰ŒÌ_×(ÆÕ «”F`ôøoËr²øô÷¾õ” ‹Oßo Dò™9ÂÙpzÛ,Þsâêɘ%´Iª3Žô«µçzY!yÉ6‘†ñéË ŽÉ™åÄœk‡Z.á‘OvÚ0«‘úk:ô,ƒÔÐ ¨ cÂøÊÅ“Ðly ‡Hè¹›yøñ‰æJe°j»d¥6©IUž“´±×°‹ƒ´Þ)Wk‰æ/yÕ½õÍa¤OIÄDkCyÍÍWìÈOIgŠì"—ínnÚiFf‘3š¡êƒÍÞ¡.Άù 58ȃsb ¼¶–üoË(—X µI:ã}W‹œñ^‹«TC€HH±Ý¸P¤ã2 †Ç¬¶Îš¦wTHu”c•öç@5“Œ¢ÀŽWþ?uG}ªØ8H#Z!Á…¬4÷£\÷á—FIûÒµQèËU¬ÍǺ¾‰óU`æ~¸èÔØéùù‚U>[8[:+ïIÜ»«W-Z_Œ:¡n‹>c¼âhÖm"® ô5Y!ÔÄÀ÷Æßð•gx÷¨ö—þ"dý$”`ˆ…"ì1PtÊpWí¡Þ}Joðu¹ÓïðÜ`œ7óz/ÕÖ+ü‰à•ñ>“ËjÔnWîØ/â<å£:þL®—÷j¸ñOOStób*§8×./‡,‹²\ë•P°ÛÅ}‹hçú§Â`Þ t¨æä:¤Ì0ßeod°Ñüàï<æÏ»ÎÜ1¾|͉º^±ÿ’MWpëÄW‘,hé¹du‹¨ÅÖBô!²}Ü8ÑV«id"ùSÆ>4kÍë§!0¤<~±ød*&u[#–!q6¢Ðf'Gl‚¤[eωY•›ÇÆžL\vå¹~–¶¥3„:Šùâwf È7Ûb¯'â;qÌ¥ÅAqUŠŠÃúÖÏÈ5vXTŠ[|+Òt&R¾fè©|9^l/˜…¡V“ I7óNEÞ¼€ Ô9§CS“ÞHGÍ› ‡5$ÎÔ…%9<ÝÒ¼lÃ.½›½Ãnóâ y‡ˆéÍ¢Ö PÏœ©^5[ˆBK~p1$µÔÎûI8lîñsÄ”¿Ð@5óžo±ÞP1$}-†‡»N)P4L°úÀRz{˜/Ÿóe³4=ÜiaÑ3}~Ò-5~bµÀ?C UíòSáö²»†JW¾®¦ê„ÂcžÄF®™ƒñÚGµ¤­ª1ýGØï«÷5±­œØ½C(—/XÀ&4½wÇýã»LVÈÊ–añ]H“ø‰ëŸs¶kòRM™ºúi§ bÉvëÚê ˜ÅÁ|d·¡xYß“ô 1HßÉ/X+Å*>KËx¾àµ˜™ò±gŸnžbåÖ ØwæJS6fŽ¾Ë•PŠE~¸ _Ë %Xt7÷ÞX“ ‚AU…d­ˆDŠ{Dº0¼ðG¢ œãnkB,À;×=Üûºa÷N>¤×ïögìGØ¡éT¨»wÌt¥ n@h54Ê-ä(5[¼:¬VåG ”²°¤ý… ›‡òe{yA]Ž—›+gÁ\V1 «ü”¾Ÿ|Ô…æÁƒ˜ »ÞÏ‹I`„•¦’e°÷æ0úÙÃ1áˆÝL»ý=|_YWÐØ#âSHè¡0ÃC/Y°[×%-³ëi9鿹ôôD:L™l<}wjÁápJ¢?¬ ˜ÓaÂô8 âÕ»{¤ïéÞ#FN§f ›AB,6Ë4ÙôoYç¼|7÷þ–‰â´¢¬\FCå€\Ö$EÖ_šyEË!»v¥A¨6uæÉ€5i<ܪÜg,A¸3ÖÕ¿˜µ/«çî—U¤í8šˆŠ ÿ‡I¢¡Ìß®XŠ<•lC¡>¥Žî½`@èOý˜§K*‚¥&¼XÔ?ÂᎨˆ¬Ô( êï%j (ê%Ñ…Çô=¦q¸Œ!z¿—Е8u*ö¹¹¨½FFå`°“›¦dd'TC7ÅÉɆEJé.Æ*£˜K—ÌÙÅ{sØ(õó´Ož×U§Í¬7'^w£Fš"?—Ká::§„«§ûKÇkkT®x!×1§bEWFú':æ °û!ߺ4Yù¦Øôîw&"Ú‡›†« SB•kÓ>É|¡BÃ{ºKçb® …GüŠ„«¯ëDcéu¨)1?È— ×Ë[‘»Ûý~á`ü©¦˜ðupV;þ1‡åxí[IHJç[ ãÂgç,ãáÄÅ[âÿKÁ× YjjD‹ëá­¦¬´¬úˆd¬K)™dH#ûn&¥ip4ÙÍCÙ·ýYÖ=ÇÓP+×P ^ÚíÁì“¶+r¥õLQ£Ç2‰ý1ü\,^Q2¬’H˜w¼HUàN3ñÀ–ÏqÒ±Lá(©+ öŒ8b»gö~‡û\ÇJ»N[=‹Iâì~'ÉϽ]ë*Z4¡W$ØëSŸd¯¼+“–¹lœ)öaÂëêÅ1<¥‡Œ½W5irÛŽC6w,8R¸­;O·ˆ÷Ô7Kœ~BæA$¿GŠ \ç¡:,'_Èå,$Á#ûrSÎËuÅ•k{ªéu R*Çõ:gtž‹VŠ ñų5)ðFðSß·—³’B €£†9ºã! ‚T µD,µ„¬è°¯·¬þƒ“Õ8 »Vè£s5þéñÂ%nŒ'hø[¢€¸éë’œ¦€ø/û®—;o"•¥Oú~¥ük®j„gâ—é÷Š4<ï #ºŒ¢upÁëGÁˆ4’Áš,b .˜‚*`·L‚ýèëCYLQ±Á 'í‡JSÑÊ[ìÕÛq8w2Õû–°êÙô$ÅIX5cšÞi3}!G ûÐoR?2™®µÐÔŒsEìk_q´BŒ¿›l6{Ø«ùê©gÈ™­ˆ(¨O#[ÔMLö¤OñYRZ•¸%¥ÉÓhë‡jÏòÏ4Úuã­GŠÚÒpIYttRù£pé…M3yLÁìùêÇë34ð0ŠXÂúÄ8Ä2¦÷œ·ÁŒÖÞ.Ø®”=€×Š9s$—Ž\ú€AEgá×ÂO³ò$¥×9BÝÂþ:èç‘×w¦¦àJîhhe‚R»¿Ã¦n5,L?/ê‹m»‹Ú™;ƒ‡5lzsÒqýT±©Ëý1 ϼƒçK¨J“,³F_8/ý\CkÖ?~Šk»;½~ëÞ`÷XIÌåÁè–ëg”§-6¯ö%ÎÊ)\þ¸~}(n.á!R:¥e™yâ`!h¿@™u¼Ÿ1a![ùJÔ«$büɵ;éÕ$SÀã­{…ÍiŸöšyjý1àZ™Ñ¤‘¥HÅŠ'/š]çîQ<›^\in„!¾.,ÀËni¼¾Ý°ƒiPØ"PâYíQ&ɵ¥8%ÓKÔñ±œ-¶ÜäÓ~ÝÇ6žN‘’Íø ?'\¾6Ö ÕÈd 8µÄþûZ~Àyálùh“I~œagù”x¶Ì[¦š>Eˆ³®Lfýr_ï«U§ÒB¸CÎnCY§[€QɹA.èö¤Ot—W ™Ç˜ñ³_Ëžwçpá ~¨í% 1¨yw®_¢s³ÙÙÉ™)l쌖-óÑ«m<¾á$wÿ.nD_U)Žâr•Ü< ¯¹öú£†ó¸hþ¤ÂÜÄZá#«!ìÜbÔjQÚŽnÁ'd–ÕG 6¨G$®×ÑAêèBý0þ…yã©ñæú^D°=8ìÆß/~“„¦V>=½¨ßAÏFae¸¹1×aÕ’±“ÿ£KȆt Ý ŽÙ5ðE]½“mt–¶Ãpp¿1­@ÔkquÊIìãè€}·°jômE®·Ör.$)†ÉÒ[ «ìº+u•OÉþ ¯=¼u<ä•”„éI¾†Uà˜¬øÄÜ`€ÃÂöO>“FB»º9@OuÔGcñ´dO8á‘ö6ÞŠ’/_Ȇ%–Fæ˜ð'd%µ×˜vøcç§ÿæ/r„#óލïwuïwÉdþF÷Á;É*ò`æ Ñ©ëí¼À1yÎD½z÷Xœ„ñ §¹_C ¿Ùʼn•}­æ²Ñ‡µjÂéåˆ,)¢ëêÄ•f¾à»Ð6W# a÷7Ø{ìN6û¨Áwåa…ÃJÇh@ã.Î0ÃîAk,èÓ±pΘ6ÙeI›Œ;þS¹sÆ+vÙ˜]ýÑÕ€ïLˆ3øV)|?6™ã‚x/eŸeÂ'±7"\°9€3rnØù²&t « )jšn`Bã¬X¾{*QcìÛrHŽý$ìÐܳx±pSð'Ú"Õ²uÊ´;©-C JX"x0eÞØß‚eµyõ ¾a/Ñ À*„7Jg×aÊa·I8χҞ™|“3z¥¼ëº l7s¸­)cŠóU[§½|¯õ[ôM[€YµwzC÷ùQ0ÑÅÜácŠDì¨Î—Ç;³¢ç‚/†éëìÂõؽw‹³âqCëXT§p§owtíp$‹É=vøþ¤Þ@–v*Ò“ÊHØSKÉÜ{÷ìK´V‚¯'Ý/Œü#­žà¸;”,Ju EªÌZÄ#Ù”ÁÅ8Á˜ý6£Hqr8ÛrÅM2¿-çÔ%Ð(! ƒ0æ,óöf +'ñéIê”;ƒbë2#Ês™ÜõÚy5Äž²x&KKièY;£PçE˜eÇ!˜WÏ3ú)•©ÇxÇ´*&w@~ÕÑv’vcuˆXïhǙΠת43ŒA+õõëT9³ßÛ^FB}±¼5ûÚ"MwjÍÁs#UÛkÂ=#æH3öÇc›âUšÒB"(úQ:ÚkOñP‚æÂ†ŒtQºLrPx=ïýÒ,ZBøm*PhD‚Á‰™YÆJ×{¹.ÁxDl¤óoà…^\'À3íKÓF (‚(š;ú£ŽŒÂ‘ÑX¶’¨¼S¡ƒ M‰Œ#;°Úýû=´˜†£ísÍ.‰Úw_Ó,³ß»ˆ{Ìâ¶+öÛѬ!äâ8¶‹ÍF(š`¾C»‡+»öÿÇÿŒö:~sŸíÿêÏ^Ýh@~€ëÿ¿åg¿vô+¸K¡³âÿŸwKwú}‰ÿ¿ü3”ùE¿;gþOùá¿–3ù÷*ÿóãs„òã=g$óÿ·üLçøéý¯ÓgáÿýÙÿð³ì½V¡:‡93ÿ§üPó@›?÷ ÀæÿÙ?þ×UÎþ}Ãÿ?ÿø_þ—ÀÚÿý—ÿ×”€é‡ð'AX4í‡Í÷Fï|üW·çÇìâ¿"¸r§üWFWsyŒ­îÿ÷yúÿW ¦6<dipy-0.10.1/dipy/data/files/fib2.pkl.gz000066400000000000000000002715351263041327500175070ustar00rootroot00000000000000‹bY#Mtest.pklì[iW˲ýÞ¿B™g*k誔džD&A¯•C©Gi±iDîo¹#=*(ÓY÷ÝõÞ‡^65dưcÇm=µî£F³»vûoEä¿$µ£îê­nº#ÿWê/ÇݸôºYÚ·®ÑÂÕ¬fLJ§CæCÓ ¿o½-›Íò´ö¯¦3G­æ±iÕëµ~®Ö°|ÿ0¯õ,DµÖF·î®µžþOO×’Z+.’ÍÍM¿[6þÃ_üº€:þ{%Ÿá²¥Ë7kü²k¿¼x­•~ÿÖe]ºô­t½†ò÷³îµ”¿®×zëvP¸µþ¿ÁùAoâ{¹²˜g'¼zéøâW‡?|$Û=¯ž»޽lÍŸ7¾Î>×Ygü²…o£ÔÏï\ºð]-s_Â^gK]{nø#ȯ%ÝMùÅ\áZð¹±òöÄ“ô/Wõ%¿B2žû¢&ÅÇ߯¸ ùùÑË®Ýàõ_¶ÆCwÛýf+\!ë¥r]§k½þ«Ùï¨Ê=Ë÷OºâŽ»»hÿýãʆ×Åë/ W«Â7 Æÿëâ¿jô#=v‡J¶¼¢¿jÙ+¹æ¦7[ô7Їýn©ûϯýy£»YóQ㦋^‰•ûv꟫ÈÛˆ~Ëÿ<÷ Ø[X«­ÖÒGݶl•ݵC!j¯ëµž×?‚ŠøÛ1(:£¸Öz-ü7hvcXˆ ï?Ú7.éÛUØ®þ`rhKíuyù°æWÿd¾¡ü­:“há?¿WUw´ånªš¼ -òºšÀ“ŸýcžœœD»¼æµÑ~Ëke’¡xËb: b¶òèÕºZðwÐà‰ ã•lÙ?Thö4v€EŠâ-«cˆ5ûÒ¿\ßZÂòþ¹J?óflãÈ,*ˆÛÖXíÄ+‹ }<ƒ‰÷ˆ‹üƒSËþ‘ñó­'x+™ö+ú‹QþàtZæÞ>¦þvzZ¡Yž0€ÿžÍúeò5*§>ÂwR£ ôéäD;[P¾þbéM§AÚ~!Ô J5Êh´€—I^FvH°ôó)¿û2Ïñ"çÓ}±òÅ!Šõ+Çpîªfˆr|Î`º©Y½Lã‘o­Æš·W0XˆHÉúÓÌT?ç)D‘N&½'Î?÷/µPCâ¢TsÏ€¡5jkI?hxÚÄêÑ/KLê÷^ŸátQV­ÇÀ¨P0:É×8¾Ê2 É߉‹<Íï–Åp¨;QUY/×ü6^‰ÌH™‹7Ÿ×°.!  ýD¶8I©ÂA*± ÀŠÅüLPÚ+‡’eœ4Q™öDeŒqÀBUœVßÓè&¬5L,üJp—^y¨·A¥øÃÓÉtÑäbª$lû eë;3tVÒ]#fN‹“"ÜÁôŠP™ hJ _7ùä@ø9ì"ÀZ–è.t({¤<›ç‚§ŠÅHC:ëËÖI·ñ ¼qÎ> EŠ NO¾~G¾îàŽð·ö˺÷Fƒ;_Ôz¶è„¯;¨±)×Ùi†Ø…à Ý\Àª^…² 6ç¡ÔÅðy¥Û™‰éj+#¯éTÜâ*ªç”¸¿v*Í߆ï¨ø ïÏÃÝÍ]Õƒ*'?x¿²zZÈ^¡‘ét ÈŸ@L1»¡BÏ \›¥ !tÖç܈¤Œª˜Z¡Jn}õߊ^GmZÊèãOŠ“Ó3ß#TvW®«k0´ùú’*øÑe´¦¨@‚‹4~B”l &óŠCý«Ô  Œšíl¿ù®€™Vë¡M̓йøZ!rŠ­‘è›RàL-×?Õ4µçÃùNBj9ªV¿pWœðï/)ŽS“>€šX5šü1Ô]ºDq`¹p£,ßzNîgÊÄÌ£tçà‚G ÝTÙ|Ëì­ëÈ’Tà'!%•úhiK’m‡î½óx µ ¶oHA)Ãi³ÛÓ`ÿIjÕ‘á!(JTå¿ Ä Œ<&¹opa×Ù¶*BÅÃÕ"â ,Ý h7fgÔÙ0vxC¬Ô„=QÊüýb>A׫Áò$`>¶ !4X‡æ<š9ºŒ®üÄ…ü€VYgE¨"K±F+¨—"Zb[-~zÿE…º½BN•ñ1’ؘz„KÙ·Þ"éR<1CUSêج«ŸºÙ@sHou ˤˆCøAêŽQõÓŠpYD¥šLª™F UÔsç&"†¶r¬‰)/”­ƒd˜nÀ´¨ädZ%ܦÍ00ÔÉrâë«°CÞú*Eiã"1´«¯ûÝ7¼Ø®pÈB.d³Ëdz8àZ!°¨;F’E7 è”_T›™zÊxhÖôDH× _$‚2ë}…²X)£ƒlsB=1¾‘Ìö"IQâ¡Àq1ïÉ©0J)3ºP‰®õ×k¦i[b¾áûÚÇ0"´Ë—Ò„ìMŒ`¯¾L¨qnõ9êyG-eÁÉ €Fáæ¨ò¡¹ ø-2;/ õ–Ü`—Úˆæ/1gØ2f¡¬™£Û÷1žŠ©C¼½Ô J»ôq“ñ_攆‹—¡©@Ä =g1iÐ`÷÷ὬZ³5Äå$?´ìUO8‰ÓÔ:b+©j:§èo€Ôt1 “ºljX«{C6zBá“|†%ÎÖ̰9¡’Nû‚"7˵ qµ÷ñPƒK‡ˆŠ¡†‘fŽ¡ÑèTÊGI3Ï@²y(éèNø™ZåNC’–Ô›:ü¬àehìÊú‹å„×qf'<ä°(ªê£ðRjÿ2ô&œ¬s¯$‹o2é`à‘œ"§/${GEñp˜DE‰šûŒï£Q8$ ‘œ?æýйz1C˧!¾T+aR­`*™^€]†i²8„¸ž“›1~4²0Ešt‡›±ÝªäM0ìÞ.–«ÈûèXMµò·È>s \'HÕ?òEoPŸ‹ÒC.‹™Uš£Ï§€˜®1n9Tš2_…[!¹ö0º¥é;Ú¡Nû._S;»¡p "X[#Tcô. Ý’ç³D}ùºê…)çhµ7¿7G[(l2Äú#mQ¦WÕ c9þŒŠÏÔ(êÐÒ ˜ÃôIVhŸiUP¢*CqTN+šÆ{Ïæ“*”žáK¸L\g×RÏ?®§>  @z6ހ狠¡)[Ôx&LƦêß?Ó£µâ­ ðFË=‹£°–ñ³‹‰ä2N*´žâj#'3)Á¦†%.ä´ më·F®p·Ý!ÍE\x8­hÒœ&ç!Ó”šÎ4&R®ÖUèËpþc­:Çj`V2´Ýoœ×t­òMàBJQ£êbT…¸ØÓ¥Iñ86veJ p¹2tq, ‚Õ²Õ=Ùªè/ 8aޱ¾Æy:j´,]§—S«+ ý>²®æ)=ÿÅæš_íj„Ê;íU†B¢­Ãj®¤ÓŒ,$$Ä$u2£bçåÔáþ~:ß'Tƒ¸™ª¾$CQ´Ý,E4m–Á“‘ %—f¤hšÂžf*´ á€M˜3®™Éù<çxtÛÖRWò-í5h>ÁEg¢.ùk›Ž6ŠºÄŒC·Æî·ý¤Ri¹Jp¤›xèÂäVF…:ÞCG„6ÉœÃ:¢;kªQÌÄ|¾DsWÓʹ¨à–Ô:^äã(?í¤™(&,éQhÖFÙ€âén!>[)h¶Œ;CJ¥Œ‡Šˆ&4Œ ÃÇ(†éa‘ÅÛᔦ¥(«Ù=œ4Ï/§ÁÒ(˜|k‹ó¾ø0Ì~Ó/Ùßé½êךÍV£ƒdöxw`AéÞPÒ«#Tv..ž+Ñqñ"63`›³¾P:`žήæå :¨­³a ôkEÞ«^}3Á„»_™´«÷-g“Nt4 þ`3™5PÀh³Ë+Uù&L.Â&œ dA(ÚÜ@'qx¹CSŠñG§Ý8-¬^ô]t¼n| ˜ ×SjF8é0¥$ª$Ší'¦Øä…+¹6¤ÎG¶r¡¤Ò}°£þÞ'Àóö;»ý|60f]3ŧˆÀ¥!ÕöÓ!§u}Õ£Ù¦Ñ4HãJuÊœjCá&ªØÔ4ÏŽ¨àjO pèZÄN¬2Ÿ–§ (h¬Ý¡ºµû"ö‰iZBsRŒ@Dõ7ô‚ +Ól"p®é&;ê¸zÄ8Œš"ŒÖá4€{ÐJ6Ô·a&Ö}Ž×60{(¢^®¨/rOuBøz]$ëBFª}ÇŇ5µœ…A*x(îD²'h}¾ÅâvU= ¥ iÁ#ø²#Ó…«ææ(£ §Ìç~u‘B€ñU¥);Sg Êꀈ¯úÎж­Pg6 ¸ÍÕ‘D‹úãkQÍ(œ–;륞QÛ/ðÂ_‹Ü9õ÷COš”SŽ‘¡½‡TT$€ÊÓ…1gúÏÄÔ^¡ý·m4ÜŸ¤&A>„§ —ž¸ÈqfÊÆ~øÆŒj‡ÚsX  f\Y®p¤ e ¹©——†&Ôÿtb®CUsÁ_Õ õ"Vï_œ:J¨zlö”ÉŸ»y˜JÔ¸U°T.Ñ RN6ªÜñ`|ÒìXÍ(!ºÁ0ã´›F×i^Œ„Qo·Óu ¦¥ìcúÙêŒ6“¼ìY{¸œÊ…Ôh6KÒzëK`?hïø÷[¯ø&ý¨…®}ïÚé·O¹u`Wn|²#9Q…šx‰ v8ЏÀ¤Í9âÑPžT8«ÌÔjW'ç!]š'P§K:’:ÃÏõ4U/|2LV‹ú.Í%ó~PÌ£ÞQj— ÏL~Î_\Æ!ô E#’¥@Û%ià›¤Ó@a’ïè@„ýõy8A2ÔÐyæC¸Ñoâ‚""ü¯ÀÆE›¨F¹[mïìôp ý]ß¡G“4û*xáéj_ØÂ ïå[¦­<’òæÙ·#2{з÷œ½ÿ.‚™î2i"##‘‡±‘ ÄÖ +¼4JéšÜ«&Öÿîïy]ì,j}¹¾l×ùòâ­‚ðEâOo*B”/A™ ơĞ¥,ϲºP!- ~|…ij/ÊÕá@dUÁOýH‘ž‹åʉýcÿ,=Ç#Ì2<Þ“p‹0dññ'ñ;ÂÖFìbíÑûŠƒY½ƒÜ쯕,€…öb~Ö ¿Ì°ƒ,ÀZmã#‰ã ;ã¶z9r– Õ¡‘bmÖ+ßÐàBW©{‚ýô?«cž[7Ÿc%#¼'ÓÏ»à±)ã›°;Íøª:»tGll4â—2TŒËý¥gۦݚ¸v²JjÛi:àä¡{ÚñàóK&°¸`Õ”ÞAÖ§„ðésâ‘ð<Å[ráB<'ÁäµÉm ÐÍ;¬S‘šF;8Wvÿ #o$iÆ]¤ÞШ•€1+&´,IL ÐòŸî8îy–Åóe\‘.L1Gœ¨”z³–Ú>1ñ/Oòj¤ud`¦Wç[GOÅÁÜå†!Ø ~Ö¤ FÆÿêÙµrؽ¨¶ÂK¾½”PÝbð_È 1G™s˜¹˜Çwï?r½"‡o8/÷ñ‚¬Ipí÷3wú÷TÖ ¤—<8ÓPŒ¸·ª–':뢔ÑU1†å?ÖH„è ÌPðáÞÉ¿„Šßø=âÂJ±ÁhîK8s\ý¢{«®˜¾)墀„»ê ]mÌx…šErL?]¿”ý+“i¼ø]wˆðÚómü6 ºuxŽðžœ;ĶvA¾Ùzjg¯ fk\EµÁû2§¡r"ÍY7ï±fõf´YäÃydk” »ê…ÒrkY‚Цý²©cuÿFÍ=!ö"]áW\J‚V&@ oc£çrÓË^6¢Dɨ@š“ç«î3A¹5ùvÏC.‚ćW^öÄ‹VxtQ¹ƒ”'Ï®´‘É1[íB]ÄËîãŠx4صv#3†; R›pssyËͽóÝ7$^ÒH\ ä6ðÎ…^¨‚µüö^­I$ÌœQW OlýŸGjèÙS‚#S€U‘=Ù‡Ü_ÊÓ²äUð'r/$Å%]À dÊ b,¨4nk™_¦rˆŠæ©BÛ¬$°’’‹¯Ã bTÙºýÉèWš¸ˆJþkHß[ ˆ!0P-ÇiÀdV§œ˜Mbî)ÍÓE:éÂWú?Yß*nwùb5´ðÅãyÀ7ÄCb‡¥>Š'¥Ï€Q)ߨ%d5öÖùh½7jÐÞ‹3¤ ,ã1É_JÈ.Úq¯ä”ùË6I»qóK;Gd±œìÊB³ /®«ÓòuU=¥±¦Wüßí»Ø[Ä5y74¨ge«ä­¦ðqÈû˜H>áaë>”†Iî'Žîª›ÞƼ1œÒÍÞ—›çE<à =š5ù“¢ë§uòïÅ=ó†âfU?º„¾´g÷åëhV#EE’ëT-MgÜùi¦dX/õÝâK5ÀpÀÕËq·s ­ÅW9W˜øÔDg‹›)7tòê>ýh EÜÁÆ—ô‡tC ze‘LÊ×àÏÓàœ?ËÅÈ3 λÂÐÊÕ)à¶"ù5HÐ'Ì”DØ¥ôxqÝ)\¦²üŠ“ÜL¸E…@¬¢¸L°gݧ%Æe‰ää)±iBÑ ø ù ‡4œÆëªF°À¨q1o5j¡£Q·ˆ¬œGNÐÀ~Qûæ=ä!¡cäRÏɱÆõ÷ˆ@àX ŠøˆW`½|‚Î?vsޔƞxS2aˆ[ò ©}à†Éªbby2ÿ_~¥‹÷Rîcãjžˆ»ïiõžL#3K׹ׇ¢¶¦œÞpV½I0„@€dX‰J¤Äð3mMß•x l¹'f‡Åóo5ÿq™.^V»JïfÊŒ^ÌH›Ã³Vûx¥ 8È¥ë§ ”ÔžåÕÌâÜå¹¼ô¥¦hÿïå=õÔLLaO˜”d¾ÁÂcq¼·ØÂ3ýt"F$¿|HÚ/þ¤ˆ}yè.cù øõŠllpÖÒ‚Æ Î³x|ì^i2*DDù±›à‹_3wïáí_NáŒÝÈÚ°”~øié¶fÅxØ\¢£Õ–¦cXE±†%=§ÇÀI¨ÁA¯ˆÓ#.¡™d­;­j—þ\ w׉ibT½_뽂-“±U¸¬QJZÞ•·JÃ5§)pÞýSg0ìSq ô~‡Õî< ¤h™WeqR–æ±|Þˆ¬ Uj}Y08IÉ`9c±uƒ€>¾¬~®iZB¬>èÌG¶©#îÉSIÛr3ºæ6¢ÑG _Xr´Ê—rt+o倮Ud‹(e‚ðQµ/¶pê„ 7§ ]¶Ñæ· ÆO‘–ÖÁÑ9ãt. Šª>¬«kè"߇q“»€ž<ÞƒÅ_"NœÊñª*þ¼[y(±c_d>ø$<$êWãW>? ©bÁäú¬*{b>  èœ ±-\r¸¿fɸ®“Ó,´Ùfš½t€*y»1g×%ž6ÐÍOÍ÷§êtSô‡yþ.X>ÕZv1¡á˜pÈ`!%ŽD#÷Ç5íÚ&$K¯ÁæfGnŠI¬{>"Ác뿲ÉÔý8Þÿ%ž±šPIðÜ9IMm0p±.ˆOÏŒfY6;Ãê(>“d'êN‘rø(YæáÅËç'²Ú+iB¹ƒ° äf5̦~·SD$Q?Ñ(`Æ·Á*x,›¤VÀˆ<ù¼)€v®!{Âð+ ¤ùýF$ÅKèÓâŸjXŽGò¿ÍÒNözö`F¿ê@ëIïÁ6ǧÒmöZ p†X°džýhJrJíØå?C›ïWx.VÊ#d>ÁG]èÑ dSÀi›Ò¨)¸çÿr]•‹Å¶U}jÕ•å7ÁMpfÝ;Ù²Á6™ÞÔØ ²Ÿ%X²ù4+D?úbF§`¡0Fª4(ñ²KÛ9¾J#îvic÷ m¿]WIØ Êž< P°*tîïuqyä<8¹ˆ—‡bÖÙ²é_ûò^²AZ¹ù°.G/ixKãg¿Å´±‹’åF¬Oû'èúŽ·}Ä ‡+ŦÓJsé=¸šóô>¤ÁA$Î]ÿÕ¤”ü‘”ÎÅ!–qÍ«OÌñXasoÏ»™ì˜fÄU´µ/v‰ïŠ»†sv¬ô¹‹ªé’>/ÌBânÃÙe´Bxƒú®lŽ©ú†rtˆéå’äµ~ùŽ{»§‡3hs\Ú¢<»ÑÊ,ûÀ1/J: a}¸Wš€Òl~ ÕÎÚp5Þøgàn„$g¿¸ qÇ›ã?±íì6kvÀs¼&VY&öº½ê |zkxÐ# `Ù»Gy¢ŒA]K'õžK]•Æõý{Y@QW`)„Ü£LKò8¾srõÛxgV=‹žæÇeJ/i›.¾ÑEfÀˆÒòŸx{r6ä¦/Æ4 -*ÿƒ¬BJ§S+Z÷Ù„¯–;p†¡,|T±ðLür(F„&×ÊpÙ¯.–ÓK&{ÅkT¿Epn¾ȇ°ó‹&ÚŽE*Ký4»êÄ i!#Áóx/p½^§2øÈ0G[J¦Ägâ®MÔæ¦wÔ«cMÂ/Ù%Ÿ¬Z8Ô UùNº}EJÁwcáÎô¯WUöQ2á€fO ²üFÛj;@J(YYÚx¿­’µ¶ÂÔ! ÆŒK2/±÷ˆSMÍö˜dåœÂS¤Ü0¦i°QP×8°Â/ÏOXy¿RSBw(×Þý7ØÅÞ÷ʽ[Zo‰e€[}‹}ìýàðÒ}MY,‹Åc±íŠ5xVãýåLûSqsOtìdÚ|„w;qdÀ½º¯¥­æDSZ&+»þÛÄÊ Œ`,lpÎÜÝ{–ËŽRØ£dÜÿ¾¬x0[d÷ÝvüYÜ 8ÝÆ¾¹ûIàÓ&d7œ¹ÏG¼œØ=úÀ±0ñô®†Àu£TNSÞ;Æ]JCØØø™YnÝ×mµºéú[nP¬)£m'OC>A0:¸Ž¸ hM{Ê$Ið†ä{–Ë>×í¿ÙÍ ޝë2IIZMMÕƒ®Û7%²H‹52'¬Ü–:Š®iÞ„u%¿?YäÏ•rxðLûÉÕX$É¡«ÌW)ÙßüÙô2rR2sÔdÃx塞™fÎO0$Ɖû÷Ës7ójÝ­£²äϱ*€<™À7zÊòÊ[šwä|ü¢±’—ºÏu™áGí¨ý?±{HÙ4ØÁ—¤°"RK€¥6¿f:&“Å¢B1å RùÄT‰> Sí4¾§Bó#\ЀÒTWxm& õr—/À†æWHñÚ—2+Iˆof#SUœˆõ`a³^žÔ ”0¸ÑÊIñxÝíþÕ˜¥yˆ}¦˜LHx‰µl~øÔ¾5lÆÿµoú_7Î<ß ÿ±íU-¸V ²ÆHŠ6óÞTr67˜^giO œ(9ûÕßài}âüѤ??°:ª¾ ëø!wôœrK°Eà7K“Þ£ìZz„0k·û ñQžCLHÚ™A­3Y€ÙlB_¢†šË¼Èp$¢îL(É„õ±=•Ï&_‚UKê<_‚B†w´=¿ü98”!ú€ ãÖÅx¦JÅj™ÀÜÔ¶0¤³oÞø»Ï'ÿÏ´ûLœá%=( ³›Éºba!Y¾*%–UJ²WÉo.ˆ'¦Ùª‘ÈáaÕÚ‹±¥²’óÕî•dm&¦šö¿¼¿ÖÙø<ˆˆÅ,伂§1YÔUŒÅÿç鄾NÑC5¢¢TRë·¸ ì­&,nøâãX‡gü¬ÝâiҾ褉è'7ÎF2ä°Xà"ü5À àuÖQ°° ø³8Ü[ûZ”@ðÕTWäšäÏ—L2NB±fv{ƽÔ¸?{Xst›Ÿ4}+–?“ŠäÙ+;M0ŒŽ…Åb^ޱ´bPn¨1ßfp!F€•,h@üð™''~€-D÷o"ö»©V<É*´Ç ÙØÛ-£UEn¼>]×¥öøÚøSû]þ'¿¯yä$—É¥½;QHÒÜׇ$Ñ Aõ£x{†Ð½ ß*ìÆÈçÌ=†5Ü{l x蜾(Q;D.üIçaÿ£Q¨žÕÇ®Òdíäù‰{ñèõ)q$qì‰Ä,¤(¾ù ,HQ£ýÙ˜]‡-¯Q-޲;{¨¦ó¦ÄZ¦È'àÛoÉ•}ÙsbbóèîÙ>çøVû5½rt%;æÛÖŽ‹÷wÛdzgr½ú ¼¹Ñ šU>ºôb%o3aH—` †òÛæç…DH^²Šði+xZlC);y/‚Ì[2\9ÜŽÚŽ‹ÿ+‚ašô隌áJyѪóïy“²9}*ã«ôKr„·M‘:UyZàÓüU&Ý¡¢’$.uYmÞ7á>ä\Fzpퟥ\¾‘ƒ`ãÇknLirÄêÓ+ö•‡$v’¥ls,6-@²Æ8f¼ê¤swÙ½[Ñ3/öÒe·ÔÑøaû²¼öF4AŽQg.’ˆ-§ØöTwÝe3ÌÆøbSN•mÎ^PÙN]Zf]¶QôzvÍà*Çß»Ù"XzÂCv ày ýbËYMæ ¶æ~Ó\X‚ıñózœ½(EI0Ƀr©R<¼4)x„ꌻí‘ÊÅši;¹KKRz -$Ö ñiÐ8Óê—dMáÚ«È£'_Åîí_±Úy´‰ßºULßžuÊyåG“OsÕSï¯zõT#É`@Y¿/)RöRPŽ<èW™ö3¶Ÿá¿Ë‘6H7îEþ‚š rìdá¬ÔI„õ¶‹ÎÛÉ.fpÜáæ+ó}HIxz/ÓÌj ­%®3”ªëúZvýÏn>œtA‡–7ùS^°7Ú‡ÌXØ K®­ ž²›ØðÁ4Ï}ùê§Ð^ÈIÖ²^#)ôÉ›Èí*\X³Y2AX¿Z"5‘‚,Bt-æP,Jݬ¦(çå)LEü€u2Ô`¡.‰4Ëöšuy:ÃÛm¤i›k{º±‘ïÖ7P£­zÛµJ±¹„áM¿€sñ“’ñ6Í9ž¦ªä9 a„ˤß5Þ‰Ò X3ʨ7ñ8N9ó _vÊc`ÖŒü¯›©a×Ãy;@sï€]æev…µ Î&ÍYv –çnÿ¾wV#_ÿLc0å”Õ»üCfO'o›âî1")Y¿[rPÿÈM<:\“ð;Ì‹žäŒP…ëë§y~Œ]`Ÿ¿¡;zî½}hÄä$Ó#Z(ÎdáŠ-Bå0ÂÕ¶˜­ªÚÖ€µ²‹’º¥Á£]÷_ÐÆë»Œ_¥5l^¾înäÑÈ߃}F8—`l(&kN‰€%ÔHYð6þ ÷-Ùþ_pŒSg¦~Ø;}°÷«îÇ7\b’¤J¸Â6H5^œ»Mœúå{(GÖëL¶@`ö4œÅ_‰žk>¡ dJ(Zºå÷p×$á퉈-?5Ä4DÀ÷ð/,¦hÞ¤±q—Dm@{ìl ¾”ÙšK=ï}~Ô_,QüL£Zïš‘˜ØšŸË|Lòí‘Í”õ Üs»FVkéQ4Æjl(mâx‚:Ñß°ÝS¼6% J-‚Ú.·öã2Ê.vÆù‰’Ï£Éíî¤ç]Õ;UÊÎÕœHÕ{K"Pf,áÝ)Àºø]½  'Í+1Ù¬Ê\IâfóGëÎí#$D/SQ}a¹ K:ÇbsZã"Ç[8dóö"y+ad1q4’ÌÕÁá¦Ç28áš ±„žÓDGÑÈaî!ÓhÅÕÊðÁ©§¹ÁªtÉRl]/œþÁ6ÐL"ª€`I¼H2¼v.U  ä»JieVSÇN»gsrW‰…$• ƒ€%»_V(û>̤ËeÛ óBò’O“™[l6(²B /Ș ¯ë÷Ye2é>‹aûô ¯D¦r±"NšY¨ðÖvÑQš>X¼‘ E®-B/`| EÙ&†_JÏO)žNëÅ·XßsOžþJ圛dbgYŸ0äcu½:ŸKkÁ MÚCnˆ[fØI*n¥ ;§úúl'O€€È²½pŠ>/2ñ4Bôå?ìˆï›D€Q%òQäÕ•²m@dDz>]ÉE œêúiÖWkއÝ9ª þí|0Ò²%æÀN¸cÐÔµÁÒËSáfíúP3z|M¾=y¦á¹v±$duóô¾ûÝd_ÙäÌýÞŸú¿O¼~©e24"Ózëø†Ð:þPý~Zþ ÕÔ—¦IôABðšêwHÞkOÞ eðèÄ}ù®|øƒäí¾Sk&VÔ{nfPBü&|wǘ†JÇ—ô†‰¯2ØÒêqž]0©TûâÅÀ/ª­#2D“K½â¼,ëð׺äy¬ºrDö}f¹7«éˆÃJçh²µ5ÛËjÿ3à)Ü’ös)=W^výiE³ ŸAåØÝ´5òp1~j.©Ð£‹G­ñæÓì6‚æ–½f'\ý)†k‡ ¼N#ã¾:Ãòº¦ú„?òæÕ"YÏ04È8áÕ+‰€"yúJŒ“)"ª‘çrº‰¯_óÞ2¿Åù&`A`¾œ…Þ¤Ÿ%ÎMuâ*NÛþº£MîÚ.Á»Bpœ~´M°fåuÙ1É¢]½Ù—ãbQ*ϪÍÇ;F©lH6iFc³ëD}•òôÙ”8e1 ±ƒFAÁŠo)é5¼Ž°ûy¾ÊÈõŽ Õtçxý[Ó¿$?/*åå%Í£Õÿ„Y¯a0§ª|™Že}òýx‰ØiᓽžÍæÌ B‡N{ ïÃÎÌú›üOvÀU#dò5fQ|»¼i=䩊g¼ü0èfÙt5=6fè^ ñeƒšv€ô:7š裶ñôU§ÿ`k a>¡Lúqn¼þîNTÓ ª­ŠgDÁaK­I «_Gón_tâÚ©cW½~z×I– X\5bçÞÙ¾ä¤|›Ø¤ãûŽ 9—D÷´þûN\I³ã¶F¿ÈñF –»lÀi|ÉWê,è-ÄüWOÓX¢“Ú§“¦H«É »©:n“ÐÝ(Gbßg|ä½Q0¯)mžkÛý$‡¡¤žëIÚÚBé¯/›{È®&áªd[Vgœ§Ãç|.Z4"X½$~ú¦‹(`DHBO”áà ÛÈLWÕ§* *Š ßÒ1i¥7ö¤nŽ}Í-àólý(Sý³À]ÇdbRê¯fŒXI~ÊSŠÓ+ ×ÃîI6-§Šbb(M×ó¯&øBt3#Ÿˆ·©Ùñ$ÒóïÒ©_Æ£]μռ’Á·Ïþšþ#?aÿ[u=]â—A*b‚ßZ¸6#=aœSϽCŶe'®/¼sÉt¼Ñ_‘2z‘3ug‹Ü(l ln|êžÈC+¦E^¢wÒØ„…rJÓ$÷ÕTbLëZ|øŠ¢ H§´ö8ZwënîN|ß­–LqŠrÙD^ Èa'Sƒ­ò¥9Ë®…ìÊzÕ ïèQ€¹ó¾NMG†_âÞ³6MàÅEJíWù j^6†*@X¼å¤3¬ˆ‚?n-8ú››†™›Õ‡.–çܺJäõ®føï€ê}ú“z³Š½ÀÖ&"Ÿ$”¨ÚH¤O¹ÿhÌeìxþKZO ‘²ÂW¿º7ëz$4±¥^pרµfÐÜvZ¹ º°Ž1jÃé” ÀÙ@¾À˜’Ê¥½O0Sš-©nmúpáéé”Jm¢ç4‘Ï`ˆØK¿O¤‚Oy0©á±Tè¯ÑDð°»c ÉŠ‰nw‘5ˆÛÄ®º¡UT2óõ‹-ª´åÝ4ï j1Ê¡”e®Eã®V°Kyp°…¶Wd¯Ôi1UÉ2J÷郬OÍ÷'ãŠ&^ÍzmíVf ú™ªª½Uf°bd¼ 9cF>YäÔáù:U Ï¿b2YLg}L9ÜöT’ß03…éÎû2dr!»nêœüç¨уM‹ 9ÅTÌcïyÿñ×7³ÌýFÀTJÁòB;N:Ùûý¨v®Í[FcÚBÊšÒˆÑrYÑ„­Sþ¤&,ÔcÏÊÍ(°ÝÞôQ/>§"Ày ÿå£XnÆV»i-Fõ˜2©/ˆ½„ Y4#ñ¤ÒZø„ùÓLºóÛW¿Øýr*<íÆ;’`˜ »þ»Ÿ¿Ö†¸†>k«ŠeÀÿÌúÏ/M¨õX¨ªÍˇÇðÈ„'£µØ .G^ÝÀ¨Åk¤±;…†ÒÜÞF!€á½ÝŒMm %ðF…bYªMàlw#çRŸÜÈáï±¥­!¸þŒ&>p¾ë]%ärH€ î.#(;Æ+µÕ¢ÎÜÔÁ-f>¬k¨ý³í&_}ÕD3ažÔUp;«³ ´3šðɪ–Ê#ýÈ©¥tLýñ©á¯SÚF‡¿âéüm'qÃ{b\ënò“DuWn%ƒì–,.´Ó´ŠBŒ$éêà° = ¢zú/°îÕËîdž`wëw×V¦6Ä(Ÿ&7¯Eý€)H‘œ4ñˆD$ž¹‹ê"ýI¹+÷Âä[š±¶joeÚfÐÙm!µö .Ãæ×ÞÝHñ¸d™KìKüeã/o™Ô@¼-¾|wîQÀÎôSè%o~tœŠzÉ}5乬]Ie;Öº°Àö O÷åŠ{ýY¬cÈ‚ÒêQø¤rk¿¦ùe¤÷ÃÆ÷ û³Kî¦Ä?É4lª¾ÁT(Û÷Üó§š¶ÂDçœPRFg8áŒKVº+‘Ó+]ü…Q¡~šÕ2&‘à;ËæÂׄž¢7=7\½¤\~¸$þ®ˆóÎŽzjŠJŽq—}÷Fë ØF¾çm’iQiR\{/>0.¢ŸÅì „Ø ·ï9÷þ\þÆ£eìèÞ5"é‰Jª17ÑÏðapêͪÃ1ÅÆ[Ћ·3÷F¢Â¼ØZÕ[­sì(™p°ÌèufŸ©(Å’½5$¦œõ0êŸ ˆ=ñݳ:>èÑ42SEċеÑÌLëj±Ÿ<Ù¿Öp€(1;^¿BnŸp•Ý„ˆët"– Ë ¨6UàþÀa•ªÐŽõý˜òr–uñ†ŸÁ<þû=Vˆ¤ÙÏÌ{.ƒ&=¶=¦gbZr9ŠuˆÀ’#‡Â$Ák˜­uI}r°úê6M|òBö‡T$8Ïš‘J!ëMTÂtý5„x|9þ^3ú¸õ™?4°PÖ5å,Ô,TC$aÑ„™Z¥D (ì9KWÔß­dáIÌÁH:Á~ÆÇ¥†¨Éóa²K=ÙF”EgÈ5̨Ÿš|˜¡Xã/<^|Öób‹û:›W…|sþå³ 1R'Fm§H@ <âG(ÈÕ¬‡ÅhÖd€tÖ4ç“Ý„ ÏNõ0T#XÉkŸÏßëådSéE=N|~'µÍ·r5?Æeí_‹y® ±%L¼q6¬}D²A)¡S#4ʾkÀ ãÎÊEÌ}Bõé¢'‡˜Pstv;È.ÎÕª2 OäY¡xÞ*ï‘Ѱp˜2ßÄDZ¯~Séju¡©•c‰4Ãó ØüÕ—Ëê½Ô¥ÿZqĹGלF»`ëèëþ ƒI%„ÅÌ™Œ®ëfô÷j'ê}‡ÎÔ*¾¥?±Á4r¦ÁÊ–ÐLÅéã0øòè}(‹”¶©ß=9ÇL "‰ú«pÉ}]ˆåjäÉ>Äà­P’‰*Zøwr0–òÖï­D9µ?¿Ö…Òñük½Bv{ ø ?² njF(âœþèšàФ×âÎÁ2Œ ³’®-y¶þïб%öÕz£òîÊÿ¡&|0ñ9»žíUŠ´!>š\üfŠñ ©Œ_m¹ŸV!þ?Û. 9â€!Ð|Q&Ôó²¾)é¦ÍC‡úgœ–9“sáÝ‘t¼ÝEFv@/N(N¼¡Î+\KU ~ÈËUrQ¶·fòVWJ*ÈvÚæ”Y Eå»’4 ’ÔM^Ç£Ç$½T}ø5­9µÈûyäîÙr‘y/ޤ7uÙéõ3Ì‹5) 7©ÑôÁ:5¦Èiw ú•æ¦5üa‘ä§uòe¼f;DéM“À™`JÒ–9=¿V³Ž&‰Ý³R^*×¼Ôæ ‘!8¬^{.ˆÄSè ¿'l,Œ.[åø™¹%G]´ëYÛM÷¥´S2õ;3y­ËCb8Ê98ÕsQÍ ·AÕ" ¡¿"E@Ë —?䜉ȡt]à¾tà%åðB¤Õ¡Ö ˜üÔnâ þÂϹ+4×Hኋ@#>ÞŠ±¿”*=¤BTãòP¯ˆ`—Ÿ$MfL¨@fµa÷Þ‹¹Æ]¯mäî<«.Øê¬DÑ"z™)†K‹éh5ºZ©$ÌZö*M·UÃ6§²p®j¦‚pd‚'ÓH¾d=Ý‹Ö^ ëRWUáÍ8¹8ÈÃÇ¿ßpÈ÷•\^SB Ï›sñ]…HÝ'y”ÖGKpb]9ì6wºaUÉAØè^ŽPä¾Ì­’/¼tãëÎ?V¯Š—d,ùŠváÈä'¬É”h’±õ÷fg]ºjR¹m¢jŸ,ßWDX™øŸ»4’xË–GƒäÒÖbÜÚ¤}^Peþ\(?„:\X¼xdØ÷µjuÃŽlÇ!±µµáçq÷ Óaªøø¸O”*dÛìÜ6SºŒ'»vH¶ ¥îH:~sÐúîm…]š¸h‰¨·£U,@ŸmNý¸ ƒi½û°:ŒTž„›Í„Û«‰šA¾¥Ø;Ô·¦†I$Ñl‹£~Œ ÈħðŠ$Á™u19U@9ø ?‡Ñ&'n ^°8КFÒX®,È&þE£nûc1¥© éžæ $`»Ã}·ô«áË…j‚޽M7…§E îyÇêçŒ/¯¯Öàk¯çÕz¬a²³„¹ëÌSì.}jgnJ½b¬S§äí~¿'²m?Žˆ%Ê9ð¥@ÙBàË$Ö%…àL4¥ƒ\‹ó]‚˜_C‡õ: ˜f¼¿wþ!»¤4Î?M?§xJÊ0Ɇ¬jÅÂ4­]%‡«—Á?ÈÑ z=eõ}äØXYþ`x@:[µm‹Ë„1V•]k‰YC( ÒœÝJêEjI*{ ’ª¯#]û*ýMö8á*²œ m.`ÕÖ¼#a ¿•÷ìOŠP—ƒú†aHx«u÷í@”¨7ˆŠÍ–ÝŒ˜Îâ¦Lñg4”¥8{/`ã9ýùŠgü²Ê‚@#ÙCå=c^3¯fo À¤ºOLáê×ÎÓ‹XT Þó™éÒè¹¢àM"Ižô¨DóYµ=‘A™½AŠ ¶6œz2£K]×8¶ñÇwã@+ö#9 8ìÎ/¢C‹Èåâ”ë&6øÊϸ!WxûùAT#6pÃ×Z_$Bâ@;ÁJï†C²1L².PN;ý(±ˆm s,Lñèåo¬ñï:}›] ÉLu—ý‡ÕÏ9”z(–ƒÏ>°œ´£ q}`¢cÒµ¬o( a¶_@´ZH~T,+ˆùð”Ø1òDn€Õ½gäÑãü ·ÿn™~óòË?:|Rm°Ê¦¬«I¶‰JkÈØ£©“mÂðð:ïÂaz!É¢i\/’× l~ÂëÑ/®­SÙîÒбš¨Œ·î-‚DNŽBMvŒdÑŒàXOÈS·yä•Ê»}èªÞÀª Â#ØÄr4ÓY¸Q©ëÐZ6–¯'Üà¼ÆÓ¨I„k”1¥ÆQ™ÏbÇÆ7¤•—M#Ô¦§¨˜-ž¯xÀ=åXBx¥6ÃÎî ^Ë茕øoØ[_¿¤`™³ëà–R ãý:Ó™,ϰþT¼Çó†ñ§Ëþý¢FB ó§W‡¨õu£aä1Up —š=×,áh{"‡óÂY°»rz![ôòDâtX (åõtÌ ód¿f ¦_4çîø§Ðarîz(¼B¢9fçµbMz u á½ Ig€´olœÂ æèkkÚF®D®Q ½Û3§üÉ=„+ä¹w…öïGš´¤Êrç›1νËSôRË÷$³Ü¥æHª™f¤dû8åo‰ˆŠ 4ÑêHM)«ÅžØi¯ÙqÕðížO}¹ð§d›Šra©YƒoÊG²S9¢p'#×âÀƒjoËÖ-X¿hÏÝêÄ0þÛeðÓ´|*WÖìÞb?Jã½>^Õ„ '*'ãÜ©X—jÒc6Ä6¦”ʼ)áX&n½¾^Cœ³Ô.¢M“ÈÔ H²7Ü‹ŒE„ ,Dœ0BTñrΩ¢ÈS×KC}>¿*8uÎSt4§k#µdË-ö(ðikü7–^ Âe ±k­jaBÚ^!+$j¸X²¼ýŸoñ—Å~'€ƒè¿ËÙ°Är–õìUÅl(Ç¥Ž&\ç}i½Î6\ÄÕðž*tž¬dªÕdŠ×Æ]nm\ôI•l]¯ÍŸ{³ç8Õ›n©ëäO»Ï“bÉèÁó”‘AOÑLEá\‚‘„ìËØèÖ¢äˆ %µ0ö…ÄDÏâª"pabhj)˜j% WðôÊÐõº÷Òú=øâ\ÑYsîÜü÷±p‡†c¶LqµÓ«‘â8²uƒ¥zÊŽ[-Éy¬kiÁoÔQ%oÚ ñå ò>‰²5µXiã=À£oþˆ©,H]m½ÛÕL*27[ú F1‘h+#?›±“º:=e¾äNÚ»~!¿i½qõ’TžÀ³aÕ ŠÛ®™Ñ—jà®JŒ‹íS±‡MùöÇR öÜtÝzà15mò®œ )"òf Â­êÚE%˘ó@è"å&Pè8údnéQ}dÕ%™˜—P5lë">s2N7ócqfå£Ç\"ª5ì®åÔÒ03V¯G–¿­1Í|€P?—HU ]á… ¤)¼ 6ÜÚ‘Ÿ î@Á¸µÄ?½‰ååndÃ&£XlðšGº^è)^)ç+~7‘ßÒ w:믫ԀÕ2píZãÖ{kaùWƒ«™Ô…ó`XÖ“"©É"`n:ší9`u›ÝI~Æ„ ÜH˜§?2-CÊkó#YM‡±Äxª4á²8ÍDXe"»ðϘS–8k‚EøžÄ9±XÅåõXc4¾Ø~äêÿ–x4]À€R~:ƒ@å=׌”܇úªL݃L‡U"§N“Cu$䜽&¹J ý¶‘¾‰U}"„Ãç¨ëÒ)%zœ"ûW'î/ªh¤$BÄ-ë&w/Ñlóúæ9N§Ø‹¶g0aVÀ¹lós§Ç±Éz-h¿ëôEè ²Û0+»lÒ‰ê0Rv×u=9x¹4ÆŸ±ì…ÃkÖ¾k^TÆÎºÊ¶^›¯û zà€UJŸòoºã6 MæaRë FÍdv× .|à)fû›v¸äa‘,^ÕÐ'-ÞŸ ’’§lð¶r=åÎqŒ§óR¯K­áÙ_,ÚÔÝ]× à’7 qÀUy>k¨è…O•}P’‘Fñ¬íž kï·t,+³ÁÑ­ÉÞ™&F¡H—L¯rj}±¦Ñ+aß) 9À¦ŒHJY>b®®MJ¬à[ÔªlWRc.BúG0Év§:–æ dűtÈ+I¦U¾Xfïèº%€*¥ÕP?–¦€npZÅñéo Cˆ—eÈß¼˜”Ì”¤#¸ZJ¼ ßk5»˜g¬ÐG¬ŸH:Æ 8áùÏíŽ.*âž|`M8·‚ù•« ó¦Ðù–¡©«ì7-gvÚèèàˆÚã„7%cS†ÅÂÛb7g\Iˆú²¼éëÁaVÛ/¾1ã¹KÉ8ÍßÚç½J4~µÍǯ @S—”uqÈ ”–“,'ÜðŒF. ê­cž“÷¡²ì™)ºÐ½^¶£%Ue7Ûš˜0:è›uOþ|¾ç­(¹QÅÏ»ýd´†Öér‰ŸnŒ__3Ôë—x5;úEnfða­õß_x‡‚‰Ì´+Ò£<ÊÈæêïÖõݯÝL5e—Ó«4n±êušÐC`Ì "á—x – Læ"©ØÙ”ôôˆuZÙ-BÆ“¡f/©¢ÀÔ d*2Zd2ÚxŒŽSèÄË>•ÁWZW8•,å„óêÄßgd‹Õè¨bKG²/"Š¢˜£§ˆY‚y´ûÆsáôÖSFÐîgšõõ!fŠ%÷72®ö¼.qèç´I}_œäºž¤ún†õTþE¦Jâ/©„ÉvMæ– K²ÝÀT‘pöHSÝÌÈÉצŒR©ëyTê–Ó@¤o:¤J€©küKðmÄ¡MŽg¼¦Ê£ãõÏÅBU,Lª#gå ÌTn‡:w`ÚÖF¿7št¯†Þ}ÿ9ʨwDœ” ZÌÎ]:±²¦ÙðåoÄu)¹_Á}]gyµ§­'Þ9€çÃrhs|¡ÍT27Éïôž“ÚœX#ÈA~U|,©Ä©ÂèÑÔ Ñpõj₊m~¦ò“ø3o… 8kÊø-ªÛ–ÓÑjm÷²…„iuºKS½.ÿ“mÑõ›«´|`Ûìà²ÜÓ@åºZ"Lî)öÔVlJnâçÙåq Æb“:B‰Y´Xƒ• ƒpZéI벇í@åb§Ñ$žRÛˆiÚÈàbb½£½œEe1Üré4Ýa)Á»õÙ£ÓÒV4¿îÞeוǃæIªWplCSÿÊú:VÜﵯ]ÇmðI·Î§(1;[ÇK²Ný÷¢zÎFÓFžºd¯¹š×¿@=ñó Wþ½x%Zîoèë sgÁæÅô½lüä1ÞÉ’ª£M¹4Kîm!O’3`[н»î’”¸¾Îç©:|ˆhš@76˜ Ô¢Í)œžºk\¨kz`eÖš"Dí'ý ÁtÒ8eqµ……$Ï3`¬g€s.gZåPo†"wÑzƯ’UÚƒ_˜]NQîbZìÝË."5ì< Î`O:ì2£Ibd“ø\NÊúÝyǦ!5©Ã7×÷ÙÅQ㤠ÝîG7ë5 碪• ½µ€1B }õÍéf zÿ¸óÎ0@RÜëzxl›ôZ†aSeù!äð‚jF’Í& Õ &K÷×ubJp#ó 1~ykü$Bfr1Âj*ÉöYG‡[rd—>Óp,y¶ÄÖ[ά1šcrÉ$WÙuHz¥ þfHäû!º¤fjN1Þé[ê‡ÏøK¼s;«×+R‡ƒ¤°ðųP[“täáo¦¶Ã$¬à¾ÔpÀ‚ëøÑL9»Ý»4ØxŸ†Ù¬ˆü"Ú\{‚ãÀàÑJB47ß§]å˜PŠªµÚ¤&IyÈò`’¼'4Üð#²HÿÉrYþò©$íBé#á¬YìÿÔšIó5¥딎¹Ë3-×V´ÜÙˆÛBP,cfpžx`¼PmV¤ }^f¢L^ÅLDéf_£I8ƒjQ† dœ‰ û!ZñYßlW dÚÐp ÙQóV@º¦žvM6¨•fW¦»~Ý»T5žü¯Ö0(3J¿ed÷4梪Ûd^ìœÛ¬Š›0ZƒlCœ›ã9±`h ü„²ÞÇõíFvÍUDºðÏmÞ­ÛÃܧ¬ab\#òøI\µÓlÕ‰ÖçP¶Eæ‹N?)3¦”Bvì#ŽðÅy¿Ä7œ¡ÄVÄÛâèßÛŸý%ê×Ôm:Ú+U`H´¨¤zòh˜Ã@Æl»‚…o¾Š­%C¦<‚ ­“ãÎáï»ì–XVprÈαzåýùÄQ›ÒQ¯kìé%©Ôq2HjÊ–…ïŽxï‚M¬;=ìumY·$Ÿ}#Z½e8#-ÐHC»‚ØüY±w¼[Ýt.†XÇ™aØu!æcDHl"$žåoU‹±-Þá—W4¬§‘ddÂaÝI³ÿVN‡›ÄV}=ã°? ‘ùúË'ž3œa¨™ÿ‡2LÅ"0Ë`\Ζ©çVnŽ7OÓÍþ$½áD°|Ðêò°s“}gúÉyòX⇴YvÍ¡Þa|eønÃu7*¯Qhtk3ÌbÂy×1L1µD¿­JõZ(WnN“«ì‚S 6M{$ÿibvÊ™Jå¢MáÚ¦·¦œ ÷IËþÖèËZ¦Aû«Ù}Â’ÞhŒ0”uÊ≞ hL/OëmäÁÒÖºuð~•²¢–“D e Û´ C8jRÏX·¶ðX%±{ÆöP&gí 9‹L75f?Kw¡“ª®SÐ7Ãz?ôrV!\#ËC ²l(CG ÕûÃöŸa(JÙj›T’}Òwn*FÁúRz½“í£:n3‰ÁÄ›ƒÕ5…59†hJùêÁ ¾š ÖQvCyšØNm8/Ò§Á;Q:jþ}R[‹¥¢x*©‘V[lv±DÑr 33¼³ÂGêWz&Žê¢£¹ |ºt·¼*_L¸/óZ¥‰®˜É)Ŭ-°¬Hz û©~Ø™cáæ1‰_Š;?Î~ïæ’ÂÄCÿ6,Uù„ÆÅ7ºã„TV’f”ÅP¦2¸$¨jnΕBE5±µ@p>'p¯FrWs 7¹âh]i¼ýßìl7§Ou%ÑÆA†Öu 'û–+Át ÂªÔ„/w:xÄ™étÆèfîCv=¢ &¬ >½×?M™ëßqçŸ0ǤSr:“ÊrnJ&vZîÝ“‹Nm_¦{n¶Æc˜Ò±¨TsS|³îZz&gßGÓÅ N"Õ,š¿´Ï—bÚYÆR‰Y< ‰³“ƒÙógäÊE—ý;7…]ñVcõ*ü6ä=L'yÌK…›SïïNÑ!Lô \ÑSjÊÓ•:¼ED•+1NX’¢‚ëë-ÖkÊJKóˆ †R—œâ\ºç€Ò‹S´ìäðГÙT«ü­Êž2ý*~Ž‘²Íîà‡\7“ ºÜô‰œÊ&~T‹ÞË¥"oµ¶eëõ{F½,w ˜sÅϲž:~³¥ŒöCÉ [«OK?j'ÒîÐõæ3_änÒd$k’d7Ùìl;À¿4v/ëtPðs¯¤ußSgœŒ°ï“qìÚûK$[„±Ec^U¨Mo]O®±Ëÿ„4Ð{¼Ù'¨iÍ¢ûH‰K\>r±‚ëb‹OSµáb€f©m2ý /Ly3åFÖшXW˘ÆX6½ý’+‘°¾*.+[æxV åXM¥­rdqS ¯¹RÜ&d¬%—þx§ÌÓ2O¼` gÝä‚¢¤ç¦à…á¡T¢e+¶yKVþû¦F=e.úÝiˆGzV ÆKÆÊ3Óª?7p9«Û‘bƒ¡¬n-D ˜¨ð¢Ðò½lœÄZ¼›È"̃'jÓìê •²Dã‡vŸ_  YW¿'v@³èr‚ëyJ; '?ÊGWÕ! ö­ýÁCöMT;}·îÞì‰U®»6Þ|Ïõ¨·kH‚w¥¹š’­GJs¿¤ž¬ù7áá4ÿF½>V¼±(1Pê õ?º™­r&—€_¹îâØÃZy¢ÒšÚñ®ß4§zžèågªY³Î6±eØ7:lí×e0£¢` úFŽˆu+ãEm®u2Be.»Á 8Zp¯FÖ†ÕYR’­Vø˜C%ôR,¦K_vÀÅmOhüÔo¬‡=(l3Cëã™*ÞM ïW§ ëœÈÆ·—ŠNŠaŽꗩ®› ’i7:'”–)Ä0²¸DÓ³Îùž…j\.w<¼R£¦°€ÜâôµYû?·hŸ&xÎÎÆ·¦ÚáPÑáZ£¢@I37™º —p€e¼Ò¤©ÿÁaÖ›¼ÖþaàšÖ.PŸ™3ÇfdK–WȧõÀE²LMº¬žãöÚcP…­A@Ï!!òÞ¶<Îtšê:¢'ªÁ#èô.1m©€öü.aÅWƒÛ†îÙ{õêþ¼†•ýsÏTþñŽ»g…g4$àçÅk¶\$™\Mjh,ÏH#W.ž•hÜ–(y½:NÒ|ÇŠ“©[¢’y2FÇ“ÏÊyà6–QØðã9#ôæ»ÃÍO‘!¸t¨¿²þ;•ß‘,ºöÆÜôõ¼Àwôáž\AÕpeõÆ{} 4Ûþ™3 yzä>Í!ÂpˆÊNJ¬RBš7¯‡ÙƒÀªµ7°þ`ÜõêF^zóø­¹Vßè˯aT±ÊT}@Á¡®6¤õëO&]×^ývRž«ô'Ùleµ -g‹…ÀfñÒø8¢Þ¥Ò]½2Ý›˜¾å#³æ­È…U®™gö˜Û§cgú‹Áiëï~IœnóÁ{Ä–Hñ Ä‘M_p›FFÜBðï'ïß}åÄ’t§!E™‰Ž6±lX³Êyö¼{¿3!xè>"ûމgÿC„~ÎuÓbŒÎ"òÀÆúóÍO2mRîò¨:»:Ð{\¹s\&Ì©OIX}ˆÞ÷J€8Ñ¢(Î.R|QþBN‡­È×"m+\ÕxÊà CÒ(9^>`&‹˜9UþŠ{9«êFÏ|›Á,1Å#qžŠ ¦dááš¹ˆ†tpT>;Àþg«Ew­’Ü< ÿ0‰Øå&|m¹„›]î#…©22X ÛurÒ(‘Œd˜‡ýX÷e­;î<”m$›j”èU‘ãÕ>(jë¤véSk3üÒÍð·0B;Õ"´5îÉv˜ÂmKKwÀ^9ü÷øB¬jΞ¢~Ê *²õ2ÛûȈ•c´²FâLbÏïY´¾¶™dû:§Ü?˜tKE³r•’³)`Í= ³s¿Ì®Þ~æÇwBY•}ôA„ÕD¥)߉ÉÂxòYµ.6ÜŸQùöÀRdð}™‹ ÇÄÑ•ÿÔ°'XÀé¤$r,ñpZͱúï¯d×35:s¯ùóm !H¹ˆÒ K.ö-ö£ˆ8ž­Ô­Žå “¶Åiã%ºt„.ƒ¥D,8:‘î!ÐP¼TQU«ç)JC2öïB>³®¢[ªϨ…Ÿ ‚AÄ\>¸bÑa²E·G×ÓXÖ¬¨³³ñÏÐQã-‰ÈàÐÛ÷ã1Boò³—Ô–y©3œ›]VX”¥±*þ0,÷Œ}±E±õü®Ðw·ò ƒn#xì/ŽçÑ P ° ð½—%–h¶F’†¸)ogèHn›.ì"úÊRùÄ"DÒÖÙÜsKÒ¹?ææ½Ét.nlá;$K ‚µ¼½67+Âx޽+äH‹˜)šy¨>0_- 0»lÉŒvgœlÐ'îì+*…ÏóFÜ=¹˜FXdí}¤).ÝG)ÑKNîìöŒëy¼ôüêˆ;Î±Ý hEQgÝ—m΋¤7w½±[Wò:„+¡l ÂïÁ— j“óbÑØŒ[Žô…õδ廘~É´]¢û±Qº×ôs.?‘›Žÿ4…Ê‹¯l¡,Êž’)Ù7Ã)Àâ J ¨WÞêNI³k·‰{âì . à6=)¥ ½wœ"xPö‹ÇÕp`U¯Hj‚w´øRw«/m“öäZ“!›A~É1Gx4fEt°ÈëˆfB ÜæÔmPà¾'»Rµ7 êWä ¤å#~@ 0ž»žN¦&n v[I‚üfÖ'¼ÄŒdwθ®^ÐQ³¢q#˜!!®\§;$‡#êDbÉ|¤ÕÇ®ÊßÙj»‡ŸÄ©ÐUó|¦ã ¬^7µ~%ÕMs’îÁ‹t=Òm"•-Ÿ¹¯„…œjz{¼UÒ;éLÈ;>=Óê´cd(°4¯5×í›>‚W¢,[œõMwU7>t[hÄïÈÚ…ö­ŠÃbûF¼x 1mŽ­#öD[‰¬~¹¨nëë)£ –OèÓs/èЩÖž7Ь³Ê) šU²Ý¹ÙW#€¹HæÃö¡yLYx­GŠ6\õõÚáB:ŒRNÊ`¯5ù.òtò¾¨¥äü1fíÁ¾¯•¡š jJ׺´@ãžî{øÓUBAˆ Ê êPîùßO_[âlà@±½èþØ–èzâ¸òh/ßDÛ™!È%PÀ®H¹Çò‚ž©}çÜÐe;À›QgE …œØÅ½ç|Õ6½`†Wj$GM°ca.«ÐºŒ¦Nè!—)¼Ô5RÞ¢®¾t}áÌUé¼w-:å²ÐþhÅf&Ùªje™½t»cbÚÒœ„.¼¤wÄé4¯è_jÁ¯;ù˜!&¡¦­ñû/”™K ×ÅÇöÌ!Sã_O±âÚe-m8yÂñ:M X–â­É«Ô½‡g¨>1usâ†uZN•czQ-g]5xBä7g§|`âýAŠ`ÚûÚ5QYŠØDªº Kgàä¢Öª‹«ÅF¶«ŒC§«€çÿ0Ùe¿ ~‚.ƒ6& ™6J]ìÅkÓ'b ÒïQª’z©&ö5³Ý2X…ããþ’bü~Q˜¥̺Nk>IÊòÚV¨1UîaŸ0Z¡Ö|¬™»$†é¡ „áÊÜ­ F¿-›<âñìò £‚ïbÒj¥¤¥„i¯¥\Ì0hfnÍ/À¦I«õ¯PPåÔhŒA¯é‘½é¯yê1À4Zj´îäFýc‡ “ã/ØÑtåuÔ)©‘žê‰FX¢JúîáÔŒ[œÍX˜Tל§³êø%Ĥ­"RÉ)’ t€ƒ'oêm0†o‘{sgDƒšrÕÊ6jóRŽ ØUõAP¾Gè¹ ™–›™ê±]>àå½|}Ž“2IT!?g—A–Mê©"!M«DÖûDHò°_×í¯([tk žeš:ʵvˆ• y‰ð ¦»–æÃúƈ{ {á­¿Ç´u†©PiïM;(ÊAÇÜõü›ò ,+Ö¤ô+qÎ^»žì¦^Á ¢€å­Ô "KœüÇB~ÎLÞ›Û’“Seȧ—V;L£­|j3¼_r’ç%Ê;8ˆuëÃßÂT¿ü%ö$Ï©û†?­…Ôýª\qß®gÙ9.$ç¤âbèëP¿ÅKûjÈ¡Ú5‚Ђ,½ß1ò´>H;C9ª²*¢^=ðûzÔ7+u7V„Ò8-SNÂ!†rÅ‘fÁ ‡"ÂÉ×Vê&~v[“” m¢°5ñdä‡MFo×—Y&’×Ch!(G°A³Æoãq½øÆ©€‹€o¼U9Uq¸· ¤BðÝ¡:в|òEM0åÙœ©ƒh‡–š–óhŽ£äà’J;dkHóò7ÓAýÛ¼žÂ?†Ÿ £É€Õ%~á 'hÀïÂlÍÓQµQDž£X¢’ŸöŸ ¨†µšß‡¨†Š8V7'£×ÌxŠæEòö³œA'&› :$ ¨{Ic¥¸ Ž- S%YÔvÄöÃV»Oçbñø|µÑ[ïÎÒ¾–¢0oþjTÜ`…nÃ*ÅsåÉÒ¨¸·R{»[ï ¯aNöå‹`‘ï~»•Ò²‹]p›ˆ¸&âl®³1³òS–Òaˆ©4Õ©†ì¤|ß¶²t,VÛZj4 ‘«ïOw¶­J.*»Ì˜ã¬oêÄÉL_£Ÿ æÜ 9FJ‚î©vkåáœVS QšQZÎPˆ¾‹NÍ/Èþ…áUü1™I³C˜¤·ÔÿôQï£Äy¢êd”¹!¬Qéïâ+ËTT1Åu¦¸5üÁ!G•ûmS~¯` GQX_ ‘™R'@"ó4’?7ÞrŠ…KɤhñE§ÍMtîµÌTÎ N›oažÀŠågtÞÊРhn3xßÉþÂjp÷ù…‡pÖlæO»¨#/ŽÔS’¡iÄšµq~|K~þºWFúpênGe¼Ìœ‹R)ß•}¨JrâvHˆ•jV™¦»A®Ù!ïÆ8"n¸BW ŽRZ³Íþ¸¯>$ÿv@JPŽâãè5—ËËSÉÃ}9Üe)•¬l®L¦ªÍ¹^èZá)íÆ'÷áµ›ŠM˜ðz„B8Õào*j§ ð’m;B97¥¾Ñ÷ùÓ£®;N,µúb¤N{?HîôQ³('Áèñ¼spûƒ êÄ8•ÿ*ja莆t˵•yଚ|¶Ià% ÅpsK+MÒq–ó …]@²$ޤ“©SEòJ¨˜,³óRªy³é’ëêžM½Û¢¡†4ºbl‚Í·äêi|@;/N‚´2Ù¥b,6\l¨o̺åŽL'àH˜fb·£³&%÷qï¿ØÑ9aŸµlSjìfÕÿÈePS¦z÷¿õµlñàË}I¿êR¦¢Š½*“µ«±[?€¥Uµ yp‹`Ö½øÚ8Å–N!<'vE‚ù¬®)ÚW›á‚êsäÇ…åGoéoÍZÖ%»¸GUÊÆ× xPáy÷\±FIvñ€Ü²`Y¶‰ÍvÚ÷bùQk:žwÙ›ÉúÔʈgA¦30d©k¿>ï'ÙÍâ—8¨wäk†Kä¸a^bÑŒÃ7EÛT Äz4P|¿±wuÐ`…ÌråZÓTԜׯgãajøÙÆ:¿ÜÝØ¤€•žAÂÒÑ ˜›RûdRoDüŽ—È¬'‹â«êä‰>ö.} ŸiÊ•Š8Ðêäùž\–!Y¶BEÿP`Y¶¨†.G­pðGõM°¿Øa4>$‰)kØ”r¼ò^«Á*Öœö@q–9èÀ&Yq¿ïfÝX6/XU[^)\[{ã÷X-%öà¿i¼aÍA„¥£=E¸Á9©Øúk´[ŠBL•fˆ­[~©‘h²E{ê‡ñvÙìjÃ{Ó b@†íÜÏ&öBõ›,­÷uÓæä×Óý¥ œ6€•Ÿ5\Ll´¿:'&´q©Õ‘ÊQÈ1R"0â³Å[ãÃñRÄÛÙÖRs/³›SÑç²[‚Kç2ÄukPŽYÕq'qÞÍ 6ôštÈ×§ëºz’c¥cÊŠ5ë2Ü@¾&õéÚ·V)DƒE¢Py¦äTyý¢sŸúUñ<Ÿ"Õ~&Œ­Žï"bÔ‡šKÔ¡ëQG5–€ÁlXu³ÓîÁÏ÷ñ}œ·!ÔÍe‚l9RRK†ñÃ}:É¡ ÖŒ¢ä‚ ™j©bM›ªæ´‹&­6ƒA‚Õ)b÷ñÏà ­å£î© {ûâˆ$Û¶oî~’Ó–çÔ)­53²¯ƒ†€u"qv3­?¡\B´9yŽ2ÞÒ½¨îõ"»Ôf‹µO†îQ ÙJW‹I)ñg†ª±T¢²›àiƒa½©7*” %ˆn꟤žwKy›N Îz‘Â׎£ƒ°}DÔÕïçoí1hác½K­§IçH ÎÄ?ÙÑ(¢j¯~"Á=;Ù»´9w×G›$óÕñQHÂ>¿ŽÕ½dµ†²sM`LW`¹›¼Óà¤b¢p™Å[å㺘ŒF¢ñ#]4[z86½ïÞßÓ T N†`y:QYTé–ˆ´Ý«”‰²ìÕNÏßÂ)Mî£ÀMT(Ñø '8"CÓj(4Vþ6 áÚKÀ)Ìtò‘ôªá#µZ"¢Spò{yɾûþG|J^i2zžˆ`B›ì1Ž4?/äĥ͞ƒ*Ošè2çó^i+_u×`Ø¡æ¼7/¿ùs[íÜ¿ö׎ÁÇVñ´¤ ºNŠí•Œ¿ƒzxßp5Ø6žßÕVO–Ènmp¼%<ÇRȱEmìpG¬“‰I0#R4Ã7@5:b½9| ÒFrp£?j=j}y¹õV:k`Ðæ{çÒ¹CÌÛ&¢pô+íÞc,/e[èå–ž!â§<]™ŸÝßDÛÙH‰ÅnO¯§eá"…ËÀå<ñò‹l*ÍZ,½ãX$mïÂ?"ÊÃðjã¶g»†bš}‘ê%Ð$8VµŽçÝþ§{̤†é\<‰}úe¤„U¦Ï{zW`¨áZ¼ÐŒ·oæ’îï{\'$……hÈu“œW#õ·¤=À Kíí“X|‚ÉѱȂ´Òº„kßv$õh‰úT¢?}¤Mìòc V«ø¿ºë0ø¯GDú¾‚€Ñðv6ÐÌTf›õô`/r{{¨Jžn ³'ÐVÃQ"¶Ë°ÙWc²žp-“*dús¯3êµÒ”ÏÍÞ_I›d!æ/#˜RË&™B:ºÑ`Q.8ÿJæ\­©-¨` !öc¦ïX*éG«òž‡©¬Ó/†Üèu"8=Lwõà¸wÎ:¾u%Ž{od“Å{’aŸÈâå'ÏL¬üˆo¹{ y…ZmoêGŠîÆ ƒLÒäh^Ü•õfÁàlMDâðð)ÂYîlÊÀ;%±³Ä#–8‚éÉön7DÕÀ;y &ÒÆCî¿€|¹è‰eÙ'âÑ BQ?Ã’ØrT½çøê±ø&“4CÔÍz³3 Ä]Çþ6Ù@`4EPݘnþ‰Þ«G²kS¸}Ý),@RMhDQ“vA ‚6›?ƒî¯$ÄãwÃ’šÖåßqwʾ<í„ÌÓi÷âÑkþ0gGG¡Xg×A¶3Àš€•Ìé\~çô‘¥…èzÞd7ÆÏR GÇùDù²ó•N›.×ñ Øk³òÁ¥”¶f=ËSÛïµhV¸Õ‰Çj°»é¤³}¶'³‰€‘§‰2œÉ7&{ŸáÖ*¸ÅãWpÉ€8)‘/ ø 3MІøêØæÇ´;—#CÙ'¬L±ÇùaØ •˜‚jmFS©Å˘\{ ™ZŽ'±:ƒÌ6tÚ°B]Þ·C ‹™M—™ÒŸñ9`c­áþ¤†Âé®›_È®EóÓ`×eÙƒìZ3µn8l^­ùóm‹ÓÉ+É€©_O®»¾1Ó™*¶¬irƺOú¢s×; çÏ\3ÎåzJòiñð.?%úïF¬R•ÂëÿSŠ,š% =7]°¾Î¡A5Ú›C²37ÿñO«|øöòÉ&:ý;?{T{øK·¼úäŠpú‘IÇG.0{—õUl±P/E¦É2e&ºAwõEqG± uûër±ŽØ5wÇÀ4g«NÑ…¡_Ø£­™,äÕ FÔ< »ŒM‡ªœ`»B£øJÌÛs™qÚûjvk֭ש÷óüð¥ñ0«Ìmd=­E Œ.J…%qÅ8¶+ÁQ¹)C‡Õqr—YĆúOŽ4;kh‘\Ô¨cC‡´¯ä”/¶t1ejN°¼‚K@,¯—ã±!Ï]ņ̃ř"ð5ÂÈ¡x©º\1˜·œ‹Ê2h 0gY¯A»Í5ÏnÜ"\€WNÊgPd,Ø›ÞP‘ÿQ\*ô[ëWZiüŠAÓst’Y9“ê1„UÄØyuÉÆì¬O×?Ê@éºt`#ë“Ù¢IªR_« ”Tvè5#½‡,™{™júª—ñ¯-¢ˆ!-oØûã½@)S]¤Îmt¤(™?“]âÈ®Æ}‰lŠX×¥,€¥ÂXïR0 g/s©–ÀGq1y8„XÈ ¾cEF¶3U}K$]©´¯Ñhê|Ë{fÔ‘žaµ§ο•‘{žÿÂ[”f-½k^¦Pøý‹u¦•]9ĦÀ¿ô!¸¿‘à†`'ú4/WÓÔø¥Ø›­‡¿8{•zÇèúêZÊfYOÇ*uºõM¸Éf¶ »ê´m«ôH*X™ §-¤ßAXÕ]Ìúù‘ë×<.ÂÎ ÷tžÞeûM.¶»Nâçl\c}‰hI!fÓåYoF'êh`VÙH†n1éTßK¡„cEÊ@OI¨Ûo_A0b×XžJ™G:·:.§°–ÚŸ2š<ƒEš6+Ô¤Ô5µÓrzgR:ö±W/õÍWª©°¡R^ªÑìáfW›h\"!ç5A/l°:¶´än%ûw75£da%†Ü2Ldgºve’@DÎ^F56Y¤*åÂ/ƒã»ƒI Rt€„ p*ÑL— ØgÞ܃ð«j2û ‡Å 5þÕÖ¢û{£êrnohÙþ%á!ä†4s]³„n }Ffj$'Åâöô›Þp”A ^/ú¡nAqÂD’YÂÙA·Ÿ)d¬ÿ;[ÂÒ])Ò¡ Ä¿˜Iþs¸¥•Ds€‰LÌöš»êÄcOÄœËLRü?šã‚&ƒÔ¾ö_Ixû‹ ³’üšWS—þÍaTUí¹.%D˜ü~ÌÏÆ»xÍ49`RKpÈ×7ðcš1èVh¾Jv»öÚ¢éµðáIJ  @`dÁp¨rNMüW÷:Ÿu¯û²®ßÂOå5Ê)‘‘ÿÐÿàr†d6Õš—)½§‚ª´4,³ŽéËZd »CÎHĽÄêÉK²k ò\þæÖ$ŒÕAŽ€RŸÔxœ)5⦼ꋜKi\«ö\v _ȼ¯&ë#z­©73å꤄4)ùà0Ò­‹5^09{ãp£žK.ÌJÂ*²»ûYû{Ú õÒô7¡cKpö …ŒtPã×ÔŠfãCEQDoh@RÀóâ^Ù€£DÃ:WsÝlj#CñOÒÈÉ¥¾t¢ŸzÓ} ¸ÆâÖÔJH’–pf/ý¶bq€œºgz}]ñ]¬Dš×&뙋H&ÐäXñt©q»Ïñ3+ÆVB†Ô°õùÁ9ù13ãêõñô–Ð 6jVÒðåÃKÙÎÏ.Þ °h…¼ã÷KNáž"‚æ­Î1¯JÙ‚‡;”·yä›) rE³~¢™b£gç_vçy ‘VŽÀ¶.ÏtS(gVrAÒæ¾›}$\ƒH*CÅo¿`mö’¸‡ (t¬ dÞk3C°‚ƒVýüuÌ¡•©Ø•\N“3—ÎÕ$û‡Ÿ)Â^d7ys;³¯éljðí õì¹³‘çw@¦ìŽœ!, ‚¶ØEXZb"å͘$À³Ü*Š»c•õp@º¡ŸEÙW@Êëµ[}o¥=æi}©ÅÉ‘ì¦@¾ê~‰dÊ‹°·»îåÆëò’Æ,ºÕ—ZÛ‹3•§ñg$ïk§h]íõ?ÄEfWÛ’ÈqŒµ¯vºMµñZŽw ¿á€†ÏÄ"Aî)a×zyR†SÎ ‡¼¥gÙ?f¡=Ìtn ¶VHF£5ºgáÈwØ`÷ìQÿ±à$Ó§’²©NàSÒý¬:ÎZcp¸šÂRÙBC,¢ Ø C2r­váùÙðšºn‰0ç½nì8ç¯ÙM.ˆ)X¹×§‡ì "w¥|T³ôy‹¯-‹i¬E•ÔÃRå 5Iˆ²¹ö ü70ƒ”`±Î'3š¯¦ç²¤Õ£zpAš§ U¥ ‘ÑëHî#}l¡H†>éðûxUŽ÷"áGʲÏïñ†Y*¥3¬_" ¢‰æ¯1#ƒvyí}dî_ÿ^‰ž½™vL™ï^ÄÇÀáõËYÚ³ËÞ<¯S–õ80³âM £ü‘†­oš Œ Õ’öàÇÁ³£vÙÉ®G]’t@ø™F:Åš}¨Ä@Ù"ä1ÄÙ¬TZqzÇSË'wkwùRÚw®IXËU·„/͵-•9b¢¦ª7°ÍT Sά}‡›ü”Z­)ce×Oñ8d„æoª¤¸D9´Ð_ÅÛ»‰¯¡æKѯá.”«´n/Åã™ÿjäK“Qj°¡yYœpžOSfG#Â……¢Zë:æ%ÍËͤ¬PEµç$’,‘Û“•4 œübnîÊ£ÙzjZý[ç^šäÃ3E)¬… ƒEù°Ø˜r0I`ï—æŒXìZÖ7bÆ™³ì‚„Š›óqL=¡idIì#K „/8µŽNh uÝ5…C2òÏЙ²v3¿c°ˆ­è4û&;K²"io! p&Õ¤º$0œð¼ôfZ2,ÝI¬LÎ3z~qX(I´ ‘2Y5g™é¢Ò©IçFZÎØ«4úOÄ•Õ ±ƒ*%íåˆØâ˜{ñ@cóDb˜jØ0³ï_˜ÝèœïêœÐYžéÄh1$EpúÏTòAVDþ‹=cX¹Œëªo‡ÎŽçêx©)«f;¿èMñôò\ëîHˆlæäËY=J—ˆôs–¤ˆà½X ¿Á4¬ë»pDÕùò%þLï:ï!¾ä‹Ýãä/$KX„{œªÊ.ˆRbÖÜÿv¾Ñ›ÃÎ}šÝ¬ûi;¯¿a~Eüæù"ä r¨Ä–1³8º‹DnwŽK½#,"Ì}6DåaJ ¤é‘3×ì݇áÈãç•êùw«›iâ€ÔäçáÏMêº)ôçÿê÷fg¦h]|´8’‰ÏØ£×j^ÚtÅqÖáè²{?ðôòÒ(%³*ÝG»¸\wRâåJ½íšÛ:Ý $ ¦îøzï„-Þ cOâÄ{ÍKË]ð|T ÍÌ2‹ìZ§ËIÄ!>\iÍ­`¸mÚ×_£ät𜿎N³Ìb/C„èwuÃcÝCªÓKÐÆ?¨ÁKOb÷ë€Öäb÷Á”C»;°Ê,ìr³«àf8ºà^ßïã5?>“ú‡Õ(Ædi½|×"ÆAÁÑʈ{vW¡}_bI9½û0œœÄZs!©C©9×Ð7‚cù&vÙ¿¼“Â.;<`]|€™ö„Õ41©b¸Í3ÚZnC½Q5ét½ÚI!¾WE8YG!?L„¥A¹m8v+ye5d"0Ý7¤¨£­âŸ2Æë«k Ç N´¹Ùê?ëxeŽGç½Z$¤ãùý÷xzSü.ë÷M/ÄCt?Ãf—>P*¿DQÛ_Û%v·±‘ó$®#KóY¯º¸º»—šÇ7—4Üo=s$Að.1„9Áô*ª Äteì_ƒâä'7‡UT…õ¶V§S Ѩ†z‡ñ6žÒ*ÚGGãN_Ü“[by± Í«Û$ö÷¸DéeµVÆòq£[|Ù_”¬‡ô³ÿÓ"Çäj¬: ü-4 .õ©IÖd:å|C‘1ÞQ@WxsØ»CY(„"­3»s« &cêµÜE1› ƒ)[µ3¥Å \fo¢kßJ½Ñ²°¤à‚Ù@ ÷ä\¹ÿ{Nc¤…ÂnŒ"e鬣v' %¦±™ MßE½»ü«3áæbñ"l!©l±•—^«ý ‡‘~ÒWá÷¼ûøò ² žæ¯äÕXe2#šæL.=oØié©Ô0ú\O_̵)6ﻀ\Ð3f ` ð±©ß†2ãr#8"¤´k}Õ¬§ÍS£…ÏVe7„+k’Ñÿ ¼h"tœ¥1ÙÞQ_ºÖ3ðûX=ǽQ…BK3ä7ÂÐsÖZš†Ûr±ØŠ*¤äUÍÖ­Y‡p½ŸêH\\2¯óQë}í¨lZÿä&~õ ó+!=‰ÃWlÏÀÇñôcª,K¢Nøº5/WbqmNBñzêñUöN±OˆÈ[®‘¿×£Z\-/dâ—/üî« ?“×ëK² A ªM&ßhÝXa ú›ú.C¥ÊZ¢J®|BX!ž,ËA¡‚¾"W’þ]ž ’«ÉDÕ2÷Ž}vþåÔŠç|7¦i²/FÏFìvŽÄE’ë`^b]X›‡nmVõ`ón~€Ôâmm@'i‰¼Ù‰ˆ1®ôeØ·A&Ë‘æœ ¢„zŽ¡d%($¬´sÀÞ ÊÂ…òOd­]:®P ½d*x›Pÿ|' Op†wˆš ‘\ f˜Á ÞÚj€Ë!‡ LY±6¯7àZ”|tiµ3‹¥L±CJRÈLIX†ÁÚÀ¼pB] TäS¾ÃÅxñl dDBWœk–WÕ‡Cîi'ÇúPÔR&Oæœ wH²e³«Iá¨Îk K“°(¯=™tÚΪ¦ÚÏ´Îûr:Чý«¾–ðJ¬7n¯ é”92Qr@»>wô|q¸„=‘Ó!yl &·žH%§Ü=‹êuW¶æ€ºûdê·Äy4}3ÆI$+ã‡óˆÌ§rK4YãÓËÑ&¼o‰¹VœÌÍë²&,P1¿­¡Àip5çzѸ؇‚%ÐH_‚¿™ËÊ5Ê;d$Ü ƒîXf汓ٺšhsR¼Ç ‡$Æ#”‘‹K s¾Tîo“ÈÍã¦ú«3/?²Õ “¹e²=¸@Rû'&•óup Ó‡·ÆâI 0'åò h#Å©û¸®P¢—µõÒ_ lì~{sæÞ-­§ô‡'nglr•\÷<C ªèÉ;)á¯à·lᆠf¬ìTž¢;»o üÆ>ÜÁlaõ$s Çâº3gl’0Áî`&JÞU¸£¦¾7“¬Lkü-)‘ÉàÀó‡¤ÃÁ‡uÊDt°¤‹—ÞWO M1@Œ%z4#Žº©zÅäâŠzxTUoŠž´D^1cïXRÀ#ꕇ›ÙS×'À{7½Jµ¯â™„#&zE™jã•âÙÅÙ"ûqvgVR‡šÏØéïrml¦¼.¶×ÙÇÏI“Ù\toà5€±VT­jZÌnBŒyh¢ï„Ð`Ü/zêQ§¨÷z8C›þ±¶æ³­ «o¯Ÿ€e>'µÆ¹±Ïý~³pN±1í`‹)ôÔ¯ ˆâV4-­”„ÍÞ;3´Õž®Ó¸¨‘)ÅšSà"õœR¦2kão’ø5ÜñØÃßOÕ˜òqvyH˜à,ëË«Ð.ëâ0¥²gÚ~CN{—xÕª æøzIêtjû-¹ w,­9öZö¨ª7çqÌ+…Õ ½Ø6] -a¥/Ð\ÈM;×›ªg%¸5U=ëÄà^<0˜ôtGYéKŒßœgŒ„2-†]ÑßM“9æ¯Ëò)…E{aýdš†ë\p]Š€àê4³îÁc@žù’x/rc o&Ûâ™Ê•¼Ñ+ÃÚ„+[Sîó®h¥.É$wþHzG Á1r´ñ• äůɼYã¯0 … ÎS»0,Äf)kÌKÊ•zHi‚_Ãñ£ˆhüF´ ¢Ïr¨K]‰ 'ÀÒG]‚4é„VÊ‚390UÓ‘ ˜ 5ŽŒ~D×òQi}Oø 85IÜI‡•u!©­p T5ãÄ‘Ø]¨MÀ ò–³ F Ùíñó€2(õÛèæª½#úÐ-jSu½ÌÝó.\«~#NÃ{4ä±dí2\ —ëÔÝ‚ŸŠ„¥ó°l';vÛ‡cˆ†"ŽI1œøTkÚÄJ‘v_”jð2_d(ù¢x–TUS#`yŠ¢;ú/é:8pcs*C¸Í¾Y|i1oÿ°Å:ð©FzœK4ðöè5Ü*U<ë•ýNá©êU’88…•‹¸Û¯Z>,oÖœ·Ok|Q0”¥$ós#òòì%`jÕ=ù%V/Ïײ;tâZ$ôë2!=ëë _jfU(sivÐ5K“øõšN-oLÙJßÛgêMM…~|¬jȦk4ô.1Ä¢iWF¥XÜú'’DÖËúf(ÅK âÔíÉ©ö–Û-õ0V£¼nx}ÉvõxTFÙ¶ì?Dz7‰HP:¥ÚxÚ~×x!§‚"iõ“Ä]Ü`…b1øâX)!¯Â}ìÊW$ÕLYï§B´Î”§¸XkQFÆä7jCÜ0uü»Ú´ó ¥àƒ—ž†¨0“ÛQpbi˜rp±'˜cí½éæ¦âGLæ3ï;ýþ¥¤ E}7»d±¢¯‡p,!MJÅ£±LD{“× óÊÖ¦^¡/ ¥u0GØÚS4CnLÅ&RÔ9Þ<%ôíCºÒš_rCðŸ:!‚«MÔb€) ß&ý|¬©‚>#sDËÄÓëÂ&7×+oƒe+—1-ÿ†Y6îÎÀú Ø:Þ<“ytsèÓ}©qd\lf:˜Ý#~@QâB3ÁhéF´Û.jƒËâXa‘š•Ãg㈡HüF£l =iK']©ÖTT‡Ïਬ×ôj†D;5ÿ¬WßVEXA"µÁk]³˜žøšæè-1€T€W+“ÌJ%~-ßI¥=o‰d»0»¡Œ-bÛÙÕ?Ò0mÖ¤N°´ô²áHˆr +™ÒqÖ(›h…“œxï“ȇ|ÏL fcØÚÜ£|>ø™!–#ê™|—«J4 …ʹ©º}œŠ­WűQ4¡÷Ü«Ÿ ÿ˜J4¥ãàCx¹ŽÖž’vè0n˜êüáìù¢2|ÈN~@‹^' b ßmCËÞT—CC:÷’g{u ŠQ]àèů^o̬XÚ<&ZH_žŽn!ölŠg\<6l¶În4ÈäÅ#‰c±Ò°†±ûÙ2jÙ¢×Óî­ÈÌ“wáxça1ͼ Ð~ê¡e×tK´µY­¥ùGùýöŒº‘-œÛTÚ‚ú{e¯‹_vR©×®¡³ï§ôpPZéf}2Û*· ›ÃéKRÉÁª®’û ·]ÆŠGÓEaËO:´‡ò!ö$QVÕÓ½'vŽEp6ε¡ù7SÎ}‘M·À·¿e=iÆF,ÄàÖªÈÑî bÜŠ*«‰JˆXâDØcqIä"jRÁF)—5ÉÊ«nÔÌ@ëÀ®rþv(_”âÕÐeË7¨X•køÌ„J%.p´HQºpþœš.·Ý«M}´~¡à^VKì6Óö , ‘¦®;JÈ ÷ˆ h¬'^HfCÔň‘÷y35»¨©ƒŽP8Çe")]É3<_âzS†›p¡S¬ì+¤`ðc:h;ÂâvéXuÝ+Ü+2© ú¯¡/cÜÃG²&€Sͳæ+±•†z±U4ò)nþ:qZ”²Ûb °#@"Ý`sGß=÷æõ…$´jdïÝØQR9¨™k«=2ù¯K6òbû¯Õ;ñL郸àÕfÊAñ©˜yxQ“§G0ÿ¥ÁuÇ­°Z2t?JP="‹)Ü–sZ5Sn: Ü_M\(×ùÈ“§‡¸¢¼ÑñǾ¸Çò=óráæÁ7”VÀ‘4¤]ø¯>»_¯ÅaxZŽóØBN|­”»g¨l¿)¨]CŽtZè&_…ºsxÓÝìo‡ÝcTà›Q­æ¤ƒ>¬ rQB•؇„5_!`Ý41Ûãz‰)kÃêëóa¦£›Y¯¿Ì(qßÒ¸Ä{³gÓfÈ}£F£WN~ÐT¬(~"ïÛ$'XAØÊ’ë±=B-ôb@ÏfþwBöþ{χO8-0 ²n>=~<­ëG¦ö]~ìhm7°=YaS íJ ͰÕ…­…Ä~´ŽN»”Š(Q4"LŽ?}Ï®þäÓ™œ%k‰œ”v(¡ ÃvÙ¿ÃRòU(ºA¨ ]´ìuÉZ*¯AErh‰L\7ë'Í€[F2”àð0š Z,G¸Iº'«úÚþÔƒ{š£N_l䣽àžë{Sœ’³[Bžx+æ µFãíæ#—½T‚ë0Á'6¶çðpæÍ šNéPv²2Ϫk”ÕÍÑW)Qûèô/xÕµÉúñ¡4|É~´t(ësˆ=áÌ5ÚjTE³‡Å.e8&5ùÄÁ©‘1ž¤è'áöëˆ[þ$oƒ°¾.ô@•˸n7 ûo™EGǾ’Ñs»áöV$œÀÚq ý=ÆÓ§Y׌„ÓÊq*ìRîØâ¶^s€Á‹m9y²¶ä¿üý\&›n3Pú=šõ— HÏ5Ðëmñ9»ð)°êáTcC¦¾ ¼Ç™ÞÏp¦:{ò` ¼Ó²ç'_Õ“HÒà …3Kd;å kT%&Xzè—+¯ÕƉÄL±`Ä®â›MÁX„ªrX2ïû:œ&AOºõv¨Ök }˜zêQ`.Æ”ÏòDñè`½O`« HüS ¬Z 9¨["Næò‘­ý‹8¡®Zj± Ͻ-„L‡[8¦eò]T«$:gUÛ µ¦lΈ1s˜*F4„kˆ#Rê¬b½{ÎjòIˆ²§:푆¢°^r»8ó7ušR å/w^hšÔ~ØåË1MÇ(^TWS²ö•vµâ^Ý¥àNÿ4nqwtQÖ, e¹riïºÓ};¡*"Ö”w+’É~c‘QôkYN{Z*AEJŠÐÔêâIÁ7ÏöÜq§ú¦$4”ÆçĤÖ/Ø)c»€°”Á¢{t$OÒ üq>ì4eHz^7“8èÔ¬%€ÊÍÒ¾Þo$zÌ™L'Ïx³Œ†C;Â5[h0<¶O„€ð#öÛ¦ø3s>íNAó3“œ7Únx6(ñ]©9ŒÌÈ$PN¾Nˆ4ØÏÄÅ’N¨šBhÕã\ñ:þ¬'Þ`´ «6C·*ÁøÌ)õ¿F‹¡M´þÊ ¿á$ò‚áça&¥ßBy\ kô)Ã-hr’tËKÔù˜Ó`»L¿ÊÚ7‡ ÔôÂÕ½s‡·°ÝE&<ŽƒŸç/dJ—II°‡öGÏ?â°Éâq?53nâ›,IÁæÊÀU0oP‡YšD[)¡‡€]JnLãj¢2Í0®÷s†¡,VY£)ufŒ%M®û’Öcúã´cà5Š[Pn‰U—D£¨Ügq°¿À1rE“†r¶[ó¯s’@!¿ËÔ1}¸Ä¥%õ*T,-æ¤c—u2!ŸŒhjÂÑøƒ™êñÿF¹=­åœ<Ãúžéñ举X–¬hÞ¹“½Ïpòá2pPmJï2ëIè6ThãÒ¯eÚ¶qâ>.ƒšXž¾<¡š±öPP?5=Ô÷í5·ˆªÄÁ5µ÷b_¥ˆKY[¶ÛÆûz"è51½I*ðñ¼¢ZÙJìöCBûÇ]©™Gt¼Iß&¾hHFßG¯­d²:¿Â§ïtyJ½ f–ÔY&Ðd<• •‡ÓÛnuWýz®@N¾ã´²Ÿb†¥\Qû\)˪a%Žƒ3ég7ϰAì`†jTÛ0oV@¯±aÚY´ŽiK‘„ ñóe¼ˆÈ"÷¸ß8sdê…Ú˜è/ižÇ!žH"°âuw=θ aû›: rj³~k,0þË:ZIYWÉÅî’¬Åýà O™%³sX=ÎF¼]GÒ Hn’Z{ _aºÌAtì‹,¡¦OŽÝ­QëX åù%˜em@¬ÏÓþNFg a·©¶ŒÞ ħ¸Ò–ú>¾óÀMÿ‘_f½˜¬Ý[ϧWî¯ÆŽíâ×Þ¶¦G&»ØA3¹0—$· ú3ˆÔß »7žÒà—ÍŽxOªK[ä¾}m å •_•R¼ ¿ïr(Ü—]…¨*uc(?ÔŒ½Ít+£(”3"‡çº¶6‚AõcF¦Õì̃—÷(çX¬º¯œ½Äpºw…9¦,|ú¯¯HÁ®áî]îó&9‰òèØ#”]¾[„1âíÔàŽ¢õª†¦¢÷<&¦¿òàšo*û²¯‘=`Øèϸ´uÝê‚V¡°{˜†&¶‰>RÏ–ÓBS2l?,ªñSŽöÄ ÿ"é‰óX‰câÿ$%a‰ì©@Ä-X½]]NÜþG‰î<5–5GŠ& ÙŽôQ‘1O6æ"“ôˆËÀé¬.g{Ó/G ©¦ž^2v,É/׳´ähÜm³vð2»\ZC˜gl/½^RöY4]qŽ£±2‹4ÅИÇ,¥øTcR±±™’cè2 ¥JÌø›ø(]#ãäâ„rê…F±äîæ/Y¶.ädPž³ø6F*­"°&ß{8Åì' W²KJƲTå"”áÕ â¼)÷§¬yaŒ;¿Ÿ]뙦븭VS¡?­ž‡Ÿ°/¥íí3ÌöVv±ì"Ø`sN~½W)M„Ä2hБµX¯Sþ@Gó4¥qpKåë¬74µ)ŒûûY U$ˆá Ï&B(þ–p­üý¤Üã€ÏjÈSOÌüJì#ùäÉÎ%îðż˜ˆª¸â1ntÄ«#€¤¥©È•þY8GåBήÔ=(]€ÿË2KÐ;U°¬Ë’Hµ=”2¥²»ÝªMaÞÓ *Ùöuñ¶ÌôækªÃ•1k8fKq)´¡ èÜÄãÒYFÒâJ½²0\kÚÉóUk6ú¦è?ê´Y 郯ü4„· nj:³%4ñ¬¯¦ ˆ°£õÏ‹ŽWH5ê[Šyy6ËV= ‚03~z0;äìuóö¾ŒgéÇâ Ø/L€:dš2øÁà)ÚÞr 9©ÓÖ àîÀAJãODÚ¤,/¹5iSÚOÀv"|BèˆÈ‚¹ØTÁ#·?‹óQøóœXŠúyÚDÃx"ª¹]3ê‡aZ+Œò7Œ†…Ø™2¸wäˆdƒ@NÇ]"Œ‹Î2¶!ºaPmâ‡rLtŒCÖÉ·ÇêÈ)9œ=޶Ìô±“âÿ¼|RE…²QšùK9yq·¿ˆ5I&Ú¹]wöÐtÆØ²ÜÍT¡ìnço4Ð n8qÀHUáïlnëñµ`-‰³VŠÞÉȽLHR¢ëˆM(ð¾aç:HíCËùú rE%JJYÅç¼´0U›q1:|^þkiÞeÊt~=R¸u±4¨ŸÄ;ÕÍ«Ul[t <™åf¸¹‚Õ,’NoêËi:¤_ yë‘ìË …|Ž.#7ß;Pß|Lu—¬© °J±ÎvÊô³œrÎ[4ëš³rxº‚i$šö…®˜úÞ“$©ÂÄJ ²ý¦<ˆ4xîF’Áiñ^´‰Î ­\tß÷F&¿dµ»–pÊjºÁ "î‚ÄÀ1È_‘«õªG{YýEP„ÜÒ|Q¤Fv}÷†2ôe^…0ˆ# ÉŸËzØÒºiˆàB˜œíhѲ{;.OD‡‰Ë\/É™j÷èlþáQ¬wŒ•}Qáϸ (¬Ê2ý² Õ³ßê-p@+;ÊÀ;Êú3½ 4ðîÕºiŠ·´KÚ—éÆ{‹S} 9gê 7ÅoY Ö !L@i;"µ)Uך‘z¡Û}ç¥raefÉ#Ѥ??€7âÐ]ð9Hð¤›dS6Ö¯Q¼¢²_Z~½ËçxÏ}®åfçáÎ=½1§²Žw )ÐZ{Ê !êWâHÒhIlrã±æÝ(¸ž<0$—Uö7é%ÅdÓŸ‹m‰wLó"»¤.š—ÝhE±Þ âÓþë¬oÆÌã9M?‹BÅ„pIù$àdè,“Á™›ƒ»lNŽZ™õ¦„ ¬Æ2rîÞì‹—bB h°|Ÿ~ü©`. á¶ÎßìñdÃnÿè¡€pˆÌP¬—R¡ùzë貈œmˆ¯þÜÜ0ËANÄ8¸¬î¿L5écÿ>.Æ×$ª6ÏNa_œœ§S€>ÅŸ¤h£€Š_ΰÆKÒ'玧 “ú5ÄÀÇ0Å÷‚õûx‚ŸºŠÔ¦Ó^‰2|° IKã^\ýø,ŸZ ¿§ÁCt€ABé#¯DæI¶óºÈôY±ïÐîÛ2µ”H/ÎДïÅ‚D°±,'Wä£üq“þQ.íÆ‡Ê <" 6ž—JYcWE,V “Qn÷ðUpêæÝÚäÅÆ?ž5M6‚*8D:\È9Öʥƅ„j#Û¿ÉÈÅòˆðÝn^KØÖÀ®ÔF¤ÜÁ©µf“'W½ÂE ÇÍEVÕ„Ôj.jo“løJ™ið´¹€mBÑË•SÜ8ŒœÈÄ$¥˜ØÍ^ñ0¾1p‚¥pž†â›>N#{Šd$»–˜¯|¤i–Xªfš!\צ»¬Ñ?׬l*| vØK籂°¿ ©ÔJ^©ìç ÷íÍ,žTKpµ»?ý÷ìák"m׌_[Ï!Á`¹( e/Œ|m¬ÖÉ,η RP«t8Rò^@ wµyRe‡1bD-9)ÿ ø-­KJf$þä‚Ä_Ч·VwiSî¨9Åç¦,“bdM>βYpµ(@>ˆ 'iàP6 ÀR­é4C`B¢±Ä&^¬ QadFåzŠ; k-³Þì6¶H”§¬)/Ohë —Ògô&bîÙNì·“der7i3«G–*’Áƒœ.v=~Góq»6-Fî~_{>Åå^~ðD>¾ÖΨý¾¬ÄԶ߸}— l7”T ŠHߦŠÖÑŸ+æê¤¢yb,©+Ìj>y…ت<Âv³XHOˆ0‰X)*Ñüfñÿ…¬êãƒ6Ãø|•Á¢í¥œí+ÒúÙ­~µ¶t3êšñ<ñwúèe‹Ky_¬H¹;ZEf³˜I=þ¶V22ÆD„u|=nyW1KÃ)’2Õn2õaC¾dB\(¨[¯ÌËú“'¦,3™¯GUˆ!ajƒÛ\sÛB1·U¤øƒç’—ûå’½fªK¥à4ŠôA,ý#vHŽEë‰ú˜kÔ4&O9‰vˆ_û²lÝË™›žÖ°¤‘»Q%lMó‡?VBIšö„]͆q^Œ=r¿3ÍÎÌ—ò@­\,m-Þb;§Ùº—©ÈâäcÅv/5U`8q¢§*­?BmÌ;†Ÿû‡3d61…™ŽÎz£’-g®Y­o•šJ{&>„))J(„WSËL=)AÁòùÆ}†±\ÂZñÝœ.n#‹5Š0õFÈž®jŠTUÏ;BâV-;¯ ™äú®Ò,òif\‘AÁ$šè$´¥bf«tðv5²EøÐ¹Þ /NJâ§Í{y×qoUm"iéfÞmv›ˆü¦SçÍýe÷4îey±ætvšå*ìä]jû÷pOÉò9à–DWÈDCü牠 ½bÍkñ$˜wXæ¦+:ãôk”a2çæÑŸ}‚¨±Ì6*Ù åS¬6LQ¯§Ëã¥l]GÐÁÒfüUï.ŸœkQq žøëQ+Ó8ñDØ#Í“=1ÔÅñúj3Ó©îJÏëµRé~­³¾95R¹+óa4V0 ¼,im ³_ËöütDãPD÷òÁqM]x.”ׯe¸J#!¥‚­ÄQ­Us× ›Þ¼6¿û¥‡¿Öu MÚ¤&Uû§e’2?v…Äü¼cxºbƒPµ† jYEqªŸ˜§oÛ®[¯»t-0€PáCpŸÕe$jÐùeÝiAºí^¬án¦»ø+6O•ºúÐòíN4BxÿbnáàÖ`(üý†ÆçtφòyR-ç+ åîâXdB‘üx¤³½ºËûüXàÒ:fÏË]Œª `¢5”:˜>p=t<»³]Qóœ“P¢¤Ì…Ï©`ƒŠ·«gk·jœø M,3ûþ«²Ã]É‹‘~vbÁuÍJs lZÉÐÍÃ:ÕóÃX€Ò¹O†ô%BG‡÷h¦¤R©ã}’¿L$¨¨Ha·Üâ„%øB$×Ãí=ñpuµ=×ðsÁu†=nÀPa¨g“„?£e;ÿCWZ"Ù(EÒDÎýy$™«QÍKv©5¨5ðÇ)Ê)]×+KŒYç+€â´Š4þÐÅËê÷© q9NTñ&Žçõüæ–1îé×`{eø]âÂTæ-ѯ°yæ~¶ýá7T«+M~È_ç E„W=<®u]8*>œáÑÆï×Å0 PóxŒÞë‘ë&)Åι/0ª½Á°A‚ˆ­j\µw¡ýÙé6^à‚M-"s¯žF] }±À!4J–¥áö:×i¡¡DZ:ž#øÜ¾Íí²YZ²í)~Еυñt“S+6š¿GÀT,:ÈËOxæn¼=› ÅÓÀÏ‘l[ýøˆÏ•r°ä᪔ÕÑ1úHþh"BÑu‚@é§îÍþ°€ªT¥¿³ì—&ÌÔ†-¨~¾Þ• øŽÒ[™ÓúÂÏÅ_\Dtæ¤óÞ¿Ó¾soØÍ ‰}fsgñƒãS]-s˜ð œ>â›v:õ‡¥7•ÄûbƒOx<뛲9Éš7™Ì.Èç®| &òýnc†4?ôhµáóçßW²y±;¾×rÁéâEL ¶`bß $Þq‹=íÒ1κ¡3Àv3øqDüß0ïâ$»Ö[ áÊ?0È£LXpäœðòÜÓFª!Cx‚èÁ9&uP^ôŽ“}Ü­‚üó0ëk#¿°:C^ÍZJk|®vÏpéIR ÕÿÓúŸ^¿]{sh×a#Á~kíÓ…ßì·Àõ$­,ÒH ðÔÿص¦—‰Ö7‰e2ñ'ý ÂØí@Þ"I鑸ª ¢]'·03TŽmäÉêrúnçû1o­S킎Œ¤Úuü)SœÕ‹ÏÅÛP³ÚpG}r"8*¥·á"¯kµï(@0Ü&w×ÔhuJ7±Ow)ž`f`½ÁùƸp¡ã«Góë ’5Æo’7æ!ÎcË«ÀŠ0=ÿ넬òRÿ$Æ$›ºZÖ•êÓ‰}¿à®c´³ûm~tõ¶”»“†%÷# f Gà"”Äüã_ð%Õä=¶b_ ù\®ˆ¢œåÌ¥ÉovÖ[Ħё„lh¿ê7r²Ã;îÞ—™=î5†½rÔv{¨ÙÝ¡¸Ž±MæÙàH$ë!K¶lÙ°âj©¶N„ÒéEvGtÎDª"^d»¼SÔeb½s翯nd$wÿ3ÇeŠ¢¨}¥ÜØí@s®Y‹™Š´%ãS,iÍmá©©¹fƒŒÒ>ÞhÿEØ&þz$ãÓôÿ iÑðEa5Ü g͵ÒVÇŸ±n[’OKwEs"ÏXjŒIÿÏZ'80)K÷0e< Ôª³Ž¥”¦Ž£€H;ZŸ•ôU®"W ¥Ðl¯„†[´À³!!º¤ú¥ÿ_C‘Êì ó£Äµ}R¡Ø¥liplæ ú„æ¦ÚK©Äg7æ¡•a¬ÖŒ‘;+qƒíy¸ÐÄPû¤{À°I¡ Ò{sÙ†ŠŠ;t¡x"à°Ì …pD­OfÏ ûÃ$A°ÊY®ü`†i˜§õîü N’ ’áø©\¦ä–§Ÿóë ¡¬úõ€qØ)Îv޳!ùˆ[9­•BýÔ–)=¸š²>ú$N8O™¬3e4 Çpäèåò‚, ÚŸ¢ºcHŸ´?í„2IÕÃOÑMP°Êzõò80ç-P¥éJ³sz…y%F§ÊßNºá~[äã” gÕæT-¬Îÿ£ÊõD}D\.ë Þæ·™êWŠíäù¤û…²–` üŠ;·¶G@ÂåìzÒR œ[5æCM‹ùWy¼‘ V&VÛA‚uïYïZ›-ÈЬô%p&K=yqìHçƒFñ´‹Öw³K÷„U÷jôÓ?£«¿½@ÖÞ'Q^¹½Ñ¯à¶ç÷ÜÙwÙKšÍÜž)6Ð×/«u¦ÉJ{E2u|¤^¹7¯d“HÄ7ëqÚÔ}„sSRó‡sã±GöKÂ;âÀ¢\ÀÖæ”Kn-6þ¡Æ)ôÓ8{Á¯gøRÁbl¸sGÅ–{›uе”%§ÈHÌ”V7Âéßûð÷;ìšbû=$w…Ö·*ÇÇ`x®ß…ÉKhøîØmM¾\I:×kÈ}½‹`O¼LN2˜ÐE¿ÞAês+ÅšÑÉä¶dO•SaÒY¶¿®©ìm–¤I65%¡ß5 ìÇu7³JA¶èéªÐ]iùÁ7¤öf²^Ÿ“‘)´ ™¥¦‚Nt·Íâ´†`98ZWÙ-E®çKê:èʰy-$îÃ0‹[x¬#³íℜƒØ¦ã@'Ì©yl§^" ¹^y";G‘3Ckäw8)£™ä43Æk¸E”¢h& ßÉÌ’\ì4^p˜%Ö¼*òõúÚÆ-Shb'•D®5T=mÀd!ïV?p\)UnÄf’ÉMIÓÐ5¯ÅÒ”áh‚^¬6fÜÙÆòGî~¡'6ÇRK<Â:6àM½ìf¿*ªÏbaÒÍ'½=w]2ÏÜìŠ6õ+xÓ‘.mûõNPöÜú+LJBÜ^2Ö=s´d‰=5‰—ƒô$•Ú—1g[ÅrÙ?Ñܳ.ÅWbØ—©çÙŒϰL£ÂvÜ´¢z©Œ6„£Ã‰‘n->–þ éXp2i„Ž( ˜–Ëxì)(Ü7†ÖÜ@Xb]Rƒþ“ba0úùªÞ?]r ñÑ (XQ£ÖFª c1Ür1ØËcŦu•¾¢b‹tòuïR®g“ŽÞ'é\œ[1eÂA‰±˜Ö‹I@b•·FéòT=[£Ï— hKb ¾7*^QEÝf:?ç‡lxÚfÈ+ê5RMUy+ _“œN1JŠåÀ“¸gÖÚ°öÛK=ÛXáâé´‹^3"A˜)'§Üñé‹L¤"R3†€‰]ëô­Ì ¯Ì“•0Í_‰®ób½ÕQ#§>àœÅ&;Ð@É‚#“X®&È@…Û¯¿‹“ÁqGpKšCgG¥À,ÔîŠèº±Œ ¢Z¹nò.näÏãMÜ"2 ñ¼úgÙ%z¢5<˜õ .d—”¶§#^¶ÙÅöîD6k^s­/4A´ÁÛ좺W{WI³Ü¹Õ5CƲ¶|¬?îé}âeâîï}_Sµtéa¦4¦XTïÆõäÌeÿ–?lp_SF)÷4GñÝ3·Ö_Û*˜Ï°ãÌÿþcþ¾ióMÅJÿsBæ8Èå˜ìqûïwN>öò$d×aq“‡y¯f4ýtâþlM ðvN°„ɲÌåÛlÏ`û×gX쫟çƒ2œ8Á¨wg$-wŠl.¦ýÅñ»ìΑþ–ª!hèËáÛ·:Cq®(Ór[q«1¸oc§M¾â–út—íŸ+ý‡Ü–b_lid$½­²iÁá+l{ˆ?OHªq4¿XÀ¯³¾ò¼Mq×é•Ä[ÀÐVÕÊ¥@ÜŠ!jŤïã÷˃q$µaªþ“RæDåP²VT6ÐõmÊó÷àyßp/Zq‡YWd¿\vKTÕÁF-c†Ziy&’éójEMÑïJ3’®Ÿi$¢=èœH²¥8ø£42^Èø ¡¥éÕ÷9¶Æ ±-$²!Ž]÷<pþÚ—ìμž…Ú|§ˆ‰?ÉH`_ì¾Le—XÙÐ&€ý©Ž c$²ú©m„´µ¡ rN÷ Î/( Çè£p½p<ÐÀ³ Ge͹¼–ŽIéV‘Uò4pÓ˜±Ab~õ F¿ò^à($';£zŠ @W¦Õîè<ÀÉññ~áÙíü2wõ«=ªYöDÚ8•¸´7y4@ø ± eA#]„ä%"‘¤M$nj)Ò¹uå<‘ÆÇP29ÒN¬µK\‚hFó>Ómt#\IŸkté'§Óà_„Ïkاékú˜È‘±°D²qG“SPkyŒÓúVDS?#ËÕlºQŠ‘ÇœýqÄa‡ Tyâ %‚Mõ¸ZÀš=gïbòT®7cê$õ5ÝP –wÛ¬”c-°¨àÍz&²dUʰFN$)ÂË9oJ­³V0ÁKéòh­b<¦çH›âF ±Ô0äxú¹ìLé¤Ó¼ ­3Ôõö®²o‹èûóA¬ A LóFûèÍ!AF€þ@ =ôÕôر§+8ok$»w¨`Ë~ó\}‡&4MÔɢܠµ°ÀLjÁYYÿ·pÜÝb‡1¸"ƉK•ž–Ù0ÓÊfHýD\ªÚÅ‚®Õò÷TH×–WÖ+ã1¹ DÔ«ð¹ü Ø þ`ŒdžŠEÈ›0íÆ§€jˆÓ+iy¬PQ7±uZZé¬&œí/û”•£”ìÒÄÁÒ‡ºgU0U‹÷hJP׌‡ä4¼+Ë[†çà–ÜØð‚õ"ö²>æ.~Àô8×A)ˆ©‡á‘›ÿ>îl¹‘©ì†Ž|ákxqg&ËÀ÷­ËcJRœLâÄj”y³³Ýn¹4àUÏ¿ã”Ýu¯qÜ:­5O´á*-N¥ ݰ‡êÈ1çÐQóW”mÁ™ïµÄy #‡ QÀFó¦´õî‹’/³foÀzPÍ<=Ðc㯹—·“dÒucäÀ›¦„¤Bµ¯‡¬—I|r [Þfȼ Þ¬¯e®šÑ"˜–S# ª¥ÀfäŸ9É=ɤA«þœ©ªliVKâU~²æ– ±Îª+-v«F5Š´úpÉyÕõ É1G>#»Ò\]D¤nìGÍÎ|ö’~z]où²ùϲY?vÕ„¬Æ„mÒ—Îá™y€B¯#ö¡ñ]§J‘ïj:Ñ ï“\ò¢ø¹âÂF,lOêc\¦@mãM¯RŸÍÔÇqgá¼&æX¡éa©„¥v{²^y×IØïð6âçøj¶ñ0®ïÝ.Ðyš¥Õͱ¬1î„ ZXbFqáÕuJš¬¿×é~àžoÀ ™//[Csb2ºË`}‚¼<¡eá\Åî¶‘7/BÎ6¢Šö†ƒÄCLCâXç¢óȵ'RZù†Ø€eWQ®Yòb2¶«pgði1d¬F‰y-;›ÂšÞFà ßÙTŸïfIW(Èž ¬a]¾¨ßŠ£b¿|]P¬¦KpÍ7çFÕláƒ}p><Â7ÆŠä4¤mÞòd9óË€!^7‚ßTÔtP^S•¾F&—¸¡{²Y4Üþ¥6“Esr…«òN¤ŸÊÏ•œNuá“jožJå0XáìíÏè^/ÚeG«¤46¢¸tD O¶†wôl:ÍZv„T—Èa¥úó—ôw ‚½GÇ%Ë5™¶S`2R³! B K•‚ÒûñI žœÝd…“7ó"‰Á1!çdGI#ûkBº)ö‚).å•Ó~{W®¬+€uÅ¡´c¾à%îëEvCÌ–*UøJ–[íü×ãìJªÜG­/ÔüG+K=ž‡R;ò–åä;Y˜Bùè­ÿ{ÃÕcç4ò[r7 ÿÏ49;7ùêÓã{@oø0I Yj$ˆ%sP*éh…Ÿ+ŽÜ¦»ëµ ¾9X×ì»BäËL,8+ïê9ªéì¥Äx¥ŠAMS¿Ð«hÅû4«¼ñ§òAÐl‡hos¸qSu²­,Èic¢±/ÏtT$Jÿ½Â;e•ÈØ´2}à-Yê]½ºú{ÌjzŽœ^¥=%• x5qõŒ´t–1A¹J­¥{¬k›¹Ï¸ü¼4»Þ0l 2e ÞßuŠ ‚wʃ~Ì jœõõžïð·}1%|´]§!p  È¥ôŒL11šÌLn`UÒE(É…‰SúîñØè¹A[)p½"åD·T®R y0 ñQÒ­ÎÁýˆ¯@'«ù{˜ÝÀÆŠ\IÍXš€ýŒ!üû/Ä$Ö ¡V•Å¢/rISеÐ _la\ï\?Ê œãZÁÞæz¬’ðµV–g0{ëâ­æì,íåè‹ëÕ‰÷üÙÏ5wr(¸1É]@;Rü'U’þ×é]zY+£¶2U¶î1n^B®ÇȢɌŸ}¹ÐœüMm.bIzˆVÃqø‰;Æ7/ÅÐ{ôQ×n¨êÊŠ+­6÷É8~eS? AB]½f0‘"·¯—8yÍ}¶ló«çì¸Ç ¤’‚3Ï¿AÆIÎ>³ô ²·B9<}ÓÑ'ÐZ$Ï—±ù†ò,ÞŸ+Yë2Ï®Ö5t*µOÆæ³Ìw2å„@»ü;tÒ7t¢õ”Ö­‰WõîWÆŠ$[³ÂëiÚ7:-J’þ‹¦¨Ú8Ay*Ý ™×(¤%£~¦°¦#Žù¯–jÖ7Ýûù.´Èüª~9²6ü°õ]Ev]¡«x.8®Šô(Tφ§M$tˆÕÜJ×;Ö/ÒÜÇåÎqê­•qo;BdZ_zf I²ýgÄìáw¨Þá™pôàg’5’Þ–9bˆò95Xº, [xé¹ÞˆÈí‘þxˆLý›³ãd:TTÑìùEÍ« ÷r[G$×¢ C7› ä\4Ï_¡ƒZñ,Ñ?¹ZEažôÆ¥ áTh¶ªœU˜XÔ§Ø H¨5Ò`)ÿXÖ!åÄõ¬^[Ò!œ'Ê‘Gò#6»1ÍÁ’œ×iø×D®ªÞs2‘³ÏÏÕ¬¢M-¯ö€b´A¨wyõŒÖ'Å(Èug‹ø‚ö"B é¦áëðdVï1¹øw’ìÚÍêã[L/Oÿ’•òtå‹Pþ‹¬›˜]‘7Ð÷°¦kø’N—Jv¹ÁPhjä”c¾J”ÅËa­ìðW—@ªI,;Ï~jwÉÊÇUüâôs€*w=¿ùÑž†ƒ¹Û¾˜•Ï(˜eÜÌÈ‹«!8°f]^Lô%î“4‹j’¥Ô5Ùì& Ÿ %’ާÔM„T,ùI—ŠGU¥öHƤŒ«Ý.‰ážüókãõ«œ @“¦úÛÔI$|"Nì¸ï…Xj;˜Iø_°¥,†e«uXÙ”Š …‹oË='QLY~kd»‹^\’î}6‚U6̧=)÷©Iö"Ù™yÈ‘–ź{6wõ„Oêx¤-™ÈõíÏ1¾ù–s%oõƒŸ§nÇÑ¡<_‘¥k¼UYD!0ÝÄ–„lg¿©"xÍõp²ˆ’}¡Êá9¾ÎÉñ²äÂÝìR­bê•âEÍîºÀ1Užj°–C‹¯Š–.(,c¾ÉëáD•¥`8EÍÎÛéþa6ÁªX•1ÿ )iÂhÕóøLFã¦øô×—®ÿL jR’Ε J Ûx€jCöÈ—²,ð6uƒÜHä;éJ7Eãeì´’]7ï2•¡JA$ÊÓ™ÊBàÿ’w‡‹Ëž§j÷zASkŠÜ œ8âë×(Â"v–“Y´Á½öoU æ·™PG]jÀ¾Õà1[—¡£Û¸Þ½C¯ ÐëꈯÖåèT“´„(ìÇn:—ôþo ¥éšä¿éPØêN0£5ðrÚE¿Ý‡ºÛ¯`ð<àè„~Óø+¢®À½ €yäÅ£—¿±ÐÚöèášÓ;î!nt°wNi£ž,–céé\pm/áÜÆv‘„N¢dm&˜uà O•ÍVgÑa Õ´HÆcx&á; m³iѧœ:à¤h–ÜôÖÓ·Y’ËF‰‚É.wdT[¨}¡ ¦Ôªö¼$`^¸3 '¿[ƒt†Y ß±4ùddaóÍ×}=µÕÀÍÂpCÏÞõÒÿ¾OªVQ Ñ«Gz‚ˆ~ášEßNI–ÌÏî+˜DŒ#â@SO¨hÜ èè±DpñJ3ÚFˡ׵[Ô€ÐAâ+ÈÀ¥È¥¯Þu >ÄιÅ91$ ë‚yM'{Z|QjHýJ®$§”|¿ÁÆ.9ÁG8b&y.=ŽôLɰñû]0N {q=’¯Ùk7òv©·…B(>¡õ, Š=4íßþ®³Þ ÑºxÌ©fÔ‘¨ cáÙM® P^Oá½ûæ–圵8÷MÍÞ³ê¾n¨¬5yoM~WNKr<¡ ]á–`0õt=ëSkmÂÔe!_š4̦ã/r!)hnÊ]§¬@Z1-e1‹ÈÍêóŸâªÀ¹EÕ”µFRKHe*À¿Îìˆæ Å'—aªUpñ;Éâ»d§zÆeâÜ?éÓà1•¶Üt“÷‰’*Æß”¤ÕUÝ7²@À6Ë2Zœz­€a@[‹Ã” ™Õ¹u—ôW1RÊÞÝdúìýtr`À’"Žx•]O’jRö¤Wì,ĉ‘D^ûŒîËî`ŒÛy%/Dö#Á¬yrw’KIbL¹°áÀ(½ÁsR+§¨î©³À…Ëïsö-âÀÚ›û;Ó/YÓ÷-º‰~Ó†Äc˜•ehÆ,«8ÆþYbýUØø_ߨ!#’€èé c „VdØ÷Œ;$±íð­GŽ"éÑdߣquÅÔHQ¼ô·fôÄš/Dl«œqO f§`fŠ0+ -mTù–QË‘|qšŸ®áçÓì{òÅy!` ÊÏ—æLã5h2y5ŸR ¼ôÝvBþ‹þÇ€ë;úÝžæ‚•6f°®ÆI1}3¥.ñÔÎñ²¾q$ë²â`å݈UJ3Moz,;Pv.¡¤û-õ$r–@x4æzAÀ#×¾ðEvƒšû.¼{äNj1Æ*öp„òKy é)²NtZ#ßBެȖüb8V‘#6Ÿ©¤~û‘Se|V†ØJîé LfßoƒñÖ_³¾Ñëì-‡åŠ{‘“Sõ}ˆ½`×®:”¼ Åâ0øÒ}"€Mü\öœ‰5`›6òc\­%Ù-5?ƒ7Œ‰2rßp6£ ! /à¼0e»èø•T™ËôçÅ¢»;LWòhnÄÅ5ðÌ\À²þ:R Ú§ð/¡#ýRΔÎIôˆ¬ïë†ÝTט Ô ½.ÛÌk¨`¬`çOt°â$I$@§?D@S9·ÿ®§t¨F »]`£§AeUKËgzTºÖ„íRù2é cå&ÞOÛÌN>‰Ki´ýº6wQö«BÈ´z§ÃôнH¼,7TÙ&&Ðl b¸/ðØ¿"œÙ¬Ž ±¯O苢Żbˆ¡|l#È ƒÄU§Ïèêû”·°ìâ÷Ï$³7Ík’å_ôË L°ŽK|zÿŠˆ©'ÑŽíâT™’nÁöŠqx¿{Žä²DÖ¨Hñb­;¯êQÊ|×j‰Ðûë¼cHãÙâhãBUL ð €Dy-£Pš¬S>Cé¢É.æÉ˜Å™ýawÖ ËL)x²-öc7£²j¸zm,iœ¢«ðR¹ÿWð×îè'fô0!ê9~KÇ7žvÛ2Ï¿£€õPØB ~n•õ^Úç³îZ­ô÷,ùY6ë“W'å‹VÀWrµšãØ>Òìžü¹‡ìq»6òØQ¸ É•Íd°´ÕS¿S§ŽÃSð¯”ÀžäHþ ¤Z&¦¿ÊÔÚn‚³D¡4‹`ßuâ±MÈCýD—§æÊT+ìóí59Mñྔ­l(sÉg²¾a2¡#ÀI~íÇô ID2×5Íd™…•kà™>`Þ œÖ<‡²óŽäÕ¬;n&û`X6ö%[cîŸsÛÚ¾ç]”ä¿×L3¸7äDäá ™Œ™J59¬ßîâS÷ê©ì0ÛÐk=Õ²Až %@ù¬û%@ãw fRÝÆ?ó Ž cÚ&ÓÛ½ÄæØóakÈéM5x …èü ÌSì6i ˜–½M;_S|W¶x¢Ž·Ö ”+ÚÄÚ]@ý Åk˜óO8î¾¾G‘ŒH¶‹²z¯Ë‡e?Qk„U–|šh*ó‘oθP¾…*V³5q»ANrœM5e. ô †M—Szw+-ðwrß9{ßÙdN4ÑÊE0ÂÞd“ÕF¦ã¢fV€óÊe=O†Sf®ã4¹Ç†Z1·G°\;Eútó ŒH^ü:ã|%íw¯:®\I~žÖ7ȲÃãÿ÷,ÎÃÇ8Ül^³!´MËòÙ%ñlŒò6%uS6ž)Û‹CªHA·HOK5ÌßóI¾.e Ø]Êûmf?ÿã:²À?p?Fž €Gòn³éÆ w^L¯á{)ôwªÐ.²MÈø!‘TÅ“IõêÞ[ç€eØsñdŒ³Å¢.vÄýVT©«‹kÿÈx$þ54zŠT‘¼EmžsøI¬`a¸T*¾Ô‰fîù1>Æ“&{Ekêä!ék¥êÚ*-¬»Éùc!+rã­­g2’½âc•¼®Ÿe}­J#w¨y*aLϻӚí¨kjyËôáû‚ ®|´ ÃŽL¹!Ëžàgž]3©Ë°öNÎp-'ËD +é}@?é™$‚R5V^L*­PÔ°—Ñ)LÀÝ ®Çöîm±#PǼŽsúø!KÁdäÅÖ¸°FM(†cüJ¸A6èÇ¿ÿ*lÊÒMî¯Ë¿P])ˆ8ä¾TL/û#èŠZ¥«ºÄz JÍ9}2/† ¡±‹p™É˜ÿüÉŠƒ2p<[žF›ÅŸ+Ь¦V¼R›¼!ù–\Q/†(\˜GÛP<]rß ³ÛÓìβšÄäØVø¼u(¡6\˜Nˆ²›šø=ñqBTY0î¯&×± -l o—o]7ÈàãÍ­j"£ï/Õ&… ³¢éuñö5õ ÷§ò¨-Ø×?þ…Ó ¿¸”Äu|‰Y¾JÆÎžrþ¦v”×ÕªÒ¼K΃ëêÔøOX÷”s*=M‰ä¢–óO)«úO0IgšÂÍ1¹P^0ï†4|ìR:+Ÿ -¢J×U48~²(c2ËÔ¹”M':Gü/EâMQ±olyà¿ÈŒ°¹!úðcñ΄dÅ„9¾Ž+/˜†¢)0]4û;ím¼;ÎÊ‘ ´l!ã$·x¸ÀQŠ z¼-—â Û['u'G’c¦få…kY–†y*^€J@S}«ïŽ©!®Mÿ4¦R(‚òù‰¤l9Ë–ÓJñ;Ý„Uú³ÃW°•é³L›øpºÎ܉AÒu³”ÄrÐt,ëÆ+ (¿=T.! âÞ‰Æx½ÌLMó'ì°ñÒs¢½(¥Äux¾”3Ü‹I9딩º”‘QŒ(ë0Ê‚4£æ@nLE`bÕ-\ˆ¨¨!Öºè…XŠ»ôø¸"ñ2u&°2Õ7ÙZ¡!çv÷ Ín°Àá.$N-Ö§‹•ÌjzˆÏÐr—hhãAé}~¹¢9‰:½€]íâ&n˜ kWæÔËå#ØO;"’^&»5Ý-ê›ô€ýñ¼»·×›)Ûýé22¶,Örf †ÓRŠ•[’Ȥ‰?1á`Hçr*yòU6i˜,Ó&–çÙ¤i້¯eš¸Q)ò‹Q¬¨1Æû£¯g½MA6•rá…Üü´¢c„E‚˜qC[ ‰ÞÎ3¤vÜe:6ì} H}º®xŽ‹Zã3z¹yéØÍ³C·üÏ@à¢MÚNA¿µ7?i× ª.6z1cÝ“^«+²ê†Ë­‚.ƒµŠ]uʼn\¤2ø'ï™qër”óê¥8†”6šg¶7v,gûW“¯ Ô£>™¢yÒ†‘†7øÃ­ qÏÿ*RŒÍ/%”žI` Jšæ™4%Hަƒ§4e–³Ž÷êÇ©`(È‹Få.Û@6¶ÅÍ*̓17uP:öºsh½Å*êÑ~/­µØID YÉ7ËŠAwAU¢VÐh˜vSüMø_±¿m¯Ð BOºÁaÅĈ·îO³ˆ‡ É:ĉîã쀣‚„761e<9~žÐ [7¨‹£ëÒˆèŠHì3êOnƒái2çþÕêp”ÿö™šõ+'ˆK{vÀ»©²ô€J¾žøªÃaÄÞ'7§D”‚¶^I€·C„A6M™nµøVýiœÓ!†zjM˜2râ$^†[yÕuˆðügÍ8etÑr w©†ÜîS_.²Ž¼d¿gF‡b{Êd™mé^3&'½}ð;WùõÆŒÖD$|y½¦ãœI³„€rôS4þÃþŠÊ£ûîû‰"ó’£ÝÎܫѬ'G˜ÆskÖ;¡´Í‘cœÚò_Åá·T ²FÖ¿´Çîç}­®ä™ÎJ;ÖVØp]¯¹3D&?–4º(ÜÕí~[°œ­Uï$s/CöÃuäldõ¶ëk"`Ùž—»®odÅÇ£î¨K?ir¯X4·²ûdî³bt¶á^ë)M ç>gKÝ„ý¶øŸK#Öú•«÷6ë)¦§yˆ1{uüà³ìM)ýÚõ²&B:jÞ…ˆY>Ê?¥n%V€¸%}¿ÆÞtïÑtâ¦Å,e#Ö"¶é}Ï·û+<Šö q\L9”‡Ç¿üJÁ +–¡†4)õj(`¢4ë ‰WMÿcÚ„g‘ÿyþø–‘œza·äàGÙ>Û5“œa,5 .9iƧEõ‘¹N¼¬’åª zr1'[Îi/¬éN¹_`þ„÷P_*)*ÃI¿ó§R›òÇ€&´é8ÉÅ…äŒD§ÛĦËázð §³[°ºŒtÓ¦•›î—ù„A±Å?:î&Ëv6SíðD/q›[^É­ŠÁøÖ-4F?å%lA±†wõÜðA0Ø¿7ƒ w•yk ç<ÍTuûá„úñX¦ÁX“ý^g}M¦ð¨¤àÑÿAvÉâgÕº™†ÈÒÁ*”éB…â&Ôâ®ä¦„õ«âXq>Á·ÉE‡  ³ôð$»3Òk¡Y&Q­tnÒ)¼_ȉô’µY·<¸ð¡,I ¨3ÖNÖFÝÀµèNv9è¶ÆõPƈ‰ØŠ»4â€[ÿøÑCÆMn^²ÛƒôN/²>¦x>ùo¤ÐºU÷ö…DÂðTˆq`6{‹(£ç@]bß¿&[åOº³ŸY_ítxX··£!¹rFói†{…ƒ1†ÚÛÍ´ã!<¸°Ê_¨íæ2t<›!}mŠ´r°ê²^`\ý]¼) Uɧ“GT„ÔX–by¥ˆžç2@Þ«¨_܃³/âmM¹pñ™­÷‹}ãÔ¹{½*(â6á^f]ûêPþí]^} GÿîpBüüØnq’Lj>wâ”Ø”k¸PÆ ‡NŠã8ó]@@$3~ûó¸ÍÛ›½û›`"QŠðJŽ‹eÜÄL²–}µ#3‹(#x‡ËK´¤³ºÓ|[—ùc?o+Hò˜åˆ¿‘°ò{-/\‡«Ò¾m€$”‘8 0ÉVÜ9Ð^)lÓ~Áõ+YË>%{À/Ó¥M÷õÃ&®–?¶ 佤¿V*·©×d¤‚9t”Ð~§ŠVyß·V!Ùxû`Lúûk®H&¸Ó&½_ìÏÑfNzov/ŒGÈìý¦†%¡¸[$ÐáÎTÝ|„¥oÀ·¥ÓJ ç=OzÕì!çæ´ÜÍNŸy—&0Ì6e¢ÃU?pÕ’ 1Žy¼Ãv³HîõÓ©ŸlgnüñÏu÷ó“ÆŸptÕÌtŸ÷jè½nivaÿrÑ?Gã(8Ãyvø,Ë52#3¿|­`–seR«_l!‚5 NS+Ç '4+ zò^;)s¸/PÉÏ›ÅHÏóeÌïñVœþN#ÏBìÇÈíœ_Á4ñ[eÜ9ô‹X£6pàY«â¸=ÇÂGȳTä ™~ºr¤ñ%é|>ïÑWf5ÇH^§™o˜ÙÀù³½>¿žkoò*Á¤^¢UMYKõµµÛ[Qœ½Ì´gSfr¹Ÿ@Z« §9éòJü‚I÷ÉöJ/áàýý)TP’ûЬ':Åp0G™¼M Ö5Ÿã$1Ƈ`Q–ˆó†‘¢Úhý‚«Þ’óIV_ðípÒm‚ºü,ÚP³V¡=Í!–Ï0‚‡'œ_Ê„N¤T©¥ ë×Ûsýá‰Ø®öQmÒô«ÉŠ€@Âþ±óŸÕÅ!NéóŸ\IÜU‡©g%f_òoÃ0×é„÷Q½LI-¿"A °R ¹Ž•?e2Tîîí]Sl§€-ˆäúõAq—ôë}Íé0«(œã±2ˆ)»çÎP¨¤´‰™“ Rx÷Õï(N÷pƒ÷˜³À{¤™Z=}ì”×Ìþn#N­¡äÍSò"ë äÞÁ-Õ§ òèþ!8À½“§ÕK N†‰â÷¦é¶§`§Kl'ƒøµm˜<y)¢¦ÿµ÷_MulM³0zÿü „áißc€€ Z¦­<’2ÈýöÓ™U= Z;â;'¾›}vijߵX0g÷0e²²²ÊfßaöŒÊòãtìw¯’_¨/$>Ì\,¹s„—¼IšxJ¹½ë?Ýr‡dD^˜Y>¯Ø@ˆ£ìH\àËoRɦXrþæá 1@5Ô¼`JP¬z1—/›½'Œé/–éjÅó¤ñ€ŸW±AœµÓˆï})‡¯ðñ:ƒE !4zŒ8pqSðD≦ûAÁż|p—ãBÓ¿ŸVÀ¥7kˆ•ýøc%ÇÆVËT4OÕ‰¨®ZSuDvö¨^ˆˆ¯M-C@ã€`|³ÈáN¸ôáÏ..Yÿ'%ñ¼5ªª6»îæEãHÊf ‘D®…;FÌØJ”çÍU7 ÖèòLÖfPa ݸý…L×ÚMP?˜²ÙgbèÐkþ‡qÀûQ܆Y¾Ê_„XEð–:ZÁ;ìÊ”¬{“Üvì*ú£F_Äî Ò6ÚB›–r@ZHbµ'Ød˜Sg=Õ©…Ø-Žj^Å$ú€Ø'¥ãpš‹j”q¾/¶•¤XÊrÜÝ×þ©†“ ŠI 'ºa®wAÕFÏh$SlÁtdF«T7YOX]Ž!gœµ‘hI&`íÝ›@kS¦{ó<ŒÅÎ xláËQ<ÙÜÈçJÃÉò¬\1Û¢ y’—±Æb[IÀÒ<¾~B(Ç3V²ðñP\ƒÈÄÀ “´“hP*¾Æ0ˆæ¨ ì0½é¤JËÌ/Q㋼¶ ŠN…ŠÙ7“Rã”DÂšÆ 2çaºÒ,G—2[Ñ8 Ÿ¤wFýמ‰5šÀ —%^¸DÞí;æX¾ì=jy&ŠHCfkfÿ2VÅ aݬ¦~×åEàbEøóã´fp¥¹­>4=™t¿»Çó‡ÉÆ/ˆv• ¥¼}„œ¢8߃ì·ÓkfÆ8⿨òuÕ ±¬:ôMK¯U}¤#†8Ê„³lDéœÓŒà©"p`í2›M³æ # œ«0¸O¬¾ÌWý§t½F¬Ãl6óŸ`Èõ­ŸÊÁm êÅY¢'v‘) f¦H­dÅ€?aß^ivZt;ã• #—oç\ˆF³ùü †fœü_äõ¬œr~ ÑcåBV9µãânY+¹í“!¨C*‡%õð L‹ã¬€â !…:»J4ÂðÇwØQá|·Š*ÙuC%Ñ:ò$Â,tªÕ]ÒWû+èÊ'Ô?[ŠOÂZ3Ή¸!`½ôA¶ºÇDŸ°=ÕWŽ]-·%È$0m$Îy;ú·÷;î…59'Ž!©hÊ#(¸±ÒYY7ý­_³cîz ¼‰)[+ÕˆÄGDòmP°ŽÀ¸Ý€¯6âìôPã]œìäh¥gZA6ÙÅgJÄò›…苳ľܲ˕% ¨“AÆ(eÙ“eGø‰qQ޲™ÌÊaÿIÄsÜ­\!¯6ñ2»îk»!n¦Š–vû‡²Ñ2Aÿì¹oa¦"]ìK¡‚*Kpø|ú÷v3nQ=Ô`È—o-Mè„ð™·—õjØ÷ž’,ÆŽ WØM{ØÎ˜úϧÖ\eJg›rŒíÑ£«{”ðäÌ46J!ðÝÆpú ¨^PJ\S})na¢F2«ãùâ¸_zxwJî@²’a4…ͱ)–µ?ÓÐííÞ‡&¢]ˆœ%äšÍw'‹§ïº âÕ¬u#Ƀøš 6v]•¾yJDšë6®d¢¯Â[Õ5§ ZñäNŸÜÌ:vÝ[øúºY’ãS¦%†”á©v ¦ÿ­œšBéV¦NŽÊ·mtÜIfpRþaÔyÓZEèPÚŽ¿Ï`п'ËåIváÄBóÅby9ºÊn×ò|c`r7×j ì;ûëÓGŽz¿2¹ zâö¶Jµcp­“Æf†žÁ[Ý=¦è9¾x5-Nµÿ瘥ÄB™¶HÈ‚Gø ÂJÑ«Ù[X€mÍ…éË2•੺µ fÛ r°UÐEu¬4Êlß¹&à€L~Nã0J§)8bY{uÕã'Ûb†òŽËÍÌ2ÒÝŠù+9’¬¯€ŽóŒÔN4~¥¬*p0뮲®Õ qç·6Jé&®Ué# ¥«¥¤ÜN«ÇY±Òa¡8éâE¢^æ1‚Þ@\såO¹!ñšTòö¤¿cAx}ÍŽ„Iø«T“ƒàá¨Ú\̶Êzužçîݜӄ’M¨õNâÚl`.Å”ÑÏÿ;ˆ##ý‘Õ>à'»óÈ t'ÚŠæ¾;œÊdg°Ë¬¥{Ó¡˜=¶JúÁ‚+¥Êç ¼:»¥cœ’t;Ó±*…¡R9’I3†'>ÖÜoˆ9k)3 ƒÕÔžÉýÙßä0´ïäf{þ«©³×ûàe°i!˜ÿ˜—ø fnÉY-›•çȬ=¿/¿eë#ÄÑt:þƒ{ÅšúBÅtüJðj& (ŽÉkZ8øwôxðj¢Î[—ël…¯í Y×’pÑ„ä­|A£–¶nÜ¿S o³)=WYü‚o›L½ü"&Ës51›š~¢÷EºÊkžYË5-Í’{üö]Qö;3›ü+¾þ·Æó‘ôk?Ñ @»j³áâ~';žaC‚JjeÃ%wHl’ç‹ÛGJBõ×/þù‹Ð=¯ÿ{9úô5ûÜPØ0*âåW©ÓËÆ×'$ˆ¸I¼iúÝö;šûµG’,ôXý^eÆ3• Yddc03§ÉÙÂ(&ê@]Åè 3øsOXH®Ä‚æq .—TaYHcӎѤ,÷îjE„Jlÿ,`nBµD­?½<ÆâÌvÚ%¢Ú» ÎAkYD r ø&é[DF¿4`-¼/Ë Z‡´Ô Ó–ó©Õ©E™´yõK.~IAá9sÙ*nÈVmd¹lJ¼£M…¶è‰¬{œ,øJ©ï¾ 1Á|Å›ò] tutŠæU¡­$žM7 =7ïOOð.㨨Ê$†Ú÷‘fµÉ@eó‡4I„û匢Cð`T'ò¤Ìz>)¦£ 5ò’?ò‚uÅ~?/®¬›Cæ™Q8£OoÙÅxÌ}>“ˆœzîÕÍÁ¢…7êäôâ6i#ÁÎÓÒÍb]î€ÎjFA2uçMÍbˆ{ØOäÆÀ—näµò å2¹öÚAžæšG`P‡êÊCÅ¿¿„ÆDWý2’º›:EIŠ|m>Ž=h#@°n= ÞáPòU©LL=nƒ‹sœ¨9G­wÂq¯H{RïÜÑnojìÓ á\DwáÛÆ™]‡›šj¦§d¥é|ñ5læ´ÛªNæ/ÂYf/‡±CSv}Ì+ D‚z@‡dçÛ¥,Yà7ºÌ*WÁtÀ›ÁèçaoyÊÝyÿ]›—]ГNo§äkBYKde(ÓžÇìçI Ѽ¯OLÝÄgLƒÀOgê­êç A÷Ýu蘴;h²áG±‘VCÁÖ¡&þÝû{¼ [ÍKkï#@›ÚÑ<‚"/·Õ›¬ûìØœµl’º"ÅäJ… òMtÄ1>õÿ|Þ§®JÇ‹ ½ßŸX¬¾>®® ¨_p(¹ ïpÖ@)¡“CF±`›| LHœ§dº{ƒ“i‡§0Âj½)Ù&Yw?»ª4<ƒIÝø¨zE–tn0$ð³Ñkãs[úåT /ÕUâ"’@i%\ó€k›ÅÝGïža|ûð7£øŠÑ1E¼î’3]>`Š~_ }ýåg¡³¬šP,iÄÒúg16‰¥_rO^ý~!£äÙ6Ôý›·ž>ʆ<½_VG ‚ã’Ú/?Ç{–Ê×6Pij‚§$9)ç¶Ž0…»÷Àcš÷_p@ÜåäÆCûP“VŸý¹8i–D©kS°Ö j9xŰ“­ÖP"ÀìcR*4ב^ò‰îÃ}-½iÎìJLUÉb9 ^Ø…Ê?üŸœ‘ Æ:/вFΞlúóKÊøüÄøÁ9øYÉ ×øÔÏ)±ª Vªô)©=¥ìû½ƒbú°ëžÌéÈ©°%lYÊ%ÌãÊÅãÜoÅÁ5z…m™×?`á¢Êßî´_&q”BL|YJ†*_·b — 1fk†çû²S%J L{‡ü¸l°ò­y>—n 7y8ϳøÇ(ÿ™Ç”¬‰þ¾Ëní ®ù_Ã8^y0®µÁ¼RÄÜ&M4æÿR +‹ø…3Q.ö¬à/y›Þ^ ÊÖ?TÈ&Ѷ:èÅ1Ü´&ÓIÒžë»´?WÔp5DkÕ§ á 5ÚûyޏbbÉ¡ÊEú§WMÇYfQ#×@;ê€âbÏÝe5¢ÌñL“úm”?4ùþŒG¸“µÓ/Ü õñ¦ØÓ2wãWYO"µd.” °]ûkb²êB`%d'…XuÔ‰.å©SÞ~DüTX‚Hî)rTŠþ?°<Å;nzZ¥d(8 5øLW6è®×æ?Ë13þk–ÔK±ZL£µ´Ö:$Âkûû®ã‘>GšI±ð6ŸÖ4ÁX€ÿŸÒtmΉ[&ø– ò>82 ç8°ô‘^œ¦Få3÷Þèý%ûƒÄ 6 1c¯v%±;DÎ%ó®V¾à˜¸ï3û—‚Qû5[Þ…V"½¸XÑ01°ÖprýãA!¤ww%2¥¤ørÿÿ¾&rgc1Z•yº‹»ÒÇ H­šˆ t€”˜W Í ×ø‚ éð›ÄÏé›`s}‘Ú^¥ "mÂU&ó 3´1äÕ…:•”#KX6¢hºÜ`C‘õb•]¢~ªœ>/¼ë²Áñ yÄ¿Búîoî‹)µl‹K6»|+¦Í ¶€ÃÃL*s‡ÈA 2___e×Ål²efvÅ)ðÈã08×hæ ±jÌȬî+#9AIÅ—A«r3UCÛAXF›ÅWÕúãQ°Q›­n‡b]d/~ÁâG#±iïX°à­ûw”KnÜ‹?:×ζaó= ’nñ¢á /Æ@¥¸ØöYn­±ƒ0]ý ý;†‹S¢åÜháÚ+N)Ðl”ôÀvǃÓ^oÐ^7ÐçñÉ¿b=ˆbd‚l‡Šôp20§ ó:¤QQÑa1‹>«ï¾%îÇ€,µ> Àc»òÉ‘•ræyEΘԇÇXpeâÃJ)kÓ!p𠼊èöŒcÕØlíÀ Gº!ÔU*fæ(ðƒ(G²^Ãog$;:ìâíØ‰y#mï\9°£çÚº¯lÝ^R`ƒ¨omǵ 4gX âú5Æk Kܧ¦]CnuPÞ£°Y0†MoD¯Z/b† y²êz¶>ú~¾õS·<…^Á´üã¬Ê-}G„PòͲÁñÌŸn»';]z‰›0#qHQŒ©3F5›¡U¤VrîK–—é4¥wpµÇANæsu-ØUú+…>ÓfwZ|1Å¿Iþ –ˆ¿²w ¶‡ú¥Æ‹Tö1ñ8šîâoÆ=–ÛÇ[Ç?žM£!xP5§Bå£}ý ¹ilìMÄ¥!§_Ï2‹î:"{ÎȱAY7¾` ³0F1ÜhÁÆ«“€ñ$ÄXNìŠ.HW ߉‹e!Še òLa5x%ï÷œ›,Ô訣õB ÍTƒ± ØÜ<*~Ú—Á‡tQŒüÐýhÓ?ŠÔžöÞÉ„6b¸‰Cxz“\¶ááJäq5ׄYŸ¹þnuDEènԔϑé^>t"ÜÔB5¨ŠÈ¥ÂpȹÅ8ÌÒ5Œ~´ +w@›™GL†Ho,:‚øÂ#?,AŒš£/½ý¬×X]33¤V[å"æ‚$«1ŸzúUÜGÁ¡%^=h˜¼h‡9ÍP'íúš|°ñ©|IEÖW2—fhxFé[ˆ:JmÄn‚n óÉ`é¨ä$‚Ø)þÌîŒÃW:Hköhþ>[‚tGü@åØM<­Sê¦H 9³Z ¹—ˆXGg­¯àP*Öú Ì[¥Þä)ce–þ¥2ãæ®ËYxáªë+xiA(誈xgbÃáò…ƒç±U©Ž"§ $Òl]¿Ø&RgÙÉEû©ÜÁoÒ¿ëzôîñüAª‡a`(Ê\0) És¤=óvýš¼Þžq¯U0ŸÕ©šú) §A7‡ñÉ—.2@̳þ4ä÷L<ãW«­¡hÓ$’«ìóm±dUy¿MÉ`]½¥“‘«®‘ï ké*êY9ÕU4`Üc ™2)ChjîòüµÓ­e¤Á1B>’ß>¥XjF¡]‰ÝÕlx"U]¨ètVÂÖ‹®·ð0wîRmÆÇ4Töu`žÊÊS.Á1;ØCÙì|©ä ú¦z;T»¹ Ï©\þ ’uAír-Åö[aÛÉàŠµøT®Šs¿§n¿þ?¹zm`®  (’RÞ9‹]¤o3ÕÿžâÁÁ«¼•G]¥ÛVj[I= Ò1ͦ¿§É )ä_±É”ëX+r» Cv„ÂDÌäk-ü1VâŒXD/~_úœÉ‹Áâ3ç}GàäÇ÷ ø¹— [~ÿ|Âî骈¢¶QinhôHÓ‚ƒ,s)#k•’J£€g«Cf×?½ž#B‘Œ£ëæ˜y¡×›–,[°MÌ•\€…NZº03Nˆ…ÇZ²¨§Òë, Jí”äúÔ¡ó y¤ö±<ºW.8ÅçùèÐl-jÒîÚÿŒo½¡ R<ÉÖï3UÓtk²¾GÅ)///äûäü—x•¦þÎñ+-ùãne†cSŽ-S ã®í,(T§ÿŒ÷’GÜ0ôhñ>#ÊO®ECx2¤ÙŒØ/‰|Êß„W4Ňû@LOƒc•ºÜO$3¬Ž“µ‹ÛÔ©ç¾€í ýÃU?!¹Ýȱ5êúõ=gês¹DâŽ;î$ )^ìºå?b–8Õ—¨ÍI1u¤Ú%W{‘@<†Á6ñ·C7ÕÏJfº‰¥Ö‚$qª\¿ƒ2Y§<'VÔÖÏ^³úM i9ÍÇs7šˆæ¢H}IZ m‹=Ú†J¦L'í+ù»ÆŸaëy¿“”¸têIX#«jghË©ãõÛ“± ä}u€=Þ<Àœ6aÄS1õùÆúzo´¡(i†Á_­hTRä /™Ñ×ñNÖU˜ooqxWüJ¸^´ín|Ït–Úd›`)Yž¶Ï‚ÌíÁIP‡ˆ«v†Tõr&C¦ wuGü‡­^dÙ"V~ ²dè›êoÄê,ÆZHFbèÑ¥zäÞ÷‹–cózz‰ÔYÂ2×b|+ÃÕæk9Zä(Y"éNs£³cÔèßø„"Lƒ`ì›QALx‹ù—š³œ»&a†²$½‹H‘üj«Ïc7%ÿNo• ÖQF[Ò¢4‚9‘|’T«µrçë"qÄ>œR€“TªtBܘsâÈ)>©Ã#Y‰¼]œŠ¡&]ò5[2м" ;¹Ç´=þ®gTm°_2Ù‚ˆ·³žšm΢Ó'àeÇ”Ç('fäÅáRè®TJèÞ¢ú â¬ø*»°ó›ø˜0ìÅG§©'»Ìëó¹§ŒÂÑl UïÀ¹±6ëq©:UCqlz¿~·%õÜ:™]6 ïêZÀv¨i6¶#äd¿Ñ‘6‹¦šýMáms{Võü/“éÁ6¢¨ìóïA 8 KNSZ–©>Òz[X£A y¡¡ƒ¥c®žÞ™ýWq{oÞýVòm¨ ŸKÎJZ6¢Ô®xHWùæâ’%ŒŸ e{J]-p¹ë ¤3vhX­NÌcƒ$¯»'¢ñŒ¼Q‡-yŒ¶´¬ÍcèIo|•Oìïc5íÍSœVAŽ2`÷e*±à½'ºî8kµ‡œÃÒÝ•Ùå“q±¥â„,ZLsêþ^ÅÚ×Ä5Ä+ðP­ùd–‚û,ãÄ$8ö»‚eïêçÙùw6®"¿žLª,õüä\ÈÕ£hN1üµ»Ä+Lã‚lËÑõ;D¢(>ª¬áÏ3§Œ—¼ð¨±Ì¬ŠF‹å ÒkÖgŠò9ik~±½¦ñ¿ÿƺJRåk O N M)s&ù@¹7a*ˆ½³øTuÝil3’ P,£>ü¯ª,ïºÁÇi’眚’lC.9Gò]™n«iÙÙWMºRíÿdZOR\ÕüËü›ÞÛœ¢øbàYÍ„·ÖšVžñ«ïjÌ?05z~Gí4çúæÑù‹Mo†F»yñ†£´q—“M "© ;{¢…‚/®n¬“ÁÕ¼•«@Y):E_Á'’P•Ö™³VŠÛówÕ™á›SŽFÃ/†ì ù¾.q¨8‚e°„Û]Ø{Þ`™“­îM5'£ªo~{‹×b€–×~û-â ]Y7G¡ÍðãZ;Ëž™»èÐ~8Æ/£`ãf‘W-ÿãD¡Ï™]Ÿsœ¢ÞEDVëžy`©ì^o‹ÀíŸ$/Æ¿íWK0Ρ{±…ÝHÇ^‰ªç¨ÈB²©‡³æc­ÝÕ"]°Q¦—­^2ž‹O\_‘+C¹Ær>Ñ€ÎZDÕ褔D0ÁÅ4Z9`@gkæä„ ü€Hr$T¼gâ¦~íÛïC]4éYóÏbGâ¹êKÆ™6wéÌáüX)ñŽ)µÚO2•O–<¡µHœÈ¢~’ÚC—½,ÑŧÀ d8Äö±Î^Ç‹¨ nÏ;t"ÍýS*°ˆÀ|%–Œ±p™“Â_'rÎHCFµ;‘ ¹“¶™Cùkê÷Á56ñØvõ‡²µG²´~:çÌÂ!4$Ùé?ýè‰ØßŸWb"Íö&:KÐö%0C_MB.ƒDMq6+‹ì×îä mÃÁ›®Îà5Ò$Œ¸zzÞ-¼‘P¤`ÝT“.ëêáVB$â¶©>¨ß! lxÞ^p½'¨1¶¡G,Š_™ŠèáþïΨ³"Ö¯=»ÄИ¬–þ©"aZ4­“Ðmœ@p ‡¨øfÞÒ‰\Aê_Ö“j%饉æý–@N‚ØÏ‚fn¦ô ‘‹ËUÎWÔMÛšà|áMt“ZjðšégÔ}R pòfâÞÙ×R÷I± X&¾,{ßèÓirB }šöuËÄݯ™ÈÓ³–Ÿ_މŒûnâ¥vft¬² STÄ‹—ºçžzûD!Öü>¥|‚oâ…M“‚ÑF  ÕЃÀÉæ='#‘$VfIK#¯?‘ÆH„ŸŒççF2‘‡ §Œ++$‰lAdžKŸ:Éã756`»Î! K¡ÄLe33{èšwä_+o‘ \9lA²äíŸùt®úq±E>‡j6TÑú꾫†®.¦¤üKÉ¿¼ã~aLDZà´kîH¶ø²Õ.«ÉårÙåK®‹½¤ë×ñ.©˜lýAÉ4Šeb%.y~Õ-Æ=&p‰!ŽÉ[°r¾Þø›&çÅÍÅàÂ,Sˆ†€ˆ5Ë¿LûÃǼälâ¥î K’ïøÖDç¨Ú’+ØÎÚw}µAÊb®uZ:ØÔš%ëp'Åß‹õÚà±Çæç¶îì1 ’éF 8 ЗYг E>oIæµo[§ÙCγ‚¥šAýéI¦1¬çÕOþ|­—\%ÿÊ HcŒ†ÌoÄneu‚}¾£Ëà ãf`,KÆ™ÆèÛ¦ÕœƒÓCâW ‘Ç^Ն픿2ªœ"Iž)˜ÄÎ Ä()†‚ú)æèFsÔëH¾ ÍÓ¸MîFdYâÐÔQ• ³b_ÌEaÂ8ä€%*¸;y£Mà¾}æÂkshj”Gâ}ˆ¤n·äL1ÙÂ!±TQË•$„#hÌñ%øKyð\^¸ns/‘Ï™Öʇ¿ØÝþX<º‰^þ-#~‡žŠ&qŸ˜×ããøÒz—¿•ÉBÖS$óP\íI¦?“Dʯ»B2ñðdCœMp0F¹åq##ž6¶?Æ6ÓN¹ ì¢Â¬v\é”ùmùî"Š{Ó׳`Ô¸hþh¢åqžÄaKíF5Í)ÁbMYØ5W\°µÝ*}×±T>fQSÎÄGA7ù|#™e©"2jõ Árè%Êä¨GñxÀì,Ô­ ¿lìôRh êÙ©Š!Ë­»j†ˆîãN 칦@)ÕPëfë2ú™x˜<Ê¿ú™ÎN&¸œçó.~1ÞeO餆&Nxd«£y~Xbßö%¨½ÕåHu1럓òW’6!Ày£w;ÖñеÌDZ×Ú¿­º…*­3TŸ6éÁ#ñß>¤Y¬~­¸`¥æKÞº·ˆ¿gTŸlå‘E.ñ„á§½5¶ÓçäëÜñ ×<>¹˜zF!üÅ=X‘\¥v.9ÌNþ¹#èãAÉ–ÞÉ_çJ¡&3tÕÕãå—(0nÖë[‘Š“O‘ô:ÿ©Ö˜}WŸá³)˜ïÄä‰^§#ÊÙ \ü9ÒÈÁ\¨_ºÐcfÚL°ááÃ^Uœ©BñÁ‚3Âjún)Gê¹§ˆ[ 5#L|çÓáb]"É&‘츖N¸Éì"ÎÎwa™$w¢`¸k”W}ÕGlÿI;=TC“î[§·óJBÃâ Åʵ£åŸ‡ìTUØëì3ìACÞÃ>"ŸVæ×¶Ó¸W|[Z4Ù³†TjøK\xÍ™=©ìžc| ëI3 _±s­}Im©ÿã–!h©"86_3œ’©ð?e§œn½Š¶¿.ŠG6þê ‰¬‰; ÎXå€HO²¹ÇKäVÀÕäçLn1û7¬ÊÀ‡HK»—]zQcüþïßëßž¬Ê©•™C_¨“FÓŸÔ3;Ç"ÖÚ°^(^Y= Ÿ¶¶öM²-÷,Y”_bƒ6%¥I¡K‘qVQL3‰EIdíó6·û+ñ¯+Îrü„ML¡&™jàsÞV1’ ñ߬º»9HßG5ª©Ô½Ëf¼Eò¤ˆäŠ—|ø2ù‰q§›ñf!NÅž­J"'j4³\_ij½B¦±lpÂ’@ÎNÞµ+¨UšÂÍnÊ‚–ž,Cš3® sVÂpWÔ?“Ô€åï´ys,›^GßH*È5®ÇÓÇÏÕ×îjñ±.%Q‰5ýƃG¬H gÄ?kä#þ/H8ïá\Á”›0²£äOD_©k)ú¾$PY¿fâb-hRKGýË{‰6AÖ<$7±Çð…8œ”Ř*D%… a»á }‡¾4Å Ê¿ôüø]%æÝBe5žÑ°£×ÀŒÄÔó|çÿÞ¼+†¶(çÜ^ c©µhâÉØ×u±lm¬±¦+žFÃNWàõæúƒb(TúË+Õ¥ÿ4ùrç“l†Ïš‹kg›™%SMa‰þ@e¢JÄ¢zÜ$kw©ÎÓ¥ KbNåÑyƒ¦>¡N’–v§Äà ÄŒÆpLN¸wÖ„p¾¨J·Ð[e{ó1q«ýgœ@B ë1”ärq::uÈ: BLDÎu:Ë$ÈÔ”x£xB¡jŽê‘·ÍDœž8 õëuw9XeA¿YÖ¶‰‹ÉìÖï-wørQm %³<´<1`ÆëýkíK_—ÜÒg«-‹Ñt(Æ{éÏ·kn7¬®1»šŠõG¡K oR&å n(g³WKÅÕ$­©Vc <™/ö^ã—òdMÃZùèHnrƒàB}­­‘p›E5(­È"|i²5,uo=‚ùm ÜÊzf²¢ì2³ Uå¿>Â7Ò!À0JˆiâÅÝ@̽aчœ=äÓ]»»è#X B")| ˜«08¨õ‚? Ô«AR4/眜÷ÆßÌzSU’vß|=ÏTyƨé s–‰±+ü†Úçy<×aÛá  òjÚ×j{M:[ä+„Áã{Âþ-‘×€ ð…¬6rùJ$£d^ë–Ù2M ^¤÷¹>ú’d\[NINOi¶ öÝW:.êMôçÛç¶Ç²ó99a^Ib¾²†&* Rx2,WÅ8y"wŽöÇ‘`ì‘Ô€üÒGã­L¡É[äÒ0pSš±Ôh¦™°Ù¬'2\'_³izÀ¸7¸/¶× zT¥63xÉÐçVÅ»5 G«Ýåkwêó„SýQ0«ú|ÃÍ)E¶öWñ±âókœU•èö݉*‹¯ICeoË›p—t†™+Já6Âvƒbkx›Y¨Á²hž ®.3Tð”6ÖD¼h @µ¶§ˆf½Ð Ž3%ó“-á~¨ÙhëZÇþPâ`6}éÓb½Ú0`˜fßC»ÿCGÀo?ç‚lÄB“¿Äz±Þ‘zBmFµt-„n“ü\ ¼¡’o ÊxÙÌâ„Bé÷\çÏŒKR7=±X°º¦¾‰U3öꑆùœZv©0ßzé/ü#Ë*B²îåàUö çµ6ì@ÜÁ­4‡üƒò°=’uÊYŽ#¤•jœ‘¾— "ŠÝ«½S÷´ÖÅ,ÔV*mü8ç0Âü%¥ä¼}Å_aÆ–¿–vžÝ¸>Q ßDìWz°uÊ‘ˆIò@ó›ÍŒÕ;‰ódšá#'ù¹_?ƒwæ”9¨ix)òå}¾îÇçâóÚëpÉœ¸º­·Ž67]ø_ŸÈ¤Ò¯²½œÐEÒ1Õð­÷[Qzà@Ý ñßzº†Þ¡{º¡‰'|€y¿çú:qïÿì»M*é’°§¦Ë vñ&%O‹³Ù-Ùm¿8r÷‘ò”åøÒšŠMÝ̺f4U³÷ [–HÕ¥,5;EìH§ûFÒeô«¦n"çíÍâßàÖ«×Ý1˜Ÿû*7ß²Îkí«ñ¬ß–9J|¥ëp^¢ÎyͰVŒ;pGó ÷ùT-ª9žZr_æžh,ŸPÍôŸbC峄\)6Á‚Ë|âu¹Ø—›z"(¢”/ÈÁlòu÷¡ßžF&_M?ÛÀýmžðÙ$ކ%E’‘gx0R¨©ÒÓ/“eŠíGO~˘B¥ ÷~,.,Ý aŒù,[r0I¹‰Ÿîäã²s£©U’#ˆŠqzîâçG=Ì~”¸~'—œÇœÎó:ëÚÐ%[ì功$^­š¡æí£SŽUp¯cÐWÍí)c®ÙuöAbî2}Ü]7’J¡ßÝXãKçQ¹ê"e½Á& ð û2 ©é¨å›²z€;º©5%Rù;Ÿ¤ë&….<éFM„B+AÒ•£9Ä“‘k>ahN‡±b÷4n1FëJ=ôÝœIYÛ© ÛM&åâß¡P®‡LÜïeËeòý:<[U°T0\2µ>Y½ÑÁ,¸„dõäÙàœŽ ñ<ÜN³á)oº¨‘|ÚýÃ1wv¸.0˜WľšÞÜ>Š ™ŠòÃé)þ"–榲¤‡¬?ð,àï½-L>°lŠnÒÇ]ªd!Ô–ªm£6±—vsÝŸ'jäÉ&Wš8âfjé‹•³Lç+"ƒ)ËgûR¥ NN à@w)ìÌœÞêˆùÜqª˜¡‚ÔG­Ý¢&0M¬’Ç Åo?ëLý]˜o3sŒ{ˆ}”«T%DÔ‚syÞçÇ0£Œàx q{}˜˜˜žõõ­~sž¶à ܂ʭ$§çȹ,ŽF4j¨6Z`ŽNh¸-'¤ý"äpÕ L±èi9= õ€F•Ì3b7è z#6Î*Ì4‘é=ðút­¡Ü`Vá| KÒõ€¸Ésú 1µ…¶Éšæ×”ë]ŒÖÀ(}Ô‹ÏÜ»ÝEdm Äðn訄(÷¹gÙ9‚@›Ü<ùï©ßQ60 öDPéŠê/ŽÿKÚ¸ö:úY'þKÁsêÂ*yŒòOxNRÊ':-îÿGíø]׳¥Š–2Õ§ôiñSƒEH¿øvß½ØøDñ,l*[Ë`¿aÕ+íWÏ…o„KAG¾P˜•h¾ä.g–GÓñ¯ó÷ë€öâ|/Þå|‰J^SÆfe?Õ Æ¤¼WU]¥r¸@;·ÄANüº8“ôN5 rS/,øƒåá°n ½Kɨi™Ly:­Ú ì>2·ô*tg¤5̇–S<+1µ_mÊH«ÛœLޝNÄrØxSsƒ\©è °/ؼÆÛŹí6?ÊûQº¥ª¾t£}¨¼É9ôÂ÷®o"Zå¯F²ü¼"òûKPWA·;#ËŽÂH1°dGqÅ"T§© ¬5Ô@犗ú žªÑÌÎ7—ë™JS$,4\Œ•¦ ì+SŠè‘<˜mSÕSuYzµØš«‰'R_>Íz$œ¢žúWúŒüâFcßt_“­â†ëµj1Ϫ«*•Y3]²XŠ™d!A/gmû /TCÉRhVÞ^„0LËa¡Ò{ÙÀ„Û·{MiºIgÕ…S? ;ló'Öî²ëÝï‘â´¡Á뗙ƩJJÚëòs±v¸OæÆ^^Þ`g£×Ìj¶@71 ü‹ÌeÐ$e‡Ò ^<ü²ñ`y,¥nèF|ïœ?=süÖkT¾‹ü{xV GI/«ü' ¤&4Q]‚=Lwy|¢ë_–7Ç‚åo×ïÙððª:¢Î™ÑÓÐ-3ÒBMó[YxrÞ ÖȉˆôeÏ4«µÏ“ÄŒpžð@Ž»NeŽüÐÝß-lCŠ‹È…½ŒVr±š«Ncœ¶©µAww9&‰)nh¸ÅžøêŽ'T厈xn>iêc·ïÒSL=“óa gwôø »Ù­£®)|p ¹Å^ÖI½Ñ˜ÞqàåbŸåyåÕª»íIŒ—™ûw†plèµ™Šuc™‰J“Løid ¦wC£«Žm!m§mÒüWž“m JÛÄÀŠj}Å}×ä{ß±"›v’À¥ëTø¹Í(l¨QÆlôÒÍ5¶kX–Bí÷-õÿäÏq7C-ÿ(ÃÙÛ·¹”Ñø#ƒ½Ÿ3%Þ‘Øho4ùÛ% OÁ¤ÃGÙ %bµí9)ØþLÝ÷å'o+PQèçŒg€þsznZ½Í2w}_¯„÷ú/a4æ©Ft<ší•¼Ÿu PH*c¶ËÜ™s­Lúñ Jøû‹·¯4Wg8BFãA%WߦùlñÉ_éH÷õÀÀL[†nõ,Š/ŒOÒÂŒúk,¤¤«Ât–Ù€ÜÓYjÊB“q†]¸AeœÂ$ûB^ZÅgº¸Âß{˜ÎÑ2#2à“ñ´ùòY×Bݺ„ù¾–Fši.ǧ®àý³8e¢ò_v€ÿc0$ºÃÓZQhÃÝÌc"ô ¶ °­wOæxgÊN$š/Ñ&õMoœªK²T˜Ä⧘aÔfZûrÉòð³8B›vS¯pêz£S½€£7)”W($_¿öÜÛ‚…UÄlü hò#¸ôÒçs ùÖÓSC²U±Þ‹‘sy¤úœ3k'ºö'ë±)übÎE@±ýYI_ÈÖÃ’ ¢Œ^{¯éQ/­J 嚎舛 sPÑMšu>Å$«°Fø^f_† s”æÁ×jÉKcóQhY¸Ë"˜ÅÓŽ¸_o4ðäp—)» šì¢‹m>ïfö´¤[ÓëÚȇ„`‰_I&É·øòóýÉE׋x·‰ìûi¯€v&CáÄB²!ŸÎ& ÓæŒ2Xë³¼K’÷¬Ú Äæ\~ ©ûeUBÌSÈЉ…ãч4æ¹N |Ï`ÕÈÀI±%¥>¦Ôžšo2)åh‰êšã§o H:xUŠ­rº§q3K ëæ1ŠÜR#ŒäçU:{âЈ§\5üaéwUˆ†)æ!Jj˜ÆŠ8¿9ì¢Z5䨅a:†Z™ìÉ-.ÂüX£ÙáÁ¿©^/Ì?|sã@ t{64%bGðÝÎkÊŒ4ùŽ:Þsåßó×’éÁ®;æhà˜â™5—½é»G®´-`Ö`Mc Úÿ"Ó)i£ü1®§ù¢Á?Û¤ˆb‹PIíM,£à^¤?Aðce›¹Beò§t¥‘Ò€—D#󉻜*»pn ê’šl»ô¹Á.VæÝŽÃ$ A¨Åî@‰ƒèðysqSŠwìi_Ñ“Â=Ü˲5WfíBxÉU"°€°,_KæBëF ñ¶¢§3¿å&ŽOšè€Œõúø“&'é"Á-rˆ”ŽÛUpÄ8Ǥz Üfdˆ±Ÿ^"$ùÇ<Жhˆù—Å!I:Úçòê¾”ªŽeŽ\?•-¹±ë†mò&Ë¥®z Ï\7gÊCg5“ ö•hFäÉ/©÷TåvÕóÑͯíÃQQÂ6–sH—‚ålv¨ ¡¡fºµÈð1Ïð@Äݡ٬A| –ýZeÕìðdqb5`xÒ¬è7VÞò€kÍ) úoÁ¸¡^`1øUÂIªý1õ¥Ù¾¡ÃÖ×§DÈ'Ü»ñ{Q¿‹ö €!¸5sX2(±uÕ×$;_×ײ>¥|ë±üPè.ÖœFú&ì0¯Wùù-êR-2sŒ–¿âº‘èUJy˜%]þB³Â!3Èxõ8O¦[PÞÎp‰fø_å5šï¨,ñˆÙ5¢Ù) ÂhÚÐ’\cJ@›e!£;‡ZU2 õŸHØ=.Å ìišV†ÇHÒ‹&L’›¤­b Û×ì#™è•&€Òûÿ¬X?S­&¡•í ?Ôƒ«!æ)穤6ìrAhA S ¹´ä~äz-á?É‹^fÖdÃYg8£ÊþiÛØ,ev@álPJ*1©V>V,B²ïcˆqMûzP¦$[™•ÍüÉàd.ÛIcz*'$oÓ®íQk¥ d ŸµåY.ž¯ç%-]ÉdÃÇÓY7Éžƒ°úUÊ÷Èx’Q÷õÆ#•!™{ %˜J›j3ÝÞ¸{rT gHô8èmÏ:dG†Bó-E`K6m•ß5ÕÓp¥.F¹”C>Ì1° æ‹Ûïù¡78ΘKÏFzøº¾èÛS±Á^HZW©Ñ¥Õ·©>ó·=ð:Â17ÎÊ«•sb,èìhö£q$è~IbNäîFpÑåQX€$&Ò³´ËßJ)¹JJ镚¾ÒHZUsÃóÔ-Û …¢˜r?^@â)ï.m:ªz'.¯§¦ÝîËþd¸‚)§¨ ¼BÞàzój[ïF²ûØCšÑTóï%JàzSø“IveûMû·×Û½zÆ=;”â€zÚ“Þh‹yÞF ‚ƒY­¬qžJÈy'Ãõˆ‘þ6œ±=$”}ý¥¾|”@¬nN5ÐìÏ$ølPïÊ€_ð¾÷X¾¾ÊÏä9âsM3Žô–ÿΩ†ø]àÜžì0SåóæÎî±ë5Oã}™ ^K*yU¡üþszøRæ…å~s'ëI [»ëHÏ—cª»ìÒÂ*†fçêðßGy~injÖæwF•{‰ÃR-üö$'n¢¯ÍŸÁÑ*–İQ¡3^× «B4RûkWlø3¨ä‰¡&×ÅššEzÖþ¤ý¨N~Íè}šQ#êrî~s9¼$KØÏ:ÞßìÖ¦h¥N lpíâ²;wfWB2 äÎ ˆ=*¾‰ÓiŒ|=:Ú~ð,Ýšc'·‡Ïëé½®j²¬7Q(o¶aލûå)Z€+·Ý“JÇ6^pæ(j%µO–j!º†]b`dݳCM³+Æáéù›øÁmŒañ1±Èu.©/°ŠÙSß&+m˜sù^1æ†ëjjûRð¦"û‡‚×1–­ò+–°Yxøúky‚PË’WO}»¼Ï´4ÊRPÀÌ•Êëñ)\™ ÆÙ¥S˜¥wòå¢ï<̺~¥?>²(†…Ø#œŸtÞ,b'B’°¿,]xPk¯ÉÿàÚbã6^gáÞ÷ó{µy ¦îÝf”vÙ{•¼Z§ jüÛâÊY6{µÁ‹åá2Üáí\Ê èÆÌ¼’¦æ4ƒ6º¼ü$¡AÙЗ O}[æWüù“èæ>NBz rôü[c»$éHº‰+‘,!l1Vƒ:¯yäÜó;ZœHÉgju#no_Á@ßø‡œaS–†1¨,/ÙRfF²k}Sð ;5ÓfÃ7¹\—F£4Þ9×ø®d.uèOFcyà-'8 ÝÔˆøyF,Wûx'J\ùbó«hŠ~üôJ£Ï6ˆ|­%°ê7F†W7ÕÏr@)眛@ÆYËç² %RÏo¹à°,Ã3M§Ý›Tb'2QšÎ³/[×·Ûüõ£®"9çõÜrÝ :¼-ù”þ³PùÖYµx_cØj4ÜêŽxÌìdŸ£Âs¥¹}ø‘ÁœšÙë#idl†ì¡ZnÂàWÉô²)Ô¼S1 ¨5„˜BQ @ï\3§ù –‚ãEµöµŠ& Ï•w™>(hJ0ZÕ€u|aŸMf¤—æ‡dÔ6 m¿ƒ¢hSø›Ù€¬á­(Æc2¬²8¥n£ô?@bÄŸ;s/r=5•ºýú¡³´bÏÍÕÛ',zŠ£_ìŸÐœjí›äÝ;qì•x.Q‘îÿײ”T;½6^}è&m#@n|¸Xö/á>¢v £ùîQ²'βӽõП¿LË3zÞù{ýýŽï8ô›Ck¢¬knoåòí{!9\:„%M½I—esLì‚uª Ô“ÝÚ†­i.DW+rW¬è Vê9ÉCÎ?î¸)ÔuŠŒ²Ú¡‰½og•Ã…z3e¶®š`œä¯1=ýÄYÅR$÷k’vر‚øÝïFVÕTìˆd=¢Ãs{AŽ» ç‡%¯?¯¸kÅ'bñ¹¶Œ¥Vy‚"< ÿßÕòMÕ‹_çÙÝMˆ7ìP@˜y§_SE?%PWÕkN{ =¥«H!äªâ¢¦ŸOö—@JP/KªZ)Ü_u+g€ 5ºÍcÜÁ À¶aR_W .hêæŠ¦hMp›>¼J Rõð@Í••~‚íE;„}ÌÊ ü€ŠÍá?3ÊoHäSUk,.0iîMJï ¶”‡¬¼¿úñùªãð22pá’_äí1!Ä/—éK#t1YP廪Œ~¬‘·(+i¶ÂµlÆ®ÄêTi䦗ä~ç!òãê'ž[áOñ‰*ùpJRÔ?Hkï'rØK6±W9bg{õè¹AÝ2o¿ì³(;ùÝò’ã,7Áõ”—øp¢ ‡õYIwðÿ¯œªOÂáÎ×ûKg ~tÌþT6ðÀr Ý]*Y9ˆeâB~`8ši¶æ’ ?̳™šW¦Úk7õ)Y¿fmyWzÛ“p´usòOeº¹7ÃÚåð*ÃöýΛ»bU}µï¬7ѽO’¯¨FþÚëS’Õ¤¥Ø³1IÀR†–FµÈ’£ëÀ¼egôÀ˜Ûóÿ'ÉòÊŸý÷ŹR·B]›=Çä%e±– m͆0`¬ré‹ÙÁ¹aȱGî1=Zz#SòCôp q8®‚£ÚQö)Sq :Ã|'y¼Å$ÕfóAá#FÚµ¾e-ùcö9“¨Ëòä âÏdvÈ~²¢R¥´+dsuyw¥‹Ü.ì/g2§¥JN²Á¾˜öâK¯M‡¼ºÁâÚà9 Â᥇b+ô:»ì xÙ.öÁÛ^j“ ?`ˆt*xó/˜Æè9ÂãBÚèÆmôgÕjÍIë6tƒt͉n~®èT±ù° â/Ô_¹[^ÉßU.`)å§ ".NfŸ®ÉeìíKõRX y}Ohg½†4¿u«³=Iäл¯åKe§Á‘†eRa|×ÅTtÿ¬üAÇr„"cZ„“™²‘åÍýb×=ÀËð‘mBÿ6Óùæ/°íA'~f!ÍÎFÂ`·ÈU7ïåðTõ¢sógâ¾ká-hZæ<[sOÇOÅ‘bhÖCæ§+ò°6!©ª@§ Š*ÙJwõ¤ÃRïë˜9t]ŸÌÎOé|¡tí7³%!kb¼ézâm}â}?y0öw8…­W? &²'-Vuä­]­…fÞ§=£Ò}­;-ÈUÑþ2°¥–ýE%í¦qàaÉpnäõªÔÒdŸaÓèaþDî[O\~ØÚÖÇ& ÿÄpt)–Š…ñlZ‹ëb?dÊ!\do|u}ÞLe§^Fdž² VàÙ½P“eÎÙn ŽÆ4²“iß7ݸ¿9Ëž¬çiâÆŽ#ÃoH6è7»ÑÚp#ó’Ó™Ôõþ9ë‰5zÂ$η/Å…P€\Zmb à‰ÖÑ?”Lžú€áQ9Ñ×%ý¸~.,昋ëò55K{Ì3 Vv*?“í™ãØß“±ûLÓÆñˆð^QƒbG[ ®®6ó®ßÜMóGpåuñéR:O"÷v>Uø4@î¼÷Ø“¬øx]DêZúêÊØÖç âs«F+ºáö&Ó·Ÿäk Ì jYØ÷ÚŒ!Ô¨§ÖÈàüR†ˆy4aØóÏLëpjý½Uv7hgMY/cnvV¬!u•<ù\A5CtJ!—Š(8©+•éü!tãVì$0ÊɳՆ¾¾ä||SEáš1ŠÇ—pÒóQg'ôàê©8”†SÄR "ŒÞ2¢Ìì@œ}‘̳h3éû²þlcDkŽÑs$G‹’“¬Œ lÓ Å89ÿ»ô@'ß­ƒÔPw&ߘiäþ3“Çj—|€xͤS%òOWô‰®íWý•óFT‰k?öxL%tŸ°fžä‚YŽL)£A︳»ïWp·¶nÏT÷Y™÷EÝ d…|d2’iª˜vÍBž·íúW\Ìcl9ý°TSe„QDš+ÝÎ’üÏíõšÙ|3îG´V,º^/ñî¦F¨SÔõrÆ£Í8áM5j?âPó¢åˆ™xþ› :ÿÛ]_ÈÊ–jZUÂ’6tÜ&R(«ýß%ý Ë~9«®*ˆËôš?3’g÷DpÍîFÙ­½M“¸Fãú‰ûøêjÞ"þÒ¢úHîeE‰¯'9ICä#½ÞFù”ãr¥½íÕ·tnÌ]ŽiA¥‘´TÃ^â"™ˆ|¡¥ýNZîGJzœ–ñ›dYay"¢Ñˆ¤Ç>ƒ;²Þ¡Q^k³P#iq¯7¡Óºët»Ej.’‹: Ëä•Ö²e:Üäû·ÛƒÃ‚9+‰ó&ª÷ò•Z–)ÝÉ/eU DlýtþùS€§-šv¼Õ±¡dnÂMñnõ¨¸mSÿBû¾™mTËù£EVH†jʶ˜€Ð¿M¾½FÓŒ²ü^!t`Ši\ y³Ë¿7ˆßé!pÓzBTšå‘ú¼°“É-1ÁÊ  ¦3îüpÿ†Ï>sLÑ l\9ç¡Ý–÷QÓù@õ:xlÕö6™‹Í8脾²ô•±Z§žÂ™î†D„Ç ‘ktÄášWS—Ï3mÃp_Pœ‰<М^c–ZQ¯évUeñ÷üõ#À3 KŠ«1–ØÈ§=ŸbQ£heãP¿ºª¿i9Ê"À 8¿É—`…~ 7ì#æ+#-¶{ŽsE"É©Éõ%z”?==G›[ ÃcË}û r8Ð_=ˆGò&%…V¯Ó[?tsÏ`&‰Ù=&ÄŽÀ)žA4 [¶7‡³q:Ï7ÎÅc?Ý’Äðr IyŸxÀ4x‡ÅJô¿Ofï%ÄȘnéËD"W ƒá¶7‹°Ùð±$$7ððŽµ²|Yn&Ëø Ùêï^Ó.É”À;¤…Óž7QcÓø¡‰þˆwW‡Ÿžë)ƒk+—ÉMÅñ³½8Þ¦óë÷a`õÜoø¥j\$ã¨Ç\d=vSmÂF3-5r¤HG‹S6ý”ÖÍÑëewÍ7“…Ë&vÖB¹W t\ËÔÌa4€µ¾}uñ«>FXµiãûlhÌ¥‰g#»EP”Tè2CDä=&pÌC÷á«k‰Ü6il[bfMhæKFi¨‘€¤Ns¬O ŒÐ+£«ìÕ}Á½Hå¾Üï$Å»ÒòÃPo8-/]Ä2aÃÀòu¸ŽˆÛKT1;oF—!ËFÝ/õªJŸÚ&vnñlë‡|=ù,†£dh**Ó˜‚&©OIŒÆù!R£/¿œrE·Z,”“1\c€ù¥ö`2¢*YT+H_ëNkšZ!“Õ1ìÇ5Ë­»Wù<6ÚÁyÙšôsZøøq·sú@oÛ¬ž²U;öX—s©S¶ÍL& ÿÿÖih‰üc[š?&Àç ñypÕ>˜´{d·Ð1N9™Â÷6AeÕ¯úgÊ%™–™°2tZ¢8’L£r{oêÙ¡ùÄÅ–ö€í|<†ðµ._Í8Ñw¦†.N+Ôd£zZ<´» 4¥a'À0pÇáì’¢p…5ŠŸ²/•éeæ ¥ê¤ý6û ¯W$‚‡àÍÖà]blÇî^ÇcîÇ´üÞT¿@™¡Žæƒ°Á‘¯mìð–ÎáT3åäˆç¬5)ÌäÇ³È HU‡²åO "Aq¨†C”sV´oJF…‰,5¢ß_‰ôÉRó5è`W¬VZ‘—–~$Ôû7óÄ) ·a¯„*Â#$ÊäDqÕ“?·YOEY‡ éwPâ g€yÎ#üE6Œn]š§4Ž O{¶qûÀ Og¨ÐNs)ðu~_á¬ÿãÜFûÿÒ§qÀv²ª¡î·Ÿ¹ÃÁdÈÆœšÅ^*ëZ$[“Åj,<_op[ì¹ì?4‹6öÈ —ŠúékT¾ýtæ-1¯@è@8-ïZ†ã««nrZnP•°ŒGByZ 2UU¦nvW¯¤â‘¾±¸\°Š­ß¯˜9¤bÊh¬ýøŒ¶ô¶$ ôXÉVÔëê¬ü®€DÙ,£Æ€˜5´£}®Oé]}ðwʧ˜Ö+h3}ÿ· K©W¶¡E§“y,Ù–Íé7VX1’Ťr ËÄœàfÜå¡ÚǤ¤È¤tŽ}O&$Beêi˜¡Á6x/nîNv2¥Æo¢sG³Z#wÔ°aéZx¾I—?Ø„˜ÞP›Í9kìíµ¼1÷ãx™³ázƒ­-»àF6¤åû«îã¾<¹ Â#Þ[•3X—mfÈúÆ¢Ý ®ÛY+xŠ]§{¬Šbè .Õú Ӯɹ,{D¶Â¨[aÎU|Ë´q™Ó£¼ïºÒÁïÉΰ›6ŒÜॠ}ìdV­Ñ)]„–hü u§—ØÊxV¶§£ŠóJÝrغÆP¼XGë[ó*ëF„â2 fOàËÙTlÃ0¿7#ú4²!yòôÛkuÈ íK ª«YÍù­“@›±yo}Lϰ!0n’ùÿè—!{îA×M¿pk¸Í¼a¥úžÿK LJL%Xù¶/¿ ‘f“,´Ð=~½»  å%SJgÿŒžo/|&wÚ ²óyWH[ß/½ ¬UPOf륄 ¶û1׺§ÀšL¥ âÑ,J<Ýàx"n‚ˆÊÌ#²ðÈ Ÿ8sÖ58Rq¨™cÊ Ê>S°a'‘¼‡ÂCx³æÇéµÞ[ÜŇÝ.æzK–çï»ÿ Êy"¨á2só啬t\ÇÄD„o}ú²ÜH6Ýù#o(Ëæg#ˆÂÒu3(G»Bd­_¸Û£ñìÝå}½™uÚò8D"„ƒÉGUì‹b%*”¤îE WZjc£Å•ä_D{îRIܨ†,ÈßëM•ßÜp±°áO78Öµ¹¸«8BsGŸšZàw9Ì.ÒfËüá^yÀv6žçñW%{ÙüÇ¥u¶×‡%ãKg…ål<Ë55P)t"Fˆ…™ã"Æ)·)'žÎã¿ãRØËƒˆ²ð©Ÿþí>¯*_J*\† A‡Åפğ—¨:‚òNº;gžõÔè^n81š$Ð&ŠIb5KÎ ©%˜bs…î KÉÏ\³E˜L‹ûFé7VŒò‚ ÓÉ7uãôáÂG*¤ÖÙµ™•Œ£Ü¥Q«rJN6»Ûê•(zÚ•ìx»cî öÀsBChܰQ ŒjÍ‘uWrX7äŸýJ¢sdV¯—ä5Mޱ¡ƒC©ª6°ßÀ„桞eT®‰—’Ìá5„oúqøö6¡ß¨Â$漩XxGŒ\\°f»çzÏ =í•鸞€´¨X@›« É0Ñ” ¹#Ϋ…uv#'ÈøÍöí)¶ ¥cb‚êòísF¬ü3¬ÞD5Ï{ ±üñ¹à’âp‰6Õ¸Šé4’ü{aÑùÛˆ¤ S,ÏÃ"± …#Xå2"Pf}æ/¥»Ú¤ž.`#ëÉäø…D_XÅ ½¨cºø¾æš‘Þåt–àNpó¯ò:gs˜Õ@»üËÈ}Êíý•ïËRgºÑŒ9ýw’Œ“ö‰-÷K"<Ÿu²•OûjŲ-–xú6”F‘­ÇLJŽËµ å?4£Ùæ‘.eóœÎ#‘H˜!S(Ƕ!Yª3‹½¦°ÅÇx¼)ÑY9ÍÐ)»µ¯eªÛOƒFˆËÞGk„e2È‚Z¡¹¨ö9¬¯¼¿šéq6 `÷¨PË™-¨½.Ô$bÍí8ÓYÒu´O–X2CÏâèLÂëÝ1×GQÐßú«Þ4r‰¾üŠMƒíÅ;×D;IŸ2àð$¦clPÔss×b+0žÚ4þo Éx:BîZö”÷E­hÚiÓ¢a‰ààhfž†½Sh*ö#G¯-’4NÆÈ»—É\F¡ôñ§ÒèÁ…ŽÜÂ=ñ&¿B}îöGÆ¿}àeë"_?jäfÈèIDpkFíwaÉ=³ƒm³ä© ¬¨e¡ÍØÑ<\TdÃdÙ Ç[• êÁ7hùƒK9Â|ÍœMaÚMJ¹¶Ÿm¹Å¡®xÍX`6ÄŽ#=­î¶0_)‘Ùzºqð¥Í&17ß)Ó›n®óT>ûáYvþv(&AªÑØûA ~iº³JàBòÊ2ä¸+{ùzßïëÕbr£9\Y¼á$‰¨>˜%„(Õì¸~#y¨ÈêÈN›7á ;†àÖêŽvng5eèæ‰•ñUŃÅEE:e˜oWŽþ@ý bœ ÇÉI bðM>‡ÑEŸ–I{ÄA@O"®âÇMÍ¥L×Õéÿ˶z/²ÀfÀ’Fâ~ˆNºà†ñ\qQ_¢q™Il™Ÿðž£U‹îÙ£LK5ÒÑ+ܲðù›»bœ8Ä%Ï·8‡Ý“N‹]…Ú¯(9GTO\Ž„šºSR[ÄÁG 3ÌÏ·ú–qvÁZ»§àaL(þþÉÿ”»RƸî§NÌ?aêPNyÅ ê¾~ÂÀôΦzè$×d1&ú5Í^k SU®àÅŠ©¦ÆÝ}‡Ç‹–) ¢JòÉäòÆœ7Pœ1²ÜÎT\° »"7Oµ%hNU´kõq¬æ>¹üàq±¤‘tÿõv%qzí¢Rì|½%þ¡ôvÝ^±«(&IïÃÐCë­,â®AÇû˜"ņíø&So\€â•˜kŸ8Ýê:ô3IÅéÉ f!Ye“»[0OŽ?/b!^4ôfáªRÿ9ÙÞÛtñZÐ2j_žr)DÈoÆýFEú\|yÕ&̇¤Æ`L¿ñ»<Ôk^$쮯Æ??ÚÄIÄ+ØÂ‚à#—XE7²4:ïpÌw£õXä² ¶µ=xô¾„y˜€A`•ÖOq æD‹®ì-{)Š‹h-­·Í©u&y;z®‘sbÀ¯¡MþÉ%eÈÊê¤P²eXáʧ3´Ùó}ØÅ¡ü¡& §]­ÈT?ð“ÿõœ^,Šìò½¥9ýðƵPN‹Tà2­[úÜ 0©t½÷1 SÂóÐ×ÛO/%®<™}H²*6Gqk=‰>Ž.ñ¢SyRñ*>'Žb#¤½RLUnÏ}÷éšn8˜ìöùŸã‹µ“Ô‡ÁKBÿ¼a D£)§Ä9ûOÅngKÇj‚-8–­XîÖ³ö Û/dí½ú'u_H̤¢ºíôÒÈÐ/$ŒÑ<Üke|Z5€|¯L¸Ê1ܯ‰œ3X²HÙë5§”±_3ðgžÁôØ^i>QÐ ^.ºƒ~µ·Ówä°ê3mò»ñYN¯oÉÎ1’Üõ8šeÝ>”ëê.Lç\[_YM€X„dvT‹Ë]úìQñÜÜ ¶P×#îq9˜ÇÓê Û ë"S•=œDæ·¡z?ovm^eì²sO–)·ø Îo®(æªø¢ú¦æ,eÐ‰Ž²×I†é¼¼ÿû·R‘N£h@œfT`)Â……¼ÎjN¯ˆG2…L€“P‡}®Ñ¦@äµÛ‘ï 8$ÜZ6si`Q¨ªQU«î"üµ³«»³Fð[1ŒR­(¶õk±„õ‡3ͯ(²bõÌá0Pzœi$»¢¶q«’îñpêUÕ÷Ì0‡Aõ6ïrFWI_}KÁ\$Vé!D‘sP"ÊT¸Ÿ©6®j‰ª^i/NH÷Í3U!59Ò@ƒ† ǽ~óêi,‡8S÷Ör—†@DÓµ(lÃ××àÃŽž²ñ;ú¡Å‡bö§¥h–¯‚OªŸOÉzùìÓÛ}™Áo˜J ïµ^þ_—‹õ_Fnæ{/dU›p]£XiƒÄ“—Á5‘‹"Üþ—1‚×^sݘqn–aÀì(Éó³ªbÙ›=ܪåçÝèÑÆ¸-J}[í>Èm3ºã¾`& ‰<$åJHÑ)|h_ÄëÔVl£ÑK¹^U±äXÛzú]ÃVMýhT›‰µ¬³¹£ÞPð¾‰@>ZŒ¥N+KÛ ý—Ìñ´1õqí ZÚ¿D`¼œåZx ÷î'¬*;ÅYij'ŽÎ °Jla˜ö"òÍ—6)©&^Ÿ°%APŸœMåa€s¬¶8Ò×áÉg¶Â%A#ËÄ/Iÿ£hV¡£*ƒd0F &´¶^Û#O.XãÁx°ÊùµS}¡6‹§ôÑÚ.¿L²ÞT¼bƒ YUÂ"à„ú™ ©’ä[é£rJ<ÃS {<•¥e›I³0Á¡ðþ¬ ß…®Žg@Jo¾t£ƒ›f‰±ì×9 òØ5F|¡t`ؾ€ë˜>”›“wg) 1!¦Õ$ïn»ô£š,hÃä Îo)½/t`°^2Åò©©±.3Vºdíi`'5° 6r”:Tíu '–¥Çh?îxbAhö¹ ¢‘ö>J(|¿2Î9h.X^C‚‚sQsà|ª°XõMB_²l\­t™ƒòtÍù®Vòpxá"2…jBÁvëpaLCÐ šŸ]Ôà2T0¥Þ¯•cáä³Å@ùÑ,J‹"ñ÷.ËóÝV3ÿéjl G†"&‰e°É8Ê(*ùÕü;ÖL®±ø²ö%~×^”_„Cb?ù<ã¤G­6óba¾ò|ÑmÝÃj†ÈeË+¯TN_¿DsµÔõ¯<cØkÍ{x8Ï…êöc±Š2 ë&Û­8—ÒjÉ@Jø°Ï*$ \9q…† Ða£Qè¦ÞêQŠOôîož¼Ô0’œñæë­qΛªÅn0ÃÃŒÍàdFüíMÍ) Lõh2˃3ÌÿveX*Åp7™‘”gC “œlXLtATò(»3PŸ2; å´¶¿`Æ"ìþÅi9q_uÑ$Â/÷ŠŽ33€dkÜãšÏÊÑW2Ëñ $’æjäÚ”÷ýº(3¸â LÏ>>9pÊ®‚÷².† »ß,ˆË+CØA–‹ýhU\›âñç%M³Í® §\‰îŠœï²ü–)3³ýqöX²<ÏB‰ñ‹T?Vø¼I&^nòýsò`Æ8¾š ¼?tã<û›îepŒa¢.¶mŽvðÇÁŽ ^ÊÞϯîºÉmqÊ¥V(À!ßårdKòÚ{mf¥†)…¿.*û%:°ÃîHMfqI9¦´çQÙGüð6ã÷—HQÇpo^-ºÛÁ# Ë‘Þ3•Án )«ÍÙÎÖÜSo·™B¦¡ VVGÔŸÁXíó]Í鉊-Æ,d9ç³R½½¬ví÷KÄiÃÆ…Ó§‰§WnÎúj<$kTKî*½åúÒS§¿ARcÓ (ËÄ^1Ùóh³«”?«èÒ!ˆ*×4̵—²Ó!¨:g@æZí‘VÜð|áÉšâ ƒÂ,*´”tíó•²Gˆ)ñÜF_T0ËÚ´rC1.²îphkåý–§ãb¡&E&Ý»Émœê>¼Y®òLL}–P¦ôóÄPÕ¨yZ?þ ½³L”²ñÊ2Stɸß3š‘*gÏP«´ Ü“MƼ]rµ`·åç[ÌË!´³„ù놩±œšÓZà˜ Š·ÑøùÁ‡›î:Êå™y÷¼«ÑqWBƒaYCKÉÐlõƒ(:®ja.õµdÀcVs‘¢Ø¾¼ƒT¥J_[búÛˆlŽ6Ù-˜ùš¼ìD¶ž©‰6çœ|Ý•¬Ö»=bd¿±½‚½äÍíLçÏm®¸éÇ?2%9¢hõ½§¿yoE#zm*¦{ _GN³…äÇ{ljˆ6ý1šU-‚é Ù‰ä#^€#Ö:yÔJßÅç€SѨ_P;^q+Í]ŠØ äGú¶âîM‰7´ßVõŽÂì³”g*ÛúÓµ‘×8Â+jù™…³–Qì/bN-+wégçÄÝg8œËóaãkI|BœÌÎEòä«úý "ìgç¼iïǨ$…yȢ̆…ªˆ<ìôŒ3Çz2˜O?²´î—óH’Øç¢ÞΤm1W½SÒ¾GÁBfˆÁi$a²èÍŒ}´…u?cÔ¶ró&†©äŠÀ»ÔÃ6#‚Mqvq·>ò‘J j*âlø¹Ç#š“ýh—ˆÎá×LeEp<žÿ¨ýZJPY°Õûó¨îë¢Ú$­è‹’vm5Å<áü2¸®ÍÈ#,P K¨DÒ& Ÿp×YæH ¸»ˆÏ´+T÷‹" B˜û³’u#±oq´O…¥Õ€$7–¹Ù ™œÕ÷ý.µÁ÷¿«!®&PG© Ï›OI¦Ü§ ˆ³¿j Ëœ&P¼(ÈRù•›y¯H2tXë‚dåýç3X‚¥׋fJ÷ÛnbB³m`ùI>"ÕZŸ57°(Ã=]5ÛÓ„{ªZUJ/³·ùØöìy¯{5’&'”Ê—)·§cý»6›Ï€Àxn(Ÿ”;!þ–³Ý.òå=§dBeiPÉ+g#¶úcWÄh•á ¤ÂP*ŽÝ¹¿šòZ:mJá1QÚ¹Ÿrþ'ø§oïð{ÛhŽDœ‘k€Çs˜ÞqwQ‚pÞªý-õ->Z üôo‚\{;Òï¿5ý«h~*” ÏáÝuW+µ ªÄ6ǽškÞW'ÂÐ SŠvl*+¾Ñã ÇtYGu%+VÅà©aW'9EOÁá·…]¯ðèyþœãɽû²³Z›\Ê„±Zn(­áìÔL+ðO~§W ÔÂÓ}“Ž/ A@[=<vmUÕ({šÙF@µðDÎd¥DGŠ“E]eÀT£ï²‹gë3¨«Eô)ŠíHËýê‘d=›ÍØ”šƒV|j“à¥Xñ?m'1˜Ît&NŠm$ l¹÷¿'¹%Åa Ñm™²× †˜³²‰‚[\­Ç¨Ÿ…*Ø_U|Bõ2›eJV÷¹Ÿœ–Âì@Ó®B¢“Ü÷ãù4-ñÛ{Û¿H–*‘±dv}OM5ðéîj‡Š^äbÝJ6x§€CBc=×4£ñE£nÄ”ñšõì5³å9¤8 cZ3¼”þ±RŽF®ÄĦõŽÃ#„蘛µ?JæÜ²9!’ñäR¹õ 9:aèî9®&QcKnÄßõGqrZ áÚ’8À9n¬Y  e>nîL “9Ï.7“ä‹!,fWb ËÖǬ£4ƒ¦öghCÎÚHü0uSpÊá¾|]I°¾O²¾X¥ô‰ÅèлPåÇ« u­‰M@*b“CÒŠK‰Šf‰¬q&u£8VW Œ¢; †ÌBoFï_îË`Q‰€ü‚j½õ\Öëz6)iÿPÄ-½á–ØD"°iC¤Þ&<»»ºü“â!•â×Eà~Ý“‡b≋¦ÝÔY§hÁ8‘Dí`¥ta5,¸3þ`ëó]±šâ¢ú£ÞdJbÕð˜YÔ³!ºv!kóƒHoñT¢­M–¾?®ŸZG3ê•££)§j!ÇÊ6œÒ;êÞ†‡ÔÃ5œfÔï°• Zö…–’ ÌPÀö™sÙÑF!Ë`*â7,P‰Ô_?ËtŽŽÝ¸ccÊ b©Š.«Ï•%®ÑºËì¾Ü=pf4Æ«µ=›•rà…§‘­N¬”³Qg½á˜ØšQª÷ù½ÉÝ5U[˜uBSÚ>En=(qöÝb¹¾{_Ž`îÓ¬ÞÌ÷¼àqM¬ájuŒCyÉÏ;Ñ ©ž:ârüRw•³÷†¢ªž¤XEc5ºa1ýÚàö÷ø™G%ëÍÉ–zm~é‘õ{°uÌÊÐÖ›úBï°K½êÏò|,2G'ÞÕ8šÞjÏMJïÊY(Ú.³ƃV"A’o„÷`ïXF¨J ˆ}Å›h½ë4sœÑõ Š…oC[™·¯§•”z2ú„´®ûz¬Í×;Zn"Ù‰BÎÂa¤:ƒêÑ¢*Î6#ß³ËuGLEVé]L¬«aíMË+« â×~öOUC NäÚHõÐ!G|Úž,žbϯ¶nÝ_*_ZÊð’Dâ>æ¡(ÑP²üåg=늼9§ÑXt‰R¿›ÏŸ¾x"O'õòÛˆÇ[Yq¯¦Íå,s­€Ô3pL» C¡ISmº.è|’Ý¢u‡S¹ò7uÙqš ,÷1 å' ¦4ÉœLgé˜RT>éOŒ)í ov ê[øU'ÂW-¨ß ² XH’)èBñééýDÝ›_L=Þf—·%ŽË¦c&†¬¶j=g*J9u-»–Š:eîkñ7•°×pQ¥SŠ `‘Û ,d´Š c½ fíÚLÓ4ê˜Çì‹«“Ç8<žC¿7#b.[N] 0U*oæ"‚k𠉶/.Ù¬ÚZO]º™õº¼9ÖˆÐf2GíO|j³÷ ÿ¹..³^¿¥,_oÅ??P‡ ©W½›aWZÛzþJaßDbbßÈ4'(ýDs7h¢‡è%96É fýç~•%ÓÊCØ9©ìK‰X,ÉÅ 5²Î ÄQ•MÅ‘0çäiC"Q•37gôø4PÏÓÈí/Jø[úD d¤¢Œ*_ãÇtÌðnŽ‹ÏVí\ëôE2%ë^¤ tfÇâäH9R¦½_on6Q-Æ6SÄÁ„‹ðüþ”»÷øû¬QëS¼õLêõ° <#œ±ÉÞˆFSù®ü^²¹à¡:–øo:1'6‡"Ž­¨-\ƒ4=J%H¨ð2ëæDŸºÿ¡·ô}ñY,3€=*/J'ݘDÿžtCŠÄRC8ý+"o8MŠ!/ Ž,oÿ#ôE:3É8óQëeè_a)ÈØþ‘ÉÈî¼z'AGX±½ñ&›PäÆxB¯Ïp_•!òMÒþ¢Âî´ÑFgq=¤KöÈý‘×ûª2¿nòrüùD}¥çEh@MŸRr žžÃ¨ˆ¾:î¡W—Ty Þd2sǨPÒï%™Jw(Éÿ9PöË~„wßCc‹â앨OX{®õ&u’´?¸|§ Šp!³ÚÆò·à9Ž\‘]ë‡|°ÁÑjñ“LÛ=G6ݲÎô ú±ëŽ óAbs5r‡vmr⣼oQPÏe¸ëþ'q_ÄDÿ9_ß¹O¡šÀˆß0ìþêK£²×ƒ KéM¼Ã~‘ÚGÔš f¥Ä—ÅΚj6úy°¦{Lˆ³“P–ñ"û Òµ!T¤U‡g^ªSfTÂ\ßj0œ°ÉŽLŸ®5ª0ð”TÉCÊ[Çx3’y‡XS¦ZvγIäIЏÂWÚ8Òš·ËE$‡^üF ~»¨ˆKׯÆÖ‰ELþ°c®_!²°_b:A^Ú5ÛÂÊü®ì|{ˆiªv¸20´Þ«­{ûæ\ŒW*§+˜Íìªx9ïDÒþ¡8zÛæQφJ•ÛlÕ RG²~v(9¨œãÉïç¤?û•yµ‰7oD¦ôㄘÎÖààÅë¤ØÚÒJç&ý¡™Ø-ßA ßßIÙz˜ ‚„ø‡´eÜ’„[:ët$í;œ»N.ßCóFõœ¼:ß»­w¨z7Âi$œâÄFóB€YñÓ´rÞ…D%rÌ‹°×£U,»_ï±nÄ­V9[4XG˜Âª åëÊl { ‹w›†jm2õ]²èó» ‡é%ÛÖùJ¬?ô¼9uM~½umDe²§õ‚ð‚ß½Ö©ú€øIW!ç¤ G@Åí៉_þQ‚Y8ü"RËt~êŸTÿ¶4OP?´yâ” Àĺ”›èÇÚ®ôὑI33Ĺ( #G½3æQn°oxÉ!ä5‚‰×GϪ݃!]B‰ÚüðPm3Œ}JánZÌ伺ú8­þf@§lD#™ái*¯&ÔÀ”A#‡Ý+¦9Û£×nOÜpÞÇФÆÚ?…X? ‹h…€të?¢ä6†@QœÕJåw6í‘~¹<€•ÛÂsc3rq¼Î ‘‡O¢Ïld9Ø×šŒºµI…æÃל&ÃÓ§„¬6>ÁX ™“—Ÿ-à/.FäèÆ=×è/hMÚ9ƒƒ¾LL^¹anŽâ´í_ËÆÏ(G§®ŸUhb•G,š=ŽöÜ2åü0ʤi8õ×JíHª2” dÇnê[¤–“§ùØÉ×Þ.þà Êå~׉}wÜÖRµeåŰ,H•~{€äMz¤ÿ%¬ cH Údç¥Øu Z!X˜fÙžS~±Nðöôôá7M cÒæy #ÙJJ»š×þ$ "ÅEbʆšŽ^Ã*Ãã©=^Ǹ ÀD ^ »SI=WÍsŸ÷b@¨6”NÓ·ÃHbFÜ:P1ÒºØ/³ _;ÈrH«H7ÜsÁà)Õ !A™Šxé´à«Ëîñs€BHÂì;§Á‹ñ… éÿ®ÔE±¾`Ÿº”‡"{S(Œçd„¿PTŒHõ^wÏREËGlŠ/Ê'êÂKqfø%Pv0 ¨ªíûTãk²kÔk09a!ø( ó-¥¿äÊ’84þËW4|¾Ú}ŽHM?“¤xYüå¾U?AºOÑy¦ù%½=C€>.F´äÞ<’¥ñš«ŒSÐ^üjveƒëü6‚tì­Ä ƈÐýÕ¾üNˆÇg!2ÇÜH/Y…ýgÿjêZ+Â;Û9½žg;¢.oìnJÍ}óÌH‹ËQ·‚ Â_’‘|½œõÚØR'‘ZkÐÑ(G·¶ž»&œN\„lõ¾lß¹&~‘ÌèVp©ùªFŽ‚çzp°FÅv™ÜWD•<«½L¨Xô¹{VÔß3%£¨u-¿lÙUàVÆØñü/9YÖ°‘»RŸ’®|XãëLÇg"P)èÅeÔ¿‡ ðÆmþŒoævsŸg9à˜GW+ P„I4%Pj-Ÿ,xĹìÚÕþ‚›þ¸6—Ç©ÖFiÈ,“B£Î(¨kèÚ[N1l_{W°Qt;D ¨„KÏ18¸G9µì«@±²Nœ¸¦hNýWl7g·Z¥ÜQ¯°‘+Á6½FΑ×<ýy›OÉW0vnCK‰å3mÞá”iZ쀉eë…ytûçáM½†íÓgúO¶¾I¹÷FL{¥‘„²›"Ùúõ‰¬7ý¢Z%ƒýzu”DÉ-"Wýž¸¬ñ GúÓk9ß¹}E¤ûÍšVñý9Ñðà5ÄšÊ^çåó¬Oºjêöî3,ÝØ¿¼<ŒÙË:Y+1ãd®²:ur‘é ŸI÷ûWÖ§íRÍ;•"ˆb>Ÿ]ê=ð¼NµšÅ£5XÁÌÁ½«›r½«à”è»Gmùæ¡êÖ\†‡¥ðš–òYlÊå{æ¤ÛûäwöýµÀ,c¦òg~}ïÈ j–áã£{Ã{L·òEÁšÀËbéWÇ''²•¹GéŠü»|ÐG¸`%h˜ï .Å" Œ 8ùÝžrßTtâëÙ(åäWÞ)›Öš¬?‹¢ÊßJ3ùØ3•ðkäþ…ö0äõL³¸qîW¸Ž•¨CX›0Â˜Ž§âí˜Ò“ ² €±×8œÎ<_#B¡<ˆ‚r'5×Lªûd0~¡ˆj‘ØeÛx^…rÕ`SœäRXrOl–-ÙpEŽ ¦ –ÐLPÖX<ìEOÄGšànqò`à)`ølñš í¾ÅÒáÆ<—uw [ßË´ÑÊc¹ÂúE°ê4« 9ŽÒs¾¯LÆÆÇ\ŠÙñ›nÜe'†#Ä1Yžd+lÞ2Ù­1Š­ >ôC #ƒ»G;Áh–£Kð‡µz:EüsÀ¦›âvcªç–0(Àó©ÜÿT?öɬöë#Á8^§ëàë"Ø`·;‡{§pþ–Dw²_Чgj^çÎÞJ`^‘d\°Í,ƺ…+¡í¾בÓÍA˜ìíªä>–ŠÔˆ62˜žŒ›¡ŒH.>E$‰ªùÞ<ÙÕÄÝÜ•“†i¼½P¬‚]îÚø?C\lpÇš#× 72]+’{y âk#âð˜‹nnC3°B#朆W§žþ,¯e¥b5HTGWÕã!… ‰Aš€p£ÆÞä(ONÌ—}kªIPÜìÙÎ&1G}ó /J„\‘]öU€f zx&Ö$PÁ,øÓnjMÑçî¬FL|_„ñ–Õ€7À®hìüW$—8p¾.G¼ªVÜ•jKáÞà&²ƒ;<Ê‹1>ÂLê}â—m,1”0*äiýb ù 3Dν©Ôß>±r:t¿I½âÔÁw|™Š©èóßljcÕ R¤±õcøÓ` xA|£ÙaÑkM²Å ›Üæ¾›š.0€8•+Á”8m@N§讈„{HYÓCõ,ÒÏdÝH—×±3R°ÜAÖ½–§$q¡4E>ïö~‹¥á¨·â‹ç±w?–aã;0s=Ç FÈ8v/È÷oºØmˆæÅåÂÙ.ãÄ7gú™fÒ} ̤v*6QùÔGÏ–Ù•‡A™œÖž=ëœj{ ÎUN )¦Ü÷®mº(ˆ²ôuÈ4â%õŸuOމÄgøßt—És¯1U˜Ú’ÒÎä¨;?÷]ú¢ÿaŠº7Üszº3øÃ†%m²½>l×(›—°3É/åð¡ Äx-ð5áeØ^nTÇЧ3í‚\|RC;³ŒÇÔ ‰zSì¤M)}’÷ ‰)œ“\öÈûKCÌzŸwÓý}€œî/Œ=›˜ÙOÆ:B‚X¦ªüa ñ†2VOÝ?˜úù41u Çé‰xõÔîdì" ­ßÕU›©üq—,Éüó}Á—µSÑB‚:Ö$fÂâ ÁHÂW«’M-âkÕëÇ7$6¨RVbŠ7À{ØŽÉ"K39êï¾%kØÌžBÆ$ªÕèá$ˆ§§ÝA/ž-Œ> IA`kV%&1”rñ’i9‘Uóê%Øï=ú¹£ ò1tƒiq( p½C&Ssß?YG0irÂ(¿¦ƒ,x¯¯Ž˜|üTN¾Üv/£ûÒìè¥é¸,6 s`©GÆhÊÛ¥ ž°I¹¯Ê;Ï‚è'u×ù¾¢D Óifk”W ;ý¤Ev­3_OW~xsNÒ ¢Æ~/HXå?vÀö(ʯâêê |àé"˜ ôl—%Q SFŸe9òWíoäs ‡®6Á³½g ñ7Êäs¸@±ÅÑlž»ÅhÓµónþ“ôÅûÉÉÎif¸÷£™r°™FãkXÓòï±®‘—ï%:’VbézÏúÂ"œ;ÐJø²>R ë¶q ž¨¼Ï”á’íG d kU#äñ-Óê!spèùÕÃQçX“ö ÒòhX†f½e<Sò¾?*Ó+†j—ÓNÎð áéíö hmœUWj´ƒ`78s­}œ[òP5S’ °B˜%ÉngòÏ,ØÁ2/£a y]<^Ôo`àÊÌ; ±ýó y÷nF[$_-]κYtbÂÚ˜½G}"Þ#IíZo;ÎÞ¼4t´‰t™ýUu¦HZ‚e4ÔVÑVv^ß`¹—å¬\—×£¸„§4kÙ%¶£èH{ŠŸ4ù˜u?þHí#/ï½Ya›ô@±쥈Ê=È?ò1 ljCfº¿õ«ÿ%ߥ}Æs çS9Kð—dM=ÈzO "½_hr˜ y§è&^ëL&£Þ»èÁjäÃ:ƒñ'r~-•w(†g½þrÞ’0r¯~¿ ï%nü2œ<ï¾Ì(ÀŸÂ’0ù7›¨n„Wåà¿jrV„?`o¨L_ˆÿk Õ—“¬7Ãã•÷"g€® ¾)ÈÓèR‰åÃ8=ŸšåP>£Þ/™÷oª$s u÷èÛÔ5l³ª”\*_•8O¹b™¶ùê3w;Ò”ÁÓµbV–ÕrЮËñ!箲ëòL©ƒGšÔOuD–Rtq -Íw{Q“¬Ôn˜b©ÂfètùØmò9PA>ò;.œf …TØË_³ˆÄSBç}š’Á܄˖ •îÓͺŸêâ.A c§ n m°iq1¼ð ÿÅ®ÜÔõ ö—׬»H"جÀ Kì¹æÝuó™þRÒl ‡=?f«ìQ~¦aS9oòªbÛ8}–sÃqØÌ}M]âù üKo*!ÁJ*“‹p!žûåmcò(è´ÄÍxÍæ™>-­³—Þçpÿ°ÒTTaù÷º—"äl®¶±†E¡Â±E°}m­ñð’.J|‚öï:Ì«¬¤Áÿ’î-’ì¡„> 5ÿ!»ös[]»->œƒe2WäJùþ{jcò‡y¸”uSÚq¤ùlž U|ZÄÐyë-ºFÑ¢ÙÆÝ…1ãìÍZç“ІÆ\¹øÉh ßà=ã ÒL©¾’ ­žo±H©'¼r_Q“¬3@ËK&²†Ëìå&îÛMZŠK óHŒ35³ý.S©W¯’Y÷æÂëÊM¯X•ÇU­7âñŒ"j@91«ÁäOb÷ý®¢ñ³ —6CRŽ¿É{®{Mí^´îèu<ù;é® UT*tKÝSÁÆ2ñÝí·w5=g"i Oú"_ûÕ%a0 ‹mÓÎdÏé7õLgÍžI1á8ë$`Á(Í*®a~gÙҜ˺ÛƒL ?lÃÖPš%,|­´»’³'ý%÷ªÒ›+ožÞt¯ôú1‘)^!9%ÈŽŒbf6âÎߘ¿n}r¯¾Hê Ÿ¾øU}‘$ÏŠV\ àÌ—Ç"ïôàR¼7ÑœâE—QZZ"Ä' âJ7ýˆ~¥X禽Ⲵ hFt% Î!g¯[âe½wöwPY^)Å–Æ ÷~·ÎHñÁ¶aùû5¹Ë¦º%éÚ ü—‚[XA„n¹^ËqrJ½‘ðˆŠbsASý/^rG‘`òšOO²^ã±'Oߢãd:jÇ-oyœQ6}…‡ÑåBë©o½‚…0dÕfÉpÅ:Öz–µhÒ:…tùöqkáßýUÏ aÙÿåg×â|:v/6ø_“cµ7MGúlħ1Ñâxa—Eÿ‡)µrcˆfDøá ¡ŸY½j¼\àw_:Â%#â–  ·aª‰mÛgb# Ç}ZUÄÚ×`®>ÔH‘íe˜m+m[®×¼HÉ^‘I¨¦û°ù{Wˆbv¥üŽGzÔÝŠ(ý}]é´ŽXÃ.zCÀô½ñHu¢¼sŸ8 ¿a°òåáŒÔô(ÿõO+¨ÏjtÞ|WJuùøÀu±dšÿ•7öjºîdEͲÆK¶Ïö_2;Ôk”°AH›:­STÚFÇÙÓ,NWQO£|•wá(jÀ?ïã¼Oº‡<Š>ã4.®Ö1¦`œŽª}V :† ç€ ;)­ÆÝž¥Œ;®”oÙ•º•5–Ù~É·N‰mãE ²¢ÄŹâMV‚¿ˆÐ†ÁN¶Xà ‘ ®L¥éŸ­þ‚î/ "{®·%èBœDˆ¨M,ùÒöð½$iàŽáñóÉç5…̺b8gwÁ‡ùîÆÜ6'ÕÄíÞÈø7 ‹[Ý5v}çbßËbÞ~}¤q ì‹r=ž3IwÂÙ-cÔvqàuaê†0i|ø‡©Ÿü'ӛͧ%Ìä:Ï®‘²»¬Ó–oäB“Ãlçœj±ÐuHNe6—Ñå¿$,c…í¯;rämŸùèFk´žZ{“š¢T%¸£v”gœR$ýÂ4 E*ã±Aj–<“–ù¬ÏëfÒæ©ë®‹%ìôä}üÅ ¬LÎ ƒÚ„øR×î6(_+ÒÍ †Ño5€êÙäË,ºÛx(K0E§aˆê·n\`éÇ çtÏ£™2PÚòn­¾xÔ¾ßù},Å)í]&}j¦ú£ØA"@A»–î~ ¡—ä‰.›à*9ò¬â¾Ó—¦t,6¤z‰EZ;Ó 1¯×^üÜ~à&A6ön<ÀÕxø™ =NKðpæÄiE£ÐdqažÀŽQ’.ú‰ݧ·D–âqüR µ÷ô¦–š-1ð;p yY iðôHst‚ÝùMÍt8¥«*Þ¼ÛÄ–Ô$¯±hìÞ#8oXiüÒ­g%s[–~móñÆ64ƒzÊ€%YÀt•V#º‹EI [Yѵ:"62U®”µÛTw¸°>œñ¿…ýºèòסéty(ÓGKÀÖI0ö¦Gádl¨§T}¿\ð.ë#paû§äଢKæ§,rÏ.64n®‚øˆó@pýªì‹M´_W¥â\ï[ª‹žC²ñœžžÒÂJ{“‡ÝPPƤÅþÃY¶‰ {¬ Qê@^žªgäÍ—l\1àY5-òík]V¸ [neåÆ*aTiÅŽèH=ôºtûp G4l»bÐ4ûýƒx0?v·÷ºQ¯^³âFà:ÒE‰ìm,Um­üäfT|-ïüÊȪŠ€ ©òQ<#·²?ÔìpôS˜ºŽ’ïA§1'ÉïøêÓ÷C–3­¬HQHÃÎ Å\*ùËÊL †ž ç¾é…^Ùm>i”äm˜Wñ 퀡n[Fu³Å"k8Ϋ¾jë^²«¦¹¤a}sïé.ÙÒ½¤™qèuu!ˆE¸Š×6L‘/AÀ²•K$~N $wÜ¿;æ&bñ/žTœ™ fÿ¡Ò³E»Å̺`º¾ù¨)ªÓ÷š гOk:çiYÓ’=N2^ëeÉos» M漘4Z&¦Š,,:òàËÏOÉÔmñóüõågý]*Éç´ãè±b4 ª4Ï5ð%>õv7pïáhç‰ç~üF q¬bº7Ògír~¬¦ÿÈóüI7ö\þ½Ô¼)¯¨«e$‡É9üÎ…ýâÿ —Š“Õbá*Älá‘qÿQ¶*k*¹Ä…¬2ý¬Ÿ7ƒY†¬ Ã3šúMK”…Ɔ˜sÍÌËQÝ#F¾‘xŽ"þ6íª,ûü,’zŠTB/öp$e¥áкtýï1>+ån¿QkhÎâ{é›; ¦Ò‰±v2+(EUzn·Gò‡»|L[9‚ý¹E’ÃIy[ËÓªip0΄9Œ¾µ9ˆ6]Ý¥x¢¸­ ùP¯õͺ·ûŠÜw})F9Î? $ª‘å ¶¾;qS][0 Ò V‘(³}Š¿*¹ãÍ$ÌÜ…–d 6b7$ ¦Xb2~âzxžòúû#ݧ Rm䦚û'„øs«¡ž} p¤ÉEiÍ:Lp 1§œ?»ù]÷õ²OO†;"Ý,Öíê±2D¦nâþÄ2>fá*šF³c^îÊÞf¾mµCäþ€–$Øs§§]‚Ý4{ÿ¬…æ.¿ƒ YEç÷|îj”ËîÛdSqŸAƒ˜v‰\«Í)a¦HA`7dRc®ŠÂ_4t{⃙yî¼dcƒ …YËà`[Ò¿‚ëùœ>^YqËÛ-Õ&@ Bæ>©aç kl-Š 5ÌbNv%RÄ0“¿ÀóËìñ9ÛÜ0v‰÷…¨q ñGIÜ¢n‰špú-+™U‡?‘¤Ë0¯k5­`y ×Ìß]Ñ—áRâáò»& µ±ŠrªMaêIU1’6Ó+~Pä†Rê´Ž¾‚-e~ÑÉ87ÁÒ©?Ô>ž­¾Œ¥žo!æ’ÇÆœ–‚1è…Æø¤|ÁÖý—üYíu1, WBn;îm®õƒ*…ª/__úL¥àËx¸Fýª{IŽD°Ý˜¯’ a/ê‰3”霛ø nƒ­@þgvf{Š]¦¶ ä2‘V¤à¡¿@|¨_º›‡pü]È[¶Àh“Q®Ù½ ¾Sת¢™*žÕ³”Kö±,?0”î‰ï>Ší¥•ƃQnàä¿Æ¾%]8LÜ÷†< $@‡êü«¦^8ùÞåÀýËoÌø˜õ€dýÍ…¬@£’ÝßÓ ²:›P°øl‚ÀcÙ. 1—ùŽücjƒûv‹Y|ŒQË`¡/Ë〠&Á¬CØD¯±P²›JQݲÓ#îGLÒ‚©)«çË —"päÈtåádôžø,¯$îœld$A¢ ˆ)è­ÌÛÝ9ÖŸm6$ïÛD»¶5P %þÊÛ€3œêTBÒZ¨½^üЙtB3 ]“'ám£Î² sDÿÝ'ÞÂ=|¬­…uÕõbj6‰ÃržêÉÍIHŠ”êÇr8‹öÜß}y>)ƒóCL»YÏ8.ÑUúh DoŒZýæÜf l¿j‘È:P§ pû#ãß>,àGîÚÐ ¶LÆl~Ë¡qj´Û ªæÝ/õѱí¡^Ç®•?ìgÒ—Ír¤Pü ù~êqOWîc°Êjh ‘G*p Mù_X»bÎ ?V5S„ù>ë“× ÿ”$ùûœ]‚|fƒW‹Í7ÿY nšGPjËé”*xMJ™†Ô‘9ÌÀ ¯ç¾kÓºü½[Ú§”q%sc*¯ÚV÷ÜÖœæ•<´T4M’%?äé×7Î/,¦È¦Ûnw=7åšñzò† uÔ°‰,‘$#‚äå"Iã§l”WÃ#æêDÙîP’o°©÷!¯7õ¿çgën°§Lw(<‚h­.^qžK³#ÁÆdàL˜÷d’},皨àÜ´6K~‚©LÏF3li3í»\s/ 4Æ%Ú++ºª4ÙàẛBíÇšm¼ØšËuÍšr•‘G‚ryD¡Ì çcÞ©^™kú«—®É.àLoƒùbÒ·{‡×[ÿUf®Ú´îš˜SÜæåºãAš–aUyù+Ó/Ò«Vb)_Å.H‚2n8íÎ§ÂØ§ýcÚ:d'”‚g[{(ÖÃÔS¬"¹ , Ãì¶<~õSK*4„·ÿi ¶Ay8ïÙ é|<ÓGJX‚Ø{“;Gâ­Ê’ µÿSŽä®§Ý´ŽÆDÄÇ~S¢êÕ’$¿À+/8™â¬K{F¾YM9KNã©Ç°2pë@°TŠ)œ¤ëZ˜‰:Æ3EŠ\¯};}?òŒöíV4r£þÌhøÓ ˜á U<`rZ,1ÅÍK¯:\ð<¥tÓl@àÓœ»u5ßõ•"¶ÁûMF^ýnf²Ð¢ î ’Ç¦®Àݸ¯5Å–ÇQs\&Ê !À£baÃ!—3ó‡¬hUlS%ÂöG_Ãp7Ãw §k Œÿã™|lÉ!<¬ÚH‹±–5²¢ø#Äq‰•õÉzÝ“–‡3×ÅfWüyQ„Éß©"/3é7¢^™‰b’éøyfaà5šÓiy:¢¾6“øj3 ƒkã`oà«—gL•†? zƒ¿ý?Ÿ5 IN®]ylsj\2ö¸6bËË‚ÃÂÐØDKO±ysüÏ”‰¢¡ªš•Gñây"š»ja‰¯uÓD›äÀí¾z ë‡c™îR…5LÞV›÷4ÑéÆôv^ÏŽ¡Ô1t…¼r1ü#1ƒ4‡1…Ùk3 *]Û[ny€A’{w6i”Ðÿ—Ÿ[*'8¡s5kåÄñ×6J=†¤¶è®s² íC0o]ÃZ/:ï· ÒÐö8¼9„ bªÜ¯l›tý?Ëa9CÉÿõg!é.3FåʲˆKúè’Ã8‚Áé|5E-rpëÏz­l¯ä¸ á醓¸j€Â?Æ ¦’Cj*ùÎIñ8î,on˜ùW,þŠÑZùžQ5ãL¬¿©~cl€¿¤çˆLŽ™ÄÏ*¦i –Yzm-§Z{ò|T5d•ºÓT~‰o7nw.Ï‹æyŽã( šÖùüðéáXvÎR«'¦·[ðS>‡5ËØr`Y½ZA\gÙ"ºj}ô´W*(PãK +¿,¶&µ‘ËØ^è,Óúÿ†^ðJ)r¾ÿΗ4 Õ6i§ú'˺A6ܲn${‚i{BÁmBñ ~¨^FšgQ©ŠCÝÑšRNdyÞ=§û™”K2n’ =ÀuT#¨Í 1œ}YÅ[K¹:TÓ¥mâTŠëL©:¤œ”ýû!ëI)ÍŸw^ËR•õóÐ!g€’ ó¼Y³ââ-… ÂLøY<ît’P$‚ñÄåʉd]£P4 6®žvÇ¢¶tÍ]üyùîïÞfC_¼0t}Â?À|ÊÓѯ}ëâì½LÆd¬kßTÓÈ ÷ç’~ñ|F{MàbGV9« ÛPß`å1D뽓 ŒDE m¬ÍRäzõ‚¤yÑ¥´í"iEž(»|±t̆`‚î3 #K;UQ©õuº,@„vWzÍÍŒ¥¾ň\õ´+mÆGŒš²›[Q’¥ ‰ÙOg(ÆßBô\Ÿ|«¶HûIÇgҌبZË0¨0MoÜ”ýÁ"½[röš1,¥ë Çíi,ˆÉKæa‡CÏqiã"ñ«’×§+ Iƒà4©0Úœ#+1— æ+·C†’d¤ßÃïoMrê2³,ÊšrÜ,!#ÕI‘VKœ†~=:%ùÝØ×²YÑjé«îkŸh”uCVnýï²ørr«zóåã­ÿ}òÃÿÜò<üSô¿öÇùù«÷5þ-nnùó?/¾åï¿àßÒÿ½Jþ7ù*ýßä®÷¿Ëö?´Ÿwÿ“oÚ÷ñ?/øßå+ßûß®çýïdTïÅÿñ’[-JùáÒ÷ÿôg¯/õôÉpþ_ùÙ¯=2Œö@± [þÿæÇôÀ{ßgÃÿÇ?ƒƒkÞö>6ßüßòÃÿZNûß«üÍOáÔ§ÎHþ¿ò³¬Sˆ¿õMj3ÿÿÿì¿~–#*snþoùa&ì»H•p ibþ÷ÿë*çÿ}Ãÿ¿þñù_—‰ÆÞÿÿ¿üŸÿ˨Lï„?áÒ|·ÿxŒÞ‡øGàÇìã\ùóþ‘Ñ•Ä\b«6´ú2ÿÿ¼²ÐÃh0dipy-0.10.1/dipy/data/files/func_coef.nii.gz000077500000000000000000000077031263041327500206020ustar00rootroot00000000000000‹Ã+Qÿfunc_coef.niiÅWiXj·NÃKsªÝ$²¥¤BQšÞç¾½š7R4¨ŒÊV" ¥ÌC¢m›%±7Š’i“!C[È”’JR2$Q»Žó_ßùñ]çßYëz~¬µ®ûZ×ó¬áYkb7¹ÿ)ÊÉË)È)Ê ’ëö/þw–\ß))'÷ŸN®ëÿØÿýÿ'Éÿ×ÿ}ÿMÿWœ\”•í¿ÀÏ+Õea¯dá>겊XÙc Yö;‰Lç75™ÄI^6:AQf¿YY60FS&dë$²SÉJ²%²!Ýe»‡ÉÉ_ý!+(ÈjªÈÆåId«¶ªÈŽ]Ò”½Ý¤.›¥ Fï#Þ¾>-s è|Æs§º³'P¾u£¸î¨Á‘5®¸ª•,&Jø-ÇIº»ýgú¿Å€æ Þ™=L š®ŠbýÄŽ±^¬ë§É·•f›†òÐ †äIwtáüN^3Û‚ßÃ)}®ÂÀíÕ˜ uOÜ)wÌœßú|Ejô|®8r›ûm€öÑAÜ:¥—wŒ¤¿Ñ&DO¶åüß YkI‡}ÝXeÊ÷ÔyßןßÏyóÈúNDT‡‹GI}ÙÝ?žÃý×ãˆó4ª™\Ã.âÃÁÝØûöi\þ`Ç£ùtJÙ$íy>‚zû¶ Èð&"¦2!å ʃùÚØ^ÄlH`/Õ")Ë„ólfs\™9ÖÕ>ÁÛ™¯X5–S÷Grî×ߥ?i÷fuñ8~hh’KÆl9ÓCݸà‚9¨õ@ìÜÖ ¡¶ìï$cs~Ò4ýØ7m”ÐîmŘ.)m¢åÙåwRè9ǰy¢?¡g¦*óD†ƽÊÍQœì2Šâ–ccMŽG¤OãÑ~Zèi§ÆêÒƒø«DÊ‹Š4îåÅäž/·eܼ`žXfMþ=hîùÿ¤…`Yæ<–õöãÇya˜—§Ï¶È1|Z¥Îž³àK¦/ÄQͳÇpT’,ú£ñàV|–ìFÜD?î·>‹M‹Y/Yù_èùiðÛæq|ly¦°Ä„æ8<•ú~ËYo;§/`§3y¼q'¬<'"Ëd¢ùH†{ôæu ?\×ÈÙŸÃ(“³f@V­X´fÛwø3ÁCÂ#qýÑà°Œ‘ž±œá>„ƹ‰¸ºñ'®ñŒf÷šÕ"îy8moƒÚ†sß.kzIBXXPå½ë±û*³†vA)Ôˆæg£8¼´Ij§W‹S96Ìm“çÎ$)¢ wˆä!}i´áW©ÖÁ§¨’É7q9tGÍ®†Å4õIÄx36ßÈFB“ ŸD˜ˆ¡ó[°äÛkì³±bõ©©=” °6A‡—³-Yô!е³¸âR‡t]Cw*î˜HßK¶¬·§ªÒgÄ(¢¡ûD¾Ø†oIýYÓ`ÊÖO¿²y“>égÉåWe\Øò›äRË%GŽ,áÌÙ:üz@‹C§Œáçg»ðöV%jî½OJ"h§ã‰Ã‘e.ÏzÒ@+”':ãY;ì»XniH¥•“¨¼¢ãôò ÛtTè¯?$µŠ¿„?ö1s‚ƒü|Ù] ±ÑǺºÙìÿnßùøó‹† ¦»úSCë Z£~æÀÆ™ŒˆÐ…GR kÜÃP³| }ZaÅ·;k±ÚX §j÷cÍþáâ³­Ï×P§æ*Þ»3°(ã÷¦cnß*ñ)Z“[(‰ƒ-1 ö gÇbÚêÒ n7¶+,¢Òy&ö³âî9;¥³óKÄÐW£XÑÏ™K;|©V^‹“/¤šöÌã@“ºhÊJ¯÷§ù¼(Ñ1dFí)Q2V‘-§¼±Lþ&ŽÜ±§E¸«ÃœéáïË {-žýíz¶T ­( /Õ-#éØ?]ÒR`ø?“‰q¿£¾N…»³ƒ9IËí¾ñXdhȇÝ;z8 NWÚ°÷×I¼;¶ wþ'}oÔúœAõ+Sªù›ðp³*Ø2á‚Kç”QÌUŠcaœ‡ü-¥ú¡GâyH_çƒB—6ʪÛà;E‡÷/ŠUªù0èa¨1ÛDÙÄÁ,I|ˆÄ7ÿ/KnL÷îÛar|9܇CÎŒûyïÚYPy÷@ì™qS¨7§¢æK„T£—.UŒÀÂu*?î@›\ /Þ„øö(¾TF¹äVî1ân±œíù¿p£§½y!íˆÎΩð¥G&P9™“?¬K.HOWšpŽu´rm(×}˜¨Lß ¯Æ<ÚwÇ f¿17EîgUÚ|—ðê›i,Ÿ­Ì£[ÌXo—‰'J³9Z3¦‘!ô:€ÍÕoDU´7αçÅê=ˆíÍÒËN4¥ˆQ}†ð—YÙ¸£Ïø‚©¸°§r‡Óªv§Š½£¦2¸ªª×tã9Mm¾7}„LËôŽrbþ¥•Þ,G7m #êƒû¡Aĺ¹0y±:Wæî€¢ïvÌ.YK§<ä¹tc}Ç3©®ádžÿ>šíÖv¼zEž’áý¸vÉ<øìF÷ƒéÈyÚÿžöTÓñiÏ`µÓ€“}ux>k²Œ–3ýâ,.VŸÉ¶:á—^ÓÖ±‚¹SŽ£emЇŽÄÍÂáôÊÎ–êø¶×”Éi¿cÖ-â\æ}¬y´ß$þ,kj@gå¼ýñTo +ò,Å~Ö¢qƒ,ô:0¾§­m÷ +Sž­;bѸ3šô¨·Ë€Ëƒø¾UƲyò„Kÿ°ñfG䑹²ÇŒÞ<<ÒšËW'KKú+â×Cîôˆò`ŽVú|h‡Eýœ áâ;ƒÐª9[«qZa7ßÍÀ ðÜõÏO÷ŸIƒé0´‡5+,™òQE1ÎlUÍÎÒo¸9kÖ5fY‹U;-]•€"§«pý£!suyetwØšRÍ=–.‰Â.Ü®ƒ@¯X<ŒLÂä{K nÒ“Êm'„±w¾¸5ßžŒ¿AïL îWœ„q~¢l£¹éÉ6\Õœƒ ÑÈ™ÙKXç<Æå?ÆÑËf?ü ÏcêÙB˜)«ãQð=x<²áúC~x¦áH-ûîšqo¸ð} Ø67Xx®JBçrG׋¦õ7]N¶óà…“Ÿ´À}Þuà •}øý{—½›Æ‡ÇßÂ%í#žÇFˆ[§¼W–ó|Ý0þõÍ„±ÛÏó!Ly-£n¾³F_û^ü;H6Ã}R<;Î!åGïv¤'ÁÅÁŸMeÚ¼QÛƒÍnbîã7Èm}!2þÙˆ›¾‹yyÄjÝ>#ü£ßˆK•_±¢Ow^;οÊëÄåÖF¤TayÎS¼®¹»a2vsæ÷üf|Þ¾Œ½¦ÄÌ ¢ëu–Uöä¹üUÙš3ü ¿o 6Œü• c²ðxùk´¦»3‚Ëh.Nã ?‘qRrÔ¹|tª¸<1ˆ17ÐËi)ý¬Õé`а½jLÑiŪŸÃ¥3ÆnÆéAYpÉO‡7˜’5 ÅY÷p]ù.,ë#øÑ·[­Ë0¥F…ÆþÊô87€N*&œ9mw•`ŸÛ îò™ÉÂZWœtåNÃ4qvíS—¹,\â…ìwïÑ5 šemþœu¡uãoáÚCgT×,gØ/<ºLðÃõiƈ1ôHý æ{¾ü¨“Á,EçV|±Ê«ÑËÖ £ž¢¿Š?íßm•î7-ÀŸxN˜àIÝè+bÆÄ»PÝaΣŸ¦2i“JcYZR‡ü§aÚð õ)Cñte"ÒÏ-¢BýBÎ<ëÄ?¾å¼y<å3ˆxbõã¿™'Nœ˜&åÊC¬_èÈS‡ÌPu»öWtyg­3Ý^ô`h…´£x¦J‰¡Ù¥:y»—0dŽ&í¼¼)ÑVƵ Søþõy yxIjý°ƒo)Aºrú9ºz ‹ÅôW±ýÇ8 ”?ì#Íwú½«Pø5ë²6ûŸ¦!}¶[Œ–ðáýöy:Ÿòú6â§pì÷ºƒfç8xÖã݃ LvtÇ´„^léLBÄAw.›]„Üý}àÔ(E7c{îùuG=qÔÄš6ë‹°=#P¸ß?åý”/“/ˆw h¤$н—ýص~ FÌóF¹ñ/"Å=”yª÷PêÃ)ëitp Õ cdN(×ësOì&i3sºŒ.h|º•sJ`8^s¥ X>P‚öÖ& ^=Ÿjc¸¯¼ ªAú|~E[è Ý N˜æ£cÚP>þ”†EnN,¯¨BÕ+éŒ[·`p)Š;ÔÂQµHM\;=½ëGð¹FÚvcÝ©iÔ?ÏGGÐ):Wê6ŒWË\é™Ù‚Ë*f”Ü×cœg.R3Ʋ á-ê~n„A•9›>¯ w§7V †]ÌǃµÝxÉá::ŽK¿àn¥èQ¼sFR+Ÿ({ Oã1xÏ›G±ña. —°ØcÛî¼ÂÀˆ:L1—ÏJOC·)ÜÿB¡&ùˆÍôca…Ws矧$´ØR€]‰òŒW‹@e×xy"¾2œrÁq,MWâ™)³(0C¤8ÔãLä`ÆàE×Ûhz97¾hs†bª° ÑaÜÝÉ?r^pן>ÌüS¼c®,<þ7î)&ÐûÉZxØ™Ó4È‘Á³Ty\w&?ÙÐ`Ú%qãEŸ­²‚ÙÚ³"§{ ÎØ1ù£!{+àÒ6?ÝÂØ|-®îô¡¼²1oÈäÖôPJ‹:g³þKÊ'; OO•—Ê’¦ 0bÀœ&<äϳÍö_!øÂÏUØL}(šJݱ-­ z>CSVðý~r©?7¨ÃÊù¾ØµEUx%,dÝS ±ðéŠÍyg øj‹íbX•çÏIà ÅY}¨}c·ûxà·çÊ<¨·‚;4M9wèïð)hæö•0<À,ó¼[Ê®'hÙ}‚„oÝ#©¾[Ž%Lå¡ Œøy.Ñ >I•㌅ªü˜ëK!ûüè;¦Šm+ÑUüþŒ)ÀWSmìz1„µ)üþj0ÜÝ›ó÷ˆI¡´^Æ~aïál$ƒF¸ÅFë­Wá¢!Ï¥íðKâw,¸cCk—H^‰ã÷V ‰Y‹8Ó<œ0-ưi±ô\üÓg]Àñâ'â·›ÅhOIÇõÉÈ|w©™Q,*a¬üQ‘õΜãk^BõŽ„×U=¸:9G꺲iò_ˆ/ûˆÖ#Ù¸¶éªP:É¥?vÀÍÏÍé½;+Vı‡C4Jšp·-‡  ëøÁô]ԈЭ÷¾5_üÚvßm@dipy-0.10.1/dipy/data/files/func_discrete.nii.gz000066400000000000000000000155051263041327500214640ustar00rootroot00000000000000‹_û*Qsphere_func.niiÍwwPÍ·í!sH‡œsÎY¸Q%øL * ˆTÄÁ&PP̈˜PÄ€"&P QDrI’äú½¿^Õ«[÷Ÿ[u{j¦§f¦köî^½öZþŒÿVãfp2¸ØWÇŽÿ·‰2TÿÓï¡ÿú¼íòûÿ-ó¿x÷ÿ‹ó¿ûŒÁˆ00ûOÿ8b!þ'Ïì JJi$csadýÔB§„ ^D÷‘ïBm|jï#áüš·‹ ¡çE0ûÏ05ÆPä0’õùpyä)†OQá„$´†™ÈqÂ…RYŒ•’ÜÁ¯”rQŒ=F»B{¨`Ü|©,X˜ C»J¢êøvHû‡$¶U‹1ïÖ]h£gKGÈ¡’‰_â¯è—Aê 7„ák_J§ f!Ї O†-°ò¹"–­Ðç”në¢më~S]½抌ҭêà0í$c†,4ì0y‰…¾1+4¸ý!ƒêiªÌí#£\ðði&_Á6Jk©¡B^¼ðàCv³Âí*iå«D<üœ×¥±ÈÐ:dÇAeñìv9Š'íɰŽG­æLäïAZ3V0£1iŸŽÕÊžt=‚à¿K€þhYƒkÂQ¦™o?oX¥Cvó$p"dó$­{ÓOø‘ñ”îºpB SŸž‘Îá:Ú¢ †×êh»g;%³¿M—A¤y}ü4M¾wiE½ ;(©X½ï„Òð‹FNÄ‘×Ý Ò‰AާL8YxÄ¡• èÎú@[óŒÑ4&Oç»È¯L ¶dŸ]ª¸û‘ m FH/Ä×?(C*]Vf¦Ð·EMÔKº\뇩'2H×u†ÖldmU@¹ÂÚ%ÏDâGÜv’Cv™–oï OìÙLhFôÌl”Ë0°D˜bWŠ#¼™‘ç¢@~œ"çŠ`*t†^™¡]M ŒÛæÈï˜2^yÌ®½@kç\¢ŽŸ¨`µ;ñ–äÒø¾XjiM"ŽÓ4ýX¤â©“iC+Æ_Ó}‡ZJúšHÿ²žSªX‹cÉÝ@[\IJÂétÊDz#¯RyTñ5דgz(ñ8çƒkK:æ{…°ÌJlpOÀ3ûlÜÓŒA~B XçwÂ;!—‡ï½0Þš…OŸ·¡èqU‘–{ ×z²Á»"±÷΀ïöQLÝÍÄîxÐÜ,TI0!ü³›:àŒÉï"X‘&ˆ–.up…ñáÖáZÊ+æÄ‚®úÂɉ±¾Š„*Ô®k㻸Cyð:TÏ"ÿÒ½¿Oh¹.üçÊA_Ó á ¸wÛCŸÓ>6Î{Ãk)®¸˜ê‰##¶ŸÂeyq¨­™¸úxq×l’rt zè$]ÇäéZz°&(õ…º©€,ÎדÙlpn£ÅžXž«Š ]¤Úâø *Rö‡JØzSL³42`¢ÖY°hà†B¬< Õq¬L•/šHüò(ÍqûK1õ€×;](¯eb7?{ŸõJÊâüÚKg# âlˆSq¥´ÍÆ’ìf^g*?&Nч9E´ât7x@s4R—ëbɘ*.à@ì!!xô  KCåMðo‰˜Ë•q7C……cdqDU²øî8EW]¹°(L ëêåí0N¥’cdô‡œQÌo†ýWT8G‡ö̆ç65ÄT ¢«Œ‰­;Õ[§ ¯Å¤šc„{%²¸b§†£†ø›cÓ–¨åسã¸b¡††iu˜KÎÆÁV8§±ü2JäßLñ¯hînˆg^§(Á*z[ÒFAU‰tS°šÊЧéÖ vk¤Ðâ#Ó¤5”CççTÓÝ$ª´ºD¿Øõµ¦wˆî‹ÔRÄ×+$hÐA7[J(ôóŠm¢š ” †ÒeÕ´¤ãE70ÅÎgæ«ø>Qµ /.ýj$¹XYKw²õ`êRAwd&è,oI¥ñã篟ôb]!²uKÀ§úùEû=5Àï7C»ÄÈïETf̃›²,¤Mñ–)Šðº-øç\Ò¦Ôdi‹WKY€,¦jPŸh9Nª°ßÏBy®.¦¬š­ƒA7¼z!‹˜[7á³%êÙx0rÕ·ò`Ý{ïO#³à4ê©°ùç2ÜÔcFæ4lbSÔiŒ5¦cªð4Jr÷â·ÃY”Å]‡ðšKØ8ÿ$žõ¤bÀö žÃÖn)”s ÌË ôá`íˆé¯#¤||Þ&Л¤Î´SM@/ù¥Yâš«:xI 'H '-4p¢– þ³sñä²"v ÍÂü-ô— @,s‚ʤÝp@±œ|ü~ÓáX¼é—CF kŸü¢kgÛIæh+Í+”ÅPŒ RsåÁqÑœÞ~§Ÿ«dà,ÔÀr%1Tw°99%–¿Àb>0b°®ˆ¡bÓ¤t@c6JH åEÍb¸N‹áJ¤:ú¥DqäB==:@ŒM]4ºŠ³Êàøa#L›Ê£½ìun¶G¡ésºýª‰\ýÇiï\]œt€“Öeð‹Ã銜*z)ÓE ýâˆI5„Øiô~'¥t”*š`ûQœÐ°Aå;|+â_– þè@ŠS¸‚#yqù ›”›à0ïX?B¥™¸tA'ç+áz5±fh¸ª•¬–'‹”ºóF÷t;¨õÊ iɤœ„TG•§¤ÉÊyJÜÚeä0ÙKó·Ñö Nxß8HYÖc¼û…z‡û=`óâÂûbОÏÄzžTi¯ŽY.RH‰’ƒÛ˜2fÏg!4Q NïØÐÛ.Ð_6µ¹ÒxuT™!2¸½_ío%P¢æ‚&35ìoÃÍH-T-öÀƳÔb¦ ýæQò–Ó…ÿÍÙX£ÀSŸ]«‹Œà—Á‡Mc«Èæ*Uhl”†qš22Ži"`½""ê 0|t˜ú§80«µœf?œ  ÒœþÙIu…£¤u¬›8åñÆÕ¿$ôpã#.hì#ɽ&T™ö&=ìå2Gÿ*6oBͽ’,b °ŒkD‘¸Rg¥ŒµÊ¢l>»ýR Üc£d8®§VºøqÊrïjH½‡+k]°9P Ÿ#fˆñË 1÷yñ öÐmk ù°àº[Ч4pÙV %6X0r•zdyÐì¡¡rx* ôG ®ìÿ[±}S¿ .æB¦‰ 1ïè±ÎrRx2‘C¡‰m4þeœ®ðªcX‚²#*è {ì¼4°(¯”\sµ Úì³A¼ýZDïÚ‡¨ó!?º/!ñ‹Â¶‡IªV_T‡ JœèíŒ6Íá@¯( þ2jðÛõ‹ö&ŒS÷e Ü.¾A+¦Ea|f˜†)„5AÑÛ(9Z@/¥Xˆµ—׿o(-CÍï °¿‘žš<4¾‘„„“IÇ¥‰Â×)ê¡%´0<‡úC÷ÐÅN4ª“vÆÓH¦4¹Yl¡©oénú Gùš9ìñ†×¨ N¾Ñ…øW{4ͤƒžïÒÆúªplbãJâ¡NèaÞàgÊí~M[è1mæçÄɦqª©È¡„µB¨âì¡k}ä}jŠ*Fɵ½—nIK#Áÿ5ßâÁII¨îï#¯0v}p‹´&ô ùz1­cã­nÿ$Åîé¤õMÊhiV€þ[òž% ÉvH{÷…vh`\a˜’ÅÀ«ª æì7´IXÊùTw‰bϼ§Äº6:pæ½õýI_¿½¢äÛhË ylœVÀ¿"]zO §£ Q³Ú»y8°ß@̬/”}W dG)ÂQ íu²PH1Æžz#¼ÎA±ŠûN‚õÈFä;%á †õQ˜ˆBþ¯4löØÍM¨^›÷ïñ¸"š€è;L;‘6vÇ«©üT3µ¥Òšµo(æáÍx‰Â”ÅD\ñzÜ7FrI|&‘ŠIòz–Ëö„:|ÙEŒÜHn ï}¤·Všæ“tvô=•K'SZt.¼A¾j8TC=vÊ0÷äDB 7œ?ð"#ð¹+¿£å'„±õ”0’œÍaÈvÒvúTÕþœº6@Éþ5­÷âG©”’ZH«He߻Ȣ™ c·HÍ íjlïîôD,¶æ’37†Ú1¶ Ї@™ þ½­åF[ˆœ”Å'_)Ø;cÇqYÞ1CÓÝ) æaÇšCŠâÞ°-TÂËB*>šâc㉱ŠI’Ë3˜x.Îû`M¤)“Ñ^|ß0H•—e1qG 爉Jé8Ó} ¦O·c¿f ú^&âö£D¸g'Czô",JÆPP"öœÆÔµ•xÛ»ƒÉ°•±wÂ’ 8QÇxèßÌÆ%¿#ÈãKGÔâý˜¬O†äõ3H¾£‚¤¤jzp£Œ¨I -÷¹ð&ÞÔ?F×¹r‹í±VÈbü =dµRcf¥k)âÂÃ3ôM­ˆÆ/01>Å ŸœZÚÌDp¶.|rGHœÑ¥|HøfU4TŸÄ †;ê ÷àúëÕÈ?¿úÃqxh²? v³;".oCtQ®}Ýç¿;°þË<(³,qßëõnåÀÊ\ær#OKâóha qò’ˆå†ú*1¤ª)`ÙZ1dŠÍÆû=ô«ðƒ)® ‰ìñö,Ìå„Á—. /I.œhœ…õ¢ªxõÇ ½ñéX»&FÕÕáuG‡–Ù#ÆC±îiHJ;Šùq‹›­Í׳àÜUB*úVƒæiuðÄ©¡BY ¾Òìoâpá?JÏ6Ó[æ'2z ±Ñrê™q¬òé¤3œ†hê¤5‚X_AsæOÓ²wmz™¥šèê’×t;ö µ÷°ýa¦ Zmª)JŒçæ ãÏÛϼ–EζÕà‘sDî2Y.á‡i…V/šw¯L14¡à sp| Ëä´qCÂAzö°rD*Û#ʹ‰cår[H9CÚY VL?ôyjãPÐ_й ‡ð—&ðâ–D7ƒ!‘B˜˜o‡%ÔÐ’7 ÚòPÕ`à‡òû¤!ÿ¯$øB` ±Ì¦ù¢˜)‡2KÿM|kÞÑ^ö>ª÷Ñ„Ó1u|lBlÅ7z÷Uמ6Ñà/Mlu™¡‰__¨uÇ åMNRó<9Tv‘õðCZÓ"„n·1º—¨ ¡cñ±DmϘPÕþJ®ŠAºõ-ßàŠò.sðãÁ膚5¡d]#ıó3’@çQ]ÜQD¸Œ%¾ï¬$Ù’&Z-‚åwJèõ mü,V@¹ä"4]“FC©²Óf(1Ø VcDB‹ȾÌ•EØ)%d²õrÛÞYH`ë÷vƒp† VÄHƒ“Í»EüÂpã”C^Ž ½ùðÒ˜æÁž½LHÅêâBd…KÎÁƹjØwV»WéAfÊOxÔ‘+ˇ A¸ïï åê0)ÁžwÊxäÏ ÃA}<åWBAÅú.1EROZÉk®*:NÓnkKXºbåSø>œ¡åÉ<X(}¾å¸>)‹Þ-rضS‘n3d¿ª˜^-bküÍnÅ‹¿œ½t\¬‘ò^r¡¬G ½÷éã°͵ôºšnZ²À9Döwô°ŠõÆ,n¬m š’8ÓHåq2(ŽæG´‘Êö:æUаï—ÀçÅ€Á€4:%­±0ŒëÐg)…Æ@<•×ÁÜM‚Ð|¯ˆ6ÍQêâF^©8öФÙ¤ˆÉÀ¾¾Ÿrù±Šã]⃎çÚ6ÏÑ™8ÿ9n¾²†¹®,FŽºàÀ¿5´ŒÆ("Z_¯+âþ¤„Y•! ±®(³¦3)ò¸·V2DpWMv_Xè´ÆšcÖ¨[f¥RˆÄ }„…="3%q•¨ ÿ½%*XÍôôsµÇLÓh§l¶Ø`¾‡*~Sठ¦¿¼£ ÜX9DÌä|ƒÝ<&è ÌÇUóØX?dZI½æ(*UÆeb`)«—h'?‚=ziMD+={@&y¯é·üI*pj£Á˜ c ÓÔüú]1Ek¤ùð+ñ©3yP¬×K ¨oÿIG2`­ÃæÀü6jŽ‘Ç¶?n«£ŸL/d;èbµ0š{´±P–©àÈ_ °8Ùñç C>ˆYQˆì”ÀÛËÒø¤³Ç xŸÕKâ²¶0*’ƒå+M$4§£zÒx–2FÅÐsç/µ{\§íi™ô-K awixG&EÈw’ZÔQÊ,O®ÁUtÏ»„~ˆEP¯n3mcë-Ï3ç¨H«€¾ÕçR°üÍ O;Z6}£Öã•d¹KyÝóÕªˆßÙê8ûà ÚIæÐîFS½'Æõ° P "Éü¨d9c—ª#¢Ì†]’-TJÜñ.„ÇŸÊðóWAÓôï‡ÏypX`-Küç~;[ˆ®§úšðyÊ‚,÷ šWÁÂ)MÈuÉ ËGSÓÝó’YY Dü¢Úëlì†KžŠppàÇ,–*Æ»$ð¼A‘·>PÈvSŒŠñãþŽ(h&+#Ô…üòˆÏÔEæ^ØÏµEC ϘÃ$õË QRðu·N~!­ÒýFüz‰gÜ B\¸/s¶¿ûØLöú¸ñ¢†_cÛß=m‡o ¶¸ç¯€©gÊhd¯‹d• è=$7Ö|¨¸+à@ŧ™0¹®UiÊpã[†Âµ`ôà'‰ÈÁÙkŒ”㸑>4M:"­t<|šš¯ÑªP+X8![¦õܸl¥ dÛåÓ”:Žgˆà˜7–¶¿¦AS\0Öƒìo6¯s}£{ë%Ñ‘ÚH‡ŽC`Ÿ\9pò {4ÄP&¯ §÷Òza‹ÿ Ž dipy-0.10.1/dipy/data/files/grad_514.txt000066400000000000000000001013031263041327500175660ustar00rootroot00000000000000 0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000 1.6000000e+003 -2.0000000e-001 0.0000000e+000 0.0000000e+000 1.6000000e+003 0.0000000e+000 -2.0000000e-001 0.0000000e+000 1.6000000e+003 0.0000000e+000 0.0000000e+000 -2.0000000e-001 1.6000000e+003 0.0000000e+000 0.0000000e+000 2.0000000e-001 1.6000000e+003 0.0000000e+000 2.0000000e-001 0.0000000e+000 1.6000000e+003 2.0000000e-001 0.0000000e+000 0.0000000e+000 2.2627417e+003 -2.0000000e-001 -2.0000000e-001 0.0000000e+000 2.2627417e+003 -2.0000000e-001 0.0000000e+000 -2.0000000e-001 2.2627417e+003 -2.0000000e-001 0.0000000e+000 2.0000000e-001 2.2627417e+003 -2.0000000e-001 2.0000000e-001 0.0000000e+000 2.2627417e+003 0.0000000e+000 -2.0000000e-001 -2.0000000e-001 2.2627417e+003 0.0000000e+000 -2.0000000e-001 2.0000000e-001 2.2627417e+003 0.0000000e+000 2.0000000e-001 -2.0000000e-001 2.2627417e+003 0.0000000e+000 2.0000000e-001 2.0000000e-001 2.2627417e+003 2.0000000e-001 -2.0000000e-001 0.0000000e+000 2.2627417e+003 2.0000000e-001 0.0000000e+000 -2.0000000e-001 2.2627417e+003 2.0000000e-001 0.0000000e+000 2.0000000e-001 2.2627417e+003 2.0000000e-001 2.0000000e-001 0.0000000e+000 2.7712813e+003 -2.0000000e-001 -2.0000000e-001 -2.0000000e-001 2.7712813e+003 -2.0000000e-001 -2.0000000e-001 2.0000000e-001 2.7712813e+003 -2.0000000e-001 2.0000000e-001 -2.0000000e-001 2.7712813e+003 -2.0000000e-001 2.0000000e-001 2.0000000e-001 2.7712813e+003 2.0000000e-001 -2.0000000e-001 -2.0000000e-001 2.7712813e+003 2.0000000e-001 -2.0000000e-001 2.0000000e-001 2.7712813e+003 2.0000000e-001 2.0000000e-001 -2.0000000e-001 2.7712813e+003 2.0000000e-001 2.0000000e-001 2.0000000e-001 3.2000000e+003 -4.0000000e-001 0.0000000e+000 0.0000000e+000 3.2000000e+003 0.0000000e+000 -4.0000000e-001 0.0000000e+000 3.2000000e+003 0.0000000e+000 0.0000000e+000 -4.0000000e-001 3.2000000e+003 0.0000000e+000 0.0000000e+000 4.0000000e-001 3.2000000e+003 0.0000000e+000 4.0000000e-001 0.0000000e+000 3.2000000e+003 4.0000000e-001 0.0000000e+000 0.0000000e+000 3.5777088e+003 -4.0000000e-001 -2.0000000e-001 0.0000000e+000 3.5777088e+003 -4.0000000e-001 0.0000000e+000 -2.0000000e-001 3.5777088e+003 -4.0000000e-001 0.0000000e+000 2.0000000e-001 3.5777088e+003 -4.0000000e-001 2.0000000e-001 0.0000000e+000 3.5777088e+003 -2.0000000e-001 -4.0000000e-001 0.0000000e+000 3.5777088e+003 -2.0000000e-001 0.0000000e+000 -4.0000000e-001 3.5777088e+003 -2.0000000e-001 0.0000000e+000 4.0000000e-001 3.5777088e+003 -2.0000000e-001 4.0000000e-001 0.0000000e+000 3.5777088e+003 0.0000000e+000 -4.0000000e-001 -2.0000000e-001 3.5777088e+003 0.0000000e+000 -4.0000000e-001 2.0000000e-001 3.5777088e+003 0.0000000e+000 -2.0000000e-001 -4.0000000e-001 3.5777088e+003 0.0000000e+000 -2.0000000e-001 4.0000000e-001 3.5777088e+003 0.0000000e+000 2.0000000e-001 -4.0000000e-001 3.5777088e+003 0.0000000e+000 2.0000000e-001 4.0000000e-001 3.5777088e+003 0.0000000e+000 4.0000000e-001 -2.0000000e-001 3.5777088e+003 0.0000000e+000 4.0000000e-001 2.0000000e-001 3.5777088e+003 2.0000000e-001 -4.0000000e-001 0.0000000e+000 3.5777088e+003 2.0000000e-001 0.0000000e+000 -4.0000000e-001 3.5777088e+003 2.0000000e-001 0.0000000e+000 4.0000000e-001 3.5777088e+003 2.0000000e-001 4.0000000e-001 0.0000000e+000 3.5777088e+003 4.0000000e-001 -2.0000000e-001 0.0000000e+000 3.5777088e+003 4.0000000e-001 0.0000000e+000 -2.0000000e-001 3.5777088e+003 4.0000000e-001 0.0000000e+000 2.0000000e-001 3.5777088e+003 4.0000000e-001 2.0000000e-001 0.0000000e+000 3.9191836e+003 -4.0000000e-001 -2.0000000e-001 -2.0000000e-001 3.9191836e+003 -4.0000000e-001 -2.0000000e-001 2.0000000e-001 3.9191836e+003 -4.0000000e-001 2.0000000e-001 -2.0000000e-001 3.9191836e+003 -4.0000000e-001 2.0000000e-001 2.0000000e-001 3.9191836e+003 -2.0000000e-001 -4.0000000e-001 -2.0000000e-001 3.9191836e+003 -2.0000000e-001 -4.0000000e-001 2.0000000e-001 3.9191836e+003 -2.0000000e-001 -2.0000000e-001 -4.0000000e-001 3.9191836e+003 -2.0000000e-001 -2.0000000e-001 4.0000000e-001 3.9191836e+003 -2.0000000e-001 2.0000000e-001 -4.0000000e-001 3.9191836e+003 -2.0000000e-001 2.0000000e-001 4.0000000e-001 3.9191836e+003 -2.0000000e-001 4.0000000e-001 -2.0000000e-001 3.9191836e+003 -2.0000000e-001 4.0000000e-001 2.0000000e-001 3.9191836e+003 2.0000000e-001 -4.0000000e-001 -2.0000000e-001 3.9191836e+003 2.0000000e-001 -4.0000000e-001 2.0000000e-001 3.9191836e+003 2.0000000e-001 -2.0000000e-001 -4.0000000e-001 3.9191836e+003 2.0000000e-001 -2.0000000e-001 4.0000000e-001 3.9191836e+003 2.0000000e-001 2.0000000e-001 -4.0000000e-001 3.9191836e+003 2.0000000e-001 2.0000000e-001 4.0000000e-001 3.9191836e+003 2.0000000e-001 4.0000000e-001 -2.0000000e-001 3.9191836e+003 2.0000000e-001 4.0000000e-001 2.0000000e-001 3.9191836e+003 4.0000000e-001 -2.0000000e-001 -2.0000000e-001 3.9191836e+003 4.0000000e-001 -2.0000000e-001 2.0000000e-001 3.9191836e+003 4.0000000e-001 2.0000000e-001 -2.0000000e-001 3.9191836e+003 4.0000000e-001 2.0000000e-001 2.0000000e-001 4.5254834e+003 -4.0000000e-001 -4.0000000e-001 0.0000000e+000 4.5254834e+003 -4.0000000e-001 0.0000000e+000 -4.0000000e-001 4.5254834e+003 -4.0000000e-001 0.0000000e+000 4.0000000e-001 4.5254834e+003 -4.0000000e-001 4.0000000e-001 0.0000000e+000 4.5254834e+003 0.0000000e+000 -4.0000000e-001 -4.0000000e-001 4.5254834e+003 0.0000000e+000 -4.0000000e-001 4.0000000e-001 4.5254834e+003 0.0000000e+000 4.0000000e-001 -4.0000000e-001 4.5254834e+003 0.0000000e+000 4.0000000e-001 4.0000000e-001 4.5254834e+003 4.0000000e-001 -4.0000000e-001 0.0000000e+000 4.5254834e+003 4.0000000e-001 0.0000000e+000 -4.0000000e-001 4.5254834e+003 4.0000000e-001 0.0000000e+000 4.0000000e-001 4.5254834e+003 4.0000000e-001 4.0000000e-001 0.0000000e+000 4.8000000e+003 -6.0000000e-001 0.0000000e+000 0.0000000e+000 4.8000000e+003 -4.0000000e-001 -4.0000000e-001 -2.0000000e-001 4.8000000e+003 -4.0000000e-001 -4.0000000e-001 2.0000000e-001 4.8000000e+003 -4.0000000e-001 -2.0000000e-001 -4.0000000e-001 4.8000000e+003 -4.0000000e-001 -2.0000000e-001 4.0000000e-001 4.8000000e+003 -4.0000000e-001 2.0000000e-001 -4.0000000e-001 4.8000000e+003 -4.0000000e-001 2.0000000e-001 4.0000000e-001 4.8000000e+003 -4.0000000e-001 4.0000000e-001 -2.0000000e-001 4.8000000e+003 -4.0000000e-001 4.0000000e-001 2.0000000e-001 4.8000000e+003 -2.0000000e-001 -4.0000000e-001 -4.0000000e-001 4.8000000e+003 -2.0000000e-001 -4.0000000e-001 4.0000000e-001 4.8000000e+003 -2.0000000e-001 4.0000000e-001 -4.0000000e-001 4.8000000e+003 -2.0000000e-001 4.0000000e-001 4.0000000e-001 4.8000000e+003 0.0000000e+000 -6.0000000e-001 0.0000000e+000 4.8000000e+003 0.0000000e+000 0.0000000e+000 -6.0000000e-001 4.8000000e+003 0.0000000e+000 0.0000000e+000 6.0000000e-001 4.8000000e+003 0.0000000e+000 6.0000000e-001 0.0000000e+000 4.8000000e+003 2.0000000e-001 -4.0000000e-001 -4.0000000e-001 4.8000000e+003 2.0000000e-001 -4.0000000e-001 4.0000000e-001 4.8000000e+003 2.0000000e-001 4.0000000e-001 -4.0000000e-001 4.8000000e+003 2.0000000e-001 4.0000000e-001 4.0000000e-001 4.8000000e+003 4.0000000e-001 -4.0000000e-001 -2.0000000e-001 4.8000000e+003 4.0000000e-001 -4.0000000e-001 2.0000000e-001 4.8000000e+003 4.0000000e-001 -2.0000000e-001 -4.0000000e-001 4.8000000e+003 4.0000000e-001 -2.0000000e-001 4.0000000e-001 4.8000000e+003 4.0000000e-001 2.0000000e-001 -4.0000000e-001 4.8000000e+003 4.0000000e-001 2.0000000e-001 4.0000000e-001 4.8000000e+003 4.0000000e-001 4.0000000e-001 -2.0000000e-001 4.8000000e+003 4.0000000e-001 4.0000000e-001 2.0000000e-001 4.8000000e+003 6.0000000e-001 0.0000000e+000 0.0000000e+000 5.0596443e+003 -6.0000000e-001 -2.0000000e-001 0.0000000e+000 5.0596443e+003 -6.0000000e-001 0.0000000e+000 -2.0000000e-001 5.0596443e+003 -6.0000000e-001 0.0000000e+000 2.0000000e-001 5.0596443e+003 -6.0000000e-001 2.0000000e-001 0.0000000e+000 5.0596443e+003 -2.0000000e-001 -6.0000000e-001 0.0000000e+000 5.0596443e+003 -2.0000000e-001 0.0000000e+000 -6.0000000e-001 5.0596443e+003 -2.0000000e-001 0.0000000e+000 6.0000000e-001 5.0596443e+003 -2.0000000e-001 6.0000000e-001 0.0000000e+000 5.0596443e+003 0.0000000e+000 -6.0000000e-001 -2.0000000e-001 5.0596443e+003 0.0000000e+000 -6.0000000e-001 2.0000000e-001 5.0596443e+003 0.0000000e+000 -2.0000000e-001 -6.0000000e-001 5.0596443e+003 0.0000000e+000 -2.0000000e-001 6.0000000e-001 5.0596443e+003 0.0000000e+000 2.0000000e-001 -6.0000000e-001 5.0596443e+003 0.0000000e+000 2.0000000e-001 6.0000000e-001 5.0596443e+003 0.0000000e+000 6.0000000e-001 -2.0000000e-001 5.0596443e+003 0.0000000e+000 6.0000000e-001 2.0000000e-001 5.0596443e+003 2.0000000e-001 -6.0000000e-001 0.0000000e+000 5.0596443e+003 2.0000000e-001 0.0000000e+000 -6.0000000e-001 5.0596443e+003 2.0000000e-001 0.0000000e+000 6.0000000e-001 5.0596443e+003 2.0000000e-001 6.0000000e-001 0.0000000e+000 5.0596443e+003 6.0000000e-001 -2.0000000e-001 0.0000000e+000 5.0596443e+003 6.0000000e-001 0.0000000e+000 -2.0000000e-001 5.0596443e+003 6.0000000e-001 0.0000000e+000 2.0000000e-001 5.0596443e+003 6.0000000e-001 2.0000000e-001 0.0000000e+000 5.3065997e+003 -6.0000000e-001 -2.0000000e-001 -2.0000000e-001 5.3065997e+003 -6.0000000e-001 -2.0000000e-001 2.0000000e-001 5.3065997e+003 -6.0000000e-001 2.0000000e-001 -2.0000000e-001 5.3065997e+003 -6.0000000e-001 2.0000000e-001 2.0000000e-001 5.3065997e+003 -2.0000000e-001 -6.0000000e-001 -2.0000000e-001 5.3065997e+003 -2.0000000e-001 -6.0000000e-001 2.0000000e-001 5.3065997e+003 -2.0000000e-001 -2.0000000e-001 -6.0000000e-001 5.3065997e+003 -2.0000000e-001 -2.0000000e-001 6.0000000e-001 5.3065997e+003 -2.0000000e-001 2.0000000e-001 -6.0000000e-001 5.3065997e+003 -2.0000000e-001 2.0000000e-001 6.0000000e-001 5.3065997e+003 -2.0000000e-001 6.0000000e-001 -2.0000000e-001 5.3065997e+003 -2.0000000e-001 6.0000000e-001 2.0000000e-001 5.3065997e+003 2.0000000e-001 -6.0000000e-001 -2.0000000e-001 5.3065997e+003 2.0000000e-001 -6.0000000e-001 2.0000000e-001 5.3065997e+003 2.0000000e-001 -2.0000000e-001 -6.0000000e-001 5.3065997e+003 2.0000000e-001 -2.0000000e-001 6.0000000e-001 5.3065997e+003 2.0000000e-001 2.0000000e-001 -6.0000000e-001 5.3065997e+003 2.0000000e-001 2.0000000e-001 6.0000000e-001 5.3065997e+003 2.0000000e-001 6.0000000e-001 -2.0000000e-001 5.3065997e+003 2.0000000e-001 6.0000000e-001 2.0000000e-001 5.3065997e+003 6.0000000e-001 -2.0000000e-001 -2.0000000e-001 5.3065997e+003 6.0000000e-001 -2.0000000e-001 2.0000000e-001 5.3065997e+003 6.0000000e-001 2.0000000e-001 -2.0000000e-001 5.3065997e+003 6.0000000e-001 2.0000000e-001 2.0000000e-001 5.5425626e+003 -4.0000000e-001 -4.0000000e-001 -4.0000000e-001 5.5425626e+003 -4.0000000e-001 -4.0000000e-001 4.0000000e-001 5.5425626e+003 -4.0000000e-001 4.0000000e-001 -4.0000000e-001 5.5425626e+003 -4.0000000e-001 4.0000000e-001 4.0000000e-001 5.5425626e+003 4.0000000e-001 -4.0000000e-001 -4.0000000e-001 5.5425626e+003 4.0000000e-001 -4.0000000e-001 4.0000000e-001 5.5425626e+003 4.0000000e-001 4.0000000e-001 -4.0000000e-001 5.5425626e+003 4.0000000e-001 4.0000000e-001 4.0000000e-001 5.7688820e+003 -6.0000000e-001 -4.0000000e-001 0.0000000e+000 5.7688820e+003 -6.0000000e-001 0.0000000e+000 -4.0000000e-001 5.7688820e+003 -6.0000000e-001 0.0000000e+000 4.0000000e-001 5.7688820e+003 -6.0000000e-001 4.0000000e-001 0.0000000e+000 5.7688820e+003 -4.0000000e-001 -6.0000000e-001 0.0000000e+000 5.7688820e+003 -4.0000000e-001 0.0000000e+000 -6.0000000e-001 5.7688820e+003 -4.0000000e-001 0.0000000e+000 6.0000000e-001 5.7688820e+003 -4.0000000e-001 6.0000000e-001 0.0000000e+000 5.7688820e+003 0.0000000e+000 -6.0000000e-001 -4.0000000e-001 5.7688820e+003 0.0000000e+000 -6.0000000e-001 4.0000000e-001 5.7688820e+003 0.0000000e+000 -4.0000000e-001 -6.0000000e-001 5.7688820e+003 0.0000000e+000 -4.0000000e-001 6.0000000e-001 5.7688820e+003 0.0000000e+000 4.0000000e-001 -6.0000000e-001 5.7688820e+003 0.0000000e+000 4.0000000e-001 6.0000000e-001 5.7688820e+003 0.0000000e+000 6.0000000e-001 -4.0000000e-001 5.7688820e+003 0.0000000e+000 6.0000000e-001 4.0000000e-001 5.7688820e+003 4.0000000e-001 -6.0000000e-001 0.0000000e+000 5.7688820e+003 4.0000000e-001 0.0000000e+000 -6.0000000e-001 5.7688820e+003 4.0000000e-001 0.0000000e+000 6.0000000e-001 5.7688820e+003 4.0000000e-001 6.0000000e-001 0.0000000e+000 5.7688820e+003 6.0000000e-001 -4.0000000e-001 0.0000000e+000 5.7688820e+003 6.0000000e-001 0.0000000e+000 -4.0000000e-001 5.7688820e+003 6.0000000e-001 0.0000000e+000 4.0000000e-001 5.7688820e+003 6.0000000e-001 4.0000000e-001 0.0000000e+000 5.9866518e+003 -6.0000000e-001 -4.0000000e-001 -2.0000000e-001 5.9866518e+003 -6.0000000e-001 -4.0000000e-001 2.0000000e-001 5.9866518e+003 -6.0000000e-001 -2.0000000e-001 -4.0000000e-001 5.9866518e+003 -6.0000000e-001 -2.0000000e-001 4.0000000e-001 5.9866518e+003 -6.0000000e-001 2.0000000e-001 -4.0000000e-001 5.9866518e+003 -6.0000000e-001 2.0000000e-001 4.0000000e-001 5.9866518e+003 -6.0000000e-001 4.0000000e-001 -2.0000000e-001 5.9866518e+003 -6.0000000e-001 4.0000000e-001 2.0000000e-001 5.9866518e+003 -4.0000000e-001 -6.0000000e-001 -2.0000000e-001 5.9866518e+003 -4.0000000e-001 -6.0000000e-001 2.0000000e-001 5.9866518e+003 -4.0000000e-001 -2.0000000e-001 -6.0000000e-001 5.9866518e+003 -4.0000000e-001 -2.0000000e-001 6.0000000e-001 5.9866518e+003 -4.0000000e-001 2.0000000e-001 -6.0000000e-001 5.9866518e+003 -4.0000000e-001 2.0000000e-001 6.0000000e-001 5.9866518e+003 -4.0000000e-001 6.0000000e-001 -2.0000000e-001 5.9866518e+003 -4.0000000e-001 6.0000000e-001 2.0000000e-001 5.9866518e+003 -2.0000000e-001 -6.0000000e-001 -4.0000000e-001 5.9866518e+003 -2.0000000e-001 -6.0000000e-001 4.0000000e-001 5.9866518e+003 -2.0000000e-001 -4.0000000e-001 -6.0000000e-001 5.9866518e+003 -2.0000000e-001 -4.0000000e-001 6.0000000e-001 5.9866518e+003 -2.0000000e-001 4.0000000e-001 -6.0000000e-001 5.9866518e+003 -2.0000000e-001 4.0000000e-001 6.0000000e-001 5.9866518e+003 -2.0000000e-001 6.0000000e-001 -4.0000000e-001 5.9866518e+003 -2.0000000e-001 6.0000000e-001 4.0000000e-001 5.9866518e+003 2.0000000e-001 -6.0000000e-001 -4.0000000e-001 5.9866518e+003 2.0000000e-001 -6.0000000e-001 4.0000000e-001 5.9866518e+003 2.0000000e-001 -4.0000000e-001 -6.0000000e-001 5.9866518e+003 2.0000000e-001 -4.0000000e-001 6.0000000e-001 5.9866518e+003 2.0000000e-001 4.0000000e-001 -6.0000000e-001 5.9866518e+003 2.0000000e-001 4.0000000e-001 6.0000000e-001 5.9866518e+003 2.0000000e-001 6.0000000e-001 -4.0000000e-001 5.9866518e+003 2.0000000e-001 6.0000000e-001 4.0000000e-001 5.9866518e+003 4.0000000e-001 -6.0000000e-001 -2.0000000e-001 5.9866518e+003 4.0000000e-001 -6.0000000e-001 2.0000000e-001 5.9866518e+003 4.0000000e-001 -2.0000000e-001 -6.0000000e-001 5.9866518e+003 4.0000000e-001 -2.0000000e-001 6.0000000e-001 5.9866518e+003 4.0000000e-001 2.0000000e-001 -6.0000000e-001 5.9866518e+003 4.0000000e-001 2.0000000e-001 6.0000000e-001 5.9866518e+003 4.0000000e-001 6.0000000e-001 -2.0000000e-001 5.9866518e+003 4.0000000e-001 6.0000000e-001 2.0000000e-001 5.9866518e+003 6.0000000e-001 -4.0000000e-001 -2.0000000e-001 5.9866518e+003 6.0000000e-001 -4.0000000e-001 2.0000000e-001 5.9866518e+003 6.0000000e-001 -2.0000000e-001 -4.0000000e-001 5.9866518e+003 6.0000000e-001 -2.0000000e-001 4.0000000e-001 5.9866518e+003 6.0000000e-001 2.0000000e-001 -4.0000000e-001 5.9866518e+003 6.0000000e-001 2.0000000e-001 4.0000000e-001 5.9866518e+003 6.0000000e-001 4.0000000e-001 -2.0000000e-001 5.9866518e+003 6.0000000e-001 4.0000000e-001 2.0000000e-001 6.4000000e+003 -8.0000000e-001 0.0000000e+000 0.0000000e+000 6.4000000e+003 0.0000000e+000 -8.0000000e-001 0.0000000e+000 6.4000000e+003 0.0000000e+000 0.0000000e+000 -8.0000000e-001 6.4000000e+003 0.0000000e+000 0.0000000e+000 8.0000000e-001 6.4000000e+003 0.0000000e+000 8.0000000e-001 0.0000000e+000 6.4000000e+003 8.0000000e-001 0.0000000e+000 0.0000000e+000 6.5969690e+003 -8.0000000e-001 -2.0000000e-001 0.0000000e+000 6.5969690e+003 -8.0000000e-001 0.0000000e+000 -2.0000000e-001 6.5969690e+003 -8.0000000e-001 0.0000000e+000 2.0000000e-001 6.5969690e+003 -8.0000000e-001 2.0000000e-001 0.0000000e+000 6.5969690e+003 -6.0000000e-001 -4.0000000e-001 -4.0000000e-001 6.5969690e+003 -6.0000000e-001 -4.0000000e-001 4.0000000e-001 6.5969690e+003 -6.0000000e-001 4.0000000e-001 -4.0000000e-001 6.5969690e+003 -6.0000000e-001 4.0000000e-001 4.0000000e-001 6.5969690e+003 -4.0000000e-001 -6.0000000e-001 -4.0000000e-001 6.5969690e+003 -4.0000000e-001 -6.0000000e-001 4.0000000e-001 6.5969690e+003 -4.0000000e-001 -4.0000000e-001 -6.0000000e-001 6.5969690e+003 -4.0000000e-001 -4.0000000e-001 6.0000000e-001 6.5969690e+003 -4.0000000e-001 4.0000000e-001 -6.0000000e-001 6.5969690e+003 -4.0000000e-001 4.0000000e-001 6.0000000e-001 6.5969690e+003 -4.0000000e-001 6.0000000e-001 -4.0000000e-001 6.5969690e+003 -4.0000000e-001 6.0000000e-001 4.0000000e-001 6.5969690e+003 -2.0000000e-001 -8.0000000e-001 0.0000000e+000 6.5969690e+003 -2.0000000e-001 0.0000000e+000 -8.0000000e-001 6.5969690e+003 -2.0000000e-001 0.0000000e+000 8.0000000e-001 6.5969690e+003 -2.0000000e-001 8.0000000e-001 0.0000000e+000 6.5969690e+003 0.0000000e+000 -8.0000000e-001 -2.0000000e-001 6.5969690e+003 0.0000000e+000 -8.0000000e-001 2.0000000e-001 6.5969690e+003 0.0000000e+000 -2.0000000e-001 -8.0000000e-001 6.5969690e+003 0.0000000e+000 -2.0000000e-001 8.0000000e-001 6.5969690e+003 0.0000000e+000 2.0000000e-001 -8.0000000e-001 6.5969690e+003 0.0000000e+000 2.0000000e-001 8.0000000e-001 6.5969690e+003 0.0000000e+000 8.0000000e-001 -2.0000000e-001 6.5969690e+003 0.0000000e+000 8.0000000e-001 2.0000000e-001 6.5969690e+003 2.0000000e-001 -8.0000000e-001 0.0000000e+000 6.5969690e+003 2.0000000e-001 0.0000000e+000 -8.0000000e-001 6.5969690e+003 2.0000000e-001 0.0000000e+000 8.0000000e-001 6.5969690e+003 2.0000000e-001 8.0000000e-001 0.0000000e+000 6.5969690e+003 4.0000000e-001 -6.0000000e-001 -4.0000000e-001 6.5969690e+003 4.0000000e-001 -6.0000000e-001 4.0000000e-001 6.5969690e+003 4.0000000e-001 -4.0000000e-001 -6.0000000e-001 6.5969690e+003 4.0000000e-001 -4.0000000e-001 6.0000000e-001 6.5969690e+003 4.0000000e-001 4.0000000e-001 -6.0000000e-001 6.5969690e+003 4.0000000e-001 4.0000000e-001 6.0000000e-001 6.5969690e+003 4.0000000e-001 6.0000000e-001 -4.0000000e-001 6.5969690e+003 4.0000000e-001 6.0000000e-001 4.0000000e-001 6.5969690e+003 6.0000000e-001 -4.0000000e-001 -4.0000000e-001 6.5969690e+003 6.0000000e-001 -4.0000000e-001 4.0000000e-001 6.5969690e+003 6.0000000e-001 4.0000000e-001 -4.0000000e-001 6.5969690e+003 6.0000000e-001 4.0000000e-001 4.0000000e-001 6.5969690e+003 8.0000000e-001 -2.0000000e-001 0.0000000e+000 6.5969690e+003 8.0000000e-001 0.0000000e+000 -2.0000000e-001 6.5969690e+003 8.0000000e-001 0.0000000e+000 2.0000000e-001 6.5969690e+003 8.0000000e-001 2.0000000e-001 0.0000000e+000 6.7882251e+003 -8.0000000e-001 -2.0000000e-001 -2.0000000e-001 6.7882251e+003 -8.0000000e-001 -2.0000000e-001 2.0000000e-001 6.7882251e+003 -8.0000000e-001 2.0000000e-001 -2.0000000e-001 6.7882251e+003 -8.0000000e-001 2.0000000e-001 2.0000000e-001 6.7882251e+003 -6.0000000e-001 -6.0000000e-001 0.0000000e+000 6.7882251e+003 -6.0000000e-001 0.0000000e+000 -6.0000000e-001 6.7882251e+003 -6.0000000e-001 0.0000000e+000 6.0000000e-001 6.7882251e+003 -6.0000000e-001 6.0000000e-001 0.0000000e+000 6.7882251e+003 -2.0000000e-001 -8.0000000e-001 -2.0000000e-001 6.7882251e+003 -2.0000000e-001 -8.0000000e-001 2.0000000e-001 6.7882251e+003 -2.0000000e-001 -2.0000000e-001 -8.0000000e-001 6.7882251e+003 -2.0000000e-001 -2.0000000e-001 8.0000000e-001 6.7882251e+003 -2.0000000e-001 2.0000000e-001 -8.0000000e-001 6.7882251e+003 -2.0000000e-001 2.0000000e-001 8.0000000e-001 6.7882251e+003 -2.0000000e-001 8.0000000e-001 -2.0000000e-001 6.7882251e+003 -2.0000000e-001 8.0000000e-001 2.0000000e-001 6.7882251e+003 0.0000000e+000 -6.0000000e-001 -6.0000000e-001 6.7882251e+003 0.0000000e+000 -6.0000000e-001 6.0000000e-001 6.7882251e+003 0.0000000e+000 6.0000000e-001 -6.0000000e-001 6.7882251e+003 0.0000000e+000 6.0000000e-001 6.0000000e-001 6.7882251e+003 2.0000000e-001 -8.0000000e-001 -2.0000000e-001 6.7882251e+003 2.0000000e-001 -8.0000000e-001 2.0000000e-001 6.7882251e+003 2.0000000e-001 -2.0000000e-001 -8.0000000e-001 6.7882251e+003 2.0000000e-001 -2.0000000e-001 8.0000000e-001 6.7882251e+003 2.0000000e-001 2.0000000e-001 -8.0000000e-001 6.7882251e+003 2.0000000e-001 2.0000000e-001 8.0000000e-001 6.7882251e+003 2.0000000e-001 8.0000000e-001 -2.0000000e-001 6.7882251e+003 2.0000000e-001 8.0000000e-001 2.0000000e-001 6.7882251e+003 6.0000000e-001 -6.0000000e-001 0.0000000e+000 6.7882251e+003 6.0000000e-001 0.0000000e+000 -6.0000000e-001 6.7882251e+003 6.0000000e-001 0.0000000e+000 6.0000000e-001 6.7882251e+003 6.0000000e-001 6.0000000e-001 0.0000000e+000 6.7882251e+003 8.0000000e-001 -2.0000000e-001 -2.0000000e-001 6.7882251e+003 8.0000000e-001 -2.0000000e-001 2.0000000e-001 6.7882251e+003 8.0000000e-001 2.0000000e-001 -2.0000000e-001 6.7882251e+003 8.0000000e-001 2.0000000e-001 2.0000000e-001 6.9742383e+003 -6.0000000e-001 -6.0000000e-001 -2.0000000e-001 6.9742383e+003 -6.0000000e-001 -6.0000000e-001 2.0000000e-001 6.9742383e+003 -6.0000000e-001 -2.0000000e-001 -6.0000000e-001 6.9742383e+003 -6.0000000e-001 -2.0000000e-001 6.0000000e-001 6.9742383e+003 -6.0000000e-001 2.0000000e-001 -6.0000000e-001 6.9742383e+003 -6.0000000e-001 2.0000000e-001 6.0000000e-001 6.9742383e+003 -6.0000000e-001 6.0000000e-001 -2.0000000e-001 6.9742383e+003 -6.0000000e-001 6.0000000e-001 2.0000000e-001 6.9742383e+003 -2.0000000e-001 -6.0000000e-001 -6.0000000e-001 6.9742383e+003 -2.0000000e-001 -6.0000000e-001 6.0000000e-001 6.9742383e+003 -2.0000000e-001 6.0000000e-001 -6.0000000e-001 6.9742383e+003 -2.0000000e-001 6.0000000e-001 6.0000000e-001 6.9742383e+003 2.0000000e-001 -6.0000000e-001 -6.0000000e-001 6.9742383e+003 2.0000000e-001 -6.0000000e-001 6.0000000e-001 6.9742383e+003 2.0000000e-001 6.0000000e-001 -6.0000000e-001 6.9742383e+003 2.0000000e-001 6.0000000e-001 6.0000000e-001 6.9742383e+003 6.0000000e-001 -6.0000000e-001 -2.0000000e-001 6.9742383e+003 6.0000000e-001 -6.0000000e-001 2.0000000e-001 6.9742383e+003 6.0000000e-001 -2.0000000e-001 -6.0000000e-001 6.9742383e+003 6.0000000e-001 -2.0000000e-001 6.0000000e-001 6.9742383e+003 6.0000000e-001 2.0000000e-001 -6.0000000e-001 6.9742383e+003 6.0000000e-001 2.0000000e-001 6.0000000e-001 6.9742383e+003 6.0000000e-001 6.0000000e-001 -2.0000000e-001 6.9742383e+003 6.0000000e-001 6.0000000e-001 2.0000000e-001 7.1554175e+003 -8.0000000e-001 -4.0000000e-001 0.0000000e+000 7.1554175e+003 -8.0000000e-001 0.0000000e+000 -4.0000000e-001 7.1554175e+003 -8.0000000e-001 0.0000000e+000 4.0000000e-001 7.1554175e+003 -8.0000000e-001 4.0000000e-001 0.0000000e+000 7.1554175e+003 -4.0000000e-001 -8.0000000e-001 0.0000000e+000 7.1554175e+003 -4.0000000e-001 0.0000000e+000 -8.0000000e-001 7.1554175e+003 -4.0000000e-001 0.0000000e+000 8.0000000e-001 7.1554175e+003 -4.0000000e-001 8.0000000e-001 0.0000000e+000 7.1554175e+003 0.0000000e+000 -8.0000000e-001 -4.0000000e-001 7.1554175e+003 0.0000000e+000 -8.0000000e-001 4.0000000e-001 7.1554175e+003 0.0000000e+000 -4.0000000e-001 -8.0000000e-001 7.1554175e+003 0.0000000e+000 -4.0000000e-001 8.0000000e-001 7.1554175e+003 0.0000000e+000 4.0000000e-001 -8.0000000e-001 7.1554175e+003 0.0000000e+000 4.0000000e-001 8.0000000e-001 7.1554175e+003 0.0000000e+000 8.0000000e-001 -4.0000000e-001 7.1554175e+003 0.0000000e+000 8.0000000e-001 4.0000000e-001 7.1554175e+003 4.0000000e-001 -8.0000000e-001 0.0000000e+000 7.1554175e+003 4.0000000e-001 0.0000000e+000 -8.0000000e-001 7.1554175e+003 4.0000000e-001 0.0000000e+000 8.0000000e-001 7.1554175e+003 4.0000000e-001 8.0000000e-001 0.0000000e+000 7.1554175e+003 8.0000000e-001 -4.0000000e-001 0.0000000e+000 7.1554175e+003 8.0000000e-001 0.0000000e+000 -4.0000000e-001 7.1554175e+003 8.0000000e-001 0.0000000e+000 4.0000000e-001 7.1554175e+003 8.0000000e-001 4.0000000e-001 0.0000000e+000 7.3321211e+003 -8.0000000e-001 -4.0000000e-001 -2.0000000e-001 7.3321211e+003 -8.0000000e-001 -4.0000000e-001 2.0000000e-001 7.3321211e+003 -8.0000000e-001 -2.0000000e-001 -4.0000000e-001 7.3321211e+003 -8.0000000e-001 -2.0000000e-001 4.0000000e-001 7.3321211e+003 -8.0000000e-001 2.0000000e-001 -4.0000000e-001 7.3321211e+003 -8.0000000e-001 2.0000000e-001 4.0000000e-001 7.3321211e+003 -8.0000000e-001 4.0000000e-001 -2.0000000e-001 7.3321211e+003 -8.0000000e-001 4.0000000e-001 2.0000000e-001 7.3321211e+003 -4.0000000e-001 -8.0000000e-001 -2.0000000e-001 7.3321211e+003 -4.0000000e-001 -8.0000000e-001 2.0000000e-001 7.3321211e+003 -4.0000000e-001 -2.0000000e-001 -8.0000000e-001 7.3321211e+003 -4.0000000e-001 -2.0000000e-001 8.0000000e-001 7.3321211e+003 -4.0000000e-001 2.0000000e-001 -8.0000000e-001 7.3321211e+003 -4.0000000e-001 2.0000000e-001 8.0000000e-001 7.3321211e+003 -4.0000000e-001 8.0000000e-001 -2.0000000e-001 7.3321211e+003 -4.0000000e-001 8.0000000e-001 2.0000000e-001 7.3321211e+003 -2.0000000e-001 -8.0000000e-001 -4.0000000e-001 7.3321211e+003 -2.0000000e-001 -8.0000000e-001 4.0000000e-001 7.3321211e+003 -2.0000000e-001 -4.0000000e-001 -8.0000000e-001 7.3321211e+003 -2.0000000e-001 -4.0000000e-001 8.0000000e-001 7.3321211e+003 -2.0000000e-001 4.0000000e-001 -8.0000000e-001 7.3321211e+003 -2.0000000e-001 4.0000000e-001 8.0000000e-001 7.3321211e+003 -2.0000000e-001 8.0000000e-001 -4.0000000e-001 7.3321211e+003 -2.0000000e-001 8.0000000e-001 4.0000000e-001 7.3321211e+003 2.0000000e-001 -8.0000000e-001 -4.0000000e-001 7.3321211e+003 2.0000000e-001 -8.0000000e-001 4.0000000e-001 7.3321211e+003 2.0000000e-001 -4.0000000e-001 -8.0000000e-001 7.3321211e+003 2.0000000e-001 -4.0000000e-001 8.0000000e-001 7.3321211e+003 2.0000000e-001 4.0000000e-001 -8.0000000e-001 7.3321211e+003 2.0000000e-001 4.0000000e-001 8.0000000e-001 7.3321211e+003 2.0000000e-001 8.0000000e-001 -4.0000000e-001 7.3321211e+003 2.0000000e-001 8.0000000e-001 4.0000000e-001 7.3321211e+003 4.0000000e-001 -8.0000000e-001 -2.0000000e-001 7.3321211e+003 4.0000000e-001 -8.0000000e-001 2.0000000e-001 7.3321211e+003 4.0000000e-001 -2.0000000e-001 -8.0000000e-001 7.3321211e+003 4.0000000e-001 -2.0000000e-001 8.0000000e-001 7.3321211e+003 4.0000000e-001 2.0000000e-001 -8.0000000e-001 7.3321211e+003 4.0000000e-001 2.0000000e-001 8.0000000e-001 7.3321211e+003 4.0000000e-001 8.0000000e-001 -2.0000000e-001 7.3321211e+003 4.0000000e-001 8.0000000e-001 2.0000000e-001 7.3321211e+003 8.0000000e-001 -4.0000000e-001 -2.0000000e-001 7.3321211e+003 8.0000000e-001 -4.0000000e-001 2.0000000e-001 7.3321211e+003 8.0000000e-001 -2.0000000e-001 -4.0000000e-001 7.3321211e+003 8.0000000e-001 -2.0000000e-001 4.0000000e-001 7.3321211e+003 8.0000000e-001 2.0000000e-001 -4.0000000e-001 7.3321211e+003 8.0000000e-001 2.0000000e-001 4.0000000e-001 7.3321211e+003 8.0000000e-001 4.0000000e-001 -2.0000000e-001 7.3321211e+003 8.0000000e-001 4.0000000e-001 2.0000000e-001 7.5046652e+003 -6.0000000e-001 -6.0000000e-001 -4.0000000e-001 7.5046652e+003 -6.0000000e-001 -6.0000000e-001 4.0000000e-001 7.5046652e+003 -6.0000000e-001 -4.0000000e-001 -6.0000000e-001 7.5046652e+003 -6.0000000e-001 -4.0000000e-001 6.0000000e-001 7.5046652e+003 -6.0000000e-001 4.0000000e-001 -6.0000000e-001 7.5046652e+003 -6.0000000e-001 4.0000000e-001 6.0000000e-001 7.5046652e+003 -6.0000000e-001 6.0000000e-001 -4.0000000e-001 7.5046652e+003 -6.0000000e-001 6.0000000e-001 4.0000000e-001 7.5046652e+003 -4.0000000e-001 -6.0000000e-001 -6.0000000e-001 7.5046652e+003 -4.0000000e-001 -6.0000000e-001 6.0000000e-001 7.5046652e+003 -4.0000000e-001 6.0000000e-001 -6.0000000e-001 7.5046652e+003 -4.0000000e-001 6.0000000e-001 6.0000000e-001 7.5046652e+003 4.0000000e-001 -6.0000000e-001 -6.0000000e-001 7.5046652e+003 4.0000000e-001 -6.0000000e-001 6.0000000e-001 7.5046652e+003 4.0000000e-001 6.0000000e-001 -6.0000000e-001 7.5046652e+003 4.0000000e-001 6.0000000e-001 6.0000000e-001 7.5046652e+003 6.0000000e-001 -6.0000000e-001 -4.0000000e-001 7.5046652e+003 6.0000000e-001 -6.0000000e-001 4.0000000e-001 7.5046652e+003 6.0000000e-001 -4.0000000e-001 -6.0000000e-001 7.5046652e+003 6.0000000e-001 -4.0000000e-001 6.0000000e-001 7.5046652e+003 6.0000000e-001 4.0000000e-001 -6.0000000e-001 7.5046652e+003 6.0000000e-001 4.0000000e-001 6.0000000e-001 7.5046652e+003 6.0000000e-001 6.0000000e-001 -4.0000000e-001 7.5046652e+003 6.0000000e-001 6.0000000e-001 4.0000000e-001 7.8383672e+003 -8.0000000e-001 -4.0000000e-001 -4.0000000e-001 7.8383672e+003 -8.0000000e-001 -4.0000000e-001 4.0000000e-001 7.8383672e+003 -8.0000000e-001 4.0000000e-001 -4.0000000e-001 7.8383672e+003 -8.0000000e-001 4.0000000e-001 4.0000000e-001 7.8383672e+003 -4.0000000e-001 -8.0000000e-001 -4.0000000e-001 7.8383672e+003 -4.0000000e-001 -8.0000000e-001 4.0000000e-001 7.8383672e+003 -4.0000000e-001 -4.0000000e-001 -8.0000000e-001 7.8383672e+003 -4.0000000e-001 -4.0000000e-001 8.0000000e-001 7.8383672e+003 -4.0000000e-001 4.0000000e-001 -8.0000000e-001 7.8383672e+003 -4.0000000e-001 4.0000000e-001 8.0000000e-001 7.8383672e+003 -4.0000000e-001 8.0000000e-001 -4.0000000e-001 7.8383672e+003 -4.0000000e-001 8.0000000e-001 4.0000000e-001 7.8383672e+003 4.0000000e-001 -8.0000000e-001 -4.0000000e-001 7.8383672e+003 4.0000000e-001 -8.0000000e-001 4.0000000e-001 7.8383672e+003 4.0000000e-001 -4.0000000e-001 -8.0000000e-001 7.8383672e+003 4.0000000e-001 -4.0000000e-001 8.0000000e-001 7.8383672e+003 4.0000000e-001 4.0000000e-001 -8.0000000e-001 7.8383672e+003 4.0000000e-001 4.0000000e-001 8.0000000e-001 7.8383672e+003 4.0000000e-001 8.0000000e-001 -4.0000000e-001 7.8383672e+003 4.0000000e-001 8.0000000e-001 4.0000000e-001 7.8383672e+003 8.0000000e-001 -4.0000000e-001 -4.0000000e-001 7.8383672e+003 8.0000000e-001 -4.0000000e-001 4.0000000e-001 7.8383672e+003 8.0000000e-001 4.0000000e-001 -4.0000000e-001 7.8383672e+003 8.0000000e-001 4.0000000e-001 4.0000000e-001 8.0000000e+003 -1.0000000e+000 0.0000000e+000 0.0000000e+000 8.0000000e+003 -8.0000000e-001 -6.0000000e-001 0.0000000e+000 8.0000000e+003 -8.0000000e-001 0.0000000e+000 -6.0000000e-001 8.0000000e+003 -8.0000000e-001 0.0000000e+000 6.0000000e-001 8.0000000e+003 -8.0000000e-001 6.0000000e-001 0.0000000e+000 8.0000000e+003 -6.0000000e-001 -8.0000000e-001 0.0000000e+000 8.0000000e+003 -6.0000000e-001 0.0000000e+000 -8.0000000e-001 8.0000000e+003 -6.0000000e-001 0.0000000e+000 8.0000000e-001 8.0000000e+003 -6.0000000e-001 8.0000000e-001 0.0000000e+000 8.0000000e+003 0.0000000e+000 -1.0000000e+000 0.0000000e+000 8.0000000e+003 0.0000000e+000 -8.0000000e-001 -6.0000000e-001 8.0000000e+003 0.0000000e+000 -8.0000000e-001 6.0000000e-001 8.0000000e+003 0.0000000e+000 -6.0000000e-001 -8.0000000e-001 8.0000000e+003 0.0000000e+000 -6.0000000e-001 8.0000000e-001 8.0000000e+003 0.0000000e+000 0.0000000e+000 -1.0000000e+000 8.0000000e+003 0.0000000e+000 0.0000000e+000 1.0000000e+000 8.0000000e+003 0.0000000e+000 6.0000000e-001 -8.0000000e-001 8.0000000e+003 0.0000000e+000 6.0000000e-001 8.0000000e-001 8.0000000e+003 0.0000000e+000 8.0000000e-001 -6.0000000e-001 8.0000000e+003 0.0000000e+000 8.0000000e-001 6.0000000e-001 8.0000000e+003 0.0000000e+000 1.0000000e+000 0.0000000e+000 8.0000000e+003 6.0000000e-001 -8.0000000e-001 0.0000000e+000 8.0000000e+003 6.0000000e-001 0.0000000e+000 -8.0000000e-001 8.0000000e+003 6.0000000e-001 0.0000000e+000 8.0000000e-001 8.0000000e+003 6.0000000e-001 8.0000000e-001 0.0000000e+000 8.0000000e+003 8.0000000e-001 -6.0000000e-001 0.0000000e+000 8.0000000e+003 8.0000000e-001 0.0000000e+000 -6.0000000e-001 8.0000000e+003 8.0000000e-001 0.0000000e+000 6.0000000e-001 8.0000000e+003 8.0000000e-001 6.0000000e-001 0.0000000e+000 8.0000000e+003 1.0000000e+000 0.0000000e+000 0.0000000e+000 dipy-0.10.1/dipy/data/files/gtab_3shell.txt000066400000000000000000000347031263041327500204600ustar00rootroot000000000000000.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00 9.999789999999999281e+02,-5.040010000000000545e+00,-4.027949999999999697e+00 0.000000000000000000e+00,9.999919999999999618e+02,-3.987939999999999596e+00 -2.570550000000000068e+01,6.538609999999999900e+02,-7.561779999999999973e+02 5.895180000000000291e+02,-7.692359999999999900e+02,-2.464619999999999891e+02 -2.357849999999999966e+02,-5.290950000000000273e+02,-8.151469999999999345e+02 -8.935779999999999745e+02,-2.635589999999999691e+02,-3.633940000000000055e+02 7.978400000000000318e+02,1.337259999999999991e+02,-5.878509999999999991e+02 2.329370000000000118e+02,9.318840000000000146e+02,-2.780869999999999891e+02 9.367200000000000273e+02,1.441389999999999816e+02,-3.190299999999999727e+02 5.041299999999999955e+02,-8.466939999999999600e+02,1.701829999999999927e+02 3.451989999999999554e+02,-8.503110000000000355e+02,3.972520000000000095e+02 4.567649999999999864e+02,-6.356720000000000255e+02,6.223229999999999791e+02 -4.874809999999999945e+02,-3.939079999999999586e+02,-7.792289999999999281e+02 -6.170330000000000155e+02,6.768490000000000464e+02,-4.014300000000000068e+02 -5.785120000000000573e+02,-1.093469999999999942e+02,8.083110000000000355e+02 -8.253640000000000327e+02,-5.250339999999999918e+02,-2.076359999999999957e+02 8.950760000000000218e+02,-4.482420000000000471e+01,4.436550000000000296e+02 2.899920000000000186e+02,-5.454729999999999563e+02,7.863609999999999900e+02 1.150140000000000100e+02,-9.640499999999999545e+02,2.395409999999999968e+02 -7.999340000000000828e+02,4.077669999999999959e+02,4.402640000000000100e+02 5.124940000000000282e+02,8.421390000000000100e+02,-1.677849999999999966e+02 -7.900049999999999955e+02,1.579929999999999950e+02,5.923940000000000055e+02 9.492810000000000628e+02,-2.376949999999999932e+02,-2.058300000000000125e+02 2.323179999999999836e+02,7.870509999999999309e+02,-5.714719999999999800e+02 -1.967070000000000007e+01,-1.920310000000000059e+02,9.811920000000000073e+02 2.159689999999999941e+02,-9.571229999999999336e+02,-1.930610000000000070e+02 7.726449999999999818e+02,-6.075339999999999918e+02,-1.841800000000000068e+02 -1.601529999999999916e+02,3.604130000000000109e+02,-9.189410000000000309e+02 -1.461670000000000016e+02,7.352740000000000009e+02,6.618210000000000264e+02 8.873700000000000045e+02,4.211109999999999900e+02,-1.877239999999999895e+02 -5.629889999999999191e+02,2.364819999999999993e+02,7.919089999999999918e+02 -3.813129999999999882e+02,1.470370000000000061e+02,-9.126779999999999973e+02 -3.059540000000000077e+02,-2.037930000000000064e+02,9.299790000000000418e+02 -3.326819999999999595e+02,-1.341129999999999995e+02,-9.334539999999999509e+02 -9.622389999999999191e+02,-2.694639999999999986e+02,-3.853909999999999769e+01 -9.595320000000000391e+02,2.097700000000000102e+02,-1.878710000000000093e+02 4.509639999999999986e+02,-8.903369999999999891e+02,-6.270149999999999579e+01 -7.711920000000000073e+02,6.311750000000000682e+02,-8.295329999999999870e+01 7.098160000000000309e+02,4.131589999999999918e+02,-5.704919999999999618e+02 -6.945430000000000064e+02,2.793949999999999889e+01,-7.189080000000000155e+02 6.815489999999999782e+02,5.331009999999999991e+02,5.012930000000000064e+02 -1.416890000000000214e+02,-7.292409999999999854e+02,-6.694270000000000209e+02 -7.403509999999999991e+02,3.932230000000000132e+02,-5.452119999999999891e+02 -1.027560000000000002e+02,8.253669999999999618e+02,-5.551669999999999163e+02 5.839130000000000109e+02,-6.007820000000000391e+02,-5.459920000000000755e+02 -8.775499999999999545e+01,-3.396509999999999536e+02,-9.364489999999999554e+02 -5.505060000000000855e+02,-7.954839999999999236e+02,-2.532760000000000105e+02 8.374430000000000973e+02,-4.622019999999999982e+02,2.916480000000000246e+02 3.629289999999999736e+02,-5.659300000000000637e+02,-7.402740000000000009e+02 -1.836109999999999900e+02,3.970810000000000173e+02,8.992300000000000182e+02 -7.183230000000000928e+02,-6.957010000000000218e+02,-3.548969999999999736e+00 4.327819999999999823e+02,6.863609999999999900e+02,5.844730000000000700e+02 5.018369999999999891e+02,6.943369999999999891e+02,-5.158049999999999500e+02 -1.705180000000000007e+02,-5.137690000000000055e+02,8.408120000000000118e+02 4.631950000000000500e+02,4.280519999999999641e+02,-7.760289999999999964e+02 3.837130000000000223e+02,-8.125720000000000027e+02,-4.387379999999999995e+02 -7.141659999999999400e+02,-2.514669999999999845e+02,-6.532470000000000709e+02 2.592050000000000409e+02,8.872580000000000382e+02,3.815569999999999595e+02 0.000000000000000000e+00,8.131860000000000355e+01,9.966879999999999882e+02 3.636330000000000240e+01,-9.046159999999999854e+02,-4.246750000000000114e+02 5.708539999999999281e+02,-3.085970000000000368e+02,7.608509999999999991e+02 -2.822049999999999841e+02,1.497950000000000159e+02,9.475879999999999654e+02 7.203509999999999991e+02,6.119139999999999873e+02,-3.265830000000000268e+02 2.658909999999999627e+02,9.606829999999999927e+02,7.993519999999999470e+01 1.999957999999999856e+03,-1.008002000000000109e+01,-8.055899999999999395e+00 0.000000000000000000e+00,1.999983999999999924e+03,-7.975879999999999193e+00 -5.141100000000000136e+01,1.307721999999999980e+03,-1.512355999999999995e+03 1.179036000000000058e+03,-1.538471999999999980e+03,-4.929239999999999782e+02 -4.715699999999999932e+02,-1.058190000000000055e+03,-1.630293999999999869e+03 -1.787155999999999949e+03,-5.271179999999999382e+02,-7.267880000000000109e+02 1.595680000000000064e+03,2.674519999999999982e+02,-1.175701999999999998e+03 4.658740000000000236e+02,1.863768000000000029e+03,-5.561739999999999782e+02 1.873440000000000055e+03,2.882779999999999632e+02,-6.380599999999999454e+02 1.008259999999999991e+03,-1.693387999999999920e+03,3.403659999999999854e+02 6.903979999999999109e+02,-1.700622000000000071e+03,7.945040000000000191e+02 9.135299999999999727e+02,-1.271344000000000051e+03,1.244645999999999958e+03 -9.749619999999999891e+02,-7.878159999999999172e+02,-1.558457999999999856e+03 -1.234066000000000031e+03,1.353698000000000093e+03,-8.028600000000000136e+02 -1.157024000000000115e+03,-2.186939999999999884e+02,1.616622000000000071e+03 -1.650728000000000065e+03,-1.050067999999999984e+03,-4.152719999999999914e+02 1.790152000000000044e+03,-8.964840000000000941e+01,8.873100000000000591e+02 5.799840000000000373e+02,-1.090945999999999913e+03,1.572721999999999980e+03 2.300280000000000200e+02,-1.928099999999999909e+03,4.790819999999999936e+02 -1.599868000000000166e+03,8.155339999999999918e+02,8.805280000000000200e+02 1.024988000000000056e+03,1.684278000000000020e+03,-3.355699999999999932e+02 -1.580009999999999991e+03,3.159859999999999900e+02,1.184788000000000011e+03 1.898562000000000126e+03,-4.753899999999999864e+02,-4.116600000000000250e+02 4.646359999999999673e+02,1.574101999999999862e+03,-1.142943999999999960e+03 -3.934140000000000015e+01,-3.840620000000000118e+02,1.962384000000000015e+03 4.319379999999999882e+02,-1.914245999999999867e+03,-3.861220000000000141e+02 1.545289999999999964e+03,-1.215067999999999984e+03,-3.683600000000000136e+02 -3.203059999999999832e+02,7.208260000000000218e+02,-1.837882000000000062e+03 -2.923340000000000032e+02,1.470548000000000002e+03,1.323642000000000053e+03 1.774740000000000009e+03,8.422219999999999800e+02,-3.754479999999999791e+02 -1.125977999999999838e+03,4.729639999999999986e+02,1.583817999999999984e+03 -7.626259999999999764e+02,2.940740000000000123e+02,-1.825355999999999995e+03 -6.119080000000000155e+02,-4.075860000000000127e+02,1.859958000000000084e+03 -6.653639999999999191e+02,-2.682259999999999991e+02,-1.866907999999999902e+03 -1.924477999999999838e+03,-5.389279999999999973e+02,-7.707819999999999538e+01 -1.919064000000000078e+03,4.195400000000000205e+02,-3.757420000000000186e+02 9.019279999999999973e+02,-1.780673999999999978e+03,-1.254029999999999916e+02 -1.542384000000000015e+03,1.262350000000000136e+03,-1.659065999999999974e+02 1.419632000000000062e+03,8.263179999999999836e+02,-1.140983999999999924e+03 -1.389086000000000013e+03,5.587899999999999778e+01,-1.437816000000000031e+03 1.363097999999999956e+03,1.066201999999999998e+03,1.002586000000000013e+03 -2.833780000000000427e+02,-1.458481999999999971e+03,-1.338854000000000042e+03 -1.480701999999999998e+03,7.864460000000000264e+02,-1.090423999999999978e+03 -2.055120000000000005e+02,1.650733999999999924e+03,-1.110333999999999833e+03 1.167826000000000022e+03,-1.201564000000000078e+03,-1.091984000000000151e+03 -1.755099999999999909e+02,-6.793019999999999072e+02,-1.872897999999999911e+03 -1.101012000000000171e+03,-1.590967999999999847e+03,-5.065520000000000209e+02 1.674886000000000195e+03,-9.244039999999999964e+02,5.832960000000000491e+02 7.258579999999999472e+02,-1.131860000000000127e+03,-1.480548000000000002e+03 -3.672219999999999800e+02,7.941620000000000346e+02,1.798460000000000036e+03 -1.436646000000000186e+03,-1.391402000000000044e+03,-7.097939999999999472e+00 8.655639999999999645e+02,1.372721999999999980e+03,1.168946000000000140e+03 1.003673999999999978e+03,1.388673999999999978e+03,-1.031609999999999900e+03 -3.410360000000000014e+02,-1.027538000000000011e+03,1.681624000000000024e+03 9.263900000000001000e+02,8.561039999999999281e+02,-1.552057999999999993e+03 7.674260000000000446e+02,-1.625144000000000005e+03,-8.774759999999999991e+02 -1.428331999999999880e+03,-5.029339999999999691e+02,-1.306494000000000142e+03 5.184100000000000819e+02,1.774516000000000076e+03,7.631139999999999191e+02 0.000000000000000000e+00,1.626372000000000071e+02,1.993375999999999976e+03 7.272660000000000480e+01,-1.809231999999999971e+03,-8.493500000000000227e+02 1.141707999999999856e+03,-6.171940000000000737e+02,1.521701999999999998e+03 -5.644099999999999682e+02,2.995900000000000318e+02,1.895175999999999931e+03 1.440701999999999998e+03,1.223827999999999975e+03,-6.531660000000000537e+02 5.317819999999999254e+02,1.921365999999999985e+03,1.598703999999999894e+02 3.499926500000000033e+03,-1.764003500000000102e+01,-1.409782499999999850e+01 0.000000000000000000e+00,3.499971999999999753e+03,-1.395778999999999925e+01 -8.996925000000000239e+01,2.288513500000000022e+03,-2.646623000000000047e+03 2.063313000000000102e+03,-2.692326000000000022e+03,-8.626169999999999618e+02 -8.252474999999999454e+02,-1.851832499999999982e+03,-2.853014499999999771e+03 -3.127523000000000138e+03,-9.224565000000000055e+02,-1.271878999999999905e+03 2.792440000000000055e+03,4.680410000000000537e+02,-2.057478500000000167e+03 8.152794999999999845e+02,3.261594000000000051e+03,-9.733044999999999618e+02 3.278519999999999982e+03,5.044864999999999782e+02,-1.116605000000000018e+03 1.764454999999999927e+03,-2.963428999999999633e+03,5.956404999999999745e+02 1.208196500000000015e+03,-2.976088500000000295e+03,1.390382000000000062e+03 1.598677500000000009e+03,-2.224851999999999862e+03,2.178130499999999756e+03 -1.706183500000000095e+03,-1.378677999999999884e+03,-2.727301500000000033e+03 -2.159615500000000338e+03,2.368971500000000106e+03,-1.405005000000000109e+03 -2.024792000000000144e+03,-3.827144999999999868e+02,2.829088499999999840e+03 -2.888773999999999887e+03,-1.837618999999999915e+03,-7.267259999999999991e+02 3.132766000000000076e+03,-1.568847000000000094e+02,1.552792500000000018e+03 1.014972000000000094e+03,-1.909155499999999847e+03,2.752263500000000022e+03 4.025490000000000350e+02,-3.374174999999999727e+03,8.383935000000000173e+02 -2.799769000000000233e+03,1.427184500000000071e+03,1.540923999999999978e+03 1.793729000000000042e+03,2.947486499999999978e+03,-5.872474999999999454e+02 -2.765017499999999927e+03,5.529755000000000109e+02,2.073378999999999905e+03 3.322483500000000276e+03,-8.319325000000000045e+02,-7.204050000000000864e+02 8.131129999999999427e+02,2.754678499999999985e+03,-2.000152000000000044e+03 -6.884744999999999493e+01,-6.721085000000000491e+02,3.434172000000000025e+03 7.558914999999999509e+02,-3.349930499999999938e+03,-6.757135000000000673e+02 2.704257500000000164e+03,-2.126369000000000142e+03,-6.446299999999999955e+02 -5.605354999999999563e+02,1.261445500000000038e+03,-3.216293500000000222e+03 -5.115844999999999914e+02,2.573458999999999833e+03,2.316373500000000149e+03 3.105795000000000073e+03,1.473888500000000022e+03,-6.570339999999999918e+02 -1.970461499999999887e+03,8.276870000000000118e+02,2.771681499999999687e+03 -1.334595500000000129e+03,5.146295000000000073e+02,-3.194373000000000047e+03 -1.070838999999999942e+03,-7.132754999999999654e+02,3.254926500000000033e+03 -1.164386999999999944e+03,-4.693955000000000268e+02,-3.267088999999999942e+03 -3.367836499999999887e+03,-9.431239999999999100e+02,-1.348868500000000097e+02 -3.358362000000000080e+03,7.341950000000000500e+02,-6.575484999999999900e+02 1.578374000000000024e+03,-3.116179500000000189e+03,-2.194552499999999782e+02 -2.699172000000000025e+03,2.209112500000000182e+03,-2.903365499999999884e+02 2.484356000000000222e+03,1.446056499999999915e+03,-1.996721999999999980e+03 -2.430900500000000193e+03,9.778824999999999079e+01,-2.516177999999999884e+03 2.385421499999999924e+03,1.865853500000000167e+03,1.754525499999999965e+03 -4.959115000000000464e+02,-2.552343499999999949e+03,-2.342994499999999789e+03 -2.591228499999999713e+03,1.376280500000000075e+03,-1.908242000000000189e+03 -3.596460000000000150e+02,2.888784499999999753e+03,-1.943084499999999935e+03 2.043695500000000038e+03,-2.102737000000000080e+03,-1.910972000000000207e+03 -3.071424999999999841e+02,-1.188778499999999894e+03,-3.277571500000000015e+03 -1.926771000000000186e+03,-2.784193999999999960e+03,-8.864660000000000082e+02 2.931050500000000284e+03,-1.617707000000000107e+03,1.020768000000000029e+03 1.270251500000000078e+03,-1.980755000000000109e+03,-2.590958999999999833e+03 -6.426385000000000218e+02,1.389783500000000004e+03,3.147304999999999836e+03 -2.514130500000000211e+03,-2.434953500000000076e+03,-1.242139499999999863e+01 1.514737000000000080e+03,2.402263500000000022e+03,2.045655500000000075e+03 1.756429499999999962e+03,2.430179499999999734e+03,-1.805317499999999882e+03 -5.968129999999999882e+02,-1.798191500000000133e+03,2.942842000000000098e+03 1.621182500000000118e+03,1.498182000000000016e+03,-2.716101499999999760e+03 1.342995499999999993e+03,-2.844001999999999953e+03,-1.535583000000000084e+03 -2.499580999999999676e+03,-8.801345000000000027e+02,-2.286364500000000135e+03 9.072175000000000864e+02,3.105402999999999793e+03,1.335449499999999944e+03 0.000000000000000000e+00,2.846151000000000408e+02,3.488407999999999902e+03 1.272715500000000048e+02,-3.166155999999999949e+03,-1.486362500000000182e+03 1.997988999999999805e+03,-1.080089500000000044e+03,2.662978500000000167e+03 -9.877174999999999727e+02,5.242825000000000273e+02,3.316557999999999993e+03 2.521228499999999713e+03,2.141699000000000069e+03,-1.143040500000000065e+03 9.306184999999999263e+02,3.362390499999999975e+03,2.797731999999999744e+02 dipy-0.10.1/dipy/data/files/gtab_isbi2013_2shell.txt000066400000000000000000000114371263041327500217720ustar00rootroot000000000000000.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00 -2.266327214356250806e+03,-9.183275903750475209e+02,-5.200340317942658430e+02 -3.451967493954964539e+02,2.539315081030927601e+01,1.459518548048878984e+03 -8.687821369576009829e+02,2.323250139612324801e+03,-3.126121995295425791e+02 -1.332678531203753437e+03,6.057252180305250704e+02,-3.272077210434978838e+02 -7.133089050173707619e+02,5.552534181107091626e+02,2.330854789063293993e+03 -5.909558927697119088e+02,-1.373764685157115309e+03,-1.163689074277325233e+02 -9.620046143336023761e+02,-1.663268413255978658e+03,1.599401546662312057e+03 1.524040250997601333e+03,-4.976289031939233496e+02,1.918245757989622234e+03 -1.310906776715079332e+03,-4.267496519835166850e+02,5.911075682939853095e+02 2.137449464632421950e+03,-9.795263447809793433e+02,-8.496104554574311578e+02 8.036905147915512089e+02,4.652768750402192950e+02,1.177963915401019221e+03 6.118441408476945753e+02,2.071391299541785429e+03,1.258961807003270678e+03 3.149948695314147926e+02,-1.233873374323025928e+03,7.926756766203922098e+02 -2.016575661811054943e+03,-5.906019227499958788e+02,1.354478485999431769e+03 6.460309928619076345e+02,-1.121364874288886767e+03,-7.584093716278345028e+02 6.044230534930856038e+02,-1.608119359468752464e+03,1.816211688682767090e+03 -8.824433249298083410e+02,-9.492765701355546071e+02,-2.137795072423571582e+03 5.310700425339645108e+02,8.492127701239588760e+02,-1.116603009570261293e+03 -1.054671935951507294e+03,-2.258501524869488094e+03,1.919322007337414959e+02 -1.373961930556389689e+03,-3.773567140735632961e+02,-4.688608788599892705e+02 2.071938848285220956e+03,-1.281610506785919370e+03,5.608421505757620480e+02 -1.311137097464583690e+02,-1.074853619200096091e+03,-1.038026441093374387e+03 8.942967847836255260e+02,-1.808493731043927937e+03,-1.476341317412907301e+03 1.764983771476244669e+02,6.108062603280885696e+02,-2.417801487965517026e+03 6.987629376269226213e+02,-5.293533263847286889e+02,1.217175177550222770e+03 2.498545348743911745e+03,-7.606967381351635993e+01,3.852979361575307138e+01 -1.215314074213265940e+03,4.552574404363761573e+02,7.521651174751937106e+02 -1.626364931671346767e+03,-1.503360529448681746e+03,-1.159674190247172191e+03 -3.607006642415059332e+02,1.455976251491915491e+03,5.309040147464097359e+00 8.331893303581111354e+01,2.340805027516016253e+03,-8.738934594980764814e+02 1.124353191327967352e+03,9.833302798737638568e+02,-1.374462143312825049e+02 -1.653720553265972285e+03,4.593280934373784135e+02,1.817753017955097675e+03 -3.759970659660853016e+02,2.382088554995548748e+03,6.589994859968487617e+02 3.001173301911491649e+02,3.906608855968609362e+01,1.469150580724652400e+03 -2.128663806851728168e+03,-2.144264981200675990e+01,-1.310851101448424743e+03 -1.030316972919468753e+03,1.089894130130593567e+03,2.403581537912267052e+01 -1.901566073143071662e+03,-1.487916930230456046e+03,6.481895387961882307e+02 -9.451522326186659484e+02,-1.215736079475225040e+02,1.158407145621336895e+03 6.878294554085988466e+02,-8.127358768845556369e+01,2.402141803519633413e+03 1.624240188331681566e+03,-1.850731259269334714e+03,-4.320157596333787637e+02 8.200799773977817040e+02,1.037808396856925128e+03,7.074055145986018260e+02 1.175216553582782353e+03,7.076400293120931337e+02,-2.090002784950342630e+03 -3.784281936408362981e+02,-1.317364986763873276e+03,6.093780385822526569e+02 1.423187921813606181e+03,-1.642128421682733006e+03,1.236102902636202316e+03 1.208722462037743981e+03,-2.384435267328210273e+02,8.556486979623286970e+02 3.773953003791272209e+01,-1.451307454120837292e+03,-2.035259787222704063e+03 -4.951854729525189782e+02,6.748410455297414501e+02,1.244741302699125299e+03 1.670044415493887072e+03,1.836049453503702352e+03,2.997900174562804523e+02 -2.363898709855261586e+03,1.599047940265688794e+01,8.134661603982726774e+02 -1.488815236979110068e+03,1.018782253857645372e+02,1.518223215837661542e+02 1.956382677784426107e+02,1.565485886215385335e+03,-1.939324523704342937e+03 -8.612954914426065045e+01,7.484932807333950677e+02,-1.297050311075543959e+03 1.660689898552811883e+03,6.556327428480628896e+02,1.749929932125905907e+03 3.214001834136819724e+01,1.420492248229029428e+03,4.808001580098056706e+02 -2.912991904832986734e+02,-2.478128359467806149e+03,-1.549987600762498516e+02 1.516096796083063509e+03,-1.290727017378622122e+03,-1.511778512717902004e+03 -8.822996955012581566e+02,1.048749381914242576e+03,-6.096490640137826631e+02 -2.031307195810249823e+03,8.358456205600374460e+02,-1.193797794787752991e+03 9.602188732099014032e+02,9.029973251154810896e+02,-7.159438150901182780e+02 -6.268612903098597400e+01,-5.301030544174469696e+02,-2.442347477515107130e+03 -1.907738712044329077e+02,-6.099802978175640646e+02,-1.357029611445553428e+03 1.221964464137328832e+03,1.961471459061434871e+03,-9.536417375896357953e+02 -2.341088661959557612e+03,-8.057016790353089846e+02,3.466246979718731609e+02 dipy-0.10.1/dipy/data/files/gtab_taiwan_dsi.txt000066400000000000000000000362501263041327500214070ustar00rootroot000000000000000.000000000000000000e+00,0.000000000000000000e+00,0.000000000000000000e+00 3.060599742382443651e+02,-2.765200783212004509e+01,-2.065571669387280451e+01 -2.575623717651059152e+01,-3.056332799436796108e+02,2.808762071403956995e+01 -2.298419703420260873e+01,-2.631524008263777148e+01,-3.060118213829101137e+02 2.288267619722078194e+01,2.621510476963157643e+01,3.060280238997245874e+02 2.565432154927272634e+01,3.056307052103832689e+02,-2.820864793729555231e+01 -3.060786255380648981e+02,2.753264386414221931e+01,2.053846417284802328e+01 3.957169112450297348e+02,-4.706585449911170258e+02,1.066115291785341590e+01 3.996136383112861949e+02,-7.619153715938998062e+01,-4.612253134216570629e+02 4.645188593254337093e+02,-1.881913001993654078e+00,4.030430345936409822e+02 4.684046378059773588e+02,3.925064641541216588e+02,-6.899833968350519342e+01 -6.881458102723127013e+01,-4.686915655385455466e+02,-3.921960859456324329e+02 -3.919827094470945017e+00,-3.944913987875558519e+02,4.717903890905229218e+02 3.762919180145303244e+00,3.943225724193932820e+02,-4.719327805098901081e+02 6.868429110232389689e+01,4.687154020658587683e+02,3.921904384632695724e+02 -4.684076386195116584e+02,-3.925343798873016112e+02,6.881892682528970795e+01 -4.645089378174691888e+02,1.724467875798906924e+00,-4.030551735162717932e+02 -3.997932084373172188e+02,7.603910042827406812e+01,4.610948337310392162e+02 -3.958842029919957213e+02,4.705142547243480635e+02,-1.081822178473176344e+01 4.451682293263964993e+02,-6.221211594988657225e+02,-5.164489427834931803e+02 5.247096225433380141e+02,-5.312420748196007025e+02,5.425778008284095222e+02 5.342094714925420931e+02,4.354383677705396849e+02,-6.139565688556374425e+02 6.137389895140746603e+02,5.265011995205273934e+02,4.450280212005625913e+02 -6.137117042060538097e+02,-5.265050958462578592e+02,-4.450610386996640955e+02 -5.343587285723475588e+02,-4.355955547189902859e+02,6.137151309097728245e+02 -5.248382747781089392e+02,5.309857216276328700e+02,-5.427042921845379624e+02 -4.454299932274629441e+02,6.220262675053053272e+02,5.163375288188925651e+02 1.223260965509586185e+03,-1.105195865064901852e+02,-8.233487267852983393e+01 -1.027376982809065424e+02,-1.221535699862614365e+03,1.125011080527421541e+02 -9.186216412046562141e+01,-1.051755212393736798e+02,-1.223053740657020626e+03 9.165933192442591348e+01,1.049754576277323395e+02,1.223086145848695423e+03 1.025339929453075456e+02,1.221530513357083919e+03,-1.127430052299052647e+02 -1.223298245390085640e+03,1.102810135967481386e+02,8.210055338188493579e+01 1.309532167632073424e+03,-8.060567319704998681e+02,-2.901804235093799278e+01 1.315616458707049787e+03,-1.822767383882529089e+02,-7.754821237279820707e+02 1.418301908210537704e+03,-6.473885939890702446e+01,5.913311908313959293e+02 1.424390160056957939e+03,5.590415150214839741e+02,-1.550137297641648502e+02 5.685897422544877600e+02,-1.426805659368653551e+03,7.984557217878109725e+01 5.807895781612451174e+02,-1.792958433008455472e+02,-1.412791727918280685e+03 7.860309621033701433e+02,5.556040880755914202e+01,1.320799896876126923e+03 7.981451219078418262e+02,1.303372472226758418e+03,-1.721294949049230354e+02 -1.661319996627892408e+02,-1.423776032930948986e+03,-5.574100525999256206e+02 -6.373182475918985546e+01,-1.306378415686428752e+03,8.091709890631771032e+02 -1.599399102184175092e+02,-7.999475199451392200e+02,-1.303820229346417591e+03 4.513471650802490842e+01,-5.651759281416964313e+02,1.429679344333865856e+03 -4.537838032058055404e+01,5.648740457392486860e+02,-1.429790934035341252e+03 1.597298441428331159e+02,7.998893592556471503e+02,1.303881662513778792e+03 6.348757213011214873e+01,1.306207196911330811e+03,-8.094665446589300473e+02 1.659213869491033790e+02,1.423848553773994809e+03,5.572875283626835881e+02 -7.982316475003476626e+02,-1.303356800019206958e+03,1.718467013723954437e+02 -7.861007442366864097e+02,-5.579579414929161629e+01,-1.320748442840565076e+03 -5.810991571178793720e+02,1.790668337341480481e+02,1.412693469459428343e+03 -5.688841082168794401e+02,1.426674051687754172e+03,-8.010007277857546626e+01 -1.424365082466851163e+03,-5.591823225910078463e+02,1.547360395994629130e+02 -1.418260680277899155e+03,6.447766687747051151e+01,-5.914585980875659743e+02 -1.315815036927222764e+03,1.820219067290956900e+02,7.752050142168296816e+02 -1.309714981246806929e+03,8.057685995210898682e+02,2.876859265757046202e+01 1.378532999392024294e+03,-9.475546163768949555e+02,-7.807067430028159833e+02 1.491101612643861017e+03,-8.187878911784133606e+02,7.168810013039011437e+02 1.504378911701863899e+03,5.481091518971567211e+02,-9.187689849104049244e+02 1.616920918173165774e+03,6.769327743141775500e+02,5.788305135645115342e+02 5.667300689798133817e+02,-1.627650931571458386e+03,-6.612756413695425408e+02 6.790192881037959296e+02,-1.499059388742953843e+03,8.363430847472923233e+02 5.735820095967370662e+02,-9.441958708425680697e+02,-1.478923201437725993e+03 7.983763482558605347e+02,-6.869623581997329893e+02,1.516045489080818697e+03 6.993954119729967260e+02,5.513105248225369905e+02,-1.616978281527312674e+03 9.242276633949672942e+02,8.090049261766590689e+02,1.378053067061416868e+03 8.184834411452368386e+02,1.363595586874766923e+03,-9.372341927323776645e+02 9.307480713274635491e+02,1.492457929264358881e+03,5.603511016283881645e+02 -9.307983572293142061e+02,-1.492374599025283942e+03,-5.604894953193447691e+02 -8.186738917716397737e+02,-1.363731915964772497e+03,9.368694254326629789e+02 -9.242700904801380375e+02,-8.090759345825546234e+02,-1.377982921491845900e+03 -6.996875391908079109e+02,-5.515983318669281061e+02,1.616753731334099712e+03 -7.985444365880805435e+02,6.866014941334057085e+02,-1.516120434216226386e+03 -5.739383475486121142e+02,9.440633614507000857e+02,1.478869548939179822e+03 -6.792900994017161338e+02,1.498785675319946449e+03,-8.366136864231536947e+02 -5.670796005299498574e+02,1.627602686715093341e+03,6.610947139862807944e+02 -1.616822270023855481e+03,-6.770494197444879774e+02,-5.789696282004430259e+02 -1.504514594681671042e+03,-5.483313079406922270e+02,9.184141827747965863e+02 -1.491208124943704888e+03,8.184254504975290274e+02,-7.170732947752254631e+02 -1.378843147706513491e+03,9.473092654522874909e+02,7.804567442280463183e+02 1.584489418789225056e+03,-1.883876011287723486e+03,4.299367208835884213e+01 1.599907036018945064e+03,-3.050430833680687215e+02,-1.846263847175255933e+03 1.859720871054988265e+03,-7.533046566298685853e+00,1.613327472948968989e+03 1.875300406678335321e+03,1.571172190097363455e+03,-2.758810138025534684e+02 -2.751990001622239674e+02,-1.876185657890463972e+03,-1.570234659990613864e+03 -1.569180411383414153e+01,-1.578909329933991330e+03,1.888979379223353817e+03 1.537773327623712483e+01,1.578571395499443724e+03,-1.889264373937704022e+03 2.749381736675210277e+02,1.876233335826987286e+03,1.570223382258684524e+03 -1.875306372629160023e+03,-1.571228080280154927e+03,2.755219202089027135e+02 -1.859701003363345308e+03,7.217874295875285284e+00,-1.613351815438906215e+03 -1.600266513440163635e+03,3.047379455874483369e+02,1.846002673476180007e+03 -1.584824240270395876e+03,1.883587146555032405e+03,-4.330806834798309524e+01 2.751580822960364912e+03,-2.486007347304538655e+02,-1.853689548124000055e+02 1.611398444426871265e+03,-2.076314517715665261e+03,-8.715928389000364405e+02 1.749091243873480607e+03,-1.918809001555268196e+03,9.623995200308421545e+02 1.619574944353243382e+03,-1.239222743532253617e+03,-1.873143078233903225e+03 1.894949501326790141e+03,-9.241789190699852270e+02,1.795110223069319545e+03 1.773664275765259617e+03,5.923306586983419493e+02,-2.042209692377373131e+03 2.049108372268141011e+03,9.079044404007614730e+02,1.626107439808695290e+03 1.919606900134974694e+03,1.587136842361944446e+03,-1.209738398403369274e+03 2.057250984517960205e+03,1.745052080865178141e+03,6.243978073055643563e+02 6.253118210934724175e+02,-2.072281378365647925e+03,-1.726845683690275791e+03 9.005755011350458972e+02,-1.757220490019601584e+03,1.941262711796275880e+03 9.335012295928689809e+02,1.591112077962034391e+03,-2.065017871523619306e+03 1.208827791671634941e+03,1.906766084385130853e+03,1.603227828326614826e+03 -2.312749624868818046e+02,-2.747679662236234435e+03,2.532377646798806836e+02 -2.066585745791770137e+02,-2.366090926341302065e+02,-2.751121475114422537e+03 2.063543985318382852e+02,2.363090692864599873e+02,2.751170093974476913e+03 2.309695126782845591e+02,2.747671897221782274e+03,-2.536005312116034816e+02 -1.208912988988030747e+03,-1.906708347619437291e+03,-1.603232254595191762e+03 -9.338153802740702076e+02,-1.591413096390093870e+03,2.064643841489782972e+03 -9.008658780612915962e+02,1.756804939152404359e+03,-1.941504075585362443e+03 -6.257308003513546737e+02,2.072234022865709903e+03,1.726750740544057635e+03 -2.057188503399082038e+03,-1.745049581336911160e+03,-6.246106148301645362e+02 -1.919748268521095952e+03,-1.587311360867676967e+03,1.209285007419945032e+03 -2.049033553547601514e+03,-9.080566040323811876e+02,-1.626116754820904134e+03 -1.773972078699697704e+03,-5.926550876316190397e+02,2.041848185124994188e+03 -1.895054767280823171e+03,9.237352122864908779e+02,-1.795227474886749860e+03 -1.620012636177589911e+03,1.238970222779204505e+03,1.872931617996605610e+03 -1.749363801658917055e+03,1.918410180057762545e+03,-9.626991588737391794e+02 -1.611824710475071925e+03,2.076102115206173494e+03,8.713105703125619357e+02 -2.751636775163151924e+03,2.482429597619677679e+02,1.850175410558365741e+02 2.819486845238788192e+03,-1.227648640056062732e+03,-1.063096707450663274e+02 2.828162390533582311e+03,-3.452315832136267204e+02,-1.161998987401962950e+03 2.973334855834526024e+03,-1.789263453068564047e+02,7.714883006466220650e+02 2.981959980866465685e+03,7.034744983688980255e+02,-2.845475402379931893e+02 7.230249676687612919e+02,-2.984012797181214864e+03,2.020681132349376412e+02 7.489778006532395693e+02,-3.367769033382248267e+02,-2.965390795747931861e+03 1.184490518661768192e+03,1.617447064878777212e+02,2.835268922187722183e+03 1.210447621351424459e+03,2.809291044684306144e+03,-3.326099550843914585e+02 -3.164204194545539508e+02,-2.979684082978914830e+03,-6.994925902354550544e+02 -1.712007129092333457e+02,-2.813585486746007064e+03,1.233837924798716585e+03 -2.989023076954838416e+02,-1.214904567546315320e+03,-2.811155154417737776e+03 1.361337529030404312e+02,-7.164565036804343663e+02,2.989328800860578212e+03 -1.364724277583266314e+02,7.160417096522999145e+02,-2.989412742747303582e+03 2.985993340325934469e+02,1.214748407075016075e+03,2.811254834628835852e+03 1.708609740912376651e+02,2.813417148331899170e+03,-1.234268802572842105e+03 3.161164165399382000e+02,2.979774390314867105e+03,6.992453031787978261e+02 -1.210633049245885331e+03,-2.809258029081730001e+03,3.322137054870627253e+02 -1.184657796865844148e+03,-1.620704477796920457e+02,-2.835180430639548376e+03 -7.493994931753793480e+02,3.364579185183467871e+02,2.965320466441154167e+03 -7.234309579091122941e+02,2.983889571783220163e+03,-2.024343660104547951e+02 -2.981934995609053658e+03,-7.037366589637366587e+02,2.841608642874509769e+02 -2.973292783721014985e+03,1.785519144542232937e+02,-7.717371548119670024e+02 -2.828374738710904239e+03,3.448638511725153535e+02,1.161591262698065520e+03 -2.819682428423139299e+03,1.227230202143105771e+03,1.059529791444305147e+02 2.881304513741023584e+03,-1.374783354193673404e+03,-1.125291085954029541e+03 3.033515438118813563e+03,-1.200452184780246171e+03,9.027312106885174217e+02 3.051646416594431685e+03,6.506646001614756187e+02,-1.312369889239718077e+03 3.203921179788254904e+03,8.250851464605177625e+02,7.157852853995125315e+02 6.825453354012404361e+02,-3.216977826098676360e+03,-8.021287499594091059e+02 8.345628163833371218e+02,-3.042768927986690414e+03,1.226086112958236072e+03 7.005984814201951849e+02,-1.365872669659540179e+03,-3.016915414476985006e+03 1.157021815870793944e+03,-8.431097265139912906e+02,3.067359044301229915e+03 8.709746846479574742e+02,6.593944380604731350e+02,-3.203876881803872493e+03 1.327437412918172640e+03,1.182806721685336015e+03,2.880469262797486863e+03 1.193479328296101130e+03,2.859492562707587695e+03,-1.362767176281363845e+03 1.345807443829256727e+03,3.033862884038389893e+03,6.653595456503406922e+02 -1.345957356279911892e+03,-3.033739311790014199e+03,-6.656196986086278002e+02 -1.193744183881032086e+03,-2.859613456516492079e+03,1.362281433023298405e+03 -1.327575570191480438e+03,-1.182969916343018213e+03,-2.880338570803467064e+03 -8.713894667325072305e+02,-6.597978521331864386e+02,3.203681037742064746e+03 -1.157264135139769678e+03,8.426501969698164203e+02,-3.067393904777462922e+03 -7.010493324374873509e+02,1.365666179882160350e+03,3.016904161324157485e+03 -8.349571096592077311e+02,3.042496863227117501e+03,-1.226492748565068041e+03 -6.829864543349780206e+02,3.216954517131669490e+03,8.018467047391795859e+02 -3.203800938671151016e+03,-8.253273808934641238e+02,-7.160441744176018801e+02 -3.051780134508651372e+03,-6.509826429453520404e+02,1.311901143075285290e+03 -3.033616851574064185e+03,1.199978718217251526e+03,-9.030198633870395497e+02 -2.881637164928362381e+03,1.374398520113323002e+03,1.124909310839740101e+03 1.781071476557796586e+03,-2.488504613201357188e+03,-2.065428087701867298e+03 2.098964219088664322e+03,-2.124711308557529264e+03,2.170441213733573022e+03 2.137093445331861403e+03,1.741648533401185887e+03,-2.455678316070957408e+03 2.454955958056298641e+03,2.106004798082109573e+03,1.780112084802250365e+03 -2.454901378352156371e+03,-2.106012592698100889e+03,-1.780178132087265340e+03 -2.137391958256570888e+03,-1.741962917435640975e+03,2.455195473085442700e+03 -2.099221546854858843e+03,2.124198555924154334e+03,-2.170694218960844410e+03 -1.781594984817244722e+03,2.488314824566794414e+03,2.065205230458988808e+03 3.122071386978404462e+03,-2.500457173606919241e+03,-1.960044816937114831e+01 3.141650565272775566e+03,-4.884078609877844315e+02,-2.427239066727171121e+03 3.472637623359345525e+03,-1.092074727769958997e+02,1.982135632271116037e+03 3.492511150936095873e+03,1.902860559500974659e+03,-4.260135580972330445e+02 1.926738393524785124e+03,-3.501888028920384386e+03,1.563949993498424078e+02 1.956413636250567151e+03,-4.836033707272409856e+02,-3.455224082995787739e+03 2.452883595697436249e+03,8.480289013174439106e+01,3.158507643774781172e+03 2.482590061957568196e+03,3.103437592759718427e+03,-4.532346987105904645e+02 -4.431545236004035360e+02,-3.492041647612927136e+03,-1.899805042510755129e+03 -1.123974266903735497e+02,-3.113128725733727151e+03,2.509142553838837102e+03 -4.335657648310167929e+02,-2.486203684676753255e+03,-3.103354953250792732e+03 6.280308967399663089e+01,-1.917694343293884685e+03,3.509772667513671877e+03 -6.320049359778251130e+01,1.917214973507414925e+03,-3.510027413421148594e+03 4.332310247845669551e+02,2.486178041584565108e+03,3.103422244024626252e+03 1.119994400041999683e+02,3.112784436116729012e+03,-2.509587452094109267e+03 4.428191523425172136e+02,3.492151038798712761e+03,1.899682163030365018e+03 -2.482671475424489927e+03,-3.103439339104013925e+03,4.527765603641891516e+02 -2.452934275758073454e+03,-8.519077135765037667e+01,-3.158457847001713617e+03 -1.956910597927751269e+03,4.832273103631895310e+02,3.454995264575221881e+03 -1.927206706691009003e+03,3.501612185631609009e+03,-1.568005456668483646e+02 -3.492477240167506352e+03,-1.903024130636394375e+03,4.255606715000259896e+02 -3.472573526139696696e+03,1.087929047581199598e+02,-1.982270720519273937e+03 -3.142032771572712136e+03,4.880050899196319278e+02,2.426825311920005788e+03 -3.122424355004954123e+03,2.500019500228152992e+03,1.920014976175221477e+01 dipy-0.10.1/dipy/data/files/life_matlab_rmse.npy000066400000000000000000000011001263041327500215260ustar00rootroot00000000000000“NUMPYF{'descr': 'žµf˜x"@Gœ`<"@ÚÐ3EÙ$@ söŸ%@¡yH@aÊ#@ ¡åÊ)I%@Êš†}2/$@ ٠ݬå(@z¹æ·Š$@Š=>óu&@2÷Ó×å*@ P&Œ+ß(@ÆÐE²˜&@dO{8¼ä%@gzÖ03&@ÐøJ-á!@÷%/]½@dipy-0.10.1/dipy/data/files/life_matlab_weights.npy000066400000000000000000000010601263041327500222370ustar00rootroot00000000000000“NUMPYF{'descr': 'P?~™?JqðÖà´x?üBú´å—?­›Bü™§•?e~r[§¬~?dÜT)òjŒ?—Zꇸ¢?íñ¦ %± ?íJb¦ž?e*ïlŹ|?˾àÙ–Ôr?냭ˆ<ˆ?Ó,Æ>+?–Õ$-Ct?dipy-0.10.1/dipy/data/files/repulsion100.npz000066400000000000000000000075601263041327500205230ustar00rootroot00000000000000PK!ŠŒEšW„ ° ° vertices.npy“NUMPYF{'descr': 'å?PêyHLÝ¿ìý^;!ã?÷É4*å?Þb”ô­­¿ˆÜCYª%ç¿<"$•yæ?÷ÌÈGFpß?»P – Ý?ñ·À,Ëç?¥s÷F®K濇06ùd¿¼ª‰vKôæ?@­gÙƒÖà?s»Àh}á¿_`F‡ÅØä?Þ4`Ë*漿؊oˆïµé?Àâ¶´â?ž«=VoªÙ¿p½ wcæ¿ø×aþ8ìâ?±J ª5é?tyØvÄÁ?<¾µë3ã?ç–bj?ç¿å}†×·Ö?i6#‹Ôâ?"\áˆûœÑ?~‘÷#\é¿£â0¦€já?D€©ŠÄRß?¹È⎩¯ç?ŒOþÝ?ç¹èYeë¿2Ñ·`ôaпTÓ˜¸a¼Ü?öU20é?¸º`)MÝ¿K1‹o5Ù?ˆPQgí_Ù¿Íâ·ê?WÕœ0mØ?gwN¸Ù¿‹P6ð+ì¿ µkE‘Ñ?‹$ ·!©ç?c–%r…Ý?¡ešcß?kÕÔ´®#í¿»¡trî9³?nù^B_Ú?Å oð'â?,^Çßð,è¿~/° ‚÷Ô?EݱºWBÅ?ý±x­ÞQí?©”Ö"U×?þÏ…Ø4æ¿ídJ 1;⿤Åmƒ-Ü?äÝo™ª»í?ÿg@úV\´¿ZJU×?ËU†¡ æ¿@úH}¨ä?wÔ:ŽÕ?ô P쮿gL‰Jlí¿…äÌÆÝØ?ˆ|ñpè?äÝmµûÄã?ÍÉ îÇ?uõ5´âï¿ç.8V)Ч¿.Ï„&²?"áD…é?¿_"œÍã¿@úÀõî¨?[sHÉv.ÿ+%GÓy#ï?àÌsiÆ?#-í4ôÝå¿Ic›ýæ¿?,žÿ·«À?ë%Sàpî?ÒT¿=¥ÆÐ?Húè:Í?hÌLìì¿WÌŽª Ø?÷9³* DÎ?ßÏè0Ï?*5!¾jî¿@ÍÔ1«©È?ÛH÷ÈÅ`Ý?êpÓD&ì?ÇP*¤ÓÖ¿?79e±í¿×0éÙ¿T–àÐj ¾?6žàH"“î?²n+»úѿĔ€å-·?°¾2 ëtà¿\—Ÿ°lë?KØ¥™“‹ ?€Æ“›¦Á¿•9ÙÖ€®ï¿´ùèK£œ?gÔÌÿD§Ê¿³¢tŠU¡¿?WûÅGï¿Q“*)S§Á?ÄØDÇWÆÄ¿má~Dᅵ*x“?tèé̺Í?(Šƒï¿2:•E²Æ¿L¼ªe‚Ø¿d ÓÄí¿®J3V‘Ø?]¥åqº?cß›üYZí¿.ÌUpÚ¿)\ÉXXFÐ?,™ÑÞûë¿Â DÃ?’²Iq¾à¿2ƒÀI×ê¿k¸ê’{Ð?ñS÷npÝ?ýðËž11ë¿ Û5ùÛ÷à¿Õ/“Aö1»¿BÔKÈ¿êê¿~OƩˉÝ?£‡ôl–BÑ¿£ÃÔ&X ë¿Î¸¯TlFÇ¿¤bNŒà?Ã’–Ï­Ãê¿`=$/ýɿ󂔠濮sñÂG2æ¿äü3å˜áâ?ø tÔÐÕÖ?曆-ç¿~¢©~œãæ¿¿€*iîË?—ÆiÛ—>å¿PêyHLÝ?ìý^;!ã¿÷É4*å¿Ôb”ô­­?ˆÜCYª%ç?<"$•yæ¿õÌÈGFpß¿¹P – Ý¿ò·À,Ë翦s÷F®Kæ?!‡06ùd?¼ª‰vKôæ¿A­gÙƒÖà¿s»Àh}á?_`F‡ÅØä¿×4`Ë*æ¼?ØŠoˆïµé¿Áⶴ⿞«=VoªÙ?p½ wcæ?ù×aþ8ì⿱J ª5é¿zyØvÄÁ¿<¾µë3ã¿ç–bj?ç?å}†×·Ö¿j6#‹Ôâ¿$\áˆûœÑ¿‘÷#\é?¡â0¦€já¿A€©ŠÄRß¿¸È⎩¯ç¿ŒOþÝ¿æ¹èYeë?2Ñ·`ôaÐ?UÓ˜¸a¼Ü¿öU20鿺º`)MÝ?M1‹o5Ù¿‰PQgí_Ù?Íâ·ê¿XÕœ0mØ¿iwN¸Ù?‹P6ð+ì? µkE‘Ñ¿‹$ ·!©ç¿d–%r…Ý¿¡ešcß¿kÕÔ´®#í?»¡trî9³¿lù^B_Ú¿Ã oð'â¿-^Çßð,è?€/° ‚÷Ô¿IݱºWBÅ¿ý±x­ÞQí¿«”Ö"U׿ þÏ…Ø4æ?ídJ 1;â?¥Åmƒ-Ü¿äÝo™ª»í¿þg@úV\´?[JU׿ËU†¡ æ?@úH}¨ä¿yÔ:ŽÕ¿ç Pì®?gL‰Jlí?‡äÌÆÝØ¿ˆ|ñpè¿äÝmµûÄã¿ÑÉ îÇ¿uõ5´âï?è.8V)Ч? .Ï„&²¿!áD…é¿¿_"œÍã?NúÀõWsHÉv.Ã?+%GÓy#ï¿äÌsiÆ¿"-í4ôÝå?Ic›ýæ?B,žÿ·«À¿ë%Sàpî¿ÓT¿=¥ÆÐ¿Kúè:Í¿hÌLìì?WÌŽª Ø¿ú9³* Dο€ßÏè0Ï¿)5!¾jî?DÍÔ1«©È¿ÚH÷ÈÅ`Ý¿ëpÓD&ì¿ÎP*¤ÓÖ¿¿79e±í?×0éÙ?[–àÐj ¾¿5žàH"“n+»úÑ?Ë”€å-·¿±¾2 ëtà?\—Ÿ°lë¿YØ¥™“‹ ¿}Æ“›¦Á?–9ÙÖ€®ï?ÑùèK£œ¿PK!ŠŒE)Žþ¹èè faces.npy“NUMPYF{'descr': '7:?8;@9<A5:B5=B6;C6>C7<D7?D8=E8@E9>F9AF:?G:BG;@H;CH<AI<DI=BJ>CK?DL@EMBGOBJOCHPCKPDIQDLQ=ER=JR>FS>KSFNS?GT?LT@HU@MUAFVAIVFNVJOWKPXLQYEMZERZNS[GO\GT\OW\T&\HP]HU]PX]U']IQ^IV^JR_JW_N[-W)_KS`KX`S[`W).W\.X*`LTaT&aLYaX]/Y+aMUbQY0U'bMZbQ^0Z,bNVcRZ1V^cZ,1N-cR_1PK!ŠŒEšW„ ° ° €vertices.npyPK!ŠŒE)Žþ¹èè €Ú faces.npyPKqédipy-0.10.1/dipy/data/files/repulsion724.npz000066400000000000000000000634601263041327500205400ustar00rootroot00000000000000PK-žŠE¹¨¥«0D0D vertices.npy“NUMPYF{'descr': 'ð%î¿#.§Æ8¶?K4›s0*Ñ¿ûC’ÿaî¿‹ñ´:ßÄ??9ÔúçûÄ¿šgÓ Lî?œeÌQºÑ?–vê Ë?ÀÇ_7’í¿•I¯;¶9Ô?‰}¯ÒLÖ?;65Qáí?õäRVñ´?àŸÁìqØ¿CïX’ƒ&í?Y·6 ØñÃ?¦ð[Ÿ*Ä¿tÄEL í¿›|f¯¯Ø?̾·j–Å?Xrh!v‹ì?Yê]{—ÖÚ?© ašx`Õ?œ» ÈEKí¿YA ×ñ¼Ì?(œ—¥‡×¿°A›­¬í¿ú{ÏGç±?Í.žâ|BÉ¿ã6ƒzá¸ì?F†ÇE;Ù?XúÁŽ%·?=¢7d7Jí¿{—¬­<Ù?aÕ qáÔ?P·ªVí?Z§ ª€Í?aš6ó½#Ú¿¡1!'õ3í?üöZ…d“?4ÿçXM¡Ñ¿Q¢B0,í¿^(Z †Ó?.4Ù´D¢?»S&–ú[ì?a5IsUÝ? Ñ‘ÿ…˜Õ?¼Û>÷1äë¿oXëÁÖ?rçõïé‰Ý?3Þ‰Rõ`ì?‚·¥Uê–?ù·ßù݌Կ-r*õËÌì?¯©¸ÝÒ?É?%«¡¿|Q>(ísì¿3è×Ux4Ý?¶·õÜ?3Ó?xî^à#ì?€ÛÅ—m©×?©§Þ»:Ü?îYM_±qì¿“êú·´¿?°cáÛŠØ¿ë2b̺쿦ó]}0¸Ë?«éh ¥ê®¿!à¤Ü¨í?’ð=Žu¶×?K@@°=ŸË?T>cP>Ýë¿“f«ïFÜ?ÕFÆQÜ?=},ì?'-_~‡ÝÅ?©–!ûòß¿6/þmtë?é&½6¿?k¥Š®«ÏÑ¿è"My`fë¿æ'n$ÚÛ?×|=Û¬À?hIËÙ3…ê?QïÈRjá?òÛ‡wÛÜ?YXa¬©Që¿hPõ£ö«Ð?cë.:ÆÀÞ¿”ÙË/²Çë¿Ô!™žÔ¿?…3ˆpvÔ¿l+dL¢Aë?sU†XÚ?—6" C·?aRÓÀ$Fë¿«\˜4‡{à?}ÅyÛ?^f9›;ë?x¾¢dçÓ?mó>»2Üà?)¡Úæ0ë¿5ò¸1Ò“?µ,ë1l,Ù¿rf72ë¿Éqæ-{rÖ?.„F鹿Ëx°Œ¨ë?6&‰ß?ŸÐË¥?z(qKG࿎âîóL濯6TM-à?V‹ßHs·§¿Ïû\ˆÿ!ç?îL#~Œæ?¹FŒ©˜ØÜ?²îÖÕ|ç¿`Ô}~ìAà?Çn¬ûÔþä?ÕìÑNè?Rgn¸«?•œÓ· ·á¿S¼Gè?™ÑnÞ¯Ö?™ÔƒBˆÃ¿²J›)¦uè¿.…. ä? "àÖ?£ˆkÖç?52EYâ?M{yqæä?€xó”]翲­‡x¯É?Ÿ¯É%uã¿âꦗ翛øO¥ÃÛÒ?kV,ZT(Ò¿O1z/“ç?Þt»I¤ã?蛄jæÊ?¯æé7hÈæ¿‰ÄÆëpå?¤»B#ä?hïx…K¿æ?ªÌ£ÒkÔ?Glr忊4à.œîæ?t²3åpÈ?}â·)h0Ù¿…ÅòXp«æ¿Áù1óQ¿â? Ôû%Úµ?hÝÿõç?1©Åž å?Ÿ¤Ûâ?1Œ¡çÐÕæ¿’GÛðÒ±Ú?Po ¸LÊå¿ÓFßÖRç¿ÏBHbI<²?ÿklÞïÕ߿υ8Ñ ç?|‚¿r–íÞ?ÞN5Nˆk›¿Q]ÌU?ç¿ööØ]'ùå?§;OD#ß?x:UÜÚæ?Z€¾5à?×áÙŽVç?‘ p’§å¿‚C´°Bй?¹«ŽCΡ㿹iÏê‚}忊‚‡‚é–Ú?#JHü@È¿Éïfxæ?ayiæ?ŒŒåã;Ü?|Ox©SÖä¿þ(`tùÂã?,u*ÃQUç?ÛîU3‰¯ä?çG0ÀÌ?AD–ó«å¿9KE¥pØå?…HL$MÔ?"·ã_HÑ¿oXæ¿ veù6å?`¡Õ^éìÓ?ÖE´vuå?Nýݤ÷‹å?Ðó¥ªB2å?ä~,y‚‰å¿b„Õ?L=•&Næ¿j2ë)Eæ¿îwƒâÏÈ?ì0„$½ÿÚ¿æh!`Áå?‹ó Ê 2ã?XvÌ…¸?cpAö{å¿ÆÒÛ^A„ç?*£ãà•Zã?$XÛçÒEå?Q‹ÖÝiÜ?i.çkæjè¿>¶˜W%ä?RþMíºÂ?&I÷& à¿Râ_æˆã¿o@„YÒã?£ßÇH§?´ x”½¢ä?“\`7jè?Ëd~ÇÔá?†á’2{ä¿Û &§íà?¤‹¬ÿèç?_06jº"å?æ¢ç•é²?>4KäB”ã¿ObÌÿãä?2Ê•Ü? ¢°}B¿µN:…¾bå¿¶ÎN0Õ\ç?#˜b#Ü?ñZƒuÇä?fS@³Z´ã?¼už\çç?›1Åqó㿌¯Ûü•ŠÍ?DÚ/ș濅:7ä¿Cð. ´sÔ? x\*Õ¿ê]–3cä?ˆ65«nGæ?»¢DžzÔ?eê,²Ñnä¿rcœœåeæ?û½¶8¸Âæ?¾«2Ä[ã?ƒ¶/5ëÖ?©PÓQáè¿ Šð­À$ã?Æ™C|¯®Ñ?²s£Ø¿?˜UTÇã¿K¯íëÃîå?·ÏÙûÆ?wÒ×rå?*™Û0Hç?:ö®¹'å?ìyzØÊ?ã¿‹ °J³Ü?íºœ°è¿oêÁ“ÞIä¿×/›a*«?Ua_Õá¿Ýù o8¼ã?Á¨ÄÙmâ?9Žø‰d±‘¿}úoÇÓÏã¿7‰hý—é?ŽƒdA5:â?ÀEÙa8fã?%/P¦Âá?c¹âƒZé¿ øœ4†ã?ïjfA?Æž,„žã¿S\…2gìâ¿"ñ ÁCÃà? ßõèGã·¿Í7[ïvõã?"%%‚Õè?Ò›Mi má?Þmf켽ῧ3Øl¡#ä?ɬâÖyÞé?¯ˆû–Iâ?‹„®i£ Â?ƒ˜å…?Øæ¿ºTÁŠlEâ?šîÊÛñÙ?óC¶o2oпÝý‹J)ã¿ÐGk¦Fè?ÞÞu¨¨nÙ?¢ÌsÌTâ?0:Mñæ?.±)×Eè? ØøèœÖá¿JŽ>ͲÖ?gÄnyüè¿:Óóˆªãâ¿tPQ^˜1Ê?wÂ]°Üú׿ùJäî*Øà?wG[²ilè?[x”Ö®Ê?õÀþ.Ý5ã¿výµè?¡$¼PÇÌå?JÝ…8_£á?\\LÕÞ?±„àÆw²ê¿~‡Üà?•‚cÌë8Í?±ÓþþYß¿f@¼2bà¿ãqo”æ?óWïÓÇ(Á?ƈÈeL½á?/0ûÿHê?òÕäÃÒä?ñ©8À&„à¿$ƒu´KÒá?ÚFyb‰Oë?Å[IK¥à?³»z ?×+ô2 å¿_Ó[Þ€:á?%Z¶ôƒÛà?ÌA ç‹~À¿$ÛrnÐá¿`˜¼‘ÞBê?®UѽHÇà?5Ö¹#á?;ó2X/å?7f®ÇË'ê? “‹Áûá¿ÕaÏŠ>À??ôûà齿¿M|"­vÄá¿%á‘ÄR¦Û?ˆ›WcÜÍ¿nd,¤â?æCCQêè?ÒÈŽÊÛ?­?we9¾á¿ vÐfîæ?h­‹rP¡é?™k­Ox á?©62ˆÑ?äo–Þ7¶é¿£â.º‡Þ?"ŸˆÙùËÖ?¢¨´oG“׿„Ï´¢à¿o–Ò2·è?Ë^‹ÆárÐ? „öòŸâ?ú1•°è?ULì꿚ÞyÇZýà?,© šì¹?½OÎNã¿)àN€!࿜WŽR!áã?Zã7¡s¿›1™bá?çm[õ ë?Êe’÷¬à?b4 ªwÝ¿–k€!¼ÿæ?ñ*çNóë?yorpÐ>Ý?¡ßÞ¿…Å?dû¤g-è¿Òƒ€¤Ü?g·_ˆ žÞ?ê±@þο"Öä7ß¿ñ¨>sAêê?¶9ˆHöÝ?è$Nvh Ý?* ŽžBè?[§¾—›rê?tä+ãà¿´EY‹,Ð?àÆ‡]é¿[­Qõ€à¿ìTQahÎÔ?²W+{ç¿Ñ¿î ޵üúÝ?}#¼×ê?§ÃÿØ>Ô?­¯©j&•à¿ö¦*sbmé?8 ÒÀçè?ãïÓÙ±ýÞ?!ì®Í•Ù?¾_—¾{8ì¿!|”Ö'~Ø?×,a-ßžÑ? ÂÔiŽÝ¿=K˯²Ù¿—öìNé?‘‹X;üÌ?èØÚb¢Ý?/» Z-ë?µÙÎŽç?ë¡l1Z±Ø¿i¤fâ?¥|eüÞéì¿ÊMà šÿÚ¿#Ãæ)€:³?ðL•®±¾â¿“v²K ûß?Tq£Hkä?bÕññ¥ë¿D»¤€Tjß¿ÍÚµáßë?æ iòµâ?øâAÉÄ!Ú?Úã©ânæ?²!Àìë?´†gz<ß¿ýæKŠÓ«‘?c<Í\æ¿+H‚p áÝ¿XМá?­ÄNëÀ¿½l]Ð[à?–ìÐdè,ë?Ôè{,rÛ?¢ü[÷NÛ¿>^d•é?Tõ¦ÈüŠë?óÌ÷ùEÚ?ºÔô‚¥DÓ?¹5#%möê¿Ò”§…Ö?çÎÂ%ÂÚ?u"¢hÖ¿‚ÐÒ "öÙ¿ŸŽHÙÛë?pS:¶Õ?°E1æXß?©K>ÅÉé?»ÞìlÈpê?¸S¹5ægÛ¿²H¾Q“k×?÷0(õZ{ë¿N˜ËÎÝ¿T~øÔSË?¾ ÂËÙ¿õIGñ¨Ù?/å»H…Sê?~-&8iÊ?©º< 1Þ¿S¹è¡në?|RÒiºç?š¥×1?Û? T¦.˜à? ¥WÒì¿Õòs›‡‡Ú?ÙxN¦Œ¤À?wÑ’*–â¿Ð‹“›œÙ¿áûÁ<¯æ?V§ì­¨³?ž=]ÒvÜ?& ä£ì?ƾ«7¶ä?Âw±Ú¿›î߃Xå?óÿmeí?«>Ô†Ù?u¼Þ‚ U­?¹"(á:!æ¿Ääç«ÖnÚ?PYáˆöâ?æ“dhTˆÀ¿[bû4¸ÿÚ¿]›tŸ·ì?ÔnOóJIà?Ï8'ÑbÝÔ?%ëY~é?‡[ V™cì?Gõxª2÷Û¿ ŸÃþÕýÂ?ô+:jú\é¿£ö¨ŽNzÛ¿ÊVVA•µÛ?gšÁGÆ¿ Cu+›Ù?¥ œËì?sqO¸HÔ?Ù®_¯ÙŸØ¿?X+>¡½ë?;ûN—ê? —T,cÚÖ?Õ`nVMÛ?ü¤@Èí¿Ü‡1÷Ï?Ïm–¬¥oÕ?ziwEØ¿Svô=Ò¿M˜®+ì?Re1·Ò?¡·ÚêÚÓ?ß¾l–úì?ñÒñé?*<<!Ö¿L8ެ:Þ?ÀGÊlií¿AOô»ÅÖ¿k¦Í!£È?ö×,7úß¿] ²bšÝ?ľnÜ™ç?¦jÇÆ¸?2Ï2ǓڿõjÐeWôì?öÇUæ?Žž5lMÎÖ?ªÍÔ÷%ä?/Kg&°í?!{¥®Í׿´âEmwŸ?9•A}÷å¿ût%Çʦ׿-‚AúO ä?<]J¨¿€H“ƒNôØ?öcÌmí?€_ù§¡á?¹£Ê_¡±Õ¿9 igè?R5 Žgˆí?œ‚äQÕ?³l( ¸È?MPú(é¿t0ÜBiÔ?Y-|òäðà?P]{î¿™_•/¼(Ó¿ç¯dά?Ée¦Cޘ㿘?ú¸à×?º·Û¥ƒMæ?Žb'ZYÉ“¿8i=cÖ¿‚ <£Ïøí?°–DˆÄàã?iAV<ϲÑ?IÒDSÄvç?ƒó¨+%î?óc-eË0Ó¿²ÈZDÃ?9Ķ/7êè¿[p°q[Õ¿»^žá?rcg·Å¿cº¤ÖçÑ?šþŸz=î?þâØª<Ü?üâ³1r5Ó¿ö(6ë?§T[¶zåì?ÿãØ”Ò?\¢‹¹´ÅÔ?T"e§–ë¿Á¿ÛåßË?¤¹£îcGÝ?ȉbs1Ø¿ëlL¥h¨Á¿n ÄãwKí?ÿfL³,ÃÓ?3¿¸08ÓÅ?W.ðpñí?(^¨ Fì?*.‡‹Š9Ò¿vB6ÕÛË×?u6š’Ñ_í¿'()‰cZпÞk,âÏkÓ?…L5.\ à¿’¹ñHÙÔ?K °ÀFé? îœ)‘²·? ‹M1‰aÑ¿÷\¼§î?Ät(¨ç?ûq‚%=¶Ì?L/úFëòä?€–öXæ\î¿ñp›ô±’Ó?×Bª<6´?‘>Ä•ÝÄä¿ÛðsÀ Ñ¿œ@{VÎÉæ?ÆÜÌ}m‰©?ƒátîREÓ?åÚRyî?ë6ýÚÕå?£­*»NxÒ¿vÔÙ¨¨9æ?3ª,ÇÏÌî?£ã³ç”Ð?‡K–´•´?Kõ-:Úæ¿%I‘ÁêÒ?-@d´ä?‡ŽÉœÑ¿‰éSEiK˿Ƣƃ­î?…”2í$›Ú?÷!þCÏ?| § ì?þé;¬î?¸Aå_$AÌ¿¿O”ýœÁÐ?Ny6›eë¿nø$q¶ÉÒ¿˜9A89Û?œ¢¶]ÂÒ¿$²Öª†Ê?5sNÞí?.„°CÕ?y:cvп§0qÎ#í?0 ;Zz°ë?¼›¡âè¨Ì?`U¨”é³Ü?gËK¹î¿·]›ÌÂ?aÏ]›,wÎ?Š ¨º …Þ¿üI*[5@Ê¿D¾“?ÏYë?äA-»qPÇ?äƒÐ„ºÌ?&G¸P¢î?¬6ŒÂÚUë?]Ô3[&Ê¿év8)À˜Þ?cÙÜ .Áî¿öAö³Ë¿ €$û;úÅ?ž"p)ä¿<Öõ­éÎ?8bűç?^'x*&J™¿ùýÚý Ê¿ÚÜdGþQï?‚Ö±ô†ä?8!ŠgÂ?ž¢½Ù} è?Lˆ“øï?¨ÔyGzÍ¿9ƒ-¥tZ¡?.ú»Bïäç¿@‹!ÅÍ¿”ÂÙþñã?°ÐÙ–“Õ«¿ôˆ<1¡9Í?ß­¼ù+ï?Z¬MÊÀá?è¤$¡CÎË¿ðؾ³é?.£Ïz’î?e§d‡õæÉ?0xð¦ŠË?þ*#Áô“é¿´¥˜Š«€Ç?®AºDHOâ?a~1aѿ̖è£b±¿$͈Ղ¸î?B=.6ùÛ?ý_ë;ñÒ»?¾*94”«ì?¾!¡Îaí?«vDêÁ¿e ²·¼·×?‚ˆö˜WÆì¿á/ØÆJÄ¿›½6¬Ú?‚¥ˆ5_ŽÚ¿gª“Î#Ñ?iIðèHÓë?î§w„Ë?m ¢ÑÈ¿‚0 Js§î?ÑZ}\=ëé?O('~Ä?RŸêšñ â?3FªG9Rï¿\€C -–Æ?>¨ýlΦº?¼Jøâ¿.µhØÄ¿ZÃóbK=é?¾Ñùt‹±?1!ö"\1Ä?ßÚ„Ìê…ï?“Z®G[;ç?‡$¤%,6Ç¿q0´=:å?ÏijïÂᅦ’³HàÅ¿°Ñ³FÈ9¡?çÛ×Ïç¿g“¦:EÂÂ?ù}¶D¶«å?}/èíYUÁ¿ë‘uìÉÉÑ¿ ¯&m¢nî?˜†™á? dšì!ÅÈ?åkVê?6eÙGï?íõø•¥Ã¿©iîIÙ‰Â?Ãi*ÿH‘ê¿øgèÞ§ñÈ¿B>TÃ.¶à?¤D½ìM¶Å¿à®ñ]Â?U46!H3ï?sªþ´¢kÜ?ÞÀMškÅ¿ÇÞéJÏ*ì?·æD˜…¬í?Õhƒ mÇÂ?-ÉÏ/¹ Ö?œjz©XŽí¿"» C½?/¸^j×?Gmxp|Ù¿©UfÚ±ª6¿ïV9pZí?¡!Œ‚Ô?Â(e¸Ñ±ž?Rƒ,ùLî?õ¡8‰ß&ì?6_÷¼¬¿LÓ¿:7Þ?+ȽѼpî¿cÆ©†9[¿¿ûŒ±äîÒ?ÂNlU×à¿aa| ŠÂÈ?œ±0ïê?¥´&b·?–àênÁeÀ¿kiù™ï?ÞhTmü”ç?IU”Õy·?ÐÍ•ëïoå?«º¥Úï?ߨm¸¿®–ˆ²f†?_|ñ­?æ¿™2õ‰àsÀ¿@Þ. ¡æ?™…Ž5œ¦¿Çå.µ?ÀaD4åÛï?‹aÈ1~žä?.`sh…Á¿d¤Öo„è?í‚Oôj•ï?‰.÷ÁT¼¿?üàðE6º?~sœé¿€Áº½‘¯§?§ |›š ã?8þXÕeÿÀHîÈÕÁ¿è7 ’‡Pï?Š 6Åná?¾ñV®?nYrãÄê?±ß¦òÚî?‚‡h¶ ³¿˜åùîFÐ?0OŒë¿°{0嬿„~øˆÒ.à?µæ¿Æ87Ú¿ºWi„sWÁ?¢s³æSÞì?ܰzQ®þÔ?íB 輿­µ¿î?ò®îÁ2ì?obšÜP¶?·_J¢¿Ý?¿€ô0âî¿-dêÅX ‰?ë‘çM½Ð?ÎŒZÎ࿵»sâîe²¿´yDiŽë?Uׄ©<0É?_”–t¯}¶?X4S‚?ï? ¸Š ùïé?àdågòG¾¿»ü<[â?«M?À¤„ᅳ»*/óµ¿Z²5V7Ã?c•j~ùä¿Ýš|§;X»?¨#€œç¬è?0lìZžÌ¡¿dÍ?Kį¿P€sAëï?5wø“¥·ä?æˆ}q?HÁiPcè?•“7q†¿ï?ä‰G*gŒ¿ž9€^¦Û¿?^°é¿þ ×¾%˜·¿ªaÔãÀ›ã?¤‡¤:¤LÄ¿ r\1¢q?›ÞÇA˜ï?u8ÃS…á?Éð!ª&´¿ŽÔÈ„”¨ê?À_øüï?«kõ°?.yç¶àÎ?¦»*~ñÖë¿‘@È È´?þ­ ÆC ß?”ˆ‹7•VÒ¿ÐE $”%²?,ii(ÿ’î?ØZ8LÜ?¬MnÃ2¿Z÷*"Âì?»Œp±qÚí?HU\…r|? äM´ ×? ‹7|í¿ŠªÿÖ¿äôÓí`ÔØ?œ¨øß¹™à¿-³¾µÙQ¯?³ÌÞ°†Ië?ÓÏVˆ–Ê?jÊ=±ÿЪ¿ì$8_ÓAï?˧-àl/ê?2Ùz:á–?SË:úAaâ? ÄïÞ³ï¿ð%î?*.§Æ8¶¿I4›s0*Ñ?ûC’ÿaî?‹ñ´:ßÄ¿<9ÔúçûÄ?šgÓ LeÌQºÑ¿™vê Ë¿ÀÇ_7’í?“I¯;¶9Ô¿‰}¯ÒLÖ¿;65Qáí¿üäRVñ´¿ÝŸÁìqØ?BïX’ƒ&í¿\·6 Øñÿ¢ð[Ÿ*Ä?sÄEL í?œ|f¯¯Ø¿È¾·j–Å¿Xrh!v‹ì¿Wê]{—ÖÚ¿§ ašx`Õ¿œ» ÈEKí?]A ×ñ¼Ì¿&œ—¥‡×?°A›­¬í?|ÏG籿É.žâ|BÉ?ã6ƒzá¸ì¿H†ÇE;Ù¿^úÁŽ%·¿=¢7d7Jí?}—¬­<Ù¿_Õ qáÔ¿P·ªVí¿]§ ª€Í¿_š6ó½#Ú?¢1!'õ3í¿öZ…d“¿2ÿçXM¡Ñ?Q¢B0,í?^(Z †Ó¿:4Ù´D¢¿ºS&–ú[ì¿c5IsUÝ¿!Ñ‘ÿ…˜Õ¿»Û>÷1äë?oXëÁÖ¿rçõïé‰Ý¿2Þ‰Rõ`쿟·¥Uê–¿ø·ßùÝŒÔ?.r*õËÌ쿎¯©¸ÝÒ¿ûÈ?%«¡?|Q>(ísì?1è×Ux4Ý¿´·õÜ?3Ó¿xî^à#ì¿ÛÅ—m©×¿«§Þ»:Ü¿íYM_±qì?šêú·´¿¿ °cáÛŠØ?ê2b̺ì?ªó]}0¸Ë¿œéh ¥ê®?!à¤Ü¨í¿“ð=Žu¶×¿N@@°=ŸË¿T>cP>Ýë?‘f«ïFÜ¿ÖFÆQÜ¿=},ì¿*-_~‡ÝÅ¿©–!ûòß?5/þmtë¿!é&½6¿¿l¥Š®«ÏÑ?ç"My`fë?è'n$ÚÛ¿Ú|=Û¬À¿iIËÙ3…ê¿PïÈRjá¿óÛ‡wÛÜ¿YXa¬©Që?jPõ£ö«Ð¿bë.:ÆÀÞ?•ÙË/²Çë?Û!™žÔ¿¿ƒ3ˆpvÔ?l+dL¢Aë¿tU†XÚ¿œ6" C·¿`RÓÀ$Fë?«\˜4‡{à¿}ÅyÛ¿^f9›;ë¿z¾¢dçÓ¿ló>»2Üà¿)¡Úæ0ë?Rò¸1Ò“¿´,ë1l,Ù?rf72ë?Çqæ-{rÖ¿'„Fé¹?Êx°Œ¨ë¿8&‰ß¿;TÕÃGŠÕ¿Ó0sNÍðé?FX—LªÞ¿Kæ Á©á¿Ì & sê¿ÒÅŒ&˜V¼¿5úî‹OÚÜ?™ˆ™ÌJNë¿5JëüÃпTlC-kÄ?—åVò” ë?Te [à¿å½¢9ïп=¡Ÿºëoê¿ òxUÖß¿U×›yÚ¥á¿Ùæ®1ê?îL¾&œÄ¿TÂg^¼äß?iYS¢ªtê?yë«ÁpµÐ¿BÔ NÁÍ?áïßYê¿u†«˜Ãà¿„IÄmhË¿jè®â‡›é?šæÊìá¿ìÝj¢=ῇp&GÐÁé¿,‘dîÔÏ¿BŠGM²rã?pÜ0¯Eé¿Y¸Mµ¿ ÷VÓ0_Ù?ÚÖŒ)é?ÅâLZeSÞ¿g?­ü½”{?ÓÞîЧê¿ûmþf‘â¿ÈȇE¦Ý¿˜ý÷(©é?N9ÎTìæØ¿|–ÃEâ?áæF!7@ê?EjôWæÊ ¿¿¥¡sk+Ü?xàÙýïé¿Ó”¿rQºØ¿ä UzÓÏ ?²[\~c!ê? ëpCqâ¿[_&´FÙ¿úZ#_Ãé¿Ú~¢RÜ¿)£U7Jä¿®[ù{­«è?ª¯?{è±®¿™ù÷aô=à?´2íô·è?S'¶±ÏÖØ¿Û§¨LÂ?Ý!ŽœÆÿè¿þ.jvã¿0Ž 18Õ¿Šµð÷¯tç?çÑì0½ã¿Ðœbu{±ä¿@Ê"’A²ç¿Ái$ÆjÇ¿ÞúÐÎ)â?EOâ!Té¿blßgöÿÌ¿050æ·Ñ?É1!¬é?ÉÀbBÀá¿õåzÌ¿"É\¸œ3迪hï¯ã¿¾U›×¬îá¿$Tx]TÄè?!³…ßÒ¿jy¾¥Êöâ?ñ™_¢7é?3Ñ!ðVÅ¿ŸÐË¥¿{(qKGà?‚ŽâîóLæ?®6TM-à¿K‹ßHs·§?Ïû\ˆÿ!ç¿îL#~Œæ¿·FŒ©˜ØÜ¿²îÖÕ|ç?aÔ}~ìAà¿Èn¬ûÔþä¿ÕìÑNè¿agn¸«¿•œÓ· ·á?R¼Gè¿›ÑnÞ¯Ö¿–ÔƒBˆÃ?²J›)¦uè?‚.…. ä¿ "àÖ¿œ£ˆkÖç¿72EYâ¿M{yqæä¿€xó”]ç?µ­‡x¯É¿ž¯É%uã?âꦗç?øO¥ÃÛÒ¿mV,ZT(Ò?P1z/“ç¿Ýt»I¤ã¿æ›„jæÊ¿°æé7hÈæ?ˆÄÆëp忤»B#ä¿gïx…K¿æ¿¬Ì£ÒkÔ¿Glrå?‹4à.œîæ¿x²3åpÈ¿â·)h0Ù?†ÅòXp«æ?Àù1óQ¿â¿Ôû%Úµ¿gÝÿõç¿2©Åž 忟¤Ûâ¿1Œ¡çÐÕæ?“GÛðÒ±Ú¿Po ¸LÊå?ÓFßÖRç?ÖBHbI<²¿þklÞïÕß?Ï…8Ñ ç¿}‚¿r–íÞ¿ÈN5Nˆk›?Q]ÌU?ç?ööØ]'ùå¿§;OD#ß¿y:UÜÚæ¿Y€¾5à¿×áÙŽVç¿‘ p’§å?‰C´°Bй¿¹«ŽCΡã?¹iÏê‚}å?Œ‚‡‚é–Ú¿$JHü@È?ŸÉïfxæ¿ ayi濌åã;Ü¿|Ox©SÖä?ÿ(`tùÂã¿,u*ÃQUç¿ÛîU3‰¯ä¿êG0ÀÌ¿AD–ó«å?9KE¥pØå¿‡HL$MÔ¿#·ã_HÑ?oXæ?Ž veù6å¿_¡Õ^éìÓ¿×E´vuå¿Mýݤ÷‹å¿Îó¥ªB2å¿ä~,y‚‰å?c„Õ¿L=•&Næ?j2ë)Eæ?òwƒâÏÈ¿é0„$½ÿÚ?åh!`Á忌ó Ê 2ã¿XvÌ…¸¿cpAö{å?ÆÒÛ^A„ç¿+£ãà•Zã¿#XÛçÒEå¿S‹ÖÝiÜ¿i.çkæjè?>¶˜W%ä¿NþMíºÂ¿&I÷& à?Râ_æˆã?o@„YÒã¿«ßÇH§¿³ x”½¢ä¿”\`7jè¿Ëd~ÇÔῆá’2{ä?Ú &§í࿤‹¬ÿèç¿_06jº"å¿î¢ç•鲿>4KäB”ã?ObÌÿãä¿2ʕܿ ¢°}BÂ?µN:…¾bå?¶ÎN0Õ\ç¿!˜b#Ü¿òZƒuÇä¿eS@³Z´ã¿¼už\ç翚1Åqóã?¯Ûü•ŠÍ¿DÚ/È™æ?…:7ä?Dð. ´sÔ¿ x\*Õ?é]–3c俉65«nG濽¢DžzÔ¿eê,²Ñnä?qcœœåeæ¿ù½¶8¸Â濾«2Ä[㿃¶/5ëÖ¿©PÓQáè? Šð­À$ã¿È™C|¯®Ñ¿²s£Ø?=˜UTÇã?L¯íëÃî忺ÏÙûÆ¿wÒ×rå¿)™Û0Hç¿;ö®¹'å¿ëyzØÊ?ã?‰ °J³Ü¿íºœ°è?pêÁ“ÞIä?å/›a*«¿Ta_Õá?Üù o8¼ã¿Á¨ÄÙmâ¿'Žø‰d±‘?}úoÇÓÏã?7‰hý—鿎ƒdA5:â¿¿EÙa8fã¿'/P¦Âá¿c¹âƒZé? øœ4†ã¿…nfA¿Æž,„žã?S\…2gìâ?"ñ ÁCÃà¿ßõèGã·?Ì7[ïvõã¿#%%‚Õè¿Ó›Mi má¿Þmfì¼½á?§3Øl¡#ä¿È¬âÖyÞé¿°ˆû–Iâ¿„®i£ ¿‚˜å…?Øæ?ºTÁŠlEâ¿›îÊÛñÙ¿ðC¶o2oÐ?Üý‹J)ã?ÐGk¦Fè¿ÞÞu¨¨nÙ¿¡ÌsÌTâ¿0:Mñæ¿.±)×Eè¿ ØøèœÖá? JŽ>ͲֿfÄnyüè?:Óóˆªãâ?wPQ^˜1Ê¿tÂ]°Üú×?÷Jäî*Øà¿xG[²ilè¿]x”֮ʿöÀþ.Ý5ã?~výµè¿¡$¼PÇÌå¿JÝ…8_£á¿^\LÕÞ¿°„àÆw²ê?}‡Üà¿™‚cÌë8Í¿¯ÓþþYß?e@¼2bà?ãqo”æ¿ðWïÓÇ(Á¿ÅˆÈeL½á¿00ûÿHê¿òÕäÃÒä¿ò©8À&„à?$ƒu´KÒá¿ÚFyb‰Oë¿Å[IK¥à¿Á»z ¿×+ô2 å?_Ó[Þ€:á¿&Z¶ôƒÛà¿ÊA ç‹~À?$ÛrnÐá?_˜¼‘ÞB꿯UѽHÇà¿6Ö¹#á¿:ó2X/å¿8f®ÇË'ê¿} “‹Áûá?ÙaÏŠ>À¿?ôûà齿?M|"­vÄá?'á‘ÄR¦Û¿ÿ‡›WcÜÍ?nd,¤â¿æCCQêè¿ÒÈŽÊÛ¿«?we9¾á? vÐfîæ¿h­‹rP¡é¿™k­Ox Ὺ62ˆÑ¿äo–Þ7¶é?¤â.º‡Þ¿#ŸˆÙùËÖ¿¤¨´oG“×?†Ï´¢à?o–Ò2·è¿É^‹Æárп„öòŸâ¿ú1•°è¿;?_DƒÓç¿IÍ¿d€Þ?¡BáO„êÝ¿Óè†+üØê?$“Æ–)!á?*tË}s¹¿Ù¯"çÀÞÝ?ôLÚ'\â¿÷–+΋‰å¿Æ“š²œ¸¿~Ñ&þ†Ÿá?¸è§š@ˆê¿bÞ5ÂÐrä¿eË›‹ß¿ÐìTБã¿ç>ULìê?šÞyÇZýà¿#,© šì¹¿½OÎNã?)àN€!à?›WŽR!áã¿ã7¡s?1™bá¿æm[õ ë¿Ëe’÷¬à¿a4 ªwÝ?–k€!¼ÿæ¿ñ*çNóë¿{orpÐ>Ý¿¤ßÞ¿…Å¿eû¤g-è? Òƒ€¤Ü¿e·_ˆ žÞ¿ç±@þÎ?Öä7ß?ò¨>sAê꿹9ˆHöÝ¿ë$Nvh Ý¿) ŽžBè¿[§¾—›rê¿tä+ãà?²EY‹,пàÆ‡]é?\­Qõ€à?êTQahÎÔ¿³W+{ç¿Ñ?î ŽµüúÝ¿}#¼×ê¿§ÃÿØ>Ô¿¬¯©j&•à?ö¦*sbmé¿7 ÒÀçè¿åïÓÙ±ýÞ¿#ì®Í•Ù¿¾_—¾{8ì?!|”Ö'~Ø¿Ù,a-ߞѿ ÂÔiŽÝ?=K˯²Ù?—öìNé¿‹X;üÌ¿éØÚb¢Ý¿/» Z-ë¿¶ÙÎŽç¿ì¡l1Z±Ø?i¤fâ¿¥|eüÞéì?ÉMà šÿÚ?*Ãæ)€:³¿ïL•®±¾â?‘v²K ûß¿Uq£Hkä¿UÕññ¥ë?F»¤€Tjß?ÍÚµáßë¿å iòµâ¿÷âAÉÄ!Ú¿Ûã©ân濲!Àìë¿´†gz<ß?çKŠÓ«‘¿c<Í\æ?*H‚p áÝ?XМ῭ÄNëÀ?޽l]Ð[à¿—ìÐdè,ë¿×è{,rÛ¿¢ü[÷NÛ?=^d•é¿Sõ¦ÈüŠë¿ðÌ÷ùEÚ¿»Ôô‚¥DÓ¿¸5#%möê?Ò”§…Ö¿èÎÂ%ÂÚ¿w"¢hÖ?„ÐÒ "öÙ?žŽHÙÛë¿pS:¶Õ¿­E1æXß¿ªK>ÅÉ鿼ÞìlÈpê¿·S¹5ægÛ?´H¾Q“k׿ö0(õZ{ë?M˜ËÎÝ?W~øÔSË¿¼ ÂËÙ?óIGñ¨Ù¿0å»H…Sê¿-&8iÊ¿ ©º< 1Þ?œS¹è¡në¿}RÒiºç¿š¥×1?Û¿ T¦.˜à¿Ÿ¥WÒì?Ôòs›‡‡Ú¿ÝxN¦Œ¤À¿wÑ’*–â?ŽÐ‹“›œÙ?âûÁ<¯æ¿X§ì­¨³¿œ=]ÒvÜ¿& ä£ì¿Æ¾«7¶俾w±Ú?œî߃Xå¿óÿmeí¿ª>Ô†Ù¿„¼Þ‚ U­¿º"(á:!æ?Ääç«ÖnÚ¿OYáˆöâ¿ä“dhTˆÀ?Zbû4¸ÿÚ?]›tŸ·ì¿ÔnOóJIà¿Ï8'ÑbÝÔ¿%ëY~鿇[ V™cì¿Iõxª2÷Û?ŸÃþÕý¿ô+:jú\é?¢ö¨ŽNzÛ?ÌVVA•µÛ¿jšÁGÆ? Cu+›Ù¿¥ œËì¿sqO¸HÔ¿Ú®_¯ÙŸØ??X+>¡½ë¿;ûN—ê¿—T,cÚÖ¿×`nVMÛ¿û¤@Èí?Û‡1÷Ï¿Ðm–¬¥oÕ¿|iwEØ?Uvô=Ò?L˜®+ì¿Ue1·ҿ£·ÚêÚÓ¿Þ¾l–úì¿ñÒñé¿+<<!Ö?J8ެ:Þ¿ÀGÊlií?BOô»ÅÖ?n¦Í!£ȿö×,7úß?\ ²bšݿľnܙ翦jÇÆ¸¿.Ï2Ç“Ú?öjÐeWôì¿öÇUæ¿‘ž5lMÎÖ¿©ÍÔ÷%ä¿.Kg&°í¿#{¥®Í×?ÑâEmwŸ¿9•A}÷å?ût%Çʦ×?-‚AúO ä¿6]J¨?€H“ƒNôØ¿öcÌmí¿_ù§¡á¿¹£Ê_¡±Õ?: igè¿R5 Žgˆí¿’œ‚äQÕ¿·l( ¸È¿NPú(é?t0ÜBiÔ¿X-|òäðà¿R]{î?˜_•/¼(Ó?ö¯dά¿Çe¦CÞ˜ã?–?ú¸à׿»·Û¥ƒMæ¿‚b'ZYÉ“?5i=cÖ?‚ <£Ïøí¿²–DˆÄàã¿hAV<ϲѿHÒDSÄv翃ó¨+%î¿÷c-eË0Ó?#²ÈZDÿ:Ķ/7êè?[p°q[Õ?ÿ»^žá¿tcg·Å?dº¤ÖçÑ¿šþŸz=î¿ãت<Ü¿þâ³1r5Ó?õ(6뿦T[¶zåì¿äؔҿ^¢‹¹´ÅÔ¿U"e§–ë? Á¿ÛåßË¿¢¹£îcGݿˉbs1Ø?îlL¥h¨Á?m ÄãwKí¿þfL³,ÃÓ¿0¿¸08ÓÅ¿W.ðpñí¿(^¨ Fì¿,.‡‹Š9Ò?wB6ÕÛË׿u6š’Ñ_í?'()‰cZÐ?Ük,âÏkÓ¿†L5.\ à?“¹ñHÙÔ¿K °ÀFé¿îœ)‘²·¿œ‹M1‰aÑ?ø\¼§î¿Ât(¨ç¿ýq‚%=¶Ì¿M/úFëòä¿€–öXæ\î?ñp›ô±’Ó¿ÞBª<6´¿>Ä•ÝÄä?ÛðsÀ Ñ?@{VÎÉæ¿ÃÜÌ}m‰©¿„átîREÓ¿åÚRyî¿ì6ýÚÕå¿¢­*»NxÒ?vÔÙ¨¨9æ¿3ª,ÇÏÌî¿£ã³ç”пŽK–´•´¿Kõ-:Úæ?$I‘ÁêÒ¿.@d´ä¿…ŽÉœÑ?†éSEiKË?Ǣƃ­î¿„”2í$›Ú¿ù!þCÏ¿| § ì¿þé;¬Aå_$AÌ?ÀO”ýœÁпOy6›eë?nø$q¶ÉÒ?–9A89Û¿š¢¶]ÂÒ?!²Öª†Ê¿5sNÞí¿,„°CÕ¿y:cvÐ?§0qÎ#í¿0 ;Zz°ë¿¼›¡âè¨Ì¿^U¨”é³Ü¿gËK¹î?¶]›Ì¿dÏ]›,wοŒ ¨º …Þ?ýI*[5@Ê?C¾“?ÏYë¿åA-»qPÇ¿ äƒÐ„ºÌ¿&G¸P¢î¿­6ŒÂÚUë¿’]Ô3[&Ê?çv8)À˜Þ¿bÙÜ .Áî?öAö³Ë?$€$û;úÅ¿ž"p)ä?:Öõ­éο8bűç¿_'x*&J™?óýÚý Ê?ÚÜdGþQᅢÖ±ô†ä¿3!Šg¿ž¢½Ù} è¿Lˆ“øï¿£ÔyGzÍ?Gƒ-¥tZ¡¿.ú»Bïäç?@‹!ÅÍ?“ÂÙþñ㿯ÐÙ–“Õ«?öˆ<1¡9Ϳ߭¼ù+ï¿[¬MÊÀá¿å¤$¡CÎË?ïؾ³é¿.£Ïz’î¿f§d‡õæÉ¿4xð¦ŠË¿þ*#Áô“é?´¥˜Š«€Ç¿®AºDHOâ¿d~1aÑ?Ï–è£b±?$͈Ղ¸î¿@=.6ùÛ¿ú_ë;ñÒ»¿¿*94”«ì¿¾!¡Îaí¿ «vDêÁ?f ²·¼·×¿‚ˆö˜WÆì?á/ØÆJÄ?œ½6¬Ú¿„¥ˆ5_ŽÚ?gª“Î#Ñ¿hIðèHÓë¿î§w„Ë¿o ¢ÑÈ?‚0 Js§î¿ÐZ}\=ëé¿U('~Ä¿QŸêšñ â¿2FªG9Rï?[€C -–Æ¿E¨ýlΦº¿¼Jøâ?/µhØÄ?YÃóbK=é¿ÄÑùt‹±¿7!ö"\1Ä¿ßÚ„Ìê…ï¿•Z®G[;翆$¤%,6Ç?p0´=:å¿ÏijïÂï?‡’³HàÅ?¾Ñ³FÈ9¡¿çÛ×Ïç?g“¦:E¿ù}¶D¶«å¿/èíYUÁ?î‘uìÉÉÑ? ¯&m¢n†™á¿ dšì!ÅÈ¿åkVê¿6eÙGï¿òõø•¥Ã?­iîIى¿Ãi*ÿH‘ê?÷gèÞ§ñÈ?B>TÃ.¶à¿ªD½ìM¶Å?å®ñ]¿U46!H3ï¿uªþ´¢kÜ¿àÀMškÅ?ÇÞéJÏ*ì¿·æD˜…¬í¿Ûhƒ mÇ¿/ÉÏ/¹ Ö¿›jz©XŽí?"» C½¿1¸^j׿Gmxp|Ù?©UfÚ±ª6?ïV9pZí¿¡!Œ‚Ô¿Á(e¸Ñ±ž¿Rƒ,ùLî¿ö¡8‰ß&ì¿$_÷¼¬?LÓ¿:7Þ¿+ȽѼpî?cÆ©†9[¿?ýŒ±äîÒ¿ÂNlU×à?aa| ŠÂÈ¿±0ïê¿¥´&b·¿•àênÁeÀ?kiù™ï¿ÞhTmü”ç¿>U”Õy·¿ÏÍ•ëïoå¿«º¥Úï¿ßØm¸?ç–ˆ²f†¿_|ñ­?æ?™2õ‰àsÀ?@Þ. ¡æ¿˜…Ž5œ¦?Çå.µ¿ÀaD4åÛï¿‹aÈ1~žä¿*`sh…Á?c¤Öo„è¿í‚Oôj•ᅥ.÷ÁT¼¿¿áðE6º¿~sœé?Áº½‘¯§¿¦ |›š ã¿8þXÕeÃ?ÀHîÈÕÁ?è7 ’‡P￉ 6Ån῾ñV®¿nYrãÄ꿱ߦòÚî¿}‡h¶ ³?˜åùîFп1OŒë?±{0å¬?ƒ~øˆÒ.à¿¸æ¿Æ87Ú?»Wi„sWÁ¿¡s³æSÞì¿ß°zQ®þÔ¿ëB è¼?¬µ¿î¿ò®îÁ2ì¿ibšÜP¶¿µ_J¢¿Ý¿¿€ô0âî?-dêÅX ‰¿é‘çM½Ð¿ÏŒZÎà?·»sâîe²?´yDiŽë¿Yׄ©<0É¿e”–t¯}¶¿X4S‚?ï¿ ¸Š ùïé¿ØdågòG¾?»ü<[⿪M?À¤„ï?š»*/óµ?^²5V7ÿd•j~ùä?ßš|§;X»¿§#€œç¬è¿#lìZžÌ¡?NÍ?Kį?P€sAëï¿6wø“¥·ä¿ˆ}q¿GÁiPcè¿•“7q†¿ï¿Yä‰G*gŒ?¥9€^¦Û¿¿^°é?ý ×¾%˜·?ªaÔãÀ›ã¿ž‡¤:¤LÄ?r\1¢q¿›ÞÇA˜ï¿u8ÃS…á¿ÿÈð!ª&´?ŽÔÈ„”¨ê¿À_øüï¿ «kõ°¿1yç¶àο§»*~ñÖë?‘@È È´¿ü­ ÆC ß¿˜ˆ‹7•VÒ?ÔE $”%²¿+ii(ÿ’î¿ØZ8LÜ¿¸MnÃ2?Z÷*"Âì¿»Œp±qÚí¿ÔT\…r|¿ äM´ ׿ ‹7|í?‰ªÿÖ?åôÓí`ÔØ¿›¨øß¹™à?*³¾µÙQ¯¿´ÌÞ°†Ië¿ÑÏVˆ–Ê¿aÊ=±ÿЪ?ì$8_ÓAï¿Ë§-àl/ê¿#Ùz:á–¿SË:úAaâ¿ÄïÞ³ï?1>*2?*7?+3@+8@4A9A-5B-:B.6C.;C/¡D08E$1F$9F%2G%:G&²&;²'4I'<I(5J(=J)6K)>K7?L7®L8@M8EM9AN9FN:BO;CP/<Q/DQ0=R0ER1>S2?T2GT3@U3HU4AV4IV5BW5JW6CX6KXD¶YEMZFN[:G\:O\;²];P]<I^<Q^=J_=R_>K`>S`?La?Ta@Mb@UbANcAVcBOdBWdCPeCXeDQfDYfERgEZg1Fh1ShF[hGTiG\iHUjHÇjIVkI^kJWlJ_lKXmK`mLÃnLanMZoMboN[pNcpO\qPerQ^sQfsR_tRgtS`uTavTivUbwUjwVcxVkxWdyWlyXezXmzYf{Zg|[h}\i~\q~P]]ÔPr^k€^s€_l_t`m‚`u‚anƒavƒbo„bw„cp…cx…Od†Oq†er‡ez‡fsˆf{ˆgt‰g|‰ShŠSuŠh}Šiv‹i~‹jwŒjéŒkxk€lyŽlŽmzm‚YØY{Zo‘Z|‘[p’[}’q~“r”s€•sˆ•t–t‰–u‚—vƒ˜v‹˜w„™wŒ™dy›d†›z‡œzœ{ˆ|‰ž}ŠŸ~‹ ~“ ö¡”¡€¢€•¢Ž£–£‚¤‚—¤nƒ¥nú¥o„¦o‘¦p…§p’§…š§q†¨q“¨r‡©r”©ˆ•ªˆª‰–«‰ž«uЬu—¬ŠŸ¬‹˜­‹ ­Œ™®Œ ®x…¯x¯…š¯yްy›°œ±¤±{²{²|‘³|ž³}’´}Ÿ´“¨µ”¡¶”©¶•¢·•ª·–£¸–«¸—¤¹ƒ˜ºƒ¥º„™»„¦»š§¼†›½†¨½‡œ¾‡©¾ª¿ž«ÀŸ¬Á ­Â¡-¢Ä¯ÄŽ£ÅŽ°Å¤±Æ¤¹Æ1²1‘¦È‘³È’§É’´É§¼É¨µÊ¨½Ê©¶Ë©¾Ëª·Ìª¿Ì«¸Í«ÀÍ—¬Î—¹Î¬ÁΘ­Ï˜ºÏ™®Ð™»Ð®ÃК¼Ñ›°Ò›½Òœ±Óœ¾Ó²Ô¿Ô²1Ôž³ÕžÀÕŸ´ÖŸÁÖ“ ×“µ× Âס¶Ø¡-Ø¢·Ù¢ÄÙ£¸Ú£ÅÚ¹ÆÛ¥ºÜ¥Çܦ»Ý¦ÈݼÉÞ½Êß½Òß¾Ëà¾Óà¿ÌáÀÍâ­Âä­ÏäÃÐ嚯æ¯ÄæšÑæ°Åç°Òç±Æè±ÓèÇ>éÇÜé³Èê³Õê´Éë´ÖëÉÞëµÊìµ×ì¶Ëí¶Øí·Ìî·Ùî¸Íï¸ÚïÍâï¹ÎðÁÎð¹ÛðÁãðºÏñºÜñ»Ðò»ÝòÐåò¼Ñó¼ÞóÒßôÒçôÓàõÓèõ¿Ôö¿áöÀÕ÷Àâ÷ÁÖøÁãøÂäùÃBúÃåúÄÙûÄæûÅÚüÅçüÆÛýÆèýÜéþÜñþÈÝÿÈêÿÞëÞóÊßÊìËàËíÌáÌîÏäÏñåòÑææûçô çü èõ èý ÔS Ôö Õê Õ÷ Öë Öø Â××ìÂùØíØdÙîÙûâïâÛðãðãñþñÝòÝÿòóßôßàõàáöâ÷âãøãø äùäåúåûûü ý éþ éu êÿ!ê !ë"ë "ì#ì#í$í$î%î%&'(()Ñó*Ñ*ó*ô +ô+õ ,õ,ö -ö- Š-÷ .÷. / "/ù0úy1ú12%2Úï3Úü3ï3ü3Ûý4Û4ý4'4þ5þ 5ÿ6ÿ!6)67"78#89$9á:á:&;'<(=>)>?*? @ +@ A ,A —B 5B !C .C"/D"7D#E0E$F›F%2G&H3H3H4I'4I(J5J)6K*L*?L+M8M,N9N:OP.P;PQ/Q<QùRù0R=R1S>S>OS2T?T@UHUAVIV5BW5JW!6X!CX6KXGKX7DY&HYDUYHUY#8Z#EZEVZIVZ$9[$F[FW[JW[%\:\%G\GK\7]&;]L];L]&Y]7Y]'<^'I^8M^<M^8Z^IZ^(=_(J_9N_=N_9[_J[_)>`)K`:O`>O`:\`K\`;La?La;Pa?Ta+@b+Mb<Mb<Qb,Ac,Nc=Nc=Rc-d-¬dOdOSd.Ce.PePaeTae/Df/Qf@UfDUf@bfQbf0Eg0RgAVgEVgAcgRcg1°h1ShBWÒFWÒBÎÒSdh2Gi2TiCXiGXiCeiTeijljkjlokmplnqjjokskpslotlqtmpunqvowpsxqtymrzmuzn nvow|pu}px}qv~qy~r rzsx€s{€oto|uz‚vƒw|„x}…y~†z‡z‚‡{€ˆ{ˆu}Šu‚Šv~‹vƒ‹wŒw„Œx€x…y†Ž‚‡ƒ|‘|„‘‰‘}…’}Š’~†“~‹“‡”"”€ˆ•€•ty–t–‰–yŽ–‚Š—‚—ƒ‹˜ƒ˜„Œ™…š†Ž›‡œ‡”œˆ&ˆ•‰‘žŠ’ŸŠ—Ÿ‹“ ‹˜ Œ*7Œ™7•¢š¢‰–£Ž–£—¤˜¥„‘¦„™¦…’§…𧆓¨†›¨”œ©”¡©•ª•¢ª‰ž«‰£«—Ÿ¬—¤¬˜ ­˜¥­™7®š¢¯Ž›°Ž£°œ±¤±3H¥H‘ž³‘¦³’Ÿ´’§´“ µ“¨µ¡©¶¡D¶¢ª·¢¯·£«¸£°¸¤¬¹¥­º™¦»™®»š§¼š¯¼›¨½œ©¾œ±¾ª¿²¿ž«Àž³ÀŸ¬ÁŸ´Á ­Â µÂ®Lï·Ä°¸Å¤±Æ¤¹Æ¥HÇ¥ºÇ¦³È¦»È§´É§¼É¨µÊ¨½Ê©¶Ë©¾Ëª·Ìª¿Ì«¸Í«Àͬ¹Î¬ÁέºÏ­ÂÏ®»Ð®ÃЯ¼Ñ¯ÄÑ›°Ò›½Ò°ÅÒ±¾Ó±ÆÓ²¿Ô²]Ô³ÀÕ³ÈÕ´ÁÖ´ÉÖµÂ×µÊ×¶YØ¶ËØ·ÄÙ·ÌÙ¸ÅÚ¸ÍÚ¹ÆÛºÏÜ»ÈÝ»ÐݼÉÞ¼ÑÞ½Êß¾Ëà¾Óà¿Ìá¿ÔáÀÍâÀÕâÁÎãÁÖãÂÏäÂ×äÃÐåÄÑæÅÒçÆÓèÆÛèºÇéÇjéºÜéÈÕêÈÝêÉÖëÉÞëÊ×ìÊßìËØíËàíÌÙîÌáîÍÚïÍâï¹Îð¹ÛðÏÜñÏäñÐÝòÐåòÑÞóÑæó½Òô½ßôÒçôÓàõÓèõÔáöÔöÕâ÷Õê÷ÖãøÖëø×äù×ìùÃnúÃåúÄÙûÄæûÅÚüÅçüÛèýÜéþÝêÿÝòÿÞëÞóßìàíàõáîáöÎãÎðäñäùåòæóçô èõ èý éŒ éþ ê÷ êÿ ëø ë ìùìØíØÙîÙûÚïÚüïÛðÛýÜñÜþòÿòóóßôßô õõ öö¡âïâ÷ïãøãùùåúåæûæçüç ýþ  þ ÿ !ÿ! ""#í$í$î%î%&ð'ð'ñ(ñ()* + , ®Ã÷ .÷.ø /ø/0#0ú¥ÇúÇû2û2ü3ü3&34'4 5(5!6)6"7*78#8+89$9:%:-:&;<'<=(=>)>Ç>?*? @ +@ý AýA ,A  B ÃB !C .C "D /D#0E$F1F%G2G&3H'4I'<I(5J(=J)6K*7L,N9N-:OP.P;P/Q<Q0R=R1ÔS1FS2T?T3U@U3HU4VAV 5W BW!6X!CX"7Y"DY7LY#8Z+8Z#EZ+MZ$9[$F[%:\%G\:O\&;]&H]<I^<Q^=J_=R_)>`)K`*?a*La+@b+Mb,Nc-Ød-Od.Ce.Pe/Df/Qf0Eg0RgFShF[h2Gi2TiHUjH]j4Ik4Vk5Jl5Wl6Km6Xm9Np9[pO\q;PrPerQ^sQfsR_tRgt>éu>`u?Tv?av@Uw@bw,AxAVx,cxBWyBúyCXzCezLY{Ln{EZ|MZ|Mo|[h}[p}G\~Gi~\q~]jI^€Ik€J_JlK`‚LaƒLnƒMb„Mo„bw„Nc…Np…Od†Oq†er‡ez‡fsˆgt‰ShŠS ŠTi‹Tv‹UjŒUwŒVkVxWlŽWyŽXmXzn{o|‘p}’p…’q~“;]”;r”]”^s•^€•_t–_–`u—`‚—u —av˜aƒ˜w„™wŒ™cxšd›d†›z‡œzœDYDfY{fˆEgžE|žg‰ž|‘žh}ŸhŠŸi~ i‹ ~“ j¡jŒ¡k€¢k¢l£lŽ£Km¤K‚¤n¥o‘¦…’§q†¨q“¨r‡©r”©sˆªs•ªt‰«t–«Š-¬ŠŸ¬v‹­v˜­Œ™®Œ¡®x¯xš¯yްy1°œ±{²{²ˆ²‰ž³‘ž³}’´}Ÿ´“ µ”¶”©¶€•·€¢·–¸£¸‚¤¹nƒºƒ˜ºn¥ºo„»„™»o¦»c…¼cš¼…§¼†›½†¨½¨¹½‡œ¾‡©¾ˆª¿ˆ²¿‰«À‰³ÀŸ¬ÁŸ´Á‹ Â‹­Â µÂ±µÂ¡®Ã²Ã®¿Ã²¿Ã¢Ä¯Ä¯ÀijÀÄŽ£ÅްŰÁÅ´ÁÅmÆm¤Æ±Æ±µÆ¡Ç¥Ç¶Ç¥¶ÇÃÇ¡ÃÇ‘¦È‘³È¢·È¦·È¢ÄȳÄÈ’§É’´É£¸É§¸É£ÅÉ´ÅÉ“¨Ê“µÊ¤¹Ê¨¹Ê¤ÆÊµÆÊ¥¶Ë©¶Ë¥ºË©¾Ë•ªÌ•·Ì¦·Ì¦»Ì–«Í–¸Í§¸Í§¼Í‚—ΗB΂¹Î¹½Î˜­Ï˜ºÏºËϾËÏ™®Ð™»Ðª¿Ð®¿ÐªÌлÌК¯Ñš¼Ñ«ÀѯÀÑ«ÍѼÍÑ›FÒ›½Ò¬Áh°Áh¬dh½ÎÒœ±Óœ¾Ó­ÂÓ±ÂÓ­ÏÓ¾ÏÓPK-žŠE¹¨¥«0D0D €vertices.npyPK-žŠE™8¹„("(" €ZDfaces.npyPKq©fdipy-0.10.1/dipy/data/files/small_101D.bval000066400000000000000000000007571263041327500201750ustar00rootroot0000000000000015 310 310 330 615 635 595 615 640 595 945 900 945 900 1230 1230 1275 1540 1560 1515 1540 1540 1580 1495 1540 1560 1520 1585 1495 1870 1825 1870 1825 1870 1825 1890 1805 1890 1805 1870 1825 2465 2505 2420 2460 2505 2420 2770 2790 2750 2815 2725 2815 2725 2790 2745 2815 2725 2810 2725 2770 2835 3080 3100 3055 3075 3080 3140 3015 3075 3100 3055 3145 3015 3405 3365 3405 3365 3410 3365 3450 3320 3450 3320 3405 3360 3735 3650 3735 3650 4000 4045 3955 4000 4000 4065 3935 4000 4045 3960 4065 3935 dipy-0.10.1/dipy/data/files/small_101D.bvec000066400000000000000000000123401263041327500201570ustar00rootroot000000000000000.51103121042251 -0.00053472840227 0.99867534637451 -0.01570699363946 0.70641601085662 -0.01127811148762 0.01092797890305 -0.7065976858139 0.68343377113342 0.73030966520309 0.5616380572319 0.59289318323135 -0.57953292131424 -0.57472652196884 -0.00025380766601 0.99943608045578 -0.01570699363946 0.44710674881935 -0.00719600683078 0.00685171224176 -0.44697961211204 0.89384758472442 -0.01408623810857 0.01400898769497 -0.89438331127166 0.8807618021965 0.90730500221252 0.427066385746 0.46771842241287 0.39947691559791 0.41698148846626 -0.41200670599937 -0.40400171279907 0.80501043796539 0.82725661993026 0.39083641767501 0.42591732740402 -0.4161410331726 -0.39991423487663 -0.81810581684112 -0.8147137761116 0.70678371191024 -0.01118473988026 0.01102659944444 -0.70699882507324 0.6895825266838 0.72428482770919 0.00020647639758 0.65857726335525 0.67422258853912 0.32043570280075 0.34651586413383 -0.34107080101966 -0.32525697350502 -0.66917836666107 -0.66387826204299 0.65083771944046 0.68214958906173 -0.67179018259048 -0.6612474322319 0.99962842464447 -0.01535430736839 0.31630092859268 -0.00479150284081 0.00514880986884 -0.3162562251091 0.94836509227752 -0.01460747886449 0.01520668528974 -0.94863158464431 0.94004303216934 0.95664525032043 0.29797855019569 0.33462598919868 0.29593941569328 0.3072674870491 -0.30528897047042 -0.29774451255798 0.8966423869133 0.91186267137527 0.28440615534782 0.31877493858337 -0.31257089972496 -0.29010045528411 -0.90635699033737 -0.90257829427719 0.56480538845062 0.58966267108917 -0.5829153060913 -0.57155054807663 0.5545887351036 -0.00859258882701 0.00884065870195 -0.55467271804809 0.83181297779083 -0.01289543323218 0.01324754580855 -0.83195966482162 0.81861901283264 0.84507393836975 0.53703784942627 0.57221281528472 0.50123381614685 -0.99942123889923 -0.00006244023097 -0.00174600095488 -0.70692420005798 -0.69603151082992 -0.71827620267868 -0.70749676227569 -0.00125570269301 0.00121260271407 -0.57137382030487 -0.58311182260513 -0.57197737693786 -0.58333188295364 -0.99986988306045 -0.00003121430927 -0.00174600095488 -0.89422339200973 -0.8888925909996 -0.89982837438583 -0.89451342821121 -0.44741609692573 -0.44243630766868 -0.45222103595733 -0.4472998380661 -0.0008025788702 0.00075893837492 -0.00156686280388 0.001555887633 -0.81227976083755 -0.82043009996414 -0.81256824731826 -0.82058358192443 -0.40668523311615 -0.41009393334388 -0.4047719836235 -0.41179382801055 -0.40494835376739 -0.41198608279228 -0.4065374135971 -0.40994676947593 -0.70707148313522 -0.70211195945739 -0.71214079856872 -0.7072148323059 -0.00124539888929 0.00122358393855 -0.99995183944702 -0.66463810205459 -0.6686492562294 -0.66252219676971 -0.67070341110229 -0.66263794898986 -0.67082816362381 -0.66471493244171 -0.66873240470886 -0.33191391825676 -0.33501955866813 -0.33188670873642 -0.33488422632217 -0.00002017364568 -0.00174600095488 -0.94855099916458 -0.94590234756469 -0.95138692855835 -0.94866377115249 -0.31616678833961 -0.31459307670593 -0.31787794828414 -0.31635177135467 -0.00056963047245 0.00053470541024 -0.00165830715559 0.0016543198144 -0.90207701921463 -0.90676438808441 -0.90220540761947 -0.90684694051742 -0.30096718668937 -0.30189031362533 -0.30025422573089 -0.30278018116951 -0.30030870437622 -0.30283868312835 -0.30115994811058 -0.3020381629467 -0.57489740848541 -0.57976102828979 -0.57499867677688 -0.57976251840591 -0.83195155858993 -0.82845377922058 -0.83555054664611 -0.83206850290298 -0.55462741851806 -0.5516784787178 -0.55773359537124 -0.55481922626495 -0.00098021887242 0.00095655908808 -0.00145794369746 0.00144742033444 -0.69829213619232 0.03401271253824 0.05145435780286 0.99987512826919 0.03513642027974 0.71792268753051 -0.69567221403122 0.01295893918722 0.73001152276992 -0.68311512470245 0.59841012954711 -0.5553902387619 0.58050286769867 -0.5739454627037 0.01612985879182 0.03357987478375 0.99987512826919 0.02144854702055 0.45805910229682 -0.43619033694267 0.00741326110437 0.02924659848213 0.89668923616409 -0.89179581403732 0.0011721990304 0.47355878353118 -0.42047256231308 0.90421897172927 -0.88387620449066 0.42499393224716 -0.39117905497551 0.41229027509689 -0.40425899624824 0.43193197250366 -0.38401752710342 0.82668405771255 -0.80561792850494 0.81415206193924 -0.81874054670333 0.40673112869262 -0.4101036787033 0.02250898629427 0.71197879314422 -0.70195007324218 0.00030738834175 0.7242060303688 -0.68949991464614 0.00981692876666 0.35289132595062 -0.31357958912849 0.67704153060913 -0.65580773353576 0.66676956415176 -0.66648149490356 0.33219629526138 -0.33475768566131 0.6828202009201 -0.64994901418685 0.66223043203353 -0.67127072811126 0.02725872956216 0.99988067150116 0.01431084237992 0.32441619038581 -0.30795523524284 0.00437629921361 0.02534307539463 0.9491142630577 -0.94800966978073 -0.00445062527433 0.34105551242828 -0.29125520586967 0.95457118749618 -0.94234961271286 0.31412887573242 -0.28873008489608 0.30467051267623 -0.29828983545303 0.32473245263099 -0.27815243601799 0.91047269105911 -0.89816850423812 0.9011737704277 -0.90781635046005 0.2963438630104 -0.30679860711097 0.59202021360397 -0.56229448318481 0.57409614324569 -0.58069401979446 0.01696711033582 0.55999159812927 -0.54934251308441 -0.00045547669287 0.0218068100512 0.83395713567733 -0.82991433143615 -0.00432626996189 0.57433605194091 -0.53464871644973 0.84355688095092 -0.82010388374328 dipy-0.10.1/dipy/data/files/small_101D.nii.gz000066400000000000000000002032041263041327500204370ustar00rootroot00000000000000‹ÉMÿ/tmp/small_101D.niiĽgxVǵ°½·ÄNs’sŸ“âÄqÜ1L¯ÑAH€ j h$½÷^L¯¦wÆÝǸcÜí8±'vbû½ïý¼çú¾ëüúþ}<—žgïÙ3«Íš5kÖ¬ÙôƒÿOÿ¾ü øŸœ Œ>ÿ«Ñu? &œ ‚[Ûü?ZÁÿûow»ØýÿjýÿÓ­œ¼7þê/¾ߺùKƒÁmÐ׿ýqŸ}ý‡SY—o=nùùY3ýõ»?´yìúÙÍ­ó·o=ÞõÆÙG¯~ý‡6Öÿß,ÜW?*ZvoQ½0'¡f\øið2¥7†Ÿ¿¼.5ü0¸!lÎ ‹®_^ ~¶ W…+®ÿÅu¯¿ ïqÝ‹áGÁÃ߆ã¨{ø÷à¯Á÷Ã&á¾àWŸG0/¯oÿ äs°_ Þ >àþ¯@ø4xŸ«Ï #%|?¸Eÿ‚Ÿ-×ý)ü2øiØ9\>z].œüîïkÁ´ø¼pý>5n ? üï…?ï “Ãß#ñÃÉÜÄïMáWÁ;´¹Žë‡Ÿs-þƒç} þ8|gŸ ŃëïA€ü>Cêÿ _…¦÷)¿'| Ù¾|ÜþŽò¹¾´þX¯£ÅUèþ>½x}øïàUzízÊ¿„«Wû ¿ïƒã#¨þL×ÖWÐýoÚ¼ß ¾CïÒÃéÝÿ‚ž×ƒ—õwÁá50½¿o ? Þäù{AøûAøR».üô†PðWäùS®¾OÉ?€€ÿz¸ü(ê»o#Þ þ̓ϑñ»hÉWpyÔþ-¸>¾ ~FÉAbØÜ ia.ðê…ï-7̧üÇáOèÓáÚ^,¿þuÒÿ-®ý/ÈA¹*Ñ/hñ÷àGHýÚ|ú:„ámÜÜÖ„«Ñ·ßÁãÍáépZx3ºøÚ3?œIŸrýËpx8/âõ‡áÏ€ñ¼}Ãø;xÔ=¯ÿü–vŸSò¾;…)Ôÿ×ß²ðQŸüúW„­yòwä›G@ýgèñªpOØ Y}üjæéÈìÇa:£±ô~õ7†A÷~ ¤[ ë[zízäÒ^nEÇþ6õ g‡åa#®¿ ne| SC©û ¸‡‰@ù’ëÞácáHzêøê Ç3Áú÷àŽp ÷‚š/пUÀ錌 U÷kJŽ §Ó#á®pQ88¼7ü¼þœ‘5&ìÁÝ7ÔO +ãp¬l~veÌÕDZþM ÞBúÄþK¯0öß„GÇâcáÊðu4ä_Á†ð5 Ý‚œ¢Í·†Ehű`;zø@X‹,v£÷wÓ{}ÂG‚UÁãhÉ“ð~*Xþn£îŽ`WpŒ™, 6r}8x2Ø̣ơ`oð¾ŽëÁQ®ÿlÖ{‚g‚sA›ð]îNѲ[˜…·RÿŸAëpmö#ñ¶Œð…Û¡îÝàÞp6p?XŸ€ïµÀØàïR°)ØìÓ~`íVs 8\à³:XIãÁ ð® –ÓæDprz.ÒŸÝÂAá‹ ÖKÈî0<î§gÁº?âm”í˾OSó8\¼ çùÛÃûj/‚e6í–ð˜–ÀãXæýÁðüBÄÙQ(ºH›sHl/p•æA¤¼ jŸÎÞH¢[¨sù¼·‘Ä~ÆÒÍᮎAñ3o~Å{¡ôÆÁËð±ˆ? ï /Q¾‰qóCÆé3àz¬öÒ>¯çpí»‹HëUæ-ùx’ëïhý,=ù uoa$¿„”.@çÀõ°¥æ—aðöðµ¯0Îne>Û.½Éœ~ £}3ŸgÑÚ;°bOÃïŸi³êŸEJ@á9¤ñR¸ù÷s~CÒ?…Ê߆_Rþ3ë­ÌÑ7… éúÞ «wŠNa_êQþ02ºÈõ½`^ .Çß‹«S/u"‹xοÎ÷ÃÓ`ÿ0¸=¬þ‹§‡™…¿ ?…¿óÜ7ïb®úLg‚Qç¨8Öi[‡™à(²}”Öõ˜ 6Ñ¿‡±dw‡ÿ.–R~5n Õðv;Þà ÈýÖð3ðýŒ:é@xþ¿ êa뻇oÐc×…-Â8líûàÿ;¶9è ¸~ ùÎBìÓÌX3€¿‰«Gý.tzØ6ÒQ¢eY‡4þE»ãÜ=ŠD[Âõ[èÆ0[Ž„ÂKÌF¿ã±À±­W°õ­°!ÃkôñØÌ`¿ ì Ô›.=Êçý0 yîçj/¸¶a_·€ý8åoÏQw | ¾CHï ô§^ø¿oÓ-ÐGPü*=–ëK`?Ó2^úQZžB ö£ {°·£ë¹ÚûÁ¹Ÿqz”¾=Ì“ýà8‰m<ÉÕQtð)æÉçÁx+ñ xÿŠ¾Þ¿ÇÌÿ òƒûggÍ‹Ðì8: ¥g€µŽvï¿{àv3ì‡;mØQÊvQçò8ÊXßFé³ÌFç¨q8¯¡_ÏÀ×Sàý7ÏÎ!Á <Ûø9 ´=Ð|NµÇÁ°ì{©­\wÃéQèx”vG(×j8óŽj=Ys´:ä¯xz>òÏž§þäÎSû8ÜàúL4žNQï÷Ú}pw†û`³Ÿ‹øÞ‡F˵ §À|n®ÒWÀq‰½‹¤ôtÏñýüÿ€>|}©þ¾ñEdú0ñý 0ŸÏn0žåú"X7"·C@·_ö Uq½IÍ¡ó(:ó>ýscäÝÈÃÔ¯k~G½‚Õeü¾Ï<ú$£åwáhæÇÀü€ñU} (çè‹]|_F§vƒé¸Ð×>¾—‘ÇKôÒkŒÚë±Q/åMìÕoh{ë~õ‡ð+Ê^Æü%ðÿ+|›ò/±™·àu}Hùøi7GW/á?±W×q÷0OÃãäMîÔ¥Àû 6ê†ð-èz}ûMØ{„W çcÆSÞáÛÐs•‘Ыó*¿ƒ<ëãû¿uïa+îë†Osýöê7ø2OCÃ5®ü+ù ÿÖà*#è÷ôË´û!­~…tžc,}<ˆ4¿ƒr-öO°=uëW¸~;Ò.ßAêDöù·Hå=`]Þƒ­~Þߎh¸#|~>fñG|çoèçéå—¡û–ð3úí84ý1?¯ …køw_Ñî#dÿa ?y#>ƒTî‚þËôøS@»‚ží¡‡ÎrwŠ>;@ï?FÏé1(½óèÍqZj7ówì_ãQ8zˆ•Ø7HñÞ`¾æÍI„îÛ á”7F#ãg˜K¾Fï^âSôÐ<= eÏs}ŠV§Às¨G¨¡õpd£œMƒõ®Àëa¸N`-ú)4œ¡?ê„úñà^oÿQôó2yIžàù“ÀŒÏix8E­3<; wŽÄ£ü9šó9ÃÈûÊô„Nóü{áè9Þ×Ðê× ý1pÿ9¾ Äóôè{Hò ®‡fGš9¤'¨©¥=Éý‹G#œóÌÑçØ 쇸?I›wÁ¤)®7(= u‡î°œóKPt >ÎGè§y"ýÏ÷,œÚòIjž…Ž Ü…*½ƒcÔ÷þ(%Ç"*N3ºOû4ÐÎ1*Žsý|¼Âõ®Ÿ¢î—ÔГzO‚AË{ßç€pœVÂ;F­×žžáJ8Z‘3Œuñk“´þï¢ïÇ)9@~KmEr{©÷#FÃ#Ì`ú|Ú+mñI¸P&jÇ îµ„ú6Ǩ³ûc|‹xSSÔ}Œž«ÔÞô£ÀÿMxßôÒmŒÂ¿Ñn=<ßþ)| é®âÏwÐ˵èÉ/°™êÚ3àT[Ž#}½X{@kù 5­±‹ëãhã/Ãç+‡áìØ‡Kàwòà|N­À0jpkx‚Yþ=lãÍØ¥ ø°Bú!öí$v÷zú»ðßHÂê2÷G à0cè]¸:ìÓXº°–zŠò ‘x;ð÷GÜ6ÂùI¸“yé~G+ì˜óÕ`Þ ¶ÃÐó$­ï‚¤õ‡Œ×âΓ—±Qß±:YËõçØ®…§ñ°ŸÄÜMùãðûNМqû.ÜGm­ä Üi¾ÁGm̨v4žÂF5Â&ŒzüWðþ+|¼£Pý=¬Õï¨s˜Ö7Qz3>ÒN¬ÚmøÏ®£¯ái®A’E›žÃßß´÷ þ<Þß8_âe»ÐàO¡m;­w£‰óY,áîqìÕ¸`:Wigñ´jñ{V±:X‡¤æsY›Tù5î'ð™Áõë@›CÛËèÇf Ìþkx`[°|ׂMÜÏŒ¥ïø5÷B™váièY „=PqšUè| ëµî¥Î†`Øñû%s ¢†¿×Ñ· |Ê)`~øKh÷"ÖþQà¯àúe懣ŒžMHø O\ -¡žú² \s€}„Öp­ÁËÙ…–΢õ®öòl˜&#sÜÏâz*ßÁÕD>S çqè™ .-ùn¸TÏruŒ¿íhØNê€Ã`ß1lÛ<®7#Ë•p5 Rº*’õ|zèaðVq7‹þ_”£À¶š«‚ÑAAPN_¸\‡e<Ùñ¶Žú«³ïeÀßÅó¥@ZÂÝfh]Ìóü®£Æ úk:õö ›e@,§ä àæ} ¿ŽNÕPöܾŒÕ9FŸžƒ’×€¿™‚Ûo¡Ò²“úÿÊFh²ÿ?eÌlãz;zsˆ+è¡Í´ÛŠç _C—#yq›•ÀYIÙ\x¶gÓª©? ­ÕôÞj=å_£¥óéù£Púñ9Âl„›šð1³¬‡+£Sé¯ý`ÙÎ-|ľH{¡¸š?õs/ÔÍDgs½Œgx²뀾j&Ñ;O1‡­åz½r ïö\zÓȈ‘¥UP»HÚ·Õp¾‘§ÐËÕпØ«‘ÍjZmòZjn¤ýZ亅1é:¸Ÿã[=[o~O®kºÓÐ>ëÐù"xÔö‡yþ ¼ˆøYEßël®ü¸ÞÝÆÅüíƒç5`˜k€»¸££žÐ†”i/=¼ˆ¿9ôÑs@4æ¶•{½Bç¹ ÈCŸÌP+zmpm¸ ¾ºG¡a ½²ƒúû¡` rZÓu௅ÇYà˜Œ™|¯¥½]€,ö@S-å+à¨ÕOT33ÆööPϵè)(\Éõ1tí0¸f•Ðñ´-ædÿ4Ú“s{€‘¯M_BÉbjëÑWsw_rð¦Q÷y¸ÍÇáà$ô.GVç€oÏ­ ü(T×€µ–¶Ï!¿y@œJg©ëŠt9rÒCþ30÷ƒG m´ù4uÕßkÌâÀÏ,(~žÑ³ zk¹¿Äx_BÛÝ@PÛÕ­üÎë2èVnêÇ*äë éêdÏô‚>ƒ\†Ë÷ýÏÈÆà¿Jù´~._@>Óh{‰ÒS”.¤\?ú) ig”Í긶?-ÆÅ¼é·~^ÖAç£ðòn¤ÆÜCz!êÓ­´x ÚŠmÁ:¾{=½Œ)¯ËÔyøÛÁþ šãlsû÷)’Ü%ÇYA¼ ';¡m/¾ï«Ü]àz´¼ÕW¼#äÖðeúp%íߦþKаÞÞ /E³üp]àol0l/Pþ:tØw“àú*|œj1²} YCvC‘þ_þYê#¯¯‘Ë.hOÏð©j‘õlh¼äSVËÕ謃>T5×û)LôÃËôa1”,Dj/Òç³ñÎ`·"ÇùÁzâ¦Ð±9'L†á®çá'lDºÎ’z+‹ m2ôŽG’µ´žÈõ®«‘™sr ?]ÛÁ\ï8ªFëžb„ç‰ôèž,æ«Ä)öAÇ*ž\ ¾ãÉzøGß|}ÉÈò}T=s(ÛKM}´Ù<=Âï8zO¿â u'R«š»íôó$¸¯¤ÖÃÈ3 Vòt;#Hû?<ÏóD?p>¿'(›Ïßbx<Ä•ã~²Þ ƹУ}\³¸¯ÇJkà]š¶Fý6¬K´ ê†Q¿Hëƒ,ؘ`8rXÂh\„LfðëZeµ\/„þ…Œ§yh‹ýµ–zu“øž¾U<÷Z‚ÅÔ_µ[Â÷f¸YM  oÔM’>¥Ñ÷2Úh}vÒbyC· —CÉVä­g<Фr0¦BÕZÊK÷ÔæFàUñq/a=%Àuí™O-5î2º=Xê›»ÃX¢R$z™~žŠìÓ%ü.C>ëùu¿`}à âÝRz¿ [è¹õè­ôïe”­EbPaL@¿l84_Á¢œã7 ¿ÊhÞI­<0¼Åh[ ÎZ^Ä*¬G²Káyu$½)ð´… ‘n.0·0~CU:8*ߦÞH>c¥ ÌUŒÓ¿3Z¦R§\ÆŽ'…Ðø:Öût壻¯0j_Èñ jDÖKø¾Mk€·„ѱ7â4—Fj·R6ŒQ'WÆ\&EPò!^ÈSÀ÷ï0O‚$ÏŒ°=O/ŽÆKÈù-<ö ¨wµü´W¢ùF"g)…ö^¥t+:¾(Ñk€²Ý5´d:°7ɼÆ8Ø®EÀû 4_ãzw2ªßCëF¢1¯ñ¹DéXî]Û>MŸ¸ƒ÷T>N@2¯ÀÑջ$ûs=¶ã<ý´Ü+èóHw:’ã~p  |!Ú5™!Þ+o!O’陡Èh$#e@dÒƒ“Á3‘磢Q±˜œD»­Ôž¯{CÀüœ¯ú6$ô>¿›h¹É~ô}\—‚ñC,ØB Â1,[1¨iÏo>ðËøL ú@A|Vy<2wL­¤ÎYžMF/Ž{ËÀþÖáŽÿà~x‹Ü9šFSàÛ]´Šg*ß…`E•ü–GWÃøžÉ§ rÀ¯µž ¶2h˜ŒN쀇>3ßg c ð×Âå!êlE»gÓv òYQ;‘¾rìVÃáx WR: J&¯œ®5k¸˽+ÌI@E?(“)àZ‚m °nå*¶úužq–_Lû‘´pý5Ÿú#©ç¼èÚ­’ºjÓÒ÷t¨Ôcr–™ TmèTêŒ£æ °Ùr*e³¹žÄ¸ÞÈ÷ þæ ÓCôÑpO„†Õ\Ï¥×#-½²Ðè0›ÞÖ–ÕRO«(=s°­Êr,2Ö+ÖC­…·¹‘e; ­Ö_‚Ÿg ϡƜÈö¿ ´Ç#éžEÓ]Ånçrd¨…ÚÎYP'Wëi= jÆs­>Z+©s˜Ö®§Cñ-cã;€z Òýw±zå‡)¯ð½êö0Ž®pum9Œ½zØj÷Là•‚a%5jÁ:~F*«ø^'±½…·ƒ+;)ŸDöjö3þþÂØ[ ç—ñi¦ÁÇ|GC•Ø1Z¾=zÝ»±oSëeá¨ÜÆ÷»š:A«ç¨»‰»÷6¾ÆUj¦õyÆ“; Ûñ=¶€÷}<#e¾/âÜϤÎAÆÁ9ÆûB¤f¦ÒÊ×"Í}Ô0¶ù ãöe®¥÷Ŧšßb\Íý¥÷€y È;kŸá×½Àl°†¶Ïc%寡|;½ýË‘ÖV~õŽ—r½{èús#’Ø ü½\oFûô'÷°Ö|›~xÌ/ru+÷’ŒøWQÓøôEf˜Ùp 9œäz.ß'èýPh¬k–}Y¤AŽÆ]ô¾°#Ͻ3÷Ñ–Ó^ØÂ¨uU´!š¥Î@·³Ž¹CúÆOpý~Î:dîÚ÷2å둘ë€ôê4®¶Âƒ´TÓØÚ<àN£¯–ÑJßÙÕÝ"ðl¤ä(X &׌¯!c1C…chCDñ¾·C³8£¨›©¯1êd”ñ#¬ŽóöRºŒz' ~3µ–ÁÓZ0-Â|`ÏãÚÓ|l”øVD8 wã>SßuæV~7-¤Î‰§‘´]hªë×™àHÐ5ùb`.×bÆépÌG2®ÛµX«À68ÿ³Š1ªµ¿ù”k§”å .‚ž*ÆëÐ\ƒÆÁÖ'63D=Žc>4º&Ú ýK€3®V#ÓY<ŸÉÓÍØ)µu&µ´ôîÀÚ‹µ”éYk³lqÝ8ŠtÆÕ(+ÜrÊÜvŸl%»áôðã› ÔÍ´ÛÁõBÚ-£Æšß&x×ê/†Jµ`23‹=v–Ïrú{´ŸÇN\F†FiŸÆ*½Öº/êŽøU¤jDù8cêCzçjaL]ÚBpî—sÞvFÑ^h¯€—G‰¹0WÛF¾6òì•ȃÓÚk«Œû˜ƒò4woÒʈäv´ëCž¬Ú“ôd œ­¥Æs”¸âpD;±Éž„ú÷°ï!%³ŒN÷HnP6Qëcž«¯Æ_f,ºa>ÊÛмé\¥Ö+P ·[£¥^%æý$ÒÝM3ù™®f>¥Ž+#£ÄÓö2R2ü\ƒêhðè»ÈèÑp)]—óî³pñ*T:..#‹—‘Ï¢è÷0µ¾FZVµÍ(õAd¾Þ–E|™1tS¨¤ÌÑzŸg>›[rÜÎ`®‰³h]K¯8’\Å8C«Ž¥¹7òfÍ™z“=Ž“Hp%Á×1¨Që/ñÙËøØÊÝqpk´‡Žs×gs¹›d­”‘cç|ãlFÌ̵zŒš®šló5V@•ñóÖ£)ÎyŽ;÷ÀžÓÃðå¾ÿÚlEãœË·Â‹ùMZ ­Œ1“iàšË¶mrDÇzÊ7Rs¥F<Â×Áµ§ÌJJÏs)9/ t?›Á7¶úx‹ÑYP±‘+w-VÁ±³¨–SÛìtZƒ_ Z9cIFΧRÿ£g5œ¿ÜÓ*­@–æ^˜z•Fo”•´{­•œÍU,én‰þ‡sÑt¬ÙR®Ü©™ÅÝZ¨Y„4Õ1e´%¢ãÐÏ£7«€ø#ï1ä8'OF£ÚÜ@{J™»ÿâºÚ|5#R5@3ïd30«à`pgR&'GèZ¸®…£«è£ž¥™GÐcÛ€x±u•ZÇÎ{@z ¼F²ß¦±Ùðk¦Æn¨×o>¬Íà1¦elÛ•ûJཉ„äp?âÞÕýf빞 Â7l+|¸Kö2#Ûý†£\ÿnŒKk¯\ï-Ä6Õ¢-î­/1'ÐFçîg¨ãÞ|9²}‰½,3ŒïÂ2~ÅÈ6Co-ü„šË#Íx‰ÒK´7z‰Ú/ƒk;<¿Â¨»ˆ¤œyÿL7ñìÍfº°Ë‹©a&ųÈà0–ëuúk?|Ÿ`OÐŒ¤Hc=uÌ×½.¡¾ÌבÁr4Á= mï0¼³ëöÐ#Á¹ /qõ‹™VËéÇ*¤á˜ÙL#=³(ÙDãwÆTí¯ÙÈ{/ã©-2×GÛte=Pô½P6è5@ßM®i¦͈˒Ò<øÓ 2^·šæò\ïÑ7:zZ®‰Àª¢O]_U"[×S§hûë)c-æ}>ËóЩ•PË)l¦gÝõÚ Æ}\—€ÉíþÒ8ð8ŽŒr [MœAw‡Ad$Ôï„Ow GPomŠëNé&ZU£®ö"¥e\OAúÛ@lŸluÖƒÏÖ2$»\Ó#ÚI:ŠX!Ë÷ðäqý0Ï«ñ‡Dý3¬åç+nDlͪú¹x6‹À«ýv±‘ëÙ|¦KÞµS¡Ö}•u`ÁõZúg52Èc¥¯Mq5ZÀ:x%xå±ïÙ<ŸÈ·þ Eýê•pî¸Ð§Z@›™Ð¼œµÝ8êÎÓ ZÓÿz{k¡«jáfí'±Ò^úûzQÃݘU<™³è£­‘îTÀÉNôÄu°ó—«˜)´Ã+ÃJdë>`!rFûÃà.ƒ—2~À£»®xwQkœ:O¸“³‹§Æ Ýmre§7n.ô&zÊ¤Š³P 5TA™ôí@~|*y~ ¹{^A»Ã@ÝÄQÈüíÜ#v¯Öü¾#`ÛŽ¼Öð̽½\Í¥YØ»S-´;\G“‘áQ(u×ôn p¶Q¢°oîêìcK±¸încì¾»QÎÌÆÚÖÐO»…k!åê8?»}‚øËhÝV½ŸÝÔ>KéÐláY LÿZF±ë?½æ ÔÙM wUÍ.„vG¨ïΑ{ÆÇ¡Î¸ôàî§ïæÁå°o‹¢HÓ±ë €04DÝ}Ð¥Ït’çyHt/”é×f¡3Û‚&‘fePþDÐ:Ú-…’ ¨6’¾úÇ¢iÕôÛrhIÑÐkÔvã$0æWトRó&ó)…¾ >Fé'ðÄݘ¿gÔp2^‡Ì“Á—G­H» àÊ]Ë™À›H WsÆ1ÇAõê ÝØöÚŒ¡—l9¾FÃg%T('£zUÓxš‰¬\ç­§íð*ó-<ïÕª…›~ô®™‹¨3F3_ó›Ia&ß…´×O 'ý¢¹Ð|“\¢ž£)5æ?„Þ*Ê6ð ïìhó`¢tæVÔÐsC±–Žìjô1Jvrç Þ>™|sYÆ1¶CÛ0jÄ<:KèÓ hÝèô­@ÏâÞ=°ÝHamwÿ„n¹ó>š³Ø4OÍHËÃŒÃ*¸WË 0s'¶ñ›H¯LE/=£^YY‚8ì΃ГMþünƒúQðR ^mÞxhp¯Qïx(Zä…rM‡çtílõqô&úQ®W½©t ·Ì ±'zS¾ ûeÅ`h¨žgÆÒbí\…U¡Sù6â[¶QÔÑ3:lÏr>ƒé9×Ú˜®‘ÌÁíÃ>a‰]+lA²µX u|rž]Ü‚Tj€íx8È“ÝÈu¸²½@Æ“ð¹ŽÏî=¯ F9å» l åÚ}gù`[ÅÝNts;ýV††m¤þ yБ0nq:h€4+è5ׂ©ð2là#겡u°û¢oá®w¡$ŒeàOÃõƒZGDå¹À™N+#·¥à]‹Ÿ×ø#¡Óì&´'F»:m8”ÍB9PY¼r¨(¦<‡Ö¥HÄQ™Mc¡,•û|ZOϨˇ‚ñÔ\ÇU)²›ŠŽvJvý v²åöÑ~æ†,žå2ô®ÊÐÅ2jùqQ¬å`©¢eA4Š"nQk,å ôd5Ê f,GÑfRÚõÅ zp!4+7j5ÞÓ9ê‹À¡¬Žx±ob£Ù—jx(f.Ï'"Í\Y2 Ã#þ3)qÀ½µÉQæR>î>²¾‘Wo©Ñ˜wÍ8Ù¬bWF­ŒFtFÖŽy3i’é‹ô«’úIHwV*~: ³ÚŠ(séåe\cîÈÖqôïjôcœÚäù°nÈ`mw³Ön ÷ãÑU}¹¾ÑL™ ¤3èÙpFF °6QžÖ þfÒ6…Þ*ÅÞŒ‡ž´Èbèm o¸wn~„vÏy¡)ŒCƒÀ÷x)áÙðâI1 y2ZF½€¼˜ò ´p ÐFSÒۛǨ†JæYp'5•ßbè\L­$ FFú?ƒ k,ܯDN†°¤ßG‡ -iôE3T/èëYýT¾ €>^†ñ)A–¹PYÔ Zeƒk,}åøȵ;‰+øep¾ÌyÐ?š–K¡3Édó 5ƒÀ+G#‘ã@jåS^ ƒÀèh+…ÃÁQ¿PžA¬‚¯áðQÎI”æÒ+ÅÀœÂw¸ "jÔ„¥ÔC,4¥|™732²Fúnc¨Y®lä_Mí1ÌÑúhîÙƒ·Žª¹vŽ*BG´…p7–^ÛD< «Ef¼  ^9z«]„^‡kó h«UÓ÷F‹aô¿¾ïpúo8e•u]áÈUüXÚfR×=“1h±~™»GXÇFãrôl|d•6¡hú6‡€»úôGNó­Å^—…ÀtŒÌ…Ž¡\eól TŒè·sˆûÌeüéçè³jmÂÚR1ô1âlvåôˆ~ÏPè!ê3˜w½zP±Þwƒi4×{áóå¥È_™æ$¸]VãÆf䄚"úÄ•ÝáHÆ­Óv2xÍ;:Çx²v5²Ù˪ј‡óôDÖuky6š>šL™gtõ»Ê ËœÞ±ôT1r6ŠX fˆLlè¤ žâêzšÖϪY7x_¤ò^„ÿó¾HK ×Ò­‚8>C€”„•jÍ_°·ä·E4Š‹°!qØžH­È](íœ"°vâY*zQ‰„‹‚öèþd¸«Ci3 ÏC>wPÏg®†FS–ÍýäÛº9´Òw ¼ŒˆË~”$R?}ÀÙ zzR–ô¶ô‚¼%ЋMé½tÈQ[]°Û…ð6øÉðïªÏ‘¬äŠÁ0ŒëNà̓» t¡+¤tð(ñ ®ìÉþÜ÷ˆ¤Û)zÚÛ1§9o5ßæÐ.NbôëÁ¤‚w42.…³ô½¾GÛp_ &¹ë@ÛBèÊ‚Ïî`+¿üvj&÷£ ÍI„òàzÝš;÷¡{¡1í¦¡ àZ‰LGÓªåú¨Ã¢¾MBûœáBCgú! Œùȯ35{#‡2žök6cu•³YNkÐZ9`ZL»TxÍÇÌ‹äe}h¿„1d?èï‰ú³ˆk£Ýá­IôG¬Ê\ðà¾7¥+ OÏ9ˆî@çPg6ÒÌŸîð¦…vO)­*aO§·º"ý¡p;ƒ{3çFCQ"zvfÿ@Ö9ÐjÞà4ž:ÃV£×zÎÐSL¹Q°A‘®¹†-ƒÌ(ª¡çùõɧG£Ýqo,¹ý1 ¼ü9jç]3•0sW4j›‹<Œè÷õ¥¶ÑR3fœMi…ŽÊ¥aðäGÔLAûzЯ+iY…”›Ófý>™ÝI‹©èÉ4,“Ù÷`¹×!÷ÙvÑbiðPáZb#0o¢¹”^7C³áÚüGn4ÂV¬Tä"mW W}ù–ÁÐÔ“?#³ÃáÏq? Kk^¯{öw«1°m\ÿ~çbmЭ¡Á¸G-—”_ëÒ¨®R«wÎøí@w§l0Z¥mê~±uNß ¥WµÓñ W¡‰­Ç$(XßñÔqÀÝžð4lƉR£>µ—Ó(×F觤‚ÍYLnÃçÀèy<›¦•)áÛJ½ŒéÀÊ€+s1GÃC<Žƒ\hëqRœžÐ– Æ¡ð’„NöŠ`kx– íIÈ­¬Ù‹þNÝ,®ú¡û±•\W¢i‹¢¹Ð•ctøµxý€KoiëR€2€g®¢S’DI/ʵÝÁ™ñ¤ŸÜnô×ò .‰§Yð1•þë}¥ÌrzäEôÓ,$jæl1O—ò,Q•Éw½",ÚÜ|ÚõÀê$q]eÎM½Ð¢q\÷Cc“Á4‘q[iO>½ïžˆ3H>÷0XŒß¹Ö3íÐ'R‡+èÙ™´ÎF^z¤y´/‰úï Àìïg² ¨;u=Û2IôErS0~1oÑ\5£”Óø¸'ºÝk^ƒ£tÝOp•´í4ÇΚ¯ÆKWñ¬?xÓ’fý¸5®¶\ÏWAƒë.=¥x]ÝiÌÎ1Ö^Š –Ðö(´jëå|'&ÂáDàl¥D­v'ÈÝ‹>ðSB…`Q#GP+x¦º–'îÌÆFðzBÎýrw Í žÌs3üËÁ6½=L{Ù•ó~žU‚˱±].‚³pEÔ›#èÙaãú†ž?ªF1x= bÜVY­ƒ×Åî¼a3ÎR4÷†@©QØ%´Öµm,Ÿm2œùÚk™rm//A;C}CäêþŒ‘Ù¹ w³šã'¨3£€7 ý5“ ÷î/™w­|u­óÑQw/ŒåQk(Ð&G#ËdhéKÿ¥ðm2Ì‹ƒ»è[c”#ÁÕ­G¸Í¡NuJ‘ûjfl—»>²3g!%î ê«9ŸŒ‚2êä ®Fƒ]_f>°ó¹Ê¤/›q=„qQü6ôrZ;©åS®Ï>>œ'´V¥Pnlº{£;ÃhYJ-sQs^Âï(p(S÷Ä᪲ˆzy|j =;ÂgýIP—Cl¦7õ=\á-Ö~‡ÓËøµ?õõiÝkS“f‚» zgðgT¤Èã"\®ÙÄ(e®zÜ©ˆåšº:p‡Ïuñ˜ˆºjzJW¨zç£áʵ¹ûte´t5aÌG©Ù)åÊ1ŸOM£•ÙÑhzÔj»Ü%HBR4_Üy&TL§…Q£à…¨¡v.WV!]µ•¢Yk¸sà¬+4Ù{àVy&£C)ȲUô$Ÿug $Ñšš½Ñ”ÆÈAO>fqÒ25âÈ5Kðê_Œà*XîW(÷¾´ì‡»5…ú©pÚ ÔßT¸é‚܇p7Líù.¡ý@øé†\†Bs· í´+" ¯ÝÕOt7WÎÀ‹¾dGjõ¢W|$³~ô"Ô÷B2Ê>:Îu£à·3OŒGJ=¥¢<Ô¼äd|¢œ)»ð´*Ò?#ߎêÔÊ¢u 4毈1•ÎV@2B7lègˆÊzò;Ì®ûÑSyàND–î;ç§ #!ˆúO ¸s¿©${`H›jjfò)~-ðúÏý¶©ôA?Ú:¿Öp•Ir,õòà¦7µÊ€š=ò›L­6H?2t?ºìŠÏ5Üh˜ÑS!¥Åõ'3y><Æ/:SÃL‘ÔÓ[wÏHT8†òë½+×®GœgB…óaÒLBÊ‘Æ 4¸9壸ΠîC“­k e$í:F”E’PJ4B~…”ãá@oév>ÑŠ^Ð×4¸—ñnDg(´µAþâPÊíð]ܻτ«¶<‰­.Z7þ§ c­ b$é´nÄéÁQ§ =ç~ÒH¨ O‹±¾MÑÿV‘Dœ'ñÀ”Æõ¨If<²ëI7ZÕ»˜:2âùÓ^««-¸Ë@ ~+ÆÖh¤6jâÀ•ƒ|—Ò²ô¸¨g<]{âî¶žàéŽ$ݯ7æß{£@òâ³OccШ™ñ%íu6ãÇqgL½7˜š`ûµQ£€Ó‰ùÂÆJdо0>cŽÍ® ¡f.s¦¾Î`äj,ÛQàxLCއ¸íH›žÏàª)t´ã“Ƈ¨Ù~Ê\§a<8‰õ¶«ÆI´î†G> üfý¦b(ëïbS‡:B¿ÖZþ:cÁJ"yÇqÝÞz"Ó6<넞t{ 0$€· íáÒœ¥YèÎHàø¦…Éàvöuì.Œ³U×Ξ=‘¼gú´CBϧníË>Г¾$ž´GRI‘„ä±5ÔjC\Yj†F¸Ìt5?C p¥8héÀŽW3’þw†-Æ»pÍž€Þ ç: ÍÈçI_èq=àŠ!'î,ŒåÚÈd Ôji{";-á8z"öÆ(~‡Ówæ%sÿ]»Ø.Í<Ñ>jo‹à6Ú܇-b^‹ŽGïœ{Øæd¡ŸÎ+= \Ë\„ ú ó´ÝÀ’G©Ñ(ã[FCÕ¹òÈf•¢½æ¿˜ã°ù)%`®âÊÕÇh¾Å¤=œÑ@*‚{ýBãnÅàuGKU .gww@*¡ Ž:f y.n5¦€©7ð&ÛSkʬLök%5sÀdÆ‚3¥Ñ²qH§€rgüIn÷®ÒyÞ˜zM}(wd7›e½©Ù¿É£yZõÆ|ú·+×FiS¡äÐÖ Ûd¬ðÁÝPýR‚>ÖåI] UÐómÐS½Ü)\7§¾‘ç¡|wæãüènN›Vð¯õã®i$ c‚íÁ;”uÐïOpè÷ÿÝmÊu0ã(m=½èKg&#åÝqmÁÖû’€\š¡+MxbL»×qª!ßÙP{+sR]8ëƒ$ÜçìAÍžPíªEÓ‡ÑsiÇÈIä7(î[t ÅQWüú¤ÚªÀè푊þ´òhL[éë EÍà~C¤üWõÑ2G]´Ýv@ïë¡õCÛó§ÅîͧpM þ¶H¬×m©Ñ‚¶i”IG[Ú¦EõC‘~šàÏSìÍhs/´»çÙ-3Æ— .ǰÒ4â—QPø-)@i®Z#!-”p<òÓíýŸ1Ð×^46«ŠƒGõbØÛ!es’&B§6I¨Ço&pì±ú@Mb.ô܃t:B±‘´»"¿;‘Ú ¬÷AùFT&Ô5¦>W1´¾q×"ZÖ‡b÷r©Ñ„ž46á¬?üÆÛ]tEÓá§ušÅì¬tdÙ=0ªO}Wo…´u÷RyÇÎäðûOܑ͆ÃÈܵû$û ÕÓAPÙIå³?T'óÔˆKÔ¤ ýBzµ;½‘&wÚL&2šÆP?¶çd0•"•ÖHÀlÆÑȰ°Œ è_ùÑÃÏclµ†›rhp½ù \»šÈK!ÐŒçNÀJ$Ñ÷‘Zqð¤«EÐÓçi‹Ü{S~OD“Ö¯ Êåp‘üëÂ[]>])w-ÒJ”ÛmàK²ž«…A@1Û šÜA¬Æ¿zˆ‘ÖiUa¯ôí½éÑ*´ å<Ú©ÔçGºÞjÛì ¡Áy]ÛКz5Úä–ôªÑ–dÚµBêæmµæ©kLó¨êq§VºCÝ–vBr•íÕw…¾¦@2¾ Të"!WÉ Ðwq)ÓNð!·©íîx›Ð#ƒÑ£¾`pü:'5áÓ ô¾²ÔjFëO´oCäÞ6Âå]3ho ®.\?ÏÚã.`Uƒ[€1É&BG=0:¢3 ãþèy{ÆXwüÒúPØ:Ò&ã0¡´÷¡¼!Ôöâ/™v÷Á««"=Èú\wøèF}wPÜ£Ó[n }ÄúP¬էͨÙ%â°3´êƒ>ħ- ¸Óæ´GŸðI£®’OF©H O\©$§9×}ÑÆv‘Æ:§æñLK˜@]ó ãyÖ’ïÎð§•ë mÔ0ÊúÂQ"ãÌX¤c–zËÉðŸ Fû̾,¾»³ ½3žˆGF=hçZ´ å©Pm~llOÀxª“E}çÞ|lA¸ný¾g¡×yî-º>Zâèe½ÎÔìF‘²y¦ä»É(³Ù:¢•Æ÷ô‚z@m.µ<}*áz”é :JͲÒó&Ó:IikáIi•@¡|ip…YF-WÎîJ ƒÇY”jQ³©%=ž‚ìÊÑhsb\«–ý±Dñ™‰ãx_EÍrà¹VsÏk øíAGÖZÚ¹¾1r¶ž§Z–°S×óóŒÁ,h2&`¾ƒûC®Ì3¹sÿ\m4"1œgúçÆÍ!Á)èÑD¬RRD¹ÙÀÚ¨|¸(E#õlÒ"ªÇÇñW³º•ÄHà¹6M‡÷ Г=i¾™ÑT³]œ³´ëîÃt£¶¹=íÑcóHGð=?ø:eÔºzÇö-§ß6ž_˪Ñ,O=3£ò5`ÐcN¢—j"é¸sõµûØ®€s)wEÝ–ž©BBýñ„\ ¸ë]Žgá¨w.«â‰þ:jFˤH–ÅÔ\Ž JøxÚų‰Æ\GA—¡f›—¢÷iÀÃ}ÜæÁ½;¬Æ‚Œ L©+£xQçÒÊ9Ø\>OLÙÏžíXIï¹ke¬Ý3˜æD§µçŒo¸ÇdÖ£g µË®o/®ãÜ 0R fGÚ?‚>©D†!‘©à2 Ûýj£¤žó­ªz©ÍqüØÆ+sõÕÑ3‘Ö®­Íñ°?Ó¸n}¥ÈÆü¯ttÜÓ8޹#©­WRˆåvïÂXX9â^Ëà83K½ka$ż,wÑ|;OørÔ‹ê‡vtz.=;ˆûn‹;­®¨G ‘ÍiÑ *ÇE™&€ß³ ®NäDËàδ޺Q¡èUcîŸE÷šA¿¹ƒÑ #™H|¿÷ÐÇzo¶u=bn­sšëqç­ÒÐd$:•RãÃîK'³Ú~V£©k¬éAh÷‰ÚF48ÓšÑ{'ü˜Á’‹DîூÖ9Èþ!äbÖÎÊZ߸}!ë‘ðR T{ؽwçÞ (¾þj°GpÒ‚_³^Ò¡¸;sp²v7.…ÙrrêI_õ§™ˆ¹PotÅü™R®“˜÷5L-à  fòº£VÄlôϨÙôFNÝ—ô "áӜϵd­ÔüžüøZmÜ}\«¡‘̽|·äúnÊÿgfÁ7ç=h{ì½Ñ®øHþÆ\-÷¡Ô½Ë4 W@íx+!V– Ñ“<ð¶ç©ê…äThÛâш¢EqðÓiä€ÏÈx0u¡î‡_gå&Ðf>¹±S÷û]Ñ÷„O£Úz #Ñš4Zfa ’+ ~ =žJ)…ë»Ñ3íŽ{ÃZ¶PØ™ƒ5îRˆîÄQÖ+cLõÁӾ݃¨K-3²;#m…3¤1V±»ÓÜ úFõD_+>땽h•ÈosÚ™¯žÀõ½ðך_íŽQÎÖpn^HšÒj{AUc(Ší½V"ðÍþ2ÃÓÀæAµ¡U_j÷€>óG\e¶KÐ]çu@ÞÆ’¨c>ŽqQ­›‘9÷´®œŒk¹Æ£žë^Ï´‹1ª|ÊÌù0;ÑÑm~q¶§¥1ô8jH±9Ûî/:2¯ƒµç:Ÿçi‚j‰ãyžŠüÌ»ŠG€[kºÇon®YÁfuv?Ê=´Dð%ÒÞè¥;JÆU˜t¸ãho:åîc˜åU ÷u‹¹6ãÔÜl,áL01JC_ý1ï.ÈÔ¨Ž™R­à­>7FîÔzš¦÷æÍÇ!M}l}=À5‚£µ72žmb eî™Å5{ÓœL#"ÕÌj¾‘Ô²6QM#jF½¼K†§nÈÊ}]ãK±­We>ˆ{/úÃÆ§\ãøg©Þ¼žkOžé-u·°œ^ó4«.žŸ^‚´³ B{hî‡;91/'ˆZŒèGoø0´ 0œ‰õŠ}o‡>¡þY§ƒyÖ™Þð-¿…Ôlw+È“0û«-¼m"ë±Éöe…àé 5:3’¡YF#Û‚«3X\ºÆÑJ:#Ù'c§ó†ëÔ…PìÞ‰o’Uß•t ÌE \x‚n xÊi黦&p6Ï:»÷“ÆŸ'\I¸6¦¬WaÖöžZ>“\îéÀÌþ<à¬ò0¨šÊ¨Ó'1 Ê7µV¿¶qvɸ;–æð¯Ù&¾»ÉÓSžwô-€µ`6Ãq9çî5Böþßžr—Ãwí _Ì{¯¢­ù´¾j2Œrúž‘±P>ˆ;ßǪ§è.â\87—FÏ×·›ÿ¤ó={æ·úV ß'50*è[½C{>}éû ͼ–Kßóm,_8ž#qæzϸ™¾•1ßÉ-¯æO̯q%Wšfe¥ÓÕÚzþG{ÝxµÔ4æw²ö””1Ðî©´òì’{¾ØlWG¬9®ÎÛÙü OÖ™£Þ‰zÎè=¢~ë€>˜a¥gw´cOÒÿ†¾7wÄ3±?G«‡ER*fP~"O†Ñ”ï@˜D©ë û=3ÒIgÓÞÌlfìxÂÍ}5O‚dpÕüæ«‘èFíÀðM%îÜEïø6$3ËÁwx‚ÆQjœhдö™@2ßI/Âl=G×Múž{ö×ÝxwA]«'sïHuGØØ¹á­y⛬ÜÓé@ÙøòW2²sÿÐH¬¾gUËyn¦®+1ßÕà;Gôì|WçÝuÖË«’žZC8ô¼¤ù÷!ãd<8ŒY?ÈjHêƒç"]ý@ßgà^ˆo·Òûók,cÌ( ÑpϱxÚTß^/Мpϲé-f3¾Ëi!Ÿ#°‡‰Ü¥Fmncé‹„óž=UæêJ¹:’S(1"cîu4uBEDÏÐhDºÿë~¨kì, §M‰ï¢qe;rqµžAÉm@ÌÄÎuƒûîhv,?,—+õËL¿ëF5ó¨Â·9Bf_š)á<¨‡åûôq=O™Î“±”ú³çœ5õ¬ì7GD)×F·Œµ™ó¬?¡7ZŸî˜™5|ê˜Q×ûú‰£¸r_¼9osë|‡‘=wš¢Ú“Ù`Õ1¯Äqfö„9?ø3÷¦5°Ü;5në ž‹ÄÔÒ•Ä…œÕ<ç6ÙeÁ¡™Ð¾3ÁÝJwm´…ÎK΂j™‘5÷åµ7˜´œö«9zñÚ½® hÐzØ«ZTc/)ôœñM3÷Fúc¶žÑ^{dz˜žÐÖ¥…Ö36{ë±¹‚<=×>@tœ›Ü¬åZ1…vî¤3ÊAjîãøf-”kTÏ‘%ñÝŠf§Í3aî %smd8öV€Á´å2ôúzϼÁLêV³r4æê{abñ3¹ª¦÷¬íÿtá~zà™ÖaÔd×”ÎfhS f’øž$tÑœUÿG#sîZÐÖó•¾é"ºmÆØô=moV‡¶ÀÜ™|¬¾¶Iy›uÝ‘+=±tÚú6÷!Íàó̤tv¥No~]ñ5¡Nמ4g«ôNj+ÆL팦»_d––³žtÎDž®LFÃ…ã;f;ßt4ù&#sõ’è3qÀÿWŠúÔ:Ë3y’ÍÚFÝÌs¿›Á»ÿ›S’2Ãͳ£Ñ'WñÎ$ŽP½3÷;\áyVÄuM 1T31}sSe[VÚfl˜yn–•§èÛ!ó{óÛ–Úf˜ië:p×¾åËsk ô„Y°9‚Ðßæ7Wp^ÓÇŠi®g]Y†¡#ÊÊqÍ"ò6ÿŸÚÙ¡PöGpû®߬`TÖ\HßÞbvËP`9›©eƒ¸3Ö«nÛbêë­:O{n‰Ôã¡ÊȉÑ\s^Fó.ˆ?QG\Fþ•¸ô]guv=¥¯b޾6¨3ýP醧dóù¸+æJ\G¸&s'ZËid×]¶ÌˆæÖ\õ„¿–”ÎŽþ¤{"ú$Úß®ô»+õôÉs7zÒ®³õ9Áa&Œô¸ªÖ–÷§v\›¥îª4áò ƒ1í>H§´£¿ÌœíÄzSÏÑ7fuæÚ7ïx^ƈA)”¯Ç¹>öLÜ Êcï]Ià*Î]9ã¸ÊI„£v¯ñઞºgdv{]°˜KÙ˜«–@ž§ú{FkÜ[1‡ÀÜ=uå˜GÅb®úRÃ=bWpfYÛ?îwÆ! ­‹§$ÛÃÿ@(h„×í1šQÖŒøŸçá<ËènÀ@¤W…¼bY;´õJ›ä h3ƒô—Šneíii&Stü:Û lG­µq÷îQßh!s³Âcçô=‹äJÉý1g6­²óñaÛ¶§g>Œ–µÎDÊÜ}ÐóšNm<•Ókwu{÷F!¥ŽRŸºí &ýFßBcþnì]@ñôÚzÇÓbÚıp§ßàêh$RsÉwŒ•Ñ:ÚúÝUб mùä`‰>Ôà—€!•6}ø3ŸÀu„y•FúÓÛñôaÍ+¯ Tÿt$¸ÜCse¦OÝŸ7víì«¶ºË6.Ò=y£VfÁé)Kw±}‡…§¯zǬ?3à»É<Áû‘™{C®žg0JœÕßCëúÌÓµ±Sò¾KE¯×U†s¶«@s²¤3êʸvž3§J K¢‡”­šíš šìÎY>|籺üž˜“¯ôHË]9ëyrEy:ØŠëæÐýG2 êAýÊšaÓ]%™+ì.–+Oã‰föú ûÃ,C#ßùè™ï—éLý!På¹O…ëwÄÙó™7C_[¢ß‘Ÿç€:±WêúÝYDZgö†šfè›» žGñtŽû ¾éνÿ.Ô×÷h UÎJF×Ì¡6öbö‡|i-=±[lý¡î ?·êƒ;Ùæ·ëM%G|õŒ¤éNຟnüH;,WZï&`òŒ¢ÖÊX÷ÎÜãjŠ|ZBqGàÝFt®~$ƒî@‹äÖ1ŸÝì<½ÐÎPàIDê³ÙfÜê¿™¯¡—èÙAãûF‚âùV·Ûãùz~Ï8o3¬~]Öaz!uY÷ÞŽoh5ZnîRKx3úìi}3;•kŒàiŒ,Ìk7ù½ek×þz[®àúßµ!“}ÿ‡€hŒ/…~m@™¾~7`ºò6Æ7¾ZÓJ >ˆ¶ñHÏ=# qæpFiÅŽy£­¯N)»öðØš:j\sà«!ÆNïcÏN›GÓ¡¸¿×—o3ŸzÓö4¯!˜}×ÔðtêÐN¸~õà³µoAuÑ%à9O'7ä^éßYËîâÎù«¶îvî`´£-õÿÍïðTÞÝÖžâ®7}W@Þ×-”wˆh¸ƒúõhÑÍj@{€×œz )­O¯zâöJ=EÝ žêsý ×½¸vÔ4€~ׯݯDÝú Tº«¥O뙣”DƒÌziB}©0‡BÚ3/±ósZ>ù÷ ™0÷P÷!~wBe}î{pWYßO-¯Í¥òtµRö x=_Ð ÊÝq6*Ô†:ÆëÀ׌žJŸqvÏïú®€X”2q´˜Ïà|Ýš:wÀ}ÊÍ—ÑZ5áª-;RKiøV"ø6ÊÒ“ß_¡EUÇͶ7'B®õêxÒÈ=3¼ÚÃèŽ;O àUËï[¡$>ëR7.â±)õŽšÐ3ž³NÖPËÙ4¹vFûÍq6ß½#ZîJCMm޾øVŸà×G¿ŒÝyvº>ÐÌ®#gg:3¬<íì™2#Bfã+½¦|'S¯0òUS‘JS¸Ó+u àúÃHŒùm̼5‡¿!šÙ8ß8Ñ“YÎó"™PÓ™R#U®(âÜ™+óŒ=?efЧCÍfuÏÔó‰`N„&×vîoyÕOÿ¯L[$ƒÏÈnì]ˆŽPcf8鿷Ͼ§¼]£G4×Ã÷†i¥Ì/õ$…NWݹòÜŽžØptؑѮŒŒ¹R÷L¾1ñ̶;±ý³á%˜_âÚU î¬éuÝWIR O={nŸªQjc>מ‘Ð1‡Ã·néýµåÚHž9 žvgÞÿ­Am6âÊÇHI*5J¤V™Ýä©$gÏÁºJ§="-Ih÷C<„<=}U‡Vêª\&ZÑ”ÚÐ,G·§–3ð¯îåJég¿Ds@SÛQ»Zs6(<žÒ¬Ù…,Z®ëðIÞÝü6¢®Z}×ú¾Ë¥N4Â=eèY†ðRy׃–úÀ|€¾“†´ñÝùwGòs–è ½3¾ì9¥n¿t¤óQkðe€Ý3èZEcÚBò£ž?wMÚhÆiÚQîÙËf|«}·ÏÜ.íB= )GO{J¦%áÃÝ6OêMš]Ö*jïÉKwdõT,«<ÏÇ7ROÇ{þÝs=Àhÿt@f-¹» ¥]{Ûˆöæ‡9·›?äɉ–P!WæªI™or\xRµfwuD"®@; × 0kß=ã•Ai{h4N¬Î0±ÝÖHÍQgF˜‘}ð$pÕƒcb™ÐÑ€ÖFèô =5ך1¥§Öž:M¸òÔP{(já*„.¥ä=n!÷1@rœ=@™9€õ)½_c÷æµéiUÓig\Âìá,¾Í²³ß²¸êŒü\=êßúV Xþs_zªÑëM ç•Æ‹;æ®J£þ¦«héx®V'@O=x6ƒÆ8ª{AQå¡Çï~‡%ϬšãÛ¼Ž¥ž ÍÍ¡ÅU\?JÍ•uרa_æ!O;ÔåÎL*ßÏXŸky7â˜Öê94gFßϵW*ÔêáêYöAz…J1‘«ÁëÊ¿eŽdãÏâhJY÷fõ{>Çw_f¡»ž*7ŽžMÎU7 û–¤¾Ð\jÍŒÓÞz†¥‚Z®€µ¦E\»w7€§îªù5ž¥qGÓ³Üf×›K“Ã϶¥Ä3;"Ëõ+ q6êö è6ÂîµÙ¾õÑŒW]þ¿ƒ l eçÌ/.³…\uzêÑÕMìü ³j?ú²9½çÛT|cƒëX¯]E6‡c÷T¤ÈL#ß¡àžªoÇÒ~Zbö§£ÂwNéï§RÃìPýúD¤¤'ézÀu¸¹¾KIO½9pÌ)ΖxÍÃs·Ü»ó`”s¿þ¨¾dô5\{šgbþ•¶É|g£M"½L@î:f:ÓSsí"™x:i0P|ë{!æMéõzF½œ^޽õÕ÷ªúÆ"=3NݱR_Œ`š‡ëK<­áyß7Y …m QOÛsC½ÁûÿUŒfšëÿÖeÆx‘oØ/ʦ˜ˆ ñG£KÆ#Šé;×PƤù™ÏìN‚ïÑ«ÃJPËéšÈÿÉÑ7]™VKürêmúÖÐZ ¹·áÿNîÉDýlÿít÷³Ì¯ë îÁø>N=¼L`L‹øö­}ëCF<¡ãÿ+ç{\Éùd“Twæ‘ó8!Âä»U—áñüšîûI¯ëJ÷»©ûY½°Š0å*á©?ßú¢¥Ë7‡!ÙæOtnío>axýûÞl}éklõÇ_T÷Z‹ëñ×¾¡áËúß§„BYƒíü+…¨§…FÖYÊ |¬ÚÄV“m²—áeâAa²B‡Ù¹8û·úw§;Ù…ö7$á^%½Ÿö‰("–Î{µ‰eMÿ u°Ye$$‘y-°ZøA0xº!¦ìe¨‰Xº ÕpªÏ¬é¡9%YT{·+'üÖü[ÆÞ…û}O“»Öh Éc(Š;x8í!ø’yÂÒ·3å[&³ä¹Fæ±\±ˆžUD ñ~+Ë;Þn†­ãÉ]Qö2Qé'{Q´>‰Ê ø¨>±mœ‹›—›A¯®T.‰óF¥ò*Aì¿ë Ù7aÏßÕZñ7[?©t˜ÈÚþoÕ QÀ}ù}ÏAc!×¢ ÀXjp:lؤ•§vaòüàÀ²!t²¨È„úßk;]í­æä¯õˆ^$£Ã_Z gº“½ù‹ZÃ~²ÒôˆÝCkƒXÈDàD§ëÈÇN…ØñûÛûµX+Øx‰Ì‚ÿ_}’/¢ýßúôau±Ù%2h’k½a\Nzû—Õ­ì ÕUs‡ùæ_ÔG8îé4Ð>V©6b»=Îâ»ÐÿÔ·/²wöÛ™úUí™é.ëWüZ³$âôAò;ÇTü>ùÏo+:A\û×Γw|É® 5¼Ñç/ºÛˆŸŸJpJ­nÅÓäÓyµ‘¦gðV‰p»›D‘)ÜÛLÞë?4VVT¾Ÿo*Áœ½‰É‰ƒ£Áÿ$î€æDzZdã`ßËJÄÁ8øª1çׯï|ѨÑDä¹Á½„áÁš.W>®ÞõF‰®÷çzs¯;åB6>²ª‹i•kh¼á†/ŒTÂýŵ„ÉÙ—ò%`>}ZËht° ¾™{]ñß‘ðp'›®~sºOø“Úóa-‘EšÆL·ý¶¿áU²VÊ(î ç é]gb»ŸW¾Ø ß`ªc@à&8i0½F&Ü.\5 2Ή2ÅcÉÆŒr Q×sQ¤r÷Ê-ù¼Ùq2r@ÏU¯?ŸãåzLóþ°¶9Ë­œZKf“WÎ…?tÍÿ†çÈ»u¿u"ÿŽ·)º&×ÄL“–røbö0N/×ÀþOð›%³[ǧE^¨GÞ^&—î‘f_>»¯z~¾ÂÎáŸ#Ùð@ù™¡Âð: ù„÷Ã’âeͧ†ÂÞ¢§]kø:ùWþ©5 6l¡Þþgÿr­ÇE" :˜+xA2‚‰!ò¶ Z ÜqdþS/ÉB×ä“ôî"2Ú‰i_H#ˆLHWY(žÖL©ÌøÓJÜ7¼2z¡ü6l ï& Ã<«MiçNŽ.͆ æËØ›>vqp4C±Ñì&Ìþ¨§ÝIƒÀ†¤:)Äáòù9ñéSXˆ2,‰.½Úöûå®íJ¹4D9ãÊ‘ÐpWÌ:'ûÓ°òýx½ú,9åtÿa%<ëÀ“Xšuü´ÿwÓUï÷Û\¾«Ôª’í oZ|¶»žV{ß©Á£¹0­róËO)Ê–ô¬»æúý«Ð<ÊÍ•ó³l4·ù>Ç¡‡ñÝb}žéiÒ‹H_Ôó_ôV»‰„Ý`¼\j$Ŭ:ßo׫kYÙPc~&;/ý7Y¹|¢Ç+ó›¾µ'N¶’鳸`²©bjà—òÿzªŸ|“”Ê(OÎ%ÊyÁ7²¯ò­Ÿ'Õû OÕÛ·ë=ëûTebõa€Ò®Ùn˜&×ûÇÓOwç±SÂó#‹Û­©F>ö=?ªÍoWëžF™æûéT—L§ìð3Õt£y¿Öñh‹˜jìÝî§™a(;éÈMQ6ìjkR\_»—®j͉T¢!Ó%^<<¢ Ó7:ad„êôpkñ|Å9Ûêuö>©|~Vç‚àŒàwÀZí.Úcñ_*[îÁ{Í”(ÕÕ…qµ·VÈ]Ì7&_"G&¯­;8ÃF‹là'²§ÄðÁ-øµE$à ~‘”ÚVùwZ ì÷L5Ü®ô?ö9äGtõgÝ %dBu‡è8ÚÌÞiU>©íWû\¾*þ‰ëµò@]˜®±ÐVÛ÷ußó¤Ç×áfë¤ýEW«ª _÷ý>—Á× &w2ÿ¼yÂ@9ÐoV-óD5ÑbïÔžc:ÏîÃæ_õ~š$ü¦]Ìo1Ððu­h³ˆg¶¦rÄÀ‰£Ø>|}Z Oëûºæ ¯F …È‹e•XLß{ý–_Œø­Úµ"knæÓ_Ó7Þ¦ú—ÆìHw;=^¤ó\¯%ôéû•/œ.%š÷dW8¼»ÚÞ ’sìÃ~‹¨#9hÉ0+>D𿬾<d#‰E£‰òuÏ=¯”ÕòËîøõ÷~‚îìÄ=ZÙH`ÚÚ¹§›¯ýòN+ÉAWb.t-æXTý±ê塲0Sl ‘àrmm¯VçË%kÅûÕy¥»¶76ßÖÚ/ç}C‡¤:G x2Ï+ÛJ¢U>éÚ^Yï.S–]ìý,’½ÍÖãÊ“»'ÊØÒêäÊ}Ð|9qnô .?ɽJÿ¼2dñ>‘ýùyµ°÷:°˜qÛN¦›ò‰åóî4þ)ø×Bí/ƒ…N6ÓfgºKL¯ûkƈ}Ëø¶{hdg³¾žüdªË;0MÏV+.5þR£ŽBÒ9+Y„P'Ù iÔã­e{NNUZ"v„xb:K@|ã¯Z—ÿTÏÙXÞ¶à|ºW½ßU>ìþNC°ëFŽÀõ‘u ƒ7O^¿[½0h~1Ù°µ¯÷”˜)H8î.O'Œ sSÔí‡== ac1]­7ä5Ù Û9æäÇ6RbÇÄ]=©.¬„ÁÑ=Ð7–‹ÆÁ‚S[ëž—¥–lòÊ¿ ¡§‘ŠÀØÂÒæeÄ¿"»ñ˜éE4q\-ÌV'ñ•Z€éw©{ØdîÕ:ò‰í '€MÙ?vÂðW¾Ñ^ÚÛ†ç}^ûtŒíçí»‹•.Ò˜½Îšp Ê>ƒ8Âfœª¸90fø£öFGDtÒ²e´*dRË:ø¤z÷÷4ö”œì2ÈÔ/kËÕZ€ehwÞ®·ve–)E¶nšN-RbÄ•½ÛèÙ·{rÁƒ1€P¹&k`ÉxÉ'Æk‹€+MnxG]î‡ïÔ>òsn’l|E¿jF¼¯ëZ2À3¾úöQRžýéä%]ö7“V”\¢¼ÉÐgº¼•{¤Q{7Iý¼–ìëêíï}¯>é 0³x<€d©SÿFk —'Vþœøì±ÆKì†ƒÜ °­«Ü|µ²—ígñ\4¿£õãŽwzõôíîêú¨³Žd{w=©%br÷öÔÝOÀ5>ì[HÙµ®ßì[l <7È®²çùeSÏ„¼ûa_+‡‡Cïvwõ¼².'e/¹ôDÚœl·j7ÔÁó¸Ð2™b×Ož+º$ÎïùÆ– !à¡ßÑTÝ ™0æ»»ëJíÃÇÛ\oœ!ü‰Ûj‹Üçzb®v:ÿD0¨gdÌËÉä<µFñÓäd¾±šä“#¼›BŒ8Îõ{}n‡Ÿ®~üjûwïJe½èç³5º»oÙúœ_J(âÏGä²³GµKŠ|bd4:NŸkÕûq׆|!ô;l ±­û§Ù$6’×Zç0~· Ýx¾9þmeï­ÝfƒOäHO:[ùBð쎷Cy| •¤šLxâ6ù e÷«KPì/³"ƒ›99“&&£þb§¾Ñ¶Ãù[͉ÕÏlNd£ã•„´ÚíÃ‹È ²šd'÷¦5ÙF1³x>I­õ [ÝœÌ6âÿ^ëöõoo¥ÿºöîšÊ³khÖô’˜•ÆfßÙßtx–=V4ßɉi6qÅ\d.,HÌ( ÏÉ&Óár#w¸¿GDË®FÐØÀ?蛹Oj1\S<•»ð.OU{ô³®e·H|ïƒprÒAîöó=ãxÚØàÚ^ÿÖÜ­ï|cìî'É«Ý}‡Oþ¨\£;j1vÆ$É|+êzϾ1i|Jô©#ÍÒþZq£ž­}}r£;vN#w¼–¨&x„\/X:jÙŸ*ó÷ñªS.ƒŸ–Âî=ìÏÒë º"0ž×š£õŸÏïBN>§jó‘~žë.ü\†£µ”·þ@3ŒƒMÿízªöÒÿ[këãtÚ#ÄTìnȧ3ùΓF'ÅÌÇè„SêÏ™UîM0ØÜ§[…[ëî …µÆa%[ãæ‡¦1×7p2xÀ¡®é´²8¥ÉfqÞ3o”=ÛÝd ¦ÆùJç¡ÀÔ¸Ðê#gdI'·È=6b4V ö"F öç?ÔGx¥]Ί0ÎfÜÈ ºñ ¬c9Žug½ÂñÏõÓþ‘{þX÷ž­f̽¡‡`uÐ !oNpX”ì|=¦zÃ.vØz4ÆÃ’G—΋¿l]Ê ŒµäüÀÇÀÈÐF²úp{Œ½hå’±v;üÁ‰:°¹"ðñ?¯õ·]Y+½ €wS9˜Â2E`Ù=®—Fò|-åm"èÏ+‹/&„Ô–ÏBÖøôˆ¿ÿ‹¾ç'¿A›û¸ÞÛÅ4ÍÇ”h \gÞÃôi=æ7¼× 5Okv¾4 g€ØA?é<"i¿è^,'yÊ>ïixº±…W“½ØMxú*ªu_#hò.c’À­EÓ²’Ðø¡Ö:à{w»ëö¤Å“°|¿íSñõ<}²ñÂ:‰Æ\ÚýÚ>bu°§1i(´­Ïê?Ñ·=-§3‹o¥éäl0™?›ÊÄ Ñ>Oܯ 4ŠË]‰ö"¡ìnÈ$ËÄ`ѯF¦# ¨?äQ}³µÂSúóvðgÉóÍØû¡Ë¸îίÆ"=WÛæûÏîÆÇ8ù •¾µµp¹ÿغXô!l&Ú«•Fn‹)c…ü±z—GáQø˜wCÛßH—ƒô˜­‡É1œµw/ÝqdÚQ;Ú7äß¶z0—¼Àa:Q+Mg„Èlf\J9nD‘œè31=w¼\ 7³å!Ï"9gÒJ´×ËÛ'HÜ»•È ÁÂ\H~nê3'Ç‘ø¸©dïÅjÚ] ´z5½ŒõÂâ>Ù²¢ÂvÙ2'û-Ë9ËË[Šn'ÿí¦íÕs1o®2íåcõÊèÊ»… ê””açjgãéÄâyÚÕ·¸ð^ì^`V–¼6¼Ûxap\¨LeáD±ÑÏN­|P]»*e[õÉu|¬Qƒž¦ôƒ6„#ÃÅö4ºÖ¦ÓZÆ;O«ä¯‡QÙS>çý¢‹ò ãúòb±˜0Ãø'IWíaÙ\ë;™øÈ ì|ÜH'ñùJÀ§ÿccH÷„Åþ¡¹‚ª D‘'údRÀ›é òê³×Åе¡àø-7ë/›ô^×ÎY;s‘ïk{íÿ¨“ûóJÀîþ"½Åébåó#ÓJÔR^;<o  Y”~ ÷Ïá~’{¸ZVˆÁJ;ÛßÿÐçû–wú£î8ܪƶ‘µ¿l?,®Ÿ¸€Ð§—’$ VÑ¥öïÁêâ)©lž6œND?»çxkjÏ4û=ÞJÉmÿ³|åªÛ]‹dDÿq÷Ë7cü$­3˜%¿9  ‹tÛøÓjbM@7¡w´yû`dV8ËŒžóEŸàJCn½G¯UG\ôùúJμÞ=Ò·Nq-d+ˉ5+ƒêû}ƪ¦‡’æ<ú|ÐöýŽžø¼¶âðAƒy4hš2øÉ¿²©^lªL¬PYŸIq¸"6;Mà³FÌØ¿ßgfÓß­\(«š¾C¿Ð"oú{6íÄ…z6ß*Äœ¤Ÿl©…ØŸs.}ooHêŠd°‘äáäÜÍþ¦‹‘s7+çk¾Ïébÿx$¬i\=ï»]½d í]èÎú ~‹D”‰¨#2Þ(ïêÞ}ÕLÆá5Ñjº1áe?ÒÝû„;Ü} Õñt7½ÐÛ ¢0v$EqùåºÚÕYÇÿGÃcoò½á°ÂNß•5··ôlx†1ó¾«ÞjÞU=8Gk I.ŠñDm†¹Bº.u‡ŒI02ó{ºìBh÷îê¼Vyì8^Ž ÷îvô›§–7+ðh3q°ïž5’Ó;{úq¤Ùq =®<±?lø›H©C³¯t°ò­7±¬ g˜øèÄú~Ô}¾vâXU꿹ÆhyQ[Œ Äâ«ZŒ¥NëÄ„6´ÁÙr¹šÎöq†{`oZs¢Õµ³ÉokquýÁfFžJ–Á€/»ïÝZ Iñ†»ˆµ5æ‹ÆD‹°šX»v)î-_$i …¿!#Á\ßy/½&§Ýl­°>hü7;ÕÖ¿ÓÍâ\k\ÖãõøÇIŽõ²;WKwÔBö ;aW½æA€7¬L±Vö0ÏÌ]ÛØ4pÌp:ø`¬nè;’…ä#Àޏçjm?ùî%C–Wº(ô›•=Û}OzZ<:øf¥h„ ßÆzKåBlY»já–õŸßL"´B{p’iGÂÊÌö·}*"dC¥ý¶ûè {jR^q+”¦}nÒ˜GN`x8þ%®àÑfû5°µä Nñm¸E¬3ùVÅé_©4Cöݯ»/GèÓj=”fà LøÆ§Š±ÿçæ–w¶SóÛj !á…Òêùqì%§£œ¸$î¬|·{úoÅØǪÇ“¤OÂË[}(¼ýÏÕÅfšïüç¾rjÊw"»ß4ŽæÒVž)«ÓýdO±$½ûmo£@:ÑH¹ãÕj èï3¢cxÈ[óEåógŒ|!GÒ5i/*a_gýwõ õ`?‡g{žfÿv¥âÆïŸöLð\kéR?ílLÞÁHs&ȳå^ëýƒJ÷ö#ŽƒÛGƒúIã‚u«Y}¯ïÉ qöô¹rδ·åv‘kt¾‘"ía¦âìr¶z®2àiçûîdßðãñ©ãY8m®¤ >ïº`“eX*oW;ÝUÆK,X¡èEž}+V#Zkâ ±u?{N€‰'>Ài€WEþ‹Nð†²ët=È&ÞEþgžSD| Æ»LÄôÇ;µßj¡“>¨6§í€Ô"¥DYÙ[âûxÔÈvñ†8¤"éI4cˆÉE>AÕä7ð ?S>½év%ïzàé{»›–¯o"kì—!ÃI³=µ‡VÅWˆU¼¹Q„1{ør:[mý¸TŒŒ“„®CÞné›-ÕDÙdþ›ýwñJ{ÙӇ.C[°–ÉFùîæ“2*óÕ>ìÞ™¾?‘¼¢/¯îêÒ„•Í÷9ûi¦;ŽT¯{Å÷xgŸ‹F‚͸¨]Ø¥5»¯‘ÓÁºHíÃӚؾ!‹òÕÐ{zÐÚú{#ÙeVö«èXÏ®n¼dýpÎöɛՋ¶‹Þ­×¤þ…Úñ¤ÿ¢÷Äó=îöíáÝj¥elë3qk;êÖj–õN´wÍŠWÞÛs$ê;ýß^«ŒÎ—í%‘KXÏ»ÓùhÄÅK-L}?Ú8¸ÞÔO9 xKÿŒ•wËnižh{ªuMÿg«å\uÑ|a|,ó½ý;T->¡Ç8 wõ 4kb]y'5Kvc­ IØ ô ^W+ÞøÓ©¬×…jÙÜýôéSÕ¹¹'f+FÃf¥^ì^RÝúõ3b /V^½èRåmì/Xò驌Ý]C‡¦B×ĘßSÉÖõl½ØØóvÓúJ^QÙX—ºÏš”yCôìÊÎ<ÒÝvvÓB³/2ºr¥þn¨4^¹3ý^ß(mUöÚæ½æeÂ×ÝÝõÞj°¾ÙîpbÈËçåTZ×LC‚é±kºïHëyY=ÃŒ•{m«~}m±;×Lì6ó\åljøeNu5[ypÓSkHNòbg­<Ô•y]Ò7,E¨éªžÄ}±ãÖöŽaMá{“ÃæYÕó<õ'û½¼Þ‹±*6ôÄéFQ̯óT^¨mÎïY;º¯rŒð¡êÚXkD©lô•èIŸÓfæëÉÎJÜ?µá`×þ>ä’e|{=ÛÚ]tšýÍÅ\Ïj+›dSu‰âǶ¡ï!š´ iè‡HáCÉ82p}Ïld߬%¯ÔKôáG=M«µúVUúêî£á.ë¯̶Jy=jU£·®;×%VöS¬Ûš¾a‡a¡¯íŸòyxO6§Þ˶¢V“¦Îö¤|èÎÊeµh{­žï~m[UÍ{jceÏôMå¯íþÍ}²»x½;Öõ„¹®§Í¶SëPOCÖ?ªÔå=£ïüô/õ9y#]^¿fz–?pmŸÍôÚš©äõYÄêZS_7Uã–¾]Ò¼¬VŸœ¨GÖíêþc8‹××2“˵Œ à• ówV O‰ŠUA·ÛÕI‡¡¶£òDc²â6uÈ~ò”m¹¶Ïh÷Ö‰½¦^:ô–ž·C¡†°/ÚŽuí;åЇæ«c¦ßâ1÷”xí Ý{®ë }·£/ô©Èö¹iuŠÛ÷õ'*ʵ§ßw¦šXr{ê#©nÎÙâëó•I¶Ùu¸Nžd/ªÙèñnÿÛçöºzÕïÙÕ³< …íý>QfûzšŽs ± i$,H¹eÖòÙj¥-Ø:±Ž$)W«ý'ËßÙ&ƒh~ºÇÞ<ÝÒ8èË2аSH~1‹|ì#îôLg˜<fNœ9i2Wûa0Þ}°Ï¡6,(ïÆŒð—˜ULñÖôœ“I3q}¬Oÿ¯L-Ñ …=X¹ð8z[’Gÿú{œNrºœiü64‚òÈ\©µÖ÷7•N#¦5~6­|žVþ`¶¤·è”sÔ;WÉffk\‡Ô`é9 ŒéÕ4õÿQKwÖŠaŠÞ•È3»3íí~ÏÈ ‚á/'ëÈ[œLVn¢1†ûÒßôùÄ´Ò &dŽ3’åHkØÖ绺£ð’âßàT®ª-²ñÛþ¤Ä‰%[Ô̯Oë®AΓŴQº›• ~®«vk‹ÄO­0kôl¬Y ϵ{n6ÒßVþ¡r™>lm@FO|ïïúŽ7Så•}§‘Ô«mýMƒä¦ˆ™±ª¬m™­èä/‹É:à«?S¹ø¦"@ä‰ÅÑ\Û½FžÆ×úÿŒô^Òßo´š7U‡LÐ'Ž=Ÿ…G¶½ŸNqÞù¹Úe óf…ÞÄZ2o†¿ˆØŠ“µÿzce‡Š_9Ýï[Õ6_ïd– uY]öû]Æx2àD÷i´àívÍ ~¤§­gº$ÌM,ÛJΨ;N™,="Œé‘·§r´_iؼºvù\{•ecobóÒwæ BQ'ÎtoO¡ºÐ½4eø*‹Tÿd]ö¬·rÉ¿IÞáCâ4ì®EÎVþxžå­ÕÃwjÕB xba^Î 89Ý¿›Ô»gÅDÿ¾'t 5„ ìnfxÃÄÓõ¯OÈ_æÁÆÙYÏâ¶ri,=#ñlu±½¹àò$‡œ,¿¯—t®K­¶ý-,ái=k´Þî/ÜÈ-Þä@V°æ :Î|^ óÁô7‹ëní¥CŸjwÁD÷vÖð9þ¡oÄ…_l¾¨erÙ¢ÁÉ[ù~è3ô½¸ÕØ 4kHr˜3­”ì’©à—•C{Ä’~§ØVodã†FÛñï7/,Úá)–étOµà³ÓÎV¿öˆÂbßÚé$ÍXOàNPc±ƒ¬_L½Ø$ºÖÇ}§÷82-~g‘ªd”žaì fm’¾ðL6§¬o'þÈ,"6›„nŠ †ðçñOâR“Þ‡ú)ÁîøI³É+Îný^Ú–Ø£{}çœÆ Æ =37p#ëãtí䣖oN3RoØÛ†œNqçΆ %ï”ST>*s÷ºÆNâ+%‘ñ(0E ìPVÌ0>NØ?Ô‰íä,–yd®žÂÛïì6v7D“•,ò ÊB Ö…ůëIL% Ex<ŽÎÐBÉVg(nþXµcv~™OwViHN ¸»YO·W¶•jì×Õ¿Í}+¦d¶ñßÐ{Âíl¶6ù9î±²RõÏ=[{ŽKWßW}tYv¦¬™¥K›ßmíœ“ÇæÊ‡ Œsb¦:X¹²ü­«^Öíé®%±îV‹ÞêÕoÚð¶îží¾=ç·óRÎåCh|´\}$w×"z-½{¶’vÖߘY¿IK9åH+’_óJwZ3ûZ»§*‰¼SªQ„w³ý½ƒpxadc".G~³Y÷›»ƒÏ’h¼´²#'×´_æú̹­q¦…UòŽ®p¨û ¤ševŸ µâ¡ð3 N}2jW%²óHQLOþ$»}¦ïYœ¯N˜\¶²ûð¾¦òöô›–ô÷­yZ nãlO° X*WÃ=­Ä·k-xoŸÓ§ù`q˽Y=©'"žM£†U€‰uzj=i;ÛßâÓy[^ª²¨Á8^ ÁÚÕ©à½{&yâýX»&}nO¥aG±ðéŸuÜܹA«Áj"ûÉ[q)Ö’Ì~¼½¤ƒU°¹Ñ8ž_Šf»´ç‡ÐpækÓ¾Î(Þ‚Gý?ÞÉq¥{1½i*÷ûV ÿÝkZæ&'!î"Û•X)¹ÂpXì»ë)Ä{ô¶U]N[-üº9ßÕ*§‰‹MÆ¿Éó3Ûn‡.@„öMý’gˆ–FWW“ÿâí,x+-ò™Ñƒy]mí°=nÖ6ì&º†€LkÚ1øÎ8öV¸¨™`D"ˆ0#àæî¥e[Ùõ›• éÚÔó|†4Z¹³¶t/+Á˜ÐwáOX›zB££=Ê2»«~›;\4ߣþ&—ç»~§6’¤{¦‡qCÞpøìg2¬ŸÇ…ÌÎ;[ÛíO-™ ÕÃê{‘­I_w.Ðè½5rcåéóÏj)I,ûâ“úNƒ>سX9ŽÃݽB²]¨ñNPl¶.¶4ÆÄ¾ô7Ù„èâ8ñø\$‹¸‡¤‚ÆA³ã¥‘ïyõ9I.6š,m²šßPκ£Ój5×/>YZŸñ7žði™¶h"¿ž)¸¶Øúwz’æÁ£}¿ºX©ðýϦÖÀŒ±íe¸‚«àŽŠ@Ô:Ü+ˆÈ-Õ@ÚÑXŒF$/%ÿDŠÅħžå’où½FŽ'Užžoº{k5a—¤Ç*3"ŸTϽp­'ç3òÙªæ©P‚Hi~VuO—¾Z]¦Jæó½±¿>ŠIÐ(Þ¨^^è[ɉ5SKiXo×+z=_„_›@¦ìêzcÍû£—˜¯{Òœ'üô‡ZOìJãÌ{ê)o©®áÁÚ0;–q²ßƒeFwÄ]ÕbŒ(uÍNßÓ•Õàܳ§hDÛû Iá‘eA]í3º5”7²³S‡\zÖõ­¬˜Wû _½Õ÷+[±dŸ,<Ó²ÍÔ{h =ö8Ú½?œgØÚÅÆ ò|¬ooôä@Ë!ÇZq8æ2”æG•¬“Â{µQ9ØÚÁs¸1õˆÜßîs§1“-gg×òˆÒYH²‹%€rÑQ´ërX0ìûOl'}Uç;•fI‡ÿMkæxµ.ïÚ{À Á$À‹î=&*·v̉¸»¬5jñîKï_ù¢µç-ôH6&£hPqªr}Šn±?6dO°Õ+çê§Ýq<9ˆsó¢»´Dœ°¸Ø…¬ÿßwÇȤóÛØÃÞÆóQ%þ´žŽÈ@‘û²ò/°o!ïNÞUYøCö¬yKà´¤íÐ"èHâíYþ°"Ëå›ê¢1ÁøpY¤pЧÕAjÁ Õ‹ Cÿã`Á‹„YÃeá7ƒ%{«‰7}ÀdyFáŸ]qê·+ ?²‰yMÒ™!±êü9¼C÷+: çªx8LÒËØÓcI|§!ËóáH’ŠÚÖlØÖ]?èêD×t)² :£;Øgû+ÇÒ 4<»8Àœ/º$Ý‹¯ÎYì¬tvÓíÖ´ºÙœ˜GËû}©OHõ=}!¼ê&J-¢‘ÇžgcsOYwò%Ñ7àÄŸô=Ë“CŽv¨½J{Ã~^¶·ÌíòÓj Ýþ|òŠF½}ºKWÎuër¾ºå/Ðc.>ŽÄî–ÑÖé‡H¦ó‚ÀLEþcro쯔d}c;SK°(¶$+éܬ XÜ£>ãk…·‰àÏÃ&–I‘&s­i8&‹2ÂÖÇ s’Еä>> L}wÀò½S™#¿óÚÍ^†è]ª%KÄmÊHnÍö$N%_ÅÆî¸Ú=¸¬;ú Ǥ{@4©HuAe÷7›P%øÖÎN÷÷+“¶²³Òß™êræ^èúje›cz#½ˆî´©q ÏÐ3H0V5þ5V-6ŠþGv;WÅJ²ØqmNOçÍŽžä÷¦ÍŽhùÌ ƒ|c,D¹‘y,t&;ËXëXçd1v.9ÀB¥-²­ÔŒK„`Ù‘›K眬%Ãö”ôAí›CÇzÜ(Ñ é…úmÁogé+ýÝê°z•9ø¹V˪b%ÃaÔ†CÕE3[tT,"Œz“§éAÆxwß²pÍ=Xì­“óÅ:ç=ƒ’ª(ܹþbóÀÂBè{F¼\ü_N7’„×bfg,Ë]q°#Hýíù—W~úšžäm‚‰ˆÙõ樋Im¨‰óg¾uÅOGvÀ;O’ o}}Ÿ¨/tPºÍ;éâÚH:óˆý¸2F°¯»É\QÀ‡ªÅ™kàGPí‹ÿf_ÿÏõ_é¬`òs•.Ï[¹§~'Éh|V7r{“¥,‹×ûæ`OêÎô|¥« ój×¼ô€kݹ¨¿œuìJ~0ç"ÿŸlåÔžC­…=Û[œ$Ì•¿„ƒÿcGc*æ÷qsµonðéo¦û×ö™sN¿ÄY“¼T´vD™Ïꆲá&Ò'yãfê庞1“0z5m„Ï{’o–®7Ûô’=˯j%‰WÒRœÁµÕˆ¯DVjûËšuJÀæñζö4Oš÷‚8éæXµã<‚e9Ëþƒçųå|³R×tíì†hÐð±)ð?WU?DÚŠãý2Ö„³’î··±;RIðžSÝmÆØß'ú ³Á¸·œJüóÏÂ"‹ °b,àFëk+þŽèKxë…üµš•3>çµ½•C[v&™3œTmå«=“|ä±øö!Ù®wµÖ ŽÎCk{ËŒ¯k–à#[ëñÊV–³F ýšî"“ŽuåT„Šž®—¸»x‡*‰'’z¸{œ|Þ€·§òŽ$­íÑ™êÚž\ÂF¦5®íY»š}±¢;éºx¿fØÙ½¤_‰ŽÜ×~töÓèe0´ÖØÐ4ºminš¯[•">_Ö?{Wdߣý´¯–yy…ÃdïÂ#Õ°«åd ÿ Y¡1Óc`„äµ=}°öñä¬éñùÖFZdû+ÛÞÖŒóàåv3kÉ ÿw­è ß+õ‘Ìâ»_VK7ÖÿµÝg—ú†$¡—®­…bŒaDÖ¯5êžÎ?Å+I©ýId8óOzš†Ï‚7‚dÍ>Ìsñ´¶2gº‚ž¤”1|½{^ïû1‹Ò‰­WÚùLKÞ›eË_Îÿt¤šÖwÍ~>V/H)4?fy|´Z6Õ¬Dý Ò¹¿µ¢)ÊbimX×:±ëÈœ\<oŠÁE“iœÞî”Æ|ýKÎÚÃÖ5ß=Yéìp58°t‚~Hf%É´µ»Xš¢œ@ÆÃÝvƒs—‚SçÍ'0 ëùxuÒUéÝ'«úí=Bã¬æW%ÕàP{»Zß Ù^Wöà<êÅë}v¬Ïtj+±{Û“Î~œ—Íz eR úÉ"³Óàv%V‡sÍH[+§~™Aú“‚v Ã_ÓòWϰ-aç˜ñðiÞnýfKóŽ“›rÑZœ’ØuÚÂçK¶­îZ.rÚ„óRüß/ÁKÃ_iž0ÓŒ1l„†OÇç_Þ“Ç+“tþFŸÀë·µÒÞêyÝö´[[¬ ~OØ!üæPí”×Ó*¬¶·ªWÿøóà 28+ìYlB¸Œõ+jQÖ'|I²€Z4?o%s&XÏú‹FeþE!Á·È.OóNìlÄŽö¬Qd‰ë×+§x¼9ƒkxvi[Z½C×KÛõP¨Õ­;6!_Äæ>³’0ÈØËâþd)›«?Vá•Ì’ Ã/êi¨4yY׿Ù5¦ å”YS]³IÔµµïÕîÚÕß«+ݳØfuEuYßXƒl|üñ§éÅKúާ‚YÜüØtµÅ•"Òg[¥¬­d/¯yE‡£U:ƒxLi ˪’A®«ô o™i<65“xs•%¢ ÚüZÏ“E›ë³¶nì'tbY5±ìÈ3‘´ 5ød0¬F˜Ktw×ÐVÈÁî_Ñ'8ÕâþD'ႾU tQHÈP'ÔöêÁp 0¶v÷$ïý˜<4Ÿ°tz語⭃%¬j‰EØ=}ÃæIJK`E°~¬dþž}è\ÿŒÈº~’Ÿ%¼¢%ýåY]-‹ûgÂrðƒà$8Û™œ!‘±:0*yã0SŒFŠ\õú'±sñT <ÎXš‡Óþ>xÉ2@)0c°‚øÍç Ɖʠ³Ú[—{rU­- 3£sñ×Âv†GŠ}¯7´::1©.b«dÁ˜>߸awmjOñbÁeµìfßo­ ˜„$ ÙÈÚÀV0ƒ­ ÿéâW£ÑÌOãx¾q1vC¦>äÐjèûÿ,Dwmû•=üMce®©5<,¬>x?\swkòjd0ÄýsæŠ pÞ:;¡Y4^Œ+lUm2¿ÕáÔs ¿èIŒY8‹bŒeÁ¥±ñ´B“!5ül°È#©ihŽk{žÎ†÷õz­S+Ïêlõ:{ìäõ•edȽ¥•@Þ=.ûóýi]ÎuýõéDεÉÐ_W¿¸•ÕIqþž.+XnúýÈH¨ãŒe2äßí{0ʰ^\afk6eåd§ÌUçŸúûp|†­¯ºóPº–|Ÿr²‹Û’ —Ï€U,œïagWb%ØüX»xãØ2°]X~Œ³“®Ì­"Ãê|{g¾ïïVŠ7³nëþÛ}?ÐA,!ªQ޵Cxãñri‡rñÊyãÄdzÂÂðĆ‘÷œqyjŒÂî–.t¡Uéª4[ç·ÌLWZ4 >;Í +gz7€¬x7“3 _­„{„kï´’cCÎZù¸èþÞD!/ ð£NTÞ*»u®¿eþqJa :ÅíF^(x²–òAX¬±V'+ß‘¿„=ˆíâý7è>ïkÕ„±@Cg›àiÉ„•Ë:$±¾ÈžV9-kE%ACX$«{–<ÀWæá([-˜ü´Py3ǃJƒå×#ë1‹“ Ë{inéªr¨:Õì@–å…ꀊX5ØeÇ’0fJn£Ó­|ïõ†&™çÍÕî½Gβ›`ë²ûÐâDœ¯®ãÇS®ÿ4Q„tn1Àd-ö_4DvJ k³ÀS à Çt¥s³y4ìkŸâ‡Á±6ÉbZµ“ê ¢ÆñÁà"â#×ðQÌ1œÖ»PÖÑÁøä+¥šyMÈÄ“µìJd Êè)ëôÍ[hðÃx'®& áTú"g‰K%EÀî½c7Ð7ß&) iIÇ”1󳞥™ŸoGÿªÏÖÖ«}­³ªk*‡¬ú÷J¡×Îv﵆ÀO漡Q˜24R»Úº¡Ð|xÞØ24?«G4tтϧõÎ?â ›ôzäõ$DæË²¡U‚c)šM#ãû“[Ãx[o¸{t;§Œ6ÁåX¬´”Óý7Óv¾î›á³óÞKÙÏX ÞŸ¡?[wôÞm󂉟 kAÙ! b¾ôU}äiD넸( 2¸4´šöAqÏKªÍÙp"É/ªžÝ‡Ój] ‰ 5%IØÑ¤Ï«þ9«ôR ê`x ·öŽÕç9> žGk‚_ÑŠ"¯Œ¦lÁb•þ¾6ˆ¢åÓ^Ú?yj.u7û˜& m€€Ðè䣲ÚèÍîÜX_Ì)|‘`/a|C#dZø¨ýr­ØŸ ­ƒO§]÷ƒæúDÒþ “ƒ>ë<€F©×Ù&‚Õ¸š?6¬7wcOÁÍù+ëЮeÿ_&Œs¼ûül:´¼urìà ùx·zè÷#GÏî1–Ý…¾ç+Û­öŒg¬q:Oé¦ÚΚ‚TŠ^ÂMð.?í„CHFsëÝFÛúž¶DÂo׎²«qÑá?t=ù&œ@ps¨¥nãT[ãxc9p ²æ`ÿÉp gïã¢Å±è›[ÚAâië3„ÂüÑ1¬Hðõ•h­i-ë ¶Îæõ•QbEõ^Iww®c†Üë.¹ùpðÉ‘åóÉÙzTŠ5º¥'.ümmz{ ëqgω•¦·²]Å3}µÈOÄJ`c‘šOZ7NjúÒGõA®?sòq-ÀíwÞ=«LDñøü°]™“®7N0H'¡H<6Ltc±æ1RìG:ìúJ…¥«Ÿ¿ .²¥Ï¬Z ï/mÔ®ŸéÚ¸‘#<ŠWj88 ŽÄËY1=8Õõ¾å›¤q?lÝf—X>x<üU9d:¾(Y,~Äšâž²óíwV>ÝMv{; & Ëù°ÑGÔ( Y/y¼¡@Œž1á#Ð#O‡É&ÅjX–ìLά5Z¸Õ…ª9ÙÕ÷únÈmï‚=y7º·ò{ñÉIä«U?fÞŠ… Ò'H&|ÿluÃþ½[æÇ¢ã‹.4ÖÞíñ ZŒév=ýîbˆŒÌ}ç:!.&»–t—e'û:Ëå_vÊ ¬ Ö«¥«k¼:ô@z,2¤ œƒã,[ç­ÆÎoœ.»“ÿ"?¼#`w¶.n>ô–K÷ÛP üƒæS–˜1[FP´1Ÿ—3b–ìµÂÐa¢ò¥ñ£°Y±ÜT—•..ëhuÑýñ>NT.o&›³DF| \f!?Wt¯µãdâë‘E„çx[%ÉÇå½ut’CõêicÆàÀŽÉsš¼'½®zE]ÒæµˆOƒÆ1þzŸA–í¤×ûLîI¼:XŒH]ºäBšv(ͤ¡9Ë#5«·Pd³ãP'¸Ah‹ýfbïgy;ìÙù¡_tzoõ¬ÈQ™!®T?¤1„7²Eøèhsö99ŠQ vlO­¢_±bKØ)-÷.;V4w£É1ñAcÄ{†?Óôi¸ƒõhíÓE€‹[¦oÛSû²*V×Ù;Ø'kú–¿äV‘•díG•l|åkñ]–¶3~™8©«}»«Y"`VJÖ«nkЉ¬%Xtakž5 —Q?×÷„ùml`óŸö \Hiqp¼…ÓïZ%'kü3³dˆU‘|:¸‡ø}45ïˆaÃZûrlÙ“,LïГ ’ÏÃÑï°m }ÐY£("Ñ)Ë*TƒöA-Ý…Ÿçm"WZOdŒˆ3]Ñ$åB‘› bÁÂvÇR°S‡Ÿ‹½<8¼¬lÚ ¾ðÊñZÒFØÈÃÏSaɯj4ñ‘غ$¿|à+¦¶ò(.¯¥Øº²¬žzÏ*"G¡NtK¶¬‹Œ&3Þ8¶ÐNßZÏñ1­³]Û!lj|-q ì'K~åtÍrâW#›1Üö·Bí!vµÃáçµÞ\«Ø|¯å¡Mæô{%´Œ>ÎÊ5•ÊâÅY1iÊP 'ÃÞ¡8?djDßBÃäHA/œžœIJS ‰³C74&¹(×t©Œh-ÁNÅ}B‹~Í­Â?2›Ö0W½lÄÍ=mß›:—øfkfíðƒõŪ\Ÿõµk¾{Y!NÚéZ«ëñ«•q6díõîûqw«aCí˜é7íY«èú·ë‰vˆ~¹W-ÐM³í„3„'ƒ÷$ù0üLd‡xyxÝ÷ûÆ»þ¾ñT·}&^gU?Ù™Þ¡µ¼Zh¶ô`«Ë ÿŒ–"‹’• }{ÛÍVˆ¨Lgÿ™,5ίU•‚«b,Ô+[æi&>B¤ǽüXj°ëÅý ­Z4ìÈV´ÏV"&&¬QX“†"× ìÇ5Æ×Ð#ì9>`d™÷;°H=€cÈÞ(Ö˜‘ˆÎ­°^ÄʱâÄûØG41uíkæøø×,À­ˆÅÍÚŽéôËåü{QKY‰æîv}“µ§ùr¥²;DNÈ{0Xàê³›Œ.Û"‰ S‡J‹™….j±S·U7F m[šÌú,˜IGڞќMAzÔ%f—ed×Y­ôJ+œ{¼0ÌàwVÏXEpRþ?X¹}'¦*%ÇÙÃÏ‘)7*Oξh¬vøñÀÐh73µ@ÞVg(^ÄÂ97ø:Ö3ÍåJ¶Ú+KûÏQ+H„•dÓâ½Ó KÜJY@—gMAq1tœ$Ø0Kª×ªÂÖKE?‡¤)…î>ðûá©5ÛÉ(áøaBúWö´y°ûÌ(ÿ=yodŒ,2‘ÆbjÆm‘$, #Meò½ÑâÙ>8¼0”Ýͨ<³ìÚÉFV.0†ðõj⻼Է$¡ç­H:ûfXŽ$ý¶‡ â³KrD·ë”9$ [‰wORhQ÷ºv)3“Ù=Ú=äÉîi¼Ôj—ïXm/'«VNû’?rë…eeaÛ3ØSXôvcc-a¼™Ù‘°îp‡ðŒì“ɪñvk–ïËy·4®ÃÆÅ«² ‡æe~g¦Q¦È 2SI汜’ì1|sµÌù‰_ß_lã%µ@”¨]Þ¼Ã2è(N4–LâöTª|ŸÞØù¯¨yRŽem?qÔ¡º[*Ç,;k|Þ€B²Û]îÜ×=KšŠÕ‰õ%ÿý\úÿÚÀR?iMcèÙòð¢‰Ä¹`ÍÁ(‡¾a[·Ûjl’²¼ðØ-Ÿ8²ØF䨒Zñ¢ðÞèɯª †ÃwÀoO—¹Òçò=ŠX”GŽGYBœ³d´9!ßá¸4èü=åäY×ìlmäÖö,~öìò>ù®š½­Ž·T̑옻cäK¹[i++"v¦òWW;æTÎ7BÌ<½ß\_øÌ²3H&5–›Q,(ûÙ{ë^TÍì~2D”5{T\»N¼·+ZÐ`w½S¿­~v?öLÊzÅu¤Ï°Å—Ð>t.Øãä¿aN|7Êð¨g¶ö¼7bæZcâœäS ó$ó ÁF¬0˜SšÆîzxCœÏViBk‘cD†0«œ¾³ªRœÒô\ 'ˆ]'ço8T–¯‡ì*:ŒmÇbã•á×Ä6•uƒ¦¤$9)‚É®_Öµ» ü×)úze\ë[H“Ñþ§yØ[$7|žì¥mYk¸¢X.Χΰ:FD¤¼uâ<Ù°t'm†7Ov@ÝSµS65œ]÷/ª+;—xL…~Š &oéÜÐhÚî…XÀÝq-ÙÎX–kȳziâÆûÔgÊ–€iMÜS›OüqóÊ'Ò[•…î´§ËC èâ»gðè*ë+‡ÿóÃ.åà]:=}Û»›œVÏq¢MK»^Ô]VÏêv&%îʪ>áïR‚u0l ÌWè*ï½ÖÑßÅ)и†ßRc$xuøŠ!‡ÆÃßr÷Óh›Ý•ýf?­nTOΈÂíäÚ>Z]YÓ±¾Öò©Áóœ*ìA³»ºk³D×±ÂØ:ê²[ù%7ôœl4ë'[“Ò~çSàõ;»±V@Zù E>Œ|Gô¼kÜ4Ò‰¦`1}ì³1Ö~üy÷Ãøé!‹«K½Z‰‰J.*ßÞã£g£¯¨D„Ô v€šìic7ú N£H³!éÉ'gœ„ì…Ëšq:ÜL=ƒ¢Šzò.†1FwÃÛvŠÉÔˆ›©§S½Üß‹+aSxû+ýûñTžµ¸¬YpÊ­j ×wÍ'³¼{éc¸UbdH@¯xXÕÝÎb|½ÛÝå{½>›Œz­Ò×Ö‚ãý^^‰ÙcÓ8³ãhîú.þgm»Žl#IEà±ÍW÷oQw቙'eQ»•6Í¢ZUÛ5Ø4–'OÈ+=ëVŠzÄ+ÚSÞ. d×à·‹üZܨ[7¤üŠJ„R›ÙJ¶nB,öô¦ÚG:ˆ2Îï§pŽÙ¤œÕ5b=ä>2Rƒm>x僱%I‹¶Õjº€h<2L~ EQbÿ¥E¾–%í¼ ÷–´3h¦VéˆBæC`{S°ò'ûyœ2¤Öà„À8ñÑà22Àqk!&tIvóNt*õðG­¨7t+3±¨–bÉÑÉqr¯9ó®èàk¤§À+EOÓ…É{§ƒ#÷ &HL±“N!DãñhѪw'ýc¦Ùó4Q;Qv3ì"YjiNpV?‹“çwi÷Ñäí]1ˆxüݤ,ï¶}MÆÈIKvˆs`­°ÜÆ–s@3… ¬«T^mûqmì-Ø½ÄøTÖêäW¥+;ðcñd”I70Û¤ù[pZÙ±NeÒŸ¦s2-ölmÈÛýiŽì X‚ZYÛÐf­à¾Rù4:§ñv†“äìÅÑYès>±«ÅÜÑoWÕ*ù„x{î…±ÓÙµKT5¹ÊÆäkÄ(kŽFÄ$õ¬q§ë^E?'/ávÖ%€nÉ‹f牦´ºDO’£V¦·Q_I>ÑH{푯ÓÿIýžK¿š ]ýiÿÍßò´Zïà'÷Æ#l<ˆâÉÚ¸Ø=´d’—´^†ÜÄ]„{“¸üš÷ªÖ¼,ýP>õ7ªí¥þ~œÿàÓÆÆ¨_Éçô¸ô÷íl=åÝÀl§ç4Qú·õ‚ÿŒëo: ´ »Ÿ Zý• Ó’Kû»¾•I˜·ù‹Zhÿ‹ßMóƒ¡âŠÈÝ%F£B܈ô±~Œ;„ËîžÏ‚)B#¼‡ôveÑZç’ž›Ú%/È ÝÇ–Ä4` l¬$Z8¶ ‘ýCg¶ŠH ¹iv †„€ sà!?ªe°˜þJ™°F´,ž€=BÏž9ia¢Aœ¢óõ”t ½ò!“nÖø°µì2–ɪ÷æísæx£ Œ‰þBúðDÚ…N@R–°±¿É’‘ Î~…TŒh1ú°‘ó“¶¢x°ÊØÙüDâÑFÛá`âMÙc²ª{{ªó•&ÇÖc²và’¤6 ý\wX;˜Cg7ø® O¾}g­™/§ìîTÉò­óí>©4ÚÀɬo•1¼,eÓZWu™—÷¼ Ø*Ø«üò`­^Íw¦Åbo­ñÓõ–~×ô §`í²zy TËìƒÚAÏÞ]­÷„órGϾ¨dì3ê-ËαýÓî€VÈkô´r­ðb‘á¬ú›µshQØTòT@ß¼çKO~õ~\߆LV2Üúîõ®Ï×f™ewöìõ®h~»\‹qxHè2iƒUý~#aW¬o$¼]Ì"á>Ζ¼Õbo{ßõêaÿ|™÷2MâßêéSµ€¾é-à|;Îfȯ|¥äÞ¢v­’É9ð1àéŸÞ¡ß~¿•€Aïüe3ih0òuãÞàܘ檛 -nÕ'ÅþîV‚¬Cx33•mñN:=ÍÆêrÞà÷áËà/Ù¨xÓ _…÷w¿]-ü‡?OŽß!.Ïóæ?ˆ<¿Ýêƒ`ãqë×Þïú¬Ùç©â¯¤ÝzÏ#\ƒT”—‹øyë‡Wífåx;8­Úð¬o¼Ç‡$óæ"¸ÌÍVVΣj3îX.Þ<×”Ciä4Ø[i8 |gØ9ð¥Û•‰Ot§Õ…!ã¿äýfÀJ”#ã‰× ÒûY®Þ{£¶‹Lõ¦JÞ!–.<^–x8hºv×k£sµ6‰ ò¤ç{FlÑÃúeü”!%«½¯: ³a‚ÿ˜ü:S½â+d/;]_¬Wst¹¿1JW‹\OÐk|c^bÞb~^h†Ì5ÆÙZ2kv1LS™x)ë¦ÙcsÉ:ƒùHcÐÞ 'µÙeBqMGv-œ&–ú`¡ATôß‘> !ãÄ3÷ü}ìg‹ÚÅ·³% NÇaG»ŸþÅÓ=ç"y{X64þQ%ä-Œç$çóOÝí)Ú#\Sü,”ƒv§g¬}9zàÒNX¶çmèçÃ"ºŠöÓÕC†äŒø¾k1}j¦gÊÿ*ß©è´a3 |‚æ>2 «Ñ‰K:ÐúõEß.Ž)…1¾.Û¾&&ž å`³@c|†‡°¶6ÐåŒ,|È8:ßYúlf>ôq*±\igNIg$ô€”vÊÑ¡ÁäO¼5¬HX|NîþmYΙW»SN†6‹º›ïÈ)C‡½Ö©Qcu[™Sè½h h"©(³BºcøáAò–yo—wÃ8§ËÙEl«}Y†lp(Ÿ¸`²‹'.‡‡`¤ù|àâr.ðöÓâ°·±ñ0VýÄXYC°Cº,¾+¹òzŸm¾Ä¯±$h ü°p+ÚÆÎ>g¥óûòzð«Þ«§úÆ£óF-8Ùµ;ÇI¾^îÓ!—1 ­t–:¿¯Lr¬#8.Ù|¼yS”Õe¯È±®<»Mlí‰T´´²IŒ(˜ ¹Žé!BGä£óåbŸ­ì ëÚ.°§ÄÜi1ÆÁ‰d H xLú‚÷7êRÿ>ƒ9Âûb¦Æž€~a‹8)fk™8ùÈ6´ÖEYÒo³·ü´1…{›Ý'õ~[ã)&D–É­É“¥“LÀJùa×Öܪž…¿ÍUÕ÷z5éçeg8sø°Øÿd$ëŽ5Î|¢Ÿ÷±Õâ^>®÷rш#%mõ »žÝ©&²¦´´:}9ý…]!f æÌHÇc9£œõP–å½JXQM"nVÓKµÆžåKZ<µÏIeå­llt#Ç‘Ó@V"¶¶“dK|í4æì˜í@jñÃù,á+¤=)Êò­i$ðœ´Ö $×:á)Ç `_¨Š#k tU~|ž‰–ÉÁçÈÇxºyž;\K–¥SÍ»¹ø³ÏµÞ­ ´iž=þûƬ4#(S6ÛÏjÂYöÒlÁ :Êûáäø d v@ã­VQ˜¬×Z+7Îðdq|?ð²]Û]x,QX® cgü¤Oh¢t0cJeáÉêC:ÊŠé¬^׬ÝìiV«÷ÑÜê3#ù0íû|õ‘ëb*V†¿„¤u’±(œþ2òy°E`á;£ïgo>F…5÷y×:Np¹ûùVn¤cc)ˆÅ{ËójŸzW›Ô:DÊnk ¡ OÚ]´S á1uR͵˼ÑôDÏzɯ«µ¯¿­M°f^uÁc½×Λ[Œê¡Nž¯šYýò¾Ðoz »eBQø(¬Ü?u?\Fù›éY§ª\ÐøŠ°¾íµòy½g›;™?o@d½SŽð¡/Ê«,ËTû‹ZÌM'û]m¦i²O¿«=ƒá²!–ç£ÆÜiu$[O7zÞ™iwók™1ï¡9ßbX5wk)„JìùÍÚ!ü¸ù•f‰ }¼Oa§2õ}]É¿¯ ?nåýºÚ¿¨ Kúæ“Fæ­îe*‹­Ï¿¹£9ÛSÃêƒ ]ƒnÒÕD8ñ˜#ÒÕʱ÷YM8œö(co%YÜø'µzQm{Ö¸?©M/5÷X™÷+‰Vw¿{Ež,ëúJOa1¬­\å9ÂR€–ð7(]¼>¼„ÕÕÃyZ_¾œÖ ƃ·kçÁvËŸ«—Ü>’•þ?ú落o½þµÝ …4·+“ÿ^Ô#’ÇnWëûY%C<ö7:/ºË¹±+܉ŒRïlá7ë˶ú*6—tweÿ®QšéɽI–¿4¯4¯#I“oú‚*>éçÍüx¿ß_ÂeyèÈèÿ/}äÞÒ“è)Ö×þp›ß4vΚÁIx·ñÉ|V‹È|œ¯ê;&!í o«Öº—Û_d/À~ï¿M²ÁIõ¿'aã<Óÿg½ZZÙ¸ºÿÙÙÿ¼_ôô˜›ýÈ‹Úoÿìèno¨•kh{µ~Úç|žsõð“jxÝ畃‰ÿ„?x—-ôˆ_¢q¹–ŠY»Ý3÷ê fƒ¬ ²,½V0Ò.ô=·S•Þ7lV(‰=¼¤V'ÜvhžæUö,g Éúfí '_n>F4Ò÷ë铿BˆûèÍ4o5ÎZè;n)Rl¤”´ IÐPiv<ôirÈÙí¢kh2kZ}׿÷¯ÙLòÊ~úêsžíèó/ë#­Sîid‚èr–V1äóå9§ýY²ÆîÔÑû"Îÿâ]A¤V¯×‰V:½q¶ÏÄy/t…+ŠOt®ûOM=1Óð<ø+éÏsBç³ç&;—ÌÃúd‰ØádÞ Y&Ú½ç+Ú¾YëÔ²¢Ô·¦ÿbü´ž¤%—U¼ºpX|»ˆì$¡YÈPA^çÀÝî’‰Õ?¨æãíûëµmà¦,~¾Ì%•è”ö4;‹n£’M_a_åÈãÀ–‡e‘ ¬;ï\{«ß8¥Þ¯Àÿh‡ËÞøf÷³rX¤4çÓO<óIh|pyrdw¢§BÊôz'FGTÀÈ•s¿oŒºq2´Ê‡­o3?0ôzŠ/êlkéq½…Ë8ÍùmN‘ùfSIZjÑce°û/½ü\58ày|1òïÑ6y‚a6ôW˜¾ë‹• …§Céxüì’D”°l3Ý#«Œ17Ë…ÿ€+#‡t¢ÅҀž`-i±øç”ñ|çÙÅ›v&—ŸúÎ.òFG«L–é7»Ú]­ôW±]P!ªˆ¤á±¬ç ›ºßI²±¿¬~5ö:€ÓÂICRÓjIXÞ˜”2tM&ˆÕ¸ÑýÎ3¥Ÿé{ÖÌzøÔi}N~Òëÿ ͢钫0{Z‘SÙIÈ&‡[95ðvñ¦kª·ß)´¡õEwÀÝá%H$‹¬ä«¦‹³Ð!м V¦±y áPj¿µÓLÏ• ýõ>¥{ŽuZ9“è)aÞÒ˜z§Æ8/¦‡lnÖqäª#9¯U«ìüֲ؉mí†ÇíRVÚ\2LŒ›žˆa’+jgÏŠ•ïl¥Snk¥Z]'³ûÖö9fÍ™ä¤7d ˆýØ~†[ÈAEZðÈb+ð-´óÄA.Ä5ŠÑO<9íY¢²Ð¢{eUí½Ø÷´.ŒPˆŠV‘Sçr’í×ûäA¥;ÙEÅÉ)Ç+~©Òe—£›`%¼R¢IñíI|¨cÕŽ`·ÐVäÚÝÓñ†ÝhÕBqÚü}víåFó­j?ˆWOv™NÞUkÓ™)g£õ@~8+aS'§Q4"¢ôFÌÖ¡J¹ÔHx‹Ù¥Æà~;ª,gÃÝjµ_é%7ûÄû1ýM“yÐOÞÅÊR·2ùiÇ{Éy?Oµ2a£Æ˜f…óaoÚ©´hš6y†oé;RŠŽ~°RntëO6cgªHX'7”oQOò{žê\þ~wɵPýÞÁƒ q4¯mµ€d¢…CMEä{×Ê»ýåpsíÅsÝý£îµ^±hàÃ? ­ßW+!ñV®=Ië~xh×6¿˜Q¸;Fš.·$c 49ºfÃ+ü4všýËI2 f+sºÕé$ä× ó!CêÂu¹¦þâÞÁ3aÐl8™Äf#— ËÎmp9'XNä*-Üž}f”õƒúî ±†–×åŽøÚÍ׊»x¤yaÕA5í:<¦ë¥îÄþ[Ñõ©®xüøwåL‘ÕåD5ý¨ÏI²kqeCnŒËë=9ô’«µjmw;ëé d*ýú\å⤋f£› Þ6çÄ†× ÒJ¿¦%ñA,î·ðæIÜsY(ÏMý»Ó(àñeóyÍ··™ ­toé„/ÓÁi\r÷ãÜ9©x ¬‚qš™{Ö㎬ |h6Üì´–Þé9y#åÿ"›ðgdÁ‘ãÞ$ÕèšÞL¶‰‹~VKœÉðù”`sfÑ9Å«bfœÑëÓT_«VVûâ®×tÏÓæCLçB%¼›ìâu`IÉÈy«ž<¬ïØ-7j 9|µÏIÞo±ËÎv ­ŒÁZ† ñgÀUy œmKºkc«xI»me}”Ù„¤¼Úý÷;ï6RzZ?Ûéž½Ù¾¢%XÑØx F9„ª*>«øGÝÇWúzýú»ì{qÂ,Wó#šGŽÊRe}“O|#Çš/yH=1ögú 3–ÕŠ¬YÖýìl w*ù^Þ$zŠž[C¼$c'¯|ç—÷xw•½…ˆçB÷0«¼+0$ó¦|°cÏ,­•ì3±¢/÷9ÙlÄ—ðXË‹j O 9»¬kã`ÿºãÑ çm´+øâvLg…ta‚™AåÒÌ1y óôõ„5¡6²kYwޏt|²­^|6¾uíäCúQ£I&ðëü¨=GÆ‘]>þZå°qäÚRodÄ\³j†Éq5zçú¤¯|b™VÖV;Z˜¤›Ùó—Š7ü^Þýòþ9=qÖxâœä‰h9,È8y377xä‰ ]ÓxeX›Iº%ˆ ¦Äð½:Kø2—Ë ²ÞG,¬wµ¤6ŠåßX;àsòž-k¬q'¥ t²‘ÅÄÛØ'ø¤P¾.( eLjÀPäWÀÙ±vì|ÍÈ"œ–ß©w£›uó!–?ƒD[—¾øV¶ÛßÙ›¿O÷ä’zǪ¥Ý,©<ü7ëŸvMóFï(Æñˆ9ˆéO ëWŸ½BÄ„•a_ᩃðI'æÆä5{mà‹ë»ãlþH_67>¤–ºP+ö&³ƒ’HÍË‹>Z]fw ?“Â3¾Ðߤ±=·=-æÍJ¦‹¬kÄoTŠø#}*¸¬¡2[ó<ÙáJÇùÕGžÏ{}ÃRRœÂ9mm±Å yVi‡‘2Æœ òìÓúËNÃRy·ÚX lu9œéf\YÎ)²œ Š{î-˜@Xb’èÕ«{Š”§Çꫳ‡þ(.I\¯}ÇÓíNç0ù§*fùm7ÛE$ºw{‰3o8i#žˆ-@†:æÛ³´2bG“9¯v­—ûùjõñ:cÚ‰>´J/U’¨¸eý%g‚¸à×…Í=˶¨ˆÌ±iÆèµJ«ˆUÅ—-`oÓ/ÆÇ—³¶ìUù¿È.V lÐZƒz{™LÛY½ä$}~Su½Úvv “3œ4‹ë" Ø@«ºs¶*rN W7>¢ N],û“Þhïi;U¦1†òV‹¯Ëá²ßqüÔOΰôœ–, ÑTøw¤1Âw´=ZÖ³,¡…¾ÿ~å*ý|wý`’§kû‹îqÕO•MÝ©¢ 74ªÚi¾ø–È^v²Îó|½4z¬2†¥'d ¶”\ÙÆˆ×B=þÇ=1¼QC{¥ñ Éoõ ®3Fˆo¾ù]Öµµ-.hi¿í#~i¬>©øNxˆ±×͵ÓìçMk‡6¨+íbß_û†¿ŠÜ‡ÆòhX±p{û:ÓWgýÐzéò,ÐaM°6ÉS3µ®Ç(tŠohÏÓQdµÞ7µ’ïJa¥ñÓC„°è°IzçB§ÄÌé þïVÌ«ÃÒdûƒø(2 áp¾p¥‘½r£râŽø ¾[¨,ë²·„M±ÿÉ|Ö¸È >+éAõ²ohXœßÔ.uÁÆw·ý왫‚ùÝ‚ÑæSñï|wË+v¬ÏðBœ.NØa7AÈÈzg7c¾Y+éOÖ†½ƒMæ±®dÀúE‡´Êa¸¢¦È0;ÏI ´ håfYN »ŒD܆іæP¦]ç†ùÛ•ÏciæÍ7yCþnìnmìÑ¢­C÷óÕ &)äSêçAñM­ uBÝÌ3Ì`%âÞ¨ÕJå|£¹Ñ»Z´­Ÿl2×*·&Èü‘“Æj¦1îi]îYdÞƒÊÐ^oŽ}T™Cò¿Õ¼ÝªDxôÃx•ÞW:^ßß›úCGtš’#PÚ±·wY×æÍžoíÞ¬e¬,Àwë›3wSµ~\ùÎù ùt~•®@ªîiþs'F#À·Ý§•Vû›±1äù¸2õ•×U$ž'­Œ/j%fŽûãþº0]©üoÛ]z¸¯øu“Z[bg|ÛX°87¶ þ¥9¥gà²þ¡qp"ÛuïW°/¶ÁÛÍ4 ðRü¥7뉶·Ržõ›d#ýcmµªåÑÿkc1bÙëò­®É’Ÿ×¶+Ý;ú´9¥óXWwbcÑ 0ò¼]âbkßêøs5°ç75ú¿êsç¼¹•¹W4=ûè·Õf\W?­.Ö·óêóØX2s.ïÏÊãÈÀOë ÍDfíá‹ÅÝÄÈc5Øc2šÊzH“‡üâz­Nêojìƒç•îß­ž$ x‡¾ñ½Ò“Î RÆû˱¢Éì&oH¿>ýEªòNñ³vôžN“ý Æ3C¶Èͧ‡$‹ø¡¥;³éØ4R¾iGÊŽá.táoã`Ö“°'¾Œ™ÆG9¶.í˜Ù‰Çg™Ð}*öÇ9©ø|Õøò»ŸfíœïÊÍÛ2øÁ˜¹5ãÛF¯ýÿkºÓ箎ìŒãžxƱ ±Hì0`c° b‘@«F¬6ŒÍxÖ*Ï$y3US©¤&É›¼ÈïçvQðÓO÷öíîÛ}–ç<çt=¾=}©.*ÜúPOÅh§Õ|Þê9P'ñâ[}«m½ ÿôò»ÞÞ½ù¢ÿ1Jüt³‰Øš{Þ/ÂŽ]oF<‹uÿ´yg)Î÷ï«~&3ööùÛ>±hà7»¾Èš‡©Í ñsq§wÀ¹X'úý“Z 'TLÞì>áÕ$ÒJ÷±›[ÅžEÞŸiéúÝÔK~ÜñÚ hªÂoeW‰¢«—JšxbDæfŽ /óÇþewoßÔ+ù|z?$ΑÆEzx§"`b«}£RŒ-P! Øú´lï«$†–ù¢ è ëÛÚùïžouŠ(þ®çA‘ñ> v}¯ú!Ö 2Œ™“ &Šw°QáwÀ•öö¶Nã«’óv­X7‹èn½ä'ÚEëÉGþ<ÿÌJ¢aêõ©ìŽÅq¸ÏòÛT{ÕÕrr¯7’ÿ,F *¹ÌÅïzÞêÅ(xÝŸ7͵L=õ²_öíwõÀ.Ä]Çøh’éÙr?è¹ß7È|¿‡4¯oe Ö!εLþsýpîÚBÿÊbÚ³E _öéaßÁÕâëžf¯¶Z^5ÆKÙósÍ–ˆ!´BÈŽ"w1¡Ö{gºŽqwúöU÷a´OÕ›þÿ7*gôâ8ÑðyZr³Öð(¾ë7«·ÁY˜Bò3Vël†=8,5Ynx"*;·nœBe÷ª˜ñ¬Ÿeô°}¾ÓŠÏzѸî6CjÜɉÆ4¥}ÕâÑWûNÍì@9:ÎØœfånýõ$Œ ™È7úƒÕ†sp¯¾81L•¹ *F_ïY/¦N‚¿¨g[ 2ÞÔ »t¡èñ*§*¾lü·+ÖºŸrÊ¡Þã`V=è*;¼Œq}œ%éPXvÏú·e±ÐId¼S4–—/âIj¼ä œÇƒ 'D„P%dñ’eìÖ¢(óîïn£>¢‚¢d#§Ù3ÅñU€›AŒ°¤XÌú [Õ<ûÓF#–IW“"/¬HþšXkÈ™¬ºG\̰ÓíhÑþ<ŸuëzÌ:¨­YàGëíF²€Ü3r8Äœ aký†þqs¢Ê¹Àn/µÖÍ «’õ6¢©$ ]‡ƒÈ™}$Ï7³fÓï1DJIUþ”Nà.;†^5¯|“áÁŠë›Í®.Ü‹GÍc·²È‡•‡ñ'–Çþî°nñI!…2dÄB0®EkÉXcTák¥·h•¨vµ¼ö®~ËÒÅÙj¿Û¡<ŸŸ‹j+"*âóð[Ùÿ]ÁvF-‚;@šãÓÞ¸š÷òˆUçy¯Vžg¹a¾Óì®×Tzœ&vAëâQ’h*FX·¸cÏÄ‘·x¿½!FmFXn¼]:¢>¦¾•êû÷êûjÌlò+6¦÷cͲWè %Ö‚Õþ¨ÿÅ^ÕŸ{ÔÎTÁÛÆóÙ¬µÁ’VeL~ Ø4£ã`×_o¯Ë¾¾^X•dDœ¼c7ŠHnµŸÓ@k«/þÃFRwF_à¨~/vÌRµòi)þoÁjò®éQ„Ä“³T‹AL]­ UNìs³ÊFÓogŪ8:Ø!ÎĪ€§]®ÇOê»7ºšT“Ë$®Fú‰X¡æÏù\2ÏU¿‘nVÈE¹›8Q,^u)èj2íQ-B"/Õ–/D﫞´U‹5Ñe”5&ÇçTì–KãbtXÛŸõ4kAU}¹ì¼[]Ãgý;QÚ>U5ˆÕ.Òϧ…4ò»!Ó"Cö¤µ.¶lŬõ[V5vµ«·÷Y}+MN±šçK};—–æëȳÆÑ:)À³aûòÍø¤ž‘´éP=†:Az [jïíý@qDí°åTˆƒ‹ûââªaÅæw²ì—µêMìnÖ$4I ”mÅ"ög`Ÿl2„~‘<<*{S/EÆäÿÝ®•ù¾sÑ­Z?س>®ojÓŒ,gø±* j™pWó·©e1Ãõ¡(0wvÞì[*pˆ'Àº\/oW:ri·ˆcÍäʱý†ŸcávXI2u`ÿ¸ŠxÊ*±©Z¯ZýrŸe‹ZC²ÃÄ«ÙÒÇû™6¾Þ{®Â‰ìC}}?{2@’â_©wcW‹Ò/·“1I¬@Çy[N#»]["?æ #ßy£þÊ ú´™´*nÕ‚hrƒŽ¶’·7Çù~ÞÓ³œÖI¯Â\ìLjºW»¢9ì8¬èÛµ«J– ]î4&ñ¨ªZ4Þ©Êb^<;Ö£Z¥aÓ8N0§¯°66›Éï“ú,Vqþ×ýä4'ú͹­ª¾É1gƒÏ ÆæÍ$Jó¬ô?f½9I•ûÕ¿ÀéÁ}Rõ _v»ÉI¬·»óEß“,MXôÀrýyÒ72Ø.ûË}‚Ÿá»ñù|òéñßqÉÄÑØ/o*ì:‰Mu‰=_uû•>cDzá´õ´g’®ôäÃÚ‘·¢Ö•gႼ#ç¡[ÓÐ:õÒh~?ÄÖåÉx¿¤ŠÌ V™üŒ$Ü U ëÆ32 ¬L|£6¡UäõZ+ˆdHÍL÷@”x°g‘~R Æ<" zÃÖ°®õ`DÖÔµ€‚{ç¼bO·°7ôƒÅ„ʼn·Ig²BEm` ,%1O²{xÂì£Ác`9ð XjÐ@3¤÷BøÅýoa½Ï7ûŸ(/ž¤¶sY?¼¹¡QØt#²Î:²†¡UžËBg/b«@X®ÉFÂRcS±pôƒlßÓ½4>á}Ù÷ö†±ðÍÉ!ÒAú’æ"†ƒ©å3“æÞÞ×bë²Xyê¬Jöµ8^ ±¹aÑÛ7*©É‹ñÍÁ®ÄÅRKfDØL˵tº9Àr¥dÓ©”3¸Dž‚{%j #QÙ»v _?Ô%vÕ‰Æ{*›J­™Ü'{”€M¯>ÜšKWñPïÝèÕ–ñdMøÞʰúØy$²hÊCP\OÔÞ´ÚèM˜°]p”n&!œ— ‚­>~ŒHq¡Uö]©G¼+è^÷àzÀ)nN½b5²oø't»ÙðFÙuò¹DÓ\c7¨¹B³“ÞæNKzöë¾¾á«ÛKÇ“4¬lVóÙv>4DVÆ[ ¦Dy!‚M~‘#vªj’M‚ ߪÝϳŒpÑØ¥N„9Ùç“Pª¾ºÛ©Øâ|lr>–•üœ6—¬Mx$¯¦¸ÞO—“x°Ø%ïÓ.ùÁÝå“耙bïŠK{w«}ï݃n6ï"jc©>Иßö¼p‚Ž4j¾=†4{{‘f†²ûA´PœBÈrÏú¤vX´V̱ÆbvØ<ôym…[KÎRdKˆ ˆ+°¢TWÑ_x›R<‘Ï¡¶ ‰2¢Š¤fËÍzìíî­]Y +ÍÃÞ~þ®ïqÚp¿eJbBh†Ár¥Ï`^"¿ä§·Ûh5 {ˆÌ#á俉êƒý‚#BëóÉÞ ™bA~Ò“ä—®÷J»z®5i}axáó°O± ø×06‘9>çÈ‘ç5y£ð*ßš‘;ÚÝä YLf½­ÊëÌjv˜|€Á‹b+šQß Ö`=CÉxwƒ.ž*ždåà\“\,u{Á»ek^É!qÞmlbKVÒŽio=ìMž˜¢ãÖýÝ®…·{o,6±O>7½Ä~6:Ì{‘M,yé´ˆº·â”R V+&qeŠ`bó.þ–þ(û=“ãáÒ—lUö¼¨6ÿþ~k«Ú£ 2¬¬Á­f9ãÑ0v«–Ü$iÄŽ09ÿ­õt&©ež_¶²N÷®å,ÀüU—]HâÒ@PW{\Ë8@fÝ[·Ê¦a”"¸"Àä¥uŒã)û„Ÿ|»ÏsõÜY^wêl!ù½l ’}­ùRd/Ø|½,[48™¼ ¬Q/ÂÁ«§ýÅð“e!’Y÷j}¥x þNŸ\o½'Så=ˆ±ûÖb—œœf” NÀ¯0sÖ ^ü“ž¡áðÔMsÒ«3$O5Vòj³(ZÌÊ—w£‚ >8ÿbDÆE}ÕgY´ ³ûÒ$O÷ǸìÍ×õÎ:VîUWâ}ÞõªX‰žõCÿ’ jш¡°šä‹ºÑ©fâN㛂Ï=î;òçîyíZQr®~ì:ü¼ÒßM} ßneóß®öÜSÕq^“‡í<%~=ÿŒGKŸá†©B°Q«P—BÐH‘u¶¼XŒ^Ö—¬—£­—=[ðDÿ¿h†‡Ä“GŸá£Š½Š¿Ü ÕsÕâqJÁz>Ï‹4ñ™ì½Ïú úiò î‚Y~,yÂþb ã„dñù<+ÏqÂòùürG{P&~” ÅöÓpF0¬æIµ-Äq·µ èëgµ5Ó¼°öWji[cö 6é—QÙ½t8p:ÿ›Š}£~¸÷|ªq‹ßa­:GI†«È5<áJí;Y ê¼7Þ¾è$Kh¶vH ZðP+™UÅÒÇ{‚“¢íÆÅƒ\FÌ X=ÞÆ!Sä7}Ó˜ÔCkúC3¶¯VÈ"öÙE“ØÆ*¢³„Um3ŸÆ» ¡­I‘¥aÿü¬ v,ÙŒ÷Ǿâʉç»Á—1®Xô¬Œ³¨‡lr,'2Žq¸öìxOƒÇØãö –ë˜Þ€ß Æl’¶P56›ˆ[Z½†{}bcjE@ ´°–qNÑbß‹ÙÕòJľèóq‘¨›NÎ%‹ŽõðnðÍT„†îìçóí»W}f-|“þy<}§Þ‘&ÏRn ‹‚ÅV!?ØßtžìK;ÇÙîüh½8Ñ|9ù‘>Óy•¼²ÿÐswN+d¹{µ¹3«ßÄCxÐÃbUÑ å¡©êÃëÀt‚ò‰»á4=komuùÇdàŸêÿÉH~®4ˆúâ[Ó¢~ß·jÕù|ÙœØá§ºöMO·÷Ôjø¥7mUáüO=ÁãÝâÝéÚ÷ÎÿŸ²R êÿ^Èy¡ü¬[Ý#“©¾Þ5Ö6rušŸ“}‹1@^}^+ð^À—±þ7I&žz1¶Ç?š5ëþhÑŸÚ'ÖÛ©"pìf–>\e­õ-¶þI­°F0xÄÿï÷†iÇϋ݊íxºn5~rìd² –JsóÓØîœj×òCß4¿2'wÔÎëÆ){¿`-Ì÷$z'æP=€}ßÛ’ ÿ ¹|Zß YøU‘‘ÍoÄSæiwÚ•_õ¾Y·ïÖ«k17D~Õ÷7Šù±È$H4|÷Ù4Ò§í‡cµ/íu=:ߨE(Å íÏõÆ|»Ÿåar[¹ðg9Y,L5µä¤mM3A¦oIt‚í-ûãÆ¸Ü<Èâ;ÕèèS'\ifÔ‡ñ5Ç|ÂÓÅÓKŸ`gòÕçÃ|à}ïmþ~ìú!ƒ/¥#I/(›3IiIuûé{øøVOÀ‡©¢ú´ëXߪÿ…,ãÕIîÊ´s†É×Í:Iú”Ñ.zó…Q¥ÞF‚¯;õŒ}¥N…ÌO>ä×4*p®Ô¹|gz>)r¼~®o¤)÷eÏÂ*—ëIæËÅ`]°÷G¾¿ ŽÄOÁ1õ&ôélk;ÂÜ®÷‡ÇGc«šÍöÙ^mžøË£w›sÜ;{¥ ­>æöJÏÅe7ðth È ‹¿Z ÛUùDìKgóm;› 7¿W´YÔ“ ½Ÿ¶¾W[,ÀîÐ_¾Óro~£6 ]Š%‰ äjV®¸*DÊ!&ƒÇ÷{Õ{k"‰_%Wï4k8I¯Úñ¯û={‡ #ŸMx­ßˆEòèì'šCLUX{ª³ƒ\“ÇÛ}z÷§úS‡ÓýÒgï„¥øKìªÅ©Ïgzsú@c©dÿ»z ‘ýý¼wå{}¸_›,c˜ÜÍþÒZ0Lvšû‹î|ÒõÃG–ÁÈÃdËŠï“H–³¶çkE$ûNs¨J ?UtùJŸù:l?¹}êƒÊ¬çs8Gˆ•HOz2 B‹?Ì£ƒ ÔÉ÷§²=ÄFq¸Ofç¨jà“}Ç5‘ÞæÈ³PàG´–’Ø•õÅs´£Eè,œ˜ÝÝ‹³ŒOʶß5½g+KÆàÇýdÞè{îD×°y >K}²Ÿœ!g”v¶ò <ÝÅZ9›&ƒròÌÕÛagЮËöØÝoÜ»Ñ=sýŽßM‹Žº¼ºF>3ËS”_ kà+ˆ;˜;…váãÈg‘ó°™¼‡Èà·³iäÁ‘ÇüD9ÄÆ‚õhŽÉ]zÖiK¬wò'‹%í>²Ù^‘ûÊZ!5GªgÎÂz¯þ8ãäló÷AóN",fQmïñ¿Ó¼ÂCɱÙîñI5„ù/°\§Êõ eñÀ0\â±§Ÿ­fï\¬J)ÄüŸO-â Í+Ÿî½®?^œ3²nøôа߭k£à»É¬àõAÈŒÇ˜á˜Ø=úÇšöÖÿRŽHù°ÄáuçÒbÞ§Êò‘ôYáY’ОK }n·òQø²Yþdè¾Ú1v²ß;Ã6ä)ÈCàõÿ0­ksÀBÃ9–¤rŽZ,˜;,jT”ËæÉ<¿ýýÎQÁUvÓx.»®¨š¹ƒu% pµ«´~ÕØXª¿ªgÃèÈ!8:ݢ¸sÙ½‡³ÍŸš%'z¯Æ/kÊ™ib$8ƒXƒ2Öù§kEtYÿxò\D¡16±WölhìÍz"/¾‹5¢sõmµkèKüÀµžêmîêÚ@¶“\Ÿ‹=‘DºÑoyyÞÃËþÅÊ¡ÕÖ{ö¥~G—!z™>’dýº>º÷X}íÅ.9Òp.¹Í²¦Ô‚b7ë#˃dÚh¦íŸµúï Ïúîj¿çc`FòÿÉ8ÕFegb˜:f]§Âm µSÁ‹ŠÏ¬b]»Ú¼Ž“|ìmÒ•úc?aƒÚåV86Þ¾…ó1Èkr ·oMÓémcã’¢·N87súÕb°"ôxº·jg~zc›õÂûí«ÚMzÐeX¤¤1Vä‡ÝƒÁR Ýøxô ”Íþá;b¸ðÞÄ"hÿ }CgÉ9SŸŒîauʆpÓã¼q¹Vã„ cçµ³íà?4,YÕÅsí;7´ðEÒŠ³{äôÍtÉ'–'Ç„¥Méq?«á4Ö<Ìg¶yS—”Í:ª!ØgrºØ!b¯x4$ ùz¿ßÑëìæ_÷Wä‹ÌSîêlÔÝi 9½NNĵ ÍhÙÑxôVTz`:Þ,=5Á0ÞÛ]W{k7j™v†§ëjëp7uéÉ^òÔÔ `+ ;Þé…Þ#Yç¤Vh¸3WGÍuØÄFª¼‰Íرê‡Ò?Ð (¤ÖU`†°óIo9æjæÈì=Óo匓~®¤íü‹óÏú#+Ïu5ÉH¦Ø¹P1žë×g9E×ûLó³àIµÁÀÛßZв޽z,'J4ò‰íÈ™É#ëˆÜ³vô\¶´¼(ñDü ,L{~ðàI}{Þ«€ 4_†¢x.û•^ÀðÂ×y;kö¿·i{÷t±Z4â,:•Ì »ö'ÜEf‹u|CNóõÙpgÞÿÓ>± ©ÝµE¡ßÖ_5ÜÅ­à_vê@˜ÄÔ®ÔCh“\2óǺ1F~‡™åeñÉÇO¡G­°•d¥œù}ÎÇÀ±02§iˆ½ãމ}“4"]4"ÛЛ·jY!ZòDãûÁ[]²É~9g㯪ûq?R”ÔèU6³N¬_u7Ø*öªØÏH½9Oáaa‰’Þô¬Q±“­|²Ã:;Àš1㢤æKÓø±)_×,[y04ø'zkµ²'<‰Öá[³2hs2›±sõW|^ÌG,VdÆŸË`°;ô‘l _itœ$ãObíjï°z4j{–g9˜]¢ #?ÙŽtb!6?Këb6„Ìó‘ŸÆ#…š‰&ò2à¡óµcɵÿ,ß“gÏ$¯X fÏŽƒâ[al¶ßEtKLÕgöÞ¾ÞFoÕ¬^i½³¦á¹öà½ÁÌU‰°jŒÆè öÚXl¡kýN­ 8Ôà;óxI:'`±µOï›ùQ/…͈] ž“š*V!K‘=J¢;ûx.ýÄòZª7òáÍÂÓ®çyÃ:ŸÕî8½O& i@«Rƒß7bÍ·úFŽYk´ðzX=m ÒJÖ±JæšI–¹š˜ûfW… l Rd£¶å«ð„ÅΠ‹$Š9ä­C¥y ¼.­¯ô,Ú‚ï,ÑéÑêóX±£Ž†<ôÝÉV×|{W>ZAªQkÅŽÃs£GYg{(í ù‚üÚÿb{ûË"i9Òw¹'Òö³Þ×ýæ˜÷bí³TD:ÞZ [ôëÎ:ÄâeßAOì2ØÉɶR±ƒ,ü¸ëÉ»Ô|’AvñÐ#rTv5R¶º);—§…y¨ª)ür±ç«ëºÙìXËêovýCÎa,b`‘?—ûK^‘]$âˆLëkZtÄnåýìÍšÕùZÛ×xø×øÃ/{æˆ'8OŽy¿žOMñö\öÇáÖ"-“QS‹Œ°Ë` ¿é*2 #läØãw™•#ÍÎÞ _r©{Än ýä(0¹Œ_ÅF>Qëô®Xl[ÏÅh»TOiÚ”Õ‹AÊÖ! YsÎ÷Ö½S9æ3=É5d-”Cn›fgh… ]#ßÄ·? aZÆ>x¯±kÌvÇîþhOFíÁzCÊѲz°èδ~gz²óŽÙ ¸»l«u{ÿòÖºˆæ“>y7ë«}§.ËËllëY¤Ûت…d$ _AûV–qȘÙFP5gñ1øªg{ê¶®û}?­í™îø¶6Ãb_}`ÉßíJ‘Vs,KF¾åRwac`7±×íöîÕæ‚5ûã@ `9úhlüâÅ5ç/»Ky@ϦïU†€ñ:~Hº¨ª ÷Ä•±,ÞƒY!ú–‹kÉÿÙZĦ ¬"ëÃî Ûö6f~§JÜ‹µ¿Ùµ ã¿ÝŒü>DÓ›êòMV ÏJݪÕú€ÿë5Ùwžù£ž˜ý&;Z7Ó»1Ï,Í™®9‚Œ'òC£;ÚX~èÉ*í¹?õ‰„<ÑwNˆTÕàãz)–!6¢&ñ£fÐî#×W#€-bW±LÔw²* L8ÁÞ&Ë@Ý<•š×WŒ³7=C}y§=þÔÓD/°›NÅp:Ó•¿m>DGä\˱uvŠ˜»h:ÌÁŠ&ïÉÊËýlŸZÑâšò}áW{z[*~/uS×ÔÊROÍyÜU¸ êL›¥%Bó¼;05é q:Ö=éswZ;sÝB£B?øãP…cµ}©Eeéùø¤þ³4µ÷´ç²™Uvu6+ÎnÆáž*ïB3²ÖSð>›¼UúÉž“cÈô?/Š@¦±aÕ`Üì©VTg½ûÔÞ“³r¹µ0X&˜Íê}(4>Žú\ëcqz'˜ltÓ7Sÿi »‚nÀx÷;64+cgÿªÉÁ¿µþH¸ô¶¾§-Äå~Uo0}h¢í•!¿ ü*†Ð‹¬Gu>œHG’™WÞ2ÜÉ^áÓ³¨±&½#¨7É­b‚}õOµ#Ö²«ßð÷Xïö$ÞŸêÍÈ—ÀºäëZ#|@ç¼ ‹ÒâñÞûÌ=Ñ|°6F½³ÍZ9X›$ûže,²ùxScä%Qab,ça¥aÃúËØÖ7}â‹ÐËä„7³Öüy"2¢<æÅ.SË‹·eƬHR–>3²kӳįäo y‹°Ü=Æ$¦Ì²¡Óxû¸°øYVÞrŸh&66f¯QüÎ,±G̬L„KA¿G­ –7«Û£ëdÌò.Õ¢Oæ‹&†A²ÚíáÁÌá?ðˆÕç™Ö<×ü{(àð'h¼A+ÐüÂ$d²aÄ4áÉlRl1Õ_XtÁm¬<ø [a®g’”ÃΛ™žb&v&!dÓÓ˜3ö=fÏ›}¶Ì Ò*,šý`憎#,ªàÒïúhÇX1¤¡k—М‘ÎŸáü.kÐjP£—g¤ö·CŸc‰àÇ@Z·÷—vã[|X ü/òÁèØúl^õÕÔ+^nMYKvèéæšu £Àìão²~­žØ¾>CÄ­ o‹‡Ãß…v°U ,rÈ!Ùdnñ‡øXG²NØ›ò”T†òþ\·§çŠ ‰àí¹fŠõèNã±{}&ñÜÃN¨‡q’ Pû gÒN0»£9¬î£Ãªó“]-^#> ëmgO„àÁlwL’ÚÛ¶côä¡ç˜=˜:$[\cg?;ÿq[2Ž4::çÒZ#Oé?ö>–ÓÚœ%Éf¬ÞN²õ£¬:Ò b~¤ïÍË\ø–Sçûÿ½Z;’TÁ0ÙÞ·ûëåö®%ƒæûNdÁ 0ïvfÌBßó1åZ_ª·æ~ľµÆÞ¦#­µl5{«Æ%/ŠÕ8ž®Ú°vÌãá®déšýùuÿCÕñÃ>SkÁZ‡T“Ô_ÖŠ¾a,jvôÙ›g÷²Jö´b¡Îp ëk¼cÜPûlw?“Sr¼>lT‡{[´þ¶~:2}æÛ¾ßUb|òªÌ'tR<šV&HñrjTÎ:]ŸhkúÁ¿Ð­˜ë îÏ×Wloìûß47,hÿ}䃩Nnnvô|h@ÿòx˜¤´9c}Ò³]Oÿ[Gô¿SÄâý©—¬©}Ó>–u¬šåF®|ÖS aFé-Ø!ÖÍ\«K¦ÂÂgCñ¨÷×gÔ»§‘x“° ÕGùÕv«S±(xò¼¾î䏿üI«cdÊ{_ô€5 ²eç»’ïε3F~ïvÈO»ÊáqKX;ŒÅw2ß<4"RŒm(¦n¥ŠìêjXþˆF}š5&7’,Þ™%õ°6¡mê“@ð†…/‡þÄg5øl…‰^ DÓn#sìERÌŒŠ6êm@ yaG“õÿR™Ë]G"9 ¶'‚¯![>§æ­ÕÆçà‰¬Š2ÒD䱤ÅÈ'ìC+ÕÞóÒjgýZ‹áZÕ²bðeœAwq¡i¤ÃI³Yä÷T«i>+Þ¦|¿ß¼ÌºUÑØ*n‹[mì²HWûžmg‡Î&?W?Xù3ùò£ø^|ElR\pØOZ¼çDÏŵa™lŽöôv¾Îòd“ð¸T+Rƒ§b¶/¦¤3CDrŇ%²•Š™DK:sJDÖ<’'ë Üöƒž½Ø;öý^%ÆÅFÌâþ2+w¹ºÓuP¸µ®Q£AÆÕcÆßà}y.MNº|7Ù½ü”ý}„£#~{¡ÙàÒ€ÎäUI–>t Å­®ÒºøÓ¥>k]‘„p…õÏS²ëàêŨ¿/¿ÞUÞ= ôËþ§‹Œ.{»ÞÁ?á`l}H–j¬ƒÕÂ.À©a :Ÿ—u.êJ‡ãÏñm!$ÏšQóh­‰ŠŠÃ[àGö‹îj³f…ÒÎPi¿ÁqEïBÕ!Ö*;·Ä‹'3aù|\ñdü4º‹méÄÒî-ß™GξºÚo­ q •¸ª{ºæÎŽ´ú`dµf²°í_rviw‹‘ð²Y–úë®§¤Þ'½wÈ¥^X±F6Û3œ¬¦¦}f~ðSåã«W48YVñµÚcEàÁˆ/±‰Ž×ˆ‘º'¢ZrŸ6rÜäûµÃoÚ^Op\èdûTì•ÄÆMÁ$ùªß‹KÞèz³ºÔÊãµíz­\ìž]µ_ðŽÙ3‡[p@ÞÝKæJ}£7Ôu—e=Û=òM½]KΓØ(¬I•Ö¡ñŠiõÇþʱ&e¢‹mˆ,@–k5x9’;jQ¥Z•…Ì—dí8qÀ¹¼Sèl”K:Z¹2µÙ~vïéX=rÍgûé|ŸIŽ÷ú½ÓY¼E¶¬xøß•³Ñ½‡/U »ör?±Ðp³d`NãEX/x4$ð®¤ÅÕf‰5J’_Kbó‘¹gã‹òÿØõ*ûX±­MRYž‰ø^#¶$]:Nwø±6DB~W+*Шüôs­à£cQ?í»'=ï“®yÑÏjËàR>ì:'\¨ Â‹¼ToL”œÇ„m¥ž'VD@í&ï—¯òª©+¨ÒÂÏÝÓ*œÖäÔ®û̓¼çõJÈ+U rC›ÉVü(/YkÇÉ)Uñ­:ÑïÁ¹dN]s œ}{£çâìžè)›µ¿^‹¤…qÃàí4YV›,€õîâóE—{6¯Ÿ%KyÊå±êÇóÌ|˜…Ç#v­6ÔRÖº®.oN•ƒ3d¾³cWk‘*v½Ø“hr~€\W¶¶™åÛéýÅc§àçëñðyö¢7꓉V¨ü#¾A‚ÚQø9*šÐãlEërï=’”0š‡auâ:Æ9Íàdþ냄ì=a;ñäÎõFX’î–ó$²åJ-Ÿè*,(ÈNÛo'>F¿ˆ…Ñ›d+­F댾©oOëvøâÆCÎCCèe‘fˆÂ\> &§og‚°Î·*<‰T'°3yô7IÆÖ /Í+Ê´ûŸWm|:ÍÖ¡>]+’+ÿÖ랎˜ù!î=9* /žd9X–jKm%Ñ.~›ÏxWÃêy\›2Èìןú—vaû<ézÞ•H’l¬jz£>Ô˜,€Q{Ã[g-ŠÙ鼿B?±Hô6Kfù¬ÃÅö1 Ç,žhÞàœly ¬xö‘H¯YÔD$œL m…Cà `Úgÿ[±öŸ] ƒBCla:,o0ÒE¡ð€6ºç%:ºÖüAnœƒx©ûæjÄî÷n0CE8HK±}žéî>µ W±êpy"âžö†½§°n%³Î¥5!ä;K ¶mⳄXu<&þ¡Y²[µ(7Fë0¸»VIN,I/ظQðŒ/{olºmý—“_s­D8òÀ !.¼)‡S J¼§ñ\vo‘Ç–eÇ=Ï:ИÔºÜçÉÇ$oް¿Õ‹†Ex+Çû¬n/+Í:âë‘Âj3ïªM^µöI3Þ¶‘ <ßgݺ‚?ûî´G­Ö…ô>Oý“iÍA©ÌÈl÷·Ãøÿf ¿èPo*á³—±ÿaÙP¦‘O÷&¡®|vz‚Þ‚ƒx‹á‹æ>„¹¨?‡NÅPûz¶ÞhcOr Ò)8ÒØ! Ô¾3(xÜ|ì¹> GvøLŸí|.ü…!±I\6¼ê”G’‡¬N럷Nš«Ý Õð,ö"f[óÈF‡-A´p–æûæ®WlGœov[?©Skmˆ-¨b‡Cµ«'³éwÕ‚‚•¾£žÍO³ÎàcC6y3ƒÓeîùáv)˜ßNì‚~½¿cEü]snÞoDðK6?G,e°pfj‘lü¨¨‘OkYS¸’VÍ0b»ª°´a±üÈâ‡Ý-ÿßÌÁ'w·C6û‰L’‡·^Ëû“$žeíáàãÁNù~$µõ y°–Œx AäU§~çjšÆŠ^èøÙz½o­*1~VÎå~¿­5…3‚'ÎSç£Èmç3@€øL¬$š“ü±ºÔ½ º–/çžþeG|Øÿv0=Ã/–N"9Ó( v/üÊ:éáÀ¸áVÑÈö­Ç'P‹K¾#»~äUYS¬-g®B§½¾ílŸ ‚b³<’øN×ÀIé4yªÆÄ“Yªeºù`Zb£ï=M–¶úê?íëÓƒä z 'Ýï3} »rÚ¥· éZé›Áz uís£•Ç>µþŸ¶w½«»›/0²\çËÁù¾°¨ö¥ý¶º.õQ–­ª’äá©>‰ÿ¹Œoá¹$&üà\ã" åv¨B cRýýû;ÿÑuƾ¯œÄ7ÝGº‹ÿ^šÖ/‡'Jöò-å˜Ikg¥'H€ÑÀ'è Öën¯Æ)ÜRe½!]gëɹÆù÷f{†fÿË4ïwµf›õwT®È£zmUðýîÕszørý±zXæ¸Îàb=àJóèr, ,JÈ»U–ØÏùÍ­oºŠçs¶Qñú‡5ö¯ÍÄÊZúskt£ïT]ƒFÑ0ªë.ôivšsÙt'ÃØîâ‡{çKµ8°»ÇÍ Žé‘‡›OyÂbý¿êÚÅz GøçvÓBëRÿì²sÍéRσ•B »ã’—ƒÈZ¶~Ùn2Œ0Ì+jF¿í:vµzc¿Ô&+?RnÖ„]„Íë( NÌúÕw;Âõl4š‰/àjò•…¹âÉùzüC+$€ÿ>oÄέc |]Ûx)ò/Õ® #dq±F06ɬ±öØH§';/'|´yÁ„:çNä ”K­.Ò‰/¥vª9ºX[b*äö3߸ÅǼK'JA‹Ì/ïŸ<ÀŒ´>Ìó9µjtwZûòšq–¶újEü¶Q‘Oâlb¯äÛ~ÕSþ ‹Z~dÍÊæ‚pò¼ÉdVžÏ„×p¾Õl>øO—óÇy|®—)  QÔfÇ£ÃG­G³ÃFãg’\²‰D`£d;£Óg|"Ì Òíþç³Wût½kô¶0bóµÃb€J;/e¹ñˆ‹àè_ïI4­¼Ÿë݇U²Ð›_¨7Z‡ºB±Ì®Œhv5θÕníñDXËb/â-"×ð^K€îÒÿ·ÚÇĹ>n Ú)›µÉbÙݵ—[[|…¡Ue˱~÷¶±*س³ùU¢Et_OYòŠ_·§Qˆà‘ÈØ†¬I¶7Ë{ãVýføËÉEqGïÝÙ#Þ;ý·<°\*¨Ù ª3©·ctÒæ}Áêtlö39ÉCY¨Ÿp•™ZuÂtƒÿu«?×kýZv+—Î]j†Í’5F‡ÐÿÎk“f¥ábË€Ç4Yéµ,FÓ™w¸.æ¸zupï™z&;Þ³­+F :UV­ VÿLßë²æEŒÍ»YÓ3ûÒûE÷Z±x7ö™H±(' ë4r¸Ÿ\b'\™l›ËÍ>/kG}¿Ò]0»}¾Ýgöƒ¬B¹üî!ƒas˜Ç£ žUÀ{¼«½@²8ßh­>±DÄdØ.•PoÔhÆÜlwmx<{ºŸ÷ybÛÃ&ä²±Ivµßž~¨ßaœÈŠ#ÉkÑ×ÛÇk}k^q™—»FV±ê¨{Í»Üÿê…Ãz¼CUάF¼*¹lô–´¼=v?î;/„u(/Ë ¨À¡Ú¦:wOûc_yªŠö¤Œê&¤¼½³G.Ïõæ„4.ü~ë’U)cr£y ö÷¨ Z,¢"^!{ÖLÃrTjäïÒµ|.ò¯k¡=¹Þ3yßäÌRß°DìÕä·6TÕeCÀìFÄÇîP‡Â{€÷Y¡°|ö,;’êx/•­ÿ_ôY ÞSyîðv5ÕôP{L]xïY\Yþ½¼J’›í-¢ƒßäMÛát!«ÄÄ"’SN'ˆszû4>8°U)£–ýg?}Ú^íÉl"µèLµV†Ì “ôG†®$%#E¬sk—“ªÐ5Ì –ÈÝžÃ^‘ýu}½0='OËÞ%>nni ü?9ð"F<7‡êÐxzXÌj”á]Éž¦»û™9Ü3T5Vá|ò›—+‹ =Ø¢t ü êµÕ5ö3Ù¯/üyovDÔº€Íð>dãš-³7NNá ©ßp U²1ŸØNkµI`ÛѬ0³,Q>ÒìRO°¶Øg°,rG\#çN=³'H¥›µHÂÙgê óèñO'9-&'óPe+yÈt¡³;U+N[ò$è§ÕÚÀ²…¼ß“èð¹~Ïò¼2\7»Ø^–÷¤ú%œ†åKÃÀR盧Ϻƒüÿº–TUW5 𝔝+ÆlU4"¯#òzØsq­®é4ð†öÈÌ!é`Ç< ÁŒbïÈdµÒáÇ¢ú·k}[ß_œ2 œX(Sþfó³·þ`ˇƒ€ê?Ýî4^+UûtþÄÈEby³ G„ïRƆ÷q¨;ðä°tVz/puß­§­ØàZàeŒÝO/áe®•žÃÔø»æÌ>äCŠ• ÄØoí)³a]Xgò÷Ž¿óÿyìù«€ßdipy-0.10.1/dipy/data/files/small_25.bval000066400000000000000000000001771263041327500200120ustar00rootroot000000000000000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 dipy-0.10.1/dipy/data/files/small_25.bvec000066400000000000000000000010731263041327500200010ustar00rootroot000000000000000.0000 -0.3347 -0.6643 0.2446 -0.9666 0.2135 0.6467 0.9431 0.6058 0.1294 -0.6945 -0.1746 -0.2989 -0.2396 0.6013 0.8309 -0.2385 -0.7242 -0.5691 -0.2364 0.6801 0.4600 0.9120 0.1145 -0.8928 0.2460 0.0000 0.9330 -0.2155 -0.8902 -0.2364 -0.6025 -0.3816 -0.3316 0.1735 0.9162 0.6452 -0.9775 -0.7757 0.7204 0.7967 0.4474 0.0906 -0.5791 0.3576 -0.4061 -0.6898 0.6492 -0.0438 0.4344 0.1239 -0.1143 0.0000 0.1322 0.7158 0.3843 0.0985 0.7691 0.6605 0.0231 0.7765 0.3793 0.3183 0.1188 0.5559 0.6508 0.0614 0.3309 0.9669 0.3744 0.7405 0.8827 0.2483 0.6057 0.4079 0.8934 0.4331 0.9625 dipy-0.10.1/dipy/data/files/small_25.nii.gz000066400000000000000000000071711263041327500202650ustar00rootroot00000000000000‹âZQÿsmall25.niiÍWÙ¯$çUŸX< BHìx¶»Mß{{¯Þjß÷}íZº«z_o÷Ý·™¹3ãØF¼ñ?D E¼€Â@ H c+“ÄŽ=±3ØØ&v¢8¡ jL”O¿4öþ¿œx|rX¬}rýgõ—ß¹ÿàÅÞzá›ßxðâ+/}ï•·_xùþKß|øÒë~ôGß}pÿ[?xøöÛ|åþ¯=|ôèõ÷>þý¿xóµ×ÞzôèŸßÿë¯ýàõGï½û“Ÿ¾ùÑ×¾ýà‡?ùÙGÿþþ¿øw¾ñðµW_yçÿöï_¾ÿæÃ‡ÿðO_ùú÷>|ïõþã;ðõ7¾÷èíøoïÿÉŸÿ;o½ûÁ?|ë対ñê«ïüèãŸ>úè…W¾ûðÝ~þæ·þõOïûíùùÇÿñá³ÏݦAE矿s–y£»';ÝXez¦zz±Hz–¾ë”“‹eߕ…¿º±%x#«X’TIRXÆòÍð¼mêÚás烖J÷Õ£{Ç£À²&Éz||4lºÉÀÎðÃEÛõ;ck¥ÒøŠÞ[ØùuµHjèiµ ˆ“EÝ1•š p"'†ãYGc„FÐG˱#Q ¹áN7TQ'lîpr8c!0Ù÷$E!q¯-G“)Ò¨²¥ 8lº¶%£„ã-ZÃ!Cu5†€™’Lb¦0º4§‰$¢Ü)Êý–mé8„ÙtD•Ae¸Lp’&3QΓ²jè,ÄÝ>;Ûïµ»7½“³çîŒgGÂü¹ç/îþÎéâHTÎû™;·ç‹c.;{öÞùÁνsâ²zóö­£½[·ý-t¼8>9<ß5«W¥ÎìäôÖáf'·Înìßl•N.ž¹s0?;·3ËÛw/nŸ3+îñÙùþèt—Z¯ôNö'Ë»]¨¼fÌt£¤ o^ÜIdm½ ïŸ%÷ôÊf©Ú m÷ðòJ¤ Å¿Èll—ª™šlï€Ûe _Ç5s@åªP%99d „À`„!)ž¦d„QR4%Y– £ùz¾Të°éõ± „±uÔ0;x Ä9 ø.E¤É@`Vñqe9cd]2(žÅ¤¡§i‹4ŒkM[–š"ªše:I¤Ö]Ùq»“qÈ—d'êïíB¡HzA<ÜY x4ëýÞh1Ó¡ŒÓŽ‹ƒ.sƒ §ç'=ªT‰&‡·îž·é#xÍN8Ķ,ûþ¸­ÃëŠÕôúÝfeÖüd²;ñ5$ðãÑr.ÖÁªÝÛïïÓ9(¯Ä£Å­.Š"Y¬wt~èpêgž\¹Qâ<Ëà~ër„y3­¢Í-vƒDG @„­¸'cÅDàr8uÔƒá¸ì-jY”YÃëôtRˆ¢0Ù=ùW®d 5ÙJãÙ*!uÚvt(ç Xs#«£U7¢]‡X†ÄådG­´¥(ÞÎRlPœç·Ú;Kǹ éNoíÆåk[% ãÔ$Ζ5°ÓžT’…<ã0I“HqÇEq BÊJœ‚ˆ•¨:a [®¢:*ŽÝVÛ±=‹EDÞÎ!$K­ÈiÔpÄIDzy Mc’FÌóD†EÜÔ=ÓÔUTʰË7QŠc5]’HWl“T›N·Õt™OúòVýq‰ŸyêêZ–ÆqL)¬®Ý(ã8‰7ÉëW·ËÙÛŽL`­.–³\†ÖéîÞb:âªfJ˜Ç³y»WOž¹w¶{4ë)™ÖáÁÞloÏCŸTæ³åÞîÜg¯Ö‚ÃãåÐc39i¼¿7í0Huv»Rl¬ö`З àbñ‹@4½èZ Kc(ÇݶBÓ VVà[šH3fGx]Á0Æéz¤ä™*…=‡ Eª3îA“Çi¢VÜ©t‘dhBãW³D‚]IQyŽÂ)#2Òó(ÎG;:LÉ\½Îµv%RÑFC $JàH]lís<%€ ÊlŽrˆãŒhõ{×ËÕJ©ñ8¸¤,L*þÜ¿š/Ãé;õÊo^+B¸ÙšLè•-„"u§a7rJ‰Í‰Qhä¶J)™wàr–ÃkMOf„2£ÉQ÷J9Ó-šŸß¬`ŠîCæé&Ú‰Eóé™Ï”Z= !´ÞëðF¶PõHCjŸêÉL‰æ)½÷ôg¯g²(+ÓÕÏ]YÍœï6·näê|õ¡µ+«EÆòÛ æ73¨Ýõ)…(@ ä }Þ0¢Q“+g®m§`s=¾–Yß&§ÂW×Ö+¢“´}¸Þ¨T·Û²P ¨@FØMN" „§CÕJgi}¸;Äã8}°ÓBÇqSf¬RÔ–¾¬èX¬£À1R¸Q\«ã›Ç’t ±ÐÓ5•¤©È­TcPšÒ6LYdR˜5Ç4ë»Ùà⃡£|ÚNÙ°kM¦½«Û eKS‡Ån(*4AñÚRwZ1º9s<šçÁ" LyY”ÒzÌ~C ¬‰ÞÕUŠJ;—V]Ï”ª˜*kYÑ38€³Ma DŽ’]»Š• <¶š©k–*ê]ßγ®gè Q­¬ƒ’£ $TÈÛm‹adÙˆ×0ÐÛmÆ+”ßv M¶­§FªÃ4] ž.ž£Ù2…—*Œá6MªQs -­w¢4Ö RË‘ñZýø`dðH9W .N‡¾Aá0ì,‡¡H’dxvÜ7F…½ý‹ebKož-NÇM·ç^Ôöx‚àý§ ˆpáÅéÙNÄBÕ ªžÜž"ʼnb«w4ïÈ(+YËdœ¤ äyçö|ºÏȽ[IײRãŒÎÔ¦e0¬»KÔr-²Ž{ÍÙélÜ1U…éTæM#Ufvv8‰]U’RÙ[ŽbËp²4?·âØÔÄm»ß CKgrhÒۉÒP9œÍ“ ) î¸7MYbj6÷RVâôb؉]#p9otßµužßFÛ£Q )|JÇRÔöDÂA€µ¼fSEˆZEôš©"U0LdR ϼjL»‰áLu„•ÂNÛvºrÕ°‚¶ïD]5×nÆ¡-XSkÝI[WÛ »Êµ£$°£P§Ñ Ž[A™•-Kwv…O©Êbõ¡¼)è¶g²Í.’Ý·å ¨U‰f'PåÄkÔÉ0n‡ªV­ÎlD"QÛ¦ZãÞ°­Ê××nl”I†Í͵›5I„)w{u5_M‹ŠU€§¯oH„’T6·¶Õ HN4ñZ1—ÃÙ0¶y²«¥›4x+ Í4þÙËk™ƒ@‚S½º™Í`$-[H&S`ˆV(pe­T§ Ù·+ùµuEoö}P„ÓºsóÄŒ$”ƒñ"Œ›t®!Fó¹òÙ§Vó[uÑôZO]^ÉoäTÇm¯­læ`½LáìF¾„+m¿k•óµJ]%Ý>]‚ªyÛ&)‚5C7 »¼ ¨^*dÀkÛ@T=וÖVsY U(¾UÚÜ*1ÍvËñE ÐZäk6C¥ Õv/ýõ­A 9ƒHãÕ ÛÔ½8]ÌŽ§:^/–Cë2YÏåêHªd©RªUUŒõB¨4X”dZ‡p‘¤‰*ÂŽw…†C€ô»F¶”®L¿ÓàTIÉ3›¯!( ‚rT*o`ÁÌ>^-Á`¹Žs¢RS/vzf¥P%Ò^úQ£ï{m¬7`}q'™»$‚ðÎò&Ä)$V/¸Cy.J Û–°ƒÑØFÛSŸo@ HŸµzc¢ 2µÛêÇ<)ƒ “Äm[áÒ7ÜôüÀUUÄ}ÏõU¼^.z$R¨à^è{2Cתô¸Ùé«8ƒ€ÜÔïvÃâ r:¦¬¥ˆ±cÓÔ 9eVM«‰^ ÊŽI“…íb Itm€•"Èã@Eë%Xqùj•…e˜•RY'ÐL1M´Êb*#– VtdÑflÃ5×L5¤åŠvËëÍ4»UÇ8-¡L­°UHùå9n  é³àZJÎ Hr bd#yÝ¢)’RdAVuamK2lCT9Ù׬áä?ã#Ý dipy-0.10.1/dipy/data/files/small_64D.bvals.npy000066400000000000000000000011301263041327500210770ustar00rootroot00000000000000“NUMPYF{'descr': ' ƒéŽ@±ü‚['@`¸¾LùŽ@êEÅ1»+@ùÅ;B@Zq ³ÿŽ@*tÄ’ @ç“!ò@X'úÈߎ@°àK-@ûœíj ðŽ@‰%gaïŽ@í6aîŽ2@ò5DHn@õ¾e­µ&@C‹Úq0ýŽ@ÁVÌÆ@i ±n"@(+[¡¯ßŽ@-5]îW@q2¡ˆñ;@‹ìÜŽ@Ñ–iN0@ËÅ á×@áK ]»ýŽ@뉤HÃÝŽ@÷ëˑ׎@Î-pÃìŽ@ÎtÈkÙ@0…;r‹@m92”D@E§Vò¹%@º¹½óŽ@2eÌ“íŽ@,ƒ ®‹!@ªžñ0@ê õŽ@Iy†Ô@Y”x&y&@?Å¢;û@ª‘ÓMH@Á=¾˜û @‰½(ƒ@®œ Ð0@xø 8=3@¹=Ò*@’«úp@&˜!0èŽ@UWo•“äŽ@dÉI3UB@µö #ÿŽ@ð PâH@?“b$ôŽ@€¢ÚK@2Üø·ãŽ@Z‰üòŽ@º\IÌ£@¬8­œŒM@dipy-0.10.1/dipy/data/files/small_64D.gradients.npy000066400000000000000000000031501263041327500217540ustar00rootroot00000000000000“NUMPYF{'descr': 'î?–¦êBûпR¨Ân1±Â?dipy-0.10.1/dipy/data/files/small_64D.nii000066400000000000000000003764601263041327500177670ustar00rootroot00000000000000\ A€¿@@@€?€?€?€?°C€?–¦3¿–¦3?r½±= AF]ÉA¿ EAÀ AˆIø¿Gvù¾F]ÉA6vù¾‡Iø?¿ EAn+1YšÞçËò¿«gÅ͸̵¹¨…Ÿ•²¯§“¯±‘mÜÔ®©©­ƒžÛí«¤šÀ»œ ¿»¥ŠŒ¸Í¡˜²µ¢² «§‡‘¡{¨ÆÚÒ«· ÙÊø °ÂØÎ{§øíæáüÄ÷2©b†ºÀç嬬œ¶–ä÷Ø»Š†µ°žÑ¿µÀǹ¥Ò¸šÇÒÐÄÓÊÆØ¼ÝÒ¾¿ª˜Í·ÂÂäé´­¯’º“›½ÊÔ³’°¶ Æ¿ú&)½³ŸÈ¡ÄͲ›†BƘ”…SEÞH†æºÆh}<:¤ÖáîØÇ•ÍÛñÈòÕ„ˆŸzùøÑß·«©•”·úÖÞ¥‰}£¦èÒ©Ÿ­º¿¶»íͪ¹ÏÈÏÊ‘’ÏÏÓ}–£{¶¶Í¥¼ºä™¦Óé…¸16–²œ}Ä‚Vаø)Až¸B£4ÙñÒÑ×ÞËš~ê°Ñ䦒ÍÀͲ¯ÍÒѼŽáÕÜÉò£Š´¸ÒÑÖÿÎ›Š˜°©Ç³®ºÏ«žªºº¡‘ʺp^™ªíæy™Â¤¥ ˆÙœ[·“¦¨…kÓœyÆóA5IŠ·a#Ûêö÷ý É„ª¦ò Ô¾§Æ¿«Ò°àÜ寧½¶ÉÊÛ¤ÓÍÖÅ«ž¿­À©§¶Üµ»®Ò€ÛÛö©™ƒ•ˆô©Éµ•ŸÇ •ЦU­Í‚”Â`cjͺ¸¿ãî}GÕ½‘i?¡ùÏ€ÓáÅÝæÏѱ·¸¸ÜÝÙɵŒ¦˜‘É˜Ü Ô®ˆ¤‹µ—Ʊ³²£¨¥´²g©’¬µ£®„‰¿@×°Àº¤Œœâçé {•„Ÿ€jy  ÆIu«µ8QšÃ`W¹¢®—¼qq¿Âˆû‹[hT‘¼¤¾Öì꣋߶®Å¾’²¢Š³ 姬¦Ì¥­ë<õââ⟠’ÖÊT´n“óÛÖ΋õþH+'ª–ƒåꋌNl¢à¤ëa¹WCC' ì×f‰âáîwoÚ *ļ€Îî½ñoÓÂôÕµ©Éç³ÿ#¾º«¥Èôåã Úòί³>yiŠkÏãiètáÛû;"à-“o.UE~Æ);xRÔu@cª¬}B¬Öâ&}E„¦v‡`Ék†‹˜oT¶ã,z¯¥ßÈ·²÷Ý«–­o[ ÈûÚ=–´?w&è´C̃Ø×“û†ípJh™2äjÿ‡ê, Ê­`'ѧ:à 1 Jž}‡3çíÿ•s-#¶á¾ÎV»ETÁÃÔ¿A|Lù»÷`Xà°âýúñó«»'ñêFª`·ï¨2韕>Ë Þ/‘r(zU¢ õ³\J+ šôGç˜x%ía»âO2íh™òãÏâêûßÚäÓÕȲ¿í°Óæ¹ÊÒÔÏðôñäÐÒíÏÏô ñãàâðÛ4:eŠŽqdod\RqjU}n-5M4LudlzO=CDBvžifO@vVfV|v."Em†YZ„JQ?0CLCHeŸePBcCKOQdgT2G\]B:[}°ŽWfO3SmxŒ],fc_x„‡d,,\pnq[<B>O†ds€E8r`„kaRdODNu†xcJ'<5>0-ivR1E.IPB1_V@TfPb<(S:]jH_Z3NUA‡}–V@ffdqho_O[4/J_eJ.~”xO=br7#G]zl˜(41fntjJ>=KeD“”‰sG8AG17_XUC*!.D3ƒF+TjU!YeCx!KbXLaGOIbeM03H-J;.yŽ~VRG#K\G9^GP=5OCF+7axX8PvTc~ŽxvfcZ?\}\i†OHQNB~’|[/G`djmfXZ]Vc^}gaYf]z‰O135i;CT_gWXVYjNcV€pW\OBJWnTE>8HSRdB_mAhqZ‡gfo;'WuSPQ,hsr…´yvQHH=^’e™WE]gD0†‰‰jGM\UO;luaiYuXmYH`K58>\SMa;^<36>N[Z`4?HPXK?qr\<1S:abC‚[Yk(lNHodM/šŸ13<!E.a”ˆƒxfcURiOA[`VWOLDN&ZM><%F8L<TIMXHXZMX)SQU`k†?Kf\h`Wh1+2:,ImG>P5AY*^SybJ@)=$ek6ZG-,M…:*9,+Mhsr4amaXR3#+KCN8EkKWH4$D_^<+ZhOV'3)E@{O6UCFH#/6<lO09(E#UTYE=A/$EfPINR*46q|\b!X6DPƒ•;F9.A\oc>[~qAr€TSB69[l?<_khbes7/BggB\k?3EVF21<0(9 -?(3*. J<=>>7<E$!AAbxMQ0&AQ,bb:G}bœšC{cX#c{eLwK=\ri`Q_KK1{H;M8_=y@1C1&,8!G_<',"LE9),74E"I:&175,0:?07 .A*;/;0,)5B!((H24bƒŠfK‰ŠƒH9L‚€FVy$';2b‰wY HDMEZWQM82?8;D1L1)!1*7,/+5.,'' #@((%$'!'7>-@;@L&74G.7R!6c«Óæt~‹.o|xVqy{oWZ¬SKVW[IQxmIGR@[ftk?0($BNe:<FCsQTrav7?KtkV\NDp‚B]<?JNG^\ycXa4Z<XUb5vXaRX&,*[‚±È¾—`]hZ’¥–œq:F?o–‘|`<q[P4=pQ.V`NpyIXU!GfoU5K2`BTZ?gZnV:V4REZUCWTTY&=^91,Grw0Ag;L8\g95 Bƒb*0OD6€€¶µ¶’ xkO„±½©ygZE>b{¨y|IUNQ:d²{^K$3&e[VQY?RD<4TqkeY?PZK?Q_o‹AJJ47?EGD…@WE11][TYkGhp7)D7CUB1atcYQ[9,ª¿œ­‰mfGsz°Òd19aP~Yb0RbYU\iNFO)eL]6dyAjVO`LWxr5GEfTYVQ0M`rQrXG>23tyVa?0#DMPBkR/ToNID4 TCL1){Œ‘¯~yDTˆUŒ‹‚la@4EMReS4BF4G8@GP+ri4M>D]J/HSN:,Xz1HW=TM9Z6_ld[AH3R,YmmUM6QiV9[[3BJT[L'X/9*A/0|všÌ¿{k(w`ªªx}\c7QYd¡prP;\aMAhab]S-DF^k=GiKhGCx^:,S[\LQ@gC7AAQ*TBF]XaXK;H5S&g?/"2dD01 "#cŽkhŒfv…hMaE4WY6KPABmiEoJSHkkaD-:AgfRjuPDYZWA@()8P/6]I?*^D,?Z<9O 2*TT+!9R6 B7"b=> 4>/%€œzPkodqp.obhVT_EF/(V€L\DT=•‚ZE O;08tS"5V01 3)$LLJ.:*;IT7M0&S…"2%($5K8K94KF?„dQMX>(5OU+ae4hTcO2RX„}DfV,<YDtQI0'HJPC#/ZGW= J8&Nf26EB† (( 3©½€NQ"gMW|¡®qi‡–µ¾Ÿ°™» l˜²ÎšcrwCr…sM(oY­§Yc52"dUS/ @h02O(Q:7&$T…3/'/]›Æ×š…s´”¼½°Ç§Í¹ÂÒÑÎËÂÅ¡ÁÆÔ¿³Éʸ¼˜ì׸Դ°°“¬¦Ü˜©³’Š£4WpRjY?Hix;u‡bs’^T\@Q‡|†‚iY$/T ’ib];;[Wy²›mYOjvh…s•Y QSMueB[˜dNXLVJT{h[YtL>L1HŒ‹TVVIH>L€u:3„‚Z\eO1$M^Z-GS€W`H>ƒcSn‚zatN…‡dmvisiqDrˆTPc_KW{rNYx`gpWŽgepk‚w{[bqa„‹{{…YTfm\P^n~TQlra‹a[H98c€\C{ˆ_Rer%‰•ƒilYXs`q¢}“e_`V@4‚Š|j]SR]@ŠrzY˜M`Š tUjts™tWq˜BaSqN\UF_dc{V9QBuZ<a…fd^8PI9TkssGH6E8gK;KYg_E‹}1¨qPn¢”jn>µªzj˜œŽSnBœ‘rЇufntm”kz„}gbj©‘j[h|acG‰ŒŠEb`[hX_ohtMLcl•\aOT_F@@4`}Q~jWY<Z|c[ˆb=2[Zs4Y;Xz—†jIElTwK°^W{€„MGC›¥¡£’mVO)KcK`N`[r…}8=XmdNFlŒˆ>‡u‰mSC^{„*D7KJg[WUH=YoX~ra‰Q<qNH]£]b7$4/)DSI(F²žce†b^Q\qªˆWZj¨_ViQSaZNprQ~gM4J\VM€eJ[G*L\bmVoy…-5Cpx[}moŸ&6c]Lr{j@*\ka[PhM/6@\\[:277B23!74'Ô¯jl–ej‰Á“€i{}gVs¡xN8*seSDNN4eS,f^hwa‰h}c(2u…as§a6MH=-me£Œƒ|&"9L[tjnw",cTHad_*+<XgcXB,+ /$/&0²¢Ÿ–†‚dvsg_`_`‡Œzn0^iyMFLfh& ^+*CBc+$3_E+$0?$W>{p,5/7P6u\*Q3!Fr?9 (.:r‰¥NV'"Zke“ŸRL!78&2e¬™°ˆ“~igl€ncvfdgh¯-6tŽzrg8!mP d)!?^<"7#4]L0@4R:H.%F+h§$!"Mp|œsx@\es¥‘Нyxsˆ¢­“ª–ˆn€„¶ “ˆt{ž_E}_W‡]C\TEMbh65S?'iG HJW6y¶…_.3O>BŸŸ­¥Ä§o¨«¦¢y¨ †¨ ¡ª œªÄ£«ÑÏÃ¥ È­‘¶¾°¨§‡¤Å± ¢”–—¶ŽŒ2Qwz“’oiu<"!KrzdVFjeDPgƒHUKP_k„oLEbaY/6BRK<K‘j.W@?<CKVMWeuLN;8:0VlW^]1@c@LN7ClmqihYYZhc%‰ŒOA`W1 2\fl‘wZDU`ljiK^VOx~IIvW>GY`6EmhSjlMD9Jd{X.?Qge^[.<??cc/zˆXlLLRHeQWfw‰["PfeYZS(T+T`27,BSVb.€‘JAVB=30@hŒ‘‡`V>p^|rV;3ZPO–eWO]XI>eS^T--nec‘IlFOvahJN]hTl`,LQ ApejRJd["No]NXzL89WVTFXJiC8qU%6’sks?09/-b†‚p^QcadP…iONA^^\5Am†zB>V8=@Yw‰EUF?W]jPS4*lhhj3Q:>;5?N5RfAQG%%GDWH:RL2D9%1GBI_YZ`e/1XrA'$(YHDX-MG*YY†oz‡C2) ^jQdf?NWbUJsxI)(9e`FWa^RKU7Ijcm00477Jm8QKB]W8;7> U3dr@/5jkjW@Eda;No@ceC);nŽlD.o[G%A7&-ISq…‰}ZwV8JbIReBC5Rk:_oL:/8TME9=.%O;@Xh^sFVDX\ELoVHH^OT93I_JH<HZVMx}C1FNDryORU-8b}uPD,1_v$ 97?CcwrJpZ?3TCBRolZoP(0F\c}ˆse[34&EuE_’Vuh'?PCgNYtL&MSN^XXR" 4ZkG<bƒeJ0I]9>€…?:'nlLW5(6,#Yn08EAV_IEOrCh¢UeeTG€aIzGGLF`[NG2‘„zVX_2,>iA>Q5?B? <99'%50c]F9G4C8'$!<sb997Eoud^O/WfSjg;*RI/>2EtUlPU^WUds8cUQKUqhH+@]u\o}G4CI^ZRIB+0 ND]hX7>--^N8_L/TP/]ENU\13$+XS#!3;BdH(/M?VX_–€>d_typfzqfgXpwu‹±]*3Rix•ŽfZA&-cnW77A7-J[;/5V%02-98ngRjgIFGq˜u_@U7>Sgab\@I<<?KQmKDu\dZ=RR\[LXHrn{S*Y‚nQ@+6OnTd€hlR(Dcs_T_KWrK:MNKHgjdrB`MtzbyNS=*,Gau}vanR\EnV+m`TUA]g~\dNdM=^Žpo[‚|^dVq‰„nm`cIuŒIAmOnif/-P;V9^BSršL%;WAKXa…wNBlVcrY`sPYXLnJET]YQ[]IG2`P0MKe8]F8Ma,;dVQYTG2*80?T`š`@sq>GF%`F„zT[[99G&G€”FTtm_3Pklhr‰’\WMhGNrn˜šOL:hiYp’Ud…O`‘]TO]o=RRI˜NPsIŽrkO#h{wu[WbQHT”NŽwMB65.™ULieA5Ps3ƒ¤‡JvZi\b(Cmvg„d]8YSXrizcny`l†H\gwu€_=_‘~X^VRojI‚|DC=6>Qb’¦EYd]A>XZŽˆ8TB&0"^QŠ:S]IDNH+bwRk[NYv\a_[o‚sgglOAPE4dlK/))-XJKN:sPWXr¯œ`S1JL4KZ|u^sNSW/Tfv}YG64P`F`”bV=SCTiyˆcaW]\/MMªwOZTKB7[UzATWRIed0M}DPy‹sC‚T9Q2H7Hi]fvwNVX;qfy]Q^CP7Hp‘6>>PY;TWED;/T_QYwPiT[_Y;Q`_t‚]QT14_]LQ/‚`MlJjAGiV][`k@Mf]Z-,".*ˆŠaE,#fsWb™grQlvD8Pix@3ALOUe_hJlrM<š[fzLFOH:-we‰PNEBTVj_E@.7`HW2VuE4+4(2HH>g8UD+D2G\HD6j?-Zb\UN1( 9LF_d>>[_/ROBju4Acq3qi4<O@99ql7K;0%U:L/;!<;%UJ3<_D%AAPK-L#8-8?!( )Pb@H&&C19-H/92\=.7&:UXcth=9msr#PYŠgY_d'iszcJ S3!qB5-a;"#=:1C )QN9FV6C'%=Ž;=+9?%J—±SN6$,8X|¢œ•Yv¢‰q£Ë²®“˜¢~›™¼Á…€[pk]+ ”‹}e\gJ%VhrPJPB>W<c8\kL>YŽ]H&?XRtªÑ;‚q˜¼Õ«®šÁ½ÂÚµÄγ²ŸÆ±ÚßËÅÉ­±¥§£­Ìɼ´Œ‘Ä€¬ö椳²Ÿ@s…¿¬rcYF%€…ž‹N9hnŠ©pplzS'bvœˆKgiI6=md“•RyrlDh—‚qbrIXxt‹duT<aUc”`ziaSX€ˆ~P9 gg^f{Ocv*?§¡yvx|e--\•dy®phˆgN‡€‚fQWpJË­—­x;F`c]ÀŸnU`YKBr“¯‹f=?SJ;¥}~tdSf}bTnigbuA6†x?G^{N;RC@Z{=€b64Y:LYkwM_vgB¡™ˆk¨Šswf”®žÁš74YY­—mZL<SL+††WU3KRMhTtTjg„XNgq^eIeOteKAur ’[Y]kM-Ji•os[ZiMOPKcL\j\VOll?U5fd€\La8¸«¤Š¦j/6®¦¡v^Yh`72’zp`>NUkc/[pŠT€cbVAf_yiIa7wwv—n98RF49MfoPg`v]7'@B0ai=B>_KfJ>XjG8B#Z9_‰g8<$•³«xd‘“L5FŽÊœjXMemWX•™‹P>L]‘d=dNie`KN€„L;TRLXh^F@ROzA\jZaJ=E}M/FZOK_dk`I=8CP&KrpWw\Jiqoo4)z„5(1QeH)™…–reL!¡ƒdSCS@(>OHfPo[3KI8>„|LGoQ<?COž\OkTaQCY=CSZ}hmgOS27UKQ:L>G 1LupttF(9'Nn^`F&=3…„< %—¥”ˆ~qnT@I~_nyI#+DCKf`OZ;FbRmRF<Z_MM3$XNRQOR@+Ac+@83@KLSC H *DW5):3>A%#I%$2\'BSYF"J <oƒ1 !+„dl^°ŠVellpzkagtvKAh•­bBD* &ƒo>%.- -f@<&GLLN-$FM/3Kd<,3-.(Q:,!;=QK\= <'@V?.WMV‹hEJkLgbp‚o]Oo‰2•RNaTrLK3PŽ|cH[qP73@|pO$;?%M0bPWPGQCYTIL9AT=9'*(AH>G[D+&&6iI6Lb:&(BZK@O@=0);PR,7YKP@JYDUsmqR<LVr—k$KC)}…mN)?5K>5*3XNdL:+/D7W[=;DNA%LHd,7ceE(@5>;B%9WR9%3O?8SA1CTQE$OLH98"".40=aN]LkC&8TB\d*WnhX-HE4<CUI;L<.GL_yS=HDOS1QaicLZ_F@O]md‚GEY;Kx~p}geY!Jiey¢ …o]^ID‹˜a(‡m[zsfWA %]hNU]K0'HaaYU94U@~VOI[[IMOWUF\[Eh‹tYgfKlkTSIS;Kjd`G@WkNUwpnƒ`494=„¥’nqvOHJ>7[Bx`8Vc^EDZ#z}aiC:H'/9]jEQbI2CRIOSGbZSM7ii`USQ/!NtƒsNSd-%\fvLQ]QO<G|f:N_UAbstUjpi~oK8O=\rPyo%3]Q9gj^L`;FdO‰uKEutk]L?1baHQPa|eIYfl_O]X>?<:„‘fK9JJ1L“oMO#8AL{s`v†W?>@f‡i€Uculi]We‡K3G1EfKDu~<0)Fjkƒo©•LP_K:gy.G2j_SG=7 _mg‚w_bP5QWyxji>N9'Œktk&.@MSJychBF\J?zpKb96`: Xn%T^<.7BzKrRGX'Snj3:Ar|:J‚{ZC`F@T^kW${>AW6/8 ^Saqv‰i`ZZIgE1J4/>8]y[%.C?@H€cOna<BP]v[<L[9<[E_‹1@jdGds^\LR!TI3OT^r\ IHG[RFfnZTQ\\<&0=‰qJX A6@Nf`_wP<y:B<sŽ]J;WNRA,MoH5J/7YBjŒ (]7dMKEO@5WKUK.18ZˆEtj-'!/SVEKbl1ihdFBf%CAaŽx[MS1?5dzK?1<N@ACng`lFL‡lMjnz`H›Ÿ-Tt`Uiy„O8]`71hi M%/P/.47FNQ676,<"FE#YE&>c4.LN<K=(?buŠdX<.P‘x`VemZ‹šk\rcI„†tJjYIc+0‚p9RltN<M‡ƒ]aC%$!!LXW,$^q2 b8KmP*F--+laZkH,J& :#'M6JA"81H<'T*T\e`[FYGT4HTN4COFDŽˆwrƒŒ„XIe„v[JG=%X…gM;4;$<1S<EEHd' <C,H5"F@,3+5* . 2E=%%94 /:A?Q1 7:6=LT,1HC9A=*]sXOQG3 We½™˜}wb83d’ŠŽopqCWo‹l4Cchp`¸¡€Q3IH[RPƒƒfHU(VZ*ER^HPO@YXeaPVX@XPf^pŸsBEo{V3?7q—N0-OT[i_9]p_cTun:$,]xg|†q`lmŽ«‚Z7Z\;W–kndENVkX¿ThZV|e`b“Žp<5SdQ\^l"D$8\WAWX31LV]]5QR\haJBYFMfTQ…sO>:*lN)8r«xVXo\ 5±É°~‰k3Vb×±¹“Uf;>N®ypKLiTIQj—dMO;PXNjtH\i8QRLjfTGW1R9@E2fc<3;TWk3cvBBk]KI)R`Ps<I;QNHe.BKNZTF2#¼Ž¿¾‰xa^N µÁ­DP[‡z”›>Ius?EeR}ebqOmr*Rs;CsHETbzRNF6^GESC@KgH%A9X<1Nk™ICTNNK')WwJ<6`aNJXi_4")=^X4PU$ÕÕ··«ke[8I¦Û{ejT_-1E†ˆ^KWE3[v_j7T:2CGisd5>V9TdVc7]-FCCIB1`FG!7=5(B7LVd%PRHY\†[eM~K*@]^I&3#A8(&ãÍ¡¡žoC9Cl°³°‡f[64cŽKY‚dBOFR[QbKgoCA8@slL'\`<HZn}}"*A4OFPDok: D9(4uH#\W-:VYC""*2?N]@ % =, ='ãɹ¡‹zspu¯j„OR\…eY[rRaPNoQ?¤Q]0-cIdGR‚IBRHaD 4B!)6?WkF79=J3Wct&)74)5:%"Q:;-5/- ˆ¬¢™°{mx‡_n\HLFK\RCPVhN$4N ”^:$ 9B1/);#/,%+-FU5-"B?,D=C*-D52237_WG4/ Vx#&GD#(Meš`l_V[OjoF)ef@LH|…)@†{F, /AXOM{LU"PWT)>7i>'#O(fB:VmAH2 /z>!2''Uš|P@-HW9ƒ§¦³‘bxsz¨©•mavމ‡§²²M¢wDialRoX0X]gWA:!NZB:AX5HQ%0...))5-?mJNIUh5O›˜¤§ª—ˆx–²—¬‡¡ºµ˜¬¯£ž„Š˜¤Æœ®Á§›z¶©“§¬ÇÊž™Œžv¹¬Š¶#O~ŒwO:0)Q@:QafOM=NiE<Z31V<\~T67TDIhna|…X@D50'„S6N-=M33UpW;4.NL\w{o€`CoSPª·TO^R83}™9|—`4‡ª]B{†c]VLS<fpbpF>k\'7^_wD<I62CdqJNJd^AAŸFSGK*qXAOsbfQV-+[`G[Z[WY@Ya/M}LxaYaGJy}iˆ„pi/OYC sŠqalD"FxvJd__1:on7>KJZoL6‰ŒjE44<&~mˆ†A/BQOZ–fLF\cQDHYdFYU\VO[bK?T]</CMcbb^^LDTE76SQmQPD5“k<CreQ`SJCj>S~u‡lXqqdjWBTFg€{rMJC1^l‹HuŽhmWVrl„aUW@$;Z^S}m[VubjwYfQƒgFpXG_bvD[GO-HLV…gPok€Sw{ifA&/YU6JJU0zt’¡”SK\10d\gkWtg-IP‹}mHEcHJ}MŠy\g=P?@c}1)?…QR]TKSLqDBPZL9NKJdICIT3@jc0ECNO…]JL%YQUnU=A;D94P9)5%Nyy}sk>@3d†ˆ]YR5/:%@mz^S2QC#QHNGYo}d=WP:\?KOSx^;5NnYD(4@^TCk‚P[G6B X/U/2cs=RA5Yh6&SP-#ˆ\jG-+&~^LgDbqn[YO6B†’^NDLLb‚pBP.UW2:‚D05MVBW=6H?JkIMPMLIIV4E~XUHb8,7_F6s’38 =sDZ:8p1:BŽ\d+L!0@nzJ>6(>NlOULFTeKrW\QnWIuVPgd;HlY3Q^;2EJ0.Q/ZIa '.@ 1;711 :.%*M_W@/U‹D9>&Ce}]v5#8k„`hZJd-…xXJpursg_’aLi‹@6(2_u‡cP1G,;&-F^7 26DAG:' 1O:+0HPP AOSM.1:KN<2F2&$-%;9I2! :3N>RU47Rwb_rvWgjg€˜xWcq]-dc%*HSAM-6 FL51+8$.MQE.2  +5(! ,B1& A'@>++995,7O,^J4+)5E4DsŸ†©ƒS?/%VjjxrIKjKdˆ£eEB]lS<}OJM:U[eba(2<<CX‘|`68.\VWYYILT_XhURASLGqtsdQB>qcsZn„WL]_G4Uvtud>M2 Pp€±­Ž^4g‰tY‚„j"bZœ³W8\kCb.N}ŒL8NPblzN_ZH=@V[mpbA$/HWN4,\9FYNNYfHEd[]eZ],1AddXweC7,-J„n6mIQW>1 €©ž}“iQH\Oz³™“HD&Egs…„€c]JW[r}LFf‡NAiN}g:;_|VL{n?Q~Y4dŽeH>K\B)%CUh”IIkLJK)Rt0m;$77A]^Š:9C~laaO3„Šsm„šukoYo¡qUmhZO]qi|wj>d\3NvYJOj`d{dqz}a=Cb\B2;]8BC1HPa^<‚H4FX8:_hož[2OtC.L^€_[Rdm`HDB53\MA~gCBZ‹ˆ’®†[Z€vw©€}C5X6HSVayUG]aMXh8WQ;]klavœ;@LBRRaŒmS,?V0@^A_`tXLTDB1%Ip¥+S-AGMFN]ZL|aK7a¥ˆUC\),41eoX}ubTRyZc~e:g€WK^fmP)Bu\`C3L=DZPL_r8M_AANk–mBEPACKGgqIMlC%MflnMOZ\nknjPbd%Hj~aWV:+?b"6*4<cwm£¤VP˜£>TgЉh_L>ƒnkb\AXtie\kQNGWV+^[kKG<F;Qb`E2A>R`dj„}B2K..L_l}x{$M(VM>G0HI9:"=D<>:/?7@DW=!&#%<:sjr…^Wf}wGJ8mGY†§zT€‹€dZz€wUDŽ…J a~J&4k:),H,5<BDTV39>>DJH,#K*=HFŠr€@Qm€?+@N#5LXw|-%M10qSSƒQWtvSRnsgMogD6d\cC+„{p^4ZA0GKOU?B8<G/K9c/'1+&.EW…DM:5<\-*SO9(73mm *$GE)Dˆ_JDJbiaiy“„uceQ]…s„{~zMva4x§gB4c†…]F-JAD'[jP,-1$!p/3%  9TrV&oM380m”py’ŸjQŒ‹…x{Zl…j~ƒPNUrŽŠ‚byvg”œ[jxgmigzmcq__V|m7*"x©§¾veHP4g€o‹e:UImŒ |qd[OFg†Š†wcULW`wLgUHnRbpwS9A]aSbhpiRQbSySG^mxQTQEB]PRv`mj[tB_xleSZs[:7#3 (’̲‘˜‰eev žÆ¥EFJRž©r;FnQId“œ[M.:psn|–kZgTFKWPtvVihIj|eaD…gGbYDKPylysH9P#5MBw<UnDK9+=IQ-n‰l|¢W>$ io‹~°‡cqbtE„o:65NAŽx@)'ªSjasYNW:e‚X›3)7L2BR3V_2WZ)Sc^<6=M[QnFSJnrYIe>7G<\\WNI,:B?a‰X;Zƒ…2105¸ˆŒ‚uQy‡~z‰Šh8=@4HZq[KLcMfKvs0NiQ&:kˆbSGJlf^h[y.AdXdM8aaFDVKOR*TS\KOV9QY4X&ž5_LM,Cbw‰U %$DG9KUTƒµ°¦’dSRoJ¤ÃmVz]G=oJyˆ\NYia@_Hm70tpkonmj=?\q_B\KS„1KVLdqkF‚jTR34`L;f!L%FW8R¡~&gk>8K[Y;1(GQ^,3Šš“Ÿ™boby‡ubrŠj[KU˜•iUIWc,bva^FTgRac€Z@.c]GBz‡tŽM2bU5IZg[UREh@:zgvRSlvm—uS;Ha:'!U"#6>´ƒŒ·™V’u‹‚l]Ywqfˆ‚…wAhoŒ‚r>=Y\uXj‹v™^>DSFDj˜b{l_Pbi„Ÿƒ`jP?4`|x~o…94?*3Tif~REG4?[O@H:8?#.((rž—f¢˜qTi˜B\DOQcj‘|a^Y^jbm°¸]>Ž–mQk“jN3-T0623G+HP7)+SU*eg/S)'3G@#P^]NBQ@0FE ›"G*2Bmpub.&MW@P;Ni~rgƒ{‡…š„@qtle]²˜KXz¢˜ˆ–a*+"[G="+(@5I=Oh*9H} "$<7J~•[=YJIPI]ŠÃuW[nJ5Vo£¤bP^wn—wzvnFn|h{e˜|:wo]\p]eoqG;ecp…dz@<1:Jn[K%G3-Ui}bYH+-AWz–¨¿Å–§‚¡Ð—‹°«© ª¢ž¼°³œ©‹©£·ØªkZzu|¤¬”²®x€†nf^Qcp’x-_z‰vud=Z=}ˆxj[e[Nb‰n}•–fdƒra¬§¬gWPZscƒž·v]PbzT,}œHIc`Oj]|kN^b{„wC\kiTugkm˜…\FQa[~xaDQ†’X\…g`/4/yˆYcw‹[8a·§xp3>zkqˆ’‰…^Evai‚¦°_ULS^GaU¥…R@xSMbK|lVN[aIQfudGDE[dZcgenlrMN6E]:G7T>ZM_PR\e m ›€<`L …Ò°…ozŽz’T‚¹›ŠŒv\U`ŠŒoom_cAe•¥‚mGGeeufj@3S|Žw•£RK-9qriv€”xz*BhJT=R^N.%ZKkX]lPZotFTFLxgA"JnKdUVZ!¼†„Š~œ¹¨´€—f`XawršrŽ«–jRIS=VŽA}z`q€`gUCWZLvˆQp}N9YMY]BE}’~h^iU`J=HxbhheC=Kk]~G‰dC&@lsj<1&9=MdpgR1|œ‰pˆs|£w;«–€‹¡‚ƒkGo;CrqlnI‰zLe<Eo…m]‚]I;4Y€kx]v9b[ceTZS{ŽFIGO_\d8r®*35FUUVKœ‚:l\t`n†¦^ 8QE6RL#4•‰xt–T^z€¦c–m^gXpˆkeudOHOmQxqB.|’dqp•|Xq``j`{aN7KifvWMqL:>fks·u1e~‚{vg`I[]|Q1G<"7@)!4()75 ²¼{r†g[j†—m9bi_y€~khˆKMNZt«‰_.6Cƒi|T•Pbyjˆvbx_6F2@}—sŸ¸&!@Gl†¦›!&Gvld`Œ~?0#d{P>2&1UGLV)A##<“j‚]W^m|y|E]w…\Cš[2ZX}€Fb£x]A]n4 Xk(SCd^/:46=VQ59B!V][.19R0vC&"&"9‡’~C<N„–Wˆ¯5gf\lZT[‰{ gYrnf”|Gv7Rue‚‰wU:{­tiHVRK?tgXib]YN>$iA,'TaWJcE>.CQ@£DB8%Eož“P1 KbƲ—„›h£Œ—‘jƒ†jxwqT]{ybUiue–vdT~¨¥o@Y/7TY|v\W=[MuU-N? 23m˜‰†fpTM•­Ð¿ Ž´¬Ÿ¢³±ž­ª¢­°›¡®©sw’ʸª¬‡˜hto„–™z”‚nTJ<[Š\e‰Œ/MKpf|„rH+gjSoMa•lL@Lbpƒ^Mvnbdd_[z}PBPkoxboZQlOW-=hlX;?X]CŠqX[OEZYddÈ hgjNaVd‚~’ƒcpmnijJ•Ž~}t\-")3VŒjd“f^ReoI‰‚jpqjXrn–o{eYf{loƒŠrd]GJVr‰~U_Š~C[bcIbpY_r]·^b‚|}\_~Êr_m]\UO]nm†c/AI;aB0Bo†l[qT k²Š[l…‹r_?“pzy€rd…„€\ir~f6:KhciGTiikWRŒie{kGM™q\ysY`bGFž€y}fbdXP„~mo`_L\–zjW[;0H\so3D^}xaKMC9p“c‹³ˆˆŒ9Ѝ‡QimVlH|kun‚‰kJ*>ad`šoc“gIªeYZYDsŽ+í^€rR_eH+˜’ƒxZOfJ<ƒ‚j€}F@Y\qigŒ`wCF^€X‰E,Mn›a"EYxni{kNb{U[y„€nNfcq“iW›ˆNZe`´§n@NcMPMdš ‚C5QR@/`h‡xm^C9welŽmF]sR&?MWg_OfkmuQ—HWƒz†~n„`‚PNC=6za|~ŒdHR21tvcV^S<UOq(frZm_Y6Bq[Tn^beNWHQ‹crcPLDC=SnT?D<LA!@HJ07D<:L=2kXm‚m`G(&fqjN!K2CQ“r8/ zry{ •qXGK~‰lq„…rOEFSq€‚~…rbz:{[lŒƒws^KEŒb~Yo‚R!8``w}YEh|cBf@!.a‚SB=B:.K7&fT! 2\iW=#>%:ngJ@2 %FLm“pS\kVfdxiVOOH)d™‚^<RZ82J’l;[>0$7;F7&J.%J,b2z;3OZ0 ZQ%$%1rg)30+8BHT5;<7MW7XBlULmy;Ci6%d}CKj‡*‚vxVc‘~((1{_^mxF@OI.dB?B?BF=%$)N\2+'UPSK5+QC XL.?d)I‹|XE09N;F~šŽ…fS[©|~Œ¨_`wpx‡z[yngTn{l]@v¤•WX‡eMMFz‰c#hFE!9G.M3WI?GQA$84 S¶§ŒµŠ´Ã²œ¨ž›¿µ«ÃÍí‘¡À°’¨¼º”Šg‚“¶¯Ž¤‘‚„‰˜ˆ`†¡ˆ>8^—œ´™~u^Iy›£€jlVLvqLUdrnZžrJ_b]_j_£«EBDK\\Vh‚_0<naK`^‰JUG;`XGeV[M.MfxV<YzˆLCsmsxY‚}Rk‘ŸV[>@_Žw˜¸‡nJfOsogpeM4HN€…†\TS@s]–€p\KJIJ€[’[8ED:RSpopXkXDfryga]l\jn]jyt\ƒ…fcLTH3n’X]FA\O9~hGŽbPZRlB†xž§„£ƒQiE´}}„icNy{­gL653Xnw‰hK(1BYŒ[XdEbfo™t:Hbm]X[QZŒ5e]9hiLUAHfI'.AUX?Z\W366dˆ€\6=|WNQN73£‚•À²”wRH'urvƒhQdd=‘uB*Yˆe=r‰{}dGktaYthQOSUmƒ‹‡™;Vnf&He\v_mlNRICepSrO2I_QZ<m¡_AtgKymrwQ5(NQ_ZRcQ>q–šw†REq_~eQRfx^C`j|—vROO`WZy(_mCQT6Qf~UY7RYOe—"%MKL4%9p˜'YFC[_I3G~6;%HWOl~”w>LrP&asXiM !:"==—„‡“‡zˆ}|nN=P’ˆKawnPB_UpY%MfFHafpgO08‡“”p)OyI7LAnvfA"KS]_RVW. hD0?Aq“p8=Pd^OVal^4J]L6JM1NRda,E )6nm‘r^v—f“ofYNU_Yvš‹J‚RLekyiUyfIzfI€Šk[V22alw~nvP:68GhzŒ˜„†9G<xD:~‹|& $&N@RoTGYKxP'M?)UP^V+'%) }…ŸmGSjˆ«\„›ŠgAmšwIyŠ‘’YQnNM2ŠyM\3)"3|H,JR,%3#{€…r%?K5BFXG"5> DAqyO/,e‘½ÊºR9;^¢ŽªOˆn{ZN‡zo‘¤—gmqds_t§t+1Gyƒjg]MD67c!8W]W9#"[pVJ3:T&u=1B?)IyEa/O$ /UyˆzB<2B†ƒrn[RwƒxŠ‹‚`iWiƒ‰OSthO?O„“R‚³€aD?:r“¦`FI*<Xkb0/K@I”RP/6_47l‘L9'&ZfWŽ­Ç‡nzsom„­‚oRxž”_q‘utn>mjh†‹jegliX_‹_0CRiiqgmu]H!K1\€OCW24!*3FLJ0DZ28X]dT;U4"F_NKM28WDKPn]YP7[fhH5D;<bkReeka?BBSk_hzm†a+PlA]P7]K>2oo*K_tb^ganG'6:%1NUD5:ET/H>?L. &B6€_ZU:5;o;5`plF-opU#@C-+'<EdW;SE>oK3rgxHID,W][m^VcB+FW‚dFfRN2(OIPo"NYKkeF@2.E>*JKB@!L;;5?g]TT6S1FP7\`\n`c,#^u:AC5RiVAYfFFhlajcX#'LeN^zdC2\d5?7HzWczL+DSX]ƒRJa0'0JŠg1!]tQNbS;OBeVV5</Z_QT?(bi;0$QTYA]pXmfO‘uFMr{VN–ypxZ]\]H8wV£jpdA9ZIEPcdON_I8OdI>M#'npSTZ3@$+UNRbZ@6GSOG56\i6LqXXmy‚ua[‚b8iN3bo^lR-Z6>{h`_R;3_unEsa:R^ZXZ1‡pU^eN1.~4VoK=?=o¦1\e?kn@^™lfBArhbkK(^^&gYW8%.ni[WTTF/[ffi__RKEB574aM@[IEF<CivpsIHOqt]B+jE1q[M^ .M]^IZXmp(3RCL98a@T$CO@Ruo,2[tO=H45)dMVzF8. !]IIP`ƒ_YxŒ<HK`’“S%[tyiU@\zaXwu‰mbiGY~[G62Ufbb^UY.<)?_rlP„MP*k‘bb’¸<Nn€q‰‘ojPN†—}uj2*Koy{m&.@?UbUoa6Cš•r{j}|<8rSX’¢lEu»z0B‰]LAIk^/.c$/&"(JN;-+" -D:%?Z9+<;Hke‘k#>C2Ž˜ ’;:H*7‡‰|qLsu¬•kq‚v‰šM/YZ=9g’“aR<Jdg|Šx>/ƒƒ•™n6+>MVvM)75;@P>F,:-&G!57.-P&<as<%K20BCGS3*)2:;AN)Ei\7^|Q<8=KYmvolY4AT‚¥‘㛺|Nlª°zN}UjS=eT!1btkNK;<cEajSVD2IUCA`hA*8A-2QD@/ A,<XK5=P*.+TT>MYp^KB,B?=BK^slIWk€r…z`k~j\¯½›S=Y3b‚…_]zT3GD|²W\eEJZx‹L<r\H^f³ŸhNbjIGfi€e`f\T@Y^lJjfI429?fm‰LS_clgNJc‘lIC[J?ƒm(*n³—hjK>. 6Cg¹µŠ‚uG^Œ‚›š`@O|R¥´vhƒs7IiƒœTUjkF;]’xynSjU@b]D\~f;dnNqk^>`‡qLgX*>‘m_WWLLQ]lj‚dC9D30>E1f£—iryBt©«‘ °{@CA ¤˜¢™U"?J£±‡lmsq]I=•jfjZZ5;gt=NZTLCPPZeDZaNQ]a8<{6B9MlM2/H_IeRIQ<FRtjy[S%8`XVQ:[{ziBRV¶¡¥¢±™gdf)Ò¸§³„bylC:´¦{cK<D1<i…[=l\UD,W^K7HVmogn]idIfoU}s:\F_I>M:%ZX.YY1=I,I^qjNVEa@*w€KMN#,a6>N&— ‚p ¨oE3,´±“†`*3AF2¯ˆZ~L-IP\Cr‡MHWW9HkaEm[`gvt98MR]op>AoO)PzdPcF5EV@g3Q+EIZ9FdevjDLiITW-8PB-\^+˜}{° bP,M6œš‰ŽeDG6HBt|\@bX3MSC~F=pxMLHDSa L``P8VX9K/UjhWAGX6„?3A0EJ\vN"KQ8INV]0Q>'>0'$:1$®¥££wxyTAHª |SVH1JJQYƒP<ZQ2AXU:Anbky[2#bG2VYDI,3=0!TqG<c*L\.DXNNFG)9*=-&?xI 9>0+x]/J:39)B]vrN•¦H6htsqI<XRRC(t]E?KA""EMF('+0'5' 66 @5/B6$#@\mB/H(45xY%.&$%&;@5N;#1. SGRc?;:RZ>5>w~iUGJ_m>8rJHN02T9\kl=cE@)+L'9B: -7tF-$,!D:CAZG+#X;;(*! : *:.GW&LJMQ38d>!*9-H:8TG9NJ3irWlieO([™r>b2L0`{kBWgM& D"bAe_G35Y3<,5<D9~U&2-A]F 4~[HIJE1':$0MNaeIC&#Ao]R\62I7IK7MxD<AF.0os|zUXff5u€roXrZ]tZ—ƒ}‹€bP5<•‹–qweNE{†Ã¡Ldyku[`qœL<V`\K\LG[CG;SlM3XqVgXcjEC`po€Xhc0-U‚a<O…|bg€}B0:0_‚a™¾†ckxc ‚^}prs[UaŽbLKU`Jm‰t^?S\††bMŒ{k&OlUX@[noHFH[bT€€DKahpfYgVA‡e=^hj4(Xm¨1gG@OYiOa’‹|Ht’46žµ£{ƒflWM¥Úpˆz[HGTsŸmTeOT]a…“ngidPY`[§gD]f§b7r‘dnIAg\VaPX€•—VaKPT9b›“r@AWY=YŽI‚SufDZ_a;Z3‰¸‡IQqK9¼…v‘”‹nB7’”¡niQZ`Rsš¢yZOG?Q§˜qZSmeC2QaU]Z~uyhga7WO~wC^_N`eupm`;DYbXMOoW`JS‡ˆ\O†j0?fZJI*e³i;K3(‡O¦˜x@7R‚—ˆt|E9J:.ž‰]d\8UH8ArVAi[]xpub4RkU{Š_DV]\x8pgQG[hhWjid9/_db”8mPhiRk{HCjUF^t‹_*•‹,'O1.$F›ƒŽŸ”pVE8EhZjypCRf_=B[dTwbNkdDŒi\r{`<@QG9#j`bvhbX>L@=j‚hEOe"P8CCAUylX;$xpS ª_:+YLqX&?dš‹># >’ss_„ˆzSIoZizZZgbYFausNH21@B'Žx\[rYdkJ*l)7WgtRXK,pI'?`kSJOJ=& $>5BIPf: %WP+<QBByN%ˆ´bV@A(œ\`v8*¢qVQd€cTvpRQP\c=lhVo`JjaQ3(5m€9"Or7'BI>DG=%!!u_35;=b*:P1G.&#0>BE/-F8A@fk9BKkZ=@=Œ§kd¦‡h•|hpZnveNM†fZt`_ycIŠx|r‚]L>DBz\ba`R6096/Cac-Y>%gMiR59691%'.+og@82Q8-0"1?>=L<H@!1SWJF.%1HF=…ZfccS/‚ŒŒfad(0"e™n,2E< 3Q-0BO@".p@&&MfBB5.KXYL;3;UH@09v‹W!&-,L-O?7G@$<7*F5 LW!T1MG7d<?*,!Kj|yŽ`OI1'g‘T:B'`_Fp{Š\lyg„]¶Œ¥v]¥}M]l¼–€i{g[o\¯bKD2[e|Œ¬ˆrik‹SOrqQN_cŠsfK}qLˆzVWWŒ¬®6Œ“sž?=HziYr–vFmo‚‰vOZwg[Hˆsm…pYtQAb‡‡f_xsU)2M¨][gtZ>VPw‚JSQm}oSbZEAHmp@AJOgN.bVB[gºHSlK@VR‚q"9lŠ|i@C@3‚º°€Š|s|zo™±žjžiu|}b†ej`[~“hl–|{dW4WaIƒ£d;BM6EjclmZ\s5/LVg`gBª]^kMYO^mPTHI>T…eW”NPM>-FHJ’4,\~a`R9.Š¥—’g“q‹d€˜ˆf\KNUr‡|oqsJLb|{dKf¢šY^Hio]gYzsf|@84XUZgL~}o`UPUnlJs‹IOFB8_FTŠ›F[<:Bro]PU1-:qdOF'0°µtpyr|rnbšoo{pVLF[Qi–aI`ƒ…M`„paiZ‚ozv]M^`„˜}kjz3'ˆˆLo–„pLH5nJYW'E–oH3>gwaW‡_‡ƒ;Dw¢}L&D3Q/ #4: 4§ƒp†…zƒtpo}xˆƒshvxbGkQn†{ook‚_CimI=tŠ|r$ClW:o¥V4baFd|q‚‚nc|EgQEd€¶…Dmai…tX;+*ZjŠJT-' &E*.1!‰Àˆ{q]Kn’†€Y?_ˆ\Nizb{Y@6YyxcZWTp”da{¢ybLŽy†žu1WWPWX†˜­RX"";pv—µy?2dVztœˆaVB6e„bH`H- @4pH .9.À°y`¡‰Oro“‘e~V^v‡o<ƒkHlk¡·niO–`VZ ®q9?/PC<;[362gKev>,RRM=R;<W.O[2hb\;5NWgšžœA7P5M† «°š?OiO¡ejŠ”|`laRtrig][[—‡UxV–ŒdŒd56IV3W#GT=&2/6LS_tA,6<R87:7oVB]„gMT^4%At£©¤et}z‚¤‰‘†„¡j„yŒKhІu}‰{kt'K€`}Ž}‘nDUW]N18cUIQeh\^5.Hw^W1BF75Qxž¤o&4K‰–¼·¹ž¯Êǘ·¤ž•£¶Ð·¸Ä¨œ‡y• §£’ƒ½¸¥¯¤Ž¢cƒ³—_ƒš.:|˜hiXJe/‘•unjG{•†™a:_“nžÀ†‡DLu?z~Ž¡B.H`qpcŽYYSC8DXcR3XAV^<H=DD]!#aa{]W`~ŒtKY`goiv`B„ˆ\bPG) -‚¾Ž•|QhUC€”…gs—Ie«ºrNM^e}y ¥kCXjrlVXxvbHjW?SYZVF<;_]IB„|I/ALTK>6\Šm)-+WQN*+YMeNQTbIU8qHnŽqZkKX1ª¤­n=le8‘Xvb/<@DL‹¦eL…eZR/f“ƒCJ8/gZOg"25FKjYS[NEZ.5N{Xh;2yJ[1D[Z&63,JP>_VJ/.]QB'- ISpi" ª´µ¤…r|rku˜°›‡^fˆYviŒŒYiPgZNOYtpBVeDO6eƒN>(3bB~i\„@YMH'ah„]F\ZI[HY+@\kGOD"4)PVz‚ndOU_DfNC/T0+YS-¢–™¨ŽwWfy¡[vT8BMnjiІcVTWSsXqhRNoRa‰’ƒM=>WFU]SL8CeFU`bQCEE\[CTW0AWŽ,_M$^YmartDt€B)?xdP5!C  *)r€r­ˆdhDdˆ”Ÿ~‚BUUfzh\mhTK[lƒfcz`7eMpqdm\V'SkTnidd].OErC-RnX\[EA=GPm”I)N_=gk}ef:'FNNLi>#$*9 &(6& 'js…–§y\\©wxjqGDc^gRimgu?4k{ulsrA92<|iYfiiK8HQPjh\."-[[C…ngVN=U•oJSg27>dJNWFDms71=>0]F"4D&76LLdnd„}o”„€US^^SlXŒ›Pc\AXM?DV@4uuRF+;M<Eo1" )\78896;F,C:<+L@ D:^]WWQ6?*8CUd:(R'I?uq4##LB33]|{l]^;`®!zwYŠw…‚BPtw^N^;37~+0'D);S1"PmB-$T*OY.0"3QŠW4.;8–Ìfe5NGoœº«¿…eco{²«¡§¨‘˜~…a{‰•OKYMHp]U>.%MNNX_:A8&NB=A8du!4 7+iU7JQ›wf@V:6^«´ÎÄÁ¬™œ”˜Ë¼˜–²Ïº®—ˆ´Ê‰®Ê¾È³ÆÇ³—•”®¨–µx—¦¬¯ˆ¦š»°‡µ§##O=9J,<-A"<@%?iTC2QSC96E'XeXS4.?`uX&/;'F\O ;YRA$=QlO?cUQPTZS]fJ4TZF9QZabJO/^y;W7^™ajdI‹RoC0'`xhaRAF?=P^laKut[x€QB]N8JPxƒK(HSRda_bO7&-31:[Pf&8bIPH)@iA\^6(.CRVv(/lV-4$9¤Wm\ONHPMTCK[BQUUW15JVGdŸj1CS<6+Sa>.Sb6HXmV;9MO<;vnEs^Ig?6bK<ZU68C_Jigp^8SP<"]qc_K@PE?BKI8`G gz<[m[dViJ<l_b[0/s mFfR)=EXW_ZS9#<\sHA\pma\F:sQ8h]MkƒvnQOP[L,@e‹ŒcG_H:WU5;;TQ6ZY<EeAQDX]L[PMf}:PX9NUT`]WLglIGjj@O5.<msGGM1=0T~\J]M%7Ku`Ld\/(Ed„[C?#;`P<k<(`]66tG^>4PlŒ\4h8]]R^^fs]lX1-XbB2E^7Hl;AhGW‹N@E`IFŒž‹@-‹k':D)/$^{NXE%QaCED[lE-GN8-MFAf35jRB`VSMJ5OcIM[>78E/ZQmrIn’c*"ON_QE4[@50CnqBbQoq~Y(JSOcO.6F%™¹…9 ".+1GTdv{cQ„A4W4:]sK]~WHA ,HFFBD@3=V8>yfpN0FL0<†t7nmH)BrjfXL!%--Eh_n„7$C>4Itu[LYOtbTh5m&‹‹~T-2QE=J!)F@8BpZ+;TSF8bnYZjŒg4KZ+ie38SO(.<G 4H#67<IL;C' 79 '4+,<0#!0:H|JVZ+5BYcKTWPws~r_ZQP[fvoS_ž»O\vulmD eygp‚EGu]*mT1MmW2,8=LLNMVPNK>B@BLHF>3)14FbA!!.!,5# .8?<1?\\9>1C:MqhF9J?Hu]—lZƒš˜¡•PS~„{€^(LgDclg08\iKL;]WLTD7C.HJ,%3KCN81H)+IPJ-9QK>N7<>T*.,,54K6@P??CKAQ\TUvY.P@n™ŸŠa_iK.lœƒ_TYqYEQ‚ƒcMozM^x‰yjMDJBAp{˜‰JBYIb‰hanRAUdSEBD^pl;3J9CfŦ\I>>HM_o¡}DA9DdkG.Fx™stW63]Ÿ¸±jd1bp³ªyfQY=(¼‡a|agq?Ct¸x3R^QuW_Qƒk>9S^h/G[=1,;FEL;cq_V^Y9>Q<S[>jzN1b|I4UgFIFENcP[…}X8TJ %Ÿ±¿ÔΑstkoõ¸· jUjd4XѬ†P$\c34?g`YcfY=5ia_<BbwD4Hd‰^fkd[<:X=6crX`;(=J5A_xQ60Chvvy{…w@:;Tj‡g,LwtfX_S5EÀÃÂÈ™‚^.=¥µ –‹QSH ªd9HG=YIS{jMF4@z˜l@BM3-YQjE=XWU`m@^c7?eJ`yq0?K]qAuP"BG5i^Fa2@VXddL1.$3cV7©Á—š¤xqX/¿ÀЉbFsc%Kž©dXuSPGHKXG?G_jF8>ED\;?39yyIHEbJBC<=A?'FOUJ7E*.S=P4eGOp\2TeQG'-Oa@3!&372Æ¡˜‚pX/IN±ŽqVV\[[fS@MJFW[TYJ2OVgM73PiOJT4n[ZRFK=OSCQnm*2BR6$/&_7V@BdBwDCoZJAD'=cD" '8G>#B$u{•«»®n?\^k‹›Šp0.J?ShWHtZ#@TZd‰Y*LiBH- )?,5)MO8T>6;4 #DRO2<AAUJI]<8/*(E;8  ,=9#7/,@BG0,7A$+9¹©ª…s{NTk,ZMX@Da\B:9W}l<+17'7]vaTJ42:1AFW 9-37(N FB:A6#043,>JM#2,K5=/%'59J‚K-^v&ZR61ILˆddbmrIEh`,=W8;G]iSV3e`swA%F-s8!." =I<Hb"-B*9 I2XTn3 .7U? "D\uƒb(96ps.Y`tƒU@HOdkUn›ŒLa˜‡“™zAW~bLqwB+\•„>TA0@o8"0$7$/?VKZUV9;:,AWVM~¡pF[j\FBNIj¬oI‡dSPW@w|k„‚ˆrvxGc…qf” ®–¸’¤&Q;5s_<,!9$8:/;+8`#"#CfcM>)PTgo+9L!>ZVh]t!&M6.QQ?SOXHD]B"VQT^rP:Ob€Šb_[e7&UR?EkWq]/=PLp¦…-veUkwTP22MoaSN9C 4,.HXHJ_D,0U\O9Isb5NTfIDN:C]el1=5/G2V<dhN5;JO.5cclQbY7D_hxHRYG[OX}lSLHD#:ILjcU‘d‡cg$.(<>3aV4H >W^F?LGBHPeJ6)*AkKQjR5@-=€m7NZ>v‡J7bRLOLBLQ@4ZFQb?!(3E@MY;P=/V@6~mD8^f90-/kY$]o^@Ja. +8B7HUI..=RUQFTXQH>n._u=)OqL/JVHBTH2[M%VeD?kX\C8YZKN`K6fU5XRBM/+I_G+9_DD"PA:Wj\QqLBO",oL%SQz^BE4*GTTNTF2'FIuPQnS[Y4rO]d9/A:GUVrkI>.DcVC9GCB[K,%ch:`RPN>&)|>L-<dY,4GZ"H-IRBUgv8_?fZBˆ†_²; "-;2!*M9CvŒeOZWS/9s‹YA?FH<gcG)(DGDo[E[s8$OJTuDh\%6hSXrISWUHTBBdq..QNaX'WžJFR<NZQƒ„/BcR:@' N‰V,9  ?!1ZYjnYUk~1 [xh\Q|”Nlbxw3%2asKFPrcBLI>Po=;NN\hSAU*'ZhePr(4?jfe¬µ.69]‰Žƒ …_=Hˆ‘tn]2±c‰1&T2IZ/-6dnŽEJoth=*e—WkkgmN^zgiBŠ‹_KTh5"RC76@AG<JV)!_@MX@5 8?[Š_D @4#h|—¨O##Ztœ¦e{oi’}–b`oIP‘jaqDa‰›µ^npgŽ‚™ˆjA{rhU+Jj;MvMl8.BDKJ)Nkƒm<=[4'1II@\5)E>#LFaA01.aC 15EWV54=<CK'Cg49W*.]Tj~WGr‚F<„‚qw]`–ˆh@Vž©p[_PZ[5Nc~ZHPZ]>,kS%,WN.;)=;&%)9F2*!2 <>G#)6*Q7 4@?@!)6676:2GP,%RJXLNcJYRILMT–tE:QY%M@RnZLHZd>ayw,Afbtft]][C85UeBVMMBS:>WJQi}KT:={c)*Zq;qU8_\hRrHOFbiD0a‡tjS?[qtŒTe‹}‹‡T5Ip{iUj‹W)RoaQXFJhmvjm[mD:MZrWXXzwgO]h6"^`_F8XJ:„ŒS$SK5AT\FR*:`\C‹wAUKbX8I@XQy;ImE:4NWcjK‘lh{‹…AMXgQ(_O?UO{TC.XF.^aqyymgYFJPU~eO3UUYfUN[GFARfKR[cm[nXUX9.nlv~eC)I@JN\;KWB9EWR‚‡dM\U1#PmyH=•‘iOj`88rcU˜v[eO\sPx«s0BMLAPs‚‚JMC&6O]zrGT\8*Je\pkG[WC_FOtklT*9Ce_.>ZlXXX<>=)ZCM’‹h_lDih\T<`oIQ)&1FG9'9=Mr‚}d_F16QfmTqG/@JKK‰lQ2+2NT?b^gzM‡ŽMG.9>PILOijG{Y;[W:#R^E9(an*0U“b9]djqXo€RGyW<st""i\705#!PNsnAM{Q;UKG=3N][>3QKTfLSqNa;JnON=jPNTG;G<@e\C)9.ac<b? $GK:LLgHEVd_d<h@cQA8D2#q•…S  64TegŒxYT_w&?OsJZP6‚r?Y\53QK'\e=PK6PYL5iu@4QXjjU>g{=iUQf]jd! Ab‚}56PLTˆ‹yJ%W¨WL3U'osf„i"xM6*Um=WŽ‘fW=1>Pm6Vtƒ`hWVW<Cac/5`M>B 7B7<2(&ZVFAN<5ULh<K/@aEEYT"+?`]‡j8+>@6Qw›žfq‡}°’†x‡h“€wzo^•­cB€–Ÿluwd^6|TIeU*)8TxX:Nia%'9J6FE]V!#7!6!82DPL9&#$(126.#&("*I"!.7 9DEJC1.T)oehgƒ¤‹weY€ˆ ‹NSexU a€|hRB9$)CT65&L:949*+".)&%*&9:%^39>@27A(&<<7!#285W#4E?4D% @)U+:5.'QSm[psrK„£…PXJJYC¡µMK-URWKªµˆVNRrmUs¹º‚YD[Hˆy|tdŽ‘`LQt=r€W4axW‹…ƒƒze[3f£•…pLPVF=fz]Yt«‘z”e%(&/jvhVRxFng]ƒmPhQ^P9t{fIDkT:XŒ£uoG)zwI[XQT}JWOFLW#,JeCU?J{‡?F75NJjJKino\R@/TJ1bIl6",E?WVV:So‡Xr;Q2€­ ‘px‚O[ÀÙ€ŽWRgM¹™jf_5IAJm mUg<MnpT†`eNDXQ?Yv}ufvR9qJOTCZba9'PŒc=cUZJ@BEO4KxSW=OFZS0LQi‰cU_970·ÁŸ—˜‰cTXiж§b‚HYa]’‰Q‡]lsMG[[†dSLX[JDUi;\6GEP`0OnoM9gY8fEImaRoC[…kE*.$*8anmj‚I?7'.KW"P*20))(,©Ž…|naI`^½£“^Pvk`j…ŠOd_ZV8o[Nao_ekSUqZ=AVSTgop[R8OOh>F8;bZCFN8-U&3dŒJ[e78)J„F\fYQH[kQC<'"!J;0H%¯É”›–YWtSx–¹ …€RZOY3†ncwWZ>\jN|Kkz-NAO_aQ/jYGH?S}v#1,FS6d|<1>1`SLle>WbvXU-2T0;/2:)?:( *½¼Ÿ”gttz‹„¶™€}wXXtocnJP[fRR``fCd@;^OU^P^d>B3f_cj+2Kfxqv†F6CwiGWv$*94(D<4BVOKDF'K2%( )µ¢˜£ ˜v\‚Wjk€oMhˆlO*iuuB)XZA)_q;1/737:((*#j8-#/ #1@=6?*8Q;mGf*.GD=o„X]D:UcˆECNpq?A>mUoy^PXh|[(CiB6WmR/>)MF„o<U9cs%?!:C B11.(2?$E30U;*Dy\J75#3Sm»‡?$ 1[iMi·šn,Q”sƒœ›³¨“€t¤˜k{j]NZd\OO1d‚’zZI#'kS+ZS?8<<1S&++5FTFHH5^€jTO`GFG;{™ƒf†Ž‹d…Ѝ¦™Žžy“bK‚–« x‹{˜•Ÿ«¥ž›£“xŠ™ Â­™¥µ¬Á·kX<(=\cLW[;@?.7_<*B.I_XYP>BF46LTYd_FEgLqrF%8eW.W‘tmNH;H_I\zT@o[WLVQjKvxlLPP]}pHqa>^k‚Œ¬f5Q‰–œ†O$ )bQSeQ]ijO3at]aecencK1PaiHv\j\T4_{bZ-Ijcac50=J_Wapi^Ru‚mDi`iiKUKbYI‡tqF'A2Ig‚j:C>+NKWieqyO'7T8N}nY`GWcq7fMQ^M=JT^G^8p_zmm+SD~wVOrtPw\W^?kRH}sXPCjlhTUoiqtmP\gWnej]‡\W=n,_‚ƒt\`d\2LQcd?J=gi|`F _gykk„^eR?RBbse>V_>F†r`dqQQVD`ftleXIpVBTU^[[PEMNN„Š”}|Z{02gkfz†|dRxmJQL@qn4EF^›˜%E-cw{R7gj(izxwJ7i‚f]~rL1SSz|pZcb]/U\x”¨yPfkMaNzЦ‰jfS>UF>fy“oT^A;R(cƒwyqRISn-`jOpgSBQŠQ{}fnUknhkavn>9<zœDWF-*7XawjVhazˆabnZcƒ|bthNG^Sxmf<TyOKD`.Va}o]rbh`R‡MVtsŒmnTq_E]NngžcLhwagˆ‹…fX^{R{§uLM<_e_A8-11Xq]rK@ *,Bpˆ™^e‹lj ˜dxŠko|}xm†‘ŒRfudT^tsxzQerdYuXyOD\T?rŒGns};.Ibs{OJ+.5bf—}€lgWA5[gt}w†A?EY•z[?1&<Z@}0A0mIRvoL4kpLPct˜{б~1btuŒˆTG?·uhttQ32*0K:N/? 6KCHN`0<F„OE,K;H>hgm0:28AEWyl‘7',Qp‹r@{RvoŽyQblЉvgb`v‡Š]FgZzi]©—Vb¯xƒnI03sC<JuN%#m[G\=Yq0-JW>P$,04~k>ON1@CF ™…}F_F]‹ÍŠrŠŽqk©•“˜]n} £²¨yWpŽefˆ„€[‚lEtÃ’yIht?Yec‰nVV,^6FovSP;Z7$gk—ƒybqG@|¢ƒª€™‰hˆš€™ƒ›–}p‘ ‘|~„—–¡—“¸‡Y~Ë¥‹˜š•²±•˜±™¡»¼¡–½!Fl» £ZVd“LY`svh[qˆ_ŒbDKL{h,0‡uV?=>H734YFP8@?nT8K`O/8CphƒbPUe-OFYG^r9].Sg7mkBl­nS+EU^uuY;kvqYh.# k›¨‹°‘OO++guˆ’‰bKg'}€|q\RFsu[fc]e+QL_^9^5cVf_Clj8`+O3]j7`BUvMD.;]XCUX_5)REOE4b^j\_[QL;8=S6[|kSWpqSVh¤µ”‰|[jtnlXQf.SlfŽtwkD:EXM€bWj\48*J<„E3MF)WD,UN@A*:C.TWRL>"TmW'm{?OE?90SZ^x^S*1NoPN.IZdHlLtˆ‰†^XJFT`„>rNKKeSOg\:M6<;%?AWPTxBC=6j9F;IXh3YQWNqXdV=U|VhP-POEKgTNmSO$./m‚/1EEY‚’vcAL@ '(<<]86x€†›wlDAKFGVmJQ|NZ==9MH]LE`2iQ<S)*Ek`_J(IV*#C‰N@eVC%<>I‹O"V^ ?eƒ?&,DHcNMNM44B<KV\Y ,JC!2/|>Fm auSgzkgAjOFjp]@gTbB=?/)8UeCK>P3'SW3s?c_I5:RQX|mJB!6JUV<[8?KE7Vj83arPVJ;>&- YK#>+$>29[Eujh|kjy_c@XKNKU7EqJ9)@]N1kOOC)<Pi%:‡UVxY[Mb;P+#+@_I^;%"0DCC "1/Q]-?%<M).&:&2!,OFA[YbmHnVNA7Z?EArr4R‰fJ;LG% ˜S44@†l-!#03(IO5,!!*% $M((^Q6?)A0G}<7#'8IYv"3+1)+'/szkfr5Yod@€ggfUlx01reYSW>@8†NKa;,;'\KMSE);W).GT=.>:,<R{K,%('w¯º|_[NNOPŠœi|iaeކs‚mz–‡ˆ«—‡vQk]J‘yTC-+;v“a_6\N/TK^D$,-6^QN@#5:cå¨a“{?a—¡«Ô¿ÀÊ„„ÈÔËŽ‡—©¥¤–Æ¿]‰œÈ´¶£œŒ¨¥ŸÁ²®¬Ž‘”…}}‹lz­¬‰!3Umq€_E]bDUAi_=@%OE|wI8H`\]MquBNN3PjSJ~c7F/?B ;@62@^HR†X06ac3YdR‡k5E{xUIYqua]XWKFX|™…Ve0@oyY,!B5\qœV:QvLNOjj8!?o}f?Ks>NH2JxrGBQC7BVRvU-NdOF_x:P_L4/5"IlWL8EH19OzYTA"9/?Y@YwHLUXD2+h~ P­‹r†Œ|= *^xct{TcZU,x‰=@lObeKs\]JNeK:Imd>AXfb0+9h[7FX0@XIbˆqH<EQF&'3?NDSSUV[K _?[{Q/AMNeZuryA@d@A5DBVYbK%ranŒm`je0|¬jIYP,&0NGaQU_k^ITOoc1RfC;Yl\aiQcc~h:Ci-ZX2SjE2JXgV)(D7+_Z_b?!2>G[€gMM[q~aCgZ$*+2qƒXV\2CAU~zhtXG^".NMXkSOp\KkIZkF;6G)H=*4<3VI[22MV_N>ETcXH8ac)GqCJMC9*4HcrM6kjBZ|’anXQUn‰mnw7#$1!#]>8_‚”…rVR93LYOHDOPFEBK`QOMC;HrO4>T',M@ LV!6ETqdeVaN=VU`]M:GP10BdU3IUx†TCd<%M!w{A8+ @jMA0)5/A*#UVn€e‹“n=Ds]FX^lTe†w3;kLLd*Kd];GN8=aFzksl7&ThD3Dr'o€H,Q9(,,Qj`rœ807b…pohYP=O{UjEASqVjJ"&8D€7!RChª˜5c„i]Ln¦jWbu‡€UBoYCdaEOLMI(3BXT2BI::4-0B0%7(OVN/ JH(FOmOG!S”eBN$,n”˜¦qufsƒ‡a<[\@gcZO]t†šu+ZŽjAp’w!U]@z¥[4>QR$M4ES *@.^]dNQK'%[w!US1++2S'%6-!EL7F=37)(U4R@5BE=/4H2*88(D9 0ZQoimƒ|zP%Cг«sJ?LgM[†L(GL\jJ,'.LeE=WE473)=L;4[O9SRD-$1cM0Ac?7[.TZ"6FdS#,0 >RTdL1.!)@1LEFJPamM.CMW&L}f_N5jd\RbpO8;GO\n‹hef\FYbcW‰o^—‘Yn_csfE]x²–ElkKsL4=²„_WI=bjhekrxf_RMVt™=8`N8qˆ™¡{"J„‡¡Q*&rpk[N…‚y_Kj`€CYŸ^^€uykIXy|^?Wœ‚]Ikmd]qŽwŽKLP“dN”Jm|Y\BldQfY^j^skcj€qj_„|eqNg‡ƒBpQRIJ7Wh`4Z~sqpz,šaYrˆ›^z~y›Z… œZXcƒƒmn•hffk8 –Ž|O…_a‰of]}Um`_‘a‹l_|Um}vqwvncN>fTbcwJUjVZ;WleklOGHyvg,oT,sjn6>4oމUiIz}TJ‚£eT}j^GA}˜rxpƒkaªxekkigapTdlN|[`fiJPVgpmzc‰3qRiŒsP1†–?TWLgAT]¨³y_L>S‚bcb_&89;g/FGb—‡f_„ŒpA@¯”†\U‚m#/y¯¡vˆcOSmokcx‰`X›p}DmksoOSkXƒ!P„wQ_fs¡–'O_1IE@douNV<Dx^~©œQ@;LKo‚އjF1N?!'NJ$'—¢{Ž]k‹\Tc¡jiy{i<T`wvVj|gOCZKIWX…v]l^yKH$L[_ZSKƒiS)\KM}‚n‡yI3WduTl{nh]nV]t}^PI„t5">J-43SG'!6-°sb~s–¡™Œ‚cTt‰zŽ¢©ƒrŠ¡oV{ˆv/†kRyojkraYAv†U:@FBhz^˜¦‚#IBBe„¡Œv‡2>=Dsi~{…hBAVewZ`Hka.TNM*6 BjSffb…Md¢HS¡{m‹ˆu—wpfƒn£»žcIš“E`ZJ^]CK^e79;1WUaHA]E$<nffMHGTL04<7B<œND;KESŒˆ‹fD'6_‚ a~¢zy¯³}WSVj}f•~]VR‡¡z6_tƒ“rfIgjV’ƒLD1LknjkF"#?I((h,9F:Pk[@F*vpLF:fj‹’a\R<K…kªÊyŠ{’©œ¾Šxt¤¢´¨¦¦šµ­ž••ž‘µz§‹±¦pA¨¼žw‰rR))j™z‡\DCRuvG0Td5„‰s©¬–]f…›Æž‹°À˰ßÅÉÒáÁÌÀï²Õ¼ßÜŤÉÈǺÎ×¶¶·³ž£Á ¥—Æ®¯”Œš¢®°¾®~9'XnwhVO^9>G!MyaePiF++=FE>E3CJ,+>=U[(Me=7P<kobIY;5gJL1FKtZEZTQ^;S[TxnRP4E\y[gx|KEJC8I8ˆdwhizZ1$U``[Tzp\Z'*%9G=rŒZt,TPwO3Ijd,PekJRF-\G_E$glqcFY/C8i]nG81=kRdg[Td?BH¦XVQ\coG\cEvz[0i{mR6I‘…•IdpL@'4TvcZC5Y@L@%:CMBIXA@UWEA.VQ9REMWO_E4?HWA63CA<=YgxYHDXQQM=3;[tOV2=WEODbV)MSbTVYYwfg``_CP;4cnVNK3! S-GQQSoi:MSoaE,<TNYR:KdE<=J;K6VPUi`3.CIR‡tTMgO9RttrRDD7:9-+-oRXB)>9\MCfV`YT. <owR[shYT?-8L2!SGqG!/A`hn`byS<_4„r<X>9P.O#>e]9=Y;<KLQ<S3>?0]CifYI9@6>RMX„b;8@(Xna"MY&.&U}PSIQ†{_=PeJosJ>ba|U%q:29-D5Lu\‡—Šˆ<OVPS<tk68XaFF>2_^66KO\Œ`SNWD=DTfin…cM$"csmKQ8pUU9I]3AHI=SWKRMBBsxkjwwGM.$PcO5!"!Sƒs=; 6*&e9Kp}fCu[f€?6SRV[W\Nebsƒ\K`VO){‚d™iMW?M?yeXi[W:4^@;2*RaM.,fW.@NR0/,?C>;A0%:GS8>6G^6,8I–u\ +4 3]GAg`Q6PBeaqNoI>W",Mg‘F=87&e?–•DI"JHHT):X;85+B-*4=0</2"SIGC4@@^I`\X@):<XVMnGO]K:IQOD§nGU\qx0Ai­NmSWg]e—‡VŠmdLˆs€=8tvqfibI>3DOn!7I;*?,DccAO1*M5DWQIZJN‹^yc20-sŠ”‹]‹Vu|o¡¤–Ž…’™‰Îºv‰šœ‚  ©»®L‰œ`ku„‘‹o{(7LgrcO0A%@KK%%*_G&14";5P[oppg\8Dry…pt…jv‚º®„®€ˆt‰Ãʝª™•γ­²§œ±—~vŸÕÀ˜’y‰{…œŒ‹«š”š/:Ngl_flSK,\mXDBW[n._zG7CC`oWj†w7_S?F[O­pR3UbDiSTgK]L1N;Kzlf^`IS?QkeŠ’k^o\Sg}}eF;H34jMxz,kR"6yQp`0BHn…oj‰dDMRAÈ~IASLUniYÄwtVVfI'J„†mLWNEZbZTAaN5RK@ei~tF.K^94+MbzZn]H<SpDMDom%@"1<0xfVyron,eq|„bf>%3‘€‘nZBKD&©‚gljT8@a]Á‡F6LUYL[m¨xL9RNDB3`x`:L^LDJ5>HrzhXO@Z\t‚Y€uU>,bx´kIyg$5ViZ-+f–—<9ˆz@¡“’’uŽuMA3}{”rPNI=.#‘›daO)@KWJ”gWz\hŠldfu_\ni}[TK*qzI0=I;^fdOX<#RUDLCT0-jFP61hŠcVKLTVDR‡,&(.:=CM40`‹´¬€™‚DXN1šŒ³„]i9XL8¨…nNC:OqVH––Pb*6DEiwcz_fy_rrmnDn]XrT\NCEB;?/RpC1b‚<aEBUipiwxn…66Dz…W?L'+ 4/@@jr©¡u_<NYHkhtKQKBVXNJRMTQbD9^VH[LGL\mFT::n`>9OnV;.=LH(-q\9NF<jW.@Q=3"9[;4w^%C.!)*#[6("$"kŒ}€‹¤ŽTHOv„S\?5avJ)QLw`@<kgCGV<@pG\‰H$&m2-WYR;m] A:+39PS/ = (T>ICT88BN;DVD#5..,HH4 <:/. (¤†F0QaRw]cYIPP2Wo6by‡hDP?&)_…bV/ RD 005=^S 5HH WCO""s9*\6, RE,5PF':;1f~ƒr^k`gJ[^abSC]^R#j†qXRvB** }f“W.H'B):nM >#62%%)/TA3@-71 <3r4#0*3_H# A?!( 89KM!<VI._K:nC*TB6CwƒcCL}YDCi{†M-1B:0rW%@m-;7:05KaS&7/@ ( )*60* 7>31A3)(,<*4T2=31)-HE+((5I7*?/53<tW=IY9/;%+]RARDT#<-3UaPF<U:?:>/@38+C;GCM>DU;-2)185,OH=X)JN83LK7bE:j^ nf^J_mIK5,f^[Uoop8'c^p˜Z2]\…ow9+,)/HPKI0J92&HcoJ%8PIFX>QY1RY=[ˆBPlscbS__EV81SU@9MJ(E\MB2S|pY8D:;ƒ’_IO;8E`‰/Y^QZVBN{wR§ƒ^‡¦},).;7"5MV9*dfTFY`T4-0WQ;VZLiT/nF5FhscGQVjgu[EVQAScI9GR>Tl;AzK2_Y2@$-j\vvZXvf,AyW1Z^4dMdnOKƒ€\\[\Q"]A6RPE'2YKI?CD::e|}`7:SXFVt]XytMsjJ^p‘[SwaCH\J]€oDUX2LB:HWPTm]Re@Emr(a‚&,y–˜OUl@jvR<-(MT3IgI<9BAT{n855XRbˆX&LANjnjWCE;7Wpy]\M8F=Y^jJiO)\[ T\Kq`IO[9WAeE4I(%7:^/W?MhaWoc?G]OM_jv~^$vt 6lFfT=?Tr‰e92HMN^_SHF.C2qvL9TQ!7]€[JI@/1B]ƒBhf.,)#CO`s•‰K,-,85KN6GIIG\BGG[_ULMK(]PESJ/%Fu¢_ %!<GXh_hmXƒ+GHt\[vlO`kU_SOE_Dkol“R-Bq”Ww`agbbHULT;M)WtkOI˜U"4<rj{8S<KYoqH#+/lyx\H+‡•y†yB +40<>e{G1¹[‹iho^BYk/y¥ƒ`ovA ?Ž’†…{D2grSZW0 @`IOKh_8@<K<UQbH%'<S8`1 ,o``j33.WŽ•o::[Іq†‚RHJLRNgadxfsW#Rlwx™»Š*8xvhkL#0 (G?:6B I / P1S&I`Ga:@O-4FZ)\DjP##/6Qg>-=JjYUY:^L5hrb`]eRC?3Vš´†h†žv0`wˆ˜y]DQaKsšcg?9x& &KLFQ?JD(3@MUHVOOU-.LbO =QS?#'\M'OV-7YeAABVVPNRZW5J71]‚YPX<edˆnDT{|[b'ML7_r‚nwr@U~hP›§]vn=S¥ªvttM\jve‡wKBOIX]„–`;IXaYP£v‡~v\ƒp–ˆNIbehSwŠŽ\U•[J€‚“wrwgigm”¥™@@m€sŒygIC)GH/Mqrj[7Pid[_…^?X;jgƒui]ZGYSPmfwwS@Pe_yŠiOPŒekThM8}uMQvhYnR>t–gE`‚dQtxNY„y…FTAKh/:XPx‹oog4/ own{b<Klp^mskql~„vSWxw\[k~dIGVŒpzvZB*?X€Yu–“vPbD-“abpm}y‘\ –ocVYihMBNhP.^p8odO]PvlYD1\tQ9cy^,%!''‚ranQ^yoBVps‘~Zhze]Xgˆ‘v_^q~‡rcgk]]klxiaf^[NZXRbKM]šb[q@>cdWƒ€fjhG]a@G€sQSCEWKUk>OEZoPIUFO485bmIGD/,ˆ†”XRksMc}‰‡mkoaJ]]}n|…mqˆyz†…•‹xpS]ŒF^rSVsdAmfUri6ftu|U=OLkvSEJcbw-el_k_p£ŠtFZ´žTS+€r4CLLWgN—Š^ŒŸ‡ja Œ´Ÿr€RrSv› Šz–nJ”rbojOxm”_y‰t7>£„h‡l}VN^‰–‡neR9Mu~h]x\yrAH‚Što‚—b5)WicAKB'"2iv_Eº«rEp{pQOo‘”«‡_¢‰p:u\pzQGw[IŽ„f`Sjn}Il§²€JomVFPbŠ^olgeT)MGjŽ­~QjYV%AxšŽrwI96LˆŒmlyY,Xm‘–S4Hysd{•Xawc–¶—ognšwcm~‚…‹†­{8]bumi“z/10pW=9[\QRCJ(;E.$AX[gF44A:3>/R‚'3BwŠw†m::Uqˆ€„—Vh~‚Yqwv©‚s^eobˆ‡‡`n¡kbej’A+DY…yr],IOcz€nX;+,;>U1=ƒX':D2MY@JqDQDJEeADUC7hšµŽˆ|s[n‡Ÿ©¾‡“µ¶¥§Ê¼™‰ŒŽ‹{mV{œzqžŠl\o–iC1t…ˆov€97R!9a…MC* \US4E7IFQ¦¡ tW~e¢Åϱ¬Œ¶‹£ë¾¬¾ÀĹ‚–¿Ÿ„š¯šªÄ¾¦‹‡x}‡~•‡lŽxc”‹Kw”cA*"(RMWB;5!PZcUQ2S9J!^qGQ;DF9NP<JPH.n›gB:IdeMwjIokFWLgrLND]ToXci|šo~caDF.;qªPfu[sglvi*]Y„–ˆŒE2 ;<%-.STG`&>k0:dEG[72_mcAI\M*>\abafukI]_IKzY6T67xŽz_]{w]:;dlph\]}v_Ln‡7lŠZB[O]¥‰gr;A{gm daaSoˆpG KM8AJM?<$@oQZk<@WIBmLY†h0;Q#;]j'WqCEendu‡uJKxtp_ms}sUlƒfTGfjpS>jD6VjGD@9AJ?3h|‚8LcbVc^oW:UobzyfD[T"?mWeF?X<op5zt)KVHZ‚}`3>aoG.¢\`NOVUGp‚ˆ…vkobUG[“ÄL?ISqK>XVgfZYAJIDv.%?Zi7et{¥sa+O„Ut—z|O@=2dqs•~wd€rXjz[Yu[_M@On~sCbQ‰Ti‹qF1>H[ƒd}Ži'.XNAYonvqcWddblnmiZP^m~LeJbFJl’’?n^zZDCPhXlG=t–{g`bL#&USK3.^7<INHS_JIB+bU^L^O'(dŸ}qF1>GFYvbYR*J‚nh?8<N]TKqaYB M]]l[Vƒ},(PoTL€€R-\t\`K_j)2VE:`94Q@2I.&'/?:EMFKaqw~vƒNRM]pprpBgKHrgZiZcc]e^]iv_P^dXe<UZV`J]te<&=6M‰Ÿ˜lQ(6Skzut„-99E^kLU„„\Gk}^P]#7VwU<R*#alMJdQ4Z©•ˆ`IMaŒiŽWcDcsFn|@sm5,Va}`;#1$-C8 oI?'#92>5C: .EH@5=I@GODm¯škm@!vxp|ydw…¨š–_fLn{frˆŒ^MlŠp2lvyx‰‘eKHˆ­¢ˆ\Vp\QR‰Xc<4Gjn 'YDFUH4_aRUZR,N`?@ITZ(*&/]LrR2c<+IxrZXuw†z[Zjv}|‹¤Š©°šjƒzZm¯€fž‹§¨`jo«šxU]|NTdLsF3@Yu=[''?cVXTQ@o[%9bWA]qqh^R=Z\]R^yHVeJ`hsDP‚`dn\J„p¤žq†‚z’—ˆ™°–Ÿv‹IOkeppvv\Jb\a]XbBey^7EYglsmq}1@‡ytgwp`lG@[hd^^QohN]q^sJIx”“bX]D`Tf~¬„eo€_c‘‡£yr¨§XNZ€¥s(hƒ‘Šmj6 8[beluhcun88hfXerunjJ2Vs`iRa_SWscMsAPB^{yl}hli^z‹~‰’d?rxgc”’|ahe^U’‡xlSQpai]Y›’g#Fj[[A8iŽqCO}6:Na€UXJP‚l}TfmqvaZgSe§•vkZ{Ž^Y‡˜u’†nlcfo¯^n‘txKGvy›fQfqeH`o_¨†wi`^PZcV‚gpiupyo‚@\gei^\AH_&VlYG[S81Iˆu_vŠdbjSk]`wnIlZ`PYr`\A9jI¬¥Unw€o=-6ŠqNjWNfdW:ˆQ]h4C4RXCˆjS7F{pFBrCBXUHSE]«ŸcYO}ˆxejn89&_‰vGF3ƒsX]YZLb_3aVnnDXtgU'ƒ„ZTt[9sou{xpfkmb`_{|pSr}[0`mrnVT-$ACmbY_NO=@t[dFe/65M~Ž][b`@X~t}xJkh ;b91QŽ^Dilœk1_t„n:tybgM2J\njt‡gPWcMŒeS_v{YIF`l}¡SV|H:EQ21jLBfDN6*un7FjVCo‘bWg]o’tjzB?_hH=?jy‰‚@() [exgƒ_N`]]bZpvy‡kSX.{kyy”sT“n†X†rcVR}o€‡˜‹miq\HAPv‰›rv‚MIf;Sz~Ÿd:NcYJ/k€y=S;EQx®‹ND^2mqŒ“YL#†‹oKy|~„s\l]Tccktc4/xOX‚B1(¡›g[hXwbcm!2:/)(@D56!e)C"QJ$7 (/J]<. ;B@wƒD<8*?TYUG€liƒ{‘ZUCT˜[dNPoa‡€X=|dZfq˜0[DxZ“}SHK@j94<C~eWG3CJGQLDsf7A1 aTJF3QE%Bq§w…ŠmiZ{€©ž¹¥zš~•¿Ÿhž—³¨Žž¦”‘gRn^v¤tkN!š¨•`[‡FFh9lŠŽ\LONoTVUYDPRWSG‘t‹ˆi_[`t«ž¨Ò½š´´±¥¯œ§·¸ãʼ¾¡•ˆ¯§À꽨†‹t„ª¶°“™ph€¾¹™Ÿ‘%$U€…“~P3I+mœ¡…eV@E>N— mSF1A;†zq^ERF,^M˜qf=ZH?@L\‡e\gHB;U{QK^TObpNss„\hlS.b”szˆwmgK@[’„Q e…c}•–Y 7Mg„ŽbL_ph*gsxU5?JF~•Šh@RH6W¦ƒlF93D;3}lumPGLo>MmtpK_^EpynkgBl?_IEA9dYJaTS:JNmrYr^ZB6*;[Co‹ƒlU{n&v}˜ˆj†’?7Yƒ‡i…{:9E=‚– `=9eq:KªytWL6YYCgZ8YmTM$6YokNDMgCIjiEMX3=;T@5mcP^#:I6Tkae'Ksv_O4F€aWFK‚6±ˆqg`ˆHKrQ›‹dgNW(125‹¥rKGN]WKstpfXilQ``vb‡|P@c[DG\¦‘Qe0HePMWy\H2CN6V54R[AV8IgdKHW5TOQuFHUiL1,št™Œa`v\6=©‘r‰f@%Gj;}…UX=TejWFnucK5AZl;"fMk_BdJTJI;\Pg[}‰]P=Xi5‰‚7G23o?FMOs]jt\Jk9:AUŸŸqN(|W,7; g`m‘l‰xWL8PtlneRJX@(<_ohV‰SHViFlj@1DuU5:HwWk$!WTI03vF/OMNB63/ *GVJV;/0AK[XAS9dW#$WMO= ".pzbh‰pa_Nƒo_j3VhqOI^I E;173.dkC<=;X3-'XKD24RnFA<.'48?3XvS81*uhJcW@P,8:KLK(E@)%@cEpW_C "O3Ë®rhO`X`I]’mY5KgVNY>hX}v94K33R‘bC+&OI/-‚76:/CA G[7Q <A!C cF?*!=39??%(4!H@D'G*8KP?[,V9CwfG5nd2zfj‰pGQI€Kd6RY2La5>gqtVJ%IŽJ8*!1&/!-"5 (I!3$1_b`0 ! 6;5/* <)< 9C%0X1AE/'B9BkK.0=EmfaspŽU#$]ŠX0p=PE 3byQG+NG<()!!':F DAM(2,G<E677,2-HE4&13K9)(82R->7 7,"P+&C4*='3:[A/4(,&D|w‹‡XYK3Fb}p^wWHT=Z‰˜qTzƒ9N[…}oSBKhigxŽ?'\Y3MK*W[TZ@Q^CFDT^>[nXTRZlI=IIqg9Z]oKFNEZgfV_gA{ˆir‹vJ0)nu‚¦¦†44_itbv¤·Y+S]xvs€\U@KfO{i<FY2@[u™m8NR[6DNPuSo]]BSo>Urb~dtS@G:`†DahT>>Wj“Vr@GEG<5Z_!i’gT‹”pK'n„v€•­l,=nw£}LZlfVKX…•žu5W^SZfˆ\eM*gbYryG3O`QHUu†~UGSkdf;4__`BG8b{@:psR]IhfK[imx^7HN$E]@4lƒdRYu^,‰pl€—¥]=[€zjs]\eu}extXFV‡R#[Wm_tpL^Ž…UIZm-gy’ejX8F=SU8$^|p*BXTEL2e8=BZF?^?k†INTOI[U`dJ„N-<kZMmCMV~{yŠvgEeo{_AilhS[h`aRi$Yi\b*qezdDTJ^u9$LILL"NlT-TyC>MlQ;t[P3Y^Q@n BV:CQO?fi9rgD%Nl—ˆ®n++IH)IfyuŽvatkcoLPƒkN)Vt;V&+452"M^CGUI")lNTn`>raO{^XcS)SrYZJE^mK>QJ=KF9;PWK_Q^XJ:J)"<B@6(HTa‡n+0‚†_5+GOct_jimS8>V[XjoNNGNG6H:/n57QJ7bk owwO=aGq<hZV!:JKTPGT49/2?h€RW/FK?mxox]JN?h“tQc>ªžœ|_C!-?"‚`VXhq[l˜‰`Gw~YauˆY"zk‹eUK@—–j[V". Tb'N;'3,wQ8%,.#00ZJI0<[BWy|$Q,SrvƒTN=?/zz¤Vd™º¦‘‹hv`Šu{}YMyŠf9˜6C^‹…+#8nVTt3/EG2h0rK 3k2]m=38EO':o\=L??.6\F"4;5 1]!:1f.?O.*@d%' H-;ZX*@Vs†}•œnsIAy®‡kV9=:Wa||I&lnPF$NVRopYqO-QH0Mls>'A,;UO)RL!-;@HL9&<CD0.0'B8!*CB&%=S;4-I]C .241*)Q‹´­ŽtoI2W†‰bcUviI`ghs^Yaigde_t`^?rhJSLM7;PahJ72`R]N/&U\KN3RZM;8kUabp?,QGIW’‰gcMN@KUWfmB_TPT6M*7\qŒˆ‡qhepR‰g–akP`ftª€diLU*nzNjsRMLCOUT5^cGTQ:dVL?IeWV:H_`\V<8\m\IQb^=F_`K<>^˜'O8D)M|oNU5k˜‡$QW?HTas˜x~|[zŒou\VO=kebU^C`qO4E\ri:RzM2?\il^G<*PQ3K;`QS<48TP#5]_JA;7iD%SrrM-9KE4Sf]`rN\iE2(6sxoZ@94hK†Œ…v|BRjrŠ{\U1=]xkIdbH7LXWncjUNhd…b3g\5sT2Sg[KMb1=05B9iE5_|(#.=>=&AajW=NMG%@f‹m<4BR&4=?<-qKLJ'-IM^v‘…‚tpeZRrY4 $:Opg@„„D\WGb`k +5_laYc‘Š:" 0E,7h.bf.2=-B=YSk_F[@AOduBQM_RM]u•g=VHSeolbBdL !D]F "H<:c„q‚jKZwsT]NCenqj.1S:.7?ERŒvFHO#9>%D\8O>>8wbg9WL6%=vtc_`IBQC?2[xQ<>€‡lXofP>#gu[+@L0 ZC*'$DwqS’„Œ\c[ah6KVNMBJ`pi;D[Q9>x”u;S6GkYh\‰sNEHEQ—‡6 OWGct‘’fD"?@rpRXE\V6*(:CN0=<C3=WMMI05$6+/595":qUl]gLS|]YjmaVtkˆh/z‡f6O]„S)tVA`T.HVX0.X7D*D -F,=/ "5%DD -BFJD#%+KSK[F$4DUSTEWH*"\xdmd`lOO“‰s‘j<XtYgD>9gpJ[~T :,qs4DO.; R_35+?132%+/#}"+ 5K\“44-AS*~…ŠcHO^w}y•~I†K>qmhLm_PRd^XkP„OQv„•X( *='&kQ)Z_W64 L=HD)MOwQ@0?XOFz™¤ftzr…wovy¦ˆ~¦•˜g=‹y\•­œgkwqˆkl–]7Š«{ƒepqr\sql(Ljsœ²~`R7V}cct[nVˆmX\[ICdkdpjZEGfhVLXq_%4;?:LoyTQV,&M::dKgfWO<b44Zu?v“I+Z^Up¨qDyŒYFhu\7‚…c`a\>,Ps–¢šƒN0mLnntˆ‰W;h€l†hRMS@>3rsrRXc=Ff[V46=JkcQfI33?>`yWCLpvc7.PJCb]Œ45rkWmoPj>P[T>9JJkq4lx‚\S[-_iS²‘T?gXUEk‰`27=@MntoL6BNecMOA<Sj<HhM>)>`-2NP†B9_LGW0:GFI46?NM1[CGR&ZZ8N1;V?.&%EjWoe6 / ƒ‘„ž¢„€Z57i„{YIL[Yu‹€N ESU@_yN>`LJpdOaKLLKIŽzerD<7bˆX09goFGXhLR[5]7;b[HG]NfRUb||WCWWLN7$%UUI/e;Szv ][/JESAGFjh€„$+XK<Gi1hxY36CNO`5K[IK71Jb‰MHc`\g4,mƒ:7\RLG?.Z}/YbBE[[M{ƒg}S5:^rSŠ\ =J($#p^p€y‰Žjjh81c€b^k]Da@f@2QW^{W;BpX&F]Q_x3Tz\T]j[Bl<IpS,2?)J 3@4(K›x?.Vaw†sWb[9j~MZG0(/8<„_65;0WrkNI}‚q‡ˆbP--[…fq…pRU4"1JJYn¢ƒYJH5Jhl]Z]t]Ym^WT.4J\Riv]qU"Mj\ryH>6SmeJMˆ¬C P€ƒd=P_OSN~|>D VXd5K{dY—ŸdOLH[luynr‡^foa^tƒZ€yOGO;(3<DW'8Sf_G?+L(PLGBMNQ58@/^+6HQhAH.RS2†—€R(5CWGw\x\ƒˆŸny}Pkqf\kkv“šŸ’|iIVp†£„UJy¬—kŒ6%?Iqv2%5Gpe. *?TmcE=0C@L'=?9,R_,&!..eGCCE:L;cYBW+8TZm\Xd??EiAQ‡\SB<†RU`}vW&axg{8$'#QdZKA9S4)7:==4.F5720)>H=pDS@0Z52JROK7(TB3E=:=<<7(!G[aC17L;H9?orS"HX\`C*.."$IdpW=RG$*^gdhP>865?qlpd;P]„~‹YPYZke¢gLtzV:/4F…qXngQPB•€rlxkFa‰h–vHTndFUxi{|S>ZNi{C0‚ŠU~P'"(BcL?JS602Ie‚t^d_R8KcFjgFZmPT‚q=O†f07?'=JŸuJdQ0Baf‡[:TKFŒ{dFB^^R=a…ŒJ+Vb^b[u¦*‚i&-PG1X{lŽPDSTL6+rtKkw;JpQ3diTPkUV@&!ŸQP‚jGFIKZÄycrZ3MQK^pVrTWfL8_o\]ysMQY?7LMOv]I23SUpJdmC.9CS\f6;GX:5MzŠUD3_€o[R\@+~mTdmR9=?%ŠŠjNKQI0I´¢sik=2NL@ÈLQ_f`Q<0—wOQILk]55‚Ž^IOSEG/d^y‡ZTGDkQV_PIB,2CV`‡c_;3`iCGO931"(6UFCNa~x{p\Y7›‰ktcCIPE>ˆF:chVeuhzŽY=CUOL_€H^mbpydNe‚`:.olFVU^_D1JVhE)D­gI:Qem`X|‡@‹KRt›JF6&-OU( j@t”vP61RXO|•eF,$J7)4YfAK[K6,9`biqYF9)7EZ8@X^XWE>C-7MIclw€^7 ZfBFkƒV)=O@CTFQV*EX0@I*=Wa9;62"8=Œ~o{n‹¢nO€xzŽ|NNcYGD[oWThK@M^’E$|ƒ=Pf_JiH8giMDJ(MG%FbeV"%Fs< Aqm4>i: 7G7Oez#+S_MN@B[RxM1; %5brznvbW„Š:TŽQ+_NLr6Gc_C9LM 1cI6 76,!9),IC2()4?6$*?; 3"=JM'0)Pƒs0:4'!(QlkW,>UuyPq}54pOcwpm‚†K9H{uUf^-AOj^OeQ1F_06A3VK% #ghhp,, .I_*9?/ TY2/*)(F2.^: %B)99P^H;8$jchx`mk3`bpmQƒ™oZD.az†W?9MS72@F4+?)&G-2^,@1BK7+((()=<0J*$A,LN1'K<MV1FVK*-"%%!4A_NA,&U_.5NQn…ZFeT,9<WdB[~\Xw-^^`…`OFVadx{[[V6KvpV…h6=M9Pl‚•v@JqgXPHƒn9F]F]y[aelZZ=@q@„kQWXQr€Ob¦wiQVjDPŒ‘DZƒ{Ud†E7%_XGµ‘w€[^c\sncFH„œ[fŒgQ\STo¨wksysuoujn…†ltqBHfu‡xr>uŒ_\n|KjqMG`knzŽix‡]:Ulv…3‚XIVj{h1)Œªt|zS{¥Š˜ž‘i54¨®¯œ’y|VP~|´­rhZEK‚tlYi`bWQN›‘cui]uqUS”ZGxhjz]J\€dCG\s‡R?g£|FOOThj>GgAJX]‚n</…•`kpB,¢•tX]~s_|h¥§¬œƒts}hGŠ¢‰‚fjxwcZs}™ˆ[„™€eSo¥ƒN[€vJV‹zšƒB;J?[Œ‹™–gZBOdS~bE‰y/S‘g[inYm‚se2P0EyƒeUO0>wx}r‡“l/;’r‹‰mcL86{cv™`(_ŒLV˜reRr“vj\svMk€riedK;dt^€„XZuunXJPAQŽƒ@IF-Cbd޲[N‹iIZx• b —šCFghO:‰ŽlxE^rggˆ…mgV{o9{`TQ``|{QI‡7SŒxW_QE\„Nu€Tf|pzXIVrmde^YWG€oAUT6XnOY^Ogm„™PBJxuTN9*6(”±‡0 2=#¡„yt\\‚l„šu|vGW~\78lŠVYaoyatW2\‚w‰œR)XAn{dWpu9UccRZrjb{b-5'Fqth[>)I@X[d^G. Ff›¡rb^zM‚s–¡mK=LP@ƒ—cI“˜]mˆY^Wtpn‰…`&MMŠ{IWtW 4VWKH;LQ'3E&8eQ 3-@Misf3:<?wZ=X/$11$afM+!ZSJN@>JhŸ~XI\‘ˆbš¬^Aps`‡jYbdGZ–Šof`mf€…a7FNtuZR^D#%.f44U>K:D1:YB8>D+ '(nWPP *7hVTR03B8]\tZUK-+h]]fZZ[NvwwgP[Wk}k\Zb<%i’ke[dyVv¦‘skh2<46bŠ|&Oi2FA(/V[;E&^k{(&G#Q{™À½—dm›Y‹§hSwty–VOibrcela[id_qg^UGzf€{XUUINH3i’|I1]9\„}vv\XI)]˜~Qw…WIK9~V]tinf>;kzkCRvqfPF@GgamdEF[qWt\IMgm[Ip~žqdZ`kFH~f’NF~ebW* ‘=YD3[Ž–¨”iQPo•gq‘hf‡aD„j‹—PEj[[KzaVRXdlU_tvŠa3i€aI[`ˆlFVfETbb6,oH1HQq€`xN7WPGeq fbb>?W;:„”cfv\T*#ŒŸ¢¶¶~GO‹„®wwmXO{¡cZ‚wSQNElYpJUP[W{I9VlyrQS{YŠ…qup]<7e„…yŒ|_UPC?VGy}d~FPjzslrIUncO"B9™™bKKW/š±ySukYlaw«”dwo=CS“„xQt’_'TžoRh„u]fj]w]Hv~I3:Ziloge:;ZQ#…r>9D>+,7^r=SmSMF5Z7\ci‡sQU9 >).`t^F(~—Ÿ’Ž˜eQQ/o‡©u[abc:+‡…dpTAy}TNQ\pzf‚~WYd\]gTgm^FKZ>T5{*6F3Ne;Djf&&WM=ESR?Ql\VŒdK}U->_ci_G-<@:¢œ}[\I< vgdjXU`N9D[QsZ@Qi_XNzMkyUMf^FOvBcS5^o<96JbdG=@<RQ&J\gA:bKBiM1+h^_…@5f@5?CYK, !lc+L-'šœ‚fl‚f84 YŸ‡Iz•R8>1sˆ`L`D>Y?;‰J&l~J:<=64)RG0=HZOCI35LY?A1(OV>3F=L85.(LR854 K~mG=N722GZOK8:' .3Yiƒ‰†p[ecrpBexE!=5-yŸ£H,H ‚Y:,0XA (EM79!71;2++0,75!,0,3! M>?,&+G%&6ADUQBV[™y8_VVc”~XTT>LJ4-]jRlpA@5*8[fiEB5,JKC/=(21  <>'=4>&$S*1d],,21.013#15DfOWC?6~G›t;G`urT=?\Z][c‚ŽkiB>Z…GCS^WN}}R:oB2W,6+)7E!6/8C.Ffˆnyc'0zž’io{XdpNc`f’~dzƒ[[a{skFd¤€WutˆnOs€Š‡r^T{f†m`NY;$/QYlefsia+5busbdxbf2LQYLWKqQ{O<jSWeQFUcV:B.K[JdYF@ORxghI~|ZZA-Y~v=Vt]ž["$WrQTKm•“SEWdtkJ'g‰nf:K % pmJ‰µ•J,Y>PbdlŒ\jYON97d`X}7Oge8\ILhiHGGWX;fhR„JQ02/oKYW[rsAV;SlL{¢f^>^G>‚sHSoxk65aWF3Šx„LU…rxs|g©…{]Z‘tgin{r_]3`Z|JAYt2PLWl]¤mTL81nWY}SYCTZ^†SK2RQ49<]”alC6_,#&€l]MQ^_:n`s‰ˆY}UD^KD>8Ÿ˜_cA@, ~deXtoSHSfh]XWVX'3]hGbQOn<AI?ORbT6/BR1eeL]B\XE|/?*JYB.BcLUcGL3*FnU^rI>=PSb}\EbJjG!S"K8I†NXB,(bgj{necOYnbjZh[TXC7PL‰np`d…Q]i^‰oLawjBNcjw:T9/>?hk<SPS<(9pfHYuWI__i<B|RdfoSN=TVYaP}Z?‹e!(./52>{vW|~[“hB^kZ/cvWTG~9b‚_0NE8Sn}|n0JA]OYQ]?KDFSFT[U^?+VH:([A+7%AA6OI]UvRo]*AuT"4@wV16#(.ENd“|qtUf[9M[TG;g)+~~U83bZ=N[‡f†shdVUIk‘inm\<%ch:4$T`4MT}iP+OaFR0@ XDK#OQ"*?'q+?JB9*%%iXEC+9ULVucsSI]{Vi@hT806ZaSHL[4376‚uWH;55;:PG$ G!JLA?LUT7%D8M5)'3;:*5!3; =fLA 9DAP‚7"HgO67Ms^R:9!>PoP%eFcZir~)&8j†qfd.1L5X?/0>, 'MdgJ/G5J>40FECd8^xLP[XLS9Œ¢“<)=ItŸ»º×™sqq„ÊÈ’˜ƒŸ–¡”µ•–=kIfbLMY>m’ŒkbaUC7ikl+'G 7O1+6D¨qhoL`yk”ɺÅİœÏçºªÓØÁéðÞßÛฤ¬ÀÕÚäÝŶ”ɉ¸Ã¶¯˜¼©‹Í‡¯¬Óج׳°5@oœw†€ƒtD\ˆx¦NWHW‡‚“‹NBVc`œ¡C"7AMy}žµ”O<E_fQN°£z_GSRiŽZeu‚fZƒ€^erk_ePsƒlh€‰‚JLZ7N¨·e!=rde\Užž•–‘‘myfŽ~e^f|gSfR„Žm^bnh?@“žzpcB]zhvƒ€2e{L[pt†emQZ…fTkz__bBhp\4=i\fk]@QQK}Q‘X`R>Lacaf_tp}) ‘£¤y‚¾„\‡o}•‡“²†]hfJ{ˆt{cAQ`jm“|eWBj”vv†vO\>Xp€bs€YUvwRl˜…h||MKblcdhZjI]gXSZ[cthmF08L\g‘!†žNT}mQ6}º¶m]b^|‡i”¥‹‡†z†oP|tˆOw”Z[seriny{ly¢†c|Z/VJX‰ŠhQj`€†ZXYnq8PXesNrdRƒJ>K>-cQJ“#Vhkl@-JQ761d‹…no`*‘u€aBbskƒ•O;xjGKAcyjIWLBozRa]myaQGdsUKwYg[kgQPibfYh89F\Q?fD:?0;UX[x„Wj9(Q^`¥‰6a`Uk‚‚—€in'#brF7[ˆƒuf^Vz’sa‡Z\{geouYEaX]i{ˆ``n|hN]MawmY}nHcpY=N}‰‚]@p…mpbe|Z3,[[?ekwu(Izmjkoj9F4r“aM3<sŠ_AC8)/‘”{z~ti`Z[RV€ZKnxYigZZZJiX?urE^Q]UIaRataVL[U>N\Ac†7WZbymOGLq..5@1[|\UsLK<Pauh]2FxžvETX&"Xk@B4(MB}…zav’aZŠv“m\D>W~¶QRa|~mŒ vB rGN[‰¢r yg17#VE%]ndA58T@E-;%+-5\I:.$92c“–x+% Y”‡v…q>3n‘qMYžlŠn`†deœHmUyn|´>,gpˆ{o\kF:^BPbfhg%$B!WqSWRN<_T?AW^F<gfc$2 :]lNg^_*B7DAAb^KGWIGunJko8JEkgG5;^W2i_W{~›€P0YpŽ~„¤Z,((P‹VOQDb>%<II@2I9pC8FRF/-Xk_ŠMkjNngYzb|\x…ZP{ƒ||M=~‘mZgeG=kFLWooPDNOvYqtKGZ61=Tw…x{uT;O7hqSi…MPIuwtu<Yqql^®‰€QG]Ib3a£ªxslZVIZre^M\UNAGŒ]gZMfRNvia|o[AORY”hmS4QRW€YIbci{YqB3)LZJ‚z‰sv‚KZnƒghgˆ‡PLƒx‰xYStf`EƸxvq_m`wj™UQ]Z86^U€WJGjv\dCZkEX`q†mEZjqXiwGI'1dz}BsWB(NGYpW+WqcYddP ²£œƒ_Nl}Z¤¡™yv|uw…g„`Lyvauo‚Œ‚EEs_SWObxW;@dixtgk(:HaZ5WscoLc>FQ4A_[OJR11>OBaZ9--IINAOOBu@LjtihFM# «Áƈ›€`WAP¶¯ ŠdVLk3VÀÅ“iFL7iucŒys^JHXVVZNYflqqW7ZcT|TPmeXqza=m_CeALT–Gq><@<HBe|?HHBZ={[^%A">WBC?Q0¨¸Ä~Vz]PuÍÆŽ[pF05¥CGdse"giAO8eƒhSQ}e/1>`EES?Le54JghdW5H7VZYJE‡—7IV%Cb€…h[X:.'ke6!P+%5%CÃç›y[wBkxv£³~SRjkJ=[bƒ‚^1n9DKk\enNgakn`Z3_W?uuiw\JfpY]D†z8)[kTjkMy3"#lT>ukaP 6S]?1P9- 86 .©”¯pZoŽ’xnwxXepedYH?J~Pg‡ \QufZPs}~ƒ9(SGyq–o>. 9R{~«y{/CSy\dQƒ853/Bf^JfIH2;4&,?G3@OO ¾ž”‘Ê™ˆ}ĽpsjƒcdcxU#ko†z]€X5•€&)C9)S% *>8+#@Rt:8XJ4QMZgkV)>#?&P@PQE2%4@|€WJ!+5tŸ£Š"ViaS7WZ”Œ|c‰q^‹w_(D>AmnŒ²z'Wrw‡ŒvcO\9JµiN<&WNS#%hQ'UAUZ$7e03MS4S>;XžZUG>;4:Voš‚zNr’z‡ŒŠ¹¦Š^Ž››ƒ‡£‹Ê¨–‹¥£‰–Xo~UqxZX1<eW\@^R*$dS`V9/!7A #:4 a±WTRr0/X}½¿¼£›‡€„§Æ¿½ÃÀËפª·¹±§ÆÆ¨«’¬Ñǵp£Ú¥™­ª½»¶…gγ¥¢ž¯®›6=LZ=Sf5?:7M=,7K_@1D)79)$<<GZ=MI1S;!;\=HK^22H0L[Nfl\lU2X[.QVYHPa6JRNk<4fI2@<Wg_hoW9SJ^oB.e[<?SnQ"%>BW]VIGSZ4?=(?RG4VpQG7Mi>Yb:5D[IRiC0ad4DVFA*)Z'OeMKI<0Xkd$wN(&L>RªFW:3'B^&7EG6'/:SJ"j¥s`dp=+*4S`iZ%K`PL&OWLL[\P9@YM4:-"Ef=&^@?n%V[RnQES^Z5TH(Zd_aWF 7Y.i_50CHRP6,[jrH<aveM1_yaXKt˜{OiD[™xMrk&?FC9YhaY04J\*98>9DICD2a‚N@D9+DIPiBYuH=7]^X<'__ac9Unh\aUDZtU7‚W>pm$/Q@UpPVe9ep0TbjJPeB]F_c,N']€Y|OD;AnXejP=C[;+i}ƒXL* KKQvkJ.#8tIB8HJMK/46?n~PjZmL`KOEUEGL3Zvm=@8TU@WYX;PA>OFU…ŒOQSI%b‹qfCorK2PcY11$g so¨TJVMV;kvSF*Qlew[>W?KYn~rvimRD]`|bžPKpEC=;QkkfWQ;G?.UQy~>;29N[eI?/B^d‹Ÿe35<sWO?57 ;Ьi1#$+9*G€wƒ=R<1d…ˆ|DUiDlwhiQ8LK;„}Pv:5BBE;zifK=WHK^SIL: 4LEfgF^~J(P^AQfa)23DXAIY'XH-HL6En4ax~c;311!FGHFMOIg_„kumVl—t a…›NF|T’q=Sj[D #1BF"):TAU6B-G< 8T*/NE&$*'3_=62 SppW^((;x¢iMM!Ek…kJQ;Em‚Mamg;?Š]-l;Sxw„v@6(olLAP4,VZ2]+=]mT D:XgW).(*)`>9+#R/+/`H%*$MK6%5"@;:7KbL78~Q&1ckjXORaXITKrjT^¨±\C&g±µ{p@ 2>,>expOYMC=)'!HMfjP#R5_fME8*Fm->J[NJYNG)!BhTF[JCbc5%e~j;/`QdY5h{THUff<s€[>YoD/':MO|q\_D-;c.JU6bcU8JXFCXa\a\3AQ`kkTKH+,m?^gmWOB~9bY]f;\p:…Au€_G[[=Xz[,8J\ƒ‡^_Š_S[]iv}U^•raih7+OB>DUMJt@2J^ˆšsRW?[TGgrz}fg+k[jeZhX^O:F>ZYO\^g:]ftGmvk`C@šiTSJZrHONŸriH\vaa_nh¢¨ŽV^GliB3l‡“oN\VB"HW[HukwkOU_wtQc[‚T?azhg{m[cHPSqNqxnV4HClZJ^hZ>BiO™ltUW`LRt{—gyx^JXLNe„dQ7AduKe‚oy`l&H8*.,TAPt_{Z&A<9L]`s<ZPa.LFRkYef<cƒy+]kl^o~†•‹`SƒwY¡qrq}e)2>d›žp[`=LMI†ttwSOBvŽchNxp-#5pWg]O…mQWRC>*CevmcC<9fk^I?<HQLWSoUt|Udo=TPn‹hVT-hNlb5>U4=P“{A_Po`?Vrm•suzL@HGdQ\oohhcRpWU;T\eOOr••bUeNpt6¨‹ =4,JA5 NdXLZyqX<RMxgKAk…‹JEN]\T:ZS0:^rnYI1GK>KrckWL^cEpkkspfY&GefhPpŠ@0`Z‰`+&MbYo–~cQ$:|zh9* !Ao‚yQ"9? `5]†f•gfvoITgk|cUSoy‘¡…]MNibH˜ed‚Tt^G3b8`myhdPXbfok‡‹DaX:X“y>7s’r8;X9)!dua8E0XU“W 806O?VQGcJnO†v0GDPuE,a…rZUOKW7AupP^s]TjcAO9;B`\/6J??Sc^;T?+^GB7$H8G'`QO89#6DMWd{€;K "RJ(^Z[¥Z'[O'OoT^hu[Uu`"uO8G‡}€R8Kz„y‚qaU#0T€^,KH&-2KGHX;BC,7D9$!.5Q9=9/';¡Z@@4c²´©š™¢`”z‰µ›}ƒ‹„£Œ›”“zFŽj†“zB;¥Œ¡™mL;KX›yZ;!=g=&&!ajL9H(K‚n5;L'6B˜Á”“ª¯‹¢§­µ¹ŽŸ¥¿ÅÁ¢ò֬ͱ²ÔÝÉÐ´–´¶£«ª«µÀ£²°”‘´Í¢£.=yÁ¬°—|dc'K¢ la^~V>o™ŠxhnI_Lt˜˜wwR`hLX ’S`iRQhWAŠ]2UJduETLta5EULRLShmg6<lM5>m†¥ŽQ6LEF@8–¡g<& g¬¢°³sWaE‹ƒ…{ŠjidJ’µ¡kL)ZdG_„}n^\..L~‘M3V]1,Mtf]J^Vg`Dbvfe10JGE`iVWW/Go96Lb5dvm+:@d`9^À‹I_KT$0š ÃÉ¥š}Ki9¥°·…un[b]O¦šfKh]CWUTDTdqgV`K)G`9VW@GK9I]RmUL@<8?5=KUEGIW=2YQ:8[X5(F‹w.?]Y=FNF<h~HElB ©™x¬«|caYO´´”–WKdKP3¢–|ž\CpIViq\[M\I$:UdP.6#Kp?:AiFBxyVN<CX€|WbcNA7;}`sc(/H2dai‹NIfaZ>BTfNGp3'B7Lt¡¸¯«žˆZFa…˜‚sfC^^=_¤d47VYGnhRTŸ}+Wˆ_lj9MeU0<c}n]Qm<2eM/IU`UucNCUd\My4P79oWSgb\ZsK4ds`J#li 3)5¹Ñ¸´•wnVS‚u_‚‚JPXL=qi][MFWh\-][L?HNRFKJ1Fd\\T70LL-RWArV#52B6<H51B)/2 fw\[>,=NF!JG[M "Th? &@,2M•¦°½¢sU`hM~‰˜{VSgo[N^m€c?823SkRD8<MP;"6~H1:BS=aM/_M*Ajc`Q,_C7IY}|=3Ch@2.1-"3K3(%:2gP5$-5eh¸¿]JQ5ŠNV‚vOFLH,TW\5]T<€L.,<^V'8HM*>-4(48%'@,)8?#/@#TSaQ)~H/*3P!4AfxX"#6]WbQFR%M_jmAXF);K[[sV0BFfG*/Ibrwh/(%854wI1*0#" &E_D7'&4$4,<\&=7?$.FP;31D\UK^•W&WP[Bd¥”‰w¦‰_szvccSze*5aa<?W|g^Xc,A+;-AX/1+$& <84BX4!B‚O'3&Ogog9+?QVel`qobiwxxG‹wii‚´®zn}`i€lŒ™ƒdVœTXvƒ~…€xkA5T¡¥\o•?uviŠTaf;p‘‰bKMk`?Q¨™pG%HlkSy•ŸwbjQFKYi[flPDJOT^€MSUN5Z’nj–!hUQgvu}ŽODP`YB[ޤ\8Il~i†U(#Y–”Œ¬‡Gu_Vkpxp^[ZeJ›fjz@CF4@P‚}U:,2PkfSŽªrQR@f„Yk˜qeX>Z~‘}eQZxZJOflPl—AQqVGVLc£y|TN&-nolUo‰am˜˜q4 ‰«{l}†‹XLMhd}”lIje–†mMKOPs~¦r63nsm€yq…-4&*Wk‡ƒ~\5IU83ZvgtTqjRkO<ggcX[Q;6LNHS~=jp]@CJauh@A —UtsI2„’|p’]:HUr°Žb`yb<>Mk†S4dk?Hd]G;Q[8?lvind 2V_]bm{aNLpf^u^%EvV=vw7=d;L_MYY#(\gx‰Fm¨jGmdepJ"&N_upX\I{ž¾²™uV^qY„`h–†qXPk\D‰p:HWV{ЇOzo_Zizor9m“hT[_eeuQkogQCew¢V|?7bKAe\bBXN]n1S¦vX_@[_jep[!ƒ^".:\5. ‰‹Ž‰—Ž|}qQ~j1cx@TzX_:\V3CgG/`k]4&8IBNkˆ€T/h`QSbqgwCBsp3a[1f‡a0PH^yj_DH[TGl‰iEG$CNE:W-HY>—’<I=U}•uU`vhe‰op;Ddz}n‚ydNY<AZtvpkO*BbNFnuRC‚HDZ^rmWh—M(_wrh„e^72O”{^L<hSRW'4Q:d †\E+ 7]x7)BK$3xUDIb`DXˆqt_@j€p…‘mXŠ•{mšº|_!‹ˆJd€tJ.=c„uUJ9!G#&MEgV+!Vc5I03g3AhA^QN=F@)‡}ˆk=>3>U‘ˆ~Z¶Å“ypkV2}g`W]p|ƒM{vŒ“›‰iS;™­¡dŠ?SU`4?H3 =G>Jks-3)QŠ>?iL,)HclE4(9 @5<J)  R^dQ>L,)D`ljbI=ET7]g?`D!Q4UtbRƒžŒŒiHIj®£k=#8YksyN1AjXV< KXX<@9^-,<*5N>hg‰b1386SQAL'7E2%E^7;b.9OGFEQR0."1nE$YL&UW'?4&/QL7EBWa=LUUI.2*X|kX+2:?;DUZ]dE?EXJ@\cGg>$*ZuU>BDHR=IZ5HSV_T*@Q#+LJJTHWH:3QT3EƒVTq|V\[_‚^G˜\O|eE)$.6D:AG1m%92P}hVUA6QUALWbZ>3ME>D+'ReOHQ1QnZOSFb<.NS\)?_)UhUZD_Kd_DI¬_"7Z^XDUsCnO.'=WOc^Nino˜xeDAHkeHg&.bi1+DV\K7bMW6>NFASUZ#bN=?XS_7EQZk@N5JO=E42sm;6?TL34SeMN:HJrkRsXPBQpQQapk}bQZ56EEoJ]gbfhB)GFDB<MR?)BD:7(*6KkeqT\iQIB^smbc‹x6lEWfLO|’VM_\]U_š|B[U91(3ujUY0i3KIXXMTP]HDOW@:GlUBsLssb„mZ6F1#8EfAhƒIa@BNVUSB-0O_nˆ^BjX?EC\zi`T^?AZZzˆUZTSF93]BnTRNN,F\hm@4DUB/Dnt\bEE_XXle8Ly‚k{re\0E£…<??&(11=,Chb+R?FLD=ugS?L&8&GŠkasLgR'kŒzEZVZU>9k,T[]+?A_a[0]0KALskt8.4FFT`d<9`]mvpy? N|hC:6A*(‚¶cm0& BZq8Tš{~rL43>'acL|g„KOXQN8IR}R7D}|J5eQ{dnJjiixG,Oj?+ZPNHDRNZCDGQNn:kreMN[*/QbRDPSIMSXdrTA1=D)*We6-Ta8wWW@JaePJvOdmšs8SeZ!E£…tE0gigY)&E$,AM#=?B!0B'9T:18;';o)*0 /6_ R2F.2WvL/\9/•ˆ4]G7RfLBUNJCCŒo\Sn_^e=OV%†•hCK5@;JXE=)'N;B.C`K 1@cN3?(L 3& @Z]&8%2ozMj[Cb‚w94‰ˆ™tu…š‡ƒpQi^`xVK‰—{ z~‡U?O@K—–g<FS."+@PbUEU}PSPykehGNCLd{b†aPN/YhqªVmbkz[sfi}lxxyšjˆw_dZwiŸow™£¯Æ—yp_qm("6?;Kn\JX>F_DVŽ‚WXX10JHYJ]nH@1'3lh/MLVDJZXiOThA?d*fOFURT1]\Ixufh[eFo•–`l~TRb]XreNRki_…žn<p{˜fs\EM32%6tfz'PDAVFNh›Ž6H]s}PLM221?UpkUQKC`rMNUa-"G7Rlq\WK:<DbQ]qY^8Xlkbl\?SS,A_p/Hw^A5 xx9'c‰WDjob0$)50CjxiR9+U@*ekbXDE`zl@YuJ4C{^Ig‡FDZX7'–bކO8Q[@giZ`Z^f9NaN|ZVMFC+8=ŠpW,6WU]VmCW[k:@dhi1C<{J`P:!MM';D7D;EIDYUgqA%GL@,PXwa29I<7Œd‹`455BTQ…a>JPL;WUy_@T]7T_HMfƒ¥}OJRY5D]BJ=t^1QG€0?d?,Saj:JMD^C&3OcZRa<C5OnNXZ8gRbVO[2CD\]p[_ga_bPO?=rNGkZJ\UbU€rnc!1ƒ<„‚VubheVRŠoNF`{Q-Qxzxc@¥t’†?^sŽŽ¤pc%Š^(%Uq#6Y7E8GJHP?\[\k>EC;Y"P<W|wg]+KD*ipDUKWwG3ULuJKPZkB-pHu`L0+PeTn„XU=:fVWh_p_utJ|mK%-Š…]A0)3_‘‰B HEWEoguZ_e6M?`c‰COXVkct~w>z`Mii€ƒyƒ\bM/nwlY~hC]lJz—QtJR‡]kN…`8mgoBKIb8\<UZXQ]Rc:9ˆrydD58b¡‚Xe<7"(@Rf]L]Yk<JXyvolsm" i‘Q<iNPSTO•Y\B)=*ITZ0SUBI<4HP_UC8),BG[-#2/20R„+@:;a†sLW@IMTY`T:kljv~E-/œmmC>Vaa{y?kaW£­^F<.‚‡lRF*A.Tf;2#<?;U=25.18.qB5?">,rL&F7EdG8e¢e: Rqp‰xmaW^yM5‡›sŽ¡~awXŠ¥¢Xx‘[`tx›F Ž—£ol40WCJZ¨o[Krr/ Dm‰}bN?RNIZCV<Nt`”œKafbPoxG•m_s—‚v`Š^˜‘tx t‘ˆ{¤›› mt…–ƒ¸Æ‰{¢!·ªbffB@c†”T>54Y\‚‚H-5JN=‡˜~mWLZtfj®†vVTU2:KD‡“=+EE3*4Q]<2Ie_UVT[snoY8=]iRP—”‹aAKsA+h«|{j4 ;Uz¯µo_N6E»šaZbcce·ÄÁZTnnU(µ•nXXym[xdSHXp‡Y1]_r]wldnURU6@˜70da7Fc`j©{gfU`QSNh~”v)LKT]DVbj‚oQwo=Š©µ¸«£v\X(¨®Ðµm‰•N>2²±žd?;S\Uš‚^OtteN;"|WNR{kVbcs`DJ[Z-HlkˆmQgQToMZr\Y\]LJSNXyh„[GN>0<CB1:uY3;-0²’‘±Ê«udE0¦Æ~Œ`NMEI¶² takR/FVjNO@In[H]]VPTkwWJ\aqiC^iCA9C`\a]SJGTLDyNI]l?/aX8os~5/\S5diUeB9.FV_MLG¹“ºÜ¿‚n^B2³¬¶ˆn|dGNV³¥“ƒeVbeXZj›oID<N[[;]u\8)17AJEOYSVO*/eqK7*?L=:7cˆ1TZ=$;jsqc?=-TYOZWX1a^K 9=G%-ÎÀɤš~@'>¿¼Ÿ”fDZG-SsfxxmHGc\^D1ka_\K?[J5ˆw)I`13L:`„X$4"Ep>@I^a8;[D,8]\fdDbj->R/6DAEA,/33'  -œ¬{r˜pZKDof—rYZUM8vleqq@-C='Œb;G\o€YA;v[<OiM/CY9.-SVDJ_: <'#?\yb->d 8'4BK!77HW4WQ$5(;%&O<5:-н™ˆ¢„jlDR`nbvq1:K']_NZ?lP„~H')J]?-$g[9 $ UP3;X6 3?4P/#4FL1 'L+;25SiSMK!9P0ZV=HX?<ZsOtƒƒlx‚`c[y[hY#W}7OW`‚xb,mJL\8YnLKi;$1>\=[:G FM?:>,0J #1"07*X22$ 3C[rIHiYAHB\MDFajsrfekfYa(Mll_sd9&)[w‘y`rU4%$pkg:;N34 AKQSD<,1 &=\64,.53?TuT=CDoˆmkBxJKL0<[;(CF1#DMLG>;U—i9`_;FQdI]‚lqrP=B:a‰±´efp#X[|–Z] Žh{”¬zigJcmn†lax]SbcOoaUf‰{rld@S+Iqq„RYkTIxfb]V^a\|ÁqCemd_fzR”€gjdMaqx-Z“¥„^na@:'Ož¤£‡iuuRYmjq}^w„Nv]_NT~i^_Jjcnml‚>KC‚GJyjLDusP*[h/_o>Cpy„oJFa.'2+PÕXKr^@-EI>T‰¡m6JOT7a‰~VLGL)ˆ—¨“™¢eqs›Ÿo…othXe?vuegdXTT4L`a‡pbrN<K“PH^]`]P=NgWLCFGR[>ikh^C@IQruz[^VG\e];+}žƒf<PQ8?6‚Ji|u]aP%†|g~§ŠS<SqyTZ€jUM?…dbzW)5]XDfjeu]KL2%9hzo]‡u/?B=rtU[U'G0TŒR!gZ&5L~zˆF\ReJPj]m—qb`†‚REdV^ES*>B#1Ÿ²´•¦”V',……—voMWO]l‹gcFPM83 l«‹iU3N<ERH‰`@:W…|v¦QR2U`SJwmqybADUc%swp‡T`HQIdUbTQzW61„y:/P6*GU‡¥«fJ\V[C?Io†i]`^fSVDUj`jueKYEnfWb‹n_mdYR&MWƒ^1"3nWSofI4 %,!N<7T^lM$4]TRu}9*;!9S?>\!%:B}h8!.lwoy†oDS4qwsf`SG8AAVnx^i5Wh9"‘aVs`IV`h4fjJ00H@>>##TskZM2+ [o‰G7L9Hd&B5VHI4G4=C8/-#fu9&  tl_M’£€[FdY}M[Ž—zKN$…‘a+;N,0)š¯q"S7+,4NX 2,)@>98 Y3NI`=%)G,&N A?(6J/.1+N<)8 ;A>a32'?TXFDD7nXCxaUf?9KF_BOR(ICZy_W]^LdD;RTO/ 80wXyW*4-$%`N,+plvhD^-e……ƒK Qwvž­]i”}‚’ks€t‰~n‚žsiŠ5Gql^mr91>Mp˜œU&":(408/<.6UfP02;> !]€d9 ,N††Ð˼™s…²Ê³˜¬Æ§•¨¿ÐÀ«¡„l{z¶Þ¨’–~¢¡«±´Ì´„‹g‰§Ãº¢±¦™<Gcmk_/Wk:7¡pWGS^K7Az{qo]A*\š‹B_]_[?ZjŽoE-8\higi‹gOT[kUKVKWSAA><2FLZw$&_/7YZYdpt|yF5cw{Z=cŠ‘s]jQ&47kpdr`:6o€yxujBFY?µ~Li†uAKsk¬š[J[m^C]f`HV…H>P{–uc\ra@Y]\usdcqn^\fOmc`MGMY<=Fbcn`C##3ON>']zO>ShV(‰˜{WZTN>-Ù¯`ozb\fM?³•tfDb|K5Xšt`JaX=4.Gq8PeKOPbuavFMU=Rbl\PJ$jvWesueGsOKcS4B:N\o€_EPE#2k`$YG=acHŽt‘†oYKB6J¤¡“i`kW\da³‰hfZYRAZ\›o`uMLpWUyPFwe-GWR_`Q|„O9mDD^JcjP3MSAic@?U5*EJ‚–Jk$$Zsph\@ EP>5H)/p[˜‘µ¯™€UVDR¼Š‹ceY,W±¨S_r>?97I_NJYjnkww6Iq}<Do…mT=cYzm/9an}PMPV]QLZPq TfU'Lx]cg0JG2"=meR"0, 7U -4µw›šŒ[LE@¢©Žˆ{M<PCnXw49p”RHSIW]_wMEgq?Q>H_vA;]RNMc6iY@h\vj,@P^KQ^~| PP4cq[P=3Pi$,Y=R8#)( 0¸½ËÄ«ƒk^y„“¬ ‹eQn’soPIkZPihLŒlGLkT;jG-Z7A9BCM€Y/F8LCdˆB":?%gQLo]]S?,.)>_Kn60(10$ !%$ r€]O†r8a¡’dqxw†iLfzhmeD9':@"GZB%;A(0MQ%).:->87#'/K/-!-/5aS;"=.:itr],%?#&>bc-@L-9;>Q`lŸ|r]CMQTG'MYqRkpeP({ST\LH$/29{:D*/6&196C /0&#V>5IF1#_60C<<::;)G2DelM#0ELWpey^@N?CjbSe€‘eh„ŒlfŠvaqqdJVX:DDYe<3FDFW))E2+)$M13 I#=*/&16ZW3= HOJSR@%);A\qRuh>2:{ŽK>K^cGQ\WYWEN€Muks^anll‰¯–„ˆrƒ˜@VSnN[oJS;6trI`yld<EEwrnux=1I€_]unenUbWo‘‚hdbftZL‚jVE$Ilsr\ŠeHa[[gJe^\ijTWEL_‚TgbQ<D€ŸˆK-†v—¢{lFfGfV)Tc\`Oj“vVIQZTbhgp~miIFXJ…ŽqkyRMuuz™s{‰{`v}i{Q3skWlDhlk]L>Wm‹iPz\ytjgKJgm›5dTHO'8/H‹2`™˜Y_gD'YugM:>ƒt•‚Ã{ƒ‘dkzcW„mu—j\Ad`Q……}sNckKms^Vnc`WFWlA€zyd[dXGpWn`?KvbX^fLD:2JPm‰skwI^GfYv|)NXyw5h`69‹uJ<LZJ-,<ºkhUL]pLrzÆ™ifsueEZMœsNYn@J8JO`T€],fikiXPAjJ:KU^B_P2A_S5LqH{@ZT:BD1IG@MXLNA1A>J 4CDKD_Ul^„Ucd^A‹nVWaz`Z][§›GI†,9QjƒoJs[\^=YUijTOR{u‰‘5N[l]jbˆ—”NZj27oduTœCuZI\„Z_Š^IZ5gM_z‰i1!ETeUH¬±‘‹wmwmy¤Ã›|v\meewq€q\‹u‹‰Oo_[P˜˜Žnkhb2\ayx|jgŽdSRHdppt“-.<BZX}¶n$d<†a…oW;SeXCJ.(4Q;RU6$-&1%±Žy™zd‰¨œ†…|s…y¨’mm“inmr‚€„K>Ywf€o]dcEdvPvq|€..kZ£’w¨G(Tw“Œ|vy;X>UpnaKm>'akŒe@Q-G1JY3)%I1ql„Xi£v[˜ mfˆUQin­‰4rnbM=ZœmO?l`KETJe`8A:)04G=DG0,Be/',I+ /4&%7\6. *+"IRw‘D9=FHx\¢BL1ML_Y[dr™†ŠxDh”ÀÒhf`…–`\Їf7“pugwQ'/8vdZV$5OEA+GL/?0"PZMGO=<MF{~lVVS;Yadv‡‡b^DPˆt7i‰}ƒ†mŠ•x~“„¹Ï”‡ƒ‘¸¿}•u|_l©zeuD¢«Â…†_EYLK`šh14*fRy;?4/APJKKJ]rmIF]`l„jw„`Ui[y—ž–‹˜~­®¦•¬‡™ ¬¾©“‹«†`…Œ¬¨ÈÅ ‘’•†›·œÌ¸¨º´®1DHA2?KDQa]l`83TklH-[_oN_h[h]KDpmf_aH2K>‹£lVmgfXg\–\f_JZ‚gISmZvwmH&DNM5<^>;9#?žªGGSF@G1T†xprblY9 Y}TFDJJHP@PXwxsNKnZP:OXbKKJZX/ ¦S)VfBVor>ac^^jNSyn[|bRH_povhr~mM:?…‹kbidsN9V0N….mY )JB/Rl^yi]\tY8#8__XH8miGnp”ƒRKKJ0@=ÌuDYGa3]O~W^StT$cnT]u}~M2U…lz^M=An`Ac;UmF>;jE<J:AcQDh]tƒaDGmBFUEja32dœ“UNYjeMm7gQ9kOod|pU<6KF¢ŽkJMZSX\bKhtJev[VNULq‹{™‡Sr9pwKSFeg`avVYJ:XcS`}p^9+Ss\Bv›MbW.7Q5J_c$<!<=SO8XrjFIpN)tyŠœ›kW]]UAL§_SJ:%":‘vARmVDgWV.NŠ…mdkg=^5XqlX@R`Eh4iE&BbcAHŽIT3.Vc<7nnHhsBKmdŒ`T* "8SF;9$‰{TbvvY3PLtW„}fkBAO6S_Ž…cSdZ(%B><JXFaYSa6=]kUPITy,bp[9Fktt2>]4NpRERVqMbX*]T%*8+26M?(%(„yg^fŠ’xzŸnP}Žqg^gzmaG_}U@?CX‹Y28l~VQbIcH[eKNcRf2M4BqhN9EgE'Rr?=„¥!-$(EL[XU„4?9G_hKXE1F"YEK? zjXj‹uRT…uajdXY_ddB)[OTS6g³‹MCnR=S]Uje;8A/"C?(cV6PF("-vH6C>"$),9oY3JZ64rl^E*T„hkj[IipmkSfft{_eTXx‰h:NlrzMx_ˆtrd=S Ww<X]:!y 0+<% +u1CE-=6_CF"WA"1#/BJ<4LkB]MXrahs€zsj_trl„uoŠ”Y}‘sƒsszii;qvpgCG@3IX][SMo/E)<lDJ<&+mz\}I8& 3;Exc==-2gTQ[OV:j`QwJ5\YYtkkwYNhU_Ay xUYš‘_uu¢“‰w}U7D&v˜ix€Œcm@?XK^lDbwU1@6@>UKW3!Msu^A\]AJ5PiDPVICNi;NbD3?iX)\ETb[IOH/Pn”N6X}|NZvŠšjQyu|VT{U0gtxP\E8 )Wy[”Šsq‹uDOF;jR@niOFeM+Jru9bOGZV98Z\YlWNGWYR]IRPML(MZTVLONVUNza^SXU’`:JTOMKd_Zu_G;<AG)A&R~ET†t[,!Y[SdwHSNK^^|yZ\8rgUmt,W5QCQkshoRDFID]y_;pSHc\ZA|[N;$95^[6hSP-?>u_NjhuN`8yuUZžWXn&/YU=P5›¨†Map2DSF7k‰waQ\6\.NIPI3ShZF5M?L*^N5k]}FNTOR7CVuR"V3tfIa_V=ZHXLj\BJoNcExO9\Iy8CNORDKi‹TQcZ=ORJUD7<51NA3.1!cRo{am>J=AGŽg}O4OaeSQ€ƒObS=an„%KR6F>>Edr5r[C@41f\cX.%N6"7\DG:<,>LQsr.M9<DOmcŒ|?rk,*I„}7WS% 3"_qŒ™†uoX_W_]6UT@F K?tw:3G.>DcdtjDIlaQzz?EUSVS+2b4"-.TR%4E*0@9OP;PCAiodP\Hd?BEP5&'8vO+01:T=[~WDk‹†s?9OTL3Durz=U[)WEIunˆ[9V85F\wVw_cD29TP—SdB26[y|gO6;('7B;ATA05Zh1'-F<L%AYI8849(/"<8+:$;7LPc]Q`IUL7H_r\X=IthdNCI$%8v‡_F@7 iW;&&09CIG5$(C5!Q4 ).,CS?>GBL72H[?YLb0 LPG9a"dN\55"3vSkR:<D_‹LKU|k€±k#JW^u\Q8OABVQY=!5L$UKR^S?6!5"I6Et\GX<,Qcm"12-)\‡xh/1('>vuhožjzq¥Œ[EO”„l‹¯}QfHz_q€o[(ZKy™~‡=]<&PEV9DM4I #+S]>BZgzEOl@PfsWqƒ‘jnccŸ[}d”ªd›¡”i7T‰ˆ„Š©“{|pv”šov–ˆ„erskUu…‡v&r¢—‚vr_RI£„feVURLG~§˜ZQoRPOŒhi‰}lwR\Ž¿št†~(ŒkX€Vy~‚ЉkO^q[]avR8i’‹`›zjh‚©˜w„t}oRx—c_~‹žuTiE(/L€cb™‚j[Oœ‘vt>[u<ezyWegbpYWGx‰OQ^Scnp|aYmI-:STz„Q1.Rd_t~s:cd;NmQd…¦zfZV9GmsxC‰ZJ8(O€_7%J•€f{P &%€z€‘‡{T=Yž¢MS§—iQWS™GAjXUkfSy`OoLL>IZKUZ‹{P,2ZG“z]{uZ`jmp‰‹_:=‡‚QPaŠm_pXTiVj…go]e;>XJMh,L–}cyT2* …·lŒµmwd†¥šŒ‘kuŸ„\‹Ž„>L‰p7txdV…pD6PX’NPZ\T6?W””Z{iG?PTpx‘’jPI/5XnT‡sbOVS"2‹F}oxxMZU(.V‹n19; {¡À‹Ê³aXq­’}…Ž}VbpK|”‰rv‚Zk•H{Œ“qXelc`N\€hƒd‰yK8V›€jnBg}URškOOZIUd\gi742<_^[wMT‚ptlp£‰;3—–0&TH:38K†~‡br{SYR‡pbierrkLV}on€bSGAbˆ|„tYX6GkpPŒ‰WXcERqdj—p|w<@]k<_yE6YfK\Y-:paN‡˜nIXSuiS#?x˜E4N-+)§ž†nk†yKCkvvrKDYI6>EUtWKH0NS€‡WglXne.&‰zu€_TnU<Ke<4PRUhI,[gcTytUY (LMXE+3%DLswSUT^Z,Qg‚ipld^JNT‡†nsoQb~h||™bCwyU[š~Y]# b11ŒqX]ZD0E>''/A*1OM"11>6QC?3M/2:pK@Y.%C4.N;ALHJ:(I]i<0YhVapiP€pJr”;3†yVV|uOOdOSb?|kc[& KZ’u1&%Ff 3H"kh+'.(CcmF7 +eBCYG6YIIcY0J($11‚ UVhoSDDI`T7]gtg]B;ZkR[]AioBU{I[‹„fn~jH1J¯c37@@+W2A-WTPaYA*.qˆ_‹{h[EŽqpbiSWox€l>\krD,`zcO=s^\a}vm†tf@XihnIX] 2[™¨‹}‡ƒ‰/OlŠŒj`]T€F~†vrdh`.YLnPW@Odi2NbGOfNSGjf`npJˆ]^?>UxLW-]CKba$I“;#=OQUB?Q½…Jqb{P$6EEwqa^[2 5¼£ª‰NVVB`__VH9cps]r@8AKjvLWSm`9S[[Od`nh@BNnO2F__pn]U;NaNYYfY^]aN":QlghU|Z!2:SŠNNAWXLF+b¢…uxt<5𥦫ºœgOacŸ’‡“}MIktj‘…aI[nd]Wƒ€tqY7;GovNebdiSP aELOKDiUQ–bZZFPFD6r‘I5@?7RbcL„uN:AB3Y93FFj‡WVV$*"†k¦Ÿ«¬reE_ŽwuzQM_gHRƒ—‹f2IR,>GmkpUTwk><0ƒZ$CWI427hrbFP20@suG\?"Fg.QcA:[/EMWmU<ViVva*X%MC6IonZ7B,\“}a291vmsMICElYT¨ƒ`.ZS7S>TdefSj^LFheZSU^:5%1Z4R[K8C?)QW1D3:,.98OQGfZ==dagl#R~I+*OUeiNE&E-žŽŽ›»~G/Ct¥c`c=>\PEP}uaP_=>>]WH&!W;GZABmh7HcD/L1B\W=LHT?ScA1<@\-?m]N1,F' Ze55/*%=J,6?$J°štš_]wR5Uc^jl1/N@ECS_]C30B4?ywP<ObCD5Q+ >UP^ZL'.(#,,F?8ONGQYBOT,, +)&3@.-" )3(544JF#BL4"&S3(KWW}\~tan{qjGV6F= _}V,&%#RcZ$.4 9=D# 1!E" !.*@M$G`+#*%-75I; &R'+" N-Œ,2 6)(,6mˆZNPAOM=CrjKamYQ< 4cszb`@.RN[E=/D &#+;>:G1;8QM:J$&(šr.:E I•œº~2 Tb›Ô·”¤§…e^¡ª¿³a›ª”‹ž§JK`fbOsb'1\„¨‰e2*E/Snj8&O7-K3A"NgPyk™~†LID]r¼¦¬Å¨°È¡ªÏ¹t¸ÙÓ¦ÊÒÓÆ³“­Ä¯¯¸œÐó«®§¡³Í¼›—¸±ŽƒŽ Ó¸ÃÓÓ>weMI^p[><2DUeddhpLAR\WVlV9&@€™…nO.<RlIPRˆ§s`^^_ykkhZjaZ[z^IDHemf{_gdJLfbY†¢™w ˆLmŽ„V*oŒr€—ƒA@HJSp‚LOVIZ>i_lc-jHLXu{_eunFpV1KqzeQQN\fpF^[PM U“xrKgYFgrlvulXb\KTd[O€ubSYY\tAC±dSJZmg+X¥‡hboZ)$dK(5[eR7C2:26R:U}R4P9U9:-HZSbGbw`G+Ln_tn[gJDGDBU€¢~ig^G'-Dq`mn‚S<d]RG?=nc<ONQPdM(5B=0B1)E&Zu`~WQ-*lpKhp~€G<„M|‹{kr\|bo8TqeZIYh}VcW}}J”Ž—€U`P`‘—£i^g_bhbvzq`s™€Pby€0KMIMg{lg0UWeqieK[#;;\e`>JƒcQad\da_Ejkƒud“wBdu{“šzxzkWjnœoUžƒh\7TV†™„`Vim‹k‘”›~_Tp‚qfnauvXYx1eCD{V3XŠuGw]PuŒœM1—}K +fFf>*wwpFqhmz_`huq[ur@.2Z`Ly—ŽyZFIU£‹“psmpnŸsn…nF0dc@c•m†‡\bRrXx’nQeJ‰…bZ7\ud„€“ƒ<8‹vq:5./z†m4< 7$lYpU\€„…lŒ}t§±ysjFFkeuŸvz^ve§…F‚nYjd qZº„n[d‹eUyshnw|xj`RD;nmq`gP1IbnŠTrmP:6V‚®‚`\:tx‰|eV7(7C_OmDGa‡…skt‚’~y\0Qo‡Ž§zJ3;‰ƒUl€‚V8CaS[RG0@;85>HYkK8A3=u88ViLIDACHXI"BO@~‚yH9.>jx¤”Zjhuk„•¢ˆ\ps[krPuˆ~i>‡‰€_˜ p51†›}‰‘|R8NRg\EK=;F/5-=JPGC^L3@@MSHZK4j†…^QCZ^T[w‡}[Lp©¥zysŒ½jnkš‚td¤µž¨ }¥KULnfsbVCL©ÈŸ’†[+_ s=>WYS30JM;EC,9<g€†YRP~fbegŸ¿‚w‡‚‡sl¢•¨˜³§À§¯½š‹Ÿ”“–¡}„‘¿ž¥¬Æ¶£“oxŒÆº¹è©•)b©‘ˆfdx[Z`d]p1qnquA5ZXxQŠcTR.DGV>OZON\XdH08YhvŠ’\Q2D>S\Gva&fmVCnc+xRwdkmme`b^c«jdvd\U>^F1iYnXhc)F \˜˜‡¦’iVQ=eny{ViŒclWaf[Z?TBbŒSIW?\BANhd‰GdaL;muvX`X\}G`gPbƒjY.mYpo[EE•CRXvT]WuG8]WdVGC@ejKWozZ_qG lZFžÉºŽeB5,hP‡rha<`Fy—}H(>NgVs~jm^]Z9P]NhZCD”^Q<H®iB*5UWk2pyINVP;cdMd¦b9X@>LWY„\FX3]U[:[AQb…Sl_)7/JZ[†Žµ‰<cMTyo!OOGiJo}:M-o|aaiWGTFOrE]IU^Pj4G@KKbAcT:C,|xU{>,50I&jF4Z[`<M]<kag]G^HEyNCJ0::3>4O94XZkª^`[c{o:PcEINoƒšy:P/GF$JQ>WllNcp}'9./IŠuDJrDOC-P^A(6JMVK,PZ@FYcWHuIQAF‹XKF4+8U0UX+0VO&  *#)T_y|r{lP7Jhli?4H<k`EC]wLIS@lVK`]E,7?,dbYSHaQ$E=3`Z.:aW1HV^E(6/#2J63, 2h`kb]7<1Z93 8/!;S? Un‘fdS9boh?>Z[]I5ckUHKRGLYOVNTj2<I?=‡QSyTSQ@E1 4<>;bL3*'$?|_gZ-&"#$#pQ/6N"E#"1E()9=0V5+3=);Y@;8MTEZDZO9<E451/QCXf;CQL0#‚aUC=@2=>T7> 3Ab* $ "FB}e%23=$B6 #HD;20k9J6F'kJ[zT)-HbhJRS`MQ>gN ;i€ƒRM3 g K9'#99*#$%L:icKP*?‘ F7.63J$ˆÈYA=-(Š€»‘®w€op‰Ö¹”¥´¬•v‡¶-R{ifb[lNnt|gEd: ^`d59I!NAFOP*wœk?& BŒÎØÒÄ®›‡ˆ‘ÅÑõ§³·áçÌàÈÞÝÆ´¤¶°çã·ÑÇ÷¶ªÒи°è¸–¨¸ŽµŠµÞ®€;Pync—–\?hEO}_V~lVWkyyew^‚šd?. ~z…aYfJe•¨n{VIwgY„™eg{smg\eWv‚t`eZi¢pLMDL<l }w{i:<`Ž‚s}×eOzmcve2' 5g•^d¡}zZ3]†˜“ˆ–|‚U|tyŒ–ijƒuZ’¯e}RJys¶¬~XeUIO~”ƒ†nTq„_@‹­lo]j‹ƒniXVsockˆtUibs2]nuU* P†x^Ÿyua]E(‹oc†Žqu¡¢š~r‚zixp…u|a-Fi`oU¿¥znUa{jœ¥»©]iZW…uiry_C[a@i™bbjTX……jnle€~O_‚V3c†|€kƒ‹{O0S{x{:#UŽ}qi_CÁ±´‹]Ž…qke›©©€No­…[VžtƒuPz}9jq_\Ž”xpo`epbNSYe|ŠyCCo…]RdqZDi^gžŽg{„?7€c`cL&/VV~VqrŠg[aeqV52Kq^Ul_.0ª|lC_‰g]ol¯LMUWNoz]nuŽtsŒ_Hb\q…aYXJJq?A_uh?8ƒˆs(l€`F0GJLƒ/6)Oc/9NJy07nrBF`…¥d8XXFP‚m`h)HHE -_\K1"ªˆ’–mŠr‘¨“ii]xjhxcgTjgW‹’vj]hj_]}wojX–WOiˆ{e}‰y}tˆrs—osjfugKe†|muz Xqs«Á‘_>11xr]^C(<8yr{U=–†t†šf_{y„r^h{—Ÿ„‘{o€lv„\P†dŒ~^x}p{e_gŽuYlƒ„{qkRrœl‘‚m–ˆIfK&H…q”³s~U 'g¬¢mpbd0Xn„‘L.C-!5€m-/C=*=|³‘‘—„Š}\ˆy^`h®£‰l‹ˆ…i€§žRP‹k}^w¬ƒ8ydqdPd. 8<_u@-C"M&Ag^5A>&[=Odf=2?C‚ª†8SD%L“£¡¦]€ˆŒ§¬fIpUjvt[…—~mw~|„ˆŽˆrXK‘އs|—c44%~B(BLLjP aI2OW84=QnHfMBKQFC¢yc?FUWv]z•[roEXkg’ }PQ~Ÿ­‘ˆˆaW{b‹—r[Qkt=o Šhz”š}j]y°Œ{n_oaD)l„nvG2WY6?>Aj_2DYM—»…Žšwu‹ˆ ¸£—œš­ÇÀ¯˜ošœ‹¯œs€«§r¤¡‡†m`ao“Žmr|––nR€…\9GXE]‡‰IKTj4ba 2534QQ$%M#A6Q`)DA=0?RF>*"Klz!O].HETw93VG<OVPMD+BO1A@X8.M@WfTF7(<rgMp0]fI=fZ{’r*ynOXsO62 RlTK$><#7PYQ[bVH//CN@G]TSBAXZKN:N^_]]}SSVA9_wiW=AihH:zoRNFk_KZ]|eJX=n`3FFDgai20NUi?'TmRAGFCA;\T@7P6MB%>jIp>QgL,KmcX|REjfI[^ReY_8]‹YZl@R@JNL”X/8)ot@x|^[O,);STr>RpT\DWmBNfQh~W;Zu0:>_|_X^I;/4%4ZevtC0/B<B^KR^5MLLqqWRE`L4d^][lZPYcw_[7,GJJOu„tv`0>sA;pSPjgY_[FmEP;>043DwwPngMwgAjZI==7MmTP9B0;;0JLA-MmbSIZVc>5g‚eQURXMEE\UdkEVE&HTM‡|M;^A$DCXf‚P`j-BW\Osgjv;Qˆ‚NILXZc^H„e\<CAM›f;w|" ,15GL&B*@tP-k‚XOf;"K{G9^G@OIRG?_]@8W…‚cƒdNlOT_V<|Ÿ•H0JdvYRTjtBCpycdkEWTVRX|w@a€td[rŽŒfUwvYB=14M{o_Y4S:<T€x_xŸˆ{)@@>tux€lTbyZU%:hKs…dp[]jc[U\[y\g‘qPZS4^5W„l/;2FX`‰iim ?ZJ]~\j?Ql€wk‘n.VŠ HBP.'+[fMT}sFbicdMX†n„z3ewtŽ“•ª|š•}WaŒ9@2HjbG3 4D8NSQ.8:€lmQPC#6UjG9//(u`D%)1M›•\M?_¨¹ˆXaOLy3[}_?0ZwU3X{vTZŸšE,k‰aQE[^+Q?itu\GGT>"DF,,40JE75VIJ`D 0+SXXU@'Y;.yGIJ<9Kik`wmtkJaZ€mOŽotc5Q{€ jPƒ”0 ¡µuawPOAV•q7NIS( F{Ao?7>E#OTD3'Mcdt‰l:4Tn~pf[“mzoSIp\ir‚„dddi‰khht‘sV|“›š“œ‹‹©aup‡*8TaUJPIE?v¢tgaI=DDq„xu^IDDLSj…ŠX<A8BN_–^]GKpo>5`hW?NU=OG;wHNilN")kV›z`O:TdGPo˜fTR7K…k2$.ŽšeQVgqO#>x”z^`QbB-d…^k~^C9?’‚JHXkQRgt’}\QNPrWAf·ˆz`VE5FZdiwTB8Ln[MqB,\iI4ZR`qPNmcD7YUVCl“Q%DG*Ig„¹oCX{Z/5f…og‡}TMM-–¢_pšm\oB¿ˆLUqYNkT<]:P_?2E?>GAˆrKjcEpeJ[c[ehMDDg`z_/Dhjv]O FU1Q<Jnrp7Rf8-Rh@ 4clkrsM3=Š«„|˜tOie5¹»š”S.DH5ØÃ“sP3=>,>£o_h\ZQD?1KhT3]`;SiuYXP=c‡sjG]O2@^Z@KzQOQ@;?48W]e^]Z_[`iQ=7)>ZUKXcC’–‚–t:6G²¯’kwyF\`?²ª^[DGg],uL6Wr_5W$k`PD>Inf[g“[]RVU+@;lK$Wl25n3¨\Pv_`q†BbR6,~®sC4E 2 (F¢˜“™§~YaT"†ˆ‘˜sA3@)<HhV]h8"@3;P:F€^=\qfjFOjO<AFYj/)PmVPZCZw6faRjcOC# [S9KeXT[0.C+DmH-=5.3' $¯°«’„W[f>†Œ‚~MLYX8Wlƒ„_RIQTUaF7RIKh3sABb@,FB.4G*EbVB>49I;PTNL8&DDCIKFG4*E!.U#4B-/DJ3//-#«¦†zŸ›BRGUXx{^^I#@cEc}nQCXK85m]72: .4%"& (20F(IL/,@2!O+F"EMIPO.=0QVm;*S]6WSK'SMD]gr~—iBbb;Zybd4LZ_knljE7‚gJ:IS1PXTEK@E+RDU_.@8))LZKdg=7PHMkt5e/04>1OIS]J:6WgQS].dŠi^q…|J`LWxshWA:$<6d“m=216EN8_lG2&H*6)/;SY%5=9N:)CF8H8'44?#0!>@) /?*AI>B+&1795]O&74>lbBOeS#AmZlilfHpˆ9)9GD{Ÿ©“‚}_^Ÿ™g^{_J2'r˜M3[g4+†z‡gH5?S:}W[Z)7N?AS?BJd\^ChfNKkiV:9@IRXy€]dJ'LONob904MH[l:Mdf<?/4 $9?­³¸Ä“RbSKi‘—kfPLf?Ž»–OK>V9=f§E7ItauUV{c?TC*5XZeBID+K?>Pp“4%+DQ*.Pq¥LoZC.+4"]O€ƒS9+UUA:UvTHT_\BžÍ§ÉÐ?JYc ÔÅ«gDAvv=ŸiDH^RIRZb±¶|yOqy?NX„sRekC}tcb^E[]SLX[U=HLykK@:"ib\DJK,$B:q[x\7IcX8L<&f’uH7?2+¢ÆÁ˜…nN5E±²o„tO=KUŒ¬pddiQ#7P`\\A=KQWaS~dR5V~7PM)g;Y1>RSlEWaW];4M,HbrUXcZD'=2U|CB(_u6/CDPR&9QlJ)=ªÃ’±†tXJ9)‰‰wpaRKh~j|[9ZJ?UR^qrp?]Q@BO<eVe‡rK^2'6Z'a]T?8]E3UPTO@G=T^MUQaviN<cRKe}[KWFaj!hP8*L)I5Ç¢±¶»}XS-;Ž„pEqrRZ^eƒ}R>`kR"K[KSf'1D@_=€R@JZWM [_7lDG`OW(5c46ALB)ZD!'Y>ZjWb(#dRU2DV$%6'*, •|‘޵šeHWw‚Mb“}W:DSLS]{nJ32REFnX+7G_fhWB^g)217`@!!NC:@4FP;08OtA>@*'K6/."+H8;15DcaV:3+& Kndh€okrcdgyTY'8MO81tqf_D(%$$W}K>"@R@/?44>)$3?8&;".< :<4+=(Q]ka= 0."_#@^›[e‡ScPCwDghq#QX9UƒcqP\G4<rR|X!.!.2!CU$; ,P3_wZ9lIG&-'0>T’Árh,22ew“¬wK<CYunfr˜“†ystœ°Mdvn5ANK0YLx…M:! \ef: $"#;5.2Z,¤VZlYb<:Y¡¸ÄÁ ~†”¨Àª²×ÔѼ‘±¬¿˜|”ºªš´»³»“¼º¢™ª¼ÌÀ³£—­°Ÿ¾ÐÂÏ®—dipy-0.10.1/dipy/data/files/sphere_grad.txt000066400000000000000000000056101263041327500205470ustar00rootroot00000000000000 0.00000 0.00000 0.00000 0.00000 -0.85065 -0.52573 0.00000 1.00000 -0.85065 0.52573 0.00000 1.00000 0.52573 -0.00000 0.85065 1.00000 -0.52573 -0.00000 0.85065 1.00000 0.00000 0.85065 0.52573 1.00000 0.00000 -0.85065 0.52573 1.00000 0.80902 0.30902 0.50000 1.00000 -0.80902 0.30902 0.50000 1.00000 -0.00000 0.00000 1.00000 1.00000 0.50000 0.80902 0.30902 1.00000 -0.50000 0.80902 0.30902 1.00000 0.30902 0.50000 0.80902 1.00000 -0.30902 0.50000 0.80902 1.00000 0.30902 -0.50000 0.80902 1.00000 -0.30902 -0.50000 0.80902 1.00000 -1.00000 0.00000 0.00000 1.00000 -0.80902 -0.30902 0.50000 1.00000 -0.50000 -0.80902 0.30902 1.00000 0.80902 -0.30902 0.50000 1.00000 0.50000 -0.80902 0.30902 1.00000 0.00000 -1.00000 0.00000 1.00000 0.86247 0.43287 0.26225 1.00000 0.69511 0.16208 0.70039 1.00000 -0.86247 0.43287 0.26225 1.00000 -0.69511 0.16208 0.70039 1.00000 0.27079 0.00000 0.96264 1.00000 -0.27079 0.00000 0.96264 1.00000 0.70039 0.69511 0.16208 1.00000 0.26225 0.86247 0.43287 1.00000 0.67870 0.58769 0.44044 1.00000 -0.70039 0.69511 0.16208 1.00000 -0.26225 0.86247 0.43287 1.00000 -0.67870 0.58769 0.44044 1.00000 0.43287 0.26225 0.86247 1.00000 0.16208 0.70039 0.69511 1.00000 0.58769 0.44044 0.67870 1.00000 0.14725 0.27221 0.95090 1.00000 0.44044 0.67870 0.58769 1.00000 -0.43287 0.26225 0.86247 1.00000 -0.16208 0.70039 0.69511 1.00000 -0.58769 0.44044 0.67870 1.00000 -0.14725 0.27221 0.95090 1.00000 -0.44044 0.67870 0.58769 1.00000 -0.00000 0.51046 0.85990 1.00000 0.43287 -0.26225 0.86247 1.00000 0.16208 -0.70039 0.69511 1.00000 0.14725 -0.27221 0.95090 1.00000 -0.43287 -0.26225 0.86247 1.00000 -0.16208 -0.70039 0.69511 1.00000 -0.14725 -0.27221 0.95090 1.00000 -0.00000 -0.51046 0.85990 1.00000 -0.96264 0.27079 0.00000 1.00000 -0.96264 -0.27079 0.00000 1.00000 -0.95090 0.14725 0.27221 1.00000 -0.69511 -0.16208 0.70039 1.00000 -0.86247 -0.43287 0.26225 1.00000 -0.85990 0.00000 0.51046 1.00000 -0.58769 -0.44044 0.67870 1.00000 -0.95090 -0.14725 0.27221 1.00000 -0.26225 -0.86247 0.43287 1.00000 -0.70039 -0.69511 0.16208 1.00000 -0.44044 -0.67870 0.58769 1.00000 -0.67870 -0.58769 0.44044 1.00000 0.95090 0.14725 0.27221 1.00000 0.69511 -0.16208 0.70039 1.00000 0.86247 -0.43287 0.26225 1.00000 0.85990 0.00000 0.51046 1.00000 0.58769 -0.44044 0.67870 1.00000 0.95090 -0.14725 0.27221 1.00000 0.26225 -0.86247 0.43287 1.00000 0.70039 -0.69511 0.16208 1.00000 0.44044 -0.67870 0.58769 1.00000 0.67870 -0.58769 0.44044 1.00000 0.00000 -0.96264 0.27079 1.00000 0.00000 0.96264 0.27079 1.00000 -0.27221 -0.95090 0.14725 1.00000 0.27221 -0.95090 0.14725 1.00000 -0.51046 -0.85990 0.00000 1.00000 0.27221 0.95090 0.14725 1.00000 0.51046 -0.85990 0.00000 1.00000 -0.27221 0.95090 0.14725 1.00000 dipy-0.10.1/dipy/data/files/t1_coronal_slice.npy000066400000000000000000020001201263041327500214640ustar00rootroot00000000000000“NUMPYF{'descr': 'ýÏRßý/òÕ­ûW]—¢¦vwvÂóœî>}ºŸyk'rîë•Ä yÿR;‰ô_ì+èýûë~ã¿ÿ?·¶ÿS^‰ÿ›ïþÝuÞïgŽÓ"oÁ¼¦^ÿ¼þyýóúçõÏëŸ×?¯^ÿ^¡Þ Ùÿâv¡E+Ëë¶Ö_Ûà;êÿµ oØÚà¯m´WõÖmÝO–7ûkéüS;ý¾í_ÛÀkÕÚø·Î–ôÝe¿™{ºÊ¶Òšòy¡MŸùß{çi£ï›Èû“ëkø¯Ã»¾Êº}þ§þçõ¿yOÄ7/=eþ†uë+ß_½:@?ÿV¶›.‘ý'ä&8ëQXÞ;;Œ\=uxŒà°KIòùœ®¼ßÕA¶NûÆSeûiËòy “åý”DñrÜîqå¸Cò>˜ê |ê˜yŠžWÞ»_“m f 9O$í7“üÇN{ZŽùâ4ÿyÂfàxOÖ—ï£%–Ì•ãÕ_7GŽ×2‘\—sb²Çí»o¶/iµéò»Úåº" jŒ—mùcާ÷,v".æ> Ì”í³äû@‰2^áâÉe¿È³óåøá4·åûОcåýô…ƒåwîè˜ëwMsõxßúçÉ›Ç~rý7_ùFÞWKÑ[çGÞGJë,×™}ióÿŸíÔüÚá ÌwxqÌûò¡‚·@FÌÅÂÓýóJv߯n"x OÏ›Œ–ù Ìí#óâ¶-=Rñåúñ˜:XpÎð{œ·çvÉqôsa¯·‹ÓynìÃqJ‹çíë&¨_ÆçÛ‡—_uýxåy=<À>ê_ÃeëÔÝ%ç ¬Ë:YÇe´|¦ììñ1öÈë¦Ïž_‘ó‡G­ÃyV&ÀÞ_]ó7øJÎì›b‚ÿ>C9ïÎðÛ‡ÇâÔßàw‘²SýßÓÎùÎðûè¬Æ8~‡>1þ"ùäÿ<ºÏäß¹óÎÎ’ßM‰ûz~šüÎ)UãýÆp9^ Oû jqz#dÛ0ã ùݱ}tÜÄZ|ýúòøÁ2>ë‹Oòû-÷Ãñ~\q\B©›ÅÌ{4óŒK½†qþq6¿tr=Æ_ýy píÉþqŽˆŸæÿ]ø¥4“üx%>£E ÆûÇßXIö ¯Ú‡ã_/;!Ænô:y^|~^ì2É#Ãá¼Ì®ÿ¼.Úq뜋ߟúøÐ¸F»4ûQûç}‡—x¾t,æ8´'7cÏ8¿a<‰\I2Ñ?Ú?¼·t²çüÜÆmRËxÿçô7ΣK¦(n'øýAhଙþyâü¹ƒ·b¾4ž9WsÅùï#üîÈ)þqæxE®g{ e«)ñ5Ôfó|Ùïnj9shŽ7ò²ïŸ'kQàjêà!zÿ]ÿoØ‘gŸÂ{ƒEÎOŠñ+z_ôsŒœwâ‘~6º4‰Ì[à——§ª_¿@>Ãùãø“GDs—šîÇý w]1óKL|/¡ÖOO÷dçi×o—îŒÒq1xê¹&Î￈ûP¿‘Àï[uÀÛ¯ò]CüSžååÀာ‚³_Æýk¢}r?Æ»è ¯NñÛã«Ú)Ç×½Üz¢ÿøfïÊ‹ˆ_ú%ÎíŽçç|oT¿þú9ŒSºìðwÏäí¿ßpþ¯dË8ºX%Þ]´Û@×p¼ÿ:è)ËÁ¾Ú,œæÇ5ýNô‘ísýó¼UKâý0í9<úÓy²ÿ®²xuWlïtû‰~}³ÿbÞ}‚Ú„ñÿÆus7Œÿ¶Á?Î=ÕSáòŸHŠágåÙô+ÿœíŸgúÓðé³ð÷s?˜í?>yã:Çç3¿y¾À$¿Ÿ±ãéõÑ>iÏFž1æ4®Wyùï—|ï^¿îF^ÃãýöI?eŸëøq¾ƒ­O÷ã=°5ö·¸#S?ͼÉìQÇÍÆÿh½Q²ãÄ÷­cò/‹Á¥óÁáI~{öò|øåSÍhÞÊüØîOy@ðöSý8äï,n1¯Wü‘çóx¼^ÆI‹‹â—5.Ñ.ÏœqäwÌO—y=WÛí™êÇ%oü“¼’|/y;Ì×G¥à'ÔF¼ˆs^Õ¼üö¤y¥w?Ãe{a%ìèùU°FÓæúíÂó{Ãþü{üÿkÿü7ôgÜ2.Ñ?zyÎ4¿Ýóþ½86Ö#âÀò¬Ñ5à×­­þBòcú޳ñ}¯ÀŠ\8ŸòËïïä_ä«Ä7qá|7~5[Mä%y‚ßÇ÷ãÄÝw üç@¶1þë".½8 ½ë&n .©o‘©½“w3?2®~×òWõ‹ÜñÅøúžGbü7LJ¼~—x$¯ |~cŠßnœÏÆä¿ôÌ÷BMFÏòÿÎì•ÇUÿÃ8íágfŒÝ(£?4½ƒù„âÙtå{/ˆÁµ{­×gùœñ#Tà…y:<ÿ˜ÿÿÁ,íøÇ•ñ™¼‡¸§Ÿ¥?2]SÇ•vcüUuÄH¶çfÇà_ýó$ãCÔ#5¾™éùègÓ/(Ï0=ð͘?õä¿Æ;t?Ž?í†üŸ[ÜS{ìZ<οe\â¸Ñ¿Gæwû$!_f¼ ýS÷1»¢ÎJþÀ8¢<š|ø2{Óy0>H>¦×eøÚߦÎõhÓ[é‡4nÒŸsþɃȟÌnŽlÇ8ªßá¼Q—2 ÷m~tF̸+Ÿ‹Þ˜ ™qx@ÖY:ÞÂIVÃΨ›¨}ÐóâÐí»o\Ì<2¾ªŸe>fqXí•ú9ï‡ãI½‚q‚qÑt =žùyòÍ«ïõÿÔÉm^zŸœàŸò »Nõ›äá^¾1.æü÷‰ãCšÒþµÁõãÃtWÔ¯¢?ÜÄVù¡å…ŠgòËà;€åW¦; Íðãœû™Ýj~k:˜ú æ­Œä/‘5 ¿Ü>'ø·üJu2ÆwÆSæQª'aÔég5î0ðúy\Ž3õr‹Šw;î¿F"/Ô|ÎŽ“éIð|Õó˜OÙ}Ò>·úòøÀÀ˜qÕy¶8­¼–x ÖºÃKèWÈë¢Å÷ŒW{Åï4/£]™_¢þÈø¢~‹~ÄË70~ô«z|âÛò7Å!Gϸ¸–€ã*ï·¼Fõ6ÆgΗFùç…<Ét)å'œÏОðOê·-ïQ^ÃüÖü¹Æ%Æ?ò\Æ ÚqÏ:‚éIêÌ5O0ûPžayù5ãµúaÚ?ñcñTó}ægoŒW_êwfgªpþ¬nðÔá™þù§°^ÄãP"æøzþpŽßþg¨ï=è‹ùƒéXÊ·-*>©›ÐÞm<•¯R?3@Ç•ñÖòmÅ=ë[äoúQúÏoÄ佬Ïðú©ûó|¿ƒ;ú3ÖÔL¯ãu²~«öÇï9ŸVÿÐüŽvOžÅ<”vϼßêô:>^œÿU½ÅâŸú#Ëÿ©wjÜbý9ðçF䧃/SoU¿p¯.oùªŽqkõÖqt¼,.2Obþ«qž:qMÝ?œ5Åÿ}™Ý–ùIì|Ð}á¹þßOÔí<¿0_ýì`AJ؉úÁ}yÇþO]óãñ¢±~?`ü›z„Æiê‰ôóæçX?UþC=”Ç¥NOÿêÅ?Ék˜ÿ3oäy­¿÷K?¢Ÿ“WQ§4Ý:ç]èÚª‡PDZøóÁ!ëäëŒwgú{Ï/ ®¡ùóqâõ^úG«ë *>SÏëÑ<ü^=”ü…ó`v­qÒò³ráÑŠ'èÔ‹©›r¾¨gè{úeÓ‰•÷X™õ½ò#ÖÓ¬ÿCí…úyºá^íÂýá1Ø#õhÆsÍ¿-¿ãõ«Ÿ°ºu£¦ÿ7Í7+æ÷øŠNj9Tޝ~Õâ'õMö(ž Çú=ýããµÍö¯Û¸«ßäñ ÇÄêÃÄ'õËÓ¨KPGÕã0o1½BÏcºã±òJÏþFúíÊx§æ¹Ì+¬þó_:PLÜæù±æ…Öĺû2˜«þi:Šòe«Û¿'L礞Ò-]¼~l«ñ“øõü6êÊCè/ÈŒ§i>e<èh=ø{õ+´æ«nõçbôQoüÁ÷ÝšéǹÕÍYGо//G]˜üTõ,Ë÷i/ì3YQâù’Õ[ðeu?úoÖqX¿×y‹”.6ÖŸæÿØCuå5ÌÌžXŸÑ릮eãÃ>òlÕ!—hÇ‹?£¿˜7Õ¥­nÎx¡8¸W72ÝVíÕîŸu@=¸Tfćñb'–¿h-Þ¯Æ5Ú7ï;xª•Ø)û5¬þ)+|€qŠÇ¡þkº'ówò·Dgø÷³:¥~N=} VÇRþa:ý€¾çøXŠòœ{óÎ{ãý¨Ç‡%bðòñ7^¾õüþà åû ß/­Ö-™…÷~‚¸¬:˜å§Ú'Fcuö¯ªžc¼ˆ}l:^Ü\àg³OêlìOÑùóü§ØkøêUèZg±zC©ÌÀ%û½”§¿Q]ÀtHÅõ>«ódi/óéüRYø+û4¨òx/Kƒ>­ñ×ãksýø²º êC‘f•Gîñ_Ö¢û?è+Ð2Ñh?X—áu['ûZÔO™þ«×Á:yˆÕ‡®g@ŒæcÎ7ýpÿêL×Q¾cýuê_¬ÏBã,Ïcó¦¼ÍêûŠ{úw^'ó'›÷ç–ï(’ ßù\ðí$”ùNíu¥§ËÙU²]Y¡×³Hö»ÕF~ç䨰\¾ßß™œ¯^Å%òûj)ËqŸyEŽëñ{àøÔò{æ–òz4s^¬>¦u)ë«áVë´V‡Wœ0P ?1FûÛ,ŸSËëa~c}FÔñ5'Y?¤~OÝš~“<Àâ°ÚñÎ~úM³CÕs©‘?\òw_Æ‹uè·È?¿PßÐû±y`Ü=Öy÷”¼Ž¿"8þT>÷ò ì?5¾¯Õï|eµ|ßhš|îñ#9~$Ý ünŒƒýÆÕÅyë¯; ¤!×|JìÅËoį’÷vûñòtÙ2ÞÜëéç½|¸Ò|ÈiÜöO½Ÿ¼’}ˆºŸÕ#•›~Êù‹> ;uD®ü˜õ¨{û⨷yãŠ>ÖuÙÄ|‰u9õgÖW?g=îCó»^Íc<ÞÔøAðo|Š|˜ºüõ²óüãG¿Ï<ˆãnzù¼ŽñlÐdâ@Ó|‚óà¼Ì‚_/N .#ߎîÔß™½²ßˆ×£x%¼8ÝC¾Oû Ö©©ß íí.ç VݲRq‡¸±rÜJ½¾ur¼ÇK¬Ññ’ýɼ<x|(ú‹—2OÖgøÃMÄ«)‰ç˜ÇiÀò¨ïÆ"×üÓúŸØÇ©}¬ï“Ϙ_ÒõCVÿQ>À> ë‹Õ¼Àúد¢<~Òâ9ó¦wÌóÛ×÷ýÝÇÇúú5Þ™gÑ.™Ÿ©½šÞ¨u;êuä}ä;¦Wè¸0îšîÆ: uRêÔß´ÏÍúX÷PÞ,‚½Ô?"¸ vœüƒü>K–µòýüN‚gOA?H—]ìÂã ÂCÈãÍÏ1îÔk8ß?Ï|YŸî¼ÌøÝ‚”rüP÷89o$w-Ùz~OìÌó“«w‚_ÏÊ÷^¾Ÿðïæ-PâÆ7z<äyÉN,Ñë“ûqJæ—ã8=$|+°çJ‚Ž÷"ÿy½¼Aή÷½'RVÆ'Pn„àŸù ý¸ÕïY‡fõŸœ7ò*Ú ýñC½„zõ/ú1ëw$b=“u4gVob¿¹âÇê™™žìö ø'±¾W½Î/í×ê%ú¹é…ú½å©ÌST/6»Ð<Ôê…\OE}›þ@ïËê[ì/Òþ 1¯“ºE´ÿD™÷è#ÛÅOGÇ&\¸«¯‡ï-…?§nÌ~!Í›xßöšsCêá^ž-8qòvº¾~·câ-²íþä^¹Ïu÷Ëueyû~’mðj*ùÜMÓJ¶^^pH¶9âÉþ¶þ"×»i†l•ßmë´Mö+›XÎ=S_ìÊt ÖÛl–ïƒS“ÿ(çiwOh{VÞoîö³·M‹ƒz¼Ãò¾o6Ù†Ü4òûè˜Úò}ðÕ‚ûÀ¯³Èöä¨ãòyÓ;§ä:rT8/ûqNŽøJì!´%؃—ex4¿/t©yÄýáy‰‘‡¿0Hp±Lðëùø¡ßFüx–σÏ7†Ö(žÄ.ÂKšË62j¶ð­èåšbá¶‚Çi]Ãú]”’'›£vbë 8jÔ‘l]×U¨}˜^¤ù2ýŸåÿ)ËI>gëdÙ_Àu,óÅu Ä!ý¼õ ÞÓ¿gõ8ÆGöƒñ:©ß1¸§ïÁò,/ò[—§}jÖS"­øãÈÐΘ§:ÏÈÖ‹Ç2ÿÌÇ-_¢NÈþ_µC«÷_í*xwÏ&ŠÊ~Gή­¦c›u+¶ç×§íïþ,uåóà„Ö»äúnæÞ-Ÿ|hŸlwõݯö;X0BÞoM8¨x; Ê-ç ½›ëÆ­‘7\s£àÝãýÞ‡>vMì&ðgù<²ìŠøu®ñÆ[ò 'óÅj7‚c/ŽŠ=8_½.ü)°¶ â‰æÆÏö¹ðûͯƒŸÕo žÊ‹xÂþ|Õ¯‰«oe-Š|@ù-uKâÉú{TÏ·þsÆÖ•Ô¯2¿c}€ë–ÙŸ®X^ìÏê\ïÿ7_¦#kÅê,¬£¨®MÊÖ…p= ö10®Ó8mëÛ´lºukö—±ÿRí›ë Bµ³®Òû?ïfì‰8½ã ä‡Ú_,vúˆæi¬ëÚ}v,žÞâ–ð–@É ‚ëÐâ%âߣ_vœוœê.oYp<§ð6yí±[¾>|ïûd:¿Mpýð¹ý)øýª.øÐùÚØ®8*[·V-àüÃYbÑDí÷+wÈ~}~ûr&ŸÀùoŽï‡$Åu&þ”áœï‡^?ü»ùg>ì?øÌ¥ ðëwG­Wœ.Ã|ôAÜø¼Ù&ùü¥ë² ùñâõ7Èù‹Ô•­Ç7äwÇ]ª8‡ÎÀõÉ|žê…ä^ÐçÄõ­ÔgY?S=Óúd›éLJSª\ÌúGÖëB« }ü³Þm}'ª÷ßû\oübúÆLçe_°öÙX¿¯ÖI­¯…ëøœíǵ>]WÅþˆðéÏ·e+‰ø¼¸ŠŒ3uê{ëá†Á{'|‰ùxDæ3œý£rþÅÁS6¾.¸‰¤8|~$™¼±þõ«y‚[WîÜKÄ¿‹®_`\aÿ+y_ üwµ³UjGà™ª‡“ÙºSí'Z÷±|^«øµÐ–O÷3ãßÁš+ÏÈõô?¾Ñº*xõ;Ïàý‹W$âåÂg¢ ¿<† \~t~ù³¤‚Ûൖà-e†ÿ³ ÅúýiMோœÇuÔß þ_îU¹¾àÀW÷áU ä¸÷;6a[éàÙm»<ë› r\/þo½ÝI¶‘»Ý`WÊùÜc亜ÕpŸ{º >¬í×KÇ‹ú+ú©ÿ@g± çí¾ ã@ž7 ¾¿–€uéª/;‡ß‡]éz¡`ýkàC-zËçŒËV×U;ðòèɬãq]ûïé§°uìe>Yw×ßZì᳚܇öÍRçå:c[¥}6V×eÿ—ê9äA¶Ië\VÿÒ¾fë{RýŒugêpR+àïU¯ãýVnA~¥ý±ÌWÙwÉøx xÿã°Ì{d^<òÇ¥uËGøNô‘åûPá;‚_÷xù>”z7ð²â:øýìÎÈg;]sfØ­÷»Gç~ûö@Ástû0à¯woàótFøã¯ÇÁ>î&‘xãü\êðòŽsf•?œ³ÍV9_ïÙFvøñ˜Ó öñKgùÇÁ‹RÜ£8†þô Øe®t¸®…ƒç*=…û‘ñ'ÙOëÖ¡·7Êïë—xäN û_¸Oü‚›mȯ÷‘’§GÞ;;®WyÍù8±p‘Ýr¿¡; ?"/bÂÝ>ºë‘3‚wï/Žù^ûRl=ײ[ߓ֟,ßû›ëÀ"•Ö| ¿c¿ ×QiÝ›y)íÍÖIñy Ôýµ¯„º ã=Bu1ë“Óuž¬C9)ëAŸ]c±Þίý¶NëäúöÀWIÉ[£ Þ¿Xù8øó{ßî÷oÊüê&–y 5m &RLðà¼3_öwÍ‘ÏÃùK€O¼yúÊK+€ƒ)dlzùB¹wgÁ¬dÞþ Áß{ŒAþüö´Ã1¸¯]HÞ;%‡!´q üX9^ôý9’¿;žÛ.Ûüã±YQðS@ÎíyEö§ß¿—/E^vÅ.BÕV#?¨ùø[›…ÈÓݒûÌ$ú’Çç×­gqþ$—T_ª"ù}`Ñ¿€ÿ)‘ÏLJ8îßFÎ.E|©“ÛÎ_È6òF9nèÍÄÞ¢NMŒÇUÑ硼+Úð´èTáf$nD b½¼èžçyÙºAÆ®sÖþ9ö‰zykL¾÷zñy‡ôçÖ¿¬øf?˜ñ®‡`_®æµ–ÇhL~býâš÷ÒßDÆ‚N?ñ%è•êÿy|Ö3­_8w©ŽrÞl ýãI×úÌ¡&ç€Çdÿþ½VÁ¿{÷]ðçÃ?çÍÜJ)¸Šô¨‹ø¾c>¿ÓYðýc-ô›ãµ°_f»·Ç÷©=î’V.#‰dzâ{¼¿¶ñHý©7^ÇuבlõãÞË$O æ+¶×oß‘î‹agÛÃ8Nù1úkxÉä'+À‡rG±÷W€Ã†U¡«v?xA®ïb~ä͹·â:‚åáŸ<)»Ë3úÖ a¿‚ƒx´q2âQïšìýÁ¿>¬ŒüeÜ]ï›~/ÜçGô¹ ^~ˆzŸòãe?C=’ýšoZuUÕ³ÿ(/¸ßŸßjÏYR¼²?„qÇž‡¦ý~Ô1­_Uó[ÇÊþ]Õ‹Ýu¡OÿRu—Û WžŒÆ¬c ¿á¸ðùYn§!¯EVʸF¾M‚8>h£Œ{`K l5ÿt/W†}¤/~2\;i,O®ó ò×ê-ÁçƒïÁ¯w(þn5ÄuõÓáúGöé}ðÛK ÷ãÀ)ýó—;oF¾?œòüjÎWa—eQgœ»/ç܇î6“÷Ѳgcñ[üg±7îWÔ2ä~Õ>âôj$[/>‚Wí>Þ¶è¸ì¹9芜¯]¥ßå8ÓâÎa\sÀ>WeþìøHÜÿÅ5ˆwOß„ÿø~1øM…Ó1ùPðNØÁÀµÇÊ£åw^~ŠqXoOëöúõwÔ£š¾Üß]>þîÑÝþqw_Ú]Dý/õóèÚtoåÎs!Ì÷ùÓ²ufãçÜ/ºçOMŽy|Â?ËØ¿Ÿ<Ûªù€÷ñUvûñÂz/õ~§Ê‰#Îo“€¯R…°ßÜE»ý8r/ïºû6xIïËÈS^È]6Å£‚ÛàçË/ÊvWIÁ“³fåàu‰HÜGò>|þeù>\-½¼VÉqYŽß{¿¼w×Âøý×Q©èaìÿâ膼øþÏÒà5ŸÅfYŽñOžþbýF±_êd¡ÇÆý¶ºžWmò©áy¯œo¡³1Ž-,ûÑúŒñ Í÷u— ?^X ~Àþ}΂Չ‰×ª'Gü-üg«ÙRŽ£z¤=‡Jõwæ»Ö¡u#Ó…øÜ4>·™Ï§Y>t‰Ú“䱌wö;]ʾ:öGØóØr~½Rý½3é5ðÕåÝîoÊ8S¼úpU­p]hÓøÓq…ǵ¥Á[ºþŽýÝêðg™Þ„¿ÛSx¬þæsñ!l³mÞÜM¶‘Œ`¿ÕWáÇ¿>!8ˆ~š ù©æ©n™¼°§Ž!ØIšÛ² U(€¸ñÆ+àeƒÛ n+~Œü>n9øÒ[ 8NÿvÐO¾‹>&ö|Y¼¸O{èÙs[?ô> ½Iù…­Ôz×ÕÞï‹Ï±'ÿa_­çæó§¸îYûš¬¿ƒýÝZ? zñ¬}Zá9Áœä=ósë_Ò¾Ö+=Ü@לRü2ujð†|áÒmA>º´ÆMëJΉÉÀï×½€£9£€óŸ®ÁÖöƒ?0vðÓ\ð–V ?Öe•ïC #^çÊ ûÈ@¼ï4ºJ§ìÔžá·2¾¡ùcªhŒ]¶í‡¸pøý]jïÐIUç‰<v3ÞN‡ãvªx4wäM¯ìD¿Ö ‚}ó_ųÊûhÐOY>´J¶áуÁ³ºžî¥|Ê8ãX±ƒÄ•ж^àM½ÈSÚäF]ú±Uˆ_4…¾0öI¼w\äÙzC=ßVì?4áä^ÿ8Z>r¡ƯÙPŸwQ7œÜãvø¦Äµè¬¾°—©¥.X‘ ý¹= C÷î}4×@Ô¸@ã…óVäºNð~_^ž–óh=Éž—Àu ì?Òõj´òzêšöÜíäÞLuýhìÿäú;ö¹ésè£=gBÿIpàÿüAë>¡SÀOîh޸ܧÿá¼æÿ ø=:¸ÍÙÛÖs€ÿßSgí²â8›bžŽ^€ÿRžÞV?fþÜê'°mvçy})æëj*á³ÑkÀ¿7ß’÷NÕÊðÛyªwçzBÿÿ² ¶MÀo¶@\{g9Ο·á~ß*.x7¼ûápÜÅ7ȻɯÜk½€ïÏÂn’•„ßøv9òí”õ€¯>™€Ã«ÀÔi†<¸Ä¼4Àu%k‰íâa¿%Ûˆ_òx²Öã:ÂŽ7†3Ož”ݪÆ>lW%×>ãÇô8¨×΃¸Õ(·Ä!÷¡äg€ç±èçÐüÖã%è»;u3åÓ¶ž^×éÿ쇻ßû¥MÇäsδ®fÏÖõ´ìSµçŠS¯U3Ô½€è:¶^zG <^û¦Ù'Çzµ;3+Æýì;¨_ÖÌ ;˜²Tùñ§Àeý¦ð7-ûÇò’d'4Ï,=]yRèä5è73WÀFœÅqKô€Ÿ~r%ì赫ðGW "~ïè {J¾~üÐkˆ/š×QÏ î5:Kì Ta¸\¿³p\GdIulÓä=è·³@½ìÀS¡tðÊÃXOEÊ">iipQ2èI©*kôÈÀ®;°«’µÐ_ºj0ì¨Hœ¯Ü:ø‘Ë5ñ{òr­Ëq|"ߎ‚~Öu"xδª°{ÕwÜæ×QïŽ >¹ç üùöß1NƒOïmG¿ÆÑŽ;áZc¾T_¶ë}nôÚù÷+îñ~â/2žÁ7ÃÎOF#>7îé^Ð…´Ó]r }«Œ|®ªæ÷û $Y-º¢=o€ÏÝ¥þªÏ?³çÞ±?Zë­Ö¯ñó è:ß’ødÏæóUõ9}|…ŸM ²·;xn =üÂÏá÷óÍEÛ®HTíã§z¾3|<üûØmÐwT'‰k¿—éIè݃«€?7¨?úÓøÇ©Ù`wÁߎìüi^éY4&?´š¿ª1â}Ò®¨«]n ?vé:üoã¸ö­i>Z_|kÑ ÄÊÇÀƒ›ÏÃû¥o÷åFÀ¶O«ºÐ|l?…ü>ùóà#/´ÿˆ}‘‰«GNÇùn‚Žõtnøæá…šC_Š®{í3䪻:O?&ó=ø#xûÅ.ȳ÷ÂýÔZ¢q"öQ¹9ðîÑsÝŒ›Ä;:âû[0ßZG ’בêM9tÈ<Éëù~Å<ÎjŒ~<Ö¥´®Ìç °žÌ~ ê-\çw¿/þÝ ëÃà:öÝó9 ôÛìÃ×þþh¢‚À{¹œàû|N£ê¦¾¿kçóªþï^ª¼MùùY†§0ÿ·Ëa¼–Àø¦üþ*ÍVÄýÙ/gÊãÃsÇÃÏÿù1ð<ñ øÍÃ7a/sGÚ¿^ê¾°7ðÛï5àçé^ÈOWíÃü—H‹ã+/r>M€ŸJQÇü;øíâ_’þ~ôgèM•JãzžŸ†<{ÐØÍÜVà[©ŸNÕ߇;5Äýw #oXÒu©y™±U½ˆç§)óü~…8ù<>'®§Ï¤˜¼'Ú°-ìCùH°~1Œg­~ðq“0ÎûjŸÓÿ™¶¡±w®«Þ~Ä­'¾Fßý4êÉJBÚ߸ÿíW©ÿ:­.m÷s°ÖÇðGZ¿q–E?ÊæÔгJlÄý¤¹ Ïõ0\ǪÏdŸW´ÌO’'ÛóLù|„û|yùow¹~>gCë\ö|þ=}žR4w)ô!w˜Ý¾by¬_8 z®Öi©çÚ:*>ß±@FôŽi  ú!ñÎ×ôÞ7êø»ë‚7„Æ£Žz{pUñ<üv¾kÊoâ÷«Ý§<ÜþûÄ9ØQ½!ø¼RðŸÚŸôã„y©åòÅøéÀ€©Àñzà ¿‰c§ÆDäo6„ßW^ãÅKøÅÖWá×?Z„ó)Ïê‰ë§ òàm`ouwAü×ÁSè¡lðŸóÞÚí?¯é²¡Và-Ú'”Û‘«€W͇"—6ÀN4.xñq¥{mì7÷¶à=¼ú5ð÷±ƒ€ç€ï~©0oéçâ~vÆýõMºõÖ:»bîã­:°«èièK Cùpqi¬s8=uŽË­OÖOÆõ4Z7f]ÔÉÛ~ÿ¡ +WØ_×GÝïËËc»Èï¹¾ŒÏQ}Çê_\ ÏÑðâÖe¯îŠõ'[ãcÖ¹ÚóùáÚå´ÿ?òÌAÜg¶ðy­C¸e~¿8õ ì@ëÃáï·Ágxv ug7ùÄ¥4¿`;zÆkE®ýþqsWÏ]÷èÝ>Ó1©/†šÝæß:ÁÆàñKë‚¿,¸kS/ˆs·]¬Ü‚ëÚ°ñAãn¤y.ãS`íêá¾æL¾JYëÞÒe—u6¶>ê뛳ÔÀwnìãßIB_´öÿGJÃófâÆôÞï‹}ò¶žŸë{ùú$KŒ®yx¡ÆÕÕ‡ýp~¦Ñ¿¤#Ü&?ñ_õ&ðí´çâ*î"›.Ç<ß"ðù ôÕéó,<þô·úÿƒ'×¥ãÇu9ÐÿïyN¿=ßTŸ;ãܺ‹uBÕÀžsˆWÊ×øœ ®gvv>‹çwèóÓœB›°]ó>7Ûm»]üùŒ[ì&úYjV ó¬zG¸V~à½pøÝeW€ÇOkõ{èq_fÜ«ö¹Û|öK{þy«szyËे.«ý‘¡«]cxThüL|^-/ôÐUƒÑﲯ&tß ~­ýÎÖ¯¯ú û-¢9º‚ï7ݶCÇשuŠè²F°ÃøOàgÓ†€K­/»Ýûb ~ ¾½'€m²qˆ)"¿yy ÆuuôW,¬€:X‡EšÿbÝõLç—‡Qï~£*xŽÆ›ðþw¡çOÉ „q|ô.üFÖF°cêÏΗ¾ÅÀ«?Éø¸k¿¸»ª÷³¯\¿gÏÃÓõŽÔ÷ùü>7ˆý?ž¿ôwõû{çºî2üõssývfÏÝãßwZòú¶ƒ¹{ík0;yºâû×4N9¿ýŠ:Wú¹èWÒ:û¾½|ëñŠ'Ç:=Í×X7¤ß î CuœPýœð_Z¡º¬ê9ê‡ÃõG€__‡8ñã—ðÓ-²Ëü¾,s8wÑ/Sügé‹öª.[gÏ#ò¹;d2æí¨>Sv×vúâ—’>÷ú:©ë°/:Üñ-Øï†VÀ‰öŸÑÃ}§—S//×îûODœÓºA¨ÙøåÃÿѯòÁt}Z¨ëÇày²¢NðAUØyÿáÿÓÝ‚]·Ê#×ËucäY$/ ¿ ÖêÃç­®­ùqy~³®Ÿkñž÷âNÏ™ØOëø“x-3]ÎZ0ÿ¶ìßïì ?^)ˉ?g}‹}ÁÌ¸ÎÆþ~ŠöÑ?X+ú‹ý‰û|ñy)÷þð±1ðçº~Ùžo¸4Ëàó5¬SÙö/¬§Ö~6>2Rg>òƒE{úíÙËËD? 5øj•ÞüW®¤Ðå¯.ƒ¿M•}.«»Â–+ ÜÕ+‰¾æíg ßmùãܶ4pTíâ…ÖýÃûÛÓb~ŠÌ—ñvÜ|*"q8Z4õUyŸ2+>ÿ¹Ø…;ø püâVÁ¸ÂZø÷£îµ¡‹ØG¤O?ù]ðVô«ÎèÍ—Ö®âú¦=Š|Du'ê3Ô[C+[â{]?Ãþ Ö‘‚¯½†ÏU§Š<_÷?x+øâ_ªßv¦õ`{^E†~è úd9öë^úêÑø‰Æ#ÆÏh‹’ðCiAO ÆyB™a÷7÷"Þê:PöcpýD°ÃL±`ùŸêgÿ༞:Qð¯ý—NúñêÅ ÔµÊçn´Øž/ÊçðïÐdžÃ/Ø/¿¯P¶šÒÿ`õ3>_núBøa}îƒ=מþyñÇÒ¯Äõç\×ÂøÁç/q]›­ç©=ϸxãÓ:#ì?ýNÔ!IpÅ>ï>¡ïè)ãäù{ðŒ´óP·ÙSóùÇÓØïÛ(ü£æç‘ž]ÀC§§î×Oÿ¤Ýoò¾gNÁ}pÖ 2/-Óq¼y`Ñ8øËHô7ëxPéðþYb9NtZç+ðAáÔ!Ù—h¹þÿFG䣪Ó;çj€O|2|¿äÀ¹ö SgQ]p1ò Õ#›j¢OhýnÔM“µþ´Û1ÿ6Øw5ì>ûzøÍ‹ÜüŠ?•~y´®ß·÷T Ôñ4nqÝ~4íg¨·dÞˆ~Šh¿zv\_‰Ð/Š=„¤Ñá¾Í‡øTf5ñsf­xíäçz“ïG¾Å¾¿õ¯7¡+ÞY‰¦àñk_ õЬ›§l@<ܳvõAYâN>A|§~‚øävzWøoòtÃÅ×ãþ·:ˆë{:çÇ›ˆøàvD|ñº Žp&Ãþ×Å'<ñ‰àú{å[Ãn ïÆ9¨W ¼§]ópŸÇ_Û§rãÜ•Œï? þ=Ü x=¿ÙpQhÄëì77DüY3÷aÏ䫯à<-¸º0—âzMÏÿT>/ø‘£ùŸ¿mï üŒ}c#òOíÛ!¾Þݺ 8HêHkî*|¦ôÄוnªÝ/ ý.âxn÷á7¬5(¸.Úç¨}çÒ!ÑþNÕÅCó >o†ž y-š?˜½Ÿœ§9Þ0ðLÿªŽ¾oíò'¢ý†êÇpñ>¨#Y·YS—£ï#~mÍ\ÈCk?ˆûB\ƒU$þ‰óQõa"÷vP¦:ÎÇøË¸?ã“à§l»»€¯ ¼ÜŸH]‚¼6pøÎï/à¹w ìiÔ(àµÎe ì=¼{îçŠtÔY_‚ýÖHM‹¶#;_Nœû³•ƒsá7l‡ü*nu`÷¡m«1ÿ÷YÐôç•F<ÜRsXÖ­~áWl…ß6<Ε'Ã=k¡?•~ñ†xrgRðÚ™öA_î+'ÿq|MáS…ŸŠÔˆ7[_N[ø©1ïÀï÷[‰¼0!œgwÝDä5×{ß2fÎÅœÅÀ9T_|në@<ê ÎaÕ_¿u?p6âeÿʾ‹æfßám>"u^_~_:½Â-H?J{BÅ[Û÷üÿù÷ üÇðÛ,C|%ž2”÷>ø­ôGà·ÞÌþóúÐøÆ}¯Ábø­jõp?r·Ä€z‹zhÒŸQ(üDÄÿ±?œ²ÿ|vøÕ¾S?蟬•pîˆÓ Ÿíˆ¼üáÒè§>¢~ZGôí߬‡¼EcØ—âAžs°¯¢"ÿšÐöþô¾ßùùÀÏ%®5¼'ù{­¼œC?äx[‰_ÎU¼ÛÐåTÌsj‡ÏI^²¿äYœ÷3ð̺Æýb4ði§rã÷ˆÿSUüyg÷ŽX}#ö¬EQÿ>½sßé÷ p¥4æCóüH;Æýì×ùÜïë‡ÈtŠåÇù[ØuÛ‹ù‘ï×^ÿ%ÞÇó°öüâ™o]À9#ßE:YÊC¤ƒ£ý’áCᇫz¨“Ÿ|ó¯ørw‡ÿd_Éè3þ˜½™ìßH§Püu¿J:ôô¨ÿ©§¿/}Â×¾@_øFã§ÚÂ}² ù ý¢ôËüŸöâ>Vo‡ü†¼£Hž»=µ~ñáãÄíôD!ÎXçÄK®zBzk~;äE57 ž{¿êÎiÂ{ ÆÌm“«Â~ß~(ú\ú“¿F?¸Oñoíœýp?ø~.½<úîÔѲ¦Wn£ò»Ô‘€n‰uc"ü0ñß¡rEp½ˆòmþ8×_üòÙËAþnðø´/û|]àoˆ'ï%´: õ‰õ7êYO)|Ççcaç3>À¼—ú(æù¡ ¸Îä§ùÉKá.µC|&_Ú/TŸ‹s7ÝÇpßßpýû†ß¸yq£ô"ðݵ_]}Gꦉç¨=yfqÚÆ´;Ø#÷¯Üî#’Oõ>gf_û?ª‡Íÿ§®‰ô\œ'a?³gÁìÁ<øõEO×I¿Ï~ØÃìwaO?Æ9!¾=T½p Ž'œøúéÍÚãzïÛw(úu¼­7ð÷ß­Äës~¤x/ž°t;e·Þî÷9Ïmc§á_v!cßE:m^îdÄ âö…³~>4»7âëÕð§%PwîNA?ýð̳¨#$¬Á×nÕ”óè9Fâ:Æ×ƒfNÅ<5ï@äñÄÕ‰Oâ¬Ù?S²âiâwÈÿ‰ Í‚ùW½|¨gúÿ‰ü„¼~?ýAè²4}†øè):eã™xcïijŠÿ,\†s#ê‰Ö8ŸLJ£@eÏ…4ž«µÑv/>¯p†o%ýö)½' !ÿx-<‹x»ñßÞ¦æ¸âÓKA:Œü=ñz¥“­}6f/À’ýï+RÏ€@¾žîð`~E‡x=àG+.E Î=uugåÇÄón‚tÞÂ_xÈ» Þ‹8Ò£ò¦1[bæ9þþžqCsNñ=¬·áÿÕw`/#kãý|ò(õBò!¿øy%â|®ûDÛ¯~O¼yïãÉÀÌkÿ;÷WÄ鬷¹Ÿè,[‰x ÜeÚ ØùÕY~<’þ_¸ wÒ+8·Ä•ÚWËÁï¶ÎŠ×ëRvýgÔ»Óßî¢m2ê+î'0º£S{¡/Óm!ò¢ü#‡ Róáˆ=¢ÔªX _Gx õŸÜ«yq‹¾‚¼«ä4èT<µõÔÔ¡Ðu"~Yý£wH½g³†ûÙ¼Lûühû“>éí>¼=­z¯K>ºÙÿÍ>“Ù+«ýÚËι³Áõ.\^Ñjà;–O ò0ñ#Ý™ÿD?„} éõxÎ ŽæYŒ~G§4œ“¹a¯n$Ÿ|éüEÎ;âG¾éÄÿþÿL½6gbçc´òÞÁ‡LüVá’½f›ð5y~ή±ø¿Ÿöƒÿj3 ~9#ú‰S¯"}9 õuž ðoä˜ÏÛ~<úì?¿ {Û¾õ-ëx·– œyÏÞ×;`Gcf`.{õ-œŸFwóú@϶þFØó1/î?Ô£Fürš¾ û—>ËÅŸ‡’!¿ak€Ÿ³Šý¥þ Εêb«ÃkÀo­¯Ýk“GêNÃ÷‰WŠÔ­à ,™ˆ÷;3 þ?ë8¼ç2Öæ‘‡&\A¼™?ùâLJpÿ[ÙH?<õhn/u ¥{nòæwšÿDâEàÿQÇß×FÍq¥ßƸ¤¯P§žšÿ¢N´ö›s/ª÷ÌIÌÉæ6Î õã·«PΆ>ù^¡ áÇ×Í„'~Q:&¦ž Ž•øíʧ쓋‘ç÷+«Mœ/êÁ©^”®•w°þŽüp«È©ãÑçRü3·ÊLÔìG½~ö£¬!ßÂUA@ý“HE<)x:Â'Ûõûá÷¸÷Åû:ïnžgò_:!ïgs Âç)eãóŸ­Œ8·b®K¡UˆC½mòvßE¼Ý;—~ó0ûÂ&òrêóçgpî:ÖÂÿ8ç±rv|ž3ñ>B ÈŽú›8å]šWJ§:ÔÚÇ笴 ý«¬]Ñ/=^s±]C€Ïˆë‰>Žöö‰E?ªý £™½4Ü“r§üG÷ÚA'ø}îkVÿ_u¶¾oö7³>Q>fætKBßêæ”Õ1ç–ï?’Ͼÿqð-^GØ×ög0GÊÔúf/ÜD_ô@<ê$ö[œå'qÉÞÑÉ5%¦ï#œ—xŒÂ-;õÀ¾Ó?æ<ê%Ôkܯb÷+ƒø¡¼)\ß?úêìOÀ¿sî/ž±æÎöÎÕ¨Ï×e ~ìÿ üdñÂÔ‚Μå¦o…½I‘:ý—î©A~ã¦ýM(Ì #ùeðýû;òœÊÕbtޤ?©‘_q¯½æ9Ä×á¿QÏ«)Î÷ xGá§™ÿ…Z@ÝE|„t}¼¶×bú¤á#'ïTȉx`ø—î;ï]™øˆÈ÷ß=‡>÷8³¾Ã}ÏÞ%˜ˆ_'¼°ö¬Eì¼êÜJOVy¿tþ­x¶·ùð}¼_òV”¿=Dê?ܺØèû çI<³öލnÑÏW"uÁàïÛ&cŸÈ¼Ø+ôxKàj87—΂øêΚþ°Ïfýq¿4W:5”ýè †_vUðù]÷ ¹ôëOÑïl)ûDJ8[ô‘&%¡i\ý“ÒÏâëQ§Ÿlˆ}§g£/zå ÎÉþ×w¨w#,§vyöA¨Óœ3 Þ/ù;îŲðÇo¶@½YiU`÷N‡¯ÀKÓ~—y™éƒVy€ønæ9òç7²oÏ|1´´9ü÷OꆫãzÍ|×¹i)ô-ëíÂù”¯7´òýÒöDŸÕ媋é/¢µ}ê•eew‡à7>í ¿–¿ü|ÿƒè?Õëôÿ5WÐüK|S'oÍξ&ú÷nÝWé}üü”;±gÔçuƒÏKÝC³_C{ê´ÏŽ?׳õô5ìÒ>äë¯` ÷ J×Q|Já‚´Sá̽‹•pŠÞ‹ý£O.¿Ì|G<ìЄ§p¿é·Äq×õ@ßï©…bîûÅ™1: ÊÿÍýÊœ|uš5Ïq°0G.²}Îoï7Ôy`÷±…%³/”ûÔß‘>¸ú•£}V-²M¿û×Có]õ• þGø7í”Å-y‘ѹJ¨‰ù÷0ª¯«º<òy 'ÁzÆè-’—j%%ÞâVÃ/‘wâ5-ˆþôÈaÔWƒžš“¾vF=)3gíýWÌ\Y¼XcwÃR ¼¼pµùxýÍ"$ý4á+ þþÐ÷Èçü®À‘VY¿so9܇ ¾%~(Ô¯Î~ÞG|¾Ò‹p]˜¯©jöEýëCîU¨ŠxÃ<Ç9~óqá™>[|Aõ®öap¯‹xƒ¦Î?Œ|/Ùÿö?õ0û¼´×šz‡f_åÿÅà¢åÇ9®­tRÄwßk['ˆÞ'‚¦ý~ä+Gò°æÁ÷¹ÜÏvñÿǵÈ_.>¤ò†ºßÄÌ‘Â=f Þ÷ÞËO7ÏÚgâÔ†ÿ£^½ò#í·óCÇèjž¦þº›;Lý'ìŸ]x0£W”P õ6ùbîÅ,ÀO,»†÷Sç#ð|¼JÀÇ—üjÙC8ú¢/Ú%;Î=ño¡ßŽÂ/Üè×;: sôÏ:ÁŽ.õB½©þ„x_¹Ûã|ƒy^b87ÓÚ ï$ÂjR9Ÿçoþ7ü7õ\=^õ­Û"ñ0íuõØÖ¨Kúß@á\Y¸\ç¹è÷]ØÄþç–À?ª¾•Εt1…ïÔl–ÒÀ“5Ÿ“ßù“êî¹7X|«HÞÀ=0âõʼçåÂýhÞ =Dgà ôâR¸?J<黹7=¤ ôzН‡ëM=~ßì5•]3¿1óYõ©GeðÄŸ¹[w ¿ûWÿÓìSeý!ýõÌ>2ÎË´Rs1ñÕô¬½Jný"°ÿþIÓ¢ÏQhMÇÀþC/&@÷áØп&Î4’/ç@:ì‘|jßò‹ /!ŸY² ø›&³À<Þ þŽ:°NÍeÈk•ˆg3«=òàf Ñçä^"{W!â‡àï"~y/ë8S·ÿ%^¬áP7Î~|(ê`͆?‰s\#uC±ü諌ˆGŸóåLèƒP'$4m6x]Üc§y‡ýdA<Ç$\™Ó° y·IȳµÿiÛê{ïnÅxÄ꜇[Mú‘×yúñø\ì›IÇS:ÖöÍÃxÿSÈËLŸ'±ò¨›qžOÄ9å~f³úÌž`n«9«Ù_O½MÙ‡ò͓̹[÷¤+©;mÈ]Ù?ùïš/¨Þuùø#â"ÄÇ1{¤YkÏ£ÙÆ9™öa(?2s=Ö Ú[c}º ˜û¹crü`íÿ0øSêœj˜âŠÔ.˜ÛKÿÇìW\˜ ¼‹ÝÏ!Þ÷ʇ¸Q±u{Ö O²²^LQÜ}þ êjê2K]¸PåãÞ{qèctO…½HoYùÕ‡¯â\Ÿéý±y´ö¨²/ht5÷/A\â<Â?øù±h;îO¼xáHBÕ®#ÿ#^Û>îã<ôjЏHþ‰Û°%øX‰…Á?”NÀßÉÈ뼌ëÂüJñLu«ê,wåkðûÞFü¿9kqŸÚ„>hò·kyÞƒ|VüBáæÃž½3¾;_]D߇83³×—¸Íõ:ê§ÝÖ™öŠ"îÝØ¿ôÌ|‹þV|xéZEí‡Ñþ ¼Oîi×95ûšT˜ºŸ[x ÷x‡ Ïò­Nˆ‡OT@\øõ2ö€p‚ô¿Ì>äÌ©]ƒÿC¾}¨µ讆Ëv‡ýG¨ý¼ÖÂ>нùëØõ9¤û­¹€5;;ujQbÈ{©·n•k ÿ?ì&ž«%Çì­~ø âXGw ¾8÷ò!Å Ú½©7ȃð_ïÈýÖØ¿âT> ~I«ž˜¿}1õë^«W1Ä¿Zå0¯[ÿæÑENó5ërbp}´Ÿ Ôæ äÿÿ\Üêž äç¶£Ne¼ÔÞL»E/äK/5AÂ}%ÿïA\€728¡iA„û\Ôß1zËÄ5h…ö°˜ýÚŸ.\1uÿµ'@}R÷ý:‰wcÿ²Gí׋ÔíÈs„ûgGçC}L³ziÕeÑïOºéªÏ /Ÿõ²^Oøní]5¸'õ»ÊTßý:ÿ¾Oü“‰“·ÌÕü¹}žOøñÍ.òžaÿ{/÷ÝrÚÀ^ž…ROÄO\Žç½9bòmá)¥ã>‘ûØ]ùÉß+awÔ QÔä]Ò1û/{?eõ~Â’Ò¡H¤€ÒÍÐ-]"04’"ÝCJ7Hs“ÒÝ9t‡t3´„HHŸyöZkÿføžó:Êçó<Ï çŸá=LÜ÷ÞW¬k]± —ôðçr©N-h w‡îáû?Y†8·ÃEœ»ñy¸FÆ#o >ß5b¨É{öD2ø"ˆ“‘—ç¼bÙ)ñ…ž1íáÈË«®ÐUfûéÐëÏéÊÔó8åt÷ÏØ÷@Û¹˜¿ÀyÁøÏØ£`ü„yg:O‘ç^ëü"åw…—-!#»/þG}åó~7êüóúœv¾„]&¿ï´¼ ûí¹ëìÇT_˜ÞÄ;Xgù)å4_]øO}ÍÌÛ©žBy7[oÁù.K@þcžFßñždk¹ßÈ;3^ÒïébÕo8Yrîâ~A¾ØOãïÔ¸h`6Ø3ž“˜ |͆æk”_Óyî%ã9ZîÁÕÂún_—ϰPuvê³ñ–‹|Dœ¬>_±“È_\®¿RgúÛ]·0‡ëö+üÿ“h{¸?Æ?ý&ì®ÎÍ%Ÿaí-Ï âàîî‹L½Lo˜ºWòú OíÝ;Þøgç».8—ˆsz‚ëŠ>Þ—y—r¿°Ïœ§fÏ/%O¢þÍÛ Æ‹àsÄòsÂ#ê·v_üé‡>è4×ßžÁü–äHù/鉿°Û¼/ë—lž‚ó‹ü¬ÿ±q5ûÈ4ÏEsÞÅãªÙúAúÍ{ ^‰—=É B/8ïÇÎíU}õ!¨Ç)Íû?9Þȼ^$.ꔢ”âï®°³ë—_°ϳ $pm±«ˆ¯·&žl=~þð•(ÐÍßa}\ äOˆ¯³fOŽ€ï%*¿äK´4ìû\Ö…Íñt?Ä<_!sÎ}g¢ïƒu¿Â¥šW´+°ŽüŒí/œýÍê­‘w'jäsv*—Áu^¦”+ßÂÕÀ9¬/SýŒp±=?‚~Âu"=öýTÔã“ѹHâklüð‹CWÈn³ŸØÚSƹ®óà§Zn™J»‚õçÜ^ñUâ,Äó”¿“ŸSÜ#ýP¼aû ©wÂiá³±¿ Nî}v¿…þé#¯Ì¾èüdo8Ôw6å}ÒôW:oÇSùúLدeçì3þ DØ‚8pN'̽áœ8O¬·àU’?ÇóÙÜÈÃr^‘üŠKÙ¬>Íÿtj`ä[õäA¼ˆy«ÄÓööAé<8ï˜Û°ÇÄ£’ã Ü*ÏA?ip‰ûûUX?o¦”7ÔݧûùzÍ!,Xw÷ÍȽÓñð;ùKdÏu/Aû¦gï›û‹)/°ûÊ«Ë[^‡öØÖ¨Ï‘û(¾_þ@þáCA9CßÏ©ðŠ2+ô¾dÿíùÃì—×ïKÎüwº‡áõ£)_lë%”Ï >ÉÏé|á@é¿­£&î³qÊÊî°%ª­åõç È\µ òα«açÛó JÀõå¯Úž÷¤>Íâç5Ï~šyÁàu¢^“u9A<Ž<ϸñÀAŒsµ¾7úŒC n ÚÏÝ¡rcyáÅ# À—.Ík°ýŒäõýúœ­+`§8Pó„ßd¿ì<õ‹oüÀG0®g¾çUX¾IóPˆÛ¯[ˆù/ÛÀs#ƒ÷;‰vë§yҜߥß?jë-8?Kz">@¼¬ê‹tž¤Îá¶ùðâ‹à?x1 Õ%ðmy¿A<œf6òm럠>¯øNøwÎ-U\­øMõV²_ªËµsè'…<3oáý­äz£0ùÍþü6çxë|ð ]÷ó¾aÿ/.®.– ׳!ì;ùg߬-arìs3 q=ðÊóRÀ¥£ /3¿®úyÍ;Ðú[¾švÀÖ×3¯oÏ«æ>(ªs—éÿíÉí«µçÒæIí5ÚyËO?ˆwÔ¹£ÂQú°çf«®“y5ñùÖ>ó|TËWq>»øMá­Ÿæ*ZþWùÖ•Úzj/Ü~uXÜoõDus\/áIá6ù';¯…së,?Äyyš©yI®ï #žÎ·ýÑ¿€ýœ™rÌ<¬|Çv?æíu›g>ç)^Ÿ'>vMè ?õòôŠóÁ윾ò%|¦FßôÇqÍs n'Ä5œ{iõWþŠ8\ò.=u­- ?¢óàÈ· ‡ŠWœ¥øÒæUW$q¨áýŠ7S|‹ý&!¿«}²õúô ªPÞÓæ…tn{ýbˆÓªFƒ\u¨ ý'ŸbýÌÅ`×u^ºÎŸoNy·ù(ÊÓ‡>‚xeB¨^‰Ò}Û:âÙsÕ‰ÊHdOµ.²çÂAª«?ÓúËJ¯m\Gž@<”­‡Ò¹•:MýùÂkÜ_ñXò3²öÜáeÊ“/]^ü½´"âäŸÂ.³ß:x}À ÂéOÓ"þˆÕ 8GçsªŽ…ób4?Þò3âaŸº/ßYE{9ÑÜ?ÕˆOfžEë&Ül÷AöBüìÉœ+sB¿×æM¹~ö<]í»Þ¯ú^Í ‘>5lÒÜ'ý›ä%h÷L¾Õóºú”¯`œ`y"Æáòkò VÿÉsÊþh®œæŠªžC~@xÎÎ]Q\Bùú¬#í­«XY't½äŸ}M>ƒŸ NÔy4:çIóÄ?Ùy:¯ïלSŶ?©\¼EaúD\cçÁ7(_'¹×ySÂ’Íoõ-¯mÖGùq[oÅïSbûu^[Ó°çœã¡û×}*)»%=²þ^ý#ÌÓ¯*ΰóHg+N‘ý¯cÏcÔ\4Êâa᫟:ç…ñ–ê_䯥ö ò|Úgéï?,*O–Ÿ×Dê›ì…p»ü”ü›x{­ŸíÓ:_þua¨þ[yÓzˆ7¢ßP~Aòeù­7åÅÎe~BrŒÃê¸Â?ãzX¯gÏ«äœ#ÝìŠê›ôlãyÖŠï³ýrÌëØyy:çCñ‹æVÒÎÊIßd7m|©yßÔ›?ü_õ%ÀÛ´÷ZOáÏŠ? µv†uï’s]—ÿ§×U/ûÃxÈÆ‹”{[Ï þpñxäG´>Úg½_òdç›0*^_ç'Zýÿfêx¶?¨Aÿ‘ü¿Ì;Â܇ÎÔ:Rìy¿â/ÕÏû ꫱Wö1ñ;Œ‡…dwO«ŽBxGq˜òÝâ“d¿í\TŽÄSš¿nók”o;בq‹ê-äßl}7ýAPɱúT%œÊ}’½_%=ó¦y‡ý`ü(û¯<£â=í§â|»î:w‡xMþ_òlã1âqáiÅ‹ªÖœLË÷ª¿‰ë*¼­õ ÚYÈí¬êÖ?Éþk}ÅÉØùùÒ#ùÆi6Ϫ~AîòC'éFúWí‡îÃÆu\?íÛ‡>ÜEþA½ZzýÂ/²Îö/>}º,ìþhíœÚ¯÷ëö¬?ø15꫉[µ^–ocœlñ)ùÙYëghÏ-®‘œh^÷]ç(NÐïÛó-%×:g„ù>ù‹ èot>ƒôDòdó|´cÊcè|4Õ÷Ù¼·xCÆE6ÿÂøKv\¸GöÊêó:/KyËjŽ>ý¢ôCr¤ýÖ÷(¯dñ‡â'é%ù[ùáÅÁV®ÉƒÊÊþ‹÷´øyyms_–ßàç%Ê7Y< 8cÿÑqÿ‰üíüP=SÝ­K ¿cy.ê‰ì®ì€ì‚ê÷ì9~´o¶¿@çtÓؼ×GvBù1kÄ1/aã^Úw*>'¿¯ý áÙÃì‘~Wö[÷'½³xòmó´ Vÿ…¿ß‹[l ÷Óò}:'z­ûzÿ\á$ùÉ©kyV¸N’/íå©ÙG¥û´z+¾ˆú!\.Ücç.3nWüb¯S|¨ÎÑ’Ý9ñp=óYŠ«l¼ò½ôïÖîHuÝ´«²ÒkÙï}ñ`?óyƳÖ.©ž™ë%Ügý®æÒ© ü¬ÉÜ𬞑·ý’:gžøBñ°Í£Ñnª^%ˆ+Ƙ÷“Ÿ“¼Y>Yq…xúyé«ôC¸Kñ™/þLé­‡U¿ÿ’f3CõOñƒêוW_›â}ÛOM¼`yåÛUg+¿¥gÊ£âBË#0.>’_•_³}œ×ñ~¾ÊÖO0þ×ï„ôïÍ]'é½ôë}~Os¥â)T—áò4[ª¶®M}$ÔíŸäÐÆâ·'n^I¹YI}õŸÈP.º‡Êòvî¡æ>óu‹·Z?Ê}±ó#è¯Åßýà”Ðõµ|Î×Pýð®ì9ý†õ›z¦=°öëïßøãÂÐ×ÅËX>JýšŠ›Ug¢<¤ì¡ì·âE奉¯õºÍSðýò“¶Î‘rhù\êì¯pŒÕñŸŒ›l^öÃòʬ»µr#>‚~ÖÊ3y!+ÿô[ª÷•žÛºKÚÏù yfæyíur]dÏíüÚ/áNí·ì›ò•Ö'J_mŒøÔÎ)N&.Ð9Öúâ§ÆÔGÄ?£ áüjÙë÷ò¸òOÖO3¢}·yXΩ³ñ¬Þ§üyÕ·j…ÅÇØ¹¼âeˆ³T¨}°}ÈÂÕâ?uªç–žsÿeg„»¬½Tý«âJÅ‘â?Ô‡­~<ÖKY; óª¤GÌc[¾™ï³uíòC¼ݯâiñ=’ñCòÓ¶¾Œ×÷?p ý·µkŠo–vBõÒæÁèçµÒ/Ëó(S|Ä<³ì‹ž-ÁøÈò´ÊCpþÍwq½-ÉzRí—­ëãç~ðü=á0Ëg3N^–¼åtjè>WKÿm}´ðåN~ßúsù=òp6ž%®S<(½±ýAä7W[þ‘vU|­§Ò¹ Ä Zÿ N™ªŸŠäwt¿ïç™×ÛþN½ÿÛ6¦ŽX¼QPÿqÞ«êA¿ ')~>*~°ñ¦ì½ìñ§Õ®³{Å©NñŒYió‚ú¼ê ‰Ûß[\¤úrÅM¼oË+¿Ãý´k>‰x\áYé›òW™z¢žNõL:×Tu‘Ä…öìß"¢.Kýÿ¥‡øËkˆ—¼Ñ®i_m¾—ûmóÄ™š`¿•¿SÑÎ/Ôú1~TœkãKÕE‹¯ãþ‡œSÆ£[þ”ûkyò^6oD{hãYîp™¾Çö'(_Á~œ÷ãaųâ-ß.[ýEª[Tžç½þ5Ù3É«øhù-Ûw£ó8UG¦sK4ïCç…+^`­¸TvÔÖÉ/ˆ/°<œøòGò/š?#Ü,\bçÒ“Ç”^Y¿$OxMsGè?mœ(«>ð¾ñƅʳå1XŸ*¼nûÿT¿I>ÉâOÕ(Ï'¦zzåËÕOû_z(_nyEÕEÉo©þ˜ó´_ZéôÝöÙ‰W>E|3ïWvQö]ñK­z/Š¡nHsèÄ?óºlÜ@»-ùR\+dÏkÕ9ÇÜg«ïªa¾Ìö©þJu!ª»y¯êºíõGZ?ª¸õŽNºÏÃp¶ízï¾l^AuaªÓ’}žÐ׬å#UO¦~Aõ›¿Øø^ùñª"þ±~Aùù¿æ/ ]Gá{é•ÖÕæ#ÙŸnùÅ#ä)Þ¯¶ü,ýˆ‡óômâuá¶ÿÒÃÚ_õ«©ß—ù åíÜ+Í/RÿŒp†ü8çÑ gÚ:Í•Öýë\ þmó¿’;ò –ïT]ƒÎWžWõoÄ·¶.–8ÒÖÊn_Ùëg‘äÔâ]ñ´·öÜLòvóWj~…å­ÈûÈNÚº'á#ñùê»S]ˆòÑ”/¿¨nLó»¹.¶NKüòЊÇgXSóF”wTþŠuHâ‡mã0›G¤´ñ†p,yç¨õ²yHåÛY×#ÛùÄyò²;–ç—Ðú‰Ô}gþÉà"ñ oÐ.ËÛzsåÉWX½WýåÓöy±?Íö=J¿ˆw­ž(_T¢ÀpÊ“ááu.Ëÿ¯âlí½åŸ•ßfß•ðœpˆ­ûa¿£íNPžKöSùDå)¹¯Šó…,΢}”ÿ¶uYÊ·Ð?X?LþÃÊ!åÅæYÉ÷Ùü¦òWêƒ þ™¯žWÜ*ÞXóWßû¼åÏ4ßUu{¼^+_”sá/é‹ü¯½nÙÊ£Köl âÂ÷ò÷VŸT/I}·}{ò³Â÷:wTuüç˜ûSŸ|ðúÐ×3ì%ävinÿýÎSä9 ÿwx­­O;×>ô>uߪ ⺠”Güý Ù3ïMy/õ)(®µyKúYáá'ù$ÔI3³}qª“¢z*î§x5Ù;‹û•Ç”§²}¨”s[÷AgûÍÔOOÞÂÆäATÿmëwدeëY7mãBõ©ÐX¦úñ±[M]oÍÑÞ—ÿT^Â}rýÊáOæï˜eÍsÐO˜sxì€ÿxÈÞè<§àß͌ܬÛÖÒ<ZÛÖÈÉÀê?†ÊAÐÏö }=(íCõ=hç;Ò>¶ ý¾àß BŸƒßS—ÿ_î_¹ú÷ñïãßÇ¿ÿ>þ}üûø÷ñïãßÇ¿ÿ>þ}üûøï=ü;»Õ6Õu»ÐŸuw êåœ à×ó~÷—a½U“‡È—›Œ|w¿ÏPÏp?ò0¾›ÈëÖ*1—ß‹úA'ñþѨƒuEXƒü[£ï7jž7 þþó¦Èçïì†|AüdÈ7Ì0/ôzÜg|¨¿8uù¿ÊO9_ìòD«¦²¯1ÉÂÐÏæ=B^éÔUðÿƒ›ãõI%ñùš•PÏX¸òU_çÅï½Çº®ÈOÿQôêòiµoL¥ÞÎ û\í&ïïdYŽ:Ζå&Pï̺ºC=7óœ½/äÿ÷å> 0ï›™³òQÛü¿YOƒvÍœ›á¿ZtEØs‡sËÂä)j\Ô ŸM9šò“lÆlÚSÖ1]g=ñ÷¨çû~òCýb!_ äxn]ο­1›úgôÅi°õ,ËÌçëìK|zÂåÈÃVK>?T¿‚úƒ¾”ÀG‹BõÊý0êE.CþôJ[ó>Ï€™œÏ{ yÒÖ¨¯pçß<;ô>õ»Þð<öÙŒÐëð¥aýÅÛ³CåÔu¨òÝk²"_ýq晡ëæyòvßȯÿ»˜èûfÇœÐÏiÜÅ¡ŽaDšYaßC{ôWØâeQGw·;Þ—ñÎüP=uEŸ³(t]Ý;n-¤ž, µ/ît©ß›kFèõ:‡;´'azü¾¡¡úh7Å÷ý ^¯Éëíø/¡ò õôŒï ûtàäb_®¹¡òbíhƒ¨g|3 õ {–,ãz ­4úf­Ý§œÉžõ}Ò{gÍ Ý'wÕÁ BåA¿/ÿ ëtß®‡ú¨B7PVµöéB)Ôu/HƒsÈ~ˆ¶V/i߃vr^òĬп¥çþ”{ñ½å¿Â:5í=jþYØëž.ÏÂôHþ)Pt-Ö©We¬wôIÐúÏ }ÆúÞÈ„úŸÙÙ'V××êî´ÐëÄò†ÙßÄ_f…Þ§ÿXÚ°}•}’¿u¬€}¤?Òý8é·/ µ3Ò#í·Ö×3­Í/¡ÿ¯¿]ã‡,¥½Yz?¾Që±?ôwÖŸWÈoíäêÙ`óùG§;þE6þÐÕs üs=g~¨]°v ö¹Ù¡Ï²Ÿ’ áŠ@*ÔCynB¿ô„°«ËN9¡r¥uö¯¯53teç|[RB,F]ЋÝÀôû9!¿´Ï’Ù)É›Ý×®ã…Éã•Æ³CWú鉰ßû<zýº^÷äü¸Þ¥ø¯.–„ÊÅGµo î&—k~¨|JOЧ+ì/ñƒõ'›†¯ÉÎÑO8¹g̽~ëø{²¯Ò{ï’"œÛø8…q€öSŸ<ƒç®Cf…Ég›ö³CíƒïÒÔ2Ž‘ÞÙõ!îòM9??TϽ5VÀþÌ­;)TßtNüô˜ãÁ¸Bñ•õ‹Óc…áÞ@òBÀ±Ä¥ú~éü’ëb°xFzáO¿û2|T.”ÿî“ü¸&óëž Õqÿ_Å ó«A»-ý÷έù?x8O§ “3âqí£ôPq¦'qçyazÏûöç7/ô~„‡Y…®»Þïû²ç/¡ëª8Á~ÿ¹èðÄÛ’#áyé«õË»cãùÝ'³BŸ-NÈ·wjèú¾ï÷ïõ8˜xÁÊ1ýbp½`ßwPÿ%Á¸ýĺçemüñƒì­{Ûª0œ/»,û¢ë×ï»~ˆ~ú/íü¥ü§õ—\_Åá’{á0ÉaСn™ñSàMøÇÌÉ8·„ö–ûöÿ9èÒ|ŽñŽïi×ü,½ÞÀZιãõéý²G’/}ÎêqÌCðò‹Š?¸¾A¿;æ?‘ñ2þßÃ.Ðo»|áwäç%çŠ;¹ŽÚ¯`¼ƒþâë÷é?,!~’]ý‘Þȹgeœ*Ò{ÙIáñB®«Á>ÓO[œ%¹£_ êÁbÚ0{.œ¡øÂâÆ9ç+êžõëŒçýÎAž‰wµ¿’Kù­ *²‡~©Ù¡r¥}·8…~W¸\ñ­wn'Ô>xÏÏÿ9ôºå7¬¿"Þ®‘r%î;#t½u½î–5зWò2âfÚ'ýíšÝóxOÔ‚¿’¤=‘ŸÐzK®‚8vI¨þºvµuB¯Ëù8ì>ã?ÙW½.yÚ“ ÿ‰üq¯ñ²‹Úé©pŒü ½ñ}ÄáÂ#²ÃÚW탫nìƒð¹â Ú?÷§ÅPù“ÜZÜE¹—=•¿²všû*yÑïi?ÄGJþ¬Ÿ ÎWayâiÉ¡Ö'ˆ?1W¼’ìQãWèÓ#~z?Þ¶ûEü,ÿ­xÐʳø"ÅCº®§ì£âYÙå`¦wÂÙ΢õ‹Cí„p‘ü—'ÙBØÝ31þ=¼áôé&¯6¾’ßÙøúÚnð-ù$ñöûé·d‚ú‰s•Þóÿ3¯•w‹·´>òË´wü¸sÛœ»#û.œö>®ã ô2ε¸ƒ8Tv;¨çÀÑŠ›¹¿âYÄóXþÈ_ëóçêU¡ë »$ûlñõÃýÍá%¡¿#»/'žAñ­ü”ôBò`ù|Æ ÊX^—÷)ÞÑ™bIèý(.×ï(®°rBù”´¸›òå®±þ£Ð𷌠„‹…×?XÞäù× B×GÏÂ/ò¿v´¼?ùsù1Ù÷ízÀK̇èw…g,>Îc\+œ#Ü.;84ýà[¿Ç¹aGGc?oˆ³xöÝ'8?a]ì•aúθÛÛv æ¿}è#O!%K|íŠå—i笤ÎÔþXûDùÒúظé÷¥Àsâˆ{Äóɾ§Z}àzZ½‘“ÿ.{3 }ªO§aÎ.ý‹ü–ü›®Ëò?Ê— ÏH^i¯->Oµ¾¾ŸþÀÆéÒñÊ_WY~‰ú¦u´q_÷«ëSÜ ¼!¾I¯ë}ÖO­Œ†ï®&¯!}ÞUüø¤â‚P;¡x[¼¶Å‰Œl~ˆ~ÄÊ;y ]Ÿøì Ž\º_6¾§>xã¼î&NUü!ûð~|¥×?ô´»SCí„p²öÏâcâD{_”Éø~k7+ßú}–ï&ž°r*þ^8Où5Úáé‡ÕC僉SüYæÂÎ2.µþû/?"~]vÙòïòóâwÅßS-¿DÜ ?H›zL7(—èg¦?°zF=–þ)éû,>Q<쎇<÷{|ƒü‰å[¨wºÙ É»ÕÚïØg˜OF\$œbóyòOüÏÄ•‹B×Yñ›øo{ŸççC®‰o•sM·ÿãûå¡×¡gÉîÛ^ÿ¶yAÚµ}¸Ïø`¿ˆ÷T û,{ ùµ¸>Â̹""^Vz$¼*.!¼/ÄAÈß3/+üdñ®xaÚOë÷ßËOqæ•ähGY^†üð½ðV`4ú¿e·„cußÒgßòXwÆ¿ÈíÂöÛúê—>÷>oaqœxwê¿p”ÅCŒ£m\£|¸òK´?6NL‘}eØýÑŸ*Žs½þ ûtóì•xkÆ»Âú=»ßñÆ}þœÚ<õRöX<·òHŠß-ÿ/N<¥ÿ·ø§|^ð°älžføø+á+^ï‡>”·¼4퉵OÜÙyw.ò+1a~ påCÏVo(®µy|âh›G¦=³võò?–¤_·y*≠ŸÆõ›ÈuÅ<ùâqé•ÅeÌc o‹ŸîÓ´Ð×­œ‘±õü]ï;7ø=â *®ÿ¸-(÷Ð{æm¼N>ÇæÈ'Úü6íªÑé póZÖ?1o¡ý´~L8šü¶µ£Äß(.x/nùZ­?ý­ì°äÁæ)GÖ¨N„vÃîÃ{qŒâZÙO[%^TþˆvæCŠ{·X|Õ óHíïŠ_“Ý&^‘žË^Èÿ*ïäz¸“ö[÷-«<äÀòžŒ¯å—ä¬}!ÿcëu¨_ú>ñ,ÊcYì5qšöQü¶ì˜»N—E¡ï¾_"|`ó ²ÄVϘO“µ²³–OQþU<±ò™Â”sùGù ñ¦ŠlüJü*^T|°ê7<5_ñœó,8O—y"÷wë0§uW[̽ßïÃ9ìKŠ€—˜? qí—­ó _,9ÿ<2ñ•Í3¨î@øWùåE©oÂ…²ó6ÎR í‡üâÑ ÿ[ªç6>!_|ÿÊP=²yʽ·M¯°¸Ø®ûë°âgi¯ÄkJ<ÎÌ%¡ú º$ÅU²¯¾u…ɇpðÙ>,¿Âz@ËW°ÞSüxDé±^WÚ:(åáTçȼŠ[hÿ¼.ïŠPy²q”öQy6Öyx²õCyXÕ H¿U&û,Wö/ˆC+|ˆXž_yk~¿Í—Š÷ŸO,ýµü˜øúíŸÖMr'^Æ^¿â@~^¼‚ó… v‡¼’x[¿ÌøCö>¨G?ózÿ$þ·ù¾_v,hoÁ«Œ‚ó×ctöÓžì0ÏÑî¤>î}öMh³Ë|>–w¯yßgƒÌ³ÿö_æu߬£æ}îv•·›ûŽçhŸMhôÀiRœìm»Å¼/¬øNÞÇ6Êôe_®5¼~“qò\^C93»›†sŠ'ØøKü–âúMÉüp ð‡pªµ?ÍŽ,ûùúE[Â<ˆôS¼ŸûWý²4tˆï•¾Ú> ò´Êó÷üÿÜ*a÷iëÊ$7ìkú§ÅiµÇ)/NþÀÖÇ1Þ±<Ûšü¨Çe±äZ×)ýW|&ùOcó.Ô?[Ws|p€âLÖ5ZT¼~ÉËSBß/^JyoÜBk¨8‡ºSk#ïþBƒqžu×ñFÉ áœ÷ƒ6rß`÷' ÷“˜×ƒñÐjÞôSü4ãÅÓ–Ÿ%Ï¡>µ ~1ó¨lž¶Ä`äûŽ”2r/ÿÜoø›Œ¹#§ßc~¯ØS£g®ž[Ös–S^Ì}š·6¯nt\GyÆyAÙÃOH°:t?m>„q•ä[õ*Â3–oaü"ÜêJßjåof¨ÜŠÇ×:ýèÒÐý´yiÕAQ²¯Ò[ÕeY¿À÷Û<äÎn]?Hþ¿9-ÅcªW}åÙÆ—ä¯lý×Iëjñ!ãP/*ÿC¾Ïò$Êï(¯Eì«}Ãà‘ ½2râ­ÓÚØYçä,óº»CÈÅ´6æÙXŠýÏúßéLæugõ-#/JÎÊÐõ úɱ”sèÁë¢ÆÎ{ߦÛI91r+Œ§w›ïÔÕø ççºæ}¾W³!·£kâzš>N[çÿ¿ú nr¢2ßç]¿Ê|¿³k×z®ÛjÚèïœhøÿ|‰Ì:ø§í>«:þ¥üWæûÜ ã÷Kãü[oN{Ô“09Æ}À)´ÓÂoò϶~ЏFùMÅÃZgñÏ’+«Œ/å?$/¶OCujªÃS=QÓþ}>DþmüO>׳3íŠÐëbùJåQÞëϲuõªÏ`<';-¹¶<q—åÑY_Äóàñ«%¿* ÿ :õ‹Ð»Rö4ûøvŸ‘ÕÔÆ~ú£lZ¶Žò¿ÜgÝW ~²FÔW#×þ…m€[Zg0òã[ÒÈm aýcæù§,gÍs½iÍûš¾d¾¿p.óì<|Þ<§¹uÎ\ÿ§å/q_¯šçƒž›æÿw6Ïoõ€¹®rEO˜¿#ÎÙg>w~¾ù]Å A9A½c—æú|Išî•oÙ{gxNèWæÎGyÿÆÈÿ¹Ó^7Ÿw­2úâ—Óèƒ+Õrcä'TaùÚáXådÿeçÅˈ_ âàXÕ÷ÿK?¬}dß¡â2ɹäÌæåhÕßùä·mü*¾ŠõK¶Ÿ…þJ<ýû½ú,ñ–'R—r-¹Ï)Zù!ɵð”íoÉÑ`Tغl˜eäÛÝj¼Ùÿ 1ûoë¦äe§gqýƒq‡©{µýn¹g9q?+jäÖ_¤ñ5óÿÿf>ßñà]³¾Kyõ?¼zÙ|î³KWÌû®ºÌs`iÀÈ»§fUó=A|vÁ|þpuó~o“ñ׸߷Íû¾ß|߬E¿óþðúªFOQ{™gÌýFÏÜÉ^î¤4¿Ÿ´:üÓž%ÿ[ açKÜØÉý3rï¹ñȾÑðC?,†ØyÀ¬c`T]༫'±îFq¼+þqƒsT×¢|€­R½äµaà-Þ«?³<9õA8ÕÖ ²þÌÆÇä}ìûš=d>ÆÊ[ÌCƒ>Dþm^žq¨x}ÕQ §Úü×EùéÍw’·¾±ù^òâY-ÿÇxZy,ÕÛØ|íý8èoXÔÈì³ïá×ÀÁ{ï›}ô}4ÖØ+ÕÛ:<òºÊëˆQÓ)Ùï ¹îŒÝõÍyƒz|ݼ¿ì_æ9OytoeäßÓ2å þþ)ó÷§SOš÷ý6ÙøÿøFþýîíø{ÌÌ3æ}½"ùõ>­dôÄÿô©ÑߨF‚vÄè•÷ÏAFÞ4…Ìÿ{¾ia®/°q‹yÝU´•ù¼¯q9ã'‚þquèþ+.öNÉÿç/eôÀÙò¾4+ô€8ͽáŸëküœ©ïžÐg_×›àš§6¸Iñ†x~ñfÊûÙ¸Qu튿ï’w²<‰òN¬,ÞÇÊ‘øjñ|äE•ÏVÿÿ?}ظO›W”+¿¥¾+Þ§µ ªãTŸöÖ­áøüSp¿aÏ®Î?`>í ø•7¹w·G\4'p¨ò™Ò/òbòÛî8O›ç±%\û\qa×gw0rÄ}FN=Ÿy<yî~Ä<~Že^wŽÜ7òí=æ3ò¸ä¾I¾ÅÈ«ûÁ"ó>_ë‹ÀI0þ@x)Pp–‘ï Nƒ|ëiü„ççõF®Ý{\æÙõÃFs½žñg€£n„¾.îeôŵäüÞWñ`fæl*ª[·qOÂM︶tƒ|'õ‚§}PÕà­ 5vÁÝ¿¡yâUÄ3#΃Û•r¿y¾vüx©úwÍ÷ûœ€ÜÒ~Ú¾ñ¥ä Äê¿Ä·%¥Á_Їä,^¦|)®–_. âà:ÞÖçPï‚ñ"žU·K¾V<½ò©Ê'Z>ŒyÇ÷ý†ðŠå Ô.üDäÍP6¬îËïŠlì”çH)¬wÖ²ÀáéRAîYÏ¢<…ô@óäïµFÂ>GîüñIàí¦¹o™ÿŸý)žŸå€<]xcìk0Î:_öÛ½Ë|ÿ„ËÈ¡{éØï^‡!;Ó¯D/i>ïÄ)Ï¿\8`öçxýÅPÈë¥ø\ë/ͳ7ߣ'¾ßŠâz'¾ƒÜGœc^wå.k®ÃwðÕ5ð/3ä~6xìÄ|óù n?bÞ¿¼òé·Oáú‡Ç<„¸ytÍõÜ—µ¡ò£¸Mü§ê/„¿ÝÉŸ¾Ì7ô5â+)ƒ\ïO]Ù°‰r»–ëƒ<ý´ò[ò¶î}éPØ1ÚÛà÷Á³_@õr¶¿òÙEøŸm«>Hþ……›ÅǼ_©> {½Ä}vNë˜äßÄOÙþ ÖHßU?®:Ûo_c3p|%¼Í²ŒÆïqÍzê9â2òµŠ‹ƒëjæ–'6vÌéüâÐÄÉŒ|û;m¼cþ~=ÆÈ‹+foØë9#¯ó¾ðïþÉèAàÌ#g®¸“€s&5Ïî{]Œ\ú–Ž…ýŽ»øeLÈÿó¯Ì÷†| üì5ì{ëêæ:¼…âšß ú[ø™ÇB?6¼4rH”õ䮄ùoŽ„æwýCVšggÛr£ž¢ pÑ~~¦`®ÇUîSsÞ¾)Ì}zb‡~õlû^& øaúWɵ첯Eo{×ÇÀïï»cÖÁ×äwøÍ¾ó÷\«ÝÖ÷3ï&\¦¸\ù`·“ˆ/˜‘¨žC|Œâ[›‡ˆÑ9¬Jq«§ðWøå}þæ#(GÕÌý°ÎPòªº [wƾ&[oIÜ/\dû™ÞëçPžIü²òövNƒâ„ï×oˆŸ x´ÊHc·Åñâ ùCÖ‡ã$ÃÓxs®OÒ½ìû!ßÛêÀ¾oyÈø™Á;®B-ï#Ä‚½¼6̼ÏW¡<äò§løüÓEðW+™}â8#ŸžN[N…ê—Íàò<Åñþƒ)òž5ÿï>{qô‰À÷\k~70="ì{„ˆæû\s7ï¯9ûWóÿƒãš¿}Éf}ðþQÔȹss›ùœki!óì|Ûݼîrw>+þâäùÌuù¾Z‹xýp s®’_™ï ,Hƒ<Èw1 ®ôݽŒ¸$mOsÿÞ2K¡?í"»àœ[kâtWÚúf½{–¯%îl®ÃŸ®3~7}²Cæ}³;€÷]–öºÔȯ0¯Èv<­ç0xhÅÏ”›ŸHÐûßw'ü‹üë\$Ÿs~Êß}ã…†æ¾UçÄz ñ‘Š×ßïO~¿ÈæO4χºHÛWI¾Ü3 ø›÷ò¤òƒÞO^bÝ"ý¶Œöõœ¿G7xÈ©´È¬¿ÿÕCÈï­œ†§q‹Œu*^î÷øÉÎ^§œyôV;†×=ia‡wu†?(^Ô|Ÿó:øÈ,«`ÿ\뜾LyÛÚr<´ Þ«±ãž_S™ë>òìËkäÐݸðJ»yˆ'šœÕkž]÷ÜFÞƒqé Úó;î\.ÄÑÀ#%ØoäÔÛt$ðUÜëÐË…í€ËêU…Þå½€û_RÄܯ?æþûX§èð‡*™ß ”:;ÿ•ñÞ$ùÌ:ùS B¼r®7üÚ¶_ÁCÕ-‡uùµ$üZ×zÀsçásÏOŽyqöÀä]ÔçôFï‚ñøÛ­÷Ó\§þž.4ÿŸ½ð|s7þ¿ömàñ¯G#¾m1þ?Ö§æuç@7èMÂMÀ9u7¯»'½6{ŸJVÜÈEàÐIø—zä¹÷o°ó' ÎMß |Ž÷ìúŸÁíJˆënX~ë»ëxVþ'g\ÏìýÀQw+š÷ûcSŸexU_ÓÛÌç~ž+û£Ï¾–¯à7·ì…›}~él"à®5p=÷W›¼‡ûÈÏæÙWb0®;ÉvàÂ[±>å#Ãä=k~וò”ñ?âƒqòÄ»“?£¾£ÖdÈCï)kCõ@õ]¶>›øHu}¶^ˆ<ëß}hN¬­¯ßÂ8Õö9—ÞôYªwÿƒ‡bŠ Düäl‹fîKø&ˆ§à›äƒ_#T|dyቿ˜s‰¼Z›8ÎóâìLý¦WCåÖýg3ć‰6"¯!"üý´ÆNº—<.ܸ¹l%ð6ÏFwßø/}ï›ð9ô¦ÿǰ¿úw´ƒ×‹&„®úþ~±úAÞ?кÏÙPùõTŒy#ôº.SÀïtjbäß%:ðÍ•ÍÀñ"Á®F.}ùÔ}Ïü]t­‘ßÀ̜Ǝjœ¿ý‰üDÛ;Ðÿlg ^ñiþØü]käó;ëJ@wõ:×~§é]ø­Šñú¤9÷79 ÏÛbÀüPz‘tùI~§M{ø+Æ%Î܈ð—ý/˜ërõŠÿÐ|~Öy³nÞÌ{|û¥_¤<.ë(Üå&ãuÍq¤½ïó>ïaûXÇðwšclëTWÄü—ÍSP¿Bòˆã›<„ü§)n°yàýC¡Ïä}•Ÿ‚wÓ\ò¡–×ÒÜ'Îi¼í®ÌعÕÏîyìѼ}ÀOugÃÄì=ô¼ížêÈ|#Ÿ7©$äEyÕ“1žð¦=‹×ɯãÏñÿDþƒößÌý¯¤¹u¶îù7Û¯¡yTš×B?`óLœç üc ÔOŠoް&¬îÄöÁsî­Í¸¿Çú&‰ œz!ìxë‘f¼ã³`ï76ò®xÐÿÇíÓ¡;_Å.!ö¯šjÖÛ{xî©P¹~ð&/r&LŸŠ$‚ÝÜ8ýÛ^°s¿×Þ®W<åÝîFœl_˜gáqÿÈ=øßWàýMsÃ~öóãû™pÏz‹øeGvà•‹‘Kù pÓ’[£k…ÁKå›ûþñjüöDøÿÍÍë)UÍ÷øÖfD<:ª0ðRŒèÈ3·ynô*Pa7ìyS×—ÕàŸj/Îo’rœ )ò"£ÖB×É÷2âóo’€mòøÝØéÂø\çf3Äõ¥·aý Ý>ó¦3ßëŠ;Éä1UOêi˜|ëÿžÜÛþœ”=‘ß×\/ÖÓÛùB÷Á¹÷¶^|ZœWªþQâ/;oGu³Œ“m¿q’'Ò%à¶ sQ÷ÕñÈZÊ£êà×^i ?Ç9ߊüéמ¤ ‹ë¾¹'ž?ÿ ûSè>êlrÍ…=­8E¸…þÛ—ªºyÝ_û볡rï|Zä$õ;ÌÏû»ü‰}Mtr_4 þßy€8`ÖQÈÞ_”Ž ý|~qs•ˆï Æ÷ô_½ŒqÔü^¯âºnÃõ.? ù_ÿ)ìk®ø¾*¡ß…/ OÆøÔ;¢*ø¬ÁGÿí¹ÿ¿g âáÀs¹¼W)'ãçÀë\-Š¿»ÏB}E§-Ð3Ö%qpд=àuMÀ÷ω 1bâÙ,u`·ïž†ü·ýûÀøÛuØu:LÿSE3ßãúy'üÇWMq?Õ7N‰ë~ÙvSyÖí:‹Ÿ#åNû©yôz&ÿoç,ÿ͇÷À~æ÷ÚMA߇æþ0o¥9è6ÏÆº{ÍAPÝ‚+qße¡×íß4t]¨½?ïI}V–×¯Þ ò²¾䇸Fñœ¯h<ÔÕô¬<ýySàÔn×`O™y­?ßs+:ðMÉcÀ!ƒSœ¡>âý™F ûIEàÔsõ ßwnœ ý^á™`ÜùËvvµL6ƒÇ=×c™gïíÞ§¥Cáç™×uZ瀿jYבìå ®ä?roÈÛÓ¿pŸŸ oTxô¥P;à[Øv:^V<8»~x9ìöÞˆÏEGÜP}5ø)ð]‡²Ao:}b~ÇÕi®¯_^Ȭܰ+¾!ëṚ~/fø9Æ-¾•ÕaÏÉ[F¿Ã}I‚xþh?Ôï­ÉaM}Ø!q=K¦ÂîO:fâO«ß?ò¿zxŒò`ä'ˆÃ|ˆ/ŽP@¸Û{¦ãÌ’ÿ¡Q{™Ï ϰžáÌ™P_ú­gh^Îõ«&/åiþòáä¹Tÿ®º õ Ù~á´i±/µsfO ûHÜáO=ü^å¢Àùo{AO–¥Ý®LtcßsíïPu ø?ñ1oFB_2ò弪 {¶±"ÞWu0âVÿ àwâßüУݫ ¯-VÃþ]¹‡^ÏÜ ÷õW—‹a×9Äü÷SAèí‡êñ<ƒ¯,^<ÌCX§¯Ç!>O— ò½ñxžG§Á°ÃUõëS” üÿ­˜Ç¡‡ˆ«C«°?¬ñwÁþ3îÚš ÷Y4â÷ ³ Ç÷ܨïî_ùŸí£aÿ5¯ýõ_àɿ΋¾ÍñÒ\þ¿ùÿ#Ücç™jž«ê”˜P~X¼Uw¡®ªÝ¼ ¼>ÄíªÇa=O ~2œ#Ÿµ,ìʺd¨¿ÉŸö§Ún¬û­Íàž\~ûþÛSØíX^ØéÓwçN=döѨ »²í'ä›Üñœ­&ì&y9ïØgð'}Ûã{É9/kÃo7½œTÓ Ãïî>Y`w^©òS+7ðlÂõˆóŒ€'rµý vsBÄ©gàwˆË\›ŠŸÝ®Šø»ëÄÇÕGñ*Þç_oÿý÷ ¸ƒñº“"+¾_ux­î‚?ˆ8rx¤@€ò ´ÔðiþÂõ~éC|·qÎWÐÿÙ΄~¿Sqökû}øƒ¢ÑqÝåþ0u´AfüwÒ#ó,^Õq5‡ý)<q°»âòSWÿçÛ»™ú°œë³žßÜÏzUo£ïP½ yü¿ûÐ9WÂñv>µêö”`]Žk¨øãþjä¯N„¾2_eçf²NÕÎáÞS õWÍÎÁÞªN†¸Å}ö­btÈCã°w"cœ€|=? =Øyûõ4žv`ïŠÏ…ßóqa¡R°ËsZšgÕÝ_y‡Ä:&¯ÓׇÇÓ¥7CŽX÷£ø:°àøÒ误;§E^ml3\ÏËÕÀ=¿BÜL¾ÝÆÁà ã‹ü;|FN‚8ÇàW³ ›_OLkƒëûé&╬¥°NÅ¿1 ̼÷8W+ÀËþ?ïƒû÷'źֈQègØ÷‘ ×)²Cžs~ž´R èE‘mÈÓUz¹¿0Ï£€m¸ÃÔGã#à!úUÿ Ô‰8ž™ˆãw_1¸Çs>¶á«Äß©Î_ù.õ+~TÝ£{t,࣮Ä•ÿp¨ûèè.æ:4ÇAýâCÙGêÛWuOìU\îí–rígàxÎi“ÜÛù²šx«1ú/2ÞG<¸p+xÿKì+ãH'Q~ØåS w¿¦„¿øzêçØGÅuW`ß?Ê&¿{τʙgÊpèŨNÀ'Ý~:M}ǾßÈ„ïZy¡ZwáÿYÿ)œî*P¿óÑìk†*Àá—“Bïlj^öÛUß7x'~¯níS´ÀAs@Oƒõ 7rãysÛÔq­±§òÞM·p?ŒƒœÏcà™õ×¾r…q}­¯Ào)ÿA|å}]zÜx6ð$ómžMc~+aôÏS¦Æ1®;òÚBsÖþ½Œëù:/üÛÀßàßVO‚_b|îäY‰úª }ÀënÈ€8 sTÔƒŒÿ üF….àØ_`ûÄUÿ¬sØìKÐÎÄ›ê×yt÷¡ó ©^Nà}"Ÿ¥:Oö-Û9L:_®t³ÔŬ›²çEÜíŽëS}ãß“¥†Ï÷^<ÿìÿÌ<Ø·Í•!? €ïtµ„ÝêRNu%ðßÄÇÁ¸øaæXÈ-q¼â]OôGÀñ»›BŸÚîîÝú=äüwàÔhØ¿Y¿GœÁçÄkŠ |=?'ì|Ô5àEhg•R…+uı̛IŸüãÎCÏŠüˆûŽ”ßÛ§?ðyËÒÀÃ7’£>'õ“÷óNɈ¼kƒƒðŒÏo»³þæ(Öcè2\GÑzôkMà¿< }ø&9®C»ZÁ/(^ žŠ®…}y†¸Ú] äŸùK_öéÿçë  >Lç©®ÑÎd?jP>‘Ußõ¼G¿üQT4éŸÈþÇžǾr{Nûêíù'šûXêGÌa¿¶âdÕ×*oà®±9¬,è·0aØtÈíÈ“Øï0ÈAÿú¯»™ ?ã~ƒüÏÌ ù[òH<êݺv¬ëxÈA¥(¨ }t5O ¿@áû²'ìí°èbÄ¿¯Ç#îú}3þαöëÑ èSÕ«ðKÕ&Wœxû8aðÇ'U/~ \Qv?ìÚ­ ˆX틵 ~þM¼¦¯H[ijŒ³wñðsïb·®7!‡ñ“ÁNOí »?%®›¸Oñ®øá¸@¡«ˆK® yÝ7ÕèW›ú·ÀÂÿ¯6·()¸lvä#ï‚^úgÁdn <4ï þ®ù ëÁú«ÀÛÔï`wZ—K0 ùèUUП¦ù‘¬§Öü!Ëÿp.æïy‡•D}é‹8ë¨?ÿhíæœ)ÍmU½ðŽƒ'>4Ù ô1±ç7ç[~“¼­®Oç$øÒŒ@¿*yqÙAOçuàÑÏÅoØ?äŒu‰ªÇ—=s÷ù ñ`ÍEÀ§JAþï7ÞX2 ø½WeÈýM Á§·Ø¡gô¾?c‰?½8ß³q*âi9çæ.€¸:òðˆŸDD\Ñ®'âð>ósǃ_!^ÿè]rÉ8Æ0ôzñÂ0ýTžØõWjØÙ½e!ÿI#|më¤WFÆ}̼‡xéZèmäôÐóO'á÷ãðÌøÃ÷ÓØ¡+‰p-¾Aþ®VnèA¤ß€»ØªÿwÚ}?’`+¾‡yuå-Mñ=?DÞkUxŽù±ÀÜŠ¦Ãs¶ØíPyÕ¼sõS¹îÜ®VõAÄ9êÿðÖsL\ì.ôì°æÿ͇¡yÕšŹyú=O„…ˆÃ9¿×ßw§‘ïêG¨g{ÿ<Öe{gÌušµ‡žL_zñŒwÀ—^xŒ¾ÍÑÊð‡?t¿|€§è›ö¬ÀZÈ“êU*d‚I»¼p;âÎççÂøjWïg؇-Ý yrÇ_Êûìy€ßé>yÒÅ`¿…[Ý­À¯úŸã÷c\‚|í› ¹¯;û¸3+ꎌcýt2|.mfè5ûXü¦ƒçy–Ïi²¬É ¼¾müE‹ÐÛÓý ?D¿Øiìö›>¸¿K—aGظèÇrð³ÒÃþ&>Þ%õAÃ7ÞV4ñ§/uEàÍÿà–wéÁ×ï³>Ï}nô©ùAÜÇÃa°?Å\èùú¹ù]w³aŸ[ß •WÛ§ÍzwÍMò/Z‚ø÷iièû<ƒøÀðEš{úwÞ eý·õGê§WüÍ9+ªËñ …ßg}¾³ùúÕXŸgç ë\`ö?¸œBý+ãyÍ_9ÿÀäýì<ì»'°n;†b?iǼ™SBþb¯‡ýn2ïcŸ¬³á¥‘;Þ™°Ïª#ÎÈ”ûÂøÔ;‘WÿæÚÆÿÎõ6õ1®«±ÿ4ïÏwÏüííÓÃð®â]ïñ}ÈŸ’Wñ7,Xí|¨ÜºÒųú©¿ŠË}‡êÀÎ’/ðLonì±ðºø`á'VøâÈ@òB¨ŸÜØÜw`HCÔ X„µò]¼¿L àz×mØõ™‰þà:šºHïOÙŒ:اæw'ކüöÛ‚¼îÙ)æÙÝ-žï´¼ËuBHÝxÿ‹uø¾­¿#/̼§'Ò%èmµ.gCå[¼Sàêä°8\}â+*7ð÷à¤_âOž¼auØnýa'¢}‹8‡s&Ü™‹B×ÓU}+"Ã^ÜÚ»\%âêmá‡@ücôbmfø­á7aâÏC\뙃uf߄Ӷ5ô¼¶ëxBä˧ׅ^»v¢~5êŸÁ?ÿq³0ù÷Åè‹ú†ïbnäu¨Ÿ|"ý‚žUçîÞÕØc{nÝß|x»g0ç>ªï@óÜlþW},œoè^ }:q*"^ùº8æLé\kÖe{Æ÷ÆœØ5Y1—‡õšSâù) ø®¿!ÿRûê|'ßC|ÌLäņC¿yô³ ý8ƒùWÏ©æ7i`‡OXU~‰8ÞYtì»gFwØ÷Sͳ{É>àБ«Œ¤L‰ï{¼øeã èÛÆƒæ÷Ý7'<Äçyw¶^3Ï®‡9̳¯CÔA|òR°,ø$öøžÝ†X{xÿ`+Äñä#]ˆËʹJ¾ì?bç†i>{­y¤ÙSA?ɸS'þøãö­0¹eÞ=0ë ìë_D4p"ü袗(wX÷ªÝ¡?kÿ„#_ã]±s9Ù/îL(k쾫óØé/ÓBölÂs¢8Æ®{‡_gý¼ûÛ…«N¹ Ÿ¾ïÃæôøK41zåÝ{z±ã:ì[ߤ°kŠÇóÜAÞ®p?Ö»$6ßã-þäñ1ó}îܳ€³Ç®þ9.p|Œœ°×ìßwn‚^ì_Œ>®ïЃ\]q½?×…ÝÿÖ¥X%Øõ$±Ás~›¼=ù{'bà•ãÀ³o|ix‰Œã ïÌ·ûGÁþ|”x*mø½²ÎQöÒ³½8ë î#.£wf½‚ý~Ðû.åÊÈ¿çÓFîÙ3ÿ†ýÛ4öòÒ1èÕä<ÈS~ù õ=ß”.šõ÷+ÿ$YEùŠzƈÀogœ¼òç6ðë/š}wŽŽ€ŽjäÞ3o%äbë]Ô\šsûŠ|êºÄà‡97¹٠ú±(îñ·ga øÇ>A™·sG~²ä <¿*=¸yqDäCÀaq~ܳNÁÖ±_4ðÛ¦°}òM‰õ.pr”Y§æ!ä¹*-ÅýÞ+½qÍÜŸ{@$Ø£Ÿ†Ÿ¤œ™¹µöü'5yòª:r¯¸XóJœÙû7RïæýùWý³Î/×\*ÍcÔy<:OEñ‡ÿx=ƒc‚þs“·*_캔 öžsÜŸD_S¹ömà(ð4s×@¾û€<3>õÝO„üIºãÈŠß•à*å~dkSìïÞ—ÈÐxGôÆ~qž‰ÿç5°7k3BîšFÜ;6&âÛù?"þ­òýQ~Èïª^fß¼C£»î ùÖ¼Ï)õøéú`Ĺz<Âý–nnNÚø]õK“ƒgrþŽq©«vaàÀZÄ/mJïÔÈ ;0¹ämrëÆ>zOéDзÝù`gß4‚Ý ןµ:pW¯Fî=Åê€7Zùy¬Ýu`ÿ5w‚ýÂYþOf@¾ÛMÁﲯÙõESô¿U®}.'âß^ÕÀ—•¯ û‘)*®gô;Ø•ÎY±¾Uýð»“^Àæ\ ÿÓ>øL»:`&â_Ö7ÛóIxž±ú)ƒ~sAtîÐß|x_6îm>¯¹ì:¯ó í\|ÍËçœb××ãÐÇÈyöòžŠ1áÔçÀ¹þl>Ä?œcæ$oˆçÄÉÀG’ïQ\0îžñ-äúf[Ô?¬ë€u¿—zõõ}ðùûF°î¼ÖyÊ9üø[¡Oýbaý™¿rÇfýK§†¨ã Üž™×öœøÆ“hx’ ÿ‡®·Ôƒþªg€§>d>盾üFôߺ’OÎïÏ|¬øïñ auvÁõÆëwbØ÷#^Wöß;¡èµP9ódôßf©€÷eÌ‹÷ÝÛ »Òª ìF÷ ˆ«×¦D½ÂÃsÈkMûx(ZE¼Þ{ øâ1Ë€ÿïFž}?þ•uÁkµß§ßt|ŠõM˜<\ΙÉ5Ÿ~~Í»#*pÀ‘çð{µÃ.嬃9ìk´ç¡3.°ótx®€÷›ê‡¿¨9#ó¡þ/{½Î³Ôyšÿû]LS¿ãªaå }]nïÊó;„›Üí*Ão³_6¨Ïàïnæïã¾Ñrªþ,ò ÎÇyÀgL 9XѼFÊãx낵ŸšÏ£y5âõ]§¿ÅïEœ•/ ä#ývð)ªÀgŠ~’¹ 'âT„ÝÚqþcØ=àÿ¶£ñyÆNÿ¨Àë¿ÜC_b¼èà—šOE¼L¿(³8Þ¿÷‘ ]XÝ‚;efèy"§Ê°S¡òæ­= üóΑq°×ÕW£îŒuêOq_ïe½ˆ¿åCðiŽE¼áŽq*ßïsá æž6j†¼ZöDЋf}€‹Ž}?±,#üÃ‚Îø|”‘ˆkÅú†Ão1^4ZøçR?Õµ]ÕáRO–ùÐWæsuþ–GËú;Ÿ¨n à"õÓFŸƒ~Öiþ݇¯L“ÿ¯óÌ4ï_õFšÛoÏ%#ïiy*ékŽ>óþƒ0ŸP<0ëÁüYg`=h¿Ü“ª¯ ÷@.ÒB|KþZ~6peä…¼bÐ_æ}ðoEy[õssüÞé°W»n®ìüÔÀ ùd¿ºêÔÏê.öä2Ó-\ßG÷ð{¬èÙñEÏúèG¿Åüª»G{ìÿ欸NåO9ÏJõÃêT¨Ë•úÌyоĻ€[òŒ08ÆÙù*ÖC«ßFsýܬã+ŠßŸ;ø¼}ôÔõ—Ébú×D~ùå<È•‘ø½ÀOß"Îb—ðªg[#à7âWŒˆ×8×B}ÎNUÀwGî#öròG'ˆŸMýšÎ{Õ\{[ŸÌºâó1·®xaÔK¨~ùo>Tÿ,žSs®„Ô·hϽáù¢ª»ö6 ùç|Íq¶ç·uô#ï½yä7ë,ð‚êëP}z¼ÀÃ/šÁÞ/® ¿Ð1ìYöúq¬3ë¢Ý…þ€a¿€>¯ºJùwš"ÈŸ¨ý*æB|1è˰:S[¯Â¸Ï}çgÄ?–Füqq~‡so]Ñ"B¾/LrýsÖCÿªÇ¹ä½gÔ°>3ÕŸy ,Bž‰õ v¾ë‘mý<óSÊí¦ùÛ)ø×Ãy-êoQ]‰æji.»»ywÔÝp.ƒggOĬ“ubtF^m|;|¿ú›n@þ™ý<š+cëÁüˆ{Ö Å}çy"¾FüŸë1üÅð)À;Ñ' ?PbðNîO¨óOíy G  žžçªIþt^ŽúÈÿî#×µ1×Åó´t–ø|{.‹úËT_ªúgžObÏMàCÍÏOdçÆÎ{„õŸv©ö ØÕ;àÉC{ÝÉðþUO`·˜ÇU¿•ç#Åaï˜÷ ,~‡8užêSŠê T7¦|¾çR&ì§ê ¯=†^²ÿL|} }l\_Ñ aõšƒ¦¾ßÊ%°ÛªÛIt y òAîráGr´:z¿êužÌ®‘ýM² r8±¦áí¯‹§üÕú­<írKØßóá¾Fí<*‡Á8um=š >!÷,Ø Åµ¼^_«kгƒ QÏV£6üÂécÀµ§®‚G¢¿Pžê'üÉG@_öŸ…ÿ§Ÿô4ÿ ¸hÅmð½gÎ>û¼Îa¾úgƒx,,Ö¼7Õ?{7,üóß¿ýxtº‰ù>ž_«s„T¿£zOù!{¾Çì­ˆ?JŒCÜÁ|±æÿ‹O¯ä½: ~Z8u0ÁýŽ“¸1ÏhÈ[©Ãoúg×.ìçþìø<ûw½zð÷/®ym3V^ýœ•·çP_ƺfߨ{Sõ}°NHõ¤ªSP=š»FcüÞKôázûôÀ~žm»ºwôŒók}ÍÒÁîßþ vžñm ÎÜßö"ø>öí«ž-('°¿–™g›Ô¦Àw&­á“5Zyboô2°÷ª‡åaL5#ÿîVãÁ3°®RõšÇ¬þ{N"Ï9 â mÔcðã{ÿ³ù?Ê60ŸçœBÍ•µñ.Ï{ÔyõŠs¥/Â=¾eÝÐÉzO{Þ&y\ß¾"ÐÿѳäÆýÊð%¾¸0ç)°ø}‹îÊók22N𿾠ÿÁúggPWèëhdg¯Éo¸J}{Ë:ùÀ»äˆÇ¢½þª¾ v”ýÁšséïú;®cYJð©»ãuòã¾'Kñ9öµ©ßÑ×y1þþ8?ü ùPù giVØÑ±Ïùøä^ Ø æ«lÿæ½x>srûj6ì;q™ü›=ßà©CV0¬Ç•·âÑì© —¬'´×ÉþGõ9úÚ=C?ÌÅÁÿñ1ïÁ›8èË´ø›óóÄÛjE Å7à=§GÆóÇ?"˜c8ò?|\Ëz;_°{ ôsº=ß[yÖÚsƒ[–ûGø'/Ô1ëÀ9Tö¼SöCÊŸ¨þ_}ðöüYæÇÜ;n¡†çäØóštŽæÿšÿoòÍA¼…ó¾=¼ÔëýF‡ù_FŽg}ˆ÷û°Ë¬«qJ\Å~3? ºÿã°ƒeÀž3Ÿã*œ¸iWJøò­îJ"þ˜Ú#ìYuýš³ÄÁÈëÌê‹ú±M17„|¨âtá,'iuØý û{Ƽþž|×Éó„ w<ôwq¢St)pÇÎTa}’î²O\?û]°ô¡ÀG°ûœ‡äÍý^gÿºø*Wñ ø}Ö;ÝrCNßT/¦¹ŽÔ[Í1Ñ\^ñ¢êÇqöÌÅ뱿E<~¼òÊœ“îß• |ÝþjÐÖ‹º_–4ü“'ãB<ßL;Å|—æ%Û;‡™ñ¶ô2Põòp¬[RݧÎÝToœ3h²õ2?îÅ:pÁ7™^žq²ú£TצùœªNr5Šƒxòb^ð5¬?öýÚö0°(|У.ЇM“ÀëÕ€|ëÏ'wBÞ#åD¿ÞTàðõ ¡zévö[-ØÎ'uúG…žÜ®tŽû =®ãÆ}°/EsŠ$ϺoÍ9Î ôMz6ôûŃúgõ^ëúq9û§Åø¼_Ã_i¾FÓþ¸_åçŠ=…Þ6úø¦Tò°>0á ÿ¤ xÎÑuÓ… ßõH ¼772ô/þQìç(–ÿŽ|DŸŸÀ¿rþ»wÇĹÌ{iÞ§ÿ͹à:?BxEçmë<·úÐ<~õ«Fý,Þ¹U gÄešw¨óé¼C£œdÏÑP=vµä˜[Ñt$΋$Ÿª9Z6ï|4öñ—øÀÝìÔ9Yê‹ Üèûʹ›Þq9áç¿= 9b‘w@åó¡r­¿½};áwò'nî ~AqûÀ½ß5C½†æe>Ž<¬øîü­à'J€¾ù×Qáðñ¶é ØoÎ÷±sùççß¹=ža'#¬Äïõo;L^Lóà4ŸÓ7}ÍùP;áqfâõ¨ç`ÇY—iÏÁÐ\çfP·vm~§htàÖ‹xNÔ¿\ßös°¼ 7ÿ7kç›maïcÇß_}½`¼ìK4ñyÌĈWxN”üa æïà >I}›zs59Jç¸ê\"w¢ó5ToëXŸì/ÿÕ?ãøÐywö¼ ž§.^TçðÚóŠ(ÿê ÖÜ ÕñùÇÌ4ñ°Sîœgþk[ÌAÔùŠŸY´7è‹a?­ìàoò›®cÙa—9·Øßþ ì ý¾úÆuÎ…/ÒpèK¥ûª½À =D8ˆ¡œ«¯9è¶Þó›tÞ‘xÍóÐÜ|Ͳù0Ö1Û>vöÉë¼.Õ㫞ӕ=+ì1óÏÎÞçx½KÜ7ç´ù>Ú>ì÷ê"ðÿy/ >~Òü}sB€òÄ:ŸO_+ß]3 äyUqðÆE—â¹ð;ðÇAÝë„äG5ï*h7áG ¤ „Ê¡êöT‡¡ïΗª÷;öƒü½Îy×¹©Òñ):wTçAX{¯ø“8%$ÆáÛÈùÂAvî®Î·P½6ÏáÖ¹1Š‚ú¿Ñn ð”âÏ”?žÉøc/4÷gÏ1&ß뜺jÎ/VŸå1h7ýŸ7‚=!ÿáù.þŸuîïGÀþ×,|B”»¨C8Q ŸosøéÂÏcÅiœG¨~ÇÏÂæp‰¿ ,O Ïy]vÎJŠ¡È>˜6ÏÅÎù#èN{¼ÓQO=i&ê7ïoùdû>†\¤Û >¼Åwˆ··ü‰×=…þt9\ó¨"xDžóåÎsrÆù‡Þì§ ï JãûšÅ:=FÜô_Fï|?]ƒ¾¶œˆÏz7§_¬óâ_5ŸÌ½ê4ò½ ï´bÌwcqàéĽ+¶bžI)Wàwòí…ܳÎXý(:GQçªíêè‘ÍÑÕ¹]öüê•ÅG<ÆÎCä¼ ÍÓùxÒ·”/Ó üsq4ê¦Wý²•ë€|2ã×£Ó%Ì÷ë>ÎÝ÷®_…ývuh¬cÐ|W×'} '׿‚dŸ’ò¬ŠwÕßáI×-lž¢ÎõÒ¼Ë@ÃuÀ?ån@ÏXoaóI— ¯ 9CÎw. î_ùbú?Ïé\ЯJG±,Þ×ÜÖƒ ŸØsêÕŸÏóTïcû$9/Hü­Î_—^õÔè=¿¦JSŒ³ÐÉó8í}snœæîú~XgòŸš«êì<»^ùSØÓ“e1Gu~í¼NÔ1ž°ø»Q3øeâ!דèˆK™Òœæ çíÉsZùòFû)ÞQu“ªo³óy^@ jwä›¶¿þk"ð+œóàkv½Ìyô—ݼ¡9tuP®Q7JžHç”)žÆõ˜'ÁóÆ=KÊÞè¸.ôþôP~Ù¹Zs›"eCœÐæ%ò[&"¿Î:xwD7xÌ IÁãÇÀÜo‹ö‘)oïT<)ë}ó3Âî : üttô…ýœ®ü£`ïTwI~ß÷ö4ì$ùÕÍ8ë¶C¯4®ødÈ×»}À¬ïÓœé[š?|ÎçB;C¾…=¿]ò7§äýÓG)'¨Ë‹pútøKø“ÂßÂ.Ï+=é1ëRòĵPýµu«¹ãÂÞôNu¾ïÁQèÁót¨bˆ3"Ë”P9Òoε°sš¯@ž\ý]Aÿ€80ovð<ìÃ_(¼¤¼¬^×<óúй/’W›ïJö}•¶oÔzàyò?â7íyw:/ž8Ê_êǰ8Aý”A½?‹€|ãz÷oÓÐgR&'âYö÷(_ŒÀÏ\ikêˆü¿z{ý’£×q¾E`÷*ð’o£s9Ž6A½æÞ¤æìÃ÷ÐäùíüKÎsÐ<7{Ž/ó­²c'kÎI†²+(À7œ+"»*Ôæ‰‰G<¯ïð!òoë4GZõœ'¤úk«§ä_í¼tÎ÷Waû7ŸØ<ë"ìy2ì›Wœ­xÙ·%%úŒ9Uó¥É '’÷µsÂt^2êËqÅ?ÿ°↮±¯s6ÁN²n4xÝÌ·•¸Àu‡ü ¹%¿äÿ>äýâ}ò(¬gÿÒ½+ž«ï@üWy2ℯWDø¸šý¶:Lój=^/5è~³åŸà²Ì…|¯h‡8²tBÔM~¹÷Áúò@—r˜—Ë8ÒX 9L¸òòñõ°ù ^Ó!¿¬wu¶Àõ9€Ó8ïMýמ/êàýYêà\ñÍÎm <€÷NZ|ýž%ËBå&(Ÿ#âñ=Ö~ÿØó|«ö‚¾è¼9Î_SÝÅú<ëyþéÃ3`¦‰›uÞ½ç ^†zá‰t |(ëR5'ZslóÑêðM9??ôYýê3°çaéÜͽ âã‚8óŸmÖ[óy/ýþöñø>kò+ž©aß Öï^:ì'yC_º)_òó6ÞÔ¼žÃ§¹†:çÝ-5þ?*úÄ’ýðÿê£QßW:ˆô_zíðü‰û">áùîNM`oO~ŽïãÜÏØÁ—ºãw¿Î‹óÂŽ^Oû€üºæxð|ž@üdÀÉ?3roëkßøß=/7èŸMS·š¾ï ßÆ\ZñÔ?×EœÚv_Xý±=—š¸AçÂë¼v›'M¹q0Ï?µrC;Œ~ •oÏÚn˜‹¥¹ŸœÏ©ÏÛ¸óΛaf,ïÏ9ÎÒW›_Ü~årʺP{*ãr{î;ÏcU~AþÀž¬s³o×3ëbÏä¹Ùvî ç©»\›€‡ÆÞ3q‚ûì6ô ξTçïéAÕ/±/-(/&?â/PÉøÿgÇ¡ƒ'Cî6ŸE<Ð%ðLš¨ˆ«·¯ÔáWÖCüŒù ӼϷ¨ƒSß—÷Ëø>ž×ç>ò3âäÕ#ð̹à¾ú1€›Æž©{}qƒ;/åÄÃ[‚Ÿ<|ÄÔ¹vŒ@Þ•çÊùJ7ÆÜ”ò—ÃüH Ø4ij›OÁ/l‡z·-G1OyÓ-Ô4Zaä/è?‘'~ L*iô9pq òˆí¦9ÔL;¯UóÇX'ÔwèÏÍòDŸ„ûæ<3'~zôqoɈzbž3§9÷:ŸPsí¹[”?ïEáÉó‰—ý³ucª/£œØ<*ç¶éœtõ»÷E¿oì¥ú_‚ö¸—¼¿òQúê•‘ ï"~ÉöƒQ^[·ŸÏ+þÕï«ÒγeôÔç)¡òr®ãŒÐû³çUßý漋ëäG„£Xïcï“z¦>2}¯ìˆ­£P~u¨ö\'é ña×@OèµÎËÚ¨'0sê&ç7ÏÞ”©€ŸŠ—Ý*ϲ¯Aû…xƒuˆ¶¿ˆuéÒc=tn 7Î;äñŽ0ú&?%þÏæ=8çOyöàõ"ΞÎO91ÏΣLæûÜ9£˜¿]…ó‚G!ÎóÖi¼è²”è»ànËà¯Y ×S$ì;í¾äFvÀÆÇ—. ¾˜¸Zõ6Ä9ÅÒO;™ë.œ |eÐ^âoÎï·çWŸ.y—Ý ê-ìŒü ãañ ÂEö|"ú ÙÕ}×”¹_Íý!/iõMç˜2góQE™}UÞVvAëbñý‰®Óú+®“íg£ÝQÿ™ô@üåyY§§úo儤wÂUNŸþˆÏïZÊ÷anFÍ(ð÷ä]•‡ñ=ø þde]œG;ª®?ôÙÚó„Ë¡_ƒS@ÎÈûÙs©\-ñ;²Ûê—®r¸Exúó¦ëCå×;.'p7ÏÑԳ⠌+QGÂó€T7âouy$úKÙÍ‹_&®¾m­—ô\õ_öòø²ßÊKißlÝ2í‚x Õõ«¯Ü©}n6×cy¨>¨ÂÚAÍ“å¹/ú[שy=:éCA=ŸºN¶ÞøL׫gé¹äÑÎ?\Þab¨ÞŠŸ´þ“<¯âmÕÛY¾€þÅòûœC$»aq&ã[ë§ØŸ Üd×Wõáô㚟aë±¹Î:§ÆÉsvþõï«Ãô¤KØ×µÐ·3é5æš.8sÊû¯4úàÉÖù oÚ³øÞ£ _œ“­ú\/äC¯68ûG~ÁÆ]äl<És™m= í½ì‰î׿y ÷ «gOcñ*ymËp.¬æÅÚ<½ê19?Ü[èæ)s~fp¿‡~¯ÝOîCЇé«~Oüºüì GU?öÿýµJ˜º9ÛwOÜ®s¯-îÖ9\w­ƒÎ³vq­ê3ì¹ñºÍGá>*.ÒùÅÏç ‡…œ?†ëXÆà.á Õ§Zœ"{s·{XþN<«êº¥'Ö¯Ðÿ;#Û±]ùxùAñ-v^‡êRˆW5¯Õž#Ëù’öœAáÅÊO†®íseÜaû›¸^:oÁâAÎéO­ü‹­Ï>%~×}‹P½®=÷S|×K~Ó}¥-ðŒøA®£ÎK‘Ü+_¥ûWÿ¢ô@ó}$¿Ïóœ_á+ád[@Ümó\wå¯>øA\*Þÿýº­åYi—Åï ×ÈØs‚)ÿŠ75ONý“ê³<)å^þÂΕèœ&Ö½Š{ÿz´^–Ò\wñZ;N ý>ù]{Þ%Ÿm_¨êœxÒý­ï·×Qt­ùñö¼ðxcq¾”âæ%wÊ›‹÷Ÿ®õƧàd˜——œè~m½Œæ—‘¯°ü#çhjŸ$ÏvÞí«ôÏžÇÈ8Âæïé•ß’·ø•õðÊ(NW=ŒÍÛÐ^‰ßѼC›¿a?¡ôKçX?žeù$ÿÎáÇ£Bí‰ãi÷•Ÿ®–]‘þ۹ѲëÜ?OšIKC÷ÃöÓÿYüÉ|°•Gʯ=σö_~D甉_ÿÜ—å¡r#?ª8[ñ†ïN#»¢}eyZéß{÷!{®õÒúÙ:VÞpšÕK7Hù´þGó3xî²ì…ü—ü¯Í³pý„‡¥gvûW=[¿_Ãÿ.%¯©|’½/é}ä¨ÓÊ8q2ϲswÈ׈‡ÐúØyÄkªÏ‘躵o:/Èæ±˜Ï”—}?¥:|Ù/åût½úúŸa¡û#û$<#{¦û”}°û§óòdçתnþ€ ¡ŸSþLògíë­eÿ%?²K²w¶/Müç¶èûí}hy]ÅsÂâ,oD;hç^0~Q_’•+â^q_ì|Há9Þ§{Ù)Ø5ñ#âoߟ :«ÃÐë“®y¿]s+§Ê/JÏ-A¾Pr,¼¥|±Í£q_­ý ½ÒºØ¸œxÀækÕ—Û>_X\!þÁ_·äXóoã,ƯΜhˆ+É›Y€ýõ¶Ï†}d6þ¦Ü+§÷Ûs ”wTŸ½öQñ‘æ:2ÿ¨ëÑïk¿åOíûT¿Â<…­ob|$=?iù@^—òº/É›ôÊæ½”?e¿“γq“ø{ÎQü¨ïU"9´ç'ò÷„l]í¯ìíû|µåYvµ…\ÐoÉ?Ù|íÀœ¸oG‰?%Þ±ùVþŽôÊÚa懃òÕÿ?‘ÿ ½0u|þ‡Wáï·d\vý´#²ï–§åëâ¯lÝý–»ÆfcO-Ÿ%|À9Õ’?éµxk— òs²›ª+R>Aòcã3ùý?óðŠël^ŽuyZÅ]6ß)~š<Žì˜øAùM[7ËþmÙ}«GÊiÎñ‰ÖËž?"û͸NùS{¾ õAçíX>Rü¾ârñ8´·º_{ž(q¦âiñ*–#_*ü'œ+ý~ªîBvÞúKú ùw‹w”Wœ'ü¤z!âïШЧe§€ïÔ—È<µõßøOä_çë<›n£HNìœ ñlâ›§žj'„5WTß#?+žTøÄÖIdGåWÄÈoRîÄgÈ.‹ï·ü•ì.åÃÊãCÙáñ–âßVO¸_Ò+ݧp‹­oÕ9Uò£ïÅÍ–ßSÞ‚8Òæïè?¬°ÎJñŸâeÕÕ ×Yœ¡¸„q…ÍËë|6ÖZ9Rü©ú[ÚËcq½ì9µÜO›%N–\èºu=â}ä$gz]q‰xCñò«úœì—Íë-;õÃ"ÿA;ÛØ\'yhÍß²ý–²ïÊOé>émœFû'ùRJ~U~S른ÍöÕ³ßÑòuäÇl´äŽq„­3eœà­Ú <Òûy é#ùºÿáG7k¾×ÝâKâ»@¶³æúäGlÜÉþÍC’“‹oW¨NBùëü=½nëÅT'©øE}0âÑß‹Ÿ4Tq‹âŽÿÖÞsMaëõT?É|“î×âmÊ«ÎG’Uý±ì¡ð·økÄkÚ~LâfÕZ~’òfWó+¸ŽÖ²>Iûky[ñÏÂYŒ»lŸø&árå+iç%ŸöÜLú3G¨NC¼Îû}zª¡?±x–ë¦ëN.•<Ê.)«ûŸ‡P]}Øš'eyS}/õN~]þáý¾DëwU¿Â~;çOvCñy=õ5©>Åæ)T¿I=²çɪþ¦ÖHÔ·2?oýŸÿ[á]õCÚ¼ åVyD›‡ÓœsÆkÁx<Ÿì¢ê^ÉCŠ/°x“ùz½_¼‰=wlì3ð”Ì{ Ù: Õ+½g÷Å—XûJ½UKþÄÛëþ•§޵ñ겸oÒká+{>×ÓÚòʧY\Ë8Hõö9wÄs^4çM8ÜÆ[âÃÿKñ5vßoÚ}ïNù³¼÷Eu"¶Nö_ó>eÿ%6&{({Åu¶õP:Sýôâi¨§¶ïKúÉz)‹;‰ƒt=6ÏL?.y‘¾X¿¢¾Å_¼>›× _ þ΄P9ÓûăØ<‡xLé¯âSݯú.”w Ïoù7ÕͳÞPßoãæKÇÆ™ÿ§?Qü¬8Çæ{‰Çl~Dy꥕KúyÛ§"žŽûlù4Åu¼O›—¤\غñM¬÷•rrÏ@ÍËÆˆcXg¡üŠ÷ zPÖû÷aÜSþU§nã1Ê¿â[w¦<®ðƒäŒë ûeë‰?mÿšÎ—¤Ý´óio„_„Gl]˜ì åÛÆ ª3àçm>—õ;öüÕ›)&>RuÂçªç£¾)¾~_î¬~r.ßûù{ä•·þ›÷¥¼•ò¯v‡òÔª‡RœC{`ã2átõ™k~û¤l¾Jõ<ôÿ£/Uçß*ߤûQ=£ònªÇAœ ù•°}^:Ï‚ñ¢ø«àõ£¼ \›:„ ?éø_•ë¿ûPx:Å=šƒ¨ùåÔCÛ§¯8ŸW¼jç’ o¯Ú¾1å›Õ÷+Þ—ýÚ_[?­yÄö¼>ÖÓÙz ÍãҹܙÜ«Çâ-('ª;´uOü]{ü^Ùõoèûl’>¯¾Î÷쇭ãe>Jñ·Í·ÎîùUœHý~î’ìŒÅòŸê•< 7jîí‚p¨âpë_Пj®²ækºSdÃ÷¢}1ü»ÎS þÑÿ¿Èïù´‡µy¹ŽÍúEîaô5§`>€3Áè±æHí'üðÞYBåÔÊ'ã1[7®¼ ê×UG¼`û«•GS~\|=í¤Å'Êw*Ž"®±¼¬ä™¼š­Ÿx¯®ÆÚ/áÍÅ{¯>]|œµÓÄ vÎ/ýƒ­Wgò:â“”¿U½¡Î]âˆI´?ªãŸD;0†z…uÏPv4×ѼŒgGRûòz;óï†ÿOÏ|<:ÓÈ õ5h‡‘ÏXߨ…yf~#(w8ï2~²ö|WÊá¡z®¿ƒ¸­5õ«­ù^ö ÛgþŽæÎ¿¯ ?—ü_ùú÷ñïãßÇ¿ÿ>þ}üûø÷ñïãßÇ¿ÿ>þ}üûøð‡Ó~ØÇ†gÙù¢²ákª”«nžÿLب0þßð>Þ[ÌFNjÜéWï3¼¿/ïW†gö ÊoøW®¡È›%oƒó€G×ÇœÏX•‘GvE>­ýtä_nÖB>?[äeþ艼üÅHÈoï>¿â¡iàÏ÷!?PúxôDsÁ³O=‹úýAU‘w:U¼û³È;>Œþ€^/Pï5ð-ò·« ?16~¿lù…¼OÔwø‡!O».ê3¼Cž¹ÓÔy¬ï†<Õú6È«•~ƒ|þâ3¨gh9׳bê—_}‰üê  Ègåýßßéw¼?®§AYνøŠó›ŸàzšCbñÈ{-uM1¿ÿ$)úrýÝ/xÇôCyõF¾ õm“§òõÎböÑ[¦°™83ÊðÀîrõšý¿YO¤ÅŒ}ó䯊¼ÎÀÇØ‡!ý‘'¼vr{Žó­cuÄëã?‚\ßøùôŸB>²¥FÞiØ |®rfÈGÓ‹¨p_˜úz Þuä_χ¼ÿí)È;6êƒ|}ó”Ћ.iP'å¼ÿb>Ô VNŠº¨rPÏ!äïâøž’Ç!wãÎ"ï{ïÔ%ô¼=t_EþkY¥Ù¡¯»ž–`ÞùÁÌÐ×ýÕV¢.dçmäï"×E^Ìõ ôhi6¬Ï⨳égP´ù ä¾ë4+,þ­¾Ž¹<õ£âïk'/×ù°h«0Ÿ$z,ÖN†~¸××dÂý&ïýûm ê’¾øyðÇq¿§² žtñuÔñÜO{Pw%ö;îEèuµ BõË;!=òxm_¢zi:ôiÜ9„þ³Š~ä5§lc>øWc¿—ìaž3µj÷eýò7YiÎqŽTÃ>U‡u)êÜ<-Ì:göŸ¶¨´$L3¹-äfêRÔWÞ,‰ºhÛPïá:ƒºÆ‘ù°ÎŸ´Ü%þ õßñ<×­‘Ošv;së%¡¿ã»_}3M .àâ§—N1ðý sÎç͹~e_¤ƒßK1ïk} ×±­ÎìP;ì™Xõ5» àõú ·é™Îßr¸~ ôéøIÈKÓÐϺ»p]·;Co4Æ÷–kŒõ½Y~jê/| ËÂ>D¿»‘ñ3Ô¡ßô@~Î:‰¢Þ¡×m؉ÞE0ߢÃrÈÖHð#K¢cîÝ©¡ïwÕù>ÌïyÖD@I-7ìØä ¨Ïˆ~ë?åܰ÷ψûŽº×ßëêDs­>ìï›þù‚P½÷·Ÿˆ¼wôƒìó¼{Ž.XùmQ·û ~ç«MÈ‹GÝeôÉ]xê &µü óþOÉê ?ÞîknÈÏÂy¬[»©Ä‚Py•?÷Ū‹z¼?“ î-o\¬ßî¬øÿ—ð}½SÃîço‰úÀ2éÙ'ùþÌ?c½æÆ†ŠÍþÀüM`geáùཀ+î\†<æÚŽú„}£QßyÕ?+ô{<­÷C¯?ÇõÐ/¸úoǺWßã .#ÇøÜó°‹ëÊ¢N©S<ÈÕŸnÈIï X¯oaÿ/—‚ý_õfC&À/ÄD=Ÿ§’z›´à/a×ÃïqfŽÃûŠ–Ä÷nÆ<2§h=¬OɳÐß_×ÀÎLˆŽëž¼ ÷;d*>wûè%ñfàÅÐã…+¡'Åc?V Ã_®»wñ½‘kB.=Ÿàwã§úýÞ>Õè3B"^†ÿ=Öu)Qìÿ±¡øÿíÓaÚFÜÜ{¾8TäÇýqÛ¡¿«ò稗îô'Ö¯þuàØ.g0·hêF|nØ^Ô«l~òÓ¢žÌíQw©0äëÂ[س‰¨KÓõ:É9ïsZDÌ[ öáñ3ÈÉôèèKmúämÕzà—r?`ß^‚Ü 9¥uu˜ù ò•õ1êhk\Ç~ÖO »wŠõ8Äû®‰%!w ›cßJÝ€þ½Îƒÿ§_v·†ÏíΈýfÜ ýñvØ»FüäkŸö/1®‹öÕµ% êÂfv®£¿qO¼1ºçœ09>Ò÷³,ðÐxöSÏË;WV_‚~êˆw…Þ—¿Ë7ÀKó;â÷ÆN@}¦k7ük¬îøÆ=òã›Òs`>î‹þUvÈ¿·½©ÓòŠy[[ ø)ÝZè×ì3°×Ao">ƒ|' {³,GŸ ý™ëv\g§Èˆc&µDÝëÆ¹ðsÑV!îË”ï;¾~¾0új´ÞîcÍ_~[ñß‹Uè§ËäÅ÷ž.=ò?‘ïòÊøüÛï±.ݺB®²Þ‡|Ä=6—÷ƒ:Ë·}¸¯­`ŸœÄëë Á~J„Ïõ¼ÜX4îgÜñY¡úâÄj„~‰>ß²O~>îo,ꇵ¯Ú7o•FÓ!½`výÿb?ðãZßÀOq]©2B*>Ã绵F]Û—áŸ#Î Tý8#C"ì7íâïföãSƒúmp°kfcÈÿ«Ø´SÕf…®ƒÓük|nô`èqæÑô/ƒ°Þ9zá:¥†Ÿ?Œ¿3¤þ¿ÜþnêCÖÃþŒõ;”vbü=à§C‘¡[«ã}Ūbþ°â°‡œ[¹ô|,çñË?õgüî)¹tïßßÖ…uKö‹¼†ôß{m/ü@Û˜xñ…ïØ€…¡zë?·‰ýž¬›Õú§[=:Rz~è¾{ù%T¯œ6§“ _A\sñ?ëð L†ºÁ˵ñ;gºàú/ÆÅ>%~»¹bnøõf9÷1n”üy*Ì„}+ýò´q?ìÖ¾¡ÿ\›ð¾Þœ+D­¸ÑÓ.7ú–^¥Ãû¦îÁ>¤˜yZ¸ßó`üóÖ2œ×8sÎàÇ Û°Ï«Ø‡zâ/ò)!5þ€<Þ¬ù¦ÿ¶ö§Rlà4÷)üÝa!ääü è÷ÓFˆ#>í?Sa<úã…_)ϾÖ ¿ä•\3²ãûZú`o‰gÜóA^Èó86ÀïLî üuðpüËWÀ7жæ†\þ’õÌ®ƒ¸¿Ù`?ö¶Çû’·Á~œˆ„ßë’s:]€û™ÉùØwrV|ù›-j`_Z-‚}?°òÒ§)qþøâ2÷„O€·®OOA;*»ä/|ëAû¡ßâÌ mïCÿié+àᢢ¿8hï17µ r–4÷ÄÿDþ½©Ò N9åÜq¶ôVxÁi›×G>ÐòBišaäç ‡~wºÿŸ98örKìçÝ«ØÃáGÒô†=­ÓûýÈë‘¢ BíŠÿñküÿü>Nè÷ºs_þ\»‚ó°ˆO\Ù’/}¿w;Î)óG-œÙ}¾ú¯°®¿”~IX ñyßÄó'ñü*"â·ÀTà¨V+p䃜'ìÏnÔ~}æ؇W¯ÁTΙáׯõ¼Ðus0^nyÉôMÎ÷&~ ½É_ ¿;£2Ö7çjLH ¹]Ð ýùëCÞè\]⣨ÆØÏ¼ÃOx]xqŽwòxØ)ò®Zw!e2—¹o‡ñuž#¹€ßŽdÅ:Ä™¼4ÔnÒpþ.ã}ï·…á§ŽŸ˜†ùh®+QÐ}7üFÛŒaöÆu`3üC ÿÿî9~÷á]1Éœ '^R¼‡·ÚdÈ+ý¡3ºö±vqÈÑÔ»ðÄî˜5ð:ù­‡sä[αهø0_ÌW=÷3ìÙGé`‡‰ÄÛ¹Z¯#zrñÕ2ØÑË=á‡F7ÁÿŸª;˸ֻ;Þ¿¯7®û³]ÓC×Ï1!äJñû§}ÐUúð[»Šøüíñ{›Ncî"¢ýô·MùTø…ñ·‰—d§|E9z³ rÝoìeïxø]úÀù³B×Õ=2ôôžÂØ£Í8ÝySrB|éºÿ9Ö3ù0|ÿ¼/g…Ê™x gsLÉ;úͳœœº¾‚±?Õã:Nñ íÿ¦cX·ØùöÝ`®"n­‹ûØüô50 þ%ÇÎʆ¸ùÏÙˆƒ¿?³`ðñ›Â¸_Ú_-Îm]õñXoœÃò¡oü¨Ænú¯ÝÄú¯è¹"o¥¸_ù§]u¬oã±ØÂ`¯ÉÓ[~»%üöìƒX§O±þƒšÀ=ym¼ò“£?ä‰|½'ê<ìOÜkø¾U[!䫃ëÊT r\mÞ¬ÐuQ¼«¸Ós¤÷ý änê ìã^ñ-Šÿ|E>FŸÊÕ=°ƒÄµNŸV¸ß™}ç†Ê«pŽóvüSÝÓ°Ë%‘çCü*ˆÿõ¬Ðû”ÿ“=u/IŒ84Oì3ãOÒL°+™¾å|ð¼î‹`‡È38q㜓ݰϽ1‡AùÏÞ2KBõ[yë÷‰_ýéBî˜Ð:»ÇŽ‚¿ ÷$Ì?åöiª<Îâ3ˆ“’&Æï ™…ëÛ?rO|v¿ßö3ìç€#˜ûuã½øÀI ¾?`âÄÊ…ùäŸñC :çÆì¹$ÿéÚ>òù{ò(i€wÊõÀ~oD“ük`ôHÎÏKÜÁ8Øy•瑾ûO»%üïþ3!ä¸VöÊ7ýñò3®üE`?"&ü߬Æoø›çÆú­I–¼üåä΋Ãäã—ÂXÿ‡3¡·/9?eá.)ŽV~Øùúö·Õ\Èótî¾ÄçˆO”‡rVý?Ð%üáˆñ{-Ç`ÝV]î»ø1ìlæÙðWc7â>Z´îd¼ìjûø û4ìÓÌÛôN¬7'Ô.xZN„œÙß#è²4T< ÒA/ œÆø]ùw‹ÿè'´¯¾ø `o‰ó=¹¦AÎ[Å~´¾ ýf^Ó›s7zÇÎÇz“WsŽ¡OÚïÔ‚ÿê±8tnİ<œø5w*Î eœânQ|Æ"ÿ>½L¿œT~ä­è·=ÛçÀnf_Âþ¾8óK¨^Züù{>¬oŸç„Ú›W$¿$\o÷‹8HüºïâW³ÂÖ§ÍiÄ—¿.›ºÞþ„ßAh/·[ž‰|¹s¦ì˱ixï¹bô&óÏBßµ­ä^<:ù}'úS|Ž~Àç8ìÕ“ÏÁGg«¹:•a~¨^¹_Ãý)€¼é³z3BõGù×ŸÑæ†®³'Ñ:¬ãÂqèTœ^w+Þ÷ÝdÌ•ÌÔûâþÿ?l ò1Ño­ø#àjŠù:—ûa_‡1){§|²â(_Ω(Þx$MÜùMÿ“ìœÇu¿[¥2ö½[{ÆS5°ï]²†Å‘ŠÇ|#âõ(àOÆFßxÖ¿]3ì#y+ÿºï`/¢ÇÂü-Æúð´+ˆu$O`ùê*%`?ȳzӟǺ½z9ß?vxÍ×°ƒq·B]—pݰ³µ’àþ¾8~,s×E¡öÃ]®ü6ófSµá7^sNá™!XÏÑŸ$þ ëÆ¼¬ø ñq6Îr]çyšŸ#^c<¦ïU>N8ÕUóÞŸõ/È“­8<± þ/úì;y á<çùbÈ+í¦öÃ=º>ìë3‚ñÅÊ'ä¦S"à¤Ä1±¾5b¶ƒ~1Þ÷Fæ9äñ½óòàsŠÇȺ>éùèõ'âAæ³Ü™²b½„Ÿ¦ Ä(Žëw8‹|›âqWÚXâïÀ¸ø}æsÕ1/ÔïTÁ}1/¦z ùˇŸù÷¶Æï0/ïΔ úż€êh¬?Y|ïï7ëC×ýbⲤÅþ£9Xži±qÿä3…åg”ì.Š}þsº,þaŠ÷i]¬?ãA÷ækÀ‘O¿Ÿú}þhàS¥ÿlØû[Èy?”vtÕ.èýpà—ʰ#ŒoWIÀïŸÒ:nÕF\ 7>×m4ô£LÒy¡×ã/ÎùtcgWÌÆß3ÊaßÇîÁú/\ûÙcßÏ¡zã¾™þgtKün­/¡ŸkR‚OéüˆWlópùÎ@ÒêX·ä>Ä_S¶¡ÿß5ßÀïçhÿÂ|²ó¦Î,ýpö÷ef…~ŸµC¬;´õ|ôÇÊ»{bÅû˜·õÇj»€r6ëe^Y~!РøÚ§œ—Ó;9Öùíp¬cª¢ØÿÈ Œ÷\ÎàúÉ{¸×w€^--½Ï5zË<§÷—̘÷Åü¤ë«Ðâè}ø»ñ|–êK¿U~<œìpàÓX×bµçÓÏ*FÃõ罘üËœP»¢úJGg+…ý`=¥ÕÕe–þøHqG案ÃzvOÐo®ï~^øñ¾]~…¾8‚ëgýŽkFf¬×›Fß±—„É[ªøáy¸uÙ€?S¥À}µœ;“47î›u¡î*å/3 :÷ÕC°cä#$GNÌ5÷Ý̼ò"Þça .ïð¬øÙCh—á7ÄGË[ÿüsû½[3á}oÇb&ó<­ €cÈïФ‚¾¬kyx0ëK?å«3û··Ö·X}øëX•1OimAÜ?ëfÜÉxΤ߷à?‘›w$Ÿ£¼¶òÊǸ’&»px^ÖgÉ_z&ÖÂ>Ü}ˆû_I<©:ÙYå9mêÎ!È ñƒòEÁ߇=%εñãtßüîó¦Q°þôgî· ×">¡Ÿr].‚º`ÖÕˆ_q?…\¥r!Z° üzåO°þÖâSúy÷ œ\'εJ´rÃ:[O}òGçfc?•W…y&ù¿àuw.èßwñ<½ÅÀ㟂uPyñNþvXÏk±Oäk-¿Cû£8Í÷öo<ÎíòäyØ£ÛáýN">nñäXü óϾÇw!Ñb“ê!»‰9nK¿ÄzUë ÿ¶s¿‰gä7l"óBžËUaï;”ÀyG[Óç>qM]½4ôúƒö­Ü‡è§ÿ àÞ·Ý!¿±Þð9Ö©V:È9ý”ê§Äã«Sqm O$ØOÖ'ùfïÆ}2nþ/¨ñûNü¯8×âEƉNás°—×ãÀo0Î’ßñ¬ËúÎéXÏ¢_¾Ý¿çÛ‹w¾qÅ]»¬<y?×誰gŸöÝ̲|ÏOÉa¿iÅï¹JN…~0_ ÿX }:’qù,çä Äó¹ÏÍ “æ_<ébÎöø7añü­³¼ðxQè:«×ˆï¬\×øöÖþ$¯­xZñ›òlΫ„X‡†œ?Z÷ùìvЧ‹É 'gª!î?1~jÿäQ”œ†ù ®`=¾Žž•8Úi;ÓØÕo81¾„ÜW¼¸¹îiÔ»]-ƒ¼ÄLßÃüûA=ð{3ÀçÞnû!òûÉ:bé£êB¼µ¢ÁÏ©~€öÙòÀô“â­Ý¨ë5y$ð*ñõ»qW[†õfT`ógOòážÄ?}Ò þdöuìíºäß)V¸#ïǧ‹G’ÿò>üxw] Ø«š¯ÉÜ×Ù­ê˜2p¾#ó6žñÞ9¾]ú½þ¤e8ŸmKXý°§ÆnÔÉ×åù3ä¿$‡¶ÿ…ëá[ û½óì@ŽøýúOa/éG¤_6Ï~Õ¯*Ïàaý¥/óØ ÷ïaõÒ#oɰWï&ßÇú>,ÿjãþÊqÀW=ÉŒ|ënä|׃ÿd=µêË-žQž¯)ω¹ðÖ›õEΈ·Ø÷„ aדÕÁü»Â›'¦ç9PÌ[xýÍa—bÕÅç&µ¿°û³®$ÿêb~O|†ê’§¨nß;{ìý¬êÒƒøûY´ Ö™u›ø™ˆïQ/ãß^…8Ýò¨S!¾c>@}"þ4í!o‚ =Ò÷ØúqÖíâ¬Ä>äùå)>7vFý ªÏô¸¹›ý+þžþ9ΡÙSûÆzgãQÈåÛŽ3Æަ׀ËXï,¿èiàN\ÿÈÌ­÷§*`öSudA„¸nûÈë·•ßô¾80ƒç],‰ù%>ò Žßï°¸íÅõ°¸Tñ²×µϯ‹ua\àKÓvàLè/ãK׸ãæ:SWlk {[÷"ìq¦õ[¬Ûîrüb^èûœ.E±o[¿îo² úBþ\ýnþèðyÖÛúºBÅ ÷ŠÓY7ëé°ë¹x7ô€üs0îïû!ò¯zOòï oŸvD}yKOü'âRáßã†oð6ìÝåÛ°:õ?:Ÿ.$ï®ü–s|È-ëà”ÿQ~SøÆ¿&-ì/û½)–ã÷"qž|ú}X¿ø¯°~Yß7¦ˆzÜæia/N…}½Ÿöôñ!ðD5# ^H;û]a7ô¿rRs.¸åq‡:[‹­3ÿhÄnózü {°ß¥w™×o»ö™×“Å;@ù6ÿïú(Ýóz ÷Fó{KÃÿŠ^'ñ2âж1ÇPu8¬Sñ”\mÖ]ùmù!_£¶àÕÆº²>Lõ ¾<·`/æ>CŸäŒ¼XOÚ+ŸK9¿\ùæÛ¼ç›C»zw Ç’‡ñ]n‚}ê’qÂÉÀ}gga¿X‡¡:Cå'ý'#ïý^ý:CFAΦÅFýÏŠ>°û΃ïo» s¹¯mÇþæ @ØŸûOª3 › û5ò«¹¡ú+^Tõ„Šom¾ƒûíÇë‰ãc{ž‡7ÿïËñÔèC`Lÿmæ}bŸgÏ„Z“úõ<ÑZó¾XÝÍßå­7ÏÌc)?¤|«åë'†ß¢·ø›ñ‚ÿ‹«oÅ}ÄóâÅ«Z^ˆþÊݧ4ðmü¨ˆ›f¯Â3ûÜ%çcŸÙ¿Èó6,ÿ®üšú"纬5xUvXq¤â|鳯š½&gûG~[‚}[Ðcø‡È¿ëÇÖÀ¥ÌG)/\7ìK¹*ð§‡â™ù¿þª-_a¾Ruí¾É3±ŽŒÔ7!Þ̦˜ê¤°¾}ºà¾¢ü€se_Ÿ9B™êÙÜn›õ âjàö%£ÕÇ\o_¢£ðÏ´?Îo—ßÚkäëFüÊú"åu|…O{ŒûŒœºŽþtÄüílwÈ\OïÿŽŒ½÷µoôÃ=9 äüT†}Ðç7П‚S÷šçæ³Ìë®l‰ÌûœÍç@J#×®-iŒÞÔÀ÷õpí4ÿ?6·ù¼§âqóûžA[ÍßA|Š|n†Ð_Æ-Aœ ½fݘµ¬£ |rÌúFáWážÀïåaWÈ—‰·ñæÇy•¾ŽëÀ×ÖÇ|Ï‹mÀs#“Á?*þ‰ofèï«ÉÕwôîá”°¾qïòÊËB¯+°9öïÏ_“8aØñ/èŸøüB—oGˆü;S/ÿ¨?úÞ=à–V3€‹T§š©4ähÏ7¸~Ö-Yü1/äõ=®‚]À°OÌö¿^ÿòyÄ«¸õÜÌÇÛ:¢x×ñ=µó(ƒ¾3â±@ñ_—°ïFõã®ô›aXÏãîVv?×hð43 \c»ù½ÉŒ\yO—üÕ¼ÞnÖQó|yëA³ßÇy âèGž¬F>=£†;î7v¾È óè9ï_Ü8h³ øçƯЃ/¿2Ï#Œ|{/2Ïþ9_GåogüŒ;y)s}NæØæ{Üßt4×8ØÏGKBÿ»Ö@‡4Ok숷Z4g<¼#¿¬þ:å)l¿Ûù°Æ§0ÿ¸‘ zÃ~9ñCì¥!/ô76Žgÿ‹ú1ÔG®¾7Ût{ʪÐßS>ÜwíüÎyœó£þr[³9ôõCÞו>èlÅI¶Îaü9àÈtsV|ˆëm¼v–ñ­­«a}†ÖEu‹ª£q¢âüÕÏØ>sö9Yøûî3ÄsŒ7-ïT˜çpÅÝ–ï â|¬C¿5°ßáüï‘ÒØÿN/Âú׋ûƒokžÉÈŸ+þû+Ù . úà˜xÝ·t6ìô¾]øÿ3^èà«rš¿]£º÷üþ ßûà¾'Yr#·žCƒ ÿYyõ´¯oäÚ“g›‘sWì·æÿý퀷¼'ºC/§7ßçŽö¿_w=Þ16žË–4¿/¿ã~ÕÞà)_†D¸OòÿþÒqÀω:âéà_‰ó…{·j#ng=žøQ×ΣÀ)Ìó©nGvÏu*ôdzðÁäKlžlÀœCÀ:*Û¿Çù7îÀ~§Ä¹a’á`õ½Ú|"ûàÜOqþ‰ÿÜv¼>¨å‡ÉŸ€Ô¯§þôÆ3àgv¬ƒü? ùºpó:n‡þ“?³}kÄwªÐ<ïð7X—WÑÀ1Žöz=ów€ÜËž—ùß›ªü8ë””}ìZV| åßÈ[ ‚ÇÈ™Òo[Íû×Ä2òä]Öø½]Eà•Â÷`Ïk?€/ï28È=§yŸs}ƒ‘7ï¸wЃJ» £9õ§=ù/ºvþôDó}îßBþs …|6º¿…r‡¸¢J Ĺ›ëõ'<‡Ï×ni~Ç3g8ž;ý \Ô}ô¦N[|Ӫзkç —K‡øföq’‰#\YÍ{`]ˆžíÜÖ·{îvþ² qzìaõ$¶ˆ¸Þ=ûØkæõÜÃWqNˆú8U+~Ss–T/ëÞñ ùx›aÿ£3£>Ž8"øù1ÿDþ½1’˜|™íwa\)ü§þ×À€û¬;àùF)¿¨':Î74úiAèz¸ÒäN¼¶ ¼¼ê{rm?Ï:xÕx‡ÄsÑ·¡>BÕÉ»êò<[Ö™¸eÞ0¿ànÛsƒùþ¬K±ÿû’Üîd)¹Ø¸¸ãÞà’¡WÜm? }hyo ~!ávàŒë?l7Çüí­<ã,ýq푃øþ; `çì1òê$-fäÔûSc×=­~4ÏOvC~«EÆ÷_z=*|ß“<ôñ¹œóî®ùœ«!Ä "=LúqÃãÞгì /k"@O;‡8¤q>ðbףϕOOû°û9ªÁ~/.jì„§\ ø£7›Þ:µ’ þnõÕFèkYcg·g\*^Þýp<äµ½q"ç(xr7‡±nÂ9ùõ$œï ?ãÍ–x™u}A¹6ß/œîŠñþ„õYš3ãuÿþÏäÿi£†æ÷G×F>B|yN˳«œr.¾]ý{ʳØüJ¤Êï­¹‘bÄ3{òÞ¬ËtU¹ˆò†¸Ÿ<ªæ5yêt‡?b]‚ò8š?ãä›göÉ™w ø`êÈëÉßZÑ€Êç}ì‘Ýüíßð©yvμÞ^ûò6¨›‘OºèæÙ—¦ô¤ºò<âWà’M?¼~i¾×ïƒßÿl4äyFaØñ´àzÍGÜû&&~‡ñ­+Ö/æ}®©ÌçÝÙñ=sÅ{žÍ‡2zñ¸+ž;ü~éû?q¿Ã¾Ãõ||z’æ2pW4âäWÑ6›ç;açÈcº»5~È÷d°Ñ÷ùï _ÇÒ}‚ß7z¿è üäü¥À{q×Ã6m½›0ÏkêšïSߟòÀî%”'†žpŽŽ»ÂxØuæ÷¼EÞg°,ˆëÉÇ ËCºìÀ÷/I03TîþîÃÓ}Î=©Ù uêï  ûlëõRE^d}‡ÿ•~<êim®æ¦1ßkó¼/{Á±.9p/póК‹¦¼Ž'ò÷†÷våœ Þ·ì(ìÓä—ØÿñŒ÷¶ÌhâVÿôé£~Ù ß-šC>“ìÃë-«a#î¨=û/ŽÑ›@öƒÆxnMƒ,¨;{¹ö5zàªØ÷6Ïé$¬9ßø¾ÿ~«´ow-ØóUµü‹rwÞ yÍ´aèß®‹?í ÕCïÅÈ/ôÚ^èis¶;Œ¾zK%Âztè…Ï< ~á§Ôà}8?ÎÿSr#÷^÷m|OÆnÐëÕ™ñ{ sâwž|² û=×Ù¤½ùçï ·VÁ¯µÞ> s%è{Åbf<ëæ™ßWžÀÚYÎe±ó;ØÄ#ì{@þãê+Ê BÜ©ùêë)ßõJËÛü݇ïzRÈ?ûl½ÍàÈ»k>†æó·Y¹dŸ‡S|<âsæ³=‡ î™õšž!?Âþ’úÌ: Wîøœ':üûú•¯ô&,´˜zhâE_Ϩ°Ëºc}“ήY•ræ¿ù¥}òWì}‹sû”ÿ4äýמ°‹kú#Žu¥¯˜¬¯yv"í€]ñ-x˜Û-7á÷;b?ëÖ‡\-bþß»¥&䦯èÑë5ÀÝ—šÁN¾Û|½ìt Ä·ž&¡ŸÛ‡é/Îs¿6nÔ|ÒéIÃêÑ}[wÄÚ†ëÙÕÜ<ûÞ7¯û&ƒÝ)|ù®quÀGX‡ßŸQÂ<»_FÅç:õ…]™^x©øHø“ÃÌßþ‚™ çÎ6ïw%ŒgÞï{ž÷›'ôfîCøÙϿþŭmø¶@É:àÝbDÄ>'M ½d<¡¹®Ä‘W”òÏú~;?Öý¼oâxf~ÊÖÑÿ͇'×ÏuÍuÌÈkx}áõ£Øü©âæGm®¡ž˜y,[‡ÄøÉ)âcöq¸ûu ‹oÔ¯ënuIè}‰GödˆŒºäVqýq§ÙcäÒßñ(ðL½÷'!¯•33¿”¼|¬û°£ÙRWwȾ+t?ƒzyóÝ„þoy_½ö+òyàÞ(Ç|{¢”Á¾Öï;¼iäàÞ1äÃÆƒý&êž{qöwwá7è_„ÿƒþÝÜ—ÿÅà¤téq½ó!^HÞÍÄ1®9wM] =ر“sx0GÍýã3Ès`¾‰om•sGñm×Xü#þ¿úL|ÏèÏ ï»o2§ÃúüÔ\Ǽú°'Z Îiy~öV:üÿªúøþgSq¿åŸ˜uP}¬â\Í5ñ&Ú‰z¹èýáç8wÖWrOX½«æ{ý §ÿùÆ‘f¾êèý;…׿°ßÑÎ5)ßö…õl[õ/pžŽòtª³Ô+_ wؼ Õ#«ßD}“ÞãË!ÇÜä ',ß~¸,öùñYäa3e=ºÎþ—%¹oo`§ú<ų·ôfÒ&øõÁ™ñ½äA}_Õ_c4¾7ÁÑÃÐϸà…Ú,ƒÿ?^Îà ïô?{*÷„O„û­·¼m>Ô¸»»á?/?@}â®'à¡4sßPÈ=ùDåÕ¿é œ¸8ïà‡4ìo>ü_ã¼Oö_©^ó.Ô ú#ÙkÍwöß‹\zª*üÀ÷ͳÓ~ä¼xgÍ#¶sÉÔ×;â:ÖÑA™÷‹ýàÛ¦ôÁßdz›}ó•J»Ûv0ìÊäñ°3•`o¥/îÆ3 çoãÂþ–¼Œý( ë”JÍ8s;ä¿"pºwn{ØÝ<·aÿñáÿü]~Åz/ÜŠ|t¶,à×O_÷×­½=T.ü_µƒ|Gûøîükô°Ä-à£|ÐÏʻЋá ÷—Ûá{–\€Ü¯ ÿTå$îëÎY\_Îò°«Õ£ßÿ x+sWø‘|ŽYG'w|ÄíWðyfðYÞ·}€SÇg^ëïJ˜r:¬,øå²ãüÙŽÁ/œŠxå^ð¦û’`?Ÿ.Ò…üó èAáæàþbü߯7>Ç~Õ3Ë®Ûó#6LRŸ=òQ=Ï\ä;ñä/Yÿú7 ïªoâkÄwšlE^AsÅÎxq¾E»¯9'™ó«SÎ@=Ò£_Q7ι1NÕzðœs¤¾qÕïk’Ѭï7Ÿb>½nÖ3ðIQØ¡e13ÈSøz‚ªÞòÿÉ6à‚é±_oâCŽ>ß„ïë\ÏÙÇàõ+ˆüßÖ„};ó#ë #¾èúüÌÒØ¨ºùð®#>ôæq™mØ×?ðI <õ<â_Rè]ç‘Ès}|rÆüXÐ?Bn%<‡ëÞŽëS>Øo9®7ãèA2rSÒ|÷$/®ç‹YðO™¼ˆ_ï|Œõ)×ßG¿éž”ñx¤—ˆWvA<ù ®·ûز³€“ªÔ„]ïRzwäø€ó5ðù»­ÿÓ^÷Ùì›ký£]¡÷çL½ þôéI|îç?`‡Îeƒ^ŒœKþtê8Ä+2/eë´ØoìMSý2Ä˶ߒ}}÷áùj“á­!´}!ðÿŽ-¬OE_†æ j®²òâä˃ñ.â*Å ·ûåh…z6òCþvuXÿv³EÙ­øž²à/VŸ~]‡ýö{vÎ÷û_,Ö?ÇÈ]Û_ 7‘ C?:´‚ý&_è¯5¸ój_ü=¯%ä†ù,ïÐzÀU‰‘?P¾Ë;þ;ðŠÙÚ@nræC>áKðô¾Äýß,xâDnع;™ð¹µ‘a¿ ?v¤äù“™ð+Å[à>CV>„,3ß—ö"žÄ€=ÎÔùëç+/Ny ÿç¤iûLÐþoC5øƒx aV.Æ}$ý±ú+ä·wrø¡ÎW Ÿ››l ý}_–X—Í×Ý‚ï'ïï¹P€¼løM¨WRý‡³šqÃuäQ|]'1OžÏSŠBßv^@½ëóüÀÓªb·æ¹½àØàKtõŸŒKÿîCçbižªË½ßÇ~gÍQ¿¸æŽ«¿Ðû¦0xÎÝ ä:Œÿg¼`ùÍTŸ=p'¯ÞkîQøÍëÝ`WFľ¬}{öRx¾Ã¬óÆ|XÇRñùŠ~Øá‘+ /YÁ³îÿ»§üíÑ|øž2Ó!7Œ Üoã{½Ã¾Þ\‡çÝ#³^Ξ§©ý¸ôö±Ä}†•oûÒ³¦±Ã®R7ð;ÖÇ÷ÌL \“e$üLïñú‹¦¸Ùßâ¾zg€œ?Ì ùvbÁî­üymÄ>¢îÞ{¦)øÆë!¾=’¸žõ?!§«."ʹš®’SÿþwE?hÎ}ÓüOަàkœòÀ-Óœ£9 ªÒ| Õa¸’5ÏÌ:ZÕ£{sÍFœ›/'ú^%1øÑWrï¾8v§OSò×°~ž„<+µzì` Þ?¸ÈSç-ä£pøw¯áÏO/îm ~vÐiìWÎøÞ±{ /Ï î Õ‹`|Ž÷÷Ý œñIFØË’™_¶«Ž×cÏ…þ};v0ù=Èÿ’£ØïÒ¥€’|ß[«ÞóÐ<ðâÛ×Âïù£›¸ÂiÔyÚ‘ù€ë]^ÔÉÝ» ¹Ï7öug=è5ñŽ;æ èÁºæXŸ¾ø·Û=¡Ÿ @jtÉßúÙúå;@ü·>þžØëW |™xZרîÈÿÚ…û¡_ó,;‡õÏþ)Ðm(~o‡y€¼á?+,Á~öï ™}§‰×]w~B¼±j%xÄÜ7ÁsržŒ{ádð‡ÌƒhªúØoêâuÎáû»gç‹>æ{4¿„yXõg{ÎßD< sI8ïAç„i¾úàÔ× ¾ ÷©äÈc0Ÿæž_×ø7oùJ·5£`¯l†Ý}ƒ:z_½Ï±Nä!%åa?hç\Û?ý¸ÝzЪðfòÿƒõߌ ölDiا/=ØÏ~‚ýtò») ðÊÒíøý15±¯qà:â'Æó”Hð#ßÂ~ÿ4<Ê©œøÿˆàÿš|¾Éé‡ÁkŽÿùF\×$à™lUaO›Ùc0üEeä™=Ïâs­[@ß^ÁuÏ|û?Rxì¯nЇ-÷_¢=®ª‡:'÷ŒÍX·Úy /ÇjAN/ƒ¿òôÚ{ô¼/üyW÷$óÅ?Ân?=û°p+ÖuúEÚè³wG,èíwÉC_Þ¢p%؇5‰Y;ò¸y¹N'Ìó܇àÕB?犊§ Œˆ \=þ êñÓ”AÒƒZÀçk "îä¼Ê¿ýX›ÛôKª¯Dó´=ïb^Bÿðë<×1°ë æoè\¬uÅÁoœŠ8ýu6ðR¬w¶çÝqžƒæ ùvŒn?ërçüèÚwXgòÚH•¡£^COÊŸ@þjÁ°‡gÁ?oû¢Å¼Ý}hwòÀ>WΔ·Üßá÷+>ƒœ²_Å}<Œï!òú¾ü×à'†¿üå®9ú½ ãÜO`/?¯{ù]3ÈËÅ N"=7¿[¿©ÙgÏãêF?Ýãà}yJÃ.»{@î#¶ÆûºÕAüÜìêœFt7»’]†üŽ|œÖp°‰;\ûï»@¾)¸îÀ7‹Ÿ†åq}kÁ$è ¹þøôÀ_rÍ8Áý õânÿVÜ_õ°.ë‡Á<«‡ø÷ôZÄ¿eŸ¸šÀï³¾UñŠ{ÿ´yÞ9ÒØw¥$À œ/§þZƒÄI§$úc8'JçqÚ9éuçMú'ò¸s¶#÷õ¬×{õsk>¼=·€s§œù‘§°@ýš¿¡¼†'wCä)9×4PáWø·ÑÈ«¸—þ ;´qœ÷›Hˆ{'ÖÂ:+ùzû~ª6ì|ªcÆWþ#Oüûü¸øy§«®Ë?Ö¹¨¹¸Uõ’“§Àž_n 9Ùzˆò€º4ÿÖ=¸Þ ×a‡?BÝÁÜר—Û¿Á®eEÞ˽´®?õ Ä3Áo­p­¡ñνÌç]sÀÞÿZŸ+ßúà›¼R/=®‡ñyàd<à4úKg|ðýfÃ6Þs2]";€zì•À'0îpµ»=ô~}£Áê'Æ>°ÞÃùk ÖeA\×_§ô=½{ö!ÕØ¹M‘ûM½‹æóìëñ?ÜmÎaÕ|,Ͳ}”¬+¶çÀhÏñÝøqhÊÿèwî+ÿ(ëø1â ³Åùö6ûqƒûúªvBýJ¬Ž˜ƒ?l;x§l€§vO18Xõ‹ÞoPÿåŒZ°=Tü{&Á®; ‡¬óñïmV?ìŽÜò®ücúWÀ£Ó“Ânn_{•(•ù]ïì¨ï½ÐüǨRØ×Õ×áo˜õD ý!?å”]{®sÈxžïÌÀõ›cB~¶Çó±iЛœ%Áÿµí <œ2ä©INÔOœDüéYPrèŽs’ÜÚ*§¾Þ‹çÕgLÖ5°#ðFêô¢Ôb؇±_co5y'O™åø¶Qð¹k‰ WÛîÂÎT( ýîõ5Ö73ê?üW*CŸÈ;¹J#.ðDšƒ~Ë¿iìO¿¼gÌûô¾lþîþ%âŸT¥}æuΑ—}לHž¿€OØï¢úoHèóaݦðÊß}x®mêm¾çb*àuÎ×9 âÔWç½pÞ虿sÔgpžÎð}þìðdY¾‡s1tÞ—êÛT¿ê”‹ŒüÅÑ?Pú&ìðeÔ)Øõ<Ìî™Ø×Ö[°Ÿì¯U}D ÝZø[ò‹ÞÔÝŸ6–‡¿¸ßð¾#ßÀ±OÊý¶-ì Ï‹qµ~ÙUÀäI]OZÂÏd] ž)éqà,ÎwÓœ:gÅ"ðqŒ]wQäûlì¾âîF GëÎÁ_%M ¾).êϼ¿,„üŸW}]0Ã}^EÝïL¬íFÀƒ: Ïå ÐÓrn䱫n®éVu]õ{™ûr ;ïùõ>žX`g>¿|á+ìÃG×°ŽÏ“列âþ+Æ~4x‡û+òüUÄ$°?=æûàÑê¤ù½CΙçSüçØhN£ú5oÆÆµÙ÷ç9Ôvþç’ù~Nöæ ~Jmò_:ßGçójÞ¼æXh.´§[ÎO> ¼µ6÷,þ¿Ùw{^!ñ‘ÎÁQþ×{g5äÞÌ7âùHš#Ä똗ónìG—3À Ãa]‹¡_*ö4ì“ùÐà÷ÀÞ·Þ ùX—ñ˜¿!¾Ç¹Š¸³à(¬y*åûìƒ3×7b.Áß´Ø ;üj(ðÁò﮺†9ˆœSæúÈz³‰¿C—²®xÑ'›Câò"þóS —•ªÂÞ˜œ÷® ô›s#œÑ=áfWƒ=øª ûŠÿ€Ü7O ü0*ê¿•·˜~¥nÈë…[À#¥C=Á±×Àe#Yº#~?i$È{Œ/Ñ_r*î¿Ó è_õ7»(‡øþ?ò€ïÝ~úËþw×·¨Ky@½ÅÌÛȻ͛ùûØàÿÀxæZœ.zÎóð†pÎÏ©åÜb;§,r[ÔÑ/øÛ¦AýqÌß}¸ËÕël¾—çˆkζûÇÞ¨Kc½³/âkÔçðœFÿâFNu~»ïíXœ÷ÍóûüÙŽÁþ½© üÆz=Õ%Z¼AßÐê# öq;+£a…¿³1ÞÊ• vb]%ðÄ Û@>»§ƒ}xùsÆÊ*_øþùËšO§þéàßÈ»,¹ {å¤ÅõTlŸÿ%âÔ~£Á 'ú2$G¾°×;Ìõïöû97 ìéŠáxfÖþ ðÉŸ+QÇ·˜yâAÈϪ]ðW¯ ÿü×=ü=æâÚ˜1·ÄÈ•»XBüÂâài+‡8 gÚý\oØû ñ±.‘ÒÃÄ_ ¾qEØíðþ¹±ñ÷g½!¯ÌO9o'!NÛð+ô7ö!àÇ‘9€C½Nˆz;ϽæûlÉÁO ^1/ª‘{üù†÷±ñ¦æ’Ïñlk>ÎUÕü!õ¯ùŸçžŽyÔS€_yÄß}xZ5õoî±0‰óªlmÓ˜œ·ˆyÌ:QøÅS¥&~så-_Ë9ûþ(}¡ÏäK5?ÛÀ?îÏ ;#ò1ï„ÿÎ{ö¯ÝqØõíÓá—ó‚ÿôuL <º$1âÀ(-€Ï•Z ¹e¿þóy°Ëî#oÈ~fÅWª¿VÈ?­ä‰õÉÎ6ìŸÇ• vú|%è-Ï»sňˆù"£ÇÃ^°^ÝŸz,ô'çà¶š½ ?wâBo—Õ€üMîløþ€˜ÑO¤ÏÁ£œŒg^÷ô?~Á)ˆÏªûž83ê2îùÀ3Ž¿ Ü4ôÂP¹u]†uq€2¢.Ayß ªˆGÎ$€ž”jë»8 ~öÇ"ÀYCßaý/Á¾½½Øù~öZq£WÞVÑßX™¸>ÒÔ×µ;däÓ ¼”Ó«Þ¯y7<§IsLíy”œû«s’l}çšCü’"=ê±xŽÙß}xz'2ößÖµñœ[Í;Ó¾j~’k}Ä¿Ä5ʸæ¹aô€}g¿³ÏuõIåÞ×…}Ž[öP}±ê‡=Ÿþñ%ØŸ ÷†Úwôj°Ÿqî’ŸIœßòØ™$çYgxuµSŠ¢_Œçi»v»Ð·Às¨[aGâgÂþ3U¼weWÈGÁ܈/çŽF½Î©ç9®ò'ÎæÁ¸ß+ÀÃÎÔÀá¯^tË7ÿ/ø­íQïR²:ò­Ò›ï·óìuîÏ…F[CïÓ_õÊ—å±óNƒG~2ö‚þäÁmȃ¾ˆoKß4ßãN^¿Þ ùÄ~€,›‘sß6r嚸y‰Dù ÿ?£ïͳý Nl?Ʂï™ç–žûx±V:æQJA+|»ãKØ“—¯ï­÷Á¾ó’@ÉˈCïAüÈsltþ‡3v5Öýørð>ä!unÉß}øò~eøÍÏÕ\k/ y°þŸÁ/¤\>Góz9GÓÕ<þÿfc‡¯9ðŽ@þÒ_ò,ü$ûb½+Û‡Å[NýXð¬ëT?…wÐ.ìßDøoÁX÷müDž>À·f@Þ‚\}=º°¼bŽXØÍñV¿r‚‚àa™ßv÷ë ûU¸!üÁ,®¿w~øÝ”[ÐGÅxÞ“¦"ìÏ=ö.ýv›õ›ž&èG—|—<̳zÀ/1¢ÿüRràÖavÈo›Ùð‹õ¦C¯Ó£ŸÝS, Öéàmð¤“7ÀŸö(ëÞÒëÝàgØš ß; þÏtÿpôü‡[ø=ÚwwUäÙÝqwáwT‡ºh"⑳¬«Õ8è‡ï!ÏÝÂ?LŒýŠ”ýÔ™ÛCO6¥3øßusÅYóúÄ*øÎIÐ|7;ÿŸýí:GKsGü z„ÍçÑÜTõáþ݇»RB“ÿÒ<<{^&ϽÒ>ö]Øùœ³å9ö,EzüNÆð+ß7g9ÖçîÊxö°¿ ÷—ç/öݬ_Óþ êÖšžÆý|W Ÿßù‰ÞC¿¦š|Sÿë¥àõ–cp{‹Áî÷) ¼Åº6×Dìç`xÿ8 =­ vªÏ·ˆg{ÇÃïoŸ»å®‡¸>Õ*øí´XwmÔ[ø~L 4wô‘ü–“õ#î¼ãl¸¿ÿ?_!‚D]|0D”ÏjD &z‰(Ñ.zIV‰2ˆÞ£F”YkµDïƒ,Q¢‹.ÂF‚ˆöÛÇ}ž3{?%’Çã·ÿÜ»÷Þ™yŸ~^çuæ2G4÷~¨ÿë.Šé‡ñÛñ2ï¼FÜ!<ÅZTž5å§Ò½ÃZ§ôžïG_XyFþêÏþ\BŸ#}ß`Ÿ–ð8è^ ­ y“<ü±ðÉû®„ŸDyýËñëÅ+"ÿËc8¯û3ïÊ;±kó¾ä¼ë—§®Ñlò|átëʹ.ݽ¿`ýb#çÅ:`çéOy{µ«çsâ4òÐêSâé—Z†WíÅNãÞáßÝ2—·fö¾{‹ÕÈñEâ…ü_òþ»§ÈËï5ÓyåhsÔepl¢oÞjÁ'gxe¯ü=vàigôcñdìöÍèÃÎWÐ×"Kxn?•ä¾ËïÀ_¾Ò;.õ^÷êcú‡nì—W7CJì®ôÜá¯R¿Î¿âÿÏýIíà/ä=of¾§u~¼ûÎÐß+_‘Î5[Msž]6¢oÂËhÔýžç߬zô+8s«Á#ôùJÏP,1þÆ. ÿ¨—´øá¡KL@Ø3d83‰³­þ>qö9ƒy“‹§á³0Mý;òŸGó|òLjW>låÁ æq¤nÄt >¶`ø#;OSê£=8_Å­yi“ñ¼$^ úŠ)¯x¿Z´r¿ ¯¥JsÎU_Æ®ü–“ÏkO?Öê½{–&­Ä Yøž!³8¯¢6z–d Ÿ'¸ÆÄ|yW¸žZÆçJ=Æ­^Šy°>Ÿ¡GîÏ2çGÝÕIщúQ…†ð6/¿ÆÜmQêŠ:W¢zœèß‘÷jv‡ë¥Wu ÷•¥öyW^Én“/ß.ŠÜ}Šž/IQr,×ýa{™C†ÎXH>dd§^jv®Ìu–»Š¾Ö+Æü”ÔC½WkpÉç#¿¥^§® ù€Ýo6yÈAêNª§n·'œãΜœwÞÖðìÝ@=¯Ç|ô:ÛÄPÝÇH4T²Öæ£ßl¿A¼!8ïÛùà›?`lmL\$üÊNÍ•ô¦ßAÎNL¥ï~#zòß‘?ªS÷ÐsÑ}²ÒOv«>GµÐbü‰ðiêÞ(ÍËÜ&ƒÉ?ÄzC}ôT÷þ4ÉH>%óƒÖ»¨;H}Ó› ÖÙÑ ?*y¦³ùòüÅ&žÛ…âÄÍCOÿ®šãõÇü$þÞq¯çt^Ç¡~Y»!rú z!~ÞÉù_äÓ%ÿUü‘a"§Ρ%ó*ÎÆXâæó¯cïÚžásWäÜ.òK¿Wæ­Ç1Ø÷Ü¿òû%‘“Yàêœüðq™CpßË›Ò'úò$õ“ûë¨Ç7IE}÷j{ð =‡Ñ‡8J½Æ?ýú³­õ ý‡¸Á»%æå|oT'ò™èÉÄÂçìÌ€óš „[¼¯³Jo›àbÌèÖ¼¾ÕWú7mw‡¿:ßäFžâà³2 .ãº.0ךh¿ˆK2Z܇ô‘ìWb7ÍÈØ7å“HÑ}Š}ïÕ—ºæÊwá{X¹ŽþÛÀ-¼¯Êâ’Ÿ«“:¼]—ú±S¹Ïíèæ{û-¦oPl3~²ß&îçRäÿ§Sô[ÊfÄi?ë8qó÷ß‘ó¸÷ЫسܷÌW(ÚZçà—v$ðþu]¸ï7;s}¾àýSÏâæ!oËÚ;vèWâ¡‚eñ?²ÏS÷M)Ÿ¾5fr.s/n‘šÄ9ÿËþ5sVú©²7á¯þXÝËt }ê/Ñ3ÙÃæn_APöUýÙû£õ>+U:êüc~ $¼ÕÊb/9‹Þþ¸\ð]?‘ge’þPú_F§³ÄG“³bG¶T@ŽíØE™v²~‚?([;’¶.>¯~[ôJæ—ì~/r}=ä¼ý7#pîvñXø3n=Oÿ¢ëW¼ãä»ÂOí$_‡Ü{ùi/Ç ê/7û“wý™\öW±OZ÷ýÕŸÄü£]èsÆ^%Ï–ý²fÿ£Ä7‚ë×ý¡~B z üﺧ\÷ÔêŒî‹µ¶-ñ1º4ÇZ·r‘%-q¤ÌQ«½wûÌAn?ÂÿþTƒç·=¹¸yÿí9œ·ÌéÚƒ‹Ò÷Ù˜„ø~¼VÂïØõ’Ñ›+óñ'#î(^Îé“yX¹%¢>cî)‡|\…Ÿÿ¬9ç赇7ë}ìëËIˆËïÏGNö”DOúäÅ.–¾½S‚x°íyâð§Ið›¾B~&-d>(MZðFÒ³Ö®&þ9™ ù’y· õKãûÄeÙf£‡sÃåKE 7¼Fö;kx6–ßÏÙÏy¯£8Uouv>WxJì?áß‚ÿ¶‡MÂnuÏÀûï¤Æ_o…oÉú(¿z¦1~èäFò­6[°ÿM’…ê¿~Q걊“·7l&¿•ýyʯìýœÿ—z³î)s[}Š_XP;üàòߊÿ½[ñ­Bß+{ t?µæÃfË–ÄeÂgèïêƒ>O¢ß¡.Ôû}ÁmË~—™àã2ˆxHö](o§îÍ0î–#^6àÕ46Ø~®Ú6¼>\lF°q™Ä©+˸ÑÈóÒ¯‰¶•„÷Fú¢Ú7ó·"ŽÚu‹x)Ž>¿w¾[Í“¦.þáÀ—èQ ø;?k ì^ÉjÔ'eŽÝÍXœdýNÜÇŽÝ|î!xµ¼Z}v†_·òŸ»—6òïBÙ»~刃’ ÕüѶ’ø¿¼ex_üÒøðûw/çëܡλù‹¢¿ÓÁõÛ­ê‘—x'É#â…‡et4Ï£5ùµ·) q÷×wovèb]üÂãSìoj?Šzêª:ÄUÿ)„ÿHr…ç>ù:ýáóÉKdÿ‡ÿÎMòwÙ¿©û–í¤àUú¢öµÞn4?N><"z ø-ã\éÞõ¿úãÞþ^è{F Í ØcŸƒßYxŸ­1ËÀ,üc…èqèº~kÙçí&-‡Þ4îMx°”ïAyTt¢îuW6'?èR{r²þvý^ä¥c<ò?0öø[™k/t”º¥ò ßd.Ê,½;Þ®Ïnuä^æ‘Ü9w9‡bu±SMà ѸÅî|Œó•|×ËW‚œ%3¸ Ù {@ƒ}ž»ÇÀ!ü?ºÚjݼâÇeV˜ˆ¼O¸‡}N±¿ª{åÖ¾ŠH?ÆÛ¸šüë‹kÛÃõÉ8‚Ï[5÷Ïyˆ žØî8›úEâ{=¼ v‡#Ôó».w8$¿àuˆ{­Ó[ÉgœèŸùÜnM‘ÿ*ßòù]òó{™S0gBÖ ãz›g§^øeEä§à"É·…éGê¾F‡|<¯ðG+ß‚Qw;÷yøyäýf툺€‘óyìÂ’÷á¡xBßÖ;ß’çRê ×Çæ9ŒÉHž-|¸ê”ŸÀ<]˜ëÊIÝØ]Z—¼Cê|:ÿ¢óèæÉ>¿Ÿ®>},Ésµ¿èÖ\\×zD¼ÐqXÎ&Øk#{q­ã§ÿù×Ýmí‡øßŽÿ.ù¯qbfHÎý}…˜K‰_’9øÄû£.T¡!8lÙG¡{0”8˜[ý!Þ­­ÜÏ¢ëØ½!¹#ðúö¯M±K•Å~ :Ëù4ëKÜ_fvuDiÎQpÅþÛÌX­ªrNŸWä<ïè y ¿ð4#ü†»ò0‡7¨<ñéþãøû÷Nr~õol,Aü=‹xßÊ7‚¿û‚9M»×ä[ú¸Î¼¼²ÉþŸíT‰Ü îÎÇïgF®uÞö ý?³.yýüâNï­|oÛîØeÁW&ù­}‚½0~¾êø½Åà}œ3y¹Ÿ½§‰ß¢ªò<„o×ý: r~";q}нà+šÌ½›†ì€‘j ñÓ…,èÉBæüµá5)¢æìLŠ?¬TƒëY†úŸ£Þ%|nÖ¦Øy‰ÿµîiµO NTöiL÷ƒ{¤|¦ý_¦± „kQ^*+ãfê¡‚ÇÐ}ðŠƒPœ]ësÉý¯‡ ¢î™3G¿ .Iù¬%Ð=¸‰q6¯ÂkáÕ¿Œœæë†ÜÏÚ"¸Ì*rkFç"¾/¹¹-zücå äk ÛP¿iÝ{Sï)ŸódÕ>±'Ä/Uz··Œáû6´#Þ‘¼ÁZ‡:O³zð‹WíòC¸Þ¸å{’o;17¥q¿Îáj_Û0rqîOÊWLšÉ÷ ø¼p3ðœöoOð["/’W+oŠ¿ ¼ƒ›òñLt7^÷ÔÀ ¾Ì%üü£„ò û`üØÚ&Ĺª¿ÇǃO”ý¾¶YŠÜ¢˜Ú¿•î»q3';x…¸°Á1ü­ÔSíÿ^%ÿ<¸ßñ×õÊyüH­$àþd?†ûM~ì¹ð¤{­!]o€³º?œÚ¤}ȧàxuþ0Ñ.ý­ýúã/¨?â)J÷Bž'Æþ'´™þ=ºOKqxÁ>QÁn£Ÿ/}FüÖô[â¶çÉ„¿Â.´ÜML?úÖ?ÙÒ“J]Ï­Í“î)2Ž¿O^U¸KGb ?«uvwgJì¦ÄMN\ê?¹g£?É|â©ó¹ êpÝàK4 æˆ;´>hG•ÇŽ]šH6¼×'üœNÎØeÙ‡gÜÌOœQl&ñq¡J!;jÖé…?‘¹ï1È]Ã_%oì@}dbø>ï…^L¼}•½1~ÿì2ßÞŠëû¤ñJÊ÷ß‚¿óÿý/·e˜²·ßbª‰È¿Ì)&žï› o’;àõׄó¡¿s΂ Ò} v®©·ßÁy)ïc&êvòB<çÙùý‡¹ðÂhT¹‚½m¸ ¢ðGû_zç"©¿•~칚ä˲OÞMW›¼XöÖ$æ«þ£?‰ñ óg²GO÷x³sð*¸Ýc {+œ}|aêBÇ'Ð'“=튛Vü’æõÎźèoÅñܯòö~2oXè{õàû~xŽø¥û›à$Ÿ5¿(Iù·Kà ÷»ÉÜ”Qá…=ò|8§•ìaÑ:«5‘9>£R%äs=q€âk”—Òo׊8§Ú[ÄÂo«úðà‚;²$ñƒIìÔ–=\×ÀÁxU_f¾¸‘z5•W0¾(õ¶…­Ø[öûtêIÓ 7ŸDïØKælL^¡û`>¸N|²?=òZa4ú™8ʈIÇ<+5yÍb©Ó¾M<Ô¡ ñæ´‚_ø™¸Gò`óøã¥ü[ß$|¯àd­|ðš›Ö0ì‡Ì³y³¾Ó~$ýeåO¹-kW-äVö¹(®F÷¨êþà`ÿ›ðzŸ`àƒnÂÄ^%Ï8þLößLW„ý 2×¢øk£HV®Gê•Ö­òõ:Y˜Ó4F~Ç—BîüA^’µ/þL÷:J\gDÿÌ}õM<5±÷ucõ ÙoçÌÿÿ ¶à þÃþã~4r~m/û/²­½ÚÏÕ¤ïYùâ‹GˆKÆ}JÜr¼-u—Wß"~þhñàI½*ð÷Ø¿%E®†ÏÀŸHú¹…½}‰ö%‚çÄ›"|V{ß@¯„÷AùäÜá¨å~‹¸ÜnMü'8S7a ú&u{Ñ>üQþÍ\Ǥ—à5ü]pçÞà§Ý÷™s;\”ù‹Ô¬—ÑßöÙÉ/„×+…“y^¯éαå'̳ _aPwÑz»àlõ™|°ø6ìŸÄ7þÚöØçrWѧ]ˆW&¶!®8Spð³Èзª[‡¸}ÆzðxÕJ"w²@çbtŸ´ò{*?ÎqÚ1ƒÑcÙgæÆîÅÞ,DÜs­ó’2o£|ëÚWsË,D–Uäsj¿îCxt>Â}8MòºÌ·Ê\[8;vzù%êœÛÀ}º‡ÚࢋPç¹°¿‘*õ¤]ôÛ¬ßþ ?-Û¼îŒ!èìù2>dϨâ׌ÖˆwÓ2çíöƒüßM‹µ+G¼õMâ áw»Âsa~ð v¸ÿQìðÄ#Þøvôåþ,Š~ o„ùù.òÎF™ø·ì¥tÓ §saÖ°”üþZòÌ5«ÀÉhß°|î¯ø5/%|KN|.î§ÏXô{+xóÆÏè¯à9íq’îc²C{Ú/ì«‘}åznº§ËϽyZ1\ð󉫵¾¢{›£:…Î_ã ÿ‹Ï៹Jø±ØŸb^^ØÿYäßÌ’=ÿ{…¥žj÷mGœ%û½ýš{cä>‘[á¶[¯ /Q£~IpxzŸÁþbÙ®yê¿~¯òMë\ºQ£z-qP?ËÞN»é–ÐÞ&+Ï~â¾ÌgÀ?L‡¼:YBù±ùñax&ï?@.óUäÜ'žá|³]@Þ2/†ç|»ÔÖt@o:n%/­¿•üCxÄ]ÿ â[Ùga÷IÉç{ȧe¾ÁìÃÿg9ÜΦþaÜÏ>X¿ÏZ~¿î>ý+é 8{—H×K2ù®_•믳ýz¥48}á­÷ ¦î,q·s¼rÒpcHãkÞ÷irüר¾ÈÙáà4ª¼*ûºàw*gƾ«Iü¢õ»*í˜C¯ùñqî/ø^ÙwbÞŒŸÑ œ‚쫳f ÙGçùnÄßÓßÃî·¨N¼³% ¾ëéI_,1Îá{+Ï¥Þž:'ýÙ‡fïg‘ÍoúÇ‘³ŠC3ÙOìuoÁ}¼1û+sùºÉý z±ä!Ÿ#y­~nÀÛ+|.N¾ŒÔUÜ Ý·»{6{„W:1ÏÔ¢y‘ì?ÐýbΔ‹¡¿wË÷H<åŽhHýé¥ð±ËܶÝbvøGðõþ„=Øÿ'QäÍá‹ö:Á÷¬ûÆŒšãeÑ6ìÝ/ðo–!©ø'vw'uoå³wª>Æ”y‰×טoT|±[çYåwQyS¾‚ÄxŸÿ׸ÑJN,}ä|åw<¿êE_<$ôš˜o!¯÷: —¯låLƒô[ïsóÌÈØÛÀ®КøGæÃ”·E÷$Y[;câs!¿û’-×_åËR\“m¬ç÷).Ï×{Å—ÒžžIÖ¹ý zÚdþ3Û[Ô_v9/ÙÛªzëvN@nšŒCdž3àw¸¾™xãíúÄÙ9nÐþú&ÑCâdáw²{¥Ä\#¤/¾5”‰·dNó}Ù[-x"ïè`êUz7Ìÿ½$ç®qÜÁžðÈ^7»ù]ä&ªq¥äGÊ3©ü€Zw°’u˜ßÐ:„Y2z¤ý™¿Ò:›òÍewÏäMà9?ùÒ —_':﫹€s™~Oàd¿a°/¨Ëðb²wEç˺•Зa`wwÝ#oÞ¯Ù^îSö‚¹uò`•WꬪWÁÖºÂ󽵞~®ì¹V»©yyP§•9wÔ®Wpo^ÒÜïw¢ý÷£Ç§®bß…G]ç:͇·ˆ+7=O¬Ú[Øý4oÈ÷QïrZuW½nŒÄkƒÉç*/ÄLLŸØ/×·sf#ŸjŸ»uõ7â!ñc^Íxòçš#Ñ{á4*¶Á.Ž€œUìÏs/š8Dö7é~ncuSpÊÂ{d'ûƒúöüÕÔ§/Ä~(öûi¼Kîø÷øûñá=oƲê<‡N_“÷}\ ;,{ÃUÎÔ¿*>W÷ûÙwð½Ÿz _a§¿HüÔ½ñ‹Ìy+ªsxóˆ_ã¹)?¡ð½$Æk\Ïâq|ô?T¹Ñç¸tœ›ìMQ~…€?DøüÕîjý1À¤} å½u¶ÇO Î[óë€㛲ØáÅsÊ×åÿ%.´ïä&^Â`ýÿÎQäj‡}ÿn¤z¯à24_7kNáú·MG>¥oÌg‹_tVÌá~Äþ·ÆSל¢·) r0jŸ/qº»¿¿—ú‡ÎÙ1#ø~™sògçá>¤‘/_>@ëdö¤…Äϲ¿Ó/::œðÀjžªüÊ/î_»ùû[‹#ìDÒ<øQÙ_ë”nƒŸ‘¼ËzŠxjÊÔ÷¤¨¸»ë‹Ü¯Ô-þ4‰³¼R…Ч¿Î ×3ÿÃ¥Èu‹Ü¼ŽêM}èN,ö î ñߎcØ¥’)y•z¢ÛýÃÿDþÍý…™×~uwz7â5ñOŠãÑ}/^ÅìˆÔíu路c0þüä"ä^í´Ìejœèñ<ﯣ+â/Ù¯­ûö¼¾C‘¿47áÝ•z¬ö͌ޙ¨³M¹ˆ=(ùÎKâ0Ý;l¯N>#B.eÎÙn‘Ÿ÷KþìšýxÞwLâ¡NqÂß~{»«<‘K.pÞ ^ _-ûË^¬¤9æ„߯—$þyßäPê×Ê£§ue§ñ$î_öAè|U¤Ÿ{­ùÙþòö5Ø“X§¤Ô‹©ÏiH÷‘(¾LëŠA}òç¢ßéˆeÅÝ—ÿ¬óÊO¨}QÙáK‰Ð}tÂˬñƒ—ÕÁ&w±¯bïÜšàÌÌ¿ò½ÊÇ”â8yÌðŒðUo[þÜFuÐ㨶sÿ‰üÛõM }^ß>\§äCøkÅñ[×b_¯Ú# þ½^?ü¬ìï°’Ï —këQŹár¢ó:ŠŸ³î~„üþìa_÷c¾¾Ä5äPù'–¦¨3)o—]­þ ïnä¯Ê->_çtRè¿°•çSæóÜœöì ;bÿ‰ü;CbÿVÇ~ÏNœ]°ïºAnîkMò ÝÓñKÒOq.dẓܯõœÍõǽ†|¤Iš‡q‡Äò\rq^RÇôcôª?àŒûÿ!{ÐTÿãšÞš[ÛQ_’ÍWÌréçíïÄy,ÞÂ÷ÞÞGÝ{Q?ärì}äK÷ŸI=Ûšý˜üEüºü YœÌz47ü{åƒë˶˜û¾>§éžØðçd?8Äý ¿“}áe>G÷n&t'.¨Ø‹¿{û"ú5îóà²/]ë=A+ç¦{LÜË;#â?WîCx¦¼s½8Ïsm$ÊÅû¥î©ñ—Û9A÷ø,·šhÞçÅÇoI|ôkŽF¯[®O~毈÷…?Ù÷ÿ?d4þ:{qlý•üܽÿDþÍ%{DŽޯy•Ôwü¾±:wS´ç$8ž`ÿd‡–äKŸõÙ©ýmcáG<‰—ÍISÉïdo˜Æ‘ZÇ ü¶ôŒ_—¢wÂ߯}{yì½Ìñ+?­îÏÔºýðâá¯0½³4BŽD>ü/¡'Z7‘¾…q·q…âS%ïÔøSó ãʾOq¼Â㡸wmmÎYêÊþí$\Oº8x#ßüEã®èÝ¡ØA­o¦*A~)õ5¿Eý¸}—|Jó`½nã~?ì¦Ô#¼«)ø½Ô-4¶æáý3=üÁ”ÇœŸö_¥þ¤s :¯¢y‘ÖƒŒÏ¦q.k›`÷¦E®[[è¿*T/P\±Î¡[u^†Wê…õÔcÅi?Êhpþ©w3ü­½Gÿû“ÇŽ}®ô ÕNi½KûO–±?+}+½.OnëÍÔeŸªž§yr"{ËF àùH¾¯ñ®›ïu>GêØÞñÏ‘­óõNC~¾¿*s ÒÿÒxÓ–”¿—=Ûꃹ´ÉÑ—\‘7éX«r‡ Çâ—gdlG~.øEÿ^7ò\™Ëð»æïâÎá7$žõÛ—Á®V\@½Kú•šG83b°«Â_¬{Ã5ϵǬÆ>H¿TõH÷Mi}.èJ}+¨¯tø}Ì— ý~Aãn9ì~eøEì«sk)z½ücžGòw©£Iœh–­nSòsÅë;ã7ƒ£ð7ð\¯W¦žSf.ò°áv¼ò ì…ö{>ÝAœÙ¨)zÞqò_Þâ>eo–7â<}š´oÓßü†Õü2ú×ý ü^­}‹÷ç¬ï§M}þÚêä!± ¾žÆÎ÷уÑÈ—Ôót~Eãy7ÌÍxŸÄþ‚:)Å èujŸSë=š÷¸©ò#:SWÿàQŽ _.×FÅŽÈÉ`.ÊùJHû6š7Ø“æò¹ÿiŒü÷z‘ºÑÅ÷x¿äËA|)<áZÏ æ »þÉõL>L¼U8)÷­ý†ÆПVŸ ï óîFÍñÔWîú|¿à2žõ'1ú¾¯!§’§é|W°·Tò‚ ´ò·¶>ÏEù¯†,Cÿµo-{µt~ǯÐ|IøsuÇìâÿ•_H÷¸îØÿž/­s$ÊY(îÑúµö'Ìù¹‘·‚‹‰»ŒÈ'dqÀo-qm€¯¾.͇ü‡ù‰£ö|*¸ ý©¼ë98 ý•}ŠkQ\ îQðn?š®gšoª]U>Ë Þ#vPí¨ÎYkžá{‘§~ó¨'Š?Õ½YÞ ¾ÞÉÚåëðë¶F”Ö¾ õ\™Ëþß9/ÆÅÉ<ºö)uEý­Öƒ¬Ÿà?¥ïÔ1óìç÷‚OR|±Î/Ú^{òõ³Åx}õvL÷² žCóh}Fæ3‹åºžiîEü±Ÿ‡>'êÎUø4OSûðÝŽ(D¼ßo1r,y¢ò¡ø¡ík¹^©Cµ<ê¾í£°â×âËÐk™V> ?ïuÎK÷lÈ~pó\ââ»âÂå^ý“3µy‚Ì×(»öÓÍŸ÷áÏNÆ"ç2Oê ¸CÜÑÿÏ{Ö=ôIø€ÍÏb±O™âç%^²W'çuösøC‰ŒlÓÉ?„7ÏÌ69ÜžæÚï×úªu+&ä·Ohnú5`LM|MoÀý=ØËó“þ©Ö íwŸ?ï^Œ}98‹ß+YéþÄŸ2·jl:ƒ•Ž ¿.åŸTy2÷=ÀNÉÞ2í÷û¾Ë‰˜ÿ´²D¡ß2¿ç,x ;&{Ë5Oö¢3’oJ]>¨ ˆ¿ pZ×›~š>²â%ž·ú“ oNÀÓ½$žk>.¸¶ N5ó0z&ûpTOµÞ`ŸkÈý\½È¹É¾Nõƒ.qAIôtÏ~ÎYúÐÚßSœ®±g qƒøï÷ÄÕR'ÑyBïÆ¸ˆ}qš×X ½ø½ä Öƒ­|ŽðÓÇßÇÞÔ­1ôŸÈ¿ñʺ>¡ûlûâr9'â¿ Ÿ þô•'¡}óûÑøEáU<’Uë0ùbÎw8WÁ9%Ú{xߦõ?í£xo¦BïþX@¿Cæ ý£©È›rõľ NDý®]õ7ìr¿å_‡Ë­m^çy¯˜„>I_Ê,3€ë+•zÚ–´ä%+· Ç¿¤}ÍsÔÎ)¿‹îûÕ~Î)؇ׄôQûrþ„šøÉ”?Où܃±‡¿d .%¼Oº_Õ/tŠëˆ*ÌýIÿÂLqˆç#uÌ N¼¬>Ï]ú˜Úo±Ó¼DGælƒ¾‡ìu/ïÃÞÍX€—ú£ú³€íÄT>_êƒj/¼¡—ð7F[â/éWª=ò>Í3ÇläµoOü\ÌŒ{ªõSÝ©<=ÁÙ£ÚÝþ‰ü›IÎ5 · A]ú\ž[çÍè±Ô ü‡¹±ÿZ·¬7»z!ï|‚Öíì9uø·Ì› î‘GŽÉ^ø)qõ¾TÈ—ôëu>Zó]£a ®Oölù‚Ê©öußàPƒúKÂxâléG¸;O N"à™|Wp-»pý²ïNõÝß¾™¾ÙêÌ|ë/yº9Ujòh‰wœ]ñ2·¤8_cóGˆÓµÞ#sغo2¨ót¯†ýü“î›5/È« _âºWö¢Þõyä^ò=ÿjz®WxòÝë¥xÕ ïžWŸŸq&é¢pùóK•FO’$áº$û·~´În–/…Ü >A÷;ÚËZ‚ç¾Í{µ~aÄ´æeOÎujßF÷bë<¿Æ;v¾W#ýsó›|þ€;ÔëÅïZ ?ž~>ú}þDë§Yj!yOs®‚swÊ7 ïêép‚7×¹R£¬‡?;^¹UÜÖ»)9§!³¸ßt-‘sÝË£|ñSÁ¿§v¹`ö(ÉžØ×¤ón‚×¼Èö½”z€öÙüwõ†Ý߇~.9„<½0ü¹)nÌÞ÷*ò8q<öTú)Š›Ð9nÅ?¸ÕKÑ÷Ô>â!O"Þ÷ÁYî[x«TÜ⫱?%‹Ï*¾VžO§&yÏ—ýÉÁ>©·êœ€>gãÔØYñ¯ŠÏÒúú¿õcm›'ó»à±¼ûßFÔOßç>Š}Hò r$y¨žgPÇ“9a;óŸ\¯ÔsÜͱ÷ ÐG^­¯)®Oãq­‹Y¯ìáyÞ!˜s\UÀ#"¸‡+ø!§AjäPp‹þÊßÑëteñwk„x't¬Æ¿.DúXÖ‹Mø|’>­[¤ ÷-÷]âu&Áê^#ͯ5ŽÑ¸Rë ú”Oß/:ý•º£QúÝÔ÷ýß¿DRž“Ô_½¬Ãˆ…ZçœÔqà6n´ŽÄKÚÞ‘ÑÿQ»ì)Ísž•ùùo¦Ðç|§Ó[ã÷¤ÿ¨x®`^q£‚cÑýó:¢ò¡öEó #ì‘ÔÕu®Zû úœµïì;ëùz.q…ÖÉ•/Cù_´g þÿ!õ:+_²ùáÏGã7{Ï)¾§jйçºë<vFâÛ Ÿ)scÊ[­ý­¹5FPÿËY8Äæ\öˆ«5/=uy:Žº’ð`è¾ZõëÁ«ÔýÕ*nØŸ˜‰¸:Çïø5©*Ÿd¢¼`'Çÿ°Î…ûÇò{éÛ)Ty$½ã£xÞ2'øŸòE#ò"íÛ¹Ë[áï„g'à[ܸ3Žç#ü²vê9Ä#O'ï]<«ÆŸº7Qû—y×-î[ñ’‚¯Õz·ÖÝõ|tþ[ëÉ®[âW¿ÕðÐ9%ÆeþMù7RB%žæç¤>¡sAʪø}õçN‹øC©×xõor¾½žÇK}Ú4 Gè+-}2æãO¡}uãF]¾_ú0Z7T9×ù5µ¿šgy¹È‹Ê»Óù4ß/ûëÝEÝè ÎÏX ýìcó÷ÒoRÿ®öNç t~Ç«÷-~F÷‰È\U€[Mû6ç'ý7í“Ú³òý Â?ê^ãÂ}ìŠÎIþiß>Gü/sŸÖŒ‘ة̿#vEpRº§Aý§âè4Þ±6¬Åô›Îý´YG~tÝòð÷¸pÝ¿«ua9#ú4z#uj»{äAúôº‹'4ooÍ/šûöË]&v¡Ç¿*×õGìp°Oxv–Åáú¨ó÷îÕç°ËRçÒz¥Ö#µÏ¡þMí·>3ª8y²Æõ§~ÂÞ ŽÃ»|ùŸò8„ïÔ½ßZÿð Èû­‘Ì6ý‘¸Fâ çô%ì”ø÷àhòRá)Ò¼V÷Áë¿ýƒ±ø•Ç5ÀïiÀkI¢|À»$sŠëæe>^ùæ•'ÓÊÚ{úàfoéç,O½Uæ_‚8sñdúoÒ¯0£ 3Ï*|öÊ;ã”;2 9É12ôûÎ>áûêWýÿ"¿ÿöO×C÷‘1®Wè¾/ õü UB¼|Ί8ø¦W É©U5ôšhßÙ{$s>VåU3ÂåTëÐ:§¤uåÝýìy´MuØÇ·¡B$Edܦd&Sû&®Df*Ó6]ó¢+[f™çLm®é.ɘڦ¤ˆ(.vH™"³„÷®ýyž³Îyÿd½kµÖ{÷?wsÏž~¿g¾ÚOþkÝÐ/š·’ºg£ç äŒØÉªgB|"òTëßWWûâ5߯}(Zï¬s§t¡Ú9Ú÷൘À÷õça—}(ýöñ|Èïá‡Üð÷ô^½Fÿø*Búìûí=…úþwWŸ/üøãþÉaxnƒBôe—ß=]ø>ØÿéœÉØIþm _½zÿû–¤§†Ï—eäcÅË“ÿÆáö—ú?_= ‡ØïšôÐ|TÛ€Ž®î"ò±oðyFñ`ßÍè«Ì½¼\36ø•oPp‡z¿·-øìW*×- “N)‚ïÝž¹ùæ\Ïú HçàûƒÛ[Tãyj×¹½6S2}%ÉGò‘|$ÉGò‘|$ÉGò‘|$ÉGò‘|<úátÜÄWìgÕ â,óOñ£U‡ÎÄ]²qcßÈ âvŸÄ{œ´ý‚ÏþÑQA<Ç+s¹_z¢sÐÿàfhqž¯xð×;;z`øùFÆ݃ÏýW¶Î?Ü×7¶Mðû4 âC£OKŽý÷;ªìKÁ~Ž˜Ù1Ø¿”-ƒ8±9õ䨀.ÞºàCxE_ âÊvânâþõï}7þž\AœÙÍ]:ˆ?[×_¡Oýdÿ ~íÝH$ß'ùÇßRJýÐ9ò Õ©Ctô%^_<‘n-ývÞûžU—üæÖÒo_üÜúx¼¯^ _´µ)u*%ª’G3*‘§|þoÉ ú,–f%?¿±u12!a yò·ÉgU^&ñÓAê©.{ô“Ü ÏÝ_µšüç9éƒ)œ^êïé74¿íAzÕDò.sÝgÏ·qqò‹Í¦y3Õ0©ãfN¡YöYú¹£Ÿ ò^Ûiäžžäm¼¼³‡ׯ›H7ׄÞÿŸùÔ³W|¬×)ú_¬<Ì©ñ³fäóøbìïµÕäûÿ¡þÈɵº{v·Ô‰í"ÿ3l2y¦¦ôGÙI¿Êò7ýj“/zq;yûw˳ÿÓèïôÏõ–ºLú\œ­ýÉÃϹEÞýÊH~7„º-wý~¦ºðYêÛyÉÿ7§n[ùÌúüd?kNò¢™{T¹-ï7@p³>oÊɱ‹z™_3ÀŸ¹™çj¤®Õj0ti8êó;_Ýb=Z&ýâiø©ÿ>òÛÛ³®¿ÓWC>{ÒFò|Ñßr¶ï“ï]îµcOຉØŸ„†Ô÷ϼ 8‘às.ïwBê?g,%_)uÇ¿@Ž,O}Ãà”àMß¿ÊóU8̾LlB^úõìú~Þ”-óDî|hg,ä?­´ ƒ~rÉí ž!¤Wÿ£‡bsò–ï@.} ¾ŽÝþ=Á}¢nÛ<³ù’!7ùØØ¬o yYqyÏÌ˰®'/?îsä{µä=‹mþLås¾\ì÷ëÌg°:å§.h,ýÆôÕ˜©o%ˆ|¤ÿôýðî'ÙïK&üpgô[­ôæH`ð¨ÝÁáÃýÒ生<¯Õa³à¢€OâNlH½ó¡‚g6XúoÀ;6¦oãÿMºPŸ;6-tqœú§JWîw¢<úfÄfê†rÐOoæL½Öý…ú¾a‚³?ý)Þ·ä6òå Ô :%À 5–L£>廬ãпàÑ Iö×é‘…:œü-Ñ¿/ƒîùºã²gk‘w^C†ué>|¦zzÃ(éoX ŒOϾµ/Èy_êýJJßœ™9•©8u 'gÀQôé3Þ þùÖÖÿ$u–Iú”ùñÔ9šýÒQ2 >8g‡·9ÿ|”dwPßà}ð±³ü¯îMêcžnŽ]Ðãû=úxC6¸(æ†áôí˜7¤Á ᩞœ—.QðêcÝÊöB¾tÝý^v¹Oö¬óe›}»¶ŸúØ[Ô{€“àF5fÝǃ‡c{Û©t©76çŽûöeØ…3òyxféÓ¢¿Ëúê0ëÛôyèÿf¶¥árNå›ý;x&VJºŽœj»çm‚ògæ¸pù`¼ n¼Q(-rEì-¿]VôJ|Öy`êZ_\þ^æ$æW$Ù+\·}jv¹èh!uóú<ÞÊb¬ß‘(é³[\±&c§í‚ý¤ö×CêrÍfe¨ï˵*Bêz›O¿Êï²n‚N—Aÿ¨Þ[.õM[úrý/îñ\Ž-ßkvôfS™ëUý½øð÷q¿Æü¥!ßÁ7YRýw=êE‡ŽÆîú5úªýMVùiî»IüÔ19w@+RIÝZ1èí éûûÙhü=ë×sôÙ¼q£üuìšEÒ÷¿öÛ¬ÿ9=«;vzéÔÔG×[s}ܨ=}ëéÿ·tâþÛj@OóOI¿$ó9’ì^úø}ÉõÒS÷ì‰C?‰ü²jÅ`o¬O ]ììÊóöÔéþH’? Ý5Z}OJä¹;úàÍ-ei|Ÿ¹%SÀ×å›Fè-ãËÀk¹.óýÐC¶jÐ[!pr¬¡Ë¨w:B„Úʧ^TÒïR7‚Ýsxïç©×÷VÓŸbüÎŽÒ»ÛHðø–ÍFÕÜÝ®§Ð}f'öÔžcÔO©¼ÊÏÜO£S*Ökõî´ú' sHÁàUù#«ˆýŽ„Ú¯îÝ\/õÑj_ëSHŸëøöâ ü¤¿éWu¾Ü†}7m8þP¦ ÈÍ©y¥/£ûcá?Øûã¿È¾›~Þõû$rØ/^~ø³1ÿ~>Ÿ'ø+Ö*ê%OBŸÌE?èkõ Ý_ëRG*úUícî]ö{}´+|øÏnwðXÕNõ¶Î`ŸE¥?ó>sv¼é?Fä׌±qáϧv·únLK쎅EYwÕÿ}˜gd§~ØÌÜùûo]øètkê s¿M_@«Nð­Ø3^©áÈ‰î ± wcLj½ä|z~¦Z×ÉÞ˜Žû7Ï¿«]qóô·6ß«ž¿ÙhVŠúãg¶qÝ´Ì©2_ÇyCÜÙ ïþ¹ve ûØ£û2 þÜ›éáñ×a½¹^êTÒ7‡|W}oFŸ-ý áûœäŸ³/Ùb? çw•kîíªðc·K+åwô‘4N‡%þŒûk}è£Ü!Þç!}`F½Ñ£YnMú÷¢šñ¿öÄ;ÚOÿ:[U'Âÿñ.n峨™jÏØLÐÓê«^ôJ?…þë³},MŸ˜“!Ê ß$>ÄÊ^ùvlò±ëäãæXorÿDú–ý?BŸgÁUvÿzrQ8¿™Mê²ï©v@WEú O³‚cjöÚÂç+1Øâ÷à§ð»ß°Ë½j½áÏïÁS?ß»[xxcè¡ë^è«~TPl<—ÁÏ-‡´äo|^Â| çl'ì²5k©?í]º·Ñ/ §SwÞWËÂ÷ÅÚIŠ“ú%Î+8ýU¸$òjËTÖOô×`g„Þ0?a?[ƒCäm£ÎÛ»L½¸Ò©Êå=;Å@§›êR_Ý{(öL…È™ô…â b÷: X±“̥̽õŸÛÇþ}½ ~¨<~+²?Bâ^z$ù{ÿ˜v×»Ò³WÁÛÁÙ±ãMÖ9ßfäU'æOx•²ß¯¯/T /Vâ‡vlkìÚ£µ¡×~]ï€ßëŽwÎÍ]zU¿HìLó‹9|?\aõËœe[‘ïbïØ¯¯Coèˆþý`r-mCôõoÌ©5Ýß¡¯àu»½èk3RÞ‡nJ€c,ìštw¸ÞÔðãË{#ü>·oü_±{ÌsEéw½z‰õÚ¼/>|]5c..ÍzYˆ>™5<®JÕþöoÑW ûâ5ì»ÚΞ°_nƒ_dé 9xïÉ÷°Oê·‚oFÞæï…‘oß®ƒâd¾èKõ‹bï /JEQçý´Ì!Ér =%òÉœ0ý'þ±g âHƱ±ÐOÕ‹ìïéØ;“úñYâPæÉþKÂéÅš[æ‚Sg±Y/‰;ªýç_Y‚Ý•GæQ>âá$ž%RÓÅ.+w•¿¢ç쨲¬Çû£G`¢ÊIö¯0õ÷!¾ |wøÎ~ú\Ôô[§eEŸ[N'V® Bo7Á)TùU쮫qYÅ5>‡úÎ!ðgÅ^Ö¸¹Æe­|àæ8—À·±·/FŽÅÎÅŸ=dÇuEo|Ó}5°<òIýÝég¡û•à%ûÿ€là:xß®ôa·Wý sÿäc‹ÓðÿÓåÀ}Ø›ù÷3},ÎŒ.¬Ã©œ¬›è'w x.æQ™cÞ&>#þ¤sêEä°Äæ¹ÎfÁ£ê)ø1³kâ?н¨v Ý¬¿«á£ÏÄŽóvÉ\«Éôé½s󾙘¯ŠoåY¡œIàøz›èÓÓxœ5\>Í“XsÁù1jU$¾— üA•Wî O¹®Ä‰ŒïÁ©Ð<‘›Ê{,ü[ãîo̽z[ðWª~‡?+òÑ™Ÿz{CýQõgý¿^œ»Åȱ£CöÃôÐñÊó\¯Ý òMéÖÒw÷»Ð_ý¼è‰£±o%þgÝ?ýÿµƒç(~}'òÉ9˜¾’ø£ÚoúüÞÉMðçÚù½Ä·4ÞʧOÞé‹“èµ½1ÈÏçË@‡â÷ª>÷þYÊ>IüÐ~oûÒü§×ú{ª|"øhoBŸ^Á¯ÃË"WЧif<ëx‹}?œ½Ò7ïŠðýP9ï.wMóîß=ãÂù;”'ìÏúˆ¾óZ‚ç®þ«ú9ÖŒìGæEúS£x®nÌõp ư/õæˆ'ÎdþÔ9¬~þí{ð×{Çyï¼àß{×û@g-À)vªtMˆ Ÿ»gÙïW ÁϯÑÇdo_iÕz“}yø¨‡÷aNúÙê0¿Ò¬Ùn¡<þ©È}/uMäa±é¬×æÂ…äKâ"ÞOò°ÎZ™ß.þš[aòçÍKqá÷3î´a½gÕ¾¾*÷üF»±'eÿÚÝæ¼Ü¡/±CíjoñYâ€FÚW"ô‡3n/דx§—½Ï!|(ñÏ${ºûË..s½%>¤ö¿ÞÇ*Ñ ºùý»yáòÁ©ar‘Ïz?͇'Ù±ûgµù ½’ ¸²#À×µ2¥ƒžÖå†þÚNÆÏ_/xKb…òf÷vËœ â&þS«‘‹è‹w>.Þ¹âôn…ü’8—úFý{Ä»5Ωq ‰?‡â ’ow:IŸo%™]½çIüÔy ú’øSˆnf¾](/±«„à÷ÍÜnõÏÜמ€þ%>ã­,üXóOÍÕû©S¼—Êio<8Ÿö–ã}¢2GÚ9Bÿ^æû®ŽøÃjø1t:„yHZGtöWä¯úsê?;'™CàFççÿmCWPºPÍÉÖšûLgÞ©;Œy2*OÌEk8ßy¾×ø‰ø™J/ÖUprÕÿ ÙaíÖ *zBóºv»# Â×E󰯹g"âQ¿sÊ—Á’¸ƒ±â ëØ}íòþÖó¤>Cí Ï7ɜֆ¿âOZý AGšÿ•x’êO¿d^è·ºàw γJÖwu8ÿûÁíñŽB>$î„Þ¿Ê Ž—ÆŸ4NÊ?ôIµÄûk\Sìsû›jìÓ«9ÑC©<ô‰äK¼bñ/MéË–|‚Ûº(|ºg3ו¸Rˆ¿5î:ùβp¾sË—­ö±µ0v~pAœèë·ßÈ0ŽÈ£(«<4Œ¬ñs¯PçåCÿÿ´wßâŽÎù =¤rÝŸp zëÚ™8m[æ¼yçפúmžo_û¹-%ô þ£Ö?$ýŸú‰,‡Àº]_'Ø[™ÿl¿ÄœFã«õÄÅľõs7@þ\ŸÁlðõeEËA×¢¯4O¯ù:ͧªæ6‘K’oÒx…ÖÓi~Zóùê_ª}Ê×¾s˜ó$?Ê3ï_MýJõÿœù¡G±¿uìQƒæG<ÿðY¼'EÔs˜÷ÀgÕ|€Æ Koâì~±WìϘÏgn­H~µ s¯5ß y¿ÂÑÅá|¨ëd5¾Àûýñ#öP9æöhžßZ²aaøs»±ÌÙ±r1ßËmÅÜ'5¸:ÿ0/ù áïmö¡oÉ£šiöó\Z·$õ*ÖZæ>©Ÿb`^à£*Ÿ½ÏenD"øF‡ÙпØËîŒQÈñÓ2ÿC䣓]ðæ‰YO^b¿´®«Ûsø‘SÀ­ÒõÔu°û î†èQïµ4¬ç¬^ü½&¸¼Ç Wɪ?ç4½ þD‹…¬ŸÆÁE^¹£‘§ßV}§þ¶¹|ÿÊô˜è¯ö8ônÌ`ô Æ3â&ðÿçKŇӹõK+ž«Ka¾/Ñ?BóH§_ù/¸rµ÷ý^9¨£=ê¾%s ….ýê-Ñcâ/Û?¦êÐÆ~S?®.°[a=üö«½.œÕ×з’'öšLZÎ×!~S¹¶rüÒ#ë)ñ>µ§œ‡‡áŸêà [/4å<Ék˜]™‡â¬«QÇŠœy=¿ù*ï11 s¦þŠ|Û¾k…¼?ï1ö\0'ÜÌ_å±ü_«Ï×àÌþ}{Z󲿍–Ä«ŒÆßR»bU7ämƒm¬¯Ôhý‹Ö[ð|R‡ªË‘<˜æ#Cò¶Øtènn ôAÙR<—ÔC‡üoòàÇ]ºO¼tójCuÀZ¹ÕjGšërÌ ç;oEuäK&æfµj ¾.õ–þÌ Áz{» ›s½Ï­u}…êÀß®`§Œýz þ±Ó/ûLêi4­rXëÔ®R¿Ë.ó=ë*ñ)û§)ìƒúÝÓÚ£Ïö2ÏLë:4~¯~¶+ó¥îÛêÀœ6•£nšŒØ³… #—žØá˜åŸ$¯ûÆfü©‹IÒ'ðøÕöÒ äJ‚Ëåoa^œê·8ó!5¯äµËLË€Rð…ØÙFYðÙít¿`‡IþÐ+Ûu\× ùr®(~N¥çÀþúnÝGáƒ$;ºýa“zq³þ ¬ÈG+SPG;—8GOðiÕ^SûÌ<¿©û—ùDcóìmÉ¿:-™+oÔ`îÚÍš×rwgÆOhÁü[óZ‡ú¯þ•ùsî½ ÐÄíìÌíõTþ¹R1zÔ¸T>æO©ÝiæéM|C䥿ûíÌ¡2¾üˆý=W:“ü½æküÃyáK‰ªß§ôàX?EøÍJj™Ÿ‹È·8£ ~ÿdaê¯DntïI~fv_ÁÏ—¸–ä#ü†ÑØù©â_ñò·gøîA}ì#ï3øFê‘Bõ’7 ÙÛ¹ºÂ’Q>Öú›xuúÿÕø§Ú‰·×:C+äÉ•xø¬øjÞ²cØEÞCäžä§5O§ñRµÃ5žh4‘[yÖ —S¶ìù(ôoOXý£ùûôs ÏcÌ!q¯7A¯K}I¨Dãy“dNµÄ߬"ç…Ó§ÿC*äΛ{±o$žaþ1™ï%Ï¡ñ1:sIT¯»åËÃ{dÞ¸ÔÉ©üó^:/z›ü¼qé~YwæxŸÉ¼¾Å ÐÇR§kf{ ¹ÒñL\øsi½—úþ'cÐsµ–oûMãÙZßa6ꈯ} w · ŒxG¹3/³ZÇlÝÀŸzóŠÌ“8’ÖóhÿƒwìtQyq\øÿCñR©»Ôü«“©rUê+Ü|÷y¾ÉÙ'â'¨½«~»ú÷þ+c±¿ÅÎS;ßËù÷Ñ<¾ä¬ñÌ ×ý°NÝå¹$Þg=³2œ>ŒÚÌ÷ó  èѹÌ\Nõ'5ÿì½Z‘÷Ÿ_uÊžOü߬ƒ…þCööCý{o¶EÙõñ^ €tw Ò Ò)1Ò!-J !%Ý!8(ÝÒÍÐÝÒCww!R"µïc~k;ï÷Ë~ðy½÷±·×—9®š8ÏÕë¿ÖR§:ý„_¬x7Å©«ÿï)ýÛ‰û—øò‹×ê+žCðÒÖÏŸûq~ûáGä¡Ï$uGÐ<©u‚¹ v~æÉy‘y/Ì1Rú k¿žé‹\ÈÓœ|¿Ô㸱˜wªñjÅS¨®çsÒ÷öí)ëk¾!ÈkvÞ‰¬¾m¨Ð!8æ})°÷ì#.°©ó©Š\AÞ VãKNÑ(ØûjÿI|ÏK´š}ÿÐÝÖ:{Ðs9(ù2õ/âô]e }^LëƒÿlG¶8üÑ;Zà O—NËݬoï+Ð[áÍKÂó¡Ý-÷#ñlå#õç‚<­è{•÷ÞGãNŠ‡Ôø_Ô;ÐKræ[xN!ò]Ùk¡ŸëNe¿Ÿæg]Š¿ã{Á‘ºß¿í÷Oè_å¼Ú[jjÝB¨Æ è²Cö_ð¡F‡ÑŸ¢ïÕÞõîÒŸÞ;ÿ`Nø÷šÏ ô«ÔSiH÷Gõ7ï%ôòçð5âÿÙyEÄåÍAë²$<]k‘ù4÷-~C˜ÝFß|‘Ëî½OI~'x…ÀØQ ¾‘z$Åe¸Ãî#ÇEž#F_9­8aÕ˺/aëÁ¿ ê9ÿ^οÈEìüÚ¯àçqÛˆ“+èýjäL/úZz¯³A¿³îý#úW<›®æ±4þ䬪‡ÿ#8çñY©W êwÑßUë³Ô_1«¤Äïêñ”>ª+O!GŠbß%®£8p·C_Þ'Ÿ…#õ+V¡XÈ×ߘKâ~EŸNÍ_»QvOOçNý’ðQñ˜¬ßëâÔö¥LàËR•ÿ90ħkëéï®ÿ»c#7ûŸß[ =/Zq€ïKîóÏÛéÍ^ÿwÏùï˜ÝýïÔ›úß×}ãn(âóÑèòÿû–`·I<Çøeùõ_àßÙÌÙµl^ë>ý ò]ô˜úŸZÆ·ÄK8ÐÇ„ØðuÁNð½ÔQh]¨êó NLp¾æ KðÓÐfàÌvdç··0‡JóƒöóBØ ‚Qü„â>´FõY€Ÿ¼½{ûkúÇ ®\ñ–j·šÑ"ç%þ¡þ“⬽̭ÿÑTÅWvŸàÖCæW,ŸA|~Èuì|­ãmÓýf$¢Þcå*ì„j_r~Ñš×S½«¸Å9Ûë3³O™+`'Ù•°4ókmîgùAú2OaÎ`€+—8šÆÕÍVÑù^òCÖíÜàÒz3ï:Ô®ŒO׿OÅ|úµ’6:ä_'_ï#þ÷5¿öß;YBß»Þùr=Ì^ñ¡Âßíöïóúsÿ½959ï;—ðùÄRŧ÷ÐÁ)>?™{nøß{Wm÷3v!÷¶¦Zï_gâm_¯x·žù|g<<íÝ–ÕýÿƒÊûGgkC?.¥rIóÞŠ×S»KíK¥§@? ®&°WMéÇ·Ìk ῦýõpDºÿg¶3xìg樼36Õ„n{½ÂnÙÐ ::5=B~NívÍ7[iâsR—­rÁî‘zT<鯅wZ§òð§]ƒþ ý«¯þ“Ö™ØÅZð|ÏpÀZù  òXðþöÕ÷¬ëÕ7ü¿ü€iáé×NHnÝ'­4;ÏGŽH=VÏ—úG7Û.ü× wÛ‚W׸rhCeîCêÏ5Ïé:ýýÓ¸»Q/òl~EŸnÌ_lñÏûUÉýþ÷ õß÷ìê¿wFþŽœ~òô^<¦/ÏÝ;U±kÇòéÛ)ÑÖ—ëFÞE豿ùŸ»Uûtj§^†}Ô`¯ÿ?§àZÿ?„^ôòÿo4.íÓ}hhrŸì$OÐ;+:¢_ à¼\òƒõ!ßwhá _ªÿ¥ñB+UöëîìIŠ\|—ƃÝÔ‡ç†ÿ<ÌnľìV ½­v•à@µŽFë(­#K°ÄV: ì ñ+Ì r}ëØ=bð¹Äÿ—©ñ3•ÿ¡”ý¡û˜•°O¤ÿȇ¾ÜÄÉ#Ò‘ânßn n‚=^ù/èVðøŠ¿U|œÑööåˆã<Ÿ“ù.ö‡¹y¤ê¿Y[α^U¾€ïÿ.~”{õÓUÈ—Ø9‚›Ô8KPŸ31û~ƒù˜N×ýÄùË]Ç¿¼ï'’þ¡³© Ã†+û÷‘§œO¡Ç¡ï«|9¦g¶úŸ­â½…g¡¿‘ù±ãýÂo]»ëËsgà4ÿî7ñ|þ ]x‹Я5ò¿çaÿºÆ”ñþç^ჾeœÙìÓ¹U»ŠžP­]ð]ýç>Ý×öûï½ñ“ù|1ôʉ.þýÚûÛø×5œk›üûØÕ·“4NjíKÿuñï¯~q€k­Ó;lYèð{™'Ùˆ9zFýÈø'wÿö÷ÃŒµüBšt¾ÞмšÆ}¼t눇J}¬{ñ(z@ü‹ÐîêÐWËyèm­×O•…<—Ôc¸ÑGÃ’/ êJ”¾2{©‡Y7ü?¡3ÎÌyáéÊÞúù£YD¯~‡¹« zPóm¯\·;Rû–¸[É“IŸÅj åÿPŸO¹ÞËt¾¿iFNM‚àû<}kæ‡*ÃŽIüN#ÿ(>—úrÅÍ›/ã¬óÿ¿d!òñl"è÷‡ƒÐGÿù>½„î6öå½ûâ€O¯Þð—>}Ú™Nûß;UËòÿ[­±CFFÁ.¹žÌ—ÓöúY»¡«XÐuê^ÐáðTœ¯gnè¹lMÿ¡'Yýûp×|…\–ÈÿÜm2yÿª5üt< üµi6çMžÙ?Ÿù] ÿs3Oì¦Û÷áÓoø|à½êë·dCôÛÓ¿¾U “/GŒ¹¹‰NOqÉA\^ûpˆ=¯õ»ê'•Vi¿âvZO0‰y¿qk¿ðõn€—œN`_Ü„½!uúA¿ñÏ4O¦ûíÍï‰þ¹i\½ˆÿPüÀ¼ðôfFšöAö˜Ÿä÷O â-=7@×ï1C~‹}¤ø ûpYæ}¡_”Ýë qQ‰Ÿj<ÙÉÄœ˜Ðyè Á‰yÁ/ªÕ|•µçû#ñ£iF˜~äzqÓoìµÏ§{¯üBè8éìøÆŸa¯ÄnäÓsb"rym$üÒ‚ |=>Ö§³m}èñeWŽSû"ÖÀÿ¹º³Jèm_ üà‹ŽOv’–ü/Žøo[ÀËûônEkÇñÎ|è¹ä„Ð[]ÎÛã|ö.ǸW¸o'1þÆîsðIŸZðU;wüü’û¿3¿»Àÿù¬³Uýÿ«<17>˜~4æf-–uöõG(rwø~[bÿè5Š¿±h5yðRõñ[žÿÅç+oc‡ˆ¿«85wÒSü÷q£ï£Æbß'ìÁž’:|Åw™URF¨ƒÔ~1ªO4­ýu4_fWP°—å~]ÿ¼Zgw};öá˜H«Xwú3©¼Ö<µæa­µé#¸æY÷XGÁ‡Ø7¾‡O~,Êz^Kóòš_ ð†5÷`çI–ü þ³à*ƒúÕ•‰¹Ï_Ç ‡ËŽÁpÚøtdÛå‘K¾ÄoqÙ§·\&øâæiŸ½¯ç@¿£Rcÿ„þÄ>*Ÿß¯Š½’¹5td_çø¾-|µ¿Ø¾7 ;Gì·áÐëÂ.¿» Ý~Ô úšþ†¸ÒË…Ä™"eDïd|?”L‹Ÿ±'~I ØW“ò|&ñ}sç¨WÔçgw@6ø¡~‚ÍòüQé§æ_úñ'{ùû ü>úè^~Ö'ö<ŽQï`×½û½Ø}6qÞ¸[á‹L}ñsf·E®üzÛ—CN¬Ëèã×·°´žÈY¯Waè?æD¾?Ü} ¸Í÷˜w&`gH¼'¨/|“·1Ÿÿ=҇пöÍ´ºÅƒþE…ú=!¯(u*×µ^TñIêçõÊÚJê)Õ¿² OE&XÊýJÍ©º…¸ÔÏE™Û©uîîkzIÕ3¿q¿ñ ½Â/-· :n–:lù¹¿ïÖG)¡7ñ1ͰÎEFo^‹Ý}°vBÕÅÄ'«gõéËrºÚ˜? èv⢭?å|µ×bWï@<'Þyø¢@YøðçµÐ˲hðé¤þõcüø÷dì A‡°ËÄÞ2Vßx׉çÊ—÷Â^ÿ<Ö°}>=[ÙsÝÌO°·.]ðå½³ê1þøÕ‹þýz×37ú[éÝ=ŸÏéÁóÿˆøÖˆØWiùñPá“è›y%ˆ_«å¯‡Óo9ÏSý·íáùê–†ëOظ–ýeNnà¿J]㸡}ë 7ÁGºî5ì|©³µwÿ ]^eŽ ÚåŠ?Óø†W<攢ÿk%›ú¿—¼¬öQýdÖÂõRÅÄn™2üMÑkЧôq }*ŽSð¤fâÓø§bÇi¾CóLÞ ôÄk—ê}x§ä½B÷/ùñ‘P¤!ÐuÌÚȵ2Ý¡—è%‘ÃYšÇ™³Å?º‘¾‡?Úfn¶–ÀŽø¶+t?¸=û÷ñÄÁ¯‘wovñ¾Ò#ŸÎŒ ±±«z'ðó^a~§O¯Vßì¿7’ãOlô¿„>gvGoT«Ž>Ø›º*ê /—½ôÿgŸü½Q@ôQîuØ=-ÏáWæH½ŽFqæ¶Œä+ꞃ?·dà|‹“ ¿OayOóÄŸ-ãcôH¢”È‹EÙáÇ(¹Ñ'Yk×K7„õÚnr¿Ÿ¼÷ŸÏ8í$Ï×ÖÓüè±W7°›?E?”ÉÁ}Õ¶JÎK¾VíXÉ—jÿí©qGõ‹µ˜Ö¸õâ/K\È]s’:žò '|ý?ùÌïûfÏ;Éy$¿ÔÍ IãÚßÐZÖæô6ü‰÷kŸOíK¤ykÏÛŒ%}û‚úTÁíh}i€÷’ø‘é¼OŸö$èÝi|ñ¶FÃ.Éš“x{›ŽÐíóQø£â7ºåÓAO3"ïföåa(Ý×ȯŒ—áƒÇ±Ç7ô†N¦G¯ˆçÓ¹ñbÞá|¾§ ¿Û•yX|ï–ðta¯›ýüW#~7;*öO"â›N±^Ð×¶CÐÝÈC»ÂÓ›»úvI¹¨>¿9w ’ÿ¬Á|òЉòØÇ•°ï93?œ¶•8µäECSûÿÓsÈ·oâaoVûþ®R‰cÕ-ØYå¯rýÞCðKF÷BÞl9Èç“›ùG£îTôÇÆ¼¬ß˜<Èó³îпê«xiýç·¾*Ãÿ«$ó×É[¶œxœÈÅÓ¨Ôù§kÅse>wW–¾a×Ãÿؾëƒä¿±`²ß×[ûoõOÚ׿dJè^üÛМeøÁ}#W7gWŸÃ{ÁéýK¤NÔJ0ú¼ŠöyÕ:ËGžnuü-»‚/Xôtsâ~æ–7ØùcºòþÈEôí–¯‘O s±/ŸàûŽ=ø>ò-”£&ë;ÜëûýWüBÁêÈëe™±k6ÀNߟ:q ¶moø+ãk쎙롓æ_ ·›d Îcpïé[ä{ÝáÃ"‘ùø'Æì çÒ2øð.qÃ=R` ún]\îÏ|¶ ¾Ãn eLÜÎôù|öy롇}{Ƚý5ëx­„¯—BË·²¾# ¯~›G\מû ë9¤-ô<æ òý@!îóm»®FÿÿÞ• èÉÊs‰«¥bßœ=Iá›uw‡¿_•[Æ Y'í+‘¨r2 óqC÷êC÷™¢b'I]GP·£õ«ùÏc­Þôau‘CÂË íWøíš_W<øìÏ¡sÅQþ^~9~ } }’4^dÖ)Œ#ñûICô²â¦¤îÐIÁ|]{L_ÞºM¢aoš…‘ëc.#ï/ìBoߪÃ~N}ýI‘Ã×ÎCO;×ù»ññ:üÞž\joø}²Ôf~xî+ }½ž ¸„þ6®úÇ0;;ìã§þÑ]ùt\¢/òóM]_¿X3»€ï©œ‹¼ÕGÙ‘§·ÁGñ‹ágz3ð# ·æyºü„ÿÑ6 tôgRôY¯T<×Ù—ðÑé¡ïÍ 8N<Åól_Cœtu^ü‚…ôm~q£®ŸåÂ^«5¿7Ò%~×e•Èýè¹Õâ?lÀs,û yPã*y‹%É3Dk¾úñ%úíӷ胧ñk&Æ.ÛV9´ó:û[ ½Ï?Zc–¯CœHúƒ«ò“7hô9uÚßþF/ø¢åMôèí£ö¿Úòû¿ñàZÃÉ·NzLRûŠŽÍY2»^p¬Š+Ñ:v»üòÒ%¨ïËrý+u\ÚHûe¹B÷O@ÏQ"7óÿÀ¾\I¾/ü>[É·#ŸÒL’|)ö¦;·3ò0ÿ'ÐOç±ðKß ø#fð¾Uaè¤ß0ø+GäÿôýìsíëÈ¥9Ö~½KÞÆí™|F¹›ì×úÐAÞÈÃýÓðÌ-¾]äîëŸìK ŸnËÝþ•çq½69/þÊÍ>įrEŽöyn>=‘ä*rúÓØg÷@ouZ§É‚õ˜rúJpŠÿU›‡¹z…8ÍÌòÈçÑàûkàË1ŸãçK|'”i6|=mªÿœöØ~Ôe}?<Ò¼9ÐïG<ÿ—ÍÑOC ³Ogâ§Å,„¼9û÷Ùì6Ïÿb qTÁ¹¹§¦€¿~’š÷Wü„Ñëvºä—œš“ùÿ`óƒì'Mnž­ÊuÍëõ¦R¯«}ƒz“¹À'I«—½üÊðüé5^‰ß*}4Ÿ¥ñ Í—…f4§˜&òVìÌÐZâŒN¦Ðý÷5ˆ÷­Ì±Kèþ¸Ð½-rË(1ùõ†ø½æ³B§ `G€ÞþòkŽC^À_óá'·uì“S}³oW`/­Êýï~°Ô±†¾õß[±‹ÃoÙWû«CÜ¿ùvÃÝ¿¡+ûä_û¼ÈíN¥‘ƒ‰^Cÿwâ‡gÆr_ç÷ó܉wàÏO=ý~¿?¨Þ-ž£kä}ŸØè±¡YeýnB—ÏW“·p–ríºC‡nŠˆþÏiìç«Æ¾=cÿyŧgë“Gà£V›‘ˆÓ.éêËkhâr%ª°>?}"ù‰óøm[²/9:áØò§u?_eO<‹¾‘¾>ßìm©30•Å”º#+í¯Ð[¶SÐåï=>(þo¼|çÏÿÑz$ë“?‰Û Î5ÀÝ žG븂¾Ø]{“_0 ú—¸¬öúþJkÐ/!Q{òw¥‡ƒÃY}Z¦ÅöðrÁü¦6ûz¬âÞðëgž:œÞô t^à2|1½¡ñp³ÎJâw³ñ>Ao~—ö3~×(ò¿ÏFä®ÄEÍÁ5Ù§È&ÿ«º9wú¨ŸÿvÊ;ä›3ÙßGçÂ)ò§c'ÇÂ_4÷W&žùC>ü…L¯8ÏÉdøÍ•ZqŸ©3Áiî¡w¼ÌðãòiNýß±‡R< ^ùI7ø£äô[ëGÐÝ„ZðÝËרa"‡­Ãà›2ÕÐ/ý÷sçk±Þ›Ðƒa~(þéàÙ>Ý{ƒÒ£¯$àt>Ã:ýÕ‡øDæ üþ¢‡1µç;,dFç¹fÔ@í¯=zû6”¶‘Ï7ê7j?-ÅižNó¡š°vÅ!,õ:7ç?}9‹3ýâÿþpTä°Ö‰È»ê&ò%ou£-¡ àv´»Ö©iÅÿ…Ê—ç\w3|éÕáÿŸ~üûØ_ùôgOäî’ËìÙ﨟A‡ï×"§,د1ÚOì}žµzvÀ]è·Ñ`Î÷Gøfâ.üV±£Í†¯¡¯,¥ñ ÒtEžJ~ØMœzY9|A«“ì«ó'ñÍç+àË6/ɉ¼‹}zùêÝzÂyr|_~ç¤Oßv©‚à2vå÷[–`'—€½Ñû ñÅ:eá“£ñ<ÅV ï^×à˜~rb|¡ñ'ù5øFòaûÀsªß?KÍzüòr§â0ô\ÊÛÄI“!oV6%túSjè~ýϬ_ý(ðU¯ÎìCÍØ3ûaŸšˆ>O–{hÎ6®Ór|Ppûþwê¤OPïô¦ öNËê)µî@ëÂô»þ_V®FþÜ{ÑìYÂÏÔ#¯¾€þ\뮵¹ò©â=ÕžÑ:>­ÖþH¡nÀƒ¬ü„¾E"W/bß®ÏÆ>ä}Ïø›}6N²Þ{ð­Gw…—#^ûñ¬k½´ÈsÉË7 !O?ïƒ<,óNØÞ7¾#nZ{7Ÿ/í}žÌÎý¤¬†]Õ¡A>t Ï`?÷ñéSå²Û89ô_~ þÉ‘…ÄYçÇ€O/îà~nÂxÖþ?Dýr»P*èâf%Ÿ­ó‘ã5ž@ÿ»ùÞ)½”uy[žu*Õ‘Ï϶ã}ÿ+ÐaçªØQF"üÞÂ#÷[—äûUõ°ÎÁx~ÝÑ>X>ý¶a8vÕ†ú<Ûbü?w;Öiî×üµÐ¹¤¬o‰â\_ä¼¢îÁ…uþ¥0÷}.yÅ;Ìÿû`Ítp¨WÓÚš ûGúBj¿ºùm®êmUnû¿ûÞ4W¢gÄ®×>,½%ó8´/R0gHû0J}Š{ýè^âÎÊ^õ“¾½ãEùzš9º·–!¿vEnT6ÙÏNMYǨˆ‹¬Éûó‹ ×aý86ÜÁydùG54®(ë?-ÿ»3ýì19>þzxta•ý»†S?#”åcälÛS¼/t¿öÚh_>S£Ã—1³p½Ð·äÕ¦FõùÀ½ ~?Ômô¹o/Y埜ðï}ôcþ{‰wÙ»âCÕ6À7‹k &S/S:WîÐþó[â§ßEì¥þm›Ñà| $¤¾@ú)}Íeð‰à°7?ˆþݧ}ù¯x4Õ?Š{sÇe@ŽW©Íy“Ïðí¯Qnò•×/zù%xéÃdNJf{ßßä¥/“Õi3tîýÈz‰ýîDÞ‹¼nïWžb¿N±žnÒ~Èï6·|\›ñóp.¯S GF’ï5ŠîB®g,…œ)U„Ï7zØ;[‰o-†B/‚÷Q<›™¾2ÿ{$öSväž‘u tôÑäÞÞžØqê½æÆÞï<Ÿ:’þ݈K/}ƒ]óõÏÐÁÒ½>½»ëžòÏ{º·Oj7ØùWs½÷ŸsŸ³pÞ?öâ'­ÜŽ>ùn¦XEÞ-üŒQg‘’‡rÙ‰¾Lt/B^Â]¼…õþüï /‡¾›Ç>éѹŸ­#rcsηý,¿ïfbOeI„s>rÿU¢³þuãÜ€Ïã ¤ßà²aø›s3€ç×ù¢Ò—Ë<4û^ûpIýL€K–¼êúrêžóçüêÜ£ ¯Ð°…Ì?‘zO»Ljê½Î”†¾µ~Mê!´ÿ—·4ø=™çcgl‚~º£gòö2·Jýõ`^ÑþáÄ—a]ÅÎ5’nFþi^½ÛzäŠà‚½)wXÿ|èï0~…^¶uáÿCWÑÇÁ'Îsøaø:ôwÚmØ)Sëø×w7,õéÖn—¸Æ£yØ3wïbÏ·Ü€<+×6B¼Ä)½‘8ÙâRàV›?&òQ{äþÅØY]óøú+Ôú¢/¯Íh­ñ‹.å˜ï6zpniîï£<‡æ­Òþý˜ÙFbWå\É}½Ç_1}âŸGå°ÚEöüŠÐ‘Ä÷Ǥáþ?†>óÁßxP¿àä_ä1 ÿ„_«±* úºù;Å ­ú"7g_2$D?tºÿôiÿófœñgÆú~¶ö‘êlâL'*u掘ÈÓt_ƒ\f˜^$ÿ"xyƒþ§/ûÌÍÔ>uñB¿:wVçViÿ%­§•zHß«ñX­V»-ÿ|\äSß.pG\[žŸµŸ Ùë"õþOæ ·Ç¿'¾÷°~¥àÍ¡»l£±s‚33?'êôœÄºÏ‰„|ž¼˜}ù¼8ú|Èiúçý=¹!s ´n!´½?÷#ý\'£Oßæ‚iø¯[‚¿þ€Þ:Q‹õ—þM:Ó;r»çv>ø5Ïù'îAì­y¿!¿k|Œ¸ù‚ãß9±c*âO†²>‚®Æåƒþï¿E^D­@Iì£s*ðÿÛ b¥gÝ®5&®#óîÜOS€û*6|ZÏ…ø¡Ù#J÷'ù¯dà‡—ãñ³Ê'Ð:äW^>|Ñâ0z|F6öMâ!ïßîñVœóýí¨ýpƒ¹0ÚŸUæÁýO¹ê¼ØD^Lû']B^úêý§/ãybä¿àöƒ¹²Y«r~í³!sÉݬ5ðo„È ®Áê¹­ý¿žþµn'è+!sxµß¦uo2¸£œWW ?GÉ»ÜYÒ|èÇö›Xç§Ÿ¦ŽàÏˈç¸_§FG.Æþ5zÇy*%Ïÿâ0ò"_eö]ú­³+ÁŸ/«ø¿÷¾ƒO¢ÏñvnpÄFÁ5Ðg[ø!M$ðŒÛoûúÛ¬´}ÈYþ”<‚e0÷5m tR#vÐOsáó~›±Ãfµ§Î^ê2Í®“É'ˆ}íÆ|ŠL¶Ž£Ä¯Œ?ÀG¹ª§ýëôÿõhìC#ƒ/çÕ¿Ô¾Á^•îØ¥gúŠûFëžó~Š_µrënþ(ûaâgœßˆž‘¸³âÏ;¢ ¸£ýç°7½Æ¯™ûµOÿvã\пô›Õþ Ú¯Ì)þ|”ô{Ñ9QNÒWÜïÕO¡­¯êºŸÏ¥OËú²“tõå¿Öyj?í?ÌR¿<Æää˜'ÔO¤›@ÝÔ·ƒKÁ/ßÿ ž/EFð>R_ã”h‹ÿ¢x»?Îgë5ù`UAÏJœ0Œÿðú.¢?ÓèùV¿áoþ™ß ^Ëm:;FúéuuN¼âiµß¾ö5³jµ!›Xü5É+»§’ 7ľо:/Bë7ƒ9*çÿÆ®8\¿~‚Ø[?GþZݳëžON·bþÑKRÿwùß/öº%/šp×Ù }Vñ'ô\ënÈùØù¡!Ù9>Î •ʆ~ª_›õ’¹§ÚÕÎgúòƺ<<ÓêWœOâB× ò/->Ê鑉u9r~?;”;ÈmJÞÆüñ$òþ)ùiõ“½ÄËàϦåÎùÿ+ZÄ_ˉÌÜRé#eG™‡<×¾³2@7ƒ!)ó0¬Ë¡»s#ôǵºú0üåѾü×yçŠ÷÷þŒ ¾áÖJâþÚ?sÎa©cî˜â¢üœö‡‘~Vãè7ÁíiþÀÉ”üÑÃØ¯ƒç Ê°Ž½î`7ksPèzŠž>Y]éÅi_&õÞŒ]ðƒýý"d.œû6öåwÛ¡Û/ãSg¯}²‚«4¯ôå:gf‚{‹¾J2ý²/6ýd®¤êïpsžÀÇ|·Šûl³‡ì+ò÷JQÎ7á-þJ¿­ð±È[ÅXoZaßÔø˜¾]‡€ëÚ’8zÔ¾Ðû‰Z襯°§¢¦}3=¶bs&ųª¥#î þ™¾2þùÕƒì‡ÔI†ÙÛø[Órü«t~¹8|ÑwöÙ@GðG'Á5ª@õöؾÐ÷þúØ¥<æIÿ=µ“ƒükì«á_ú²j£ÿôeßY×ß?¿èÅÝioÙèdO>úû™Oð{óÅ's€t·΋V9kY~}û^ž÷ÔtìÏ\ѧ-B÷Ïw@‘ÀÁ»9fG¨ër¦V@ ®9t§3öƒÔ››5ˆ£ZÓ'`'Ä=‚:9/uxÒUçñxåâ¿ìø‚:Öâˆï=$`nº€ýÚ+|ÖaüXûö°ä±§neý |âŒUàÿoÒÇÁh_ z¼ú?ïzbè$fÿ½Ö›k]›·­#t“|;u/—'Q¯uú0ø›ÆàÃíõ}ùiÇøƒõHR?!û!Þg»‹Ò ‹½0;‹ë×/ƒž{WÓßïuúkÜÂ}n ÝžZžGp!Z'Øû«kgKhâ‡ɃýªyÝa¥Ñ[zÁ×Ýâ!¯Jöƒ?%äµ›‚½!}T?ÅÊàwÊ\ƒÐ7+fË>àßéý]ÈÅýÞz2ñCè_ãÿÁœ=éËlÎÍGÜGú"j¿jõs wöϵŸÉË<íbV‹üm‘ zqÈû(Î,À—§\ÄHÝw9޾ÿ:"ÓºÉ:v¨‚|Žò>¸oâ*„~ýÜZÐïá«þì×H©£Íô ÿNûôÝÂýËÓ¥õS!7)ò´Áìë5¿â/K÷íøYáùÝùô-qOÁ#‡ÉWî¯}|Ls%ÏW¯!q é‹åÍ¤ÎÆ^ÂÉ9úú£xº{­¤ÏO)ðÜg‡a/)áÓ¿[ÆDg«H\©@^ì~Í«vi}~ò)×6CðÓSØ»<øŠ˜•ã³È 8•ϲOí›ÀÇ,ΗÞÁ/øÆÅžÿ¶ |p«~Lbê|¼µ‘óïöú÷m×ÝÇ}·:éÛýaòõ¸ÿþÆDäÄɵϹâðƒø„ôÛ×þÜaúûCüíó¦ß?¨ÿ‰õl½Ÿÿ5*ìC®Ë|h·PQ®¯})t»öÍ{Ùûþü"ì éï,‹ýU¸þÈ^ìïÇeÙ×är¬ruÜù:½°¹õÜ&~puû‘Þ‚¿Ø=‘¯ÿžðò$”¾ø« 롟”{áÁ5;oÀÑ+×@‡Kz ÏYøMË‘¿]z“¸Ú…6àõºT×Ûúþ®Îók‡º|éÏn]ÿ~ÿÇy\ÜßåÈ[õû‘ûøãxðj^çvè­P6äÀ.䥙*%t)rÕù2!~A±‚¾_`Ç)J®_“ák}ýÈÈè§ÄÓ¡÷Ùà–gZ‘‡u½B]³W| ÿßµ:—ú {íö#;x‡0»ú/ ~/T”¾CÊ?æÛCÄO¿ÿ”}y”:wFžó%ÏÙ®6üž)*ñÞij|?Ølý¿htä¿Õy"ýªu^™5j"þ§ô Ò¾õ^™RØ!SîàÈÜçÿôF¯½üç“9|:ÊÛÑàœµþÞìñ}#}"uÞ„â§çï5^‰=éñá(“vÈs’G—ú»;’ýÙ:‡uR;|ùEð‚_7;ÏGŽoÌ%ý²³žãgaz‡ý½¼ÖüŒ÷Ö þ—-~gäþÐI¼=ð[CäšÖûy©/`L¬ŒÝ})„pù2vÌì8ÏùÜ÷íY÷éW°û²~&uÑ{7°ï÷“.tv?Äs´Þˆ¾Úyú\q(z ÉßôúôGNÌŸ|ÿ%+Ï¿atóûažoæ%ò^‚¿¶ ã¹ê6…ÿïF#ŽŸ0„}Sþ)F ð€ÖÉNø¿’×s~þ’}’>½îŽÚàÖÍçºc¢Çê–æýÈÉø#y2£¯¤®Òœ]…óv+^dK?äRÍo|~åÆ¿_@¿)Áû«<6ÿnNüGæi?üÐó¿ÐRਠBæŽü§/ë£Ù~ý‹Ö/zŠa÷hçdi‘k‰Æ¨?_Fê ßIŸF7a.pû§Eÿ怎ÐsíâäsROGnÌlÁ:KœÄ=+q•àz"A!äú¤ë÷Æ%Nžqò´g$ÖwØEäRëo±7›×cýÅŸuëÁ®o¶†}[’†þƒ©’I½<öshUFìêú‹ˆO<ãï“Ùµ‚¯¯í{ŸÒOhÁ]â“)ˆ“(NÞ°³°?7SúôfΪ Ÿßûƒ<À°sÐÑð¯ˆížéÿÏî{€ølçÄ'<@äÂvâ|EÞáÚ,ì…Ú³ýóÛ©s´Û!§õ9í"¡»÷·1ÄúH|]q“Fœéø¥ïÁºùëÁ¯âóûKÑ“ÕûÒOìé÷ðïµlè¥Y†_G3ßÉ >žµ•ýn_y5äWú­=ÂqË_¿ó±ZèS™s¥ýF¬“Ÿþ:ua¥{‚Ë”¾¯Š_5øþƒúŸ„ÙaýëI:uϑǔ9œŠ³æ²H_R«…ÙïsE>Š\Ÿ>Sv“݇ýéQy1àoø¡8x6£åôl¼÷È»IàÈ‚¾9ˆ[ßÍBN=ãÎâ£~²àã½,ͱ>ßÍ~H_ sG2äÓÊ6ا×+³ÏZWÓ¡ôC ¯³—q ql±3ŒS»‰'–“¸h÷´þ>†6™œ¯õì±Î;ÉËj<¨ìì¨P+üñŠí˜§d>Á¯ÐêS{|m:äåTè^û9¯?H¹€<Æ?R7W1ëõr-ñ ªé‰H|Ôú©2ü0(!|(ý ßî¬|NLÓk¬›à5ìI‘;ÒçÄø2û3°>ÇìÏ‘?wÚ‘>-u ûuHö9_1ø°×_Ž8Á¨ÿ¯ý쵎Qå¿â€ì«‘‘·Òǘö#qƒN_âÞýû©×ŪtWþå×ÿÚ]—â¿V½ÌQúqi¿]ó§ý[‚¹4í&¢¯$N«s›tî‚âóÂÎÏúôK„|:ݹ¸¼ r¿Uôñ7‹øO‰nã?íÍzmn¾Â+âuŽBïwëâ/VoÄù’–Ž`o™ëÀ­)>_ûe†šf†o¶Þâþ@f9½KD]÷¶Ô9µ¿ ]ެ½=~…¿¹/õYÒïÖ<œ‰º“#SéK½?qÈÌ™|½úiú1Êì»8˰{¤¿ºñy=ôDZÛ^C_¬ø™ß¯ ­œË}K¼]û¿Ù;@oû:b/I>ÜX÷}±µ*÷Ùè*ë#rÛH6Ÿç?G=Ž‘¼¾õ¤*ŸkƱÈ¡×9ˆ3IgÈ”zÎ] Ñ[©³° 8Èõ7áÿ¾¥þL彯/­hí°C´®¶òYèî›Çè+éjЂ¾/1ÀþLЊ:à*É>,þSs‘/ÿ½ÛÑ7Ò-è{"yh[¢óI/a›‡é?*}çu~ÎýuÇÎÁŽÚu<×êÚí|ô“QüŽæ Cïra—8=‰o4,DhÞIø@ꣴ¾ÃÛBßÍШ¬çÙ‘ØE§^°sfF°£Ý2뱇Žm‡îÛ‡ß"Sb§ZÍÿÔ ŽSôìôþyƒßKþYò9βaØMÚ·§ãJìüÅQ‘ƒ=JKèQûAæÏ„r®$ߟ9 öµÔÁ{Y® ïËFÞ®ý1þ[âªã»a/m„\•z^cÉCžçzoøà“rØ{Ú×!GLôhü¬Ó½CÜﮇ'[Êó¶ŠÜ–<„™äÏ“¾]îŠþ¬{¬د+ÛÃÓó`Ç+îç%õ-ÆÁÅðQ³¹ìÓ’ ØsÊúûä奠=á.vô³çÄ«GW“=1ôÕóðÐÒ÷J㌡:I°‹b§ù ø±÷Ûfþõ/ž€Î%n–JJü+/ȃI¿l/jèý{ð£ôaÑ9½ÁüF±ßB¡¤ô_ÖùJÕ·!Ï¦ÌÆî\¹ \ÁîßXçø£±“înG®;ù¥ÏÕ[øBq¾Š+_ NÙû«ò®•åÛ#ÞÄáôAs#ç¤O–“¸¤µm#öj‘æü?ƨáÏg?¹Aü"|ª;LâÔ›è wÿpì‹¢è³eøé ó_œñ‘á§Cäìʧ°WÞ Ç¿Nõ t.}ÏÝR•áWé'bÖj…^ÈyŒÿç©+õà×ãÓ¸Î(ꉼ–ôRœ’ú]'õ.ÖãÿßCç;fŸÛ/BÝ•"?ëV ü(ñkgl,ž§z[p°*ûϺ؛÷iˆ?ÛñÁýyï맸‰;Xq©Ç0Æ\&ÿ¦ó½“$/]p~g–ƒä…¥ÿ±1g%úAú:?WÁþÖ~á½R}Pý¯{cPÿ©š~’>Ÿ¡”ý¹žäÿÝxU¡ïSà<íÑIØÿ7Eð.5Á_Ž’†øüõiØAiCî•ú¾‘þ\¡èy"äçì²£°“oæMH\pr¾ØðGì4ü›àç$¯fœ¨ÝbÑŸ$¨×Z}}°8/Ϲ4:Ï™á®{ªvÖŠ’Èw0}ë™èäO|ò骇Bë:ã§ôˆ výK_%ëá®ÍúÈÅý>)Š\¹fMÍ ¾vçbüË,K ™zÑ»yÂ%ä»àrTÞó“wœÎ³æü üƒëd¬íŸo1òp2'6Œï9߸[пÎS”~Ïj…Š/&¥õÇÒŸZç~›S“ó\?·¥~&ñZøºHZì½9ÇÀ½IÖç2¹ ûqÑENk§zB底5-|²Ž£3ô Çê…‰^ Î>Òp?Žã´Ü q·ùGyΊàÑß_G/ßïÂuµÏ¬{º<3·vÜiúÊ…â&N”ø)õ8Š»´¨·6DÁ^–ú÷°õ–¸>uŸ®I]ˆ—]úB·X¡¯B(oâv‡âÿÿc%¾ ì¾CüàZUðs÷s‡_RþÏ7‘ç­pŽx×1ê%í«ï¹sÝàãà4õ:¡WÔ;; ô•÷~ü—M©‹—º4û¯TøÕsèË¢v¥Ö“…rmÀ+šŒó^9‡=Ð#~«ôÇwãí'Ž.óÁÜE;°/9ä_>‡ÿ´ð-t&}¢³ü|ò‡Ð¿9èRQÿ: V€ï¼÷;ñ'™Gáî<@\öfvôƒô§¶†Và¾JT¢ogsù©‚;³Î•£ßIŸ2ĵ²×Â’¹Ú:OUû¹iŠS×$uÜÚGܹÙ96¼!t-ù-­_õš‘/s§Ö¡ŽöõO>½{Iã²ß¹w"¿e>—™¹óŒ²×÷ã¡›ãÉC¾ßE<î÷8þ÷æ´øðÃÍÕÄ÷P/`o²‘Ó“»ÂÒçÕ«º’¾ÿfsêâÝØo¡ï~âûú‘±{K÷D>ÖJÌç—zA¿Ÿµ@~7iKÜÐj3B^/TúO®s{!÷7y=ý'2E=Í»õè§«9Ñw "S'×&ët4'ë™c G±'½y/¹?C÷Í+a )Ž ñ;Å?(ß/†’W¸ÐýÕë ÿ“:5³íÈ}ç‘W“ŽÂO:']æušy—ÒÇGò)Zw1raxúÔ9AAžÉɈTuÓÑ¿¾ôÿ–5.ú É$ò\Þfú{ʼ/7«xH#ÃïàÞe>{˜ß€¡ý¥o®³µ!úBæ<;›Áÿ…DÞ¡o¿suöu¹éìÇú+;Ú²þ2wÈÙ >ø6%û=¤2öÿ’ÝÈeÉ+{‹Ë ®ó6öoÝI2·.’¯Œ ˆcÆZ€¼ì‘‚÷Ÿ–€Ê7ƒn‡ÏA/³÷í¾§ÞÞž¾Xú⹕zBg« ¾"ü÷š|›¹2uÄUF Î/ë+}$ìg»°Ïë€g%¤oªwô ü\~Òþtêùâ¡·¦&Á}ùü§æÝÝd?a}=1=òPæ;ÛïC÷â_}î«Bþ·ÿ úìŸ|ý䮸¥2·Î[1nÌ?¡;fïí îZæ;Ú<ì~ñÏï¢ó,ƒ¹}fÃ/Ú'Qí¥'Y™K;%øŒî+àsÉ#k8óy2žwí·OÀO²§ÐWÊÜWƒý—8fÐçê6}X5?ëÀÏsf¿@nJ_)çÅ&üƒ-ØG‰ÿ„^ïAW=]eΛÊã}Ó%ø¥ ræüè“fÇÐw£üxì•×?c÷Ôȇ?~à)~F1¾‘þöÒXØ] j!o¤?‡ÎorêíAžßÞ,y3ê¥íþiñÏêõ“úöøÕb¯ZïO ïeþ¼ó[uú÷Î{†_(ñoO>ê4t>¼øNÖ’àvuÞbíÓ葸å~ý'ô¦7±dެû[#ì°5Wɧ ®"Ìîå{édüÝ”þg?æ¾e~€ÎR»ÌŒz?FòÆŠóоZεþ\_ì=wëà ¦AÆ®‚}ëÄ”|°ô=sç¾a]eŽ›©-vO1}^ºzÕù^«.øûâͰ{¶>C_œzŠZï¥sнíɿI:£J2ì®AoY_éçì\¨ìÛKÚ7Kçs™ Sƒ'¼œÎ}q:^ſϗƒ9m… ƒ·®5ŠýZ; ¹Ü¹!úsÈZö]ò°îÅ£Ø?Ëòñ»]ÌW4:|A<èzEüÓ¡[°{â'Åν |YÁâÄIÆFçû— ïÃYÀ-5éOÒ3?~CÇSÔ©Ø!ð@2ßÅŒÿ3rp#õónÎI{dáÃËàžŒ<Áó-¾øÆPð£ãë"'®õ=ŠûÑ:}/ú\ätÒ¸Ðçþúĵ¿ŠÁ:„_ãüàù*l~Eô’ÄOÝëø±VEéóš³t(yb#íΔ9_ÚÇø».t„ºÂ0½IY«éod¦ŠŸ[k;ü.ó[èMi$ýèsh¼¥¯Kðœi±o¼ e'Ò÷Ä{2’þE¥2³ÞðŒŽËГ— pÈĬ ž¼fSä›ôQÐù‘¡Ík±c&VÆ~y¹:o^ñýêW*Yg÷€º zœšÎ?T: ÕÿÃþ'ô¯u7:6è¿eD£nDì!•çš³–‚?¤~Æpþ€æÅN’xu¦y0©Ÿq+ÄâùÏ‘æq,éóîe;Žœø|:ñÖ†áGÔj…ÿÿÝ êÒg¥OLÛ(ر‚71[¿!þ]¸4~åqâVÉëʼ §ym>?·ºJtyØò4yꜗÉï\zL=ý¬&œ¿ÇSéW’=tÜØX9ûÅ\⣂û²¬°¢v&Þ/q·~â0:,M3èYúô«V`O‘üZì>Øs‘°¯Ø Ð?¥èlŒmÄq‘RâùÛxݘ³2à<òtW3âU MüÓZQXx%xÁך ó¼ñc`ǜǿ²3UAŽÌm Ä›CÝáú[ÄÅÞÕø¹q{龯ï“x½Y*)t!s·ƒºj±MãxÉwy=×O‘yÁZ¿nÕˆöè?ÈKýò›¯ÌÅáË.шS&éÔ©ƒ|>Ø„û’>o:?̼Ö¼„ÌýÖ~:—:Ì?_úwCHŸ(wæøib5øûÛñÔÙJ„ö?2þ\Ž~94›¸€Ìû32gòë¨7ù¿ôC4£×¢^¤¬MføNèHðËF—‘Ò„þ(Îiúwý›ï¾†þ$ŸÆÈgÉ7¸×RÀOås£?–_AÝ­¬ˆŸ±ò8ñÏŸ»"óõ眫3×KNZq«ròÖ®Ñ|²Ì%Ó>(ö„»È}é‡kn>í¯›µ©=þcd“}ø~2ñ‘žãY·¹é?£ýñR|,zî³£ð§ÌOÓ¾ªvÍ |ßãû«4òWêKÕ϶òî‡Îe~‹Ý`.uERog¾Šä˹09Bݯ]{¡åîEáÆûÕø ËÚ±¯gfò?©C7Ÿ@®½†ü<5½ë?¡õ[­gkðGG­‡Ÿ¤Yû–ëœ wx;üò8}#ÖµHM¿– ðg–솟ÿjÄùz½B>œƒ=·9þD¶Žà¼lÈy¦œ&¾ªzTü ?a5­K<êa&ò ·žQŸ6µ0ú3f!ô…ÌÑÕ¸›Û€ºIcdâþQZÂR_éßèd݃ý°i/ö@‚iø é elWm\Çùtîµw;¥KŽ‚Ë0Ëô‡ÿ>‡oö‹O}Ô±¹/Ê Þ¬t^þäò±Uè…M¥ÐíSRg»§ øé†_à?ÿ½ˆºöÚ/K"‡¼· ±t¾o…X~|Dçk¼Í™w†ýYhÀ?1+ᇯúºZ‰;Z.áH åýˆ<,Ö ëÎ~j¹ôyRRïd»#úhâཷ²î—CžUoÄy¤à:Ò/SóU֯Ɉ×d[ÅçR7îÅHÌ>O-JœSâ…æ“¯ðK×íGŸÈ\ #Òd¾?àÎý't¯/ÅóhÿZOìô_¾"MnÖ¯ØðÃÊSð¯ô½UûEùÞ›•¿åxúå$éJ=¥Ìõ0šϪüb'ŒÇy?I€\’¹±fæ¬ø2ѯ Lè·ðrAçÖí7±þ;!J|Î>4³à¯!px‡Ë"?F<Âÿ“~ëaû…ë>"o{+ ü±Ÿ~5Î„ŽØ¿Q“ÓÿÆ:-q»îAìæa_"ïs6ã¸ù:ñYÁ³ó$F® Þ3tѦ¾å“?‘»õkã/ŽoÎþ ¾ÖìS{1Áì`™ë«sR¼¿vb—H^Gë«Âüú£ žÀv{EúuèÜHãfvì§JÀ—•/ Ýiœ~ý-âu2·Qãÿ‰¼×¾9Z¢y-«T âß=òrý¦ß‚ã”>˜A?Ãï®A}º¿œ½Ö}i³ëðUÿ ýÓßøþ¤mà>oýJ|Vìwï˜ðY²ð¯Æc¥ÿ¹Î‰QûÈXû1ñþÕë¡{í»t)/úÌn¡/³ï-|Õ%ÿ“:kÉÖïÎÿ¼ö_3Y×™ƒæ…çCíoðaßŬOŠ’|.úÞ<Õý#u>nÂ\œ¿ñXæ„NÌ.ûüø¢Òvì''2¸ŽY¡óÅS°OФ%|üŒó츜£cá±Õ±¯;5¢nç~jðþ¯òm”ëaßåÅ>Ol?+üzk}–ÆGÜ‘µðÃ¤ïžÆÝܧâ?jÃAt&ý(µ¿Ê5»GBô¨Ôy²¡ÿãÜ >]±ê¬ðëÔ•Ï,¼«8Œ~9ß_â½Ì‹S¿Oû+j_ØPûõìwÝIØëÒ7Á»1t¦¬ïeþ»Æ?g uUÁyJv‡ ñsU¡yÿ ý{?E¡_«ô}5K=_ø ~¼³9*}vµ.&í+ô×ï“øÜHʾˆ¾Ð~tÁ£]³)x¡N队*õ—öûÓèA©s3o~?~›—óHÿ §mœ<‹>®| ?©ôdü £¹ëòQúÔyEJ‡x¿>Þ9‚¸ïê×ø]"/5mÌÍM|BòÚ—Æ©_r¹ð'ýøçïækC}ظ¤Ä½Ç}Ì~K·Îù­ÈããÔ­=‰¼¾Ëú–Í:-˜L=Ç_È×vµ° Z”…?4¾&õ‚ºîZŸ¡y˜àº ë#gí O¹ñ1ú~ùøGò¨:WÂúh6ûØç{ö_ûûi?‰S«ú±(û1b4~ˆèe}.sÔ8ø£þ§àB=‘SQ¤ Æ]t¾‘÷ÑuèJóR’‡Ò¹GV£'ÈIésöO_V”ÁÚ÷Á_ïÝøî³Úœ?Æ)änò+ZψܾT>üîgÖIæEjµwn ç«Qš}Ì4:’þSwÕ>³ê/}Á–U€>~¯Ã~TÝÂ}öé ÞTóÉê·(ZÏÖ—Ú–{vqTü4ÑûÞÚ¦è]鿤~>—5&×:˜çHýkíÓ²ª¬ÏoöåIè3™«i­MÇs43¹ÎŽOx^éûçÍØ53ü÷‡¶z_A?¥ýõÞ¹Œu–¾ÚÚÃÈõ%ÏQ)vˆôk1žƒ¾¥oY€;—~"NµâÄQD:yšÃgÙóc_‰~õê5Æþ9£}ïÕÞôVõbRÞf?£µæz ³#—?Ý<¼‰¼ïWpføýÒ¾|ñ[qô½ØÃZW¨yVgôtä¥5”xèö}þŸ/'é?.àÜ:ÆzÉÜë0~æ¼â׸7±îŠ·Ó¾ Ò¿(˜‹*ý¡4î ýãTþ‡òd†óåb8Ó„þ' B'?´&¯Pº'xŠÌ™ð¿‡DÈóc¯é}QZBw9¯¢'®nedþ¼Æ/´ÞÔûȇ"úAçUj]˜5ô-ó4.Š5~”º ÷L?øXêýB_”œžÿ§ºÕwex~ó.}Ÿïþ•}ô¦bWÉܵ·Ü(»Á“‰þWûÈ;r:Ô~ûÎ)âp¿æ:o’‡—þÍú?goäèqkûäôÏÑþ:JïÖÝä©¥ÞÖHñé¢ðüá\¨†ü½<>B•{ï÷„ûÔ—õvÇôTÐ}±AÐ¥àpToé|`ïl4ÖGâ=:?Ï82 :”:#áíŸÆ:Žx„<›Ù;Yúni_N£Ôßè©'³ó¯†n—­uš}Z- üVx+ô¤ñ³ç… kí&sø‚~З7p–C7’O±¾ÌÇsmßEéžcÄo%_fŸÃå˲•ŽÏ ŸÞ…ö¾_«}qÝÛ_³>9·p?[6#ká~¾›…ž’yšŠÿÕ>¯šQGãä¡ÁbwÍ~VàϬ¯ÝI|ÀHº9òËJâÏâ_[™vЧIæÌ¿f=ºÅF¿i:;<h>ʨ´œõW}}qGÁÃóÔ‡-‘þ$àØÂô,rfò7ðMühÐAÖœü?Òpâ¾ÙkÁŸ\C/fºÉsÜLCþKò½^šêŠ·ü º÷ÿù²bœõq£öô´ÈaÑ;vè[ôä)ì¯jÁR£xlÕCöªÚ ÂËÓê®ýdO°,üói¾×,VùZù9õd’Ï »/ä½ÔÕu£2[çÇhLë~é<¾›v‘ýoQjQxºÕóºbD𣬟v¡eNS~S™ûðêL ÿ|Æìâþ>§ª /w@N¦ˆÂþé\+ë‡ò,¨/Rû)åÜEáéZãænêÃÐ¹à‚­'Uá#é;`ä¸ÀzIÃ)UÄçsÇ}™ˆû>~ ÿ]p”»O刑¾û&ñ>wÚVò•×#¿ÿ|„|×þ<5‡`Ÿ¿Þ^Ηƒç”ùVatÂuçYz#ù™Ë]¡ßÑ‹RßèÄÙÉùį·þî‡Ü¼eh°Éõ'×dWtü ¾oÿóeLØ3Ò?_ \¯×+ôŠÌ»Öý æÂKß3÷N~§v¨Ôók|Ú”žõºþZýµÿÝŒ¿ð<‚WQº´&Vcݤ¾>ˆÛ«1bò½XöWüôÀOü ö£Sÿ*È#ˆ]e/ÿ{i ?‹l¿}¡ÿ¶µ©ô!uÌ¡!óx¾ré©s›ý¹Oÿçr§Öa=’}‡\”>5Êfůø^ò=šW2œkÈ_‘?öÇ™Xé{o¦ñ'ôp­$Ï/zNq'ê«?zÑ >Ü¡y4îœðûîTݼ§rXýºáq±o$>mO€]%ø³|3ügé#«úÙ¼ÖXpñôg¶ê%î-yÉÐ“ÏØG'rĹ.2Hõ§½>3ë+qR;Ú0Ö±YožsÄñÿJþ»‰“ûò_qI^Û,àÏžW‚î%>`mÂõ×!¸oûmèSâ`æœÃØB‡2·;ôõ~ô½Ôkž@ã‰A¿_‘oú¿_*ò×ízz,úr^æ))]b ×49¾tªyõögé«Tò7öEä¦öݰæÃ?{ÚqªìÿÌðtfG…ÿ ùiµ¿7eÜ뉑>`j‡„º=@?JüWãSŠã ôÒÀßáÅÙNÐŽ®ƒÊuíƒco]Õ{!Ϋùbס~±í«‘‰[ ~›t”ûLpˆóJ\;ÀI_ÅgjüÀ¸¾kNx:°Ÿ´æz ?Á/œœÞ‡S÷"û-~…æWæí…ý´ðoìÓG͸Ÿn9ËR?b-;ì¿¡¯E³~þõ%N¥v¨Î2>ëB~"ËBÖSæ Ûs¿fýÅ/ ä”à…ÔÕº'vöUò_Áï'#ù½Ì7 µü…xÆ'fÅ$N(ñÍó)ÏU„þ'G_ü±½ ù~}à%ç¡óZƒy/Ó!ÿwÔ닞Ö>Kš¯Óù°ÚïEqÚZï`¼©ˆ]¥uÜò}èNç…áùIõ’ƹ¯©ëäµ¾TòWv¼È]éßæÇq?ƒ.ѯãRBè^âÿÖ…\÷Öü„å/b'iŸ}ÅÑ9›F±’Ð9× ÓЃƵ²-Ǿ—<ƒ×ò&Ï-xP÷Ú8ü§i= §i“ø¿Ì 滬|Yƒïµß[“=’g¹ îZð0a~ààÿ†þ­Ã}ܨQ¶ ô¤}n%p>®DûCëÜlµkŒÇû+‚# âó' òvkÓñ\çP{!˜¿(ta,²‰û$)Àzßh=HþMçð9ßvâz⇪]ªø0wjþXãyZ7ªýגּ6û•Þ",ù§D[èFúc„É+ò’Õø¸öçÖõqòU‹PϤþ“ö1°µ”8ÑrèPìIo¢ žQó#gPûAõ£æ Õ¯Ò¸phCeì0ÁUxÅãÌÏGŠ4ª½c½ÅîÒ|¢S4Ê¢ðü¢óPB‡£úzݬ:…õ?GçH|"óìg¥ø“P‡4øIŸ‰°î:÷Bûo×·sÞ&‰°‹$O úÛNQãõŒØg2Ç뿌“>ýëÜ®Ðê‰\ÿÔÖõ׿à?íÿ)rCñI.CpÚ—]q :çFç :¡G_lÁþ—>¡ZW¬ýHݽÀ}Ë\ õÕNR¢9ü3ŃӧEò®÷™¿B÷’Ò¼¨Æ·‚8âç>/î÷0^¾CïLÏý- ·Q¿Câðæ¯¯ÑÂWÐþwš·TïØqèFò±ÚŸHå¤Õ-Þìðô«x¨P›Üç˜tœWp&šÖù°av)sŒ‡­~\ð\Ú@ð¢aú•ºí³·kÒ¯[ódÚÇËZ½‰£ô1Ö¹&OW|‚1dG»Xýw›9›øñ§ ŽêdÁ¯½R>®×y¸ò9ô6£1Ï'ñÞ_"v’öÝ èEê3ÌPAä\¼=È‘‡×9Ÿô5ògIêp_:bùŸÈ¥,÷#ÈuÍ ­¢b'Éœ_s…CžÂ÷zcWNZã®ÞŠqÜ¿ÌIu~-„v³}àÇý¿õRûúæeƒ9Å—Ö|£7û)ø4ÅéyAçšÿºT}¦¸&ÅŸ¹çïúö„ö¡PüƒâKÝÞ‘‘¿ROé5¬ÄþHý¥Úÿ72&ìÁî‘}ã{캖FxÁ¨¦q!÷×/às‰û‡&'dÿ…Ï$þàDÚÕ"*}äÍ4РúPú~k}“Ú{j7š'ºH||y˜~Ÿ®¿§}•Ü5WÑÏÁÏ’ŸQ¿&ˆç=ŽŽßøUFü™?a•¨‚ÜêV{¥å>èQâÙÁœ Ñ+Aü`ÖmôWíÈé‹+|9a–»‰],¸ có ìT‰›ªŸ¨yà ‚Ôýj÷Í(éƒT†u :•xœÆ´O—â´¿µÆ½"% KÉû;Û, OÇv«¬ÈùÑ›èûøÙ&î¿]!èAòH^ì>ØÕ2Ï$ˆK–®G€»T¼£äÛLs%ô÷ã¹áŸSq§ÞšüNâ:ήÏ9¯ÄC´nBñ‡÷Î?€_5¦~–ÖkIÞ^û¬Yîvä—Ô˜MN²Zß'zÅÞúv“ôÝÑ>¶ªÏÌ#ÇdNµso#ë+x·ðfοò8y$Ñw¡qÛð'ª¥ãy¬õ V¨t—#%zPðÝÿ[/íÓ£tovÜ6'<ý)ÎQù]íEsÀß܇ÔýÛë²*/¥^2 ‚Sp·5F¿É|j•Cæù¥ð;ŽäÅ”OTO©=o&|Ìþ ž8°Ëææ†ž× q]íO¤öu€_—¼¾Î× %ŸÁ}ÝN„YºûÓþHb_xzÉ+yC‡‡Fë6ÝñCx~™³¦q­·ÒçÖ|¶Öc˜“s_\ ûSærzOãψÝôIžóûdÉàt£q8Å™hŸ{Å—i=â.UéÑ­ö%rQ䤛á£ûÔot?Jtnè^ðFVÿ±ø’VüW¯{Gç^Ø›Ÿ. OJGaþ þØÁ&ƒþ7é_ó/ÇÒz3¿§ñ3÷èOêïd]È…(‘õ×øÙë[ô±jûœó‰à>Ô×ÏÈ:þr:yj ÿçi…}®v¤à÷íÇw¸µ*æD^‹®ùHÅ;+îBó[ŠãSü¿úåZ_ªù>³]íòZó?JÁ¼ÎkÀe îTýfó«üø7ÒWCqÕAœCú¦j¾À-TûWú!¹ëö /¥^$ÈÈÜ\sj’eö©Lˆuºo²¯/Vü³£<ç—z`7~EèRòxEòAßÍg6zˆœÉS~Þ²9/¸µ;u^V˜?=ÖÿÝçõè~5íÿÿ; õŸ&wçÿMºþO_¾µžúÚ±s¨çoZq¥Èäuœ«¬Ë£ Øwmƒî ~ö‘-øªÝâANz>—yÂfâÓì›æg÷n®¨Á:Kœ‘|òFðŠZ—*rDãw’ÿÑþÔZ?Ô“½˜âãb‚¸¹ÔÕxrsêw‰½­ôôù’¸IÐ÷N~g\ˆ=?‚<<°ÖAhÞTqKF§tЉô{òº´Z/eŽ›ÆƒwâõN‹Ÿ(y_­— êò'¦q«ë"èZñýꇎ¬ÁºÝ þIý$ÍÇ»­ó ×ûOð×-Ìo!nU/6ᮟw2^¾ëïÏ|ÙÃ?ï KŸý?A¿ÿÛ/3Ö¦æþóœËæ÷r#]à?ײ ~¿«Siwaç_=Úÿ]«èþ:¹{'ÐïS5ê Ú¬òÎåµã–›ž^-'28G©ò¦~}K¿ õw­õfF¢šØ%‚vϵ¾¶¹'õÊÆWy𧤟ªÖu+Ž\çè\ƒ )z$ÀYK<{PzßÝó þ ”{rYûi]£âU%/ؕіóý¬OÃkKOŒÀï™îÿ· ý±°uK£OOöá²èŸ…–¯oTŽê>…ùéþ¾9±ôä>çWûÿ}þÿýe7ßÉßߟ«—ô÷ÓjžoNCŸÎÞmêÓÇ®øäwEžwó¿¿”°»\Öº…ðy{Ÿ®NÔöoEÚØÚÿýؾ­üïSè tä¿·füü½ÿùÛDî}%çËò/}ýûú÷õïëß׿¯_ÿ¾þ}ýûú÷õïëß׿¯_ÿ¾þ}ýó—Ѫѧ~üeùW¥ˆÏlòçx—ã7!nSº±ùîb3?ót‹ï¶Ü}ü8Й˜äWV[~ÈÍе¯?:7Ï:óù¿7/¤%>tz´ÿÞ¾2ÄÙɯsÌ–Ñ™ƒ³Ðwøvv®÷Sœoüó.lñ¶øÿ}Ëòïë¾¼èdö÷m‡íÄòéÁH;Ú#›¿Çôëƒì?R'y3Ÿ¿ó~oìÏ›´>KàÇw—ˆK*àçõœ¯’·œ\Ǭåàåzn’|nâßW÷.Ü…<¡Ggs{p¡äÃ#`õ”ú¸›¥È+ÞLëüòó_L%^ï2Ÿ;4ûyÇ~ÀíÖ!j~D½¹W‚:«w:©ÏD¾ÉjIþépBâû)WKÔÁõŸopç5yWWÉßï.ž¢_iâ÷SCR‡µ‘ã©4ä¡î÷ᾚÜ"OÚ™|—5 ùyiÉÿm’yô†óžë'õëyÉG-¹I]ʶ1ä1^–õó0võ*äcv.×÷ñƤu~>ÀÝx¥“ÿþÂ?üÿ9^kÍÑÛþÌô? ž½­íL>²ÀgäS¿$¿ôÙYò?µÉkÛßH¿žèƒ#Ðw衎g¨ΦËèëÆòýÞMö3q:èõâqÁ¯ïçzÁ;—ž‘Ÿì(ùªN+È M ½G•zÝf¯Á©ÎŠÊys]>ûšà;4ã)¨óý?ùdûÿQ{pg âwÕ‡®ãgã9oe"Ï›Äb]L ì-à3UÏ…"3oÜžñ;Ï}\lè¦Ï…õM?Ö©ý`¬]óÙÇ3Ò§¶³¼Y”Dðƒ2·ªôaæl~-}/E?ÙÏÞ’¿Þýr(Ã^~?™ù¡=‡¥ÿô±+FܘN¿wLlú(ÛËz~ÜÜÆt©'œ÷9ñj'×™ô:Hú3ý†¿KÎäÏŠÌK©°”¹¾ŸöûGó]þ¯^ö½¾Ýk÷Ï ÎwFúä×mâãìÜ›àu¹‘GðóÏ##.6àó/ù¼`¢Yòøà§8¬Sé’àrŽccB_ˆ½`ç¢ÎÎJ·Aê»Á¥yÉ;CO½ð¿vôcT:·ã\eýÊü(¸ÞñÈóÇÁMèÄõU›žÏÂäøˆÁÇLJâ¬9EËþËT–}ùm×^Ju~Yº(¸¤© ±O®5åº÷zp½»©¡Ë‚ÔS;ÉòÏ Oç*¿íÍwxÎŒ ÷—Ày ¨"õÈñ@.ïÜŠü88Žõï>Öß?/wBø¶,ýJ¬M‹x~ÑçÎú)ÜG‹ÛÈ ÑCÎûÂNx~·êH_±mEÁÅþAßCïèmèúÙŽúÚ:Ÿ‚ûkJ}Õ2Æ2¡sì†}9Y÷,ïÐ#gã ž\¿Q«ñbáwê ]áó³O©éÂ\+ôÝWÿ~`”¿3ÎK?±g݃Ñ„çSg‰>ŽìH_~p-ÞWÌŸt*mŽ('KÑï×ÈÙ<ãg ¤Îû#ôå3ð>MVq¾ô#8߀šÐõä\‚C–úËä¿¢ww¶@Þß¾Ý$ýÀ?…^]ú\ÚÅ ²O3ÛÃGbÏ«]eå_—“yÜ1×€g{MéÅ;ú+8¼Œàß½ cð#bþ¤u˜åLJZBø (=JŠH*K‡´Ä  ˆ.%ÍÐ].)° ,Ý‚¤ÄÐK( ƒ€R¢„´ðÛg>çÜgï¿À?<÷îÜ{gÞ÷Ä÷œ÷œï9Îz L ®èÜ\•l—ôƒ^7‘zã(ßûÝ$ô÷‹\R?¾Ô1ø{´ðGn~•ïiÃû ŸâO²2Ë(Gý»?¾øpõõfìÈW©ÈëðÙÚÃáñuÊtfšÀ7iïÄõê—þÚ†¾f£>Õÿ—¾eç/á9½ó¦ ï¢Økgf$~áï¯ÓÅðy¹’`{ÒŸïì}†¿X:‡¿GvG¿W~)}›==ª·ŽõN–uqâû÷¿¯Ãz\Šö2òo^ßð§¸õkð¼u+âGÅÿÙ»úK6ÑÇm6¢o×lR¹l8^x"â/ÅŸÛ“á6¦¾K|÷aMøö’>€‡Yìu‚þñ¼ÇÛ‚—ŠSG¦ñ¬3vÑâÄû wØ‹2¸Ô4ÞOÁ¼2£cNìéÑKøß£eñ·]ÆóZü³{è z’·÷)ñ…»q~cÔ5ú [^Ÿ7†?Â|u¯Ç¯ÁŽf˃ ^swÀwéï£ÎuŸ²^É©¯ö:\B«n['ý=÷˜Ìy¥µôÍÂWµÏ?Ÿ„oÿš›ø9Ü>'ÿz𛫠!ßiúû5¾ˆB¬Cæ›èëãd|o•Âÿqœç›2û;˜~`Ý/אַëSq=r9Ðæúê¯Å/;‹¯ãǶÀnî.È~ >U\¥þÃÿJx‡ä$þ}Ût;9ãmžoÀŸøµ[ï½ÿ•1ê› ã ¾$uÌû‘‡É‹Y—¦Ìý² ŸÀ~´žÂþÄÿÃýkÜ7›ºÊ›ð€øCà/µŸÁƒç¼5ƒúÏõ_',¸‹ýýò.ò!øÁÿœ>3º8ïWù|ñÙ$ìáÛë‰Û†BþÛŸÅ~¶ƒ¸ÅœIÅSÆixü½¾ÑÏamÑ뺇Øçm¯PŸ,øÄG_²ÙžMï×ìw±ÂäµÒ÷çÿ²ð´Ú³J!ÇÇr_«¨Óv«R—oô/ î¿:—õjùü`óáÑ·>êÆ:¨€ü•÷ñGáÉq³À7fÞòµ©ñgniäèÎ;\_ûüÊÄú§¸Ú~«r¾¾!וþë 2—yü^šö±BnÖÿÕnðí¬ƒwËø,9~|)<áFÚ‚ø‰+ÉѯaðSyE¥¯FôWõDóî+3XÁ±®M©óZWöù£‰à‰3Œvá•\‡H[;Ñ~÷6ëeäß›K|‘›¾o3b:vk[áÿ¨€=û1ý­SŠu\ÒOúÞöbÓäF^ÎÖÃ/H|¦öÄìÞ {P…þBoõ9éc›(}çÈûªÌ÷7x¾iCŸŒµ•ù§Š\czöþå…‰÷Qó?î„ã|~óôwð"v+i&î7o£0\§ñŸ{G§ÃRäIâJûºŸXû¶ð%À«ì7mÎ-_§{j?ûÜò7üªøç·õà€S—Ákšy¹Ê%ü%]F1¯÷ۭȧà¿Èˆ°ü±·3%ù­ä—éÛ“÷?|‡Ï ¤oÌÛ¹†÷Ë?ož3Ék™ožæ¹næÇ¾å(‚>L{ÎsÎ>ØÝø|šëø¥ð8ú'³"—3á×¶Tã÷—¤•~Lü¹uv¼¨’ïõnž¢ïþüoè‹ä;ü_¯ó½­áÿ°þºƒ>nÁ}6ƒ§Áï“nÆËÈ¿ÿñaæñœ‡‡\ãz+ò9¸å“Zà‰ë± ÎVâ£:—Èëu¹€ÏzüW$ ?p!;xî9sîŒï#‰/=„Rì¼óÇ'ì«äûÔhÑš·?,¯©vÍJyû¼§ûû$r8÷ò4óàãwÞ€O̬\‚¿OõÈ/,­&ñEÙðxòÌ ü@+á¿Õ9)±t¦Èyš“™ÀQ‘𼇺c×O-#ßU”ù.ÆYYÇ+¿KŸsU¾Y3Ö¢?‹áytŽW ‹ïî)Ñ7Égy½ßÂ/±"ì{ÕȾz©˜s§8Ñ/í²^ßwWžwÿYÞ¯HÆý6~¹ës0hüZç;"ï¹#øÞuíç)±ž5à¾Åÿ:'G¡/×—r?›àó>ßÈú>‚¯<†ç&|Wr>â7é²2LïÝ]aùÌP>Oü¦â3¿qzÙ‡3Ø Å¡.I¿fEâ–NmÙÁš¿±1§Lñ¡æqÔ¾‡ò3Û¡/Q}Ðëk±ƒIk°.µæ"W¿”!¯zµú<1~$Ëí—Âÿn æÃÞnønµ‚—âaô ÝðXõ(ä:Už»mmì¹ä™íìU$^‰OpðóÑÙÀâ—ÝìYç“ GmÏ!³é·òÓ'^(;ü”Fø—Äþ:»·`¿ä¼ÌÌq‡ï·}‰„wÖ-ÙGæ"F‡á/«nîoiGò½ù¿ >¼–}ØCߤóÕvÖy#}Œv½uà{ÉÇç b—$?ëÌ?ì¬÷Óýy‰÷ÙÚwfæöX9áetO®ožæu¼ŸêðzÐIôá—FÈ‹äÛÔO„ôáÈRpD¦äœ‹iÜùðøùØ4ìêÀÞÄ'Gžð\zg4[Ž=–ü½uw;8±=suÝÛÌs1n¶Äÿks¾ÌŸV’uŸ[„õ–s?柰øÌÉÏ|ƒPÞêÊAøL‹¥†WKò¨š—rJÃÃb—ƒ¯Zqò‹þ³bóóy‰7¬¢ÝW‰^±¾pß‚³½™ðu»¥·¡…Êóܣ؟M$~>ëj;žoåOÈß{‘óäùð#·ûbgj¦ÆîJ|ftn—X^­9Ù'Á§¡ó¥ ãë7¯(¼–þJæn©{ûûc—»_Gžß¬‰œ½û&ú;§OXžÒK?‘µTú—ÿü–û§$õrþl”\®ûõ r–«4z-ç&NÍ|o­!ÈÓî{؃ßc_ß„lw’¸åùsž{,óäü$EǾ±ØyÁ}ªOn>æúd.Õ6øÌ3³‰{V׿>%?æ,,޽nº;“îz4®qôänKÿoÿËÜÅ¿F¿Úau¡|ÇÉ…ä]+$%yg3r>ÍÊÁ•mÚàO†¶åÏ‚\‰·:»È•œÇóƒ{Z¾ÏÿQÑ—¯:Ì{ùO°Ø©ÛÇV$¾ÍÛ9™{çÌŒdÝ”B<Ï/Ñ¿~±“G^$Ÿf‡Aóf¦‹7v²O’Çt^Ÿ‹–l‰ÝØ1½X ¿©}mû)~Ò]ý˜¹lîð÷飅'Dp©±~ú²üûüì1r%qƒ¿ä3êg$oëõ„O+”çþhòÓLæ_hœ?þgï3úé/dA¯› ¿C“yäA¤Áý>L?o4vWò3î æq„ð–?9š¼",à¯Éœ¥þ_ñ‡š¯ò«býµ.Jâ0£vö-ÅaöAÎQŒß~ÄÏÊyˆ÷3sÞ%­É_î;€\ÕKƒ‘s<­§°5bÿIþÈ ÿ¨wp/ë=î ú(çYÞ½2øïªÌ+²S\û6±œ«ßežÀöíØµƒM}p]»Â<ÿ£ú\ÿêpPìøtSÞ]ñ2òï~xš}‘|†W}ì²°çH{û–|šµ ~L­Py±öÂ'`N‚ÏDý£Q¹k|\ãEó½OáMps1gÏýæ§¹‰õEq­]£ò–³3z>hû.q‚ÆiÖªt죜++^Ñ: ³-|ÖVTK¾çßxä³Iqð™ä…ŒneÂò‡VžíÈ[t#üÇ[ð“:¿¢î%=ýëæx‚õÜÎýc-ß?ªò#õ š·×:+¼.FŸT‹E¯ðïjOÚ ÿtæDé¹¢}¢÷©ç²C êo¤ oz¾O§Ñtáé…Uí¾žo‡ê¾®Ê¼Òg#xn© qîÂϦçøfö4è‰ä«4>±Gîg½³U\öü‚#:{æã?6Ãl¥*¾"ñÿÞãø_ì¨ÖMêù—?±#ö!óÔss½Œüûm#w½v`×_¿ÏsJ|étLÁ¾wý|“}×}>€úÉ[»éû/{Žáñ§bÇ4^öZÁgmÔ- n{¬u:ÞöÈ[¡6èá¥(äb<Š/­Ó‡݂yVÉ«|¯äÕÕÞ™àïÒ<‡ù -~¶·ðeÝzužïª÷u7ðæ©&2ŸÇÓ{)86do·Â“ãDÀÛhO€ÿÇ{glX^Ømÿšõó0¼uÿ#Ÿö¤<÷_þ?üÁ…úaõ«jÿBy¶ƒz¦f\âuuÖæ~ÕîK<®þVó¸Nµ‘ׯÂK%õ&èÇiæÖ†ô@ÎýBõIͯ£73Oâ¿I†ý|l’ùß‚«´ÎÃ/ü9óeîF®$O˜àgá9,÷û‰éVoʇJþÀž…|4gþ²ÚÑýç c޽Šùiš·ñîÀƒ¤ywÅ9*gnJổsMÔtäað>ü±øs·ñiêp%ÞÔ8ÖHë°~r~¥þݟͼ$ÍjŸc/êDž– g¿ŽÏâ>GÂG¥ùVËíÌõ‚KÌÍÌÓP»ãu¬ˆ<îÍzæd§^A¯Qâö÷î¯L,ÿ q/y?ÁÖx"­=¹_±Ãî§9X‡Ug{É?…ò7?>rª7@¤ÞÉyÊ#ãÐsäIóèÓ+ ÇRïé÷g^æw5ÎôçÂÇbo»Å\çÕ#¸.ÏCöï~JöOãÁ³ ×/ {=¨~åÎ ð¸ÔA™ýâXŸ.~`uFpë¾nÈQÝÉäû¤îÃÚÜ¿{¹ä2‘wöOp‡ùÓÖGâBÿÝ#üýÛ‘­×ÑzfgŠÌ-Îû_\b=Õºz­£öŽd]%£y­K7c*s®9~'«é踰ûž=ͧÛopñ+ ñ$yô:MéO¹_§ýäkì…Äz®ñˆ}³ u•Oc9çÜ?b(Ϙ~÷!u?VŽä£+Õ§Š_±F&Îy+üäiÖà/%i·=Ç•b…ù½ûÇ©?–>ûÆUöEÎA­Nð [5?âï¥à óÝëÂïɹŠö9X#——,u˜ç5ñ3üŸøm³pâ‘øêØ•ˆÍÄ#S†ù·ƒ?º:|]æ)¯Ï#¿Ûih¿‘#ÕCìrém<‡ö-IÝ¡?`jçi\¦uøÞÊ™øaµƒY6†åùÔ.(0>mî'Ž#îÖó@©?ñ'îäÞOž„¿¯`žŠÊ¡{°+qBùlܧœÙ¿&¥v1s«Ý©Ù¯¹C¹Ï̱/§¯Éœ™''ù¯½åPê:Œ“™ˆo—Àûê|˜õ¼QÂsç.ÞµRA_•úë´þÇY3–|£Ä¡ÎÁ±à­Ó1ÈwÚ9‰×;Ô/7#5~¨l+äpÄ(ä­[4þ®P*ìÍ‚šØI©§õ2ß×»}‹u± ¢ÏË~[šX®Buâ ÷ã'þ`ž«ö+xãó!÷âµNË'<ìrîåÏI^»á§oÃý]a~׬9ë\¶/8Rò>~ÁØ!Éïi¼¯õz¾–°Nay7ëóBq½æ£lò"ò¯ç ZÏ¥x@óvº¯VÄ-ìY‹{œƒŽÙŽ•ó>=¯ÕëlqòøUfƒ^gv°Çì¿à­³×þOcmrðSÊà)­3ßÓñ…ä_ëÿ…ÎyDn´®Æè¿9xür/8Lý‚ÖQiÞ@ñˆy­S>vFæÂOH>Aq9ç*r-õãnR™ÏÏß韃úÔ Â‹/禡:¢Ì½Y'õÿrk~#ÀÞ¢xô§Ì.â]ég2®dŠÝÏÈy»v‘ð 3÷DãP­Kåueý[¶ÿ7¨Œ\ïu(ø»‘ë«1‡ƒ¿§¾ȳ٬ppokðÚ¿{¹¯4<ðþƒœ¾$ÄŸX¼@ÞíU…ûïå¼¼ö§oÇ?ôp6 Ÿù‚Ïù]»Æ‹žó¹E'ñOn¯ì~d/sÒÊ{¨'/p¹s`×üã$áŒì‰¶àùµÞ\ú¬duùœàÿ|íN§ÈǨÃÔÁô¹&âW¬§'°'ïaŸû|N]Øæj_´»ù÷;Õ#n¹øø)*qå7ßaO…Ÿ@ë‚ô|#T×%}Yþº­ø‹&^h°ê³ž÷ù¯=G^¤O#Ô_Ò­z!üÞŸ‘œçˆýv{·‰}÷.7¿K?“c(uªmRñ¾Ô7+dþ¯ô§»¯€+5¶Õ" }þ†Éà`ÉÇé})/Ch$¯åE|Šß–s#_| o^É;ƒëj÷Ã.Wyp0øùÈuÏœYYþCNû|…fK|ÎI¾ üspop½1Ä ô Ï‚ƒ¢¦ßkö(…¾ú =¹z=KÓœï6i{ð~ûÁkctô춇¾ì*…^Eü¼6Ïå÷bêï;Í®P¯%}GîÌÂnóÓe!¿ y`·@vìd+æ|ú­Êƒ_~ÿü‡ô­ºwî"‡\c¿ëUaÚ–$~’¾½ûL=¬Ôïh€[½$¿+õÒÊ õ!|üÆNôEúT~ô|Eû×ôÜÈüßêE¬¿ʺaÖõ"ò¯< ^‹jài鿳_{<ùöÞ2ÚŠs‰ßÜÁÝ%xC„`Á‚»»4îîÞ¸,¸4îî q Ü¡!¸,@sV?U{sçËåÞ;kþk&ûË^[ÚÞ·¼~Uµ';¿ ž-Tü>|¾Æ§ƒõÀæžSõë0ý\.#ôŸ`5úXí‰ÿj¤Û-q±#°¥o‰Æ´^NíR·M&>K]Öã;QWr_oùv„£öÇ«v>½Ûúøôdf ýf­‡Ý²ôŸíÉ>Å _>»­Ûûôbßñ¿Ž]}ûÆ–ÀÿˆˆÜÿÔùýª×Qøþ¦=cTäøìü{üãËþ}µ¾¦¼Û½Ÿ?øÅ¿¿Qà³ýwçXtÿ!ú¾:?Îÿìuˆîÿß¹õ-þÉëêÈ]­“?šu‘úIí÷ ù.÷>3·&dÿYÁYY?ÅÝÁ½:Ÿ‚Þ§WòéÒ<‘{ããM¾OýêX˜ßó¼CÎ^ýÅ·Ã?棒þqæüÃè‹fyüïí¡ÇUSø_ÍÈëGgüãÍ%|9î¥ï ¿DþÌù㟆Îã6CÏ\îåÌ‹ÍïáZ 6Ýðõ…úÙfµÚð×Às‡yî?yŽ&ß¡‡*>ß*xê`}‘Öj‚]d3ßMë«­d³[ŸÐßuß5¥ñ ëUBô³â×÷ÕªzYú;vŒDïH=Ù‰¹ Ú§Bñ¸GqÚwç|Gãá§á[éˬ›HÕ}ò—п•³H%ÿ8ñ½}Ï¡/É[¨~Òøƒ»þr÷Emp|‡‘]÷ßÍ-üáŠÇ};Ƹ²„뽂ží˜ïáëËüçuŸ¢¬LÝáÏñEýëE×ð\÷¢7Šî!^(8w#×S?þäÞûÙ¿o§VuÿùÌÛ[à÷Ò]áߥ¿°~7ó7öÀWé2ð}Þ;\ï^Ö#Â\ü–_ù|blz‹Ü>…}–¼·Ög:5wSGr: öµäÜ<‹—ŸCgÚCò+îº|è ÁXÕÍI_Bÿ4C[øçÝ|»YâÎÁ8½àÔžÓþæ· ±+%¿¬_ûe5æÛ™®ýw¯“º´þíW¹³¾×ÜÐë£v–W¬ññ]¶C÷Û}º´»?ð÷'ФÄqöãöÊ€QGÃðAã…ØÛ­Ó ' þŒÈ·¹½®rû~öoÀVøèFDìWÙ}»Ú{þñÊÁ}ûÃ5S`¿<êŸ5þú{?•Ï9ø÷eÅ›ÄuWÈ÷¡É°Kz÷óÏkÎ)âÓ¹™$àŸß¸ôÊ?¿•()÷yq~FÊfþqÖ`ü{v\èoÿ݉ÜÒ^¯Çèóä]ÿzÆÃ9¿àè̇#ßýÁ·+z£7îŒÁn*°ýw¦=|s¼0þù©|Þ~…÷ª1Ñ3åÓr?½ûq{NáW->…¿¾«ñŒ£‰‰ ž#<6~¸äÝŒM“Rg¦ø{ÅÁ¨?ÄJíc"¾¨Þkþ¶µÿÁ•…Ð#yÍ_úà׿eŽºÆóO6r_{OÀ§RŸ¤ýßÜŽq°×¤¯¥öó±†þAœRêCì[èúÙbô‰ÔšÇóñý”òÔ- ÞÞS º9·Ø§wëüaÿÝ|–ýúÁ"~³`-ôße¥¿þ^‘ª>ý¹6A×y¾eŸêeA޽˜Ä¾gš¾~å°]è…ƒÛ°CFš[áŸÞ>}z‘"—‡ïÃψR :ÈpýÞY þ–ÍŸZóüíÅK¸kgÐ'Û³AïÍ6`×Üʆ<½QŸëJÝœâôf?J})ñb÷×SØå‹â ¿—wƒ¯¶üîë¯ûIžÌ\<Ê—ó^¶uè·¥áxþÔùðgþ,ÿ'ŠÝÿôšó盄ÿª£ÿÜF×u¾>sbìðíolŸŸ^áyÞÔq°»f¶ñå¡û(qSí{YÜ ~À=k=æ”òÄMoˆ•û*eJðX×/W’ü¨Ö½™?lû%ôoM[ÝÌ¿Ÿ¦½À§ˆâ·ág)‚ÞÉ”•ó Qãbš/Óúl­k¤Û̾L*D>§BŠÕ²ïð±àü½Ÿ¯³/ Á¥Q©qàÀøEØ )Ö#§ó<†¾$ÎèöX VÃñ“ó›9‚,ò~åÐ.س³¦#ÿNüóØgŸÏ÷wrCŸ·öqý‹§‘ǣ篹\ ù¹#q»ïû¡¦½â|7Ð3ÖÞ_ȃupÑ#Ÿ'øÇÛszo†Î+c5¯ƒŸ¼§ÿË™~›VÓwÆE†ßŠ–#?=:ޝçí’o°/v´E¾+^PüC'¹³54„Ð/öãÕpø÷Ê·÷grßiߢR~=sêþzÊj¬{”ÔØ55j²>ñò}õòÐyøFè«3OY÷¢Ýˆ›}æÞ¹~OAœªÚCêò^t‡Žš¦æýî1òCÒWBë ç¤ýOì¥à+úåÔØi_BÿÞå%þ·À™ôÄñ_¦x­ÿö[ê ú—úA—iŸÅóký»Öm*^Sã–Ú_ÆÜoƒƒÉgâ ~Ø«5»¸ÂäûÀXþz:™ÊCåñ¹oèfò·¬ûåÔØ#yêÏ©}{äöŸÎGûïVÆïýóeÓùrÌûî~[ç¿}¹ˆ÷†|k†ŸüÏæå«Ä§Eð7J Çïs’ÀcÇCÿ¯Z"×.ä½v*üS‰?)Îш;9¸{ôÑï;ò’ó6Uðé)Ä^ÄYPò7ÿÑRÁßwoû×µ¢½…Ïõðõœóëärÿ8Ä…z%ðýysFgü™†u‘ç…Æ#GO?|ë5ü‡åùÑîLòr°žµFùôX±yð(úmtmŒIÈ}×îÒæè¿Ûtò’!oöÇé†aÄFiŒâàƒý…‘|/u)ž}c¹Üq¨Á)èÏYÙ!?41ïÌ/¡ÿ@ï(ô¿—ú6cÀ)ì2ÁçÙgð>…ŽP'.u\J¯Îá>ß(ŽGûgã7cçŸÍ„œ—x˜Ö‹)Ò{Ô »mO%ŸÎ¼‘¿ñ²žnsìÞ¸;‰›76y¿ò#vDòBÈu±oŒÛØ—«"OÅ`¿êWFÞ»…½±ñœÿÙ­À§—À—z²ý}¹l­LÆÿæ‡?¤?ºqç:ýx¤“]ýòçÌäÓ/k‘Ûg¦ ~b8×/9×ÿÞ›:ÿÇ|N©f;Ÿ¸_‘'{¸»®ÓÏØqiáç~‚\î´Û_k’ýd'?á¤y‚]˜~þÆÎR¬ÓȇœçÅ$òØ9{cµ<ä_לÇüfçU=è³Ð(è=I®#yѸ7£/̦Øÿ½cúëcUi‹^D<6Ä®…Î;DÂÞü\yRé7Ö{Mn¾ß»Oú$+î:ˆ¯š;bÈÓ0q­Oк`å‹óeÆyì÷ÓÕ¸°sáòPŠ—|ø5qÊyÌ=ú)Ç>pR¿§õFšïñ¿øŸàú½“‹Âô 2Kîd^€ÔG»…Vb_ˆ_§zÓ«:®Ó;5 q=Ëû ù83-ò*rWü¿$ù±‡þÈÌú.íÁúöàï·ýyã>¹´µï?wG^n[оS8NÑ5ØK)n÷™2×—ãœÝˆG¾®7]IŸo¿Ãü€8çù”Äs2'†/&Ë}´ØK^+Ü.ü‡N ýç7»NÆ/Þ;ã×S\¿ÊHäöŒŒøÑÇc_ÿ´>û.Eâõ.Â7™Oóü1ð{¹ŒøÇÅá/]Ž}óî9røöŠ0vŠÙ¶rek+ìœX9ðKº—óåƒ5d*~Æè«ðqýOð7„õOÝ5Ìý˜9Ærüö{ØKE>âu_ÀúÓüuUûÃk™Ÿø¾Î?ÈzŒü´ô3H‡Ò>¯‹¶/øú·OÆ÷û>û¨Œÿzî&r\q=‚{Wœ³æÃ­«=Àúšx¬àcíVÑ}ÓGúðcâJ2c/ >Řxûao8öÁ‹Í¾>ÚÁº8aïeýÝF/§ ›Î#·z·…>zÖ€ÎÝäÿ­‹pþµ±›6¤ÃÈñœëý&ô²%.çú#t51=Ç/¬‚œ­Ò–ß›®FŽíÞîÓ½î;ô~´øÄ¥Z§Ç~k‘ç[ýØßW'BmŸƒí¹Ïõ«¹Ïl|~QÉÛØ;¦­Ð‘Øö¡!¬ËßY¹Î³ÇÈçƒÅ±«7]Æn™¹—¼°à›8Ïù˜Ð]ÊÐ{Ȭ˒¤ðG‚ÛÈŸ¦™ñ‡»_dÝ;[ø3ÅÉO%ŠqüÑë>_Ú»[¢O’¥'Ϙc9|×3vé¾ÈðU‚²÷"úñĬ§Ä™Ý§È{Âhì2‰Gj%gípäè Åßk]¢oíõ3÷\µýÿK?L­³uî®Æ D\(÷‡2ô8…ØÄwìcÏ ë/¡t‡ûª_z´çs­%ÐE¸£·¤:ryx5ß­š»9ïí;þ}JAÿw錞XVÔw+ÖGîÿÖú8r>è=:l{} þîªðè“sQøú5ܧ={_ýÁsg›ÌúÌ_¬›¼^¯ÅÄÁêî€ïG <$ûDÞÄŠÇy>´Àÿ•ü™Ñsçë¸ ù}¦2ô¯8‹œÄKÝùsÅßIŒ_¿3%qâqð›’=O[¬½/œ¦óùå£\Oì.wJÖ0q+êd¤ß¹Ó¿öÔuëT%þ©õÝ^¢_ÖhöòAþy¤?½âÍ´þHù@ñÚ·Oëë뻢/´o´Ôh]¾y-2r_ð Îý™ðoÖÄ3ŸvAžH|Àˆ:ûý'ðÂö¹o‰ÇÅÜc¼7ȵS_“ßͰ‹ýHe²O{þÄïMp{¦Sfè+B3ôxïo‰/š‘‹ïȃ9Ýlär!xL¢ñÐ÷ŒÎø#¢G”Þc‰Ë-æ:±Šco?¸Ëý-Äî0ÎWóéØ-s »é|'öùé;pÍ·rÞ¢9ø~Àä;7nEoÌ|»Yè–|Øí³¬×(pV}ñ3Êžâ<Ùs!·<äùÄ?d‹ÅúÚøËN©äåœÅðó×{¡ËèÉ`Üáñqè|YIŸÏOžbç̾Ⱥˆ<·ã"î¹· ù´Ý-©¿È°üD²h¬k•Åè§ÒøýÎÍâȧŽ% ‡œÇ±÷¯Öž>ß_%çGÞ¿í‹ülw{Cò Æñšä£Zf ý«ýoÆCÞIú3û¥ ÎMûA†ì#¿Kž×ܱú¿[“8­ô) ÎÝѾ7R·olKìîçùEÞx’¢¿›Ü†žã7AV°GS¢Ÿ£·Á{ù]Š}ž“ÿ˜=l* ý‰ýàü–ûµ ù-#Ò4ôMþiÐSéää=ëèç,ðSöc_¢„O2AWæœ7Âa~÷Ž/ßy˜ç¨ñ ú^[›ÿU9‰þ¨ zjp¾Þ|Cò´åÄ.¾`ÖÇ-ò;ô_uô/y3Å«ZkËó\²Bpòee¼2ØK×>"oôNçôöíïý'äz‰$aøÉ‰;z=ôz?ñ¯#sÁ­îŽpã<ìög#ÑS…×ñÜâÿk|Ô‹“;³ÉäQ?-ÿAäÜ 3¬·Ìe°cÌÁŽ<€öý ¡‘óà _aÆÿ®CëþÍ—=2’oÿhœÓv“‚7šöÍQ<\?»d%}ü ¼Â_×~¥âkô`ý¶ô‘7óO#ø4/rómdôìÜâÐO'òçÎkp\öÙðÈsÁ‰Ùé‹@ï%çòû¶dé3û\©1t4¾)þâ÷Qø>yxñ'a—8mÙçì ÷…ùŸà]õââ§Þ{_dîlÙµ ÿß‘„xjæiðçÁÊÈß6 ·‘.ç<Žk~Âó³~<3°æ²ÿnÝŸ‰½Wf(ô¼¯èžß!Þz!%|¶: ëöwγ§ïåÀaØï—/(š»è×vÜσæ¼w=±Cø“ý‹\Öÿì=ÂÎ7<ÏútÊìë!ÅYÅ{‚CÊ28™u ?ÕíLÜnï ÿû@†Uø‡ ük³#qÝG‡X¿¤xŽCá¡û9íýø¬Sg:|$s&ì]%ÈK²ö%ò¢ÞåóÛÄÿeîœç†C~û¢> :÷KëRì8ßBç:—çèN>g»Œ¿+xXëF9ðRÍžÀ¯Òß\ûùÛ~'?-s ´>ÂkRÿ.?82ëµØ;ùÖBW·Š!Ö%GÎæÈ€\Ÿÿ9i¥Äž»Öÿg\ß+ŽÔ5>|ó®¿Ç:^rÐ×Ä3…þ¿ÚýÿOÊýM/ÌïÇ' Äþ52]Â~ÿÓy¶:•zFk‹ Ý_;ãËYkÚ}â@ÛÁMÛû¦£×:~ÝX ðË3þu'Ï€î/ÁèOžÉ¨Þ~´ç7i4~tètÐtèvB}üà •x­Ãüü~C…ª<Çö?ø\57vÊ£Z¬Çï%V`ÿ>&>õ ¦ëùë`´ÝÅýèüé7®}ÓÝþ…ÁÓH\Ýž›þœ‚k×þJvñõ_„¶â ÷ç>û‚e®B|Gç½IßN_£ý­´.Ô8˜xS×ÉøÁÒçWqkΟװÛî—FŽH¿G÷üâåó¿ò×Gý"+bìüHäµÜÂÙw©7 „ï‰ñ|±=é |ñÛräžàV숑üwwõ_ÈœE¸Nćœ§Ú è0Ÿàâ¦ÔÆï 0ìïwÈÛzYV£Çç׿½A ì‹2»¡Ã¯o`dû<~™zÄÓ·gÿgÜÅ.Ê•ÿ4y!pm†¯»~nPÃÏ›[òûï^eâ=ö´ÌðO¹»ø¿?µâ¼ëb·Hßk]AFô\`â-üѲI9>Õ$ô‘ÆûÛÌ"ÏQ=özÊ”ØYg¹^Zoémîˆûì |Ñy çMó'ò¬nUìÎcà—ßòó½àCöÕ?¿Qî¥O÷ÎÐÔÊ#çDè_ú›éÜsp ò2'#ÄÞÂ?Mwœšâ;0þéN<:9!8¡_í›çtJH^XúñSÒݼ5…û½õíRY7Γly¯X]ÂôkT|­9µþ³ô r¿K½yÉ7Ø/ ÛQ/[ý:ôýª,|ð99úóñä è ûi&ô{€z­@ÑZØÉ‚CðpÌ^ =ñoc~WöÈ7uˆO䆽›/%ú\äœ7ù{ôG‹ÉØïm°÷Ý¥#À×½š},õk[u‘caíx ^³Á,ò¹Ý¨ðâß:´FO­;=—³•OÿvŒ‰'ýÿ™‰}øîq¢O¸ïÄ?øþ½ ñÇ:'xÞ¯Y§ÒùÿõCðñÊóÐ㽟‰»M:êïV[ ݧގÿ}è(qõ?‡ñ}»$Ä¥'âF¸—l†Ÿ¹þØS‡xÄ¥sÔû˜»¢º=»ÑnvÙ?oÊØ?Ïo›¸§ÄO‚}¤¥/¤ö}ÑþÁÎàÈá~ùÀNùß~í9Ðÿ¿âÛ´¿ö½¾ÃÁ¾“Ûa¥¿H>Tû„Õ>‚¾Jûý&ó ¬? §d.•Îó±ÞÔ'óÖ´Ÿ¥3³ÂÆÐôiœ>ލºØÙ‰u-›‡÷£Ãù¾žÈ™w6ûÓb/|0' ~fqðŠÖÃØ+LäIÛl<çÆ—¬£â“Äß×>BÁzÉ íÑÛ)¢øtÔ;»kQìÀØ…ÐwÓ"`çÍA|ï†ÔAßÑ¡“sëዤY¸ÏŽßqŸµˆ‹Õ.ù|`Œí  îß{~Ëyœ°0y¶)¥ˆK Ø€~‹öþú«òaùð{ùLÖÝôðÝšø­êó>÷øVpV¦Û¿öZîKò-NõMØ;¾B ;‰]Ø‚ø´±· Ϲ÷þ„Økìß_ò?×J‡\÷µ?ŸÛ<¿"ÌÜéà„¡™ÂàDµ¯‡·¼ô÷ù3qÅ?Ë-ûú7*äìÿ_êK‚ó{¤îLç]hÈ ~bf˜úþ9A¾wçaêÒ$_­ýîÌ'Oᯋ›è÷W3âVòï’ynìBØ—U®@§Rwá®Ü†;}ô–øì‰<ëù,þ¨Ö'Úã7sÜù;ØKR²>Rœóp9;úÍŽÏóŸŒß\Ž|œÝçv}ÚTèƒqñÿ®ÖA.JývÐûúkèrqvìé‘‚{þ+&táŽÇ®ZŸ}t´ú #õcúœÞÍdÄÁ*¤8šNß ½.ÞÉEàöOA®F‘:üãÇ[^cöÈþ)bmðM-s‘¿íwüœâO—MG?Vì _6]Mœ©ýW\/o)üø¹]¸ßµ±C;§ã=Ð~ë…pzµ¥®hùkè¼W1_n8‹ÒŸó|¨Î‰ræ×¦>Xêzµß»rþ°ö…~{cðš9¡ùÁ\üçɧþ'_þk½®ö™Ð¾¬f»¿ÀáG­Ž yæ@‘uÜWóyè{鯡þ€±r4qOí÷-}´.ÚL²{mx[äÌWOÁIörЫ²cßH|Í[sÉß7»RqöûÛ´ÈùKп‹È' ”‡ õÒÂë·½Zø~ˆÌ Ôþ;vÆRàƒ:¥–zò¿V©ìkõgÄ5d¡Æ§5"Ÿé0¬'vZƒØÐÇùAÐy£RÈ÷g °Ïc€7ðR4Â>©ð¹-~™ð*ô,q[÷^:ŸnÜVËð—wÍÆÏ9ÞUôõöV ä³W¿8ë©8Ë’åñï¾e}çeÂ>êF=¦½û˜O¯î¨ Ô»ä« žîíGôV™–œï¯ÜðWù½¼KþÚŸí Ð£¯¯´Î9Ðïtœ¨{£ˆÿf®þ{ˆ=œ{‹8ºÌ…Öþ¨ÚÿAûçè|[«Rzâ°2G%ðn3ù2™¯õフp-ü~qÚ/Ó´Ûp2g$8Dæ÷h_»@ø¶èyñ“u¾©ñi!ò;C2乨Q:ŸÁ›q?`ÑvÖ}˺™Ž=ýþþÞ ‡ùÅåxOÇÈÚ {ò¯-èݯ@OÑÖa¶ªßMˆóU]±&ô}kÞ:DO€+ß[ã·ßÃÄ íõ÷Ñß§Ò>ÅO8€us)ú6÷,ò”úÜǤ¶Ø+Ò÷ÄlÄÿ>ùöÇhØÙ®‚ïÏ``‡ØN|8ð€uì>œt©èðÅÍ[¾½lÜ«‡ÿül$üsþ,|0 *tY¯tY@üã…‘߇Ö߉Zü_•‘Ø7I[Á—û;¢6œ‘žºL»Ú$øyõEVáÁØ¿¥ Î3Ï!_!õ2nþà™._ ¯×ússQüp±?½WÙ‘Cb÷Ø¿ƒ¾R®ÀÿÒùªgtçlDîʼZë×^¬—àèÿÝ—™9qO¹/â”/Än‘>ÅÚÿEçç{ _ þWúœzù¿£Ï°ôg4GÇA¾G½×GÄM;ß±ÉÌ»…÷M¿°oó® g"ŒÃþ¯ÿÿWꟜÆDfGN?ª…\MØKòØÎËèÄÍNC.¼>¤~eìzígý:)ú"ª‡ŸÑåèvÌ)®;t~ªÔ÷¹ñ†“Ÿ—¾ÖÚIçO8wkbw½ß©†ý°8!|;¾!q‘M{‘RÏ¢sß‚s¼†l Óÿ,ЫxíÕáÃ\9°‡öÇ`n\ã~EoZmwa}&Nê$ŒJþ¶ä âTÔ„/º—7gä.µ¿–ô´’> î3k,t=u ×ùÐ…çërŽõ©ŸýøúoÖóç¬ðCÝ äGÊÓ¯(P©>ú wxøóxrò} &Pß'sj‚õâZwŸòp˜ú¨`_X™Óâ_£¤_Ú¿û ñÃzûÇ}ÀïȼkÇlŠý#sÔï–ÒŸRåæ¡{Ü—ôoÓþŒê¯¸í'±ñ%ÿÿËɹ>< t‹|M Z8äË¡ºÐa–²È—ÓÃÐÇïó{Ç ð‰Ôu{9°+Cô öe:êÕýÐÛ•z#3¾ N"ùKíß­}ˆCìüáÈàF­4½8_¿ÕØ_u›âïLjAýÈõ¾ßàîHݧô‹4Ö‘Ovr5æù毳‹4ÄΟ3•8LµoˆKîý»-Q:èPꄾB?Vo€Ü.‘Ò·KÌwÏý<ó=¸'<8cc£‡~E|,0~úN¹.¸‹û¸£ddVȺÝBžìI‡©ž˜øëñ ð—u˜ûÜ¿ƒz!£q·À†zì×sú 9ýèc¡ñ9«ÿPöáàRìµSgÀ_gMvÞ?þ»§ð³Ì²v~µZø œøÇFèÓ¨W.¸¿XúC9ÎòÛÀ¼ý¿ûr«Þéçÿ_ædj¿íw®s•Ì3É H=£ÖËë¸þ(P33~ÎïYçüӠ׆Ùà“? ÿ$áýð’ëvꊽ÷¾1ù›3éñF~Ãsˆ~6^ïgŸ‡½cnW£.çýRÞ¥îÙ ü†Ü—y³ÁþáÚßCâ”Ú/Ël•ý$ýq¼šíæ| ý‡èŸþg¡sZÜbŸˆëHß·HCüÛ²±×ÖòþK~¯™»ë™Cþ7Ö-â%?Sû%è綦NÑ*C?L«aOöQê­w¿“ÇÖ–}¹ÿ#þAÄ_ñ›WDÄî9PþyF~ÌIw‘8ÆÌ†øs“† ßzìc§Âȧ!ïáÁóz%šQǵç*vçƒÐsŠ(ì[|úYißíOXß•u×úÚ‘ ÀÓ|0ô}òÍÅ^xüžôòÆH9ÁÙñMiè?dG¿½²f§Ï¯V»jøéÈsPoo8#‰¿TšJ>-bwÅ;#RW¦…ìcòØàRU__žž»ƒ‰Ÿü\Ž3=*|\}zù(þ€ó•à›§]@_½¡>ÍNX‰}ËS >ªø¹ô±ßÎÐëîõhL>¿Þäe͖į‡î$Gþjß«éè»Ü¼9ò9ßZäñµçè…Ì˾¨þÝz–­»^í÷(ó‚óî4´h(דy5Ö} \¯Ì³ ‘÷ðAï-Ø_O`/´9Óu/r«ñ&öéêö9bk>ïªâÓ©³þƒöÇl¬k²ß° Êìf=#5A®l«!öz_ŸºOÀë:]b¯ŒDŸ8ë# ÿË܇þ¦å‡÷!¿$þäõŽÉyï¶d?²´ä¾ |fŸ‹Ý‚›sßj;`gÇÿ€ÝÞm3ñÕ©Ïà§}c¡Ç6·ØÿÌ·É—:Êu²7žã9eæþZô¥ÑÖ4¼_Ž€¼(•¼—æ^"ÕÿÇK}ƒ{ܲÙù |ôŒºoÂhâŸ2gYç—Ø{ ²_‚ó1Ž×Ä?®þ~Çšï©ìU†ëHãâõaž¯Í=äÜ’þÈûõ±oÄö­!~Wçû=wÇKüÐZ·Œ8ZÍø?‹òYðÚ÷ݳyÛ~ë}óy¦³C~ ý‡ø§þ¼ Ÿm4@ÜDúfzGSÇ"ó{´/½7) ¸dOÉ{I¿Ò~˜¶=ÒkŠÐ9x„@õ‡ÈiÁ%+®2d_Áõïˆ}˜ï z4Þpph•¢¡'~ÿ•~'5‰o›EF ÿ˜É~ßÈ‚=48 ò²ÊcèµÕüñ +@OŸ†#w[ôåøœø}Ö öïö÷èï~Ï$oZ˜8ÃäÇè…¾ ‡ý¢£G²Þ—¼éî[ð—Výè­øà¬‹ÈÀ¸‚ðé¶¼èî×xþ;¨ƒØÿšõ™¸9¾¶;ë)ù»{‚üí»~‚à‘­¯s'‹¿ {hEeøLúDhŸ\Ź QÇ5b~É“mà6UÀX°½(¸!Ëzƒ‘ÛžÔÓ>èߣ²Ï¥®ÃKÓ’ŸÎßþ™ÚÄçk+çqäÇ–sdìÁ•>9ÖÞÈUéoiì½ëÓ›u,'q™#fͬ€_*}¥þÝ—û»ÛÞ¿í_+sFÜgûÿ2Úy;¸áÌ_à;©KÄÈÀ}ÉÜ$we üÀžŸ|’5¸ø@»(û~ýwèþA*è9uMäÅöŸ ©1‡$£ùܶëÑÃßß$žý9vcËŽœgô1èì0ñ<íË£q$wYGìq“¾S^ûiÍYþ_»Õ}| yT˜úB»Ki¾¡Rcâ?“‹±› îœÆ¿0’?+ÿ5þf×ÐE÷a<çã,ÈÝ5Á7$ê?ýóuôB‘йÖñKß-{ßsì­kÏÉcåþÝ,ñx>©74†QÇâ¸Äï7Á¿•Äoí»¾‘;ªè0ηlòbhÁ1×Σvæ÷,ŸÁ?4\O\/\&ðBËËŸm<ä/ÁUK?ì@8êðìÍUýóh}§³´ ö™³;î§,äY'\Cë<0ÁÉèxgVÇ…²žð…ô¿2ÊZ>ÿ¸§§Îøú7~ˆêËõkO×É7è|^É/ë;áÇ ×ÐS££wêÅENì¿®ø8ïB$ð2_)»†OGn[ØA2Jó î¶?è²ý ñéÃk&²¾¨ÿ¡åŽïàŸOðF^±[øÕ2PçZ¹CÒÓHúye6ÑÿOúüjßDÅ9zMðŸûÃ=ì¥ñ ÛüÁ¾–êTJÏ>Æ3‘“CŠà¿ŠŸhEÎ ž¤,q:+*ñŽ`Ü£óVèµþTŽ{V z<þIîÀwâ':§‹ Wÿȇ=ñ>túàþ—4 ~C‹œGê3̱ð©“ë×kó ÿ¶Aø"Fè¨Ê>É»vGý\ôІ'œçÀúØ]j }üòÍ®Ð|æ¦â·?ZægøBüL#ZsÎ'}£­×’¯–ül`Kôáâ ðIÅVè;é 8¹@ö6äÛ¼øÁÉwsºz>{µ›xY¶ÁôySi½ð-õ1¿Óß!Ð)N;οŒ}™²=$qû-v€Óz©ä;‹£¿©f^•Îóq'Ö€Þ6DE®v]‡þY×z/™ o¼(À»ôGúw_FäWõC_GûÊé¼çÚ#Ð;[§‚/½?WûZ˼Š`ÝÎõ’ÄCÅ?QÅxu<™ÌÙ±/•E¾Dߌž”~îÚ>øË"/5ãX¯+·N6öQú›xE¾Æn)ýöJåÐeczy+!ö,õ£n“?MÓŽón,<ŸžŽë ŽÑkv>¨ôûMâÙ^ƒBäaW…G~ï*±Kø=ñskì݇{‰wϰŸëD&/·|qÉÅ8nÊ%òR£`/V¹Éq‹†’Wê°jîOŸ`6ö×åzȽªÀIK†b$÷;¿“ä¯èGä4|LüíæƒåÚ^azÂ0rß³É/ªDz?Å_9½;hÊaì ©²·Ögý¤oŠ7ö¾gˆþÊ‹œèœ÷QøÍê‡x·ñþ?ßœðþ-¾Í5û¨üGpâ¿ÎgÝLô‘Õ"Žðé:zDæš¿Ä~ÐþVO€ œˆ—->ñ/н὞Kðfn¤&_Öÿa`¬Üþ}åÎäÛSÚÇPëw­8ÅèOëúFçÉü\;xRŸ<ªô!2ß='`lÂ>Ó9H’OÓø’ÎatÎQG¬”¾âVAò‹^+ú ;=c#O–þÀþä¿¶pFôÀ7wñ¿4¿š 5ölÁìôéR¿íÌyèð»ôaë…+Â~Ñ ¹7uôõÕ,p7GcÿF£^À¿Üq¿Ûè1;5NÌýuûÈgÁ×;¿¥`?çUÄî¨EwP ®s4v‘̯p£xØ‹uÖHHŸµÀé¸aꈽcñ«SnÁ>ì4ŸøX‚šüÞwrߣŸ›å>üy>ü2˜ø‘öÁdiÂúgO Ýšè søHÖ¹îkìþQX¯U?;y™¾Þ¬—ô˳‡ÆFn¤¦?¤·Œ>@ÆÈµÈÿãð;»ö@~J¼Eë߃õ:ç-ƾO{9üÃLâ6CcÿGó/´•Ö{y•‡ ·3] ƒw4î\Ǿ_x>•ºF;~®_æx`é§¢x@§²ÄÙ–Öç"uf:0ð×bärÕqØKß²îKEÞçiWk¶¢oy _3â›)êò>’ºDoÆ<ö?ë|ìà}7°rTE/×üý½¬/8— à‡Ÿ?l9@þ®îfäú£Côï锬ü[ìÐÛgÁÉÍÞÁ~öH„¯›:ØÒMúIdäúI'ò®ý^@ßE4y¾51¡“&qÍ+çÐ[óˆW¹EpE5Ñ;?'FmM„ž”9anö¯‘×ãçÿ{{Nú*ñƒOv釥~»}ë$zxîO’ÇÚÀ~Hݽð v]ëà¼'ä€_KMcÿ>%ÆéUˆ8™Ô[(Þ.P¿Ë:x ý4ýgü ‰o:‘[B7 {Rðq rUçeä½CœQæ‘; ò^2ÙH5é‹ò_ú²WÂïw£fYâªI ¯¥°Ú÷ÎÚáÈo©÷Õº{Noè:Ò4âF2ß78^âZ:WFç-ó ¥›@†atÉÈúçïC\!^$ö±á>ì’œqÃÄw´ƒ»? õƒÏçOÍ9 :¿™¸Ë¦½È­çÁîa/ýì‚ÿÚð38µHMà‡O9y_y ~)kaç/-ˆý;ãz§fvòG;;ñÿóàžÝ3Ò—Qúb:Nƒžçø~DˆýæãzÌݯàëÂw‰Ód½Š}'úLóPάü¯åt±W¨§Õþ]Îã4ØKÍcAg.Aw2À^JßgóLqèYú6ZßãWißwl8ü­=ó9NâFJ÷ÔMðWd~YˆÈÿ~ŸIÊ›U~<Ó…¼×î²ÄãbÄ@ŸfY =k=¯àÞ¼“‹ÈkI|ÇÜá›Tàz‹¶Ò?ûåSÿúwzõ$¯ð®$~EÔñз΃’ùÒ:çÅ鳓υ<ŽÛÚ›ùißÅ®—ù™Ö”fÄm¥?®úÚGNñŽóú~‹µ}x›ÌW ¬Û„ÿYêõ‡#ײ?ßUFo‹_lÞ~!ò|˜Æ´¦±~|ÐUâ;æXä•à„Í÷¿¡oÖÒßÛšT¹>÷ök—ñØ­ûç@×U*Ÿ©U ½_ëoú[Ö+‡½u;ÚðÊÐwóòÏèýÏ«Ñ'‘É×jœÐÎsûfջ㡟GýX÷÷áÈ­×x¾vünæa¾R Q1žëºþ[NOç¹G‚sŠAý¤ëzõqDìuéWä €¹ y®¸mo¬õ:÷ÏH|דûMâÜæÕTìŸä­½éÞÐëlžÈ:HUpNؽûÈ÷±ñ{çL¥Nª” ]J_M;éTìþgÁëWï¾xå/›¡/‰¯jý¡ùôüj©“ò܇Ž7œ SßâL<èR â¤g¯à¤ ÇñÃs“/z¯ÀPž§ÉçÕÂÿèk'à§F/èß[²ñ°7Òwç¬Áþnûĺþr {ôð†î·¡o©ÔîÌq)ïg„;çã·ðé­žØé¿¦†>e^i ÍUäø¦yàƒ¶àÈ_g§ÉN|¥X èîXrò«“Zçønõ²1%?(ö¹µ¯¯ú'Э‹¸Y…3¬Óñ®ð¥ö}.+°q+öÖ7çøÜz¤ÎfôÙ“?ˆ?µO‰ŸÔ…>é:ŸLûÎ{Ýlð{ꡇgÆG´ŽÆõ; E_ä\Ã\‰î¯Ùoo!u'ÚÇÍ(¿ˆ:Úì#ˆÇGz†S0;yíÏùöˆÌÐ:Ê/}i<Æ;{Kúï+þYý^«]5ôŽÔ³¨\÷z­ç]ðqA¥ÌÕp;lòw.µD•ËÞä|5â§£fc/ _Œ_Ññ•ïǸ}.'ycï{.ò4¯o/xIs@×»–ÏÔ]òIáÐyö±èïíî]Çç ØçþWÙ¿%¥÷ ]í”ëJWø#5qw3æ0ö9}9äÚÙ]ü/êLø!<8ó>}œE»±{ÿ¤¯¯û üƒ]Ë‚.î6!ÿ–ñ,vSÖ^ä3ÏÆFîüŠú>éïNßÏqãâs——î5q˜ðÕ [­+R„û8ò=z,/ùn£àPò'å+¾›ûØY :¯}¾—¾¹NíäË–ä|ýkœÝ«ÑkÉéÃauŸˆý%sÕŸ±Ê&N±6t#ñA­»2štoûò4öÌù;ôÙ5÷èÏÉÜÈ¿,›H9köDps1[øOè_û?xIº…¡S{iŸ®ÝâÅëš¹o¿Ü„Ÿ|õÈü0ü' øP™¬¸TÅkÛ¹/}àíÞMÜHâ¿«ש;g©Ð~Èøìó‚iÐùåJØù2gÑû¹âo’útû~Rè6;ýOç,èCßpÁ!¹“C?å?BÇ‚/vN@Ϋ„è ©ßqömÆ.YÒ»äQ~øpóíì²[±ãëG³¹ ôcçݺlw“ïe»$ýs›¿%ol4ô^¶?ôŸœ¿ö‰vöå{_s<öF¹XľªŒ=žj.ò»|Q®½aX<ìò9|ÿþ)çM—Ÿuë.$è?L-F~¸—G‘¯è÷œÃÕTô:s¿2o'ìúdшƒt;ž\âênŽüØCfS¯T#:òVúœhãÇŸˆGž‡$rÓÉ7Iã£ÿú×y¼vƒUÄg4».öŽà<I:âç® ½ó/ñü¹ ½nÏFžâÏk³…o™«4rzFêÜ ž3a=üé—¢uÅN¦ò܇Կy½cúñ]䮞]ûr8ÅrwÃäÍì‡ ɺ++_ÿ·÷‹#aøGæ¬Í*!ó_goÞúüöé4ØÁ÷6à×Êü™ÀÎ-È¿,Äeœfcweý»Büã½ÝSbò>jì«—‘·©gCÿÅ#×›Äîûi ¸_£Âg…ë`)…žKÒ =¦u’2_ÕÈÛˆøjšýØ1ù§¡Oo¿@Î÷ËéëQ;V2êÔeÞªömÑ9kfê1œBÕ‰§^ŽŠŸaueÒÇÆkÛ–ý•úP­g·6¡/Âã"ô5iøúÜ~Ö¸²U¸à Ù_ö]ú kœÝÛT<Ù­“Øým+âô]Øÿ?¢ÿ2bvDøTçÕÍ^ƒÛy?v—ôIÐyñÖÇ“Z7CTòØAâ?s8¡ùÞýs¸9™ÿnfÀsHMû^[¹‡ ?¤þÇÉÿŒzEíK-}”5Ïl$ê¿=48MâP?s²x¹7wÙÏ Ä÷‚ó¯ŠïBÞ5È„½ž­4öóûøÅNQÿ³)ħ†ä ^RüjµO‚8Ï—ô5ögÀþÿ|[úÁ% .(sPt®y%yWé˜ ýgV@üx¼AÒrð—Ì©tjσoNޝ;Þ¸qºî²;BæÏ„اè›;ß§˜OÄ@ÙvÈcénÊ„¼”¾!zNºà@˜û˜H=¢Sº&ô¼¡?ù¯ËÁí _É|Rkýð߯ŸÕ~m=FÃÿ§Fpß n#÷uNžÔñë_3÷yü±k´“d"~MÕj¬G¸wÔC̬@ÿÆŒèòçè¢ýÚ^æúŠÏîøÝ‚Ð|h. ?ͯ=Öÿ]ükó»öà†0ÏljK½°s™o»Zúv“õ>=ò]âíÞè >ØILúØ|8Š]µ‹~úöMæÕÙ©÷ô†1·À~ñ+õާ2úÀÞiÇ|ÉÀ ‹¸e³þà(ju¦Žàp#êPdž¬öæÝ¥ß¢=2qŠ ýé;ùÛDÖåMç ¡×GûÂq_ ¿¤ÿˆµ­1ü$sß´ÿ”êsϘ]Rk vl”%ËBÓ«suý+¥_UБº(/bÞÅžv¾½K?ÀÀäÇ<âN4'&qÿà¼Tý!<û-qv³Õñ5ÿ ý‡Ðöÿ®&È©ùX¿I '±_”t>™ö ´:·C¾ -Žý"úWã£Á¾ì2‚³|P [,Î'õõê‡[÷-¾×y¨rfÍùĉ̒ÈiÇЧR‡ ýêœ'é‘7+†ñ.õ¤šg±gçúîßèýÀoØŸwê/Ÿ8»Cç¦/U`zaâ¯}Óǵë#ú2TYL]ˬªÄÇ»íÀ/Ÿ~ ?±%}ø­â‰Ç_ÍýK_-ãz øöCìaë ö­ÌgÓ~ÛŠK÷þÈÌþˆÜÑzFOèU,‚>Ôú}ñ»¬p~ÁêFèóûé8žlø§íÆ‘W’¹ŒZ«õÍnö¯ÙéÓ qLíhÍÈœ û—‡ÐiïbÐù7Õ±¿®¬\æúó;!w«æ:b÷ë\s\è"ãYøDæ-ê<öÿôåš‚þ¼=zNõ+Ïû⎚ÎÌø9Y‹‘ïR‡£x!÷ÞϬ¯øËîÞu<ïÊ.È¥ÍÑ'«£ ·"þʾåjÌ:¹Ñ×5â c-E>Uý‹u9ÝéÜØèÕdé9ߘJð]ósäKÚ À¾ª¼ãÖ\b?/âÞ/ÿq÷½äˆß7ÞM“óK=„ˆÛ, ?w©þªiòþoÖáJý| ZAâ§ úŸùë,ë0ø8Ï›~çù¶/Ïl€o§9Õû°nZ7ºíø2]\ö?_ôåè–ËÂÐù‰ÒØï"?ͼI éS¬üdmx‚|87=,òKñ]VëhøËbÇhß'Õ÷ªÌ8ñ ¤O³qÑÇùî"ëšz>rx_QèRûF|ˆùhÝþëÙ…ø‡ô ·S´%þo.çâ<Íb£ÁnTûǯۭÿoè_瘚“ ñ­Š¬ CwbGó2ÍM§Ú÷S÷ËÕ½*ýÛ‡±7®ìG?¯?½6¾H_E'ÆkßþÒ<šÎ;Œ¾€>rr#Ç[Ž¥hÒ4Ø532BWRo`¤Ì^ý”þ•ùÁ>¥£Êýû©ö:ü éOªv†ýã*Îÿ ~wšQð¹àQìq“±ÿ$cåß„Ÿ'öÙ³ü)ý‘4_hŽ­¾ ̻ĿtŽŽQù)rfö]úuYG^ ¤O©k<ƒ÷fD¨†ùuä–ØsÞäèùrYû¯ÛS—Á¾‚þ§Ýçü‚SÒyÂNù½øM’³.QþÄüžÆ³‚òDøÒ,´Dø§úJük'â7ËCï›öSÿ^ó›*¯¼òU¡±×í˜ïÙ±WŒŽ%ÒçÍYUú›q™þMIïÞ_ûGê=ÔîÖ>”Ú·È©‘™~QG—|”Pú•™-âoÿKçÁ«]뵸Á}é|¡Ç¿[Ñ>#Rn¾Ú¼K=Ÿß¥?޵ï ñ÷ar&iîSãÒQ®rÉ—ªœ³5ÞFÎK±`Ý»èÍ@¡ýäÄ.°[ìÅþ\eˆŸüE¸ÿÿÛ«uoÿ¯ugšŸµ¿®Š>{²9—ãw®Wú3÷±brPçFJýš[ý;â-s--/¬< „¦CoÕè&Qü}™wcw/‡ÜÚ²FìTò V¾ÚìSã…ðÇú^ìwô3Ø;Roâo†±t®½âïT^ªÜPÝi±ˆýÑ: áÕÂÄíóâu.@_QGÁG-s_z3ý¹¹*òñy'Î?0ë'sÍpWx‰kèuCõÓû12ò¾Tž[úBéºx¹0ñtý¬ýo ó¬T¹2‡ñK§«ñjÕ‡:OBã“ZŸ¢}4o¥›ƒüœ—=©'ú@ú:›«ŽÂg?í™zµ_šú7oÒ>è:—K峕 «o/ê<ÅÀK“uRÚøòƦBÎÎ)¾´/€~‘þ»né®Ü¿ÔŘ}æÂ“g°®]§Ó—èxWè»Ñ ä˜ô‰öbda=$Žk}Uœÿ‰½cn¾±Xè‰Ïbg*?é<¥@ºÍèÓ³ÛÐâÇê|²@ÛÐÏÍDìŸÄݳ±+3¬ÂΓ~Fž+ü_üº`(¡ûý-žëNô™ØßÖô¨ø­]VÂ_åG ¤>Nû%™Ó7p_bǹ "ÀGÛŠ“¿}â=iŒ]y rqwK¾×:k±—4ž\×ç_ÁCþ.ŠƒžÊº¿œ9âGþ{'qÁ»8Ûfñ.ú2p=v¨Ø›j/~Ì ßÄJÆÿe®¡âØ‚~ˆàì§™XßÌ9ÉcjßÀ áñ‹’,ç8™çå¶Éz¾úy‘°û>h9߫ҾÐq¨ 0Û:"÷êÏÿoèß:>a¦¬/q‡ìÑ˳ž; ýš¿ÄšÐüa,ø•ç’<Šö'Ò8’‘±~ݰ+Èy‰ÇhÍ<ú†Ï7óR·œÿžOú¼{þ„ždþ’ÒµmWÀŽ‘¸ö«SÎÙÓ¹˜wü|7ùÂÐüà=Ù}/,<Í2ý;VñGÆËo°³üDÜVê4ÜÚu8ïü”èI7)vq©Äè#“ç @÷Õ~“ÁùÊ’²SÜ\šŽuž¸s/*¸C‰“noñåaP^–›·&ô}»Ñ&ûqOÅ)žÑÚ’ý øÅõªÝ£qµ÷ÕÿÖ~TêoXoÂñé·cÔ»Èz‹^Ó¾äÚï;ˆœt’çû]û}Å è¹é}øÕ˜†]*õ¾ °×ÝÆÞK™’uš[:‰ØàËê~ÿõµcäOþõ¤Ÿ³Uê÷+qíeOÈÁ>õ¹„^ù¨ÖÛåùêb_H~Bã:_ÌÌðS\…y¡ò^ýžc8^ú¹¨¦v—ÆUîßôy^1Œÿ¬ñ›`]‚<‡Öñ«f?˜‡ü1fÃwo:Cß±{2¯¾ijøKòßÞ«QèýøËË‚?1b¶"~3hlX»éÇB\ïÁ[Þÿx…ü¯Tþ{<—×:Ðn%‘{ÒÕ¼× ûh\Qè[ú¬kœÎµ¸Ýúaü-µ?´o¬Æ¹ô9ÌÆ ¯<!_‹¯çwɧث¡G¤›%;~ćŸà‡ëyÞ’oxß×W䇗5öØ©±aä‘Ý´~â£zâûo±ãuJÌ÷aqŸÅ“¿¾õöwKÁWH\ÐY3w™œÿ‹æ>þëË;šÜt¬öðÓž%ÐuÇÈÕp-¸o™w¢8í£g ÿ ¾>vûxÉ]øºðJèOêŒb9à/™'£v‘ê?µ‹Ì”ãெ'¡³ ¹ gÑ#šgT»)äÿèí›Éøüñ1ü“öq—cUÂÄcŒºgØ·fýÉKˆ û¯bDöMâf:;·ú_ûø–ö£?øt'þ–õ¦ŽOï‡ÊÛ±ã¡?Á)zÍå~D.é˱nÝúrß|®Æ³½u‰;åK Ÿ½‹¿ˆ]§qk­kòÚ¯]ú¾´ƒêã`}îW³ÂÄÍ#'A7¯6šNÀJýŠxc‚ûØI¶XÖçÉššÿ:MôÍJžûòÐ/êûó¯/÷Ù¾Qþý­]ˆ|»ÀÉ‘‚w?/ó‘Ü“ÂÄ¡­ýM‰›/o…Ÿ$?úocsèev€ç—ºßÀO;ÀËI~Īå¡çŸ„ïEïiœQqFÙ'Øýb_zå?²Ò=ÄO‚ΥߊæIÍøc°ßï²í7äï¦ÒøÚwxþìo‘óš¿ÐxµÎ—Ò¸\`ÍYèGð]æï—°ÓSì ›IŸþŸ°º:13L<í~½(x Í›š £CG·w"~n ?5éŠê¾?bØøIòâÁçÏz :‹½Šó=Žˆ¼]ó=ò´t>žOâõšßT¾ Îù¿%Ø÷^âîj‡ê_c5Ÿ/ñ,7×6®'¸gô|Ž“ø×l¦ÔRéö/Ìú .Ô˜ü‚ôÿtïTÿ)ý!Ìo’"ò&™ü_Ñ¿¹c¤Þžö«à’ÌmヾæyâîĈžûWò5ž»’wçHÜ×.wy°#7zTðj_ý·'~¹® tÓòw즅›ÂÚ51p|ÆÒÿâû'ùøàÜ>ÁeéYèÐ<´ ;AóA’O Ì} «Þ9}œç‘xбäoä²ôyQ;DýPÅýÙ{F!§á%O€Ý»|úõ"ž§kdî³ÙÏàõе§ŽUìÊà} ÎÝJ´y¯qÂ5ÍГ½¾…–='¿1ëýW?ÖKpéÆˆqap?*ï‰]X÷¾Ã‘W5_'Åî’8žæÉŒÈ¯ ëS7ˆO nݾҙø¯ømjÇW–ð|2ѹ=:+Ò~»Á^½áV?ä¨ÌïqOO]溢¿5ïbÿ ûoèߌó¸‡ÿ¼‚70ó7 ÿs`zRæ9YŸ _¤^Ù\ü'y·_~]Zn¨ª}®œa XÁ¹:+Úûqͯ(ÞIíy/¡óX½.¥î“¸²»³~ÝWé¹Ùù‘?’çt“ïâÿ‘ã, ½nŠ/Ôü½âHÍÃQ§"·ƒuÖËçà/È<íSŒóG*Ÿ'‚¼’ü›7&q–ÔÃæ!dθÊ{«š^üÕQз1^C¿"Ïi®Bg"σyY™‹åÍ«ˆ\ZV¾™VxyèwãïAØiûc߉ݥë¦ñà eSêOŸÆþËN;sËDøW☚ÏÔu²¿eýŸ¯ýdÕ5ÚîÂN9ˆÓ“ëI Õ×Îåv<·ÄÁ‚sP5)rÇL±ÏEÿcùôoEíL\@ìrWô‹¤¿C`]â0ßk=‹³{(Ï/¸3ÕÖÒÉÐÇ÷SÐÃQ\ˆq7rèÈ÷ØÛÏc Qñ‹ÎÌÐw„”\·@Yì™×§öŠÒ‘Ѧ1ûªóŽÎÌ‚Îß`ŸÍ Ü÷;›ÏuÒò»äó4¨8ý=„Îèã#¸ õ7Ÿ¤ç³«?£NAúc¨Ÿ¬ýÌW-Y§ki¡£m8Ÿöµ?Sç~Zó"·¥O}0þ/ë }&ÕOѼ±™øìP™¡ñµ@­J¯q´±d^­ò‡×à(ùŽ*WXg÷#õáv»ÜȃK‘£N£wF~ÃþÇOŒ½)ñ §v8žÿ\EÎ/}7Õ¾qŽ“¶k^åsž}ô…ÉrŸ}\†W§è„û×—UþFÿ|ÒßÇŠÞº”|¾W÷5ú¨èôœàX´Fó=Ú÷SóTÞÐìS…ZГÌKtÞ@~H¼7°!t sìGãa7Ej²,4ý¨ÿìõËÇ:÷ü=u^‚\M‘„¼¤ä¯Ý«“¹O[ö« žÇó={Çù &Ä~‚9:|#ñ¥“`^DúžG­ÍÿîÁ¼Ø_/‘9—šÇ²JÄÄÏý¼»Bò\š'Ò¹bz~+î÷¬‡ÔWo×±n›¿†/ߦúSûÚ¿ÇCŽÈ\!íÇäÔ‰L-[s©§ŸkŠ€#þ}8v¯Æ„ÿœóØÇ’Ãዽ“±³.4à¼Õ’'9kÞË|/ù«W!ÙçzðwãœÈ;‰ß˜×"‹ü Ÿ]Þ=õ+¾¿y‹~3CÓZu¸–àþW/Í·i¼Jó¬:Ò˰žøÄ¤“aò[j').Úúþ$ǟݹktü¢6~Ôõ8§ª†‰ ©Ý¢8˜`LøË̾=¤óÐľU»ÅÎp”û_ÿM粈¿œSwôyûû)öžSl)öû’ñüOæ«yñÊý~ “·±*dž¯$¾e•Ø=u°[GnžÅ«ö+ë"ý•´žÊÕ{öÊ.ؽ’oQÿȽº¹¢ù •ßÁ:“¡± Ö¸«Ú7/O#Wo¦ýŸ¨ñjsi_Íèºñ"×Üú£×‡æk£å×øSï“a?J½“ó|!ucÖ³lÜŸà¦ߦñ`üs|IøsH‘u¡×ýõò&˜šÎÕîÐx´Ûl+v©æg b_µÞwò–e¡÷Aó•:×Uó°võiðƒô{0c‡Gn N̾>9º%?ë“ +ô(yXÅ'zSÊûÇéwY Ž“¾ŒšOQyéÔiÈý]4ÙwÉ‹ª]©ýu®½þOçsª_¯~®›³>û&ø '0~—ùzŠ› ö·èîÇsH>LqQA{=yÖEò ø.sld¾ ;³ rNp0nç¿Ãìg`IÒ•¡é0ðü¯¥ÿSú×z¡Í˱Ûöõ…ÞÄÿT»QñÐîüìCâÂàNÌ–y^Á­¨ëd0Àqˆ}åõ­‚þÏS‘ýîø ¿[æË)NAë4Þdõ;ˆ¿%x¯þ-ènÏŸèí7”s#v—Äñƒx—Dé8ÉxÐ{¿1<ŸÄ7ƒvnƒ\'w Ž;ÿzDòÅJï!~þºøýFʼnÈu±¯œgmá©Ò<€‘ë)ô$rOéDùÜØ4ý+xtå_Ÿk}¯ú•öü¯Âà‚í ‡¸NÁÝþºk>Ûè>Œ]̳‹þõ–F†~[G£ž¬svì‘ÃÆÈ‡ÜO«ì‡Ì©SþÓø¥Ý/9þ®Ä´^Ìý<õ–<„âât¾Eà^aüÞw;ø,vœÆåÃ?ãõR ö[P»Dq´J/ΆtËC˃ H~Ïù=+ü,ùãYEò#¢ïÜnœ0û©þ¡ä · þ€Ö3ï+#wàú›!OÅNV¼Žâù‚øêúK9®O<èRòDvûIkB󭻿M܇慃x®\Ñ é¯ñl­ÛPûÄNgã·K?/{Gä–ÄÃÍÉßò¼Š—¾—Ú#p ç=¨yóÆðŸ ȼg•ÏÞwŸÂà²íì7 Ë)ø%¥ÿà<¡zq¹žà…‚yÁ¡Û‡‡ÉËp5J ¯d~–Ö;#p=©7S|¸Æû´~×¹ð ë2¬-|R/ vÒ_3XÿµY‰³ig_ZöCòæž«þ—ôïFNœëÖIè³ÚCì¡t;° šÃ¾§L‰Ÿ»é2ëv÷ؼÐòBëú5NÄ•I݉ÎËÓù*'‚u~"×ì†SX_7)rBìq£\iäK¬[È2ð´žEæhüÏif- M?^ÁvìÔé8_çZz´¯¤³v8¸ó¡ÛØ÷?_C‚» 4YÆý >OñZßâöý€¥ug^-:"^¯v¯Ô›[ÙG`§H~_í«ÀÑx~<5¨G¤¾PóMÚ·RãâÆã5ÜÇé" CË£qyôì”Rȉs ÂÄç´þCóçŠö{ÊsqhþÒã½~ùðŸ£ù÷xjü˜ý¯9îùaü‘ßÝ9—~‘ã"} ‡/öó°îÄ£þ—týï¾œî  ãŠÇ±¿$¾c8Š^?.¸R?ªþ¢æ‡ƒ5«Ù~!¾[â[ø@üGõ§ƒøsÁ-8·c¢Ÿ¿ÌþË\ /\ôäg´.Äýê<×S¿UøÅ)r†ý“úÍci åsÍ/hþ,°ï|úòz5ÞèUðLªŸT_)ÞHqÍnú='ñ"õÇí¿Î ýgë5Š Ôϱ:4]©=¢¸4«ìLô¨äqµCí_•KZ7¥~½³u#t(øKÕA?AæÝªœ dœ?ˆÜ6wE3WË;¼S×G¾ÜõâöûM…ø¥>~,Dvó¿¿¼$ÿÿôû¿~9«êÖöŸ«Ï nBǃüç=¸¿Å "w¦ø|ì]ˆD>Ú˜†ÜzSÐÇ'yê‚{?@ñœŠ£qku¦Ÿ–è‹À°2aò´Aü‰Ô »‘ËBOÒßÃ:q¿Xü•ÀâÝø­‚§t—¦ÅþZ»8ÛÕ»èeÉ:—âÀ‡¢4þ¥~ÕhòUòÚw2ØÇBâfAy.óг)ü!uÛÞÛ3¾ æÇ´]üE퓤ñt­Ïs¼÷奱ú¤¿Þ!~¿ÿboùëm^ÉæIàïƒÙbÄxÿûžõß­Ö½üó¯;hý>ÿyñ²«¨‚<¬ÖÐßÿ5šùŸ×œmîï{ö~~Ĺ6ÝŸw¬s¿D/ýÏnÓz]ý÷ç+üy€ªûÂ|±;‹¼kã¿W¨Õ6ô»Ò“‘'[Yÿóë¸ÅÿlçšäÇ}Œyí}\¸;­}ûП'µóãGÏúq%«êÕÖþÿ¢”©ëŸ7Û¤šr?¹þ‰ýŸÿ2o|Nåï×¢öýýªQϧûÉÀÁþ¾g™D^®b=¿NØ>j„ÿ?¯ˆ_¶æW`^Ñ=äIâ,'þ<+3ó¼æ$ŽŸµªß§Èîš<„MEË)þ`âßѤÎ6.ý­Åãˆ÷çÿeÍMÞh¢¥¡ßÝôE0² >=õ V´£ä7ô'# ÇEz.yú ðL½Òòÿ~ˆ¿÷¥o3ªàeè{bTÏî³;u*Æléßc0ùŒÙ™ÉƒVÎþ,#xn;ùrkõ‰V©‡\8‡¼ÙŒ œßf=œÃ[øýy*òƒõÆðü6ýVöøy¯ÛðUÓ’ÇŒñ>Žñ¢úõ±ÖÓyþ»‘ýŒ_/åüÜ~ :W›üÿ™O݇Ÿ‘ƒ1©GqúJª5Écî*u¼íÉzKêžÔcÕüNœ‡àYb,‡þjg„20'Àž+}Ì~&ïØýû5¯Ð’ÐtkÖ.GÞ4ÖCèã0ýhÜ:äáÝ>šǺ+á«©«Éu’úÝ8G¥N1 ÷u?ÕÒÐ÷e×ÍNmájpŒûîÉ}ņîæÒ]éмÇ\X§ÖUè÷N*òªû÷”üݨOr«ô¥na†Ôë¤SïC÷10¨:rgÆ8ŸÌG?±žGïÁ‡32SÇ\sý£ö]`nY“å¼~¾Ô{ô¹ëÿÉüåôHë×Ùuè§éåˆÇs.¤_Ÿ7\ Uƒ¾iîÞšðÃïàóŒ€És|ÉœþÒCê¶b .¿o3òú½@7?ì »"o|E Oä}¬$ðc½«ìGðnp‰Vî}ÐEléóÖ¹ø‡¼áÀ ݺéï“Êq#vŽËÎ,=x‹ÀÑÜÇÁšð½è)³¸kßèyÁjøcA!ÞãFeÑwÃ{@]“±k ôo8‹EÔ/ºOŠÀ¿•?²nq2, #?òü~kû[äAÖxì‡ýº?Žý˜±É¡áðmêì§ç‡^Àâ§—7üÛi‘Þ{çÛ{ˆóïß‚¾Š—>R¢wiSWÔ¼¢÷Ë=ôn¼¢à«Q7jôX„¼èÓÌ×[vÏfàÑ~ÉM’lg†ÿ?ÁGöüÌ~~ÜÞ¿„ýŒyTðßó ³n¯WŠC~Ì9!øp¬[¿êÐÓô¿5÷_`â•‘~Í×Y‘Ãöá{Èí™'C™çॎ+¸Ÿ*÷ö ‡nòÒ÷ÖZк©Î<>Ói°84ÝÙ‡/„±›Œœ·‘¯sÁÛ…Ⱦv]+Þ(êú “»*û/zÎY‚ëõ*uû‚·Y°‹çwèh>Y» 4_(?³ ;höSôfä2àíb¿ç:¹Ã?ýÁ­ª½çv>€~›“ý˜½‹ãÅ>²*ïDŠþövE‚oº`ßööÀþ›WùUc%û3(-8ý騗J³èS…új÷çàôê27É8RrAèë«~·je\šŸÍ™)àK±ï= /KÇGÔÁxÙ™dÜëˆ<­ÎJùȬ°Y”÷àZ `¾L—;àBûR×ãõIû_ñ…{d z*OUè«~[äfÔåØóý¤ÿã°~b‡Ø»j"Wk$ƒ®úQçnØÄ:õ§OŒ'ï1“°_Yš€§î{> ? |å˜ÛR!} DX(ÏÿĹÌ><½‰Üé³ ~­Å¼@Ï9Áz©)øËêàØû/÷µ~ôA°b\fE>»YÃ- ýÙè{‡óVm‹½Q}%ü\’Ñçtžu8½š³°ŸªŽÁþÏA?_;úvŽ‹S†çÐ y¿€~›*'½9ôUrr æü½@oB7 ™“lÌm 8Äp«Bï‹úö%èÑ‹¸Nú è§¾Ð·Š€·{JÖï#ú Þ{ä…è=¿eùŠÐûnÄ©æ~Bü©mF_6±ëì\“ “žÍØïl“øßHÐÁíÏÔ=üN}eàh äNÎȃžÅñ«¢m‡ßf\œôdúIW‘—Ëœ‚ç裹«áÓY™¡Ã=ô“ Ì£>ÀéUÿ¤êJèÅíÝv˜¾HŽó7úé!x;Õ/*œYôc°vµ€Þ÷RÇgu¦§3s×›;ùã!ÏYCêãEEæ¤.ÇîYóÍ|Êqâ7:qߣÎãyç?]úzª§œœ]X·8Ò·}Y¨›‹y’cë\¿ÞU`å9Žs?}+T¾¸½‹cwØ9ÑË7ÐÇ{f{ì´ª³|ý`f§Ï«“5 ëöˆy\Fí¾¼? ŽÉ¬ò8Ìý«¡þmPH´$4_x{­½ÏÞãØÈŸûÔã2©psQ/”û"WÝCáçeÂøFì:aô¸ú±_1/‚ÿç´çþ~~ ßï¡O¹ë1—Výq«}f½xÛ±—Å.S9¨=zü.r¹ÞJ‰g‰¢þù œøS}^ÃÇÒQWTm ràÙa>§§–ùDð×ýÒ—٪r\†xøÁQ[C—³S Ïâ^ƾz”Š}ê¾Hü°E‹CÓµwÿ&û—© r(C1ú”L{Š’õ6ëëÍ_›« û vVPŽE:3ô¾›wrü£çðM„ÖØ;âZÙ'-Íç—¾ªN½Œ¬—ØVõÿUÿO³^_úÇÕ¢?^ Noî'RkðËâï»õ“±'!ïç7`ŒƒŽo#ÿ¿H;û˜ªî4ŸQª"¢»4nã‰;iED뺭g^¶³NK­(ˆ‚ÛÓnÓÛ8FT)p¦kºÛtÓ¢”R:ŽÛ§cWQ8¼ :­Ò8i:êQE3n×N§i\òû<Ïɽû_-ÿÜÀåÞóö¼|Ÿïóæo»ü¹8…ëLú’çšùögq&r’;g¯ô~Ù™}2?|ñQò9«îupØ4æ(ÚÙ·°Óóé§2¿Pñ†Æ{j¿¬“çàYãç¶ßG?ì“ÒµÜ<>•øq=ýOÞŒ¸þSùاIìôß,'Küc5ƒ#O1_ÈÊ`PP {`®e`×% «EžRÖ!×îP/¾µ“ó<â¿}9žÔ»¶<.ž¦÷¢¯b×½þi¿Œ½ïna!ï/:Þ ^8+VÖ8ô´p˜óÚÌ÷dsÿ…wr'Vã¯/ÍB~e®¤ú'}þÊß]~Vâ/`ŽD¸½{(ñsØõÏ)½ïYðôêømô7]öâîwÛdBÆ‘o5ÿß›žÈÞPÁ7¶÷½¸¸+x3‡¹O—aÿGfñ~iV¯h_‘¹9Âgiíøq±;A¾ÌÍ쌯—ŒéóA:^A>Ö”a‚wÑûôÙE¼g]2váúYìwÏ„†X¹óZ™“ þ:¬eŸ¼â/çt6öùØQìùÏ~$}Ê}ì=Z”Û«Ÿ~}ˆAãƒq<Œ{ œë¸‚8TpÓÍÄ ¹»Òý8¿÷Ÿ‹=UžÉ¿r–çÞ´ù+ÝÝÈÈÅÿOü”ÿßù<~Vp²Ï|O;ýùôyº»y.+¿¢O¡…y6Ö slÕžx‹d¯×’—Ñï}Äaâg½éì_ÓøÉÞA?£ê70ëi=úËXýŽìΤð+‰½œWsmTþUNì¶s\—à?oøìç¤^¾Wì¡·þ}ïá>ìΉüÚo#ÿÎh«Á?ވ̟IN„jÎf¾‚à}kôqqê-Ù· Þp¯®ä¼†¥ù*ó¦‚)ÕØ­"æÁ¾º½^ >¸‘ë_5“× ÌMô·çÙY…¾þPé”즟nà,ò!<‚Ÿt0·ÙyO€ÏçËüì«Ìe±ÝjŒÕ+傆dî»àKo×6ü¸ð ŠO¬i¥Âs>„ÿ¹¶’ç^Àtwó üe|^ãˆÕ_½{^úñ;bǽînðñ æ¯[7.6Ä^§ÆÛNs‰ì;Þ­¥ »sàA>§q—ðÓÁ¥÷Á‹‹dŽ äÕŸÙÓ×ñ\…g³ö?Š_ËœKµGŠk•'°Oå¹¥§À×ÌÙK¿ëö5Èÿ\™7 8Û®äúcÿ«á F&2"¯ûvã&~yõ!pŸðxc¸ŸyY‚îög,þ7ù[¿|÷ØëW{­ù/ÍÛ:eÌO³k7ð¯3Øžü%òµ¥ŸùNÊ‹4Òççφ7®þˆ}!so“K™'ê½užûÖùÏUò`š¯ÑøÌ»r»!ù*õ›Aʧ~ìçõÿíG~!z-vÿ1x?áÕƒœeÌiÛ²?Wñr³†¾/gý‹Üá?ÜÚ¹ÊÛK\«¼—ò[ÎÕüÅÂq<çýì±µn²ÇØ©e^º½ˆ½Ï®ûNÙˆœ .V{ v&ì©BÏ/-gΨæ™wì/¼]Ës¿b6Çá k ûÔíÒOÐÇìq\þ‹Ø/Éûùi·èÛ;]‚L}€¹ŸÁÓ‹ŸðÒg÷ ŸñÛk^ã9ïÜÆõö²Ë/JãylÿàP¬^†#³ß"espÕOt±/RyG·ë\ã·’ÿù™ÌÓ÷óÅŽáP޳o<0L?µUÏç¥Ox]܇}™›I]ÃøÈ¹ð~š—‹wØ&¸]ímÄïW?Nì¦/8ž…¸ž~­aþš?aò³¦ð½89[ûç¿~ÏaßaŽ7·=“øÝ9u?z®üÑ.ú–­…—ß•+õ#šôd\ ¸Ðºô ~pârQú9Ï#Ÿ=E^K>xQøå…ŽDZåì…Ö¸XãÅÍÁdîkV{üùvÐ_ôË<¾y)ŠÇ¹ÿ¥ôgFyõÌó;éŸFØ—©uz_íºM|ïæq)­y.opx[xTÅ©Š_­©±‹'Þ…ÜÌ9Ž®9,s8Èßû¥k8ÏK7áÒ˜›çV|ÞÚ¿‰øè©eØÝ ìƒQÞTí]0¹ô½o#ÿÎÅ;ð‰_‚ãÊûãx³(;ùUîcÂRì»àîˆgÝ ªyváü“Ùä ÄÎEy%Á1îÀrŽ«¼–<ïp'ó¢¼jåóØ á%ÜòNäBq»òeo4ÅþÝËnÀÞIîž,Á//ªñ´›Â\EçóÂö’[û9ÿªÈCÎŒ‡W-ƒï¼¦õþÈæúX=TþTó³jo=Ÿ½,ÁøDæSŒdÀo°ï”9sÙÏÕÇÊoÄ ¯ñÉssñWDþ@ð†s­’óËg/ÓMv°î3ž£äß5ª|¥ò“öÜçÀ1'ªà;¤^Â}ú öy½áª'ðÓ™™ÜçFö¯Eñ¢|oøTùaÉ«¸OÖ07ámæ+:ýËÁÿ‡iÝwé,úПñËo#ÿZob-™Íܰ{˜çè¶”`W&}*󶨿 ‡ï€C6Ï®ó7`w%ŽÐçæ̯V>È+oäÕOÇÏ‹½ w$ oóúÀ¡Âk¨iQ”G‘¼¹úÕ;Í¿†Õ›¨‡“¼zÄ|)ÿüãìÛÒxYëì溆ɯÆÅ+ÖÂ>ìºø-gÍLÃ;(.ÐÏ)^ !o36b§*ßà:„wŒòh‚ÏÔ9 ^F/®fp«Ùd5SW°ï#žÏ5™O|ñðÿþ¯¹~Á§x÷&â·ô‰_`>–5¿ç'uˆz>Qý’à^åç•×ø4´°ŸSùd­P^Ry¿ÿ&ú=ÚŠ^2¨gž˜[Ñß«/A.s´>Iãkåc4¥öI¯KŸ‡æ­„^ì¸Ä½vmŽ‘ã¨^Cx-Õgå)Âþ:ìéųìýFåÚªeNÐô(û¬$î ½mÈW¡ÌÛÌžÍõ7åàæï­ŽÕ·9ÞApS8 ó :™ì?ðç´ã‡¯ápìGÎ2æ@ _©õYêG5žÔ:­;RþXíˆÆeZ'¶Ëœg‰œ”Uàò-ð“éõ±rê¯Oâþ&§Æéu°ž¹¶Ö@%÷s û,´Ž$ÊcfpÝÊo,Iù zoì=Uv8V^îúGž‡>?›¢ºÉsjœc%×5þ öSx6å#Ü«ì‘Ô84\ÍEåÙôÿüù³¹þŠNì©àŸwïê]gNʃ?q#¸º·JöÚ^Æßu;˜û§~Hë:ç)nÑøÒ:^%ubÔ?Ø-Gá+ž:„Ÿ¿§}*ú!|ÃÚaöT4¥#R¯æç¼ˆÜ…›±ÏÂkø¥ì¥ó“Åݯ„}sZè.a^ªÓTëÇê“ñ2r*xQyJÕµ“þÖì—ÄqÁÛ‡ùœÔ9X~­Ô·bÛÀRè®bþwz*ùµy—ñÿ’WÓüºâY§âsÃ×h}B0~å{Öœ-?"þ{ú3üF²ÌÑ/íǯJ^ÆO>È÷·³ÿ×›{+ß½ÝàÜ¡Œ¸|„ÿd!ÏoÒŠŸÜ„§^iˆ{^-ÙØmÁÿZÿc=Í_ʼnQ¾¨œ¹Sö溻SÁ ÂWûµç‘k©+ G3x~’ïâZÉ›h¾@ù »mÿß~?zÔÍ>Q»<? y]Õ­·Žx„{kc_µ¾ÃêÊü Oï¬úŠç\ý(÷}Ûð„ä9ÕÞªñ«^Çåm—¹Þm/`G4¿wâqøCÁwVò î³Ô_Ú+‡9Žð»*oζç+oЧÜü$ô[ë.$Ϭ<„½þ5ä®6=®NÍJJå>6çþ÷¼ k?'}äŸ5®vöç:… §È<´9ø¤W™‡Õôð7Â[Y«Ù‹¡|›æ‡5¯î÷_Ä7HÜæg³÷kûnü•Ô½„mI}G ÿ§üêå=‡bõ`,~ánäßö_7ùF­ÿÃyì.,ÃÞ´>_o#õÏÊ'ØÉK¹/õéø-©§ ûßç|žEq¡à!wô}ž[×müÌâvðNsÔ5žVž ªéìFÿižÅY|=.ÝMºð Á‚ìËþב§›ÈÁœ\öî\¾·*¯å^™Åý-½Ï ^ Z±{o%#¿Âh½¸ÝvÎà)÷ÍÃøGo šÁ/Ú¿ "mÙøÉGkœªü£ÕrŽã”ß×+Ε Î[ê«´®6˜ÊÜf¯ú$ïkþôÂfÙ/ÿom}ÿVþ«X=Ѻ$o†Ìi=ÕÍ}•úÅ;šÏð¦°ÇÍzDö1‹ž¸%ìgòÓÇ!¯û6Ä/Èk¿ǯJýŒ×˜G}Û…³ä·$®vÛ‡c§ùLÅQaJï]íÁ°a/‘Uø[Ž+q¯ò/aYò¦84©”û}c3÷»½šçÔüÖó:ƒÜ©s ÖNl®—g^æs«f2'pa&÷Sòmÿúk˜Ëáøy{á]®/—|>û-ôûÜ–WˆßGÿˆoy»¢õ·Wöð|v=Ïñ¤î×jŸ€Ý”øCëú¬mÔ}\¸OSó:¸=`_Ÿ¾îñ> N³û&¯èìê4¯Ú÷¦öÝi·ð‘ÂëH=OØ‘—çVåËÅ_+¾ÄžàpaŠÔÓQ¯áty FØÏ!y¯°á<~]xLÍ;kýeÄw½F|#y7Åeaþ!©;•üÉø^p‰äó´OÎ-þç!üº]ô[¾OꜤ¡¸üVTW$}‘?<ð5~_úüwFJîFþ'{=·y•zÅVóǃƿ!n¬Ã^¨ª•?/%Ñ {âîeÏ·ÖË(ÎÒøZq±Sò¸CøtåOÔŸk}¦]WŽ}–¾–è÷œC<‡Þ ܯ9 qù7ûMÜÏë›±ëR/ÕÃ?¼—8cásÈÙŽNúa{™#°ÂôyzO–!÷]?…oX<®Ã¼ï'v™×EÏuŠÜu›ï®ãýýM'Ìß/ïi6ÇË;`ö™Øo1oÖß–ð¶èaz? ý–¾Ñ±çnü‰úÍ[+¯f¯ž Ϊc_§æ¡½Ü3ØÉói”öS†[ÁoÂ89ÍØ£JöÐz•ŸÔÇ>'塼.ö0k„ö3(? õãÎÐü…ô׸WØW$¤ò¼Ù“† ?ç&‰ÝªÏAç6à§z+°Ëgú%ì¡ ç÷áÇ%/>§{w#ÿN8 y¹¸#u³ö¾dx+éÿ‹xzé×ò3Àõ­mFž%Þ×z‡ˆÏ|®8©c>v”?•þ°ÈΉÖxPóÇÿhÜh·¼¨q†=Uöyа‹jÀWRWæ¤ÃJÞDû›´Î;ðáÙ&^2rêw5òëx mæïiÿv‚ã|¿‹ó\tù,ï1¿—Ý×=XÒÉqŸ5Ÿs*Ì÷xy_˜÷ÃÚßœBžGÿ[ô…çÚ˾¸±@¿±î3ìs×+p¿¦³÷vaqÓº2x1s…‡×º Åß/zJáMö³¿0¼‰\Ýäùi.ü‡Ú ¯ökþ¯¸ÿ–6›xEêå½ÊÎúØïÑúT+ñâ"é#p&áG¤îËIü”ãìêÏHžêYÔgxó»Ü—œ¯ÐWé'°3xü1xÔË­¯Ýü»÷26ª¯l» 8á ‘_Å›Q?CÁÌÆ¸û-ùVFb\Ý£òõÚ‡keÞB_²rቅ÷qcŸ³Ž-.æû¤þRù´ˆŸUÜ®u„7f¡ÿ• ص'¾wâ'„‡õæŽÃj]½ö7_ø°ÕoâF#Ï^ªÍï©}™ãMüÚüÝßùFή[Èwjf‹yÝ÷¿'Íû=}èÉȰyµ¦¿ÚnÞï™Ý޼þ;ú”·ÈÈ¿wc‡ù»µý£ocøÛ|oP{Ò¼o]=d^Ü/zÍû5ß9mŽs`©ù\på}©Ë/GN…7T^Ìš²”¸Eò0Zwhw?WíåËÑ<æd+ŽU;¯ý3Ž‘º+wv{úRäæò3²Ÿ”ø[û‘ô¹)?¡}ÕšïÖ:“¨ÏGðÆ~bÏØŽÏѯ{Øz?õ÷ÒOèä¥Á{gݺ«>›ÔÞF<±Æëon¢N}þð›ôGqœô‡j½ž5Oö‘H?¡òD¾:==Ù÷ymåǶ>ÏïÊg ?¼™C}ÊÈUø_éÇ‹[Áÿ=ÝØo­ŸÞÙ N¸¸\ò©Ô«ªý“»#Èù³F~Ý– ä;%ñ"WFά‚ÿ@ÎÛûÇÚM=ÈA›‘ï jƒù|Ðó_mr}ÈAŸëú«yµê.!å±¢ºÛy)ðøõìŒêãÖÍäwá÷¼Üfî‹ô­hý”òt‘½™”Š=Ì/ã>Ôlà÷NÙõÈ\üèðÅäbº‘s»öYämòï·¤uØçáµæÿܲ_y 2çšW{ôó~]*xfàCä±àۧ²Íçì†&>¿æß7±Üè™»¸¿°&ÉàwÚwÌçü)õæû‚ •F/œÓ™æ8îT‰/®ÿ}êù©ù¼?íS¾¿!8cÁÜÍï[„\^|œ-8ÕÞº›øª¸Ÿx^ü†âp+m/ö[ú•í¥àÇÄ!霖pú1ìÉ¥=ðFÒ—ãL[—Gu9‡jžÐ­‘½AÒŸ¤sDüYœ‡ô¡…ãÁì3³\פàªlöȆ© ðËy5w%ÿVÑüÊ4ö™kݹ¿NöÊßÕ/Fø¦( û|##®.Wq[°¤˜÷wfq}«›‰#´_Zæå¸é¹ÆniݸʵòJïZÙ)à©§Ô¼ŸÚ+¿÷uÜß=f^;€ÓŸN·×怷3F±ço­ï$ÿùÊk5òg_Y‰œþ}¨ëBþ ΀_ w`ç»Røþ2ÿgOy\¿èrZ‡<»“{‰â ËðÓþŒžd]G~sþÅø;5×¼† FÎÝ¢Í÷ïç¿þþ§¦Éà¢àéÍœï@¿¯=kŽã>üW£GÊï:Þ}ø_ñ÷ZWã·<ÎûR? ^„x'‡û*õ@öuöØk ñ+WØëäô>Dî¼—‰¾ ?™íäWV'á¯%_ÍŸ¹+Ú÷ªòͯ{挞þî~âÎuIØÇy³ÁWnò“‡¾QŒ±÷Ÿ8¤/Pð¢ö©V¿:n|2ÿeί=_å û.q¬Ú­3©û>Hëå­µ¯!ÿ2OAq–×ò¡8¹–úõÿO½†p–ðœQH]ùQÑ7ìqõ%#¡ß‹ÜeÇ^.|™8õZö¶c=rºó?Á÷ó~b>geEn…ç –ì2rè×»»±ÿ—÷ GI½èÕÔF/œ¶ãæóþÀœŸƒùççÕÁ~,àyßà§âsð}=ú¤ ÿ½ózï§Äù?æøñ=uøýê®§îûæÕ+žbô)ê³½ þ”ù`Þûוÿ¶œ6~$Øòû‘Ëc|C/»>¦òOàÑIKÁW/Ý0qºôÀ{±òž*‘¼yLÕŸ ­ù’ºoÎeüUÖs<_á ½Õg°›27Lñ€Öºë~ÒýÆ7‘ígÏ›ã@\¯ýŒƒÏpžÒ—;wËM~@úG“áìå|„o “Àá2çBy¨žüÄQò¯’ïÕzå±´îFëɵ\ç)ispŠý^îôt#Þ;ÓÁ×W"çI_7–6"e qrâO=N¹þ óêíúywìçT¼—öó}MÁ!=÷s¼†GÑ£ŽÑŸôÁÞ¸ß;Kº¯.äþì^îëjô`hï{Až+M¼<üÇŽXýq¯=ƒO¹Ô«nÞ üLÁ¿âgšÎ£—A/'†—ªù9®×ú¬y|Uõ™ÿo’B‚b•RŽŠ KÙUêpJ©Ž•!! rÝðgí@Õê%ýfÃ"RF´XKÈBp¨-ZÆ*HBBHœ¢Åªµüò:ï繿dþû»ÿÜ×Mî=ç{¾ßgù<ûÒÐß)ç8sÔ]é¥<ϱ>ôQë)>—´aÿFòûæãìWj*z26{¥ÎϹ¯·&˜ÏGg±Îâ{}«ýö4þå.l‡_$/Fó@5>¤ö°¹õö¦äåšYYø­D>*>±GmDH¯~ûeë5Ñ¿ßN_Kõ‹i?{>ó\}}šÄ¿k†Lÿ‚ôé‘:÷~z‚o$^¬}ììöâ| v³Äœ@kÅ0ìšô%Ÿ˜x£â"ík¢¸²_;|îÊŸ݆Gá™ú%8>¢û4Âú]ë†^Ö¾>é.¿Ç\vèÌι¾ (†>§=ã¼»’Á=ý뀾ºßu~gyz¾Ô:o¼‘QÐiõÃà™ ëYÇÜ`ÿºÑ#Mò½ª‡±‡v:tâɼúnÄXô |7|•7š÷Ìz¾Wþ†CçÆù ôOÃ3Î>˜ ûœw+a“#¿µ^Íûl~Å[9ÿÊsDÀç<Ÿ½¿×ásï=;ö·1y®ówoÇ»I·€N« ÏÄ¡Î9Ø»ÀçMéÈ%o’àá§À= c:p·ßà¼{ϽùŽÈ çÝLŠœ+]ì¼Û#bù0:* çw«?ãïs‡ã9ðçÝ5ùgîçÁM_nHƹ9tã)? ]ǾˆýøfõHÇïifþÜ¡kWګ蕼¦·„ÉHËE¿KžºæKZ+þ޽r/÷Íø=IÜ 1ÅÁñÖÁ8ôn_—ýœÀ¾¤ÍûyôÚ¾‹ýí|þ=>Z“ɾVœ€£Šœý¶G¿ÿ¶¦{~Q*|$þ]ûŽñ+”9ëñÔÜ‹ÞNgî«úŒãK‘{1ðÃKµY•~Èz…|T•«Þ±ÐkûpýRp“ú)¿áË›ö!ó­Ä/¥yÕʯšwê:œÖ¾“b˜©3ÐcÒ7Ië¼\~§ÁSŸÁ_¥~*©kÒºuÍ›ôÉwÉ;0Ûâœ~žU#¿º9¯94ü;ÐÓÜåÝ™?Bn‡%8úÛ] }Ú¿°ãäx×ýò÷½üÞÚûçóÙ™Îu<«ëk~Íõ&M†ÎŸµßu~¿êNç{Fýçïfüßþ0ð:V]®óî®+vÞÍ¢ÓÎ÷¼Ù߅Φ/uèÁ\þMgôþÜY·Ý¼{5ÿ}è0rñáÚfG~z’ëÁã’ÿ¬y˜fòÇvUrøÅW—™ûo¾1sÞr~§uÕž¬a޾q](uÖ㉹‘kAÏQßGÏ…ÝÈ~¶Â§FØ >¾‘õÕô:Ÿ=Óïa]M?å÷k†Á'•gÁo©\ïhø3úûà¨ÚÝà É£×:?sLÚ ¼WãÜÌ×>¯Ö5ùê•$î ytÞó %×BÿîžBæ¼I}ŽæWùúoI¸yæ*þV©ƒöÙ¿WR/;-ŒúIékcûUÃôÀÁ+ôñzy×úÇð IÜØì.tp›aO ^úÂLg_­ˆûÀ/SïÏ6Ä!;·ž´ äWo þdâEžöž6èæð|÷rÎù èûÄmèó)Ïð>õôAæFè8ã 'à©{€ÏöWðÛ¹hçûæÜwùœù²ó;ôUçûfúª“ÎõÚæñû]è‰Ueè‰iè'Í—pG®?¥6€{F5#ÇÛßÞ(/ôô|s “xÛÊLüCI«×£WC—Sö·–ø€øz©‘Y™°ó鄯.=ŠÜîz ·;de¸ihšÄ'–‹ÑcñÁýY—êYÇrÖð[äHáTø{Ñ àÇuŸ¡7· —Sjà‹ÂƒoÈóáG¶½&uQÖ™ò$ß@óè}uÑÒ—È‘½IÁoúòt^]G~}žÚâ|ÿÐþÚAãÚš¦qB­_×úÍÃÒþÌÚYãÍ–ß“ø£ãWWé€_±›ý1×y‘ÛâW4/¬ž[>æ¼{n'—> ^)ösèÓÝxû°ñ2öïÂ%Èßòý¼'.Ž·÷:ï®»&#·{¶½ç{=’õîW±|Pü0~K±WÝSg žœÖ~z*[}E¾‰mÎÿÜæ½ >§ulâsÅóÜç\)×»8|b_WÍûÊ¡_«ñEäFÞ/ød×/‡|¯þ x§÷SôØåî;‘K)­ðuæSà¬ÂéØÅ‹vq^ÁÙ·àø¾¹½¥y²Ãr ›º`â Ò¯Eí^cÚ–Áñ×Q“àŸÿ†¼¡oúêÇÝÐô#ص‡²ÓÞA¯ˆ_FûZi¼Ê{¦üzéÿ }ƒ]#ˆÿiþ˜ècÍ+׺9_Ÿ\©[ôŒ À®ëZ½‹_Þ¿»Öÿx¦ësÎAü8ÆöñØ—Û8ÿ·WÛœÿšÿ‚^R'`—µNÆ^TÿKýOË Ww÷ª쉳kà‹?è0böEîlî{iþ•…AŽ~êÇ£Ž<õ$<…<îþy—o ÇCÞà¾å±ØÞãðË‘¥|Þ~3ü5ægè‘IE౎O¹ïT±ckà›ì?°¥wC÷ £xŸ²þQoÇäÿ¼mü}…áðŸ÷P û”?›|¤1ã¡ÓÈÃÐã¾Yè¼ÛYïKd&z$׋Í™£ùK4}±à+è­ú¯È·¸ïCç±"ï>ïÔL`n@ÔIüˆ¹.üª~÷BÏ ÆAGyסÇr"_G< ä¹à˪ͬkõ¿¢'¦~Œ½ 8¢á$ü<íëm¸ßg×¢ïZ±GÆ,ÃI$OÂ=¯•ëÅÿ¾ª Ÿ oFT#ç߇ÿõÒðÍ¥wÀC±'Á/kŸ†î³ÿû6œb=í›øý{®Óz84ýA~?:Vòý>ä¦Á§Ù—8—ðÉøíæb×¥nröQóí¢ðví ü‚…Mø‘æÕ£òß‚ÎòÛ¿€'¤Íy·Ëw_SDwã>Gþm)ÜgdsDª{Áé·Öü{{] v«ô'Ðø¯Y·{P¾•Æ¿4Ù×OSûjÁž¯¹l2û&ù’öȇ‘ ÿ =HüÔꊇîS+‘³1£xoº…¿/(Ä/úÈý ¿aK'ò9îKpÿa{dÿ®)þëÃ?ÇNAߢg´?†¯­øëÝ%_ǺNWà$ðXx—z{í0ô„ôÅ1Î/‘¾I຾w9÷žóÐ[k ô&ñ »%º­¸ ¼= =kuL€ž¢úŸ¹]Ø…’—¶nv\ü^¡ÛPäÐù¡à™lr(rüué<çö'ñ¿ÿ†smŒLJ„#Ÿ[Ïñ½‚_wÓÖ nˆ9E|6bç¹…ûÄOhT¬@߸E.ˆ¼]Àu}Êï/íßÜ\SæÄ[]ÿŽÕûtUy~ÚiyïK<À=ý§ðÝôì[Á³ìkíjø¨{Šøé¿ÄпM¿88.Qóörs |Ò×ʺƒ8rÚó yF+§‚ûÚ+õzJvg+òk€þßvVJ<& 9Ðr>ª å¼/~N\gm;þ+íëÞ7¼ yžî•1ø9Oh<Ù“1†¸µÔõÓ—Î{3&%ÑoàŽ•øs†=¾Ø‚?Rê¤5ÏMó¶­ž%κ­¦}ij‡MÂ#ó´´PãÙÞ¼§‰&Nä­»u_%ü0j!~š4ôqÏ›ÐoøMèÛ5¿Ã?yô$xcÝÿ”¿Ð× ×´ìâæ{ —àiïü\ì´…» 7•çy‹Ðã• Ñ âñä>½ÝÉuEÛï±ÞEÛ —é—YÇ:“ë.zYò|žBާƒNÓá÷ÃqÔÁøÝ¼=eø%øªd™CG®ùÑÎ÷\ñQ\GâÜîu¿æ~ÇqÿîóÄgF³îô·áwµ{À©¬ïà칊ÓìWZ s-´Esz@êD|s|$ë±^û˜>öñ·Ä\“ýkÛ…ùÎúÒ6§´NI8ý µŽb]~&»¢ýW¤/Н.V⸾º>‰{k^©§÷ p\Û-øjgŸZ†€cºŽr^1ç ûæÃøƒŠ‘k£î†žÅíµ¶C‡}CÿsnÕ·AO©K8×쿃Ÿ½÷I~ØrÝ:®Û±FüŒÝ蓌áœ÷±S¬3õø2u ×Ë›½Uý•ûD¼†¿gú¿€oB±íjp‹QUÌýž}zÚN½FëoèsYûú*íCуŸ ÂÞÞ™Ðÿhü/fqh··<Ñõz'êäuôk²Ÿð¹×ý¯†ŸkNp˜Fö9÷ß$ÿï=ø?$–õxÄ.øpþ33 Á7S×á?ºïèóØíÈ{Á{®£c¡÷Q¿b¿Jê?¡­Ø#Uë¹O|5xYæXEÄŤ¿Ö5™1'Á=ÛƒÁC+’Õ{ÏU–^ ý÷ã¦B‘øÿuž‰Îk”ø± ¹×ðtõ½È¹ª¯±Û²cyé©û!Ï•ZÃ}[^äw}ïˆq"|1ýsiô¸öNpEÒ»àü`ÖëªýHößïyÎ⨼—}ÿ¦«éû¼7Žâ9Êç³Ui¬#ÿY±‡ÈC5ª‹ù¼~h‡Ÿä¤ž«¦¹'ñ÷˜{Áß–CÿA~œkð ö¹¼:¾\QLœ§öÇÈé”3ìsáßøæÄàO² ¿Œü#ç2o ~‡Ž—‘‹¯Â‚g¼Ù#°g§=„^ÈMFïH}–§ò;â/ü®Ä©Bñk®ø3ñ©àPü¢‰¹Ôýn%yÞ›<ïÐ'Ñq³Xç—Ï®ã+ÑgmÙÐùˆHðDx‰óî}Y#àï¨A_ùÇâíø9r$%Züë¿„îQé®^ ®þye±ØaåðKôIžô~ø¦.þÓºµ˜ÃèÝ”£èÃÜ2äEíþAöº»õKø5ísôÙÖÝ<^íûÎ÷GNúÀùœ~+þ?é‹¥uMZ—¬u¾¾y š/ó7=™·’Ú÷sêV¥¾ù›¾úåÊç~ïÂoZZy} u/:ÿDçãÚaûÉÇ–þÐÆ™ ÈwÑ#ÚC󓌦8v“â_#éCbVo&¿³ü~õîO¡×–“à‹…‰à”ÝøoRWqî…ÿTý‰sYD]‹·mòÖú3ç—Ûù§áG-&"f%×Oþ¸vMò~èú{λq;Ïêâ:©O ÿGLB ÞÖü$ßœ!¿bôsÝ~ÖÒ‰Þ±jƒìûÉßIü”ú„³3É÷(ÝĆ®=Džœu½)øÏ¬ÁÏeŽ Fn”ÞŒ}/þ]ÿºT ß[£xÞЇÉlj¯¦Ÿ¢ý ÷•üpWÕ!òŽ'±þžGŸÃ˜þz£ÔñŒÁŽ] ßdP¤v°ò“ѱì´ó»c6ø§éÊóÎÿu«Ì=rî$Ž$õd¾y 2oKûõŸ#yrš-õ³ßô¥ó­}}W¤^QçUi_m÷™3Ä¡¥NÁ7DêwÌõÉgÐ9ˆ2çÈ3uÏ1u zâãOÈ:r…¸™Ä-´?‡]º™ëú­§ž6æΣy£ùXF ÈÛÑgÁÙ—òáIéÃ`^j€Žbª¹NØVpÉ¢Môo;WI\Qç4ÈœBÍ3·³Þ'^ç­€/ŽÌB/$ÒŠ|üšCÿ³ä¯ˆ£Wn¥aážáo±©'3b/#·ouèÚ»ýyôÄŠ·ð§Äþ:ûЪ»ÂžG¿Ôòÿ¨[Ð{/`̯„/§7Ð<7»)…ýÛž^\›G•.Z#uk“E~´€KÄÏë‰Ãþ5;—pŸ·9tí>>Í+r»¹*Aò¤%ßDâ öѹìCàùÿr®{öeü±ÅËt¾Ÿž‹ŸDúZùæD =¹§Î"IæéÜ6«:ÁÁ‘ê—´Ú®x®…þÝ©ãþÓ~wfO%ö®ô9Ö¼N»n<ò:;†|žŒóÈ ñÃê\3-ƒÏÒŸWçh™o˜Ì5´ïÜ@?µæQŽ~°Â&½|è_M™ŒÜÜkT=Ïþ.\þ¹=ßu•óíþ­ëÆ_7¿¹yC¾>îÒŸMûŸùø>íÓ½ÐY•øy΃Ë΢ÄÏgt<ÁçE»ðIþ‡¯ž±ëѹ.~óò®ÍcÚ„OZe¿°+.…Àé_¹¿Îšÿ‘¸ñ9âa’ßm—•Çç?Çïï·~œGžƒåÝ€Ÿ8çRëÀ}1›¾„.7J<%?—ÔUzGc{ºîØßÌuÎÅn- –ò8ðÂýÐ{©úøÈž«üfôÍ¡lôk'uŸæá"ðfy®CÿvÐBþ^þ çóÔ½ÐÕ¼¡s™'åëó!udÊÚ'È]M_ íƒ ý‹¿é˪]¶Þù]gëBOBÒßPæÛÚÖsÄåtn±±ô룿¯ö“Ôø…1òFüBRï¨ý‰´/‰öï¶§ßF]†~ã–"gî¼EäËMÐ_QÇaÙWø!îäøEü8Z¿ØoÏ8zCóð´/¹/oRï/úMçÞ™ GÁ!G¡—® É;"þàŠÿ>x{øÝè)­kÐ9E’âN›œ_[+u“øëí…›àƒ€X‰W¿ ý4dÝ /p¿¤1ÈíÄO‰{Ï$OµþǾ6¦®#áãV'ŸÁ³òyuÙ™ðÁÙwùÝ‚;°[.\…ýVð½ã·c6<„žh;€œífß?B¾»•x„'÷1Î'wëZ uÝʺ§@ïÞ;JœuG:‰‡ŒYŒ=3÷*ù%ååî7¬©È3é× ùþÞ¸•ä…Ü-}„§Ú—ÞW?"ýYíè0‡þuN€{hΞk¡wͲ ìý“´”Öh;­sÔ¾\Z'j„= =­¤îýìUò<ŤúHûµúæ ¯ÉÚ/|‡]ô8ô y ª?Õ?¡yZ®~«•8½»òÇÄoü6‚c¥.Mçi½ø8±z1ûZûDâ²Ç¡ÛéþÄ‹òjé{%ù¸î9¥äÊÜ kõ/Q¿‡îó!ß~H=rÀNÞW}¿Ã(ôÓ¤ãÎgwôž_âjž*öÓòôŸÆ³}3ö®·ó®ñÏÜ'Èʺ>˜^Á¾–Ý^ÿ¦mý;âà3àÌÚ»‘'™ ü=ö5ä}ù_‘Ó]«Øßnì.«àwbw|Îëç÷ëþÎþ%–bÏ»:ñ?¹ÊV`Ÿg<ž‡å@×R u”:ßOç„øòÞælB/\z¼©uþ}kˆ +þ͵пÝ7Órî#s–|óqF0ÇMç˜J}Žö#Õ¹žÔòæ´Àèâêül§eÇÇÒÇâè äßJ½æOª_Ç®AycR£šÿy£Ù±DüäAxGs. ‘svÐ|ì³fp±»|üï三Ôqk?×ÑÛûÖug:ñJ‰·yzfHÒ ð_Ïì‡è/±Vµ#o$ÿ\ë¶-¿4èºb?ëZ ýZMàé‚<©i¿ßQßçÌýÜ?»ÌáûÌrúÛó6ùAÔÜuz¶âÇÔ 4%¯éØ#È—Æ×$îV6Ø_êyžs,žë´ÌEÇÏÅ.ÝÍy^ ÁÿËsK?‡¡}µEûµ«?R宽ú}pR`rLú³zÊN€32¼6ü±øï]aÈgÉWÖy×ÚÇÁމ’øíc䱕–Ã’ïfÏÏ(ÈÇî„RæÔ/·xˆëÝor.•wC¯É«$O¹oP>¡Ùù(ï#ýðÿâ÷뺠ûi—‰çŠ}¨y Vç8~7½zÐø«Êíò|öIû0IþªÆó|ö‘g¸Îèb¯.Ê%n@©ç±ƒž¤ÿ±âÕÂ&üyoaKÿC#ËB^g¼éø=Œ•yÔ×Ìÿ9xgØo‰L½üœò?Œ¦@ø¿,<þÉ?+äwbyòÖ ü¸å`68PòÊÜÓ×9tí¹pïÛÊé³¹t¬EüÈ¢·*‹œ\*òçg­ùÏÊy}ØXŵÜÄý/­’üXä‘q.›äÏyãžvž_óRu?͸“àˆŽ3œÇ‘~=Õÿ£sqµ.W㯮5ïC“Â*®‰þWL$þ%ýW¼Ñ³¸ŸÌÝÖ¹v®íáÌï‘9HfÕ2â¹Ò7Fûñúêd¾œ™¹ }‘Ž]ta&û¶hò ÷uø!ðØcCÓüh†-vöɽýè÷Î[ÁÓÓ>Fîag™)?Bù)ÿLàïÑ ¿´%â× :©žÄg¿³}x/ÍÄÿ,uvßóíÄÛ¼ô-á#ô´ÌµÓytZ§}r¼y™ðI/ùkÞj?îçÙ ]J¾¾wõ–î5kñSú=nÙÿ%¸þÌ6ò³Çž]ð¡<ÿIä~ç«RO >Ôý3½{Á9Ò'¨©ãù¦$a¯•ŽÇ!òRßÝ)·:z¹_`wE€ï§74ÒsÑ[SÉ3 þÙÖÁ>.xYê†wQÔø1ògÍ+ØísÏSO÷]§>È MuÞí¹ÑäOÌ+¥™ö!Öþ²‚{ÌÆä¿ôçÕ:t­kÓú/ÍÏÿƯ²e9Îuº^BÞÏËÀß'õ):Qëjt>‰æóëœYõKiŸ5ó\~ÿcøñì¤G‘_‚§]1àEõÈ9é—ã)mÆpæ ò°>ŽüÞ©!§OCHÿ{Úïá«Õó “iQØ}ÓGÁgÓïÃ~ š½,¸ü$ö©‘’>)Èï) ¯¥q.¸häÝo }HÈ¥Èê‰Ä±âPGu(ú’ùC¾ºÁ² ï®‘‡Ñ§àûòÛXwö³ÈóFêõ͆ر™RW9¿~‰/Àß>&»$ÖŸ8‚ÄóÜá÷ ¦UðüGñËšÖhìÚ¸“øÓD_kž™Î…4ê‹ègóþ¬ Ôßm«ƒ¾þÿl*ý2\A÷¢[‹8ßÜäXöÓÇ=Çê9äao96'×áoפgœsµËwƒ·: é/ý|Õï£uîZïëëË-¸Ç(ê…îe˜1lç5É+v õ¿Ú?Zúok‡~û‚| ÁG:Þh_Îút·ô÷´Žî€[ïC?IÞ”Qr~‹€ýÐ_ÎïÀ­‚_ìÆ{ × ÝàÌ‘A/áÔMxíMÈñçAã‘7S®°¿Ï]û¾ø«xïhà{‘?N.âç;’ý•O³§_áÿbš•ä¹Ë¯—<›-ðåÚµðQW=|\hBçâ¿Õ<)sX•Ã'Zgk·Wòû† Ð{brr}FŒÈ½\/çïìKñz‘ûÒg¡|$÷¹áøï'‡a·Jý¢Æ¥­ÔÏ…¿ÄÙ܉ Þ 9Mž¥àí£jV.Æß)ñ3ëièÝûýýB·Ä«#ÎqNþ«±¯;×°¿-Õ’±=7%PÖß[œg[ øï¼œ—ú㤺'¹žxРä½Î_Ò¾ 2Hóäì¢{©û•~ù:Çü›¾úïû¸³™åëg(zÝ[ܳöâ´2—Ãn;ˆ?Ý£¾@ÉÜí?ë]¸k|;yqá+ö! ¿Ÿ»ô¯ðù ÄCÊðKk\Õ] ½ôb'Ksrô3IôCRt%rÞ^ð”ä~ ˆ¿Ý8B}Œ±æ-èQò«]yß•¼1ÁM‘;À¹‡©{ôž{›s?Œ§©‚ï§Ì€n³Ê¨+¯í wõëè‡;.bß¶ü¾;8?`_ìØ?ôïÉÇŽ”|Twìüðq¿D~¹ïwûÚôÙ¶Eó‡¤s£j#×ix9|x)xûX¸eá­à»Qëß’ýÃî9F¼Yë_Ô~2ómü£Æ³Îœ.©#JE¿êF¿Ý0õ&öKê­ûq#çœ6ß©/µ»{$_µ”9%ÒwGóŒÒü@ ĵtžŠôÓ·ü‰WÉœCwæ£Ø12o⛾Üç®>å\ßzûWò´¯³ö—ðÌË%-ùHîÜZ¾'}u> Úï¾y‚¯Öhꪌô—8×9‚3Õ.P;Œª“¼Þ¯$Ë|ñø5Ë>a/H¼ÇÓù9çÑõt„ßÎ}AâdåGÀMóKÑ'e;ᓪàO¬Ä§®ÂR‡eü…u<"|{Šû· Î\n)>sù)ñoy©FP(ë­]w;ðrÒðþœ¼ðGIk…ÄI¯޼{+9º^ø2¸JæPx7Kžä;ÐmÀzäÑHɧï~ªYö:9øSä´ôÁõ„À'®Ã'Áq}¿ýߧθƒwÌ ¤n±äsîáy¤ŸœëL<ö}ÜEè¿h7q­…÷ ýxäMÛñK¥ïç.è~ø¯¨9H¾¦Õ°½ØØÂz%ÿCûvÙÑc‘# Ñðôß5¯Ô¯ÄGÞQø=ö7LâE·Ñǧºví_êêý„wé#g\¬GnU⯳CwòékdÛ¹àØ¨‹øó·€ïež®ÎåQÿœÎ{Ñ:[í›hÄœƒN¥O¬Î)×øÒ7}YµËv~o7Ї!6 ûZêê­ 6ð–Ì×ùxvXúBê{}ó?ÇìÄ"þ*sú–Ÿ;¿«Y?ô>Š?:ï.©'I×FWp^›9¿£¿Ä.œŒ—þþ‡øiÈC©/uÅPGäŽ|ùœÓžI¥¿ ÑC¿ZíáAþ¹^€ÿeþ‡Ò÷êÇÒG>…Ö‚Vè5òü:ŠøgþËà‰;ÏÑßGpš7`y)øQ¤ŽÊõKèJërGÂS¾„" øœ´‹x`àk]¤÷l%¸jj5u0'w—£OÌœÿ`¿:zø\_÷,¸LúÇi}®÷ÒäÉQì »$_êÞf¿%ÿÁì}} q.£ºœ}}3ú%ìkø{ÈYúT÷ÐßÁ:R„ü‰‘þ×}gàßøÐ5â;à~©‹öXÁ-ÕáÐWq/~éÿ£ó<Æ’ç/8Gí]µW­Uב!öê7}™¡<â¬7u×Ñþn/¡Wdþ—Î}òTã'Œo$Ž+ybîˆG°Gdέöñq­|Žþ·%›™»2gy¢’7äíüû?ïoðƒç6è%òvÎOⅮʭR¯]™žÇÙÏ…ØcÚ¿SúG¨ÿÙ\´„ïKÞ‹+ènèÚ³[ê©GrÜFüô}5ÝG~=üù˜ò¦Ô‡´Âçñc#'A ÷Ñ·Vò¬êJ|ø!,zÕ!q HèlúüñÁoo*[L>òÙDü‚+¯C^·^º¥”‘ú(ëu‚xqèbÉW&Ü.ø?R÷H¾œQ_~ù¡òFí{;åeødû×Ämí;ÀqÕ+ ûØ\¯&‡ûÄbGXCÀ.r<+ý}|z@ôŽ+ÿ{M×çÍš9 õøŽìÀÛ=|-ù5¾>é%½àðħðóH]ŒÆ©Üw!þRrâšú_y×LLsÖ)uí®Ès\ïøíƒúþè|eíWêª9<×¹÷•÷ò;™# ý¤u¹µWòm˜çnmÝŒ}<üü­©œKäJÎ7‚|]WDË x–öÙP½nxÖóÞD}¶+êz7g"ß_p«à|ø(÷»|¯î4t’Ÿ‰I+ž³¾‹~ `ù#¡¯ùãê…Ÿ¡ÇQ_£¤š=wôz1•|¬‘mØýwÅᇗ>»î.ü­fïQâ“%ïóu®;):-þ1ýc×ùÙ²yÚûú3þ‘AuÒš7e> > x˜z”ÒÛ¨¨Û ÞŽ{MäúAèYì#sÔȇù·b··ß@=ã™w±&âoÚV~hàõÜ—*áã3Wñ ·þ¾¸p×­Hàzßã|£68|®ñSÅÓÞi—±%¿Gýêêo÷ù%.îò^á÷µáøu&ÃW|-ôß/ÿg±æ€ÖDèVæçjÞ˜UðÖ ¸ƒ~_çUV øGãÚ'^û>˼6Õw>{Aæ)¹ŽŒBÿË\,wCx6ûà”Ø…ä¯{R?DžÄüDê =œoÛ—ÐK:ù”®‹ïñ½µßäWòÄüº—zIwæ*äÒÔ‹øAĿ‰:­ù›ðwÍ™‚¿0r ù¤™?ƒ¾%Þݸ¿Jøqü†ÕĹB‘ŸVÁ1èfT(r7ÿßùªu;îž\psþ¿òœÒgÙ}|²Ðs5viä}ðëÑ Ÿâ¥þatðÑû¨ù[fÁ0ìéç‹+V~}<ýìtñcùæëÿåzƤYøqcB¿æü@üæ5Èíè‹ìóljäÉÄß„KÇN|öuìc‰+«]`Žyº ¦®×Îî’>jÒÿ¿gß«ýòéÀ\ôyí_¡ë»È?uÏ{‡>u7ò9,\ìê"µºKÝ“« <­ö¨12œóoý¾ÄOoæ9ËöK¼b+úNúȺ»3ÀùAâ÷±£­ü·DODÞ¯Ÿƒ=º {~Ĥ7Oq#æI¹}vÏäú~9øS¥ÍLMDþ=ôßS ÿ7ô$Oѽœ¼h¿áƒ)ÈËÕ<ºôø\ò!ÍׯBó€Ä~ð-«ºàÿG[àÁKž…ïÐ÷µª:Vr‹ÓoÊ—4m%ô­s›êo—ù¬ÔWØ«ÛÑÃ2Åyÿ£Ìg7ã/ÿû·¡陵Ä₽-úÇ/×ù2Èu þ¡±K2¦€›Äoäöî ¾ü|Ù´ü/s]1C°£+Ãù¿øm}s!ÍuäI¿=Ž_[ú:[aã9·Ñ׃ƒ~€ŸÚ‡ãl%q´’ÄÃrlä^ÉðƒøGÕ¯§\v/þÊi7áŸMʇõM?xò+•zL»ãM~/uFÁHè2#:™Ú(ó[\èƒÑÐõø¬á!puô3ðÁÅ ÁÅ肎lá>2—L묒Ӄú¾yê¿Ï{0ó™ÌÚÍðuÃJìù¸-¬Ë/€¾ÅÑÄá<£{‘ÃÀ^ˆ¾?ô•éÇ!ÜÏ:Ú"ñI#ößÿ°œ;ö{Fü«ýé¤ÞÇöðåêaì{Æ&pŒÌ¡±+A‰ã裩óÚê>¢ÞÝÿFòKV%óÿnò‹§Ã_S¶ z‹º|Mó/ô¥ö´Ò£ÎqínìíÑiø§æ–R?•ÿzKú–ûôƒÒwz)öqæüA:ß@æŒkÿ ;9¼w`,öð…«Ž<ðÕß/ ~Ïr!×ý+~»ÜHi8rúv²+qþåi‡¥þ£þhÿ:Ìý3þ¥ÚIЛøû¬6úumØ•gž &ç}ò`Î_;’~p–ÿzò¦%Á7íÀGS‡`7þ#u·öÑŸÞºüǼïô0ü?Q³ÈŸ(úˆû†rÝCc¹Ô“™ó>”ïaô¼] v‹•6¹0}2ú'”þ2Þ¾DžKêдÿ§§Ð½Æö#kC¥®è y|Gÿ?×¾@ß ™[`6á‡5«Ç?ðÉP쮑uðÏù ÖW÷GöK瀮FB™oªyéîµÏ‹½);yþ/ø{ÈwX‡ôŸÕ~äîCK‰w þqM«†žŠ—mú6ô¯sOµþEçæê\Rß¼2™s¯sK}s/u¾ŸÌi÷¦E=€Ì­6BÓ°ŸµÎß^Ï›_K#­·ô”ž`Þ ô›p—~-þuúø{ý™Gb¯,óRŒÌ]ôYð!ø{eûæoCÿ¦g~J™×d6_Aþ×ÑNæÀÛùÉäµ] Á(_߆´ñ|:Ç@ìbo÷UôƒöC”þÿvs ú¦4»¸ïžSæ¿z já—ã÷ñ|篾è|ÿð ô? å¼§Ì¢ÎôÎÃäù•#ÿ%Nõ|¿¼ÀîÚLò”¡øA¥¹æ‹éœwí«f­¾‹¹GÈ3Õ¼x;ànÉx½Sõô¾.zú|Õ<‹ïg`·XÛ }É|£~¼ ßIvíi”Ä‚Ç%Χs™4¯Ç¡?æ}zO&žÖÔˆýªu+’ÇlŒÂ/ïj¥®ÈŠ|9ÒD¿,£í!pSÓè8: :•–þ*ú¡þ÷øy£ª‰‡ÙgNÿºÙøÅZÇ‚›µÏAæɇÿuãá³^“sÏË\&õ jÖž\Íü‹úÄ ‚NC÷ñaà§œ÷‘§2gÈê-\ÿmè_ç[‘€Rvc¤–wõg¬³t·#—½]!Øa¬w{>õ›2÷^óI­šÅà ô ®#óñ|v¾Ø;¾ùÍ#n„¾–²?qÕ\'¹‡çܾ̩¯4WÎÆ?{)žú²CÐÕšéÐÉÙ)Ô»J¿'û`|R·€¼…ó«È¯œÿ&þÕñœó"ü?’ªß3GÝ,õT2g#’¼{Íëq¥rŸ°CÈSé;j—¬Ë\ ÷°ð²æ%K^™Æ£´ÿµ;ït>÷SòüV?Ç:$n õivuf{"Ï‘¾ò´}ŒŸàãÐ1/o*» ¿lÖtöcòÂj:ä€_§I>É è«®ðW ugîhú ¹ &’O*õŸžÚ{9¯U±7Îâד>:Õµ…µÑäÏ»ôÐ:c³û%>¯yŽzôÞ%È…‘×#ïšNžå³Ç¨+™tœ:“ºÅðÁ”è ~jžÐðÌ‘¨A¸ÝN; ÎÈ#y_ôãòJ_gñ§ZqEƒò'5ïÑX/ñ ú‹hÿ^oùûžK÷sý0‰ËIÿd3þ!V¸Ü²ß%%õÿ¾|§Š7$ßa"~˜ÄMàJ韩øÖØök¡~>YÁc’G}+ur™ô'¶£áAíw«òJå”§ì£_˺Ùÿ;£çZ'(ó´|ví˜ä1Hž˜öïé·o2ÿEûÓ˜~;¼múï|}àu”Nun¨ÙU˜ýmè_û&ZӢ }M¥VÌø¦ñø]ôO¿\ÁÞÞv9"óNÕŽ2L'‰=ä9}Q|‚~Ó‹°/~øÇÃé{`×^¥ŠvòϤ^Ën+’~8Ìßðõy[@ÿbWù5Fi$בüwc#ò2bÿBžjÿÕKýú”õ„åCÏÒÙ®W¿¡æzk®‡/âÒ±S·ƒÛ»×@ç2ßÑ“ýúhè|ÚÚ|äpU8û¬qÆmáÄO㨠?»×ú7ü,í•Ä]u.¶ôoòø?€~?p? àWÒ ò6“3ÀóÈç•휛àõ j<Ô…|MÎÿ×®„~$Þë©ûñ 8—Æ!uŽ¢on—ô)·ê–=û­è_üŸæ¢ öKòRµ®[ía¥/ÿèêÚ½jjì,žGú©Ø—¡O©;×|i3{šŠxîmùøÕn(ÛMѪèGK¹æ9ðÒÑ¥ðѱÀSyŸaOä¿Ïïe®˜öñõæÑwîÂUüàÒGß;é0öÂÙÁKóÞg4ž„þÖÝ…ü/~œ¿ü ¿Òêaàí,ÿ}ò‡Ðoþ_Ž…¡O.Œã:þá|¯é5ÉG»\ß‘¼”|awÙw¸~ýxûñ-zCòûÝÉ_‘/Uô5}“>ˆ_MêGÔ¨û¤rßÕQˆ¼º“>ù:vaçwÄŸÿg=‡¿/¢šó=»¹{ºÍIæb÷‚gënÃnSù#xÞÚZN>Ns ç<…ui~LýXâB}€w¤.ÛÛyæÕױϾßI]°qv&ñRÁæŠÙÄ«ÂŠßø6t¯/÷¡læ¦æO$¯hh~©'³j¨¨XŒýQ™Ï¾É|Ýo{ø$äEÔ,ñ_öˆ]Ì<ì~ýN>Ç¥öOâÊ—4?HŸ×}̹ŸWË>J¾¬ËÊ$ïcM8̳[êNs]‰ÃÙ‰3Êò‰½²Iêyð·Ùw¬#ŸzÕŸ¡Ï“N^²wèw¼¤}Íò4pŽÌ2Z§;uîÖÿqêX=gßÁï”[‹Ü;Rû$¸’é›f”¥a7gOGoè¼à®Júbÿ¹~0ŽºÃœ©øE¶"ßQò$ÍK{çYoC¦„ $OKå¬1ï+úxôUjß仨O:çÁ3åñþØ{ð×Hÿ}íìrPã>ê÷D'áß:J×ê·À+aCâ—7sßGÎMiäÿR'jMº,}"¡šR÷ìÙ5ðz¾|cíSUÌ9ËR­×ýÖ¯’äºÄ¥Ì3WÁýëjÁë"O5YýBžE__ÖοéÓô]äÅå¼Âþïdßâ‡À/ͧ¸ÞÑ}ðñ¨¡Wïíì³äÅ©ý뎮溗Π_æÎÀ>:Q»}û–Æ¿i_‰ç»†ÿ¿KüepPf)8øàÇØ×„_(ó‡à§Ö–“È©çÚ+yÑøU}ù4+æ`W‡½]š•L~›Î]ÉsIŪº=,ý„jŸU¥[ïšëØ/écçËÏšÿxAòuûqrCìTÅ¥:¯Ð×w_úÕë¼iÛÒ :7ck„¯ ËÜÙàÛœöW®ËJéá<¥¯Ž½·v Ÿ™ÍþЃô±Ò¾"îŠñà™ã¥síêúM=‰~éž ŸÎ6.½[ýÏп•=ÛÉU}¥të‹[I¼Ù Ü .9[ˆ}Õ¹„}“þXšj6>ÅuŠz‘7m·s¾‚Gµ^^ó74¾mŽü¹d½ÅuE?h<‘=k_ÅÜvÎ3sùuaD/çf±O2OÛm}&}¸Án9÷.|²~6÷é«tâçÖäËŽÞÐzT+ïøoj5úMæ9÷ËeâSbÿš¡?߯ŸÃýEnêu¼_qŸÌ§À%Öìªtaµ_Ý9/Õ_à©?¨n]ûýi~­kÔ“øA.,GÞ´ìƒ~$®h.zPòÉ·ôÌ} |Þ”Íï¾Â.¸ëü”EñyØiòRÞ^ƒï†žóÚÙƒÞz ü¼¶zÐ8•ð™݈þ–ºíSk­VÉï;Ñóêß?ó÷-Ú þ’'iÏ-ýô\µnæÛ¾ŒÒ„’AëÙ-ôH¿!í ¢óhŒÎåè;ɇðõÃÑù`¯Ö \ŸöIôTG©}в”ïåÌæ³ôy÷=ä]¨Ýíj¾z–¾Wк|3ìAqhÕ;*'ì 'чwa=ëMÊ€Þ¤«öOÔú;ûÎ-ܯc8´ùvøMô“·üô—ŒÜ¾QpÇì¦Eã8™¥ö•¯ß¤ôÕ6ÏNÀêkKÿÉ~|| âBí—f ŸÕš·Ðg Eœ›ôã5“¾‚%ÏJû)ôÛ1¢'ñ;zåóºvü %áÈëÿÚç¤}qŒ_ 'jz‘k¥½Ä-¥NË?Éz¤¯¿wtû›V ]„¥q^ÒDq©Æ¡¼%å<‡ôWþÒ~¡z^FNÓ«ÿ ýÛÍ)¯8ו|£ît.ýÔ5ÏÙ\÷ÖŽü¨ç­õ™æä(ü.[¿f¾Éœ÷ ¤3sôœ§äï©<Ñ8ž‘7 ºJ ‚n¥î̧ï‡ÙMK¡oÉ÷Æ­¬(/´¯ïs_ø|VÏöWòÎ}8JúNê4«=|ð¤s®>=T ½‹Ϻó2yZ#Š9—é{9É#t­x{Pü˪_Íi°_ÄŸb¯›8¨žTqŒâEõOøøRý5#ÚÀ7™ï€—Úöñ.ýËÌ)Iè³Ø àæÌqì·øÉ´Ÿ‘/N» ù&~w£±“瑹ë†}.µÿNpûœ5 \ õª7ûíðꘛÁùÙŸí¸_÷7½ûàÓÚXüù‡ãð_¨þNÏ€ÿ¥Ïš§ôû'~Êoûê—Ŭ«ë‰Mûm¹’3¶ÃàiŽ<áö$à‡W?¯œ»}þ%äÓêÙì“à;£y™ ™“áð—]^Ž|¨?öžaÄŸmÅV#ÿºÎÀ‚µ˜êcÅIjo+®UýâMïoò²ø\~º”ygæÐð±ø©¬Q§Ùç¶lÖs×üsS7ð|Ûã?)KØ9>µ///°t1ëP{+ªù&v¢ÑÐ%¼ƒ2d?t©~ºÄ_¸.wÝföSúÖ¨]áZÿû´“>uãøÿ˜4ô’Ì·ê×è—–Sà ‰ë{GÃoÒç^ó}ú¾xö§ä‘Zsž‚Ïçn"$øÇ(œÈ¼Ø1¿ägµ§ìO#×%?Þ¬ÝÌ~쇿óÛÉ;¼4OE/ú¢c&tÚrû?‡2Jå\Gæÿºó›ÐO"ïŒõ1ì¯âKéûé;¡#+ê‘ÁþÌÈ-ȳ³•’ϱ=6çª^·¥8rÅ{l×óŒçz2ŸFûPëgoïLè·ó*ë*x¥z _jŸf;{“6í(o4.­øØ.xŒûˆWõ¸Î3vw/Þ¤_žâXíï:·9{þ]ìOé ¦ý Ÿ¸R7q]±‡\ÃÚÀWÒ¿Fë/t¾ƒúáUÿ*nR¹ãí[â~å÷’î«Ï¼u­ßöÙ Ý ¬Cêmu.³ÆU>Ùž’‡ß?È|W÷»Ü¿ò#öEú€h̓´ƒÒ8Ÿ¦$^ NõÞ¹—8~Pú´÷þ7î»ÎI×¹ê:_NýGVúûÖ¯”\'ïÒÜö¸&üçT×Ëó÷„€C:# ê—>AjÏkßFõÿøæ1…ä ²ÿŸ™ˆŸÓ³¼\×|‘¹õZ§à^4Eü"¹Ø9ZŸ¦u;2ŸÒut,ç ~Z×´½ÈoéËg–Ó§Oú$©_[õ…5<9(q<û¤ö”ÊcÕcÊÇîªÅ¬§«r_ÇÜz‚¼X™G®yäfyø¯>—ËS>HN¸•ÂÏ’g¥}ÓTž¨Ý©q{A.דø°]û5z-yŸ/M@Þˆ>P¿‚aO`î¢øC|þ>ÉŸWú7Ǭøôå™· ;Câ î¨ ¬+íVæXK[Û.„“r‘“ïÕ¼o\:üâ×vMuïÿûÕ¯?¿‡/£bç)ýPôüµ/¨«÷*|h]§¾Ã>Š©ý[4?Ió5gk¿Y׺Ϡ‹sKðK¼Rë~Ôβz–CŸ)¹ÐUôî×0–ºúˆ!ì×¹—ð«\¬/ž'uD¶ÿ$ò'ÄÎÒ¹vtòMú^»Ž-åÜŸmÂï$~*cz5ϽzP?Tg!ç™2Žý:rö¹ààë|~¿½Êµ§U¾ëï5/Fã&ÆÚ·8¯19Зè1Í'pÝ…üšŸÁ¾Ï+eæôÐO!=Cç°¡_Dßûæ©HÞU?>àœÅŽsEì…ï“Çñ¼"÷}ó±$×O—ࠋ˹®úé£Îñ\¢çŒm_ïH*'½‡oGîGœƒ¯º#$®„ßݶòÈKÈš]öÏпü}ɹŸàGä¶þ^Ùº˜ýÒ91½ œ§ôOî—‹¬Sæ—©=«zSåŒyç-Äë*ò9_é'«8Iç(žS¹`Ölõ½„½!ý#Ì#-ìOaÍ@~0b/£´?oî+ÐYìä¨ú{ƒÛø{Ï~/ó—4ÿD?k߸ëôBÔeäÕèøGâïÚÇÆ“û¿{JçKi‡ú5Ì®åüNñVKô«}”D^ëÜwèëÃ}×¹ø¿Kz‡ûIÝ”×ïnä­â±Ï´žCýwR;LûØØ¥ùàt·-¿¨È-_\Aæu¹Oÿz ŸÙao —µ>EóôÃÚþcà>hß7á>pvWByŸE‡ˆw¯Ìâ¹fà•¼#Wgå5Í}ÿß/cýlGþÛϾ‚¿fÒ^±×'±þƱƒüê—Ó¸‡öƒS;Îw‘¾ fïä‡äC»Ž¥@'RO òÛ7?/uç^о\:‡XúqYcn„%?Uý“æù™È·C§Ð']È«¢à=ƒä‰Ìûs-˜½‹¼4"ÁÁ=‰ÐGò‡Ð‹Ø)ÚRãä¾yÌÚ·¸²ùÚ†¾Ù½!ó ­Ã)rÎø[\©¹uù×H} ¾Üçë‹)ü£v®ÞßìHdýª‡>®/IÝ€â¦~<ƒ¿Gì;×è'ÅÎ#_Dóñ}úkrç/~-_@ÉÓþkZ—åû þ¼yAà ™×åëW(ù=¾ù¦ è±Ccñ˼Âﺗâ3«!›ûJ>·h1tì¸'»Vü^õߪîQ_ž‹3ŸsÖ¡s!$És¶†Ìv×§°®ò¯_ÈÿVuç¥q<늽æ³/Ûv€·7"ÿ ½»ÛÆB7õc¡ç´§Õ¸{^‚4Îx0Ž|†•±EOj\\ý›Æä$pdÍøêô¥xÝ<ôü"y>:{À‡—z5£c9òLó?ÚÈŸ•¸_ÿ~"ŸÅ.T:ñÍù“}PÿÚGÊ7Þó è±STÏéPµ'Gôã;ò›$ÏØöò[⯾¼Kñ7i^–âUå_}.õ«x¾ƒœ=fXŠþî» îh܇üӹЕãáÿ Ÿð»ª8¿øuä{®}Lò|˜3ê^÷ ß“yŠvGøIôŽ•XŠý/q{õ'jŸ__¶è-Ïý3ô߯w9ê_qoÝÔ<‘ïÞè(Á3øé}s„įç‹_O‚>%¿ÕÒMü âÞÁyÝâ÷ðŤ¯¢;mtшºúuÔÏçÙ¶ù'óË5/Ñçß©ØÍþJœÀˆ> ßF¬äüÆü¿„ä³yâÖÁ¯bçøä­äÅùòT“¦iˆãÿ«'î¸Ncõ+È“Öì ÿ ýÛ‘aNÞ´·8ŸëKÿ]Gh^‚öyйLVÚ䑸Ô?ì€Þï­ä¼EÏÚqìû°òÿ$OíGÝG­“4§&!Ç'Ú!9Wñ{ûêEÅ~U¿’§Üçèû°¿äIM‚^5Wò¶UŽy#oA~©\®Ú];pÝÞø•žAç*v²â%Ó?öÛðäý…™ÈYíoYuHò蟤zGýÙŠ—\!O²Ÿµ‹Åï .ðõÖ|ˆÎ—8ÛI?J_ÜWpŠÊ+÷9øtkç£sOtÊüˆ[DoÁÎùΊW4¾å‹wHÝ•úK½1³jþN÷Sã2¾y¡g‘'R7«ñ+_ÞhÀÎAvŒq »ràyéHÍgugf|«¼g}õãêÇœõJÞ™ÒÚy>\¯~ é·¨òZåªÎsÒ< Íq§¡çêÆ£7¥îQãVeðŽçfÇÍ’¸8þ@»y)t¦ñ韢~F³gt½µ¿ž÷z\ìuãØ}è±ÊpÇÏkœI|.ñAðë[ ;ñ3ëúâ]çcJ½‘oN²ø=k“Ñ#â§Öþ=ÞäRø.bûT¿9.ö†æûòdž´á߆Ð~ YÏ9þË/ >9_ädA‚ƒÜSvÿ3tÿ¿_¾ù1óÆáOº3 z’>@fìIÁENŸ w]>xIð¾wÔNñCÔ#?$ïYç5iþ²ú!ÜeÁÈ­Æû “‚çÀçâ—P»Ðço½à‰~¤v ¿èüJÍV?§ö§vûo$./úLë«Õ~×ó1*—“/}ým?ñú@>qo;?Eòº}ùL’á“ë/3Žú ýK´èQsiõ7ªÿMólÔÞÒ¼í'ïΚ ½ÈcßK>ƒæéª^Ó•þ‡Ú—üÿ×Ë—·©u¿2WCñ†=´;Só§$¯Lç†iß[ãX\õÀÿ[Aû‘ âRü®ö‘Ê5¬v¢Õ÷xVíPÉ74í«àõ£4ÇBn„/4î~¸¹$ù4¾>§}WÅ4¿ãˆnÇjÇ%ý_öÎÑ9“^…}ð•ÖÕˆ¦v—Öiߣâö9yK0·\ûU·Cëô\ÌÜu±'ÎIJnño ù]É+:Iùá{é7ë t¿/??ý?œ÷ø_]Úg¢þ•=°ë;Më¡U_jÜ-ô_Ï7œ#t佉<¸‡öi]bØ7ºùzDô°ya7ü1²&÷‘zE­W{Ò¼|ŒxŠä'µ@ë‹O@ï£ù7¹!|*uÀŠó¨öˆÆ#Õ.r¾{’uIÀÚQ[ê’°›DÞjÞÖÝv»é챨xˆúCÚ§¨u ïQy«úPq15ªõÚh þ-íuêKÓ=¾ŒÖQ…ý'’oQyêÄ-E/ÅÖǬ¸û^ò°:ŸTý­U½ãÖžD?Ò啸¹Š÷!u¸:Å[WpyäºÃ9Ñ‚_¢ùRã«õêg¨¤ñ¸[­{û×Ë•Yê?FÁwb·†úMpª>À•ú­w¶Î>Õ7 ¸¦VåDèUpÒ5¡y%V+ìqÁ[×:H#¦$ô(ù5#ÖŸHΫ×z)ícý­¿:W?ÝÚ^¾“¼SØG(ôbßñΛ‘ôªýo*—Ûj{'ç)òMçೲΠIø9w å¢à ¨> õ¹ÎÅÕ¾ÝÙ•±kÄÎ ëŠOÝývªÁsH_÷]ý ­óÐú2oΞ_âJšçÖ9î¦ÁQv¾}â&ô¦uš—–ø”âj=œÆÿ옜—ôùÙ›cÇH]ºú±*C¼Á?qÄÎ×9ïÚbnº6áï¤í·qý ü¾Ô|=µÕnÔø¿y~|.xíÒºõ[5>jTœQ#“Ä;["ߥ¾ÂËù÷—y—JWZw¨}HἩó éRÎÍÜZ[â ÒÇ*sÔGFãa_Ù$ìòa/õ’V³ØR÷él‡?ªuÕÆp΂cªñaÍëºñKá÷ÚïÁÇ2¯Jí8­ß 稊ü×:ˆ0'q6Í£˜ÉoA¯ñŸ°¿ª$ϧ~µÆ¥ýµ¥?¯¼Ô›RŸlÕ>½+ýëvRÍQt.}wšwô;~­/DëáÃøýÀèK©ï óYÊc·ö[ßgÎNžgÑròW¹š>—g{ÿ¿“®ÿ»—Ú š¿Sý©óεÞDë¹užÎûúEo)^¯•ã<ß«Ú;^òáš ço ½‡s0ENk¾Vý/C[wlGŸ‹œW< ʼnÐóÒ|‚öåéï*]h|È™½;tóxÎKê í™Ë¡+­Kû)œ“,}ËîÖ-ðGžw w©×Óü³î!ömÝxèEòÚŸîuø<Ê×: ­OôNíFžW{oq¤œëèµÏ@û¥†ug¿¥o4Ä–ùŠzŽ~¶òЩؿšWþð¶oá|ªþ>åÖƒ3‚û¤ ð­ «|2¿zÞ·Îlu¸ÑÿýþÝ—›¹y—àyã ž'ÏKAžÁýèõBÏ@.v^jû‚ý±û—‚¿¯\>†‡|jõ Uox•"š§ô#ýŸFçÍèÏ‘§ c™3©ý^ꟅuVb¸UJ"÷r¿$q?ä¯Ö+‡q¡6ŸDÇ;E?À‘8¸æ]5j–«Nßžä畟Ã<¨Ô„qN©s¶sçyÏ@ñõt®¼Ä;Ì©ÏÐúïž ú“¼Ìå黎}ž:ë㨼 ;îð$áãÉÁûM«ûÀ¬2#˜ól ]œ£ßé°ýÿ>ÿÓ¯t{ó΀fö‰•×'ƒsÍÕ¼Gpþ›W¯æ¼>Á«3°To¡ã@¿šgG èaSíàÕYj@ð½á ƒ| óÙê /nVžÑ+xßþpHúqOßìüß)Õ5 ¯£7ƒu¤¯«b}e\WÆ•qe\WÆ•qe\WÆ•qe\WÆ•qýõË}±‚Ä[FõkÄ_*~Ä_ŒÑ+‚Wçã)}‚¸`â´¾ÁëØ—ûÏ|6x5?Üÿ\§¹÷f÷±û&ñA§û®‚ûv|Þ þ~w+Þ/ÎL(%9ˆiÙƒ8’1¬ÐSÁ÷z?ćìÏzÈï?ćŠ7ŒÉˆýû_^éZ¥‚ó½¯CpžîÙá#‚÷W*ñckŠ;5ø{¶¬AüÞŒP]Äá–‡£ßmy¨÷Çýyé9ð.øäŸQgmî,Gü|×VpÚK_ÜVæùùkLþŸ¸—<Ò]SÉĮ̈GþwY-ò4ûó§k—J=Hæ:}À)ð7Ðmf®Áý·Q_ì7?ÙX™@ü¾u4NL.êX®á¾Ý—zsÁ7¨òy…÷O“‡ÝÛ”u|þ—7”¼Å”mÔ³4ÏB¾µCoÖóstŒ5?²?ß3ÇÊ-Ø…ûÌjO^Ö+K~íùïmäKL\²ÄýÇç5–ùÏ^þ_é7ÊûGÇöÏ|26xŸ©a0n$ïÝs¿‘Ïévßÿh>x°?‹B—ö}Ô™ÉI(>Žs<9óÏZ•üzÌqêôŽÅK¾¼`?sQè¹ÍSÔQ|9º¼~’ºîqɧ'–KŽ|53K¿QíoÈ÷/~”<çË䯌®Ôc—é—Qú1‡zä5?Ï+tž ]6Hïk|9‹¼h«žBwu¹Ï™ä9So£.£)ýëvŽÉ¬§õÁ¡¥?ßé“™z&‹úz³è{ÌCË–FžôÚFø³Í >ÿÏûuÝø?Ïñü5çòZl‹Ì½ý:cû߬ú;Që)ÏX÷…âÈ×Iàì¹/‚Kì[ÅùT;Ä9ù™Ï•Ý«UŸs,+óa?+¥íLà¶;…ç¦D®ÏMžýÁ:šå…N7•B>C}¾ê7»*¸=ޱ&5’ܯB—½Ÿâ{©¿³¾¾ƒO‡ýI=RÅ­Ôë¥Ò¿e?Ý”ý47³oqy½ØJðÐ÷þÖÖ<÷Jpsý$òòv£ôm]`ÿ˜×éƒ3›ÔZê­ƒz9ý¼Ú¶õ õW*ñ|/+þw?ê$^iMGiðg½9Ô(?úM®¼]ïC/O¼ ½ÕÃŸÖ :ìäQÿñ«ôiæ*1?’?U¿{ó«±¾zôK;ßзïoXÃs ­ ß=¸—}mtÛ¢H¾³Nåó—+Àï«s@oßå£~ºN*ÏYèKê.?¦ïØ:õz€SdtóéSHj]Z0‘:“í÷ÞR¨»6û~x{év x"߬¢ß°O¢ýÓ‚‡³+ûÿøiþÕ^‹£Î¥é«ðõàzœïεÔûèI½×ªï¡ãñ{¸ŸÈm•÷Î{Åñr‚¯f&å÷é6Jg•¹Vô±]7!çâ{qß8ꌭz¹ÙÑ+FK™xì±gÜ S#ïgÞ9€ç™8:Ⱥ ýU¹3÷ÿ´(ëjòç<û è¬ÀýÈñc'©sZ £;üSãAöµÎìè-? õ™æ©2)Qt½àWäö‘ðóZp ¬‡ÐgmÁ'·–S?ïv§Bå¶úMöïã ¿—?²™ÌU¸öM”~2’æ½ø!ʺ¯úÞ*2=Û|-k=óœ8ŸJà‰:­ïÀ+;:IíÏ:G´äùÎÜ>M¯²ìÏÐúÃGþˆÞˆ¡?Êž™^mB=y slŒƒ—'Ý ý§û/÷úe±o¿Ð§¿6Ý?^IGÞ/…‘_ jÌÚÇ”èáÉÌõ³F•‹’£nñ«œïÎÙȱ‡Ýȹdf_Åþ0óàµXJŸEú(Òýtè%•¹R*çÒýsö7ÿ!Ö½á+üÀÅë8Ç/7`?=ΜBoR>è`†àï%SçníE]«Qùtü)wÛgðgß‚‹Ó9,þ{“:f·Ý6êñº>tû§‘c?mÏiGKìíÇÒàû¸JȇÄ"b¿P?îù‚ç;åì•]Å¡Ãgèóòß\ýæGX·ø=FÊfäã¡¥ÈË–™¨óL\ Ýå¦ÞÔ8†Söö(}mä¢Ô/–›×–èoz„>O§væ(Õ«Â~m±@è–z¾Š1œçhð_4.â–¹—ýÏTŒ~…Åß"w2ï+Ý_|+’ÿ”’z×_©?;ɽY¹ñ uƒ®qlú­Ð¿sâîé‘ûãL>Ž<¹°û]ô½Qqõ¯ ׎œ â NAúu•‚[ש*ò§m}øäòœ‘üotºý¿Éý¨ Ïùö‡<×È®¬ãWæ~YSŸN‰\G¸OóèGðÞ¹›Ïu÷ÃZÿ ï¿ 2ä×”¢èñßìA'9÷Êp.û·óûŸÌM¾b÷Ç8ù r|Å›è“ýyÀÏßUðJ‹ ®#öœ‘PúøâÁ­¼@õOà÷ };’ÿÓ÷—}«à/Ž”j7¹Û@W_åD>NÅ©UúȦÁ/½%ŸœXp^Œ¹Oiú‰Ü÷ÀeQ½cO_ÏC={:]°Îi‹ ÿŸ§°¯ëÀµ—•¾¦$±«Þ†ŸöJ—Ä%ŒÓí—Fã}8o‘cî›°ÿëã爼׸œWœë}év,öQï«È¡gÞýÇl ¾ï5ˆ_Éga|ÂÍåï„z¼W,oð|µ?ø‚s¬4UìÑ®ü6s`œ%à³¹?¼‹<9¤qDï`1â bÿ{ÛjÁ‡CJ¤FÊsØäa§sè×ÂਠzÌ]°‡ýžÎ¼wF^ÎksÛü–s ›Ûrƒ ‘V }2=žõ·³%¾ù,ú£ãfÖ©vðÔÆÈ»~Ì=Syo^’~Ùä‡ñ7$ë·Ø¾î_z’8Œ9¡,ü6º4ü8j-|ÝyúxPEö»ÀYÖ›'?ôÙh:üvMpö„ßýÕyЗ͆/•çÁ¾Ö8ÁÒ¾èŞؿìO W5n~‹‘4çSeÿRáðß~~Pì/}rNp·$nçTgÛÎÓ™}ÿÅݳ0ˆÓZùrà7KüÛý‘¹=FÜ£ô7Šäœë*}M¡Ÿä5¬gîãàÅ—'þ¨ñ‰¿x¥Óߌ(~l¾­c:~Øùy-—€<íF_¤¹|ý¾kÏFÇ/uæÜÄ¿UÿÈÈ Ž¯ÚÉæéÏG҉ʷÛYäÉ+i #åïšErâ—µ‡€§­r]ãéÎkCÑ]Áý°¦þƒïmÃù¾$x‚ ^û÷#èTý˜œ‚Û_÷9䢸s^ƒ;9ŸF_ù k} γùLÎgÉðæ¾ª´$’$Á¯›Ò>›ÞSxß/ùûé$øK⽡xt4÷—ø‹úG~ýoÅY˜ùùö×ðv­oæ>%ûC¯“ûƒ#üÑxα=8ÌÆèFìÇîA #ùÅW ~8^;èèrü0ñ»V}¡;Û$GÒ»3<:÷Ñùø— çÖʇÝðçPäÇ4ð°Ùà›z©ôµÚåWIŸë%ôŒÄ ¼îÅo­¾€áFò¡ýÚlü‰§ùÓO"_ =ˆŸ³83ë;-8μ(zÓ¸¨óXž÷_í‰÷;¯yœS=ØË'#¿Ä~7ÓÎC¿MdN®~ÄQcª¡—{½‹œìNÿªÓ<«úä½ÄÓí`Îçæ”£Ç‹þ¹‹û WÍO=.xŒà88±]°c¦37È™{–õÕ¤Rõ’q|5õ›ŒšŠ_AžÎùZæ\j<ñÎÛé¯ÿÐ+È|J÷ÜoÐßÀR<‡Ø jÏ› ‰²NüGÿúì€O\ägê$Ö×µ+q¢WWa?¥_Üîþ…—”&q¼£ØwÛÁÕu’Ë¢·Ä®qŽß†ÜF_·ý~úrJJ_·ø¿G¶¾;‹]Üv,Ï%qq£â]è¡{ê7½àßór@ü&?¡ŸÛB¿­ÚÎݧ™'y8ÞöfàÜh̹ú·25 ¾¯öB˜÷ÿ7Ôcâ¯xí~€>WÏŽæüHßò˜Æ=$Nf½%xóç#Ç®Çóü—£F_‹ò»Õßãhíê`G‹üÑï;=.ò>…9/ö"Á÷ìS)9’ž¼2“¡_‰ëz«RàGõ<_hÜ£jGòYcæbßtýŽõÕ)œ¹?^§¡<÷ôÈù¦·£_*‡nÄR»&”—jÇMXГ=¥ë‘|ÿn¶è<Þ¯kð/–4ôŸ=ýÔqì¸- Wɳ9ȾW¿½Ø”¹OöþÑQq»ñ9ègWÎAó×ÔüýØ`Ϋ^äâ>p=”žýK÷ O%OïœpEòqhÿ™E3gçúà<çpÃìU‘¯4·Büãj>äìú^ðŨCà ÌkÿIÞé¯^zÎnV:½œ„¾)ŽƒUð§„NÔR;Wý>·àeâ_+å¼ø±äÅpIUЇGðN‘9!â'>²‚ïåa>©×ùÍ_óK{÷Ó÷'v¸Æ'ìàä8]˜·m4Àþ‹?â|~ãp”]¤ùMÿÊìâÛå¹Êå…î«Ê»Á÷ß÷~±yžçÀÍ÷Œ#>VìmÎMâŠÞôOÀÈVFðuã‘3¢ïÕn3ÎÜË~•b¬úWΠxèqø8š_v‹ƒ§úïa|søkàõcZῈ]ê6x9~ª5~ÔšC’÷}Hü.êCL\•ÿšwñöt†ÞJ½L'óR|gô[¼/oØAèÔÙ€;?øHnöýûŽÈÉ3úÃÏã_ˆ½¦q-kg6ü—=±Ë.ÕäwÄžuÛ?|K8(î‚ÂØ’ç²Ë-»Ö=÷rò¤ô__œ ~¾Øs¡Ü‘<¦;v)y—¶ùàs‰o„ùÊXÁïÀ\ãÝÈm‰SxßF.ôO’ÛöLÁß‘8¦3â}ìÌ?¾åœÅ_Óü§Ê-¥{ëJ;ì ‰›§ûQó#ùÐ}žùƒaÞc=óuB9©þ©ä½üáíyÑnY‚ûCœTãîÖ[] ûòEÀWØú4tsÅcÞI¢ÁyJ^ÙŽ‰CŸH>Õo ž¤W œ~{ðO‚A=‘=³Ä«"~Q²9ú@âxöoYÁÕýÓCnÕ}ý%zÖžË\Ÿ0n™« ò£ÿ6Ö•ãÞw"ÏÏùímÎKìAµßÍŸ‹ÁWó˜—å­ÝÀïHÝ’Ê)os@ŒwéßVù`Y…¸O‹ÎèÁKݰO¥>Có¯nÃ%ÐçÃ[áGÉ#ýÕ˼úö2û*~½·Ž}9Æí‹fâ\$a½µ+%òÜU¾«ÞS¾r •FÖ¿Î>åÿÈHÛ(u.äeÍ~Ç¡§ÁÝ0[€K þ±ÑßaÞA)æ ûoHm-ë鑜¶Jà`zg3þò î3“¹:þšiðuÁ‘—ø }b(úWòTjGÁEsÆ2Á_¹ ¾ø–™cqÿÂà…‡ùíÝS‘§Õc¡Ï å ‹*Ì6/ÉÜ2ß-÷]ØõÁ{Ü<-¸Ÿ’Ï5ë2HóBšWµckK~;ϬÎ<Kk^É÷à7deþº;§.~Âs%y_fûW`CT¡»äì>ñ»Ì¼û‰ÃœMàœ'Õ@n?Μ?ï™iÌùÒz µ'ãÓ‘?çö²îàeZÿ$íÌãlªÿ?~­S$Ä”5GFêk„±$[+Y¢8”%-ß($!Z,%¦È±µŒl‡a¬YJÊ)[TÖQö¾÷ñy¾ßçwçO~óÏyÜ;çÞ{Îç¼××ûõ~F3÷Ô=X û%~ÙÏ< çdüSüÚ­þùëšÀËÜÉÜKågX ؇Cq» ûyŸ&WH$rº×µ·)z‘çWäPíç|æÄ„u«95±Ã‚?Dý‰ìî¬y¨]-õ_ßuªÈqšòišõ!¯•¼Låß%Mxj«ge“[©Ë)ž¦xµ•ö)ÏóÕÆ|ïÒÅø—®ãÓbõÑþìcÖýÝÝ\ŸÄkλì?æ´y?ÿõòáQ©Ü*Îãõïƒ~Ž;Ï:ˆ?Q~UÐszX?9•:IÈû\R‡u\FyÞCñ[MN Ÿ§[’Ld¿våë…×§þ Á²l<[7nú/ü ½ͧƒ„_°[GúyÛ±.R7‰Æ[ø7ÁÑC{Øâ*ë+8¾÷ û\j¾¢r`·["¼¬ÓðÂr/ZÔ ?q}.w¶üí^Oåw¨; £ü@µ³îö—õÐ-ÏS9÷¾)OÞ$ñxÈs^i˜‡¦?@ž)ñ›ò¬RI¾¦y³âòÎäz’gp”<Äj^¿;j:òSˆ¹rŠ8²ÒbõGóLͳÜ{ö‘ï&1ŸT¿ÇZg#GIûd¿ªcÈÉ¥2ØÃqÓ‡‡ô¦)»á1—Í¿8jJ¬œDãNôþƒ†¬ãºb\Ç|™{®u áå(oVí†ò£ú¾)|ÀÈéÅÙôéé Õ¯³îÏ#’xFy}~¥<\gRiîGêŠêçC¾ˆØû7Ÿy°­úÉ~„~Oã)å‹w¸ ¾‚àIî¶U’¯Ôeÿ±Üs‰÷ÛÉ\ßçÙoÆé4ŸëU¾ºðnÜ=…‡ú5ú"¸µ;ð¡V·¢Z¿p¬V\Ç…Ò’ÏSW¾{¹ òï|Âý ÿ,èu [=Àû}¨t=¬ûr°®ÞÁ¹±ÏEñR»š…\J=,¼ï9.r$qDX¿~Iâ4xD!Î$8¼W¾5óÞŠogŒoŠœXãaåÿkôŒ›ûÚïÒ”ç1„9¨Š +êuóý×ôãßæz4O<Ò‹«ÏóÊJ1öÑ^½{6ÜFÏ:3o8R´~KüªæOÞÙØã<½ŸIìÏ£y´ò=Cü4×j⫲µÑ»í§°óÂ÷V;îÛÆþÀ¿ÊœYáy‡¼)©«+?×_žŽ®rÕÌ%rÿÙBœ.<Ÿ`cüÁŒ;‘+íƒè^Rx$ð̬¯sžàù^ÝÚØù¸]ø¯R²¯­äýμûÑóÌwrÏÚÔYÎ ^‚]XÙõVä߯“Ÿxzô/øe‰Â;ˆo¤¢u±ÈÓcåÊ­ïáç;÷Çÿeåæú½æÄÿÏ×^öS|FùY!Ρ¼zÉïœSm‰#7õ’õ‘ý……¦uT·^3ì—ðB~ö+iÈYκâW_ü‚üËÖ<@pKå…E6³Ÿ@¸þ'úcJÍž+‘ëì#ämÈͺ¯Ú-¶ûúÁöã/s<©ç-¢Oÿ*к^;+urÅyÃ>ˆìàxŸ=ü}äé‰tô%¹.ÏAü¬ý.ûH(¯7Òr:ò%¼1«épì•à~ÖÏ_òýÊ3ÚÜû’> ÿ”Ïæ5ëpßóØ%’< ùÉ`¿(wRq„Ô‹¼O3§®Ì«Ø§òÿá9Iþ‰#øùµ=þÎó˜[æýP»¡qJÙóÄkµ_x+ò¯vÜÛ}ù<ÆïYýnëõÂŽî§|#ÜŒéØÕ%ÏVb¿3­ßËñºEïlx¹×ß}“¹²‡íÇ ß¾±;wyHËEȹôh¾hÿÙGæ<_à(ùZ0eèW±z¨vHë¤Ñõb~¨ÔÿÜú…¸OáåêõGrç·éyIëÃì—ìäÊÆðZN‹•3õNŽ6țۖë|$o⇤~LIfÞn»C¬gÇÖÈò„_¨8J¨÷³sð{‚·Ø‡– ¡$vZâ'ÅݯÔ~ ­Ãû-¾á¹T®Ž<_…’º¡ÖeÕ^)oOë~cö3Ôë÷*uˆV&ÎѺ•â8ÁÚÙȵð|"™‰ÄbG•b·‹,ŠÕCåßEý<ñ­à¡ÎƆî­È¿Æ/‘›çÄ®‡òÿ•¿«ñ¦òM´î¤Ž¼{yg±ŸÔ£ï¶z|ƒÿTüQã¿ ìgªý4ú<”g¦8­c@¥¯CùéZïÕ¼Á?P‰9%Ï‚uðÀË¥¯+äM܇ÿïðìrs^ï”õ¬OÇõ|î÷ sþÒ9æ xÿ¹ÓkÍyN¹Uü®küµâåѸš~¹”xXZ¯[Å~ îWàû-ýž8æ®r\Ï+É·ÿL5ò¡}Z_S¿âb²K¤è9ô»'s£znpX­7k_™âêߴΫýÁ»%ï>øŸì ê 7'ö÷•w¡Žþ^:#VŸ§ÒºN(?£×:¡óȯÄÂ+ÕuR\Pù,7y÷~KTxŠ(¿Rã^7ñ×Ûô^ìxõ×°«Md? ñ›Ê³roŸ‰‰?¸Áœ—³~¦yòÖî×7òüõÁfsþ‡Ol5¿Ÿö†yíW¯d^c®læ9ÕÜdþß2~£ùÿÝ;Ñ‹A9ÍÑwz…9_òc»/ûŽÚ_þl®Ãn–JÝgòÜeæ¸qqîÞ1ć—ýˆÇH|dÞCùØsȉð#›ÿÉÖg u(Å[”¢ñªâFÖšEȹô5)Nôu˜rø%Å3 ͈]wåjžÉcíCTlKßÒÖRÈ›ð+‚—mìqœÄýØ_Ð{éëlþ'äÑMÿ–ä_êoÞ«ûG©Çk?©ÚÐþ+_AôEù=ÎÒrøñþ$>ÜÜÎc¿åG9¿–…§öâ”ÔØu$uþúèßùˆð pžô¯jý\ûݵî¢<.§ûŸ äSÖ!ö‹ÒúZo¤~‰|HDÞkîØ‚\NÛ)ziŽÑ<~+ò|—ù¿•{ªÑ ¯à5#ÇÎ’!æu4Ï7ÿôÜ» yhÂûåNm’uÊàu¦Ñ»Èqã";ÿøÆ|Oµ1æµ·èúòæPstËŒ3ßÍc¶q }ó9áKX=šã·$ÎÔ<&ص?,xmè·µ¯BxvЧ¹Ã ó9á_ý>æù‹?qhÁ-Õ^GfePÏY½º|«_Ùã—‹Ùú?ØÄ0»%}ýšOÚ®c¿þ{%-Vîµ.£zfM˜Ìù‚[jŸX4Oûð–ä_쮟»êÖIxçÚÏê™Ê<â6컢}Vf;ÖKøÈÊC·K°ïšâ :?9ôLJ–3Zú…4ou_gn¹ÿ~>k5þ8ÏØÙ®gT†ôÃ/»>…:@ä0Ÿk.ûõ5fŸ@oŽ'øk>cOí£ ¿Öúæ>ªúÖüÿ×åØó±q›Ñ×È¿wï#‡~ù‚›‘££F®í|ÝÌk»Ass òäÂþ¯Å÷Ü}~cì1ˆoe>ÍWˆŸÖ¶Ý€^%mæ~¡?Ç'l@o= ÜóÛÍyYyŸ0zàO+Ž(‰$üÃ} ®j_$ô&ÿ:ÿn6ˆÚàF;òeé§Ñ:’âšÏi]ÂÊ7ßÄë^•²ØÕk­LœÙ?ùÊ5fÏû-#?‘‰K:{F.âÉØá‰³‰_-3rd^0þ!š˜£Ó© qÐóÌÑé³½èÚ‚ó+ÙÀzU6ÇHÏýØ{7 ¿Ó÷nôæòqôâ¥KÙÎ÷?ŸgŽÞ¥×ø|ïÑ|.ñ ~gïóÚ]ÜŠóã×Åï8õSÐéW|Có.åÏÚeç’? î¢ü8çõ3ðÍw¡¼C'+˜×NÛa’ÿ–D>7P;i_‰G¿´ÞøÖ£ä‰:gFú ÄÁÄ[âO¿PüTûa­÷ÙßÇ[‘üég>½ù·÷U5óÓ"ýfá•÷X¡ë!vZûeÃ9 oI\¨üWõS:çÊ?œè<*Áët®‰æι bWõÙ~ ÿ×±ßë x9O² þ¨üN+s†Î«Zm޹K;Y0Mâ…£Èý‚ÓÈ[{M\oŸ‰ý컃<79{ßp*ço‰\ßÖÜÈ»Õ+ù;s_Ç_#Núâ~â“…æ÷ܸâßòÜZ¯Ô€|^žÄ÷·Ÿ‹ÿ1²Aôÿ°ÿ:ñЋðºb½uæÿÿcä×»q~+þMsô«?ý ú´×̉¬­lôÝÚÔ?Ö´÷ýP*úà÷"N|Ó}â}ä·(ûçhý8RçS“o{¯L[iî{c)s=‘ÎÌïÙoE¦~n3¥çKýÛNd¿^¿n ì™ô8çÓ„gU=TûµÏUq¡ óðWéÇ çÚH_“³4¸˜àðaŸåàzŸÝŒü{뇵7×#ø¿âÔ¬X}ûUöDä3öFöyU.åK»­ðZò ­—º_Œ!¿}ô”ðKþơæz†ü OvÄÄÉIW‰ËO´ÃîMªºEôi×õöxg:òz½íèÉwæÿÞ­ä½ÿ A^&ÖFŽÊ'îÏ»Áø ÷T‘Ýæwº$þøj/ùA]ù_Œ¼ù²›äº·'/˜}Ì7ï;ùzàwRRÌ}DJ7rÍs¼y=‰þìùxªÃ³ø¥~CÑÓ—§ƒ/•œÂyïÀ_e­å¼$òò ÀDƒ×ڹدп÷+“/X‡®®áÿGñK×2À§5Ÿó§¶åº,E/g½Gæå¼üëÌõºÖäíg#ŸÏ=Å\¿÷Ý<7Á¬¯sa'¶—¨u€8èñZà\Y/Fž6Î%_ÞâV~éãÂgÿã˜~©q7#ÿNFÆË±òn-û û«¼u‰g´®óh\+Ix$2o°T1ì|—Ä“Ò/9ƾ€ÞKõøþ‡âð¯’y‹>í)üE—1ðùd>¢[¨2ßß{ô'Ü/“·ZN3äµÃZìøí'É_—ÝfÞw oCr´áuâ`ä`çÞ-¢wÈé™ÈÉà.Èç®TüÃöç‰CšFNO2ßï>’aäßYõ›ù]÷­E¢7%ßí”çl–‡8%ÿSÈMEôÅJ»ÿTj8ñVß:Ä7 Ìçü:SÀ}jôDgW]þ*ß  ÷Ó«4×5ý_£ÏöÒ2FŸÝmünp}éŠØçëÇ•¡ÎúímÈë;ŸpíÐ×Óû¸žïÏq=ñËÈCR¿DþýêÈ÷£ЗÌæè{Ï£y-ß#q¦u1:§¹oïd^òòÔDô¿Û4ÉSÚ÷šÜW®IÞ}º/ßW£)ú; zÿG‰Õ¬×,S·ˆú úeŽ¥ò2¬Ñy‰Äz¿—æü­YÔƒ—‘ù›!Ÿ/ówäÖíHü<£ÆMõýØßʹ} qšàH^ã‘ÔíÚþEœ(ù‡ö!»Vw WûIµEùå^AöUtÞ-Nž|rï§¿ŸAê¶Êãñw§ÎÙ`ý5¿w&îF]Gâò-Xï…3‰?Þ,‚|z‰ žYK0áqõµà…×v ŸõD?·ôÏü…¸sWägúxìâ²–äÅ|ôðÅÜßsù±¿çÓL\oßu;TªŽ‰_"ƒ¿fΞÌåQ^^4_%žÐ9¤*r^Ñ%Ì”ø4X1…ù"—º“Gü0 y:€ëY]œû¬^ÿ‘þ9úÙíOλÑû°<žõÓüiR~Ö%åYîo-þ+øåuâ3ɧ¼³ûY‡zÍÌý8{þƒüŠ}Ô¹v^qì'?ðNpÝe[ÁQ…—¥ýŠO…<¢†Ç¾¼ù,ëmæ€+ŽhåË¢é…×ÑC™{”»‡ù Ò¯Îuù}Ví*ÆÎ8§¡Ïo_¦^(ósµþ¥<¦‡,xœòŒ¢q(þù¡ªØ¿æ d]·ˆ]æUà€'ço×b¿$ÏsŠ×Íû@þW%.øÑ2öÕYU}IrÍûVÉõ|Õ¾ÄËŽƒ» ÉslôÏáPêdmÃÏ÷» ñ{b†<7sÝN…Ÿ°ÃûÞ\Í:>Ý,šÌ÷ÿñ7úø\Mð¤]W6Å~¯·2Í\gäÅ<Æß)3Íyޥɛk{|ßÑq\ÿ±‚à©å«­FX÷þ,â£Uœo;Ëámü2ÆÄçîkŸãW×Ve=ç"®[9®}rûi"qþ#ý¸¾-›Ìùv'ü¯õíDäZòÿñ"bGæ‚W]xEìÉ`ôjÁäK»¿Ç?ì{*Ö-sHøsÒŸO]Ø™Ÿ }—Uà‘H\$3qòMÉ¿{Ì~­Ê'ÖùÊ“USåÚNœÊïì .9« õ&áǹ‰ç°;yŸ™òËu^ƒûÂcÙøÕVÉ“ÜϬ¿Œü¸OÆa7š·Ç~Þ1 ;{±›‰7¼¼m°¿3wcow¿‚?xøŒÁ-"ÍÊ÷™8œxõb¼ÄµEˆGª\å¹ÎmDÞhm¢;|øÿžJØÃ¾ç%Ž=Ð:ñš7¿Y#'× —o76¿ïû¸ŽŠ ~ãïz¼¦xŠ?6‘oo@GâÑy%.êƒ>?”Ÿ8+¹>Ç??MXÏu”ïÀ}«Jüue„9ÏV}ÔÓ¼4tÀ©Vå~:Õ#.I!Ž Vd`gº®r:¶Æ¿mçù)°ÞƒGñ¹þ$^‚Þ̯…þ-]ŠJ/Ãç’.ù×ùYÚ—£ý:ÇUç‚é¾ðžzI_¸?§øåO5oJþýæ™ý ”4|ÿ±¢i6~³Ö•‚ö? ÿ•>Bû¦qªâGÚ«u`W®¼cÿïTæM¯Éëß¼þäÓ¬Ó•­¬çÅdäíHIäÓ)ßmwùj£ÃØá9$Ž% ZM–øTxi##?›P ¹m–>wŸ9Fê¬@~»ÿ>ó{Iâ’þ“O?õ‹¦sþñRÆîhœiq@ìë±Ã»_FÎî*ËkÁ{¬¤ó\‡äÅ~ïßÈNM—óGsŸù+r\“€þ‹ŸŠ¤Dü1äAäjqe^·ßÉ1µëõývÁSÛ¢WË&7VÜÌ}8*ü¥>ÿcï-£¤¸»߆ Á!4îwé!¸»î2¸S8ƒÁ!@áî î¼HÁ-h°;«>{׿Üû"äyÖºgC¿é53=ÝÕ¿ÚúÝß½7vyô ìÍû•œ×ô ®þ*>dö:óôT|©CX—UÏû4øÉý¿ÀïIÀ¡¡¯Š/øêø‡b§ø}Š­œÇÀeØ íŸ‘>‹0y n!¼Hí‹¶ @ÚŽâuR7p& ø$ù÷ïþ“°ý‡ÇRÏ}S›úÒîoìP^xšNTpT_ßmÃæ§.f¥ÊÀß/Å? Û|Ú wáÿ—l0ööN2×?Y§ðsªP‰Cˆ'¹Ö£gë!×EËs]C]9³j¥åsƒÃÚvMüÂ_¹ŽÈOwË9“®ƒ-ãÏü3>rõ{÷ïÿ,÷õ¾¹½‰×÷†r]ÿƮGÆç×OLØá…ûæ¥2òeçù}÷}ì¡-‰ûªeÁß䮆=?Ÿßýü@çVÔ ŽÏÄO͸ÂçTØáóÌ#™Ñ‡”߈þ0G@ù,VŽ ÄÙÂ{WùrN¼¤ŸlO"ê …s“W+þøþúÉ]¾´ö©Ù)[ öZðÅ{tN¬ÖÅtN«ó¡.x¼à÷ÊSõú($î1:§!Ϙš’zKß«ÈS¤Èyô9ß-58Ï ¸ÿí`׎LÂO¬‡'æ¼h‡}þžBàÜz⡽׹?YÎ÷Câ~ÁcŒá° nãÇÏæ¹õä3Ëoøƒï¢€ó]ÆýÊ”»õè"þýÎw¼OúýàP£¾9,×I¬fRâ—,Ûøýð¸\O×éÈ}Û:Äù/à¹YùÓ!‡¡Ï™Ç ï’Ï›GˆÃŒÖçño›Ï× ©éÊ¿ý¢$~­kWêaçÖR?;ý}X”Œ¼CâocGsáíÃÿŒxÉùÊ…Ý/þ½*;–<áV>Îå]øw ¨ßÙqŽrÞÍRÿ¬ùŽºóôcn¾a¥¨î¾Ÿ£ßóef®;U&ÎqOSâEá…êÜ[å ÿ—þM¯¥{ðzéo ì«ñIù¯ÓÙAèãVêM;Á?Ð>ìúå„ïɼ4íïóòYÅ'„·éõÝ=ÿ {ßí¡›×š—ûP—>¹~Cøûçt…×bÌÅ94\Â}’»œí&vrkbäsàHÎ/ú.üqéäW™úc‡Žg¢žåËH¼Òþö¿óhäLp ûOð Ì›ÈרÈq·§ØÝY¾ˆ|5áçøCÁƒŒ³‡ÁkŽ&‘¸)Ð+5ñÅËnÇù¿rð…â4âÿŸ÷$z’’×-;¾ǪUŽü}ì5äwN[ì|•„üÿÜœÂ=ÍçKƒ^f(º›û•?Y¥>ö7yìKÿ´è}ÒžäÅIÚ¾M|5ª.¯JålÞßz_?ò勱зÄI±C—o¹¿·KmÞÆù=BîÍg|~ß]¿á°•~‡ äèOڼؗçôMxu·¦qÜ8Rç•éÜdåíZ©*’—Nvà)é~áOè¼$ßµžŸÔod^×Õ½ÿ¬¹r~à32OSyô:ÇAç8·Vbçûvrñ)­oy{~d“ò´Náÿ¢,v õ(äÎŒËyVý¸|óIâÚý‘³AÈËãAÈIõÈùêàínrž½Ú£'—ÊFÀßü¦‰\nàÿÛ ÿ=üš¸)þ%ñÇ7Ñ¿mWÿ¸ð÷­W‹©;•"Ž2rÂþï.ÊûÝÊE<±2??œ®¤qöÌ¿ˆ»¢ïàzz%u«‹’§W$.¼Õn`#W»f ȹìGôzÀó­yœÏ¥ËÂ+태]8ÜOiŠ>]iÆï;Ø‘¯q§Çq=·3ó¹×ÅÞ¯=b¢—7º WàåûwþÊ}m“•ûxú7Î÷Å.Å÷h´ž<}{M÷ûÚéÊÇq^âïR¿”<â-×»›àV{°Ÿ7ƒÉÓþBXýKî³üŠ|6Í4ä­6x¬TŽï¬%þ*Öü×ëKœŸðG±àCüÜÛþ‚ü½Æ-øjÉÆ—ú½{eâ ô ®™\5‚ÜîŸáç ß»ïkl|Âÿ%ž“o8ßçîoø÷ë§ñõr»çež~ƒ¾ þ¯sÃâOìz’Mü,ýµ:GZq}Öú«òóÿéè{Õµÿº—CùJ:×Лg#sJU¿'•¹ šøN "?¿“ŒþŸ¨åðÒ§ïÄÌÍÜßžCЧãàîêÏñxOìYÑÉęݚ×&…wâBÞä^×1ä7fTîsŽ7ÄÅñ7p¿}Áøûú§Û–Âúe ÎQp»S ‰{ÿN¼/y‡Ñóò!ß{þ÷QòH³L>'ÎCòÞ¼{¹n™wi–ˆ‡=[³ yýåyûŠèà;9Ú ¿t Ÿ/ª+_£3õÚZ­±Ó×âpý¯Ó_¿¬E<Ó£q¤àšÏø¬døUÉ«¬'ãyÿgøÇ°< û2aøÎÂÔJ>'ÿŒuúÙ»YÈwÁ'ÈñËìÄûCîà‡&%<¹ôÄMKËñ~‘îÁ[þPæ=ä¢Î–ÿú3°9÷µvŸ3îßcÃúïƒ3êü:Ù3¢}7:×ËtŠØôÇÈŸõ±ì5†ÝÙ‡:—î‹ýGÆ•Sä;â÷}»Gà:FGn×%@Î.çÖ{&yÜ‚ôÒ™x6ÿäjí{ä¤N1äõ·8ÈëÉSwú„ö»,|]ãÞä¯ãp‹†E¸ÿR"ÿ¯žPØø;+uR3b¿œ>Ý~ vAê æÝ,ÈaÝNÈs÷2Ä q7âŸÿüü«QÈ¡.¨ý3ΉVàòƒÊºÏf’ÔÈíÜ?ЇU¥¥~<Œ¼6è8¿ð`½ü¨é|êìÒglUj‡þžjÌõv ®ÚüOpœéñ·Íº G™ /.7ç¬ýÉ €ßýøL÷“?Ï=Ê}­PÚ•{§T— îëm#®ZsÄ“¿Ñù[æÍKØO™Sd¯Í¿:ïŽU¢ÏÄ ÒcO…ÏýOv»ŒîÞÓ°<”¼[ö4yóå²eGÞeߥ‘)·ÌŸ.Ëý–ýÊ«õúìâ·w¯ÇÛ÷"ûØ|Ç0Cúõ­ÇóÀAuïáê*®žXËSG4¦*ðË)òÉÛ“È7ïíOý\âܧÄ%ÒWk†ÿ¦üLcÇ_ä ½§s__™ô‘)ž,õ?«ù·Ì-Ò}Òwªõ&ÿâ«à–Y÷ƒûŒì†¼È¾žÀwS9·µ6zž9Ÿ·€xÅ—®%~¦ôä¨Õ@ôÕ:-ý7Ð÷µQ¨…8®>†åiÈWüæµ ˆ³îÀ_ <‰ÝH9œ¼Rð~_Ðrá÷üEœ¿åKêï®;KŸ˜Þn‰ “³×\¡¾f?rÈ/ÊŽà{ê\O?ÆyoC\6«þ"v&òäx5øœ* ωœáþ-—¹ŸÄ=æ‘/¤O“}ˆÞ<Gs£Ïٮ͑ë…z.žì[üǃ%°ÿ2ÁªX9¸Â'Õùi:—G÷o:'Vc¿#·×þy©| ™åÍý—90æ‘nèѰËðÜî€W²(yL©+èoÖ:àÏj‹¼< ž9»y¯qPìóäÅÇw€kþ%<.3Æcä$͵ŸÃŸ·t~RÊUè»à ¾¾>ìôlxÉfmp?ßšúĹE: ;Nº~Þ›.û{yÀmzïy÷°î¤ÀÏßœ¡¿ÒH6»Ù…|Å({Ž×­ˆ†ô+qйwèï®ìÔìXÄ{‹J`Î .v‹z¯ò=œ ¿qß7¿;¬}F'p5«Øs^?8’+·ÊCó]H¼‘Ï%NõøÏ]7G-ý|'ÿxüa¶àgá)j}Å,“é€ÜGä¾Ó]/°ONáÜe>«òŒ_ÎDàëÜíã÷ö—My¢ÿôatZÐ=b^¬¾¿òü(É—Éýçýe¼5,‹Ì¦ÏÅÿ¢×%û,œàÖÄe2×7`TX^¥™];¤¼@ûÇcÄ‘OÒ`g¥Þ¾ûR2qH‹”ØÑ癨ŸtüƒxZð6_ÂÁÄ™O3WHæ§µ£qÎ/ ·©Þ‘çWîÍMħ Gàc*njÎz·]®zûûþáÃyxÖµÿ:ODñS¯_Yöuëܯ¶ØsÙÇáÍ™’ýôF‰Þ’ÿ²Òz–¸ìFôóÆïØó÷²ƒðÚêHÝ3)÷mkQpå§ÄJ}«E_¸QœÒê°ùÿj-ö*ówÒOþã¤}A>\ª8¯[›üPöö™Cÿâ¼æ¿&n”¹¾þµÑÏÒÿ÷S âÙCÜWãìqô]çøÅœDÜTk Ï=Gð~S 7?‘¸~7?K¾kßèÃ÷Øs’çùÅ©?ý¼æÄA>÷z:âߨ×ì ‰Ï§"n^8ÿÑì‡ôeiÁ)?’þƒRäMk co‹îß^ž­Y[„ÿSGîËäwóFô(Ú!á‡D¾küw¹|hõñ{‹ÈóuË/§ÍÍ}¹6“¹wñÿÀÀBàòGçnzûrJÆ–:×ÏØ©{)ßÇW.=}÷Ò'lšö)òoìÛ×ù’¹¨:ÏNçÂË>¸°¼‰þ9™³îk;|àü—ø¥Ã+áù¼nMÝ¿3òôäWλ‚#|eú§­ÃÒg(ñ§•^޹" ~;|³òNðÊ¿¨c™IÞc龜ÞÊ©_íDž*¥äï÷KFèÇ|•’Ï+¹‡|rêåõr½ôêþÓrQÁ!ÆÎÀŸ7Å󀙜³ð uî“Î_óökÍqÍ@pÕnË„‡m‚Ë7Ë€Ü CyöËìèñƒÈIڜ༔G+ˆ¿Úø}!þè}&¾ ¥À½Rm“:ü<ÿÆúŒí_!Â4ŽÆãóBq¢gÃŒÿþQÛEè¦äÂû4¦ •óÍÍÏ­[£g…{‹?ÞˆÿŸï]ü]ë5Æø ôõl¦¿Ùßù ù™ðœ}åû#Ï2÷ÜÛ‹´i ¯«÷;—üØI›„û¸+ƧíÁHxØÅ?=|_÷û 50'=8éøäß²ÔÚR…¾eÙËál™K½XöÇ âd;#øuº©R_ºÇýZƒ<øôÄ®œ¬"ù"sBÌ2Û¤_#9vd¼kþ)ä'AøÅÎðsÞ÷¼nçeô¨rTò™a<{ÄûßÊÃýšDüЪ>þ{åQáo5Þ-zNž"s»ûm¸ÿ±§27âbM𶃉dŸ®7Ÿ#^0ø`£-ØÿsÑû–Û÷…—£@rêÚÆÆÄÄkË bÏûÄ.~ו|zã0ì²ôØ3‹IßöÚWj”ô{þßnK£\oìH\ÄÒׯõå)r~M?Žðy|›Ÿrÿ‚‚S¬9B]k\BîCŽÖèÍîåœÿÒ€ô“žã|CªJ£¬ðQº ¾U’s_¾‚¹û¥¯N÷ƒÉÞekÝ ðÏ]±;‡ë^2Ý‹ªóét~–ÎwýÇé´š o4ÏbømÏïS¯]™ûšçñ‘âü“&Òß%¼!#g!·~áÍ÷.;šüIæ{ý‚‚/:'³r¿$ßôà§œ¿%ü}v/Môàl"ÁM˜K8v–óÏvÿO˜ù˜mHßJvòÄëMùœwµˆïƒÒO9ÌýžÔ}Yp×þ‰÷=qXø9àSgé ëÉFê÷-·âºV¦ž ~:h%öðZNä¡F/ôþöüÌGÐ9@jwkÀ]rœ%n>0$¨LÝ»–ÌOYB?f˜_ÿÉ3Ž9CuŽOAï¨VÏ¢~.ûÝuþšîÒyPêÇ}mï×–JûIüç°ÏéÂùï‚—Ÿ°)ùlåÝà:·òÿËY­7è~ožÃƒôô WòGà†å1ð§§|oŽàðûͱ;‘ë\°{—þ&>ù+5çkýÌ}Ì><ø)óªWü¸û÷r#ïÓ*/ñN–,“þ­âqe^•yÕ~9w^·û#~"ðù|?‚ÏáçþŽÝÎß+o'?™ø-¼þ6ÀãÛ'øûqàö§"÷7ƒÉGÊßȈ /Ú铎s.*¼~é— ËÁw¤N£ùÑyä?Q(Ÿó ïoîÇç·-~¹[Íï•—]¾®ÌÙ‚dä¤OÞ씈üGø£ŠÇ{óÍ»|N5›×7*Þ™á<Ï~ ‰Ão̓—‘oòõä58cÏÂâGcü÷øá‡êû:v ÍN÷®~bxú2GÖyôxð›ÿäÇ™– y®¾<(aiæs}ÿàŽ[xŸAÁ=·'ô:xîÖ'øÝ4•\ù7ÇJß…Ì-×¾_í7ÑýV¿¢Ä?Ô¡n)s¯ìvÑÛû…ãƒÇÚáü”O‘soºvîë­oˆÛeΜöÝxó|e?½úÿꬼNöèœ\í;'øÏZÏWPøÅ_»þOç°ùŠÀK0ÞDGÎ/@ûMçp_áüZÔ…¿ï?л¿”à¤Wxî~×_·?‚\Ü‹œõ˜þ¤yO]3Û,üÏ‘iØç[+‘ëQq°S¿ÀΗêHÞÑbòŸýz›£¥ÌC Uº>ñOӼ»ï*xí<üGæ%¹6"¯•càÏfÌľ ouËŽd¸ò蕚úÂÙãø›„ù<‹xÑ,6„×ßšÞH_J Æ]üÈ–/‘_‰«|±òƒ·ÖHáîà 6‹ßP§Ø]Ô}¶†eÁî¿}‡ü>Güñòmásk°mµÃÎÌéˆ~N&oóO¼$U¾§ìI6ª¾'Îø±0þ`îOÈ·ð3­n‹ÿ¾³©'Hœ.ûjÃìÁ'Í? ôºÔ2¼þéþh¬ø‹ÃË¿Yü{´@ö‡Ýâ!™¤{Zs®¡O‘WM‘û…¿ÜÙ*Ý9f½ô}áœÐ”Ä«9I>µVì)}'žýJ\n/x´¹ñò+|Q3å‹}oDJìp;æ“9)âð\£ï#8«ÎO´ú_Ao ø þ‘‘èp 3‡¡W*ê§ É#Œ7ÌÃõWsàEËüÀ@ÁÆèá®ºÌ ½“ žôîä7åf—æ_<ÅŸMê­ÖÖÅðÏLÅŽ)ÞÖhǹ ß\)N9$þ­ùAüšÌ°î¼Y/÷e½Èùlÿôyµ,‡®4–¼ÿÕ!öi4©¢€o–°W‰ò¹m£‡y󀄯¬óû­oу,Ó‘{Ù×mŽiF^,ótž¡77"ÇEüîRé×’ùSÖz?÷UæXqð,ñ†? vOñ~k]x6·ÛqžJþ)v=Nñm±ûï™{iüPû´åv^æ ™•Á§œlUøûŸ‡¯…‡ÀiÏö}3 ¿ò¨+ïþ9o©O]/ƒ^^ ^´‰ü¯kUäLúu¼~Ï;/ˆGFÕF¾º¦En§23`Láó‡/À®J?z`5|3ûâßÜ”úCHK7®ñ_›³_î#¯¿ÿ’¼aÇ â­¾1‘÷$—8ïëË8ç2;ø<©/+¯Iýµ?J>±'÷±#k7ðþõÐ;ÿÔVÂcOdÜ÷ƒíª†ý¸>³ô}é<7šrÄû·'ñ,óÑ|iï·ë<ÜÝÁa„¯ëDÝ:ýSäßߦ|Q÷ýe/®î1Ðý|:ï!°é-y€Ìu÷ø²·Î™±waøÿsBK¯é~Ý—š5.}úÂ6[-¤žTñèùÈ[væ”[•Ú ¿Ý–?´Ñ¸øeMSæH1×ÐWä8ò%sbµ¯Õ˜ò?0µŒÔò‘¡Ä Â×òŸßI¼/öËš™„×Ëœ•ÀÛ°¿2÷Ró«æ#>îmê·ªr߇×C>ïfBO¡‡YeÎÚÒiüý)ub£Ócéû‰Åó™èRÿf˜Îµóµ+ÍyɬÀù˜ø‡x{d.}¢¾fÅðkÝ'ezÀõ¾¦_ÚIô-þ6céO‡ý©¹ø¦cüipbü‰Ìëð5'òí¿„œ‡¬ãzJç—¼dzv¶8x—èmÎD|Ï…{Á­ô ÿLúν=ê2oßÃCuOÛ½ð~&µEΊt þÞž~ÜÙ'>©þ«Ýª¼ScÃNô,F#+‚\Ë^À”ƒÔýe_¨ÎÍÕ¹EÞ~î/áÕ'IÏûǫĜ­„mˆójï‚Oý¨zDÞ¤ðVL_gžSƒg ®Ý9»Š:Oiò`cJ"©¿ÐkŸÂyZb—¦Å Ÿž¾ yžV‹û5x%òéÞ§à0Á«¦¢Rg3ã’ŸØ7öóÁÏ\¢¯EåWçRh>¨}ž¿Ö¡ŸÕÿÆ_Ý&6rÅ>LÆuI¿làëð dߘïe(þëç‡Ä/IsGÀã¯ÙÓäK»—ƒcÔ‘¦!‡Kæñ¹Â_ óë\BæYÅŽ1¡Æ ^ßtùr.â?kA0öXúŽ}KƒÐƒ¥­Ð+™Óh¥¤ïÑ~µ;Ü•>æ@ÝøÏ‡0ÇáhnøœRGÔ=9ÆÑ{ô; ~åï~àLÜþÉ|S³G¾ï3æ?+ïAÏËN̼I'ïô¦iuæ·l;O~6qçzð ~«Î"ìºô•û.4&Ž‘ýÏVÊãbO×Ã#4,ND^dO‘µ®ö¶äó#ÿºçÛÛs*ûŽušÖ•­IÉ„Oïí½îÊsöú+½¯’½åVÍ‚èiDàJ³IÿÌ·~líÍNQè#ö¯çø1éè»rªû#Øo³ÅräçÅhæ/DÉE<$ø¤ùú"~"øM„þ›ëØÅsm·Myß>eð3WˆÜ0\ëæ‹8Wì³~þæöä/ïü¼ ¹6k¥ –þbíÛµ[?Ú‡óüáŽäýÇÁ“ŽtO}+õÜÇùˆËò5âzW¥D¾1ØV¹»‘¸_øÍ¾ÁÉù ¿Ç!ó®¼=}2çÇ)¹ž`˜œû;æwjÝÐÿðQD óèÃòSñOävœ&ä3cg5º*üFæiÑ3×çµáUœx,<±6ȽìýÔ}.þÕÛ#Ì¿µN^‹Ð/åíî(ü5ëc“1ÿFþ…6ãGªýDœ²â:óÇ5ß>ëk÷%|/ÝÃeÇáseï¬æÉ~s.ÏQî“ÙˆÞ-e®…ìÕ6kÏ™'çÃçQüjÂuâ9ÅW‰™xg«Á}Í ?ßk ò_¾?¼‡Xõ±óOo‡Ð9S'É'üy/;ƒøèÞ<⪂cN€çc mŽ| }Až6õf»æré§OÅÿ½¼IýiCü›ôÏù£d¾ƒø­7ú†TÂÉ<»ˆ¼Éú‹zÃþ¨èäáÖ¶ŽèÇø·èCÕ‹èm xÆd‡ºÃò*ûÕRxßÉ#“gNØ¥ü€sÏÝ9‡ °÷÷×£·M‚è·’=zA>ìôÂ8ðMºN?ºUôßíÌZ9–=‰FÎÃð~¦¾üöôÙKúÕÒEáåV÷8Sš Cò’ïZÍùžÒ×v®ä3#’’÷§¨½Hìò/8j êùéèw\¾·öç…J·z0ñ|Ú»ðt/µ#.ùhµ(Ô­šïÃD½üËü[á;Øõ†GáõÏ/÷«—"ÿ#Ñ£a“Á?ÿJ…æ+DŸŽ½×ƾýÄí¹ØÛxû#~þ@oøÿ¡ØEk}”þáEy<íîcá±d?f¸¯sšáO¥Fn-@wÈ^¥'ë‘[ë¸|Š{øÁé‘ï-?#‡²ŸÅLZ¿¹½¯ôeMÇn§¤ÀmA>{}$¿oÑŠxÆ/Äwûê ?©g›ó ìyWæÚ¿¯âzöœ%/øð|l±ëZ¯òöž~[ù»îKŠü ]aŽxàþKú„e?µ×o”®ù²ôÍXéký+ùWœß™Ñ—ëÑ=™²WÝ_­;ñʆ[Øí5À9eï«ÎK··|K|/ùŒù,1øÎ•V}¨|ƒë­õ¼nÆ$ôLô0P·ß3¶ ¯´ANÎkà ꑷú!—™ RWŠ]»½Zæ%®+ rڀ߯ZÉÜôÑ"äöÉÔ« Æ·¬ÐåvÅ">xx{ðs~V{_g 8Ô¾~Â?ý8]ö 9×Éwý¡KG,/¬ÔkÁï#¿{à5'¾)ÆÜ –(ô¡—Ž#óßÀ‘üMûGȧm»7þèg¹–ú sýNV?ƒ8p!¸ŽQðþ¢’_pú6Âÿl5ùÿØÝ‰¯ aïÍL Ÿj„^OÏõX!è[ºmô±µ§ž[üýOw»x¼ú{íC Ú‚\žAý}Sìa»Äñ)À·¾`åÝûKæÿYv‡ÿÛ~g½Ø úÀ: 5ÿü;KoÂkùÿŠkêsßæÁÈwéÜèÝŒ¯\{®ý™¾é ñWc·Ò·'1y´àœVþËð)ޤ^i qO¶kð[¿^ˆžýщøOùPÂw‚~€'ò› ¿¨Ûpø2?Ãüx”xaÂoÄE}Ú0ÿþ›Åðl; ž~Ó™0ý8^ÏÎØõ¾¹¤1»6 &qÍ;Ä~1'áêÅg!?í¤¿EöK Ò’¯;N¼0„ùó³eÎB{éo>GÞmÜ ZCýÁÛ—1Búëeo©s1Ö:‘Oâk™åLoO^i½Â~ ]CQz>zfdn‰ÌööÉ< ݸúƒú%âuéÓõ—oâÉ;ò›_Ã_žX9­ÐÜïe5ô@øûþä“×6mJž(ý‡ÊïTþs jŠûZµï"« ò¯RÇ%ÿ×n¯{XÍ{s™‡hLyL^ õh³rôVæ1ò‘§Ë¾S»}~âWûçtäï-£âS¾ Îj³|föôLúÜÿ²N—âs œS¬ÓðBd? c•Ç?–«Ä9•ÛIŸ¹à¤Î­SØO>§ïùòˆŠ/aOƒyi=ñÿÇ"ØùyߢOÍ~Fçâ}ó²WÂ)ùÿá rÒòòÿ~"q–ÔY_¢wÂsÒ}:ÿWçú‚é×ÑùWö‹Vðj•¢n”¹%qà‰¸ðÚ^ Û(zKþ&{ƒ´>äݿƳ#ÌÓqºÔ…ð]'^÷ÅU—Ÿ¢õM»ï²@ædùÿ?ûuÃü¸žìqtÊ'Ëì·îywˆû“&˜8`ß}𔨑¸Ï O >ÞyqxyQ?àíé®Wƒëêµüôôìæ±7-ÿüû&¾#ÞˆÒï!û¸í8oÙSfoȃó—·W^P‹œCÈ8â¶r)~Cç8úT§ž<òöèÝ—¤üm­øë¾÷êös™YœäùâÄ_ÿâÜìÚȽôaê~ëõæP÷s®Å!κ‚ûlîc®›ìrnOsýƒU1.ò-ñ…Ò¹?|}YD_±?y;ò…dá¿](ˆ?éNž¨ýóf—ïŸ$sqº!Ïæ·|îæ6ü¿Ìí5[Á¯ðµ½Ëß{`¯‘ìåö÷\gÑÎwóSìÄí …áí…ö/iÝR÷z{x7&\þ<¬¡+¸ß­~A~„÷îœÜÉëµßOêøaúŽÞNDžÞ5öZêQÞ~Ämï¹ÿ²7EõÒšŸ”<ÖwœqÕ;®óØ:ò…¹‰›4ª¦†“e.vÏLL¼!ûíG‘ñ//÷,øWr/®õ+ïYðPí{±ë·¥ž+x§î?RùÕú®µõó­öOdꕤØyÁ½¬I—懷#:ÅJÒ1BÞàMD%ýO×›øa‰[ÍßêJ}ô¸‹ÔïKJ^8“÷—ý¶þ„ËøÜ•‹ÏXõ‰Sd»úok™¡Î«óÌ»Q˜“‘ûyâìÅâW2ñy݆“GèÞöù°¶T!¯”:U`Ñ*ôUçïÆ½@Sý(?¿þÈyÅ^Çë¿~àÚq[¤8•å,'îÙŸù¬Óˆó’þ~Û¥çk9ϰ_–À®H_ºÓ|<‹ ãð?-ÓËù÷\þÿtN—ñ[N昊^[{+rÿ&­Ã¿šÀ¼–&-æË÷!^Ú9\4ÊAòÔãÙˆwÿè þýåðÓÜ7©§]Id¼î\'#ÙÊS"ø ™à+š|÷ÒòÝ’óˆWfÆ/•›Â9ÈÕ@ÝtøÃD½ˆ¶ÿ¬üµnÎ9”é²4‚½8¹1Ì_á7¯_¯“}»V¥6àvÒ¯a[í¸Ù»îíÿ9˜û•ºþå⦈ü‰;œÁS¸²§BåFëTþÂs¸ž%ˆç£<ÞÏÈüΨŽßi3çSôJâníãк«î• Œ oçüÜG±WNðEÎ)ï¼^âcÝ“®qªÞ_ÿênüà$zs 7øþíÈ­Ì ´·'oQ\SöØi¿‹S:>ÏÑ|\ön)~¤s˜|7&ÏÿäÂuâ”*ø\éë5tƯ”¬þ){&µ^§õ.#urÎ¥Œ¸Cö—v–G??õÏyÿîÖˆ÷¼,`|Á÷’9×^ŸçÊÈì?ð/¹ÞÈC»yäDöRz8ó©Ò/7Gø¨ì QÕ|“ƒ÷—¾°øÙ­·Y-V£Ò÷/1WCx‰z?ýåb·„‡®<ãYcü̘3®>ëœ3îjÎW欚cƒñWÓ¢J^B½\q0ü1è‹?&x›ä]Þ¦>ÀÏvÿÀß«íÀo®ÿ ûH°#Ö÷§¯ØŽŸhý ?_»-vî×éñ„Ôo¬±Õð'½£ó¾G²"_b÷tºîƒ6/¥A¤ÏFó_¥ó­—™© ÅM¹,üëŒVý¹?ycQïšV‹ý×ZòùÒGhÞI†?œÃwò~Eæ6ÿëÇûg.oT÷mhýÖŸ¶î”z‘vä²ð×9u>%óRìÑ °ë:44ˆ~à?¦JßÌ&îcÃøßÄ#„w=•ÿß¼9©4м[úòm'9ç¯~CòiÅœ÷ÝïáÌ«G~%y‡ÆËÞ}-œCx%cÅžˆý¼–ƒó–9ò†÷eÍwÄ[‹ 4†ª…~T‹Â>ÚXGc‹_âuI"‘·>|€_Éõù–½··9½ó9_C¾¤.i­íBŸŸ¿ŸÓ´/×%|ß‹¡ÈØ]ÅìnÇ9ÙW«¸›ö›h¿†Ê³öšIÆq}ϣߚOëuÕyˆÔùœçB¹Ÿ}oÁ¿—ùøšgë^ À/͸®"¥#Ä3öà÷ôÈÄ„Óùzòý‡õǬÀußLMcïdônmUîïÛÜ™ƒ¦_Ô›tNÙÊØä#:ß&}êß×z®Œ`b§¦?Bðè@¡Лçp.Š3Ä÷¨5aqøëðæâ+N”í‚ð÷É_ov7g!î[Â6äŸÛcñw©Ã;ïËñþ²—ÎË7¥N«sUunƒÎ_P?eœ=ÌçH_¯òã5îñçþ’ï'ó­Ì«¨#ÝØ‡ü‹=òÕ/Œ?Q^åá•Ü\¯é+”y®ÿöaÞÍäÊAàXöoÌhîãúÕÔ3†u•<žº˜Ó»÷sçeîÃüQœÓ˜’‚Ûw‡Éòþø0ñKh#áõGïÛ?Z^nïõœ ¾ | +Þÿç½Ä³‚£ª]´ß·Eo¥ÞèŸ6›ïf!“Þ|ÒÞ£ÿ×£þòÉÈþÞò vTó¼ÉÑùy×<¾ŸàÅ:ÏßìýüNå2à6u?Ù§ v\qTßê Ä77;þÂþì,8Ðä[æ•{{*%ž÷öAÉÜ «ãœs¬ï\fDªÍù– ¯K½Ní¬Ú+nüLŸ2bÿorw9mü¾Øô¾w,æ$$yÏûŽC¾#<ÝWâïSò øåÞüi±çæ†ÈcÆ/¹ïÂs ”ëÁçöO<´ý'¾‡àÖžbè‘Ì›ño.®r=ï'ý¨þºcÙs0ºö\âËÿÁ‰—¢ŸÓpŸsœEßdÞ‡‘qöõ»ëÜá›?ý‰T¾²Ì]Ö>(½ß›p^‚§kž¨õ[cÛyøpŠÿÔZ.tà$þðh_pÙCb¿O>;…áH]!P¶ø§Í=ü_þ6åǺ׵¼5ç&óÌÍZ9Ÿ{qÑã8ù^Ò¯b‡Tä{¿ì#ýðv”¯äñóZnZ#v†ï—ç<þNúã¶+Æ/Hߌ5æoÞOøRaùç¨uÉ—Õ8Ó7p²— ڼ(¼œ;«ïͯ'ÞüaÙûä ͇?—: µ­#þ@öùÓÆ=eo“y3òpf¦ð¿òþùŽ"¯ŠÃH?µ1»x„¸^ñÍ«|£âïïX¾ ¾fYÏ÷û¡y²îUP<^õÇéÚûn~K*üyåÉ;,>÷dx”ò%Œ^éáÝÎ þdþI+y“ê·‡C ïK÷^Ùƒ;’ÿ·)œLÜÞ=q#ñ^Úœä?õZþþÚ‰ªðy.òù2ÿÓ˃g>å{Ë~.ݯ¦WŸ4÷ä}Þ¦æ¾Oæ¶æGá|ã·ç>è\ ™?áÍe‘ºuà~«ÅáõDû]Tn|râO Mïš ¹’ý2þ4—¨“KFíÆ5–cUøû¦vFq Ý7é/ò‚8_æf{{ ÚFß$¯3†ç’~ÓáÄDz?Dñ^ûèäo]øy¾G°·2¯@qHãr ?Õ~O{÷EüÕÁÊ‘=#ozFèóóæÄš<ˆŸ×:ŸÎ!М泚oyùŒðn%¿V>'ç<ªù±ì…×úk`êx>§Çö ÿ‰üûBZŽD®¤î-y‹‡_I½ÚLúñ¼òö%Ô½_êo—ò]H,8ôÉsáaùj¤}ŠÇçFÿ5 á÷í(‚Ÿ—þz­Ã9í¦¡Ú‡S¿-z%u;;ýÞïà+ìD‹ë|]ão~WêÑð'¯_¿O®[òg«}mâ0Ùƒ¨övBöUé\<ÍS‡4ÎæótO§ðCÔ8Ùvâ?ÄO(ï&̯Ã?|ÍË ¯&ÿÑéÈ¡ä]VâÅø=©3*Îê<¿O> øñÃAÎQò'«Lwò×[¸/Å '‰?Òz›Sa&×7ð)q•ÖÝ’­ÀÿÈ~!í7±Óý ¾u,qžØS¯ç§ï«ú¿…þ'òïÜÞ>Ôý¼WOxÉç«‚"ÔaµÍ÷¾0vêm:âéóúŸºø¿‡+j½l¾Ÿ”=ÁšoèþW¯ª{tþ´œ“òé´îgkËó™,Ü7Ù¿¤ýÈš'X7ƒç…¿>ÿ’Að…‡j4 Šp½f¥vWì½Ò]òyò/?¿wû}u³ú·ÙáõYû¥íÒó¹žÛÝ”Wæâ VM“¼MúFÈ«Û9§©eÐéq®%Âî–°8ï(1Éë7‡'|û¯?ÑJìärî§ÎçèšýHøùœÇ×Ü'KKâ ê¶¾t%ð§×æDàY8MŸ‚O‹ß0Ël!>Qž…ÔAüϳŸôø¿$x¦áïÇ}¼Û<3z>OxÞÜÁEöô@ãéS ü5nä"ÿ¾é û†—/\Jý€£=x‰ÖÁ"Õ'NÛº˜×MÜ(ü©ìàeR°g&CžÓlÀ‹0b @^¥ßà ”7º;)ø¤ìm ”]LŸû¦¸yè9âf©cGësý­ÏrŽêGÄoxóí¤ïß9?ùóÜ_Ù¯¦|po^KÆíècÖVè•äqº?ÇÌ·@æbÔ<àz'õ'j0Ÿ¯s$%nòíÚÃ9(¾ ù®Öý»ú ‡Â#Ä‹\EŠÃ÷¨°mfø÷ñ?˜ž-ñ¹‡Ž£se=|KçË\eO }…f§£Ø1áùkþ¥ua­gyùºÔŒª—Ð[É“•?ÈY;¯ñ¤ù-ÿ×±"þNêF¦ùÄE£c¯$ÞÔ9(ÊWð--9ô?‘ÿ0¿çÊ¿Ùxx–ð/Ó|RùÊ.1¸¿ºèr5Î5ãøõa‘±;â·ýéZGuÆNÖËêž{ fVáõPoWÞ”æûŠ«x{X¥.kŽ^ìüQê$ðbì”-ÉcÎË}{y?,ó·ŒՉ󟬥Ïrmt®ãõfô{Ï*âƒÃ-¸2oXó}Ý‹¬sîü_Læ>È<`­wj\lG«‹¾T¬Ç÷8ßÜ{9îùŒ÷Þê¡oI?^W`r&|x£s;ê ±îá§´_Hæø)ÏÃ<óò£¸±ðÌo$>«!u}ËùÊ·m=>'ñ#òÚ}ý8±÷¾GÉ{ež§/*ò"üzo±û{:ò#vHñ.ÍÃüxbÓ§œoì.þù““fîçË\s¯ÿ^çþëÄ\k¹âUœt•±gMïqeOžÇ㻦þUùèªOº7ÚÝ» ügsø×èä^o>¤ñUìz³²Ä¿Rvb½A¥þçñ@ú$‰ÀãvJU@n¤dtj€üÛZ0 ¹­1ƒø«è¾zæ?îð,{¿už…ÇÛ”–¼Apælþ•ë¼ÃΞ¹S¾žÌU2.Çà¾Jß`@çtJ€ý¬ž`iøÏU¿¡zi¶¬„üäŒ\É~,#õ>ÏJC¾ÒhãÛƒ¸ÆúQò=ölùnŸ[þ|œf[°ûÏj¼D_q×ÛÄQ2WÐHÝŠŸ?ô_÷ß”µƒÖòWÄç‘æ ßŸR\ËëèR¹= ¢Ã÷ÿfßWöà™ p_†`gŸ „w)õÅs4~Ðø@ùîª?º‡ÞI»,}ʇPüXç+ަûXÍŸæ"qšD˜ç¥z`ÏË…>Ï\Æï‡ß ÷j‡7ñæ¶¼Œ!¸|Å}”©òø”ýheºPg–ø^yšk=Kq(óÍìíy¿S …¿*s1·žÀ/+¯Sê^z=:Ÿ@÷‹:A97­·ÉŒ Pù7šÇ*¾­uÅçÌɽù»Ç¬AÞ%ó¿½ù±uÇ’_HÅã Kž«uUÿ®\|?éãõødÂ#¬Œ-¸,¼Íû”ß÷ßzxõÁß´@óbåc+>iMJÍ}»k,j‰\K?‹ârÆï¯¸ROðpQáYâoмUú]Ôî+¾¢q¹²ƒ÷ 9OÜ¥õ…Ò݈«]·"Ü7í÷ùW¿økç=qïŸa,þæA%É­Šp…£|E­»«~jž£<{Ýgè;Yù^­7? ÙPìªÔq´ŸÍ¹Þû,ûµTqo;Ûüàú”ò%«â]ôGë~Â+UÜZã%å-›G¶£×Š«~S8f^>™;²ZãmøSÂS? ýÖ¯G‰W ÄFŸæÅü>’ïUúßëýDôOæØzõÙ+êùù®•Á¿ªŽÃ>Š]õGɃÜuß(ùËÔÿªü«?ó_¯lÖj͹$ú>C»Îàþb/µÿFûí”oY…¼S÷f·?€}—=fæÞtèGŒ‡ØMÝ&8¬ÿDôNpCÍCÕ®{ñňQȇΡ–xØ~e`w ä·–þ;_õ< /L÷Ÿ)Ï-ù4þGø“Š#*/Å÷¥ïÃ^·½>¦™ªóM¥ßÖ×%˜óÓþn© ›{CJþª~JóWåUªß ³‹.ff:B>S(ü‚«‰#„?¥x™Ú!å±y¸â±7‹ÂŸ·Æõï+îd¹@ÜÝ|ñNúZðV{a”ȉü .cOÌ*ý2ÉÛ¤®®õ¼@ί‰Ï„ÿj%š?@ëæRçó7Ÿ•:žgwσÿ>ßäÿ¦ü«\~O+s¸|Áñ"Ì¡pþÊëd^¢Ê³×÷¦<\±çæ€{‚›Æ‹àï¼>ÎC° )2 ú÷Oøf™L¼®ßJäXyšÂѸ]ãtí÷P²æ)î"} ŠwX—.§ILûͧ½x?­òÈõ+òþó×®ü“«"ç  Ž"u¢Z?ðþRWÐy­Æ½AØ[;Ù)«FÁSÈõº\·ðëg‹»ÀË'ômññÿ«gáwd.†W·“ù“NH”ˆuvåÿß«ƒ¾‹R}ñø¨Ãû¬ /wÞŽQ/°Rôâ9©+ú²$^Ö=./p¤OÛºTy¸±½Y!ÝݹµÆÀÓCÜç*‹»ÿ7åúŸ>”Ÿ(hÂCØ»‘º¶ðf½û/vFq[ÅÙ”£yšúwå)~I޽>}^xyôöë\Á§µ®èõù ~Éßãe_AÞ__}HEmg;ìÇþH\ÄÓÊ{оí«±²?ÀîIü¡ü[OÎ.³ÂnàíUäîXˆ‹³ÛïSÿÊ6ž^³ª}¶ZgÐøÜã“ÈyêœXíC2kçàçL¹éÞ¨ög©ÝÕ=n¾[·è¿™P™xDûú=çó¥_HÏÉøa.ó N, Ež«¸ó6­¸ã]þŒýëŠ.èu‰²ÿÈïûæ]\Ô–Åý^~3.úéï7Bäc¢û½³sÏÃlYir»(ýæañu¬C±ƒwÐG)xΰ¿Ÿ#Ÿ‡Èþ ³Œƒ¼f^‡Ÿ–þD_‚,ȹìKÐz’Säê‚ðú¢D'ëjäIæ0øÒöž^ž•·ä½·¹‹ÏüÑ×Åg|O;¶wñȧ{¹?ç)éîI4Ì4Ðýý¸m]Ýÿ‹1ÕoT(çþ˜±ª‡ûú¹?;S»?ûŸ®éŽ_ÕÅìx³Ýϳ;§i྾ղr]ù?ãAÿû?Ì:EÓ»÷ë·ß]\09+vÙ.!뜗u׺ýå¬î>§NÕóìá¿÷þïýDRç¼ûoêL“*RíýžVBæ¬§ŽšõI@Ÿœ¢E¥ï{Ùb±÷ÈÕ‰Âðí‡G¯vÖ§»núòõ%êSwᣙ§9×Éü žÛé*òµ^‰;¿ržw$u)ÿôòuæëš8ÁÜ>ù½ÛÜн¿ÚŠïþ„sœþûÇžÒOÊù ÆÝšð böÂ_ù’9 ºNæëð«ÍèªÈû™Aè[y9÷d Ì[*HÿœKŸ†óu&ø1[2qÿC¯Ò'“>];ÃhøÇ‹JPÞ|y+‡2Á«l›Æÿçž…/4t|½%ÑÛõÌ K÷د”Ïf‡î?a |†Èð“¦U¤Ÿ|@]^«÷úÿ¬_ö§+8ÀZÒ;ôÅxÕ›- µ?^òIêâ:Â?ˆœÏ#n&óŸ«Ý¥>ºø¼¦Í°» w"ßäÜÓ͉ð+_Îà‰Y‘Ô[wÆò¾7á‘™7¢©s¾Û >à±ñÔk'D-µþlúÖKùüé?ÔȰ‰Ï5ºIù }1ÎÍx߆yÔU‹È9–«™£¬~Ë­D}VõÔhþuéKðYíÇÛÐÛ™ûç„Ê·óGeä3ÿ•e"‰òù5òüÒ/XŸuÍ·‰ó'âÖ3G0¥2ÿo±ŽïßÌœ¿ýº¹¡vÁŒ9?¡+¼y«@êΑ#™;›ÿ4õå)[ÐÃzœÃæ×‘s™ÿ®Œ>6ñÑÇqð;Ýû9YÏ̃6’˜×jwaN‹óÕ?¼oO<ë½=v³ç>ö7ÓóØ•:sà+ÅÌÁ¾vöñÃN[ìËüêìÃéeð¿F:&}b…èC4rì ·_¯ ¡Dñºó†Ì‘~w(û—ÜCp!ñ‰ÿàžkLq®w>‘; vÄøýiÃ|T·ôð]Ž*r~Ëøu‘ ˜±y+ëUröûµìS9ÎçñK2Ìü˜spŒQѧxÅnæX¥ÇõègŠô‹ÉuUŽ½í‰øÝ1X§ˆ\\¯%} ~{æ è÷éõ܈MÌ7;ÁùA{ðSYäZâ(/ê8væó´ƒö¨Jòsò2}]§F0'ê´Ì³ØMÿ¨ûñJÞ£ö4êŒg‘·e…€±Ûc½Fáú^]úwŵnò¬¤Pý°rJßööqø«oè#S½7ÿZÃ~×I ãv×ä!ŸÌ|á¬Îúž¡ßÕé–>î¥xìÖÎKà ±ŸîõñðÒkNDŠ7…_gwbŸ£»!‡ýVb7{|ÉsˆÝ4öæ~-úWƒqîŸÌÙÊ•è‰ÁjÅIn†+èѳðXÇv÷%þÁ;K?™³ôz&øËlÌüZ¯=çö(þWdâ…áJo̽}É[¤¤_è$¼V«ïLúaÆÁ£w¿8Ë>ü”ƒ8²@kþßô ñJú"½úœËäü_ÕØÓûð¤&öæ­^èÙ©hò"#‡Í|ùO—Û@^Ǿ)}U»V³o=Sx¾Î'x-Á,îvsü€½}#¹nÓíÅübë&}N¥1 BõÀëÞ\\c¡ä½’¹ė´3•Ãv¯Í÷—ÍÅ:¼Áû'zÄ _ƮɎMá¼7w÷âŽAmY‡ÒœË þ̬˾Ë‚ü¬>нìDª» Þ¶¹a x¦çR⪜oaŸþf>“qeÏñîïѱÛÉìÇp{/ö8èOä}šï²6ŽçK\iõ^ .žÜˆý[çûÀçïw3ŸÇpî§ùÍ}λ:=}Ý5}þO6ô~´ÇûÞËýå³È¿qöÑç¡ëëß›O¿Q懸yº‚š27Øl7‰þ8ñ_^Æ'ØOñ{î—£B÷ÛnÜýÄ\¯×æ0û¤zfMèÃï‚_Ý“»Á ˜÷äIƾ囜îqWßfÿï,[jo¬ªôqøžôÑm™/»KîãPɤP9U?¤yKwZ‹Å¡û®¸ÅÊ}%!ÔN¨?² ¥bGÛõ^ªgæùÝay»"ó^¼œ#â°,ôÿŠgŒè»<Çë½–†ê«5¬.×?m–’yÃ½Ž ·ý÷<~Œ?½F¿†ÿߣðwß—å>gsþTz\IþIp’Æ)VqÎ=p2¿\6:ƒ~ï(Ìsÿ!}“:³?k˜×ଠ\RìÊÊP¹q7´ÃÏŠ>ùâå ›8Ç\Ù.Qö—|—à_žÓ}®ž‹}Îr;4ïÚœg’ÿòwþÿSDæ €óìµÕÁÓbçÉœÃe¸ƒ—üµýðúb*ĺ¡vÁ<Ýè&ý(N¸¦YVÖ§K1ž7ÛHäÃø}‘|S˜þ gN=ÖYññÍùËB¿×hÒŒ8©ÞXâ¦ï s?MÏ`ßó–ãûêÆ€Û"“yÎÞWD®Ð§[EÂâ7ÅMÎ.™5õ"ÏŸvœ xXíº;øcìd~úÙü{Û–…ʧ¿ý@ è=¡ÖŸ]hi¨\Ùåö²™˜+“އñšg¹H÷Wȳäw?Û¿?X"rKž8yöFâK­ËX¾EŽóóÁúF æ5{'èÔøÅKc®õy ò¨×iÞÃ=wŠûVÜÙ~vôûöÄ…’·µaaûëfmŠý¬´ÿñé0ÎÁ|ksá–rÌ×Íö"y4ÁOûã^Ž Î’¼”âX¯T|¨=q›Ç‡JÉ^D®]n ß/ù/­i¼ïáœo§óߌjôé™%«Ðßµ¨uñf¯•ìoŸj¬[ËÜÈiGúUU¬£2?ê÷SäU%¯ààsµ;žË-ñx@âûô¿óœÓ¥ÿFòéšRœ ñ¢ý ó·­œÏæÖü!x˲š±_u’–†Þ—#}ßôcz¥ra›UdNµÈƒõ &8ï úbŒÑ‹ˆkÞÚ‰ý¼ïO’yPÉÀMã™S©Ÿ×øØË:{µ¡/8sóV {XÏ_éWÓ<«)õê æƒàöÅ…ð7 b¤:Ÿ;â`ç«eß¿.É|Ÿz¡O§VD2·ÓÛ}ý’¼]-ÜS±8ªivð}çXè3ÖxÄOäÔàsIžáiìÇ瘃¶¦1ûñë±_YدŒçɃÆÇ¯„ª4„÷i|´.øÜ®½Ï/vØš;ýz–Ú7¿ê^É×,bŽ žûÈFþÏþ‚Ës8=˜÷©vǜȼ7óç\÷;Î 2 î@Î¥îèWÿHâü4ò EoÈ|5p›—‹¹æ&æxƒ™sí=·˜ýi²Pð)up•wg-óºÓq,øÿÌeüŽÖ±^ÜÁu»Õå~7+^R9µ~íǾ_å¼wÍ7ù7âŸO\'C¿²æ75®7'4Â)~”øGy%¦÷ví»yÔ[ÊØõWɉ<s9‡Xë`Êg©Rk…È9öú÷ËÄÑÃ9g͈a^´ÖKÍç>ukÎóœtàwåan®õVæ¯t“ùœ)ƒÃäÑŒc®ÁSÿ¼w{)¼­úën£ÏŸy³Z`÷·h=Ûܲ½Pœ;ªOXÜ ñ±Õ±4}Ýç3m<ðU¨œÙÅÇH]Hüí¦¼èÿës¸/á×YʇÉò"ÔÎ)ÏGëº_joÌùœç¥öÞÙ–ý»ìcˆ=c.ø_ò5f1Î/Ðú„=§û!8׬¿û™ÄÜX#ú8ú¨¼Á!f‘1¬“ø·6ÖUò|*o·œ¬¼¼`ü¹»p˜?Ó<›Ûy'öqÅ?Üw-{ßò0ò5* ;Sô4ûº2ÿù^nÖQêôÞìÉ_×ÈJêä äüÃNèO«4~?ÇùCšWÖü¼Ö ÝÒs8W<¾3÷õâ ò9Ýø93qí»ïÓxÀÏÇyˆêÒå„sÃâ'ƒû“¬ }¿“¥À3á÷ÃEàå¹åmŠ}‘¼IÐ^¨Áº¾Ð”úà…ÌorÇaSû‘Ÿ–ú¨Æ…jôºÁx=*vZêWš70ò‚÷4^T>ŽÄŸÎ¸ØÑYÁ RçRªñ³úuwÁQ™«’9̯XÙdþaÏjàeÁ5þÍeîXì¶Ô½µ^¯8ËnK|–éyìÿþžèß(9GóH9Ÿ—sºdŽŒà=ËcNò9T.¬=°·P»£~ÏhV9ݶÿ#ùY§ç(hã4ã|£QñÏõƒañâug¢Žèõ3ö[óA’Ô¼¦‘p”ûmY»!vÜÛz 0§Óéai¨^ý™æ´L"OÓô0qAÿ«ÿªy ­h\¤vNïÛýí2õ‡)×Âø…f)ƒ9¼âžöÇðÊüÐû ò?ŠLÇn ?Aù”nk9Ÿ$1;ú,ykÍKð–„l`n«âÃäœVµkÖˆ[Øe‰‹UnýW±/nEêßæÅŽ GõNù=ÊëÑü‡? ;ûè÷“96ð0œ!?³nn¬ ½óbOê Ëz ×"ˆçšÄÂ×’º¦õç<›;K¢'¯q:ø|NøgÎü£Ì'ÿ4#~;r$xbÿ}áѶ!^•º°âlÍ+*¯Jýªòò¬~½©¯oÍK¼!ybcÈ-ôÉ`^ò’‚xkMß°|¤òw”'n&Üæõ,ç˜j¾Ò¾¾ _É»¾ ùü)|áExuobÇ%ŸåMç®;Š^eºÂ|:å?JÞßO¬Ž>H>Í_å® •wJBXÞ@õOù~ÊW6Î>B?œºÍžF÷÷Uâ•7åYiþJq´Ú9;û'ØoᯨÿÖøÐY|íõmìƒð6´^ä&õ%_“ëûõûeÖWøÐ^©òÂó:Ö ù­ó(N¯o錾 ¿DëÔÁ:PÎä~©OÝ@ñ\Ä ìIlø'Åîð±»Áüáá–’Ç`n²½ã$Ïõ¯ă»‘kÉkÙ?ij~çå|Ãm‘É+*/Bí…õm¦¤Ðýu.½Êó¤D“?;ü¼—;¬ÇJ¾Nã Íïû·[ñ‰OÔÞzņpýãð#9ÿ =¾ÁKÝǯÉç”Ç45#ßÓ¨z¤|±í×ÑËíóxnÉC3³ƒ_²Ïæ÷¨®à­ ïɺ7•ç›W;"~Ǫ3‘ëßaN³±9Pnò¬>O#ÿæwœO¬ú¯|­ï©ßr¿'!Ï_LN ]_{ròñ×Tþ.¼'];ÏøÑkŸˆqí3‰[O§oÙM9gØŒýyÿd”Ožª_šwÒ<¼òvÓÜ"¸MíŸâåÑ{ÿ¹ˆÿ”z†9rXX½Iy÷G(/Ç©8‘øKx©æy™®ñæß_°žÇê3ëâìˆðûÔ(ŸYùÈvñ®øÕœ?á,¾‡<\OHüúM£]CðžàJ7—œW'>ª~)mþŽÀkrâžÀõj·¼Ú-+ï ¼Î:¿?pÝsWϺ¼;ðûÖÛÛ÷y9úëÀçãGáWfâù/š£½Àý*Ó\¾û”º—4,o¨|íÛ0þáç Vê±ZwQž¾â9Íc»õ'‚C$®Ôº‡æ‹w¿ÄNH^\ó¨7;…[‡åõ”Ç®õåeýÆ_JǼ>9­vDxÖtÎ)4ȹ¶ïsþ¦ÆãA?ª¼ó"]ãžFþͳÑ<¿Öý5~jš†¼ä… þTæ¯üQìãš—ðgiççü{¸‰÷¬¸ý|^òiF£¤€Ý5/s~B°.-¼Í×y§¹É÷(?ÇŒZ°×þ-Ñás*ßÝIâ|óHÎë“z]÷ö¾Ûóx|™í¨‰}_½þk­àýÇ÷¿ht ¸Ï%E‚£õS­àÆÝÒÁÑtÿäøIÅàèÞ®²;ø•Y‚ûܺ}å"õÍïeÃ•¸`ù<Ûƒë&̽9\ØûFÁi=„™¤3ühq‰Çi”¿úÅìÅIžUã÷^ÙìEZ»™¢u"š5ó& ä™âRϨq~Í/(?)îTí"µ[5?hÞ‰_:áü#yÍg9u—oI'ýr5'ù3{ÉCø¡V4ðç±Úü\ïyé£Áy¦Ï?¼Owøô;-øÜ=´ïppüíî¾à9úä@Þÿ99·f@×^t38Ÿù´Gp´Ø|?ø3ø ]µàÿv“í[‚÷§Ž®îãçß7çu*® ŽV¼bð[ôJƒßðƒâ–çÿ~LôÓìMãCòHâ¯hýµÖ}…üµ·*3Ý?Â|]?ƒ:¥bCÿ‚ƒW{SíÉPÞZâü*üÁ9kÕ² ‚ú•øÌEüÁ³8Óos=‰ë+ŽÆ¼Ó~~ÝdU”畺£íüÑÿ„þµ~%„ÿ‘8”ú©êG9¥²cGWh†-Ñ…õWUù!n¸\qã%c%ïåå¿9;ü÷ª'´ÞBë+4~é iˆÝÑ»!öÄq¬}Ý9ïVæË…â¨Û“`gIýZ,}ì¸Ì+õ—îè-RNôffìЗ»ô¾ ]@çöƒˆ€^­{¯ºssŽv¬ÇÈï¯Þ…®/.EOÜ*|î|ð{p^¯ëWýº _G/N»@?Ø1—óþãù›‚ß_Ëê×ý­7çoy>©;úoÝ<¸ŽÙ(&zæóeÁïŒéo¼pú‹ôGX7©?á¡ï©ÿˆi¾]âÔ^‘<¼Ÿ¹º<‚âÍ"ö†Äm­O¢- §{þ@®/ùåoñ5øGãAEÛ#ßÏ6†Î4Ž$ûe­¯ n·Q!윂#¹¿M×ÐK7ó>IÄsHüÚhåç'Mþ'ô¯~_ˆž…ßÔnѸÚGZçíwx:}\®ÔQk}†æ¥שuéV¿Tûž„òÀíJ,¾Ã|›â¯µ.ÖnøŠüœÄk½~2'Rò ö ®Äï{¬!ŽP¢Y@oÖ¬ÉÈ_¿@÷N‡9Á{søàèæNЗY¸8tŸñôÝû»à{çäÈádË™t霾‰ÝŸÀ ŽþôbðÏÔ½Á÷îÑ'ÁçγQ蛯.v•[+f@ç~óÁù)Ç‘ÿ?Û~ô›¾@ïl|\×[±$8¿à ÎçNvûÌ:º“xÈÄò“°÷ÄŸÒ¼«“®ú¡e ìýcYÈs>QóÚÎSç±;£/‡¯ñÝ—Ž»êòY .àoK]…ÖÛ«Ÿ¯ý:4¿Âü±ŸüHßø½9ž°7w"Ç~Ì‚|•|”wù‘Öu~óOè_ó¡øI½ìܗijBýp¦ÇÅ~‹Î¼d+É8ÉGå"^/q!£ùÆ(õ{¡:,­kÔ¾r>#¶ ŸÇ+ȾH¼MqôšwåOÿ)¸|Í[„p¬9ï!WËæ‚®“õ èÌß<ºù~eCp´ü}úÙtm]З¿Î!øý`û9ø½q-|“Ø„¾óTþïí½Â1¢ |”º3|ösö€~yƒû0_Ï ô„›¬ ~ÂôÉÐÿ÷±§V$CÎ?ZÄužïîË» ŸÝF¿<.œ×­Ù }1=÷]5ü²Ü ì«NFâÛŠ›3¾ünyøú»Ï™ «uçZŸlÉä*ÈW³BìaÁ™8Ûž³¯­—±ßÒ?Æy’5j^pÀþ/¸eëduä¦à"ùy5Kæ ºåÑ[b?ùÇÇà ®,”º›ZðUïü­yHöñõ «‡2'9âçyYÁ³(^Xñšßи˜â4Þnæß€œœâú?íØŠ8÷œ7kƒëØËXwÁ!9Zr^ÁkFÚCøcÇâROíÜ¿DíiÀ?t;e‚žãU ìv'Ùè¤÷ÐÙ¦™Ø;óôl¶µ?Öïÿ(×›Á÷ãÞ…î:¤æ}ÂÜè…y# ëÏ[sÞÊë ï÷/bÿ'é‡Üδyž/Up]sótŽ~lü`ï9ïÍüøÛ…›aç (Œ~)´:^[?8¯7gÀ¿vòÓÝãuÉð“Wn8ç™ð%ú UôVÉ‹Á:˜õ^ò@ýM¿iÿíOd.òçXp^gø—Á}9õ»l—} ìF¯ýùÀN7ž_ ö;Ù)ˆg¹og#Ï+õü*ÿO§úƺ7ˆ¹bšçÿå‘Ô•¬‰‚Kñ{.[·Ʋ”ÔÓŠßï[ý¡‹Äeàç~ ÿ–ýc?‰Ù,¸žâ`%nŠãhýËÀ’ø£’wµæ1Pñ>š7Ò:/7I1æêö¨µoO£QÈ©«µ¬<ÄÛºMEß5@NýYƒï¥^*¤—)y7kLOä`§KØÍíJ ŸoŸƒ®‡@—ÐU‘x¤±¾ öJÎéÈïmi±+ö$D_] ÏÚÄï~Ê…ï7€Ê,…î¯LŸ”z¼úlÛœóý2Cäóø¢Ò#ôјiÐkü6è;÷¡ó[¥á«öѰ«ö%DŸœ‡¾ý?W_÷ÛÁðß»Kp¾jÕ¹n¡^ØG‰×s½}u‰3½ºK¼¤Mí Îe¦_èûΣ .ëe¹³Cè*øŸ{.×9x½’üv`ŒÜø%Ѱë¬Òí‘éOó<«§ƒWkÕ»Eú¢iÿ§K×€_¼÷¡ý·ÔÕzMÍ?šÕnb ¾Oû÷yû>Âù¾zLê™ÿêKûcš;÷‘ߺ<›ó._ý í£öµW¹ÖLácèñ­]Ø7Šß¿Ýÿ¶ô/}I/àm¯ µ€%8ë`*âxµ:°nR·çt:L}æ’7Á>:ñŠ@ñÚAÉŽ#çx zп¿y°ÄßwbO7µƒýsvg ö׫Ö{=6þ€ûþ>ÿv.të>×9”‹øç£=ÄñO-eŸ¯5†>^øè‰Wññwæ€R퀎ζÂîZ¼ºé‘!¸®=:ò·eƒï­Ã.òE@oV¦$Áy<—¸’}26üõC6þßu%tgN Žöæ$ØM3]äBÌË>´:0wÓ©|ncpŸlä>ÇèÝ;qÿácâZÎ½ÔØ‹ßç¾W}eg^…*~Ù9s:÷›õ4ü–²~ÔO«ßkFÌ>«¼p-ù÷)mÐû’¯ÑxŒÖù§ OŸ/ù¶H>âs©³¶bþë_}iŸW7"þ³ô‹ñUG~Ký¹âñÿOp‘êx­«Ì ç ÷ÓÖØuËúð}Êø¯Ƈ¾›dâÿÁÙk_©›ò~‹_&y1µçý™—ƒu6.e„N^M…¾æ?ÆžH5{þÍøbQ2äòÓùÐõRû~õè;}:ä×ûù‰kÖ¯ÎyOçBžö]ÈG÷ÔÅàúæÌSÄáOö ì£ö è¡€ÝÄO½Ü|¿ò çß]Ø#`ß,I†œÎ”?ø¿Êm»Ó(âCõºù5¿Yoâë‚{Vœ€Óæ<õâ vmd?²ç1îD ®¯u:×Ö¾ÞÄ:ðm¦–<ÿÛ»‚çs’Ä"í|Û´ô{³Cðœn´ðË·ëá¿í›‰Óvÿ‘çØ\Ÿ}¨V?¤Õ%ü”S+þ3;¥ì¦H?½Ðs¸ é“iõlŽŸ+ù_ïê¤eáô¢qHõÕ/Öº¿òjì.‘³õeþnÜ—àü´®^û?iÜ×8= »Lúvj½âC¸Z¿/~‹ÄÕ~ õë:±{~VNâ3R‡­}MRù½#?ô™²Ûa‘ع±o£Ÿ´.—çÄnè{^ì× ØA¿§€îrÌ#N¡ËÞðÿ;ƒ& '·àýÖ$üÿö,®#~°cíæø¢ vúì¦Ü_žÍÈ÷Ͼá˜('òöhcì‰orÝÛ›ºzñºøp;÷§ô2ô®ÿ¦@`×Ù5úvýçð嬳Ðgê¸ÿ»/q¾£ç·ßú»(Ú©`œ÷kߣ6“™=ûµÕÔ€ýßö@¯ ¶ÀÇc—³þó–€ëØxºÝ‹﵈Õ/¯Ñ>nØé€ð'¿/ß ½r?oðüFæ´Ø‡±kâG]ž=K¼DëBu'סçÌÂÞ—zónOúf*WëäÿêËiX"èg¯ùX{ÎâRåWÜÖ>2 fgJÖ¾8S;îæ$òÛÒ?EqÎE‚Íåvò𨣒ÇwJǯ©Yú¬Ð»Á¿Î¾äú>ȾÏÅ_5væÁn}º}¼¿~æòjø»mçðÿA?a_LÉŒ¼_}?Ïê· :Éõ’cƒÄŽÕB¾}}:®4¸Ž»ãb ßßÊaÝiŒ½òîüƒWèÿ~"äeç\_õÏæ„ÐÙþ ÐCYäNLÁ>«›÷"—­ïûŸ;ÙëßsûÁ¿ùcgÌð‡8 ~j¬JÈá™ßãmœä³­ò݃÷^©þÄq¢¥Á¾kÿëqx)vÛGSY·…7b7YÝ^ëíçŸÍº?¼„ÿ°3|r¸(÷Õo1ÿ[RûsGÆ`4?èׂ¾´ÛçjT|…ô)ö/ ŸÄƒuàÒ%f´Ê„½qàöQ‘.ð‰à¦þêËÉ•¼¨øZÏjU܇ìˆG|IúÇh^KëµCu(’'P²Ý¥6zBûØ îGóš·p³ÆB.¾µ zºû¡XrÖ«Þuâ1=$¾óOèè‡mÈ™w³À7æÖáûÚû¡×Q{ùüMEè°p*Σ~Cã3œ?Ç`ôKûšI±ŸV½d_¯ØÁ>ú[b`WÜKOÇ™ôÄËG 7'ŽŽVÂaį¼B®oè]•+?%.eÌ7ð‘¯à gê.â¢'sA1àÔÆ/÷_¹ú’çùr1ñ¢1{¹ÞèªØogÏѵ"úâUmÖãûlœßDµJÀו‡#Ï·UfËvâ¹Ç¶ãz·ñœ›Öö½½x|Pq5öÛ‹Qœ·ÌQîëq\õÜ&3cå_¡—nl_¿$ þ¥ô›ò'Á®/Z µITf)ubRçÔ¨B|¤hrèøFoìîWyY/‰3zÉc±ïïœf}3Û/ׇnoŸAެɺ¿5úÝ >I—óÝÎÎ÷ßäC_W]»È÷gÛb }s$?¸ søý…!Á>Gê ↷qÝbͰ[>œŠœ#t³à,Ï•(.vÙÜ¿Úuä¤Ä)í­õñ?ëAß]?Äý$5¹î[›öË~a_]Y„)ù;ü=3üœ×a®N"o1[ò 'g³ý¿&oPid wœû‘ç‹ÊÀŸÕ÷ïòö¥ÚŒàè˜ûÀ3mzÎûÃñ·›d Žö½æðý ’üï ý–¯üu(#|ùmôÙÉâ?š³’——úHíoªñ#+†pvRoáæ¹B¨þ »ú›:Ðá•Yí½ ïïs4ʳ^»+ì ÿÞ.Ùvo8ø½eÝþØH~Û‹µ$ Wç“ÞØm£JbÞÀþtœÃä3ÝÁnI‚dg îêÆíÆù/U‡¾5¯øË~äLªkœgÇfô·àúü£GY··k".d‡O¤°ÆýìÅ4O†>|ž}£-qŸõoÈ—íJ}©âÚÿêˉÙîóຒWR<‚=ªöLûÞäí4n#ñI/¢õ§T<›ÿ°ùƒû—ÀaIþÏ®;•ºŸDÕw_ Ç_ý^µyyzz1ÉDìÉ·úÝâ°þcG³¾›ÆÀ±ÊCïõÎ@O««¡o›Öãÿ-Nò½ä¿¼8G›õ¡Ï±ißõšGDÉ÷DÚ7طב‹~ÊXÜÇ)ò«Nû-ø "È·Æ-³3üùÜ à‡¼mcðO.'åX|÷ym5Ï?âp1Þú08Úû;Rgð°ç9¿t_9pe5z惶È×.ñ<+fB‡ù‰çx™cðüé‡q óÿ²×9Îdýìýc9ì ]ØwFÙôÐëµìœï×§Ø¥ ðg½Nåø|ÀèË…8ÏÕ!œWì|ÿ³ÄüB‚G!þkÛ)°›´Æ[¤ÏŠ;ò*ñ_© Õ×ÖYı¬ìq1é7ÂgþÅWäùƒyoÆ çÙN^UúÌÃó¡v¡žEúÛ{öa×ÏzC^é?ë$¿ ¾>Ô6á’—aöh ¾~cBôíêéØ9c@_gá%¨†ù 5rtÏöqÞzÖ÷f'Þ‹_æ,®†‘¸…•&t:>7ç‹Y„óìn¼ú,ÿ;@\Ä]» ½üþ©ýkVöMì_ø)ìõ·Ù×åÙ8_Cð¡öõ²Èý±ê üJ£È•À>2ºX;d}ð÷Ô‚nwŒD%º†=Ýü~ð?CŸ ~éÔÞ¿Ð$þWì&|sg?ǧƒàïBy®jÛáƒkãYŸàϻ6r¸] žcx ü’â­XçTIé¦sÿíâÀ¥“Ã7Ý=®¿0gµûŸâ]#¿^`ÅvVN$~§>z1ùzäÄÄiÈÕ»ÇhT¹Öá$r¿zYüN™/£ý<ìó+ÀÓiÆfO‰ûª"sÓùW_^çL_ÿ“y¡~\‚ƒÕ¸ñÎyÑ>Ú¯"T%ýK{±wÊ=Áo‘º@ûÃÄ¥; Àþ(4…ç×ød6䣯'ý–±s/µ‚>»ü„>^UŠýùÙc1ô¿"?ô4jh@GÞž¼o<ˆß >_í-ùVlö-bò3{îcëäßÀŸà‹q§s-‰7º~æü;ô»™–ÿõ}»EâFõÞÐûäÜ\oþ³@¾›oõ èÛkw’x|™ÈÿÎçí–7xïM›Æ÷Ó> øÉLOò ÙÑWU«žY =öK½áëk–<Ê:‰]bO¯‰\ø<1ëiï°­xÄŸßå9†}Êï÷'ÇÎ?yûj³‘ýIü}]+ü›õ%~JZ¿¡¸£LQìÈÑŸÁ—‹~ÿ8z@æQ).Æ›Ñ\ØC¡yl‚‡Åãµ.Wò§!üý_|9O* Î3*1zæLRü©“5º6'N,sR· óÐ´ïˆÆ‰¬,õ¹Ÿ˜M‰IŸ$áž­¿nŸ‚|ÉTøD,ìã7=Ù¯÷§ w¿][¹4tÓ)þZŸø÷Ú>ünÅ0޵mì¢~°ŸnF@¿¿lAn'\ >Xã)C®"'ËW"Wý¤ëñÞªƒýSûÕ¼8 y[¿Ô¨|ŸçX» ùØâ)òóÊÅ€nB÷ÀuœTàþöŽäwëÚð<íš#Ò¯‡/2>Ǿ¨•=ö#ù(üìò¦s°CÄ/Rü…‘x9ë)øm·`{ô“AÜ×IÓ>oþZùÝ;8z/<{wøú[£ŸÁç÷aMÈ:\“|õ€w„ß§Ù«ôß8ÿïv¾*6›ýyð4ˆÓZÕ²Ÿ Λ© ùŠŠ¯˜g)ýwµî@ûj}ºÎ‰ÔƒÐWŒõÔGÖn}I>ø¯¾ÌµÕ¾ Î÷Ý3ü‹ƒÉÇJ^MçjŸÂPš¦µÁkH_»P‹Ö9J}º3ß%|eÿ÷²ÏØq⿸cr£GýÐÔËߌfý‰í|N¼Nìëläêá›Ð¹wGìX©ã_~ûÉÌ\}ï®g׿¶ì€<Ÿ}]‡\5“a»ý°;üºN“hè!ï箉߷ºôùË]òûRÏîžÚŒ"=vÞõùØgé*s?½¯ÂÇâz/—áµl‚ÏSv7ù€îÍ‘»çûó|;zᯈÞ5îw`½^|ÿÎÄïò¦Q·Š×æŸæœ‰:Æ}˜¯Áw†³_R‡cϪøöú„ðÃo—3—g¡—Þ ;Ǥä¿÷^}©£ÞÝ^·ø¢ÌMóç­G£s­j¬ÆNѸÐ÷ÓɬÍBésùW_fíBýã]èýJ4¯ª¿Ÿr¿[æÙg€7yŠû•>YZ§)—‰ÿÜN¿{¾oà§„pm‚O ÕìËuKíä›ñëXÖµEjä¿Ô[)NÀ:–{éLYä÷­ùЗØ#ææÍìëœ%Øé’?s%$ž™<'öÂíðÓØSÄóo¯¯ \Íñ\A\ßövÉ ‹øfåsÄ]{´FžÞKýˆö½”~†ŽUþÌ[—牶:7.H¼‘¸¦úÇz>7^2ø}Ìeè¾ÅJøvÂ\®÷â˜ÔÍ€ÏÑ8ñQoüÛò°c7â|ž>hNžÐK<ûp~‘à¹Ý_‰_úwðWÍZgX÷Ãà“DÉð/ü¾¬w³L\ÿíXÜÏ‘ èÏ“E7½ ÿêŒeýwH<®pœËÁù&Œä¿öµ ÍÑ:·œƒô•6’m#¾/óÓBóÁ¤ÞVç()nÂi™âoѤ> è_qËš·Òþ\NÛÕôSèûý"ý+tNH¨¿I©›ø¿Ò'64ïCúwÙ9 ðýg†“'’9 ê_{I[JGꢕn¼¼Å¡Û:_åsa—4«B¼^ðoî-ò\æéuÈø}ÌÌØUEòàwåÜ•¼»öT]û€ê\óËèè×ÄIÐ7ÇF"Çúç€Ê݇ß7î|Q•üvÄÌ€¬KÐÛÛ£‡4î"yï·!à˜~«GÜ~Mèïes謎ðg'<_‡øðÉÙ¾<‡äMœ|Yx¾Qï·ŠQ2°¿É¨[–|‡¹v ÷;úõÆÑ? ô“Æó­±Å¸¿ˆüèãdõÑÏë£>æ>ݪ6þ€øAöÒšø»9»“?ËW”ÿ¿^Ωފ}|¾þ|pxê¸ì õƒbÿ›S»á7Jßqí·£ý¥µ…öô;M%&óCqú¿øò‹t¡_ŠÈqÍosãÂ2×SñþZÏì¼—‘úséßgÿ\–ôõq6£~KêÓ•>ÔŽS¼shn¢öíü|цjà=»å@~¦l‰ÜêÝ9÷1zÕëù6ûRJðš_^EN(ʾŒMÉ>}xÜ´Ì«õr7c®Èç]‘×ÒÏ.ÒâSþû7‘oÛNÀ‡1·‚«Tã’$È{é?é/"MîÛ[:þó=8Åø9tï {û°ì7òñÙXø ëôŒú1š(“ñ ðö—âDò%ÿø%öõêÂÔ1Ÿ/J>ãõ2ìÈSmƒûwb'÷Ÿ—¸šÝò)ë6§| ÷¼I?Û^·;Ký£ È ù>ëÓ?#k,ðF§‹ÂÉwá禼ÀñÝ Ü×ëœý[ Ëã'4yПֻèüí'¢qI·ïìgéó¤sZü¦òTýíÏòW_nŸ«ƒ„Þ ?í?òI´@/霡¸8÷e˜õ±¤¥ý:5ö}åäù©ôiº_hþÂÇó‰ou,±ºþêôº;#òãn ì„›ðOgGí¹ =e]\žV¹_« qñ‡t^ƒ™÷uÂãÀ¿Z/výÏ= 08ù:²Ï‚?0³¦EÞ¯ú¹©¸c²ÌAŸC<¬ä!peÑ\ärŽÓÄûÊ="_5l+çÝ0{dÅräòÁÊäÃT®ÿ z}ÝDǰßΉýÔÊÒwÅœ—;¿WFðqï¼>æ‚ÿãÍä¾s×Â>/3û2ïü™Á?¡7~í?¿q3úFpŠ#ñ›¦FΜ?ŠÞ•ú|7Æ.žë`î[âæÒn‡„~‘ÿ}Àçwö¿ñ˜¼ŒÑ+˜;j$ýq9/ýèÜ/ȯöM Nîÿà‰9el)°”ÿ)nî/¾Ì 釿—ù7ZW¨õëöüÐÎI‘øS¤|Ân—91Z¯¥}5ܽYˆ')^TòÉZÇkh Ž>×*äÜæƒ¬ß›»È…º}±cob‡ú'é/e_Š_;/òùÂxö¹â+ìä"S_‚¿Ó¾¥ÆðÄÄϤ­Î-Ó:pwÄ—Ø) É·…cC7}jà?OľwZÄ¿Cý€eN¤Ù³*뿾ú¡æ}èBò=NÖÜoÛ&ø%K¶ÁÇeo÷¹W}køudKèOq­öâµ*ðÕ}py÷t<—1¢U`OØG›q½‚É‘÷k³>yFòÞÄ/õ¶&äþjlGþg+N¿Ôxüø*#Ñw§Êbßÿ–þû/’þðSöD~5~µú|¾j•\ÝÞ à­+ïÇï—<§Î“ áæeNƒ=à0y%éï¡ý[¼µÓÑ×2ÄOÞ”8bÍ!ä“’Ä ÖIãCõåÌÔ¿¨íÿ˜½"ýLuŽÎµ¿K þîðGÔ§Älß >TûyZ·’bÇ—9D?—C“ÈW| ¼TÈ×ÁãWeÚG\ð««èõ¾‡‘G‚·u?þü‘³2ö·Ôj_#í0èµcBwØïÚßXúÀy)wáL¸~;¸‹ÈaÿvLü±cT?9ÑG¿×~ÈŠqæï€ï÷gÇ"ñkî üö©ý ÷öÐk±¾‡^ÞÛ€wöQ°‘ö ù€ÃেIÉ YãÑ‹‚‡ò÷4CA>lêˆ<¹x}X]™ß½“ÿkHbÁ¿€7qµŸ’ŸzXk×>ü¹ŠäÅÜsÕ‘ÿ’õ÷ÇOnT‘øù¸åø»2‡ÖÝ´¼uªmðe›rØk3ÚÀ7ï]Á¯Ü£‘gxmíÓ(óœå§‰ôôà£ó‘«µ[á^Ï{©‹4«Ý+z ·½6y¡­ÏLâB¯ßÞ†¿‡M‹¿²Ëæ¡Þçù]ì’95¡/ÅkH<7’?YÁ…[­»ÞpqnÆ\ïÅJÞgGk'Ø¿#ù4«ýï¼ÝÔ5‰p|¿ýÍeèùëÄäÄdÝOßÁ~+_ZÀ¿.˜ ûgÙ±ÁqÔ4ê—¯ÅÏì9ûXìkíwê#•ñÄ÷"ÐëÚç·Ä,ø!îä¿•ÿu{ÔîÿÒÏQû_¸ÉÈCK?ÆP_ñÍ„‰·öï¥ï UüŠÖ'‘'—zQg6õº^ÙØ¬[ñŒÈ±¸·‰ÿmÏÏþV×btj‚=2ëO䆙„uîñC»Ô;R »ô‹¯áÉ i}¶ÖWYOóråkaÿ¾}–u—z<#E?â=?Ö9M:‡GûpÛã7zVçJëÜiÕîow‰£JÜÞú¼›×ç ø¸êüDÉy¹Æa_l ¿%}Sã:ú¬v_ø n¬ñJ£¸k1x4kÎ0ⳋZâOýA=œ7øk~/ùcãH[øjKqü3‰ßº—¢"Šà—ÄžÆó¾—¹U±Ï=¢ÅÉà9žŒÂ.Ü¿·{:ëªóeîŒö Ò¹fÞå¤è_ѹÜBYÇ¿5Û_X¤}pžÞ9ÎÊRŸù犧Óúu©Ð~ÃV´šäd‡»ó4qÜ9{¿η= ôuŸz"{'òËKÛ™ý”¼·y2ë»ÄÄ/,¸‚ý,ï%ϪuQæ§¿²ÞsÖÃGRçU‘¾ üœ¿þ%tu==ôc ç7ëóÿŒàñ­Û/8o¥Ø ãNÿÿu%öÛËèó_%ž>ö8ôÑwyÃýcÐ"¯Œ¦‡ðo'ä´/Ç:Ô>t ÊñÒ9è\ì Ãø&wKìïßj# wýŠà-µÑ=“Qû›ð|•»@Çã?§^-nnÞßÌE}EËQÁ¾¸SRWùS]òÍ¿ß"Nµê4ëðá!pHKƒ[Ü »ìáTîoëtì;÷Ç -à«æÔYû=jD©òÏ—•ú½$è…·Êà¯K½„ÖÑúqF/Ôù:uVƒ/p¦‘Ê– þP|\φأ2§ÊÛçü­9Øv†lý£ó¤¼É§û2¯Ým±>·Ò·Yç“ëÜWëî:ðÎÒÌÿjö°Ì ÷Ÿ\"î=í8öô𒬋5‰ýô“"Ï‹?ÂNÉ1†÷Òßϯòˆxà£÷ô€âQoèpxÿ–àÉgަŽeÿsèëÃìÿ•Vðɬ¸ÿ| ÝÅÛÅyÿk | >ËûåðÏSŒÀž–:ÉøêprèsÐò{ï ÿ©¸M3ÆzÞ_¾Ž»Oý{Æhèøê}Î÷mäué¤à†r‚“³3Þ€^K>‚NÅNÒ<š5Ô"Y}öUýØàþ¥£õã5ê¨j"ÎQ}ù½¯7Á§ ±¿´¯–}$=z$g/êÅ_è鎩G_+aäH£Yðí“O¸_Ñóö¶µÔ¡¥ä}ý»;©ëŒ™Œ8zÚÄÑ›U¡WòÂ:ïRûühß^oÔ;|?·ô/}д_ì_}yC×øg§avÌ‹]/ý¹´ïm(¿+8iwçZðÌ2'Oã V¢“áÛ“ø Ž#G2•‚žú¬Á¾–º&â/ì[ü2È•/nØ7u½´\åaúzû¯°¿1æ¢ocµãw‰vA?ó©/Q{ÂùY쭋ܼ=r‡ø’unri8Içîxø¦Km¾ïò û×t>òMòrn· Ø5oï»=q›bͽá—.M|vi6øzà»ØñRîÇÇn7bLüü·Ä…ªÜd½âwÆ.ÐøK¥Øu¿´žu ügç"u ~ÕZäѶ>Ä?HGýó~‚ês|yòS·ÿ]Ô' ?û%x cåBžkŸƒ|ÊÓ‹óþÔû%/÷1~zvdtîÜqøçù~ðª Êà4`ß"ŽÝyçTp×~Ñ>‹Fá/ž9Jã½Ìçó: n&zÀÏY»3c5è6:Ÿ;Ë’À“沯Oé‡é=Ù‚þ˜2 9¿¿2ú}b>è}èÇüðoÐùÝ¡ûrà_ì$»Ø‡¦gˆKï^…jôÄ_îò#ç?”¾™”{"?t`§í”nËùkœž¿¾}toô^´2rPðln‚FÐUJê’_cä·ÂοM?’q)9ϨØMEû#/Z !N³¢q–o»qé»à¥­É1Ç*ôZ®Ðá±sðWœècé7g^‚½ÿVÎá|èÝ­‚}ØçgÖEúUØóÊpÓ¥ßè pÓÚ‡ÌÊ0þ’|¥Öi;;Ó²žÑëaÿ7NÍõ%.ç¬I‡=!õën­ÐO˧‚;“¹!2¯Û(?„¸uõùè[»)sõþêËßШSð<Ò_%Ô§Aô‹ö7Õºkéà÷J¿+à ê%¥oVh®¬Îßœ™Œýüsl<¬Ê ¯öÖ»Á üÕ‰™±SêÞEÞä;J^æýºÐk±1œ§Dp.b¿ïÁˆÖ¾º¾ì“ÞÈÅ’u*6‡o¾kÊþn b¬#Ïê[ÍÈ3ýØò'zãö:ø¯Â ú$J݈3ðø™ãÔ+k¼Ò?Šy5çcǼÿû¹ê&³Å‚žׯ–þÆ‹3äû$Žî¸uûKcŧ^ؾFý¤Q¤Â¾p9iG#?6eN›ßB¾Ÿ8Ê:+Ž[pqžwú>×û´všömÐ8”Öç¹ß\àóm‘ £+!Ï7­uZ?à}õù¾ð}pWЧ)R>úÒþ"òTæ½iž2R/ÿ”ù›:BùÀŠñ ýN¤Ÿ²qsÝôBÿŠ[VzW½¢sœu>‰Æ‰´?¹Î¯Ð¹ V²‚àX/å9÷ì·ÈDÎÉYÈɶ?bI¿(µ¼ªë«ó¤ÏLNÈ·ŒÅ¡§ÔùÓýÈõŒ±°Ë%¾ªW\Q„ÏË\¤/™ôŸrZt€^¿øzÑ~ekéÇïnœª5 ?bu,ìaéç÷\†Þ¸q¾º»šû¾ŸúWÏ ÅQ}¡q s«½Ô˜¾#…‰oÓ›|@ý*佚TÁŽº{º¯“Zp¢# ¯Z×±K´O˺–ÈûŒ}x {ß^ž»ì¤ä×|ËzJß óÑ]ìñ³í¶ËŸ?à½ÖqI³Ëkî_íûé È žÛÝ}¾z÷ë*}µÞÑøc@ÿÖÎÁä~)€_!óâÜ„ëÉS{BþIç!IÿäHûŸ9p2PçÎ…æUkœè/¾\·Û'ÁïlÆþ×€d¾]¨ÿX'ØG2¯ÊžÓòùÉxÄ´ÿƒÌa Å¥¤žÌùaGÀÚNû‘k?w:ùt{í5è´ó2ä³àÛœæñÙ‰Sûn\è²Oaö½èò`Gü¿c ±‹5[eüµuû4fGéëoFÿûaqSøæ 8;w18GoÀPèºê9öï‡è©WsÞPb竌Ÿ<= ç›Z ½Tð(úîÁIžGíê¼i‘ó‚›ËöºDBûûm.óUÝð'eΖÆWì Ù°?4θ¶ñŸg3°?¤ïf¤ßˆí”û[þ¯Ó°D}èüöµ¿+‚?!ñXï8d ß3¸$| s©uNä:áŸä˜G>Cæ{¹ .0ßQë`ún¤¿¢Ì³÷ÖL$_.}b#õòù¾àPVwö_Dc?%ß«uÀÞ¡xì“ôusnWÇNɰ=ððx™¾ËðœÅØQb+®Îøüö°ô+vQ);ü)õ ^%©ßýñ"ùüÓ¡«Ý†äíba—U( ɼÕ8ìé»åL(ÿäŠoI….ý…ì1“¥> {ÊÞW ý·¤ ò½ßèÖï]¥†}aöÝ'ÑÈT_„Ÿ.}´¯Œ“uŸ÷mþËs;gã0úî}~€ûÙH~ÞšþËÏ}˜o½Á.­1–û“º2{ÝBÎ+ýVÍÜ Ù¯ÊèýZUˆ;‰ÿš7-ñÇPÐß `‡t:L~ëüQè°ÏüÞ\yÈëXEúV¿×ÿ¿þüòÁõeþ¸=ö8 ÉCëÖéwúOû—a·Ô¿UiŒ>“øšÆaÍ^‹‘#¢—üÌ3ÑGÖMúFwü>ús>}íBöÑcðq~AêX5¿¬ý·©ù¢à»¬7åðÇ›OÅ.Xš9x݆Î;Ü"ÿ+séÕÖ¹Æéä% M!.*sü"åòߊÿ„^Së`wI?ªH¿ »Kæôi^¿’ ý#q~;kgâWÒßAç‚).Èóª1¿Væ)Ÿ(Þ[ñ¬æÊ àл7A¾÷ÿŒ}üz`ýAè*Ô/pvE¦tÈó7àÜà—½O¤~à%u{Sãò^úäÅñ·»:&>…~Ñî»u¡Ï‰á •oGŸãÏîùˆ~¸óB/÷²“ÿ7¢wºÕ&Þ$þ„Ñ¿Ü{Ÿz-Íó™†ð\]Îï §oo7rغӛ÷c™¦ÃgÒ?ÃØßŸcòaFÆÓQÖÍ«˜ ¿è`3èQ䈑aü0ãòºÎIäxå!Ø÷Rgjt™J­K5»~'þ2ýîìçyÑÇoÝ–xZ1> nÔ)^¤ÅxêKdΟSø¸`™w¬s;4ÿnu{¼¯T¿XðpÎùGø¡–ý£ùG‘üÈaÅ9G®?ב¾þ†>àÞ¤>Dçp3wPüebøDêÕü9{©[Ðz0éoa5­M|ôÕ{ØE¢÷t­âõíŽïa¯^>—~³Æ  Èý¤í°g>íÀû–/°7ÖÆ‚Þ Èõ)Ä7­¥°²ŽƒŸàwø»ýÛÜÐýö$øÇz_:rEê ð?™[gÞx'ÞÄïdž€ö…5:=å÷ ¶ãw.Ó”ƒÏw\#µý"yзGçB-øèU4øYúQù£3Ã_ÑþíÚïÊ•˜xÀzlJ~]ûGFêSpRÿb·8†c{ô©õЏéT7J~ÃÏŠ¾Ôþ æ…ôðÛz¯R¾»Ý‰úÁYÚi×K‹Ô½“ø¦Ôë<÷i.HBþBðjVÍ¥¯ùGô¯~ˆÎkÒyqfÓ¼Øùsà§¼_‹xmÜõð‰àMÏšS½çsn´ïÏš7Øg2Êî4*ðœm©Ès¬LGÞZpunŸK>þª5æCôhüKùèæMoâhIr£²fƒu¾×q û Ñ¿V£÷ûL€®2lÆÎI³Üæ#Ùç*Ôù™ÉÏò»1_²oÚ¿ãëø¿ó.p>ñOÜܳù¿ôÁq¿þ…û?»]pÇw³äžÖŽƒN~§–{>YV¢¹øïÍbâÇüЇç2¢ã—¼¢@ëÌôèUKŽ>›[?÷Õ ú4–ÁÎ3·8|>êñ§?.a§uhJvo¯ßÏJÜIçÜ*~טÍ\ëÉJô¡Ø]^îf’ÏÙ…7t(øt©³õ­o–â qs¼® ÷;g/ó`e^1á6ò2ÍAèMæÃù±./“õûOè?ÔW÷óL+e_à/é§íú3ð¥¾Ëß™øN–yà!?æ,ÆsÈœbsÌ4üùFÙ¡éë¥óŒµŸ¨óÙpFÇQáòÀÿa:ògu?ö{)}d¼ôg‘÷‚U|u´8ô#sµ´ÎÐ=Ù}|»ZñŠö:|¿‰\ԾߡþçÒçÆýj+ü vºÚáNíDØWß'A>¿“=9¹ôe¿£s‹ì¯©[Òþ©ÒïÆ»}¸hŒ4ô9‰K}½S¼õ]¦c÷}ÇIËê‚_§X`—øð­SK~ü÷ùõdèý›vØíÒWθM¿ ÷ê+â@)_òÉϽà¿z¿ÂΑ~cv´/ñ£¾Œ|¨G<Øýý$ú±ç·œGúê!sÖ챋ï±ÍFa?¿K^uÅì›CÝ¡Oí/¢ù/­¯•yÀö€eÿþ}ìòk;‘Ïo£ÞFðFæÊ7äê ì!íK§øS¿ZòtÚ·Bë÷e>½ó`}Ï¥/Bh΋ÞÿøMðô=U{Lã¯Þy©³½Õ€x§àpþs>œÆ=œF3„®éWnþŒÿçý&}üG~ý¹gx_â@…y?Ü"ÿõt?öÔÏ]°ç¿h‚žÙÖ‘óß‹\ü‰þAŠ73çîÂ.ÙÍ\<7e\ôÔ™'œOæ;Ú%˜çbÝïK¼%]eìà´iƒy7æ—WYß&öÈœ¿wŽ2Þ®]¾MÙQâ0—_yl7sîž„_;F¿³û¯›—¸Ö»yˆon¡^ÇÎ8†£ÖE܉>^Kë2"é»p_]ôÝ^úBÚ¿V¤/¿Ì©Õ9ž¡¹Š 'CÚDæ@:[ªAÏÒÂù©z”zY¿÷çà ûŸBN÷È„¼l|rè?¡ëÜ:ò»EºàJn(ï–­2òzúâþë†ñM_Q'¯ýÅÐþ?:_9ÔßZú…æUKÞÀ©?¾ÛœûKêiµ¯ý}ò|)fR÷¦}诡ç-Wús¶׿ä"ßnüB_}ã%ž ýfƒ~‰•Ø7Ésù]æð»Aq°ë½–Ø ºAÇÓ.cÏ|‹ó<ÃÎµì§ØÝ’G3+Ñ×Ép ;â:}=w‰Ó»Í¢Aÿ…é®}Dï`,iÄÇ#å&ù‘Rסoë:öö”Éð±Ø)îìÇÜÇ'™8¿Ô³9UKc¥O]ç,H¾YêÝÁ§Ðs‚+2³È|>‘Z? y5Å™jÞÀkÒ€>[rŸÎƒÀ®·*·"^Ò-öÌ{#ÁIßÀH:ïS¥ u£2ïÅ2Úa/È|`íoe—iÏ|˜o’ÛœŽú/[*þöÒºaÿˆþ%e?;½ý±þ«^–£Øëj™÷Jƒ÷»KçGòü2íqPíÛ"vÿÕ4ä¼ÌñV¿Cq:wÓZ>HVÞö‡+E.`']¾´Xrêër'¤ï†öiÝ·ðh8ýù××!¯·„žû7ÁŽøt*öRAêpàW'¹ÍïvP§nœ¯¡}íVõ ƒ*À7Ò1ÒÂ>’9uζqØiSA§2?@ûf)nÛ*:~¸°~x{&v‰ÔE˜‡èoèì‹Çïkçó½8ÿ»‚ÿß{ç«èÈu©ß±[®&^¾. ô™ \Ž]¼Ÿñùaìüº[ˆK þÜŠÅü')õGþÑöÈ©×1Ò­¢nHú2xEjò×|«'òlGâûW@ÏÒÇSç;{óê@ÇOKöóhŽNÖ•ßÑ2GÂÿ¼6òv\Jê–$ŽnüÚ {éý²Î?¢ÿ’‡ {™SìÚ£¨gÔ9.‚ÏVVç¢ÚÍ:ð\2¯,ÔÿJæk]¤êg¦ýqÔ ùÍÇg““<²•qôŸ:m '´?jÿ÷ñƉÁqbfümé×c¶„¼î´˜>C¾ƒ®7Äø ô?åCè\pÆÀóðÁЦäé§ÿ‚¿}¹(ÇI%‘û­öCS¶¢¤»WávPêRü%ÌÇv‡¼ÍQq1>qsìo„ް3¤o”ßd*qþõñ›óOÂOo‘ ÿµÇðc}æå9Yêò;™ã£õ{fÊõدk«!GeΕ‘º õ b§ùË¡?j­&/%ø³u ìÊ’Ã±ÓÆ<§±æ9ýê‚ÎßOHKìkèÞUBÏÈ3‰[úñs#ÿ¥¸9®~€ÖL|Ö´áüáü’>(Þ ¼Ûj—þiUÏ- ¿¾•cw×BÿæÜœÐY¿rËÃùYíõ·Mwqû_ D±‡´Ð:¼ÛèOá‡Ãðó¥~^ûÙ_?€ß‡eæÿWl~×sÙôðÿY:¸Aææ97öã75‰6?ü~ÌcmÉÿýðœy èã§óÀ̉Ñá‹wâ¤5¡óFÛù^æ[['çwIN_oÍZìªj³ð+{}ƒÜ]õ†£àˆ¬óðÿ¤þÆúx¡DÌÙõó)º9›&ÿû±=vJ¯Öè,ù9J^Ùü=~äø¡ÔÕ\l‹¿ûéFâš~G>tö Ë˜•=©x'ßHä†ô¯Ð¹³:7Èß”ùs%=ñÅwàÉ3ÙÛN£§ûž§n ÍyìÙqUÑ+Ò¿AqÊ:×34ïPí_‰£xµ‡@O_ô74Z.û]ý2öŒÌõµãö$ß%sòì}¸鳯ôéG´ÿ'ôoeé…œ¿Ôø`$ôÝë~±ècîmæN?„Üþu vžÌswÛ>åõ‡à·ëüÔ¤K°ë¤žMç<Ùï †/¤Ïº?~ë;É¥Ò¸’K„OˆsIBûl ÛaŸI~Pë¦#ï?ˆ§ú9žpž–ð+›øÌ»’¹ÒfÞÄÝÏÝ/”ûkâ,Ù¾åX«1}û›ÛØ3Ÿ½·WîKì©Ó¹Çœ;­ëñnQÿkf¨¿|v þ9Þ»äu ìÁ8GêÂZï&ý:íÆ¶àö3ÃӻѢÎIôµØ:Oq[Þ–ø‡:¿GûˆK}‰“ØÄÞü4û·ÜÅŽÝ™õ’~öOw?2§Zã7:/EãzÞ²aÐÉôÄû_…ßà¿3ù¾¬ ôýÍ&~߯5|uuv}ÊXØ Ãßá>e¢—/#øIé§cu.Œ¼–z;gЩÕÿ„îõ¥õï÷·—Þf>Eµìâ炾¥¿¨59.|Ñ‹x͉G|>ë Ÿ7m]Ë\G»ñâ^Õ>î›o¢Öün£~¸F¿uÁi_¢H9ʾÉü«ñü„nÑ×b¢WEO™+b w2gƒo$Žù=z¹)¸c¯ë'è…ÛÁç–*Nÿ´³©x/sUŠqÉ;<­Ôsû¿¥¥¾ûà*ø¤Jrâñ§ã¡7n¤‡?Zf=~¿xwìé«cLù”8|óàßÊ%§/JÑ'à#óßDŸ‰£sÌõ±?>Ê }Iß?~MöMúAi¾ÞŸ×u9ëŠOÑyºîƒÔèÕKë°k¥/l¨f¬ãü>G3ê¶ÄÿT¼°¿n"ú@ìq·Æ,Í'¿¸ˆÿIÞ(rÞ»× ;#F1â"2ß(”ÿJx–ûz~þÖ~ÿU|ò{+Ìÿoèß™~;—ÞÙEœWúÖº_^¾îv´/éW*óÂŒö°wº§àyDþê\>íÛ¨s„#íužCâEª'½ÖU°÷¤?P¨ïJŸëH_!Í+»eo²N2÷ا3ל¶Õ÷| q,§VvèBó$V—ÀN2¯§_ÀÒRÄ'ÊÖ"Ž¡}k”#ï_ 2õ)}Ùí…ÔÓXÍQW§QÀZ÷íþùöÿÒkØû:'o@ êë½bÎÄ[sÙ_éGäg:K~èî·ÊHìáëI±ï’%ÃÎ{Šïen¢™ì1zóh*âÍ`H\]ùßJ4—u~ú.v“>^bo*þEû;¥b³\‚ïÊ×¢þ0ÍôÎË9|±/ë-s°T.éÜ[£B3æ#&JŸæ-.y\ê_tN–Ò½w0ËR¹ø¾v!üÛûÑ2ïHûÃx‹¯Íù¯è_âónêάkƒDØg_U]þ‡2¾ù”û9[ý#sŒ¶{¨¿½ª÷­üí¤*ˆÜÑyÃ_#/Üòð—̃õÚoD¿nÜŒž—¸”µnXàè\mÍ?è|gS)?¹oéO¡s ´¾.Ô_cúmì°Â«¨s¾8y"~œ—d&úbÖ¦éáüÉ·ô;™¼ü@Ž'ž\8~Ã=ô[Ñ8–ÖïÉzªÞÔ¹›V¢ÐÅéëôõ\˜‘¿tÔ;úRúrë<òP\¥ãì~³¥àdΣ¯µ?ý¤ÐˇyÉëT¼É¾ô˜€\‘ø¶êi§Vòþ 6aÿ|R;É nÏÂ}‹bM ŸI_ãP@Á•ùé‹ÓÏHú3wp¿â'ª|Õ¼‘Q)6|~ëѲðû2¿ôØ×b»±?¤ó»þñKp<ÚwÑ©{Ÿû~X/J¼^ùCû#*;¹Ò²ÏN ?¾+=¡ÞZë*¥µú³ÖнÐõ¾IÐÝ–Ž‹ÂéÂ3>d_ý“ÐaôãìkýÕì×ãøÈM‰»šwf@G2Cý2Õ?æÎ}ðÙëè-ÅþX=”¬ŒúÑÐàÀÍ-þý{½š'‘¸ÕÏwµ-y;ÅAÉ<Ÿ Ïêk5 ü)rÝÉ^} 8Hï³\'á®#øBóæÁ#Æcÿ[œd]¿¢ü«ñ4£…æUŠÔøQç²fÁ'R÷ªö‰öçÔ¾$Šw–`}$ŽãØŠóßÉznº¦qyä^‰fè§#ñ°ë^dåüÚ÷geNüÃí1 ïÏx?ð5öQƒý´—ÉÜGúÅ9#þVßÏÿ|éüjí»k?[ ÝO) ¾TçãÙ—ºc§‹j$É]!ø cj>ôƒôR}šÏ'çsnwb]¥®Rûã:eXz›z†v]ÙwO©v꓊ìàSÈ-™;£~ŠÆ­)Ü(|&ñ]çÓLè%ék¤ù­?õ—-äº2ÇÉ}Ó#ŠïÎÈè·‡½*ñµgT.ª=lu÷ðÓ$_i¦¿ÇuµÿGëeÜwÝ¥Øyâ—iíÇaÆIÃ÷«Ö.”}ÁÞÖ¹›)f"?Ïh—+Äý]>Š=æwìh™/¡ýëüÕIÐ'9vs?“‹°ï‰v±Ro¢úÙ®x¾ßÚ?dÉCôVÛ=ÈÁÒÉáËá-°OÒÞãùz½æ~Ô.–~ÚPã¡*7Õn2^BNÜ‹þw¢£ÏN6ž÷ßпջjЯAçø*þß+›u_Vû`üôLâ‚ä ¤ÞÅ®ø ù’bë¥ö©ø[VûÃQpŸÚ×Wû¼ø%7°^§'!G®¾€Nw͆O®ëáÕž|;ÙL9ye8}GúàVï^Ç.ÎÞ »AâxéÛÙ¿+õ>±Câç+k_2[ã•»îDæ>™c6‰ý-ò[ì97ZçCO§²¿”ø·óº Ï• _”<ˆÚiŠ'1¤¯ûòçû<‹7±þdßw _Í;J]ªæaÕRÿKq[j§Û· Ì—nƒ}ÿS÷Çßszy”ýz“=m.ûr¬;¿܀ƋÜûæ…ó£ÎÒ>ŸÚ¿Ç}j/ ç7µ»¼–˰'7?$ºäü"ý” gþ7ôo~Üàkž‹úI¥åSµÃ5>¥uòFÝhì£Ø?ŠÏpöNojg:U¶ó¼gÖ¸ƒW5‚ý:ÉPß9Ñ»Š£6o¾ºJ©?NÓoFø¾z–BßÛóÛN#¶'Á?ù`)¿ëx«Ñ3°O̶·¸^³ìQòêŸk>RëóTOª¥ó”Î4îg{딺ÌbáK‘_è=ŽiŸàý1æ6ë­sÙdþ¸÷UC쥇1±sª¾â~zWEÏŒˆ|Ú¹¸¤ÄM´?Ÿßx5û!ùz·ùž;Ö÷äaÅ/óo¥GOüf/ çÅ«ésøK.°®ú“ïÒ¸ÔŒ"sÃé]õ§þ^ñ¨V‹§èqÑß‘ö#ö„ôù ÉGÁÏiÔz˜•u?Änñ·úþçËôÒôoǨÉ}\/å9Õq—Vc½æW#ßÒ¯0÷õÃ5îSó¾R`”ÙŽß³x|¬ø ¥‡–'±ódÞ€³4.y±?æ±Åo0Kt‰‚ƒ2nNšNçNº™Ø3’wÖ<™W¹r¹{aôÀžxœ¯ÚMæ›I½Zhî¬ôáмµÚ»:Yã_jo¸é® 7ïoO] J^EýP¥õïìþ§ð»ºMÅÎS|ïì#ü^üwÅ…‡ò|Ò'$G$¤t§~~Ș˜ç{Qóð:§'„_‘¾jŠSóÎ\„»~Çýì/J¿)Á[jÝ«?b~E¦³Ð¯Ô†êF ů|°5ù¶è½MÈùnq†Ó…Ú Æ‹óÃïß*~¿¹Ë„ÀŽÔ:Ioë¿Õ÷á?_îôœAvÍËiÙºXþï˜#Õcìí/.ót^¤Æ¿jg™BÞJúdFúÈ]‰G»?d!n ýdÕ.2>-%è|ý­Ð¹wâwìF™¯íÜ®Ž?^/;q™S ùÇ͇½,~a$¿M ÿæ 4Ï£ý‹Bõoõ: Çßú»è‹8Øó27PçZW÷ó<2ŸÊ8q9 ó %nmM[þÐ7ü®ò^ô½ñufø¦G×Eò\ø[Jqÿ¥OÀ÷‚‹×>ÄÎŽéô·nÕ¹óÛ{ÄéE~kÿ7͆âlï΄nÅn÷GÞϹ¹Y§ù×ÀìîÈÿÅÕü¿âµ´Ÿ³Wq5¿—>‘êßj} y¬ô.u0fãVà{Ò¦ß#zVóÖÞÙEàå$NÊÛÍ(ÿÏê¾äå¸àî5?åd]tÀ¾Éœ÷ð Öco[î#I?èZâÎö‹ðI¦ƒ<§ø)îiQúJ˜¾‡} òÒ.t.Š¿é¤}Ї2-øˆâe¡O©Ÿ·Z7‡ßD_iþÍ>òû\á?øAæ(.Cãèj_i¼QíW;Q,ðD’Ç3ÎÇD>Ÿ¼³,üþU.iþÓÊ›~L:‚xe¿ÏÉJœVã•ÚgLãmNÖÜ·Ä×½ŒÛг1—`ÍvÑ/2gGý'3N1žïã!Ø7ê±î“J¢''£øIë£ûØ%⟹/b‚K+ÿQëÍÏu_~~õ»t~‚oLž¾®ŠÇÒù'Þ͘ø/Ïк¿õ(ì4±óBxfÑÃF®„Йôû÷á¹ÄþÕçP<¼û¦zé½ÊÈŸ¯óý­¾Ÿÿùòf´ù2¸É«{ï&Dîå¼Ç~jÿ|ɳXVžÿ¶ÍºEO†¼XuÐö‘øëÖ¼òÈe‰_ªÜ6Þ~Éõ¢›¬‡Ì;Vœö+×8’Î!á…d½ýcöçÈôÃ.?Dü^÷hcôIƒ¼ü?Ý6èõÜ$ñ§"ñSÍßû•WcW‹¿oÿ:Ô¹—b×)}«½á¯; ˆ}¡ùÿHù‰%ý»5žšÿ#t¡óC¸rÉŸ„ðMž"o õ‚ÿ4 }@Bó¤ŽÜ]•øøÑÚo-äÇÚ%ˆSXµðë/"Îï1÷%y/åSíC¥¸ ÍËk?÷íXóÃ÷͹4 :’¹Õ^Þ´¬ã­ÒÐÇêk’/’þ†ß7 6cÿÅÿŒ”ôMÔ•<žÈe?ÖåÑÿý'é7<¸žÈ9ëórèwÉÛ1û±b?ªÞQ:Òøšæ•®4`f)HœEì%]w¯csöEæw+žÎ?7{iø÷ÎÌÑKÃéYëæŒ½©¢ä¡#é}/¸;§>Vü„ÄI¬Î ù¿Î•ݲ ?¿‘ì8¸±JÉù_…ûø!¯bGÔ½H=’Æ©ÔÕü©ÖÕ…ä›Î¯•õÑ8¼â¡´ÏF(î"}öÔQ;È.µ[ð Ä5®sÔô~íâÑËg ñi²?‘ÿS¢sþû3¸‰;ù’ñýû÷°GµaÌâ½àºB}o¡vŽ{g8öÓø ‚CJ„ÞÒüÝúþžŠÐü—Æß•4Þì½›gUø}„æVO[þê^ôåõXà¦Õnw»¬s•YìoÁöГâà$?©uúªŒÊ÷þÅß¿¤q »~ó(uͪÇŠ#¦}‰”q׉ÖA«þ5k÷Æß[Y*J]hh.è ­WÖø¼Îó3g¤D>KÎódÇuÄ´“w†¾ÌÁð·Ì¹ ÙGo*. ßÃïÄ}¨¿£} ú¯ag ö«æ§ÔO×<¯ùj ÷!öµ¿ur\úŠiÿ?«fœMµ"œ_”þÕ^S;Jç ™±¢Ä³ÜKg°_zŽ¢Noò3ÖOä›â¹ü¼ýÙ¿ÅÉkŠ|¶&–ç¾´Nq÷QüÔú]ÀkfkÆs«]!ýTÏkl(Ï"󴿈7¾öEÑBQâÏv‰ØôÝ®›÷áþõåö¨Ý1¸oÉO:qÏB—âZÕbGÁ•«Üµ“ׄOVÇ@ï½{䜎AêzŒ]ÝÑS"·uN^‡¥senN×­øWÁG‡ò$‚#׺y­« õK•>’ê/ü§®öösWy­óí»g c‰G…ð¹‚ËRœB(®#ýÈÌ8iØgÁ¡k^TqTVš™bß_Ð8¯ÆG”.µ?Rÿ#v“ê—¾_æ>h¼×(˜vEøs«y¨qóH{f™ð'rçã[ð¿â’ó<Á_ÖúÁ)¨­rCãxJ§:9ÔOZð»Š3QúÓ:8­“ó'§D®I~@q~åñbŸ1Oójj+ŽÁz§ öÄIÐû¹ó^òÆ/Y¡£ú{ø¿äkÔ¾Ó8›¹2t/ý‚­øBÏ"÷#å ñž÷8ø[îÔÈAÅAi|WpaÚwÌþyììpºu?ØÀsþ/´þGÔyÊ^œvøEšÿ­y:–ü¯õÃì ‰(}ëz¸y® ¯Ü:ø“Zð¼R¿ŠGJ]¢õI4ìgµÅá[ÒôCnhœXì÷l[äz›©Ü·àôBþ üÏÓ~иÕÿèe–lÝ&õiª‡Cö³Ò“ÌåPùhô™ßŽªƒÞÈ\>R;¾^•áû¢þ_¤Ý…½¯qÎóI¥Ž8tù°"ô,¸9µ[Bö­àg”/œ3¡'Å¡ÿ~Lè‡ú6¥#µO´¾BýÅ¥{µ[-‰Â‚»ÑyÙj/X[§#Ï%£xÕÚ§FëIüŽßaWIÜJó·šÏ´«·8Ê}+nXú¿šeÏñœâªªý:4ïὺ‹Ü”9Nš'Õ¸›úåVÒvØÑÒ§R㩚÷T<§Öë)}†ðy‚Ë5‡¶F¾K]Œú9Š/tÓ¯g=$Ži6ؾ$œÎ"õ7vMáä¬O÷§ðQ‡=ünú^èOêct†êóÿÕ˰,°·¬3I¡c‹.x$«ØÍùár@×Wã fê–ì›è c@têóǽƒ¿.~¿Ö³‡ò“ ÒE©çÒüöAušÏÇÿQ\˜à24ߪyí# ó‘µo¤æ4¯¥ö¶}(?¸\÷HÜFó¢~ÉsœWpÅÚ—%ÔFòUŠ32¿„~7ØeטÖáz qýoŠÞ«ës=±c‡i,K ¾cÉr®ÿÙ-䍨9ΩáÜG£©Äë&nUŽߨßb-ï‰=§ò_ã!y£|›3#v¼àòÔßÒz)¥ç.Lô™ÿû¯È+‘›ŠwòòßD^ îAñï^ƒû’W)%~8b­{TÿÐvxÖÿ’þÑ£YÇ'ØÍûH?s§Q!ú¾úyÑc(t®qñoB8‰_ª?åEÔGþÌ(%Ïf.k´0|ÿµµÓ(òSðUŠOSzs4Å_¼:œß‹½ªýTìœWð«Ô¾œ‚Æ[5þªû¥q‰P_J±SC8‰†pêšß—ûWÿIã€þ½•ìû´#\GëB7¡÷š##7ô'ù&͆ò¢J7‚³Ñ|ƒÎÑzkámøKò7vîy¬¯àa5O©òUó½ÎÑ¢è™Ë×y~ÉkjŸJ{Ý>öýw»·hå•áû­yÉÐ*eçúù7@§ÒG^óù~²–È3õ#ǪúÌœö)úHâþÊjìƒÄáÕ¿ÑçR|–±&”¼›âq´NIë œ9é K¯ŸYÞV䲿EÍ"ù¿Ú?çŠRÇ¢¸Bõ£¿1výú7èmÁ³y_>`ŸÞšKßm©ßRÿDãn×eÈé»i®ƒŸ’¤)8_©O õí™[daø~Ú¹wçÒÏLçµ»¿ÎÀN‘þO¡zrчZ·£òÈH¶ œ€à(ì ÑëÇW°ßÇ éYWÍÛþÏ^âçéºj~\í:ûi9„[í[>Tüæ°ü_új©Ý§vœõÞHì«zÈçMák­û#äg•h¾Côz(613zfÉ‘ ïïoh„!xëbcö7SBäý/Ù_é;ªýH v„ÚÉ¿ýϾejýŸü2ñõ_ÌUûðkŠbÝ^|Àõæâ{Áï‡úÛˆ]¡v¡êUÅa)ÎOý(Oèµ®ÝkŸ ±÷·b&©‰žÐ:Ö&~ >?0x¾WwG@W©ýãÖè?–u¡ÿº•·ÖxÙøüÖ#Ö/â1t÷Õ§¾ÇÝ2Fç%_ÖúÉÏkÜËL9)ö±öËÐ~bš—õÿaç“99Zªy O›_FÇŽ¹©øˆPþ¨|+‰Ÿ?‡ŽjìX?J¾JýnÅÑkßýŸâ»gàGëG>GìXõ'5îªsLü'vRÇ QèPùWûeøWrÍ€>‡Óÿeîmöål…1Áÿ6¼¯›¨Gp_±Ë|üÿúüÿú+RÎDè£ÛÆjÁ¾Þ+ðk¤ÕAø$˜oi/´ >/påS‘=àãýDžù³Ø<æ>›Ñ1üs§a‰žý¼{/o‘þcëàºOý$8FOfÿÛY´vé°ûú÷õïëß׿¯_ÿ¾þ}ýûú÷õïëß׿¯_ÿ¾þ}ýûú÷õ_­_¥&>ýGÝ .Ó­ñ¼‡ˆû¬ŠúûOî“Gév¨[øÑ®Ý²{·9«wð»Fïõ ÿÞêT!ˆ9Å*ñû_2ñ¿H¹Ï‰O Þ[TŽNÑ]mƒÏ?ØÓ*8žˆÄ¡œT ýúÿÿ—}ìgÿéAœÐ,—4ØgïËAä5"¼¯‚ã{{è”}\göïÅ âþþÞáAݬû}·íç.ùÊdïy=û[p¡Æ¦Ïˆc—éM«@|ð‡"è›V‡ü²SLæ?Í*Î`F-ò›gÀ++÷YDð‰Ý¨¯³?Ïâ¿:#}(>#_$'yæDÄýÝåô°Ú¦ ß•ü»Óð:qýæ8Þ!ÿçöéÏï_¿Wé9yºôôÓ4ìå’WíO^ôô-æ¨Í;~aíIúƒdjî¸ñä¡ßmA~wS,©“¦NÆ> îÛ?Ò¼H¿}ô…³8X¯Ì>òuƒrß)‘ÏÓ›ºúéýƒ<ªÙ ;}mR_ æ)Yãù¿YêÿÒ?øüàænÿ7ø4’®•ú¿pÞÿõ+rýúÏ_h!8œX§ÉŸ'gã4í;µ­Àþ·»Ž!ñ#Ž{Áw[çÓñ»uÇÈ[e¨À>ý~ÂØûyá’¯æ„óÿ¸ÅH9Îï³õWc%¿›<ì|æBeÆr“éÀ[- Ï]õøß£ârò­ë\p$‰ÆO0Ÿ“‡Û‘a¾è òPkÛ’¯]@þÙÍÐSðR§w'ù²+1Y¯¥À¯”e>­ù´÷Ó`1s¾óöŸpä!Ϲqè¼ðó9±è`7zC¾ìÜ)ð¨WB^TÎ÷}ø:;…_“Ø×–|X¯à ³R/ê Á[£?¡{r(xˆï . —#‘ë@_'ôu0ÿ•üo‡jäÕ»~A±ê+éŸB^j½N¿ \Á…#Ôí|‘ À{Ø×êÀkLºÅù§~ ½\ËlX ž«ÔRæËlÎÝg¹Àý}wˆüï¨ëÜOô2ÐmFê2½†_ÀO?#ï¼|Q¤ÝÅ}d’~¾g7K®UÐu—énøÑ´:“º?eÎs¡K ßý¸MÀ+í( >2Ob©mÁºu‘¾N³×³.+ÖÃwÕ—Cï7¨[ó^f¾¯vÙqÐ{Á)/¨K߈±NY–"NЗKå¦ùa Ö%ÑEê޷φÏÞ«@ÿF߯—7öûô¹µ™=¦ ä’ß¾@ð|‘ön §¼2‰sý/ùÉ‹æAÿ·>Ü¢‹½MpM%'@ÏÃcP§àýߌõŠGݧsåÔy~pMç"À;tú#Šž7Òå<&¸Nçn<ö½+ýµü·©÷§´Ä¾¸y >‹èÌùRžc>@&ðfÆœ¢àfnwa? <ÅjñFäaän­ß ÷ËõÀ'ÄNÌzL½µŸGæ4|G=‚·Œàñmè¦?ø†HùÆû¹ƒ¸O±·ìÍëY‡gÃÙ÷àœí YÀµmk­IÇïÆ\~^3EvŽ{¾…Ž 1Ë}«'z3GRø1MOìžÌàËÔ®óƃOžQoâmíÀ>¾’:Žg ùßãyóÂ×Ó[P¹³[ú/H~h[tî#õ§î”ÁèãÉiX?+òéêCÎg4à÷ß]ÿßw9r/OiðØÓÿ·è¥“>:…¥¿nlìE‘“ʧ†wˆúœK…óŸ_µ õ4Í“Š,ó_á@­±øÿ‰_…_ÏšžÆl#ýl‡ÎºÝ@¾ž/ÿÖoÐJž¿qèÍþ=/zݳú­:}ø†ÿe•¾å/KpÝß§~Ÿ:µoÜ‘ƒñnüBï3p3 baO'¤_ˆÛ{àkoͧsëÄ`p2*çGÜqÃï7$·dä¾Å¾ðŠ6CÎW•þM™»¢'›H¿(‘ßnÊr—J½m‡–ìׯÌÓq‹ÿÆyÖ åú=rlÛVúxÓÒ|˜ApXÒ¿`F*èû§bØcÃú/–}@®Æô…v{]åºßZ~]/&óŒäÛø^äM¤<á¿¢ÿnKdžóµ³$:Ï»4ò£i%ìÅëE±7žœ‚n/7¢¿EÏ+ð»èoÕnêÑôÿ¹®tè¾Áùc<†NjR§¢~½Gú}½sNêWÁ{Ú“!¿eþ’—«ÙÂðý°ß¾½f‘9K1¥Eûqðݧ_ð|¯²n ²9»Ò÷³²œ›Þº~CŸ÷×ø¢—ìQ2‡%uiVqÁ;?Yßd}º(|=T_x%¿Àújr÷TaêŠNÑÅ+]õ¸N=¾Y#ô,zYå²í!<ßÝ:3ÃùÞ­.݉_œº»ú«Ø§BãÐW?Ó_Ní'+ÇbødÏPÖ%sö÷BΟú)ü$~¹ûDêzÅŸ0_ÕçzíÁg[-ÁÁúÉDZŸ»#X¿g]øþý¤¼mƒÑ[‰<ο|v¢ÈWwü+êkT?Šœ0z¥A'O ½õûíëÿŠþwº¿b'ú ýÒæ=êWvQïâÖíϾ½±Xß²W‘§â©\²6Õ .S‘úZûÉVäZ=úÜ©ž´Ïmå| À¹«<3§f]ÒÐ_מÁyGìCŽt©Âþ¹G_y³³O¿R ôb¯Ž ?,dõóqÜïé·f´ªÂ}O]Ã}FŒãº¤>¿óÚüa) Ï–i ïòô£±3õá}æd#<ðë[èãéܘÇ:5¢ÂhsúûÄÝ^Ÿçm=ø½e$vÎÚ ìÿ,ê–ù wÑ Öú¬9ŽÌ•Ýgv8ÿ¨mF†ý“=÷÷át§ë¢þ™gÓGÅ~#ýC5^Qoòœ(|¤ϳý[Þß?ƒÕú:ô×ò7üÁ݃ù>öORÏœ™õÏwޏ ÄÍÔŸ0Ól¡Žl\äIü§ìßÕøàÅ31ïÂÿzö•È9ëFì€ãÌÕ¶onøßФ¾ ü;;eWä{§åðÄ5üi7¸ä?É\š¡ÐÁ“˜¬sîw‘“¢·Ì8yŸ¼4ëðgî?ºIœâô-âžÇÀ©ûmnÀM&C‡5÷Iß³¬ðÙLê0•Eáûÿ‡´s³©\ãøJÈ%Ç’,¹u¦É™$EbE’äHLE+Æ%¡BIŽÅœH4¹¥›XŒk™4î—嚘†(…d! K$|éÌçý>ÏúìýgšögïÙëÝk½ïsý=·{©OQüÉßZ ºI¿«0#{·>}"ÿwF èUä±7.ùT:úù²:çÓ- ýqZæ#¿•}È`Γú3Þ¹zìÃ÷>óööžDï‰Ýàû6¾*þú¬Báë|è[p-÷ô‹RÇ“†>{mÄŒØÏí~“9ÇÊo‚»: ?-¨†ž|DæyWø<é×u›Œ¼šÙûì“ ÿ=˜ˆžUŸ>BŸ.g94šï¿Ùy÷òÜõÙÿã^‹øŸ~g‚»_íŸ÷åø'1‘û{ßï¶IêÕ±ÃÔϳ沟 ÓÑsÍ’¥^Tô`¤ÏEOå÷rýÄ©œŸàÖÿêñ*ö¤¿²‘äûwA¾ˆ>P{\í&+_úsõ؆ܼx=¯bç†wÉ<±TæFúOÐ&Âûž{Š·+G|ú~ž‘ïÎ!úF©žóW•B¾6 ß~³ »f•Ì¿x“:N§,sÑTÿ¨¿¯ö’1™:‰70—`î0êq½àÖ¤\äB¦Ìg}¡úÖoü2÷Ý¡%çÖ~<ëÙ]¥¯ME䆸%NòÄø}{³Z¼ý!~ŠmÏF.–O}? z¹m-/Dn‹¼¶ü\λdÝ9±üf¯ëÇïסÿwhvFÛËð[RmìÔßèÃîÿ<“sV<±s-í÷¿Â_è”…}t±Ö_êÿioÚeäóJ÷ýUGøXüp¿þÅìØóTTõr0¥/÷/r>¨MßaÅaÜÃÔ(>ãŸ.Ýí¢ÏŽ?+z¸n¼ô “¾qrŽþOÔ‡‡“*QÿßÊœØ}²æµçÿÉ¡³~›è¶ˆ9ªa©¯ªÜ2Îî´þ79ý3uåÖPêÂUß[Ó Ñ³s.c׈¼×ø“UgSvì{=¿ ÌJ¾_ßû|Þ5…?SgÜ"˜{Ÿ—Âý«ÿ‘ؾêÆ<5gØÐñˆ>¬Û¸þŒØýP;Ç=>ÈêƒÜœ)éÏc;ÌgWº÷¯¡ï•S%•û|½"úç¶ñœÃžœc™–à—ŠßXåé´;…ßüOq]·Fm~¯ÙYèTpëpêÖűëzk ¡oñý2û¡·3ÐvúÉ.탟Qì ø;±‹Ø·eÿúw^†6Âo£rãâC‘_³–ºYõ?¼×óK‚gFrÿcúÛ[RX§ow³¾½lWvì蘒×ù­[Ã=ééÕŸËó «ëÙ[Ä]Æ^¢ÎTâµþ^úK(¾o%?À~–½:›q9&qÿr)Ö›y'ÖÀ<è«÷bø…ôý¼c6ñ雿ξÀŸ,Qyׂ>Àz½½£çwOEèëÒëл»;bë2žï™KèËÛeu‹ è ¦ÌIo‹>ns(.>l N^qIõsT¾Grè÷ÐsséÓ,z\ñ5§æè7±+½§“ùÍýø]é/ä>Xÿi1óŠì`êãUâyD.ÚØ×¤—Y_âi~³ýð[ïó†î½SÌ3 S OÎÒ?S?\w2·ðÞ¿ U¦Ïn°‰¹ÜÎ탨ËývµÁ¼Ä–6^%á‡Íx^ñg¬çª"wÊ=_JÜ_q/»s“½–— ¿.$>¸Ï{-”¾.Ì;v½JÈÑsÎíô÷Vùáïꇾ¼Òùµ¯""»ëýܸï»M™kg·cn¸×`!òzcMpÅ[磷¾Ã~— o‹w¡rOô±ÒââîÌ>È×ת¢Ç§ñ÷×`O3ð½œBèJü%§sÂíZ£7>a~¥¿ôøÜØõÔþp–dÿwRyà· ïº}<_RœSqÝ0i Ï-¸šó\ëŠÝ£ø‚Æq”ÿ"}Ö* y¾³Iîæl\_IüAõ«óS?úMHÜÅ; ˪B¯u²écôSäê³Ø§W§°¿­ñÿ²ÙðKqæÃ„ÏKŸÐ*eù|BqêG÷•œû½«ýs-£n÷–$ü¹²cÏQõ ¸ïUŽ >áßs–8UV{ø°+ýow±Ú»Ü¿ÄSÂ+µ°?‚×ñçïŠÝ-v‹•Jt¥s+%™u¤_|„cJœ)Âg×Oã|Þü€û;Bóƒì0…ó¹ªôé§ŽÛ£ôrhrìüäèÓ[¹Ï''âG4›  ÎêL†¯_p±gë߀}ÚñåE±ô¡qx»ìØ} 4/ ƒ·Pÿ¬qõ«"þúO[é›÷Óø¸âûþ­ñ#6øìÛ>úÖy*²ÎìÆÈßMçÄÒ»âRªg¼Ü{Y_p+ÅÏ4¾^ø•}ë¸ïOÌ‹‹£ ZÁÏVF¿ÜÉœ6[ªž¶º&"·JìWy<•|*Ƀ _ò°¿N1‡Ç}§Ï¬Ø}»Ú?gHCø]ñ)‘ÿÞÊièÁ/aÿÄ?ˆâÚ_O‹Ë ѼެÞÌKˆð’—Žp./nƒU¹V9xô·ó»tå972Éþ’ù³áê¬óP}®+{€ý?Ìîµ ¹_1‹ûÝKßIÍGs—Wc¿+œƒ?×®B>wN]»¿šŸ¦ßóËÒOÙ]ÎÜ¢p`qÍ_r߯A÷w‘>m­Ù§Ç.Áo^/ì—íÅâüšh¿73Kõ]pd þÆ÷;Á]fÌÝŸœ.رóãØsk~KÿDÁ+Ü»ð|‚'ÓØ‡Õ÷²O3èoèWX¼–8˜³ÃgŸ^íE\ëÖÛøü`S‰ÛOd$îã,lÇsK<ÉÚÙº~|2ë”OÀ^<_ók‚´¡¬+òÍI½Èý=tûSìZÅýÝ÷˜[eµ;ðñ_¡ëë\ÖÏ;‰^\·È?Ãßü±9öîNúzDy?­³Ø'û<ûpÿ^äÍ®¦ÐC‹‹ìGÜçûB÷¢o­GâìÉàúóä£Õ,Ïù|DÍð©$ìL±§5_ÔKqÙ¯qÕý8zê‘\î]Yô}?\æiÞœê!•Ëá¤|ž[â^nÁøz{&ëÍ?Î}§]b~’Ø»Ê׊7¯åÄùÊ—šïÖ› Ýæ/ãUäwäGˆþS~S}¤û¡yzÊ·á×£Ùׂ’ÜgûCÐÇÌE(?SŠçüKýjËj¾DM^äÛ†s޲_â_h>­õQUôÞw…óc儳Xú—J<ß:5 îyŠôxqÏ£à—]?|Å™5Ÿ1¨„]'8©ûÓ‘+øÝzYóþ ý;›3éU>ÿ²ó÷»H¿qÉsò W±O‚)¦qo¨…œûYõGp3}<œ‡B'YÒWóÒÖ/ÜE^ƒøÿê_Ø}·Íн?¿ß0äñÆãð…ÆôÜ%¬¸;ò=îSü*wÊVú«þ8Q?zÅTäê?ü*Ƀtö7BoëËyKÜׯ~6GŽ ¯¯¹¹!8EØe1t£ø¥ÐuÿÒHpÍCÓ¸è[Wxþ¥qÅ ³cŸOí½hß??7»8Ï%ø¯ÚЇY¿Òç͹á ôa³–ìãȃø›·3&CobÇk¾«wÓZòHJ¬Æoyé¼_=.ŸÂú9ªUž{¯Ð§Èzª øq1™sv÷Ì`åÄÒ••Ã|0gp¸Ê„mðù•±è¼†Ä¹¥äÏþEtúÃ.öá­|ô̘‚_ЇTå–3±aœ]£/¬óËä`ñAÈ'±ï­àœ$?'\Ü:•ü—àšú^Àº`ŠôwÓ<ãcÌ#‡…—å`J¼%ìÚ¼Sì…(_Eõ…Ä5Ž´ª»+NïzÇgƒçõ8§wÔo³3Úqþ™m8ß‘“ã‹A—×—ã~VŽF•«Ë}üP ûoOMöQôNXþ%è¡O:þ“È}õ¼ÊûÙ¿}G×x‰=þ„~òødúTø¬\ûÛjq?É;ñŽŸ‘|¿óâ¯M¾£?dðx%ÎAâ—Ô<+Í‹ ¿­Åzåß ß[ðÓ8ie. øš¿q&}>%/Dí]»@æB~U {uýÌ¬Ñ ‘y¥9‰¿9SKÈÜwúS:¯^%ß×þ¾ý€«¢̓’|{XKòÀyÞ-Æ~¾±˜ýJ¯&s‚©kq:W‡[3‚ÿk^سôcÕx¡êµGÃk$ó4rSò|‚;™Ãžî̾KþÊ%÷í÷ØÇ!CÙ_É;T?ZÏYùʺ›¾ÑÎMu‰»S9?ò xœäç)êWxyþåÎSüëÆ7ˆ_‹]£ùÍÁóiÔ Ûfôº?®ý½>oDß陕é/*ù?ö¾f’ï1 ;ëºSäO > ~‘÷¯tžOâ%~[æç9)2OZâ‹Zgà=N_Rûè*ì@±ÕøA”ç#u V÷tìsõ“ú.‰«S šį’ø¹Óu(ûÔ©5¯‚;+žá‚ƒhü9lG?0ÍS;Lóã¼}¹èåZÌœ¯ óƒ%Ð3}ðÿÒ8·¿¾üw¦ vDbÅWCÿaj쉃x£ÛC×VäêŽäÏ`^‚=!“s”º Í?TþVÿTóThÞU”Çß&ƒ}ü{oìTøNêT´¾É)y~ËÏ'ïå÷{‰3åd"×û ˆ¾þ+ßG®ˆìÉ?èævÖ‰)=)žê~#ýÿ…Þìw¡‡z&¯½gƒ±wµê¯Å¿<‘iøJ󶃖qÄ{_Óüiõ[Õ±öÜËý¦¯µæeúƒ™»c4c>¨à„ЧºM3âòŸ"ÿGóv$ž¦õJ?±èo)Ÿ_xa&rFìr'« ÷TûÈ;A_^»ég䄯ßÄﱆµ‘ú‘ïˆg9ƒýß»+öCfþMê!öAñD¡Å Šè»)e<úwÄø FíaWCÿŠ“Xóû€/H½E°a§fþZ³þ¿æýC–›ï%ƒòk¨½E¾èuÅ ¬³âìœðó|ô²à¡Ö#œÛšãÈëAÌÁ°Ÿƒ>o)‹>íÑy=5™ýyo(ç&q[¿fsòCÄ?±?9‚ý$qKÍÃvïáœÖü‹ðæ¶h^vî‰Ë{Õ<Å­¼yÃÄò»æ…Ÿ2ï]핚o¯þнyŸQ~Ò¨££®Šþ5/Iü"«O—Ç\Êœ’pý{5Þå÷(ßJž„ê½(O\p çõ†ðA‡–ä}I=¡ú§Q|³ñ9è°IkøLìk­cTœÐž¶ yÐ¥¾Ñ—~/æ?ª§þ²Æ­5oÆižúqì¹ùéK&Æòe‘ýnè×Ùào„Nšõ‹üŸæw+ŸýÂ|žü·mæú„¥ÌûeÍ«;¤®¹Îzvûz‘¼_?m‹Yg÷­æ}‘Ýmô{¤Ä_ ËÖFtúïà ¿yÍΉ¥/{ÔdäÀ¨Ëèb6u$÷°¶”&‘7ÿAóè$ç ¯â6îcó±Ç¦l%^-xæ5i>¨°÷[röÜX>uö½‰\wèÇZt¾äUJýÉÔ¸üg·t"ñ‡[’ð$ï4ò;š ýµhƒ<–z̨Ž[êÓœÉW ÿá—Ç\ ý«ªu£Qìàä­æ¿.ïÇsJý¢æGkÝ’w?ó’•¾ìɽâêpÝuÅ¡/©Kµªl‚¯¥ÞNë‹ì?ôï¢úÿCæ¨T¬‹žÕ¼5̓ÿŒùAþæé©Ü×} 3‡ÎoÊükÍ—ö¶®Fö¿ËÐi°qÿvóþ÷;Ìõ/È3×½c}nî·Á¦ÍÐÏ`CÇAÒ«Fž{çO¬6Ÿ?UÆÐøÙ2ó½ Äzè¼°¯‘ÿÎÙùßo¬ùÜñ¾0üdÝQÁðAxíÛðÝÅoÍõÖîÒðSqæ:ë,ó;~Ê'FøÃ™/è ê…œ|à¨~ìï¥Æò}Ô‡àòhòâÔ~½YæQ*n³šùŽÎÁL®o>Žü¤“2W¯5}éUÿZ7'@‰ °wÄ>P|RíwÒQ®»PßÊmÏùü°*.Ï[ãÁù1ð™Ä#"¿é¸¾{Ûý±ÉWCÿ*wƒì¾Ð÷' Ýiü+8Xþ“:…(¯]ì÷Y™Ì±fÇŸS?KâZŽÚ2½Vj>zQâŠáæ­kÇ빪ȕ¡[8ã;ñKšvç¾V?Úáˆ=¬òIó_4ïÈíÙ’8ûޱKþiä¸ë”Ë7ïßúÔл30 :Ñ9¿k‹¡{;÷ñt]Äß|ï…7Á…æÕy¶‡yõÒË:.ò£ ÝÛu–ÂGw]gÖI¿Æ¼?ÐÍè·Ùqó¾ð ùØy‚±£Â%£G¾ÙmîÙ¼ÌðEøm-êkR¡Ï?c¯iÞ[JŽÌh2ž}›ÞýéIüÙ‡™ë¢ñþpZ[ì •#‚×XÃó8‘wšçÌd.ŽÖ›ù›—€'ÿ0Ö½>²ó$~­ø^‡“|uÇDuƒR‡¥u¨jï¨ü·e.«Ó õ½«¡{Q èSêz¢: ‰Ï«Üü"ÙÏ"{ÿ¯j׸~îÉ9Ð¥ÔïÛ›²OR©ñjõK£|•ÅïQkõ‡^ê^¼]ë‡Ô|³àµ‹Óc÷Sq'õÓ4ŸÝ¹\;éådäyÒ9Cgv·S†ž¼²Ð±7~r»}özá_C¿~»5†Þì;Ïzõþ¸‚œ¯—kÖóg€>G=½Aκ·òÌ÷ì“)ðÕÊ’æ{Þ UÑ'ÖÀ'‰+ÌïÙõ\i¾×xœá/«Î&îgB5üŒ6æ~ݾ¥¶ÆÞŸûÛ}ðå¼ì›ä…z“ÛCŸbǪ½«ñ¨ ¡Ì_”º±(Sü%çÝXGú(N¬¨×1>Π~³ÖK]•öкhåO³¨¢õ×]Vc~‡ògpnŸ?wûCpà"?cÂÕÐð|8Æ7¯”Á‘|u74|*ö—æi^’ÚÙQ¾£äw¨«õߊ—xMáÿÒ÷$ªã‘º“"ybì·Óyì{í"¸;­;öhù䩜voí¶ðÿË/š:ÒpÑ èéÚÒÈÏ‚žØã§.»Æ¹°"OøËБ•¶úì»z‹ÈCoE~°±;¼*ç ÿ8·‚/öN2ßw«ü ½pæ2×¹‡ÑåŽAç_U‚/òzCÏé›ÍkXüþÅöÃf=wít3‡Å^x vÑ-o›uÂWïBoÜø–y.'<¶.–ÿœð»l¿bïåò½COý`¿–ŒÞ]Öq¦ì3t3$-÷rº¼L~²ÔÑk¼Wã—jÇGõ¥÷SÜÕNÜ ùI À ¥~Së6Âfƒˆ‹‰}å˦Ž'ÎØ¦;t'q<¿Ê8øRêU£|&y Jö'>Ó(aÊŸ¡;c²é›¯ò]ë^4¾¡ñ"ÍÿÕ|+·.spµ^0¸¶%v‹ôïÑ>7ᙾЧÄkç×zNÕ na-žKìyÅC#y ò)Â+´>=-‘¸ïEæåÙVM#—ƒgN¹nU~Ô¼:oD~ÿí6ì’]™ÆÎ²s k­¡c{cègm+è÷RiÃöç7ðù¥“†ì†`w}Ùyœ²úïÔ~øå~ôÃÄêø5Ç> ^qÌýX»{˜Ï­Ï~6þmøE‡åìóZôÌÎϰ¯ ˜Kä½øoÃnÇGà¿& }ù¬Ûù öÐÄòðÕuwbOÕû þ‘¼ÿ¨N¸tiòH5Žy¹×á]- ÿyº˜õüëϘ÷ÎÁ¦æ÷ýÁ•Ñ£ÁJøJò°µ˜ÆóƒF{‰+Üv:š~]ë^%Éž’Œ3ÆÇ“º*ÿ·ħÅ^Õü©¨~é¡è-Éà çøSöO‘¿CŸ>±«4N¥þ”{gKøSûr¦|©ùŸnÈ\#Í&ñœ÷¥RvL~Žàoš÷ªûã·«Œ?Qn­Ìs<×KûÖ„T4ûo}8Ÿs=ývDƒС· ú~*ÄÎ)Ùµy!vó»Žù<̨dìz'H7ïƒ ë¡×a/ºwV%°ÞªÁ?y)æÕÛÛƒ÷ͧc/}úëŠ^(Òóèà"ò¹áAè1½íf¡îwR¾¡§`••ý;øUÎtúâ,hkøÙÊ{Õ¬çר_v›Éï®IÂz}ßÿÙ{ë ¹Í ÿSff¦Xffæ1³™eHÌÌqlËÌÌ,33Cb™™)æqÌ3ÓméÓ=µû»«ºÀ{Pw™¦fwFzô<ÍýínôLéܧÐÏØ_Ù÷Á‡{x|¤rLë}%:zôí[{îQ÷n†¿šàýÞ¸³ýåÞÄ¿éðRöáû]!ùÔžS??×;Ÿ}‡Ûzú*€S’ü¾öQ2+¯„¤Ž+€;*²”xŒÄµOH îOü8óÜlžCqÂ;6Ïø;ôïÉ›‡ân¬Š¿³ì4ë¿Å^Ÿþ½2„xWûŸB× ŠÝ¯ýh'¯~´U»·Çn«Ã؇qRc7ÎkA<:Ê|øÿñÙ•²Ô‘Kkõ]ê¦%ïÞèÙÅnü\};]&{ôkìš}D*^¨»÷wsO~OþÙFTâ•Sªxtíäžô©&¬Ïï.õB_äHê]ßï-ç¼¹?t1£'ôݨ“÷{gYfè¡Ç=äùšÞ{à÷äÄ9¯†ÿ~OÀ÷^äbs¦xrÛÜ[“<Öœ6Þ»{>uRO†C7?ÿÄ:%ÎêKŸ }t¥8q§ný‰#µ<ý9·në}ì¸U¼ëh^Þ6•>ŠëÚxôiî‹ÇóÌà]ÇŸé×kv˜õ/Ý _µŒK|ë^:ì´ÅááWÛ¼}ñ? =7aëúr…8ÖÌ#ÞÿµþOû³hÞGûuYý7“¯”¸¾âÍlÌ7S9«y@Å?¸ –ÓGKêDÍ1}gþúw¿õúÄ*>Å*ϼZÅ+j]a ŽJú†‡63¯YüOë5ó Íjc±G$O©ùN#ïXòÖÒoÍ™~þ–:­ƒ4#œÃ^:ßÿHô ¯ŠØÏùªb¯ìŠé³Ùvòí@Î?O&ävÏ]|ÞÝØkcztíœ5ñsžF>&{ï—;òçÚp!t®vÒŽUÐC_z¦ý~÷ãoÐ{Ÿ¸kûcd*È÷KÍE¿DÝ ýn‡œ–|™/Ì(.Ý»E±{ŽçEnNé›°³ggÙY¢!/†eG¥, þ}A"ô§Úõ3{rÁ)›{¥Fvèûý(ÁIHüRêškÓðƒ&ÄÀ^Û”’çK±×Ó+V¡ë؃Õ&±¿sñ¯ˆŽ÷¼¾Xá ¹Wc‡ÕÌÂý_ïðÞ‚¢W¾†A”ø€Ý>6ùˆÌ/±»ÂN*=zNý¼©ÄY´ŠÆ!}Ebi]6yÁÑk=Ÿ[-Öœ¿CÿfÙÉ^d+I ôÇ€ê’g˜Hß‹­ g©÷P?%€÷“>~ŠŸ äc¥žJó½ø¬äûƒímøµZyìÆJ}ðg¤Ï:Z˜s»s z9n–›‡\jÐ:~ßÑ£ó`}âñ…»a,qÃM8W±ìòó¡ëÃyð7eÃîn/ñø¯°·¯.ä~bâ“-ûc¿§ŠÝ_ûñÊë±O®·â{7ÒpŸ¸1°§Þ-ðÖg%¯NüçÏÛ…ñ+EŸ•ʆîr:<úÐû{°¼ñì<Ëû+Õ'Î%¸{'Æ>âÂÓÂâ7·2ÀwJÜ×Üz–¼ÂòèeñýKÞó<Þa·å b}‰·°þR)±OÀ¿?;œ¿†Þ‹—»pùJøõEUöëúÊyú¡SnôWÒÍØmâŸû¶"ÿ=ã8q¢ 7‰ .]ñŠŸ×8¸æ½´Dq'º’BÝÿ–ü×¾¤jç+ÎPû'Ëìþîå‘Ï“ªBÇŠWÎr•uJÝ£öy ö+áï\/‘S‚ R¼”1Eæ{J~ØŒ·»MpâîÞøq¹ p«zb?„+Ž|ß6ù:nrõ¡ƒŸ7zqü‘£9×¼…8‡¶6t»dç>l ~k>‰C®º ?äüÈ9¾Œ];äÉW{ùäW½Þ¹ËGäw‡Ià5DÌmŒ}Ô!ç=øwÖñv#r0k÷mбø/æ6î'ñχ•á¿OáŸ;ßÁ×NFèmzeo]þ£[v_xÏë–~‚_±'%yâv—¸Þ„=è1óvz§[ø±=Þ#gÅÏõ÷/ÁzO§‚‡vßÀO¹ð„¾l±ƒxÎk# ë}ùˆø²Ãùñ¼¯ÒÁÇ3Î WªfòîoDÏÄóÚÁï—çÃ>Óþ“ë™—îÏ`áï¿ Z’Þg ý^µß`0=ð÷7sçþú÷u®ìѿֽ(þ]û Zéc /%N 86wz^øMêø‚õýWÄÎ1Z^g÷®ùÿ=¥} olÏOèº;gÕ[ÎãETôñ Ĺó†!?{3ûÝý&ñžÞG°‹ $‡&£ŸõÝ÷î8çX¿×}œsº}›s{šsj7Ù£ç»Øø¥©ÊxòÓ¾4”xêá'à~6„÷Þ^·áƒ¤ À+.~ཛ‰cÃWÓñü)Fâ_Nzý´©,öFòBøŸ›¡ç_a®+ýQjzì^ÖŸâ4ô9©þÌ†ÙØ+O×"/&|Ãî¶¿tÑcøþHïïöÙdà‹×T‡n†÷GŸNìÂõ®fýOò Fü‚=¶éöŽ™…ç:›{ÕöûËX>ç8€]žm…·Oîêì_ÞØ™FCO¼½àÉ­WsWGþî€\º$ò3»î£J%øBêävDÍDØÙj—ÿÅ—&3ó`Å3_Ÿ~$ýT!둸}0}“”öÅ×z|ÅuZ…ߢ¯ú´Â_ü®ö­1ód°á)ò¹çïžü1§UC—o|X®ÌO‰}Û¦œwÆ»+Ø/MkIœ#r0Ýþž¨4û,zÂ)ÿù¶ÿïk£†¹Ü·Â/œÏлðãîÙØ+UW`×ö]ñ+¾¿3ðìßjû¼u9-z`ÝÝ_… Çó‰à)ƒ|/Lþ½)qÿy­YWÌ»ìÃÖØØ#«&¡s¶ÇŽÿø’甸§æ-Ü& YGŠúØO›Ã?›Ãqÿâð_c—FNœv: _öÎÈú³†®[c¿u€Þ%?hŸÿÂó üä=¿[q9üò%/úíÉ"Öu">zÉ=Ì÷wÄg¿___%}­}‘µ^ [vüÇ×Á=Ç~Éÿ¥þÏÈÜ™8ŠÌkø«/ûuoî‰ærݱûÇ£}À­>kÁ Xóë¾ é±‹¤©Úk~S§<µuaëL¡cò%q2`\ªÍ~¦?È~ï°/Õ{#× Íƒ~ׯc¿­©Ø=Éß@'·0»$f«Ô n×¼"tõS_è(éì¦íû8ÿ‡·¡“õƒàŸ|?ðûQÓˆ'¨ ]g"欨æÑ‘ÖõûzõÁù58¡Šqˆ7¥ˆ€f(þbšËðÏòMØ?ïªâwøý¶z.vqéfÈi7"Ï¿~ûóöÄƽD~?ŠÊ:ů±/4ã÷ß\ö1rtöíîNäz¢‹Ðù{ô«é¢Þu»%ÂO’¼¶•7 ü1.&ûÕ¢òëzâU[Ïr¿QßÃUV#ßû&DNÔØ¿u»L|8 v”oô>ôÞ˜¯Èû#y Éš3âG Oë§µnZå[þ&rUqDjG·ùH~¨pú¿eÿ¸ÍÞ÷‘} Î"}híµ­ÿYc•þáZGa-BÿŒþ ^®Ækòoy²ç5þœ-çJ^aü-ô…ÔÅZ{†QçÖ²1qÅ¥ù¡ƒµÉÑÛ›qͧ Ï?ÜÍüݬÉÈo5†¼o—†s´7°Ÿë¯ÈÕ¹ó œ€oÏ5â›ZÄGÃ~Ežî-‡}n¶üùß¡<ô}´0ÿßýtoHzöýàÇŽú)¶‡—3k6æºw$>b3xµ$‹ÑMQÏQ| ñ­Äaýë‚} ý!qïnðû²<Ï›/ìS6ì#[>¯ˆx{û%_Fü‚³qù<{r;{O¾×)2vâîðÈûÊ…ÙïlÛ W‰Û¸ÅRIž¢¿x‚ÿ_ÊÇúçµÆï>ÝÞãgåFoÝæÚÁäédˆ/çDžûÀcòçÕë„Ò_¾·1è—&}&}¥ß‡ÚÕæÇ˜ëä:ЫÔ{h}¡âÌþê˾y¾‡w?Áéh~ÉÙ¶= uoZ_¢}o´¿†æ¥´¿‡]a)t.8MíWe–ŽC Oìê©Ñ¯Ír~o¿±Ï¢ÏRÖ“§þ¤K‘×ÕâC×ë"×»×âü àÿƒ§Aß1Žóù^ö׃^p 7wàŸ™sv'J]ú½9ÈãCçç?ûësóyu_âEùk"ÿ3•㼆äÅO9;ùœÎ>®t9ž§ÿfäéþ-\¯íqâ–ÚâoFÏú¬þ|/s{øîðOè‹©¿_|ž™õ|p|©Ñ: Ÿ›§e» ²?’ovæÆ€îŸ‚ßû4Ç®Zôšý™P™¿]@^$i,è¿ï2Ös& Ïi-BŽwX‚>[Ù?fßòÔÏl’sÄïŽ7–wíG*}Ðüu³âwïHŽûýœ¾_Õ¤q<òø’ÔåD‹†|_Ø>jñûGë1"G"nx0ïߊZ¾ý¼ßI½¯ãBÿ"雡s”/5/¦}H´>K¿¯}H|ßu%_'5ñÓ1?‘W.<ùV÷OžÿÇãìGîÑø±-ú`—JF|¿ü6ôxË? Ûå9¿DI ÿr°7.eÅ>Þ„<+òt8e/òöCôvÝ ü½f-쇟¡óT%Àý6½.qwwù½!ùÓ¶]üå/Çá«(yˆÇ.Ï=•IµOøúHû’øPƒ,\?õâ™[·à7.„\N|õ }”,?öà0Ì-ÈI2ûkû|ìçþÄNjÙ™ûJÝ‚ÿþzäIÜìWÙ°àF>ò~NpÚ¾}Uàó’=ñÒ.Aÿ$‹Žýw¶qš6ͼw3Íê ú$â󸉋ý\Éûl'ü•xSaô‹y;Ö®é@È}3O­ÁŸy’|±Ô¥iÿ?íw¡8I_­X¡úQh݃ö½P;þ¯¾\ÿÅAÞý¤ž!XA¿Ò_Ù8ž ;LêõµO¦ÖkÜÕ:—þ“>ÈfáÅó„®á#í'› ÿÕX÷Nì×OÄÃÚ¤%N×?*r\pÀÆýB胜³×GV¢÷ï&À.z::\¤{""vä¹4/ì_Â9_Â}¦ÝBÎn&ÞiV{Š> ƒltn‰Ý["rpíiôÿuÄez ¿V¹ çšñçY²N{Š}Ížƒ\»ÎªÒûLâ˜þKyÞBù,8=3S#èo ôYñ«ðgª¥ðëÈjž|5פ$/½{ù¹Q6q¯¦k±÷[gƒ/Â×á¹NCo_À¾-n̹J<ʨn¡gÿÜùP‰súz—uoú nHò¿Áçˆ}#ù%õƒíNâ‘S79¼<¿kÙŸøöù‹/wH æyJ¿p{þTäµôãV¾úÊ;Ò~\ÚÑ\nw~^zü©ɇÕ85Áÿ»–º|V9ž&ò)MO.ûbbÿìÀŽ56;’ŽÝ'ǰªNňšy|ÿòZð0VÐ!ôÌ—ÅÐý‘ð_|p þ Ÿa‘¿Ip^¹¶s~;ÀQî³ÞmÛx¿² ûbÀ1ÎõPDìŽÕ৺-ˆ½KŸS*#ùá(ø•5“$ã¹blF?ÅËzïãoVæ×üd}ÿû£]/þþ¡3÷?Ù:õä ðù‚2‡Ø‡«'©#xš¾_Þ„}kô†üuÄzø;+Û‘O«=ųk|ož!ß ô€?ŠÞŸtû|g!Ï•þ{Ö]xëÉ^¿.â ôIá¸ØE·S_}pÍó—üÃÉçè¼í˜+ôä2ùâ˳©ûh3‘¼’öU׺,©ƒ÷Mãüú7^DÂ÷©¯7ÚÞ&Ÿœ.šÔ™ .»VòŽR—ðÇ‹.‡_÷žfWœýÄ9üðÍ‘VØq‹ÂßÕ>*]î?È­ºˆWz<±xG¶ø‘m»ì ùÙŒ@~ËmK~@íqÍÏhÓŸ¸vÌ€äÜ'×PäæÅxè‘ßÎÞÁØ O~º¬C>…éhkìœgß›‚°.$„ßn'‡ŽÒ6!N­}r;¯A>6þ8ßÓ*ü¾Îô–䋪×ñ¯VDüQ»¼â.ž£ýÏøáG`?+οÕtì² &Ø÷†Í>†ÃÎàrį÷Åû¾®rú/îÚ÷GÛ!éͺTx‹<7öZ“»ëä|ñ?·´Â¯é³ ?9a+Îás?ÞSÕööÃM7z§œ?×IƒïÎÛwÎûý²‚¬ÇîëÕmiÜÝê>ú¹öz–¾IÚ·Të”í½‘³2ï#Яï/¾¬á­z÷\‚Îñ±Çö÷ì˜À@í&ý®Œþñ¨O‘¾Dù‰y“‹^Œz,™wf^,†ÿ§ýìµ?œÔ±hÿHÿˆ-èÑÙÅ¡»âïðš‰=Û#7rü§ŽÐçƒØ¿Å'³à}q\ηYäýÊ ðÇã\ï3õXÆ§Ôø£?ÿŒ|]={@âåþWOÁ!„-Éïcžäþ¯ÈãûG]ާ´òä¥âVÝs‰glû™ø÷¸MØ{S>aÇÄØÇßßÔ¿k÷ƒo­"~Xrò{Üt쬛àšíg»ˆÇÿxê¾VÞz}U÷€z”~lP;ãF.îãoŽ~¹S9à9riâmâ{û`ÏO|@ÝEçiØ=ïk·Ý™9¬(û:© ü%õn–-è³&Cÿ+¨×1÷ÖDÞä»Å9TwÖûþõY¼ßO·ñƒòÆ¢­Èxâ™+Û!ÿ%.©sjüW¢Á—¢"g†ž'û4x™·øW_®™Þ›ûk_ŠŸ+øjëã»9ˆ>ƒÒÁü>~†øéÚ¯DõƒÆ‡t®™â3´>Úš²–¾˜Có£×æn¯­}™%>dÌÞ„®^ÆÓþ†½±ÿûLGÏVû„ü¼½ÿK‹ƒ²~äŸâA‹¬ÂŽ(ÎQó=¾‰}È—þHûþjý¾y-2pŸu­J=ì|‚=~<.úcâ[èLæ_iU3zwâ¿wÄ_^” »íÒ%äð/Ðo~çÿmÃß‚›±ô‡/ZŠW¬$þdÇ_¶†\ïÓnèu•¿??ë«Õ?_ò#ÚÂ÷z$vü˜¡úÂh>Ã>_‡¾Ê±‹ƒÿH^ú¼³oÚLöYüXÛ3p?чƱ<Ïëhìÿ¢dàQôÐý†BX[¦c·lú >@æüÙ1z"‡sf&Î(¸¥o{g¶þqƒÐ|sçìßêj¦,;À»žô_Ð> fÁÉðßì‡è©×ôQÝ‚ó–¹.Ázþi{~ÿÜé{»¿W¼Pý¯5¯mT*¹&ä»Û>;öÂÝÐi¤ÈÙÙ‡W‡ñ>"ûj/Âÿ¬·;&‰àoü³©³’ü¿yit"}7´/¥Öy*n5Xƒ›l ú앜CÞòž¼q³4„þæïRçì&ŸÝ<ï^HòžN笯"82»}QôÏì|ØÉ’W3žƒ‡ðU_Qœ‚S+šàœ¢Ÿ&4Ãþ_Ù’ú0_Qòá/ŸCçYò?xR”}šÒŠ<Ö©êÈñú×ɯîlËú#.ƾ?ü8›ýmÈOÕZž˜œ»Nâtfß×ðƒÄ|ÍR£‡3¡+ß5?®%O3¦.ëiÔÈË·ûQç½÷èÀ±$s‰cʪÀ<ñ7Õ.Qr Î«ë~Ö+ó/7ª}ÜþêË÷µíý^úÅè|7ç}7괤ߎæt}n±½è©kÓ¸‘ÙÝÀÙP™xnÌàœ×X!òyz5-þû¡gèÅÉIÙÇEƒÓþœØÅ*·géöíŽÞ•º'÷õIn½E‚_þâÑŸ1È¢_‘à[´þÀ)ð’ü„Ô§j~;ØÎ'_/ycߤÈ÷8WÑ#sãrþcúòZï9!ùÀU…ð‡Ìæ{’oÖº]gOJè³@f®[›8”ÛåöD–ý|_ò[Æþ¬â÷Ä#P­”G?~§¿¿‘}8·2xÿk|%~¹[ã<~Ò¹Ñ7²S¿™33~®¿8üüû ú(ô_ÝK>Ü^>‡ç~~Óø¡Ÿ¥ÞÁ©v>xüçñô"òÓIÖõøq‹ôƒø{ïð‡5dzû·¼çÑxºõÇVì1éÓdìè€ü|öí°Î¤!%ýÍüu±û×à†¤žà¯¾œ1«û{ß—¹?ÁçÇ}¥£{þüô(v~Í›¡pœ:7ÑjÔŒõH}©/îò27Cñ­:ßÀ?¨7qÿ'ö§tuïí¯½¸Ù¢ùËoS‡ÚÿUÔñùká'ûGø G.À'Sg—úwGpÚ/Fæ ¹OÚáï? Ý6´¼ûز‘Ï s;zX%Îóáø"Ñ;ÅC÷‚s ô«û¡v´IüÏ~„üLÑóëüáÆAw³Nç¾?°ó4&>òmñÒp{ñ—NÍ"ŽâfAžŸ"Ï q2ÿÇ‹ðC¦¶èÍG«þk>òÔájyôï¿pÃ@ƒõ¼¯®ë]TøBò}¾‹#ðSGÝ'ëÃ~ø„U‰ý¿û¿Yâ=VÝÒ¬÷» Ä‹¤8Ø?{EìÕÙ‡¹à…äuÁÑ,Þˆ]-}5Þé;T•~,ÿWû#З|ÌIO¿ká_}9ç†xñOk]aäþÀœôs<…¯ï-ø*è3tóýDôÒê»Ôo霭‹I:=¥sy¯/ Ž–#çYªŒ·/vÆüØ‘Öà7ÿ¹•ê.~ïõíèÍ0£ÈÞŠ]ð¸)ñ²Õ'ùœì$ç-õ‹Ö¢{ÐÇ•‘ÄMÆÆÎýre¾œ+z¶À!âx=¾€Û,u½]ð*q§ˆÓÈ«hy‚u~äúÛŸò;é3hÏ +8qæ\õ.!7¯ýO4¾bÝŽÝ.&¸ÒlcÁU‰üs¿^¿:‡ûèÜL˨|íqŽøðçoÐg‘ä¯Â ÄîÊ5»iÉfžïKò´¥²qkÚç’ÿ¹K ð ‰2罎x”à@Ìœvå¨ðUÖÇЯ.<ŸäÏ-ßAîã[Á9KÌþ}zQðDVÄRôk‘¹åÚWWûuúî«ü¯|•úÉ ›ŸÇ^)w{©ÄkôÇßôýM§{ö¿âˆ×˜Ÿ+u¢:ÏS眸Ýãßöî‹? s¥.Òw (~úÀ˜øAR7aýŒ½ó™zA«7ùíãLàÝ»5G®M\â!ð¿f·áÄ'ò÷Õ¿ L_òfsNïÙb`÷JWÍ—˜ü.EúáëUèmh ì°ØA^>ÊÝð€uͳ·…z^í׫}þ{ä&þ³`|2êü|bë\ۊ딉‡¾{˜‹AW7§bg´«Àïþ‚ý°l9~殕ünàMúr5Þë½pK«ÖAÿß1lBÜñ»«ÈõÑ©¯l´ù´z’¸¡}ò~ÏRȊ͈Ûäþ€?[¼ vÙ´eÜOúV;{ó~XêwS‡`.ŽÁ9ݽîÉ_»¡è«ú³½þJF¦ºø1_yëÓùÚv3 ?7åkô·ÔúçKi­ÇÒ:Á@¼YúÿÕ—Æ´¾ÒŸ±7vJæxóeˆOŠüæøBç·I6·ârúÁJ¿5«`/â%ç~aÿîâÓ]‡ÞOÞ’}Cîú§Â?tr‘Ÿ?F¾Þ)#ùÞ=à…íjg ïr«‘×[âqN‚{3ZŠßw¿ÌÈ‘?r>q_´†|ðGük©Ó¶6 ÃiU~x¹µ¦:u¸Ò§?ÐgNæ kÿ sO~äÂííà\bUG>›€ýVvx÷lûª®Ý¼ }ækL¢Ñ ô`¿‰Û¿ì@ÞwŠ|h=°rt׿!Зnmô¼,øEl‡¿8͹ßXgŒôøósfRß²°ü¸nþÄü!sÁ1ìœí‰Ám†{É>wí†<ÿŽß¹©+Aßa Ÿ„~á¹ó Ä®\Q 9° ù¯lgX¿Ô±æ<)®?c ì Ã%u:OYçvÛ/O‰ûzÊß¡_ß™^ü_ç ïRѯ[úüê<•{΋QðŸÌótGå]’tž¦]·úTêÌýMÀá*¾Vq;”¹¥Ž÷çži0üp/.òâöog¼ë 8èí§{q;ò5O;èëÖâýRiuùÌÿ×îåúo?‚KË\…ºá3a=¹cõjO¾yÕøKêÖµÃ~¹\cû ėݾå©{¿” =vk3}äv& sʵϡe-÷Íó 9Xi"tõár ÒRÎ_êœã³‘Ûm¤ŸEóÈZú ýÕ—ÿÕSOþúí ^_ûÎY=/$]ëÜ3íª}ŽuÑwáÏÔ‡=UÊ’xÁ>âÓF#çžÞAþG­r(äy¹ÍÑNåÉìëñæžâ;Ïã­s&U7¢ý6ýos o7ìaÿ³4ù?+øÊ¯€^ZƒƒÖzûèPîßWñÉö:úšp’ó“⟈ݥu`Ú·Ù_.rrIò²v_üë|ù‘ÅÈ7+ÎÇ*ÿ–|ÖÝŽÜbbä»ôu3¦U§7a#þA\õTcÂÁ·.x?µ—Ü»EÙï "w´¾F¯m?ž õsø@êÝã&vÖxô¤ýô%Ϲ:þðášÐk‡é¼ß9_ÖºÈ:«ôÅþªG^Û—8,ëêþ ¾»ØžsøíñŸÂ±Ïå§ÎDíméwhŒ>Nœ_ú1+¾Gçfªê­#® ¸‰¿üЧ“·Î °w†O‡ÿ¤Ÿg ÏàLµ/»Îë Ì«•úLí §óˆ¬x#8·6‘ ¶>ÜGÞiÖõÈ©Õðô¸9çGô”ÌGwüCˆóänHüPæJjœAãwÁö:ß“:`Ï7O;~þïá?‡Ý÷ú?8GÏ·Qîlxô‘ê—°ÉÓÞ\I½öÍÓx ÎýU¼¿¥çt—x™µý)òNú‘ù[ÒÓ_˜øž¯Z!äu<ú’~KŠCsVG®EìÂïzÕ&t~X¨zãQ*ôD½Èßã9·"ûø~žRÄw6O9µ{üpRäáÅ øëK¨su›½§®Oêݧ9YGÒðYrÍ—ƒ¾N}ê“–SáßɳX•|onBü%ã{ñp'÷Kââ…fbß_ê‹"x #ïXâ1½«rÎéöSwùâ;ð¤Gšà·<ŠÞ8íg¤NÀ·˜:{gP5øñúCž×¸°SøüqF\ç™jä »SÿnÎìKü4Ö`ò [€§»vº¿?’|÷­à|Ú¦ÇXñ#ñ‡‰³1ÖÓçþô¥ˆOHŸÀüï5™Ÿøæöˆô] iju]&|=ôc<ä°Ì0+fü[ø·d,ú_e»‰+}iï£öÝ6x©[×¾žNöèQÉ ¸ß-$½`:õóS ?¤ŽÚÙ<ýZ1%vð ò¶f¿zȯ,ßñ~5öA¢‘ø}kãǬÊ9'’|ðºÐñû¼/MÊù—Ï"ò¿1þ›à›é-±k’”‚_JRÇjÆ¢²û<1t_»zAêü·bϤYx•ëH §)8æàýC…y½ç¥ÎҾѹæñ;™¡÷y½|h°?Š~,ù¡ô>ì÷ý: ûVô¼Sh¸ÔËÐ§Äø°þ.÷ýÝB?£ÑïÈs©pÇÏ$ïÛb ~}Œ Øó]“ÂR¿lLœþAú8)w‘Çr›üÆñvÐùàdðã/w°cœ¾ä§û‡A¿IþÞ©Þ×Nø+ùg)9Ï¢×ðØ,s©tžœAqë‚]‰gk^™ûâ*Ý$ónþê+˜Ïêx¿?þ”ùïÒ<0¿æÐ0ä¹Ì»P|ŒöÍÞéWÁ\<¯óÜ­='áƒùáÈ·Ž\|¢‘µöežï±Ë÷ ïóãYì‚'د”UÀÇyE<~EXô„/K¿!¯—²ò÷&vŒ9 y`]ìÃgÁÛ§k#“•Ø!üˆ?ßìârËPGS¥!¸6_ì“ôÛÓ[›ò¹ø8øð·¦œ“Ú39/SßP¯!ý%rÔåÝyľ» Ž•ú ñËìfòIô·ïJ î/õ‚:7ZûÙû¢\ÆÎ¾œŠ ÕzëLð•ÒOÑ9°qìߢÿ* z¿»vžð›×?Wû£ÚÝúcOéüuÍ{JÞ_×aNš ¿êÜ™3ì·x|eõí=7äßu^­})z·"u@ú•›ñ/Ö„¾w—"Žs˜<±öy³wÌ%~9)û-ý*Í»MÙßÓÛ¹Þ÷å°§6/Gï<ªÀÿ³oÆ.¾ˆŸèÖŠ|.ÖJñ)|þBžÇjû)R_Ö3õGôN— Ðý°E|ÿÌjè¾ktžkf왟§‚‡ÿ9)}Û¤?•µ-ÙÙ'ì¯_‰ç×?æÿˆŸ«õë:?&á`þÞèôþø.ü4¬)r8yIüò­ßçý0ÜÐÒ2Ø}¨ŸÖxÖ£X«ßÃÚÏmÏ]ü%Ñ“ÅbO]K¿ví_ä¦ÜÃ>‹ÝçOÿáä0Áƒ|Ç}=„^:Æ®Ö9Ë "ç×× Ó1 qf™/®õ½:WCýM»ÂRðcߊþ­þŸ:/UqûfÙÉÈ÷M[_Á|gí7è“(óöóX¤Lû?¸£×þÚŸNæAiÑ`ýÈùÏ^‰žMßûcèRÎYêí}à 5^§øH×ßiœ'oT†Þ;ïðóß'þœb:øŠ3 ‰Gޝˆ½‚º]£:}?üQÉCÛ[Ã"߇cD>Zï" çºIü²ñ}'gÎ]ú‹¨œ4G£?Ô’ÄØÏE#C§sñœS2#O‹Ä‚ζ¤B¾¤¯­öÙÕºó`-ü§G- £÷Ø-Ú×ÊŠ:>Š9žïíêÃõ&$„^wÅãwcñœ‚´ëã> ‚ ûþU‰Ï¥‹†ßÝâxð ÒàPã½À>JºƒÆ1Û_f=?\eŸÊ ^Z®ïëAÝ€àœl“À|ŠHü^êzÍ¢·ÈCÉ+si~âŽÚOZêªt~–~!ú`_д¿CÿVʴżë-ßÿI_CsS~ü; ÈïË|–@_ÿZÉÇuîNBêÔüÏüó{éX¶·Øo:çüM'>WÎê­Ó~X|öΔȽ§‘¯èË¡ö†ömrçnÃ~(þùøKWΩÐjìMé×iߊ<îÔ:ß7ŽøJ¸(äF9^þÅuÒ¯ÉX•ÿçéŽ<—8¨vú{ã{äø’ªØ¿9ŸOï*~Gä½ÿdBèNú×Ú£7#çü]Š_m¯hˆžê¾{åÅ øàËmø(ïXÖ3оÕÁz?¥b‘}!é3зñó9ìéóîöîDðÊnÛìïðëÌŸÐS­#W"…!ÞuVæ{ô­w+‰¼ßyœDÐ^âym›à׿[*¸Á×øË}§P/±«z]úZø†Œ…þß“/sjd">Öñ½ä¡KàwÊ<'˃<ý¨ä«ëL$ï¨ó_Ëì%Þ®}˜ªþÁ>ûéoå¿ô˜c[ë=ô|z;ë]ÿ[æ;ë ì‰GiŸ.[kG®KüJæ|æG¿ ó‚í pF2¯ÝW9å¿ð»DúܘEZsŽ2KëÝ›Û?ÒGÆHÑû÷Zdìü\+‘Ïe³B¿1£cO-þFœµL}è>s"ð#Á#Ú©7§XIŸe«vJîÿ¡(ŸÿüzœÒŸ1¥?òq|nì›gÈK&Ëþff[‰›žÄo|³=§!ë¼D°|EoUmŒ?üù3î=öe¤ç{—z’y3ZGà×ô³‘õza§?¡xëS4ösaløâC:Þ“¼E/½…þz6ù­<úoÈ!öÿ>uEZ7ïl´ø¾ó>HWÿeÿ òìa剋_¤þЫ1à}d®¹¿ýAúÖkÈ`™/o®NPçVæXNü³ÙáPqK_ýìkþ…¾´?ƒæßtž±³32øÔæ¹CáN*û±¿´^9ÜHü_ÅJÿO·A,pÚ2Jç[ªþ Ì·Ñ>£R—gv*‚Ÿ4å%tQ9+r*ìènüèýQôÀápØ1É7 I'vëgø‡©]왳±÷ÓÌ‚žŽdFOÌÿŠÔ¸ rWû¬HßrëkUä˜Ä±­Rã¡ï‘ÈCI\Þ¿ð‹ôq*B|0Éê½Äî°Ÿü ?•ÿ?_æ8õ¤¹mòUå'A¯²¡'ŠGà9$®c¿£>ÓÈV~y“Òã_·‘àÅ;/æ~µðÜc§b‡Í»=S’yάÁÔQÍZ ½>ËFAú:OLäxž·Ä‹Çþ÷Jý²‘¸ |ÕâvžÌ)Ó>f$ú_ùï¤Ï ía=RÇë€Ý/r]ëq8Á¥è»Î9ÔùÞŠÌ3þ»¯C¤‘ù¾Õ‰oJ}»@+èÿSDæ˜7{O\gÛyü#(õ>F-úˆõ<ŸÌ×z«aEäÿÆߺw£¹ 9»©ô˜ÕG}úNñ#]Dzp?rä„ ìf÷Sðíì’˜iˆED¾Zå™_á[Ò»Iòf:—Ô¼’þ‘þé–úJíç©}D­XÄó×BᓌQ1«£lÞð©ÆÕ:ðµô6’tB>,ˆ].ñ+£ä7¤/‘¿Úüúx¥àÃcà<œsYà£ÕØmÆ/w°“uA^'!žjé†Qp?ôRz ûZ‡þµFŸþà’'¿^#&Æ.;ÓX8‡¸þòVøÑU:òü‚W4vlFOÍ?ÀúWæy¶ê|²Ð ÷‘:]•ÒÏlt©}·¥Ÿ¾Y&9q¡>qÁUU¬N¹Î ôÿˆÝÐSÓéĹ_Ÿº>Øq“AwáËCë›|ý¾!·$¿fvüùùJpŒWËà_ïþžõ½ü€Ÿ®9ü[É!”`+ò¹[vpùY'@ÛÚAg›Ã¡O>^„Þ¿¯~³âì2’ïZI¿Hgk5â”=vc¿œzC|]ú[›Fƒ›¸ŒYè/K_;{àü«‚ °Ó¢¾DÞ7©€ý&ý<z¥y?Î¥³<Ò|ñÐŒì§ôóE§ÿ´Ñçõ {ûS'+uëº ‘‡:¿ÙvоíO/¢´þ]êÌýI¨{\Z°Ü€þݪcþ ý[×_.sÚÍ1ù¡ÿÓAèéƒb|êª.Áp6Ç Š‡Ü—:bÿƒNÈõ„—½øV°ý‰}¡&zàíbâ>2ïLñ­öª!Ä·Ö8ð·7Ÿº ÁÑXv_Ë~0žÃ®ÿóäýÀòàK’æÅnÚû„sÞ•JúÄ„Şѹ¿NP©ÀßôÇy†œs º8û»WûVHÿü`{ŸßÅH]/¸OËa_›ˆÿ~5|ª}ý#÷ʾ#÷Ï#?%¸”À<¿{‰°WâÏàù¯ã‘ý7´¸žÑø±ZæXý{Щ1ûûí`ìFécMè]¯€þèE/kÇ ö]ã 7ÏÃw¿3LûÙ˜ù™e´úÄ}#¾%n+õfÆï;¡óßrc?¬>>UOìeÁ“i\Hý_çÍïÐ…ôÙ ÔJ]•â’í©IˆÍ4èŸÐ¿âûÕÒy—Áç¹4$¿º‹ó’–9wþµÓ‰[Uè‰Þ9ÎÇ!Äc3Ä …'2²¾öü^ßËà6|"¯Y´uZ:ïwìTênn†÷ðt:ŸÖg”9pàˆ­ /ÀD™ÏÜÞaÉoY d ýp‘|“‘…5#–àLÛCù¹¨ô™=Ž'xÛ^¿WÿWì¦Äø«9cµÏ!7ÝžØ'8ùI øžô©Óù’þ.£ ¿ïÚ@o/JÀgG‚øñ³Èͦͩ#‰þ=ö¶:gUø^pPÖÆX¡ú_Ù÷Èû9 'b3ïÉWÐ\ž“|Ú‰ÔÜWëè&ƒ×v«àê{ÜBÿT¨È¾l*ƒÿ¡u¢sâ߈Ÿl¡×d¾¼»¿v€àhuN¯ßøÿ°×Jäø¡gðƒÌ_Q{@ãí*7ýÕâC/£¯zB>ËI½ùýþ ýÛ9âç”yÂÚwÂ0‹º©‡ÑøâàÔï5VoÆÎÿi?vNŠw<¯ÌùÔGþ¸|èÈŠä÷ï”x!|tó1ü-ùl#æ><_p)*y™7¦}ÜÒ—‘O‘©·¶_gðòÅÆÎ¤ØG&r^E6ãwÖ¼ãýßÚ2<–øgFŒ±ôm}9øÞûÐÅ {Ðów˸Îè¨ØU’§Ó94N¤¡í%©tÓ´Â^Ê'q^™÷bFGîZ±°¿5ŽjÌŽ ýÆ!¿fì#g„­‹]­qÚêù±óz,äúû c×ÌzÃz³ ï{ö£îLç7ª™–ëïyÄukßÂÙ½$ó œñé¯kN‡?Ôw&õþ “x¸y+ÒRÏ~ ôQž¹xäýÀ¤ÎÞí×z•yÃ> ±†sÎ/‚°d~q ÚÒ­ðCº´ðÃoÉè·Ÿìqô;ýúÌy^v£¬gÞäò@{FæÛÕrB‡·u“ÖfÝñ#:l*všÌqfTåz¹Wó»gÑSáG§¼Îsõ¹I¼·FYôÛõÂèoCõý5˜ ?þÚÆË#XöIoî±Ó¸q`±“Ì{ýჃQ¨çZZ—xɸ‹à+Âä»»9v yRñ/ìàPuÞ›ÆUÕ~ñ‡íŒ|œÿdñXì-ñS5ìë™>é\ þ(y:ïš z›µz= î[çf[__aWg¦_¤{•>Aê÷Û… ¿Î ö?ˆ¿J¿dûDèPæº3Û"ÄǾ ®9ØqÄ/ˆ;œÐåì‡ôc4ÒgÂî9T‘8Žôá±Î=å*íE^%)†=»ó'äÙí‚ø±ï¶CŸ÷‡ ×sÆÃïü‚[8=ôS¤'zCúNi}—9á¨ÌÏžŒß(sìQ·yÎMÀá9üÏèÿi-ŽüÂc¯KXzþø Ÿ‹“wsâ£Öùy¾:•¹ßø[ô­Z’»¬^S¾ç§®Áî‹ÏÒ×MçûšÆ/Rz}:{éÓ3ì`™¦rMç–;Mú’¿×y…§ª“‡Ý ¿Sú–iÂàó¦¨àÐì^ñè h÷Åνš’¸M·ƒÐã ŠÒ£3s¯¥žKûç+Î8 ‹å@®ÅªË¹=‹Ü_u@úð;'Sr¾qÓò÷?çBoﺀãÞtŽ8níåþ ý«\à—;Í$Ï+sëÜ& x~™[ïò+ï2Àßô&û%øèþçuqøwå èTúÓ93"/&óñ‚õ(ûcÔ†~/Š¿ÿ{ è|Èqì'™;®}Z?nµËÊþKþÍNÿDð{öøŠüÿB8üÄ©]‘—׃ˆÓHžÉH´½!ñV3i½?‚} ý µß§Ùˆze牉üX°ÆŸ•¾\þYôô?8*~%s6Ü ›§$}t3¤?y*þxœ/Üß>IܨQÂM!倯ýWöIì ¥oód~ìÅ‹©<•¼Y¾1xÝFÁßK¿íÇc¬|ŒœÛ„9;ˆxÈå_Ñß‚s±–OGî¯kƒ<¬ú6Tü\ýB­ÛÒ9½îÁðM¬’ÈÁð ±³ïÖ…Ž¥ŽNùÄ—ð2|-q«lVøHpo¾EB÷úÒø¾Î™T|ŽÖôâUæ„A<÷Ъìç±ABww‰×¨¼¿’‚þJÍ{qMßd\'kwâ8‚‡°÷ï„>eμñj ô,}/Œ%Ç‘#‚wÒyŸVú²ßëׄÚ/éû¢ó•­¯ðŸâ^ç´¿\ûôÊHp'2oEûGø“Ü&n´7u·U^Sw¹&ÿi?ñNOðú>¿xG>ùèüè ­‰‡¤)‰º³z¦.ó€Ý2ø»Î”úØCF{òOŠÓlQ¾Ôëê\`§PwèUú|Xáês2WÖß.ô%ø0í3i¬-Ô>Ê9Fª­²¹Ôd¨¹ÓþÓÉ'‰ŸeG½º0$Ý»q¢Gî§@^¿ñ!÷J/çÜVŸÄ¯“>¾™3ì êÃ{üÚØ5—9ýš§;þ̹6çÍ^’Ýôo¡Ë|.ÏSµ;ømñ·5¾go ‹üÑ>Ñjï¤è̙ʟá™ã©}0¬OѨ[Ú· ´Ÿ"uøîšûžŸ¡õ¤þê½Á)å¬Ïœ´(%YgÉÃôëÔ|TÙ#Ä;w_Ñ!.y›Tù×ù¿ÓA¾aÛ ðD]çÁ'GKc÷¼{ÿöiâHºÜLëñà ÷mgߤ²ÆýÌ{9ï„Qèçuwô1ø(ò¤IVèMæ.Xvâ„‚S¼Œæg|ã×s^âáoI“æ•ýmz6ƒ丹VúzûÊôA ÎWí};QjärÂÌÈ™gð?¤Ï˜Ê}wH Îq‹Á9Šÿjl®Š}½ú@×…ß/ÿŠÝ(N¨¾$îùü«þýG‰âÑ™ù62úqåQü‘¸E°¿—šf"tøÙAÎ/IÁþjÿŸªòXçbˆ~ ö#A\G¯«}-wªòÊ>’ŠïK._ýìKBòö…Ôúc£ÔRü£¾É°gsÂß Û™sU뻆ØSÒÌ(ô~ûÍ–÷z«Áö­HÖ}…Yg¡ƒä«6üLÜèr2ð‚ÿÑ>f•#Äé´¯™à¤õMu[„êag*ɻ⨠ìåùª4 • àsEærJ? •“9V*Ï¥öÏÑ>­Æ‡EÈ£=ÃÐê, y]sëYÎCú,(ýªÝnvºÅ{Æ÷œSÉ›²ìÿ„ðØùbÙy£_­ôËöM»µ6$½Ûå®Ã§³§³_•×qŽ/ÒÀ÷/¢ç?pÊYüoèߨx9+sî쨩‘o_, I/îóí(NZû¡ ²^ÕÇR'æt(Ï\€IÐ—š§–¹xF”áøSKpÿák±[UþTI°0äsÛÛ‡.©:뼘Šs›Ð ý$sYrEú0úwœdÅÿöݸDÕÓ!è}™{ úÏw"ç–î:Ï#rÑ?k-u ã×Ã#“±¢×þ{¹ìÐÎ ùµ zMò„îÅíøsë°oÚoæÕøaw;ìuÅ¿d[,yÂÈ=éc§ùF÷‡‹„_—†¤_«yoìT™¯«úØ·µ t¤yþØõy°‹ÜÍÈ Á¯øk‡ÿ†&`¿¤Ÿ˜£.ó"R½çóø°È+Á¹k¿c;CÏPrRå½ö‰5_!^´¶?rõIQâ$ÒG?Xþ 7~*‹!sÀ´nRûnþÓ—ý©Žg¯æI¤Ù!ô-öšÿ#ç£õ6‡ðü_G!¥¯âæ·l¯Q?)ñ_ÄbðyÒž¡ô½/~,~ßÇ N@ügyNòæb‡ðtiKs®ÞsîoÓzî뜫Øj¯9Ó…ÊÇæÏkŸß[›ñ{jßbý¢g}{¾çTÅÎ;ض¦"Ú4ƒ^jÞ¡¿Öƒüô{Ì`QW·1Å’|­rË~¹ˆsî6|ËÈ£ð…äM|•&r]±W|‰b/ÉœAŘqG£çªW„†¤ŽïôêR¥Ÿ“[ï+þ–Ê“œ{áï?ì’>‰ØÏÓ©…ä?§[cïzÎpº¨zþR;vlÖÙ#7rCðÂï4/=DÎõ«LžsÉø^ô™}­ |'uånéËø=/ñ=ÚŽÿ“g1rMpøö™ ÿýÿYÇó Ì+9—_ ·Æ|]Rn(®Aç2™çfãÙÎÿEÚÑŠ€û™ºžõJ^Må›Ú#¾öe鯮óQ¡ú!°ß2?Ûùõ,÷×9’åßzúÅ™bp^iJ²^©¿1¦UD/„+ ýI©ñî ~ÙŒ¹ðélƒsO´’¾nëÎ y=ÿéÂèí,|ª8o÷\ ì’hiÑ';Aÿñk£¤€ÖËiÿ]÷nQö­þ[ì6Á…iüÅi~~—¹³N¡ì<—Ô}ððRX_¹²œOÚ•Ð{ÏÊÐWÛ\Wqçù—#פ ³x6ü6m¦'Uëý­¹Éø<27×—þž:wWãñnµÃÐÄS´§î«öÛQ=®ø2w{ ø§uoä˜ÔךÅW"7DîhüV믴ñ?}¹¥'‚C;?tÉ\öIævúFÞâ|¤Î>€¿.¿³îJä¹öå;;P—övç#y.§Ý~ä‘Ì P¹d̪HÿP÷JDžOã­jmŸÊ|û§ò,X®CßÙ/¡7îw ¿!s ¬Ýá9?‰gùJ4„nSŒ\’ì%Ÿùý£¨\wPäžâ=>åyDÿi^CãŠtêNF>JÜÚž_~’ü¾Qh5vóŠõøK2*Pos|èz"™÷ ëWܹs|¶§gíƒC KÍH\@õY@HÄ@­Å~H€úÉþ†½áW™WlNšŒ\—¸œèIöOô«öóR9nX«‘ó[¬¹¿þ¦Óç‡â‡»5Ä.¦«Ó§üìt¢~˜J÷•þÏf‹oè)ñµŸ…ö v;¾gNeæ—«BññØDœ“ø§½Ý¿*ú]ð)»LæCù¢5äyßï„î5,¸që]øAüX£þTžóÁ3ö)ö^>K¿'£oXä€ôéÓ¾5ö•œ—ø«Æ¤ÏЙöK+Öý¡ñR•³›žkËö¡ö]ü&ãÏðé±Hôï¿Fû!ø—~e?¥ï½•4 ñ®ÙG©g ôÛò€8³Ä‘}}Ô>ùk‡¹Æ}$_àë7¾ÚUpsH:QܲÑçàßêûó¿{݉:É»^ü?ñ7$h•‰Ç9ˆ|W=juùŒ=#òJýX_òå<‡ôõçs¡Oé/翊þ8ÿ³ÒGì‰K»¿ ‚ÔOx¸y*2ô:q6t’Ï‚¾nìDn(^Tò½Š×ù NÝ«ÈùÖüµ¿x‚ 3?1æ>†¾>ÖŸ$8¤@Ÿù,u?N²ŒÈÕU³£¥>Iç`m3ß»r¼ØúÜÄ;2ÅY$ëá]úí)žÐ{yRU®ÓÐbtÎyøÔЙàÓu®ˆ»ïOâ[’×Ò9¹æÌü Cò±öíV}¯óõNÕßs¾Õz²¡Ÿ d†n%ža]}&Þý˼C•Óš§T}k›ƒ^èzkÜ~:¼ƒà[û+ó¥ükž„â7ÎBôí°©3ÿ ý»E—ð®s~.ç+~ŽêÅ9i&P¯(yD«¨‹þ+\ºÔ¸rë$ȉÓhü$P/¶ð,r:£‹=*õ>:÷ÉÙµ9«ø É3›Ñ»‡’‹¾äÏ‘/‚Ÿ¶[ådÝRìÄí¾(ä9Ú‚?’O Ä7'nZ~-ëžÒjQÈõæàH='•ŸþõÉ<¾Ñú‰@ß‹ë¹Ï­ˆì‹ôÛ–gØYo ØÇ;ïÃÏ‚? à?DiœXõ“Î}öÿ6y(þ³úãŠËÕ>÷ξ‡È›'éÐ2Ç܉ýz–yV Ì%jÏ-NkÛ äÒÔ6¡òÅN™ÐsŽÞ B>¿y3èZê¬u…Á5JÞ@õ›ÒIö£mÎEòÆöõ ì@ñãϤq4«kÎ?ßxäùúÇЩØ¸äÇ4?ªþ [b4ô$þ—k4à9%?aÜ~Ÿ^é6ö¶är^ô‘æwô\í›ÑSâ·ûœ†¯;WF¿ Î,€×”¾°NÕÆ<ôg3¿uC®gM;/ÔºµNDìBïÙÖõÕ!é^õ¾ÊC«onø\õSÊè ÁϘ3Î@ÿŠƒNOø=÷èCÿN‡òô\±Òú£NƌЧÎ?Ý3—}ž¾‘}‘ùîÚ¯Të)£ö¿Æ 5ÿh†‹Ÿˆ?d ˜Êþþ/þ†³)%ô$ýÞç´Ù?ÆÁ÷Vççwb7kÜDóÅæÑ|~øÊ¶Çœäœn9W‘—VÖ뜓Ôßû«ÈÑ’c‘ÃbO;Ógã/ä.Ës-7o’ïÒçõ•n†½-u¡¾Tµ¡é“älk‡0»…Sÿ:ô&õžš'×<•ú‰ná›Ð­èí£¨ç?“ß«})ñsí[¨ Oƒüö·EЇèY߉‹¬»ëOœâÀT_.0ø]ÙýÈÑ?nÁ†¬sw^èFêM´~Dçaêüssî …!ùÇé` ?S¦…ÞN •‡÷7_ŽÝ"qd­ëRüŒïÏÝø%K""Ï¥¦Æ…œ–‘+‹*?œSÀ×øÈ•;f¼Å<ß±¢ÿ ý;]ª6õî«òJõ@¾[ÈWÅiJ}ŒÚýN˜ŽÐ½Ä³5ÿ˜7'x\§üXü±KO§yJgOJèBò*F™ÌËCÒ‡âFü¦s.tBN¦{͹‰­þ€æc_£~EÀ‘|šâ»4_­}·ýs+ó\CâQ¯¤ñ§CCñq AòIê'¸›OCÿÚUìdÅe±âàgÿúûI^Cý@õoÌ[ o%N vt(scqcéClõΊ¼•¼°Æ]ösouäV̌ȵÔ±3Æ·!î«ýü¤ónÌQðSuîºàÔW³3x#û±#?öJ£8žÜPü¼Ùè(Ï'x¢€½ ¸Q{pKú§WÏHÿ«,W‘ûËNó=#=q.‰óþÝ~·ÿg/ÅÑæ™HÞIéIí"Û®ñN«îgÎIú×òÆKªB·—QÿUï£çêïŸ9±£êªte¶›Œþ\žŸ{ê4ûuìq¨8†³a6ëT¿Mðê+kŸ#ßË蜇ôÛów[;=$?›#Ââ¨}å/túÔ|R„’Ë Iø(í óªqTÃ&ýÀ­5[Ù7µ/%^åŸœï±žß ¾@û{U§òüŠ[˜—‚ó”~Æ¡ÍнäwµCóÌj§¸ƒfò;É[™Ïrß#§¡ƒÏõ°ÛS”æù%ä\ûMì<7~üÚ]Ûé!xKíÇé)?Jߪÿ©W ‘øaŠÓ àíÔž|š;+ñ]‘‹f®•œ£Ì;Õ¹»æ©êžP?JñiZªç¨ö¿Æýዬù Ÿmá¡ÃiÍØgY·âÇÿ¨ùZÅ1:1bq>½nóœeâ4¿ßLê‹=!~¥âRàKñ/}EÃ’5ÞÔá>âøZ¯‡/î]$牼˜y’çhù–sl} ¹+81³óFèQð$Ú*ÐWoÒ]äëч|~[yÔÃâ›"üß+/ù%ñw´>&Ð삃<?HçSi<,0çDô±9?%öš•ú¾:,”ӵ߲¿\ ì6Ésš¯†Êú3ˆ˜/!ý>4/ªø'k÷áÞ÷·†õò°Úÿëÿî—Öíð«2Rq:jú^,XòùhÑx\‚ùüç"ýn}-*CO϶‚SÚ’ >}oF}I<åQ*öïEð W7»%Pgи4çT$ÖŠô£¸})—ø·ÆK‡jEú“x¬ø³šÐõk:p?¡?ÿÕN¬_æ“hÜJí+­T?ÉyZºÕyÈ’1ódG¾Kx­›²GÍU'¨ø¾$xÅK¼Ü¸ZûSpê:—Üþ4—üEÉ»÷oÁ9•YÉþ Î4˜Î‘ßÒ—Dûü©? zQãdþ÷5ÈŸ}·¢÷þÓjO?ºÍÞò¾wnˆG¿Ö÷ͼyr¾Î•Ëü?A¿ÿÓ/Ó_«–÷¼å¦ÂA·½<ƒ}¥ÃäN<ôO—ãÞ¾Û'ôá¹™:ó‰yéÇ.ø¢`{¼÷.¸N3Ü^ä¯à5_iú²óYã6¢OÕŸ Ä õœ$o¤q@Fóíoôç•þFνZ\ã]ð‚ã2§„ο ù8«åAäœØ…ŠCQ>Ó:¡@}¡Ô%(Bí¥k'LFôŽØkŠãRœ0ŸÏ É7îæÓô Ò‚8UÎÌÞgsþOУØmVü¥S…χz׫}”ss;xqr{òßëÿ¯`=RÖ;÷¨#ë{ç¶ds~_oæ}¾äÍùs‚Zx|ìß#§úÎìâÑAÖ×½½ß—‰×Ý£² ¼¿[Ã[ñÿKQ¡›'éø¼%•w`ýÝNädcG<üÞû‹‰ÿ£¯ÿ^ÿ½þ{ý÷úïõßë¿×¯ÿ^ÿ½þ{ý÷úïõßë¿×¯þ²ª”ÈêÅ[^í¯æÅqì$îkl ïïÓk2?e\·ž^¦|Mï=øw^¼Ælµ ¯Ï)—Š÷ÃÕˆ>]Òß{ÿmLïºFïæÅw²¤õ®çöÑ‹ÿØóƒ·M‘¸Ðû?<ü¸oñÐ&ÞõÇ•ôú›ë3æþ/ôÿþWðùš}˜<´inöèÅ®7Σ ÷ê//ç»òÜ«³±7ŜĹþA´¾ûˆGXF>oKúõT}JþäÂ8òH5:ç>µüMtúû;Ï¥?BñcäŸ+µç{Ûcó» ÑÀ÷ܬK¾g}úüË3§¿ó„¼ìã¾ä “¯ôÕÌ@þò»óäÉzÄg2SæR~èý·”ä3[µ$O¶"¸wäù|¿×#OV½¨Ô“å&ß÷(;8ðÃô1VPïî‹p‚<ý©Z‚#_î¡ ža^éÏó’üi&úÁ¹=öS/½w yÞ™ÈW4Â´ÚÏžÂ>Ñ)ø:Ô]¶Ì@¾åSRò _†0O-Ì[/ïâäMâÍÇ2GŽèý}Þ,¯îÉ]÷¦åÿ¯ù´Ã«Þ~ C^)ONéðŽs:ÛœX/éã—Rêwµß߇+à;:lƒþ~kM>6z$ò­2Í ùç`BòVwJC¿"q½ 9ÇO2g`Mp;+À/ý˜C쌥NÓÉÑ”÷ôÁsϧÏÜnúo™Ûpݽ—É7OþlÙòi¥¨2Kg3+%$OµTê!¿$ŸUŽ:{üxòe·6qÝ1¡Ç#Sy¾ÇÔ}+€#\&}`#§7’¥yØÂô0¦ƒóý4~Z؈ýK/}Ë»P÷ì› þxZžýHM=¶}œþ›v²‚/Åufœ"ïí¼܇þüÆ@æ„:¤NfU"êTÞàû…ª‘ÿ²’|püû‚ë>…\ê– \Ï|ê£Ýíñ{“+Ùš'Îoä‰ôãrÓƒn«IÄY3ÀÓœlÇõã„n*,„¶›Sú·ÍŸ9ß5ÕáÛŸ·ó½íûò- )‡ÝþàQí2ÑsßÓ§¦îY£à`ÆxÎwàã'æ†ä/·£àëNz»Ásï†Í’€þ^Wç‚o²ÀWÅ©«³—Ð_ÀX@Šo,õ+ÆÕìÿOÑÀS.ÜÄó•>Œ·ÃQ¿·yúnÌIðêI?‘?à“NÌÉpÏžÅoæh½÷úûÄ ê“7•¾@cÐoŘkíD)F=ñ©âàˆD¯Û‰œë®áÐÛêk³å9=;Ã3¦gwøG'øùS—æÝïXQèøu5Ö÷Ã}è(sKäPæÜu}èóDÀÑF =¯-Ï9|qÑ×~ðþVlú¥ÙG ïûP¯è_ÎÝ÷úòòD7èl~Ì•!å›™´+xk8±ÌY¹“3ðkúÛﱎž»Ð?7Ó- ù{+Aqø¤Nrꀫ‡î‹¼æú¹fP—5ö ö”Ø[¾w±Éyzrθ >Ò~Ø‹u‹go¿®­Ì|ð¡"GëôuU;Hå‰Û²òdÁ9ômú̘?lÏpŸÓS¤NátÒ°zúq)ø¿ÖÖo´ƒ¾_ †¯ͤ _pJ§6ÁwÒóùõ­ÖêÌèËà«ÁmÁ¿G¹Çþ_”>ã)'P¿+úËêù÷sìÐëšyžçF=¥‹:çûüîϹ<ÿÏå±?³¤E>‰žò ïŽÞûÃWïOäØðHØ­½¨{ô¥‹ ]%Inÿ+¾Ø• œÈö–ìG˜\ØÝWj#·¢Ü`¿¦H¿¦NàXŒa‡8OÑNFæñù+Þ–ºÝ<œïûQè ±«Ü,[°¢·çÜî_3«çû+u|þÎ2ãm ððéÏçL‘:Ý”©‹éY ~hÓ“¿êGXÅ™ÛagË„}”½,ç¿Ü¼ÏãDZÂó.~níývìÚMàðÅùþ%Áó_>îç÷ÇÜWôšê)ó6õAö yö#øx_ï‹C®7ØÞ“¾GÔ˜m© tSÈœ‡/à)Í n¬sÁtäÑlúaë~úûÙ¿G§àóÑR?´æ9ÏÛl0}è6€·WûÏýšù ö_§œwñBà7OüÁ¾U®ÍsäÎÂü™–CÁ¾м:'u?“³ý†#çW‚n}C¿Åý½]€:zsöìÜåôS·wSéÔ¡¯œ¯xYûõBFÕÅÈ••ôÛ1f?‡O~Œ7ößпù!‡ßS»Åœ4¾nHßB³ç;ÎoÄž'j>Î)Ü'©hÎùµ©Àyìý¾¾:ý}¬Åþ‹~öï_¸ $ý«|V:õ=jÊõ.㜋J½‘ÊóØÔø×Ç‘:Fú ª=¥ŸÍ^ô9p³æB¯g•:ÅŒs «é#æ[—“÷B™‘ÿÉ£"_®Q·d¾ÜÊzû|àzi"PŸ'~³5^ú‡‘ºÿmÛç‡äµ#vÕ›6R¿Ë<ßúB}·yNú׉ܶKýÀúbà¾ñÇKîNæyÆbΘÙ\úǵ£>Ù^xy¨ëŠ|V»Ìè»Lüc]‡ÚùîÀ‡ðM¼NÔQMõá7¥¢ºQŽy5îIê®ÜM¹¡£û-àKñ|ÓŽ"÷ ¥?‚ýÑå!éJíF«á:öýUfø#ÛNìSñ“ŒùxŽw-‡ü»UÊe ~Cïå:@½¶è;#?ýWÍc‰¹®Ø=ê§û–ƒ?²Q¢ñód!èFâXþÍÕ°·ºßæúeéë?}çñÜóÊ ?ª.ÆroÖ¿¡ÿ`û \òô{è›Ò× û·ô«1Ò3ÏLí8kz/øpãnÎ#ÉCžS⛦µCæa®aý?RûÊŸ´!tÛ§%~­êËi°«$>êÆkÄþ—ûÂù6šA]Vbê/U/úsÒ70`O‹\÷W[=·§žÆùý;Ös—¾$Ö é7r þ¥øJÏöþNÐóè±KBò»›t'çµsõb9é“ìÔ”>6÷¶@GÍÏa7ˆüÕýи©Ýµñ—V±¡¿Í2?ùãpäÚ‹lì³èU_÷—ìïœèĹ&ÝÑxèâüë_Ô y•mþ»Ú¡âgX·§ ŸÇ-eÝ¿3£2‡Êp-´~¿$uáVô¸è-õû¬ éë‰y¾UÑsCjÂÇ{Ûò=Ñ‹ÆoÒ—õêÏì¯Ä•}è{îI"¸süF÷ŠôÇ›8…û$N =5f>@0}Mÿ7ôï^kàÅÍfϹyü/~€Õ€~(Öó|ܯþ=ÎS䓳q0Ï­þqÐ9ÎUâ¾¹¸îûØ×9EŸ;kãKädÚIø{¤?Ì,©/¼Ô 9û®öŸØe¾˜~ö3ûŸ|¯Viò§±cQ¯®òIãø¾:2¥Ä<ôŽA¿ÕoþçôTÿÕ_$1|.~°AúÍŠï÷Ñ7VýN«Ò2èpOWô…Qˆ¸Ç(êÙ̧ÏY_ËÊÄ9¦Qïé\ÆuÂÓ×ÃW¬%öñ÷£{ç×@ÇÏñO“þÇ‘7JÓ¬ÐoóµÄÙ:Óß·êúHâ ~'ü-ñN_ä/¬WüXÿërÈ¿¹ô÷u³_â>¢×ýQ¥mçßš9GΜ3üÿIuúp?ÚÆzÃ&åïí›"_ƒ–rž7fwж޸Ø}¾ÄMà¯oÉW…¼¿~ßYÚ„ý9zË”á_ÕûGžÿàËÚŽxÛÀ:Èá©ÉCíƒúåNßñø£§3P߸?,ýRfnÄ.7÷ÆGÞI<Ïj\>TDùܬ³…¿‹ŸeVž€œï!óQRÇYòÜÝêéˆÏ‰\Uÿʼ7hvHº×¸¡3µ+üÕ‚ºv_‰¯Ôu¯Ý ß´}»"äùøÛÒ7KýWßRéó&q ³}×Ô_ta]†Ì’8X°_Åu~Ü}Å© Ýúék¬y8Ï#wóÌeýï¿ç¾™ú±'é÷ˆËw+ã„<7}·Ý!® úXíE7w|ì‰ßùï\€¯Çå=ý.­#‹áƒpcË_;àÏ· /“Sn×IÞ+”ß§ùGõ¿Õ¿¶O°KÓ/ß™xú-J+¥‹@ü¼+}NÜFÏ‘÷Ëèï狱z+p5T\ÒŸ0å¿¢3Ý/žü·â¦ª5ç›Ý†SÒ÷Ê×qþòç “Ÿ¤®¶Ý"ò­é˜7ÈãîÊÿÔH }ôKêÙ׿r™›)ö±5ãïOãM¤nʳϫg2Î÷!?ú}Ÿô!ÏýœëH¼Lãíæùä CÉÉÏš“úÑW`å)ô‘øÅJ×ÿ³M@nKÞÊÝRŽçnʼYçñ|è8óLöMìtûìrèNìõ{ToªÜ4–ôƒo%â¬kÎu6Ìb¿2GÁ×–:Fãq%üw>ë|ºd^ÈÿÛsBÒ±{:?×ýÔ™>BÇÓ±¿‹æÚD©€yº™óŠJݪõý©¬–ôsue?Ä¿p_Æ„Ž«A¦?ŸÑd.òibgôlí¡ä¡ú-þ:kBÅ{úe}UŒH>Îédj좵—…Ü/ÿŽ<·ÄKþéËÿÒaÎaæÒ¬Wä©ýdt-yLçÚè1vb'¤œQy§þŠÚÙúü¸|“æØ½Yçñœ—¥ÏKÅïàûëw‘¯W質q²ýæˆÊýæ6€N®5€Doø3NÁ>*·÷ÿPN*]ûK~’¾õ°+%Îo}º éÂú&ÒwRý…`ÿy&ñë`”|õÊKžýéLúÁ É—Ö×X¬'êcèoQo‰û ä\%¤~oOrüø'ôƒ1rg¾>FßJÞJ×a •ù£1°_i·²¹šÑ_>‘ôÓ8‘S46Ï)ñs'õñÖqêþUN¹m3…’/o¶KJ_·AÉW„üã>ö¸ÄùýÅ~“þQÌ¿Ñ8¨âk4þb¾ŠJýõHênu_¸™ÊßÐç5©³×ü‹ž¯ÿû’ØQ­è—é¬eþ·{¬#|´î ü'zVã&êZ÷}ȱåóÈ,8*ïì”îÚŽ¾M?ÅèVâ`f“Õеè}ýžóñ-×kü9«ùžvqɋ߭ô¥ül§zCåZÆ•rîÜGã–róë5è2óX}áò#ïÆýl>GޤӤO v‚ñµëŸ:x?³[>îÛº ë¸ùˆ}{Æœ_A'”£r,oR‚ï,Œ]¦ù\±öPåÿ´óŽóáÜþøØèýFôD‰rµU£Æ\DOÓK0¢‹²«DÉ H”ˆÞ"¾He‰½ V ×µDF¿¨‰Þîþž÷9ó²r÷Ÿy}¿ßgfž9åsÎù<Ï™ û&Jÿá5¥ƒüÕÑs‰ÛÜüGú`h½MëíÊ£qwÆ‚ó…OãÖjNÞ_êó~Ó¾ þùR°ÏžæÍ#[Ù·BóyZ÷ö Éþ|¹›3¿o¼À{“¼‚Õ«'y««Eæ?9¯^1öQŠÄ®Á¾OÃ_hž_ê/Z ò¥Á/À8¿_f|¯öSí¨Ö‹jç's%ÞAýg½Vô³ qhKø&ûéøX_$¦2ö;˜™H<*yÏ –þvHx‚Ê‹²·ÓÅÉ·y:Õ†÷µq)ϳ©r%ñ¤•a,z*|+Õ+•wõsšÇ‰ŒÊ‡_œ?”-†ñkNdžµN%<"ko?òÍ‚ƒœ ð¾”Xã,xKð®òùÜU‚û…'¨¼­›9}³oÇ ÓÈû®чï #ïsç6Çý/òïÝ„}Û1¿.|2oÔXîSò¿š÷Ó÷éTüßí:ò0nû§¤šH½©ÏLö7º³½’¸'Œ÷².Nž‡¹<ŒñŽ×Ân‰Ææâ} îw[¥g~Úþ¸(™ïƽ[»[í.~¥ÈHükÑ?Ñ×éôtçÝæyîmÇOÉD^3ýAí´ð¾„/äViŒßM8^h^Tì¿Ý”}|røÜ¬ ïKü¤Ž§¸ÑêØ‰ûÕø#¥ßzÜ™ßWÔaЗEñ¼µªú-~Hñ‚óçöµj[y•ø6¬_vÄ{¿êÏîÀ¸’·Ô¼›;»:÷£qÉ-ö]²2³¿±æq5ÎÓøÆº7‡Ï[Îrß{Á^·© ŽpJ°ß§w¿'yåÁÿiGÝ«\úU ÿ5xo)y~Íón6v(ˆ_óÓz÷¬N<ýiõ¹ÝFðCR¿òVÓRãû Ô_܇ڣt£x>áµX§1yèë¦ü¶`t­£c´þ'¼Ï×Y‚ÿû}bCÞAt!ôDp™æ¥í2ßÂãÑzªòÂú¬äãô<­£81²¿½àqÍk:“ØEëq‘f¯Áïªü€óÒ|̱tYìß¹™Éð£7œ}Eí»ø?‰Oíˆôi—úkÈjþð9ö,ûküyG^yèôûZ-äRð©Ú?û,[ûè'ªõwQ]æc Nß}‘ý™?ÿ´ê¿àI}Ò¼´]âz$vZy†a^µñëäuÿ…ydÁEÊÓQ^—ò~4.QžFäýÈÝy© ¾ónÎæúù.9j½ÈH3²áѹï:Ï¢A÷ÒØCå3í¢¯?ëgîO뉒WwëôÇϦm‚\(>bߺÈ*öáSž¾_};r.qúùÈÊ{ØSÁÿšR^¿ÿûøkþOy!nò¥Ï»âÁ‘'À•Ùo]ó v­²ŒÛ’þáÊãµ²Ž†µ?þcò÷ô3éÉþ^ه˞”C«ÙLìÓýÞÔ©6æI†ý¬UÑ£Eù?ÉóÚ¹ö1™é/òÃË7D~”§,ùe»u%äCâõoVÿµÄU-ÃCûƒ}êÂz†ò;¤~âÙó‚Kó¤ÂoÜÄùÂ'ñæ³Ï{¿^un¦kÇ6Ì«ØÍw)_;8Z‡ø´{iê¿iOß“µ(;q¿ð'4N¶ÆÐ?"ô›ÂÃsŠ]ç~Òï¢^Qh#vàf)ôSòª!.èzè™Ö1D–•…//øÌM;{’Nö ?ïöéÀ–¶'Î\6—ç”õ%Iv}>1 \tÂEþ†³ï¬æ©­ÇÍ™Á=П^‰ÃŸIþÅ>*Ï/¬÷+ž>g.¥¾hÿFEâW­÷8Söß~ƒ®opþyˆç>î#‹xôtüŒðƒW.1¯’'ŠÌ(„ÞXO^GxwN¦Þ[¦OÈGÜ똌/4fß]µWî é?+y+·èqæmýfôdö'<ߦç±7ÂwS¾Šßõ.þqn=®'¼è ËÀMæ÷{Ŷšq¾]aŽö€Ùæè<.aŽþw­|óû€͸Ó™>¶Šw•o£q­òÂøSp£›.7}Ê%ߥyCoÿì·Æ3Þ8ò(ˇ¡¿Âÿ×:–{ãòsd-ñÙ úÛ÷—_ü›:kŽ!àÁÝö_ ̃®§‰þxiA—d|Õõ×Ê óÅjoŽàwÁŸºNBý…ßCú©iø­•\çåkÜÿú„y²õF>‹ü{Cò,~ò9C0# ÿœE^°Â,âN©Ã)ÞV³ß¥®×áUú‚ñÑÿ&èü7öIø ŠßTìñïàW6â~*I^vXYäâÔFäVÖCºånò½ðñ5Ï©ë“4~Ñ|•·îY'áUí…]þœâPåÛzjl1Ç~˜—Ï·›cݯ֡-Œ<» }ö˜çÌÔÊ“â÷fœ‹WÌyV‘Ä¢_»Ìÿoßf~æög¼ùµÍx!¯?¾èJ‘có½_¶ õŸW3¯C_oª’<’Ý’ýœÝOàïîV‚§%uDgâs<ÿírì‹-yOÿØß³ÉËÈz¿Ð+•õjÊC·ÓÐ÷Æ{±öqðv⣅ôiV¼ªüm§ÞXäWÖ%+ŸÄi˜÷/ë2"/¿té_®ßÌ—ü#ü¹HõÒÜ÷à–¬UG=“ü«Ýý x¶}§“âì`úo*ˆœÄ<¬/n)q‹u ûb÷¯çÀžHÞCõ&ä1·™§‘Òg¡öÜÿ­Ø=ÁMá÷bám‡<ŒëÓ<· =ÛU†ëßÍ>Ö8®=ý¹µ®î·ýû5§úÝzèfó{·¡»Íy“÷™£s°õOŒ÷ègs_ƒ{ò¹Þ#×ö˜vðü3¶™ïË­7ríinŽÖ…|ߎùl¬~äÈoÎw>Hcô(ä1þÓø{ÈVÆ#Ñ› î3s]ÿö}ô-ÝÛ’½呼–¹ý¸!~UòʳNfÆŽÉú«í0ú<°‘+Åéšï’|_¼ùénìoÙŒðòÿÍ<˺>å)º=s²Ï÷†…‹Ÿ”W?z0ý —jÝXóØAù]øýK¹~Ì,üHïð3².G×(?TyJÖêàÙú ®„­Yý”ú•®ƒ‰œÛ‡>+ŸDò–aÝGq­ð’„†Ü·æ9³÷æ³øÅÐ>çžÞ±sp"ú yÝÂüÓ½ùƒ›[™7Ù'AóËj§Ÿú;¡?²n$ÄúÞÓy³ºjä-Ò0µ‘s§êqóÙÐØüîhiäÔkÔÜȯß|€Ñ+WJóÙÊxÜs²r~Ã3ößi’?ðÍT3žßá‘cûʯF®#–3n¤èzs¼uÍ|öS¿k΋ÜfŽ~ÆÇ|Ne™ó½Ñ}÷šçn´|%ñšSà2<ÞéM°7²†{¸ uÅq“˜Ç”/á™Y=ÿbþ÷½ÃÿÝ:ŽÝèU–8VxY¡½q¾§?ª¿t-øÿ%ú0E –`ž[LC…/iW…yþ¿ÖEt]·µ½˜±–üøÍ[è:&¯Ü(ðE‡üäEe½¥Õìû¯žIþæHÜä½¶ˆñT/zÓÂ+8 û-ëÀôs)/8Cxå^úúo²¹{§8~²üaæGx>Êÿ ÷P€Ô ‚BCñÞ'o!ën­4o#ׂËt=¼Ûùuâá-¿'¯ï ?Pq§5ÓȪrFÞ½³o`ïsM5G?ÅhôaöLä²ÝLðdžºàü™-<ºßÏ2ÿü{7v½UŒ±Ëî½Îà›²Ñfçö‡ÝÈ ÇKœ6©Œ¼Ú•ùpç¿b>{ ÿbŽ#Ÿ-¦»l×_Œ\=jäÐs–·ÞbÆóçí¼û‘9Zÿ:Ž{_ýé[ÆØk+ó23n~%nhS»_± zôzC‰/k+ÃvÆ?ÿ®k0ñ²•­š‘;6Ákv»èK÷#?1ß > Vväù¾(®[^ù¼’‘8MÖÁkžAשùµé_I9Bêîo“7SÜ*uÇ iZänTiú“È:HÅ1¾×\Vf8Aãmñ3I8Lê•ç¨([ü‰®7Ñý*Ôï(RóaZ'µÞœJ~ãa£™O#ÿîø˜ææú¥gPº’vÅ“÷£zmýU†8EÖ¿Zçºp=ÁÿZ ¦N#¾Bÿ¿à }*œŠ‘_:OßÍëú ¯ƒƒÄOhÆÇØ {ýŸBž‚¬;sÖæÂ/žë‹*мEŠGkÍø•êc¯t3rmm:…\ÄÖCƧ7ñmd\ÅÌ{gpµß?0ýä©Ý~~?VÓø÷ò F“ì 8(ÓypÌ´‚æ¼ ¸&ÉNïvYg¾·7wC?NÇ‚÷×8óÒG=Ï÷‰§ÌÑ6ÑÈíÿ;,3NúøƒØà²ÍÑ<Çùáü~o,qÃöhôfUý=Ä<¿Ÿ¯W×+ê>3ŠïƒlW‰'og$X”ÝÌ_x¸®Bi3¯V®*ðî¾Ù‡}jòœñKÁÑfØçWûÃß”|B˜?Ž>O¡Ý–ú¼[ª$qJ½äƒN¤@>$žÖ89\o¤ëGe=¬òeœkóyŽ#O#ÿAó¸Žæþz/@ž5^M—›¼ÓúuY9¦pÁ+ºK×WkÞÖêÕsΓ÷k',¯.øGëéÖúyÚÿpñÓ%O¥hŠ]‘:¼WµôeôÇ]ØœS‚óœ“Èë©Wøœn!ñÁ†lÄÍÇ›ƒßïœ6yT'&~!z5ùÓ¼y޵ï9Ž,‰¯½øcz3âëÏF/ëäÄ|0ý‹+ÆsÍ;häWùœÞ MáGÿqÉ\/¨1Â\Ï-›\5õÆ/}ÄœïÆ$¢¹*qLßü˜u1ϳ7×í2|¸­utáèºb÷[è‰ìGaw¸’øL×»h\ÆÁ’rßl½äIý ÷+‘õK‘ žj°Óè«Næ~tß©7E.^ÁOJ>KëèÖÕ›øñŸÖŠŒØñ‹ú!ë÷ò㕯 ¼]•o¿Ó‘d¼@ïýIÄ1ýà?z\oj\%Ïï·KiæË»•˼ooôiäjÜ$#^–­ŒývvU‡tZ‰œWèŠ|ŽzQpþVâÊ yÀ ?õÄ®žÍ½x<èªyØ÷7 ^òŸ»ÏÿÅžÁNþë¡‘7oî ôfcgäòÒUþ/nÇ2£‡Möp,Þ|Ò©;×Y¼†çÙËý>ŒN®NÜ+qƒµs…9Ïy8j§Ì#ùW;#~kjUâ‘¿'n{¢û;YÝö#§9±n•-à6Á]þÕËø‹´Ñó˜Lyûy ñÙùZü¦Ä#ÝÄ?•žKžªüwæy#o?æy­ïô,‚<«½?TÔø+;ui~ÿfM™ßsìF®Wë¿KhÈ<—ºOÞGøVöÀ²~Â*t›<ϸÅà‡ºô÷¶Þ=½ÜP‰|à¯_“÷ÉXÁè½oùSÉ’ýïoÆÛy†ëŽlˆü oVyèNôÚdüzO4‰¬ÙJ}êì<òÄ%ŸO¶>TëLŠë¼?úS¿’uá~šÿì^×àUoûKÆNyŸÀ^5·‰;ÛLw>ªK¼˜æ|‚w‘“„ɼŸÉ1È}––àúI˱Ó[6ó~gWïJÝ6è¼tò¾àÏ6ßk¦<Íó´€÷K ÷õÍuG£{S¢oEÆ€“Äð_í´-üÏwÆœ$>­0Éÿ½“µzrr=ÿº&òùá&~`mvôäârìè%ôÞìêJ~êúX2×Wx v[üVÀmÍùdkA<4i=ñ³Ó€ßÓ¿~«öCüAêvN¥è­×óú}2v{~½=¡õÂ*°ï_Ó½Þ\ }Þ–‡ëø‰ëj¹¹wÞßtÈ‚ÿ¼—ŽÏ½uÿ$¿”3ð¿á׌4ǰÍRƒK¢×õñfàä}üïæþ|_-ü“ýÜè¶ü?Ô£<~ªÍtüq³Ø›{ПۧÐÛ•ëy•;ò9ƒ’pMZøç®sÌ!×AÞ¨kúòd®×M’Œÿ—:©µæ{ê Òa›@ü¬¼®óÇ=|Ø·ÿÊw¥¼Î†LØq™‡×ùgû*ûÕwLûǃ}ä2«<õÊ¿§üÖÚO¬TìA=c_®ì[ñ«ÑGagNÖà\?lC[oâÜ£,Çþ5Œ¼þ åØÍñã°oM±/î¼É>S>\ûcNê™?M#OW|Ïãä}žûÆ <§>rs><ö훤ØÉ®ƒxÝx+ýeî¤äØùÉÑŸïïðwâŸíè)øü… øÜ®MxŽONa÷7ÆÄíi…þ¾ .o÷‹½ö¬ÈØñ'ýï³#%'.ŸƒüçDò@Fµ.‡äþÈÇþ:sÆ଼™ñ7SsËþ_'©n¨Žï=y<6¹#×5÷7ìÄGÈçWÍÁçgóûžè[:™øYâpï*ù&çË+üaÉóÞmÄõö„¼«Ãóh|Œóè™ ÿ%!×3ÜCÏöãí©o.€½Ø¾—ωxœyíGôqÎ}üͲmøÓq+Ès_-F}xÙä£BApÄÒ7Ô;{—C/kö¡n,ó´š/×~Í¿ûãüÖßg¥üʯ®ý¤Æ ï¨7É|¦;½y Ü[ç‹|„©?(ŸT°èËpxqZ¯ Ã3¸ßœøíÒAÎáÖCìÚ´“äÛ· /òh3vsÀ·¼6NÝ(˜;_³ò.yü@òÕÈÑÖ,ÈO­Ø©¾mËKiÈ£o„œUX‚|K]XóBÁ¾„ãЯÇnuhÄõn؇_º3ò.ò,þÇjô ù”-ŸÈ“ŽˆŸŠ‘üüý¦¼vjÊõ{Ô·¿Ö™éÄ2 §Sòó½× q?›íÝ¡åÞ|›|àßo¥}Þ‡«Ä)³²øògÇÍý¾ŽÉëÇËÈã°C।ÇÑ÷¶n¯èùœ>.rŒâó£Ò÷êF¨ŒÝ_—?–¸#út#<Ïóô'®óÏ ô9e~Ê}HýAë—Ê7¿“W)Ðüû‹äsÌ%nÞ>ïq.ú$œ£—¾ì¿ûãFZåï§ ö‡ ¿«-òªshßGg}Ì‹Ÿ ÿÎOÞIù¢´þ,u3í/qú÷ûN­ä­ÎfðÏË0»ñÇÎ3õ4ä¼çwûCË»õýrâºÅS‘ÏØ‡Ë±K‹J‚s×UDã‡ÇOw~…^dš N8¸ˆ÷\€ÝjÕ”|ÅÓòÄÙsVaGßäɳ=´ü¹ùâp]GOg]“¼kÝ.èË/3ÀãÌáºÿ¸Äõ,ŠÊýIÝͳÊWíº¿5þ+{6ò7ÛßûŸ«ù|·ØH_NŒÈõ‰—ïôà¾ÞÅżø}ïüõ£Íß mMZ¿•­ v8§ îh›ë‰q+1r+<ÿîØ½äç?Ö"¿•9~¤IðÔ¯é‘ç.}Ћ‰·é1>à¼J^ã9Ï®‡~•…›xaÁjêŸ2ç¥*Eèqwpð5ºåR–š:Y³ëØë™ñÎþ'òon™çÇ¿ÖëoÀ+ºWKúbu4p>?þ@xìÍü1¸^™‹×¾ÝfÜÎõJ¿ýÃÞ_l>çÚ²çÜ­Ï­5y¿@Ûإ˫Óbä1Ì.—±×³Š!Gßag×_'¿ø ûÚzyÒ/°×M ®]€^Å-~hKü«ýüæ´©ÔO'æCþG¦(\x_ÎÍS7‘OÁÍfâP'ÕCìØôT\ÇØpÄßé胰Æç'”ßÍ箜K~$ÆâÓþëýSgý¿ßõ"ÝF.Kð1ŸÒ±8ËVôf-ç·tŠäI_£oë/‚÷jáOí^[ÉNC|i,—¯¨ÞXº ÿð´rÙ±/ç±¶5ýDÃW‚_Š&ò_­ 5Ñÿ¹Ð¯z7„¾.£ùeâ¦&W鉖¿¶.בr"~ëëðä¡Ölôïߊ’}8s|šÈ sÊÂ`× ¿ü58HãÉæóøý„5È›òkßýßý±2ÿÊ­öýk¿½òÞiÿšÎ¯i~'È',ü‰·ë|•SÀuÌõ ÿ²5añÔÍÀ.ìøŒÈͲþàŸe±xÍvžç«}Æ5NQhº“~„fqü<;(ï/Cœi_©‹ü§êÉ÷´:ƒü_ºn‰Uùß\\4º~&ywâ˓ñoÞDs•ÆŸÇþŠÏ+¾ˆï‹ §ÁðÆÎלˮ•ÔG†W÷ý€9¦ªFo«Öâ>ŒÅà¯äßð= #agæ÷L턽yé‚ëãþ„é;œÓ"ƒ¿v:êÑμFœSéè“Ä ÎªÄ·ùòÀC;ëü8kñ1uóœ b0_¯ïIÑkædd.C÷œiß—öÙ+ÿDGXyÂz`®Lù¡“ŒùGýŸö5ýýÏ“= Ú‡œ£–¾kåÏQÝû§síšÏαuHD^Sú”g ñJßðèÔ \gþLö†¸[Þq¿‚œxäqš#oúv?Ðv«Ô¿ÈŸ¨]÷bþ€ÜÏÁ~‡è5xj÷nðh|êjÁüèyô-°ºö4ŸM¿÷]ôñ Oˆ½'ŽÜ6Ö—g/ciômOä.]#_î­Iû¹ò^b÷æÍÈû¬ÿÀõŸ¤Œÿ“…WÄêJ÷fr_þÝ¿nùúaÍþ ü¶ä ó01kSç>‘ ;\ ÷!óÎÃâÈÝÂ)œ_ü(ÔGÆáï¼ ˆo ÏCŠÌæ: ŸµÇâ/KTå¼ÖKŸÕ´ç|ï«¶ÄA’—u.ÅuþXÜw6 ú0zuþ¹Îû¯Gû~Ûz¿w¸ÿýcBýĹ˾£ËUòïÊ÷£{ÂŽž€/2-úÞ—ÔÃÞ?øßýq" b¯ùŽ›~žFù^tÞKù9´ŸMù‚uÿ‡[¾qî‚ì³C˳ÎYU{‘§’}:Ê“d]_‹?KÝ•~éRÞykï[ìÝUú‹­°g#±›n p¶9ä#òŽüPàÜ]þÝ3'ÿ/õ ç@ìî5ò‰Æ¬’àÛá=˜»»Ð]êÛʳ'<~ÞóàæÚà&ã§àØ»™Èk¾òÀ£º_Kø‰Ý±£\W‰/?o¨>:?Mg ¨†Üd|¦ŸÌ}1¸ü¸ÔõÅOvù°•ë)EýìUoä75uk/vîûÁ&^Ån»w˜·ôúï^úú¼¨£ñ·’0÷Äï¬Íƒ¿qóá÷údÇîÿA>ß«¿‚ïý¶öHêtZ ±{ø¿t•ñ—OûòovNÌÜQŠ~¿¦îUR^å{ô>bXx¤\·6óU›· 'Ò7ªû ´nûw¼–9zûß'ójšwÒ}Dº×G÷Î(¿”òo{·ëÒ·ÛBþe/€¿ }y#‡S/úý(§{ª”ÇçLdúBKd£cÂ>ðßÄÉô½å~‰Ü–ʾ¨=yZ-ñÀ„•àš¦§9÷1°óÒÇf~] ¾ì×Sûá¢Ðú§û!u–Îs—Ëyøs™‹S!$Þ÷åÏ) ¶ç÷å{ìàîô1ñ2ìŒÂsÔy‹ŸãRo‘ý2^¢ò»0-ßÿ <fêæè{µå¾ük=_y¿ÈõÁQ©w‘¨q›xhòühûë¾þ¿¿¤ß¯DâG©_›ÇÒâÏæA¾7Íà5úpZÃãÜç ‹¯úû]³uÎîÇ ÈõÃÈóºàçÙ°sRïtŸX¼OâF«ùyò)îBô"……ÿ(ðš<ŸÌë~ã@‰·aâ'Ý3gžIîí‘—:šôÝ»igúr¢üÊ £óJÖþá ü# ø Æ*üé%\ߣLä¯bÖæ÷)á°¦ÿÀy,ÂuæÍŠ¿y1m·<_âø Å|¼cÿÙË5äúNâ\Û2gb¾ê-sÑ–¬ -¦µ•üQ–æàú(¨o]ï¹9ôûYbrîCéûÐ>!{Ó_œó¨¢ôu ¯Ž\·È@ÜPè[ì{…üÜ·Ì;˜¿og~nZßoI£Ÿ XE<+û§ŒlÏxN/ñ|:|‡‘¼¿î¿4ºnšò ÿÝüþDö þÝ+Bu¿þ«ûŒt.+È7¾.ueÝ ûÖœíC‰d…»°.øèlpSSÄ#c‚ß*J=êÙÌ0v>D±Ò'©ñ”òˆxóׂóî÷H?°s…üšŽy,ÿÜ=¹y}?/ò±õ%ú&ýÈÖËŸé·|)ýæAž¢©±Õ‚O²\¡Þ‘þÒ2‘;ž‡Î ¿ —ÿ-þn]câ“«ôE8{‰+™õå:¥n%ó•ÚÇdf?Ëû.ÒOi>ÈÈ}wû.û®ö×mÉy ?£¹‰þSïÁ>÷è"p×ôoÀ]‡ òŠ#÷2Oftë@~¥ÙâöÕ?#·s¢“ß²]>Wæ˜YÓ¹Ž~Ôœ-Ô[ŒÒwù}¸¢~|âq3}\â7ɳ»U#¿Pù.ñ[ÏÜKCË¿Ö4ÿü·Ú¾Dþe¯P‡öéeòI²o+ØÏ)<¹!þ—¼¦ðŽûµ…oÊ-^—¾Œœ¿Ãã!|}ö£†È»ðÖýç“_–¹Â@ãŒÄ‹Â—Ì·¬»¹]ôŸç½—¹^3S4ä*u ëA}ä<¿ƒ]:UyÛò»5-’Ì7ý‰¾€½ÿ yk×û;¿/÷;ˆ«ÌfÔsæ2_n§-Î}Œ©Ê›ä“‚ý*µ¦ÉÎ+”•Wéß·sgBn¶ Ÿšo×9xóIä÷·Üô­_h“uäëO„£?¢ãFâ}©{Û ¢`_Ú3?a¬˜Ê÷ôlåË™òœëœ‰Î%)oªž³»e&øþöì¾öaMJEâ¾¶œëËLÜð±èÜŽúkó]ü0}uνÞ\gÔƒÄ×½¯—{ü¿ìÛÓ:SpÎJö¦™)Os΋ë~ZŠ}ù3öúXiÿDþ½…O:úïþ9íÓÔýqºÏÇÞ\‘×ÒÑÇ¿^§´ú¯¹Æßº—ÎØ:‚zºôåÚ…2ã—37ä¹4,Îy¬e^ÃH7ü²¨ù‹SíË2G¨·žÒ9çraä|AWüeÔõÄãß«gƒ7bD@nÀÇãŒ\®—bÕ/œŸì/ òJœ©sòÖ»¾È_ï+àݹþêÔ"ÿæ˜âmüû׺—øçÍ2x eß]pO±Ì ë¾@ûJj®[x­’ ©Óm¾ŽžÈ|³1é3ùˆ…°kM·ûçàœ¨‡JÉho¬w§8öbDεþÕ™ôÏUòsj?_·açóƒsÜÛiù¼þ‡‰÷Â-!þk“;X)z´¹p÷îd¾gÉzär|Aô(Ç>¯½ƒ?(6;[?N~N†{«(×Õ°!y–è7®Ÿ›½nøîaiþþv}pϽŸx Ÿ{ü ú™=*8n~Ry¦«†SOí4\4,'W"ß#óÆœUèÇL<ƒz—ði9sr^ýMÞŸ 5yËjSÉǯ¹!|rì4&'…W"Ñ*_?tÿn Ã×Ì)Ziè ‘¾Yãá:>ÚaÎwÈ.ò°±Ús΀‹RÏá¹ÿMˆ¿$/þj;ñ§Úÿ"uèoe»Tvð¦ôAè^)£_pªìÕü»?ζϭü¿×}uÇÃÏÈÞ=/v'¿39"úø¡8¬ý'ò®gºPÏò½9°„zôS[q’OÞL\]>FÜ:¼*qÁЛȟGÔ3á5p—BÅﮇŸÌ~´zdøQäe†VÁ•:HþAòâfEòKNûܨɹ°³ï«1ç:½7r²Ÿ>]ãs\ìTúÞÈÛáZ; ®Užh/ßäUøD¬­ÁÍÒ_‚‡Àýu»£¦4 N|QÍχx³^ûq }ì ý2ל7蟹­Óܘ>v>^müãó—àÅ+äÍì™)egy'_Ó¿{ ¼?¯K¡''K 'y÷Ò_ZzùŸ;©ñÇo‘gy9“ø_渜q+è‹“¼‘½zyÔcð9’æ:KzäåÛÏã:¶'·¶ÞÂ9$] ”yqïzWð¼òëvÜ >Ó¹.‘Oã§¯Ãæg„_Ñh]‰zAøÿ¨þÈû¾…ÿ÷²·X÷x)߃{üÒçfviãçwÜ¿n±ÇPæ…•ÏÁ^=:x•¹—jGÉuqˆ›´ômI_½s¹1}èy.ì }>:§m&-Ž<¬ÙŽ>Lzˆ<þµ•µýµ¿œ´~Ï^±]D”×°u.í§Ñ<ªñþd£QOð굓à†u±óÂk¨—t´r»¢2qðG)‹Á9²6}Êã¿`ßgE>¬çjß©_ žè˽“õOì‚ÌÁîçྎÜ%Ε¹ë¸Á¬NÜbý|¾D\Qüy0é²Î#Ù;6ó¹iסåãÏÂU:ˆ½ø0ï™´‘¹‰y3éSªõ‚üÁ󾜻ô“¸IJ“î=;›9>rõæU˜<§ÎûzeöŸÛ¹zó-qsµèËË}£ÿ‰ü;×ïZþû¤ß.$Ž¡LëÑÒæv&Öú€îéÓ=ˆºïIû"ÔYï àVžã:;]à}W#SO}%qAOâdíŸ ñ+ÈKþyÈáˆ|Ä Âó⯰§—¿–9¦¶ØËѽ°7©»ãWÄ^jþÕ¬…÷eÝA\ü}'Þdu3“é—¼<ùÚ0¹êþ‹ô5>ÇŽ8Š~=Ë þ?]œÜ øºÑ êMž “¨ž80óFô®CTpÂØÞØÓ7¿ã?6¡îué9xáÉä_ú•OÔØp»Ûó"ú39@\3$ú>Ï@'™__²™ø&êgÎùÔ4ÎkfzâéöÑØ 8þu*™7°Žv¤^&|cÞÒŒä¥FE$?1þþ)b[â{éÇ37nõíÌ4Ýÿ\¯Qaì¤îoWþ·‰‘káÔ<œu6 õ`á»5~tç€ÏÒ¹Ô¥ÏÁ«¼ {{(×;þSåã5Žá÷Cvc_xZtnÙ½\û<¦Y$'øSöšYã'q_ùÚcïoÿÞüò—ÖoÉCe˜¾ý0×VY©»¯ÎÄùæb>͸2‰8LöÓh=5Ø×&ó¶Z÷Rþpë· ØeÙ3§{_”Ó®Qû‰Çýù¹ï’þçH_¦îÑyÝ«ãiKVælt·îUyòè*~ªÐ†ûfgÍÈ«ì…ü}T ‹Á§-yM·ùLpŽðšC™ ´2 ?¬ôùk_š]w&þVø¿ƒž«+ÑG©×š¿t%ÿ"| !÷Í÷÷«ÀïÝÚ|_æ4Øûå.ß·".y™”¯w„‘7áér'07£{”Ùg‚wÎ>FÞ+L¢/h0}Ÿº7ɘ0ý:»Ût"zÿ²:ùֺɰ׎ò¹Â‡¡õE7:}ûAÞDá?·‹Œ õídìJ¿¥ô“gÜBü?§+8éAFöudêÞEïÁý>ïKãå>ê«ÛßЧÕ}7ö·ÉYäï÷£ÌcÈžd#n'ò+¢¢/2GbÞ€¿h[áåôG÷³^·D¿ì Nú!Ì °ßv6ú tÞeõwø‰ŸˆwOµA>„¯Ö^sƒþ‰/4¥øJ÷¼è^· ¯“Ìi¦¯çÕXÊ«ðà¸ó€ã¥®`fßG^dW|~¿¿6y¥¼{…§>~ó‘ðÄYçË[NŸìi…þúçÖýpüÅåä1¿îÈóny…y޲EЇ¥§°ëѓϪäGÞKíÅÿï­ÎõÖ!ÞW~-åCs_ÁjmqDNs£Oæ '³Ëñ:(!~CævìÒ7ѯì͈kJRÒº™ý¸ þ¬Î î;rnp[§Yø«$µÀ)U×áoÛõÆÜø yOó½Ïœg u|w®CÜœ¼;ó‘£{K>m'>ø6þñp!âm©Ó™½vâŒï¹ÿ½u°²×Üy•¸S÷å® Ž(”9’º“îÓx%ÈG"JâÔT¥ÈCÇXŽÜ¼ÿ‹ÏY_žçZl.Ï]ø6× €s $Ç$= /]¿ÊØûóõ±s#o ­wFÎÌÈqjê¯jOíEÑ¿Ï Ê9"çÃéß³ÇDbŽyç(ú­%þ7¢B¯>À¯æEvåºàF¿¤¿È(] \_¸#òÙ÷:ÿŸÆÆVÇu7ì‚~ØoyíÕ‰¼áÕ&øÏúѳ¨ïÑ YгFÂk^‚ý•NÂbà˜MÁúз·!yŸXQÈ·y+ñ»©Æ£WÒe¬˜J?d´qä »”FÎcŽFÎt¯–ôÙÚ ·PŸn_’úºì{1šÇ¢¥AYöúe¼þâ_ý± ^ž7/¹ ´¼‡ÄíìÏšh*Z¿$xÆlòˆ¸9eê‚o¥«Lð_eîí3koÄOÉ|°ÑlþDö§‡øWúi^·$¿6´0ö{ ùq³?õTãø0pð1©ý³#Ýçï“IžRø˜­gð—ºäeÞ¶CUên‡;Êœˆî}t[Ák¥ògß`_‘õ¬8ùá…³W¶7͈ÜÕ8‡]Ÿ@ß½Õÿ£ÌU]åý«2/ _¢ñáOð¿ð–š†ÇuJÿž³8v|Åsðˆð†ñҧ˾&«„‹}ïòºX5¿pN2Wbwȳ¥J‡ÞŒZ†½îÒ¿&|¢ÆæÇÌZ…°+#ˆ³­+㈷ÇÜ!Pý9óÂNQÿîý™øYö!{Ñrƒ{†^çUæ6ƒ{#¤¯Çt² Ÿ ü‡ÚG¯<´Ö¸jȽðB‡ø)þ-qr`Z#^Gîþwû¿:ߦÎ%y¦ _­ð\i´›ö,ýÎ÷á·tom’”ȽðêÞRowGöI>jD|!u{íózfñå?P?&¼)#çÄûýXp ùÚ>?­"8(O_pL‚ôôå¸îø•x5P£+ò“>:øã“Çû…ÿPç(›iùés·ÖýÉó•~=ÝOä$B ‚ï‰CeBç­ì|Kˆ÷µ¾7|‘ÖOðTº•ã~ºfã~_ÅÅÞK_]à—Y\W "¸Hx‚•?Û¹¹ŽüÅ—ÁàÈúìµ1sOç¾uï¦ìërÍhôœ8 Þ^:³ì)Óþ3'_ypqÔ‰àè‰w5Ϙx8)Qtúo?f›ðoä_ñˆû(vþKmú"ußp¾Ûà˜ßZÑ?5£øHöžz_ÝgžDö”ë܉Î(o‹·#/ñõÂcÔñOæúe¼Î9™¦?ËÞu7Ýsúi$Ÿa¥¢OߨNŸƒÛã*qq¾6Ò—^’~ýÊ_“§¼Ó‡<ªðaZ½óð9ÂêXô¡ÚM.Ò/y=:}`Û.`Ÿç¦'€ÙùØŒçÞe6y“™ýÉ[Æ?Å×³æ ¿þ:ãÙ÷t"÷? +ùÝ•9¿–k¹žÀMÒín‰þÍÝ„ÿî½;ÕÞßC©}›fýÞôûȾ Í·h߀ÎcfÍFî¤/É\²œ.{µí¯ã!ŸÂËf.ž>øßÈ¿îõ6vUGïnXèç¶raú°µ>gf®J]Zö?Z³“Çý‡?¨ﺸFöeêþà`~ôr{âå[«É7Ëž˜`ÝOùr?Tò礃ûeÿ¡ÖÛ½&g†– ¯({ìÔo8µ&b¿#ÜAoÜpÌ « Š}½A{ø]ìc¼ýaúöìY‘±£ÕŽb%¯é®üˆdë…ÿ9úí2ç»Þ&¾ÞþHãc,¾çÐ;ìêŠ ü¾QOp‚•»»&v˜~3¯1ÎÝ<nÊY…¸_â §ew¾_øíRÙ×#þ¿úøþCä¿wsüI¾ȯì%ÖýÇʇdï9‚¿+±ÿt5çi4ñîý9øw'm˜9r£lMâ@áGóŒÖÔ]ÃUÂ>æ­Në¼|¿?õR÷ú-e£“fø(_ôàÚVðSÊÉÿ•ü ßnàâIâéÕCˆ;â@NUžú>‰"ÏÂÓbØNþSç„“mæý’—uÊŒA¯Êå!®¸5‹ºÞ«2äG×_%ª‘˜¾ٻ섻 Îÿ|ÿÙÚìyŽ2„9´hãÈÃÍ{‹ümMDýwó¬ÊhLx‚|è^ˆ„Å«ªkèçü9|ò9Ñkbß„O׉p‹÷í¾Íûžd—ɼ£îÑòÚ¼æ{ŽN!?U}=8 Æ)òo[ÁkX&?qý®Ä+sÃdO±¹uýA^òÿ·hÚ?7/ßóQx#_6!N>3™úY¹“ç"Wé"!Çéùñòñ»—3﹓þ䨸 åý”=^†I葱û}ê¦#zÅsõ2Q§:·Š<ŸÎ¹©”y/kÐ=ìv¢Úäõ…ÿÓèo,-Ê¥}ªf†ìœ£ØK+cjü@„½þü·Ê0ÿþMgäÿ×þ\wÜHÌìÞüËþd½^ãr â„ËÇð :W˜.r¬}}£¢ýrf¥|ÄÏÖVì}¼±Äýºï,ö§Õ¡ïOyWìOƒˆÏÛ4¢Ž6súÓ| õ‰Å Ñd©°ÇŠ_i€|¾n‰¼<Ë‚üþ5‘òñõbú¯Uî‘ð¼_³ÏÑ=¶Ž:~ÇKb‡ûƒÇ§wçó.wD^ÎoÂ?ÕHŠüÞƒÏÍ*w¹ïâÀ§Õ®%u²y™ÀM-ç“7yü\Ò’¹³tWêaÂ?¤uÛÀ¬¨\·äuÌÁñÁ²HyY¼;ç™#|³Å¯GÚk›wtú}‘¹]#Û&âÉIÉ+\ƒ«òŒ8·ÈÏèÁ÷IèëÝØû8:™ÎÁÒoiö?bKìõ¦ÝÈôÔ~_ò3Zç²ï•CÎ÷kÿ…æ-qzaWvâ¼uÿxÝåà×ÒU¸n™sÖþ8/ã<â é;q¾†'y ô&Ê=î?e—0u§XüUî&øáͶ~(ɺìc6û.¡ÿJçó’Ÿ¿~O]wáìßÕ^Ô‘FcçÍWÂ'Qmâá0úÐbrýj;Ÿ³ñqE‚¯ð Òc{ÙS™ÿÑ>dçPUþ.CfüÕþæÈ·Ìi꜌õüe·¢ßÁXR}ŸšzìôûÄ»÷6n”¿_ú<ƒüLÂKo¼©Á¹ÎL}É3Ÿç({Á”@yܨ?òþM5迈ü»äët¯{p´<åa°ï<§Vÿ nš‰y™Ô}r:Oh/³ÁÿÚ‡þ¸»òpæÜ…÷Ù‘¿q«;z¢8åãî§O¥¦ÿFþJ“™÷MrøUøØìõ1è7:Y”=¼¶·„oZû1œÌiÀÿ˳ñÿ¿œÂ>K^É>²ü'|vj¿77ùŸkf³}<èóyÎ^9KÙŸdtÛŒkП¸¼vÑ‹b<¿¬SÈ |Wÿ212{ú.™,çL&K)ê—óã’§ ×ù~4È”gKù§Åó“gÓ;+ùo»u-åÿ·b, 3×ìÏû£vôýa–½‡>ºÛSÀcËþ·K_\ 9OóDì±Ìi˜FQ×iXŒó9ÿ`nMÆÜ—ä#µÞ䔎‡ý}Vg kCßÝ“Ìø×)ù‘÷ð‡|{î=ïËyË|â6oä·<ÙÀ[§ä™Ûw;18çÓq>ç)û›uþÀÉ» +óÐn—}œ¿Ø5•‡`ýîéeÿùƒ5'4ý;u·u•9pm…Sà—³éÃy| •1ó•b—ÍiíácÈÞæ}ð’‰às l¹ŽJr4îýp';Ó=ÅF®Æ~FfoÅçNü¯}aÊ\ë8÷/ùtw÷ïÄ‹‚'œQ_á_¿zî”:L ðuôBêïáIÙ§j¶_T÷mY9¾!Ž[´üYèôáã¡U¡Ÿƒž«±aøWúù­©Ý°32§îlûfÿ[ˆÿÇî¯>Íóšu}’üNHw±Kî˜ÅÄÿc÷rÝwêØ;í6'ïÓá,uŸ9k™鵕¿Ë²—¼…ì÷Ô9 ·æòÇç(O òZä»keìø77Ùcêäë²RgÔ8Pò^Ô÷œû…nœ£òQŠÝйsßrꪂ£ƒüù¢ZÏwi ž”|¦Î«¸«ào$ß¡<åš¿ ì.>wP"ôOx޼Ö±›Ròù Òƒc„ïÁʱŸç®üd§£{r­/Ãù³,q¶Ô‰ÿõOaäd¿^pï]†WÈ¡ðCè^ Ýcò>þ_ú–œJO±·‡aÏ;Ä÷ßNZÛÿ&¿_ŽirNûÔÃî]‡É^R·[ËÅÿIþGD Yx9½±‹‚cŒÆ'8Ù{ÄÂe]zì÷¶ÿÀ\Œô÷¶7å>Äþè||ˆ<_ˆ°[ÇY&çC<7®»ÿÿVÙnØyÁcÆÕaòcóéÛh‘ÿ#<¾š¯Õü˜öá™Ýg!·÷O_I~Õ{8¹¾|ÿý"öWæ×”÷WëÔA}7  W‡Ä'_VÍ -êcñs úÀ;ò䯡õϨø¹T;!}î/é,Q|쓾yÕ§ _½ðŠk|¦ù³jß¿éþBíûRœ¥8Ò¨5óP/yxçÚaæ|v-徇¯DO¿‰¼ŒKÝc<µ£Ú…“Ú¸½Õþ±óÞázÈû¦ÆÄw·fQG¸¼‚þ"éc2ß–…oZ8î«Ô_ÿ ÿ„Èãÿ{®ü13ô󳞧ÿ Ã`äºZ'ìÏÏý¸oÉhŸ¿òÞê|WàXnäVì_àÍ`éw*Œ|J×zÜ¿6¿öBñ¼Ô›•_Jùܵ3+ᥠ\î ~Ñ<³ú Ù+¨vQý²}©7ÏSòÞ°ËCËŸñp×õCIâ„¥s¸ßª#ðk¥jófŽ£n}îwò}cŠ#ß?>CŸŸíï]ì­æU]‡Ã„ïOùµ½[£?IO¢ß¿Å7?ž‹Ü,*‰_ÇÀíðÄQg¦Ã{)ùÍçé»Ö1‡«ŸR¹×þÜ@ø¼¼æK€“=ʨüTÊËlJ²8´]Ð=uöž#Ä/²/Ȩ› »/uªÀÂÁÔãÊßFŸ‡íã~¤®jTÿ‰ë,„ó\4oUh=1&§)_‹ÔQÿíO`Óè1þçä˜Ö‚KäÑ·‰½×:¾u´0ç:,5öYò\Á> ¹>íuªLàµïsM_âbå‡n{öæz˜çã-[Çyw+Θ³û+üC6Qç…¶+æw ±[â‘'¬”÷›=x~ß{È·Ì£iÝÚœÐ9’¾ ¯l|ü„Ä=î‹øÅ^‹¹>ÍkHÞÌ}`/ ­Wª—Ÿº;ð÷Ò_ëFHÈý…‹C\Ñ2~—>*Åƨeœ¯äO Q÷;ô`fèûó®=¯ŽýÚ4‹û—=Š›5¯¨xGq¼Yd6z¬ý9ÞÙ¥¡õYís;=?·<òY15v^â*»ífìÙ½\¿ä¯Ý+×}Á;²ßËz™ ~.‰?ŒÛ§ÐƒGÙ°K•cÿTB4)<¢nÅÿhîñÿù)×û´?Íû.&çRµN˜z“û¦bÿëÖû¿Vù[äYöb;wóï.öWë]Û·a÷µozêLú> ½âï¥OÚyºû-~MÏSí¾µöö^ü¹ÖU?£ëð*ñƒÎ-¸}áWGXiê‘R—”Ú=Ë=DúŸ¤Žzë>vVò3"͸É›Óó¾/¸ŽÜøûÅ;ÉçÔhL=ボKß»5÷zöíFï)žÖ=š®e†9Ç ï“ÌáóˆÙ.¢oR'2wðñ¨Ös¬Sá9â KÙƒàõ©Äù숃}ŸöÜ&ñ±‘µ)þ^êõZñ"×Ä^.”}oŠëÍŒ[àRÞ@©ß›9w 7¿Z^A¾k³ÿQãlåÖ¾ ët-øV…ÈöÉ(0ã¿È¿a}Ó’WðæÌ@ÿïwÅ$,Éu ŽuêmfÞ b[ο@êRïç¬ }Ÿ–cqîË*ë~\G^Aê³Ú'äMIÉyZOù~±ƒª5[yþjç•Tæ ”o"ø<" GÞe_ë1*ÿÞÈ(Ôå„?Øü&9vQü°ÖÌØí¿„ÓÁ)Yß'ß6¹—ùÏ`žHðšS±öAöR©õºüL>Mâ]£Ç·øÕ^ñ…Ök­'>"¾Š^ ùp§KNâß=ùyÿ¥äÈïÂôØO©gi~2ˆŸu#Nýk|M’ÿuªDŽ’Uø-ŒÞüº=½‹ûÿ}"uçU¸NËàþæÅ?'›Èÿ‡¿Š\Ë~_£êîKê9ª7šgÒþ{í«ô-Çon€\%¿Ïuj¾Iîߎ9zâ‘÷x¤‘þ÷HýYåMí¸ò iÑŒu¹o4{$|î!òÂýJžßë´ y3•ç(<™šç îƒÔçqi˜þ Å+Žì°3EƤh°(ôó1¬ÏuG¼n:²Ö݃ýCÇ¡oÒï§ùã«Ï\ìïSþí@§æÈñ“àª\eÁKi‹#oÂ{ªüLÚ/ q„âç@LØ+Ùk¢¸Øîñ9Â?ï]Z½(ô÷è^BåeÒü•Y/þ§ìâ>©)ÿw vmüâêל‹Äš_V>·LÊY¡ÏÑnV‘x9úÎ+ÝvôCæ5=7’¾Ó몤ӛ~nEhù´rµâUöY8k6D¨ÎsLÔ“ïû! u†á.ñïÁœØ©ƒjœ¨}Á¼Oö£þ‹ü{3 õ?_ìµÚa³Ê â?Ÿñü$/â /XÃóä¹PçÞ;/x3XOÞqoß|ž³ì ÎÛÄþ û}q̻ةçj¼f?ŽÉóÞ ¯~gžƒò¡Š½7¾ü27ôßi½^ój¿ &!÷2§¦ûb¬¤3y~­öÀœZš|ŒÛ–ë¾;íñyñÿ£mîŽ>ÿ¹»›¸ãšÐzâÇñ[⯜‹áÐË1ðoosóœ¥ä“~[Íkš’bG'æ£.s%ÞÍ{Ä›Ilä3êA®KêÄæ£“ðîÌéÆè\­ò jߺ1ä öÙ¯&_ÍùHBñ§î[p®_/–½‡–ý^ 9‡oª‘×ù³ õÛÂËð3ÇZ1©ušNyè—kr•:Ò'7ŒÞXûüOòo§ŠíïÓ:–u¢5øu^¤ù¡åÔ'Ëþ­{AÅ+O†gÎ÷lô°'¿k¯œ‹?í>šüØŠAà³rñŸ’÷Pžå± î‹Ð…ëyöqÁ¾ÿªï_ÌkŠÜ£ïs®Kúùt±—ë;ì^ÍðØÉç)ß¹#r!sý:/©}€ëæüÐçää™ïÇiNéxœ§à½À>ÈwÚ^|εz<¿BƒyÕº»Ôá½LY°+½ªr}³z€[æþ^^wsíÄSøÞŸËð*|§NáX\g—ÈëÆ|Äç²gYã kÝŸØéû¶^õÃ/?©B¾XöŠiÿYp/Éä¤|®ìUSܬõ5Ýó"ßèqÎ*ap˜=,'×7r7v]ûνֵ¤~©udµNçMè—Ô¡u¡[¡uHñwÊ» }›:¿¨ûŸÜ‰°—6ã?¥Yq–ú‰`?®òà ]‚ß ‡û¼Yþ1r'ùeíÃ0žõ@ŸŽ/¦Ï5b.ôýü®³ÐÝ>ÿEþÝ1‹ÛûŸ'y» ”=nŸäË ¶/ïÏÃsÊqn­ÿùf58»a!äAð‚“­48=c,á?ˆ†^ÍjBþAøñÍ®o…±÷®€ÓìB®uϲÿ$ùp» ÎÍ|&^³3½ï§ŽH<£u£'° ’÷6Š]áüenFíf°n¹öZq箄È]•¯À’2vÿ…ÿ8ýdfèë4íA>Ë…#Îkt¿Øm!Ÿ§ûD´ïȸt>Lj…ˆ‹oW$ž•½Ë*§º—-È[Ðã+òë‚BâxR_좟Gø”to²æ'ÍtSÑ3ÝëÓ?ÏO÷Oˆ±{\G$~qÛ¾®žÍ94‡\G¹“¾íÖ~(wïìÂ5è™ô£èÞÍÓêü†âygé âϽ÷°2' xWûa‚ùƒ“{ÁY›·`†¼'×|¬\·}7 z£û²¾ë½”y[/ÕÏhÜæMŠî—>%«Ó{ô@û5ÿG?TO‘G™G ÚyÞAž9éÑú€·ð z+øØ^‘úFÍCœ¿ä÷µoÈN”ÿ;»rùuôcÝ®¥¡ÏÛÍ0=šðÜÅüÐ߯}ŠGœO ±3Ç& ÿ’7ô†TÃ>ÕK‡>ÆX‰|oʾHô…}RÖ`·š]déI<+q}þxá+üs«Œøu©Ç©Üjn`ÅKìˆò³®ìÍy¼žÅõʼ“Ö)ϱÚUÝ‹¢|c:ר÷=×¥ò{v<¿—=žŠ³ÕOY?ÚøÏÅ;±÷Š»åºMá‰ö¡Éí#2?_C¯dOŸÑ¤<ñêþƒ<7Ùï©|ÇŠÛ´_[óEÆ’øäGVUáºK¤XÚ>¨^Y-×ÊÍsú~¤Bë±ú|ÿW?A¼,õ··>Üäþ }‹’zŒ5{+r±.×%y‘;ˆ?“yg»äµ0yû`<™çWìZñ8à”‘wñZçêu‹Ï=°š¼™ä uÿ®ös©]0wàœu/ý !àîÒ«V„¶Có0K§ð}bÏ5#WÂï«ýO!qqN_gMh} Öµ&E§?õrAôYxóBp~Eü‡öÅ霑Ó2:ϱíK~d4ç&ó$º'Üú#y$þ<µKØ#©O¸yòðwÖ Ï‹³ _êþoí³Ö}ÞÊg£õcí‹Ô8BûœŒÓ8ï–sÂöGIÿ[0þú¤}v#r,¼?Æ´“ØÃ†MÐC™‹tÏÇ?Ê^—`>BäNû@•Oùõ£}™Á¾ù|íƒpŸ– ‹Ó¤àœnOBNÏ+¯«Ï¾Žï×ÕïOx4Ÿä¬n‚Tþ‹ç°{ÒâuŒ]h›Žç&ó n®ÙœƒøÅÚ¿©¼Õæðà”…ÁaÒG§õ í§Ö}Ëš·Ò>%¯ò2þ_êó:w©xÕûœú©ìÏQ;ælûŒ¾J~Çú:"ñ”ôoçü²´¦Ž(y.Í«õ¬ákâýú+ˆÚÍå\$þñÄ!áç(}¨ª÷ÚOaíªÌüqú2aêNÁs¾û‚ù+­Ï©VÞsÄdäôc ü£î™Õ¹xÁÚ'çtšÅû°€ïŸ¸{4dq䑽Îå9wé êƒ7õ¿õ}þ_?ºFû\4Ö¢ÐÏÙ­[Dûf†¾>ÍSé^Pí{qã‡Çæ³y¾Qª/K=^ûœ4/”'é/Ð9I‡Ýf}øéSÔ|‡æû¬8Éø½äÓíOÀŸ½v‚GbxØc‰›´Î«õ ½^× êsÝ‹èÔ-ƒuI±Úÿ©yú`ܯõÕ¿¸®^¸?éëV|®çÜ+Ÿ#xXqnïrä‹¥Þ¯ùÌ €â9í£Q¿(~HûuBùé5?¦ýAºß\ó v¼2ø©Wj=&˜ß;ùŸ#|¯Ú§(S|²|²¯Î-|œ%u ­wh¿ SÀã<¥_À¼A.«ÝâÜdž?ðsªÄ÷üÿû±Ó¤åyJxÚ?LŸ¿Ú­7i>Hq¢=ñ8v£ÎâÎeÏæ‡–Ë༯öÝ ƒ1¾=xKúh‚yn±§ê§Uµ.j,޶¯Wp¸â`Íß™…+âGFF&Fæ9Û¦ØîÙ ¹•¸%¸"NÎAòj¬qyn¯â"7oÈüšâ@í¯Ð<¥îCPœ¡qDp>PãïéÉñgEûyÚ`>`Ï'ì¥ìÏÕ}]Ê_c=›Í} ?«ö»2¿@Ÿ·˜áð}2/¸Ñ¿¢þQö›»Gîò÷Âc¢ò©ß«ùa/ç"p”Ô·_‘÷’ùÀƒmþóâŒ9¥ã[üþge.Ÿ¿3Ä¿·ÿ_Êõßý±³Ì?ZöÛ/,äNæJìÏs‘£Y+ñS’¯ ¦ÿ]y¬—x÷z"¯É^ÏÆ>ÁßË\¾Ï;¾˜ïm<{•u~Eúe27Ëü½›ï*ç®ó6ÒŸ¬ù%ýÿÀ÷+Ãô7G>¢7ŽWKŸ‚Ó+>óò7N`Ïjå¹K?‚7+ï“:­ÓbùéÿS?ì;Òy¾(EˆÇÙÇê`?7÷ŠÎ6×– c¯ÍE±ÀÇ“jsßs¢„ñ‡‡:‘ß­-Ï!ϓ簧ï“ùãm;ð—Ìiüá®Îs½U4|ö©ÖRâ›VÛþ{g§SÝþñƒ$KJ¶²u,%$¡'YŽìû^¡8Lve_*Ë!„[²sP3†i0"d91Ù׬Çö„'Ù³…g^ç}]÷ëžùm¯ß3çŸûußsæ,ßïµ/Ÿ‹|ÉïÐïQ¼[@¯îî\_Ÿ3–ö ~ÿôµêÿôû_~<êи2Ÿ?š³3}Žë0$øÞpWÐ7`tàÊUsu¤ÞÞªÁºø‰©‚u2ë¤ÃO“8ƒâ~j>FóDÑ|—µèêq$N¬ö·Öÿºé¢‘_’WÖºØPßžèíSñ§U„ΞÎ]J]œâ¸øŽ#×Å^u½€}v~tÒ©#çKŸX'Iæ0„ð¹÷Nçyš‡+ò|¢·´~Aó…Þ•ËÉøÚj½}"õ1ªïˆÛôi{[‚ïIú\¼ˆ¡ü½R#úZî;à'.>L]ËC#Èï[gÓ8rÝÿ/èó?üpª”{&ØÏ 5Dζ öyÛÇû_¡ndðýïÃÿz Ëô~ÏÌ=vRmfþëz¯¯È±àw¿ý§½Âå™m^€ÿ#/¿ûþîÐÏÚ×:ònk\o_l“à¼eE ¤ÐWÊ‘r¤)GÊ‘r¤)GÊ‘r¤)GÊ‘r¤)Ç¿×ÊÄg4 â.Æ…Ìvç9!ˆ÷8ѽ:¿¿óë€àsF)â6—Jô þoíá èVªóYpþØ"ÁyÞˆBA|×ÍÙ*ø´c'ŸÞåz\§láÎÁ÷6÷{wý¡[p~†•]ƒëÏjăœ¾êßWN/›ú¿8ÞÚˆ`_W¯ öשy=ˆ;v¿ ¾ïÔ(ô©& ö5êñç}ùÈóuíJüy×ÏÄë-ò¾^ŸaäO[c:EˆÓ–úôÎÛ¨+¨M}d}òy'¸žÙ‚<§½|<ù}÷•_É÷¦+Iþ(Û~ò< ZzD°óeWêe²g#Û«;ñúz­¹^ðXÌc}ÉsÍ)Ažékú=¼î‰ä3c‘ÇÌ>—ú‰½ïsÞ/sÈL–þòƒä¡œ-à†ÙgVÞß{x†¸~™õR8^êqÎñ¼ÞZ©WÝÄ:N$ÞïdH~aâ@òo§Rÿððõ5C÷°Ž÷¢¨ÇIófÐî®ø \ƒÕ¿ ®—hŸVÂ[Âëþ¾xDpþ¹¢ýÿ“ùÔëæ’ù¢}©¡^'vß›îe_ŸNþ¾s’ü7è#tó^"ŸÕñ¯àB_Õבç¼þ”]±›ô‹P—i=»úðZPÏÿôj~? }„?‘òQGãwZÁùCÀß³V´¦¾ Ý2òªi/S‡ØöòÍ9ÿòoö¼䱿ŽN~+×¼#õsÔ3x‘×áSo%ùÿVÏ ^ÈZøã¥ üþuGêrGÑçíw"Om÷4$'}±7zñü½×ΗÖ6÷E}›ßü·ÈµÅáïc ½ïü˜úèZÓ'3:=÷iÑ \ÙàÃ8‹ÀW»¨¿ö¶‚;a?C}’{«×½*x«…3ÐoþyAæ«]ÛBýÃæÝ¼çŸàÌ'ñ yùœÍɾ(8Û#'Sï533y·ýô³Ú¿L¢žá›ø /lÖûXs)þ§»s>äÁš¬Ósô§g³^U§Q_°³ôÙŠ>awyÁ¹òþ¬KµßÈ¿_“ül³Xäf›IðE™UÑáûâuÀ¬L“=í ë>˜þCÿηäE› ¾ÿ©íÐÃŽZÑá÷5n­&ŸZŠú÷ÚëÔ…cžŸÙe:ýR¿•$¯Û¶õkè ¶Î߇^ 4‚>—u¤N¦hžCô„{“z„ZÉÿîΉ~¨u>_ÆÜk$u„¶‘:±»@ïV’¿2~Š?>¡ÞèìòßkS§³þ…Øðû›1§áëÀ­N²ËÀ»Y²™¼vmð•ÜšôE{~ ú.á õR šJÜ›\·È0®·< Ï•j2û¾Cú4PWj¯,#ëÂûÅQ'aµÞÊu~üŽzå‹©³~í"¸Ñ#ÇÅ ßRïœ&y5l}í_2ŸÀ­E­åW£>üÌøiáò ¯m>ªÌsô[— ìËÝÛ翃œVË{دâQç‘×yvë »£©SÞ=Kð6¤neóJUžùYò"·ß¢ÞÇ=µ{d)ø¢vâ:æ¡FPmôë@=A·ªÔ dž ½ˆÜ÷Ç\¦_bìú5^<‰WN²¯[Ç'ÓPw<÷®ØEEX×m[©Ïúê]êVÓO«ÏoLjÀû¤×^Y<Ý·ežYñãðåø*ÐU×Ѓ λ”ù–Æ>æ ¸… æ_Åþ9/œ_ŒÁ-M’ü߇ï¡/š<‚>Å£?«B8 ýˆ}cÍ'EéÛŒ( _ÜÚ@]ùšáÈ¥:¹Î¤íà¡ýô͜𿻇¥¿© xƨ]Øo¯Qd½{’}öˆóåûr'ûÒkvØ–Ñá|îÞü€ý=ä¿÷2ûp®¨Ô­HýQsÁkü÷qOç¹ôÃüu/Ù}½c—èG˜ð,öÈÂՋŸۋ¯Î¸Rì‰ðÜ £»Þª0CêÖRÃ÷¤ýAO¶=îÀ±“ÐËíîø·ÀP½ìWÿ{ö9ês­Äe¬_Cú&½ZDZSW4A/ˆ^±?£>Ì[Ά}æ‚Ô1 Ž\õeÈÕ£†ôÓ4Aï´°Ùÿ à.YÆ‹ðïÆÐã¯ô‡9ï”…î¤F^v_My½ÖÔsOÍ9?Ù>lŒÂYM]©1Ÿù–^£õÈïÏÇr]±Û¼>£°Ã¦€K¯tï ªÀzL9ß‹|õÞ,ÏïéÏaÇŒgŽ¹Ù¨!öRá~è±r8¨à“ݦ¿ÀÚp29ߌ?[õ£¹±¯.dãûݥȷó¡Ó*ò÷¥ ï¸¥Ø[®à÷§™ÇgETOåUê½pþÜ‚û#té.}ˆÜ:ñvMËjàÓwŸÝ_3âÞ(Þaìçi‚ËpþÓ/Næ êÅý~őœE‘¼ÈO/êWèµþtì6µÿ{vžÎ7z»}µVÜ"ü‚qyޏ^Iú¬Là.šE[. Oï2¸ðÞðñŒO†ó^é¦"—‡Ë­v¤½ávÑð›íà1Ú³'3—hœý#zÖ(Õ|Ñ×îKŸÝxø©} Öa8õñFQpö;ØÊ9ÐÍ3Á† ŸEÎX¥³a®³ð3Eoz•‹À[ÿä=¯Uœþ$ôŸdÿõ›*ÿýû૘b,ÝèÊþߎdŸ¦o㹦\ÀNo|œw¨ÚuÄUJ?Éåìsª«è™¯eÿ:ûë~K䵨JçjG«\qS¥Æîÿvp}ïmú#•O¬Ôƒº9[ t7ìöŒYቩãÜ/Á­œý(ö¿õâMæ9EΕ¿ÿ6|ÿü€Ëh|…þô£êz«S»ß_±“Ï,à˸ÀKtË·€ŸRý =-ÞÊóÎ[ÂóO©Êyñ?ü6éÐ[[ ¿ûj5ë¹ìc®—a)vm=puCñ±Ç<ìÈ)þ³Éþ¯Žc3Çà7›O|¦ï¾Dߺù8 jOxÇ÷DøÓ¿ôòoÄä\šèxMvèEü ³õîÖž>¬óî´ìç{+Ù—×® ÏÅ1[îæþÖèö*sO­nÔû¿ïç¿[Ÿï7û;Çù3ü+þ ë'd®®Íú9Ý‹½¥òWý«$ó<튽 £S6×+}õŒÁý§½Ü؃øh«åô{;°nbøÆ8ì§;Uç]Ûs½èô\_äŠúùþ™ºB/‚Ÿ77-ò7?ó_Ü_Ã?Ã& ¯ê ¾ø:æO¹s&õêî8ð%ÍÑô­‹˜+cŒÀì°ý#ñhZkôƒ5ù¼) r¬ýàvaú‚¬|-¤/o$~£ÚG³j³ž#ÀõWºvócÿ?¹,ýHc{Û?’ˆ~ýx×É-øàê"—5¾÷˜‡ÝÓø:|ýÝuô=/®‚>7Ýž—Œ®ö\„®×•.7Ù¬gUæz»y^dMyP÷ ï—ÏëW‚žsñþâ/ºëð¼[/ð<¢?Í¡ë“ùÎö¬ûÏ1ì·äU.?ö1'?qV•‡f =Ž`?ÔNx†úF%úTU¯{“Á𬛬G±ñÈ9‡þhûGÁwÕ8¨Ø+f¹´ä&^#ΞïäB“¾ ¿ÚCÊo2Æ «qM{lè_ò³š_vÌ4œ§qA¡ïÃHüøgº/ —7f×6ØWåëó)ñ,÷ÅÈõ†G£Ãå‚cø?ô©y™Z’/xŽ›êÍk|Ǩ̜Mšé;öû¶„NÄþµ‹ïA\¹ÊóØý°KœëÄ%Ÿ²“n?çèß™ðR Çü‹m‰³ˆŸ§~¶~ªÝåÇÿÈ{Ý·¡óC 2O0-ë|¤Ý¬ð}²/Ž _gÕ7f…(òj/õò"oвçǃ÷oM•9òêÿ ýež«ø‡VTwÞ»OV®+yùÇ=ÌôwšÇ>G¯7—HýkëÓ3ÐáÓ #™ïuȺ‹\¶Ê$@_"ïBzPò—öû£xþWºÿ¼øO™ƒJœÍ?ͺUÙŠ~>ŽÊù$?…¸ÑÍì›ägüóýÈŸH=…æ©ýg‹#ï%žkd½…|öÖòÞ.X :œO5O§qtÍC{o¿NþFâþƔނ¯)ùZÙ/ÑD\lÏ‘}«Ê,•›~ý¹3…. ç2ùáÃëà»z Úó»ä3=ûp+>•ü¹êµ¯Ct{7òh[QÎ[Õy?Dð÷•%P½ÏßÌ"Î.y7¦ç‰ßb¡?Ô-dȼõðÙl*¸œÏ´?jËû>ìÍó®É¿0ý¿ô ô,y;ãBfìÄíý°[£{Áÿâ‡hÉ|Œ¾hÝjÇóWÜCë¼.v†Q,.œ^Üoâ„Ó©Sœ%Í[yõ¶ñj×­Ï„þ=¯ù)·÷"ä§øù¡8eoÁsœÿ9ï¡ù•Ý cÃùÂþéúGâüfݱàMejÿK‘<]p€3OÀÍ]ÿáB.ê9†ÍâüòõÁ¿½žç?@ýët©³ _”$/Y—iy‰¿z+6"×2,b}š1GÏq²_»À›Õ8]' òpvsö]ãÔbjüÞ(™…÷•8’]Ãd¿ûDþc~„Õçeøky^ø*ýIôÍN懘ǧ|¢q—кå×éq$û?Hìx¯{â¬dô ñ^kÇyžGüxëÕ‡"‰×i=Ú­v.pdÔ¿$^ɇØñ X/É—)ß;GÁ9Uyè¤÷M뜊¨ [»EüXä§æëüïÀñ1^(Ê{‰]â¿v¹¾ çS¿ãEä‹êQ‡¹Þõôó“ñ«ÄÍíýáë.ëð†ÏuND±KJçZpua8ßøŸååþ]w%³+´nJý¥·PÜXó[bŸÚ¥6r^£ÖcÕä«ÄsíNõ’ÙÉÖÖ›øE×A—…˜¿äµÏZëCùtÍO¿šxÕXæk~(don~,,~€×µ't1½)ùvÝW·ræÉˆÝdßîKüHêdì=üU¿Ü÷B÷äaE¯jPã*{xÙŸÁ¾h]´[/t†Þ.Pº|?ŠÏ~Û¡W‰Cª¼sJÄó÷i÷…Ód/ñtɃ¨ª‘x¾³g$ñÞãÌñg5dT^iœZâ>šOuW€7ë?Zƒ<–¸³±ñø@ì0­/µª×ܬ¶Ø›+§sÞ¹‚ü.~¡Æï5^¢þ´y òµ>8¶n¹vèñO¢‚/®yݲcøÿ"àymîó¼‰Å—„Ë ûûaøEj'O¼ÿ:HpE®hVóTšU½¬õ5þiæ“ûVk-r­x>Þyð›T>kÞÉž‹<™?:Ð8ÌáÔGõ—Ï>Ð}%rÝŒ(=4838åï6%þ¤õjoJ݈S#‚ç¨uœ÷ÌáSÏ q&å{­«ÕzÕ~búbúÎ'ÂÓ¼¸yír0Ûoä/$ïÞûû'þŸ·£둆ù Z—ãGÞÄNÔ<‚Æ›UŸ†ì;ñ í6sOû·¾uAî›­ü]krOê¾Ì©f„¯«Ê}ú ¡ó*‚7Ý-¼©ûT½l~{SìIwí^äWãÂä6¾+ü _•yxYâ¡ßàÓZ3Á5÷¯3Ië'Cõ²’oÓúL}O=ó^ÍFrßX™›þò«ÉâfÕoÑG¶àüe@çRgÊÇ5ïË>HÞÅ8Ö}•:•³ÖП“ùᡸUõ–ÉìTõ«ÍíYe>ùÂdyq§ïƒäyٮ̳Ó|½Ò³÷|!q-ëóì’ø‰õ•:awÿ]â¯S1W6w=òjßÊܳÒý¹ÏÆÐýáü=JædçÛÔäqø wîȳ¶–¸@Sè·s—ÁÃrÛ1CëKCñ”«±Oñ×ðs¯Ãþ‘þ•÷êh|Vë ¬§Òc'ÕÏIý3óîJô»äÏÜ9ßð~bŸ‡êQ®çFÖÉ ¾õïàDû/e”ußÀþJˆÖY†èbî'Ø š/6ùz«$ññ'ýƸp=Éyr¯’:}NwøäÎ’öMü8ý]ãéj§Ù_¶a=%HœŸOäø)ò¾—¶£¨r7”wÎÚŠ:ó©°ƒ$ïàû:rRêîU_9EÎG>ýÛ{>‹N¶ŸRßeíŸÎ¾IÊø O\¸\±Þø'y‘“*ǽuÌ÷ƒ'雯~I^/”O8 û\êšµ.Â{&{LíŒ,àB96NV_êÿ(Y½šs7+rìƒ!Ð÷å¬ËÏà›ý+±¾+š$È{2߯ÌN¦ä¯íدг»ÞŠ ?Í˨½£ý*Z¿¬õ"j¿„òÀ­·þ›½·Œ–âlþµw÷` ÁÝ!h4'8„ÆÝÝ‚»»4îNpé Á=8 CpÎ^}UõÚû¿ÞIžç]ç¬s2_fÍLOË}—ׯª¼uÒüâl};ZãÍ^bOÛ edžE |#Ñ èY{Uø´t{è®yúºIÞl²•õØú:SXÉjþÈÍÚ~87 ÿAê)4ßgõÙ §?Ëy%h¼FŸ¸­6Ò϶}G}»µãvÎ+ø"ãø¸á{ůküIŸGã·Á6oÐ Sƒƒ¿9ðåAú°KÜÛÙ¾­÷?¡³úË0ë˜8˜çšÒú3‡²mƆõ#µþHðXFÃ'Ä$nâ¿Ó÷ø‹Vøa&óIßîÛ ·ó×{ý+q­;®Ê‰~<‘ÚºOªWŸLš†uoV{Ròùš‡¶Nãÿ-æéX•ÿK<ÐÕ+Œªq0§è'øÍ|B¾ðNæföŽnyZžKêa4nž›=÷ù|©Gsf÷ç¾lGJ¾JóÊÆ›‰aò×î¢æàKjäÀN˜µý*qhÅi²õÆn<ÊwW).ÇÇ{HœÀš}"~…æe¬ÑðËg€oj´">%uV,æTëói¾\q·NÝvðWælÙÍ08r#Bn>+þáHø*B>æÒ‰vÊÁ{šaü³fü¾ÿ„þí ÌÁôñâ¯[‹O§œŸîƒõGìÁo»×ö‡”xf wÖUücõ/ÝÃáX¿åk ·ü£ £guá3ÉS)ÞHqFÁ\'ÄîLKþFüi³7óNƒ¹çÿOtúÎC.Ä n\üXÅš“éŸn&=ÊsKVùÕ5ß÷©jÿšö-×Í1‰ëÆÛÌÜñ÷z¿7¾ï½›¥Îì÷öo|çÞ÷É#:ÞqÍ›þäÿïûo·w¾›å‘ƒb¿¨Ü ~ŠŽ=¯~±/oÔ”øOˆEoˆÒ¼­âR­ä…‘ ‚gòío­Sš ý¾«ü?>?zEòn~~OöCquÁöÉW…>Îî;Iôenâ&Qß#·ÏXv{Kê:‚ ~DÎKžLãÖ—ÌIS\¢ÖçVg$˜[þ–¼º¹÷·Aÿ„þ5OâÇ9êLOºì*üû¬9òJðˆ>ž±÷·ÐçÀèO,qIÅ=ù~¾ØÖœGÔÁ:}IÝç6\ìÊ‘^]‡¯'b©ÈýÕÞ'ùl˽`nŸÚ­{ú"÷£zAõ³òqˆ½ ]•ŠÂsH>Õ*´z»÷ýÓÝ=?·¾Î»Åûß—£Ⱥö>_æ}¶šÜûÙû~ñ‡CÞñ…ÚÃ3Òzôï¤|Ìù>ŒõŽLíä/0Ѐ¯DO:“™£æVèI¼¯c%øäYúÇKý©%òIäŒÆãÝNs‘×é'¯¸àÜ=è ‰C)ÏYÌübï4³ÿ¿Á\=ŸçyœŒü…Ö?ˆ«ù.o¹£7-MZ¢ô£8xµ÷T9Mîã·çè‡jÌ˳ÿ”>­’ˆÿLü<ÄóOè_ëô—ø6èÑ_ Ípâ7T?ÄLŸZÛ ¿Fº<•|Kðð<ò4º"_ÅÔüT`ýHâÀY¥Ï¿ÄëO¬õDÎ¥½è Á÷©ßo|¨Æ:HLqêÛ™÷sý¬á­'[ûÿ¦þS•»Ì›XP9ž'öï÷gyŽzÿ_ã„÷ûvôˆ‚Þ~iþ1dݱ£ÄoQ|¡³‘õÓ¸ƒ³zT\§ÚUš7Ô<[pkÔ0xf7Ëúò^½Æÿ1‹F?$‹ÁÜ<Íç”{F¯*î\ñöæ§ð—ÄÙ­N…á#É÷›Ç„Ñ/Öœ»’o?äŸÐ¿âdµ?‚_ÿ¥øE‰+úñªf2§Zò(¾=#zKë—Ô~ðëZ$î¢t¯~•ú¿ŠsÒ8ˆ3޹ ö;Ù矱÷–Øað.ö±ÄG¡õ§Š[×<±yqùíL÷™ÒgƒG_Áø“<ºŒ~vÒûüª–÷9}vKø&‘ ?xßÛÏóí‡î?{|L5zž~Ï;.øCèôƒã}oõ*_\:ÿD¿åýn\ØæñƒÙ²Ï6èfúaæ OŸËxŸµ‰¼÷¿½3è•÷Ù ß™ë'‰·&xÁƒ¨Ýn„o®u†øWqË@§/V#ß_U€^‹17Ü(7}$v£ó>q˜!·?Rgc¶m‹½Y ÃêÐü§vŠïï©ý)õG‘ÄŸŽû¬sLòfâgký’»áZ˜ú;G=¸b"ß‹^··¯þGu`J×.ÌÓz ¿‚âñDÏjýV0u1âš/Õú?é x†ùH^ï×ôЭèa_ÿ‰idÿ–x€øÙîËß°kz—á]ò¯!vô~.<û{qñŠ• ÑSG±¯’—÷ë”&óè̺Ý:ZÀ£G·Bï³{ÖòìcèFï{ã`Zè3GïÝ^pÍ£»À€oÑÏ2xôí\nãñ…5ö÷?kï è½Vì¢/½w3KNŽKq>Øüz§÷>2©w~k{øÍ©‹¾˜ôøÓ®>è›ÓÓ3f§Üž}fMî]?X+!ú¢çJï!ösFWÅ”ø¯H‡ÜžÚ~qèÏFäÐ]ÊáȉcjüUóg~½¡ø½>žDâòÁÌ1U|†Öwj[ëwW§ù?þ~²ô\ºüò$i˜ïUN;ßgÆÿ’~2j/¸õÏø'ô¯uçNûAêDüüìÎwËC_O㌾¯uOQ=kV ߎүÏÍùšû{PñÆ~ýŠú…b»-€KÞX†¼Áµ’ „ßÃÄùõ¸àÓ Ûå>¡×p3¡¯ä…=z2‹'ôì›`ÁèÐãµ>ÈÓZ¿a¯çé†|î1;£Š»ÃûþàÞ»ÜðÞÝV?B—á›cïg¼Fm>X;ÿÆEüá>öÉz`7¥žÎ{â[ðÑõ«_Ù« mõ®Ûýô\ñ |÷kÞ~ÍñK—{×5ç‡÷ž'Pí!ö[­Û諼çVÿPã!þ ô©vˆÈu?ߨñÝ:@¿§žñõ=Ø;LüÖ}Ð’ø‡àÿ'áãEÄUûTqFÚÒä¤þFãÇμ9ü¾¦t(þ§ÚÑZïjMÎÿ½ŸŸZ;÷ïÐ0Öù*ÞÿµŽÐµÖ)*îÁ¯ïqgC—ç $n¨8~Ååúõ¯Rg¬?@â*·ôåÆÃ…b·LFOˆ}cÆ|ë­·Yºt/õ,N‡wÄK%ÈŸ‘umUÅ£ãa äwÃ'ž<·ÎT9†î¶ÌÄž©îx¿;IFxŸí†ßñþ¼°G?Á q¼ã޵ð{‡½ñÎo™Sð‡›¥‡®;ŸöŽwf÷ñÞÝßsþÁMÑ/f{ïö²’ÝÚJï—u‚¿þ(?éÉwëÔYî3f ïs`çdø r[ôÈÌY»¯¿ç¼‹ªrüOöËzx¿;­Fóîoxü‘å™ð«v¯ðÖSûs(nÃè– ½ë”§—Bì{ï~ÍA‡Ð7£+Ñ'èç;ø·‚¯‘kž<¶Ö2WOë9´ož7itý(vC•žØCbGk=s² ñ;É{ËÔÃþ¹¨xµW4~eï³&üú7?|×Äû¿ô¯Q:5·dÁŽ|­âjªõYZ·§ù÷ý'ðÇc¿ÔºX·ñ›=ñ—íû3» £—7ï×I^DãmÚ§ÍIsƒujÜýù¥öKÃQÐù¤z]‡øÈçÅ»°+¢‚>^~ 5Žé½Û+vî:€Žó½òä©Ýç1tc~òèÐé4‘óŒ‹Ýñ¹/ç»s ùß3?ô^f+öÕ”èè™kÓójs qyÿý4ô~÷q¬ßÞz|æ|ÞT<à=‡™½/|•(vÓíè­¯`o݉Ž~µúzS®w­ªGÿæèÞýº{+!÷³%¾ô %vܦ­Þÿêµ¼ç3 þÂúõ*Åy2aV$¾•é÷Ÿh3ÿ¿óÿëþ}õ¼MaèRò8Ñ‘wâ '%Þ¨ñ}ÅÝk?šFä³à4é×k?ÁÁ¹‡rNû[ôï–îàOìxͯj^Óç¿Ráˆ-ùý> =JžÆ¯oÚ_º•zŽ@ö2Ä1µŒð}pÀÖ°üýeò6·ûFŸSñí~‰­ËY÷›?⧆{çíK À;î¬ äû7Ø#g!Ç‹ìƒNEõÞíÆ•=¹j܈âýn½»ëí»§7~îåfÞùÌg™‘ó_•ç:UMì¥FSùþ‹BÐçí}\gÌèáëÏÐëôaðQ³Èÿpû ¶¡G.¿À®©º ¹¾þõÀíÜϟ׸Îü7Ä“z¼ƒ&BþW.~4ôñêw¨ýˆ^9-8Ô;‡ó—Ëç=§qùÏÕéøwd ì8Éo¸yëxüèSÏ{Ö>ˆ?4àq©u5 û&ñ„‰w¸ÏeåˆïªÝ%u¼ö¤øsR?æ÷³Ø¾ûT»£ÅZò‚™-üû¸µÉ#JYñ~_ê/ÿý’ÿÚÚ;¯ú;•æ“Ñ|€àqŒS ‘ÿŠ·•xöO ¡/òR7§ùAkmù°x]éof7½Vè•ç<™_ÇÛáü2­ ögÃ'žß,ÖÝ“gö³¶^<ÒÙÓù.ò˼×ý`hú5ÎG‡þ¢¶f?羂žÕBOôŠ…½TjÙNè(?tVdç‹¿k¥Ç^²‚©†¦/+GUäègÉ̼ìÑs¥z"v„Ý;©w¼iƒNþ@ÜgâFâ>Iªs~ÉÙëò€·“z»u.è@ú´8E?‘V™û|¿¾“üuà^yð‚-»±_ý/àÿ_¸O|÷È7§¼ã*gÝ$Oa·ÿš÷‹÷°«ºÞå÷\ïá›nã<{-’÷¼î÷…ˆë:ýñ¯V}F¯:=þ3‹µ [õìŒÇ$$ýWg¦}†Bî|ÛÕóćr/ÁoNóœŠöyÕz¡ÝëX'Á™üÕ—õ¶#ô/¸t퇡ø#¿îZì}cµÌ7TûGø7¸Ž¹Ó¾:›¹¤—µÛ#+ýŒ¾9ÉÛHÜÔž7oßyÔ«„oNþ!~6ìƒD«ˆOžy„]R*ÖaYôýðý•2wS:+œ’}³lè3Fbè¶^xö±æä[iìü@æÊø•g†bO»„±,‰w]£tÎÛhòrf3±C$.9'.÷³¹?ú!y\ü¾M<¾u“ÄO-ð:=z»ê·,Ðý‘¥ø á&xtêìBœoÆ Ï>²§ÞDîÕ}‹ž.ú—¾djÇ;‡2à§9{‘— cw?x.¹I%Ö©K<ì›B‹à¿!&ü:ýco~_ÕÞÅs̳ð;Î/BÞç0àƒ¦[à—›IY‡üc‘YêÂ?ÑŠ ï ]f¦¶çy‡®¥…õ¡ô­¸ìÂo¨‹•:@Å'+N_íˆ?ú5ÁüÕ—;~%óß´Svàú27Ví{›×£qEÅwkÝ£ò‹[(>÷¯ý”“›‹…nø^âüšW½Œ¯}¾Bnl=DäÅ!9ž} Œ}é»wðBïxëÀ2äö¹iäe·%†o_ÃÞ9›¾‘x¿“e6û9;ˆœmµ§WÜ»à³$õ¡Û…»½ÏN‘‡CÓCpäuïwkÐu¬ ì{í-ðY›ãðMÏ’^^Á½Óé¨ì'tÐb|ò¶5vÖ‡ïÐ*w‡=ã÷m˰KŒ¢è§ÙQù^â©ÆÐÕÐmä]]™š±‡›ó¿É÷ȾxöH0ÚmäeÓ‘žþóí¡•ыţ§ªwÄ£sëLE®Wt"÷W."réøxOþ›é'c÷ÅH†¾}†]h—Kþ#þäPÔÞúÓÊ_¸µ»¿àèI⬊;Uü½ÒögÐ:(í?æÞé±6ôñõœy‚¾×y¢Bï/o0Ç´j1ìÉK¾>¾<4}jÿíw£õTzųø}o¥ŽGó»Nýèð‰à(4/«rÜÊ·øEÆ91…õœøùø6/ëùeuü²qáBý¼|­3>èÑ›ù zþØnÖýêÓÞÿ;fó~·î^ƒ®Oï"ïÕªŽ÷£Á7\?áQôÁšëìãöÞÐíå×|N?ϱÆBmvC/5¿B¾‹mfï‚üÛ— ?`p$änñØø“뾄®ÓtÇžêÙ¿wðdè­í1þ¿ëÏ_ktz×F‰ž v«Ž?Ðu%Çì_±÷ ø k'òG°Î­ªC¿]â'‰d~»žç*7†ûÍ—œçi±ÖÓ—Ö“Š=eµbåá:çb€‡ú}zuÄaäÁþKÈ¥ŠoyÎfõáWÅåÍEÞóT<âÚo·W\ì&Å•k}æŒpø‘gž‚ëÝ]øoÅÿŸzxQ­Õ¼n0iìq­7.±}Nèw­&©‚ß-ý[4ž©}Tµ´ê ©¿«uµîçÝÞ~Gäcwt™<:ûÒ½!vJј݆ØËÐqµzø³–CßÏ‹áÏfߌܟ¶5¬ß'ûØÖý­~é§ÐÇÛÖ^\ÏH9ȳ3´.NûÚ¸Q»xô`fý€Üî7øÿ“óEL…5~ vMè"øu!îcÚ·è¹@テ“¦‡^Î#O³Ì`=Œ8è8=¼ÏÖëðA¾Ñ<ïÅwÞ:¸Ã÷a‡íjâÉwçÈ¢0qQcþǃ¡ù+Øãç‘üDðþ½=2ëÜk(ëQ'~É©HŽì/y–È[°ûo B^nB^úÍ!ü®åÉàbç‘¿a]róΧõ5V£ÅÄ·en„Öi}ªâÄtþ‚=4ø(ñ?µ~篾‚%[ðÎ#8Í“Zw¢€?Ú~”>!>^XüVkL ©ƒ¢îUíóý8ðÆÐ/÷þHì<±§´ËL/sÈS›È‹« ‘«wÏ!ï3ï‡þó[ØÍßè»OìÕR¬ï•¢ÐI¹¬|_ôòå÷£Ø?“‰Y5‹Bm& wSçCoŒyľ$šœkÛ<Ϲ¨ìwÕ™µ×ƒó•ü¦;¿u1:!w«çôî3x'|*ñ&wØèõéXò]Îâ×åéŒwö-vØ®ˆ<ßµ-è½õÑ#"·+Žzômî‹sšu˜çù¯Æw½Ïœy±'4}*~(0:!Ï/ú#ðEì¤çÇXŸ‹°ã´ŸûEá<¶“—“<ƒ1üûCO.uF>ÌËK\î«2œ¯_nä‹=¾j×þHÝþkýœç[|˜ûÔºÎ⥉ŸH‡âùüxüÄqÔä¬ï]×Iù†ß7mžówèßh~Á£¯!øÅ3ï­Â.’úH­Rü¬£Uü‡Ì¤i¦n^ß7a?\Ž¿²b4yÎCøƒÆ©ùÐoºW¬WÞØ… â–K£!¿rØ5iV¡o›ý„¼Kx¹$q kÆSÖûáYøáê*ì„æ Çó&|P©!ò©HAü‰Ë¹‰ 5¾ãѰL_î¯mspC–y|m¸…໎Çðr6†N¿ÚÌõ6o! vO Ákèïpâí³–Cg±öÃ_çä÷h½ø½ViïyÜ«1 Ë«W9O—^è‰Õ·°÷ŠäŸ'q{'Î`äõÒ˜ÄFua®mB_Šb—?œo9c£#ûJöx%ôÙ¯CÙèkÐc£ÏêÇõì#|+â@ûºx~˜úÃeçá“[[ч›ƒØ­mO²Þ#‹rÞƒ=½¨~càiä§ô+Uzôëñ³Ý„Þ¤ˆóç}òhR×öW_ΈR½ëJŸÅ#8•&c×þXqxZ7Ø;þ“<"8¨ûñsµß—àó5g%/α`)o}Í爦{‹¼HÕúµºZœƒ÷–!GWµ%Nrñô{}vÑOõ‘g’—2–Äz“¼OCü_ýá8Ñ‘;ÃÁ'ý/“-é³ t—Øü>þ©; çþø|´Ñµ¸ƒ˜ÄWÛ û²9‘ŸF|ò·ËúÃo)wãÿÅ»Íù5ït÷4ô°b þåþßÈOä'Ol¶OBwè½Þå¡ëè.|së;üóŠ#$õ”óÜ® }Ñ™ç7½jç2Ÿ_!~yôòÜǺd»Àuоç¹Ë~ÁºniÒÏÝÚÑ·`¿ÖmÈqyÙûöò³{²oÅû [vã¼ÏKgj4‰¸”ôow÷—ÆÎ—~¯Ú×QqhZ·©¸Ååh_ý¿úr}z÷+ù,í¯æürܑൿ`ðcqp:Ò?Á9ý+~‚è Å¿j¿¿ÿÃŒï½>«!~$ñ¼sЙ3¤+ï‚—qS†>$ÞcÏ›ŒÜ¯ÒÙÛ¯À7‘Y¿;'e±®[a/ä­(r~9ïƒgr¾o:"7ç ¿TXÃa÷Tÿ¹·x¿Ÿ/Ìþí³ˆómŒ†W;jÆë-ìûvð ›6ºw;¦âsè2óòONèë@èj|9øá}rø-pŸûø5üû(!òõA3ôOÔìÐ]p„ØoÔ?ä/ÄntK€ó4jÄóнc<Ÿ^ýÏ?Ee#þ¶9ëkôÞ—©ñG^@/}S Œÿí¦‰Íõ¶dD¾¯|´|»w¼Ñd-|—{>땹vìØ·<ׂNöZãã-¥ŽÖ/ê7Å•ø¸¸½ÃÁëHüÍ\ƒõßùér¢y âÒU¯³¾q"¢ŸO@ïþ¶ú{šu,d³/¥ÄŽô ?·_KèÀèe úÅ~‰u¯ïÂ/ç{‹¾Ù€<ñ'tcÅÂ/Ë^™ø|–Ièëëá¹N»N÷¢|š75öȸ9ÐßÖ%üÿzGìæ“y±ë:}Ï{â‘Ø7¹Ïbw| Nè½:-~ºßö üg¬Æž‘¼·5öÿ›u úm˜ }³ûÊ<û„ëô̺™ƒY×:Ðc—“ì׌uY…8Zä¬çž!Èå_š°b·JfÄÞìܺ}±?7Úmø'ÿpìü[¨rªÄBN‰Ÿ¼ÝÖó[‚{Jp¿RßíÏÐù.R?¨°™x­ôŸ²s¯"ÞþÁÛ×9Eõ ÷Æ«pºná<*—Z¼kìñVíï'ýhBä#úJêóœ!Õ±ç%¦ù þÊ‚˜ÔuöÁý‡‹D~tLäE¦ûèáW)Y·‘¡/Áë8ûZ³Ï;Ra Mξ¶~}¹‚Ü>>’÷.gÑâ÷Cü*Ö=-y©à±ÛØ·vÃËCw£aŸÆˆÜ»Ü˜ó¨Æ?\±ñC*Ü@ÒÁ?‡v³ÿ‘·P\ë6ñõëç±§×S'`ïÉõr/!>U¶ôÿ9)òYã»óq>Í«]YŠ_^ ýdUíÇz}š‡}÷>0꾇ޖ.á³óüòœ8¥}z tÿžõ n¾‹^\’ñÐBŸ<îÍý®œÀçÎ-Ð×’´wÔÆÞS}µ“|—ùÊ@~*ÅóUšIœ¡~ü•|‘Ï{×=B}œ±½vN„¹ÔH~È·3š>¥n:ÃJøá‡ÐQ¿ÆØÓ2—%Ðïõ‚¿Cÿî÷ùûyÏ-õàjo™o[Ç×¹± {ÕþM«’~ ~ÿ˜-ɇI>[ûƒkšêœ`¶;àâ>DÎfJ?tjƾ^·à‹‰?òþdvЬ¼ðÇÏw° ÎÖãKÛ¡ïSn¼8'kKäÛ»+øÓ«r¼ØEfÌ'ÐÇé[|Ž ^ÇŽ÷;×É]”üšÄõCîú”…ß³Íâ>´o³Î·šQ‡¼ÿë}ø‡u'cgI™Õv†ä·æñÿ_®àG<~@<·5ù0ßÎÞv{jísôǸS ëfçéÉ韛[býæ¾Òw!~'v]¦ÑèM<ûÆÇÙ%IO¾°8<ûÚ©oÆî±»Ü€Ÿ'„O–G±úåøÅûßéž¼_ªEXpìJšW²:¦^Gæißíªý¹Ü„å©kjþÕßÂ?˜ïÇysïóÒ ç¥Ÿ¿o÷hãQ]ˆßHÿ7íó£þ‡Ý«õÙNÔ>Às^Ÿîn÷“zRçy1üe­'•ùˆÁ+‘=ûÈ*?úŸ}ë¹¹Ÿº ~ã§pÈ£¨Ý©Ù×”õŸ:¾KœÓLAÞJíÏÀª#ÐwÔOÐÍžäè¡i=ùìîéK¼|v7OÞhý¼‘bùèÓÝöÉú OV_A®åH‚Ý,8&íëoÔ xth¿EâŒF´ù¼< ?NHnèðIøé}}Ï>°†$À>ëq|RÃzÞqeWÁ!8 ~èsyè]p=FârØ)qV`ïÜCÞ ëz޳/‚‹Xiyëm4|Žý.yw+ÙBäÒ¹™ä¹Î·GŸ~ÑáPh¾ ñ‰Kµ><^—÷xÃñ‡&Ïàz)·²ÞqW¼÷‰GÏxÿÿ¼Ùó ƒSÏ!÷¥^SûBkß`wÍüÉ¡éûËJÃ7·Ç_—~’vœÞÿ³¥€gÿ›K¦àWË! y­±6$1éøµà‡!·è!s¢ Û°‡.5!N•h¸sé{­ybÅýi_`íêžlǾuIþ Û8äÉâñÐ[âÒйâÝK¦Cžï¿cm'ø4›ó¼=Ë~ÝiŒþ®6Ä[?í³no~€Kò?GpJ:Ç×nó÷¸ó^/äè ÐKÕ£‡GbIŸïláx‰ßšÑ‰ƒ˜ã‹pÿR/l¦œ€¿ v¿y|¿£ž÷ÜæëGÈײq—Eu‰/þçèìŽ?Õz˜ìeðsž: ô†Þ5â™Ò†ûüj¸ñ7Ìu¿s>©3sN€{pjòÜÁŒ©±÷g=óVO%£õ£W¿£¯3Ä€ÿÊï¼ì{¸»Æ÷ÞñÒ_Ñ5ߣ?Ï—"¿;¤8Qé'¥óVu¿üún±ÃµOý_}¹6‚~U•øL­raðN¡˜Äs"×òòÊÚÙ\29ßîð¨2ŸQëô§ªu)Z®úEçݨÝfVþHŸ¦Lwˆ«Ž¾}‹u—¼–Ñ-1ôtÈÁn™º’ü½û¼%ûöàô‚Êõ\¹À×K=Žö Ó¾¢ÚßÌ(²ù?ø#òîF ü»C‘ãÛÚB/2'ܘÚþ–>uV¼Ø)ó›C‚'3ûÖ…¬€/íå¹2%å÷Ë’·“¸¹ûö<|’k.xŒ[ ŸÒ×ð[ž5@Ÿ%¦žÆˆPë½9 ÝÙ‡}2¯ÞAy>ø=ËäOÛäßd>³;}*¸æ™G%¾O>ÐJøÉ‘ãXOÉ;:­ŸµŸ¢×Aú•èœd¿¿ŒÌ©¶fA^@çâ^ þAÜJú“89ÆÀ7I o;…ø…¹'>þßž8‡ÂÐMÇø‹Ç6;¬%."õWÖÏ©K{rZçi¾ZûÿŽ^Þš~«cG¦?Å>#8Š.Q±k+þ„?0È÷Α’þŠ~ýeŠuäÅS‡ÿ¤NÊ ÿ'çi0š<Øú?àÑOž…<}â? ?WfoGœ^ {Nò{!ú :·æzö³•$+~Âæ]ä/·‡/_$žü:þaÖ6è?ÁKÛ·'ßxU•ç™» þxâU_—ľ1N ¤?€óôz%Ü~äBäÃä玭‚?$Þk¾™Îs¥ÿÅþ…ã‹Â_ÁH/±«çòüлÎe8;Zæ}j¿Á@ûÔ»T݆|^œ }Ù‘TúlΗºêuÞ‡öõq^åþ€.–æy;Öà>odÉ _ºŠµ±öô0Gp Gg8ÅúÇõì3’#q¡ÔŒ_‰#ñvóëðØ-‚ÿ°ƒ5=þq¿ºÁóË\³e9zË~$ßën¸€¾uj §Íøo0Âíæù–?€¢4fÿêa_¤ÿ]`ÄIì  Ô;?ƒ_´çÞ÷žÃ-WÐûsºéc¯óLuþ³ß7gcö+ÿìýsQñƒO¯ó‚§ö—_«wƒþÂ?ÖÁ.ùC:‡Kç\®¶Æojù.õÂ~}oHÌ=‘øâbíM Ïˆ½È¿¸  «ßˆ¼À: žÌعû@y‡¼¹Ugô¾;ù Ý¹ñ#?¡Oì-‰7Ä„|Ú1ûªÓkø'Ñ%ü̧ˆ#^€Ü[vøT”¹Ä׎–AŽ•XOܧHZèçÁ â 2ËXvƒx›ô/®ÊÃùÒ–æ>E¹ŸLìê—e ›9¹_±»"A?•É/[IßBWé/ao žÝÄ?CÞôû7/ù=sT_Î/õi!zuK‘ûfx[äÖáØAgÐùB!ÏKœØ)•{}Úøñ›òø[¿ÞÅž+akü¯uæƒ×Ä=Ç4ãÿÒ?Ïþöô~Ûðì¶Àƒ“žþ .+Ž7ºý0¥þUí ·Øù0xã@ãëØÝ2gLçR:{º‡ÉCýÕWpོÿ'Š÷£ó)´ÿ Î­Òù_ÚÎIù ù©s<[Õ¡Ï]¿Yê ÝÍ©¡Cé§È7zܰùd#r^ðæj') §^æÿïÖ@×WãA79·sžÏðOà—üìWâþ"‡ŽAg…@G©#â·eè†|k09• CûŒè§ôuú,­¹¿Mm߯½?þí0é?&øVíã'ý±œ&ÈeÍÃZÓàÿৈ<§Ô©XyŸb7×LJ¼IúVhŸ¸@›Qè»Õ¿@wƒCá³ôuóç9“Í;·ã:žÁï÷Â×/â§{NdFØÑ©s®5y©› ÞïϾm¼¸æ½‡7£wò-ñÛšC¿-Dš…/[[Ü×ünžþ qté«bµñâ@ø™W…¦s÷å â‘Oà—^Û‚~y!ê÷j]¤ê‘¿ú²ËŸîîݧÄCܱ¹^ÔÖäÎT'¿%ó•tþ¦Î§Ð9:/̾ü’Ø?v‘ôÈ“œøoÁ{R·m!ë5 ñŒ7‘S{Ð/dÒXøBú+h?óëHÐoܤ¬ÂЇÔ)ŽYãNþŸá‡ñ%±/RMENÎËåÉ¥À7ÈÇ»Ëø}ÅOÿd'þF¡›Øæè+Á\øæÀ&î£èQ®ó &örɆ^ÿí õ„æIð“Ú}ЇýÃß›.çÚü¿áà`Öå÷éÔ;”Ÿ.øYØÑãºëq¿ ß6úÙÅX‡}§±3݆Šæ>ä„s(3ù™ó²_Ò=q€û?xU‹|\ëjدÚ׺zfìµìàƒÓåÇ Áׯ%Î+ø •{šÿ0 ôô—=¢0ñ!™WœzÍ[7ãþÈÿΑ‰ûH¹öYt»[ÄëöµÀ^×ùÚ'mqî¿Wÿ•µeï<Š{ü²ÎïÓ9:'Eû·;vaÖOê±u~ŠöËÕþÎîþÒÛCÓAàOpcŠïtÜþů5ûŒ%ø¶(û¯¸šÓðK_PÇëVî uó —lKÙñË,‹<€“ûûТ$zcI®;¥ü³y{לŽØ>ö >\°Žº¬ àL’Ôj^÷îÓRÜÿ›˜à_¤Ÿ´S¯8ù©¨¹àéc¨}N¬ôI±ŽOÐ:÷ùö*×?Ç”¼`¥¼à‹×Ö#OöóCì˜pŸÃà4ÝëŸyŽè}oÓ“õýó:ë%¸n«ÇÏÈù¼¿Ò§gY%ìÅïGûºöÜ ÁåÏ©Î{û^èãkAøàuVÖ}&ùô@Ý·ð«Ê·¤{Ð{Ÿ²ž•ôì­»qs6óèDçÙº¹² Ï¥”ö5Q:S»ÛÉ[–|ãÅwä3_Æ}ñW_fùöÄ?¥Ï†Ò½âJý9‰å»Ç×¾@’¿µGFà~+~?üá;ê"ÝóòiæãÔ1\ª…ÿt©û·rï€ ]M‘zö¤¯Ø÷^‰k¤o<žŸ y)x+Gü°ØÐ¿Ö}X‹¾DOtBœ±@éX†Ï;À©ÿ¡}Qg잆ýmó{Cúk:“sýb_qþ•¹Èë¼{ý§:ž¦ÆAâë1ŸÓ÷æ«<§Ô±XÍê‹ÿ› úl1|L›ÏÔŦ¨]M|E^äP~è°Æò¾/â6 {)U]®[¬5ô$ùpÅÇ*~OéUë=-áÉËË&©ˆ½úò7îWpT)à‹Ã‹yïp:—ø\à-õDpWõΣg—¯ç¼CŸ ßÞ]Á)Ry x5äñ}íï.ó95ÞâÏ_Ý‘1L½•Îc ìj5ûïÐ0F¿Nðq&èZú­ SQ§;oõõ2çBç¾;Õkÿ“ùÆÚ'Ò=ý€Ï6àG–HÌùÒÍ"ÞßXü¿dû¡‹g“ », ûï³…‰‹Ú»@ŸÚÿUò‹N©‚ìäœ&)ÃÄ!œ ߢoJ,ã:ÒWÜH9ˆãµ~&G%ègñèIú/›Ë7!/[%æ|R_âG‹ŸAÝ®sbt[Œ~…ÎÄ·Ò·''×3V€#N9!GBøjÎ#ò¡Í{aH\܈{™óÔŽÝ‘þçvÏÅÄÓG."?=¦&ëp§ öùÐûè·o–‹>¤¿º/Ïs v\—åØo+-Ö·ü,^’u(M_“ÀÞåÈåw±ïÏ/徟ì![¯y¾§ÃÙ—‚gØ·ÛMó}¶Âççèÿ ×5lŒ_ü²/|8}qÒñE°;dÎ]ÿ@GâO©=îãÊd^¼ÚßöÑòðEâþ«ÿ•û eGï|2_EçƒhÝ—?¿Bqoóßñ»Î[Ûïû/ý¢ÍˆqÐqïÓ7µË%ü‰/³’÷éÑ|¡äo­YÃ䵟 oߟ§ßYëö´ô©uÛdCΉ~7.ÿÉþV’þ/éè”Ù€\k,ëÞ¼üò©0ü%þ‚[ªú¼Ù,ò í9¯3»r4Cgö9c2ìëj©¸/û¤ðebpcÏ/"'¥þKëûs±{&·Å¾Ëùr1NAäìÓìøÍßQ¦¸{êuìÉ›Z%À©ú}#Dκ· ߃ot> ýK]ƒ›ù |½˜~$fÓÐÒ7Æi8„8uÒ£ðñ³<ôë Ü\_l, {Gý{ïDœ?Õ1ökÂü删ÿT XÇÒ7Y¿3ß7Z¾’xâÔûÔ½KÞUçÑ…ø‘ä•dΨ?FâvjÿøóÉ$^ÿW_ö¢M½ëè¼W™·©õ,Zÿå÷)ßœªÎ㑹›n´"ÔßË|TååW¤ôuÔã+È;J|GñëÁOÑ¡ãSàŒ(Y±û+¾ÂŸÊP:9nç{‚ô3};hô}0«ö†.¬fý¿ÚмŽC_Ï?¤}kÍ,y ë)W<¿XqÅbqˆËô\‰‰ý#}±Ü†c9ßÌ6ðµäuµN\ãñŠïPÿ^ûÎYźàoƆÎ|ÜÿbÐ] ðÿæwÍЗêçÆtö‚¯¢ÑȪù ¸?cëqî{‹…>Ø‚?²ÒOÅŠQ} ý®ìt¹¯Žäé}þgüâ•Íózþ·™õOü~‰k™ã³^'sªDS_à¾HD~~Ç ðc:oNæ¥êœs_®J~ÑZ|’|qó¯À~F¼§@$ê`dޤâºþò«ÅœÞÿ¯“–xNÌï cÅýHßR­7V>Ó9‘Ö’YðçºýØ=ÒÏÚŽ2}ñÇbôIä½Ð¿ô)WÿÀM}z2@ü@ú'k<Í}W?nÀoØË#c²_Y CÏ*CÇkGa—äæÕ—Ä•ÊM…^ßv!#õêFªlÄyŽÒ×ÓÝp9,¾æ{9¡zkfË¡éHã?TÈa;yì<ÁvNCþ]vÏÈsÜ Î/Ñ*ê§}Ç:Hi']Á­bçØ?Mä~¾kÉõf‰ŸÙµçmó}ð~ ôø¡r¡AEä²Ô™G ÂÚ÷EëŒú€_ßo§+tþcpÒÛKÑÿåB/~ê|Øý¢}Šzu,ÖõòÎûùkúJ¾Vçßjÿq¿ß›ÎsßÖ™<ãöšô59—:•£_“¯¹º:7ðìãßÂ?‡ÈÿRÞÿe>²#x™ÖYà'©K0Zv Ï/óüx¿ô2Jl'%óx4Ï®y [Ù÷¶Ê\KúõjÇ]}IŸ6Ó†ž,q—õk“_ú>€“±Ž9ÐÙ­ÍÈÅCûᛨØQÖ£’ðÁÍtØ››“/mû+qÏ ñèu%|kÊ¡ÐônôŠ‚<ó½ÔÎ'¿?»ø˜ é¨é3:ÌYêzKb§ôþ¿õæ+è"ó(ôÏ©xè­þEÑsVò•z'ö‰§ÏFÿEèÊóˆ]xX@ø¸#ϧü|7y¦y3±«–§µ«nÄŽœ¸uí?þ&ñ.ûQ7~—¾^~¿÷R+©Km|}‹¨Ä›R$BÞï|LÞ`Lz⥇ð¼ù~bg÷R=`ŒÈs6.Á÷]‹“9ŠjïK¶O,ù'‡¨ó]ü¾³‡~&?³y(™ãg}?åïп¾ÌVe¡sÛ'õ[“¨ÿŠzÜ õC+Ž—¹éÚ?Eû³‡ÈKpµR¿ìLžŠ#óË«£gÖG$Nz·rFújj¶ûÃö·ÚpøáÐqúF<~@½XúKø•…Ú`?mŒœlÏÜ à÷¼¶‹8øÜŸÀwéŽÝùÃQáSìø¼Ä£ìªë³[²Ã5ÆC/·'ñû[‰ÛHþVûºkRç¾î|ÓøÿKÐ ?SâšvÇ]ÐaÅ:Ðy.âöZï`uYKñ³ƒ9Óó?#&öÅÄÁèÅYç±§²]ãû¨§9~eSø¦r¤Ã¡éÚüþy†9ô)ôûÆï ǺÙôÅÐ:¯{¾_ÔˆxT釨ýÓÇÀçe‡­ýnmèJ~âÛÄ Äï2ƒp¾zôÝv%ôþb/Ro{ò4vä½C~E^¾K=1»3úFò¼þü Ï;8^êÅ/Oý'ô¯ýß4¿¯ü¦õ-ÍAüís(zIçAR¬@/ɼo§aS/^j¼ˆ–Ù"/¶Ä¦ŽRú¿Ù'ÚÓNæÁ;·ça?_؈ý~¼v¸ö7ù*9óá&íÀNŽ?›¸ûãaê ý:Æw.òTì#í®x®À˜]ÈýÁ-$ÿu9[é×ÿªú£ÐFäë¸UÄkr/§ßšôòëºe.—ÎÇ3 ÁÓHÝ™ý± ¿×ù‰wÉÏ™ ãZ¯¸*ý*R¬ãüm2CGR·f4ÙŒ=s¼ô+y&ëhLøêüof€ós©{yLríÇn¾XJž¢a5øwÔ=ø¥YKü÷Öé˜G }JŒ‡Má7écëŽÞBÁXM|<Þ~èÜê NHÀ¾5YEë޼éÌè5±4÷ CÉ¿:™C÷ïÒ"gJAèÈ~$õÕ«ð¿”Ñ7µª"ßm€N¦€K6‹Ç`?§DÁø6-r³ãôÐý/«skâ'H=VpÚôIŽZèÚ›ˆsÌNˆœÜ¸\pC°Û–æÅŸ‚8ЮØEõ××WVúªÅ^Þ­Äšû< ?ØÅB?ÒW7Øg7ôšj$ë²¼ˆ• q™ûaL+C¶„'8Ïmô™Õ®þèïYð«G­‚/.Ž¥Î>kWìê 눿êü„rãÑ9¾¤^2×!pÎ%2í s\ŸÐ¯ÀC¸‰’PGtv'r´ðmúßJ_qSàÆ´à‡žy +#ñ >›É{MÛ^Ðü¯úŽ"þ£ùw:ÌxðHé} ø"õW¯S§ s{uÞ‘ÎmÖù0öˆbü¯WbòGbÁ×EßÂs2J-æ¾µŸÊž¤Ô¤XGWâ¤V èÏœp zœVzjU‡}ªz:ÿØÍ“Ï!ò ;ÿRè^êA¬­á‘«· è$¶à5ô /T¼ßo*Ícâ€_&üøWìÙìkÙßë—°Çž›Øc¨Ï2ë/†ÎšÜà<“žQ÷a—÷R¼vƒÄ7ÜKg¸ÎîRä…'ç¡/`þï$¯ÛSå'òýIrÎÿE7â5ZŸ‹þ>Á½ÏЧ#Î@炳µŠàk_9÷Ïø<‡ø~_ ýÁÏÉœõûSÈHÇ-úîZ¿óü‚Gr:|Áúê|™C¬}ÁNéÁŸÏlγX;øBæCÚGúa߯¹v\õ&ðI¬<øÍ×Ûqþ’­Çýúw:MDž{ Tò î‡#ä¡/oEº‡_"ù 'ËTžGêãuNR`ÈEâFyÂã'¿‡¿Üæ lj¿onü Ü•ôÓT9`ràG™æ”J@üMêî‚Û“Ï™œYõ°äµ^"o7Æ—þ±—ÂÈu­×y¤.±[âSWˆG=ŽûºúúJ|âïÛnA?¯ˆ—³c §Åïpb~‡œí[zwù.óÌU¡ÿò¯Òw6ð´2ÿoØ”øjò²Ô $Z53ô>˜ù6r?ݳ`/މ¾+K>]ç£Qr°.[ˆ©ÿíãàê2ÍšEæW†Ç^‘¼†9°ò¢özèzqpF[ò‡Z¯óÉJc½.¦„Îe/;ü¾ 8ÂEÈýš•z’M›©oY=:Y·\ÌUüƒÎItëUÀ~¨;eL&~—ú*¯âŸü£ù×vìeÌë:Q¼§Ì[×9¢ÚÏ-8¢ ô)~¹Î«ñçzI¾Bç|É&/–8©1tø9™Ó§}q}<ºô¹ÐùÎÈDÞ}™íŠª“›º‚øôaÕº"w3u07Íðko &Ž_ê—ƒ¡¿ñð+¥.Üíÿ5ñν)áéoL÷û´BBäÚæ™ñàÜp±/O8Ä7í³¹dÎuUò¿yœA-Þ^C¾k=»àaE¡?©ÿ1æ&~š|°v$qܦu‘ëÕès¨sþ¬Œ‰%¿»?ö#sþœ¼ÒgYp‡Ú‡Ä¨þý ¾ÎìÙy>ã5ë)s»Íxˆ3^?+}ž·sÜŸ+8.nmpÑ‚›5»¥/îÆ¾{ÂMÏl½©?Ø^9þ}~ò½2‡Øýå tó~t5¾d;Yûèû}”EkþÖªoè?¡çM»^âœÁt¯ðg3ïæºwÏ-ºÅ/q‹ã×JŸ"ûۧЭä ÌSËy™ï¢ó2­Ë9¸ïC±“ æCïH=¡yn>ñ¯à#콕µù_å¨ðI§LøÒ'ÛHxŽzó i‘gç&#Ï;N—Sõz]ú‡*>Ò˜{jè6Þeþ1= }½¤.ËùÉ&‡¼“ö]3Ϥ&>5(/vøã »7o¡×Aé¤~™~ Z«ù`+c2쉳¸?“×ü¿ö'òýxéç`Õü~“<¡Uý þJÅqÄUØgËî᯦؉þŠ2\Òƒ§ø³ÇÁ…†Èâ¿‚S¤—¼†à¯­fèÁºâzGC÷wéƒä¶ÚH<ÿØp‚£Ñþ´Šç \oA½Ý÷™¡£ð©;“yé:ï"n&ü¡s¿t~ŠÎm}ˆ~ÿ±‹#÷%ލýÑ÷Ê÷ý'ôoí?Ÿ[¹9òyŽK¼SæH9e6€÷™ž½°ï-Ÿß s u޷ί׺{æeìŸÂ5xΕïWÈ>’–þ*ÆØéÄd޲ùK[Γ« ~ù«ª/ó@œNÓ±¿ßanåÝäÓÅ~7®öBNoCßðÖï½÷àë?铟ýwâã Çî'OÜó ò>{/öýð$âK‚cvöð½qâK÷–@¿Ò_ÎÇçK5§nGèXòŠ/rÆ—?IŠ~”8R`ëâ;27\û›*ÎUã\öÒô“~Àz~+÷4â¿}‚Ï€þãAˆ_íÞ-êÕÙ]׃ÃÎ{{,M/âIj"·'÷øAçýj]¾Q-9ï¢?dž`®ÆZ°y˜¸õè/âàLìWš†Þ²Óö ŸïWú94¿).ÇmQ= x@·ØkR×lVŒþé}x²ô×úSí î,ë­¯ÎQ yNäëÒhØÏKOi·»^pcÁ>qô&¨ß“~.!úØ£C¿Ów&øébÏZ‚Þ>ûSØ>´e3 ×t´ÌϵGF[zßíròÿ‘K¡géO ó³œY«à—¤{°D+žÆ¨w„wÑÿÿôåFYÞmuÖaUIäAb—ünŸÚÈa™§ó&Ý=}áó%°ëŸüˆ8‘³¯ü\îÅ¡ ^‰ ßH^Míí·åT<œÑz©³´/¤á¾¤ß£öUQ|ªu¦"z£ËY;4Ÿ·ýbËs‘oº}ú¹6qÁQúó‘Ê6¡¾eq8pDcþÀï¬Ô‚øÒ^Ž3O­ÂŸhù? ÁPø¥õìªIàáÁ­±Ã õàÿ?ÖD®Ï­ý(x¹Ç·ç£úb‡d®Œ}±ñ&öߌìÔEY[Ã#Ÿœ]Óä¹xn™×àþò t#sÅ}?³zÖkØXäB×Jȧ؅ð/‹F`_uîÉì/°cš_ ±D&êûd®=óöGõwàf€/·ÎW,óЬËØŸ-¹8ÄØKu?ñ#µÌw\³"ôýXÇGBG+s‰¢—d~¼Õ>Ѳÿ„þCô5x7™gïô.c˺`ßk}°Ì¥´ÿ¼ÆzŠëd˜g‡YçvÅðÄTüêI/oé‡Ý~üâ®ÒÑ™´9r¤ vÌó‚<ÿ©xÔ· 4Àß“_þ,V¬#ȳ ‰ ûýá;ÉS(Ÿ…ð‘w]·PRæµjþ=òW?¿?ÕXu–ú¨±Y°C’<œ´Í¼±;eÅžÚÌ<¢V©‰×È<ø`«úÄAÓô's%uÅ ‹²ï2çXçýhÿm÷³ãÝg0ûZžGæŸÛú`·LHýpn2û¢}EÞ›Ë7±Þ‚Gü”9%ú6°;7v¶ôG1-od©Æ³uî°³>"ö®»Œõ’¹ˆÚ—Ów–ó RsëÇ….$^£úÚ¹=qê}âÒ‡ Ğ×¹`î¡üÄ[d>—;} çýf-ü õ)ÿôeßú™øg¾=œ/Y ò Rÿâô\C<ëØVìÉ_¹—ÎpßRìLÛžGëö§•€î†˜Ä“æ7ÁŽë³™ÏåâG}ˆ½#ýDüõy’úOš1L|Aõ¬æÏ¬Bë/‰V±ï߇/2 f}Ýü_æ(«=itlàÑ¿ýp9ü´<-q÷6Qñ{¤žÈ,r˜¾.’7^ØàϤóµ~0„î©ÿª»\ú~iÝtà쬫ÄC4ÿî)¸V®'ý’Ƈé{ìÇ ;6AÿJ½ˆ%Ç‰Ö ÿ`OKÿ´ÿuQh:5SÕÀŽ”þšjw;E²"wrC>ÈHj7™•rAßÇv“¹šu‘¾´æãØ«âwÙ‡²ËªâÏäÏκëC?¢ß´ˆ;ì z8_䝯UE›{âó?éG̼•øXÉÚÜÿ¢žŸáT‚ž)³y)ýšTùý}uÀ¾ýûWóå¦BWÝRsÿb‡*k]Eðl*èKü~Õ‹š·W°âU%ÖðÞf,vRöå¬Óý¸/‰ç9 sžqM±¯³,`?þìŠ^•y+îøÅÐY‚×ð“àat.ÆËÍné±—; AiKú+¸õJ#'5þ'õ㊛ôû*µN¿|³|ihºRœ™µ¶ò’ÐôðO_î¨{ž]<8ujÖú9»Eê»´?Vp×Aä˜Ì ÖõÐ~R:'ÛÇqg® ½¼ÈúþžzYë¬Ù k™{ }…´®AçÀj\-àsâJ ŸílÀñŸâRŸ³ë"öøg¾&úÃv#ozõæ¹F×Zš?¬ÑU—…¹ÑãF›™ìo䪋C?¿â½­CÇ‘Òg0#Ï/}—ýù˜³csþê/¡G‰¯aÿeþ â§4n¬ý†Í_¡Ç¶õ¤žBâ êÿ¨=£öªÆŸý>ÆQßÃ¥/ÃW‚CÖ~²Ú—ÐR–}¼°û~i/ôˆÎ=½ëH?‰@ÇJà\b¾Eo¼½ÄsJ\]ëvÍs39ŸÎYÙ÷½%sìýúA±C¦òØŠv–ë ⟾¬‘¯m;c÷< ¿_Û…_$}mÝaϸÿ¨‘µoÿäÐÏ£ñµÀˆÃ¬·èE­ãQý¥q õ×´ÀÎä<"ŸÔ²Ç¾G>hþKú°h6Í7‹ž¡W—­óÂípáÑ*ÅP¼’¹¦vȱ/À·ÿQ|szN9£sFÔ¾Í|duhºr5‚î«ÜE¿È|Tõ¯ìÆå—‡^×~–y˜‡_…Ás)ý«¿(ðyS±¢èã½ÈAésªòÐ.÷§'Ït•Ƨ}~”~Ǿþ‘>XÁ Éø,øãçûÈ¥• á{íw­ý6…?4弈Ã}hßZés¬sžOïüxˆumž;Pæ]k¿pgvOž;¯Ëû¾ÈK 8¯à=Cøƒuüó‚ýŸÐàÓÏîU¼šµ')|°¥(~¾ö§þ*§CìUü‚ÊÃø©ªoíÙñc^Ø‹BÓ‘Ö«>Ð|šû %~€Ì4ÒôÂNpg×½£þjpÁ:ökaR>Š=쿊 sjÔ |šÍzö?Ý}%û¶ù5q_ñÕ~UûÊ^9#ò?}=rHð\>þUûºf_ŽÝÿ¸âòÐòÁ‹5ú`‡¡ ¡k¿Ÿ¨ÄwŒißò|›Ö.MWO ®Ê ?H<Ùþi ò§ÜxäµôùtŽøÍ2/ËÝ1õ=ôàâýÚÏLú×kÇš\;3gôÒÔkð“Ø;:ŸÔ™¶£ôÍQ<£S³/÷Q$7òlâC~Ÿñ~ÙùŒ|ÀÊÖÄÑEΪýÜ=ýÍB®#ý"œIGÃý­º¯ÿù2/ÕòêfÔ>Ö¾þ| Á£ùó`žƒ_ÅîðûcI_j]ÇàÜÈ3É›¿ÌÄóËo¿Ÿ‹ØÏJOvœ®ü_äªÚU~¿Î9 ß]Çø,u6ê7«üÔ~b!ö4~nš«Ð¡øùŠ›Òºd£t'èHüõ÷«¹ÿöÉñײdC®J^ÜZbó\Å«b7Ü«L¼Râà¯×ü«úC(iá{ëœÄßz³~u»°ß?Íž‘ùŠ7wÞ¼Ç~ÐþîÒ¯Ø×¿]æù¨ý¨Ç¯ÄįùaŒÀ}‰?kdÉÀùnˆþ™:í9.qµûÕÞ²kvç8™w¢~‡‘'6ûÐ÷KöIp;~~RâÖœGØS‚ÓþWîÃÏØQ"÷ƒá>ò.8}§üä•ô›ú§¯}œú:ÏUým–o~ÿ6n2yñ ­ËùxNɃk¼CëÛ9¡CÑ[|d{ß„¾“fÇ~™ý y­CÖ>ÓfÚªðéϯ¸N–ñ؇"uµ…æÑK²O¹±…’²Ÿû -ÍGz¼êu»amì+ÍýŒÞ’:³B ®_ã˜øKq‘·’§tßD†Ž'Bn½ˆL^_q"2—@ã¹váF¼¯ŽH|Fóü×r²¶„þeîl0Úo¬Ã²ÒÔÿ9HüæËÑèa‰3¨]£}¼uŽ=ñ¹Äéé÷çÏû|–]¼r6öTìʽ¿³ß‚ã÷û± ^Yq`)V‡~N¿žQúk~Â~Ô y"óWŒ–݈÷D¯Äónþ€².÷1!q!µ#~=é?¡ÿÀ´ýWû†é?ä×Õk,¹_Íci=˜öÍ nÊ>ÖíÂzËï`¶kÈÓðÉŸ‰¨v½ñz/ë£q:©“Tû80µ+ç•y{¾!¸@cýx®¯òùì!츲v½Ì¡ –©UâLj7«ÿå–~ˆßq×™y-òÊJ #BAö½TÞ;¼DŽÉüogŒôú•¼ˆ_ÿ!~±öSu§OB_Ê< ¨t¤yQ­12äǸ¥Æt~‰¹Û ƒcpNÅ@Ÿ—oO\WâÎÚÿCç{úóCÔï—¹Ô¾?°¡+ÇIüHçeiœMñì:*¸p÷'ó)gXv•ë6}=?hüÿ]o"ù µ÷œ9eµo òyOÌT÷¨¯{a¤w‰¯rXšÿtދƳÔÞÖ¼•Ý«+tk¾‚Ž%>¨þªó ¾àŠú@WOÓøÑïë sžTßëœ ãVCìQÍÓËù¬5ý–‡¦S»E ô‘àM|;KòlºþŠðñ1iK#Gß%@®‹¤~Šê=µŸ|܇ÔEûø'Á«XæA¿¢/Ü¢ÑÂб¹ø0òVúmzâ~« ÀÏ‘øÖlBŠÝá<¨¦>BóŽ~^õ÷¼ì_¯ˆÌ•°{AìfcÙ Ö5å ì#Áëj>?Ðb×Oxˆó‹¿¬úTçªþnJ¾¯Ÿýž±ô*òÐXuIûSÐòWðÛ~¥¯Ä¨.ÔtÊ·*4=˜ã:òYú¡k¼È÷‡$/mŸŠ4á?¡ÿy<Ì»¿‡ W†æ»Àð«BÓ™ö!µÌ‰è¹ð؇ùŸY÷‰ _µÃ{ΆŽ$¾ëã<…¾œ™Ç)v’8›y­søŠ<s"µ._õµÖ )Dçvë<Å·øó5oÞd¿£äC?¨Ý&uÎÁس¹®Äù}¼ªÈ)ãÏÞ<ŸØ1ê¹ç¿’º='æ÷1–ùÎâô¼K¼ÃŒ‘žºhñ³Ôo²Ú•â:š×“¹ÊЧW¼‡æq‘q°‹¥>ÊhÛÜ•øùš÷ ìjÝêÜ,ɧi\Öïc“üWø3F?ì¯óÅXÁ¯™_&Cþº³ynÉïk›â5ü8`ó¼aÖ/ð]aô”èG•ûÁú›·R'üj8÷'y'wiîKòàÆûÁ<ÿÐt£ÿúWÜ´æiŒÛ™ákñw5îàÆû’ç”øö=4›låy$nì.ùÄúÈ|õÛ”^µ‘ú±Š#ñûÌ ?¨}íã¦bý‹Îâ~6.Äy3š÷4] £~mÒ:ŸÊY/'ù•cN²ÏÈ7‰×h|ÕÉ1lihþò×CæjœVís|~ñ+ñŸ6“¹nýeì—äÉC†¹ÿ¸×XW‘Cj«¯Ïãã¡R¤‚užæ¦ØÐ}Á_ñÃ3וüÖ󺉾 o'1¸ñç}<—ðqpÛEòâû}™Un,}hßÓdsÐ{å#{Çþ*•€}«þ˜u•ø§Ÿ·Ú>Ó¾Ÿƒ@ßë§rÜÑïà‡×©×‡^Ÿ/¿›üOè?8&“7À¬–‘¸CÒ¼ðôƒSº7—o'"q}?þ“oô"}쌆OØÉ·øñbÁ%j?çâKžûr&ð‘"ïw$çø§Xé«nÒ±.¢'¯¢—±k%~ªqõ»|Ö—iÃØý>NOô“ÓuöR;›x¤àT·àÛƒBwšµ¾è«Åùó&ç_[½#ñ'Í[‡ÈkühÅ•´|Ê>¨ž¨õÛ¢Ðôe ¯~ál*Þo¾".P- þšÄõ};BèIã’~ÿ%ÁÍ+}j¾ÐƒÈ>Ø“vÇ‚;Ó~ Îò´R‡›y'sxÕ>ÕþæNš{¬—ÖG i|Èiû‹ÄmɃîÇ&¿ }¥Tÿ+žÂ*jÿ}s¢/2¦îøŸÐ¿µbb}"çPþõë%îëÇE$þ«øwp$žSêÈ̘o‰ .ɯ+к‰ÿh\ßšs—ç×>C‹÷!'e™Óö ~¾È;¿?{ëTðŸäìÝsÑ÷Rì~8žJ^•çÖÛŽœGðêÏ[k³Þ"—‚#rs?2Ç^TƒûܤÎSÕûÕ¼ æË5þ¨z[ãŠ÷Ðþ­fÒ£aplª—4žl–îÇy?˜[9þ$|™¾!üþ]>‡¢s©ü|ó¢7¬ƒÆgµ_w™Êð…Ô¯j?>µ÷U/)î^çd6m&¿.q7õ”œnƒÑƒyr¾½Ã±·^Þƒ~îmàxÁ÷øùVõ“ yŠ`)à²Tïh\Gþ—^:ÉÏWý~ÿÞ¯S~–ú.?.#xÜÿѺv·w5±ÿ{°ž:w÷ûì_Œ¸ØÇâ߃ö, M'ÁÜó¹ñótÞ¤ÚOf„bØ=š§?÷¿ cUøBêå4k”o ßJ~(Øå7/oj~Sù·*?ò]ðÁÎé_ׇæS£Þ)Îç÷ë¼È-–£w$n¥yDíslç^EžXì~ûuè6åpÎó(F˜¸²âÇoòJŸÕ%ð™Ì‹óûáK|ÚÇëȻ̯ϓ|™òµæ·µ¼ÎÓ´>X+…ŽÐc¯õóð‡w†>w'yF?¾¦zQâ¯T=îF펽<âìÍÛF˜‹¾=ö÷3=3q8Ñ/Á?JJ^}­8D3(ú¸pá;­÷õíRÅY%ZH¿8©kW¹£u n†•aâºÞª§­ÉyàÏ'‘w¢¯þ[/ߎœ—ÎÖø®Öåªh¦­ÀóµùÈó‹èÆ"/¤îZå´?7)\xê^$Oªø*§Î+vŒÎA$yÄgÁ!úñf©ÿÒúoªœôçÒ FùÓn’='¸3{ë`ZöãynîCú¬*îHñ šGR»AûÒë¯ê §¡xP©cP?L¿W‡o~| }*q3ÅG«ý y&7cžOûsÈœXwüJίu»R£ùË=ÿHý‚µ¥ô¢ø¤ÅÉwŠŸ¬ýÃõ~­¼ÈïJ|ÁŸKÝ·æôù/¡ý¦Ì_šOþoÒ¿ß”>›Cׄ–+º/š'´ܹ>4Ÿèï~ü܈€<û^ç}+î@ýc­¿Ô¾š÷µVŒ†?¤î_ñß‘³ Ï7sáÍ ¾S÷Ï™$~³8=öˆÔK«}¢¸'õ)jG[U~ÁÎêT˜}”¹7šVü^ðð<ä‘Ôh^ZçCêü*ëÉNøDúºúx‘wé©ç½ ýg4âϾR\³õt,vJœÞÈAñ3}üŽä›ì¶Çˆ«)Ρp%pÆ…VˆŽØÏ»‰E¾\ó‚ËtÆ-úÔz¶.ô¾“ªyñRõ{þG¹~Фðmø_ÕaäX¿p¬£ô=Ó¹ïæ†–зԽêg¿.Uò¾þüM™¢zAqÔ¾ü—ºAßþÛ =wý<Ï[."qD­înyufé~à“Ô'_ña¿‡/2’îñè4X*œ—wµÞvôðnÜÚ¼ëWé\þýþ·_vº€ ´˜ãñcˆ]ýƒ÷Üu¦xÏkmè:Öû½KG/î"Ͻusöµ£ž&ÛMê ^¬¦_FÜàß­÷~·âƒ~g¥ñW?ß›¾#õ¯Û®`?‹_¨qSÍkZñv ÿg«yí? ù3Í×3=Dïœ_ ý‹?âTݳ.4ýj¸âg4¢~´Ú>~Aä´ªù.} ¥æA_µ*qþέ‘óê_Hý¾µ)ü-ö—Î]s×ÜñÖYñ¬Î6Ä;#Fóä§õ1·þvùÓ&8%ú(‘½ÏIÓxóÞœÇ[ýß@ŸÿÏ¿î•ZÞ˜?¿ÿ^øµ©÷~ò€%r¶·ÿ2ï/Ä®ñú$Í/tðèeÚZ¿Cø<ø!~O[º³w¼ôUr –mïÑOÛ+m½÷¡éÚ†¹î@£r‰Ð÷õïëß׿¯_ÿ¾þ}ýûú÷õïëß׿¯_ÿ¾þ}ýûú÷õï뽬k©ã·g+Íûájý¼ÿçý­‡÷{ŸÄâ7ìéýc¿wœ9£„÷3úwÄo!ÿ¯èýï§­U¼û:š³È¿q ÿó_!ô”ÖÛ¯Ùcšxû9þWà¬é:ÈÛÿ#G¼¸¿gào?ïÍÙsóÀåÄL&ý£þkON~U@ú Üá|%è—jÏ#}Z"zñ~»M1ò€O§s?Pï|àጋÌr7Þ¤¯_¢•䫎'ö>›E~%×÷òUv•EÿO笎?zônDºC~üázò³‘Oj+}ë®^zÿô³› ܉™{¸€ÕÉcÅÿ;”]!û]åÜEÞçÔCð‡ëA'MÊ. M?VÙ|ÐCcðüFòMà*òÏOU¡ÖŠÐÿs7¦œšþí½ý ÿòy,}@œhyŽCÉ¿Õ\DÞøévò©³’¯ ÐW7x6±àŽ/ }?VÍÕœoâü>LúFfA_¤¸‚ׯ ýÒöUƒßWm…O/%–þ(Ò¿v[øj‹ô5ÿ­)ø†ˆà‘­ú«¥ÏUøgÙ ðüy*±3^Çë÷€|âg›|úç}Òdž¹,ÖêKœ/;òžzyö†Ï'9éXv™û¼7.Ì:Šw=pyÎÊù¼|hàU;ú ÿ^ÁãC³Æ=o5¬Jûÿ“ùËú½¤—÷1¶;aé¦j1èxvžwû<ð1•¨û ^¥Ïš»ôW'>ùÞm9ùÿ&Gú9½à=‡ÌYÊGþÓ8vœÁD©·9ñPê1˜olKÈz—Çk ?}&¢?¥“Ü€ò£™-+÷Ó œœU†ú2£öIøsêZð;¢Ü‚™·‘%-yÖÉk¹Ïi =œŠ9îT‘›ä_ÇÝŸ„¾ÇÖEÀÓ¢¯½µê4}Û‹Þãº?:àÆcÆרŽ9 ΋Û\gÞÖwÌ èuZðêÀ A¯«3@‡/×Ó§÷î'pL½©Sw·‚ŸK â¼ ?ð|ïß´¸<øž•àTÙ_ ÞcМe¡ŸÇ:!õIiìw¸¶#x—i)¹ß¡Ò7¼ÞE®{Ÿþ~Á)ÈßW[ îèxNòß5ŸÁÏ'C›sÒßçx!îwT pÙô“U…ü}ÎYÎ"ÄÎðÿcôöÎ{Aú‘Çbž€»·x“%[ÙÇ-¤õ.ÆìÓÈ­Çë‘oèw§öŽÝóGèkô5éžuîN=þkfìÈÓÚ«‡^s=ý©? wE.g OIÓ‹¬›èãd=Ž,}Ê Î¢΃«œ¿ëp3åvQ§¼ñ&zfFJè»å(p™b·¨r£>‚ô—0r§ŒéƒžžÔÉØ¾ÿ½ן—9½¼<Ïõz;û_fzçUdèº(s?Bø}áø¥»Ú¯++ò»j-ìË>UÀ¥>ŠŒÝyžnÁ¢0ü8{-÷™ì<÷w•¾^ÖUú6š#éƒdFÚÞØ@àœ\¿{g¾ÿ ­Õ@ë‹èó|~ÜÛÊòèŸcôI\k*}8J¢ï2Ÿç½ÄoàuÄàøLÉÀ•ú÷1àÝó‚_l“œêTð`FªÔ‘U¸[_¶Ò£þ#¾ØÓÕÓ_Î’1aøSåŽÓhÔRáKôb܆<ß'›umÛ={ˆ99ÖꆜÇã¤Îðû—ròbIì§Y)á£æÙµ?„OŒðß >š~VÆÏô©R9fG?m6ý:¹"}pÅ|?hMhzqn‚g%¤N 4ød÷bSø(ÓoœWím¡ë }\Œ1uØßîÔM6A?KMÿøg™°ãýˆœOŸÒ`“bôO¿¾žß¯že=Dßf4–~7íÔÿŠ»vóODþ¾œÎÿœFNo’~ô;rJŸ–BË û>unYê ‘s÷‡À«ª}œ]úbïaÞÈYð§!v vëgæ²¹«¨?³:è½ ‰Ù§quàÛ˜=Щ“3Š—¡¯á7‹ ÷ÂÊ›XÙ—b½ø½ý(pw^q¿6xX£l-Ž‹Mžà[Á».ºŒtà?š{ª/ûf!üÙé2׬‘à ÑWIípsÃe®5ëûÃÿ"íÜãtª·?¾cJ“!’˜“Šä¸4Ñ({Nr‹æ¸„H6#ghJ®MÒÏžM¨Iòk[c¨1† GjÒfƒ&—2ù9âlr9.MriHê7¯ý^ëy=Ï¿øÇëyžý<³÷÷».ŸµÖg­¯œÛ;çD€ì(Î#VæúW°ó㺰îYñÄ‚g͘!Èoÿ‡‘§æ½À'{¦'>ZH?©àoÓüý"øônbÖ'áëçþ#†û*‡_ì$J¿í’|öi}Ovl)ý«Ýé“1Š£à{oÏ>ÞÑù¿çO®‚üÖìO¤r¿˜ã{i3z³Ûƒß7.‰ßÝ síÞš¶4\­Ò_üþlôyÄÃØc‰/Ì¥ÜçÏ d¾ä,îGð¢ÆíöeéÏŸU~€rÎíÑ|‚ñb<Ï!9áúb¯í¾šV…ù3ÓJG±KþO3È®Òç´?Ìð »&Š÷« Aþn`*ŸuüërsgÖå|žwPCìú U§9%<ïÅÖôñÞ ù¼ë‚o­¸Ê®ÒFú˜?ãlmÅ:,í”u-òïôiß»i&y—éñÌ#Šý{Òç>æ¯F±nG²¯‚Ï—C¶¬y÷]‚GíÞѽ*[޼we¾›ñó ý†Ìϳ[ ¯_ôÁkýe /óþ¯ÌÙöWõfßo?3ŸÇ]Öó}2þèÊ~Î…Ú“Ž[° ;ÿÎYüÌEúœ4Þñ9Ž=ÌH‚º Ÿ÷»EÃS<`>¹ƒ}hH¿’wa"þ¢b"Ïaõ§¼ìs½à_Tï¬ôáúí p×Ûx.ñÃþ_ôã9~,úóÀAì`~#ädmoâñ—þ©Tx¸g®à†Óßhý™ NyÕÇn î2·¶çû’' åÇöÔ ŸqZvFü¬Q!}0ÕŽ‚sok°,\žÝ˜6è_Ç^2ÿ’¸Ù¸qvLp¬_¥þ÷ûSìú<ÖûTæ^tÍ"^L¿±½s9ë6¢!ë$y9¯d ¿?eì5É¿5¡eóo.Ï —3÷‹)ì‡øCëèw¬k«2ìÕáDžGýØ9¼¾þõ{Î7¿•ùiâ/⤟r2øø®2pŽÄ×Ö&ïSØÑoNçJáli%s ðHñ6üŒâ݆·7ÍÌAk0¯Ü94|ܦ ç/®·ºs_G˜Ok½‚~œØ‚ˆøÔ½þsò´š•8Wó,þ ö¿IgôãEæ´WdŽCõ\ð¡à¾ΙQÂ}Ô>J^sÕ|äSð–[c ~é×ý¬Ó«‘Ç WˆGÛ´Èÿ»æ{rNÜù#¬ç¸îëlˆ¼ªßç̲p=Ò¸Þ]ÏÜsx:þl^õÅbÿu—é‹êPȺ‰6ÿ/‘õz0 üô+s~½ŸRÁ=’ðæ¶DÅŽx­2‘{(~Gíì–A~ÐZÆ|TïÁb—O'3Ǿ™‘}Mòÿ[æGz9iUÀþ6?Ès,ÉäÑl]áß~íò"ô°ýîÛOfß«Wÿ¾Û‰ço\›~ ñ–‡g‡ë“ݶ |t6•xøÝy²nÌÙz$šïÛÏõ0wÃÙË9bªÿÖÎmuv¾ôÑ¥K®EþýIUù÷Ì`}G­Ã^'eGÄIj/ýiœb=ÄœWçiúÚ‚Ë<ϪÙäA÷ŸB?Ûð~û˜óuHΉܬñ“÷‡Ì»½9‰IàºÚ¥ÈÓ±Èÿˆp‹øC­#¸G™ç|^{±~8_òþš¯Ò¼‘â,Å-Îrηò¬hä!3ùœG?­Æõê‹÷ ç’§·(äïÿYkI¸^XÏrÎM(Ï.ùXã½a9áújn:Ìú¯Z¿LÖPo*øZò"š±ÿdN…Æ ÖÄ‘q»ú…t?ðwîºùø§™/ãÝ‹þ¿•C^ëOéwŒÉsœ±8üsÿ]æï„ò­ßÌÀ4¦ïÎÝÁ<*Å·î­³°Ë/ùüþ¢aÈKn'îÿ—ïÈÃuŽfÝǹ÷Ó/\é§©GH\bL¸4|ÝŒ"é[ËÉ¿¦>øÊø<ðXr(õ7•¾?#kûþò^êK¯¬Ë—ëћϣøûi2op7ç0šõËÁ=b_‰£5£ùJwi#™“ºoY¸¼ÿ`n¨Ö«Ì+›±'¯`ï>n†Ý–8Ý9´üXútµ^äL]Èþ5až€Ê‘;¨Ýâp=4.öE¿Ê¾ãû·Ðwå´‰Fž”#G)U°ƒÏåQçš”²*\ÿ­…ô™iþ×ÞZÙ„¹¿fZúÔˆs’¼bæ5ë?|±(Boœ³ÐW­O•¹´›ÇSO—|œû.óÙüéÏôêr®ˆ‘;šýÓ:¤ä¿ŒØ²¥ázévMçïþ‹9ËnÁ|ôô‹Ãø‰ÉÄw‰Åù&󵮜Ӛ?œ&y5;1›u¼ÿvü¾Ä^|pÌܳ¬ã(9'Eâ kxܧárí%1?ÚÜØ›ç¨—îúÖ#ŸrnuþµÈ¿â6w“Ì Žû…9$'R¥ß<Ž¿ì2ë ù`ßÌAC¹ÏÞéÈó(ΩsN'æ…_ï>Ãóï›~hýÔ~üëû9Ôâè“W?«u•wõߪgþz柸vCöÌXp̱däk<ó7ÍW|>?7—ûj‰=Áïþ»¯?–¹ûRŸÐxÔ>(瑉߱NßÃ÷^žL§Q.û/~Fñ®Ê­Ö*íö‡áÏï§U?—3OÃû4ürkn„Ÿ´¶·ç~îÊ¥/4±¼TB!ÏÕÆ`&TáõQæ®Z>sLŒGú#·µ@~Ì*?Dâ9+¯û*ù9÷p{̟ոÆdîßr ÷)ñlµ-ÿ‰ÿ2Öô n²&¤g‹ß Å‚4o«vHåOóÁÆÒiä·´¾v•ÿgjÞKóñæšÑä…žäü1·'ó¤”wà×,g]µÞ]„º3s#yÌÕÌ­wê- —C/þw­«+NR¼hm[Ž]z”Õy§~bû´nþq s¼)q¬[wæiŸ0M÷UëLF›1ì¿øsm+äÀ‰ÇŸµý‘z¸³a=þ}e>õAá98 r¹ÆC¨¾µ:Žâ‰o4~76áh~ÀiYÀº5,û(ü>Tþôµ½oû!xÄq™¿o´=ÁŸP{êõhz<º£=ë,õ/ÿ0÷7t/z,þÃYË7­VÆ¥ÔÅ¿›vü¤ÔAµÞîXÎ~H]ý‡7™ót½í/aGf·D”¿!ñúUÕk»¼>ñÁÑåø÷æ ˜7÷óëØé+—_‹ü[÷d_«EðxŒ:̯ub`·ÄkœÊÇJÛ¸m*þ?[æþ`þ³ñÎdêPO¤á&Tçw<æó…òo%ôËû/øÉso'27и¿ëöv]Öñ"ç’˜;sMšðù欧ð4Bx]ì¼ñL:ò*|!åg8í¢‘¿Z¥Ü÷ßûów»rþƒ{øÊGáöÁ¸›ó ÝųÑË!)¬›Ø9­ÿjÍ?Í9çF«ƒÜÄMN‹~_ò¼ö˜uœ_'ùE»fÞü©~Â}~Ï©ub+y?vY¸ž¨|iýCqž›‹ê›îwûf£GkÝÁûvvWü±ya?v°êâ ©×:­™sç¾Þ2²Îøxr½µ·œc¼—Œúo£s•¦ùSå+)ÞvFí@ÞÄþZu™OâIHZý€ySv ƒý1=\¯þJó}Æ‘èÅД¥z(ù6Î0ìx¿˜ˆ|»õ{k™SÔû™y‚¹×ÿ“„<®œ^}˜ëÖ2Lq´ò_C¼Õs}ÉóÏXH^FêÇFJ ~º^vùµêìƒðvÕj=ÂΈ]6ðûâ75ŸéÍYÈu{˜—ª¯I~/„›„¡õUoêäÈ|°ä¡½çóøÿ³¨¯Eþ•¿bÎbαòBœ]õØ¿œ+êÄ%Æ›'x-ù Å‹nÝ6ðžÇbo:¶Ã΋]6ÖÎ&NÑøýé.¬»ðEÍlæfiýJq“Ý´ù|¹=…ù=VÒqðÒo7ä„Ë«æÇ­OÎòºZóV„glÖ‚=œîÔ*"O$~Å•Á¾‰_µ¦Çc¾ô"ì‚Æ=ÎÂF¼VÞP‘Ä#â›·ÏbÎôàynhƒÜ”Ö@”w)u0å©}кœwó¸5^ÓøËœMÞ¶{!ößu ¸õ4ô@øƽðÌ$.Òz˜5Ã'.þº5+»á2X÷ÍÊê„ÿœjÜñ$s {ç¹hœäÏœŒœä^Ǽ͹BÊ0oš„¿ØÞ*¢N¯ü$ãä ðNmæAÚ—6°ÞU™ûi?¿ny¸¾y?œï|UzðLâ+;%.Tÿ¥u'ÿ©tüZ­%Øy©)ïUñŸ»o9vHø|ÊÓÒ<½Ög”Wíý2?(uvͳ)ÍH/A?çû£/RWU{­ö4Ä?”¸ÊˆÃül‰+ÍSÀY£ Õã+Î ¿sÃe™ÛM¼¬ucÅÇž_;WØ<¯à];}#qpËÂHr|¯üã/bÿÇ Î²~Þ.7Êï Ù‹¸ÁwÊÏÑü¾ÆMê߬?Z³^MËèhÌ9¿Ê{Ph;C]Yü•y$>sôQpÏæñÄ£—kþA¿o5ëÌ뛆°ÏÂ×ü€úÍ›{ ð²°Kÿ ˜ýz¸¹c;ðU{æS*_מž„ýË;G~©êç/\•ü÷ІÇ%u;wpû\MÎϪ¾„}¸x„õ¾¡ü“¹üðè8ì¯ð̨~¬§ðXŒ“¸~7óÍG‹±SQÕðÂô[ŒaÝ…ç¯ûoŠœ DynLE~°;r|!óý¢A‘¼¸Q+Â×_óýÚÇÊÓJ}É5îe}'+Â8t^æRƒÿüuœ×ªõ&?ú© ¿MëÛÊcQÞ±æËìO×÷í|Vƒç~¤Yv ¹“<·µ¦[„ýÓý Ùiñ‹ÊëwJëÁ?ûýðŠäKBùÞç.å†ïÖ{¼žœ¿«xOã/çú%ØÁ=ʯ¶WÊ|ìÛ§*"O®|¬;sW„Ë¿Ý5ùªUN\¯<Í«¸ý/a7…—eUp®³ê‡æaŒcÌét.,˜x5ò¯õšN‘ü²Ÿ=šuügÔ‚ÞK=Õz³?ûÊ@îSê%¡ú‹ÔïïÚfËÜÒAÌûÖ~±›À;R‡5æíÂ^ Fó"ö̾/<`ûуØ]ÉÏZ-Êè¿ü |=åUZK‡¡oR?T^«5˜yš¯Õ:CÈJ=Rùœú¹ýÅ>ì†öGHÞÞì“O¢Ëuð©ä|Ò_&ò}áß{gc™Ó.ñ¾æ·‚ÝÔ÷%a§1Üxã„àuÉßJ½ÈÇ9êŠ;<ÿ4qðÝÏŸo>?¾`6z!ñiÈ/‹¶9ø^Ý‹‚ëŽ|üo'ÜÍëF›‚ï¹û‚ÿíØÒÂàõ±ýØåwâÙésñq—;‰ùëÞ¹‰ØƒŠÍàºIœ3l½#ç8‰¼j}Îò8_ÄHMâùÛfÊ5û­ ·/Z' áJ‘kóÆÖMùN/1ÿ[ã@ã…$ä[ꘚ0Žõ (}N*÷š/pîHÈ}„¯2èaì¡ôj\ëÊ3S>¢æGìŠ R/,¼×L/¸>u3ò\Ú{cð;_·ú =<¼oz÷ëõËM[‚ï_ñuðùäo½pÖfnæý‰ÅÁû­ÿÛƒë£q£â-‘ÌMþº=ö{pÊy~®«õ>ç‡(OFùöóóísÀ _×X.W樽\¯üŠ¿Ë¹¶²~Ê'Qþœÿ[,õlé§¶ï-ÀN<ÀùŒna3âžeœaÞYƾJ}ÛÂ|x#)z•èvzW{䣰7ú#ýT•þ ×¹øñT*Ï‘‡ž N4;įOóùû‚_CyŒ:Es¯Fþß(þqž‡¼H^ñˆg>/‡8fÁ êwÂ?Qþ²<•烽¼¦yŒŸ~U¨¿LqÖ}y¿d[Dœ¡}"îÓàWŸŒˆãBý—ö³/õ˜nöÝÁßMàœÿ÷#èÇS)KD>ÖÏu}ü7Áç³v¿38yGðyqߟø[ ï^ÙŒ@Žýá#9®´?]÷ºœ ôÆÿËäÞ+9¼v½¿ ^—¦úaíè¾EôgCpßÉó÷‡jzæ×|ßîÓ=ɉ?Yûu±èAð¾ûç=Ø×Ò÷.yzsÎ üŠðCü ɧ»[j`W;î×xx çZWê;ü­#oßh>‹øø©3įR?s½‘ýfÒ¿¯ñŸûíΙùÏyüo“ô(£j ß•qr7Ò|Dˆvy×?YŒ¿=™é“?¿¯3òø>ç{·ŽÌ¼ù×þCå »“«“þƒò×k½Eq«êyb~¸or¬ý9âCý<‡¶zöÏ ×7ÍS¸—0û“õü½¢ùÄmÅŸá•'þÉlöYëIÒ¬|^՗ʸˆu­V„Þvâ¼ÞJ;È­ûSÓíÁç­²v±¯³J‚ëzçræ|s;ò:¿ßÖàýéñÈ·×,Wó½N|+Nßs²Öl•ççºFãOÒ’‚ßq¯«\çå5 þ¾½oÛÁ÷z4Ý"÷ȹ7}~äýñ»žGïL~ß]1>ø]£ÉHpŠØ QyÿKÂõ_û†+ýûjVàgžÀKÏÌ‘×ú“Sz=ç´kÜ? ÿ1µÊÊp=Ð:H¥ü~Kí¦;!Ž<Ÿæy's·±ûúd6ÀžKä‰Å~ Ñ»°?ÿÒÞüðû õùœŽ½ª>ÈPƒ> ¿KûFBvSë©’OÑ>A{ çäi–Ö»ÍõÞG"à—¶™Yáúš÷ },¡~íÒAïEìëÚ(ìÃ…¹ìø ã ç–ZOô_!ÿR5îëÅï~¿ˆº„ð‹+í!v¸`ßvöùP úûDð¿ßñ8¸çd}äë‡)_ÿ÷H äÔµnì¶3«*öÿñâ@½Í™ð× ~ß9–|ntOäÖ]Ú(¸ÎìóŸEcÇK.ÔoF<—è•÷Ú³ø“îCù¼ÉÀ˜ïܧ{æ~æÒ‚ÀyÉÈë†õðõ„[ioCÉÛ«5Oe]“w°>’_TÞ–æ÷ünÿ!®¨ÿR ׊?œúœ£¼Uët2qä“ÅÔÔ¯Ôáœz­‹Z£»€Wï,Çîvi‰2׎×K»å–ÜpýU~°Êo¥½*û¯|`ísQ\ öRû„4O©}Íšoö7ÍÇ?%åÁ”øÈhÉykZﳬv|MåW„úGEï+q\D_´Æ¿Ê6º¥‘Ï‘y ÖßZ ¯Q“ð'c×wEäÂ~;Ü>ê¿ÁÿÞ+µ9tzn p¹¸'öµæSœ™—`¿÷×w¬ȵ«;òuºf ÿþépÊ¥ Ü[ûÃ.ÿ:‘ß¹ËBž'¼ü¾ÝáÿÙ{ëh-êïïû©#!-ˆÈHKÒ È Ý4Cˆ”t‡ ¥t7CÊC HÒJ#0”t—ô}žyí=Ï9ßµîµÄïo­ç^Ïíüs­«&>ŸÝû½÷΂>¨q“ׇü×H;Ò§w§ë¼õþu/>ô_í!èzëZÿú^–!è«·{Ã7O¾Ã¯hѾ:пÐí¶ðó‰6>ß:[ú`g aË~y§$CUö³Ž¿Ý˜•ž#ÏË~K}Ö+þCõŒö} pâ…¶íAok?¥ ñÇUŽ9qC×vp~ÅŸÈ÷š·tSÌþ1*Ÿ¹õ{úüè-«6æMèßÞãVðïCër"ÒRç9•yeÏÕøµâIwcÆa~¥Yp#ô,~½‘ó ¸©ßÔ¸ ½m&ë7£ö̰:È™X·Ñ'ð¼ï1Pý9Í;j>ß» n[íÔïùs Í/7ùtaîkäÛó¡õM}:6»}ŽÚ·ß':ˆÜ®ž»þî0ì•™¡Ÿ,Õüß»S'øôh¼õ;ô_ ½OWnÅØ)/'CwµÎñÿøiÑ/?lÁÞy5»¥øEì©Sýïµ!üèU×}½b5ÞäóU¤‰žûýq}ôÎbøíêRîëñ#äÑØðQyøÏ=Üçk÷ü¤½þkÜv\§ãfäý‡à&Îf?¥ßŒâò+ñCâüÁýÎà¾fµ†¤^7Òþ'Ï=qþVª†Ð…ä¥y~xƒÈI»áRö]òŽŠw¦E¾/mM<@ìoÅ“i^ÀØõ3q€Šw¡û>'¸ŸÝ §¼ ý{ûúÔõÿ/xÅiiü_ñÿ΢äD¥¹è%ÁQiHÐï­îð‚ï òßâÏk”ž_qäF¢nØugмžæ£íVãáG‘[‘ça^Tžô>Y!¿cv‚Φ½åÛ5N÷w|ús÷†ÞÎÀþødòx/qÊH=&òÿ5rôëžÐó¼ºÐ—™Ý§§yÿzæ«¶ø³Aïsù×óŽ]„Îí†Ïªt¯~ŠÅ}ÌyÝîû‹×¸‹üóX]Jã?Ÿü³Ð‰Ï_öïYüû±v¸è—,Ûý÷ÎÜü×н/ýë¹Ï,ü‹™{¹ßóIýç´Â¶Ÿ*µ½!¸@·BäÄÞ¦þõCTöéܽÿ;sgÿ~#ýUô`¯3¬SÌ ü¾æ¯þõ"ýXìÂùoùŸGú³ðçݬþùƒünÕ|Ðoª?‰gI½¤öC p¹ž€‘8¢âG4?iÛHÜpBZè]òÞAÿˆ ǽ ý[éÆúóQ´Ÿ—Æ ‚ø·Ä×´^ˉ`î³ÚIЇP\‡·óÿÜýERì©{v¾^Š›‚Ö|‚ÔuŒóÁWWÖEëŸe7-ÊõÄ.wö½‡œÞQ ;%eoèCüYûêtß¼æÍ‘íD^‹ÝánNáÓ…Ù¼t˜9/ôüYvèkS%~÷¨+ûŸ6|²°rñVè¤øÿ¼ÆË—Ø)›î@߇ÃO‡‘û^>7/-ý%*º{FútoçßîËÝP›æØ5»á—¯YEÜg9qYwÄûèŸá8ïãžØ]§Cïãúá/|‘¾Ò_À¼NÿVȃ™³ýßÛ¥²À/]V°Ž·Žã×4ü”ûí¾eXÿùìieüû4›œcýdÆÞ«Yù“íú*q6pA’'rN‡#ß%ïl,o­ŸŠÕyúDðÅŠ£pKMcß¡ù~ï@Î#ùc7ù“7²ÿ#ý ¿/Æ ­¼Óà7ÁÑh…Öíhß·eúZ)îKp°ŠS¿Uël5¨ýÀ"íE²ÿü_ð‹n¡+øâßjÿci]ìŽWqËå{øv1²ôÝ¥ûÕôWèö—Îþ÷旸͑RÈûÙÙÇd¿o‘ûðõºë3äÚÝã>]÷wú¯¡Ug«Ò#WÛ @Þ®»Ãç1fËç›øÿ¦>›±?ÆîïüŠøÊ?¡Çs³à£¤%|ú±" ú~½Q*7vÎõúÐåê×w;ûzÇ«0 {Qô¥ö·R<½¹,þIÕÚÐãè]Ø{«‘|¬cÇ÷¯gïX&~øEÖsÑIäBþðÙŒ±¿_ƒ>»ˆ¿nå®…¼ÿ –ϷΚþó: ¢¯¦€¯› #¾5ù6ëy|+vׄ^øsÒŸBq-Ú7˼ڌx¿Äõì<%‰ïHÞÙXíÒïêô,âß‚¯°Ï§Rcîõ°7&ôû"k¾IëɃø½ä™´~VínÅ99©‡D¯Û6}ú®WLì:?H¯ ¯Ø«8ø©Rß©õz‘z‚|do¿µ^â4ööíY#ÙÈùÝÃoýÆþç4‘_ Ÿc7ÌBÜeTrösiAäÓ·'›?Žðí™Ðèƒè“Gßa·¤ûÓÿýUVøiìWÄ5§äÿ›ÛC'ãópÞ3¹¡ë­aøÛC,ôÀñfè‹„íð?ž}B<èÑK®{åWüXÑcV;¢ò…æ™ÌA™ØïfK±¯%ßâMìÄï"b¹wRöã¬œï· È »þÁè¼™8Ô«^Ó:ÅÀþ‘| âGÍWŸ ÇÈüó†ûÁcöí…]¯qÎ2÷0ia_àm·±{7ÕBÞ/­ Ý÷q[›Ï²owF7)R[äõZìÁ3üßY—·â~Áçý>ñùÈL½ý/y-óE}ßo4ÇŸ v9öÄ£þ{ëëOùýÓ…ÈÏq­öÊõ}þt“ö†Än•º‚,œÿ aKøänqâ›sù½ò—ҙѥ'öØÃñðSé ÈßÏ¡Ï&›ˆý: þîÝ :× ?â@vá“ÒÜOÓüÈá†wñ³%®æ´.ŠLß{mØ}⪳ŽËçÀŸro\åþ®w!^•- üu1}67tŸ»öOXZè¿_+ž;ևȕóx=}$v„Ú7ÚßZå­âÛ4¿ìΞ¾PòaÆ'O–E¥¯¿{h_{ËhŸÂÿ7ïJ_Z#k âÆ£g¤™]²~ïóuàÎÄ16a}—ïí¾ü\GP*¸Så;waâŠÏaOŸ­îË'«ƒƒ± -tÚ¨1ôx7+t±83ßwžço¤¼ïçmC?Ž!›ù:ñæóÚožÿy¨Ã0ÿwnôþçVÝâþyí' ¡ÇG-±Ÿ¶ÁXwù—¾ =!îh¬s¹þO6ôQ¦8¿¿ öoÈõxðk«ø«öC' " ‡Å)°—ž]Âj9½#ù·PÓ/á«à/¼• Óöùá;ë ã­Ñ‹Ÿ Æ®Jp¾]º˜¸ïÅY¾|qþGù¿§ûpì´y‹‘ÿÝYÿj¹¹¾Ä·Ì{¹ÿ§7Ït“çêù ~¾~Xܾ¹Þýq5+üuñ.ç)~Ö׊+ì©ËÑ>äŠËÒ>)š?Šä+òku{âW×I3áMè?ÔÕë*ëˆ\¼®Ösiýžæ7´Ÿ…öoVœö)Ò>öÚµäEåäþ¥ÿ›¿|&z%È+,-ëËÐùÊìë,‰Ã4ꋜïѹ]7ï?»Á~œ¨Ýõ5ˆ÷4}º¶.×öéÚK19½ø…N¿úß»i‘óËã÷.e =6M†ÜuÀX­óS×!u5Š/6›­/´n·OFÌ-ØU4…þJ&E.çÙÃùŒŠþ~ƒï_òtÛ§ qØU©áëâûÐ+ý ÿÕi=™û,ù3ñ˜Ú±ýç3÷UBïtЉýt£(ü˜}#×|€¸ÏÄ×È‘'ÆÀ]ðg–\è“ éàÏ)uàïožÂ¹¡?~û~ÏV‰õøúy8Áÿy`ßx[êAßËøÏiõü~}« |Y®÷Ñl'û<™øª;~ vT–±Ð“àI»À…HlÐ/òvìíÛ/±ÿµÞCúÏþÝCç˜(ÞUë&4ï«ù­ n_ú›MVC¿b)îܾ¶;ªójæbH¿cNâúÕ£vÞ€O¥’Û»ô2|ô»Úî³âרtáÎã¿7?Ưuý„W„~n'ÂO.ëež@èqÂÈÏq°·†¯Ùõº^FòÁNõ þy4¾o*Åu݇=µ¼µÿÆŒ&ü¯çÞOý {lX|Öáƒø»dâƒQùÙîû ¿‹Õ‰õéu ù7.ϱ·ôا#ö˜Äi4~cß.Ž3ñÅ–i|þ …ÅÅÞ¹2 9U% ÿæá%ø}ÁsüøÍÕ°ëË冯v-Ã~\=}:>°-Âß~<ç뱞¸–Ö1 ~Eq¨ZG©§ýxˆöüɬg©K”:þ¿{¸ÀK ®Ô)󟧞«v>úg¦=Ê~+>Sëµd›ãð¡ê ­—¼_`WI?=ÅMï6«ûÏoÞÌŠ|0¡‹ÐþcøM;F"ï3v‡n‡öb]‡M§“lô6žø¿‘k#ò­×"üÚuIø¾Ë=äßÝòøÉn{^ë“Çu{Γv/òï§ÈéON±Ï}N WSö÷Ù«q{çûoà«÷w“ï2Ag«[Àw_Ôæ¾ê¬C~¶uøßôÂØõB¿ã}çãØ’2zUÁïI=„ó¼·þ¾A\ÀÓŠ<ߤÇÄKc~ˆ¼ÍÄ·' »ëÛçsè0¬ú´éwØ-³Z˺ÛÄñ &.»eöI¼?XŸiÈd­þCð°^ûŽþïíÌé}ù©ÿás«¹àÿâ¬+Éu½qè)‰ßYqòÀ7ÒßÐþrG´ü¿öMÖø·4vÐúÖØýeï¢b&~#ûß\Ÿk ÿ?‰ó Ög¦žZå¼ô_3*÷ >MúXÚëFRO‘5=òXrü[Á™h=¬Ó{5yqé“ëUë€ßôcgöûþ¼hù›H¿ùõùU«qVÁMB//Ë:&øüRŽt½Ž¯ðXäl½|Ða‰%äCäá±3$~e>-Þú¸¼LÛY‡b;¸ÿgõ‰‡šù¸ŸJý‘Á…„bDþçÝÈz߇ö¹f?ryAwäPûWü/æWàHê¶DXeqˆ÷Jç½aec¼f=‘Wâ»É?DßœŸ¿Í¼¾ójVôôÏ×¼€ÎÃrªÍ%_4¡*¸ð%‰ÿ<:=õMèßZ±Ö÷Ýsm£õ©wϤğ•9:šPÜ[ÐWRûÐHdíÓ®}lƒ¾ËRdžªG<÷›ä`}/ÜD¾Žê¶+ª|°ÏÌefE®Úñ¡¯á»ÐéŽ"çRwçuÂ[Ä[$þáú‹ÿ·Ÿ‡}üÑvì$ëm®“¨à–³¿%'qþ àŒÝŠwñ/€ÿj,æ+¾ßí‘ »dè äðôŠì÷‹GÄ7®-ǯßV9›¬ q•"]°—ýšóJ½ŒÛ6ù„>‰ÿ׌¼íý±r~EUü%£øè¸Þ:žã4qF·/ìȾ3ÐÍ®ÂïÒ°>³nÇÚqÝÙóÉo]†¾8Ÿ:~V9Ýå}îût8ò½ï<øÕ+„½˜ z,U6ø¼Ý%ôëÔÛ¬cÎüÿÂKÖ-ÞkìÓ_R“þ*Nï^ø…Rÿä–˜†?)ýÃ5O¥~¦Æe¬ŸËÎxú7&ôíÅGýÅÇzý-ô;¡q}鯪¿×¾¶Áü¸Úið[EЗ/¢5ý¿o.ZK>pAYäü†µÄë-'~Q–u+{½<¤rébØÇ1kBß1Þ‚®½DÈí“YÇ÷z£n#—ÝÂàíÝÆéð'ÇM!¾“{&zåHè()8eç`lèèÐÁö¡ðeŒûœ'_øb xk*ñÇ›‹>š8þZÁÿ¥n%TëÜš¨Ïëu>ƒÕ (¿Ÿ?=Qaèù³FÐ}ØììÑÃÉ÷˜ÉzeNMÊ)‹^Ø=”û·=U¡òbjbèOò½Þ™‡Èg%~BX;Ö·è>ü›[‡ÁË}Èyè ¿†Ue½3'á<­=¾š*šcÜì‚ÞZ™‚ëÖèÀõš¼‹ü˜Þ û¿NðIÆôƒÄdþû,qø¦‘›'êaŸHm?bWÏG^xè|ÖYê˜ÿîáuîèÏù êne®‚Ö—+žÍÜê‚ãkÑ’W퓹mybÁw7b·IŸXÍKÛï¦~ðPuì¥úqûŠËRœÙž‘ØËŸÖCO÷¾…½+þ`(ïYì–õ«_ÁÁ[—r³Î×§³ÿ¢·­Ä©±gjÎb?~¸Íùâln¿—øÉ Gï…N[ö2=àUâ5nÉ.ØS¢—Üë/Ñ‚k°ögñõ¹•iqƼ« {Á£j~ÉM–¼FÉþ«Sl|^~+ô\m:ÏqQê`z'žs*%u3bßY/ó#.ô†Šô» »…‘7™ÓÃ÷7r°C/³þçŠâgh<öÜrž¯f>ì¡MEÐ;æð{‘CöUò&¡ÏmâF‚Ñë»›íÑÖYìL·rÄaÿ|ñêã¿K~Î-pºÓ~—·coO)_H¾Tûèha#ÿ>ürõKÿæáÜLçϳ ê ¥Ž4t¸vä´>PëKÏ쌟»hâì¨Ïaœêƒ¼—¾9:çLûÏj½„1§ u]âCùÞCž× :l:Yòˆàµn*Ô±9òvÿ4ö¡lèºjQè¡ø\ôlŽ>¼ý$®ËþH>ØÙ¶Sø9öâ8|–éOäròÞ\¯ß.øõ»øØ!/Gcå~Ü4CØg'Oï:_ÆkÒ“º…UMÙ÷„×¹Ÿ¿:"?Çl˜ÝmÜŽŸø5ö|’ËèÅʵñlŸz(=øøj"ÖAòÆÓÜ×éÁÄûÏÎ…ÛÞÃ.;E=÷9)wáÇß#vgá¾ÆÀn+”„¸mÉ­<÷árðé¨:ä[ºU¯îåþ‡=è—ò7£mK_þ»î øHêÿ¯ulV×ãÔÎ3Ò/†ž¥Gè»:Ñð¡ÚYûZj|­ãwZeÞÍ׫É{W¯_,ö–âä-‡ð*5CŸ¯ŠÇº^) tzyô(?ô½¢òÆý¯wè=ƒÔ¡×êÝðÎbò…ÒïDûÜi_GÅ­z©g“‡ïÚ‘ú`‰#™mKŸ·¯q݉ÃÍ{®õ ä%‡>ƾΘž}¾ˆ÷5°×¼ÉË÷/ñ;›b'µíŠ<o ùjÑCÎþ\ä•R/z6uŠIÛñþ­Ù<¯•¹œçñÐ×¥±S¾/¿Öóš«N‚#þ¨=þ™Ó~¨ñx‰S‰àSɡ:{ø}’!’]çº;sqÝõÂoIVâ×ÜÀ/7ïeôí'Gúþï!ðmÖЄ¨ô§óe¼ŒÔ‰iÿÍ ¸Ä‡Œ4·Á·xúFøÿHÿÉÿÛ½g@¯¥“B¿¯×¼°öC ú6ןK}Û¯±—GåOÅ#FÚ©è…Œ©‰W‰?¯ó„ƒþ‘Ú÷£wâ[R×ïí}A\¹’Ô÷ ø9óÛè¨ÿ ôü¦Cø——£·_ÿ"vk)äXÍ ì_Êlk¢Ê ÍWh§ÙRê2÷òå¿Ö›k>ÚÉ¿ ¹[3)t±zô¶ÏÅ>•¹¯Þ¶øqÀ ¸y_ Ç¶óêµy„=5ú+îû@8ü ø7ásôÒó#è‰+Á-$ÊC\i+ùX¯õõf“Õè‘ ðWŠ—üö˜2’çkÝ·êˆÜºÕù>¯,r@ú–9¯¿…?ÙÈs'}‚}T.×É׆xïw·C'KaÏHÿãÃíìϽ4ØG랈º_¡Ó•}ú7k¼>ê_7vÎ_¯(ó®¤ï‹i/òQçm}µŸ<ש‡àt.®ôsÆîœ÷ß>Nîì_÷\8q#Ñ'Úg"˜3)}ƒúèD©‰ÓJß(í—zV~•ùîó‘ëâ·ýŤ.Ì®šº’CX?ñ³‚¼|²©ìC÷ÕØ) €·(†ý[¤ñ¹·B?'áû»qÀ‡¬îIõ„óì9†|ûú]ö¿Ì_Ø5õrDó³­>9yŸ© u ›W‘ß«õñ‘oùtd|pzÎoCSZA_1ÖcG?E8'ÿ÷î'Ú•ﵟ¬Ý<&òFꦭŸ úzÑ,³þsûIâÑÆ{'yÿåMè{Ö‡Üçcð±Z§:xŒýR¼Æùð§”&¿3lÛ!ÿ÷ióÿîŸOâÃA]²ôñ×z©Àž–¾0Úß%¿ÒŸPý‚Hÿlћп³(‚¹ï2§'˜+¡ý•´Ïc+Ä?¥_5)-x\©K´åï ýÐu®H0/@ì c\1ø$q;ßž0òTÂoýã°Äû!_§r¼6tS‚:\•ÿÞá„ÐY¾$Ø•b‡†Fõ"o»·žÊ _êÜD«QQü ©“Óy¦ÆÎÎàâmkÖ&ž-ñHïÛo±wRŒ!/t¸ëSerÿÒiì¥ѧ^ò©Öo“ð ¾"ÏJURòYÈì5¹î‡·ÁÓœÇw†vâw{®`n­¤¸aì¦ÄÀÿ´2|yj]8Ÿ¼×Îõ¶"OxkvX›¥²nÈQÅõ þÖN• ûNë"$` [É}Hýœq¸|¹,5vý}Ñ?I_cWNÜ®ãÚCì´³é¸þÖ>¼ ƒÿWc}e®¸õâòPG×þæÄèFçêémmVÉz£ÇdžÇß=ŒÆ«Á?H_í«nµÌˆ=,õ¶öëuÌOåÇ0 ¸—fó¨g‘þýÚ_ýiËhHœ*ü>yìIÖʺ ßã|ˆ\yÒùçu´x¾{.†à^bߤçc ü~iwú¬{àâòèõKÓ·”þN£4ðÁ;‹‰ßÊÜ_;7¸}{{.ä¾àqÌ.GÐãkŽbŸ(Dœ\ú!k¿ö`þJ~›¸ý˜óøÝ3‰÷„¦í%¿4úGâ7)6¯«Ú˜:ÄÙŘŒ¾(ý*8Z¯ú]âH'» Ÿ¯Fî§ŠÀßôª³>±ß-û†Ôo3ûRO`p©7”¾»n‹4عçƒG˜P½û€>GÞ¾>Ø÷›Z€ËÛ3z^–žøè+\‚kÂO¥+‘¿˜y’ç“ú5ûóì’$Ž£ýÍ·k2Ϧ|>ô´ØãÎÐø§2_YûÍiÜEû=FÊå7Âÿ97ö÷Ÿ§mKâ7ÒÏÓÙ´–>ÌâÿiXqGê¯ê0íéý2B³î“¯«žøæ¹QÈÃ?faפ þ[ãè‘~#yÊ’áÈ·Äé5~mŸ¦/ŽylqË=aèáó}±ƒkHßÁ–ùù~R?ø©ØEÖ="³ÏZ'aŸE¼ìûÄ›bOÁN“¼A¨Qߎ­!j ŸO=ÉàäóD~ªßì”Aþe9ùèÐÁ)÷¬€^Ê×>jx»¥ÈÏÜÿÝ8Èûù? _ú$Ãß]<žô©0ïîÇŸœ ¹Û ܪ=dö‡æQwµA.líƒ\8<‚àôÜBSè»üÒ7ï{¼-ýx-3у±òàǼ$nô9*ù5zùç'Ä}²]À?ßÙ>‘¼——.~H®jØAµî"G~.½×çøAÕÓÀ’ÏÕþÚ/^í|;ÓXèKûgg !Ç: Ã_h¶úÍðo·Fõôϯ󋥘Öãý§þ̾k=ÂØøÈsÑ[A¼'fú´UØ~£€ô?[1‘}Ùßú¬‘»çJeìšÊ‡‘ke‘û¡G—åï·9܃u“¾ Ú'Í*¸Ä§ëÐ"ì 3qaèjp\ôµÄ¥½=m8¿àn¬W‘~þêàùÔQý ~xöœg‹ÒÄ=e‰ñ“‰ÿ(}µ¯W0·ïÚEì#ÁéGÚØÃšgøù(ô<ð3øùAÆ­Q×É­Ý—uÊ“Dò£áÄ ÞÁ¾/ùyAßsÞGBçŠ/ýt(×-…œ°{î$~™&1ý6ͤ_B’~Èß5Ðoõ£¯ÃQâûΑÁÈ%©ç±’,üóòV~è¼d3>O~’¼ù·Uð×÷g¯³œ÷ÝÖ?{gäÀܵ¾Ýf[%É}5?PúêkžËIžý'ýC#õþ°ô—×~ôZ¦u÷ðúÖéèÿOpišg ð™ÒçÖk”z•¸{©Ï’ºµ`®œôs³þ,îó‰ñE)ôºà/Ý&ôpOÿ¶ß¦N4R¿±~/@÷×N³Ÿëó{ÁE#¶!'Ѥï™7ìñø+ëó)Cï}¾¾$Njõ¹ùu}pš-OGË·jý_¨q ð,’_õV^ >^iöÊÏä©Í«ôWq«õ'Ž.ý˜BW˃_S?äj}ôR>ꎬ!èªnO죷é çXi~þ¦ÎyCˆçxòTú8| ×çõø†×ߨ êòü…œ8Uˆ8P÷{Äg|Hÿ’5±À¼³zÉå)È×ÉR#iEâdÒO+Ôñúu’Ô3¯ãþ¢äÍó[ñÛó÷t“Ìf}'—`Ý¿=ƒR‡|„Ùéø`ëô†àU#í/â}ÒßDçTižÈ»7 Kæ—89ÒW}‰ßK]¿öÑú»‡5-­ÿQüƒûQ{®·e"ñ íËìœäUæ[ógdžö‰64!O }ÄŽ$Åþ•>Öaò²^ ±÷wõaýÖ­?V%¥oWFúõÈéßç"ÿÕ?X*yÖ¤#¢å“œåäeܸøÏf¶eÈ£¢àEC+ÿä:YÓãì?L¨ƒÛp:û"}£ÌÐ âiãïuO¨Pv®?2ñt‰ç˜Éö®‰º/Æ¢ÝàçÆ‹Æïn½§¼z7ÑWu³²Šúdôœy-vÒ4p2Fµ¿À‰–/™¾"ï—>'n³­t9ú#p=í¾Ã.?Vhð/Ï]ù.ñÝÖñ0‰zcg0·!s ò€µè[g=»géväѵQðSÞ9È÷9 ßç-‘óÒ#Òž@¿/ßN\ïû]ðçê™ÌMÿË3³Ï/p¤2OÒ-ØöQØ™2GQéÏêT~>AQò7¯Áq_þóéeÞ§âŽt~b€ïGóûf—_°ŽwAþ*®]F¾÷ŠsÞŸÀ©8î üŽb… [‰C›KË"Æ–@¿ žÒ´×c÷.*Œqœ¤u2ôSðüÔ¸-ryo5?cú™ó׆ÐôKŸÎŒG7ÉÞ:9 ¹:a8ñÛOïðù{ Ð?­®â|óˆ¸ãô­0NôÁÞkZ™ú„­Ëð‡û·BÏþ :ýr?rAâjÎډ跙°£ÂwK|RòY޲¯-¾ä|u¿DõŒ~-5”ûÿq üv¨ñ¨íû ï/p¿["w6 w‚¼®ÔyåÏèq¾ž}ú¯»ƒuXñœ>’?Õ¹ð:7[çakWÿØ]âÓÇ5¢öÝ’ƒ3ß„þÿ©ó`5¬}µ?{ПöD:ì™Kg\jîMæ¼éo@œ3ôý5äyõÃÄE²³²º½Ïºkþ³Ë7ÈùÑyà¿n °Ošm"Nu=7ñ’ÏkC?YVqÝùO W/7ò?,.r¿É~ü‰7©¿c%H ÿÄé†þ;•…þ‰Ú7¡Ü8è.V\ì=Á#Û“ ÖU‚ÞŸ¿dÝNÕ#žÞ¼2yí”yÀW0‘õÛLß—%væ¥éÈéœáßI³¡OÉ‹¹]’aåqáö°ÓOSánm_Š`Î\Œý3â>ë` 7ŒwËòy¨k°žfD_ýt=¼{ z¨Â8äÃêּͱxÞ|ô!ò¶£Jú&;›Ö‚˼ºóÑXò‹W?%ŽÕs<ö¾ô!1SïÅžÝzü?¢™`¬G~0QÎ/óÍcÅ¡ëIÉ}¹n•ÎÇu?Ï@¼Dæ[†Fô"v?+þpÍÚàšæ"Nzç0û¿¡òtJöiørÅ]jŸñPÎÎìW¹”ä3Kc÷Ø©é“`$¨ˆ>?ðq•:Á›Œ©ƒ|¹F?£wôò­§¼~EßÌ O§ö3—üƒ›„:cgóì ±£ìËਭ eð/½Àþ Iÿé[ëþ¼÷8·œðÛ¯µ‘³Ÿ’_pÒMå¹´Sp¢^ê1Ø­ß$öƒ½ùƒhq%oÿ×Ð_•ЙAœMq€j·ÛkÁ=»…À—{Ÿ]aý$®àÆ¢nÁÉE¢wy×2 }u¡¯µz¢¥.Ók””ÏwÍôõ‘µ0ò(ÎyÖ=vUô¬øïæ»Ñ kE¯Ü´ éaVèðÞið><äý¤ÈÙ–i¨·}Ÿ<…ôÓ¹2ÖàùoÔÿÍKÝ¢™‰_´n‰¼—¹r:7EûûXáɯŠ.ZúžëÜx3ábñW’]ÐO]ûwÊ\Gw@|â';Áñ…ËEË8™2Cÿ;ѯڗÊ)—º{&qÝûøýWKÉïáËg{K^üØG Ñ;_ôrAoFxCüÃᩃóG ŽŒÄ¾ù²8qHé{ÔYÖ¼ÈçÞÆ®øѶ%ù¯׉«\ü~¿àÓ¶ÉxŽZðœ‰KÇÞÔ9+ý¹ìTƒø_µcäŸÒtÇNl¾Žû“>£îÉ»Ñp™Úg+ðs”Þ$ÎlÏ™ ½—ÏN\Mú^›ÅÊqÞ;W¹Ï2©ÇJ7„¸ÔŽeàJÏÀßÎZ’÷­cR¸1öÝæ%¨?àT…•Œ>ª^á¯Ñ“ ÷cWI]•ö•Öy°Š»×yˆÞ£Í•Wyo-Ì >÷ÓÚà4“,~3ùzyuÿÿ™Ï‚7íëwþj5q ¸ ‘ÿ2/Pí¤ß¯s®³?/¥¼±Úå÷±/ãÈ'ߦýæŒù»É¿¼vGík°Ò÷ÆZ±–}™)ûÚ!ûY\D¤_Ž<“x‡ùÅÞ—C¿¶ÿ”üKÉSø]“¶A{*a'ɼ#õmâvÆnèùæ&äù™fR73¼Ð‚}ú6Ãȯº•ÉOkN÷‡ùØçý„nže…^nPßîìÁùV4ÅÀÈ!¸§ùçño«–Â.¾¶=Ùi4tÓNð}¢·ŒÆÔñÛM–’—µ;Rçv&%úo~6äp­ýØ7£V¢ÇJíÞïlÀWÙ?€>×å> [²â• nÚî}× %ßrã4öñ¾ øÑ3‹ùrÌÉdã7\-Ï~6- ?IžÏ|}¯}ãtn¡Î¯”9PýÉœîP“ãÈQé‡ÌCѹ«:óÿ>9'½ ý;[×ó×aoJô‡ÖϽO=åOe£õ#R<ªsá%þ–zØkeúK® zBêØœ%á+­ UÀ’zűFêö9û*äpÂ1Ðᘼ—ºŒPÛKÈǶԟØ-‹²RßjÇœÏïÕÿý5t½ýOðc‚ =¾-Nb9ÔWºY'bȽHˆs2y•d/ù¢;]‘×óè;á‹]$~jèÉKì–Cüù‡Ð¯Ìß°öÁß­•~ÝŒ_Œû»~»Dô“•h þfCú¼X[k¡§&Ÿ ¾“¢zoEaÿ9#å2|Òq3vûþ,ÈûYÄìASx?`=z©À)>oµŸz„ßëáÇÿ›|`ºíÄ·¾¿ýžÍ‚~š5»6_^üéo¡õrö–Ýøéû˜+b/OÁõjœCO ¾^í¯Vä»Ì÷sÞ}ËÜ2í÷¦óŠ4ŽëÖ{úFýŸƒãÙ(Î#slƒùáÒTçoh}ò‹ö²“§æw2—ÚÜâ¢Ïħ2öepg‚×ù¾F…+ø # `/k?¿-é±KbÍ—y*¡3͇åèÎ:×_Jß™ÎOÁ¹œ¬ qã4u„ÆWmáƒø¿ã¯Öž…)JÝ—öò^‚»µyŠýÿ—à6Sž„nÿÈ€þ¨BœUûz£KŸÊ&y+雿O¸NæZR'CÅ?xõÚò^úö+ÎÁ¶®ÏÔƒžolåþů1ò6Åÿèòˆû̶€¸±ä5oj^(Ž]øõø°L:äÆÇ‚oh6½õ +þ«à§BùË!Ç÷ݯÕ~5ý–ü€^šÐŠõ×ú‹•uÑ‹-K³U{¯•¸˜Yl.~ÃGSÙ§ÛåùÜ­FKçUI?({ËLèýõiä±Ô8²ÚO‰¿‡C‡2Ï3ÒîøGó_tN¯·§Ïd9?u½‚‹0¶"_"s½¾ãé´©vŽÎ—Sy.u]VѼêÍ­}Ð:§9Abôè?û€‹ÝyzûXvòoüküªÂ!ìeéanÉŽ'8+{Åèîü]è°Û7пè{QjäªØO^¦!ðCNü\#iCèUì!¯XBâ3’Ÿ³Ç_·ñéSýM£õ/ЋÔmjŸQ»Ñdäy†\ì¿ÌEò¾±øý¸ªÄY’ƒÿ ݹÉ})Î>ÿYø³Ü\è%}^ìéMà—Ñ'ÈÃÅéFþ°…̃yšy;î<þ¥Ô¯Ø‰òzAk{Û2òÍEþ¢îÍ ~(¿Ž"—ÚfäµÈ$ì§ ôåð®LBOTØAþvc,üÿŒ©Á]÷Íù~ú9²>xvÅQìçú¦ðËÚçÐù÷»ãßQœ³ûr2¸æSÍÏp«&â‡èüÊ{“ñ¶ô_dΣ½1!~ÄŠµÄ¯dN°“wô86ù÷‡pßj·Iþ ôymôK±àɪæþ#ßÿ*÷Á:š‰þÝúë9~ßçI½Ï¡îέN?Щ%°³wê5"ÎaìÙ]MN ý68Þøz4úVÀî»L눵žPû6x¿†.%Ÿ©u=ïKò×VåRØÓ§ƒ;­Üô5ì}ü†)oùþF(O{âckªáŸJœÔL±~/<:7J’oîëá§L»,ù„µÄþ¬}goDÜ(×X‰w×Õ~¯×¹—ƈ:Ø'7‚^¿ž¿ä®‡Þ•¾&Šïp楅¯ã~Ìù²SÏjô%üÔ·ø;©[×>Ö€*ÈÛ sÙw™kБЃW: ;Eð@ÚQq£îÅð4ÿWq[Nì~ØQ2wÅȵz–¾¼‘z»Læ¢ÙW–#ß›—ÿ#óKC Jãg=žÛj÷]|~”ÖÍŠ_íej¤}¾|ü‘S$Œë¬H‚š“~ÁœÐó³°¦ÑÏ/tètYð,û– ûeæJâ¥%ãÏJ¿p닟±7.·e¿ú¥‚ÒÞeZrö[먴¿s^òÿÞÖ×ù3|9ã:òñBuìåKYÈÈÜ/ëÙ<ôV+êèÍéÙÐÇ'»O^Øc8«'b7fhÏ÷’gs6ÅNpý˜©=r@æV8i¦bÿ ^\û;„š‡ÿÏãyo-„ncás™ÓmýûhðfêY>ÜŽH³þÚÝ™ü€äáµ–u;+|*óŒ° äñdž·æG § öÁuà|^½ƒÑ4?x‰§~ÊÿÒ%ÏÔo<öPøìÍ}hƒƒXŸyø?¡«WNìª×°§Ä¾Ò:?wxp]7#§¥h0¿¥ýfì™­3É#$¹Í¾íêƒÞyÉŠ×ÓùõFÑÔ‘É|1'ëÖLJýÀ°*ôýý<»G5'GP_ÕúëÝ#'~çÛô‰PÿÐ|J€öÑ2zv%ºp/ñQéWl8ElÿEî“xå÷~ÚŸ]Ç’‡2¿]ORñ=,èlXäÿ;+±sÕÄOÑþ]_í7P§ø² ¤^|i(ß)èPüi·ÜèêׄÄígÐgåÁøÇçfÞ^äÌ1r’$À.Ù[ïkìç:KèKhuüDòÑú¢„2¡gœ3äk½9É·Èy°ÿoæ–zxꃸÑê轉kÐ3ÃâÃ7:_ØK&’O¼§Urq¤8ó±*üÅ~Ï[IxBì"wÐWìã܃È/ÁY˜}gù’¹ î»+ñëÞ©Š?ñìSèÿ&õ™.ö»—§àé{cL].m ^`䇸7âÿÚ‰ã!Ÿ?HÿÉ<%sAAèuì@äöáÈûbKöD½+O-;A|üÛ2ÑäªÎ æ§·YJþäÐ$øWæXf²Žþß x:é»äýôãù/Ø)2¿Mûcšñjb—ÈèNïÕÈû°1Èí.þuç[ĵÚUÁO©õö— îXûí;ÏB§¿ p±>"N"¸-;ÿ4ìÕ5 §Y£ÙÍZǧúÝôг/Ï>a¿Ÿ®€ÆT¥îMp¡ÔG¡ß Mð­ƒ~Ë×?ðä4ö½ôQô´Äñµ‰ÊYoT|>/v–8‰Ô_)þSçûÛ.,–ës?s’ÃçR¿I7 ÿ ý{•——þ:‡É9z—ºq£lmî[æ÷¹Ÿ®"oö²+Ï/øO¹+!ßWÆB/ZOáƒÇ¥_ y7Õ':7ÜK=Û./Ëpi¶ã'¼È ÞzHÿwÖœïA ⯂_ÕüDÀw2'ÎÛŸø·âëu§þîdvæ Éükc}5¾/Vûå·>ØÛ§©Çt—uÆ^ßž9,òØrsÁï7-æYkÊ'*ß{[üd'b*öú‰”Ø3×~ż°½<¨•ƒö32–Åþ›Ò½+óeµ_ˆöß°ÿÊÊ~É\¶H;yóK9èIð”v¯ÒÌéý")ïeމ֓{³[c¯jÿÖ–E©KtcϾ3 ¹té%rIêA¬ùÑ×Ò§Ëí>»âl!ìéæÉ裶 ½ ýô³ÒZwy8tøL™'oÕ_ºàŸÐ½×¹™vØl®'ñøPÌn¬G“ýôs½Ðþ8þȈÄy¤oPP',}ƒ¬d‹¹Ï}á¬Ï¬ÖÄ•"2#×¥©y5«ìùíÏa>.¿•ÍŽ¼Z4ˆýû«-ò"þlî[泚rÎ>€ûÎ`?Ò7ÄÎk¸¹öVUüÙ•eÉ3—Š?Ðñ]ü„xí=»ésp¦Þ;ýxÝÂMò1t¼v~Á<æSZß.¯{ÝÊR–¸lh èâPÚß9˜*¡sfd~n-æJ|9leTþ×þŠ³íœ¬ƒÔÉê<6íG¬}eÍëð÷´OGâÔômè–<›ô7Pü‹âñ½sƒ‘ëKË’/’yÎÚï^û:½ª`—ùSä qÅÛåÙïjû±Än7ÞÙ ?—ïÿ)õ.:Qï[íí?«ýÖŒ…ߨîý?›¡ó‰à.r”ôóŠÓ ä¼óz;Eíûko9³GðüÒ'%ã2öÓƒÉìßú„üNæÐ„ÕAÜéJz\rÖ«KKúeÅ8ƒ]ÿsB䔨IÎ’Ö£çfη±,~¬à'tތΟÔù2îÁ‡Ø¥2Kç˸oMAo–½Ëú„ÓŸAâ­îœçðñ{…£á1B©Jr_ùBðw‡ŒôÅ’:P•£N§Œè5é_ê…÷&ŽÓ«tôù†M˜c£þ­ö—µ¦¤e~¸ÏùêƒÎG)wÙGéãªqc£i ò‡5t>¿—¸²Ñð.v¶ôO5îâ¼‚Ï òñªß÷¸ÈÙÁ3³ æ°×LÃÿףּϷE.MHI6õ³¼e#È׈ýjî/-Oëþ‡ßK)'ªöŒõqIâ7÷â¼Ò¯+4>>vò™K£ñqª†œOêþéá–ÏÎù¥nË(±c^Ôóë¼+á6â¶1fC® ï%ŸgÝÅsßM‡]òÍxìŽ «S2GOñÿÞ󮬗â]e®†Æ4ÎãÎ|Î~hIêà‚9 šwþhrDì7{~ñÛ/bO»”ÿPçŒË|{íÿ®û¯8níG¬úQë€ìrsáϰ)ð÷¸üOâöÍ8äC’ __þ2Wø‹zé_npß2wVõ¹Ú›öÎ\~¾Ãn›Qôíeè@ô›õÉ4î·ë ô°öÓŽ•yk&>Ñd)÷%ù¦P«§ðŸèu§KFæüŒ¸ êúƒw±YÏrþÅi©ÏU{IíØ˜·±›ï—çEò!O¤Ÿ¹úA=àñåØ/µ¦“çšÞû_ô²y½qžõ±Eå§v>ìØ©»X‡æ-YÕKUïÎÿoè?Òn¤OàéÃЩØ[ÚçÍ©1ù!ú×,P‰W©6«\a½%_å íÅs†ÜlÒ{Júgéœ0ç÷”èå±x~KÌHý§èO7×Xÿþ"ý-_ΨïlßiÝM­è©<íÁñÉüá ¾¦ý$¯µ…O› C_ß ®pÏLÖ]êà”O”_ÏçNJŽ]Un~R›ÕÐäÉ&;ñ÷6gFÏ_(u­³õ–EãÓ?ö€£ù®}5œ›éØÁy…6vF> ž\q¡Å­Ãe¢ûoZ§7÷ rJìpÍÓÅvàHŸÊ`]%>m~¸Šç¾þ­“†}:´‡ë Î×ìÔ;îp.úèJ í'åΚÏ~нnw\ ]h¼[ã@bG=ª°O2ï×Xç®’u‚Ä®uóŽå>eÝ?=Œù÷GÊþ2?lôAìí-¡kÁ9¨?ú¹úa}5èzÅDèiØ}øÊ}ì ™Ô÷ˆ±Zd„þeî¼™ý(Ï/ù°PŠÛСøE^¤è½î3°#/«ñ2ó×BØŠÓ–xžÓ6&ú£þ\ôJ¼nÌ¥Ð~¸Ò·ËÈVº[èIâ'z]ÍGj)Í7j_ kòøãªbï¼0È—3JÖæÿo7„?Ò­BŸÖZŠœ—z,;˜qjB¿Å{ '¥þIóUÆ'Oø½Ìkô<çóœOÈŸJß{³ñ~âF+"ˆ÷ îßûzq"éçé-~M¹Ó’c'åiÁÿOô÷Ö(ê´Îæ¼ÒÑ-5 ;QòtŠ¿úEKÿ3kV¿_4¾Ô¾ª"/ÔqÚgD¿š¹³#ÄÎPÿBû¤y ‰÷+>Ö>œ:»XûRhÞÐGOˆ%2[ö‹ºeÁ]k]ã²Æ[—y>ñû•.œ:O‰#I#7íZ².sÒâîÕ9•rQTú ì­ŽJ\99çÕþÔÒ_>ôä%ösè#øSýÁziæG]ÿÐ÷׋Ó"÷Êìàù¥_1ªö^ëŒó£ÒÖ»›oð^â Ö«ò>=ºb¢?éý1:<:úZVõ¿!ô°-ëw2œý–<Œ—iß þKý;ŸZïLÅ?yèý8?^ìBó‹öè^ñ‘Ò_Yël5gÇž=?ê~èsüÓù< \A¦'…Ú?u?4ï鵆~]²–õø«<Ïu·8ùãÚI—Dã·´‹£ém'wzøÄMˆ¼<¼•²0öA£/Á¿½^}|Ûþ›y¹Ÿ¤ß¢¨ë¥öZW*Y »jL¯7šûøŸG$=Žöÿ¦ë.}½Õ~â=jOv>Ž=Rj.|úÛLöAâùZ/©ób¼˜qY'Áÿ8…°K$Þ¤ó=””î5.ªqÐ÷ó~?âUâGjRqƒÚ¿ÚMù„u{U9Zpëõ{qüaÉ—ië<·OÆ7ê{õŸ‡ûS¬ïüÿKý¢5Ô#Þ|úqÌ—Ï#ýç‚ùcBWÝWûü纂&ùvçÉdäÕÔƒÈQéÃo÷ûó½‡>¿^óÞ*—¼µù¿Ö—‰·ª§aÿsnÄž}–º;Ž|‘¸¾•÷(}M«\áþ$§v„öËóFÏà>úÍ€ÿ$ÿzðz<~ù¨ö’ÄÏŒ…gF}nÅGvm×ñÐÌgêÅ>‹QûÇ1ezT¾0Õãw‚§Ñø€âm5_®uV¦U¬ËâÌÐÛôœWúq»u[bŠ®ö¾úÆgí‘Oßædf¦…Ÿz¶"^³¸ ý>úmFžiXçI¾JóYš×ѾÓöæ„ð‹Ä}œœÚcõòx—›iñQ×Oãcª÷tއæÙÜtCÞlîÑî­ûû×¹1¾“ù§/°ÇÎzŠc2­ÆÄ9—>@.l®- z r}¦F¥õ{C^bGçIÞ{û6ë39û¿áRÖqikžWæ)½kßeÅokÏøú8ë(¸QoásÖIël¤ßžâµíñ«$~¢|¥~‘öp&ÎÇ8XˆëJŸzó—j‹¢ò«âµ^BãS†Ý‘9 ×8‰ÆW½dýлg_‚g×xºÌ™Ñþ~ÁœÜˆ È‘'YOÊܒСÈÉŸØÅ7‚Ûõš-º?S¾2úPüíh êˆÿ’¨0t qíwI'Üç’ÎìÿÌ&‹¢ò¥úËÖs‡<¥øç*G¬óËY£$vƺ‘à+#N¦u&I¶÷™¾‹<…øq¡/ï"WŽõùßпõAzŸþíÌéÙÁß~ŸÔÇ(NMíÅsj<3ôÛ ök“ =.NKœBpCÖÏe±¯çF@gWyÄ$Îá•kŒ>é¿ y'ó¶´_¿æÑt>⽂ý*¾¬Â~øYòÒZÏ©õ9öŸéàS‰cé\0½/õ÷Í—§™#~ˆ×ÎC_J¿¯àºªÿu~žôÏ~×{3ûר4t&ñVÅÿz%ð³ÏºvšuJ7¿EóSKâOèÜ,•ÛŠÏUœZöð‡ÄÍÔnTya·ÚŸ+ùàHyŠœ2*"*ÇrCçÕ‹ÒeÄ[Ä%©üiG“y@^Ü)à›EÏ(®BñÅ^ØøÐíŒ_¯v›æ3¤¿³W¦1ü.}KíléÃe¾ûoè?ÒøÖ¿?™o§yÅ'küÉN½úÿßš¸KãPð…è·Hyëû™AütsYžOûU/ÏÌþ×nÌùÔ?ü4݉߬u’v©ÄÑÅOTyi¿5ú”yó:ÏH󣚧pä‡Ñøuê?#<êzy¿¤yà3Ñëv«ñðùñÃȃª‘Õs¿:Mâ§î†‰œ'ÅîgÇâR:Pð|Á\.Åuªý5nÉyÊÞ…ŽÛÓ8¹Æ_ãŒþ”8‰£ò]ì÷“±"§³/#zA¿å‚_‘(1ëUe)vرfΣìûÛ5á;‘:?Ý®±ƒç“ùЊ æ$¦ê‡¿+óu­Ä©ág‰‹:åú¯ŠJwN™QéDãNŠûŒ´÷þQÝ‹F³»>ý‡:U¯¥Ÿ´ûîløvìÖoD|èóƒ$ȱ×ï7ã þY燆~ÜyåÌþÈ<6Ë8ûs–|‹Æ´Øl²y*~“ÖDêCüñ«4¥v»³c&ëýä%8R‰»j?– /&ùv¥CÍ7«?aذ륫µa&~£Ì§Ò8“úÑN¹øO2Ø,zù¥þšÔy(ÃkÞMèßL_û@úSÚ “\&þuò0zXì|'^bøWê®”þÌ.9Yµu~‡ØGª¯5?h¿»y±&÷%¸å‡H‘ï¥NIãÄöäÑä‚ygݼ¨üêÓ‘üæðkÑðHjwýn÷ü ý5Æç×ëÓ_Nìí`^žâR¤ù?="å|sÿ~´Yúº×_r+Fü•uªæmT®; aßK‰ Ÿ'õ^ÎÖµÔyIÝc`‡ ýIßÍ—hŸé ïÖ¼´È‰»;ò¯?v†ßrTâýî„ÈϾufG=¯Ê9Í£zõ["wtžšÔ+©œ·’Ö$¾#qÛKG|Sp/šŸò㢷í’I¹é+¯ø0õ 4ïÔ U¼;7*¿kþ[ý'ÝbòƒÉÃÇÒ‡^íõÇíÜ%—FÝ?«¥ñ«H=O<@ü íï§øûw%yÈ€ÏåyÕ~Ó¹+Z/ø1Ò¿Êiµ½)qO]¿ ö‹Úðµà£7£bk;˜¯x&ùÅâW¢Å}Bñº-ýoèþ?Õ·æ'Ùÿ¥™¡Ë×ßbw žPýº ~y`Ï%q'«z7˜Ôõ)ú6~\òwºò}¿^\Wæg(þGû†j<È\yvTº×º·ñ0ÖIça n/È“iÞTò:ß,˜s³kû#8ghRýg+Ajò #îÏŽJîoXögÐ5^{ÅDޤ˜ =H=©W·?v°ÄSŒÏÛã߉_ï~†œ–¾ÞÁ<*©Qœ’ÆUì|%飩ù†[§á3é¯dýYœ}+¼ƒ}ü !òXæÿ:_d‡þ·å~ß{‚Ûâ)rBæÍ)ßhÞ_ó]A^Dℚ×TœI€“(è[(ñÞ`Ž‘Ò»<—âM´NGß;阮¯%ö?uhÞOõ€âÕ^3ÇÔá~¥/¯âó‚:|éïZwõÉÕ~ATºPºê§|R~'ý[tŽ’Ö)YÛ\ì©gr/†ƒ½2 ~KÐ~“8ŽÚߊSÒ|„ ú[æ5ùŒKÅFãóiY_ÉÛØãçG«SU\œ]pô!ñ*ozEÃ-™ÉöÂéSC'ß^ƒ¥>JqdZ喝~¯ùÓð¨××ëqF­ÿÌ8Qœõ|•Ή¶ÏïÁ^{íà§ß…®vü€LÑâ2ÆÍò¼ÊÜ9í·ã=튼Q‡û‘þ#Jçš§³†TAo­i ]ì¬ÆïÄŽÓ¹¾Aœ]Ö]û@yYSCç:çè\_æ²½_{èÚ(ÖEü¾Hÿò¿Ê{ýç¡òÉ:¹‡û–ùÛ*ì÷ ¾ë.ñ)‰_yÛ&bç«_/öƒ3r`ôºY_µûÝTO‡Ή*_B=:²Î‚—¶¬¢Øb§«ÝìÆºMœrsfô†Ä;tšæ¼=Få[GÔ%JÍy’µÀÏÓ8¥ô¥Óþv‰þ|/8A7[ˆçª\¹'v©ö'°îfåwÒGCqºÁ: ÞÓy•ù»¸,r[òMÁ\1±3.£ùÓÊ'*á›ñ‡/ì†~\79&zAãÈê'}ʚݕ_œ¼=ˆ7©Ü’x™×»qÏ«éOE*aW^*OüòH8t.¸$k—˺\-ÎïOÔ5H¤Ö5h|ÙŒ{Oò—ß$x±ÀOü:‚üÎýÕ¹0â÷}Ø5O(yqÅAiÿ"•AœMì÷Pý»<ÿ¸^ØwѼ“Swü qSÝ?õÇœÔCà7éÓb~Ñœ•Äý<ˆàÔ®Ö>aFÚÛðI©+ìç°œÈséG ~™Òµâ4¾¨}‘ôüê¿ißzµË´Ž[ýAïr[èUq°¢çüDÕ4NTº³_Æ?ªS”çy¨u¶FØeøCì_õŸ­[“¹nÍ|Ä…5_&y åoÅñ«_nN¼†¼–úÏz ’’|Thà ú6‰ý®ñSíOàü¾«Ã÷‡sAß’QÆ|Xžû‘:G{cÙhs¢Ý^ñGÄ×¼µöŸ5æ®EåûGýÞþw‡ö©R¼jÐGìb*¾Oó‚J÷öÑpöçÜaÖoì ¾×¸¼ÎU|µ÷n ö_õÈ„ûȧu.¿— ìµfã‰ÎHñNÆÂØ]q㢗‡­uŽZϤþ¬ÖY™?DH\ë‚ÌU'± —¯s|4.¯sÔTîiœRó&ªwÜ÷ÊÖØb¸«KѧCâG—›‚—óÒ?Yõ:ªï£q|Í[[© ó;‘«¡4GÑ_‚ÿÕºlûÎdÖåÏò~åHÈÇ8÷ãøó&œBaƒ„ÿ¾ñߟ}iþA¿ÿÓ‡q°^½ë=õùÑ=ÐÌö×­ßæ!þz÷ŠI¿¹xÝFøïÏöóPæïõ|²Öº×_úýü"í$äÜÀ˜Ð…Ômº;ú°OŠO=èå -ŠJ¯æ«OÇ—£Ç¥¾Å@O¥]æËþ^/Ž ù‰Ïk\Gýgíí̽ óÆC»ëEÃëyåÃ¯Šƒ”ù8ŠK êá´Ž¡R˜ð3si'©qk³©_iÒoUãSRŸ¥uîˆ\wú¼\yèû)vß¾üŒ´Güu¶òõû`Ú±göÿÙ??ä¼µÞïcI×ôÿôùû¹1ýýÜ]­¢¿Ÿå{Ô÷÷ùÝ!Í…ÏÚûtr°^KŸ~¬ŒüÏ'5éêÿ/Æÿ{§ãøî>ýô¹æçQìé#|~7ìþï#ý{è¦GÎ.Qß;¥³7”óZòZÕÿßÎÎ9ÿ¥¯ÿâ¨<áöç¡ÿw´µ|1^ëùq™©Åü8wóUk?žsùzG⇠:û¯7ò¿·_­öã=öûá½ýÏ[Oöß›”ðãBîðVþ{¯Ò ÿ½çÄ n´ì¸ÿê zÕÍÿë|rµ­ÿºüýfþkÆ~<È[’ãß8ÐÿùGä¾eð÷+ñ7~ÜÐi\ºXÝÅÏk¸ úñ~·Le¾ªY¯Ïÿ¯äò_Í"Ãý<´Uf ¸™Óe¨;øy“–Èü'ùöRäÕ"¯G¼}.}}Üï?dìñ³ä©NÆG“KðD××|!øÈ#Kȇu?ê¤N@\ý1ø/·Àw‚sH&y…23„?ˆßg¢o›—>ùƒt!âüw/t ø‹¹çG½_+ôÏo@_$oHw™ÿ°•?y×ÕÁIôŽícú—8?,ä:ÃÏóœ§c³.+Mò½aýõµ×T—>˜SÈÃíxìÇý ü}M´ÉK}C=@$_ûù³è?àmåÿÎM_Òïw`¶2D• ÿ·Æš=ýu8“‚|Ñøà|ÎRŸdΔù“{’çL·ú¹“„¯ÞþƯá*ïD£k»ulήmÒÿ&|0”~†æŽv¬W«=ÌGžz‚uB¾Ü4Æ1úgZ)3ÑWðt_ðÎyçƒ_ªTåÎìôÏOùÞ²¨û莺ßyèÛµrŸO[CÝémpþ¡Ò+yÍ7¼xÌÉ~Ø{õ>sËŽoêÿ/©=Ðÿ|W…öÿ'󗱯c_ÿ>Í6àš€/±‚G1'ÑŸÓ¨b€kÉp¼çñÉG¾µ958/ï éS¼¾ÊIgDAöo¼Ìwsˆü±ì_Ú[|?«$tØ™¾Ú扷 —!w˜¶¤Ýì¨÷ãÿùZd#twÃÜÞhð½%ÁëFÚ=ðCé_Àe\E¢Ö¾^0fçáÿoÕ¤^ámú®XwÏÁÏåÁ¥é’€XF“QŒ¾ ¡o†r?¿S—êµÉ Þè;úƒ˜YËñÿà®ËóàoBÜשSÙ<üX©?­E¿<·ì<Ö÷YvòÙu#ègô)óªôyìYÒ§îHð{é>Dßô³G“Ž Ž™¾NîåñÒ×è÷9¢'8 [°ÿN,ˆú;çWæDØs¾J/NoêŒíK±®Ëlôñæ¥äÅ×Ñ7NŸß«×¾ÿ¤ô’ðtñNÿÕ(»Ú×{Núé~}¯‘¹ÏUçø¿;¼…É“/Ø_¿ªÌs\{þîû<ßò¢àÅ® ŸÿÏ·¯*zyì,è§Üxö­-øŸP¿Žà!b~~¸€ ÎÈõÐ㳩o5óU‡Îߥ>ÂÚîÀ½w<ôR¾¦R—B}¥™8%8ªêô=ˆ”CÐØÞÚ.9ÿ£ØìëÓÑðÓŒ_ù|.sF"å-ŸOOËóˆ¼6:ä¹D{—ÞÑ;/?x½€ÞG,Cí<[ÂÜ×ýáðç‡ûX¿ï“ð|Y¤®x?ýz"ý®;Œ:.£Ý9øþƺhv•ש%}ËÑ×0XÏÏeNÀŠÈ“™ïpñ—X7ÑwÆ»'ØßxÓ‘C{Ÿ¡×vÒÇÄëXVúnÛÐBæ2ªiWÒÿp8}­‘±‘Y.@ïV²osc/ìÛžÙ5‡õˆ·‘ý,~Aúkmæÿu¶°O‹·B=*2ŸàIùhú6rÿ7|aÌú껨t®ô`Æûù|øýKĵª+³ Ý„~3ïuðþÿ3¸|cK/ì•ô11^fŸØÝÀ ‡z…!o§bß~Gì}^†ºŠW9Ÿ‡~UMêÈnæÆÏHÀz»åsø`Q=úéœl…ýPp/v˲ãàHgTÇîjwga4ú­s¾ bŽÝþçŸGî;AýóqÜOû×ø5é·æ†š"6Œ¶ºOΡ×èÉyÒ÷ê§Зè]µ+Ìç èÇ úF¿·Ûoâ<7»AŸ÷ßb½«ÝBŽŽÉÊç {CO™Û ¿úÏæ¯ØY¨Ï±Ö•D?\¢¾BéÊý–þHN­R\?ÉJžoÅx©ú†ß§¡¾ÅÏüwýJBOãò:àFxTúíM®tòOà ;ÒÛx"uõ?eý_ÒÁ]=qÜvê „£¿Ö€/µÂPOûyÏ4÷THýãû¹ÞG˰ Ó_õ’ûÖøpåÜYQ劙œ·1ø+ø0Q¡EQ×+ôÜ»ƒú079s(Béé_cdyÀú\ÿ‚ßµ¬Ž¼| =t™~Ϊ÷CsÀýV"'&1gÏJ7úØñ˜û¼1%šÜ´ãL¡¾^ä™ýÍTì±Î#‘ûG¨Ó2݃‚¯_BÝí;¬sÌWØ1âWZÙç OžõÕ¨¾¹Ñ ¿ñ5óßìÃÝsu B÷+èëæ®”:ð·™?á\¼‚œ+Ó^ú(ÑgÑ,C&·ÇïÐíì$ü^ìI•3vÕWð[nê‘ÕR{Ò*1Kú5ç:_JŸYá‡H?z,Ê<£öR©oXÿwŸ½ÉzÔ§^?´àtÚ’þ%‘úþÈývtù?¾q±‡Üɰ÷* ây‡‚ õ¶Ù‡S÷ðGè•O±Îb_«}¡þ›{=vfµšðŧIø^äVhiâC¢·Õ_37ž“¾%Xo‰s8ÍŠPï(~jàO^ÿ„ó·¼èVæ ˜ÊÀŸ¹©×rÓ—äý%à‹Ío¡Wž¬ˆÆ·îàšœGì ')ó”?§?õ8ö½üèÝ$…Ñ7/?‡ž7¯9<³™â'è¶þö?ÏüôÔ7æF{~µkÜ{K£®“ç,–¾¡?#ïÚnÀÞªðriÐ+üñ³ÜªßA¥bdÂ~’xUhÚðmVú˜+}:‰ê‚³ýv7õ6ãé§io#¿ÚžOŽ1ßYí¥ £+}¡Ô/P¹ãmi…]—zþâ¨üfäbޝs8öZùìøß¹¯!¯6ý_eφ=Ö‚:`å»J5ð·ó†óÜã~çó˜áÓþú7†œƒþÅ> ž­Ô z‘8 úî¤÷Ùw‰Kš¤Döm¬Ëw 7ÕJW›[#7Ç}C_µ°%ô%|göè.ÈñgÛÙ·Œ=ñúÌC_¢ŽÅÙÝ}ø=ëu€º Ë(©_`Oè†ÝÑE攼޽ôË=¥`žŽúë^Îc¬ïÎìÈÍù_UrûñEµ‡Ô4¾ªŠ|¿ÕsSb¿NK‰þôNHßñÜ%ßb/~…\v™kg~¸ }wºwÎäå”káQå…±‰zK÷èTø'4ðǨë®ö~h-óZ¬²ÒOãÖ^ì‹ ¡Û¹ù9ß•ÝÜçÄÊü3}­Ì +ñ×âQc̸|ºÐa^ÔûV¿×I9Ž8”ÄûìÏîpƒ~æý†»ôõFÌÐwgÐâç…Räà>·Ž\uÿÝõô± ýZ™ûje ?ºÏšþßп³hôß}4ë/ñ7¯Áhø²1sö4þh×NÆ:‰µzÓ—Â.$óíãž]ËчӞÙu;?Tí+èöƒ ¼oþ ~:óó*uˆ›óÍŒºÞö¸ÜÏÏÝø~Ú`äqê½'õÐWU;ÌkýúiõÃj‡UéSºv“¸Nüøm9ý˜”­¾ôåv{ýÅ}ž¤_gèÜrê9o¼†Ÿ¿'õÐ ±sÞ™·e¾ó„B±“ðûÏöÃ/?|\9–øKË\?Uèôl*®[eôß—y I©C°¦¿X•ž5¡ö‹iѯÖ}XúÝYy–›~"êoyyé7jòѬ¨|øer]o;ý²Õ±¯/B~HüÚûî"áü´ßó²c˜{fìj¿¾´Ñs]~€ìÁðE¼ZÔq¦ú\æPäâþÅVýâ.ðþ«þçF¶o°ŸÊƒž4Þ‘¨ë¢rKåèwwq\ì’–ŸH°ªRý„º õã÷ÓGÙÙržó‹¿l6ÀùT_g¦Ïµ·«}gþ}Æ*½·Ù }d«ˆ[aíl¡üÜxɛݙ¯©ñ?· }UŸ›÷ÍŠÊïN·Cø‡Çèk¨ö¥Õ%|'ñ_÷7ú±†ºl¦ž¥ýpìÞc‹'è?b|Fÿ@Õãý"ñq7_Sê‚ÄÏ4P·é|ÀÜ1÷)uX¡U»¡÷8‰±Wú¼Ÿ‹?ávÚÂz¯šÄzú E☡!Ì%P¿=”uk4¿Þúñq„_Ràˆ_ä-¼ˆþ.’»åqŠQÏk}Œ<™7¿VãœÂ_fª±$é>«Èy³‚¾×ÈͪÔOš èïešŒ¾ÛœŒç˜+óMÌLðÁù9Ðѳo~ŒÆw™õO3ÖMì¢ç%~:òÏã1Bãšö©es£Òchüªèö­Øá*ï5Þnw*ˆ4“¼˜½$*ߨ±â'ª}äÁ0—9ˆãÄd^eäþ°NÉÆ°¾ ó;‘_Þ•Iœo¯Éç¥èÓé¾HžX¶“ïïmšõ:š·3×üʾgú’:[‰ß95z̉ÊæûôCP9aÇú þ¹ïY6û,ñuçQl_îknoù;'?Šÿ¢þ·9‡¹È^i{~T~³v¦È‹•³¢Þ‡sTúl¡‘Q§§ôMõèwµüžçc䄯ñßÇ®½†~lóû™¶&rdù1äÁ÷CY'ñk#ù<¸ä¹½ÅÌ£´ŽÑWQý®P¿Ä3ߣo¢™â€ôË%¾¦ù~{Srö?näñølð“ø-ªÿéñ¿H;ó8Ÿêï_a[öíÚMDMŒõ2BcÏR]ƒ,¥Èâê[É’¥ˆ ¹ö-eËšÜÉ%Iß,]["*¦d©üæñ~žs3¿¿¾iþù<>Ÿù|îò¾gys^ïsܹ{ÀÅ1ð[Ó‹s=Oy¹šð|GLËGJýÂ*ü ¼‚;ïB?ùß•¥†õQ'îçp?äoÀ~¾×n ûªMž´¢¿=¯öm=}4?¤y}ïÑû"uKïO™5¼?r(öNùš_÷Á/夯?ç†ôœMÿPÍ÷ü÷zy&ò,¸_óõª÷z>­;kâ°ï—jž_ýž5‘¾a^âhôêµwÐg?‘xgÍ êÍÏÇÕ‚¾ˆÿBˆHüê;ºÁkÍ"â”ÙEé‹&ùBÿîSä3b§ ßÏ—I^]ýó­þ9g—bŸ„ãüp=hLßoåü·Ä!áóÌ—pâ™ÏéÖ …3/–ëúyú¹ÚÑàØš¬u¡&·×HçL¢/“ú :ýÝ”ÇàÞIßl/ý6ú0Kؾ,} «œIÂ~—cÞ€{×àU±—?CòãÎõzÄÉ’÷Õçc?½dQf9Qìüy=Q‚縪ĂÌrôÜÍqŠ¿²8‹þmôÊ ‡Ø/oå+ʺvÿƒ9‹?Ñ·ÊËYy”ò¬Ûì¿äY2ðqQ½Ø¥ƒã°ûòðb²Î¥ffyŽQ¾Ï.ô'®x–úœ•P“ó·-ž—§_‘ûdKÎÓéïåÄn?] ü'uÂà»Z¬ÿˆôª“\/ym·iqÖeJúÊÌr£yA³½2û°#çk^Ló¡Vò·Kþügè;ýð%ïbÏŒ=¶èç¡ùûÚدUë¤}Ïœœ)Üoívô‰ÑüÆc÷sݧvñÍGŠ~¹ÏõFž%žÖº³å®Ån(ÎTÞË(柆«wRßJ'ÉD¸&7ü¸ÔyƒÖô±;Äã꽇œñ~xymÆ\G­GiÜ òl5jÁ:ˆ¿;J__ƃozÿÉõ¥ÿ§Ã|ëÄ×Ä«…nçø5B>J?áÙYs‚?ð¾Õ`ìÓ±.œOòSþ‹ XŸê×Ñ_ÁiŠOtæpú¿0§ZóXÎ¥UøÓ‹ôÝwòÍãùÖºÈzNƒ¸¢9Ïóá3à<µƒyær}: Ç—èsäí¯Ž?ݶuËõ3ùJÁº.šoP¼­¼3ï]æ¨ëçNRß»]æõ\e}%^°¾5ÜÕ+œ_޾_מcÔo‰òŽUÁ® ~µÞ¯*ý°¨?Y'™;¤|µ›ÊûŠêO'’§^ƒÆÑÊïòïaN•½u<ë$õ~3´ªz‘™[-yy‹Ã˜›Ò?$ëþ:Û‚Ìòæô/€Þ5Y€ÜHÞ6¬u{ØgóÂÌŸÿ}°VNá:Å_… ˉÇfåæyObâ,•ëðPÖsOü_ý>µÞ õ[ë }®"¾çømè‡äW¬æqœ¿Q:ö6ýWí/óq}KßÍ‚ÝÑÌWÞóÍxâÏÌæ1_Ý¿“9ñþ‡þ­šw~¡æSÕ>«^Ã*G oCóšu'LÌ’'×|•Ýžþö~…‚Ô… Ð_ÒíÅ<où—èe¿™<ßÅ2—55yƒyÿfîoÆÙeÿ#ÞŠÔ—ÓßrË ƒ/¦Õ&^Ë›%§rlÏb¾¨Þ¯ò5?iß\ÄqÆ$!÷Â?±®Gú kÀ¿í5^»œÂþ ) ßCãEå ªÜ8_õBk\ËRŸpr\¿Ö~Pæ_M Î^‹úÞžƒà$¯ÍÉ÷vEßDn‡ûó<6ÞßòVôÀ‰¥¯Œ;Yú^ O1<ļ:÷Sú$iÝQë‰~ÅíØa‰µ^¯~Ñyñ4rú5ýß¼©¼®ß€üKÜëLažœ³e+ÏEø<î‘—üÌÏÕM¡}ü§ËMð«ÂkÐzºÚ·0ýÉݵøð­Ô8èŸæÏùÈñ¢Öù”¿¥uædé§üØÇ–áçæwâ:|üH=,xÿ*v¿þ%ì—ðŠ4/âɾH>0¬»û¹‡¹Êã ò|L^îÒ6âJÉózú"Ï.eå[¦¥’žœ¿söIø¥þ׉ä§í_8ï–lÌéÒºŽð Õ«|Ùa ù`Á¡Ê?WÜ”>Ê÷²_D.öÅkY£¾EŽÅÞ¹c/Ë,7vÜ4úQϹÿifIüøCeÁ7µª˜9~žùRv‚Ÿˆ»¯ ¸ù÷Šååù¸@>Aì¼sw%ü@Éóè­ø?¿ßߨ…Íô‹×º¤uO?âÉ› Ÿ“:­;Õç¾ßaN|Æý"/Â3ñÊ‘çj±ŽÇ>Áî|vŽûÿO2| ©»ZS‹QO—:¤s†¾†az_â™Á]ÁCÖp?’o îéŒýøãvJò7kVí«æ1ÝuÕYo©;j;˜~¼ÖMú¹¶+€=>tØ:™ëç•…W«ùN·Ìg‘}Z?ÖøPóýº¯HëðZ/ÔøV÷Ah=Gq‘=—>èÿ*nŒð»ÔqôzýôYÕú›ÂsJ¬ ŽKÍÉu O[㣠yÉe™õÂ[¸ ù¨6».<g|ðq?k<'ñ›â(=¾æõyØiÅx®û²>R‡õKÈ<Ù÷¦44ö?â]—ZŠ|‘þâ)×À²¿C÷ï(_F¿¯ö5ló8Lì©Ö/•Gªõp{óó´~íoê`øéaÛvØË&_á¯d~u÷\pœð•t¿@†ŸGd’5îܱ{»¸3ëÿóM3â^Ž«ôüoæÀGõ>9N´¿jôË<Ç!ß?\?Øã-ä^xˆÖwôÇVý±d˜öð{"·Äƒö»åÂN¨Êºi^ö?¨Þ+ž÷_Â~‘>{‰ßLC¾;Ü׌¾Îº?â¯ëO`]Ä_„12çDöcYOÔ&¯X·"ú u }êëÉ#•HŒïhä_ã9»n<ùì[enâAö?~<*öXý²ÆŠ[ì_;qß’ ;ÓG<èÔŒ<¦à® }GÏjæ/Œ=˜ïOذ÷rõ]æ{¥J“ë1ÿ·âöóºoüÇæ|•ΛºÖ¿­A÷þ­î+Òz¡=5uVæõñÊ3×Où³þÌ ò·f_×´pƒìGuË\ _œ>›û’ºGÄ×ü)?qԀˬ‹ÔÕgØÖ¹³ÌIÐ:œðøœ%/Òo]öé)¯$l~ý”xÑîʼrÇîÍÿ¥Þ£|yå')BqlØŒþ”öHö·ÃIÛ—f¾~»Gܸ[‘­cé~å©[]~c=ªvCŸ%¯«¼aÝw«<®ˆ·rÿBò2Rÿr¿?—~" Ï28w¹´Ú².%Úbÿ•ç´‹þœZgÔ¼¿5øcæÇt9Å~¾‰ÌÙÔ|¬®O´IxòQÝQøZAM漫>kÏm2Ç}ûq#¯^ÂðTs¼Ö7>2ß[Vx³ùÿ»uŒœ;q¥>3ǽ¿§yÆÆ=Ž0¯öuæs¯ëðOÍÿÛY¼³‘ÿç:nòšïÕz¸ßäi£öó7‰Gò營¹.i£ùýžà_©*þ×|Žæy½SÁŸ<Ÿ¥.«<{·ÑHp¡ä¬Z±ðºŸ˜‡ýJež·wRææIÞÝ‹a§ßæ=Ñwü¨ðÑü†ô5ÖxHõB÷ç¨^)OEã ýæ“ý—êW…×¢y·ÇzôWòer7áVäß^<‚8Kö‹GübÉÛ(ÎPœïíê>J¼£qJ°¤ò.ø_ý³·4§ì³˜Žü\eމò"žÃGÌ•‹ê}’³¦<Ãóy®$yÉ:=òð|ûãüfò<Ë´ÃÏ˾óˆ')õÏgŽq|û÷=°Û|/¦óóþÔY^sžáµokóëu˼†×ï5rì\êh~ï]:¾Ý¼¾P ù.ÓÝø;¡€yØð‰9þw˜ÏÝÚ~¡Ài£W^‘æÿá…všã®L2ï­ªŸšW?¾µÑŸ p1ó;»ÅËØ-éC üÚpÎfülO—f–#oóEâ«¿èÓëì‹•¼K®cßþ—÷ƒ·æî‘y>¯‘¿~ƒû>ý…­ èÝô:àL­' oIëbЧ4Oë?ù5ßKÚľqÉ;Gûv3Sq¦â å*îFç îVÔE¤Ã?ýóFîbÝFïÆKÍCºy:1§õ•cÈoSúÑ{w1Gñ…Û¥ÒÜÌrå³eì#Ì)Òú†?™ùãZ_ô+gÇ^IÝÇzž:y™ž2Gd zy9Žö‡ƒ±ãŸ7Äï'#Ž'èþœONñ¼ÏNÂŽ(jäÊ˽ÈÈ·»ê¦‘ë ¼¼¥1ræÏXÆû__FŽ¿+bÞgÄÁæ5#î3òê-<‚|fäÛj™Æ÷†~lüˆ÷Äó¹ßbŸù¾¿í rÖG}ô¹ù½;í zõÖiƒ—œ”Vø£%Ìï½éÐÇãoº&Ü3»ªñ¿ðêƒu.qDcæzíÁŽ)?ë›øƒ/g‚/^Ü<Õ ^¾hP®"Ç—~š/óžZ€‡â7Ýßå×Ü®ß[ ¿+|Så!i^%ìÊ|Xë÷íÈßâ¾È»ä‹Â§gð½äEà/ɳFûq³§ÝŠük½Q÷‘xwD/ë0çÃOÞÉuh_j&ý6Þ`ž‚ûûKØïuÉ¿KÝJ÷QhžDù Ê« ?ìÎ)pþ׊TöÌ`nD‚'þL,~öæ¶DyÉ+…«˜KäLì n“úòF•GL½° ¹üÔÈ{p¯¹Îö‘û Ë NñŽT@ÎßhÜ­mjì»ÚyÿµòØõåϽ ûä8­šñ¾æ0äûÊLs·N^#×ÖÐïy­Q“ÏóWCþŸÈy‚Aø…øeÄên3ŸçÍnô h¿šëJmÃõÜÅù_?sÅø‘`Ä|ðˆô‡Ñ¼}´_V÷Ûë~¢a1àåhœ?ó?2GdÏë§q¬»ä‘Ì3 †®Æ¾\¼÷ðÊ¡sðxj¯>zxl]’ÊxZêmþŠDpžâáw%™'®û¬œŸR™w½.sÌ+ô}ëVä?Ú¿£u ÁÇQ?Ù­uC?þþ™™×%Úß;]h;÷¿üô|EüÏŒÍrÿ³Étý2 Ü*ò2~[ú2…»çoÜŒ#Ý|=y3é‹ z¡|r•ÅÍê·3ì øª~AìÖÅ‹Øy©§:ŸÌ_ÕúŒçýÕÃÌ»–ú‡îC²¯Ç€«âê€îz޼§S\Õ(–¼gVìC8päÉ¿½mUó}éÓáÁÇöÁYø1éË`현¼–rà3”¼Ä¹WÈ/H|ï¹Ì§´×^G›^ÅÏ2Ú·£ýƒvW×ø=©GʾÅOÊS±B樨=ñ¯]A”¿R÷¸‘¯é #þåþ»ÑËg³;ïÎ#_ez»¾ZÌȱ÷ÈȽÄN¾mèÃÍ^æûÖiððy^s|+¾‘ù<ÌQ“ïu뉾,šHþ'¥!8¥è]èÍÛ[‰ªÂ?LÍULFN2¸Ìé™× S3ž³î]ÜÀÜ_pbÿ¿­:õ¿!±¦.dÿ]p«y_÷qƾ!ø¥†m8³‘7ååéú>3ù [šãføQò 9.àïêºà³ïŠyÓúš¿©,罇Ï;'¢ýÆ$>Ñü¤Ê¿òЕ§ìw‰?*À>JTóZÁÎoÀÁõ+¬Ì,WoJxJ•<ëŸÈ¿3/ö)sí˜Ã¬|.kß"ü“àorWì­ðÞ5^Q~¢ê‰öëñJ|ÇúÊ>(åYöH_ ­?EøDìˆÖU¼ôÛ¨—Yùšaý;Éómgž«W¹‹‘?;ñy˜ƒãŒü99SÀÛÇ{"ÏE·¹ rZèÁ’âØý‚C‘Óø »äú±ãMÆ3Ç9ʈŒÜ;#¦¡Éßòý·ëcïF¯²ÀþÞüûïλq1ñƳñĆþÆî+GƒËÖ–$®[™BºjÖ–Ì߯4ä<Ù}ójØÏý?¤"§U¿׿à<Å6 _þ£wn‹îäÖ:à’ÕÙÌñí5}Ы÷î5rîöJç5Û³à°%¹ï§ûß<>Ÿu6¿·3‰ï þûIz +u»(Ù÷Qê»q™×ÏJ í»4©º8óõú).þBp˼8~ vSêêZú_ÿ¼OFõ1瞦ò°ƒ§ªò*¼z¿'óœ•÷¡uÝGõ¾½Æ»ZÇñZ–Y¯u?ö“ñ®úYöÏEöB÷= ÏØ”Ÿæ“¹ÔÑäÝF)ÇxÍÊ"·‚߆çуJŸ!Wxžá—7ÿÉõ‰OÓ®#/ç9þô®‘çÅÒÈwËCÌù/½iôÀ½ò-q“‘Ç Å9~ùÉÈLKändAôrN ò¾ã"øë¡¡àþï§lÊ,Á÷[Ì{ûds¼ œ_ip_-rqž„Væ8VÍåœgG½ýæ}·T®7ÿeó»ûíF¾ÆÍ—Ëz¿#z„oÜ“ëº NtŸ8Ì:ôXC²eçÙÝ¿öÑÂ]™õ8üüó»à¿ÇÁ‡«å¾ö¯À>4^bž—ò í‡f Ïw1õšJ§È>W§Ë(äçÁéä9cjà„©ýQ ³‰Wò1}!ìͽðwNúGòoý”ßð%”_á—þ ÿ²÷>pôcоUî²Qô“¾Nd¯%>øA‚ ½qÌuÓþ:ZOŒö“<×”ãJ¾^ó Z¯Ô{åëÑy:Ó~[ÇICþMæYWi¾Iû]¯rÖüróg+ä+Å[âÆçŸó¹Ï[3`/+ÔÂ*ïÛS§ã9ìøÉùï“î ûÿî¹4Ĺ—úŸ ¼×›)Óƒ«ï7À¯ý2‰øµKߦ4AbMâ¼OTÃ.ly†ž7YÂï,‰¼I\bl"~5ß,óÏ;ØŸý[i_~ܵ«ëÇë¸Ïa/þ|„¼vž@þµfò¬RïV¿iVÜéë“Qô[ÎïÕ~?FÛ½aÿîÆIŽ>ìmŠÝP–øcû뵿Õ>ûz¬ùÆ/VŠgßšˆÞ8'dú#üEõåä*îï3twþÄq}_‘z·ö:K×¢2‡ä-“~ ëiôDêsNÌÝÄG7²—󲋽>£ó úR$ªóžÖ­îÄO£+‚[$£îºï xcS ìê‡ÀÿMÁùV× ØcÁƒÞâêÈ×ÞÄàߘ_"¿Yž€gTc~¢ùÏØáX‰y¯Ø×·³uòÿ_óý^Ñgàå‘ù¨3¹ïü[7®ùòã$ª‚=²+ GB8Îô¦È׋#èUþñeîúòëeøÌ—ë‹øàêÁUÀ[ßæúFŸ¬œNžJqWæ¥ÈÓ‚Äõ+ù~Ç®óÚÇgÖ®Îþ¿×=ˆOª„€»jlç~½hF|¡+}Æ×¾D?F&An£_äs¿^æ{ŸõæþŽø€_x~‹ãN(Žß¨Ó„ûoˆ¯'ÆŒ.ØŸïcW¶Eï~õË‘üà©`Ù¶™ÔñŸ¿'ßsýxMæ{ÊÁ—¢õ›ýûä‹ÞÇù;òï®ùÒß a];KÿK­“ô%)o­öù‹Ö<¨â-­[XŸ¬—óÁÿˆýw’ܧ)s1Ú/¡}):çà%üЏöõ[ì^÷àÐÊ7xϵ¼NÏâØ£lQÂùe7{ìS™xäëÚìÆ¾Ü¿‰]»y•|y±þsq·|ľONê?7ï ñ„mÕ ™äoϽóüã:ßLäùÍ(N~µäcô,ñ.âÖ<±±û“?G~¾ñß]Ÿç?¢,ñh¤ß—fƒ÷ë$7÷l¹˜›øäQ ú)î6Æ? ê¾7¬¼96}îjêdÞìëà¦#wÁ‡Ç‘s»{Q~7ÎOÄó?­Ÿ$|‡•ú¶ýû]áÞc¯ôÏÇvŒû9g<ö#eþ¿å ì|Ûˆüþɘح¤§ðo‰b§knãûéær_âž$/¼œ>«H.Žós}ê‹Ò§k]̇|åœÞÏ 9~ ÍŸë»Ð—ú>8¯\•yGþMãÏû¯vÝ›~ý>!«ðNâmáßÖ>õÊ«j/È»Rô›º…ò ë|¬Ö¥$¾÷~[>O~|ØøÓà”uMÉŸ¼£žäm Ú“ºQÎcÜGcÏïZCôåôBîc?ê­n`"~wÆþR+ò"«ïç{Åçû!;‘›±Ë±sy’É¿»úòiTÈŠÝæÇž?¿ýu—ÙýçmÅê Xô=õؘåø÷µYÈË·§±ó~Fß6ÀÞZ…8^ ¼×Ì ŽºõÉ?®â5»]!®;wìçg±›Þméß ~ ýu€ø³Ì’a߇£‘»t_‚‹ÏFŸšŽǬ9Ë}¬›ܶb+8qðBþýº)z5í7ôh~Hë‚V›¯ÑÛŸjøzï ÿ²Üs¹ú1û#þ¹ñ/üÞ•ä™$®sïÊkgX DésàráÕ2æ÷Dþ$ßnMmüÓß‘«Ôö^(Ïð«éµ÷eKúìªôí o¹“¹?óCÂó°N O’Ï•ù)í§W~ƒ`=±ó&pè¢ÉØÓÅ÷ȸ§Ï^ãçoæ¹G¬‡÷‘Ûì‹ýϹ‚Sç 7ï>G~ðÕG>/v0ps%Ï»C5äsRfpC™[àÝcDZ“>C®b&Ež†®Å¯ ÞvŸÎ@Žò^D~›õ#>¹:Üq¨0ùÈ©{±s16" £×X[ÿ40Ï=vYìüá'Ûå9 7«#r^’?µ ×·Ê~Ä_ìû Qjþaq~üUƒÃôAL?‰ü]«‚>ß\™¢.÷Aú;‚ý®Œ&‰*}}kɆW&.Ž—Žû¥÷-ßeÎÛ}8?;ž²”ï׬JÀ…‡’’ÆöÏKûý¬ŸSpñJ2×%û6¬¸§ÁóÒOç ;þ!å)ðæ¦F/]½Çßã•üg Öò/É—ßÙ?¼¥ðžê¼·òÀ(?•7dç+slŠoœ¶ÃÁS‘kÂ;öéz2‡¾Þ3åÁ“FgðF+ì˜Û²88çðkìõ“™àŸàáÝߢýÛPWzö#Ï¥ý0FìèEª”È}ïúÈáÝ|¿X=âfé_œá=Ù8òæøvÓ1B‡³ðûK¡Ÿå{#g1¿BŸVö¡î0t’ÿØÚ\|?x Mpöù‘ä;¦ßDNòeï}Ù{.øÂ´&ÏxP=»œô& x¤üäÌôböô5!Îë—U\÷–Ø7Ó¾7k8rœüu³Ô«Ue¸ïÓ#ƒ?Ãÿ¥ÏCdÍ+êi«ó€ÿ*® ®o^9œœ;]ßùçmWÞ+ïQ?.z \"öÞêžž|¨æiã×ç>¿]J¼=½‘|¼æ·”)È$säÞÁsÄM£Sˆ²mÆß‘ÿP=ëãgB#äYæÜö¨kK¥òï(þW~¥PM=[æRÌ\—ˆ×7^%þ¾¹SåYðö~Oü¥äÉœï£a{EBžs®ÄÎğοï§/áë‚ØÙôãÑ“ÚQ‘ï­ùÉ·_HÉû©’ÈÉìu<÷=¶Ôcö ·z"§‰¶Ïxµx[Øó³&.âùýÈïŸ=N|úkzßn¶%æ8Çó;}ï‘'A>ÊI]ÿ õ%kpDô(¤9çñ{ìoŸÁ~^Gã{¯õ)äõ`|êbqªõ}âå¡Õ9¯œc3ö»Æ¯ÜÏÔƒøv×±+9WMmÌü‚øÍïÚ綄ˇY«&à¯íÆOõÈAþõÁ긓w §7k7½NLþ}HøÿÕ¸ùÐÁ£ ©çY‡êðœ‹J¾ºhEpn¹íØ…„6~¢ÿ$òú‚£ƒóù»"Q7^T|Q`"ÿ.X’>ÔWÏçü-ùo:ž½G‚ï•'Ð\›ù–ùÏÓyDÝÇ õa³ò{êÂ?¯¼ «³ýü—o ~"Für·Nà”èñ£%’ãŸSÝæùmíJŸÍ7+±SɃ˜i¢7/Q-“¿iÂqÒ FOÁEç+ƒ§zÀ_Ì»¾ÿ·#ØÑµx.×`ÿæe×¾§ŸÌš‘ã^Þ}:Îs}þù«ôû;ÕCþS5}Ó”ãÖ9Ês>Vq*Ùiÿw»®;ïÿ}ÿƒsþçR:ø±“ÅÁɧÛS–ãGçï;$\^ƒxãõßÀú1ÜØ#Ñ©k9TO|{m\)OŸ¡=øCxÚÌ[ß‚«¥8Ð%-v·Ð|ø¥.¸{s¸ë¬ßŒûw¸3~è~Î#ÃHô³úTòݪó÷'&Ï'ÙlôNøw•¿Wç¡4ßîþð‚¸Zy?ž"Zûó±~œöwäßL2È—Íûè>`¿·Ì£†ê%ò}§v\êd^¼qØÿ8·ùwãõàž›çéo[åM L¨IÜy xöñdìê ì§±\o¯>"uýÂݯêԵܤO°Ÿ/Æ‚_näç9÷hƒßp?Ð!7yÃlâÏ\—ÜÜ žI±ö œ¿›÷5rú`ÎÁ°úi ›)y’ªÄã" ¿™æ£վľ¤ßß_ \Þ~-u¬v“чD]é;ÍÞÛ—gò¾3þï­ŒÊÿÿ1õÈj^§R1òZ—úò‘»öqÁÿo¥Þ”kz“ô~-ãÍðývO»£vGÙ1‚¾ª±cÉ®‹Œ\ ï¯×ä,ò¿rvwÕ:úFm¢Î6£ý¤ “R96 <ßó*ö­óEäYê%Fƾ߰+]¤ÏÙ1Áµ÷:bçž]?ÉCÜØr3xDú‚{bòÀå^æq†µà<ÝzÔ dÖ_}¹-ûóòæƒîä;¥ïÍmÞ•~zá3TþíÃÎÉ O§ò/–¶/õþvYØë±jŧ~ñ{YúZ¤'/>q+x°jDìç¶_‘ï´Ï¿F5‘Ç¢gч:ý‰7 ü€\/OçË“qh=þ´ƒÌƒ<¬Š|~Žq/Óæè+ù êž^ƒöø“1IÁ[ü¿ög–&žvFѧoÕhŒ\„>£OÀ)9ßl#{BþXþÕ¹•êã9¯íSñWD¥®w ¿c”#?9<qOúZôyܹ‹Ýì5‚ó/T<ûxHòŽÞ®?ˆWÒ÷lõ^žé4úE×à¡ZK‰Íïõê€_¹<…yf‰C½—©|ùU~ û5sÕ[È÷:¿Òw1õy«‡Íéß»õ”úˆ}¿²á4þ¡î-îK»ôsdZO½"NìŸì…Q¾çÀ­õÔE•/OæcìûÒ—å,s|Ëç W¥¢RwÊXðïõ?Ä8åËp.Kx,”Iyƒ•—^÷|:;Êú×i$>ÏùzE¨“ÉÞ7ÝçåLéîéô†zP¼Œä³ööÃ_Œ_Ãõý<…~Úrßa¿3 ×_æ.lKÞ¢Êçܯæ±S¥ÏgY ™Çe>Êsî€KVßE>zgæx9êâGŠlBbÜÇ®ñÈþ¼†¹ôº)è3´^ƒ*7SÓÿ=sÁ8ôïxü˜î³^Ç ¯ÊíAà§Ôµ¬C)°ïÙG¢Ï7ûb¥ßÈëŸüÔºüQÎ3„x5ÊsðEÿʾ¼ŠM¯”ùŽúÕ–ëÈÝKyß“ùÿê'ü¢›û6â1ÇïÛ‰ú†ðþ„úAä9n;püœ¯ð7›‡óœÇÆ®ç Aߣ!~=Š|ç¹™ø«Ñgésr—¥Ç®}žoKX½¶²ï­©ˆ]YŸƒýÊ«cuÒé3Ð=µÊ3#ü/ºÒÈÔý5úoõÿ[éëð¿÷ëeêZÒ—¤¼ãjÇ•·Ê\YXæ’—/slfæÏÉï±ò€Ù‹W§§ÎCîwœÄßHŸh°ï:BìCí9Ôb—B^R?"_™¿(vqÄSüÀˆÛÈѯi°»~×ԈߘTž<ÍÙÝà«ó©Ç¼ÛnŽÚ¾Ð:ïFpÿÊ“ZàçVóý“+ªo¿Ü7È¥îÿò>M ·Në¦Ö„«èKÖ¯üx×Ú1Ü;=ú]h¢ô÷Ñ/a¿+€ß©Ú=v¿¦1õqiîE¾^j^ÕHúôå)2ßóž8ª7}#NæMøÃ39©Cþ±ßÐ0;.sNšò`+‡ãoæßà½q%äyZ~©ó=%Î/ø½šM]AçѬˆ_¢·Ý/SoÜ9ûQò¹ÿ´>æuñó6Ú¿ÜŸÐæ ò²j.¼ó²—H÷>(?[`KfòLÂ;üW_^£¨~þß²‡ò=ɯ*ŸšòÑçâd^y85>QÞ'å³ Õ#ðœì‘Ó¾ßR¾%­ŸÚ~Kž¸êú ¶ÔFÆÔÇÞÙ®ÿ3TE_ËË@pK²ÝäRýB|Ø—<¦—ã&þYì²îGT>f÷Å*ðp²Áà˜ñ׈‹%Okê ~Þ8?‘üHøùáÛ1*Ý&>”>$«OmäûÓZ_þµÔNš Ü·é>r3‘þ3jüÅð¸|ÿå,êO2/æ¶á>h?Q(>!ùçä-Õ ô¾ù-÷B&ðV÷¦Ü—ÆýùÝlÔ[ìÞ.¿wí,z6à$yÎ21ˆsê„ oï3Ës¼ŸX¼ƒï)„?M”·’¾­Ÿ_Ûœ@nDC{½ u“o?œlUè •½©ºTóê:înºBü+üšo·½'5oC\$s„õ8wÍuVpºðΨ_P qñê£ÿ®üÞÙZàÙïä<¬Ý/ü„xGö]÷Nɼ²±9qîÝVŽØZQÏéÿ)ýåöývàß½‡É“Ï߆9¿Œû&¼ÐvÙ½àá îcÞ]ËÉùÌiÉsœ3l{Øç¤~Z÷#iÞÂ-Ûÿró%ßs¾ÀîõKé{P¼¬_iõþêÖFr=›·ŒKï÷_{C?0‡°æþïùÄçgÉ»h¿yм°sHúG¾¨„?8ó%þ´jNâå³×ù\¡ÓøÉ»ßaWVååï‘—áOç0Ÿì •þ£ó ð’Ìé»g¾]¼z8ìù»oΣ¿Í`÷[ïÿ—ÿ¹èÙ(Ü|•î1×þÉ ßõžŸp^áyÊÞ;÷ÄÛÂoÿW_NÈ?ÿÜ´¨<ò/ûquþÞ¼Þý[» ¹ÿó¿{úõ7Ùk¤ýÍÁ=,Ÿ/{¾Æ£äÊÌþJ¿¬Îºùrß$hϺ n‰A\ª}Æ¡éÔ…ÄÞXñãó\öýÆù߃»ôAÛ¬æ|ÕG¾ë!÷æ­ú\WÎÇà’Yß/Ä,J¿G\üÊåbÌýhžI戬Ññ‹s{Q·Zü½nÞ‹zƒö‰h|'ü-v¾êà©E«é/˜”Œ|’ðÏZÏ룲_TåǹÔû[z<ƒÖg(2šwŸù‹/ój9ÿçÜ…ßË8´¹~_Íçk>Øùf"q·ä9µNû&Ü™›°ï þ¤n="9Ïõ÷kا•õÉWK}*Ø…ës4.žÄÿŠzÓÝœ<Á f­ÖÈÕ¾¸Ôë%obô†ÍÙû¹ç ò*<ÞÊ®q¹±t18¦§Åqæ ?ýoôV:G|]}ç¹;„xT$®Wö(«• 'yœ-䫬¥Yñûþ7æ#÷Â?¥{¢óï‚§”¿Ü®„øcÌ4êeÙs?¼”àA±éó™Ÿ ?•,~æúGüË×ÇÁkPg<Õ2õ¡°rï<þž|M3äo¾éBý-ï;ìÍÃCr½z°Fâ€M|îøeêQÚ÷úÍJìÁ–½äšœ¥cþDâŒe™–„½Þ®?°KÂ÷§öÓ(XùI\;2ä:q»Ô)tþD÷±ÿå×î~þyê¼ùÄà<ákÐý ¡øx–»ßþøº°z¨¼ºÊ>‘ƒ|OÂaô‡ìž‚Ü/Û…üöM‹ÝºK^ÜMÙùjóU±?#¾,÷йÛΑGÍJ=ËÙ·9hÓ|ÿþ›èË£>Ÿè¿¿¶2|Â[Ø•ók üùb ïb·Ý£©À-Õóð¼u½<s¬±QæŠ|`NP‡µ¿8G?~·ãÈ—à¯ï+ò% ¯ûrávÉF\دòýõ63Mð†öç}³†9ÏEÅÀ’?µSÄÞÏ߉Ü^LF]`o?ìpúìŒ÷ƒÈׯ¦ŽaDŠ…?²{ñ\â€ÛQùÿ“ øÿçóˆ¿Ú~Ëߥ_.ˆ§ünþÅú,ן€þu¯b$òW'òœZu๶É<]7›ë¶ü#{ÝÜŸ®€?ÁÈžoå÷óæ¤ÏàxLì²ð͆êÓßštž”¢þ«û}…WÇøîš³”Yãnã§’ø™1«ñã2÷b×ó˜+­BÜÞh}!õÇ’/ÜÚå#ç寇}~F߃u¬väÂPütŸzÌ{l8ÄsO=ÿû vuÍ4Žw=®Ô¿’SKr•¬8·uüw¦8ØŸÓßaÇB\âá£m±ÇÊgý²qËeûÒû.ýæÒ_h<û/üøÁý.²&00ß±ĵ[Wq½RŸ¶Nu#þlДóÐúò¦\ÏPêÊšÕ3쟸ÎW‹Ñóç›Ð¯}ˆSþáú‰ën¢Ò7Xñ ÷¥Ïkô ÙŸüžò~•ØÀýoö+ñï~挭§•yKÛ ×Zó¾üqÒ®âüþ­áà¯M5ø|†hÄ· ‹ˆ}ªíÛ5wÓë£rýÔÁ;çâ¾|WйWá-3çÄΦóÞ 2~Bø•5Ïl–-DÞYöšÍÏÿ­þ‡P\ìãõ7æo;Èã'¿<;ìsÕýVÊŸæ=)*ö’}oZ÷²VtÀo”\Ã\”ÌóYwÏr¿*æÞ/zCþx{\pÅw¯DOè·êBÎ Î'ͣΪ~¯™Çóß|„ß>DÝ—ª{½Ž=±7ƒK`WGþ„½•¼…òÕó÷¿óW_^ñ]üïKß´òM9W£€»"NÃÿȼ©ò9 ‡˜³ÐÛéM±Çß’7•>Æ@÷-<ç˜ð€8­ž"G[£corFîïpú·¬#i©ßZØ3/k3ä{ ü>Vû9ŽÌÕÁ¸åÉsœ§ÏÁ@6ßÅ/lYÇy<.Þx{`æwŠ2WëµL©u%â¯V}È—þZ‹þ¡ŒY‰3O".Úç—‡Ä#®—þ{wF#âú·ØI·¶…܈Ÿòê>#þØ ‹‘“xÉy”‚ÏUÛKÿ¥ìÉ Äï@ø×]ÈçžXôû,…\IÝØ)ƒ_ 4zOœm'u éWwÓµ!)}Ö»‰äŸ¤¿Íðù]mã÷„¿ÅÉÞQûÙè:‡¸6«Ô&¶ã9ô¨F½b <,wÁqoŽñy™¯µódƒ×bÝe꨺Ÿ§é+ò.7çÇEnAª[bê´K÷Ò$|¦õåý°•ù_Ù7¡yå=w.~Æ\û×µ„ÕSÝÿ§|z^™äC®œš.ÇñëÐ^³Ä™2n~è0¬<ÚÇ~;(×A^îÀ%þ~"ú°m&xaxJðnÄ;Øï@%âÛEg©ÃæÐÿé.î„ýŽ< »73~[úÖíÕpÂõ¯ÀÍÂeà57Wjp‰=‚ãì­‚>f+Ás¿¿v þ+óxÚ]>ƒã a¾Õ¸Ty¿~‡88É xz~~ìDZƦõþ»»ès?¯i¦É‹ü_‘9Ìщ[†-#¾íS›þAÉ[ÿI¾©<ºVç¼ä-BO¤?ßýyu‰™°w2w.ü³Ê{£{áÝ ùñïCçÒW1$©Ìã~¤Ny¡5s,‡ËЧ|¸›ï¢'Ç“GÌé„Ýxø?uÜäy `ÎÕ¨Xm½ü:W 'ø'{cò׿úÈN•¤ÞÝåy3Ù×£¼0^‰Ûøß-ÓþÖü‹]èi+ÿû/ ùòë­®BŸ‚ðù*„îÃun¾$"{•wY÷`(oUý8y‘”ÁÃbWÍS'¨ÿý\;purÞzòñy&ì|5úîÑ}C±ÛîÕåÈ£ì™Ð9>kïLä¬L1ò?ykƒ/ÄþXKúaÇvþDž½Qä)^sð~òxØÿØ‘‰3²Â g%ꄟ‘þzûX,pœð¡[¸^ûX­Çù| êÞúâœÏ„޾|Ûü~g#÷ÒKþû˜Ø~Œ}:"8mërðÐØüø—×=8ï^çèSÈÐûÛy)ç;Bø‡gÇÎF¥ßK¾…~Ì(¨·<^G}ôZNüEDê—æ€YÄq‡*bW;ŒÄîÿp”8cÄMæS+Ôå8}—×Iÿ¢½' õ‰YѳZ=Ñ¿¸q8ÏÖ·ˆ_ _Y@¬Ú0žgšÒø|—ù}áa¶«V_Vþuß‹ÆcºTùÒ;ë ÿe“þ­þç€Q£)z{ÄÏoê^¯GAòø Æ,—ûŸÌj£ï„¿Nñ¿1þ ü†ìovWVp¸U¤/|ÅQâ‰ÛÏÖ ¯“ ÿ : Gý°÷FáØÍï®ñ9»5v¶þ.òÉ;¢Gxl½ªÏûÝ…ù½ë{ù5ñÀS{Õæb„—ǘýêÔ÷dÀ)Ñ› ¯Í¶ o;pn=òµÂG¨ý¥Z¯3OŽ|Û~Ïi½Núßk¯I`ü[ä½ôtäkàOôe*ïÏÓeÄ­’ÿ×¾ ϵWuÆÏd]Íõ¤J¼ºò.zû3úR\Cþr$§NZ1þ#{cúܺ%F®Ï|OüÛv8ülï«ò>þ}âOŒª%ÐÇO׉¿2÷ÁFÇ™•ßsÿ·–ÆŸ,¿”྾'Þw÷Måze/ª“a õ]áÍÔü›;² x_úVBãhpúáÎà•í˨CFº6åïÈ(¾ñå_ûÞ‚ñmà$ý@M¾å¸Ò·lÛN¼Ûmþ©bqÎSxŠ‚{ƒv<Õ=AøµTùÛ¢ËчôˆVà‰«QÀéÝ2€{ûÚÈYãªàðùÉ£äŸIÿYû®èGÿ"Ô9%/áÖM¨y8úzó~Íý͈žé¼—õ;<äf3É×µ…|oÌó[û vûhBä¼Y*üÁmúY¬*I‰k[ýAñúU»&¸¥Àeü~ B¸>H«´†þÆ|—ôY½F`GGÄŒ¼~ý:éìɧyWp}É¡àæˆíw„Ó‹öø}[–Dn—æÀ.Í.¿dî}ÄõÃç¹ß´Ñù>þãeNÞÍI\ä­íŠ|Ÿÿ{rõ v`ýaìÏþ/¸?ÎqüVð;²I÷LèþgûäPâÎdï°ëíRQ_þc{H*pÚõµàÙ«byûÿVÿ§íuøÖ?¯rщ'~E¾)~ì¿ð\+ß»ò×iŸƒîÿt[m¢v¯ ò-~ ˜—’ùz­ÏyZŠþ®¢øƒáS‰÷Ú1¯k½bÎ×X#}S"§_±gÂ.ò‚¼ÌåQøÑëÉ•Ÿ nè~|©s„ÒÇl^ŠD)6sÝÖØèø,ôY:QgÐ˦ǩ§¾‰L~#íFΧmð‡ÔµƒüÂfê€~î¼=ìó·nvD^rô‚7å«’ØÕzÁû¢"¿Û;RÏÁ<™ÑFêSÙ~£Þ4p'õ½8ôËi^ÊÝÿ˜x§SîÖ¤ø=éßÔ>QgCò§wà1q¯¡ç óÌ spƒÖào ç4* ~¼2™ó¾%k¿Cݧô¹ð|ÔºržmV£÷R'²z¾ÄêÞ*í—‘ùa÷ô>ò ƒ›ÑO øÈñ =(’ù“¾h+¦÷·ð“l«éÿÓCúWdßApO\¯_èÃx2“óÒ½L#F°qêFêÃÍ“·Èž.ÝkäwV>ßœ1ÉÍé/ʹcÌWtoˆüÏCžèFzÞ³–Æ>ýݵœÓm9ö´Öcž·ÔŒ7­ûÛ§ÄÃ'Srþ:'-¼fÑWöwë¾£ÊdxV„·Ñj¸™8éM5ðð–9Iá)1–ÐïbýÔ}x›Ü[ör°çÏGêYV^úÝHä”oLù}Ì< ù½«ýÉgè|“ä”·ÊÊŸŠ}w-ûïýx\r}*òúäu³¶Õyï|0þóNkŠbïvUB®ju·É|¬QözfÓ÷lžÈ‡Ü ÎÑ<¢“õ uÝ~gyÿßÑ?bçi.;Åœ±ùõZîß©ÔÅÏOBoV<•~üWÄÛÑ©+ƒÎ¡iß­½Ä¤2þ*§TFðЀ›ø¥†èWŸµ<¶ï rÿ‹‡]‘ye¯êŸð5ìË÷dz¿Lypt¯Uh\<÷.ƒ^œØŒ½·7KÜgôç,Ý»&¬|Ù—‚§¾¾ö·ì¿¾‚ûîò¼½lH?gêØõäG¨k ï¹î öûä½Bßg݈ôê¾rå»ýr›VÁ¯\¨K=Yæ\×C_F²?ÑÎU’øð4óŽNnú✌)Á%Ò¯bÌ  ÜN?Õ™ù˜ Ëø\¤]øó Ò'×ð9ÏSx‚ìås¨ƒ~Z@¾dÛ@ð·ä[ÜM¹ÀÏÓ/Nh$þ¸?ÿß6'8EùBÝ@OÕ#Q^®á9Ë1ë¤ÝÖÌ÷§üxØ]\‹~ÔìqâË>U™Ç·^4á=Cd®§Q>ÞÛÅû“<wR2ìë3xùírÀ‹!ÝÉSnØ„ßÉGÐüÞ!¯kv:ÎMâÒ:›Ð“÷$ΚD@æØ½yëɧþ삳2µ£>'¼WÎË~\9òÆêq¥/<þ/e&ê`Ò«ü¼Á½Ûf¢Úg(¼³N¥Mäƒd?žÎ­èïÕÚ¿ÿêˬþv\öë>:Ýãç8ÏyÄ9ƒ¾ÕnžÙ³©sfçÑàü´£è§7‹y(ÁiÞ†ÇGöªéTÝ;êÀ%—–"/Óéƒ4"/¨™?¿?=q‚ÔwÍf™Œ²”ø8ÿHòEEÙoä$ˆG_é<žåò§r²¡ñî¦Gø™A7«ð'ibw7Ö'ÈºŽø/ÏÙxYÿãÏ2'ƒÛx:òü/¡8Ü4á½ä—Ðkw8÷1ðEUîÂJøá=tZÏ!ÞH•š¹KÁ/N¾œÄ½ëb®¹ ŸSæ+¼vÃÀÓ©JrþuÛ‚?’WG®¢ï >>„ºø¢Þ?þù×<¦“n7q÷0öøé¾V#GVüƒìGÒ}Ýž³ŒwÙßn|•¿!û{u>Þ7†:@æôã÷m‚ýOr½^}¿óG;êß< .ÎÞÿ/v?Pü¯<ÂÊk÷˜Ês–y'Æúæf7$?Yc ùyé£”È žîL<ê4ï¼F9D_åƒèô‹óœ³ÚÄ%‰T9g&ÇÉF¿D 2q°Qí,uŒöƒÑ£í/Áû[ ?íæ2_ü¡8¬ü¯ôA _Lþ¨t;∋Ø{«û ½ s>‘Á‹öTØ× Ì=›GJsýÒW¨óŒA\ã.rh_Ù@~§ &^ªþ<¿Ž:½Öå­‡G¥_#Ýkf|ýÇœüæ½à½rFìÌévMøytßœòùü…é¯iø~@öüèJí?³»Œ"$ûõìa¥ÈOJÈnónì?‘Í™iò¯J>ÊŽ‘8Wú¼yéÊßþðˆúÉ.Ô„÷Ù>” ¿!{”çÙ®<=“:š3ý•CKïT9Jü!øK÷’_6¶Ã>þ>|#yëä~üÀV™xBž=÷9>'óðF”Ø¥Ùw¨äœOt3óð{Ëx¾¹§ÊòñÜýØÃ„8±6¸&Ά½aåÁ[öûÙí-8·Í#òé[R×&ÿËá÷ ¼LÞKæÛ¼.å©».I ÙÑ*Üç£Ì{ù£·ñî£ÏŸ-&мq€ýÆgýøÿØøžÔa­RÌß:oGH$žôs—n¥;@¾Jâ{+ËpîkGæóܱÑçF]ø|fì¼Õþ!ç%|ÄÊÇëML<°Ú&îë|Ü"uQoÐù®`>3yNæÂ¥ï?P* v2s¾/üšÆ¤oÙóÑã qñ„F?üùò ÉüŒîóNÇ®Ïj^‘=Fåîô?o™¦}’~߃9o„ßG§ýÚN¤²×n&8Iê¡øý’ý±¡¸:‚ðNèu¹[>úÇ \JžJ5€|·Ñ ¹ŽÒÜ\ð%r/}æNïŠØ¿óä§Ùo˜3 xÌ}8#âð=áÛµJ–Å?ôo‰Ì\¼¼êqùýâômÉ\«ñu9ðX¼×L‰]Ζ½˜™>É'hÞÄÝvŒãÖªDž“ú€òއÞOäæ·½ôµi¥ø¯tÎ_ökþLÿ?4n'îí<û¼©$ò)8Eó>Ná?œ}ÌÚ ½^v œôkbÞ%_¥õZãs‡Ïåƒ_Ã~í€û¤'¯#ûð´¯ÒÛ<œ8QðJ ÄspÀUÁízCóðü‹"1ìñ®ä!Ý. éÛ<˳ŸøžìQr;>üŸÈ¿1%uÛsà+”¼¾sq'ø«YQú²Ÿÿþž¯ñzâÂCƒˆo‡§ÆH«9%:çU·<ö]ùsE?Üô‰Ñ§V‡ÂÅÙÚß§¼q¡ñ'qCۀϓ¡{ñÌÁQÈÃÕý$yÎöèÅçIÀù‰§"ÿQˆ‹[‚kjmbžöÜ1ÿÝ}q{™í ê§²×Á8W»7£/~áòBòQ9烳®Ôæï…ˆSìQž8{\zê ;n‚çb›ÄÓWNɞʼȭÍ>>kgä¼ô!äKöÎÄã:Ú¦å÷WÏ×'ç`O‹þ~ÝOa¼…|'xBþ5zmúåwÄíÂûe6ù„~Çþ+Îüb zݨ8ù«7›ñíáuVå庴|qžìݶºvCÿe~]÷FZ/ãÑO´¿ ó,ë§"Gbo fk’>">”}Ðv¡˜Ìkl©ýÍ;½æñ@“yÿÈþk=ÖKtÜòl§ßG¤óhV‹¦áêΓRàùã—ùžø/+Ǥpud#W5þ¿ûüB†;ÈñÄý¼'ïÿŽ9sy®­ËÉk•zÉý)»ŽãH\¡{.½-׉r¼eß·ø'³RUò ²·Tãb;^Fê91‹b¿·½Ed/¤ö¯;xºÙ‘ëêù‘#áïö¾_‰=Ý›‡8YöBªFAï„_Ù:,ûO·E>¹9¾ >( ÞÖý¿NÂÙÈo¬èàñJÀ-ß#"}Rš5Ædæ<"· n–þmsm9òó?§ ^ŒÙ| sµÂïg×?‚ÝÇq^|n{öýÏÃJÑß¶~xçãp®?Î"òýóâŸeO–wôvNê<ºŸÔ]8„ºv¾#àøÌ•ÈkêþIÅ;ºwÂðô‡‹Èý´àƒèiчæ]ù^éþð1^KÌõÉþ8»ž×îŸÈ¿çeÁï$œ07ìu Ò…«Gk¼¡ûl™û²3&NxýyáÉ Î¡K}NyOÌÏŠ¢O%êÄýcÑ¿ÝÕ£Þ¡ù/áÝð^Œ%Î~’&<É´¬ø áß öɼ­Î-éþ s»dÞ.z‚}ÝÎI¨c÷Þ\BŽ-ì»Wc$ò+},îÒ^Ì£eÿ•<Í«o¨×I„ý—>m«c¾Ÿü,v8ðI$M~i;œ¸ã×êÈ{•þÈ›ØÅçV v]æ^‡zÒg™úú^ ý8‘¦RЏ8ÜüªÆ[VìÈÈgÛ<­wdú‘¸#n;î·ÄwŽW‰øCööꜷS³ϱõ{òz þX'z‹|v*Ãs‘}ÙÚWo7ì ïÌ+Ú-üÁÍ$ø¥lãÃñ'…?ñùѣȕèÞŽxŠ>Ÿˆõ)+ñDù­ÿ‰ü†Æ¥/akpþïu‘÷5ÁëÊß/{j¼wókÅ/)âÂØñ&ú£õiáÃ5CRpþš¿’}­v¯Jè¹îÓ®™=‘¼X°Ò2%óÏ;oàwz'CÞ…ŸJçs4¯¤yÚPÜ€ÝkÛN=JêüFΡÌá%I‡<ÀÁÊ—eþ ïƒyå ù×ÝànåC0ã?x7gH¾þ$ö}ÈF>¿¹ 8ìéH©c?BßFË¿…¯ÎîϾ`íÿöÆI\«¼RÇcÒ?µ5užŹ®h­¨I"8W/ûÄR‚'>kŒ¼K_±¸r&|Sæ±ÁóÂê‡Ûýz3´~»Bxï =]Vt/¹÷]Mx2;Y2sÜÁò…2ϯ¼¢:÷Ü“%ö_ü@`ê®om,ô5wUüM‘ðÒî¶è£ðè\ê?})>×}^ïÌüŽÄ%vÆèkÏ9ðùO}E_ÞœZ\Gá|à™Ÿ»Çf<3Oì òø[KüÆ/ƒ‘÷‡%ÁI²Û‹q yÞT’ûp©ÝܰzæõŒŠ½o”9þºy™ûÑ=º-˜—Íñ–ãI?ª] úyõuÚˆ ‘Çæø•» Ïs¦:ÄÓ9 ?ŸdÕ« omÒg?ó\+1'ß;6þ${8¬Æ¹Èӈɼ÷¬*ऎ‹8Þ¥ànÙ—å$NNžHxô£UÈv_Lÿ„ð-y†d¸Ö'ƒü5%÷ðwéGqCš#?o£"Ÿ?m%^l¹Íóˆ÷Äóù¼ÌÚgEŸdϧ{lül•âð¼.·%)ûKu˜sý }Âêî .XœºhÞf|OæyƒöQêOÊÃøá(ùð¨Gý1;ßav>JpUÄTœçœ+ÿü;““27ðz]B¿ÿ„àž‘7ð…Ëûy(³ùðøý,Èw9ú2]ÒRïZÞœxøyâÏY%° 5·±WêÃA®³È ì¨õšë’úf‡ì\ä½Ídÿ¾)ÞTý0š] ?(û¿,Àž ¿òÜ{uŸa¿d¾64~å÷tï‰ðöiÞÛ¨]'|ß±ä-œÝ£˜Sÿ¸y”½]V«ìün¡,ä…Ž ¦Þ¶³'¼G²ÏB÷Xè^i{jQüU²n\—äÜÄû© oŒùÕ™›?ý¯ä?4näþ Ϲ÷¾*8Oö-éÓì‡ý^ù-ú û‘„ÿCçRU/ìÏ ÏÒǤyí@Évä™®EÝá{‡çqsöAö:Ûgà§ãD‚'Qök€ge.Gywlê#›'(o¼ìOP¼¦ýŠ»¬ošR×þjz'óŸÚŸÈW ù8Õ?®ð±z…ï3÷¹r|2Òy.àò [è'šyˆó‘‚[NÏ”¿€œÊBoBT~wgð½ô¿+‚îµ;'BîÅX1=päÁ¨+ÃêE`U îÛ•òØMГï÷`§¥~i쨋Îß»$ó&vþÈi¿¢œÇ©+ÈC¯õ§KÛEaï»Æñjß4òÄÏ>šÎùIÿ…ù­ƒÜÞJ†üÛÎyf¯Ìç".»ù¢¦_ñ.öÕž0‡}iÖ:üì‰\·ìñó&eÆž:yÀ±‚g5¯í.ú;)õK»ELä½Ýü~ÕŠà–aË蟺ƒçü¦#÷%u:ôß7øFöîèÜiо|}9ë{ÜWñ>þåˆÜ Ÿ\0¿ýMÿ9»¥ûÏ {~šWPÿ¤ñ“Ùð9÷mx/žÛ¨Dø±b½ñ«2·¨öËyô‰ç"¼UÚ÷¸ù#ò*þÍŠU$¼å:`þøœû²$r¸ydí³ô¾ý‘û%{ªµÎæv<9ÿßÈ¿“ý€ïß52ºÿ‰^#×ò Ž /R§UÞ!å¯Ó<90ñ°ò"gÚCœ%sÒZÏ$}ýÓ¾9©k›ÍƒWÒ>#.jX»ßv öýÑpô^òkî­yØÇ;É+)¯­Ê‰æýÄ^š·&r~bñ¼]NN%¯a‡\ ——Öþå=²£¤F¿>½£n‘©r,ûŒñ·Áƒbƒq“úOÝ"ûÎ…óÑ$ü«f÷~ü„œè›à=å‹ Æ¡sâ’/—¹Eí[Tþ|å9v¿˜‚>×ÉË}Ž\ü$yî ŸŸøC#ë ÎëË<§û‹ÀëÒ—ìo^rŸ+~½'nV>YÅm*·¦÷ 8~XcúQÅ&ïÙr3{i¶çF/^áïùª£VRô¦è-çßÈ¿·ä{º4ß"ùvÍhÊêr û$óF⬓ýó½vÓx.çNòafÛ÷Sò¾Á¸]ãdËFÎÛlEÏ%ÿ¬ò8—‡ã$D<¦ñCÖ×Äëã’׉ݞç'û<ŒÆ¿ð¼¥ŽènùÈ}î9;S,çÕ©Ç»Û{+übjOƒý±‚¯tÿšò–ý+cÏÔÈ|ƒ‘úøJêxÔ7ñóº/Jã/sÇMüî¬ö¢NŸùaõÖJ¸—úúkÁ[’Ï2c§'ßÿˆÕaŸŸ•îk=>ñèåúÈýîˆÈ»àp;çûåT>õ¯Ní2œ¿àóö:âÝ…ìc麛çú>ñjîbèýÆ÷\ïÕ øQµûê ûÚSç—|¦¶-|!Êë ò‘ý”‹øùö ô¤Åð탋÷í¾Bï;r<3;ÏõÉvð™ôckß¿Æ=îÚIKÂʹã¤Á/Kß’Ùo#r%ñ¤ûàê‚°Ï%ïüœ‚øRúN½õÅÑ+±›Šoðƒ}«ðüKW—§éƒÝîžžºÅŠ,à€obÎ '7]Oá·w”VŸ½E»9ɳ)·£?j‚ $/®öÝJ< ½ß>’ë½TNîM<ŸÏ» 9@?d¡[îÏWöb÷Cn%îôz ¯™³¥¶VnŒî»æ„Õ /Á:ì„Ñ ý¬± ;*q¤ú+å¥V>kZ,üúè>Øå‹ДûT£õ™7 èW˜ÿS¸~0sÌjì™ÄëªFöȳì)R>ZíÏ×}"N¢*áæŒì>y±ëG/ð½ÌŸƒožºåªÀ;!ɾw­#{?l]ö8ÞØÄØ“=åÂáMÝ/æ6î=~–;Qc;ú!{*•gÚ*_”çSfò'õÍ')µÆõ¡ö»&q•¢Ç’°zôKÒwªy>ÅåÄÝg[r¾²ONû³tï@`l9â`Éjüìm» ìq©Ù°bou/Ž[96ùá³WÿçžKƒ=•~GÝË©¿o-.A}DòÂîâ±è£öÝ®)ÊõJžAûÝ/‡qÿææF7Y ¯ «oF·rÈã–ï¹?šŸËe‡¤Î£|Êš ,ìÃýî¿Ïw˜n‘8ÈÌw—y9‰6“‰+ºöïHØk•û)ýÏêO½˜¿ÿ=Þçÿñ²ö=îøÂ®ù Í»h|¢yúÀè´èö- Õµz$sÊ›¢ _”ö×ñêõîˆðoH>_õν¨šûóypJ•wȽû5ç+ýçc»‰k¤oÍ›–\7!öZêQ‘u8Þ½­ÒŒ÷§½ø»Ôo•7-P0~äÔ#âÁÙ[ˆÓÅŸh}LyÌf½Ù ü}4ê>ƒpR_³6þÑÜ—¾œI󆄕OgÆfäTãáÇÕz„qýöDü0.;Þ½×½ðºßH悵¾Üo)|[Ö½jüŽUˆ|ÀÏCx2—à [æÏuZcê…Ï罈Â󔺅³õ8Ï­d;~WæñÝ(r3êâ3Á1šg¶j<gÜÿü˜ß•º›ù¬Ž¯w'ð²ç;XoU<({^ß WZП%õêÀ„ŽÌ7œÊµ ¬Ü÷ÇξŽ’~[Óš€_\ä½¾6­9m«#?Òw¨ûnôþi?ƒöæ×ÁNHþ˺ÿ¿­y á½Ñ¾bµKê´_ÇNÕKûr±»Fãï…'9”9noûÿ»ÈÞÿÿÙÓxî/ÿ ‡­áÛ°«¿-ß·û?t¤ö4é#úüß…òm–4÷®/³óh¿oÔé9 |>¾Âîo¼¨áó"3‡"Ç’·0³ìÃÎZÂ÷WØq„ëŸ̨ÆýÖ½J‚5ï£sÆ®tápˆ}9"ñáœÒè™à­'+Ÿk`× æ‹NÆñõÅ<óÜ23÷½ÖMäOðºî»T? yPÛJ ã¦èY±Ý<¯§#9?å=•>ôÀ£­àƒ~¸þC…ÁR7«}¿Ò}iâ'?ú¿ìàÛk­³:îQ[þ#ryßÓxHú`œì8ß—gÑך÷Qæ,‚|R’÷ œè‚Š6Ÿ­ÄnH<¦ýlΟõÀõ⟼îcÀ1Êo,÷UëÉΡ}œ—ðêü“æù4®0‹äÅ]ù?/}DÞÕ±\ð :¿dXözŒá#µ_’¼VëØäÏó,äþ'¹4äßÈ¿óýiŸÝý¬2ö\ø­÷ܱ³A?µuú/qˆWôÙâ°ò¯8Ør¹üévG÷Õ_µX®Ü0±¿W-þ<Á>ìèäÜÇŽ#ГL™Ðáå5WŒ£Ž~p?¿'8_ëÃ*OºÏ/Ðj~Mp—ñÍ|ž[šÒØå[Ýžš|‚ðm(ÿ˜3>yÖcBÂ>/¯A{ôiÀä/éî—ðŠYuo!ÿ’Ç׼пÍÕMxî+á?¥^¦ù-­Ÿk?š>»\'>'¼¯?j?U/_úrÕ?ó+…«ÃißšîëtJ®á¾M^žÊÖ‰ë<øiå½Q~± úU¥þÉ€])PŠûR£ú#xÊ.^wµÜOôQöYÉ®{]FÎù3åºè¯žyåöú¾ê÷oä?T^»ú¿'ûTïÖ/ +/Á>Lñ‡š÷Sž8wúäÿó‰Ä7«:c>4ÁŸö,@œû6K¸ºž½ù÷+Õ6äþ@GìŸä‘¼Û¯ùþ²ðvXø’ŒŽÉׄ“k­K+¸§K÷¹Š=Õ<Šæ«ƒ{¨6,â:~È…Þîî³8ìykߘæ…4ŸÌcKZÿ­sÕÊ—aNºK\?*/r<õ×­ùmÁ ª7^ÿäËÂÞ'+*ä-nÎKp¶9! ¿¾½’zæáµOE÷ÉY^b—ÏÿËv°?¨M3îߺø1é¯Ó|ò1ë¾C݃¥ûƒR Ï#Ò_r$:vO禴xôžŸä ”×®Þÿ7i=¿+}îÞhø™Ÿ D.…< ÌÑùßÈè}òû¦Íû‡ÈëvjE+n}Þ%evHÀ}ž9‘x=h¯ÇΦo_÷¥FN_àþØyÁSFêOèQÄà(áOÑ>§úá´£ø)f=®»VüIŽXä;¶'à9•Ïý+yšû¬ñ¬Ä£VãJØGíÓÕ~¼â»Èëˆý7ò•XNÇxàÁÏÊ‹äÜ-ªy úšdNÕÌ™û(ýwú»ö‘{è±ð‰Êo$n×ü¬ÄÉn•­·&D¾dîOóanµa'ð”ó”8Ù®0 ýÔþ•ê×ÐÓ¢iÃù;å w’Gog>´‰…½È<Žç¾wxHê¢Þñàœ7I°_²wÂÍ? û^«u¸:£Ö©Õ ’¾Ä` ääíÆ<ÃßÎþKžÓÚvû/uè`]ð饸@ç†4βRà­cÊùiýQñ¸ÑæÏAêÎÛø){ç)u +êSô¥gê9‚c ³x¾Ò_X\œ§¸Aî£Ñº;xB÷ o‹ò­h•Æöà%Øýß–ã—ªÔ@N¾ØÄùH?’öYÇ„ǽ²_YóbªZG0tGnÇæçzµ¯CëÎb§¼Êð{2_¬'KIq–öÝçF¤ÿÓ:ß{exqÔhí‡"oRúÅÒ°òÄg]Ês¿ºeà÷·ÿÎ󒽇ÊKÜs&{2­658ÿ?¢/=ð9åÞ‘ ýÑ~ÏøñÁû³q:×]7-~Eò­V£—è“ô¡jÛ³§€C¤¯Gýöùê~]×ùßz™Û¶#/º¿\úféF? äü[L§UNÁ}’9H;Ùî§Ô÷µ_Ò:°‹Ò¿«þ+ØŸ+}CŠûÜZ=ÁI²o˼é_õýüÏ—u³#r=;!õ^ëñ4ð„äÇtÎ*p?%ú*8Cysƒõˆ§°ÏÊßt!þTêSÚ§óÏʃÜû­ vVúÕ”çÚi^„¾ÓerµæKäAð¾ÆwZ‰ý©X ¹•y}ååR;£}[A>/©OÚ‰‹ør¬}3êÏܺ Áó©|ÁÊo¡q±òCj¿°^—ñì$÷åj9p§à@͇*>·ë} .Y!Ü|—>#ñyðä…àlé“ æƒ^ïÁNê\A¿/Ã÷·>Š~+ÞÖ}rgmêRIî£g2¯çMh„½“ø[ëfÞáâ­‹¶l¡^¥ó™?žá¼$>ôJÀNJþÃ(?;Ñ<xúRqüIÔø\wÑ[à^áIøßzY “rtŽNú‚Ígu°û‚;½d%¯[…ÑKÉx B°Ò¯ø#r,õ>ícöY¥J€„ áó’'Rþ!{5þÖ:~0_)}Àöï»ÀŸº?¤u î“à&Åùæºùôû >6kßàó’Ô¹díÖ½Áî™Ú_øåµCç·Ý~ðƒ²·9È sžëšr_$âz^|ÎõK¿”êæãƒyd‘[óá#äïö~Gúð­¬IÑé·U\©|«ZGÑ>‰PyÂNÍšî„ÕWk}òÄÒå\ÿ=¾Æ`ðýW.ï…æÓý¥)u3p¤ö«9#[g)ÿß’YàGÉ{«ß5^ìÆ?H]Ãl~žøFúFt-È×â~Eæ=tÏŠùgÆ ÿ›òïÅûÅ û{Zô¢~ZÖ^ûc®¬FŽ®dD¥þ£%Ÿ³~âC1~o}êàÒŸªq–Q½%þZê\Z—q?[à„ý»òeh?m0¿³ê5×/qºÑ¨q¾Ä³:Ïijìý‘Hð |]ÊOk­ØÏœ¶Ô…¼¡ÂÅí:ïè=Àï\íÛ“P<ìׯÌJUÇøç6áwÿ›rýW_ZѾmÝ‹fOÛ€o8D]VòàÏ)¢ûýìé§ܧBuøÿŸŽÎ§ÿƒ7Z/Ä®túDþ]úiƒóŽ‚ïÕ¿ê~cíçÕ>Í n”¹ Ã>„_Ì÷ã ¯¶WÐà]õ<â0ìJïdà/‰ïÌr÷¸—þàyI>]çmú!—ZÏ} ùÒýÇ‚ë´oAó<êïƒr(ùyãç)øÅÓGÐw©§†â~ÎGúȵΨþNçIŒ)èôëüŒî+Ô¹Ñ`]Ræî¼öy8ŽÔe5¾ ö¯ëï©=PyÍRÑG¬ïJÁOáÈ0ÿxÅwõçüFTý?!¿ÿÛ¯Ðëhâ_ߣ­½üëmSc¨Ïôÿžß'òç÷j?t¨=óï‹·âs5-æÓ·sïz¯óG·¢u0gìØpy] Î!¯í ®\ õ§Dâ’„…ˆÓ{Ü^!zîl}й_$¿ïLNJ¾JxHuŽÍ ÄÇ ß‹Î: ç"çÒ¿m¶éÆ÷eoÎQkܦx8Èï¨}¦u!wÒWh·É…_:µTãY¿Ž­ó0:¯æµèžÍÓùïÖ:ä±íö¿8Qì“ÿ¼KößÛMëé~úÛÚÿÏÿë_U&Çõå¢ÐÓ²þóv"X¾ ¼ÔÆÿ{ÈÕ.b§ýw7×}߯:OJù{½Íû‰]ëáÿÿÖý¿wóȉÿw'Q•ÎÈç»a¿¯ûÝL?6õõ`ÿžoä=Ùòõßë¿×¯ÿ^ÿ½þ{ý÷úïõßë¿×¯ÿ^ÿ½þ{ý÷úïõÏ_îŒ/ü<ÍÛúõü|Kæ£~ÞÇœ°Ä翼JB~§\šžä¯ûù #E?cýѪÿïÛëºûÿßh+ùŸiü>pgzV?_dÝèÜÛOVÓÏyçð÷yãü¼ñíþq[Ò·ôÿ{kÿ<»Êøùo÷ÍCó¿<Ðÿ÷_¡Ï3ùïÜ~´qÿŒ?ãl]9Üž—öå+$­ÿnüTÛ¯;{M30gu«£_¿s#õ‚ïãÂ~^Ú‹v–zJiúÀÌå„úyo‡~u¯ûw¦S׌#ýaí¿—úîê?½OÒ§5ésêÈ-ò“çO‘:•‘¾‡@Sú~ŒÆçó̧žó|ÔVßôT ÛZú†ºÄ9ê@kÙè^Ÿ´Y¯2ý½IïR§8,ýI©£Ùèû¶Ï£î—ùý ÛbRGË¿ž¿—®KݸÁ~÷ü®eR;Ý‘¾’$Ìí¸›2Ї9:÷ó8óZvGé£üéÕ\Ñ[î׌ºÓ¸î¬>¯“Y¾°_pºU£^`¤óëUîOËýz•Ó²O‡ÿ›õÔŽ¼Ã¿î­4Ô«÷t ÷n¹Â3ýjœð|IÆÍ Ô}âMFî® /kÔíÔ3;2WêÆ§Þi%aþÇ+••>Þ˜™¨cÍÿœç}ôKêÇwà°ÖÓ`~Ÿú|UøzÌg1˜{H-Цò\9øý*3?aîû€<ß(#}|?SïÓMúî#ÉJð¹ùèÿ)Ý™ãk†~¦¯Ã\eî²èO“£Â·*ûÚâ=ÕdäüBõyaßÝyÒÇRâ¿3¢ u®;…‡µvË6|o‹Çÿ·é…üÇa~Ì)/óÁCR G-/Qgnõ¥ÌÕå¡^ü%ûãô~zu—Ó2­8Ïuñ-îóÀkØ~µéŸn‹Ïõ†ïÇ™ <¢‡úÑŸ×Tø÷:Þå>Fýçç9vïÍæ´4õí£uËöë£nÆWÿGúþê+Þðëƒ^ƒíôml‡ßÎ(¿œþ‡ç•è{¸¯©Ufü°Ïݺߌû=žǾÊ^ßÔ…wo©ôǽG.—¯ NÛ~îâ°rbV¬HŸˆ9†:êºðû X‹|ýðÿ‘…>ÃÐßá9Î*Œ_‘¾¢Cí8Ï—ßH¿å6~'û‡½¦ —b—5̇…ÚI®ëðeÿ9Z‹˜Û2^¦â9e¿[^ÍiéûC«xúîjÜ¢ï:Reôý÷™<‡¶±/ëô#|Ötx‡&wèê;—ëxÏÙ–>kÐTp–C<§ÏÎ#‡·;€O¿Å¾ ~q3'ï„á~‚ïÇéô}b‡½®±ù\l™»}žšçøî}0QsÓ·P¾•ô“~Îõ]ºŒýßÖ†ï_Ÿ¼ì*CŸhÓ8ôm‚?Ç“;ø6;vøMy™; OÝξÙñ»åàë1Ó6áz÷٠ƣߑ–ÓÔž973áïÜ'ñG^5úVÔ_Ò7Uþ0s,}·vžQÒ¿÷%vÆÌ޾Ïÿ€ª0ëÚR ¹ÏÚŸïýº‡û¹³2×íGüí~x"ÌÌ7­=kȼž›¤#÷;V x§Zû›UÍfÅy®Õ²;aå Ðõ0ö!–𩪎ÿþ9 ýÏs¢áïJ‚ï¡Ï Ž©}ÞvÀÇò1ó'·j#oÝwþ7ú`{1"ìï‡âzîwýèè}Í·ÜÇu[¹oâ÷Í‹ýÐÓ‘e‡øUу½Ç|¼o­ùyKD?´‹~.£øçØõóí‘û;ðÌ¿ÀlUʵ4¬\©=7N—âùt:Êç+?­Ø÷ÆHáêˆü˜›‰ÊÂ;ê5d¾Î.˜šÏÿ@žRæ<6Oá¹V¡ß3°ù0ç/ñˆ×ãËpúmd®É;Ö9Œ¯›ñèç]»ÖÄb÷½T»±ƒ['Óÿ¹ž"oü ?8µ™[ÐÏ+>uÊÅ7þæÍ +·öæ[2Ÿ°—û;„=v­7rŸkr<ÁCö+x€ì ðßK™ÓpήåþÖ·ØžÕ »ø€¹.Ë(ÊûÒXèÙ·_à â¼ÛÞcŽãl&äüMô8elá/,Œ¿ús)ß[9Aúí‡b7æÏϹŸÐ‡Œ±#åZ oÅ+ìE†N<×hg'þù·‹öÏ}¸‡7½ÿ>Á¾'«;sÍÆ”n¼—aÞȺA¿¤u¾Ms®Ì÷Ùkø»ào¦ðôíÝŠ]ÈÆ¼˜÷ü ϳš þ:À܈±âw~çôqžÓ˜ŽÒ÷=»%ø]ï§~8Ùïôs*> /‘âîÀo2?ÚïžOÍÁøµ¯k£×‚Ÿ½üì õ¿øùA…•{{<¼"VUxbƒøä¾+ñ ~Æ«ÎÞ3§ÿ1îË»!Ìw$}‰¾]‡÷Ü*°»™~c[UômâbþÓ;ô.?sØÆ~úbizó¾Væ"÷‡¯ÿ´^–ÀÔÜç>±‰¿Ä¯{‘ÏÓ§8¤/öGâ4½_îúQ½]ð¦8W²-Dø2¿·½ŸÈ>"×ÍÌôÕˆøå̽±ãíF¢ÇÓ„GUäÞñ†ßÝ»óGeø!ªÞaÞì‹Z«ÃÝÇêõENnŒÿ7òoDÊ‹ÿ(){RÆæ9ŠHþĸ½Žë•øRñš7r¤ø·ê2‡qޏ© |{Füü¢7±“)é‹w6n¦O²Ò¾Ÿ)>öx2|æ#öh›n‡ËÓ˜/Z/ñ°úUosŠnëåœï€œÇÆVðÆÌYί™‡OT•¾ç%é±/«á¯4[Våzbš^ß!ö׺ӋÁK¯/ýÛ§«žª} <ÞD>àC1üëµûø—3ëxþÙ™ï üš ‚k¬yQÀ-…÷b#LbŽâ[ø«Ü27‘Ç£ÐÛçÌ×ZoN‡ËOÙièW7¿ÛÆñgÃo\+Ëçk¯«Ï3p #÷ã×%Ø+ñßط1¯ˆ÷§ÝB~?1G`ß‘¾ð«Ù?5éÌÊpß;|™û+#çÓv‡Ì ’o³Ï3ìu¤ÿÞ(ÿ3§åÔ#ÿf‰Sþ÷mCxô9œG‘Tà‰Q'x·en\ü¹æûk<©ñž>?û€‰Ý¹ç˜“9•wÍg8i#`'¤âûµeKÿ~0÷µ|¸veæ¯NðÁ(Þ Æ™‰˜§ ì‚ïÕé ÿ‚“ù;ô¥WVx^æÑ øÏ]î<&,áßyëoj>%[uô7þAüÙÆÄè™Ø;³Þ~â &ìRü§xÎ˺‡½S3_i°?Pó®vò‚ØÏK}¹?w™ßq³À“㥼Œ<‡gÁÝ<û]¸ öKü¸SýÝ¢pú’ìh¸ûì”ýãÊyàï%?C5žz ½ýّËÃéàJ£LB™_ÍyþΞ;£ú@üóׯ°k]2à×$Ÿ¢¿ãt¬²6¬^xýâã×vÁ¯ù+#FÉ™ÿFþ­Û×É&ŸFìåYôZð®¾u§ÙsôMqºÄÇfBøÐ4`œ»ÆçzF\VŽUÎÕþèsõfÂÎ-bNJã>{à áš*~ç1ï‚{¼u±W}دn*/Q”ñüÿªž²gâ2rðlò³(ÿÿs#ô`oCáÂß% øÜ\79›˜ûÞôVïƒy—‚ðë¨üÚ?—Æ^ü^9QœPu r5økì¹æ/kDóÁ;ä¬:ÏžÙ¢Q—øm˜CÌ=9{¿‰û"xÕˆ9GøšØ§þÍÛ¾gwiòU9˜· e¾·úWj0<èÅØ+iFg.RåXãÿ@Ù×R—‘|ä³?4ç=s N¾~²÷;ÏgÁò°’÷Ò8ÃZÿaqØûå|÷‹È¸ØÍø üöU&æä¤nŠ'ÿÿ­}§s?0H0)\üã($×Óý“xʌރë—|™™§ s&‚;L›=æÅçØñr1È!øƒ_§"?nföµ.7fœ$ßèi¸¼PÐŽg~!s×ñ¯óÇJ~¿,¸'ÉÜpö-°Yxn¢ÌMv’}Æ×vrÏð½ÂðÙ)>³2çùlª\de߆÷üv]ñ™ÔËœ×ÌïÉæ¿—ú‡3—ýFÁ8¤ó4â»îðG›â¿4’ö>ö`çägwnì£ä„ðb¹9ã¯Ácb/n>»é.…7Üjµ >Ô ìÛÓü›¹evõ·ºèaHZꔟ³GIó A¹œ¯q“Õ<=Ï£óô¿>|rªç^‹•øKì} \ˆ>Ï$úŒ÷?ÿÄóÚ³ <,ùdóa$ÍKs¾ãáwòvF_î°៾œà?_Îik|š/׸XãYóÉî—ġΎå\—ཟ=%_õƒða>ãómÏÏ+OÖÐHÈ}öÅèÙø+:…¢­û=Í·˜“s, «'Ö€ab'aï%oêæ²8Îê¥ØûYyNN äKó¢âל…Ù‘³#+%>¸Ã\p‚à„6Éxn=˜³ÃËz_˜{ÛÞšû—¾ Åkšqg$äú5oö#û\¬Õ…½/í+8îò´È…±Ö ÷5óQøô‹,\ÉO7;L¼[¤?×—- ¸öÖ+ìéTá ªË>2ç:|bN^æòœi?£Ç’oæn„PMq=¨œ$œ¾hÞÖ>,ó”’çtrFB´Î½æ ôðØEôk$<£š¿²—µ!ÿ¢ù·%—…ÕCoÈp®»MðÊÚ³ þü={3·xJö7êGþ,]cðÅÄÇä¥^㶺Èùk>&ömðDxb­ìó2Õ’:#ü š¯ÔjK~´NZä°ýêl‰“òý櫘çË-|žk*"7uðÿ)Wq_Å?kž:Іý†Š‹¬,ÑC‰;—S`Ç1§ï —ýC‚+´ždMdO…—Xö<¾²_-æzKÀ—f^é3/¬xÃFƒ3ÚÌÇîŠÝs÷«qCàX>ÁoðnÙÂokOíŠ|F>}‘øOíi`<{ oáo æ¥ÿÌ=;¬hÞ]ëÙÞ0æõÕNØÇPÏ~ó~¢ãyyî’‡0ê°7Oëe^ǵøíÔ y?¹ƒóxCâçäÜŸr¯8~/öµ»J’O˜– ò|^"çn`iØûìf—=Ù§`ÿö “ú}-nëÔ ì§ž÷$$¾ø§/«]R®9PNøðÅþó8bŸÍ³Ãã/¾"?— kDηsFä%…ð÷FnLXì’ÑHö|J~Ü.8ë–ú¾ö1xçÿDOâN!?Pÿ<×ùŽù_w=ü!šO53ü*¸ˆ¸ÖÌÐ ¼¼½ ~ü—þï¼=f¡šà±ïúÜ‚u™¡—ð#e¤øí3r–Ëžá—Í熕ÍoÙÄ‹ÿì§¹/+…§wØg²×.îì°Ïמñz3.5v~5|KÙËnâ/5Sý6ò§u0‘gH~ο]n®«{TŽí©džúã̰öÁ˜Ó;½èú%ù>ÍÏj¾ÑÜȾ+Å!Ö·¥¸Ž§ðÊâ>\-¼R×høÏy${ìcìµlÏÇ{©·ØUÍ­h½(¬¾‡âEp÷)xWÍÕã9Ÿ–üùÅ9Ô—Û4ÁþÕÉÇó‘|¶'B8»áL>®^®u1³Ü pœÔmLÃç…•+ÕSsA ø•¥þèUÞJ|ó>3o™¹áä¹a#p‘S‘¼c;öpê¶æý{Ô_˜;&bo%¡Ç Ö{´_Gp¬³5çULxe–ã8Å\ðô_}%^—þsáì¬Ô—é]ÂåµÜM³æ…•[­ãº·f, +_NDxÜF9Ã÷Yh~àOÙk¿¶×Ñ#ò3²3òÞ¤ÔÙÅ_ìù–ç&õ ­G«†ë3 Æ ‚¿Õ®X·löRIÑNù5Çý†½ÓޤȜ÷ë9ð ìu8Ïe1ÑSÁ5š§Q;¨õbí§Ð¸Ñ[™Œ:Ƚq²/Pê={ã'¥/GëA=ÿ­ùàú ú|¼¡ùpÅÅz¿Ì¼ìåÑ:—⌠¿Õ~˜}™ÐCÁš5æ=F®ûÀG©ÏÉhg`?æã¾^nŠüíê‰%Š=–úUg~@ê¿Z_¶Ÿ®hœÖh8»‘ ù]±;V}öÁhüe\r—†½oV£$œ¿ä÷µ?!˜gÜ{}’z‹æ‘¬ò•g…}þZ/оY+Ò~Î+QeÙ;!}%Q-{]v‚]ÄÓuó’/‘8ÄXÊžõ Á¼”üŽ3o1þn{oöTc?žÆ ŠÃ¬\§8nÏ¡ä{+Å¿9K¿Ô©´/Ï›:‹x¿dqò¹iÅØÙ}»oÎÍE "<ºNtGxù“‘OK6‘¼¨ô›Øé³,ý7òïNL99Úçל „§ƒ½«Zï×¾.ÍØgjù÷Iý¼ö+žµŠ/âû)úý?íýeÔçò‡ 48m‚%@ðA‚‡à¤qBp »·ÆÝÝwIpoîÁ󬾪ú}æÿ)ÉÞk½gµçˬ™éi¹ïòúUÿ›Ü—ý•x„ݰrRð˜öº ô+ùoqöô ¸7Q ôe#ЇÄëñó¸O‘¿*wq—…Ä3||ä²Ïx—¸¹ÊCõí~‘<yZŹY}™ooüRû*sÝ)ø™âŸ(¾ÉMZŒët¤ï–â—ÝÚ¹BòÍÎý„’w ßàã?­òOãÈŠ› j_`‰S¹{¯³‚;õñe‚ÛÔø²ÆÑÜ‚eY¿ÎÛ8¯äÛŒ.g°3 f†BÞo'¸YòÎã6ÄóëЯQqwÁ)û ÷¥Kø^pxÁ:§ø_çom¡;ÅÍà/”Ûµ*<=hüÚù}2qÓ‚9Cpu’²Ï)3Tú7| qÍ·k¾/ðu€8à¹!qwÅÿ(>ÃþöÍÒðü¯úM×ÏÏvÌÃz‹=m_‹;7ä9Ežªÿl»kBü[»ß}ü¼½ç…—¾ŸÞ"þöI3é×Ýýró!x67 Çu¤¯•úOê+~Ñ|O¿Ÿ`é=r}âêêÏS<ǯO‡õÒ6òùUäbÓÜè—žØ×{‘ëm¥Ÿ˜ÄÌ‘“;‚_²®å>wÐQ哹ßNôØ•ç|âW(ÞÓ»¿Å~¶ ÿ¥Ú%v•šèï‹Û±SZ¯B>‹}©×1~9ý—kÌõ¿jŒÞ|R]ê;æ 'ßl\üçÐËÜðeã§ÜøGÖ”‘S¢ç­KÇyÁ#{fƾˆ„.¯ïA>m;ÓìßÐØzÐ7©Hmè¤{<üüœÙx\’[|Zžã¦\ÅÏ©Ù<«äc4ΨõªÏÜ?n@Ç'7¯´E¿ÆØˆÿ9‘š¿u_•aýS~G~ô ýÝŒ8ýÐ/­èk<[L®qx­Sÿ§¯°u†®f^ ¹_næ™= ÎCã j*îMñÁ/°§¤ÀI'sàâ6g¿ ™~ÿ|Dì"üžâ9Ï÷ó¦5ÞhLß¿I>ÚLÃüxÕ¶!sÆåx­CòñG/V\Ÿ=‚~õÊoöØ£;½ûœz[УkÃÉ{Ô{~åˆ÷ÿø'ö{çí³È£c7Mœms<ù4Ë£’mó޳j?÷Žs’ÔõÞ­,sዉý½ÏÁÖ¹=~³Wçð®onërÀ;®Pï8§ú‘½ÞïMïyŸyr=©—7Ò˜+¸+Í/)ÕMz’ú~·üôàùt_­í·‰ÃK<ÍXÅœâ0?ý}—¹1¾&xLcàvøõÆ"Ž<¡_ÿ¼¼à#S0Ï·ó\âR¿çÇñ¥ÞÕ¯¯P{pB-ø,éÇÙ!|"qŽà½áÐiÙhÿ m޲ dý¯ q/Åo(^Õ÷;$¾¯u,æ©^Ä{ÅŽòíhÉÛ(_¨\ þTÔÓóg±Þn±7µ’‹ÔÎ sõUôso;_ëRäÿÎ)ƒüþ𙓝kШ(¸;ÁÙ¿©íÉÕ`ÍòºF5¾^« ÿy—=:sßïòÞí#i<º¼ÉîÑ£;«÷ÙØ˜ÞûlÔ~ä}6+­òÎgG6Г`'ý^Æ£o·Hnï÷Àå•ÞgcïÊͲNÞy‚ƒóÁ¦ÃOÆ¡w,òÎo7jÿµûÆ»¯à€ÌØ}‚3P|µú-ÚBó>®Jê´Å…ˆ¿¬†Ý(yÏ@ŸçðGV泘ƒà_:· üùý¸„àƒ‚Ÿÿ‚ “/Øñ‚+Ðü¾¯ÿW{[q¼ÆáRÄw¤Êyó^漂‹ÔÆßÚuã_Ñ¿½›¾únûTð¯Ä'ý:Á½(SqZVŒCØ)wFȼ•8ÄóÄ×¼]°aeätqú}kÝžÒmpkrä¯È{­o L9-üskžÔŽ8–8Úræ‡)^Sqv¹_±×«\ã¹^ýj§5³Õ{/1Ê£Ïà”,ÝovöèÊù¼.ôœ¨3t›i|°iG‡Áó}¼ïJU=9md苜_Ý;)Öq>g‹w€çø 9~!º÷èþ½±v€G÷βäè…³±›~Ëî}o}Úä½›ž{×̪Æý 9æ]ÇŒX ~jÕó,šJ\EpDÄÌW}«ö“ûöòtZZô¡æc´ÞFðŽß6‡MNë×ÁÞ¼ŠßÇEäŸ_—-u|Á3ç¿ù)ñA«} ©_º°4<ýe™×à÷ ù³ r~ÒPâñRWâg®JðuGâx¹æþ«9ð®”y£ß×|›uoþÔKù}O¤Öi<=Øu+zKúÒøy*Å÷aή»xþ†ÄÁ4_¤õn´¼î‰ü:a¿‡äqÝ‚e©{9¤y­×t2]ncåóè*PyŒ'ïSq°O®¾öèß9œÈ£S§þjìó] Ó[Çób¿˜óºzçQùè~™ýç‹Ð€ÿ=ÝãÙMV¹iÐç‚hün'Ýá=ç–íÞ{Àú‰óûè]Çý²ê)~ò­©ðiÿßæ ú¢[£ðÉFÞ‹ôþØ~þû¢4÷›ó„÷í»áÔb¬Q5ñ*‰+˜Ó¬¿Sëê›™‡àÜŒŠ_"xŠ`Í3È¥VqÁÉHÃïsÔ`:ô}ú"r*sµOŽÓ=‹ÔÍÄE_dÊìÕ(þ×M{?Nâsš‡´jXįÄÖü°u~‡àÚNþ'ôo&ü¦Šw_Š£“¼†ösÐxŸQþ#ô*¸­T{HqJî­ È—Îɹ_‘÷”BâšÎïƒRÿ­v¤]h$r^ó`r¿E5—óI>FýUÓ*î.8o†GçVÓø¥÷Û{ïvžN]ØÑãztgO=çѽy¼‡ÇÆå ‡¼óÜ-æ}o?Kˆñí5ŽoU¹pòwV ïwc˜ŸLy ýÝÆuG8 |]Ÿà'üØó9ð“Ó—@žÏŽâýß¿zþ» ü.õ+3†ó¿]ÈÓ?æòþž^ðëœÛÕ÷üµ“‚­Ö ŠGMh¿‘çÇ¢õ˜ZGèn»îÑŸ=g¯wœS¯˜wŸvšIÞùŒ}[ñO>N…N÷õÞµÇʺ¼l0öÉLæy«Ü“ÓÄ¥[Ö•xí1î[ë€ÄïS|–ÖKúñ]Áe9¹¯bÇžˆÇù æÿùõ¢ïÚÿ#ùïd|U×»îöÓеø¡ZoáÇ¥VçxP’|£½iëï,z@ë–‡1G\ûÙh¾ÜÏ›HŸ'cCeìw‰#8 "ÀZÿîÜ"ïp:q¨ŒkBêã]ó3äAû=ÓFèï×ÈÕô…‰K "¯WÅÌ{äÚïÝÞ»;åØè¶SbŒEð3vç<¯BO§¶aÿ,õûÅÞ_‘‹ëüj᯦é_<Ë_¯æ}v¶@Þÿ–Ö£3·P*ü÷Ý3ñ#%ŽØþÜÓfÂãè…¥Íx¾×çÐ3c/À/?äÜä½g]äѽ¡|=4)úéúKâH­gBg—JBÏ}į(sÚÓ#n¯DÜçDz¬_ì~n¤ ÔÁ•|Íù~õêÀÂÎïõ«Ôz%­ÿpÏŸ“ºjêH]÷Èìðt¬þ¨ö¯Ñz_Å·ûyí×=\µ³-~–Øuš¿Vü®Û}M®Fq~¾HpˆZ—h÷kÈ~w…|žVó„woñ7¯-….[Þôè x!ti×Gn¯Ž]òM>>—¾‡_jGÅŸ¼?3ÿõÝr?Ðwñ‡_˜ù¿†DŽ _™Ù7á7G_ Ý|Ý~ÿ8øÛ|è%RUÎßï¾GßV¥Dë ‡äžüµ^„£Öóž'°îŒwÝ09Å÷ÝÖzôjVÈÃçaS8®ZRïÝú1.z©CïüZ—áĨ=Ó£4~õؤÜO¾Ä¡ŽvÁnšö }Õk q¦ki±ÛnMÀß.ó-vØÕQðEäÅü¯zžó`LøDìcÍ—Ì“Ô:ÉW™Ÿš{z̮ٔ9§I-”ý%®¤¸ˆîõˆ[<‘ùÙbi?£÷!ôÔ!üíWÿÈ^¿X+{Jè^ü^ëhOpuøOú®ùyV©§ 4Š…ž?ßï—%t¬ý×ìËëÐ[R?bÿz~O}q½þ¬Ô9¦57ùÖåã'ìùÑ_°¿kv°ÿ™öBÇGWB§ÖEìïi­ ×\Aè3âaìŒygÉGmÿ†ýÿ11ôÚé ç‹R…ã2§€­öâŸn²’Þ»µ‡¸¾}-.¿W¸‰>¨_¾œÀó§ÍýûÐxQ æçÞñÖˆfÐÇÛ öÅ¥ä<×¢ÜWý? »þ;ÛÙ²P?{#yÎ;2¸ó0â"1V£—v:ÈÁ *ŽÅ,³˜ymG3ÒWj÷pôÒŠèÉG6T¾»n…”D®»oÂcïwcÅü¨œí½û·Ë5æøñá‡Ï²°~ßO%¿c#úl|ƒ•áéÁüý&r;~Q/£õÐŽÃ|5µ‹µ”ÿOï¸ÀìNЇØÁ‹‰K}·gú?¡ÿ0ûßëwì Î }ŠÞÑzób{ü¤e]ð“fö">/úÊÇ™ .Èm>Fâšñkç%8\ÅÑ)_h\9°ô ד¸˜ÖÁi9kaåÝÐYkìøÇ1‰“ ^é„ß#.ù'{âVö5×uì„uå½ý6g?e?ÛÞõþgÅM‚›yï L„~"Çþ~Y }>íé÷UŽÛy”ßK…^ªWÄîÎ[¾hS yüý'ì–(Ó¹¯|w‘û;Jx~©ùñ$övÂäjlGŸ,‹\4³ß믓‹—›x±àE­W  çö[°#ÆôêX}{±Ïsïÿšï5ãœ".Tkúžðüižßž©ï=ðë¸dÝ>] Ék[ɇÁM[¡_G8_•9È¡cçé•›óDÍÿO|„Þ©y\‘Ä?­e¡{ÁE¹;792Vê;sB‡‚+žìÕ«û8>±CÂôìøBÿV㘿zë,ý¾ÌÉmÑW¦?|°Æ]|¹£~ñ3æ(›}è¹Û%¾_‹~•±žOÎv>wp¤¤ÄÓ“‡<¬öqÒœEþrŠu.ü:îû«·_ÈÑÃg½÷0¿{~íçȱ¤ËÐÇž†^Õ@ŸÏ¹Ï÷¯~ä¸-7<;Êp–ão‰ï}víQ|?{ù.+=úS|²[m*qì¯òáW~}Á“ÓÖÝÒëy®)ø·sxûXÛ;gûmâ5-*×|pû‰[‘ûO}æ4ªäé-çä0òni¢£Ç~ÌM¨ýâ:byß»žB§Í’#—%á|Y…[ûY*NXó¾*O|И…àŒë'æ¸U7‰/KM¿Í„wÈÁU¹½™ó¬ø4#ØAðÉ9o‰ÐYê›Ä!n!:ó9~éÄhì÷åkÈ™WQÐ˧ $î&"ÎÒ¬«·þÁ ‹±3$~âVü:Š» »{Ú+ü¨ó)‘³7®…† ŸÕ÷> `<ÞGž´×vïÿªo½ã´ŽÉüz6ù¹.qš9`\¯æo?šêñW0ùîblüÕÓðã—ñžWí)£V-ž¯vì´ ƒ±_Ц!ÏðslŽŸ7{Kâ¯ß‹ã§®ê =GŒ„œOz¾4—ç\Ò ý:ú4t½¥4þÒÛLü/Ûk^­ØCæÏòèAp—Ðüq¼q·çÑ_ß¾ñþgŸÌï­{ nüþÉ¿¢n…þ›Cð¯Ôk›Ño@oRO¥}S×¢uߊ;Ôz6{áþ©ÿ„þÍ‘“<ú×8£}pvŠâ¿¥ÿЇV:–¾þŠOóë꤯°Yl=ö[ßôÃy•„|W‘Òð™â{½¤Nw|5èoÿ¬ošíØñ‘fàgÆ‚Þ-6†uÞ>xŤžÈ‰óê÷Á.©|û"Qeά±Ù‡Rѽ÷àÕ(Þ>=ïyrÙ°Oyûcuˆç×Êò5òiu n k7vÎð”ÄOW&(}ެg»‰?F½œ½–ã‹\ñèÌ.óŽû¨ù{¹§÷} DTâ0Mºa?uΆ}1w¾ßYiÏ›­úp×øff;èOô‹ñp(òµLËPÿÄŒ\˜ò#öXÕØØ'_´ÚÌþ5 ®:q4×­¼›óÜZˆþ;çø*|˜?È~$˜Ás¶<Âú;Êól›Ë>4ȇËz›û8Ÿ}-/Ïqu-úAê9µÏ¢ÆSÝ+°¤/’õd/q’ªËÁÁÌOÈ~.ìワï.{s­Ì­$îÓ ´žJò³š÷µ¦?&~/õR÷EÈoŽÊDZI?íË¢u}Ú—Ù ü…ÿ¸ñþü½°N7¾~>?Ùt5ûv¡š·þƪÍÈM{ú>Køä$âñazý]òëÝe7öôó]ìÛŸïyw;±/«SbGE™ƒ}”oIÈ»ý,vÌÀöÄ!¿Ü ½û~“Èâ|v ޝ¾‰xˉƒœˆ]wûjî{ò½mJzç³7åA/ekÃïßçðÎë4:ïÑ¡{4üµþÁOÛáó”ýûð}J\g@ø¾ð2ž?ÙpÖñÆ;èíC€ï%¯m”Œ_EyÆõž÷Ç/z—?ÈjÌ÷ý Á‡2£§šEšÏýŒßTØë=G ôäŒØÿÊR‰½õ4›n'¿wö#ÏI¿¢dwï6„|nÝÍÐwî«àjJM&N,¸U§ÕaìíÕìÉ?ŠÿØ“²öñž·Ò ©SÇæ«éÅ+­Tx×eMñG¥.Öú°?8Ç=ì íŸ&} ÜÌ«ÐWÚ?æ#ì:©gV|Vðtì‡û'‡íz?øPý{èú=MZôò“eìgÁzØ ö(ì¢|ߢ/¾ˆ]t`9t$Μš‡üîÒIØOçšï¿‰}”¼–‘>>vzªøìëÑ;Þ>uÆ^øµþÛvüäàÇ[\ï›þØŽó¹áEøëÍ{ôÌé]à¥Ûþ}Ÿì Ýv[Èu—!Ÿù.~Á°Á\ã-èJðavüœyët!;Ç]»BfsJîKô=÷Oè;c>_˜Çs?j‹?þåPîoÆ ìö&6qƒ‡=¹¿|å¹NBƒõ/“½²(/öWÆßæJüš i6†Þ@ÆYZ?H|Çmˆ>íYÿIÞÏúvv½Ô%i½ªÖýh]æ]­«?ÿü3"~¿àº´/ßß}¹†yòߟûóþ~v´Íôƒ;à„ô|5þx‘ö[Ðø¼Ñévؽ àõRçyOœ‘†øæˆlÈÁâÐãÏO#.ÏödÃîÉu ûuuü³ñc‰C©ÉK½;¸3<ýÙÉ» ?RÔ„NŽo0®&%_¼âvw…߯S ¡¯²W'_Qüò4qDçT{λ,ÈqÍŠâH^Ê\¹~xtÜft+ùkwK3äúÏÐyþÀ^º3…ëÕ³±Ã£Œ†/f]²Dþ&ê!¸Š®¬ãðèÑ8ƒ‘±¶‚ËÛ¾Ù–ëˆë^j>CúÙZi“{tn½Š}Ò{ö}©ÚÈ‘×KÑ£‚7ËÏÂÿÿñKðë×cßK¿3­/µîî@îÆIOü]ê.užöGTüýß}­]Þœ/¿_—ô TÜ µñ™š{˜÷µü}‚N¯„Î6 éó©ýSý¾JVWgèûPð Wø½Ù·Ä9f àºÓ§y¼‰}‰Q¹>pzZ ðKawu¾Ân¶5ÜÏÀVðq¡_9_ú‹} 9¾¾$vZïa?JN|'î>èkó_ÄEŸö&þ_y:vÅã}èƒ}9ŽŽ¼7Ù=&Ì?´¿€4}ô¦øŠ§åᣩ‰¡Ç˱k–oãýÆ×èáuå¡ç?óÞ³ôwq…Â9ðcºî$þ¹,~Ó°ûè“-X÷9Ä1ŒØinélÈÅí]¹>ߟj…G|Sú )nZû(Øgvâ$ø üçÿÉ kß¿û ó'zxד~ýæýöœ§ÛW‹eÀ3H_x~‰öaÒþ˜Ò7)pçÂпÔïøó¼>5ǯ/ѹzêtXuqñn5ÐÓõ`¿¬? K¼-ã q½â•±³of@nîIÞSä¼]ý*tñeø%SbøAó»Q'`ÇW(ú{zããyâ’÷r2›Ø3m.sÅs¾‹Ø¿´‡câ/h~ÖØ¹=!õvGÉh\¦}çß½ãW';í—ì+ïÝ8õõ1ïó­Ûèç‰G5èO\¬} òÃ’?ÓøNàú^èý#ž»oaø«K{ôß­²ØãùJïé™=S¦=vIŽÌ+…?ˆ_iž``Bè2ãSp7/"ßßö&>]à-ç}Û•ë5|Ä}ü~Žu¸1foøý£3Ž‹¶Ö[õóµ¨â´^GqJfÆêè©ovÖÌ„.{½w¬ýßçúw_:÷Nû|ê|7»BGp=Ò·@ëìGñáƒF籓¦_Ÿ4i(ùé_Nñ.ý¿ü|·ÔÁ+~Öí?™¸Â©Ðoþ­ÐÅÁ«ÐïÎ<Ä¿8I~&ÕTè°ýCÖmÕOn#ytï>•|SÁ/°›vô„þ¿ñSQìÿQ‰¯(>¬âï× ÃLU=s2û_ì-©o±ÓGÙž?¬(YùŸÔ‡iü;{:ÇgéEÜpYüÝ£EÀg´ªþ‡wÝò•þ€Žîxü`·®À{†xW„x¹óËùyè^ý¹|\{(÷‘ó[pcb§çè†>yrŸøTÄfÐú£ä7r #®Ó½ñ·êðC—}F~ ZNè|ß7ä;÷¯vˆÙ6üñÍŽïÜÒã+çökü€âo‰L>>á›ø×/ó’Ç,Ù‘ø“Süë…ä¹¥ÿ¹âmœa¹®âO#Œ ©S|‘5*Ú?Êÿê|Ü0?ˆþ 9K1ÏTð<ÆðêЭè­? ³kÁ;H¿r+P<„ö›Õù12×PûƒX½{a/iþ:uöAâ{æWØÏ+ÇÈ·^º=7Ïƪ^¹{ÅãÞñ›~·?1ö|ËרK9*`¯ìí.‚|^ú{ÎÇjÛ¿¯R&äô’‚Ðmòœ>Î>a/ôAJð÷^­ø^p=z~7ûè@ê"‚Íßû0{Ð÷÷× øLâƒFM“óÿt‚z„›/ï¨Óç/R9~qvÊ•…؃ÈS*†~+I|Æ:T,$ìöžˆ=Õö"öSÖ7Øyó¿!þ}y’–›‘û’ßÓ¼…óWè8ÿ0ò%ígãÇ&œƒõø*×™ãÏE&Î#ùA³û'ò[ó –àHò-&òëvìy™K«}Ìü>XÒg[û$XWKàWkZíÎØß‚«ÿ»/Ë~èù¿Z¨ýÈ5ß«u=Ú÷Íï˶ üТ÷!}Ñ´ÞBëßµ¯¸S¥y£?·“§“zeª}^œmsÀEEøz“¬%v{ 9rî¬ ýÙŸ|Ÿ½Pµt&ñ£àØW·bÆÙЧï³N²ïR?fOxòÇêûŒ¸f–m«ÂÓqp28:çEoÿÌ•ù\µ0vºôÑÑù•v›RÈé7ѱϤ@ñ7ÆýIØ/MS לÃ~_ ŽÕþ¶-ú±},ôTÉ:ÐoÕýð•äM”^žÀþN4”óˆf*IÞéBoüØ9S˜ÃUlñϬé(vÍž[òÖÕœ!õkV©×9Û—û|7¨úyÖ_â§aö<çÏ{„}ÿs•§ßÜ&)=¼¢q7;v²öK•þ@þ•_K‘'•xa`Q ôˆö­¼¿ ñà%áùäï¾Ì¥Ñy×»Ÿëf|ÞLæª(ÔïÛ.xfO¥xfíÏ®ótnSoø¹ç£¥¿Ý*‰óÒ/%L’9w:çSý+³0vѰ1~ç¸×Ä[~ý9:y¼÷}p]Fè«g7ä¨äÿƒõ*âWÞ$i¼Îþ%XIž2qzøWû KPç5šõlú"EýÄz$˜_ö*¿ÍH]E8 Ž[ìGíëé´ûŽ<ÚᮡõZ{› §<ÁˆÝºò†8y¶ñè“Ñw…§'7î&ü•ªé‰“Jßt½?³ýWü?Ó þw‘ºÎÀÐ øãWSG°ì ñ矊¢¾¬âÙGÆ• ð¿ä¿ƒ¾ o—#1|Z$2|P‰ø­›ªþ’õŽuxìÀw»—r¿‘ëã??_}6œîÉìkž×ôù–y¨æÓ¦‹…_‰ &°ègüÞ$›¡ÁÓ˜òg’y:gåï¾Ìaƒ-ïydþŸÊcñ>©K80_è¼›ÎýèÔœþªè'©'Õ¾ÞšÇóçÆiÿ1±¯´_w˜ßŠ? øwç]äðæŠØÛ¿GÞofF; }ï†_43ïb‡Û%ïc'UMü¦`.äPƒ_‹…Û '¥¿Œ{þÞÒð|­} ­© Ùǹňï$þDߨªåÀATÀz7]Š^”~ÿFóŸÈëiÞvØIèPâ²öpavvTÏŽè§)ñOþº­$ßÜ8{°Ý/ð{¢ÊøIs¯ ×G\Æ.é@\2'qaÉÚ¹{@¯»Mâ¨ÏGó.8Õ‹~·¸ÏìىϦ˜n£sUìš-Oxþä÷Øðs¬¬o‹‹èƒ«à³BŸà»òñГçâ—ìtðo"Oäþ¤ªÑî9òWúêëJ퇣8ã`ÑR«BèIúf já¿K½îß}™³Gzø7íû`ŽNü~÷Lpp/ð¹CCðp‡æQ®sϤ>IñÓ~ŸhÉO›WÞ ¥˜?OOúÛ*OØ]€¸ô¡‚ÄyÔ?­—ƒ}íׯã÷pDð]K¨Çµ†[ÄK%¾çü{cÞpâ–KÿÀíàðtî{¢úKp†êÿÛeÎ@ïOF`§ [C¼Iê¨Ìv±‰ÃHÿ'ÍwkßìàèrÔ!žÝ}Ú„},ôé0ñ¾ö©ñ3º¶·ðl÷Ý+-¿kÜéÕHüšq½¸[z¬'?݃‘Ÿâ7„Ù?ÄW$O õVû¨Èå.Ñ8ß•ÔØ“3Âw‰¨ËÓwø#ÇßðœÃc°n^äx£YØ£ærý_qß9_¢7Önüuè>ÿ0è{ÊfÖsIO?› ³ç*ÖEòiôOs³îGp??xU™Çä÷3’<¬æŸ´>Pã£Ágw¡ÿ‘½ÿú|ßÃ?›Í’ƒ’~åÎã6ì«Ì»Ð¾Úo)ÐðvØÔ†ØuÒÇ_ûš»šcW.Ûé_šç‘>ÄNËeàÊJgbÆ ¿õyâ?ÅÄ7Ïךּ7ü¾>Íbb=G\=íÜÁþ÷n‰¾•yZ¯¬}1ðǵŸö®œï«vž¼²ß%„~¾…œÍkÑBëÓc?b½OUENIœÎ§² ¦FOµ–:à^gÑ'Åû‘•~~Áy3ÈcŠý©ý–íôϨGœ¿ôq]ôB¥ï°›{6ÀÞn^ž8¨àŠ÷ xþ§uî>qþ—•xŽˆ‹.\A^÷«*Ðù_¥9ïáÒ<ÿœ¥ØOåÓ‘7K<½ù‰>^ÆÄƒÔ÷¡þÅêÖƒhnýLø!#€7Ü©3{ý¥O½öYs֯הí<}_Žæ½ÚBäú¤vÈûiãcR?îö"õUYxß´{ûB$ìæx“‘g«÷!G$Ïâîº?¦vÆÒ÷Þ>èœdcöZâÚ—Lû GûA˜½ÇxòÕ.<½]v|ùs}ò´R¿£}i­ÚÑÐÓ‘fhœž<Ø»’ÄeŽA?=¸#8]úT(N6Lp_Zß/ýèœH]ˆ#;Fütu1ò×7Úûh™ŠG¿„–¾àæÌÑÓþýw‰@üSæ èœ]í/bÏØM¼çÌØU2ç[û›ÚK "çe> ÎÇ ó[ð‡“öÖÛn{ yQ`(r¨äkÖMú*¸%mìϼó¡÷VÑû3~‚îžd†KYø[ÎNìéo°O¦o€Œ½Äƒª¥ÃÏÜõ|rçKâ«2ÇÒW|ªÎÇù³Fé÷äEK¶&/»àt¼´ø<Ác¹ö(äA„ è_ã’£ô‰|qp\âµÝŽ‚;j“þlÖ|Å£¬àÜ‚w[#ÿ„=”½¹Ä5©? .ªíÉóícïþ¬)?c_lý¹¿¾>öàÊOØù—#Ç_ÆçüµJb÷XÓ¹!ß!ÿÿ(ȾDÉ€œIÐýkïB_üP}¶9ú÷a>ü‡îŸBúk8©`G]íRØW=8ä õ 3/bϽ­…Ÿ'ù!k\CìÐ}ßIœœ¹:o:¸ûq)©ãwo5ÂÒùbéŽý#ú·'emçÿá4þ'}&Œ¥?¢tþ¸O絿ù¨ódîn6îGâ?Öo<þ6†>@n­,ÌúƺŸùUpžŒÔÑ:‘ï`ç i ýŒ(€½ú¡ô³óþþð|ଢ¿Ž}9+ÇO‚>Øù#|$õìÖÛ \Op7®Ó|˪“èÑéå¥òlúÛüþý ¤?«ßÏtéïøÏ}zb¯fþ¹¥}êŽÕüô]/%|m3ò²Ãržsô:ôH¢!¬OçÈ«'ñÛG|3÷g»yž¿a'Š=¸YŽ|\Ь¼‹]hÜý¥.ƒÜNýz•¸“9$Öaá{üåÉ©%/ˆÜ1#GÞ|9¿EêÓ¬è_²~ýÁ§Wá‡íÚD|"^iìþ…Ø—]Ùñ×§ŸÅŸ`?ÔŸ<·Öêü­WÖy?ÁˆO¨»J|¼ô¡Óø¨ß'=Æ¡&ÿ÷ôðÿÚ×Ñx¶˜ý—¹fÁoˆ3½, ]K}ºâ°íß’¾wV„¥ô›ºúþ8ÝüpÜÈä™Ö¾DÌl‚9¼ô¾q?ïQÓóý»•Ðwz—ã«D`¿— îqimìÈl1ñ/ÇB¿l,Ì~nÂÄ>ÚŸÙÐàEƒ%jp^‰gÚÈyoçĘ”:_ä¢c®$nèÄýE<„;Uç=;+gQÏ™frêì(䡨CF¾—Ðÿ–H¼[ë¡ËWÍÁ‡¾¹§bÕ|òòúç¢Iþ6î&Î_´yaÁšSa×W\Ñ:¸ov¡ŠECß䊿\<èS»GpEÚŸ%ð"ú%ôî\‚?!ö§shþàœ1¹Ð#*@÷[nð>»¿7ÿ ýú^üñíß/”¹‡šWÕ9Rþ€okÐonØküÉSCú®}ªþî+ÌNÁÿ•¹•êÿê<>‹aD¾SðIÚ/ÕŒ´{Væiùùí[?°ùu7 ô{öþlBì~'BGè@ë#ÒX‚#Ê{ ô–޾U%°£¥ ;uöA®Å‚ßü ::<zûy³äž§w½sèó3þ,úbb²;ÉÎFÿAíCet§ˆÓs#voódÂó¡½nüòyLpÜc/àïÍïO=È‚ä-¦uƒï¢¿">â:Ø!Ï‘óflòÇÚßÍØ»}±n÷³5Î6á/ì߯?ƒ3¯žƒxýa“|˜æçF®ï‹XÞ¹uÂÚðû¦ÈK®¬Çù,ðC‚ŒÔ±ÜÌŠŸ:%)뻺5û0•>¦Áxuà—¡±×>ü t´ÔÓ–þˆß¿#5õ×fºï‘_ÒÿÆïû/øg•ûÚÿߦNÊMŸåçIKÞÄ>9¸{ ýNü:í/;Jq™ÆñÂÄ…wÆ_Ø6º\Y½+õn­ ›e·Û¾“¼NðXjâ©Eï¯Å×a·ºß]ÎyÆ%Æþ© žÞŽ8þˆ´„ã[ÙðùÑ&è¹îû°¿FFôò?Á›Oz߯Ÿîáß‹æyïöŠ®Iëi «™pw28ÐR¯ Ç5ðcAÎ?èÅujƾ‘úLçS øaãw¬ïÇJÐpùã]Á?Š/{µ {"Û`úpU¿JþUúY…]û+q%ì±&IÀ÷×^DüªÃyòqï¾EŽÄ¹…<85‘z„d‡;WvÛ ú+øxúÝøù"Ƀi¿iÍo©l ?²JþÇýWJôú?b¯øÅ»é÷£õÆÁ#s±ß5ž{:8?$q?£TuöCú;jßoá~“•y}¾÷ÖYó/V2â5öò³Áió±k×ìlKW- }µm‚²ÿt^,üÑç9q qôOÌr±3zîes}Æ~Ÿ­<üø½«}ê¦c?‡OçrwþØAòÈFY¡ß†¹Ðïc£Ÿ.ÒÏß÷Yˆ^±«>Ü#ôÞŸIúÿT#¯°{&xÏߊõ>7ùË{wg¶ƒþ»•€Ïf,9± rµÂøëƈ?Ð{IêÔí}+XŸ«.t.¸kõ_à<ò¥á|M>zÿw;#-s‹t.£êyí?èÄí†Þ?¶‚8¨ôÕ5k&×Ó±8v_ÃÎÄW%æ–Þ@ÁÉíÄEKþÞ¾wöé×[h*~‰ÌQÕ¹:OÓŸ³)äë¥>÷Ömä~ž‚ø««6“×É÷Ù?¿£ó5ò®#sµo’?·[æEÆ6"¾$8¸àíø:Ÿ^æëØu>±~:÷VúÑÚmþäøæg¼õdX ø€2ÔSˆ½¦¿Ð’ç7þœ„üõÏðÍq½qø©›s7ò¥ÏNâ-™²ã¿Z uä°W¢õ€.¯¶n¿(kýë»Îøƒ9â"¿K,亣¾Áo)Iÿf#{dèYð©êg›/ËÂo’oõëÄßÜ@ÿ÷·ç¤„?6Û]Ã'…¥o•ÄEƒ³rBÙ_!OsfG$õhV>ðåȬCÒjÜÿÝMø‚´Ÿ„ï3¶Æ>Z~9|êô™*ò=Y&ö¥Ôìý$?‡ØAaöú þXäEÚmðCÝ›!õ\Σ_‘cÖ"wŠNBJJý:íéf/Mž@ëW®YÄsϯ}A4?¯sÆÃìß¹áéßY´ º8š yªó¿bfä÷ÔÝ‘ËugÉœLê!}¼PæUÿÈþ7g,éGû¾Ì ½ Ní*×fÿA×uOâ×Ë‚¿+óA•/uޤµ³5ui»r¼àB—£}Œ‚UŠ ¿×E„^&×CÞk=á²òø³ÒOØò9.òÆž›:øšU‡8uàsú»Z¿ÞC7ý@œCæJæŸ Ž£(öÁø!Ö½¢\¿ÙKöÀpì5èã:Ðä<¦>,)öÆ­!|–üU;÷ç®Á-yz‰<†Ï‹7aß>"_ëýE³zpÉ»Wá÷µyú¡1zeßwÐsÊ/à÷Äè'iuäìÖy腳Ɏi‹¼_•.$íVÚÀ}ŸJ]JÖ ^ZûûZk[¸·a›Ð |Øo v}ܯôcкeGzƒï¥Ïpà~-ôrŠžà¡ßè;Zæ œƒîz­‚{gýûFÁÞ‘>èŠ× ÎHóÏü_}Ií磸}£uðœ ús}©GÓ>(:Óü~-öšôƒ0ò¼Ç$uÂû@ÿ:G^æ9O?Ãϸ9”<ˆôüÚ ;¿8~ç_;ÿÀ`Ÿt‹®!fùÜ¢ö'33œDži_ÎÈï$ö'y£‰û¤rsvpé& öFÀ¯(ºþ¸¸ºŸßž}ØWŸï#CŽ'i~x2‚~>·×}.—¸ã@_ÕJ@§oè×nŸ /Oè©6‡8Oés·ÑŮɜ‰÷ØÇã à×lyÂó/‰Kž"v›…úöÀ±­¬SÚªèÓˆØÚ'ZqpÊoNå°¥ÿœöCRü™¬*z@ô«Ó2ñ§”-$.C¤@µQà‚¾Ìˆ½šý*ú*Dâ'Ò?VçðjþÔ\ó!ïÙ¢}í‡àpNæ‡dþ_˜=3æßп‘~qŸÄõ¸ÁýûsêªNÃ’¹*f£ôÈw(s¸­]›àW™ÓHù÷›:%ø³áGÐ2WÖ.Ý”¸‘ô“6ª¹ÔeGù»ãøQðcת³ŸµÆWÏ7¾ü°½ÊÎ+—$®$ucWwßÖÂ_ÿÚxHŸ«p<öy1}lŒ*É»ÆÙý}yÜïÙgÐûá»äß¿›¾cX^pXŠ+2Ñ/¡`NüêEô) ¤”~]K:b/UŸOÝræüäã ¶À>]¾ÿëwücéOî\° —ßšCÇiAïûû‚K-]•ºÉ×÷±ã¤ÿ–Óu|õ!*rYúükݧuwø-{ú÷EcâimâõÝO}éÿv…¸É“2ø/F\üÔM1‰KÞØÊuCîOzKÜ]稾ïGì©^ø©Ccâתâå¬&#ÀùK=¤w v`Ûõðï¼ÇÐý„4ðKÂçôylØ‚õÚT—çyý{»;ø gG,þ?ùÌ!¾ K-ós™ƒ)x7­ï׺M³i\ì0©Ï×¾ë*?´ÿ‰Æ‹rÁ¿g²—ŸÇ,u~ý¡Ì³TÜ·X†ùÜö¾Щ̙Ó?ØM_è m†þú×¹{VóÇž|¶+÷§žCæT8£&b· >Ý9‰û,úŽú)ÑSŠ{6ÌM}‹ÌÕS|…æíŒ7Ñ¢ïìêW9ëèÅcW; ]½š…|ù»'7uQÆõøeÁ Ðç7Ø÷Ó¡›IåÀyYYÁÏé|é'䞣OŠæÁŒÝÌe´ÒÒGÖú˜¹œi5ô%úÅŠ´Jâ?aHß)Õ'ÖRG"¸ŠÀsè5pœ9ØÁ{ñ›ºþ‚Ý5©'~ÈñgÒ—„~¡f’âè!í#ž¾ vç¾Ìr+à{é“b$°.üó"3÷&xµy.Áï8½K¢OµîKú€™¹ 7ü´¹ï4ô ü¶7ëõÇ äæÏ8íVp?Roç4Û†¨µÍ‘}F¶þ=)ò]çÍi^Uû:%cP_§þôÇ×~çŠK ÓÏäkµët•eÿû}?]Ån‘z°`‰cä»ò½$žyr ñWéïfÇbÿ ~CóÙæîÏ9ŸÌ³ðëC̃ô»M¿܉à(•þ9çawå­Ž¿!uUa~6yÿVÄíÜÝéògFè\û T[†=Љ|SðcLgh?MŽÝTåüÒ²£‰ Å8Dÿš³Ïà'‘[NÙãø­ñ_¦ÁwYf`ŸäY]ýøòí}Ju.Só vTç®àm&Ÿ ™Lp:’þmÚ7Ê}ryÜð8r'©7ÏÊͼ ú•~-ÆÀRÐïÚjÈe™×e&ÏŸÈœ$Å­oD.o‡¾lt ;DæWÇgÃ§× `ï.‡>š sGt Ÿ&þvàÒøøÀ`â®ÃÁw(~NóÕî¦NäË´¯¾à÷un£³>öäsÃö/$ÿfÿ\º’~o:Ã}öˆ¼œÌÓ3¶o…þ‡¿ôoèßí;~vøëO~Žžž–yc2Tûýkÿ[Þ¢ðƒúFž6ð‘ÖµŸùŽ:÷Íçà Å3É|€0û|aøëj>Ãçÿ=îâðë£ó‚¯;"‚îO$F$ï&rßhu?¤OÎ7µJÄ®–ŠxçòGÐÁVê5vâ·–ù2ÆzHžÀ>²˜ëË<˜°ç†¾Æà—šýâ!G¥.Ãï¿3^øJô—öŸÓ>þö³aÈ]ém”ê†þY”Šç©dâ×öø’ë ÞÍÝü 9\7ï[kÏÙp›ëÅ$us¿wªÅüaÅ:·ÛÀŸãgâïJ?-kgkâž??Ç¿J¶±´(q±q‰Á'ŒMhV|òƒJzòXç¥kŸî^öÒÐo¼Z'…RàÒðÇû9üïIuìéKî–Ü ]HŸ.k{ýeÿ˜+rÞ³ _éo¨sŒçkõ}†ü¼?Çqv”YBŸìóoóᤫñŸ·=ÆxXœ]Ú¯ñ3ÊÄŽ².×íñ;@æ!ÛñÇr‚³6œÁ~ªU”÷»äÌ:é‘›óc_Ëüt£@lè%_oèôpyúê,}ÒgÇþåࢷnžþ¡î‹!8<óý¤íᥑ¿-¦Qµíøª÷bð qïãw >ÂÉv9;è8H©[Ô>Кg äï©þŒ_7Ÿ¤~àB”O‚•ö@‡÷fò>ä{äò·ßã§®ú û¬ÙXâ/ÍgP/µê&ô,8*sz¢¼I`ò1ød^&ôMõðÑæÖÜwÅÜüž¥êzá_ääŠhÐÁ³&зÌ'ôãé‚# ¤KF¼Qæxj]¶¹>xŒ>ˆ?jÎQ/°—Ó ™&W°ÿ߯‡ÞFEëùoèßÍ“…¾‰‡€Û\þˆ¼”Ô%k?.ûÈ6ž£É>‰û—ºà“ÐoEØwÓÏ \ð‹ø¹:—*—ØSÝfã_ä¼ ŸOÙ¥Þ ì?©köù_æ»Áyè!™{m\F\ Q?pG‰ÏcTÉ ?ìù“ƈ³äúÏÇH[’ú™sLEîÏz†\M¾y±:³soxz±ëý…_íL…>L@.p±ªž Ñ+æ¸Nެ òøàä­äSÄã÷í8î—[[ÂÓ«“ññƨwðãœ'¨Ï²ž¬· øÈ@Û‰Ø2§Ä8vŒ:ã%À¯½ø•óöÌŽž{q¢<÷É·µ†ƒ÷a¿•/„QÊ‚þÆGÂ_yì:*õ¥ï?½^ºöÄýþ0Ò¿b}ÅŽtsÕÄÞÌTõ혇u|”Ž<¥}Šü«ôñsû𻚚ȣŸŠ"¿»æ†_c‰áϯxf­ïW¼æ­¬IÁ]K@­6®ïþº…/¤î˶ª`gä^‹ýP¿#÷%õå*§í¹šýú·"/ë§I òÍÚ#漏Åì?XúCGÞšïñw¥>Lûb…ùÓÄ£Ô?¿Û~¾ŠþœD³y¾Ãñ;v|Áy$Oæ÷w,k0÷à¹A½‡Ä4ÿ`mܾ‰ü畹ö—]Ðk)W ?¤™º:vAù,ÐoŒ®àîÖD/<¬¿<¹,ïÒïÊù’z`ãN¼:{ø ôÀðsV %.X»|RTâJ¿ƒw 4ìŒ]=?!v’Ή~8Š~M=æã¬;ˆ½´yy¸’ÒŸyõH¯Ýš4ÄûÈ—œ~¼g¢_–O$ÞùËè»õÆ—ïÐ+Rϯý-´¿Žý,!ygé¯iÍþ‘ü©ô9¶.•Äî½ìÏŸz™ZæŠÇ”zÌ0ÿ™xJÊèo™Çi—èK¡c]ìËk­±Ãu¾´ô ÓS¬ßȳu‰[ömDü%ÊhôÀ‹¨È5™S§uS>žYæciý¬ö=3çÜÇ/|r…ï×¾‡/dþ©™ÍYþÚ—Ïï;{àEñUfúSÜnüÉ0úÂ/¨Ç-÷È;ì§Þüp·µÇ3-¼ÏNÿÒø‚»0‡,$Γ}¾Ì½»Ãgéàçý«M…ÿ¥þNçèÜÙ0ùJ~Túêøö¤¬ƒifļ|àûtôŒ^‡ulý<å*ï%§ðÿ:¿bWK^Þé•þœA°ÐèLú\:‡-ÏVœåØÿÒßEóQÚÏMç9×%"¿™÷úHûì<½Œÿúvt!øg#ZRö§Úü=ó ÷!¸Ÿ@Îlð©ø­ÿöe^¿ìÉG­Pÿ]¯§}ûDÑg§^×j66„õs`NäRì <§ö‡[u{Tp«>ÎtLêк·výY§šMñÿ›nÇÞ’þN¦Ãø½’OÖþ[núÑ‹;r¡oû§OQšÄ_u^ýóhìÇÏ[µÏ}ž–÷âJÖœÌo½…ßÿO¿=Õ3î¼ÏÀç$¼½Mö›xg¿ÁÔ v=¶,<kßíîny‚=rx;ô(òÝÇ‹ËqÚ_ÈÌV9œÿ’âf‘’_WÿÌ=òû'uâÎø K…‰;W¯ˆ˜ºwIx>1†c$_£}ºÌV™¡wé7â´*ÆõEîÙù{!g–Œ@=Y3+dŸTÎHÿLsš?zÃ>Hÿg~üHÉï*MçÜi_h»ek솒bõË;ç?¢™O§óVµÿƒöU ŒªÊódkˆß*s^4¡õŽfÎíØÝ5/¿¯ÏÒ¹‘ÚçÅýeë"ñU­ÿ÷íÊ”- ‘ÏZ§é÷{IR¹µþzeoFè&yFŽ“:­ov{uE?${BýPŒ–È©ë/¹?‰ß*n[ç¨~5^%AîÈœ£Ó9¯¾ÍIкº7ú‘¾5:Íø3 ø&©Õ¾NšÿT~W\ˆÆ;ìr‘·bOk\ÜÇM _:Ú±OjGöI-}<æÏ ¿oö_iCä¾Óî;äç²=³ÃæW/ ¿¾¥ÍcçKß[Vžû—|½Q¿ŽÚø×2ÿ͘›]paÅø]ûüdÀsÇ­ß|ßù&óáüûÔ>ab/XYSǵsq¾´9Nì–û ~û=üþã8øêMvöïóîøŠ[Öy§2ûÏGÅŒŠß`dï?>-À:K_dÅ=ØGJÒgzxëÙáé<Ø6#Ï_¢-ŸSGfß¼ƒ>ÒÜ…OeN '/8 ±ó5Ï⤻ÍÑ+:OÍLY:‘¼³ß·¨y2ìÇ"‘¹ïCçØwÓ‰¾×~·ªë{XÁeiý†ê ¥G¸Å³ÂO…ËÀ—›¡·¤6¸ü›Å!ô½g€à ÅŸ—~ÙFñ·Èƒ,/¸NÆ,¼KˆÖ~¾‹ûpþg—XOÉçVžBŽxˆ])q8í££ö“ò½æ´NVçýèïæÊ_‘ãnq¿ŸðýécbÄ‹A|îÂpô͸?xoü”õ•¼‘úåþ1yn­71XÈ}HÿI·A†ÿ ýú<ÿÍ;ï–Ø-¹‡@—"o²M £3Yçf]±‹ö·@^]ÈF¿ˆÊ Y'‰ÓëÜ2­/³ÊŽÆ^}¥qj¿ºÄùýzˆ)kÅ`¾Ÿö› îþý( =~É÷K^ÏÄ?-påòªN9äv¾ÞÈ·i¯ø,}¯­æ]ào©‡õç‹¿8…^–ø˜æ ý>1Ò#ßÎàz ÇÌ ÿ\ºŽVƒØØY2OÊ®r ú¹ªv•öÖ~—~Ÿdé?ÈŸõš²þŸ¶:’y‰F¡Fê7…ô'³§®±ÃïÓëYzt_ý/Ž—¾ê¹éKÀGÒïN÷Õž·} TD/}1ãE¯úy.‰‡º¿dáü2ÇBã©Z7压Ì} .^õˆoïÝüž¸Ç¯g¡»%{¥¾öÅdÿwSŽöþŸ$)û&óÚÕþöûÍÄÙ?'DÝÂùµî~gqøJìÜ0ý }IÜÝ,P¾‘<“óø5ô%u‡ÚŸáß¾Ô^0r%$ÿ|êt*ñ0Û]}µ?(NZãË哽4;CòÕûð+Äß¾Ú…½ãOÖQç̬Î1l ÇۧпcB*'åzFÉ×èÑÚWÝ÷ $ß®ñ ͧùü¨ón$ŸaUë‹^;ö=ÇÍILþfµ Ýß)Ãç…Ó!øVêŽÔÞÓ¹î—u)ž€çû,³ê#èUôfpÉ—œOæ¹9i̾O €y=‚ç”x»Ö©?ª|¦}¸ÜáqYŸ^™à#ñ÷ír9NúMùþÚé|ðA©Èø±içòÜù«ÒçXûòëzÄïº(ä/Êñ½ÈóÙG@ç=ŽÀ'·G·.˜“|Ùçä³—9øçNƬÇüwð©öû}ãNï-ýãfÿ£ºßÿû2ûÄFþ‹}£ëëË™ë(½„ë&?8'<=ús#ÅTy¡v†»Ç‰ÝæÏ‰‘yÁ¿^ÍÏ×N³oç‡çÝwO¨>Ð>,Zc Ÿ¥i‘ß‚7´‹¶çºo‡ŸJš™û–ºÿÀ¤·Ø­ÅŽsŸžÂÏï"Ä~Ð8–™û+è³N=ö[ì§bmŽ?Îüý&zfOQÎ{¼v—äë´¿«Îq³| ýÔß ¼\ˆ¼ßú–8šÓ¨’ÌïiÍñË› 7ëÙÐ¥ÌE7Í•+Âó¹úEØ{R‡hm©Ày¥Ž)x$¹äÛ›³Îw"Ï ÏçÁX¿pý¶¡ß(ü`Éci?Yõ{Õ¿r d]#ëH¼¬Bì%és¨}ƒó†³îçîsÿ÷OÀ½jÿåU÷¢¯0ÿu¤wñÜÃØ¿Rѱk¥†êQ{]ú“¹c~^wÒºùáù©ºqx¾Òø†y¥-ëŸàÛy!tº-‚ìù±À•ïá³gùÑÓ–`Už"¯¬KYß5‘?ßæ<2—Ø\Ó;Cì$k©¸ ­£Ö¹OªT?™âbËœK¿?Ó§SÃÓQ Ýž3Ðù*qW­u3gb;u“8sµÏ¶Õ¤yÿZ‡ÏÂ÷¢ïÔ® œË ]h\^ûµ¬;'„n ;Ø[•ÛóÞúvÂõÐ¥ÌñQ¿Å,û5¸™c®ëLP?NòÆæì$/vIÐZ _wüˆ¿¤~øÙ(ÐÍû]èñ󸙃hp˜)zÁjÜ—ëÜM ]Gé H¾ÓhÝ ûªûr>—ƒ=Ôhÿoÿ ý»§{óîWæœ*>[ñlæ¦ßø,}´N>ø²-þˆÎE­”Í¿_Æ„ZÈo‰C*ž"ðýTžWúB¨½inŒý¡þZ‚Ƕ\Ÿ¸¤ÔË “A?â§kšâ˜Ô/ Ö<Ã}K<Ò¯#•z#µ¿ý¸¥äiÌ"Ù9æiÄž7ï4D~i|,ñ­)áù3°íŒÈ_ðƒf±¯áw±c7î~ø™¼”Ö5¥ˆ ?¶OEpdo©“˜Íÿe>®ÆÓ¬J‰x‹‹^ôûÎ|Ö‰ÿIÜ^ó–:§Ð<ÔMê ‘cV0|ñivøùð±Ìƒs›ÏñäŽ/7׋3žû—:ÙÀ±­Ðó1ðíκÐÃÈÝÈ­÷¸òýšðŸ}\WÉ¥‚ŸîR'£}Ô¿²û݇Ÿ$~¬v[˜ÿ;â?¢ÿ{ûyÏ¥uÀ’‡Õ¼dðõ}žOìgó÷Wø ’Ѽ⚜;# ¯2Ÿ¡ÿEÞkžÙ™Ÿ¸…Ê©† k©vÝ#\GòüVª¼Ü—ê§jéD^Ä Á±XÛoËq滸e ìÞß6Î O§vᆳÃ߇_¿,öhp^"ô[ò8è{Á5 ç\Àè Ëøý@^ø·y‰·€OõónR×£8%¥[µŸÕ¯ôéUú¿ªßho]Â}/)ˆþØ[ÜŒà'5>®q:íߤ~±?·w×&íS ~Ä(ÿÀ“Ÿ:×@å‰9v$Ï+ñNîuÁ3X'© výžûÎ>¿@òŠï ´ïLßêÌ/‘sqÎCÏÓÇ`×TÉ€¼q»9ê¯ì¯ÔûšÕ¢_Ä~ .L/sw ùOèßÚð¬—wß‹›/ O?в&Ü…^$O¸·\ŠÄ·ý9Å‚2âvâ>5î-q-wã÷U”|‡êUëaaäÊØ³Â¯¯æ¡Ãô#~Ùa»Fêò•5Ž ýÁ×rÝêûÒ·Å|Syüþ-ü%8½?Í/hß#óX}øcÃ5öÿ·ìØ»ß7GŽI~Uí+•î€lì§ú››+†Èkí×m ·s•f𜅢@WççWÐ<ÓŸið3Dßj¼HóOöÉLÈ_‘—Zn½ZÀþ•ùAð2Ñéo+u×jç8-ráW¼ªƒ¼N’…z•;5Ò²oâúþ¢à@Ÿ¬ýKÌ}§Cæ *ÎÁ¨Ñ 9ðMòtWÑx“ïÞˆ†~yrjk݉ƒO¡ÇBÿÁ*ë½>èj‡kÜÊnZºü´âÂìô”ೌÉ5øŸô91ȉüQ;bÆKŸǼùxžäKÜ«·—ÒgÎ iüµoeô‚ä‰çh&ÙŒ>Ù– ºÿ?õŸT=i/Á~mJG]ðÁd™ø^óp# pß‚_×x—ßc_ì8 e7žþ|*µ¯ögR\†âeÂÖçx®u>Ï)q_å Å…k¾Vçª<Òú!=Nq!Š£wúìDNŠ>Ò|¬Û~|HœÔ¯§hÓ’û<‡ï¯L—,skÍÙ#ù¥ ñ`É‹¸£Açæp½Š3ÉTíWUz×û´/Å!N+y õ·St"øOãm"øcH|žWâQJ¿ÿöeOÊÚÀû¿ô5×<¯Î³Öü‡™-/ô©që—‘ƒiî¢÷—wfý‡ ±“•n[©¡íS¡~’Ä…Œ¤ƒØ‡ëÐçI?â·J»ßù±þ”ÄËëkÍ Ï7f’#ÈsÉoéœ5õ#œûÓ±‹¿½ßøf2¸ ‰K]A5ˆŸ&q,ûãTôÊ­ïâX‘·ÂO’_´¿Š\’9ëvâOè™}ßP‡'ó6ìÓÉV†^¥g÷Zퟱ_=ªã ®Gópš/ ¬ÿ…ûÿ9“dë¢ò¾pGè\ðì~\Aò§z|ÐÊÇ÷Òï^q0š ,}BÞpØ`â-’¯÷ó1’PÜÚWÆô=èÝoÐG÷ñFWQ¿HùIõ—扭‚ ¹Þ»éü®}™7lÔ~4÷¿Iÿг±:ýÅ:Hý¥§þ¥â/ª¦Oµöו!Ø1å7ÁÇ‚·Zd]/øööi±<çôÞð—äÿUïš§ZB—ÙG@gRG©ý¿ÔÞqGôä‡Öhßißn‘<ŸŸõGœï.C×’Ï׸™£¼©Ï‡ÒGÐ^Rû_ññVÍÛ žÔþד¹âªÍk¯ØGÁøø™½à?ñÿ[/íg¥¸í߬õk7ô=x?áâðô¯qF¿/—ÆÃ¶×G^‰¾v&OåþµÌ3z‚¿¤¯¢â1¬KÛ°7*Î$'õÖ~Ÿ ©V;ÈîZú>íŠwTœ˜Ý¡ÇIÎ ](ŽFú—Y{²nâèyÜ‘›“ÓÁ¯;†¬¯Ý¡!úRü¨@¤´£ÿ›ôØV>7 úÉÇ©¼l¿^ý {Uò\Zï¯yvwïuÁS‚÷2>$ÀNÐz éóèãl¤.H¯¯sîUÞ¨?g—¾Ìý‰­q¤@÷zü_⩚/òùLðñŠ×T;WùÒ>¿äìž[ú!¹s; Ï$þíã O¬A).YpÁ̽¡Á?j_''ÒcÁ¹_…eŽ‚ñv8û(óE´ÎQùYç & î+õÒVÁœ\Gã 5ž`·‰<7»⹤nTñªÁ ˆÞDûr8»W_Y•>×x›Ô瘧z!÷r­Çï?8ÌFž >08·(òRü_¿ÿ½ØO~þñqìÖ{½þ^ÜS½ü••t5qøJ‰:ýWéúï¾tŸ×m@¿d|J]¡ÌÉQœKðröWð²f­­è)Éëºj|ÛIRWú2?5jÕòüx;K/ä­äEí¹BäŠo¤Ç:Š]«ñcÍSiÜBãÁfšÜ¡õ‘M*rÞž—ÑÃRWع6 òWânÆð+ä=[Ï„¥O©ÊmõG4î×ÿ‰_«ü¤þšö÷R\©¹­ ô!v˜Ö…Ý~ŠöMÕº‰ç+®(ìÄÈQé³­yÅ„ñ£à¦£_¿n„ß4--öôÞçè—òQȇ¥H=½Ä-Œ·‰<ýàD}ˆÜÍÿy&}­«G½¾Vaþ–×7Áü*ß`Ù¿ÎÂeÿÿB¿ÿå—ÎG2£Öë.rp ü~ÌÓ;Öù^ýSà÷#^#ÌNþ ¹—a,ül{üm¨æ}¯uŒÆåÐÓ¥ãSY¿•’o$ïåã³$NdÄÈ„½µ«t§ñ'‰ë˜­lèHâEÁÑåÈ/Ký?oßüìO}BâæŠ÷ÓºaÅ;Å®aÿÊÜQÅ“j^Xã·ŠÛÓ|´ÖA+NMû±èÜN£SEøJò~þœ@¯ ó¢Âìo}‚ïÚ{ëh¤Ïse¼éõù¶jXèÿE®·/æä¶Þºó7a]ÓmõŽsÚ­ð~wÒÝöèÓÚ{°Éÿèó/^aþtio_Í®þ=LO4ùÛz¼çéUkצ¶"ïõŽ+Þ®£÷9Ê£BOÞ÷aþ}7ïw™kÍùÐJøÖ›hÎÙÔ;Ù\u½ÿÅ^QÎû¼¥™ñ?úúßë¯ÿ½þ÷úßë¯ÿ¾þÔUw`Ádipy-0.10.1/dipy/data/files/tracks300.trk000066400000000000000000005317301263041327500177660ustar00rootroot00000000000000TRACK,èO˜¸BçëæBÞÙ…B]u·BŸŸæBá‡B Y¶BCKæB(TˆBìEµBi=æB礉BuK´B#[æBÿ‹BŽv³BíŸæBÝ}ŒBBòBðæBæŽBõ²B@çBî‡B±B‘çB²‘B>$±BÂðçBÔ»’B\Ú°B°èBßK”BýȰBiéBqÄ•B%аBL:êBC—Bá°BªãêBjÔ˜BSù°BÏbëB±tšB”±B&ÅëB)œB?±B ìB:ÉB‹1±BÌTìBèuŸBMï°BD¬ìBáBú °BàËìBTÇ¢BÆw°B‚`ìBÇk¤BbZ°B9ÒëBϦB ?°BëBv§BÖ&°Bô5êBŽ©BưBí>éBÕkªB°Bp>èB–Ì«B÷¯Bê;çBG+­B]ç¯B:æB¾t®BÀ߯B[áäBà ¯Bè¯B†ãBXª°B‰õ¯Br âB§£±BذB±àB²Bb°B¢1ßB5_³B>6°B*ŸÝB×´B_H°B©ÿÛBŽ´B Y°BÑ]ÚB, µB¸i°BrºØB ‡µB}~°B6×BKòµB’˜°B0gÕBG¶B;´°BÔ¶ÓBj¶Bṵ́B\ÒBëž¶B­è°BOÐBÈ¡¶B=±BIœÎBž¶BØX±BnìÌB*¶Bv¦±Bv?ËBQo¶Bõ±Bö•ÉB1¶BÉJ²BÁòÇB¡×µBO¬²BÂSÆBwµBܳB·ÄB¤µBkгBkÃB6»´B×´B,ŽÁB)>´BÙ®´B¿ÀB¬¤³BhµBà­¾Bt³B…+¶B-E½B©j²B?ü¶B­à»BݱB¬ñ·BÈ’ºBºS±Bòû¸B}W¹BÓŰBÞ?ºBRB¸B5j°BV§»B5N·BTI°B9½Bïr¶B0\°B›¾Bf¢µB0ˆ°BÀÀB Ë´B•­°BÝ‹ÁB7ñ³BüɰBKÃB?³B‹Ú°BrsÄB,²B*ã°B—ßÅBÍ<±B@å°B·LÇBO°B?ç°BMºÈB!c¯B¤ý°Bc(ÊBx®Bk±BΕËBóŠ­Bà ±B7÷ÌB½“¬B'ϰB/FÎB¯~«B­°B6{ÏBLªB3ΰBŒÐB6©Bë±Bƒ¦ÑBS¼§B‚d±BÔéÒB‰¦B‹ž±BQÔBÌ©¥BsıB‘ÄÕB+ȤBÊà±B/×B^Ø£Bîÿ±B å1©Ba”îB]BšBWì©Bê îBŽ´›B¬¦ªBVíBBa«BDžìB°mžBà«BTÞëBàŸB¥¬B˜8ëBdn¡BûH¬B…êB©£BÏv¬BxëéB ¤B-ž¬BB éBL¦B¼¬BYèB­`§B–Ô¬BiôæBÚ±¨Bîè¬BjÜåBðÿ©BØ­B%¾äB$H«B!*­Bª–ãB.‡¬B±F­BÔ`âBP¹­BK]­B-áB…Õ®Bµz­Bˆ¹ßBÐÚ¯B—¡­B—MÞB&ɰBnέB¦ÑÜB œ±B¥û­BLFÛBˆP²B÷®B«¬ÙB-è²Bò­B{ ØB…a³B$Ô­B1dÖB¾Ñ³Bg¶­B;¾ÔB~?´Bšž­B/ÓB¦´Bâš­BjÑB4þ´Bñ­­Bz»ÏBsGµBEÅ­B• ÎBZwµBäß­B›UÌB ‰µB³ð­BØ ÊBWµB¿ê­BÎìÈBcµB`Ç­B<ÇB’,µB NêµBŒîBù”Bk2µBÚîBêBG„´BþîBð®Bôú³B{îBVL’B2œ³BÞ îB©õ“B,c³BÌÈíB­ •BÓN³B÷líBIJ—BÂM³B8-íBrù˜BHb³BrÞìB¢¥šB2c³BiìBwIœB%L³BµüëB ïBD³BiƒëB¿ŽŸBBزBMëBò-¡B­”²BYÒêBØ¢B­J²BÚ¯êB „¤B¬²Bz6êBÀ"¦BNó±B géBŒ¡§BZó±BgeèB5©Bä ²BöJçBâLªBk²B+HæBÕ««BÂ'²B¸NåB†­B>2²B`NäBgr®BO,²B 4ãB&¿¯B§!²B|òáBæ°Bþ²BذàB ²B…²BlHßB¦³BG(²B‚»ÝBŒ¹³Bi@²BÓÜBU>´Bôc²BN|ÚBÁ´B •²B ÞØBJEµBa̲BL?×B¬ÁµBùþ²BÛ˜ÕBç%¶B.Eœ­B—3ãB@ƒB†Õ­BnãBFÌ„B ®B¥ ãB„|†BDB®B— ãBë,ˆB§l®BIãBeÞ‰B4`®BW$ãBí‘‹B,®BžãB„BB‹®B'ãB&õŽBß®B¡`ãB¥BSC®B+ÏãB¹H’B”K®B=ÅäBÕ°“BÄb®BßãåBù”BQ‡®BkøæB}H–B¨±®BdäçBÖ´—BÜ®Bp¨èBþ7™B]ÿ®B®UéB…ÆšB¡¯BúòéBè[œBC ¯BËRêBžBÛý®BkaêBX·ŸBØ®B§&êBe¡BëÅ®Bä–éBº£B»®BÄèBY~¤Bv±®BmÊçBÿã¥B{¨®BsÌæB—F§BÇ©®B ÅåBi¢¨B‚½®B­äBöð©B–ä®BŒ~ãB­(«B»û®B¿3âB¬D¬B(¯B©ÕàB„I­Bm¯B mßBÆ?®B)$¯BTúÝBµ%¯B‰D¯Bl{ÜB‡õ¯Bëd¯B„üÚBXŰB”¯BÐlÙBÛs±B ¯BðÏ×BA²BI—¯BŽ-ÖBV€²Bœ¯BâˆÔBÇö²B›¡¯B'áÒBËa³Bµ¯Bp4ÑBÖ´³BÚÕ¯B¡„ÏB—ð³BÓ°BVÓÍB×´BªA°B€"ÌB²´B7†°BsÊBf ´B¬Í°B6ÆÈBNݳB÷"±BA"ÇB‡³B•±B…ÅB@(³B$ù¸BaçB¡Ô†BÚÌ·B+ çBñˆB¥Â¶B ¹æBR‰B¤æµB¡žæB ÉŠB}8µBE«æBPXŒB÷´BÛËæBsîB;&´BúæBñŽB‹Ð³BH@çB{4‘Bƒ³B«ºçBªÏ’BäA³BñjèB)Y”B~.³B¸+éBÚß•B(:³BòÕéBq—B X³BAKêBÓ™Böz³BsêB\ÄšBZ™³B¹dêBÚvœBcˆ³BM>êB©(žB¯`³BïéBkÓŸB©$³B¦ŒéBÃw¡B‹Ü²BMéBÚ £Bl”²By éBòɤBµG²Bt¾èB£o¦B¨²BöèB¢¨Bâü±BI5çBkq©Bv ²B¶#æBŪB¸&²B°åB%¬BÅE²BäìãB Z­BØZ²B_ÞâBï®B(Z²BÆáB0þ¯BH²B¼“àB4±B7=²BN=ßBâB÷Ý‚B1«BÇ´áB…„BÊ«BZ¢áB‚8†B’«BôÀáBë‡B¶0«BÂâB[–‰B V«B}bâB¢@‹BSw«B¨âB’íŒBx«BpðâB¡šŽBy—«B>‡ãB¡3Bv¡«B±:äBæÀ‘B'¥«BõåB'8“Bo «BbæB^˜”B°˜«BÍ çBö–BŸ«BŽÑçBˆ—Bº±«BmkèB™BÕ«BèèB¿¿šBÀ8¬B|ÅèB„fœBŒ¬B`{èBÏ žB2Á¬B¶#èBp³ŸBÂæ¬BPçBqP¡BR ­BëçBsí¢B +­BkUæB s¤B B­B1fåBߥB´R­B_äB¼:§Bl^­BpNãB9¨Bs­B46âBÝ©B‡ˆ­ByáBè«B—­Bò¯ßBµ%¬BI›­B`KÞBÍ!­B2©­BAßÜB•®B¨Á­B¾iÛB¼ó®BãØ­BèÙB¿¯Bã­BøXØB9q°BÝ­B¿ÖB[±BkέB!ÕB¢“±BÝ·­BJ€ÓB²B÷¨­B¥ÛÑB¨Š²Bª­B,3ÐBÔò²BZ¶­B†ÎBpG³B‚À­B<ÔÌB[x³B¨Ç­BUËBq…³B¡½­BZjÉB€³Bz•­BÛ·ÇB»g³BC­Bì ÆB÷;³Bªæ¬B­dÄB’ ³BÊ„¬B/¿ÂB”вB]¬B"'ÁBÙx²Bø`«B.¢¿Bð²BË¡ªB,.¾BÐŒ±BâÛ©B¾¼B»±B#ƒµ»B“[âBÅ3{Bñ€»B´:ãB~BšA»B£'äBÊu€BuûºBëùäBníB5¬ºB­ºåBˆlƒBJPºBhæB²ñ„BÙÓ¹BQææB"€†BhW¹BdçB’ˆB꨸Bã–çB›š‰B–Ñ·BXrçB}‹BÎç¶B %çBÂzŒB›=¶BƒúæB“ ŽBo¸µB9ææBý§BVDµBåææBL‘BVá´B)çB ò’B…´B+sçBS‘”B·.´B{íçBÂ*–Bvæ³B\ŽèB‰¹—Bľ³BcOéB”>™Bº³BÜþéB¸ÍšB†Å³B®]êBwœBéܳB>oêBÓ)žBò³BIJêBÛŸBˆ´BeêB¤‹¡Bb´B æéB€<£Bñ´B%ÙéB—ï¤BÈ»³BÐéBóœ¦BN„³BãVéBÿ;¨Bør³BWtèBO°©B¹Ž³BWRçBAõªBæ¶³Bk(æB­1¬B)ݳBþåBa„­Bîó³BrCäB‹¯B=´BšsãB§°Bd´B©âBHé±BF$¸¶B¨ãB: „Bþ]¶Bì·ãBXµ…B4ǵBÿäB#F‡Béÿ´BôäB ¬ˆB«A´B›&åB§ŠB‡‡³B —åB\•‹BȲB òåBBP1²B¤OæB/ ŽB-αB]³æBȶBÎ]ÀB)‹²Be·Beî¾BвB䯷By½B›}±B›¸B̼B¯û°B€Ž¹B³ÉºBçu°BùœºB[“¹B'å¯B‰Û»Bä{¸B@~¯BL8½B¬{·BXJ¯B!Ÿ¾BÖ„¶Bï;¯B)ÀBøŠµBø8¯BafÁBÆ´B &¯BôÇÂB鑳Bgÿ®B,'ÄB”²BÑ®BŸ‰ÅBΙ±Bü§®B7îÆBݤ°B„s®BàTÈBþ²¯B?®B~ÀÉBÆ®Bi®B2ËBcá­Bgù­B•¥ÌBêÿ¬BÏÛ­BÎB­)¬B}®­BH•ÏBÇX«Be­BH±î´B. äB¸‰€B„RµB“7ãB.ùBRxµBy±âBB–ƒB­`µBù‡âBwG…Bç/µBÍçâBçí†B ÷´BtÊãBB^ˆB{´BåäBN݉BW´BÁÿäB’m‹Bž€³B†OåB¹üŒB½ù²B «åBöŽBªš²B æBt/B V²BïyæBXÏ‘B²Bù çBf“BSö±BÇçB%î”B0ò±Bf†èBv–B< ²B:éB˜B¦*²B•ÄéBœž™BšG²BÕêBsI›Bq\²Bî<êB/ûœBUH²Bg)êB®žBë²BòàéBbY Bã±B€ŒéBt¢BI¬±B8éB…©£B»r±BðÒèB•M¥BŠ8±B±AèByä¦Br±BMpçBPa¨B.±B§væBÒÆ©BY±BŒeåBé«BD/±BGäBàb¬BBO±B4!ãB¤­Bí]±BvñáB"Ý®B»Z±B°±àBC°B³N±Bƒ`ßB^±B/U±BcöÝBm²Bnj±B€rÜBSײB»„±BªßÚB•~³B¿¢±B FÙBã´BîűB÷§×B5›´Bàç±B¥ÖBz µBº²B»UÔBaYµBÜ(²Bi¤ÒBP‡µBµX²B%òÐB4—µBÓ—²BœAÏBOµBŸà²BÕ’ÍB#µB5.³B0åËBhµB䇳B<ÊB¹7µBzñ³BÒšÈB®ë´B‰i´BžÿÆBá”´Bÿë´BfeÅBI´BtvµBOÌÃB´B± ¶Bû7ÂB’»³B¼¿¶B¹ÀB·N³BÚ‹·B‹N¿B˲Bì_¸B½é½BWC²B1=¹Bˆ…¼BkɱB}4ºBc0»B#W±BÔJ»BVô¹BÖä°Bý޼BúÚ¸Bî—°B¥î½BiÛ·Bœx°B5\¿Bhî¶B¯}°B'ÏÀBI ¶BÝ•°B»DÂB|+µB< °Bú·ÃB¤G´B¤™°B'ÅB•]³Bô‡°B¬“ÆB p²B”r°BüùÇB±{±BH°Bƒ^ÉBò†°BW°BïÁÊB¿‘¯BnׯB×"ÌBâž®Bz‡¯B…ÍBw³­B‰*¯BòòÎB&Û¬B$É®B¥bÐB™ ¬B ^®B+U"³B­âBXìBûÕ³BÞÊáBÙªBt”ÌB8ª³BÁë©BqçÊBjª³B*„©B8?ÉBxž³BŸ ©BVœÇB ‚³B{ЍBHýÅBgX³BÇ ¨B¼^ÄB_(³BLÈ ²BZâBåBã2³B׫áB¢Œ‚Bx³B;)áB¼&„Bt³BoðàBØÖ…B`³B»1áBR…‡BØG³B|ÿáB‰BE"³B êâBþrŠBŒÐ²B2–ãB6û‹BG²BüÿãB‹Bá±B_oäB$B_ž±BªîäBš¿B@n±BV~åBkX’BÀE±BÑ%æBøè“B%/±BŸêæB}m•B 8±Bu·çB_î–B0\±B(~èBâp˜Bs€±BÂéBŽšBK±B”éB˜¨›B¹¯±BÑÑéBùVB<™±B¤ÌéB0 ŸBrm±Bh‹éBå¶ B >±B¹+éB|]¢B·±B¡èB)ø£B;â°BãçB~¥B-°BSûæB$î¦B`¹°BåüåBlP¨BÃʰBRçäB¬ ©Bbô°BÓ½ãBOݪBì±BI„âB• ¬BE±By8áB5'­B±BaãßBÉ7®BË"±B–|ÞB¨0¯Bþ7±BÅÝBç°BpQ±BÄ…ÛBÞ°Bâj±BÄÚB#§±BÍ„±BrØB~S²B`ž±BÖÖB$ã²B§¶±B¤0ÕBOT³B‘ͱB~ƒÓB8¤³BŽó±BêÒÑB¢Ö³BI)²Bš!ÐB‘ì³Bk²BeqÎB:ì³Bk·²BhÃÌB سB–³B_ËB5­³BŒt³BãuÉBg³BËä³B©ØÇBU³Bc´Bþ=ÆB¿²B ë´B¾¤ÄBÿw²B·zµBRÃBç/²B‹¶BpƒÁBöѱBÓ¶BÀB–[±BzŽ·Bø’¾B§Ü°BèL¸B ½B7`°B¬,¹B"¿»B ܯBž+ºBÇ|ºBI¯BŽA»B{T¹Bª®Bæ¼BXD¸B 0®BpÕ½Bû=·B7í­B53¿BJ;¶BqÒ­B ‹ÀB>0µB¼­BæÁBÐ-´B0‹­BÒHÃBª5³BsU­B½°ÄBñC²B­)­BÙ ÆB ^±B•­B)ŒÇBnu°B|ƬBîÈB"…¯B#s¬B^`ÊBã§®B•6¬B\ÞËBµÙ­B@¬B/`ÍBò­BÍõ«BžßÎBåX¬Bmš«BÅPÐBW¯«B’ýªBQ¸ÑB‚ÿªBÖQªBúÓB›VªB‹©B|ÔB¾©BÉÓ¨BjáÕB©3©Bôû§B<×BwǨBÄ §BJÙG±BûáBŸ=Bçó±B#báB{¯‚B`G²B{ÝàBšB½±B@éBÝ›BN$±BrdéBVˆB‡±BƒkéBœ;ŸB™è°BÙ,éB+é B8Á°B ¾èB팢B×™°BhOèB¯0¤BÃs°Bö¬çB|Ã¥B&M°B/ÛæBÝ?§Bª4°B§ëåB˜«¨BŸ0°BõèäBâ ªBE°BÙÐãBÞX«B·o°BÄ£âBú‘¬B„‡°B¬cáBÛ¹­B±°BàB.Ï®B掰Bj¶ÞBÔÖ¯B~Ÿ°BQÝBbѰBK¿°B0ÛÛBõ°±BܰB[QÚBõk²BÐò°B>ºØB# ³B2±B{×BN޳Be±BYtÕBÐý³B˜.±BkÈÓBÙT´BöM±BDÒBÝŽ´B˜}±BŸfÐBH«´B\¼±BÿµÎB°´B5²B´ÍBÀ¦´BRS²BÎYËBd‹´Bš¬²B±ÉB²S´BZ³B5ÈB´B4‚³B7tÆBʤ³Bpö³BÃØÄBÿI³Bzr´B>ÃB€ö²B®µB$­ÁBÉ“²B,®µBû/ÀBï²Bxi¶BJ½¾B”ޱB›(·B}K½B8 ±BÒö·Bcä»Bq°B_â¸B\–ºBæ¯B æ¹Bb¹BÅ>¯B‡»BQI¸B÷Á®B˜s¼B H·BFx®B×½B¿M¶BZ®B|:¿BŸQµB[R®Bn˜ÀBN´BÊE®B‰þÁBÏV³Bü.®B/hÃBùd²Bƒ®BÔÄB˜u±Bœ ®BêBÆB‹°Bfô­BůÇB: ¯BÒÏ­BÔÉB×±®Bö¬­BÌÊBXέB—˜­BÌB´ï¬BŽ­Bl|ÍBó¬BÅ~­BÁõÎBA«BVM­B6gÐB.eªB/­B¢ÏÑBìt©BÀ׬Ba.ÓB™r¨BøÈ¬BI¯¿²B3 âBkÏ€Bï_³BQMáB5‚Bв³B²àB;ăBê±³BràB[s…BÛ˜³Ba‡àBø%‡Btr³B® áB˜ÃˆBLD³BeÖáBþBŠBù²BôkâB–Õ‹B„²BSÉâBõnB”²B•;ãBÜBõñB/ÆãBšBޱB[äBe0’BÖf±BöäBÿÅ“B'I±B„¢åB^U•BÏG±BomæBc×–Bxj±B_HçBõN˜B—±B èBЙB ¶±B¹¢èBƒi›B ȱB÷éBŽB“º±BH éBaÄžBY—±B¥ðèB,t Bk±B‹èBÖ¢BÙ>±BY&èB‚¿£B(±BLšçBÍY¥BVâ°BHÞæBmà¦B€À°BÇ÷åB)Q¨BÕ·°B7ùäBZ³©B…ɰBfããBc«Bô°B‰¹âB?¬B$±BáBo­B÷±BR8àB>Ž®B±B$âÞBo¯B¼ ±B͆ÝBÆ¥°BÂ:±BVÜB •±B V±BÍ–ÚBé\²B p±BFÙBó³Bd‹±Bh×B§“³B¦±B›ÃÕBÛ´Bξ±BœÔB2]´BÑà±B'gÒBS“´Bû²BƒµÐB/«´BNU²BcÏBN©´Bjž²B˜VÍB;›´BÞï²BªËBO}´BM³BÉÊBÔD´BÅ·³B®bÈBéó³BO/´BpÇÆB‘œ³BA±´B*-ÅB@P³B:µBø“ÃB‹ ³BÑεB,ÂB!¹²Bº€¶B‚ÀBÐG²BþA·BÚ¿BXƱBѸB¡½BB±B†Ú¸B9¼BhŰBUϹBBèºBB°BôߺBв¹B{³¯B ¼B&š¸BZE¯Bƒs½BÊ•·B¦ ¯BÖ¾Bf™¶B›ó®B‚5ÀBÕ—µBdç®B ’ÁB>”´BôÅ®B3òÂB¸—³BY—®BÃRÄBSœ²Báe®Bû¸ÅBÕ§±Bm;®B¦ÇBï¶°BÄ®B$„ÈB,ůB±À­BpðÉB¢Û®BÚ­B°dËB’ü­Bçg­B¡ÜÌB*"­BbM­BOZÎBÿW¬B­BpÕÏB¦œ«B ­¬BœGÑBÝߪB/+¬B˶ÒBªB»«B!4„¯BÇÑâBº •BšŽ¯B³ãB‚–BÛž¯B3°äBøä—Bð¹¯Bë¯åB\E™B Ú¯B„æB±ÀšB¢÷¯BÇçBkWœB‡°BÓ|çBežB°BH†çB´ŸB̰BÍ&çBM]¡Båý¯B |æBžî¢Býó¯BrÒåBï¤Bä¯BÕþäBñü¥BÆÍ¯B¶äBðl§BÀ¯BãBlÒ¨BLɯB’ âB'ªBÂÚ¯B·ÕàB Z«Bgè¯ByƒßBÏm¬B î¯BÔ"ÞBRo­B²ü¯B\ÉÜBûy®BA°B%nÛBv¯Bá7°B›üÙB h°B3Q°B(mØBV±Böf°B²ÑÖBø¨±Bdv°BŸ/ÕBl'²B_€°Bò‡ÓB[’²BK’°BµÛÑB#è²BA°°Bj,ÐBÕ(³BÙÚ°B^{ÎBúR³B±BLÊÌB–`³B‚^±B“ËBúQ³B7±±BepÉB¥'³Bt²BdÌÇBYß²B܃²BÀ0ÆBã²B1£3¸BiŒæBg†B±Ï¶BëåBÓ&‡BE_µB›oåBoê‡Bç³B[5åBͼˆBK|²Bœ*åBÖ¬‰B‘±BÜåBÞœŠB­É¯B‹ åB6º‹B³®BlùäB{BE3®B×åB`¨ŽB%¹­B?åBFHB49­B‚åB}ã‘BÒ¬BùåBöy“B Ù¬BÑîæBUâ”B—߬BêøçB <–Bï¬B-åèBZª—BI­B4¨éBÑ/™B°­B?OêBšBí*­BžëBêOœB–<­BDÄëB:ÕBtC­BXfìBëiŸB-9­BàÈìBh¡B#&­B•ÈìBÑÅ¢B>5­B|GìBìe¤BP­B4pëBIà¥Bi­BwêBŠE§Bt­B6kéB@¨B—­B¥XèBõï©Bˆ›­BHçBD«B¹¬­B­-æBìBÍÀ­BUåBžÏ­BpÍ­BÎãBS¯Bu×­B2‡âB#°Bšê­B,0áB 1±BÎÿ­B}ËßB9,²B¥ ®BTÞBö ³BW®B>ÎÜBƳBˆ‚®Bö8ÛB0d´Bos®B×–ÙB`â´B@^®B\ñ×BéSµBàS®BHÖBS¸µB²V®B—›ÔBe¶B_®BXëÒBûN¶B(k®B^8ÑBËx¶B(®Bm„ÏBœ’¶B ®BËÐÍBò¢¶BÒ®B„ÌB¶B¡þ®B,mÊBy¶BE¯B¿ÈBK2¶Bû5¯B”ÇB™ÐµBJy´B$âB1$€B• µB#áBxdBMhµBþKàB¨Ô‚BŸ‚µBPÎßB?u„B3cµBÌ­ßBº&†Bu/µBêÞßB²Ô‡B‘ê´BôdàBËm‰B…œ´BLãàB­‹BªC´B&áB"­ŒB0Û³B‹AáBVSŽBCR³B$páBnîBVɲB½žáB‡‰‘B˲BoïáBÈ“B(ˆ±BœOâBBŸ”B M±Bç±âBÎC–BV±B¯-ãB­å—B;±Bå÷ãB.g™B2±BOõäBCÈšBy ±BüëåBä/œB]±BÑ¿æBϬB.±Bt<çBõMŸBA±B6yçBý BõP±B¥_çB䯢BÓG±B0ïæBòT¤Bµ±B“9æB7ߥBËò°BÕaåB­W§B\Û°B-qäB¼Â¨Bâ°BÛdãB¾ªBr±Bq@âB]«B©"±BwáB‰¬B0±Bv·ßB|¢­Bæ4±BtdÞBšµ®BvK±BÍÝBÐѯBVn±BÎÄÛBOà°BaޱBõOÚB Á±B‘¨±BÓÁØB¾s²B½Ã±Bÿ'×B ³B‹Þ±BÖƒÕBf~³BÓ÷±BM×ÓBÕгBŒ²Bº&ÒBƒ´BÊS²BnuÐB€´Bè–²BoÅÎB¯´Bùâ²BaÍB´Bã9³BÙlËB›Ù³Bî³B¨ÈÉBe–³B®´B¬*ÈBøB³B ´BWÆBö²B µB‰÷ÄBH´²BN®µBû`ÃB}r²BMM¶B£ÒÁBDzBü·BVÀB+®±B<÷Bâ¾B^0±B$…¸Bn½By¶°Bc¹BU ¼BŠ<°B×aºBÞÁºB\·¯B’z»B씹B…&¯BƸ¼BÀ€¸B¶®Bð¾BŸy·B.y®Bæj¿B¦t¶Bª\®B«ÁÀB€hµBWC®B–ÂB e´B®Bû{ÃB¹j³BÉÔ­B4ßÄB t²BŸ­B‹JÆB…ˆ±B†n­B¤±ÇBü›°Bü'­B—ÉBF¬¯BVÓ¬B¤„ÊBÍ®Bj”¬BvÌBü­B®j¬B_ÍB”4­B·C¬B(ÏB¬B â«B5rÐB{Þ«BT<«BEÚÑBÙ4«B’‹ªBz@ÓB‘ªBÂÑ©Bž¡ÔBRªBnÿ¨BvŠ­B—|ãBzû”B½Œ­B{ŠäBNR–Bf©­Bì‹åBP±—B^Õ­B¿væB3™B›ý­B6çBó£šB®BÅçBÀ>œB,®BmèBÌéBm>®B—èBÛœŸB#E®BئçB—E¡BÞK®B,úæBëÕ¢B R®BºæB¢M¤BDR®B8&åBµ¥BzN®Bp#äBȧB€W®BôãB k¨Bþd®B‚ßáB™ž©B|r®BªàB&ÒªB}®BWßBå«BS®BgòÝBá¬Býˆ®B…ŠÜBdØ­B­˜®BÛB½Ä®B®®BÁÙBó—¯B ®BlØB›L°BÇÏ®B0wÖBFå°B]Ó®B ØÔBÃm±BuÍ®B{4ÓBòç±B4ήB%ÑBT²BXÙ®BªâÏB¶³²Bœî®B‹4ÎB²þ²B¯BƒÌB˜,³B‚<¯B¤ÐÊBT@³Bmi¯BÓÉBG³B2¸¯Bx¯âBpB¶>°BÉ'âB"‚B—°BîÁáB–-„B©¸°B÷ŽáBÝ…BÙѰB°ÆáB¡Œ‡B_ë°B’sâB‰B*ܰBÄãB®ŠB&‘°B ‚ãBOŒB|,°BÄ¿ãB©òB›å¯Bk8äBŠBûƯB¡ÍäB(‘B'µ¯B¶ŽåB­®’B ¬¯BÅtæB,!”B2º¯B jçB¥‰•B#Õ¯B¶EèBq—B¸ù¯B¡éBµˆ˜BV°BÕ¢éB®šB‰<°B‚(êBVº›BWL°BÖ€êBÝdBˆ0°BäŠêB°ŸB°BæfêBÉ B‡õ¯BèBêB^z¢BM̯BüÜéB) ¤B"¬¯B44éBâ°¥B¤‘¯B´SèBâ%§Bp}¯B“cçB}‘¨Bdm¯B6læBtø©Bo¯BvdåBT«B¼‚¯B«BäBº™¬Bð ¯B¼ãBWíB°¯B4´áBÙ®Bü´¯BùWàB†à¯Bþº¯BVòÞBÛ°BÞÒ¯BÀ{ÝB„º±BÇ÷¯B9óÛB×v²Bw°B¦]ÚBU³BG"°B2¿ØB¡³Bz-°B×B÷´Bô:°B:sÕBî‚´B4J°BôÇÓBÕÝ´Bsb°BòÒBµB¦†°BeÐB?>µBC»°BϳÎBmKµB}ÿ°BÍBÔEµBÏL±B\VËB¥.µB³š±BM«ÉBû´Bmð±B=ÈBµª´BœS²B’gÆBxJ´B‰Á²B"ËÄBPì³B3³Bˆ/ÃB⎳B1ÌÕ¯B7uãBRyƒBð°BÏ>ãBz'…Bœ/°BvkãB‘Ö†B ^°BpäB9mˆB7]°B‘¦äBÀŠBú °BåBhŸ‹B‹¯B3SåB`:B‘'¯B5ÃåB»ÓŽBòÉ®BÇeæBY]Bw®Bó6çBÓ‘BþZ®Ba&èB©>“B-Š®B^"éBŸ”B]¹®B[êBt–Bß®BüçêB?—B ÷®B{ëBÇ™Bq¯BìBµ¶šB 7¯B¹ìB0CœB„b¯B…íBÂB@¯B\îBÊ\ŸBáÒ®BÏNîBhþ BÐx®Bg'îBû¦¢BWa®Bî•íBIA¤Bàl®BÑìB9Æ¥B£v®BLäëB{4§B¸z®BºãêBS•¨BK{®B‰ÝéBò©Bù{®B^ÓèBÆK«B {®B,ÀçBež¬BÚ{®Bc›æBâ­B…®B%aåBù¯B­~®BªäBï+°BÇ„®BÁ¸âB¿3±Bä®BRáBµ,²B™›®BÔáßB:³B៮B [ÞB†Ú³B™®BèÁÜBÑs´BΉ®B>!ÛB²ö´BDv®Bá}ÙBpµB2c®B§××B8ßµB\^®Bû,ÖBå=¶Bk®B´~ÔBቶB9x®BÈÌÒB1½¶B˜„®BµÑBNÙ¶Bg—®B?dÏBé¶B ¹®B{°ÍB§ó¶B=ï®BÈþËBÐé¶Bÿ¯BNÊB(¿¶B±?¯BF¡ÈBÅq¶BM\¯B.ùÆBÔ ¶B0áÝ®BPâBèû€BÞS¯B'ÎáBàŠ‚B§°B"«áBr„BÀܰB9éáBXŒ…BŽv±B¤ÏâBÜ܆BF´±BößãB,ˆB¿¤±BªìäBsƒ‰B×;±B©åB{þŠB¤•°BìæBÔ…ŒBßô¯BGYæBÙŽBJ¯B[­æBäšB[Ÿ®BpçBï"‘BøÜ­BeçB œ’B¿}­B—èB„”B»­BÚéBã‚•Bl­B2ûéB7ô–Buµ­B ·êBñ|˜BEÅ­B¡JëBášBòÚ­BJüëBw¤›B~ø­BIÒìBLB®BPíB/¨žBÛÒ­BûíB L BN­BIîBù¡BOm­BîB.¬£Bèa­BtîBQ_¥B}­BR$íB„Ô¦B]”­B„ìB.¨B’¬­BjëB’z©B»Â­B”ãéB–êBÜÕ­BçÇèB¥¬BÓå­B«©çB«W­Bîô­B[~æB÷”®Bõû­BÈDåBŒÄ¯B)ø­BûúãB’â°B»ø­BT¡âBaí±BÔ÷­Br=áBvê²Byì­BÂÍßBãÕ³B£Ì­BŸEÞBÀ“´B—­BJªÜB÷µBE]­Bˆ ÛB8–µB7'­BÁhÙB8 ¶B0ù¬BÄ×B4w¶BMÚ¬BæÖBP×¶B4Û¬BlÔBè ·B]Û¬BKºÒB6W·BOÞ¬BÑBØ·Bnä¬B—SÏB›¥·B€ç¬B³ŸÍBmÆ·B(½ß¹B´cåB£}Bû²¹Bº9æBöJ€Bj—¹B¤çBݽB¯¹B¿èB—&ƒB3ɹBæèBŸ¢„B¼¹BCSéBpD†BÚ¸B`éB&чBwô·Bô"éB9>‰Bó·B>îèB곊BX¶BÇèBÊ7ŒBy§µB¨¬èBÅBš!µBî èBˆcB7¶´BÚÉèBí‘BÕQ´BåNéBÆš’BÑý³B2êB”B+˳B@ôêBLj•BãÔ³BeëB´-—Bnð³Bu“ëB,Þ˜B ´Bá\ëBÀšB!ú³BþëB";œBeâ³BÈÌêBzèBT»³B0nêB+ŸB‚„³B±ûéB+1¡BR<³B+ÇéBÀÛ¢Bäé²BA¢éB†¤B"¨²Bƒ)éB¾#¦BTвB$SèB^ž§B¼²BÀFçBSö¨B¿³²B´"æB¿8ªB5Ô²B¬åB'‰«Bìî²Be äBç¬B¢ ³BãBêD®BÉ ³B›âB¥¯B0ù²BëàB(ð°Bà²B3¨ßBó²Blà²B8ÞB ³Bûò²Bþ¥ÜBª³B:³Bµ ÛB:´B:G³BEpÙB=Ç´B%‹³BÄ××BêRµB)€QµBðáB<.B®µBµ¢àBS™‚B0͵BÜàB¼5„B€®µB¦ñßB·æ…B&zµB€!àBÁ”‡B¥3µBë­àBr+‰BOæ´B4EáBý¼ŠB‹’´B¥šáB!`ŒBd0´BW¹áB£ŽB¼±³BùãáBr¦B^B³BÙsâB§2‘Bœê²B>ãB»’Bg¶²BªãB6T”B¡²B "äBœö•Bý…²BÖäBƒ—Bæy²B@ºåB¬ö˜B\ƒ²B“æBqšBÒ²B <çB±œB)ž²B¦µçB¥B ޲B™ÚçB WŸBAi²BNŸçBF¡BT9²BHçB䢢B!²BÆcæBÑ)¤BÍÓ±B)•åBg¦¥Bz ±BÆäBý"§BØ€±BÌÝãBƒ’¨BNбBüÎâB‚è©Bk¨±BÔ¥áBÂ&«BnűB›hàB=Q¬B бB3ßByb­B'ç±B¶ÞÝBk•®BY ²BV³ÜB×ЯB7²BuuÛBûø°B§V²BÚBã±Bhu²B…{ØBIœ²BFš²BãÖBµ4³BB¾²B2>ÕBû¢³B^ß²BÉŽÓB`á³Bv³BnÝÑBŸÿ³BšR³BF-ÐBŸþ³B› ³B¿ÎBHç³B6#¼¨B´úìB–›B{©BoEìBìñœBlªBd†ëBz_žBsuªBJÎêBbÛŸBžÏªB¤)êBàd¡B,«B³jéB)å¢B†Y«B€èBéO¤B †«BUnçBÌ ¥Bq©«B JæBòâ¦BçÌ«B°%åB %¨BÃò«BrÿãB(e©Bü¬BÛÈâB–ªBü'¬B“záB9®«Bæ0¬BÿàBú¬¬BØI¬BR¨ÞBo—­B™m¬Bb,ÝB l®B܈¬B¥ÛBd,¯BÑ…¬B{ÚBدB¼_¬B {ØBo°Bñ1¬BHáÖB’ÿ°BKý«B GÕBYŒ±BYÓ«Bñ¨ÓBO²B¸Á«B}ÒB«Š²BYÀ«BÙ\ÐB)ò²Bo¤«B‡¬ÎB ,³BXe«B üÌB•/³B’ «BïPËBñ³B!¨ªB©ÉBe÷²BB:ªB ÈB¬Ç²BÈ©B€cÆB–²BN©BÅÄBîI²B¿¨B 0ÃB>ý±B·¨B¥©ÁB.¡±BW§Bk/ÀBã4±B¦¦B\Á¾B;´°Bu¹¥B­c½BÓ°BŒÖ¤B'¼Bnz¯B÷à£B£ÐºBhà®B9Ú¢BŒ¹B¿c®BU¡BðP¸BJõ­B³– BÔ!·Br›­B/jŸB·ñµB,H­B…4žBqôBé­BøèœBz©³B“ ­B³›B(Ÿ²BQ­B©5šBŠ˜±B ­BŸÚ˜Bê‘°B­B>—B°¯BŠã¬BÄ"–BÛ®B>±¬B;Å”Bo‘­Bv¬BK`“B— ¬BM7¬B¹ù‘B"¿«BØÓ«BSŸBNЪB¾d«B¥^BðÇ©BãªB<ßW´B+&íBÉîŽBR ³BüîìBvB†³BíB†’BѲB¶IíB\¼“BÞ¦²B‘MíB n•Bóž²Bë'íBB —B¸¢²B·íBàÒ˜B°²B«ÚìB+„šB¤Ê²BìBw-œB&º²BeìBDÕBm†²Bö©ëB8wŸB|D²Bp:ëBf¡Bƒ²B™íêBë¿¢B,űB=ªêBˆi¤B+±B"êBí¦Býr±B7KéB†§B·m±BuMèB[â¨BŠ‚±B 5çB0ªBÂ’±B'æBl†«B¤±BÆåBܬB”°±BÆÿãB0*®B±«±B;ÓâB¡f¯Bͦ±B²¦áB£°B±B¸\àB¿À±B¦ ±BÓñÞBµ³²B²±ByhÝBq³BPʱBÍÛBÙ´Bê±BD0ÚBaŽ´B†²Bw’ØBɵBª?²BðÖBõŒµB|g²BHGÕBÑéµBV‰²B––ÓB"¶B_´²BäÑB64¶B3î²BÑ2ÐB^,¶BÚ4³B½ƒÎBÙ¶B¹³BñÕÌB¦¶B±Ó³B¢)ËBºåµB¨4´BŠƒÉB_ªµB´¦´B™åÇB‡XµBm'µB-KÆBç µB{´µB†²ÄB«Ê´BF¶BÍÃBþ´Bô¶B2“ÁB«9´B0÷B¶$ÀB+ųBØ£¸B1ǾBß>³B<…¹B­d½BªÇ²BsvºBƼBÖ\²B&†»BèÁºB¿ù±B¼¼B/˜¹B7¯±Bù¾BCޏB’ޱBZ‚¿B£¢·B*—±B ýÀB‡Ð¶B*À±Bh~ÂBí ¶B&î±BBüÃB;µB¹²B³xÅBPi´BA-²BñÆB¨“³BÃZ²Bo_ÈB¯²B —²BrÆÉB.À±B8Õ²B+8ËB—â°B³BͰÌB°BPa³B*f9³BhíàBàù€B’ȳB© àB&Q‚B¯´BôRßBqÖƒBâ ´B- ßB|„…B«å³BßB—6‡B4ª³Bš5ßB»ãˆBùZ³Bæ†ßB’ˆŠBdzB…³ßB¡0ŒB §²BKÍßBUÚBpB²BÕ,àBŽwBÀß±BÂÚàBûBþ™±BÜšáBT|’B(x±B§8âBb”Býs±By¾âBC°•BªæB€2Bèq±BçB0ÝžB‹h±BAïæBŒ B¾Y±Bq]æB$+¢BMA±Bl™åB诣B ±BÂäB*¥BL±B”ÙãB˜™¦BбBºÏâBó§B ±B®žáB€+©B“±B3NàB‰AªB)±BvûÞB¨T«BV±B2âÝB5Ÿ¬B1]±BF{ÜBê—­Bq±B…ÛBww®B ±B³}ÙBM8¯B¯±Báö×B"ù¯BÒ±BgbÖBÍš°B}ì±BsÁÔB&±B{ÿ±BµÓBÕw±B>²BhÑB,¾±BD?²B¤·ÏBPò±BËv²BfÎBõ²BȲBZÌBpæ±BÈ-³BP¶ÊB¢±B ´B¿B÷žæBeQƒB ô½B læB™c„B»»¼B¸–æBN…BÖ‚»BfÁæB»†BfOºBKøæBjê‡B"¹BuçB® ‰B³ø·B.ËæBª]ŠBWë¶Bi{æB\ª‹BʶBzEæB¶'BË µB >æB‚ÈŽB²1µBÓOæBŽmBZÑ´BÅvæBÏ’Bçz´BAÈæB0¸“B[(´B/çB®W•BÛ³B9­çBÄñ–BI¤³B\èBu}˜B铳Bž-éB û™B癳B'ÌéB¹‘›Bhª³BàêB¸=B»³B¨FêB6ïžB«Ë³Bn-êBû¡ Bgè³BTõéB;Q¢B:î³B«àéB…¤Bc¾³BˆÛéB¯µ¥B t³Bö¦éBâ_§BóK³BNüèBï¨B«P³B²úçB-OªBq³B®äæBõ«Bµ|³BvæB­BT}³BýFåB%œ®B#~³B7¤äB 0°B®p³BiýãB>ñB5–©BCËëBC{›B©SªB€ ëB ÒœB4åªBPêBÀ?žBJ«B¡±éBÉŸBr’«Bz éBÍ]¡BuÌ«BL^èBîߢBŒù«BÓnçBÁI¤Bî¬Bƒ\æBv›¥B6¬BÚ>åBBä¦B’S¬BOäB7+¨Bïr¬BõâBSh©BM’¬BÐÊáBo¥ªB©¬B«†àBüÈ«B‹³¬B ,ßBWÒ¬BS¿¬BŽÂÝB'Ç­BØÙ¬BóMÜB©®B2þ¬BÎÚBîv¯B] ­BÜBÙB®0°BÜ­B­×BcÒ°Bïã¬BâÖBAc±B›¿¬B¹tÔBÀì±B“—¬B×ÕÒBào²B±‚¬Bù1ÑBBç²Bƒ¬BZŠÏBÓR³BŽ€¬BãÛÍB ž³Bym¬B‰(ÌB»À³BëD¬B^uÊB;¿³Bì¬BÍÅÈBK°³B §«BMÇBµ“³BK«BrÅBÞl³BÍíªB ÊÃBŽ<³Bè…ªBš&ÂB¬ü²BXô©B2–ÀBJ²BB©Bó¿B*²BG|¨Bè½Bò¬±B/¥§B“B¼BÓ/±BPº¦BõìºBب°BŽÄ¥B§§¹B¬°BˆÏ¤Büd¸Bôm¯B#Ô£B!·BCÚ®BÒÊ¢BÃàµBX®B€­¡Bø­´B¬à­Bm B½³Bó™­B ŸBÁ”²B”º­Bè¬BH¨±Bÿ"®B PœBϰBB²®B~îšBð¯B+¯BÔˆ™B ¯B}Œ¯By&˜B´®BUݯBÙÒ–B½­B$°B!ˆ•B¬B e°BN1”BGÿªBk«°BuÏ’B¼ ªBâé°BFTųBIãB§U€B÷W´B%âBZ°Bœ¬´BZ}áBÅ9ƒBµ¸´Bç%áBœä„B­›´Bæ2áBG—†Bœs´B™1áBAIˆBŒK´BK0áB<û‰B ´B›êáB€‹B À³BÎuâBŠBc³B£ÇâB‘¸ŽB©ó²BÆ ãBgXBäs²B®`ãB)ð‘Bfí±B8ÎãB€“B®™±B<äB‚•BÂx±B‘ÅäBï¹–BÞi±BezåBtF˜BÃf±B¸YæB½™Bz±B~MçBJ&›B…™±BJ9èB铜B)·±B‚-éBüBбBêßéB*‰ŸBtÙ±Ba êB¸:¡Bå±B¢ëéB;í¢BkÓ±BÇéB*Ÿ¤BO›±BBwéB÷G¦Bºi±BÖèB-Ú§BÐR±B½ôçBªN©B}T±BííæB쪪Bšd±BšÛåBàý«Bër±B ÍäBæS­B7…±B3·ãBᣮB¨‹±Bþ”âBÀé¯BÑ„±B²]áB¥±B&~±BWàBÍ+²B’ˆ±B ‘ÞB ³Bðœ±B‚ÿÜB5¶³B¬¶±B€bÛBÈB´Bñ×±BÄÙBxÉ´Bô²B¸%ØB·MµB5-²BÖBL¾µBûQ²B´ÕÔBK¶BÆt²B3$ÓBÁ<¶Bô ²BqÑBJK¶B9ܲB†ÀÏBÙ>¶B#³B’ÎBú,¶BÉp³BÜcÌBh¶BzƳBë¸ÊBÅïµBl+´BåÉBଵBì ´BãxÇBVVµBC"µBŠÞÅB` µB›®µBÂEÄB[È´BA¶B¯ÂBᇴB-õ¶B=-ÁBí%´B¨È·BŽÄ¿BÀ§³B¹©¸Bh¾Bf³B勹B`½B‡§²BߺB=®»Bs;²BŽ—»BêlºB×±B×¼BK¹B%—±B 6¾BI¸BÀ€±Bc¨¿BÎd·Bö‘±BÆ%ÁB¡—¶B´¿±B8¦ÂBàϵB‚ë±BÜ#ÄBjµBª ²B; ÅB¹.´B–*²BëÇBHW³BóX²B8„ÈBÒo²B0”²BßíÉB+„±BXϲBnaËB&©°B- ³BÚÌB¾Ü¯BUW³B0Ø·B="èB¨‡B÷êµB»çB;áˆBδBäSçBåŠB§³B :çBY‹B¥‡²BÏZçByžŒB¸o±B çBÛäBаB&âçBQBwݯB@èB"ÖBÚ2¯B­·èBúT’BOÉ®BúréBgГBVήBò_êB—>•Bˆ÷®B:2ëBbº–BN ¯BèÑëBzO˜BH¯B%LìBñ™Bæ=¯BðôìBI‚›B h¯B:ËíB½ûœB˜^¯B¯ŽîBwžBb¯BŽ$ïBº B}†®BQmïBX«¡B_C®B‚fïBéY£BºD®BÒÕîB*õ¤BÿZ®B½îBq¦B m®BBíBÕ§B y®Bí÷ëB+,©B ®BTéêBh‚ªBeˆ®B=ÕéB/Ô«BoŽ®Bë¸èB/­B©Š®Bl’çB=a®B$‰®BæVæBߎ¯Bûˆ®BåB奰BÊ®B°¥ãB`¦±B*–®B;âB‹™²BFž®BóÉàBƒ³B ž®BÜGßBdO´BŽ®BÚ±ÝBð´Bãn®B²ÜBkµBOP®BNlÚBâµB§4®B¬ÇØB:U¶BÃ&®B×Bw¹¶BR/®BppÕB;·BE®BξÓB:·BÅQ®B¢ ÒB„T·B_[®BŸUÐBÁZ·B=o®B¡ÎBád·B“®B^íÌBùg·Bý®BÁ:ËB®R·BÚ®B¾‰ÉBª·BJè®B'ÝÇBôȶB-£d«Br›âBò€BÝs«B3ÌáBŒq‚B]}«BBPáB`„BÛ~«Bà.áBëÅ…BJ«Bå9áBHy‡B¾³«BÉmáBt(‰B1Þ«BP­áB„ÕŠBÒ ¬B‚«áB‡ŒB ¬B‚•áBÔ9ŽB,¬B:–áBvíBÄ$¬Bg¼áBŸ‘Bqÿ«B’âBÏH“Bì«Bi¯âBãÛ”B˜‚«BC‡ãBlQ–BY‚«B…mäBâ×B.®«BßKåBy8™BsÜ«B‚æB“šB˜ö«B¥mæBÂgœB$&¬Bï?æBŒžBsK¬B^æåBz¿ŸB)r¬B»HåBT¡B¾­¬BhäB9Å¢B>ç¬BógãB³!¤Bê­BËRâBo¥B±*­B $áBL©¦B$2­BDÕßB]Á§B¾5­BBqÞBC¾¨B;;­Bo ÝB‘¸©B¹@­Bœ¥ÛBß²ªBtJ­BÎ;ÚBJ§«B7V­B}ÊØB/¬BÃ`­BON×Bg­B1g­BgÆÕB(®Bác­By4ÔBeÓ®BìT­B~šÒBÓi¯B»H­B¯ûÐBÂò¯B%D­B¶XÏBÿn°B“?­B÷®ÍB½Ñ°B•,­BdýËBº±B8­BJÊB ±B¾Ä¬BHšÈBþ°BÛe¬B:óÆBtȰBGø«B4VÅBn°Bð„«Bx¾ÃBa°B¯ «B-ÂBНBJAT°Bû©áBu^B!3±B’GáBŠÇ‚BJ-²BMBáBÑ+„BÐë²B¥áB®…BoO³Bf!âBã6‡Bœf³B’$ãB •ˆB`G³BväBaû‰Bßß²B$ÅäB‹Bµ.²B 0åBÿŒB¨©±B-—åB%‘ŽBeM±B• æBF+B| ±B™æBßÁ‘BÞ°B¥OçBaK“B9Ó°BÙ.èBöÁ”B"ܰBSûèB C–BÑó°BÛ©éBåÑ—B0±B´5êB¨m™Bç1±B‘œêB›BL±B£ÚêBœB*9±BÁØêBvžBY±BžêB# BÔ°BDIêBwË¡B⦰BµÔéB m£B§y°B'`éB¤¥BÌO°B¡²èBpœ¦B¤1°B*ØçB´¨Bç°BÁäæBC~©BZ°BÛßåBôÛªBè0°BÇäBl)¬B¸J°BL›ãB©e­B–^°Bþ\âB¿®Bd°BüáB ª¯BÀ_°B[·ßB¶°BZi°BdMÞBQª±B\‚°BûÌÜB^x²BŸ°B<ÛBâ#³B¶°B.¢ÙB’¹³BMʰB ØBÙ=´Bß°B¹\ÖB߯´BIõ°B²ÔBT µBa±B—ÓBåMµB1±BRPÑBKrµB±a±BðÏB{µB˜¡±BvíÍBzwµB|ì±B?ÌBÕeµB.=²BJ“ÊB >µBº–²BéìÈB²ù´Bjý²BENÇB´Brl³B²ÅB?´B«Þ³B‹ÄB5â³B1X´B|ÂBò‰³B—ð´BõÀB+³BÓ£µB΀¿BZ‚²Bd¶B~¾B*ñ±BÉ+·BᨼBzh±BX ¸B?K»BeݰB\ý¸BºB‘B°BzºB¼Ú¸B>»¯Bm»BºÏ·B«h¯BØÕ¼BݶBˆK¯B©C¾BpðµB±N¯B/­¿BJý´BU¯BÕÁB]´BýO¯BówÂB  ³BW9¯B ÙÃB¢²B6¯B”:ÅB"±B§¯B¼¢ÆBw°Bmç®BÈB“,¯B¶Ô®BÂzÉBE>®BÒ®BKêÊB]T­BÀÍ®BæXÌBði¬B¸®BwÆÍBK~«B(ž®B)-ÏBv‡ªBŒ®Bú~ÐBës©B7’®BD탦BonâB‚…B¦BŒ±âBi½†Bøè¦B!.ãBXˆB½W§BéÏãBS݉BÞ§BÊuäBÞa‹B&¨Bù&åBŽãŒB}¨BæåB–aŽBèB·´æBÛBâó¨B¬çB/R‘B@ ©B˜TèBwÕ’B©BéBvd”B»©BU¥éB‚ù•B(&©BVêB!¢—B®P©B¤/êBÈQ™BCéB<ÂéBÊçšB9LªBUéB^cœBÿΪBÛ_èB£ÕB$«BPÇçBeŸBŸd«BŸ"çB’ó B¬ «B NæB k¢Bš×«B|UåBëÍ£Bà ¬B;FäBÜ¥Bí=¬Bù6ãBÌq¦B~d¬BâBÛ»§By¬BkñàBeù¨B̈¬BŪßB¤ªBÓŽ¬BØKÞBv«B—¬B÷âÜBG¬BÝ©¬BzqÛB~ü¬Bî¬B‚öÙBQÔ­BЬBÒrØBG®BάB©æÖB„U¯Bô¾¬BÙSÕBþ¯Bô¥¬B“¼ÓBWš°BÏŠ¬B!ÒBÃ*±B8}¬BœÐBJ«±B,¬B6ÙÎBƒ²BÝq¬B–)ÍB_²B«B£–BÖœ¬B9«BU±”B¢²«BµâªB F“B®ÌªBþœªBoæ‘BcØ©BÛQªBØ–B\ͨBEªBtWBd·§BÈ¡©BM”Á¹B¬ßáBªWwBיּB§†âB/|zBtª¹B†6ãB)š}BP²¹BþìãBY€BØŒ¹Br¡äB>äB¾@¹BTåBjƒB¤¸BDÒåBí„B»«·BþÔåBþR†BU¡¶B±åB’©‡B‹µB1±åBtøˆB†´BmÌåB TŠBµ¹³Bi æB¥Ë‹BÑø²BïqæBËIBbe²BòÉæBbÚŽB3²Bê"çBÌzBxÀ±B2©çBT’Bß“±B^eèB4š“BM‡±B"=éB •B³±BõéBV –B ¤±B‘„êBa;˜BÀ±B–åêBbã™BÜÞ±BœëB7“›Bcæ±B&ëBòFBmƱB4ñêB{÷žBMŒ±Bp—êBž B-R±B¬=êBD¢BC±B\èéB“ì£B‘ç°BÎzéB*¥Bû¶°BÖèB §Bé™°BvüçBª˜¨B]°BçBÿ©B±”°BA÷åB«V«Bñ¤°BxÞäBQ¤¬B®º°B‹·ãBJå­B­É°B¶€âBa¯BʰBS;áBk:°B2°BtçßBcL±B¹Ë°B6yÞB':²Bá°BóÜB‘ý²B?û°By]ÛB-ž³Bf±B¸ÁÙBv.´BŒ/±B"ØBâ²´BªK±Bç|ÖB5$µBæf±B¢ÑÔB`|µB]ƒ±BA!ÓB'¶µBé§±B‰nÑBŠÒµB†Ù±B,¼ÏB ÓµB.²Bá ÎBʵBEe²BŸ]ÌB|·µBض²BܱÊBúµB³B; ÉBùLµBͳBœnÇBwñ´Bxò³BÓÅB •´BÜl´B8ÄB°@´BPí´BùÂBçð³BIŒµB#ÁBI³BMG¶BX¥¿B%õ²B1·B?¾B;b²Bæ·B¤Ú¼BœÚ±B³Æ¸B‰|»BÉU±BñĹBË3ºBKаB“ïºBë ¹B]^°BÜE¼B׸Bã!°Bư½B ·BΰB~"¿B(-¶BŠ$°Bè“ÀBFGµBS:°BÂBÆ`´B—?°B”tÃBAv³B,5°BÜÛÄBÀ²B·°BA?ÆBö†±BÐú¯BÄ ÇBb°BǯB™ÉBN—¯Bí¢¯BoÊBG¤®Bƒ„¯B±×ËB¤´­BøS¯BP?ÍBþȬB/ ¯BתÎBïÞ«B?×®BSÐB æªBB¯®B*ªü¸BunæBE€B@ä¸B&WçBAµB¹B5PèB¨ƒB·.¹B¬(éB(’„BÚì¸BäˆéB-6†Be<¸B.—éBKćBb·BéréBo;‰B¶BAFéBòµŠB)¼µB˜éBu0ŒB2ñ´BÁéBu±BY8´BºéBî;BT¬³BóéBŒØBL³B9éBy~’B§ý²BiÈéBÚ”B1ɲBèªêBóƒ•BÔ´²B{ëB¨—B“¸²BŽìBö™˜B³Ç²BkìB2EšB¨×²BzgìB²ø›B/ö²ByìB¢Bóô²B´ëB®LŸBÍÆ²B¦=ëB¥í B „²BwÁêBŠ¢B B²BlzêB3¤BXù±BˆQêBÊÞ¥BW¼±B»äéBq€§B®œ±B`éBz©B8˜±BmèBçeªBÍ ±BPçBSÀ«BÁ ±B7æB('­Bßž±B›(åB­®B,£±B%äBQî¯B§±BBãBñ1±B“«±Bë¶áB€P²B)³±BeRàB•L³B'DZBaÇÞB=´B=Þ±B'ÝBV‰´Bú±B¶ÛB ú´B!²BßÙBzqµB9U²B÷?ØBçïµBˆˆ²BœÖBÀ]¶Bú³²BhðÔBf­¶B2À¸®B’ãBnñ‚Bë=¯BNüâB„BÜÁ¯Bä:ãB”*†BÛ°B!½ãBfÀ‡B³B°B2mäBtM‰B>°B ëäBìŠBQ¦¯BE7åB‹ŒB?:¯B¤’åBG'ŽBÝ®B:!æB¸BZy®BGáæBB3‘BøC®BŒÅçB$£’B—®BЩèB”Bî®Bn éB³z•Bá=®BÀ~êBð–BéY®B¿,ëBÛ~˜B'k®B³ëB8šB䈮BebìBL«›B]µ®B,?íB¾ B.¶®B¬üíB{©žBÿk®B2hîB_I Bh®B=~îBñ¡BÉÚ­BriîB¢£B ë­Bë¾íBú2¥B®BVÝìB³§¦B‹®B]ÝëBž¨B¢®BÕÎêB·^©B–'®B´¼éB²ªBn1®BR§èBĬBA7®B§‹çBRN­Bò>®B‚^æB&Š®B™B®B åB­´¯BA®B ÐãBx˰B1F®BàqâBRбBqL®B áB¬Ç²BL®Br”ßB ª³B >®BÞB5a´Bä®BjÜB>é´B û­BŒÈÚBeµB2Ø­B%ÙBÅÚµBæ»­BY~×BáE¶Bì°­BïÒÕB– ¶Bž¼­Bi#ÔBUå¶B®Ä­BÂpÒB6·BŒÍ­Bˆ¼ÐB;.·B8Ü­B=ÏB‹E·B¾ò­B÷SÍBV·Bõ ®B¦ŸËB€R·BÑ®BëÉBC5·Bw®B:ÈB)ÿ¶Bñ­BÙ‰ÆB>¶B$ Y¹B¹bàB$zBXP¹BKôàBÉY}BŸt¹B´•áB>@€B–€¹B®3âBkÖBŽŒ¹B¨ÑâB˜lƒBÎN¹BF\ãBQ…BêܸB²ÒãB™†B§T¸BÕgäBsˆBs©·Bí åBL‰‰BìжBx…åBqïŠBëãµBîåBÍMŒBÔö´BÚjæBr¥Bü&´B³ÍæB{B줳BþæB›´B!O³B ;çBŽ[’BijB…¨çBºú“Bã²BI=èBf•BƲB2ïèBÊ—BÓ ²B¤éB9¨˜BxÁ²BbIêB˜:šBzÞ²BÜ¢êB,ä›Bø²BaµêBÏ–B?³B¤êBJŸBÞ³BLêB%ü Bš'³BÌPêBý¬¢B4³BsQêB£`¤BײB¨dêB­¦B‹Ž²Ba êBù¶§Bsn²BÁ^éB`<©B¨r²BÈXèB>™ªB.}²BÊXçB^ú«B±v²B‚æBîu­Bg²BðÂåB—ý®B\]²BÒûäBp°Bžg²BêóãB¼Ü±BYr²Bo¸âB> ³B5º¨BaËëBÞðšBf©B. ëBÄOœBû©BD>êB³BLvªBåéBš(ŸBxתB{ÙèBÒ® B¶#«B­èBî/¢Bv_«B¡2çBË›£BŽ«B%%æBÉï¤Bc¶«B€åB@7¦B¿×«BÓäãB{§Bù«B&ÂâB徨B]¬B×–áBëú©BŸ/¬B¬RàBz«B‘9¬B øÞBÚ'¬B?C¬BGŽÝBV­BT[¬B)ÜB‰ü­BꀬB-—ÚBÇ®B‰Ž¬BÒ ÙBG…¯B†¬Bå{×B0°Bb¬BðäÕB̰Bž;¬BÈKÔBY`±BجB³°ÒBî±B‚ø«B£ÑBõ’B§ÇªB1q®BL—‘BÅ©B&z®BQªBƒÔàBCB¯©BA—ßB•3‚B«†©BYùÞBäǃB„c©BÆÞBGw…BÂN©B¿ÞB*‡B™`©BèùÞBÚˆBÁ›©Bî{ßBÐuŠB÷Ú©BÞßB±ŒB{ªB,üßBVÈB(ªB§çßBQ{BÝð©B5ößBe+‘Bóƒ©BÊ$àBÏÎ’BJ©B˜eàB)q”BuŨBï·àBJ–B˜¨Ba(áB·—Bƨ¨B5êáBC=™B_©BÂ×âB¾žšBÁ=©BÙ‡ãB²)œB§4©BÊÎãB¦×Bþ ©Bº¾ãB¼ŠŸB8©BƒQãB0¡Bl©BâB¤¹¢B1©©BÉáBÏ1¤Bbô©B”ÏàB½¥BjªBßB µ¦Bë&ªBË3ÞB"¾§BX0ªBÑÐÜBS¼¨Bõ5ªBàjÛBt¶©BJ=ªBàþÙB³§ªB DªBà’ØBñ˜«BÁCªBß ×B¬BI*“¯B»-áBP?BÕ°B¢’àBÙÁ‚B/»°B¸làB@R„BsY±Bé“àB/æ…Bl¹±B–áBW{‡BÛ±BùáBIíˆB=ͱB3ÜâBtaŠBrƒ±BsãBÏó‹Bà ±B·¾ãBÄB„¶°B"äB¹/Bšƒ°Bè«äB5ÊBe°BëRåBÔ[’BÝN°BmæBøÝ“BØJ°B°çBiP•Bå\°B¥ÝçB)É–BÔ°B¤èBÚK˜B÷£°B¶IéB…Ý™B ðBVÊéBÚ|›Br×°B êB·'B9ðBö+êBèÚžB—°BùéBƒ‰ BEm°B-žéB¼1¢BÛH°B9 éB×É£Bp$°BEtèBòa¥B:°B¨çBâ¦Bêè¯B\¾æBQ¨BBܯB®ÃåBﵩBEä¯BC¶äB «BP°B’ãB P¬B3$°BYâB6~­B52°Bi áBÁ™®B3°BŸ³ßBd¤¯B;°B}OÞB¡°BrS°BðÛÜBc…±BÕw°BNVÛB®G²Bþ°BXÂÙBeì²B £°B«$ØB)x³B´°BÖB)ñ³BfŰBiØÔB^W´BÂÙ°Bý*ÓB}¦´B û°BøyÑBlØ´B`,±BÈÏBƒí´Bil±B¢ÎB3ð´Bµ±B¾hÌBåâ´B8²B^¼ÊBRÀ´BM]²BßÉB$´B²BàtÇB{(´Bw0³BØÅBkʳB¢³Bñ<ÄBül³B ´B¹¡ÂB~³BU«´BµÁB²BàYµB­Ÿ¿BZ²B¿¶Bv.¾Bw‡±BÖ¶B_¾¼BG±B©«·B¸]»B›q°B˜¸BƒºB‰Ë¯B驹BÜé¸Bb-¯BÚëºBEØ·B}Á®BL¼B~ݶB銮B^µ½B5êµB³}®B¿B¯ò´B%®B(ÀB"ö³B{®BpèÁBгBàn®BôSÃB÷²Bra®B¸¿ÄB#±Bœ_®Bn.ÆBC8°BðQ®BØœÇBnM¯BN=®B{ ÉB5_®B¸1®BO{ÊBöx­BÌ.®BBîËBŽ”¬Bö*®BÜ`ÍB°«BÄ®BEÑÎBæÈªBJ®B”4ÐB[Í©Bôí­B&P–©BiˆìB¢WšB€iªB5ÝëB@¬›Bu«B'*ëB“ Ba•«BF‰êB4‘žBà«BÏêBl( B±¬BvuéB»Á¡BNO¬BêèB [£BG|¬B'èBtÞ¤Bž¬B³4çBŸG¦B|´¬Bo æB¥˜§BðɬBåBâå¨B‹ä¬BOêãB/ªB²­BjÅâB¦p«B})­BÔ‰áBxœ¬B°=­BÚ8àB`±­BP­BˆÕÞBœ®®Bxm­B8fÝB!™¯B³’­BáéÛBÉl°Bú®­Bk_ÚBŠ&±BU°­BÇØB7ñBî”­Bg&×B¢B²B˜t­Bx„ÕB¾²B}O­BâÓB^6³B6­B'<ÒB”¥³Bh3­B…’ÐBç´BžA­ByåÎBD[´BêJ­B&3ÍBì‹´BN­B;~ËB¾™´B<­BˆÉÉB{“´BÁ ­B³ÈBü{´B«¿¬B&kÆB W´Bág¬BáÀÄBH1´B ¬B ÃB9´BÅ“«BÏyÁBôÁ³B óªB,ñ¿BT[³B3ªB?}¾Bà²BÇk©Bí ½Bc²B‘¨Bש»B<æ±B+ÛŠ±BªJáBAB]8²B-’àBt‚Bv޲BÚïßBnÿƒB°²B¬ßBø­…B½u²B§­ßBõ`‡BÿF²BtößB) ‰BW²BÀhàB¬ŠB¾±Bˆ¥àBSUŒB¤o±BŸ°àBåŽBϱB}±àBõ­Bò°BðáBT‘B·Ú°BŸáBóð’B·Ó°By âB0‘”B÷ܰBöžâBA2–B=ΰBÒpãBM°—BBÀ°B`läBy™Bá°B]åB>€šBfÓ°B¸æBÙ œB{ë°B)æBë¬B{ô°BlÀæBù]ŸB õ°BCkæBr ¡B ó°BÞ·åBß–¢BÞ°BUìäBü¤B»Ã°BÏ äBcŒ¥Br©°BI)ãBʧBŸ”°B¿6âBÃj¨B˜°BáBóµ©Bp£°BìÚßBÿÞªBÈ©°Bm}ÞB·ä«B»°Bm0ÝB„þ¬B$â°BÖÜBS=®BͱBÞÚBµw¯BQ=±B~ÙBÑv°B@_±B<÷×B 7±B|z±BA\ÖB"ɱB‘±B‹·ÔBq=²B’£±B ÓB'’²B¾Ã±Bh[ÑBïβBÑð±B4ªÏB›ô²Bå,²BIùÍBÝþ²BÚy²BvKÌBƒé²B2Ö²BC£ÊB=¶²B ?³BøÉB i²B2ùͱBSáBB9€B¼˜²Bù…àB2€B9³B°ßB-æ‚Bô>³B‘EßB‹„Bž)³BšßBÁ;†BÕü²B "ßBí‡Br¸²B\ZßBÜ—‰Bìa²BßB¥?‹B· ²Bà§ßB—êŒB¼Ë±Bº”ßBõ˜ŽBœ±B€ßBìEB™O±B ÔßB–î‘BÞ*±B'FàBÞ‘“B ±B^¿àBá3•Bú±B+NáBrÏ–B÷Þ°BâBQM˜Bõ°B÷'ãBߤ™B‡¤°BU!äBo ›Bа°BíÙäBH•œBÁаB6RåB7žB²ð°B€ÊåBÅØŸBJ ±BÜ÷åB†‰¡BF±B·£åBö4£B†±BøåäBN½¤BYë°B5äBþ9¦B¦Í°Bu-ãBŽ«§BèŰBB.âBN ©B^Ò°BÔáB9OªBá°BÇÂßBBr«B4æ°B»`ÞBÛq¬B?±B™#ÝBŸœ­Bp,±B¤ýÛBOÜ®BØ]±B–ÆÚB °B­…±BÛ[ÙBú°B´¥±B-Ï×Bô®±B}Á±BM2ÖB†;²B!Ú±B\‹ÔB §²Bùò±B4ÝÒB¾ð²B­²Bm,ÑB ³BŒP²B{ÏBÄ5³B›”²BJËÍB/1³BÐç²BfÌBé³B+I³BªyÊBŸÒ²B•¶³BÛÈB–}²B0´Bþ?ÇBD(²Bæ¶´B€¦ÅB†à±B®GµBùÄBT›±B³âµBtÂB‡J±B¶BaýÀB×Þ°BÿF·Bǃ¿BVd°B!¿½ªB¢®íBóÒ›Bøm«BÂøìBÃ5B²Ñ«B”HìBé·žB)¬Bþ«ëBêK BÀ-¬B™ ëB`ß¡B[¬BýSêBÑg£B†¬BÍjéB¨Ö¤B›¬Bá_èB·.¦B8°¬B¸HçBq}§BSŬB1æB+̨BݬBÆåB±ªBÚü¬BPõãB¿\«B"(­BÊâB†—¬B•B­BY‰áB€¾­B>Y­B´4àB¹Î®BDw­B˜ÏÞBTȯBL­B8\ÝB!«°BeÉ­BÚÛBr±B‚â­BHÚB(²BìÚ­BO©ØBŒ¥²B~¹­BÁ×B{³BX•­BX`ÕB‰³Bn­B(¼ÓBwú³BÁY­B«ÒBn`´BÄ^­BìgÐB8º´Biq­B¸ÎB¿ÿ´B‚­B™ÍB&µB§­B°PËB',µBZ…­Bá›ÉB0µB^­BÐéÇB¿þ´Bb­BÂ;ÆB Õ´B%ʬB{ÄB®´Bo¬B/çÂBÔƒ´BE³F¥B„áB›ÍBŽ?¥B?áBP}ƒBï7¥B‘sáBé-…B7J¥BXÀáBÚ†B“¥BŸBâB tˆBm¦BüâBAè‰B0•¦B=·ãB‘\‹B­§BXpäB©ÓŒBb†§BÇ,åBTJŽBó§B0óåBî¾BHL¨BÊæB`/‘BÉ|¨B•’çBƯ’Bù‘¨B’BèB!>”B-“¨BËÙèB וB„«¨Bà(éBô‚—BKͨB~>éBè4™BÖ©BcÞèBךBƒy©B8èBŽ^œBçÌ©B‰ˆçBßäBL ªBÙæB/kŸBnXªBDIæBé¡BTŽªBüžåBª¢B8ÕªBHµäBú£B|«Bj­ãBŒM¥Bêd«B€‘âB›‘¦BCœ«BqláB?ЧBç´«B/àB{û¨B×Á«ByÛÞB ªBºÆ«By«BdüÍBêó±BøL«BKÌBí²BhùªB^ŸÊB¬ö±B”˜ªB%÷ÈBØÏ±BŒ.ªBF¶B2¬B3ÕŸB6µB¤¢«BÒ´žB™í³B-«BÙsB|˲BÚûªB=œB¤À±B îªBˆ¿šBϼ°B7ܪByj™BBªªªB˜Bžµ®B1jªBN¨–BëÈ­B†#ªBÄ=•B#è¬BîÍ©BÔ“B½ ¬Bj©Bil’Bt?«BÉã¨B§ ‘B€ªBÛ;¨Bn§BùÒ©Bÿ‡§B7ŽB¡L©B̦B ó²­B GãBb ”B°­B©ZäB§ò•BŒÊ­BEcåB‰L—Bô­BVæB*´˜B¿®Bg$çB2šB>?®B4ÂçBBÇ›BfR®Bä-èB2mB1[®BûKèBäŸB‰_®B7 èB“ΠB›a®BÔtçB„h¢BÍe®B¦æB‚è£Bÿi®Bc×åBh¥B$i®BÕæäBfÔ¦B=c®BæãB5¨B i®BÚâB·©B1|®BÞ¶áBÄѪB鎮BsàBÿõ«B6˜®BïßBký¬BƒŸ®B‰°ÝBÚö­B®®BüBÜBdå®BfÇ®B>ËÚBίBçÝ®B´BÙBT°Bí®BÙ«×B ±B©ó®B4 ÖBð©±Bßò®BÜjÔB`(²Btî®B<ÅÒB\›²Bö®BfÑB”ý²BÙ ¯BqnÏBSO³B)¯B¾ÍB^‡³BûV¯B9 ÌBˆ¤³BꎯB±ZÊB:¬³BáįBO©ÈBH˜³B.Í®BÜoâB,ûB'¯BFâB›ƒB²\¯B‹àáBÖH…Bˆ¯BüäáBfú†B7±¯Bf%âB§ˆBŽÁ¯B?€âBzQŠB'¯B¡¯âB5ŒB¿U¯B]«âB¯B;0¯B…³âB?aBa8¯BáìâB8‘BðQ¯BvWãB·’BLb¯BaäBpG”Byl¯BþþäBª«•B7„¯BûåBñ—B„­¯B1ëæB©x˜BkܯBø»çB›ô™Bü¯B¨]èB>ˆ›B °B‘ÑèB,BΰB½éBiÜžB8ø¯B¤çèB;Ž BnܯB zèB;3¢B¤À¯B› èB<Ø£Bñ¨¯B]^çB:g¥Bš‘¯BßæB¢Ý¦B}¯B­ŒåB0G¨Bjv¯B†ŒäBH¨©B…¯BSyãB˜úªB‰ª¯B¤LâB¿4¬BïB1áBwT­B>˯BɪßB/^®B/Ò¯BHGÞB¸[¯Bæ¯BdÛÜBgL°BϰBÂ]ÛBb±B$°B>ÐÙB’ѱBã5°B¥5ØBf²BA°Bˆ“ÖBÜä²BÓJ°B³íÔBÖV³BÊT°B6DÓBXº³B¯n°BÍ•ÑB6´B©—°BåäÏBF/´BfͰB•3ÎB4E´B+±B_ƒÌBåD´B1[±BÕÊBM-´Bô¬±B?+ÉBûø³Bs ²BzˆÇB¤¦³B x²BÁëÅB9H³B,ªŒ­B¥ãBL¯ƒB;­Bö™ãB `…Bñð­BÝŽãB͇BÒ&®Bó…ãB&ÁˆBp]®BøãBtqŠB´BÉÉ®B±ÑBøŽ´B¸ë®BšWÏBÈ´B¸¯B³¥ÍBÉä´BøR¯BkôËBÃæ´B¯BDÊB:Ï´BÜįB—•ÈBú˜´B. ¬BiãB XBmÒ¬BdîâBð÷‚Bƒú¬B¼âB §„BÃ!­B´âBûX†B N­B„¶âB€ ˆBo~­BÂÀâB{»‰B‡­BŽÏâBön‹Bfq­BŠÔâB8"B¦b­BåãâB†ÕŽB­n­B©ãB{…B.­B‚†ãB +’B‡‹­B:päBU›“Bô“­BåBÃï”BTª­B÷’æBœB–BrÌ­B+}çB÷°—B–ô­B@èBð4™B®BXíèBÇÚBO-®B²‹éB/YœBt4®B>ñéBžB-®B|ñéBÆ´ŸBÕ$®Bc¬éB c¡B–®BIgéBM£B—®B8ÊèB¨¤B®BíçBù¦BÌ®B íæB2§Bã®B çåBÞ¨B’&®B¦ÙäB,5ªBß?®B†½ãBn«B‰h®ByâBñµ¬B¤®BDáBœÓ­Bí®B–èßBœÛ®Bêž®B€ÞB(Ò¯B|»®B7 ÝB5³°Bmå®B¾‡ÛB¨x±B¥¯BIôÙBJ²B¯BTØBw£²B0þ®B¤®ÖBë³B­õ®B4 ÕBVгB7í®BqcÓB‘ü³Bãö®Bº·ÑB'V´B¯BhÐBp—´Bt=¯BWÎBU¾´Býu¯B°¥ÌBgÊ´BʝB÷õÊB¾´B~õ¯BÃFÉBä•´BA0°BÉœÇB7G´B,ñ¾¨Bó,âB?‚B ‰¨B•9áB1è‚Bò^¨BhÍàBXŒ„BäG¨B˜ÊàB?†BLQ¨B þàB<ð‡Bïz¨BñgáBú”‰B޲¨BlâáB3‹B ï¨B"UâB“ÓŒB•/©BzÄâBtŽB‘U©BqQãBÍBëm©BäB‘B°z©BÉäBt “BÌs©BNŸåBEœ”Bla©BufæBÑ–BNc©BáìæB„¾—Bc{©B~:çB·j™Bž¯©BkçB››Bóç©B̪æBù¼œB0ªB@æB]bžB !ªB­ÇåB— B-SªBêåB‰¡B½¯ªBß äB#à¢B; «B<öâBe$¤B[«B¶ÛáB¾g¥B›„«BcžàB¦¦B«B‡DßBïš§BÈ”«B«àÝB˜¨B™«BÐ|ÜB •©B Ÿ«BxÛB¬ŽªBÝ««BŠ©ÙBL~«By³«B,6ØBd¬B3®«B¼ÖB­>­B¶›«B.:ÕB¥ ®B€«B•°ÓB'Æ®B,]«BV!ÒBt¯BSH«Bë‡ÐBL °BöB«BWåÎBÖˆ°B÷&«B„7ÍBçÒ°B{ÞªBňËBß°BVuªBUáÉBCɰBeªB¾<ÈB3¤°B¥©BµÆB&`°B»©B8ÅB°B‹¨B8qÃB~¦¯B/ÁË­BdãBë6B³®BÀ¶âB˜Ö‚B:a®B’„âB‚„B•®BZxâB3†B~È®B ‡âB~ã‡B7ú®B ¼âBB‘‰B‰ó®B ßâB¡C‹B²Á®BˆßâB˜ôŒB–®BwÓâB¦ŽBSœ®BhêâB=YBcÊ®B’2ãB’B Ç®B‘äBy“BýÕ®BJåB¾Ò”Bñ®BÀ3æB4#–Bý¯BC-çB܆—BÑG¯BèBÊþ˜B`m¯BÌ·èB¬ŠšBÚ‰¯B€JéB2$œB»“¯Bê©éBcÍBþ|¯BÕ»éBA€ŸBY¯B„ŽéB;0¡B(@¯Bî éBÏ¢B±.¯B¢CèB”R¤B|¯BÙSçB¾¥BR¯B¿ZæBv$§B¯B“VåB®‚¨BÊ ¯BgRäBæà©B2¯B2;ãB²/«BLC¯B‰âB7d¬B X¯BWºàBj|­Bª^¯B€ZßBþ~®Bh¯BsñÝB‡t¯Bj~¯Bœ}ÜB£X°B>¡¯B„ûÚB"±Bf»¯BiÙBy˱BÕȯB$Ë×BU²BzЯBâ'ÖB¾Ð²BÖ¯BD‚ÔBÂC³BýÞ¯B2ÙÒB#©³Bøö¯BA+ÑBZô³B"°B§zÏBt&´BáP°BLÉÍB@´BŸ‘°BðÌB A´BhÙ°BQjÊB\*´B‹%±B¿ÈBSõ³BϱBÕÇBœ³BŽë±BëÅB†=³B$¨AºBn5ãBAwB.4ºBfôãBªPzB@ ºBÁ·äBq[}BPºBåB[/€BVÛ¹BÀTæBÓªBˆÊ¹BK6çB̃B³¿¹B§èBÜŸ„BꂹBÈŽèBã8†B4ü¸BÅèBÈÓ‡B6¸Bµ°èB>W‰Bp·BVœèBµÚŠB›¶B'eèBîRŒBf×µB¹/èBAÔBt,µBèBàcB&¨´B= èB ‘B®B´BÁ5èBô¨’B*æ³Bm¨èB;C”Ba–³BçUéBEË•B f³BnêBR—Br\³BA»êB€ã˜Bxl³Bð.ëBv‡šB憳B¹LëBr9œB¦­³Bô ëBØæBq¾³B‹ÎêBß•ŸB÷ȳBMŒêB‡D¡B¬Õ³BSêBiô¢B…³BPJêBº§¤B+w³BÉZêB«T¦Bh/³B˜êBsü§B³B IéB~©B•$³B6èBxЪBE1³BáBçBd:¬B4'³BÓ‹æBÆ­BU³BæþåBña¯Bƒ³B!aåB'ø°B{ ³BÒ€äBn²B,¸B¬ëB⋇B·BwLëB„%‰B{Þ¶B¼cëB0³ŠB¯0¶Bÿ|ëBóAŒBr†µB¹‹ëBÃÒB4Ü´BqšëB”cB8´B¥‡ëBºöB¥³BŽëBe’BÆ4³BìBc(”B¸í²Bz§ìB0·•BhDzB“6íB²B€’ìB;+¡B“ø±BDìBKÈ¢Bã½±BÅëB¯o¤B#‡±Bu{ëBǦBSX±BÖôêB¿µ§B;±B]%êB94©B‘3±BW(éB‰—ªBu.±B +èB²ú«BA±B6EçB½l­Bùÿ°BëXæB•Ú®Bfï°BMPåB5°BÄü°BêäBJ]±B±±B±´âBze²BÚ$±BèFáB!S³B¬?±BbÄßBü´BX±B›(ÞB<­´B½l±B×€ÜBjµB#ˆ±BŠÚÚBѵB]­±B.7ÙB4ùµBÙ±B“×B|k¶BϲBŠêÕB>ȶB–&²B:ÔBþ¶B|E²B³†ÒBS·B‚i²BÓÐB¹·Biž²BM!ÏBÜ·Bä²B rÍBëð¶BÁ2³BÒÄËBÌ×¶B9³BcÊB£¶BŹBÞVèBu@‡Bñç·B‚þçBzˆB)å¶B%šçB’ɉBÿ¶BWgçBÆ<‹BýJµBNeçBÉÅŒBúŽ´BEcçBÌNŽBXñ³B\{çBQäB€³Bi¤çB&‡‘B—,³B!ùçB~*“B±å²Bë„èBTÁ”B±²BÐAéBÚF–BÌ£²BîûéBþЗBÀ´²BhžêB7e™B6ϲB~ëB_ ›Bwê²BºëB¦¾œB)ÿ²B£þêBqžB…³BºÒêB’" B9³B£˜êBjÒ¡BݳBš}êBf…£BYè²Be‰êB.7¥BÔ“²B¥…êB³â¦BMa²BùéB=|¨BHR²BGéBqí©B^²BèB²G«B.[²B#çBóº¬BmJ²B†^æB×?®B«5²BI¤åB”ɯB6²B¶äB7±B C²B>ŒãBÄu²B:T²BK5âBƒ³B.Œã®BX†âB<BrW¯B:âB¶•‚B6©¯Br°áBè8„B´Ñ¯B”‹áBCé…Bîõ¯B5¨áBœš‡B°Bò âBiA‰BD°B™fâBåëŠB9دBè‹âBšŒB¢Ž¯BËâB2HŽB1v¯B¡âB8úB)ƒ¯BÆñâBY¦‘B“¯BoãBG“Bœ¯B•,äB'ДB1§¯B4 åBØ9–BÀ¯BÏæBp¡—Bùí¯BÀçBÈ ™B®°B‚ÅçB©šBG1°B8WèB»*œB\=°B¢´èBMÔB•/°BÂèB´‡ŸBá°B|èBÿ4¡Bxû¯B¹ðçB_Ñ¢Báå¯B¸,çBRV¤BίBFæB·Ç¥B¼¯BäOåBv/§B$¾¯B/HäB ‹¨BèÔ¯Bp'ãB}Ñ©B¬ë¯B±âBî«Bü°B(ÇàB^@¬B¶°B•oßBŒM­BÛ°B&ÞBÿQ®Bü*°B ´ÜB¼W¯B:L°B~PÛBS°B£l°BUÓÙB&±BŽƒ°B†>ØBøÈ±Bf•°BØŸÖBÉQ²BÆ£°BCûÔBÌDzB¯°B†QÓB$*³B ȰBV£ÑB s³B»î°B¬òÏBŤ³B"±BRAÎBM¾³BÇc±B ‘ÌBç¾³B ²±B§ãÊB¦³B9 ²B:ÉBÿp³B5n²B™ÇB0 ³BÆÞ²B/ýÅB²B#N}¥B0 ÞB&{BLõ¤B]ßBnÅ}B+˜¤B]ÞßBXY€B¼„¤B:OàBóýBT~¤BaœàB⪃Bëy¤B¤ÝàBÍY…BÄŠ¤B 0áBw‡B~ȤBý¯áB†¡ˆB=8¥Ba]âBv!ŠBÀ¥BãB씋BÃL¦B^ÓãB‡BcئBšäB÷rŽBïc§BHåBMãB[á§BSæB—Q‘B'¨BÞÒæB{Ñ’B½A¨BЂçB„_”BäN¨BmèBBþ•B†d¨B‚NèBá«—BQ‚¨BSèB£^™B6»¨B{õçB›Buû¨B™açB™œB]&©BüÙæB¢5žBE©BôcæB$ØŸBßu©BeªåB·_¡B•É©B´µäB¿¢B+!ªB4¦ãB2 ¤B³uªB…âBüD¥Bf®ªBÆPáB¾t¦BYƪBàBi‹§BMÞªB<²ÞB¢¨BÓáªBMNÝBŸ©B{èªB_çÛBÅ—ªB<÷ªBÿxÚB…«B«BÙBTf¬B+«B¹‡×Bø>­B-¹Ê¶BZçBGà‡B­¦µBo çBç‰B£‚´BǸæB‡QŠBÒR³BÛ¥æB½ˆ‹B¡,²B€ÆæBÈŒBœ±B¸çBxŽB»÷¯B¿@çB6SBp#¯BÒ|çBéÊB\_®B åçBäA’B ß­BЖèB»“B–Ù­B\‡éBã&•B¾ü­BËkêB¿˜–BŒ®B®"ëB”#˜By'®B[ªëB—Á™B??®BtSìBÀR›B[c®BR*íB„ÌœB#p®B‰þíBNIžBâ9®B¾îB„áŸB&Ñ­BvÉîBY„¡BB…ÙîB¾4£B·ˆ­BnÐîBè¤B/¥­B3õíBý_¦B»­B2õìBÀ§BÜÏ­BµßëB¹©B7å­B‡ÁêB~YªBëø­B­¥éB^¤«B ®B¶‡èB™í¬B9®B3cçBE1®BŒ®Bá-æBe¯Bá®BçäB‡°B…®BFãBì”±B®Bx-âBƒ“²BÛ®BÚÃàBWˆ³Ba®B¹GßBž^´BÝ­BеÝB%µB³¡­BûÜBZ}µBHi­BétÚB¼òµB8­BòÑØB¡d¶B­B+×B(̶B)­B–~ÕB—!·B¦­BiÍÓBU[·B­B ÒBq‚·BN­B¹eÐB‡œ·BÁ!­B°±ÎBÕº·B‹(­B7ýÌB(Ò·B ê¹B÷êB œƒBP]¹BìÅêBe…B›z¹B^\ëB¶†Bè;¹Bý¼ëBìZˆB2¹¸BìBßó‰Bœ ¸BD@ìB³~‹B\O·BCzìBVB8³¶BÐÔìB ‘ŽB¶B]/íB½BÝvµBajíB®®‘B×´ByíBdB“BO´BwÉíB‚Ü”Bíâ³B–¦íB–B{­³B¨=íBÄ$˜B‰–³BêìBЙBω³B§ìBp~›BP®³B¨9ìBÉ"B¨¿³Bî¼ëB!ÄžBϦ³B¡BëBÍe Bwl³BKµêB þ¡B³+³Bw^êB8¤£B]Û²BfPêBTP¥B“ˆ²B8;êB®û¦B Y²BÕ¢éB]‘¨B1M²B˜µèB8ÿ©B­\²B>¥çBÈS«BØ^²BC¸æB¬BÝU²BÜæåBu@®B¿K²B$åBr¯BéT²BA'äBZ+±B#\²BèÿâB•l²BJf²BN¬áBÔ~³B(d·B“ áBù5‚BUc·BÜ-áB2æƒB¸'·Bb-áBì•…BÓ¶BáB°6‡Bôh¶BÖRâBŸ¬ˆB?éµBýZãBï‰BŒiµB#cäB›2‹Bfæ´B²våBjŒB e´BËxæB½±BÅå³BM3çBÑ&Bf_³BUbçB´ÂBk ³B ŸçBÜi’BQÁ²B‹èBA”B†²B¹ºèB–•Bžk²BèxéBœ—BIq²Bt+êB`«˜B;²B<¼êBEšB©²BëB“ò›BrIJBýëB~¥B6ϲBbìêB>XŸB„Ò²BK¼êBh ¡BhÚ²B ‡êBè¹¢B§Ç²B |êB2m¤B„²Bƒ‚êBŦBD²B5&êBÖÀ§BÒ%²Bƒ^éBSC©B}(²B_YèBÓ ªBÎ/²BñYçBp¬B<(²BP|æBz­B^²B¸­åBÕù®B?²BÁÒäBòr°B8²BʺãB…Á±BL'²B¤uâB ä²Bÿ7²BSáBNܳB)T²B/|ßBì„´Bq²BCÔÝBpë´B¤Ž²Bí'ÜB„=µB^»²BJÚB±£µByù²BIáØB†¶BX>³BûA×B¶B3þɱBk8âB q€Bߌ²B¬‚áBýÉB˳BüÝàB·KƒB»#³BN€àB4ô„B4³B qàB§†BÂù²B¾ÍàB…PˆBHݲB¼©áBȉB  ²BæYâBYR‹B\6²B¿ÍâBñèŒB;¾±Bê1ãBÍŽB%j±B‘´ãB$B‹9±BÒFäBü®‘B±BèääB²C“Bãù°BšåBrÏ”Bðó°BþhæBGO–Bà ±B BçBÈ—B=±BÿèBvD™BÙ_±B™²èB¨ØšBÿv±B²"éB?}œBp†±B9aéBL,žBbh±BïJéB„ÞŸB™<±BiòèB ‡¡BűB•uèB&£BËç°BDÅçB³¤B4¾°BUéæB`)¦Bwª°B+õåBT’§B€°°BdéäBÂê¨BdѰBÇãBõ.ªBKô°BâBB^«Bn±B×CáB5z¬B ±B¿ëßB‡­B£ ±Bt†ÞB‚®B ±BßÝBÄk¯B§5±BI–ÛBf;°B=P±BoÚBî°BŠk±BénØB,„±B`ƒ±B˜ËÖB"ý±Ba—±BI ÕBÿV²B¶±BÝpÓB}–²Bâ±B¹¿ÑB$¾²Bü ²B”ÐBÌå²B)H²B]ÎBó²Bˆ“²BB¯ÌB7á²Bï²B¢ËBò¯²B‚W³B eÉBd²BɳBMÉÇB ²B”F´B“.ÆBýµ±BDÏ´B–ÄBl±B7dµBÃBJ±Bn ¶B|ÁB9¶°Ba¾¶BáÀBã<°B"ŠÜ¸Bœ&çBcF‡Bb³·BÓæB[yˆBŶBcæB÷á‰B“¶B²ŒæB«m‹ByµB–•æBBÊô´B«°æBÖ¤ŽB´BÚæB¹JB„8´BÒ/çBí‘Bùç³Bç±çBZ…“BZ¥³B…\èB•B”³BéB^š–B­³BºéBT.˜B|Ò³B£êBã×™B¾ú³B‰êB‰›BTñ³BÈêBö°BCü²Bu¿ÞBR9±B¡ø²BÌ]ÝBr9²Bx³BTÚÛB¤³Bª)³B”JÚBó¯³B€]³B…¶ØB N´Bûš³BO×B¸Ú´B&ºµBFÜâB•€B¶BZËáB‚VB H¶Bó áB_Ù‚BN¶B¯©àB‡„B1#¶B4¢àB-3†BÝßµB™ÿàB™×‡BkеBñËáBTO‰B>µB,{âBG׊BÍõ´B]ÜâBzŒB ´B ãB®"ŽBî2´BADãBÜÄBw²³BæãB;^‘BPL³BõíãB¢û’B÷³BKcäBõ›”Bð²ByãäBõ:–BüײBÂåB{Ä—B]à²B¶‡æB‡4™B(ô²BENçBC¸šBÓ³BŒãçB‡QœB}³BÒxèBËêBó*³Bç×èBž“ŸBžP³BÖþèB D¡Bó³BŠëèB™ô¢B¿v³BÓèB˜§¤Bl6³BW èB©S¦Bò²BJèB^î§BܲB­;çBÉa©BÏï²Bê#æB°ªBϳBjåBuõ«B 8³BðãBF­BËM³BžùâBp­®B•J³BâBú°B|3³BÒæàBé_±B…³Bå ßBT²B0³Bë%ÞB‡Z³B$5³BŒÜBŒð³B9[³BöíÚBw´B.•³BSÙBµB"‡ÇµB$æãBÈ~BÉ;¶B‹ÈâB ™€B—¶B¸ âB‚B’ ¶B(¡áB徃B@v¶B¯‡áBêo…Bµ/¶Bw×áB–‡B*éµB?'âBB½ˆBÁŒµB^çâB·9ŠBV9µBß½ãB=¬‹B4ü´B™TäBÆ@B¹´B`“äBÖêŽBJu´B#åäB•‘B$+´B%HåB“3’B»à³B¬«åBeÕ“B(˜³B æBµx•B^V³BÈpæB8—B‰.³B|çB)¬˜B*2³BðõçBO#šBK³B|éèBSŒ›B/v³BlÔéB?ùœBh•³B,êBô‚žBš³B9ÎêBå1 B0˜³Bb ëB´á¡B‚…³Bñ/ëBn“£B•U³By-ëBšD¥Bõ³B}0ëBâð¦B“ͲBѸêB\¨B¼²BÐÒéB”ªBeÁ²B„àèBMm«B8´²B~èB‚î¬BBô’çB{Œ®BsT²B¯"çBc.°B7²BÍiæB4¸±BG²B42åByé²BL³¯B?báBî€B§f°B¨ÎàB—3‚Bã/±B‚“àBU±ƒBl²B²àBe.…B¥²Bá/áB™­†Bú²BÒ âBˆBHü²B€1ãB«_‰B.IJBó äBÕŠBA²BI äBuYŒB°±BåBÑèB>L±BråB÷B ±BöåBF‘B4ذB9œæB<¬’B˜½°BIhçBÃ,”BŒ¾°B@èBЧ•B•ѰBséB!-—Bcò°Bn©éBリBY±B?*êB#^šBN2±B«êBXý›B·Q±BdëB1§B^V±B„KëBØTŸB-8±BðŽëBg¡B”±BC®ëB)²¢Bçà°BÖBÒóµBA±B}ÔBŽ>¶BÝ3±B„ÞÒBxk¶B#R±Bµ*ÑB|¶BË{±B†wÏBûx¶B¸±B²ÆÍBo¶BS²B¦ÌB Z¶BéT²BumÊBÝ+¶B0­²BÌÇÈB´áµB¸³B—)ÇBéµBû€³B<ÅBÒ#µBáó³B·ñÃB£Ç´B‚s´BV[ÂBÂe´BaµBoØÀB¬ã³BŸÇµBàj¿BPK³B%¶BؾB)²²B2^·Bi ¼B`$²B›;¸B(D»B©•±Bf5¹Bæú¹B1 ±BÝeºB´Õ¸By°B–Á»BÔ·BÇi°B,3½B]í¶Bªj°BÓ­¾BG¶B°B£&ÀBBµB«´°B¶žÁBýg´B[ϰBZÃB(гB³Ü°Bi‡ÄBM¤²Bà°B½ôÅBß¶±Bgß°B#`ÇB™Æ°Bj×°BŠÌÈBÆ×¯BäÛ°Bˆ9ÊBàé®B~à°B‰¤ËBú­BïǰB¡ÍB—­B´l°B‘[ÎB¬Bí2°Bƒ¢ÏBŽâªB 6°B@ÄÐBÔ ©BFl°BJï5²B;áBhj€BZö²BúàB¼B f³Bã?àB}6ƒB$‚³BàßBÐÞ„BLl³B'ÅßBC‘†BºB³B~ûßB·?ˆB&³BÔ1àB*î‰B|Û²B´ªàBtŒ‹BÔ²BýáB-B6.²BÌTáBùÐŽBz½±B'áB/rBVA±B;ÄáBN’B÷ɰBŽüáB¨¯“BϰB¯8âB#[•B°BàâBk—B°B¤5ãBݘ˜BÙh°BI*äB\šB‚W°Bè<åBT›B–d°B1!æBrÇœB耰Br׿BˆRžB0š°BÛ3çB»ûŸB°ª°B8DçB쮡Bd°°B“ìæBÚY£B*—°BåDæB‰ë¤Bºy°BpåB g¦B1Y°B¤‰äBõ×§B™O°B ŒãBÑ:©BDa°BMvâB銪B¨{°BßBáB¥¿«B¤°BOößBÁÙ¬Bã’°B7–ÞB Ü­B¥°BzDÝB-ð®BŰB»ñÛBÒ°BJê°B׈ÚBûô°BF±B®ÙBO·±B‡±BPi×BzN²B4±BuÇÕBð̲BzF±BqÔBO1³Bµ_±B/pÒBTz³Bˆ±BX¿ÐB…¨³B/¾±B ÏB¹½³BT²Bä]ÍB¹¼³BUO²B§°ËB{£³B該B(ÊBzo³BÕ³BtfÈB"³Bu³BoÊÆBGŲB°ö³B/ÅBok²B±u´B'•ÃB{²BpµBpÂBØÀ±B«µBÆÀBáJ±B0b¶Bç¿BD˰B ·BĽBµN°Bß·Bå$¼B€Á¯BhƸB±×ºB¯BìĹBÃ¥¹Bml®B£äºBº‰¸B¬È­B'/¼B·Bm_­B‘½Bt†¶B{7­BIö¾B µB -­B RÀBÀ†´B­B>·ÁB莳Bÿ¬BŸ#ÃBñ¡²B·à¬BÌ–ÄBQ¾±B—Ò¬BÛÆBúâ°B`ĬB^ÇBïþ¯B¤—¬B:åÈB÷¯B÷R¬BmZÊBæ3®B¯%¬BרËBJd­Bš¬BrYÍBw˜¬Bú¬BÚÎBÍÛ«BÁ·«BÊMÐBÑ#«B3«Bá¹ÑBãcªBŒ¤ªB$%ÓBI§©B¡ªB ŠÔBmð¨B£e©B'Ò¿µBCõáB?F…B}‡µBpEâBøî†BA?µB ãBêdˆBù´BžäB>ωB •´B,‰äB³a‹Bö´BÕäBœþŒB°³Bô*åB›ŽB•W³B“‹åBÆ:B8³B¹õåBÙÛ‘B5вB¬mæB¼y“BT•²BüúæB÷•B@ˆ²B)¬çB. –B|¢²BtlèB¨&˜BBDzB{ éB溙B©ã²BÇnéBYb›B¥ö²Bµ¡éBÆBáâ²B–éBÆžB¤µ²B“OéB§q B©z²BsõèBþ¢BÀ:²B,èBÚº£Bµú±BXøçBÓN¥B¥Î±B¤ çBKǦBQ±BB%æBŸ+¨BrÕ±BåB~z©Bûþ±BåãB·ªB| ²B˜·âBeñ«B)²BóáBé"­B³²Bn6àB A®BQ²BÛÞBˆI¯B %²BÈpÝBJ=°B::²BN÷ÛB±BW²BñoÚB2رB²|²BÜØBÃz²B-¡²B9×B•ó²B8òB ŒÕB=³BCå²BsÞÓBm†³B¬³B:-ÒB«³BQ³BŒ|ÐB±³BNž³BÒÎÎB”›³B4êwªB¾„ãB; ‚B®bªB9ëâB¼ ƒBIªBѺâBQ…BEªBzËâB›‡BõTªBâãBB¬vªBâƒãBVŠB¬£ªBéäBMô‹B`ÓªB^–äBŒBÄùªB÷LåB(B«BDæB,•B«Bx÷æB8’Bê «BêÖçB»„“B¡«Bå³èBœü”BXûªBduéBbƒ–BäùªB^"êB¡˜Bö%«BR”êB¶™Bãž«B;‡êBcX›Bs,¬BÎ;êBƒíœB€¬BØæéB¸žB²±¬B6‡éB7 B.Ô¬BéB Õ¡B=ò¬B1AèB‚Z£Bf ­BÉPçBÉŤBž­BùBæB\¦Bí'­B?/åB8n§B>7­B…äBÀ¨B9N­BRãB$ ªB¶k­B®ÕáBH«BS‚­BëŽàBÅh¬B$­BZ2ßB“o­Bfœ­B@ÉÝBÃd®B>¶­B¬UÜBêH¯B$×­BfÖÚBû°BDç­BíHÙBµÌ°B¨â­B*¯×Btd±BÑ­BïÖB~ë±B¹­BºnÔBCk²BퟭBGËÒBDã²B‘˜­Bg#ÑBŠM³Bi¤­B_xÏB ª³B²­BòÇÍBsè³B¢¾­BÛÌBq´B¸Á­B·^ÊBÀ´B«­­BmªÈB&ó³BÐs­B]ûÆB¶È³Bl!­BoPÅB¿³BãŬB‡§ÃB¸q³Bþ[¬BqÂBÓ2³B­É«B‰tÀB„Ò²B©«Bqø¾B\²B%SªB ‡½B…ß±B€‡©B¼B{b±B$b"¥B ?ÞBQT{Bo ¤BŠ.ßB»ý}BµR¤BîßBÝ~€BŒM¤B£WàBÄ%‚BjJ¤B¨àB"ÒƒBÒG¤BKìàBœ€…B9^¤B™GáB5*‡B%£¤B'ÓáBVÁˆBS¥B€ŠâB­:ŠBx£¥BýGãBª‹B˜.¦B÷ äB"B¼¦BaÆäBC…ŽB G§B°ƒåBcôBÒÁ§BËOæBqa‘BÀ¨BÉçBã’B¸¨BѸçBt”Bó0¨B43èB–BŠI¨BémèBCÅ—Bˆj¨BbfèB¿w™B¤¨BþçB›BÍã¨BHeçBJ®œB4 ©B°ÝæB‰JžBš6©BVæBÇæŸBS©BàâåB:Š¡B €©B—;åBV£BÁ©BSäB«…¤B ý©BÃXãBâå¥Bv5ªBÝGâBª5§BhbªB$áB¡q¨B|ªB—ÖßB#‘©B7†ªBÃzÞBñ˜ªBlŽªB_ÝBz«BÌ¢ªBŸÛB´t¬BƪB1ÚB)B­B¦ÐªB陨B1®B°»ªB×B5Æ®B'V¹B7ËæBdÞ…BÆ5¸BF£æB""‡Bq·B¡ZæB’ZˆBd¶B¦:æBåÉBTMµBYDæB÷A‹Bú¤´B hæBHÒŒBÔ´BœæBâiŽB<«³BÌÙæBw BB\³B%6çB¯‘B+³B¦ÀçB¬F“B)ã²B/|èBðÌ”B„Ö²B<6éB W–B¿é²B”ÙéBåê—B¸³BœCêB›™Bc&³BÀjêB’A›Bò.³BfêBGõœBÙ³B¯;êB{¦žBÁç²BüãéBšN BÒ©²Bo‘éBö¡Bie²B7FéBà£B†²BlÔèBÌ<¥B?ò±BÙèBgÀ¦BÕâ±BPçB—&¨BSò±B<æB(x©BÔ²B{ÞäB··ªBž<²Bz½ãBÅü«B™K²BkšâBœA­BTB²BcáBcs®Bd6²BñàBð‘¯BÛ5²B‰»ÞB‚–°BF²BZFÝBíx±B^`²Bv¿ÛBS:²Bh†²Bo.ÚB©ã²B™³²B…”ØBPt³BÉà²B›úÖBö´B ³B±TÕBo´BÙ.³Be¤ÓBT¥´B4c³BùòÑBe¼´BS©³B‹CÐBj³´B%É©©Bg`êBYÁ›B\HªBèéBïBlʪB”ÒèBˆžBž!«Bs2èB‹ Bðf«BçBÙ£¡B¿Ÿ«B„žæBy£BáЫB•›åB,q¤B^ü«B±…äB;¥B¬B˜gãBܧB¸4¬B9âBp@¨BE¬B=ïàB^©BéI¬B¶ßB_^ªBsT¬B'#ÞB¦Q«Bvi¬B[¯ÜBó5¬BI¬Bx2ÛBŠ ­BŽŠ¬Br­ÙB"Ñ­Bx¬BV!ØB<‰®Bm¬BÖBý4¯BƒO¬B‰ûÔBAׯBm4¬BÕaÓB²l°B(¬B ÁÑBzï°B·'¬BØÐB¶\±Bå ¬B,iÎBv”±BFΫB·¸ÌBd±BÕq«BèËB•o±Bv «BtiÉB™?±BÊ™ªBŒÊÇB2ñ°B"ªB,1ÆBd“°Bð©B¹œÄB@1°BÏ©BHÃBϯB‰¨BºuÁBÙw¯Bµß§B9ï¿BA¯B¾#§BÞu¾B¿¦®B@`¦Bv½Bª)®B"‘¥B뤻B­Bû·¤BöWºBtܬBÔÖ£Bã¹B¹¬B.ËˬB¡”ãBîèBHü¬Bê:ãB±ƒBq!­Bœ(ãB…B…B©N­B%ãBòó†B €­BÚ(ãB褈Bõ›­B7ãBWŠBKŽ­B[QãBk ŒB¸c­BæjãBk»BV­B·ãBFhBÆX­B*QäBJ‘B(d­BbåB뀒B³l­BNæB â“BŸ­B¤1çB4•BÌš­B~èBš¢–Bñ¸­BSÞèB(˜BIÕ­B«‹éB·™BIð­B™<êB¨D›Bÿ®BCðêB*ÑœBЮBŠëBÞ‚žBŽÿ­BÿæêBO3 BKö­B&|êBÏÙ¡BÀù­BDÐéBƒj£Bdþ­B¡ëèBòݤB>®BöéçB>¦B]®B¹âæBò™§B­ ®BTÓåBtï¨B &®BT¶äBâ8ªBe@®BT™ãBO‚«Bh®BqgâB'·¬Br~®B™áB(Ó­B2Œ®BÑ¿ßBŠÙ®B¿®B»VÞB˜Î¯B׺®BŽàÜB®°B9å®Bi\ÛB#r±BZþ®B4ÈÙBC²B ¯B„'ØBý™²B»ú®Bc‚ÖB–³B]ò®BÝÔB‘‚³Bwë®B¿6ÓBºò³BŒö®B»ŠÑBµJ´BÀ¯BOÛÏB労B•>¯BÝ)ÎBm°´B´w¯BxÌBM»´B乯B ÈÊBÅ­´BÇô¯B|ÉB´ƒ´B¹/°BdpÇBŒ0´B(´BÐõáB·Ö€Bd„´BG áB&;‚B¿À´BW‹àBjЃBذ´BÇWàB瀅B-‹´BˆuàB2‡BU´B›üàB͈B ´Bø»áBPŠBÛɳB ?âBè‹B½b³BŠ…âB#ŠB÷²BëèâB­$BÖ•²BíyãB-´B(M²BzäBùD’B²Bó£äBÙÝ“Büö±B!0åB/y•Bfê±BùéåBx—BS²BjÅæBª{˜Bš/²B\—çB ÷™BCN²Bö4èB]Œ›B€^²Bs¡èB92B¼n²Bñ éBØžB`‰²BtIéB‡ Bg±²BøNéBê8¢B‘º²B ?éBYì£B¦‹²BvéBœ¥Bd@²Bí¹èBŽ>§BβB°õçB&¨Bâ²BƒõæBG#ªB~3²Bu×åB²k«BïR²B4¸äB»²¬Bãn²Bv¨ãBû®Byz²BÇŸâB¥a¯BÆp²Bn…áB7®°B^²B9GàBnرBž[²BàÞB~ѲB0k²BmUÝBh‹³BD…²B¹ÛB²´B¢¬²B4ÚB££´B†ã²BØB&-µB–³BðáÖB-©µBêP³BA:ÕB¬¶B0ˆ¶«B ;ãBm ‚ByÇ«BÃâBR¬ƒBõÏ«B¤âBì^…Bjä«BmªâB4‡B!¬BùÏâB`ÈBô¬B¡ ãBìqŠB .¬B–RãBâŒB9/¬B­žãB ÍBh0¬BÄêãB7zB%:¬B#aäB¡‘BI¬B¾åB¬°’BGT¬BÚåBû-”BÈW¬B׿Bf‘•BbW¬BmßçBì–Bçb¬B³ºèBUe˜Bu¬BøléBÍò™Bñ†¬B/êB…›B”¬BCÁêB B, ¬BšvëBe¡žB4³¬BZìB%8 BSʬBü„ìBÜ¡BÃϬB6†ìBÖ£Bmï¬BXÚëBO¥BB­BØïêB©¦Bk/­B¿ééBé§BçH­BÖèB`:©Bj[­BÀçB+ŠªBVj­B¬æBÛÛ«B–­BŠåB!­Bæ”­B<\äB×[®Bž­Bá!ãBНB›®­BºÕáBp¥°BÖÅ­BßxàB«±Beà­B ßB¯™²B× ®BšŽÝBÐi³BÁR®B•ÜBk´BÈl®B¥hÚBÖ©´BRX®BÒÄØBw!µBüF®By×B–ŒµBØA®BŠrÕB êµB„H®BMÄÓBù6¶B´Q®B„ÒBÜBX­BõH­B©ŽÚB®$®BûN­B€ÙB×Ü®BgG­B?n×B‚¯Bý4­BÕÕBϰB­B|8ÔB¨°B6 ­B®–ÒBq'±BQ ­B„ðÐB˜±B$ ­BúBÏBhé±B6ö¬B¿ÍB ²BÆÌ¬B¼ÜËB”²B¾†¬B*.ÊB9ë±B‚'¬B3‡ÈB€µ±B%¾«BÉæÆB6f±BÄN«BSKÅB±BÌÖªB¿µÃBcš°BwDªB@*ÂB{)°B!²©B¿žÀB”¸¯BÊ©B¿BàE¯B>F¨B ª½BÑË®Bàz§B @¼BïE®B¬¥¦BãåºBX¨­B¯Í¥Bnž¹Bê¬B ö¤B£c¸B/¬B$ø½¹B×ÝßBÖ}yBT§¹B³dàB¹|B¹Å¹BåýàBÈçBÓî¹BàžáBñ†BùĹBÎ+âBd!ƒB!Z¹BH’âBb»„BIï¸BÂøâB_U†Bzq¸B1†ãBÞ‡BPà·B"GäBBI‰BzJ·B9åB㓊B¦…¶B:ùåB<æ‹B–µB~bæBêBBi¹´BýÈæB%¬ŽBý ´BoçB¯4BŒ¤³BCçBÙ‘B«B{7šBš·°Bµ"«BØä˜Bb¬¯BmèªBꆗBŒ²®B/¥ªBõ –BQÇ­BªXªBP¸”B:æ¬B$ü©BtO“B ¬B‘©B&ê‘B‚D«B‘ý¨BŒ‹Bh‰ªB‘L¨B8&Beå©B„’§Bç´BK¯BZAçBÕÖ¦B˜8¯BâLæB¢?¨B&.¯BCPåB'£©B"6¯BèBäBSúªBbZ¯BîãBÅ;¬BXw¯B‘ÛáB»`­B¥„¯BQ…àBo®BL‡¯B«"ßBZn¯BV–¯BµÝB]°BCµ¯BÄ9ÜB63±BwÙ¯B¯ÚB*ë±B3ï¯B–ÙBÔ„²Bö¯BÊs×BŸ³B)ý¯BªÎÕBTv³Bg°B-'ÔB:â³Bé°B-{ÒBv9´B6°BBËÐB7t´B/f°BïÏB^”´B1¢°BiÍBÞ´B—é°BÖ¹ËBê“´BŒ4±B³ ÊB:o´BÜ…±B`dÈBž,´Bæ±BÅÆBÍ˳BhS²B‘(ÅBŠm³B"®9µBùëâBØ€B$—µB âB©F‚Bï·µB‘ŒáB äƒBs›µBgáBT•…BdµBÖ·áB!>‡B«-µB™âBïæˆBþã´BÿÍâBËdŠB‚´BÞ¡ãB|Û‹BÅZ´B>7äB¡oB ´BY„äBúB¶³BüßäBĶBØf³BÁIåB+V’B†³Bê´åB{ö“BªÚ²B©æB¦—•B„£²BT˜æBë6—B‚š²BUIçBQŘBŒÅ²B”&èB§:šBò²B©éBä§›BP³BÃîéBMB6³BcžêBA«žBÒ8³B·ÝêBxZ B®4³Bž*ëBz¢B6³B¨^ëBu·£BZã²BmyëBÝf¥Br›²B{^ëBݧB«j²B%ÑêB]­¨B[²B>åéBðªB[²BdæèB~«BSL²BÑèB¤û¬Bx"²Bü{çB*’®B×ó±B£åæB¶(°B å±BíñåB:’±BÙú±B°äBY¸²Bà²B.CãB¦³Bþ…¯BãB{h–BБ¯B äB¨Ë—BÏ¥¯BSåBÃ'™Bð¯B¦õåB9ššB á¯B¼›æB',œB¦þ¯B1çB’ÒB °BçB¿…ŸB °BݼæBý/¡B8°BæBi¿¢B-ù¯Bé=åBs>¤B©å¯BVäB´¯¥B²Ò¯BüaãBm§BÓ¯BIâBKf¨B´Ú¯B\áBlŽ©BK߯Bc¨ßBÚªB`è¯BøLÞB<™«Bîú¯BóÝB%´¬B| °Bî´ÛB Ï­B7+°BXjÚB±ê®B>N°B ûØBuÔ¯B²l°B¼j×Bø€°BÁ„°BgÏÕBž±B“°B,ÔBÛŒ±B‰œ°B»‚ÒB8ñ±BQ¯°B9ÖÐBE²B¤Ê°B}'ÏBØŠ²BÊ÷°BFvÍBe°²Bš7±BÉÅËB¼³²Bñ…±B†ÊBõ˜²Baâ±BäpÈBVa²B.–´BxÍáBXp€Bz˜´B}ààBi¾BÉí´BhàBs:ƒB¨û´BV¸ßBxâ„BrÚ´B ¨ßBº”†B«¥´B±çßB¬@ˆB¢a´B›|àBÆÔ‰Bº´BëàBs‹Bmµ³Bã%áB¯B7D³BãOáBo»ŽB´Õ²BÃÒáBTLB¡o²BšâB•‘B0²B`BãBÞO“B"²B'ÐãBáê”BÂï±Bî]äBä…–B|ܱB-ûäB˜BʱB×ÍåB™™BnȱBjÆæB ›B²Ü±Bp¶çB´kœB ø±BΫèBNÓB7²Bú‡éB£JŸB¤-²BôéB2ð B$C²BáøéBr£¢B‰:²BèåéBÆV¤B5²BǶéB€¦BïDZB‰7éB0¡§B‘«±BZdèBµ©Bµ«±BaçB–|ªBŒ¼±B“OæB.ЫB€Ç±BNKåB+.­B*Ó±BÅGäB¯Œ®B‘ܱB|9ãBã¯B®Ø±BúâB#%±BêÓ±BjÈàBFB²B£Ù±BZßB0³BZì±B+ÊÝBß³B²B )ÜBY_´B«%²B?ˆÚB‰Þ´BeS²BEéØBÜ_µB憲B¸H×BÆÙµB6¶²Bu¡ÕB*<¶BFÙ²BëðÓB÷p¶BʳB|>ÒB[‡¶B”?³BWÐBŸ¶Biˆ³BÁÞÎB+k¶BŠÖ³BC1ÍBˆS¶B-ó(³BñJâBÙB³³BœáBÃv‚Bßó³BÄáBþ„Boê³B°ÎàBÙ¿…B€Î³BáB$o‡B¾©³BÂáBZ÷ˆBÂ{³Bd âBÕkŠBF-³B @ãBìù‹B—®²B$ŸãBþB”=²B¹äBË'Bœò±B܈äBcÁB·¼±BîåBºZ’BM±B[®åBnð“BRo±B`æBF}•Bðt±B7*çB¤ÿ–B,š±BßúçB½|˜BÁ±B®¨èB¯ šB…ݱB#éBï«›Bð±BoéBËXB{Û±B›péB! ŸB›±±B¹.éBí¸ B’±BËèB…^¢B=Q±B¤>èBgø£B-!±BŸçBl}¥Bÿ°Bá˜æBî¦Boø°BܘåB5O¨BM ±BX€äBÕœ©B(4±B×SãBûÖªBdP±B/âB#¬B¾T±BÇàB±­B`\±BSyßB%2®B¦d±B‹ÞB“)¯BKz±BÀœÜB0 °BŒ“±BvÛBÚÒ°B °±B‡ÙBF}±B¿Ì±Bê×BV ²Bç±BÍBÖBs²B¡²B<”ÔB­¹²Bv+²BAãÒB3å²BÓc²B2ÑBOö²B¬²BƒÏBáé²BMô²BÔÍBtݲBˆM³Bz*ÌB°²B¤µ³BuˆÊBnf²B-)´BÑëÈB;²B5·8©Bä9ìB¥[›B6ü©BÎ{ëB¼¯œB³”ªBxºêBˆžBR«BT êB —ŸBÆV«B½|éB€*¡B}—«BÀÁèB¯¢BÊ«BíØçBv¤Bï«BtÉæBp¥B ¬Bú©åB·¦B*+¬Bw‰äBý§B&N¬B~eãB—?©Brh¬B¬'âB°iªB2v¬BÒàB:y«Bd}¬BjßB+q¬B”¬BÞ÷ÝBW­B›ª¬B,…ÜB=®BCͬBZÛBs¯Bá߬BÙBáͯBkÙ¬BŒì×BÂw°B‚½¬B]SÖBr±B¾™¬Bç·ÔB ±Bo¬BÓB«%²B»T¬B*yÑB£¢²B£O¬BðÒÏBa³B²L¬BO&ÎBåh³BI7¬BÉsÌB“³Bë ¬BÁÊB6‘³B(Å«BäÉB(‚³Bk«BPgÇBÒe³B¢«B.¾ÅB3>³B†¯ªBÇÄBÓ ³BëIªB”rÂB$ͲBµ½©B`ßÀByq²B ©Bï^¿B°²BpL¨B”í½B—„±BÍx§Bu…¼B±B*’¦Bò,»B €°BH ¥Buä¹Bmæ¯BQ«¤BΡ¸B–E¯B寣BÕ]·Bó±®Bj¦¢Bñ¶B4/®BC‰¡B$ë´Bl·­BêM B€É³Bh­BÇòžB;òB¶t­Bš˜B;ɱBÉ­BÇ;œBä°BdD®B ÚšB®þ¯B>°®BCs™BL¯B¹¯Bð ˜Bì%®BU@¯BIJ–B|$­BÇs¯Bÿ_•Bó¬B”¡¯B'”B«BšÔ¯B°’Bz#ªB#°B$ù·Bþ"çBã‡B:ß¶B`ÄæBîΈBIïµB:æBK8ŠB!µB¦æBõ·‹B.s´BÊæB×EBõæ³B¬üæBYߎB¼Z³BG/çBÛxBÿ²BålçB{’B-µ²BáÙçB ¾“B¡x²B¨tèB$Q•BàV²B11éBìØ–BßW²BÁèéBtd˜Büs²B‰êBãø™BQ²BŽåêBá¡›B6¬²B&þêBTB¡º²BÏëêBJŸBä½²BiÂêB#¹ BoDzB²„êB|h¢B¼²BUrêBǤBă²B—uêBïË¥Bð=²Ba-êB t§Bê²BÏséBùü¨Bu²BlwèBÍ`ªB¤ ²BpçBÖ¼«B¦²BŠæB2/­B“²BF´åB%«®B8 ²BiÙäBP$°B²B¨ÈãBÉx±B*²BŠŠâB•£²B‹(²B)áBª£³B:A²BÞßBH^´B/]²B©ùÝBüÏ´Bˆx²B›MÜBC$µBr¢²Bà¦ÚB3‹µBîܲB2ÙB†¶By³BÑf×B#x¶BKW³B­áBF:Bk˜³B3LàB=¡‚Bì̳BøÎßBw?„BR¼³B›ßBäï…B?–³Bë°ßB‚¡‡Bb^³BÙàBÐF‰Bn³BކàBÎäŠBܾ²BÔàB{ˆŒB&X²BÔ áBž,ŽBð±BáB¿BQŸ±BÆ3âBßI‘B1n±BÖâBÛ’B´S±BÆlãB×s”B1I±B2äBo –B?±BôÖäBÄŠ—BE±B£ÅåBÕ÷˜B]Z±BŸæBQqšBo±BÀDçB œBë±BݶçBe¨Bíw±BÊÖçBûZŸB‡_±Bª—çBŒ ¡B¿A±B¤ çB£¤¢BF"±BCæB”'¤BÙý°B9iåB«Ÿ¥Bcã°B›{äB §Bÿé°BeoãB™d¨BLþ°B0CâBà©B™±BûáBíܪBÇ%±B/ÐßBÇý«BQ)±BZlÞBêú¬BÍH±B 8ÝBN.®BÔt±B.ÜBCj¯Bü£±BµËÚB¿Œ°BxȱBîXÙBÄp±B/æ±B:Ç×B'²Bš²By)ÖBË£²Bë²BÔBó³BÔ<²BÕÑÒB»I³B’j²B— ÑB6n³B§²BÄoÏBÉv³Bðð²BÁÍB4h³BËG³B{ÌBç?³B(¬³BQrÊB ý²BÒ´BÔÈB‡ª²BŸž´B²9ÇBÆ^²Bo/µBÜ¡ÅBÔ!²B ȵBÜ ÄBå±Bdg¶Bî|ÂBû™±B˜·B;ûÀBg2±B‘Ò·BÇ‚¿B×¹°Bc¸Bú ¾B¯C°Bja¹BRž¼BCϯB¨XºBÜN»B>M¯B›l»BºB=¼®Bì–¼BC¹Bk)®BBá½B‚õ·BÕέBã9¿B²í¶B&¦­B#‘ÀBâµB¢Ž­BýåÁBhÙ´BŸP­Bþ=ÃBÚ³B2­BHœÄBˆá²BI¶¬BzÆB{ø±B&z¬B9rÇB–±B­0¬BÄËÈBØ °B¥Â«B):ÊB›F¯B·i«B¸ËB ®B£*«Bç:ÍBž­BÑóªB[µÎB­BŸ†ªB-ÐBU¬B»Ý©BâwÑB ««B©BÂÐÒB9«B4¨BÞ+ÔBÉ¢ªBhI§B;‡ÕBœ=ªB@W¦B6ÜÖB ô©BÌR¥B:!ØBêשB˜2¤B Ò¤©BôîBÝššB^ªB„'îB' œB˜ «BäfíB jBfs«B´¦ìBuãžB;ª«B\ùëBÄo B”Þ«B˜LëBªü¡Bi¬BÇŒêB×€£B>F¬BõÌéB¥BÄo¬B™àèBKq¦B$‘¬B“ÔçBúǧB媬Br¼æB•©BìB=¡åB¶`ªBã¬B·äB´¥«BŠ­B{VãB4ã¬B!­B¼âB¡®BK9­B³ÎàB¿)¯B ]­BánßBû)°B ˆ­BnÿÝB0±B‚·­B®ÜB‡Ý±B±Þ­BÒðÚB¡‹²BóÙ­B…SÙBƒ³Bô¸­B9¯×B€Œ³Bÿ–­B ÖBÐû³Bu­B%dÔB«h´By]­BW»ÒB™Ì´Bl[­BðÑBK#µBn­BC`ÏB½kµB­€­Bä­ÍBQ™µB”­BpùËB©µBu•­B_DÊBâ µB|­BêÈBBjE­B‚áÆB¥YµB2^š³Bì äBÐ=„BÖ ³BKFäB‹í…B^{³B éäBR€‡BæU³BÈ‹åB‰BGU³B²æBl{ŠB ³BãNçB¦õ‹BƒX²B9äçBÅdBªv±B€6èB+ÐŽB`ȰB=‡èBYWB´-°BMäèB ä‘BÚ½¯B%†éB+i“B£¯B2dêB±ß”Bÿ¿¯Bø@ëBºV–Bù̯B\íëBç—BlÛ¯B^eìBЉ™Bôô¯BèòìBW%›B9°B›íB¶œB¬°B¼CîB0HžBίB ÕîB“ÜŸBØG¯B@4ïBXp¡B6õ®Bª"ïBâ£B;ä®Bâ›îBº¤Bzò®BŸÔíBÆ=¦Bòþ®BRãìBú¨§B¿¯B9áëB¶©Bù®BãêBkªBø®B¦×éBìëByô®B ¿èB­B,ä®B>™çB]T®BBÚ®BÊZæBÀ~¯B¯Ù®B'åBå°B9ã®BCŸãBˆ±Bäñ®BL0âBùt²B¤¯B)»àB^W³Bn¯B 6ßBq´B¼¯BëžÝB¼´B?¯B®üÛB¤:µBͯBÛXÚB²³µBFû®B²³ØBð'¶BÛü®BÒ ×BCжBÒ¯B©[ÕB£Õ¶BH)¯B&ªÓBà·BÁ9¯BçõÑBÔ·BKF¯Bì@ÐBš·Btc¯B¹ŒÎB}·B(¯B}ÛÌB·Bôä¯Bä-ËBdí¶BÌ °Bl‚ÉB+¨¶BWT°BËÛÇB1E¶BŠŽ°B7ÆB­ÝµBG\ªB’AâBþ B‹GªBªAáB¹n‚BÍ-ªB“£àB8„BNªBÄBêc²Bçá¨B ÂB*²BÊK¨B3ÁByɱBlš§Bã¿Bßb±BfÙ¦Bt¾Bôê°B6¦B†±¼Bwj°BF&¥BiY»B"Ù¯B8¤BýºB;¯B«<£Bð˸B]¨®B~7¢Bˆ·Bˆ&®B/¡B¨N¶B´­BöóŸBR!µB¢S­Bˆ½žBÛ÷³B6­BÛyB•Ô²Bà ­B)&œBdDZBs3­BfÈšBÃʰB²l­BEf™B`ЯBË­B¼˜BÿÖ®B1™­BUž–BöÛ­BБ­BX>•B|ܬBW‚­BpÙ“BÙã«BIu­B0s’B³íªB’`­Bø‘B/â©BwD­BÐÛBÁ¨B­BµÁŽBª™§B”w¬B€ÂBu¦B¸ «B-ò]¬B ãBÈ€B•Œ¬B<ãB0\‚BG³¬BŽ­âBa„B!Ò¬B•žâBÕ¸…Btø¬B âBðj‡B%­B¯âB‰B>­BàÆâB˜ÎŠB¡7­BkÛâBäŒB $­B‘èâB5ŽBï&­B¶ãBhåBJ6­B¤œãBÀ†‘BåE­BLäB¥“BØH­B“NåBu”B&V­BÖfæB5ÕBíp­BWçBL.—B5”­BnèB~°˜B ³­B£ÍèB‰>šBÉË­BpéB'Ò›BÜÚ­B¼ôéBMqBÍà­BsêB¸$ŸB=à­B#ÈéBÔ Bå­BwBéBs¢BPì­BzèB=ö£Bÿð­BÉ…çB­_¥B®õ­B‘æBɦBœö­B|ŠåB-%¨BDþ­Bi}äB“|©Bx®B²dãBʪBú6®Bo8âBɬBP®B@ñàBµ$­B^®B½•ßBÈ,®B2m®B¨-ÞBu#¯B–†®BNºÜB °BG«®BG:ÛBÕ°B¡Â®BGªÙBaƒ±B¶Ç®B! ØB·²B/Á®B6jÖB ޲B5·®BÆÔB³B¬®B| ÓB–x³Bñ®B·uÑBÖÖ³B«È®BÇÏB,!´BNë®BqÎBLQ´B$¯B"dÌBde´B6O¯BT²ÊB®`´B£¯B'ÉB B´B0kJ·ByçB£·†BèøµB4jæB£›‡Bž”´B)5æB¦ˆB°C³BcæBdŸ‰BÜ ²B!»æBeÊB±BH!çBŒBÙG°BÞ{çBGB¸ƒ¯B¡èçBõBµ¶®BÈèBz`B1®Bg]éBTÉ‘BË®B[9êBÏ@“Bâ®BöëBWÁ”B¡®Bj°ëBS–BŠ%®BÄ3ìB£ò—Bz9®BûìBöu™BÊO®B³ îB}ËšBøS®BäËîBëQœB]D®B4âîBåžBêú­B;ƒîBã§ŸBKÓ­B8îBÅE¡BÃÏ­BãYíBËØ¢B<Ì­B³ìBÒk¤B¶Ý­BàëBÒè¥BÄì­B4êêBæP§Bù­BãéB¬¬¨BL®BÖèB'ªBñ®BÉçBª[«Bt®BϲæBª«¬BÙ®B‰åBsê­Bá&®BfNäB߯B+®BMãB6°Bn7®BܪáBdA±B“F®BEàB<²B?P®BEÌÞBú³B/P®Bœ=ÝBÉʳB"E®B« ÛBQY´B1®ByÿÙBÏÙ´B¯®B [ØBÞMµBJ®B³ÖB×µµB8ü­BhÕB4¶BÚÿ­B?XÓBþW¶B®B¦ÑB;жB"®BZòÏBÿ©¶B /®B>ÎBöB,R®BÛŠÌB2ʶBþq®BM×ÊB"¶¶B_®B8%ÉBЄ¶B½}®BüvÇBÀ7¶B%„o®BfrãB︓B…®BRŠäBë•B¦®Bp¨åBÀN–B[Ï®Bê¬æB9ª—B?¯B@‘çB"™B3*¯B|JèB颚BÑD¯B‹ÝèBp<œB-M¯B ;éBôåBs;¯BTPéBB¥¯BéBXH¡B×ÿ®B±ãèBÃ÷¢BKë®B6TèBë’¤B)Þ®Be€çBî¦BÑ®BU‡æBØu§B Ç®BIŠåBÙ¨BÚÉ®B‡äBÜ3ªBÝá®BwfãB!«B5¯B®1âBA±¬Ba¯BÚâàB¾È­B¢$¯B5ƒßB‡Ë®B0¯BÞBe¿¯BÇI¯B”¢ÜBÑž°B¶p¯BÛBÈb±B‘‹¯B¬‰ÙBB²B–¯BOé×B©Š²Bš¯BðDÖB.³B ¯BlŸÔB¨u³B¾£¯BC÷ÒBéÞ³B8º¯B¶IÑBÂ,´B¹ß¯B1™ÏB `´B°BÖçÍBYz´BHS°Bf7ÌBî|´B«™°BxˆÊB;g´B]á°BEÜÈB4´B4±BE8ÇB†Û³Bˆš±B>šÅBæ{³B ²B¢þÃBx³B ™ªBLðîBl8šB·ªB¹tîB¹²›BZa«B’¼íBGB8Ç«BÑÿìBé’žBIô«BGVìB" B¬B{®ëBr²¡BºI¬BóêBÙ9£B”q¬BêBt­¤Bé¬B5 éB_ ¦B詬BnøçBÍY§Bè¬B¨ãæB;ª¨B]جB¹ÊåBw÷©Bõ¬BÙ«äB?«BI­B„ãB¼}¬B8­BÂMâB]¯­B O­B­áB Ë®Bæl­Bv¥ßBˆÏ¯Bþ“­B9ÞB ½°BÑÀ­B°¼ÜBI±BÔë­B¼0ÛBýB²Bð­BÍ•ÙB–ײBOÖ­Bzò×BåO³B൭BkMÖBAÀ³BÜ”­Bà§ÔB¡.´Bcz­B/ÓBo–´BãBŠáB³é¬B_¹âBQ‡ƒBê­BÙžâB¸8…Bk8­Bÿ™âBê†B&g­B†žâBÁ›ˆBÖŠ­B%ªâBïMŠB¡‰­BW³âB¨ŒB/o­Bú§âBˆ´B¯l­BµâB'hB†­BçâBV‘Bš¬­BÁGãB•¿’B§§­BX:äB*”B.²­B^QåBky•BÍ­BÎ[æBÔÑ–BEõ­BEçB'@˜B§®BòèB‚ÙB+=®BZ¯èBRU›BOR®B<éBgñœBV®B.xéB¡žBöQ®Bµ\éBÿS BàK®BAñèBgú¡BÜK®B';èBœ†£BL®B0TçB¢ø¤BuG®BRæB]X¦BÎH®BªJåB&´§BYW®B˜7äB”©Bar®BŸ ãBVDªBᇮBÊÅáBÛc«Bb®Bõ}àBaƒ¬B‘¦®BðßBSˆ­B °®B-¸ÝBµ®BÀîB›GÜBOi¯B$à®BDËÚBP>°B·ö®Bp>ÙBÊó°Bå¯Bé£×B‰±BÖ¯BCÖBï ²B ¯Bç_ÔBø‡²B›¯B‚¹ÒB.ø²By ¯BŸÑByU³Be%¯Bš`ÏBF ³BNJ¯B°¯ÍB‘гBJ~¯B.þËBãæ³Bk¹¯BMÊB"å³Bäò¯BÆœÈBŸÅ³B%b„©BŽÐéB—Æ›B˜ªBÄûèBÛ(B¸}ªBaDèBʤžB•ϪBs›çBM. B®«B7ÚæB㮡B¯Q«B ìåBÆ£Bª«BääBŒm¤B£Â«BkÊãB›¶¥Bpé«BP©âB6û¦B£þ«BmáB]'¨B ¬BNàBë6©B¬Bx±ÞB41ªBR¬BqDÝB§ «Bõ3¬BsÎÛB¬B C¬B²PÚBìÔ¬B{A¬B’ËØB›­B0¬B_@×BêT®BÙ¬B×°ÕBã¯BW÷«B%ÔBʬ¯BÔ׫BuÒB²U°BÉ«B¢òÐBé°BS¼«BüOÏBIf±BC­«B~£ÍB(»±B~«B´ñËB´Ó±Bí*«B-FÊBð°±BBɪBZžÈBB`_ªBdúÆBO±Buî©BÀ[ÅB±Bºt©B¨ÁÃB0©°B›í¨BD,ÂBaO°B¸N¨B° ÀBrñ¯B’š§Bw!¿Bˆ¯BÙ¦B¡­½Bÿ¯B¿ ¦B}E¼B`‡®Bh3¥BGðºBPã­B›O¤Be©¹B]2­Ba£B6h¸BF…¬B$ʧºBïvßBlš‡B ´¹B;àB âˆBáÚ¸Bø¸àBÅ3ŠB¸¸BµbáB…‹B”5·BçóáB6êŒB g¶B³zâBQŽB0¡µB¶ãBZ½BWó´BEUãBYD‘BÆm´BtgãBÀâ’B½ó³B“ãBË‚”B±¡³BZØãBM)–BQx³BÓ6äBÓЗB@³BòÕäBÜb™BWÿ²B+µåBÔšBä²Bî©æB%<œBë²Bû©çBNB^³B³èB ÷žBŸ,³B˜_éB.… B]³Bü`éBC6¢Bj³BËTéB·é£BÃ;³BBéB¯š¥Búç²BÙéB1B§Bh¾²B–RèBͨB¿²B RçBé-ªBFã²Bî-æB$p«B³BåBç·¬B€#³BCäBîB0³B¹&ãB8ˆ¯B%³Ba0âBð°BE³Bè áB=4²B ³B×µßBñA³B·³BË%ÞBñ³BÉ,³BÒÜBg´BeW³B2ßÚBKÝ´BꕳBBÙB‡]µBtã³B¨×B áµB(9µBr;äBƒuBx´µB¤2ãBÆþ€B…ýµBÞcâB¼w‚BG ¶BÛòáBŒ„BŒâµB_êáByÎ…B¥—µB%uâBðd‡B›JµB*hãBüƈBôè´B äBGŠB(…´B†“äBâÞ‹B†´BiÞäBò|BÛ«³B“7åBÓBÙ]³BíšåB¼B³B=æBc\’B•ײBN‚æB¾ù“B娲B#çBâ•Bn§²B?ÍçB—BHͲBÛèBñ ˜Båï²B™éB`;šBe ³B'uéBûå›B¶³BhžéBu—BÅþ²B €éBDIŸBÒá²B±aéBû B,³BëYéBß«¢BN³BSTéB¢_¤BÀϲBO:éB¦B5вB›ÎèB™®§Bm²B?ýçB,©B'v²BæðæBÿƒªBo“²BÖåBeÏ«B&§²BLÕäBB/­Bÿ¹²B§àãBõ—®Bß¿²B\ëâB¨°Bµ²BÁÙáBaT±BÖ¤²BCàBŒ€²B¡¥²Bª-ßBgl³B#¹²Bò–ÝB ´ByÕ²BéòÛB‚€´B¬³B1RÚB±ü´B@³B¶ØB8€µB¸„³Bñ×B.ýµB;,¨BžûëBN;œBµ¨Bw/ëBƒ£B#$©BíkêBŸB„†©B^¿éB3 BÄÜ©B éB*!¢BH%ªBx+èBü£B_ªB !çB¦ä¤BaªB7ûåB¼#¦Bõ»ªBÆÏäB"^§BŠèªBS¤ãBˆ˜¨B «BšiâB Å©B«BáBˆÚªB5"«B†´ßB¸Ö«B¡7«B`@ÞBhº¬BŒ_«Bt¾ÜBCƒ­Bzz«B]4ÛB>®BÝo«B¥ÙBï®Bé=«B»ØB7”¯B «BsÖB#6°BÒªBDîÔBÕ°Bu©ªB[TÓBÊf±B耪BsºÑBø±BwoªBÐB“x²B¬eªB pÎBGÞ²B=6ªB\ÀÌB#³Bâ©B¢ËB·³B,y©BçkÉB¡ý²B`©BÉÇBýݲB_~¨B6+ÆBY®²Bšø§BÄBux²B,'³BχáB¥Bñ´³Bø¾àB½x‚BØõ³B‡%àBŸ „B;é³B¸îßBÒ»…BÊÆ³B àBªm‡BF”³B†wàB‡‰BYU³BüáBƒ£ŠBê³BhváBzBŒB!”²BζáB–ãBÃ(²B0âBOxB]Ó±B¨ÎâBh‘BÌ›±BkoãBå–’B4y±BóäBá-”Bf±B‰¤äBYÄ•Bì^±B oåB„F—Bjp±BjUæBy¸˜Bg’±BY*çB†3šBd´±BHÿçB“®›BxѱB(¡èBUBB„á±Bö éBèžB>÷±B¿FéB®— B·²BÝFéB}J¢BQ²B%éBý£BYë±BAÝèB¿¨¥B|ª±BbXèBÑB§B‰±Bà„çB¾¾¨B™ƒ±BσæB2ªBR™±B›jåB/l«Bß³±BQäB}¸¬BöбB 6ãBn®B-Û±BÎâB.I¯B†Ò±BqßàB÷}°BñBÑ‘ßB"—±B4ȱB×#ÞBq…²B}Û±BÓ™ÜBAA³BŸö±B×ÛBÞ³B9²BhÙB÷n´B*G²B8Ë×B(÷´Búq²B 'ÖB»gµB¬•²BzÔBý³µBß¼²BxÈÒBTÛµBÃñ²B–ÑBäµBt6³BgÏBbÔµBd‚³B¹ÍBJ¿µBHBµBÍÿâBä…B¯µB?XãB¯†B¡´B/"äBƒˆBQÞ³BðßäBjt‰BÊ ³B“ƒåB ÌŠBï2²B7ýåB*3ŒB*±BÍXæBtµB*ý°BÅÃæB†GBf”°BEçBvÚB—N°B³øçB§a’B\<°BñÖèB†Ø“BpJ°B®±éB”Q•B£\°B`êBÅà–BFr°B/ãêBò˜BǰBWëB #šB¨·°BíµëB§Ê›B¸°B;ÛëBâ|BȈ°BÆ¿ëBC-ŸBÔB°BÊqëBTÔ Bî°BPëBgx¢Béï¯BýiêBh ¤BIÒ¯B6“éBÓ‡¥B ¼¯Bë§èBpö¦B¸«¯Bn±çBü]¨B¸ª¯B¬æBV»©B¿¯B6åBL«B‡Þ¯B*[äBó8¬Bñ¯B^ãB¶X­Båö¯Bo¼áBïf®B1ù¯B9ZàBVf¯Bä °BšéÞBöO°B—°BûxÝB–9±B¶@°BÂøÛB[²B ^°BšhÚBi³²Byq°BwÍØBHF³Bþ°B7+×BAijBh°Bp„ÕB2´B*Ÿ°BeÙÓBù´BS¹°BÂ)ÒBδB±á°BáwÐBFñ´Bu±B‘ÆÎBdý´BÕ^±BËÍB8ø´BO¬±BiËBãá´BKþ±B²¾ÉBS¯´BkZ²B¥ÈBâ`´B„òB+}ÆBÈ´B¥3³B<áÄB¤³B]¥³B©EÃBªF³BO'´BÞ²ÁB¸Ù²BýÈ´B44ÀBbR²Bª~µBhÁ¾BÒñBZ;¶BzO½BT<±B»·Bêä»BÝ´°B8ó·B-˜ºB±°BÕè¸B@^¹Bèi¯B¬ºBÝ@¸Béä®Bk»B<·Bt–®B]Ô¼BJ¶B‚z®B‹?¾B^YµB}®BŠ¥¿Bâ`´B>~®B ÁB®j³Bk{®ByÂB\{²BÌq®BÃåÃB±BLl®B–SÅBc °Bom®BÃÆBÙ¶¯Bó^®B-1ÈBæÊ®B¦R®B’ ÉB¹à­BëR®BåËBIû¬BèT®B„ÌB¬BÍL®BòôÍBï,«B£;®Bµ]ÏB9ªBò*®BÓ°ÐB0'©BÃ0®BF#C²BQláB(ó€Bšè²BÜ©àBŠT‚Bµ;³B«àB^߃B·=³B‰¾ßB‰…Bà ³B§ÁßBd@‡BIñ²BŠàBêˆB¨³²B÷–àBÖ„ŠBg`²BwöàBë%ŒB9ô±B#JáBÇÃB6‹±BxÊáB÷VBA±B‘aâB-éBбBqùâBä’Bë±B@‘ãBè”B0õ°Bh5äB¬«•BVð°BåB¤*—B ý°B}ðåB8š˜Bë ±BöÚæBÍ šBõ*±BŠÇçB¼v›B1N±Bu­èB«çœBti±BçŽéB\žB {±B-êB½øŸBýz±BÖ:êBW«¡B†v±BÑêB7]£B^Z±B?ÖéB ¥B0±B~_éBD«¦BÕø°B˜ŸèBò0¨B{ç°B±çBž©BÏé°B5©æB(ùªB(ö°Bë—åBM¬Bƒ±Ba€äBÝ›­B ±BñYãB^Ý®Bä±BÕ%âB‚°BÙ±B¹ÞàBŒ3±Bü±B’}ßBk4²BŠ&±B8ÿÝB!³BY=±BKkÜBE¬³B W±BxÏÚBC<´B:u±Bó0ÙBpôBü—±B¼×Bí@µBñ¹±BMèÕBî§µBÅ×±B:ÔBõîµB5ù±Bò‡ÒBζB/$²BÕÐBj!¶Bý]²B»#ÏBH¶B¨¤²B—tÍBp ¶Bjò²BÇËBZòµB¡I³BjÊB¢ÁµBï°³BÈ{ÈB>tµBÍ$´BQàÆBµBÈ ´BmEÅBeÆ´Bù$µBm«ÃB€|´B˜¸µB8ÂBP&´Bl¶BÞœÀB°³B×8·B…5¿BÊ#³B ¸BÆÔ½B‡–²BÒì¸B“r¼B²B¼á¹B´»Bý±BnõºBËß¹Bd*±B<¼B»Ç¸Bã°B3 ½B‰Í·B ͰB“¿B¤è¶BÁÛ°Bî‹ÀB{¶B“±BÅÂB=µB±B¿ÃBºc´B§+±BOõÄB®ƒ³B.±B6hÆB?Ÿ²BC4±B£ÔÇBp°±Bâ1±By?ÉB;¿°B6,±B¬ÊBÿѯBù ±BØÌBå®Bîþ°B62”¨Bå íBYÆšBòn©B*]ìBØœBrªBYžëBPuBÈžªBßêBæžB·«BV6êBÿk BsN«B?•éB˜ù¡BdŒ«B ÅèBÄs£B¦»«BñÉçBeÕ¤BõÜ«BÒ«æB:¦Beü«B°ŠåBb§Bã¬BégäBS¦¨Ba?¬B!EãB ê©BÈc¬BÊâB‡&«B~¬B·×àBùJ¬BÀ‹¬B&ßBÖV­BBž¬BÈÞBßL®Bܽ¬B¢ÜB{.¯B!å¬B!ÛBù¯B“ô¬B§“ÙB ®°Beå¬BŠû×B‚I±BcÀ¬BC^ÖBsÒ±BÜ”¬Bñ¿ÔB8V²BÓc¬B !ÓB%Ö²B*H¬B5}ÑB9L³BE¬BÝÕÏB̸³BiB¬B}(ÎBˆ ´B¢.¬BÛuÌBt4´B}¬BÜÂÊBó8´B¾«B©ÉB_1´B]_«B“iÇB·´BeýªBáÀÅBó´B€ŸªBÄBµØ³B%@ªBšpÂBç³Bø³©B(ÜÀB¢Q³B©B¥\¿Bâ²BÕ>¨B5ì½Bûd²Bh§B»…¼Bè±B~y¦BF/»Bj±Bì}¥BAè¹BݰB`ƒ¤Br¤¸BH°B÷„£Bû_·Bк¯B(€¢B¸¶BØ;¯Bul¡B³Ý´BPÈ®B<4 Br¶³Bž®BkΞB¢Å²Bz»®BvnBùê±Bƒ@¯BêœB0 ±Bûá¯BÒ±šB§K°B°r°BëR™B'l¯B\ò°B¹˜B“t®Bíg±B Ë–BEU­BóѱBBŸ•B*¬B;9²Bå_”B«Bí¬²Bƒ “B&ªBu&³B!œ=¸B–‚áB°ÙB§W¸BÄâB+„B,¸B±âB¿)ƒBXÜ·Bá°âB£Ó„B:p·BæãBœn†Bß¶BЖãB–ó‡BëM¶B¹äBx‰Bí¦µBжäB7ìŠB2,µB åBŒBdÁ´B3[åBg#ŽBÕX´Bi”åB ÆBâû³B‡àåBœi‘B#²³Bç>æB¼ “BÀi³B÷¨æBP­”BÓ#³BØçBµK–BÕù²B߸çB®à—B§þ²BÇ|èB@f™Bç³Bõ<éBgìšB6³B£¸éB°œB®K³B÷ïéBs=žB*_³BñüéB¡ðŸBñ{³B%æéB䢡B_•³B ÐéBfU£Bz³BÆÌéBZ¥BE'³B*ÃéB ´¦BÈì²BºFéBÇQ¨BÈݲBBbèBÅ©B7ù²B·DçBæ «B=³Bë æBRP¬BË=³BTåB¾¦­B¯H³B FäBÖ&¯BJ³B²yãB¨°BÀ@³B«âBÚ²B"b®BbãB™”Bß|®BÏBäB9Ø•B‚¡®B%ZåBa%—BQÍ®BFZæB¿ƒ˜Bfü®Bî6çBïø™Bá¯BàçBf‰›B0¯B™UèB¾,BÃ3¯Bk‰èBxÝžB &¯B—ièBì B¨¯BÈñçB»2¢B– ¯B>6çBF¼£BÛ¯B®QæB¤/¥B5ó®BYåBÏ•¦BŽä®Bu`äBûû§B§á®Bß\ãB Z©B ó®B^GâBðªªB÷¯B÷ áBþÙ«B8¯BȹßBJë¬B˯BNUÞB„ç­Bl'¯B:ëÜB€Û®B<¯BâwÛBŽÀ¯ByV¯B§ôÙB ‰°BÔm¯B‡aØB0±B¹}¯BGÃÖBxº±B¦†¯B+!ÕBe9²B{‰¯BÔ{ÓB­²BF”¯BÒÑB˜³B–ª¯B„$ÐB»]³BuͯB\tÎBµ•³B†ÿ¯BÃÌBV²³B@°BžËBO´³Bß‚°BFcÉB©›³BòϰBQ¹ÇB”^³BÅ6±B_ÆB ÿ²BGŸ_²BƒÊáB¼K€BÙ ³B·þàB0™B •³B²<àBþ ƒB¯µ³BùÔßB´„B ³Bš²ßBf†Bv³BÚßßB~ˆBP=³Bu_àBz²‰Bïó²BÒàBœP‹Bi–²B²áBbóŒBÑ"²BPháB!‘ŽBïÀ±Bm÷áB(!BJ}±BâBÊ®‘BßT±B®8ãBD“B?±BÁÐãB Ü”BÁ2±BþäBVj–B?0±Bü\åB…ã—B+E±BµNæBN™BV`±BlçB²ÐšBu±BûªçBjœB‡†±B} èB¹žBï—±BÿkèBl»ŸB~¬±BxèBNm¡B,±BÚjèB £B®±BIèBZʤBÓt±BÛ‚çB<`¦B„E±BT¸æB„ß§B2±BÈÃåB9H©B;±BSµäB‚žªBK]±Bï‘ãBšá«Br±B^fâBö­B呱BÈ0áBÐBëµB·ô²BÚÎB×ø´BÜA³BâÌB!ã´BR–³B¥6ËBR¿´B]ú³B’ÉB¨~´B n´BôÇB&/´B“ò´B(ZÆB å³B¢µBÛÁÄB™§³B5¶B=*ÃBzm³B®º¶BÅžÁBijB{|·B(ÀBK©²BK¸Bö½¾B(²B› ¹BT½Bó¯±BÀ ºB«ô»BÍ@±Be»B¬ºB‘Ó°Bº=¼BN€¹B³e°BHŒ½Bp¸B&°Bï¾Bæs·BM°BÅYÀBl‚¶BذB’ÈÁBP—µB'°B–6ÃBß«´BX°BiŸÄB¿º³B Û¯BOÆB—DzBÊ®¯BiÇBÏÒ±Bn¯BÚÂÈBÂÞ°BC¯B|%ÊBÃí¯Bi¸®BŠŽËBR¯B¹q®BGûÌB:"®Bz&®BðnÎBÈP­B†Î­BƒæÏBBG­B/Í‹¬BÙ©ãB¢Æ‚Bº¬¬B¼sãBÖu„B—ѬBëlãB(†B0­B)vãB5Ù‡BÈ.­BgãBfЉBv_­Bü“ãBø:‹Bžb­B ·ãB_íŒB¶?­B4ããB‘ŽBü ­B¯äB^KB÷ͬBzRäB}ö‘B9¬BD²äB<›“B‘’¬BŽƒåBÙ•BÒŒ¬B‡æB€x–B¼“¬B…çB!Û—BG¨¬BVVèB1Y™BĬBõÿèBßéšB3Ù¬B\¡éBR~œBÜè¬B?êBGžB~ý¬B ÔêB¥­ŸBÙ­BsQëB9N¡B"4­B]³ëBö¢BO;­BWLëB¤B«S­BDnêB*¦B®i­BpéBv§BÈ{­BëcèBÊͨB˜ˆ­BÔSçBª"ªBg•­BDBæB]v«Bb¬­B€!åBƼ¬BÆÂ­B¾òãB^ö­B&Ò­B†³âB¼¯Bµä­B¨báBã4°Bæ®BLàB’7±Ba&®B”ÞB0 ²B©S®B ÝBƒé²BN…®B#ƒÛB„’³B°•®BuæÙBc!´BE…®BBØB¯—´B'x®BƒšÖBšµBks®BLðÔBKcµBšv®BÌBÓBg´µBb®B§‘ÑBYîµB¾–®BÞÏB¶Bž¸®BW+ÎBž*¶B¼ê®B yÌBU+¶BD ¯B:ÈÊB´ ¶B¶J¯B§ÉB0εB3k¯BJqÇBjµB.“µBÆ äB¤¾€BË[µBvAãB”7‚BÀuµBbÌâB¬ÚƒB YµBãºâB3…B[µB¢VãBé‡Bê´BpKäB…ˆB¿x´BèäB# ŠB¼Î³BÄYåB,‹Bô³B¯åB»B¯Ž²B” æB£ŽB‰/²BÐmæB[ABÁé±BJèæBãÝ‘B¶±BFŽçBÅm“BÓ±Bv]èBËì”BП±B(éB|s–B-·±BÑÆéBD˜BÕ±B•BêB(¦™BÍò±BaŒêBªR›B#²BªêBþB ²B"£êB½¸žB|²BA|êBÐj BÙ²B`UêBâ¢B ²Bê3êBaÏ£B$ä±BµêB¤¥Bœ¢±BƬéBG#§B~±BÓíèB™©¨Bís±BøçB4ªB‚±BgææBae«Bz‰±B¬áåBìB¤±B#ßäB"®B·›±BÓÐãBÏx¯B:›±Bs±âB9Á°B@š±B–máBñå±Ba›±B« àB}è²Bð«±BDˆÞBá­³BúÁ±BgìÜBY>´B}ݱBiJÛB »´BݲBž©ÙB,9µBï2²BU ØB§¸µBa²B~eÖB%%¶Bˆˆ²B¶¸ÔBÊp¶B¸¬²B¦ÓB2–¶BVÚ²BëSÑBÚ¶BdzB]£ÏBú¶Bö`³BÒôÍBÊy¶BЮ³BDGÌBob¶BIÿg«BÏâB•˜€BŒy«BðáB¿‚B®…«Bo]áB(©ƒBnŠ«BU'áB™Y…B%—«B'áB: ‡BX·«BTPáBí½ˆBãä«B¤’áB?jŠBç¬B²»áBÈŒB׬B˜¸áBùÍBœ,¬B ºáB‰Bs,¬BtßáBÁ3‘BÞ¬B+5âB\Þ’BFâ«B=ÊâB3u”Bô¦«B–ŸãBûì•B k«BðtäBÄd—BU_«B\YåB*ؘBÑ«B 1æBxQšBE®«B åæBÜ›BÖÈ«BgçB/{BèÓ«B¾çB9&ŸBïð«B–µçBúØ B— ¬BÁBçBÅz¢B¹S¬B‚æB•þ£Bçz¬BÜ“åBöi¥B ›¬BR‰äBêÁ¦BV±¬BÙqãBO¨BÜɬB\VâB-[©Béá¬Bn$áB“‘ªBSò¬BØßB:¬«BÎö¬B•uÞB4«¬BL­B= ÝBº›­B¶­Bá’ÛB_{®BÃ6­BÚBmH¯B\?­BÑ…ØBr°B«2­BRïÖB7 °Bè­B›TÕB›3±Bý¬B>·ÓBÚ½±B…â¬B@ÒBÐ=²BxÙ¬B¶pÐBѰ²B1à¬B ÇÎBݳB;Û¬BãÍBAN³B'ȬBzaËB^³BGŸ¬Bf®ÉB+V³BC[¬BdÿÇB§>³Bz¬BäUÆBê³Bº¢«B®ÄBYå²Bñ?«B' ÃB§²B=ƪBnÁB{Q²B'ªBÙæ¿BLä±BŠl©Bßo¾B®j±B5£¨B¬½B‡í°B@ȧB »BLj°BݦB‘PºBgÕ¯B9î¥Bo¹B°(¯B#ÿ¤B9ηBu|®BݤBý¶B³à­B‹í¢BjYµBÊ]­B^¶¡B‘:´B7÷¬BJd BÊ,³BƬBòŸBÎ.²B²á¬Bª©B9±B“B­BNœBëV°BØÅ­B[ëšB’n¯B¨'®B ™B懮BÇm®BȘB"ž­Bz¡®B‚°–Bb©¬B/Ì®BuN•B„®«B¥í®BÑå“B罪Bø¯B‹~’B}Ê©B63¯B/#‘B¬Ä¨BÐB¯B^ÒBé±§B[¯B\•ŽB ‰¦BX{¯B˜kB…K¥B¯B0ϸ·BbæBåE†B)€¶BŒáåB#X‡B¥RµBvÕåB푈B¤´B6ôåB·º‰B&ï²BÉ8æBôŠB²B³¢æB·RŒBF±B{ûæB0ÑB—¤°BUçBõ[Bs&°BÛáçBÑäBhÙ¯B°¢èBUd’B²Ó¯BΈéB×Ö“Bê¯Bˆ[êBÿS•B´ü¯BúêB±é–B1°B¢pëBÀŒ˜B0/°B+éëBk.šB]°Bˆ[ìBЛBtW°B¿ŠìB¿B¡°B sìB¦0ŸB̯B~'ìBžÖ B}¯Bæ³ëBVx¢BV¯B0ëBe¤BÜj¯BêBCw¥BþW¯By*éB±á¦BG¯BR4èBqI¨B<¯B>8çBS­©BdD¯Ba"æB­ýªBÄL¯B„ åBN¬B³`¯BÖãB¬€­Bht¯B؇âBe˜®B1}¯BJ,áBš ¯BL€¯B"ÊßB °B‘¯BÑYÞBBбBª°¯B`ÖÜB¦Q²BÚѯB-DÛB9ù²B4å¯BG¨ÙB÷‰³Bî¯BqØB€´BBø¯BÝ^ÖB¨u´BѰB(µÔB××´B°BmÓBÂ%µBè2°BãUÑBWµB4Z°B£ÏBnmµBî“°B¾ñÍBÐsµBòܰBíBÌBØeµB(±BÏ•ÊB`AµB¤t±BKìÈBµµBžÊ±BJJÇB¢´B{/²Bò«ÅB*B´BÙž²BÖÄBKä³B3sޝBé2áBNmBy°B2­àBÍù‚B&°°B%”àB‹„BêK±BÈÇàB”†BϨ±B4`áB2¬‡BDZBCaâBX ‰B;¹±B™FãB!~ŠBlg±BËÙãBKŒBŸ±BÿläBu¢BQ–°BÅÈäB9Bº°BÀåBœÔBí¯B”XåB p’BÈ2¯BÏ¿åBÆ ”B¦¯B$‡æBBœ¯BçBÚ–B˜<¯B4“èBÿ@˜B¥c¯B¾aéB¿™B ˆ¯B†êBÑL›Bô©¯B|­êBâœBůB6ëB/žBL³¯BjëB, Bõu¯B~‡ëB‰Û¡BE¯B .ëBRƒ£BÊ'¯B'ŒêB¥Bv¯BQ›éBR‚¦BޝBu¤èB¢é§B\÷®BÚ«çBÓO©B)ê®BÙ±æBµªB?î®B£åB™ ¬B2ý®BÄwäBpH­BK¯BŠ1ãBºi®Bi¯BäÙáBÖv¯B‹'¯ByàBûw°B 6¯BñßBÁk±B}Q¯B[ÝBÙ<²Bt¯BñÜB¨ê²BÈŠ¯B‚fÚB³B”¯BÐÄØBHÿ³B‡˜¯B•×Bp´BW¢¯B±uÕBÖ´Bù°¯B{ÊÓBi1µBBůBBÒBšoµBôá¯BngÐBx’µB°Bå´ÎBÌ¢µBÕO°BŠÍB”ŸµBÕœ°BùVËBÍ…µB„ã°BɪÉBQµBC,±B ÈBÿ´B{±BsbÆB8œ´B’è±BŽÄÄBº<´B…Y²BÏ(ÃB,ß³B,ï¹²B¢þáB÷6€BLt³B*)áBU‚B*ç³B³eàBÍö‚BÅ´BÊãßB •„B`6´BáaßBE3†Bí´B²5ßB,ä‡B ì³BG@ßB•‰B˜§³B#„ßB>‹B×R³BZÃßBëäŒBDõ²BÄãßBWŽBR™²B‡óßB 7BÙ²B§àBš×‘BI“±B'<àBìr“B11±B sàB•Bü°B4ÇàBbÀ–BÌß°BHVáB@[˜B¶°BœâBqß™Bµ‡°Bh ãBíF›BÎq°BëäB3®œB@°BÁäB¯5žB ©°BX8åBõÖŸBiȰBÝ`åB¾‡¡BšÙ°B åBø0£B•аBÌEäBí¹¤B縰B0oãBÜ4¦B6¡°BkƒâB£§B˜°Bª|áBEÿ¨B °BôJàBµ6ªBø¨°B-ùÞB:K«B*³°BŸÝBÔU¬BBаBfÜBP„­B;ÿ°B×IÛBÌ®Bl.±BòÚBºê¯B=U±BØØBâȰB§s±BÔ÷ÖBœg±BNŒ±B-WÕB>é±B ±B¼­ÓB‰K²B6º±BBÿÑBî’²B:á±BŽNÐB‚òBg²B5ÎBKܲB¿[²BÐíÌBmÓ²B³²BoCËBBª²Bé³B¾ŸÉB4e²BŒ‡³B´ÈBÚ ²B.°•­B+FãBðÆB1Þ­B¥ùâBÑmƒB®ByäâB\…B—L®BjÞâBÌ͆Bò®BúêâB~ˆB‚ ®BâãBô/ŠBȉ®BiãBúâ‹B5N®B3ãBH’B"9®BÓãBEB8T®B¨2ãBRöB …®Bv•ãBþ›’B”®BÑäBc”B2¨®Bµ±åB€F•BË®BSÂæBU™–Bõõ®Bw­çB%˜BP!¯B¿sèBˆ™B{C¯B¤éBõ›B ^¯B©éB.´œB´\¯B,óéBÎažB <¯BÚïéBg B»¯BS©éBIÁ¡B¯B¤ éBvV£BHù®BÂ.èBtϤBDë®Bû5çBˆ5¦BÓá®Bn8æBl˜§Bæ®BW.åB.ò¨BįBäBc;ªB "¯BÒÖâB€h«B¦2¯BƒáBIz¬Bñ6¯BæàBêv­BÒB¯Bd³ÞB·h®BZ¯B¶=ÝB·I¯BÀv¯Bx¹ÛB°B#ޝBV&ÚB·°Bcž¯B;ˆØB¶A±Bw¨¯B'æÖB­À±BÀ¬¯B¡@ÕB4²Bâ·¯B³–ÓB™•²BïBÄìÑB÷²BšÙ¯B0?ÐBÃD³B^ü¯B ÎBï|³B.°B±ÝÌBs™³BVo°BW-ËBàš³B¯´°Bo~ÉB²³BD±BõÔÇBÜE³BÁn±B7ÆBÕæ²B *¨BX·ìBßœBÀ¢¨BùìBy_žBR©B¤nëB!éŸBcS©BñÏêBšv¡Bñ§©B¨êB(ø¢B£î©B0éBéc¤B“&ªB&!èB÷´¥BDSªBáõæBƒï¦BÙªBoÊåBé)¨Bn¬ªBýžäBOd©BÖªB³oãB]›ªB~ñªBý)âBÒ¼«B‘«BÑàBçǬB¥«B!xßBüÒ­B9«Bƒ ÞB Ä®Bg«B¢“ÜBoš¯BD—«B½ ÛB…U°B›«B6yÙByÿ°B-o«BÅß×Bƒ‘±B)«BxEÖB%²BõÞªBy«ÔB™²Bb—ªBÓB:³B=nªBloÑBâ–³B‘dªB§ÊÏB™ ´B‡QªBÎBÆd´Bz!ªB%oÌBz“´BHÓ©BpÁÊB1 ´B9k©B)ÉBªŸ´B î¨B#wÇBL´BÒk¨B£×ÅB®k´B71,©B«ÇíBm›B™ú©B$íBœ`œB¬¤ªBäbìB†ÀBC«Ba¥ëB8ŸB_«B½ÿêBúÄ B½ «B¦WêBâQ¢BEØ«B'‰éBûÍ£B”¬BµŽèB°0¥BÙ!¬BNvçB˜}¦Bñ=¬BâWæB§Å§BA]¬BÛ6åB# ©Biƒ¬BaäBþJªB¥¬B`ÕâBTw«B¶¹¬Bó„áBÝŒ¬Bñ̬BE!àB‰‰­B4ë¬B±ÞBŽr®Bx ­Bß@ÝB’[¯Bp/­BÎÃÛBÌ-°B«BOÃB9´BЗªB‹hÁB¯º³B‚ô©BIá¿BèR³BJ3©B1n¾B=ײBõf¨B¦½B5Z²B;ƒ§B?£»B¯Ý±B؈¦BWºBz[±BƒŒ¥Bî¹BÂɰB‘’¤B:Ï·B 3°Bg’£BƒŠ¶B©¯B_Œ¢B"EµB|-¯B1n¡B¡´BQ®B$ B;õ²Bf™®B:¸žB= ²Bu¯B\[Bˆ]±Bò¯¯B.þ›BᘰB‘Y°BÉŸšB£È¯Bò°B·B™Bì®Bj{±BÅø—B×î­B&ü±BŒÈ–B´Î¬Bs²Bx™•B‡®«BÛì²B$W”B쫪Bþu³B.“B×Ë©B´BJ²B—ŽâB:€BD³BWÃáBAB*¹³BÖáBÝ ƒBÛ³B ¯àB²„BQʳB¸™àBe†BL¨³B­óàB,ˆB ‚³BwÎáB’…‰BOH³Bç‹âB ‹BXè²B ãB9 ŒB…j²BjãBY6ŽB½ ²BŸæãBÆÌB$ʱB“täBd‘B‘™±B€åB¯û’Bs±Bû¨åBߎ”BGa±BÙeæBˆ–B¹s±Bû6çBÆ•—B ¤±Bä èB@™BãDZB3­èB­¢šBà±BzéBlGœBâñ±BÃ\éBöBôÔ±BgIéB¨ŸB„¦±BÖíèB*P¡B½v±B7|èBEò¢BÞF±B±ÚçBc„¤Bè±B¸ çB"¦Bˆþ°BîæB³k§B'æ°B$*åBDרBê°B- äB!1ªB ±B`ÿâB×v«Bˆ/±BŒËáB멬B‘A±BZ‰àBïÏ­B=±B›4ßBæà®BðF±BŠâÝB õ¯B¨^±B†ÜB7û°B}±BwÛB°Þ±Bï–±BˆÙB™²Bþ²±Bñ×B5³B©Ï±BOPÖB¶³B³ê±BݦÔB™´B> ²BG÷ÒB U´Bþ7²BÊEÑBu´By²Bw•ÏB{³B¹Ó´B&ºÅBÑ2³BHaµB«!ÄB–ò²B‰óµB“‹ÂBõ­²B¯ ¶B>ÁBYI²B@`·B6’¿BýαB $¸B "¾BóL±Bmô¸B–µ¼B„Ô°B¶ã¹Bª]»B²Y°BtñºBš!ºBRÔ¯BÛ ¼B6¹BÁY¯Báq½B`ö·B¯BEѾBVö¶B§ò®Bs0ÀBôµBÏä®B΋ÁB³ï´BÕÀ®BêÂBÁñ³B¾‹®BÌHÄBÕõ²BQ®BÆ­ÅB ²Bw®BÃÇB‡±Bâ­BvÈB…°B‘­BæßÉBõ5¯BDO­BTËB#Y®Bg­B[ÎÌB„­Béú¬B¸LÎBµ½¬B©º¬BžÉÏB©¬BÕ=¬B|8ÑBÝl«BÚ˜«Bú¤ÒB/¹ªB:üªB2 ÔBFªB LªBIæÇ±B•\âBø¡€B뀲B­áBª‚Bûí²B@áB±ƒB³BºÉàB<:…BØY³BÍ&áBÛ†Bq³BcëáB©_ˆB8[³BýâBಉB׳BÉãBÎ.‹Bx²B:MäB»ºŒBæ²B¿¸äBMŽBñB€+åBèBQ‰±BÛ­åB„‘BìX±B›JæBû“BÓ8±B çBñž”B‘5±BÕçBf –B¿K±B¿˜èBy¥—BGp±BaCéB5™Bÿ±B¿éBÇÕšBÆ©±BK êBÄœB$¡±B¹êB)5žB{±BàóéB5åŸB/J±B›¢éBŸŽ¡BJ±BWQéB 8£BÏè°BläèBNÛ¤B>¹°BÙFèBo¦Bm”°B÷uçBì§B°B.ƒæBòU©Bò‚°B{åB?±ªB§°BÎ]äBgú«B2¿°B†2ãBQ6­B%Ó°B‘ùáBùe®BgÖ°B@±àBµ…¯BÙΰB”ZßB2”°BÏÖ°B ôÝBh±Bçî°B2vÜBD`²BJ ±BRçÚB‹³BŸ#±BÒNÙB¸©³B¡=±Bÿ¯×BÏ0´BW±B£ ÖB¢´Bp±Bê^ÔBÈø´B#ޱB|®ÒBl1µBˆ¸±B6üÐB{LµBsò±BáJÏBNµB88²Bl›ÍBDµBw…²B®íËB.µB…Û²B¬CÊBùþ´Be>³By ÈBH´´BL®³B~ÇB„V´B¸$´B-iÅBþ³B£´BƒÎÃBä­³B!+µB´7ÂBZ³B@ÓµBäµÀB«ä²B¼‘¶B.E¿Bg\²BVX·BëÙ½B@ѱB&¸B‘q¼BI±Bø ¹BJ»B&İB(ºBcÙ¹BÃ4°B²F»B¹¸B—ïBŽ ¼B;··B8‡¯Bú¾Bì¶Bv¯B’s¿BTѵBz¯B ÙÀB2Ø´BWx¯BA@ÂBEâ³Bmc¯B+¢ÃBáæ²BÙ<¯BÿýÄBþã±BX¯Bô^ÆBÖè°Bà®BpÅÇBŽõ¯B®±®B‹.ÉBä¯BÊ®BÊB©®BÄw®B™ ÌBC3­B¸Y®BÞÍBýP¬B3®B8óÎB²r«B“®B^ÐBö‡ªBÊ­BŒ‚´BÀpñBXë‘Brþ³BmêðBXt“Bzš³B½#ðBYë”BÑc³BHJïBga–BÖF³BçœîBjð—B/9³Br-îBœ•™B{>³BgÃíBa<›BÆC³BZYíB&ãœB»D³BØìBzƒžBp#³B0DìB< B=ß²Bu§ëBG­¡Bœ²BAëB–O£BX²BÊ ëBû¤Bõ²BhïêB”§¦B©Ü±BácêB‚A¨BDZBs„éB~·©B|˱BW~èBC«BÊűBŽçBT€¬Bí±±BQ¸æBðû­B›±BôâåBŸw¯B–±BààäBY×°B¥±B€§ãBÛ²BW·±BhLâB0³B}ϱB6ÚàBÀõ³B6í±BoEßB³—´BÓ²BFžÝBèµBZ#²B9óÛB[µBL²BMÚB‚ĵB„²Bf¬ØBM<¶B ¿²B ×BT¬¶BFJ¦BÕbãBTD…B!J¦B±ºãBúê†Bo´¦BÑ<äB}ˆBº2§BÈÔäBvŠBŒ¤§BÉyåBs„‹Bˆ¨B]3æBÅBÜJ¨BÛýæBÝ~ŽBº|¨B}ÚçB³óBǘ¨BÁµèB¥k‘BꮨBrnéBö’B<ƨBêBê”Bãà¨BYpêB}4–Bþ¨B¨»êBÇà—BÒ:©BÐêBΙBüéBÑHêBÅ›B¤]ªB’–éB¼…œBëçªB§ØèBõB9C«BÈ?èBô‚ŸB†«BçBÿ¡BlÀ«B‹ÎæBw¢B!ð«B×åBñ£Bƒ¬B¡ÈäBE¥BåH¬B3ºãB¥˜¦B¥i¬B âBçã§B@‚¬B}áBN(©BK•¬Bï=àBƒQªB3Ÿ¬BôåÞBJ^«B0¦¬Bµ~ÝBˆV¬BA·¬BLÜBˆ@­BÆÔ¬B’“ÚB;®B¬æ¬BüÙBá®Bñæ¬Bƒ×Bº—¯B ׬BäîÕBÛ<°BŒ½¬B‡VÔB*Ö°Bœ¬B[»ÒB(f±B׈¬BoÑB«ç±B…†¬B¯tÏBCZ²Bó€¬BNÇÍBЫ²BÌh¬B@ÌBnβBØ9¬BØaÊBÿIJB ô«B.³ÈBj¬²BꛫBL ÇBÁ‚²B;«B/cÅBvI²BÕªBYÀÃBÞ²B7gªBë!ÂB…¯±BðÔ©B ”ÀB'G±B %©Bí¿BþÒ°BÚa¨BJ¤½BV°Bo§B¼<¼BUÓ¯Bb°¦BåºB…?¯B9É¥BCž¹Bò’®BþܤBÕ]¸Bfá­BÏæ£Bà·B/;­BnÓ¢B¥ëµB/¯¬B+ž¡B~δB•>¬B(^ Bõµ³Bâ«B„ ŸBߥ²B‹Æ«B°B¥¡±B@í«B‚PœBœ¬°Bü5¬B¡ìšB¹¯Bšp¬B¸…™BVÄ®BB}˜BìÔ­BÚ’¬B¨®–BJæ¬BÙ¬BƒF•B~ò«Ba‚¬BiÛ“BÔ«B¢k¬Byw’Bñ ªBˆP¬B¶,‘BÆð¨Bp9¬BvB¤º§Bñþ«B&îŽBdž¦B6r«B5ÕB’]¥B*ܪBFò+¸BFèB/æ†Bc·BÐçBˆBÔíµBÍlçBÁN‰B Û´B’]çBC ŠBnâ³B…çB¬ŒB³B—ÃçBÅ{Bå{²BžèBIBt²B7SèBK³B·Ø±BïêèBäE’B…¸±B‹ÉéBŸ»“BK±±BÊŸêBs7•Bù´±BÁ5ëBÍЖBzűBŽ—ëB=y˜Bšà±B$ÌëB)šBõ²BçÑëBÛ›Buþ±B²ëB0ŽBzϱB·`ëB¸7ŸBÖŽ±BÉûêBÊÚ B3N±BÛ–êBÛ}¢B±Bq>êB%¤Bá°BõÒéB È¥B”³°Bì*éBÆW§B·˜°BžNèB:ϨBõ°BëTçBÈ4ªB¡•°BÕGæB+Œ«B¾Ÿ°B÷2åBJݬB1¯°BëäB;!®Bݼ°BÙâBcT¯BÀ¼°B•áBäx°B|¹°B­>àBà‡±B™Ã°BÏÞBs²B‘ذBBGÝB²3³B/ñ°BG¯ÛBVγBÐ ±BQÚB>[´BÉ$±BSrØB„Þ´B‰A±B•ÍÖBWQµB^±Bð"ÕB¬µBúy±BãrÓBèµBž›±BÀÑB„¶B!ȱB6 ÐB0 ¶BDzBP\ÎBñ¶BÿM²B©­ÌB|ñµBž²B5ËB¿ÏµBÝ÷²B ZÉBǵB `³BÙºÇBS8µB$ѳB#ÆBÌÚ´BÿH´BëƒÄBȃ´B*Ç´B;éÂBn3´BÀ_µB©^ÁB÷ųBU¶B:ê¿Bî<³Bªß¶Bf„¾B ¨²B2··Bè!½B´²Bz“¸BÛÁ»B³˜±BÙ‹¹BsºB6±Bh­ºBC¹B– °B¾þ»BØ6¸B†^°B i½BEE·BO°B‚ܾB]b¶B`°B^RÀB…µB–°B¢ÇÁB¥´Bˆ°B7;ÃB´Á³B;’°Bk©ÄBÜÕ²Bû‡°B‚ÆB ä±BBw°ByÇBäí°BzV°BÐáÈBú¯B¡<°B,IÊB¯B-!°B%­ËBÞ®B¼é¯Bý ÍB–­B%ޝB sÎB×/¬BÈM¯BzÒÏBo0«B*¯B)Ž´BñDñBË`’B] ´B¬ðBÁã“B¯³BƒÞïBÐX•B0~³BÀþîBùË–B»_³B>iîB^d˜BGA³B¼ÓíBÃü™BL1³B-síB„¥›B-?³BíBNKB<³BÞ~ìBÃéžB&³BjñëB „ B)ͲB[ëB]¢B?вBŒëBb½£BD²BÇÜêB–i¥B8ý±B^¦êB&§BÓ±B\þéBE¤¨BƱB„éB ªB]˱B"èBØl«Bv±BRçBšÝ¬BT±±B&EæBÝV®B ±BüdåB£Ì¯B¶¦±BÚPäBs±BÖ³±BæãBF²B©Ä±B€¯áBnG³B ܱBñ6àB•#´Bã÷±B šÞB°´B²B­ðÜBеBu1²BþGÛBÊsµB_²B&¤ÙB?äµB/š²BØBÁ\¶B¶Ó²Bé_ÖBuƶB3ã1«BÏŠãB³G€B¶<«BšâBX³B0B«B¤òáBâEƒBð@«B‘§áB:ó„BÕC«Bû áBü¦†B¢Y«B‘ÇáB‹XˆB‚«BJâBJŠBZ¤«BÐ[âB*°‹B¢¾«BõâBJ`B<ЫB§ÎâBðB€Ð«B8aãBˆ©BÏÒ«Bú äBÝ9’BˆÉ«BPõäB«“B’½«B‰øåBI •Bvº«B|åæB„x–B“Æ«B£çB˜BâÛ«B™<èB~˜™BÈë«B/ÒèB®1›B`ö«BgéBQËœBú ¬Bó}éBj|žB”I¬BËKéBm+ B.r¬B¡éBrÚ¡BbŸ¬BŒèBÊt£BqĬBcÇçB÷¤Bé߬B–ÒæBˆ_¦BÐð¬Bâ½åB†°§B¨­B'§äB¾ÿ¨BE­BÅŠãBÃIªB§A­B6dâBÀ‰«B‘^­Bî"áB寬B—o­BxÌßBB¾­B±­B'fÞBH·®B9ž­B<ôÜB˯Bõ­B¾uÛB¥m°B Ù­BãèÙB#±BkÖ­B&OØBúº±Bi¿­BL®ÖB<²B=£­BM ÕB^¸²B"‚­BˆiÓB¿0³B\r­BDÂÑBtœ³B"x­BŽÐBüú³By‡­B‘hÎBZB´B”­B;µÌBh´B¤›­B+ËB¿l´B¾Œ­B~KÉBý_´B_­BšÇBÛ>´BÇ­B”íÅBÊ´Bô¼¬BžCÄBSë³Bja¬B¶šÂBL¿³BÜ«BÁBxm³BA2«Bq€¿Bÿ²BK”u°B6oáB”è€BpK±B*äàBÏI‚B 2²BpµàB?¸ƒB ݲBÑàBäG…BÛ9³BÚ4áBÏå†BÛU³ByâBgfˆBC³BrãB·‰BÖ³B¡àãBg3‹BÞ|²B†däB½ŒBÙø±BÞÊäB«OŽBÕt±B61åBGâB“±BMŽåBP}‘B¹œ°B5éåB„“BïO°B uæBE°”BÜ@°B/OçB©)–B‚J°B|3èB.—Bhg°BDéBM™BDްB„¾éB£šB¦¯°BHPêB~<œB3ΰBÔ¾êBáB1ѰBÎëBFŸBê²°B2BëB$=¡B1°BëBKê¢Bn]°BØ“êBѤB 3°BÅûéB0$¦Bô°B/.éBr£§BÙý¯BÀCèB­©BÆñ¯BªIçBìwªBàð¯BïAæBÓ«Bãö¯B%åB­BA°BÇïãB°Q®B7°Bn¦âBp¯B°B¾QáB°BްBÐñßB ƒ±BT%°Bx{ÞBd²B¹>°BñÜBK³BÇW°B&YÛB(¹³Byk°B-»ÙBÙC´B|°BóØB£Á´B°BþqÖB .µB£¥°BpÆÔBV†µB¾°BmÓB€ÄµB±Û°BŒcÑBíåµB±BJ°ÏB†íµBŒ>±B ÿÍBëµBˆ±BpPÌBÚµBÖ±B*¤ÊBͱµB<)²B€üÈBMmµB؇²Bh\ÇBˆµB¶ñ²B¿ÅB”¯´B8b³B?#ÄBïQ´BÐÕ³B‰ÂBÄð³Be´B4ÁBïn³B?µB¿BoزB|εB"¾Bó?²B$”¶B¶¼B´±B—ˆ·Bc»B#6±Bít¸BºBoš°Be‘¹BÖé¸BذB¿ÞºB^Ý·BྯBI¼B¯ì¶B‡¤¯B•¼½B§ ¶Bñ¯B’.¿BÔ$µB´È¯BÙ›ÀB½7´B{Ö¯BM ÂB€J³B¹Õ¯BxqÃB¦U²B1ǯBüËÄB}N±B­¯B,ÆBMP°BõŒ¯B²•ÇBâ\¯Bœ~¯BÉB‘k®B¥¯BXlÊB¶|­B;š¯BF×ËBiŒ¬BC†¯Bã<ÍB¬•«Bƒd¯B©šÎB¥‘ªBã_¯B’àÏBpq©B{}¯BHùÕ·BÃçBéÖ†Bˤ¶BL–æB"ð‡BBPnæBÔ7‰Bõq´BYyæBÿ…ŠBJ€³B ²æBàë‹B±²B/çB~bBm²B¿VçB§òŽBܵ±B¾¯çB“‘Bk±BŠDèBƒ$’B$G±B‡éB¼¢“B@D±B©îéBÕ•B M±Bì›êBÚ«–Bµ_±B ëB˜M˜B@{±BþkëB2ø™B±Bè—ëBv¨›B± ±B;–ëBC\B z±BBeëB ŸB08±BõëB° Bì±B «êB¾V¢B‹Ñ°BÌ5êB«÷£B¥°B„†éBj„¥Bˆ°BRªèBÅû¦BTy°B6³çB÷b¨BR°BŒ§æB|»©B+™°Bó‡åBµ«B¹°BË\äBé>¬BʰB7#ãBn­B1̰BÃØáBa‹®BbǰB€àBI—¯BmѰBÄßB‡Œ°Bªë°B®šÝBCb±Bþ±B“ÜB¥²B ±B¬wÚB¶²Bú8±BöØØBª=³BïP±B 3×B‘­³BÖf±BdžÕBâ´B爱BaÖÓBw8´Bè¼±Bú$ÒB«P´BÚý±B¥tÐBèQ´BeG²BóÅÎBC´BÊ›²B{ÍBt´B/ð²BoËBæû³BãP³BRÉÉBH½³Bß½³B™*ÈB„h³B{7´BÆBY³B«»´B„õÄBiɲBGµBy]ÃB‚²BáµBÜÍÁB +²B†”¶B´PÀB_·±BR·BkܾBš7±BĸBh½Bò¶°Bƒæ¸B¼BÉ5°B‚Þ¹BฺB5¨¯BÀïºB‰¹BË ¯B)¼BPt¸B.“®B~½BEn·B L®BÁÛ¾Bùk¶Bj,®Bh6ÀBndµBä®B‘ÁBâ_´Bõð­BkóÂB'f³BqÀ­BRYÄBŒq²B”­BÁÆÅBð†±B±p­Bâ2ÇBq°Bi<­Bg–ÈBʬ¯Bžñ¬BïÊB£È®B1·¬BB~ËBaò­BH‘¬BóüÌBë"­Búƒ¬BÎBËc¬BE¬BùÏB1¶«B+Ä«B0fÑBÆ«B«(«BÀÑÒBuJªB:ªBÄ8ÔB:©BËß©BGå=¸B½ éBÙ’†B·B¢—èB›¹‡B8¶Bï5èB·ýˆBiî´BèBàMŠBÛã³B@èBµ¤‹BRõ²B%zèB B{D²BQ¹èBÉ•ŽBãͱB{ùèB=4B²t±BKŒéBøÄ‘B“M±BhêBµ;“BA5±BÜ2ëB ½”B -±B¸ëB\–Bò9±BÿìB]˜BNP±B DìB`·™Büs±BeìB€h›BÁz±B'[ìB(BàP±B´%ìB¬ÊžBô±BFÆëBMm B‚ͰB1eëBu¢BÜŸ°BAíêB ³£Bu°B¿BêB B¥BšW°BÅkéBZ¼¦B:°BÍ”èB«6¨Bë(°B£çBe¡©Bü"°B?¢æBþ«BÉ)°B>åBƒU¬B37°BËjäBF˜­B]K°B1/ãB.Å®B¶Q°BdåáB.ã¯BO°BŸàB%ô°BŠU°B©(ßB]ë±B7j°B©ÝBg»²B1…°BÿÜB^d³BAœ°Bi|ÚBAø³Bö°°B×ÜØB÷}´BFưBã8×B.õ´BsݰBÆÕB(XµBKõ°B¾áÓBꢵBÙ±Bß/ÒB2еB47±BŸ|ÐB9áµBl±B§ÊÎBâµB¯°±BÍB©ÖµBîþ±B°mËBѼµBwQ²B÷ÃÉBŒ…µB•®²Bë ÈB3µBγBzƒÆBòÓ´Bò‡³BŠçÄBÀBq#³BkãµBYÒ¾B猲B¨¶BŠg½BÃý±Bów·Bx¼Bïr±B(\¸B«ºBá°B”`¹B?o¹BI°B[ºBûU¸B â¯BKþ»B³Z·B¿²¯Bæn½Bvr¶BV²¯BÖá¾B µB•ȯB­OÀBù¢´BhׯB-½ÁBÒµ³B—دBU'ÃBèòBÚʯB±†ÄBbñBP°¯BáÅB«¾°B‡¯BHÇBuȯB»j¯B²ÈBïÕ®Bi¯BÊB£æ­B*m¯B‘ŠËBrø¬B€\¯B>òÌBG¬B>1¯B…WÎB” «BݯB“¬ÏBþ©B¼"¯B?XYµBX“åBÀ$’B“ µBØÞåB¿Ê“B>±´Bw*æBœn•B ´BïræBêû–BW.³B¢ŽæBq˜B-O²BUªæBæ™Bød±B¥µæB.U›BëÙ°BHøæBÏìœB’Þ°BªxçBbžBäñ°BËçBó8 BŒ±BqÔçBjì¡BαB‹…çB™£BßÞ°BµéæB.¥B”·°BgæBY®¦BÅ•°Bñ7åB¨BаB9äB ©Be °B:"ãB9ЪBÉðBÿóáB" ¬BˆÝ°B±àBÊ-­B¦á°B*[ßBR=®Bë°BCÞBýM¯Bg±B†®ÜB,Z°Bþ'±BjGÛBP±BôD±B˜ÃÙB²Bû\±Bq.ØB¹²Bdt±B5ÖB[?³B‹±BÐçÔB„©³B΢±Bé9ÓB õ³Bc˱B ‰ÑB¾"´BÞ²BØ×ÏB¤3´B˜F²BÉ'ÎBŒ1´B“²B×yÌB´Bˆê²B¨ÏÊBFò³BoN³Bî+ÉB¬³B•½³BµŽÇBêR³Bd7´B¢óÅBóý²BŒº´B¦YÄB(²²B;EµB$ÂÂB{f²BèµB¨9ÁB¥²B†Ÿ¶BâÀ¿B8…±B\·B¸L¾B©±BB¸BfÚ¼Bd‚°B=ý¸BL~»Bù¯Bùû¹B>ºB-a¯BZ»BM¹BaÅ®B­Y¼Bx ¸BJW®B*³½Bj·BÜ®B¿B.¶B¤®BWlÀBçü´Bñ­BmËÁBjý³B¶Ë­Bƒ0ÃBN³Bö ­BšÄBy²B+­B3 ÆB_/±BPa­BvÇBE°BC,­B ÚÈBUT¯BWæ¬BLÊBis®Bñµ¬BöÆËBSž­BÆš¬BÐEÍB8ϬB”Œ¬BÆÈÎB¬B÷F¬B&@ÐB4a«B£Å«BR®ÑBÄ£ªB/9«BãÓBÁã©Bû«ªBâ€ÔBC,©BªBU-Á¹B @âBi.yB ¸¹BìâB*O|B£¼¹B… ãBgiBí©¹BVäBÄ@Bµl¹Bi åB}É‚BJ ¹B¤¹åBˆL„B /¸BßìåBRÀ…BÀ#·BdÌåB‰‡B¶B¶åB„hˆBçÿ´BòÁåB˜º‰B. ´BlêåB§ ‹B³G³B}:æBÉŒBž²B0’æB‡%ŽBâ*²B½êæBzÀB!Û±B†YçB{^‘Bû ±BðüçB‰î’Bˆ±BjÖèBÌg”B‹†±B­žéB2ë•Bß•±B‚AêBX—BƯ±B¹êB½!™BØÍ±BcëBvΚBê±BÌëBv€œBXÛ±BƒëB3žB<«±BéÂêB9ߟB‹r±B&jêB+†¡Bä<±B¸êB(-£B ±BÎ…éBqǤBèà°BöÁèBúJ¦B¡Ê°B¼ÕçBþ¸§B'ɰB§ÐæB‹©B×à°BÖµåB bªB9±BÐŽäBÓ¡«B¸±B¬^ãBíÙ¬BÔ!±BâB/®B°±B*ËàB@¯BX±BPißB%°BJ.±BÁ÷ÝB1ý°BbI±BHsÜBEñB÷c±B¥áÚBRm²B«€±B GÙB.³Bkœ±Bð£×By³Bε±BûøÕB<Ó³B Ö±BöHÔBg ´B- ²B‘—ÒB¶(´BK²B_çÐBD(´B •²BË8ÏBs´B ê²B’ÍB•ó³BáL³BèËB«³³BU½³BÙIÊBc³BXA´B•¯ÈB˳B\Õ´BFÇB0â²B~oµBƒÅBœª²B.¶BÖñÃB{e²Bö¶BÍpÂB»²B‚·BúÀBŒ±B±F¸BÌ„¿B­±B"¹B8¾B"±°B» ºB ɼB0C°B½>»BR•»BžÍ¯B}o¼BjsºB!Z¯B0½½B­a¹Bo¯Bo¿BÙY¸Bº¯BJuÀB¯W·B5ç®BØÏÁB&Y¶BÛŸ®BÞ%ÃB°^µB€:®BÝ…ÄBm´Bã­BóëÅBœ„³Bï‹­BnLÇB*²B­B¯ÈB¼±BKª¬B·ÊB¥ó°BZ5¬BUŸËBÅD°BŠÈ«BgÍBü˜¯BÊ2«BðsÎB ò®BærªBÆÏB„N®B>–©BáÑB¾Ç­B«¨BŒoÒB™e­Bf®§BÏÆÓB'­Bl®¦BŸÕBܬBè¥B@mÖB °¬B—¤Bî°×B`‹¬BTv£B ÔØB†¬Bš2¢B¸ÆÙB2«¬BßÊ Bf™ÚBëä¬BÿQŸBlÛB£­BÙB6ÜBX[­B÷[œB'‚å¸Ba0èBÕ‡Bû¾·BÓçBCˆBrµ¶B…eçBÕŠ‰B€ÌµB¿:çB[øŠBøµBÿBçB”|ŒB3`´BI`çBŽBè³BáˆçB¯B‘³BÉÔçBxS‘BoG³BaèB„é’Bœ*³Bõ=éBŠ`”B ³B[êB?ä•BŸ+³Bç™êBô}—BFF³BØíêBÏ(™Bìh³BuöêB$ÛšBèn³BÛÔêB¡œB…[³BAžêB›=žB¶.³BDêB®åŸBIð²BoæéBÄŠ¡B‘©²B1¬éBÛ4£Bó^²B´_éBdÛ¤B)²B4½èBWl¦Br²B ÔçBJܧBßû±BäêæB2ú²B¨4ìB×4Bލ²B™“ìB^Ö‘BÔU²B@íBYt“Bn²B³)íBª"•Bƒ²B íB Ö–Bj²BíBœ‰˜B´!²BCýìB×<šB->²B-ËìB×ì›B*-²B*dìB ”B9÷±BûëBž7ŸBܱ±BÍëBÕ× B1x±B3ëB:~¢BA±ByÒêB¬#¤B±Bø:êBƒ¹¥Böñ°B héB6§Bæ°BIqèB”¨Bï°BûbçBüó©BÖ±BWEæBR=«Bd±BL!åBÆ€¬B‹+±BøãBhÀ­B[,±B÷¾âBüï®B+-±BQ…áB‘°Bý"±B:àB¶;±B‰&±BÑÒÞB4²B†8±B\PÝBÿ²BpQ±B»ÛBˆ ³BÑl±B) ÚB½2´B±B‚ØBµº´B`¯±BßÖBC2µB‰Ï±BI5ÕBÒµBsí±B>…ÓBY˵Bv²B¼ÒÑBéµB{F²B‰ ÐBméµBˇ²BepÎB€ÞµB†Ò²BÂÌBi˵BA#³B‘ËBú«µBú³BNoÉB.nµB—ð³BSÑÇBçµBÊh´B!6ÆB?Á´Buê´BÒ›ÄB£t´BÌqµB@ÃB'.´Bý¶B÷wÁB«Ì³BµÒ¶B ÀBŽM³BĤ·BC¡¾B ¿²Bfz¸BÖ<½B½8²BÀ_¹B<Þ»B§½±BEbºB4’ºB©I±B¹‹»BMd¹B8â°BØà¼BÛY¸Bo®°BÎJ¾Bjg·B¾¥°B¨¾¿BŠ…¶B|»°BA7ÁB­µB—Û°BJ¯ÂB¸Ñ´Bûé°B…$ÄBñ³BCê°B£–ÅBV ³Bøå°B¸ÇBD²BÆÜ°B•lÈBã*±B ðB(ÖÉB 9°Bm©°Bä>ËB²G¯B¸‚°B ÌB\U®B,2°BŽûÍBId­B!ɯB(`ÏB°x¬B5t¯BK °BVáBs²€BsǰBû¹àB ‚Br¡±B…|àBŽƒB^²BO‘àB …BβBüãàBͲ†Bù²Bm”áB*?ˆBkð²BÍ£âB¼”‰Bù¿²BЄãBF‹B©I²BäB¯ŒB#ͱBp‚äB$ŽB&v±BööäBü¾B`@±B^~åBæY‘B˜ ±BÆæBÏô’Bß°B†¨æB‡”BÐðBÀlçBƒ –BçðB=CèBC‡—BܰB4éBá™B‘±BñÆéBT‘šBo#±BÄPêB“-œBA±BÒ¯êBéÕBÖE±BeúêBOƒŸBÚ-±Bå3ëB°2¡BÕ±BöAëBŠä¢Buå°BƒïêB;¤B5´°BvêBü.¦BM°BXÀéBj¹§BQv°B‘ÝèBG-©BXm°B–áçBJ‘ªB™h°BÃÝæB½ï«BKf°BSÎåBZE­BÚi°B¶ªäBŠ®B{t°BçnãB0·¯BEv°Bõ#âBíÓ°BÆ{°B¿ÅàB¶Ø±Bw‰°B¶SßB_À²BÙž°BÊÝB¨|³BNµ°Bs/ÜB¥´BT˰BfÚBÀ—´Bßâ°B(ïØB³µBý°BJ×B®‹µB'±B— ÕBéµB5±BUñÓBs+¶BêQ±B¤>ÒBÖO¶Bu±BöŠÐBFX¶Bû§±BÄØÎBáS¶Béë±B)ÍBF¶B`:²Bâ{ËB"+¶BʲBeÒÉBSóµB™ì²BÜ/ÈB- µB{W³BÃ’ÆBlAµB¢È³B÷ÄBèã´BÂ?´BÊ[ÃB Œ´BË´BÃËÁB¥ ´B÷sµBQÀB—³B^5¶BÄè¾Bžý²Bóÿ¶B†‚½Buk²Bà·BÜ$¼B­ä±BØÉ¸B‘κBy[±BÕ¹B4‘¹BÔ°Bw»BÊy¸BŠ}°B¹~¼Bqƒ·B,`°B£ò½Bö ¶B­l°B¢k¿BåɵB‘°BeâÀBWî´BÕ±°BSYÂBB´BİBHÍÃB‹.³BŠÇ°BÍ;ÅBC²BBŰB[¥ÆBP±Bˆ¸°BëÈBÃ^°B÷«°B{{ÉB›n¯Bs«°BæÊBw}®B³œ°B³IÌB鉭B]\°Bf¥ÍB’¬Bý°BEþÎBœ‰«Bã¯BÕ>ÐBXbªB`ó¯B0e¤«B)hãBŠ BÀµ«BùØâBô;ƒB(¿«BC¡âBì„BoÏ«BŸâBžŸ†Bãè«Be½âB¡QˆBŸ ¬BsøâBŠB¼¬B>ãBë­‹B #¬B‰ãB?[BW(¬BÔãB“B 1¬B›?äBå®Bá>¬BÙäB¶F’B”L¬B¡åBÈÉ“BüQ¬Bv”æB 4•B]O¬B6¢çBûŠ–BåW¬B˜ˆèBAý—B­h¬BöDéB(†™Bæz¬BÝééBY›B±ˆ¬Bk•êBô©œB¯’¬B$NëBÏ4žB[¤¬BµóëBÁÇŸB^»¬B"tìB®g¡Bé̬B|ØìB{£B’ЬBH¹ìB-¤BÍõ¬B\ÛëBÒ7¦BЭBëÚêB<—§B7­B3ÆéBç¨B P­B‡«èBŸ2ªBb­B”çBI«BOw­BÃwæB¬Ë¬B댭BOåB ®B¤—­BþäB A¯B…­B±ÚâB‚h°B«­B5†áB…y±B»·­BX$àBy²BGµ­B‚«ÞBüU³BÉ¡­BÌÝBK´Bô­B´~ÛB¤´BKV­B*ÞÙBæ µB€'­BÑ:ØBs~µBF­B[”ÖBçµBªå¬BYêÔBûD¶BF׬B¼<ÓB”¶B’Ó¬BšŒÑBÃÕ¶B¡Ü¬B ÛÏBÆ ·Bìá¬B*(ÎBë8·Bâ¬BÁsÌB&R·B Ì¬B@¿ÊBºY·B9—¬B† ÉBÎT·B $p©Bõ9ïBtØ›BEªBêzîB_;B@žªB ¢íBnœžBŒòªBÎìB* BX7«Bº ìBæ¡BŸx«B±EëBk£B湫B¨€êBðޤBÒó«B=¦éBÿ¦BX"¬BD¢èBI_§B†H¬B+‰çB⪨B>d¬B‹kæB¨ó©B"ƒ¬BÚJåB{9«B¥§¬BÔ$äBñy¬BwĬB»úâBo·­B;Û¬BÆ»áBŸà®Bîû¬B´hàBÈñ¯Bu,­BßB*é°Bì^­BgŽÝB¶Å±B9—­B! ÜBù…²B¶­B vÚBo)³BÿŸ­BMÕØB«³BFz­B¯0×Bc´B2V­BÞŠÕBº‡´Bâ3­BøãÓBeð´Bc"­B9ÒB”LµBb&­Bw‹ÐB뜵Bæ4­B4ÛÎB_ܵBA­Bä'ÍBX¶BõJ­BñrËB ¶Bÿ9­BA¾ÉB´¶Bì ­B« ÈBjèµBoìBŒ^ÆBdɵB+ÙF¬BÔKãBÙ¬€BNt¬B¶¡âB»;‚B„š¬B{AâB!ãƒB¶¬B.âB¡•…BˆÙ¬B.âBüG‡Bì­B}>âB2ùˆBÌ&­BìTâB-«ŠBÌ+­BG^âBÞ^ŒBíBEâBÅŽB©(­B GâBxÅB›G­B gâBýv‘B5k­B¼«âBç#“B^P­B6’ãBI•”BG­B¦ŸäB^ì•B=\­BœŸåBÿL—B=ƒ­Bj†æBþ¼˜B «­BðFçB BšBÈ­B ÝçBlÚ›B>Ù­BEèB[Bõ­B7èB 4ŸBà®BäçB¹ß BA ®BÔDçBtu¢By®BÂnæBOñ£BÌ®BªzåBÓZ¥B²®BwäB|¹¦B™®BsãB$¨B†"®B0fâBYo©BA3®Bë:áB›¬ªBB®BëðßBÊ«BG®B@ÞB/ʬB½N®B‹'ÝB»Á­B_®B“¸ÛB®®BÆu®Bõ=ÚB¹†¯B¾ˆ®BÒ³ØBSB°B}“®BD×Bžß°B®”®Bp~ÕB l±B+®B‡ÜÓB§ë±Bs†®Bä6ÒBy^²Bì‹®B”ÐBòB]®BNáÎBóB†¶®BM0ÍBYO³BnØ®B-}ËB‡h³BÐù®BPÉÉB]n³B"œâ«BsUáBxÚ•BY¬«Bç%âB»U—B¹Ç«B9#ãBз˜B¬B)äB8 šBWD¬B|âäB=”›B`¬Bm:åB9>BÔ{¬B^’åB5èžBº¬BOˆåBs› BM°¬BûåB^?¢Bò߬B÷NäBo¿£BO­BÇ]ãB'¥B>9­B@TâB|¦BQ­B ?áB¥Ï§BÕX­BP àB©BÖ_­Be¸ÞBGªB\d­B€SÝBé«Bfm­BVêÛBJ ¬B}­B7{ÚBfõ¬B€­BkÙBÇÑ­Bœ­Bu~×Bš®Bú¥­BwðÕB&N¯BТ­BåYÔB<î¯Bã’­Bö¼ÒBN|°Bˆ­BÑÑB!þ°B[†­BÝvÏB s±Bö†­B„ËÍBbϱB¨€­BEÌBþ²Bp­B‚dÊBˆ²B_H­BY±ÈBK²BÁù¬BDÇBìÛ±Ba”¬BÿaÅB÷–±B“)¬B²ÂÃBìC±B¹«B7(ÂBìá°Bç,«BÅ›ÀBŽl°B00ð­B›RãBfk‚Bƒ4®BtãB"„Bi®Bº ãB…Æ…Bž®BãBw‡B?Ò®Bs@ãB€%‰BHÓ®BBmãB׊BŸ®B›†ãBú†ŒB ]®BœãBT5ŽB H®BãäãBˆâB>S®BýsäB,~‘Bð^®B•MåBø÷’BRJ®BäEæB^”B²5®B4>çB3Ä•B.U®BèOèB€—B z®BÁ6éB¯†˜Be®B6ïéB.šB¿®BêBž›BÉã®B+RëB)Bã÷®B“ïëB¿žBÑ®BS-ìBEm B&}®B–ìBE¢B…Y®BëBÔ¸£BçR®B—ÖêB¢C¥BHS®B¸âéBT­¦BGS®BîäèB.¨BLR®BâçBco©BkO®B„ÞæB ΪB­X®B€ËåB° ¬B1j®B…¡äB_­B }®BöbãBûˆ®B"Š®BâBož¯B\™®B3µàB›¤°B÷¯®BÀLßB0š±B‘ЮBùÐÝB™o²Bû®BÙDÜBò"³B, ¯B³©ÚBg¶³BS ¯BÔÙBe6´BůB~a×B ¦´Bf¯Bj¸ÕBS µB ¯B ÔBÌgµBF¯B;]ÒB,ªµB0.¯B~ªÐB ÓµBŠP¯BC÷ÎBØéµBZˆ¯B«EÍBƒíµBWÖ¯B%˜ËB&ÖµB2°BðêÉB3¢µBMQ°BAÈBPRµBq°BñœÆBŸë´BF,/³BbjâBÖm€BÑѳBX—áBÿÆB…0´BÄëàBvLƒB”A´B”‘àBö„B'(´B‘àB¥©†B·ý³BÝúàBNˆBγBÇÜáBÀ‰BÆŒ³B…‰âB%K‹B•*³B õâBæŒBõ²²BáNãBjŽBU;²Bµ¨ãBÐB}DZB$ äBU±‘B/[±BƒiäBÞL“BI±B¢ÙäB=ë”BDó°B|åBï~–B’ë°BÎDæBü˜Bºû°BÇ&çB¯v™B')±B>èBžãšBKR±BÀòèB¢VœBÖq±BcÄéB¸ÓBã~±B<êB]€ŸB"€±B¶BýýÀB¤Ï³Bô·B’¿BÙG³BˆÜ·B2¾B¯·²Bѵ¸B¿Î¼Be4²B]£¹B2u»Bº±Bf¯ºBE0ºBqH±B?ê»Bq¹B@ô°BÃH½B” ¸B±Ò°Bl¸¾Bê#·B<Ù°B]1ÀB¡L¶BÐü°B›¬ÁByµB±B\&ÃBõ ´Be/±B%ÄBóB5±BbÆBÙà²BÓ;±B €ÇB…õ±BN>±BêÈB#±B*:±BFWÊBްBÐ2±BŸÄËBg)¯Bx±B1õì­BÛ9äB¨n„B9î­BâÿãB †Bf©­B‘ãB‚¾‡B”d­B%"ãBe^‰B£â¬B¹âB.äŠB›œ¬B¤CâBd‹ŒB±¬BÆKâB¥>ŽBb±¬BìEâBlòBª¬BŠHâB.¦‘Bú¬BõaâBY“B¥™¬Bì´âBû•BÚv¬B|DãB-Ÿ–B3G¬BÁ%äBª˜BúT¬B²åB {™BP‡¬B¤æBåšB糬BùÁæB¶lœBwЬBŠ@çBÜ žB·å¬B:’çBu¸ŸB\­BJsçB[j¡B’ ­B±ðæB £B·=­B:+æBÁŒ¤BžS­B':åB©÷¥Bùb­B¾2äB%S§B6n­B‰"ãBü§¨B ƒ­B  âBFõ©BQ—­B|ÐàB·$«BL¤­Bû|ßBú6¬BQ©­BœÞBë1­Bæ·­B¼ªÜB‡!®BÇЭB‚4ÛBu¯B{æ­B±ÙB˯B„ï­BS!ØB-z°Bûé­B‡ÖBa±B¯Û­B±èÔB”š±BeÅ­BƒGÓBÁ²BX¹­B>¢ÑBr޲Bô¼­BMùÏB¨ô²BgÉ­BºKÎBŒD³BUÔ­Bü˜ÌBq³BòÜ­BäÊBz³B¢Ò­B /ÉBµs³B³§­B}ÇBÄW³B^S­BÒÅB,³B‹õ¬BÊ*ÄBRú²B®’¬Bæ…ÂBÌ»²B ¬B†ðÀB²_²B™e«Bn¿B?í±BN£ªBõû½Bap±BéÜ©B&Œ¼B5ó°B8³]©B@ìBu›BêBÑ‚ëBøÕœB³ªBIÂêBO?žBÿ«BÀêB¡ÂŸBk«B ŒéBúW¡BW©«BØÍèBdÛ¢BéÙ«BôáçBG¤Bý«BÐæBø˜¥Bë¬Bÿ°åBgà¦Bv8¬B–äB&¨BÛ[¬BKlãB¨h©BYv¬Bê-âB(’ªB„¬BÞ×àB7¡«B0Œ¬BIpßBBB†ýÝB¡~­B>ƬBäÜBuP®BجB{÷ÚB¸¯B„ЬB*eÙBþ¹¯Bt³¬BÍ×B=S°B5ެBÐ2ÖBå°BÃa¬B~—ÔB„q±BõG¬BböÒB=ñ±B…C¬B‹PÑBnc²Bi=¬B¬£ÏB‹·²B‰¬B2ñÍB¤Ü²B©á«BÞ@ÌBjͲBDŽ«B+•ÊBŠ­²B1«BÌìÈBß²BéÓªBmDÇB4R²B½mªBéŸÅB­²B9ªBÿÃBpϱB‰©BÔbÂBt~±Bô¨BëÓÀBR±BßC¨B¸S¿B ±°Bà‚§BÛß½Bæ7°B±²¦B‰w¼B9µ¯BÚÔ¥B³»BØ ¯B·ì¤BÖÕ¹Bzy®B ù£Bƒ“¸BèÕ­B3ù¢B•S·BNA­BÞ¡B$!¶B ĬB¶° B‹û´BOS¬B†ŸBÍÔ³Bûð«B;žBo´²BUΫBææœBf¦±BDë«Bù†›B0ª°B}¬B%šB®¯Bm0¬B˜À˜B´®B¸,¬B¤W—B ­B/¬B9î•BWѬB‰¬B^†”Bfà«B5׫B•“BÕôªB¡«Bq¿‘Bõ÷©Bme«BZ~B|بBF'«B›YB¬¬§BP°ªB%IŽB)ЦBÓÿ©B(qm¡B÷÷ìB0ŠBÃi¢BéìB¨‹BêE£BÆ>ëBYŒB½/¤BXäêB>½B5¥Bÿ—êBº(BÇÒ¥BWGêB‘§B¦\¦Bö(êB¼C’BѲ¦Bã\êB´ë“B'ù¦BâƒêBü—•B:§BjoêBVF—B—u§B)êB`ð˜B,»§B#éBV‡šBw¨BÉ×èB œBIJ¨BùçB¨uBx¨B¿ZçBT ŸB·¥¨B{¼æB B¥Ë¨B‚6æB:¢Bì©BcåB8±£BCJ©B~väB0¥B¯{©B½|ãBu}¦Biª©BiâB…̧B)Ò©B-6áBN©B3ë©BÐíßBñªBÆô©B>‘ÞBÉ%«Bºþ©B9'ÝBã¬B?ªB‚°ÛB ù¬Bœ>ªB},ÚBñ½­BŒHªB#£ØBØ{®Bï.ªBÙ×Bó1¯B‹ªBp‰ÕBRâ¯BשBŒúÓBްBoª©BZhÒB23±Bu©BÌËÐBÔÀ±B“‹©BÍ'ÏB’9²BÑb©B"zÍBJ~²B…©BéÍËBß’²BT¨B (ÊBK޲BQ¨Bš‡ÈB3z²B(‰§B4îÆB+Q²B7ì¦BÙYÅBp²BGuzµB âB™y€BgêµBZ áBøÄBï&¶BSàB‡JƒB/&¶BâößBô„B=úµBµøßB*¦†B“¹µBÉRàB¸KˆBîgµBÎ áBžÍ‰BµB„‰áB£g‹B¨Á´BTÁáB.B/W´BýÛáBð´ŽB¶ì³B§öáB²ZBb³B‹âBCö‘Bž°²B­ZâB“B˜/²B ÃâB#•B/²BÏ4ãBH´–BRö±B·ÆãBO˜B¤Ï±BØ—äBÊË™B¤±Bú—åB]*›B:Ÿ±Bõ…æBé—œBï±B-cçBkžBȱBÕ)èBØ’ŸB.Þ±BVbèBlB¡Bïø±BGèBô¢BÏè±B@ûçBz¡¤B±¬±B4mçB59¦B¸w±BÔ©æBm»§BCa±B¸åBÒ%©Bi±B¡ªäBî|ªB´Š±Bº‡ãB‡À«B=°±B\âB'ü¬BßÁ±Br)áBÂ1®B~¼±B\åßB.V¯B"¸±B[–ÞBn°B8Á±Bf7ÝBÑq±BÚÖ±B¹¾ÛBöM²B}ñ±BŸ3ÚBš³B¼²B8žØBQ¦³BT8²BÙ×B#/´Bs[²B ZÕBC˜´BÈy²B£ªÓBØ´Bd¦²BùÑB]ù´BÓã²B,HÐBû´B-³Bv™ÎBßë´BA{³BúëÌBBÔ´BdгBÆ@ËBE¯´BK5´BBœÉB}o´BÀ«´B„þÇB#´Bs5µBOeÆB%ß³BÎɵBÎÄB§³Bï`¶Bj7ÃBr³Bƒ ·B;¬ÁBj$³BÏ·B6ÀBó¶²BI¡¸B¿Ë¾Bt:²BÛy¹BGb½B²Ç±BÿgºBà¼B ^±BËu»B ¼ºBîø°BY¢¼BÕ¹BÄ’°BZñ½Bí¸BX°B¼T¿B2„·B_H°B•ÀÀBª”¶BÊQ°B=2ÂB!®µBæR°BD¢ÃBÉÅ´B6?°Bã ÅBLسB °BâxÆB.ê²BÞö¯BßÇBKù±Bؽ¯BÒ:ÉBe±B¶Z¯B8›ÊB*°B¬¯BÇÌBð'¯BÛ´®B‘jÍB¼E®Bµ\®BîÛÎBÖw­BAô­BOÐB¦Ô¬BGU­B.†‰®BkâBÿ‚B0Ü®B@;âBX¼ƒBN¯BâBŠk…B‹>¯B7âB³‡BSk¯BáWâB5ʈBÑy¯B¾ âB­wŠBÃT¯BÊÂâB™(ŒBš¯B5³âBsÖBÃó®B¸âBl‰B?¯BÖìâBš9‘B(¯B8TãB¿ß’BÑ%¯BG=äBtP”BÕ4¯BfHåB©•B=Q¯BmIæBl—B¾~¯BÆ7çB×r˜B“«¯BòèB’ò™B˯Bp¡èB‡›BݯB€éB*BŽÞ¯BWKéB/ÛžBŸÂ¯B/éB2 BG¦¯B|ÅèB,3¢BͯB`èBY£B6}¯B`9çBC9¥Bi¯B{EæBe¢¦Ba¯B}FåBK¨BÛm¯B[5äB\X©B–НBãBB“ªBP§¯B¥ÛáB(ΫBð¿¯BØ’àBTì¬B寝BY5ßBò­BÁϯB·ÒÝB¶ð®BÑä¯B7jÜBZæ¯B÷°BçõÚB9ȰB7!°BŒhÙB |±B×3°BÎ×B§²B A°Bƒ,ÖB>‘²BCK°B°†ÔB5³BW°BÜÒB…c³Biq°Bÿ-ÑB¥ª³BD™°B4}ÏB¸Ù³BkΰBßËÍB¶ð³B×±BÃÌB2ï³Bö\±BnÊB0Ô³BA±±BÛÄÈBœ³B²BO$ÇBßD³B>…²BbˆÅB(ç²BÅA¨B™„ìB³ÑB}¢¨BMëëB-^ŸBáï¨B_ëB˜ó B³B”;ÊB6â°Bv›³BƱËB"#°BÆ ´B¨ ÍBz¯B °´BIwò´BkäâB‚¼„B^¡´B(ØâBˆh†BFP´BæËâBŽˆBQ'´B΃ãBÖ‰Brý³BèŒäBáõŠBŸ³B ‚åB:RŒB ³BgDæB»B™M²BO¨æB7BȱBçBgÌBüb±BUTçB"l’B»±BëÚçBÆ”Båð°BS¡èBÂ…•Bbï°BQwéBÉ—B]ÿ°B©3êB½Š˜B¹±BCÊêBî"šBÜ8±B©;ëB¸Æ›BÚZ±BÀ†ëB¯rB"^±BâÌëBØ ŸBÏ4±BûìBOË Bï°BôQìBFv¢B@½°B^-ìB±%¤BÓ—°B—°ëB±Å¥BÄv°BVëBºU§B‰[°BÎ.êBåϨBÄL°BK:éBÙ8ªBFD°Bñ9èB™«Bñ/°Bû;çBãû¬B4 °BÛ'æB_M®B.°BöäB …¯BذBÔ¤ãBЙ°B),°B»CâByš±B =°BýÖàB"вBgS°B×YßBk^³B/j°BÈÝB¾´B¼|°B(ÜB6´Be°B†ÚB¶ µB £°BãØBn†µB‰»°BÈ<×BŠôµBe×°Bf‘ÕBõK¶BXô°BNáÓB‘‡¶Bh±Bü-ÒB¦¶B‰+±BËyÐBš©¶BJY±B ÇÎBv¤¶BA›±BÍB¢–¶Bté±BýiËBÅx¶Bb:²BxÀÉB¾=¶B¥“²BWÈB~çµBÄø²B ÆBŸ‡µBg³B²âÄBŠ)µBÊØ³B GÃB$Ì´Bë_´BY¸ÁBW´BµB>ÀB8ijB濵BO×¾B#³B‡¶Bºp½B²BbY·B2 ¼BVÿ±B=¸BC¶ºB¬m±BF¹B¨x¹B²â°B#‰ºBÉa¸B‰°Bð»B¨l·B­i°BÞf½Bd¶Bøz°B¢â¾B¤¾µB7¦°Bï[ÀBŠè´Bḛ̈BêÔÁB ´B‚è°BòKÃB%3³B|ø°Bâ½ÄB;M²Bò±Bý*ÆBy_±BıB‚˜ÇB]r°BʱBcÉBÕ†¯B«±BmuÊB©œ®BÄ,±B5ãËB~°­B˜±BIFÍBT»¬B‚ß°B·”ÎB@¥«BíÀ°BAÂÏBGlªBóæ°BJ—³B±]âBàã€B¡–³BÝ áBMP‚Böß³B¤áBÎåƒBݳBÝÐàB¨”…B핳B¼šàB9?‡BÑN³B›dàBÉéˆB ³BWàBÉ–ŠB¬Ë²BŽáBé1ŒB†w²BmáBÓBb²Bî¬áB)uB©•±BùêáBQ‘B ±B¯'âBb°’B¼µ°B@fâB:T”BqаBA´âBáþ•BúŒ°B†0ãBµ —BR°BhäBM™B‰q°B²åBM~šBt°BæBÖá›B’аB=ÒæB`B6¤°B-QçBJŸBº·°BÞçB&¯ BkðBq|çBab¢BX¾°B™çB/¤Býž°ByZæB”¥Bú{°B/åBf §BÙb°BGäB~w¨Bc°B¿‰ãB÷Ó©BŸ~°B»kâBk«B°B¶2áB#K¬B®°BÃãßB±b­Bô°°BˆÞBÔj®BøÃ°B=4ÝBX|¯Búä°B9ÚÛB«„°Bš±B¼fÚBÓg±BŒ ±B2רBø²BÞ6±Bô;×B$©²BwK±B…˜ÕBE"³B«^±BîÓBI€³B'|±Bà>ÒBÐÁ³BH©±BªÐBfç³BÞã±BžÜÎBkô³BB)²B-ÍBZí³BŠz²B‚€ËBÀϳBײBÙÉB8—³B @³Bx8ÈB`F³Bi±³BМÆBèè²Bš*´B¸ÅB'“²BÞ¬´BMhÃBñB²BŠ>µBkÖÁB è±B)ìµB—WÀB÷p±B—¤¶Býà¾BŠð°BŽ[·Bèh½BWr°B)¸By¼BËä¯Bà¹Bi·ºB G¯B0ºB‡¹B×™®B±D»B§m¸B¥®B”¼BÂh·B“¦­B^ö½Bhl¶B«ƒ­BÙX¿B%oµBñw­Bƒ²ÀBef´Bc­BÏÂB5o³B-A­BXƒÃB²BŠ!­BƒõÄBå›±B­B~jÆB¼°BŠú¬BòÖÇBdÓ¯BýĬB¦@ÉBaè®B^‡¬BŽ·ÊB®B(`¬Bä5ÌBæ=­BT¬B7·ÍBht¬B?<¬B¯6ÏB»«BÃá«Bò§ÐB׫BzV«BÿÒB AªBͪB#€ÓB"ƒ©Bt9ªB[âÔB7ɨB©B0°W®BøâBZ[‚B2¡®B+³âB]„BTÓ®B?âBµ³…Bñ¯B­âB@d‡B¥8¯B*ïâB‰BXk¯B91ãBÌ»ŠBÅl¯B…~ãB¿hŒBá0¯B{µãBôŽB4Ñ®B†ÒãB&½B¡q®BSÝãB5f‘B®BFØãB“Bû­BcäB¸¿”Bª®BÙèäB÷=–B7'®B3æB9‰—BXJ®B çBæâ˜B‘y®BR÷çB OšB£®B¹èB@Ó›BVÀ®BëXéBõgB3ЮB$ÔéBÊ ŸBç®B êB3º B ®BºíéBÆk¢B{®BB}éB‚¤Bì„®B€¹èB–¥B§~®BHÂçBwý¦BEx®BÛÃæBÎ_¨Blu®B5ÀåBi¾©B¦®B%¯äBˆ«BÊ£®B‹ãBU¬B®B£MâB)­BÓ®B¼úàBð‘®B$Þ®BšßB(“¯Bhñ®B+-ÞB‚°B"¯B‡±ÜBúW±Bþ>¯B”&ÛB© ²BlU¯BôŒÙBB¤²B¬X¯B]é×B³B¸X¯BfCÖB\³B)Z¯BМÔBäÿ³Bya¯BsóÒB*d´BSw¯BïDÑB¸¬´BÚ¯BÝ“ÏBKÚ´BÔ¯B•âÍBî´B°B˜2ÌBºë´B7]°BЃÊBÑ´Bp °By×ÈB/™´B¦ê°B3ÇBb;´B:I±B{“ÅBEÚ³Bx¸±BX÷ÃB`|³B,ßY®B`—âBmÞB­®®BG=âBS€ƒBç®B¡âBq.…BJ¯BšâBŽß†BúD¯B=>âB¿ŽˆBe]¯B‚âB–<ŠBûA¯B ¢âBaî‹B‘¯Bm‘âB‡BPè®Bô†âBPPBü®Bë¦âB‚‘BH%¯BLöâB­’BƒA¯BV‡ãB0G”BôN¯B{äB½°•BÉe¯BzåBš—B{НB)qæBzw˜B¸¯B/LçBÎí™BÁدBîôçB{~›BXé¯BrkèB¡!B¼ð¯B¹¤èB ÑžBƒÝ¯Be„èBÕƒ B@ƯBžèB·'¢Bñ³¯BÂ^çBõ´£B­¡¯BæB;+¥BXŒ¯B4åBL•¦Bˆ…¯B'äBwö§B•¯BHyãB2H©BOª¯BÖBâBOzªBÿ¸¯B_ðàBÁ«BB©ŽßBϬBÒįB'ÞBB†­BÝÓ¯Bõ¸ÜB4s®BŒë¯Bu:ÛBèD¯B|°BW¬ÙBòö¯Bh°B¥ØBøŒ°Bñ.°B·qÖB±Bx>°BÊÐÔB>‘±BOE°BÃ)ÓBóþ±B]S°BÊ~ÑBn[²B³j°BÑÏBŧ²BþްB§ ÎB7ݲBŰBYoÌB¡ò²B· ±BÀÊBé²Bñ[±BÖÉBtIJB ¿±BñoÇB"~²B%Qg¸BªŽæBnª†BãB·BËLæB&æ‡B¼G¶B#æB|G‰BrgµB(æBܼŠBº´BÈJæBUKŒBŒ ´BôlæBÏÙBq³BV£æBmBCø²B†èæBí ‘B€ª²Ba:çBï®’BQg²BìµçB•K”B 2²BÃ[èBRÛ•BC²B[éBd—B¿*²BhÏéB“ï˜B_J²BehêB’†šBÊg²Bá¿êBˆ0œBƒ²BqÙêB¼âBàŒ²BÌêB=–ŸBÕ²BÁ¢êBH¡B³“²B_uêB‹ù¢Bœ{²BÿeêBo¬¤Bw5²BVSêB)Z¦BAý±BýÕéBÛ÷§BÝä±BäþèBwr©BÄê±B@õçB‹ÌªBð±B·öæBÒ.¬Bqì±B\ æBTŸ­BWæ±B(åB¢¯B–è±BÂ2äB{°BÁî±B ãBá¼±B)ö±Bd¾áBXÖ²B8²B^TàBXʳB£²B[¾ÞBj´B4²B»ÝB¥Ö´B.T²BºoÛBç;µB=‚²BVÌÙB®µB¿²B¹-ØBI*¶Bû²B‹ÖB¤˜¶BKÚŠ¯B>ŸâBcS€Bí'°BïâBŒËB °B‚ˆáB˜[ƒBT×°B6áBÿ…B÷î°Bì,áB·†BMù°BY‘áB_ˆB=ý°B”MâBkè‰BͰBKÌâBņ‹Bûr°B¿ãB,-BÃ$°BR8ãB׎BVþ¯B™ãBX~B>ò¯B|&äB”’Bé¯B\ÞäBᥓB;æ¯BÆÆåBý•Bãõ¯B”·æB]‚–B<°Bp˜çB_ö—B-E°Bà^èB%x™BÈf°BhüèB@ ›Bò~°B¶réB°œBÄ…°BK®éBÇ_žBùe°B™éBò B›?°BƒGéBN¼¡BZ°B¦¸èBìV£B_°BòçBÚ¤B,æ¯BçBI¦B&ׯB¦æBa¯§BܯBÿåB²©BÝú¯BUäãBŒNªBá°B‘©âB{«B+,°BœXáBU¬Bt;°B¨àB”¥­B¸=°BW¨ÞB쨮BŸM°B8IÝB¬¯B l°B™áÛB¢°BɰBTeÚBbv±BV¥°B‰ÒØB&²Bm¶°B4×Bý¨²B½Å°B…ÕB!³B³Ó°BDçÓB…³B&ì°B49ÒB{ϳB±BhˆÐBuþ³BcI±B×ÎB!´B(бB¹&ÍB®´BÞÖ±BÔxËBË´Bd,²BÏÎÉBÑѳBâ²Be+ÈB‡†³B ü²B ÆBo(³BÔm³BwóÄB˲BSá³BXÃBo²B¥f´BÄÁBM ²B¶ µB9DÀB¶Œ±BþÁµBz;BC±BOy¶BÐU½BX‰°BêC·Byí»Boü¯B¼#¸BàŸºB|Q¯Bd¹Bëk¹B¯•®B9ºBÝM¸Bkõ­B†»B÷E·B”“­B±í¼BõQ¶Bt­BzX¾B`µB€s­B¾¿Bg´Bƒs­BÙ'ÁB·t³B£n­B——ÂBc‹²BÙb­BŠ ÄBŸ¨±B¥`­BmƒÅB›Ì°B¦f­B'÷ÆB†ê¯B°P­BycÈBñþ®B(­BûÔÉB®B ­B^MËB?­Bh­BŽÆÌB€e¬BH ­B–DÎB·–«B=ì¬Bz¾ÏBcʪBŒ¤¬B÷,ÑBõí©BŒQ¬B¾–ÒB©BȬB8ûÓB"¨BMÖ«B ÿ¥¿B»béB)ЃBP¾B3éBÙÓ„BTò¼BZ éBbÖ…Beš»BéByà†BmºB ùèB_ˆB5¹B2eèBv!‰B ý·B\ÑçBŒ*ŠBëý¶BYyçBR€‹Bø$¶Bå1çB8óŒB%ƒµB‚çB膎Bsù´BçBV$B´Bˆ/çBÚÉ‘B‡1´B—{çB(m“B=ݳB#óçBÓ•B“³BEèB™–B•j³B·?éBÄ$˜Bëh³BøéBﯙBôw³B"wêB¦P›B⌳B™§êBDBºŸ³B3ŸêB—´žBÊ®³BÛrêBåe B¨Ã³Bá6êB¢BaɳB’êBÈ£BγBs êB y¥BzL³BZêB%§Bê³B uéB†¼¨Bu³BîèB]%ªB¶/³B}mçB½w«BÈ5³BæBßî¬B·+³B˜àåB[~®B¹³B–JåBx°B½$³Bœ…äB{œ±B-)©­Bs‡ãB`²‚BŸç­Ba_ãBÍ_„B&®BP7ãB: †B+\®B.+ãBy½‡BØ‘®Bi-ãBîm‰BeÇ®B£FãB¬‹B´Á®BmkãBéÏŒB†®BT‚ãB ŽBh3®B˜‚ãBð*B¸ì­B‰xãBÝØ‘B?¿­B ~ãBEŠ“B~®­B"ÐãB!6•Bk·­BÕ¤äBIJ–B2Ä­B ³åB ˜B—å­BݱæBi™BE®BX–çBÚšB¯9®B‡KèBådœBTP®BAÖèB‹žBJ[®B½8éBªŸBFV®BÊFéB”]¡BxJ®BKéB² £B,G®B¨dèB‘¢¤B£F®B‰çBq¦B2C®BމæB}§BKA®B …åBüÚ¨BJ®BõväB1ªBôd®B‘YãBz«BH‹®Bà$âBÕ¬¬BE ®BJ×àB¿Å­BÞ«®B.xßB É®B¨¼®B© ÞB¼¯B>Ù®B{–ÜBš°B×ÿ®B9ÛB¡\±B½¯B/|ÙBÿ±Ba¯BøÚ×B²B¬¯Be6ÖBÝ÷²Be¯BU‘ÔBÔl³BدBêÒB‘Ù³BF¯Bk=ÑB.´B=?¯B®ÏB®j´B3m¯B;ÜÍB`Œ´Btª¯Bo+ÌBt”´B~ë¯Bn{ÊB؃´Bk(°BÍÈBfU´Blj°B­&ÇBú³BJ¿É¶Bn´çBæ‡BF¥µB ]çB‰B÷~´BÒ^çBÝ]ŠBÁo³B”çBc®‹B«€²B¡äçB©BžÎ±BW1èBñ—ŽBóI±B‰èBÁ-BÌç°B‡!éB@º‘BHÁ°B>÷éBƒ4“Bwº°BßÏêB¯”Bç¹°B§jëB—F–B¡Æ°BnÍëBïî—B_ݰBÄ+ìBÛ—™Bû±BYlìBNE›B±BuìBqøœBä°BU_ìB樞B•°B3 ìBcM B\°B¸©ëB%ò¡BÖ3°B¶$ëBT£Bþ°BágêB¼¥Bzõ¯BX‰éB猦Bã¯B˜èBÚ÷§BÙׯB"œçBÓ[©BÙ߯BÙ‹æB±°ªBÙç¯B{åB¬Bí÷¯B˜TäBÒF­B;°BãBqp®Bˆ°BŒÈáBНB°BWpàB®–°Bò°B™ ßB‘±BÓ3°BŽÝBhf²BþQ°B"ÿÛBC³B‚i°B5fÚB‘®³BÎ{°BëÆØB{5´BI°BÄ"×B›¬´Bÿ °BâyÕBNµB&¶°B‘ÌÓBÀ`µBˆÑ°B'ÒBÖ’µBÂö°BhÐB¿¨µBÙ+±B0¶ÎB`­µBŽp±BŒÍB‚£µB©¾±B6YËB3‰µBIJB:¯ÉBÓQµBij²B± ÈBÿ´BtѲBÊmÆB…Ÿ´B«@³B¦ÑÄBžA´BU²³B6ÃB4ä³B¼5´B#¥ÁBMr³BÈ×´B»(ÀB2å²BÔµB:º¾BàN²B©P¶B¾L½BcÁ±Ba·Bíä»B³7±Bf ¸B!”ºB£°BŽ ¹BEY¹BA°BcBºB?¸B’¯B5 »BDA·BAZ¯Bþ½BËW¶BT¯B]€¾BÄoµBnd¯Bê¿B©}´Bl¯BùRÁBƈ³B÷h¯B»¸ÂB­²BÚU¯B—ÄBÔ‘±B¨?¯BI|ÅBg•°Bj+¯BÀæÆB1¤¯B¯BSÈBµ®B;¯BNÀÉB#È­B*¯BÚ.ËB Ü¬BI,¯B¤™ÌB†ì«Bè¯BÙÎB@öªB.¯B†YÏBë©B ¯Bþ’ÐB¡¿¨BO:¯B†ÁÑB‚Œ§Bò|¯BEÓB0n¦BBª¯B¥dÔBíi¥Bž·¯B(öö¶B;>âBë4‚B†É¶BHâBBæƒB[“¶BVMâB¬–…B@¶B”ÁâB~2‡BßµB¨ãBø—ˆBfµB¶HäBÔŠBÕþ´B ²äBµ‹Bñ–´BsðäB¬WBÉ3´B¢>åBÙøŽBTã³BA›åB ›BÙ›³BæBn<’BGV³B4uæB[Û“B³BÁþæBõt•B– ³B`²çBõ—Bº.³BvèB†˜B*R³B éBIšBSl³BÏeéB¸Ç›Bˆz³B½‹éB§yBý`³BiléB›+ŸBª/³BéBÒ Bžì²BŽºèBÊx¢BI¤²B¡WèB¤Bw]²Bx¿çBf­¥B¿5²BŠÞæBô §B²BšýåB‚”¨Bª ²BùäBsò©BÓ'²B}ÚãB_:«BuS²B}°âBDv¬Bçm²BˉáB·­Bm²B#YàB¤ï®BV\²B)ßB¶°B¾[²BçÅÝBd+±Be²BªZÜB¶²B;|²BµÖÚBFå²B-Ÿ²BgFÙBó³BϲB·¯×BŒ)´Bý²B'ÖBD¢´BZ$³B„aÔB‚î´B R³B!°ÒBFµB‘³B…ÿÐBWµB3”¯¯BˆÀâBëB5°B9âB;‚B½Œ°B£ÔáB,„Bp¯°Br¢áBÛ…BʰB7ÛáBÞŠ‡Bîæ°B6ŠâB3‰B+Ù°B4ãB‡ªŠB±°B|œãBüJŒB³'°BBÞãB™íB"á¯BÈUäBÚŠBbÁ¯BÓíäB@"‘B?­¯B̰åBÒ§’Bi¤¯B¨—æBДB:³¯BªŒçBk‚•BFίB|fèBFû–BQé¯BM@éB!t˜B» °BðöéB‹þ™B$-°B.’êB‹”›B+O°BÑëB2B}_°BÁ€ëBÏØžB÷@°BRÃëBz† BQù¯B_ÒëB4¢B¤Ä¯B~hëB¤×£B®¤¯BLÊêB§l¥B7НB@ðéBqå¦B~u¯BÓéBkS¨Bƒd¯B¼èB仩BXU¯B çBa"«BO¯BœæB{w¬BâS¯BWÕäBg¯­Bôb¯B÷†ãB¾Ç®B™k¯B¾)âBÂͯBCo¯BÊÆàB̰BÔz¯BtZßB²¼±B”¯BùÙÝB”вB¹²¯BJIÜB36³BȯBŠ®ÚBÒɳBÔ¯B ÙB&L´BܯBh×BX¿´Bøé¯Bã¾ÕBõ#µBnü¯B¥ÔB™yµB3°BåaÒB³µB.°B«®ÐBÅѵBgX°B´ûÎBÌݵB‘–°BùJÍB‰ÚµBQä°B`ËB“õBÊ-±B„ñÉBµB¼y±BeJÈBÉ@µBÃбB„©ÆBFÞ´B]7²B… ÅB°~´BÀ§²B¥oÃB!´B!&©Bü"ïBYi›BЩBºvîB£ÓœBWdªB1¨íB6žB¦ÉªBXÔìB›¥ŸBÁ«B‡ìBÑ#¡B¥W«BSNëB£¤¢By–«BV~êBȤBLÕ«BW®éB혥Be¬B»²èBú¦BÝ-¬B¬œçBñG¨B'L¬B7~æBÆ©Bãj¬B§]åB¹ÕªB2¬BØ7äBK¬Bͱ¬BÁãB@T­BɬBPÒáB€®Btç¬B†àBI”¯B'­B¤ßB°Ž°BVF­BF«ÝB\o±Bz­B0(ÜB<3²B‡š­Bæ•ÚB¾Ú²B5ˆ­BVöØBª`³BÐ_­B R×BѳB‚7­B!­ÕB…?´B­B{ÔBðª´B­ö¬B3^ÒB µBšõ¬Bø±ÐB&dµB³­BÏB<¬µB³ ­BPPÍB^ÙµBÌ­Bz›ËBþèµBBú¬B÷æÉB_æµBtìBÄ5ÈB]ÔµBês¬BψÆB9¼µBP¬BÞÄBÓ µB-jŒ¬Bf9ãBG˜Bð¹¬B&ÅâBì9ƒBvݬBk›âBGê„B¼­B•âBnœ†Bà-­B¤›âBNˆBX­BW¬âBtÿ‰B¼^­B¾âBݲ‹BÑJ­BGÁâB9fB”C­BðÕâBB›S­B ãB—ÈBÓp­Bæ„ãB—l’Byk­BräB¡Ú“B¿q­Bš…åBó,•B³‡­B“æBP…–Bª­B™tçB€÷—B‰Ð­BK3èB·}™Bî­BÁÛèBÀ›Bm®BPséB禜BI®Bo¹éBáTžB‹®Bž›éB« B0®BÝ=éBX±¡BÓ®BàèB[£B®BT2èBéê¤B>®BALçBx]¦B®B8IæB‰¼§B±®BAåBÅ©B>%®BØ.äBîjªBE®B\ ãBö¯«BEg®BìÒáBÔܬBz®B]àB!ñ­B‘…®B4ßB]ð®Bÿ™®B²ÝB߯Bõ¹®BÝ7ÜBq·°BÜ®Bø®ÚBls±B‚í®BÙBT²BŸé®Bøs×B‹²B-â®BŽÏÕBD³B–Ø®B*ÔB3w³BìÖ®B‚ÒBdß³Bñæ®BÕÐBC1´B^¯B%ÏBl´BÃ3¯BRsÍB‹´Bvn¯B ÂËBÚ´Bɪ¯BÊBE}´BÆá¯BûbÈB[I´B0n¸¶BgÉæBÖx‡B舵BCŽæB8«ˆBDR´B! æB³Û‰B³B­ÙæBÅ‹BT²B›:çBãZŒB,S±B¶‘çBÓB©°B0îçBòYB1°B¿zèBÝB‰Æ¯Bï=éBZ’BȯB%êBëË“B2Ò¯B¼ìêB~O•B}ܯB÷ƒëBCè–Bï¯BbþëB7Š˜BÙ °BŽìBÌ$šBã-°BØ3íB¶›BÜ!°BeíBsgB´Õ¯B`PíBŸB9z¯BŠíB¹· B´H¯B¶ìBwX¢B]2¯B–ÛëByä£Bè!¯B¯èêBpN¥Br¯BÊõéBg¸¦B¯BŸþèB‰¨Bzô®B†èBi…©BÍç®B çBWêªB$ç®BòûåB@@¬BJñ®BÏäBÇ|­BܯBu‰ãB‚ž®B£ ¯BÙ1âBº«¯B¯B_ÑàBb­°B’#¯B¾gßBס±B3<¯BPéÝBs²BMY¯BYÜB‘!³BÕm¯B×¾ÚBwµ³B‡v¯BRÙBT6´B¾x¯Bw×B§´B÷¯BäÍÕB µB¿‘¯B]"ÔB£eµBयB?rÒBÞ¤µBk½¯B>¿ÐB¥ÈµB¢ã¯B ÏBÙµB°BðZÍBåÙµBAl°B1­ËBåõBO²°B“ÊB葵BÛö°BëWÈB DµB-D±BеÆBÈß´BN¤±BHÅBö~´B|²B zÃB!´B)©D«BfãB°º€B¡O«B{‘âB7‚BƒT«BZ âB|ÖƒB5R«B çáB ˆ…B3\«B ðáB8<‡BPx«BA%âBïëˆBPœ«BMpâB½—ŠBݸ«BGµâB!EŒBÍ«BëâB(õB-Ñ«Bø{ãBKB—Ü«B1&äBŠ!‘Bè«BiÐäBɲ’Büï«BïžåBÏ2”B2î«B‹”æBU›•Bžå«BœçBrö–Bë«BNuèBüp˜Bvú«B<#éB‚šB½ ¬B}ÃéB¯•›Bø¬BjêBw(B¬B?ëB.·žB‚@¬B1ÆëBgF B©s¬Bu[ìBÁÜ¡B»’¬BAÙìBó|£Bk•¬BëFíBÒ"¥B«¬Bj_íBgÕ¦B8ܬB›;íBñ„¨B%÷¬BVìB—ªB{ ­B²`ëBaL«B.I­Bÿ5êBˆ¬Bäo­B}éBØÆ­B–­BJäçB3¯BѤ­B(­æB5°BMŸ­B–fåB®V±B¶­BkäB²f²B‹w­BÞ³âB>k³B¾I­B‚VáBm´BŸõ¬BUñßB›YµBÞ…¬BntÞBr¶Bûþ«B:åÜBé¶Bµ~«BJRÛBäî¶Bí«BÕ¹ÙBÛ[·B,çâ´BÔñâB­Ä€BåJµBHâB­0‚Bâ²µB¼@áB¬œƒBCéµBáŸàB?.…BuܵB-ZàBL܆B¯«µB$kàBˆBûgµBÔàB³.ŠBúµB¤xáBMº‹BÆÅ´BäáBéXBên´B3âB›BÏ´Bë+âB°¦BÎs³BRPâBA’BZʲB½‘âB/Í“B¿Z²B?øâBåe•BÁ9²BvlãBÀ—B¨&²BÐ äB힘B¤ú±B!ãäBšBÔ±B€ßåBYx›B‡Ó±BTËæBPçœBùå±B¼­çB£[žBÿ±B¡mèB[âŸBl²Bö–èBn“¡B”2²B7wèB\E£B…²B#0èB§ò¤BÄ×±BeªçBLŒ¦B=§±BâäæB¨B?–±BãíåB2u©Bž£±B¦ÛäBWȪBÙȱBçµãBø¬Bêë±BeâBJ­B¼ú±BeáB[‡®BËò±B€(àBʳ¯Bè±B\ÛÞBÂͰBjê±BFyÝBUͱBúý±BûÛB ²BJ²BÃlÚBŒQ³B4=²BgÖØB?î³Btg²BÏ9×B x´BÐŽ²B÷“ÕB‰ã´B¯²BÂäÓB«#µBôÛ²B3ÒBòCµBH³B9‚ÐBEµBVc³B¾ÓÎBè2µB±³B#&ÍBµB:ů²BûïBŒÁ–B»–²BÙBïBûK˜B ²BÓîB½ð™BXk²B2cîB•›Bcb²BPîBî@B´L²Bµ¨íBBèžB6²BÇ"íBô‚ BU±Bî™ìB ¢B8…±Bõ4ìB ¼£BåS±BŽÛëB]d¥B_'±BªcëB§Bê±BSªêB/ލBaò°Bz½éBü©BWí°B›¼èB«\«B†Þ°B’ÇçBEŬBqŰBÐ׿BÐ0®B±¯°BÒåB‹¯B›¯°BËžäB ðBä¿°B_HãB€Ñ±B(Ô°BÕßáB%DzBÛì°BMjàB>¨³Bö±BPÚÞB5V´B±Bõ8ÝB3Ö´B 1±B•’ÛB§DµBNM±BîÙB|¸µBr±B¶KØBƒ1¶Bx˜±BT¤ÖB+—¶BB½±BäöÔBà¶BŒÛ±ByDÓBƒ·BÆø±BdÑB·B@²BÝÏB0·BZ²B,ÎB¾õ¶B¤²BÖ}ÌB¹à¶Bu÷²B–ÒÊBw·¶B¡U³B=-ÉBs¶B,ijBÇÇBº¶B8´BPõÅB˜ºµBã³´BhZÄB¾gµBK:µBŽÂÂBgµBBßµBx>ÁBÿ£´B„£¶BBÓ¿Bh´B[}·Bz¾Bgz³BÙY¸B€½B^í²B B¹BfÁ»Bßm²BTFºBxºB2ö±B—z»BmN¹B°¤±B’Ù¼BCM¸BN‹±BöL¾B!j·B+›±BüÍ¿B}¦¶B¢Ò±B‡RÁB€íµB§²BÕÂB,µB#I²BÍUÄBe´B v²BÔÅBsœ³B «²B¨JÇB7ɲBÖò²B²ÈBiã±BBK³B ÊBÇ ±B«³B•ËBøL°Bð!´BÍBº¦¯B3É´B=ÉÀBy@ñB‘˜vBЦÀB4µïBX‚wBõìÀBfîB“›xB¸ÿÀB>…ìBŒÑyBÛ<ÁB"ëBà¾{BQhÁBÝéBBÿ}B*dÁB!ºèBíD€B!ÁB=®çBŸ–B¢IÀB>íæBŠÜ‚BEr¿B?,æBu"„Bã-¾B¹ÐåBÎ5…BÒ¿¼B±åBÁ†B]O»B©·åB ‡B@ð¹BCÉåB‹ˆB@£¸BmÉåBˉB,N·B…åBù&ŠBþµBj-åB¨)‹B¹«´BÓÈäB'ŒB'b³B‡£äBHABy7²B7òäBHtŽB'D±BåBÛÚBÚ¤°Bè`åBk‘B31°BZ±åBz“BkÞ¯B•:æBBÞׯB-#çBä –BWæ¯BŠèBòx—Bê°B¼ïèB»ð˜B×,°BܬéBwšBÿN°B)HêBz œBÌn°B£ÆêBi­Bqu°B"ëB‹WŸBV°BþTëBD¡B9(°BºëB ´¢Brú¯B¦êBåV¤BÿÖ¯BãÿéBoè¥Bòº¯B 'éBËa§Be¦¯BÖ9èBHϨBQ—¯BeBçB=6ªB “¯B @æBÇ•«B™¯Bs"åB®ß¬B娯BœèãBª®Bs·¯B4™âBÏ%¯Bi¼¯Bè>áBÀ/°B#½¯BÖÞßB2±B ϯBÃiÞB޲BTë¯B—áÜBÓ²Bé°B¢KÛBrr³B°B!®ÙB¸þ³Bo$°B9 ØBÔz´BÊ2°BdÖBˆç´BÌD°B/¹ÔB…CµBaZ°B ÓBˆµBv°BWÑB°µBÜœ°BR¤ÏB+¾µBNÖ°BíòÍB⿵Bˆ±B7DÌB°µBåk±Bš—ÊBEˆµBºº±BüîÈBDµB~²BÒMÇBÔä´B«y²B½¯ÅB)…´B*é²BªÄBQ'´B-4­B…¢ãBmÑ‚B_e­B»xãBj€„Bò•­BpãBf1†BŒÊ­BkãBøá‡BOý­B?fãBÃ’‰Bù­B½tãBRF‹BÆË­BÔŒãB"÷ŒB¯¦­BdÅãBµ¥ŽB'–­BvVäB‚@B¨­B£åB]È‘Bé ­BÅæBÜ3“BŽ­­B8çB”B"Ê­Bh èBò•Bé­B*ÚèB(p—B–®B¥…éBìÿ˜B•#®Bã4êBŽšBD®BäòêB7œB¤G®BœyëBγBÝ1®BtëB gŸB<®B4!ëBÞ¡B¶ ®Bˆ”êBx®¢Bz®BÁÈéB0¤B”®B5ÏèBÜ•¥B5®BÚËçB°ô¦B’®B~ÃæBÇO¨Bh$®B-°åBý¡©BñF®BŒäBÚäªBëf®BìPãB³¬BQy®BÿáB±$­B‡…®BTàBr$®B÷™®Bú/ßBê¯B’¹®BµÝB4ë¯B.Ù®B‰;ÜB~ðBNü®By²ÚB ±B¯BbÙBB²BÖ ¯Bw×BS•²Bô¯BrÒÕB ³BM¯BU-ÔB¸€³B‘¯B­„ÒB$è³B¯BJ×ÐBç7´Bs7¯B'ÏB p´Bzg¯B‰uÍB²Œ´B8§¯B ÅËB)´Bèå¯BîÊB.z´Bx!°B7gÈB/D´B9ñâ©BçëBJøšB×’ªBSêB@^œBæ"«B£¡éB‚ÑBŸ†«B{éBE`ŸBEÊ«BèBØõ Bx¬BËÃçB¢{¢B1+¬BhÙæB é£BN¬B]ÏåBA¥Bøh¬BÕ¶äBJަB¢‚¬BhšãBCاBª›¬BCkâBK©BD¬¬B¡ áBî-ªBû°¬B£¾ßBš-«B˼¬BëRÞB¬BºÓ¬BƒÝÜB”­Bªê¬BhÛBâ­B ­BþèÙBw²®Bê ­B`ØB)q¯By­B`ÍÖB‹°B'ð¬Bœ5ÕB9¶°BåÒ¬B…šÓBeG±B¾¸¬BfûÑBSͱBŒ®¬BDWÐB=E²B䲬Bƒ®ÎB/¬²B}¨¬B’ýÌBrç²BbŒ¬B“IËBcô²B’Y¬B±—ÉBÐç²B”¬B/êÇB˲B籫BÕAÆB4œ²B?P«B4œÄBÅ`²BYéªBþùÂBà²B½lªBßaÁB»±BcÌ©BÛ¿B£K±Bô©B d¾B•Ò°B¹H¨Bö¼BwT°Bo§Bk•»B¾Ì¯B͈¦B÷EºB'0¯Bð¥Bð¹B|®B7°¤BqÅ·B§Ì­BÖ±£BЈ¶B¦.­B“¢Bð[µBi¬¬BŸ]¡Bl@´B8¬B} Bç/³B ü«B‘´žB()²Bï¬BíXBÜ-±B°M¬B«÷›BLA°Bªª¬BÑ’šB¤O¯B÷æ¬B7(™B8a®BÙ­Bk»—B¼t­BÖ­B¡P–B „¬B!­BZé”B%«B;­B“BFžªB<­B9 ’BÁœ©BH­B$ÝBØx¨B ­BŒ¯B)D§BOѬB&’ŽB_¦BZ¬BkvBûç¤BÎÉ«B-Ãö«B˜FãB‘7B›¬BNªâBiÍ‚Bp,¬BÉ^âBz„BÉ@¬B¯RâB<-†B_¬Bš`âBÁ߇BH‰¬BΆâBÒ‰Bq ¬Bæ±âBâ@‹B⢬BíÔâBLóŒBi¡¬BGÿâB¥ŽB‹©¬B5XãB°OBõ¸¬B,èãBäê‘Bê´¬BÇÍäB½]“Bÿ¶¬B©ÓåB®º”BÀ¬BY׿B!–B˜Õ¬Bû¯çB“—Bûó¬B¼_èBà ™B“ ­B6éB‹³šB©­B¦éB[HœBÍ@­B÷áéB›öBð`­B*¬éB襟B p­B4RéB!P¡B*­B?øèBYú¢BÆ­B‘RèBP¤BÇ­B sçB™¦B#¥­B3mæBƒ`§B&¬­B³`åB^¸¨B2»­B5MäBl ªB_Ø­Bç-ãBŸQ«Bý­BáøáB·ƒ¬BîBü«àBa­Bý ®BžLßBK ®B;6®B[áÝBÖ‘¯BŽU®B‡iÜBEn°B†y®BºãÚBO0±B.Š®BµNÙB}Ó±Bñƒ®Bí­×BÉV²BŸu®BO ÖB вBd®BùeÔBXF³B!W®B!¿ÒB´³B]®B©ÑB´Bv®BUeÏB¹W´B’–®B…³ÍBí‚´B¿®BsÌB‘´Byæ®B.MÊBK†´B÷¯B†šÈB,a´B#®BöÜãBÄÍ•BA®BæñäB’—BLk®BtõåB¡y˜B ›®BJÚæBÍé™B1À®Be‰çBYw›BsØ®B!èBÆB”à®B4èB‹ÊžBÊÛ®B1èBò| BÎÒ®Bâ’çB¢BxÏ®BüÒæB¦¥£BûÉ®B>íåBc¥B;¿®BºóäB~¦B ½®B}ïãB=ܧBlÉ®BMÓâB.'©B·×®BÈ’áB4OªB-ß®Bª6àB¸V«Bœã®BÜÑÞB{R¬Bë®BãiÝB£I­BHû®B­ùÛB 4®B#¯BãwÚB¦ÿ®BÛ/¯B\çØBõ«¯B“L¯BÕV×BCX°Bb¯Bí»ÕB{ë°Bk¯BNÔBõk±Bn¯BÞsÒB ܱBx¯BaÊÐB‘?²B‰¯BqÏB—²B˨¯BÎnÍB‰Ô²BÃØ¯B{½ËBøô²Bú°B? ÊBü²B)å"¸BÂáB-™€BL ¸B¥ÿáBÔ:‚Bå·Bë@âB®åƒBø‘·B¢nâB…Bí>·BYœâB}8‡BÖ¶B(ãBðLjB¥^¶BWäBU!ŠB7ÁµB1åBì`‹Bæÿ´BÎãåB᪌Bþ´B\kæB ŽB‡`³BÌæBk‚B è²B¹çB‘B[š²BMcçBqÄ’BcX²B3ãçBø_”B&²BI‘èB—ì•B¿²BnPéB7t—B#²BWêB(™B¨A²B”êB˜›šBÊ^²BõâêB@GœBnz²B+õêBÌùB&‚²BâêB"­ŸBi‚²BȳêB^¡B[‚²B’…êBà£B0g²BsêBv¤Bu²Bÿ[êB·o¦B¯é±BÖÖéBN ¨BËÒ±B!üèBôƒ©BWÙ±BhñçB1ݪBhݱB‡ôæB«@¬BKرB¹ æBá°­BæÑ±B#åBp"¯BÕ±B'äB‰†°B“Û±BºûâBıB ã±B «áBîÙ²B°ð±B«>àBcʳBü²BS¨ÞBPi´Bú!²BÚÝB“Ö´BâA²BTZÛBÜ=µBao²B.·ÙB ±µBdª²BØB©,¶BXä²BºtÖB]™¶B-ZM¬B2ÝâBL B$t¬B']âB0?ƒBš‘¬Bö*âBï„Bº¯¬B<$âBÑ¡†BK׬BÑ0âB¡SˆBÏ­BÙKâBLŠBÔ­BÅ_âB]·‹Bõ ­B,[âBkB­BTZâBðB‹#­B½yâB(ÑBÄD­B¶¾âB5~’BtS­BÄHãBr”BL­B <äBk…•BÂY­BBåBâ–B-|­Bä2æBL˜B`¨­B'çB È™BÉ­B§çBE[›Bªé­BKèBêíœBôü­BLÆèB˜žB« ®BÒ éB´9 BA ®B? éB í¡BV ®BŸèB)“£B¦®BDççB\¥BÅ®B.ûæB%¦B°®B£öåBë§BŸ®BÞìäBE©B$'®BØãB–ªBK®BZ³âB¼×«Bni®B4sáBøþ¬B¯y®B1àBï ®BÖ…®B?¸ÞBC ¯B,œ®BcHÝB¯ó¯B%¾®B§ËÛB/ǰBÜ®B’?ÚB:}±B9è®BD¥ØB ²B`ã®Bí×B!޲B×Û®Bª]ÕBͳB¶Ñ®B§¸ÓB›z³B Ô®BþÒBØÝ³B¿ç®BDaÐBw+´Bø ¯BɰÎBAa´B]8¯BØþÌB+{´BŠu¯BöMËBª{´B3¯¯BPÉBÂb´B2å¯BÞïÇBS%´BI°BÌâB…Ø€B¢°BòáBçR‚BŒ±B©áBçƒB%±B;¼àBÓ”…Bø+±BþÐàBH‡B¼&±B¹KáB[êˆB¸ ±BêáBÑŠBµÔ°BB;âBD(ŒBò}°BMâBýÒB2>°BÐfâB]B&)°B(ÀâBz+‘BC%°Bf?ãBiÌ’B‘"°BŠáãB#a”Bß°B®ƒäBÝõ•Br°BBUåBTt—BA+°BµAæB¯â˜BßH°BP5çBLKšB9q°BPèB¾›B0“°BQéèBÆ:B¤°BWéBFàžBŪ°BNéBk B⬰B^‹éB7D¢Bz¡°B¯KéB=ó£B–v°BvÀèBŽ¥B–M°B-ÿçB×§BA3°BÿçBe„¨BÍ&°BæB é©B20°BråB.?«BõK°BïìãB¬ƒ¬BAj°Bð·âB}¶­B§w°BlráBÙ®B|w°B«àBSë¯B¹y°BϾÞBñí°BXŒ°BdLÝBªÔ±Bp¬°B‚ÅÛB3•²B:ưBƒ1ÚB»9³BܰB•ØB‰È³Biñ°BŠòÖB©D´Bý±BXJÕBÙ«´B±BÚœÓB>ú´Bˆ<±BëÑB++µB1j±BG9ÐB?µB$§±B]ˆÎB‡@µBï±BfÙÌBÆ3µB?²B‚,ËBÓµB´–²B8„ÉBvÜ´B¿ú²BãÇBGˆ´B1i³BÍFÆB9*´B/Û³B@«ÄBͳB>T´BÃB[w³BÈã´BvÁB_ ³BÕµB ÀBG‡²B£N¶B/˜¾B9ù±Bk·BS*½BÖp±B]ã·BwÄ»B÷æ°BÝϸB°uºB³P°BܹBÀA¹Bò¶¯B±»Bk,¸B’M¯B |¼B,1·B÷¯B|æ½BŒ?¶Bº¯B1N¿B˜IµBl¯B*®ÀB·H´B¯B_ÂB¬N³Bpð®B[wÃB-V²BdÕ®BÉÚÄBÓZ±BìÀ®BCÆBøg°Bc¦®B1¯ÇBUy¯B¤‹®BÝÉB´‰®BU~®B(‹ÊB¡­Bìv®BmüËBPº¬B i®BEmÍB¾Ó«B¼P®BüÛÎB<êªB$4®BU=ÐBíë©B‘®B0÷®B—ãB&r‚B°]®Bv`ãB„B‘®B©SãB˜Í…BšÅ®BfãBÜ}‡Bßù®BP£ãB(*‰Bmó®B­ÚãBlÚŠB>³®BüäBn‡ŒBôe®B®@äB40ŽBx<®BjÂäBWÎB‘'®B°€åB-V‘B5®BvhæBZÇ’B`®BëkçBÿ%”BD®B±gèBNˆ•Bsg®Bþ7éBÈ—B…®B-ÛéBù˜˜B ¦®Bù†êBT(šBAÏ®BGëB”­›B¥Ü®BíãëB#DB‚±®BoìB©òžB^†®BñLìB/¡ B÷>®B¹%ìBRM¢B?&®BŸëB1ë£B€&®B¤ÜêBŽq¥BÚ*®BfçéBOÚ¦BZ.®B>çèBt;¨B/0®BÔáçB˜©Ba/®BQÜæBþõªB}:®BcÆåB6F¬BŒL®B›äBdƒ­B^®Bµ\ãB­®Bôj®BQ âBŽÃ¯B)|®BȯàBʰBP”®BTFßB ¾±B9¶®BçÉÝB’²BWã®Bq=ÜB'D³BNí®Bu¡ÚB“Õ³B ê®B8ÿØBPT´BSá®BÄX×BñôB>à®By¯ÕB¼(µB[ç®BÕÔBà‚µBâó®B½SÒBÜõBš¯Bä ÐB'ìµBY(¯B”íÎB«¶B]¯Bž;ÍB“¶Bó¨¯B¸ËBïðµBøç¯BŽàÉBwºµBC°BŸ6ÈBshµBôW°Bæ‘ÆBÚµBØÇ®B‚/äBÅ—B¼ê®B;åB™Z˜BÞ¯Bi4æBþ½™BÀ:¯BòæBÍD›B›X¯BCtçB¹ãœB"k¯BóçBƒ’žBk¯BGšçB—E Bé`¯B çBPç¡B[¯BFbæB×p£B¥O¯Bü„åBƒè¤Bâ>¯B“äBgS¦B.¯B¢ãBJ¾§Bn%¯BÁ£âB² ©B.¯B¢†áBôjªBÉ;¯BâDàB®‘«BC¯BnèÞB½˜¬B$G¯B™„ÝBá•­BïN¯B¤ÜB®B:`¯Bµ«ÚB:v¯By¯B'ÙB?<°BV“¯Bô’×Bsà°B¥¯B§õÕBQm±B£®¯BðRÔB:ê±B粯BÆ«ÒB~W²BõÀ¯BÌÑBù³²BQدBSÏBE³Bjþ¯Bl¢ÍB}2³Bs4°BñËBàG³Bdu°BÑ@ÊB†B³BȽ°B “ÈB4 ³Bv±BðÆB вB*)µBfqãBbu€B)’µBm‰âBƒ×BÜÀµBçìáB¾kƒB¦µBþÁáB¡…BâsµB¼üáB˜É†Bc)µB%ÔâB}=ˆB¿æ´BáËãBež‰B-ˆ´BÐaäB¼,‹Br´B¼¹äB€ÈŒBs¥³BVåB0dŽB&I³BæqåBâB³BˆÛåB!¤‘B²BâQæBzB“Bª†²BâÜæBkÛ”Bt²BÑ‹çBmj–B вBÚKèBTñ—B!°²BšôèB‚™BÝͲB aéB›&›B§á²B–šéB-ÖœB~Ò²Bv™éB¼‰žB£¨²B/]éB\7 B…o²BÇéBxÝ¡B:1²B›œèB£BGò±Bs èBí¥B¸Â±Bï9çBú’¦Bã±±BÇBæB ú§BÁÀ±B=/åBL©Bêç±BøäB‹ªBÿ ²BÃÙâBïëB|²BÆ¢áBúõ¬B¼ ²BbUàB„®B1²B¶ßB"2¯B&²BF§ÝB•(°B0²B¢/ÜB•±B$L²BË©ÚBçɱBºg²Bõ#ÙB8²B²B&‘×B\2³BH³²BnðÕB¦°³B)Ö²BlDÔBW´B…³BW“ÒBS,´B^<³BfâÐB¹6´B(ˆ³BC4ÏB•#´B/Qã¯B¾ãB|UƒBš°B¬RãB±…Bê?°Bb{ãB5²†BNn°B·äBIˆBŒr°BC¿äB¨Ø‰Bj#°BL3åBYu‹By¯B,våB§Bí2¯B;ãåB §ŽBUÍ®BM‚æB0Bøm®BPçB®¤‘BpH®BL;èB“BÀp®B*4éBv”Bº˜®B êB`ô•B®³®ByžêBhŠ—BƒÍ®Br1ëB$™B‚ô®B-åëBR¯šBø#¯B¼»ìBû'œB¹ ¯BQ'íBÅÍB+¼®B“íB÷yŸB¥}®B?ÂìB‰¡B†g®BX/ìBi¹¢B;d®BbëB3:¤B»b®B‡jêB`¡¥Ba®B¶kéB~§Bd_®BålèBœe¨B´\®BijçBÅ©Bâ[®BídæBR"«B¯i®BÈJåBðn¬B×}®B äBĦ­BÒ®BYÔâBïÈ®B®BJ~áBÿׯBÑ­®B àB’Ù°BÊÇ®B®®ÞBiıBQì®Bð,ÝBA޲Bõ¯B·˜ÛB2³B3¯BKûÙBe¿³Bi ¯BrWØB²8´Bà ¯B-°ÖBŠ¥´B§ ¯BÕBòµB¯BøYÓBI^µBo&¯B©ÑB™µB|@¯B öÏBýºµBXl¯BmCÎBžÌµBx¯¯B|“ÌBŵBë÷¯BÅåÊBŸ¢µB…5°B:9ÉBfµBrp°B7’ÇBòµBæ«B¸×ìB×Ù›B^Ä«Bí)ìBMEBe¬BÌëB|ÓžBëG¬B–ëBNo B*p¬B8têB¡¢BÑ–¬B/µéBº£Bµ¬B¥ÅèB ù¤B¦Ê¬Bì¶çB‘N¦B1ݬBr æBž§Bæô¬B¤…åB„é¨Bt­BÏbäB.-ªB8­Bú?ãBØp«B^­BÁ âB“¢¬BÚt­B—¿àB,¾­B;ˆ­B‰aßB„®B ¤­BöÝB³¯BKÈ­B}ÜBÐŒ°Bóí­BøõÚBàK±B¬ù­B `ÙB7í±Bëç­B¿×Bán²B£Ë­BÅÖB›æ²Bª«­B%xÔBP\³B2­B„ÒÒBæË³BµŠ­B†(ÑBŠ-´B¤œ­Bè{ÏBf´B¯­BrÊÍBÓ¶´BnÁ­B)ÌBÌ´B5È­BaÊBbÇ´B4·­Bÿ¬ÈBÜ®´B†ƒ­BÌýÆB~´Bé:­B+QÅB#R´B29ì³B8°ãBÊ BÂS´BãBò‚B‚v´BÄ”âBþ2„Bh´BóâB†æ…Bé5´B‹hãB¥\‡B´³BWnäB¯ ˆBáê²B³2åBî‰BR²B6ÍåBìG‹BƒM±Bn,æB]ÀŒBͨ°B’‚æBŽJŽBY-°BOçBúØBƒÂ¯B}¦çB^‘Bg‹¯BIxèB…Ø’BH›¯B8géBE”B ´¯BN2êB6Æ•BÃȯB³ËêBÅ]—Bà¯BLëB¸ý˜B°BÐÏëB±›šB¶0°BÏLìBÓ:œB4°BAvìB@ìBnÖ¯BèVìB#™ŸBå¯B‘ìBÕ?¡Bòi¯B·‚ëB„Ý¢BìQ¯BçºêBc`¤BÝ>¯B²ÉéBXË¥B±-¯B±ÓèB.3§Bï¯B*ÜçB š¨B•¯BüØæBüø©BO)¯B¨ºåBýA«BôD¯B¡~äBÝm¬BÚV¯Bñ,ãB‚­Bª^¯B£ÎáB¬†®Be¯BìgàB¯¯BÔ{¯BÁòÞB”a°BÛ¤¯BƒoÝB«'±B§Ä¯BÇÝÛBžÐ±Bsä¯B LÚB‘y²B ô¯Bî®ØB6³BVü¯B ×BU€³B8°B|dÕB”ï³B°BE»ÓBIT´BÍ$°Bï ÒBí´B¨I°B²[ÐBKË´Bé°BdªÎBà´B0Á°BúÌB°à´Bæ ±BóKËB°Í´BY±B ÉBož´B­±BúÇB"Q´B̲BW[ÆBÐð³B;~²B¿ÄBÂ’³B!‰7©Bs¤îB°qœB]ЩBïãíBÈÙBª:ªB íBPŸBˆªBJ[ìBûÍ BتBÁ“ëBdI¢B)"«BõÅêB­Â£B^«B ÖéB *¥Bš«B æèBg‘¦BDË«BîÒçBrà§B‘ñ«Bg±æB¾$©Bq¬BPŽåB$hªBù8¬BThäB…¨«B _¬Bã?ãB”æ¬By¬BC âB'®BŒ•¬Bù½àB3¯BŠÃ¬B¹^ßBz2°Bìõ¬BAïÝB-±B?(­B:oÜBOã±B¶M­B8àÚBs‘²BO?­B¹BÙB³B­BLŸ×B ³B?߬B‚ûÕB)þ³Bj¬¬B†WÔBŠk´B‘…¬Bâ°ÒBÓ´Bjx¬BÑBO5µBǬB[ÏB°µB‚¬B$ªÍBÄɵBŠx¬B2öËBcèµBzS¬BãBÊB!õµBÙ ¬B”ÈBvöµB꤫B:ëÆB,òµB|;«BwCÅBIæµBcÛªB§šÃBPĵBE©·BMûèBe?‡Bpž¶B‚‘èBü†ˆB•µBXèBØÛ‰BÞ‘´B_\èBv9‹BT ³B)ƒèBÞ¡ŒB±ß²Bâ´èB‚%ŽBöl²BÃäèB8ÇB²BVéBSc‘Bä±BRêB^ã’BƱBÐöêBÕ\”B—¸±BŠëBùö•BœÀ±BbâëB¹¡—B¯Ó±BƒìBÁQ™B€ó±B'ìB&›Bå²B ìBÛ¶œBÅê±B_ÔëBfžB«­±BÂvëBM  Bq±B¨ëBް¡Bü:±B™»êBëV£B±BÑ;êB,ô¤Bß°B{éBqy¦B‘ʰBÛèBâè§B¯Ç°BçBgG©BKÛ°B€tæB •ªBÅô°BPåBcØ«BÅ ±BÒ'äB‚­B{±B¿ïâBšH®B1±B¬·áB²y¯Bq±B‰oàB™°BޱBËßBŸ¡±BÐ ±B|œÝB¦€²B¾9±BÞÜB4³BT±BtwÚBóϳBfq±BïÚØB;]´B‘±B»9×BsÛ´B°±BÒ‘ÕBoAµB¬Ë±BãÓBÙ†µB&ï±B'1ÒBT®µB ²B·~ÐBQ¸µB¥]²BÎÎBü°µBª¦²B]ÍB µBõ²BøqËB ˆµB P³B ÊÉBAPµB^º³B*ÈBEþ´B¾/´B¯ŽÆB©¤´B®´BôÄB‚T´BV3µB(ZÃBÁ ´B ˵BqÊÁBE±³B/‚¶BQÀB7³B˜M·B¹è¾Bz«²Bd¸Bqƒ½Bh!²BÍü¸B#!¼BX¢±BÞõ¹BUϺB8*±BÓ»BƹB¶¯°B­Y¼B5†¸B*g°B?¾½B匷BKN°Bç-¿BT£¶B”W°Bù ÀBuÀµB8p°BÂBÞ´BŒy°Bî†ÃBø³Bbr°B'óÄB¸ ³BB^°BŽ\ÆB°²B1D°B¿ÇB±Bg°B“#ÉB4*°B>ݯBˆÊB±4¯Bת¯BíËBrC®B™i¯B)RÍB+X­Bï¯B0ÀÎBz¬BSÅ®BZ,ÐB——«Bpx®B7q¨B-‡íBx!BÚâ¨BºñìB᪞BÉ3©B>YìB3; B³©Bò­ëBÄ¡B&Ñ©B2êêBýA£B!ªBýêB鯤BÆTªBcüèBY¦B•‡ªBçÖçB[B§B*´ªBu«æBÀ|¨B¿àªB€åB&·©BS «B’TäBŒñªBð,«B ãBH$¬BÜI«BÎÖáBB­Bús«BÖvàBA®B%¥«B~ßBª&¯BOÖ«B%–ÝB8 °B³¬B{ÜBE×°By"¬B+ˆÚB戱B`¬B%îØB»²B`Ì«B,O×BÚ•²BQƒ«Bð°ÕBæ ³B4«B±ÔBY³B«ôªB¡sÒB¬ö³BáתBÏÐBsk´BšÔªBš(ÏB¹Ù´BSºªBïzÍBU%µBY‡ªBÊËB/KµB~5ªBÓÊBY_µB È©BúvÈBþfµB=J©BÜÔÆBú]µBÞШB2ÅBóCµB+-«BÁÌâBÀ€B±5«B“êáBñ4‚BÒ8«BÌXáBÎσB5«Bÿ&áBÅ€…B-=«Bº,áBz4‡B[[«BwaáB äˆBû£«BŽdáB°‘ŠB¾Û«Bo[áBËAŒB*ù«BúIáBAôB8¬B®3áBU§BÝõ«BQ?áB¼Z‘B¼«Bœ€áBÊ“B³BR5êB@ަBÚþ²BžÐéB”1¨BDê²BøèB’«©BÚÿ²B!ßçBÔøªB° ³BWíæBºc¬B²³BÝ,æB÷ê­Bõ²B‹åBŒ¯Bìò²B;ÒäB| ±Bîù²BcÝãBws²B#j×£Ba\àB<~BCÀ£BMýàBœ²€BnÑ£B,gáBY‚BsÚ£B¼¿áBÆ„BvÝ£B âB‡°…B‡¤B’âB M‡B­v¤BœIãBlʈBG¥BªäBê4ŠBòŠ¥BkÍäBq¤‹B…¦BLåB‘B”—¦BfZæBY|ŽB¢þ¦B³9çBYäB¢B§BB%èBM‘But§B+ßèB6Ô’B]£§B¨ÉBw²µBM²B•ÈB ]µB±²B fÆBý´BƳB•ÉÄBÖž´BV³Bû-ÃBgA´BôBGžÁB1ʳB¬²´B#ÀBx7³BFjµBô¶¾B›²B¼+¶BPK½B» ²BDú¶B˜ä»Br~±Bí·Bñ•ºBcò°BCð¸BZ¹BþX°B -ºB@A¸BKð¯B³Ž»BòF·B2Á¯BU½B³c¶BæÅ¯Bx¾B«†µBvã¯BÇé¿Bˆ ´Bùø¯B§YÁBi·³Bt°B|ÇÂBÉʲB˰B»,ÄBŸÑ±Bwó¯BoŠÅBéΰBþׯB¾îÆBQÕ¯B4¾¯B–XÈB•â®BŒÂ¯B;ÃÉBãñ­B§Ö¯Bi.ËB/­BYÒ¯BØ“ÌBý ¬B$«¯BôÍBï «B䘯B®BÏBûó©BŠª¯B‘oÐBo½¨BTä¯B³—ÑBµ„§Bß)°BäÛÒBve¦BA\°B‰;ÔBe¥Bäs°B#V®B™±ãBô=”Bnn®BJÕäB™•B““®BiîåB2Í–BuÁ®B.ëæB¶-˜Buò®B,ÂçB쥙B¯BžnèBÝ4›Bó*¯B ôèBÓœB*¯B=:éBZžB'¯Bh7éB¥4 Bsü®B@ßèBËÞ¡Bî®Bì4èBío£Bä®BŸVçB ç¤BpÚ®BSxæB,^¦BYÍ®B6~åB\çBÝÇ®Bý|äB´#©B¾Ò®BmãBÍxªB8ò®B¯FâBr¹«B¯B4áB/ܬB›¯B‡§ßBpå­BG!¯Bø@ÞB£Þ®BÙ2¯BÑÜBQɯBìQ¯B)UÛBÓž°B[n¯B¥ÈÙB(T±BE€¯B.ØBØè±B܈¯BŒÖBh²BݯBìçÔBQà²Bç¯B¾AÓB_Q³BÞŸ¯B –ÑB‹ª³Be½¯BëæÏBì³B×è¯BÏ5ÎB ´B^"°B¯„ÌB•#´BÛf°BÕÊBÁ´B¬°B 'ÉBtó³BEû°BÛÇBȧ³Bq`±B‘áÅBìG³BG=òªBN|âB×Õ€BÔòªB·ŽáB¬C‚BÕîªBr÷àBŒÜƒBäªB`ÁàB㌅BàæªB»ÇàB§@‡B±éªBÎàBkôˆB"«B áBª¢ŠBV:«BoáB"HŒB›h«B*®áBëôBöŽ«Bç¿áB©¦Bÿœ«B›ÛáB_Y‘BBâB‹“BLP«B#~âBЬ”B²«B«ãBS>–BÙµªBjÜãBsº—Bx§ªBwºäB™1™BýÕªB˜åBJ¦šBº«BQMæB”.œB)«BïÁæBÑÑB§'«BRøæB?‚ŸB¸C«BÚÄæB2¡Boz«BØ(æB‰Å¢B›¶«BÄGåBF6¤B¼í«BAFäB ’¥BÚ¬Bû0ãB¡ß¦BA@¬BSâBÁ'¨B¯W¬BjãàB+`©BXg¬B™ßB;}ªBNl¬B»7ÞB¿}«Büv¬B ÍÜBÖp¬BÛŒ¬B‡XÛBàS­B禬B1ÚÙBš%®B¯±¬B¡SØBé®Bo¨¬BëÄÖB…›¯Bb“¬BÄ0ÕB5@°BEu¬B™ÓBqÚ°B‡X¬B ýÑB i±BK¬BÿZÐB©ç±BóM¬Bá³ÎB*U²Bw<¬BÍB»’²B¬B…PËBŽœ²BeÑ«B¡ÉB\‡²B~«B¿õÇB b²B/«BOÆB0+²BÔ¸ªB««ÄB4ç±BKªB™ ÃBæ–±BõÉ©B3vÁBÕ8±B…'©Bôï¿B̰Bým¨Bw¾B*V°BÀ¥§BÁ½BׯB)ΦBý§»B­L¯Bì¥BŒWºB{«®BÜ¥BݹBú­Bb¤BvÕ·BLN­B" £Bç›¶BQ·¬BiÙ¡B0zµB–H¬Bƒ¦ B[´B:Õ«B¶µBe¨ßB¸íƒBÙ˜µBj€ßB¸ž…B®jµBž”ßB¡O‡BN*µBžößByóˆBýÜ´B~àB—ŠŠBT†´BÔÈàB+/ŒBd#´BRáàBåÖBI¤³BtüàBÙvB&.³B\‰áB&‘BãÆ²B.QâBÐw’B²B¯ùâBÑ”B-|²B xãB´¦•B b²B§äBc8—BàE²BƒüäBx¯˜B—>²B»çåBÀšB}E²B¶£æB%¨›BtP²BA/çBEBd²BÀ‰çBìîžBÝH²B@qçB5¡ B!²BÄñæB+@¢Bsõ±BY6æBtÇ£BÏűBhhåBâD¥BD›±B±ŠäB º¦B¨±B!‚ãBû¨Bê´±BƒYâBJT©B4˱BáBë{ªBzϱBH¶ßBz«Bõþ±BD¦ÞB^̬Bû²BGAÝBÞÇ­Bb²B‚ÐÛBk±®BÇ"²B½_ÚBøš¯B'=²BºÞØB¼g°Ba²BbP×B±±B–ƒ²B±³ÕBV£±Bc¢²B~ ÔBæ²BrIJBxZÒBU=²B¹õ²B©ÐBc[²BÆ6³BÎøÎBk\²B©Ž³B©NÍB!2²BH0ä³B0âáBõBÁa´BËáBÃ~‚BÑ“´BO”àB „BD´B’aàB‡Ë…BcZ´BÑàB{‡Bh%´BJ.áB/‰Bûç³B¡çáB!”ŠBÜ–³BØcâB.ŒBY(³B¯¨âBÎBÓ¼²BDãBueB—a²BÖ®ãBVôBÎ ²B)EäBtˆ’Buò±B½ÔäB!”BÔÒ±B˜måB¸•B/αBí0æB{>—B—ñ±B`çBT³˜B²BðÕçB™5šB9²BìfèBÄÏ›BK²BoÇèBoxBÃ7²B•ÓèBª+ŸBk²B"èB6Ø BŽÞ±Bð!èB]{¢B髱B°‰çB¹¤BBy±BqñæB¦¥B8E±B/*æBr&§Bä%±BAåBΕ¨Bs%±B;äB™ò©BfA±B®ãB½:«Bi±BœëáBap¬Bë~±BÝ­àBëš­B-|±B ^ßBê±®B¯ƒ±B¹ÞBË˯BB™±B»ÜBêÚ°B·±B®NÛBÇɱBÂбB<ÈÙB%Œ²BÖî±B4ØB/³B²B‹•ÖB:¶³B|-²BHíÔBë´B,L²B¿=ÓB Y´Bçz²BEŒÑBÈy´B”»²BåÛÏB­z´Bå³B%-ÎB6l´BµU³Bw€ÌBƒO´B±³BÓ×ÊB6´BË´Bé5ÉBÆÕ³B>•´B©™ÇB¤‡³Bê µBÄÆBâE³Bý´µBtiÄBp ³B6L¶B÷ÓÂB~вBÁù¶BYMÁBÕu²B¸»·BŸ×¿B†²B…¸B˜h¾Bò„±BKY¹Bjü¼B{±B×IºB]¡»By£°B•Z»BbºBÉ,°BgмBî>¹BÓ¹¯B<Ú½B1¸BAw¯B:¿Bÿ0·B^¯BNœÀB93¶BüV¯BÂB9µB:¯BÜaÃB7@´BF¯B¼ÄBzA³B«¼®B<ÆBsK²B~®BcÇBEZ±B=3®BÂÜÈBg°B´Î­BgEÊB¹~¯Bc‚­B¸ËB¶¢®B¡C­B31ÍBîÏ­B ­B8­ÎBß­B³°¬B<$ÐB_r¬B\¬B~ÑB9Ü«BZ«BX÷ÒB?=«BKŸªB-Ø(³B¸|áBà×BÁÔ³BÉ‘àBª0BP´Bá¦ßBÞŠ‚BR‰´B²÷ÞB„B˜z´BÚ¹ÞB8Å…BæN´Bð¹ÞBÙv‡B¾´BxçÞB‰#‰Bóº³B˜#ßBËŠBµ_³B®8ßB¦tŒBö ³Bv5ßBS ŽBø¯²B.ßB@ÊBZ²B—“ßB˜i‘Bƒ ²B×1àBTø’BÞ±B`ÄàBa”B8ͱB LáB$.–Bá»±BáÔáBæË—Bƒ˜±BŸ‚âBHZ™B´Z±B7fãBBÉšBï±BÏhäBÃ#œBÖ±B AåBhžBÑ*±B¨ÔåB8ŸBXB±B])æBõâ B1T±B_æB%–¢B¿N±B${åBý+¤Bñ/±B½±äBŽ­¥BA ±B³ÖãB%§Bƒô°BæâBX¨B½ÿ°BïÑáB­á©B±BàB{«B "±B'MßB,¬B<1±B„ûÝBp@­BÜV±BíÐÜBŒ|®B'‡±BŨÛB{¹¯BŒ³±B‚WÚB9˰BSÖ±BÛØBŸ±B¸õ±BÿE×B @²BÀ²BǤÕBò¾²B•-²BªùÓBö³B¡P²B|IÒB£O³BWƒ²B ˜ÐBk³B¦Ä²BÙçÎB¢k³B‹³BJ:ÍBT³B?n³BÁ‘ËBÏ"³B@׳B9ðÉB=ײB3M´BƒSÈB¹„²B*¼,´BãB©3€Bˆ»´BÕâB†BµB `áBG ƒB¥µBÿàBÿ±„Bþ´BUþàB£d†BÁ´B/áBõú‡Bކ´BÜŒâB½Y‰B_J´Bô^ãB4ÓŠBVû³BÏáãB~kŒB ˜³BØ=äBÒ ŽB <³Bª¦äBÒ¦BÚõ²BeåBÃE‘B–²²B¿‰åBKå’Byu²B æB‹ƒ”B¦T²BSŸæBB–Bü`²BôaçBJŸ—Be²B0èBÙBɱ²B½ÄèBµšBAȲBz#éBó]œBÜòB FéBVžBÜ¢²B.'éBÇÁŸBn²BèÁèBnf¡B}3²BIZèB» £BW÷±B|ÇçBÈŸ¤B¾¾±B*ÿæBó¦B>¥±BOæB ‹§B ­±BÛåB'â¨BÂбBGÞãB$ªBø±B «âB&X«BG²BùxáBJŒ¬B1²BŠ>àBº­B²#²BrñÞBuÔ®B}1²B@´ÝB °BëH²B hÜBc±Bº`²B±úÚBˆ²B™|²B„tÙB#˲BR¤²Bâ×B“p³B‚ͲBCÖBšó³B#ó²B“˜ÔBŒK´B³B–çÒBËw´B9V³Bw6ÑB‰„´B¢³B^ˆÏBq´B6©BÚžíBl‚šBúë©B?ÿìByÜ›Bñ©ªB#DìBR5Bö*«BfŠëBªžBE{«B°æêB6 B:º«B>LêBèÈ¡Byñ«BtéBM£Bq¬B¿ŸèBY¸¤BÝ:¬BÅŒçBÌ ¦BçT¬BpæBzS§B­q¬BQåBÿš¨BÖ”¬Bò,äBXÝ©B ·¬B­öâBx«Bx̬Bý¨áB9'¬B<Û¬BpGàB"'­B=õ¬BxÙÞB®Bž­BT_ÝBì®Bã3­B’ØÛB­¯B6­B„EÚB9V°Bn­B‡©ØBøä°BDõ¬Bä ×Bm±BSʬBTmÕBHð±Bܨ¬BkËÓB{k²B"ž¬B%ÒB\Û²B ¤¬B¦zÐB;³Bxœ¬BZÉÎB t³BK€¬BeÍB ‚³BvH¬BdËBÊw³Bøö«BŽ·ÉB^³Bxš«B`ÈBv7³B<«BçfÆBM³BÖªBÃÄBÞòB¶YªBø(ÃBÒo²Bo¹©BŠ ÁBµ²Bl©Bè&ÀBF“±B/8¨B<¸¾BñB_§B:V½B­°BHz¦Bˆ¼BÎø¯By‹¥Bd¾ºB´S¯BW’¤B{¹Bòº®B¿†£B<¸B69®BŸi¢BŠ·BVÄ­B’=¡BëݵBÜ]­B7ýŸBS»´Bk+­B²°žB £³BþF­B%WBV£²B‰­B0÷›Bþ¯±B“Ø­B•“šBLº°BF ®Bù/™BœÄ¯Bø=®B3Ì—BAË®B2W®BÜl–BÊ­B _®BQ•B'ìBþ`®B¯“B‚Ç«Bwo®BÇJ’B”ΪBz®B4]…®B\>âB€B= ¯Bï áBF‡B¿¨¯BBBáBóƒBDX°BS5áBd „B;±B·áBÀ"†Bþ–±B~oâB.w‡ByÁ±Bó‡ãB¯ÂˆBbž±BÂ~äB¸(ŠB‹5±BZåBζ‹Bî›°BÝ`åB;FB@+°BšÎåBÇÜŽB¬Ï¯B°^æBômB9ˆ¯B&çB!ò‘B“k¯BCøçB?g“B„¯BëèBÖДBò¯BJµéBHR–B˜¶¯BÓRêB è—BgÓ¯B[àêBXƒ™Bø¯BÌjëB›B°BÚëBfÜBSú¯BúëBMužB%à¯B¬ìB4' B}™¯BÚéëB™Ò¡B‡_¯Ba‰ëB®w£B½@¯BìêB" ¥BA.¯BêB¾|¦BǯBâ éB%å§B ¯B‚èBL©BÊþ®B‰çB ²ªBü®B„æBß ¬Bù¯B¹éäB»K­B²¯BØ¥ãBûo®By!¯BûNâB~¯B)¯B±îàB€°B\4¯B¼‡ßBˆx±BzL¯B§ ÞB„N²BÐj¯Bù}ÜB³B«‚¯BäÚBÉ—³Bþ¯BáCÙBU´Bà¯B9ž×BKŽ´Bš¯B†õÕB-õ´BO©¯BHJÔB:PµBw¼¯B£šÒB”’µBPÕ¯BäçÐB+¹µBêú¯B²4ÏB÷ʵB:5°BlƒÍBò̵B°BTÕËB)¹µB|ȰB•(ÊBJеB²±BœÈB¯?µBF]±BiÝÆB§Û´B¼½±B6>ÅBäz´B—,²Bý¡ÃBì´BµBÓ¦íBüYŽB“Ó´BI˜íBéãBç2´B¥“íBæx‘BÖʳB°ÄíBE“B+‚³BÌ®íBmÊ”Bš]³B©líB­w–B-U³B +íBz&˜By`³B~íìBÎÕ™B_‡³BvƒìBÏz›Bgy³BNìB— B™T³B£§ëB™ÄžBë³BŠ"ëB_ BÔ²B®ÎêB‹¢BŒ²Bœ§êB”±£BçB²B‰mêBH[¥BÀ²BÏÄéBàê¦Bšê±BéByz¨BëݱB]-èBVç©Bð±BSçB+7«Bú±B”æB —¬Bïþ±B!åBA®B²B;)äB5g¯BB²BH ãBÜÁ°B²BsìáBK÷±BβB¡•àB¶³Br²B ßBˆÒ³BV,²BÒvÝBù^´BH²BÑÛBZδB¦p²B‚.ÚB{EµB3¨²B ØBžÄµBDâ²BæîÖB{9¶B (“¨B§âB¿„BkY¨Bî&áB‡ê‚B‰.¨B¦¾àB”„B ¨BȼàBëB†B;[¨BÕ©àB_ñ‡Bnì¨BOjàB:‡‰B´|©B‡!àBÞ‹BÀä©BbîßB鿌BFªB.ãßBpŽBj ªB×ßB$BŸ½©BaïßBfБBGP©BŒ!àBKs“BZñ¨BdàBv•Bǧ¨BسàBš½–B™¨B÷+áBf`˜BàŨB,ÜáB¨ì™Bs ©BŸâBl›Ba$©BRãBBP;©B•‡ãBû²žB’©BGžãB"e B;©Bü}ãB¢B½0©BîâB³±£B¥\©B†0âBý7¥B«‰©BbTáBÑ­¦B{´©BhMàBV¨B–É©B(ßBD%©BÍ©B< ÝBG"ªBÖÕ©BZ7ÜB«B²è©BcÅÚB‚ÿ«BMü©B»JÙBqجBÁû©BöÊ×B ©­BÞß©B›GÖBq®B*Œ=¹BìðèBc±„BE¤¸B$%éB÷E†B×µ·BèøèB¾¯‡Bo¶¶BÀ›èBò‰Bè½µB9fèB‹eŠBQÍ´BqfèBЋBtö³Bæ~èBËJB^Z³BÅ¡èB$àŽB¤ÿ²BãÐèBчB¹²B‡ZéBn’Bb²Bf@êBï“Bv²BR ëB•Bq²B1ŠëBã±–B²BFÒëB_˜BJ—²B æëB0šB|¯²B†ÀëB·Ã›B®²B±‡ëBÕsBx†²B¢0ëBŸBG²B)½êB–¼ B ²B²nêBðd¢BÃɱB°#êBr ¤B‹±B»žéB}¨¥B¤m±BÅÐèBb'§B‡c±B‘ÖçBŒ¨B²s±BÂæBÄÝ©B葱B­ åB#«BE°±BÊ‚äBdk¬B¿±B‘`ãBý°­BÞº±BŽ+âB9å®B㩱BààB¾°B,«±B'|ßBÛý°Bw¼±BôþÝB€Ò±B7Ö±B·qÜBª†²BÇö±B€ÜÚBû&³Bé²B.BÙB¯·³BkF²BÇž×B‘,´BDg²BòÕBZ{´BÙ²Bã@ÔB#¦´Bn¸²B¶ÒBíдBwñ²BkÞÐBÜ´B8:³B˜/ÏBŠÍ´Bʇ³BòÍB·´B01 ­BbãB‚BEß­B5ãBîI„B—®BÂ*ãB1ú…B}K®B*ãB¡ª‡B;®B)>ãBZ‰Bß®BÿTãBÖ ‹B­N®BS[ãBÕ¾ŒBÕ®B5mãBnoŽBI®B®²ãB¢Bô,®B4äB'½‘B2®BŠåBS,“B*E®B=3æBü}”BÄg®BÑEçBDÏ•B_Š®BeXèB —Bű®Bõ?éB˜BYÖ®B×÷éB¬šBðø®B<¤êB ¨›BدBjSëB)6B¨/¯BæëBPОB¯B©!ìB9~ BØ®®B{ùëBþ&¢B›†®Be„ëBóÈ£BO|®B]ÊêB3S¥Böx®B!ÕéB÷»¦BÜu®B`ØèB‰¨BKr®BY×çB €©B\m®B¡ÕæB àªB•u®BCÂåBn2¬B:†®BÚ–äBo­Bþ˜®BÝUãBÔ–®B—¥®BâB詯B±³®B¥àB¥®°B7É®BU;ßB†¢±Boé®BN¾ÝBÄu²Bµ¯B§-ÜB,"³B¯BF’ÚBü´³Bá¯B,ðØB74´Bf ¯B°I×Bû£´Bú ¯Bˆ ÕBU µBܯB+õÓB¤dµBO%¯B*EÒBÎ¥µB%;¯BY’ÐBT͵B)_¯B3ßÎBãµBb™¯Bé-ÍBÔäµBç¯Bf€ËBé˵B¼'°BJÓÉB—µB½b°BÙ)ÈBÄEµBT¤°Bö…ÆB}ß´B W°BQmâBC0—BH°BgãB®•˜B+9°B¿`äBû™B™1°BºråBŸN›B"D°B/TæB…ÜB0b°BëçBžOžB¼z°B/açB‡ùŸBµ‰°BónçBÞ¬¡B[°BçBX£BCt°BsæBÞê¤B X°BùžåBžf¦BX8°BL·äBÐÖ§BZ.°BºãBï9©BQ>°BÈ¥âBJ‹ªBÈY°B‹táB«Bƒp°Bí)àBRÞ¬Bðr°BÊÞBØà­B‚°B°sÝB€ï®Bõž°BöÜB?û¯BÏðB!²ÚBí°B±á°B2,ÙBÙ¯±BÜ÷°B“×B³G²B ±BšñÕBÊDzB9±BvIÔBû/³B2±Bö›ÒB*~³BöW±BsëÐB‹±³Bj‹±B:ÏB¢Ë³BÔʱBŒ‰ÍB¶Ï³Bî²BÛËBü»³B7n²Bž1ÊBó³BŠÑ²B1ŽÈB-E³By@³BwñÆB‡é²B ¤8ºBxqßB’"ƒB±ï¹BâßBZÁ„Bh¹B DàBÒS†B–͸BYÜàBÿ͇B3¸B§táB*H‰B_•·BÏGâB¨£ŠBé¶B ãBïô‹B"¶Bª äB¡(BñEµBÕ'åB.!ŽB¿|´BÄ æBæYB¯å³B§tæBåBÔ”³B ¼æBa‹’B¬I³B˜&çBW+”B¶³B¥ªçBÅ•B$زBMèBFW—BnزB’éBZâ˜BŒû²B¼éB¿lšBê³B-+êBZœBÄ/³BåSêBŒÂB-@³B¹TêB vŸBS³Bî7êB(¡Btm³B6êBÌÙ¢B4a³BêBo¤BO³B2êB/;¦BVÔ²B›ÊéBWá§B`¸²B[éB¯b©B‘IJBòçB¹ªBRÔ²BÄòæBp¬B¾Ò²BzæBj—­BbɲB\eåB"¯B6DzBE¥äB˜©°Bè̲B¬ãB¢²B"øQ®B^ãB6‡”BWh®B>+äBÖÊ•BµŒ®B]DåB†—BÁ¸®BìFæBs˜B…è®BË&çBGæ™B ¯B©ÒçBwu›BT¯BÔJèB BÀ"¯BªèBbÈžBƒ¯BêeèB){ BX¯BnñçBé¢B2ý®Bž7çBK©£B«ô®B©SæB¥Bç®B+[åBZƒ¦B'ã®BtXäB â§B¨ñ®BxDãBP4©Bg¯BÑ âBccªB&¯B+ÑàBu’«B©!¯BÆ{ßBd¢¬B²%¯BxÞBÞž­Bƒ.¯BÆ®ÜBó”®Bb@¯BÀ=ÛBí}¯BQY¯Bï»ÙB^I°Bçq¯B*ØBó°BI„¯BÖB週BJޝB[ëÔB²Bì¯BÇEÓBVt²BBå›ÑBÖ²B_±¯B îÏB»%³BcÓ¯B›>ÎB<_³Bö°B@ÌBÂ|³BáBHŠBvªB ¤áB笋Bf´ªBDçáB9XB°ÕªBD&âB.Be˪B®¨âB¦BãªBRãBß5’B­{ªBéäB]µ“BbPªB’ÿäB%(•Bo3ªBÙåB%¡–BÏ,ªBÚæB÷,˜B/&ªB¯FçBɸ™Bœ%ªB•ÔçBU›B 1ªB1AèBþúœB3ªB;¶èBåžžBKªB4êèBñN Bz‹ªB=œèBâö¡B áªBwæçBßy£Bé(«BðçBç¤Bô^«B€ùåBå<¦B͈«BÖäB§B­®«BÚ¯ãB.¿¨B6Õ«B‰âB¹þ©Bõ«B¶QáBÿ.«B>¬B†àBQG¬BÛ ¬Bø ÞB7F­B #¬B1ÝBœ0®B5G¬B´´ÛBc¯B¬d¬BP-ÚBPįBÖb¬BUœØBÞq°B%>¬Bà×Bš±Bœ¬BÁiÕB6˜±B{Ü«B÷ÎÓB“#²BN°«Bà0ÒBÒ§²B}›«B¶ÐB¬!³BG›«B6æÎBµ³B‰‚«B›6ÍBýͳB M«B)…ËB]Þ³BAûªBØÉBÆÖ³Bœ˜ªBÙ.ÈBpijB-ªB¦ˆÆB椳B¹Ä©BƒâÄB.{³B"]©B2=ÃBbH³BÓݨBã¡ÁB[ÿ²Bf8¨BNÀBQœ²BÏz§B`£¾B¢&²BØ«¦BR8½B£©±BÇÇ¥B Û»B¢*±BHÖ¤BµŒºBq°B€Ú£B­H¹B‘ °B×Ù¢Bã¸B:‚¯B~Ó¡B~¾¶BÖ¯B µ Bì…µB¢®Bä~ŸB\´B¾[®BP'žB3R³Btr®B‚ËœB~Z²BÉÆ®Bl›Bcs±BF6¯B šB ްB8¦¯B½ª˜B+ ¯B°BT—B:ž®B'L°Bä–Bþ~­B‹°BBÚ”BþV¬Bý̰B¶‹“BWJ«B¼±B!'¸¥BügàB5æ‚B1£¥B“àBi—„B…š¥B²¾àBøH†B°µ¥BÿáB‘õ‡Bâò¥B|láBq™‰BÜY¦BôáBž*‹B ߦBV”âBJ©ŒBKo§B=ãBI ŽBÕð§BÚßãB7ŸBee¨BKäBÈ‘B2¸¨BoTåB´˜’B]بBs!æB:”BâΨB^ÞæB$¡•BwÔ¨BýWçB¶C—BÄæ¨B‰ŒçBùó˜B©BKeçB±£šBL©B‘÷æB¼EœBÎo©BÁƒæBuèB©†©BœæBÝŽŸB‰­©B•nåB¡¡B þ©Bì€äBP‚¢B[[ªB×rãB:Ì£BᵪB[RâBï¥BòªBtáBg5¦B† «BÂÌßBQJ§Bõ"«B|ÞB:_¨BÚ&«B0ÝBM\©B$,«B²ÛBâVªBP8«B‚FÚBßG«BD«B{ÓØB.¬B‚B«B®Z×Bÿ ­BØ-«BÜÕB~Ý­BÀ«B/WÔBU¡®B3üϪB×´âB¿€B ̪Bë¾áB\'‚BêB˜áB„»ƒB'´ªB•ÝàB­j…Bf±ªBýààBy‡B¼ÉªB`áBE͈Bz÷ªBìáBsŠB*$«BÜËáBJŒBHL«BÑîáBÓÎB0^«BŠ"âB3BšJ«B>£âBB‘BJ&«BMBãBš³’BaýªB0 äB4”BLΪB‚õäBœ¡•B⾪BÓÍåB—B°ÏªBÍ~æB)ª˜BÒìªB çB4FšBý0«B:ææB ó›Bòl«B6’æB’šB¶–«Bê-æB°@ŸBü¼«BÇšåBJÙ BCã«B¤åBãq¢BÉ!¬Bþ)äBLä£Bna¬Bp+ãBÚ@¥BÙ—¬BâBÿަB9º¬BtúàB×§BŠÆ¬Bï½ßB|©B—ͬBBeÞBuªBÓ¬B‚ÿÜBÞ «BBÞ¬BL”ÛB$ü«Bïñ¬B¢!ÚBaâ¬Bb­BØ¥ØB»¹­B„­BS ×Bx®B5­BH’ÕB—3¯B?ö¬BÑýÓBbدB¡ß¬BIdÒB o°B6Ò¬BìÄÐB.ö°BýϬBc ÏB$m±BÚǬB;sÍB—¿±B)®¬BÀËBà±B—~¬BÑ ÊB{Ô±Bm5¬Bâ_ÈBO¹±BHÕ«By¹ÆB±B[l«BºÅBì2±BÙýªB€|ÃBÖ°B”ˆªB»åÁBáj°BIó©B¸\ÀBRõ¯B1D©BÎÞ¾BR¯BN‚¨B2l½B@¯B,´§Bª¼B={®B ܦB‰­ºBîÚ­B<N5²B$ÑïBº–BY#²B  ïB—B‡²BóŸîB3C™B³ ²BÎ[îB¤ñšBåü±BwëíB‡–œB ˱BÅjíB4žBÑw±B2ðìBòÍŸB‰3±BÔ†ìBWo¡BB±BÞìB„£BWذB¯žëB\²¤Bܱ°B‰êêB=¦Bš°BL êBæ²§BE‚°B*éB=(©BÝx°BË.èB¾ŒªBÈr°Bj,çB:ì«Bl°B"æBÀE­BŸj°BÙåB'®B±q°BÖËãBTÀ¯BŸu°B¯€âBÏܰBY}°BK"áBMá±B銰Bö²ßB4ͲB, °Bá*ÞBÏŒ³BÙµ°B ‘ÜBë"´B@˰B<ñÚBЧ´Bœâ°BºOÙBî&µB-ý°B¬×BùµBù±BõÖB½ÿµB7±BTÔBF¶BVS±B"¢ÒBn¶BŒs±BQîÐBÔz¶B)¡±B‰;ÏBsv¶B+á±B:‹ÍBŠj¶By.²B‰ÝËBÚS¶B•€²B3ÊBä!¶BDܲBÅŽÈBDÔµB&E³BAñÆBuµBuµ³B\UÅBpµBa+´BºÃBe¾´B±´B1&ÂB Z´BSµBº¦ÀBÖ³BжB/<¿BŽ=³BܶB—×½Bk§²B™½·B|z¼Bt!²Bû¡¸BØ »B‡—±B{£¹BšÛ¹BϱBƒÝºBA¼¸Bа°Bé>¼BÀ·B£Š°Bã±½BØÛ¶Bí’°B¤,¿Ba¶Bǹ°B¦ÀB—2µBÏà°BbÂBiZ´B¸ù°BŒ–ÃBp}³Bm±B( ÅB‚˜²B® ±BmwÆB‘¬±Bø ±BÔãÇB¸½°Bf ±B6QÉB„ЯB–±B…¿ÊBžä®Bá±B+ÌBéö­Bñ°B£ÍBµ­B]£°B®ÝÎBô«Bós°B2$Ù·BäBJ‚B^”·BM‰äBÊŸƒB˜O·B‚ýäBI>…B%õ¶BujåB‘Ú†BضBxåBUˆBÓµBvåBݰ‰Bm ´BbåB—‹BÔþ²B%¤åB ]ŒB{á±BÀåBǤBÊܰB_ìåBÝþŽB˜°Bô#æBðBò‹¯ByræB’B¯B÷éæBµ¥“BÚ®B¸çB&"•Båù®B²ÄèBÏx–B™¯B §éBüë—BA<¯B ZêBx™BR[¯BùêB ›BׯB™›ëBÝŸœBö¢¯BW:ìB^4žBˆ¯B•ìBÜÝŸB/1¯B¶ŸìBˈ¡BØì®B FìBÐ-£B×ЮB?ªëB ĤB¢Ê®B°ÈêBP9¦B`Á®B0ÐéB½Ÿ§B¹®BÚÓèB…©B±®B>ÕçB±eªB©®BöÒæB6Å«B®®Bß³åBÖ ­Bm¹®B|äB?®BÅ®BÕ.ãBòX¯B ήB“ÔáBÖb°BæÛ®BqàB`±BŠï®BþÞB±E²BK¯BÔvÝB³B˜¯BgßÛBÅ£³Bt!¯BÉ@ÚB°-´B•¯BØBA§´Bº¯BqõÖBµB¾#¯BØJÕBîqµB>2¯BDÓBtÁµBlC¯B‘ëÑBxõµBýY¯BÈ7ÐBضBk¯B—„ÎBZ¶BäÀ¯BÔÌB~¶B> °B…&ËB°öµB¨J°BgzÉB¹µB†°BéÒÇBo^µBÔ˰B†/ÆBÛø´B,¦¡±BÄáBHBýM²B\QàB¶_‚B9¥²Bƒ¢ßB{åƒB§²BÖ^ßB ”…Bˆ²BaVßB·F‡BˆR²B0†ßBôˆB ²B(ÔßB•›ŠB{Á±BMúßBIGŒB¶{±B¡õßBuõB8±BìÛßB<£B ÷°BÐßBR‘BzܰB2àBäù’B(ɰBœàBN ”Bí±°BèáB C–B³š°BË…áBóæ—BÃ{°BpDâBòm™BBW°B~:ãB\ÔšBø>°B4EäB×,œB0K°BƒåB>«BÄo°B_›åBÊHŸB¶°B¼ÖåBI÷ B¥¤°B‰¦åBü§¢Bº£°BvòäB5¤BV°B„$äB µ¥B/w°B†@ãB(§B¨c°BtLâB ‘¨B™h°BÛ/áBÒÛ©B±t°BóïßBš«Bf{°BÞ’ÞBÝ ¬B‹°BïAÝB ­Br«°Bä ÜB«R®B×°BžÔÚB€¯BÇþ°BmmÙBÍu°B±B‡ã×B0±B[8±B¯GÖBÀ±BiL±Bÿ¢ÔBî4²B½\±BC÷ÒB{²B'z±BHÑB%ϲBÚ£±B—ÏBéú²BܱBîåÍBd ³B&²B87ÌB©ü²B‰~²BlÊBEвB–ã²BêÈB5‰²BwS³B=MÇB`/²B±^¯B!ïâBÄÕ”B k¯BØãBPF–Bˆ~¯B|ÖäB+¨—Bõœ¯B ÔåBÄ ™BÙÀ¯B¹¬æB‘‚šBÅÞ¯BˆLçBœBÐô¯BH²çBV¾B÷¯BªÇçB qŸBÃë¯Bè~çB9¡B0߯B(ãæB?¶¢B—Ò¯BÎæB´5¤B쾯B´-åB»§¥B߬¯B98äBá§B‚¯¯B›/ãBÇj¨B¼¯BÿáB6£©BÑÆ¯BŸ®àBC¹ªBé˯BMßB—¹«BrدB)÷ÝBÒȬBÐà¯B¡ŽÜB(¿­B|õ¯B ÛBŠ›®Bñ°BÆŒÙBžW¯B~1°B¬ö×Bö¯B P°B‘`ÖBŒ”°B3b°B%ÁÔB±B—i°BƒÓB;бBÔu°B-pÑBÚé±B²‰°B[ÃÏB?<²Bbª°BŽÎBx²Bß°B7bÌB²BÚ%±Bì²ÊBA†²Bwx±B3ÉB¡a²B*Ÿä«BnÏâB’B%¬B³"âB§‚BP¬BÅáBóP„B+¬B´áB†B6H¬Bï¾áBȶ‡Bs¬B‰äáBÔf‰BA”¬BV âB¹‹BÆ¢¬B“âBËŒB~¨¬Bw âB•~ŽBﵬBçâBü1BèÆ¬B HâB²â‘BȬB‹ªâBN‹“Bt®¬B¸bãBÀ•B¡š¬B³ZäB#|–Bs®¬BLåBéæ—BîÙ¬B°(æB”\™Bkÿ¬B‡×æB5êšBž­B˜UçBªŠœB».­BàçBí9žBëT­BtJçBWæŸBvq­B½æBü¡BÁŠ­B[ðåBߣBù ­B*åBKo¤B篭B4äBÎ¥B@µ­B&öâBà'§Bj¾­B¾ÉáB\d¨BÆÆ­Bï{àB¥}©BÓÊ­BßBíyªBäÒ­B<¯ÝBªp«BTà­B BÜBÛ_¬BÄí­BÜÔÚB O­BIÿ­Bø]ÙB.®B®B×Ú×Bø®BD$®B.KÖBÕ§¯B '®B_²ÔB/B°Bë®BúÓB…ɰBö®BÁoÑBºD±B…®BwÉÏB`µ±Bx®B¢ÎBF²B’$®BbmÌBÕL²B*-®BÞ¸ÊBËb²Bú&®BìÉBøm²B7 è©Bå:ëB°™Bƒ”ªB¸°êBº'›Bf:«BÕêBJ™œB!²«BU~éB["žB¬B{éB_½ŸBÒ6¬BYxèB¨V¡B£l¬B8ìçBñï¢B°—¬Bé+çBôt¤B>¸¬Bà<æBhà¥BÚάBø-åB·5§B9â¬BËäBŠ„¨B%û¬BûúâBÏ©Bà­BÐáB¼ «BC/­BXŠàB‘-¬B99­BR.ßB 5­BÁG­BÅÝB**®Bb­B;QÜBÒ ¯BЃ­BñÑÚB·Ü¯BË’­BiEÙB•“°B*‹­B ­×B/±Bót­BLÖB©¹±BÖW­ByoÔBÄ<²B¥8­B‘ÍÒB™¸²BÝ+­B!'ÑBæ'³BZ3­Bd}ÏB“гBf:­BžÍÍBbγBð9­BÌBí³Bt+­B¯dÊB¡í³B­BɱÈB}Þ³Bž·¬B®ÇB¦¼³B¹^¬BÃZÅB•³BʬB ²ÃBh³BÄ™«B¿ÂB)³B^«B|~ÀBÈȲBVªBï¿B4S²B[‘©B4‘½BÖ±B—¿¨BÆ'¼B'Y±BXÖ§BкBÔ°B—ݦB[Œ¹Bø;°Bí¥BÁJ¸B”’¯Baú¤B§·B&í®Bß÷£B¼ÇµBQ_®BðâBÉ ´B¸®Bœƒ¡B3…³B¼µ­Bö BÀ™²BÔ­B¿¬žB¯¾±B»8®BCRB ó°B¬ß®Bëó›B+"°B`w¯B“‘šB`I¯B ù¯Bƒ,™BÔj®Bh°BïÔ—Bs­BZ̰B°–Bc¬Bm(±BG•B:R«Bš„±BÚï“BJYªBææ±B¢Œ’BÛk©Bˆ9²B5戨BFëBÌ›Bb©BYhêBC&B¿’©B}–éB‘žB ÷©BÓáèB B–LªB-èB|”¡Bo•ªBMçBÚ£B¦ÏªBDæB;Y¤B¹«B;&åB0ž¥Bð4«B|þãBôÛ¦B \«BKÓâBO¨BÁu«BkáB<©B«B17àB(GªB‹‰«BÎÞBX=«B Ÿ«BZZÝBî ¬BhëBoÚÛB7î¬BèÑ«BöSÚB§±­Bhà«B|ÍØBu®BNÔ«B©A×Bž-¯Bµ«B#²ÕBœÛ¯BbŽ«Ba ÔBÒ‚°B?c«BÀŒÒBY$±BpH«BBðÐB²±BÄA«B²LÏB%,²B/,«BuŸÍB™{²BóªB°îËB8²B噪BÝCÊB¥t²B 6ªB#œÈBüO²BÛÇ©B&øÆB‡ ²BS©BÞWÅB¼â±B[רB»ÃBœ±BÉN¨BÓ"ÂB”R±B(ª§B ˜ÀB‰û°Bò¦Bø¿Bë”°B/¦Bȧ½Ba°B\¥B0E¼Bó‹¯Bø{¤B½óºB¼ê®B Œ£Bd­¹BªI®B,Œ¢B4i¸Bs¾­Bùz¡BÓ+·B F­BNU BüµBàÛ¬BË+ŸB;δBvw¬B0žBI™³Bà'¬B—ÜB[r²B7¬Bl›BKg±BM¬BÅšBc°B0!¬B ±˜Bka¯Bê ¬BºM—BÁh®Bè«Bíç•Bãu­BÁ·«B•”B¬†¬Bòz«B’“BࢫBÜ&«B³¶‘BÞ¸ªB(ƪB†eB'¹©BN`ªB&B³¨B8שB0!/·BzXçBW%‡BýµB׿B–>ˆBÈ´B~ÊæBÚp‰B“³BhøæB  ŠBa²BüOçBÖå‹B‹Ÿ±B-§çBYQBÖì°BèB¾ÔŽBnP°BõwèBYBáâ¯BH*éB!Ø‘BŒÇ¯BƒêB O“B4ͯBÛêBaÌ”BÚѯBôëBû_–BÛà¯BôëBߘB)ú¯B~ìBoŸ™Bã°BÂ%íB2›B°BÎyíBËÝœBÝ߯B^}íBžBýr¯Bƒ>íB/ BŒ4¯BŸÙìBpÒ¡BÛ¯Bi7ìB/f£Bò ¯BˆPëBؤBþ®B6YêB?¦Bñ®B¡_éB±¤§Bå®B fèBG ©BÙ®B¡jçB›nªB‚Ô®BCfæB¦Ì«BÙÛ®BÜCåBT­Buê®BAäB>®B{÷®B~µâBãR¯B€¯BXáB¥X°B ¯BÔóßBñT±B_"¯B¬|ÞB 3²BP=¯B¦òÜB‚î²B8U¯BØZÛB¸‰³B€`¯Bw»ÙB´Bp`¯BØBІ´Bke¯BanÖBð´BÉq¯B™ÃÔB¥MµB;ƒ¯B*ÓBË—µB‚˜¯BòbÑB½ÅµB¶¯BH¯ÏB±ÚµBÂè¯BýÍBòâµBä/°BöMÌBÂÕµB'x°B· ÊB/­µB—º°BÞõÈB%jµBÝÿ°BÀQÇBFµBôU±B¹°ÅB—¤´Bó¿±BpÄB©E´B;§ê²BÌ ðBà’BЬ²BÙÁïBâ„”B§ˆ²BºïB–B~d²BšOîB%——B[Z²Bë»íB71™BlU²BÕpíB‡ÞšB{]²BÝ:íBðŽœBÌb²BNììB¢;žBêB¸ú§BÛ±B_éBÚp©B{þ°B,]èB¸ÐªBÏø°B$_çBZ3¬Bùì°BSeæBʘ­Bã°B®]åBKô®Bâ°Bu<äB;°Bë°B’öâBs]±B÷°Bû˜áBÚb²B4±Bq*àBÒO³B¿±BžÞBV´B3±BIÿÜBIŽ´BJ±BK[ÛB µBh±B]¸ÙB~µBDZBdØBøµB#´±B(oÖB_^¶Bc×±B}ÁÔBº¦¶B=ö±BÓBBͶB¬²BU[ÑB*×¶B0E²Bª¨ÏB̶B넲BiøÍBÿ¼¶BñвBrJÌB)§¶Bi%³BºŸÊB°{¶B³†³BeûÈBk5¶Bø³BÕ_ÇB&صB(o´B…ÄÅBÒµB×î´Bþ)ÄB1µB€zµBó“ÂB£ß´Bk%¶BiÁBlm´B¨ï¶Bª¿Bìß³BÍ·B’P¾B¸J³BUª¸Bñ¼BñòBv—¹B¬—»BI²Bf¢ºB-RºBÏÕ±BPÞ»B“.¹BcŒ±B?½B>0¸B…v±B¼³¾BžN·B‰±B­3ÀB0ˆ¶B2¾±B¶ÁBäȵB›÷±BV7ÃBáµBÝ#²BO¶ÄBé5´BáH²B“2ÆBy²B„¥ÇBó‹²Bݸ²BÍ ÉBT¡±BK³B~ÊBIȰB—S³B§õËBP°B9´³BW0´BÃIñBÞÆ’BI»³Bo“ðB%A”Bo³Bê¹ïBU³•BBL³BYßîB#+—BÑ3³B'[îBÕɘB`³BõÖíB†hšB³BÜxíBúœB>³B íB„·BÕ³BBìBqTŸB"ѲBËìëB…ë BÆ‹²BAjëB™…¢BWJ²B;ëB¾-¤B²B²òêBüÙ¥B‹È±Bm”êB §BÛ¦±BRÓéB’©B ±BÈØèB¤iªBÕ¡±B(×çB½É«Bç”±B6ñæB'<­BケBæBç±®B't±B®"åBã°BB€±B;ùãB ^±BhޱB¬«âBgw²B¾ ±BæCáBPn³Bè¹±BÀßBø5´BãÓ±B  ÞB»´B/ë±BÏvÜBêµBß ²BÐÚB„µB‘;²BŒ-ÙBÕùµBÙq²BÏ‹×Bhn¶Bi¥²BÓäÕBÔ϶BGJù´BEäB¼ÙBãtµB‡ãBÃ;B5ºµB›[âBœ¾‚BÁµBŒûáB¹g„B#—µBþáB††B?mµB{âBSˇBR+µBáâBdf‰BQÛ´B´yãBsÄŠBøe´B²‚äB¬ ŒBÖ³BOsåBæXB³BÿúåB5ÄŽB‚z²BáaæBØPBã²Bš½æBÉð‘B ѱBY,çBY“BÙœ±BuËçBñ!•ḆBÔèBe¦–BG†±B'TéBÂ+˜B¢±B êB˜¸™B€Á±BhŒêBGV›B¶ß±BïÜêB‹B½ñ±B-ëBÛ±žBî±BmûêBe Bâ±BÚÁêBû¢B£¥±BÀjêB¿»£BWh±B3êB—d¥Bƒ-±B§éB–§Bè ±BŠáèB˜†¨B‚ý°B»îçBÀð©B®±B!âæB…H«B) ±BK×åB­¡¬B±BaÆäB ö­B¸!±B¥ãBt<¯Bú"±B¦tâB9u°B²!±B³)áBô‘±BÁ$±BÆßBn²B‰5±BÓCÞBÐZ³BvK±BL¬ÜB÷³B¹d±B™ ÛB£~´BѱB»mÙBoµB©±BµÌ×BÚ~µBµÍ±BÇ%ÖBçµBî±BïwÔBª/¶BɲB×ÅÒB©W¶B;7²B«ÑB~b¶Bn²BaÏBüX¶B³²B ±ÍBI¶BX³BíÌB…2¶BÍV³BÛYÊBµ¶B£¼³B+·ÈB)»µB90´B¯ÇB¯_µB‘«´B½€ÅBX µB 0µBÆæÃB¿Â´B±ÁµBÝRÂBCq´B\s¶BPÔÀBaÿ³BrA·B&m¿B’t³B¥¸BÔ¾Bå²Bú¸B9®¼BÔd²B»í¹B–W»BKî±B÷ÿºBººBg±B‘C¼B‰ú¸Bò:±B“¦½B¢þ·Bç%±B¿B··Bb7±B—–ÀBáL¶B—d±BXÂB!µB猱B ’ÃBF¯´Bh§±Bm ÅB^سBݹ±BÔƒÆBý²BçÔ±BbóÇB7²BHó±Bü^ÉB'±B6²BèÐÊBnB°BI+²B—FÌBTc¯B =²B9aΩB ìB–h›B‘™ªB-ÊëB¼œBQ)«B›ëBr-žB²…«BvêB渟BÇÅ«B@îéB(R¡BÝü«BÛ9éBKÛ¢BI(¬BÕTèBùK¤B§G¬BæHçB좥B`¬B-æB~í¦BÏ{¬B^åB96¨B¬BÈìãB#z©Bò»¬BݵâBöªªBçάBXfáB´Á«B׬B¡àB龬Bfí¬Bö“ÞB1«­Bp ­BÝB⃮B¶&­B5”ÛB•G¯Bs(­BÄÚBô¯BÁ­BÒhØBI‰°B÷î¬B§ÌÖB—±BÜÆ¬B"/ÕBê±Bl©¬B¨ÓBœ²B¡¬B¡çÑB䌲B¥¬BÀ<ÐB¹ê²B™¬B‹ÎBµ³Bw¬BW×ÌB&³B«9¬Bö&ËB³B0æ«BM{ÉBˆö²B ‰«B1ÓÇBvƲB^&«B".ÆBˈ²B»ªBeÄBñ=²B8ªB ÷ÂB@â±Bì“©BópÁBŽw±B‹Ù¨Bø¿BñB¨BꉾBP„°B69§BÏ(½B¸ú¯B¥W¦B”×»B [¯Bùj¥B;“ºBW±®B·p¤B R¹Bà®BÏ]£BϸBÁ–­BÚ8¢B¾ë¶BŽ#­B ¡BÙµB‹·¬BןBÚ˜´B,r¬Bs—žBq³B}t¬BÏWBXI²BÍv¬BœBFB±B9¤¬B矚B‘G°B"׬Ba<™B?M¯Bfé¬B”Õ—B W®B(è¬B­n–B_a­BWÚ¬B •B¾g¬B¢Á¬B,¢“Bv«B좬Bå=’BÛªB¦{¬BðBAk©B±S¬B€¾Bn?¨B¢¬BT·ŽBÞ§BO«B¯B~ú¥BM‰ªB/âC­BSÕãBæ}ƒB9o­BÈãBT/…B¹¢­BÂãBà†B䨭Bè¾ãBiˆBkò­B^ÅãBlCŠBôÖ­B[äãBIõ‹Bc™­BçäB ¡B7z­Bì™äB…ABn­B»NåB$ÎBD`­Bƒ+æBF’BŸ[­Bû!çBù­“Bs­B6#èB •Bþ­BüèB톖BK¦­Bj¬éBô˜Bs½­BiUêB1¦™Bš×­BrëB@.›Bð­B,ÛëBš°œBá­BêIìBóUžBÒ­B¨¸ìBKûŸB ¢­BÇÇìB6¬¡Bb‡­B¥ìBÖ]£B “­BFìB‹ò¤BÒ§­B0!ëBûf¦B˜¹­BÞ êB•ǧB>È­BéB·©BŽÒ­B èBŒuªBÛØ­BFøæBnÌ«BÜè­BpØåB­B5ù­BA¨äB©L®Ba®BˆiãBÕv¯BÚ ®BXâBaްB5®B<¼àB¸’±B­5®B©OßB0‚²Bˆ[®BuÑÝB_R³B±”®BˆDÜBìÿ³Bv°®BÕ©ÚB¯’´B£®B\ÙB µB–®BR_×B‰yµBД®B™´ÕBصBd ®BÝÔB>'¶B°¬®B.UÒB´\¶Bk¼®BY¡ÐBÞz¶BäÖ®BfíÎBú¶B8¯B:ÍB¤“¶B4B¯B^ŠËB¶B%x¯BBÜÉBkF¶B¡¤¯B×2ÈBNìµB#º¸BœLèB €‡B¾ ·BîçBF¾ˆB¤£¶B‰çBøŠBʵBbfçB³‰‹BܵBlçB B:{´Bp„çB”¬ŽB‚´BÀ¦çB6SBÀ³BƒèB[ó‘BMš³BE·èB¢€“B:³B`‘éBú”BpŒ³BŽMêB}ƒ–B3 ³BÒêBS"˜B´Ã³BöêB.Ó™BúÕ³BpÈêB;„›BMʳB›êB˜5B嬳BÐVêBüâžBÅ|³BÒêéB‰† B+;³BŸéB±.¢B í²BÈméBØ£B?ž²BéBÔ|¥BWr²B[èB×§Bai²B¯\çBe¨B·€²BBæB°©B§²B0åBôòªB*ɲB¶ äB€D¬B%Õ²B¢þâBÆ›­BqȲBŽÛáBªà®B£°²Bú™àBä°Bªª²Bì<ßB/ ±BÛ¶²B!ÂÝBgæ±BÄѲB37ÜB^Ÿ²Bý²B„¥ÚBÞE³B 7³BsÙB¨Ü³Böp³Bby×Brs´Bü§³BÄ×ÕBè´B0h®B[™ãB´‚Bn³®B¼PãBÁƒBå®B•8ãBs…B¡¯BïMãBZ#‡B‚J¯BœãB͈BTM¯BçíãB.yŠBT¯B®&äBF%ŒB·®B±`äB|ËB/~®BrÔäBékBÁY®BÚ…åB—øB>>®BeæBMn’B¼"®B^DçBä“B $®B˜CèBÕE•BéF®BdEéB¤–B„i®BýêB0˜Bׄ®Bº½êBS²™B&¢®BñbëB·D›BwÈ®BH"ìB£ÊœBæ®BýßìBRžB½®B/5íBžûŸBÚZ®BÏíBƒ£¡B^,®BòÉìBäL£B•&®B…ìBUݤB»0®Bà;ëByR¦B¥6®B+@êBÀ¶§Bã:®B[;éB{©B=®Bu3èBìoªBê<®BÝ)çBÊ«B‰E®Bå æBœ­BÛQ®BvÙäB2J®BSZ®B•ãB.n¯BØb®BžAâB·€°B'r®B:áàB.‚±B†®BósßBÅp²Bg“®BëïÝB9³B™®BaYÜB1Ù³BД®BúÚB-c´Bo†®BÅÙBŒÞ´B v®B1q×BÎLµBPp®B!ÇÕB®µBév®B'ÔBÁ¶B¡€®B,iÒB=¶B‹®BÓµÐBÙa¶B©¨®B ÏBýy¶B!Ñ®BÜNÍB„¶B, ¯BÔËBit¶B‘:¯B!îÉBSB¶B~_¯B£BÈBÒîµB,Óø²BÒ…áB"€B «³B¡àB‚YBC"´BâÁßB"B(K´BPBßBÃ[„BØ2´BnßBš †BË´B%ßBѽ‡B·Ä³BbkßBg‰Bèr³BV·ßBZ ‹Bé³BàßBj´ŒB4¼²BõößB^ŽB‚D²B‹àB¯ÿBṈ̃B <àBM¡‘BnP±Bç_àBoA“BÒô°B¾àB×è”B;İBÜÙàBœ“–B]©°Bã^áBé1˜Br„°B1"âB¶™B•\°BYãB›B‹H°BhäB}}œBÅV°B‘ÝäB®žB€°B½WåB ¢ŸB&¡°B«„åBDR¡B;´°B¬5åB{þ¢Bý®°BQ|äB&‰¤B’™°B¨ãBƦB­°B¿âBmu§B‡u°BÂáB±Ø¨B|°BI—àB¼ªBõ…°BYKßB*2«B/Œ°B‹ëÝBË4¬B뢰B¸¦ÜB—W­B˰Bï~ÛB–®Bø°BY;ÚB—·¯B±B?ÉØBJœ°B‘<±B4×B¦>±B§T±B‘•ÕBjűB=g±BéíÓBR/²BÙ|±B™@ÒB¯~²Bãž±B“ÐB#¸²B•̱BUßÎB²Ü²B¤ ²Bà.ÍB“ß²B÷]²B[‚ËBéÁ²B-½²B¾ÛÉBb‡²BÝ(³B/<ÈB 5²B2¨´BûGâB/Ö„BGŽ´BuâB솆BîX´BÆeãBÖî‡Bg÷³BsdäBpC‰BI9³BaåB’žŠBs²BužåBî ŒBUÀ±BŒýåBáB†@±B$fæBF!BŠá°B›àæB¼¸Bd°Bá‡çBžE’B>Y°B'/èB€Ò“BU@°B‘éBM•BL°B•æéBô–Br_°BÍ¡êBFL˜BËu°B™-ëB”è™BW“°Bg¨ëBƉ›B¹°BÓìBø.B|À°BªkìBlÙžB3‹°B.½ìBJ‚ B,°BååìB¨)¢Bô¯B8xìBÇË£BýÖ¯BéâëBZd¥Bk¯BGëBè¦B?«¯B 8êBþZ¨B¾™¯B*EéBìÄ©B,Œ¯BKèB *«BÊx¯B+EçB†¬BBl¯B#!æB‹Ê­B¨i¯B®ÜäB˜î®B o¯B£|ãBèð¯Bw¯B‰âBVé°B°„¯Bn¨àB¦Ø±B-š¯B /ßB“³²BŒ³¯B“£ÝB¢k³BÐʯB› ÜB-´B#Ú¯B1jÚBˆ´Bšã¯BþÆØBZµBï¯B××B-pµBΰB¦tÕBÔʵBw°BÚÅÓB)¶B00°BAÒBŽ:¶BpJ°B_ÐB=I¶BDu°B ¬ÎB'M¶B£µ°B»ûÌBÍC¶Bh±BnNËB]%¶BTK±B³£ÉB—èµB…—±BPþÇBÁµBxï±B—]ÆBi.µBãV²BÿÄBüδBÝDzB$ÃBoq´B'޼B€9ßBþ4ˆBÕ»BdßB~ ‰BiÕ¹B‚ÕßB!ŠBþŒ¸B¡àB 6‹B7$·BåWàBt"ŒB…ĵBünàB¹!B´Ö´B|àBhŽŽB2c´B7oàBh2B׳BdhàBÏ‘B\2³B~nàBEb“Bž²ByœàBqù”B^K²B‚áB\˜–B84²B,áB 5˜BŒ²B‘?âB.Á™Bv¶±B.ãBN2›Bq{±BÙäBY›œB(j±BHÕäB3žBŸ±BªfåB¡¶ŸB¨“±B´ºåBÕa¡BÖ¢±B5ŽåB£B¦Ž±B©ÒäBDœ¤BSj±BÿäB¦BG±B%ãB«§BÌ=±B&'âBXò¨BßK±BùáBk4ªB½\±Bú½ßB¡Y«B¾a±Bu\ÞBóY¬B'‡±Bó2ÝB—­Bâ½±Bƒ(ÜBBì®Bæö±B2 ÛBÃ/°Bý ²BΩÙB /±BD²B§#ØB ñ±B)f²BOŠÖBM†²B[†²BäÔBò²BÛ¤²B¨4ÓBJ2³B±Ó²B_ƒÑBÇT³BųBÉÒÏB|Y³BŽ_³Bê$ÎBwD³Bº³Bá{ÌB³B-¦­B~¦ãB_­ƒBZÚ­BÙ›ãBâ]…B®B¹’ãB ‡BKG®BÕãB€¾ˆB™X®B„¤ãB¸qŠB]1®BW·ãB`#ŒBÑî­B7ÛãBšÐB_È­BýXäB>pBÎÁ­B¤åBIÿBû­BèåBÐu’Bø¼­B˜åæBàØ“BãÙ­BíçB^3•B ù­B\ËèBA©–B®BéBp5˜B¥3®BU)êBÃÅ™BýS®BxâêB2O›BYn®B˜šëBÙœB£c®B½ËëB}ŠžBH:®BΗëB>9 B $®B(ëBÞ¡Bm"®B¾|êBûn£B/$®Bk—éBâ¤Bá$®B¯˜èB0D¦B$®Bz”çBd¢§B`)®B„‰æBwû¨BŽ>®BÑpåBêHªBòc®B¨DäB’ƒ«BD}®BºÿâB ¦¬B¢Œ®B·§áBˆ²­B®š®BbBàB6­®BX³®BfÐÞB”¯B{Ø®BâPÝBöa°Bžý®B^ÑÛBÝ/±B/¯BBÚB—Þ±Bó)¯B¥ØBÄl²B’&¯B×B@â²BB"¯BïZÕBÒV³B¯BˆµÓB—ʳBÊ%¯BÜ ÒB )´Bê?¯B\ÐB=n´B4i¯BùªÎB ™´B¨¡¯BÈùÌB‘ª´Bøæ¯B-JËB¥£´B[&°B÷šÉBŒ´Bf°BðÇB°<´B$Ræ¹BÞÝB'Ž{BŸÕ¹Bþ]ÞBJÏ~BëĹBmÝÞB7BAé¹BjßB6£‚B9ºBXõßBj?„BÓ¹BÌqàBQÞ…BkJ¹Bl×àB’o‡B¨¸B7páB<æˆBû¸Bz>âB5AŠBÀV·BëãB0‹B"¶BväBIÄŒB…²µBT åBÖ½BñÛ´B.æBt׎B#-´By‹æB½WBͳBׯæB¶ü‘Bî}³Bk%çBËž“B)5³Bx¢çB :•B6ú²Bs=èBMÍ–B±è²B+ñèB7Z˜B ³BÀ«éBã™B³Bš-êBÜ‚›B6³B¾dêBW2ByH³BjêB»åžB£X³BìOêBw˜ Bus³B êBÒH¢Bnv³BäêB}ü£BB³ByêB ­¥Bñ²B>úéB¼W§B%DzBRéBè¨B1ƲBNVèBïKªB¢Ú²B¬HçBa¢«B¦Ý²B±hæB¢­BÃÔ²B¬åB¸¡®B´Ë²B1ûäB$0°B@βBˆäB\¨±BaÓ²BãBWò²Bz)´B òBÌÜ’BÈ®³BÀ0ñBz9”B´]³B:ðBô—•B9³B:@ïB±û–B/³B´UîBUi˜BÁê²B-kíBùÖ™BæÖ²Bð¶ìB…c›B7ë²B\kìBJBIð²BìB½·žB°Ì²B]ëB€Z BвBDëBŽò¡BÖH²B­êB/˜£B¾²B¾xêBvC¥B1¾±B 6êBYì¦B›”±B‰éBcz¨Bú…±B+œèBdè©B•±BþçBá>«B.±Bt’æBR£¬BUŒ±B:žåBÁ ®BŠ‹±B¡äBp¯Bª±B‰ãB«¾°BÜ•±B?JâBÛè±Bz±B¨íàB½ï²BD®±B¾pßBðijBàıB)×ÝB¡[´BܱBë0ÜB-Ê´B`ý±BÚB ?µB®*²BHìØB•ºµB?]²BiãBG ƒB2®BhHãB®¸„Bg®B[BãB0i†Bœ®BITãB^ˆBZîB³ãB7ɉB¬®Bt¥ãBÐz‹Búd®BªºãB5(BO2®BóãBkÕŽBÁ®B ‚äB†pBª®BÍJåBöó‘B ®Bº@æBF\“B@4®BëPçBˆ°”B Y®BãGèB-–BN}®BéB–—BJž®B!¾éBí%™B«Á®BÿmêBM³šB å®BÜëB®@œBù ¯BÚëBÇB“¯B£RìB£jŸBÅ®B6eìBÏ¡BŠ~®BV&ìBE¢Bˆf®B ”ëB@\¤Bèd®B×ÁêB`Ú¥B d®BCÉéBà@§Bc®B‚ÉèBR¢¨Bî`®BIÆçB=ªB]®BÃæB‚`«Büf®B®¨åB£¬¬B¿v®BiwäB6ä­Bp…®B2ãBà¯Bæ®BÂÜáB°BŠ¡®BV}àB½±B#¹®BÿßBe²B¡Û®BŽÝB(Ò²B}ð®BéøÛBzt³B¼÷®BP[ÚBo´BÏò®B¸ØB·|´B_ì®Bø×Bê´B2î®BgÕB LµB ø®B]ºÓB ¡µBs¯Be ÒB”ÛµBίBVÐBpýµBé?¯BÒ¢ÎBɶBÆy¯B{ñÌB¶BµÄ¯BÚCËBžñµB?°B —ÉBK¶µBÝ8°ByîÇB"^µB0ݲ³BÊ,âBÐæ„Bd—³B·ÈâB}†B]u³B'áãB±É‡BIJBLÏäBO ‰B~ì±B^•åBhLŠBù±BõæBL±‹B½c°B}næBµ4B¼¯BúÃæBþ½ŽB¼1¯BA_çB=B ½®BÐ&èBØ®‘Be•®B$éB“B–îBøéB¸‹”B.å®BU°êBv–Bæø®By5ëB´—BѯBçÄëBïN™Bß9¯B–ìBךB9T¯B-TíBáRœBÅ.¯B(¡íBDþBmÌ®Bí‡íB¦ŸBH®BÜ%íB J¡Bôw®BLìBåá¢Bäu®B&»ëB `¤B¬s®B"ÃêBîÆ¥Brq®B`ÄéB)§Bon®BÂèB®ˆ¨Blk®BÍ¿çBFè©Bâf®Bµ½æBÿG«Bƒp®B¤åB1•¬BŸ€®B€säBjÍ­B^®BB.ãB4ð®Bœ®BîØáBB°Bò«®B±yàB>±BEîBÌ ßBð±Baå®B4‹ÝB½²BLü®BÁöÛBâ`³Be¯B„YÚBÄî³Bý¯B_¶ØBwj´B ü®BV×B$Ø´B$ÿ®B€eÕB :µBU ¯B¹ÓB™µBP¯B4ÒBÏ˵Bp.¯BñTÐBùíµBÄS¯BÆ¡ÎBú¶B¯B³ðÌBnÿµBÅÚ¯BCËBBáµB4°B\–ÉBú¦µBÐQ°BÐíÇBŒOµB¥’°BÖIÆB#é´B.$ø«B/ãBœÒB¸¬B“âBsƒB^$¬BfhâBm$…BN;¬B gâB¡×†B–_¬B½yâB‚‰ˆBàƒ¬BoŒâBd;ŠB\©¬B¹âBJë‹Bè·¬BýàâBB”°¬BþùâBPBг¬Bž,ãBõ‘Bˆ¿¬B †ãB]«’BêɬBF äBJ”B‚ŬByÎäBrЕBY³¬B*ÔåB-—B¿¬BÂÉæBm•˜BÊݬB"çB šBYÿ¬B¾GèBo¡›B/­BžÚèB3;B&­B½XéB0ÜžBUD­BÿÒéB†} B´n­B«BêB´ ¢Bz~­BœêéBKË£BŽ­BK+éBÖR¥B~›­BÎ6èB廦B¥­B 0çB¨Bt«­B $æBfp©BQ»­BîåBÙÁªB¼Ú­BÑîãB?¬B·ý­BǼâB<­B\®BÒsáB¼Z®B'&®BlàBñc¯B‡?®Bm±ÞBèY°BBc®Bl:ÝB7±B3’®B´ÛBŸõ±Bú«®BQÚBÖ•²B©®BD}ØBi³Bbš®B›×ÖBKгB Œ®B=1ÕB¦ù³BÕ~®BŠÓBBf´BJ‚®B´ÝÑBç¼´Bs˜®B.ÐB¤þ´Bt½®B†|ÎB‚(µB–í®B5ÊÌB 6µBâ%¯BÞËBÃ(µBÿT¯B%hÉB µBÉ}¯BL¼ÇB1°´B=ø.²BÓÁïBt©–B³²BkïB_9˜Bò²BõµîBXâ™Bþ±BINîB—‰›BØâ±Bµ×íB.,BW ±BhUíBÏÆžB,J±B—àìBËa Bî ±B3yìBì¢Bâ°BdìB¬§£B>º°B¶sëB?¥B™°Bå«êBËÁ¦B¶†°BžÀéBœ0¨BѰB‘¿èB‘©B.|°Bc»çBBïªB\z°Bù©æBNC¬BŠx°B˜åBZ—­B}°B.räBƒÙ®B<„°Bh5ãBŰBA‡°BoæáBDZBú°Bá„àB²B ž°B ßBü²Bë³°B¦~ÝB®³BßɰB¡áÛBK;´Bƒà°BÀAÚB»¿´Bºù°B6 ØBe>µB¬±B¨úÖBp®µBÆ2±BOÕB¶BO±B`ŸÓBB¶Bm±B@ìÑBº_¶BŒ’±B°8ÐBÅa¶BiɱB‡ÎB [¶B?²Bé×ÌBËJ¶Bƒ_²B8+ËB'*¶B2µ²Bì‚ÉBíµBú³BAâÇBX•µB|…³B»EÆB7µBxø³B8ªÄBÛ´Br´B!ÃBÜ…´B‹µBƒÁBJ´BÄ´µB ÀB'ˆ³B#{¶Bé§¾Båí²B{H·BXB½Bù]²Bw"¸B±â»BFÒ±BC¹B[ºB•K±B¬,ºBôZ¹B7ϰBÀy»BK¸B²†°BÁä¼B«Z·BVv°BgZ¾B¦{¶BXаBûÓ¿B¦µB~±°B LÁBœÌ´BÔϰBŽÃÂBGð³BTß°Bn7ÄBm ³BÙã°B½¦ÅB#²BÍã°BhÇBÑ1±BeÙ°Bþ|ÈBÅA°BzÓ°B„éÉBS¯B€Ó°BÌTËB_c®B¿°B=·ÌB¡q­B¡r°BÎB=u¬B¨ °BúbÏBµb«Bœ °B?•ÐBÈ-ªB7+°B0·Î¬Bf_ãBуBÀô¬BÑ4ãBೄBÝ­Bm.ãB®e†B.M­B3ãBÞˆBüw­B1@ãBZȉBVw­B>]ãB5{‹BT­B¨„ãBÔ+B„0­BûþãB¿ÌŽB®*­BžäB bBú1­B*qåB5à‘Bº0­B¿bæBnK“B;­B×gçBͨ”BíQ­BÜSèBä–BÚj­B¶éB±›—B¥‚­Bª¿éBT-™Brš­BžgêB÷¾šB³±­BëB^LœBÜÊ­BÞëBÑÐBÍ­B»sìBEjŸB`®­BqºìBE¡BºŠ­B)¥ìBÉ¢BeŽ­BË ìBvh¤B¡­B©JëBïã¥Bu³­BÛQêB×I§BÁ­B]IéBƒ¤¨BέB5;èB÷ú©B‰Ô­BÅ.çBâR«Bäâ­BæBlŸ¬BÜô­B=éäBÜ­B ®Bà®ãB) ¯B“ ®B¥câBd'°BE®B¶ áB41±B84®BN¢ßB[(²BÛU®B{(ÞB³Br‰®BŸÜB¸³B'­®BrÛBqQ´B<¢®BeÙB:Ï´B/’®B¿×B¹?µB›Œ®BsÖBñ¢µB'“®BÈhÔB(øµBÑ®B=¸ÒBm6¶BP¬®B ÑB]¶BßîBQÏB6t¶BVë®BáÍB²¶B¡'¯B íËBus¶B#^¯BÏ=ÊBªD¶BÁ‹¯BÎ’ÈBùòµBe³¯B¹ìÆB‚ˆµB:'v©BÈíB™†šBðVªBóeìB Ò›Bž «Bs¯ëB;1B¸‚«BdëB¤±žBÊ«BŸtêB'F BجB†æéBLÞ¡B¥3¬BÃ#éB‰a£BšX¬B‡2èBˤBçq¬BžçBk¦Bk‰¬BúæBg§BÛ¤¬BåäB¦¯¨BNȬBÁÀãBÁñ©Bäå¬B „âBº«BÃö¬B0áB,.¬Bb­BkÊßBq(­Bà­B¨YÞB#®B»?­BnÝÜBŒå®BU­BTÛBƒ£¯BXR­Bö¿ÙB†H°BS9­B1$ØB”ذB¬­Bz†ÖBWa±Bñ¬B‘çÔB€ä±BÙ¬BDÓB­\²BN׬BœÑBqȲBJÛ¬B‰ïÏBE³B‰Ñ¬BÉ<ÎB¦H³B5´¬B¯ˆÌBãH³B{¬B±×ÊBã9³B‚(¬BÎ+ÉB'³BáË«BmƒÇBfë²Båi«BÞÅB¯²BO«B{<ÄBºd²BbzªBl¨ÂBß²BÓÒ©Bô$ÁB–±Bm©BÊ®¿Bª±B²I¨B«B¾Bpž°Bn§BHä¼B"°BsЦBŒ•»Bõq¯BHœ¥B†SºB÷Å®BÚ ¤B>¹B‹*®B*‹£BÏÛ·B!­­BÖe¢B½¯¶BI8­Bã8¡BJˆµB„ˬBŒùŸBíd´B—¬B›±žBaG³B‘­¬BíYBrC²B#ë¬Baú›B.L±B¡/­B»•šB{T°BuL­BI/™BÊ]¯B_Q­BÁÉ—BÝe®B¡H­BÎg–BGi­B$7­BËÿ”BÏu¬B¨!­B¨›“B}«B­B™M’BŒgªBüé¬BŠÿB—Q©BöϬBŒÊB%¨B|¬B>·ŽBHù¦Bõô«B•®BàÚ¥B¿2«B9¬3©B[TêBðšBˆ³©BuÁéBè”›B&AªBzúèBþœBµªB9DèBÚxžBù(«BùçB˜óŸB3u«B«óæB&„¡Bº´«BÉ?æB= £B•ë«Bs\åBo|¤BجB'YäBÚ×¥B=F¬B]CãBÔ%§B¯a¬Bø&âB°o¨By¬B÷àB*¨©BΈ¬B³¬ßBŪBʬBJKÞB‘Å«B昬B6àÜB ¸¬Bˆ¯¬BkÛBø™­B[ʬBòëÙB2j®B°Ô¬B=dØBm+¯BÞʬB±ÓÖB¬Ù¯Bhµ¬BÚ=ÕB z°Bþ–¬B¦¤ÓBC±Bdz¬BZÒB1›±BŸm¬B{dÐB-²BMq¬Bå¼ÎBÕ‚²BÔb¬Bi ÍB}À²Bï>¬BþXËBÜ̲B7¬Bi¨ÉB ¼²B ³«B'üÇB@›²BúT«BƒTÆBäh²BÛñªBɯÄB¸)²Bó‡ªBîÃB€Ý±BÇ ªB=wÁBò€±Bàh©B‹ð¿Bs±BI¯¨Bx¾BEœ°B æ§Bé ½Bð°B§B ©»Bü”¯B*¦B¶XºBÆö®BÊ>¥B´¹BE®BÂN¤BïÖ·BT™­B L£BW›¶Bp­B)¢BîpµBÖ¬Bpõ B5S´B5¬B¥®ŸBO;³B´Ë«BÔWžB/²BóÍ«BŒüœB0±B× ¬Bé™›BÜ=°B-R¬B5šBºG¯B×x¬B̘BU®Bå…¬B^`—BWf­BU‡¬Bëõ•BÈu¬Bx}¬B匔Bðƒ«Bg¬B]#“Bx“ªB¬J¬BmÉ‘B ©Bº,¬BØB»b¨BÉ ¬B€tB¯(§Bž«B|`ŽBxü¥BÆ«B¼ABÇÔ¤BwªB-¬N­B¬‚ãBÒò‚Bw­BD^ãB¢„Bº³­B€UãBèR†B!é­BiNãBYˆBï®BOGãBs´‰B'®BÏOãB#h‹B·ã­Bü[ãBPB‰Â­B%…ãBðÉŽB¾³­BZäB{fBÜÀ­B#¿äB&ö‘B"Ê­B¶³åB>_“B*Ú­BMÅæB¿²”B·ø­BÄçB7–Bà®BTšèBÀ—B<®B¥KéB­™BŒ[®BúéBȨšBY}®Bó±êBî2œB®BØ+ëBuÕBÕc®BŽ+ëBnˆŸBD®BµÝêB4¡B!<®BŽPêBТB^;®BÀ€éBíO¤B$:®B‘…èBž´¥Bæ7®B6ƒçB+§B:®BúzæB\o¨BlJ®BgfåB{À©Bep®B@äB~«BÆ®B¤ÿâBƒ'¬Bæ®Bí©áBÛ6­B±¨®BŽEàB 3®B{³®B/áÞB=/¯BÚÈ®B¢qÝB=°Bæê®BÔôÛB™í°Bp ¯B¡hÚBò¢±B™¯B ÎØBÑ7²Bè¯Bß)×B °²Bˆ¯B…ÕB(&³BŠ ¯BáßÓBuš³Bç¯B6ÒBý³BV)¯B÷‡ÐB¥G´BïN¯BI×ÎB~y´Bƒ¯BÔ%ÍBa´B”ůB½uËB«Ž´B°BòÅÉB—r´BsA°B™ÈB€4´B!yg©BNÕïBᔜBëªBjôîBéBtªBñ îBHŸBE½ªB3íBš» B«BmbìB3¢BYK«B©ëBɪ£BЇ«Ba©êBR¥B»«BÈœéBLl¦B®ä«B6~èB̲§B¬B]çB1ø¨BÑ&¬BV9æBè:ªBùK¬BåBŽz«BKf¬BIæãBC¶¬B\¬BA¤âBóÛ­B)¥¬ByLáBˆæ®BÜÔ¬BêâßBÝÖ¯Bw­B¹hÞB¬°B;2­B¥ÞÜBcc±BÎ5­BwEÛB¼ü±BL­BØ£ÙBiw²BÒ׬B=ØBµç²BT›¬B6_ÖB„W³Bºa¬BW¼ÔB¹Å³BÞE¬BHÓB±/´B†J¬B lÑB–”´BiI¬BH½ÏBÖÞ´Bæ7¬Bt ÎBµBk ¬BXÌBøµB¸«BòªÊB|µBXG«BíÉB³µB¡ÖªBé^ÇBêµBêhªBq¸ÅB» µB ªBÅÄB}è´B-–Z²BAåáBçÕ€B³B<-áBã:‚B²[³BëàBRȃBcb³BÄFàBÆu…BøJ³B+TàBÄ(‡Bx%³B/ÉàBˈB÷²B„áBRŠB!ª²BÉâBè‹Bq8²B†eâB÷ƒBÆÌ±BLÛâB¤B1±BmiãBr®BqO±B²äB“D’BÔ-±BÑžäB„Ù“Bs±B¹OåBcg•Bè±BYæBéæ–B=6±BUÿæBº[˜BÅd±BøÍçBâØ™BD„±B¥ièBßn›BQ•±BÒÔèBB-‰±B,öèBjÇžBžh±BÊèBÈw B–?±B€aèBö¢Bî±BØÊçB ´£Bî°BçBõ4¥BÝʰBÞæBg¦¦BlÁ°B åB ¨BDÔ°B@äBEX©B¡ô°B·ÙâB7‘ªB“±BÖ”áB˜³«BS±B‰8àBòº¬Bå±BÖÞB º­BX ±BkÝB‚¬®Bû5±B¶òÛBE‰¯BHP±BájÚBÀH°B=n±BCÖØBë°B3ˆ±BÇ6×B$p±BO±B;ŽÕBõÕ±Bl²±B¯åÓBÅ;²B™Ë±Bs7ÒB䄲BÓñ±BÖ†ÐBâ¶²BŠ$²BzÕÎBTÒ²BÉi²BÝ%ÍB…˲BdÀ²B7{ËB¶£²B%³B\×ÉB`_²Bª”³BL:ÈB²B,Si´BI(áBº€BÉì´B~0àBž‚B½4µB\nßBhˆƒB†7µBßBÔ2…BµB ßBÕä†B-Ø´B?ßB§‘ˆB&Ž´B¹°ßBó/ŠB$7´BNðßBEÖ‹B^Õ³BàBc~Ble³B'àBF#BÌÔ²B<àB޼B-D²BôbàBÖU’B¦Ÿ±Bÿ¢àB@ä“B÷B±B«éàB>ˆ•B ±BþMáBE.—B»þ°BëáB6ĘBÓ°Bè¿âBm>šBæ °B¶ÆãB—›B*‘°B¨´äBeB¦°B‡eåB`’žBÆÇ°BËåBé8 Bà°B¦ÚåBÂë¡BBê°BËVåB(‹£BàÙ°Bé“äBì¥B`¾°BóºãBBЦB¤°BGÏâBcø§BF£°BµÆáBRS©B˜¯°Bd–àB÷‹ªB«»°BÕGßB=¤«BµÄ°B[ìÝBˆ¬¬BZã°BܵÜBÏÝ­B¶±BõŒÛB ¯Bd=±BQBÚB4°Brb±BÊØBª±Bµ±BÀ4×BC¯±Bؘ±B]”ÕB¨1²B,®±BëÓBe”²BEɱBh<ÒB#Ú²BKò±B€‹ÐB³B“(²B4ÚÎB ³B½n²BÆ*ÍBƒ³BªÄ²BÞËBí²B(³BaÛÉB²ª²B¯–³B³=ÈBS²Bt~¨Bk(ìB:hœBÉ ©BfëB ÔB1|©B.ªêBMŸB¢Û©BêB,Õ Ba1ªBúOéBjX¢BVyªBµmèBNÆ£B–²ªB¹açBÛ¥BqàªBm8æBV¦Bý «B åB„§B/8«BŸâãB̨By[«Bš«âBYü©Bp«Bÿ]áBD«BÛt«B¹ûßB¬B‰«BŠÞB9ü¬B쮫Bl ÝBÅË­B¾Ì«Bê‚ÛB`‰®BlÇ«B4óÙB»9¯BÖ˜«BT_ØBªÙ¯BÐb«BÐÊÖBu°BË,«BK6ÕBp±BïñªBŒ¡ÓBôª±BêBqÒB,:²Bÿ¬ªB ®BBâB¥S¬B_-®B-¼àBVX­B?®BåÚB‰×°B¨ª®B:SÙB«±BD«®B±´×B ²Bý¢®B ÖB‰²B¿–®BnÔBf³BÊŒ®BšÇÒBßp³BÑ“®BsÑBNͳB ¬®BAnÏBÿ´BÀÍ®BÁ¼ÍBLD´BŒù®B ÌB;U´BR(¯B{WÊBN´B!Q¯B‰¥ÈB7,´B=qp¿B¿ðïBäuB¨Ž¿B;QîB3ìvBúÔ¿B2êìBKÉxBY$ÀB©ŽëBÇÁzB»pÀB¨AêBƒá|BDnÀBýéB¥BB,ÀBXççBàà€Bòé¿B´ÅæBn ‚B¯A¿BËØåBjeƒBo¾BXåBHˆ„Bÿ¾¼BÏåBs‰…Bå\»B{åBC††B*5ºBwVåBÓ¾‡B2ô¸BNsåB}ãˆB1‘·BèBåBZÚ‰BŸ0¶BåäBkÇŠB¶È´BnäBÜœ‹B7d³BŒ*äBùŒŒB®²B°äB.¨BOü°BFäBçïŽBž:°BúJäB»sB¢Ë¯BYƒäBi’B¨f¯B×ÃäBw¸“BÀ0¯B©OåBãQ•Bß>¯BØQæBE±–B´Y¯B7WçB† ˜BPƒ¯BìEèB.x™B—°¯BáéBÚõšBÓ¯B.¹éBˇœBØî¯B*@êBZ%žBð¯B“”êBøÐŸB¡Ò¯Bt¬êB%ƒ¡B®¯BmêBÏ0£BªŠ¯BoçéB>ΤBIp¯B€éBÁM¦B7[¯B=,èB-»§BŠI¯BZ7çB¿#©BŒ<¯B#=æBÞˆªBþC¯B?0åBjà«BôW¯BÆäBg­B p¯B–¹âB+9®Bt{¯BaáB)E¯B…¯BúÿßB"F°B&Œ¯Bµ“ÞBÃ6±B(ª¯B'ÝB’²BЯB¯†ÛBÔ¶²B‘æ¯B íÙBšM³BŠñ¯B½KØBºÎ³Bû¯B¦ÖBA´Bq°B)ýÔB§´B±°B±PÓBü´B1°BçŸÑB%4µB×V°BNíÏBÅPµBEްBÅ;ÎB[µBCÕ°B‚ŒÌBQµBú ±B ßÊBE2µB>m±B¢4ÉBT÷´BîÁ±B‘ÇB¬ž´B7%²BgòÅBs>´BΓ²BVÄBmà³Bƒ³BŒºÂBƒ³B&ßç©B·ëBª¢šBo©ªB ëB0œBbG«BÖ_êB·qB£®«BþÌéBöþžBPô«B>OéBzš B‘(¬B\¬èB„+¢BÕR¬BŒÕçB½¤£B}¬B½þæBõ¥BŠ›¬BþåBf}¦B]°¬B¹åäB6˧BǬBWËãB©BVå¬B«âBÓ]ªB¥­BÃváBñ«B.­B$)àB马B·­BHÇÞB«©­Bg3­B[ZÝBÁ˜®BŒR­BâÛBXt¯Bio­BZ]ÚBË9°Bþu­B×ËØBæ°B‹b­BÔ/×BHv±BQF­B‘ÕBý±B #­BòðÓB¥}²B+­B³MÒB›õ²Bíþ¬BK¦ÐB¤a³B™ ­B€ûÎB^¿³Bú ­BJÍBYø³BU­Bu•ËB3 ´B5è¬BJáÉB>´BR¯¬Bp0ÈB¼ó³BY¬B‡…ÆB8ѳB/þ«B ÜÄBŽ©³B¸¡«B“3ÃB5{³BÎ+«B_•ÁB2³BeªB# ÀB?˲BÏÓ©B^”¾BäQ²Bà ©Bn%½BÒÔ±Bj0¨BÇÁ»BôW±BÉ>§BbqºBóϰB0]®BBâB2*BÁ®Bj âBP‚B L¯B¹îáB:^„B@ç¯B] âB5ò…B®^°B=–âBW„‡B—аBcBãBx‰B¤y°B:ÙãB/«ŠBÒ&°Bš7äBœLŒB‰²¯BµväBàëB4¯BÝ¥äBAŠB`©®B?¾äB¦&‘B¯®B¡ÖäB Ã’B2Ê­Bw;åB¡b”BqÙ­BD2æBÿÉ•BÑí­BRPçBâ—BQ®B2JèBóv˜B+4®BëéBõ™BV®BzÌéB倛B9t®BÉwêB¯Bh‹®B±ëB¦žB |®B-jëBˆQ BI®BYWëBõ¢Bu/®B;ôêB¦©£BX,®Bv=êBŠ5¥Bz.®BJéB‘Ÿ¦B 0®B KèB…¨B@0®BãFçBÃ_©B•1®Bu?æB»ªBàB®B(åB­ ¬B<[®BüãBZF­BÞp®BкâB#m®B(€®BUgáBN¯B­‘®B×àBÚ°B¯­®BÚšÞBp±B€Ó®BÝBM>²BØÿ®BÂŒÛBKë²B’ ¯BsðÙB•{³Bl ¯BáLØBÙõ³B¶¯Bó¥ÖBùc´B=¯B ýÔB`Ê´BÞ ¯B]QÓBa$µB®¯B6¡ÑBAdµB 7¯B©îÏB[‹µBýc¯BF<ÎBßµB§¯BQŒÌBΙµBªî¯B7ÞÊBîyµBñ+°BK1ÉBº?µBøf°BŠÇB—ã´BAh×·BBÃçB’‡Bv¾¶B“KçBoȈBc¹µB†çBj ŠB¯Ï´BçBé‹Bi´BDçB%Bi³BlzçB墎BS³B;³çB HB€¾²Bû!èB'ç‘Bà‡²BˆÔèB;q“B>l²BÍ®éBÚé”Bïh²BmcêB¸v–BËz²B¸çêB³˜Bà“²B:*ëB²Ã™B¹¯²B1ëBŒv›B›·²BÅëBH)B€š²B8ÖêBÇמBb²B‚qêB&| B6&²B/"êBs$¢Bbæ±BcÔéB…Ì£B»¦±B¯YéBëi¥Bg±BûÞèBQ§BeC±BèB*ˆ¨B)8±B5çBï©BE±B æB1B«BY±B»õäB’¬Bmn±BüÜãBóß­B²}±Bß¹âBº$¯BY{±Bs‡áBŒ[°BNp±B¡=àBZy±BPs±B(ÕÞBão²B¡„±BŸOÝBö4³B±BÚ·ÛB1гB»±BÚBT_´BÇà±BX~ØB0ç´B¥²BéÛÖB_µBï,²B12ÕBT»µBcM²B¬ÓBèñµBâv²B(ÏÑBc ¶Bž®²B‘ÐB(¶B{ó²BnÎBöµBž?³B ÀÌBóàµBq‘³BÚËB(ÁµBaó³BOnÉBŒƒµBäd´B”ÐÇBá/µBã´Bå5ÆBß´BSlµBœÄB$›´ByúµB%ÃB\´B?¤¶B|ÁBÓ´B¢m·Bí ÀBe‡³BJ¸B–­¾B8ü²B$'¹B(J½BѲBìºBÂí»B²B× »B¬¥ºBÁ¥±BT¼BL{¹BåR±B„«½B¤q¸BU,±B¿Bƒ·Bî.±BùÀBœ«¶B?R±B*ÂBhÞµBŽx±B‹ÃB µB:±B:ÅB1´Bo›±Bž{ÆB"U³Bû¯±B9ìÇB.n²BȱB*UÉB·z±BàÙ±BQÄÊBf°Bsä±Bç6ÌBa«¯BØâ±B$úµB>ÐãBç{BÙU¶B6²âB+`~Bx¾¶Bì•áB4j€BÁ·B-ùàBqõB’7·B; àBjŸƒBk·B—àB@P…Bؽ¶BéÎàB‹ú†BBb¶B6eáBs‰ˆB¶BË3âBYý‰Bt¹µBè·âBk–‹B_yµBçâBäBB!µBØãB¬ìŽB¤§´B&ãBØBo ´B^ãBi(’B>Á³B¶©ãBùÊ“B³BáäBs•Bí9³B mäB’—BÖä²B_ÚäB ®˜Bþ¸²B…¬åB¸)šBŸ¡²Br˜æBç—›B©²B¥“çB}üœBM¿²B èB±SžBžâ²B!}éBúÉŸBj ³BUØéB6r¡B,,³BçÛéBÃ$£B6³BëáéBñפBjŲBìÚéBT„¦BjвB`éBa"¨BLv²B¾‚èB©™©B¾‡²BSnçBÚêªBc—²BWlæBZJ¬B,›²B1‰åB²¾­B㜲BÀ³äB ;¯BÚ¡²BÓãB-±°Bi¡²B›ÂâB޲B²Ÿ²B>‚áB.³B+"ìµBž´âB0÷}B+P¶BË‘áB;1€BŒÂ¶BÝmàBÌ`B|·B ÜßB[ö‚B› ·BjŒßB¢„Bí×¶B@„ßBªS†Bâ¶BÈßB$ü‡B8>¶BÑ[àB'މB>éµBtÏàBË)‹B¯µB¨ùàB:ÒŒB6µBÝ#áBªzŽBδB©áBÐ!B:E´B6áBU¿‘Bg“³BÒáBM“BÈô²B-=áB¼à”Bðœ²BÛ™áB‚–Bf—²B×âB•!˜Bîf²B£ËâB°­™B[²Bµ¯ãB›B£Å±B-§äBÇvœBµ±B†|åBÓòBðıBmæBTŸBYÖ±BgæBº7¡Bé±BÏTæBÁê¢BvÕ±B‘¼åBÑ‚¤B#¨±BÔôäBʦB?z±BìäB}§Båg±Be)ãB(å¨B}±BÖâBã1ªB„—±B—ÜàBÌf«B|¬±B9’ßBvƒ¬BÔº±B‰DÞB§œ­B¡á±B"ÝBà®BL²BÚûÛB°B¢9²B#¬ÚB 3±BFZ²B1ÙBÇ ²B4}²B‚ ×Bß´²BI ²B‚ÖBb9³B²B‡VÔB³³Bê²Bµ¥ÒBP¿³B#³BŒôÐBJϳBâl³BêEÏBB«¿³Bâ™ÍBwŸ³B0Ñ6¯B@«âB°Ç€B^¹¯Bë!âB6P‚Bm°Bè¼áB×íƒBq=°B…áBQœ…B©Y°B6¤áBN‡B,o°BØ"âB§îˆB†e°BY¯âB>‹ŠB~-°B)ùâB'5ŒB—Ò¯BÇãBÖÞBÜ¡¯BLIãBý‹B–¯B™³ãB’2‘B&–¯B*NäB=Ê’B¹–¯B®!åB¤G”B.Ÿ¯BN æBÈ©•B—º¯BÊçBý—BDå¯B4ìçB‹˜Bï °Bƒ£èB šBD+°Bc5éBN®›Bý<°Bš›éB©UB‰+°B1µéBcŸBZ°BâéB︠B æ¯Bè#éBq^¢Br˯BùwèB=î£BݯB ÌçB ~¥Bj—¯BíæBYô¦B,‚¯B#ûåBW^¨B(z¯B3üäBFÀ©Bú†¯BêãBõ«BÀ°¯BSÁâBÃP¬B ˯Bm}áBIt­BÕ¯BÚ&àBÓ‚®BÙ¯B®ÄÞBE‚¯Boê¯BBYÝBãs°B2 °BÛÜÛBPH±Bà)°BBQÚBÿ±B¡=°BJ¸ØBÖ—²BH°B_×BF³B“R°BÛpÕBXгBÙ\°BâÇÓBð³Bt°BýÒBÄ;´BÛ›°B3iÐBÜj´B,ѰBß·ÎB´Bˆ±BtÍB߃´Bó\±B:YËBmq´BBí­ÉB@C´B²BâÈBÞ÷³BÍo²BTkÆB°˜³BPà²B|ÏÄB ;³B0ŸÛ®BnUãBŠž‚Bo ¯BYãBïG„B~P¯BxãBØø…B–¯B8ãB§‡B²¯BßµãBqE‰BC¯BãäBîŠBOL¯BZTäBÈ•ŒBºô®BH¢äB˜9ŽBh»®BŸ'åB²ÔBZ®B†äåB[‘BÇp®B€ÍæB¿Ê’BÍ|®BrÑçBé(”B-¥®B‡ÅèB"•BüÇ®B’‹éB —BZä®Bà&êBk©˜B¯BPÌêB`;šB¯'¯B¿qëBTÍ›B»Q¯B‡&ìBØWB1X¯B>°ìBjõžB¯BñâìBÕ¡ B§º®B%±ìB H¢Bþ®BR4ìBµç£BZ‰®B‹vëB=p¥B¿ˆ®B=‡êBõܦB…®BaŠéBs@¨B(‚®B‰èBÉ ©B­}®B¾†çBO«BÐ}®BÑvæBŒU¬Bs‡®BíMåBL•­B€“®BJäBp¿®Bnœ®Bª¾âBYÕ¯Bȧ®B˜báBÉܰB渮BüßB†Õ±B,Ì®BXÞBo®²BsÝ®B;óÜBªa³B>ç®B%XÛBšõ³B¦å®B9·ÙBšx´BàÙ®BþØBvì´B=Ö®BGiÖB‘SµB Ü®B ½ÔB¹­µBÚè®BLÓB™óµBËø®B´[ÑBü¶B©¯BͧÏB7¶B\:¯BÆôÍB'C¶Be{¯B—DÌB/8¶B€¿¯B—ÊB† ¶B;÷¯B£ëÈBÁµB3)°B>FÇBçYµB.¸¡«B›“ãB‰€Bº½«Bˆ«âBÑqBöÔ«B âBùƒB‰ä«B|»áB}²„Bó«Bà¯áBèe†BǬBïÄáBAˆBö;¬BIøáBÂÆ‰B,Z¬B $âBPw‹BÇh¬BÝ6âBz*BRr¬BzAâBÞŽB©|¬B¹pâB2Bƒ¬B‚ÎâBÑ8’Böw¬BjãBóÏ“Bï^¬ByMäB^C•BÙX¬B¦EåBª–B‡o¬Bû%æBn˜B˜¬B äæB½¥™B“µ¬BÉ|çBþ<›B Ó¬BˆèB>ÔœBæ¬BŽèBÜvžB¾­BéBd Bµ­B’ÜèBÌ¡B¨6­BÈ]èBPl£BzN­BHžçB_ó¤B`­B9®æB._¦BEi­BÌŸåB{µ§Bèu­BaŽäBN ©B²‹­B,uãBIVªB®­BNâBò•«BÊ­BL áB›º¬B’Ù­B#³ßBèÆ­B[é­BULÞBc¿®B2®BÚÜBt¦¯BU&®B„\ÛBcw°BØ<®B…ÏÙB€,±BŽ>®BG5ØBñBë/®Bð“ÖBÐC²Bp®B0ñÔBG¿²BV®BbMÓBD6³B†ý­B¾¤ÑB„³B ®BªøÏBÿô³Bv ®B¤HÎBÓ3´B:®BY•ÌBS´BÓT®BþàÊBU´Bu_®B[,ÉBµB´B¶P®BzÇBc´B! ©Bo}îB'œB¼©BlÅíB¦†BÔ2ªBíBµúžB—„ªBÈ@ìB1x B[ÖªB~ëB­õ¡B†'«BcºêBÞr£B?r«BAòéB ï¤BU®«BóéB°Z¦BÀÞ«BJúçB­§B¬BéÚæB³ó¨BS%¬B¹åBc8ªB\I¬BJ”äBz«BTp¬BÔkãBó·¬BW‹¬Bž7âBÛë­B¦¬BÖîàBÞ ¯B“ϬB’ßB` °B²­Bë$ÞBî÷°B¯2­B7§ÜB|ƱB8]­BlÛBtx²BÓT­B4~ÙB= ³B²+­B9Û×BQ~³Böü¬BG7ÖB®í³BˆÌ¬B“ÔB>[´Bx¤¬B±ìÒBøÃ´B•¬BßBÑB4%µBÈ ¬BJ—ÏB-µB¡¤¬B›æÍB5½µBN ¬B¹2ÌBôݵBò„¬B¦~ÊB¨éµB_G¬BÎÈBIèµB’è«B£#ÇBäÞµBoƒ«BßzÅBïеB×"«BþÑÃBK±µB#¼[£B(˜àBÑ9~BçV£BÕ&áBÖ¸€Bk£BQ‘áB_‚By£BðáB=„B‚£BFâBY³…Bœ·£BçÑâBàL‡B.!¤BÁãBÇLjB@©¤BÐUäBN2ŠBÑ0¥B¿åBj£‹B†¹¥BÌÑåBûBN>¦BÍ¡æBEyŽB¤¦B‹çBJÛBâ¦Bu‚èB=‘BQ§B<éB.Ä’BlO§BAžéBíh”BŸ§B‰ØéBâ–BÁ²§BaØéBãÆ—Bwæ§BA¤éByt™B,¨B péB"›BêO¨B)éB&ÊœB¬¨BÓ3èBF0žB†©BÏEçBó’ŸBK©BχæB¡BØ|©BúéåBi¨¢B©BŠåBפBªBäBUs¥B:ªB+úâBHŦBNnªBŸØáB¯¨BªB¯œàB3©B¿¢ªB¾KßBHªBx¦ªBžçÝBÑD«B´´ªB¶yÜBá2¬B-ÒªBÿÚB§ ­B˜ìªB”zÙBÜЭBûèªBŠñ×B—®BØm¨BÁêíBFBJÖ¨BÞ^íB†ÕžB©B–ÏìBój BVi©BJ"ìBãó¡Bo¶©BîYëByo£Bðþ©BRyêBEÞ¤B+>ªB néBN1¦B|tªBAIèB_p§B¡ªBÐçBŪ¨B¥ÍªB]òåB*å©B:úªBìÆäB«Bß«B œãB@\¬B¬5«Br]âB1…­Be«B8áBñŽ®Bÿ«B­›ßBÊ{¯BuÓ«BF ÞB§M°BØù«Bõ”ÜBıBýî«BNüÚB ž±Bέ«Bg^ÙBá²B…Z«BÁ×B޲BI«B%ÖBB³BE½ªBJ†ÔB¤v³BO—ªB×âÒB(ë³BXqªBe?ÑB«_´B“nªBþ™ÏBˆÓ´BþYªB¿íÍBi(µBë,ªBÅ=ÌBYµBŒá©BÊBqµBx©BGèÈBV|µBö¨BeGÇB¡uµBJÇ£±B1âB$€B—x²BöuáB fBG³B|ÁàBÙ‚Bù7³B‘RàBÛ{„Be,³B@$àB-†BL³BUàB ݇Beæ²BgïàBör‰B’«²B]ŽáB³‹B;N²BœÿáB.ŸŒBˆÔ±B»\âB;7ŽBlv±BùàâBÛËBû;±BuãB¾a‘B%±B¬ äBƒø’B$þ°Bñ³äBÓŠ”BJñ°BAvåB–B–ü°B&QæBŠ—Bf*±B%7çBÉù˜B;S±BŽôçBb€šBÎl±B¶èB¶œBr}±BwÙèBéÆBi±BzÝèB>zŸB•C±B«èBu%¡Bd±BÜèB•Å¢BŽõ°BLdçBÌR¤BƒÍ°B¢‰æBÊ¥Bí´°B$šåBÄ5§B0·°Bµ‘äBͨBs¹°BF‰ãB×ë©BذBÛhâBï1«B)ø°B*0áBÒ`¬B¾±BãßB{­Bí ±B³‹ÞBDˆ®BD±B.>ÝBK¡¯BÖ@±BéÛB¯°B„b±B`wÚB–±B6|±BÇéØBaI²B¿•±B[P×B à²B`®±B&­ÕB=Y³BâűBÑÔB²³BÜç±BÎQÒB±ë³B ²Bs ÐB´BôY²BøïÎBB ´B6£²B5AÍBéü³B‹÷²B¸•ËBwÙ³BJX³BðïÉB…›³BHųB#QÈB#G³B¶?´B¶ÆB ó²B;Å´BGÅBcª²BBRµB’„ÃBSd²BÅêµB‹óÁBI²B$¶BuÀB? ±B¯Y·BÉÿ¾B"±B2¸BÀ‰½Bû¢°B$ê¸B!#¼B##°BÏà¹B‚׺B –¯BSñºBv§¹BÀü®Bs&¼Bg¸BH{®BÃx½B§ˆ·B¬-®B¥Õ¾B¥…¶BF ®BN0ÀB'~µBE÷­BΉÁBéw´BÌ­B™êÂBg}³BÖ—­BPÄBÒˆ²Bäg­BǽÅBüž±BbB­BÇ*ÇB·°BŽ ­B[ÈB’ƯB»½¬BRûÉBã®Bj}¬BxuËB!®B1S¬B:öÌB›C­BcE¬BüwÎBy…¬B)¬BrðÏBÛ«Bäw«BªZÑB÷,«BЪB—ÃÒBì|ªB…'ªBÚ(ÔBDÛ©Bj©B#Ïá¹ByßBÅyBðʹBzúßBo}BÆï¹B[àBG€BºB<$áBX²BëDºB.ÁáB*FƒBºBzOâB à„BÁœ¹B:ÆâBSp†Bë¹BljãBí‡B¸BÆLäBµH‰B•õ·Bð?åBÑŠBn,·B÷åB@å‹BH8¶B\LæBúCBÆUµB‚»æBB§ŽBbŸ´BòçB„,B6´Bö%çBóÑ‘Bß³ByçBæt“B»³BÄõçB •B M³B,•èBaŸ–B .³BâHéB‡+˜B7³BúýéB¸™BL³B}xêBêY›B0g³Bb£êBà B×y³BœêB¾žBˆ³B:têBâo Bf³Bu;êB{¢BÌ¡³B%êBµÒ£B”s³B/.êBüƒ¥B^!³BNêBM/§Bò²Bð~éBfŨB¤í²BшèB-ªBü³ByçBF‚«B‰³B&›æB¿ù¬Bû²BŸèåBf‡®B…ì²BÉIåB+°Bhô²BžväB°š±B#Í+©BlãB\€B û¨B‚GâB ÁB+˨B)láBí6ƒB¨¥¨B°áBà„BÏ ¨B áB½“†B¼ô¨BCéàB(>ˆBÞ“©BþŸàB͉B*.ªB&XàB$^‹BãªB;&àBŸB¿ªBTúßBÁ²ŽB~±ªBŒçßB÷eB9`ªBÉàB[’B·ñ©BŒYàBI¯“B*„©BÉàB3F•BÕ©B iáBÈÌ–B¹ü¨BB/âBiP˜B?©By)ãBq¯™BN©B¯#äBz›ByÔ©Ba åBgvœB4ê©BCåBžB ΩBI´åBqÆŸBÌ©B8~åBév¡B ò©B,ØäB6£BW9ªBíãBËp¤BªBÒéâB´È¥BuÁªB3ÐáB^§B;ñªB4¢àBÜF¨B›«BÙTßB`©Bd «B«óÝBÆ`ªB­«BDŠÜBÏU«BO*«BËÛB©:¬B›C«B`™ÙB$­BîF«BòØBàÙ­Bè-«B¬ÖB‰œ®BÈ «BøÕBWV¯BI‘…¯BopáB¤¢€Bí°BWÏàBƒ‚B2Ú°BQŠàB¹œƒB3˜±BïœàB,$…B%.²B¥þàB[±†BÀ€²B4ÆáB,ˆB9޲BÇéâByp‰BŒ`²B/ÐãBàŠBê±Bµ]äBkŒBüh±B¤ÁäB2ÿBc±B5åB‰™B5Ô°BæÀåBŽ2‘B8§°B9mæB•À’BI°Bî=çBÜ>”Bì“°B8èBÚ·•Bü¨°BhßèB¶;—B ˰B-‰éBÕ˘Bvë°BaêBMišB+ ±BqêBóœBS ±Bé˜êBõÂBæ°BP€êBŸtŸBò±°Bl4êB”¡B\†°BžÍéBëâB™_°B-éBiW¤B<°BJZèB‰Ó¥B6$°B¡lçB‡@§B´°B!mæB¢¨B¢,°BØXåBró©B<°BDäBÓD«B$c°B‚ãBA‚¬Bò}°BàáBî­Bb‡°B¬“àB»É®B ƒ°B·8ßBÐÒ¯BqްB©ÔÝBkϰBe©°BÑ_ÜBd±±BQȰBÙ×ÚBëo²B?à°BiBÙB+³B“ô°Bì£×B>š³B ±BDÿÕB´Bö±BÐTÔBñl´B±7±B‡¥ÒB ¯´BÏ`±B×óÐB´Ó´BÇš±BŸBÏB1Ý´B5ß±BÚ’ÍBë×´Bø+²BûäËBï´Bø€²B¢:ÊBî”´BWá²B –ÈBˆK´ByN³BåùÆBÃí³Bñ¿³BE^ÅBP³BN8´BÃÃBÔ9³B@»´B˜+ÂB^á²Bc^µB¤¨ÀB¬h²B‡¶BŽ4¿BÈà±BÕ¶B¸Ã½BÜX±BÛœ·B0W¼BáÒ°BÇ}¸BvÿºBÞ>°B²y¹B¹Bל¯BסºBD ¸Bg¯Bgò»BŠ˜·Bg¿®BxV½BBåš®BW»¾B ¦µBA®B‘ÀB,¤´Bº…®B7~ÁBý¨³Bs®B3æÂBª´²BŠZ®BpOÄB¼Á±BLG®B$¼ÅBäÓ°B7®BI)ÇB6è¯B ®B”ÈBïø®BÜ÷­B0ÊBÉ®B¸ä­BmxËBÕ.­BjØ­B5ìÌBîK¬BÂÏ­BLcÎBq«Bµ­­B•ÔÏB•ªB{­B(Ÿ¸B`1çBO1†B2=·BòæBLJBxåµBæBªú‡B&}´BøÜåBÅèˆB;0³B:æBNþ‰B~ ²B¡TæB²8‹B1±B)±æB¥ŒB~°BP çBt(ŽBªë¯BiŠçB8®Bb¯Bš3èBÇ'‘BدB­éB©’B®Ó®BÀÝéB‹”B­î®BÛÉêBJ•B< ¯B)ŽëBs—B¯Bâ"ìBŸ˜B²/¯B²©ìB=šB«P¯BcbíBªÆ›B*x¯B7JîBø5B¯Z¯BðïBx¶žBÞñ®B ¿ïB{: B[j®BŽ>ðB´Ä¡B#(®B‹SðBör£B®BïðB›"¥Bé!®B>UïB¤§¦B:®BEKîB®¨BÇM®Bs-íBÞI©B`®BìB0•ªBÆt®B5÷êBßà«B€†®BÖéB³'­B®Bù¬èBÙf®B®‹®BDvçBd™¯Bn‰®B²*æBeµ°B»‹®B­ËäB$¹±BØ’®Bu_ãBª²Bn™®BíáBn‘³B®›®BüvàBðr´BhŒ®BêÞBí(µB“g®BŽLÝB$±µBü:®BJ©ÛBç#¶B¿®BdÚBV–¶BI c²BC>áBÓÓ€B} ³B°màB,,‚BÒb³B?¸ßB°®ƒB|h³BwlßBß[…B¥I³B‘aßBx‡B€³B¨–ßB컈BšÏ²B¿àBë\ŠB™z²B¼HàBPŒBs²B¯sàBVªBµ±B‹ìàBs?Ba±BîŠáBëÌBõ1±Bè+âBd_’B±Bx¿âBæø“Bí±BsPãBÿ“•Bv±BäB\—B·±BÖýäB£‰˜BI ±B›ðåBÞó™Bˆ ±B ®æB%|›B„3±BÃ5çBøB.F±BÛ„çB-ÆžBX±BÜŠçB”y Bñi±BÜçBû,¢B„l±B3;çBYØ£BºA±Bš™æBk¥BP±BnÉåBç¦BÉò°BžâäBX¨BÃï°BãÞãBž¶©Bâ ±BÂâB5«B¼,±BáB4¬B·B±BÙIàBöV­B‰?±B«ðÞBZb®BNO±BJ¥ÝB,~¯B¾l±B§TÜB­’°B±B«ëÚB †±B몱B÷eÙB­I²BRƱBŸÐ×Bžê²Btâ±BG0ÖBl³BHý±B­†ÔB†Ì³Bã²B×ÒBÑ ´BÉM²B§%ÑB(´BŽŽ²BLuÏB*´BvײBtÆÍBm´B+*³BeÌBü³B÷ˆ³BlsÊB}óBõ³BUÓÈBnt³B™p´BÞ7ÇBð#³B­ú´B·žÅBnà²BŒµBIÄB¢²B’"¶B sÂBØ[²BsÒ¶BFðÀBþõ±BK‘·B¤z¿BX|±B™R¸Bˆ¾Bùþ°Bh$¹BÜš¼B³‰°BëºB¢F»B °B)»BÙºB˜„¯BZ¼B¹ñ¸BŸ¯BVª½Bqæ·Bè»®B¿B.ã¶BCš®B¸`ÀBhÚµB…®B¹ÁBDÓ´BKV®BÚÃBÖ³B;®B–vÄBóÛ²BpÞ­BºÞÅBûë±B«­BSGÇBÊÿ°Bòk­B7¦ÈBŒ °BÔ­BÊB(¯BôʬBë‰ËB™R®BN—¬BýÍBË…­Bx¬BŸ‰ÎBɬB&*¬B¼ÐB¤&¬BÆ–«BéjÑBbƒ«BbâªB÷ÑÒBÔܪB¹,ªBþ4ÔB²HªB­`©B,¬?¶BKFãBâ/zB†¶B5(âB̳|B)ζB”úàB BŒ<·BÖCàB0 B£„·B‘ÔßBi¨‚Bž‹·B’•ßB W„B,W·BqŠßB#†Bä·B»ÊßB¯‡BÍ£¶BÏVàB£@‰BhL¶BWÛàB¬ÖŠB;ðµBª áBæ}ŒB±ŒµB-áB&ŽB] µBXëàBPÅBd´BFåàBX‘B<·³BháBÅæ’B‚o³B‘ƒáBŽ”BhY³BýèáBì(–B¬+³B»}âB5À—B زB1XãBa0™BS²B˜'äBC˜šBαBÿöäB%œBÏ»±BÞÆåBBËÆ±B`æBðŸB*رBÃæB¿ Bjì±BvÑæB/r¢Bê±B°eæBŒ¤BÞº±B^«åBퟥBBÏÛäB/§B?i±B óãBÀ‹¨Bq±B¿åâBèâ©BûޱBÀ½áB>"«B-¬±B"àBYM¬B$¸±B.ßB"`­BÒ˱B`òÝB®Búî±BœÂÜByįB ²B®‚ÛBƒê°B 9²B²ÚB1Õ±BåV²BLjØB¼²B*z²BêðÖB¥&³B¼œ²BÝKÕB¼–³BÁ¼²BóœÓBõسBÿë²B£ëÑB–ú³B!,³B0;ÐBVý³Bix³B/ÎBCé³B3½*·B èBSR‡BѶBî˜çB€ˆBÿÜ´B¯yçB.º‰B€·³B˜¡çB\ùŠB‘¦²BìðçBiCŒBÅ̱B8AèB$´B<"±B-–èB•Bï°B ìB,Ù–B)°BÅìB/z˜Bz?°BéíBšBVU°B íBîµ›BËo°B'>îBÈDBUK°BèîB¹ÔžBàá¯B:‡ïB³\ Bµj¯B$íïBjó¡BG)¯B…ØïBÌ¡£B„"¯BØVïBòA¥B1¯BÏ‹îB£Ã¦B F¯BÐŒíBü$¨BCP¯BƒìBê~©B¿O¯B‰}ëB ܪBÐQ¯B\oêB¼2¬BXN¯BpQéBc|­BÏ8¯B¦$èBß·®Bˆ&¯ByáæBÁܯBk&¯Bb†åB´å°Bp7¯BSäBBбBóN¯B@ŸâB뮲Bl¯Bè"áBÒƒ³BI‹¯BF›ßBýB´Be¡¯BfÞBJÞ´B¢§¯B¸_ÜBXµBw¬¯B1»ÚBϵBZ°¯BÙBëC¶B껯Bm×BK©¶B÷Ô¯BU¿ÕBdõ¶BIõ¯BWÔB4(·BÊ °B;ZÒB>·B`°BR¥ÐBK;·Bm4°BñÎB¦4·Bsk°B‰?ÍBY)·BË·°B"’ËB# ·BÚý°BöæÉB&ζB»A±BŸ@ÈBt¶BJŒ±BÜÆB[¶Bç±B¢ýÄBŠ­µBÈU²B^aÃBˆOµB J©B¢ ðBúCœB.ªB°,ïB)—B]°ªBÒ9îBDéžBõªB5[íBþY BÝ7«B<ŽìBÕ¡B¨w«BoÀëBDP£B{±«BVàêBùÁ¤Bãâ«BpÛéB,¦B‡ ¬BXÁèB£f§B,4¬B@§çB±¨BçQ¬BlˆæBªø©BHq¬BVgåB>«B°•¬B‰AäBÅ~¬B²¬B?ãBû½­BZȬB¡ÜáB¬é®B>é¬Bš‹àBOý¯B­BŠ(ßBxö°BÝN­B\´ÝBnÕ±Bhˆ­B1ÜBC˜²Bø«­BÒžÚB>³BÆ•­BpþØBÏÀ³BÕn­BúY×BI1´BüI­B-´ÕBd´B€'­B ÔBdµB2­B_bÒB·aµBÈ­BÇ´ÐB_²µB€#­BÂÏB™óµB¯.­B©QÍB`¶B”7­BÆœËBÊ(¶B±&­BèÉBÚ"¶BSö¬BB6ÈBX ¶B®¬B:ˆÆB>ðµB38N·BåñèB®c‡B0@¶Bæ€èB¦ˆBm/µB?\èB|÷‰BÃ%´BðqèBãO‹B>=³BâèBð¾ŒBºT²BÓ¯èBý-ŽBè±B—ðèBÑ­B,þ°BF8éBáA‘BFˆ°BºéBÑ’B3N°BÙêBPP”B^W°B¹nëBy¾•BNV°BW.ìB1F—BÂ]°Bø¹ìBã˜B4p°Bc<íB¦‚šBf†°BÔíBÊœB(°B}|îBÕ¬BfW°Bì%ïB¼:ŸB‚Ú¯BhÄïB?½ B2o¯BOðBáZ¢Bá;¯BBïïB‡ ¤Bå6¯BafïBh§¥BcH¯B§îB "§BÓ]¯BÈ‹íBo€¨BWf¯B–€ìBDÙ©B¯h¯B¥xëB­4«B3m¯B€fêBˆ¬B¡h¯BFéBŠÏ­B¿M¯BKèB˯Be=¯BnÍæBn&°BÊ@¯BÃlåBí'±BV¯BøãB› ²B§r¯BŽ}âB÷â²B„•¯B/þàB†±³B%·¯B*sßB3i´B˜Ë¯B¢ØÝBžý´B$Ò¯BÙ3ÜB•sµBÁدBÌŽÚB—èµBÉ߯BŸéØB]¶BŒï¯B/@×B$À¶Bj °B$’ÕBr ·Bµ*°B“àÓBÚ7·B–>°B>,ÒBJ·BœM°BfwÐBùB·B-m°BnÃÎBU;·B-¨°BrÍB.·Bô°B9eËB{ ·B·;±B»ºÉB–̶B2ƒ±B…ÈB p¶B/Ó±BˆsÆBW ¶BN3²BDÔÄB…«µBÜ£²Bn8ÃBâMµBL–‡³BóàBЍ€B½ ´B'üßBéíB¨w´Bÿ*ßB™bƒB6‚´BHÊÞB| …B\_´B²ÞB?½†Bõ'´B„ÍÞB¬lˆBÀÛ³Bî ßBõŠB%‚³B 1ßBú½‹BD)³Bn6ßB™hBײBˆ-ßB€B»ƒ²BõqßBϺB”+²B’ àBI’BYð±BѦàBXÜ“BÇÔ±BJ4áBÏw•B€Ã±B©ÉáB —BÈ”±BÁœâBÜ‹˜B’[±Bé¤ãBlâ™B["±B­äBü8›B8±BÝœåB ¥œB† ±BYeæB (žBe7±B°ÞæBÊŸBÄJ±B çB6{¡BCY±B¡ÍæBu*£B§F±B9æBíäB±B}kåBB¦Blö°BˆŽäBC¸§Bé°BL”ãB\©BÓû°B¥}âB¦lªB^±BŠLáB|£«B&0±BaàBs¬Bî/±B!¥ÞBåÅ­BG±BùbÝB˜ë®B}k±B"ÜBF°B“±B ÇÚB‹±B„²±B×GÙBÍæ±BêαBs³×Bó‰²Bœê±B©ÖB¹ ³Bí²B"jÔB&n³B„$²BˆºÒBö«³BYT²B5 ÑB¤Ì³B§“²B§XÏBíгBòܲBæ©ÍB³Bç1³B£þËBß³B±“³B$YÊB¦_³B)´B+ºÈB ³B­€´B;ÇB“¿²B‚ µB•†ÅBÈ~²B™¡µB4ðÃB@²B <¶B^ÂB4ö±B;í¶B–ÜÀBó±B¡©·B²e¿BP±BŸf¸B"ï½B™š°B¦:¹B6„¼Bò#°BÚ0ºBÕ3»BJ¢¯BC»B|ºB1¯Bór¼B-æ¸BD‹®BÖÀ½B&Ú·B9®Bk¿BjÓ¶B¦®B–rÀBßȵB¹ú­BÉÁBÏÀ´BòíBx%ÃB€Ã³Bc­BK†ÄB§Ë²BÿA­BwñÅBŒà±B8­B2\ÇBBø°BŠÌ¬BQ¸ÈBº°Bëh¬Bä%ÊBã%¯B¬B ¢ËB“X®BÆä«Bî$ÍB ”­B¿«B\£ÎB Ú¬Bõa«B¿ÐB`1¬B[ªBÿtÑBo«Bdÿ©B~ÕÒBþðªB5©Bø3ÔB^mªB¼V¨BÁÕBOý©Büi§BæÖB¯¨©BŸj¦B>,ØB‡©B^L¥B#ý~»BYÅãBsÁzBô;»Bo°äB”}BeôºB›åBÎ2€B.ÀºBjzæBÖ¥Bw­ºBo\çBnƒB3£ºB|(èB»›„BO\ºBK¨èBw6†B4“¹BÅÃèB÷·‡B¨ž¸Bç‰èBª‰BK°·B£7èBÇ~ŠBcâ¶B‚õçBìø‹B?¶BpÐçB#‹BO¸µB½ÀçBA)BMµBEÐçBZÏBä´B0èBk’B„´B±ÒèBoô“BO;´BŽéB¾v•Bžò³BjLêBù–BùÔ³BzùêB1ˆ˜Bß³B7pëB€+šBFò³BéëB©Ý›B‘#´B’3ëBŒ„B?´BÚÛêB•.ŸBžL´BYêBÛ Bi´BìêBv¢B{ä³BZ·éB†¤B]›³BG—éBöË¥B¹Q³BÀUéB€t§BY+³B"¡èB€ÿ¨Bý2³B±šçBö[ªBRU³B­€æB5§«B|³BkfåBÃñ¬BK™³BräBþY®B,©³B6£ãB–Ù¯B¦³BcÁâB¼N±B:šì©BíqìB9šB»ÀªBCÊëBÈŽ›Bms«BÏ ëBköœBíà«B‘ŒêBvžBÝ"¬Bš êB: B S¬BȉéB๡Bž|¬BäÊèBÎ?£B‚œ¬B†ÜçB¿«¤B౬BÓÊæBêþ¥BóŬB³åB5M§BãÞ¬B;—äB¿—¨BÊ­BGsãB_Ú©BÈ­B,3âB«B(­BuÛàB ¬B4­BtßBï­BÁK­BƒÞB‚î­Bl­B7†ÜB îBJ~­B!ýÚB䀯BÅ{­BqhÙB¨%°B:h­BÍ×BÑ·°BŒL­BI/ÖBeA±BX*­B­ÔBìñB'­B(ëÒBÇ9²B­BÓBÑB¢²B!­By”ÏBïî²B“­BáÍB2³BZ­B£,ÌB›³BˬB/{ÊBI³BÂx¬BÏÈB¢ß²B…¬B(ÇBQª²BÅ´«BÞ„ÅBùf²B9J«B]åÃB˜²Bz¾ªB(UÂB¬±B¡ªB¢ÔÀB98±BT©B[`¿B“½°BꆨB©õ½B†<°BÓ«§B^™¼B¬¯BʦBñL»Bè¯B–á¥Bi ºBïJ®Bä¤BLѸBª­B0Ä£B¤¡·BF1­BÚ—¢B]}¶B¹º¬B™h¡BZµBH¬BÂ( B*9´B[ ¬BÔÛžB!³B­¬BåŽBå²Bÿ*¬BR3œBï±BÝb¬B‡ÑšBô°Bº›¬BÏl™B—¯Bó°¬B˜B2&®Bœ³¬BÀš–Bö3­Bqª¬Bš4•B°=¬B…•¬B½Ê“BÈM«B¹x¬B f’BWªB U¬B7‘BÍA©B|2¬BòçBÿ¨Bîì«B ÜŽBLã¦BTJ«BDËB5À¥BJ›ªB!V,©B1¬ïB•…šBÿΩB×'ïBœœB‰uªB`îBaBOôªB<…íBÓÄžB8«B(»ìBJA Bvu«BêüëB×Ä¡B±«B–7ëB%E£BÇå«B]WêBŠ·¤B‡¬B#wéBî)¦B:E¬BpèBdƒ§B¸g¬BîVçB\ϨB@¬Bž:æBpªB  ¬BåBW_«B,ĬBoóãBYŸ¬B”߬B8ÅâBÙ­B´ö¬B!‚áBÂý®B¦­Bx+àBG °B¯G­BíÃÞB¸ý°By­B{KÝBÆÕ±B²­BÂÄÛBÛ²BÈÉ­B7.ÚBY/³Bä±­B|ŒØBl­³BmŽ­BˆçÖBA´B”l­BoAÕB8‰´B—M­Bÿ™ÓBÄð´B A­BgîÑBgJµB$J­B;@ÐBw—µBOZ­B8ÎB2ѵB j­BxÛÌB‡ðµBrt­Bt&ËBqôµB~d­BíqÉB[äµBå5­B»ÀÇB-µBó¬BZÆBåµB0`;¸B¹ÛæBHΆBî¶BóPæBLÁ‡B›‘µB³áåB笈B 5´BsråBƒ˜‰B̲Bs<åB9…ŠB,o±B´0åBôˆ‹B­/°B½/åB–°ŒBå¯BÚEåBàŽB‰}®B†låBÿ”BÓæ­BµœåB +‘B$J­BÞåBg¼’B6ý¬Bz…æB G”Bq­BðˆçBS¦•Bþ­B/‰èB—B9&­B_éB‚˜BÌ<­Bn êBúšBJQ­B·¸êBú¡›B e­BfsëBˆ+BAs­Bï(ìBº·žB¸k­B-¡ìB­Z BdK­Bú§ìB@ ¢Bö?­B …ìB‡¿£BAV­BLÐëBºK¥Bo­BãâêB׸¦BÌ…­BÝéB¨B˜­BÊÌèBši©B°¤­B'»çBA½ªBp°­B,¨æBÛ¬BÄ­BŒ„åBóS­BhÔ­BÂRäBûŠ®B¶Ü­BoãBq³¯B7ì­BãÁáB+ɰB˜®B÷aàBíʱB§®BìñÞB²´²B$G®B-qÝBÖ~³Bk‚®B$âÛBÃ&´Bœ—®BˆEÚB:µ´Bf†®BN¡ØB÷+µB z®BiùÖB¨•µBz®BôMÕBçðµB3„®B%ŸÓB7:¶Bç®BáìÑBéj¶B ®BÚ8ÐB’…¶B^½®B …ÎB~˜¶BÄë®BTÒÌBùš¶Bg#¯B!ËB¡€¶BÐP¯BsÉBC¶B`t¯BÊÇBãµB)Ú¹B«ÕåB{}Bñ ¹Bï´æBš€Bõˆ¹B°¤çBDmBÞ¶¹B!¥èB"Ë‚B8þ¹B=ŒéBü5„Bì!ºBo5êB4Æ…B¯ºBK§êBÈj‡BtºB%ëB\‰B¾´¹B}ëBk¯ŠB« ¹BjÊëB BŒB•N¸BpñëB³½B l·B° ìB31BÁ¯¶B‘:ìB ·B ¶B>|ìB"I’BâtµB&ÆìB¤×“B‘á´BËíB–j•B1m´B íBn—B 0´B¼ìB·˜B€´B“}ìB‹ešBû³BÒ%ìB»œBºâ³B;¡ëBN®B9ųB~6ëBæSŸB‡™³B°ÃêB#ö Bo_³BíCêBÕ’¢B‡³B¢êBð<¤B=ƲB1ûéBWè¥B³~²B•¬éB§Bê\²BfìèBü©Bw_²BSéçBtªBir²BpÜæB!Ë«B™w²BÁïåB‚9­Bw²BàåBV³®BÁ{²Bn9äB©+°B~²B’4ãB`‰±B1~²BõÿáB ¾²Bš²B]£àBųB™²B?ßB!g´B^µ²B'fÝBÍ´BäײB ¼ÛB©(µB ³BÚB1–µB´Q³B\{ØBz¶B*ì~®BMäBK»…BÕ³®B«jäBÖj‡Bíè®B¯¶äB«‰B¯B³åB¾ŠB¯B­OåBÚjŒBùª®B0ŠåB ŽBT+®B¿åBM®BÞ‘­B~üåBœA‘BSý¬B\XæBîÐ’Bû¼¬BïçBÑU”Bݾ¬BûèBz¸•B̬BdéBŒ#—BÇݬBqËéB¦˜BBï¬B oêBÜ9šB ÿ¬BëBpÈ›BH­BÄäëBÙLB²­BèŸìB–ÖžBÝ­BFíB x B!­BˆZíBA'¢BËõ¬BœdíB×Ú£BRó¬BFíB–¥BM­B…iìB§B2­BjZëBY¨BþS­B¨:êBiŸ©B×m­B$éBÕåªBЃ­B9þçB0¬BÄ™­B]ÞæBÇw­Bz¬­BÒ±åB¹³®Bm±­B¨zäBËå¯BD°­B 3ãBm±B½²­B´ÚáBϲBb°­BGxàBé³BÕ›­B(ßBï³Bq­BžpÝBnš´BÔ5­BDÓÛBüµBïù¬Bœ3ÚB’“µBKÁ¬B{‘ØB¶BC¬B7ìÖBCn¶B,n¬B´BÕBå˶B^¬Bµ”ÓB‹·BkU¬B°äÑBtZ·BõZ¬Bˆ3ÐBû”·B6bå©Bž¾ãB¹›BŒÀ©B¼öâBŠƒBsŸ©B£âBÈ„BÍ©BD§âB‘{†B䛩BoêâB*ˆBþ¿©BˆcãB:ˉBäô©B«ìãB–e‹Bc4ªBD‡äB-øŒB‚iªB¼:åBîŽBûªBæBvB²ŸªB?ÝæBÖ|‘B/žªB·çBjö’BªB+èB°p”BèªB|UéB`õ•B¹yªBêBƒ—BܪBø’êBÏ™B§ûªB4êBrÅšBÖ«BÉ6êBVUœBˆ¬B¹ÈéBÙêB³L¬B¼[éB{ŠŸB |¬BtáèB4*¡Bò¢¬BÈ.èB¶¢B ¬B+JçB;(¤BÀجB¯BæBCƒ¥Buï¬B2;åBKÞ¦BÙÿ¬BŒ&äBZ/¨Bm­B„ ãB|©B­1­BcçáB±½ªB3H­B1¥àBfã«BŽS­B­KßB'î¬B^­BÐãÝB]å­BŒu­B rÜB¶Ì®B–­B]õÚB‹ ¯BÞ§­BykÙBÆ\°B«¥­BYÕ×Bþý°BÁ“­BO8ÖB‚‹±B„z­BИÔBw²B\­Bc÷ÒB޲B³N­BZQÑBÑþ²B{T­BاÏB‘b³Bf]­BºøÍB:ª³BQ`­BÿDÌB'ͳBqX­BòÊBžÏ³Bû7­BFÜÈBW³B×ô¬BÂ-ÇBC¡³BF¬B¨ƒÅB¢x³Bå@¬B'ÛÃB‚J³BÜ«Bƒ6ÂB‡ ³B“N«Bi¤ÀB¯²B៪BÒ%¿B©:²BçÛ©B­´½B‘½±Bæ ©BI¼BŽ@±BI)¨BîºB_¼°B 3§BT¨¹Bø#°B*Œ÷«BQãBÁC€Bô¬B„âBÂÂBÄ>¬B|ÿáB¿`ƒBŸV¬B”ËáBÑ…BÇp¬B1ÆáBÍÆB«–¬BØØáBŒuˆB…ìB¤üáBŒ%ŠBÙ¬B”âBRØ‹BܬBPâBì‹Bfå¬BôáBY?B$û¬BÅýáB‚òBh­BC$âB£’Bœ­BmâBÂM”B<ü¬BPOãB¢Ë•Bdþ¬BãKäBV/—B} ­BIBåB§•˜BšO­B*æB³ šB2t­BbÂæBL›B*­Bï*çB•CBØ·­BçB0õžB…Ó­B¨ÂæBŸ Bìè­BŒæBÛ-¢Búû­BË;åBl¨£Bà®BOGäB}¥B~ ®BhCãBão¦Bl®BÎ)âB;½§B$®BDéàB€å¨B›®BŠßBîè©B) ®B%$ÞB%ãªBP)®BߺÜB_Ø«B)7®BlKÛBĬB¦K®B3ÏÙB1š­B"`®BûRØBOp®B |®B[ÊÖBÝ-¯B-®B`5ÕB'ѯBŽ®BI—ÓBÓ\°B•ˆ®BùóÑBÜ×°Bˆ®BjNÐB1K±Bg®BɦÎB¢¶±Bƒ™®BQøÌBš²B…¬®B°EËBy,²B[¾®BÆ‘ÉBCH²B2íª®Bv âB¤‰B±¯BáBË"ƒB§¯BˆáB »„BÍ;°B:ÌáBúO†Bí¢°BDTâBóà‡Bo̰Bž ãBê_‰Bu¯°B˜ºãBËöŠBÓS°BäB”–ŒBà¯BvXäBÌ5ŽBVf¯BÞ…äBÉÕB¹å®BµŸäB\u‘Be®B‹¹äBï“B®BM"åBϵ”Bj1®BY!æB–BM®B¼>çB`—BÌs®B‘;èB_Á˜B&Ÿ®B éB=šB Ä®B]ÃéB§Ç›Bëä®BnlêB+XB9ö®B¤öêB@õžBÚ®B·+ëBð¤ Bðš®B_ëB¸R¢B~®BË—êBÙö£Bju®BµÖéBÀ}¥Bjq®B/ßèBôä¦B€m®BIáçB´G¨BËh®B$àæB¨©BÏk®B2×åB«B‹®BF»äBM¬BÝ™®B(ˆãB‚­Bf­®BÕ>âB” ®B»®B¡åàB¢«¯BYÊ®BЂßBÄ©°B&ç®BÞB±B-¯B¯‹ÜB÷R²B2¯BRøÚBb÷²Bd=¯B¿YÙB2³B~9¯BB´×B´ô³Bû9¯BÒ ÖBa´B?¯B°cÔBZÆ´BAK¯B‰¶ÒB}µBaa¯BqÑB¥OµB/…¯BØRÏB®nµBÁ½¯Bt¡ÍBÁxµBH°BÁòËBåiµBêK°BÀDÊBýBµB2Œ°B§™ÈB{ÿ´BÐѰB>öÆBã™´B8,±BòUÅBÿ7´Bþ™±B{¹ÃBÏÙ³B%ä­B„jãB‰”BBë­B …äBƒÕ•B»®BV’åB~+—B4&®B£ŸæBx˜BÇP®BA”çBè™B ~®BÆbèB`e›B£ž®B5 éB¥öœB”³®B¿‘éBp”žB<±®B}ÝéB©A Bn—®BRÖéBªô¡Bƒ®Bh~éBŸ£B²z®BŠÍèB’-¥B{u®BÿáçB­œ¦B´o®BäæBXÿ§Bqk®B«áåBâ^©B4t®B ÓäB€µªBš‘®B$´ãB†ü«BN´®BË|âB€,­BÈÇ®Bå-áBõC®B›Ó®BcÏßB%H¯Brä®B-eÞB–;°BÓ¯BÄìÜB*±B™0¯B¢eÛBlÔ±B|K¯B°ÎÙBdq²BÂQ¯B®,ØBÒð²BËP¯Bò†ÖB€c³BÁP¯BÁàÔB‚Ô³BT¯Bõ8ÓB[?´B°f¯B}‹ÑB§Ž´BIНBôÚÏB$ôB¦½¯B˜)ÎBgÝ´Bþ¯B-yÌB¾ß´B0D°B-ÊÊBÛÊ´Bž†°BëÉBj™´BùͰBHvÇBŽC´BZ(±BøÕÅB©á³Bû•±By9ÄBrƒ³BJl7±B\ËáB‚B^í±BV.áBƒ‚BðH²BìžàBn„BâO²BjVàB(Â…BýA²B{nàBu‡BL+²B'öàBˉB²B­¦áB€ŸŠB+µ±BMâB=ŒBBO±BÄBâB±âBKï°BPfâBTŠB䘰B#‰âB4‘B‹[°B«¼âBƒà’B2°B2ðâBðŒ”Bj°BÈJãB¥6–Bv °B!ûãB`Å—B°B éäBû2™BX°B²ìåBu‘šBÏ/°BŒÙæBèþ›B+N°BÀŸçB‚B:d°BCèBe&ŸB¥q°B®AèBQ× B:v°BJ%èB1Š¢B7k°B»çBò0¤B=K°Bs çBƒ¾¥Bf)°B§/æB±5§Bd°BÇ=åB  ¨B4°B‚8äBrý©BP*°B[ãBŸH«BìO°B—éáBÜ{¬Bd°B» àBPš­BPf°BæEßB–£®Bp°BOèÝB©¯Bn‰°Bª‚ÜBv¢°B7­°BI ÛB©€±BǰB~ÙB´2²B'Ú°B‰ã×B8DzB9ë°BgAÖBGE³BÍû°Bc™ÔB®³BݱB.ìÒB(þ³B•6±B¢;ÑB1´B©k±BMŠÏB.H´Búª±B¾ÙÍBrL´BÛô±B"+ÌBì<´BH²BÞÊBd´BÒ¦²B_ÚÈBÒ³Bñ³B7<ÇBEx³Bƒ³Bƒ ÅBÀ³BÚ÷³B"ÄB[À²BQu´BakÂB^j²B¡µB¢äÀB/ö±BëŵB­l¿Btr±B³~¶BT÷½Bíî°B¥@·BÚ†¼Bþj°B´¸BX-»B„ϯB ¹BÊî¹BÓ"¯Bï!ºB§È¸B~®Bïb»Bƒ¹·B ®Bú¼B¦¾¶BÒ­BØ*¾B9ɵBáÅ­BŽ¿BdÍ´BàÁ­BiòÀBÒ³B¸­BÆ]ÂB^â²B(¥­B:ÍÃB°ø±BW—­BAÅBαBß•­BųÆBî1°B€­B{ ÈBþF¯BÁW­BJÉBj^®BN5­BíËBÙ€­BÝ#­Bç~ÌB¥¦¬BO$­B üÍBOÕ«B ­B#wÏB¸ «B¿È¬B©çÐB 4ªB®m¬B¸RÒB¿K©Bì-¬B¹ÓB¸[¨Bð«B!§©Bû{ãBM€BÔ¨BHâBÉ}B* ¨BÑUáBÊä‚B|v¨BŠæàB-ˆ„BMa¨BpßàBn;†B¢¨BªÈàBÆé‡BL2©B›ˆàBà‰BLЩB?:àBG‹B{CªB›àBŒ®ŒB[~ªBqÍßBQ[ŽBû{ªB[¬ßBâ B÷8ªBú¼ßB4¼‘BÂÏ©BëòßB±_“B q©B?=àB™•B#©BÎàBx¤–Bïõ¨BLáBŸ1˜B[©BòâB ±™Bk©BaùâBw›BÆŠ©B^€ãB½ºœBxª©B\äBXžBÇ©BWäBJ  B”€©B/íãB&»¡B̨©B„OãB£O£Bê©BëvâB…ĤB`,ªBSáBî&¦BîdªB•wàBX|§Bk„ªBEDßB¸°¨Bg‹ªBŠäÝBl³©BØ‘ªBÐ}ÜBk¬ªB„ ªBƒÛBÙ™«B¶ªBÈ—ÙBšw¬B㺪B¬ØB M­BN§ªBS™ÖBÓ®B1ˆ·BH,èBó†B]¶B“žçBRˆB 0µBÖeçB9L‰B¬´B*~çBY‡ŠBÝê²B ÈçBË‹B^û±B;èBe-BñB±B™nèBS¯ŽBÛ£°B3×èBg7BÚ1°BŠ€éBµ¸‘B3 °BÉZêBG0“B¿ü¯B­'ëB ±”BÐö¯BiÊëBE–B–°B?ìBAé—B÷°BEÐìB­ƒ™B4°BgzíBb›BR9°Bž·íBßÜB†°BµíBtžBw‘¯BÞríB B‹O¯BßíBU·¡Bæ1¯BjtìB’M£B¢$¯BÖ”ëBÕäBѯB žêBA+¦BЯB³¥éB“‘§BÏø®BF­èBå÷¨Bì®Bð²çBñ\ªBâ®Bô²æB¾«BNå®B¬“åB­B§ð®BfYäBJ5®B{ý®B{ãBµJ¯B±¯BŒ«áBQ°Bë¯B?GàBcM±Bî$¯B»ÒÞB›0²B9>¯BÒJÝBð²BeW¯BÚ³ÛB?³Bdd¯BPÚB ´B¤f¯BLqØBдB÷j¯B‡ÉÖB¾ú´B.w¯BæÕB YµBN‰¯BqÓB­¦µBµ¯B1¿ÑB³×µB<¸¯Bl ÐBzîµBÐå¯BÀXÎBÙøµBò(°BרÌBüïµB]s°ByûÊBê̵BŒ¶°BPÉBŽŽµB£ú°B+ªÇB|2µBtL±BuÆBÏ´B²±B]jÄBXo´B $²B½ÎÂBæ´BEXŽ·BRäBl ‚B1g·Bg/äB(¿ƒB @·B|@äBäp…BaжB“|äB߇BÏ!¶B˜¿äB{›ˆB»CµB åBŠBb]´B˜GåB›v‹Bë³B¹wåBRôŒB¸ð²BhÄåBK‚ŽBÉe²B/æBPB²BæB¯²‘B#±±BžèæBÎQ“B.|±BéƒçBÆå”B]±B)GèBj–B•^±BvéBÞí—B x±B}ÉéBfw™BÁ˜±Bø]êB÷›Bu·±B”¿êB¤·œB>бBÓöêB=gžB…бB ðêB BÎıBŒÀêBÌ¡Bõµ±BñêBº|£B5y±BÔBêB»%¥BA:±BÛÝéB ɦB ±BÆ"éBQ¨B~±BÀ5èBÞ¾©B‘±B2,çB «BN ±BŠ#æBâs¬BT±BæåBªË­Bþ±B7ûãB¯B±BˆÎâBkS°B|±Bˆ‡áB©t±BÚ!±Bb(àB:x²BY1±B¼ªÞB5L³B¨F±BÇÝBï³B£^±B“vÛBQu´B@|±BWÖÙBH÷´Bx¡±B26ØB—wµB DZB«ÖBëäµB`é±B€äÔB6¶B3 ²Bù2ÓBed¶B¬.²B¼ÑBou¶B®`²BƒÍÏBwl¶Bn¢²BˆÎB(^¶B8î²B€oÌBúH¶BáA³B3ÄÊBÎ!¶B9£³BBÉBWßµBÉ´BƒÇB²„µB¡´BàçÅB·.µBµB¨MÄBôâ´B3šµBеÂB™´BD¶Bg1ÁBÀ.´BÅ ·BÅ¿B5¨³Büç·Bßi¾B̳BêøBg½Bó²B°¹BÀ­»B‹²BÿººBgºB¦§±B×ò»BÝ@¹BYW±BHP½B">¸Bå8±BÁ¾BhV·B#C±BŠ=ÀB‡¶Bo±B†½ÁB5¿µB ž±BŠ;ÃB¢ð´Bi¾±BQ·ÄB®´BYÕ±BÌ0ÆB‚E³B“ó±B£ÇBc²B"²B ÉBDs±B¡A²B¤}ÊBõްB}g²B3ôËB~³¯B‹²B$E¥¹B,jÞBýñxBFu¹BâÞBm2|Bø~¹B£lßB;mB{¿¹BœàB JBV½¹BÙ‹àByè‚Bel¹BZìàBȉ„Bt¹BÚLáB+†B;Ÿ¸B³¶áBG¿‡B¸B9hâBÏ4‰Bш·BRdãB(|ŠB®Û¶BfäBª®‹Bî ¶BUåB<ÙŒBj µBuæB€ŽB²W´B;æB«‚BLä³BÆ¿æBã#‘B­‘³B¦çBšÉ’BïE³B÷xçBóg”B³BzèBþ•BBݲBL´èB—B:ã²B>léBg™B³BêB¬šB`³BÝeêB$VœBx4³BÃyêBÔžBÒD³BPiêB¼ŸBKW³BüCêBÛm¡Bµj³B‡"êBô£B_T³B×*êB!Ó¤BƳBÏ6êB¦BgIJBVÎéBŸ!¨Bq®²B÷èBLœ©Bø¿²B.âçBíªBóʲBìæB"U¬B@ŲB4 æBšÖ­B÷¸²B>låB–c¯Br¸²B£äB~æ°B4¿²BiŸãBE²B77C©BþÏëB¾p›B×ü©B² ëBâÆœBÿªB§IêBˆ0žBºÿªB"ŸéB籟BßO«BÑéBB¡B®«BÝAèBb¢B@Á«B‘QçB+¤Bõæ«B÷>æB|¥B©¬B<åBݦBá#¬BGþãBm¨BC¬BüÑâB C©B%X¬Bm‹áBdªB0`¬Bè-àBAj«B…k¬B ÂÞBm\¬Be„¬BLÝBÇ;­B¡£¬B§ËÛB ®B®¬BBÚBFÆ®BŸ¬Bü¯ØB¸p¯BÕ¬BÆ×Bø°Bm\¬BgÕB½¥°BÃ7¬BèåÓB4±BÅ%¬B;DÒBD³±B¹'¬B±ÐBø"²B0¬B0îÎBWf²BÆæ«Bí;ÍB–s²BA˜«B1ËBU²Bá:«B‘æÉB'*²BxÓªB!BÈB=ð±BdªBH¢ÆB¦±B'ë©BÅB§R±Bd©BÈpÃBý°BÀ¨B‰çÁB]ž°Bp¨BRjÀB¢3°BÝP§Bí¾BæÈ¯BަBÏz½BlM¯Br½¥B ¼Br¿®BEá¤BPźBa®B•÷£B޹B3n­B £BŠ=¸B)ϬB3í¡Bq·BL¬B-Á BXàµB1Ù«BJ™ŸB·´BÐc«B&jžB'³B«B¤BZs²BpæªB1Ä›Bfm±BgܪBägšBui°BŪBI™Bª^¯B ˆªB×µ—B‚f®B)GªBZM–B ~­B>þ©Bã”BËž¬Bœ£©Bzy“B@Å«Bë9©Bÿ’B9ýªBó©¨B'´BJAªBPú§BÌLB@œ©B*E§BÛÖBû%©BW‰¦B'$©BƒùíB šBMñ©BbíBàœB)«ªB´¤ìBÅ[B'«BˆæëB ОB*r«B/=ëB½Z B\°«Bš™êBê¡B±è«BÔÙéB£m£B{¬B1ëèB+ؤB4¬B?ÙçBN*¦BÍN¬BL¼æBÇs§BÈk¬B'åB"»¨B ¬BöxäBdý©B¿´¬BòEãB_1«B›Ì¬BBüáB–N¬BZ߬BgžàB@S­Bæú¬Bt2ßB!C®Br­B€ÆÝB3¯B§:­B¥MÜBð °BÀ]­BmÇÚBMΰBõd­B’3ÙBút±B¯L­BQ•×Bìý±B™(­BŸôÕBo|²B2ÿ¬B_SÔBj÷²B Ú¬B °ÒB¢l³B·Ë¬B‰ÑB—׳BMÖ¬Bi^ÏBK8´BÀÙ¬Bä­ÍB|w´B¹Ò¬B§ùËBn’´B·¬BhEÊB°“´Bó~¬BC”ÈB©†´Bã&¬B%éÆB%l´BBÊ«Bt?ÅB^K´B‰n«B:–ÃBå"´BW«BäòÁBáé³BñkªBócÀBû‹³B³©B•ê¾B´³B’ì¨B{½B ˜²Bƒ¨Bü¼BβB§BHúB#Ÿ±B5 «BÉâB_ÀB •«B„÷áBVA‚B£«BÏtáBûàƒB©«B¢LáBê’…BGº«B)RáBZF‡BÀÝ«B[}áBŽöˆB_¬Bª¸áB3¤ŠBû%¬BgÛáBUŒB8¬B ÑáBìŽBE¬BnÙáBw¼B F¬BtâBÜm‘B<1¬B—fâB¼“B3¬BþãB©”B)Û«Bd«ãBw;–BÞ «B¬ŠäB£­—B' «BèqåB~™BqÈ«BKæB3—šBoó«B½úæB$$œB{ ¬BŒxçB¾ÄBW¬B\ÎçBÙoŸBS9¬BÌ·çBø!¡Bóf¬Bp9çB¬À¢B7“¬BâtæBnC¤B»´¬B@ƒåB­¥BˆÏ¬B¹wäB¼§B¼á¬B‰aãBpT¨BÀù¬BxFâB³Ÿ©B­BáBÁÓªB· ­B{ÃßBÅë«B_$­Bl_ÞB˜è¬B%2­BŽòÜBAØ­BIL­BÎ{ÛB+·®BÒd­BùùÙB‚¯Bƒl­B&lØB7°B¿_­BÚÓÖB?Ò°BJ­BÑ7ÕBb±B‹,­B:™ÓBóè±B­B×öÑBe²Bý­B6PÐB7Ô²B–­B8¥ÎBY1³B ­BqóÌBJg³B0 ­B¶>ËByt³Bç¬B‹ÉB8m³Bß§¬BIÛÇBkU³BbN¬B…1ÆBy-³Bñ«B{‰ÄBý²BËŽ«B?äÂBü¿²B­«BéJÁBhi²BqªB{Ä¿Bú±Bó³©BO¾Bš±Bpê¨Bäà¼Bˆ±Bà¨B”»B•°Bá!§B[1ºB¥ê¯B0{S·BCkèB®D‡B :¶BzëçB]wˆB»µBÁçB¹‰Bú³B^ÜçB ‹Búì²B/ èB\PŒB¿²BÊkèBÿÂB?s±BȸèBbPBuð°Bx.éB6ßB¥°B¤êéBYa’B±‘°B­ÖêB¯Ï“BI~°BhŽëB¯Z•B~°BÍìB¼ö–BG°B—ìBƘ˜B£°BE íBr<šBlİBËDíB(ë›B ±°BgGíBŒžBRf°B íB“HŸB=°B¤¹ìB•ë B(įBfËBæí²BÓ­BJ²ÉBÓè²BÇȬBØÈBÓ²B¾l¬B+YÆBÓ¥²BÄ ¬B&³ÄBl²B”¥«BpÃB%²B§,«BávÁB¤É±BZ‘ªB ï¿BX±BmÙ©Bßv¾BeݰB›©Br½BÊ_°BÈ<¨Bs£»B†Ú¯BƒW§BRºB@¯B&.½¶BöëB[‰B1ÿµB`ëB`ŽŠBÁBµB™ëB ŒBóˆ´Bt ëBú B±â³BÔäêB 2BŽ}³B|2ëBÖÒB˜(³B„´ëB1j’Bµæ²B…=ìBÏ”B]ȲB ìB¦°•B°Ç²BbìBÕB‹³B«$çBÃrBæ8³B’oçB6‘Bƒò²BòçB4²’B“½²B¡±èBa6”B¨²B`uéBƒ»•Bõ¯²BËêBpN—BmɲBA‘êBnñ˜Bqå²BÄÁêB¡¡šBîÿ²BܼêBšTœBõ²BÒ—êB¼žB¶Ë²BLêB뱟B±²B«êéB¥V¡BØO²BÝ£éBÆÿ¢Bÿ ²BeEéBÔ£¤BËÕ±B" èBž3¦B’»±Bð¹çB+¥§B†¾±Bº°æBÿ¨BBܱBíåBSFªB²BTmäBÓˆ«B¹²B|MãBìϬBÞ²Bž âB ®B ²B™ÚàBÜ-¯B3ù±B“”ßBŸO°BÐó±BV?ÞBó_±BÑþ±BJÎÜBPI²B‚²B´EÛB™³B6²B²ÙB­³B`²BÜØB2B´B”вByÖBÓ¾´B °²BÍÎÔBçµBÖ²BáÓBjGµBï ³B9lÑBòWµB§Q³B½ÏBIµB}ž³B;ÎBf3µB2ò´BÁ•ãB®A‚B#´´B$ãBåƒB—£´BãBX˜…BÙj´BëãBćB`ª³Bw®äB¼cˆB'ʲBÀnåBi¤‰BÃà±Bt æBñŠB ±B(sæBÛ^ŒB¬Y°B;ÉæB{ãBSʯB©IçBžjBÈ6¯B­ïçBÓáB6ß®B+ÃèBU’BYã®B­éB?Å“B¢¯Bê|êBËB•BïBëBÇØ–B³1¯B•ëBžz˜BòQ¯B´5ìB™šB£z¯BeíB†Ž›Bn¯BîºíB|B›a¯BwuîBs¢žB,¯BªýîBÕ6 Bƒ‹®Bs0ïBVÕ¡BBN®BuïB „£BiS®Bc{îB¥B[g®Bˆ£íB÷•¦Büv®BΦìB<ù§B0€®B#›ëB¯Q©Bi„®BŽêB„©ªBÌ‹®BÌzéBœû«B鎮B+^èBaF­B‹®B>4çBJ…®B"Š®BFõåBM¯¯B¦Š®B2¢äB]°B£®B”?ãB(Á±B½™®BÔáB³²BA¢®B{bàB­›³B} ®B}ÛÞB’^´B®BãAÝBÀõ´Bs®B¥ŸÛBAqµB`W®BþûÙBúçµB]>®BÜVØBÿY¶B,6®Bg¬ÖB^¹¶BëD®B‹ýÔB¤·BfW®B4KÓB/·BÒb®BÄ–ÑBÑE·BÕn®BÔáÏBÿL·B‚‡®Bw-ÎB²V·B³®BszÌBqT·B_Ü®BVÈÊB“5·B˜ø®B¿ÉBö¶BKZ!µB!AâBÜ€BR¤µBó1áB”[BvöµBŸUàBêÊ‚Bt ¶BÓßB0j„BšêµBÀ´ßB‘†B¿ÇµB–ßBò̇BÙµB`¿ßBb{‰B KµBF.àB&‹Bíø´BM”àB캌BÍœ´BiÁàB„bŽB3´BÇÂàBF Bú¦³BÈÆàB契Bø²BÈßàB-4“B$V²Bÿ#áBû”Bd²BžáB¼a–B‘÷±B$ âBq˜BïαB—ÀâBÌ™BNˆ±B«ãBßöšBXM±BF©äBTœB!F±BÕ|åBÔÑBG[±BÕ æBÊmŸB4p±B‚XæB÷¡BJ±Bk>æBªÌ¢Bu±B7 åBÁb¤BÀP±BÖäBlã¥BŒ)±BŸûãBãZ§Bà±BrãBÖèBÍ%±BoðáBøªB^<±BÓ»àBÕF«B­M±B³mßBW_¬B´]±B‹ÞBƒu­BÄ‚±BåòÜB ±®Bò±±BaÈÛB†ì¯BæÜ±BzuÚBzü°B¬þ±BøØB•ϱBú²B‘d×B s²BÅ=²BËÃÕBó²BÉZ²BÔBÓJ³B¹²BhÒB³BÛ´²BȶÐB$–³B1ù²BÏB ‘³BH³BäYÍBw³Bõ¤³B¥±ËBD³BX ´B]ÊBÚû²B…´BfrÈB&­²BéµBÝÙÆBn²B¥¬µBDÅB:²BL¶B&±ÃB?²B¤ï¶B*#ÂBµ±B§·B ¥ÀBK±Bºe¸B….¿BóÓ°B)¹B€·½BKf°B ºBªR¼B„÷¯B¦»BŒ »B%}¯BÈ/¼B¯ß¹B÷®Bj½BǸBq†®B˼¾BN»·B[J®BéÀB@±¶B¢-®B\lÁB§µB.®BÀÂÂB³¤´B:»­BÖÄB¨³BNg­BQ~ÅB÷´²BH­BYçÆB·Ë±BÕ׬B¿HÈBÂß°B=w¬B<«ÉB:ù¯B ¬B… ËBñ(¯Bdº«B÷¢ÌB]i®BŸ~«B‰!ÎBS¯­Bž!«B.“ÏB ­B3‹ªBïÐBo\¬B À©BúHÒBëBaç¨BŸÓBNN«BÚô§BåõÔBòöªB'÷¦BBJÖBÓ°ªBùð¥B¨”×Bq‰ªBPؤB-a«B> ãBì9Bñ«Ba]âB À‚B"«BãòáB·f„B1«BßáB †BëB}úáBÚ̇BI;«BáDâB!y‰Bj^«B±˜âBc#‹B }«BîåâB0ÏŒB6–«Bd:ãBzŽBU¢«Bl×ãBšBÊ´«B›–äB˜‘BMÁ«BåBè“B齫B%|æBHl”B/¹«BclçB\Ø•BÀ«Bs2èBÏ\—BiЫBmÑèBpò˜Bsø«BTMéBk’šBÔ]¬B^?éBô9œB´¬BïéB®àBR ­BÄèBh‡ŸB;­B’èBû2¡BMV­B÷èBBØ¢BËl­B´eçBÀg¤B{~­B„ƒæBHÜ¥Bhˆ­B~åBt9§B|‘­BÈoäBبB袭BAZãB"à©BØÀ­B!7âBâ#«B„Ú­BÓöàBcK¬Bæè­BbŸßB¨X­BÔô­B9ÞBR®BÞ ®BÉÜB4<¯Bo*®BœMÛBl°BA®BŽÃÙBÎͰB[F®Bð+ØB,k±B_<®B5ŒÖBñ±Bw,®BRêÔB_p²B®BÕFÓBøè²B·®BžÑB‚R³B$®B.óÏB‡¬³Bk1®BŒCÎBXî³BKJ®BlÌB\´Bxe®BÜÊBÆ´B¯q®Ba'ÉBñ´B¶d®B´tÇBÄÙ³B+Úf³B5ÈáBå¿€BÀý³BàõàBÌ‚B°J´BéLàBJ©ƒBRL´B~àB“V…BŽ+´BßàB ‡B ù³BkàBЮˆB¼³B‚áB;ŠB¥m³Bà‹áBª×‹BÞ³B€ÑáB¶yBð™²B‘5âBzBw7²B¨ÎâB­ŸBVñ±BjvãB,’BıBäBB“B&©±BÀ¡äB›[•BR›±B ]åB+å–B›¥±B§:æB®\˜BÔɱBGçBðÑ™B»ç±B’ÆçBå`›Bø±BBèB¢Bó ²Bû‰èBð¯žB4,²B™èBmb BuJ²BB¨èBé¢BëU²BS„èBÇ£B¨.²B"7èBEr¥Bé±Bõ­çB: §BM±BÚæBX…¨B%»±BáÙåBpæ©BDѱBJÀäB3«B£õ±BãB v¬Bª²Bû{âB¥»­B2²BÛSáB!ü®B÷²BÉàBä(°B²BÝÈÞB´@±B²B^ÝBË3²B£²B£×ÛB¸ö²B!;²BkEÚBîž³Böb²B„­ØBž6´B.²BÌ×B¼´B‘¹²BæhÕBŒ"µB«Û²BŸÓB0[µBº ³BÒBþtµB×L³B»VÐBoµBÖ˜³B¸¨ÎB‰ZµB é ¨B@`îBZ(œB‰;©B8³íBb™B訩B­íB1ŸB­ô©BGSìB«  BNDªBÊ”ëBÁ ¢B“ªB8ÉêBHš£BÖתB<ÝéB¨¥BÆ«BÊèB[P¦B³?«B…£çB§B¡m«Bñ|æBÚͨBû•«BÂTåBÝ ªB辫B,äBdI«B±ê«B?ãBp„¬B9¬BïÈáB´­B_$¬Bx|àB“Í®BlQ¬ByßBºÊ¯B‡ƒ¬BɪÝB‰¯°B·´¬BG*ÜB y±BϬBÖ™ÚBè%²B¸½¬B¬üØB³²BÓƒ¬BbZ×BY#³B\E¬Bš¸ÕB÷’³B¼¬B€ÔB´BØÍ«B¡sÒB\o´Bz¸«BôÌÐB\Ü´B¿¸«Bû#ÏB{BµB ¨«BuÍBÛ‰µBƒ«BJÃËB!°µB*:«B1ÊB‹ÉµB@ΪBRnÈB„ܵBTªBËÆB’âµBÿá©Bž%ÅBtÔµBD×·B ½éBAÛ†BÏä¶B¸séB¦=ˆBÄñµBÐ;éB±¢‰BïµB5éB,‹BÁ$´B¥GéB6…ŒBøf³B¯ZéBí ŽB3é²BBkéBÕ­Bmk²BÔ{éB¾N‘B˜²BóâéB±î’BÔæ±B¥êBfq”B^Ö±B"—ëBFÜ•BsѱB~\ìBa—BUÛ±BåìBÿþ˜B§æ±BDíB>¨šBOî±BôtíBBYœBõ±BÙXíB žBGÔ±B1ýìBû´ŸB<ˆ±B8€ìB˜O¡B±B±BìBËï¢B±B]°ëB•¤B8á°B?ëBž7¦B º°BG•êBIǧB ¡°B•·éB>©B˜°Bª»èB$¢ªBž°BŒ»çB;¬B½€°B±¼æBôd­B¦t°BtªåB ¸®Btp°BQ|äBó¯Bpy°BM.ãB ±B`†°B©ÍáBV ²B}—°BO_àB‡ú²B/®°B`ÙÞBG¾³B’ðB@ÝB½U´B=×°BÅÛB Ó´BEî°BûÙB>NµB ±B„XØBɵBé(±B±ÖB1¶BÌH±B3ÕB8¶BÐe±BƒRÓBï­¶Bf‚±B¦žÑBÀ¶Bq¦±BëÏB>¹¶B]Þ±BŠ9ÎB ¯¶B6'²BäŠÌBò›¶B›w²BþÞÊBt¶BˆÏ²B!8ÉB1¶Bü4³BM™ÇBÞÓµB³£³B ýÅBÝuµB%´BœaÄBJµBÁ”´BÉÇÂBhÄ´B.µB›@ÁBZL´BåäµBdпB½¸³BÓ°¶B&p¾Bw³B–‘·BýBs‘²Bo¸B¶»Bˆ²B@g¹BågºBß‚±B­ŽºB@9¹BرBÊå»Bƒ1¸B{ã°BŸU½B H·Bmã°BJÓ¾BÐz¶B±B¤QÀB½°µBŸA±BcÏÁBã´B¾i±B´KÃB¬´Bœ…±BÅÄBè8³B@š±B~;ÆBöZ²Bá²±BéªÇB r±B‘ʱBpÉBµˆ°Bdê±B•ŒÊB³¦¯B ²B?ÌBÅÇ®B©²B2—ó®BÙ âBî€BįBíªáB;t‚BdK°B„áBnúƒB³-±B)¾áBØi…Bîô±BûgâBƆB[Q²BcãB_ˆBÒ\²B"mäBöw‰Bè²Bt5åB€ñŠB\b±Bˆ¦åBauŒBäðBüåBDŽBm%°B†QæB(B[¯Bb£æB ‘Bhë®B=úæBiª’B¸®B…žçB?0”BAŽ®B·¤èB¹Œ•B¼·®BéBáð–B#Û®BÈcêBjs˜Bzô®BÐöêB šBC¯BùšëB”Ÿ›B@¯BATìBï'BdL¯BëìBÍÀžB*¯Bƒ'íB:l BG§®B–øìB™¢Bz®B€€ìB0±£Bƒr®BtÊëBX=¥Bwu®BƒàêB­¦B]t®B«ãéB¨Bãr®BqáèB«p©B)p®BxÝçBϪBZm®B7ÒæBè'¬B\u®BÝ­åBÔk­B_€®BôsäBôš®B\ˆ®Bb'ãB³µ¯B’®B'ÎáBãÀ°B!¢®BuiàBZ¼±Bº®B8õÞB¨Ÿ²B)É®BìjÝBB[³BjÒ®BÎÐÛBàñ³BЮBÖ0ÚBÛw´BÅ®BšŒØBLï´BS½®BµäÖBsYµB;À®B9ÕB¶µBŸË®B&‹ÓB†¶B€Ù®BÙÑBY3¶Bûì®B&%ÐBÇM¶B ¯BžqÎBo^¶BF¯Bè¿ÌBS\¶B#‰¯B.ËBF;¶B$¯BeÉBo÷µBTñ¯BE½ÇBi—µB'/´BÛ@òBÚ=“B¶³BÞAñBMŠ”B7h³B‡=ðB‡ß•BqB³BåPïBýK—Bâ(³B¾½îB’å˜Bà³BæRîBŒšB³BñÒíB½,œBV³Bñ=íBàÅBOβB˪ìB\ŸBþ‡²BG,ìBF÷ B®A²B­ëBp’¢Bí²Bu\ëB:¤B‡Ä±B!ëBPå¥B±Bg±êBᆧBýl±BëéBì ©B e±BÚðèB/oªB!d±BBðçBЫB¦T±B[çB‚@­B¾A±BVæBÀ°®B3±Bª"åBȰBJ?±B ïãBIJ±BN±BœâB ]²Ba±Bw2áB,Q³BÁy±BįßBõ´B’±BÅÞBº§´B¨±BZjÜBþ µB¯Æ±BHÄÚBd{µB~ð±B£!ÙBÑñµB¾ ²BÄ~×Bÿd¶BÇN²BaÖÕBöB¡q²B¾%ÔB<÷¶B!Öž®B{+ãBü–BÍ¿®B¢CäBõH˜Bå®BŽOåB;Ÿ™Bo ¯Bz[æB€õšB.3¯BI0çBòoœB&V¯BÍÎçBžBk¯BO%èB9¯ŸBín¯Bn3èBÌb¡B¬b¯B—ìçB¯£BŽP¯BýRçBN¨¤BÚ@¯B‘€æBû%¦BG.¯BÜåBù§B"¯Bd’äBCô¨B¡'¯B§‡ãBƒMªBKE¯BfâB±’«B‡b¯Bª$áB£¸¬Bo¯B4ÌßB´Ä­B@t¯BjgÞBxÀ®Bmƒ¯B ûÜBа¯BlŸ¯B‰ÛBЊ°Bw¼¯BÛ÷ÙBF±B¶Ð¯Bà_ØB]á±BܯBá¾ÖBµc²Bôã¯B³ÕB·Û²Bòè¯B sÓBMI³B‡ú¯B~ÇÑB®Ÿ³Bû°BêÐB»Ý³BèF°B·fÎB®´B°B®µÌB–´BɰBŒËBþ´Bw±B“YÉB>ݳBi±B1³ÇBþ“³B®Ñ±B¡ÆBÎ4³B.çV¬Bg+ãBf_‚B@w¬BƒÖâB° „B_‘¬B2ÇâBr¼…B µ¬BÌâB¿n‡B¼Þ¬BãâBô‰BRõ¬B_ãB«ÑŠBæ ­B£+ãBcƒŒBü­BõOãB¡5ŽBŠï¬BWxãBçB’ñ¬BÊãB<“‘B2­BrIäBÎ3“B ­BµýäB¯À”BK­BèðåBÓ*–B¸­BPýæBº‚—B.­B”èçB5ñ˜BAP­BʧèB”wšBul­BQéBeœBå­B„îéBZžB’­B¸{êBt:ŸBd­B äêBƒá Bç­Bœ¶êBÉ’¢Bç—­B‚$êB}-¤B㥭BhWéB®¥B±­B[èB)§Bι­BkTçBn¨Bï¾­B•IæBAÇ©BîέBE5åBš«B”í­B•äB®\¬Bà ®B®ÞâB}­Bí ®Bœ”áB­®B4®B :àB‚¶¯BõN®B!ÒÞBt¬°Bt®BRZÝBö‡±B¤®BÇÒÛBÒC²B¿®B`<ÚB9â²BƼ®B›ØBÿc³B“¯®B+õÖB>Õ³B᤮BNÕBB´BΜ®BÉ¥ÓBÓª´BÅ¢®BbøÑBQü´B¿¸®BÛGÐB¾7µB¡Ý®BÛ•ÎB6]µBׯBêãÌBgµB¢P¯B™3ËBåUµB,‡¯BB„ÉB6(µB쵯B=ÙÇB2×´B,´3³B‹âBnØ€Bw³B<ËáBE‚BR ´B>áB0ÛƒBÈ´B^áBšŠ…BÁê³BJ2áBÍ:‡BdzBðëáBÇÈB¡³B®ÝâB‘,ŠBˆV³B¸ãB˳‹BbÛ²BnøãBÝHBÀh²B fäB¼ÞŽBj²B ÞäBtzBxâ±B¯aåBy’Bb±±B¹õåB¡­“B䋱B‹¥æBè:•B†Œ±B\kçBŒ¿–BV¬±B:5èBÂ@˜B—Ò±B©ßèB7ЙBð±BŽVéB‰r›BɲBžéB BS²B ºéB•ÒžBü/²B:²éBn… B¦K²BÕ©éBG8¢BLP²B‘•éBšë£B$²BhéBËš¥B…ß±BþèB÷;§BÖ»±B³7èB²¾¨Büµ±BS;çB"ªB„̱B{!æBån«B%ß±BeåBŬB›ñ±BL äBa®Bœþ±BÓøâBòr¯B‰ø±B ØáBº°B©í±B˜”àBß±BRî±Bâ,ßB¬Ö²B¡þ±BâÝB’³Bn²BLÜB´BQ8²BþfÚB¥´BWf²B{ÉØBß*µBg™²B_)×B|¦µBÂDzBëÕB¶BWë²BMÑÓBP<¶B¢³BÒB‰Q¶BmX³B‹nÐB3H¶B£³BgÀÎB¸2¶BE쬩BÚëBD¥šB4nªBÔ,ëBiœB«BywêB.lBŒ€«BPÛéBôžBôË«BŠXéBøŒ B¬B0µèBJ¢B_1¬B¯ÞçBU–£BFS¬BtÞæBÒõ¤Bm¬BgÇåBQD¦B©…¬Bæ«äB*§Bb£¬B'ŒãBíÕ¨Bk½¬B‰TâB}ªBê̬BXáBp«BµÑ¬B1žßB´¬B^â¬B/ÞB­­Bÿ¬BæµÜBBÝ­B­B-2ÛBc¥®Bé­BÀ£ÙB²X¯Bß­B: ØBÜ÷¯Bžê¬BjsÖBóŒ°B-ǬB{×ÔBH±B"¯¬BÆ6ÓBª›±Bj©¬BJ‘ÑB²B¹©¬BÕåÏBSj²B˜¬B¡3ÎBV™²BUm¬B¯€ÌB¥•²B9)¬BÂÑÊBá|²BÎЫBõ'ÉBúR²B§m«BAƒÇB¹²BΫBŸâÅB9ƱB0ªBGÄB”l±B£ªBÁµÂB>±B\©B2ÁBË›°B ¨B(º¿B•&°BÂ×§BjL¾Bˆ¦¯BÖ§B5ì¼BD¯Bº%¦B»B7l®BÂ?¥BeZºB‡¶­BhE¤B¹Bh­B^&£Búí·Bú–¬B,÷¡Bt˶B~#¬BèÍ B$¤µBœ¬«Bò–ŸB}~´B‘Z«BŽKžBÔd³B¢F«BæðœB£]²B}C«B¾”›B Y±BÕ1«Bì>šBQ°BäûªBFÞ˜B(Z¯B¼ªBjv—B¹q®B pªB« –B†“­BêªBÌ£”B¼¬B‚ ©BQ?“BCý«B©Bßä‘B^`«Bé,¨BƒBíªB4N§B)B ˜ªBßs¦B¨BÑ`ªBFŠ¥BˆOŒBíGªBz‚¤Bá ‹BÙ\ªB¦b£B#¿‰B ˆªBNK¢B¥ˆBƒÌªBª+¡B;X‡B‘'«BùŸBñR†BwŸ«Bð±žB§M…BZ¬BÃjBˆZ„BR¬¬B[!œBïbƒBâU­BråšBKx‚Bþ ®Bd³™BO¥B|¯B®ˆ˜B”Ù€Bü¯B\Y—B €Büà°Bµ#–B#(¸B çB˜á‡Bj·BuºæB*‰B—?¶Ba”æB¶£ŠB®™µB·–æBš6ŒBµBo­æBüÏB×´BÔÓæBqBx5´B²çB‰‘B6ã³BB€çB×´’Bÿ™³BùèBND”BH‚³BëÜèB#Ì•BG³BBŒéB3[—B…ª³BSêBMø˜B>ѳB–?êB8¨šB@í³B¿-êBÃZœBܳB: êBâ žB‰¹³B*¿éB©¸ŸB÷…³BcRéB˜[¡Bz>³BLéBi£BVí²B£ÅèBª¤Bª¬²BP,èB=¦Bÿ²B`AçBw«§BSu²BoVæBï©Bw²BÕFåBIoªB$¤²B|!äBW°«BñʲBŠãBÚö¬Bëß²BîáBÖG®BÚÙ²B×ÏàB&‘¯B޽²Bp“ßB€¼°BT±²Bw@ÞBgϱB¹²BkÊÜBÔ°²B Ñ²B0=ÛB:e³Bøø²Bó¨ÙB}´B´1³B³ØB>´BOj³B tÖBAµBùš³BêÉÔB´oµB"Öí¨BÈ^ãBy›€BK¹¨Bª@âB°àB@‡¨BÀpáB¾\ƒB6c¨Bq'áBà…BÖf¨B'#áB©¼†BÖĨBŸáBPeˆB„m©BkÂàBÐð‰B ªBèƒàB|„‹Br^ªBGhàB.B,ŠªBWàBTߎBZkªBúmàBw‘BãªB*±àB¼2’Bz‡©B áBÌ“B„©BáBP^•B(¨¨BÐâBmæ–BC›¨BšöâBÏa˜BêרB³ðãBôÁ™B¼©B½®äB?D›Ba©BÆlåBŠÆœBúa©BjéåBDhžB³>©Bh#æBΠBh?©BøåByÈ¡Baq©BÇIåB U£B{°©Bé]äB…¾¤Bê©BaãB]¦B¿ªB¿MâB k§BÓJªBÎáBò ¨BæcªB€ÔßB¤¿©B„mªBøwÞBŒÆªBwvªBãÝB¼«B_ŒªBUšÛB Ÿ¬BR°ªBÚBåi­Bû¹ªB‚’ØBm-®B×¢ªB¡×Büè®B[„h·BsfçB P‡BA¶BTÙæBýnˆBµBˆÆæB7­‰B/ý³BäÞæBðöŠB+³Bž'çB¹WŒBò?²B|çBnÑB­±BQËçBdB»B±BÒ;èB‰ûBfþ°BõëèB„’Bñ°B‡ÓéBûõ“B¥÷°B‚¡êBRv•Bï±BT8ëB=—B‘±BZŸëB[¶˜B83±B¢êëB‹bšB’Z±BÕìB³œBrO±BƒìB5ÆB–±BÇÉëBkrŸBºã°B ëB¢¡B· °Bh/ëBâBo°BÆêB g¤B±D°B¾5êB;¦B§"°B:oéBƒ§BO °B ˆèBBô¨B ÿ¯B>çBPZªB%ü¯BŠæB¸«BÐþ¯B(råB­Bj °B¨AäB?®B€°BÅúâB`¯Bó°B¨áBs°B/°B)IàBƒw±Bà)°B ÖÞBc]²B¾A°BâMÝBƒ³BN[°Bn¶ÛBe¸³B´o°BóÚBrD´Bc°B[wØB/Ä´Bÿ”°BNÑÖB4µB{«°Bƒ&ÕBȵBÏðB/wÓBÒµBõß°BÄÑBLøµB¶±B ÐB˜¶B ;±BB_ÎBü¶B½±B°ÌBÖóµBÀϱB?ËBÙѵBY!²BeZÉB “µBF}²B¸ÇBt9µB å²BËÆBÚ´B´T³BÁ~ÄBH|´BkƳB/ãÂBá´B~O´BäVÁB壳B ö´BZß¿Bð³Bh²µB t¾B5u²B‡v¶B; ½Båæ±BI·B ¥»B/[±B0¸BÐSºBÙÁ°Bz@¹Bˆ¹BS0°B †ºB ¸BXÒ¯BLì»B¾·B®­¯Bÿ_½B¿4¶Bû¶¯B Ô¾BõSµBQÒ¯B'CÀB×i´Blã¯Bº±ÁBj~³B@è¯B¯ÃB„²B߯B‹|ÄB&±BEʯB ÙÅB»‰°B§¯Bˆ@ÇB3”¯BÉ“¯BäªÈB‚¢®B Ÿ¯BˆÊB³­B…¯¯B2‚ËBFìB ¤¯BhçÌBêÌ«Bä{¯B>GÎBå˪BCq¯B’’ÏBe±©BRˆ¯Bº¹ÐBv¨B\ȯB˜èÑBŠC§Bö °BÒ3ÓBL+¦B 5°B7—ÔB…/¥B D°BýÕBŠ7¤BíI°BöY×B·1£BM°B ¾ØB¢9¢BF%°Bª*ÚB`¡B¾Ã¯Bg˜ÛB©© BN-¯BPÝBJ B¶k®BHVÞBV}ŸBÞ‹­BhžßBŸÕžB‹£¬B2çàBï"žBwÄ«B»*âBÜ™BêB£HãB!IBž„©Bz7äB*B ¨B?åB­ÚœB쟦BÅåB¸œB¸¥B¾zæBŸÒœB—£BGçB¿-BM¢B Õ.ªBLáBºB%ï©B7àB{ƒBëÊ©B–ßB3·„Bó©©B€vßB¢h†B=­©BÄ›ßBÚˆB9Ø©BW àBþ½‰BªBe†àB‚[‹BÆRªByÉàBÐBÒ‚ªBèÌàBí¶ŽBÄiªB–üàBngBÒý©BKVáB’BÍ€©B ÀáB˜“B[©BCâBd(•Bx¯¨B«æâBİ–Bnœ¨B¹ãBT.˜Bà¨B­‡äBJ¨™B0©Bß/åBe6›BÅ©B+ŸåBÙÛœBÏÿ¨BkåB׎žB¦û¨BÝ[åB¶= Bn©B÷ÀäB¯Ó¡BžW©BïãBN£BÏ©BãBsȤBjÆ©BF3âB4¦B|ú©B¤+áBÄ‹§BªB7÷ßBѾ¨B¯)ªB¶ŸÞB Ì©Bï.ªB:ÝB­ÆªB˜<ªBºÌÛBµ«BKWªB>TÚBy‘¬BðeªBóÔØBb­B:[ªB-Q×Bp+®B*J˵BÕáB°;Bè"¶BúàBR¡‚B'A¶B®‘ßB¦=„Bÿ¶B°mßB¥î…BVêµB“ßB¬‡BÅ£µBÕàBÿ;‰B–RµB«‚àBÖŠB6ù´BÀ¼àB¥|ŒBë’´B­ÁàB=$ŽB ´B-ÌàBÐÂBBlKáB:P‘B¹$³BÿáBíÎ’Bqì²B&—âBÑc”Bºã²BVãB½ –BÛ²B…qãBª¯—B³²BêäBM@™Bpo²B{þäB ­šBðE²B×õåBœB“C²B3âæB¡€B¿U²BÎçB!ïžB®r²Bâ{èBè} Bd•²BŒèB0¢B„ ²BjlèBŽâ£BÂs²BÙ$èB(Ž¥B*²B@¡çB '§Bk²B¥ËæBa¡¨B™ÿ±BlÈåBIªBƒ²B²«äBüI«BÂ?²Bü†ãBq‹¬BŒ\²B%jâBÍÔ­Bb²BÂGáB…¯BÈQ²BqàBùJ°BJC²B_ÂÞBÙd±B×G²BlVÝB;V²B]\²BîÍÛB³B™{²B;ÚB‚»³Bާ²BŸ£ØB7S´BVÙ²Bƒ×BìØ´B“³BÅ_ÕBl>µBŒ+³B:¯ÓBäqµBÞ_³B©ýÑB;†µBE¦³BVNÐBÖzµBLö²Bû’áBw-BÇ‚³BIÓàBíš‚BÀ³BCàBÀ1„B³³B† àBØá…BÓ‘³B¼,àB#“‡Bpb³B¶®àB‘0‰B¾%³B•KáB׊B_ϲB7¸áB`ŒB³[²BDÿáB?þBgó±BÛ}âB)’B…¦±B›ãB{"‘BŒu±B ´ãBݶ’BÝU±BOäB.M”BèB±B|ùäBÞ•BàA±BUÊåBô\—B2^±Bï°æBΘBä…±B }çB MšB^¡±B›èBšã›B·±±BQèBgŠBg¢±B•èB„=ŸB€€±BvTèB7ë BY±BlÛçBŒ¢Bý0±Br/çBƤBޱBYæBA”¥B0ê°B#nåB¢§B>ê°B§gäB%_¨BMê°B-aãB©»©B%±Bü@âB«B%±BáB~1¬Bz7±B»ßBµJ­B¸<±B"gÞBŸ\®BU±Bk"ÝBk¯Bžy±B¾ÖÛBþ˜°B1œ±B,jÚB‡±Bý¸±B•áØB›D²BLÕ±BšI×BŸÞ²B¥ð±Bœ¦ÕBúW³B³ ²B²úÓBU­³Bo/²BGJÒBýá³Bwd²Bó˜ÐB5ù³BF§²BèèÎBôö³B_ó²BÛ:ÍB:ã³BµJ³B}ËBº³B4¯³BwìÉBpv³B– ´BmNÈB)$³BÓ£´BD´ÆBvÙ²B+2µBêÅB š²B鯵Bì…ÃByZ²B-e¶B}öÁB¡ ²B=·BÜxÀB¶œ±BïÙ·B¿By ±BÌš¸B¾Ž½B樰BÞw¹B›)¼BZ1°B@vºBØßºB©®¯BO»B²¹B ¯B«Ê¼B(œ¸B¬®B¾Bv“·B&l®B z¿BX¶BÝM®BæÐÀBiµBb3®B–*ÂBÃ}´BÝû­B¿ˆÃBC‚³BÙ»­B_ëÄB´‹²BÊ­BuVÆBš ±BkM­Bc½ÇBÅ´°B­BVÉBµÅ¯BQ©¬BsÊB¥è®Bÿd¬Bv ÌB¾®B7¬B¯ŽÍBËV­B¤ ¬Bt ÏB’¢¬Bùž«BßyÐBr¬B“ïªB>ÞÑB_«B×2ªBAÓBĪBk©BÇŸÔBûAªB‰Œ¨B,ûÕBýÓ©BAž§BþN×B³‡©B™¦BkØB4y©Bœp¥BH”A³B7•âBS£€BÊ׳BÌËáB«‚Bv)´BX2áBx—ƒBX(´BäòàB¬F…B“´BWáB¿ø†Bïç³B,¯áBøŒˆBȽ³B½£âBÇó‰B|³B/]ãBùx‹B¥ ³BÌãBÒB„™²Bœ5äB‚¦ŽB5C²BV­äB´@B´²BÐ.åB¹Ü‘BÔ±BÇ»åB v“Bb¨±Bó^æB•B ¢±BØçB–Bɽ±BõëçBp˜Bæ±B‚¢èBH™™Bf²B]$éB@8›B¡²B‡uéBÿãœB ²B4„éB]—žB¬å±BåRéB³F B´±BÙõèB¡í¡B‘‚±BΘèB”£BÒN±Bà èBo4¥B4±BRzçBçæBõ°B·ŸæBt;¨B5è°Bö¤åB5 ©B»õ°B¬’äBMóªBª±B`lãBY3¬Bš;±B:=âB¿k­BÿG±BÑáB8˜®BˆA±B³ßB¨±¯BB±B[ÞB‰¾°B+Q±B°ðÜBݱ±BDl±B,oÛB•}²B‡±BÍÞÙB*³BꤱBvEØB«À³BêñB¤ÖBõ?´Bêà±BûÔB3¢´Bþ±BLÓB5â´BÁ(²BYšÑB µB d²B6éÏB~µB©ª²Bè9ÎB¦ü´B ÷²BŒÌBHç´B|M³BNáÊBO¿´Bí±³Bv=ÉBˆz´BI$´BD ÇBp%´B£´B±ÆBAÖ³B>,µBRlÄB<‘³Bˆ¸µB©ÓÂB[O³Bo_¶BjKÁBYï²BE·BÖ¿Bãt²Bñé·BÁk¾B…î±Bܺ¸B|½B“p±B£¹B4£»B-ú°B«ºB]^ºB~°B_Ö»BË6¹Bõ °B2(½BR+¸B¬È¯BŒ¾B¿0·B×±¯B õ¿BÀ<¶B ³¯B+^ÁBðHµBÁ­¯BZÇÂB•V´B”“¯B+ÄB×^³Bcf¯BéˆÅBa²B.¯BhèÆBh±Bøë®BãGÈBñr°Bœ®B ®ÉB‚¯B‹^®BIËBØš®Bm*®B\ŒÌBX¹­B4ö­B­ÎB°ã¬B3·­B}ÏBš$¬B`S­BåîÐBMm«BȬB"œ´B@ðB‹yBÁ´B†ðB¢’B,­³B àïB$¼“B¿a³B“LïB_O•BÐ=³BkîBÖ–B×,³BIîBpx˜B«*³Bü¸íB¤"šB>³BÆGíB%Ç›BC/³B ÄìBqfBÚ³BÑ?ìBsŸB½²BеëB› Bò{²BÿaëB¾A¢B:²B3.ëBqí£BRù±BTÜêBš”¥B^Ò±B(êBµ§B=ƱBÙ7éBž‹¨BO×±BÇ"èBLÜ©B à±Bí!çBÙ<«B‰â±BG.æB±¦¬Bñè±Bª5åB ®B*ê±BD(äBWd¯BŒç±BõñâBL—°BLã±Bß›áB˜¦±BTí±B!àB̲B[÷±B$¦ÞBY³B ²BŽÝBÎ÷³B(²BwoÛB–z´B¦B|å°B÷çB©§B`ç°BÕæBW©B±B´õäB°LªB£+±B`ÊãB½‡«BºA±B*“âB¹¬BhC±BÇIáB×­B B±BÉõßB|é®BîI±B”ŽÞBÀá¯BDa±BðÝBаBùz±BM”ÛBÀˆ±B•±B0ÚB®1²B"°±BpØBœÚ²B”̱BýÒÖBqf³B è±Br,ÕBÔÒ³Bv²B$~ÓB|´B +²B ÍÑBF´B?f²B ÐBâQ´B᫲BlÎBZJ´BÐù²Bô¾ÌB$3´BõQ³BëËBH´B÷·³BÍqÉBzÁ³B=+´B„ÔÇBn³BV®´Ba:ÆB#³B;µB®¡ÄBKâ²B+͵B! ÃB ²Br¶Bµ€ÁB·E²Bÿ,·B{ÀB ѱB.ï·B•¾BýP±Bû·¸B^%½B†×°B:¹BÆ»Be^°B‰¢ºB!‚ºBÕÚ¯B,Á»BY¹BÍM¯B€½B„H¸Brð®B’c¾BÆD·Bö®BÚÁ¿B&B¶B*¯®B¡ÁBï7µBñ®BvÂBÏ7´B½\®B÷ÕÃBÄ<³B"®Bç9ÅB°F²Bgî­B)£ÆBíX±B;¹­B ÈB°h°B(j­BäkÉB¼{¯BØ­B_ÞÊB‹®B±æ¬B?YÌBÊ­B‘À¬B;ØÍBþ­BDެB®WÏB³Q¬B„!¬B ÇÐB±«Bw«BÈ1ÒB}«BvЪB½™ÓB—\ªBîªBdipy-0.10.1/dipy/data/tests/000077500000000000000000000000001263041327500155615ustar00rootroot00000000000000dipy-0.10.1/dipy/data/tests/test_data.py000066400000000000000000000000001263041327500200710ustar00rootroot00000000000000dipy-0.10.1/dipy/data/tests/test_fetcher.py000066400000000000000000000054511263041327500206170ustar00rootroot00000000000000import tempfile import os.path as op try: from urllib import pathname2url from urlparse import urljoin except ImportError: from urllib.request import pathname2url from urllib.parse import urljoin import numpy.testing as npt from nibabel.tmpdirs import TemporaryDirectory import dipy.data.fetcher as fetcher from dipy.data import SPHERE_FILES def test_check_md5(): fd, fname = tempfile.mkstemp() stored_md5 = fetcher._get_file_md5(fname) # If all is well, this shouldn't return anything: npt.assert_equal(fetcher.check_md5(fname, stored_md5), None) # If None is provided as input, it should silently not check either: npt.assert_equal(fetcher.check_md5(fname, None), None) # Otherwise, it will raise its exception class: npt.assert_raises(fetcher.FetcherError, fetcher.check_md5, fname, 'foo') def test_make_fetcher(): symmetric362 = SPHERE_FILES['symmetric362'] with TemporaryDirectory() as tmpdir: stored_md5 = fetcher._get_file_md5(symmetric362) testfile_url = pathname2url(op.split(symmetric362)[0] + op.sep) testfile_url = urljoin("file:", testfile_url) print(testfile_url) print(symmetric362) sphere_fetcher = fetcher._make_fetcher("sphere_fetcher", tmpdir, testfile_url, [op.split(symmetric362)[-1]], ["sphere_name"], md5_list=[stored_md5]) sphere_fetcher() assert op.isfile(op.join(tmpdir, "sphere_name")) npt.assert_equal(fetcher._get_file_md5(op.join(tmpdir, "sphere_name")), stored_md5) def test_fetch_data(): symmetric362 = SPHERE_FILES['symmetric362'] with TemporaryDirectory() as tmpdir: md5 = fetcher._get_file_md5(symmetric362) bad_md5 = '8' * len(md5) newfile = op.join(tmpdir, "testfile.txt") # Test that the fetcher can get a file testfile_url = pathname2url(symmetric362) testfile_url = urljoin("file:", testfile_url) files = {"testfile.txt": (testfile_url, md5)} fetcher.fetch_data(files, tmpdir) npt.assert_(op.exists(newfile)) # Test that the file is replaced when the md5 doesn't match with open(newfile, 'a') as f: f.write("some junk") fetcher.fetch_data(files, tmpdir) npt.assert_(op.exists(newfile)) npt.assert_equal(fetcher._get_file_md5(newfile), md5) # Test that an error is raised when the md5 checksum of the download # file does not match the expected value files = {"testfile.txt": (testfile_url, bad_md5)} npt.assert_raises(fetcher.FetcherError, fetcher.fetch_data, files, tmpdir) dipy-0.10.1/dipy/denoise/000077500000000000000000000000001263041327500151345ustar00rootroot00000000000000dipy-0.10.1/dipy/denoise/__init__.py000066400000000000000000000002251263041327500172440ustar00rootroot00000000000000#init for denoise aka the denoising module # Test callable from numpy.testing import Tester test = Tester().test bench = Tester().bench del Tester dipy-0.10.1/dipy/denoise/denspeed.pyx000066400000000000000000000210311263041327500174620ustar00rootroot00000000000000from __future__ import division import numpy as np cimport numpy as cnp cimport cython cimport safe_openmp as openmp from safe_openmp cimport have_openmp from cython.parallel import parallel, prange from multiprocessing import cpu_count from libc.math cimport sqrt, exp from libc.stdlib cimport malloc, free from libc.string cimport memcpy def nlmeans_3d(arr, mask=None, sigma=None, patch_radius=1, block_radius=5, rician=True, num_threads=None): """ Non-local means for denoising 3D images Parameters ---------- arr : 3D ndarray The array to be denoised mask : 3D ndarray sigma : float or 3D array standard deviation of the noise estimated from the data patch_radius : int patch size is ``2 x patch_radius + 1``. Default is 1. block_radius : int block size is ``2 x block_radius + 1``. Default is 5. rician : boolean If True the noise is estimated as Rician, otherwise Gaussian noise is assumed. num_threads : int Number of threads. If None (default) then all available threads will be used. Returns ------- denoised_arr : ndarray the denoised ``arr`` which has the same shape as ``arr``. """ if arr.ndim != 3: raise ValueError('data needs to be a 3D ndarray', arr.shape) if mask is None: mask = np.ones(arr.shape, dtype='f8') else: mask = np.ascontiguousarray(mask, dtype='f8') if mask.ndim != 3: raise ValueError('mask needs to be a 3D ndarray', mask.shape) if sigma.ndim != 3: raise ValueError('sigma needs to be a 3D ndarray', sigma.shape) arr = np.ascontiguousarray(arr, dtype='f8') arr = add_padding_reflection(arr, block_radius) mask = add_padding_reflection(mask.astype('f8'), block_radius) sigma = np.ascontiguousarray(sigma, dtype='f8') sigma = add_padding_reflection(sigma.astype('f8'), block_radius) arrnlm = _nlmeans_3d(arr, mask, sigma, patch_radius, block_radius, rician, num_threads) return remove_padding(arrnlm, block_radius) @cython.wraparound(False) @cython.boundscheck(False) def _nlmeans_3d(double [:, :, ::1] arr, double [:, :, ::1] mask, double [:, :, ::1] sigma, patch_radius=1, block_radius=5, rician=True, num_threads=None): """ This algorithm denoises the value of every voxel (i, j, k) by calculating a weight between a moving 3D patch and a static 3D patch centered at (i, j, k). The moving patch can only move inside a 3D block. """ cdef: cnp.npy_intp i, j, k, I, J, K double [:, :, ::1] out = np.zeros_like(arr) double summ = 0 cnp.npy_intp P = patch_radius cnp.npy_intp B = block_radius int all_cores = openmp.omp_get_num_procs() int threads_to_use = -1 I = arr.shape[0] J = arr.shape[1] K = arr.shape[2] if num_threads is not None: threads_to_use = num_threads else: threads_to_use = all_cores if have_openmp: openmp.omp_set_dynamic(0) openmp.omp_set_num_threads(threads_to_use) # move the block with nogil, parallel(): for i in prange(B, I - B): for j in range(B, J - B): for k in range(B, K - B): if mask[i, j, k] == 0: continue out[i, j, k] = process_block(arr, i, j, k, B, P, sigma) if have_openmp and num_threads is not None: openmp.omp_set_num_threads(all_cores) new = np.asarray(out) if rician: new -= 2 * np.asarray(sigma)**2 new[new < 0] = 0 return np.sqrt(new) @cython.wraparound(False) @cython.boundscheck(False) @cython.cdivision(True) cdef double process_block(double [:, :, ::1] arr, cnp.npy_intp i, cnp.npy_intp j, cnp.npy_intp k, cnp.npy_intp B, cnp.npy_intp P, double [:, :, ::1] sigma) nogil: """ Process the block with center at (i, j, k) Parameters ---------- arr : 3D array C contiguous array of doubles i, j, k : int center of block B : int block radius P : int patch radius sigma : 3D array local noise standard deviation Returns ------- new_value : double """ cdef: cnp.npy_intp m, n, o, M, N, O, a, b, c, cnt, step double patch_vol_size double summ, d, w, sumw, sum_out, x, sigm double * W double * cache double * sigma_block double denom cnp.npy_intp BS = B * 2 + 1 cnt = 0 sumw = 0 patch_vol_size = (P + P + 1) * (P + P + 1) * (P + P + 1) W = malloc(BS * BS * BS * sizeof(double)) cache = malloc(BS * BS * BS * sizeof(double)) sigma_block = malloc(BS * BS * BS * sizeof(double)) # (i, j, k) coordinates are the center of the static patch # copy block in cache copy_block_3d(cache, BS, BS, BS, arr, i - B, j - B, k - B) copy_block_3d(sigma_block, BS, BS, BS, sigma, i - B, j - B, k - B) # calculate weights between the central patch and the moving patch in block # (m, n, o) coordinates are the center of the moving patch # (a, b, c) run inside both patches for m in range(P, BS - P): for n in range(P, BS - P): for o in range(P, BS - P): summ = 0 sigm = 0 # calculate square distance for a in range(-P, P + 1): for b in range(-P, P + 1): for c in range(-P, P + 1): # this line takes most of the time! mem access d = cache[(B + a) * BS * BS + (B + b) * BS + (B + c)] - cache[(m + a) * BS * BS + (n + b) * BS + (o + c)] summ += d * d sigm += sigma_block[(m + a) * BS * BS + (n + b) * BS + (o + c)] denom = sqrt(2) * (sigm / patch_vol_size)**2 w = exp(-(summ / patch_vol_size) / denom) sumw += w W[cnt] = w cnt += 1 cnt = 0 sum_out = 0 # calculate normalized weights and sums of the weights with the positions # of the patches for m in range(P, BS - P): for n in range(P, BS - P): for o in range(P, BS - P): if sumw > 0: w = W[cnt] / sumw else: w = 0 x = cache[m * BS * BS + n * BS + o] sum_out += w * x * x cnt += 1 free(W) free(cache) free(sigma_block) return sum_out def add_padding_reflection(double [:, :, ::1] arr, padding): cdef: double [:, :, ::1] final cnp.npy_intp i, j, k cnp.npy_intp B = padding cnp.npy_intp [::1] indices_i = correspond_indices(arr.shape[0], padding) cnp.npy_intp [::1] indices_j = correspond_indices(arr.shape[1], padding) cnp.npy_intp [::1] indices_k = correspond_indices(arr.shape[2], padding) final = np.zeros(np.array((arr.shape[0], arr.shape[1], arr.shape[2])) + 2*padding) for i in range(final.shape[0]): for j in range(final.shape[1]): for k in range(final.shape[2]): final[i, j, k] = arr[indices_i[i], indices_j[j], indices_k[k]] return final def correspond_indices(dim_size, padding): return np.ascontiguousarray(np.hstack((np.arange(1, padding + 1)[::-1], np.arange(dim_size), np.arange(dim_size - padding - 1, dim_size - 1)[::-1])), dtype=np.intp) def remove_padding(arr, padding): shape = arr.shape return arr[padding:shape[0] - padding, padding:shape[1] - padding, padding:shape[2] - padding] @cython.wraparound(False) @cython.boundscheck(False) cdef cnp.npy_intp copy_block_3d(double * dest, cnp.npy_intp I, cnp.npy_intp J, cnp.npy_intp K, double [:, :, ::1] source, cnp.npy_intp min_i, cnp.npy_intp min_j, cnp.npy_intp min_k) nogil: cdef cnp.npy_intp i, j for i in range(I): for j in range(J): memcpy(&dest[i * J * K + j * K], &source[i + min_i, j + min_j, min_k], K * sizeof(double)) return 1 def cpu_count(): if have_openmp: return openmp.omp_get_num_procs() else: return 1 dipy-0.10.1/dipy/denoise/nlmeans.py000066400000000000000000000041551263041327500171500ustar00rootroot00000000000000from __future__ import division, print_function import numpy as np from dipy.denoise.denspeed import nlmeans_3d def nlmeans(arr, sigma, mask=None, patch_radius=1, block_radius=5, rician=True, num_threads=None): """ Non-local means for denoising 3D and 4D images Parameters ---------- arr : 3D or 4D ndarray The array to be denoised mask : 3D ndarray sigma : float or 3D array standard deviation of the noise estimated from the data patch_radius : int patch size is ``2 x patch_radius + 1``. Default is 1. block_radius : int block size is ``2 x block_radius + 1``. Default is 5. rician : boolean If True the noise is estimated as Rician, otherwise Gaussian noise is assumed. num_threads : int Number of threads. If None (default) then all available threads will be used (all CPU cores). Returns ------- denoised_arr : ndarray the denoised ``arr`` which has the same shape as ``arr``. """ if arr.ndim == 3: sigma = np.ones(arr.shape, dtype=np.float64) * sigma return nlmeans_3d(arr, mask, sigma, patch_radius, block_radius, rician).astype(arr.dtype) elif arr.ndim == 4: denoised_arr = np.zeros_like(arr) if isinstance(sigma, np.ndarray) and sigma.ndim == 3: sigma = (np.ones(arr.shape, dtype=np.float64) * sigma[..., np.newaxis]) else: sigma = np.ones(arr.shape, dtype=np.float64) * sigma for i in range(arr.shape[-1]): denoised_arr[..., i] = nlmeans_3d(arr[..., i], mask, sigma[..., i], patch_radius, block_radius, rician, num_threads).astype(arr.dtype) return denoised_arr else: raise ValueError("Only 3D or 4D array are supported!", arr.shape) dipy-0.10.1/dipy/denoise/noise_estimate.py000066400000000000000000000300131263041327500205130ustar00rootroot00000000000000from __future__ import division, print_function import numpy as np from scipy.special import gammainccinv from scipy.ndimage.filters import convolve def _inv_nchi_cdf(N, K, alpha): """Inverse CDF for the noncentral chi distribution See [1]_ p.3 section 2.3""" return gammainccinv(N * K, 1 - alpha) / K # List of optimal quantile for PIESNO. # Get optimal quantile for N if available, else use the median. opt_quantile = {1: 0.79681213002002, 2: 0.7306303027491917, 4: 0.6721952960782169, 8: 0.6254030432343569, 16: 0.5900487123737876, 32: 0.5641772300866416, 64: 0.5455611840489607, 128: 0.5322811923303339} def piesno(data, N, alpha=0.01, l=100, itermax=100, eps=1e-5, return_mask=False): """ Probabilistic Identification and Estimation of Noise (PIESNO). Parameters ----------- data : ndarray The magnitude signals to analyse. The last dimension must contain the same realisation of the volume, such as dMRI or fMRI data. N : int The number of phase array coils of the MRI scanner. If your scanner does a SENSE reconstruction, ALWAYS use N=1, as the noise profile is always Rician. If your scanner does a GRAPPA reconstruction, set N as the number of phase array coils. alpha : float Probabilistic estimation threshold for the gamma function. l : int number of initial estimates for sigma to try. itermax : int Maximum number of iterations to execute if convergence is not reached. eps : float Tolerance for the convergence criterion. Convergence is reached if two subsequent estimates are smaller than eps. return_mask : bool If True, return a mask identyfing all the pure noise voxel that were found. Returns -------- sigma : float The estimated standard deviation of the gaussian noise. mask : ndarray (optional) A boolean mask indicating the voxels identified as pure noise. Note ------ This function assumes two things : 1. The data has a noisy, non-masked background and 2. The data is a repetition of the same measurements along the last axis, i.e. dMRI or fMRI data, not structural data like T1/T2. This function processes the data slice by slice, as originally designed in the paper. Use it to get a slice by slice estimation of the noise, as in spinal cord imaging for example. References ------------ .. [1] Koay CG, Ozarslan E and Pierpaoli C. "Probabilistic Identification and Estimation of Noise (PIESNO): A self-consistent approach and its applications in MRI." Journal of Magnetic Resonance 2009; 199: 94-103. .. [2] Koay CG, Ozarslan E and Basser PJ. "A signal transformational framework for breaking the noise floor and its applications in MRI." Journal of Magnetic Resonance 2009; 197: 108-119. """ # This method works on a 2D array with repetitions as the third dimension, # so process the dataset slice by slice. if data.ndim < 3: e_s = "This function only works on datasets of at least 3 dimensions." raise ValueError(e_s) if N in opt_quantile: q = opt_quantile[N] else: q = 0.5 # Initial estimation of sigma initial_estimation = np.percentile(data, q * 100) / np.sqrt(2 * _inv_nchi_cdf(N, 1, q)) if data.ndim == 4: sigma = np.zeros(data.shape[-2], dtype=np.float32) mask_noise = np.zeros(data.shape[:-1], dtype=np.bool) for idx in range(data.shape[-2]): sigma[idx], mask_noise[..., idx] = _piesno_3D(data[..., idx, :], N, alpha=alpha, l=l, itermax=itermax, eps=eps, return_mask=True, initial_estimation=initial_estimation) else: sigma, mask_noise = _piesno_3D(data, N, alpha=alpha, l=l, itermax=itermax, eps=eps, return_mask=True, initial_estimation=initial_estimation) if return_mask: return sigma, mask_noise return sigma def _piesno_3D(data, N, alpha=0.01, l=100, itermax=100, eps=1e-5, return_mask=False, initial_estimation=None): """ Probabilistic Identification and Estimation of Noise (PIESNO). This is the slice by slice version for working on a 4D array. Parameters ----------- data : ndarray The magnitude signals to analyse. The last dimension must contain the same realisation of the volume, such as dMRI or fMRI data. N : int The number of phase array coils of the MRI scanner. alpha : float (optional) Probabilistic estimation threshold for the gamma function. Default: 0.01. l : int (optional) number of initial estimates for sigma to try. Default: 100. itermax : int (optional) Maximum number of iterations to execute if convergence is not reached. Default: 100. eps : float (optional) Tolerance for the convergence criterion. Convergence is reached if two subsequent estimates are smaller than eps. Default: 1e-5. return_mask : bool (optional) If True, return a mask identyfing all the pure noise voxel that were found. Default: False. initial_estimation : float (optional) Upper bound for the initial estimation of sigma. default : None, which computes the optimal quantile for N. Returns -------- sigma : float The estimated standard deviation of the gaussian noise. mask : ndarray A boolean mask indicating the voxels identified as pure noise. Notes ------ This function assumes two things : 1. The data has a noisy, non-masked background and 2. The data is a repetition of the same measurements along the last axis, i.e. dMRI or fMRI data, not structural data like T1/T2. References ------------ .. [1] Koay CG, Ozarslan E and Pierpaoli C. "Probabilistic Identification and Estimation of Noise (PIESNO): A self-consistent approach and its applications in MRI." Journal of Magnetic Resonance 2009; 199: 94-103. .. [2] Koay CG, Ozarslan E and Basser PJ. "A signal transformational framework for breaking the noise floor and its applications in MRI." Journal of Magnetic Resonance 2009; 197: 108-119. """ if N in opt_quantile: q = opt_quantile[N] else: q = 0.5 denom = np.sqrt(2 * _inv_nchi_cdf(N, 1, q)) if initial_estimation is None: m = np.percentile(data, q * 100) / denom else: m = initial_estimation phi = np.arange(1, l + 1) * m / l K = data.shape[-1] sum_m2 = np.sum(data**2, axis=-1, dtype=np.float32) sigma = np.zeros(phi.shape, dtype=phi.dtype) mask = np.zeros(phi.shape + data.shape[:-1]) lambda_minus = _inv_nchi_cdf(N, K, alpha/2) lambda_plus = _inv_nchi_cdf(N, K, 1 - alpha/2) pos = 0 max_length_omega = 0 for num, sig in enumerate(phi): sig_prev = 0 omega_size = 1 idx = np.zeros(sum_m2.shape, dtype=np.bool) for n in range(itermax): if np.abs(sig - sig_prev) < eps: break s = sum_m2 / (2 * K * sig**2) idx = np.logical_and(lambda_minus <= s, s <= lambda_plus) omega = data[idx, :] # If no point meets the criterion, exit if omega.size == 0: omega_size = 0 break sig_prev = sig # Numpy percentile must range in 0 to 100, hence q*100 sig = np.percentile(omega, q * 100) / denom omega_size = omega.size / K # Remember the biggest omega array as giving the optimal # sigma amongst all initial estimates from phi if omega_size > max_length_omega: pos, max_length_omega = num, omega_size sigma[num] = sig mask[num] = idx if return_mask: return sigma[pos], mask[pos] return sigma[pos] def estimate_sigma(arr, disable_background_masking=False, N=0): """Standard deviation estimation from local patches Parameters ---------- arr : 3D or 4D ndarray The array to be estimated disable_background_masking : bool, default False If True, uses all voxels for the estimation, otherwise, only non-zeros voxels are used. Useful if the background is masked by the scanner. N : int, default 0 Number of coils of the receiver array. Use N = 1 in case of a SENSE reconstruction (Philips scanners) or the number of coils for a GRAPPA reconstruction (Siemens and GE). Use 0 to disable the correction factor, as for example if the noise is Gaussian distributed. See [1] for more information. Returns ------- sigma : ndarray standard deviation of the noise, one estimation per volume. Note ------- This function is the same as manually taking the standard deviation of the background and gives one value for the whole 3D array. It also includes the coil-dependent correction factor of Koay 2006 (see [1]_, equation 18) with theta = 0. Since this function was introduced in [2]_ for T1 imaging, it is expected to perform ok on diffusion MRI data, but might oversmooth some regions and leave others un-denoised for spatially varying noise profiles. Consider using :func:`piesno` to estimate sigma instead if visual inacuracies are apparent in the denoised result. Reference ------- .. [1] Koay, C. G., & Basser, P. J. (2006). Analytically exact correction scheme for signal extraction from noisy magnitude MR signals. Journal of Magnetic Resonance), 179(2), 317-22. .. [2] Coupe, P., Yger, P., Prima, S., Hellier, P., Kervrann, C., Barillot, C., 2008. An optimized blockwise nonlocal means denoising filter for 3-D magnetic resonance images, IEEE Trans. Med. Imaging 27, 425-41. """ k = np.zeros((3, 3, 3), dtype=np.int8) k[0, 1, 1] = 1 k[2, 1, 1] = 1 k[1, 0, 1] = 1 k[1, 2, 1] = 1 k[1, 1, 0] = 1 k[1, 1, 2] = 1 # Precomputed factor from Koay 2006, this corrects the bias of magnitude image correction_factor = {0: 1, # No correction 1: 0.42920367320510366, 4: 0.4834941393603609, 6: 0.4891759468548269, 8: 0.49195420135894175, 12: 0.4946862482541263, 16: 0.4960339908122364, 20: 0.4968365823718557, 24: 0.49736907650825657, 32: 0.49803177052530145, 64: 0.49901964176235936} if N in correction_factor: factor = correction_factor[N] else: raise ValueError("N = {0} is not supported! Please choose amongst \ {1}".format(N, sorted(list(correction_factor.keys())))) if arr.ndim == 3: sigma = np.zeros(1, dtype=np.float32) arr = arr[..., None] elif arr.ndim == 4: sigma = np.zeros(arr.shape[-1], dtype=np.float32) else: raise ValueError("Array shape is not supported!", arr.shape) if disable_background_masking: mask = arr[..., 0].astype(np.bool) else: mask = np.ones_like(arr[..., 0], dtype=np.bool) conv_out = np.zeros(arr[..., 0].shape, dtype=np.float64) for i in range(sigma.size): convolve(arr[..., i], k, output=conv_out) mean_block = np.sqrt(6/7) * (arr[..., i] - 1/6 * conv_out) sigma[i] = np.sqrt(np.mean(mean_block[mask]**2) / factor) return sigma dipy-0.10.1/dipy/denoise/tests/000077500000000000000000000000001263041327500162765ustar00rootroot00000000000000dipy-0.10.1/dipy/denoise/tests/__init__.py000066400000000000000000000000001263041327500203750ustar00rootroot00000000000000dipy-0.10.1/dipy/denoise/tests/test_denoise.py000066400000000000000000000010251263041327500213330ustar00rootroot00000000000000import numpy as np import numpy.testing as npt from dipy.denoise.noise_estimate import estimate_sigma from dipy.denoise.nlmeans import nlmeans import dipy.data as dpd import nibabel as nib def test_denoise(): """ """ fdata, fbval, fbvec = dpd.get_data() # Test on 4D image: data = nib.load(fdata).get_data() sigma1 = estimate_sigma(data) denoised = nlmeans(data, sigma=sigma1) # Test on 3D image: data = data[..., 0] sigma2 = estimate_sigma(data) denoised = nlmeans(data, sigma=sigma2) dipy-0.10.1/dipy/denoise/tests/test_nlmeans.py000066400000000000000000000067711263041327500213570ustar00rootroot00000000000000import numpy as np from numpy.testing import (run_module_suite, assert_, assert_equal, assert_array_almost_equal) from dipy.denoise.nlmeans import nlmeans from dipy.denoise.denspeed import (add_padding_reflection, remove_padding, cpu_count) from time import time def test_nlmeans_padding(): S0 = 100 + 2 * np.random.standard_normal((50, 50, 50)) S0 = S0.astype('f8') S0n = add_padding_reflection(S0, 5) S0n2 = remove_padding(S0n, 5) assert_equal(S0.shape, S0n2.shape) def test_nlmeans_static(): S0 = 100 * np.ones((20, 20, 20), dtype='f8') S0n = nlmeans(S0, sigma=np.ones((20, 20, 20)), rician=False) assert_array_almost_equal(S0, S0n) def test_nlmeans_random_noise(): S0 = 100 + 2 * np.random.standard_normal((22, 23, 30)) S0n = nlmeans(S0, sigma=np.ones((22, 23, 30)) * np.std(S0), rician=False) print(S0.mean(), S0.min(), S0.max()) print(S0n.mean(), S0n.min(), S0n.max()) assert_(S0n.min() > S0.min()) assert_(S0n.max() < S0.max()) assert_equal(np.round(S0n.mean()), 100) def test_nlmeans_boundary(): # nlmeans preserves boundaries S0 = 100 + np.zeros((20, 20, 20)) noise = 2 * np.random.standard_normal((20, 20, 20)) S0 += noise S0[:10, :10, :10] = 300 + noise[:10, :10, :10] S0n = nlmeans(S0, sigma=np.ones((20, 20, 20)) * np.std(noise), rician=False) print(S0[9, 9, 9]) print(S0[10, 10, 10]) assert_(S0[9, 9, 9] > 290) assert_(S0[10, 10, 10] < 110) def test_nlmeans_4D_and_mask(): S0 = 200 * np.ones((20, 20, 20, 3), dtype='f8') mask = np.zeros((20, 20, 20)) mask[10, 10, 10] = 1 S0n = nlmeans(S0, sigma=1, mask=mask, rician=True) assert_equal(S0.shape, S0n.shape) assert_equal(np.round(S0n[10, 10, 10]), 200) assert_equal(S0n[8, 8, 8], 0) def test_nlmeans_dtype(): S0 = 200 * np.ones((20, 20, 20, 3), dtype='f4') mask = np.zeros((20, 20, 20)) mask[10:14, 10:14, 10:14] = 1 S0n = nlmeans(S0, sigma=1, mask=mask, rician=True) assert_equal(S0.dtype, S0n.dtype) S0 = 200 * np.ones((20, 20, 20), dtype=np.uint16) mask = np.zeros((20, 20, 20)) mask[10:14, 10:14, 10:14] = 1 S0n = nlmeans(S0, sigma=np.ones((20, 20, 20)), mask=mask, rician=True) assert_equal(S0.dtype, S0n.dtype) def test_nlmeans_4d_3dsigma_and_threads(): # Input is 4D data and 3D sigma data = np.ones((50, 50, 50, 5)) sigma = np.ones(data.shape[:3]) mask = np.zeros(data.shape[:3]) # mask[25-10:25+10] = 1 mask[:] = 1 print('cpu count %d' % (cpu_count(),)) print('1') t = time() new_data = nlmeans(data, sigma, mask, num_threads=1) duration_1core = time() - t print(duration_1core) print('All') t = time() new_data2 = nlmeans(data, sigma, mask, num_threads=None) duration_all_core = time() - t print(duration_all_core) print('2') t = time() new_data3 = nlmeans(data, sigma, mask, num_threads=2) duration_2core = time() - t print(duration_all_core) assert_array_almost_equal(new_data, new_data2) assert_array_almost_equal(new_data2, new_data3) if cpu_count() > 2: assert_equal(duration_all_core < duration_2core, True) assert_equal(duration_2core < duration_1core, True) if cpu_count() == 2: assert_equal(duration_2core < duration_1core, True) if __name__ == '__main__': # test_nlmeans_4d_3dsigma_and_threads() run_module_suite() dipy-0.10.1/dipy/denoise/tests/test_noise_estimate.py000066400000000000000000000072611263041327500227250ustar00rootroot00000000000000from __future__ import division, print_function import numpy as np import nibabel as nib from numpy.testing import (assert_almost_equal, assert_equal, assert_, assert_array_almost_equal) from dipy.denoise.noise_estimate import _inv_nchi_cdf, piesno, estimate_sigma, _piesno_3D import dipy.data # See page 5 of the reference paper for tested values def test_inv_nchi(): # Values taken from hispeed.MedianPIESNO.lambdaPlus # and hispeed.MedianPIESNO.lambdaMinus N = 8 K = 20 alpha = 0.01 lambdaMinus = _inv_nchi_cdf(N, K, alpha/2) lambdaPlus = _inv_nchi_cdf(N, K, 1 - alpha/2) assert_almost_equal(lambdaMinus, 6.464855180579397) assert_almost_equal(lambdaPlus, 9.722849086419043) def test_piesno(): # Values taken from hispeed.OptimalPIESNO with the test data # in the package computed in matlab test_piesno_data = nib.load(dipy.data.get_data("test_piesno")).get_data() sigma = piesno(test_piesno_data, N=8, alpha=0.01, l=1, eps=1e-10, return_mask=False) assert_almost_equal(sigma, 0.010749458025559) noise1 = (np.random.randn(100, 100, 100) * 50) + 10 noise2 = (np.random.randn(100, 100, 100) * 50) + 10 rician_noise = np.sqrt(noise1**2 + noise2**2) sigma, mask = piesno(rician_noise, N=1, alpha=0.01, l=1, eps=1e-10, return_mask=True) # less than 3% of error? assert_(np.abs(sigma - 50) / sigma < 0.03) # Test using the median as the initial estimation initial_estimation = (np.median(sigma) / np.sqrt(2 * _inv_nchi_cdf(1, 1, 0.5))) sigma, mask = _piesno_3D(rician_noise, N=1, alpha=0.01, l=1, eps=1e-10, return_mask=True, initial_estimation=initial_estimation) assert_(np.abs(sigma - 50) / sigma < 0.03) def test_estimate_sigma(): sigma = estimate_sigma(np.ones((7, 7, 7)), disable_background_masking=True) assert_equal(sigma, 0.) sigma = estimate_sigma(np.ones((7, 7, 7, 3)), disable_background_masking=True) assert_equal(sigma, np.array([0., 0., 0.])) sigma = estimate_sigma(5 * np.ones((7, 7, 7)), disable_background_masking=False) assert_equal(sigma, 0.) sigma = estimate_sigma(5 * np.ones((7, 7, 7, 3)), disable_background_masking=False) assert_equal(sigma, np.array([0., 0., 0.])) arr = np.zeros((3, 3, 3)) arr[0, 0, 0] = 1 sigma = estimate_sigma(arr, disable_background_masking=False, N=1) assert_array_almost_equal(sigma, 0.10286889997472792 / np.sqrt(0.42920367320510366)) arr = np.zeros((3, 3, 3, 3)) arr[0, 0, 0] = 1 sigma = estimate_sigma(arr, disable_background_masking=False, N=1) assert_array_almost_equal(sigma, np.array([0.10286889997472792 / np.sqrt(0.42920367320510366), 0.10286889997472792 / np.sqrt(0.42920367320510366), 0.10286889997472792 / np.sqrt(0.42920367320510366)])) arr = np.zeros((3, 3, 3)) arr[0, 0, 0] = 1 sigma = estimate_sigma(arr, disable_background_masking=True, N=4) assert_array_almost_equal(sigma, 0.46291005 / np.sqrt(0.4834941393603609)) arr = np.zeros((3, 3, 3)) arr[0, 0, 0] = 1 sigma = estimate_sigma(arr, disable_background_masking=True, N=0) assert_array_almost_equal(sigma, 0.46291005 / np.sqrt(1)) arr = np.zeros((3, 3, 3, 3)) arr[0, 0, 0] = 1 sigma = estimate_sigma(arr, disable_background_masking=True, N=12) assert_array_almost_equal(sigma, np.array([0.46291005 / np.sqrt(0.4946862482541263), 0.46291005 / np.sqrt(0.4946862482541263), 0.46291005 / np.sqrt(0.4946862482541263)])) dipy-0.10.1/dipy/direction/000077500000000000000000000000001263041327500154665ustar00rootroot00000000000000dipy-0.10.1/dipy/direction/__init__.py000066400000000000000000000002631263041327500176000ustar00rootroot00000000000000 from .probabilistic_direction_getter import (ProbabilisticDirectionGetter, DeterministicMaximumDirectionGetter) from .peaks import * dipy-0.10.1/dipy/direction/peaks.py000066400000000000000000000463021263041327500171500ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from multiprocessing import cpu_count, Pool from itertools import repeat from os import path from warnings import warn from ..utils.six.moves import xrange from nibabel.tmpdirs import InTemporaryDirectory import numpy as np import scipy.optimize as opt from dipy.reconst.recspeed import (local_maxima, remove_similar_vertices, search_descending) from dipy.core.sphere import HemiSphere, Sphere from dipy.data import default_sphere from dipy.core.ndindex import ndindex from dipy.reconst.shm import sh_to_sf_matrix from dipy.reconst.peak_direction_getter import PeaksAndMetricsDirectionGetter def peak_directions_nl(sphere_eval, relative_peak_threshold=.25, min_separation_angle=25, sphere=default_sphere, xtol=1e-7): """Non Linear Direction Finder Parameters ---------- sphere_eval : callable A function which can be evaluated on a sphere. relative_peak_threshold : float Only return peaks greater than ``relative_peak_threshold * m`` where m is the largest peak. min_separation_angle : float in [0, 90] The minimum distance between directions. If two peaks are too close only the larger of the two is returned. sphere : Sphere A discrete Sphere. The points on the sphere will be used for initial estimate of maximums. xtol : float Relative tolerance for optimization. Returns ------- directions : array (N, 3) Points on the sphere corresponding to N local maxima on the sphere. values : array (N,) Value of sphere_eval at each point on directions. """ # Find discrete peaks for use as seeds in non-linear search discrete_values = sphere_eval(sphere) values, indices = local_maxima(discrete_values, sphere.edges) seeds = np.column_stack([sphere.theta[indices], sphere.phi[indices]]) # Helper function def _helper(x): sphere = Sphere(theta=x[0], phi=x[1]) return -sphere_eval(sphere) # Non-linear search num_seeds = len(seeds) theta = np.empty(num_seeds) phi = np.empty(num_seeds) for i in xrange(num_seeds): peak = opt.fmin(_helper, seeds[i], xtol=xtol, disp=False) theta[i], phi[i] = peak # Evaluate on new-found peaks small_sphere = Sphere(theta=theta, phi=phi) values = sphere_eval(small_sphere) # Sort in descending order order = values.argsort()[::-1] values = values[order] directions = small_sphere.vertices[order] # Remove directions that are too small n = search_descending(values, relative_peak_threshold) directions = directions[:n] # Remove peaks too close to each-other directions, idx = remove_similar_vertices(directions, min_separation_angle, return_index=True) values = values[idx] return directions, values def peak_directions(odf, sphere, relative_peak_threshold=.5, min_separation_angle=25, minmax_norm=True): """Get the directions of odf peaks Peaks are defined as points on the odf that are greater than at least one neighbor and greater than or equal to all neighbors. Peaks are sorted in descending order by their values then filtered based on their relative size and spacing on the sphere. An odf may have 0 peaks, for example if the odf is perfectly isotropic. Parameters ---------- odf : 1d ndarray The odf function evaluated on the vertices of `sphere` sphere : Sphere The Sphere providing discrete directions for evaluation. relative_peak_threshold : float in [0., 1.] Only peaks greater than ``min + relative_peak_threshold * scale`` are kept, where ``min = max(0, odf.min())`` and ``scale = odf.max() - min``. min_separation_angle : float in [0, 90] The minimum distance between directions. If two peaks are too close only the larger of the two is returned. Returns ------- directions : (N, 3) ndarray N vertices for sphere, one for each peak values : (N,) ndarray peak values indices : (N,) ndarray peak indices of the directions on the sphere Notes ----- If the odf has any negative values, they will be clipped to zeros. """ values, indices = local_maxima(odf, sphere.edges) # If there is only one peak return n = len(values) if n == 0 or (values[0] < 0.): return np.zeros((0, 3)), np.zeros(0), np.zeros(0, dtype=int) elif n == 1: return sphere.vertices[indices], values, indices odf_min = odf.min() odf_min = odf_min if (odf_min >= 0.) else 0. # because of the relative threshold this algorithm will give the same peaks # as if we divide (values - odf_min) with (odf_max - odf_min) or not so # here we skip the division to increase speed values_norm = (values - odf_min) # Remove small peaks n = search_descending(values_norm, relative_peak_threshold) indices = indices[:n] directions = sphere.vertices[indices] # Remove peaks too close together directions, uniq = remove_similar_vertices(directions, min_separation_angle, return_index=True) values = values[uniq] indices = indices[uniq] return directions, values, indices class PeaksAndMetrics(PeaksAndMetricsDirectionGetter): pass def _peaks_from_model_parallel(model, data, sphere, relative_peak_threshold, min_separation_angle, mask, return_odf, return_sh, gfa_thr, normalize_peaks, sh_order, sh_basis_type, npeaks, B, invB, nbr_processes): if nbr_processes is None: try: nbr_processes = cpu_count() except NotImplementedError: warn("Cannot determine number of cpus. \ returns peaks_from_model(..., parallel=False).") return peaks_from_model(model, data, sphere, relative_peak_threshold, min_separation_angle, mask, return_odf, return_sh, gfa_thr, normalize_peaks, sh_order, sh_basis_type, npeaks, parallel=False) shape = list(data.shape) data = np.reshape(data, (-1, shape[-1])) n = data.shape[0] nbr_chunks = nbr_processes ** 2 chunk_size = int(np.ceil(n / nbr_chunks)) indices = list(zip(np.arange(0, n, chunk_size), np.arange(0, n, chunk_size) + chunk_size)) with InTemporaryDirectory() as tmpdir: data_file_name = path.join(tmpdir, 'data.npy') np.save(data_file_name, data) if mask is not None: mask = mask.flatten() mask_file_name = path.join(tmpdir, 'mask.npy') np.save(mask_file_name, mask) else: mask_file_name = None pool = Pool(nbr_processes) pam_res = pool.map(_peaks_from_model_parallel_sub, zip(repeat((data_file_name, mask_file_name)), indices, repeat(model), repeat(sphere), repeat(relative_peak_threshold), repeat(min_separation_angle), repeat(return_odf), repeat(return_sh), repeat(gfa_thr), repeat(normalize_peaks), repeat(sh_order), repeat(sh_basis_type), repeat(npeaks), repeat(B), repeat(invB))) pool.close() pam = PeaksAndMetrics() pam.sphere = sphere # use memmap to reduce the memory usage pam.gfa = np.memmap(path.join(tmpdir, 'gfa.npy'), dtype=pam_res[0].gfa.dtype, mode='w+', shape=(data.shape[0])) pam.peak_dirs = np.memmap(path.join(tmpdir, 'peak_dirs.npy'), dtype=pam_res[0].peak_dirs.dtype, mode='w+', shape=(data.shape[0], npeaks, 3)) pam.peak_values = np.memmap(path.join(tmpdir, 'peak_values.npy'), dtype=pam_res[0].peak_values.dtype, mode='w+', shape=(data.shape[0], npeaks)) pam.peak_indices = np.memmap(path.join(tmpdir, 'peak_indices.npy'), dtype=pam_res[0].peak_indices.dtype, mode='w+', shape=(data.shape[0], npeaks)) pam.qa = np.memmap(path.join(tmpdir, 'qa.npy'), dtype=pam_res[0].qa.dtype, mode='w+', shape=(data.shape[0], npeaks)) if return_sh: nbr_shm_coeff = (sh_order + 2) * (sh_order + 1) / 2 pam.shm_coeff = np.memmap(path.join(tmpdir, 'shm.npy'), dtype=pam_res[0].shm_coeff.dtype, mode='w+', shape=(data.shape[0], nbr_shm_coeff)) pam.B = pam_res[0].B else: pam.shm_coeff = None pam.invB = None if return_odf: pam.odf = np.memmap(path.join(tmpdir, 'odf.npy'), dtype=pam_res[0].odf.dtype, mode='w+', shape=(data.shape[0], len(sphere.vertices))) else: pam.odf = None # copy subprocesses pam to a single pam (memmaps) for i, (start_pos, end_pos) in enumerate(indices): pam.gfa[start_pos: end_pos] = pam_res[i].gfa pam.peak_dirs[start_pos: end_pos] = pam_res[i].peak_dirs pam.peak_values[start_pos: end_pos] = pam_res[i].peak_values pam.peak_indices[start_pos: end_pos] = pam_res[i].peak_indices pam.qa[start_pos: end_pos] = pam_res[i].qa if return_sh: pam.shm_coeff[start_pos: end_pos] = pam_res[i].shm_coeff if return_odf: pam.odf[start_pos: end_pos] = pam_res[i].odf pam_res = None # load memmaps to arrays and reshape the metric shape[-1] = -1 pam.gfa = np.reshape(np.array(pam.gfa), shape[:-1]) pam.peak_dirs = np.reshape(np.array(pam.peak_dirs), shape + [3]) pam.peak_values = np.reshape(np.array(pam.peak_values), shape) pam.peak_indices = np.reshape(np.array(pam.peak_indices), shape) pam.qa = np.reshape(np.array(pam.qa), shape) if return_sh: pam.shm_coeff = np.reshape(np.array(pam.shm_coeff), shape) if return_odf: pam.odf = np.reshape(np.array(pam.odf), shape) # Make sure all worker processes have exited before leaving context # manager in order to prevent temporary file deletion errors in windows pool.join() return pam def _peaks_from_model_parallel_sub(args): (data_file_name, mask_file_name) = args[0] (start_pos, end_pos) = args[1] model = args[2] sphere = args[3] relative_peak_threshold = args[4] min_separation_angle = args[5] return_odf = args[6] return_sh = args[7] gfa_thr = args[8] normalize_peaks = args[9] sh_order = args[10] sh_basis_type = args[11] npeaks = args[12] B = args[13] invB = args[14] data = np.load(data_file_name, mmap_mode='r')[start_pos:end_pos] if mask_file_name is not None: mask = np.load(mask_file_name, mmap_mode='r')[start_pos:end_pos] else: mask = None return peaks_from_model(model, data, sphere, relative_peak_threshold, min_separation_angle, mask, return_odf, return_sh, gfa_thr, normalize_peaks, sh_order, sh_basis_type, npeaks, B, invB, parallel=False, nbr_processes=None) def peaks_from_model(model, data, sphere, relative_peak_threshold, min_separation_angle, mask=None, return_odf=False, return_sh=True, gfa_thr=0, normalize_peaks=False, sh_order=8, sh_basis_type=None, npeaks=5, B=None, invB=None, parallel=False, nbr_processes=None): """Fits the model to data and computes peaks and metrics Parameters ---------- model : a model instance `model` will be used to fit the data. sphere : Sphere The Sphere providing discrete directions for evaluation. relative_peak_threshold : float Only return peaks greater than ``relative_peak_threshold * m`` where m is the largest peak. min_separation_angle : float in [0, 90] The minimum distance between directions. If two peaks are too close only the larger of the two is returned. mask : array, optional If `mask` is provided, voxels that are False in `mask` are skipped and no peaks are returned. return_odf : bool If True, the odfs are returned. return_sh : bool If True, the odf as spherical harmonics coefficients is returned gfa_thr : float Voxels with gfa less than `gfa_thr` are skipped, no peaks are returned. normalize_peaks : bool If true, all peak values are calculated relative to `max(odf)`. sh_order : int, optional Maximum SH order in the SH fit. For `sh_order`, there will be ``(sh_order + 1) * (sh_order + 2) / 2`` SH coefficients (default 8). sh_basis_type : {None, 'mrtrix', 'fibernav'} ``None`` for the default dipy basis which is the fibernav basis, ``mrtrix`` for the MRtrix basis, and ``fibernav`` for the FiberNavigator basis sh_smooth : float, optional Lambda-regularization in the SH fit (default 0.0). npeaks : int Maximum number of peaks found (default 5 peaks). B : ndarray, optional Matrix that transforms spherical harmonics to spherical function ``sf = np.dot(sh, B)``. invB : ndarray, optional Inverse of B. parallel: bool If True, use multiprocessing to compute peaks and metric (default False). Temporary files are saved in the default temporary directory of the system. It can be changed using ``import tempfile`` and ``tempfile.tempdir = '/path/to/tempdir'``. nbr_processes: int If `parallel` is True, the number of subprocesses to use (default multiprocessing.cpu_count()). Returns ------- pam : PeaksAndMetrics An object with ``gfa``, ``peak_directions``, ``peak_values``, ``peak_indices``, ``odf``, ``shm_coeffs`` as attributes """ if return_sh and (B is None or invB is None): B, invB = sh_to_sf_matrix( sphere, sh_order, sh_basis_type, return_inv=True) if parallel: # It is mandatory to provide B and invB to the parallel function. # Otherwise, a call to np.linalg.pinv is made in a subprocess and # makes it timeout on some system. # see https://github.com/nipy/dipy/issues/253 for details return _peaks_from_model_parallel(model, data, sphere, relative_peak_threshold, min_separation_angle, mask, return_odf, return_sh, gfa_thr, normalize_peaks, sh_order, sh_basis_type, npeaks, B, invB, nbr_processes) shape = data.shape[:-1] if mask is None: mask = np.ones(shape, dtype='bool') else: if mask.shape != shape: raise ValueError("Mask is not the same shape as data.") gfa_array = np.zeros(shape) qa_array = np.zeros((shape + (npeaks,))) peak_dirs = np.zeros((shape + (npeaks, 3))) peak_values = np.zeros((shape + (npeaks,))) peak_indices = np.zeros((shape + (npeaks,)), dtype='int') peak_indices.fill(-1) if return_sh: n_shm_coeff = (sh_order + 2) * (sh_order + 1) // 2 shm_coeff = np.zeros((shape + (n_shm_coeff,))) if return_odf: odf_array = np.zeros((shape + (len(sphere.vertices),))) global_max = -np.inf for idx in ndindex(shape): if not mask[idx]: continue odf = model.fit(data[idx]).odf(sphere) if return_sh: shm_coeff[idx] = np.dot(odf, invB) if return_odf: odf_array[idx] = odf gfa_array[idx] = gfa(odf) if gfa_array[idx] < gfa_thr: global_max = max(global_max, odf.max()) continue # Get peaks of odf direction, pk, ind = peak_directions(odf, sphere, relative_peak_threshold, min_separation_angle) # Calculate peak metrics if pk.shape[0] != 0: global_max = max(global_max, pk[0]) n = min(npeaks, pk.shape[0]) qa_array[idx][:n] = pk[:n] - odf.min() peak_dirs[idx][:n] = direction[:n] peak_indices[idx][:n] = ind[:n] peak_values[idx][:n] = pk[:n] if normalize_peaks: peak_values[idx][:n] /= pk[0] peak_dirs[idx] *= peak_values[idx][:, None] qa_array /= global_max pam = PeaksAndMetrics() pam.sphere = sphere pam.peak_dirs = peak_dirs pam.peak_values = peak_values pam.peak_indices = peak_indices pam.gfa = gfa_array pam.qa = qa_array if return_sh: pam.shm_coeff = shm_coeff pam.B = B else: pam.shm_coeff = None pam.B = None if return_odf: pam.odf = odf_array else: pam.odf = None return pam def gfa(samples): """The general fractional anisotropy of a function evaluated on the unit sphere""" diff = samples - samples.mean(-1)[..., None] n = samples.shape[-1] numer = n * (diff * diff).sum(-1) denom = (n - 1) * (samples * samples).sum(-1) return np.sqrt(numer / denom) def reshape_peaks_for_visualization(peaks): """Reshape peaks for visualization. Reshape and convert to float32 a set of peaks for visualisation with mrtrix or the fibernavigator. Parameters: ----------- peaks: nd array (..., N, 3) or PeaksAndMetrics object The peaks to be reshaped and converted to float32. Returns: -------- peaks : nd array (..., 3*N) """ if isinstance(peaks, PeaksAndMetrics): peaks = peaks.peak_dirs return peaks.reshape(np.append(peaks.shape[:-2], -1)).astype('float32') dipy-0.10.1/dipy/direction/probabilistic_direction_getter.py000066400000000000000000000242051263041327500243030ustar00rootroot00000000000000""" Implementation of a probabilistic direction getter based on sampling from discrete distribution (pmf) at each step of the tracking.""" import numpy as np from .peaks import peak_directions, default_sphere from dipy.reconst.shm import order_from_ncoef, sph_harm_lookup from dipy.tracking.local.direction_getter import DirectionGetter from dipy.tracking.local.interpolation import trilinear_interpolate4d def _asarray(cython_memview): # TODO: figure out the best way to get an array from a memory view. # `np.array(view)` works, but is quite slow. Views are also "array_like", # but using them as arrays seems to also be quite slow. return np.fromiter(cython_memview, float) class PmfGen(object): pass class SimplePmfGen(PmfGen): def __init__(self, pmf_array): if pmf_array.min() < 0: raise ValueError("pmf should not have negative values") self.pmf_array = pmf_array def get_pmf(self, point): return trilinear_interpolate4d(self.pmf_array, point) class SHCoeffPmfGen(PmfGen): def __init__(self, shcoeff, sphere, basis_type): self.shcoeff = shcoeff self.sphere = sphere sh_order = order_from_ncoef(shcoeff.shape[-1]) try: basis = sph_harm_lookup[basis_type] except KeyError: raise ValueError("%s is not a known basis type." % basis_type) self._B, m, n = basis(sh_order, sphere.theta, sphere.phi) def get_pmf(self, point): coeff = trilinear_interpolate4d(self.shcoeff, point) pmf = np.dot(self._B, coeff) pmf.clip(0, out=pmf) return pmf class PeakDirectionGetter(DirectionGetter): """An abstract class for DirectionGetters that use the peak_directions machinery.""" sphere = default_sphere def __init__(self, sphere=None, **kwargs): if sphere is not None: self.sphere = sphere self._pf_kwargs = kwargs def _peak_directions(self, blob): """Gets directions using parameters provided at init. Blob can be any function defined on ``self.sphere``, ie an ODF, PMF, FOD. """ return peak_directions(blob, self.sphere, **self._pf_kwargs)[0] class ProbabilisticDirectionGetter(PeakDirectionGetter): """Randomly samples direction of a sphere based on probability mass function (pmf). The main constructors for this class are current from_pmf and from_shcoeff. The pmf gives the probability that each direction on the sphere should be chosen as the next direction. To get the true pmf from the "raw pmf" directions more than ``max_angle`` degrees from the incoming direction are set to 0 and the result is normalized. """ @classmethod def from_pmf(klass, pmf, max_angle, sphere, **kwargs): """Constructor for making a DirectionGetter from an array of Pmfs Parameters ---------- pmf : array, 4d The pmf to be used for tracking at each voxel. max_angle : float, [0, 90] The maximum allowed angle between incoming direction and new direction. sphere : Sphere The set of directions to be used for tracking. relative_peak_threshold : float in [0., 1.] Used for extracting initial tracking directions. Passed to peak_directions. min_separation_angle : float in [0, 90] Used for extracting initial tracking directions. Passed to peak_directions. See also -------- dipy.direction.peaks.peak_directions """ pmf = np.asarray(pmf, dtype=float) if pmf.ndim != 4: raise ValueError("pmf should be a 4d array.") if pmf.shape[3] != len(sphere.theta): msg = ("The last dimension of pmf should match the number of " "points in sphere.") raise ValueError(msg) pmf_gen = SimplePmfGen(pmf) return klass(pmf_gen, max_angle, sphere, **kwargs) @classmethod def from_shcoeff(klass, shcoeff, max_angle, sphere, basis_type=None, **kwargs): """Probabilistic direction getter from a distribution of directions on the sphere. Parameters ---------- shcoeff : array The distribution of tracking directions at each voxel represented as a function on the sphere using the real spherical harmonic basis. For example the FOD of the Constrained Spherical Deconvolution model can be used this way. This distribution will be discretized using ``sphere`` and tracking directions will be chosen from the vertices of ``sphere`` based on the distribution. max_angle : float, [0, 90] The maximum allowed angle between incoming direction and new direction. sphere : Sphere The set of directions to be used for tracking. basis_type : name of basis The basis that ``shcoeff`` are associated with. ``dipy.reconst.shm.real_sym_sh_basis`` is used by default. relative_peak_threshold : float in [0., 1.] Used for extracting initial tracking directions. Passed to peak_directions. min_separation_angle : float in [0, 90] Used for extracting initial tracking directions. Passed to peak_directions. See also -------- dipy.direction.peaks.peak_directions """ pmf_gen = SHCoeffPmfGen(shcoeff, sphere, basis_type) return klass(pmf_gen, max_angle, sphere, **kwargs) def __init__(self, pmf_gen, max_angle, sphere=None, **kwargs): """Direction getter from a pmf generator. Parameters ---------- pmf_gen : PmfGen Used to get probability mass function for choosing tracking directions. max_angle : float, [0, 90] The maximum allowed angle between incoming direction and new direction. sphere : Sphere The set of directions to be used for tracking. relative_peak_threshold : float in [0., 1.] Used for extracting initial tracking directions. Passed to peak_directions. min_separation_angle : float in [0, 90] Used for extracting initial tracking directions. Passed to peak_directions. See also -------- dipy.direction.peaks.peak_directions """ PeakDirectionGetter.__init__(self, sphere, **kwargs) self.pmf_gen = pmf_gen # The vertices need to be in a contiguous array self.vertices = self.sphere.vertices.copy() cos_similarity = np.cos(np.deg2rad(max_angle)) self._set_adjacency_matrix(sphere, cos_similarity) def _set_adjacency_matrix(self, sphere, cos_similarity): """Creates a dictionary where each key is a direction from sphere and each value is a boolean array indicating which directions are less than max_angle degrees from the key""" matrix = np.dot(sphere.vertices, sphere.vertices.T) matrix = abs(matrix) >= cos_similarity keys = [tuple(v) for v in sphere.vertices] adj_matrix = dict(zip(keys, matrix)) keys = [tuple(-v) for v in sphere.vertices] adj_matrix.update(zip(keys, matrix)) self._adj_matrix = adj_matrix def initial_direction(self, point): """Returns best directions at seed location to start tracking. Parameters ---------- point : ndarray, shape (3,) The point in an image at which to lookup tracking directions. Returns ------- directions : ndarray, shape (N, 3) Possible tracking directions from point. ``N`` may be 0, all directions should be unique. """ pmf = self.pmf_gen.get_pmf(point) return self._peak_directions(pmf) def get_direction(self, point, direction): """Samples a pmf to updates ``direction`` array with a new direction. Parameters ---------- point : memory-view (or ndarray), shape (3,) The point in an image at which to lookup tracking directions. direction : memory-view (or ndarray), shape (3,) Previous tracking direction. Returns ------- status : int Returns 0 `direction` was updated with a new tracking direction, or 1 otherwise. """ # point and direction are passed in as cython memory views pmf = self.pmf_gen.get_pmf(point) cdf = (self._adj_matrix[tuple(direction)] * pmf).cumsum() if cdf[-1] == 0: return 1 random_sample = np.random.random() * cdf[-1] idx = cdf.searchsorted(random_sample, 'right') newdir = self.vertices[idx] # Update direction and return 0 for error if np.dot(newdir, _asarray(direction)) > 0: direction[:] = newdir else: direction[:] = -newdir return 0 class DeterministicMaximumDirectionGetter(ProbabilisticDirectionGetter): """Return direction of a sphere with the highest probability mass function (pmf). """ def get_direction(self, point, direction): """Find direction with the highest pmf to updates ``direction`` array with a new direction. Parameters ---------- point : memory-view (or ndarray), shape (3,) The point in an image at which to lookup tracking directions. direction : memory-view (or ndarray), shape (3,) Previous tracking direction. Returns ------- status : int Returns 0 `direction` was updated with a new tracking direction, or 1 otherwise. """ # point and direction are passed in as cython memory views pmf = self.pmf_gen.get_pmf(point) cdf = self._adj_matrix[tuple(direction)] * pmf idx = np.argmax(cdf) if pmf[idx] == 0: return 1 newdir = self.vertices[idx] # Update direction and return 0 for error if np.dot(newdir, _asarray(direction)) > 0: direction[:] = newdir else: direction[:] = -newdir return 0 dipy-0.10.1/dipy/direction/tests/000077500000000000000000000000001263041327500166305ustar00rootroot00000000000000dipy-0.10.1/dipy/direction/tests/__init__.py000066400000000000000000000000411263041327500207340ustar00rootroot00000000000000# Make direction/tests a package dipy-0.10.1/dipy/direction/tests/test_peaks.py000066400000000000000000000515201263041327500213470ustar00rootroot00000000000000import numpy as np from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_almost_equal, run_module_suite, assert_equal, assert_) from dipy.reconst.odf import (OdfFit, OdfModel, gfa) from dipy.direction.peaks import (peaks_from_model, peak_directions, peak_directions_nl, reshape_peaks_for_visualization) from dipy.core.subdivide_octahedron import create_unit_hemisphere from dipy.core.sphere import unit_icosahedron from dipy.sims.voxel import multi_tensor, all_tensor_evecs, multi_tensor_odf from dipy.data import get_data, get_sphere from dipy.core.gradients import gradient_table, GradientTable from dipy.core.sphere_stats import angular_similarity from dipy.core.sphere import HemiSphere def test_peak_directions_nl(): def discrete_eval(sphere): return abs(sphere.vertices).sum(-1) directions, values = peak_directions_nl(discrete_eval) assert_equal(directions.shape, (4, 3)) assert_array_almost_equal(abs(directions), 1 / np.sqrt(3)) assert_array_equal(values, abs(directions).sum(-1)) # Test using a different sphere sphere = unit_icosahedron.subdivide(4) directions, values = peak_directions_nl(discrete_eval, sphere=sphere) assert_equal(directions.shape, (4, 3)) assert_array_almost_equal(abs(directions), 1 / np.sqrt(3)) assert_array_equal(values, abs(directions).sum(-1)) # Test the relative_peak_threshold def discrete_eval(sphere): A = abs(sphere.vertices).sum(-1) x, y, z = sphere.vertices.T B = 1 + (x * z > 0) + 2 * (y * z > 0) return A * B directions, values = peak_directions_nl(discrete_eval, .01) assert_equal(directions.shape, (4, 3)) directions, values = peak_directions_nl(discrete_eval, .3) assert_equal(directions.shape, (3, 3)) directions, values = peak_directions_nl(discrete_eval, .6) assert_equal(directions.shape, (2, 3)) directions, values = peak_directions_nl(discrete_eval, .8) assert_equal(directions.shape, (1, 3)) assert_almost_equal(values, 4 * 3 / np.sqrt(3)) # Test odfs with large areas of zero def discrete_eval(sphere): A = abs(sphere.vertices).sum(-1) x, y, z = sphere.vertices.T B = (x * z > 0) + 2 * (y * z > 0) return A * B directions, values = peak_directions_nl(discrete_eval, 0.) assert_equal(directions.shape, (3, 3)) directions, values = peak_directions_nl(discrete_eval, .6) assert_equal(directions.shape, (2, 3)) directions, values = peak_directions_nl(discrete_eval, .8) assert_equal(directions.shape, (1, 3)) assert_almost_equal(values, 3 * 3 / np.sqrt(3)) _sphere = create_unit_hemisphere(4) _odf = (_sphere.vertices * [1, 2, 3]).sum(-1) _gtab = GradientTable(np.ones((64, 3))) class SimpleOdfModel(OdfModel): sphere = _sphere def fit(self, data): fit = SimpleOdfFit(self, data) fit.model = self return fit class SimpleOdfFit(OdfFit): def odf(self, sphere=None): if sphere is None: sphere = self.model.sphere # Use ascontiguousarray to work around a bug in NumPy return np.ascontiguousarray((sphere.vertices * [1, 2, 3]).sum(-1)) def test_OdfFit(): m = SimpleOdfModel(_gtab) f = m.fit(None) odf = f.odf(_sphere) assert_equal(len(odf), len(_sphere.theta)) def test_peak_directions(): model = SimpleOdfModel(_gtab) fit = model.fit(None) odf = fit.odf() argmax = odf.argmax() mx = odf.max() sphere = fit.model.sphere # Only one peak dir, val, ind = peak_directions(odf, sphere, .5, 45) dir_e = sphere.vertices[[argmax]] assert_array_equal(ind, [argmax]) assert_array_equal(val, odf[ind]) assert_array_equal(dir, dir_e) odf[0] = mx * .9 # Two peaks, relative_threshold dir, val, ind = peak_directions(odf, sphere, 1., 0) dir_e = sphere.vertices[[argmax]] assert_array_equal(dir, dir_e) assert_array_equal(ind, [argmax]) assert_array_equal(val, odf[ind]) dir, val, ind = peak_directions(odf, sphere, .8, 0) dir_e = sphere.vertices[[argmax, 0]] assert_array_equal(dir, dir_e) assert_array_equal(ind, [argmax, 0]) assert_array_equal(val, odf[ind]) # Two peaks, angle_sep dir, val, ind = peak_directions(odf, sphere, 0., 90) dir_e = sphere.vertices[[argmax]] assert_array_equal(dir, dir_e) assert_array_equal(ind, [argmax]) assert_array_equal(val, odf[ind]) dir, val, ind = peak_directions(odf, sphere, 0., 0) dir_e = sphere.vertices[[argmax, 0]] assert_array_equal(dir, dir_e) assert_array_equal(ind, [argmax, 0]) assert_array_equal(val, odf[ind]) def _create_mt_sim(mevals, angles, fractions, S0, SNR, half_sphere=False): _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) S, sticks = multi_tensor(gtab, mevals, S0, angles=angles, fractions=fractions, snr=SNR) sphere = get_sphere('symmetric724').subdivide(2) if half_sphere: sphere = HemiSphere.from_sphere(sphere) odf_gt = multi_tensor_odf(sphere.vertices, mevals, angles=angles, fractions=fractions) return odf_gt, sticks, sphere def test_peak_directions_thorough(): # two equal fibers (creating a very sharp odf) mevals = np.array([[0.0025, 0.0003, 0.0003], [0.0025, 0.0003, 0.0003]]) angles = [(0, 0), (45, 0)] fractions = [50, 50] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_almost_equal(angular_similarity(directions, sticks), 2, 2) # two unequal fibers fractions = [75, 25] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_almost_equal(angular_similarity(directions, sticks), 1, 2) directions, values, indices = peak_directions(odf_gt, sphere, .20, 25.) assert_almost_equal(angular_similarity(directions, sticks), 2, 2) # two equal fibers short angle (simulating very sharp ODF) mevals = np.array(([0.0045, 0.0003, 0.0003], [0.0045, 0.0003, 0.0003])) fractions = [50, 50] angles = [(0, 0), (20, 0)] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_almost_equal(angular_similarity(directions, sticks), 1, 2) directions, values, indices = peak_directions(odf_gt, sphere, .5, 15.) assert_almost_equal(angular_similarity(directions, sticks), 2, 2) # 1 fiber mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) fractions = [50, 50] angles = [(15, 0), (15, 0)] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 15.) assert_almost_equal(angular_similarity(directions, sticks), 1, 2) AE = np.rad2deg(np.arccos(np.dot(directions[0], sticks[0]))) assert_(abs(AE) < 2. or abs(AE - 180) < 2.) # two equal fibers and one small noisy one mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) angles = [(0, 0), (45, 0), (90, 0)] fractions = [45, 45, 10] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_almost_equal(angular_similarity(directions, sticks), 2, 2) # two equal fibers and one faulty mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) angles = [(0, 0), (45, 0), (60, 0)] fractions = [45, 45, 10] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_almost_equal(angular_similarity(directions, sticks), 2, 2) # two equal fibers and one very very annoying one mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) angles = [(0, 0), (45, 0), (60, 0)] fractions = [40, 40, 20] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_almost_equal(angular_similarity(directions, sticks), 2, 2) # three peaks and one faulty mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) angles = [(0, 0), (45, 0), (90, 0), (90, 45)] fractions = [35, 35, 20, 10] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_almost_equal(angular_similarity(directions, sticks), 3, 2) # four peaks mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) angles = [(0, 0), (45, 0), (90, 0), (90, 45)] fractions = [25, 25, 25, 25] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .15, 5.) assert_almost_equal(angular_similarity(directions, sticks), 4, 2) # four difficult peaks mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) angles = [(0, 0), (45, 0), (90, 0), (90, 45)] fractions = [30, 30, 20, 20] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, 0, 0) assert_almost_equal(angular_similarity(directions, sticks), 4, 1) odf_gt, sticks, hsphere = _create_mt_sim(mevals, angles, fractions, 100, None, half_sphere=True) directions, values, indices = peak_directions(odf_gt, hsphere, 0, 0) assert_equal(angular_similarity(directions, sticks) < 4, True) # four peaks and one them quite small fractions = [35, 35, 20, 10] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, 0, 0) assert_equal(angular_similarity(directions, sticks) < 4, True) odf_gt, sticks, hsphere = _create_mt_sim(mevals, angles, fractions, 100, None, half_sphere=True) directions, values, indices = peak_directions(odf_gt, hsphere, 0, 0) assert_equal(angular_similarity(directions, sticks) < 4, True) # isotropic case mevals = np.array([[0.0015, 0.0015, 0.0015]]) angles = [(0, 0)] fractions = [100.] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) directions, values, indices = peak_directions(odf_gt, sphere, .5, 25.) assert_equal(len(values) > 10, True) def test_difference_with_minmax(): # Show difference with and without minmax normalization # we create an odf here with 3 main peaks, 1 small sharp unwanted peak # (noise) and an isotropic compartment. mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003], [0.0015, 0.00005, 0.00005], [0.0015, 0.0015, 0.0015]]) angles = [(0, 0), (45, 0), (90, 0), (90, 90), (0, 0)] fractions = [20, 20, 10, 1, 100 - 20 - 20 - 10 - 1] odf_gt, sticks, sphere = _create_mt_sim(mevals, angles, fractions, 100, None) # We will show that when the minmax normalization is used we can remove # the noisy peak using a lower threshold. odf_gt_minmax = (odf_gt - odf_gt.min()) / (odf_gt.max() - odf_gt.min()) _, values_1, _ = peak_directions(odf_gt, sphere, .30, 25.) assert_equal(len(values_1), 3) _, values_2, _ = peak_directions(odf_gt_minmax, sphere, .30, 25.) assert_equal(len(values_2), 3) # Setting the smallest value of the odf to zero is like running # peak_directions without the odf_min correction. odf_gt[odf_gt.argmin()] = 0. _, values_3, _ = peak_directions(odf_gt, sphere, .30, 25.,) assert_equal(len(values_3), 4) # we show here that to actually get that noisy peak out we need to # increase the peak threshold considerably directions, values_4, indices = peak_directions(odf_gt, sphere, .60, 25.,) assert_equal(len(values_4), 3) assert_almost_equal(values_1, values_4) def test_degenerative_cases(): sphere = get_sphere('symmetric724') # completely isotropic and degencase odf = np.zeros(sphere.vertices.shape[0]) directions, values, indices = peak_directions(odf, sphere, .5, 25) print(directions, values, indices) assert_equal(len(values), 0) assert_equal(len(directions), 0) assert_equal(len(indices), 0) odf = np.zeros(sphere.vertices.shape[0]) odf[0] = 0.020 odf[1] = 0.018 directions, values, indices = peak_directions(odf, sphere, .5, 25) print(directions, values, indices) assert_equal(values[0], 0.02) odf = - np.ones(sphere.vertices.shape[0]) directions, values, indices = peak_directions(odf, sphere, .5, 25) print(directions, values, indices) assert_equal(len(values), 0) odf = np.zeros(sphere.vertices.shape[0]) odf[0] = 0.020 odf[1] = 0.018 odf[2] = - 0.018 directions, values, indices = peak_directions(odf, sphere, .5, 25) assert_equal(values[0], 0.02) odf = np.ones(sphere.vertices.shape[0]) odf += 0.1 * np.random.rand(odf.shape[0]) directions, values, indices = peak_directions(odf, sphere, .5, 25) assert_(all(values > values[0] * .5)) assert_array_equal(values, odf[indices]) odf = np.ones(sphere.vertices.shape[0]) odf[1:] = np.finfo(np.float).eps * np.random.rand(odf.shape[0] - 1) directions, values, indices = peak_directions(odf, sphere, .5, 25) assert_equal(values[0], 1) assert_equal(len(values), 1) def test_peaksFromModel(): data = np.zeros((10, 2)) # Test basic case model = SimpleOdfModel(_gtab) odf_argmax = _odf.argmax() pam = peaks_from_model(model, data, _sphere, .5, 45, normalize_peaks=True) assert_array_equal(pam.gfa, gfa(_odf)) assert_array_equal(pam.peak_values[:, 0], 1.) assert_array_equal(pam.peak_values[:, 1:], 0.) mn, mx = _odf.min(), _odf.max() assert_array_equal(pam.qa[:, 0], (mx - mn) / mx) assert_array_equal(pam.qa[:, 1:], 0.) assert_array_equal(pam.peak_indices[:, 0], odf_argmax) assert_array_equal(pam.peak_indices[:, 1:], -1) # Test that odf array matches and is right shape pam = peaks_from_model(model, data, _sphere, .5, 45, return_odf=True) expected_shape = (len(data), len(_odf)) assert_equal(pam.odf.shape, expected_shape) assert_((_odf == pam.odf).all()) assert_array_equal(pam.peak_values[:, 0], _odf.max()) # Test mask mask = (np.arange(10) % 2) == 1 pam = peaks_from_model(model, data, _sphere, .5, 45, mask=mask, normalize_peaks=True) assert_array_equal(pam.gfa[~mask], 0) assert_array_equal(pam.qa[~mask], 0) assert_array_equal(pam.peak_values[~mask], 0) assert_array_equal(pam.peak_indices[~mask], -1) assert_array_equal(pam.gfa[mask], gfa(_odf)) assert_array_equal(pam.peak_values[mask, 0], 1.) assert_array_equal(pam.peak_values[mask, 1:], 0.) mn, mx = _odf.min(), _odf.max() assert_array_equal(pam.qa[mask, 0], (mx - mn) / mx) assert_array_equal(pam.qa[mask, 1:], 0.) assert_array_equal(pam.peak_indices[mask, 0], odf_argmax) assert_array_equal(pam.peak_indices[mask, 1:], -1) def test_peaksFromModelParallel(): SNR = 100 S0 = 100 _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) data, _ = multi_tensor(gtab, mevals, S0, angles=[(0, 0), (60, 0)], fractions=[50, 50], snr=SNR) # test equality with/without multiprocessing model = SimpleOdfModel(gtab) pam_multi = peaks_from_model(model, data, _sphere, .5, 45, normalize_peaks=True, return_odf=True, return_sh=True, parallel=True) pam_single = peaks_from_model(model, data, _sphere, .5, 45, normalize_peaks=True, return_odf=True, return_sh=True, parallel=False) assert_equal(pam_multi.gfa.dtype, pam_single.gfa.dtype) assert_equal(pam_multi.gfa.shape, pam_single.gfa.shape) assert_array_almost_equal(pam_multi.gfa, pam_single.gfa) assert_equal(pam_multi.qa.dtype, pam_single.qa.dtype) assert_equal(pam_multi.qa.shape, pam_single.qa.shape) assert_array_almost_equal(pam_multi.qa, pam_single.qa) assert_equal(pam_multi.peak_values.dtype, pam_single.peak_values.dtype) assert_equal(pam_multi.peak_values.shape, pam_single.peak_values.shape) assert_array_almost_equal(pam_multi.peak_values, pam_single.peak_values) assert_equal(pam_multi.peak_indices.dtype, pam_single.peak_indices.dtype) assert_equal(pam_multi.peak_indices.shape, pam_single.peak_indices.shape) assert_array_equal(pam_multi.peak_indices, pam_single.peak_indices) assert_equal(pam_multi.peak_dirs.dtype, pam_single.peak_dirs.dtype) assert_equal(pam_multi.peak_dirs.shape, pam_single.peak_dirs.shape) assert_array_almost_equal(pam_multi.peak_dirs, pam_single.peak_dirs) assert_equal(pam_multi.shm_coeff.dtype, pam_single.shm_coeff.dtype) assert_equal(pam_multi.shm_coeff.shape, pam_single.shm_coeff.shape) assert_array_almost_equal(pam_multi.shm_coeff, pam_single.shm_coeff) assert_equal(pam_multi.odf.dtype, pam_single.odf.dtype) assert_equal(pam_multi.odf.shape, pam_single.odf.shape) assert_array_almost_equal(pam_multi.odf, pam_single.odf) def test_peaks_shm_coeff(): SNR = 100 S0 = 100 _, fbvals, fbvecs = get_data('small_64D') from dipy.data import get_sphere sphere = get_sphere('repulsion724') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) data, _ = multi_tensor(gtab, mevals, S0, angles=[(0, 0), (60, 0)], fractions=[50, 50], snr=SNR) from dipy.reconst.shm import CsaOdfModel model = CsaOdfModel(gtab, 4) pam = peaks_from_model(model, data[None, :], sphere, .5, 45, return_odf=True, return_sh=True) # Test that spherical harmonic coefficients return back correctly odf2 = np.dot(pam.shm_coeff, pam.B) assert_array_almost_equal(pam.odf, odf2) assert_equal(pam.shm_coeff.shape[-1], 45) pam = peaks_from_model(model, data[None, :], sphere, .5, 45, return_odf=True, return_sh=False) assert_equal(pam.shm_coeff, None) pam = peaks_from_model(model, data[None, :], sphere, .5, 45, return_odf=True, return_sh=True, sh_basis_type='mrtrix') odf2 = np.dot(pam.shm_coeff, pam.B) assert_array_almost_equal(pam.odf, odf2) def test_reshape_peaks_for_visualization(): data1 = np.random.randn(10, 5, 3).astype('float32') data2 = np.random.randn(10, 2, 5, 3).astype('float32') data3 = np.random.randn(10, 2, 12, 5, 3).astype('float32') data1_reshape = reshape_peaks_for_visualization(data1) data2_reshape = reshape_peaks_for_visualization(data2) data3_reshape = reshape_peaks_for_visualization(data3) assert_array_equal(data1_reshape.shape, (10, 15)) assert_array_equal(data2_reshape.shape, (10, 2, 15)) assert_array_equal(data3_reshape.shape, (10, 2, 12, 15)) assert_array_equal(data1_reshape.reshape(10, 5, 3), data1) assert_array_equal(data2_reshape.reshape(10, 2, 5, 3), data2) assert_array_equal(data3_reshape.reshape(10, 2, 12, 5, 3), data3) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/direction/tests/test_prob_direction_getter.py000066400000000000000000000042201263041327500246130ustar00rootroot00000000000000import numpy as np import numpy.testing as npt from dipy.core.sphere import unit_octahedron from dipy.reconst.shm import SphHarmFit, SphHarmModel from dipy.direction import ProbabilisticDirectionGetter def test_ProbabilisticDirectionGetter(): # Test the constructors and errors of the ProbabilisticDirectionGetter class SillyModel(SphHarmModel): sh_order = 4 def fit(self, data, mask=None): coeff = np.zeros(data.shape[:-1] + (15,)) return SphHarmFit(self, coeff, mask=None) model = SillyModel(gtab=None) data = np.zeros((3, 3, 3, 7)) fit = model.fit(data) # Sample point and direction point = np.zeros(3) dir = unit_octahedron.vertices[0].copy() # make a dg from a fit dg = ProbabilisticDirectionGetter.from_shcoeff(fit.shm_coeff, 90, unit_octahedron) state = dg.get_direction(point, dir) npt.assert_equal(state, 1) # Make a dg from a pmf N = unit_octahedron.theta.shape[0] pmf = np.zeros((3, 3, 3, N)) dg = ProbabilisticDirectionGetter.from_pmf(pmf, 90, unit_octahedron) state = dg.get_direction(point, dir) npt.assert_equal(state, 1) # pmf shape must match sphere bad_pmf = pmf[..., 1:] npt.assert_raises(ValueError, ProbabilisticDirectionGetter.from_pmf, bad_pmf, 90, unit_octahedron) # pmf must have 4 dimensions bad_pmf = pmf[0, ...] npt.assert_raises(ValueError, ProbabilisticDirectionGetter.from_pmf, bad_pmf, 90, unit_octahedron) # pmf cannot have negative values pmf[0, 0, 0, 0] = -1 npt.assert_raises(ValueError, ProbabilisticDirectionGetter.from_pmf, pmf, 90, unit_octahedron) # Check basis_type keyword dg = ProbabilisticDirectionGetter.from_shcoeff(fit.shm_coeff, 90, unit_octahedron, basis_type="mrtrix") npt.assert_raises(ValueError, ProbabilisticDirectionGetter.from_shcoeff, fit.shm_coeff, 90, unit_octahedron, basis_type="not a basis") dipy-0.10.1/dipy/external/000077500000000000000000000000001263041327500153305ustar00rootroot00000000000000dipy-0.10.1/dipy/external/__init__.py000066400000000000000000000002221263041327500174350ustar00rootroot00000000000000# init for externals package """ Calls to external packages """ # Test callable from numpy.testing import Tester test = Tester().test del Tester dipy-0.10.1/dipy/external/fsl.py000066400000000000000000000347601263041327500165000ustar00rootroot00000000000000''' FSL IO ''' from __future__ import with_statement import os from os.path import join as pjoin from subprocess import Popen, PIPE import numpy as np import numpy.linalg as npl from numpy import newaxis from scipy.ndimage import map_coordinates as mc from scipy.ndimage import affine_transform from dipy.io.dpy import Dpy import nibabel as nib from nibabel.tmpdirs import InTemporaryDirectory _VAL_FMT = ' %e' class FSLError(Exception): """ Class signals error in FSL processing """ def have_flirt(): """ Return True if we can call flirt without error Relies on the fact that flirt produces text on stdout when called with no arguments """ p = Popen('flirt', stdout=PIPE, stderr=PIPE, shell=True) stdout, stderr = p.communicate() return stdout != '' def write_bvals_bvecs(bvals, bvecs, outpath=None, prefix=''): ''' Write FSL FDT bvals and bvecs files Parameters ------------- bvals : (N,) sequence Vector with diffusion gradient strength (one per diffusion acquisition, N=no of acquisitions) bvecs : (N, 3) array-like diffusion gradient directions outpath : None or str path to write FDT bvals, bvecs text files None results in current working directory. prefix : str prefix for bvals, bvecs files in directory. Defaults to '' ''' if outpath is None: outpath = os.getcwd() bvals = tuple(bvals) bvecs = np.asarray(bvecs) bvecs[np.isnan(bvecs)] = 0 N = len(bvals) fname = pjoin(outpath, prefix + 'bvals') fmt = _VAL_FMT * N + '\n' open(fname, 'wt').write(fmt % bvals) fname = pjoin(outpath, prefix + 'bvecs') bvf = open(fname, 'wt') for dim_vals in bvecs.T: bvf.write(fmt % tuple(dim_vals)) def flirt2aff(mat, in_img, ref_img): """ Transform from `in_img` voxels to `ref_img` voxels given `mat` Parameters ---------- mat : (4,4) array contents (as array) of output ``-omat`` transformation file from flirt in_img : img image passed (as filename) to flirt as ``-in`` image ref_img : img image passed (as filename) to flirt as ``-ref`` image Returns ------- aff : (4,4) array Transform from voxel coordinates in ``in_img`` to voxel coordinates in ``ref_img`` Notes ----- Thanks to Mark Jenkinson and Jesper Andersson for the correct statements here, apologies for any errors we've added. ``flirt`` registers an ``in`` image to a ``ref`` image. It can produce (with the ``-omat`` option) - a 4 x 4 affine matrix giving the mapping from *inspace* to *refspace*. The rest of this note is to specify what *inspace* and *refspace* are. In what follows, a *voxtrans* for an image is the 4 by 4 affine ``np.diag([vox_i, vox_j, vox_k, 1])`` where ``vox_i`` etc are the voxel sizes for the first second and third voxel dimension. ``vox_i`` etc are always positive. If the input image has an affine with a negative determinant, then the mapping from voxel coordinates in the input image to *inspace* is simply *voxtrans* for the input image. If the reference image has a negative determinant, the mapping from voxel space in the reference image to *refspace* is simply *voxtrans* for the reference image. A negative determinant for the image affine is the common case, of an image with a x voxel flip. Analyze images don't store affines and flirt assumes a negative determinant in these cases. For positive determinant affines, flirt starts *inspace* and / or *refspace* with an x voxel flip. The mapping implied for an x voxel flip for image with shape (N_i, N_j, N_k) is: [[-1, 0, 0, N_i - 1], [ 0, 1, 0, 0], [ 0, 0, 1, 0], [ 0, 0, 0, 1]] If the input image has an affine with a positive determinant, then mapping from input image voxel coordinates to *inspace* is ``np.dot(input_voxtrans, input_x_flip)`` - where ``input_x_flip`` is the matrix above with ``N_i`` given by the input image first axis length. Similarly the mapping from reference voxel coordinates to *refspace*, if the reference image has a positive determinant, is ``np.dot(ref_voxtrans, ref_x_flip)`` - where ``ref_x_flip`` is the matrix above with ``N_i`` given by the reference image first axis length. """ in_hdr = in_img.get_header() ref_hdr = ref_img.get_header() # get_zooms gets the positive voxel sizes as returned in the header inspace = np.diag(in_hdr.get_zooms() + (1,)) refspace = np.diag(ref_hdr.get_zooms() + (1,)) if npl.det(in_img.get_affine()) >= 0: inspace = np.dot(inspace, _x_flipper(in_hdr.get_data_shape()[0])) if npl.det(ref_img.get_affine()) >= 0: refspace = np.dot(refspace, _x_flipper(ref_hdr.get_data_shape()[0])) # Return voxel to voxel mapping return np.dot(npl.inv(refspace), np.dot(mat, inspace)) def _x_flipper(N_i): flipr = np.diag([-1, 1, 1, 1]) flipr[0, 3] = N_i - 1 return flipr def flirt2aff_files(matfile, in_fname, ref_fname): """ Map from `in_fname` image voxels to `ref_fname` voxels given `matfile` See :func:`flirt2aff` docstring for details. Parameters ------------ matfile : str filename of output ``-omat`` transformation file from flirt in_fname : str filename for image passed to flirt as ``-in`` image ref_fname : str filename for image passed to flirt as ``-ref`` image Returns ------- aff : (4,4) array Transform from voxel coordinates in image for ``in_fname`` to voxel coordinates in image for ``ref_fname`` """ mat = np.loadtxt(matfile) in_img = nib.load(in_fname) ref_img = nib.load(ref_fname) return flirt2aff(mat, in_img, ref_img) def warp_displacements(ffa, flaff, fdis, fref, ffaw, order=1): ''' Warp an image using fsl displacements Parameters ------------ ffa : filename of nifti to be warped flaff : filename of .mat (flirt) fdis : filename of displacements (fnirtfileutils) fref : filename of reference volume e.g. (FMRIB58_FA_1mm.nii.gz) ffaw : filename for the output warped image ''' refaff = nib.load(fref).get_affine() disdata = nib.load(fdis).get_data() imgfa = nib.load(ffa) fadata = imgfa.get_data() fazooms = imgfa.get_header().get_zooms() # from fa index to ref index res = flirt2aff_files(flaff, ffa, fref) # from ref index to fa index ires = np.linalg.inv(res) # create the 4d volume which has the indices for the reference image reftmp = np.zeros(disdata.shape) ''' #create the grid indices for the reference #refinds = np.ndindex(disdata.shape[:3]) for ijk_t in refinds: i,j,k = ijk_t reftmp[i,j,k,0]=i reftmp[i,j,k,1]=j reftmp[i,j,k,2]=k ''' # same as commented above but much faster reftmp[..., 0] = np.arange(disdata.shape[0])[:, newaxis, newaxis] reftmp[..., 1] = np.arange(disdata.shape[1])[newaxis, :, newaxis] reftmp[..., 2] = np.arange(disdata.shape[2])[newaxis, newaxis, :] # affine transform from reference index to the fa index A = np.dot(reftmp, ires[:3, :3].T) + ires[:3, 3] # add the displacements but first devide them by the voxel sizes A2 = A + disdata / fazooms # hold the displacements' shape reshaping di, dj, dk, dl = disdata.shape # do the interpolation using map coordinates # the list of points where the interpolation is done given by the reshaped in 2D A2 (list of 3d points in fa index) W = mc(fadata, A2.reshape(di * dj * dk, dl).T, order=order).reshape(di, dj, dk) # save the warped image Wimg = nib.Nifti1Image(W, refaff) nib.save(Wimg, ffaw) def warp_displacements_tracks(fdpy, ffa, fmat, finv, fdis, fdisa, fref, fdpyw): """ Warp tracks from native space to the FMRIB58/MNI space We use here the fsl displacements. Have a look at create_displacements to see an example of how to use these displacements. Parameters ------------ fdpy : filename of the .dpy file with the tractography ffa : filename of nifti to be warped fmat : filename of .mat (flirt) fdis : filename of displacements (fnirtfileutils) fdisa : filename of displacements (fnirtfileutils + affine) finv : filename of invwarp displacements (invwarp) fref : filename of reference volume e.g. (FMRIB58_FA_1mm.nii.gz) fdpyw : filename of the warped tractography See also ----------- dipy.external.fsl.create_displacements """ # read the tracks from the image space dpr = Dpy(fdpy, 'r') T = dpr.read_tracks() dpr.close() # copy them in a new file dpw = Dpy(fdpyw, 'w', compression=1) dpw.write_tracks(T) dpw.close() # from fa index to ref index res = flirt2aff_files(fmat, ffa, fref) # load the reference img imgref = nib.load(fref) refaff = imgref.get_affine() # load the invwarp displacements imginvw = nib.load(finv) invwdata = imginvw.get_data() invwaff = imginvw.get_affine() # load the forward displacements imgdis = nib.load(fdis) disdata = imgdis.get_data() # load the forward displacements + affine imgdis2 = nib.load(fdisa) disdata2 = imgdis2.get_data() # from their difference create the affine disaff = disdata2 - disdata del disdata del disdata2 shape = nib.load(ffa).get_data().shape # transform the displacements affine back to image space disaff0 = affine_transform(disaff[..., 0], res[:3, :3], res[:3, 3], shape, order=1) disaff1 = affine_transform(disaff[..., 1], res[:3, :3], res[:3, 3], shape, order=1) disaff2 = affine_transform(disaff[..., 2], res[:3, :3], res[:3, 3], shape, order=1) # remove the transformed affine from the invwarp displacements di = invwdata[:, :, :, 0] + disaff0 dj = invwdata[:, :, :, 1] + disaff1 dk = invwdata[:, :, :, 2] + disaff2 dprw = Dpy(fdpyw, 'r+') rows = len(dprw.f.root.streamlines.tracks) blocks = np.round(np.linspace(0, rows, 10)).astype(int) # lets work in blocks # print rows for i in range(len(blocks) - 1): # print blocks[i],blocks[i+1] # copy a lot of tracks together caboodle = dprw.f.root.streamlines.tracks[blocks[i]:blocks[i + 1]] mci = mc(di, caboodle.T, order=1) # interpolations for i displacement mcj = mc(dj, caboodle.T, order=1) # interpolations for j displacement mck = mc(dk, caboodle.T, order=1) # interpolations for k displacement D = np.vstack((mci, mcj, mck)).T # go back to mni image space WI2 = np.dot(caboodle, res[:3, :3].T) + res[:3, 3] + D # and then to mni world space caboodlew = np.dot(WI2, refaff[:3, :3].T) + refaff[:3, 3] # write back dprw.f.root.streamlines.tracks[blocks[i]:blocks[i + 1]] = caboodlew.astype('f4') dprw.close() def pipe(cmd, print_sto=True, print_ste=True): """ A tine pipeline system to run external tools. For more advanced pipelining use nipype http://www.nipy.org/nipype cmd : String Command line to be run print_sto : boolean Print standard output (stdout) or not (default: True) print_ste : boolean Print standard error (stderr) or not (default: True) """ p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE) sto = p.stdout.readlines() ste = p.stderr.readlines() if print_sto : print(sto) if print_ste : print(ste) def dcm2nii(dname, outdir, filt='*.dcm', options='-d n -g n -i n -o'): cmd = 'dcm2nii ' + options + ' ' + outdir + ' ' + dname + '/' + filt print(cmd) pipe(cmd) def eddy_correct(in_nii, out_nii, ref=0): cmd = 'eddy_correct ' + in_nii + ' ' + out_nii + ' ' + str(ref) print(cmd) pipe(cmd) def bet(in_nii, out_nii, options=' -F -f .2 -g 0'): cmd = 'bet ' + in_nii + ' ' + out_nii + options print(cmd) pipe(cmd) def run_flirt_imgs(in_img, ref_img, dof=6, flags=''): """ Run flirt on nibabel images, returning affine Parameters ---------- in_img : `SpatialImage` image to register ref_img : `SpatialImage` image to register to dof : int, optional degrees of freedom for registration (default 6) flags : str, optional other flags to pass to flirt command string Returns ------- in_vox2out_vox : (4,4) ndarray affine such that, if ``[i, j, k]`` is a coordinate in voxels in the `in_img`, and ``[p, q, r]`` are the equivalent voxel coordinates in the reference image, then ``[p, q, r] = np.dot(in_vox2out_vox[:3,:3]), [i, j, k] + in_vox2out_vox[:3,3])`` """ omat = 'reg.mat' with InTemporaryDirectory(): nib.save(in_img, 'in.nii') nib.save(ref_img, 'ref.nii') cmd = 'flirt %s -dof %d -in in.nii -ref ref.nii -omat %s' % ( flags, dof, omat) proc = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE) stdout, stderr = proc.communicate() if not os.path.isfile(omat): raise FSLError('Command "%s" failed somehow - stdout: %s\n' 'and stderr: %s\n' % (cmd, stdout, stderr)) res = np.loadtxt(omat) return flirt2aff(res, in_img, ref_img) def apply_warp(in_nii, affine_mat, nonlin_nii, out_nii): cmd = 'applywarp --ref=${FSLDIR}/data/standard/FMRIB58_FA_1mm --in=' + in_nii + ' --warp=' + nonlin_nii + \ ' --out=' + out_nii print(cmd) pipe(cmd) def create_displacements(fin, fmat, fnonlin, finvw, fdisp, fdispa, fref): """ Create displacements using FSL's FLIRT and FNIRT tools Parameters ---------- fin : filename of initial source image fmat : filename of .mat (flirt) fnonlin : filename of fnirt output finvw : filename of invwarp displacements (invwarp) fdis : filename of fnirtfileutils fdisa : filename of fnirtfileutils (with other parameters) fref : filename of reference image e.g. (FMRIB58_FA_1mm.nii.gz) """ commands = [] commands.append('flirt -ref ' + fref + ' -in ' + fin + ' -omat ' + fmat) commands.append('fnirt --in=' + fin + ' --aff=' + fmat + ' --cout=' + fnonlin + ' --config=FA_2_FMRIB58_1mm') commands.append('invwarp --ref=' + fin + ' --warp=' + fnonlin + ' --out=' + finvw) commands.append('fnirtfileutils --in=' + fnonlin + ' --ref=${FSLDIR}/data/standard/FMRIB58_FA_1mm --out=' + fdisp) commands.append('fnirtfileutils --in=' + fnonlin + ' --ref=${FSLDIR}/data/standard/FMRIB58_FA_1mm --out=' + fdispa + ' --withaff') for c in commands: print(c) pipe(c) dipy-0.10.1/dipy/external/tests/000077500000000000000000000000001263041327500164725ustar00rootroot00000000000000dipy-0.10.1/dipy/external/tests/__init__.py000066400000000000000000000000751263041327500206050ustar00rootroot00000000000000# Externals test directory made into package with this file dipy-0.10.1/dipy/fixes/000077500000000000000000000000001263041327500146245ustar00rootroot00000000000000dipy-0.10.1/dipy/fixes/__init__.py000066400000000000000000000000411263041327500167300ustar00rootroot00000000000000# Make fixes directory a package dipy-0.10.1/dipy/fixes/argparse.py000066400000000000000000002462611263041327500170150ustar00rootroot00000000000000# emacs: -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: # Copyright 2006-2009 Steven J. Bethard . # # 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. """Command-line parsing library This module is an optparse-inspired command-line parsing library that: - handles both optional and positional arguments - produces highly informative usage messages - supports parsers that dispatch to sub-parsers The following is a simple usage example that sums integers from the command-line and writes the result to a file:: parser = argparse.ArgumentParser( description='sum the integers at the command line') parser.add_argument( 'integers', metavar='int', nargs='+', type=int, help='an integer to be summed') parser.add_argument( '--log', default=sys.stdout, type=argparse.FileType('w'), help='the file where the sum should be written') args = parser.parse_args() args.log.write('%s' % sum(args.integers)) args.log.close() The module contains the following public classes: - ArgumentParser -- The main entry point for command-line parsing. As the example above shows, the add_argument() method is used to populate the parser with actions for optional and positional arguments. Then the parse_args() method is invoked to convert the args at the command-line into an object with attributes. - ArgumentError -- The exception raised by ArgumentParser objects when there are errors with the parser's actions. Errors raised while parsing the command-line are caught by ArgumentParser and emitted as command-line messages. - FileType -- A factory for defining types of files to be created. As the example above shows, instances of FileType are typically passed as the type= argument of add_argument() calls. - Action -- The base class for parser actions. Typically actions are selected by passing strings like 'store_true' or 'append_const' to the action= argument of add_argument(). However, for greater customization of ArgumentParser actions, subclasses of Action may be defined and passed as the action= argument. - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, ArgumentDefaultsHelpFormatter -- Formatter classes which may be passed as the formatter_class= argument to the ArgumentParser constructor. HelpFormatter is the default, RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser not to change the formatting for help text, and ArgumentDefaultsHelpFormatter adds information about argument defaults to the help. All other classes in this module are considered implementation details. (Also note that HelpFormatter and RawDescriptionHelpFormatter are only considered public as object names -- the API of the formatter objects is still considered an implementation detail.) """ __version__ = '1.0.1' __all__ = [ 'ArgumentParser', 'ArgumentError', 'Namespace', 'Action', 'FileType', 'HelpFormatter', 'RawDescriptionHelpFormatter', 'RawTextHelpFormatter' 'ArgumentDefaultsHelpFormatter', ] import copy as _copy import os as _os import re as _re import sys as _sys import textwrap as _textwrap from gettext import gettext as _ try: _set = set except NameError: from sets import Set as _set try: _basestring = basestring except NameError: _basestring = str try: _sorted = sorted except NameError: def _sorted(iterable, reverse=False): result = list(iterable) result.sort() if reverse: result.reverse() return result # silence Python 2.6 buggy warnings about Exception.message if _sys.version_info[:2] == (2, 6): import warnings warnings.filterwarnings( action='ignore', message='BaseException.message has been deprecated as of Python 2.6', category=DeprecationWarning, module='argparse') SUPPRESS = '==SUPPRESS==' OPTIONAL = '?' ZERO_OR_MORE = '*' ONE_OR_MORE = '+' PARSER = '==PARSER==' # ============================= # Utility functions and classes # ============================= class _AttributeHolder(object): """Abstract base class that provides __repr__. The __repr__ method returns a string in the format:: ClassName(attr=name, attr=name, ...) The attributes are determined either by a class-level attribute, '_kwarg_names', or by inspecting the instance __dict__. """ def __repr__(self): type_name = type(self).__name__ arg_strings = [] for arg in self._get_args(): arg_strings.append(repr(arg)) for name, value in self._get_kwargs(): arg_strings.append('%s=%r' % (name, value)) return '%s(%s)' % (type_name, ', '.join(arg_strings)) def _get_kwargs(self): return _sorted(self.__dict__.items()) def _get_args(self): return [] def _ensure_value(namespace, name, value): if getattr(namespace, name, None) is None: setattr(namespace, name, value) return getattr(namespace, name) # =============== # Formatting Help # =============== class HelpFormatter(object): """Formatter for generating usage messages and argument help strings. Only the name of this class is considered a public API. All the methods provided by the class are considered an implementation detail. """ def __init__(self, prog, indent_increment=2, max_help_position=24, width=None): # default setting for width if width is None: try: width = int(_os.environ['COLUMNS']) except (KeyError, ValueError): width = 80 width -= 2 self._prog = prog self._indent_increment = indent_increment self._max_help_position = max_help_position self._width = width self._current_indent = 0 self._level = 0 self._action_max_length = 0 self._root_section = self._Section(self, None) self._current_section = self._root_section self._whitespace_matcher = _re.compile(r'\s+') self._long_break_matcher = _re.compile(r'\n\n\n+') # =============================== # Section and indentation methods # =============================== def _indent(self): self._current_indent += self._indent_increment self._level += 1 def _dedent(self): self._current_indent -= self._indent_increment assert self._current_indent >= 0, 'Indent decreased below 0.' self._level -= 1 class _Section(object): def __init__(self, formatter, parent, heading=None): self.formatter = formatter self.parent = parent self.heading = heading self.items = [] def format_help(self): # format the indented section if self.parent is not None: self.formatter._indent() join = self.formatter._join_parts for func, args in self.items: func(*args) item_help = join([func(*args) for func, args in self.items]) if self.parent is not None: self.formatter._dedent() # return nothing if the section was empty if not item_help: return '' # add the heading if the section was non-empty if self.heading is not SUPPRESS and self.heading is not None: current_indent = self.formatter._current_indent heading = '%*s%s:\n' % (current_indent, '', self.heading) else: heading = '' # join the section-initial newline, the heading and the help return join(['\n', heading, item_help, '\n']) def _add_item(self, func, args): self._current_section.items.append((func, args)) # ======================== # Message building methods # ======================== def start_section(self, heading): self._indent() section = self._Section(self, self._current_section, heading) self._add_item(section.format_help, []) self._current_section = section def end_section(self): self._current_section = self._current_section.parent self._dedent() def add_text(self, text): if text is not SUPPRESS and text is not None: self._add_item(self._format_text, [text]) def add_usage(self, usage, actions, groups, prefix=None): if usage is not SUPPRESS: args = usage, actions, groups, prefix self._add_item(self._format_usage, args) def add_argument(self, action): if action.help is not SUPPRESS: # find all invocations get_invocation = self._format_action_invocation invocations = [get_invocation(action)] for subaction in self._iter_indented_subactions(action): invocations.append(get_invocation(subaction)) # update the maximum item length invocation_length = max([len(s) for s in invocations]) action_length = invocation_length + self._current_indent self._action_max_length = max(self._action_max_length, action_length) # add the item to the list self._add_item(self._format_action, [action]) def add_arguments(self, actions): for action in actions: self.add_argument(action) # ======================= # Help-formatting methods # ======================= def format_help(self): help = self._root_section.format_help() if help: help = self._long_break_matcher.sub('\n\n', help) help = help.strip('\n') + '\n' return help def _join_parts(self, part_strings): return ''.join([part for part in part_strings if part and part is not SUPPRESS]) def _format_usage(self, usage, actions, groups, prefix): if prefix is None: prefix = _('usage: ') # if usage is specified, use that if usage is not None: usage = usage % dict(prog=self._prog) # if no optionals or positionals are available, usage is just prog elif usage is None and not actions: usage = '%(prog)s' % dict(prog=self._prog) # if optionals and positionals are available, calculate usage elif usage is None: prog = '%(prog)s' % dict(prog=self._prog) # split optionals from positionals optionals = [] positionals = [] for action in actions: if action.option_strings: optionals.append(action) else: positionals.append(action) # build full usage string format = self._format_actions_usage action_usage = format(optionals + positionals, groups) usage = ' '.join([s for s in [prog, action_usage] if s]) # wrap the usage parts if it's too long text_width = self._width - self._current_indent if len(prefix) + len(usage) > text_width: # break usage into wrappable parts part_regexp = r'\(.*?\)+|\[.*?\]+|\S+' opt_usage = format(optionals, groups) pos_usage = format(positionals, groups) opt_parts = _re.findall(part_regexp, opt_usage) pos_parts = _re.findall(part_regexp, pos_usage) assert ' '.join(opt_parts) == opt_usage assert ' '.join(pos_parts) == pos_usage # helper for wrapping lines def get_lines(parts, indent, prefix=None): lines = [] line = [] if prefix is not None: line_len = len(prefix) - 1 else: line_len = len(indent) - 1 for part in parts: if line_len + 1 + len(part) > text_width: lines.append(indent + ' '.join(line)) line = [] line_len = len(indent) - 1 line.append(part) line_len += len(part) + 1 if line: lines.append(indent + ' '.join(line)) if prefix is not None: lines[0] = lines[0][len(indent):] return lines # if prog is short, follow it with optionals or positionals if len(prefix) + len(prog) <= 0.75 * text_width: indent = ' ' * (len(prefix) + len(prog) + 1) if opt_parts: lines = get_lines([prog] + opt_parts, indent, prefix) lines.extend(get_lines(pos_parts, indent)) elif pos_parts: lines = get_lines([prog] + pos_parts, indent, prefix) else: lines = [prog] # if prog is long, put it on its own line else: indent = ' ' * len(prefix) parts = opt_parts + pos_parts lines = get_lines(parts, indent) if len(lines) > 1: lines = [] lines.extend(get_lines(opt_parts, indent)) lines.extend(get_lines(pos_parts, indent)) lines = [prog] + lines # join lines into usage usage = '\n'.join(lines) # prefix with 'usage:' return '%s%s\n\n' % (prefix, usage) def _format_actions_usage(self, actions, groups): # find group indices and identify actions in groups group_actions = _set() inserts = {} for group in groups: try: start = actions.index(group._group_actions[0]) except ValueError: continue else: end = start + len(group._group_actions) if actions[start:end] == group._group_actions: for action in group._group_actions: group_actions.add(action) if not group.required: inserts[start] = '[' inserts[end] = ']' else: inserts[start] = '(' inserts[end] = ')' for i in range(start + 1, end): inserts[i] = '|' # collect all actions format strings parts = [] for i, action in enumerate(actions): # suppressed arguments are marked with None # remove | separators for suppressed arguments if action.help is SUPPRESS: parts.append(None) if inserts.get(i) == '|': inserts.pop(i) elif inserts.get(i + 1) == '|': inserts.pop(i + 1) # produce all arg strings elif not action.option_strings: part = self._format_args(action, action.dest) # if it's in a group, strip the outer [] if action in group_actions: if part[0] == '[' and part[-1] == ']': part = part[1:-1] # add the action string to the list parts.append(part) # produce the first way to invoke the option in brackets else: option_string = action.option_strings[0] # if the Optional doesn't take a value, format is: # -s or --long if action.nargs == 0: part = '%s' % option_string # if the Optional takes a value, format is: # -s ARGS or --long ARGS else: default = action.dest.upper() args_string = self._format_args(action, default) part = '%s %s' % (option_string, args_string) # make it look optional if it's not required or in a group if not action.required and action not in group_actions: part = '[%s]' % part # add the action string to the list parts.append(part) # insert things at the necessary indices for i in _sorted(inserts, reverse=True): parts[i:i] = [inserts[i]] # join all the action items with spaces text = ' '.join([item for item in parts if item is not None]) # clean up separators for mutually exclusive groups open = r'[\[(]' close = r'[\])]' text = _re.sub(r'(%s) ' % open, r'\1', text) text = _re.sub(r' (%s)' % close, r'\1', text) text = _re.sub(r'%s *%s' % (open, close), r'', text) text = _re.sub(r'\(([^|]*)\)', r'\1', text) text = text.strip() # return the text return text def _format_text(self, text): text_width = self._width - self._current_indent indent = ' ' * self._current_indent return self._fill_text(text, text_width, indent) + '\n\n' def _format_action(self, action): # determine the required width and the entry label help_position = min(self._action_max_length + 2, self._max_help_position) help_width = self._width - help_position action_width = help_position - self._current_indent - 2 action_header = self._format_action_invocation(action) # ho nelp; start on same line and add a final newline if not action.help: tup = self._current_indent, '', action_header action_header = '%*s%s\n' % tup # short action name; start on the same line and pad two spaces elif len(action_header) <= action_width: tup = self._current_indent, '', action_width, action_header action_header = '%*s%-*s ' % tup indent_first = 0 # long action name; start on the next line else: tup = self._current_indent, '', action_header action_header = '%*s%s\n' % tup indent_first = help_position # collect the pieces of the action help parts = [action_header] # if there was help for the action, add lines of help text if action.help: help_text = self._expand_help(action) help_lines = self._split_lines(help_text, help_width) parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) for line in help_lines[1:]: parts.append('%*s%s\n' % (help_position, '', line)) # or add a newline if the description doesn't end with one elif not action_header.endswith('\n'): parts.append('\n') # if there are any sub-actions, add their help as well for subaction in self._iter_indented_subactions(action): parts.append(self._format_action(subaction)) # return a single string return self._join_parts(parts) def _format_action_invocation(self, action): if not action.option_strings: metavar, = self._metavar_formatter(action, action.dest)(1) return metavar else: parts = [] # if the Optional doesn't take a value, format is: # -s, --long if action.nargs == 0: parts.extend(action.option_strings) # if the Optional takes a value, format is: # -s ARGS, --long ARGS else: default = action.dest.upper() args_string = self._format_args(action, default) for option_string in action.option_strings: parts.append('%s %s' % (option_string, args_string)) return ', '.join(parts) def _metavar_formatter(self, action, default_metavar): if action.metavar is not None: result = action.metavar elif action.choices is not None: choice_strs = [str(choice) for choice in action.choices] result = '{%s}' % ','.join(choice_strs) else: result = default_metavar def format(tuple_size): if isinstance(result, tuple): return result else: return (result, ) * tuple_size return format def _format_args(self, action, default_metavar): get_metavar = self._metavar_formatter(action, default_metavar) if action.nargs is None: result = '%s' % get_metavar(1) elif action.nargs == OPTIONAL: result = '[%s]' % get_metavar(1) elif action.nargs == ZERO_OR_MORE: result = '[%s [%s ...]]' % get_metavar(2) elif action.nargs == ONE_OR_MORE: result = '%s [%s ...]' % get_metavar(2) elif action.nargs is PARSER: result = '%s ...' % get_metavar(1) else: formats = ['%s' for _ in range(action.nargs)] result = ' '.join(formats) % get_metavar(action.nargs) return result def _expand_help(self, action): params = dict(vars(action), prog=self._prog) for name in list(params): if params[name] is SUPPRESS: del params[name] if params.get('choices') is not None: choices_str = ', '.join([str(c) for c in params['choices']]) params['choices'] = choices_str return self._get_help_string(action) % params def _iter_indented_subactions(self, action): try: get_subactions = action._get_subactions except AttributeError: pass else: self._indent() for subaction in get_subactions(): yield subaction self._dedent() def _split_lines(self, text, width): text = self._whitespace_matcher.sub(' ', text).strip() return _textwrap.wrap(text, width) def _fill_text(self, text, width, indent): text = self._whitespace_matcher.sub(' ', text).strip() return _textwrap.fill(text, width, initial_indent=indent, subsequent_indent=indent) def _get_help_string(self, action): return action.help class RawDescriptionHelpFormatter(HelpFormatter): """Help message formatter which retains any formatting in descriptions. Only the name of this class is considered a public API. All the methods provided by the class are considered an implementation detail. """ def _fill_text(self, text, width, indent): return ''.join([indent + line for line in text.splitlines(True)]) class RawTextHelpFormatter(RawDescriptionHelpFormatter): """Help message formatter which retains formatting of all help text. Only the name of this class is considered a public API. All the methods provided by the class are considered an implementation detail. """ def _split_lines(self, text, width): return text.splitlines() class ArgumentDefaultsHelpFormatter(HelpFormatter): """Help message formatter which adds default values to argument help. Only the name of this class is considered a public API. All the methods provided by the class are considered an implementation detail. """ def _get_help_string(self, action): help = action.help if '%(default)' not in action.help: if action.default is not SUPPRESS: defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] if action.option_strings or action.nargs in defaulting_nargs: help += ' (default: %(default)s)' return help # ===================== # Options and Arguments # ===================== def _get_action_name(argument): if argument is None: return None elif argument.option_strings: return '/'.join(argument.option_strings) elif argument.metavar not in (None, SUPPRESS): return argument.metavar elif argument.dest not in (None, SUPPRESS): return argument.dest else: return None class ArgumentError(Exception): """An error from creating or using an argument (optional or positional). The string value of this exception is the message, augmented with information about the argument that caused it. """ def __init__(self, argument, message): self.argument_name = _get_action_name(argument) self.message = message def __str__(self): if self.argument_name is None: format = '%(message)s' else: format = 'argument %(argument_name)s: %(message)s' return format % dict(message=self.message, argument_name=self.argument_name) # ============== # Action classes # ============== class Action(_AttributeHolder): """Information about how to convert command line strings to Python objects. Action objects are used by an ArgumentParser to represent the information needed to parse a single argument from one or more strings from the command line. The keyword arguments to the Action constructor are also all attributes of Action instances. Keyword Arguments: - option_strings -- A list of command-line option strings which should be associated with this action. - dest -- The name of the attribute to hold the created object(s) - nargs -- The number of command-line arguments that should be consumed. By default, one argument will be consumed and a single value will be produced. Other values include: - N (an integer) consumes N arguments (and produces a list) - '?' consumes zero or one arguments - '*' consumes zero or more arguments (and produces a list) - '+' consumes one or more arguments (and produces a list) Note that the difference between the default and nargs=1 is that with the default, a single value will be produced, while with nargs=1, a list containing a single value will be produced. - const -- The value to be produced if the option is specified and the option uses an action that takes no values. - default -- The value to be produced if the option is not specified. - type -- The type which the command-line arguments should be converted to, should be one of 'string', 'int', 'float', 'complex' or a callable object that accepts a single string argument. If None, 'string' is assumed. - choices -- A container of values that should be allowed. If not None, after a command-line argument has been converted to the appropriate type, an exception will be raised if it is not a member of this collection. - required -- True if the action must always be specified at the command line. This is only meaningful for optional command-line arguments. - help -- The help string describing the argument. - metavar -- The name to be used for the option's argument with the help string. If None, the 'dest' value will be used as the name. """ def __init__(self, option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None): self.option_strings = option_strings self.dest = dest self.nargs = nargs self.const = const self.default = default self.type = type self.choices = choices self.required = required self.help = help self.metavar = metavar def _get_kwargs(self): names = [ 'option_strings', 'dest', 'nargs', 'const', 'default', 'type', 'choices', 'help', 'metavar', ] return [(name, getattr(self, name)) for name in names] def __call__(self, parser, namespace, values, option_string=None): raise NotImplementedError(_('.__call__() not defined')) class _StoreAction(Action): def __init__(self, option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None): if nargs == 0: raise ValueError('nargs for store actions must be > 0; if you ' 'have nothing to store, actions such as store ' 'true or store const may be more appropriate') if const is not None and nargs != OPTIONAL: raise ValueError('nargs must be %r to supply const' % OPTIONAL) super(_StoreAction, self).__init__( option_strings=option_strings, dest=dest, nargs=nargs, const=const, default=default, type=type, choices=choices, required=required, help=help, metavar=metavar) def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, values) class _StoreConstAction(Action): def __init__(self, option_strings, dest, const, default=None, required=False, help=None, metavar=None): super(_StoreConstAction, self).__init__( option_strings=option_strings, dest=dest, nargs=0, const=const, default=default, required=required, help=help) def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, self.const) class _StoreTrueAction(_StoreConstAction): def __init__(self, option_strings, dest, default=False, required=False, help=None): super(_StoreTrueAction, self).__init__( option_strings=option_strings, dest=dest, const=True, default=default, required=required, help=help) class _StoreFalseAction(_StoreConstAction): def __init__(self, option_strings, dest, default=True, required=False, help=None): super(_StoreFalseAction, self).__init__( option_strings=option_strings, dest=dest, const=False, default=default, required=required, help=help) class _AppendAction(Action): def __init__(self, option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None): if nargs == 0: raise ValueError('nargs for append actions must be > 0; if arg ' 'strings are not supplying the value to append, ' 'the append const action may be more appropriate') if const is not None and nargs != OPTIONAL: raise ValueError('nargs must be %r to supply const' % OPTIONAL) super(_AppendAction, self).__init__( option_strings=option_strings, dest=dest, nargs=nargs, const=const, default=default, type=type, choices=choices, required=required, help=help, metavar=metavar) def __call__(self, parser, namespace, values, option_string=None): items = _copy.copy(_ensure_value(namespace, self.dest, [])) items.append(values) setattr(namespace, self.dest, items) class _AppendConstAction(Action): def __init__(self, option_strings, dest, const, default=None, required=False, help=None, metavar=None): super(_AppendConstAction, self).__init__( option_strings=option_strings, dest=dest, nargs=0, const=const, default=default, required=required, help=help, metavar=metavar) def __call__(self, parser, namespace, values, option_string=None): items = _copy.copy(_ensure_value(namespace, self.dest, [])) items.append(self.const) setattr(namespace, self.dest, items) class _CountAction(Action): def __init__(self, option_strings, dest, default=None, required=False, help=None): super(_CountAction, self).__init__( option_strings=option_strings, dest=dest, nargs=0, default=default, required=required, help=help) def __call__(self, parser, namespace, values, option_string=None): new_count = _ensure_value(namespace, self.dest, 0) + 1 setattr(namespace, self.dest, new_count) class _HelpAction(Action): def __init__(self, option_strings, dest=SUPPRESS, default=SUPPRESS, help=None): super(_HelpAction, self).__init__( option_strings=option_strings, dest=dest, default=default, nargs=0, help=help) def __call__(self, parser, namespace, values, option_string=None): parser.print_help() parser.exit() class _VersionAction(Action): def __init__(self, option_strings, dest=SUPPRESS, default=SUPPRESS, help=None): super(_VersionAction, self).__init__( option_strings=option_strings, dest=dest, default=default, nargs=0, help=help) def __call__(self, parser, namespace, values, option_string=None): parser.print_version() parser.exit() class _SubParsersAction(Action): class _ChoicesPseudoAction(Action): def __init__(self, name, help): sup = super(_SubParsersAction._ChoicesPseudoAction, self) sup.__init__(option_strings=[], dest=name, help=help) def __init__(self, option_strings, prog, parser_class, dest=SUPPRESS, help=None, metavar=None): self._prog_prefix = prog self._parser_class = parser_class self._name_parser_map = {} self._choices_actions = [] super(_SubParsersAction, self).__init__( option_strings=option_strings, dest=dest, nargs=PARSER, choices=self._name_parser_map, help=help, metavar=metavar) def add_parser(self, name, **kwargs): # set prog from the existing prefix if kwargs.get('prog') is None: kwargs['prog'] = '%s %s' % (self._prog_prefix, name) # create a pseudo-action to hold the choice help if 'help' in kwargs: help = kwargs.pop('help') choice_action = self._ChoicesPseudoAction(name, help) self._choices_actions.append(choice_action) # create the parser and add it to the map parser = self._parser_class(**kwargs) self._name_parser_map[name] = parser return parser def _get_subactions(self): return self._choices_actions def __call__(self, parser, namespace, values, option_string=None): parser_name = values[0] arg_strings = values[1:] # set the parser name if requested if self.dest is not SUPPRESS: setattr(namespace, self.dest, parser_name) # select the parser try: parser = self._name_parser_map[parser_name] except KeyError: tup = parser_name, ', '.join(self._name_parser_map) msg = _('unknown parser %r (choices: %s)' % tup) raise ArgumentError(self, msg) # parse all the remaining options into the namespace parser.parse_args(arg_strings, namespace) # ============== # Type classes # ============== class FileType(object): """Factory for creating file object types Instances of FileType are typically passed as type= arguments to the ArgumentParser add_argument() method. Keyword Arguments: - mode -- A string indicating how the file is to be opened. Accepts the same values as the builtin open() function. - bufsize -- The file's desired buffer size. Accepts the same values as the builtin open() function. """ def __init__(self, mode='r', bufsize=None): self._mode = mode self._bufsize = bufsize def __call__(self, string): # the special argument "-" means sys.std{in,out} if string == '-': if 'r' in self._mode: return _sys.stdin elif 'w' in self._mode: return _sys.stdout else: msg = _('argument "-" with mode %r' % self._mode) raise ValueError(msg) # all other arguments are used as file names if self._bufsize: return open(string, self._mode, self._bufsize) else: return open(string, self._mode) def __repr__(self): args = [self._mode, self._bufsize] args_str = ', '.join([repr(arg) for arg in args if arg is not None]) return '%s(%s)' % (type(self).__name__, args_str) # =========================== # Optional and Positional Parsing # =========================== class Namespace(_AttributeHolder): """Simple object for storing attributes. Implements equality by attribute names and values, and provides a simple string representation. """ def __init__(self, **kwargs): for name in kwargs: setattr(self, name, kwargs[name]) def __eq__(self, other): return vars(self) == vars(other) def __ne__(self, other): return not (self == other) class _ActionsContainer(object): def __init__(self, description, prefix_chars, argument_default, conflict_handler): super(_ActionsContainer, self).__init__() self.description = description self.argument_default = argument_default self.prefix_chars = prefix_chars self.conflict_handler = conflict_handler # set up registries self._registries = {} # register actions self.register('action', None, _StoreAction) self.register('action', 'store', _StoreAction) self.register('action', 'store_const', _StoreConstAction) self.register('action', 'store_true', _StoreTrueAction) self.register('action', 'store_false', _StoreFalseAction) self.register('action', 'append', _AppendAction) self.register('action', 'append_const', _AppendConstAction) self.register('action', 'count', _CountAction) self.register('action', 'help', _HelpAction) self.register('action', 'version', _VersionAction) self.register('action', 'parsers', _SubParsersAction) # raise an exception if the conflict handler is invalid self._get_handler() # action storage self._actions = [] self._option_string_actions = {} # groups self._action_groups = [] self._mutually_exclusive_groups = [] # defaults storage self._defaults = {} # determines whether an "option" looks like a negative number self._negative_number_matcher = _re.compile(r'^-\d+|-\d*.\d+$') # whether or not there are any optionals that look like negative # numbers -- uses a list so it can be shared and edited self._has_negative_number_optionals = [] # ==================== # Registration methods # ==================== def register(self, registry_name, value, object): registry = self._registries.setdefault(registry_name, {}) registry[value] = object def _registry_get(self, registry_name, value, default=None): return self._registries[registry_name].get(value, default) # ================================== # Namespace default settings methods # ================================== def set_defaults(self, **kwargs): self._defaults.update(kwargs) # if these defaults match any existing arguments, replace # the previous default on the object with the new one for action in self._actions: if action.dest in kwargs: action.default = kwargs[action.dest] # ======================= # Adding argument actions # ======================= def add_argument(self, *args, **kwargs): """ add_argument(dest, ..., name=value, ...) add_argument(option_string, option_string, ..., name=value, ...) """ # if no positional args are supplied or only one is supplied and # it doesn't look like an option string, parse a positional # argument chars = self.prefix_chars if not args or len(args) == 1 and args[0][0] not in chars: kwargs = self._get_positional_kwargs(*args, **kwargs) # otherwise, we're adding an optional argument else: kwargs = self._get_optional_kwargs(*args, **kwargs) # if no default was supplied, use the parser-level default if 'default' not in kwargs: dest = kwargs['dest'] if dest in self._defaults: kwargs['default'] = self._defaults[dest] elif self.argument_default is not None: kwargs['default'] = self.argument_default # create the action object, and add it to the parser action_class = self._pop_action_class(kwargs) action = action_class(**kwargs) return self._add_action(action) def add_argument_group(self, *args, **kwargs): group = _ArgumentGroup(self, *args, **kwargs) self._action_groups.append(group) return group def add_mutually_exclusive_group(self, **kwargs): group = _MutuallyExclusiveGroup(self, **kwargs) self._mutually_exclusive_groups.append(group) return group def _add_action(self, action): # resolve any conflicts self._check_conflict(action) # add to actions list self._actions.append(action) action.container = self # index the action by any option strings it has for option_string in action.option_strings: self._option_string_actions[option_string] = action # set the flag if any option strings look like negative numbers for option_string in action.option_strings: if self._negative_number_matcher.match(option_string): if not self._has_negative_number_optionals: self._has_negative_number_optionals.append(True) # return the created action return action def _remove_action(self, action): self._actions.remove(action) def _add_container_actions(self, container): # collect groups by titles title_group_map = {} for group in self._action_groups: if group.title in title_group_map: msg = _('cannot merge actions - two groups are named %r') raise ValueError(msg % (group.title)) title_group_map[group.title] = group # map each action to its group group_map = {} for group in container._action_groups: # if a group with the title exists, use that, otherwise # create a new group matching the container's group if group.title not in title_group_map: title_group_map[group.title] = self.add_argument_group( title=group.title, description=group.description, conflict_handler=group.conflict_handler) # map the actions to their new group for action in group._group_actions: group_map[action] = title_group_map[group.title] # add container's mutually exclusive groups # NOTE: if add_mutually_exclusive_group ever gains title= and # description= then this code will need to be expanded as above for group in container._mutually_exclusive_groups: mutex_group = self.add_mutually_exclusive_group( required=group.required) # map the actions to their new mutex group for action in group._group_actions: group_map[action] = mutex_group # add all actions to this container or their group for action in container._actions: group_map.get(action, self)._add_action(action) def _get_positional_kwargs(self, dest, **kwargs): # make sure required is not specified if 'required' in kwargs: msg = _("'required' is an invalid argument for positionals") raise TypeError(msg) # mark positional arguments as required if at least one is # always required if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: kwargs['required'] = True if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: kwargs['required'] = True # return the keyword arguments with no option strings return dict(kwargs, dest=dest, option_strings=[]) def _get_optional_kwargs(self, *args, **kwargs): # determine short and long option strings option_strings = [] long_option_strings = [] for option_string in args: # error on one-or-fewer-character option strings if len(option_string) < 2: msg = _('invalid option string %r: ' 'must be at least two characters long') raise ValueError(msg % option_string) # error on strings that don't start with an appropriate prefix if not option_string[0] in self.prefix_chars: msg = _('invalid option string %r: ' 'must start with a character %r') tup = option_string, self.prefix_chars raise ValueError(msg % tup) # error on strings that are all prefix characters if not (_set(option_string) - _set(self.prefix_chars)): msg = _('invalid option string %r: ' 'must contain characters other than %r') tup = option_string, self.prefix_chars raise ValueError(msg % tup) # strings starting with two prefix characters are long options option_strings.append(option_string) if option_string[0] in self.prefix_chars: if option_string[1] in self.prefix_chars: long_option_strings.append(option_string) # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' dest = kwargs.pop('dest', None) if dest is None: if long_option_strings: dest_option_string = long_option_strings[0] else: dest_option_string = option_strings[0] dest = dest_option_string.lstrip(self.prefix_chars) dest = dest.replace('-', '_') # return the updated keyword arguments return dict(kwargs, dest=dest, option_strings=option_strings) def _pop_action_class(self, kwargs, default=None): action = kwargs.pop('action', default) return self._registry_get('action', action, action) def _get_handler(self): # determine function from conflict handler string handler_func_name = '_handle_conflict_%s' % self.conflict_handler try: return getattr(self, handler_func_name) except AttributeError: msg = _('invalid conflict_resolution value: %r') raise ValueError(msg % self.conflict_handler) def _check_conflict(self, action): # find all options that conflict with this option confl_optionals = [] for option_string in action.option_strings: if option_string in self._option_string_actions: confl_optional = self._option_string_actions[option_string] confl_optionals.append((option_string, confl_optional)) # resolve any conflicts if confl_optionals: conflict_handler = self._get_handler() conflict_handler(action, confl_optionals) def _handle_conflict_error(self, action, conflicting_actions): message = _('conflicting option string(s): %s') conflict_string = ', '.join([option_string for option_string, action in conflicting_actions]) raise ArgumentError(action, message % conflict_string) def _handle_conflict_resolve(self, action, conflicting_actions): # remove all conflicting options for option_string, action in conflicting_actions: # remove the conflicting option action.option_strings.remove(option_string) self._option_string_actions.pop(option_string, None) # if the option now has no option string, remove it from the # container holding it if not action.option_strings: action.container._remove_action(action) class _ArgumentGroup(_ActionsContainer): def __init__(self, container, title=None, description=None, **kwargs): # add any missing keyword arguments by checking the container update = kwargs.setdefault update('conflict_handler', container.conflict_handler) update('prefix_chars', container.prefix_chars) update('argument_default', container.argument_default) super_init = super(_ArgumentGroup, self).__init__ super_init(description=description, **kwargs) # group attributes self.title = title self._group_actions = [] # share most attributes with the container self._registries = container._registries self._actions = container._actions self._option_string_actions = container._option_string_actions self._defaults = container._defaults self._has_negative_number_optionals = \ container._has_negative_number_optionals def _add_action(self, action): action = super(_ArgumentGroup, self)._add_action(action) self._group_actions.append(action) return action def _remove_action(self, action): super(_ArgumentGroup, self)._remove_action(action) self._group_actions.remove(action) class _MutuallyExclusiveGroup(_ArgumentGroup): def __init__(self, container, required=False): super(_MutuallyExclusiveGroup, self).__init__(container) self.required = required self._container = container def _add_action(self, action): if action.required: msg = _('mutually exclusive arguments must be optional') raise ValueError(msg) action = self._container._add_action(action) self._group_actions.append(action) return action def _remove_action(self, action): self._container._remove_action(action) self._group_actions.remove(action) class ArgumentParser(_AttributeHolder, _ActionsContainer): """Object for parsing command line strings into Python objects. Keyword Arguments: - prog -- The name of the program (default: sys.argv[0]) - usage -- A usage message (default: auto-generated from arguments) - description -- A description of what the program does - epilog -- Text following the argument descriptions - version -- Add a -v/--version option with the given version string - parents -- Parsers whose arguments should be copied into this one - formatter_class -- HelpFormatter class for printing help messages - prefix_chars -- Characters that prefix optional arguments - fromfile_prefix_chars -- Characters that prefix files containing additional arguments - argument_default -- The default value for all arguments - conflict_handler -- String indicating how to handle conflicts - add_help -- Add a -h/-help option """ def __init__(self, prog=None, usage=None, description=None, epilog=None, version=None, parents=[], formatter_class=HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True): superinit = super(ArgumentParser, self).__init__ superinit(description=description, prefix_chars=prefix_chars, argument_default=argument_default, conflict_handler=conflict_handler) # default setting for prog if prog is None: prog = _os.path.basename(_sys.argv[0]) self.prog = prog self.usage = usage self.epilog = epilog self.version = version self.formatter_class = formatter_class self.fromfile_prefix_chars = fromfile_prefix_chars self.add_help = add_help add_group = self.add_argument_group self._positionals = add_group(_('positional arguments')) self._optionals = add_group(_('optional arguments')) self._subparsers = None # register types def identity(string): return string self.register('type', None, identity) # add help and version arguments if necessary # (using explicit default to override global argument_default) if self.add_help: self.add_argument( '-h', '--help', action='help', default=SUPPRESS, help=_('show this help message and exit')) if self.version: self.add_argument( '-v', '--version', action='version', default=SUPPRESS, help=_("show program's version number and exit")) # add parent arguments and defaults for parent in parents: self._add_container_actions(parent) try: defaults = parent._defaults except AttributeError: pass else: self._defaults.update(defaults) # ======================= # Pretty __repr__ methods # ======================= def _get_kwargs(self): names = [ 'prog', 'usage', 'description', 'version', 'formatter_class', 'conflict_handler', 'add_help', ] return [(name, getattr(self, name)) for name in names] # ================================== # Optional/Positional adding methods # ================================== def add_subparsers(self, **kwargs): if self._subparsers is not None: self.error(_('cannot have multiple subparser arguments')) # add the parser class to the arguments if it's not present kwargs.setdefault('parser_class', type(self)) if 'title' in kwargs or 'description' in kwargs: title = _(kwargs.pop('title', 'subcommands')) description = _(kwargs.pop('description', None)) self._subparsers = self.add_argument_group(title, description) else: self._subparsers = self._positionals # prog defaults to the usage message of this parser, skipping # optional arguments and with no "usage:" prefix if kwargs.get('prog') is None: formatter = self._get_formatter() positionals = self._get_positional_actions() groups = self._mutually_exclusive_groups formatter.add_usage(self.usage, positionals, groups, '') kwargs['prog'] = formatter.format_help().strip() # create the parsers action and add it to the positionals list parsers_class = self._pop_action_class(kwargs, 'parsers') action = parsers_class(option_strings=[], **kwargs) self._subparsers._add_action(action) # return the created parsers action return action def _add_action(self, action): if action.option_strings: self._optionals._add_action(action) else: self._positionals._add_action(action) return action def _get_optional_actions(self): return [action for action in self._actions if action.option_strings] def _get_positional_actions(self): return [action for action in self._actions if not action.option_strings] # ===================================== # Command line argument parsing methods # ===================================== def parse_args(self, args=None, namespace=None): args, argv = self.parse_known_args(args, namespace) if argv: msg = _('unrecognized arguments: %s') self.error(msg % ' '.join(argv)) return args def parse_known_args(self, args=None, namespace=None): # args default to the system args if args is None: args = _sys.argv[1:] # default Namespace built from parser defaults if namespace is None: namespace = Namespace() # add any action defaults that aren't present for action in self._actions: if action.dest is not SUPPRESS: if not hasattr(namespace, action.dest): if action.default is not SUPPRESS: default = action.default if isinstance(action.default, _basestring): default = self._get_value(action, default) setattr(namespace, action.dest, default) # add any parser defaults that aren't present for dest in self._defaults: if not hasattr(namespace, dest): setattr(namespace, dest, self._defaults[dest]) # parse the arguments and exit if there are any errors try: return self._parse_known_args(args, namespace) except ArgumentError: err = _sys.exc_info()[1] self.error(str(err)) def _parse_known_args(self, arg_strings, namespace): # replace arg strings that are file references if self.fromfile_prefix_chars is not None: arg_strings = self._read_args_from_files(arg_strings) # map all mutually exclusive arguments to the other arguments # they can't occur with action_conflicts = {} for mutex_group in self._mutually_exclusive_groups: group_actions = mutex_group._group_actions for i, mutex_action in enumerate(mutex_group._group_actions): conflicts = action_conflicts.setdefault(mutex_action, []) conflicts.extend(group_actions[:i]) conflicts.extend(group_actions[i + 1:]) # find all option indices, and determine the arg_string_pattern # which has an 'O' if there is an option at an index, # an 'A' if there is an argument, or a '-' if there is a '--' option_string_indices = {} arg_string_pattern_parts = [] arg_strings_iter = iter(arg_strings) for i, arg_string in enumerate(arg_strings_iter): # all args after -- are non-options if arg_string == '--': arg_string_pattern_parts.append('-') for arg_string in arg_strings_iter: arg_string_pattern_parts.append('A') # otherwise, add the arg to the arg strings # and note the index if it was an option else: option_tuple = self._parse_optional(arg_string) if option_tuple is None: pattern = 'A' else: option_string_indices[i] = option_tuple pattern = 'O' arg_string_pattern_parts.append(pattern) # join the pieces together to form the pattern arg_strings_pattern = ''.join(arg_string_pattern_parts) # converts arg strings to the appropriate and then takes the action seen_actions = _set() seen_non_default_actions = _set() def take_action(action, argument_strings, option_string=None): seen_actions.add(action) argument_values = self._get_values(action, argument_strings) # error if this argument is not allowed with other previously # seen arguments, assuming that actions that use the default # value don't really count as "present" if argument_values is not action.default: seen_non_default_actions.add(action) for conflict_action in action_conflicts.get(action, []): if conflict_action in seen_non_default_actions: msg = _('not allowed with argument %s') action_name = _get_action_name(conflict_action) raise ArgumentError(action, msg % action_name) # take the action if we didn't receive a SUPPRESS value # (e.g. from a default) if argument_values is not SUPPRESS: action(self, namespace, argument_values, option_string) # function to convert arg_strings into an optional action def consume_optional(start_index): # get the optional identified at this index option_tuple = option_string_indices[start_index] action, option_string, explicit_arg = option_tuple # identify additional optionals in the same arg string # (e.g. -xyz is the same as -x -y -z if no args are required) match_argument = self._match_argument action_tuples = [] while True: # if we found no optional action, skip it if action is None: extras.append(arg_strings[start_index]) return start_index + 1 # if there is an explicit argument, try to match the # optional's string arguments to only this if explicit_arg is not None: arg_count = match_argument(action, 'A') # if the action is a single-dash option and takes no # arguments, try to parse more single-dash options out # of the tail of the option string chars = self.prefix_chars if arg_count == 0 and option_string[1] not in chars: action_tuples.append((action, [], option_string)) for char in self.prefix_chars: option_string = char + explicit_arg[0] explicit_arg = explicit_arg[1:] or None optionals_map = self._option_string_actions if option_string in optionals_map: action = optionals_map[option_string] break else: msg = _('ignored explicit argument %r') raise ArgumentError(action, msg % explicit_arg) # if the action expect exactly one argument, we've # successfully matched the option; exit the loop elif arg_count == 1: stop = start_index + 1 args = [explicit_arg] action_tuples.append((action, args, option_string)) break # error if a double-dash option did not use the # explicit argument else: msg = _('ignored explicit argument %r') raise ArgumentError(action, msg % explicit_arg) # if there is no explicit argument, try to match the # optional's string arguments with the following strings # if successful, exit the loop else: start = start_index + 1 selected_patterns = arg_strings_pattern[start:] arg_count = match_argument(action, selected_patterns) stop = start + arg_count args = arg_strings[start:stop] action_tuples.append((action, args, option_string)) break # add the Optional to the list and return the index at which # the Optional's string args stopped assert action_tuples for action, args, option_string in action_tuples: take_action(action, args, option_string) return stop # the list of Positionals left to be parsed; this is modified # by consume_positionals() positionals = self._get_positional_actions() # function to convert arg_strings into positional actions def consume_positionals(start_index): # match as many Positionals as possible match_partial = self._match_arguments_partial selected_pattern = arg_strings_pattern[start_index:] arg_counts = match_partial(positionals, selected_pattern) # slice off the appropriate arg strings for each Positional # and add the Positional and its args to the list for action, arg_count in zip(positionals, arg_counts): args = arg_strings[start_index: start_index + arg_count] start_index += arg_count take_action(action, args) # slice off the Positionals that we just parsed and return the # index at which the Positionals' string args stopped positionals[:] = positionals[len(arg_counts):] return start_index # consume Positionals and Optionals alternately, until we have # passed the last option string extras = [] start_index = 0 if option_string_indices: max_option_string_index = max(option_string_indices) else: max_option_string_index = -1 while start_index <= max_option_string_index: # consume any Positionals preceding the next option next_option_string_index = min([ index for index in option_string_indices if index >= start_index]) if start_index != next_option_string_index: positionals_end_index = consume_positionals(start_index) # only try to parse the next optional if we didn't consume # the option string during the positionals parsing if positionals_end_index > start_index: start_index = positionals_end_index continue else: start_index = positionals_end_index # if we consumed all the positionals we could and we're not # at the index of an option string, there were extra arguments if start_index not in option_string_indices: strings = arg_strings[start_index:next_option_string_index] extras.extend(strings) start_index = next_option_string_index # consume the next optional and any arguments for it start_index = consume_optional(start_index) # consume any positionals following the last Optional stop_index = consume_positionals(start_index) # if we didn't consume all the argument strings, there were extras extras.extend(arg_strings[stop_index:]) # if we didn't use all the Positional objects, there were too few # arg strings supplied. if positionals: self.error(_('too few arguments')) # make sure all required actions were present for action in self._actions: if action.required: if action not in seen_actions: name = _get_action_name(action) self.error(_('argument %s is required') % name) # make sure all required groups had one option present for group in self._mutually_exclusive_groups: if group.required: for action in group._group_actions: if action in seen_non_default_actions: break # if no actions were used, report the error else: names = [_get_action_name(action) for action in group._group_actions if action.help is not SUPPRESS] msg = _('one of the arguments %s is required') self.error(msg % ' '.join(names)) # return the updated namespace and the extra arguments return namespace, extras def _read_args_from_files(self, arg_strings): # expand arguments referencing files new_arg_strings = [] for arg_string in arg_strings: # for regular arguments, just add them back into the list if arg_string[0] not in self.fromfile_prefix_chars: new_arg_strings.append(arg_string) # replace arguments referencing files with the file content else: try: args_file = open(arg_string[1:]) try: arg_strings = args_file.read().splitlines() arg_strings = self._read_args_from_files(arg_strings) new_arg_strings.extend(arg_strings) finally: args_file.close() except IOError: err = _sys.exc_info()[1] self.error(str(err)) # return the modified argument list return new_arg_strings def _match_argument(self, action, arg_strings_pattern): # match the pattern for this action to the arg strings nargs_pattern = self._get_nargs_pattern(action) match = _re.match(nargs_pattern, arg_strings_pattern) # raise an exception if we weren't able to find a match if match is None: nargs_errors = { None: _('expected one argument'), OPTIONAL: _('expected at most one argument'), ONE_OR_MORE: _('expected at least one argument'), } default = _('expected %s argument(s)') % action.nargs msg = nargs_errors.get(action.nargs, default) raise ArgumentError(action, msg) # return the number of arguments matched return len(match.group(1)) def _match_arguments_partial(self, actions, arg_strings_pattern): # progressively shorten the actions list by slicing off the # final actions until we find a match result = [] for i in range(len(actions), 0, -1): actions_slice = actions[:i] pattern = ''.join([self._get_nargs_pattern(action) for action in actions_slice]) match = _re.match(pattern, arg_strings_pattern) if match is not None: result.extend([len(string) for string in match.groups()]) break # return the list of arg string counts return result def _parse_optional(self, arg_string): # if it's an empty string, it was meant to be a positional if not arg_string: return None # if it doesn't start with a prefix, it was meant to be positional if not arg_string[0] in self.prefix_chars: return None # if it's just dashes, it was meant to be positional if not arg_string.strip('-'): return None # if the option string is present in the parser, return the action if arg_string in self._option_string_actions: action = self._option_string_actions[arg_string] return action, arg_string, None # search through all possible prefixes of the option string # and all actions in the parser for possible interpretations option_tuples = self._get_option_tuples(arg_string) # if multiple actions match, the option string was ambiguous if len(option_tuples) > 1: options = ', '.join([option_string for action, option_string, explicit_arg in option_tuples]) tup = arg_string, options self.error(_('ambiguous option: %s could match %s') % tup) # if exactly one action matched, this segmentation is good, # so return the parsed action elif len(option_tuples) == 1: option_tuple, = option_tuples return option_tuple # if it was not found as an option, but it looks like a negative # number, it was meant to be positional # unless there are negative-number-like options if self._negative_number_matcher.match(arg_string): if not self._has_negative_number_optionals: return None # if it contains a space, it was meant to be a positional if ' ' in arg_string: return None # it was meant to be an optional but there is no such option # in this parser (though it might be a valid option in a subparser) return None, arg_string, None def _get_option_tuples(self, option_string): result = [] # option strings starting with two prefix characters are only # split at the '=' chars = self.prefix_chars if option_string[0] in chars and option_string[1] in chars: if '=' in option_string: option_prefix, explicit_arg = option_string.split('=', 1) else: option_prefix = option_string explicit_arg = None for option_string in self._option_string_actions: if option_string.startswith(option_prefix): action = self._option_string_actions[option_string] tup = action, option_string, explicit_arg result.append(tup) # single character options can be concatenated with their arguments # but multiple character options always have to have their argument # separate elif option_string[0] in chars and option_string[1] not in chars: option_prefix = option_string explicit_arg = None short_option_prefix = option_string[:2] short_explicit_arg = option_string[2:] for option_string in self._option_string_actions: if option_string == short_option_prefix: action = self._option_string_actions[option_string] tup = action, option_string, short_explicit_arg result.append(tup) elif option_string.startswith(option_prefix): action = self._option_string_actions[option_string] tup = action, option_string, explicit_arg result.append(tup) # shouldn't ever get here else: self.error(_('unexpected option string: %s') % option_string) # return the collected option tuples return result def _get_nargs_pattern(self, action): # in all examples below, we have to allow for '--' args # which are represented as '-' in the pattern nargs = action.nargs # the default (None) is assumed to be a single argument if nargs is None: nargs_pattern = '(-*A-*)' # allow zero or one arguments elif nargs == OPTIONAL: nargs_pattern = '(-*A?-*)' # allow zero or more arguments elif nargs == ZERO_OR_MORE: nargs_pattern = '(-*[A-]*)' # allow one or more arguments elif nargs == ONE_OR_MORE: nargs_pattern = '(-*A[A-]*)' # allow one argument followed by any number of options or arguments elif nargs is PARSER: nargs_pattern = '(-*A[-AO]*)' # all others should be integers else: nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) # if this is an optional action, -- is not allowed if action.option_strings: nargs_pattern = nargs_pattern.replace('-*', '') nargs_pattern = nargs_pattern.replace('-', '') # return the pattern return nargs_pattern # ======================== # Value conversion methods # ======================== def _get_values(self, action, arg_strings): # for everything but PARSER args, strip out '--' if action.nargs is not PARSER: arg_strings = [s for s in arg_strings if s != '--'] # optional argument produces a default when not present if not arg_strings and action.nargs == OPTIONAL: if action.option_strings: value = action.const else: value = action.default if isinstance(value, _basestring): value = self._get_value(action, value) self._check_value(action, value) # when nargs='*' on a positional, if there were no command-line # args, use the default if it is anything other than None elif (not arg_strings and action.nargs == ZERO_OR_MORE and not action.option_strings): if action.default is not None: value = action.default else: value = arg_strings self._check_value(action, value) # single argument or optional argument produces a single value elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: arg_string, = arg_strings value = self._get_value(action, arg_string) self._check_value(action, value) # PARSER arguments convert all values, but check only the first elif action.nargs is PARSER: value = [self._get_value(action, v) for v in arg_strings] self._check_value(action, value[0]) # all other types of nargs produce a list else: value = [self._get_value(action, v) for v in arg_strings] for v in value: self._check_value(action, v) # return the converted value return value def _get_value(self, action, arg_string): type_func = self._registry_get('type', action.type, action.type) if not hasattr(type_func, '__call__'): if not hasattr(type_func, '__bases__'): # classic classes msg = _('%r is not callable') raise ArgumentError(action, msg % type_func) # convert the value to the appropriate type try: result = type_func(arg_string) # TypeErrors or ValueErrors indicate errors except (TypeError, ValueError): name = getattr(action.type, '__name__', repr(action.type)) msg = _('invalid %s value: %r') raise ArgumentError(action, msg % (name, arg_string)) # return the converted value return result def _check_value(self, action, value): # converted value must be one of the choices (if specified) if action.choices is not None and value not in action.choices: tup = value, ', '.join(map(repr, action.choices)) msg = _('invalid choice: %r (choose from %s)') % tup raise ArgumentError(action, msg) # ======================= # Help-formatting methods # ======================= def format_usage(self): formatter = self._get_formatter() formatter.add_usage(self.usage, self._actions, self._mutually_exclusive_groups) return formatter.format_help() def format_help(self): formatter = self._get_formatter() # usage formatter.add_usage(self.usage, self._actions, self._mutually_exclusive_groups) # description formatter.add_text(self.description) # positionals, optionals and user-defined groups for action_group in self._action_groups: formatter.start_section(action_group.title) formatter.add_text(action_group.description) formatter.add_arguments(action_group._group_actions) formatter.end_section() # epilog formatter.add_text(self.epilog) # determine help from format above return formatter.format_help() def format_version(self): formatter = self._get_formatter() formatter.add_text(self.version) return formatter.format_help() def _get_formatter(self): return self.formatter_class(prog=self.prog) # ===================== # Help-printing methods # ===================== def print_usage(self, file=None): self._print_message(self.format_usage(), file) def print_help(self, file=None): self._print_message(self.format_help(), file) def print_version(self, file=None): self._print_message(self.format_version(), file) def _print_message(self, message, file=None): if message: if file is None: file = _sys.stderr file.write(message) # =============== # Exiting methods # =============== def exit(self, status=0, message=None): if message: _sys.stderr.write(message) _sys.exit(status) def error(self, message): """error(message: string) Prints a usage message incorporating the message to stderr and exits. If you override this in a subclass, it should not return -- it should either exit or raise an exception. """ self.print_usage(_sys.stderr) self.exit(2, _('%s: error: %s\n') % (self.prog, message)) dipy-0.10.1/dipy/info.py000066400000000000000000000067121263041327500150210ustar00rootroot00000000000000""" This file contains defines parameters for dipy that we use to fill settings in setup.py, the dipy top-level docstring, and for building the docs. In setup.py in particular, we exec this file, so it cannot import dipy """ # dipy version information. An empty _version_extra corresponds to a # full release. '.dev' as a _version_extra string means this is a development # version _version_major = 0 _version_minor = 10 _version_micro = 1 #_version_extra = 'dev' _version_extra = '' # Format expected by setup.py and doc/source/conf.py: string of form "X.Y.Z" __version__ = "%s.%s.%s%s" % (_version_major, _version_minor, _version_micro, _version_extra) CLASSIFIERS = ["Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Scientific/Engineering"] description = 'Diffusion MRI utilities in python' # Note: this long_description is actually a copy/paste from the top-level # README.rst, so that it shows up nicely on PyPI. So please remember to edit # it only in one place and sync it correctly. long_description = """ ====== DIPY ====== Dipy is a python toolbox for analysis of MR diffusion imaging. Dipy is for research only; please do not use results from dipy for clinical decisions. Website ======= Current information can always be found from the dipy website - http://dipy.org Mailing Lists ============= Please see the developer's list at https://mail.python.org/mailman/listinfo/neuroimaging Code ==== You can find our sources and single-click downloads: * `Main repository`_ on Github. * Documentation_ for all releases and current development tree. * Download as a tar/zip file the `current trunk`_. .. _main repository: http://github.com/nipy/dipy .. _Documentation: http://dipy.org .. _current trunk: https://github.com/nipy/dipy/archive/master.zip License ======= Dipy is licensed under the terms of the BSD license. Please see the LICENSE file in the dipy distribution. Dipy uses other libraries also licensed under the BSD or the MIT licenses, with the only exception of the SHORE module which optionally uses the cvxopt library. Cvxopt is licensed under the GPL license. """ # versions for dependencies NUMPY_MIN_VERSION='1.7.1' SCIPY_MIN_VERSION='0.9' CYTHON_MIN_VERSION='0.18' NIBABEL_MIN_VERSION='1.2.0' # Main setup parameters NAME = 'dipy' MAINTAINER = "Eleftherios Garyfallidis" MAINTAINER_EMAIL = "neuroimaging@python.org" DESCRIPTION = description LONG_DESCRIPTION = long_description URL = "http://dipy.org" DOWNLOAD_URL = "http://github.com/nipy/dipy/archives/master" LICENSE = "BSD license" CLASSIFIERS = CLASSIFIERS AUTHOR = "dipy developers" AUTHOR_EMAIL = "neuroimaging@python.org" PLATFORMS = "OS Independent" MAJOR = _version_major MINOR = _version_minor MICRO = _version_micro ISRELEASE = _version_extra == '' VERSION = __version__ PROVIDES = ["dipy"] REQUIRES = ["numpy (>=%s)" % NUMPY_MIN_VERSION, "scipy (>=%s)" % SCIPY_MIN_VERSION, "nibabel (>=%s)" % NIBABEL_MIN_VERSION] dipy-0.10.1/dipy/io/000077500000000000000000000000001263041327500141155ustar00rootroot00000000000000dipy-0.10.1/dipy/io/__init__.py000066400000000000000000000006141263041327500162270ustar00rootroot00000000000000# init for io routines from __future__ import division, print_function, absolute_import from .gradients import read_bvals_bvecs from .dpy import Dpy from .bvectxt import (read_bvec_file, ornt_mapping, reorient_vectors, reorient_on_axis, orientation_from_string, orientation_to_string) from .pickles import save_pickle, load_pickle from . import utils dipy-0.10.1/dipy/io/bvectxt.py000066400000000000000000000126631263041327500161560ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np from os.path import splitext def read_bvec_file(filename, atol=.001): """ Read gradient table information from a pair of files with extentions .bvec and .bval. The bval file should have one row of values representing the bvalues of each volume in the dwi data set. The bvec file should have three rows, where the rows are the x, y, and z components of the normalized gradient direction for each of the volumes. Parameters ------------ filename : The path to the either the bvec or bval file atol : float, optional The tolorance used to check all the gradient directions are normalized. Defult is .001 """ base, ext = splitext(filename) if ext == '': bvec = base+'.bvec' bval = base+'.bval' elif ext == '.bvec': bvec = filename bval = base+'.bval' elif ext == '.bval': bvec = base+'.bvec' bval = filename else: raise ValueError('filename must have .bvec or .bval extension') b_values = np.loadtxt(bval) grad_table = np.loadtxt(bvec) if grad_table.shape[0] != 3: raise IOError('bvec file should have three rows') if b_values.ndim != 1: raise IOError('bval file should have one row') if b_values.shape[0] != grad_table.shape[1]: raise IOError('the gradient file and b value file should have the same number of columns') grad_norms = np.sqrt((grad_table**2).sum(0)) if not np.allclose(grad_norms[b_values > 0], 1, atol=atol): raise IOError('the magnitudes of the gradient directions are not within '+str(atol)+' of 1') grad_table[:,b_values > 0] = grad_table[:,b_values > 0]/grad_norms[b_values > 0] return (grad_table, b_values) def ornt_mapping(ornt1, ornt2): """Calculates the mapping needing to get from orn1 to orn2""" mapping = np.empty((len(ornt1), 2), 'int') mapping[:, 0] = -1 A = ornt1[:, 0].argsort() B = ornt2[:, 0].argsort() mapping[B, 0] = A assert (mapping[:, 0] != -1).all() sign = ornt2[:, 1] * ornt1[mapping[:, 0], 1] mapping[:, 1] = sign return mapping def reorient_vectors(input, current_ornt, new_ornt, axis=0): """Changes the orientation of a gradients or other vectors Moves vectors, storted along axis, from current_ornt to new_ornt. For example the vector [x, y, z] in "RAS" will be [-x, -y, z] in "LPS". R: Right A: Anterior S: Superior L: Left P: Posterior I: Inferior Examples -------- >>> gtab = np.array([[1, 1, 1], [1, 2, 3]]) >>> reorient_vectors(gtab, 'ras', 'asr', axis=1) array([[1, 1, 1], [2, 3, 1]]) >>> reorient_vectors(gtab, 'ras', 'lps', axis=1) array([[-1, -1, 1], [-1, -2, 3]]) >>> bvec = gtab.T >>> reorient_vectors(bvec, 'ras', 'lps', axis=0) array([[-1, -1], [-1, -2], [ 1, 3]]) >>> reorient_vectors(bvec, 'ras', 'lsp') array([[-1, -1], [ 1, 3], [-1, -2]]) """ if isinstance(current_ornt, str): current_ornt = orientation_from_string(current_ornt) if isinstance(new_ornt, str): new_ornt = orientation_from_string(new_ornt) n = input.shape[axis] if current_ornt.shape != (n,2) or new_ornt.shape != (n,2): raise ValueError("orientations do not match") input = np.asarray(input) mapping = ornt_mapping(current_ornt, new_ornt) output = input.take(mapping[:, 0], axis) out_view = np.rollaxis(output, axis, output.ndim) out_view *= mapping[:, 1] return output def reorient_on_axis(input, current_ornt, new_ornt, axis=0): if isinstance(current_ornt, str): current_ornt = orientation_from_string(current_ornt) if isinstance(new_ornt, str): new_ornt = orientation_from_string(new_ornt) n = input.shape[axis] if current_ornt.shape != (n,2) or new_ornt.shape != (n,2): raise ValueError("orientations do not match") mapping = ornt_mapping(current_ornt, new_ornt) order = [slice(None)] * input.ndim order[axis] = mapping[:, 0] shape = [1] * input.ndim shape[axis] = -1 sign = mapping[:, 1] sign.shape = shape output = input[order] output *= sign return output def orientation_from_string(string_ornt): """Returns an array representation of an ornt string""" orientation_dict = dict(r=(0,1), l=(0,-1), a=(1,1), p=(1,-1), s=(2,1), i=(2,-1)) ornt = tuple(orientation_dict[ii] for ii in string_ornt.lower()) ornt = np.array(ornt) if _check_ornt(ornt): msg = string_ornt + " does not seem to be a valid orientation string" raise ValueError(msg) return ornt def orientation_to_string(ornt): """Returns a string representation of a 3d ornt""" if _check_ornt(ornt): msg = repr(ornt) + " does not seem to be a valid orientation" raise ValueError(msg) orientation_dict = {(0,1):'r', (0,-1):'l', (1,1):'a', (1,-1):'p', (2,1):'s', (2,-1):'i'} ornt_string = '' for ii in ornt: ornt_string += orientation_dict[(ii[0], ii[1])] return ornt_string def _check_ornt(ornt): uniq = np.unique(ornt[:, 0]) if len(uniq) != len(ornt): print(len(uniq)) return True uniq = np.unique(ornt[:, 1]) if tuple(uniq) not in set([(-1, 1), (-1,), (1,)]): print(tuple(uniq)) return True dipy-0.10.1/dipy/io/dpy.py000066400000000000000000000110341263041327500152620ustar00rootroot00000000000000''' A class for handling large tractography datasets. It is built using the pytables tools which in turn implement key features of the HDF5 (hierachical data format) API [1]_. References ---------- .. [1] http://www.hdfgroup.org/HDF5/doc/H5.intro.html ''' import numpy as np # Conditional import machinery for pytables from ..utils.optpkg import optional_package # Allow import, but disable doctests, if we don't have pytables tables, have_tables, setup_module = optional_package('tables') # Make sure not to carry across setup module from * import __all__ = ['Dpy'] class Dpy(object): def __init__(self,fname,mode='r',compression=0): ''' Advanced storage system for tractography based on HDF5 Parameters ------------ fname : str, full filename mode : 'r' read 'w' write 'r+' read and write only if file already exists 'a' read and write even if file doesn't exist (not used yet) compression : 0 no compression to 9 maximum compression Examples ---------- >>> import os >>> from tempfile import mkstemp #temp file >>> from dipy.io.dpy import Dpy >>> fd,fname = mkstemp() >>> fname = fname + '.dpy' #add correct extension >>> dpw = Dpy(fname,'w') >>> A=np.ones((5,3)) >>> B=2*A.copy() >>> C=3*A.copy() >>> dpw.write_track(A) >>> dpw.write_track(B) >>> dpw.write_track(C) >>> dpw.close() >>> dpr = Dpy(fname,'r') >>> A=dpr.read_track() >>> B=dpr.read_track() >>> T=dpr.read_tracksi([0,1,2,0,0,2]) >>> dpr.close() >>> os.remove(fname) #delete file from disk ''' self.mode=mode self.f = tables.openFile(fname, mode = self.mode) self.N = 5*10**9 self.compression = compression if self.mode=='w': self.streamlines=self.f.createGroup(self.f.root,'streamlines') #create a version number self.version=self.f.createArray(self.f.root,'version',['0.0.1'],'Dpy Version Number') self.tracks = self.f.createEArray(self.f.root.streamlines, 'tracks',tables.Float32Atom(), (0, 3), "scalar Float32 earray", tables.Filters(self.compression),expectedrows=self.N) self.offsets = self.f.createEArray(self.f.root.streamlines, 'offsets',tables.Int64Atom(), (0,), "scalar Int64 earray", tables.Filters(self.compression), expectedrows=self.N+1) self.curr_pos=0 self.offsets.append(np.array([self.curr_pos]).astype(np.int64)) if self.mode=='r': self.tracks=self.f.root.streamlines.tracks self.offsets=self.f.root.streamlines.offsets self.track_no=len(self.offsets)-1 self.offs_pos=0 def version(self): ver=self.f.root.version[:] return ver[0] def write_track(self,track): ''' write on track each time ''' self.tracks.append(track.astype(np.float32)) self.curr_pos+=track.shape[0] self.offsets.append(np.array([self.curr_pos]).astype(np.int64)) def write_tracks(self,T): ''' write many tracks together ''' for track in T: self.tracks.append(track.astype(np.float32)) self.curr_pos+=track.shape[0] self.offsets.append(np.array([self.curr_pos]).astype(np.int64)) def read_track(self): ''' read one track each time ''' off0,off1=self.offsets[self.offs_pos:self.offs_pos+2] self.offs_pos+=1 return self.tracks[off0:off1] def read_tracksi(self,indices): ''' read tracks with specific indices ''' T=[] for i in indices: #print(self.offsets[i:i+2]) off0,off1=self.offsets[i:i+2] T.append(self.tracks[off0:off1]) return T def read_tracks(self): ''' read the entire tractography ''' I=self.offsets[:] TR=self.tracks[:] T=[] for i in range(len(I)-1): off0,off1=I[i:i+2] T.append(TR[off0:off1]) return T def close(self): self.f.close() if __name__ == '__main__': pass dipy-0.10.1/dipy/io/gradients.py000066400000000000000000000044771263041327500164630ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from os.path import splitext from ..utils.six import string_types import numpy as np def read_bvals_bvecs(fbvals, fbvecs): """ Read b-values and b-vectors from disk Parameters ---------- fbvals : str Full path to file with b-values. None to not read bvals. fbvecs : str Full path of file with b-vectors. None to not read bvecs. Returns ------- bvals : array, (N,) or None bvecs : array, (N, 3) or None Notes ----- Files can be either '.bvals'/'.bvecs' or '.txt' or '.npy' (containing arrays stored with the appropriate values). """ # Loop over the provided inputs, reading each one in turn and adding them # to this list: vals = [] for this_fname in [fbvals, fbvecs]: # If the input was None, we don't read anything and move on: if this_fname is None: vals.append(None) else: if isinstance(this_fname, string_types): base, ext = splitext(this_fname) if ext in ['.bvals', '.bval', '.bvecs', '.bvec', '.txt', '']: vals.append(np.squeeze(np.loadtxt(this_fname))) elif ext == '.npy': vals.append(np.squeeze(np.load(this_fname))) else: e_s = "File type %s is not recognized" % ext raise ValueError(e_s) else: raise ValueError('String with full path to file is required') # Once out of the loop, unpack them: bvals, bvecs = vals[0], vals[1] # If bvecs is None, you can just return now w/o making more checks: if bvecs is None: return bvals, bvecs if bvecs.shape[1] > bvecs.shape[0]: bvecs = bvecs.T if min(bvecs.shape) != 3: raise IOError('bvec file should have three rows') if bvecs.ndim != 2: raise IOError('bvec file should be saved as a two dimensional array') # If bvals is None, you don't need to check that they have the same shape: if bvals is None: return bvals, bvecs if len(bvals.shape) > 1: raise IOError('bval file should have one row') if max(bvals.shape) != max(bvecs.shape): raise IOError('b-values and b-vectors shapes do not correspond') return bvals, bvecs dipy-0.10.1/dipy/io/pickles.py000066400000000000000000000024161263041327500161240ustar00rootroot00000000000000""" Load and save pickles """ # Python 3 merged cPickle into pickle from ..utils.six.moves import cPickle def save_pickle(fname,dix): ''' Save `dix` to `fname` as pickle Parameters ------------ fname : str filename to save object e.g. a dictionary dix : str dictionary or other object Examples ---------- >>> import os >>> from tempfile import mkstemp >>> fd, fname = mkstemp() # make temporary file (opened, attached to fh) >>> d={0:{'d':1}} >>> save_pickle(fname, d) >>> d2=load_pickle(fname) We remove the temporary file we created for neatness >>> os.close(fd) # the file is still open, we need to close the fh >>> os.remove(fname) See also ---------- dipy.io.pickles.load_pickle ''' out=open(fname,'wb') cPickle.dump(dix,out,protocol=cPickle.HIGHEST_PROTOCOL) out.close() def load_pickle(fname): ''' Load object from pickle file `fname` Parameters ------------ fname : str filename to load dict or other python object Returns --------- dix : object dictionary or other object Examples ---------- dipy.io.pickles.save_pickle ''' inp=open(fname,'rb') dix = cPickle.load(inp) inp.close() return dix dipy-0.10.1/dipy/io/tests/000077500000000000000000000000001263041327500152575ustar00rootroot00000000000000dipy-0.10.1/dipy/io/tests/__init__.py000066400000000000000000000001721263041327500173700ustar00rootroot00000000000000# init to allow relative imports in tests # Test callable from numpy.testing import Tester test = Tester().test del Testerdipy-0.10.1/dipy/io/tests/test_bvectxt.py000066400000000000000000000050021263041327500203440ustar00rootroot00000000000000import numpy as np from numpy.testing import assert_array_equal from nose.tools import assert_raises from dipy.io.bvectxt import orientation_from_string, reorient_vectors, \ orientation_to_string, reorient_vectors def test_orientation_from_to_string(): ras = np.array(((0,1), (1,1), (2,1))) lps = np.array(((0,-1), (1,-1), (2,1))) asl = np.array(((1,1), (2,1), (0,-1))) assert_array_equal(orientation_from_string('ras'), ras) assert_array_equal(orientation_from_string('lps'), lps) assert_array_equal(orientation_from_string('asl'), asl) assert_raises(ValueError, orientation_from_string, 'aasl') assert orientation_to_string(ras) == 'ras' assert orientation_to_string(lps) == 'lps' assert orientation_to_string(asl) == 'asl' def test_reorient_vectors(): bvec = np.arange(12).reshape((3,4)) assert_array_equal(reorient_vectors(bvec, 'ras', 'ras'), bvec) assert_array_equal(reorient_vectors(bvec, 'ras', 'lpi'), -bvec) result = bvec[[1,2,0]] assert_array_equal(reorient_vectors(bvec, 'ras', 'asr'), result) bvec = result result = bvec[[1,0,2]]*[[-1],[1],[-1]] assert_array_equal(reorient_vectors(bvec, 'asr', 'ial'), result) result = bvec[[1,0,2]]*[[-1],[1],[1]] assert_array_equal(reorient_vectors(bvec, 'asr', 'iar'), result) assert_raises(ValueError, reorient_vectors, bvec, 'ras', 'ra') def test_reorient_vectors(): bvec = np.arange(12).reshape((3,4)) assert_array_equal(reorient_vectors(bvec, 'ras', 'ras'), bvec) assert_array_equal(reorient_vectors(bvec, 'ras', 'lpi'), -bvec) result = bvec[[1,2,0]] assert_array_equal(reorient_vectors(bvec, 'ras', 'asr'), result) bvec = result result = bvec[[1,0,2]]*[[-1],[1],[-1]] assert_array_equal(reorient_vectors(bvec, 'asr', 'ial'), result) result = bvec[[1,0,2]]*[[-1],[1],[1]] assert_array_equal(reorient_vectors(bvec, 'asr', 'iar'), result) assert_raises(ValueError, reorient_vectors, bvec, 'ras', 'ra') bvec = np.arange(12).reshape((3,4)) bvec = bvec.T assert_array_equal(reorient_vectors(bvec, 'ras', 'ras', axis=1), bvec) assert_array_equal(reorient_vectors(bvec, 'ras', 'lpi', axis=1), -bvec) result = bvec[:, [1,2,0]] assert_array_equal(reorient_vectors(bvec, 'ras', 'asr', axis=1), result) bvec = result result = bvec[:, [1,0,2]]*[-1, 1, -1] assert_array_equal(reorient_vectors(bvec, 'asr', 'ial', axis=1), result) result = bvec[:, [1,0,2]]*[-1, 1, 1] assert_array_equal(reorient_vectors(bvec, 'asr', 'iar', axis=1), result) dipy-0.10.1/dipy/io/tests/test_dpy.py000066400000000000000000000020621263041327500174640ustar00rootroot00000000000000import os import numpy as np from nibabel.tmpdirs import InTemporaryDirectory from ..dpy import Dpy, have_tables from nose.tools import assert_true, assert_false, \ assert_equal, assert_raises from numpy.testing import assert_array_equal, assert_array_almost_equal import numpy.testing as npt # Decorator to protect tests from being run without pytables present iftables = npt.dec.skipif(not have_tables, 'Pytables does not appear to be installed') @iftables def test_dpy(): fname = 'test.bin' with InTemporaryDirectory(): dpw = Dpy(fname, 'w') A=np.ones((5,3)) B=2*A.copy() C=3*A.copy() dpw.write_track(A) dpw.write_track(B) dpw.write_track(C) dpw.write_tracks([C,B,A]) dpw.close() dpr = Dpy(fname, 'r') assert_equal(dpr.version()=='0.0.1',True) T=dpr.read_tracksi([0,1,2,0,0,2]) T2=dpr.read_tracks() assert_equal(len(T2),6) dpr.close() assert_array_equal(A,T[0]) assert_array_equal(C,T[5]) dipy-0.10.1/dipy/io/tests/test_io.py000066400000000000000000000003401263041327500172740ustar00rootroot00000000000000""" Tests for overall io sub-package """ from ... import io from nose.tools import assert_false def test_imports(): # Make sure io has not pulled in setup_module from dpy assert_false(hasattr(io, 'setup_module')) dipy-0.10.1/dipy/io/tests/test_io_gradients.py000066400000000000000000000042401263041327500213370ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import os.path as osp import tempfile import numpy as np import numpy.testing as npt from dipy.data import get_data from dipy.io.gradients import read_bvals_bvecs from dipy.core.gradients import gradient_table def test_read_bvals_bvecs(): fimg, fbvals, fbvecs = get_data('small_101D') bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) gt = gradient_table(bvals, bvecs) npt.assert_array_equal(bvals, gt.bvals) npt.assert_array_equal(bvecs, gt.bvecs) # None should also work as an input: bvals_none, bvecs_none = read_bvals_bvecs(None, fbvecs) npt.assert_array_equal(bvecs_none, gt.bvecs) bvals_none, bvecs_none = read_bvals_bvecs(fbvals, None) npt.assert_array_equal(bvals_none, gt.bvals) # Test for error raising with unknown file formats: nan_fbvecs = osp.splitext(fbvecs)[0] + '.nan' # Nonsense extension npt.assert_raises(ValueError, read_bvals_bvecs, fbvals, nan_fbvecs) # Test for error raising with incorrect file-contents: # These bvecs only have two rows/columns: new_bvecs1 = bvecs[:, :2] # Make a temporary file bv_file1 = tempfile.NamedTemporaryFile(mode='wt') # And fill it with these 2-columned bvecs: for x in range(new_bvecs1.shape[0]): bv_file1.file.write('%s %s\n' % (new_bvecs1[x][0], new_bvecs1[x][1])) bv_file1.close() npt.assert_raises(IOError, read_bvals_bvecs, fbvals, bv_file1.name) # These bvecs are saved as one long array: new_bvecs2 = np.ravel(bvecs) bv_file2 = tempfile.NamedTemporaryFile() np.save(bv_file2, new_bvecs2) bv_file2.close() npt.assert_raises(IOError, read_bvals_bvecs, fbvals, bv_file2.name) # There are less bvecs than bvals: new_bvecs3 = bvecs[:-1, :] bv_file3 = tempfile.NamedTemporaryFile() np.save(bv_file3, new_bvecs3) bv_file3.close() npt.assert_raises(IOError, read_bvals_bvecs, fbvals, bv_file3.name) # You entered the bvecs on both sides: npt.assert_raises(IOError, read_bvals_bvecs, fbvecs, fbvecs) if __name__ == '__main__': from numpy.testing import run_module_suite run_module_suite() dipy-0.10.1/dipy/io/trackvis.py000066400000000000000000000017001263041327500163130ustar00rootroot00000000000000import nibabel as nib import numpy as np from dipy.tracking import utils def save_trk(filename, points, vox_to_ras, shape): """A temporary helper function for saving trk files. This function will soon be replaced by better trk file support in nibabel. """ voxel_order = nib.orientations.aff2axcodes(vox_to_ras) voxel_order = "".join(voxel_order) # Compute the vox_to_ras of "trackvis space" zooms = np.sqrt((vox_to_ras * vox_to_ras).sum(0)) vox_to_trk = np.diag(zooms) vox_to_trk[3, 3] = 1 vox_to_trk[:3, 3] = zooms[:3] / 2. points = utils.move_streamlines(points, input_space=vox_to_ras, output_space=vox_to_trk) data = ((p, None, None) for p in points) hdr = nib.trackvis.empty_header() hdr['dim'] = shape hdr['voxel_order'] = voxel_order hdr['voxel_size'] = zooms[:3] nib.trackvis.write(filename, data, hdr) dipy-0.10.1/dipy/io/utils.py000066400000000000000000000025201263041327500156260ustar00rootroot00000000000000''' Utility functions for file formats ''' from __future__ import division, print_function, absolute_import import numpy as np from nibabel import Nifti1Image def nifti1_symmat(image_data, *args, **kwargs): """Returns a Nifti1Image with a symmetric matrix intent Parameters: ----------- image_data : array-like should have lower triangular elements of a symmetric matrix along the last dimension all other arguments and keywords are passed to Nifti1Image Returns: -------- image : Nifti1Image 5d, extra dimensions addes before the last. Has symmetric matrix intent code """ image_data = make5d(image_data) last_dim = image_data.shape[-1] n = (np.sqrt(1+8*last_dim) - 1)/2 if (n % 1) != 0: raise ValueError("input_data does not seem to have matrix elements") image = Nifti1Image(image_data, *args, **kwargs) hdr = image.get_header() hdr.set_intent('symmetric matrix', (n,)) return image def make5d(input): """reshapes the input to have 5 dimensions, adds extra dimensions just before the last dimession """ input = np.asarray(input) if input.ndim > 5: raise ValueError("input is already more than 5d") shape = input.shape shape = shape[:-1] + (1,)*(5-len(shape)) + shape[-1:] return input.reshape(shape) dipy-0.10.1/dipy/pkg_info.py000066400000000000000000000055451263041327500156650ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import os import sys import subprocess from .utils.six.moves import configparser COMMIT_INFO_FNAME = 'COMMIT_INFO.txt' def pkg_commit_hash(pkg_path): ''' Get short form of commit hash given directory `pkg_path` There should be a file called 'COMMIT_INFO.txt' in `pkg_path`. This is a file in INI file format, with at least one section: ``commit hash``, and two variables ``archive_subst_hash`` and ``install_hash``. The first has a substitution pattern in it which may have been filled by the execution of ``git archive`` if this is an archive generated that way. The second is filled in by the installation, if the installation is from a git archive. We get the commit hash from (in order of preference): * A substituted value in ``archive_subst_hash`` * A written commit hash value in ``install_hash` * git's output, if we are in a git repository If all these fail, we return a not-found placeholder tuple Parameters ------------- pkg_path : str directory containing package Returns --------- hash_from : str Where we got the hash from - description hash_str : str short form of hash ''' # Try and get commit from written commit text file pth = os.path.join(pkg_path, COMMIT_INFO_FNAME) if not os.path.isfile(pth): raise IOError('Missing commit info file %s' % pth) cfg_parser = configparser.RawConfigParser() cfg_parser.read(pth) archive_subst = cfg_parser.get('commit hash', 'archive_subst_hash') if not archive_subst.startswith('$Format'): # it has been substituted return 'archive substitution', archive_subst install_subst = cfg_parser.get('commit hash', 'install_hash') if install_subst != '': return 'installation', install_subst # maybe we are in a repository proc = subprocess.Popen('git rev-parse --short HEAD', stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=pkg_path, shell=True) repo_commit, _ = proc.communicate() if repo_commit: return 'repository', repo_commit.strip() return '(none found)', '' def get_pkg_info(pkg_path): ''' Return dict describing the context of this package Parameters ------------ pkg_path : str path containing __init__.py for package Returns ---------- context : dict with named parameters of interest ''' src, hsh = pkg_commit_hash(pkg_path) import numpy import dipy return dict( pkg_path=pkg_path, commit_source=src, commit_hash=hsh, sys_version=sys.version, sys_executable=sys.executable, sys_platform=sys.platform, np_version=numpy.__version__, dipy_version=dipy.__version__) dipy-0.10.1/dipy/reconst/000077500000000000000000000000001263041327500151635ustar00rootroot00000000000000dipy-0.10.1/dipy/reconst/__init__.py000066400000000000000000000002361263041327500172750ustar00rootroot00000000000000#init for reconst aka the reconstruction module # Test callable from numpy.testing import Tester test = Tester().test bench = Tester().bench del Tester dipy-0.10.1/dipy/reconst/base.py000066400000000000000000000017731263041327500164570ustar00rootroot00000000000000""" Base-classes for reconstruction models and reconstruction fits. All the models in the reconst module follow the same template: a Model object is used to represent the abstract properties of the model, that are independent of the specifics of the data . These properties are reused whenver fitting a particular set of data (different voxels, for example). """ class ReconstModel(object): """ Abstract class for signal reconstruction models """ def __init__(self, gtab): """Initialization of the abstract class for signal reconstruction models Parameters ---------- gtab : GradientTable class instance """ self.gtab=gtab def fit(self, data, mask=None,**kwargs): return ReconstFit(self, data) class ReconstFit(object): """ Abstract class which holds the fit result of ReconstModel For example that could be holding FA or GFA etc. """ def __init__(self, model, data): self.model = model self.data = data dipy-0.10.1/dipy/reconst/benchmarks/000077500000000000000000000000001263041327500173005ustar00rootroot00000000000000dipy-0.10.1/dipy/reconst/benchmarks/__init__.py000066400000000000000000000000311263041327500214030ustar00rootroot00000000000000# Init for reconst bench dipy-0.10.1/dipy/reconst/benchmarks/bench_bounding_box.py000066400000000000000000000017431263041327500234730ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import """ Benchmarks for bounding_box Run all benchmarks with:: import dipy.reconst as dire dire.bench() If you have doctests enabled by default in nose (with a noserc file or environment variable), and you have a numpy version <= 1.6.1, this will also run the doctests, let's hope they pass. Run this benchmark with: nosetests -s --match '(?:^|[\\b_\\.//-])[Bb]ench' /path/to/bench_bounding_box.py """ import numpy as np from numpy.testing import measure from dipy.segment.mask import bounding_box def bench_bounding_box(): vol = np.zeros((100, 100, 100)) vol [0, 0, 0] = 1 times = 100 time = measure("bounding_box(vol)", times) / times print("Bounding_box on a sparse volume: {}".format(time)) vol[:] = 10 times = 1 time = measure("bounding_box(vol)", times) / times print("Bounding_box on a dense volume: {}".format(time)) if __name__ == "__main__": bench_bounding_box() dipy-0.10.1/dipy/reconst/benchmarks/bench_csd.py000066400000000000000000000031241263041327500215620ustar00rootroot00000000000000#!/usr/bin/env python import numpy as np import numpy.testing as npt from dipy.reconst.csdeconv import ConstrainedSphericalDeconvModel from dipy.core.gradients import GradientTable from dipy.data import read_stanford_labels def num_grad(gtab): return (~gtab.b0s_mask).sum() def bench_csdeconv(center=(50, 40, 40), width=12): img, gtab, labels_img = read_stanford_labels() data = img.get_data() labels = labels_img.get_data() shape = labels.shape mask = np.in1d(labels, [1, 2]) mask.shape = shape a, b, c = center hw = width // 2 idx = (slice(a - hw, a + hw), slice(b - hw, b + hw), slice(c - hw, c + hw)) data_small = data[idx].copy() mask_small = mask[idx].copy() voxels = mask_small.sum() cmd = "model.fit(data_small, mask_small)" print("== Benchmarking CSD fit on %d voxels ==" % voxels) msg = "SH order - %d, gradient directons - %d :: %g sec" # Basic case sh_order = 8 model = ConstrainedSphericalDeconvModel(gtab, None, sh_order=sh_order) time = npt.measure(cmd) print(msg % (sh_order, num_grad(gtab), time)) # Smaller data set data_small = data_small[..., :75].copy() gtab = GradientTable(gtab.gradients[:75]) model = ConstrainedSphericalDeconvModel(gtab, None, sh_order=sh_order) time = npt.measure(cmd) print(msg % (sh_order, num_grad(gtab), time)) # Super resolution sh_order = 12 model = ConstrainedSphericalDeconvModel(gtab, None, sh_order=sh_order) time = npt.measure(cmd) print(msg % (sh_order, num_grad(gtab), time)) if __name__ == "__main__": bench_csdeconv() dipy-0.10.1/dipy/reconst/benchmarks/bench_peaks.py000066400000000000000000000022101263041327500221070ustar00rootroot00000000000000""" Benchmarks for peak finding Run all benchmarks with:: import dipy.reconst as dire dire.bench() If you have doctests enabled by default in nose (with a noserc file or environment variable), and you have a numpy version <= 1.6.1, this will also run the doctests, let's hope they pass. Run this benchmark with: nosetests -s --match '(?:^|[\\b_\\.//-])[Bb]ench' /path/to/bench_peaks.py """ import numpy as np from dipy.reconst.recspeed import local_maxima from dipy.data import get_sphere from dipy.core.sphere import unique_edges from numpy.testing import measure def bench_local_maxima(): repeat = 10000 sphere = get_sphere('symmetric724') vertices, faces = sphere.vertices, sphere.faces odf = abs(vertices.sum(-1)) edges = unique_edges(faces) print('Timing peak finding') timed0 = measure("local_maxima(odf, edges)", repeat) print('Actual sphere: %0.2f' % timed0) # Create an artificial odf with a few peaks odf = np.zeros(len(vertices)) odf[1] = 1. odf[143] = 143. odf[505] = 505. timed1 = measure("local_maxima(odf, edges)", repeat) print('Few-peak sphere: %0.2f' % timed1) dipy-0.10.1/dipy/reconst/benchmarks/bench_squash.py000066400000000000000000000121011263041327500223100ustar00rootroot00000000000000""" Benchmarks for fast squashing Run all benchmarks with:: import dipy.reconst as dire dire.bench() If you have doctests enabled by default in nose (with a noserc file or environment variable), and you have a numpy version <= 1.6.1, this will also run the doctests, let's hope they pass. Run this benchmark with: nosetests -s --match '(?:^|[\\b_\\.//-])[Bb]ench' /path/to/bench_squash.py """ from __future__ import division, print_function, absolute_import from functools import reduce import numpy as np from dipy.core.ndindex import ndindex from dipy.reconst.quick_squash import quick_squash from numpy.testing import measure, dec def old_squash(arr, mask=None, fill=0): """Try and make a standard array from an object array This function takes an object array and attempts to convert it to a more useful dtype. If array can be converted to a better dtype, Nones are replaced by `fill`. To make the behaviour of this function more clear, here are the most common cases: 1. `arr` is an array of scalars of type `T`. Returns an array like `arr.astype(T)` 2. `arr` is an array of arrays. All items in `arr` have the same shape `S`. Returns an array with shape `arr.shape + S`. 3. `arr` is an array of arrays of different shapes. Returns `arr`. 4. Items in `arr` are not ndarrys or scalars. Returns `arr`. Parameters ---------- arr : array, dtype=object The array to be converted. mask : array, dtype=bool, optional Where arr has Nones. fill : number, optional Nones are replaced by fill. Returns ------- result : array Examples -------- >>> arr = np.empty(3, dtype=object) >>> arr.fill(2) >>> old_squash(arr) array([2, 2, 2]) >>> arr[0] = None >>> old_squash(arr) array([0, 2, 2]) >>> arr.fill(np.ones(2)) >>> r = old_squash(arr) >>> r.shape (3, 2) >>> r.dtype dtype('float64') """ if mask is None: mask = arr != np.array(None) not_none = arr[mask] # all None, just return arr if not_none.size == 0: return arr first = not_none[0] # If the first item is an ndarray if type(first) is np.ndarray: shape = first.shape try: # Check the shapes of all items all_same_shape = all(item.shape == shape for item in not_none) except AttributeError: return arr # If items have different shapes just return arr if not all_same_shape: return arr # Find common dtype. np.result_type can do this more simply, but it is # only available for numpy 1.6.0 dtypes = set(a.dtype for a in not_none) tiny_arrs = [np.zeros((1,), dtype=dt) for dt in dtypes] dtype = reduce(np.add, tiny_arrs).dtype # Create output array and fill result = np.empty(arr.shape + shape, dtype=dtype) result.fill(fill) for ijk in ndindex(arr.shape): if mask[ijk]: result[ijk] = arr[ijk] return result # If the first item is a scalar elif np.isscalar(first): "first is not an ndarray" all_scalars = all(np.isscalar(item) for item in not_none) if not all_scalars: return arr # See comment about np.result_type above. We sum against the smallest # possible type, bool, and let numpy type promotion find the best common # type. The values might all be Python scalars so we need to cast to # numpy type at the end to be sure of having a dtype. dtype = np.asarray(sum(not_none, False)).dtype temp = arr.copy() temp[~mask] = fill return temp.astype(dtype) else: return arr def bench_quick_squash(): # nosetests -s --match '(?:^|[\\b_\\.//-])[Bb]ench' repeat = 10 shape = (300, 200) arrs = np.zeros(shape, dtype=object) scalars = np.zeros(shape, dtype=object) for ijk in ndindex(arrs.shape): arrs[ijk] = np.ones((3, 5)) scalars[ijk] = np.float32(0) print('\nSquashing benchmarks') for name, objs in ( ('floats', np.zeros(shape, float).astype(object)), ('ints', np.zeros(shape, int).astype(object)), ('arrays', arrs), ('scalars', scalars), ): print(name) timed0 = measure("quick_squash(objs)", repeat) timed1 = measure("old_squash(objs)", repeat) print("fast %4.2f; slow %4.2f" % (timed0, timed1)) objs[50, 50] = None timed0 = measure("quick_squash(objs)", repeat) timed1 = measure("old_squash(objs)", repeat) print("With None: fast %4.2f; slow %4.2f" % (timed0, timed1)) msk = objs != np.array(None) timed0 = measure("quick_squash(objs, msk)", repeat) timed1 = measure("old_squash(objs, msk)", repeat) print("With mask: fast %4.2f; slow %4.2f" % (timed0, timed1)) objs[50, 50] = np.float32(0) timed0 = measure("quick_squash(objs, msk)", repeat) timed1 = measure("old_squash(objs, msk)", repeat) print("Other dtype: fast %4.2f; slow %4.2f" % (timed0, timed1)) dipy-0.10.1/dipy/reconst/benchmarks/bench_vec_val_sum.py000066400000000000000000000017751263041327500233260ustar00rootroot00000000000000""" Benchmarks for vec / val summation routine Run benchmarks with:: import dipy.reconst as dire dire.bench() If you have doctests enabled by default in nose (with a noserc file or environment variable), and you have a numpy version <= 1.6.1, this will also run the doctests, let's hope they pass. """ import numpy as np from numpy.random import randn from ..vec_val_sum import vec_val_vect from numpy.testing import measure, dec try: np.einsum except AttributeError: with_einsum = dec.skipif(True, "Need einsum for benchmark") else: with_einsum = lambda f : f @with_einsum def bench_vec_val_vect(): # nosetests -s --match '(?:^|[\\b_\\.//-])[Bb]ench' repeat = 100 shape = (100, 100) evecs, evals = randn(*(shape + (3, 3))), randn(*(shape + (3,))) etime = measure("np.einsum('...ij,...j,...kj->...ik', evecs, evals, evecs)", repeat) vtime = measure("vec_val_vect(evecs, evals)", repeat) print("einsum %4.2f; vec_val_vect %4.2f" % (etime, vtime)) dipy-0.10.1/dipy/reconst/cache.py000066400000000000000000000047001263041327500166010ustar00rootroot00000000000000from dipy.core.onetime import auto_attr class Cache(object): """Cache values based on a key object (such as a sphere or gradient table). Notes ----- This class is meant to be used as a mix-in:: class MyModel(Model, Cache): pass class MyModelFit(Fit): pass Inside a method on the fit, typical usage would be:: def odf(sphere): M = self.model.cache_get('odf_basis_matrix', key=sphere) if M is None: M = self._compute_basis_matrix(sphere) self.model.cache_set('odf_basis_matrix', key=sphere, value=M) """ # We use this method instead of __init__ to construct the cache, so # that the class can be used as a mixin, without having to worry about # calling the super-class constructor @auto_attr def _cache(self): return {} def cache_set(self, tag, key, value): """Store a value in the cache. Parameters ---------- tag : str Description of the cached value. key : object Key object used to look up the cached value. value : object Value stored in the cache for each unique combination of ``(tag, key)``. Examples -------- >>> def compute_expensive_matrix(parameters): ... # Imagine the following computation is very expensive ... return (p**2 for p in parameters) >>> c = Cache() >>> parameters = (1, 2, 3) >>> X1 = compute_expensive_matrix(parameters) >>> c.cache_set('expensive_matrix', parameters, X1) >>> X2 = c.cache_get('expensive_matrix', parameters) >>> X1 is X2 True """ self._cache[(tag, key)] = value def cache_get(self, tag, key, default=None): """Retrieve a value from the cache. Parameters ---------- tag : str Description of the cached value. key : object Key object used to look up the cached value. default : object Value to be returned if no cached entry is found. Returns ------- v : object Value from the cache associated with ``(tag, key)``. Returns `default` if no cached entry is found. """ return self._cache.get((tag, key), default) def cache_clear(self): """Clear the cache. """ self._cache = {} dipy-0.10.1/dipy/reconst/cross_validation.py000066400000000000000000000135421263041327500211050ustar00rootroot00000000000000""" Cross-validation analysis of diffusion models """ from __future__ import division, print_function, absolute_import from dipy.utils.six.moves import range import numpy as np import dipy.core.gradients as gt def coeff_of_determination(data, model, axis=-1): """ Calculate the coefficient of determination for a model prediction, relative to data. Parameters ---------- data : ndarray The data model : ndarray The predictions of a model for this data. Same shape as the data. axis: int, optional The axis along which different samples are laid out (default: -1). Returns ------- COD : ndarray The coefficient of determination. This has shape `data.shape[:-1]` Notes ----- See: http://en.wikipedia.org/wiki/Coefficient_of_determination The coefficient of determination is calculated as: .. math:: R^2 = 100 * (1 - \frac{SSE}{SSD}) where SSE is the sum of the squared error between the model and the data (sum of the squared residuals) and SSD is the sum of the squares of the deviations of the data from the mean of the data (variance * N). """ residuals = data - model ss_err = np.sum(residuals ** 2, axis=axis) demeaned_data = data - np.mean(data, axis=axis)[..., np.newaxis] ss_tot = np.sum(demeaned_data ** 2, axis=axis) # Don't divide by 0: if np.all(ss_tot == 0.0): return np.nan return 100 * (1 - (ss_err/ss_tot)) def kfold_xval(model, data, folds, *model_args, **model_kwargs): """ Perform k-fold cross-validation to generate out-of-sample predictions for each measurement. Parameters ---------- model : Model class instance The type of the model to use for prediction. The corresponding Fit object must have a `predict` function implementd One of the following: `reconst.dti.TensorModel` or `reconst.csdeconv.ConstrainedSphericalDeconvModel`. data : ndarray Diffusion MRI data acquired with the GradientTable of the model. Shape will typically be `(x, y, z, b)` where `xyz` are spatial dimensions and b is the number of bvals/bvecs in the GradientTable. folds : int The number of divisions to apply to the data model_args : list Additional arguments to the model initialization model_kwargs : dict Additional key-word arguments to the model initialization. If contains the kwarg `mask`, this will be used as a key-word argument to the `fit` method of the model object, rather than being used in the initialization of the model object Notes ----- This function assumes that a prediction API is implemented in the Model class for which prediction is conducted. That is, the Fit object that gets generated upon fitting the model needs to have a `predict` method, which receives a GradientTable class instance as input and produces a predicted signal as output. It also assumes that the model object has `bval` and `bvec` attributes holding b-values and corresponding unit vectors. References ---------- .. [1] Rokem, A., Chan, K.L. Yeatman, J.D., Pestilli, F., Mezer, A., Wandell, B.A., 2014. Evaluating the accuracy of diffusion models at multiple b-values with cross-validation. ISMRM 2014. """ # This should always be there, if the model inherits from # dipy.reconst.base.ReconstModel: gtab = model.gtab data_b = data[..., ~gtab.b0s_mask] div_by_folds = np.mod(data_b.shape[-1], folds) # Make sure that an equal number of samples get left out in each fold: if div_by_folds != 0: msg = "The number of folds must divide the diffusion-weighted " msg += "data equally, but " msg = "np.mod(%s, %s) is %s" % (data_b.shape[-1], folds, div_by_folds) raise ValueError(msg) data_0 = data[..., gtab.b0s_mask] S0 = np.mean(data_0, -1) n_in_fold = data_b.shape[-1] / folds prediction = np.zeros(data.shape) # We are going to leave out some randomly chosen samples in each iteration: order = np.random.permutation(data_b.shape[-1]) nz_bval = gtab.bvals[~gtab.b0s_mask] nz_bvec = gtab.bvecs[~gtab.b0s_mask] # Pop the mask, if there is one, out here for use in every fold: mask = model_kwargs.pop('mask', None) gtgt = gt.gradient_table # Shorthand for k in range(folds): fold_mask = np.ones(data_b.shape[-1], dtype=bool) fold_idx = order[int(k * n_in_fold): int((k + 1) * n_in_fold)] fold_mask[fold_idx] = False this_data = np.concatenate([data_0, data_b[..., fold_mask]], -1) this_gtab = gtgt(np.hstack([gtab.bvals[gtab.b0s_mask], nz_bval[fold_mask]]), np.concatenate([gtab.bvecs[gtab.b0s_mask], nz_bvec[fold_mask]])) left_out_gtab = gtgt(np.hstack([gtab.bvals[gtab.b0s_mask], nz_bval[~fold_mask]]), np.concatenate([gtab.bvecs[gtab.b0s_mask], nz_bvec[~fold_mask]])) this_model = model.__class__(this_gtab, *model_args, **model_kwargs) this_fit = this_model.fit(this_data, mask=mask) if not hasattr(this_fit, 'predict'): err_str = "Models of type: %s " % this_model.__class__ err_str += "do not have an implementation of model prediction" err_str += " and do not support cross-validation" raise ValueError(err_str) this_predict = S0[..., None] * this_fit.predict(left_out_gtab, S0=1) idx_to_assign = np.where(~gtab.b0s_mask)[0][~fold_mask] prediction[..., idx_to_assign] =\ this_predict[..., np.sum(gtab.b0s_mask):] # For the b0 measurements prediction[..., gtab.b0s_mask] = S0[..., None] return prediction dipy-0.10.1/dipy/reconst/csdeconv.py000066400000000000000000001144211263041327500173440ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import warnings import numpy as np from scipy.integrate import quad from scipy.special import lpn, gamma import scipy.linalg as la import scipy.linalg.lapack as ll from dipy.data import small_sphere, get_sphere, default_sphere from dipy.core.geometry import cart2sphere from dipy.core.ndindex import ndindex from dipy.sims.voxel import single_tensor from dipy.utils.six.moves import range from dipy.reconst.multi_voxel import multi_voxel_fit from dipy.reconst.dti import TensorModel, fractional_anisotropy from dipy.reconst.shm import (sph_harm_ind_list, real_sph_harm, sph_harm_lookup, lazy_index, SphHarmFit, real_sym_sh_basis, sh_to_rh, forward_sdeconv_mat, SphHarmModel) from dipy.direction.peaks import peaks_from_model from dipy.core.geometry import vec2vec_rotmat class AxSymShResponse(object): """A simple wrapper for response functions represented using only axially symmetric, even spherical harmonic functions (ie, m == 0 and n even). Parameters: ----------- S0 : float Signal with no diffusion weighting. dwi_response : array Response function signal as coefficients to axially symmetric, even spherical harmonic. """ def __init__(self, S0, dwi_response, bvalue=None): self.S0 = S0 self.dwi_response = dwi_response self.bvalue = bvalue self.m = np.zeros(len(dwi_response)) self.sh_order = 2 * (len(dwi_response) - 1) self.n = np.arange(0, self.sh_order + 1, 2) def basis(self, sphere): """A basis that maps the response coefficients onto a sphere.""" theta = sphere.theta[:, None] phi = sphere.phi[:, None] return real_sph_harm(self.m, self.n, theta, phi) def on_sphere(self, sphere): """Evaluates the response function on sphere.""" B = self.basis(sphere) return np.dot(self.dwi_response, B.T) class ConstrainedSphericalDeconvModel(SphHarmModel): def __init__(self, gtab, response, reg_sphere=None, sh_order=8, lambda_=1, tau=0.1): r""" Constrained Spherical Deconvolution (CSD) [1]_. Spherical deconvolution computes a fiber orientation distribution (FOD), also called fiber ODF (fODF) [2]_, as opposed to a diffusion ODF as the QballModel or the CsaOdfModel. This results in a sharper angular profile with better angular resolution that is the best object to be used for later deterministic and probabilistic tractography [3]_. A sharp fODF is obtained because a single fiber *response* function is injected as *a priori* knowledge. The response function is often data-driven and is thus provided as input to the ConstrainedSphericalDeconvModel. It will be used as deconvolution kernel, as described in [1]_. Parameters ---------- gtab : GradientTable response : tuple or AxSymShResponse object A tuple with two elements. The first is the eigen-values as an (3,) ndarray and the second is the signal value for the response function without diffusion weighting. This is to be able to generate a single fiber synthetic signal. The response function will be used as deconvolution kernel ([1]_) reg_sphere : Sphere (optional) sphere used to build the regularization B matrix. Default: 'symmetric362'. sh_order : int (optional) maximal spherical harmonics order. Default: 8 lambda_ : float (optional) weight given to the constrained-positivity regularization part of the deconvolution equation (see [1]_). Default: 1 tau : float (optional) threshold controlling the amplitude below which the corresponding fODF is assumed to be zero. Ideally, tau should be set to zero. However, to improve the stability of the algorithm, tau is set to tau*100 % of the mean fODF amplitude (here, 10% by default) (see [1]_). Default: 0.1 References ---------- .. [1] Tournier, J.D., et al. NeuroImage 2007. Robust determination of the fibre orientation distribution in diffusion MRI: Non-negativity constrained super-resolved spherical deconvolution .. [2] Descoteaux, M., et al. IEEE TMI 2009. Deterministic and Probabilistic Tractography Based on Complex Fibre Orientation Distributions .. [3] C\^ot\'e, M-A., et al. Medical Image Analysis 2013. Tractometer: Towards validation of tractography pipelines .. [4] Tournier, J.D, et al. Imaging Systems and Technology 2012. MRtrix: Diffusion Tractography in Crossing Fiber Regions """ # Initialize the parent class: SphHarmModel.__init__(self, gtab) m, n = sph_harm_ind_list(sh_order) self.m, self.n = m, n self._where_b0s = lazy_index(gtab.b0s_mask) self._where_dwi = lazy_index(~gtab.b0s_mask) no_params = ((sh_order + 1) * (sh_order + 2)) / 2 if no_params > np.sum(gtab.b0s_mask == False): msg = "Number of parameters required for the fit are more " msg += "than the actual data points" warnings.warn(msg, UserWarning) x, y, z = gtab.gradients[self._where_dwi].T r, theta, phi = cart2sphere(x, y, z) # for the gradient sphere self.B_dwi = real_sph_harm(m, n, theta[:, None], phi[:, None]) # for the sphere used in the regularization positivity constraint if reg_sphere is None: self.sphere = small_sphere else: self.sphere = reg_sphere r, theta, phi = cart2sphere(self.sphere.x, self.sphere.y, self.sphere.z) self.B_reg = real_sph_harm(m, n, theta[:, None], phi[:, None]) if response is None: response = (np.array([0.0015, 0.0003, 0.0003]), 1) self.response = response if isinstance(response, AxSymShResponse): r_sh = response.dwi_response self.response_scaling = response.S0 n_response = response.n m_response = response.m else: self.S_r = estimate_response(gtab, self.response[0], self.response[1]) r_sh = np.linalg.lstsq(self.B_dwi, self.S_r[self._where_dwi])[0] n_response = n m_response = m self.response_scaling = response[1] r_rh = sh_to_rh(r_sh, m_response, n_response) self.R = forward_sdeconv_mat(r_rh, n) # scale lambda_ to account for differences in the number of # SH coefficients and number of mapped directions # This is exactly what is done in [4]_ lambda_ = (lambda_ * self.R.shape[0] * r_rh[0] / (np.sqrt(self.B_reg.shape[0]) * np.sqrt(362.))) self.B_reg *= lambda_ self.sh_order = sh_order self.tau = tau self._X = X = self.R.diagonal() * self.B_dwi self._P = np.dot(X.T, X) @multi_voxel_fit def fit(self, data): dwi_data = data[self._where_dwi] shm_coeff, _ = csdeconv(dwi_data, self._X, self.B_reg, self.tau, P=self._P) return SphHarmFit(self, shm_coeff, None) def predict(self, sh_coeff, gtab=None, S0=1): """Compute a signal prediction given spherical harmonic coefficients for the provided GradientTable class instance. Parameters ---------- sh_coeff : ndarray The spherical harmonic representation of the FOD from which to make the signal prediction. gtab : GradientTable The gradients for which the signal will be predicted. Use the model's gradient table by default. S0 : ndarray or float The non diffusion-weighted signal value. Returns ------- pred_sig : ndarray The predicted signal. """ if gtab is None or gtab is self.gtab: SH_basis = self.B_dwi gtab = self.gtab else: x, y, z = gtab.gradients[~gtab.b0s_mask].T r, theta, phi = cart2sphere(x, y, z) SH_basis, m, n = real_sym_sh_basis(self.sh_order, theta, phi) # Because R is diagonal, the matrix multiply is written as a multiply predict_matrix = SH_basis * self.R.diagonal() S0 = np.asarray(S0)[..., None] scaling = S0 / self.response_scaling # This is the key operation: convolve and multiply by S0: pre_pred_sig = scaling * np.dot(predict_matrix, sh_coeff) # Now put everything in its right place: pred_sig = np.zeros(pre_pred_sig.shape[:-1] + (gtab.bvals.shape[0],)) pred_sig[..., ~gtab.b0s_mask] = pre_pred_sig pred_sig[..., gtab.b0s_mask] = S0 return pred_sig class ConstrainedSDTModel(SphHarmModel): def __init__(self, gtab, ratio, reg_sphere=None, sh_order=8, lambda_=1., tau=0.1): r""" Spherical Deconvolution Transform (SDT) [1]_. The SDT computes a fiber orientation distribution (FOD) as opposed to a diffusion ODF as the QballModel or the CsaOdfModel. This results in a sharper angular profile with better angular resolution. The Constrained SDTModel is similar to the Constrained CSDModel but mathematically it deconvolves the q-ball ODF as oppposed to the HARDI signal (see [1]_ for a comparison and a through discussion). A sharp fODF is obtained because a single fiber *response* function is injected as *a priori* knowledge. In the SDTModel, this response is a single fiber q-ball ODF as opposed to a single fiber signal function for the CSDModel. The response function will be used as deconvolution kernel. Parameters ---------- gtab : GradientTable ratio : float ratio of the smallest vs the largest eigenvalue of the single prolate tensor response function reg_sphere : Sphere sphere used to build the regularization B matrix sh_order : int maximal spherical harmonics order lambda_ : float weight given to the constrained-positivity regularization part of the deconvolution equation tau : float threshold (tau *mean(fODF)) controlling the amplitude below which the corresponding fODF is assumed to be zero. References ---------- .. [1] Descoteaux, M., et al. IEEE TMI 2009. Deterministic and Probabilistic Tractography Based on Complex Fibre Orientation Distributions. """ SphHarmModel.__init__(self, gtab) m, n = sph_harm_ind_list(sh_order) self.m, self.n = m, n self._where_b0s = lazy_index(gtab.b0s_mask) self._where_dwi = lazy_index(~gtab.b0s_mask) no_params = ((sh_order + 1) * (sh_order + 2)) / 2 if no_params > np.sum(gtab.b0s_mask == False): msg = "Number of parameters required for the fit are more " msg += "than the actual data points" warnings.warn(msg, UserWarning) x, y, z = gtab.gradients[self._where_dwi].T r, theta, phi = cart2sphere(x, y, z) # for the gradient sphere self.B_dwi = real_sph_harm(m, n, theta[:, None], phi[:, None]) # for the odf sphere if reg_sphere is None: self.sphere = get_sphere('symmetric362') else: self.sphere = reg_sphere r, theta, phi = cart2sphere(self.sphere.x, self.sphere.y, self.sphere.z) self.B_reg = real_sph_harm(m, n, theta[:, None], phi[:, None]) self.R, self.P = forward_sdt_deconv_mat(ratio, n) # scale lambda_ to account for differences in the number of # SH coefficients and number of mapped directions self.lambda_ = (lambda_ * self.R.shape[0] * self.R[0, 0] / self.B_reg.shape[0]) self.tau = tau self.sh_order = sh_order @multi_voxel_fit def fit(self, data): s_sh = np.linalg.lstsq(self.B_dwi, data[self._where_dwi])[0] # initial ODF estimation odf_sh = np.dot(self.P, s_sh) qball_odf = np.dot(self.B_reg, odf_sh) Z = np.linalg.norm(qball_odf) # normalize ODF odf_sh /= Z shm_coeff, num_it = odf_deconv(odf_sh, self.R, self.B_reg, self.lambda_, self.tau) # print 'SDT CSD converged after %d iterations' % num_it return SphHarmFit(self, shm_coeff, None) def estimate_response(gtab, evals, S0): """ Estimate single fiber response function Parameters ---------- gtab : GradientTable evals : ndarray S0 : float non diffusion weighted Returns ------- S : estimated signal """ evecs = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]]) return single_tensor(gtab, S0, evals, evecs, snr=None) def forward_sdt_deconv_mat(ratio, n, r2_term=False): """ Build forward sharpening deconvolution transform (SDT) matrix Parameters ---------- ratio : float ratio = $\frac{\lambda_2}{\lambda_1}$ of the single fiber response function n : ndarray (N,) The degree of spherical harmonic function associated with each row of the deconvolution matrix. Only even degrees are allowed. r2_term : bool True if ODF comes from an ODF computed from a model using the $r^2$ term in the integral. For example, DSI, GQI, SHORE, CSA, Tensor, Multi-tensor ODFs. This results in using the proper analytical response function solution solving from the single-fiber ODF with the r^2 term. This derivation is not published anywhere but is very similar to [1]_. Returns ------- R : ndarray (N, N) SDT deconvolution matrix P : ndarray (N, N) Funk-Radon Transform (FRT) matrix References ---------- .. [1] Descoteaux, M. PhD Thesis. INRIA Sophia-Antipolis. 2008. """ if np.any(n % 2): raise ValueError("n has odd degrees, expecting only even degrees") n_degrees = n.max() // 2 + 1 sdt = np.zeros(n_degrees) # SDT matrix frt = np.zeros(n_degrees) # FRT (Funk-Radon transform) q-ball matrix for l in np.arange(0, n_degrees*2, 2): if r2_term: sharp = quad(lambda z: lpn(l, z)[0][-1] * gamma(1.5) * np.sqrt(ratio / (4 * np.pi ** 3)) / np.power((1 - (1 - ratio) * z ** 2), 1.5), -1., 1.) else: sharp = quad(lambda z: lpn(l, z)[0][-1] * np.sqrt(1 / (1 - (1 - ratio) * z * z)), -1., 1.) sdt[l // 2] = sharp[0] frt[l // 2] = 2 * np.pi * lpn(l, 0)[0][-1] idx = n // 2 b = sdt[idx] bb = frt[idx] return np.diag(b), np.diag(bb) potrf, potrs = ll.get_lapack_funcs(('potrf', 'potrs')) def _solve_cholesky(Q, z): L, info = potrf(Q, lower=False, overwrite_a=False, clean=False) if info > 0: msg = "%d-th leading minor not positive definite" % info raise la.LinAlgError(msg) if info < 0: msg = 'illegal value in %d-th argument of internal potrf' % -info raise ValueError(msg) f, info = potrs(L, z, lower=False, overwrite_b=False) if info != 0: msg = 'illegal value in %d-th argument of internal potrs' % -info raise ValueError(msg) return f def csdeconv(dwsignal, X, B_reg, tau=0.1, convergence=50, P=None): r""" Constrained-regularized spherical deconvolution (CSD) [1]_ Deconvolves the axially symmetric single fiber response function `r_rh` in rotational harmonics coefficients from the diffusion weighted signal in `dwsignal`. Parameters ---------- dwsignal : array Diffusion weighted signals to be deconvolved. X : array Prediction matrix which estimates diffusion weighted signals from FOD coefficients. B_reg : array (N, B) SH basis matrix which maps FOD coefficients to FOD values on the surface of the sphere. B_reg should be scaled to account for lambda. tau : float Threshold controlling the amplitude below which the corresponding fODF is assumed to be zero. Ideally, tau should be set to zero. However, to improve the stability of the algorithm, tau is set to tau*100 % of the max fODF amplitude (here, 10% by default). This is similar to peak detection where peaks below 0.1 amplitude are usually considered noise peaks. Because SDT is based on a q-ball ODF deconvolution, and not signal deconvolution, using the max instead of mean (as in CSD), is more stable. convergence : int Maximum number of iterations to allow the deconvolution to converge. P : ndarray This is an optimization to avoid computing ``dot(X.T, X)`` many times. If the same ``X`` is used many times, ``P`` can be precomputed and passed to this function. Returns ------- fodf_sh : ndarray (``(sh_order + 1)*(sh_order + 2)/2``,) Spherical harmonics coefficients of the constrained-regularized fiber ODF. num_it : int Number of iterations in the constrained-regularization used for convergence. Notes ----- This section describes how the fitting of the SH coefficients is done. Problem is to minimise per iteration: $F(f_n) = ||Xf_n - S||^2 + \lambda^2 ||H_{n-1} f_n||^2$ Where $X$ maps current FOD SH coefficients $f_n$ to DW signals $s$ and $H_{n-1}$ maps FOD SH coefficients $f_n$ to amplitudes along set of negative directions identified in previous iteration, i.e. the matrix formed by the rows of $B_{reg}$ for which $Hf_{n-1}<0$ where $B_{reg}$ maps $f_n$ to FOD amplitude on a sphere. Solve by differentiating and setting to zero: $\Rightarrow \frac{\delta F}{\delta f_n} = 2X^T(Xf_n - S) + 2 \lambda^2 H_{n-1}^TH_{n-1}f_n=0$ Or: $(X^TX + \lambda^2 H_{n-1}^TH_{n-1})f_n = X^Ts$ Define $Q = X^TX + \lambda^2 H_{n-1}^TH_{n-1}$ , which by construction is a square positive definite symmetric matrix of size $n_{SH} by n_{SH}$. If needed, positive definiteness can be enforced with a small minimum norm regulariser (helps a lot with poorly conditioned direction sets and/or superresolution): $Q = X^TX + (\lambda H_{n-1}^T) (\lambda H_{n-1}) + \mu I$ Solve $Qf_n = X^Ts$ using Cholesky decomposition: $Q = LL^T$ where $L$ is lower triangular. Then problem can be solved by back-substitution: $L_y = X^Ts$ $L^Tf_n = y$ To speeds things up further, form $P = X^TX + \mu I$, and update to form $Q$ by rankn update with $H_{n-1}$. The dipy implementation looks like: form initially $P = X^T X + \mu I$ and $\lambda B_{reg}$ for each voxel: form $z = X^Ts$ estimate $f_0$ by solving $Pf_0=z$. We use a simplified $l_{max}=4$ solution here, but it might not make a big difference. Then iterate until no change in rows of $H$ used in $H_n$ form $H_{n}$ given $f_{n-1}$ form $Q = P + (\lambda H_{n-1}^T) (\lambda H_{n-1}$) (this can be done by rankn update, but we currently do not use rankn update). solve $Qf_n = z$ using Cholesky decomposition We'd like to thanks Donald Tournier for his help with describing and implementing this algorithm. References ---------- .. [1] Tournier, J.D., et al. NeuroImage 2007. Robust determination of the fibre orientation distribution in diffusion MRI: Non-negativity constrained super-resolved spherical deconvolution. """ mu = 1e-5 if P is None: P = np.dot(X.T, X) z = np.dot(X.T, dwsignal) try: fodf_sh = _solve_cholesky(P, z) except la.LinAlgError: P = P + mu * np.eye(P.shape[0]) fodf_sh = _solve_cholesky(P, z) # For the first iteration we use a smooth FOD that only uses SH orders up # to 4 (the first 15 coefficients). fodf = np.dot(B_reg[:, :15], fodf_sh[:15]) # The mean of an fodf can be computed by taking $Y_{0,0} * coeff_{0,0}$ threshold = B_reg[0, 0] * fodf_sh[0] * tau where_fodf_small = (fodf < threshold).nonzero()[0] # If the low-order fodf does not have any values less than threshold, the # full-order fodf is used. if len(where_fodf_small) == 0: fodf = np.dot(B_reg, fodf_sh) where_fodf_small = (fodf < threshold).nonzero()[0] # If the fodf still has no values less than threshold, return the fodf. if len(where_fodf_small) == 0: return fodf_sh, 0 for num_it in range(1, convergence + 1): # This is the super-resolved trick. Wherever there is a negative # amplitude value on the fODF, it concatenates a value to the S vector # so that the estimation can focus on trying to eliminate it. In a # sense, this "adds" a measurement, which can help to better estimate # the fodf_sh, even if you have more SH coefficients to estimate than # actual S measurements. H = B_reg.take(where_fodf_small, axis=0) # We use the Cholesky decomposition to solve for the SH coefficients. Q = P + np.dot(H.T, H) fodf_sh = _solve_cholesky(Q, z) # Sample the FOD using the regularization sphere and compute k. fodf = np.dot(B_reg, fodf_sh) where_fodf_small_last = where_fodf_small where_fodf_small = (fodf < threshold).nonzero()[0] if (len(where_fodf_small) == len(where_fodf_small_last) and (where_fodf_small == where_fodf_small_last).all()): break else: msg = 'maximum number of iterations exceeded - failed to converge' warnings.warn(msg) return fodf_sh, num_it def odf_deconv(odf_sh, R, B_reg, lambda_=1., tau=0.1, r2_term=False): r""" ODF constrained-regularized spherical deconvolution using the Sharpening Deconvolution Transform (SDT) [1]_, [2]_. Parameters ---------- odf_sh : ndarray (``(sh_order + 1)*(sh_order + 2)/2``,) ndarray of SH coefficients for the ODF spherical function to be deconvolved R : ndarray (``(sh_order + 1)(sh_order + 2)/2``, ``(sh_order + 1)(sh_order + 2)/2``) SDT matrix in SH basis B_reg : ndarray (``(sh_order + 1)(sh_order + 2)/2``, ``(sh_order + 1)(sh_order + 2)/2``) SH basis matrix used for deconvolution lambda_ : float lambda parameter in minimization equation (default 1.0) tau : float threshold (tau *max(fODF)) controlling the amplitude below which the corresponding fODF is assumed to be zero. r2_term : bool True if ODF is computed from model that uses the $r^2$ term in the integral. Recall that Tuch's ODF (used in Q-ball Imaging [1]_) and the true normalized ODF definition differ from a $r^2$ term in the ODF integral. The original Sharpening Deconvolution Transform (SDT) technique [2]_ is expecting Tuch's ODF without the $r^2$ (see [3]_ for the mathematical details). Now, this function supports ODF that have been computed using the $r^2$ term because the proper analytical response function has be derived. For example, models such as DSI, GQI, SHORE, CSA, Tensor, Multi-tensor ODFs, should now be deconvolved with the r2_term=True. Returns ------- fodf_sh : ndarray (``(sh_order + 1)(sh_order + 2)/2``,) Spherical harmonics coefficients of the constrained-regularized fiber ODF num_it : int Number of iterations in the constrained-regularization used for convergence References ---------- .. [1] Tuch, D. MRM 2004. Q-Ball Imaging. .. [2] Descoteaux, M., et al. IEEE TMI 2009. Deterministic and Probabilistic Tractography Based on Complex Fibre Orientation Distributions .. [3] Descoteaux, M, PhD thesis, INRIA Sophia-Antipolis, 2008. """ # In ConstrainedSDTModel.fit, odf_sh is divided by its norm (Z) and sometimes # the norm is 0 which creates NaNs. if np.any(np.isnan(odf_sh)): return np.zeros_like(odf_sh), 0 # Generate initial fODF estimate, which is the ODF truncated at SH order 4 fodf_sh = np.linalg.lstsq(R, odf_sh)[0] fodf_sh[15:] = 0 fodf = np.dot(B_reg, fodf_sh) # if sharpening a q-ball odf (it is NOT properly normalized), we need to # force normalization otherwise, for DSI, CSA, SHORE, Tensor odfs, they are # normalized by construction if ~r2_term : Z = np.linalg.norm(fodf) fodf_sh /= Z fodf = np.dot(B_reg, fodf_sh) threshold = tau * np.max(np.dot(B_reg, fodf_sh)) #print(np.min(fodf), np.max(fodf), np.mean(fodf), threshold, tau) k = [] convergence = 50 for num_it in range(1, convergence + 1): A = np.dot(B_reg, fodf_sh) k2 = np.nonzero(A < threshold)[0] if (k2.shape[0] + R.shape[0]) < B_reg.shape[1]: warnings.warn( 'too few negative directions identified - failed to converge') return fodf_sh, num_it if num_it > 1 and k.shape[0] == k2.shape[0]: if (k == k2).all(): return fodf_sh, num_it k = k2 M = np.concatenate((R, lambda_ * B_reg[k, :])) ODF = np.concatenate((odf_sh, np.zeros(k.shape))) try: fodf_sh = np.linalg.lstsq(M, ODF)[0] except np.linalg.LinAlgError as lae: # SVD did not converge in Linear Least Squares in current # voxel. Proceeding with initial SH estimate for this voxel. pass warnings.warn('maximum number of iterations exceeded - failed to converge') return fodf_sh, num_it def odf_sh_to_sharp(odfs_sh, sphere, basis=None, ratio=3 / 15., sh_order=8, lambda_=1., tau=0.1, r2_term=False): r""" Sharpen odfs using the spherical deconvolution transform [1]_ This function can be used to sharpen any smooth ODF spherical function. In theory, this should only be used to sharpen QballModel ODFs, but in practice, one can play with the deconvolution ratio and sharpen almost any ODF-like spherical function. The constrained-regularization is stable and will not only sharp the ODF peaks but also regularize the noisy peaks. Parameters ---------- odfs_sh : ndarray (``(sh_order + 1)*(sh_order + 2)/2``, ) array of odfs expressed as spherical harmonics coefficients sphere : Sphere sphere used to build the regularization matrix basis : {None, 'mrtrix', 'fibernav'} different spherical harmonic basis. None is the fibernav basis as well. ratio : float, ratio of the smallest vs the largest eigenvalue of the single prolate tensor response function (:math:`\frac{\lambda_2}{\lambda_1}`) sh_order : int maximal SH order of the SH representation lambda_ : float lambda parameter (see odfdeconv) (default 1.0) tau : float tau parameter in the L matrix construction (see odfdeconv) (default 0.1) r2_term : bool True if ODF is computed from model that uses the $r^2$ term in the integral. Recall that Tuch's ODF (used in Q-ball Imaging [1]_) and the true normalized ODF definition differ from a $r^2$ term in the ODF integral. The original Sharpening Deconvolution Transform (SDT) technique [2]_ is expecting Tuch's ODF without the $r^2$ (see [3]_ for the mathematical details). Now, this function supports ODF that have been computed using the $r^2$ term because the proper analytical response function has be derived. For example, models such as DSI, GQI, SHORE, CSA, Tensor, Multi-tensor ODFs, should now be deconvolved with the r2_term=True. Returns ------- fodf_sh : ndarray sharpened odf expressed as spherical harmonics coefficients References ---------- .. [1] Tuch, D. MRM 2004. Q-Ball Imaging. .. [2] Descoteaux, M., et al. IEEE TMI 2009. Deterministic and Probabilistic Tractography Based on Complex Fibre Orientation Distributions .. [3] Descoteaux, M, et al. MRM 2007. Fast, Regularized and Analytical Q-Ball Imaging """ r, theta, phi = cart2sphere(sphere.x, sphere.y, sphere.z) real_sym_sh = sph_harm_lookup[basis] B_reg, m, n = real_sym_sh(sh_order, theta, phi) R, P = forward_sdt_deconv_mat(ratio, n, r2_term=r2_term) # scale lambda to account for differences in the number of # SH coefficients and number of mapped directions lambda_ = lambda_ * R.shape[0] * R[0, 0] / B_reg.shape[0] fodf_sh = np.zeros(odfs_sh.shape) for index in ndindex(odfs_sh.shape[:-1]): fodf_sh[index], num_it = odf_deconv(odfs_sh[index], R, B_reg, lambda_=lambda_, tau=tau, r2_term=r2_term) return fodf_sh def auto_response(gtab, data, roi_center=None, roi_radius=10, fa_thr=0.7, return_number_of_voxels=False): """ Automatic estimation of response function using FA. Parameters ---------- gtab : GradientTable data : ndarray diffusion data roi_center : tuple, (3,) Center of ROI in data. If center is None, it is assumed that it is the center of the volume with shape `data.shape[:3]`. roi_radius : int radius of cubic ROI fa_thr : float FA threshold return_number_of_voxels : bool If True, returns the number of voxels used for estimating the response function. Returns ------- response : tuple, (2,) (`evals`, `S0`) ratio : float The ratio between smallest versus largest eigenvalue of the response. number of voxels : int (optional) The number of voxels used for estimating the response function. Notes ----- In CSD there is an important pre-processing step: the estimation of the fiber response function. In order to do this we look for voxels with very anisotropic configurations. For example we can use an ROI (20x20x20) at the center of the volume and store the signal values for the voxels with FA values higher than 0.7. Of course, if we haven't precalculated FA we need to fit a Tensor model to the datasets. Which is what we do in this function. For the response we also need to find the average S0 in the ROI. This is possible using `gtab.b0s_mask()` we can find all the S0 volumes (which correspond to b-values equal 0) in the dataset. The `response` consists always of a prolate tensor created by averaging the highest and second highest eigenvalues in the ROI with FA higher than threshold. We also include the average S0s. We also return the `ratio` which is used for the SDT models. If requested, the number of voxels used for estimating the response function is also returned, which can be used to judge the fidelity of the response function. As a rule of thumb, at least 300 voxels should be used to estimate a good response function (see [1]_). References ---------- .. [1] Tournier, J.D., et al. NeuroImage 2004. Direct estimation of the fiber orientation density function from diffusion-weighted MRI data using spherical deconvolution """ ten = TensorModel(gtab) if roi_center is None: ci, cj, ck = np.array(data.shape[:3]) // 2 else: ci, cj, ck = roi_center w = roi_radius roi = data[int(ci - w): int(ci + w), int(cj - w): int(cj + w), int(ck - w): int(ck + w)] tenfit = ten.fit(roi) FA = fractional_anisotropy(tenfit.evals) FA[np.isnan(FA)] = 0 indices = np.where(FA > fa_thr) if indices[0].size == 0: msg = "No voxel with a FA higher than " + str(fa_thr) + " were found." msg += " Try a larger roi or a lower threshold." warnings.warn(msg, UserWarning) lambdas = tenfit.evals[indices][:, :2] S0s = roi[indices][:, np.nonzero(gtab.b0s_mask)[0]] response, ratio = _get_response(S0s, lambdas) if return_number_of_voxels: return response, ratio, indices[0].size return response, ratio def response_from_mask(gtab, data, mask): """ Estimate the response function from a given mask. Parameters ---------- gtab : GradientTable data : ndarray Diffusion data mask : ndarray Mask to use for the estimation of the response function. For example a mask of the white matter voxels with FA values higher than 0.7 (see [1]_). Returns ------- response : tuple, (2,) (`evals`, `S0`) ratio : float The ratio between smallest versus largest eigenvalue of the response. Notes ----- See csdeconv.auto_response() or csdeconv.recursive_response() if you don't have a computed mask for the response function estimation. References ---------- .. [1] Tournier, J.D., et al. NeuroImage 2004. Direct estimation of the fiber orientation density function from diffusion-weighted MRI data using spherical deconvolution """ ten = TensorModel(gtab) indices = np.where(mask > 0) if indices[0].size == 0: msg = "No voxel in mask with value > 0 were found." warnings.warn(msg, UserWarning) return (np.nan, np.nan), np.nan tenfit = ten.fit(data[indices]) lambdas = tenfit.evals[:, :2] S0s = data[indices][:, np.nonzero(gtab.b0s_mask)[0]] return _get_response(S0s, lambdas) def _get_response(S0s, lambdas): S0 = np.mean(S0s) l01 = np.mean(lambdas, axis=0) evals = np.array([l01[0], l01[1], l01[1]]) response = (evals, S0) ratio = evals[1] / evals[0] return response, ratio def recursive_response(gtab, data, mask=None, sh_order=8, peak_thr=0.01, init_fa=0.08, init_trace=0.0021, iter=8, convergence=0.001, parallel=True, nbr_processes=None, sphere=default_sphere): """ Recursive calibration of response function using peak threshold Parameters ---------- gtab : GradientTable data : ndarray diffusion data mask : ndarray, optional mask for recursive calibration, for example a white matter mask. It has shape `data.shape[0:3]` and dtype=bool. Default: use the entire data array. sh_order : int, optional maximal spherical harmonics order. Default: 8 peak_thr : float, optional peak threshold, how large the second peak can be relative to the first peak in order to call it a single fiber population [1]. Default: 0.01 init_fa : float, optional FA of the initial 'fat' response function (tensor). Default: 0.08 init_trace : float, optional trace of the initial 'fat' response function (tensor). Default: 0.0021 iter : int, optional maximum number of iterations for calibration. Default: 8. convergence : float, optional convergence criterion, maximum relative change of SH coefficients. Default: 0.001. parallel : bool, optional Whether to use parallelization in peak-finding during the calibration procedure. Default: True nbr_processes: int If `parallel` is True, the number of subprocesses to use (default multiprocessing.cpu_count()). sphere : Sphere, optional. The sphere used for peak finding. Default: default_sphere. Returns ------- response : ndarray response function in SH coefficients Notes ----- In CSD there is an important pre-processing step: the estimation of the fiber response function. Using an FA threshold is not a very robust method. It is dependent on the dataset (non-informed used subjectivity), and still depends on the diffusion tensor (FA and first eigenvector), which has low accuracy at high b-value. This function recursively calibrates the response function, for more information see [1]. References ---------- .. [1] Tax, C.M.W., et al. NeuroImage 2014. Recursive calibration of the fiber response function for spherical deconvolution of diffusion MRI data. """ S0 = 1 evals = fa_trace_to_lambdas(init_fa, init_trace) res_obj = (evals, S0) if mask is None: data = data.reshape(-1, data.shape[-1]) else: data = data[mask] n = np.arange(0, sh_order + 1, 2) where_dwi = lazy_index(~gtab.b0s_mask) response_p = np.ones(len(n)) for num_it in range(1, iter): r_sh_all = np.zeros(len(n)) csd_model = ConstrainedSphericalDeconvModel(gtab, res_obj, sh_order=sh_order) csd_peaks = peaks_from_model(model=csd_model, data=data, sphere=sphere, relative_peak_threshold=peak_thr, min_separation_angle=25, parallel=parallel, nbr_processes=nbr_processes) dirs = csd_peaks.peak_dirs vals = csd_peaks.peak_values single_peak_mask = (vals[:, 1] / vals[:, 0]) < peak_thr data = data[single_peak_mask] dirs = dirs[single_peak_mask] for num_vox in range(0, data.shape[0]): rotmat = vec2vec_rotmat(dirs[num_vox, 0], np.array([0, 0, 1])) rot_gradients = np.dot(rotmat, gtab.gradients.T).T x, y, z = rot_gradients[where_dwi].T r, theta, phi = cart2sphere(x, y, z) # for the gradient sphere B_dwi = real_sph_harm(0, n, theta[:, None], phi[:, None]) r_sh_all += np.linalg.lstsq(B_dwi, data[num_vox, where_dwi])[0] response = r_sh_all / data.shape[0] res_obj = AxSymShResponse(data[:, gtab.b0s_mask].mean(), response) change = abs((response_p - response) / response_p) if all(change < convergence): break response_p = response return res_obj def fa_trace_to_lambdas(fa=0.08, trace=0.0021): lambda1 = (trace / 3.) * (1 + 2 * fa / (3 - 2 * fa ** 2) ** (1 / 2.)) lambda2 = (trace / 3.) * (1 - fa / (3 - 2 * fa ** 2) ** (1 / 2.)) evals = np.array([lambda1, lambda2, lambda2]) return evals dipy-0.10.1/dipy/reconst/dki.py000066400000000000000000001706601263041327500163160ustar00rootroot00000000000000#!/usr/bin/python """ Classes and functions for fitting the diffusion kurtosis model """ from __future__ import division, print_function, absolute_import import numpy as np from dipy.reconst.dti import (TensorFit, mean_diffusivity, axial_diffusivity, radial_diffusivity, from_lower_triangular, lower_triangular, decompose_tensor, _min_positive_signal) from dipy.reconst.utils import dki_design_matrix as design_matrix from dipy.utils.six.moves import range from ..core.onetime import auto_attr from .base import ReconstModel from dipy.core.ndindex import ndindex def _positive_evals(L1, L2, L3, er=2e-7): """ Helper function that indentifies which voxels in a array have all eigenvalues significantly larger than zero Parameters ---------- L1 : ndarray First independent variable of the integral. L2 : ndarray Second independent variable of the integral. L3 : ndarray Third independent variable of the integral. er : float, optional A eigenvalues is classified as larger than zero if it is larger than er Returns ------- ind : boolean (n,) Array that marks the voxels that have all eigenvalues are larger than zero. """ ind = np.logical_and(L1 > er, np.logical_and(L2 > er, L3 > er)) return ind def carlson_rf(x, y, z, errtol=3e-4): r""" Computes the Carlson's incomplete elliptic integral of the first kind defined as: .. math:: R_F = \frac{1}{2} \int_{0}^{\infty} \left [(t+x)(t+y)(t+z) \right ] ^{-\frac{1}{2}}dt Parameters ---------- x : ndarray First independent variable of the integral. y : ndarray Second independent variable of the integral. z : ndarray Third independent variable of the integral. errtol : float Error tolerance. Integral is computed with relative error less in magnitude than the defined value Returns ------- RF : ndarray Value of the incomplete first order elliptic integral Note ----- x, y, and z have to be nonnegative and at most one of them is zero. References ---------- .. [1] Carlson, B.C., 1994. Numerical computation of real or complex elliptic integrals. arXiv:math/9409227 [math.CA] """ xn = x.copy() yn = y.copy() zn = z.copy() An = (xn + yn + zn) / 3.0 Q = (3.*errtol) ** (-1/6.) * np.max(np.abs([An - xn, An - yn, An - zn]), axis=0) # Convergence has to be done voxel by voxel index = ndindex(x.shape) for v in index: n = 0 # Convergence condition while 4.**(-n) * Q[v] > abs(An[v]): xnroot = np.sqrt(xn[v]) ynroot = np.sqrt(yn[v]) znroot = np.sqrt(zn[v]) lamda = xnroot*(ynroot + znroot) + ynroot*znroot n = n + 1 xn[v] = (xn[v]+lamda) * 0.250 yn[v] = (yn[v]+lamda) * 0.250 zn[v] = (zn[v]+lamda) * 0.250 An[v] = (An[v]+lamda) * 0.250 # post convergence calculation X = 1. - xn/An Y = 1. - yn/An Z = - X - Y E2 = X*Y - Z*Z E3 = X * Y * Z RF = An**(-1/2.) * (1 - E2/10. + E3/14. + (E2**2)/24. - 3/44.*E2*E3) return RF def carlson_rd(x, y, z, errtol=1e-4): r""" Computes the Carlson's incomplete elliptic integral of the second kind defined as: .. math:: R_D = \frac{3}{2} \int_{0}^{\infty} (t+x)^{-\frac{1}{2}} (t+y)^{-\frac{1}{2}}(t+z) ^{-\frac{3}{2}} Parameters ---------- x : ndarray First independent variable of the integral. y : ndarray Second independent variable of the integral. z : ndarray Third independent variable of the integral. errtol : float Error tolerance. Integral is computed with relative error less in magnitude than the defined value Returns ------- RD : ndarray Value of the incomplete second order elliptic integral Note ----- x, y, and z have to be nonnegative and at most x or y is zero. """ xn = x.copy() yn = y.copy() zn = z.copy() A0 = (xn + yn + 3.*zn) / 5.0 An = A0.copy() Q = (errtol/4.) ** (-1/6.) * np.max(np.abs([An - xn, An - yn, An - zn]), axis=0) sum_term = np.zeros(x.shape, dtype=x.dtype) n = np.zeros(x.shape) # Convergence has to be done voxel by voxel index = ndindex(x.shape) for v in index: # Convergence condition while 4.**(-n[v]) * Q[v] > abs(An[v]): xnroot = np.sqrt(xn[v]) ynroot = np.sqrt(yn[v]) znroot = np.sqrt(zn[v]) lamda = xnroot*(ynroot + znroot) + ynroot*znroot sum_term[v] = sum_term[v] + 4.**(-n[v]) / (znroot * (zn[v]+lamda)) n[v] = n[v] + 1 xn[v] = (xn[v]+lamda) * 0.250 yn[v] = (yn[v]+lamda) * 0.250 zn[v] = (zn[v]+lamda) * 0.250 An[v] = (An[v]+lamda) * 0.250 # post convergence calculation X = (A0 - x) / (4.**(n) * An) Y = (A0 - y) / (4.**(n) * An) Z = - (X+Y) / 3. E2 = X*Y - 6.*Z*Z E3 = (3.*X*Y - 8.*Z*Z) * Z E4 = 3. * (X*Y - Z*Z) * Z**2. E5 = X * Y * Z**3. RD = \ 4**(-n) * An**(-3/2.) * \ (1 - 3/14.*E2 + 1/6.*E3 + 9/88.*(E2**2) - 3/22.*E4 - 9/52.*E2*E3 + 3/26.*E5) + 3*sum_term return RD def _F1m(a, b, c): """ Helper function that computes function $F_1$ which is required to compute the analytical solution of the Mean kurtosis. Parameters ---------- a : ndarray Array containing the values of parameter $\lambda_1$ of function $F_1$ b : ndarray Array containing the values of parameter $\lambda_2$ of function $F_1$ c : ndarray Array containing the values of parameter $\lambda_3$ of function $F_1$ Returns ------- F1 : ndarray Value of the function $F_1$ for all elements of the arrays a, b, and c Notes -------- Function $F_1$ is defined as [1]_: .. math:: F_1(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2} {18(\lambda_1-\lambda_2)(\lambda_1-\lambda_3)} [\frac{\sqrt{\lambda_2\lambda_3}}{\lambda_1} R_F(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)+\\ \frac{3\lambda_1^2-\lambda_1\lambda_2-\lambda_2\lambda_3- \lambda_1\lambda_3} {3\lambda_1 \sqrt{\lambda_2 \lambda_3}} R_D(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)-1 ] References ---------- .. [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ # Eigenvalues are considered equal if they are not 2.5% different to each # other. This value is adjusted according to the analysis reported in: # http://gsoc2015dipydki.blogspot.co.uk/2015/08/rnh-post-13-start-wrapping-up-test.html er = 2.5e-2 # Initialize F1 F1 = np.zeros(a.shape) # Only computes F1 in voxels that have all eigenvalues larger than zero cond0 = _positive_evals(a, b, c) # Apply formula for non problematic plaussible cases, i.e. a!=b and a!=c cond1 = np.logical_and(cond0, np.logical_and(abs(a - b) >= a * er, abs(a - c) >= a * er)) if np.sum(cond1) != 0: L1 = a[cond1] L2 = b[cond1] L3 = c[cond1] RFm = carlson_rf(L1/L2, L1/L3, np.ones(len(L1))) RDm = carlson_rd(L1/L2, L1/L3, np.ones(len(L1))) F1[cond1] = ((L1+L2+L3) ** 2) / (18 * (L1-L2) * (L1-L3)) * \ (np.sqrt(L2*L3) / L1 * RFm + (3 * L1**2 - L1*L2 - L1*L3 - L2*L3) / (3 * L1 * np.sqrt(L2*L3)) * RDm - 1) # Resolve possible sigularity a==b cond2 = np.logical_and(cond0, np.logical_and(abs(a - b) < a * er, abs(a - c) > a * er)) if np.sum(cond2) != 0: L1 = (a[cond2]+b[cond2]) / 2. L3 = c[cond2] F1[cond2] = _F2m(L3, L1, L1) / 2. # Resolve possible sigularity a==c cond3 = np.logical_and(cond0, np.logical_and(abs(a - c) < a * er, abs(a - b) > a * er)) if np.sum(cond3) != 0: L1 = (a[cond3]+c[cond3]) / 2. L2 = b[cond3] F1[cond3] = _F2m(L2, L1, L1) / 2 # Resolve possible sigularity a==b and a==c cond4 = np.logical_and(cond0, np.logical_and(abs(a - c) < a * er, abs(a - b) < a * er)) if np.sum(cond4) != 0: F1[cond4] = 1/5. return F1 def _F2m(a, b, c): """ Helper function that computes function $F_2$ which is required to compute the analytical solution of the Mean kurtosis. Parameters ---------- a : ndarray Array containing the values of parameter $\lambda_1$ of function $F_2$ b : ndarray Array containing the values of parameter $\lambda_2$ of function $F_2$ c : ndarray Array containing the values of parameter $\lambda_3$ of function $F_2$ Returns ------- F2 : ndarray Value of the function $F_2$ for all elements of the arrays a, b, and c Notes -------- Function $F_2$ is defined as [1]_: .. math:: F_2(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2} {3(\lambda_2-\lambda_3)^2} [\frac{\lambda_2+\lambda_3}{\sqrt{\lambda_2\lambda_3}} R_F(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)+\\ \frac{2\lambda_1-\lambda_2-\lambda_3}{3\sqrt{\lambda_2 \lambda_3}} R_D(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)-2] References ---------- .. [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ # Eigenvalues are considered equal if they are not 2.5% different to each # other. This value is adjusted according to the analysis reported in: # http://gsoc2015dipydki.blogspot.co.uk/2015/08/rnh-post-13-start-wrapping-up-test.html er = 2.5e-2 # Initialize F2 F2 = np.zeros(a.shape) # Only computes F2 in voxels that have all eigenvalues larger than zero cond0 = _positive_evals(a, b, c) # Apply formula for non problematic plaussible cases, i.e. b!=c cond1 = np.logical_and(cond0, (abs(b - c) > b * er)) if np.sum(cond1) != 0: L1 = a[cond1] L2 = b[cond1] L3 = c[cond1] RF = carlson_rf(L1/L2, L1/L3, np.ones(len(L1))) RD = carlson_rd(L1/L2, L1/L3, np.ones(len(L1))) F2[cond1] = (((L1+L2+L3) ** 2) / (3. * (L2-L3) ** 2)) * \ (((L2+L3) / (np.sqrt(L2*L3))) * RF + ((2.*L1-L2-L3) / (3.*np.sqrt(L2*L3))) * RD - 2.) # Resolve possible sigularity b==c cond2 = np.logical_and(cond0, np.logical_and(abs(b - c) < b * er, abs(a - b) > b * er)) if np.sum(cond2) != 0: L1 = a[cond2] L3 = (c[cond2]+b[cond2]) / 2. # Cumpute alfa [1]_ x = 1. - (L1/L3) alpha = np.zeros(len(L1)) for i in range(len(x)): if x[i] > 0: alpha[i] = 1./np.sqrt(x[i]) * np.arctanh(np.sqrt(x[i])) else: alpha[i] = 1./np.sqrt(-x[i]) * np.arctan(np.sqrt(-x[i])) F2[cond2] = \ 6. * ((L1 + 2.*L3)**2) / (144. * L3**2 * (L1-L3)**2) * \ (L3 * (L1 + 2.*L3) + L1 * (L1 - 4.*L3) * alpha) # Resolve possible sigularity a==b and a==c cond3 = np.logical_and(cond0, np.logical_and(abs(b - c) < b * er, abs(a - b) < b * er)) if np.sum(cond3) != 0: F2[cond3] = 6/15. return F2 def apparent_kurtosis_coef(dki_params, sphere, min_diffusivity=0, min_kurtosis=-1): r""" Calculate the apparent kurtosis coefficient (AKC) in each direction of a sphere. Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvectors respectively 3) Fifteen elements of the kurtosis tensor sphere : a Sphere class instance The AKC will be calculated for each of the vertices in the sphere min_diffusivity : float (optional) Because negative eigenvalues are not physical and small eigenvalues cause quite a lot of noise in diffusion based metrics, diffusivity values smaller than `min_diffusivity` are replaced with `min_diffusivity`. defaut = 0 min_kurtosis : float (optional) Because high amplitude negative values of kurtosis are not physicaly and biologicaly pluasible, and these causes huge artefacts in kurtosis based measures, directional kurtosis values than `min_kurtosis` are replaced with `min_kurtosis`. defaut = -1 Returns -------- AKC : ndarray (x, y, z, g) or (n, g) Apparent kurtosis coefficient (AKC) for all g directions of a sphere. Notes ----- For each sphere direction with coordinates $(n_{1}, n_{2}, n_{3})$, the calculation of AKC is done using formula: .. math :: AKC(n)=\frac{MD^{2}}{ADC(n)^{2}}\sum_{i=1}^{3}\sum_{j=1}^{3} \sum_{k=1}^{3}\sum_{l=1}^{3}n_{i}n_{j}n_{k}n_{l}W_{ijkl} where $W_{ijkl}$ are the elements of the kurtosis tensor, MD the mean diffusivity and ADC the apparent diffusion coefficent computed as: .. math :: ADC(n)=\sum_{i=1}^{3}\sum_{j=1}^{3}n_{i}n_{j}D_{ij} where $D_{ij}$ are the elements of the diffusion tensor. """ # Flat parameters outshape = dki_params.shape[:-1] dki_params = dki_params.reshape((-1, dki_params.shape[-1])) # Split data evals, evecs, kt = split_dki_param(dki_params) # Initialize AKC matrix V = sphere.vertices AKC = np.zeros((len(kt), len(V))) # select relevant voxels to process rel_i = _positive_evals(evals[..., 0], evals[..., 1], evals[..., 2]) kt = kt[rel_i] evecs = evecs[rel_i] evals = evals[rel_i] AKCi = AKC[rel_i] # Compute MD MD = mean_diffusivity(evals) # loop over all relevant voxels for vox in range(len(kt)): R = evecs[vox] dt = lower_triangular(np.dot(np.dot(R, np.diag(evals[vox])), R.T)) AKCi[vox] = _directional_kurtosis(dt, MD[vox], kt[vox], V, min_diffusivity=min_diffusivity, min_kurtosis=min_kurtosis) # reshape data according to input data AKC[rel_i] = AKCi return AKC.reshape((outshape + (len(V),))) def _directional_kurtosis(dt, MD, kt, V, min_diffusivity=0, min_kurtosis=-1): r""" Helper function that calculate the apparent kurtosis coefficient (AKC) in each direction of a sphere for a single voxel. Parameters ---------- dt : array (6,) elements of the diffusion tensor of the voxel. MD : float mean diffusivity of the voxel kt : array (15,) elements of the kurtosis tensor of the voxel. V : array (g, 3) g directions of a Sphere in Cartesian coordinates min_diffusivity : float (optional) Because negative eigenvalues are not physical and small eigenvalues cause quite a lot of noise in diffusion based metrics, diffusivity values smaller than `min_diffusivity` are replaced with `min_diffusivity`. defaut = 0 min_kurtosis : float (optional) Because high amplitude negative values of kurtosis are not physicaly and biologicaly pluasible, and these causes huge artefacts in kurtosis based measures, directional kurtosis values than `min_kurtosis` are replaced with `min_kurtosis`. defaut = -1 Returns -------- AKC : ndarray (g,) Apparent kurtosis coefficient (AKC) in all g directions of a sphere for a single voxel. See Also -------- apparent_kurtosis_coef """ ADC = \ V[:, 0] * V[:, 0] * dt[0] + \ 2 * V[:, 0] * V[:, 1] * dt[1] + \ V[:, 1] * V[:, 1] * dt[2] + \ 2 * V[:, 0] * V[:, 2] * dt[3] + \ 2 * V[:, 1] * V[:, 2] * dt[4] + \ V[:, 2] * V[:, 2] * dt[5] if min_diffusivity is not None: ADC = ADC.clip(min=min_diffusivity) AKC = \ V[:, 0] * V[:, 0] * V[:, 0] * V[:, 0] * kt[0] + \ V[:, 1] * V[:, 1] * V[:, 1] * V[:, 1] * kt[1] + \ V[:, 2] * V[:, 2] * V[:, 2] * V[:, 2] * kt[2] + \ 4 * V[:, 0] * V[:, 0] * V[:, 0] * V[:, 1] * kt[3] + \ 4 * V[:, 0] * V[:, 0] * V[:, 0] * V[:, 2] * kt[4] + \ 4 * V[:, 0] * V[:, 1] * V[:, 1] * V[:, 1] * kt[5] + \ 4 * V[:, 1] * V[:, 1] * V[:, 1] * V[:, 2] * kt[6] + \ 4 * V[:, 0] * V[:, 2] * V[:, 2] * V[:, 2] * kt[7] + \ 4 * V[:, 1] * V[:, 2] * V[:, 2] * V[:, 2] * kt[8] + \ 6 * V[:, 0] * V[:, 0] * V[:, 1] * V[:, 1] * kt[9] + \ 6 * V[:, 0] * V[:, 0] * V[:, 2] * V[:, 2] * kt[10] + \ 6 * V[:, 1] * V[:, 1] * V[:, 2] * V[:, 2] * kt[11] + \ 12 * V[:, 0] * V[:, 0] * V[:, 1] * V[:, 2] * kt[12] + \ 12 * V[:, 0] * V[:, 1] * V[:, 1] * V[:, 2] * kt[13] + \ 12 * V[:, 0] * V[:, 1] * V[:, 2] * V[:, 2] * kt[14] if min_kurtosis is not None: AKC = AKC.clip(min=min_kurtosis) return (MD/ADC) ** 2 * AKC def mean_kurtosis(dki_params, min_kurtosis=0, max_kurtosis=3): r""" Computes mean Kurtosis (MK) from the kurtosis tensor. Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor min_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, mean kurtosis values that are smaller than `min_kurtosis` are replaced with `min_kurtosis`. defaut = 0 max_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, mean kurtosis values that are larger than `max_kurtosis` are replaced with `max_kurtosis`. defaut = 3 Returns ------- mk : array Calculated MK. Notes -------- The MK analytical solution is calculated using the following equation [1]_: .. math:: MK=F_1(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{1111}+ F_1(\lambda_2,\lambda_1,\lambda_3)\hat{W}_{2222}+ F_1(\lambda_3,\lambda_2,\lambda_1)\hat{W}_{3333}+ \\ F_2(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{2233}+ F_2(\lambda_2,\lambda_1,\lambda_3)\hat{W}_{1133}+ F_2(\lambda_3,\lambda_2,\lambda_1)\hat{W}_{1122} where $\hat{W}_{ijkl}$ are the components of the $W$ tensor in the coordinates system defined by the eigenvectors of the diffusion tensor $\mathbf{D}$ and F_1(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2} {18(\lambda_1-\lambda_2)(\lambda_1-\lambda_3)} [\frac{\sqrt{\lambda_2\lambda_3}}{\lambda_1} R_F(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)+\\ \frac{3\lambda_1^2-\lambda_1\lambda_2-\lambda_2\lambda_3- \lambda_1\lambda_3} {3\lambda_1 \sqrt{\lambda_2 \lambda_3}} R_D(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)-1 ] F_2(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2} {3(\lambda_2-\lambda_3)^2} [\frac{\lambda_2+\lambda_3}{\sqrt{\lambda_2\lambda_3}} R_F(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)+\\ \frac{2\lambda_1-\lambda_2-\lambda_3}{3\sqrt{\lambda_2 \lambda_3}} R_D(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)-2] where $R_f$ and $R_d$ are the Carlson's elliptic integrals. References ---------- .. [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ # Flat parameters. For numpy versions more recent than 1.6.0, this step # isn't required outshape = dki_params.shape[:-1] dki_params = dki_params.reshape((-1, dki_params.shape[-1])) # Split the model parameters to three variable containing the evals, evecs, # and kurtosis elements evals, evecs, kt = split_dki_param(dki_params) # Rotate the kurtosis tensor from the standard Cartesian coordinate system # to another coordinate system in which the 3 orthonormal eigenvectors of # DT are the base coordinate Wxxxx = Wrotate_element(kt, 0, 0, 0, 0, evecs) Wyyyy = Wrotate_element(kt, 1, 1, 1, 1, evecs) Wzzzz = Wrotate_element(kt, 2, 2, 2, 2, evecs) Wxxyy = Wrotate_element(kt, 0, 0, 1, 1, evecs) Wxxzz = Wrotate_element(kt, 0, 0, 2, 2, evecs) Wyyzz = Wrotate_element(kt, 1, 1, 2, 2, evecs) # Compute MK MK = \ _F1m(evals[..., 0], evals[..., 1], evals[..., 2])*Wxxxx + \ _F1m(evals[..., 1], evals[..., 0], evals[..., 2])*Wyyyy + \ _F1m(evals[..., 2], evals[..., 1], evals[..., 0])*Wzzzz + \ _F2m(evals[..., 0], evals[..., 1], evals[..., 2])*Wyyzz + \ _F2m(evals[..., 1], evals[..., 0], evals[..., 2])*Wxxzz + \ _F2m(evals[..., 2], evals[..., 1], evals[..., 0])*Wxxyy if min_kurtosis is not None: MK = MK.clip(min=min_kurtosis) if max_kurtosis is not None: MK = MK.clip(max=max_kurtosis) return MK.reshape(outshape) def _G1m(a, b, c): """ Helper function that computes function $G_1$ which is required to compute the analytical solution of the Radial kurtosis. Parameters ---------- a : ndarray Array containing the values of parameter $\lambda_1$ of function $G_1$ b : ndarray Array containing the values of parameter $\lambda_2$ of function $G_1$ c : ndarray Array containing the values of parameter $\lambda_3$ of function $G_1$ Returns ------- G1 : ndarray Value of the function $G_1$ for all elements of the arrays a, b, and c Notes -------- Function $G_1$ is defined as [1]_: .. math:: G_1(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2}{18\lambda_2(\lambda_2- \lambda_3)} \left (2\lambda_2 + \frac{\lambda_3^2-3\lambda_2\lambda_3}{\sqrt{\lambda_2\lambda_3}} \right) References ---------- .. [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ # Float error used to compare two floats, abs(l1 - l2) < er for l1 = l2 # Error is defined as three order of magnitude larger than system's epslon er = np.finfo(a.ravel()[0]).eps * 1e3 # Initialize G1 G1 = np.zeros(a.shape) # Only computes G1 in voxels that have all eigenvalues larger than zero cond0 = _positive_evals(a, b, c) # Apply formula for non problematic plaussible cases, i.e. b!=c cond1 = np.logical_and(cond0, (abs(b - c) > er)) if np.sum(cond1) != 0: L1 = a[cond1] L2 = b[cond1] L3 = c[cond1] G1[cond1] = \ (L1+L2+L3)**2 / (18 * L2 * (L2-L3)**2) * \ (2.*L2 + (L3**2 - 3*L2*L3) / np.sqrt(L2*L3)) # Resolve possible sigularity b==c cond2 = np.logical_and(cond0, abs(b - c) < er) if np.sum(cond2) != 0: L1 = a[cond2] L2 = b[cond2] G1[cond2] = (L1 + 2.*L2)**2 / (24.*L2**2) return G1 def _G2m(a, b, c): """ Helper function that computes function $G_2$ which is required to compute the analytical solution of the Radial kurtosis. Parameters ---------- a : ndarray Array containing the values of parameter $\lambda_1$ of function $G_2$ b : ndarray Array containing the values of parameter $\lambda_2$ of function $G_2$ c : ndarray (n,) Array containing the values of parameter $\lambda_3$ of function $G_2$ Returns ------- G2 : ndarray Value of the function $G_2$ for all elements of the arrays a, b, and c Notes -------- Function $G_2$ is defined as [1]_: .. math:: G_2(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2}{(\lambda_2-\lambda_3)^2} \left ( \frac{\lambda_2+\lambda_3}{\sqrt{\lambda_2\lambda_3}}-2\right ) References ---------- .. [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ # Float error used to compare two floats, abs(l1 - l2) < er for l1 = l2 # Error is defined as three order of magnitude larger than system's epslon er = np.finfo(a.ravel()[0]).eps * 1e3 # Initialize G2 G2 = np.zeros(a.shape) # Only computes G2 in voxels that have all eigenvalues larger than zero cond0 = _positive_evals(a, b, c) # Apply formula for non problematic plaussible cases, i.e. b!=c cond1 = np.logical_and(cond0, (abs(b - c) > er)) if np.sum(cond1) != 0: L1 = a[cond1] L2 = b[cond1] L3 = c[cond1] G2[cond1] = \ (L1+L2+L3)**2 / (3 * (L2-L3)**2) * ((L2+L3) / np.sqrt(L2*L3) - 2) # Resolve possible sigularity b==c cond2 = np.logical_and(cond0, abs(b - c) < er) if np.sum(cond2) != 0: L1 = a[cond2] L2 = b[cond2] G2[cond2] = (L1 + 2.*L2)**2 / (12.*L2**2) return G2 def radial_kurtosis(dki_params, min_kurtosis=0, max_kurtosis=3): r""" Radial Kurtosis (RK) of a diffusion kurtosis tensor. Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor min_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, radial kurtosis values that are smaller than `min_kurtosis` are replaced with `min_kurtosis`. defaut = 0 max_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, radial kurtosis values that are larger than `max_kurtosis` are replaced with `max_kurtosis`. defaut = 3 Returns ------- rk : array Calculated RK. Notes -------- RK is calculated with the following equation: .. math:: K_{\bot} = G_1(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{2222} + G_1(\lambda_1,\lambda_3,\lambda_2)\hat{W}_{3333} + G_2(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{2233} where: .. math:: G_1(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2}{18\lambda_2(\lambda_2- \lambda_3)} \left (2\lambda_2 + \frac{\lambda_3^2-3\lambda_2\lambda_3}{\sqrt{\lambda_2\lambda_3}} \right) and .. math:: G_2(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2}{(\lambda_2-\lambda_3)^2} \left ( \frac{\lambda_2+\lambda_3}{\sqrt{\lambda_2\lambda_3}}-2\right ) """ # Flat parameters. For numpy versions more recent than 1.6.0, this step # isn't required outshape = dki_params.shape[:-1] dki_params = dki_params.reshape((-1, dki_params.shape[-1])) # Split the model parameters to three variable containing the evals, evecs, # and kurtosis elements evals, evecs, kt = split_dki_param(dki_params) # Rotate the kurtosis tensor from the standard Cartesian coordinate system # to another coordinate system in which the 3 orthonormal eigenvectors of # DT are the base coordinate Wyyyy = Wrotate_element(kt, 1, 1, 1, 1, evecs) Wzzzz = Wrotate_element(kt, 2, 2, 2, 2, evecs) Wyyzz = Wrotate_element(kt, 1, 1, 2, 2, evecs) # Compute RK RK = \ _G1m(evals[..., 0], evals[..., 1], evals[..., 2]) * Wyyyy + \ _G1m(evals[..., 0], evals[..., 2], evals[..., 1]) * Wzzzz + \ _G2m(evals[..., 0], evals[..., 1], evals[..., 2]) * Wyyzz if min_kurtosis is not None: RK = RK.clip(min=min_kurtosis) if max_kurtosis is not None: RK = RK.clip(max=max_kurtosis) return RK.reshape(outshape) def axial_kurtosis(dki_params, min_kurtosis=0, max_kurtosis=3): r""" Computes axial Kurtosis (AK) from the kurtosis tensor. Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor min_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, axial kurtosis values that are smaller than `min_kurtosis` are replaced with `min_kurtosis`. defaut = 0 max_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, axial kurtosis values that are larger than `max_kurtosis` are replaced with `max_kurtosis`. defaut = 3 Returns ------- ak : array Calculated AK. """ # Flat parameters outshape = dki_params.shape[:-1] dki_params = dki_params.reshape((-1, dki_params.shape[-1])) # Split data evals, evecs, kt = split_dki_param(dki_params) # Initialize AK AK = np.zeros(kt.shape[:-1]) # select relevant voxels to process rel_i = _positive_evals(evals[..., 0], evals[..., 1], evals[..., 2]) kt = kt[rel_i] evecs = evecs[rel_i] evals = evals[rel_i] AKi = AK[rel_i] # Compute MD MD = mean_diffusivity(evals) # loop over all voxels for vox in range(len(kt)): R = evecs[vox] dt = lower_triangular(np.dot(np.dot(R, np.diag(evals[vox])), R.T)) AKi[vox] = _directional_kurtosis(dt, MD[vox], kt[vox], np.array([R[:, 0]])) # reshape data according to input data AK[rel_i] = AKi if min_kurtosis is not None: AK = AK.clip(min=min_kurtosis) if max_kurtosis is not None: AK = AK.clip(max=max_kurtosis) return AK.reshape(outshape) def dki_prediction(dki_params, gtab, S0=150): """ Predict a signal given diffusion kurtosis imaging parameters. Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor gtab : a GradientTable class instance The gradient table for this prediction S0 : float or ndarray (optional) The non diffusion-weighted signal in every voxel, or across all voxels. Default: 150 Returns -------- S : (..., N) ndarray Simulated signal based on the DKI model: .. math:: S=S_{0}e^{-bD+\frac{1}{6}b^{2}D^{2}K} """ evals, evecs, kt = split_dki_param(dki_params) # Define DKI design matrix according to given gtab A = design_matrix(gtab) # Flat parameters and initialize pred_sig fevals = evals.reshape((-1, evals.shape[-1])) fevecs = evecs.reshape((-1,) + evecs.shape[-2:]) fkt = kt.reshape((-1, kt.shape[-1])) pred_sig = np.zeros((len(fevals), len(gtab.bvals))) # lopping for all voxels for v in range(len(pred_sig)): DT = np.dot(np.dot(fevecs[v], np.diag(fevals[v])), fevecs[v].T) dt = lower_triangular(DT) MD = (dt[0] + dt[2] + dt[5]) / 3 X = np.concatenate((dt, fkt[v]*MD*MD, np.array([np.log(S0)])), axis=0) pred_sig[v] = np.exp(np.dot(A, X)) # Reshape data according to the shape of dki_params pred_sig = pred_sig.reshape(dki_params.shape[:-1] + (pred_sig.shape[-1],)) return pred_sig class DiffusionKurtosisModel(ReconstModel): """ Class for the Diffusion Kurtosis Model """ def __init__(self, gtab, fit_method="OLS", *args, **kwargs): """ Diffusion Kurtosis Tensor Model [1] Parameters ---------- gtab : GradientTable class instance fit_method : str or callable str can be one of the following: 'OLS' or 'ULLS' for ordinary least squares dki.ols_fit_dki 'WLS' or 'UWLLS' for weighted ordinary least squares dki.wls_fit_dki callable has to have the signature: fit_method(design_matrix, data, *args, **kwargs) args, kwargs : arguments and key-word arguments passed to the fit_method. See dki.ols_fit_dki, dki.wls_fit_dki for details References ---------- [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ ReconstModel.__init__(self, gtab) if not callable(fit_method): try: self.fit_method = common_fit_methods[fit_method] except KeyError: raise ValueError('"' + str(fit_method) + '" is not a known ' 'fit method, the fit method should either be ' 'a function or one of the common fit methods') self.design_matrix = design_matrix(self.gtab) self.args = args self.kwargs = kwargs self.min_signal = self.kwargs.pop('min_signal', None) if self.min_signal is not None and self.min_signal <= 0: e_s = "The `min_signal` key-word argument needs to be strictly" e_s += " positive." raise ValueError(e_s) def fit(self, data, mask=None): """ Fit method of the DKI model class Parameters ---------- data : array The measured signal from one voxel. mask : array A boolean array used to mark the coordinates in the data that should be analyzed that has the shape data.shape[-1] """ if mask is None: # Flatten it to 2D either way: data_in_mask = np.reshape(data, (-1, data.shape[-1])) else: # Check for valid shape of the mask if mask.shape != data.shape[:-1]: raise ValueError("Mask is not the same shape as data.") mask = np.array(mask, dtype=bool, copy=False) data_in_mask = np.reshape(data[mask], (-1, data.shape[-1])) if self.min_signal is None: min_signal = _min_positive_signal(data) else: min_signal = self.min_signal data_in_mask = np.maximum(data_in_mask, min_signal) params_in_mask = self.fit_method(self.design_matrix, data_in_mask, *self.args, **self.kwargs) if mask is None: out_shape = data.shape[:-1] + (-1, ) dki_params = params_in_mask.reshape(out_shape) else: dki_params = np.zeros(data.shape[:-1] + (27,)) dki_params[mask, :] = params_in_mask return DiffusionKurtosisFit(self, dki_params) def predict(self, dki_params, S0=1): """ Predict a signal for this DKI model class instance given parameters. Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor S0 : float or ndarray (optional) The non diffusion-weighted signal in every voxel, or across all voxels. Default: 1 """ return dki_prediction(dki_params, self.gtab, S0) class DiffusionKurtosisFit(TensorFit): """ Class for fitting the Diffusion Kurtosis Model""" def __init__(self, model, model_params): """ Initialize a DiffusionKurtosisFit class instance. Since DKI is an extension of DTI, class instance is defined as subclass of the TensorFit from dti.py Parameters ---------- model : DiffusionKurtosisModel Class instance Class instance containing the Diffusion Kurtosis Model for the fit model_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor """ TensorFit.__init__(self, model, model_params) @property def kt(self): """ Returns the 15 independent elements of the kurtosis tensor as an array """ return self.model_params[..., 12:] def akc(self, sphere): r""" Calculate the apparent kurtosis coefficient (AKC) in each direction on the sphere for each voxel in the data Parameters ---------- sphere : Sphere class instance Returns ------- akc : ndarray The estimates of the apparent kurtosis coefficient in every direction on the input sphere Notes ----- For each sphere direction with coordinates $(n_{1}, n_{2}, n_{3})$, the calculation of AKC is done using formula: .. math :: AKC(n)=\frac{MD^{2}}{ADC(n)^{2}}\sum_{i=1}^{3}\sum_{j=1}^{3} \sum_{k=1}^{3}\sum_{l=1}^{3}n_{i}n_{j}n_{k}n_{l}W_{ijkl} where $W_{ijkl}$ are the elements of the kurtosis tensor, MD the mean diffusivity and ADC the apparent diffusion coefficent computed as: .. math :: ADC(n)=\sum_{i=1}^{3}\sum_{j=1}^{3}n_{i}n_{j}D_{ij} where $D_{ij}$ are the elements of the diffusion tensor. """ return apparent_kurtosis_coef(self.model_params, sphere) def mk(self, min_kurtosis=0, max_kurtosis=3): r""" Computes mean Kurtosis (MK) from the kurtosis tensor. Parameters ---------- min_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, mean kurtosis values that are smaller than `min_kurtosis` are replaced with `min_kurtosis`. defaut = 0 max_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, mean kurtosis values that are larger than `max_kurtosis` are replaced with `max_kurtosis`. defaut = 3 Returns ------- mk : array Calculated MK. Notes -------- The MK analytical solution is calculated using the following equation [1]_: .. math:: MK=F_1(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{1111}+ F_1(\lambda_2,\lambda_1,\lambda_3)\hat{W}_{2222}+ F_1(\lambda_3,\lambda_2,\lambda_1)\hat{W}_{3333}+ \\ F_2(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{2233}+ F_2(\lambda_2,\lambda_1,\lambda_3)\hat{W}_{1133}+ F_2(\lambda_3,\lambda_2,\lambda_1)\hat{W}_{1122} where $\hat{W}_{ijkl}$ are the components of the $W$ tensor in the coordinates system defined by the eigenvectors of the diffusion tensor $\mathbf{D}$ and .. math:: F_1(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2} {18(\lambda_1-\lambda_2)(\lambda_1-\lambda_3)} [\frac{\sqrt{\lambda_2\lambda_3}}{\lambda_1} R_F(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)+\\ \frac{3\lambda_1^2-\lambda_1\lambda_2-\lambda_2\lambda_3- \lambda_1\lambda_3} {3\lambda_1 \sqrt{\lambda_2 \lambda_3}} R_D(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)-1 ] and .. math:: F_2(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2} {3(\lambda_2-\lambda_3)^2} [\frac{\lambda_2+\lambda_3}{\sqrt{\lambda_2\lambda_3}} R_F(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)+\\ \frac{2\lambda_1-\lambda_2-\lambda_3}{3\sqrt{\lambda_2 \lambda_3}} R_D(\frac{\lambda_1}{\lambda_2},\frac{\lambda_1}{\lambda_3},1)-2] where $R_f$ and $R_d$ are the Carlson's elliptic integrals. References ---------- .. [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ return mean_kurtosis(self.model_params, min_kurtosis, max_kurtosis) def ak(self, min_kurtosis=0, max_kurtosis=3): r""" Axial Kurtosis (AK) of a diffusion kurtosis tensor. Parameters ---------- min_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, axial kurtosis values that are smaller than `min_kurtosis` are replaced with `min_kurtosis`. defaut = 0 max_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, axial kurtosis values that are larger than `max_kurtosis` are replaced with `max_kurtosis`. defaut = 3 Returns ------- ak : array Calculated AK. """ return axial_kurtosis(self.model_params, min_kurtosis, max_kurtosis) def rk(self, min_kurtosis=0, max_kurtosis=3): r""" Radial Kurtosis (RK) of a diffusion kurtosis tensor. Parameters ---------- min_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, axial kurtosis values that are smaller than `min_kurtosis` are replaced with `min_kurtosis`. defaut = 0 max_kurtosis : float (optional) To keep kurtosis values within a plausible biophysical range, axial kurtosis values that are larger than `max_kurtosis` are replaced with `max_kurtosis`. defaut = 3 Returns ------- rk : array Calculated RK. Notes ------ RK is calculated with the following equation: .. math:: K_{\bot} = G_1(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{2222} + G_1(\lambda_1,\lambda_3,\lambda_2)\hat{W}_{3333} + G_2(\lambda_1,\lambda_2,\lambda_3)\hat{W}_{2233} where: .. math:: G_1(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2}{18\lambda_2(\lambda_2- \lambda_3)} \left (2\lambda_2 + \frac{\lambda_3^2-3\lambda_2\lambda_3}{\sqrt{\lambda_2\lambda_3}} \right) and .. math:: G_2(\lambda_1,\lambda_2,\lambda_3)= \frac{(\lambda_1+\lambda_2+\lambda_3)^2}{(\lambda_2-\lambda_3)^2} \left ( \frac{\lambda_2+\lambda_3}{\sqrt{\lambda_2\lambda_3}}-2 \right ) """ return radial_kurtosis(self.model_params, min_kurtosis, max_kurtosis) def predict(self, gtab, S0=1): r""" Given a DKI model fit, predict the signal on the vertices of a gradient table Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor gtab : a GradientTable class instance The gradient table for this prediction S0 : float or ndarray (optional) The non diffusion-weighted signal in every voxel, or across all voxels. Default: 1 Notes ----- The predicted signal is given by: .. math:: S(n,b)=S_{0}e^{-bD(n)+\frac{1}{6}b^{2}D(n)^{2}K(n)} $\mathbf{D(n)}$ and $\mathbf{K(n)}$ can be computed from the DT and KT using the following equations: .. math:: D(n)=\sum_{i=1}^{3}\sum_{j=1}^{3}n_{i}n_{j}D_{ij} and .. math:: K(n)=\frac{MD^{2}}{D(n)^{2}}\sum_{i=1}^{3}\sum_{j=1}^{3} \sum_{k=1}^{3}\sum_{l=1}^{3}n_{i}n_{j}n_{k}n_{l}W_{ijkl} where $D_{ij}$ and $W_{ijkl}$ are the elements of the second-order DT and the fourth-order KT tensors, respectively, and $MD$ is the mean diffusivity. """ return dki_prediction(self.model_params, gtab, S0) def ols_fit_dki(design_matrix, data): r""" Computes ordinary least squares (OLS) fit to calculate the diffusion tensor and kurtosis tensor using a linear regression diffusion kurtosis model [1]_. Parameters ---------- design_matrix : array (g, 22) Design matrix holding the covariants used to solve for the regression coefficients. data : array (N, g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. Returns ------- dki_params : array (N, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor See Also -------- wls_fit_dki References ---------- [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ tol = 1e-6 # preparing data and initializing parameters data = np.asarray(data) data_flat = data.reshape((-1, data.shape[-1])) dki_params = np.empty((len(data_flat), 27)) # inverting design matrix and defining minimun diffusion aloud min_diffusivity = tol / -design_matrix.min() inv_design = np.linalg.pinv(design_matrix) # lopping OLS solution on all data voxels for vox in range(len(data_flat)): dki_params[vox] = _ols_iter(inv_design, data_flat[vox], min_diffusivity) # Reshape data according to the input data shape dki_params = dki_params.reshape((data.shape[:-1]) + (27,)) return dki_params def _ols_iter(inv_design, sig, min_diffusivity): """ Helper function used by ols_fit_dki - Applies OLS fit of the diffusion kurtosis model to single voxel signals. Parameters ---------- inv_design : array (g, 22) Inverse of the design matrix holding the covariants used to solve for the regression coefficients. sig : array (g,) Diffusion-weighted signal for a single voxel data. min_diffusivity : float Because negative eigenvalues are not physical and small eigenvalues, much smaller than the diffusion weighting, cause quite a lot of noise in metrics such as fa, diffusivity values smaller than `min_diffusivity` are replaced with `min_diffusivity`. Returns ------- dki_params : array (27,) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor """ # DKI ordinary linear least square solution log_s = np.log(sig) result = np.dot(inv_design, log_s) # Extracting the diffusion tensor parameters from solution DT_elements = result[:6] evals, evecs = decompose_tensor(from_lower_triangular(DT_elements), min_diffusivity=min_diffusivity) # Extracting kurtosis tensor parameters from solution MD_square = (evals.mean(0))**2 KT_elements = result[6:21] / MD_square # Write output dki_params = np.concatenate((evals, evecs[0], evecs[1], evecs[2], KT_elements), axis=0) return dki_params def wls_fit_dki(design_matrix, data): r""" Computes weighted linear least squares (WLS) fit to calculate the diffusion tensor and kurtosis tensor using a weighted linear regression diffusion kurtosis model [1]_. Parameters ---------- design_matrix : array (g, 22) Design matrix holding the covariants used to solve for the regression coefficients. data : array (N, g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. min_signal : default = 1 All values below min_signal are repalced with min_signal. This is done in order to avoid taking log(0) durring the tensor fitting. Returns ------- dki_params : array (N, 27) All parameters estimated from the diffusion kurtosis model for all N voxels. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor References ---------- [1] Veraart, J., Sijbers, J., Sunaert, S., Leemans, A., Jeurissen, B., 2013. Weighted linear least squares estimation of diffusion MRI parameters: Strengths, limitations, and pitfalls. Magn Reson Med 81, 335-346. """ tol = 1e-6 # preparing data and initializing parametres data = np.asarray(data) data_flat = data.reshape((-1, data.shape[-1])) dki_params = np.empty((len(data_flat), 27)) # inverting design matrix and defining minimun diffusion aloud min_diffusivity = tol / -design_matrix.min() inv_design = np.linalg.pinv(design_matrix) # lopping WLS solution on all data voxels for vox in range(len(data_flat)): dki_params[vox] = _wls_iter(design_matrix, inv_design, data_flat[vox], min_diffusivity) # Reshape data according to the input data shape dki_params = dki_params.reshape((data.shape[:-1]) + (27,)) return dki_params def _wls_iter(design_matrix, inv_design, sig, min_diffusivity): """ Helper function used by wls_fit_dki - Applies WLS fit of the diffusion kurtosis model to single voxel signals. Parameters ---------- design_matrix : array (g, 22) Design matrix holding the covariants used to solve for the regression coefficients inv_design : array (g, 22) Inverse of the design matrix. sig : array (g, ) Diffusion-weighted signal for a single voxel data. min_diffusivity : float Because negative eigenvalues are not physical and small eigenvalues, much smaller than the diffusion weighting, cause quite a lot of noise in metrics such as fa, diffusivity values smaller than `min_diffusivity` are replaced with `min_diffusivity`. Returns ------- dki_params : array (27, ) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor """ A = design_matrix # DKI ordinary linear least square solution log_s = np.log(sig) ols_result = np.dot(inv_design, log_s) # Define weights as diag(yn**2) W = np.diag(np.exp(2 * np.dot(A, ols_result))) # DKI weighted linear least square solution inv_AT_W_A = np.linalg.pinv(np.dot(np.dot(A.T, W), A)) AT_W_LS = np.dot(np.dot(A.T, W), log_s) wls_result = np.dot(inv_AT_W_A, AT_W_LS) # Extracting the diffusion tensor parameters from solution DT_elements = wls_result[:6] evals, evecs = decompose_tensor(from_lower_triangular(DT_elements), min_diffusivity=min_diffusivity) # Extracting kurtosis tensor parameters from solution MD_square = (evals.mean(0))**2 KT_elements = wls_result[6:21] / MD_square # Write output dki_params = np.concatenate((evals, evecs[0], evecs[1], evecs[2], KT_elements), axis=0) return dki_params def Wrotate(kt, Basis): r""" Rotate a kurtosis tensor from the standard Cartesian coordinate system to another coordinate system basis Parameters ---------- kt : (15,) Vector with the 15 independent elements of the kurtosis tensor Basis : array (3, 3) Vectors of the basis column-wise oriented inds : array(m, 4) (optional) Array of vectors containing the four indexes of m specific elements of the rotated kurtosis tensor. If not specified all 15 elements of the rotated kurtosis tensor are computed. Returns -------- Wrot : array (m,) or (15,) Vector with the m independent elements of the rotated kurtosis tensor. If 'indices' is not specified all 15 elements of the rotated kurtosis tensor are computed. Note ------ KT elements are assumed to be ordered as follows: .. math:: \begin{matrix} ( & W_{xxxx} & W_{yyyy} & W_{zzzz} & W_{xxxy} & W_{xxxz} & ... \\ & W_{xyyy} & W_{yyyz} & W_{xzzz} & W_{yzzz} & W_{xxyy} & ... \\ & W_{xxzz} & W_{yyzz} & W_{xxyz} & W_{xyyz} & W_{xyzz} & & )\end{matrix} References ---------- [1] Hui ES, Cheung MM, Qi L, Wu EX, 2008. Towards better MR characterization of neural tissues using directional diffusion kurtosis analysis. Neuroimage 42(1): 122-34 """ inds = np.array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [0, 0, 0, 1], [0, 0, 0, 2], [0, 1, 1, 1], [1, 1, 1, 2], [0, 2, 2, 2], [1, 2, 2, 2], [0, 0, 1, 1], [0, 0, 2, 2], [1, 1, 2, 2], [0, 0, 1, 2], [0, 1, 1, 2], [0, 1, 2, 2]]) Wrot = np.zeros(kt.shape) for e in range(len(inds)): Wrot[..., e] = Wrotate_element(kt, inds[e][0], inds[e][1], inds[e][2], inds[e][3], Basis) return Wrot # Defining keys to select a kurtosis tensor element with indexes (i, j, k, l) # on a kt vector that contains only the 15 independent elements of the kurtosis # tensor: Considering y defined by (i+1) * (j+1) * (k+1) * (l+1). Two elements # of the full 4D kurtosis tensor are equal if y obtain from the indexes of # these two element are equal. Therefore, the possible values of y (1, 16, 81, # 2, 3, 8, 24 27, 54, 4, 9, 36, 6, 12, 18) are used to point each element of # the kurtosis tensor on the format of a vector containing the 15 independent # elements. ind_ele = {1: 0, 16: 1, 81: 2, 2: 3, 3: 4, 8: 5, 24: 6, 27: 7, 54: 8, 4: 9, 9: 10, 36: 11, 6: 12, 12: 13, 18: 14} def Wrotate_element(kt, indi, indj, indk, indl, B): r""" Computes the the specified index element of a kurtosis tensor rotated to the coordinate system basis B. Parameters ---------- kt : ndarray (x, y, z, 15) or (n, 15) Array containing the 15 independent elements of the kurtosis tensor indi : int Rotated kurtosis tensor element index i (0 for x, 1 for y, 2 for z) indj : int Rotated kurtosis tensor element index j (0 for x, 1 for y, 2 for z) indk : int Rotated kurtosis tensor element index k (0 for x, 1 for y, 2 for z) indl: int Rotated kurtosis tensor element index l (0 for x, 1 for y, 2 for z) B: array (x, y, z, 3, 3) or (n, 15) Vectors of the basis column-wise oriented Returns ------- Wre : float rotated kurtosis tensor element of index ind_i, ind_j, ind_k, ind_l Note ----- It is assumed that initial kurtosis tensor elementes are defined on the Cartesian coordinate system. References ---------- [1] Hui ES, Cheung MM, Qi L, Wu EX, 2008. Towards better MR characterization of neural tissues using directional diffusion kurtosis analysis. Neuroimage 42(1): 122-34 """ Wre = 0 xyz = [0, 1, 2] for il in xyz: for jl in xyz: for kl in xyz: for ll in xyz: key = (il+1) * (jl+1) * (kl+1) * (ll+1) multiplyB = \ B[..., il, indi] * B[..., jl, indj] * \ B[..., kl, indk] * B[..., ll, indl] Wre = Wre + multiplyB * kt[..., ind_ele[key]] return Wre def Wcons(k_elements): r""" Construct the full 4D kurtosis tensors from its 15 independent elements Parameters ---------- k_elements : (15,) elements of the kurtosis tensor in the following order: .. math:: \begin{matrix} ( & W_{xxxx} & W_{yyyy} & W_{zzzz} & W_{xxxy} & W_{xxxz} & ... \\ & W_{xyyy} & W_{yyyz} & W_{xzzz} & W_{yzzz} & W_{xxyy} & ... \\ & W_{xxzz} & W_{yyzz} & W_{xxyz} & W_{xyyz} & W_{xyzz} & & )\end{matrix} Returns ------- W : array(3, 3, 3, 3) Full 4D kurtosis tensor """ W = np.zeros((3, 3, 3, 3)) xyz = [0, 1, 2] for ind_i in xyz: for ind_j in xyz: for ind_k in xyz: for ind_l in xyz: key = (ind_i+1) * (ind_j+1) * (ind_k+1) * (ind_l+1) W[ind_i][ind_j][ind_k][ind_l] = k_elements[ind_ele[key]] return W def split_dki_param(dki_params): r""" Extract the diffusion tensor eigenvalues, the diffusion tensor eigenvector matrix, and the 15 independent elements of the kurtosis tensor from the model parameters estimated from the DKI model Parameters ---------- dki_params : ndarray (x, y, z, 27) or (n, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follows: 1) Three diffusion tensor's eigenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor Returns -------- eigvals : array (x, y, z, 3) or (n, 3) Eigenvalues from eigen decomposition of the tensor. eigvecs : array (x, y, z, 3, 3) or (n, 3, 3) Associated eigenvectors from eigen decomposition of the tensor. Eigenvectors are columnar (e.g. eigvecs[:,j] is associated with eigvals[j]) kt : array (x, y, z, 15) or (n, 15) Fifteen elements of the kurtosis tensor """ evals = dki_params[..., :3] evecs = dki_params[..., 3:12].reshape(dki_params.shape[:-1] + (3, 3)) kt = dki_params[..., 12:] return evals, evecs, kt common_fit_methods = {'WLS': wls_fit_dki, 'OLS': ols_fit_dki, 'UWLLS': wls_fit_dki, 'ULLS': ols_fit_dki, } dipy-0.10.1/dipy/reconst/dsi.py000066400000000000000000000523421263041327500163220ustar00rootroot00000000000000import numpy as np from scipy.ndimage import map_coordinates from scipy.fftpack import fftn, fftshift, ifftshift from dipy.reconst.odf import OdfModel, OdfFit from dipy.reconst.cache import Cache from dipy.reconst.multi_voxel import multi_voxel_fit class DiffusionSpectrumModel(OdfModel, Cache): def __init__(self, gtab, qgrid_size=17, r_start=2.1, r_end=6., r_step=0.2, filter_width=32, normalize_peaks=False): r""" Diffusion Spectrum Imaging The theoretical idea underlying this method is that the diffusion propagator $P(\mathbf{r})$ (probability density function of the average spin displacements) can be estimated by applying 3D FFT to the signal values $S(\mathbf{q})$ ..math:: :nowrap: \begin{eqnarray} P(\mathbf{r}) & = & S_{0}^{-1}\int S(\mathbf{q})\exp(-i2\pi\mathbf{q}\cdot\mathbf{r})d\mathbf{r} \end{eqnarray} where $\mathbf{r}$ is the displacement vector and $\mathbf{q}$ is the wavector which corresponds to different gradient directions. Method used to calculate the ODFs. Here we implement the method proposed by Wedeen et. al [1]_. The main assumption for this model is fast gradient switching and that the acquisition gradients will sit on a keyhole Cartesian grid in q_space [3]_. Parameters ---------- gtab : GradientTable, Gradient directions and bvalues container class qgrid_size : int, has to be an odd number. Sets the size of the q_space grid. For example if qgrid_size is 17 then the shape of the grid will be ``(17, 17, 17)``. r_start : float, ODF is sampled radially in the PDF. This parameters shows where the sampling should start. r_end : float, Radial endpoint of ODF sampling r_step : float, Step size of the ODf sampling from r_start to r_end filter_width : float, Strength of the hanning filter References ---------- .. [1] Wedeen V.J et. al, "Mapping Complex Tissue Architecture With Diffusion Spectrum Magnetic Resonance Imaging", MRM 2005. .. [2] Canales-Rodriguez E.J et. al, "Deconvolution in Diffusion Spectrum Imaging", Neuroimage, 2010. .. [3] Garyfallidis E, "Towards an accurate brain tractography", PhD thesis, University of Cambridge, 2012. Examples -------- In this example where we provide the data, a gradient table and a reconstruction sphere, we calculate generalized FA for the first voxel in the data with the reconstruction performed using DSI. >>> from dipy.data import dsi_voxels, get_sphere >>> data, gtab = dsi_voxels() >>> sphere = get_sphere('symmetric724') >>> from dipy.reconst.dsi import DiffusionSpectrumModel >>> ds = DiffusionSpectrumModel(gtab) >>> dsfit = ds.fit(data) >>> from dipy.reconst.odf import gfa >>> np.round(gfa(dsfit.odf(sphere))[0, 0, 0], 2) 0.11 Notes ------ A. Have in mind that DSI expects gradients on both hemispheres. If your gradients span only one hemisphere you need to duplicate the data and project them to the other hemisphere before calling this class. The function dipy.reconst.dsi.half_to_full_qspace can be used for this purpose. B. If you increase the size of the grid (parameter qgrid_size) you will most likely also need to update the r_* parameters. This is because the added zero padding from the increase of gqrid_size also introduces a scaling of the PDF. C. We assume that data only one b0 volume is provided. See Also -------- dipy.reconst.gqi.GeneralizedQSampling """ self.bvals = gtab.bvals self.bvecs = gtab.bvecs self.normalize_peaks = normalize_peaks # 3d volume for Sq if qgrid_size % 2 == 0: raise ValueError('qgrid_size needs to be an odd integer') self.qgrid_size = qgrid_size # necessary shifting for centering self.origin = self.qgrid_size // 2 # hanning filter width self.filter = hanning_filter(gtab, filter_width, self.origin) # odf sampling radius self.qradius = np.arange(r_start, r_end, r_step) self.qradiusn = len(self.qradius) # create qspace grid self.qgrid = create_qspace(gtab, self.origin) b0 = np.min(self.bvals) self.dn = (self.bvals > b0).sum() self.gtab = gtab @multi_voxel_fit def fit(self, data): return DiffusionSpectrumFit(self, data) class DiffusionSpectrumFit(OdfFit): def __init__(self, model, data): """ Calculates PDF and ODF and other properties for a single voxel Parameters ---------- model : object, DiffusionSpectrumModel data : 1d ndarray, signal values """ self.model = model self.data = data self.qgrid_sz = self.model.qgrid_size self.dn = self.model.dn self._gfa = None self.npeaks = 5 self._peak_values = None self._peak_indices = None def pdf(self, normalized=True): """ Applies the 3D FFT in the q-space grid to generate the diffusion propagator """ values = self.data * self.model.filter # create the signal volume Sq = np.zeros((self.qgrid_sz, self.qgrid_sz, self.qgrid_sz)) # fill q-space for i in range(len(values)): qx, qy, qz = self.model.qgrid[i] Sq[qx, qy, qz] += values[i] # apply fourier transform Pr = fftshift(np.real(fftn(ifftshift(Sq), 3 * (self.qgrid_sz, )))) # clipping negative values to 0 (ringing artefact) Pr = np.clip(Pr, 0, Pr.max()) # normalize the propagator to obtain a pdf if normalized: Pr /= Pr.sum() return Pr def rtop_signal(self, filtering=True): """ Calculates the return to origin probability (rtop) from the signal rtop equals to the sum of all signal values Parameters ---------- filtering : boolean default true, perform the hanning filtering Returns ------- rtop : float the return to origin probability """ if filtering: values = self.data * self.model.filter else: values = self.data rtop = values.sum() return rtop def rtop_pdf(self, normalized=True): r""" Calculates the return to origin probability from the propagator, which is the propagator evaluated at zero (see Descoteaux et Al. [1]_, Tuch [2]_, Wu et al. [3]_) rtop = P(0) Parameters ---------- normalized : boolean default true, normalize the propagator by its sum in order to obtain a pdf Returns ------- rtop : float the return to origin probability References ---------- .. [1] Descoteaux M. et. al, "Multiple q-shell diffusion propagator imaging", Medical Image Analysis, vol 15, No. 4, p. 603-621, 2011. .. [2] Tuch D.S., "Diffusion MRI of Complex Tissue Structure", PhD Thesis, 2002. .. [3] Wu Y. et. al, "Computation of Diffusion Function Measures in q -Space Using Magnetic Resonance Hybrid Diffusion Imaging", IEEE TRANSACTIONS ON MEDICAL IMAGING, vol. 27, No. 6, p. 858-865, 2008 """ Pr = self.pdf(normalized=normalized) center = self.qgrid_sz // 2 rtop = Pr[center, center, center] return rtop def msd_discrete(self, normalized=True): r""" Calculates the mean squared displacement on the discrete propagator ..math:: :nowrap: \begin{equation} MSD:{DSI}=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} P(\hat{\mathbf{r}}) \cdot \hat{\mathbf{r}}^{2} \ dr_x \ dr_y \ dr_z \end{equation} where $\hat{\mathbf{r}}$ is a point in the 3D Propagator space (see Wu et. al [1]_). Parameters ---------- normalized : boolean default true, normalize the propagator by its sum in order to obtain a pdf Returns ------- msd : float the mean square displacement References ---------- .. [1] Wu Y. et. al, "Hybrid diffusion imaging", NeuroImage, vol 36, p. 617-629, 2007. """ Pr = self.pdf(normalized=normalized) # create the r squared 3D matrix gridsize = self.qgrid_sz center = gridsize // 2 a = np.arange(gridsize) - center x = np.tile(a, (gridsize, gridsize, 1)) y = np.tile(a.reshape(gridsize, 1), (gridsize, 1, gridsize)) z = np.tile(a.reshape(gridsize, 1, 1), (1, gridsize, gridsize)) r2 = x ** 2 + y ** 2 + z ** 2 msd = np.sum(Pr * r2) / float((gridsize ** 3)) return msd def odf(self, sphere): r""" Calculates the real discrete odf for a given discrete sphere ..math:: :nowrap: \begin{equation} \psi_{DSI}(\hat{\mathbf{u}})=\int_{0}^{\infty}P(r\hat{\mathbf{u}})r^{2}dr \end{equation} where $\hat{\mathbf{u}}$ is the unit vector which corresponds to a sphere point. """ interp_coords = self.model.cache_get('interp_coords', key=sphere) if interp_coords is None: interp_coords = pdf_interp_coords(sphere, self.model.qradius, self.model.origin) self.model.cache_set('interp_coords', sphere, interp_coords) Pr = self.pdf() # calculate the orientation distribution function return pdf_odf(Pr, self.model.qradius, interp_coords) def create_qspace(gtab, origin): """ create the 3D grid which holds the signal values (q-space) Parameters ---------- gtab : GradientTable origin : (3,) ndarray center of qspace Returns ------- qgrid : ndarray qspace coordinates """ # create the q-table from bvecs and bvals qtable = create_qtable(gtab, origin) # center and index in qspace volume qgrid = qtable + origin return qgrid.astype('i8') def create_qtable(gtab, origin): """ create a normalized version of gradients Parameters ---------- gtab : GradientTable origin : (3,) ndarray center of qspace Returns ------- qtable : ndarray """ bv = gtab.bvals bsorted = np.sort(bv[np.bitwise_not(gtab.b0s_mask)]) for i in range(len(bsorted)): bmin = bsorted[i] try: if np.sqrt(bv.max() / bmin) > origin + 1: continue else: break except ZeroDivisionError: continue bv = np.sqrt(bv / bmin) qtable = np.vstack((bv, bv, bv)).T * gtab.bvecs return np.floor(qtable + .5) def hanning_filter(gtab, filter_width, origin): """ create a hanning window The signal is premultiplied by a Hanning window before Fourier transform in order to ensure a smooth attenuation of the signal at high q values. Parameters ---------- gtab : GradientTable filter_width : int origin : (3,) ndarray center of qspace Returns ------- filter : (N,) ndarray where N is the number of non-b0 gradient directions """ qtable = create_qtable(gtab, origin) # calculate r - hanning filter free parameter r = np.sqrt(qtable[:, 0] ** 2 + qtable[:, 1] ** 2 + qtable[:, 2] ** 2) # setting hanning filter width and hanning return .5 * np.cos(2 * np.pi * r / filter_width) def pdf_interp_coords(sphere, rradius, origin): """ Precompute coordinates for ODF calculation from the PDF Parameters ---------- sphere : object, Sphere rradius : array, shape (N,) line interpolation points origin : array, shape (3,) center of the grid """ interp_coords = rradius * sphere.vertices[np.newaxis].T origin = np.reshape(origin, [-1, 1, 1]) interp_coords = origin + interp_coords return interp_coords def pdf_odf(Pr, rradius, interp_coords): r""" Calculates the real ODF from the diffusion propagator(PDF) Pr Parameters ---------- Pr : array, shape (X, X, X) probability density function rradius : array, shape (N,) interpolation range on the radius interp_coords : array, shape (3, M, N) coordinates in the pdf for interpolating the odf """ PrIs = map_coordinates(Pr, interp_coords, order=1) odf = (PrIs * rradius ** 2).sum(-1) return odf def half_to_full_qspace(data, gtab): """ Half to full Cartesian grid mapping Useful when dMRI data are provided in one qspace hemisphere as DiffusionSpectrum expects data to be in full qspace. Parameters ---------- data : array, shape (X, Y, Z, W) where (X, Y, Z) volume size and W number of gradient directions gtab : GradientTable container for b-values and b-vectors (gradient directions) Returns ------- new_data : array, shape (X, Y, Z, 2 * W -1) new_gtab : GradientTable Notes ----- We assume here that only on b0 is provided with the initial data. If that is not the case then you will need to write your own preparation function before providing the gradients and the data to the DiffusionSpectrumModel class. """ bvals = gtab.bvals bvecs = gtab.bvecs bvals = np.append(bvals, bvals[1:]) bvecs = np.append(bvecs, - bvecs[1:], axis=0) data = np.append(data, data[..., 1:], axis=-1) gtab.bvals = bvals.copy() gtab.bvecs = bvecs.copy() return data, gtab def project_hemisph_bvecs(gtab): """ Project any near identical bvecs to the other hemisphere Parameters ---------- gtab : object, GradientTable Notes ------- Useful only when working with some types of dsi data. """ bvals = gtab.bvals bvecs = gtab.bvecs bvs = bvals[1:] bvcs = bvecs[1:] b = bvs[:, None] * bvcs bb = np.zeros((len(bvs), len(bvs))) pairs = [] for (i, vec) in enumerate(b): for (j, vec2) in enumerate(b): bb[i, j] = np.sqrt(np.sum((vec - vec2) ** 2)) I = np.argsort(bb[i]) for j in I: if j != i: break if (j, i) in pairs: pass else: pairs.append((i, j)) bvecs2 = bvecs.copy() for (i, j) in pairs: bvecs2[1 + j] = - bvecs2[1 + j] return bvecs2, pairs class DiffusionSpectrumDeconvModel(DiffusionSpectrumModel): def __init__(self, gtab, qgrid_size=35, r_start=4.1, r_end=13., r_step=0.4, filter_width=np.inf, normalize_peaks=False): r""" Diffusion Spectrum Deconvolution The idea is to remove the convolution on the DSI propagator that is caused by the truncation of the q-space in the DSI sampling. ..math:: :nowrap: \begin{eqnarray*} P_{dsi}(\mathbf{r}) & = & S_{0}^{-1}\iiint\limits_{\| \mathbf{q} \| \le \mathbf{q_{max}}} S(\mathbf{q})\exp(-i2\pi\mathbf{q}\cdot\mathbf{r})d\mathbf{q} \\ & = & S_{0}^{-1}\iiint\limits_{\mathbf{q}} \left( S(\mathbf{q}) \cdot M(\mathbf{q}) \right) \exp(-i2\pi\mathbf{q}\cdot\mathbf{r})d\mathbf{q} \\ & = & P(\mathbf{r}) \otimes \left( S_{0}^{-1}\iiint\limits_{\mathbf{q}} M(\mathbf{q}) \exp(-i2\pi\mathbf{q}\cdot\mathbf{r})d\mathbf{q} \right) \\ \end{eqnarray*} where $\mathbf{r}$ is the displacement vector and $\mathbf{q}$ is the wavector which corresponds to different gradient directions, $M(\mathbf{q})$ is a mask corresponding to your q-space sampling and $\otimes$ is the convolution operator [1]_. Parameters ---------- gtab : GradientTable, Gradient directions and bvalues container class qgrid_size : int, has to be an odd number. Sets the size of the q_space grid. For example if qgrid_size is 35 then the shape of the grid will be ``(35, 35, 35)``. r_start : float, ODF is sampled radially in the PDF. This parameters shows where the sampling should start. r_end : float, Radial endpoint of ODF sampling r_step : float, Step size of the ODf sampling from r_start to r_end filter_width : float, Strength of the hanning filter References ---------- .. [1] Canales-Rodriguez E.J et. al, "Deconvolution in Diffusion Spectrum Imaging", Neuroimage, 2010. .. [2] Biggs David S.C. et. al, "Acceleration of Iterative Image Restoration Algorithms", Applied Optics, vol. 36, No. 8, p. 1766-1775, 1997. """ DiffusionSpectrumModel.__init__(self, gtab, qgrid_size, r_start, r_end, r_step, filter_width, normalize_peaks) @multi_voxel_fit def fit(self, data): return DiffusionSpectrumDeconvFit(self, data) class DiffusionSpectrumDeconvFit(DiffusionSpectrumFit): def pdf(self): """ Applies the 3D FFT in the q-space grid to generate the DSI diffusion propagator, remove the background noise with a hard threshold and then deconvolve the propagator with the Lucy-Richardson deconvolution algorithm """ values = self.data # create the signal volume Sq = np.zeros((self.qgrid_sz, self.qgrid_sz, self.qgrid_sz)) # fill q-space for i in range(len(values)): qx, qy, qz = self.model.qgrid[i] Sq[qx, qy, qz] += values[i] # get deconvolution PSF DSID_PSF = self.model.cache_get('deconv_psf', key=self.model.gtab) if DSID_PSF is None: DSID_PSF = gen_PSF(self.model.qgrid, self.qgrid_sz, self.qgrid_sz, self.qgrid_sz) self.model.cache_set('deconv_psf', self.model.gtab, DSID_PSF) # apply fourier transform Pr = fftshift(np.abs(np.real(fftn(ifftshift(Sq), 3 * (self.qgrid_sz, ))))) # threshold propagator Pr = threshold_propagator(Pr) # apply LR deconvolution Pr = LR_deconv(Pr, DSID_PSF, 5, 2) return Pr def threshold_propagator(P, estimated_snr=15.): """ Applies hard threshold on the propagator to remove background noise for the deconvolution. """ P_thresholded = P.copy() threshold = P_thresholded.max() / float(estimated_snr) P_thresholded[P_thresholded < threshold] = 0 return P_thresholded / P_thresholded.sum() def gen_PSF(qgrid_sampling, siz_x, siz_y, siz_z): """ Generate a PSF for DSI Deconvolution by taking the ifft of the binary q-space sampling mask and truncating it to keep only the center. """ Sq = np.zeros((siz_x, siz_y, siz_z)) # fill q-space for i in range(qgrid_sampling.shape[0]): qx, qy, qz = qgrid_sampling[i] Sq[qx, qy, qz] = 1 return Sq * np.real(np.fft.fftshift(np.fft.ifftn(np.fft.ifftshift(Sq)))) def LR_deconv(prop, psf, numit=5, acc_factor=1): r""" Perform Lucy-Richardson deconvolution algorithm on a 3D array. Parameters ---------- prop : 3-D ndarray of dtype float The 3D volume to be deconvolve psf : 3-D ndarray of dtype float The filter that will be used for the deconvolution. numit : int Number of Lucy-Richardson iteration to perform. acc_factor : float Exponential acceleration factor as in [1]_. References ---------- .. [1] Biggs David S.C. et. al, "Acceleration of Iterative Image Restoration Algorithms", Applied Optics, vol. 36, No. 8, p. 1766-1775, 1997. """ eps = 1e-16 # Create the otf of the same size as prop otf = np.zeros_like(prop) # prop.ndim==3 otf[otf.shape[0] // 2 - psf.shape[0] // 2:otf.shape[0] // 2 + psf.shape[0] // 2 + 1, otf.shape[1] // 2 - psf.shape[1] // 2: otf.shape[1] // 2 + psf.shape[1] // 2 + 1, otf.shape[2] // 2 - psf.shape[2] // 2:otf.shape[2] // 2 + psf.shape[2] // 2 + 1] = psf otf = np.real(np.fft.fftn(np.fft.ifftshift(otf))) # Enforce Positivity prop = np.clip(prop, 0, np.inf) prop_deconv = prop.copy() for it in range(numit): # Blur the estimate reBlurred = np.real(np.fft.ifftn(otf * np.fft.fftn(prop_deconv))) reBlurred[reBlurred < eps] = eps # Update the estimate prop_deconv = prop_deconv * (np.real(np.fft.ifftn(otf * np.fft.fftn((prop / reBlurred) + eps)))) ** acc_factor # Enforce positivity prop_deconv = np.clip(prop_deconv, 0, np.inf) return prop_deconv / prop_deconv.sum() if __name__ == '__main__': pass dipy-0.10.1/dipy/reconst/dti.py000077500000000000000000001651321263041327500163300ustar00rootroot00000000000000#!/usr/bin/python """ Classes and functions for fitting tensors """ from __future__ import division, print_function, absolute_import import warnings import functools import numpy as np import scipy.optimize as opt from dipy.utils.six.moves import range from dipy.utils.arrfuncs import pinv, eigh from dipy.data import get_sphere from ..core.gradients import gradient_table from ..core.geometry import vector_norm from ..core.sphere import Sphere from .vec_val_sum import vec_val_vect from ..core.onetime import auto_attr from .base import ReconstModel def _roll_evals(evals, axis=-1): """ Helper function to check that the evals provided to functions calculating tensor statistics have the right shape Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. shape should be (...,3). axis : int The axis of the array which contains the 3 eigenvals. Default: -1 Returns ------- evals : array-like Eigenvalues of a diffusion tensor, rolled so that the 3 eigenvals are the last axis. """ if evals.shape[-1] != 3: msg = "Expecting 3 eigenvalues, got {}".format(evals.shape[-1]) raise ValueError(msg) evals = np.rollaxis(evals, axis) return evals def _min_positive_signal(data): """ Helper function to establish the minimun positive signal of a given data Parameters ---------- data: array ([X, Y, Z, ...], g) Data or response variables holding the data. Note that the last dimension should contain the data. Returns ------- min_signal : float Minimun positive signal of the given data """ data = data.ravel() if np.all(data == 0): return 0.0001 else: return data[data > 0].min() def fractional_anisotropy(evals, axis=-1): r""" Fractional anisotropy (FA) of a diffusion tensor. Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- fa : array Calculated FA. Range is 0 <= FA <= 1. Notes -------- FA is calculated using the following equation: .. math:: FA = \sqrt{\frac{1}{2}\frac{(\lambda_1-\lambda_2)^2+(\lambda_1- \lambda_3)^2+(\lambda_2-\lambda_3)^2}{\lambda_1^2+ \lambda_2^2+\lambda_3^2}} """ evals = _roll_evals(evals, axis) # Make sure not to get nans all_zero = (evals == 0).all(axis=0) ev1, ev2, ev3 = evals fa = np.sqrt(0.5 * ((ev1 - ev2) ** 2 + (ev2 - ev3) ** 2 + (ev3 - ev1) ** 2) / ((evals * evals).sum(0) + all_zero)) return fa def geodesic_anisotropy(evals, axis=-1): r""" Geodesic anisotropy (GA) of a diffusion tensor. Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- ga : array Calculated GA. In the range 0 to +infinity Notes -------- GA is calculated using the following equation given in [1]_: .. math:: GA = \sqrt{\sum_{i=1}^3 \log^2{\left ( \lambda_i/<\mathbf{D}> \right )}}, \quad \textrm{where} \quad <\mathbf{D}> = (\lambda_1\lambda_2\lambda_3)^{1/3} Note that the notation, $$, is often used as the mean diffusivity (MD) of the diffusion tensor and can lead to confusions in the literature (see [1]_ versus [2]_ versus [3]_ for example). Reference [2]_ defines geodesic anisotropy (GA) with $$ as the MD in the denominator of the sum. This is wrong. The original paper [1]_ defines GA with $ = det(D)^{1/3}$, as the isotropic part of the distance. This might be an explanation for the confusion. The isotropic part of the diffusion tensor in Euclidean space is the MD whereas the isotropic part of the tensor in log-Euclidean space is $det(D)^{1/3}$. The Appendix of [1]_ and log-Euclidean derivations from [3]_ are clear on this. Hence, all that to say that $ = det(D)^{1/3}$ here for the GA definition and not MD. References ---------- .. [1] P. G. Batchelor, M. Moakher, D. Atkinson, F. Calamante, A. Connelly, "A rigorous framework for diffusion tensor calculus", Magnetic Resonance in Medicine, vol. 53, pp. 221-225, 2005. .. [2] M. M. Correia, V. F. Newcombe, G.B. Williams. "Contrast-to-noise ratios for indices of anisotropy obtained from diffusion MRI: a study with standard clinical b-values at 3T". NeuroImage, vol. 57, pp. 1103-1115, 2011. .. [3] A. D. Lee, etal, P. M. Thompson. "Comparison of fractional and geodesic anisotropy in diffusion tensor images of 90 monozygotic and dizygotic twins". 5th IEEE International Symposium on Biomedical Imaging (ISBI), pp. 943-946, May 2008. .. [4] V. Arsigny, P. Fillard, X. Pennec, N. Ayache. "Log-Euclidean metrics for fast and simple calculus on diffusion tensors." Magnetic Resonance in Medecine, vol 56, pp. 411-421, 2006. """ evals = _roll_evals(evals, axis) ev1, ev2, ev3 = evals log1 = np.zeros(ev1.shape) log2 = np.zeros(ev1.shape) log3 = np.zeros(ev1.shape) idx = np.nonzero(ev1) # this is the definition in [1]_ detD = np.power(ev1 * ev2 * ev3, 1/3.) log1[idx] = np.log(ev1[idx] / detD[idx]) log2[idx] = np.log(ev2[idx] / detD[idx]) log3[idx] = np.log(ev3[idx] / detD[idx]) ga = np.sqrt(log1 ** 2 + log2 ** 2 + log3 ** 2) return ga def mean_diffusivity(evals, axis=-1): r""" Mean Diffusivity (MD) of a diffusion tensor. Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- md : array Calculated MD. Notes -------- MD is calculated with the following equation: .. math:: MD = \frac{\lambda_1 + \lambda_2 + \lambda_3}{3} """ evals = _roll_evals(evals, axis) return evals.mean(0) def axial_diffusivity(evals, axis=-1): r""" Axial Diffusivity (AD) of a diffusion tensor. Also called parallel diffusivity. Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor, must be sorted in descending order along `axis`. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- ad : array Calculated AD. Notes -------- AD is calculated with the following equation: .. math:: AD = \lambda_1 """ evals = _roll_evals(evals, axis) ev1, ev2, ev3 = evals return ev1 def radial_diffusivity(evals, axis=-1): r""" Radial Diffusivity (RD) of a diffusion tensor. Also called perpendicular diffusivity. Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor, must be sorted in descending order along `axis`. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- rd : array Calculated RD. Notes -------- RD is calculated with the following equation: .. math:: RD = \frac{\lambda_2 + \lambda_3}{2} """ evals = _roll_evals(evals, axis) return evals[1:].mean(0) def trace(evals, axis=-1): r""" Trace of a diffusion tensor. Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- trace : array Calculated trace of the diffusion tensor. Notes -------- Trace is calculated with the following equation: .. math:: Trace = \lambda_1 + \lambda_2 + \lambda_3 """ evals = _roll_evals(evals, axis) return evals.sum(0) def color_fa(fa, evecs): r""" Color fractional anisotropy of diffusion tensor Parameters ---------- fa : array-like Array of the fractional anisotropy (can be 1D, 2D or 3D) evecs : array-like eigen vectors from the tensor model Returns ------- rgb : Array with 3 channels for each color as the last dimension. Colormap of the FA with red for the x value, y for the green value and z for the blue value. Note ----- It is computed from the clipped FA between 0 and 1 using the following formula .. math:: rgb = abs(max(\vec{e})) \times fa """ if (fa.shape != evecs[..., 0, 0].shape) or ((3, 3) != evecs.shape[-2:]): raise ValueError("Wrong number of dimensions for evecs") return np.abs(evecs[..., 0]) * np.clip(fa, 0, 1)[..., None] # The following are used to calculate the tensor mode: def determinant(q_form): """ The determinant of a tensor, given in quadratic form Parameters ---------- q_form : ndarray The quadratic form of a tensor, or an array with quadratic forms of tensors. Should be of shape (x, y, z, 3, 3) or (n, 3, 3) or (3, 3). Returns ------- det : array The determinant of the tensor in each spatial coordinate """ # Following the conventions used here: # http://en.wikipedia.org/wiki/Determinant aei = q_form[..., 0, 0] * q_form[..., 1, 1] * q_form[..., 2, 2] bfg = q_form[..., 0, 1] * q_form[..., 1, 2] * q_form[..., 2, 0] cdh = q_form[..., 0, 2] * q_form[..., 1, 0] * q_form[..., 2, 1] ceg = q_form[..., 0, 2] * q_form[..., 1, 1] * q_form[..., 2, 0] bdi = q_form[..., 0, 1] * q_form[..., 1, 0] * q_form[..., 2, 2] afh = q_form[..., 0, 0] * q_form[..., 1, 2] * q_form[..., 2, 1] return aei + bfg + cdh - ceg - bdi - afh def isotropic(q_form): r""" Calculate the isotropic part of the tensor [1]_. Parameters ---------- q_form : ndarray The quadratic form of a tensor, or an array with quadratic forms of tensors. Should be of shape (x,y,z,3,3) or (n, 3, 3) or (3,3). Returns ------- A_hat: ndarray The isotropic part of the tensor in each spatial coordinate Notes ----- The isotropic part of a tensor is defined as (equations 3-5 of [1]_): .. math :: \bar{A} = \frac{1}{2} tr(A) I .. [1] Daniel B. Ennis and G. Kindlmann, "Orthogonal Tensor Invariants and the Analysis of Diffusion Tensor Magnetic Resonance Images", Magnetic Resonance in Medicine, vol. 55, no. 1, pp. 136-146, 2006. """ tr_A = q_form[..., 0, 0] + q_form[..., 1, 1] + q_form[..., 2, 2] my_I = np.eye(3) tr_AI = (tr_A.reshape(tr_A.shape + (1, 1)) * my_I) return (1 / 3.0) * tr_AI def deviatoric(q_form): r""" Calculate the deviatoric (anisotropic) part of the tensor [1]_. Parameters ---------- q_form : ndarray The quadratic form of a tensor, or an array with quadratic forms of tensors. Should be of shape (x,y,z,3,3) or (n, 3, 3) or (3,3). Returns ------- A_squiggle : ndarray The deviatoric part of the tensor in each spatial coordinate. Notes ----- The deviatoric part of the tensor is defined as (equations 3-5 in [1]_): .. math :: \widetilde{A} = A - \bar{A} Where $A$ is the tensor quadratic form and $\bar{A}$ is the anisotropic part of the tensor. .. [1] Daniel B. Ennis and G. Kindlmann, "Orthogonal Tensor Invariants and the Analysis of Diffusion Tensor Magnetic Resonance Images", Magnetic Resonance in Medicine, vol. 55, no. 1, pp. 136-146, 2006. """ A_squiggle = q_form - isotropic(q_form) return A_squiggle def norm(q_form): r""" Calculate the Frobenius norm of a tensor quadratic form Parameters ---------- q_form: ndarray The quadratic form of a tensor, or an array with quadratic forms of tensors. Should be of shape (x,y,z,3,3) or (n, 3, 3) or (3,3). Returns ------- norm : ndarray The Frobenius norm of the 3,3 tensor q_form in each spatial coordinate. Notes ----- The Frobenius norm is defined as: :math: ||A||_F = [\sum_{i,j} abs(a_{i,j})^2]^{1/2} See also -------- np.linalg.norm """ return np.sqrt(np.sum(np.sum(np.abs(q_form ** 2), -1), -1)) def mode(q_form): r""" Mode (MO) of a diffusion tensor [1]_. Parameters ---------- q_form : ndarray The quadratic form of a tensor, or an array with quadratic forms of tensors. Should be of shape (x, y, z, 3, 3) or (n, 3, 3) or (3, 3). Returns ------- mode : array Calculated tensor mode in each spatial coordinate. Notes ----- Mode ranges between -1 (linear anisotropy) and +1 (planar anisotropy) with 0 representing orthotropy. Mode is calculated with the following equation (equation 9 in [1]_): .. math:: Mode = 3*\sqrt{6}*det(\widetilde{A}/norm(\widetilde{A})) Where $\widetilde{A}$ is the deviatoric part of the tensor quadratic form. References ---------- .. [1] Daniel B. Ennis and G. Kindlmann, "Orthogonal Tensor Invariants and the Analysis of Diffusion Tensor Magnetic Resonance Images", Magnetic Resonance in Medicine, vol. 55, no. 1, pp. 136-146, 2006. """ A_squiggle = deviatoric(q_form) A_s_norm = norm(A_squiggle) # Add two dims for the (3,3), so that it can broadcast on A_squiggle: A_s_norm = A_s_norm.reshape(A_s_norm.shape + (1, 1)) return 3 * np.sqrt(6) * determinant((A_squiggle / A_s_norm)) def linearity(evals, axis=-1): r""" The linearity of the tensor [1]_ Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- linearity : array Calculated linearity of the diffusion tensor. Notes -------- Linearity is calculated with the following equation: .. math:: Linearity = \frac{\lambda_1-\lambda_2}{\lambda_1+\lambda_2+\lambda_3} Notes ----- [1] Westin C.-F., Peled S., Gubjartsson H., Kikinis R., Jolesz F., "Geometrical diffusion measures for MRI from tensor basis analysis" in Proc. 5th Annual ISMRM, 1997. """ evals = _roll_evals(evals, axis) ev1, ev2, ev3 = evals return (ev1 - ev2) / evals.sum(0) def planarity(evals, axis=-1): r""" The planarity of the tensor [1]_ Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- linearity : array Calculated linearity of the diffusion tensor. Notes -------- Planarity is calculated with the following equation: .. math:: Planarity = \frac{2 (\lambda_2-\lambda_3)}{\lambda_1+\lambda_2+\lambda_3} Notes ----- [1] Westin C.-F., Peled S., Gubjartsson H., Kikinis R., Jolesz F., "Geometrical diffusion measures for MRI from tensor basis analysis" in Proc. 5th Annual ISMRM, 1997. """ evals = _roll_evals(evals, axis) ev1, ev2, ev3 = evals return (2 * (ev2 - ev3) / evals.sum(0)) def sphericity(evals, axis=-1): r""" The sphericity of the tensor [1]_ Parameters ---------- evals : array-like Eigenvalues of a diffusion tensor. axis : int Axis of `evals` which contains 3 eigenvalues. Returns ------- sphericity : array Calculated sphericity of the diffusion tensor. Notes -------- Sphericity is calculated with the following equation: .. math:: Sphericity = \frac{3 \lambda_3)}{\lambda_1+\lambda_2+\lambda_3} Notes ----- [1] Westin C.-F., Peled S., Gubjartsson H., Kikinis R., Jolesz F., "Geometrical diffusion measures for MRI from tensor basis analysis" in Proc. 5th Annual ISMRM, 1997. """ evals = _roll_evals(evals, axis) ev1, ev2, ev3 = evals return (3 * ev3) / evals.sum(0) def apparent_diffusion_coef(q_form, sphere): r""" Calculate the apparent diffusion coefficient (ADC) in each direction of a sphere. Parameters ---------- q_form : ndarray The quadratic form of a tensor, or an array with quadratic forms of tensors. Should be of shape (..., 3, 3) sphere : a Sphere class instance The ADC will be calculated for each of the vertices in the sphere Notes ----- The calculation of ADC, relies on the following relationship: .. math :: ADC = \vec{b} Q \vec{b}^T Where Q is the quadratic form of the tensor. """ bvecs = sphere.vertices bvals = np.ones(bvecs.shape[0]) gtab = gradient_table(bvals, bvecs) D = design_matrix(gtab)[:, :6] return -np.dot(lower_triangular(q_form), D.T) def tensor_prediction(dti_params, gtab, S0): """ Predict a signal given tensor parameters. Parameters ---------- dti_params : ndarray Tensor parameters. The last dimension should have 12 tensor parameters: 3 eigenvalues, followed by the 3 corresponding eigenvectors. gtab : a GradientTable class instance The gradient table for this prediction S0 : float or ndarray The non diffusion-weighted signal in every voxel, or across all voxels. Default: 1 Notes ----- The predicted signal is given by: $S(\theta, b) = S_0 * e^{-b ADC}$, where $ADC = \theta Q \theta^T$, $\theta$ is a unit vector pointing at any direction on the sphere for which a signal is to be predicted, $b$ is the b value provided in the GradientTable input for that direction, $Q$ is the quadratic form of the tensor determined by the input parameters. """ evals = dti_params[..., :3] evecs = dti_params[..., 3:].reshape(dti_params.shape[:-1] + (3, 3)) qform = vec_val_vect(evecs, evals) sphere = Sphere(xyz=gtab.bvecs[~gtab.b0s_mask]) adc = apparent_diffusion_coef(qform, sphere) if isinstance(S0, np.ndarray): # If it's an array, we need to give it one more dimension: S0 = S0[..., None] # First do the calculation for the diffusion weighted measurements: pre_pred_sig = S0 * np.exp(-gtab.bvals[~gtab.b0s_mask] * adc) # Then we need to sort out what goes where: pred_sig = np.zeros(pre_pred_sig.shape[:-1] + (gtab.bvals.shape[0],)) # These are the diffusion-weighted values pred_sig[..., ~gtab.b0s_mask] = pre_pred_sig # For completeness, we predict the mean S0 for the non-diffusion # weighted measurements, which is our best guess: pred_sig[..., gtab.b0s_mask] = S0 return pred_sig class TensorModel(ReconstModel): """ Diffusion Tensor """ def __init__(self, gtab, fit_method="WLS", *args, **kwargs): """ A Diffusion Tensor Model [1]_, [2]_. Parameters ---------- gtab : GradientTable class instance fit_method : str or callable str can be one of the following: 'WLS' for weighted least squares dti.wls_fit_tensor 'LS' or 'OLS' for ordinary least squares dti.ols_fit_tensor 'NLLS' for non-linear least-squares dti.nlls_fit_tensor 'RT' or 'restore' or 'RESTORE' for RESTORE robust tensor fitting [3]_ dti.restore_fit_tensor callable has to have the signature: fit_method(design_matrix, data, *args, **kwargs) args, kwargs : arguments and key-word arguments passed to the fit_method. See dti.wls_fit_tensor, dti.ols_fit_tensor for details min_signal : float The minimum signal value. Needs to be a strictly positive number. Default: minimal signal in the data provided to `fit`. References ---------- .. [1] Basser, P.J., Mattiello, J., LeBihan, D., 1994. Estimation of the effective self-diffusion tensor from the NMR spin echo. J Magn Reson B 103, 247-254. .. [2] Basser, P., Pierpaoli, C., 1996. Microstructural and physiological features of tissues elucidated by quantitative diffusion-tensor MRI. Journal of Magnetic Resonance 111, 209-219. .. [3] Lin-Ching C., Jones D.K., Pierpaoli, C. 2005. RESTORE: Robust estimation of tensors by outlier rejection. MRM 53: 1088-1095 """ ReconstModel.__init__(self, gtab) if not callable(fit_method): try: fit_method = common_fit_methods[fit_method] except KeyError: e_s = '"' + str(fit_method) + '" is not a known fit ' e_s += 'method, the fit method should either be a ' e_s += 'function or one of the common fit methods' raise ValueError(e_s) self.fit_method = fit_method self.design_matrix = design_matrix(self.gtab) self.args = args self.kwargs = kwargs self.min_signal = self.kwargs.pop('min_signal', None) if self.min_signal is not None and self.min_signal <= 0: e_s = "The `min_signal` key-word argument needs to be strictly" e_s += " positive." raise ValueError(e_s) def fit(self, data, mask=None): """ Fit method of the DTI model class Parameters ---------- data : array The measured signal from one voxel. mask : array A boolean array used to mark the coordinates in the data that should be analyzed that has the shape data.shape[:-1] """ if mask is None: # Flatten it to 2D either way: data_in_mask = np.reshape(data, (-1, data.shape[-1])) else: # Check for valid shape of the mask if mask.shape != data.shape[:-1]: raise ValueError("Mask is not the same shape as data.") mask = np.array(mask, dtype=bool, copy=False) data_in_mask = np.reshape(data[mask], (-1, data.shape[-1])) if self.min_signal is None: min_signal = _min_positive_signal(data) else: min_signal = self.min_signal data_in_mask = np.maximum(data_in_mask, min_signal) params_in_mask = self.fit_method(self.design_matrix, data_in_mask, *self.args, **self.kwargs) if mask is None: out_shape = data.shape[:-1] + (-1, ) dti_params = params_in_mask.reshape(out_shape) else: dti_params = np.zeros(data.shape[:-1] + (12,)) dti_params[mask, :] = params_in_mask return TensorFit(self, dti_params) def predict(self, dti_params, S0=1): """ Predict a signal for this TensorModel class instance given parameters. Parameters ---------- dti_params : ndarray The last dimension should have 12 tensor parameters: 3 eigenvalues, followed by the 3 eigenvectors S0 : float or ndarray The non diffusion-weighted signal in every voxel, or across all voxels. Default: 1 """ return tensor_prediction(dti_params, self.gtab, S0) class TensorFit(object): def __init__(self, model, model_params): """ Initialize a TensorFit class instance. """ self.model = model self.model_params = model_params def __getitem__(self, index): model_params = self.model_params N = model_params.ndim if type(index) is not tuple: index = (index,) elif len(index) >= model_params.ndim: raise IndexError("IndexError: invalid index") index = index + (slice(None),) * (N - len(index)) return type(self)(self.model, model_params[index]) @property def shape(self): return self.model_params.shape[:-1] @property def directions(self): """ For tracking - return the primary direction in each voxel """ return self.evecs[..., None, :, 0] @property def evals(self): """ Returns the eigenvalues of the tensor as an array """ return self.model_params[..., :3] @property def evecs(self): """ Returns the eigenvectors of the tensor as an array, columnwise """ evecs = self.model_params[..., 3:12] return evecs.reshape(self.shape + (3, 3)) @property def quadratic_form(self): """Calculates the 3x3 diffusion tensor for each voxel""" # do `evecs * evals * evecs.T` where * is matrix multiply # einsum does this with: # np.einsum('...ij,...j,...kj->...ik', evecs, evals, evecs) return vec_val_vect(self.evecs, self.evals) def lower_triangular(self, b0=None): return lower_triangular(self.quadratic_form, b0) @auto_attr def fa(self): """Fractional anisotropy (FA) calculated from cached eigenvalues.""" return fractional_anisotropy(self.evals) @auto_attr def color_fa(self): """Color fractional anisotropy of diffusion tensor""" return color_fa(self.fa, self.evecs) @auto_attr def ga(self): """Geodesic anisotropy (GA) calculated from cached eigenvalues.""" return geodesic_anisotropy(self.evals) @auto_attr def mode(self): """ Tensor mode calculated from cached eigenvalues. """ return mode(self.quadratic_form) @auto_attr def md(self): r""" Mean diffusitivity (MD) calculated from cached eigenvalues. Returns --------- md : array (V, 1) Calculated MD. Notes -------- MD is calculated with the following equation: .. math:: MD = \frac{\lambda_1+\lambda_2+\lambda_3}{3} """ return self.trace / 3.0 @auto_attr def rd(self): r""" Radial diffusitivity (RD) calculated from cached eigenvalues. Returns --------- rd : array (V, 1) Calculated RD. Notes -------- RD is calculated with the following equation: .. math:: RD = \frac{\lambda_2 + \lambda_3}{2} """ return radial_diffusivity(self.evals) @auto_attr def ad(self): r""" Axial diffusivity (AD) calculated from cached eigenvalues. Returns --------- ad : array (V, 1) Calculated AD. Notes -------- RD is calculated with the following equation: .. math:: AD = \lambda_1 """ return axial_diffusivity(self.evals) @auto_attr def trace(self): r""" Trace of the tensor calculated from cached eigenvalues. Returns --------- trace : array (V, 1) Calculated trace. Notes -------- The trace is calculated with the following equation: .. math:: trace = \lambda_1 + \lambda_2 + \lambda_3 """ return trace(self.evals) @auto_attr def planarity(self): r""" Returns ------- sphericity : array Calculated sphericity of the diffusion tensor [1]_. Notes -------- Sphericity is calculated with the following equation: .. math:: Sphericity = \frac{2 (\lambda2 - \lambda_3)}{\lambda_1+\lambda_2+\lambda_3} Notes ----- [1] Westin C.-F., Peled S., Gubjartsson H., Kikinis R., Jolesz F., "Geometrical diffusion measures for MRI from tensor basis analysis" in Proc. 5th Annual ISMRM, 1997. """ return planarity(self.evals) @auto_attr def linearity(self): r""" Returns ------- linearity : array Calculated linearity of the diffusion tensor [1]_. Notes -------- Linearity is calculated with the following equation: .. math:: Linearity = \frac{\lambda_1-\lambda_2}{\lambda_1+\lambda_2+\lambda_3} [1] Westin C.-F., Peled S., Gubjartsson H., Kikinis R., Jolesz F., "Geometrical diffusion measures for MRI from tensor basis analysis" in Proc. 5th Annual ISMRM, 1997. """ return linearity(self.evals) @auto_attr def sphericity(self): r""" Returns ------- sphericity : array Calculated sphericity of the diffusion tensor [1]_. Notes -------- Sphericity is calculated with the following equation: .. math:: Sphericity = \frac{3 \lambda_3}{\lambda_1+\lambda_2+\lambda_3} Notes ----- [1] Westin C.-F., Peled S., Gubjartsson H., Kikinis R., Jolesz F., "Geometrical diffusion measures for MRI from tensor basis analysis" in Proc. 5th Annual ISMRM, 1997. """ return sphericity(self.evals) def odf(self, sphere): """ The diffusion orientation distribution function (dODF). This is an estimate of the diffusion distance in each direction Parameters ---------- sphere : Sphere class instance. The dODF is calculated in the vertices of this input. Returns ------- odf : ndarray The diffusion distance in every direction of the sphere in every voxel in the input data. Notes ----- This is based on equation 3 in [Aganj2010]_. To re-derive it from scratch, follow steps in [Descoteaux2008]_, Section 7.9 Equation 7.24 but with an $r^2$ term in the integral. .. [Aganj2010] Aganj, I., Lenglet, C., Sapiro, G., Yacoub, E., Ugurbil, K., & Harel, N. (2010). Reconstruction of the orientation distribution function in single- and multiple-shell q-ball imaging within constant solid angle. Magnetic Resonance in Medicine, 64(2), 554-566. doi:DOI: 10.1002/mrm.22365 .. [Descoteaux2008] Descoteaux, M. (2008). PhD Thesis: High Angular Resolution Diffusion MRI: from Local Estimation to Segmentation and Tractography. ftp://ftp-sop.inria.fr/athena/Publications/PhDs/descoteaux_thesis.pdf """ lower = 4 * np.pi * np.sqrt(np.prod(self.evals, -1)) projection = np.dot(sphere.vertices, self.evecs) with warnings.catch_warnings(): warnings.simplefilter("ignore") projection /= np.sqrt(self.evals) odf = (vector_norm(projection) ** -3) / lower # Zero evals are non-physical, we replace nans with zeros any_zero = (self.evals == 0).any(-1) odf = np.where(any_zero, 0, odf) # Move odf to be on the last dimension odf = np.rollaxis(odf, 0, odf.ndim) return odf def adc(self, sphere): r""" Calculate the apparent diffusion coefficient (ADC) in each direction on the sphere for each voxel in the data Parameters ---------- sphere : Sphere class instance Returns ------- adc : ndarray The estimates of the apparent diffusion coefficient in every direction on the input sphere Notes ----- The calculation of ADC, relies on the following relationship: .. math :: ADC = \vec{b} Q \vec{b}^T Where Q is the quadratic form of the tensor. """ return apparent_diffusion_coef(self.quadratic_form, sphere) def predict(self, gtab, S0=1): r""" Given a model fit, predict the signal on the vertices of a sphere Parameters ---------- gtab : a GradientTable class instance This encodes the directions for which a prediction is made S0 : float array The mean non-diffusion weighted signal in each voxel. Default: 1 in all voxels. Notes ----- The predicted signal is given by: .. math :: S(\theta, b) = S_0 * e^{-b ADC} Where: .. math :: ADC = \theta Q \theta^T $\theta$ is a unit vector pointing at any direction on the sphere for which a signal is to be predicted and $b$ is the b value provided in the GradientTable input for that direction """ return tensor_prediction(self.model_params[..., 0:12], gtab, S0=S0) def iter_fit_tensor(step=1e4): """Wrap a fit_tensor func and iterate over chunks of data with given length Splits data into a number of chunks of specified size and iterates the decorated fit_tensor function over them. This is useful to counteract the temporary but significant memory usage increase in fit_tensor functions that use vectorized operations and need to store large temporary arrays for their vectorized operations. Parameters ---------- step : int The chunk size as a number of voxels. """ def iter_decorator(fit_tensor): """Actual iter decorator returned by iter_fit_tensor dec factory Parameters ---------- fit_tensor : callable A tensor fitting callable (most likely a function). The callable has to have the signature: fit_method(design_matrix, data, *args, **kwargs) """ @functools.wraps(fit_tensor) def wrapped_fit_tensor(design_matrix, data, step=step, *args, **kwargs): """Iterate fit_tensor function over the data chunks Parameters ---------- design_matrix : array (g, 7) Design matrix holding the covariants used to solve for the regression coefficients. data : array ([X, Y, Z, ...], g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. step : int The chunk size as a number of voxels. Overrides `step` value of `iter_fit_tensor`. args : {list,tuple} Any extra optional positional arguments passed to `fit_tensor`. kwargs : dict Any extra optional keyword arguments passed to `fit_tensor`. """ shape = data.shape[:-1] size = np.prod(shape) step = int(step) or size if step >= size: return fit_tensor(design_matrix, data, *args, **kwargs) data = data.reshape(-1, data.shape[-1]) dtiparams = np.empty((size, 12), dtype=np.float64) for i in range(0, size, step): dtiparams[i:i+step] = fit_tensor(design_matrix, data[i:i+step], *args, **kwargs) return dtiparams.reshape(shape + (12, )) return wrapped_fit_tensor return iter_decorator @iter_fit_tensor() def wls_fit_tensor(design_matrix, data): r""" Computes weighted least squares (WLS) fit to calculate self-diffusion tensor using a linear regression model [1]_. Parameters ---------- design_matrix : array (g, 7) Design matrix holding the covariants used to solve for the regression coefficients. data : array ([X, Y, Z, ...], g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. Returns ------- eigvals : array (..., 3) Eigenvalues from eigen decomposition of the tensor. eigvecs : array (..., 3, 3) Associated eigenvectors from eigen decomposition of the tensor. Eigenvectors are columnar (e.g. eigvecs[:,j] is associated with eigvals[j]) See Also -------- decompose_tensor Notes ----- In Chung, et al. 2006, the regression of the WLS fit needed an unbiased preliminary estimate of the weights and therefore the ordinary least squares (OLS) estimates were used. A "two pass" method was implemented: 1. calculate OLS estimates of the data 2. apply the OLS estimates as weights to the WLS fit of the data This ensured heteroscadasticity could be properly modeled for various types of bootstrap resampling (namely residual bootstrap). .. math:: y = \mathrm{data} \\ X = \mathrm{design matrix} \\ \hat{\beta}_\mathrm{WLS} = \mathrm{desired regression coefficients (e.g. tensor)}\\ \\ \hat{\beta}_\mathrm{WLS} = (X^T W X)^{-1} X^T W y \\ \\ W = \mathrm{diag}((X \hat{\beta}_\mathrm{OLS})^2), \mathrm{where} \hat{\beta}_\mathrm{OLS} = (X^T X)^{-1} X^T y References ---------- .. [1] Chung, SW., Lu, Y., Henry, R.G., 2006. Comparison of bootstrap approaches for estimation of uncertainties of DTI parameters. NeuroImage 33, 531-541. """ tol = 1e-6 data = np.asarray(data) ols_fit = _ols_fit_matrix(design_matrix) log_s = np.log(data) w = np.exp(np.einsum('...ij,...j', ols_fit, log_s)) return eig_from_lo_tri( np.einsum('...ij,...j', pinv(design_matrix * w[..., None]), w * log_s), min_diffusivity=tol / -design_matrix.min(), ) @iter_fit_tensor() def ols_fit_tensor(design_matrix, data): r""" Computes ordinary least squares (OLS) fit to calculate self-diffusion tensor using a linear regression model [1]_. Parameters ---------- design_matrix : array (g, 7) Design matrix holding the covariants used to solve for the regression coefficients. data : array ([X, Y, Z, ...], g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. Returns ------- eigvals : array (..., 3) Eigenvalues from eigen decomposition of the tensor. eigvecs : array (..., 3, 3) Associated eigenvectors from eigen decomposition of the tensor. Eigenvectors are columnar (e.g. eigvecs[:,j] is associated with eigvals[j]) See Also -------- WLS_fit_tensor, decompose_tensor, design_matrix Notes ----- .. math:: y = \mathrm{data} \\ X = \mathrm{design matrix} \\ \hat{\beta}_\mathrm{OLS} = (X^T X)^{-1} X^T y References ---------- .. [1] Chung, SW., Lu, Y., Henry, R.G., 2006. Comparison of bootstrap approaches for estimation of uncertainties of DTI parameters. NeuroImage 33, 531-541. """ tol = 1e-6 data = np.asarray(data) return eig_from_lo_tri( np.einsum('...ij,...j', np.linalg.pinv(design_matrix), np.log(data)), min_diffusivity=tol / -design_matrix.min(), ) def _ols_fit_matrix(design_matrix): """ Helper function to calculate the ordinary least squares (OLS) fit as a matrix multiplication. Mainly used to calculate WLS weights. Can be used to calculate regression coefficients in OLS but not recommended. See Also: --------- wls_fit_tensor, ols_fit_tensor Example: -------- ols_fit = _ols_fit_matrix(design_mat) ols_data = np.dot(ols_fit, data) """ U, S, V = np.linalg.svd(design_matrix, False) return np.dot(U, U.T) def _nlls_err_func(tensor, design_matrix, data, weighting=None, sigma=None): """ Error function for the non-linear least-squares fit of the tensor. Parameters ---------- tensor : array (3,3) The 3-by-3 tensor matrix design_matrix : array The design matrix data : array The voxel signal in all gradient directions weighting : str (optional). Whether to use the Geman McClure weighting criterion (see [1]_ for details) sigma : float or float array (optional) If 'sigma' weighting is used, we will weight the error function according to the background noise estimated either in aggregate over all directions (when a float is provided), or to an estimate of the noise in each diffusion-weighting direction (if an array is provided). If 'gmm', the Geman-Mclure M-estimator is used for weighting (see Notes). Notes ----- The GemanMcClure M-estimator is described as follows [1]_ (page 1089): "The scale factor C affects the shape of the GMM [Geman-McClure M-estimator] weighting function and represents the expected spread of the residuals (i.e., the SD of the residuals) due to Gaussian distributed noise. The scale factor C can be estimated by many robust scale estimators. We used the median absolute deviation (MAD) estimator because it is very robust to outliers having a 50% breakdown point (6,7). The explicit formula for C using the MAD estimator is: .. math :: C = 1.4826 x MAD = 1.4826 x median{|r1-\hat{r}|,... |r_n-\hat{r}|} where $\hat{r} = median{r_1, r_2, ..., r_3}$ and n is the number of data points. The multiplicative constant 1.4826 makes this an approximately unbiased estimate of scale when the error model is Gaussian." References ---------- [1] Chang, L-C, Jones, DK and Pierpaoli, C (2005). RESTORE: robust estimation of tensors by outlier rejection. MRM, 53: 1088-95. """ # This is the predicted signal given the params: y = np.exp(np.dot(design_matrix, tensor)) # Compute the residuals residuals = data - y # If we don't want to weight the residuals, we are basically done: if weighting is None: # And we return the SSE: return residuals se = residuals ** 2 # If the user provided a sigma (e.g 1.5267 * std(background_noise), as # suggested by Chang et al.) we will use it: if weighting == 'sigma': if sigma is None: e_s = "Must provide sigma value as input to use this weighting" e_s += " method" raise ValueError(e_s) w = 1/(sigma**2) elif weighting == 'gmm': # We use the Geman McClure M-estimator to compute the weights on the # residuals: C = 1.4826 * np.median(np.abs(residuals - np.median(residuals))) with warnings.catch_warnings(): warnings.simplefilter("ignore") w = 1/(se + C**2) # The weights are normalized to the mean weight (see p. 1089): w = w/np.mean(w) # Return the weighted residuals: with warnings.catch_warnings(): warnings.simplefilter("ignore") return np.sqrt(w * se) def _nlls_jacobian_func(tensor, design_matrix, data, *arg, **kwargs): """The Jacobian is the first derivative of the error function [1]_. Notes ----- This is an implementation of equation 14 in [1]_. References ---------- [1] Koay, CG, Chang, L-C, Carew, JD, Pierpaoli, C, Basser PJ (2006). A unifying theoretical and algorithmic framework for least squares methods of estimation in diffusion tensor imaging. MRM 182, 115-25. """ pred = np.exp(np.dot(design_matrix, tensor)) return -pred[:, None] * design_matrix def nlls_fit_tensor(design_matrix, data, weighting=None, sigma=None, jac=True): """ Fit the tensor params using non-linear least-squares. Parameters ---------- design_matrix : array (g, 7) Design matrix holding the covariants used to solve for the regression coefficients. data : array ([X, Y, Z, ...], g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. weighting: str the weighting scheme to use in considering the squared-error. Default behavior is to use uniform weighting. Other options: 'sigma' 'gmm' sigma: float If the 'sigma' weighting scheme is used, a value of sigma needs to be provided here. According to [Chang2005]_, a good value to use is 1.5267 * std(background_noise), where background_noise is estimated from some part of the image known to contain no signal (only noise). jac : bool Use the Jacobian? Default: True Returns ------- nlls_params: the eigen-values and eigen-vectors of the tensor in each voxel. """ # Flatten for the iteration over voxels: flat_data = data.reshape((-1, data.shape[-1])) # Use the OLS method parameters as the starting point for the optimization: inv_design = np.linalg.pinv(design_matrix) log_s = np.log(flat_data) D = np.dot(inv_design, log_s.T).T # Flatten for the iteration over voxels: ols_params = np.reshape(D, (-1, D.shape[-1])) # 12 parameters per voxel (evals + evecs): dti_params = np.empty((flat_data.shape[0], 12)) for vox in range(flat_data.shape[0]): if np.all(flat_data[vox] == 0): raise ValueError("The data in this voxel contains only zeros") start_params = ols_params[vox] # Do the optimization in this voxel: if jac: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(design_matrix, flat_data[vox], weighting, sigma), Dfun=_nlls_jacobian_func) else: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(design_matrix, flat_data[vox], weighting, sigma)) # The parameters are the evals and the evecs: try: evals, evecs = decompose_tensor( from_lower_triangular(this_tensor[:6])) dti_params[vox, :3] = evals dti_params[vox, 3:] = evecs.ravel() # If leastsq failed to converge and produced nans, we'll resort to the # OLS solution in this voxel: except np.linalg.LinAlgError: evals, evecs = decompose_tensor( from_lower_triangular(start_params[:6])) dti_params[vox, :3] = evals dti_params[vox, 3:] = evecs.ravel() dti_params.shape = data.shape[:-1] + (12,) return dti_params def restore_fit_tensor(design_matrix, data, sigma=None, jac=True): """ Use the RESTORE algorithm [Chang2005]_ to calculate a robust tensor fit Parameters ---------- design_matrix : array of shape (g, 7) Design matrix holding the covariants used to solve for the regression coefficients. data : array of shape ([X, Y, Z, n_directions], g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. sigma : float An estimate of the variance. [Chang2005]_ recommend to use 1.5267 * std(background_noise), where background_noise is estimated from some part of the image known to contain no signal (only noise). jac : bool, optional Whether to use the Jacobian of the tensor to speed the non-linear optimization procedure used to fit the tensor paramters (see also :func:`nlls_fit_tensor`). Default: True Returns ------- restore_params : an estimate of the tensor parameters in each voxel. Note ---- Chang, L-C, Jones, DK and Pierpaoli, C (2005). RESTORE: robust estimation of tensors by outlier rejection. MRM, 53: 1088-95. """ # Flatten for the iteration over voxels: flat_data = data.reshape((-1, data.shape[-1])) # Use the OLS method parameters as the starting point for the optimization: inv_design = np.linalg.pinv(design_matrix) log_s = np.log(flat_data) D = np.dot(inv_design, log_s.T).T ols_params = np.reshape(D, (-1, D.shape[-1])) # 12 parameters per voxel (evals + evecs): dti_params = np.empty((flat_data.shape[0], 12)) for vox in range(flat_data.shape[0]): if np.all(flat_data[vox] == 0): raise ValueError("The data in this voxel contains only zeros") start_params = ols_params[vox] # Do nlls using sigma weighting in this voxel: if jac: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(design_matrix, flat_data[vox], 'sigma', sigma), Dfun=_nlls_jacobian_func) else: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(design_matrix, flat_data[vox], 'sigma', sigma)) # Get the residuals: pred_sig = np.exp(np.dot(design_matrix, this_tensor)) residuals = flat_data[vox] - pred_sig # If any of the residuals are outliers (using 3 sigma as a criterion # following Chang et al., e.g page 1089): if np.any(np.abs(residuals) > 3 * sigma): # Do nlls with GMM-weighting: if jac: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(design_matrix, flat_data[vox], 'gmm'), Dfun=_nlls_jacobian_func) else: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(design_matrix, flat_data[vox], 'gmm')) # How are you doin' on those residuals? pred_sig = np.exp(np.dot(design_matrix, this_tensor)) residuals = flat_data[vox] - pred_sig if np.any(np.abs(residuals) > 3 * sigma): # If you still have outliers, refit without those outliers: non_outlier_idx = np.where(np.abs(residuals) <= 3 * sigma) clean_design = design_matrix[non_outlier_idx] clean_sig = flat_data[vox][non_outlier_idx] if np.iterable(sigma): this_sigma = sigma[non_outlier_idx] else: this_sigma = sigma if jac: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(clean_design, clean_sig, 'sigma', this_sigma), Dfun=_nlls_jacobian_func) else: this_tensor, status = opt.leastsq(_nlls_err_func, start_params, args=(clean_design, clean_sig, 'sigma', this_sigma)) # The parameters are the evals and the evecs: try: evals, evecs = decompose_tensor( from_lower_triangular(this_tensor[:6])) dti_params[vox, :3] = evals dti_params[vox, 3:] = evecs.ravel() # If leastsq failed to converge and produced nans, we'll resort to the # OLS solution in this voxel: except np.linalg.LinAlgError: evals, evecs = decompose_tensor( from_lower_triangular(start_params[:6])) dti_params[vox, :3] = evals dti_params[vox, 3:] = evecs.ravel() dti_params.shape = data.shape[:-1] + (12,) restore_params = dti_params return restore_params _lt_indices = np.array([[0, 1, 3], [1, 2, 4], [3, 4, 5]]) def from_lower_triangular(D): """ Returns a tensor given the six unique tensor elements Given the six unique tensor elments (in the order: Dxx, Dxy, Dyy, Dxz, Dyz, Dzz) returns a 3 by 3 tensor. All elements after the sixth are ignored. Parameters ----------- D : array_like, (..., >6) Unique elements of the tensors Returns -------- tensor : ndarray (..., 3, 3) 3 by 3 tensors """ return D[..., _lt_indices] _lt_rows = np.array([0, 1, 1, 2, 2, 2]) _lt_cols = np.array([0, 0, 1, 0, 1, 2]) def lower_triangular(tensor, b0=None): """ Returns the six lower triangular values of the tensor and a dummy variable if b0 is not None Parameters ---------- tensor : array_like (..., 3, 3) a collection of 3, 3 diffusion tensors b0 : float if b0 is not none log(b0) is returned as the dummy variable Returns ------- D : ndarray If b0 is none, then the shape will be (..., 6) otherwise (..., 7) """ if tensor.shape[-2:] != (3, 3): raise ValueError("Diffusion tensors should be (..., 3, 3)") if b0 is None: return tensor[..., _lt_rows, _lt_cols] else: D = np.empty(tensor.shape[:-2] + (7,), dtype=tensor.dtype) D[..., 6] = -np.log(b0) D[..., :6] = tensor[..., _lt_rows, _lt_cols] return D def decompose_tensor(tensor, min_diffusivity=0): """ Returns eigenvalues and eigenvectors given a diffusion tensor Computes tensor eigen decomposition to calculate eigenvalues and eigenvectors (Basser et al., 1994a). Parameters ---------- tensor : array (..., 3, 3) Hermitian matrix representing a diffusion tensor. min_diffusivity : float Because negative eigenvalues are not physical and small eigenvalues, much smaller than the diffusion weighting, cause quite a lot of noise in metrics such as fa, diffusivity values smaller than `min_diffusivity` are replaced with `min_diffusivity`. Returns ------- eigvals : array (..., 3) Eigenvalues from eigen decomposition of the tensor. Negative eigenvalues are replaced by zero. Sorted from largest to smallest. eigvecs : array (..., 3, 3) Associated eigenvectors from eigen decomposition of the tensor. Eigenvectors are columnar (e.g. eigvecs[..., :, j] is associated with eigvals[..., j]) """ #outputs multiplicity as well so need to unique eigenvals, eigenvecs = eigh(tensor) #need to sort the eigenvalues and associated eigenvectors if eigenvals.ndim == 1: # this is a lot faster when dealing with a single voxel order = eigenvals.argsort()[::-1] eigenvecs = eigenvecs[:, order] eigenvals = eigenvals[order] else: # temporarily flatten eigenvals and eigenvecs to make sorting easier shape = eigenvals.shape[:-1] eigenvals = eigenvals.reshape(-1, 3) eigenvecs = eigenvecs.reshape(-1, 3, 3) size = eigenvals.shape[0] order = eigenvals.argsort()[:, ::-1] xi, yi = np.ogrid[:size, :3, :3][:2] eigenvecs = eigenvecs[xi, yi, order[:, None, :]] xi = np.ogrid[:size, :3][0] eigenvals = eigenvals[xi, order] eigenvecs = eigenvecs.reshape(shape + (3, 3)) eigenvals = eigenvals.reshape(shape + (3, )) eigenvals = eigenvals.clip(min=min_diffusivity) # eigenvecs: each vector is columnar return eigenvals, eigenvecs def design_matrix(gtab, dtype=None): """ Constructs design matrix for DTI weighted least squares or least squares fitting. (Basser et al., 1994a) Parameters ---------- gtab : A GradientTable class instance dtype : string Parameter to control the dtype of returned designed matrix Returns ------- design_matrix : array (g,7) Design matrix or B matrix assuming Gaussian distributed tensor model design_matrix[j, :] = (Bxx, Byy, Bzz, Bxy, Bxz, Byz, dummy) """ B = np.zeros((gtab.gradients.shape[0], 7)) B[:, 0] = gtab.bvecs[:, 0] * gtab.bvecs[:, 0] * 1. * gtab.bvals # Bxx B[:, 1] = gtab.bvecs[:, 0] * gtab.bvecs[:, 1] * 2. * gtab.bvals # Bxy B[:, 2] = gtab.bvecs[:, 1] * gtab.bvecs[:, 1] * 1. * gtab.bvals # Byy B[:, 3] = gtab.bvecs[:, 0] * gtab.bvecs[:, 2] * 2. * gtab.bvals # Bxz B[:, 4] = gtab.bvecs[:, 1] * gtab.bvecs[:, 2] * 2. * gtab.bvals # Byz B[:, 5] = gtab.bvecs[:, 2] * gtab.bvecs[:, 2] * 1. * gtab.bvals # Bzz B[:, 6] = np.ones(gtab.gradients.shape[0]) return -B def quantize_evecs(evecs, odf_vertices=None): """ Find the closest orientation of an evenly distributed sphere Parameters ---------- evecs : ndarray odf_vertices : None or ndarray If None, then set vertices from symmetric362 sphere. Otherwise use passed ndarray as vertices Returns ------- IN : ndarray """ max_evecs = evecs[..., :, 0] if odf_vertices is None: odf_vertices = get_sphere('symmetric362').vertices tup = max_evecs.shape[:-1] mec = max_evecs.reshape(np.prod(np.array(tup)), 3) IN = np.array([np.argmin(np.dot(odf_vertices, m)) for m in mec]) IN = IN.reshape(tup) return IN def eig_from_lo_tri(data, min_diffusivity=0): """ Calculates tensor eigenvalues/eigenvectors from an array containing the lower diagonal form of the six unique tensor elements. Parameters ---------- data : array_like (..., 6) diffusion tensors elements stored in lower triangular order min_diffusivity : float See decompose_tensor() Returns ------- dti_params : array (..., 12) Eigen-values and eigen-vectors of the same array. """ data = np.asarray(data) evals, evecs = decompose_tensor(from_lower_triangular(data), min_diffusivity=min_diffusivity) dti_params = np.concatenate((evals[..., None, :], evecs), axis=-2) return dti_params.reshape(data.shape[:-1] + (12, )) common_fit_methods = {'WLS': wls_fit_tensor, 'LS': ols_fit_tensor, 'OLS': ols_fit_tensor, 'NLLS': nlls_fit_tensor, 'RT': restore_fit_tensor, 'restore': restore_fit_tensor, 'RESTORE': restore_fit_tensor } dipy-0.10.1/dipy/reconst/gqi.py000066400000000000000000000212261263041327500163200ustar00rootroot00000000000000""" Classes and functions for generalized q-sampling """ import numpy as np from .odf import OdfModel, OdfFit, gfa from .cache import Cache import warnings from .multi_voxel import multi_voxel_fit from .recspeed import local_maxima, remove_similar_vertices class GeneralizedQSamplingModel(OdfModel, Cache): def __init__(self, gtab, method='gqi2', sampling_length=1.2, normalize_peaks=False): r""" Generalized Q-Sampling Imaging [1]_ This model has the same assumptions as the DSI method i.e. Cartesian grid sampling in q-space and fast gradient switching. Implements equations 2.14 from [2]_ for standard GQI and equation 2.16 from [2]_ for GQI2. You can think of GQI2 as an analytical solution of the DSI ODF. Parameters ---------- gtab : object, GradientTable method : str, 'standard' or 'gqi2' sampling_length : float, diffusion sampling length (lambda in eq. 2.14 and 2.16) References ---------- .. [1] Yeh F-C et. al, "Generalized Q-Sampling Imaging", IEEE TMI, 2010 .. [2] Garyfallidis E, "Towards an accurate brain tractography", PhD thesis, University of Cambridge, 2012. Notes ----- As of version 0.9, range of the sampling length in GQI2 has changed to match the same scale used in the 'standard' method [1]_. This means that the value of `sampling_length` should be approximately 1 - 1.3 (see [1]_, pg. 1628). Examples -------- Here we create an example where we provide the data, a gradient table and a reconstruction sphere and calculate the ODF for the first voxel in the data. >>> from dipy.data import dsi_voxels >>> data, gtab = dsi_voxels() >>> from dipy.core.subdivide_octahedron import create_unit_sphere >>> sphere = create_unit_sphere(5) >>> from dipy.reconst.gqi import GeneralizedQSamplingModel >>> gq = GeneralizedQSamplingModel(gtab, 'gqi2', 1.1) >>> voxel_signal = data[0, 0, 0] >>> odf = gq.fit(voxel_signal).odf(sphere) See Also -------- dipy.reconst.dsi.DiffusionSpectrumModel """ OdfModel.__init__(self, gtab) self.method = method self.Lambda = sampling_length self.normalize_peaks = normalize_peaks # 0.01506 = 6*D where D is the free water diffusion coefficient # l_values sqrt(6 D tau) D free water diffusion coefficient and # tau included in the b-value scaling = np.sqrt(self.gtab.bvals * 0.01506) tmp = np.tile(scaling, (3, 1)) gradsT = self.gtab.bvecs.T b_vector = gradsT * tmp # element-wise product self.b_vector = b_vector.T @multi_voxel_fit def fit(self, data): return GeneralizedQSamplingFit(self, data) class GeneralizedQSamplingFit(OdfFit): def __init__(self, model, data): """ Calculates PDF and ODF for a single voxel Parameters ---------- model : object, DiffusionSpectrumModel data : 1d ndarray, signal values """ OdfFit.__init__(self, model, data) self._gfa = None self.npeaks = 5 self._peak_values = None self._peak_indices = None self._qa = None def odf(self, sphere): """ Calculates the discrete ODF for a given discrete sphere. """ self.gqi_vector = self.model.cache_get('gqi_vector', key=sphere) if self.gqi_vector is None: if self.model.method == 'gqi2': H=squared_radial_component #print self.gqi_vector.shape self.gqi_vector = np.real(H(np.dot(self.model.b_vector, sphere.vertices.T) * self.model.Lambda)) if self.model.method == 'standard': self.gqi_vector = np.real(np.sinc(np.dot(self.model.b_vector, sphere.vertices.T) * self.model.Lambda / np.pi)) self.model.cache_set('gqi_vector', sphere, self.gqi_vector) return np.dot(self.data, self.gqi_vector) def normalize_qa(qa, max_qa=None): """ Normalize quantitative anisotropy. Used mostly with GQI rather than GQI2. Parameters ---------- qa : array, shape (X, Y, Z, N) where N is the maximum number of peaks stored max_qa : float, maximum qa value. Usually found in the CSF (corticospinal fluid). Returns ------- nqa : array, shape (x, Y, Z, N) normalized quantitative anisotropy Notes ----- Normalized quantitative anisotropy has the very useful property to be very small near gray matter and background areas. Therefore, it can be used to mask out white matter areas. """ if max_qa is None: return qa / qa.max() return qa / max_qa def squared_radial_component(x, tol=0.01): """ Part of the GQI2 integral Eq.8 in the referenced paper by Yeh et al. 2010 """ with warnings.catch_warnings(): warnings.simplefilter("ignore") result = (2 * x * np.cos(x) + (x * x - 2) * np.sin(x)) / (x ** 3) x_near_zero = (x < tol) & (x > -tol) return np.where(x_near_zero, 1./3, result) def npa(self, odf, width=5): """ non-parametric anisotropy Nimmo-Smith et. al ISMRM 2011 """ #odf = self.odf(s) t0, t1, t2 = triple_odf_maxima(self.odf_vertices, odf, width) psi0 = t0[1] ** 2 psi1 = t1[1] ** 2 psi2 = t2[1] ** 2 npa = np.sqrt((psi0 - psi1) ** 2 + (psi1 - psi2) ** 2 + (psi2 - psi0) ** 2) / np.sqrt(2 * (psi0 ** 2 + psi1 ** 2 + psi2 ** 2)) #print 'tom >>>> ',t0,t1,t2,npa return t0,t1,t2,npa def equatorial_zone_vertices(vertices, pole, width=5): """ finds the 'vertices' in the equatorial zone conjugate to 'pole' with width half 'width' degrees """ return [i for i,v in enumerate(vertices) if np.abs(np.dot(v,pole)) < np.abs(np.sin(np.pi*width/180))] def polar_zone_vertices(vertices, pole, width=5): """ finds the 'vertices' in the equatorial band around the 'pole' of radius 'width' degrees """ return [i for i,v in enumerate(vertices) if np.abs(np.dot(v,pole)) > np.abs(np.cos(np.pi*width/180))] def upper_hemi_map(v): """ maps a 3-vector into the z-upper hemisphere """ return np.sign(v[2])*v def equatorial_maximum(vertices, odf, pole, width): eqvert = equatorial_zone_vertices(vertices, pole, width) #need to test for whether eqvert is empty or not if len(eqvert) == 0: print('empty equatorial band at %s pole with width %f' % (np.array_str(pole), width)) return None, None eqvals = [odf[i] for i in eqvert] eqargmax = np.argmax(eqvals) eqvertmax = eqvert[eqargmax] eqvalmax = eqvals[eqargmax] return eqvertmax, eqvalmax def patch_vertices(vertices,pole, width): """ find 'vertices' within the cone of 'width' degrees around 'pole' """ return [i for i,v in enumerate(vertices) if np.abs(np.dot(v,pole)) > np.abs(np.cos(np.pi*width/180))] def patch_maximum(vertices, odf, pole, width): eqvert = patch_vertices(vertices, pole, width) #need to test for whether eqvert is empty or not if len(eqvert) == 0: print('empty cone around pole %s with with width %f' % (np.array_str(pole), width)) return np.Null, np.Null eqvals = [odf[i] for i in eqvert] eqargmax = np.argmax(eqvals) eqvertmax = eqvert[eqargmax] eqvalmax = eqvals[eqargmax] return eqvertmax, eqvalmax def odf_sum(odf): return np.sum(odf) def patch_sum(vertices, odf, pole, width): eqvert = patch_vertices(vertices, pole, width) #need to test for whether eqvert is empty or not if len(eqvert) == 0: print('empty cone around pole %s with with width %f' % (np.array_str(pole), width)) return np.Null return np.sum([odf[i] for i in eqvert]) def triple_odf_maxima(vertices, odf, width): indmax1 = np.argmax([odf[i] for i,v in enumerate(vertices)]) odfmax1 = odf[indmax1] pole = vertices[indmax1] eqvert = equatorial_zone_vertices(vertices, pole, width) indmax2, odfmax2 = equatorial_maximum(vertices,\ odf, pole, width) indmax3 = eqvert[np.argmin([np.abs(np.dot(vertices[indmax2],vertices[p])) for p in eqvert])] odfmax3 = odf[indmax3] """ cross12 = np.cross(vertices[indmax1],vertices[indmax2]) cross12 = cross12/np.sqrt(np.sum(cross12**2)) indmax3, odfmax3 = patch_maximum(vertices, odf, cross12, 2*width) """ return [(indmax1, odfmax1),(indmax2, odfmax2),(indmax3, odfmax3)] dipy-0.10.1/dipy/reconst/interpolate.py000066400000000000000000000035421263041327500200670ustar00rootroot00000000000000"""Interpolators wrap arrays to allow the array to be indexed in continuous coordinates This module uses the trackvis coordinate system, for more information about this coordinate system please see dipy.tracking.utils The following modules also use this coordinate system: dipy.tracking.utils dipy.tracking.integration dipy.reconst.interpolate """ from numpy import array from dipy.reconst.recspeed import trilinear_interp class OutsideImage(Exception): pass class Interpolator(object): """Class to be subclassed by different interpolator types""" def __init__(self, data, voxel_size): self.data = data self.voxel_size = array(voxel_size, dtype=float, copy=True) class NearestNeighborInterpolator(Interpolator): """Interpolates data using nearest neighbor interpolation""" def __getitem__(self, index): index = tuple(index / self.voxel_size) if min(index) < 0: raise OutsideImage('Negative Index') try: return self.data[tuple(array(index).astype(int))] except IndexError: raise OutsideImage class TriLinearInterpolator(Interpolator): """Interpolates data using trilinear interpolation interpolate 4d diffusion volume using 3 indices, ie data[x, y, z] """ def __init__(self, data, voxel_size): super(TriLinearInterpolator, self).__init__(data, voxel_size) if self.voxel_size.shape != (3,) or self.data.ndim != 4: raise ValueError("Data should be 4d volume of diffusion data and " "voxel_size should have 3 values, ie the size " "of a 3d voxel") def __getitem__(self, index): index = array(index, copy=False, dtype="float") try: return trilinear_interp(self.data, index, self.voxel_size) except IndexError: raise OutsideImage dipy-0.10.1/dipy/reconst/mapmri.py000066400000000000000000000556551263041327500170420ustar00rootroot00000000000000import numpy as np from dipy.reconst.multi_voxel import multi_voxel_fit from dipy.reconst.base import ReconstModel, ReconstFit from scipy.special import hermite, gamma from scipy.misc import factorial, factorial2 import dipy.reconst.dti as dti from warnings import warn from dipy.core.gradients import gradient_table from ..utils.optpkg import optional_package cvxopt, have_cvxopt, _ = optional_package("cvxopt") class MapmriModel(ReconstModel): r"""Mean Apparent Propagator MRI (MAPMRI) [1]_ of the diffusion signal. The main idea is to model the diffusion signal as a linear combination of the continuous functions presented in [2]_ but extending it in three dimensions. The main difference with the SHORE proposed in [3]_ is that MAPMRI 3D extension is provided using a set of three basis functions for the radial part, one for the signal along x, one for y and one for z, while [3]_ uses one basis function to model the radial part and real Spherical Harmonics to model the angular part. From the MAPMRI coefficients is possible to use the analytical formulae to estimate the ODF. References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. .. [2] Ozarslan E. et. al, "Simple harmonic oscillator based reconstruction and estimation for one-dimensional q-space magnetic resonance 1D-SHORE)", eapoc Intl Soc Mag Reson Med, vol. 16, p. 35., 2008. .. [3] Merlet S. et. al, "Continuous diffusion signal, EAP and ODF estimation via Compressive Sensing in diffusion MRI", Medical Image Analysis, 2013. """ def __init__(self, gtab, radial_order=4, lambd=1e-16, eap_cons=False, anisotropic_scaling=True, eigenvalue_threshold=1e-04, bmax_threshold=2000): r""" Analytical and continuous modeling of the diffusion signal with respect to the MAPMRI basis [1]_. The main idea is to model the diffusion signal as a linear combination of the continuous functions presented in [2]_ but extending it in three dimensions. The main difference with the SHORE proposed in [3]_ is that MAPMRI 3D extension is provided using a set of three basis functions for the radial part, one for the signal along x, one for y and one for z, while [3]_ uses one basis function to model the radial part and real Spherical Harmonics to model the angular part. From the MAPMRI coefficients is possible to use the analytical formulae to estimate the ODF. Parameters ---------- gtab : GradientTable, gradient directions and bvalues container class radial_order : unsigned int, an even integer that represent the order of the basis lambd : float, radial regularisation constant eap_cons : bool, Constrain the propagator to be positive. anisotropic_scaling : bool, If false, force the basis function to be identical in the three dimensions (SHORE like). eigenvalue_threshold : float, set the minimum of the tensor eigenvalues in order to avoid stability problem bmax_threshold : float, set the maximum b-value for the tensor estimation References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. .. [2] Ozarslan E. et. al, "Simple harmonic oscillator based reconstruction and estimation for one-dimensional q-space magnetic resonance 1D-SHORE)", eapoc Intl Soc Mag Reson Med, vol. 16, p. 35., 2008. .. [3] Ozarslan E. et. al, "Simple harmonic oscillator based reconstruction and estimation for three-dimensional q-space mri", ISMRM 2009. Examples -------- In this example, where the data, gradient table and sphere tessellation used for reconstruction are provided, we model the diffusion signal with respect to the MAPMRI model and compute the analytical ODF. >>> from dipy.core.gradients import gradient_table >>> from dipy.data import dsi_voxels, get_sphere >>> data, gtab = dsi_voxels() >>> sphere = get_sphere('symmetric724') >>> from dipy.sims.voxel import SticksAndBall >>> data, golden_directions = SticksAndBall(gtab, d=0.0015, S0=1, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) >>> from dipy.reconst.mapmri import MapmriModel >>> radial_order = 4 >>> map_model = MapmriModel(gtab, radial_order=radial_order) >>> mapfit = map_model.fit(data) >>> odf= mapfit.odf(sphere) """ self.bvals = gtab.bvals self.bvecs = gtab.bvecs self.gtab = gtab self.radial_order = radial_order self.lambd = lambd self.eap_cons = eap_cons if self.eap_cons: if not have_cvxopt: raise ValueError( 'CVXOPT package needed to enforce constraints') import cvxopt.solvers self.anisotropic_scaling = anisotropic_scaling if (gtab.big_delta is None) or (gtab.small_delta is None): self.tau = 1 / (4 * np.pi ** 2) else: self.tau = gtab.big_delta - gtab.small_delta / 3.0 self.eigenvalue_threshold = eigenvalue_threshold self.ind = self.gtab.bvals <= bmax_threshold gtab_dti = gradient_table( self.gtab.bvals[self.ind], self.gtab.bvecs[self.ind, :]) self.tenmodel = dti.TensorModel(gtab_dti) self.ind_mat = mapmri_index_matrix(self.radial_order) self.Bm = b_mat(self.ind_mat) @multi_voxel_fit def fit(self, data): tenfit = self.tenmodel.fit(data[self.ind]) evals = tenfit.evals R = tenfit.evecs evals = np.clip(evals, self.eigenvalue_threshold, evals.max()) if self.anisotropic_scaling: mu = np.sqrt(evals * 2 * self.tau) else: mumean = np.sqrt(evals.mean() * 2 * self.tau) mu = np.array([mumean, mumean, mumean]) qvals = np.sqrt(self.gtab.bvals / self.tau) / (2 * np.pi) qvecs = np.dot(self.gtab.bvecs, R) q = qvecs * qvals[:, None] M = mapmri_phi_matrix(self.radial_order, mu, q.T) # This is a simple empirical regularization, to be replaced I = np.diag(self.ind_mat.sum(1) ** 2) if self.eap_cons: if not have_cvxopt: raise ValueError( 'CVXOPT package needed to enforce constraints') w_s = "The implementation of MAPMRI depends on CVXOPT " w_s += " (http://cvxopt.org/). This software is licensed " w_s += "under the GPL (see: http://cvxopt.org/copyright.html) " w_s += " and you may be subject to this license when using MAPMRI." warn(w_s) import cvxopt.solvers rmax = 2 * np.sqrt(10 * evals.max() * self.tau) r_index, r_grad = create_rspace(11, rmax) K = mapmri_psi_matrix( self.radial_order, mu, r_grad[0:len(r_grad) / 2, :]) Q = cvxopt.matrix(np.dot(M.T, M) + self.lambd * I) p = cvxopt.matrix(-1 * np.dot(M.T, data)) G = cvxopt.matrix(-1 * K) h = cvxopt.matrix(np.zeros((K.shape[0])), (K.shape[0], 1)) cvxopt.solvers.options['show_progress'] = False sol = cvxopt.solvers.qp(Q, p, G, h) if sol['status'] != 'optimal': warn('Optimization did not find a solution') coef = np.array(sol['x'])[:, 0] else: pseudoInv = np.dot( np.linalg.inv(np.dot(M.T, M) + self.lambd * I), M.T) coef = np.dot(pseudoInv, data) E0 = 0 for i in range(self.ind_mat.shape[0]): E0 = E0 + coef[i] * self.Bm[i] coef = coef / E0 return MapmriFit(self, coef, mu, R, self.ind_mat) class MapmriFit(ReconstFit): def __init__(self, model, mapmri_coef, mu, R, ind_mat): """ Calculates diffusion properties for a single voxel Parameters ---------- model : object, AnalyticalModel mapmri_coef : 1d ndarray, mapmri coefficients mu : array, shape (3,) scale parameters vector for x, y and z R : array, shape (3,3) rotation matrix ind_mat : array, shape (N,3) indices of the basis for x, y and z """ self.model = model self._mapmri_coef = mapmri_coef self.gtab = model.gtab self.radial_order = model.radial_order self.mu = mu self.R = R self.ind_mat = ind_mat @property def mapmri_mu(self): """The MAPMRI scale factors """ return self.mu @property def mapmri_R(self): """The MAPMRI rotation matrix """ return self.R @property def mapmri_coeff(self): """The MAPMRI coefficients """ return self._mapmri_coef def odf(self, sphere, s=0): r""" Calculates the analytical Orientation Distribution Function (ODF) from the signal [1]_ Eq. 32. Parameters ---------- s : unsigned int radial moment of the ODF References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ v_ = sphere.vertices v = np.dot(v_, self.R) I_s = mapmri_odf_matrix(self.radial_order, self.mu, s, v) odf = np.dot(I_s, self._mapmri_coef) return odf def rtpp(self): r""" Calculates the analytical return to the plane probability (RTPP) [1]_. References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ Bm = self.model.Bm rtpp = 0 const = 1 / (np.sqrt(2 * np.pi) * self.mu[0]) for i in range(self.ind_mat.shape[0]): if Bm[i] > 0.0: rtpp += (-1.0) ** (self.ind_mat[i, 0] / 2.0) * self._mapmri_coef[i] * Bm[i] return const * rtpp def rtap(self): r""" Calculates the analytical return to the axis probability (RTAP) [1]_. References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ Bm = self.model.Bm rtap = 0 const = 1 / (2 * np.pi * self.mu[1] * self.mu[2]) for i in range(self.ind_mat.shape[0]): if Bm[i] > 0.0: rtap += (-1.0) ** ( (self.ind_mat[i, 1] + self.ind_mat[i, 2]) / 2.0) * self._mapmri_coef[i] * Bm[i] return const * rtap def rtop(self): r""" Calculates the analytical return to the origin probability (RTOP) [1]_. References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ Bm = self.model.Bm rtop = 0 const = 1 / \ np.sqrt( 8 * np.pi ** 3 * (self.mu[0] ** 2 * self.mu[1] ** 2 * self.mu[2] ** 2)) for i in range(self.ind_mat.shape[0]): if Bm[i] > 0.0: rtop += (-1.0) ** ((self.ind_mat[i, 0] + self.ind_mat[i, 1] + self.ind_mat[ i, 2]) / 2.0) * self._mapmri_coef[i] * Bm[i] return const * rtop def predict(self, gtab, S0=1.0): """ Predict a signal for this MapmriModel class instance given a gradient table. Parameters ---------- gtab : GradientTable, gradient directions and bvalues container class S0 : float or ndarray The non diffusion-weighted signal in every voxel, or across all voxels. Default: 1 """ if (gtab.big_delta is None) or (gtab.small_delta is None): tau = 1 / (4 * np.pi ** 2) else: tau = gtab.big_delta - gtab.small_delta / 3.0 qvals = np.sqrt(gtab.bvals / tau) / (2 * np.pi) qvecs = np.dot(gtab.bvecs, self.R) q = qvecs * qvals[:, None] s_mat = mapmri_phi_matrix(self.radial_order, self.mu, q.T) S_reconst = S0 * np.dot(s_mat, self._mapmri_coef) return S_reconst def mapmri_index_matrix(radial_order): r""" Calculates the indices for the MAPMRI [1]_ basis in x, y and z. Parameters ---------- radial_order : unsigned int radial order of MAPMRI basis Returns ------- index_matrix : array, shape (N,3) ordering of the basis in x, y, z References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ index_matrix = [] for n in range(0, radial_order + 1, 2): for i in range(0, n + 1): for j in range(0, n - i + 1): index_matrix.append([n - i - j, j, i]) return np.array(index_matrix) def b_mat(ind_mat): r""" Calculates the B coefficients from [1]_ Eq. 27. Parameters ---------- index_matrix : array, shape (N,3) ordering of the basis in x, y, z Returns ------- B : array, shape (N,) B coefficients for the basis References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ B = np.zeros(ind_mat.shape[0]) for i in range(ind_mat.shape[0]): n1, n2, n3 = ind_mat[i] K = int(not(n1 % 2) and not(n2 % 2) and not(n3 % 2)) B[i] = K * np.sqrt(factorial(n1) * factorial(n2) * factorial(n3) ) / (factorial2(n1) * factorial2(n2) * factorial2(n3)) return B def mapmri_phi_1d(n, q, mu): r""" One dimensional MAPMRI basis function from [1]_ Eq. 4. Parameters ------- n : unsigned int order of the basis q : array, shape (N,) points in the q-space in which evaluate the basis mu : float scale factor of the basis References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ qn = 2 * np.pi * mu * q H = hermite(n)(qn) i = np.complex(0, 1) f = factorial(n) k = i ** (-n) / np.sqrt(2 ** (n) * f) phi = k * np.exp(- qn ** 2 / 2) * H return phi def mapmri_phi_3d(n, q, mu): r""" Three dimensional MAPMRI basis function from [1]_ Eq. 23. Parameters ---------- n : array, shape (3,) order of the basis function for x, y, z q : array, shape (N,3) points in the q-space in which evaluate the basis mu : array, shape (3,) scale factors of the basis for x, y, z References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ n1, n2, n3 = n qx, qy, qz = q mux, muy, muz = mu phi = mapmri_phi_1d return np.real(phi(n1, qx, mux) * phi(n2, qy, muy) * phi(n3, qz, muz)) def mapmri_phi_matrix(radial_order, mu, q_gradients): r"""Compute the MAPMRI phi matrix for the signal [1]_ Parameters ---------- radial_order : unsigned int, an even integer that represent the order of the basis mu : array, shape (3,) scale factors of the basis for x, y, z q_gradients : array, shape (N,3) points in the q-space in which evaluate the basis References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ ind_mat = mapmri_index_matrix(radial_order) n_elem = ind_mat.shape[0] n_qgrad = q_gradients.shape[1] M = np.zeros((n_qgrad, n_elem)) for j in range(n_elem): M[:, j] = mapmri_phi_3d(ind_mat[j], q_gradients, mu) return M def mapmri_psi_1d(n, x, mu): r""" One dimensional MAPMRI propagator basis function from [1]_ Eq. 10. Parameters ---------- n : unsigned int order of the basis x : array, shape (N,) points in the r-space in which evaluate the basis mu : float scale factor of the basis References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ H = hermite(n)(x / mu) f = factorial(n) k = 1 / (np.sqrt(2 ** (n + 1) * np.pi * f) * mu) psi = k * np.exp(- x ** 2 / (2 * mu ** 2)) * H return psi def mapmri_psi_3d(n, r, mu): r""" Three dimensional MAPMRI propagator basis function from [1]_ Eq. 22. Parameters ---------- n : array, shape (3,) order of the basis function for x, y, z q : array, shape (N,3) points in the q-space in which evaluate the basis mu : array, shape (3,) scale factors of the basis for x, y, z References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ n1, n2, n3 = n x, y, z = r.T mux, muy, muz = mu psi = mapmri_psi_1d return psi(n1, x, mux) * psi(n2, y, muy) * psi(n3, z, muz) def mapmri_psi_matrix(radial_order, mu, rgrad): r"""Compute the MAPMRI psi matrix for the propagator [1]_ Parameters ---------- radial_order : unsigned int, an even integer that represent the order of the basis mu : array, shape (3,) scale factors of the basis for x, y, z rgrad : array, shape (N,3) points in the r-space in which evaluate the EAP References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ ind_mat = mapmri_index_matrix(radial_order) n_elem = ind_mat.shape[0] n_rgrad = rgrad.shape[0] K = np.zeros((n_rgrad, n_elem)) for j in range(n_elem): K[:, j] = mapmri_psi_3d(ind_mat[j], rgrad, mu) return K def mapmri_odf_matrix(radial_order, mu, s, vertices): r"""Compute the MAPMRI ODF matrix [1]_ Eq. 33. Parameters ---------- radial_order : unsigned int, an even integer that represent the order of the basis mu : array, shape (3,) scale factors of the basis for x, y, z s : unsigned int radial moment of the ODF vertices : array, shape (N,3) points of the sphere shell in the r-space in which evaluate the ODF References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ ind_mat = mapmri_index_matrix(radial_order) n_vert = vertices.shape[0] n_elem = ind_mat.shape[0] odf_mat = np.zeros((n_vert, n_elem)) mux, muy, muz = mu # Eq, 35a rho = 1.0 / np.sqrt((vertices[:, 0] / mux) ** 2 + (vertices[:, 1] / muy) ** 2 + (vertices[:, 2] / muz) ** 2) # Eq, 35b alpha = 2 * rho * (vertices[:, 0] / mux) # Eq, 35c beta = 2 * rho * (vertices[:, 1] / muy) # Eq, 35d gamma = 2 * rho * (vertices[:, 2] / muz) const = rho ** (3 + s) / np.sqrt(2 ** (2 - s) * np.pi ** 3 * (mux ** 2 * muy ** 2 * muz ** 2)) for j in range(n_elem): n1, n2, n3 = ind_mat[j] f = np.sqrt(factorial(n1) * factorial(n2) * factorial(n3)) odf_mat[:, j] = const * f * \ _odf_cfunc(n1, n2, n3, alpha, beta, gamma, s) return odf_mat def _odf_cfunc(n1, n2, n3, a, b, g, s): r"""Compute the MAPMRI ODF function from [1]_ Eq. 34. References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ f = factorial f2 = factorial2 sumc = 0 for i in range(0, n1 + 1, 2): for j in range(0, n2 + 1, 2): for k in range(0, n3 + 1, 2): nn = n1 + n2 + n3 - i - j - k gam = (-1) ** ((i + j + k) / 2.0) * gamma((3 + s + nn) / 2.0) num1 = a ** (n1 - i) num2 = b ** (n2 - j) num3 = g ** (n3 - k) num = gam * num1 * num2 * num3 denom = f(n1 - i) * f(n2 - j) * f( n3 - k) * f2(i) * f2(j) * f2(k) sumc += num / denom return sumc def mapmri_EAP(r_list, radial_order, coeff, mu, R): r""" Evaluate the MAPMRI propagator in a set of points of the r-space. Parameters ---------- r_list : array, shape (N,3) points of the r-space in which evaluate the EAP radial_order : unsigned int, an even integer that represent the order of the basis coeff : array, shape (N,) the MAPMRI coefficients mu : array, shape (3,) scale factors of the basis for x, y, z R : array, shape (3,3) MAPMRI rotation matrix """ r_list = np.dot(r_list, R) ind_mat = mapmri_index_matrix(radial_order) n_elem = ind_mat.shape[0] n_rgrad = r_list.shape[0] data_out = np.zeros(n_rgrad) for j in range(n_elem): data_out[:] += coeff[j] * mapmri_psi_3d(ind_mat[j], r_list, mu) return data_out def create_rspace(gridsize, radius_max): """ Create the real space table, that contains the points in which to compute the pdf. Parameters ---------- gridsize : unsigned int dimension of the propagator grid radius_max : float maximal radius in which compute the propagator Returns ------- vecs : array, shape (N,3) positions of the pdf points in a 3D matrix tab : array, shape (N,3) real space points in which calculates the pdf """ radius = gridsize // 2 vecs = [] for i in range(-radius, radius + 1): for j in range(-radius, radius + 1): for k in range(-radius, radius + 1): vecs.append([i, j, k]) vecs = np.array(vecs, dtype=np.float32) tab = vecs / radius tab = tab * radius_max vecs = vecs + radius return vecs, tab dipy-0.10.1/dipy/reconst/multi_voxel.py000066400000000000000000000073261263041327500201140ustar00rootroot00000000000000"""Tools to easily make multi voxel models""" import numpy as np from numpy.lib.stride_tricks import as_strided from ..core.ndindex import ndindex from .quick_squash import quick_squash as _squash from .base import ReconstFit def multi_voxel_fit(single_voxel_fit): """Method decorator to turn a single voxel model fit definition into a multi voxel model fit definition """ def new_fit(self, data, mask=None): """Fit method for every voxel in data""" # If only one voxel just return a normal fit if data.ndim == 1: return single_voxel_fit(self, data) # Make a mask if mask is None if mask is None: shape = data.shape[:-1] strides = (0,) * len(shape) mask = as_strided(np.array(True), shape=shape, strides=strides) # Check the shape of the mask if mask is not None elif mask.shape != data.shape[:-1]: raise ValueError("mask and data shape do not match") # Fit data where mask is True fit_array = np.empty(data.shape[:-1], dtype=object) for ijk in ndindex(data.shape[:-1]): if mask[ijk]: fit_array[ijk] = single_voxel_fit(self, data[ijk]) return MultiVoxelFit(self, fit_array, mask) return new_fit class MultiVoxelFit(ReconstFit): """Holds an array of fits and allows access to their attributes and methods""" def __init__(self, model, fit_array, mask): self.model = model self.fit_array = fit_array self.mask = mask @property def shape(self): return self.fit_array.shape def __getattr__(self, attr): result = CallableArray(self.fit_array.shape, dtype=object) for ijk in ndindex(result.shape): if self.mask[ijk]: result[ijk] = getattr(self.fit_array[ijk], attr) return _squash(result, self.mask) def __getitem__(self, index): item = self.fit_array[index] if isinstance(item, np.ndarray): return MultiVoxelFit(self.model, item, self.mask[index]) else: return item def predict(self, *args, **kwargs): """ Predict for the multi-voxel object using each single-object's prediction API, with S0 provided from an array. """ if not hasattr(self.model, 'predict'): msg = "This model does not have prediction implemented yet" raise NotImplementedError(msg) S0 = kwargs.get('S0', np.ones(self.fit_array.shape)) idx = ndindex(self.fit_array.shape) ijk = next(idx) def gimme_S0(S0, ijk): if isinstance(S0, np.ndarray): return S0[ijk] else: return S0 kwargs['S0'] = gimme_S0(S0, ijk) # If we have a mask, we might have some Nones up front, skip those: while self.fit_array[ijk] is None: ijk = next(idx) first_pred = self.fit_array[ijk].predict(*args, **kwargs) result = np.zeros(self.fit_array.shape + (first_pred.shape[-1],)) result[ijk] = first_pred for ijk in idx: kwargs['S0'] = gimme_S0(S0, ijk) # If it's masked, we predict a 0: if self.fit_array[ijk] is None: result[ijk] *= 0 else: result[ijk] = self.fit_array[ijk].predict(*args, **kwargs) return result class CallableArray(np.ndarray): """An array which can be called like a function""" def __call__(self, *args, **kwargs): result = np.empty(self.shape, dtype=object) for ijk in ndindex(self.shape): item = self[ijk] if item is not None: result[ijk] = item(*args, **kwargs) return _squash(result) dipy-0.10.1/dipy/reconst/odf.py000066400000000000000000000040111263041327500163010ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from .base import ReconstModel, ReconstFit import numpy as np # Classes OdfModel and OdfFit are using API ReconstModel and ReconstFit from # .base class OdfModel(ReconstModel): """An abstract class to be sub-classed by specific odf models All odf models should provide a fit method which may take data as it's first and only argument. """ def __init__(self, gtab): ReconstModel.__init__(self, gtab) def fit(self, data): """To be implemented by specific odf models""" raise NotImplementedError("To be implemented in sub classes") class OdfFit(ReconstFit): def odf(self, sphere): """To be implemented but specific odf models""" raise NotImplementedError("To be implemented in sub classes") def gfa(samples): """The general fractional anisotropy of a function evaluated on the unit sphere""" diff = samples - samples.mean(-1)[..., None] n = samples.shape[-1] numer = n * (diff * diff).sum(-1) denom = (n - 1) * (samples * samples).sum(-1) return np.sqrt(numer / denom) def minmax_normalize(samples, out=None): """Min-max normalization of a function evaluated on the unit sphere Normalizes samples to ``(samples - min(samples)) / (max(samples) - min(samples))`` for each unit sphere. Parameters ---------- samples : ndarray (..., N) N samples on a unit sphere for each point, stored along the last axis of the array. out : ndrray (..., N), optional An array to store the normalized samples. Returns ------- out : ndarray, (..., N) Normalized samples. """ if out is None: dtype = np.common_type(np.empty(0, 'float32'), samples) out = np.array(samples, dtype=dtype, copy=True) else: out[:] = samples sample_mins = np.min(samples, -1)[..., None] sample_maxes = np.max(samples, -1)[..., None] out -= sample_mins out /= (sample_maxes - sample_mins) return out dipy-0.10.1/dipy/reconst/peak_direction_getter.pyx000066400000000000000000000104231263041327500222570ustar00rootroot00000000000000cimport cython cimport numpy as np import numpy as np from dipy.tracking.propspeed cimport _propagation_direction from dipy.tracking.local.direction_getter cimport DirectionGetter cdef extern from "dpy_math.h" nogil: double dpy_rint(double x) def make_nd(array, N): """Makes an array that's less than Nd - Nd We need this because numpy 1.6 does not return a "c contiguous array" when you call ``array(a, order='c', ndmin=N)`` """ if array.ndim > N: raise ValueError() new_shape = (1,) * (N - array.ndim) + array.shape return array.reshape(new_shape) cdef class PeaksAndMetricsDirectionGetter(DirectionGetter): """Deterministic Direction Getter based on peak directions. This class contains the cython portion of the code for PeaksAndMetrics and is not meant to be used on its own. """ cdef: public double qa_thr, ang_thr, total_weight public double[:, :, :, ::1] _qa, _ind public double[:, ::1] _odf_vertices int initialized def __cinit__(self): initialized = False self.qa_thr = 0.0239 self.ang_thr = 60 self.total_weight = .5 def _initialize(self): """First time that a PAM instance is used as a direction getter, initialize all the memoryviews. """ if self.peak_values.shape != self.peak_indices.shape: msg = "shapes of peak_values and peak_indices do not match" raise ValueError(msg) self._qa = make_nd(np.array(self.peak_values, copy=False, dtype='double', order='C'), 4) self._ind = make_nd(np.array(self.peak_indices, copy=False, dtype='double', order='C'), 4) self._odf_vertices = np.array(self.sphere.vertices, copy=False, dtype='double', order='C') self.initialized = True def initial_direction(self, double[::1] point): """The best starting directions for fiber tracking from point All the valid peaks in the voxel closest to point are returned as initial directions. """ if not self.initialized: self._initialize() cdef: np.npy_intp numpeaks, i np.npy_intp ijk[3] # ijk is the closest voxel to point for i in range(3): ijk[i] = dpy_rint(point[i]) if ijk[i] < 0 or ijk[i] >= self._ind.shape[i]: raise IndexError("point outside data") # Check to see how many peaks were found in the voxel for numpeaks in range(self._ind.shape[3]): if self._ind[ijk[0], ijk[1], ijk[2], numpeaks] < 0: break # Create directions array and copy peak directions from vertices res = np.empty((numpeaks, 3)) for i in range(numpeaks): peak_index = self._ind[ijk[0], ijk[1], ijk[2], i] res[i, :] = self._odf_vertices[ peak_index, :] return res @cython.initializedcheck(False) @cython.boundscheck(False) @cython.wraparound(False) cpdef int get_direction(self, double[::1] point, double[::1] direction) except -1: """Interpolate closest peaks to direction from voxels neighboring point Update direction and return 0 if successful. If no tracking direction could be found, return 1. """ if not self.initialized: self._initialize() cdef: np.npy_intp s double newdirection[3] np.npy_intp qa_shape[4] np.npy_intp qa_strides[4] for i in range(4): qa_shape[i] = self._qa.shape[i] qa_strides[i] = self._qa.strides[i] s = _propagation_direction(&point[0], &direction[0], &self._qa[0, 0, 0, 0], &self._ind[0, 0, 0, 0], &self._odf_vertices[0, 0], self.qa_thr, self.ang_thr, qa_shape, qa_strides, newdirection, self.total_weight) if s: for i in range(3): direction[i] = newdirection[i] return 0 else: return 1 dipy-0.10.1/dipy/reconst/peaks.py000066400000000000000000000003221263041327500166350ustar00rootroot00000000000000import warnings w_s = "The module 'dipy.reconst.peaks' is deprecated." w_s += " Please use the module 'dipy.direction.peaks' instead" warnings.warn(w_s, DeprecationWarning) from dipy.direction.peaks import * dipy-0.10.1/dipy/reconst/quick_squash.pyx000066400000000000000000000100771263041327500204320ustar00rootroot00000000000000""" Detect common dtype across object array """ from functools import reduce cimport numpy as cnp cimport cython import numpy as np cdef enum: SCALAR, ARRAY SCALAR_TYPES = np.ScalarType @cython.boundscheck(False) @cython.wraparound(False) def quick_squash(obj_arr, mask=None, fill=0): """Try and make a standard array from an object array This function takes an object array and attempts to convert it to a more useful dtype. If array can be converted to a better dtype, Nones are replaced by `fill`. To make the behaviour of this function more clear, here are the most common cases: 1. `obj_arr` is an array of scalars of type `T`. Returns an array like `obj_arr.astype(T)` 2. `obj_arr` is an array of arrays. All items in `obj_arr` have the same shape ``S``. Returns an array with shape ``obj_arr.shape + S`` 3. `obj_arr` is an array of arrays of different shapes. Returns `obj_arr`. 4. Items in `obj_arr` are not ndarrays or scalars. Returns `obj_arr`. Parameters ---------- obj_arr : array, dtype=object The array to be converted. mask : array, dtype=bool, optional mask is nonzero where `obj_arr` has Nones. fill : number, optional Nones are replaced by `fill`. Returns ------- result : array Examples -------- >>> arr = np.empty(3, dtype=object) >>> arr.fill(2) >>> quick_squash(arr) array([2, 2, 2]) >>> arr[0] = None >>> quick_squash(arr) array([0, 2, 2]) >>> arr.fill(np.ones(2)) >>> r = quick_squash(arr) >>> r.shape (3, 2) >>> r.dtype dtype('float64') """ cdef: cnp.npy_intp i, j, N, dtypes_i object [:] flat_obj char [:] flat_mask cnp.dtype [:] dtypes int have_mask = not mask is None int search_for cnp.ndarray result cnp.dtype dtype, last_dtype object common_shape if have_mask: flat_mask = np.array(mask.reshape(-1), dtype=np.int8) N = obj_arr.size dtypes = np.empty((N,), dtype=object) flat_obj = obj_arr.reshape((-1)) # Find first valid value for i in range(N): e = flat_obj[i] if ((have_mask and flat_mask[i] == 0) or (not have_mask and e is None)): continue t = type(e) if issubclass(t, np.generic) or t in SCALAR_TYPES: search_for = SCALAR common_shape = () dtype = np.dtype(t) break elif t == cnp.ndarray: search_for = ARRAY common_shape = e.shape dtype = e.dtype break else: # something other than scalar or array return obj_arr else: # Nothing outside mask / all None return obj_arr # Check rest of values to confirm common type / shape, and collect dtypes last_dtype = dtype dtypes[0] = dtype dtypes_i = 1 for j in range(i+1, N): e = flat_obj[j] if ((have_mask and flat_mask[j] == 0) or (not have_mask and e is None)): continue t = type(e) if search_for == SCALAR: if not issubclass(t, np.generic) and not t in SCALAR_TYPES: return obj_arr dtype = np.dtype(t) else: # search_for == ARRAY: if not t == cnp.ndarray: return obj_arr if not e.shape == common_shape: return obj_arr dtype = e.dtype if dtype != last_dtype: last_dtype = dtype dtypes[dtypes_i] = dtype dtypes_i += 1 # Find common dtype unique_dtypes = set(dtypes[:dtypes_i]) tiny_arrs = [np.zeros((1,), dtype=dt) for dt in unique_dtypes] dtype = reduce(np.add, tiny_arrs).dtype # Create and fill output array result = np.empty((N,) + common_shape, dtype=dtype) for i in range(N): e = flat_obj[i] if ((have_mask and flat_mask[i] == 0) or (not have_mask and e is None)): result[i] = fill else: result[i] = e return result.reshape(obj_arr.shape + common_shape) dipy-0.10.1/dipy/reconst/recspeed.pyx000066400000000000000000000472671263041327500175370ustar00rootroot00000000000000# Emacs should think this is a -*- python -*- file """ Optimized routines for creating voxel diffusion models """ # cython: profile=True # cython: embedsignature=True cimport cython import numpy as np cimport numpy as cnp from libc.stdlib cimport malloc, free from libc.string cimport memcpy cdef extern from "dpy_math.h" nogil: double floor(double x) double fabs(double x) double cos(double x) double sin(double x) float acos(float x ) double sqrt(double x) double DPY_PI # initialize numpy runtime cnp.import_array() #numpy pointers cdef inline float* asfp(cnp.ndarray pt): return pt.data cdef inline double* asdp(cnp.ndarray pt): return pt.data cdef void splitoffset(float *offset, size_t *index, size_t shape) nogil: """Splits a global offset into an integer index and a relative offset""" offset[0] -= .5 if offset[0] <= 0: index[0] = 0 offset[0] = 0. elif offset[0] >= (shape - 1): index[0] = shape - 2 offset[0] = 1. else: index[0] = offset[0] offset[0] = offset[0] - index[0] @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def trilinear_interp(cnp.ndarray[cnp.float32_t, ndim=4, mode='strided'] data, cnp.ndarray[cnp.float_t, ndim=1, mode='strided'] index, cnp.ndarray[cnp.float_t, ndim=1, mode='c'] voxel_size): """Interpolates vector from 4D `data` at 3D point given by `index` Interpolates a vector of length T from a 4D volume of shape (I, J, K, T), given point (x, y, z) where (x, y, z) are the coordinates of the point in real units (not yet adjusted for voxel size). """ cdef: float x = index[0] / voxel_size[0] float y = index[1] / voxel_size[1] float z = index[2] / voxel_size[2] float weight size_t x_ind, y_ind, z_ind, ii, jj, kk, LL size_t last_d = data.shape[3] bint bounds_check cnp.ndarray[cnp.float32_t, ndim=1, mode='c'] result bounds_check = (x < 0 or y < 0 or z < 0 or x > data.shape[0] or y > data.shape[1] or z > data.shape[2]) if bounds_check: raise IndexError splitoffset(&x, &x_ind, data.shape[0]) splitoffset(&y, &y_ind, data.shape[1]) splitoffset(&z, &z_ind, data.shape[2]) result = np.zeros(last_d, dtype='float32') for ii from 0 <= ii <= 1: for jj from 0 <= jj <= 1: for kk from 0 <= kk <= 1: weight = wght(ii, x)*wght(jj, y)*wght(kk, z) for LL from 0 <= LL < last_d: result[LL] += data[x_ind+ii,y_ind+jj,z_ind+kk,LL]*weight return result @cython.profile(False) cdef float wght(int i, float r) nogil: if i: return r else: return 1.-r @cython.boundscheck(False) @cython.wraparound(False) def remove_similar_vertices( cnp.ndarray[cnp.float_t, ndim=2, mode='strided'] vertices, double theta, bint return_mapping=False, bint return_index=False): """Remove vertices that are less than `theta` degrees from any other Returns vertices that are at least theta degrees from any other vertex. Vertex v and -v are considered the same so if v and -v are both in `vertices` only one is kept. Also if v and w are both in vertices, w must be separated by theta degrees from both v and -v to be unique. Parameters ---------- vertices : (N, 3) ndarray N unit vectors. theta : float The minimum separation between vertices in degrees. return_mapping : {False, True}, optional If True, return `mapping` as well as `vertices` and maybe `indices` (see below). return_indices : {False, True}, optional If True, return `indices` as well as `vertices` and maybe `mapping` (see below). Returns ------- unique_vertices : (M, 3) ndarray Vertices sufficiently separated from one another. mapping : (N,) ndarray For each element ``vertices[i]`` ($i \in 0..N-1$), the index $j$ to a vertex in `unique_vertices` that is less than `theta` degrees from ``vertices[i]``. Only returned if `return_mapping` is True. indices : (N,) ndarray `indices` gives the reverse of `mapping`. For each element ``unique_vertices[j]`` ($j \in 0..M-1$), the index $i$ to a vertex in `vertices` that is less than `theta` degrees from ``unique_vertices[j]``. If there is more than one element of `vertices` that is less than theta degrees from `unique_vertices[j]`, return the first (lowest index) matching value. Only return if `return_indices` is True. """ if vertices.shape[1] != 3: raise ValueError('Vertices should be 2D with second dim length 3') cdef: cnp.ndarray[cnp.float_t, ndim=2, mode='c'] unique_vertices cnp.ndarray[cnp.uint16_t, ndim=1, mode='c'] mapping cnp.ndarray[cnp.uint16_t, ndim=1, mode='c'] index char pass_all # Variable has to be large enough for all valid sizes of vertices cnp.npy_int32 i, j cnp.npy_int32 n_unique = 0 # Large enough for all possible sizes of vertices cnp.npy_intp n = vertices.shape[0] double a, b, c, sim double cos_similarity = cos(DPY_PI/180 * theta) if n >= 2**16: # constrained by input data type raise ValueError("too many vertices") unique_vertices = np.empty((n, 3), dtype=np.float) if return_mapping: mapping = np.empty(n, dtype=np.uint16) if return_index: index = np.empty(n, dtype=np.uint16) for i in range(n): pass_all = 1 a = vertices[i, 0] b = vertices[i, 1] c = vertices[i, 2] # Check all other accepted vertices for similarity to this one for j in range(n_unique): sim = fabs(a * unique_vertices[j, 0] + b * unique_vertices[j, 1] + c * unique_vertices[j, 2]) if sim > cos_similarity: # too similar, drop pass_all = 0 if return_mapping: mapping[i] = j # This point unique_vertices[j] already has an entry in index, # so we do not need to update. break if pass_all: # none similar, keep unique_vertices[n_unique, 0] = a unique_vertices[n_unique, 1] = b unique_vertices[n_unique, 2] = c if return_mapping: mapping[i] = n_unique if return_index: index[n_unique] = i n_unique += 1 verts = unique_vertices[:n_unique].copy() if not return_mapping and not return_index: return verts out = [verts] if return_mapping: out.append(mapping) if return_index: out.append(index[:n_unique].copy()) return out @cython.boundscheck(False) @cython.wraparound(False) def search_descending(cnp.ndarray[cnp.float_t, ndim=1, mode='c'] a, double relative_threshold): """`i` in descending array `a` so `a[i] < a[0] * relative_threshold` Call ``T = a[0] * relative_threshold``. Return value `i` will be the smallest index in the descending array `a` such that ``a[i] < T``. Equivalently, `i` will be the largest index such that ``all(a[:i] >= T)``. If all values in `a` are >= T, return the length of array `a`. Parameters ---------- a : ndarray, ndim=1, c-contiguous Array to be searched. We assume `a` is in descending order. relative_threshold : float Applied threshold will be ``T`` with ``T = a[0] * relative_threshold``. Returns ------- i : np.intp If ``T = a[0] * relative_threshold`` then `i` will be the largest index such that ``all(a[:i] >= T)``. If all values in `a` are >= T then `i` will be `len(a)`. Examples -------- >>> a = np.arange(10, 0, -1, dtype=float) >>> a array([ 10., 9., 8., 7., 6., 5., 4., 3., 2., 1.]) >>> search_descending(a, 0.5) 6 >>> a < 10 * 0.5 array([False, False, False, False, False, False, True, True, True, True], dtype=bool) >>> search_descending(a, 1) 1 >>> search_descending(a, 2) 0 >>> search_descending(a, 0) 10 """ if a.shape[0] == 0: return 0 cdef: cnp.npy_intp left = 0 cnp.npy_intp right = a.shape[0] cnp.npy_intp mid double threshold = relative_threshold * a[0] while left != right: mid = (left + right) // 2 if a[mid] >= threshold: left = mid + 1 else: right = mid return left @cython.wraparound(False) @cython.boundscheck(False) @cython.profile(True) def local_maxima(cnp.ndarray odf, cnp.ndarray edges): """Local maxima of a function evaluated on a discrete set of points. If a function is evaluated on some set of points where each pair of neighboring points is an edge in edges, find the local maxima. Parameters ---------- odf : array, 1d, dtype=double The function evaluated on a set of discrete points. edges : array (N, 2) The set of neighbor relations between the points. Every edge, ie `edges[i, :]`, is a pair of neighboring points. Returns ------- peak_values : ndarray Value of odf at a maximum point. Peak values is sorted in descending order. peak_indices : ndarray Indices of maximum points. Sorted in the same order as `peak_values` so `odf[peak_indices[i]] == peak_values[i]`. Note ---- A point is a local maximum if it is > at least one neighbor and >= all neighbors. If no points meet the above criteria, 1 maximum is returned such that `odf[maximum] == max(odf)`. See Also -------- dipy.core.sphere """ cdef: cnp.ndarray[cnp.npy_intp] wpeak wpeak = np.zeros((odf.shape[0],), dtype=np.intp) count = _compare_neighbors(odf, edges, &wpeak[0]) if count == -1: raise IndexError("Values in edges must be < len(odf)") elif count == -2: raise ValueError("odf can not have nans") indices = wpeak[:count].copy() # Get peak values return values = odf.take(indices) # Sort both values and indices _cosort(values, indices) return values, indices @cython.wraparound(False) @cython.boundscheck(False) cdef void _cosort(double[::1] A, cnp.npy_intp[::1] B) nogil: """Sorts `A` in-place and applies the same reordering to `B`""" cdef: size_t n = A.shape[0] size_t hole double insert_A long insert_B for i in range(1, n): insert_A = A[i] insert_B = B[i] hole = i while hole > 0 and insert_A > A[hole -1]: A[hole] = A[hole - 1] B[hole] = B[hole - 1] hole -= 1 A[hole] = insert_A B[hole] = insert_B @cython.wraparound(False) @cython.boundscheck(False) cdef long _compare_neighbors(double[:] odf, cnp.uint16_t[:, :] edges, cnp.npy_intp *wpeak_ptr) nogil: """Compares every pair of points in edges Parameters ---------- odf : array of double values of points on sphere. edges : array of uint16 neighbor relationships on sphere. Every set of neighbors on the sphere should be an edge. wpeak_ptr : pointer pointer to a block of memory which will be updated with the result of the comparisons. This block of memory must be large enough to hold len(odf) longs. The first `count` elements of wpeak will be updated with the indices of the peaks. Returns ------- count : long Number of maxima in odf. A value < 0 indicates an error: -1 : value in edges too large, >= than len(odf) -2 : odf contains nans """ cdef: size_t lenedges = edges.shape[0] size_t lenodf = odf.shape[0] size_t i cnp.uint16_t find0, find1 double odf0, odf1 long count = 0 for i in range(lenedges): find0 = edges[i, 0] find1 = edges[i, 1] if find0 >= lenodf or find1 >= lenodf: count = -1 break odf0 = odf[find0] odf1 = odf[find1] """ Here `wpeak_ptr` is used as an indicator array that can take one of three values. If `wpeak_ptr[i]` is: * -1 : point i of the sphere is smaller than at least one neighbor. * 0 : point i is equal to all its neighbors. * 1 : point i is > at least one neighbor and >= all its neighbors. Each iteration of the loop is a comparison between neighboring points (the two point of an edge). At each iteration we update wpeak_ptr in the following way:: wpeak_ptr[smaller_point] = -1 if wpeak_ptr[larger_point] == 0: wpeak_ptr[larger_point] = 1 If the two points are equal, wpeak is left unchanged. """ if odf0 < odf1: wpeak_ptr[find0] = -1 wpeak_ptr[find1] |= 1 elif odf0 > odf1: wpeak_ptr[find0] |= 1 wpeak_ptr[find1] = -1 elif (odf0 != odf0) or (odf1 != odf1): count = -2 break if count < 0: return count # Count the number of peaks and use first count elements of wpeak_ptr to # hold indices of those peaks for i in range(lenodf): if wpeak_ptr[i] > 0: wpeak_ptr[count] = i count += 1 return count @cython.boundscheck(False) @cython.wraparound(False) def le_to_odf(cnp.ndarray[double, ndim=1] odf, \ cnp.ndarray[double, ndim=1] LEs,\ cnp.ndarray[double, ndim=1] radius,\ int odfn,\ int radiusn,\ int anglesn): """odf for interpolated Laplacian normalized signal """ cdef int m, i, j with nogil: for m in range(odfn): for i in range(radiusn): for j in range(anglesn): odf[m]=odf[m]-LEs[(m*radiusn+i)*anglesn+j]*radius[i] return @cython.boundscheck(False) @cython.wraparound(False) def sum_on_blocks_1d(cnp.ndarray[double, ndim=1] arr,\ cnp.ndarray[long, ndim=1] blocks,\ cnp.ndarray[double, ndim=1] out,int outn): """Summations on blocks of 1d array """ cdef: int m,i,j double sum with nogil: j=0 for m in range(outn): sum=0 for i in range(j,j+blocks[m]): sum+=arr[i] out[m]=sum j+=blocks[m] return def argmax_from_adj(vals, vertex_inds, adj_inds): """Indices of local maxima from `vals` given adjacent points Parameters ---------- vals : (N,) array, dtype np.float64 values at all vertices referred to in either of `vertex_inds` or `adj_inds`' vertex_inds : (V,) array indices into `vals` giving vertices that may be local maxima. adj_inds : sequence For every vertex in ``vertex_inds``, the indices (into `vals`) of the neighboring points Returns ------- inds : (M,) array Indices into `vals` giving local maxima of vals, given topology from `adj_inds`, and restrictions from `vertex_inds`. Inds are returned sorted by value at that index - i.e. smallest value (at index) first. """ cvals, cvertinds = proc_reco_args(vals, vertex_inds) cadj_counts, cadj_inds = adj_to_countarrs(adj_inds) return argmax_from_countarrs(cvals, cvertinds, cadj_counts, cadj_inds) def proc_reco_args(vals, vertinds): vals = np.ascontiguousarray(vals.astype(np.float)) vertinds = np.ascontiguousarray(vertinds.astype(np.uint32)) return vals, vertinds def adj_to_countarrs(adj_inds): """Convert adjacency sequence to counts and flattened indices We use this to provide expected input to ``argmax_from_countarrs`` Parameters ------------ adj_indices : sequence length V sequence of sequences, where sequence ``i`` contains the neighbors of a particular vertex. Returns --------- counts : (V,) array Number of neighbors for each vertex adj_inds : (n,) array flat array containing `adj_indices` unrolled as a vector """ counts = [] all_inds = [] for verts in adj_inds: v = list(verts) all_inds += v counts.append(len(v)) adj_inds = np.array(all_inds, dtype=np.uint32) counts = np.array(counts, dtype=np.uint32) return counts, adj_inds # prefetch argsort for small speedup cdef object argsort = np.argsort def argmax_from_countarrs(cnp.ndarray vals, cnp.ndarray vertinds, cnp.ndarray adj_counts, cnp.ndarray adj_inds): """Indices of local maxima from `vals` from count, array neighbors Parameters ---------- vals : (N,) array, dtype float values at all vertices referred to in either of `vertex_inds` or `adj_inds`' vertinds : (V,) array, dtype uint32 indices into `vals` giving vertices that may be local maxima. adj_counts : (V,) array, dtype uint32 For every vertex ``i`` in ``vertex_inds``, the number of neighbors for vertex ``i`` adj_inds : (P,) array, dtype uint32 Indices for neighbors for each point. ``P=sum(adj_counts)`` Returns ------- inds : (M,) array Indices into `vals` giving local maxima of vals, given topology from `adj_counts` and `adj_inds`, and restrictions from `vertex_inds`. Inds are returned sorted by value at that index - i.e. smallest value (at index) first. """ cdef: cnp.ndarray[cnp.float64_t, ndim=1] cvals = vals cnp.ndarray[cnp.uint32_t, ndim=1] cvertinds = vertinds cnp.ndarray[cnp.uint32_t, ndim=1] cadj_counts = adj_counts cnp.ndarray[cnp.uint32_t, ndim=1] cadj_inds = adj_inds # temporary arrays for storing maxes cnp.ndarray[cnp.float64_t, ndim=1] maxes = vals.copy() cnp.ndarray[cnp.uint32_t, ndim=1] maxinds = vertinds.copy() cnp.npy_intp i, j, V, C, n_maxes=0, adj_size, adj_pos=0 int is_max cnp.float64_t *vals_ptr double val cnp.uint32_t vert_ind, *vertinds_ptr, *counts_ptr, *adj_ptr, ind cnp.uint32_t vals_size, vert_size if not (cnp.PyArray_ISCONTIGUOUS(cvals) and cnp.PyArray_ISCONTIGUOUS(cvertinds) and cnp.PyArray_ISCONTIGUOUS(cadj_counts) and cnp.PyArray_ISCONTIGUOUS(cadj_inds)): raise ValueError('Need contiguous arrays as input') vals_size = cvals.shape[0] vals_ptr = cvals.data vertinds_ptr = cvertinds.data adj_ptr = cadj_inds.data counts_ptr = cadj_counts.data V = cadj_counts.shape[0] adj_size = cadj_inds.shape[0] if cvertinds.shape[0] < V: raise ValueError('Too few indices for adj arrays') for i in range(V): vert_ind = vertinds_ptr[i] if vert_ind >= vals_size: raise IndexError('Overshoot on vals') val = vals_ptr[vert_ind] C = counts_ptr[i] # check for overshoot adj_pos += C if adj_pos > adj_size: raise IndexError('Overshoot on adj_inds array') is_max = 1 for j in range(C): ind = adj_ptr[j] if ind >= vals_size: raise IndexError('Overshoot on vals') if val <= vals_ptr[ind]: is_max = 0 break if is_max: maxinds[n_maxes] = vert_ind maxes[n_maxes] = val n_maxes +=1 adj_ptr += C if n_maxes == 0: return np.array([]) # fancy indexing always produces a copy return maxinds[argsort(maxes[:n_maxes])] dipy-0.10.1/dipy/reconst/sfm.py000066400000000000000000000460731263041327500163340ustar00rootroot00000000000000""" This is an implementation of the sparse fascicle model described in [Rokem2014a]_. The multi b-value version of this model is described in [Rokem2014b]_. .. [Rokem2014a] Ariel Rokem, Jason D. Yeatman, Franco Pestilli, Kendrick N. Kay, Aviv Mezer, Stefan van der Walt, Brian A. Wandell (2014). Evaluating the accuracy of diffusion MRI models in white matter. http://arxiv.org/abs/1411.0721 .. [Rokem2014b] Ariel Rokem, Kimberly L. Chan, Jason D. Yeatman, Franco Pestilli, Brian A. Wandell (2014). Evaluating the accuracy of diffusion models at multiple b-values with cross-validation. ISMRM 2014. """ import warnings import numpy as np try: from numpy import nanmean except ImportError: from scipy.stats import nanmean from dipy.utils.optpkg import optional_package import dipy.core.geometry as geo import dipy.core.gradients as grad import dipy.core.optimize as opt import dipy.sims.voxel as sims import dipy.reconst.dti as dti import dipy.data as dpd from dipy.reconst.base import ReconstModel, ReconstFit from dipy.reconst.cache import Cache from dipy.core.onetime import auto_attr lm, has_sklearn, _ = optional_package('sklearn.linear_model') # If sklearn is unavailable, we can fall back on nnls (but we also warn the # user that we are about to do that): if not has_sklearn: w = "sklearn is not available, you can use 'nnls' method to fit" w += " the SparseFascicleModel" warnings.warn(w) # Isotropic signal models: these are models of the part of the signal that # changes with b-value, but does not change with direction. This collection is # extensible, by inheriting from IsotropicModel/IsotropicFit below: class IsotropicModel(ReconstModel): """ A base-class for the representation of isotropic signals. The default behavior, suitable for single b-value data is to calculate the mean in each voxel as an estimate of the signal that does not depend on direction. """ def __init__(self, gtab): """ Initialize an IsotropicModel Parameters ---------- gtab : a GradientTable class instance """ ReconstModel.__init__(self, gtab) def fit(self, data): """ Fit an IsotropicModel. This boils down to finding the mean diffusion-weighted signal in each voxel Parameters ---------- data : ndarray Returns ------- IsotropicFit class instance. """ data_no_b0 = data[..., ~self.gtab.b0s_mask] if np.sum(self.gtab.b0s_mask) > 0: s0 = np.mean(data[..., self.gtab.b0s_mask], -1) to_fit = data_no_b0 / s0[..., None] else: to_fit = data_no_b0 params = np.mean(np.reshape(to_fit, (-1, to_fit.shape[-1])), -1) return IsotropicFit(self, params) class IsotropicFit(ReconstFit): """ A fit object for representing the isotropic signal as the mean of the diffusion-weighted signal """ def __init__(self, model, params): """ Initialize an IsotropicFit object Parameters ---------- model : IsotropicModel class instance params : ndarray The mean isotropic model parameters (the mean diffusion-weighted signal in each voxel). n_vox : int The number of voxels for which the fit was done. """ self.model = model self.params = params def predict(self, gtab=None): """ Predict the isotropic signal, based on a gradient table. In this case, the (naive!) prediction will be the mean of the diffusion-weighted signal in the voxels. Parameters ---------- gtab : a GradientTable class instance (optional) Defaults to use the gtab from the IsotropicModel from which this fit was derived. """ if gtab is None: gtab = self.model.gtab return self.params[..., np.newaxis] + np.zeros((self.params.shape[0], np.sum(~gtab.b0s_mask))) class ExponentialIsotropicModel(IsotropicModel): """ Representing the isotropic signal as a fit to an exponential decay function with b-values """ def fit(self, data): """ Parameters ---------- data : ndarray Returns ------- ExponentialIsotropicFit class instance. """ data = np.reshape(data, (-1, data.shape[-1])) data_no_b0 = data[..., ~self.gtab.b0s_mask] if np.sum(self.gtab.b0s_mask) > 0: s0 = np.mean(data[..., self.gtab.b0s_mask], -1) to_fit = np.log(data_no_b0 / s0[..., None]) else: to_fit = np.log(data_no_b0) # Fitting to the log-transformed relative data: p = nanmean(to_fit / self.gtab.bvals[~self.gtab.b0s_mask], -1) params = -p return ExponentialIsotropicFit(self, params) class ExponentialIsotropicFit(IsotropicFit): """ A fit to the ExponentialIsotropicModel object, based on data. """ def predict(self, gtab=None): """ Predict the isotropic signal, based on a gradient table. In this case, the prediction will be for an exponential decay with the mean diffusivity derived from the data that was fit. Parameters ---------- gtab : a GradientTable class instance (optional) Defaults to use the gtab from the IsotropicModel from which this fit was derived. """ if gtab is None: gtab = self.model.gtab return np.exp(-gtab.bvals[~gtab.b0s_mask] * (np.zeros((self.params.shape[0], np.sum(~gtab.b0s_mask))) + self.params[..., np.newaxis])) def sfm_design_matrix(gtab, sphere, response, mode='signal'): """ Construct the SFM design matrix Parameters ---------- gtab : GradientTable or Sphere Sets the rows of the matrix, if the mode is 'signal', this should be a GradientTable. If mode is 'odf' this should be a Sphere sphere : Sphere Sets the columns of the matrix response : list of 3 elements The eigenvalues of a tensor which will serve as a kernel function. mode : str {'signal' | 'odf'}, optional Choose the (default) 'signal' for a design matrix containing predicted signal in the measurements defined by the gradient table for putative fascicles oriented along the vertices of the sphere. Otherwise, choose 'odf' for an odf convolution matrix, with values of the odf calculated from a tensor with the provided response eigenvalues, evaluated at the b-vectors in the gradient table, for the tensors with prinicipal diffusion directions along the vertices of the sphere. Returns ------- mat : ndarray A design matrix that can be used for one of the following operations: when the 'signal' mode is used, each column contains the putative signal in each of the bvectors of the `gtab` if a fascicle is oriented in the direction encoded by the sphere vertex corresponding to this column. This is used for deconvolution with a measured DWI signal. If the 'odf' mode is chosen, each column instead contains the values of the tensor ODF for a tensor with a principal diffusion direction corresponding to this vertex. This is used to generate odfs from the fits of the SFM for the purpose of tracking. Examples -------- >>> import dipy.data as dpd >>> data, gtab = dpd.dsi_voxels() >>> sphere = dpd.get_sphere() >>> from dipy.reconst.sfm import sfm_design_matrix A canonical tensor approximating corpus-callosum voxels [Rokem2014]_: >>> tensor_matrix = sfm_design_matrix(gtab, sphere, [0.0015, 0.0005, 0.0005]) A 'stick' function ([Behrens2007]_): >>> stick_matrix = sfm_design_matrix(gtab, sphere, [0.001, 0, 0]) Notes ----- .. [Rokem2014a] Ariel Rokem, Jason D. Yeatman, Franco Pestilli, Kendrick N. Kay, Aviv Mezer, Stefan van der Walt, Brian A. Wandell (2014). Evaluating the accuracy of diffusion MRI models in white matter. http://arxiv.org/abs/1411.0721 .. [Rokem2014b] Ariel Rokem, Kimberly L. Chan, Jason D. Yeatman, Franco Pestilli, Brian A. Wandell (2014). Evaluating the accuracy of diffusion models at multiple b-values with cross-validation. ISMRM 2014. .. [Behrens2007] Behrens TEJ, Berg HJ, Jbabdi S, Rushworth MFS, Woolrich MW (2007): Probabilistic diffusion tractography with multiple fibre orientations: What can we gain? Neuroimage 34:144-55. """ if mode == 'signal': mat_gtab = grad.gradient_table(gtab.bvals[~gtab.b0s_mask], gtab.bvecs[~gtab.b0s_mask]) # Preallocate: mat = np.empty((np.sum(~gtab.b0s_mask), sphere.vertices.shape[0])) elif mode == 'odf': mat = np.empty((gtab.x.shape[0], sphere.vertices.shape[0])) # Calculate column-wise: for ii, this_dir in enumerate(sphere.vertices): # Rotate the canonical tensor towards this vertex and calculate the # signal you would have gotten in the direction evecs = sims.all_tensor_evecs(this_dir) if mode == 'signal': sig = sims.single_tensor(mat_gtab, evals=response, evecs=evecs) # For regressors based on the single tensor, remove $e^{-bD}$ iso_sig = np.exp(-mat_gtab.bvals * np.mean(response)) mat[:, ii] = sig - iso_sig elif mode == 'odf': # Stick function if response[1] == 0 or response[2] == 0: jj = sphere.find_closest(evecs[0]) mat[jj, ii] = 1 else: odf = sims.single_tensor_odf(gtab.vertices, evals=response, evecs=evecs) mat[:, ii] = odf return mat class SparseFascicleModel(ReconstModel, Cache): def __init__(self, gtab, sphere=None, response=[0.0015, 0.0005, 0.0005], solver='ElasticNet', l1_ratio=0.5, alpha=0.001, isotropic=None): """ Initialize a Sparse Fascicle Model Parameters ---------- gtab : GradientTable class instance sphere : Sphere class instance, optional A sphere on which coefficients will be estimated. Default: symmetric sphere with 362 points (from :mod:`dipy.data`). response : (3,) array-like, optional The eigenvalues of a canonical tensor to be used as the response function of single-fascicle signals. Default:[0.0015, 0.0005, 0.0005] solver : string, dipy.core.optimize.SKLearnLinearSolver object, or sklearn.linear_model.base.LinearModel object, optional. This will determine the algorithm used to solve the set of linear equations underlying this model. If it is a string it needs to be one of the following: {'ElasticNet', 'NNLS'}. Otherwise, it can be an object that inherits from `dipy.optimize.SKLearnLinearSolver`. Default: 'ElasticNet'. l1_ratio : float, optional Sets the balance betwee L1 and L2 regularization in ElasticNet [Zou2005]_. Default: 0.5 alpha : float, optional Sets the balance between least-squares error and L1/L2 regularization in ElasticNet [Zou2005]_. Default: 0.001 isotropic : IsotropicModel class instance This is a class that implements the function that calculates the value of the isotropic signal. This is a value of the signal that is independent of direction, and therefore removed from both sides of the SFM equation. The default is an instance of IsotropicModel, but other functions can be inherited from IsotropicModel to implement other fits to the aspects of the data that depend on b-value, but not on direction. Notes ----- This is an implementation of the SFM, described in [Rokem2014]_. .. [Rokem2014] Ariel Rokem, Jason D. Yeatman, Franco Pestilli, Kendrick N. Kay, Aviv Mezer, Stefan van der Walt, Brian A. Wandell (2014). Evaluating the accuracy of diffusion MRI models in white matter. http://arxiv.org/abs/1411.0721 .. [Zou2005] Zou H, Hastie T (2005). Regularization and variable selection via the elastic net. J R Stat Soc B:301-320 """ ReconstModel.__init__(self, gtab) if sphere is None: sphere = dpd.get_sphere() self.sphere = sphere self.response = np.asarray(response) if isotropic is None: isotropic = IsotropicModel self.isotropic = isotropic if solver == 'ElasticNet': self.solver = lm.ElasticNet(l1_ratio=l1_ratio, alpha=alpha, positive=True, warm_start=True) elif solver == 'NNLS' or solver == 'nnls': self.solver = opt.NonNegativeLeastSquares() elif (isinstance(solver, opt.SKLearnLinearSolver) or has_sklearn and isinstance(solver, lm.base.LinearModel)): self.solver = solver else: e_s = "The `solver` key-word argument needs to be: " e_s += "'ElasticNet', 'NNLS', or a " e_s += "`dipy.optimize.SKLearnLinearSolver` object" raise ValueError(e_s) @auto_attr def design_matrix(self): return sfm_design_matrix(self.gtab, self.sphere, self.response, 'signal') def fit(self, data, mask=None): """ Fit the SparseFascicleModel object to data Parameters ---------- data : array The measured signal. mask : array, optional A boolean array used to mark the coordinates in the data that should be analyzed. Has the shape `data.shape[:-1]`. Default: None, which implies that all points should be analyzed. Returns ------- SparseFascicleFit object """ if mask is None: flat_data = np.reshape(data, (-1, data.shape[-1])) else: mask = np.array(mask, dtype=bool, copy=False) flat_data = np.reshape(data[mask], (-1, data.shape[-1])) # Fitting is done on the relative signal (S/S0): flat_S0 = np.mean(flat_data[..., self.gtab.b0s_mask], -1) flat_S = flat_data[..., ~self.gtab.b0s_mask] / flat_S0[..., None] isotropic = self.isotropic(self.gtab).fit(flat_data) flat_params = np.zeros((flat_data.shape[0], self.design_matrix.shape[-1])) for vox, vox_data in enumerate(flat_S): if np.any(~np.isfinite(vox_data)) or np.all(vox_data==0) : # In voxels in which S0 is 0, we just want to keep the # parameters at all-zeros, and avoid nasty sklearn errors: break fit_it = vox_data - isotropic.predict()[vox] flat_params[vox] = self.solver.fit(self.design_matrix, fit_it).coef_ if mask is None: out_shape = data.shape[:-1] + (-1, ) beta = flat_params.reshape(out_shape) S0 = flat_S0.reshape(out_shape).squeeze() else: beta = np.zeros(data.shape[:-1] + (self.design_matrix.shape[-1],)) beta[mask, :] = flat_params S0 = np.zeros(data.shape[:-1]) S0[mask] = flat_S0 return SparseFascicleFit(self, beta, S0, isotropic) class SparseFascicleFit(ReconstFit): def __init__(self, model, beta, S0, iso): """ Initalize a SparseFascicleFit class instance Parameters ---------- model : a SparseFascicleModel object. beta : ndarray The parameters of fit to data. S0 : ndarray The mean non-diffusion-weighted signal. iso : IsotropicFit class instance A representation of the isotropic signal, together with parameters of the isotropic signal in each voxel, that is capable of deriving/predicting an isotropic signal, based on a gradient-table. """ self.model = model self.beta = beta self.S0 = S0 self.iso = iso def odf(self, sphere): """ The orientation distribution function of the SFM Parameters ---------- sphere : Sphere The points in which the ODF is evaluated Returns ------- odf : ndarray of shape (x, y, z, sphere.vertices.shape[0]) """ odf_matrix = self.model.cache_get('odf_matrix', key=sphere) if odf_matrix is None: odf_matrix = sfm_design_matrix(sphere, self.model.sphere, self.model.response, mode='odf') self.model.cache_set('odf_matrix', key=sphere, value=odf_matrix) flat_beta = self.beta.reshape(-1, self.beta.shape[-1]) flat_odf = np.dot(odf_matrix, flat_beta.T) return flat_odf.T.reshape(self.beta.shape[:-1] + (odf_matrix.shape[0], )) def predict(self, gtab=None, response=None, S0=None): """ Predict the signal based on the SFM parameters Parameters ---------- gtab : GradientTable, optional The bvecs/bvals to predict the signal on. Default: the gtab from the model object. response : list of 3 elements, optional The eigenvalues of a tensor which will serve as a kernel function. Default: the response of the model object. Default to use `model.response`. S0 : float or array, optional The non-diffusion-weighted signal. Default: use the S0 of the data Returns ------- pred_sig : ndarray The signal predicted in each voxel/direction """ if response is None: response = self.model.response if gtab is None: _matrix = self.model.design_matrix gtab = self.model.gtab # The only thing we can't change at this point is the sphere we use # (which sets the width of our design matrix): else: _matrix = sfm_design_matrix(gtab, self.model.sphere, response) # Get them all at once: beta_all = self.beta.reshape(-1, self.beta.shape[-1]) pred_weighted = np.dot(_matrix, beta_all.T).T pred_weighted = pred_weighted.reshape(self.beta.shape[:-1] + (_matrix.shape[0],)) if S0 is None: S0 = self.S0 if isinstance(S0, np.ndarray): S0 = S0[..., None] iso_signal = self.iso.predict(gtab) pre_pred_sig = S0 * (pred_weighted + iso_signal.reshape(pred_weighted.shape)) pred_sig = np.zeros(pre_pred_sig.shape[:-1] + (gtab.bvals.shape[0],)) pred_sig[..., ~gtab.b0s_mask] = pre_pred_sig pred_sig[..., gtab.b0s_mask] = S0 return pred_sig.squeeze() dipy-0.10.1/dipy/reconst/shm.py000077500000000000000000001026011263041327500163270ustar00rootroot00000000000000""" Tools for using spherical harmonic models to fit diffusion data References ---------- Aganj, I., et. al. 2009. ODF Reconstruction in Q-Ball Imaging With Solid Angle Consideration. Descoteaux, M., et. al. 2007. Regularized, fast, and robust analytical Q-ball imaging. Tristan-Vega, A., et. al. 2010. A new methodology for estimation of fiber populations in white matter of the brain with Funk-Radon transform. Tristan-Vega, A., et. al. 2009. Estimation of fiber orientation probability density functions in high angular resolution diffusion imaging. Note about the Transpose: In the literature the matrix representation of these methods is often written as Y = Bx where B is some design matrix and Y and x are column vectors. In our case the input data, a dwi stored as a nifti file for example, is stored as row vectors (ndarrays) of the form (x, y, z, n), where n is the number of diffusion directions. We could transpose and reshape the data to be (n, x*y*z), so that we could directly plug it into the above equation. However, I have chosen to keep the data as is and implement the relevant equations rewritten in the following form: Y.T = x.T B.T, or in python syntax data = np.dot(sh_coef, B.T) where data is Y.T and sh_coef is x.T. """ import numpy as np from numpy import concatenate, diag, diff, empty, eye, sqrt, unique, dot from numpy.linalg import pinv, svd from numpy.random import randint from dipy.reconst.odf import OdfModel, OdfFit from dipy.core.geometry import cart2sphere from dipy.core.onetime import auto_attr from dipy.reconst.cache import Cache from distutils.version import LooseVersion import scipy from scipy.special import lpn, lpmv, gammaln if LooseVersion(scipy.version.short_version) >= LooseVersion('0.15.0'): SCIPY_15_PLUS = True import scipy.special as sps else: SCIPY_15_PLUS = False def _copydoc(obj): def bandit(f): f.__doc__ = obj.__doc__ return f return bandit def forward_sdeconv_mat(r_rh, n): """ Build forward spherical deconvolution matrix Parameters ---------- r_rh : ndarray Rotational harmonics coefficients for the single fiber response function. Each element `rh[i]` is associated with spherical harmonics of degree `2*i`. n : ndarray The degree of spherical harmonic function associated with each row of the deconvolution matrix. Only even degrees are allowed Returns ------- R : ndarray (N, N) Deconvolution matrix with shape (N, N) """ if np.any(n % 2): raise ValueError("n has odd degrees, expecting only even degrees") return np.diag(r_rh[n // 2]) def sh_to_rh(r_sh, m, n): """ Spherical harmonics (SH) to rotational harmonics (RH) Calculate the rotational harmonic decomposition up to harmonic order `m`, degree `n` for an axially and antipodally symmetric function. Note that all ``m != 0`` coefficients will be ignored as axial symmetry is assumed. Hence, there will be ``(sh_order/2 + 1)`` non-zero coefficients. Parameters ---------- r_sh : ndarray (N,) ndarray of SH coefficients for the single fiber response function. These coefficients must correspond to the real spherical harmonic functions produced by `shm.real_sph_harm`. m : ndarray (N,) The order of the spherical harmonic function associated with each coefficient. n : ndarray (N,) The degree of the spherical harmonic function associated with each coefficient. Returns ------- r_rh : ndarray (``(sh_order + 1)*(sh_order + 2)/2``,) Rotational harmonics coefficients representing the input `r_sh` See Also -------- shm.real_sph_harm, shm.real_sym_sh_basis References ---------- .. [1] Tournier, J.D., et al. NeuroImage 2007. Robust determination of the fibre orientation distribution in diffusion MRI: Non-negativity constrained super-resolved spherical deconvolution """ mask = m == 0 # The delta function at theta = phi = 0 is known to have zero coefficients # where m != 0, therefore we need only compute the coefficients at m=0. dirac_sh = gen_dirac(0, n[mask], 0, 0) r_rh = r_sh[mask] / dirac_sh return r_rh def gen_dirac(m, n, theta, phi): """ Generate Dirac delta function orientated in (theta, phi) on the sphere The spherical harmonics (SH) representation of this Dirac is returned as coefficients to spherical harmonic functions produced by `shm.real_sph_harm`. Parameters ---------- m : ndarray (N,) The order of the spherical harmonic function associated with each coefficient. n : ndarray (N,) The degree of the spherical harmonic function associated with each coefficient. theta : float [0, 2*pi] The azimuthal (longitudinal) coordinate. phi : float [0, pi] The polar (colatitudinal) coordinate. See Also -------- shm.real_sph_harm, shm.real_sym_sh_basis Returns ------- dirac : ndarray SH coefficients representing the Dirac function. The shape of this is `(m + 2) * (m + 1) / 2`. """ return real_sph_harm(m, n, theta, phi) def spherical_harmonics(m, n, theta, phi): x = np.cos(phi) val = lpmv(m, n, x).astype(complex) val *= np.sqrt((2 * n + 1) / 4.0 / np.pi) val *= np.exp(0.5 * (gammaln(n - m + 1) - gammaln(n + m + 1))) val = val * np.exp(1j * m * theta) return val if SCIPY_15_PLUS: def spherical_harmonics(m, n, theta, phi): return sps.sph_harm(m, n, theta, phi, dtype=complex) spherical_harmonics.__doc__ = r""" Compute spherical harmonics This may take scalar or array arguments. The inputs will be broadcasted against each other. Parameters ---------- m : int ``|m| <= n`` The order of the harmonic. n : int ``>= 0`` The degree of the harmonic. theta : float [0, 2*pi] The azimuthal (longitudinal) coordinate. phi : float [0, pi] The polar (colatitudinal) coordinate. Returns ------- y_mn : complex float The harmonic $Y^m_n$ sampled at `theta` and `phi`. Notes ----- This is a faster implementation of scipy.special.sph_harm for scipy version < 0.15.0. For scipy 0.15 and onwards, we use the scipy implementation of the function """ def real_sph_harm(m, n, theta, phi): r""" Compute real spherical harmonics. Where the real harmonic $Y^m_n$ is defined to be: Real($Y^m_n$) * sqrt(2) if m > 0 $Y^m_n$ if m == 0 Imag($Y^m_n$) * sqrt(2) if m < 0 This may take scalar or array arguments. The inputs will be broadcasted against each other. Parameters ---------- m : int ``|m| <= n`` The order of the harmonic. n : int ``>= 0`` The degree of the harmonic. theta : float [0, 2*pi] The azimuthal (longitudinal) coordinate. phi : float [0, pi] The polar (colatitudinal) coordinate. Returns -------- y_mn : real float The real harmonic $Y^m_n$ sampled at `theta` and `phi`. See Also -------- scipy.special.sph_harm """ # dipy uses a convention for theta and phi that is reversed with respect to # function signature of scipy.special.sph_harm sh = spherical_harmonics(np.abs(m), n, phi, theta) real_sh = np.where(m > 0, sh.imag, sh.real) real_sh *= np.where(m == 0, 1., np.sqrt(2)) return real_sh def real_sym_sh_mrtrix(sh_order, theta, phi): """ Compute real spherical harmonics as in mrtrix, where the real harmonic $Y^m_n$ is defined to be:: Real($Y^m_n$) if m > 0 $Y^m_n$ if m == 0 Imag($Y^|m|_n$) if m < 0 This may take scalar or array arguments. The inputs will be broadcasted against each other. Parameters ----------- sh_order : int The maximum degree or the spherical harmonic basis. theta : float [0, pi] The polar (colatitudinal) coordinate. phi : float [0, 2*pi] The azimuthal (longitudinal) coordinate. Returns -------- y_mn : real float The real harmonic $Y^m_n$ sampled at `theta` and `phi` as implemented in mrtrix. Warning: the basis is Tournier et al 2004 and 2007 is slightly different. m : array The order of the harmonics. n : array The degree of the harmonics. """ m, n = sph_harm_ind_list(sh_order) phi = np.reshape(phi, [-1, 1]) theta = np.reshape(theta, [-1, 1]) m = -m real_sh = real_sph_harm(m, n, theta, phi) real_sh /= np.where(m == 0, 1., np.sqrt(2)) return real_sh, m, n def real_sym_sh_basis(sh_order, theta, phi): """Samples a real symmetric spherical harmonic basis at point on the sphere Samples the basis functions up to order `sh_order` at points on the sphere given by `theta` and `phi`. The basis functions are defined here the same way as in fibernavigator [1]_ where the real harmonic $Y^m_n$ is defined to be: Imag($Y^m_n$) * sqrt(2) if m > 0 $Y^m_n$ if m == 0 Real($Y^|m|_n$) * sqrt(2) if m < 0 This may take scalar or array arguments. The inputs will be broadcasted against each other. Parameters ----------- sh_order : int even int > 0, max spherical harmonic degree theta : float [0, 2*pi] The azimuthal (longitudinal) coordinate. phi : float [0, pi] The polar (colatitudinal) coordinate. Returns -------- y_mn : real float The real harmonic $Y^m_n$ sampled at `theta` and `phi` m : array The order of the harmonics. n : array The degree of the harmonics. References ---------- .. [1] http://code.google.com/p/fibernavigator/ """ m, n = sph_harm_ind_list(sh_order) phi = np.reshape(phi, [-1, 1]) theta = np.reshape(theta, [-1, 1]) real_sh = real_sph_harm(m, n, theta, phi) return real_sh, m, n sph_harm_lookup = {None: real_sym_sh_basis, "mrtrix": real_sym_sh_mrtrix, "fibernav": real_sym_sh_basis} def sph_harm_ind_list(sh_order): """ Returns the degree (n) and order (m) of all the symmetric spherical harmonics of degree less then or equal to `sh_order`. The results, `m_list` and `n_list` are kx1 arrays, where k depends on sh_order. They can be passed to :func:`real_sph_harm`. Parameters ---------- sh_order : int even int > 0, max degree to return Returns ------- m_list : array orders of even spherical harmonics n_list : array degrees of even spherical harmonics See also -------- real_sph_harm """ if sh_order % 2 != 0: raise ValueError('sh_order must be an even integer >= 0') n_range = np.arange(0, sh_order + 1, 2, dtype=int) n_list = np.repeat(n_range, n_range * 2 + 1) ncoef = (sh_order + 2) * (sh_order + 1) / 2 offset = 0 m_list = empty(ncoef, 'int') for ii in n_range: m_list[offset:offset + 2 * ii + 1] = np.arange(-ii, ii + 1) offset = offset + 2 * ii + 1 # makes the arrays ncoef by 1, allows for easy broadcasting later in code return (m_list, n_list) def order_from_ncoef(ncoef): """ Given a number n of coefficients, calculate back the sh_order """ # Solve the quadratic equation derived from : # ncoef = (sh_order + 2) * (sh_order + 1) / 2 return int(-3 + np.sqrt(9 - 4 * (2-2*ncoef)))/2 def smooth_pinv(B, L): """Regularized psudo-inverse Computes a regularized least square inverse of B Parameters ---------- B : array_like (n, m) Matrix to be inverted L : array_like (n,) Returns ------- inv : ndarray (m, n) regularized least square inverse of B Notes ----- In the literature this inverse is often written $(B^{T}B+L^{2})^{-1}B^{T}$. However here this inverse is implemented using the psudo-inverse because it is more numerically stable than the direct implementation of the matrix product. """ L = diag(L) inv = pinv(concatenate((B, L))) return inv[:, :len(B)] def lazy_index(index): """Produces a lazy index Returns a slice that can be used for indexing an array, if no slice can be made index is returned as is. """ index = np.array(index) assert index.ndim == 1 if index.dtype.kind == 'b': index = index.nonzero()[0] if len(index) == 1: return slice(index[0], index[0] + 1) step = unique(diff(index)) if len(step) != 1 or step[0] == 0: return index else: return slice(index[0], index[-1] + 1, step[0]) def _gfa_sh(coef, sh0_index=0): """The gfa of the odf, computed from the spherical harmonic coefficients This is a private function because it only works for coefficients of normalized sh bases. Parameters ---------- coef : array The coefficients, using a normalized sh basis, that represent each odf. sh0_index : int The index of the coefficient associated with the 0th order sh harmonic. Returns ------- gfa_values : array The gfa of each odf. """ coef_sq = coef**2 numer = coef_sq[..., sh0_index] denom = (coef_sq).sum(-1) # The sum of the square of the coefficients being zero is the same as all # the coefficients being zero allzero = denom == 0 # By adding 1 to numer and denom where both and are 0, we prevent 0/0 numer = numer + allzero denom = denom + allzero return np.sqrt(1. - (numer / denom)) class SphHarmModel(OdfModel, Cache): """To be subclassed by all models that return a SphHarmFit when fit.""" def sampling_matrix(self, sphere): """The matrix needed to sample ODFs from coefficients of the model. Parameters ---------- sphere : Sphere Points used to sample ODF. Returns ------- sampling_matrix : array The size of the matrix will be (N, M) where N is the number of vertices on sphere and M is the number of coefficients needed by the model. """ sampling_matrix = self.cache_get("sampling_matrix", sphere) if sampling_matrix is None: sh_order = self.sh_order theta = sphere.theta phi = sphere.phi sampling_matrix, m, n = real_sym_sh_basis(sh_order, theta, phi) self.cache_set("sampling_matrix", sphere, sampling_matrix) return sampling_matrix class QballBaseModel(SphHarmModel): """To be subclassed by Qball type models.""" def __init__(self, gtab, sh_order, smooth=0.006, min_signal=1., assume_normed=False): """Creates a model that can be used to fit or sample diffusion data Arguments --------- gtab : GradientTable Diffusion gradients used to acquire data sh_order : even int >= 0 the spherical harmonic order of the model smooth : float between 0 and 1, optional The regularization parameter of the model min_signal : float, > 0, optional During fitting, all signal values less than `min_signal` are clipped to `min_signal`. This is done primarily to avoid values less than or equal to zero when taking logs. assume_normed : bool, optional If True, clipping and normalization of the data with respect to the mean B0 signal are skipped during mode fitting. This is an advanced feature and should be used with care. See Also -------- normalize_data """ SphHarmModel.__init__(self, gtab) self._where_b0s = lazy_index(gtab.b0s_mask) self._where_dwi = lazy_index(~gtab.b0s_mask) self.assume_normed = assume_normed self.min_signal = min_signal x, y, z = gtab.gradients[self._where_dwi].T r, theta, phi = cart2sphere(x, y, z) B, m, n = real_sym_sh_basis(sh_order, theta[:, None], phi[:, None]) L = -n * (n + 1) legendre0 = lpn(sh_order, 0)[0] F = legendre0[n] self.sh_order = sh_order self.B = B self.m = m self.n = n self._set_fit_matrix(B, L, F, smooth) def _set_fit_matrix(self, *args): """Should be set in a subclass and is called by __init__""" msg = "User must implement this method in a subclass" raise NotImplementedError(msg) def fit(self, data, mask=None): """Fits the model to diffusion data and returns the model fit""" # Normalize the data and fit coefficients if not self.assume_normed: data = normalize_data(data, self._where_b0s, self.min_signal) # Compute coefficients using abstract method coef = self._get_shm_coef(data) # Apply the mask to the coefficients if mask is not None: mask = np.asarray(mask, dtype=bool) coef *= mask[..., None] return SphHarmFit(self, coef, mask) class SphHarmFit(OdfFit): """Diffusion data fit to a spherical harmonic model""" def __init__(self, model, shm_coef, mask): self.model = model self._shm_coef = shm_coef self.mask = mask @property def shape(self): return self._shm_coef.shape[:-1] def __getitem__(self, index): """Allowing indexing into fit""" # Index shm_coefficients if isinstance(index, tuple): coef_index = index + (Ellipsis,) else: coef_index = index new_coef = self._shm_coef[coef_index] # Index mask if self.mask is not None: new_mask = self.mask[index] assert new_mask.shape == new_coef.shape[:-1] else: new_mask = None return SphHarmFit(self.model, new_coef, new_mask) def odf(self, sphere): """Samples the odf function on the points of a sphere Parameters ---------- sphere : Sphere The points on which to sample the odf. Returns ------- values : ndarray The value of the odf on each point of `sphere`. """ B = self.model.sampling_matrix(sphere) return dot(self._shm_coef, B.T) @auto_attr def gfa(self): return _gfa_sh(self._shm_coef, 0) @property def shm_coeff(self): """The spherical harmonic coefficients of the odf Make this a property for now, if there is a usecase for modifying the coefficients we can add a setter or expose the coefficients more directly """ return self._shm_coef def predict(self, gtab=None, S0=1.0): """ Predict the diffusion signal from the model coefficients. Parameters ---------- gtab : a GradientTable class instance The directions and bvalues on which prediction is desired S0 : float array The mean non-diffusion-weighted signal in each voxel. Default: 1.0 in all voxels """ if not hasattr(self.model, 'predict'): msg = "This model does not have prediction implemented yet" raise NotImplementedError(msg) return self.model.predict(self.shm_coeff, gtab, S0) class CsaOdfModel(QballBaseModel): """Implementation of Constant Solid Angle reconstruction method. References ---------- .. [1] Aganj, I., et. al. 2009. ODF Reconstruction in Q-Ball Imaging With Solid Angle Consideration. """ min = .001 max = .999 _n0_const = .5 / np.sqrt(np.pi) def _set_fit_matrix(self, B, L, F, smooth): """The fit matrix, is used by fit_coefficients to return the coefficients of the odf""" invB = smooth_pinv(B, sqrt(smooth) * L) L = L[:, None] F = F[:, None] self._fit_matrix = (F * L) / (8 * np.pi) * invB def _get_shm_coef(self, data, mask=None): """Returns the coefficients of the model""" data = data[..., self._where_dwi] data = data.clip(self.min, self.max) loglog_data = np.log(-np.log(data)) sh_coef = dot(loglog_data, self._fit_matrix.T) sh_coef[..., 0] = self._n0_const return sh_coef class OpdtModel(QballBaseModel): """Implementation of Orientation Probability Density Transform reconstruction method. References ---------- .. [1] Tristan-Vega, A., et. al. 2010. A new methodology for estimation of fiber populations in white matter of the brain with Funk-Radon transform. .. [2] Tristan-Vega, A., et. al. 2009. Estimation of fiber orientation probability density functions in high angular resolution diffusion imaging. """ def _set_fit_matrix(self, B, L, F, smooth): invB = smooth_pinv(B, sqrt(smooth) * L) L = L[:, None] F = F[:, None] delta_b = F * L * invB delta_q = 4 * F * invB self._fit_matrix = delta_b, delta_q def _get_shm_coef(self, data, mask=None): """Returns the coefficients of the model""" delta_b, delta_q = self._fit_matrix return _slowadc_formula(data[..., self._where_dwi], delta_b, delta_q) def _slowadc_formula(data, delta_b, delta_q): """formula used in SlowAdcOpdfModel""" logd = -np.log(data) return dot(logd * (1.5 - logd) * data, delta_q.T) - dot(data, delta_b.T) class QballModel(QballBaseModel): """Implementation of regularized Qball reconstruction method. References ---------- .. [1] Descoteaux, M., et. al. 2007. Regularized, fast, and robust analytical Q-ball imaging. """ def _set_fit_matrix(self, B, L, F, smooth): invB = smooth_pinv(B, sqrt(smooth) * L) F = F[:, None] self._fit_matrix = F * invB def _get_shm_coef(self, data, mask=None): """Returns the coefficients of the model""" return dot(data[..., self._where_dwi], self._fit_matrix.T) def normalize_data(data, where_b0, min_signal=1., out=None): """Normalizes the data with respect to the mean b0 """ if out is None: out = np.array(data, dtype='float32', copy=True) else: if out.dtype.kind != 'f': raise ValueError("out must be floating point") out[:] = data out.clip(min_signal, out=out) b0 = out[..., where_b0].mean(-1) out /= b0[..., None] return out def hat(B): """Returns the hat matrix for the design matrix B """ U, S, V = svd(B, False) H = dot(U, U.T) return H def lcr_matrix(H): """Returns a matrix for computing leveraged, centered residuals from data if r = (d-Hd), the leveraged centered residuals are lcr = (r/l)-mean(r/l) ruturns the matrix R, such lcr = Rd """ if H.ndim != 2 or H.shape[0] != H.shape[1]: raise ValueError('H should be a square matrix') leverages = sqrt(1 - H.diagonal()) leverages = leverages[:, None] R = (eye(len(H)) - H) / leverages return R - R.mean(0) def bootstrap_data_array(data, H, R, permute=None): """Applies the Residual Bootstraps to the data given H and R data must be normalized, ie 0 < data <= 1 This function, and the bootstrap_data_voxel function, calculate residual-bootsrap samples given a Hat matrix and a Residual matrix. These samples can be used for non-parametric statistics or for bootstrap probabilistic tractography: References ---------- .. [1] J. I. Berman, et al., "Probabilistic streamline q-ball tractography using the residual bootstrap" 2008. .. [2] HA Haroon, et al., "Using the model-based residual bootstrap to quantify uncertainty in fiber orientations from Q-ball analysis" 2009. .. [3] B. Jeurissen, et al., "Probabilistic Fiber Tracking Using the Residual Bootstrap with Constrained Spherical Deconvolution" 2011. """ if permute is None: permute = randint(data.shape[-1], size=data.shape[-1]) assert R.shape == H.shape assert len(permute) == R.shape[-1] R = R[permute] data = dot(data, (H + R).T) return data def bootstrap_data_voxel(data, H, R, permute=None): """Like bootstrap_data_array but faster when for a single voxel data must be 1d and normalized """ if permute is None: permute = randint(data.shape[-1], size=data.shape[-1]) r = dot(data, R.T) boot_data = dot(data, H.T) boot_data += r[permute] return boot_data class ResidualBootstrapWrapper(object): """Returns a residual bootstrap sample of the signal_object when indexed Wraps a signal_object, this signal object can be an interpolator. When indexed, the the wrapper indexes the signal_object to get the signal. There wrapper than samples the residual boostrap distribution of signal and returns that sample. """ def __init__(self, signal_object, B, where_dwi, min_signal=1.): """Builds a ResidualBootstrapWapper Given some linear model described by B, the design matrix, and a signal_object, returns an object which can sample the residual bootstrap distribution of the signal. We assume that the signals are normalized so we clip the bootsrap samples to be between `min_signal` and 1. Parameters ---------- signal_object : some object that can be indexed This object should return diffusion weighted signals when indexed. B : ndarray, ndim=2 The design matrix of the spherical harmonics model used to fit the data. This is the model that will be used to compute the residuals and sample the residual bootstrap distribution where_dwi : indexing object to find diffusion weighted signals from signal min_signal : float The lowest allowable signal. """ self._signal_object = signal_object self._H = hat(B) self._R = lcr_matrix(self._H) self._min_signal = min_signal self._where_dwi = where_dwi self.data = signal_object.data self.voxel_size = signal_object.voxel_size def __getitem__(self, index): """Indexes self._signal_object and bootstraps the result""" signal = self._signal_object[index].copy() dwi_signal = signal[self._where_dwi] boot_signal = bootstrap_data_voxel(dwi_signal, self._H, self._R) boot_signal.clip(self._min_signal, 1., out=boot_signal) signal[self._where_dwi] = boot_signal return signal def sf_to_sh(sf, sphere, sh_order=4, basis_type=None, smooth=0.0): """Spherical function to spherical harmonics (SH). Parameters ---------- sf : ndarray Values of a function on the given `sphere`. sphere : Sphere The points on which the sf is defined. sh_order : int, optional Maximum SH order in the SH fit. For `sh_order`, there will be ``(sh_order + 1) * (sh_order_2) / 2`` SH coefficients (default 4). basis_type : {None, 'mrtrix', 'fibernav'} ``None`` for the default dipy basis, ``mrtrix`` for the MRtrix basis, and ``fibernav`` for the FiberNavigator basis (default ``None``). smooth : float, optional Lambda-regularization in the SH fit (default 0.0). Returns ------- sh : ndarray SH coefficients representing the input function. """ sph_harm_basis = sph_harm_lookup.get(basis_type) if sph_harm_basis is None: raise ValueError("Invalid basis name.") B, m, n = sph_harm_basis(sh_order, sphere.theta, sphere.phi) L = -n * (n + 1) invB = smooth_pinv(B, sqrt(smooth) * L) sh = np.dot(sf, invB.T) return sh def sh_to_sf(sh, sphere, sh_order, basis_type=None): """Spherical harmonics (SH) to spherical function (SF). Parameters ---------- sh : ndarray SH coefficients representing a spherical function. sphere : Sphere The points on which to sample the spherical function. sh_order : int, optional Maximum SH order in the SH fit. For `sh_order`, there will be ``(sh_order + 1) * (sh_order_2) / 2`` SH coefficients (default 4). basis_type : {None, 'mrtrix', 'fibernav'} ``None`` for the default dipy basis, ``mrtrix`` for the MRtrix basis, and ``fibernav`` for the FiberNavigator basis (default ``None``). Returns ------- sf : ndarray Spherical function values on the `sphere`. """ sph_harm_basis = sph_harm_lookup.get(basis_type) if sph_harm_basis is None: raise ValueError("Invalid basis name.") B, m, n = sph_harm_basis(sh_order, sphere.theta, sphere.phi) sf = np.dot(sh, B.T) return sf def sh_to_sf_matrix(sphere, sh_order, basis_type=None, return_inv=True, smooth=0): """ Matrix that transforms Spherical harmonics (SH) to spherical function (SF). Parameters ---------- sphere : Sphere The points on which to sample the spherical function. sh_order : int, optional Maximum SH order in the SH fit. For `sh_order`, there will be ``(sh_order + 1) * (sh_order_2) / 2`` SH coefficients (default 4). basis_type : {None, 'mrtrix', 'fibernav'} ``None`` for the default dipy basis, ``mrtrix`` for the MRtrix basis, and ``fibernav`` for the FiberNavigator basis (default ``None``). return_inv : bool If True then the inverse of the matrix is also returned smooth : float, optional Lambda-regularization in the SH fit (default 0.0). Returns ------- B : ndarray Matrix that transforms spherical harmonics to spherical function ``sf = np.dot(sh, B)``. invB : ndarray Inverse of B. """ sph_harm_basis = sph_harm_lookup.get(basis_type) if sph_harm_basis is None: raise ValueError("Invalid basis name.") B, m, n = sph_harm_basis(sh_order, sphere.theta, sphere.phi) if return_inv: L = -n * (n + 1) invB = smooth_pinv(B, np.sqrt(smooth) * L) return B.T, invB.T return B.T def calculate_max_order(n_coeffs): """Calculate the maximal harmonic order, given that you know the number of parameters that were estimated. Parameters ---------- n_coeffs : int The number of SH coefficients Returns ------- L : int The maximal SH order, given the number of coefficients Notes ----- The calculation in this function proceeds according to the following logic: .. math:: n = \frac{1}{2} (L+1) (L+2) \rarrow 2n = L^2 + 3L + 2 \rarrow L^2 + 3L + 2 - 2n = 0 \rarrow L^2 + 3L + 2(1-n) = 0 \rarrow L_{1,2} = \frac{-3 \pm \sqrt{9 - 8 (1-n)}}{2} \rarrow L{1,2} = \frac{-3 \pm \sqrt{1 + 8n}}{2} Finally, the positive value is chosen between the two options. """ L1 = (-3 + np.sqrt(1 + 8 * n_coeffs)) / 2 L2 = (-3 - np.sqrt(1 + 8 * n_coeffs)) / 2 return np.int(max([L1, L2])) def anisotropic_power(sh_coeffs, norm_factor=0.00001, power=2, non_negative=True): """Calculates anisotropic power map with a given SH coefficient matrix Parameters ---------- sh_coeffs : ndarray A ndarray where the last dimension is the SH coeff estimates for that voxel. norm_factor: float, optional The value to normalize the ap values. Default is 10^-5. power : int, optional The degree to which power maps are calculated. Default: 2. non_negative: bool, optional Whether to rectify the resulting map to be non-negative. Default: True. Returns ------- log_ap : ndarray The log of the resulting power image. Notes ---------- Calculate AP image based on a IxJxKxC SH coeffecient matrix based on the equation: .. math:: AP = \sum_{l=2,4,6,...}{\frac{1}{2l+1} \sum_{m=-l}^l{|a_{l,m}|^n}} Where the last dimension, C, is made of a flattened array of $l$x$m$ coefficients, where $l$ are the SH orders, and $m = 2l+1$, So l=1 has 1 coeffecient, l=2 has 5, ... l=8 has 17 and so on. A l=2 SH coeffecient matrix will then be composed of a IxJxKx6 volume. The power, $n$ is usually set to $n=2$. The final AP image is then shifted by -log(normal_factor), to be strictly non-negative. Remaining values < 0 are discarded (set to 0), per default, and this option is controlled throug the `non_negative` key word argument. References ---------- .. [1] Dell'Acqua, F., Lacerda, L., Catani, M., Simmons, A., 2014. Anisotropic Power Maps: A diffusion contrast to reveal low anisotropy tissues from HARDI data, in: Proceedings of International Society for Magnetic Resonance in Medicine. Milan, Italy. """ dim = sh_coeffs.shape[:-1] n_coeffs = sh_coeffs.shape[-1] max_order = calculate_max_order(n_coeffs) ap = np.zeros(dim) n_start = 1 for L in range(2, max_order + 2, 2): n_stop = n_start + (2 * L + 1) ap_i = np.mean(np.abs(sh_coeffs[..., n_start:n_stop]) ** power, -1) ap += ap_i n_start = n_stop # Shift the map to be mostly non-negative: log_ap = np.log(ap) - np.log(norm_factor) # Deal with residual negative values: if non_negative: if isinstance(log_ap, np.ndarray): # zero all values < 0 log_ap[log_ap < 0] = 0 else: # assume this is a singleton float (input was 1D): if log_ap < 0: return 0 return log_ap dipy-0.10.1/dipy/reconst/shore.py000066400000000000000000000677251263041327500166760ustar00rootroot00000000000000from __future__ import division from warnings import warn from math import factorial import numpy as np from scipy.special import genlaguerre, gamma, hyp2f1 from .cache import Cache from .multi_voxel import multi_voxel_fit from .shm import real_sph_harm from ..core.geometry import cart2sphere from ..utils.optpkg import optional_package cvxopt, have_cvxopt, _ = optional_package("cvxopt") if have_cvxopt: import cvxopt.solvers class ShoreModel(Cache): r"""Simple Harmonic Oscillator based Reconstruction and Estimation (SHORE) [1]_ of the diffusion signal. The main idea is to model the diffusion signal as a linear combination of continuous functions $\phi_i$, ..math:: :nowrap: \begin{equation} S(\mathbf{q})= \sum_{i=0}^I c_{i} \phi_{i}(\mathbf{q}). \end{equation} where $\mathbf{q}$ is the wavector which corresponds to different gradient directions. Numerous continuous functions $\phi_i$ can be used to model $S$. Some are presented in [2,3,4]_. From the $c_i$ coefficients, there exist analytical formulae to estimate the ODF, the return to the origin porbability (RTOP), the mean square displacement (MSD), amongst others [5]_. References ---------- .. [1] Ozarslan E. et. al, "Simple harmonic oscillator based reconstruction and estimation for one-dimensional q-space magnetic resonance 1D-SHORE)", eapoc Intl Soc Mag Reson Med, vol. 16, p. 35., 2008. .. [2] Merlet S. et. al, "Continuous diffusion signal, EAP and ODF estimation via Compressive Sensing in diffusion MRI", Medical Image Analysis, 2013. .. [3] Rathi Y. et. al, "Sparse multi-shell diffusion imaging", MICCAI, 2011. .. [4] Cheng J. et. al, "Theoretical Analysis and eapactical Insights on EAP Estimation via a Unified HARDI Framework", MICCAI workshop on Computational Diffusion MRI, 2011. .. [5] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. Notes ----- The implementation of SHORE depends on CVXOPT (http://cvxopt.org/). This software is licensed under the GPL (see: http://cvxopt.org/copyright.html).and you may be subject to this license when using SHORE. """ def __init__(self, gtab, radial_order=6, zeta=700, lambdaN=1e-8, lambdaL=1e-8, tau=1. / (4 * np.pi ** 2), constrain_e0=False, positive_constraint=False, pos_grid=11, pos_radius=20e-03 ): r""" Analytical and continuous modeling of the diffusion signal with respect to the SHORE basis [1,2]_. This implementation is a modification of SHORE presented in [1]_. The modification was made to obtain the same ordering of the basis presented in [2,3]_. The main idea is to model the diffusion signal as a linear combination of continuous functions $\phi_i$, ..math:: :nowrap: \begin{equation} S(\mathbf{q})= \sum_{i=0}^I c_{i} \phi_{i}(\mathbf{q}). \end{equation} where $\mathbf{q}$ is the wavector which corresponds to different gradient directions. From the $c_i$ coefficients, there exists an analytical formula to estimate the ODF. Parameters ---------- gtab : GradientTable, gradient directions and bvalues container class radial_order : unsigned int, an even integer that represent the order of the basis zeta : unsigned int, scale factor lambdaN : float, radial regularisation constant lambdaL : float, angular regularisation constant tau : float, diffusion time. By default the value that makes q equal to the square root of the b-value. constrain_e0 : bool, Constrain the optimization such that E(0) = 1. positive_constraint : bool, Constrain the propagator to be positive. pos_grid : int, Grid that define the points of the EAP in which we want to enforce positivity. pos_radius : float, Radius of the grid of the EAP in which enforce positivity in millimeters. By default 20e-03 mm. References ---------- .. [1] Merlet S. et al., "Continuous diffusion signal, EAP and ODF estimation via Compressive Sensing in diffusion MRI", Medical Image Analysis, 2013. .. [2] Cheng J. et al., "Theoretical Analysis and eapactical Insights on EAP Estimation via a Unified HARDI Framework", MICCAI workshop on Computational Diffusion MRI, 2011. .. [3] Ozarslan E. et al., "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. Examples -------- In this example, where the data, gradient table and sphere tessellation used for reconstruction are provided, we model the diffusion signal with respect to the SHORE basis and compute the real and analytical ODF. from dipy.data import get_data,get_sphere sphere = get_sphere('symmetric724') fimg, fbvals, fbvecs = get_data('ISBI_testing_2shells_table') bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) gtab = gradient_table(bvals, bvecs) from dipy.sims.voxel import SticksAndBall data, golden_directions = SticksAndBall(gtab, d=0.0015, S0=1, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) from dipy.reconst.canal import ShoreModel radial_order = 4 zeta = 700 asm = ShoreModel(gtab, radial_order=radial_order, zeta=zeta, lambdaN=1e-8, lambdaL=1e-8) asmfit = asm.fit(data) odf= asmfit.odf(sphere) """ self.bvals = gtab.bvals self.bvecs = gtab.bvecs self.gtab = gtab self.constrain_e0 = constrain_e0 if radial_order > 0 and not(bool(radial_order % 2)): self.radial_order = radial_order else: msg = "radial_order must be a non-zero even positive number." raise ValueError(msg) self.zeta = zeta self.lambdaL = lambdaL self.lambdaN = lambdaN if (gtab.big_delta is None) or (gtab.small_delta is None): self.tau = tau else: self.tau = gtab.big_delta - gtab.small_delta / 3.0 if positive_constraint and not(constrain_e0): msg = "Constrain_e0 must be True to enfore positivity." raise ValueError(msg) self.positive_constraint = positive_constraint self.pos_grid = pos_grid self.pos_radius = pos_radius @multi_voxel_fit def fit(self, data): Lshore = l_shore(self.radial_order) Nshore = n_shore(self.radial_order) # Generate the SHORE basis M = self.cache_get('shore_matrix', key=self.gtab) if M is None: M = shore_matrix( self.radial_order, self.zeta, self.gtab, self.tau) self.cache_set('shore_matrix', self.gtab, M) MpseudoInv = self.cache_get('shore_matrix_reg_pinv', key=self.gtab) if MpseudoInv is None: MpseudoInv = np.dot( np.linalg.inv(np.dot(M.T, M) + self.lambdaN * Nshore + self.lambdaL * Lshore), M.T) self.cache_set('shore_matrix_reg_pinv', self.gtab, MpseudoInv) # Compute the signal coefficients in SHORE basis if not self.constrain_e0: coef = np.dot(MpseudoInv, data) signal_0 = 0 for n in range(int(self.radial_order / 2) + 1): signal_0 += ( coef[n] * (genlaguerre(n, 0.5)(0) * ( (factorial(n)) / (2 * np.pi * (self.zeta ** 1.5) * gamma(n + 1.5)) ) ** 0.5) ) coef = coef / signal_0 else: data = data / data[self.gtab.b0s_mask].mean() # If cvxopt is not available, bail (scipy is ~100 times slower) if not have_cvxopt: raise ValueError( 'CVXOPT package needed to enforce constraints') w_s = "The implementation of SHORE depends on CVXOPT " w_s += " (http://cvxopt.org/). This software is licensed " w_s += "under the GPL (see: http://cvxopt.org/copyright.html) " w_s += " and you may be subject to this license when using SHORE." warn(w_s) M0 = M[self.gtab.b0s_mask, :] M0_mean = M0.mean(0)[None, :] Mprime = np.r_[M0_mean, M[~self.gtab.b0s_mask, :]] Q = cvxopt.matrix(np.ascontiguousarray( np.dot(Mprime.T, Mprime) + self.lambdaN * Nshore + self.lambdaL * Lshore )) data_b0 = data[self.gtab.b0s_mask].mean() data_single_b0 = np.r_[ data_b0, data[~self.gtab.b0s_mask]] / data_b0 p = cvxopt.matrix(np.ascontiguousarray( -1 * np.dot(Mprime.T, data_single_b0)) ) cvxopt.solvers.options['show_progress'] = False if not(self.positive_constraint): G = None h = None else: lg = int(np.floor(self.pos_grid ** 3 / 2)) G = self.cache_get( 'shore_matrix_positive_constraint', key=(self.pos_grid, self.pos_radius)) if G is None: v, t = create_rspace(self.pos_grid, self.pos_radius) psi = shore_matrix_pdf( self.radial_order, self.zeta, t[:lg]) G = cvxopt.matrix(-1 * psi) self.cache_set( 'shore_matrix_positive_constraint', (self.pos_grid, self.pos_radius), G) h = cvxopt.matrix((1e-10) * np.ones((lg)), (lg, 1)) A = cvxopt.matrix(np.ascontiguousarray(M0_mean)) b = cvxopt.matrix(np.array([1.])) sol = cvxopt.solvers.qp(Q, p, G, h, A, b) if sol['status'] != 'optimal': warn('Optimization did not find a solution') coef = np.array(sol['x'])[:, 0] return ShoreFit(self, coef) class ShoreFit(): def __init__(self, model, shore_coef): """ Calculates diffusion properties for a single voxel Parameters ---------- model : object, AnalyticalModel shore_coef : 1d ndarray, shore coefficients """ self.model = model self._shore_coef = shore_coef self.gtab = model.gtab self.radial_order = model.radial_order self.zeta = model.zeta def pdf_grid(self, gridsize, radius_max): r""" Applies the analytical FFT on $S$ to generate the diffusion propagator. This is calculated on a discrete 3D grid in order to obtain an EAP similar to that which is obtained with DSI. Parameters ---------- gridsize : unsigned int dimension of the propagator grid radius_max : float maximal radius in which to compute the propagator Returns ------- eap : ndarray the ensemble average propagator in the 3D grid """ # Create the grid in which to compute the pdf rgrid_rtab = self.model.cache_get( 'pdf_grid', key=(gridsize, radius_max)) if rgrid_rtab is None: rgrid_rtab = create_rspace(gridsize, radius_max) self.model.cache_set( 'pdf_grid', (gridsize, radius_max), rgrid_rtab) rgrid, rtab = rgrid_rtab psi = self.model.cache_get( 'shore_matrix_pdf', key=(gridsize, radius_max)) if psi is None: psi = shore_matrix_pdf(self.radial_order, self.zeta, rtab) self.model.cache_set( 'shore_matrix_pdf', (gridsize, radius_max), psi) propagator = np.dot(psi, self._shore_coef) eap = np.empty((gridsize, gridsize, gridsize), dtype=float) eap[tuple(rgrid.astype(int).T)] = propagator eap *= (2 * radius_max / (gridsize - 1)) ** 3 return eap def pdf(self, r_points): """ Diffusion propagator on a given set of real points. if the array r_points is non writeable, then intermediate results are cached for faster recalculation """ if not r_points.flags.writeable: psi = self.model.cache_get( 'shore_matrix_pdf', key=hash(r_points.data)) else: psi = None if psi is None: psi = shore_matrix_pdf(self.radial_order, self.zeta, r_points) if not r_points.flags.writeable: self.model.cache_set( 'shore_matrix_pdf', hash(r_points.data), psi) eap = np.dot(psi, self._shore_coef) return np.clip(eap, 0, eap.max()) def odf_sh(self): r""" Calculates the real analytical ODF in terms of Spherical Harmonics. """ # Number of Spherical Harmonics involved in the estimation J = (self.radial_order + 1) * (self.radial_order + 2) // 2 # Compute the Spherical Harmonics Coefficients c_sh = np.zeros(J) counter = 0 for l in range(0, self.radial_order + 1, 2): for n in range(l, int((self.radial_order + l) / 2) + 1): for m in range(-l, l + 1): j = int(l + m + (2 * np.array(range(0, l, 2)) + 1).sum()) Cnl = ((-1) ** (n - l / 2)) / (2.0 * (4.0 * np.pi ** 2 * self.zeta) ** (3.0 / 2.0)) * ((2.0 * ( 4.0 * np.pi ** 2 * self.zeta) ** (3.0 / 2.0) * factorial(n - l)) / (gamma(n + 3.0 / 2.0))) ** (1.0 / 2.0) Gnl = (gamma(l / 2 + 3.0 / 2.0) * gamma(3.0 / 2.0 + n)) / (gamma( l + 3.0 / 2.0) * factorial(n - l)) * (1.0 / 2.0) ** (-l / 2 - 3.0 / 2.0) Fnl = hyp2f1(-n + l, l / 2 + 3.0 / 2.0, l + 3.0 / 2.0, 2.0) c_sh[j] += self._shore_coef[counter] * Cnl * Gnl * Fnl counter += 1 return c_sh def odf(self, sphere): r""" Calculates the ODF for a given discrete sphere. """ upsilon = self.model.cache_get('shore_matrix_odf', key=sphere) if upsilon is None: upsilon = shore_matrix_odf( self.radial_order, self.zeta, sphere.vertices) self.model.cache_set('shore_matrix_odf', sphere, upsilon) odf = np.dot(upsilon, self._shore_coef) return odf def rtop_signal(self): r""" Calculates the analytical return to origin probability (RTOP) from the signal [1]_. References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ rtop = 0 c = self._shore_coef for n in range(int(self.radial_order / 2) + 1): rtop += c[n] * (-1) ** n * \ ((16 * np.pi * self.zeta ** 1.5 * gamma(n + 1.5)) / ( factorial(n))) ** 0.5 return np.clip(rtop, 0, rtop.max()) def rtop_pdf(self): r""" Calculates the analytical return to origin probability (RTOP) from the pdf [1]_. References ---------- .. [1] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. """ rtop = 0 c = self._shore_coef for n in range(int(self.radial_order / 2) + 1): rtop += c[n] * (-1) ** n * \ ((4 * np.pi ** 2 * self.zeta ** 1.5 * factorial(n)) / (gamma(n + 1.5))) ** 0.5 * \ genlaguerre(n, 0.5)(0) return np.clip(rtop, 0, rtop.max()) def msd(self): r""" Calculates the analytical mean squared displacement (MSD) [1]_ ..math:: :nowrap: \begin{equation} MSD:{DSI}=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} P(\hat{\mathbf{r}}) \cdot \hat{\mathbf{r}}^{2} \ dr_x \ dr_y \ dr_z \end{equation} where $\hat{\mathbf{r}}$ is a point in the 3D propagator space (see Wu et. al [1]_). References ---------- .. [1] Wu Y. et. al, "Hybrid diffusion imaging", NeuroImage, vol 36, p. 617-629, 2007. """ msd = 0 c = self._shore_coef for n in range(int(self.radial_order / 2) + 1): msd += c[n] * (-1) ** n *\ (9 * (gamma(n + 1.5)) / (8 * np.pi ** 6 * self.zeta ** 3.5 * factorial(n))) ** 0.5 *\ hyp2f1(-n, 2.5, 1.5, 2) return np.clip(msd, 0, msd.max()) def fitted_signal(self): """ The fitted signal. """ phi = self.model.cache_get('shore_matrix', key=self.model.gtab) return np.dot(phi, self._shore_coef) @property def shore_coeff(self): """The SHORE coefficients """ return self._shore_coef def shore_matrix(radial_order, zeta, gtab, tau=1 / (4 * np.pi ** 2)): r"""Compute the SHORE matrix for modified Merlet's 3D-SHORE [1]_ ..math:: :nowrap: \begin{equation} \textbf{E}(q\textbf{u})=\sum_{l=0, even}^{N_{max}} \sum_{n=l}^{(N_{max}+l)/2} \sum_{m=-l}^l c_{nlm} \phi_{nlm}(q\textbf{u}) \end{equation} where $\phi_{nlm}$ is ..math:: :nowrap: \begin{equation} \phi_{nlm}^{SHORE}(q\textbf{u})=\Biggl[\dfrac{2(n-l)!} {\zeta^{3/2} \Gamma(n+3/2)} \Biggr]^{1/2} \Biggl(\dfrac{q^2}{\zeta}\Biggr)^{l/2} exp\Biggl(\dfrac{-q^2}{2\zeta}\Biggr) L^{l+1/2}_{n-l} \Biggl(\dfrac{q^2}{\zeta}\Biggr) Y_l^m(\textbf{u}). \end{equation} Parameters ---------- radial_order : unsigned int, an even integer that represent the order of the basis zeta : unsigned int, scale factor gtab : GradientTable, gradient directions and bvalues container class tau : float, diffusion time. By default the value that makes q=sqrt(b). References ---------- .. [1] Merlet S. et. al, "Continuous diffusion signal, EAP and ODF estimation via Compressive Sensing in diffusion MRI", Medical Image Analysis, 2013. """ qvals = np.sqrt(gtab.bvals / (4 * np.pi ** 2 * tau)) qvals[gtab.b0s_mask] = 0 bvecs = gtab.bvecs qgradients = qvals[:, None] * bvecs r, theta, phi = cart2sphere(qgradients[:, 0], qgradients[:, 1], qgradients[:, 2]) theta[np.isnan(theta)] = 0 F = radial_order / 2 n_c = int(np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3))) M = np.zeros((r.shape[0], n_c)) counter = 0 for l in range(0, radial_order + 1, 2): for n in range(l, int((radial_order + l) / 2) + 1): for m in range(-l, l + 1): M[:, counter] = real_sph_harm(m, l, theta, phi) * \ genlaguerre(n - l, l + 0.5)(r ** 2 / zeta) * \ np.exp(- r ** 2 / (2.0 * zeta)) * \ _kappa(zeta, n, l) * \ (r ** 2 / zeta) ** (l / 2) counter += 1 return M def _kappa(zeta, n, l): return np.sqrt((2 * factorial(n - l)) / (zeta ** 1.5 * gamma(n + 1.5))) def shore_matrix_pdf(radial_order, zeta, rtab): r"""Compute the SHORE propagator matrix [1]_" Parameters ---------- radial_order : unsigned int, an even integer that represent the order of the basis zeta : unsigned int, scale factor rtab : array, shape (N,3) real space points in which calculates the pdf References ---------- .. [1] Merlet S. et. al, "Continuous diffusion signal, EAP and ODF estimation via Compressive Sensing in diffusion MRI", Medical Image Analysis, 2013. """ r, theta, phi = cart2sphere(rtab[:, 0], rtab[:, 1], rtab[:, 2]) theta[np.isnan(theta)] = 0 F = radial_order / 2 n_c = int(np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3))) psi = np.zeros((r.shape[0], n_c)) counter = 0 for l in range(0, radial_order + 1, 2): for n in range(l, int((radial_order + l) / 2) + 1): for m in range(-l, l + 1): psi[:, counter] = real_sph_harm(m, l, theta, phi) * \ genlaguerre(n - l, l + 0.5)(4 * np.pi ** 2 * zeta * r ** 2 ) *\ np.exp(-2 * np.pi ** 2 * zeta * r ** 2) *\ _kappa_pdf(zeta, n, l) *\ (4 * np.pi ** 2 * zeta * r ** 2) ** (l / 2) * \ (-1) ** (n - l / 2) counter += 1 return psi def _kappa_pdf(zeta, n, l): return np.sqrt((16 * np.pi ** 3 * zeta ** 1.5 * factorial(n - l)) / gamma(n + 1.5)) def shore_matrix_odf(radial_order, zeta, sphere_vertices): r"""Compute the SHORE ODF matrix [1]_" Parameters ---------- radial_order : unsigned int, an even integer that represent the order of the basis zeta : unsigned int, scale factor sphere_vertices : array, shape (N,3) vertices of the odf sphere References ---------- .. [1] Merlet S. et. al, "Continuous diffusion signal, EAP and ODF estimation via Compressive Sensing in diffusion MRI", Medical Image Analysis, 2013. """ r, theta, phi = cart2sphere(sphere_vertices[:, 0], sphere_vertices[:, 1], sphere_vertices[:, 2]) theta[np.isnan(theta)] = 0 F = radial_order / 2 n_c = int(np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3))) upsilon = np.zeros((len(sphere_vertices), n_c)) counter = 0 for l in range(0, radial_order + 1, 2): for n in range(l, int((radial_order + l) / 2) + 1): for m in range(-l, l + 1): upsilon[:, counter] = (-1) ** (n - l / 2.0) * _kappa_odf(zeta, n, l) * \ hyp2f1(l - n, l / 2.0 + 1.5, l + 1.5, 2.0) * \ real_sph_harm(m, l, theta, phi) counter += 1 return upsilon def _kappa_odf(zeta, n, l): return np.sqrt((gamma(l / 2.0 + 1.5) ** 2 * gamma(n + 1.5) * 2 ** (l + 3)) / (16 * np.pi ** 3 * (zeta) ** 1.5 * factorial(n - l) * gamma(l + 1.5) ** 2)) def l_shore(radial_order): "Returns the angular regularisation matrix for SHORE basis" F = radial_order / 2 n_c = int(np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3))) diagL = np.zeros(n_c) counter = 0 for l in range(0, radial_order + 1, 2): for n in range(l, int((radial_order + l) / 2) + 1): for m in range(-l, l + 1): diagL[counter] = (l * (l + 1)) ** 2 counter += 1 return np.diag(diagL) def n_shore(radial_order): "Returns the angular regularisation matrix for SHORE basis" F = radial_order / 2 n_c = int(np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3))) diagN = np.zeros(n_c) counter = 0 for l in range(0, radial_order + 1, 2): for n in range(l, int((radial_order + l) / 2) + 1): for m in range(-l, l + 1): diagN[counter] = (n * (n + 1)) ** 2 counter += 1 return np.diag(diagN) def create_rspace(gridsize, radius_max): """ Create the real space table, that contains the points in which to compute the pdf. Parameters ---------- gridsize : unsigned int dimension of the propagator grid radius_max : float maximal radius in which compute the propagator Returns ------- vecs : array, shape (N,3) positions of the pdf points in a 3D matrix tab : array, shape (N,3) real space points in which calculates the pdf """ radius = gridsize // 2 vecs = [] for i in range(-radius, radius + 1): for j in range(-radius, radius + 1): for k in range(-radius, radius + 1): vecs.append([i, j, k]) vecs = np.array(vecs, dtype=np.float32) tab = vecs / radius tab = tab * radius_max vecs = vecs + radius return vecs, tab def shore_indices(radial_order, index): r"""Given the basis order and the index, return the shore indices n, l, m for modified Merlet's 3D-SHORE ..math:: :nowrap: \begin{equation} \textbf{E}(q\textbf{u})=\sum_{l=0, even}^{N_{max}} \sum_{n=l}^{(N_{max}+l)/2} \sum_{m=-l}^l c_{nlm} \phi_{nlm}(q\textbf{u}) \end{equation} where $\phi_{nlm}$ is ..math:: :nowrap: \begin{equation} \phi_{nlm}^{SHORE}(q\textbf{u})=\Biggl[\dfrac{2(n-l)!} {\zeta^{3/2} \Gamma(n+3/2)} \Biggr]^{1/2} \Biggl(\dfrac{q^2}{\zeta}\Biggr)^{l/2} exp\Biggl(\dfrac{-q^2}{2\zeta}\Biggr) L^{l+1/2}_{n-l} \Biggl(\dfrac{q^2}{\zeta}\Biggr) Y_l^m(\textbf{u}). \end{equation} Parameters ---------- radial_order : unsigned int an even integer that represent the maximal order of the basis index : unsigned int index of the coefficients, start from 0 Returns ------- n : unsigned int the index n of the modified shore basis l : unsigned int the index l of the modified shore basis m : unsigned int the index m of the modified shore basis """ F = radial_order / 2 n_c = np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3)) n_i = 0 l_i = 0 m_i = 0 if n_c < (index + 1): msg = "The index is higher than the number of coefficients of the truncated basis." raise ValueError(msg) else: counter = 0 for l in range(0, radial_order + 1, 2): for n in range(l, int((radial_order + l) / 2) + 1): for m in range(-l, l + 1): if counter == index: n_i = n l_i = l m_i = m counter += 1 return n_i, l_i, m_i def shore_order(n, l, m): r"""Given the indices (n,l,m) of the basis, return the minimum order for those indices and their index for modified Merlet's 3D-SHORE. Parameters ---------- n : unsigned int the index n of the modified shore basis l : unsigned int the index l of the modified shore basis m : unsigned int the index m of the modified shore basis Returns ------- radial_order : unsigned int an even integer that represent the maximal order of the basis index : unsigned int index of the coefficient correspondig to (n,l,m), start from 0 """ if l % 2 == 1 or l > n or l < 0 or n < 0 or np.abs(m) > l: msg = "The index l must be even and 0 <= l <= n, the index m must be -l <= m <= l." raise ValueError(msg) else: if n % 2 == 1: radial_order = n + 1 else: radial_order = n counter_i = 0 counter = 0 for l_i in range(0, radial_order + 1, 2): for n_i in range(l_i, int((radial_order + l_i) / 2) + 1): for m_i in range(-l_i, l_i + 1): if n == n_i and l == l_i and m == m_i: counter_i = counter counter += 1 return radial_order, counter_i dipy-0.10.1/dipy/reconst/tests/000077500000000000000000000000001263041327500163255ustar00rootroot00000000000000dipy-0.10.1/dipy/reconst/tests/__init__.py000066400000000000000000000000401263041327500204300ustar00rootroot00000000000000# tests for reconstruction code dipy-0.10.1/dipy/reconst/tests/test_cache.py000066400000000000000000000011201263041327500207730ustar00rootroot00000000000000from dipy.reconst.cache import Cache from dipy.core.sphere import Sphere from numpy.testing import assert_, assert_equal, run_module_suite class TestModel(Cache): def __init__(self): pass def test_basic_cache(): t = TestModel() s = Sphere(theta=[0], phi=[0]) assert_(t.cache_get("design_matrix", s) is None) m = [[1, 0], [0, 1]] t.cache_set("design_matrix", key=s, value=m) assert_equal(t.cache_get("design_matrix", s), m) t.cache_clear() assert_(t.cache_get("design_matrix", s) is None) if __name__ == "__main__": run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_cross_validation.py000066400000000000000000000114351263041327500233050ustar00rootroot00000000000000""" Testing cross-validation analysis """ from __future__ import division, print_function, absolute_import import numpy as np import numpy.testing as npt import nibabel as nib import dipy.reconst.cross_validation as xval import dipy.data as dpd import dipy.reconst.dti as dti import dipy.core.gradients as gt import dipy.sims.voxel as sims import dipy.reconst.csdeconv as csd import dipy.reconst.base as base # We'll set these globally: fdata, fbval, fbvec = dpd.get_data('small_64D') def test_coeff_of_determination(): """ Test the calculation of the coefficient of determination """ model = np.random.randn(10, 10, 10, 150) data = np.copy(model) # If the model predicts the data perfectly, the COD is all 100s: cod = xval.coeff_of_determination(data, model) npt.assert_array_equal(100, cod) def test_dti_xval(): """ Test k-fold cross-validation """ data = nib.load(fdata).get_data() gtab = gt.gradient_table(fbval, fbvec) dm = dti.TensorModel(gtab, 'LS') # The data has 102 directions, so will not divide neatly into 10 bits npt.assert_raises(ValueError, xval.kfold_xval, dm, data, 10) # But we can do this with 2 folds: kf_xval = xval.kfold_xval(dm, data, 2) # In simulation with no noise, COD should be perfect: psphere = dpd.get_sphere('symmetric362') bvecs = np.concatenate(([[0, 0, 0]], psphere.vertices)) bvals = np.zeros(len(bvecs)) + 1000 bvals[0] = 0 gtab = gt.gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0001], [0.0015, 0.0003, 0.0003])) mevecs = [np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])] S = sims.single_tensor(gtab, 100, mevals[0], mevecs[0], snr=None) dm = dti.TensorModel(gtab, 'LS') kf_xval = xval.kfold_xval(dm, S, 2) cod = xval.coeff_of_determination(S, kf_xval) npt.assert_array_almost_equal(cod, np.ones(kf_xval.shape[:-1]) * 100) # Test with 2D data for use of a mask S = np.array([[S, S], [S, S]]) mask = np.ones(S.shape[:-1], dtype=bool) mask[1, 1] = 0 kf_xval = xval.kfold_xval(dm, S, 2, mask=mask) cod2d = xval.coeff_of_determination(S, kf_xval) npt.assert_array_almost_equal(np.round(cod2d[0, 0]), cod) def test_csd_xval(): # First, let's see that it works with some data: data = nib.load(fdata).get_data()[1:3, 1:3, 1:3] # Make it *small* gtab = gt.gradient_table(fbval, fbvec) S0 = np.mean(data[..., gtab.b0s_mask]) response = ([0.0015, 0.0003, 0.0001], S0) csdm = csd.ConstrainedSphericalDeconvModel(gtab, response) kf_xval = xval.kfold_xval(csdm, data, 2, response, sh_order=2) # In simulation, it should work rather well (high COD): psphere = dpd.get_sphere('symmetric362') bvecs = np.concatenate(([[0, 0, 0]], psphere.vertices)) bvals = np.zeros(len(bvecs)) + 1000 bvals[0] = 0 gtab = gt.gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0001], [0.0015, 0.0003, 0.0003])) mevecs = [np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])] S0 = 100 S = sims.single_tensor(gtab, S0, mevals[0], mevecs[0], snr=None) sm = csd.ConstrainedSphericalDeconvModel(gtab, response) np.random.seed(12345) response = ([0.0015, 0.0003, 0.0001], S0) kf_xval = xval.kfold_xval(sm, S, 2, response, sh_order=2) # Because of the regularization, COD is not going to be perfect here: cod = xval.coeff_of_determination(S, kf_xval) # We'll just test for regressions: csd_cod = 97 # pre-computed by hand for this random seed # We're going to be really lenient here: npt.assert_array_almost_equal(np.round(cod), csd_cod) # Test for sD data with more than one voxel for use of a mask: S = np.array([[S, S], [S, S]]) mask = np.ones(S.shape[:-1], dtype=bool) mask[1, 1] = 0 kf_xval = xval.kfold_xval(sm, S, 2, response, sh_order=2, mask=mask) cod = xval.coeff_of_determination(S, kf_xval) npt.assert_array_almost_equal(np.round(cod[0]), csd_cod) def test_no_predict(): """ Test that if you try to do this with a model that doesn't have a `predict` method, you get something reasonable. """ class NoPredictModel(base.ReconstModel): def __init__(self, gtab): base.ReconstModel.__init__(self, gtab) def fit(self, data, mask=None): return NoPredictFit(self, data, mask=mask) class NoPredictFit(base.ReconstFit): def __init__(self, model, data, mask=None): base.ReconstFit.__init__(self, model, data) gtab = gt.gradient_table(fbval, fbvec) my_model = NoPredictModel(gtab) data = nib.load(fdata).get_data()[1:3, 1:3, 1:3] # Whatever npt.assert_raises(ValueError, xval.kfold_xval, my_model, data, 2) dipy-0.10.1/dipy/reconst/tests/test_csdeconv.py000066400000000000000000000440021263041327500215420ustar00rootroot00000000000000import warnings import nibabel as nib import numpy as np import numpy.testing as npt from numpy.testing import (assert_, assert_equal, assert_almost_equal, assert_array_almost_equal, run_module_suite, assert_array_equal) from dipy.data import get_sphere, get_data, default_sphere, small_sphere from dipy.sims.voxel import (multi_tensor, single_tensor, multi_tensor_odf, all_tensor_evecs, single_tensor_odf) from dipy.core.gradients import gradient_table from dipy.reconst.csdeconv import (ConstrainedSphericalDeconvModel, ConstrainedSDTModel, forward_sdeconv_mat, odf_deconv, odf_sh_to_sharp, auto_response, recursive_response, response_from_mask) from dipy.direction.peaks import peak_directions from dipy.core.sphere_stats import angular_similarity from dipy.reconst.dti import TensorModel, fractional_anisotropy from dipy.reconst.shm import (CsaOdfModel, QballModel, sf_to_sh, sh_to_sf, real_sym_sh_basis, sph_harm_ind_list) from dipy.reconst.shm import lazy_index from dipy.core.geometry import cart2sphere import dipy.reconst.dti as dti from dipy.reconst.dti import fractional_anisotropy from dipy.core.sphere import Sphere def test_recursive_response_calibration(): """ Test the recursive response calibration method. """ SNR = 100 S0 = 1 sh_order = 8 _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) sphere = get_sphere('symmetric724') gtab = gradient_table(bvals, bvecs) evals = np.array([0.0015, 0.0003, 0.0003]) evecs = np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]).T mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (90, 0)] where_dwi = lazy_index(~gtab.b0s_mask) S_cross, sticks_cross = multi_tensor(gtab, mevals, S0, angles=angles, fractions=[50, 50], snr=SNR) S_single = single_tensor(gtab, S0, evals, evecs, snr=SNR) data = np.concatenate((np.tile(S_cross, (8, 1)), np.tile(S_single, (2, 1))), axis=0) odf_gt_cross = multi_tensor_odf(sphere.vertices, mevals, angles, [50, 50]) odf_gt_single = single_tensor_odf(sphere.vertices, evals, evecs) response = recursive_response(gtab, data, mask=None, sh_order=8, peak_thr=0.01, init_fa=0.05, init_trace=0.0021, iter=8, convergence=0.001, parallel=False) csd = ConstrainedSphericalDeconvModel(gtab, response) csd_fit = csd.fit(data) assert_equal(np.all(csd_fit.shm_coeff[:, 0] >= 0), True) fodf = csd_fit.odf(sphere) directions_gt_single, _, _ = peak_directions(odf_gt_single, sphere) directions_gt_cross, _, _ = peak_directions(odf_gt_cross, sphere) directions_single, _, _ = peak_directions(fodf[8, :], sphere) directions_cross, _, _ = peak_directions(fodf[0, :], sphere) ang_sim = angular_similarity(directions_cross, directions_gt_cross) assert_equal(ang_sim > 1.9, True) assert_equal(directions_cross.shape[0], 2) assert_equal(directions_gt_cross.shape[0], 2) ang_sim = angular_similarity(directions_single, directions_gt_single) assert_equal(ang_sim > 0.9, True) assert_equal(directions_single.shape[0], 1) assert_equal(directions_gt_single.shape[0], 1) sphere = Sphere(xyz=gtab.gradients[where_dwi]) sf = response.on_sphere(sphere) S = np.concatenate(([response.S0], sf)) tenmodel = dti.TensorModel(gtab, min_signal=0.001) tenfit = tenmodel.fit(S) FA = fractional_anisotropy(tenfit.evals) FA_gt = fractional_anisotropy(evals) assert_almost_equal(FA, FA_gt, 1) def test_response_from_mask(): fdata, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) data = nib.load(fdata).get_data() gtab = gradient_table(bvals, bvecs) ten = TensorModel(gtab) tenfit = ten.fit(data) FA = fractional_anisotropy(tenfit.evals) FA[np.isnan(FA)] = 0 radius = 3 for fa_thr in np.arange(0, 1, 0.1): response_auto, ratio_auto, nvoxels = auto_response(gtab, data, roi_center=None, roi_radius=radius, fa_thr=fa_thr, return_number_of_voxels=True) ci, cj, ck = np.array(data.shape[:3]) / 2 mask = np.zeros(data.shape[:3]) mask[ci - radius: ci + radius, cj - radius: cj + radius, ck - radius: ck + radius] = 1 mask[FA <= fa_thr] = 0 response_mask, ratio_mask = response_from_mask(gtab, data, mask) assert_equal(int(np.sum(mask)), nvoxels) assert_array_almost_equal(response_mask[0], response_auto[0]) assert_almost_equal(response_mask[1], response_auto[1]) assert_almost_equal(ratio_mask, ratio_auto) def test_csdeconv(): SNR = 100 S0 = 1 _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (60, 0)] S, sticks = multi_tensor(gtab, mevals, S0, angles=angles, fractions=[50, 50], snr=SNR) sphere = get_sphere('symmetric362') odf_gt = multi_tensor_odf(sphere.vertices, mevals, angles, [50, 50]) response = (np.array([0.0015, 0.0003, 0.0003]), S0) csd = ConstrainedSphericalDeconvModel(gtab, response) csd_fit = csd.fit(S) assert_equal(csd_fit.shm_coeff[0] > 0, True) fodf = csd_fit.odf(sphere) directions, _, _ = peak_directions(odf_gt, sphere) directions2, _, _ = peak_directions(fodf, sphere) ang_sim = angular_similarity(directions, directions2) assert_equal(ang_sim > 1.9, True) assert_equal(directions.shape[0], 2) assert_equal(directions2.shape[0], 2) with warnings.catch_warnings(record=True) as w: ConstrainedSphericalDeconvModel(gtab, response, sh_order=10) assert_equal(len(w) > 0, True) with warnings.catch_warnings(record=True) as w: ConstrainedSphericalDeconvModel(gtab, response, sh_order=8) assert_equal(len(w) > 0, False) mevecs = [] for s in sticks: mevecs += [all_tensor_evecs(s).T] S2 = single_tensor(gtab, 100, mevals[0], mevecs[0], snr=None) big_S = np.zeros((10, 10, 10, len(S2))) big_S[:] = S2 aresponse, aratio = auto_response(gtab, big_S, roi_center=(5, 5, 4), roi_radius=3, fa_thr=0.5) assert_array_almost_equal(aresponse[0], response[0]) assert_almost_equal(aresponse[1], 100) assert_almost_equal(aratio, response[0][1] / response[0][0]) aresponse2, aratio2 = auto_response(gtab, big_S, roi_radius=3, fa_thr=0.5) assert_array_almost_equal(aresponse[0], response[0]) _, _, nvoxels = auto_response(gtab, big_S, roi_center=(5, 5, 4), roi_radius=30, fa_thr=0.5, return_number_of_voxels=True) assert_equal(nvoxels, 1000) _, _, nvoxels = auto_response(gtab, big_S, roi_center=(5, 5, 4), roi_radius=30, fa_thr=1, return_number_of_voxels=True) assert_equal(nvoxels, 0) def test_odfdeconv(): SNR = 100 S0 = 1 _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (90, 0)] S, sticks = multi_tensor(gtab, mevals, S0, angles=angles, fractions=[50, 50], snr=SNR) sphere = get_sphere('symmetric362') odf_gt = multi_tensor_odf(sphere.vertices, mevals, angles, [50, 50]) e1 = 15.0 e2 = 3.0 ratio = e2 / e1 csd = ConstrainedSDTModel(gtab, ratio, None) csd_fit = csd.fit(S) fodf = csd_fit.odf(sphere) directions, _, _ = peak_directions(odf_gt, sphere) directions2, _, _ = peak_directions(fodf, sphere) ang_sim = angular_similarity(directions, directions2) assert_equal(ang_sim > 1.9, True) assert_equal(directions.shape[0], 2) assert_equal(directions2.shape[0], 2) with warnings.catch_warnings(record=True) as w: ConstrainedSDTModel(gtab, ratio, sh_order=10) assert_equal(len(w) > 0, True) with warnings.catch_warnings(record=True) as w: ConstrainedSDTModel(gtab, ratio, sh_order=8) assert_equal(len(w) > 0, False) csd_fit = csd.fit(np.zeros_like(S)) fodf = csd_fit.odf(sphere) assert_array_equal(fodf, np.zeros_like(fodf)) odf_sh = np.zeros_like(fodf) odf_sh[1] = np.nan fodf, it = odf_deconv(odf_sh, csd.R, csd.B_reg) assert_array_equal(fodf, np.zeros_like(fodf)) def test_odf_sh_to_sharp(): SNR = None S0 = 1 _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) S, sticks = multi_tensor(gtab, mevals, S0, angles=[(10, 0), (100, 0)], fractions=[50, 50], snr=SNR) sphere = get_sphere('symmetric724') qb = QballModel(gtab, sh_order=8, assume_normed=True) qbfit = qb.fit(S) odf_gt = qbfit.odf(sphere) Z = np.linalg.norm(odf_gt) odfs_gt = np.zeros((3, 1, 1, odf_gt.shape[0])) odfs_gt[:,:,:] = odf_gt[:] odfs_sh = sf_to_sh(odfs_gt, sphere, sh_order=8, basis_type=None) odfs_sh /= Z fodf_sh = odf_sh_to_sharp(odfs_sh, sphere, basis=None, ratio=3 / 15., sh_order=8, lambda_=1., tau=0.1) fodf = sh_to_sf(fodf_sh, sphere, sh_order=8, basis_type=None) directions2, _, _ = peak_directions(fodf[0, 0, 0], sphere) assert_equal(directions2.shape[0], 2) def test_forward_sdeconv_mat(): m, n = sph_harm_ind_list(4) mat = forward_sdeconv_mat(np.array([0, 2, 4]), n) expected = np.diag([0, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4]) npt.assert_array_equal(mat, expected) sh_order = 8 expected_size = (sh_order + 1) * (sh_order + 2) / 2 r_rh = np.arange(0, sh_order + 1, 2) m, n = sph_harm_ind_list(sh_order) mat = forward_sdeconv_mat(r_rh, n) npt.assert_equal(mat.shape, (expected_size, expected_size)) npt.assert_array_equal(mat.diagonal(), n) # Odd spherical harmonic degrees should raise a ValueError n[2] = 3 npt.assert_raises(ValueError, forward_sdeconv_mat, r_rh, n) def test_r2_term_odf_sharp(): SNR = None S0 = 1 angle = 45 #45 degrees is a very tight angle to disentangle _, fbvals, fbvecs = get_data('small_64D') #get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) sphere = get_sphere('symmetric724') gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (angle, 0)] S, sticks = multi_tensor(gtab, mevals, S0, angles=angles, fractions=[50, 50], snr=SNR) odf_gt = multi_tensor_odf(sphere.vertices, mevals, angles, [50, 50]) odfs_sh = sf_to_sh(odf_gt, sphere, sh_order=8, basis_type=None) fodf_sh = odf_sh_to_sharp(odfs_sh, sphere, basis=None, ratio=3 / 15., sh_order=8, lambda_=1., tau=0.1, r2_term=True) fodf = sh_to_sf(fodf_sh, sphere, sh_order=8, basis_type=None) directions_gt, _, _ = peak_directions(odf_gt, sphere) directions, _, _ = peak_directions(fodf, sphere) ang_sim = angular_similarity(directions_gt, directions) assert_equal(ang_sim > 1.9, True) assert_equal(directions.shape[0], 2) # This should pass as well sdt_model = ConstrainedSDTModel(gtab, ratio=3/15., sh_order=8) sdt_fit = sdt_model.fit(S) fodf = sdt_fit.odf(sphere) directions_gt, _, _ = peak_directions(odf_gt, sphere) directions, _, _ = peak_directions(fodf, sphere) ang_sim = angular_similarity(directions_gt, directions) assert_equal(ang_sim > 1.9, True) assert_equal(directions.shape[0], 2) def test_csd_predict(): """ Test prediction API """ SNR = 100 S0 = 1 _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (60, 0)] S, sticks = multi_tensor(gtab, mevals, S0, angles=angles, fractions=[50, 50], snr=SNR) sphere = small_sphere odf_gt = multi_tensor_odf(sphere.vertices, mevals, angles, [50, 50]) response = (np.array([0.0015, 0.0003, 0.0003]), S0) csd = ConstrainedSphericalDeconvModel(gtab, response) csd_fit = csd.fit(S) # Predicting from a fit should give the same result as predicting from a # model, S0 is 1 by default prediction1 = csd_fit.predict() prediction2 = csd.predict(csd_fit.shm_coeff) npt.assert_array_equal(prediction1, prediction2) npt.assert_array_equal(prediction1[..., gtab.b0s_mask], 1.) # Same with a different S0 prediction1 = csd_fit.predict(S0=123.) prediction2 = csd.predict(csd_fit.shm_coeff, S0=123.) npt.assert_array_equal(prediction1, prediction2) npt.assert_array_equal(prediction1[..., gtab.b0s_mask], 123.) # For "well behaved" coefficients, the model should be able to find the # coefficients from the predicted signal. coeff = np.random.random(csd_fit.shm_coeff.shape) - .5 coeff[..., 0] = 10. S = csd.predict(coeff) csd_fit = csd.fit(S) npt.assert_array_almost_equal(coeff, csd_fit.shm_coeff) def test_csd_predict_multi(): """ Check that we can predict reasonably from multi-voxel fits: """ SNR = 100 S0 = 123. _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) response = (np.array([0.0015, 0.0003, 0.0003]), S0) csd = ConstrainedSphericalDeconvModel(gtab, response) coeff = np.random.random(45) - .5 coeff[..., 0] = 10. S = csd.predict(coeff, S0=123.) multi_S = np.array([[S, S], [S, S]]) csd_fit_multi = csd.fit(multi_S) S0_multi = np.mean(multi_S[..., gtab.b0s_mask], -1) pred_multi = csd_fit_multi.predict(S0=S0_multi) npt.assert_array_almost_equal(pred_multi, multi_S) def test_sphere_scaling_csdmodel(): """Check that mirroring regularization sphere does not change the result of the model""" _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (60, 0)] S, sticks = multi_tensor(gtab, mevals, 100., angles=angles, fractions=[50, 50], snr=None) hemi = small_sphere sphere = hemi.mirror() response = (np.array([0.0015, 0.0003, 0.0003]), 100) model_full = ConstrainedSphericalDeconvModel(gtab, response, reg_sphere=sphere) model_hemi = ConstrainedSphericalDeconvModel(gtab, response, reg_sphere=hemi) csd_fit_full = model_full.fit(S) csd_fit_hemi = model_hemi.fit(S) assert_array_almost_equal(csd_fit_full.shm_coeff, csd_fit_hemi.shm_coeff) expected_lambda = {4:27.5230088, 8:82.5713865, 16:216.0843135} def test_default_lambda_csdmodel(): """We check that the default value of lambda is the expected value with the symmetric362 sphere. This value has empirically been found to work well and changes to this default value should be discussed with the dipy team. """ sphere = default_sphere # Create gradient table _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) # Some response function response = (np.array([0.0015, 0.0003, 0.0003]), 100) for sh_order, expected in expected_lambda.items(): model_full = ConstrainedSphericalDeconvModel(gtab, response, sh_order=sh_order, reg_sphere=sphere) B_reg, _, _ = real_sym_sh_basis(sh_order, sphere.theta, sphere.phi) npt.assert_array_almost_equal(model_full.B_reg, expected * B_reg) def test_csd_superres(): """ Check the quality of csdfit with high SH order. """ _, fbvals, fbvecs = get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = gradient_table(bvals, bvecs) # img, gtab = read_stanford_hardi() evals = np.array([[1.5, .3, .3]]) * [[1.], [1.]] / 1000. S, sticks = multi_tensor(gtab, evals, snr=None, fractions=[55., 45.]) model16 = ConstrainedSphericalDeconvModel(gtab, (evals[0], 3.), sh_order=16) fit16 = model16.fit(S) # print local_maxima(fit16.odf(default_sphere), default_sphere.edges) d, v, ind = peak_directions(fit16.odf(default_sphere), default_sphere, relative_peak_threshold=.2, min_separation_angle=0) # Check that there are two peaks assert_equal(len(d), 2) # Check that peaks line up with sticks cos_sim = abs((d * sticks).sum(1)) ** .5 assert_(all(cos_sim > .99)) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_dki.py000066400000000000000000000502001263041327500205020ustar00rootroot00000000000000""" Testing DKI """ from __future__ import division, print_function, absolute_import import numpy as np import random import dipy.reconst.dki as dki from numpy.testing import (assert_array_almost_equal, assert_array_equal, assert_almost_equal) from nose.tools import assert_raises from dipy.sims.voxel import multi_tensor_dki from dipy.io.gradients import read_bvals_bvecs from dipy.core.gradients import gradient_table from dipy.data import get_data from dipy.reconst.dti import (from_lower_triangular, decompose_tensor) from dipy.reconst.dki import (mean_kurtosis, carlson_rf, carlson_rd, axial_kurtosis, radial_kurtosis, _positive_evals) from dipy.core.sphere import Sphere from dipy.core.geometry import perpendicular_directions fimg, fbvals, fbvecs = get_data('small_64D') bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) gtab = gradient_table(bvals, bvecs) # 2 shells for techniques that requires multishell data bvals_2s = np.concatenate((bvals, bvals * 2), axis=0) bvecs_2s = np.concatenate((bvecs, bvecs), axis=0) gtab_2s = gradient_table(bvals_2s, bvecs_2s) # Simulation 1. signals of two crossing fibers are simulated mevals_cross = np.array([[0.00099, 0, 0], [0.00226, 0.00087, 0.00087], [0.00099, 0, 0], [0.00226, 0.00087, 0.00087]]) angles_cross = [(80, 10), (80, 10), (20, 30), (20, 30)] fie = 0.49 frac_cross = [fie*50, (1-fie) * 50, fie*50, (1-fie) * 50] # Noise free simulates signal_cross, dt_cross, kt_cross = multi_tensor_dki(gtab_2s, mevals_cross, S0=100, angles=angles_cross, fractions=frac_cross, snr=None) evals_cross, evecs_cross = decompose_tensor(from_lower_triangular(dt_cross)) crossing_ref = np.concatenate((evals_cross, evecs_cross[0], evecs_cross[1], evecs_cross[2], kt_cross), axis=0) # Simulation 2. Spherical kurtosis tensor.- for white matter, this can be a # biological implaussible scenario, however this simulation is usefull for # testing the estimation of directional apparent kurtosis and the mean # kurtosis, since its directional and mean kurtosis ground truth are a constant # which can be easly mathematicaly calculated. Di = 0.00099 De = 0.00226 mevals_sph = np.array([[Di, Di, Di], [De, De, De]]) frac_sph = [50, 50] signal_sph, dt_sph, kt_sph = multi_tensor_dki(gtab_2s, mevals_sph, S0=100, fractions=frac_sph, snr=None) evals_sph, evecs_sph = decompose_tensor(from_lower_triangular(dt_sph)) params_sph = np.concatenate((evals_sph, evecs_sph[0], evecs_sph[1], evecs_sph[2], kt_sph), axis=0) # Compute ground truth - since KT is spherical, appparent kurtosic coeficient # for all gradient directions and mean kurtosis have to be equal to Kref_sph. f = 0.5 Dg = f*Di + (1-f)*De Kref_sphere = 3 * f * (1-f) * ((Di-De) / Dg) ** 2 # Simulation 3. Multi-voxel simulations - dataset of four voxels is simulated. # Since the objective of this simulation is to see if procedures are able to # work with multi-dimentional data all voxels contains the same crossing signal # produced in simulation 1. DWI = np.zeros((2, 2, 1, len(gtab_2s.bvals))) DWI[0, 0, 0] = DWI[0, 1, 0] = DWI[1, 0, 0] = DWI[1, 1, 0] = signal_cross multi_params = np.zeros((2, 2, 1, 27)) multi_params[0, 0, 0] = multi_params[0, 1, 0] = crossing_ref multi_params[1, 0, 0] = multi_params[1, 1, 0] = crossing_ref def test_positive_evals(): # Tested evals L1 = np.array([[1e-3, 1e-3, 2e-3], [0, 1e-3, 0]]) L2 = np.array([[3e-3, 0, 2e-3], [1e-3, 1e-3, 0]]) L3 = np.array([[4e-3, 1e-4, 0], [0, 1e-3, 0]]) # only the first voxels have all eigenvalues larger than zero, thus: expected_ind = np.array([[True, False, False], [False, True, False]], dtype=bool) # test function _positive_evals ind = _positive_evals(L1, L2, L3) assert_array_equal(ind, expected_ind) def test_split_dki_param(): dkiM = dki.DiffusionKurtosisModel(gtab_2s, fit_method="OLS") dkiF = dkiM.fit(DWI) evals, evecs, kt = dki.split_dki_param(dkiF.model_params) assert_array_almost_equal(evals, dkiF.evals) assert_array_almost_equal(evecs, dkiF.evecs) assert_array_almost_equal(kt, dkiF.kt) def test_dki_fits(): """ DKI fits are tested on noise free crossing fiber simulates """ # OLS fitting dkiM = dki.DiffusionKurtosisModel(gtab_2s, fit_method="OLS") dkiF = dkiM.fit(signal_cross) assert_array_almost_equal(dkiF.model_params, crossing_ref) # WLS fitting dki_wlsM = dki.DiffusionKurtosisModel(gtab_2s, fit_method="WLS") dki_wlsF = dki_wlsM.fit(signal_cross) assert_array_almost_equal(dki_wlsF.model_params, crossing_ref) # testing multi-voxels dkiF_multi = dkiM.fit(DWI) assert_array_almost_equal(dkiF_multi.model_params, multi_params) dkiF_multi = dki_wlsM.fit(DWI) assert_array_almost_equal(dkiF_multi.model_params, multi_params) def test_apparent_kurtosis_coef(): """ Apparent kurtosis coeficients are tested for a spherical kurtosis tensor """ sph = Sphere(xyz=gtab.bvecs[gtab.bvals > 0]) AKC = dki.apparent_kurtosis_coef(params_sph, sph) # check all direction for d in range(len(gtab.bvecs[gtab.bvals > 0])): assert_array_almost_equal(AKC[d], Kref_sphere) def test_dki_predict(): dkiM = dki.DiffusionKurtosisModel(gtab_2s) pred = dkiM.predict(crossing_ref, S0=100) assert_array_almost_equal(pred, signal_cross) # just to check that it works with more than one voxel: pred_multi = dkiM.predict(multi_params, S0=100) assert_array_almost_equal(pred_multi, DWI) # check the function predict of the DiffusionKurtosisFit object dkiF = dkiM.fit(DWI) pred_multi = dkiF.predict(gtab_2s, S0=100) assert_array_almost_equal(pred_multi, DWI) dkiF = dkiM.fit(pred_multi) pred_from_fit = dkiF.predict(dkiM.gtab, S0=100) assert_array_almost_equal(pred_from_fit, DWI) def test_carlson_rf(): # Define inputs that we know the outputs from: # Carlson, B.C., 1994. Numerical computation of real or complex # elliptic integrals. arXiv:math/9409227 [math.CA] # Real values (test in 2D format) x = np.array([[1.0, 0.5], [2.0, 2.0]]) y = np.array([[2.0, 1.0], [3.0, 3.0]]) z = np.array([[0.0, 0.0], [4.0, 4.0]]) # Defene reference outputs RF_ref = np.array([[1.3110287771461, 1.8540746773014], [0.58408284167715, 0.58408284167715]]) # Compute integrals RF = carlson_rf(x, y, z) # Compare assert_array_almost_equal(RF, RF_ref) # Complex values x = np.array([1j, 1j - 1, 1j, 1j - 1]) y = np.array([-1j, 1j, -1j, 1j]) z = np.array([0.0, 0.0, 2, 1 - 1j]) # Defene reference outputs RF_ref = np.array([1.8540746773014, 0.79612586584234 - 1.2138566698365j, 1.0441445654064, 0.93912050218619 - 0.53296252018635j]) # Compute integrals RF = carlson_rf(x, y, z, errtol=3e-5) # Compare assert_array_almost_equal(RF, RF_ref) def test_carlson_rd(): # Define inputs that we know the outputs from: # Carlson, B.C., 1994. Numerical computation of real or complex # elliptic integrals. arXiv:math/9409227 [math.CA] # Real values x = np.array([0.0, 2.0]) y = np.array([2.0, 3.0]) z = np.array([1.0, 4.0]) # Defene reference outputs RD_ref = np.array([1.7972103521034, 0.16510527294261]) # Compute integrals RD = carlson_rd(x, y, z, errtol=1e-5) # Compare assert_array_almost_equal(RD, RD_ref) # Complex values (testing in 2D format) x = np.array([[1j, 0.0], [0.0, -2 - 1j]]) y = np.array([[-1j, 1j], [1j-1, -1j]]) z = np.array([[2.0, -1j], [1j, -1 + 1j]]) # Defene reference outputs RD_ref = np.array([[0.65933854154220, 1.2708196271910 + 2.7811120159521j], [-1.8577235439239 - 0.96193450888839j, 1.8249027393704 - 1.2218475784827j]]) # Compute integrals RD = carlson_rd(x, y, z, errtol=1e-5) # Compare assert_array_almost_equal(RD, RD_ref) def test_Wrotate_single_fiber(): # Rotate the kurtosis tensor of single fiber simulate to the diffusion # tensor diagonal and check that is equal to the kurtosis tensor of the # same single fiber simulated directly to the x-axis # Define single fiber simulate mevals = np.array([[0.00099, 0, 0], [0.00226, 0.00087, 0.00087]]) fie = 0.49 frac = [fie*100, (1 - fie)*100] # simulate single fiber not aligned to the x-axis theta = random.uniform(0, 180) phi = random.uniform(0, 320) angles = [(theta, phi), (theta, phi)] signal, dt, kt = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac, snr=None) evals, evecs = decompose_tensor(from_lower_triangular(dt)) kt_rotated = dki.Wrotate(kt, evecs) # Now coordinate system has the DT diagonal aligned to the x-axis # Reference simulation in which DT diagonal is directly aligned to the # x-axis angles = (90, 0), (90, 0) signal, dt_ref, kt_ref = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac, snr=None) assert_array_almost_equal(kt_rotated, kt_ref) def test_Wrotate_crossing_fibers(): # Test 2 - simulate crossing fibers intersecting at 70 degrees. # In this case, diffusion tensor principal eigenvector will be aligned in # the middle of the crossing fibers. Thus, after rotating the kurtosis # tensor, this will be equal to a kurtosis tensor simulate of crossing # fibers both deviating 35 degrees from the x-axis. Moreover, we know that # crossing fibers will be aligned to the x-y plane, because the smaller # diffusion eigenvalue, perpendicular to both crossings fibers, will be # aligned to the z-axis. # Simulate the crossing fiber angles = [(90, 30), (90, 30), (20, 30), (20, 30)] fie = 0.49 frac = [fie*50, (1-fie) * 50, fie*50, (1-fie) * 50] mevals = np.array([[0.00099, 0, 0], [0.00226, 0.00087, 0.00087], [0.00099, 0, 0], [0.00226, 0.00087, 0.00087]]) signal, dt, kt = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac, snr=None) evals, evecs = decompose_tensor(from_lower_triangular(dt)) kt_rotated = dki.Wrotate(kt, evecs) # Now coordinate system has diffusion tensor diagonal aligned to the x-axis # Simulate the reference kurtosis tensor angles = [(90, 35), (90, 35), (90, -35), (90, -35)] signal, dt, kt_ref = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac, snr=None) # Compare rotated with the reference assert_array_almost_equal(kt_rotated, kt_ref) def test_Wcons(): # Construct the 4D kurtosis tensor manualy from the crossing fiber kt # simulate Wfit = np.zeros([3, 3, 3, 3]) # Wxxxx Wfit[0, 0, 0, 0] = kt_cross[0] # Wyyyy Wfit[1, 1, 1, 1] = kt_cross[1] # Wzzzz Wfit[2, 2, 2, 2] = kt_cross[2] # Wxxxy Wfit[0, 0, 0, 1] = Wfit[0, 0, 1, 0] = Wfit[0, 1, 0, 0] = kt_cross[3] Wfit[1, 0, 0, 0] = kt_cross[3] # Wxxxz Wfit[0, 0, 0, 2] = Wfit[0, 0, 2, 0] = Wfit[0, 2, 0, 0] = kt_cross[4] Wfit[2, 0, 0, 0] = kt_cross[4] # Wxyyy Wfit[0, 1, 1, 1] = Wfit[1, 0, 1, 1] = Wfit[1, 1, 1, 0] = kt_cross[5] Wfit[1, 1, 0, 1] = kt_cross[5] # Wxxxz Wfit[1, 1, 1, 2] = Wfit[1, 2, 1, 1] = Wfit[2, 1, 1, 1] = kt_cross[6] Wfit[1, 1, 2, 1] = kt_cross[6] # Wxzzz Wfit[0, 2, 2, 2] = Wfit[2, 2, 2, 0] = Wfit[2, 0, 2, 2] = kt_cross[7] Wfit[2, 2, 0, 2] = kt_cross[7] # Wyzzz Wfit[1, 2, 2, 2] = Wfit[2, 2, 2, 1] = Wfit[2, 1, 2, 2] = kt_cross[8] Wfit[2, 2, 1, 2] = kt_cross[8] # Wxxyy Wfit[0, 0, 1, 1] = Wfit[0, 1, 0, 1] = Wfit[0, 1, 1, 0] = kt_cross[9] Wfit[1, 0, 0, 1] = Wfit[1, 0, 1, 0] = Wfit[1, 1, 0, 0] = kt_cross[9] # Wxxzz Wfit[0, 0, 2, 2] = Wfit[0, 2, 0, 2] = Wfit[0, 2, 2, 0] = kt_cross[10] Wfit[2, 0, 0, 2] = Wfit[2, 0, 2, 0] = Wfit[2, 2, 0, 0] = kt_cross[10] # Wyyzz Wfit[1, 1, 2, 2] = Wfit[1, 2, 1, 2] = Wfit[1, 2, 2, 1] = kt_cross[11] Wfit[2, 1, 1, 2] = Wfit[2, 2, 1, 1] = Wfit[2, 1, 2, 1] = kt_cross[11] # Wxxyz Wfit[0, 0, 1, 2] = Wfit[0, 0, 2, 1] = Wfit[0, 1, 0, 2] = kt_cross[12] Wfit[0, 1, 2, 0] = Wfit[0, 2, 0, 1] = Wfit[0, 2, 1, 0] = kt_cross[12] Wfit[1, 0, 0, 2] = Wfit[1, 0, 2, 0] = Wfit[1, 2, 0, 0] = kt_cross[12] Wfit[2, 0, 0, 1] = Wfit[2, 0, 1, 0] = Wfit[2, 1, 0, 0] = kt_cross[12] # Wxyyz Wfit[0, 1, 1, 2] = Wfit[0, 1, 2, 1] = Wfit[0, 2, 1, 1] = kt_cross[13] Wfit[1, 0, 1, 2] = Wfit[1, 1, 0, 2] = Wfit[1, 1, 2, 0] = kt_cross[13] Wfit[1, 2, 0, 1] = Wfit[1, 2, 1, 0] = Wfit[2, 0, 1, 1] = kt_cross[13] Wfit[2, 1, 0, 1] = Wfit[2, 1, 1, 0] = Wfit[1, 0, 2, 1] = kt_cross[13] # Wxyzz Wfit[0, 1, 2, 2] = Wfit[0, 2, 1, 2] = Wfit[0, 2, 2, 1] = kt_cross[14] Wfit[1, 0, 2, 2] = Wfit[1, 2, 0, 2] = Wfit[1, 2, 2, 0] = kt_cross[14] Wfit[2, 0, 1, 2] = Wfit[2, 0, 2, 1] = Wfit[2, 1, 0, 2] = kt_cross[14] Wfit[2, 1, 2, 0] = Wfit[2, 2, 0, 1] = Wfit[2, 2, 1, 0] = kt_cross[14] # Function to be tested W4D = dki.Wcons(kt_cross) Wfit = Wfit.reshape(-1) W4D = W4D.reshape(-1) assert_array_almost_equal(W4D, Wfit) def test_spherical_dki_statistics(): # tests if MK, AK and RK are equal to expected values of a spherical # kurtosis tensor # Define multi voxel spherical kurtosis simulations MParam = np.zeros((2, 2, 2, 27)) MParam[0, 0, 0] = MParam[0, 0, 1] = MParam[0, 1, 0] = params_sph MParam[0, 1, 1] = MParam[1, 1, 0] = params_sph # MParam[1, 1, 1], MParam[1, 0, 0], and MParam[1, 0, 1] remains zero MRef = np.zeros((2, 2, 2)) MRef[0, 0, 0] = MRef[0, 0, 1] = MRef[0, 1, 0] = Kref_sphere MRef[0, 1, 1] = MRef[1, 1, 0] = Kref_sphere MRef[1, 1, 1] = MRef[1, 0, 0] = MRef[1, 0, 1] = 0 # Mean kurtosis analytical solution MK_multi = mean_kurtosis(MParam) assert_array_almost_equal(MK_multi, MRef) # radial kurtosis analytical solution RK_multi = radial_kurtosis(MParam) assert_array_almost_equal(RK_multi, MRef) # axial kurtosis analytical solution AK_multi = axial_kurtosis(MParam) assert_array_almost_equal(AK_multi, MRef) def test_compare_MK_method(): # tests if analytical solution of MK is equal to the average of directional # kurtosis sampled from a sphere # DKI Model fitting dkiM = dki.DiffusionKurtosisModel(gtab_2s) dkiF = dkiM.fit(signal_cross) # MK analytical solution MK_as = dkiF.mk() # MK numerical method sph = Sphere(xyz=gtab.bvecs[gtab.bvals > 0]) MK_nm = np.mean(dki.apparent_kurtosis_coef(dkiF.model_params, sph), axis=-1) assert_array_almost_equal(MK_as, MK_nm, decimal=1) def test_single_voxel_DKI_stats(): # tests if AK and RK are equal to expected values for a single fiber # simulate randomly oriented ADi = 0.00099 ADe = 0.00226 RDi = 0 RDe = 0.00087 # Reference values AD = fie*ADi + (1-fie)*ADe AK = 3 * fie * (1-fie) * ((ADi-ADe) / AD) ** 2 RD = fie*RDi + (1-fie)*RDe RK = 3 * fie * (1-fie) * ((RDi-RDe) / RD) ** 2 ref_vals = np.array([AD, AK, RD, RK]) # simulate fiber randomly oriented theta = random.uniform(0, 180) phi = random.uniform(0, 320) angles = [(theta, phi), (theta, phi)] mevals = np.array([[ADi, RDi, RDi], [ADe, RDe, RDe]]) frac = [fie*100, (1-fie)*100] signal, dt, kt = multi_tensor_dki(gtab_2s, mevals, S0=100, angles=angles, fractions=frac, snr=None) evals, evecs = decompose_tensor(from_lower_triangular(dt)) dki_par = np.concatenate((evals, evecs[0], evecs[1], evecs[2], kt), axis=0) # Estimates using dki functions ADe1 = dki.axial_diffusivity(evals) RDe1 = dki.radial_diffusivity(evals) AKe1 = axial_kurtosis(dki_par) RKe1 = radial_kurtosis(dki_par) e1_vals = np.array([ADe1, AKe1, RDe1, RKe1]) assert_array_almost_equal(e1_vals, ref_vals) # Estimates using the kurtosis class object dkiM = dki.DiffusionKurtosisModel(gtab_2s) dkiF = dkiM.fit(signal) e2_vals = np.array([dkiF.ad, dkiF.ak(), dkiF.rd, dkiF.rk()]) assert_array_almost_equal(e2_vals, ref_vals) # test MK (note this test correspond to the MK singularity L2==L3) MK_as = dkiF.mk() sph = Sphere(xyz=gtab.bvecs[gtab.bvals > 0]) MK_nm = np.mean(dkiF.akc(sph)) assert_array_almost_equal(MK_as, MK_nm, decimal=1) def test_compare_RK_methods(): # tests if analytical solution of RK is equal to the perpendicular kurtosis # relative to the first diffusion axis # DKI Model fitting dkiM = dki.DiffusionKurtosisModel(gtab_2s) dkiF = dkiM.fit(signal_cross) # MK analytical solution RK_as = dkiF.rk() # MK numerical method evecs = dkiF.evecs p_dir = perpendicular_directions(evecs[:, 0], num=30, half=True) ver = Sphere(xyz=p_dir) RK_nm = np.mean(dki.apparent_kurtosis_coef(dkiF.model_params, ver), axis=-1) assert_array_almost_equal(RK_as, RK_nm) def test_MK_singularities(): # To test MK in case that analytical solution was a singularity not covered # by other tests dkiM = dki.DiffusionKurtosisModel(gtab_2s) # test singularity L1 == L2 - this is the case of a prolate diffusion # tensor for crossing fibers at 90 degrees angles_all = np.array([[(90, 0), (90, 0), (0, 0), (0, 0)], [(89.9, 0), (89.9, 0), (0, 0), (0, 0)]]) for angles_90 in angles_all: s_90, dt_90, kt_90 = multi_tensor_dki(gtab_2s, mevals_cross, S0=100, angles=angles_90, fractions=frac_cross, snr=None) dkiF = dkiM.fit(s_90) MK = dkiF.mk() sph = Sphere(xyz=gtab.bvecs[gtab.bvals > 0]) MK_nm = np.mean(dkiF.akc(sph)) assert_almost_equal(MK, MK_nm, decimal=2) # test singularity L1 == L3 and L1 != L2 # since L1 is defined as the larger eigenvalue and L3 the smallest # eigenvalue, this singularity teoretically will never be called, # because for L1 == L3, L2 have also to be = L1 and L2. # Nevertheless, I decided to include this test since this singularity # is revelant for cases that eigenvalues are not ordered # artificially revert the eigenvalue and eigenvector order dki_params = dkiF.model_params.copy() dki_params[1] = dkiF.model_params[2] dki_params[2] = dkiF.model_params[1] dki_params[4] = dkiF.model_params[5] dki_params[5] = dkiF.model_params[4] dki_params[7] = dkiF.model_params[8] dki_params[8] = dkiF.model_params[7] dki_params[10] = dkiF.model_params[11] dki_params[11] = dkiF.model_params[10] MK = dki.mean_kurtosis(dki_params) MK_nm = np.mean(dki.apparent_kurtosis_coef(dki_params, sph)) assert_almost_equal(MK, MK_nm, decimal=2) def test_dki_errors(): # first error of DKI module is if a unknown fit method is given assert_raises(ValueError, dki.DiffusionKurtosisModel, gtab_2s, fit_method="JOANA") # second error of DKI module is if a min_signal is defined as negative assert_raises(ValueError, dki.DiffusionKurtosisModel, gtab_2s, min_signal=-1) # try case with correct min_signal dkiM = dki.DiffusionKurtosisModel(gtab_2s, min_signal=1) dkiF = dkiM.fit(DWI) assert_array_almost_equal(dkiF.model_params, multi_params) # third error is if a given mask do not have same shape as data dkiM = dki.DiffusionKurtosisModel(gtab_2s) # test a correct mask dkiF = dkiM.fit(DWI) mask_correct = dkiF.fa > 0 mask_correct[1, 1] = False multi_params[1, 1] = np.zeros(27) mask_not_correct = np.array([[True, True, False], [True, False, False]]) dkiF = dkiM.fit(DWI, mask=mask_correct) assert_array_almost_equal(dkiF.model_params, multi_params) # test a incorrect mask assert_raises(ValueError, dkiM.fit, DWI, mask=mask_not_correct) dipy-0.10.1/dipy/reconst/tests/test_dsi.py000066400000000000000000000111661263041327500205220ustar00rootroot00000000000000import numpy as np from numpy.testing import (assert_equal, assert_almost_equal, run_module_suite, assert_array_equal, assert_raises) from dipy.data import get_data, dsi_voxels from dipy.reconst.dsi import DiffusionSpectrumModel from dipy.reconst.odf import gfa from dipy.direction.peaks import peak_directions from dipy.sims.voxel import SticksAndBall from dipy.core.sphere import Sphere from dipy.core.gradients import gradient_table from dipy.data import get_sphere from numpy.testing import assert_equal from dipy.core.subdivide_octahedron import create_unit_sphere from dipy.core.sphere_stats import angular_similarity def test_dsi(): #load symmetric 724 sphere sphere = get_sphere('symmetric724') #load icosahedron sphere sphere2 = create_unit_sphere(5) btable = np.loadtxt(get_data('dsi515btable')) gtab = gradient_table(btable[:,0], btable[:,1:]) data, golden_directions = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) ds = DiffusionSpectrumModel(gtab) # symmetric724 dsfit = ds.fit(data) odf = dsfit.odf(sphere) directions, _, _ = peak_directions(odf, sphere) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) # 5 subdivisions dsfit = ds.fit(data) odf2 = dsfit.odf(sphere2) directions, _, _ = peak_directions(odf2, sphere2) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) assert_equal(dsfit.pdf().shape, 3 * (ds.qgrid_size, )) sb_dummies=sticks_and_ball_dummies(gtab) for sbd in sb_dummies: data, golden_directions = sb_dummies[sbd] odf = ds.fit(data).odf(sphere2) directions, _, _ = peak_directions(odf, sphere2) if len(directions) <= 3: assert_equal(len(directions), len(golden_directions)) if len(directions) > 3: assert_equal(gfa(odf) < 0.1, True) assert_raises(ValueError, DiffusionSpectrumModel, gtab, qgrid_size=16) def test_multivox_dsi(): data, gtab = dsi_voxels() DS = DiffusionSpectrumModel(gtab) sphere = get_sphere('symmetric724') DSfit = DS.fit(data) PDF = DSfit.pdf() assert_equal(data.shape[:-1] + (17, 17, 17), PDF.shape) assert_equal(np.alltrue(np.isreal(PDF)), True) def test_multib0_dsi(): data, gtab = dsi_voxels() # Create a new data-set with a b0 measurement: new_data = np.concatenate([data, data[..., 0, None]], -1) new_bvecs = np.concatenate([gtab.bvecs, np.zeros((1, 3))]) new_bvals = np.concatenate([gtab.bvals, [0]]) new_gtab = gradient_table(new_bvals, new_bvecs) ds = DiffusionSpectrumModel(new_gtab) sphere = get_sphere('repulsion724') dsfit = ds.fit(new_data) pdf = dsfit.pdf() odf = dsfit.odf(sphere) assert_equal(new_data.shape[:-1] + (17, 17, 17), pdf.shape) assert_equal(np.alltrue(np.isreal(pdf)), True) # And again, with one more b0 measurement (two in total): new_data = np.concatenate([data, data[..., 0, None]], -1) new_bvecs = np.concatenate([gtab.bvecs, np.zeros((1, 3))]) new_bvals = np.concatenate([gtab.bvals, [0]]) new_gtab = gradient_table(new_bvals, new_bvecs) ds = DiffusionSpectrumModel(new_gtab) dsfit = ds.fit(new_data) pdf = dsfit.pdf() odf = dsfit.odf(sphere) assert_equal(new_data.shape[:-1] + (17, 17, 17), pdf.shape) assert_equal(np.alltrue(np.isreal(pdf)), True) def sticks_and_ball_dummies(gtab): sb_dummies={} S, sticks = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0)], fractions=[100], snr=None) sb_dummies['1fiber'] = (S, sticks) S, sticks = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) sb_dummies['2fiber'] = (S, sticks) S, sticks = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0), (90, 90)], fractions=[33, 33, 33], snr=None) sb_dummies['3fiber'] = (S, sticks) S, sticks = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0), (90, 90)], fractions=[0, 0, 0], snr=None) sb_dummies['isotropic'] = (S, sticks) return sb_dummies if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_dsi_deconv.py000066400000000000000000000053521263041327500220600ustar00rootroot00000000000000import numpy as np from numpy.testing import (assert_equal, assert_almost_equal, run_module_suite, assert_array_equal, assert_raises) from dipy.data import get_data, dsi_deconv_voxels from dipy.reconst.dsi import DiffusionSpectrumDeconvModel from dipy.reconst.odf import gfa from dipy.direction.peaks import peak_directions from dipy.sims.voxel import SticksAndBall from dipy.core.sphere import Sphere from dipy.core.gradients import gradient_table from dipy.data import get_sphere from numpy.testing import assert_equal from dipy.core.subdivide_octahedron import create_unit_sphere from dipy.core.sphere_stats import angular_similarity from dipy.reconst.tests.test_dsi import sticks_and_ball_dummies def test_dsi(): # load symmetric 724 sphere sphere = get_sphere('symmetric724') # load icosahedron sphere sphere2 = create_unit_sphere(5) btable = np.loadtxt(get_data('dsi515btable')) gtab = gradient_table(btable[:, 0], btable[:, 1:]) data, golden_directions = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) ds = DiffusionSpectrumDeconvModel(gtab) # symmetric724 dsfit = ds.fit(data) odf = dsfit.odf(sphere) directions, _, _ = peak_directions(odf, sphere, .35, 25) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) # 5 subdivisions dsfit = ds.fit(data) odf2 = dsfit.odf(sphere2) directions, _, _ = peak_directions(odf2, sphere2, .35, 25) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) assert_equal(dsfit.pdf().shape, 3 * (ds.qgrid_size, )) sb_dummies = sticks_and_ball_dummies(gtab) for sbd in sb_dummies: data, golden_directions = sb_dummies[sbd] odf = ds.fit(data).odf(sphere2) directions, _, _ = peak_directions(odf, sphere2, .35, 25) if len(directions) <= 3: assert_equal(len(directions), len(golden_directions)) if len(directions) > 3: assert_equal(gfa(odf) < 0.1, True) assert_raises(ValueError, DiffusionSpectrumDeconvModel, gtab, qgrid_size=16) def test_multivox_dsi(): data, gtab = dsi_deconv_voxels() DS = DiffusionSpectrumDeconvModel(gtab) sphere = get_sphere('symmetric724') DSfit = DS.fit(data) PDF = DSfit.pdf() assert_equal(data.shape[:-1] + (35, 35, 35), PDF.shape) assert_equal(np.alltrue(np.isreal(PDF)), True) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_dsi_metrics.py000066400000000000000000000032611263041327500222450ustar00rootroot00000000000000import numpy as np from dipy.reconst.dsi import DiffusionSpectrumModel from dipy.data import get_data from dipy.core.gradients import gradient_table from numpy.testing import (assert_almost_equal, run_module_suite) from dipy.sims.voxel import (SticksAndBall, MultiTensor) def test_dsi_metrics(): btable = np.loadtxt(get_data('dsi4169btable')) gtab = gradient_table(btable[:, 0], btable[:, 1:]) data, golden_directions = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (60, 0)], fractions=[50, 50], snr=None) dsmodel = DiffusionSpectrumModel(gtab, qgrid_size=21, filter_width=4500) rtop_signal_norm = dsmodel.fit(data).rtop_signal() rtop_pdf_norm = dsmodel.fit(data).rtop_pdf() rtop_pdf = dsmodel.fit(data).rtop_pdf(normalized=False) assert_almost_equal(rtop_signal_norm, rtop_pdf, 6) dsmodel = DiffusionSpectrumModel(gtab, qgrid_size=21, filter_width=4500) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) S_0, sticks_0 = MultiTensor(gtab, mevals, S0=100, angles=[(0, 0), (60, 0)], fractions=[50, 50], snr=None) S_1, sticks_0 = MultiTensor(gtab, mevals * 2.0, S0=100, angles=[(0, 0), (60, 0)], fractions=[50, 50], snr=None) MSD_norm_0 = dsmodel.fit(S_0).msd_discrete(normalized=True) MSD_norm_1 = dsmodel.fit(S_1).msd_discrete(normalized=True) assert_almost_equal(MSD_norm_0, 0.5 * MSD_norm_1, 4) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_dti.py000066400000000000000000000612501263041327500205220ustar00rootroot00000000000000""" Testing DTI """ from __future__ import division, print_function, absolute_import import numpy as np from nose.tools import (assert_true, assert_equal, assert_almost_equal, assert_raises) import numpy.testing as npt from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_) import nibabel as nib import scipy.optimize as opt import dipy.reconst.dti as dti from dipy.reconst.dti import (axial_diffusivity, color_fa, fractional_anisotropy, from_lower_triangular, geodesic_anisotropy, lower_triangular, mean_diffusivity, radial_diffusivity, TensorModel, trace, linearity, planarity, sphericity) from dipy.io.bvectxt import read_bvec_file from dipy.data import get_data, dsi_voxels, get_sphere from dipy.core.subdivide_octahedron import create_unit_sphere import dipy.core.gradients as grad import dipy.core.sphere as dps from dipy.sims.voxel import single_tensor def test_roll_evals(): """ """ # Just making sure this never passes through weird_evals = np.array([1, 0.5]) npt.assert_raises(ValueError, dti._roll_evals, weird_evals) def test_tensor_algebra(): """ Test that the computation of tensor determinant and norm is correct """ test_arr = np.random.rand(10, 3, 3) t_det = dti.determinant(test_arr) t_norm = dti.norm(test_arr) for i, x in enumerate(test_arr): assert_almost_equal(np.linalg.det(x), t_det[i]) assert_almost_equal(np.linalg.norm(x), t_norm[i]) def test_tensor_model(): fdata, fbval, fbvec = get_data('small_25') data1 = nib.load(fdata).get_data() gtab1 = grad.gradient_table(fbval, fbvec) data2, gtab2 = dsi_voxels() for data, gtab in zip([data1, data2], [gtab1, gtab2]): dm = dti.TensorModel(gtab, 'LS') dtifit = dm.fit(data[0, 0, 0]) assert_equal(dtifit.fa < 0.9, True) dm = dti.TensorModel(gtab, 'WLS') dtifit = dm.fit(data[0, 0, 0]) assert_equal(dtifit.fa < 0.9, True) assert_equal(dtifit.fa > 0, True) sphere = create_unit_sphere(4) assert_equal(len(dtifit.odf(sphere)), len(sphere.vertices)) # Check that the multivoxel case works: dtifit = dm.fit(data) # Check that it works on signal that has already been normalized to S0: dm_to_relative = dti.TensorModel(gtab) if np.any(gtab.b0s_mask): relative_data = (data[0, 0, 0]/np.mean(data[0, 0, 0, gtab.b0s_mask])) dtifit_to_relative = dm_to_relative.fit(relative_data) npt.assert_almost_equal(dtifit.fa[0, 0, 0], dtifit_to_relative.fa, decimal=3) # And smoke-test that all these operations return sensibly-shaped arrays: assert_equal(dtifit.fa.shape, data.shape[:3]) assert_equal(dtifit.ad.shape, data.shape[:3]) assert_equal(dtifit.md.shape, data.shape[:3]) assert_equal(dtifit.rd.shape, data.shape[:3]) assert_equal(dtifit.trace.shape, data.shape[:3]) assert_equal(dtifit.mode.shape, data.shape[:3]) assert_equal(dtifit.linearity.shape, data.shape[:3]) assert_equal(dtifit.planarity.shape, data.shape[:3]) assert_equal(dtifit.sphericity.shape, data.shape[:3]) # Test for the shape of the mask assert_raises(ValueError, dm.fit, np.ones((10, 10, 3)), np.ones((3, 3))) # Make some synthetic data b0 = 1000. bvecs, bvals = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table_from_bvals_bvecs(bvals, bvecs.T) # The first b value is 0., so we take the second one: B = bvals[1] # Scale the eigenvalues and tensor by the B value so the units match D = np.array([1., 1., 1., 0., 0., 1., -np.log(b0) * B]) / B evals = np.array([2., 1., 0.]) / B md = evals.mean() tensor = from_lower_triangular(D) A_squiggle = tensor - (1 / 3.0) * np.trace(tensor) * np.eye(3) mode = (3 * np.sqrt(6) * np.linalg.det(A_squiggle / np.linalg.norm(A_squiggle))) evals_eigh, evecs_eigh = np.linalg.eigh(tensor) # Sort according to eigen-value from large to small: evecs = evecs_eigh[:, np.argsort(evals_eigh)[::-1]] # Check that eigenvalues and eigenvectors are properly sorted through # that previous operation: for i in range(3): assert_array_almost_equal(np.dot(tensor, evecs[:, i]), evals[i] * evecs[:, i]) # Design Matrix X = dti.design_matrix(gtab) # Signals Y = np.exp(np.dot(X, D)) assert_almost_equal(Y[0], b0) Y.shape = (-1,) + Y.shape # Test fitting with different methods: for fit_method in ['OLS', 'WLS', 'NLLS']: tensor_model = dti.TensorModel(gtab, fit_method=fit_method) tensor_fit = tensor_model.fit(Y) assert_true(tensor_fit.model is tensor_model) assert_equal(tensor_fit.shape, Y.shape[:-1]) assert_array_almost_equal(tensor_fit.evals[0], evals) # Test that the eigenvectors are correct, one-by-one: for i in range(3): # Eigenvectors have intrinsic sign ambiguity # (see # http://prod.sandia.gov/techlib/access-control.cgi/2007/076422.pdf) # so we need to allow for sign flips. One of the following should # always be true: assert_( np.all(np.abs(tensor_fit.evecs[0][:, i] - evecs[:, i]) < 10e-6) or np.all(np.abs(-tensor_fit.evecs[0][:, i] - evecs[:, i]) < 10e-6)) # We set a fixed tolerance of 10e-6, similar to array_almost_equal err_msg = "Calculation of tensor from Y does not compare to " err_msg += "analytical solution" assert_array_almost_equal(tensor_fit.quadratic_form[0], tensor, err_msg=err_msg) assert_almost_equal(tensor_fit.md[0], md) assert_array_almost_equal(tensor_fit.mode, mode, decimal=5) assert_equal(tensor_fit.directions.shape[-2], 1) assert_equal(tensor_fit.directions.shape[-1], 3) # Test error-handling: assert_raises(ValueError, dti.TensorModel, gtab, fit_method='crazy_method') # Test custom fit tensor method try: model = dti.TensorModel(gtab, fit_method=lambda *args, **kwargs: 42) fit = model.fit_method() except Exception as exc: assert False, "TensorModel should accept custom fit methods: %s" % exc assert fit == 42, "Custom fit method for TensorModel returned %s." % fit # Test multi-voxel data data = np.zeros((3, Y.shape[1])) # Normal voxel data[0] = Y # High diffusion voxel, all diffusing weighted signal equal to zero data[1, gtab.b0s_mask] = b0 data[1, ~gtab.b0s_mask] = 0 # Masked voxel, all data set to zero data[2] = 0. tensor_model = dti.TensorModel(gtab) fit = tensor_model.fit(data) assert_array_almost_equal(fit[0].evals, evals) # Evals should be high for high diffusion voxel assert_(all(fit[1].evals > evals[0] * .9)) # Evals should be zero where data is masked assert_array_almost_equal(fit[2].evals, 0.) def test_indexing_on_tensor_fit(): params = np.zeros([2, 3, 4, 12]) fit = dti.TensorFit(None, params) # Should return a TensorFit of appropriate shape assert_equal(fit.shape, (2, 3, 4)) fit1 = fit[0] assert_equal(fit1.shape, (3, 4)) assert_equal(type(fit1), dti.TensorFit) fit1 = fit[0, 0, 0] assert_equal(fit1.shape, ()) assert_equal(type(fit1), dti.TensorFit) fit1 = fit[[0], slice(None)] assert_equal(fit1.shape, (1, 3, 4)) assert_equal(type(fit1), dti.TensorFit) # Should raise an index error if too many indices are passed assert_raises(IndexError, fit.__getitem__, (0, 0, 0, 0)) def test_fa_of_zero(): evals = np.zeros((4, 3)) fa = fractional_anisotropy(evals) assert_array_equal(fa, 0) def test_ga_of_zero(): evals = np.zeros((4, 3)) ga = geodesic_anisotropy(evals) assert_array_equal(ga, 0) def test_diffusivities(): psphere = get_sphere('symmetric362') bvecs = np.concatenate(([[0, 0, 0]], psphere.vertices)) bvals = np.zeros(len(bvecs)) + 1000 bvals[0] = 0 gtab = grad.gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0001], [0.0015, 0.0003, 0.0003])) mevecs = [np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])] S = single_tensor(gtab, 100, mevals[0], mevecs[0], snr=None) dm = dti.TensorModel(gtab, 'LS') dmfit = dm.fit(S) md = mean_diffusivity(dmfit.evals) Trace = trace(dmfit.evals) rd = radial_diffusivity(dmfit.evals) ad = axial_diffusivity(dmfit.evals) lin = linearity(dmfit.evals) plan = planarity(dmfit.evals) spher = sphericity(dmfit.evals) assert_almost_equal(md, (0.0015 + 0.0003 + 0.0001) / 3) assert_almost_equal(Trace, (0.0015 + 0.0003 + 0.0001)) assert_almost_equal(ad, 0.0015) assert_almost_equal(rd, (0.0003 + 0.0001) / 2) assert_almost_equal(lin, (0.0015 - 0.0003)/Trace) assert_almost_equal(plan, 2 * (0.0003 - 0.0001)/Trace) assert_almost_equal(spher, (3 * 0.0001)/Trace) def test_color_fa(): data, gtab = dsi_voxels() dm = dti.TensorModel(gtab, 'LS') dmfit = dm.fit(data) fa = fractional_anisotropy(dmfit.evals) cfa = color_fa(fa, dmfit.evecs) fa = np.ones((3, 3, 3)) # evecs should be of shape (fa, 3, 3) evecs = np.zeros(fa.shape + (3, 2)) npt.assert_raises(ValueError, color_fa, fa, evecs) evecs = np.zeros(fa.shape + (3, 3)) evecs[..., :, :] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) assert_equal(fa.shape, evecs[..., 0, 0].shape) assert_equal((3, 3), evecs.shape[-2:]) # 3D test case fa = np.ones((3, 3, 3)) evecs = np.zeros(fa.shape + (3, 3)) evecs[..., :, :] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) cfa = color_fa(fa, evecs) cfa_truth = np.array([1, 0, 0]) true_cfa = np.reshape(np.tile(cfa_truth, 27), [3, 3, 3, 3]) assert_array_equal(cfa, true_cfa) # 2D test case fa = np.ones((3, 3)) evecs = np.zeros(fa.shape + (3, 3)) evecs[..., :, :] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) cfa = color_fa(fa, evecs) cfa_truth = np.array([1, 0, 0]) true_cfa = np.reshape(np.tile(cfa_truth, 9), [3, 3, 3]) assert_array_equal(cfa, true_cfa) # 1D test case fa = np.ones((3)) evecs = np.zeros(fa.shape + (3, 3)) evecs[..., :, :] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) cfa = color_fa(fa, evecs) cfa_truth = np.array([1, 0, 0]) true_cfa = np.reshape(np.tile(cfa_truth, 3), [3, 3]) assert_array_equal(cfa, true_cfa) def test_wls_and_ls_fit(): """ Tests the WLS and LS fitting functions to see if they returns the correct eigenvalues and eigenvectors. Uses data/55dir_grad.bvec as the gradient table and 3by3by56.nii as the data. """ # Defining Test Voxel (avoid nibabel dependency) ### # Recall: D = [Dxx,Dyy,Dzz,Dxy,Dxz,Dyz,log(S_0)] and D ~ 10^-4 mm^2 /s b0 = 1000. bvec, bval = read_bvec_file(get_data('55dir_grad.bvec')) B = bval[1] # Scale the eigenvalues and tensor by the B value so the units match D = np.array([1., 1., 1., 0., 0., 1., -np.log(b0) * B]) / B evals = np.array([2., 1., 0.]) / B md = evals.mean() tensor = from_lower_triangular(D) # Design Matrix gtab = grad.gradient_table(bval, bvec) X = dti.design_matrix(gtab) # Signals Y = np.exp(np.dot(X, D)) assert_almost_equal(Y[0], b0) Y.shape = (-1,) + Y.shape # Testing WLS Fit on Single Voxel # If you do something wonky (passing min_signal<0), you should get an # error: npt.assert_raises(ValueError, TensorModel, gtab, fit_method='WLS', min_signal=-1) # Estimate tensor from test signals model = TensorModel(gtab, fit_method='WLS') tensor_est = model.fit(Y) assert_equal(tensor_est.shape, Y.shape[:-1]) assert_array_almost_equal(tensor_est.evals[0], evals) assert_array_almost_equal(tensor_est.quadratic_form[0], tensor, err_msg="Calculation of tensor from Y does not " "compare to analytical solution") assert_almost_equal(tensor_est.md[0], md) # Test that we can fit a single voxel's worth of data (a 1d array) y = Y[0] tensor_est = model.fit(y) assert_equal(tensor_est.shape, tuple()) assert_array_almost_equal(tensor_est.evals, evals) assert_array_almost_equal(tensor_est.quadratic_form, tensor) assert_almost_equal(tensor_est.md, md) assert_array_almost_equal(tensor_est.lower_triangular(b0), D) # Test using fit_method='LS' model = TensorModel(gtab, fit_method='LS') tensor_est = model.fit(y) assert_equal(tensor_est.shape, tuple()) assert_array_almost_equal(tensor_est.evals, evals) assert_array_almost_equal(tensor_est.quadratic_form, tensor) assert_almost_equal(tensor_est.md, md) assert_array_almost_equal(tensor_est.lower_triangular(b0), D) assert_array_almost_equal(tensor_est.linearity, linearity(evals)) assert_array_almost_equal(tensor_est.planarity, planarity(evals)) assert_array_almost_equal(tensor_est.sphericity, sphericity(evals)) def test_masked_array_with_tensor(): data = np.ones((2, 4, 56)) mask = np.array([[True, False, False, True], [True, False, True, False]]) bvec, bval = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table_from_bvals_bvecs(bval, bvec.T) tensor_model = TensorModel(gtab) tensor = tensor_model.fit(data, mask=mask) assert_equal(tensor.shape, (2, 4)) assert_equal(tensor.fa.shape, (2, 4)) assert_equal(tensor.evals.shape, (2, 4, 3)) assert_equal(tensor.evecs.shape, (2, 4, 3, 3)) tensor = tensor[0] assert_equal(tensor.shape, (4,)) assert_equal(tensor.fa.shape, (4,)) assert_equal(tensor.evals.shape, (4, 3)) assert_equal(tensor.evecs.shape, (4, 3, 3)) tensor = tensor[0] assert_equal(tensor.shape, tuple()) assert_equal(tensor.fa.shape, tuple()) assert_equal(tensor.evals.shape, (3,)) assert_equal(tensor.evecs.shape, (3, 3)) assert_equal(type(tensor.model_params), np.ndarray) def test_fit_method_error(): bvec, bval = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table_from_bvals_bvecs(bval, bvec.T) # This should work (smoke-testing!): TensorModel(gtab, fit_method='WLS') # This should raise an error because there is no such fit_method assert_raises(ValueError, TensorModel, gtab, min_signal=1e-9, fit_method='s') def test_lower_triangular(): tensor = np.arange(9).reshape((3, 3)) D = lower_triangular(tensor) assert_array_equal(D, [0, 3, 4, 6, 7, 8]) D = lower_triangular(tensor, 1) assert_array_equal(D, [0, 3, 4, 6, 7, 8, 0]) assert_raises(ValueError, lower_triangular, np.zeros((2, 3))) shape = (4, 5, 6) many_tensors = np.empty(shape + (3, 3)) many_tensors[:] = tensor result = np.empty(shape + (6,)) result[:] = [0, 3, 4, 6, 7, 8] D = lower_triangular(many_tensors) assert_array_equal(D, result) D = lower_triangular(many_tensors, 1) result = np.empty(shape + (7,)) result[:] = [0, 3, 4, 6, 7, 8, 0] assert_array_equal(D, result) def test_from_lower_triangular(): result = np.array([[0, 1, 3], [1, 2, 4], [3, 4, 5]]) D = np.arange(7) tensor = from_lower_triangular(D) assert_array_equal(tensor, result) result = result * np.ones((5, 4, 1, 1)) D = D * np.ones((5, 4, 1)) tensor = from_lower_triangular(D) assert_array_equal(tensor, result) def test_all_constant(): bvecs, bvals = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table_from_bvals_bvecs(bvals, bvecs.T) fit_methods = ['LS', 'OLS', 'NNLS', 'RESTORE'] for fit_method in fit_methods: dm = dti.TensorModel(gtab) assert_almost_equal(dm.fit(100 * np.ones(bvals.shape[0])).fa, 0) # Doesn't matter if the signal is smaller than 1: assert_almost_equal(dm.fit(0.4 * np.ones(bvals.shape[0])).fa, 0) def test_all_zeros(): bvecs, bvals = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table_from_bvals_bvecs(bvals, bvecs.T) fit_methods = ['LS', 'OLS', 'NNLS', 'RESTORE'] for fit_method in fit_methods: dm = dti.TensorModel(gtab) assert_array_almost_equal(dm.fit(np.zeros(bvals.shape[0])).evals, 0) def test_mask(): data, gtab = dsi_voxels() dm = dti.TensorModel(gtab, 'LS') mask = np.zeros(data.shape[:-1], dtype=bool) mask[0, 0, 0] = True dtifit = dm.fit(data) dtifit_w_mask = dm.fit(data, mask=mask) # Without a mask it has some value assert_(not np.isnan(dtifit.fa[0, 0, 0])) # Where mask is False, evals, evecs and fa should all be 0 assert_array_equal(dtifit_w_mask.evals[~mask], 0) assert_array_equal(dtifit_w_mask.evecs[~mask], 0) assert_array_equal(dtifit_w_mask.fa[~mask], 0) # Except for the one voxel that was selected by the mask: assert_almost_equal(dtifit_w_mask.fa[0, 0, 0], dtifit.fa[0, 0, 0]) def test_nnls_jacobian_fucn(): b0 = 1000. bvecs, bval = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table(bval, bvecs) B = bval[1] # Scale the eigenvalues and tensor by the B value so the units match D = np.array([1., 1., 1., 0., 0., 1., -np.log(b0) * B]) / B # Design Matrix X = dti.design_matrix(gtab) # Signals Y = np.exp(np.dot(X, D)) # Test Jacobian at D args = [X, Y] analytical = dti._nlls_jacobian_func(D, *args) for i in range(len(X)): args = [X[i], Y[i]] approx = opt.approx_fprime(D, dti._nlls_err_func, 1e-8, *args) assert_true(np.allclose(approx, analytical[i])) # Test Jacobian at zero D = np.zeros_like(D) args = [X, Y] analytical = dti._nlls_jacobian_func(D, *args) for i in range(len(X)): args = [X[i], Y[i]] approx = opt.approx_fprime(D, dti._nlls_err_func, 1e-8, *args) assert_true(np.allclose(approx, analytical[i])) def test_nlls_fit_tensor(): """ Test the implementation of NLLS and RESTORE """ b0 = 1000. bvecs, bval = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table(bval, bvecs) B = bval[1] # Scale the eigenvalues and tensor by the B value so the units match D = np.array([1., 1., 1., 0., 0., 1., -np.log(b0) * B]) / B evals = np.array([2., 1., 0.]) / B md = evals.mean() tensor = from_lower_triangular(D) # Design Matrix X = dti.design_matrix(gtab) # Signals Y = np.exp(np.dot(X, D)) Y.shape = (-1,) + Y.shape # Estimate tensor from test signals and compare against expected result # using non-linear least squares: tensor_model = dti.TensorModel(gtab, fit_method='NLLS') tensor_est = tensor_model.fit(Y) assert_equal(tensor_est.shape, Y.shape[:-1]) assert_array_almost_equal(tensor_est.evals[0], evals) assert_array_almost_equal(tensor_est.quadratic_form[0], tensor) assert_almost_equal(tensor_est.md[0], md) # You can also do this without the Jacobian (though it's slower): tensor_model = dti.TensorModel(gtab, fit_method='NLLS', jac=False) tensor_est = tensor_model.fit(Y) assert_equal(tensor_est.shape, Y.shape[:-1]) assert_array_almost_equal(tensor_est.evals[0], evals) assert_array_almost_equal(tensor_est.quadratic_form[0], tensor) assert_almost_equal(tensor_est.md[0], md) # Using the gmm weighting scheme: tensor_model = dti.TensorModel(gtab, fit_method='NLLS', weighting='gmm') tensor_est = tensor_model.fit(Y) assert_equal(tensor_est.shape, Y.shape[:-1]) assert_array_almost_equal(tensor_est.evals[0], evals) assert_array_almost_equal(tensor_est.quadratic_form[0], tensor) assert_almost_equal(tensor_est.md[0], md) # If you use sigma weighting, you'd better provide a sigma: tensor_model = dti.TensorModel(gtab, fit_method='NLLS', weighting='sigma') npt.assert_raises(ValueError, tensor_model.fit, Y) # Use NLLS with some actual 4D data: data, bvals, bvecs = get_data('small_25') gtab = grad.gradient_table(bvals, bvecs) tm1 = dti.TensorModel(gtab, fit_method='NLLS') dd = nib.load(data).get_data() tf1 = tm1.fit(dd) tm2 = dti.TensorModel(gtab) tf2 = tm2.fit(dd) assert_array_almost_equal(tf1.fa, tf2.fa, decimal=1) def test_restore(): """ Test the implementation of the RESTORE algorithm """ b0 = 1000. bvecs, bval = read_bvec_file(get_data('55dir_grad.bvec')) gtab = grad.gradient_table(bval, bvecs) B = bval[1] # Scale the eigenvalues and tensor by the B value so the units match D = np.array([1., 1., 1., 0., 0., 1., -np.log(b0) * B]) / B evals = np.array([2., 1., 0.]) / B tensor = from_lower_triangular(D) # Design Matrix X = dti.design_matrix(gtab) # Signals Y = np.exp(np.dot(X, D)) Y.shape = (-1,) + Y.shape for drop_this in range(1, Y.shape[-1]): for jac in [True, False]: # RESTORE estimates should be robust to dropping this_y = Y.copy() this_y[:, drop_this] = 1.0 for sigma in [67.0, np.ones(this_y.shape[-1]) * 67.0]: tensor_model = dti.TensorModel(gtab, fit_method='restore', jac=jac, sigma=67.0) tensor_est = tensor_model.fit(this_y) assert_array_almost_equal(tensor_est.evals[0], evals, decimal=3) assert_array_almost_equal(tensor_est.quadratic_form[0], tensor, decimal=3) # If sigma is very small, it still needs to work: tensor_model = dti.TensorModel(gtab, fit_method='restore', sigma=0.0001) tensor_model.fit(Y.copy()) def test_adc(): """ Test the implementation of the calculation of apparent diffusion coefficient """ data, gtab = dsi_voxels() dm = dti.TensorModel(gtab, 'LS') mask = np.zeros(data.shape[:-1], dtype=bool) mask[0, 0, 0] = True dtifit = dm.fit(data) # The ADC in the principal diffusion direction should be equal to the AD in # each voxel: pdd0 = dtifit.evecs[0, 0, 0, 0] sphere_pdd0 = dps.Sphere(x=pdd0[0], y=pdd0[1], z=pdd0[2]) assert_array_almost_equal(dtifit.adc(sphere_pdd0)[0, 0, 0], dtifit.ad[0, 0, 0], decimal=5) # Test that it works for cases in which the data is 1D dtifit = dm.fit(data[0, 0, 0]) sphere_pdd0 = dps.Sphere(x=pdd0[0], y=pdd0[1], z=pdd0[2]) assert_array_almost_equal(dtifit.adc(sphere_pdd0), dtifit.ad, decimal=5) def test_predict(): """ Test model prediction API """ psphere = get_sphere('symmetric362') bvecs = np.concatenate(([[1, 0, 0]], psphere.vertices)) bvals = np.zeros(len(bvecs)) + 1000 bvals[0] = 0 gtab = grad.gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0001], [0.0015, 0.0003, 0.0003])) mevecs = [np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])] S = single_tensor(gtab, 100, mevals[0], mevecs[0], snr=None) dm = dti.TensorModel(gtab, 'LS') dmfit = dm.fit(S) assert_array_almost_equal(dmfit.predict(gtab, S0=100), S) assert_array_almost_equal(dm.predict(dmfit.model_params, S0=100), S) fdata, fbvals, fbvecs = get_data() data = nib.load(fdata).get_data() # Make the data cube a bit larger: data = np.tile(data.T, 2).T gtab = grad.gradient_table(fbvals, fbvecs) dtim = dti.TensorModel(gtab) dtif = dtim.fit(data) S0 = np.mean(data[..., gtab.b0s_mask], -1) p = dtif.predict(gtab, S0) assert_equal(p.shape, data.shape) def test_eig_from_lo_tri(): psphere = get_sphere('symmetric362') bvecs = np.concatenate(([[0, 0, 0]], psphere.vertices)) bvals = np.zeros(len(bvecs)) + 1000 bvals[0] = 0 gtab = grad.gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0001], [0.0015, 0.0003, 0.0003])) mevecs = [np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])] S = np.array([[single_tensor(gtab, 100, mevals[0], mevecs[0], snr=None), single_tensor(gtab, 100, mevals[0], mevecs[0], snr=None)]]) dm = dti.TensorModel(gtab, 'LS') dmfit = dm.fit(S) lo_tri = lower_triangular(dmfit.quadratic_form) assert_array_almost_equal(dti.eig_from_lo_tri(lo_tri), dmfit.model_params) dipy-0.10.1/dipy/reconst/tests/test_gqi.py000066400000000000000000000053351263041327500205240ustar00rootroot00000000000000import numpy as np from dipy.data import get_data, dsi_voxels from dipy.core.sphere import Sphere from dipy.core.gradients import gradient_table from dipy.sims.voxel import SticksAndBall from dipy.reconst.gqi import GeneralizedQSamplingModel from dipy.data import get_sphere from numpy.testing import (assert_equal, assert_almost_equal, run_module_suite) from dipy.reconst.tests.test_dsi import sticks_and_ball_dummies from dipy.core.subdivide_octahedron import create_unit_sphere from dipy.core.sphere_stats import angular_similarity from dipy.reconst.odf import gfa from dipy.direction.peaks import peak_directions def test_gqi(): #load symmetric 724 sphere sphere = get_sphere('symmetric724') #load icosahedron sphere sphere2 = create_unit_sphere(5) btable = np.loadtxt(get_data('dsi515btable')) bvals = btable[:,0] bvecs = btable[:,1:] gtab = gradient_table(bvals, bvecs) data, golden_directions = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) gq = GeneralizedQSamplingModel(gtab, method='gqi2', sampling_length=1.4) #symmetric724 gqfit = gq.fit(data) odf = gqfit.odf(sphere) directions, values, indices = peak_directions(odf, sphere, .35, 25) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) #5 subdivisions gqfit = gq.fit(data) odf2 = gqfit.odf(sphere2) directions, values, indices = peak_directions(odf2, sphere2, .35, 25) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) sb_dummies=sticks_and_ball_dummies(gtab) for sbd in sb_dummies: data, golden_directions = sb_dummies[sbd] odf = gq.fit(data).odf(sphere2) directions, values, indices = peak_directions(odf, sphere2, .35, 25) if len(directions) <= 3: assert_equal(len(directions), len(golden_directions)) if len(directions) > 3: assert_equal(gfa(odf) < 0.1, True) def test_mvoxel_gqi(): data, gtab = dsi_voxels() sphere = get_sphere('symmetric724') gq = GeneralizedQSamplingModel(gtab, 'standard') gqfit = gq.fit(data) all_odfs = gqfit.odf(sphere) # Check that the first and last voxels each have 2 peaks odf = all_odfs[0, 0, 0] directions, values, indices = peak_directions(odf, sphere, .35, 25) assert_equal(directions.shape[0], 2) odf = all_odfs[-1, -1, -1] directions, values, indices = peak_directions(odf, sphere, .35, 25) assert_equal(directions.shape[0], 2) if __name__ == "__main__": run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_interpolate.py000066400000000000000000000041631263041327500222700ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from ...utils.six.moves import xrange from nose.tools import assert_equal, assert_raises, assert_true, assert_false from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_equal) import numpy as np from ..interpolate import (NearestNeighborInterpolator, TriLinearInterpolator, OutsideImage) def test_NearestNeighborInterpolator(): # Place integers values at the center of every voxel l, m, n, o = np.ogrid[0:6.01, 0:6.01, 0:6.01, 0:4] data = l + m + n + o nni = NearestNeighborInterpolator(data, (1,1,1)) a, b, c = np.mgrid[.5:6.5:1.6, .5:6.5:2.7, .5:6.5:3.8] for ii in xrange(a.size): x = a.flat[ii] y = b.flat[ii] z = c.flat[ii] expected_result = int(x) + int(y) + int(z) + o.ravel() assert_array_equal(nni[x, y, z], expected_result) ind = np.array([x, y, z]) assert_array_equal(nni[ind], expected_result) assert_raises(OutsideImage, nni.__getitem__, (-.1, 0, 0)) assert_raises(OutsideImage, nni.__getitem__, (0, 8.2, 0)) def test_TriLinearInterpolator(): # Place (0, 0, 0) at the bottom left of the image l, m, n, o = np.ogrid[.5:6.51, .5:6.51, .5:6.51, 0:4] data = l + m + n + o data = data.astype("float32") tli = TriLinearInterpolator(data, (1,1,1)) a, b, c = np.mgrid[.5:6.5:1.6, .5:6.5:2.7, .5:6.5:3.8] for ii in xrange(a.size): x = a.flat[ii] y = b.flat[ii] z = c.flat[ii] expected_result = x + y + z + o.ravel() assert_array_almost_equal(tli[x, y, z], expected_result, decimal=5) ind = np.array([x, y, z]) assert_array_almost_equal(tli[ind], expected_result) # Index at 0 expected_value = np.arange(4) + 1.5 assert_array_almost_equal(tli[0, 0, 0], expected_value) # Index at shape expected_value = np.arange(4) + (6.5 * 3) assert_array_almost_equal(tli[7, 7, 7], expected_value) assert_raises(OutsideImage, tli.__getitem__, (-.1, 0, 0)) assert_raises(OutsideImage, tli.__getitem__, (0, 7.01, 0)) dipy-0.10.1/dipy/reconst/tests/test_mapmri.py000066400000000000000000000064101263041327500212240ustar00rootroot00000000000000import numpy as np from dipy.data import get_gtab_taiwan_dsi from numpy.testing import (assert_almost_equal, assert_equal, run_module_suite) from dipy.reconst.mapmri import MapmriModel, mapmri_index_matrix, mapmri_EAP from dipy.sims.voxel import (MultiTensor, all_tensor_evecs, multi_tensor_pdf) from scipy.special import gamma from scipy.misc import factorial from dipy.data import get_sphere def int_func(n): f = np.sqrt(2) * factorial(n) / float(((gamma(1 + n / 2.0)) * np.sqrt(2**(n + 1) * factorial(n)))) return f def test_mapmri_metrics(): gtab = get_gtab_taiwan_dsi() mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angl = [(0, 0), (60, 0)] S, sticks = MultiTensor(gtab, mevals, S0=100.0, angles=angl, fractions=[50, 50], snr=None) # since we are testing without noise we can use higher order and lower # lambdas, with respect to the default. radial_order = 6 lambd = 1e-8 # test mapmri_indices indices = mapmri_index_matrix(radial_order) n_c = indices.shape[0] F = radial_order / 2 n_gt = np.round(1 / 6.0 * (F + 1) * (F + 2) * (4 * F + 3)) assert_equal(n_c, n_gt) # test MAPMRI fitting mapm = MapmriModel(gtab, radial_order=radial_order, lambd=lambd) mapfit = mapm.fit(S) c_map = mapfit.mapmri_coeff R = mapfit.mapmri_R mu = mapfit.mapmri_mu S_reconst = mapfit.predict(gtab, 1.0) # test the signal reconstruction S = S / S[0] nmse_signal = np.sqrt(np.sum((S - S_reconst) ** 2)) / (S.sum()) assert_almost_equal(nmse_signal, 0.0, 3) # test if the analytical integral of the pdf is equal to one integral = 0 for i in range(indices.shape[0]): n1, n2, n3 = indices[i] integral += c_map[i] * int_func(n1) * int_func(n2) * int_func(n3) assert_almost_equal(integral, 1.0, 3) # compare the shore pdf with the ground truth multi_tensor pdf sphere = get_sphere('symmetric724') v = sphere.vertices radius = 10e-3 r_points = v * radius pdf_mt = multi_tensor_pdf(r_points, mevals=mevals, angles=angl, fractions=[50, 50]) pdf_map = mapmri_EAP(r_points, radial_order, c_map, mu, R) nmse_pdf = np.sqrt(np.sum((pdf_mt - pdf_map) ** 2)) / (pdf_mt.sum()) assert_almost_equal(nmse_pdf, 0.0, 2) # test MAPMRI metrics tau = 1 / (4 * np.pi ** 2) angl = [(0, 0), (0, 0)] S, sticks = MultiTensor(gtab, mevals, S0=100.0, angles=angl, fractions=[50, 50], snr=None) mapm = MapmriModel(gtab, radial_order=radial_order, lambd=lambd) mapfit = mapm.fit(S) # RTOP gt_rtop = 1.0 / np.sqrt((4 * np.pi * tau)**3 * mevals[0, 0] * mevals[0, 1] * mevals[0, 2]) rtop = mapfit.rtop() assert_almost_equal(rtop, gt_rtop, 4) # RTAP gt_rtap = 1.0 / np.sqrt((4 * np.pi * tau)**2 * mevals[0, 1] * mevals[0, 2]) rtap = mapfit.rtap() assert_almost_equal(rtap, gt_rtap, 4) # RTPP gt_rtpp = 1.0 / np.sqrt((4 * np.pi * tau) * mevals[0, 0]) rtpp = mapfit.rtpp() assert_almost_equal(rtpp, gt_rtpp, 4) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_mapmri_odf.py000066400000000000000000000047411263041327500220610ustar00rootroot00000000000000import numpy as np from dipy.data import get_sphere, get_3shell_gtab, get_isbi2013_2shell_gtab from dipy.reconst.mapmri import MapmriModel from dipy.direction.peaks import gfa, peak_directions from numpy.testing import (assert_equal, assert_almost_equal, run_module_suite, assert_array_equal, assert_raises) from dipy.sims.voxel import SticksAndBall from dipy.core.subdivide_octahedron import create_unit_sphere from dipy.core.sphere_stats import angular_similarity from dipy.reconst.tests.test_dsi import sticks_and_ball_dummies from dipy.sims.voxel import MultiTensor def test_mapmri_odf(): gtab = get_3shell_gtab() # load symmetric 724 sphere sphere = get_sphere('symmetric724') # load icosahedron sphere sphere2 = create_unit_sphere(5) evals = np.array(([0.0017, 0.0003, 0.0003], [0.0017, 0.0003, 0.0003])) data, golden_directions = MultiTensor( gtab, evals, S0=1.0, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) map_model = MapmriModel(gtab, radial_order=4) # symmetric724 mapfit = map_model.fit(data) odf = mapfit.odf(sphere) directions, _ , _ = peak_directions(odf, sphere, .35, 25) assert_equal(len(directions), 2) assert_almost_equal( angular_similarity(directions, golden_directions), 2, 1) # 5 subdivisions odf = mapfit.odf(sphere2) directions, _ , _ = peak_directions(odf, sphere2, .35, 25) assert_equal(len(directions), 2) assert_almost_equal( angular_similarity(directions, golden_directions), 2, 1) sb_dummies = sticks_and_ball_dummies(gtab) for sbd in sb_dummies: data, golden_directions = sb_dummies[sbd] mapfit = map_model.fit(data) odf = mapfit.odf(sphere2) directions, _ , _ = peak_directions(odf, sphere2, .35, 25) if len(directions) <= 3: assert_equal(len(directions), len(golden_directions)) if len(directions) > 3: assert_equal(gfa(odf) < 0.1, True) def test_multivox_mapmri(): gtab = get_3shell_gtab() data = np.random.random([20, 30, 1, gtab.gradients.shape[0]]) radial_order = 4 map_model = MapmriModel(gtab, radial_order=radial_order) mapfit = map_model.fit(data) c_map = mapfit.mapmri_coeff assert_equal(c_map.shape[0:3], data.shape[0:3]) assert_equal(np.alltrue(np.isreal(c_map)), True) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_multi_voxel.py000066400000000000000000000131411263041327500223050ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from functools import reduce import numpy as np import numpy.testing as npt from dipy.reconst.multi_voxel import _squash, multi_voxel_fit, CallableArray from dipy.core.sphere import unit_icosahedron def test_squash(): A = np.ones((3, 3), dtype=float) B = np.asarray(A, object) npt.assert_array_equal(A, _squash(B)) npt.assert_equal(_squash(B).dtype, A.dtype) B[2, 2] = None A[2, 2] = 0 npt.assert_array_equal(A, _squash(B)) npt.assert_equal(_squash(B).dtype, A.dtype) for ijk in np.ndindex(*B.shape): B[ijk] = np.ones((2,)) A = np.ones((3, 3, 2)) npt.assert_array_equal(A, _squash(B)) npt.assert_equal(_squash(B).dtype, A.dtype) B[2, 2] = None A[2, 2] = 0 npt.assert_array_equal(A, _squash(B)) npt.assert_equal(_squash(B).dtype, A.dtype) # sub-arrays have different shapes ( (3,) and (2,) ) B[0, 0] = np.ones((3,)) npt.assert_(_squash(B) is B) # Check dtypes for arrays and scalars arr_arr = np.zeros((2,), dtype=object) scalar_arr = np.zeros((2,), dtype=object) numeric_types = sum( [np.sctypes[t] for t in ('int', 'uint', 'float', 'complex')], [np.bool_]) for dt0 in numeric_types: arr_arr[0] = np.zeros((3,), dtype=dt0) scalar_arr[0] = dt0(0) for dt1 in numeric_types: arr_arr[1] = np.zeros((3,), dtype=dt1) npt.assert_equal(_squash(arr_arr).dtype, reduce(np.add, arr_arr).dtype) scalar_arr[1] = dt0(1) npt.assert_equal(_squash(scalar_arr).dtype, reduce(np.add, scalar_arr).dtype) # Check masks and Nones arr = np.ones((3, 4), dtype=float) obj_arr = arr.astype(object) arr[1, 1] = 99 obj_arr[1, 1] = None npt.assert_array_equal(_squash(obj_arr, mask=None, fill=99), arr) msk = arr == 1 npt.assert_array_equal(_squash(obj_arr, mask=msk, fill=99), arr) msk[1, 1] = 1 # unmask None - object array back npt.assert_array_equal(_squash(obj_arr, mask=msk, fill=99), obj_arr) msk[1, 1] = 0 # remask, back to fill again npt.assert_array_equal(_squash(obj_arr, mask=msk, fill=99), arr) obj_arr[2, 3] = None # add another unmasked None, object again npt.assert_array_equal(_squash(obj_arr, mask=msk, fill=99), obj_arr) # Check array of arrays obj_arrs = np.zeros((3,), dtype=object) for i in range(3): obj_arrs[i] = np.ones((4, 5)) arr_arrs = np.ones((3, 4, 5)) # No Nones npt.assert_array_equal(_squash(obj_arrs, mask=None, fill=99), arr_arrs) # None, implicit masking obj_masked = obj_arrs.copy() obj_masked[1] = None arr_masked = arr_arrs.copy() arr_masked[1] = 99 npt.assert_array_equal(_squash(obj_masked, mask=None, fill=99), arr_masked) msk = np.array([1, 0, 1], dtype=np.bool_) # explicit mask npt.assert_array_equal(_squash(obj_masked, mask=msk, fill=99), arr_masked) msk[1] = True # unmask None, object array back npt.assert_array_equal(_squash(obj_masked, mask=msk, fill=99), obj_masked) def test_CallableArray(): callarray = CallableArray((2, 3), dtype=object) # Test without Nones callarray[:] = np.arange expected = np.empty([2, 3, 4]) expected[:] = range(4) npt.assert_array_equal(callarray(4), expected) # Test with Nones callarray[0, 0] = None expected[0, 0] = 0 npt.assert_array_equal(callarray(4), expected) def test_multi_voxel_fit(): class SillyModel(object): @multi_voxel_fit def fit(self, data, mask=None): return SillyFit(model, data) def predict(self, S0): return np.ones(10) * S0 class SillyFit(object): def __init__(self, model, data): self.model = model self.data = data model_attr = 2. def odf(self, sphere): return np.ones(len(sphere.phi)) @property def directions(self): n = np.random.randint(0, 10) return np.zeros((n, 3)) def predict(self, S0): return np.ones(self.data.shape) * S0 # Test the single voxel case model = SillyModel() single_voxel = np.zeros(64) fit = model.fit(single_voxel) npt.assert_equal(type(fit), SillyFit) # Test without a mask many_voxels = np.zeros((2, 3, 4, 64)) fit = model.fit(many_voxels) expected = np.empty((2, 3, 4)) expected[:] = 2. npt.assert_array_equal(fit.model_attr, expected) expected = np.ones((2, 3, 4, 12)) npt.assert_array_equal(fit.odf(unit_icosahedron), expected) npt.assert_equal(fit.directions.shape, (2, 3, 4)) S0 = 100. npt.assert_equal(fit.predict(S0=S0), np.ones(many_voxels.shape) * S0) # Test with a mask mask = np.zeros((3, 3, 3)).astype('bool') mask[0, 0] = 1 mask[1, 1] = 1 mask[2, 2] = 1 data = np.zeros((3, 3, 3, 64)) fit = model.fit(data, mask) expected = np.zeros((3,3,3)) expected[0, 0] = 2 expected[1, 1] = 2 expected[2, 2] = 2 npt.assert_array_equal(fit.model_attr, expected) odf = fit.odf(unit_icosahedron) npt.assert_equal(odf.shape, (3, 3, 3, 12)) npt.assert_array_equal(odf[~mask], 0) npt.assert_array_equal(odf[mask], 1) predicted = np.zeros(data.shape) predicted[mask] = S0 npt.assert_equal(fit.predict(S0=S0), predicted) # Test fit.shape npt.assert_equal(fit.shape, (3, 3, 3)) # Test indexing into a fit npt.assert_equal(type(fit[0, 0, 0]), SillyFit) npt.assert_equal(fit[:2, :2, :2].shape, (2, 2, 2)) dipy-0.10.1/dipy/reconst/tests/test_odf.py000066400000000000000000000036101263041327500205060ustar00rootroot00000000000000import numpy as np from numpy.testing import run_module_suite, assert_equal from dipy.reconst.odf import (OdfFit, OdfModel, minmax_normalize) from dipy.core.subdivide_octahedron import create_unit_hemisphere from dipy.sims.voxel import multi_tensor, multi_tensor_odf from dipy.data import get_sphere from dipy.core.gradients import gradient_table, GradientTable _sphere = create_unit_hemisphere(4) _odf = (_sphere.vertices * [1, 2, 3]).sum(-1) _gtab = GradientTable(np.ones((64, 3))) class SimpleOdfModel(OdfModel): sphere = _sphere def fit(self, data): fit = SimpleOdfFit(self, data) return fit class SimpleOdfFit(OdfFit): def odf(self, sphere=None): if sphere is None: sphere = self.model.sphere # Use ascontiguousarray to work around a bug in NumPy return np.ascontiguousarray((sphere.vertices * [1, 2, 3]).sum(-1)) def test_OdfFit(): m = SimpleOdfModel(_gtab) f = m.fit(None) odf = f.odf(_sphere) assert_equal(len(odf), len(_sphere.theta)) def test_minmax_normalize(): bvalue = 3000 S0 = 1 SNR = 100 sphere = get_sphere('symmetric362') bvecs = np.concatenate(([[0, 0, 0]], sphere.vertices)) bvals = np.zeros(len(bvecs)) + bvalue bvals[0] = 0 gtab = gradient_table(bvals, bvecs) evals = np.array(([0.0017, 0.0003, 0.0003], [0.0017, 0.0003, 0.0003])) S, sticks = multi_tensor(gtab, evals, S0, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=SNR) odf = multi_tensor_odf(sphere.vertices, evals, angles=[(0, 0), (90, 0)], fractions=[50, 50]) odf2 = minmax_normalize(odf) assert_equal(odf2.max(), 1) assert_equal(odf2.min(), 0) odf3 = np.empty(odf.shape) odf3 = minmax_normalize(odf, odf3) assert_equal(odf3.max(), 1) assert_equal(odf3.min(), 0) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_peak_finding.py000066400000000000000000000122701263041327500223560ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np import numpy.testing as npt from dipy.reconst.recspeed import (local_maxima, remove_similar_vertices, search_descending) from dipy.data import get_sphere, get_data from dipy.core.sphere import unique_edges, HemiSphere from dipy.sims.voxel import all_tensor_evecs def test_local_maxima(): sphere = get_sphere('symmetric724') vertices, faces = sphere.vertices, sphere.faces edges = unique_edges(faces) # Check that the first peak is == max(odf) odf = abs(vertices.sum(-1)) peak_values, peak_index = local_maxima(odf, edges) npt.assert_equal(max(odf), peak_values[0]) npt.assert_equal(max(odf), odf[peak_index[0]]) # Create an artificial odf with a few peaks odf = np.zeros(len(vertices)) odf[1] = 1. odf[143] = 143. odf[505] = 505. peak_values, peak_index = local_maxima(odf, edges) npt.assert_array_equal(peak_values, [505, 143, 1]) npt.assert_array_equal(peak_index, [505, 143, 1]) # Check that neighboring points can both be peaks odf = np.zeros(len(vertices)) point1, point2 = edges[0] odf[[point1, point2]] = 1. peak_values, peak_index = local_maxima(odf, edges) npt.assert_array_equal(peak_values, [1., 1.]) npt.assert_(point1 in peak_index) npt.assert_(point2 in peak_index) # Repeat with a hemisphere hemisphere = HemiSphere(xyz=vertices, faces=faces) vertices, edges = hemisphere.vertices, hemisphere.edges # Check that the first peak is == max(odf) odf = abs(vertices.sum(-1)) peak_values, peak_index = local_maxima(odf, edges) npt.assert_equal(max(odf), peak_values[0]) npt.assert_equal(max(odf), odf[peak_index[0]]) # Create an artificial odf with a few peaks odf = np.zeros(len(vertices)) odf[1] = 1. odf[143] = 143. odf[300] = 300. peak_value, peak_index = local_maxima(odf, edges) npt.assert_array_equal(peak_value, [300, 143, 1]) npt.assert_array_equal(peak_index, [300, 143, 1]) # Check that neighboring points can both be peaks odf = np.zeros(len(vertices)) point1, point2 = edges[0] odf[[point1, point2]] = 1. peak_values, peak_index = local_maxima(odf, edges) npt.assert_array_equal(peak_values, [1., 1.]) npt.assert_(point1 in peak_index) npt.assert_(point2 in peak_index) # Should raise an error if odf has nans odf[20] = np.nan npt.assert_raises(ValueError, local_maxima, odf, edges) # Should raise an error if edge values are too large to index odf edges[0, 0] = 9999 odf[20] = 0 npt.assert_raises(IndexError, local_maxima, odf, edges) def test_remove_similar_peaks(): vertices = np.array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.], [1.1, 1., 0.], [0., 2., 1.], [2., 1., 0.], [1., 0., 0.]]) norms = np.sqrt((vertices*vertices).sum(-1)) vertices = vertices/norms[:, None] # Return unique vertices uv = remove_similar_vertices(vertices, .01) npt.assert_array_equal(uv, vertices[:6]) # Return vertices with mapping and indices uv, mapping, index = remove_similar_vertices(vertices, .01, return_mapping=True, return_index=True) npt.assert_array_equal(uv, vertices[:6]) npt.assert_array_equal(mapping, list(range(6)) + [0]) npt.assert_array_equal(index, range(6)) # Test mapping with different angles uv, mapping = remove_similar_vertices(vertices, .01, return_mapping=True) npt.assert_array_equal(uv, vertices[:6]) npt.assert_array_equal(mapping, list(range(6)) + [0]) uv, mapping = remove_similar_vertices(vertices, 30, return_mapping=True) npt.assert_array_equal(uv, vertices[:4]) npt.assert_array_equal(mapping, list(range(4)) + [1, 0, 0]) uv, mapping = remove_similar_vertices(vertices, 60, return_mapping=True) npt.assert_array_equal(uv, vertices[:3]) npt.assert_array_equal(mapping, list(range(3)) + [0, 1, 0, 0]) # Test index with different angles uv, index = remove_similar_vertices(vertices, .01, return_index=True) npt.assert_array_equal(uv, vertices[:6]) npt.assert_array_equal(index, range(6)) uv, index = remove_similar_vertices(vertices, 30, return_index=True) npt.assert_array_equal(uv, vertices[:4]) npt.assert_array_equal(index, range(4)) uv, index = remove_similar_vertices(vertices, 60, return_index=True) npt.assert_array_equal(uv, vertices[:3]) npt.assert_array_equal(index, range(3)) def test_search_descending(): a = np.linspace(10., 1., 10) npt.assert_equal(search_descending(a, 1.), 1) npt.assert_equal(search_descending(a, .89), 2) npt.assert_equal(search_descending(a, .79), 3) # Test small array npt.assert_equal(search_descending(a[:1], 1.), 1) npt.assert_equal(search_descending(a[:1], 0.), 1) npt.assert_equal(search_descending(a[:1], .5), 1) # Test very small array npt.assert_equal(search_descending(a[:0], 1.), 0) if __name__ == '__main__': import nose nose.runmodule() dipy-0.10.1/dipy/reconst/tests/test_peakdf.py000066400000000000000000000045571263041327500212030ustar00rootroot00000000000000import numpy as np import numpy.testing as npt from dipy.direction.peaks import default_sphere, peaks_from_model def test_PeaksAndMetricsDirectionGetter(): class SillyModel(object): def fit(self, data, mask=None): return SillyFit(self) class SillyFit(object): def __init__(self, model): self.model = model def odf(self, sphere): odf = np.zeros(sphere.theta.shape) r = np.random.randint(0, len(odf)) odf[r] = 1 return odf def get_direction(dg, point, dir): newdir = dir.copy() state = dg.get_direction(point, newdir) return (state, np.array(newdir)) data = np.random.random((3, 4, 5, 2)) peaks = peaks_from_model(SillyModel(), data, default_sphere, relative_peak_threshold=.5, min_separation_angle=25) peaks._initialize() up = np.zeros(3) up[2] = 1. down = -up for i in range(3-1): for j in range(4-1): for k in range(5-1): point = np.array([i, j, k], dtype=float) # Test that the angle threshold rejects points peaks.ang_thr = 0. state, nd = get_direction(peaks, point, up) npt.assert_equal(state, 1) # Here we leverage the fact that we know Hemispheres project # all their vertices into the z >= 0 half of the sphere. peaks.ang_thr = 90. state, nd = get_direction(peaks, point, up) npt.assert_equal(state, 0) expected_dir = peaks.peak_dirs[i, j, k, 0] npt.assert_array_almost_equal(nd, expected_dir) state, nd = get_direction(peaks, point, down) npt.assert_array_almost_equal(nd, -expected_dir) # Check that we can get directions at non-integer points point += np.random.random(3) state, nd = get_direction(peaks, point, up) npt.assert_equal(state, 0) # Check that points are rounded to get initial direction point -= .5 id = peaks.initial_direction(point) # id should be a (1, 3) array npt.assert_array_almost_equal(id, [expected_dir]) if __name__ == "__main__": npt.run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_reco_utils.py000066400000000000000000000045041263041327500221110ustar00rootroot00000000000000""" Testing reconstruction utilities """ import numpy as np from dipy.reconst.recspeed import (adj_to_countarrs, argmax_from_countarrs) from nose.tools import assert_true, assert_false, \ assert_equal, assert_raises from numpy.testing import assert_array_equal, assert_array_almost_equal def test_adj_countarrs(): adj = [[0, 1, 2], [2, 3], [4, 5, 6, 7]] counts, inds = adj_to_countarrs(adj) assert_array_equal(counts, [3, 2, 4]) assert_equal(counts.dtype.type, np.uint32) assert_array_equal(inds, [0, 1, 2, 2, 3, 4, 5, 6, 7]) assert_equal(inds.dtype.type, np.uint32) def test_argmax_from_countarrs(): # basic case vals = np.arange(10, dtype=np.float) vertinds = np.arange(10, dtype=np.uint32) adj_counts = np.ones((10,), dtype=np.uint32) adj_inds_raw = np.arange(10, dtype=np.uint32)[::-1] # when contigous - OK adj_inds = adj_inds_raw.copy() inds = argmax_from_countarrs(vals, vertinds, adj_counts, adj_inds) #yield assert_array_equal(inds, [5, 6, 7, 8, 9]) # test for errors - first - not contiguous # # The tests below cause odd errors and segfaults with numpy SVN # vintage June 2010 (sometime after 1.4.0 release) - see # http://groups.google.com/group/cython-users/browse_thread/thread/624c696293b7fe44?pli=1 """ yield assert_raises(ValueError, argmax_from_countarrs, vals, vertinds, adj_counts, adj_inds_raw) # too few vertices yield assert_raises(ValueError, argmax_from_countarrs, vals, vertinds[:-1], adj_counts, adj_inds) # adj_inds too short yield assert_raises(IndexError, argmax_from_countarrs, vals, vertinds, adj_counts, adj_inds[:-1]) # vals too short yield assert_raises(IndexError, argmax_from_countarrs, vals[:-1], vertinds, adj_counts, adj_inds) """ dipy-0.10.1/dipy/reconst/tests/test_sfm.py000066400000000000000000000131601263041327500205240ustar00rootroot00000000000000import numpy as np import numpy.testing as npt import nibabel as nib import dipy.reconst.sfm as sfm import dipy.data as dpd import dipy.core.gradients as grad import dipy.sims.voxel as sims import dipy.core.optimize as opt import dipy.reconst.cross_validation as xval def test_design_matrix(): data, gtab = dpd.dsi_voxels() sphere = dpd.get_sphere() # Make it with NNLS, so that it gets tested regardless of sklearn sparse_fascicle_model = sfm.SparseFascicleModel(gtab, sphere, solver='NNLS') npt.assert_equal(sparse_fascicle_model.design_matrix.shape, (np.sum(~gtab.b0s_mask), sphere.vertices.shape[0])) @npt.dec.skipif(not sfm.has_sklearn) def test_sfm(): fdata, fbvals, fbvecs = dpd.get_data() data = nib.load(fdata).get_data() gtab = grad.gradient_table(fbvals, fbvecs) for iso in [sfm.ExponentialIsotropicModel, None]: sfmodel = sfm.SparseFascicleModel(gtab, isotropic=iso) sffit1 = sfmodel.fit(data[0, 0, 0]) sphere = dpd.get_sphere() odf1 = sffit1.odf(sphere) pred1 = sffit1.predict(gtab) mask = np.ones(data.shape[:-1]) sffit2 = sfmodel.fit(data, mask) pred2 = sffit2.predict(gtab) odf2 = sffit2.odf(sphere) sffit3 = sfmodel.fit(data) pred3 = sffit3.predict(gtab) odf3 = sffit3.odf(sphere) npt.assert_almost_equal(pred3, pred2, decimal=2) npt.assert_almost_equal(pred3[0, 0, 0], pred1, decimal=2) npt.assert_almost_equal(odf3[0, 0, 0], odf1, decimal=2) npt.assert_almost_equal(odf3[0, 0, 0], odf2[0, 0, 0], decimal=2) # Fit zeros and you will get back zeros npt.assert_almost_equal(sfmodel.fit(np.zeros(data[0, 0, 0].shape)).beta, np.zeros(sfmodel.design_matrix[0].shape[-1])) @npt.dec.skipif(not sfm.has_sklearn) def test_predict(): SNR = 1000 S0 = 100 _, fbvals, fbvecs = dpd.get_data('small_64D') bvals = np.load(fbvals) bvecs = np.load(fbvecs) gtab = grad.gradient_table(bvals, bvecs) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (60, 0)] S, sticks = sims.multi_tensor(gtab, mevals, S0, angles=angles, fractions=[10, 90], snr=SNR) sfmodel = sfm.SparseFascicleModel(gtab, response=[0.0015, 0.0003, 0.0003]) sffit = sfmodel.fit(S) pred = sffit.predict() npt.assert_(xval.coeff_of_determination(pred, S) > 97) # Should be possible to predict using a different gtab: new_gtab = grad.gradient_table(bvals[::2], bvecs[::2]) new_pred = sffit.predict(new_gtab) npt.assert_(xval.coeff_of_determination(new_pred, S[::2]) > 97) def test_sfm_background(): fdata, fbvals, fbvecs = dpd.get_data() data = nib.load(fdata).get_data() gtab = grad.gradient_table(fbvals, fbvecs) to_fit = data[0,0,0] to_fit[gtab.b0s_mask] = 0 sfmodel = sfm.SparseFascicleModel(gtab, solver='NNLS') sffit = sfmodel.fit(to_fit) npt.assert_equal(sffit.beta, np.zeros_like(sffit.beta)) def test_sfm_stick(): fdata, fbvals, fbvecs = dpd.get_data() data = nib.load(fdata).get_data() gtab = grad.gradient_table(fbvals, fbvecs) sfmodel = sfm.SparseFascicleModel(gtab, solver='NNLS', response=[0.001, 0, 0]) sffit1 = sfmodel.fit(data[0, 0, 0]) sphere = dpd.get_sphere() odf1 = sffit1.odf(sphere) pred1 = sffit1.predict(gtab) SNR = 1000 S0 = 100 mevals = np.array(([0.001, 0, 0], [0.001, 0, 0])) angles = [(0, 0), (60, 0)] S, sticks = sims.multi_tensor(gtab, mevals, S0, angles=angles, fractions=[50, 50], snr=SNR) sfmodel = sfm.SparseFascicleModel(gtab, solver='NNLS', response=[0.001, 0, 0]) sffit = sfmodel.fit(S) pred = sffit.predict() npt.assert_(xval.coeff_of_determination(pred, S) > 96) def test_sfm_sklearnlinearsolver(): class SillySolver(opt.SKLearnLinearSolver): def fit(self, X, y): self.coef_ = np.ones(X.shape[-1]) class EvenSillierSolver(object): def fit(self, X, y): self.coef_ = np.ones(X.shape[-1]) fdata, fbvals, fbvecs = dpd.get_data() gtab = grad.gradient_table(fbvals, fbvecs) sfmodel = sfm.SparseFascicleModel(gtab, solver=SillySolver()) npt.assert_(isinstance(sfmodel.solver, SillySolver)) npt.assert_raises(ValueError, sfm.SparseFascicleModel, gtab, solver=EvenSillierSolver()) @npt.dec.skipif(not sfm.has_sklearn) def test_exponential_iso(): fdata, fbvals, fbvecs = dpd.get_data() data_dti = nib.load(fdata).get_data() gtab_dti = grad.gradient_table(fbvals, fbvecs) data_multi, gtab_multi = dpd.dsi_deconv_voxels() for data, gtab in zip([data_dti, data_multi], [gtab_dti, gtab_multi]): sfmodel = sfm.SparseFascicleModel( gtab, isotropic=sfm.ExponentialIsotropicModel) sffit1 = sfmodel.fit(data[0, 0, 0]) sphere = dpd.get_sphere() odf1 = sffit1.odf(sphere) pred1 = sffit1.predict(gtab) SNR = 1000 S0 = 100 mevals = np.array(([0.0015, 0.0005, 0.0005], [0.0015, 0.0005, 0.0005])) angles = [(0, 0), (60, 0)] S, sticks = sims.multi_tensor(gtab, mevals, S0, angles=angles, fractions=[50, 50], snr=SNR) sffit = sfmodel.fit(S) pred = sffit.predict() npt.assert_(xval.coeff_of_determination(pred, S) > 96) dipy-0.10.1/dipy/reconst/tests/test_shm.py000066400000000000000000000413421263041327500205310ustar00rootroot00000000000000"""Test spherical harmonic models and the tools associated with those models""" import numpy as np import numpy.linalg as npl from nose.tools import assert_equal, assert_raises, assert_true from numpy.testing import assert_array_equal, assert_array_almost_equal import numpy.testing as npt from scipy.special import sph_harm as sph_harm_sp from dipy.core.sphere import hemi_icosahedron from dipy.core.gradients import gradient_table from dipy.sims.voxel import single_tensor from dipy.direction.peaks import peak_directions from dipy.reconst.shm import sf_to_sh, sh_to_sf from dipy.reconst.interpolate import NearestNeighborInterpolator from dipy.sims.voxel import multi_tensor_odf from dipy.data import mrtrix_spherical_functions from dipy.reconst import odf from dipy.reconst.shm import (real_sph_harm, real_sym_sh_basis, real_sym_sh_mrtrix, sph_harm_ind_list, order_from_ncoef, OpdtModel, normalize_data, hat, lcr_matrix, smooth_pinv, bootstrap_data_array, bootstrap_data_voxel, ResidualBootstrapWrapper, CsaOdfModel, QballModel, SphHarmFit, spherical_harmonics, anisotropic_power, calculate_max_order) def test_order_from_ncoeff(): """ """ # Just try some out: for sh_order in [2, 4, 6, 8, 12, 24]: m, n = sph_harm_ind_list(sh_order) n_coef = m.shape[0] npt.assert_equal(order_from_ncoef(n_coef), sh_order) def test_sph_harm_ind_list(): m_list, n_list = sph_harm_ind_list(8) assert_equal(m_list.shape, n_list.shape) assert_equal(m_list.shape, (45,)) assert_true(np.all(np.abs(m_list) <= n_list)) assert_array_equal(n_list % 2, 0) assert_raises(ValueError, sph_harm_ind_list, 1) def test_real_sph_harm(): # Tests derived from tables in # http://en.wikipedia.org/wiki/Table_of_spherical_harmonics # where real spherical harmonic $Y^m_n$ is defined to be: # Real($Y^m_n$) * sqrt(2) if m > 0 # $Y^m_n$ if m == 0 # Imag($Y^m_n$) * sqrt(2) if m < 0 rsh = real_sph_harm pi = np.pi exp = np.exp sqrt = np.sqrt sin = np.sin cos = np.cos assert_array_almost_equal(rsh(0, 0, 0, 0), 0.5 / sqrt(pi)) assert_array_almost_equal(rsh(-2, 2, pi / 5, pi / 3), 0.25 * sqrt(15. / (2. * pi)) * (sin(pi / 5.)) ** 2. * cos(0 + 2. * pi / 3) * sqrt(2)) assert_array_almost_equal(rsh(2, 2, pi / 5, pi / 3), -1 * 0.25 * sqrt(15. / (2. * pi)) * (sin(pi / 5.)) ** 2. * sin(0 - 2. * pi / 3) * sqrt(2)) assert_array_almost_equal(rsh(-2, 2, pi / 2, pi), 0.25 * sqrt(15 / (2. * pi)) * cos(2. * pi) * sin(pi / 2.) ** 2. * sqrt(2)) assert_array_almost_equal(rsh(2, 4, pi / 3., pi / 4.), -1 * (3. / 8.) * sqrt(5. / (2. * pi)) * sin(0 - 2. * pi / 4.) * sin(pi / 3.) ** 2. * (7. * cos(pi / 3.) ** 2. - 1) * sqrt(2)) assert_array_almost_equal(rsh(-4, 4, pi / 6., pi / 8.), (3. / 16.) * sqrt(35. / (2. * pi)) * cos(0 + 4. * pi / 8.) * sin(pi / 6.) ** 4. * sqrt(2)) assert_array_almost_equal(rsh(4, 4, pi / 6., pi / 8.), -1 * (3. / 16.) * sqrt(35. / (2. * pi)) * sin(0 - 4. * pi / 8.) * sin(pi / 6.) ** 4. * sqrt(2)) aa = np.ones((3, 1, 1, 1)) bb = np.ones((1, 4, 1, 1)) cc = np.ones((1, 1, 5, 1)) dd = np.ones((1, 1, 1, 6)) assert_equal(rsh(aa, bb, cc, dd).shape, (3, 4, 5, 6)) def test_real_sym_sh_mrtrix(): coef, expected, sphere = mrtrix_spherical_functions() basis, m, n = real_sym_sh_mrtrix(8, sphere.theta, sphere.phi) func = np.dot(coef, basis.T) assert_array_almost_equal(func, expected, 4) def test_real_sym_sh_basis(): # This test should do for now # The mrtrix basis should be the same as re-ordering and re-scaling the # fibernav basis new_order = [0, 5, 4, 3, 2, 1, 14, 13, 12, 11, 10, 9, 8, 7, 6] sphere = hemi_icosahedron.subdivide(2) basis, m, n = real_sym_sh_mrtrix(4, sphere.theta, sphere.phi) expected = basis[:, new_order] expected *= np.where(m == 0, 1., np.sqrt(2)) fibernav_basis, m, n = real_sym_sh_basis(4, sphere.theta, sphere.phi) assert_array_almost_equal(fibernav_basis, expected) def test_smooth_pinv(): hemi = hemi_icosahedron.subdivide(2) m, n = sph_harm_ind_list(4) B = real_sph_harm(m, n, hemi.theta[:, None], hemi.phi[:, None]) L = np.zeros(len(m)) C = smooth_pinv(B, L) D = np.dot(npl.inv(np.dot(B.T, B)), B.T) assert_array_almost_equal(C, D) L = n * (n + 1) * .05 C = smooth_pinv(B, L) L = np.diag(L) D = np.dot(npl.inv(np.dot(B.T, B) + L * L), B.T) assert_array_almost_equal(C, D) L = np.arange(len(n)) * .05 C = smooth_pinv(B, L) L = np.diag(L) D = np.dot(npl.inv(np.dot(B.T, B) + L * L), B.T) assert_array_almost_equal(C, D) def test_normalize_data(): sig = np.arange(1, 66)[::-1] where_b0 = np.zeros(65, 'bool') where_b0[0] = True d = normalize_data(sig, where_b0, 1) assert_raises(ValueError, normalize_data, sig, where_b0, out=sig) norm_sig = normalize_data(sig, where_b0, min_signal=1) assert_array_almost_equal(norm_sig, sig / 65.) norm_sig = normalize_data(sig, where_b0, min_signal=5) assert_array_almost_equal(norm_sig[-5:], 5 / 65.) where_b0[[0, 1]] = [True, True] norm_sig = normalize_data(sig, where_b0, min_signal=1) assert_array_almost_equal(norm_sig, sig / 64.5) norm_sig = normalize_data(sig, where_b0, min_signal=5) assert_array_almost_equal(norm_sig[-5:], 5 / 64.5) sig = sig * np.ones((2, 3, 1)) where_b0[[0, 1]] = [True, False] norm_sig = normalize_data(sig, where_b0, min_signal=1) assert_array_almost_equal(norm_sig, sig / 65.) norm_sig = normalize_data(sig, where_b0, min_signal=5) assert_array_almost_equal(norm_sig[..., -5:], 5 / 65.) where_b0[[0, 1]] = [True, True] norm_sig = normalize_data(sig, where_b0, min_signal=1) assert_array_almost_equal(norm_sig, sig / 64.5) norm_sig = normalize_data(sig, where_b0, min_signal=5) assert_array_almost_equal(norm_sig[..., -5:], 5 / 64.5) def make_fake_signal(): hemisphere = hemi_icosahedron.subdivide(2) bvecs = np.concatenate(([[0, 0, 0]], hemisphere.vertices)) bvals = np.zeros(len(bvecs)) + 2000 bvals[0] = 0 gtab = gradient_table(bvals, bvecs) evals = np.array([[2.1, .2, .2], [.2, 2.1, .2]]) * 10 ** -3 evecs0 = np.eye(3) sq3 = np.sqrt(3) / 2. evecs1 = np.array([[sq3, .5, 0], [.5, sq3, 0], [0, 0, 1.]]) evecs1 = evecs0 a = evecs0[0] b = evecs1[1] S1 = single_tensor(gtab, .55, evals[0], evecs0) S2 = single_tensor(gtab, .45, evals[1], evecs1) return S1 + S2, gtab, np.vstack([a, b]) class TestQballModel(object): model = QballModel def test_single_voxel_fit(self): signal, gtab, expected = make_fake_signal() sphere = hemi_icosahedron.subdivide(4) model = self.model(gtab, sh_order=4, min_signal=1e-5, assume_normed=True) fit = model.fit(signal) odf = fit.odf(sphere) assert_equal(odf.shape, sphere.phi.shape) directions, _, _ = peak_directions(odf, sphere) # Check the same number of directions n = len(expected) assert_equal(len(directions), n) # Check directions are unit vectors cos_similarity = (directions * directions).sum(-1) assert_array_almost_equal(cos_similarity, np.ones(n)) # Check the directions == expected or -expected cos_similarity = (directions * expected).sum(-1) assert_array_almost_equal(abs(cos_similarity), np.ones(n)) # Test normalize data model = self.model(gtab, sh_order=4, min_signal=1e-5, assume_normed=False) fit = model.fit(signal * 5) odf_with_norm = fit.odf(sphere) assert_array_almost_equal(odf, odf_with_norm) def test_mulit_voxel_fit(self): signal, gtab, expected = make_fake_signal() sphere = hemi_icosahedron nd_signal = np.vstack([signal, signal]) model = self.model(gtab, sh_order=4, min_signal=1e-5, assume_normed=True) fit = model.fit(nd_signal) odf = fit.odf(sphere) assert_equal(odf.shape, (2,) + sphere.phi.shape) # Test fitting with mask, where mask is False odf should be 0 fit = model.fit(nd_signal, mask=[False, True]) odf = fit.odf(sphere) assert_array_equal(odf[0], 0.) def test_sh_order(self): signal, gtab, expected = make_fake_signal() model = self.model(gtab, sh_order=4, min_signal=1e-5) assert_equal(model.B.shape[1], 15) assert_equal(max(model.n), 4) model = self.model(gtab, sh_order=6, min_signal=1e-5) assert_equal(model.B.shape[1], 28) assert_equal(max(model.n), 6) def test_gfa(self): signal, gtab, expected = make_fake_signal() signal = np.ones((2, 3, 4, 1)) * signal sphere = hemi_icosahedron.subdivide(3) model = self.model(gtab, 6, min_signal=1e-5) fit = model.fit(signal) gfa_shm = fit.gfa gfa_odf = odf.gfa(fit.odf(sphere)) assert_array_almost_equal(gfa_shm, gfa_odf, 3) # gfa should be 0 if all coefficients are 0 (masked areas) mask = np.zeros(signal.shape[:-1]) fit = model.fit(signal, mask) assert_array_equal(fit.gfa, 0) def test_SphHarmFit(): coef = np.zeros((3, 4, 5, 45)) mask = np.zeros((3, 4, 5), dtype=bool) fit = SphHarmFit(None, coef, mask) item = fit[0, 0, 0] assert_equal(item.shape, ()) slice = fit[0] assert_equal(slice.shape, (4, 5)) slice = fit[..., 0] assert_equal(slice.shape, (3, 4)) class TestOpdtModel(TestQballModel): model = OpdtModel class TestCsaOdfModel(TestQballModel): model = CsaOdfModel def test_hat_and_lcr(): hemi = hemi_icosahedron.subdivide(3) m, n = sph_harm_ind_list(8) B = real_sph_harm(m, n, hemi.theta[:, None], hemi.phi[:, None]) H = hat(B) B_hat = np.dot(H, B) assert_array_almost_equal(B, B_hat) R = lcr_matrix(H) d = np.arange(len(hemi.theta)) r = d - np.dot(H, d) lev = np.sqrt(1 - H.diagonal()) r /= lev r -= r.mean() r2 = np.dot(R, d) assert_array_almost_equal(r, r2) r3 = np.dot(d, R.T) assert_array_almost_equal(r, r3) def test_bootstrap_array(): B = np.array([[4, 5, 7, 4, 2.], [4, 6, 2, 3, 6.]]) H = hat(B.T) R = np.zeros((5, 5)) d = np.arange(1, 6) dhat = np.dot(H, d) assert_array_almost_equal(bootstrap_data_voxel(dhat, H, R), dhat) assert_array_almost_equal(bootstrap_data_array(dhat, H, R), dhat) H = np.zeros((5, 5)) def test_ResidualBootstrapWrapper(): B = np.array([[4, 5, 7, 4, 2.], [4, 6, 2, 3, 6.]]) B = B.T H = hat(B) d = np.arange(10) / 8. d.shape = (2, 5) dhat = np.dot(d, H) signal_object = NearestNeighborInterpolator(dhat, (1,)) ms = .2 where_dwi = np.ones(len(H), dtype=bool) boot_obj = ResidualBootstrapWrapper(signal_object, B, where_dwi, ms) assert_array_almost_equal(boot_obj[0], dhat[0].clip(ms, 1)) assert_array_almost_equal(boot_obj[1], dhat[1].clip(ms, 1)) dhat = np.column_stack([[.6, .7], dhat]) signal_object = NearestNeighborInterpolator(dhat, (1,)) where_dwi = np.concatenate([[False], where_dwi]) boot_obj = ResidualBootstrapWrapper(signal_object, B, where_dwi, ms) assert_array_almost_equal(boot_obj[0], dhat[0].clip(ms, 1)) assert_array_almost_equal(boot_obj[1], dhat[1].clip(ms, 1)) def test_sf_to_sh(): # Subdividing a hemi_icosahedron twice produces 81 unique points, which # is more than enough to fit a order 8 (45 coefficients) spherical harmonic sphere = hemi_icosahedron.subdivide(2) mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angles = [(0, 0), (90, 0)] odf = multi_tensor_odf(sphere.vertices, mevals, angles, [50, 50]) # 1D case with the 3 bases functions odf_sh = sf_to_sh(odf, sphere, 8) odf2 = sh_to_sf(odf_sh, sphere, 8) assert_array_almost_equal(odf, odf2, 2) odf_sh = sf_to_sh(odf, sphere, 8, "mrtrix") odf2 = sh_to_sf(odf_sh, sphere, 8, "mrtrix") assert_array_almost_equal(odf, odf2, 2) odf_sh = sf_to_sh(odf, sphere, 8, "fibernav") odf2 = sh_to_sf(odf_sh, sphere, 8, "fibernav") assert_array_almost_equal(odf, odf2, 2) # 2D case odf2d = np.vstack((odf2, odf)) odf2d_sh = sf_to_sh(odf2d, sphere, 8) odf2d_sf = sh_to_sf(odf2d_sh, sphere, 8) assert_array_almost_equal(odf2d, odf2d_sf, 2) def test_faster_sph_harm(): sh_order = 8 m, n = sph_harm_ind_list(sh_order) theta = np.array([1.61491146, 0.76661665, 0.11976141, 1.20198246, 1.74066314, 1.5925956 , 2.13022055, 0.50332859, 1.19868988, 0.78440679, 0.50686938, 0.51739718, 1.80342999, 0.73778957, 2.28559395, 1.29569064, 1.86877091, 0.39239191, 0.54043037, 1.61263047, 0.72695314, 1.90527318, 1.58186125, 0.23130073, 2.51695237, 0.99835604, 1.2883426 , 0.48114057, 1.50079318, 1.07978624, 1.9798903 , 2.36616966, 2.49233299, 2.13116602, 1.36801518, 1.32932608, 0.95926683, 1.070349 , 0.76355762, 2.07148422, 1.50113501, 1.49823314, 0.89248164, 0.22187079, 1.53805373, 1.9765295 , 1.13361568, 1.04908355, 1.68737368, 1.91732452, 1.01937457, 1.45839 , 0.49641525, 0.29087155, 0.52824641, 1.29875871, 1.81023541, 1.17030475, 2.24953206, 1.20280498, 0.76399964, 2.16109722, 0.79780421, 0.87154509]) phi = np.array([-1.5889514 , -3.11092733, -0.61328674, -2.4485381 , 2.88058822, 2.02165946, -1.99783366, 2.71235211, 1.41577992, -2.29413676, -2.24565773, -1.55548635, 2.59318232, -1.84672472, -2.33710739, 2.12111948, 1.87523722, -1.05206575, -2.85381987, -2.22808984, 2.3202034 , -2.19004474, -1.90358372, 2.14818373, 3.1030696 , -2.86620183, -2.19860123, -0.45468447, -3.0034923 , 1.73345011, -2.51716288, 2.49961525, -2.68782986, 2.69699056, 1.78566133, -1.59119705, -2.53378963, -2.02476738, 1.36924987, 2.17600517, 2.38117241, 2.99021511, -1.4218007 , -2.44016802, -2.52868164, 3.01531658, 2.50093627, -1.70745826, -2.7863931 , -2.97359741, 2.17039906, 2.68424643, 1.77896086, 0.45476215, 0.99734418, -2.73107896, 2.28815009, 2.86276506, 3.09450274, -3.09857384, -1.06955885, -2.83826831, 1.81932195, 2.81296654]) sh = spherical_harmonics(m, n, theta[:, None], phi[:, None]) sh2 = sph_harm_sp(m, n, theta[:, None], phi[:, None]) assert_array_almost_equal(sh, sh2, 8) def test_anisotropic_power(): for n_coeffs in [6, 15, 28, 45, 66, 91]: for norm_factor in [0.0005, 0.00001]: # Create some really simple cases: coeffs = np.ones((3, n_coeffs)) max_order = calculate_max_order(coeffs.shape[-1]) # For the case where all coeffs == 1, the ap is simply log of the # number of even orders up to the maximal order: analytic = (np.log(len(range(2, max_order + 2, 2))) - np.log(norm_factor)) answers = [analytic] * 3 apvals = anisotropic_power(coeffs, norm_factor=norm_factor) assert_array_almost_equal(apvals, answers) # Test that this works for single voxel arrays as well: assert_array_almost_equal( anisotropic_power(coeffs[1], norm_factor=norm_factor), answers[1]) def test_calculate_max_order(): """Based on the table in: http://jdtournier.github.io/mrtrix-0.2/tractography/preprocess.html """ orders = [2, 4, 6, 8, 10, 12] n_coeffs = [6, 15, 28, 45, 66, 91] for o, n in zip(orders, n_coeffs): assert_equal(calculate_max_order(n), o) if __name__ == "__main__": import nose nose.runmodule() dipy-0.10.1/dipy/reconst/tests/test_shore_fitting.py000066400000000000000000000047471263041327500226160ustar00rootroot00000000000000# Tests for shore fitting from math import factorial import numpy as np from scipy.special import genlaguerre, gamma from ...data import get_gtab_taiwan_dsi from ..shore import ShoreModel from ...sims.voxel import MultiTensor from numpy.testing import (assert_almost_equal, assert_equal, run_module_suite, dec) from ...utils.optpkg import optional_package cvxopt, have_cvxopt, _ = optional_package("cvxopt") needs_cvxopt = dec.skipif(not have_cvxopt) # Object to hold module global data class _C(object): pass data = _C() def setup(): data.gtab = get_gtab_taiwan_dsi() data.mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) data.angl = [(0, 0), (60, 0)] data.S, sticks = MultiTensor( data.gtab, data.mevals, S0=100.0, angles=data.angl, fractions=[50, 50], snr=None) data.radial_order = 6 data.zeta = 700 data.lambdaN = 1e-12 data.lambdaL = 1e-12 @needs_cvxopt def test_shore_positive_constrain(): asm = ShoreModel(data.gtab, radial_order=data.radial_order, zeta=data.zeta, lambdaN=data.lambdaN, lambdaL=data.lambdaL, constrain_e0=True, positive_constraint=True, pos_grid=11, pos_radius=20e-03) asmfit = asm.fit(data.S) eap = asmfit.pdf_grid(11, 20e-03) assert_equal(eap[eap<0].sum(), 0) def test_shore_fitting_no_constrain_e0(): asm = ShoreModel(data.gtab, radial_order=data.radial_order, zeta=data.zeta, lambdaN=data.lambdaN, lambdaL=data.lambdaL) asmfit = asm.fit(data.S) assert_almost_equal(compute_e0(asmfit), 1) @needs_cvxopt def test_shore_fitting_constrain_e0(): asm = ShoreModel(data.gtab, radial_order=data.radial_order, zeta=data.zeta, lambdaN=data.lambdaN, lambdaL=data.lambdaL, constrain_e0 = True) asmfit = asm.fit(data.S) assert_almost_equal(compute_e0(asmfit), 1) def compute_e0(shorefit): signal_0 = 0 for n in range(int(shorefit.model.radial_order / 2) + 1): signal_0 += shorefit.shore_coeff[n] * (genlaguerre(n, 0.5)(0) * ((factorial(n)) / (2 * np.pi * (shorefit.model.zeta ** 1.5) * gamma(n + 1.5))) ** 0.5) return signal_0 if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_shore_metrics.py000066400000000000000000000065331263041327500226130ustar00rootroot00000000000000import numpy as np from dipy.data import get_gtab_taiwan_dsi from numpy.testing import (assert_almost_equal, assert_equal, run_module_suite) from dipy.reconst.shore import ShoreModel, shore_matrix, shore_indices, shore_order from dipy.sims.voxel import ( MultiTensor, all_tensor_evecs, multi_tensor_odf, single_tensor_odf, multi_tensor_rtop, multi_tensor_msd, multi_tensor_pdf) from dipy.data import get_sphere from scipy.special import genlaguerre def test_shore_metrics(): gtab = get_gtab_taiwan_dsi() mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) angl = [(0, 0), (60, 0)] S, sticks = MultiTensor(gtab, mevals, S0=100.0, angles=angl, fractions=[50, 50], snr=None) # test shore_indices n = 7 l = 6 m = -4 radial_order, c = shore_order(n, l, m) n2, l2, m2 = shore_indices(radial_order, c) assert_equal(n, n2) assert_equal(l, l2) assert_equal(m, m2) radial_order = 6 c = 41 n, l, m = shore_indices(radial_order, c) radial_order2, c2 = shore_order(n, l, m) assert_equal(radial_order, radial_order2) assert_equal(c, c2) # since we are testing without noise we can use higher order and lower lambdas, with respect to the default. radial_order = 8 zeta = 700 lambdaN = 1e-12 lambdaL = 1e-12 asm = ShoreModel(gtab, radial_order=radial_order, zeta=zeta, lambdaN=lambdaN, lambdaL=lambdaL) asmfit = asm.fit(S) c_shore = asmfit.shore_coeff cmat = shore_matrix(radial_order, zeta, gtab) S_reconst = np.dot(cmat, c_shore) # test the signal reconstruction S = S / S[0] nmse_signal = np.sqrt(np.sum((S - S_reconst) ** 2)) / (S.sum()) assert_almost_equal(nmse_signal, 0.0, 4) # test if the analytical integral of the pdf is equal to one integral = 0 for n in range(int((radial_order)/2 +1)): integral += c_shore[n] * (np.pi**(-1.5) * zeta **(-1.5) * genlaguerre(n,0.5)(0)) ** 0.5 assert_almost_equal(integral, 1.0, 10) # test if the integral of the pdf calculated on a discrete grid is equal to one pdf_discrete = asmfit.pdf_grid(17, 40e-3) integral = pdf_discrete.sum() assert_almost_equal(integral, 1.0, 1) # compare the shore pdf with the ground truth multi_tensor pdf sphere = get_sphere('symmetric724') v = sphere.vertices radius = 10e-3 pdf_shore = asmfit.pdf(v * radius) pdf_mt = multi_tensor_pdf(v * radius, mevals=mevals, angles=angl, fractions= [50, 50]) nmse_pdf = np.sqrt(np.sum((pdf_mt - pdf_shore) ** 2)) / (pdf_mt.sum()) assert_almost_equal(nmse_pdf, 0.0, 2) # compare the shore rtop with the ground truth multi_tensor rtop rtop_shore_signal = asmfit.rtop_signal() rtop_shore_pdf = asmfit.rtop_pdf() assert_almost_equal(rtop_shore_signal, rtop_shore_pdf, 9) rtop_mt = multi_tensor_rtop([.5, .5], mevals=mevals) assert_equal(rtop_mt / rtop_shore_signal <1.10 and rtop_mt / rtop_shore_signal > 0.95, True) # compare the shore msd with the ground truth multi_tensor msd msd_mt = multi_tensor_msd([.5, .5], mevals=mevals) msd_shore = asmfit.msd() assert_equal(msd_mt / msd_shore < 1.05 and msd_mt / msd_shore > 0.95, True) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_shore_odf.py000066400000000000000000000054501263041327500217120ustar00rootroot00000000000000import numpy as np from dipy.data import get_sphere, get_3shell_gtab, get_isbi2013_2shell_gtab from dipy.reconst.shore import ShoreModel from dipy.reconst.shm import QballModel, sh_to_sf from dipy.direction.peaks import gfa, peak_directions from numpy.testing import (assert_equal, assert_almost_equal, run_module_suite, assert_array_equal, assert_raises) from dipy.sims.voxel import SticksAndBall from dipy.core.subdivide_octahedron import create_unit_sphere from dipy.core.sphere_stats import angular_similarity from dipy.reconst.tests.test_dsi import sticks_and_ball_dummies def test_shore_odf(): gtab = get_isbi2013_2shell_gtab() # load symmetric 724 sphere sphere = get_sphere('symmetric724') # load icosahedron sphere sphere2 = create_unit_sphere(5) data, golden_directions = SticksAndBall(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) asm = ShoreModel(gtab, radial_order=6, zeta=700, lambdaN=1e-8, lambdaL=1e-8) # symmetric724 asmfit = asm.fit(data) odf = asmfit.odf(sphere) odf_sh = asmfit.odf_sh() odf_from_sh = sh_to_sf(odf_sh, sphere, 6, basis_type=None) assert_almost_equal(odf, odf_from_sh, 10) directions, _ , _ = peak_directions(odf, sphere, .35, 25) assert_equal(len(directions), 2) assert_almost_equal( angular_similarity(directions, golden_directions), 2, 1) # 5 subdivisions odf = asmfit.odf(sphere2) directions, _ , _ = peak_directions(odf, sphere2, .35, 25) assert_equal(len(directions), 2) assert_almost_equal( angular_similarity(directions, golden_directions), 2, 1) sb_dummies = sticks_and_ball_dummies(gtab) for sbd in sb_dummies: data, golden_directions = sb_dummies[sbd] asmfit = asm.fit(data) odf = asmfit.odf(sphere2) directions, _ , _ = peak_directions(odf, sphere2, .35, 25) if len(directions) <= 3: assert_equal(len(directions), len(golden_directions)) if len(directions) > 3: assert_equal(gfa(odf) < 0.1, True) def test_multivox_shore(): gtab = get_3shell_gtab() data = np.random.random([20, 30, 1, gtab.gradients.shape[0]]) radial_order = 4 zeta = 700 asm = ShoreModel(gtab, radial_order=radial_order, zeta=zeta, lambdaN=1e-8, lambdaL=1e-8) asmfit = asm.fit(data) c_shore = asmfit.shore_coeff assert_equal(c_shore.shape[0:3], data.shape[0:3]) assert_equal(np.alltrue(np.isreal(c_shore)), True) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/reconst/tests/test_vec_val_vect.py000066400000000000000000000024101263041327500223730ustar00rootroot00000000000000import numpy as np from numpy.random import randn from numpy.testing import assert_almost_equal, dec from ..vec_val_sum import vec_val_vect def make_vecs_vals(shape): return randn(*(shape)), randn(*(shape[:-2] + shape[-1:])) try: np.einsum except AttributeError: with_einsum = dec.skipif(True, "Need einsum for benchmark") else: with_einsum = lambda f : f @with_einsum def test_vec_val_vect(): for shape0 in ((10,), (100,), (10, 12), (12, 10, 5)): for shape1 in ((3, 3), (4, 3), (3, 4)): shape = shape0 + shape1 evecs, evals = make_vecs_vals(shape) res1 = np.einsum('...ij,...j,...kj->...ik', evecs, evals, evecs) assert_almost_equal(res1, vec_val_vect(evecs, evals)) def dumb_sum(vecs, vals): N, rows, cols = vecs.shape res2 = np.zeros((N, rows, rows)) for i in range(N): Q = vecs[i] L = vals[i] res2[i] = np.dot(Q, np.dot(np.diag(L), Q.T)) return res2 def test_vec_val_vect_dumber(): for shape0 in ((10,), (100,)): for shape1 in ((3, 3), (4, 3), (3, 4)): shape = shape0 + shape1 evecs, evals = make_vecs_vals(shape) res1 = dumb_sum(evecs, evals) assert_almost_equal(res1, vec_val_vect(evecs, evals)) dipy-0.10.1/dipy/reconst/utils.py000066400000000000000000000033141263041327500166760ustar00rootroot00000000000000import numpy as np def dki_design_matrix(gtab): r""" Constructs B design matrix for DKI Parameters --------- gtab : GradientTable Measurement directions. Returns ------- B : array (N, 22) Design matrix or B matrix for the DKI model B[j, :] = (Bxx, Bxy, Bzz, Bxz, Byz, Bzz, Bxxxx, Byyyy, Bzzzz, Bxxxy, Bxxxz, Bxyyy, Byyyz, Bxzzz, Byzzz, Bxxyy, Bxxzz, Byyzz, Bxxyz, Bxyyz, Bxyzz, BlogS0) """ b = gtab.bvals bvec = gtab.bvecs B = np.zeros((len(b), 22)) B[:, 0] = -b * bvec[:, 0] * bvec[:, 0] B[:, 1] = -2 * b * bvec[:, 0] * bvec[:, 1] B[:, 2] = -b * bvec[:, 1] * bvec[:, 1] B[:, 3] = -2 * b * bvec[:, 0] * bvec[:, 2] B[:, 4] = -2 * b * bvec[:, 1] * bvec[:, 2] B[:, 5] = -b * bvec[:, 2] * bvec[:, 2] B[:, 6] = b * b * bvec[:, 0]**4 / 6 B[:, 7] = b * b * bvec[:, 1]**4 / 6 B[:, 8] = b * b * bvec[:, 2]**4 / 6 B[:, 9] = 4 * b * b * bvec[:, 0]**3 * bvec[:, 1] / 6 B[:, 10] = 4 * b * b * bvec[:, 0]**3 * bvec[:, 2] / 6 B[:, 11] = 4 * b * b * bvec[:, 1]**3 * bvec[:, 0] / 6 B[:, 12] = 4 * b * b * bvec[:, 1]**3 * bvec[:, 2] / 6 B[:, 13] = 4 * b * b * bvec[:, 2]**3 * bvec[:, 0] / 6 B[:, 14] = 4 * b * b * bvec[:, 2]**3 * bvec[:, 1] / 6 B[:, 15] = b * b * bvec[:, 0]**2 * bvec[:, 1]**2 B[:, 16] = b * b * bvec[:, 0]**2 * bvec[:, 2]**2 B[:, 17] = b * b * bvec[:, 1]**2 * bvec[:, 2]**2 B[:, 18] = 2 * b * b * bvec[:, 0]**2 * bvec[:, 1] * bvec[:, 2] B[:, 19] = 2 * b * b * bvec[:, 1]**2 * bvec[:, 0] * bvec[:, 2] B[:, 20] = 2 * b * b * bvec[:, 2]**2 * bvec[:, 0] * bvec[:, 1] B[:, 21] = np.ones(len(b)) return B dipy-0.10.1/dipy/reconst/vec_val_sum.pyx000066400000000000000000000053341263041327500202350ustar00rootroot00000000000000import numpy as np cimport numpy as cnp cimport cython @cython.boundscheck(False) @cython.wraparound(False) def vec_val_vect(vecs, vals): """ Vectorize `vecs`.diag(`vals`).`vecs`.T for last 2 dimensions of `vecs` Parameters ---------- vecs : shape (..., M, N) array containing tensor in last two dimensions; M, N usually equal to (3, 3) vals : shape (..., N) array diagonal values carried in last dimension, ``...`` shape above must match that for `vecs` Returns ------- res : shape (..., M, M) array For all the dimensions ellided by ``...``, loops to get (M, N) ``vec`` matrix, and (N,) ``vals`` vector, and calculates ``vec.dot(np.diag(val).dot(vec.T)``. Raises ------ ValueError : non-matching ``...`` dimensions of `vecs`, `vals` ValueError : non-matching ``N`` dimensions of `vecs`, `vals` Examples -------- Make a 3D array where the first dimension is only 1 >>> vecs = np.arange(9).reshape((1, 3, 3)) >>> vals = np.arange(3).reshape((1, 3)) >>> vec_val_vect(vecs, vals) array([[[ 9., 24., 39.], [ 24., 66., 108.], [ 39., 108., 177.]]]) That's the same as the 2D case (apart from the float casting): >>> vecs = np.arange(9).reshape((3, 3)) >>> vals = np.arange(3) >>> np.dot(vecs, np.dot(np.diag(vals), vecs.T)) array([[ 9, 24, 39], [ 24, 66, 108], [ 39, 108, 177]]) """ vecs = np.asarray(vecs) vals = np.asarray(vals) cdef: cnp.npy_intp t, N, ndim, rows, cols, r, c, in_r_out_c double [:, :, :] vecr double [:, :] valr double [:, :] vec double [:, :] out_vec double [:] val double [:, :, :] out double row_c # Avoid negative indexing to avoid errors with False boundscheck decorator # and Cython > 0.18 ndim = vecs.ndim common_shape = vecs.shape[:(ndim-2)] rows, cols = vecs.shape[ndim-2], vecs.shape[ndim-1] if vals.shape != common_shape + (cols,): raise ValueError('dimensions do not match') N = np.prod(common_shape) vecr = np.array(vecs.reshape((N, rows, cols)), dtype=float) valr = np.array(vals.reshape((N, cols)), dtype=float) out = np.zeros((N, rows, rows)) with nogil: for t in range(N): # loop over the early dimensions vec = vecr[t] val = valr[t] out_vec = out[t] for r in range(rows): for c in range(cols): row_c = vec[r, c] * val[c] for in_r_out_c in range(rows): out_vec[r, in_r_out_c] += row_c * vec[in_r_out_c, c] return np.reshape(out, (common_shape + (rows, rows))) dipy-0.10.1/dipy/segment/000077500000000000000000000000001263041327500151505ustar00rootroot00000000000000dipy-0.10.1/dipy/segment/__init__.py000066400000000000000000000000001263041327500172470ustar00rootroot00000000000000dipy-0.10.1/dipy/segment/benchmarks/000077500000000000000000000000001263041327500172655ustar00rootroot00000000000000dipy-0.10.1/dipy/segment/benchmarks/__init__.py000066400000000000000000000000001263041327500213640ustar00rootroot00000000000000dipy-0.10.1/dipy/segment/benchmarks/bench_quickbundles.py000066400000000000000000000070551263041327500234760ustar00rootroot00000000000000""" Benchmarks for QuickBundles Run all benchmarks with:: import dipy.segment as dipysegment dipysegment.bench() If you have doctests enabled by default in nose (with a noserc file or environment variable), and you have a numpy version <= 1.6.1, this will also run the doctests, let's hope they pass. Run this benchmark with: nosetests -s --match '(?:^|[\\b_\\.//-])[Bb]ench' /path/to/bench_quickbundles.py """ import numpy as np import nibabel as nib from dipy.data import get_data import dipy.tracking.streamline as streamline_utils from dipy.segment.metric import Metric from dipy.segment.quickbundles import QuickBundles as QB_Old from dipy.segment.clustering import QuickBundles as QB_New from nose.tools import assert_equal from dipy.testing import assert_arrays_equal from numpy.testing import assert_array_equal, measure class MDFpy(Metric): def are_compatible(self, shape1, shape2): return shape1 == shape2 def dist(self, features1, features2): dist = np.sqrt(np.sum((features1-features2)**2, axis=1)) dist = np.sum(dist/len(features1)) return dist def bench_quickbundles(): dtype = "float32" repeat = 10 nb_points = 18 streams, hdr = nib.trackvis.read(get_data('fornix')) fornix = [s[0].astype(dtype) for s in streams] fornix = streamline_utils.set_number_of_points(fornix, nb_points) #Create eight copies of the fornix to be clustered (one in each octant). streamlines = [] streamlines += [s + np.array([100, 100, 100], dtype) for s in fornix] streamlines += [s + np.array([100, -100, 100], dtype) for s in fornix] streamlines += [s + np.array([100, 100, -100], dtype) for s in fornix] streamlines += [s + np.array([100, -100, -100], dtype) for s in fornix] streamlines += [s + np.array([-100, 100, 100], dtype) for s in fornix] streamlines += [s + np.array([-100, -100, 100], dtype) for s in fornix] streamlines += [s + np.array([-100, 100, -100], dtype) for s in fornix] streamlines += [s + np.array([-100, -100, -100], dtype) for s in fornix] # The expected number of clusters of the fornix using threshold=10 is 4. threshold = 10. expected_nb_clusters = 4*8 print("Timing QuickBundles 1.0 vs. 2.0") qb = QB_Old(streamlines, threshold, pts=None) qb1_time = measure("QB_Old(streamlines, threshold, nb_points)", repeat) print("QuickBundles time: {0:.4}sec".format(qb1_time)) assert_equal(qb.total_clusters, expected_nb_clusters) sizes1 = [qb.partitions()[i]['N'] for i in range(qb.total_clusters)] indices1 = [qb.partitions()[i]['indices'] for i in range(qb.total_clusters)] qb2 = QB_New(threshold) qb2_time = measure("clusters = qb2.cluster(streamlines)", repeat) print("QuickBundles2 time: {0:.4}sec".format(qb2_time)) print("Speed up of {0}x".format(qb1_time/qb2_time)) clusters = qb2.cluster(streamlines) sizes2 = map(len, clusters) indices2 = map(lambda c: c.indices, clusters) assert_equal(len(clusters), expected_nb_clusters) assert_array_equal(sizes2, sizes1) assert_arrays_equal(indices2, indices1) qb = QB_New(threshold, metric=MDFpy()) qb3_time = measure("clusters = qb.cluster(streamlines)", repeat) print("QuickBundles2_python time: {0:.4}sec".format(qb3_time)) print("Speed up of {0}x".format(qb1_time/qb3_time)) clusters = qb.cluster(streamlines) sizes3 = map(len, clusters) indices3 = map(lambda c: c.indices, clusters) assert_equal(len(clusters), expected_nb_clusters) assert_array_equal(sizes3, sizes1) assert_arrays_equal(indices3, indices1) dipy-0.10.1/dipy/segment/clustering.py000066400000000000000000000400241263041327500177010ustar00rootroot00000000000000import operator import numpy as np from abc import ABCMeta, abstractmethod from dipy.segment.metric import Metric from dipy.segment.metric import ResampleFeature from dipy.segment.metric import AveragePointwiseEuclideanMetric class Identity: """ Provides identity indexing functionality. This can replace any class supporting indexing used for referencing (e.g. list, tuple). Indexing an instance of this class will return the index provided instead of the element. It does not support slicing. """ def __getitem__(self, idx): return idx class Cluster(object): """ Provides functionalities for interacting with a cluster. Useful container to retrieve index of elements grouped together. If a reference to the data is provided to `cluster_map`, elements will be returned instead of their index when possible. Parameters ---------- cluster_map : `ClusterMap` object Reference to the set of clusters this cluster is being part of. id : int Id of this cluster in its associated `cluster_map` object. refdata : list (optional) Actual elements that clustered indices refer to. Notes ----- A cluster does not contain actual data but instead knows how to retrieve them using its `ClusterMap` object. """ def __init__(self, id=0, indices=None, refdata=Identity()): self.id = id self.refdata = refdata self.indices = indices if indices is not None else [] def __len__(self): return len(self.indices) def __getitem__(self, idx): """ Gets element(s) through indexing. If a reference to the data was provided (via refdata property) elements will be returned instead of their index. Parameters ---------- idx : int, slice or list Index of the element(s) to get. Returns ------- `Cluster` object(s) When `idx` is a int, returns a single element. When `idx` is either a slice or a list, returns a list of elements. """ if isinstance(idx, int) or isinstance(idx, np.integer): return self.refdata[self.indices[idx]] elif type(idx) is slice: return [self.refdata[i] for i in self.indices[idx]] elif type(idx) is list: return [self[i] for i in idx] raise TypeError("Index must be a int or a slice! Not " + str(type(idx))) def __iter__(self): return (self[i] for i in range(len(self))) def __str__(self): return "[" + ", ".join(map(str, self.indices)) + "]" def __repr__(self): return "Cluster(" + str(self) + ")" def __eq__(self, other): return isinstance(other, Cluster) and self.indices == other.indices def __ne__(self, other): return not self == other def __cmp__(self, other): raise TypeError("Cannot compare Cluster objects.") def assign(self, *indices): """ Assigns indices to this cluster. Parameters ---------- *indices : list of indices Indices to add to this cluster. """ self.indices += indices class ClusterCentroid(Cluster): """ Provides functionalities for interacting with a cluster. Useful container to retrieve the indices of elements grouped together and the cluster's centroid. If a reference to the data is provided to `cluster_map`, elements will be returned instead of their index when possible. Parameters ---------- cluster_map : `ClusterMapCentroid` object Reference to the set of clusters this cluster is being part of. id : int Id of this cluster in its associated `cluster_map` object. refdata : list (optional) Actual elements that clustered indices refer to. Notes ----- A cluster does not contain actual data but instead knows how to retrieve them using its `ClusterMapCentroid` object. """ def __init__(self, centroid, id=0, indices=None, refdata=Identity()): super(ClusterCentroid, self).__init__(id, indices, refdata) self.centroid = centroid.copy() self.new_centroid = centroid.copy() def __eq__(self, other): return isinstance(other, ClusterCentroid) \ and np.all(self.centroid == other.centroid) \ and super(ClusterCentroid, self).__eq__(other) def assign(self, id_datum, features): """ Assigns a data point to this cluster. Parameters ---------- id_datum : int Index of the data point to add to this cluster. features : 2D array Data point's features to modify this cluster's centroid. """ N = len(self) self.new_centroid = ((self.new_centroid * N) + features) / (N+1.) super(ClusterCentroid, self).assign(id_datum) def update(self): """ Update centroid of this cluster. Returns ------- converged : bool Tells if the centroid has moved. """ converged = np.equal(self.centroid, self.new_centroid) self.centroid = self.new_centroid.copy() return converged class ClusterMap(object): """ Provides functionalities for interacting with clustering outputs. Useful container to create, remove, retrieve and filter clusters. If `refdata` is given, elements will be returned instead of their index when using `Cluster` objects. Parameters ---------- refdata : list Actual elements that clustered indices refer to. """ def __init__(self, refdata=Identity()): self._clusters = [] self.refdata = refdata @property def clusters(self): return self._clusters @property def refdata(self): return self._refdata @refdata.setter def refdata(self, value): if value is None: value = Identity() self._refdata = value for cluster in self.clusters: cluster.refdata = self._refdata def __len__(self): return len(self.clusters) def __getitem__(self, idx): """ Gets cluster(s) through indexing. Parameters ---------- idx : int, slice, list or boolean array Index of the element(s) to get. Returns ------- `Cluster` object(s) When `idx` is a int, returns a single `Cluster` object. When `idx`is either a slice, list or boolean array, returns a list of `Cluster` objects. """ if isinstance(idx, np.ndarray) and idx.dtype == np.bool: return [self.clusters[i] for i, take_it in enumerate(idx) if take_it] elif type(idx) is slice: return [self.clusters[i] for i in range(*idx.indices(len(self)))] elif type(idx) is list: return [self.clusters[i] for i in idx] return self.clusters[idx] def __iter__(self): return iter(self.clusters) def __str__(self): return "[" + ", ".join(map(str, self)) + "]" def __repr__(self): return "ClusterMap(" + str(self) + ")" def _richcmp(self, other, op): """ Compares this cluster map with another cluster map or an integer. Two `ClusterMap` objects are equal if they contain the same clusters. When comparing a `ClusterMap` object with an integer, the comparison will be performed on the size of the clusters instead. Parameters ---------- other : `ClusterMap` object or int Object to compare to. op : rich comparison operators (see module `operator`) Valid operators are: lt, le, eq, ne, gt or ge. Returns ------- bool or 1D array (bool) When comparing to another `ClusterMap` object, it returns whether the two `ClusterMap` objects contain the same clusters or not. When comparing to an integer the comparison is performed on the clusters sizes, it returns an array of boolean. """ if isinstance(other, ClusterMap): if op is operator.eq: return isinstance(other, ClusterMap) \ and len(self) == len(other) \ and self.clusters == other.clusters elif op is operator.ne: return not self == other raise NotImplementedError("Can only check if two ClusterMap instances are equal or not.") elif isinstance(other, int): return np.array([op(len(cluster), other) for cluster in self]) raise NotImplementedError("ClusterMap only supports comparison with a int or another instance of Clustermap.") def __eq__(self, other): return self._richcmp(other, operator.eq) def __ne__(self, other): return self._richcmp(other, operator.ne) def __lt__(self, other): return self._richcmp(other, operator.lt) def __le__(self, other): return self._richcmp(other, operator.le) def __gt__(self, other): return self._richcmp(other, operator.gt) def __ge__(self, other): return self._richcmp(other, operator.ge) def add_cluster(self, *clusters): """ Adds one or multiple clusters to this cluster map. Parameters ---------- *clusters : `Cluster` object, ... Cluster(s) to be added in this cluster map. """ for cluster in clusters: self.clusters.append(cluster) cluster.refdata = self.refdata def remove_cluster(self, *clusters): """ Remove one or multiple clusters from this cluster map. Parameters ---------- *clusters : `Cluster` object, ... Cluster(s) to be removed from this cluster map. """ for cluster in clusters: self.clusters.remove(cluster) def clear(self): """ Remove all clusters from this cluster map. """ del self.clusters[:] def size(self): """ Gets number of clusters contained in this cluster map. """ return len(self) def clusters_sizes(self): """ Gets the size of every cluster contained in this cluster map. Returns ------- list of int Sizes of every cluster in this cluster map. """ return list(map(len, self)) def get_large_clusters(self, min_size): """ Gets clusters which contains at least `min_size` elements. Parameters ---------- min_size : int Minimum number of elements a cluster needs to have to be selected. Returns ------- list of `Cluster` objects Clusters having at least `min_size` elements. """ return self[self >= min_size] def get_small_clusters(self, max_size): """ Gets clusters which contains at most `max_size` elements. Parameters ---------- max_size : int Maximum number of elements a cluster can have to be selected. Returns ------- list of `Cluster` objects Clusters having at most `max_size` elements. """ return self[self <= max_size] class ClusterMapCentroid(ClusterMap): """ Provides functionalities for interacting with clustering outputs that have centroids. Allows to retrieve easely the centroid of every cluster. Also, it is a useful container to create, remove, retrieve and filter clusters. If `refdata` is given, elements will be returned instead of their index when using `ClusterCentroid` objects. Parameters ---------- refdata : list Actual elements that clustered indices refer to. """ @property def centroids(self): return [cluster.centroid for cluster in self.clusters] class Clustering(object): __metaclass__ = ABCMeta @abstractmethod def cluster(self, data, ordering=None): """ Clusters `data`. Subclasses will perform their clustering algorithm here. Parameters ---------- data : list of N-dimensional arrays Each array represents a data point. ordering : iterable of indices, optional Specifies the order in which data points will be clustered. Returns ------- `ClusterMap` object Result of the clustering. """ raise NotImplementedError("Subclass has to define method 'cluster(data, ordering)'!") class QuickBundles(Clustering): r""" Clusters streamlines using QuickBundles [Garyfallidis12]_. Given a list of streamlines, the QuickBundles algorithm sequentially assigns each streamline to its closest bundle in $\mathcal{O}(Nk)$ where $N$ is the number of streamlines and $k$ is the final number of bundles. If for a given streamline its closest bundle is farther than `threshold`, a new bundle is created and the streamline is assigned to it except if the number of bundles has already exceeded `max_nb_clusters`. Parameters ---------- threshold : float The maximum distance from a bundle for a streamline to be still considered as part of it. metric : str or `Metric` object (optional) The distance metric to use when comparing two streamlines. By default, the Minimum average Direct-Flip (MDF) distance [Garyfallidis12]_ is used and streamlines are automatically resampled so they have 12 points. max_nb_clusters : int Limits the creation of bundles. Examples -------- >>> from dipy.segment.clustering import QuickBundles >>> from dipy.data import get_data >>> from nibabel import trackvis as tv >>> streams, hdr = tv.read(get_data('fornix')) >>> streamlines = [i[0] for i in streams] >>> # Segment fornix with a treshold of 10mm and streamlines resampled to 12 points. >>> qb = QuickBundles(threshold=10.) >>> clusters = qb.cluster(streamlines) >>> len(clusters) 4 >>> list(map(len, clusters)) [61, 191, 47, 1] >>> # Resampling streamlines differently is done explicitly as follows. >>> # Note this has an impact on the speed and the accuracy (tradeoff). >>> from dipy.segment.metric import ResampleFeature >>> from dipy.segment.metric import AveragePointwiseEuclideanMetric >>> feature = ResampleFeature(nb_points=2) >>> metric = AveragePointwiseEuclideanMetric(feature) >>> qb = QuickBundles(threshold=10., metric=metric) >>> clusters = qb.cluster(streamlines) >>> len(clusters) 4 >>> list(map(len, clusters)) [58, 142, 72, 28] References ---------- .. [Garyfallidis12] Garyfallidis E. et al., QuickBundles a method for tractography simplification, Frontiers in Neuroscience, vol 6, no 175, 2012. """ def __init__(self, threshold, metric="MDF_12points", max_nb_clusters=np.iinfo('i4').max): self.threshold = threshold self.max_nb_clusters = max_nb_clusters if isinstance(metric, Metric): self.metric = metric elif metric == "MDF_12points": feature = ResampleFeature(nb_points=12) self.metric = AveragePointwiseEuclideanMetric(feature) else: raise ValueError("Unknown metric: {0}".format(metric)) def cluster(self, streamlines, ordering=None): """ Clusters `streamlines` into bundles. Performs quickbundles algorithm using predefined metric and threshold. Parameters ---------- streamlines : list of 2D arrays Each 2D array represents a sequence of 3D points (points, 3). ordering : iterable of indices Specifies the order in which data points will be clustered. Returns ------- `ClusterMapCentroid` object Result of the clustering. """ from dipy.segment.clustering_algorithms import quickbundles cluster_map = quickbundles(streamlines, self.metric, threshold=self.threshold, max_nb_clusters=self.max_nb_clusters, ordering=ordering) cluster_map.refdata = streamlines return cluster_map dipy-0.10.1/dipy/segment/clustering_algorithms.pyx000066400000000000000000000101421263041327500223200ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False import itertools import numpy as np from cythonutils cimport Data2D, shape2tuple from metricspeed cimport Metric from clusteringspeed cimport ClustersCentroid, Centroid, QuickBundles from dipy.segment.clustering import ClusterMapCentroid, ClusterCentroid cdef extern from "stdlib.h" nogil: ctypedef unsigned long size_t void free(void *ptr) void *calloc(size_t nelem, size_t elsize) void *realloc(void *ptr, size_t elsize) void *memset(void *ptr, int value, size_t num) DTYPE = np.float32 DEF BIGGEST_DOUBLE = 1.7976931348623157e+308 # np.finfo('f8').max DEF BIGGEST_FLOAT = 3.4028235e+38 # np.finfo('f4').max DEF BIGGEST_INT = 2147483647 # np.iinfo('i4').max def clusters_centroid2clustermap_centroid(ClustersCentroid clusters_list): """ Converts a `ClustersCentroid` object (Cython) to a `ClusterMapCentroid` object (Python). Only basic functionalities are provided with a `Clusters` object. To have more flexibility, one should use `ClusterMap` object, hence this conversion function. Parameters ---------- clusters_list : `ClustersCentroid` object Result of the clustering contained in a Cython's object. Returns ------- `ClusterMapCentroid` object Result of the clustering contained in a Python's object. """ clusters = ClusterMapCentroid() for i in range(clusters_list._nb_clusters): centroid = np.asarray(clusters_list.centroids[i].features) indices = np.asarray( clusters_list.clusters_indices[i]).tolist() clusters.add_cluster(ClusterCentroid(id=i, centroid=centroid, indices=indices)) return clusters def peek(iterable): """ Returns the first element of an iterable and the iterator. """ iterable = iter(iterable) first = next(iterable, None) iterator = itertools.chain([first], iterable) return first, iterator def quickbundles(streamlines, Metric metric, double threshold, long max_nb_clusters=BIGGEST_INT, ordering=None): """ Clusters streamlines using QuickBundles. Parameters ---------- streamlines : list of 2D arrays List of streamlines to cluster. metric : `Metric` object Tells how to compute the distance between two streamlines. threshold : double The maximum distance from a cluster for a streamline to be still considered as part of it. max_nb_clusters : int, optional Limits the creation of bundles. (Default: inf) ordering : iterable of indices, optional Iterate through `data` using the given ordering. Returns ------- `ClusterMapCentroid` object Result of the clustering. References ---------- .. [Garyfallidis12] Garyfallidis E. et al., QuickBundles a method for tractography simplification, Frontiers in Neuroscience, vol 6, no 175, 2012. """ # Threshold of np.inf is not supported, set it to 'biggest_double' threshold = min(threshold, BIGGEST_DOUBLE) # Threshold of -np.inf is not supported, set it to 0 threshold = max(threshold, 0) if ordering is None: ordering = xrange(len(streamlines)) # Check if `ordering` or `streamlines` are empty first_idx, ordering = peek(ordering) if first_idx is None or len(streamlines) == 0: return ClusterMapCentroid() features_shape = shape2tuple(metric.feature.c_infer_shape(streamlines[first_idx].astype(DTYPE))) cdef QuickBundles qb = QuickBundles(features_shape, metric, threshold, max_nb_clusters) cdef int idx for idx in ordering: streamline = streamlines[idx] if not streamline.flags.writeable or streamline.dtype != DTYPE: streamline = streamline.astype(DTYPE) cluster_id = qb.assignment_step(streamline, idx) # The update step is performed right after the assignement step instead # of after all streamlines have been assigned like k-means algorithm. qb.update_step(cluster_id) return clusters_centroid2clustermap_centroid(qb.clusters) dipy-0.10.1/dipy/segment/clusteringspeed.pxd000066400000000000000000000026341263041327500210720ustar00rootroot00000000000000from cythonutils cimport Data2D, Shape, shape2tuple, tuple2shape from metricspeed cimport Metric cdef struct Centroid: Data2D features int size cdef struct NearestCluster: int id double dist cdef class Clusters: cdef int _nb_clusters cdef int** clusters_indices cdef int* clusters_size cdef void c_assign(Clusters self, int id_cluster, int id_element, Data2D element) nogil except * cdef int c_create_cluster(Clusters self) nogil except -1 cdef int c_size(Clusters self) nogil cdef class ClustersCentroid(Clusters): cdef Centroid* centroids cdef Centroid* _updated_centroids cdef Shape _centroid_shape cdef float eps cdef void c_assign(ClustersCentroid self, int id_cluster, int id_element, Data2D element) nogil except * cdef int c_create_cluster(ClustersCentroid self) nogil except -1 cdef int c_update(ClustersCentroid self, int id_cluster) nogil except -1 cdef class QuickBundles(object): cdef Shape features_shape cdef Data2D features cdef Data2D features_flip cdef ClustersCentroid clusters cdef Metric metric cdef double threshold cdef int max_nb_clusters cdef NearestCluster find_nearest_cluster(QuickBundles self, Data2D features) nogil except * cdef int assignment_step(QuickBundles self, Data2D datum, int datum_id) nogil except -1 cdef void update_step(QuickBundles self, int cluster_id) nogil except * dipy-0.10.1/dipy/segment/clusteringspeed.pyx000066400000000000000000000305351263041327500211200ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False import numpy as np cimport numpy as cnp from libc.math cimport fabs from cythonutils cimport Data2D, Shape, shape2tuple, tuple2shape, same_shape cdef extern from "stdlib.h" nogil: ctypedef unsigned long size_t void free(void *ptr) void *calloc(size_t nelem, size_t elsize) void *realloc(void *ptr, size_t elsize) void *memset(void *ptr, int value, size_t num) DTYPE = np.float32 DEF BIGGEST_DOUBLE = 1.7976931348623157e+308 # np.finfo('f8').max DEF BIGGEST_INT = 2147483647 # np.iinfo('i4').max cdef class Clusters: """ Provides Cython functionalities to interact with clustering outputs. This class allows to create clusters and assign elements to them. Assignements of a cluster are represented as a list of element indices. """ def __init__(Clusters self): self._nb_clusters = 0 self.clusters_indices = NULL self.clusters_size = NULL def __dealloc__(Clusters self): """ Deallocates memory created with `c_create_cluster` and `c_assign`. """ for i in range(self._nb_clusters): free(self.clusters_indices[i]) self.clusters_indices[i] = NULL free(self.clusters_indices) self.clusters_indices = NULL free(self.clusters_size) self.clusters_size = NULL cdef int c_size(Clusters self) nogil: """ Returns the number of clusters. """ return self._nb_clusters cdef void c_assign(Clusters self, int id_cluster, int id_element, Data2D element) nogil except *: """ Assigns an element to a cluster. Parameters ---------- id_cluster : int Index of the cluster to which the element will be assigned. id_element : int Index of the element to assign. element : 2d array (float) Data of the element to assign. """ cdef cnp.npy_intp C = self.clusters_size[id_cluster] self.clusters_indices[id_cluster] = realloc(self.clusters_indices[id_cluster], (C+1)*sizeof(int)) self.clusters_indices[id_cluster][C] = id_element self.clusters_size[id_cluster] += 1 cdef int c_create_cluster(Clusters self) nogil except -1: """ Creates a cluster and adds it at the end of the list. Returns ------- id_cluster : int Index of the new cluster. """ self.clusters_indices = realloc(self.clusters_indices, (self._nb_clusters+1)*sizeof(int*)) self.clusters_indices[self._nb_clusters] = calloc(0, sizeof(int)) self.clusters_size = realloc(self.clusters_size, (self._nb_clusters+1)*sizeof(int)) self.clusters_size[self._nb_clusters] = 0 self._nb_clusters += 1 return self._nb_clusters - 1 cdef class ClustersCentroid(Clusters): """ Provides Cython functionalities to interact with clustering outputs having the notion of cluster's centroid. This class allows to create clusters, assign elements to them and update their centroid. Parameters ---------- centroid_shape : int, tuple of int Information about the shape of the centroid. eps : float, optional Consider the centroid has not changed if the changes per dimension are less than this epsilon. (Default: 1e-6) """ def __init__(ClustersCentroid self, centroid_shape, float eps=1e-6, *args, **kwargs): Clusters.__init__(self, *args, **kwargs) if isinstance(centroid_shape, int): centroid_shape = (1, centroid_shape) if not isinstance(centroid_shape, tuple): raise ValueError("'centroid_shape' must be a tuple or a int.") self._centroid_shape = tuple2shape(centroid_shape) self.centroids = NULL self._updated_centroids = NULL self.eps = eps def __dealloc__(ClustersCentroid self): """ Deallocates memory created with `c_create_cluster` and `c_assign`. Notes ----- The `__dealloc__` method of the superclass is automatically called: http://docs.cython.org/src/userguide/special_methods.html#finalization-method-dealloc """ cdef cnp.npy_intp i for i in range(self._nb_clusters): free(&(self.centroids[i].features[0, 0])) free(&(self._updated_centroids[i].features[0, 0])) self.centroids[i].features = None # Necessary to decrease refcount self._updated_centroids[i].features = None # Necessary to decrease refcount free(self.centroids) self.centroids = NULL free(self._updated_centroids) self._updated_centroids = NULL cdef void c_assign(ClustersCentroid self, int id_cluster, int id_element, Data2D element) nogil except *: """ Assigns an element to a cluster. In addition of keeping element's index, an updated version of the cluster's centroid is computed. The centroid is the average of all elements in a cluster. Parameters ---------- id_cluster : int Index of the cluster to which the element will be assigned. id_element : int Index of the element to assign. element : 2d array (float) Data of the element to assign. """ cdef Data2D updated_centroid = self._updated_centroids[id_cluster].features cdef cnp.npy_intp C = self.clusters_size[id_cluster] cdef cnp.npy_intp n, d cdef cnp.npy_intp N = updated_centroid.shape[0], D = updated_centroid.shape[1] for n in range(N): for d in range(D): updated_centroid[n, d] = ((updated_centroid[n, d] * C) + element[n, d]) / (C+1) Clusters.c_assign(self, id_cluster, id_element, element) cdef int c_update(ClustersCentroid self, cnp.npy_intp id_cluster) nogil except -1: """ Update the centroid of a cluster. Parameters ---------- id_cluster : int Index of the cluster of which its centroid will be updated. Returns ------- int Tells whether the centroid has changed or not, i.e. converged. """ cdef Data2D centroid = self.centroids[id_cluster].features cdef Data2D updated_centroid = self._updated_centroids[id_cluster].features cdef cnp.npy_intp N = updated_centroid.shape[0], D = centroid.shape[1] cdef cnp.npy_intp n, d cdef int converged = 1 for n in range(N): for d in range(D): converged &= fabs(centroid[n, d] - updated_centroid[n, d]) < self.eps centroid[n, d] = updated_centroid[n, d] return converged cdef int c_create_cluster(ClustersCentroid self) nogil except -1: """ Creates a cluster and adds it at the end of the list. Returns ------- id_cluster : int Index of the new cluster. """ self.centroids = realloc(self.centroids, (self._nb_clusters+1)*sizeof(Centroid)) # Zero-initialize the Centroid structure memset(&self.centroids[self._nb_clusters], 0, sizeof(Centroid)) self._updated_centroids = realloc(self._updated_centroids, (self._nb_clusters+1)*sizeof(Centroid)) # Zero-initialize the new Centroid structure memset(&self._updated_centroids[self._nb_clusters], 0, sizeof(Centroid)) with gil: self.centroids[self._nb_clusters].features = calloc(self._centroid_shape.size, sizeof(float)) self._updated_centroids[self._nb_clusters].features = calloc(self._centroid_shape.size, sizeof(float)) return Clusters.c_create_cluster(self) cdef class QuickBundles(object): def __init__(QuickBundles self, features_shape, Metric metric, double threshold, int max_nb_clusters=BIGGEST_INT): self.metric = metric self.features_shape = tuple2shape(features_shape) self.threshold = threshold self.max_nb_clusters = max_nb_clusters self.clusters = ClustersCentroid(features_shape) self.features = np.empty(features_shape, dtype=DTYPE) self.features_flip = np.empty(features_shape, dtype=DTYPE) cdef NearestCluster find_nearest_cluster(QuickBundles self, Data2D features) nogil except *: """ Finds the nearest cluster of a datum given its `features` vector. Parameters ---------- features : 2D array Features of a datum. Returns ------- `NearestCluster` object Nearest cluster to `features` according to the given metric. """ cdef: cnp.npy_intp k double dist NearestCluster nearest_cluster nearest_cluster.id = -1 nearest_cluster.dist = BIGGEST_DOUBLE for k in range(self.clusters.c_size()): dist = self.metric.c_dist(self.clusters.centroids[k].features, features) # Keep track of the nearest cluster if dist < nearest_cluster.dist: nearest_cluster.dist = dist nearest_cluster.id = k return nearest_cluster cdef int assignment_step(QuickBundles self, Data2D datum, int datum_id) nogil except -1: """ Compute the assignment step of the QuickBundles algorithm. It will assign a datum to its closest cluster according to a given metric. If the distance between the datum and its closest cluster is greater than the specified threshold, a new cluster is created and the datum is assigned to it. Parameters ---------- datum : 2D array The datum to assign. datum_id : int ID of the datum, usually its index. Returns ------- int Index of the cluster the datum has been assigned to. """ cdef: Data2D features_to_add = self.features NearestCluster nearest_cluster, nearest_cluster_flip Shape features_shape = self.metric.feature.c_infer_shape(datum) # Check if datum is compatible with the metric if not same_shape(features_shape, self.features_shape): with gil: raise ValueError("All features do not have the same shape! QuickBundles requires this to compute centroids!") # Check if datum is compatible with the metric if not self.metric.c_are_compatible(features_shape, self.features_shape): with gil: raise ValueError("Data features' shapes must be compatible according to the metric used!") # Find nearest cluster to datum self.metric.feature.c_extract(datum, self.features) nearest_cluster = self.find_nearest_cluster(self.features) # Find nearest cluster to s_i_flip if metric is not order invariant if not self.metric.feature.is_order_invariant: self.metric.feature.c_extract(datum[::-1], self.features_flip) nearest_cluster_flip = self.find_nearest_cluster(self.features_flip) # If we found a lower distance using a flipped datum, # add the flipped version instead if nearest_cluster_flip.dist < nearest_cluster.dist: nearest_cluster.id = nearest_cluster_flip.id nearest_cluster.dist = nearest_cluster_flip.dist features_to_add = self.features_flip # Check if distance with the nearest cluster is below some threshold # or if we already have the maximum number of clusters. # If the former or the latter is true, assign datum to its nearest cluster # otherwise create a new cluster and assign the datum to it. if not (nearest_cluster.dist < self.threshold or self.clusters.c_size() >= self.max_nb_clusters): nearest_cluster.id = self.clusters.c_create_cluster() self.clusters.c_assign(nearest_cluster.id, datum_id, features_to_add) return nearest_cluster.id cdef void update_step(QuickBundles self, int cluster_id) nogil except *: """ Compute the update step of the QuickBundles algorithm. It will update the centroid of a cluster given its index. Parameters ---------- cluster_id : int ID of the cluster to update. """ self.clusters.c_update(cluster_id) dipy-0.10.1/dipy/segment/cythonutils.pxd000066400000000000000000000013121263041327500202470ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False cdef extern from "cythonutils.h": enum: MAX_NDIM ctypedef float[:] Data1D ctypedef float[:,:] Data2D ctypedef float[:,:,:] Data3D ctypedef float[:,:,:,:] Data4D ctypedef float[:,:,:,:,:] Data5D ctypedef float[:,:,:,:,:,:] Data6D ctypedef float[:,:,:,:,:,:,:] Data7D ctypedef fused Data: Data1D Data2D Data3D Data4D Data5D Data6D Data7D cdef struct Shape: Py_ssize_t ndim Py_ssize_t dims[MAX_NDIM] Py_ssize_t size cdef Shape shape_from_memview(Data data) nogil cdef Shape tuple2shape(dims) cdef shape2tuple(Shape shape) cdef int same_shape(Shape shape1, Shape shape2) nogil dipy-0.10.1/dipy/segment/cythonutils.pyx000066400000000000000000000045051263041327500203030ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False import numpy as np cdef Shape shape_from_memview(Data data) nogil: """ Retrieves shape from a memoryview object. Parameters ---------- data : memoryview object (float) array for which the shape informations are retrieved Returns ------- shape : `Shape` struct structure containing informations about the shape of `data` """ cdef Shape shape cdef int i shape.ndim = 0 shape.size = 1 for i in range(MAX_NDIM): shape.dims[i] = data.shape[i] if shape.dims[i] > 0: shape.size *= shape.dims[i] shape.ndim += 1 return shape cdef Shape tuple2shape(dims): """ Converts a Python's tuple into a `Shape` Cython's struct. Parameters ---------- dims : tuple of int size of each dimension Returns ------- shape : `Shape` struct structure containing shape informations obtained from `dims` """ assert len(dims) < MAX_NDIM cdef Shape shape cdef int i shape.ndim = len(dims) shape.size = np.prod(dims) for i in range(shape.ndim): shape.dims[i] = dims[i] return shape cdef shape2tuple(Shape shape): """ Converts a `Shape` Cython's struct into a Python's tuple. Parameters ---------- shape : `Shape` struct structure containing shape informations Returns ------- dims : tuple of int size of each dimension """ cdef int i dims = [] for i in range(shape.ndim): dims.append(shape.dims[i]) return tuple(dims) cdef int same_shape(Shape shape1, Shape shape2) nogil: """ Checks if two shapes are the same. Two shapes are equals if they have the same number of dimensions and that each dimension's size matches. Parameters ---------- shape1 : `Shape` struct structure containing shape informations shape2 : `Shape` struct structure containing shape informations Returns ------- same_shape : int (0 or 1) tells if the shape are equals """ """ """ cdef int i cdef int same_shape = True same_shape &= shape1.ndim == shape2.ndim for i in range(shape1.ndim): same_shape &= shape1.dims[i] == shape2.dims[i] return same_shape dipy-0.10.1/dipy/segment/featurespeed.pxd000066400000000000000000000015051263041327500203420ustar00rootroot00000000000000from cythonutils cimport Data2D, Shape cimport numpy as cnp cdef class Feature(object): cdef int is_order_invariant cdef Shape c_infer_shape(Feature self, Data2D datum) nogil except * cdef void c_extract(Feature self, Data2D datum, Data2D out) nogil except * cpdef infer_shape(Feature self, datum) cpdef extract(Feature self, datum) cdef class CythonFeature(Feature): pass # The IdentityFeature class returns the datum as-is. This is useful for metric # that does not require any pre-processing. cdef class IdentityFeature(CythonFeature): pass # The ResampleFeature class returns the datum resampled. This is useful for # metric like SumPointwiseEuclideanMetric that does require a consistent # number of points between datum. cdef class ResampleFeature(CythonFeature): cdef cnp.npy_intp nb_points dipy-0.10.1/dipy/segment/featurespeed.pyx000066400000000000000000000311171263041327500203710ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False import numpy as np cimport numpy as cnp from cythonutils cimport tuple2shape, shape2tuple, shape_from_memview from dipy.tracking.streamlinespeed cimport c_set_number_of_points, c_length cdef class Feature(object): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). Parameters ---------- is_order_invariant : bool (optional) tells if this feature is invariant to the sequence's ordering. This means starting from either extremities produces the same features. (Default: True) Notes ----- When subclassing `Feature`, one only needs to override the `extract` and `infer_shape` methods. """ def __init__(Feature self, is_order_invariant=True): # By default every feature is order invariant. self.is_order_invariant = is_order_invariant property is_order_invariant: """ Is this feature invariant to the sequence's ordering """ def __get__(Feature self): return bool(self.is_order_invariant) def __set__(self, int value): self.is_order_invariant = bool(value) cdef Shape c_infer_shape(Feature self, Data2D datum) nogil except *: """ Cython version of `Feature.infer_shape`. """ with gil: shape = self.infer_shape(np.asarray(datum)) if type(shape) is int: return tuple2shape((1, shape)) elif len(shape) == 1: return tuple2shape((1,) + shape) elif len(shape) == 2: return tuple2shape(shape) else: raise TypeError("Only scalar, 1D or 2D array features are supported!") cdef void c_extract(Feature self, Data2D datum, Data2D out) nogil except *: """ Cython version of `Feature.extract`. """ cdef Data2D c_features with gil: features = np.asarray(self.extract(np.asarray(datum))).astype(np.float32) if features.ndim == 0: features = features[np.newaxis, np.newaxis] elif features.ndim == 1: features = features[np.newaxis] elif features.ndim == 2: pass else: raise TypeError("Only scalar, 1D or 2D array features are supported!") c_features = features out[:] = c_features cpdef infer_shape(Feature self, datum): """ Infers the shape of features extracted from a sequential datum. Parameters ---------- datum : 2D array Sequence of N-dimensional points. Returns ------- int, 1-tuple or 2-tuple Shape of the features. """ raise NotImplementedError("Feature's subclasses must implement method `infer_shape(self, datum)`!") cpdef extract(Feature self, datum): """ Extracts features from a sequential datum. Parameters ---------- datum : 2D array Sequence of N-dimensional points. Returns ------- 2D array Features extracted from `datum`. """ raise NotImplementedError("Feature's subclasses must implement method `extract(self, datum)`!") cdef class CythonFeature(Feature): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). Parameters ---------- is_order_invariant : bool, optional Tells if this feature is invariant to the sequence's ordering (Default: True). Notes ----- By default, when inheriting from `CythonFeature`, Python methods will call their C version (e.g. `CythonFeature.extract` -> `self.c_extract`). """ cpdef infer_shape(CythonFeature self, datum): """ Infers the shape of features extracted from a sequential datum. Parameters ---------- datum : 2D array Sequence of N-dimensional points. Returns ------- tuple Shape of the features. Notes ----- This method calls its Cython version `self.c_infer_shape` accordingly. """ if not datum.flags.writeable or datum.dtype is not np.float32: datum = datum.astype(np.float32) return shape2tuple(self.c_infer_shape(datum)) cpdef extract(CythonFeature self, datum): """ Extracts features from a sequential datum. Parameters ---------- datum : 2D array Sequence of N-dimensional points. Returns ------- 2D array Features extracted from `datum`. Notes ----- This method calls its Cython version `self.c_extract` accordingly. """ if not datum.flags.writeable or datum.dtype is not np.float32: datum = datum.astype(np.float32) shape = shape2tuple(self.c_infer_shape(datum)) cdef Data2D out = np.empty(shape, dtype=datum.dtype) self.c_extract(datum, out) return np.asarray(out) cdef class IdentityFeature(CythonFeature): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). The features being extracted are the actual sequence's points. This is useful for metric that does not require any pre-processing. """ def __init__(IdentityFeature self): super(IdentityFeature, self).__init__(is_order_invariant=False) cdef Shape c_infer_shape(IdentityFeature self, Data2D datum) nogil except *: return shape_from_memview(datum) cdef void c_extract(IdentityFeature self, Data2D datum, Data2D out) nogil except *: cdef: int N = datum.shape[0], D = datum.shape[1] int n, d for n in range(N): for d in range(D): out[n, d] = datum[n, d] cdef class ResampleFeature(CythonFeature): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). The features being extracted are the points of the sequence once resampled. This is useful for metrics requiring a constant number of points for all streamlines. """ def __init__(ResampleFeature self, cnp.npy_intp nb_points): super(ResampleFeature, self).__init__(is_order_invariant=False) self.nb_points = nb_points if nb_points <= 0: raise ValueError("ResampleFeature: `nb_points` must be strictly positive: {0}".format(nb_points)) cdef Shape c_infer_shape(ResampleFeature self, Data2D datum) nogil except *: cdef Shape shape = shape_from_memview(datum) shape.dims[0] = self.nb_points return shape cdef void c_extract(ResampleFeature self, Data2D datum, Data2D out) nogil except *: c_set_number_of_points(datum, out) cdef class CenterOfMassFeature(CythonFeature): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). The feature being extracted consists of one N-dimensional point representing the mean of the points, i.e. the center of mass. """ def __init__(CenterOfMassFeature self): super(CenterOfMassFeature, self).__init__(is_order_invariant=True) cdef Shape c_infer_shape(CenterOfMassFeature self, Data2D datum) nogil except *: cdef Shape shape shape.ndim = 2 shape.dims[0] = 1 shape.dims[1] = datum.shape[1] shape.size = datum.shape[1] return shape cdef void c_extract(CenterOfMassFeature self, Data2D datum, Data2D out) nogil except *: cdef int N = datum.shape[0], D = datum.shape[1] cdef int i, d for d in range(D): out[0, d] = 0 for i in range(N): for d in range(D): out[0, d] += datum[i, d] for d in range(D): out[0, d] /= N cdef class MidpointFeature(CythonFeature): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). The feature being extracted consists of one N-dimensional point representing the middle point of the sequence (i.e. `nb_points//2`th point). """ def __init__(MidpointFeature self): super(MidpointFeature, self).__init__(is_order_invariant=False) cdef Shape c_infer_shape(MidpointFeature self, Data2D datum) nogil except *: cdef Shape shape shape.ndim = 2 shape.dims[0] = 1 shape.dims[1] = datum.shape[1] shape.size = datum.shape[1] return shape cdef void c_extract(MidpointFeature self, Data2D datum, Data2D out) nogil except *: cdef: int N = datum.shape[0], D = datum.shape[1] int mid = N/2 int d for d in range(D): out[0, d] = datum[mid, d] cdef class ArcLengthFeature(CythonFeature): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). The feature being extracted consists of one scalar representing the arc length of the sequence (i.e. the sum of the length of all segments). """ def __init__(ArcLengthFeature self): super(ArcLengthFeature, self).__init__(is_order_invariant=True) cdef Shape c_infer_shape(ArcLengthFeature self, Data2D datum) nogil except *: cdef Shape shape shape.ndim = 2 shape.dims[0] = 1 shape.dims[1] = 1 shape.size = 1 return shape cdef void c_extract(ArcLengthFeature self, Data2D datum, Data2D out) nogil except *: out[0, 0] = c_length(datum) cdef class VectorOfEndpointsFeature(CythonFeature): """ Extracts features from a sequential datum. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). The feature being extracted consists of one vector in the N-dimensional space pointing from one end-point of the sequence to the other (i.e. `S[-1]-S[0]`). """ def __init__(VectorOfEndpointsFeature self): super(VectorOfEndpointsFeature, self).__init__(is_order_invariant=False) cdef Shape c_infer_shape(VectorOfEndpointsFeature self, Data2D datum) nogil except *: cdef Shape shape shape.ndim = 2 shape.dims[0] = 1 shape.dims[1] = datum.shape[1] shape.size = datum.shape[1] return shape cdef void c_extract(VectorOfEndpointsFeature self, Data2D datum, Data2D out) nogil except *: cdef: int N = datum.shape[0], D = datum.shape[1] int d for d in range(D): out[0, d] = datum[N-1, d] - datum[0, d] cpdef infer_shape(Feature feature, data): """ Infers shape of the features extracted from data. Parameters ---------- feature : `Feature` object Tells how to infer shape of the features. data : list of 2D arrays List of sequences of N-dimensional points. Returns ------- list of tuples Shapes of the features inferred from `data`. """ single_datum = False if type(data) is np.ndarray: single_datum = True data = [data] if len(data) == 0: return [] shapes = [] cdef int i for i in range(0, len(data)): datum = data[i] if data[i].flags.writeable else data[i].astype(np.float32) shapes.append(shape2tuple(feature.c_infer_shape(datum))) if single_datum: return shapes[0] else: return shapes cpdef extract(Feature feature, data): """ Extracts features from data. Parameters ---------- feature : `Feature` object Tells how to extract features from the data. datum : list of 2D arrays List of sequence of N-dimensional points. Returns ------- list of 2D arrays List of features extracted from `data`. """ single_datum = False if type(data) is np.ndarray: single_datum = True data = [data] if len(data) == 0: return [] shapes = infer_shape(feature, data) features = [np.empty(shape, dtype=np.float32) for shape in shapes] cdef int i for i in range(len(data)): datum = data[i] if data[i].flags.writeable else data[i].astype(np.float32) feature.c_extract(datum, features[i]) if single_datum: return features[0] else: return features dipy-0.10.1/dipy/segment/mask.py000066400000000000000000000224371263041327500164650ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from warnings import warn import numpy as np from dipy.reconst.dti import fractional_anisotropy, color_fa from scipy.ndimage.filters import median_filter try: from skimage.filters import threshold_otsu as otsu except: from .threshold import otsu from scipy.ndimage import binary_dilation, generate_binary_structure def multi_median(input, median_radius, numpass): """ Applies median filter multiple times on input data. Parameters ---------- input : ndarray The input volume to apply filter on. median_radius : int Radius (in voxels) of the applied median filter numpass: int Number of pass of the median filter Returns ------- input : ndarray Filtered input volume. """ outvol = np.zeros_like(input) # Array representing the size of the median window in each dimension. medarr = np.ones_like(input.shape) * ((median_radius * 2) + 1) # Multi pass for i in range(0, numpass): median_filter(input, medarr, output=input) return input def applymask(vol, mask): """ Mask vol with mask. Parameters ---------- vol : ndarray Array with $V$ dimensions mask : ndarray Binary mask. Has $M$ dimensions where $M <= V$. When $M < V$, we append $V - M$ dimensions with axis length 1 to `mask` so that `mask` will broadcast against `vol`. In the typical case `vol` can be 4D, `mask` can be 3D, and we append a 1 to the mask shape which (via numpy broadcasting) has the effect of appling the 3D mask to each 3D slice in `vol` (``vol[..., 0]`` to ``vol[..., -1``). Returns ------- masked_vol : ndarray `vol` multiplied by `mask` where `mask` may have been extended to match extra dimensions in `vol` """ mask = mask.reshape(mask.shape + (vol.ndim - mask.ndim) * (1,)) return vol * mask def bounding_box(vol): """Compute the bounding box of nonzero intensity voxels in the volume. Parameters ---------- vol : ndarray Volume to compute bounding box on. Returns ------- npmins : list Array containg minimum index of each dimension npmaxs : list Array containg maximum index of each dimension """ # Find bounds on first dimension temp = vol for i in range(vol.ndim - 1): temp = temp.any(-1) mins = [temp.argmax()] maxs = [len(temp) - temp[::-1].argmax()] # Check that vol is not all 0 if mins[0] == 0 and temp[0] == 0: warn('No data found in volume to bound. Returning empty bounding box.') return [0] * vol.ndim, [0] * vol.ndim # Find bounds on remaining dimensions if vol.ndim > 1: a, b = bounding_box(vol.any(0)) mins.extend(a) maxs.extend(b) return mins, maxs def crop(vol, mins, maxs): """Crops the input volume. Parameters ---------- vol : ndarray Volume to crop. mins : array Array containg minimum index of each dimension. maxs : array Array containg maximum index of each dimension. Returns ------- vol : ndarray The cropped volume. """ return vol[tuple(slice(i, j) for i, j in zip(mins, maxs))] def median_otsu(input_volume, median_radius=4, numpass=4, autocrop=False, vol_idx=None, dilate=None): """Simple brain extraction tool method for images from DWI data. It uses a median filter smoothing of the input_volumes `vol_idx` and an automatic histogram Otsu thresholding technique, hence the name *median_otsu*. This function is inspired from Mrtrix's bet which has default values ``median_radius=3``, ``numpass=2``. However, from tests on multiple 1.5T and 3T data from GE, Philips, Siemens, the most robust choice is ``median_radius=4``, ``numpass=4``. Parameters ---------- input_volume : ndarray ndarray of the brain volume median_radius : int Radius (in voxels) of the applied median filter (default: 4). numpass: int Number of pass of the median filter (default: 4). autocrop: bool, optional if True, the masked input_volume will also be cropped using the bounding box defined by the masked data. Should be on if DWI is upsampled to 1x1x1 resolution. (default: False). vol_idx : None or array, optional 1D array representing indices of ``axis=3`` of a 4D `input_volume` None (the default) corresponds to ``(0,)`` (assumes first volume in 4D array). dilate : None or int, optional number of iterations for binary dilation Returns ------- maskedvolume : ndarray Masked input_volume mask : 3D ndarray The binary brain mask Notes ----- Copyright (C) 2011, the scikit-image team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of skimage nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ if len(input_volume.shape) == 4: if vol_idx is not None: b0vol = np.mean(input_volume[..., tuple(vol_idx)], axis=3) else: b0vol = input_volume[..., 0].copy() else: b0vol = input_volume.copy() # Make a mask using a multiple pass median filter and histogram # thresholding. mask = multi_median(b0vol, median_radius, numpass) thresh = otsu(mask) mask = mask > thresh if dilate is not None: cross = generate_binary_structure(3, 1) mask = binary_dilation(mask, cross, iterations=dilate) # Auto crop the volumes using the mask as input_volume for bounding box # computing. if autocrop: mins, maxs = bounding_box(mask) mask = crop(mask, mins, maxs) croppedvolume = crop(input_volume, mins, maxs) maskedvolume = applymask(croppedvolume, mask) else: maskedvolume = applymask(input_volume, mask) return maskedvolume, mask def segment_from_cfa(tensor_fit, roi, threshold, return_cfa=False): """ Segment the cfa inside roi using the values from threshold as bounds. Parameters ------------- tensor_fit : TensorFit object TensorFit object roi : ndarray A binary mask, which contains the bounding box for the segmentation. threshold : array-like An iterable that defines the min and max values to use for the thresholding. The values are specified as (R_min, R_max, G_min, G_max, B_min, B_max) return_cfa : bool, optional If True, the cfa is also returned. Returns ---------- mask : ndarray Binary mask of the segmentation. cfa : ndarray, optional Array with shape = (..., 3), where ... is the shape of tensor_fit. The color fractional anisotropy, ordered as a nd array with the last dimension of size 3 for the R, G and B channels. """ FA = fractional_anisotropy(tensor_fit.evals) FA[np.isnan(FA)] = 0 FA = np.clip(FA, 0, 1) # Clamp the FA to remove degenerate tensors cfa = color_fa(FA, tensor_fit.evecs) roi = np.asarray(roi, dtype=bool) include = (cfa >= threshold[0::2]) & (cfa <= threshold[1::2]) & roi[..., None] mask = np.all(include, axis=-1) if return_cfa: return mask, cfa return mask def clean_cc_mask(mask): """ Cleans a segmentation of the corpus callosum so no random pixels are included. Parameters ---------- mask : ndarray Binary mask of the coarse segmentation. Returns ------- new_cc_mask : ndarray Binary mask of the cleaned segmentation. """ from scipy.ndimage.measurements import label new_cc_mask = np.zeros(mask.shape) # Flood fill algorithm to find contiguous regions. labels, numL = label(mask) volumes = [len(labels[np.where(labels == l_idx+1)]) for l_idx in np.arange(numL)] biggest_vol = np.arange(numL)[np.where(volumes == np.max(volumes))] + 1 new_cc_mask[np.where(labels == biggest_vol)] = 1 return new_cc_mask dipy-0.10.1/dipy/segment/metric.py000066400000000000000000000031111263041327500170010ustar00rootroot00000000000000from dipy.segment.featurespeed import (Feature, IdentityFeature, ResampleFeature, CenterOfMassFeature, MidpointFeature, ArcLengthFeature, VectorOfEndpointsFeature) from dipy.segment.metricspeed import (Metric, SumPointwiseEuclideanMetric, AveragePointwiseEuclideanMetric, MinimumAverageDirectFlipMetric, CosineMetric) from dipy.segment.metricspeed import (dist, distance_matrix) # Creates aliases EuclideanMetric = SumPointwiseEuclideanMetric def mdf(s1, s2): """ Computes the MDF (Minimum average Direct-Flip) distance [Garyfallidis12]_ between two streamlines. Streamlines must have the same number of points. Parameters ---------- s1 : 2D array A streamline (sequence of N-dimensional points). s2 : 2D array A streamline (sequence of N-dimensional points). Returns ------- double Distance between two streamlines. References ---------- .. [Garyfallidis12] Garyfallidis E. et al., QuickBundles a method for tractography simplification, Frontiers in Neuroscience, vol 6, no 175, 2012. """ return dist(MinimumAverageDirectFlipMetric(), s1, s2) dipy-0.10.1/dipy/segment/metricspeed.pxd000066400000000000000000000007111263041327500201700ustar00rootroot00000000000000from cythonutils cimport Data2D, Shape from featurespeed cimport Feature cdef class Metric(object): cdef Feature feature cdef int is_order_invariant cdef double c_dist(Metric self, Data2D features1, Data2D features2) nogil except -1 cdef int c_are_compatible(Metric self, Shape shape1, Shape shape2) nogil except -1 cpdef double dist(Metric self, features1, features2) except -1 cpdef are_compatible(Metric self, shape1, shape2) dipy-0.10.1/dipy/segment/metricspeed.pyx000066400000000000000000000344751263041327500202330ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False import numpy as np from libc.math cimport sqrt, acos from cythonutils cimport tuple2shape, shape2tuple, same_shape from featurespeed cimport IdentityFeature, ResampleFeature DEF biggest_double = 1.7976931348623157e+308 # np.finfo('f8').max import math cdef double PI = math.pi cdef class Metric(object): """ Computes a distance between two sequential data. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). A `feature` object can be specified in order to calculate the distance between extracted features, rather than directly between the sequential data. Parameters ---------- feature : `Feature` object, optional It is used to extract features before computing the distance. Notes ----- When subclassing `Metric`, one only needs to override the `dist` and `are_compatible` methods. """ def __init__(Metric self, Feature feature=IdentityFeature()): self.feature = feature self.is_order_invariant = self.feature.is_order_invariant property feature: """ `Feature` object used to extract features from sequential data """ def __get__(Metric self): return self.feature property is_order_invariant: """ Is this metric invariant to the sequence's ordering """ def __get__(Metric self): return bool(self.is_order_invariant) cdef int c_are_compatible(Metric self, Shape shape1, Shape shape2) nogil except -1: """ Cython version of `Metric.are_compatible`. """ with gil: return self.are_compatible(shape2tuple(shape1), shape2tuple(shape2)) cdef double c_dist(Metric self, Data2D features1, Data2D features2) nogil except -1: """ Cython version of `Metric.dist`. """ with gil: return self.dist(np.asarray(features1), np.asarray(features2)) cpdef are_compatible(Metric self, shape1, shape2): """ Checks if features can be used by `metric.dist` based on their shape. Basically this method exists so we don't have to do this check inside the `metric.dist` function (speedup). Parameters ---------- shape1 : int, 1-tuple or 2-tuple shape of the first data point's features shape2 : int, 1-tuple or 2-tuple shape of the second data point's features Returns ------- are_compatible : bool whether or not shapes are compatible """ raise NotImplementedError("Metric's subclasses must implement method `are_compatible(self, shape1, shape2)`!") cpdef double dist(Metric self, features1, features2) except -1: """ Computes a distance between two data points based on their features. Parameters ---------- features1 : 2D array Features of the first data point. features2 : 2D array Features of the second data point. Returns ------- double Distance between two data points. """ raise NotImplementedError("Metric's subclasses must implement method `dist(self, features1, features2)`!") cdef class CythonMetric(Metric): """ Computes a distance between two sequential data. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). A `feature` object can be specified in order to calculate the distance between extracted features, rather than directly between the sequential data. Parameters ---------- feature : `Feature` object, optional It is used to extract features before computing the distance. Notes ----- When subclassing `CythonMetric`, one only needs to override the `c_dist` and `c_are_compatible` methods. """ cpdef are_compatible(CythonMetric self, shape1, shape2): """ Checks if features can be used by `metric.dist` based on their shape. Basically this method exists so we don't have to do this check inside method `dist` (speedup). Parameters ---------- shape1 : int, 1-tuple or 2-tuple Shape of the first data point's features. shape2 : int, 1-tuple or 2-tuple Shape of the second data point's features. Returns ------- bool Whether or not shapes are compatible. Notes ----- This method calls its Cython version `self.c_are_compatible` accordingly. """ if type(shape1) is int: shape1 = (1, shape1) elif len(shape1) == 1: shape1 = (1,) + shape1 if type(shape2) is int: shape2 = (1, shape2) elif len(shape2) == 1: shape2 = (1,) + shape2 return self.c_are_compatible(tuple2shape(shape1), tuple2shape(shape2)) == 1 cpdef double dist(CythonMetric self, features1, features2) except -1: """ Computes a distance between two data points based on their features. Parameters ---------- features1 : 2D array Features of the first data point. features2 : 2D array Features of the second data point. Returns ------- double Distance between two data points. Notes ----- This method calls its Cython version `self.c_dist` accordingly. """ if not self.are_compatible(features1.shape, features2.shape): raise ValueError("Features are not compatible according to this metric!") return self.c_dist(features1, features2) cdef class SumPointwiseEuclideanMetric(CythonMetric): r""" Computes the sum of pointwise Euclidean distances between two sequential data. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). A `feature` object can be specified in order to calculate the distance between the features, rather than directly between the sequential data. Parameters ---------- feature : `Feature` object, optional It is used to extract features before computing the distance. Notes ----- The distance between two 2D sequential data:: s1 s2 0* a *0 \ | \ | 1* | | b *1 | \ 2* \ c *2 is equal to $a+b+c$ where $a$ is the Euclidean distance between s1[0] and s2[0], $b$ between s1[1] and s2[1] and $c$ between s1[2] and s2[2]. """ cdef double c_dist(SumPointwiseEuclideanMetric self, Data2D features1, Data2D features2) nogil except -1: cdef : int N = features1.shape[0], D = features1.shape[1] int n, d double dd, dist_n, dist = 0.0 for n in range(N): dist_n = 0.0 for d in range(D): dd = features1[n, d] - features2[n, d] dist_n += dd*dd dist += sqrt(dist_n) return dist cdef int c_are_compatible(SumPointwiseEuclideanMetric self, Shape shape1, Shape shape2) nogil except -1: return same_shape(shape1, shape2) cdef class AveragePointwiseEuclideanMetric(SumPointwiseEuclideanMetric): r""" Computes the average of pointwise Euclidean distances between two sequential data. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). A `feature` object can be specified in order to calculate the distance between the features, rather than directly between the sequential data. Parameters ---------- feature : `Feature` object, optional It is used to extract features before computing the distance. Notes ----- The distance between two 2D sequential data:: s1 s2 0* a *0 \ | \ | 1* | | b *1 | \ 2* \ c *2 is equal to $(a+b+c)/3$ where $a$ is the Euclidean distance between s1[0] and s2[0], $b$ between s1[1] and s2[1] and $c$ between s1[2] and s2[2]. """ cdef double c_dist(AveragePointwiseEuclideanMetric self, Data2D features1, Data2D features2) nogil except -1: cdef int N = features1.shape[0] cdef double dist = SumPointwiseEuclideanMetric.c_dist(self, features1, features2) return dist / N cdef class MinimumAverageDirectFlipMetric(AveragePointwiseEuclideanMetric): r""" Computes the MDF distance (minimum average direct-flip) between two sequential data. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). Notes ----- The distance between two 2D sequential data:: s1 s2 0* a *0 \ | \ | 1* | | b *1 | \ 2* \ c *2 is equal to $\min((a+b+c)/3, (a'+b'+c')/3)$ where $a$ is the Euclidean distance between s1[0] and s2[0], $b$ between s1[1] and s2[1], $c$ between s1[2] and s2[2], $a'$ between s1[0] and s2[2], $b'$ between s1[1] and s2[1] and $c'$ between s1[2] and s2[0]. """ property is_order_invariant: """ Is this metric invariant to the sequence's ordering """ def __get__(MinimumAverageDirectFlipMetric self): return True # Ordering is handled in the distance computation cdef double c_dist(MinimumAverageDirectFlipMetric self, Data2D features1, Data2D features2) nogil except -1: cdef double dist_direct = AveragePointwiseEuclideanMetric.c_dist(self, features1, features2) cdef double dist_flipped = AveragePointwiseEuclideanMetric.c_dist(self, features1, features2[::-1]) return min(dist_direct, dist_flipped) cdef class CosineMetric(CythonMetric): r""" Computes the cosine distance between two vectors. A vector (i.e. a N-dimensional point) is represented as a 2D array with shape (1, nb_dimensions). Notes ----- The distance between two vectors $v_1$ and $v_2$ is equal to $\frac{1}{\pi} \arccos\left(\frac{v_1 \cdot v_2}{\|v_1\| \|v_2\|}\right)$ and is bounded within $[0,1]$. """ def __init__(CosineMetric self, Feature feature): super(CosineMetric, self).__init__(feature=feature) cdef int c_are_compatible(CosineMetric self, Shape shape1, Shape shape2) nogil except -1: return same_shape(shape1, shape2) != 0 and shape1.dims[0] == 1 cdef double c_dist(CosineMetric self, Data2D features1, Data2D features2) nogil except -1: cdef : int d, D = features1.shape[1] double sqr_norm_features1 = 0.0, sqr_norm_features2 = 0.0 double cos_theta = 0.0 for d in range(D): cos_theta += features1[0, d] * features2[0, d] sqr_norm_features1 += features1[0, d] * features1[0, d] sqr_norm_features2 += features2[0, d] * features2[0, d] if sqr_norm_features1 == 0.: if sqr_norm_features2 == 0.: return 0. else: return 1. cos_theta /= sqrt(sqr_norm_features1) * sqrt(sqr_norm_features2) # Make sure it's in [-1, 1], i.e. within domain of arccosine cos_theta = min(cos_theta, 1.) cos_theta = max(cos_theta, -1.) return acos(cos_theta) / PI # Normalized cosine distance cpdef distance_matrix(Metric metric, data1, data2=None): """ Computes the distance matrix between two lists of sequential data. The distance matrix is obtained by computing the pairwise distance of all tuples spawn by the Cartesian product of `data1` with `data2`. If `data2` is not provided, the Cartesian product of `data1` with itself is used instead. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). Parameters ---------- metric : `Metric` object Tells how to compute the distance between two sequential data. data1 : list of 2D arrays List of sequences of N-dimensional points. data2 : list of 2D arrays Llist of sequences of N-dimensional points. Returns ------- 2D array (double) Distance matrix. """ cdef int i, j if data2 is None: data2 = data1 shape = metric.feature.infer_shape(data1[0].astype(np.float32)) distance_matrix = np.zeros((len(data1), len(data2)), dtype=np.float64) cdef: Data2D features1 = np.empty(shape, np.float32) Data2D features2 = np.empty(shape, np.float32) for i in range(len(data1)): datum1 = data1[i] if data1[i].flags.writeable and data1[i].dtype is np.float32 else data1[i].astype(np.float32) metric.feature.c_extract(datum1, features1) for j in range(len(data2)): datum2 = data2[j] if data2[j].flags.writeable and data2[j].dtype is np.float32 else data2[j].astype(np.float32) metric.feature.c_extract(datum2, features2) distance_matrix[i, j] = metric.c_dist(features1, features2) return distance_matrix cpdef double dist(Metric metric, datum1, datum2) except -1: """ Computes a distance between `datum1` and `datum2`. A sequence of N-dimensional points is represented as a 2D array with shape (nb_points, nb_dimensions). Parameters ---------- metric : `Metric` object Tells how to compute the distance between `datum1` and `datum2`. datum1 : 2D array Sequence of N-dimensional points. datum2 : 2D array Sequence of N-dimensional points. Returns ------- double Distance between two data points. """ shape1 = metric.feature.infer_shape(datum1) shape2 = metric.feature.infer_shape(datum2) if not metric.are_compatible(shape1, shape2): raise ValueError("Data features' shapes must be compatible!") datum1 = datum1 if datum1.flags.writeable and datum1.dtype is np.float32 else datum1.astype(np.float32) datum2 = datum2 if datum2.flags.writeable and datum2.dtype is np.float32 else datum2.astype(np.float32) cdef: Data2D features1 = np.empty(shape1, np.float32) Data2D features2 = np.empty(shape2, np.float32) metric.feature.c_extract(datum1, features1) metric.feature.c_extract(datum2, features2) return metric.c_dist(features1, features2) dipy-0.10.1/dipy/segment/quickbundles.py000066400000000000000000000105011263041327500202100ustar00rootroot00000000000000import numpy as np from dipy.tracking.metrics import downsample from dipy.tracking.distances import local_skeleton_clustering from dipy.tracking.distances import bundles_distances_mdf from warnings import warn warn(DeprecationWarning("Module 'dipy.segment.quickbundles' is deprecated," " use module 'dipy.segment.clustering' instead")) class QuickBundles(object): def __init__(self,tracks,dist_thr=4.,pts=12): """ Highly efficient trajectory clustering Parameters ----------- tracks : sequence of (N,3) ... (M,3) arrays, trajectories (or tractography or streamlines) dist_thr : float, distance threshold in the space of the tracks pts : int, number of points for simplifying the tracks Methods -------- clustering() returns a dict holding with the clustering result virtuals() gives the virtuals (track centroids) of the clusters exemplars() gives the exemplars (track medoids) of the clusters Citation --------- E.Garyfallidis, "Towards an accurate brain tractography", PhD thesis, 2012 """ warn(DeprecationWarning("Class 'dipy.segment.quickbundles.QuickBundles'" " is deprecated, use module " "'dipy.segment.clustering.QuickBundles'" " instead")) self.dist_thr = dist_thr self.pts = pts if pts!=None: self.tracksd=[downsample(track,self.pts) for track in tracks] else: self.tracksd=tracks self.clustering=local_skeleton_clustering(self.tracksd, self.dist_thr) self.virts=None self.exemps=None def virtuals(self): if self.virts==None: self.virts=[self.clustering[c]['hidden']/np.float(self.clustering[c]['N']) for c in self.clustering] return self.virts @property def centroids(self): return self.virtuals() def exemplars(self,tracks=None): if self.exemps==None: self.exemps=[] self.exempsi=[] C=self.clustering if tracks==None: tracks=self.tracksd for c in C: cluster=[tracks[i] for i in C[c]['indices']] D=bundles_distances_mdf([C[c]['hidden']/float(C[c]['N'])],cluster) D=D.ravel() si=np.argmin(D) self.exempsi.append(si) self.exemps.append(cluster[si]) return self.exemps, self.exempsi def partitions(self): return self.clustering def clusters(self): return self.clustering def clusters_sizes(self): C=self.clustering return [C[c]['N'] for c in C] def label2cluster(self,id): return self.clustering[id] def label2tracksids(self,id): return [i for i in self.clustering[id]['indices']] def label2tracks(self,tracks,id): return [tracks[i] for i in self.clustering[id]['indices']] @property def total_clusters(self): return len(self.clustering) def downsampled_tracks(self): return self.tracksd def remove_small_clusters(self,size): """ Remove clusters with small size Parameters ----------- size : int, threshold for minimum number of tracks allowed """ C=self.clustering for c in range(len(C)): if C[c]['N']<=size: del C[c] C2={} keys=C.keys() for c in range(len(C)): C2[c]=C[keys[c]] self.clustering=C2 #self.tracksd=[downsample(track,self.pts) for track in tracks] self.virts=None def remove_cluster(self,id): print('Not implemented yet') pass def remove_clusters(self,list_ids): print('Not implemented yet') pass def remove_tracks(self): print('Not implemented yet') pass def points_per_track(self): print('Not implemented yet') pass dipy-0.10.1/dipy/segment/tests/000077500000000000000000000000001263041327500163125ustar00rootroot00000000000000dipy-0.10.1/dipy/segment/tests/__init__.py000066400000000000000000000000001263041327500204110ustar00rootroot00000000000000dipy-0.10.1/dipy/segment/tests/test_clustering.py000066400000000000000000000611361263041327500221110ustar00rootroot00000000000000 import numpy as np import itertools import copy from dipy.segment.clustering import Cluster, ClusterCentroid from dipy.segment.clustering import ClusterMap, ClusterMapCentroid from dipy.segment.clustering import Clustering from nose.tools import assert_equal, assert_true, assert_false from numpy.testing import assert_array_equal, assert_raises, run_module_suite from dipy.testing import assert_arrays_equal features_shape = (1, 10) dtype = "float32" features = np.ones(features_shape, dtype=dtype) data = [np.arange(3*5, dtype=dtype).reshape((-1, 3)), np.arange(3*10, dtype=dtype).reshape((-1, 3)), np.arange(3*15, dtype=dtype).reshape((-1, 3)), np.arange(3*17, dtype=dtype).reshape((-1, 3)), np.arange(3*20, dtype=dtype).reshape((-1, 3))] expected_clusters = [[2, 4], [0, 3], [1]] def test_cluster_attributes_and_constructor(): cluster = Cluster() assert_equal(type(cluster), Cluster) assert_equal(cluster.id, 0) assert_array_equal(cluster.indices, []) assert_equal(len(cluster), 0) # Duplicate assert_equal(cluster, Cluster(cluster.id, cluster.indices, cluster.refdata)) assert_false(cluster != Cluster(cluster.id, cluster.indices, cluster.refdata)) # Invalid comparison assert_raises(TypeError, cluster.__cmp__, cluster) def test_cluster_assign(): cluster = Cluster() indices = [] for idx in range(1, 10): cluster.assign(idx) indices.append(idx) assert_equal(len(cluster), idx) assert_equal(type(cluster.indices), list) assert_array_equal(cluster.indices, indices) # Test add multiples indices at the same time cluster = Cluster() cluster.assign(*range(1, 10)) assert_array_equal(cluster.indices, indices) def test_cluster_iter(): indices = list(range(len(data))) np.random.shuffle(indices) # None trivial ordering # Test without specifying refdata cluster = Cluster() cluster.assign(*indices) assert_array_equal(cluster.indices, indices) assert_array_equal(list(cluster), indices) # Test with specifying refdata in ClusterMap cluster.refdata = data assert_arrays_equal(list(cluster), [data[i] for i in indices]) def test_cluster_getitem(): indices = list(range(len(data))) np.random.shuffle(indices) # None trivial ordering advanced_indices = indices + [0, 1, 2, -1, -2, -3] # Test without specifying refdata in ClusterMap cluster = Cluster() cluster.assign(*indices) # Test indexing for i in advanced_indices: assert_equal(cluster[i], indices[i]) # Test advanced indexing assert_array_equal(cluster[advanced_indices], [indices[i] for i in advanced_indices]) # Test index out of bounds assert_raises(IndexError, cluster.__getitem__, len(cluster)) assert_raises(IndexError, cluster.__getitem__, -len(cluster)-1) # Test slicing and negative indexing assert_equal(cluster[-1], indices[-1]) assert_array_equal(cluster[::2], indices[::2]) assert_arrays_equal(cluster[::-1], indices[::-1]) assert_arrays_equal(cluster[:-1], indices[:-1]) assert_arrays_equal(cluster[1:], indices[1:]) # Test with wrong indexing object assert_raises(TypeError, cluster.__getitem__, "wrong") # Test with specifying refdata in ClusterMap cluster.refdata = data # Test indexing for i in advanced_indices: assert_array_equal(cluster[i], data[indices[i]]) # Test advanced indexing assert_array_equal(cluster[advanced_indices], [data[indices[i]] for i in advanced_indices]) # Test index out of bounds assert_raises(IndexError, cluster.__getitem__, len(cluster)) assert_raises(IndexError, cluster.__getitem__, -len(cluster)-1) # Test slicing and negative indexing assert_array_equal(cluster[-1], data[indices[-1]]) assert_arrays_equal(cluster[::2], [data[i] for i in indices[::2]]) assert_arrays_equal(cluster[::-1], [data[i] for i in indices[::-1]]) assert_arrays_equal(cluster[:-1], [data[i] for i in indices[:-1]]) assert_arrays_equal(cluster[1:], [data[i] for i in indices[1:]]) # Test with wrong indexing object assert_raises(TypeError, cluster.__getitem__, "wrong") def test_cluster_str_and_repr(): indices = list(range(len(data))) np.random.shuffle(indices) # None trivial ordering # Test without specifying refdata in ClusterMap cluster = Cluster() cluster.assign(*indices) assert_equal(str(cluster), "[" + ", ".join(map(str, indices)) + "]") assert_equal(repr(cluster), "Cluster([" + ", ".join(map(str, indices)) + "])") # Test with specifying refdata in ClusterMap cluster.refdata = data assert_equal(str(cluster), "[" + ", ".join(map(str, indices)) + "]") assert_equal(repr(cluster), "Cluster([" + ", ".join(map(str, indices)) + "])") def test_cluster_centroid_attributes_and_constructor(): centroid = np.zeros(features_shape) cluster = ClusterCentroid(centroid) assert_equal(type(cluster), ClusterCentroid) assert_equal(cluster.id, 0) assert_array_equal(cluster.indices, []) assert_array_equal(cluster.centroid, np.zeros(features_shape)) assert_equal(len(cluster), 0) # Duplicate assert_equal(cluster, ClusterCentroid(centroid)) assert_false(cluster != ClusterCentroid(centroid)) assert_false(cluster == ClusterCentroid(centroid+1)) # Invalid comparison assert_raises(TypeError, cluster.__cmp__, cluster) def test_cluster_centroid_assign(): centroid = np.zeros(features_shape) cluster = ClusterCentroid(centroid) indices = [] centroid = np.zeros(features_shape, dtype=dtype) for idx in range(1, 10): cluster.assign(idx, (idx+1) * features) cluster.update() indices.append(idx) centroid = (centroid * (idx-1) + (idx+1) * features) / idx assert_equal(len(cluster), idx) assert_equal(type(cluster.indices), list) assert_array_equal(cluster.indices, indices) assert_equal(type(cluster.centroid), np.ndarray) assert_array_equal(cluster.centroid, centroid) def test_cluster_centroid_iter(): indices = list(range(len(data))) np.random.shuffle(indices) # None trivial ordering # Test without specifying refdata in ClusterCentroid centroid = np.zeros(features_shape) cluster = ClusterCentroid(centroid) for idx in indices: cluster.assign(idx, (idx+1)*features) assert_array_equal(cluster.indices, indices) assert_array_equal(list(cluster), indices) # Test with specifying refdata in ClusterCentroid cluster.refdata = data assert_arrays_equal(list(cluster), [data[i] for i in indices]) def test_cluster_centroid_getitem(): indices = list(range(len(data))) np.random.shuffle(indices) # None trivial ordering advanced_indices = indices + [0, 1, 2, -1, -2, -3] # Test without specifying refdata in ClusterCentroid centroid = np.zeros(features_shape) cluster = ClusterCentroid(centroid) for idx in indices: cluster.assign(idx, (idx+1)*features) # Test indexing for i in advanced_indices: assert_equal(cluster[i], indices[i]) # Test advanced indexing assert_array_equal(cluster[advanced_indices], [indices[i] for i in advanced_indices]) # Test index out of bounds assert_raises(IndexError, cluster.__getitem__, len(cluster)) assert_raises(IndexError, cluster.__getitem__, -len(cluster)-1) # Test slicing and negative indexing assert_equal(cluster[-1], indices[-1]) assert_array_equal(cluster[::2], indices[::2]) assert_arrays_equal(cluster[::-1], indices[::-1]) assert_arrays_equal(cluster[:-1], indices[:-1]) assert_arrays_equal(cluster[1:], indices[1:]) # Test with specifying refdata in ClusterCentroid cluster.refdata = data # Test indexing for i in advanced_indices: assert_array_equal(cluster[i], data[indices[i]]) # Test advanced indexing assert_array_equal(cluster[advanced_indices], [data[indices[i]] for i in advanced_indices]) # Test index out of bounds assert_raises(IndexError, cluster.__getitem__, len(cluster)) assert_raises(IndexError, cluster.__getitem__, -len(cluster)-1) # Test slicing and negative indexing assert_array_equal(cluster[-1], data[indices[-1]]) assert_arrays_equal(cluster[::2], [data[i] for i in indices[::2]]) assert_arrays_equal(cluster[::-1], [data[i] for i in indices[::-1]]) assert_arrays_equal(cluster[:-1], [data[i] for i in indices[:-1]]) assert_arrays_equal(cluster[1:], [data[i] for i in indices[1:]]) def test_cluster_map_attributes_and_constructor(): clusters = ClusterMap() assert_equal(len(clusters), 0) assert_array_equal(clusters.clusters, []) assert_array_equal(list(clusters), []) assert_raises(IndexError, clusters.__getitem__, 0) assert_raises(AttributeError, setattr, clusters, 'clusters', []) def test_cluster_map_add_cluster(): clusters = ClusterMap() list_of_cluster_objects = [] list_of_indices = [] for i in range(3): cluster = Cluster() list_of_cluster_objects.append(cluster) list_of_indices.append([]) for id_data in range(2 * i): list_of_indices[-1].append(id_data) cluster.assign(id_data) clusters.add_cluster(cluster) assert_equal(type(cluster), Cluster) assert_equal(len(clusters), i+1) assert_equal(cluster, clusters[-1]) assert_array_equal(list(itertools.chain(*clusters)), list(itertools.chain(*list_of_indices))) # Test adding multiple clusters at once. clusters = ClusterMap() clusters.add_cluster(*list_of_cluster_objects) assert_array_equal(list(itertools.chain(*clusters)), list(itertools.chain(*list_of_indices))) def test_cluster_map_remove_cluster(): clusters = ClusterMap() cluster1 = Cluster(indices=[1]) clusters.add_cluster(cluster1) cluster2 = Cluster(indices=[1, 2]) clusters.add_cluster(cluster2) cluster3 = Cluster(indices=[1, 2, 3]) clusters.add_cluster(cluster3) assert_equal(len(clusters), 3) clusters.remove_cluster(cluster2) assert_equal(len(clusters), 2) assert_array_equal(list(itertools.chain(*clusters)), list(itertools.chain(*[cluster1, cluster3]))) assert_equal(clusters[0], cluster1) assert_equal(clusters[1], cluster3) clusters.remove_cluster(cluster3) assert_equal(len(clusters), 1) assert_array_equal(list(itertools.chain(*clusters)), list(cluster1)) assert_equal(clusters[0], cluster1) clusters.remove_cluster(cluster1) assert_equal(len(clusters), 0) assert_array_equal(list(itertools.chain(*clusters)), []) # Test removing multiple clusters at once. clusters = ClusterMap() clusters.add_cluster(cluster1, cluster2, cluster3) clusters.remove_cluster(cluster3, cluster2) assert_equal(len(clusters), 1) assert_array_equal(list(itertools.chain(*clusters)), list(cluster1)) assert_equal(clusters[0], cluster1) clusters = ClusterMap() clusters.add_cluster(cluster2, cluster1, cluster3) clusters.remove_cluster(cluster1, cluster3, cluster2) assert_equal(len(clusters), 0) assert_array_equal(list(itertools.chain(*clusters)), []) def test_cluster_map_clear(): nb_clusters = 11 clusters = ClusterMap() for i in range(nb_clusters): new_cluster = Cluster(indices=range(i)) clusters.add_cluster(new_cluster) clusters.clear() assert_equal(len(clusters), 0) assert_array_equal(list(itertools.chain(*clusters)), []) def test_cluster_map_iter(): rng = np.random.RandomState(42) nb_clusters = 11 # Test without specifying refdata in ClusterMap cluster_map = ClusterMap() clusters = [] for i in range(nb_clusters): new_cluster = Cluster(indices=rng.randint(0, len(data), size=10)) cluster_map.add_cluster(new_cluster) clusters.append(new_cluster) assert_true(all([c1 is c2 for c1, c2 in zip(cluster_map.clusters, clusters)])) assert_array_equal(cluster_map, clusters) assert_array_equal(cluster_map.clusters, clusters) assert_array_equal(cluster_map, [cluster.indices for cluster in clusters]) # Set refdata cluster_map.refdata = data assert_array_equal(cluster_map, [[data[i] for i in cluster.indices] for cluster in clusters]) # Remove refdata, i.e. back to indices cluster_map.refdata = None assert_array_equal(cluster_map, [cluster.indices for cluster in clusters]) def test_cluster_map_getitem(): nb_clusters = 11 indices = list(range(nb_clusters)) np.random.shuffle(indices) # None trivial ordering advanced_indices = indices + [0, 1, 2, -1, -2, -3] cluster_map = ClusterMap() clusters = [] for i in range(nb_clusters): new_cluster = Cluster(indices=range(i)) cluster_map.add_cluster(new_cluster) clusters.append(new_cluster) # Test indexing for i in advanced_indices: assert_equal(cluster_map[i], clusters[i]) # Test advanced indexing assert_array_equal(cluster_map[advanced_indices], [clusters[i] for i in advanced_indices]) # Test index out of bounds assert_raises(IndexError, cluster_map.__getitem__, len(clusters)) assert_raises(IndexError, cluster_map.__getitem__, -len(clusters)-1) # Test slicing and negative indexing assert_equal(cluster_map[-1], clusters[-1]) assert_array_equal(cluster_map[::2], clusters[::2]) assert_arrays_equal(cluster_map[::-1], clusters[::-1]) assert_arrays_equal(cluster_map[:-1], clusters[:-1]) assert_arrays_equal(cluster_map[1:], clusters[1:]) def test_cluster_map_str_and_repr(): nb_clusters = 11 cluster_map = ClusterMap() clusters = [] for i in range(nb_clusters): new_cluster = Cluster(indices=range(i)) cluster_map.add_cluster(new_cluster) clusters.append(new_cluster) expected_str = "[" + ", ".join(map(str, clusters)) + "]" assert_equal(str(cluster_map), expected_str) assert_equal(repr(cluster_map), "ClusterMap(" + expected_str + ")") def test_cluster_map_size(): nb_clusters = 11 cluster_map = ClusterMap() clusters = [Cluster() for i in range(nb_clusters)] cluster_map.add_cluster(*clusters) assert_equal(len(cluster_map), nb_clusters) assert_equal(cluster_map.size(), nb_clusters) def test_cluster_map_clusters_sizes(): rng = np.random.RandomState(42) nb_clusters = 11 # Generate random indices indices = [range(rng.randint(1, 10)) for i in range(nb_clusters)] cluster_map = ClusterMap() clusters = [Cluster(indices=indices[i]) for i in range(nb_clusters)] cluster_map.add_cluster(*clusters) assert_equal(cluster_map.clusters_sizes(), list(map(len, indices))) def test_cluster_map_get_small_and_large_clusters(): rng = np.random.RandomState(42) nb_clusters = 11 cluster_map = ClusterMap() # Randomly generate small clusters indices = [rng.randint(0, 10, size=i) for i in range(1, nb_clusters+1)] small_clusters = [Cluster(indices=indices[i]) for i in range(nb_clusters)] cluster_map.add_cluster(*small_clusters) # Randomly generate small clusters indices = [rng.randint(0, 10, size=i) for i in range(nb_clusters+1, 2*nb_clusters+1)] large_clusters = [Cluster(indices=indices[i]) for i in range(nb_clusters)] cluster_map.add_cluster(*large_clusters) assert_equal(len(cluster_map), 2*nb_clusters) assert_equal(len(cluster_map.get_small_clusters(nb_clusters)), len(small_clusters)) assert_arrays_equal(cluster_map.get_small_clusters(nb_clusters), small_clusters) assert_equal(len(cluster_map.get_large_clusters(nb_clusters+1)), len(large_clusters)) assert_arrays_equal(cluster_map.get_large_clusters(nb_clusters+1), large_clusters) def test_cluster_map_comparison_with_int(): clusters1_indices = range(10) clusters2_indices = range(10, 15) clusters3_indices = [15] # Build a test ClusterMap clusters = ClusterMap() cluster1 = Cluster() cluster1.assign(*clusters1_indices) clusters.add_cluster(cluster1) cluster2 = Cluster() cluster2.assign(*clusters2_indices) clusters.add_cluster(cluster2) cluster3 = Cluster() cluster3.assign(*clusters3_indices) clusters.add_cluster(cluster3) subset = clusters < 5 assert_equal(subset.sum(), 1) assert_array_equal(list(clusters[subset][0]), clusters3_indices) subset = clusters <= 5 assert_equal(subset.sum(), 2) assert_array_equal(list(clusters[subset][0]), clusters2_indices) assert_array_equal(list(clusters[subset][1]), clusters3_indices) subset = clusters == 5 assert_equal(subset.sum(), 1) assert_array_equal(list(clusters[subset][0]), clusters2_indices) subset = clusters != 5 assert_equal(subset.sum(), 2) assert_array_equal(list(clusters[subset][0]), clusters1_indices) assert_array_equal(list(clusters[subset][1]), clusters3_indices) subset = clusters > 5 assert_equal(subset.sum(), 1) assert_array_equal(list(clusters[subset][0]), clusters1_indices) subset = clusters >= 5 assert_equal(subset.sum(), 2) assert_array_equal(list(clusters[subset][0]), clusters1_indices) assert_array_equal(list(clusters[subset][1]), clusters2_indices) def test_cluster_map_comparison_with_object(): nb_clusters = 4 cluster_map = ClusterMap() #clusters = [] for i in range(nb_clusters): new_cluster = Cluster(indices=range(i)) cluster_map.add_cluster(new_cluster) #clusters.append(new_cluster) # Comparison with another ClusterMap object other_cluster_map = copy.deepcopy(cluster_map) assert_true(cluster_map == other_cluster_map) other_cluster_map = copy.deepcopy(cluster_map) assert_false(cluster_map != other_cluster_map) other_cluster_map = copy.deepcopy(cluster_map) assert_raises(NotImplementedError, cluster_map.__le__, other_cluster_map) # Comparison with an object that is not a ClusterMap or int assert_raises(NotImplementedError, cluster_map.__le__, float(42)) def test_cluster_map_centroid_attributes_and_constructor(): clusters = ClusterMapCentroid() assert_array_equal(clusters.centroids, []) assert_raises(AttributeError, setattr, clusters, 'centroids', []) def test_cluster_map_centroid_add_cluster(): clusters = ClusterMapCentroid() centroids = [] for i in range(3): cluster = ClusterCentroid(centroid=np.zeros_like(features)) centroids.append(np.zeros_like(features)) for id_data in range(2*i): centroids[-1] = (centroids[-1]*id_data + (id_data+1)*features) / (id_data+1) cluster.assign(id_data, (id_data+1)*features) cluster.update() clusters.add_cluster(cluster) assert_array_equal(cluster.centroid, centroids[-1]) assert_equal(type(cluster), ClusterCentroid) assert_equal(cluster, clusters[-1]) assert_equal(type(clusters.centroids), list) assert_array_equal(list(itertools.chain(*clusters.centroids)), list(itertools.chain(*centroids))) # Check adding features of different sizes (shorter and longer) features_shape_short = (1, features_shape[1]-3) features_too_short = np.ones(features_shape_short, dtype=dtype) assert_raises(ValueError, cluster.assign, 123, features_too_short) features_shape_long = (1, features_shape[1]+3) features_too_long = np.ones(features_shape_long, dtype=dtype) assert_raises(ValueError, cluster.assign, 123, features_too_long) def test_cluster_map_centroid_remove_cluster(): clusters = ClusterMapCentroid() centroid1 = np.random.rand(*features_shape).astype(dtype) cluster1 = ClusterCentroid(centroid1, indices=[1]) clusters.add_cluster(cluster1) centroid2 = np.random.rand(*features_shape).astype(dtype) cluster2 = ClusterCentroid(centroid2, indices=[1, 2]) clusters.add_cluster(cluster2) centroid3 = np.random.rand(*features_shape).astype(dtype) cluster3 = ClusterCentroid(centroid3, indices=[1, 2, 3]) clusters.add_cluster(cluster3) assert_equal(len(clusters), 3) clusters.remove_cluster(cluster2) assert_equal(len(clusters), 2) assert_array_equal(list(itertools.chain(*clusters)), list(itertools.chain(*[cluster1, cluster3]))) assert_array_equal(clusters.centroids, np.array([centroid1, centroid3])) assert_equal(clusters[0], cluster1) assert_equal(clusters[1], cluster3) clusters.remove_cluster(cluster3) assert_equal(len(clusters), 1) assert_array_equal(list(itertools.chain(*clusters)), list(cluster1)) assert_array_equal(clusters.centroids, np.array([centroid1])) assert_equal(clusters[0], cluster1) clusters.remove_cluster(cluster1) assert_equal(len(clusters), 0) assert_array_equal(list(itertools.chain(*clusters)), []) assert_array_equal(clusters.centroids, []) def test_cluster_map_centroid_iter(): rng = np.random.RandomState(42) nb_clusters = 11 cluster_map = ClusterMapCentroid() clusters = [] for i in range(nb_clusters): new_centroid = np.zeros_like(features) new_cluster = ClusterCentroid(new_centroid, indices=rng.randint(0, len(data), size=10)) cluster_map.add_cluster(new_cluster) clusters.append(new_cluster) assert_true(all([c1 is c2 for c1, c2 in zip(cluster_map.clusters, clusters)])) assert_array_equal(cluster_map, clusters) assert_array_equal(cluster_map.clusters, clusters) assert_array_equal(cluster_map, [cluster.indices for cluster in clusters]) # Set refdata cluster_map.refdata = data assert_array_equal(cluster_map, [[data[i] for i in cluster.indices] for cluster in clusters]) def test_cluster_map_centroid_getitem(): nb_clusters = 11 indices = list(range(len(data))) np.random.shuffle(indices) # None trivial ordering advanced_indices = indices + [0, 1, 2, -1, -2, -3] cluster_map = ClusterMapCentroid() clusters = [] for i in range(nb_clusters): centroid = np.zeros_like(features) cluster = ClusterCentroid(centroid) cluster.id = cluster_map.add_cluster(cluster) clusters.append(cluster) # Test indexing for i in advanced_indices: assert_equal(cluster_map[i], clusters[i]) # Test advanced indexing assert_array_equal(cluster_map[advanced_indices], [clusters[i] for i in advanced_indices]) # Test index out of bounds assert_raises(IndexError, cluster_map.__getitem__, len(clusters)) assert_raises(IndexError, cluster_map.__getitem__, -len(clusters)-1) # Test slicing and negative indexing assert_equal(cluster_map[-1], clusters[-1]) assert_array_equal(cluster_map[::2], clusters[::2]) assert_arrays_equal(cluster_map[::-1], clusters[::-1]) assert_arrays_equal(cluster_map[:-1], clusters[:-1]) assert_arrays_equal(cluster_map[1:], clusters[1:]) def test_cluster_map_centroid_comparison_with_int(): clusters1_indices = range(10) clusters2_indices = range(10, 15) clusters3_indices = [15] # Build a test ClusterMapCentroid centroid = np.zeros_like(features) cluster1 = ClusterCentroid(centroid.copy()) for i in clusters1_indices: cluster1.assign(i, features) cluster2 = ClusterCentroid(centroid.copy()) for i in clusters2_indices: cluster2.assign(i, features) cluster3 = ClusterCentroid(centroid.copy()) for i in clusters3_indices: cluster3.assign(i, features) # Update centroids cluster1.update() cluster2.update() cluster3.update() clusters = ClusterMapCentroid() clusters.add_cluster(cluster1) clusters.add_cluster(cluster2) clusters.add_cluster(cluster3) subset = clusters < 5 assert_equal(subset.sum(), 1) assert_array_equal(list(clusters[subset][0]), clusters3_indices) subset = clusters <= 5 assert_equal(subset.sum(), 2) assert_array_equal(list(clusters[subset][0]), clusters2_indices) assert_array_equal(list(clusters[subset][1]), clusters3_indices) subset = clusters == 5 assert_equal(subset.sum(), 1) assert_array_equal(list(clusters[subset][0]), clusters2_indices) subset = clusters != 5 assert_equal(subset.sum(), 2) assert_array_equal(list(clusters[subset][0]), clusters1_indices) assert_array_equal(list(clusters[subset][1]), clusters3_indices) subset = clusters > 5 assert_equal(subset.sum(), 1) assert_array_equal(list(clusters[subset][0]), clusters1_indices) subset = clusters >= 5 assert_equal(subset.sum(), 2) assert_array_equal(list(clusters[subset][0]), clusters1_indices) assert_array_equal(list(clusters[subset][1]), clusters2_indices) def test_subclassing_clustering(): class SubClustering(Clustering): def cluster(self, data, ordering=None): pass clustering_algo = SubClustering() assert_raises(NotImplementedError, super(SubClustering, clustering_algo).cluster, None) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/segment/tests/test_feature.py000066400000000000000000000245701263041327500213660ustar00rootroot00000000000000import numpy as np import dipy.segment.metric as dipymetric from dipy.segment.featurespeed import extract from nose.tools import assert_true, assert_false, assert_equal from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_raises, run_module_suite) dtype = "float32" s1 = np.array([np.arange(10, dtype=dtype)]*3).T # 10x3 s2 = np.arange(3*10, dtype=dtype).reshape((-1, 3))[::-1] # 10x3 s3 = np.random.rand(5, 4).astype(dtype) # 5x4 s4 = np.random.rand(5, 3).astype(dtype) # 5x3 def test_identity_feature(): # Test subclassing Feature class IdentityFeature(dipymetric.Feature): def __init__(self): super(IdentityFeature, self).__init__(is_order_invariant=False) def infer_shape(self, streamline): return streamline.shape def extract(self, streamline): return streamline for feature in [dipymetric.IdentityFeature(), IdentityFeature()]: for s in [s1, s2, s3, s4]: # Test method infer_shape assert_equal(feature.infer_shape(s), s.shape) # Test method extract features = feature.extract(s) assert_equal(features.shape, s.shape) assert_array_equal(features, s) # This feature type is not order invariant assert_false(feature.is_order_invariant) for s in [s1, s2, s3, s4]: features = feature.extract(s) features_flip = feature.extract(s[::-1]) assert_array_equal(features_flip, s[::-1]) assert_true(np.any(np.not_equal(features, features_flip))) def test_feature_resample(): from dipy.tracking.streamline import set_number_of_points # Test subclassing Feature class ResampleFeature(dipymetric.Feature): def __init__(self, nb_points): super(ResampleFeature, self).__init__(is_order_invariant=False) self.nb_points = nb_points if nb_points <= 0: raise ValueError("ResampleFeature: `nb_points` must be strictly positive: {0}".format(nb_points)) def infer_shape(self, streamline): return (self.nb_points, streamline.shape[1]) def extract(self, streamline): return set_number_of_points(streamline, self.nb_points) assert_raises(ValueError, dipymetric.ResampleFeature, nb_points=0) assert_raises(ValueError, ResampleFeature, nb_points=0) max_points = max(map(len, [s1, s2, s3, s4])) for nb_points in [1, 5, 2*max_points]: for feature in [dipymetric.ResampleFeature(nb_points), ResampleFeature(nb_points)]: for s in [s1, s2, s3, s4]: # Test method infer_shape assert_equal(feature.infer_shape(s), (nb_points, s.shape[1])) # Test method extract features = feature.extract(s) assert_equal(features.shape, (nb_points, s.shape[1])) assert_array_almost_equal(features, set_number_of_points(s, nb_points)) # This feature type is not order invariant assert_false(feature.is_order_invariant) for s in [s1, s2, s3, s4]: features = feature.extract(s) features_flip = feature.extract(s[::-1]) assert_array_equal(features_flip, set_number_of_points(s[::-1], nb_points)) assert_true(np.any(np.not_equal(features, features_flip))) def test_feature_center_of_mass(): # Test subclassing Feature class CenterOfMassFeature(dipymetric.Feature): def __init__(self): super(CenterOfMassFeature, self).__init__(is_order_invariant=True) def infer_shape(self, streamline): return (1, streamline.shape[1]) def extract(self, streamline): return np.mean(streamline, axis=0)[None, :] for feature in [dipymetric.CenterOfMassFeature(), CenterOfMassFeature()]: for s in [s1, s2, s3, s4]: # Test method infer_shape assert_equal(feature.infer_shape(s), (1, s.shape[1])) # Test method extract features = feature.extract(s) assert_equal(features.shape, (1, s.shape[1])) assert_array_almost_equal(features, np.mean(s, axis=0)[None, :]) # This feature type is order invariant assert_true(feature.is_order_invariant) for s in [s1, s2, s3, s4]: features = feature.extract(s) features_flip = feature.extract(s[::-1]) assert_array_almost_equal(features, features_flip) def test_feature_midpoint(): # Test subclassing Feature class MidpointFeature(dipymetric.Feature): def __init__(self): super(MidpointFeature, self).__init__(is_order_invariant=False) def infer_shape(self, streamline): return (1, streamline.shape[1]) def extract(self, streamline): return streamline[[len(streamline)//2]] for feature in [dipymetric.MidpointFeature(), MidpointFeature()]: for s in [s1, s2, s3, s4]: # Test method infer_shape assert_equal(feature.infer_shape(s), (1, s.shape[1])) # Test method extract features = feature.extract(s) assert_equal(features.shape, (1, s.shape[1])) assert_array_almost_equal(features, s[len(s)//2][None, :]) # This feature type is not order invariant assert_false(feature.is_order_invariant) for s in [s1, s2, s3, s4]: features = feature.extract(s) features_flip = feature.extract(s[::-1]) if len(s) % 2 == 0: assert_true(np.any(np.not_equal(features, features_flip))) else: assert_array_equal(features, features_flip) def test_feature_arclength(): from dipy.tracking.streamline import length # Test subclassing Feature class ArcLengthFeature(dipymetric.Feature): def __init__(self): super(ArcLengthFeature, self).__init__(is_order_invariant=True) def infer_shape(self, streamline): return (1, 1) def extract(self, streamline): return length(streamline)[None, None] for feature in [dipymetric.ArcLengthFeature(), ArcLengthFeature()]: for s in [s1, s2, s3, s4]: # Test method infer_shape assert_equal(feature.infer_shape(s), (1, 1)) # Test method extract features = feature.extract(s) assert_equal(features.shape, (1, 1)) assert_array_almost_equal(features, length(s)[None, None]) # This feature type is order invariant assert_true(feature.is_order_invariant) for s in [s1, s2, s3, s4]: features = feature.extract(s) features_flip = feature.extract(s[::-1]) assert_array_almost_equal(features, features_flip) def test_feature_vector_of_endpoints(): # Test subclassing Feature class VectorOfEndpointsFeature(dipymetric.Feature): def __init__(self): super(VectorOfEndpointsFeature, self).__init__(False) def infer_shape(self, streamline): return (1, streamline.shape[1]) def extract(self, streamline): return streamline[[-1]] - streamline[[0]] feature_types = [dipymetric.VectorOfEndpointsFeature(), VectorOfEndpointsFeature()] for feature in feature_types: for s in [s1, s2, s3, s4]: # Test method infer_shape assert_equal(feature.infer_shape(s), (1, s.shape[1])) # Test method extract features = feature.extract(s) assert_equal(features.shape, (1, s.shape[1])) assert_array_almost_equal(features, s[[-1]] - s[[0]]) # This feature type is not order invariant assert_false(feature.is_order_invariant) for s in [s1, s2, s3, s4]: features = feature.extract(s) features_flip = feature.extract(s[::-1]) # The flip features are simply the negative of the features. assert_array_almost_equal(features, -features_flip) def test_feature_extract(): # Test that features are automatically cast into float32 when coming from Python space class CenterOfMass64bit(dipymetric.Feature): def infer_shape(self, streamline): return streamline.shape[1] def extract(self, streamline): return np.mean(streamline.astype(np.float64), axis=0) nb_streamlines = 100 feature_shape = (1, 3) # One N-dimensional point feature = CenterOfMass64bit() streamlines = [np.arange(np.random.randint(20, 30) * 3).reshape((-1, 3)).astype(np.float32) for i in range(nb_streamlines)] features = extract(feature, streamlines) assert_equal(len(features), len(streamlines)) assert_equal(features[0].shape, feature_shape) # Test that scalar features class ArcLengthFeature(dipymetric.Feature): def infer_shape(self, streamline): return 1 def extract(self, streamline): return np.sum(np.sqrt(np.sum((streamline[1:] - streamline[:-1]) ** 2))) nb_streamlines = 100 feature_shape = (1, 1) # One scalar represented as a 2D array feature = ArcLengthFeature() streamlines = [np.arange(np.random.randint(20, 30) * 3).reshape((-1, 3)).astype(np.float32) for i in range(nb_streamlines)] features = extract(feature, streamlines) assert_equal(len(features), len(streamlines)) assert_equal(features[0].shape, feature_shape) # Try if streamlines are readonly for s in streamlines: s.setflags(write=False) features = extract(feature, streamlines) def test_subclassing_feature(): class EmptyFeature(dipymetric.Feature): pass feature = EmptyFeature() assert_raises(NotImplementedError, feature.infer_shape, None) assert_raises(NotImplementedError, feature.extract, None) def test_using_python_feature_with_cython_metric(): class Identity(dipymetric.Feature): def infer_shape(self, streamline): return streamline.shape def extract(self, streamline): return streamline # Test using Python Feature with Cython Metric feature = Identity() metric = dipymetric.AveragePointwiseEuclideanMetric(feature) d1 = dipymetric.dist(metric, s1, s2) features1 = metric.feature.extract(s1) features2 = metric.feature.extract(s2) d2 = metric.dist(features1, features2) assert_equal(d1, d2) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/segment/tests/test_mask.py000066400000000000000000000074471263041327500206720ustar00rootroot00000000000000import warnings import numpy as np import nibabel as nib from scipy.ndimage import generate_binary_structure, binary_dilation from scipy.ndimage.filters import median_filter from dipy.segment.mask import (otsu, bounding_box, crop, applymask, multi_median, median_otsu) from numpy.testing import (assert_equal, assert_almost_equal, run_module_suite) from dipy.data import get_data def test_mask(): vol = np.zeros((30, 30, 30)) vol[15, 15, 15] = 1 struct = generate_binary_structure(3, 1) voln = binary_dilation(vol, structure=struct, iterations=4).astype('f4') initial = np.sum(voln > 0) mask = voln.copy() thresh = otsu(mask) mask = mask > thresh initial_otsu = np.sum(mask > 0) assert_equal(initial_otsu, initial) mins, maxs = bounding_box(mask) voln_crop = crop(mask, mins, maxs) initial_crop = np.sum(voln_crop > 0) assert_equal(initial_crop, initial) applymask(voln, mask) final = np.sum(voln > 0) assert_equal(final, initial) # Test multi_median. median_test = np.arange(25).reshape(5, 5) median_control = median_test.copy() medianradius = 3 median_test = multi_median(median_test, medianradius, 3) medarr = np.ones_like(median_control.shape) * ((medianradius * 2) + 1) median_filter(median_control, medarr, output=median_control) median_filter(median_control, medarr, output=median_control) median_filter(median_control, medarr, output=median_control) assert_equal(median_test, median_control) def test_bounding_box(): vol = np.zeros((100, 100, 50), dtype=int) # Check the more usual case vol[10:90, 11:40, 5:33] = 3 mins, maxs = bounding_box(vol) assert_equal(mins, [10, 11, 5]) assert_equal(maxs, [90, 40, 33]) # Check a 2d case mins, maxs = bounding_box(vol[10]) assert_equal(mins, [11, 5]) assert_equal(maxs, [40, 33]) vol[:] = 0 with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") # Trigger a warning. num_warns = len(w) mins, maxs = bounding_box(vol) # Assert number of warnings has gone up by 1 assert_equal(len(w), num_warns + 1) # Check that an empty array returns zeros for both min & max assert_equal(mins, [0, 0, 0]) assert_equal(maxs, [0, 0, 0]) # Check the 2d case mins, maxs = bounding_box(vol[0]) assert_equal(len(w), num_warns + 2) assert_equal(mins, [0, 0]) assert_equal(maxs, [0, 0]) def test_median_otsu(): fname = get_data('S0_10') img = nib.load(fname) data = img.get_data() data = np.squeeze(data.astype('f8')) dummy_mask = data > data.mean() data_masked, mask = median_otsu(data, median_radius=3, numpass=2, autocrop=False, vol_idx=None, dilate=None) assert_equal(mask.sum() < dummy_mask.sum(), True) data2 = np.zeros(data.shape + (2,)) data2[..., 0] = data data2[..., 1] = data data2_masked, mask2 = median_otsu(data2, median_radius=3, numpass=2, autocrop=False, vol_idx=[0, 1], dilate=None) assert_almost_equal(mask.sum(), mask2.sum()) _, mask3 = median_otsu(data2, median_radius=3, numpass=2, autocrop=False, vol_idx=[0, 1], dilate=1) assert_equal(mask2.sum() < mask3.sum(), True) _, mask4 = median_otsu(data2, median_radius=3, numpass=2, autocrop=False, vol_idx=[0, 1], dilate=2) assert_equal(mask3.sum() < mask4.sum(), True) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/segment/tests/test_metric.py000066400000000000000000000226651263041327500212210ustar00rootroot00000000000000import numpy as np import dipy.segment.metric as dipymetric import itertools from nose.tools import assert_true, assert_false, assert_equal, assert_almost_equal from numpy.testing import assert_array_equal, assert_raises, run_module_suite def norm(x, ord=None, axis=None): if axis is not None: return np.apply_along_axis(np.linalg.norm, axis, x.astype(np.float64), ord) return np.linalg.norm(x.astype(np.float64), ord=ord) dtype = "float32" # Create wiggling streamline nb_points = 18 rng = np.random.RandomState(42) x = np.linspace(0, 10, nb_points) y = rng.rand(nb_points) z = np.sin(np.linspace(0, np.pi, nb_points)) # Bending s = np.array([x, y, z], dtype=dtype).T # Create trivial streamlines s1 = np.array([np.arange(10, dtype=dtype)]*3).T # 10x3 s2 = np.arange(3*10, dtype=dtype).reshape((-1, 3))[::-1] # 10x3 s3 = np.array([np.arange(5, dtype=dtype)]*4) # 5x4 s4 = np.array([np.arange(5, dtype=dtype)]*3) # 5x3 streamlines = [s, s1, s2, s3, s4] def test_metric_minimum_average_direct_flip(): feature = dipymetric.IdentityFeature() class MinimumAverageDirectFlipMetric(dipymetric.Metric): def __init__(self, feature): super(MinimumAverageDirectFlipMetric, self).__init__(feature=feature) @property def is_order_invariant(self): return True # Ordering is handled in the distance computation def are_compatible(self, shape1, shape2): return shape1[0] == shape2[0] def dist(self, v1, v2): average_euclidean = lambda x, y: np.mean(norm(x-y, axis=1)) dist_direct = average_euclidean(v1, v2) dist_flipped = average_euclidean(v1, v2[::-1]) return min(dist_direct, dist_flipped) for metric in [MinimumAverageDirectFlipMetric(feature), dipymetric.MinimumAverageDirectFlipMetric(feature)]: # Test special cases of the MDF distance. assert_equal(metric.dist(s, s), 0.) assert_equal(metric.dist(s, s[::-1]), 0.) # Translation offset = np.array([0.8, 1.3, 5], dtype=dtype) assert_almost_equal(metric.dist(s, s+offset), norm(offset), 5) # Scaling M_scaling = np.diag([1.2, 2.8, 3]).astype(dtype) s_mean = np.mean(s, axis=0) s_zero_mean = s - s_mean s_scaled = np.dot(M_scaling, s_zero_mean.T).T + s_mean d = np.mean(norm((np.diag(M_scaling)-1)*s_zero_mean, axis=1)) assert_almost_equal(metric.dist(s, s_scaled), d, 5) # Rotation from dipy.core.geometry import rodrigues_axis_rotation rot_axis = np.array([1, 2, 3], dtype=dtype) M_rotation = rodrigues_axis_rotation(rot_axis, 60.).astype(dtype) s_mean = np.mean(s, axis=0) s_zero_mean = s - s_mean s_rotated = np.dot(M_rotation, s_zero_mean.T).T + s_mean opposite = norm(np.cross(rot_axis, s_zero_mean), axis=1) / norm(rot_axis) distances = np.sqrt(2*opposite**2 * (1 - np.cos(60.*np.pi/180.))).astype(dtype) d = np.mean(distances) assert_almost_equal(metric.dist(s, s_rotated), d, 5) for s1, s2 in itertools.product(*[streamlines]*2): # All possible pairs # Extract features since metric doesn't work directly on streamlines f1 = metric.feature.extract(s1) f2 = metric.feature.extract(s2) # Test method are_compatible same_nb_points = f1.shape[0] == f2.shape[0] assert_equal(metric.are_compatible(f1.shape, f2.shape), same_nb_points) # Test method dist if features are compatible if metric.are_compatible(f1.shape, f2.shape): distance = metric.dist(f1, f2) if np.all(f1 == f2): assert_equal(distance, 0.) assert_almost_equal(distance, dipymetric.dist(metric, s1, s2)) assert_almost_equal(distance, dipymetric.mdf(s1, s2)) assert_true(distance >= 0.) # This metric type is order invariant assert_true(metric.is_order_invariant) for s1, s2 in itertools.product(*[streamlines]*2): # All possible pairs f1 = metric.feature.extract(s1) f2 = metric.feature.extract(s2) if not metric.are_compatible(f1.shape, f2.shape): continue f1_flip = metric.feature.extract(s1[::-1]) f2_flip = metric.feature.extract(s2[::-1]) distance = metric.dist(f1, f2) assert_almost_equal(metric.dist(f1_flip, f2_flip), distance) if not np.all(f1_flip == f2_flip): assert_true(np.allclose(metric.dist(f1, f2_flip), distance)) assert_true(np.allclose(metric.dist(f1_flip, f2), distance)) def test_metric_cosine(): feature = dipymetric.VectorOfEndpointsFeature() class CosineMetric(dipymetric.Metric): def __init__(self, feature): super(CosineMetric, self).__init__(feature=feature) def are_compatible(self, shape1, shape2): # Cosine metric works on vectors. return shape1 == shape2 and shape1[0] == 1 def dist(self, v1, v2): # Check if we have null vectors if norm(v1) == 0: return 0. if norm(v2) == 0 else 1. v1_normed = v1.astype(np.float64) / norm(v1.astype(np.float64)) v2_normed = v2.astype(np.float64) / norm(v2.astype(np.float64)) cos_theta = np.dot(v1_normed, v2_normed.T) # Make sure it's in [-1, 1], i.e. within domain of arccosine cos_theta = np.minimum(cos_theta, 1.) cos_theta = np.maximum(cos_theta, -1.) return np.arccos(cos_theta) / np.pi # Normalized cosine distance for metric in [CosineMetric(feature), dipymetric.CosineMetric(feature)]: # Test special cases of the cosine distance. v0 = np.array([[0, 0, 0]], dtype=np.float32) v1 = np.array([[1, 2, 3]], dtype=np.float32) v2 = np.array([[1, -1./2, 0]], dtype=np.float32) v3 = np.array([[-1, -2, -3]], dtype=np.float32) assert_equal(metric.dist(v0, v0), 0.) # dot-dot assert_equal(metric.dist(v0, v1), 1.) # dot-line assert_equal(metric.dist(v1, v1), 0.) # collinear assert_equal(metric.dist(v1, v2), 0.5) # orthogonal assert_equal(metric.dist(v1, v3), 1.) # opposite for s1, s2 in itertools.product(*[streamlines]*2): # All possible pairs # Extract features since metric doesn't work directly on streamlines f1 = metric.feature.extract(s1) f2 = metric.feature.extract(s2) # Test method are_compatible are_vectors = f1.shape[0] == 1 and f2.shape[0] == 1 same_dimension = f1.shape[1] == f2.shape[1] assert_equal(metric.are_compatible(f1.shape, f2.shape), are_vectors and same_dimension) # Test method dist if features are compatible if metric.are_compatible(f1.shape, f2.shape): distance = metric.dist(f1, f2) if np.all(f1 == f2): assert_almost_equal(distance, 0.) assert_almost_equal(distance, dipymetric.dist(metric, s1, s2)) assert_true(distance >= 0.) assert_true(distance <= 1.) # This metric type is not order invariant assert_false(metric.is_order_invariant) for s1, s2 in itertools.product(*[streamlines]*2): # All possible pairs f1 = metric.feature.extract(s1) f2 = metric.feature.extract(s2) if not metric.are_compatible(f1.shape, f2.shape): continue f1_flip = metric.feature.extract(s1[::-1]) f2_flip = metric.feature.extract(s2[::-1]) distance = metric.dist(f1, f2) assert_almost_equal(metric.dist(f1_flip, f2_flip), distance) if not np.all(f1_flip == f2_flip): assert_false(metric.dist(f1, f2_flip) == distance) assert_false(metric.dist(f1_flip, f2) == distance) def test_subclassing_metric(): class EmptyMetric(dipymetric.Metric): pass metric = EmptyMetric() assert_raises(NotImplementedError, metric.are_compatible, None, None) assert_raises(NotImplementedError, metric.dist, None, None) def test_distance_matrix(): metric = dipymetric.SumPointwiseEuclideanMetric() for dtype in [np.int32, np.int64, np.float32, np.float64]: # Compute distances of all tuples spawn by the Cartesian product # of `data` with itself. data = (np.random.rand(4, 10, 3)*10).astype(dtype) D = dipymetric.distance_matrix(metric, data) assert_equal(D.shape, (len(data), len(data))) assert_array_equal(np.diag(D), np.zeros(len(data))) if metric.is_order_invariant: # Distance matrix should be symmetric assert_array_equal(D, D.T) for i in range(len(data)): for j in range(len(data)): assert_equal(D[i, j], dipymetric.dist(metric, data[i], data[j])) # Compute distances of all tuples spawn by the Cartesian product # of `data` with `data2`. data2 = (np.random.rand(3, 10, 3)*10).astype(dtype) D = dipymetric.distance_matrix(metric, data, data2) assert_equal(D.shape, (len(data), len(data2))) for i in range(len(data)): for j in range(len(data2)): assert_equal(D[i, j], dipymetric.dist(metric, data[i], data2[j])) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/segment/tests/test_qb.py000066400000000000000000000011401263041327500203210ustar00rootroot00000000000000import numpy as np import nibabel as nib from nose.tools import assert_true, assert_false, assert_equal, assert_almost_equal, assert_raises from numpy.testing import assert_array_equal, assert_array_almost_equal from dipy.data import get_data from dipy.segment.quickbundles import QuickBundles def test_qbundles(): streams,hdr = nib.trackvis.read(get_data('fornix')) T=[s[0] for s in streams] Trk=np.array(T, dtype=np.object) qb=QuickBundles(T,10.,12) Tqb=qb.virtuals() #Tqbe,Tqbei=qb.exemplars(T) Tqbe,Tqbei=qb.exemplars() assert_equal(4,qb.total_clusters) dipy-0.10.1/dipy/segment/tests/test_quickbundles.py000066400000000000000000000150501263041327500224150ustar00rootroot00000000000000import numpy as np import itertools from nose.tools import assert_equal, assert_raises from numpy.testing import assert_array_equal, run_module_suite from dipy.testing.memory import get_type_refcount from dipy.segment.clustering import QuickBundles import dipy.segment.metric as dipymetric from dipy.segment.clustering_algorithms import quickbundles import dipy.tracking.streamline as streamline_utils dtype = "float32" threshold = 7 data = [np.arange(3 * 5, dtype=dtype).reshape((-1, 3)) + 2 * threshold, np.arange(3 * 10, dtype=dtype).reshape((-1, 3)) + 0 * threshold, np.arange(3 * 15, dtype=dtype).reshape((-1, 3)) + 8 * threshold, np.arange(3 * 17, dtype=dtype).reshape((-1, 3)) + 2 * threshold, np.arange(3 * 20, dtype=dtype).reshape((-1, 3)) + 8 * threshold] clusters_truth = [[0, 1], [2, 4], [3]] def test_quickbundles_empty_data(): threshold = 10 metric = dipymetric.SumPointwiseEuclideanMetric() clusters = quickbundles([], metric, threshold) assert_equal(len(clusters), 0) assert_equal(len(clusters.centroids), 0) clusters = quickbundles([], metric, threshold, ordering=[]) assert_equal(len(clusters), 0) assert_equal(len(clusters.centroids), 0) def test_quickbundles_wrong_metric(): assert_raises(ValueError, QuickBundles, threshold=10., metric="WrongMetric") def test_quickbundles_shape_uncompatibility(): # QuickBundles' old default metric (AveragePointwiseEuclideanMetric, aka MDF) # requires that all streamlines have the same number of points. metric = dipymetric.AveragePointwiseEuclideanMetric() qb = QuickBundles(threshold=20., metric=metric) assert_raises(ValueError, qb.cluster, data) # QuickBundles' new default metric (AveragePointwiseEuclideanMetric, aka MDF # combined with ResampleFeature) will automatically resample streamlines so # they all have 18 points. qb = QuickBundles(threshold=20.) clusters1 = qb.cluster(data) feature = dipymetric.ResampleFeature(nb_points=18) metric = dipymetric.AveragePointwiseEuclideanMetric(feature) qb = QuickBundles(threshold=20., metric=metric) clusters2 = qb.cluster(data) assert_array_equal(list(itertools.chain(*clusters1)), list(itertools.chain(*clusters2))) def test_quickbundles_2D(): # Test quickbundles clustering using 2D points and the Eulidean metric. rng = np.random.RandomState(42) data = [] data += [rng.randn(1, 2) + np.array([0, 0]) for i in range(1)] data += [rng.randn(1, 2) + np.array([10, 10]) for i in range(2)] data += [rng.randn(1, 2) + np.array([-10, 10]) for i in range(3)] data += [rng.randn(1, 2) + np.array([10, -10]) for i in range(4)] data += [rng.randn(1, 2) + np.array([-10, -10]) for i in range(5)] data = np.array(data, dtype=dtype) clusters_truth = [[0], [1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11, 12, 13, 14]] # # Uncomment the following to visualize this test # import pylab as plt # plt.plot(*zip(*data[0:1, 0]), linestyle='None', marker='s') # plt.plot(*zip(*data[1:3, 0]), linestyle='None', marker='o') # plt.plot(*zip(*data[3:6, 0]), linestyle='None', marker='+') # plt.plot(*zip(*data[6:10, 0]), linestyle='None', marker='.') # plt.plot(*zip(*data[10:, 0]), linestyle='None', marker='*') # plt.show() # Theorically using a threshold above the following value will not # produce expected results. threshold = np.sqrt(2*(10**2))-np.sqrt(2) metric = dipymetric.SumPointwiseEuclideanMetric() ordering = np.arange(len(data)) for i in range(100): rng.shuffle(ordering) clusters = quickbundles(data, metric, threshold, ordering=ordering) # Check if clusters are the same as 'clusters_truth' for cluster in clusters: # Find the corresponding cluster in 'clusters_truth' for cluster_truth in clusters_truth: if cluster_truth[0] in cluster.indices: assert_equal(sorted(cluster.indices), sorted(cluster_truth)) # Cluster each cluster again using a small threshold for cluster in clusters: subclusters = quickbundles(data, metric, threshold=0, ordering=cluster.indices) assert_equal(len(subclusters), len(cluster)) assert_equal(sorted(itertools.chain(*subclusters)), sorted(cluster.indices)) # A very large threshold should produce only 1 cluster clusters = quickbundles(data, metric, threshold=np.inf) assert_equal(len(clusters), 1) assert_equal(len(clusters[0]), len(data)) assert_array_equal(clusters[0].indices, range(len(data))) # A very small threshold should produce only N clusters where N=len(data) clusters = quickbundles(data, metric, threshold=0) assert_equal(len(clusters), len(data)) assert_array_equal(list(map(len, clusters)), np.ones(len(data))) assert_array_equal([idx for cluster in clusters for idx in cluster.indices], range(len(data))) def test_quickbundles_streamlines(): rdata = streamline_utils.set_number_of_points(data, 10) qb = QuickBundles(threshold=2*threshold) clusters = qb.cluster(rdata) # By default `refdata` refers to data being clustered. assert_equal(clusters.refdata, rdata) # Set `refdata` to return indices instead of actual data points. clusters.refdata = None assert_array_equal(list(itertools.chain(*clusters)), list(itertools.chain(*clusters_truth))) # Cluster read-only data for datum in rdata: datum.setflags(write=False) clusters = qb.cluster(rdata) # Cluster data with different dtype (should be converted into float32) for datatype in [np.float64, np.int32, np.int64]: newdata = [datum.astype(datatype) for datum in rdata] clusters = qb.cluster(newdata) assert_equal(clusters.centroids[0].dtype, np.float32) def test_quickbundles_with_not_order_invariant_metric(): metric = dipymetric.AveragePointwiseEuclideanMetric() qb = QuickBundles(threshold=np.inf, metric=metric) streamline = np.arange(10*3, dtype=dtype).reshape((-1, 3)) streamlines = [streamline, streamline[::-1]] clusters = qb.cluster(streamlines) assert_equal(len(clusters), 1) assert_array_equal(clusters[0].centroid, streamline) def test_quickbundles_memory_leaks(): qb = QuickBundles(threshold=2*threshold) type_name_pattern = "memoryview" initial_types_refcount = get_type_refcount(type_name_pattern) qb.cluster(data) # At this point, all memoryviews created during clustering should be freed. assert_equal(get_type_refcount(type_name_pattern), initial_types_refcount) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/segment/threshold.py000066400000000000000000000022101263041327500175110ustar00rootroot00000000000000import numpy as np def otsu(image, nbins=256): """ Return threshold value based on Otsu's method. Copied from scikit-image to remove dependency. Parameters ---------- image : array Input image. nbins : int Number of bins used to calculate histogram. This value is ignored for integer arrays. Returns ------- threshold : float Threshold value. """ hist, bin_centers = np.histogram(image, nbins) hist = hist.astype(np.float) # class probabilities for all possible thresholds weight1 = np.cumsum(hist) weight2 = np.cumsum(hist[::-1])[::-1] # class means for all possible thresholds mean1 = np.cumsum(hist * bin_centers[1:]) / weight1 mean2 = (np.cumsum((hist * bin_centers[1:])[::-1]) / weight2[::-1])[::-1] # Clip ends to align class 1 and class 2 variables: # The last value of `weight1`/`mean1` should pair with zero values in # `weight2`/`mean2`, which do not exist. variance12 = weight1[:-1] * weight2[1:] * (mean1[:-1] - mean2[1:])**2 idx = np.argmax(variance12) threshold = bin_centers[:-1][idx] return threshold dipy-0.10.1/dipy/sims/000077500000000000000000000000001263041327500144615ustar00rootroot00000000000000dipy-0.10.1/dipy/sims/__init__.py000066400000000000000000000000261263041327500165700ustar00rootroot00000000000000#init for simulations dipy-0.10.1/dipy/sims/phantom.py000066400000000000000000000155271263041327500165130ustar00rootroot00000000000000import numpy as np import scipy.stats as stats from dipy.sims.voxel import SingleTensor, diffusion_evals import dipy.sims.voxel as vox from dipy.core.geometry import vec2vec_rotmat from dipy.data import get_data from dipy.core.gradients import gradient_table def add_noise(vol, snr=1.0, S0=None, noise_type='rician'): """ Add noise of specified distribution to a 4D array. Parameters ----------- vol : array, shape (X,Y,Z,W) Diffusion measurements in `W` directions at each ``(X, Y, Z)`` voxel position. snr : float, optional The desired signal-to-noise ratio. (See notes below.) S0 : float, optional Reference signal for specifying `snr` (defaults to 1). noise_type : string, optional The distribution of noise added. Can be either 'gaussian' for Gaussian distributed noise, 'rician' for Rice-distributed noise (default) or 'rayleigh' for a Rayleigh distribution. Returns -------- vol : array, same shape as vol Volume with added noise. Notes ----- SNR is defined here, following [1]_, as ``S0 / sigma``, where ``sigma`` is the standard deviation of the two Gaussian distributions forming the real and imaginary components of the Rician noise distribution (see [2]_). References ---------- .. [1] Descoteaux, Angelino, Fitzgibbons and Deriche (2007) Regularized, fast and robust q-ball imaging. MRM, 58: 497-510 .. [2] Gudbjartson and Patz (2008). The Rician distribution of noisy MRI data. MRM 34: 910-914. Examples -------- >>> signal = np.arange(800).reshape(2, 2, 2, 100) >>> signal_w_noise = add_noise(signal, snr=10, noise_type='rician') """ orig_shape = vol.shape vol_flat = np.reshape(vol.copy(), (-1, vol.shape[-1])) if S0 is None: S0 = np.max(vol) for vox_idx, signal in enumerate(vol_flat): vol_flat[vox_idx] = vox.add_noise(signal, snr=snr, S0=S0, noise_type=noise_type) return np.reshape(vol_flat, orig_shape) def diff2eigenvectors(dx,dy,dz): """ numerical derivatives 2 eigenvectors """ basis = np.eye(3) u = np.array([dx, dy, dz]) u = u/np.linalg.norm(u) R = vec2vec_rotmat(basis[:, 0], u) eig0 = u eig1 = np.dot(R, basis[:, 1]) eig2 = np.dot(R, basis[:, 2]) eigs = np.zeros((3, 3)) eigs[:, 0] = eig0 eigs[:, 1] = eig1 eigs[:, 2] = eig2 return eigs, R def orbital_phantom(gtab=None, evals=diffusion_evals, func=None, t=np.linspace(0, 2 * np.pi, 1000), datashape=(64, 64, 64, 65), origin=(32, 32, 32), scale=(25, 25, 25), angles=np.linspace(0, 2 * np.pi, 32), radii=np.linspace(0.2, 2, 6), S0=100., snr=None): """Create a phantom based on a 3-D orbit ``f(t) -> (x,y,z)``. Parameters ----------- gtab : GradientTable Gradient table of measurement directions. evals : array, shape (3,) Tensor eigenvalues. func : user defined function f(t)->(x,y,z) It could be desirable for ``-1=>> def f(t): ... x = np.sin(t) ... y = np.cos(t) ... z = np.linspace(-1, 1, len(x)) ... return x, y, z >>> data = orbital_phantom(func=f) """ if gtab is None: fimg, fbvals, fbvecs = get_data('small_64D') gtab = gradient_table(fbvals, fbvecs) if func is None: x = np.sin(t) y = np.cos(t) z = np.zeros(t.shape) else: x, y, z = func(t) dx = np.diff(x) dy = np.diff(y) dz = np.diff(z) x = scale[0] * x + origin[0] y = scale[1] * y + origin[1] z = scale[2] * z + origin[2] bx = np.zeros(len(angles)) by = np.sin(angles) bz = np.cos(angles) # The entire volume is considered to be inside the brain. # Voxels without a fiber crossing through them are taken # to be isotropic with signal = S0. vol = np.zeros(datashape) + S0 for i in range(len(dx)): evecs, R = diff2eigenvectors(dx[i], dy[i], dz[i]) S = SingleTensor(gtab, S0, evals, evecs, snr=None) vol[int(x[i]), int(y[i]), int(z[i]), :] += S for r in radii: for j in range(len(angles)): rb = np.dot(R, np.array([bx[j], by[j], bz[j]])) ix = int(x[i] + r * rb[0]) iy = int(y[i] + r * rb[1]) iz = int(z[i] + r * rb[2]) vol[ix, iy, iz] = vol[ix, iy, iz] + S vol = vol / np.max(vol, axis=-1)[..., np.newaxis] vol *= S0 if snr is not None: vol = add_noise(vol, snr, S0=S0, noise_type='rician') return vol if __name__ == "__main__": ## TODO: this can become a nice tutorial for generating phantoms def f(t): x=np.sin(t) y=np.cos(t) #z=np.zeros(t.shape) z=np.linspace(-1,1,len(x)) return x,y,z #helix vol=orbital_phantom(func=f) def f2(t): x=np.linspace(-1,1,len(t)) y=np.linspace(-1,1,len(t)) z=np.zeros(x.shape) return x,y,z #first direction vol2=orbital_phantom(func=f2) def f3(t): x=np.linspace(-1,1,len(t)) y=-np.linspace(-1,1,len(t)) z=np.zeros(x.shape) return x,y,z #second direction vol3=orbital_phantom(func=f3) #double crossing vol23=vol2+vol3 #""" def f4(t): x=np.zeros(t.shape) y=np.zeros(t.shape) z=np.linspace(-1,1,len(t)) return x,y,z #triple crossing vol4=orbital_phantom(func=f4) vol234=vol23+vol4 voln=add_rician_noise(vol234) #""" #r=fvtk.ren() #fvtk.add(r,fvtk.volume(vol234[...,0])) #fvtk.show(r) #vol234n=add_rician_noise(vol234,20) dipy-0.10.1/dipy/sims/tests/000077500000000000000000000000001263041327500156235ustar00rootroot00000000000000dipy-0.10.1/dipy/sims/tests/__init__.py000066400000000000000000000001201263041327500177250ustar00rootroot00000000000000# Test callable from numpy.testing import Tester test = Tester().test del Testerdipy-0.10.1/dipy/sims/tests/test_phantom.py000066400000000000000000000046601263041327500207100ustar00rootroot00000000000000from __future__ import division import numpy as np import nose import nibabel as nib import numpy.testing.decorators as dec from numpy.testing import (assert_, assert_equal, assert_array_equal, assert_array_almost_equal, assert_almost_equal, run_module_suite) from dipy.core.geometry import vec2vec_rotmat from dipy.data import get_data from dipy.reconst.dti import TensorModel from dipy.sims.phantom import orbital_phantom, add_noise from dipy.sims.voxel import single_tensor from dipy.core.gradients import gradient_table fimg,fbvals,fbvecs=get_data('small_64D') bvals=np.load(fbvals) bvecs=np.load(fbvecs) bvecs[np.isnan(bvecs)]=0 gtab = gradient_table(bvals, bvecs) def f(t): """ Helper function used to define a mapping time => xyz """ x = np.linspace(-1,1,len(t)) y = np.linspace(-1,1,len(t)) z = np.linspace(-1,1,len(t)) return x,y,z def test_phantom(): N = 50 vol = orbital_phantom(gtab, func=f, t=np.linspace(0, 2 * np.pi, N), datashape=(10, 10, 10, len(bvals)), origin=(5, 5, 5), scale=(3, 3, 3), angles=np.linspace(0, 2 * np.pi, 16), radii=np.linspace(0.2, 2, 6), S0=100) m = TensorModel(gtab) t = m.fit(vol) FA = t.fa # print vol FA[np.isnan(FA)] = 0 # 686 -> expected FA given diffusivities of [1500, 400, 400] l1, l2, l3 = 1500e-6, 400e-6, 400e-6 expected_fa = (np.sqrt(0.5) * np.sqrt((l1 - l2)**2 + (l2-l3)**2 + (l3-l1)**2 )/np.sqrt(l1**2 + l2**2 + l3**2)) assert_array_almost_equal(FA.max(), expected_fa, decimal=2) def test_add_noise(): np.random.seed(1980) N = 50 S0 = 100 options = dict(func=f, t=np.linspace(0, 2 * np.pi, N), datashape=(10, 10, 10, len(bvals)), origin=(5, 5, 5), scale=(3, 3, 3), angles=np.linspace(0, 2 * np.pi, 16), radii=np.linspace(0.2, 2, 6), S0=S0) vol = orbital_phantom(gtab, **options) for snr in [10, 20, 30, 50]: vol_noise = orbital_phantom(gtab, snr=snr, **options) sigma = S0 / snr assert_(np.abs(np.var(vol_noise - vol) - sigma ** 2) < 1) if __name__ == "__main__": run_module_suite() dipy-0.10.1/dipy/sims/tests/test_voxel.py000066400000000000000000000312201263041327500203670ustar00rootroot00000000000000import numpy as np from nose.tools import (assert_true, assert_false, assert_equal, assert_almost_equal) from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_) from dipy.sims.voxel import (_check_directions, SingleTensor, MultiTensor, multi_tensor_odf, all_tensor_evecs, add_noise, single_tensor, sticks_and_ball, multi_tensor_dki, kurtosis_element, DKI_signal) from dipy.core.geometry import (vec2vec_rotmat, sphere2cart) from dipy.data import get_data, get_sphere from dipy.core.gradients import gradient_table from dipy.io.gradients import read_bvals_bvecs fimg, fbvals, fbvecs = get_data('small_64D') bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) gtab = gradient_table(bvals, bvecs) # 2 shells for techniques that requires multishell data bvals_2s = np.concatenate((bvals, bvals * 2), axis=0) bvecs_2s = np.concatenate((bvecs, bvecs), axis=0) gtab_2s = gradient_table(bvals_2s, bvecs_2s) def diff2eigenvectors(dx, dy, dz): """ numerical derivatives 2 eigenvectors """ u = np.array([dx, dy, dz]) u = u / np.linalg.norm(u) R = vec2vec_rotmat(basis[:, 0], u) eig0 = u eig1 = np.dot(R, basis[:, 1]) eig2 = np.dot(R, basis[:, 2]) eigs = np.zeros((3, 3)) eigs[:, 0] = eig0 eigs[:, 1] = eig1 eigs[:, 2] = eig2 return eigs, R def test_check_directions(): # Testing spherical angles for two principal coordinate axis angles = [(0, 0)] # axis z sticks = _check_directions(angles) assert_array_almost_equal(sticks, [[0, 0, 1]]) angles = [(0, 90)] # axis z again (phi can be anything it theta is zero) sticks = _check_directions(angles) assert_array_almost_equal(sticks, [[0, 0, 1]]) angles = [(90, 0)] # axis x sticks = _check_directions(angles) assert_array_almost_equal(sticks, [[1, 0, 0]]) # Testing if directions are already given in cartesian coordinates angles = [(0, 0, 1)] sticks = _check_directions(angles) assert_array_almost_equal(sticks, [[0, 0, 1]]) # Testing more than one direction simultaneously angles = np.array([[90, 0], [30, 0]]) sticks = _check_directions(angles) ref_vec = [np.sin(np.pi*30/180), 0, np.cos(np.pi*30/180)] assert_array_almost_equal(sticks, [[1, 0, 0], ref_vec]) # Testing directions not aligned to planes x = 0, y = 0, or z = 0 the1 = 0 phi1 = 90 the2 = 30 phi2 = 45 angles = np.array([(the1, phi1), (the2, phi2)]) sticks = _check_directions(angles) ref_vec1 = (np.sin(np.pi*the1/180) * np.cos(np.pi*phi1/180), np.sin(np.pi*the1/180) * np.sin(np.pi*phi1/180), np.cos(np.pi*the1/180)) ref_vec2 = (np.sin(np.pi*the2/180) * np.cos(np.pi*phi2/180), np.sin(np.pi*the2/180) * np.sin(np.pi*phi2/180), np.cos(np.pi*the2/180)) assert_array_almost_equal(sticks, [ref_vec1, ref_vec2]) def test_sticks_and_ball(): d = 0.0015 S, sticks = sticks_and_ball(gtab, d=d, S0=1, angles=[(0, 0), ], fractions=[100], snr=None) assert_array_equal(sticks, [[0, 0, 1]]) S_st = SingleTensor(gtab, 1, evals=[d, 0, 0], evecs=[[0, 0, 0], [0, 0, 0], [1, 0, 0]]) assert_array_almost_equal(S, S_st) def test_single_tensor(): evals = np.array([1.4, .35, .35]) * 10 ** (-3) evecs = np.eye(3) S = SingleTensor(gtab, 100, evals, evecs, snr=None) assert_array_almost_equal(S[gtab.b0s_mask], 100) assert_(np.mean(S[~gtab.b0s_mask]) < 100) from dipy.reconst.dti import TensorModel m = TensorModel(gtab) t = m.fit(S) assert_array_almost_equal(t.fa, 0.707, decimal=3) def test_multi_tensor(): sphere = get_sphere('symmetric724') vertices = sphere.vertices mevals = np.array(([0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003])) e0 = np.array([np.sqrt(2) / 2., np.sqrt(2) / 2., 0]) e1 = np.array([0, np.sqrt(2) / 2., np.sqrt(2) / 2.]) mevecs = [all_tensor_evecs(e0), all_tensor_evecs(e1)] # odf = multi_tensor_odf(vertices, [0.5, 0.5], mevals, mevecs) # assert_(odf.shape == (len(vertices),)) # assert_(np.all(odf <= 1) & np.all(odf >= 0)) fimg, fbvals, fbvecs = get_data('small_101D') bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) gtab = gradient_table(bvals, bvecs) s1 = single_tensor(gtab, 100, mevals[0], mevecs[0], snr=None) s2 = single_tensor(gtab, 100, mevals[1], mevecs[1], snr=None) Ssingle = 0.5*s1 + 0.5*s2 S, sticks = MultiTensor(gtab, mevals, S0=100, angles=[(90, 45), (45, 90)], fractions=[50, 50], snr=None) assert_array_almost_equal(S, Ssingle) def test_snr(): np.random.seed(1978) s = single_tensor(gtab) # For reasonably large SNR, var(signal) ~= sigma**2, where sigma = 1/SNR for snr in [5, 10, 20]: sigma = 1.0 / snr for j in range(1000): s_noise = add_noise(s, snr, 1, noise_type='rician') assert_array_almost_equal(np.var(s_noise - s), sigma ** 2, decimal=2) def test_all_tensor_evecs(): e0 = np.array([1/np.sqrt(2), 1/np.sqrt(2), 0]) # Vectors are returned column-wise! desired = np.array([[1/np.sqrt(2), 1/np.sqrt(2), 0], [-1/np.sqrt(2), 1/np.sqrt(2), 0], [0, 0, 1]]).T assert_array_almost_equal(all_tensor_evecs(e0), desired) def test_kurtosis_elements(): """ Testing symmetry of the elements of the KT As an 4th order tensor, KT has 81 elements. However, due to diffusion symmetry the KT is fully characterized by 15 independent elements. This test checks for this property. """ # two fiber not aligned to planes x = 0, y = 0, or z = 0 mevals = np.array([[0.00099, 0, 0], [0.00226, 0.00087, 0.00087], [0.00099, 0, 0], [0.00226, 0.00087, 0.00087]]) angles = [(80, 10), (80, 10), (20, 30), (20, 30)] fie = 0.49 # intra axonal water fraction frac = [fie * 50, (1-fie) * 50, fie * 50, (1-fie) * 50] sticks = _check_directions(angles) mD = np.zeros((len(frac), 3, 3)) for i in range(len(frac)): R = all_tensor_evecs(sticks[i]) mD[i] = np.dot(np.dot(R, np.diag(mevals[i])), R.T) # compute global DT D = np.zeros((3, 3)) for i in range(len(frac)): D = D + frac[i]*mD[i] # compute voxel's MD MD = (D[0][0] + D[1][1] + D[2][2]) / 3 # Reference dictionary with the 15 independent elements. # Note: The multiplication of the indexes (i+1) * (j+1) * (k+1) * (l+1) # for of an elements is only equal to this multiplication for another # element if an only if the element corresponds to an symmetry element. # Thus indexes multiplication is used as key of the reference dictionary kt_ref = {1: kurtosis_element(mD, frac, 0, 0, 0, 0), 16: kurtosis_element(mD, frac, 1, 1, 1, 1), 81: kurtosis_element(mD, frac, 2, 2, 2, 2), 2: kurtosis_element(mD, frac, 0, 0, 0, 1), 3: kurtosis_element(mD, frac, 0, 0, 0, 2), 8: kurtosis_element(mD, frac, 0, 1, 1, 1), 24: kurtosis_element(mD, frac, 1, 1, 1, 2), 27: kurtosis_element(mD, frac, 0, 2, 2, 2), 54: kurtosis_element(mD, frac, 1, 2, 2, 2), 4: kurtosis_element(mD, frac, 0, 0, 1, 1), 9: kurtosis_element(mD, frac, 0, 0, 2, 2), 36: kurtosis_element(mD, frac, 1, 1, 2, 2), 6: kurtosis_element(mD, frac, 0, 0, 1, 2), 12: kurtosis_element(mD, frac, 0, 1, 1, 2), 18: kurtosis_element(mD, frac, 0, 1, 2, 2)} # Testing all 81 possible elements xyz = [0, 1, 2] for i in xyz: for j in xyz: for k in xyz: for l in xyz: key = (i+1) * (j+1) * (k+1) * (l+1) assert_almost_equal(kurtosis_element(mD, frac, i, k, j, l), kt_ref[key]) # Testing optional funtion inputs assert_almost_equal(kurtosis_element(mD, frac, i, k, j, l), kurtosis_element(mD, frac, i, k, j, l, D, MD)) def test_DKI_simulations_aligned_fibers(): """ Testing DKI simulations when aligning the same fiber to different axis. If biological parameters don't change, kt[0] of a fiber aligned to axis x has to be equal to kt[1] of a fiber aligned to the axis y and equal to kt[2] of a fiber aligned to axis z. The same is applicable for dt """ # Defining parameters based on Neto Henriques et al., 2015. NeuroImage 111 mevals = np.array([[0.00099, 0, 0], # Intra-cellular [0.00226, 0.00087, 0.00087]]) # Extra-cellular frac = [49, 51] # Compartment volume fraction # axis x angles = [(90, 0), (90, 0)] signal_fx, dt_fx, kt_fx = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac) # axis y angles = [(90, 90), (90, 90)] signal_fy, dt_fy, kt_fy = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac) # axis z angles = [(0, 0), (0, 0)] signal_fz, dt_fz, kt_fz = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac) assert_array_equal([kt_fx[0], kt_fx[1], kt_fx[2]], [kt_fy[1], kt_fy[0], kt_fy[2]]) assert_array_equal([kt_fx[0], kt_fx[1], kt_fx[2]], [kt_fz[2], kt_fz[0], kt_fz[1]]) assert_array_equal([dt_fx[0], dt_fx[2], dt_fx[5]], [dt_fy[2], dt_fy[0], dt_fy[5]]) assert_array_equal([dt_fx[0], dt_fx[2], dt_fx[5]], [dt_fz[5], dt_fz[0], dt_fz[2]]) # testing S signal along axis x, y and z bvals = np.array([0, 0, 0, 1000, 1000, 1000, 2000, 2000, 2000]) bvecs = np.asarray([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 0, 1]]) gtab_axis = gradient_table(bvals, bvecs) # axis x S_fx = DKI_signal(gtab_axis, dt_fx, kt_fx, S0=100) assert_array_almost_equal(S_fx[0:3], [100, 100, 100]) # test S f0r b=0 # axis y S_fy = DKI_signal(gtab_axis, dt_fy, kt_fy, S0=100) assert_array_almost_equal(S_fy[0:3], [100, 100, 100]) # test S f0r b=0 # axis z S_fz = DKI_signal(gtab_axis, dt_fz, kt_fz, S0=100) assert_array_almost_equal(S_fz[0:3], [100, 100, 100]) # test S f0r b=0 # test S for b = 1000 assert_array_almost_equal([S_fx[3], S_fx[4], S_fx[5]], [S_fy[4], S_fy[3], S_fy[5]]) assert_array_almost_equal([S_fx[3], S_fx[4], S_fx[5]], [S_fz[5], S_fz[3], S_fz[4]]) # test S for b = 2000 assert_array_almost_equal([S_fx[6], S_fx[7], S_fx[8]], [S_fy[7], S_fy[6], S_fy[8]]) assert_array_almost_equal([S_fx[6], S_fx[7], S_fx[8]], [S_fz[8], S_fz[6], S_fz[7]]) def test_DKI_crossing_fibers_simulations(): """ Testing DKI simulations of a crossing fiber """ # two fiber not aligned to planes x = 0, y = 0, or z = 0 mevals = np.array([[0.00099, 0, 0], [0.00226, 0.00087, 0.00087], [0.00099, 0, 0], [0.00226, 0.00087, 0.00087]]) angles = [(80, 10), (80, 10), (20, 30), (20, 30)] fie = 0.49 frac = [fie*50, (1 - fie)*50, fie*50, (1 - fie)*50] signal, dt, kt = multi_tensor_dki(gtab_2s, mevals, angles=angles, fractions=frac, snr=None) # in this simulations dt and kt cannot have zero elements for i in range(len(dt)): assert dt[i] != 0 for i in range(len(kt)): assert kt[i] != 0 # test S, dt and kt relative to the expected values computed from another # DKI package - UDKI (Neto Henriques et al., 2015) dt_ref = [1.0576161e-3, 0.1292542e-3, 0.4786179e-3, 0.2667081e-3, 0.1136643e-3, 0.9888660e-3] kt_ref = [2.3529944, 0.8226448, 2.3011221, 0.2017312, -0.0437535, 0.0404011, 0.0355281, 0.2449859, 0.2157668, 0.3495910, 0.0413366, 0.3461519, -0.0537046, 0.0133414, -0.017441] assert_array_almost_equal(dt, dt_ref) assert_array_almost_equal(kt, kt_ref) assert_array_almost_equal(signal, DKI_signal(gtab_2s, dt_ref, kt_ref, S0=100, snr=None), decimal=5) if __name__ == "__main__": test_multi_tensor() dipy-0.10.1/dipy/sims/voxel.py000066400000000000000000000641461263041327500162030ustar00rootroot00000000000000from __future__ import division import numpy as np from numpy import dot from dipy.core.geometry import sphere2cart from dipy.core.geometry import vec2vec_rotmat from dipy.reconst.utils import dki_design_matrix # Diffusion coefficients for white matter tracts, in mm^2/s # # Based roughly on values from: # # Pierpaoli, Basser, "Towards a Quantitative Assessment of Diffusion # Anisotropy", Magnetic Resonance in Medicine, 1996; 36(6):893-906. # diffusion_evals = np.array([1500e-6, 400e-6, 400e-6]) def _check_directions(angles): """ Helper function to check if direction ground truth have the right format and are in cartesian coordinates Parameters ----------- angles : array (K,2) or (K, 3) List of K polar angles (in degrees) for the sticks or array of K sticks as unit vectors. Returns -------- sticks : (K,3) Sticks in cartesian coordinates. """ angles = np.array(angles) if angles.shape[-1] == 3: sticks = angles else: sticks = [sphere2cart(1, np.deg2rad(pair[0]), np.deg2rad(pair[1])) for pair in angles] sticks = np.array(sticks) return sticks def _add_gaussian(sig, noise1, noise2): """ Helper function to add_noise This one simply adds one of the Gaussians to the sig and ignores the other one. """ return sig + noise1 def _add_rician(sig, noise1, noise2): """ Helper function to add_noise. This does the same as abs(sig + complex(noise1, noise2)) """ return np.sqrt((sig + noise1) ** 2 + noise2 ** 2) def _add_rayleigh(sig, noise1, noise2): """ Helper function to add_noise The Rayleigh distribution is $\sqrt\{Gauss_1^2 + Gauss_2^2}$. """ return sig + np.sqrt(noise1 ** 2 + noise2 ** 2) def add_noise(signal, snr, S0, noise_type='rician'): r""" Add noise of specified distribution to the signal from a single voxel. Parameters ----------- signal : 1-d ndarray The signal in the voxel. snr : float The desired signal-to-noise ratio. (See notes below.) If `snr` is None, return the signal as-is. S0 : float Reference signal for specifying `snr`. noise_type : string, optional The distribution of noise added. Can be either 'gaussian' for Gaussian distributed noise, 'rician' for Rice-distributed noise (default) or 'rayleigh' for a Rayleigh distribution. Returns -------- signal : array, same shape as the input Signal with added noise. Notes ----- SNR is defined here, following [1]_, as ``S0 / sigma``, where ``sigma`` is the standard deviation of the two Gaussian distributions forming the real and imaginary components of the Rician noise distribution (see [2]_). References ---------- .. [1] Descoteaux, Angelino, Fitzgibbons and Deriche (2007) Regularized, fast and robust q-ball imaging. MRM, 58: 497-510 .. [2] Gudbjartson and Patz (2008). The Rician distribution of noisy MRI data. MRM 34: 910-914. Examples -------- >>> signal = np.arange(800).reshape(2, 2, 2, 100) >>> signal_w_noise = add_noise(signal, 10., 100., noise_type='rician') """ if snr is None: return signal sigma = S0 / snr noise_adder = {'gaussian': _add_gaussian, 'rician': _add_rician, 'rayleigh': _add_rayleigh} noise1 = np.random.normal(0, sigma, size=signal.shape) if noise_type == 'gaussian': noise2 = None else: noise2 = np.random.normal(0, sigma, size=signal.shape) return noise_adder[noise_type](signal, noise1, noise2) def sticks_and_ball(gtab, d=0.0015, S0=100, angles=[(0, 0), (90, 0)], fractions=[35, 35], snr=20): """ Simulate the signal for a Sticks & Ball model. Parameters ----------- gtab : GradientTable Signal measurement directions. d : float Diffusivity value. S0 : float Unweighted signal value. angles : array (K,2) or (K, 3) List of K polar angles (in degrees) for the sticks or array of K sticks as unit vectors. fractions : float Percentage of each stick. Remainder to 100 specifies isotropic component. snr : float Signal to noise ratio, assuming Rician noise. If set to None, no noise is added. Returns -------- S : (N,) ndarray Simulated signal. sticks : (M,3) Sticks in cartesian coordinates. References ---------- .. [1] Behrens et al., "Probabilistic diffusion tractography with multiple fiber orientations: what can we gain?", Neuroimage, 2007. """ fractions = [f / 100. for f in fractions] f0 = 1 - np.sum(fractions) S = np.zeros(len(gtab.bvals)) sticks = _check_directions(angles) for (i, g) in enumerate(gtab.bvecs[1:]): S[i + 1] = f0*np.exp(-gtab.bvals[i + 1]*d) + \ np.sum([fractions[j]*np.exp(-gtab.bvals[i + 1]*d*np.dot(s, g)**2) for (j, s) in enumerate(sticks)]) S[i + 1] = S0 * S[i + 1] S[gtab.b0s_mask] = S0 S = add_noise(S, snr, S0) return S, sticks def single_tensor(gtab, S0=1, evals=None, evecs=None, snr=None): """ Simulated Q-space signal with a single tensor. Parameters ----------- gtab : GradientTable Measurement directions. S0 : double, Strength of signal in the presence of no diffusion gradient (also called the ``b=0`` value). evals : (3,) ndarray Eigenvalues of the diffusion tensor. By default, values typical for prolate white matter are used. evecs : (3, 3) ndarray Eigenvectors of the tensor. You can also think of this as a rotation matrix that transforms the direction of the tensor. The eigenvectors need to be column wise. snr : float Signal to noise ratio, assuming Rician noise. None implies no noise. Returns -------- S : (N,) ndarray Simulated signal: ``S(q, tau) = S_0 e^(-b g^T R D R.T g)``. References ---------- .. [1] M. Descoteaux, "High Angular Resolution Diffusion MRI: from Local Estimation to Segmentation and Tractography", PhD thesis, University of Nice-Sophia Antipolis, p. 42, 2008. .. [2] E. Stejskal and J. Tanner, "Spin diffusion measurements: spin echos in the presence of a time-dependent field gradient", Journal of Chemical Physics, nr. 42, pp. 288--292, 1965. """ if evals is None: evals = diffusion_evals if evecs is None: evecs = np.eye(3) out_shape = gtab.bvecs.shape[:gtab.bvecs.ndim - 1] gradients = gtab.bvecs.reshape(-1, 3) R = np.asarray(evecs) S = np.zeros(len(gradients)) D = dot(dot(R, np.diag(evals)), R.T) for (i, g) in enumerate(gradients): S[i] = S0 * np.exp(-gtab.bvals[i] * dot(dot(g.T, D), g)) S = add_noise(S, snr, S0) return S.reshape(out_shape) def multi_tensor(gtab, mevals, S0=100, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=20): r""" Simulate a Multi-Tensor signal. Parameters ----------- gtab : GradientTable mevals : array (K, 3) each tensor's eigenvalues in each row S0 : float Unweighted signal value (b0 signal). angles : array (K,2) or (K,3) List of K tensor directions in polar angles (in degrees) or unit vectors fractions : float Percentage of the contribution of each tensor. The sum of fractions should be equal to 100%. snr : float Signal to noise ratio, assuming Rician noise. If set to None, no noise is added. Returns -------- S : (N,) ndarray Simulated signal. sticks : (M,3) Sticks in cartesian coordinates. Examples -------- >>> import numpy as np >>> from dipy.sims.voxel import multi_tensor >>> from dipy.data import get_data >>> from dipy.core.gradients import gradient_table >>> from dipy.io.gradients import read_bvals_bvecs >>> fimg, fbvals, fbvecs = get_data('small_101D') >>> bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) >>> gtab = gradient_table(bvals, bvecs) >>> mevals=np.array(([0.0015, 0.0003, 0.0003],[0.0015, 0.0003, 0.0003])) >>> e0 = np.array([1, 0, 0.]) >>> e1 = np.array([0., 1, 0]) >>> S = multi_tensor(gtab, mevals) """ if np.round(np.sum(fractions), 2) != 100.0: raise ValueError('Fractions should sum to 100') fractions = [f / 100. for f in fractions] S = np.zeros(len(gtab.bvals)) sticks = _check_directions(angles) for i in range(len(fractions)): S = S + fractions[i] * single_tensor(gtab, S0=S0, evals=mevals[i], evecs=all_tensor_evecs( sticks[i]), snr=None) return add_noise(S, snr, S0), sticks def multi_tensor_dki(gtab, mevals, S0=100, angles=[(90., 0.), (90., 0.)], fractions=[50, 50], snr=20): r""" Simulate the diffusion-weight signal, diffusion and kurtosis tensors based on the DKI model Parameters ----------- gtab : GradientTable mevals : array (K, 3) eigenvalues of the diffusion tensor for each individual compartment S0 : float (optional) Unweighted signal value (b0 signal). angles : array (K,2) or (K,3) (optional) List of K tensor directions of the diffusion tensor of each compartment in polar angles (in degrees) or unit vectors fractions : float (K,) (optional) Percentage of the contribution of each tensor. The sum of fractions should be equal to 100%. snr : float (optional) Signal to noise ratio, assuming Rician noise. If set to None, no noise is added. Returns -------- S : (N,) ndarray Simulated signal based on the DKI model. dt : (6,) elements of the diffusion tensor. kt : (15,) elements of the kurtosis tensor. Notes ----- Simulations are based on multicompartmental models which assumes that tissue is well described by impermeable diffusion compartments characterized by their only diffusion tensor. Since simulations are based on the DKI model, coefficients larger than the fourth order of the signal's taylor expansion approximation are neglected. Examples -------- >>> import numpy as np >>> from dipy.sims.voxel import multi_tensor_dki >>> from dipy.data import get_data >>> from dipy.core.gradients import gradient_table >>> from dipy.io.gradients import read_bvals_bvecs >>> fimg, fbvals, fbvecs = get_data('small_64D') >>> bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) >>> bvals_2s = np.concatenate((bvals, bvals * 2), axis=0) >>> bvecs_2s = np.concatenate((bvecs, bvecs), axis=0) >>> gtab = gradient_table(bvals_2s, bvecs_2s) >>> mevals = np.array([[0.00099, 0, 0],[0.00226, 0.00087, 0.00087]]) >>> S, dt, kt = multi_tensor_dki(gtab, mevals) References ---------- .. [1] R. Neto Henriques et al., "Exploring the 3D geometry of the diffusion kurtosis tensor - Impact on the development of robust tractography procedures and novel biomarkers", NeuroImage (2015) 111, 85-99. """ if np.round(np.sum(fractions), 2) != 100.0: raise ValueError('Fractions should sum to 100') fractions = [f / 100. for f in fractions] S = np.zeros(len(gtab.bvals)) sticks = _check_directions(angles) # computing a 3D matrix containing the individual DT components D_comps = np.zeros((len(fractions), 3, 3)) for i in range(len(fractions)): R = all_tensor_evecs(sticks[i]) D_comps[i] = dot(dot(R, np.diag(mevals[i])), R.T) # compute voxel's DT DT = np.zeros((3, 3)) for i in range(len(fractions)): DT = DT + fractions[i]*D_comps[i] dt = np.array([DT[0][0], DT[0][1], DT[1][1], DT[0][2], DT[1][2], DT[2][2]]) # compute voxel's MD MD = (DT[0][0] + DT[1][1] + DT[2][2]) / 3 # compute voxel's KT kt = np.zeros((15)) kt[0] = kurtosis_element(D_comps, fractions, 0, 0, 0, 0, DT, MD) kt[1] = kurtosis_element(D_comps, fractions, 1, 1, 1, 1, DT, MD) kt[2] = kurtosis_element(D_comps, fractions, 2, 2, 2, 2, DT, MD) kt[3] = kurtosis_element(D_comps, fractions, 0, 0, 0, 1, DT, MD) kt[4] = kurtosis_element(D_comps, fractions, 0, 0, 0, 2, DT, MD) kt[5] = kurtosis_element(D_comps, fractions, 0, 1, 1, 1, DT, MD) kt[6] = kurtosis_element(D_comps, fractions, 1, 1, 1, 2, DT, MD) kt[7] = kurtosis_element(D_comps, fractions, 0, 2, 2, 2, DT, MD) kt[8] = kurtosis_element(D_comps, fractions, 1, 2, 2, 2, DT, MD) kt[9] = kurtosis_element(D_comps, fractions, 0, 0, 1, 1, DT, MD) kt[10] = kurtosis_element(D_comps, fractions, 0, 0, 2, 2, DT, MD) kt[11] = kurtosis_element(D_comps, fractions, 1, 1, 2, 2, DT, MD) kt[12] = kurtosis_element(D_comps, fractions, 0, 0, 1, 2, DT, MD) kt[13] = kurtosis_element(D_comps, fractions, 0, 1, 1, 2, DT, MD) kt[14] = kurtosis_element(D_comps, fractions, 0, 1, 2, 2, DT, MD) # compute S based on the DT and KT S = DKI_signal(gtab, dt, kt, S0, snr) return S, dt, kt def kurtosis_element(D_comps, frac, ind_i, ind_j, ind_k, ind_l, DT=None, MD=None): r""" Computes the diffusion kurtosis tensor element (with indexes i, j, k and l) based on the individual diffusion tensor components of a multicompartmental model. Parameters ----------- D_comps : (K,3,3) ndarray Diffusion tensors for all K individual compartment of the multicompartmental model. frac : float Percentage of the contribution of each tensor. The sum of fractions should be equal to 100%. ind_i : int Element's index i (0 for x, 1 for y, 2 for z) ind_j : int Element's index j (0 for x, 1 for y, 2 for z) ind_k : int Element's index k (0 for x, 1 for y, 2 for z) ind_l: int Elements index l (0 for x, 1 for y, 2 for z) DT : (3,3) ndarray (optional) Voxel's global diffusion tensor. MD : float (optional) Voxel's global mean diffusivity. Returns -------- wijkl : float kurtosis tensor element of index i, j, k, l Notes -------- wijkl is calculated using equation 8 given in [1]_ References ---------- .. [1] R. Neto Henriques et al., "Exploring the 3D geometry of the diffusion kurtosis tensor - Impact on the development of robust tractography procedures and novel biomarkers", NeuroImage (2015) 111, 85-99. """ if DT is None: DT = np.zeros((3, 3)) for i in range(len(frac)): DT = DT + frac[i]*D_comps[i] if MD is None: MD = (DT[0][0] + DT[1][1] + DT[2][2]) / 3 wijkl = 0 for f in range(len(frac)): wijkl = wijkl + frac[f] * ( D_comps[f][ind_i][ind_j]*D_comps[f][ind_k][ind_l] + D_comps[f][ind_i][ind_k]*D_comps[f][ind_j][ind_l] + D_comps[f][ind_i][ind_l]*D_comps[f][ind_j][ind_k]) wijkl = (wijkl - DT[ind_i][ind_j]*DT[ind_k][ind_l] - DT[ind_i][ind_k]*DT[ind_j][ind_l] - DT[ind_i][ind_l]*DT[ind_j][ind_k]) / (MD**2) return wijkl def DKI_signal(gtab, dt, kt, S0=150, snr=None): r""" Simulated signal based on the diffusion and diffusion kurtosis tensors of a single voxel. Simulations are preformed assuming the DKI model. Parameters ----------- gtab : GradientTable Measurement directions. dt : (6,) ndarray Elements of the diffusion tensor. kt : (15, ) ndarray Elements of the diffusion kurtosis tensor. S0 : float (optional) Strength of signal in the presence of no diffusion gradient. snr : float (optional) Signal to noise ratio, assuming Rician noise. None implies no noise. Returns -------- S : (N,) ndarray Simulated signal based on the DKI model: .. math:: S=S_{0}e^{-bD+\frac{1}{6}b^{2}D^{2}K} References ---------- .. [1] R. Neto Henriques et al., "Exploring the 3D geometry of the diffusion kurtosis tensor - Impact on the development of robust tractography procedures and novel biomarkers", NeuroImage (2015) 111, 85-99. """ dt = np.array(dt) kt = np.array(kt) A = dki_design_matrix(gtab) # define vector of DKI parameters MD = (dt[0] + dt[2] + dt[5]) / 3 X = np.concatenate((dt, kt*MD*MD, np.array([np.log(S0)])), axis=0) # Compute signals based on the DKI model S = np.exp(dot(A, X)) S = add_noise(S, snr, S0) return S def single_tensor_odf(r, evals=None, evecs=None): """ Simulated ODF with a single tensor. Parameters ---------- r : (N,3) or (M,N,3) ndarray Measurement positions in (x, y, z), either as a list or on a grid. evals : (3,) Eigenvalues of diffusion tensor. By default, use values typical for prolate white matter. evecs : (3, 3) ndarray Eigenvectors of the tensor, written column-wise. You can also think of these as the rotation matrix that determines the orientation of the diffusion tensor. Returns ------- ODF : (N,) ndarray The diffusion probability at ``r`` after time ``tau``. References ---------- .. [1] Aganj et al., "Reconstruction of the Orientation Distribution Function in Single- and Multiple-Shell q-Ball Imaging Within Constant Solid Angle", Magnetic Resonance in Medicine, nr. 64, pp. 554--566, 2010. """ if evals is None: evals = diffusion_evals if evecs is None: evecs = np.eye(3) out_shape = r.shape[:r.ndim - 1] R = np.asarray(evecs) D = dot(dot(R, np.diag(evals)), R.T) Di = np.linalg.inv(D) r = r.reshape(-1, 3) P = np.zeros(len(r)) for (i, u) in enumerate(r): P[i] = (dot(dot(u.T, Di), u)) ** (3 / 2) return (1 / (4 * np.pi * np.prod(evals) ** (1 / 2) * P)).reshape(out_shape) def all_tensor_evecs(e0): """Given the principle tensor axis, return the array of all eigenvectors column-wise (or, the rotation matrix that orientates the tensor). Parameters ---------- e0 : (3,) ndarray Principle tensor axis. Returns ------- evecs : (3,3) ndarray Tensor eigenvectors, arranged column-wise. """ axes = np.eye(3) mat = vec2vec_rotmat(axes[0], e0) e1 = np.dot(mat, axes[1]) e2 = np.dot(mat, axes[2]) # Return the eigenvectors column-wise: return np.array([e0, e1, e2]).T def multi_tensor_odf(odf_verts, mevals, angles, fractions): r'''Simulate a Multi-Tensor ODF. Parameters ---------- odf_verts : (N,3) ndarray Vertices of the reconstruction sphere. mevals : sequence of 1D arrays, Eigen-values for each tensor. angles : sequence of 2d tuples, Sequence of principal directions for each tensor in polar angles or cartesian unit coordinates. fractions : sequence of floats, Percentages of the fractions for each tensor. Returns ------- ODF : (N,) ndarray Orientation distribution function. Examples -------- Simulate a MultiTensor ODF with two peaks and calculate its exact ODF. >>> import numpy as np >>> from dipy.sims.voxel import multi_tensor_odf, all_tensor_evecs >>> from dipy.data import get_sphere >>> sphere = get_sphere('symmetric724') >>> vertices, faces = sphere.vertices, sphere.faces >>> mevals = np.array(([0.0015, 0.0003, 0.0003],[0.0015, 0.0003, 0.0003])) >>> angles = [(0, 0), (90, 0)] >>> odf = multi_tensor_odf(vertices, mevals, angles, [50, 50]) ''' mf = [f / 100. for f in fractions] sticks = _check_directions(angles) odf = np.zeros(len(odf_verts)) mevecs = [] for s in sticks: mevecs += [all_tensor_evecs(s)] for (j, f) in enumerate(mf): odf += f * single_tensor_odf(odf_verts, evals=mevals[j], evecs=mevecs[j]) return odf def single_tensor_rtop(evals=None, tau=1.0 / (4 * np.pi ** 2)): r'''Simulate a Multi-Tensor rtop. Parameters ---------- evals : 1D arrays, Eigen-values for the tensor. By default, values typical for prolate white matter are used. tau : float, diffusion time. By default the value that makes q=sqrt(b). Returns ------- rtop : float, Return to origin probability. References ---------- .. [1] Cheng J., "Estimation and Processing of Ensemble Average Propagator and Its Features in Diffusion MRI", PhD Thesis, 2012. ''' if evals is None: evals = diffusion_evals rtop = 1.0 / np.sqrt((4 * np.pi * tau) ** 3 * np.prod(evals)) return rtop def multi_tensor_rtop(mf, mevals=None, tau=1 / (4 * np.pi ** 2)): r'''Simulate a Multi-Tensor rtop. Parameters ---------- mf : sequence of floats, bounded [0,1] Percentages of the fractions for each tensor. mevals : sequence of 1D arrays, Eigen-values for each tensor. By default, values typical for prolate white matter are used. tau : float, diffusion time. By default the value that makes q=sqrt(b). Returns ------- rtop : float, Return to origin probability. References ---------- .. [1] Cheng J., "Estimation and Processing of Ensemble Average Propagator and Its Features in Diffusion MRI", PhD Thesis, 2012. ''' rtop = 0 if mevals is None: mevals = [None, ] * len(mf) for j, f in enumerate(mf): rtop += f * single_tensor_rtop(mevals[j], tau=tau) return rtop def single_tensor_pdf(r, evals=None, evecs=None, tau=1 / (4 * np.pi ** 2)): """Simulated ODF with a single tensor. Parameters ---------- r : (N,3) or (M,N,3) ndarray Measurement positions in (x, y, z), either as a list or on a grid. evals : (3,) Eigenvalues of diffusion tensor. By default, use values typical for prolate white matter. evecs : (3, 3) ndarray Eigenvectors of the tensor. You can also think of these as the rotation matrix that determines the orientation of the diffusion tensor. tau : float, diffusion time. By default the value that makes q=sqrt(b). Returns ------- pdf : (N,) ndarray The diffusion probability at ``r`` after time ``tau``. References ---------- .. [1] Cheng J., "Estimation and Processing of Ensemble Average Propagator and Its Features in Diffusion MRI", PhD Thesis, 2012. """ if evals is None: evals = diffusion_evals if evecs is None: evecs = np.eye(3) out_shape = r.shape[:r.ndim - 1] R = np.asarray(evecs) D = dot(dot(R, np.diag(evals)), R.T) Di = np.linalg.inv(D) r = r.reshape(-1, 3) P = np.zeros(len(r)) for (i, u) in enumerate(r): P[i] = (-dot(dot(u.T, Di), u)) / (4 * tau) pdf = (1 / np.sqrt((4 * np.pi * tau) ** 3 * np.prod(evals))) * np.exp(P) return pdf.reshape(out_shape) def multi_tensor_pdf(pdf_points, mevals, angles, fractions, tau=1 / (4 * np.pi ** 2)): r'''Simulate a Multi-Tensor ODF. Parameters ---------- pdf_points : (N, 3) ndarray Points to evaluate the PDF. mevals : sequence of 1D arrays, Eigen-values for each tensor. By default, values typical for prolate white matter are used. angles : sequence, Sequence of principal directions for each tensor in polar angles or cartesian unit coordinates. fractions : sequence of floats, Percentages of the fractions for each tensor. tau : float, diffusion time. By default the value that makes q=sqrt(b). Returns ------- pdf : (N,) ndarray, Probability density function of the water displacement. References ---------- .. [1] Cheng J., "Estimation and Processing of Ensemble Average Propagator and its Features in Diffusion MRI", PhD Thesis, 2012. ''' mf = [f / 100. for f in fractions] sticks = _check_directions(angles) pdf = np.zeros(len(pdf_points)) mevecs = [] for s in sticks: mevecs += [all_tensor_evecs(s)] for j, f in enumerate(mf): pdf += f * single_tensor_pdf(pdf_points, evals=mevals[j], evecs=mevecs[j], tau=tau) return pdf def single_tensor_msd(evals=None, tau=1 / (4 * np.pi ** 2)): r'''Simulate a Multi-Tensor rtop. Parameters ---------- evals : 1D arrays, Eigen-values for the tensor. By default, values typical for prolate white matter are used. tau : float, diffusion time. By default the value that makes q=sqrt(b). Returns ------- msd : float, Mean square displacement. References ---------- .. [1] Cheng J., "Estimation and Processing of Ensemble Average Propagator and Its Features in Diffusion MRI", PhD Thesis, 2012. ''' if evals is None: evals = diffusion_evals msd = 2 * tau * np.sum(evals) return msd def multi_tensor_msd(mf, mevals=None, tau=1 / (4 * np.pi ** 2)): r'''Simulate a Multi-Tensor rtop. Parameters ---------- mf : sequence of floats, bounded [0,1] Percentages of the fractions for each tensor. mevals : sequence of 1D arrays, Eigen-values for each tensor. By default, values typical for prolate white matter are used. tau : float, diffusion time. By default the value that makes q=sqrt(b). Returns ------- msd : float, Mean square displacement. References ---------- .. [1] Cheng J., "Estimation and Processing of Ensemble Average Propagator and Its Features in Diffusion MRI", PhD Thesis, 2012. ''' msd = 0 if mevals is None: mevals = [None, ] * len(mf) for j, f in enumerate(mf): msd += f * single_tensor_msd(mevals[j], tau=tau) return msd # Use standard naming convention, but keep old names # for backward compatibility SticksAndBall = sticks_and_ball SingleTensor = single_tensor MultiTensor = multi_tensor dipy-0.10.1/dipy/testing/000077500000000000000000000000001263041327500151635ustar00rootroot00000000000000dipy-0.10.1/dipy/testing/__init__.py000066400000000000000000000013321263041327500172730ustar00rootroot00000000000000''' Utilities for testing ''' from os.path import dirname, abspath, join as pjoin # set path to example data IO_DATA_PATH = abspath(pjoin(dirname(__file__), '..', 'io', 'tests', 'data')) from .spherepoints import sphere_points from .decorators import doctest_skip_parser from numpy.testing import assert_array_equal # Allow failed import of nose if not now running tests try: import nose.tools as nt except ImportError: pass else: from nose.tools import (assert_equal, assert_not_equal, assert_true, assert_false, assert_raises) def assert_arrays_equal(arrays1, arrays2): for arr1, arr2 in zip(arrays1, arrays2): assert_array_equal(arr1, arr2) dipy-0.10.1/dipy/testing/decorators.py000066400000000000000000000043071263041327500177060ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: """ Decorators for dipy tests """ import re import os SKIP_RE = re.compile("(\s*>>>.*?)(\s*)#\s*skip\s+if\s+(.*)$") def doctest_skip_parser(func): """Decorator replaces custom skip test markup in doctests. Say a function has a docstring:: >>> something # skip if not HAVE_AMODULE >>> something + else >>> something # skip if HAVE_BMODULE This decorator will evaluate the expresssion after ``skip if``. If this evaluates to True, then the comment is replaced by ``# doctest: +SKIP``. If False, then the comment is just removed. The expression is evaluated in the ``globals`` scope of `func`. For example, if the module global ``HAVE_AMODULE`` is False, and module global ``HAVE_BMODULE`` is False, the returned function will have docstring:: >>> something # doctest: +SKIP >>> something + else >>> something """ lines = func.__doc__.split('\n') new_lines = [] for line in lines: match = SKIP_RE.match(line) if match is None: new_lines.append(line) continue code, space, expr = match.groups() if eval(expr, func.__globals__): code = code + space + "# doctest: +SKIP" new_lines.append(code) func.__doc__ = "\n".join(new_lines) return func ### # In some cases (e.g., on Travis), we want to use a virtual frame-buffer for # testing. The following decorator runs the tests under xvfb (mediated by # xvfbwrapper) conditioned on an environment variable (that we set in # .travis.yml for these cases): use_xvfb = os.environ.get('TEST_WITH_XVFB', False) def xvfb_it(my_test): """Run a test with xvfbwrapper.""" # When we use verbose testing we want the name: fname = my_test.__name__ def test_with_xvfb(): if use_xvfb: from xvfbwrapper import Xvfb display = Xvfb(width=1920, height=1080) display.start() my_test() if use_xvfb: display.stop() # Plant it back in and return the new function: test_with_xvfb.__name__ = fname return test_with_xvfb dipy-0.10.1/dipy/testing/memory.py000066400000000000000000000013171263041327500170470ustar00rootroot00000000000000import gc from collections import defaultdict def get_type_refcount(pattern=None): """ Retrieves refcount of types for which their name matches `pattern`. Parameters ---------- pattern : str Consider only types that have `pattern` in their name. Returns ------- dict The key is the type name and the value is the refcount. """ gc.collect() refcounts_per_type = defaultdict(int) for obj in gc.get_objects(): obj_type_name = type(obj).__name__ # If `pattern` is not None, keep only matching types. if pattern is None or pattern in obj_type_name: refcounts_per_type[obj_type_name] += 1 return refcounts_per_type dipy-0.10.1/dipy/testing/spherepoints.py000066400000000000000000000010421263041327500202550ustar00rootroot00000000000000''' Create example sphere points ''' import numpy as np def _make_pts(): ''' Make points around sphere quadrants ''' thetas = np.arange(1,4) * np.pi/4 phis = np.arange(8) * np.pi/4 north_pole = (0,0,1) south_pole = (0,0,-1) points = [north_pole, south_pole] for theta in thetas: for phi in phis: x = np.sin(theta) * np.cos(phi) y = np.sin(theta) * np.sin(phi) z = np.cos(theta) points.append((x,y,z)) return np.array(points) sphere_points = _make_pts() dipy-0.10.1/dipy/testing/tests/000077500000000000000000000000001263041327500163255ustar00rootroot00000000000000dipy-0.10.1/dipy/testing/tests/__init__.py000066400000000000000000000000311263041327500204300ustar00rootroot00000000000000# Init for testing/tests dipy-0.10.1/dipy/testing/tests/test_decorators.py000066400000000000000000000025101263041327500221010ustar00rootroot00000000000000""" Testing decorators module """ import numpy as np from numpy.testing import (assert_almost_equal, assert_array_equal) from nose.tools import (assert_true, assert_false, assert_raises, assert_equal, assert_not_equal) from ..decorators import doctest_skip_parser def test_skipper(): def f(): pass docstring = \ """ Header >>> something # skip if not HAVE_AMODULE >>> something + else >>> a = 1 # skip if not HAVE_BMODULE >>> something2 # skip if HAVE_AMODULE """ f.__doc__ = docstring global HAVE_AMODULE, HAVE_BMODULE HAVE_AMODULE = False HAVE_BMODULE = True f2 = doctest_skip_parser(f) assert_true(f is f2) assert_equal(f2.__doc__, """ Header >>> something # doctest: +SKIP >>> something + else >>> a = 1 >>> something2 """) HAVE_AMODULE = True HAVE_BMODULE = False f.__doc__ = docstring f2 = doctest_skip_parser(f) assert_true(f is f2) assert_equal(f2.__doc__, """ Header >>> something >>> something + else >>> a = 1 # doctest: +SKIP >>> something2 # doctest: +SKIP """) del HAVE_AMODULE f.__doc__ = docstring assert_raises(NameError, doctest_skip_parser, f) dipy-0.10.1/dipy/testing/tests/test_memory.py000066400000000000000000000005311263041327500212450ustar00rootroot00000000000000from nose.tools import assert_equal from dipy.testing.memory import get_type_refcount def test_get_type_refcount(): list_ref_count = get_type_refcount("list") A = list() assert_equal(get_type_refcount("list")["list"], list_ref_count["list"]+1) del A assert_equal(get_type_refcount("list")["list"], list_ref_count["list"]) dipy-0.10.1/dipy/tests/000077500000000000000000000000001263041327500146505ustar00rootroot00000000000000dipy-0.10.1/dipy/tests/__init__.py000066400000000000000000000000341263041327500167560ustar00rootroot00000000000000# Make dipy.tests a package dipy-0.10.1/dipy/tests/scriptrunner.py000066400000000000000000000143341263041327500177650ustar00rootroot00000000000000""" Module to help tests check script output Provides class to be instantiated in tests that check scripts. Usually works something like this in a test module:: from .scriptrunner import ScriptRunner runner = ScriptRunner() Then, in the tests, something like:: code, stdout, stderr = runner.run_command(['my-script', my_arg]) assert_equal(code, 0) assert_equal(stdout, b'This script ran OK') """ import sys import os from os.path import (dirname, join as pjoin, isfile, isdir, realpath, pathsep) from subprocess import Popen, PIPE try: # Python 2 string_types = basestring, except NameError: # Python 3 string_types = str, def _get_package(): """ Workaround for missing ``__package__`` in Python 3.2 """ if '__package__' in globals() and not __package__ is None: return __package__ return __name__.split('.', 1)[0] # Same as __package__ for Python 2.6, 2.7 and >= 3.3 MY_PACKAGE=_get_package() def local_script_dir(script_sdir): """ Get local script directory if running in development dir, else None """ # Check for presence of scripts in development directory. ``realpath`` # allows for the situation where the development directory has been linked # into the path. package_path = dirname(__import__(MY_PACKAGE).__file__) above_us = realpath(pjoin(package_path, '..')) devel_script_dir = pjoin(above_us, script_sdir) if isfile(pjoin(above_us, 'setup.py')) and isdir(devel_script_dir): return devel_script_dir return None def local_module_dir(module_name): """ Get local module directory if running in development dir, else None """ mod = __import__(module_name) containing_path = dirname(dirname(realpath(mod.__file__))) if containing_path == realpath(os.getcwd()): return containing_path return None class ScriptRunner(object): """ Class to run scripts and return output Finds local scripts and local modules if running in the development directory, otherwise finds system scripts and modules. """ def __init__(self, script_sdir = 'scripts', module_sdir = MY_PACKAGE, debug_print_var = None, output_processor = lambda x : x ): """ Init ScriptRunner instance Parameters ---------- script_sdir : str, optional Name of subdirectory in top-level directory (directory containing setup.py), to find scripts in development tree. Typically 'scripts', but might be 'bin'. module_sdir : str, optional Name of subdirectory in top-level directory (directory containing setup.py), to find main package directory. debug_print_vsr : str, optional Name of environment variable that indicates whether to do debug printing or no. output_processor : callable Callable to run on the stdout, stderr outputs before returning them. Use this to convert bytes to unicode, strip whitespace, etc. """ self.local_script_dir = local_script_dir(script_sdir) self.local_module_dir = local_module_dir(module_sdir) if debug_print_var is None: debug_print_var = '{0}_DEBUG_PRINT'.format(module_sdir.upper()) self.debug_print = os.environ.get(debug_print_var, False) self.output_processor = output_processor def run_command(self, cmd, check_code=True): """ Run command sequence `cmd` returning exit code, stdout, stderr Parameters ---------- cmd : str or sequence string with command name or sequence of strings defining command check_code : {True, False}, optional If True, raise error for non-zero return code Returns ------- returncode : int return code from execution of `cmd` stdout : bytes (python 3) or str (python 2) stdout from `cmd` stderr : bytes (python 3) or str (python 2) stderr from `cmd` """ if isinstance(cmd, string_types): cmd = [cmd] else: cmd = list(cmd) if not self.local_script_dir is None: # Windows can't run script files without extensions natively so we need # to run local scripts (no extensions) via the Python interpreter. On # Unix, we might have the wrong incantation for the Python interpreter # in the hash bang first line in the source file. So, either way, run # the script through the Python interpreter cmd = [sys.executable, pjoin(self.local_script_dir, cmd[0])] + cmd[1:] elif os.name == 'nt': # Need .bat file extension for windows cmd[0] += '.bat' if os.name == 'nt': # Quote any arguments with spaces. The quotes delimit the arguments # on Windows, and the arguments might be files paths with spaces. # On Unix the list elements are each separate arguments. cmd = ['"{0}"'.format(c) if ' ' in c else c for c in cmd] if self.debug_print: print("Running command '%s'" % cmd) env = os.environ if not self.local_module_dir is None: # module likely comes from the current working directory. We might need # that directory on the path if we're running the scripts from a # temporary directory env = env.copy() pypath = env.get('PYTHONPATH', None) if pypath is None: env['PYTHONPATH'] = self.local_module_dir else: env['PYTHONPATH'] = self.local_module_dir + pathsep + pypath proc = Popen(cmd, stdout=PIPE, stderr=PIPE, env=env) stdout, stderr = proc.communicate() if proc.poll() == None: proc.terminate() if check_code and proc.returncode != 0: raise RuntimeError( """Command "{0}" failed with stdout ------ {1} stderr ------ {2} """.format(cmd, stdout, stderr)) opp = self.output_processor return proc.returncode, opp(stdout), opp(stderr) dipy-0.10.1/dipy/tests/test_scripts.py000066400000000000000000000103041263041327500177460ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: """ Test scripts Run scripts and check outputs """ from __future__ import division, print_function, absolute_import import os import shutil from os.path import (dirname, join as pjoin, abspath) from nose.tools import assert_true, assert_false, assert_equal import numpy.testing as nt import nibabel as nib from nibabel.tmpdirs import InTemporaryDirectory from dipy.data import get_data # Quickbundles command-line requires matplotlib: try: import matplotlib no_mpl = False except ImportError: no_mpl = True from .scriptrunner import ScriptRunner runner = ScriptRunner( script_sdir = 'bin', debug_print_var = 'NIPY_DEBUG_PRINT') run_command = runner.run_command DATA_PATH = abspath(pjoin(dirname(__file__), 'data')) def test_dipy_peak_extraction(): # test dipy_peak_extraction script cmd = 'dipy_peak_extraction' code, stdout, stderr = run_command(cmd, check_code=False) assert_equal(code, 2) def test_dipy_fit_tensor(): # test dipy_fit_tensor script cmd = 'dipy_fit_tensor' code, stdout, stderr = run_command(cmd, check_code=False) assert_equal(code, 2) def test_dipy_sh_estimate(): # test dipy_sh_estimate script cmd = 'dipy_sh_estimate' code, stdout, stderr = run_command(cmd, check_code=False) assert_equal(code, 2) def assert_image_shape_affine(filename, shape, affine): assert_true(os.path.isfile(filename)) image = nib.load(filename) assert_equal(image.shape, shape) nt.assert_array_almost_equal(image.get_affine(), affine) def test_dipy_fit_tensor_again(): with InTemporaryDirectory(): dwi, bval, bvec = get_data("small_25") # Copy data to tmp directory shutil.copyfile(dwi, "small_25.nii.gz") shutil.copyfile(bval, "small_25.bval") shutil.copyfile(bvec, "small_25.bvec") # Call script cmd = ["dipy_fit_tensor", "--mask=none", "small_25.nii.gz"] out = run_command(cmd) assert_equal(out[0], 0) # Get expected values img = nib.load("small_25.nii.gz") affine = img.get_affine() shape = img.shape[:-1] # Check expected outputs assert_image_shape_affine("small_25_fa.nii.gz", shape, affine) assert_image_shape_affine("small_25_t2di.nii.gz", shape, affine) assert_image_shape_affine("small_25_dirFA.nii.gz", shape, affine) assert_image_shape_affine("small_25_ad.nii.gz", shape, affine) assert_image_shape_affine("small_25_md.nii.gz", shape, affine) assert_image_shape_affine("small_25_rd.nii.gz", shape, affine) with InTemporaryDirectory(): dwi, bval, bvec = get_data("small_25") # Copy data to tmp directory shutil.copyfile(dwi, "small_25.nii.gz") shutil.copyfile(bval, "small_25.bval") shutil.copyfile(bvec, "small_25.bvec") # Call script cmd = ["dipy_fit_tensor", "--save-tensor", "--mask=none", "small_25.nii.gz"] out = run_command(cmd) assert_equal(out[0], 0) # Get expected values img = nib.load("small_25.nii.gz") affine = img.get_affine() shape = img.shape[:-1] # Check expected outputs assert_image_shape_affine("small_25_fa.nii.gz", shape, affine) assert_image_shape_affine("small_25_t2di.nii.gz", shape, affine) assert_image_shape_affine("small_25_dirFA.nii.gz", shape, affine) assert_image_shape_affine("small_25_ad.nii.gz", shape, affine) assert_image_shape_affine("small_25_md.nii.gz", shape, affine) assert_image_shape_affine("small_25_rd.nii.gz", shape, affine) # small_25_tensor saves the tensor as a symmetric matrix following # the nifti standard. ten_shape = shape + (1, 6) assert_image_shape_affine("small_25_tensor.nii.gz", ten_shape, affine) @nt.dec.skipif(no_mpl) def test_qb_commandline(): with InTemporaryDirectory(): tracks_file = get_data('fornix') cmd = ["dipy_quickbundles", tracks_file, '--pkl_file', 'mypickle.pkl', '--out_file', 'tracks300.trk'] out = run_command(cmd) assert_equal(out[0], 0) dipy-0.10.1/dipy/tracking/000077500000000000000000000000001263041327500153105ustar00rootroot00000000000000dipy-0.10.1/dipy/tracking/__init__.py000066400000000000000000000002351263041327500174210ustar00rootroot00000000000000# Init for tracking module """ Tracking objects """ # Test callable from numpy.testing import Tester test = Tester().test bench = Tester().bench del Tester dipy-0.10.1/dipy/tracking/_utils.py000066400000000000000000000043051263041327500171630ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import """This is a helper module for dipy.tracking.utils""" from warnings import warn import numpy as np def _voxel_size_deprecated(): m = DeprecationWarning('the voxel_size argument to this function is ' 'deprecated, use the affine argument instead') warn(m) def _mapping_to_voxel(affine, voxel_size): """Inverts affine and returns a mapping so voxel coordinates. This function is an implementation detail and only meant to be used with ``_to_voxel_coordinates``. Parameters ---------- affine : array_like (4, 4) The mapping from voxel indices, [i, j, k], to real world coordinates. The inverse of this mapping is used unless `affine` is None. voxel_size : array_like (3,) Used to support deprecated trackvis space. Return ------ lin_T : array (3, 3) Transpose of the linear part of the mapping to voxel space, (ie ``inv(affine)[:3, :3].T``) offset : array or scaler Offset part of the mapping (ie, ``inv(affine)[:3, 3]``) + ``.5``. The half voxel shift is so that truncating the result of this mapping will give the correct integer voxel coordinate. Raises ------ ValueError If both affine and voxel_size are None. """ if affine is not None: affine = np.array(affine, dtype=float) inv_affine = np.linalg.inv(affine) lin_T = inv_affine[:3, :3].T.copy() offset = inv_affine[:3, 3] + .5 elif voxel_size is not None: _voxel_size_deprecated() voxel_size = np.asarray(voxel_size, dtype=float) lin_T = np.diag(1. / voxel_size) offset = 0. else: raise ValueError("no affine specified") return lin_T, offset def _to_voxel_coordinates(streamline, lin_T, offset): """Applies a mapping from streamline coordinates to voxel_coordinates, raises an error for negative voxel values.""" inds = np.dot(streamline, lin_T) inds += offset if inds.min().round(decimals=6) < 0: raise IndexError('streamline has points that map to negative voxel' ' indices') return inds.astype(int) dipy-0.10.1/dipy/tracking/benchmarks/000077500000000000000000000000001263041327500174255ustar00rootroot00000000000000dipy-0.10.1/dipy/tracking/benchmarks/__init__.py000066400000000000000000000000001263041327500215240ustar00rootroot00000000000000dipy-0.10.1/dipy/tracking/benchmarks/bench_streamline.py000066400000000000000000000063431263041327500233070ustar00rootroot00000000000000""" Benchmarks for functions related to streamline Run all benchmarks with:: import dipy.tracking as dipytracking dipytracking.bench() If you have doctests enabled by default in nose (with a noserc file or environment variable), and you have a numpy version <= 1.6.1, this will also run the doctests, let's hope they pass. Run this benchmark with: nosetests -s --match '(?:^|[\\b_\\.//-])[Bb]ench' /path/to/bench_streamline.py """ import numpy as np from numpy.testing import measure from dipy.data import get_data from nibabel import trackvis as tv from dipy.tracking.streamline import (set_number_of_points, length, compress_streamlines) from dipy.tracking.tests.test_streamline import (set_number_of_points_python, length_python, compress_streamlines_python) def bench_set_number_of_points(): repeat = 1 nb_points_per_streamline = 100 nb_points = 42 nb_streamlines = int(1e4) streamlines = [np.random.rand(nb_points_per_streamline, 3).astype("float32") for i in range(nb_streamlines)] print("Timing set_number_of_points() in Cython ({0} streamlines)".format(nb_streamlines)) cython_time = measure("set_number_of_points(streamlines, nb_points)", repeat) print("Cython time: {0:.3}sec".format(cython_time)) del streamlines streamlines = [np.random.rand(nb_points_per_streamline, 3).astype("float32") for i in range(nb_streamlines)] python_time = measure("[set_number_of_points_python(s, nb_points) for s in streamlines]", repeat) print("Python time: {0:.2}sec".format(python_time)) print("Speed up of {0}x".format(python_time/cython_time)) del streamlines def bench_length(): repeat = 1 nb_points_per_streamline = 100 nb_streamlines = int(1e5) streamlines = [np.random.rand(nb_points_per_streamline, 3).astype("float32") for i in range(nb_streamlines)] print("Timing length() in Cython ({0} streamlines)".format(nb_streamlines)) cython_time = measure("length(streamlines)", repeat) print("Cython time: {0:.3}sec".format(cython_time)) del streamlines streamlines = [np.random.rand(nb_points_per_streamline, 3).astype("float32") for i in range(nb_streamlines)] python_time = measure("[length_python(s) for s in streamlines]", repeat) print("Python time: {0:.2}sec".format(python_time)) print("Speed up of {0}x".format(python_time/cython_time)) del streamlines def bench_compress_streamlines(): repeat = 10 fname = get_data('fornix') streams, hdr = tv.read(fname) streamlines = [i[0] for i in streams] print("Timing compress_streamlines() in Cython ({0} streamlines)".format(len(streamlines))) cython_time = measure("compress_streamlines(streamlines)", repeat) print("Cython time: {0:.3}sec".format(cython_time)) del streamlines fname = get_data('fornix') streams, hdr = tv.read(fname) streamlines = [i[0] for i in streams] python_time = measure("map(compress_streamlines_python, streamlines)", repeat) print("Python time: {0:.2}sec".format(python_time)) print("Speed up of {0}x".format(python_time/cython_time)) del streamlines dipy-0.10.1/dipy/tracking/distances.pyx000066400000000000000000001750221263041327500200360ustar00rootroot00000000000000 # A type of -*- python -*- file """ Optimized track distances, similarities and distanch clustering algorithms """ # cython: profile=True # cython: embedsignature=True cimport cython import time import numpy as np cimport numpy as cnp cdef extern from "dpy_math.h" nogil: double floor(double x) float sqrt(float x) float fabs(float x) float acos(float x ) bint dpy_isnan(double x) double dpy_log2(double x) #cdef extern from "stdio.h": # void printf ( const char * format, ... ) cdef extern from "stdlib.h" nogil: ctypedef unsigned long size_t void free(void *ptr) void *malloc(size_t size) void *calloc(size_t nelem, size_t elsize) void *realloc (void *ptr, size_t size) void *memcpy(void *str1, void *str2, size_t n) #@cython.boundscheck(False) #@cython.wraparound(False) DEF biggest_double = 1.79769e+308 #np.finfo('f8').max DEF biggest_float = 3.4028235e+38 #np.finfo('f4').max cdef inline cnp.ndarray[cnp.float32_t, ndim=1] as_float_3vec(object vec): ''' Utility function to convert object to 3D float vector ''' return np.squeeze(np.asarray(vec, dtype=np.float32)) cdef inline float* asfp(cnp.ndarray pt): return pt.data def normalized_3vec(vec): ''' Return normalized 3D vector Vector divided by Euclidean (L2) norm Parameters ---------- vec : array-like shape (3,) Returns ------- vec_out : array shape (3,) ''' cdef cnp.ndarray[cnp.float32_t, ndim=1] vec_in = as_float_3vec(vec) cdef cnp.ndarray[cnp.float32_t, ndim=1] vec_out = np.zeros((3,), np.float32) cnormalized_3vec(vec_in.data, vec_out.data) return vec_out def norm_3vec(vec): ''' Euclidean (L2) norm of length 3 vector Parameters ---------- vec : array-like shape (3,) Returns ------- norm : float Euclidean norm ''' cdef cnp.ndarray[cnp.float32_t, ndim=1] vec_in = as_float_3vec(vec) return cnorm_3vec(vec_in.data) cdef inline float cnorm_3vec(float *vec): ''' Calculate Euclidean norm of input vector Parameters ---------- vec : float * length 3 float vector Returns ------- norm : float Euclidean norm ''' cdef float v0, v1, v2 v0 = vec[0] v1 = vec[1] v2 = vec[2] return sqrt(v0 * v0 + v1*v1 + v2*v2) cdef inline void cnormalized_3vec(float *vec_in, float *vec_out): ''' Calculate and fill normalized 3D vector Parameters ---------- vec_in : float * Length 3 vector to normalize vec_out : float * Memory into which to write normalized length 3 vector ''' cdef float norm = cnorm_3vec(vec_in) cdef int i for i in range(3): vec_out[i] = vec_in[i] / norm def inner_3vecs(vec1, vec2): cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec1 = as_float_3vec(vec1) cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec2 = as_float_3vec(vec2) return cinner_3vecs(fvec1.data, fvec2.data) cdef inline float cinner_3vecs(float *vec1, float *vec2) nogil: cdef int i cdef float ip = 0 for i from 0<=i<3: ip += vec1[i]*vec2[i] return ip def sub_3vecs(vec1, vec2): cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec1 = as_float_3vec(vec1) cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec2 = as_float_3vec(vec2) cdef cnp.ndarray[cnp.float32_t, ndim=1] vec_out = np.zeros((3,), np.float32) csub_3vecs(fvec1.data, fvec2.data, vec_out.data) return vec_out cdef inline void csub_3vecs(float *vec1, float *vec2, float *vec_out) nogil: cdef int i for i from 0<=i<3: vec_out[i] = vec1[i]-vec2[i] def add_3vecs(vec1, vec2): cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec1 = as_float_3vec(vec1) cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec2 = as_float_3vec(vec2) cdef cnp.ndarray[cnp.float32_t, ndim=1] vec_out = np.zeros((3,), np.float32) cadd_3vecs(fvec1.data, fvec2.data, vec_out.data) return vec_out cdef inline void cadd_3vecs(float *vec1, float *vec2, float *vec_out) nogil: cdef int i for i from 0<=i<3: vec_out[i] = vec1[i]+vec2[i] def mul_3vecs(vec1, vec2): cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec1 = as_float_3vec(vec1) cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec2 = as_float_3vec(vec2) cdef cnp.ndarray[cnp.float32_t, ndim=1] vec_out = np.zeros((3,), np.float32) cmul_3vecs(fvec1.data, fvec2.data, vec_out.data) return vec_out cdef inline void cmul_3vecs(float *vec1, float *vec2, float *vec_out) nogil: cdef int i for i from 0<=i<3: vec_out[i] = vec1[i]*vec2[i] def mul_3vec(a, vec): cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec = as_float_3vec(vec) cdef cnp.ndarray[cnp.float32_t, ndim=1] vec_out = np.zeros((3,), np.float32) cmul_3vec(a,fvec.data, vec_out.data) return vec_out cdef inline void cmul_3vec(float a, float *vec, float *vec_out) nogil: cdef int i for i from 0<=i<3: vec_out[i] = a*vec[i] # float 32 dtype for casting cdef cnp.dtype f32_dt = np.dtype(np.float32) def cut_plane(tracks, ref): ''' Extract divergence vectors and points of intersection between planes normal to the reference fiber and other tracks Parameters ---------- tracks : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) ref : array, shape (N,3) reference track Returns ------- hits : sequence list of points and rcds (radial coefficient of divergence) Notes ----- The orthogonality relationship ``np.inner(hits[p][q][0:3]-ref[p+1],ref[p+2]-ref[r][p+1])`` will hold throughout for every point q in the hits plane at point (p+1) on the reference track. Examples -------- >>> refx = np.array([[0,0,0],[1,0,0],[2,0,0],[3,0,0]],dtype='float32') >>> bundlex = [np.array([[0.5,1,0],[1.5,2,0],[2.5,3,0]],dtype='float32')] >>> res = cut_plane(bundlex,refx) >>> len(res) 2 >>> print(res[0]) [[ 1. 1.5 0. 0.70710683 0. ]] >>> print(res[1]) [[ 2. 2.5 0. 0.70710677 0. ]] ''' cdef: size_t n_hits, hit_no, max_hit_len float alpha,beta,lrq,rcd,lhp,ld cnp.ndarray[cnp.float32_t, ndim=2] ref32 cnp.ndarray[cnp.float32_t, ndim=2] track object hits cnp.ndarray[cnp.float32_t, ndim=1] one_hit float *hit_ptr cnp.ndarray[cnp.float32_t, ndim=2] hit_arr object Hit=[] # make reference fiber usable type ref32 = np.ascontiguousarray(ref, f32_dt) # convert all the tracks to something we can work with. Get track # lengths cdef: size_t N_tracks=len(tracks) cnp.ndarray[cnp.uint64_t, ndim=1] track_lengths size_t t_no, N_track cdef object tracks32 = [] track_lengths = np.empty((N_tracks,), dtype=np.uint64) for t_no in range(N_tracks): track = np.ascontiguousarray(tracks[t_no], f32_dt) track_lengths[t_no] = track.shape[0] tracks32.append(track) # set up loop across reference fiber points cdef: size_t N_ref = ref32.shape[0] size_t p_no, q_no float *this_ref_p, *next_ref_p, *this_trk_p, *next_trk_p float along[3], normal[3] float qMp[3], rMp[3], rMq[3], pMq[3] float hit[3], hitMp[3], *delta # List used for storage of hits. We will fill this with lots of # small numpy arrays, and reuse them over the reference track point # loops. max_hit_len = 0 hits = [] # for every point along the reference track next_ref_p = asfp(ref32[0]) for p_no in range(N_ref-1): # extract point to point vector into `along` this_ref_p = next_ref_p next_ref_p = asfp(ref32[p_no+1]) csub_3vecs(next_ref_p, this_ref_p, along) # normalize cnormalized_3vec(along, normal) # initialize index for hits hit_no = 0 # for every track for t_no in range(N_tracks): track=tracks32[t_no] N_track = track_lengths[t_no] # for every point on the track next_trk_p = asfp(track[0]) for q_no in range(N_track-1): # p = ref32[p_no] # q = track[q_no] # r = track[q_no+1] # float* versions of above: p == this_ref_p this_trk_p = next_trk_p # q next_trk_p = asfp(track[q_no+1]) # r #if np.inner(normal,q-p)*np.inner(normal,r-p) <= 0: csub_3vecs(this_trk_p, this_ref_p, qMp) # q-p csub_3vecs(next_trk_p, this_ref_p, rMp) # r-p if (cinner_3vecs(normal, qMp) * cinner_3vecs(normal, rMp)) <=0: #if np.inner((r-q),normal) != 0: csub_3vecs(next_trk_p, this_trk_p, rMq) beta = cinner_3vecs(rMq, normal) if beta !=0: #alpha = np.inner((p-q),normal)/np.inner((r-q),normal) csub_3vecs(this_ref_p, this_trk_p, pMq) alpha = (cinner_3vecs(pMq, normal) / cinner_3vecs(rMq, normal)) if alpha < 1: # hit = q+alpha*(r-q) hit[0] = this_trk_p[0]+alpha*rMq[0] hit[1] = this_trk_p[1]+alpha*rMq[1] hit[2] = this_trk_p[2]+alpha*rMq[2] # h-p csub_3vecs(hit, this_ref_p, hitMp) # |h-p| lhp = cnorm_3vec(hitMp) delta = rMq # just renaming # |r-q| == |delta| ld = cnorm_3vec(delta) ''' # Summary of stuff in comments # divergence =((r-q)-inner(r-q,normal)*normal)/|r-q| div[0] = (rMq[0]-beta*normal[0]) / ld div[1] = (rMq[1]-beta*normal[1]) / ld div[2] = (rMq[2]-beta*normal[2]) / ld # radial coefficient of divergence d.(h-p)/|h-p| ''' # radial divergence # np.inner(delta, (hit-p)) / (ld * lhp) if lhp > 0: rcd = fabs(cinner_3vecs(delta, hitMp) / (ld*lhp)) else: rcd=0 # hit data into array if hit_no >= max_hit_len: one_hit = np.empty((5,), dtype=f32_dt) hits.append(one_hit) else: one_hit = hits[hit_no] hit_ptr = one_hit.data hit_ptr[0] = hit[0] hit_ptr[1] = hit[1] hit_ptr[2] = hit[2] hit_ptr[3] = rcd hit_ptr[4] = t_no hit_no += 1 # convert hits list to hits array n_hits = hit_no if n_hits > max_hit_len: max_hit_len = n_hits hit_arr = np.empty((n_hits,5), dtype=f32_dt) for hit_no in range(n_hits): hit_arr[hit_no] = hits[hit_no] Hit.append(hit_arr) #Div.append(divs[1:]) return Hit[1:] def most_similar_track_mam(tracks,metric='avg'): ''' Find the most similar track in a bundle using distances calculated from Zhang et. al 2008. Parameters ---------- tracks : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) metric : str 'avg', 'min', 'max' Returns ------- si : int index of the most similar track in tracks. This can be used as a reference track for a bundle. s : array, shape (len(tracks),) similarities between tracks[si] and the rest of the tracks in the bundle Notes ----- A vague description of this function is given below: for (i,j) in tracks_combinations_of_2: calculate the mean_closest_distance from i to j (mcd_i) calculate the mean_closest_distance from j to i (mcd_j) if 'avg': s holds the average similarities if 'min': s holds the minimum similarities if 'max': s holds the maximum similarities si holds the index of the track with min {avg,min,max} average metric ''' cdef: size_t i, j, lent int metric_type if metric=='avg': metric_type = 0 elif metric == 'min': metric_type = 1 elif metric == 'max': metric_type = 2 else: raise ValueError('Metric should be one of avg, min, max') # preprocess tracks cdef: size_t longest_track_len = 0, track_len cnp.ndarray[object, ndim=1] tracks32 lent = len(tracks) tracks32 = np.zeros((lent,), dtype=object) # process tracks to predictable memory layout, find longest track for i in range(lent): tracks32[i] = np.ascontiguousarray(tracks[i], dtype=f32_dt) track_len = tracks32[i].shape[0] if track_len > longest_track_len: longest_track_len = track_len # buffer for distances of found track to other tracks cdef: cnp.ndarray[cnp.double_t, ndim=1] track2others track2others = np.zeros((lent,), dtype=np.double) # use this buffer also for working space containing summed distances # of candidate track to all other tracks cdef cnp.double_t *sum_track2others = track2others.data # preallocate buffer array for track distance calculations cdef: cnp.ndarray [cnp.float32_t, ndim=1] distances_buffer cnp.float32_t *t1_ptr, *t2_ptr, *min_buffer, distance distances_buffer = np.zeros((longest_track_len*2,), dtype=np.float32) min_buffer = distances_buffer.data # cycle over tracks cdef: cnp.ndarray [cnp.float32_t, ndim=2] t1, t2 size_t t1_len, t2_len for i from 0 <= i < lent-1: t1 = tracks32[i] t1_len = t1.shape[0] t1_ptr = t1.data for j from i+1 <= j < lent: t2 = tracks32[j] t2_len = t2.shape[0] t2_ptr = t2.data distance = czhang(t1_len, t1_ptr, t2_len, t2_ptr, min_buffer, metric_type) # get metric sum_track2others[i]+=distance sum_track2others[j]+=distance # find track with smallest summed metric with other tracks cdef double mn = sum_track2others[0] cdef size_t si = 0 for i in range(lent): if sum_track2others[i] < mn: si = i mn = sum_track2others[i] # recalculate distance of this track from the others t1 = tracks32[si] t1_len = t1.shape[0] t1_ptr = t1.data for j from 0 <= j < lent: t2 = tracks32[j] t2_len = t2.shape[0] t2_ptr = t2.data track2others[j] = czhang(t1_len, t1_ptr, t2_len, t2_ptr, min_buffer, metric_type) return si, track2others @cython.boundscheck(False) @cython.wraparound(False) def bundles_distances_mam(tracksA, tracksB, metric='avg'): ''' Calculate distances between list of tracks A and list of tracks B Parameters ---------- tracksA : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) tracksB : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) metric : str 'avg', 'min', 'max' Returns ------- DM : array, shape (len(tracksA), len(tracksB)) distances between tracksA and tracksB according to metric ''' cdef: size_t i, j, lentA, lentB int metric_type if metric=='avg': metric_type = 0 elif metric == 'min': metric_type = 1 elif metric == 'max': metric_type = 2 else: raise ValueError('Metric should be one of avg, min, max') # preprocess tracks cdef: size_t longest_track_len = 0, track_len size_t longest_track_lenA = 0, longest_track_lenB = 0 cnp.ndarray[object, ndim=1] tracksA32 cnp.ndarray[object, ndim=1] tracksB32 cnp.ndarray[cnp.double_t, ndim=2] DM lentA = len(tracksA) lentB = len(tracksB) tracksA32 = np.zeros((lentA,), dtype=object) tracksB32 = np.zeros((lentB,), dtype=object) DM = np.zeros((lentA,lentB), dtype=np.double) # process tracks to predictable memory layout, find longest track for i in range(lentA): tracksA32[i] = np.ascontiguousarray(tracksA[i], dtype=f32_dt) track_len = tracksA32[i].shape[0] if track_len > longest_track_lenA: longest_track_lenA = track_len for i in range(lentB): tracksB32[i] = np.ascontiguousarray(tracksB[i], dtype=f32_dt) track_len = tracksB32[i].shape[0] if track_len > longest_track_lenB: longest_track_lenB = track_len if longest_track_lenB > longest_track_lenA: longest_track_lenA = longest_track_lenB # preallocate buffer array for track distance calculations cdef: cnp.ndarray [cnp.float32_t, ndim=1] distances_buffer cnp.float32_t *t1_ptr, *t2_ptr, *min_buffer distances_buffer = np.zeros((longest_track_lenA*2,), dtype=np.float32) min_buffer = distances_buffer.data # cycle over tracks cdef: cnp.ndarray [cnp.float32_t, ndim=2] t1, t2 size_t t1_len, t2_len for i from 0 <= i < lentA: t1 = tracksA32[i] t1_len = t1.shape[0] t1_ptr = t1.data for j from 0 <= j < lentB: t2 = tracksB32[j] t2_len = t2.shape[0] t2_ptr = t2.data DM[i,j] = czhang(t1_len, t1_ptr, t2_len, t2_ptr, min_buffer, metric_type) return DM @cython.boundscheck(False) @cython.wraparound(False) def bundles_distances_mdf(tracksA, tracksB): ''' Calculate distances between list of tracks A and list of tracks B All tracks need to have the same number of points Parameters ---------- tracksA : sequence of tracks as arrays, [(N,3) .. (N,3)] tracksB : sequence of tracks as arrays, [(N,3) .. (N,3)] Returns ------- DM : array, shape (len(tracksA), len(tracksB)) distances between tracksA and tracksB according to metric See Also --------- dipy.metrics.downsample ''' cdef: size_t i, j, lentA, lentB # preprocess tracks cdef: size_t longest_track_len = 0, track_len longest_track_lenA, longest_track_lenB cnp.ndarray[object, ndim=1] tracksA32 cnp.ndarray[object, ndim=1] tracksB32 cnp.ndarray[cnp.double_t, ndim=2] DM lentA = len(tracksA) lentB = len(tracksB) tracksA32 = np.zeros((lentA,), dtype=object) tracksB32 = np.zeros((lentB,), dtype=object) DM = np.zeros((lentA,lentB), dtype=np.double) # process tracks to predictable memory layout for i in range(lentA): tracksA32[i] = np.ascontiguousarray(tracksA[i], dtype=f32_dt) for i in range(lentB): tracksB32[i] = np.ascontiguousarray(tracksB[i], dtype=f32_dt) # preallocate buffer array for track distance calculations cdef: cnp.float32_t *t1_ptr, *t2_ptr, *min_buffer # cycle over tracks cdef: cnp.ndarray [cnp.float32_t, ndim=2] t1, t2 size_t t1_len, t2_len float d[2] t_len = tracksA32[0].shape[0] for i from 0 <= i < lentA: t1 = tracksA32[i] #t1_len = t1.shape[0] t1_ptr = t1.data for j from 0 <= j < lentB: t2 = tracksB32[j] #t2_len = t2.shape[0] t2_ptr = t2.data #DM[i,j] = czhang(t1_len, t1_ptr, t2_len, t2_ptr, min_buffer, metric_type) track_direct_flip_dist(t1_ptr, t2_ptr,t_len,d) if d[0] mean_t1t2: dist_val=mean_t2t1 else: dist_val=mean_t1t2 return dist_val @cython.cdivision(True) cdef inline void min_distances(size_t t1_len, cnp.float32_t *track1_ptr, size_t t2_len, cnp.float32_t *track2_ptr, cnp.float32_t *min_t2t1, cnp.float32_t *min_t1t2) nogil: cdef: cnp.float32_t *t1_pt, *t2_pt, d0, d1, d2 cnp.float32_t delta2 int t1_pi, t2_pi for t2_pi from 0<= t2_pi < t2_len: min_t2t1[t2_pi] = inf for t1_pi from 0<= t1_pi < t1_len: min_t1t2[t1_pi] = inf # pointer to current point in track 1 t1_pt = track1_ptr # calculate min squared distance between each point in the two # lines. Squared distance to delay doing the sqrt until after this # speed-critical loop for t1_pi from 0<= t1_pi < t1_len: # pointer to current point in track 2 t2_pt = track2_ptr for t2_pi from 0<= t2_pi < t2_len: d0 = t1_pt[0] - t2_pt[0] d1 = t1_pt[1] - t2_pt[1] d2 = t1_pt[2] - t2_pt[2] delta2 = d0*d0 + d1*d1 + d2*d2 if delta2 < min_t2t1[t2_pi]: min_t2t1[t2_pi]=delta2 if delta2 < min_t1t2[t1_pi]: min_t1t2[t1_pi]=delta2 t2_pt += 3 # to next point in track 2 t1_pt += 3 # to next point in track 1 # sqrt to get Euclidean distance from squared distance for t1_pi from 0<= t1_pi < t1_len: min_t1t2[t1_pi]=sqrt(min_t1t2[t1_pi]) for t2_pi from 0<= t2_pi < t2_len: min_t2t1[t2_pi]=sqrt(min_t2t1[t2_pi]) def mam_distances(xyz1,xyz2,metric='all'): ''' Min/Max/Mean Average Minimum Distance between tracks xyz1 and xyz2 Based on the metrics in Zhang, Correia, Laidlaw 2008 http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4479455 which in turn are based on those of Corouge et al. 2004 Parameters ---------- xyz1 : array, shape (N1,3), dtype float32 xyz2 : array, shape (N2,3), dtype float32 arrays representing x,y,z of the N1 and N2 points of two tracks metrics : {'avg','min','max','all'} Metric to calculate. {'avg','min','max'} return a scalar. 'all' returns a tuple Returns ------- avg_mcd : float average_mean_closest_distance min_mcd : float minimum_mean_closest_distance max_mcd : float maximum_mean_closest_distance Notes ----- Algorithmic description Lets say we have curves A and B. For every point in A calculate the minimum distance from every point in B stored in minAB For every point in B calculate the minimum distance from every point in A stored in minBA find average of minAB stored as avg_minAB find average of minBA stored as avg_minBA if metric is 'avg' then return (avg_minAB + avg_minBA)/2.0 if metric is 'min' then return min(avg_minAB,avg_minBA) if metric is 'max' then return max(avg_minAB,avg_minBA) ''' cdef: cnp.ndarray[cnp.float32_t, ndim=2] track1 cnp.ndarray[cnp.float32_t, ndim=2] track2 size_t t1_len, t2_len track1 = np.ascontiguousarray(xyz1, dtype=f32_dt) t1_len = track1.shape[0] track2 = np.ascontiguousarray(xyz2, dtype=f32_dt) t2_len = track2.shape[0] # preallocate buffer array for track distance calculations cdef: cnp.float32_t *min_t2t1, *min_t1t2 cnp.ndarray [cnp.float32_t, ndim=1] distances_buffer distances_buffer = np.zeros((t1_len + t2_len,), dtype=np.float32) min_t2t1 = distances_buffer.data min_t1t2 = min_t2t1 + t2_len min_distances(t1_len, track1.data, t2_len, track2.data, min_t2t1, min_t1t2) cdef: size_t t1_pi, t2_pi cnp.float32_t mean_t2t1 = 0, mean_t1t2 = 0 for t1_pi from 0<= t1_pi < t1_len: mean_t1t2+=min_t1t2[t1_pi] mean_t1t2=mean_t1t2/t1_len for t2_pi from 0<= t2_pi < t2_len: mean_t2t1+=min_t2t1[t2_pi] mean_t2t1=mean_t2t1/t2_len if metric=='all': return ((mean_t2t1+mean_t1t2)/2.0, np.min((mean_t2t1,mean_t1t2)), np.max((mean_t2t1,mean_t1t2))) elif metric=='avg': return (mean_t2t1+mean_t1t2)/2.0 elif metric=='min': return np.min((mean_t2t1,mean_t1t2)) elif metric =='max': return np.max((mean_t2t1,mean_t1t2)) else : ValueError('Wrong argument for metric') def minimum_closest_distance(xyz1,xyz2): ''' Find the minimum distance between two curves xyz1, xyz2 Parameters ---------- xyz1 : array, shape (N1,3), dtype float32 xyz2 : array, shape (N2,3), dtype float32 arrays representing x,y,z of the N1 and N2 points of two tracks Returns ------- md : minimum distance Notes ----- Algorithmic description Lets say we have curves A and B for every point in A calculate the minimum distance from every point in B stored in minAB for every point in B calculate the minimum distance from every point in A stored in minBA find min of minAB stored in min_minAB find min of minBA stored in min_minBA Then return (min_minAB + min_minBA)/2.0 ''' cdef: cnp.ndarray[cnp.float32_t, ndim=2] track1 cnp.ndarray[cnp.float32_t, ndim=2] track2 size_t t1_len, t2_len track1 = np.ascontiguousarray(xyz1, dtype=f32_dt) t1_len = track1.shape[0] track2 = np.ascontiguousarray(xyz2, dtype=f32_dt) t2_len = track2.shape[0] # preallocate buffer array for track distance calculations cdef: cnp.float32_t *min_t2t1, *min_t1t2 cnp.ndarray [cnp.float32_t, ndim=1] distances_buffer distances_buffer = np.zeros((t1_len + t2_len,), dtype=np.float32) min_t2t1 = distances_buffer.data min_t1t2 = min_t2t1 + t2_len min_distances(t1_len, track1.data, t2_len, track2.data, min_t2t1, min_t1t2) cdef: size_t t1_pi, t2_pi double min_min_t2t1 = inf double min_min_t1t2 = inf for t1_pi in range(t1_len): if min_min_t1t2 > min_t1t2[t1_pi]: min_min_t1t2 = min_t1t2[t1_pi] for t2_pi in range(t2_len): if min_min_t2t1 > min_t2t1[t2_pi]: min_min_t2t1 = min_t2t1[t2_pi] return (min_min_t1t2+min_min_t2t1)/2.0 def lee_perpendicular_distance(start0, end0, start1, end1): ''' Calculates perpendicular distance metric for the distance between two line segments Based on Lee , Han & Whang SIGMOD07. This function assumes that norm(end0-start0)>norm(end1-start1) i.e. that the first segment will be bigger than the second one. Parameters ---------- start0 : float array(3,) end0 : float array(3,) start1 : float array(3,) end1 : float array(3,) Returns ------- perpendicular_distance: float Notes ----- l0 = np.inner(end0-start0,end0-start0) l1 = np.inner(end1-start1,end1-start1) k0=end0-start0 u1 = np.inner(start1-start0,k0)/l0 u2 = np.inner(end1-start0,k0)/l0 ps = start0+u1*k0 pe = start0+u2*k0 lperp1 = np.sqrt(np.inner(ps-start1,ps-start1)) lperp2 = np.sqrt(np.inner(pe-end1,pe-end1)) if lperp1+lperp2 > 0.: return (lperp1**2+lperp2**2)/(lperp1+lperp2) else: return 0. Examples -------- >>> d = lee_perpendicular_distance([0,0,0],[1,0,0],[3,4,5],[5,4,3]) >>> print('%.6f' % d) 5.787888 ''' cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec1,fvec2,fvec3,fvec4 fvec1 = as_float_3vec(start0) fvec2 = as_float_3vec(end0) fvec3 = as_float_3vec(start1) fvec4 = as_float_3vec(end1) return clee_perpendicular_distance(fvec1.data,fvec2.data,fvec3.data,fvec4.data) cdef float clee_perpendicular_distance(float *start0, float *end0,float *start1, float *end1): ''' This function assumes that norm(end0-start0)>norm(end1-start1) ''' cdef: float l0,l1,ltmp,u1,u2,lperp1,lperp2 float *s_tmp,*e_tmp,k0[3],ps[3],pe[3],ps1[3],pe1[3],tmp[3] csub_3vecs(end0,start0,k0) l0 = cinner_3vecs(k0,k0) csub_3vecs(end1,start1,tmp) l1 = cinner_3vecs(tmp, tmp) #csub_3vecs(end0,start0,k0) #u1 = np.inner(start1-start0,k0)/l0 #u2 = np.inner(end1-start0,k0)/l0 csub_3vecs(start1,start0,tmp) u1 = cinner_3vecs(tmp,k0)/l0 csub_3vecs(end1,start0,tmp) u2 = cinner_3vecs(tmp,k0)/l0 cmul_3vec(u1,k0,tmp) cadd_3vecs(start0,tmp,ps) cmul_3vec(u2,k0,tmp) cadd_3vecs(start0,tmp,pe) #lperp1 = np.sqrt(np.inner(ps-start1,ps-start1)) #lperp2 = np.sqrt(np.inner(pe-end1,pe-end1)) csub_3vecs(ps,start1,ps1) csub_3vecs(pe,end1,pe1) lperp1 = sqrt(cinner_3vecs(ps1,ps1)) lperp2 = sqrt(cinner_3vecs(pe1,pe1)) if lperp1+lperp2 > 0.: return (lperp1*lperp1+lperp2*lperp2)/(lperp1+lperp2) else: return 0. def lee_angle_distance(start0, end0, start1, end1): ''' Calculates angle distance metric for the distance between two line segments Based on Lee , Han & Whang SIGMOD07. This function assumes that norm(end0-start0)>norm(end1-start1) i.e. that the first segment will be bigger than the second one. Parameters ---------- start0 : float array(3,) end0 : float array(3,) start1 : float array(3,) end1 : float array(3,) Returns ------- angle_distance : float Notes ----- l_0 = np.inner(end0-start0,end0-start0) l_1 = np.inner(end1-start1,end1-start1) cos_theta_squared = np.inner(end0-start0,end1-start1)**2/ (l_0*l_1) return np.sqrt((1-cos_theta_squared)*l_1) Examples -------- >>> lee_angle_distance([0,0,0],[1,0,0],[3,4,5],[5,4,3]) 2.0 ''' cdef cnp.ndarray[cnp.float32_t, ndim=1] fvec1,fvec2,fvec3,fvec4 fvec1 = as_float_3vec(start0) fvec2 = as_float_3vec(end0) fvec3 = as_float_3vec(start1) fvec4 = as_float_3vec(end1) return clee_angle_distance(fvec1.data,fvec2.data,fvec3.data,fvec4.data) cdef float clee_angle_distance(float *start0, float *end0,float *start1, float *end1): ''' This function assumes that norm(end0-start0)>norm(end1-start1) ''' cdef: float l0,l1,ltmp,cos_theta_squared float *s_tmp,*e_tmp,k0[3],k1[3],tmp[3] csub_3vecs(end0,start0,k0) l0 = cinner_3vecs(k0,k0) #print l0 csub_3vecs(end1,start1,k1) l1 = cinner_3vecs(k1, k1) #print l1 ltmp=cinner_3vecs(k0,k1) cos_theta_squared = (ltmp*ltmp)/ (l0*l1) #print cos_theta_squared return sqrt((1-cos_theta_squared)*l1) def approx_polygon_track(xyz,alpha=0.392): ''' Fast and simple trajectory approximation algorithm by Eleftherios and Ian It will reduce the number of points of the track by keeping intact the start and endpoints of the track and trying to remove as many points as possible without distorting much the shape of the track Parameters ---------- xyz : array(N,3) initial trajectory alpha : float smoothing parameter (<0.392 smoother, >0.392 rougher) if the trajectory was a smooth circle then with alpha =0.393 ~=pi/8. the circle would be approximated with an decahexagon if alpha = 0.7853 ~=pi/4. with an octagon. Returns ------- characteristic_points: list of M array(3,) points Examples -------- Approximating a helix: >>> t=np.linspace(0,1.75*2*np.pi,100) >>> x = np.sin(t) >>> y = np.cos(t) >>> z = t >>> xyz=np.vstack((x,y,z)).T >>> xyza = approx_polygon_track(xyz) >>> len(xyza) < len(xyz) True Notes ----- Assuming that a good approximation for a circle is an octagon then that means that the points of the octagon will have angle alpha = 2*pi/8 = pi/4 . We calculate the angle between every two neighbour segments of a trajectory and if the angle is higher than pi/4 we choose that point as a characteristic point otherwise we move at the next point. ''' cdef : int mid_index cnp.ndarray[cnp.float32_t, ndim=2] track float *fvec0,*fvec1,*fvec2 object characteristic_points size_t t_len double angle,tmp float vec0[3],vec1[3] angle=alpha track = np.ascontiguousarray(xyz, dtype=f32_dt) t_len=len(track) characteristic_points=[track[0]] mid_index = 1 angle=0 while mid_index < t_len-1: #fvec0 = as_float_3vec(track[mid_index-1]) #track[0].data fvec0 = asfp(track[mid_index-1]) fvec1 = asfp(track[mid_index]) fvec2 = asfp(track[mid_index+1]) #csub_3vecs(fvec1.data,fvec0.data,vec0) csub_3vecs(fvec1,fvec0,vec0) csub_3vecs(fvec2,fvec1,vec1) tmp=fabs(acos(cinner_3vecs(vec0,vec1)/(cnorm_3vec(vec0)*cnorm_3vec(vec1)))) if dpy_isnan(tmp) : angle+=0. else: angle+=tmp if angle > alpha: characteristic_points.append(track[mid_index]) angle=0 mid_index+=1 characteristic_points.append(track[-1]) return np.array(characteristic_points) def approximate_mdl_trajectory(xyz, alpha=1.): ''' Implementation of Lee et al Approximate Trajectory Partitioning Algorithm This is base on the minimum description length principle Parameters ---------- xyz : array(N,3) initial trajectory alpha : float smoothing parameter (>1 smoother, <1 rougher) Returns ------- characteristic_points : list of M array(3,) points ''' cdef : int start_index,length,current_index, i double cost_par,cost_nopar,alphac object characteristic_points size_t t_len cnp.ndarray[cnp.float32_t, ndim=2] track float tmp[3] cnp.ndarray[cnp.float32_t, ndim=1] fvec1,fvec2,fvec3,fvec4 track = np.ascontiguousarray(xyz, dtype=f32_dt) t_len=len(track) alphac=alpha characteristic_points=[xyz[0]] start_index = 0 length = 2 #print t_len while start_index+length < t_len-1: current_index = start_index+length fvec1 = as_float_3vec(track[start_index]) fvec2 = as_float_3vec(track[current_index]) # L(H) csub_3vecs(fvec2.data,fvec1.data,tmp) cost_par=dpy_log2(sqrt(cinner_3vecs(tmp,tmp))) cost_nopar=0 #print start_index,current_index # L(D|H) #for i in range(start_index+1,current_index):#+1): for i in range(start_index,current_index+1): #print i fvec3 = as_float_3vec(track[i]) fvec4 = as_float_3vec(track[i+1]) cost_par += dpy_log2(clee_perpendicular_distance(fvec3.data,fvec4.data,fvec1.data,fvec2.data)) cost_par += dpy_log2(clee_angle_distance(fvec3.data,fvec4.data,fvec1.data,fvec2.data)) csub_3vecs(fvec4.data,fvec3.data,tmp) cost_nopar += dpy_log2(cinner_3vecs(tmp,tmp)) cost_nopar /= 2 #print cost_par, cost_nopar, start_index,length if alphac*cost_par>cost_nopar: characteristic_points.append(track[current_index-1]) start_index = current_index-1 length = 2 else: length+=1 characteristic_points.append(track[-1]) return np.array(characteristic_points) def intersect_segment_cylinder(sa,sb,p,q,r): ''' Intersect Segment S(t) = sa +t(sb-sa), 0 <=t<= 1 against cylinder specified by p,q and r See p.197 from Real Time Collision Detection by C. Ericson Examples -------- Define cylinder using a segment defined by >>> p=np.array([0,0,0],dtype=np.float32) >>> q=np.array([1,0,0],dtype=np.float32) >>> r=0.5 Define segment >>> sa=np.array([0.5,1 ,0],dtype=np.float32) >>> sb=np.array([0.5,-1,0],dtype=np.float32) Intersection >>> intersect_segment_cylinder(sa, sb, p, q, r) (1.0, 0.25, 0.75) ''' cdef: float *csa,*csb,*cp,*cq float cr float ct[2] csa = asfp(sa) csb = asfp(sb) cp = asfp(p) cq = asfp(q) cr=r ct[0]=-100 ct[1]=-100 tmp = cintersect_segment_cylinder(csa,csb,cp, cq, cr, ct) return tmp, ct[0], ct[1] cdef float cintersect_segment_cylinder(float *sa,float *sb,float *p, float *q, float r, float *t): ''' Intersect Segment S(t) = sa +t(sb-sa), 0 <=t<= 1 against cylinder specified by p,q and r Look p.197 from Real Time Collision Detection C. Ericson Returns ------- inter : bool 0 no intersection 1 intersection ''' cdef: float d[3],m[3],n[3] float md,nd,dd, nn, mn, a, k, c,b, discr float epsilon_float=5.96e-08 csub_3vecs(q,p,d) csub_3vecs(sa,p,m) csub_3vecs(sb,sa,n) md=cinner_3vecs(m,d) nd=cinner_3vecs(n,d) dd=cinner_3vecs(d,d) #test if segment fully outside either endcap of cylinder if md < 0. and md + nd < 0.: return 0 #segment outside p side if md > dd and md + nd > dd: return 0 #segment outside q side nn=cinner_3vecs(n,n) mn=cinner_3vecs(m,n) a=dd*nn-nd*nd k=cinner_3vecs(m,m) -r*r c=dd*k-md*md if fabs(a) < epsilon_float: #segment runs parallel to cylinder axis if c>0.: return 0. # segment lies outside cylinder if md < 0.: t[0]=-mn/nn # intersect against p endcap elif md > dd : t[0]=(nd-mn)/nn # intersect against q endcap else: t[0]=0. # lies inside cylinder return 1 b=dd*mn -nd*md discr=b*b-a*c if discr < 0.: return 0. # no real roots ; no intersection t[0]=(-b-sqrt(discr))/a t[1]=(-b+sqrt(discr))/a if t[0]<0. or t[0] > 1. : return 0. # intersection lies outside segment if md + t[0]* nd < 0.: #intersection outside cylinder on 'p' side if nd <= 0. : return 0. # segment pointing away from endcap t[0]=-md/nd #keep intersection if Dot(S(t)-p,S(t)-p) <= r^2 if k+2*t[0]*(mn+t[0]*nn) <=0.: return 1. elif md+t[0]*nd > dd : #intersection outside cylinder on 'q' side if nd >= 0.: return 0. # segment pointing away from endcap t[0]= (dd-md)/nd #keep intersection if Dot(S(t)-q,S(t)-q) <= r^2 if k+dd-2*md+t[0]*(2*(mn-nd)+t[0]*nn) <= 0.: return 1. # segment intersects cylinder between the endcaps; t is correct return 1. def point_segment_sq_distance(a, b, c): ''' Calculate the squared distance from a point c to a finite line segment ab. Examples -------- >>> a=np.array([0,0,0], dtype=np.float32) >>> b=np.array([1,0,0], dtype=np.float32) >>> c=np.array([0,1,0], dtype=np.float32) >>> point_segment_sq_distance(a, b, c) 1.0 >>> c = np.array([0,3,0], dtype=np.float32) >>> point_segment_sq_distance(a,b,c) 9.0 >>> c = np.array([-1,1,0], dtype=np.float32) >>> point_segment_sq_distance(a, b, c) 2.0 ''' cdef: float *ca,*cb,*cc float cr float ct[2] ca = asfp(a) cb = asfp(b) cc = asfp(c) return cpoint_segment_sq_dist(ca, cb, cc) @cython.cdivision(True) cdef inline float cpoint_segment_sq_dist(float * a, float * b, float * c) nogil: ''' Calculate the squared distance from a point c to a line segment ab. ''' cdef: float ab[3],ac[3],bc[3] float e,f csub_3vecs(b,a,ab) csub_3vecs(c,a,ac) csub_3vecs(c,b,bc) e = cinner_3vecs(ac, ab) #Handle cases where c projects outside ab if e <= 0.: return cinner_3vecs(ac, ac) f = cinner_3vecs(ab, ab) if e >= f : return cinner_3vecs(bc, bc) #Handle case where c projects onto ab return cinner_3vecs(ac, ac) - e * e / f def track_dist_3pts(tracka,trackb): ''' Calculate the euclidean distance between two 3pt tracks Both direct and flip distances are calculated but only the smallest is returned Parameters ---------- a : array, shape (3,3) a three point track b : array, shape (3,3) a three point track Returns ------- dist :float Examples -------- >>> a = np.array([[0,0,0],[1,0,0,],[2,0,0]]) >>> b = np.array([[3,0,0],[3.5,1,0],[4,2,0]]) >>> c = track_dist_3pts(a, b) >>> print('%.6f' % c) 2.721573 ''' cdef cnp.ndarray[cnp.float32_t, ndim=2] a,b cdef float d[2] a=np.ascontiguousarray(tracka,dtype=f32_dt) b=np.ascontiguousarray(trackb,dtype=f32_dt) track_direct_flip_3dist(asfp(a[0]),asfp(a[1]),asfp(a[2]), asfp(b[0]),asfp(b[1]),asfp(b[2]),d) if d[0]rows out[1]=distf/rows @cython.cdivision(True) cdef inline void track_direct_flip_3dist(float *a1, float *b1,float *c1,float *a2, float *b2, float *c2, float *out) nogil: ''' Calculate the euclidean distance between two 3pt tracks both direct and flip are given as output Parameters ---------- a1,b1,c1 : 3 float[3] arrays representing the first track a2,b2,c2 : 3 float[3] arrays representing the second track Returns ------- out : a float[2] array having the euclidean distance and the fliped euclidean distance ''' cdef: int i float tmp1=0,tmp2=0,tmp3=0,tmp1f=0,tmp3f=0 #for i in range(3): for i from 0<=i<3: tmp1=tmp1+(a1[i]-a2[i])*(a1[i]-a2[i]) tmp2=tmp2+(b1[i]-b2[i])*(b1[i]-b2[i]) tmp3=tmp3+(c1[i]-c2[i])*(c1[i]-c2[i]) tmp1f=tmp1f+(a1[i]-c2[i])*(a1[i]-c2[i]) tmp3f=tmp3f+(c1[i]-a2[i])*(c1[i]-a2[i]) out[0]=(sqrt(tmp1)+sqrt(tmp2)+sqrt(tmp3))/3.0 out[1]=(sqrt(tmp1f)+sqrt(tmp2)+sqrt(tmp3f))/3.0 #out[0]=(tmp1+tmp2+tmp3)/3.0 #out[1]=(tmp1f+tmp2+tmp3f)/3.0 ctypedef struct LSC_Cluster: long *indices float *hidden long N @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def local_skeleton_clustering(tracks, d_thr=10): r"""Efficient tractography clustering Every track can needs to have the same number of points. Use `dipy.tracking.metrics.downsample` to restrict the number of points Parameters ---------- tracks : sequence of tracks as arrays, shape (N,3) .. (N,3) where N=points d_thr : float average euclidean distance threshold Returns ------- C : dict Clusters. Examples -------- >>> tracks=[np.array([[0,0,0],[1,0,0,],[2,0,0]]), ... np.array([[3,0,0],[3.5,1,0],[4,2,0]]), ... np.array([[3.2,0,0],[3.7,1,0],[4.4,2,0]]), ... np.array([[3.4,0,0],[3.9,1,0],[4.6,2,0]]), ... np.array([[0,0.2,0],[1,0.2,0],[2,0.2,0]]), ... np.array([[2,0.2,0],[1,0.2,0],[0,0.2,0]]), ... np.array([[0,0,0],[0,1,0],[0,2,0]])] >>> C = local_skeleton_clustering(tracks, d_thr=0.5) Notes ----- The distance calculated between two tracks:: t_1 t_2 0* a *0 \ | \ | 1* | | b *1 | \ 2* \ c *2 is equal to $(a+b+c)/3$ where $a$ the euclidean distance between ``t_1[0]`` and ``t_2[0]``, $b$ between ``t_1[1]`` and ``t_2[1]`` and $c$ between ``t_1[2]`` and ``t_2[2]``. Also the same with t2 flipped (so ``t_1[0]`` compared to ``t_2[2]`` etc). Visualization: It is possible to visualize the clustering C from the example above using the fvtk module:: from dipy.viz import fvtk r=fvtk.ren() for c in C: color=np.random.rand(3) for i in C[c]['indices']: fvtk.add(r,fvtk.line(tracks[i],color)) fvtk.show(r) See Also -------- dipy.tracking.metrics.downsample """ cdef: cnp.ndarray[cnp.float32_t, ndim=2] track LSC_Cluster *cluster long lent = 0,lenC = 0, dim = 0, points=0 long i=0, j=0, c=0, i_k=0, rows=0 ,cit=0 float *ptr, *hid, *alld float d[2],m_d,cd_thr long *flip points=len(tracks[0]) dim = points*3 rows = points cd_thr = d_thr #Allocate and copy memory for first cluster cluster=realloc(NULL,sizeof(LSC_Cluster)) cluster[0].indices=realloc(NULL,sizeof(long)) cluster[0].hidden=realloc(NULL,dim*sizeof(float)) cluster[0].indices[0]=0 track=np.ascontiguousarray(tracks[0],dtype=f32_dt) ptr=track.data for i from 0<=irealloc(NULL,dim*sizeof(float)) #Work with the rest of the tracks lent=len(tracks) for it in range(1,lent): track=np.ascontiguousarray(tracks[it],dtype=f32_dt) ptr=track.data cit=it with nogil: alld=calloc(lenC,sizeof(float)) flip=calloc(lenC,sizeof(long)) for k from 0<=kcluster[k].N #track_direct_flip_3dist(&ptr[0],&ptr[3],&ptr[6],&hid[0],&hid[3],&hid[6],d) #track_direct_flip_3dist(ptr,ptr+3,ptr+6,hid,hid+3,hid+6,d) track_direct_flip_dist(ptr, hid,rows,d) if d[1]realloc(cluster[i_k].indices,cluster[i_k].N*sizeof(long)) cluster[i_k].indices[cluster[i_k].N-1]=cit else:#New cluster added lenC+=1 cluster=realloc(cluster,lenC*sizeof(LSC_Cluster)) cluster[lenC-1].indices=realloc(NULL,sizeof(long)) cluster[lenC-1].hidden=realloc(NULL,dim*sizeof(float)) cluster[lenC-1].indices[0]=cit for i from 0<=i>> tracks=[np.array([[0,0,0],[1,0,0,],[2,0,0]]), ... np.array([[3,0,0],[3.5,1,0],[4,2,0]]), ... np.array([[3.2,0,0],[3.7,1,0],[4.4,2,0]]), ... np.array([[3.4,0,0],[3.9,1,0],[4.6,2,0]]), ... np.array([[0,0.2,0],[1,0.2,0],[2,0.2,0]]), ... np.array([[2,0.2,0],[1,0.2,0],[0,0.2,0]]), ... np.array([[0,0,0],[0,1,0],[0,2,0]])] >>> C=local_skeleton_clustering_3pts(tracks,d_thr=0.5) Notes ----- It is possible to visualize the clustering C from the example above using the fvtk module:: r=fvtk.ren() for c in C: color=np.random.rand(3) for i in C[c]['indices']: fvtk.add(r,fos.line(tracks[i],color)) fvtk.show(r) ''' cdef : cnp.ndarray[cnp.float32_t, ndim=2] track cnp.ndarray[cnp.float32_t, ndim=2] h int lent,k,it float d[2] #float d_sq=d_thr**2 lent=len(tracks) #Network C C={0:{'indices':[0],'hidden':tracks[0].copy(),'N':1}} ts=np.zeros((3,3),dtype=np.float32) #for (it,t) in enumerate(tracks[1:]): for it in range(1,lent): track=np.ascontiguousarray(tracks[it],dtype=f32_dt) lenC=len(C.keys()) #if it%1000==0: # print it,lenC alld=np.zeros(lenC) flip=np.zeros(lenC) for k in range(lenC): h=np.ascontiguousarray(C[k]['hidden']/C[k]['N'],dtype=f32_dt) #print track #print h track_direct_flip_3dist( asfp(track[0]),asfp(track[1]),asfp(track[2]), asfp(h[0]), asfp(h[1]),asfp(h[2]),d) #d=np.sum(np.sqrt(np.sum((t-h)**2,axis=1)))/3.0 #ts[0]=t[-1];ts[1]=t[1];ts[-1]=t[0] #ds=np.sum(np.sqrt(np.sum((ts-h)**2,axis=1)))/3.0 #print d[0],d[1] if d[1]>> tracks=[np.array([[0,0,0],[1,0,0,],[2,0,0]],dtype=np.float32), ... np.array([[3,0,0],[3.5,1,0],[4,2,0]],dtype=np.float32), ... np.array([[3.2,0,0],[3.7,1,0],[4.4,2,0]],dtype=np.float32), ... np.array([[3.4,0,0],[3.9,1,0],[4.6,2,0]],dtype=np.float32), ... np.array([[0,0.2,0],[1,0.2,0],[2,0.2,0]],dtype=np.float32), ... np.array([[2,0.2,0],[1,0.2,0],[0,0.2,0]],dtype=np.float32), ... np.array([[0,0,0],[0,1,0],[0,2,0]],dtype=np.float32), ... np.array([[0.2,0,0],[0.2,1,0],[0.2,2,0]],dtype=np.float32), ... np.array([[-0.2,0,0],[-0.2,1,0],[-0.2,2,0]],dtype=np.float32)] >>> C = larch_3split(tracks, None, 0.5) Here is an example of how to visualize the clustering above:: from dipy.viz import fvtk r=fvtk.ren() fvtk.add(r,fvtk.line(tracks,fvtk.red)) fvtk.show(r) for c in C: color=np.random.rand(3) for i in C[c]['indices']: fos.add(r,fvtk.line(tracks[i],color)) fvtk.show(r) for c in C: fvtk.add(r,fos.line(C[c]['rep3']/C[c]['N'],fos.white)) fvtk.show(r) ''' cdef: cnp.ndarray[cnp.float32_t, ndim=2] track cnp.ndarray[cnp.float32_t, ndim=2] h int lent,k,it float d[2] lent=len(tracks) if indices==None: C={0:{'indices':[0],'rep3':tracks[0].copy(),'N':1}} itrange=range(1,lent) else: C={0:{'indices':[indices[0]],'rep3':tracks[indices[0]].copy(),'N':1}} itrange=indices[1:] ts=np.zeros((3,3),dtype=np.float32) for it in itrange: track=np.ascontiguousarray(tracks[it],dtype=f32_dt) lenC=len(C.keys()) alld=np.zeros(lenC) flip=np.zeros(lenC) for k in range(lenC): h=np.ascontiguousarray(C[k]['rep3']/C[k]['N'],dtype=f32_dt) track_direct_flip_3dist(asfp(track[0]),asfp(track[1]),asfp(track[2]), asfp(h[0]), asfp(h[1]), asfp(h[2]),d) if d[1]>> t=np.random.rand(10,3).astype(np.float32) >>> p=np.array([0.5,0.5,0.5],dtype=np.float32) >>> point_track_sq_distance_check(t,p,2**2) True >>> t=np.array([[0,0,0],[1,1,1],[2,2,2]],dtype='f4') >>> p=np.array([-1,-1.,-1],dtype='f4') >>> point_track_sq_distance_check(t,p,.2**2) False >>> point_track_sq_distance_check(t,p,2**2) True ''' cdef: float *t=track.data float *p=point.data float a[3],b[3] int tlen = len(track) int curr = 0 float dist = 0 int i int intersects = 0 with nogil: for i from 0<=ia,b,p) if dist<=sq_dist_thr: intersects=1 break if intersects==1: return True else: return False def track_roi_intersection_check(cnp.ndarray[float,ndim=2] track, cnp.ndarray[float,ndim=2] roi, double sq_dist_thr): ''' Check if a track is intersecting a region of interest Parameters ---------- track: array,float32, shape (N,3) roi: array,float32, shape (M,3) sq_dist_thr: double, threshold, check squared euclidean distance from every roi point Returns ------- bool: True, if sq_distance <= sq_dist_thr, otherwise False. Examples -------- >>> roi=np.array([[0,0,0],[1,0,0],[2,0,0]],dtype='f4') >>> t=np.array([[0,0,0],[1,1,1],[2,2,2]],dtype='f4') >>> track_roi_intersection_check(t,roi,1) True >>> track_roi_intersection_check(t,np.array([[10,0,0]],dtype='f4'),1) False ''' cdef: float *t=track.data float *r=roi.data float a[3],b[3],p[3] int tlen = len(track) int rlen = len(roi) int curr = 0 int currp = 0 float dist = 0 int i,j int intersects=0 with nogil: for i from 0<=ia,b,p) if dist<=sq_dist_thr: intersects=1 break if intersects==1: break if intersects==1: return True else: return False dipy-0.10.1/dipy/tracking/eudx.py000066400000000000000000000210451263041327500166310ustar00rootroot00000000000000import numpy as np from dipy.tracking import utils from dipy.tracking.propspeed import eudx_both_directions from dipy.data import get_sphere class EuDX(object): '''Euler Delta Crossings Generates tracks with termination criteria defined by a delta function [1]_ and it has similarities with FACT algorithm [2]_ and Basser's method but uses trilinear interpolation. Can be used with any reconstruction method as DTI, DSI, QBI, GQI which can calculate an orientation distribution function and find the local peaks of that function. For example a single tensor model can give you only one peak a dual tensor model 2 peaks and quantitative anisotropy method as used in GQI can give you 3,4,5 or even more peaks. The parameters of the delta function are checking thresholds for the direction propagation magnitude and the angle of propagation. A specific number of seeds is defined randomly and then the tracks are generated for that seed if the delta function returns true. Trilinear interpolation is being used for defining the weights of the propagation. References ------------ .. [1] Garyfallidis, Towards an accurate brain tractography, PhD thesis, University of Cambridge, 2012. .. [2] Mori et al. Three-dimensional tracking of axonal projections in the brain by magnetic resonance imaging. Ann. Neurol. 1999. Notes ----- The coordinate system of the tractography is that of native space of image coordinates not native space world coordinates therefore voxel size is always considered as having size (1,1,1). Therefore, the origin is at the center of the center of the first voxel of the volume and all i,j,k coordinates start from the center of the voxel they represent. ''' def __init__(self, a, ind, seeds, odf_vertices, a_low=0.0239, step_sz=0.5, ang_thr=60., length_thr=0., total_weight=.5, max_points=1000, affine=None): ''' Euler integration with multiple stopping criteria and supporting multiple multiple fibres in crossings [1]_. Parameters ------------ a : array, Shape (I, J, K, Np), magnitude of the peak of a scalar anisotropic function e.g. QA (quantitative anisotropy) where Np is the number of peaks or a different function of shape (I, J, K) e.g FA or GFA. ind : array, shape(x, y, z, Np) indices of orientations of the scalar anisotropic peaks found on the resampling sphere seeds : int or ndarray If an int is specified then that number of random seeds is generated in the volume. If an (N, 3) array of points is given, each of the N points is used as a seed. Seed points should be given in the point space of the track (see ``affine``). The latter is useful when you need to track from specific regions e.g. the white/gray matter interface or a specific ROI e.g. in the corpus callosum. odf_vertices : ndarray, shape (N, 3) sphere points which define a discrete representation of orientations for the peaks, the same for all voxels. Usually the same sphere is used as an input for a reconstruction algorithm e.g. DSI. a_low : float, optional low threshold for QA(typical 0.023) or FA(typical 0.2) or any other anisotropic function step_sz : float, optional euler propagation step size ang_thr : float, optional if turning angle is bigger than this threshold then tracking stops. total_weight : float, optional total weighting threshold max_points : int, optional maximum number of points in a track. Used to stop tracks from looping forever. affine : array (4, 4) optional An affine mapping from the voxel indices of the input data to the point space of the streamlines. That is if ``[x, y, z, 1] == point_space * [i, j, k, 1]``, then the streamline with point ``[x, y, z]`` passes though the center of voxel ``[i, j, k]``. If no point_space is given, the point space will be in voxel coordinates. Returns ------- generator : obj By iterating this generator you can obtain all the streamlines. Examples -------- >>> import nibabel as nib >>> from dipy.reconst.dti import TensorModel, quantize_evecs >>> from dipy.data import get_data, get_sphere >>> from dipy.core.gradients import gradient_table >>> fimg,fbvals,fbvecs = get_data('small_101D') >>> img = nib.load(fimg) >>> affine = img.get_affine() >>> data = img.get_data() >>> gtab = gradient_table(fbvals, fbvecs) >>> model = TensorModel(gtab) >>> ten = model.fit(data) >>> sphere = get_sphere('symmetric724') >>> ind = quantize_evecs(ten.evecs, sphere.vertices) >>> eu = EuDX(a=ten.fa, ind=ind, seeds=100, odf_vertices=sphere.vertices, a_low=.2) >>> tracks = [e for e in eu] Notes ------- This works as an iterator class because otherwise it could fill your entire memory if you generate many tracks. Something very common as you can easily generate millions of tracks if you have many seeds. References ---------- .. [1] E. Garyfallidis (2012), "Towards an accurate brain tractography", PhD thesis, University of Cambridge, UK. ''' self.a = np.array(a, dtype=np.float64, copy=True, order="C") self.ind = np.array(ind, dtype=np.float64, copy=True, order="C") self.a_low = a_low self.ang_thr = ang_thr self.step_sz = step_sz self.length_thr = length_thr self.total_weight = total_weight self.max_points = max_points self.affine = affine if affine is not None else np.eye(4) if len(self.a.shape) == 3: self.a.shape = self.a.shape + (1,) self.ind.shape = self.ind.shape + (1,) # store number of maximum peaks x, y, z, g = self.a.shape self.Np = g self.odf_vertices = np.ascontiguousarray(odf_vertices, dtype='f8') try: self.seed_no = len(seeds) self.seed_list = seeds except TypeError: self.seed_no = seeds self.seed_list = None def __iter__(self): if self.seed_list is not None: inv = np.linalg.inv(self.affine) seed_voxels = np.dot(self.seed_list, inv[:3, :3].T) seed_voxels += inv[:3, 3] else: seed_voxels = None voxel_tracks = self._voxel_tracks(seed_voxels) return utils.move_streamlines(voxel_tracks, self.affine) def _voxel_tracks(self, seed_voxels): ''' This is were all the fun starts ''' if seed_voxels is not None and seed_voxels.dtype != np.float64: # This is a private method so users should never see this error. If # you've reached this error, there is a bug somewhere. raise ValueError("wrong dtype seeds have to be float64") x, y, z, g = self.a.shape edge = np.array([x, y, z], dtype=np.float64) - 1. # for all seeds for i in range(self.seed_no): if seed_voxels is None: seed = np.random.rand(3) * edge else: seed = seed_voxels[i] if np.any(seed < 0.) or np.any(seed > edge): raise ValueError('Seed outside boundaries', seed) seed = np.ascontiguousarray(seed) # for all peaks for ref in range(g): track = eudx_both_directions(seed.copy(), ref, self.a, self.ind, self.odf_vertices, self.a_low, self.ang_thr, self.step_sz, self.total_weight, self.max_points) if track is not None and track.shape[0] > 1: yield track dipy-0.10.1/dipy/tracking/gui_tools.py000066400000000000000000000065611263041327500176760ustar00rootroot00000000000000from warnings import warn # Import traits as optional package try: from traitsui.api import Item, Group, View, ArrayEditor except ImportError: from ..utils.optpkg import OptionalImportError raise OptionalImportError("You must have traits to use this module") from .interfaces import InputData from ..tracking.interfaces import InputData, ShmTrackingInterface I = InputData() iview = I.trait_view() iview.resizable = True iview.width = 600 I.trait_view('traits_view', iview) main_view = View(Group(Group( Item( 'dwi_images' ), Item( 'all_inputs' ), Item( 'min_signal' ), Item( 'seed_roi' ), Item( 'seed_density', editor=ArrayEditor() ), show_border=True), Group( Item( 'smoothing_kernel_type' ), Item( 'smoothing_kernel' ), show_border=True), Group( Item( 'interpolator' ), Item( 'model_type' ), Item( 'sh_order' ), Item( 'Lambda' ), Item( 'sphere_coverage' ), Item( 'min_peak_spacing' ), Item( 'min_relative_peak' ), show_border=True), Group( Item( 'probabilistic' ), show_border=True), Group( #Item( 'integrator' ), Item( 'seed_largest_peak', ), Item( 'track_two_directions' ), Item( 'start_direction', editor=ArrayEditor(), enabled_when='not (seed_largest_peak and ' 'track_two_directions)'), Item( 'fa_threshold' ), Item( 'max_turn_angle' ), show_border=True), Group( Item( 'stop_on_target' ), Item( 'targets' ), show_border=True), Group( Item( 'save_streamlines_to' ), Item( 'save_counts_to' ), show_border=True), orientation = 'vertical'), buttons=['OK', 'Cancel'], width=600, close_result=False, resizable=True, scrollable=True) def gui_track(interface=None): if interface is None: interface = ShmTrackingInterface() if not interface.configure_traits(view=main_view): return if interface.save_streamlines_to == '' and interface.save_counts_to == '': raise IOError('must provide filename where to save results') streamlines = interface.track_shm() if interface.save_streamlines_to and interface.save_counts_to: streamlines = list(streamlines) if interface.save_streamlines_to: interface.save_streamlines(streamlines, interface.save_streamlines_to) if interface.save_counts_to: interface.save_counts(streamlines, interface.save_counts_to) dipy-0.10.1/dipy/tracking/interfaces.py000066400000000000000000000277371263041327500200250ustar00rootroot00000000000000from nose import SkipTest ############################################################################# # Remove this when the module becomes functional again class ThisIsBroken(SkipTest): pass raise ThisIsBroken("this module is undergoing a major overhaul as therefore " "does not currently work") ############################################################################# import pickle import string import os.path as path import numpy as np from scipy.ndimage import convolve # Import traits as optional package try: import traits.api as T except ImportError: from ..utils.optpkg import OptionalImportError raise OptionalImportError("You must have traits to use this module") import nibabel as nib from nibabel.trackvis import write, empty_header from ..reconst.shm import (SlowAdcOpdfModel, MonoExpOpdfModel, QballOdfModel, normalize_data, ClosestPeakSelector, ResidualBootstrapWrapper, hat, lcr_matrix, bootstrap_data_array, NND_ClosestPeakSelector) from ..reconst.interpolate import (TriLinearInterpolator, NearestNeighborInterpolator) from ..tracking.integration import (BoundryIntegrator, FixedStepIntegrator, generate_streamlines) from ..tracking.utils import (seeds_from_mask, target, merge_streamlines, density_map) from ..io.bvectxt import (read_bvec_file, orientation_to_string, reorient_vectors) nifti_file = T.File(filter=['Nifti Files', '*.nii.gz', 'Nifti Pair or Analyze Files', '*.img.gz', 'All Files', '*']) def read_roi(file, threshold=0, shape=None): img = nib.load(file) if shape is not None: if shape != img.shape: raise IOError('The roi image does not have the right shape, '+ 'expecting '+str(shape)+' got '+str(img.shape)) img_data = img.get_data() if img_data.max() > 1: raise ValueError('this does not seem to be a mask') mask = img_data > threshold return mask class InputData(T.HasTraits): dwi_images = nifti_file fa_file = nifti_file bvec_file = T.File(filter=['*.bvec']) bvec_orientation = T.String('IMG', minlen=3, maxlen=3) min_signal = T.Float(1) @T.on_trait_change('dwi_images') def update_files(self): dir, file = path.split(self.dwi_images) base = string.split(file, path.extsep, 1)[0] if self.fa_file == '': self.fa_file = path.join(dir, base+'_fa.nii.gz') if self.bvec_file == '': self.bvec_file = path.join(dir, base+'.bvec') def read_data(self): data_img = nib.load(self.dwi_images) affine = data_img.get_affine() voxel_size = data_img.get_header().get_zooms() voxel_size = voxel_size[:3] fa_img = nib.load(self.fa_file) assert data_img.shape[:-1] == fa_img.shape bvec, bval = read_bvec_file(self.bvec_file) data_ornt = nib.io_orientation(affine) if self.bvec_orientation != 'IMG': bvec = reorient_vectors(bvec, self.bvec_orientation, data_ornt) fa = fa_img.get_data() data = data_img.get_data() return data, voxel_size, affine, fa, bvec, bval class GausianKernel(T.HasTraits): sigma = T.Float(1, label='sigma (in voxels)') shape = T.Array('int', shape=(3,), value=[1,1,1], label='shape (in voxels)') def get_kernel(self): raise NotImplementedError #will get to this soon class BoxKernel(T.HasTraits): shape = T.Array('int', shape=(3,), value=[3,3,3], label='shape (in voxels)') def get_kernel(self): kernel = np.ones(self.shape)/self.shape.prod() kernel.shape += (1,) return kernel def lazy_index(index): """Produces a lazy index Returns a slice that can be used for indexing an array, if no slice can be made index is returned as is. """ index = np.asarray(index) assert index.ndim == 1 if index.dtype == np.bool: index = index.nonzero()[0] if len(index) == 1: return slice(index[0], index[0] + 1) step = np.unique(np.diff(index)) if len(step) != 1 or step[0] == 0: return index else: return slice(index[0], index[-1] + 1, step[0]) def closest_start(seeds, peak_finder, best_start): starts = np.empty(seeds.shape) best_start = np.asarray(best_start, 'float') best_start /= np.sqrt((best_start*best_start).sum()) for i in xrange(len(seeds)): try: starts[i] = peak_finder.next_step(seeds[i], best_start) except StopIteration: starts[i] = best_start return starts all_kernels = {None:None,'Box':BoxKernel,'Gausian':GausianKernel} all_interpolators = {'NearestNeighbor':NearestNeighborInterpolator, 'TriLinear':TriLinearInterpolator} all_shmodels = {'QballOdf':QballOdfModel, 'SlowAdcOpdf':SlowAdcOpdfModel, 'MonoExpOpdf':MonoExpOpdfModel} all_integrators = {'Boundry':BoundryIntegrator, 'FixedStep':FixedStepIntegrator} class ShmTrackingInterface(T.HasStrictTraits): dwi_images = T.DelegatesTo('all_inputs') all_inputs = T.Instance(InputData, args=()) min_signal = T.DelegatesTo('all_inputs') seed_roi = nifti_file seed_density = T.Array(dtype='int', shape=(3,), value=[1,1,1]) smoothing_kernel_type = T.Enum(None, all_kernels.keys()) smoothing_kernel = T.Instance(T.HasTraits) @T.on_trait_change('smoothing_kernel_type') def set_smoothing_kernel(self): if self.smoothing_kernel_type is not None: kernel_factory = all_kernels[self.smoothing_kernel_type] self.smoothing_kernel = kernel_factory() else: self.smoothing_kernel = None interpolator = T.Enum('NearestNeighbor', all_interpolators.keys()) model_type = T.Enum('SlowAdcOpdf', all_shmodels.keys()) sh_order = T.Int(4) Lambda = T.Float(0, desc="Smoothing on the odf") sphere_coverage = T.Int(5) min_peak_spacing = T.Range(0.,1,np.sqrt(.5), desc="as a dot product") min_relative_peak = T.Range(0.,1,.25) probabilistic = T.Bool(False, label='Probabilistic (Residual Bootstrap)') bootstrap_input = T.Bool(False) bootstrap_vector = T.Array(dtype='int', value=[]) #integrator = Enum('Boundry', all_integrators.keys()) seed_largest_peak = T.Bool(False, desc="Ignore sub-peaks and start follow " "the largest peak at each seed") start_direction = T.Array(dtype='float', shape=(3,), value=[0,0,1], desc="Prefered direction from seeds when " "multiple directions are available. " "(Mostly) doesn't matter when 'seed " "largest peak' and 'track two directions' " "are both True", label="Start direction (RAS)") track_two_directions = T.Bool(False) fa_threshold = T.Float(1.0) max_turn_angle = T.Range(0.,90,0) stop_on_target = T.Bool(False) targets = T.List(nifti_file, []) #will be set later voxel_size = T.Array(dtype='float', shape=(3,)) affine = T.Array(dtype='float', shape=(4,4)) shape = T.Tuple((0,0,0)) #set for io save_streamlines_to = T.File('') save_counts_to = nifti_file #io methods def save_streamlines(self, streamlines, save_streamlines_to): trk_hdr = empty_header() voxel_order = orientation_to_string(nib.io_orientation(self.affine)) trk_hdr['voxel_order'] = voxel_order trk_hdr['voxel_size'] = self.voxel_size trk_hdr['vox_to_ras'] = self.affine trk_hdr['dim'] = self.shape trk_tracks = ((ii,None,None) for ii in streamlines) write(save_streamlines_to, trk_tracks, trk_hdr) pickle.dump(self, open(save_streamlines_to + '.p', 'wb')) def save_counts(self, streamlines, save_counts_to): counts = density_map(streamlines, self.shape, self.voxel_size) if counts.max() < 2**15: counts = counts.astype('int16') nib.save(nib.Nifti1Image(counts, self.affine), save_counts_to) #tracking methods def track_shm(self, debug=False): if self.sphere_coverage > 7 or self.sphere_coverage < 1: raise ValueError("sphere coverage must be between 1 and 7") verts, edges, faces = create_half_unit_sphere(self.sphere_coverage) verts, pot = disperse_charges(verts, 10, .3) data, voxel_size, affine, fa, bvec, bval = self.all_inputs.read_data() self.voxel_size = voxel_size self.affine = affine self.shape = fa.shape model_type = all_shmodels[self.model_type] model = model_type(self.sh_order, bval, bvec, self.Lambda) model.set_sampling_points(verts, edges) data = np.asarray(data, dtype='float', order='C') if self.smoothing_kernel is not None: kernel = self.smoothing_kernel.get_kernel() convolve(data, kernel, out=data) normalize_data(data, bval, self.min_signal, out=data) dmin = data.min() data = data[..., lazy_index(bval > 0)] if self.bootstrap_input: if self.bootstrap_vector.size == 0: n = data.shape[-1] self.bootstrap_vector = np.random.randint(n, size=n) H = hat(model.B) R = lcr_matrix(H) data = bootstrap_data_array(data, H, R, self.bootstrap_vector) data.clip(dmin, out=data) mask = fa > self.fa_threshold targets = [read_roi(tgt, shape=self.shape) for tgt in self.targets] if self.stop_on_target: for target_mask in targets: mask = mask & ~target_mask seed_mask = read_roi(self.seed_roi, shape=self.shape) seeds = seeds_from_mask(seed_mask, self.seed_density, voxel_size) if self.interpolator == 'NearestNeighbor' and not self.probabilistic and not debug: using_optimze = True peak_finder = NND_ClosestPeakSelector(model, data, mask, voxel_size) else: using_optimze = False interpolator_type = all_interpolators[self.interpolator] interpolator = interpolator_type(data, voxel_size, mask) peak_finder = ClosestPeakSelector(model, interpolator) #Set peak_finder parameters for start steps peak_finder.angle_limit = 90 model.peak_spacing = self.min_peak_spacing if self.seed_largest_peak: model.min_relative_peak = 1 else: model.min_relative_peak = self.min_relative_peak data_ornt = nib.io_orientation(self.affine) best_start = reorient_vectors(self.start_direction, 'ras', data_ornt) start_steps = closest_start(seeds, peak_finder, best_start) if self.probabilistic: interpolator = ResidualBootstrapWrapper(interpolator, model.B, min_signal=dmin) peak_finder = ClosestPeakSelector(model, interpolator) elif using_optimze and self.seed_largest_peak: peak_finder.reset_cache() #Reset peak_finder parameters for tracking peak_finder.angle_limit = self.max_turn_angle model.peak_spacing = self.min_peak_spacing model.min_relative_peak = self.min_relative_peak integrator = BoundryIntegrator(voxel_size, overstep=.1) streamlines = generate_streamlines(peak_finder, integrator, seeds, start_steps) if self.track_two_directions: start_steps = -start_steps streamlinesB = generate_streamlines(peak_finder, integrator, seeds, start_steps) streamlines = merge_streamlines(streamlines, streamlinesB) for target_mask in targets: streamlines = target(streamlines, target_mask, voxel_size) return streamlines dipy-0.10.1/dipy/tracking/learning.py000066400000000000000000000072161263041327500174670ustar00rootroot00000000000000''' Learning algorithms for tractography''' import numpy as np import dipy.tracking.distances as pf def detect_corresponding_tracks(indices,tracks1,tracks2): ''' Detect corresponding tracks from list tracks1 to list tracks2 where tracks1 & tracks2 are lists of tracks Parameters ------------ indices : sequence of indices of tracks1 that are to be detected in tracks2 tracks1 : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) tracks2 : sequence of tracks as arrays, shape (M1,3) .. (Mm,3) Returns --------- track2track : array (N,2) where N is len(indices) of int it shows the correspondance in the following way: the first column is the current index in tracks1 the second column is the corresponding index in tracks2 Examples ---------- >>> import numpy as np >>> import dipy.tracking.learning as tl >>> A=np.array([[0,0,0],[1,1,1],[2,2,2]]) >>> B=np.array([[1,0,0],[2,0,0],[3,0,0]]) >>> C=np.array([[0,0,-1],[0,0,-2],[0,0,-3]]) >>> bundle1=[A,B,C] >>> bundle2=[B,A] >>> indices=[0,1] >>> arr=tl.detect_corresponding_tracks(indices,bundle1,bundle2) Notes ------- To find the corresponding tracks we use mam_distances with 'avg' option. Then we calculate the argmin of all the calculated distances and return it for every index. (See 3rd column of arr in the example given below. ''' li=len(indices) track2track=np.zeros((li,2)) cnt=0 for i in indices: rt=[pf.mam_distances(tracks1[i],t,'avg') for t in tracks2] rt=np.array(rt) track2track[cnt]=np.array([i,rt.argmin()]) cnt+=1 return track2track.astype(int) def detect_corresponding_tracks_plus(indices,tracks1,indices2,tracks2): ''' Detect corresponding tracks from 1 to 2 where tracks1 & tracks2 are sequences of tracks Parameters ------------ indices : sequence of indices of tracks1 that are to be detected in tracks2 tracks1 : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) indices2 : sequence of indices of tracks2 in the initial brain tracks2 : sequence of tracks as arrays, shape (M1,3) .. (Mm,3) Returns --------- track2track : array (N,2) where N is len(indices) of int showing the correspondance in th following way the first colum is the current index of tracks1 the second column is the corresponding index in tracks2 Examples ---------- >>> import numpy as np >>> import dipy.tracking.learning as tl >>> A=np.array([[0,0,0],[1,1,1],[2,2,2]]) >>> B=np.array([[1,0,0],[2,0,0],[3,0,0]]) >>> C=np.array([[0,0,-1],[0,0,-2],[0,0,-3]]) >>> bundle1=[A,B,C] >>> bundle2=[B,A] >>> indices=[0,1] >>> indices2=indices >>> arr=tl.detect_corresponding_tracks_plus(indices,bundle1,indices2,bundle2) Notes ------- To find the corresponding tracks we use mam_distances with 'avg' option. Then we calculate the argmin of all the calculated distances and return it for every index. (See 3rd column of arr in the example given below. See also ---------- distances.mam_distances ''' li=len(indices) track2track=np.zeros((li,2)) cnt=0 for i in indices: rt=[pf.mam_distances(tracks1[i],t,'avg') for t in tracks2] rt=np.array(rt) track2track[cnt]=np.array([i,indices2[rt.argmin()]]) cnt+=1 return track2track.astype(int) dipy-0.10.1/dipy/tracking/life.py000066400000000000000000000472161263041327500166130ustar00rootroot00000000000000""" This is an implementation of the Linear Fascicle Evaluation (LiFE) algorithm described in: Pestilli, F., Yeatman, J, Rokem, A. Kay, K. and Wandell B.A. (2014). Validation and statistical inference in living connectomes. Nature Methods 11: 1058-1063. doi:10.1038/nmeth.3098 """ import numpy as np import scipy.sparse as sps import scipy.linalg as la from dipy.reconst.base import ReconstModel, ReconstFit from dipy.utils.six.moves import range from dipy.tracking.utils import unique_rows from dipy.tracking.streamline import transform_streamlines from dipy.tracking.vox2track import _voxel2streamline import dipy.data as dpd import dipy.core.optimize as opt def gradient(f): """ Return the gradient of an N-dimensional array. The gradient is computed using central differences in the interior and first differences at the boundaries. The returned gradient hence has the same shape as the input array. Parameters ---------- f : array_like An N-dimensional array containing samples of a scalar function. Returns ------- gradient : ndarray N arrays of the same shape as `f` giving the derivative of `f` with respect to each dimension. Examples -------- >>> x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float) >>> gradient(x) array([ 1. , 1.5, 2.5, 3.5, 4.5, 5. ]) >>> gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float)) [array([[ 2., 2., -1.], [ 2., 2., -1.]]), array([[ 1. , 2.5, 4. ], [ 1. , 1. , 1. ]])] Note ---- This is a simplified implementation of gradient that is part of numpy 1.8. In order to mitigate the effects of changes added to this implementation in version 1.9 of numpy, we include this implementation here. """ f = np.asanyarray(f) N = len(f.shape) # number of dimensions dx = [1.0]*N # use central differences on interior and first differences on endpoints outvals = [] # create slice objects --- initially all are [:, :, ..., :] slice1 = [slice(None)]*N slice2 = [slice(None)]*N slice3 = [slice(None)]*N for axis in range(N): # select out appropriate parts for this dimension out = np.empty_like(f) slice1[axis] = slice(1, -1) slice2[axis] = slice(2, None) slice3[axis] = slice(None, -2) # 1D equivalent -- out[1:-1] = (f[2:] - f[:-2])/2.0 out[slice1] = (f[slice2] - f[slice3])/2.0 slice1[axis] = 0 slice2[axis] = 1 slice3[axis] = 0 # 1D equivalent -- out[0] = (f[1] - f[0]) out[slice1] = (f[slice2] - f[slice3]) slice1[axis] = -1 slice2[axis] = -1 slice3[axis] = -2 # 1D equivalent -- out[-1] = (f[-1] - f[-2]) out[slice1] = (f[slice2] - f[slice3]) # divide by step size outvals.append(out / dx[axis]) # reset the slice object in this dimension to ":" slice1[axis] = slice(None) slice2[axis] = slice(None) slice3[axis] = slice(None) if N == 1: return outvals[0] else: return outvals def streamline_gradients(streamline): """ Calculate the gradients of the streamline along the spatial dimension Parameters ---------- streamline : array-like of shape (n, 3) The 3d coordinates of a single streamline Returns ------- Array of shape (3, n): Spatial gradients along the length of the streamline. """ return np.array(gradient(np.asarray(streamline))[0]) def grad_tensor(grad, evals): """ Calculate the 3 by 3 tensor for a given spatial gradient, given a canonical tensor shape (also as a 3 by 3), pointing at [1,0,0] Parameters ---------- grad : 1d array of shape (3,) The spatial gradient (e.g between two nodes of a streamline). evals: 1d array of shape (3,) The eigenvalues of a canonical tensor to be used as a response function. """ # This is the rotation matrix from [1, 0, 0] to this gradient of the sl: R = la.svd(np.matrix(grad), overwrite_a=True)[2] # This is the 3 by 3 tensor after rotation: T = np.dot(np.dot(R, np.diag(evals)), R.T) return T def streamline_tensors(streamline, evals=[0.001, 0, 0]): """ The tensors generated by this fiber. Parameters ---------- streamline : array-like of shape (n, 3) The 3d coordinates of a single streamline evals : iterable with three entries The estimated eigenvalues of a single fiber tensor. (default: [0.001, 0, 0]). Returns ------- An n_nodes by 3 by 3 array with the tensor for each node in the fiber. Note ---- Estimates of the radial/axial diffusivities may rely on empirical measurements (for example, the AD in the Corpus Callosum), or may be based on a biophysical model of some kind. """ grad = streamline_gradients(streamline) # Preallocate: tensors = np.empty((grad.shape[0], 3, 3)) for grad_idx, this_grad in enumerate(grad): tensors[grad_idx] = grad_tensor(this_grad, evals) return tensors def streamline_signal(streamline, gtab, evals=[0.001, 0, 0]): """ The signal from a single streamline estimate along each of its nodes. Parameters ---------- streamline : a single streamline gtab : GradientTable class instance evals : list of length 3 (optional. Default: [0.001, 0, 0]) The eigenvalues of the canonical tensor used as an estimate of the signal generated by each node of the streamline. """ # Gotta have those tensors: tensors = streamline_tensors(streamline, evals) sig = np.empty((len(streamline), np.sum(~gtab.b0s_mask))) # Extract them once: bvecs = gtab.bvecs[~gtab.b0s_mask] bvals = gtab.bvals[~gtab.b0s_mask] for ii, tensor in enumerate(tensors): ADC = np.diag(np.dot(np.dot(bvecs, tensor), bvecs.T)) # Use the Stejskal-Tanner equation with the ADC as input, and S0 = 1: sig[ii] = np.exp(-bvals * ADC) return sig - np.mean(sig) class LifeSignalMaker(object): """ A class for generating signals from streamlines in an efficient and speedy manner. """ def __init__(self, gtab, evals=[0.001, 0, 0], sphere=None): """ Initialize a signal maker Parameters ---------- gtab : GradientTable class instance The gradient table on which the signal is calculated. evals : list of 3 items The eigenvalues of the canonical tensor to use in calculating the signal. n_points : `dipy.core.Sphere` class instance The discrete sphere to use as an approximation for the continuous sphere on which the signal is represented. If integer - we will use an instance of one of the symmetric spheres cached in `dps.get_sphere`. If a 'dipy.core.Sphere' class instance is provided, we will use this object. Default: the :mod:`dipy.data` symmetric sphere with 724 vertices """ if sphere is None: self.sphere = dpd.get_sphere('symmetric724') else: self.sphere = sphere self.gtab = gtab self.evals = evals # Initialize an empty dict to fill with signals for each of the sphere # vertices: self.signal = np.empty((self.sphere.vertices.shape[0], np.sum(~gtab.b0s_mask))) # We'll need to keep track of what we've already calculated: self._calculated = [] def calc_signal(self, xyz): idx = self.sphere.find_closest(xyz) if idx not in self._calculated: bvecs = self.gtab.bvecs[~self.gtab.b0s_mask] bvals = self.gtab.bvals[~self.gtab.b0s_mask] tensor = grad_tensor(self.sphere.vertices[idx], self.evals) ADC = np.diag(np.dot(np.dot(bvecs, tensor), bvecs.T)) sig = np.exp(-bvals * ADC) sig = sig - np.mean(sig) self.signal[idx] = sig self._calculated.append(idx) return self.signal[idx] def streamline_signal(self, streamline): """ Approximate the signal for a given streamline """ grad = streamline_gradients(streamline) sig_out = np.zeros((grad.shape[0], self.signal.shape[-1])) for ii, g in enumerate(grad): sig_out[ii] = self.calc_signal(g) return sig_out def voxel2streamline(streamline, transformed=False, affine=None, unique_idx=None): """ Maps voxels to streamlines and streamlines to voxels, for setting up the LiFE equations matrix Parameters ---------- streamline : list A collection of streamlines, each n by 3, with n being the number of nodes in the fiber. affine : 4 by 4 array (optional) Defines the spatial transformation from streamline to data. Default: np.eye(4) transformed : bool (optional) Whether the streamlines have been already transformed (in which case they don't need to be transformed in here). unique_idx : array (optional). The unique indices in the streamlines Returns ------- v2f, v2fn : tuple of dicts The first dict in the tuple answers the question: Given a voxel (from the unique indices in this model), which fibers pass through it? The second answers the question: Given a streamline, for each voxel that this streamline passes through, which nodes of that streamline are in that voxel? """ if transformed: transformed_streamline = streamline else: if affine is None: affine = np.eye(4) transformed_streamline = transform_streamlines(streamline, affine) if unique_idx is None: all_coords = np.concatenate(transformed_streamline) unique_idx = unique_rows(all_coords.astype(int)) else: unique_idx = unique_idx return _voxel2streamline(transformed_streamline, unique_idx) class FiberModel(ReconstModel): """ A class for representing and solving predictive models based on tractography solutions. Notes ----- This is an implementation of the LiFE model described in [1]_ [1] Pestilli, F., Yeatman, J, Rokem, A. Kay, K. and Wandell B.A. (2014). Validation and statistical inference in living connectomes. Nature Methods. """ def __init__(self, gtab): """ Parameters ---------- gtab : a GradientTable class instance """ # Initialize the super-class: ReconstModel.__init__(self, gtab) def setup(self, streamline, affine, evals=[0.001, 0, 0], sphere=None): """ Set up the necessary components for the LiFE model: the matrix of fiber-contributions to the DWI signal, and the coordinates of voxels for which the equations will be solved Parameters ---------- streamline : list Streamlines, each is an array of shape (n, 3) affine : 4 by 4 array Mapping from the streamline coordinates to the data evals : list (3 items, optional) The eigenvalues of the canonical tensor used as a response function. Default:[0.001, 0, 0]. sphere: `dipy.core.Sphere` instance. Whether to approximate (and cache) the signal on a discrete sphere. This may confer a significant speed-up in setting up the problem, but is not as accurate. If `False`, we use the exact gradients along the streamlines to calculate the matrix, instead of an approximation. Defaults to use the 724-vertex symmetric sphere from :mod:`dipy.data` """ if sphere is not False: SignalMaker = LifeSignalMaker(self.gtab, evals=evals, sphere=sphere) if affine is None: affine = np.eye(4) streamline = transform_streamlines(streamline, affine) # Assign some local variables, for shorthand: all_coords = np.concatenate(streamline) vox_coords = unique_rows(all_coords.astype(int)) del all_coords # We only consider the diffusion-weighted signals: n_bvecs = self.gtab.bvals[~self.gtab.b0s_mask].shape[0] v2f, v2fn = voxel2streamline(streamline, transformed=True, affine=affine, unique_idx=vox_coords) # How many fibers in each voxel (this will determine how many # components are in the matrix): n_unique_f = len(np.hstack(v2f.values())) # Preallocate these, which will be used to generate the sparse # matrix: f_matrix_sig = np.zeros(n_unique_f * n_bvecs, dtype=np.float) f_matrix_row = np.zeros(n_unique_f * n_bvecs, dtype=np.int) f_matrix_col = np.zeros(n_unique_f * n_bvecs, dtype=np.int) fiber_signal = [] for s_idx, s in enumerate(streamline): if sphere is not False: fiber_signal.append(SignalMaker.streamline_signal(s)) else: fiber_signal.append(streamline_signal(s, self.gtab, evals)) del streamline if sphere is not False: del SignalMaker keep_ct = 0 range_bvecs = np.arange(n_bvecs).astype(int) # In each voxel: for v_idx in range(vox_coords.shape[0]): # dbg: #if not np.mod(v_idx, 1000): # print("voxel %s"%(100*float(v_idx)/n_vox)) mat_row_idx = (range_bvecs + v_idx * n_bvecs).astype(np.int32) #For each fiber in that voxel: for f_idx in v2f[v_idx]: # For each fiber-voxel combination, store the row/column # indices in the pre-allocated linear arrays f_matrix_row[keep_ct:keep_ct+n_bvecs] = mat_row_idx f_matrix_col[keep_ct:keep_ct+n_bvecs] = f_idx vox_fiber_sig = np.zeros(n_bvecs) for node_idx in v2fn[f_idx][v_idx]: # Sum the signal from each node of the fiber in that voxel: vox_fiber_sig += fiber_signal[f_idx][node_idx] # And add the summed thing into the corresponding rows: f_matrix_sig[keep_ct:keep_ct+n_bvecs] += vox_fiber_sig keep_ct = keep_ct + n_bvecs del v2f, v2fn # Allocate the sparse matrix, using the more memory-efficient 'csr' # format: life_matrix = sps.csr_matrix((f_matrix_sig, [f_matrix_row, f_matrix_col])) return life_matrix, vox_coords def _signals(self, data, vox_coords): """ Helper function to extract and separate all the signals we need to fit and evaluate a fit of this model Parameters ---------- data : 4D array vox_coords: n by 3 array The coordinates into the data array of the fiber nodes. """ # Fitting is done on the S0-normalized-and-demeaned diffusion-weighted # signal: idx_tuple = (vox_coords[:, 0], vox_coords[:, 1], vox_coords[:, 2]) # We'll look at a 2D array, extracting the data from the voxels: vox_data = data[idx_tuple] weighted_signal = vox_data[:, ~self.gtab.b0s_mask] b0_signal = np.mean(vox_data[:, self.gtab.b0s_mask], -1) relative_signal = (weighted_signal/b0_signal[:, None]) # The mean of the relative signal across directions in each voxel: mean_sig = np.mean(relative_signal, -1) to_fit = (relative_signal - mean_sig[:, None]).ravel() return (to_fit, weighted_signal, b0_signal, relative_signal, mean_sig, vox_data) def fit(self, data, streamline, affine=None, evals=[0.001, 0, 0], sphere=None): """ Fit the LiFE FiberModel for data and a set of streamlines associated with this data Parameters ---------- data : 4D array Diffusion-weighted data streamline : list A bunch of streamlines affine: 4 by 4 array (optional) The affine to go from the streamline coordinates to the data coordinates. Defaults to use `np.eye(4)` evals : list (optional) The eigenvalues of the tensor response function used in constructing the model signal. Default: [0.001, 0, 0] sphere: `dipy.core.Sphere` instance, or False Whether to approximate (and cache) the signal on a discrete sphere. This may confer a significant speed-up in setting up the problem, but is not as accurate. If `False`, we use the exact gradients along the streamlines to calculate the matrix, instead of an approximation. Returns ------- FiberFit class instance """ if affine is None: affine = np.eye(4) life_matrix, vox_coords = \ self.setup(streamline, affine, evals=evals, sphere=sphere) to_fit, weighted_signal, b0_signal, relative_signal, mean_sig, vox_data=\ self._signals(data, vox_coords) beta = opt.sparse_nnls(to_fit, life_matrix) return FiberFit(self, life_matrix, vox_coords, to_fit, beta, weighted_signal, b0_signal, relative_signal, mean_sig, vox_data, streamline, affine, evals) class FiberFit(ReconstFit): """ A fit of the LiFE model to diffusion data """ def __init__(self, fiber_model, life_matrix, vox_coords, to_fit, beta, weighted_signal, b0_signal, relative_signal, mean_sig, vox_data, streamline, affine, evals): """ Parameters ---------- fiber_model : A FiberModel class instance params : the parameters derived from a fit of the model to the data. """ ReconstFit.__init__(self, fiber_model, vox_data) self.life_matrix = life_matrix self.vox_coords = vox_coords self.fit_data = to_fit self.beta = beta self.weighted_signal = weighted_signal self.b0_signal = b0_signal self.relative_signal = relative_signal self.mean_signal = mean_sig self.streamline = streamline self.affine = affine self.evals = evals def predict(self, gtab=None, S0=None): """ Predict the signal Parameters ---------- gtab : GradientTable Default: use self.gtab S0 : float or array The non-diffusion-weighted signal in the voxels for which a prediction is made. Default: use self.b0_signal Returns ------- prediction : ndarray of shape (voxels, bvecs) An array with a prediction of the signal in each voxel/direction """ # We generate the prediction and in each voxel, we add the # offset, according to the isotropic part of the signal, which was # removed prior to fitting: if gtab is None: _matrix = self.life_matrix gtab = self.model.gtab else: _model = FiberModel(gtab) _matrix, _ = _model.setup(self.streamline, self.affine, self.evals) pred_weighted = np.reshape(opt.spdot(_matrix, self.beta), (self.vox_coords.shape[0], np.sum(~gtab.b0s_mask))) pred = np.empty((self.vox_coords.shape[0], gtab.bvals.shape[0])) if S0 is None: S0 = self.b0_signal pred[..., gtab.b0s_mask] = S0[:, None] pred[..., ~gtab.b0s_mask] =\ (pred_weighted + self.mean_signal[:, None]) * S0[:, None] return pred dipy-0.10.1/dipy/tracking/local/000077500000000000000000000000001263041327500164025ustar00rootroot00000000000000dipy-0.10.1/dipy/tracking/local/__init__.py000066400000000000000000000006071263041327500205160ustar00rootroot00000000000000from .localtracking import LocalTracking from .tissue_classifier import (ActTissueClassifier, BinaryTissueClassifier, ThresholdTissueClassifier, TissueClassifier) from .direction_getter import DirectionGetter from dipy.tracking import utils __all__ = ["ActTissueClassifier", "BinaryTissueClassifier", "LocalTracking", "ThresholdTissueClassifier"] dipy-0.10.1/dipy/tracking/local/direction_getter.pxd000066400000000000000000000003331263041327500224500ustar00rootroot00000000000000cimport numpy as np cdef class DirectionGetter: cpdef int get_direction(self, double[::1] point, double[::1] direction) except -1 cpdef np.ndarray[np.float_t, ndim=2] initial_direction(self, double[::1] point) dipy-0.10.1/dipy/tracking/local/direction_getter.pyx000066400000000000000000000011141263041327500224730ustar00rootroot00000000000000cimport numpy as np """ # DirectionGetter declaration: cdef class DirectionGetter: cdef int get_direction(self, double *point, double *direction) except -1 cdef np.ndarray[np.float_t, ndim=2] initial_direction(self, double *point) """ cdef class DirectionGetter: cpdef int get_direction(self, double[::1] point, double[::1] direction) except -1: pass cpdef np.ndarray[np.float_t, ndim=2] initial_direction(self, double[::1] point): pass dipy-0.10.1/dipy/tracking/local/interpolation.pxd000066400000000000000000000004341263041327500220070ustar00rootroot00000000000000cimport numpy as np cdef int _trilinear_interpolate_c_4d(double[:, :, :, :] data, double[:] point, double[::1] result) nogil cpdef trilinear_interpolate4d(double[:, :, :, :] data, double[:] point, np.ndarray out=*) dipy-0.10.1/dipy/tracking/local/interpolation.pyx000066400000000000000000000063741263041327500220450ustar00rootroot00000000000000cimport cython cimport numpy as np import numpy as np import time from libc.math cimport floor @cython.boundscheck(False) @cython.wraparound(False) cdef int _trilinear_interpolate_c_4d(double[:, :, :, :] data, double[:] point, double[::1] result) nogil: """Tri-linear interpolation along the last dimension of a 4d array Parameters ---------- point : 1d array (3,) 3 doubles representing a 3d point in space. If point has integer values ``[i, j, k]``, the result will be the same as ``data[i, j, k]``. data : 4d array Data to be interpolated. result : 1d array The result of interpolation. Should have length equal to the ``data.shape[3]``. Returns ------- err : int 0 : successful interpolation. -1 : point is outside the data area, meaning round(point) is not a valid index to data. -2 : point has the wrong shape -3 : shape of data and result do not match """ cdef: np.npy_intp flr, N double w, rem np.npy_intp index[3][2] double weight[3][2] if point.shape[0] != 3: return -2 if data.shape[3] != result.shape[0]: return -3 for i in range(3): if point[i] < -.5 or point[i] >= (data.shape[i] - .5): return -1 flr = floor(point[i]) rem = point[i] - flr index[i][0] = flr + (flr == -1) index[i][1] = flr + (flr != (data.shape[i] - 1)) weight[i][0] = 1 - rem weight[i][1] = rem N = result.shape[0] for i in range(N): result[i] = 0 for i in range(2): for j in range(2): for k in range(2): w = weight[0][i] * weight[1][j] * weight[2][k] for L in range(N): result[L] += w * data[index[0][i], index[1][j], index[2][k], L] return 0 cpdef trilinear_interpolate4d(double[:, :, :, :] data, double[:] point, np.ndarray out=None): """Tri-linear interpolation along the last dimension of a 4d array Parameters ---------- point : 1d array (3,) 3 doubles representing a 3d point in space. If point has integer values ``[i, j, k]``, the result will be the same as ``data[i, j, k]``. data : 4d array Data to be interpolated. out : 1d array, optional The output array for the result of the interpolation. Returns ------- out : 1d array The result of interpolation. """ cdef: int err double[::1] outview if out is None: out = np.empty(data.shape[3]) outview = out err = _trilinear_interpolate_c_4d(data, point, out) if err == 0: return out elif err == -1: raise IndexError("The point point is outside data") elif err == -2: raise ValueError("Point must be a 1d array with shape (3,).") elif err == -3: # This should only happen if the user passes an bad out array msg = "out array must have same size as the last dimension of data." raise ValueError(msg) def nearestneighbor_interpolate(data, point): index = tuple(np.round(point)) return data[index] dipy-0.10.1/dipy/tracking/local/localtrack.pyx000066400000000000000000000143121263041327500212640ustar00rootroot00000000000000cimport cython cimport numpy as np from .direction_getter cimport DirectionGetter from .tissue_classifier cimport (TissueClassifier, TissueClass, TRACKPOINT, ENDPOINT, OUTSIDEIMAGE, INVALIDPOINT) cdef extern from "dpy_math.h" nogil: int dpy_signbit(double x) double dpy_rint(double x) double abs(double) @cython.cdivision(True) cdef inline double stepsize(double point, double increment) nogil: """Compute the step size to the closest boundary in units of increment.""" cdef: double dist dist = dpy_rint(point) + .5 - dpy_signbit(increment) - point if dist == 0: # Point is on an edge, return step size to next edge. This is most # likely to come up if overstep is set to 0. return 1. / abs(increment) else: return dist / increment cdef void step_to_boundary(double *point, double *direction, double overstep) nogil: """Takes a step from point in along direction just past a voxel boundary. Parameters ---------- direction : c-pointer to double[3] The direction along which the step should be taken. point : c-pointer to double[3] The tracking point which will be updated by this function. overstep : double It's often useful to have the points of a streamline lie inside of a voxel instead of having them lie on the boundary. For this reason, each step will overshoot the boundary by ``overstep * direction``. This should not be negative. """ cdef: double step_sizes[3] double smallest_step for i in range(3): step_sizes[i] = stepsize(point[i], direction[i]) smallest_step = step_sizes[0] for i in range(1, 3): if step_sizes[i] < smallest_step: smallest_step = step_sizes[i] smallest_step += overstep for i in range(3): point[i] += smallest_step * direction[i] cdef void fixed_step(double *point, double *direction, double stepsize) nogil: """Updates point by stepping in direction. Parameters ---------- direction : c-pointer to double[3] The direction along which the step should be taken. point : c-pointer to double[3] The tracking point which will be updated by this function. step_size : double The size of step in units of direction. """ for i in range(3): point[i] += direction[i] * stepsize cdef inline void copypoint(double *a, double *b) nogil: for i in range(3): b[i] = a[i] @cython.boundscheck(False) @cython.wraparound(False) @cython.cdivision(True) def local_tracker(DirectionGetter dg, TissueClassifier tc, np.ndarray[np.float_t, ndim=1] seed, np.ndarray[np.float_t, ndim=1] first_step, np.ndarray[np.float_t, ndim=1] voxel_size, np.ndarray[np.float_t, ndim=2, mode='c'] streamline, double stepsize, int fixedstep): """Tracks one direction from a seed. This function is the main workhorse of the ``LocalTracking`` class defined in ``dipy.tracking.local.localtracking``. Parameters ---------- dg : DirectionGetter Used to choosing tracking directions. tc : TissueClassifier Used to check tissue type along path. seed : array, float, 1d, (3,) First point of the (partial) streamline. first_step : array, float, 1d, (3,) Used as ``prev_dir`` for selecting the step direction from the seed point. voxel_size : array, float, 1d, (3,) Size of voxels in the data set. streamline : array, float, 2d, (N, 3) Output of tracking will be put into this array. The length of this array, ``N``, will set the maximum allowable length of the streamline. stepsize : float Size of tracking steps in mm if ``fixed_step``. fixedstep : bool If true, a fixed stepsize is used, otherwise a variable step size is used. Returns ------- end : int This function updates the ``streamline`` array with points as it tracks. Points in ``streamline[:abs(end)]`` were updated by the function. The sign of ``end`` and whether the last point was included depend on the reason that the streamline was terminated. End reasons: 1) maximum length of the streamline was reached. ``end == N`` 2) ``direction_getter`` could not return a direction. ``end > 0`` Last point is the point at which no direction could be found. 3) Streamline encountered an ENDPOINT. ``end > 0`` Last point is the ENDPOINT. 3) Streamline encountered an OUTSIDEIMAGE. ``end > 0`` Last point is the point before OUTSIDEIMAGE. 5) Streamline encountered an INVALIDPOINT. ``end < 0`` Last point is INVALIDPOINT. """ if (seed.shape[0] != 3 or first_step.shape[0] != 3 or voxel_size.shape[0] != 3 or streamline.shape[1] != 3): raise ValueError() cdef: int i TissueClass tissue_class double point[3], dir[3], vs[3], voxdir[3] double[::1] pview = point, dview = dir void (*step)(double*, double*, double) nogil if fixedstep: step = fixed_step else: step = step_to_boundary for i in range(3): streamline[0, i] = point[i] = seed[i] dir[i] = first_step[i] vs[i] = voxel_size[i] tissue_class = TRACKPOINT for i in range(1, streamline.shape[0]): if dg.get_direction(pview, dview): break for j in range(3): voxdir[j] = dir[j] / vs[j] step(point, voxdir, stepsize) copypoint(point, &streamline[i, 0]) tissue_class = tc.check_point(pview) if tissue_class == TRACKPOINT: continue elif (tissue_class == ENDPOINT or tissue_class == INVALIDPOINT): i += 1 break elif tissue_class == OUTSIDEIMAGE: break else: # maximum length of streamline has been reached, return everything i = streamline.shape[0] return i, tissue_class dipy-0.10.1/dipy/tracking/local/localtracking.py000066400000000000000000000125141263041327500215740ustar00rootroot00000000000000import numpy as np from .localtrack import local_tracker from dipy.align import Bunch from dipy.tracking import utils # enum TissueClass (tissue_classifier.pxd) is not accessible # from here. To be changed when minimal cython version > 0.21. # cython 0.21 - cpdef enum to export values into Python-level namespace # https://github.com/cython/cython/commit/50133b5a91eea348eddaaad22a606a7fa1c7c457 TissueTypes = Bunch(OUTSIDEIMAGE=-1, INVALIDPOINT=0, TRACKPOINT=1, ENDPOINT=2) class LocalTracking(object): """A streamline generator for local tracking methods""" @staticmethod def _get_voxel_size(affine): """Computes the voxel sizes of an image from the affine. Checks that the affine does not have any shear because local_tracker assumes that the data is sampled on a regular grid. """ lin = affine[:3, :3] dotlin = np.dot(lin.T, lin) # Check that the affine is well behaved if not np.allclose(np.triu(dotlin, 1), 0.): msg = ("The affine provided seems to contain shearing, data must " "be acquired or interpolated on a regular grid to be used " "with `LocalTracking`.") raise ValueError(msg) return np.sqrt(dotlin.diagonal()) def __init__(self, direction_getter, tissue_classifier, seeds, affine, step_size, max_cross=None, maxlen=500, fixedstep=True, return_all=True): """Creates streamlines by using local fiber-tracking. Parameters ---------- direction_getter : instance of DirectionGetter Used to get directions for fiber tracking. tissue_classifier : instance of TissueClassifier Identifies endpoints and invalid points to inform tracking. seeds : array (N, 3) Points to seed the tracking. Seed points should be given in point space of the track (see ``affine``). affine : array (4, 4) Coordinate space for the streamline point with respect to voxel indices of input data. This affine can contain scaling, rotational, and translational components but should not contain any shearing. An identity matrix can be used to generate streamlines in "voxel coordinates" as long as isotropic voxels were used to acquire the data. step_size : float Step size used for tracking. max_cross : int or None The maximum number of direction to track from each seed in crossing voxels. By default all initial directions are tracked. maxlen : int Maximum number of steps to track from seed. Used to prevent infinite loops. fixedstep : bool If true, a fixed stepsize is used, otherwise a variable step size is used. return_all : bool If true, return all generated streamlines, otherwise only streamlines reaching end points or exiting the image. """ self.direction_getter = direction_getter self.tissue_classifier = tissue_classifier self.seeds = seeds if affine.shape != (4, 4): raise ValueError("affine should be a (4, 4) array.") self.affine = affine self._voxel_size = self._get_voxel_size(affine) self.step_size = step_size self.fixed = fixedstep self.max_cross = max_cross self.maxlen = maxlen self.return_all = return_all def __iter__(self): # Make tracks, move them to point space and return track = self._generate_streamlines() return utils.move_streamlines(track, self.affine) def _generate_streamlines(self): """A streamline generator""" N = self.maxlen dg = self.direction_getter tc = self.tissue_classifier ss = self.step_size fixed = self.fixed max_cross = self.max_cross vs = self._voxel_size # Get inverse transform (lin/offset) for seeds inv_A = np.linalg.inv(self.affine) lin = inv_A[:3, :3] offset = inv_A[:3, 3] F = np.empty((N + 1, 3), dtype=float) B = F.copy() for s in self.seeds: s = np.dot(lin, s) + offset directions = dg.initial_direction(s) directions = directions[:max_cross] for first_step in directions: stepsF, tissue_class = local_tracker(dg, tc, s, first_step, vs, F, ss, fixed) if not (self.return_all or tissue_class == TissueTypes.ENDPOINT or tissue_class == TissueTypes.OUTSIDEIMAGE): continue first_step = -first_step stepsB, tissue_class = local_tracker(dg, tc, s, first_step, vs, B, ss, fixed) if not (self.return_all or tissue_class == TissueTypes.ENDPOINT or tissue_class == TissueTypes.OUTSIDEIMAGE): continue if stepsB == 1: streamline = F[:stepsF].copy() else: parts = (B[stepsB-1:0:-1], F[:stepsF]) streamline = np.concatenate(parts, axis=0) yield streamline dipy-0.10.1/dipy/tracking/local/tests/000077500000000000000000000000001263041327500175445ustar00rootroot00000000000000dipy-0.10.1/dipy/tracking/local/tests/__init__.py000066400000000000000000000000461263041327500216550ustar00rootroot00000000000000# Make tracking/local/tests a package dipy-0.10.1/dipy/tracking/local/tests/test_local_tracking.py000066400000000000000000000220531263041327500241330ustar00rootroot00000000000000import numpy as np import numpy.testing as npt from dipy.core.sphere import HemiSphere, unit_octahedron from dipy.core.gradients import gradient_table from dipy.tracking.local import (LocalTracking, ThresholdTissueClassifier, DirectionGetter, TissueClassifier) from dipy.direction import (ProbabilisticDirectionGetter, DeterministicMaximumDirectionGetter) from dipy.tracking.local.interpolation import trilinear_interpolate4d from dipy.tracking.local.localtracking import TissueTypes def test_stop_conditions(): """This tests that the Local Tracker behaves as expected for the following tissue types. """ # TissueTypes.TRACKPOINT = 1 # TissueTypes.ENDPOINT = 2 # TissueType.INVALIDPOINT = 0 tissue = np.array([[2, 1, 1, 2, 1], [2, 2, 1, 1, 2], [1, 1, 1, 1, 1], [1, 1, 1, 2, 2], [0, 1, 1, 1, 2], [2, 1, 1, 0, 2]]) tissue = tissue[None] class SimpleTissueClassifier(TissueClassifier): def check_point(self, point): p = np.round(point).astype(int) if any(p < 0) or any(p >= tissue.shape): return TissueTypes.OUTSIDEIMAGE return tissue[p[0], p[1], p[2]] class SimpleDirectionGetter(DirectionGetter): def initial_direction(self, point): # Test tracking along the rows (z direction) # of the tissue array above return np.array([[0., 0., 1.]]) def get_direction(self, p, d): # Always keep previous direction return 0 # Create a seeds along the second column of every row, ie along [:, 1] x = np.array([0., 0, 0, 0, 0, 0]) y = np.array([0., 1, 2, 3, 4, 5]) z = np.array([1., 1, 1, 0, 1, 1]) seeds = np.column_stack([x, y, z]) # Set up tracking dg = SimpleDirectionGetter() tc = SimpleTissueClassifier() streamlines = LocalTracking(dg, tc, seeds, np.eye(4), 1., return_all=False) streamlines = iter(streamlines) # Check that the first streamline stops at 0 and 3 (ENDPOINT) sl = next(streamlines) y = 0 npt.assert_equal(sl[0], [0, y, 0]) npt.assert_equal(sl[-1], [0, y, 3]) npt.assert_equal(len(sl), 4) # Check that the first streamline stops at 0 and 4 (ENDPOINT) sl = next(streamlines) y = 1 npt.assert_equal(sl[0], [0, y, 0]) npt.assert_equal(sl[-1], [0, y, 4]) npt.assert_equal(len(sl), 5) # This streamline should be the same as above. This row does not have # ENDPOINTs, but the streamline should stop at the edge and not include # OUTSIDEIMAGE points. sl = next(streamlines) y = 2 npt.assert_equal(sl[0], [0, y, 0]) npt.assert_equal(sl[-1], [0, y, 4]) npt.assert_equal(len(sl), 5) # If we seed on the edge, the first (or last) point in the streamline # should be the seed. sl = next(streamlines) y = 3 npt.assert_equal(sl[0], seeds[y]) # The last 2 seeds should not produce streamlines, INVALIDPOINT streamlines # are rejected. npt.assert_equal(len(list(streamlines)), 0) bad_affine = np.eye(3.) npt.assert_raises(ValueError, LocalTracking, dg, tc, seeds, bad_affine, 1.) bad_affine = np.eye(4.) bad_affine[0, 1] = 1. npt.assert_raises(ValueError, LocalTracking, dg, tc, seeds, bad_affine, 1.) def test_trilinear_interpolate(): a, b, c = np.random.random(3) def linear_function(x, y, z): return a * x + b * y + c * z N = 6 x, y, z = np.mgrid[:N, :N, :N] data = np.empty((N, N, N, 2)) data[..., 0] = linear_function(x, y, z) data[..., 1] = 99. # Use a point not near the edges point = np.array([2.1, 4.8, 3.3]) out = trilinear_interpolate4d(data, point) expected = [linear_function(*point), 99.] npt.assert_array_almost_equal(out, expected) # Pass in out ourselves out[:] = -1 trilinear_interpolate4d(data, point, out) npt.assert_array_almost_equal(out, expected) # use a point close to an edge point = np.array([-.1, -.1, -.1]) expected = [0., 99.] out = trilinear_interpolate4d(data, point) npt.assert_array_almost_equal(out, expected) # different edge point = np.array([2.4, 5.4, 3.3]) # On the edge 5.4 get treated as the max y value, 5. expected = [linear_function(point[0], 5., point[2]), 99.] out = trilinear_interpolate4d(data, point) npt.assert_array_almost_equal(out, expected) # Test index errors point = np.array([2.4, 5.5, 3.3]) npt.assert_raises(IndexError, trilinear_interpolate4d, data, point) point = np.array([2.4, -1., 3.3]) npt.assert_raises(IndexError, trilinear_interpolate4d, data, point) def test_ProbabilisticOdfWeightedTracker(): """This tests that the Probabalistic Direction Getter plays nice LocalTracking and produces reasonable streamlines in a simple example. """ sphere = HemiSphere.from_sphere(unit_octahedron) # A simple image with three possible configurations, a vertical tract, # a horizontal tract and a crossing pmf_lookup = np.array([[0., 0., 1.], [1., 0., 0.], [0., 1., 0.], [.5, .5, 0.]]) simple_image = np.array([[0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 3, 2, 2, 2, 0], [0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], ]) simple_image = simple_image[..., None] pmf = pmf_lookup[simple_image] seeds = [np.array([1., 1., 0.])] * 30 mask = (simple_image > 0).astype(float) tc = ThresholdTissueClassifier(mask, .5) dg = ProbabilisticDirectionGetter.from_pmf(pmf, 90, sphere) streamlines = LocalTracking(dg, tc, seeds, np.eye(4), 1.) expected = [np.array([[0., 1., 0.], [1., 1., 0.], [2., 1., 0.], [2., 2., 0.], [2., 3., 0.], [2., 4., 0.], [2., 5., 0.]]), np.array([[0., 1., 0.], [1., 1., 0.], [2., 1., 0.], [3., 1., 0.], [4., 1., 0.]])] def allclose(x, y): return x.shape == y.shape and np.allclose(x, y) path = [False, False] for sl in streamlines: if allclose(sl, expected[0]): path[0] = True elif allclose(sl, expected[1]): path[1] = True else: raise AssertionError() npt.assert_(all(path)) # The first path is not possible if 90 degree turns are excluded dg = ProbabilisticDirectionGetter.from_pmf(pmf, 80, sphere) streamlines = LocalTracking(dg, tc, seeds, np.eye(4), 1.) for sl in streamlines: npt.assert_(np.allclose(sl, expected[1])) def test_MaximumDeterministicTracker(): """This tests that the Maximum Deterministic Direction Getter plays nice LocalTracking and produces reasonable streamlines in a simple example. """ sphere = HemiSphere.from_sphere(unit_octahedron) # A simple image with three possible configurations, a vertical tract, # a horizontal tract and a crossing pmf_lookup = np.array([[0., 0., 1.], [1., 0., 0.], [0., 1., 0.], [.4, .6, 0.]]) simple_image = np.array([[0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 3, 2, 2, 2, 0], [0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], ]) simple_image = simple_image[..., None] pmf = pmf_lookup[simple_image] seeds = [np.array([1., 1., 0.])] * 30 mask = (simple_image > 0).astype(float) tc = ThresholdTissueClassifier(mask, .5) dg = DeterministicMaximumDirectionGetter.from_pmf(pmf, 90, sphere) streamlines = LocalTracking(dg, tc, seeds, np.eye(4), 1.) expected = [np.array([[0., 1., 0.], [1., 1., 0.], [2., 1., 0.], [2., 2., 0.], [2., 3., 0.], [2., 4., 0.], [2., 5., 0.]]), np.array([[0., 1., 0.], [1., 1., 0.], [2., 1., 0.], [3., 1., 0.], [4., 1., 0.]])] def allclose(x, y): return x.shape == y.shape and np.allclose(x, y) for sl in streamlines: if not allclose(sl, expected[0]): raise AssertionError() # The first path is not possible if 90 degree turns are excluded dg = DeterministicMaximumDirectionGetter.from_pmf(pmf, 80, sphere) streamlines = LocalTracking(dg, tc, seeds, np.eye(4), 1.) for sl in streamlines: npt.assert_(np.allclose(sl, expected[1])) if __name__ == "__main__": npt.run_module_suite() dipy-0.10.1/dipy/tracking/local/tests/test_tissue_classifier.py000066400000000000000000000131461263041327500247020ustar00rootroot00000000000000 import numpy as np import numpy.testing as npt import scipy.ndimage from dipy.core.ndindex import ndindex from dipy.tracking.local import (BinaryTissueClassifier, ThresholdTissueClassifier, ActTissueClassifier) from dipy.tracking.local.localtracking import TissueTypes def test_binary_tissue_classifier(): """This tests that the binary tissue classifier returns expected tissue types. """ mask = np.random.random((4, 4, 4)) mask[mask < 0.4] = 0.0 btc_boolean = BinaryTissueClassifier(mask > 0) btc_float64 = BinaryTissueClassifier(mask) # test voxel center for ind in ndindex(mask.shape): pts = np.array(ind, dtype='float64') state_boolean = btc_boolean.check_point(pts) state_float64 = btc_float64.check_point(pts) if mask[ind] > 0: npt.assert_equal(state_boolean, TissueTypes.TRACKPOINT) npt.assert_equal(state_float64, TissueTypes.TRACKPOINT) else: npt.assert_equal(state_boolean, TissueTypes.ENDPOINT) npt.assert_equal(state_float64, TissueTypes.ENDPOINT) # test random points in voxel for ind in ndindex(mask.shape): for _ in range(50): pts = np.array(ind, dtype='float64') + np.random.random(3) - 0.5 state_boolean = btc_boolean.check_point(pts) state_float64 = btc_float64.check_point(pts) if mask[ind] > 0: npt.assert_equal(state_boolean, TissueTypes.TRACKPOINT) npt.assert_equal(state_float64, TissueTypes.TRACKPOINT) else: npt.assert_equal(state_boolean, TissueTypes.ENDPOINT) npt.assert_equal(state_float64, TissueTypes.ENDPOINT) # test outside points outside_pts = [[100, 100, 100], [0, -1, 1], [0, 10, 2], [0, 0.5, -0.51], [0, -0.51, 0.1]] for pts in outside_pts: pts = np.array(pts, dtype='float64') state_boolean = btc_boolean.check_point(pts) state_float64 = btc_float64.check_point(pts) npt.assert_equal(state_boolean, TissueTypes.OUTSIDEIMAGE) npt.assert_equal(state_float64, TissueTypes.OUTSIDEIMAGE) def test_threshold_tissue_classifier(): """This tests that the thresholdy tissue classifier returns expected tissue types. """ tissue_map = np.random.random((4, 4, 4)) ttc = ThresholdTissueClassifier(tissue_map.astype('float32'), 0.5) # test voxel center for ind in ndindex(tissue_map.shape): pts = np.array(ind, dtype='float64') state = ttc.check_point(pts) if tissue_map[ind] > 0.5: npt.assert_equal(state, TissueTypes.TRACKPOINT) else: npt.assert_equal(state, TissueTypes.ENDPOINT) # test random points in voxel inds = [[0, 1.4, 2.2], [0, 2.3, 2.3], [0, 2.2, 1.3], [0, 0.9, 2.2], [0, 2.8, 1.1], [0, 1.1, 3.3], [0, 2.1, 1.9], [0, 3.1, 3.1], [0, 0.1, 0.1], [0, 0.9, 0.5], [0, 0.9, 0.5], [0, 2.9, 0.1]] for pts in inds: pts = np.array(pts, dtype='float64') state = ttc.check_point(pts) res = scipy.ndimage.map_coordinates( tissue_map, np.reshape(pts, (3, 1)), order=1, mode='nearest') if res > 0.5: npt.assert_equal(state, TissueTypes.TRACKPOINT) else: npt.assert_equal(state, TissueTypes.ENDPOINT) # test outside points outside_pts = [[100, 100, 100], [0, -1, 1], [0, 10, 2], [0, 0.5, -0.51], [0, -0.51, 0.1]] for pts in outside_pts: pts = np.array(pts, dtype='float64') state = ttc.check_point(pts) npt.assert_equal(state, TissueTypes.OUTSIDEIMAGE) def test_act_tissue_classifier(): """This tests that the act tissue classifier returns expected tissue types. """ gm = np.random.random((4, 4, 4)) wm = np.random.random((4, 4, 4)) csf = np.random.random((4, 4, 4)) tissue_sum = gm + wm + csf gm /= tissue_sum wm /= tissue_sum csf /= tissue_sum act_tc = ActTissueClassifier(include_map=gm, exclude_map=csf) # test voxel center for ind in ndindex(wm.shape): pts = np.array(ind, dtype='float64') state = act_tc.check_point(pts) if csf[ind] > 0.5: npt.assert_equal(state, TissueTypes.INVALIDPOINT) elif gm[ind] > 0.5: npt.assert_equal(state, TissueTypes.ENDPOINT) else: npt.assert_equal(state, TissueTypes.TRACKPOINT) # test random points in voxel inds = [[0, 1.4, 2.2], [0, 2.3, 2.3], [0, 2.2, 1.3], [0, 0.9, 2.2], [0, 2.8, 1.1], [0, 1.1, 3.3], [0, 2.1, 1.9], [0, 3.1, 3.1], [0, 0.1, 0.1], [0, 0.9, 0.5], [0, 0.9, 0.5], [0, 2.9, 0.1]] for pts in inds: pts = np.array(pts, dtype='float64') state = act_tc.check_point(pts) gm_res = scipy.ndimage.map_coordinates( gm, np.reshape(pts, (3, 1)), order=1, mode='nearest') csf_res = scipy.ndimage.map_coordinates( csf, np.reshape(pts, (3, 1)), order=1, mode='nearest') if csf_res > 0.5: npt.assert_equal(state, TissueTypes.INVALIDPOINT) elif gm_res > 0.5: npt.assert_equal(state, TissueTypes.ENDPOINT) else: npt.assert_equal(state, TissueTypes.TRACKPOINT) # test outside points outside_pts = [[100, 100, 100], [0, -1, 1], [0, 10, 2], [0, 0.5, -0.51], [0, -0.51, 0.1]] for pts in outside_pts: pts = np.array(pts, dtype='float64') state = act_tc.check_point(pts) npt.assert_equal(state, TissueTypes.OUTSIDEIMAGE) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/tracking/local/tissue_classifier.pxd000066400000000000000000000014201263041327500226340ustar00rootroot00000000000000cdef enum TissueClass: PYERROR = -2 OUTSIDEIMAGE = -1 INVALIDPOINT = 0 TRACKPOINT = 1 ENDPOINT = 2 cdef class TissueClassifier: # Please update doc-string in tissue_classifer.pyx if you change these # declarations cdef: double interp_out_double[1] double[::1] interp_out_view cpdef TissueClass check_point(self, double[::1] point) except PYERROR cdef class BinaryTissueClassifier(TissueClassifier): cdef: unsigned char [:, :, :] mask pass cdef class ThresholdTissueClassifier(TissueClassifier): cdef: double threshold double[:, :, :] metric_map pass cdef class ActTissueClassifier(TissueClassifier): cdef: double[:, :, :] include_map, exclude_map pass dipy-0.10.1/dipy/tracking/local/tissue_classifier.pyx000066400000000000000000000123671263041327500226750ustar00rootroot00000000000000cimport cython cimport numpy as np cdef extern from "dpy_math.h" nogil: int dpy_rint(double) from .interpolation cimport(trilinear_interpolate4d, _trilinear_interpolate_c_4d) import numpy as np cdef class TissueClassifier: cpdef TissueClass check_point(self, double[::1] point) except PYERROR: pass cdef class BinaryTissueClassifier(TissueClassifier): """ cdef: unsigned char[:, :, :] mask """ def __cinit__(self, mask): self.interp_out_view = self.interp_out_double self.mask = (mask > 0).astype('uint8') @cython.boundscheck(False) @cython.wraparound(False) @cython.initializedcheck(False) cpdef TissueClass check_point(self, double[::1] point) except PYERROR: cdef: unsigned char result int err int voxel[3] if point.shape[0] != 3: raise ValueError("Point has wrong shape") voxel[0] = int(dpy_rint(point[0])) voxel[1] = int(dpy_rint(point[1])) voxel[2] = int(dpy_rint(point[2])) if (voxel[0] < 0 or voxel[0] > self.mask.shape[0] or voxel[1] < 0 or voxel[1] > self.mask.shape[1] or voxel[2] < 0 or voxel[2] > self.mask.shape[2]): return OUTSIDEIMAGE result = self.mask[voxel[0], voxel[1], voxel[2]] if result > 0: return TRACKPOINT else: return ENDPOINT cdef class ThresholdTissueClassifier(TissueClassifier): """ # Declarations from tissue_classifier.pxd bellow cdef: double threshold, interp_out_double[1] double[:] interp_out_view = interp_out_view double[:, :, :] metric_map """ def __cinit__(self, metric_map, threshold): self.interp_out_view = self.interp_out_double self.metric_map = np.asarray(metric_map, 'float64') self.threshold = threshold @cython.boundscheck(False) @cython.wraparound(False) @cython.initializedcheck(False) cpdef TissueClass check_point(self, double[::1] point) except PYERROR: cdef: double result int err err = _trilinear_interpolate_c_4d(self.metric_map[..., None], point, self.interp_out_view) if err == -1: return OUTSIDEIMAGE elif err == -2: raise ValueError("Point has wrong shape") elif err != 0: # This should never happen raise RuntimeError( "Unexpected interpolation error (code:%i)" % err) result = self.interp_out_view[0] if result > self.threshold: return TRACKPOINT else: return ENDPOINT cdef class ActTissueClassifier(TissueClassifier): r""" Anatomically-Constrained Tractography (ACT) stopping criteria from [1]_. This implements the use of partial volume fraction (PVE) maps to determine when the tracking stops. The proposed ([1]_) method that cuts streamlines going through subcortical gray matter regions is not implemented here. The backtracking technique for streamlines reaching INVALIDPOINT is not implemented either. cdef: double interp_out_double[1] double[:] interp_out_view = interp_out_view double[:, :, :] include_map, exclude_map References ---------- .. [1] Smith, R. E., Tournier, J.-D., Calamante, F., & Connelly, A. "Anatomically-constrained tractography: Improved diffusion MRI streamlines tractography through effective use of anatomical information." NeuroImage, 63(3), 1924–1938, 2012. """ def __cinit__(self, include_map, exclude_map): self.interp_out_view = self.interp_out_double self.include_map = np.asarray(include_map, 'float64') self.exclude_map = np.asarray(exclude_map, 'float64') @cython.boundscheck(False) @cython.wraparound(False) @cython.initializedcheck(False) cpdef TissueClass check_point(self, double[::1] point) except PYERROR: cdef: double include_result, exclude_result int include_err, exclude_err include_err = _trilinear_interpolate_c_4d(self.include_map[..., None], point, self.interp_out_view) include_result = self.interp_out_view[0] exclude_err = _trilinear_interpolate_c_4d(self.exclude_map[..., None], point, self.interp_out_view) exclude_result = self.interp_out_view[0] if include_err == -1 or exclude_err == -1: return OUTSIDEIMAGE elif include_err == -2 or exclude_err == -2: raise ValueError("Point has wrong shape") elif include_err != 0: # This should never happen raise RuntimeError("Unexpected interpolation error " + "(include_map - code:%i)" % include_err) elif exclude_err != 0: # This should never happen raise RuntimeError("Unexpected interpolation error " + "(exclude_map - code:%i)" % exclude_err) if include_result > 0.5: return ENDPOINT elif exclude_result > 0.5: return INVALIDPOINT else: return TRACKPOINT dipy-0.10.1/dipy/tracking/markov.py000066400000000000000000000420641263041327500171670ustar00rootroot00000000000000# -*- coding: utf-8 -*- """Implemention of various Tractography methods. these tools are meant to be paired with diffusion reconstruction methods from dipy.reconst This module uses the trackvis coordinate system, for more information about this coordinate system please see dipy.tracking.utils The following modules also use this coordinate system: dipy.tracking.utils dipy.tracking.integration dipy.reconst.interpolate """ from __future__ import division, print_function, absolute_import from ..utils.six.moves import xrange import numpy as np from ..reconst.interpolate import OutsideImage, NearestNeighborInterpolator from dipy.direction.peaks import default_sphere, peak_directions from . import utils class DirectionFinder(object): sphere = default_sphere relative_peak_threshold = .5 min_seperation_angle = 45 def __call__(self, fit): discrete_odf = fit.odf(self.sphere) directions, _, _ = peak_directions(discrete_odf, self.sphere, self.relative_peak_threshold, self.min_seperation_angle) return directions class BoundaryStepper(object): """Steps along a direction past the closest voxel boundary Parameters ---------- voxel_size : array-like Size of voxels in data volume overstep : float A small number used to prevent the track from getting stuck at the edge of a voxel. """ def __init__(self, voxel_size=(1, 1, 1), overstep=.1): self.overstep = overstep self.voxel_size = np.array(voxel_size, 'float') def __call__(self, location, step): """takes a step just past the edge of the next voxel along step given a location and a step, finds the smallest step needed to move into the next voxel Parameters ---------- location : ndarray, (3,) location to integrate from step : ndarray, (3,) direction in 3 space to integrate along """ step_sizes = self.voxel_size * (~np.signbit(step)) step_sizes -= location % self.voxel_size step_sizes /= step smallest_step = min(step_sizes) + self.overstep return location + smallest_step * step class FixedSizeStepper(object): """A stepper that uses a fixed step size""" def __init__(self, step_size=.5): self.step_size = step_size def __call__(self, location, step): """Takes a step of step_size from location""" new_location = self.step_size * step + location return new_location def markov_streamline(get_direction, take_step, seed, first_step, maxlen): """Creates a streamline from seed Parameters ---------- get_direction : callable This function should return a direction for the streamline given a location and the previous direction. take_step : callable Take step should take a step from a location given a direction. seed : array (3,) The seed point of the streamline first_step : array (3,) A unit vector giving the direction of the first step maxlen : int The maximum number of segments allowed in the streamline. This is good for preventing infinite loops. Returns ------- streamline : array (N, 3) A streamline. """ streamline = [] location = seed direction = first_step try: for i in xrange(maxlen): streamline.append(location) location = take_step(location, direction) direction = get_direction(location, direction) if direction is None: streamline.append(location) break except OutsideImage: pass return np.array(streamline) class MarkovIntegrator(object): """An abstract class for fiber-tracking""" _get_directions = DirectionFinder() def __init__(self, model, interpolator, mask, take_step, angle_limit, seeds, max_cross=None, maxlen=500, mask_voxel_size=None, affine=None): """Creates streamlines by using a Markov approach. Parameters ---------- model : model The model used to fit diffusion data. interpolator : interpolator Diffusion weighted data wrapped in an interpolator. Data should be normalized. mask : array, 3D Used to confine tracking, streamlines are terminated if the tracking leaves the mask. take_step : callable Determines the length of each step. angle_limit : float [0, 90] Maximum angle allowed between successive steps of the streamline. seeds : array (N, 3) Points to seed the tracking. Seed points should be given in point space of the track (see ``affine``). max_cross : int or None The maximum number of direction to track from each seed in crossing voxels. By default track all peaks of the odf, otherwise track the largest `max_cross` peaks. maxlen : int Maximum number of steps to track from seed. Used to prevent infinite loops. mask_voxel_size : array (3,) Voxel size for the mask. `mask` should cover the same FOV as data, but it can have a different voxel size. Same as the data by default. affine : array (4, 4) Coordinate space for the streamline point with respect to voxel indices of input data. """ self.model = model self.interpolator = interpolator self.seeds = seeds self.max_cross = max_cross self.maxlen = maxlen voxel_size = np.asarray(interpolator.voxel_size) self._tracking_space = tracking_space = np.eye(4) tracking_space[[0, 1, 2], [0, 1, 2]] = voxel_size tracking_space[:3, 3] = voxel_size / 2. if affine is None: self.affine = tracking_space.copy() else: self.affine = affine self._take_step = take_step self._cos_similarity = np.cos(np.deg2rad(angle_limit)) if mask_voxel_size is None: if mask.shape != interpolator.data.shape[:-1]: raise ValueError("The shape of the mask and the shape of the " "data do not match") mask_voxel_size = interpolator.voxel_size else: mask_voxel_size = np.asarray(mask_voxel_size) mask_FOV = mask_voxel_size * mask.shape data_FOV = interpolator.voxel_size * interpolator.data.shape[:-1] if not np.allclose(mask_FOV, data_FOV): raise ValueError("The FOV of the data and the FOV of the mask " "do not match") self._mask = NearestNeighborInterpolator(mask.copy(), mask_voxel_size) def __iter__(self): # Check that seeds are reasonable seeds = np.asarray(self.seeds) if seeds.ndim != 2 or seeds.shape[1] != 3: raise ValueError("Seeds should be an (N, 3) array of points") # Compute affine from point space to tracking space, apply to seeds inv_A = np.dot(self._tracking_space, np.linalg.inv(self.affine)) tracking_space_seeds = np.dot(seeds, inv_A[:3, :3].T) + inv_A[:3, 3] # Make tracks, move them to point space and return track = self._generate_streamlines(tracking_space_seeds) return utils.move_streamlines(track, output_space=self.affine, input_space=self._tracking_space) def _generate_streamlines(self, seeds): """A streamline generator""" for s in seeds: directions = self._next_step(s, prev_step=None) directions = directions[:self.max_cross] for first_step in directions: F = markov_streamline(self._next_step, self._take_step, s, first_step, self.maxlen) first_step = -first_step B = markov_streamline(self._next_step, self._take_step, s, first_step, self.maxlen) yield np.concatenate([B[:0:-1], F], axis=0) def _closest_peak(peak_directions, prev_step, cos_similarity): """Return the closest direction to prev_step from peak_directions. All directions should be unit vectors. Antipodal symmetry is assumed, ie direction x is the same as -x. Parameters ---------- peak_directions : array (N, 3) N unit vectors. prev_step : array (3,) or None Previous direction. cos_similarity : float `cos(max_angle)` where `max_angle` is the maximum allowed angle between prev_step and the returned direction. Returns ------- direction : array or None If prev_step is None, returns peak_directions. Otherwise returns the closest direction to prev_step. If no directions are close enough to prev_step, returns None """ if prev_step is None: return peak_directions if len(peak_directions) == 0: return None peak_dots = np.dot(peak_directions, prev_step) closest_peak = abs(peak_dots).argmax() dot_closest_peak = peak_dots[closest_peak] if dot_closest_peak >= cos_similarity: return peak_directions[closest_peak] elif dot_closest_peak <= -cos_similarity: return -peak_directions[closest_peak] else: return None class ClosestDirectionTracker(MarkovIntegrator): def _next_step(self, location, prev_step): """Returns the direction closest to prev_step at location Fits the data from location using model and returns the tracking direction closest to prev_step. If prev_step is None, all the directions are returned. Parameters ---------- location : point in space location is passed to the interpolator in order to get data prev_step : array_like (3,) the direction of the previous tracking step """ if not self._mask[location]: return None vox_data = self.interpolator[location] fit = self.model.fit(vox_data) directions = self._get_directions(fit) return _closest_peak(directions, prev_step, self._cos_similarity) class ProbabilisticOdfWeightedTracker(MarkovIntegrator): """A stochastic (probabilistic) fiber tracking method Stochastically tracks streamlines by randomly choosing directions from sphere. The likelihood of a direction being chosen is taken from `model.fit(data).odf(sphere)`. Negative values are set to 0. If no directions less than `angle_limit` degrees are from the incoming direction have a positive likelihood, the streamline is terminated. Parameters ---------- model : model The model used to fit diffusion data. interpolator : interpolator Diffusion weighted data wrapped in an interpolator. Data should be normalized. mask : array, 3D Used to confine tracking, streamlines end when they leave the mask. take_step : callable Determines the length of each step. angle_limit : float [0, 90] The angle between successive steps in the streamlines cannot be more than `angle_limit` degrees. seeds : array (N, 3) Points to seed the tracking. sphere : Sphere sphere used to evaluate the likelihood. A Sphere or a HemiSphere can be used here. A HemiSphere is more efficient. max_cross : int or None Max number of directions to follow at each seed. By default follow all peaks of the odf. maxlen : int Maximum number of segments to follow from seed. Used to prevent infinite loops. mask_voxel_size : array (3,) Voxel size for the mask. `mask` should cover the same FOV as data, but it can have a different voxel size. Same as the data by default. Notes ----- The tracker is based on a method described in [1]_ and [2]_ as fiber orientation distribution (FOD) sampling. References ---------- .. [1] Jeurissen, B., Leemans, A., Jones, D. K., Tournier, J.-D., & Sijbers, J. (2011). Probabilistic fiber tracking using the residual bootstrap with constrained spherical deconvolution. Human Brain Mapping, 32(3), 461-479. doi:10.1002/hbm.21032 .. [2] J-D. Tournier, F. Calamante, D. G. Gadian, A. Connelly (2005). Probabilistic fibre tracking through regions containing crossing fibres. http://cds.ismrm.org/ismrm-2005/Files/01343.pdf """ def __init__(self, model, interpolator, mask, take_step, angle_limit, seeds, sphere, max_cross=None, maxlen=500, mask_voxel_size=None, affine=None): MarkovIntegrator.__init__(self, model, interpolator, mask, take_step, angle_limit, seeds, max_cross, maxlen, mask_voxel_size, affine) self.sphere = sphere self._set_adjacency_matrix(sphere, self._cos_similarity) self._get_directions.sphere = sphere def _set_adjacency_matrix(self, sphere, cos_similarity): """A boolean array of where the angle between vertices i and j of sphere is less than `angle_limit` apart.""" matrix = np.dot(sphere.vertices, sphere.vertices.T) matrix = abs(matrix) >= cos_similarity keys = [tuple(v) for v in sphere.vertices] adj_matrix = dict(zip(keys, matrix)) keys = [tuple(-v) for v in sphere.vertices] adj_matrix.update(zip(keys, matrix)) self._adj_matrix = adj_matrix def _next_step(self, location, prev_step): """Returns the direction closest to prev_step at location Fits the data from location using model and returns the tracking direction closest to prev_step. If prev_step is None, all the directions are returned. Parameters ---------- location : point in space location is passed to the interpolator in order to get data prev_step : array_like (3,) the direction of the previous tracking step """ if not self._mask[location]: return None vox_data = self.interpolator[location] fit = self.model.fit(vox_data) if prev_step is None: return self._get_directions(fit) odf = fit.odf(self.sphere) odf.clip(0, out=odf) cdf = (self._adj_matrix[tuple(prev_step)] * odf).cumsum() if cdf[-1] == 0: return None random_sample = np.random.random() * cdf[-1] idx = cdf.searchsorted(random_sample, 'right') direction = self.sphere.vertices[idx] if np.dot(direction, prev_step) > 0: return direction else: return -direction class CDT_NNO(ClosestDirectionTracker): """ClosestDirectionTracker optimized for NearestNeighbor interpolator For use with Nearest Neighbor interpolation, directions at each voxel are remembered to avoid recalculating. Parameters ---------- model : model A model used to fit data. Should return a some fit object with directions. interpolator : interpolator A NearestNeighbor interpolator, for other interpolators do not use this class. angle_limit : float [0, 90] Maximum angle allowed between prev_step and next_step. """ def __init__(self, model, interpolator, mask, take_step, angle_limit, seeds, max_cross=None, maxlen=500, mask_voxel_size=None, affine=None): if not isinstance(interpolator, NearestNeighborInterpolator): msg = ("CDT_NNO is an optimized version of " "ClosestDirectionTracker that requires a " "NearestNeighborInterpolator") raise ValueError(msg) ClosestDirectionTracker.__init__(self, model, interpolator, mask, take_step, angle_limit, seeds, max_cross=max_cross, maxlen=maxlen, mask_voxel_size=mask_voxel_size, affine=None) self._data = self.interpolator.data self._voxel_size = self.interpolator.voxel_size self.reset_cache() def reset_cache(self): """Clear saved directions""" lookup = np.empty(self._data.shape[:-1], 'int') lookup.fill(-1) self._lookup = lookup self._peaks = [] def _next_step(self, location, prev_step): """Returns the direction closest to prev_step at location""" if not self._mask[location]: return None vox_loc = tuple(location // self._voxel_size) hash = self._lookup[vox_loc] if hash >= 0: directions = self._peaks[hash] else: vox_data = self._data[vox_loc] fit = self.model.fit(vox_data) directions = self._get_directions(fit) self._lookup[vox_loc] = len(self._peaks) self._peaks.append(directions) return _closest_peak(directions, prev_step, self._cos_similarity) dipy-0.10.1/dipy/tracking/metrics.py000066400000000000000000000601521263041327500173340ustar00rootroot00000000000000''' Metrics for tracks, where tracks are arrays of points ''' from __future__ import division, print_function, absolute_import from ..utils.six.moves import xrange import numpy as np from scipy.interpolate import splprep, splev def winding(xyz): '''Total turning angle projected. Project space curve to best fitting plane. Calculate the cumulative signed angle between each line segment and the previous one. Parameters ------------ xyz : array-like shape (N,3) Array representing x,y,z of N points in a track. Returns --------- a : scalar Total turning angle in degrees. ''' U,s,V=np.linalg.svd(xyz-np.mean(xyz,axis=0),0) proj=np.dot(U[:,0:2],np.diag(s[0:2])) turn=0 for j in range(len(xyz)-1): v0=proj[j] v1=proj[j+1] v=np.dot(v0,v1)/(np.linalg.norm(v0)*np.linalg.norm(v1)) tmp=np.arccos(v) turn+=tmp return np.rad2deg(turn) def length(xyz, along=False): ''' Euclidean length of track line This will give length in mm if tracks are expressed in world coordinates. Parameters ------------ xyz : array-like shape (N,3) array representing x,y,z of N points in a track along : bool, optional If True, return array giving cumulative length along track, otherwise (default) return scalar giving total length. Returns --------- L : scalar or array shape (N-1,) scalar in case of `along` == False, giving total length, array if `along` == True, giving cumulative lengths. Examples ---------- >>> from dipy.tracking.metrics import length >>> xyz = np.array([[1,1,1],[2,3,4],[0,0,0]]) >>> expected_lens = np.sqrt([1+2**2+3**2, 2**2+3**2+4**2]) >>> length(xyz) == expected_lens.sum() True >>> len_along = length(xyz, along=True) >>> np.allclose(len_along, expected_lens.cumsum()) True >>> length([]) 0 >>> length([[1, 2, 3]]) 0 >>> length([], along=True) array([0]) ''' xyz = np.asarray(xyz) if xyz.shape[0] < 2: if along: return np.array([0]) return 0 dists = np.sqrt((np.diff(xyz, axis=0)**2).sum(axis=1)) if along: return np.cumsum(dists) return np.sum(dists) def bytes(xyz): '''Size of track in bytes. Parameters ------------ xyz : array-like shape (N,3) Array representing x,y,z of N points in a track. Returns --------- b : int Number of bytes. ''' return xyz.nbytes def midpoint(xyz): ''' Midpoint of track Parameters ---------- xyz : array-like shape (N,3) array representing x,y,z of N points in a track Returns --------- mp : array shape (3,) Middle point of line, such that, if L is the line length then `np` is the point such that the length xyz[0] to `mp` and from `mp` to xyz[-1] is L/2. If the middle point is not a point in `xyz`, then we take the interpolation between the two nearest `xyz` points. If `xyz` is empty, return a ValueError Examples -------- >>> from dipy.tracking.metrics import midpoint >>> midpoint([]) Traceback (most recent call last): ... ValueError: xyz array cannot be empty >>> midpoint([[1, 2, 3]]) array([1, 2, 3]) >>> xyz = np.array([[1,1,1],[2,3,4]]) >>> midpoint(xyz) array([ 1.5, 2. , 2.5]) >>> xyz = np.array([[0,0,0],[1,1,1],[2,2,2]]) >>> midpoint(xyz) array([ 1., 1., 1.]) >>> xyz = np.array([[0,0,0],[1,0,0],[3,0,0]]) >>> midpoint(xyz) array([ 1.5, 0. , 0. ]) >>> xyz = np.array([[0,9,7],[1,9,7],[3,9,7]]) >>> midpoint(xyz) array([ 1.5, 9. , 7. ]) ''' xyz = np.asarray(xyz) n_pts = xyz.shape[0] if n_pts == 0: raise ValueError('xyz array cannot be empty') if n_pts == 1: return xyz.copy().squeeze() cumlen = np.zeros(n_pts) cumlen[1:] = length(xyz, along=True) midlen=cumlen[-1]/2.0 ind=np.where((cumlen-midlen)>0)[0][0] len0=cumlen[ind-1] len1=cumlen[ind] Ds=midlen-len0 Lambda = Ds/(len1-len0) return Lambda*xyz[ind]+(1-Lambda)*xyz[ind-1] def center_of_mass(xyz): ''' Center of mass of streamline Parameters ------------ xyz : array-like shape (N,3) array representing x,y,z of N points in a track Returns --------- com : array shape (3,) center of mass of streamline Examples ---------- >>> from dipy.tracking.metrics import center_of_mass >>> center_of_mass([]) Traceback (most recent call last): ... ValueError: xyz array cannot be empty >>> center_of_mass([[1,1,1]]) array([ 1., 1., 1.]) >>> xyz = np.array([[0,0,0],[1,1,1],[2,2,2]]) >>> center_of_mass(xyz) array([ 1., 1., 1.]) ''' xyz = np.asarray(xyz) if xyz.size == 0: raise ValueError('xyz array cannot be empty') return np.mean(xyz,axis=0) def magn(xyz,n=1): ''' magnitude of vector ''' mag=np.sum(xyz**2,axis=1)**0.5 imag=np.where(mag==0) mag[imag]=np.finfo(float).eps if n>1: return np.tile(mag,(n,1)).T return mag.reshape(len(mag),1) def frenet_serret(xyz): r''' Frenet-Serret Space Curve Invariants Calculates the 3 vector and 2 scalar invariants of a space curve defined by vectors r = (x,y,z). If z is omitted (i.e. the array xyz has shape (N,2)), then the curve is only 2D (planar), but the equations are still valid. Similar to http://www.mathworks.com/matlabcentral/fileexchange/11169 In the following equations the prime ($'$) indicates differentiation with respect to the parameter $s$ of a parametrised curve $\mathbf{r}(s)$. - $\mathbf{T}=\mathbf{r'}/|\mathbf{r'}|\qquad$ (Tangent vector)} - $\mathbf{N}=\mathbf{T'}/|\mathbf{T'}|\qquad$ (Normal vector) - $\mathbf{B}=\mathbf{T}\times\mathbf{N}\qquad$ (Binormal vector) - $\kappa=|\mathbf{T'}|\qquad$ (Curvature) - $\mathrm{\tau}=-\mathbf{B'}\cdot\mathbf{N}$ (Torsion) Parameters ---------- xyz : array-like shape (N,3) array representing x,y,z of N points in a track Returns ------- T : array shape (N,3) array representing the tangent of the curve xyz N : array shape (N,3) array representing the normal of the curve xyz B : array shape (N,3) array representing the binormal of the curve xyz k : array shape (N,1) array representing the curvature of the curve xyz t : array shape (N,1) array representing the torsion of the curve xyz Examples ---------- Create a helix and calculate its tangent, normal, binormal, curvature and torsion >>> from dipy.tracking import metrics as tm >>> import numpy as np >>> theta = 2*np.pi*np.linspace(0,2,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=theta/(2*np.pi) >>> xyz=np.vstack((x,y,z)).T >>> T,N,B,k,t=tm.frenet_serret(xyz) ''' xyz = np.asarray(xyz) n_pts = xyz.shape[0] if n_pts == 0: raise ValueError('xyz array cannot be empty') dxyz=np.gradient(xyz)[0] ddxyz=np.gradient(dxyz)[0] #Tangent T=np.divide(dxyz,magn(dxyz,3)) #Derivative of Tangent dT=np.gradient(T)[0] #Normal N = np.divide(dT,magn(dT,3)) #Binormal B = np.cross(T,N) #Curvature k = magn(np.cross(dxyz,ddxyz),1)/(magn(dxyz,1)**3) #Torsion #(In matlab was t=dot(-B,N,2)) t = np.sum(-B*N,axis=1) #return T,N,B,k,t,dxyz,ddxyz,dT return T,N,B,k,t def mean_curvature(xyz): ''' Calculates the mean curvature of a curve Parameters ------------ xyz : array-like shape (N,3) array representing x,y,z of N points in a curve Returns ----------- m : float Mean curvature. Examples -------- Create a straight line and a semi-circle and print their mean curvatures >>> from dipy.tracking import metrics as tm >>> import numpy as np >>> x=np.linspace(0,1,100) >>> y=0*x >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> m=tm.mean_curvature(xyz) #mean curvature straight line >>> theta=np.pi*np.linspace(0,1,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> m=tm.mean_curvature(xyz) #mean curvature for semi-circle ''' xyz = np.asarray(xyz) n_pts = xyz.shape[0] if n_pts == 0: raise ValueError('xyz array cannot be empty') dxyz=np.gradient(xyz)[0] ddxyz=np.gradient(dxyz)[0] #Curvature k = magn(np.cross(dxyz,ddxyz),1)/(magn(dxyz,1)**3) return np.mean(k) def mean_orientation(xyz): ''' Calculates the mean orientation of a curve Parameters ------------ xyz : array-like shape (N,3) array representing x,y,z of N points in a curve Returns ------- m : float Mean orientation. ''' xyz = np.asarray(xyz) n_pts = xyz.shape[0] if n_pts == 0: raise ValueError('xyz array cannot be empty') dxyz=np.gradient(xyz)[0] return np.mean(dxyz,axis=0) def generate_combinations(items, n): """ Combine sets of size n from items Parameters ------------ items : sequence n : int Returns -------- ic : iterator Examples -------- >>> from dipy.tracking.metrics import generate_combinations >>> ic=generate_combinations(range(3),2) >>> for i in ic: print(i) [0, 1] [0, 2] [1, 2] """ if n == 0: yield [] elif n == 2: #if n=2 non_recursive for i in xrange(len(items)-1): for j in xrange(i+1,len(items)): yield [i,j] else: #if n>2 uses recursion for i in xrange(len(items)): for cc in generate_combinations(items[i+1:], n-1): yield [items[i]] + cc def longest_track_bundle(bundle,sort=False): ''' Return longest track or length sorted track indices in `bundle` If `sort` == True, return the indices of the sorted tracks in the bundle, otherwise return the longest track. Parameters ---------- bundle : sequence of tracks as arrays, shape (N1,3) ... (Nm,3) sort : bool, optional If False (default) return longest track. If True, return length sorted indices for tracks in bundle Returns ------- longest_or_indices : array longest track - shape (N,3) - (if `sort` is False), or indices of length sorted tracks (if `sort` is True) Examples -------- >>> from dipy.tracking.metrics import longest_track_bundle >>> import numpy as np >>> bundle = [np.array([[0,0,0],[2,2,2]]),np.array([[0,0,0],[4,4,4]])] >>> longest_track_bundle(bundle) array([[0, 0, 0], [4, 4, 4]]) >>> longest_track_bundle(bundle, True) #doctest: +ELLIPSIS array([0, 1]...) ''' alllengths=[length(t) for t in bundle] alllengths=np.array(alllengths) if sort: ilongest=alllengths.argsort() return ilongest else: ilongest=alllengths.argmax() return bundle[ilongest] def intersect_sphere(xyz,center,radius): ''' If any segment of the track is intersecting with a sphere of specific center and radius return True otherwise False Parameters ---------- xyz : array, shape (N,3) representing x,y,z of the N points of the track center : array, shape (3,) center of the sphere radius : float radius of the sphere Returns ------- tf : {True, False} True if track `xyz` intersects sphere >>> from dipy.tracking.metrics import intersect_sphere >>> line=np.array(([0,0,0],[1,1,1],[2,2,2])) >>> sph_cent=np.array([1,1,1]) >>> sph_radius = 1 >>> intersect_sphere(line,sph_cent,sph_radius) True Notes ----- The ray to sphere intersection method used here is similar with http://local.wasp.uwa.edu.au/~pbourke/geometry/sphereline/ http://local.wasp.uwa.edu.au/~pbourke/geometry/sphereline/source.cpp we just applied it for every segment neglecting the intersections where the intersecting points are not inside the segment ''' center=np.array(center) #print center lt=xyz.shape[0] for i in xrange(lt-1): #first point x1=xyz[i] #second point x2=xyz[i+1] #do the calculations as given in the Notes x=x2-x1 a=np.inner(x,x) x1c=x1-center b=2*np.inner(x,x1c) c=np.inner(center,center)+np.inner(x1,x1)-2*np.inner(center,x1) - radius**2 bb4ac =b*b-4*a*c #print 'bb4ac',bb4ac if abs(a) 0: #two intersection points p1 and p2 mu=(-b+np.sqrt(bb4ac))/(2*a) p1=x1+mu*x mu=(-b-np.sqrt(bb4ac))/(2*a) p2=x1+mu*x #check if points are inside the line segment #print 'p1,p2',p1,p2 if np.inner(p1-x1,p1-x1) <= a or np.inner(p2-x1,p2-x1) <= a: return True return False def inside_sphere(xyz,center,radius): r''' If any point of the track is inside a sphere of a specified center and radius return True otherwise False. Mathematicaly this can be simply described by $|x-c|\le r$ where $x$ a point $c$ the center of the sphere and $r$ the radius of the sphere. Parameters ------------- xyz : array, shape (N,3) representing x,y,z of the N points of the track center : array, shape (3,) center of the sphere radius : float radius of the sphere Returns ---------- tf : {True,False} Whether point is inside sphere. Examples -------- >>> from dipy.tracking.metrics import inside_sphere >>> line=np.array(([0,0,0],[1,1,1],[2,2,2])) >>> sph_cent=np.array([1,1,1]) >>> sph_radius = 1 >>> inside_sphere(line,sph_cent,sph_radius) True ''' return (np.sqrt(np.sum((xyz-center)**2,axis=1))<=radius).any()==True def inside_sphere_points(xyz,center,radius): ''' If a track intersects with a sphere of a specified center and radius return the points that are inside the sphere otherwise False. Mathematicaly this can be simply described by $|x-c| \le r$ where $x$ a point $c$ the center of the sphere and $r$ the radius of the sphere. Parameters ------------ xyz : array, shape (N,3) representing x,y,z of the N points of the track center : array, shape (3,) center of the sphere radius : float radius of the sphere Returns --------- xyzn : array, shape(M,3) array representing x,y,z of the M points inside the sphere Examples ---------- >>> from dipy.tracking.metrics import inside_sphere_points >>> line=np.array(([0,0,0],[1,1,1],[2,2,2])) >>> sph_cent=np.array([1,1,1]) >>> sph_radius = 1 >>> inside_sphere_points(line,sph_cent,sph_radius) array([[1, 1, 1]]) ''' return xyz[(np.sqrt(np.sum((xyz-center)**2,axis=1))<=radius)] def spline(xyz,s=3,k=2,nest=-1): ''' Generate B-splines as documented in http://www.scipy.org/Cookbook/Interpolation The scipy.interpolate packages wraps the netlib FITPACK routines (Dierckx) for calculating smoothing splines for various kinds of data and geometries. Although the data is evenly spaced in this example, it need not be so to use this routine. Parameters --------------- xyz : array, shape (N,3) array representing x,y,z of N points in 3d space s : float, optional A smoothing condition. The amount of smoothness is determined by satisfying the conditions: sum((w * (y - g))**2,axis=0) <= s where g(x) is the smoothed interpolation of (x,y). The user can use s to control the tradeoff between closeness and smoothness of fit. Larger satisfying the conditions: sum((w * (y - g))**2,axis=0) <= s where g(x) is the smoothed interpolation of (x,y). The user can use s to control the tradeoff between closeness and smoothness of fit. Larger s means more smoothing while smaller values of s indicate less smoothing. Recommended values of s depend on the weights, w. If the weights represent the inverse of the standard-deviation of y, then a: good s value should be found in the range (m-sqrt(2*m),m+sqrt(2*m)) where m is the number of datapoints in x, y, and w. k : int, optional Degree of the spline. Cubic splines are recommended. Even values of k should be avoided especially with a small s-value. for the same set of data. If task=-1 find the weighted least square spline for a given set of knots, t. nest : None or int, optional An over-estimate of the total number of knots of the spline to help in determining the storage space. None results in value m+2*k. -1 results in m+k+1. Always large enough is nest=m+k+1. Default is -1. Returns ---------- xyzn : array, shape (M,3) array representing x,y,z of the M points inside the sphere Examples ---------- >>> import numpy as np >>> t=np.linspace(0,1.75*2*np.pi,100)# make ascending spiral in 3-space >>> x = np.sin(t) >>> y = np.cos(t) >>> z = t >>> x+= np.random.normal(scale=0.1, size=x.shape) # add noise >>> y+= np.random.normal(scale=0.1, size=y.shape) >>> z+= np.random.normal(scale=0.1, size=z.shape) >>> xyz=np.vstack((x,y,z)).T >>> xyzn=spline(xyz,3,2,-1) >>> len(xyzn) > len(xyz) True See also ---------- scipy.interpolate.splprep scipy.interpolate.splev ''' # find the knot points tckp,u = splprep([xyz[:,0],xyz[:,1],xyz[:,2]],s=s,k=k,nest=nest) # evaluate spline, including interpolated points xnew,ynew,znew = splev(np.linspace(0,1,400),tckp) return np.vstack((xnew,ynew,znew)).T def startpoint(xyz): ''' First point of the track Parameters ------------- xyz : array, shape(N,3) Track. Returns --------- sp : array, shape(3,) First track point. Examples ---------- >>> from dipy.tracking.metrics import startpoint >>> import numpy as np >>> theta=np.pi*np.linspace(0,1,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> sp=startpoint(xyz) >>> sp.any()==xyz[0].any() True ''' return xyz[0] def endpoint(xyz): ''' Parameters ---------- xyz : array, shape(N,3) Track. Returns ------- ep : array, shape(3,) First track point. Examples ---------- >>> from dipy.tracking.metrics import endpoint >>> import numpy as np >>> theta=np.pi*np.linspace(0,1,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> ep=endpoint(xyz) >>> ep.any()==xyz[-1].any() True ''' return xyz[-1] def arbitrarypoint(xyz,distance): ''' Select an arbitrary point along distance on the track (curve) Parameters ---------- xyz : array-like shape (N,3) array representing x,y,z of N points in a track distance : float float representing distance travelled from the xyz[0] point of the curve along the curve. Returns ------- ap : array shape (3,) Arbitrary point of line, such that, if the arbitrary point is not a point in `xyz`, then we take the interpolation between the two nearest `xyz` points. If `xyz` is empty, return a ValueError Examples -------- >>> import numpy as np >>> from dipy.tracking.metrics import arbitrarypoint, length >>> theta=np.pi*np.linspace(0,1,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> ap=arbitrarypoint(xyz,length(xyz)/3) ''' xyz = np.asarray(xyz) n_pts = xyz.shape[0] if n_pts == 0: raise ValueError('xyz array cannot be empty') if n_pts == 1: return xyz.copy().squeeze() cumlen = np.zeros(n_pts) cumlen[1:] = length(xyz, along=True) if cumlen[-1]0)[0][0] len0=cumlen[ind-1] len1=cumlen[ind] Ds=distance-len0 Lambda = Ds/(len1-len0) return Lambda*xyz[ind]+(1-Lambda)*xyz[ind-1] def _extrap(xyz,cumlen,distance): ''' Helper function for extrapolate ''' ind=np.where((cumlen-distance)>0)[0][0] len0=cumlen[ind-1] len1=cumlen[ind] Ds=distance-len0 Lambda = Ds/(len1-len0) return Lambda*xyz[ind]+(1-Lambda)*xyz[ind-1] def downsample(xyz,n_pols=3): ''' downsample for a specific number of points along the curve/track Uses the length of the curve. It works in a similar fashion to midpoint and arbitrarypoint but it also reduces the number of segments of a track. Parameters ---------- xyz : array-like shape (N,3) array representing x,y,z of N points in a track n_pol : int integer representing number of points (poles) we need along the curve. Returns ------- xyz2 : array shape (M,3) array representing x,y,z of M points that where extrapolated. M should be equal to n_pols Examples -------- >>> import numpy as np >>> # a semi-circle >>> theta=np.pi*np.linspace(0,1,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> xyz2=downsample(xyz,3) >>> # a cosine >>> x=np.pi*np.linspace(0,1,100) >>> y=np.cos(theta) >>> z=0*y >>> xyz=np.vstack((x,y,z)).T >>> xyz2=downsample(xyz,3) >>> len(xyz2) 3 >>> xyz3=downsample(xyz,10) >>> len(xyz3) 10 ''' xyz = np.asarray(xyz) n_pts = xyz.shape[0] if n_pts == 0: raise ValueError('xyz array cannot be empty') if n_pts == 1: return xyz.copy().squeeze() cumlen = np.zeros(n_pts) cumlen[1:] = length(xyz, along=True) step=cumlen[-1]/(n_pols-1) if cumlen[-1]>> import numpy as np >>> from dipy.tracking.metrics import principal_components >>> theta=np.pi*np.linspace(0,1,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> va, ve = principal_components(xyz) >>> np.allclose(va, [0.51010101, 0.09883545, 0]) True ''' C=np.cov(xyz.T) va,ve=np.linalg.eig(C) return va,ve def midpoint2point(xyz,p): ''' Calculate distance from midpoint of a curve to arbitrary point p Parameters ------------- xyz : array-like shape (N,3) array representing x,y,z of N points in a track p : array shape (3,) array representing an arbitrary point with x,y,z coordinates in space. Returns --------- d : float a float number representing Euclidean distance Examples ----------- >>> import numpy as np >>> from dipy.tracking.metrics import midpoint2point, midpoint >>> theta=np.pi*np.linspace(0,1,100) >>> x=np.cos(theta) >>> y=np.sin(theta) >>> z=0*x >>> xyz=np.vstack((x,y,z)).T >>> dist=midpoint2point(xyz,np.array([0,0,0])) ''' mid=midpoint(xyz) return np.sqrt(np.sum((xyz-mid)**2)) if __name__ == "__main__": pass dipy-0.10.1/dipy/tracking/propspeed.pxd000066400000000000000000000006071263041327500200310ustar00rootroot00000000000000cimport numpy as cnp cdef cnp.npy_intp _propagation_direction(double *point,double* prev,double* qa,\ double *ind, double *odf_vertices,\ double qa_thr, double ang_thr,\ cnp.npy_intp *qa_shape,cnp.npy_intp* strides,\ double *direction,double total_weight) nogil dipy-0.10.1/dipy/tracking/propspeed.pyx000066400000000000000000000456001263041327500200600ustar00rootroot00000000000000# A type of -*- python -*- file """ Track propagation performance functions """ # cython: profile=True # cython: embedsignature=True cimport cython import numpy as np cimport numpy as cnp cdef extern from "dpy_math.h" nogil: double floor(double x) float fabs(float x) double cos(double x) double sin(double x) float acos(float x ) double sqrt(double x) double DPY_PI DEF PEAK_NO=5 # initialize numpy runtime cnp.import_array() @cython.cdivision(True) cdef cnp.npy_intp offset(cnp.npy_intp *indices, cnp.npy_intp *strides, int lenind, int typesize) nogil: ''' Access any element of any ndimensional numpy array using cython. Parameters ------------ indices : cnp.npy_intp * (int64 *) Indices of the array for which we want to find the offset. strides : cnp.npy_intp * strides lenind : int, len(indices) typesize : int Number of bytes for data type e.g. if 8 for double, 4 for int32 Returns ---------- offset : integer Element position in array ''' cdef int i cdef cnp.npy_intp summ = 0 for i from 0 <= i < lenind: summ += strides[i] * indices[i] summ /= typesize return summ def ndarray_offset(cnp.ndarray[cnp.npy_intp, ndim=1] indices, cnp.ndarray[cnp.npy_intp, ndim=1] strides, int lenind, int typesize): ''' Find offset in an N-dimensional ndarray using strides Parameters ---------- indices : array, npy_intp shape (N,) Indices of the array which we want to find the offset. strides : array, shape (N,) Strides of array. lenind : int len of the `indices` array. typesize : int Number of bytes for data type e.g. if 8 for double, 4 for int32 Returns ------- offset : integer Index position in flattened array Examples -------- >>> import numpy as np >>> from dipy.tracking.propspeed import ndarray_offset >>> I=np.array([1,1]) >>> A=np.array([[1,0,0],[0,2,0],[0,0,3]]) >>> S=np.array(A.strides) >>> ndarray_offset(I,S,2,A.dtype.itemsize) 4 >>> A.ravel()[4]==A[1,1] True ''' if not cnp.PyArray_CHKFLAGS(indices, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"indices is not C contiguous") if not cnp.PyArray_CHKFLAGS(strides, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"strides is not C contiguous") return offset( cnp.PyArray_DATA(indices), cnp.PyArray_DATA(strides), lenind, typesize) @cython.boundscheck(False) @cython.wraparound(False) def map_coordinates_trilinear_iso(cnp.ndarray[double, ndim=3] data, cnp.ndarray[double, ndim=2] points, cnp.ndarray[cnp.npy_intp, ndim=1] data_strides, cnp.npy_intp len_points, cnp.ndarray[double, ndim=1] result): ''' Trilinear interpolation (isotropic voxel size) Has similar behavior to ``map_coordinates`` from ``scipy.ndimage`` Parameters ---------- data : array, float64 shape (X, Y, Z) points : array, float64 shape(N, 3) data_strides : array npy_intp shape (3,) Strides sequence for `data` array len_points : cnp.npy_intp Number of points to interpolate result : array, float64 shape(N) The output array. This array should be initialized before you call this function. On exit it will contain the interpolated values from `data` at points given by `points`. Returns ------- None Notes ----- The output array `result` is filled in-place. ''' cdef: double w[8], values[24] cnp.npy_intp index[24], off, i, j double *ds= cnp.PyArray_DATA(data) double *ps= cnp.PyArray_DATA(points) cnp.npy_intp *strides = cnp.PyArray_DATA(data_strides) double *rs= cnp.PyArray_DATA(result) if not cnp.PyArray_CHKFLAGS(data, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"data is not C contiguous") if not cnp.PyArray_CHKFLAGS(points, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"points is not C contiguous") if not cnp.PyArray_CHKFLAGS(data_strides, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"data_strides is not C contiguous") if not cnp.PyArray_CHKFLAGS(result, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"result is not C contiguous") with nogil: for i in range(len_points): _trilinear_interpolation_iso(&ps[i * 3], w, index) rs[i] = 0 for j in range(8): weight = w[j] off = offset(&index[j * 3], strides, 3, 8) value = ds[off] rs[i] += weight * value return cdef void _trilinear_interpolation_iso(double *X, double *W, cnp.npy_intp *IN) nogil: ''' Interpolate in 3d volumes given point X Returns ------- W : weights IN : indices of the volume ''' cdef double Xf[3], d[3], nd[3] cdef cnp.npy_intp i # define the rectangular box where every corner is a neighboring voxel # (assuming center) !!! this needs to change for the affine case for i from 0 <= i < 3: Xf[i] = floor(X[i]) d[i] = X[i] - Xf[i] nd[i] = 1 - d[i] # weights # the weights are actualy the volumes of the 8 smaller boxes that define # the initial rectangular box for more on trilinear have a look here # http://en.wikipedia.org/wiki/Trilinear_interpolation # http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/interpolation/index.html W[0]=nd[0] * nd[1] * nd[2] W[1]= d[0] * nd[1] * nd[2] W[2]=nd[0] * d[1] * nd[2] W[3]=nd[0] * nd[1] * d[2] W[4]= d[0] * d[1] * nd[2] W[5]=nd[0] * d[1] * d[2] W[6]= d[0] * nd[1] * d[2] W[7]= d[0] * d[1] * d[2] # indices # the indices give you the indices of the neighboring voxels (the corners # of the box) e.g. the qa coordinates IN[0] =Xf[0]; IN[1] =Xf[1]; IN[2] =Xf[2] IN[3] =Xf[0]+1; IN[4] =Xf[1]; IN[5] =Xf[2] IN[6] =Xf[0]; IN[7] =Xf[1]+1; IN[8] =Xf[2] IN[9] =Xf[0]; IN[10]=Xf[1]; IN[11]=Xf[2]+1 IN[12]=Xf[0]+1; IN[13]=Xf[1]+1; IN[14]=Xf[2] IN[15]=Xf[0]; IN[16]=Xf[1]+1; IN[17]=Xf[2]+1 IN[18]=Xf[0]+1; IN[19]=Xf[1]; IN[20]=Xf[2]+1 IN[21]=Xf[0]+1; IN[22]=Xf[1]+1; IN[23]=Xf[2]+1 return cdef cnp.npy_intp _nearest_direction(double* dx, double* qa, double *ind, cnp.npy_intp peaks, double *odf_vertices, double qa_thr, double ang_thr, double *direction) nogil: ''' Give the nearest direction to a point, checking threshold and angle Parameters ------------ dx : double array shape (3,) Moving direction of the current tracking. qa : double array shape (Np,) Quantitative anisotropy matrix, where ``Np`` is the number of peaks. ind : array, float64 shape(x, y, z, Np) Index of the track orientation. peaks : npy_intp odf_vertices : double array shape (N, 3) Sampling directions on the sphere. qa_thr : float Threshold for QA, we want everything higher than this threshold. ang_thr : float Angle theshold, we only select fiber orientation within this range. direction : double array shape (3,) The fiber orientation to be considered in the interpolation. The array gets modified in-place. Returns -------- delta : bool Delta funtion: if 1 we give it weighting, if it is 0 we don't give any weighting. ''' cdef: double max_dot = 0 double angl,curr_dot double odfv[3] cnp.npy_intp i, j, max_doti = 0 # calculate the cos with radians angl = cos((DPY_PI * ang_thr) / 180.) # if the maximum peak is lower than the threshold then there is no point # continuing tracking if qa[0] <= qa_thr: return 0 # for all peaks find the minimum angle between odf_vertices and dx for i from 0 <= i < peaks: # if the current peak is smaller than the threshold then jump out if qa[i] <= qa_thr: break # copy odf_vertices for j from 0 <= j < 3: odfv[j]=odf_vertices[3 * ind[i] + j] # calculate the absolute dot product between dx and odf_vertices curr_dot = dx[0] * odfv[0] + dx[1] * odfv[1] + dx[2] * odfv[2] if curr_dot < 0: #abs check curr_dot = -curr_dot # maximum dot means minimum angle # store tha maximum dot and the corresponding index from the # neighboring voxel in maxdoti if curr_dot > max_dot: max_dot=curr_dot max_doti = i # if maxdot smaller than our angular *dot* threshold stop tracking if max_dot < angl: return 0 # copy the odf_vertices for the voxel qa indices which have the smaller # angle for j from 0 <= j < 3: odfv[j] = odf_vertices[3 * ind[max_doti] + j] # if the dot product is negative then return the opposite direction # otherwise return the same direction if dx[0] * odfv[0] + dx[1] * odfv[1] + dx[2] * odfv[2] < 0: for j from 0 <= j < 3: direction[j] = -odf_vertices[3 * ind[max_doti] + j] return 1 for j from 0 <= j < 3: direction[j]= odf_vertices[3 * ind[max_doti] + j] return 1 @cython.cdivision(True) cdef cnp.npy_intp _propagation_direction(double *point, double* dx, double* qa, double *ind, double *odf_vertices, double qa_thr, double ang_thr, cnp.npy_intp *qa_shape, cnp.npy_intp* strides, double *direction, double total_weight) nogil: cdef: double total_w = 0 # total weighting useful for interpolation double delta = 0 # store delta function (stopping function) result double new_direction[3] # new propagation direction double w[8], qa_tmp[PEAK_NO], ind_tmp[PEAK_NO] cnp.npy_intp index[24], xyz[4] cnp.npy_intp i, j, m double normd # number of allowed peaks e.g. for fa is 1 for gqi.qa is 5 cnp.npy_intp peaks = qa_shape[3] # Calculate qa & ind of each of the 8 neighboring voxels. # To do that we use trilinear interpolation and return the weights and the # indices for the weights i.e. xyz in qa[x,y,z] _trilinear_interpolation_iso(point, w, index) # check if you are outside of the volume for i from 0 <= i < 3: new_direction[i] = 0 if index[7 * 3 + i] >= qa_shape[i] or index[i] < 0: return 0 # for every weight sum the total weighting for m from 0 <= m < 8: for i from 0 <= i < 3: xyz[i]=index[m * 3 + i] # fill qa_tmp and ind_tmp for j from 0 <= j < peaks: xyz[3] = j off = offset( xyz, strides, 4, 8) qa_tmp[j] = qa[off] ind_tmp[j] = ind[off] # return the nearest direction by searching in all peaks delta=_nearest_direction(dx, qa_tmp, ind_tmp, peaks, odf_vertices, qa_thr, ang_thr, direction) # if delta is 0 then that means that there was no good direction # (obeying the thresholds) from that neighboring voxel, so this voxel # is not adding to the total weight if delta == 0: continue # add in total total_w += w[m] for i from 0 <= i < 3: new_direction[i] += w[m] * direction[i] # if less than half the volume is time to stop propagating if total_w < total_weight: # termination return 0 # all good return normalized weighted next direction normd = new_direction[0]**2 + new_direction[1]**2 + new_direction[2]**2 normd = 1 / sqrt(normd) for i from 0 <= i < 3: direction[i] = new_direction[i] * normd return 1 cdef cnp.npy_intp _initial_direction(double* seed,double *qa, double* ind, double* odf_vertices, double qa_thr, cnp.npy_intp* strides, cnp.npy_intp ref, double* direction) nogil: ''' First direction that we get from a seeding point ''' cdef: cnp.npy_intp point[4],off cnp.npy_intp i double qa_tmp,ind_tmp # Very tricky/cool addition/flooring that helps create a valid neighborhood # (grid) for the trilinear interpolation to run smoothly. # Find the index for qa for i from 0 <= i < 3: point[i] = floor(seed[i] + .5) point[3] = ref # Find the offcet in memory to access the qa value off = offset(point,strides, 4, 8) qa_tmp = qa[off] # Check for scalar threshold if qa_tmp < qa_thr: return 0 # Find the correct direction from the indices ind_tmp = ind[off] # similar to ind[point] in numpy syntax # Return initial direction through odf_vertices by ind for i from 0 <= i < 3: direction[i] = odf_vertices[3 * ind_tmp + i] return 1 def eudx_both_directions(cnp.ndarray[double, ndim=1] seed, cnp.npy_intp ref, cnp.ndarray[double, ndim=4] qa, cnp.ndarray[double, ndim=4] ind, cnp.ndarray[double, ndim=2] odf_vertices, double qa_thr, double ang_thr, double step_sz, double total_weight, cnp.npy_intp max_points): ''' Parameters ------------ seed : array, float64 shape (3,) Point where the tracking starts. ref : cnp.npy_intp int Index of peak to follow first. qa : array, float64 shape (X, Y, Z, Np) Anisotropy matrix, where ``Np`` is the number of maximum allowed peaks. ind : array, float64 shape(x, y, z, Np) Index of the track orientation. odf_vertices : double array shape (N, 3) Sampling directions on the sphere. qa_thr : float Threshold for QA, we want everything higher than this threshold. ang_thr : float Angle theshold, we only select fiber orientation within this range. step_sz : double total_weight : double max_points : cnp.npy_intp Returns ------- track : array, shape (N,3) ''' cdef: double *ps = cnp.PyArray_DATA(seed) double *pqa = cnp.PyArray_DATA(qa) double *pin = cnp.PyArray_DATA(ind) double *pverts = cnp.PyArray_DATA(odf_vertices) cnp.npy_intp *pstr = qa.strides cnp.npy_intp *qa_shape = qa.shape cnp.npy_intp *pvstr = odf_vertices.strides cnp.npy_intp d, i, j, cnt double direction[3], dx[3], idirection[3], ps2[3] double tmp, ftmp if not cnp.PyArray_CHKFLAGS(seed, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"seed is not C contiguous") if not cnp.PyArray_CHKFLAGS(qa, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"qa is not C contiguous") if not cnp.PyArray_CHKFLAGS(ind, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"ind is not C contiguous") if not cnp.PyArray_CHKFLAGS(odf_vertices, cnp.NPY_C_CONTIGUOUS): raise ValueError(u"odf_vertices is not C contiguous") cnt = 0 d = _initial_direction(ps, pqa, pin, pverts, qa_thr, pstr, ref, idirection) if d == 0: return None for i from 0 <= i < 3: # store the initial direction dx[i] = idirection[i] # ps2 is for downwards and ps for upwards propagation ps2[i] = ps[i] point = seed.copy() track = [] track.append(point.copy()) # track towards one direction while d: d = _propagation_direction(ps, dx, pqa, pin, pverts, qa_thr, ang_thr, qa_shape, pstr, direction, total_weight) if d == 0: break if cnt > max_points: break # update the track for i from 0 <= i < 3: dx[i] = direction[i] # check for boundaries tmp = ps[i] + step_sz * dx[i] if tmp > qa_shape[i] - 1 or tmp < 0.: d = 0 break # propagate ps[i] = tmp point[i] = ps[i] if d == 1: track.append(point.copy()) cnt += 1 d = 1 for i from 0 <= i < 3: dx[i] = -idirection[i] cnt = 0 # track towards the opposite direction while d: d = _propagation_direction(ps2, dx, pqa, pin, pverts, qa_thr, ang_thr, qa_shape, pstr, direction, total_weight) if d == 0: break if cnt > max_points: break # update the track for i from 0 <= i < 3: dx[i] = direction[i] # check for boundaries tmp=ps2[i] + step_sz*dx[i] if tmp > qa_shape[i] - 1 or tmp < 0.: d = 0 break # propagate ps2[i] = tmp point[i] = ps2[i] # to be changed # add track point if d == 1: track.insert(0, point.copy()) cnt += 1 # prepare to return final track for the current seed tmp_track = np.array(track, dtype=np.float32) # Sometimes one of the ends takes small negative values; needs to be # investigated further # Return track for the current seed point and ref return tmp_track dipy-0.10.1/dipy/tracking/streamline.py000066400000000000000000000242741263041327500200360ustar00rootroot00000000000000from warnings import warn import numpy as np from nibabel.affines import apply_affine from dipy.tracking.streamlinespeed import set_number_of_points from dipy.tracking.streamlinespeed import length from dipy.tracking.streamlinespeed import compress_streamlines import dipy.tracking.utils as ut from dipy.tracking.utils import streamline_near_roi from dipy.core.geometry import dist_to_corner from scipy.spatial.distance import cdist from copy import deepcopy def unlist_streamlines(streamlines): """ Return the streamlines not as a list but as an array and an offset Parameters ---------- streamlines: sequence Returns ------- points : array offsets : array """ points = np.concatenate(streamlines, axis=0) offsets = np.zeros(len(streamlines), dtype='i8') curr_pos = 0 prev_pos = 0 for (i, s) in enumerate(streamlines): prev_pos = curr_pos curr_pos += s.shape[0] points[prev_pos:curr_pos] = s offsets[i] = curr_pos return points, offsets def relist_streamlines(points, offsets): """ Given a representation of a set of streamlines as a large array and an offsets array return the streamlines as a list of shorter arrays. Parameters ----------- points : array offsets : array Returns ------- streamlines: sequence """ streamlines = [] streamlines.append(points[0: offsets[0]]) for i in range(len(offsets) - 1): streamlines.append(points[offsets[i]: offsets[i + 1]]) return streamlines def center_streamlines(streamlines): """ Move streamlines to the origin Parameters ---------- streamlines : list List of 2D ndarrays of shape[-1]==3 Returns ------- new_streamlines : list List of 2D ndarrays of shape[-1]==3 inv_shift : ndarray Translation in x,y,z to go back in the initial position """ center = np.mean(np.concatenate(streamlines, axis=0), axis=0) return [s - center for s in streamlines], center def transform_streamlines(streamlines, mat): """ Apply affine transformation to streamlines Parameters ---------- streamlines : list List of 2D ndarrays of shape[-1]==3 mat : array, (4, 4) transformation matrix Returns ------- new_streamlines : list List of the transformed 2D ndarrays of shape[-1]==3 """ return [apply_affine(mat, s) for s in streamlines] def select_random_set_of_streamlines(streamlines, select): """ Select a random set of streamlines Parameters ---------- streamlines : list List of 2D ndarrays of shape[-1]==3 select : int Number of streamlines to select. If there are less streamlines than ``select`` then ``select=len(streamlines)``. Returns ------- selected_streamlines : list Notes ----- The same streamline will not be selected twice. """ len_s = len(streamlines) index = np.random.choice(len_s, min(select, len_s), replace=False) return [streamlines[i] for i in index] def select_by_rois(streamlines, rois, include, mode=None, affine=None, tol=None): """Select streamlines based on logical relations with several regions of interest (ROIs). For example, select streamlines that pass near ROI1, but only if they do not pass near ROI2. Parameters ---------- streamlines : list A list of candidate streamlines for selection rois : list or ndarray A list of 3D arrays, each with shape (x, y, z) corresponding to the shape of the brain volume, or a 4D array with shape (n_rois, x, y, z). Non-zeros in each volume are considered to be within the region include : array or list A list or 1D array of boolean values marking inclusion or exclusion criteria. If a streamline is near any of the inclusion ROIs, it should evaluate to True, unless it is also near any of the exclusion ROIs. mode : string, optional One of {"any", "all", "either_end", "both_end"}, where a streamline is associated with an ROI if: "any" : any point is within tol from ROI. Default. "all" : all points are within tol from ROI. "either_end" : either of the end-points is within tol from ROI "both_end" : both end points are within tol from ROI. affine : ndarray Affine transformation from voxels to streamlines. Default: identity. tol : float Distance (in the units of the streamlines, usually mm). If any coordinate in the streamline is within this distance from the center of any voxel in the ROI, the filtering criterion is set to True for this streamline, otherwise False. Defaults to the distance between the center of each voxel and the corner of the voxel. Notes ----- The only operation currently possible is "(A or B or ...) and not (X or Y or ...)", where A, B are inclusion regions and X, Y are exclusion regions. Returns ------- generator Generates the streamlines to be included based on these criteria. See also -------- :func:`dipy.tracking.utils.near_roi` :func:`dipy.tracking.utils.reduce_rois` Examples -------- >>> streamlines = [np.array([[0, 0., 0.9], ... [1.9, 0., 0.]]), ... np.array([[0., 0., 0], ... [0, 1., 1.], ... [0, 2., 2.]]), ... np.array([[2, 2, 2], ... [3, 3, 3]])] >>> mask1 = np.zeros((4, 4, 4), dtype=bool) >>> mask2 = np.zeros_like(mask1) >>> mask1[0, 0, 0] = True >>> mask2[1, 0, 0] = True >>> selection = select_by_rois(streamlines, [mask1, mask2], ... [True, True], ... tol=1) >>> list(selection) # The result is a generator [array([[ 0. , 0. , 0.9], [ 1.9, 0. , 0. ]]), array([[ 0., 0., 0.], [ 0., 1., 1.], [ 0., 2., 2.]])] >>> selection = select_by_rois(streamlines, [mask1, mask2], ... [True, False], ... tol=0.87) >>> list(selection) [array([[ 0., 0., 0.], [ 0., 1., 1.], [ 0., 2., 2.]])] >>> selection = select_by_rois(streamlines, [mask1, mask2], ... [True, True], ... mode="both_end", ... tol=1.0) >>> list(selection) [array([[ 0. , 0. , 0.9], [ 1.9, 0. , 0. ]])] >>> mask2[0, 2, 2] = True >>> selection = select_by_rois(streamlines, [mask1, mask2], ... [True, True], ... mode="both_end", ... tol=1.0) >>> list(selection) [array([[ 0. , 0. , 0.9], [ 1.9, 0. , 0. ]]), array([[ 0., 0., 0.], [ 0., 1., 1.], [ 0., 2., 2.]])] """ if affine is None: affine = np.eye(4) # This calculates the maximal distance to a corner of the voxel: dtc = dist_to_corner(affine) if tol is None: tol = dtc elif tol < dtc: w_s = "Tolerance input provided would create gaps in your" w_s += " inclusion ROI. Setting to: %s" % dist_to_corner warn(w_s) tol = dtc include_roi, exclude_roi = ut.reduce_rois(rois, include) include_roi_coords = np.array(np.where(include_roi)).T x_include_roi_coords = apply_affine(affine, include_roi_coords) exclude_roi_coords = np.array(np.where(exclude_roi)).T x_exclude_roi_coords = apply_affine(affine, exclude_roi_coords) if mode is None: mode = "any" for sl in streamlines: include = streamline_near_roi(sl, x_include_roi_coords, tol=tol, mode=mode) exclude = streamline_near_roi(sl, x_exclude_roi_coords, tol=tol, mode=mode) if include & ~exclude: yield sl def orient_by_rois(streamlines, roi1, roi2, affine=None, copy=True): """Orient a set of streamlines according to a pair of ROIs Parameters ---------- streamlines : list List of 3d arrays. Each array contains the xyz coordinates of a single streamline. roi1, roi2 : ndarray Binary masks designating the location of the regions of interest, or coordinate arrays (n-by-3 array with ROI coordinate in each row). affine : ndarray Affine transformation from voxels to streamlines. Default: identity. copy : bool Whether to make a copy of the input, or mutate the input inplace. Returns ------- streamlines : list The same 3D arrays, but reoriented with respect to the ROIs Examples -------- >>> streamlines = [np.array([[0, 0., 0], ... [1, 0., 0.], ... [2, 0., 0.]]), ... np.array([[2, 0., 0.], ... [1, 0., 0], ... [0, 0, 0.]])] >>> roi1 = np.zeros((4, 4, 4), dtype=bool) >>> roi2 = np.zeros_like(roi1) >>> roi1[0, 0, 0] = True >>> roi2[1, 0, 0] = True >>> orient_by_rois(streamlines, roi1, roi2) [array([[ 0., 0., 0.], [ 1., 0., 0.], [ 2., 0., 0.]]), array([[ 0., 0., 0.], [ 1., 0., 0.], [ 2., 0., 0.]])] """ # If we don't already have coordinates on our hands: if len(roi1.shape) == 3: roi1 = np.asarray(np.where(roi1.astype(bool))).T if len(roi2.shape) == 3: roi2 = np.asarray(np.where(roi2.astype(bool))).T if affine is not None: roi1 = apply_affine(affine, roi1) roi2 = apply_affine(affine, roi2) # Make a copy, so you don't change the output in place: if copy: new_sl = deepcopy(streamlines) else: new_sl = streamlines for idx, sl in enumerate(streamlines): dist1 = cdist(sl, roi1, 'euclidean') dist2 = cdist(sl, roi2, 'euclidean') min1 = np.argmin(dist1, 0) min2 = np.argmin(dist2, 0) if min1[0] > min2[0]: new_sl[idx] = sl[::-1] return new_sl dipy-0.10.1/dipy/tracking/streamlinespeed.pxd000066400000000000000000000006141263041327500212120ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False ctypedef float[:,:] float2d ctypedef double[:,:] double2d ctypedef fused Streamline: float2d double2d cdef double c_length(Streamline streamline) nogil cdef void c_arclengths(Streamline streamline, double* out) nogil cdef void c_set_number_of_points(Streamline streamline, Streamline out) nogildipy-0.10.1/dipy/tracking/streamlinespeed.pyx000066400000000000000000000462031263041327500212430ustar00rootroot00000000000000# distutils: language = c # cython: wraparound=False, cdivision=True, boundscheck=False import numpy as np cimport numpy as np import cython from libc.math cimport sqrt cdef extern from "dpy_math.h" nogil: bint dpy_isnan(double x) cdef extern from "stdlib.h" nogil: ctypedef unsigned long size_t void free(void *ptr) void *malloc(size_t size) cdef double c_length(Streamline streamline) nogil: cdef: np.npy_intp i double out = 0.0 double dn, sum_dn_sqr for i in range(1, streamline.shape[0]): sum_dn_sqr = 0.0 for j in range(streamline.shape[1]): dn = streamline[i, j] - streamline[i-1, j] sum_dn_sqr += dn*dn out += sqrt(sum_dn_sqr) return out def length(streamlines): ''' Euclidean length of streamlines This will give length in mm if streamlines are expressed in world coordinates. Parameters ------------ streamlines : one or a list of array-like shape (N,3) array representing x,y,z of N points in a streamline Returns --------- lengths : scalar or array shape (N,) scalar representing the length of one streamline, or array representing the lengths of multiple streamlines. Examples ---------- >>> from dipy.tracking.streamline import length >>> import numpy as np >>> streamline = np.array([[1, 1, 1], [2, 3, 4], [0, 0, 0]]) >>> expected_length = np.sqrt([1+2**2+3**2, 2**2+3**2+4**2]).sum() >>> length(streamline) == expected_length True >>> streamlines = [streamline, np.vstack([streamline, streamline[::-1]])] >>> expected_lengths = [expected_length, 2*expected_length] >>> np.allclose(expected_lengths, [length(streamlines[0]), length(streamlines[1])]) True >>> length([]) 0.0 >>> length(np.array([[1, 2, 3]])) 0.0 ''' only_one_streamlines = False if type(streamlines) is np.ndarray: only_one_streamlines = True streamlines = [streamlines] if len(streamlines) == 0: return 0.0 dtype = streamlines[0].dtype for streamline in streamlines: if streamline.dtype != dtype: dtype = None break # Allocate memory for each streamline length. streamlines_length = np.empty(len(streamlines), dtype=np.float64) cdef np.npy_intp i if dtype is None: # List of streamlines having different dtypes for i in range(len(streamlines)): dtype = streamlines[i].dtype # HACK: To avoid memleaks we have to recast with astype(dtype). streamline = streamlines[i].astype(dtype) if dtype != np.float32 and dtype != np.float64: dtype = np.float64 if dtype == np.int64 or dtype == np.uint64 else np.float32 streamline = streamlines[i].astype(dtype) if dtype == np.float32: streamlines_length[i] = c_length[float2d](streamline) else: streamlines_length[i] = c_length[double2d](streamline) elif dtype == np.float32: # All streamlines have composed of float32 points for i in range(len(streamlines)): # HACK: To avoid memleaks we have to recast with astype(dtype). streamline = streamlines[i].astype(dtype) streamlines_length[i] = c_length[float2d](streamline) elif dtype == np.float64: # All streamlines are composed of float64 points for i in range(len(streamlines)): # HACK: To avoid memleaks we have to recast with astype(dtype). streamline = streamlines[i].astype(dtype) streamlines_length[i] = c_length[double2d](streamline) elif dtype == np.int64 or dtype == np.uint64: # All streamlines are composed of int64 or uint64 points so convert them in float64 one at the time for i in range(len(streamlines)): streamline = streamlines[i].astype(np.float64) streamlines_length[i] = c_length[double2d](streamline) else: # All streamlines are composed of points with a dtype fitting in 32bits so convert them in float32 one at the time for i in range(len(streamlines)): streamline = streamlines[i].astype(np.float32) streamlines_length[i] = c_length[float2d](streamline) if only_one_streamlines: return streamlines_length[0] else: return streamlines_length cdef void c_arclengths(Streamline streamline, double* out) nogil: cdef np.npy_intp i = 0 cdef double dn out[0] = 0.0 for i in range(1, streamline.shape[0]): out[i] = 0.0 for j in range(streamline.shape[1]): dn = streamline[i, j] - streamline[i-1, j] out[i] += dn*dn out[i] = out[i-1] + sqrt(out[i]) cdef void c_set_number_of_points(Streamline streamline, Streamline out) nogil: cdef: np.npy_intp N = streamline.shape[0] np.npy_intp D = streamline.shape[1] np.npy_intp new_N = out.shape[0] double ratio, step, next_point np.npy_intp i, j, k, dim # Get arclength at each point. arclengths = malloc(streamline.shape[0] * sizeof(double)) c_arclengths(streamline, arclengths) step = arclengths[N-1] / (new_N-1) next_point = 0.0 i = 0 j = 0 k = 0 while next_point < arclengths[N-1]: if next_point == arclengths[k]: for dim in range(D): out[i,dim] = streamline[j,dim]; next_point += step i += 1 j += 1 k += 1 elif next_point < arclengths[k]: ratio = 1 - ((arclengths[k]-next_point) / (arclengths[k]-arclengths[k-1])) for dim in range(D): out[i,dim] = streamline[j-1,dim] + ratio * (streamline[j,dim] - streamline[j-1,dim]) next_point += step i += 1 else: j += 1 k += 1 # Last resampled point always the one from orignal streamline. for dim in range(D): out[new_N-1,dim] = streamline[N-1,dim] free(arclengths) def set_number_of_points(streamlines, nb_points=3): ''' Change the number of points of streamlines (either by downsampling or upsampling) Change the number of points of streamlines in order to obtain `nb_points`-1 segments of equal length. Points of streamlines will be modified along the curve. Parameters ---------- streamlines : one or a list of array-like shape (N,3) array representing x,y,z of N points in a streamline nb_points : int integer representing number of points wanted along the curve. Returns ------- modified_streamlines : one or a list of array-like shape (`nb_points`,3) array representing x,y,z of `nb_points` points that where interpolated. Examples -------- >>> from dipy.tracking.streamline import set_number_of_points >>> import numpy as np >>> # One streamline: a semi-circle >>> theta = np.pi*np.linspace(0, 1, 100) >>> x = np.cos(theta) >>> y = np.sin(theta) >>> z = 0 * x >>> streamline = np.vstack((x, y, z)).T >>> modified_streamline = set_number_of_points(streamline, 3) >>> len(modified_streamline) 3 >>> # Multiple streamlines >>> streamlines = [streamline, streamline[::2]] >>> modified_streamlines = set_number_of_points(streamlines, 10) >>> [len(s) for s in streamlines] [100, 50] >>> [len(s) for s in modified_streamlines] [10, 10] ''' only_one_streamlines = False if type(streamlines) is np.ndarray: only_one_streamlines = True streamlines = [streamlines] if len(streamlines) == 0: return [] dtype = streamlines[0].dtype for streamline in streamlines: if streamline.dtype != dtype: dtype = None if len(streamline) < 2: raise ValueError("All streamlines must have at least 2 points.") # Allocate memory for each modified streamline modified_streamlines = [] cdef np.npy_intp i if dtype is None: # List of streamlines having different dtypes for i in range(len(streamlines)): dtype = streamlines[i].dtype # HACK: To avoid memleaks we have to recast with astype(dtype). streamline = streamlines[i].astype(dtype) if dtype != np.float32 and dtype != np.float64: dtype = np.float64 if dtype == np.int64 or dtype == np.uint64 else np.float32 streamline = streamline.astype(dtype) modified_streamline = np.empty((nb_points, streamline.shape[1]), dtype=dtype) if dtype == np.float32: c_set_number_of_points[float2d](streamline, modified_streamline) else: c_set_number_of_points[double2d](streamline, modified_streamline) # HACK: To avoid memleaks we have to recast with astype(dtype). modified_streamlines.append(modified_streamline.astype(dtype)) elif dtype == np.float32: # All streamlines have composed of float32 points for i in range(len(streamlines)): streamline = streamlines[i].astype(dtype) modified_streamline = np.empty((nb_points, streamline.shape[1]), dtype=streamline.dtype) c_set_number_of_points[float2d](streamline, modified_streamline) # HACK: To avoid memleaks we have to recast with astype(dtype). modified_streamlines.append(modified_streamline.astype(dtype)) elif dtype == np.float64: # All streamlines are composed of float64 points for i in range(len(streamlines)): streamline = streamlines[i].astype(dtype) modified_streamline = np.empty((nb_points, streamline.shape[1]), dtype=streamline.dtype) c_set_number_of_points[double2d](streamline, modified_streamline) # HACK: To avoid memleaks we have to recast with astype(dtype). modified_streamlines.append(modified_streamline.astype(dtype)) elif dtype == np.int64 or dtype == np.uint64: # All streamlines are composed of int64 or uint64 points so convert them in float64 one at the time for i in range(len(streamlines)): streamline = streamlines[i].astype(np.float64) modified_streamline = np.empty((nb_points, streamline.shape[1]), dtype=streamline.dtype) c_set_number_of_points[double2d](streamline, modified_streamline) # HACK: To avoid memleaks we have to recast with astype(np.float64). modified_streamlines.append(modified_streamline.astype(np.float64)) else: # All streamlines are composed of points with a dtype fitting in 32bits so convert them in float32 one at the time for i in range(len(streamlines)): streamline = streamlines[i].astype(np.float32) modified_streamline = np.empty((nb_points, streamline.shape[1]), dtype=streamline.dtype) c_set_number_of_points[float2d](streamline, modified_streamline) # HACK: To avoid memleaks we have to recast with astype(np.float32). modified_streamlines.append(modified_streamline.astype(np.float32)) if only_one_streamlines: return modified_streamlines[0] else: return modified_streamlines cdef double c_norm_of_cross_product(double bx, double by, double bz, double cx, double cy, double cz) nogil: """ Computes the norm of the cross-product in 3D. """ cdef double ax, ay, az ax = by*cz - bz*cy ay = bz*cx - bx*cz az = bx*cy - by*cx return sqrt(ax*ax + ay*ay + az*az) cdef double c_dist_to_line(Streamline streamline, np.npy_intp prev, np.npy_intp next, np.npy_intp curr) nogil: """ Computes the shortest Euclidean distance between a point `curr` and the line passing through `prev` and `next`. """ cdef: double dn, norm1, norm2 np.npy_intp D = streamline.shape[1] # Compute cross product of next-prev and curr-next norm1 = c_norm_of_cross_product(streamline[next, 0]-streamline[prev, 0], streamline[next, 1]-streamline[prev, 1], streamline[next, 2]-streamline[prev, 2], streamline[curr, 0]-streamline[next, 0], streamline[curr, 1]-streamline[next, 1], streamline[curr, 2]-streamline[next, 2]) # Norm of next-prev norm2 = 0.0 for d in range(D): dn = streamline[next, d]-streamline[prev, d] norm2 += dn*dn norm2 = sqrt(norm2) return norm1 / norm2 cdef double c_segment_length(Streamline streamline, np.npy_intp start, np.npy_intp end) nogil: """ Computes the length of the segment going from `start` to `end`. """ cdef: np.npy_intp D = streamline.shape[1] np.npy_intp d double segment_length = 0.0 double dn for d in range(D): dn = streamline[end, d] - streamline[start, d] segment_length += dn*dn return sqrt(segment_length) cdef np.npy_intp c_compress_streamline(Streamline streamline, Streamline out, double tol_error, double max_segment_length) nogil: """ Compresses a streamline (see function `compress_streamlines`).""" cdef: np.npy_intp N = streamline.shape[0] np.npy_intp D = streamline.shape[1] np.npy_intp nb_points = 0 np.npy_intp d, prev, next, curr double segment_length # Copy first point since it is always kept. for d in range(D): out[0, d] = streamline[0, d] nb_points = 1 prev = 0 # Loop through the points of the streamline checking if we can use the # linearized segment: next-prev. We start with next=2 (third points) since # we already added point 0 and segment between the two firsts is linear. for next in range(2, N): # Euclidean distance between last added point and current point. if c_segment_length(streamline, prev, next) > max_segment_length: for d in range(D): out[nb_points, d] = streamline[next-1, d] nb_points += 1 prev = next-1 continue # Check that each point is not offset by more than `tol_error` mm. for curr in range(prev+1, next): dist = c_dist_to_line(streamline, prev, next, curr) if dpy_isnan(dist) or dist > tol_error: for d in range(D): out[nb_points, d] = streamline[next-1, d] nb_points += 1 prev = next-1 break # Copy last point since it is always kept. for d in range(D): out[nb_points, d] = streamline[N-1, d] nb_points += 1 return nb_points def compress_streamlines(streamlines, tol_error=0.01, max_segment_length=10): """ Compress streamlines by linearization as in [Presseau15]_. The compression consists in merging consecutive segments that are nearly collinear. The merging is achieved by removing the point the two segments have in common. The linearization process [Presseau15]_ ensures that every point being removed are within a certain margin (in mm) of the resulting streamline. Recommendations for setting this margin can be found in [Presseau15]_ (in which they called it tolerance error). The compression also ensures that two consecutive points won't be too far from each other (precisely less or equal than `max_segment_length`mm). This is a tradeoff to speed up the linearization process [Rheault15]_. A low value will result in a faster linearization but low compression, whereas a high value will result in a slower linearization but high compression. Parameters ---------- streamlines : one or a list of array-like of shape (N,3) Array representing x,y,z of N points in a streamline. tol_error : float (optional) Tolerance error in mm (default: 0.01). A rule of thumb is to set it to 0.01mm for deterministic streamlines and 0.1mm for probabilitic streamlines. max_segment_length : float (optional) Maximum length in mm of any given segment produced by the compression. The default is 10mm. (In [Presseau15]_, they used a value of `np.inf`). Returns ------- compressed_streamlines : one or a list of array-like Results of the linearization process. Examples -------- >>> from dipy.tracking.streamline import compress_streamlines >>> import numpy as np >>> # One streamline: a wiggling line >>> rng = np.random.RandomState(42) >>> streamline = np.linspace(0, 10, 100*3).reshape((100, 3)) >>> streamline += 0.2 * rng.rand(100, 3) >>> c_streamline = compress_streamlines(streamline, tol_error=0.2) >>> len(streamline) 100 >>> len(c_streamline) 10 >>> # Multiple streamlines >>> streamlines = [streamline, streamline[::2]] >>> c_streamlines = compress_streamlines(streamlines, tol_error=0.2) >>> [len(s) for s in streamlines] [100, 50] >>> [len(s) for s in c_streamlines] [10, 7] Notes ----- Be aware that compressed streamlines have variable step sizes. One needs to be careful when computing streamlines-based metrics [Houde15]_. References ---------- .. [Presseau15] Presseau C. et al., A new compression format for fiber tracking datasets, NeuroImage, no 109, 73-83, 2015. .. [Rheault15] Rheault F. et al., Real Time Interaction with Millions of Streamlines, ISMRM, 2015. .. [Houde15] Houde J.-C. et al. How to Avoid Biased Streamlines-Based Metrics for Streamlines with Variable Step Sizes, ISMRM, 2015. """ only_one_streamlines = False if type(streamlines) is np.ndarray: only_one_streamlines = True streamlines = [streamlines] if len(streamlines) == 0: return [] compressed_streamlines = [] cdef np.npy_intp i for i in range(len(streamlines)): dtype = streamlines[i].dtype # HACK: To avoid memleaks we have to recast with astype(dtype). streamline = streamlines[i].astype(dtype) shape = streamline.shape if dtype != np.float32 and dtype != np.float64: dtype = np.float64 if dtype == np.int64 or dtype == np.uint64 else np.float32 streamline = streamline.astype(dtype) if shape[0] <= 2: compressed_streamlines.append(streamline.copy()) continue compressed_streamline = np.empty(shape, dtype) if dtype == np.float32: nb_points = c_compress_streamline[float2d](streamline, compressed_streamline, tol_error, max_segment_length) else: nb_points = c_compress_streamline[double2d](streamline, compressed_streamline, tol_error, max_segment_length) compressed_streamline.resize((nb_points, streamline.shape[1])) # HACK: To avoid memleaks we have to recast with astype(dtype). compressed_streamlines.append(compressed_streamline.astype(dtype)) if only_one_streamlines: return compressed_streamlines[0] else: return compressed_streamlines dipy-0.10.1/dipy/tracking/tests/000077500000000000000000000000001263041327500164525ustar00rootroot00000000000000dipy-0.10.1/dipy/tracking/tests/__init__.py000066400000000000000000000001211263041327500205550ustar00rootroot00000000000000# Test callable from numpy.testing import Tester test = Tester().test del Tester dipy-0.10.1/dipy/tracking/tests/test_distances.py000066400000000000000000000235431263041327500220470ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np import nose from nose.tools import assert_true, assert_false, assert_equal, assert_almost_equal from numpy.testing import assert_array_equal, assert_array_almost_equal from dipy.tracking import metrics as tm from dipy.tracking import distances as pf def test_LSCv2(): xyz1=np.array([[1,0,0],[2,0,0],[3,0,0]],dtype='float32') xyz2=np.array([[1,0,0],[1,2,0],[1,3,0]],dtype='float32') xyz3=np.array([[1.1,0,0],[1,2,0],[1,3,0]],dtype='float32') xyz4=np.array([[1,0,0],[2.1,0,0],[3,0,0]],dtype='float32') xyz5=np.array([[100,0,0],[200,0,0],[300,0,0]],dtype='float32') xyz6=np.array([[0,20,0],[0,40,0],[300,50,0]],dtype='float32') T=[xyz1,xyz2,xyz3,xyz4,xyz5,xyz6] C=pf.local_skeleton_clustering(T,0.2) #print C #print len(C) C2=pf.local_skeleton_clustering_3pts(T,0.2) #print C2 #print len(C2) #""" for i in range(40): xyz=np.random.rand(3,3).astype('f4') T.append(xyz) from time import time t1=time() C3=pf.local_skeleton_clustering(T,.5) t2=time() print(t2-t1) print(len(C3)) t1=time() C4=pf.local_skeleton_clustering_3pts(T,.5) t2=time() print(t2-t1) print(len(C4)) for c in C3: assert_equal(np.sum(C3[c]['hidden']-C4[c]['hidden']),0) T2=[] for i in range(10**4): xyz=np.random.rand(10,3).astype('f4') T2.append(xyz) t1=time() C5=pf.local_skeleton_clustering(T2,.5) t2=time() print(t2-t1) print(len(C5)) from dipy.data import get_data from nibabel import trackvis as tv try: from dipy.viz import fvtk except ImportError as e: raise nose.plugins.skip.SkipTest( 'Fails to import dipy.viz due to %s' % str(e)) streams,hdr=tv.read(get_data('fornix')) T3=[tm.downsample(s[0],6) for s in streams] print('lenT3',len(T3)) C=pf.local_skeleton_clustering(T3,10.) print('lenC',len(C)) """ r=fvtk.ren() colors=np.zeros((len(C),3)) for c in C: color=np.random.rand(3) for i in C[c]['indices']: fvtk.add(r,fvtk.line(T3[i],color)) colors[c]=color fvtk.show(r) fvtk.clear(r) skeleton=[] def width(w): if w<1: return 1 else: return w for c in C: bundle=[T3[i] for i in C[c]['indices']] si,s=pf.most_similar_track_mam(bundle,'avg') skeleton.append(bundle[si]) fvtk.label(r,text=str(len(bundle)),pos=(bundle[si][-1]),scale=(2,2,2)) fvtk.add(r,fvtk.line(skeleton,colors,opacity=1,linewidth=width(len(bundle)/10.))) fvtk.show(r) """ def test_bundles_distances_mam(): xyz1A = np.array([[0,0,0],[1,0,0],[2,0,0],[3,0,0]],dtype='float32') xyz2A = np.array([[0,1,1],[1,0,1],[2,3,-2]],dtype='float32') xyz1B = np.array([[-1,0,0],[2,0,0],[2,3,0],[3,0,0]],dtype='float32') tracksA = [xyz1A, xyz2A] tracksB = [xyz1B, xyz1A, xyz2A] for metric in ('avg', 'min', 'max'): DM2 = pf.bundles_distances_mam(tracksA, tracksB, metric=metric) def test_bundles_distances_mdf(): xyz1A = np.array([[0,0,0],[1,0,0],[2,0,0]],dtype='float32') xyz2A = np.array([[0,1,1],[1,0,1],[2,3,-2]],dtype='float32') xyz3A = np.array([[0,0,0],[1,0,0],[3,0,0]],dtype='float32') xyz1B = np.array([[-1,0,0],[2,0,0],[2,3,0]],dtype='float32') tracksA = [xyz1A,xyz2A] tracksB = [xyz1B, xyz1A, xyz2A] DM2 = pf.bundles_distances_mdf(tracksA, tracksB) tracksA = [xyz1A,xyz1A] tracksB = [xyz1A,xyz1A] DM2 = pf.bundles_distances_mdf(tracksA, tracksB) assert_array_almost_equal(DM2,np.zeros((2,2))) tracksA = [xyz1A,xyz3A] tracksB = [xyz2A] DM2 = pf.bundles_distances_mdf(tracksA, tracksB) print(DM2) #assert_array_almost_equal(DM2,np.zeros((2,2))) DM=np.zeros(DM2.shape) for (a,ta) in enumerate(tracksA): for (b,tb) in enumerate(tracksB): md=np.sum(np.sqrt(np.sum((ta-tb)**2,axis=1)))/3. md2=np.sum(np.sqrt(np.sum((ta-tb[::-1])**2,axis=1)))/3. DM[a,b]=np.min((md,md2)) print(DM) print('--------------') for t in tracksA: print(t) print('--------------') for t in tracksB: print(t) assert_array_almost_equal(DM,DM2,4) def test_mam_distances(): xyz1 = np.array([[0,0,0],[1,0,0],[2,0,0],[3,0,0]]) xyz2 = np.array([[0,1,1],[1,0,1],[2,3,-2]]) # dm=array([[ 2, 2, 17], [ 3, 1, 14], [6, 2, 13], [11, 5, 14]]) # this is the distance matrix between points of xyz1 # and points of xyz2 xyz1=xyz1.astype('float32') xyz2=xyz2.astype('float32') zd2 = pf.mam_distances(xyz1,xyz2) assert_almost_equal( zd2[0], 1.76135602742) def test_approx_ei_traj(): segs=100 t=np.linspace(0,1.75*2*np.pi,segs) x =t y=5*np.sin(5*t) z=np.zeros(x.shape) xyz=np.vstack((x,y,z)).T xyza=pf.approx_polygon_track(xyz) assert_equal(len(xyza), 27) def test_approx_mdl_traj(): t=np.linspace(0,1.75*2*np.pi,100) x = np.sin(t) y = np.cos(t) z = t xyz=np.vstack((x,y,z)).T xyza1 = pf.approximate_mdl_trajectory(xyz,alpha=1.) xyza2 = pf.approximate_mdl_trajectory(xyz,alpha=2.) assert_equal(len(xyza1), 10) assert_equal(len(xyza2), 8) assert_array_almost_equal( xyza1, np.array([[ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00], [ 9.39692621e-01, 3.42020143e-01, 1.22173048e+00], [ 6.42787610e-01, -7.66044443e-01, 2.44346095e+00], [ -5.00000000e-01, -8.66025404e-01, 3.66519143e+00], [ -9.84807753e-01, 1.73648178e-01, 4.88692191e+00], [ -1.73648178e-01, 9.84807753e-01, 6.10865238e+00], [ 8.66025404e-01, 5.00000000e-01, 7.33038286e+00], [ 7.66044443e-01, -6.42787610e-01, 8.55211333e+00], [ -3.42020143e-01, -9.39692621e-01, 9.77384381e+00], [ -1.00000000e+00, -4.28626380e-16, 1.09955743e+01]])) assert_array_almost_equal(xyza2, np.array([[ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00], [ 9.95471923e-01, -9.50560433e-02, 1.66599610e+00], [ -1.89251244e-01, -9.81928697e-01, 3.33199221e+00], [ -9.59492974e-01, 2.81732557e-01, 4.99798831e+00], [ 3.71662456e-01, 9.28367933e-01, 6.66398442e+00], [ 8.88835449e-01, -4.58226522e-01, 8.32998052e+00], [ -5.40640817e-01, -8.41253533e-01, 9.99597663e+00], [ -1.00000000e+00, -4.28626380e-16, 1.09955743e+01]])) def test_point_track_sq_distance(): t=np.array([[0,0,0],[1,1,1],[2,2,2]],dtype='f4') p=np.array([-1,-1.,-1],dtype='f4') assert_equal( pf.point_track_sq_distance_check(t,p,.2**2), False) pf.point_track_sq_distance_check(t,p,2**2), True t=np.array([[0,0,0],[1,0,0],[2,2,0]],dtype='f4') p=np.array([.5,0,0],dtype='f4') assert_equal( pf.point_track_sq_distance_check(t,p,.2**2), True) p=np.array([.5,1,0],dtype='f4') assert_equal( pf.point_track_sq_distance_check(t,p,.2**2), False) def test_track_roi_intersection_check(): roi=np.array([[0,0,0],[1,0,0],[2,0,0]],dtype='f4') t=np.array([[0,0,0],[1,1,1],[2,2,2]],dtype='f4') assert_equal( pf.track_roi_intersection_check(t,roi,1), True) t=np.array([[0,0,0],[1,0,0],[2,2,2]],dtype='f4') assert_equal(pf.track_roi_intersection_check(t,roi,1), True) t=np.array([[1,1,0],[1,0,0],[1,-1,0]],dtype='f4') assert_equal( pf.track_roi_intersection_check(t,roi,1), True) t=np.array([[4,0,0],[4,1,1],[4,2,0]],dtype='f4') assert_equal(pf.track_roi_intersection_check(t,roi,1), False) def test_minimum_distance(): xyz1=np.array([[1,0,0],[2,0,0]],dtype='float32') xyz2=np.array([[3,0,0],[4,0,0]],dtype='float32') assert_equal(pf.minimum_closest_distance(xyz1,xyz2), 1.0) def test_most_similar_mam(): xyz1 = np.array([[0,0,0],[1,0,0],[2,0,0],[3,0,0]],dtype='float32') xyz2 = np.array([[0,1,1],[1,0,1],[2,3,-2]],dtype='float32') xyz3 = np.array([[-1,0,0],[2,0,0],[2,3,0],[3,0,0]],dtype='float32') tracks=[xyz1,xyz2,xyz3] for metric in ('avg', 'min', 'max'): #pf should be much faster and the results equivalent si2,s2=pf.most_similar_track_mam(tracks,metric=metric) def test_cut_plane(): dt = np.dtype(np.float32) refx = np.array([[0,0,0],[1,0,0],[2,0,0],[3,0,0]],dtype=dt) bundlex = [np.array([[0.5,1,0],[1.5,2,0],[2.5,3,0]],dtype=dt), np.array([[0.5,2,0],[1.5,3,0],[2.5,4,0]],dtype=dt), np.array([[0.5,1,1],[1.5,2,2],[2.5,3,3]],dtype=dt), np.array([[-0.5,2,-1],[-1.5,3,-2],[-2.5,4,-3]],dtype=dt)] expected_hit0 = [ [ 1. , 1.5 , 0. , 0.70710683, 0. ], [ 1. , 2.5 , 0. , 0.70710677, 1. ], [ 1. , 1.5 , 1.5 , 0.81649661, 2. ]] expected_hit1 = [ [ 2. , 2.5 , 0. , 0.70710677, 0. ], [ 2. , 3.5 , 0. , 0.70710677, 1. ], [ 2. , 2.5 , 2.5 , 0.81649655, 2. ]] hitx=pf.cut_plane(bundlex,refx) assert_array_almost_equal(hitx[0], expected_hit0) assert_array_almost_equal(hitx[1], expected_hit1) # check that algorithm allows types other than float32 bundlex[0] = np.asarray(bundlex[0], dtype=np.float64) hitx=pf.cut_plane(bundlex,refx) assert_array_almost_equal(hitx[0], expected_hit0) assert_array_almost_equal(hitx[1], expected_hit1) refx = np.asarray(refx, dtype=np.float64) hitx=pf.cut_plane(bundlex,refx) assert_array_almost_equal( hitx[0], expected_hit0) assert_array_almost_equal( hitx[1], expected_hit1) dipy-0.10.1/dipy/tracking/tests/test_learning.py000066400000000000000000000016131263041327500216630ustar00rootroot00000000000000''' Testing track_metrics module ''' import numpy as np from nose.tools import assert_true, assert_false, assert_equal, assert_almost_equal from numpy.testing import assert_array_equal, assert_array_almost_equal from dipy.tracking import metrics as tm from dipy.tracking import distances as td from dipy.tracking import learning as tl def test_det_corr_tracks(): A=np.array([[0,0,0],[1,1,1],[2,2,2]]) B=np.array([[1,0,0],[2,0,0],[3,0,0]]) C=np.array([[0,0,-1],[0,0,-2],[0,0,-3]]) bundle1=[A,B,C] bundle2=[B,A] indices=[0,1] print(A) print(B) print(C) arr=tl.detect_corresponding_tracks(indices,bundle1,bundle2) print(arr) assert_array_equal(arr,np.array([[0, 1],[1, 0]])) indices2=[0,1] arr2=tl.detect_corresponding_tracks_plus(indices,bundle1,indices2,bundle2) print(arr2) assert_array_equal(arr,arr2) dipy-0.10.1/dipy/tracking/tests/test_life.py000066400000000000000000000153541263041327500210120ustar00rootroot00000000000000import os import os.path as op import numpy as np import numpy.testing as npt import numpy.testing.decorators as dec import scipy.sparse as sps import scipy.linalg as la import nibabel as nib import dipy.tracking.life as life import dipy.tracking.eudx as edx import dipy.core.sphere as dps import dipy.core.gradients as dpg import dipy.data as dpd import dipy.core.optimize as opt import dipy.core.ndindex as nd import dipy.core.gradients as grad import dipy.reconst.dti as dti THIS_DIR = op.dirname(__file__) def test_streamline_gradients(): streamline = [[1, 2, 3], [4, 5, 6], [5, 6, 7], [8, 9, 10]] grads = np.array([[3, 3, 3], [2, 2, 2], [2, 2, 2], [3, 3, 3]]) npt.assert_array_equal(life.streamline_gradients(streamline), grads) def test_streamline_tensors(): # Small streamline streamline = [[1, 2, 3], [4, 5, 3], [5, 6, 3]] # Non-default eigenvalues: evals = [0.0012, 0.0006, 0.0004] streamline_tensors = life.streamline_tensors(streamline, evals=evals) npt.assert_array_almost_equal(streamline_tensors[0], np.array([[ 0.0009, 0.0003, 0. ], [ 0.0003, 0.0009, 0. ], [ 0. , 0. , 0.0004]])) # Get the eigenvalues/eigenvectors: eigvals, eigvecs = la.eig(streamline_tensors[0]) eigvecs = eigvecs[np.argsort(eigvals)[::-1]] eigvals = eigvals[np.argsort(eigvals)[::-1]] npt.assert_array_almost_equal(eigvals, np.array([ 0.0012, 0.0006, 0.0004])) npt.assert_array_almost_equal(eigvecs[0], np.array([0.70710678, -0.70710678, 0.])) # Another small streamline streamline = [[1, 0, 0], [2, 0, 0], [3, 0, 0]] streamline_tensors = life.streamline_tensors(streamline, evals=evals) for t in streamline_tensors: eigvals, eigvecs = la.eig(t) eigvecs = eigvecs[np.argsort(eigvals)[::-1]] eigvals = eigvals[np.argsort(eigvals)[::-1]] # This one has no rotations - all tensors are simply the canonical: npt.assert_almost_equal(np.rad2deg(np.arccos( np.dot(eigvecs[0], [1, 0, 0]))), 0) npt.assert_almost_equal(np.rad2deg(np.arccos( np.dot(eigvecs[1], [0, 1, 0]))), 0) npt.assert_almost_equal(np.rad2deg(np.arccos( np.dot(eigvecs[2], [0, 0, 1]))), 0) def test_streamline_signal(): data_file, bval_file, bvec_file = dpd.get_data('small_64D') gtab = dpg.gradient_table(bval_file, bvec_file) evals = [0.0015, 0.0005, 0.0005] streamline1 = [[[1, 2, 3], [4, 5, 3], [5, 6, 3], [6, 7, 3]], [[1, 2, 3], [4, 5, 3], [5, 6, 3]]] sig1 = [life.streamline_signal(s, gtab, evals) for s in streamline1] streamline2 = [[[1, 2, 3], [4, 5, 3], [5, 6, 3], [6, 7, 3]]] sig2 = [life.streamline_signal(s, gtab, evals) for s in streamline2] npt.assert_array_equal(streamline2[0], streamline1[0]) def test_voxel2streamline(): streamline = [[[1, 2, 3], [4, 5, 3], [5, 6, 3], [6, 7, 3]], [[1, 2, 3], [4, 5, 3], [5, 6, 3]]] affine = np.eye(4) v2f, v2fn = life.voxel2streamline(streamline, False, affine) npt.assert_equal(v2f, {0:[0,1], 1:[0,1], 2:[0,1], 3:[0]}) npt.assert_equal(v2fn, {0: {0:[0], 1:[1], 2:[2], 3:[3]}, 1: {0:[0], 1:[1], 2:[2]}}) def test_FiberModel_init(): # Get some small amount of data: data_file, bval_file, bvec_file = dpd.get_data('small_64D') data_ni = nib.load(data_file) data = data_ni.get_data() data_aff = data_ni.get_affine() bvals, bvecs = (np.load(f) for f in (bval_file, bvec_file)) gtab = dpg.gradient_table(bvals, bvecs) FM = life.FiberModel(gtab) streamline = [[[1, 2, 3], [4, 5, 3], [5, 6, 3], [6, 7, 3]], [[1, 2, 3], [4, 5, 3], [5, 6, 3]]] affine = np.eye(4) for sphere in [None, False, dpd.get_sphere('symmetric362')]: fiber_matrix, vox_coords = FM.setup(streamline, affine, sphere=sphere) npt.assert_array_equal(np.array(vox_coords), np.array([[1, 2, 3], [4, 5, 3], [5, 6, 3], [6, 7, 3]])) npt.assert_equal(fiber_matrix.shape, (len(vox_coords)*64, len(streamline))) def test_FiberFit(): data_file, bval_file, bvec_file = dpd.get_data('small_64D') data_ni = nib.load(data_file) data = data_ni.get_data() data_aff = data_ni.get_affine() bvals, bvecs = (np.load(f) for f in (bval_file, bvec_file)) gtab = dpg.gradient_table(bvals, bvecs) FM = life.FiberModel(gtab) evals = [0.0015, 0.0005, 0.0005] streamline = [[[1, 2, 3], [4, 5, 3], [5, 6, 3], [6, 7, 3]], [[1, 2, 3], [4, 5, 3], [5, 6, 3]]] fiber_matrix, vox_coords = FM.setup(streamline, None, evals) w = np.array([0.5, 0.5]) sig = opt.spdot(fiber_matrix, w) + 1.0 # Add some isotropic stuff S0 = data[..., gtab.b0s_mask] rel_sig = data[..., ~gtab.b0s_mask]/data[..., gtab.b0s_mask] this_data = np.zeros((10, 10, 10, 64)) this_data[vox_coords[:, 0], vox_coords[:, 1], vox_coords[:, 2]] =\ (sig.reshape((4, 64)) * S0[vox_coords[:, 0], vox_coords[:, 1], vox_coords[:, 2]]) # Grab some realistic S0 values: this_data = np.concatenate([data[..., gtab.b0s_mask], this_data], -1) fit = FM.fit(this_data, streamline) npt.assert_almost_equal(fit.predict()[1], fit.data[1], decimal=-1) # Predict with an input GradientTable npt.assert_almost_equal(fit.predict(gtab)[1], fit.data[1], decimal=-1) npt.assert_almost_equal( this_data[vox_coords[:, 0], vox_coords[:, 1], vox_coords[:, 2]], fit.data) def test_fit_data(): fdata, fbval, fbvec = dpd.get_data('small_25') gtab = grad.gradient_table(fbval, fbvec) ni_data = nib.load(fdata) data = ni_data.get_data() dtmodel = dti.TensorModel(gtab) dtfit = dtmodel.fit(data) sphere = dpd.get_sphere() peak_idx = dti.quantize_evecs(dtfit.evecs, sphere.vertices) eu = edx.EuDX(dtfit.fa.astype('f8'), peak_idx, seeds=list(nd.ndindex(data.shape[:-1])), odf_vertices=sphere.vertices, a_low=0) tensor_streamlines = [streamline for streamline in eu] life_model = life.FiberModel(gtab) life_fit = life_model.fit(data, tensor_streamlines) model_error = life_fit.predict() - life_fit.data model_rmse = np.sqrt(np.mean(model_error ** 2, -1)) matlab_rmse, matlab_weights = dpd.matlab_life_results() # Lower error than the matlab implementation for these data: npt.assert_(np.median(model_rmse) < np.median(matlab_rmse)) # And a moderate correlation with the Matlab implementation weights: npt.assert_(np.corrcoef(matlab_weights, life_fit.beta)[0, 1] > 0.68) dipy-0.10.1/dipy/tracking/tests/test_localtrack.py000066400000000000000000000012561263041327500222060ustar00rootroot00000000000000import numpy as np import numpy.testing as npt from dipy.tracking.local.tissue_classifier import ThresholdTissueClassifier from dipy.data import default_sphere from dipy.direction import peaks_from_model def test_ThresholdTissueClassifier(): a = np.random.random((3, 5, 7)) mid = np.sort(a.ravel())[(3 * 5 * 7) // 2] ttc = ThresholdTissueClassifier(a, mid) for i in range(3): for j in range(5): for k in range(7): tissue = ttc.check_point(np.array([i, j, k], dtype=float)) if a[i, j, k] > mid: npt.assert_equal(tissue, 1) else: npt.assert_equal(tissue, 2) dipy-0.10.1/dipy/tracking/tests/test_markov.py000066400000000000000000000253231263041327500213670ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np from dipy.tracking import utils from dipy.reconst.interpolate import NearestNeighborInterpolator from dipy.tracking.markov import (BoundaryStepper, _closest_peak, FixedSizeStepper, MarkovIntegrator, markov_streamline, OutsideImage, ClosestDirectionTracker, ProbabilisticOdfWeightedTracker) from dipy.core.sphere import HemiSphere, unit_octahedron from numpy.testing import (assert_array_almost_equal, assert_array_equal, assert_equal, assert_, assert_raises) def test_BoundaryStepper(): os = 1 bi = BoundaryStepper(overstep=os) loc = np.array([.5, .5, .5]) step = np.array([1, 1, 1]) / np.sqrt(3) assert_array_almost_equal(bi(loc, step), os * step + [1, 1, 1]) assert_array_almost_equal(bi(loc, -step), -os * step) os = 2 bi = BoundaryStepper((2, 3, 4), overstep=2) assert_array_almost_equal(bi(loc, step), os * step + [2, 2, 2]) assert_array_almost_equal(bi(loc, -step), -os * step) loc = np.array([7.5, 7.5, 7.5]) assert_array_almost_equal(bi(loc, step), os * step + [8, 8, 8]) assert_array_almost_equal(bi(loc, -step), [6, 6, 6] - os * step) def test_FixedSizeStepper(): fsi = FixedSizeStepper(step_size=2.) loc = np.array([2, 3, 12]) step = np.array([3, 2, 4]) / np.sqrt(3) assert_array_almost_equal(fsi(loc, step), loc + 2. * step) assert_array_almost_equal(fsi(loc, -step), loc - 2. * step) def test_markov_streamline(): east = np.array([1, 0, 0]) class MoveEastWest(object): def get_direction(self, location, prev_step): if np.any(location < 0): raise OutsideImage elif np.any(location > 10.): return None if np.dot(prev_step, east) >= 0: return east else: return -east seed = np.array([5.2, 0, 0]) first_step = east dir_getter = MoveEastWest() stepper = FixedSizeStepper(.5) # The streamline terminates when it goes past (10, 0, 0). (10.2, 0, 0) # should be the last point in the streamline streamline = markov_streamline(dir_getter.get_direction, stepper, seed, first_step, 100) expected = np.zeros((11, 3)) expected[:, 0] = np.linspace(5.2, 10.2, 11) assert_array_almost_equal(streamline, expected) # OutsideImage gets raised when the streamline points become negative # the streamline should end, and the negative points should not be part # of the streamline first_step = -east streamline = markov_streamline(dir_getter.get_direction, stepper, seed, first_step, 100) expected = np.zeros((11, 3)) expected[:, 0] = np.linspace(5.2, 0.2, 11) assert_array_almost_equal(streamline, expected) def test_MarkovIntegrator(): class KeepGoing(MarkovIntegrator): def _next_step(self, location, prev_step): if prev_step is None: return np.array([[1., 0, 0], [0, 1., 0], [0, 0., 1]]) if not self._mask[location]: return None else: return prev_step data = np.ones((10, 10, 10, 65)) data_interp = NearestNeighborInterpolator(data, (1, 1, 1)) seeds = [np.array([5.2, 5.2, 5.2])] stepper = FixedSizeStepper(.5) mask = np.ones((10, 10, 10), 'bool') gen = KeepGoing(model=None, interpolator=data_interp, mask=mask, take_step=stepper, angle_limit=0., seeds=seeds) streamlines = list(gen) assert_equal(len(streamlines), 3) expected = np.zeros((20, 3)) for i in range(3): expected[:] = 5.2 expected[:, i] = np.arange(.2, 10, .5) assert_array_almost_equal(streamlines[i], expected) # Track only the first (largest) peak for each seed gen = KeepGoing(model=None, interpolator=data_interp, mask=mask, take_step=stepper, angle_limit=0., seeds=seeds, max_cross=1) streamlines = list(gen) assert_equal(len(streamlines), 1) expected = np.zeros((20, 3)) expected[:] = 5.2 expected[:, 0] = np.arange(.2, 10, .5) assert_array_almost_equal(streamlines[0], expected) mask = np.ones((20, 20, 20), 'bool') gen = KeepGoing(model=None, interpolator=data_interp, mask=mask, take_step=stepper, angle_limit=0., seeds=seeds, max_cross=1, mask_voxel_size=(.5, .5, .5)) streamlines = list(gen) assert_equal(len(streamlines), 1) assert_array_almost_equal(streamlines[0], expected) # Test tracking with affine affine = np.eye(4) affine[:3, :] = np.random.random((3, 4)) - .5 seeds = [np.dot(affine[:3, :3], seeds[0] - .5) + affine[:3, 3]] sl_affine = KeepGoing(model=None, interpolator=data_interp, mask=mask, take_step=stepper, angle_limit=0., seeds=seeds, max_cross=1, mask_voxel_size=(.5, .5, .5), affine=affine) default = np.eye(4) default[:3, 3] = .5 sl_default = list(utils.move_streamlines(sl_affine, default, affine)) assert_equal(len(sl_default), 1) assert_array_almost_equal(sl_default[0], expected) def test_closest_peak(): peak_values = np.array([1, .9, .8, .7, .6, .2, .1]) peak_points = np.array([[1., 0., 0.], [0., .9, .1], [0., 1., 0.], [.9, .1, 0.], [0., 0., 1.], [1., 1., 0.], [0., 1., 1.]]) norms = np.sqrt((peak_points * peak_points).sum(-1)) peak_points = peak_points / norms[:, None] prev = np.array([1, -.9, 0]) prev = prev / np.sqrt(np.dot(prev, prev)) cp = _closest_peak(peak_points, prev, 0.) assert_array_equal(cp, peak_points[0]) cp = _closest_peak(peak_points, -prev, 0.) assert_array_equal(cp, -peak_points[0]) def test_ClosestDirectionTracker(): class MyModel(object): def fit(self, data): return MyFit() class MyFit(object): pass class MyDirectionFinder(object): directions = np.array([[1., 0, 0], [0, 1., 0], [0, 0., 1]]) def __call__(self, fit): return self.directions data = np.ones((10, 10, 10, 65)) data_interp = NearestNeighborInterpolator(data, (1, 1, 1)) mask = np.ones((10, 10, 10), 'bool') mask[0, 0, 0] = False cdt = ClosestDirectionTracker(model=MyModel(), interpolator=data_interp, mask=mask, take_step=None, angle_limit=90., seeds=None) # We're going to use a silly set of directions for the test cdt._get_directions = MyDirectionFinder() prev_step = np.array([[.9, .1, .1], [.1, .9, .1], [.1, .1, .9]]) prev_step /= np.sqrt((prev_step * prev_step).sum(-1))[:, None] a, b, c = prev_step assert_array_equal(cdt._next_step([1., 1., 1.], a), [1, 0, 0]) assert_array_equal(cdt._next_step([1., 1., 1.], b), [0, 1, 0]) assert_array_equal(cdt._next_step([1., 1., 1.], c), [0, 0, 1]) # Assert raises outside image assert_raises(OutsideImage, cdt._next_step, [-1., 1., 1.], c) # Returns None when mask is False assert_equal(cdt._next_step([0, 0, 0], c), None) # Test Angle limit cdt = ClosestDirectionTracker(model=MyModel(), interpolator=data_interp, mask=mask, take_step=None, angle_limit=45, seeds=None) # We're going to use a silly set of directions for the test cdt._get_directions = MyDirectionFinder() sq3 = np.sqrt(3) a = np.array([sq3 / 2, 1. / 2, 0]) b = np.array([1. / 2, sq3 / 2, 0]) c = np.array([1, 1, 1]) / sq3 assert_array_equal(cdt._next_step([1., 1., 1.], a), [1, 0, 0]) assert_array_equal(cdt._next_step([1., 1., 1.], b), [0, 1, 0]) assert_array_equal(cdt._next_step([1., 1., 1.], c), None) def test_ProbabilisticOdfWeightedTracker(): sphere = HemiSphere.from_sphere(unit_octahedron) # A simple image with three possible configurations, a vertical tract, # a horizontal tract and a crossing odf_list = [np.array([0., 0., 0.]), np.array([1., 0., 0.]), np.array([0., 1., 0.]), np.array([1., 1., 0.]), ] simple_image = np.array([[0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 3, 2, 2, 2, 0], [0, 1, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], ]) # Make the image 4d simple_image = simple_image[..., None, None] # Simple model and fit for this image class MyModel(): def fit(self, data): return MyFit(data) class MyFit(object): def __init__(self, n): self.n = n def odf(self, sphere): return odf_list[self.n] seeds = [np.array([1.5, 1.5, .5])] * 30 model = MyModel() mask = np.ones([5, 6, 1], dtype="bool") stepper = FixedSizeStepper(1.) interpolator = NearestNeighborInterpolator(simple_image, (1, 1, 1)) # These are the only two possible paths though the simple_image pwt = ProbabilisticOdfWeightedTracker(model, interpolator, mask, stepper, 90, seeds, sphere) expected = [np.array([[0.5, 1.5, 0.5], [1.5, 1.5, 0.5], [2.5, 1.5, 0.5], [2.5, 2.5, 0.5], [2.5, 3.5, 0.5], [2.5, 4.5, 0.5], [2.5, 5.5, 0.5]]), np.array([[0.5, 1.5, 0.5], [1.5, 1.5, 0.5], [2.5, 1.5, 0.5], [3.5, 1.5, 0.5], [4.5, 1.5, 0.5]]) ] def allclose(x, y): return x.shape == y.shape and np.allclose(x, y) path = [False, False] for streamline in pwt: if allclose(streamline, expected[0]): path[0] = True elif allclose(streamline, expected[1]): path[1] = True else: raise AssertionError() assert_(all(path)) # The first path is not possible if 90 degree turns are excluded pwt = ProbabilisticOdfWeightedTracker(model, interpolator, mask, stepper, 80, seeds, sphere) for streamline in pwt: assert_(np.allclose(streamline, expected[1])) dipy-0.10.1/dipy/tracking/tests/test_metrics.py000066400000000000000000000223461263041327500215400ustar00rootroot00000000000000''' Testing track_metrics module ''' from __future__ import division, print_function, absolute_import from ...utils.six.moves import xrange import numpy as np from nose.tools import assert_true, assert_false, assert_equal, assert_almost_equal from numpy.testing import assert_array_equal, assert_array_almost_equal from dipy.tracking import metrics as tm from dipy.tracking import distances as pf def test_downsample(): t=np.array([[ 82.20181274, 91.3650589 , 43.15737152], [ 82.3844223 , 91.79336548, 43.87036514], [ 82.48710632, 92.27861023, 44.56298065], [ 82.53310394, 92.7854538 , 45.24635315], [ 82.53793335, 93.26902008, 45.94785309], [ 82.48797607, 93.75003815, 46.6493988 ], [ 82.35533142, 94.2518158 , 47.32533264], [ 82.15484619, 94.76634216, 47.97451019], [ 81.90982819, 95.28792572, 48.6024437 ], [ 81.63336945, 95.78153229, 49.23971176], [ 81.35479736, 96.24868011, 49.89558792], [ 81.08713531, 96.69807434, 50.56812668], [ 80.81504822, 97.14285278, 51.24193192], [ 80.52591705, 97.56719971, 51.92168427], [ 80.26599884, 97.98269653, 52.61848068], [ 80.0463562 , 98.38131714, 53.3385582 ], [ 79.8469162 , 98.77052307, 54.06955338], [ 79.57667542, 99.13599396, 54.78985596], [ 79.23351288, 99.4320755 , 55.51065063], [ 78.84815979, 99.64141846, 56.24016571], [ 78.47383881, 99.77347565, 56.9929924 ], [ 78.12837219, 99.81330872, 57.76969528], [ 77.80438995, 99.85082245, 58.55574799], [ 77.4943924 , 99.88065338, 59.34777069], [ 77.21414185, 99.85343933, 60.15090561], [ 76.96416473, 99.82772827, 60.96406937], [ 76.74712372, 99.80519104, 61.78676605], [ 76.52263641, 99.79122162, 62.60765076], [ 76.03757477, 100.08692169, 63.24152374], [ 75.44867706, 100.3526535 , 63.79513168], [ 74.78033447, 100.57255554, 64.272789 ], [ 74.11605835, 100.7733078 , 64.76428986], [ 73.51222992, 100.98779297, 65.32373047], [ 72.97387695, 101.23387146, 65.93502045], [ 72.47355652, 101.49151611, 66.57343292], [ 71.99834442, 101.72480774, 67.2397995 ], [ 71.5690918 , 101.98665619, 67.92664337], [ 71.18083191, 102.29483795, 68.61888123], [ 70.81879425, 102.63343048, 69.31127167], [ 70.47422791, 102.98672485, 70.00532532], [ 70.10092926, 103.28502655, 70.70999908], [ 69.69512177, 103.51667023, 71.42147064], [ 69.27423096, 103.71351624, 72.13452911], [ 68.91260529, 103.81676483, 72.89796448], [ 68.60788727, 103.81982422, 73.69258118], [ 68.34162903, 103.7661972 , 74.49915314], [ 68.08542633, 103.70635223, 75.30856323], [ 67.83590698, 103.60187531, 76.11553955], [ 67.56822968, 103.4482193 , 76.90870667], [ 67.28399658, 103.25878906, 77.68825531], [ 67.00117493, 103.03740692, 78.45989227], [ 66.72718048, 102.80329895, 79.23099518], [ 66.4619751 , 102.54130554, 79.99622345], [ 66.20803833, 102.22305298, 80.7438736 ], [ 65.96872711, 101.88980865, 81.48987579], [ 65.72864532, 101.59316254, 82.25085449], [ 65.47808075, 101.33383942, 83.02194214], [ 65.21841431, 101.11295319, 83.80186462], [ 64.95678711, 100.94080353, 84.59326935], [ 64.71759033, 100.82022095, 85.40114594], [ 64.48053741, 100.73490143, 86.21411896], [ 64.24304199, 100.65074158, 87.02709198], [ 64.01773834, 100.55318451, 87.84204865], [ 63.83801651, 100.41996765, 88.66333008], [ 63.70982361, 100.25119019, 89.48779297], [ 63.60707855, 100.06730652, 90.31262207], [ 63.46164322, 99.91001892, 91.13648224], [ 63.26287842, 99.78648376, 91.95485687], [ 63.03713226, 99.68377686, 92.76905823], [ 62.81192398, 99.56619263, 93.58140564], [ 62.57145309, 99.42708588, 94.38592529], [ 62.32259369, 99.25592804, 95.18167114], [ 62.07497787, 99.05770111, 95.97154236], [ 61.82253647, 98.83877563, 96.7543869 ], [ 61.59536743, 98.59293365, 97.5370636 ], [ 61.46530151, 98.30503845, 98.32772827], [ 61.39904785, 97.97928619, 99.11172485], [ 61.33279419, 97.65353394, 99.89572906], [ 61.26067352, 97.30914307, 100.67123413], [ 61.19459534, 96.96743011, 101.44847107], [ 61.1958046 , 96.63417053, 102.23215485], [ 61.26572037, 96.2988739 , 103.01185608], [ 61.39840698, 95.96297455, 103.78307343], [ 61.5720787 , 95.6426239 , 104.55268097], [ 61.78163528, 95.35540771, 105.32629395], [ 62.06700134, 95.09746552, 106.08564758], [ 62.39427185, 94.8572464 , 106.83369446], [ 62.74076462, 94.62278748, 107.57482147], [ 63.11461639, 94.40107727, 108.30641937], [ 63.53397751, 94.20418549, 109.02002716], [ 64.00019836, 94.03809357, 109.71183777], [ 64.43580627, 93.87523651, 110.42416382], [ 64.84857941, 93.69993591, 111.14715576], [ 65.26740265, 93.51858521, 111.86515808], [ 65.69511414, 93.3671875 , 112.58474731], [ 66.10470581, 93.22719574, 113.31711578], [ 66.45891571, 93.06028748, 114.07256317], [ 66.78582001, 92.90560913, 114.84281921], [ 67.11138916, 92.79004669, 115.6204071 ], [ 67.44729614, 92.75711823, 116.40135193], [ 67.75688171, 92.98265076, 117.16111755], [ 68.02041626, 93.28012848, 117.91371155], [ 68.25725555, 93.53466797, 118.69052124], [ 68.46047974, 93.63263702, 119.51107788], [ 68.62039948, 93.62007141, 120.34690094], [ 68.76782227, 93.56475067, 121.18331909], [ 68.90222168, 93.46326447, 122.01765442], [ 68.99872589, 93.30039978, 122.84759521], [ 69.04119873, 93.05428314, 123.66156769], [ 69.05086517, 92.74394989, 124.45450592], [ 69.02742004, 92.40427399, 125.23509979], [ 68.95466614, 92.09059143, 126.02339935], [ 68.84975433, 91.7967453 , 126.81564331], [ 68.72673798, 91.53726196, 127.61715698], [ 68.6068573 , 91.3030014 , 128.42681885], [ 68.50636292, 91.12481689, 129.25317383], [ 68.39311218, 91.01572418, 130.08976746], [ 68.25946808, 90.94654083, 130.92756653]], dtype=np.float32) pts=12 td=tm.downsample(t,pts) #print td assert_equal(len(td),pts) res=[] t=np.array([[0,0,0],[1,1,1],[2,2,2]],'f4') for pts in range(3,200): td=tm.downsample(t,pts) res.append(pts-len(td)) assert_equal(np.sum(res),0) """ from dipy.data import get_data from nibabel import trackvis as tv streams,hdr=tv.read(get_data('fornix')) Td=[tm.downsample(s[0],pts) for s in streams] T=[s[0] for s in streams] from dipy.viz import fvtk r=fvtk.ren() fvtk.add(r,fvtk.line(T,fvtk.red)) fvtk.add(r,fvtk.line(Td,fvtk.green)) fvtk.show(r) """ def test_splines(): #create a helix t=np.linspace(0,1.75*2*np.pi,100) x = np.sin(t) y = np.cos(t) z = t # add noise x+= np.random.normal(scale=0.1, size=x.shape) y+= np.random.normal(scale=0.1, size=y.shape) z+= np.random.normal(scale=0.1, size=z.shape) xyz=np.vstack((x,y,z)).T # get the B-splines smoothed result xyzn=tm.spline(xyz,3,2,-1) def test_segment_intersection(): xyz=np.array([[1,1,1],[2,2,2],[2,2,2]]) center=[10,4,10] radius=1 assert_equal(tm.intersect_sphere(xyz,center,radius), False) xyz=np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]]) center=[10,10,10] radius=2 assert_equal( tm.intersect_sphere(xyz,center,radius), False) xyz=np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]]) center=[2.1,2,2.2] radius=2 assert_equal( tm.intersect_sphere(xyz,center,radius), True) def test_normalized_3vec(): vec = [1, 2, 3] l2n = np.sqrt(np.dot(vec, vec)) assert_array_almost_equal(l2n, pf.norm_3vec(vec)) nvec = pf.normalized_3vec(vec) assert_array_almost_equal( np.array(vec) / l2n, nvec) vec = np.array([[1, 2, 3]]) assert_equal(vec.shape, (1, 3)) assert_equal(pf.normalized_3vec(vec).shape, (3,)) def test_inner_3vecs(): vec1 = [1, 2.3, 3] vec2 = [2, 3, 4.3] assert_array_almost_equal(np.inner(vec1, vec2), pf.inner_3vecs(vec1, vec2)) vec2 = [2, -3, 4.3] assert_array_almost_equal(np.inner(vec1, vec2), pf.inner_3vecs(vec1, vec2)) def test_add_sub_3vecs(): vec1 = np.array([1, 2.3, 3]) vec2 = np.array([2, 3, 4.3]) assert_array_almost_equal( vec1 - vec2, pf.sub_3vecs(vec1, vec2)) assert_array_almost_equal( vec1 + vec2, pf.add_3vecs(vec1, vec2)) vec2 = [2, -3, 4.3] assert_array_almost_equal( vec1 - vec2, pf.sub_3vecs(vec1, vec2)) assert_array_almost_equal( vec1 + vec2, pf.add_3vecs(vec1, vec2)) dipy-0.10.1/dipy/tracking/tests/test_propagation.py000066400000000000000000000161741263041327500224170ustar00rootroot00000000000000import os import numpy as np import numpy.testing from dipy.data import get_data, get_sphere from dipy.core.gradients import gradient_table from dipy.reconst.gqi import GeneralizedQSamplingModel from dipy.reconst.dti import TensorModel, quantize_evecs from dipy.tracking import utils from dipy.tracking.eudx import EuDX from dipy.tracking.propspeed import ndarray_offset, eudx_both_directions from dipy.tracking.metrics import length from dipy.tracking.propspeed import map_coordinates_trilinear_iso import nibabel as ni from nose.tools import assert_true, assert_false, \ assert_equal, assert_raises, assert_almost_equal from numpy.testing import (assert_array_equal, assert_array_almost_equal, run_module_suite) def stepped_1d(arr_1d): # Make a version of `arr_1d` which is not contiguous return np.vstack((arr_1d, arr_1d)).ravel(order='F')[::2] def test_offset(): # Test ndarray_offset function for dt in (np.int32, np.float64): index = np.array([1, 1], dtype=np.intp) A = np.array([[1,0,0],[0,2,0],[0,0,3]], dtype=dt) strides = np.array(A.strides, np.intp) i_size = A.dtype.itemsize assert_equal(ndarray_offset(index, strides, 2, i_size), 4) assert_equal(A.ravel()[4], A[1,1]) # Index and strides arrays must be C-continuous. Test this is enforced # by using non-contiguous versions of the input arrays. assert_raises(ValueError, ndarray_offset, stepped_1d(index), strides, 2, i_size) assert_raises(ValueError, ndarray_offset, index, stepped_1d(strides), 2, i_size) def test_trilinear_interp_cubic_voxels(): A=np.ones((17,17,17)) B=np.zeros(3) strides=np.array(A.strides, np.intp) A[7,7,7]=2 points=np.array([[0,0,0],[7.,7.5,7.],[3.5,3.5,3.5]]) map_coordinates_trilinear_iso(A,points,strides,3,B) assert_array_almost_equal(B,np.array([ 1. , 1.5, 1. ])) # All of the input array, points array, strides array and output array must # be C-contiguous. Check by passing in versions that aren't C contiguous assert_raises(ValueError, map_coordinates_trilinear_iso, A.copy(order='F'), points, strides, 3, B) assert_raises(ValueError, map_coordinates_trilinear_iso, A, points.copy(order='F'), strides, 3, B) assert_raises(ValueError, map_coordinates_trilinear_iso, A, points, stepped_1d(strides), 3, B) assert_raises(ValueError, map_coordinates_trilinear_iso, A, points, strides, 3, stepped_1d(B)) def test_eudx_further(): """ Cause we love testin.. ;-) """ fimg,fbvals,fbvecs=get_data('small_101D') img=ni.load(fimg) affine=img.get_affine() data=img.get_data() gtab = gradient_table(fbvals, fbvecs) tensor_model = TensorModel(gtab) ten = tensor_model.fit(data) x,y,z=data.shape[:3] seeds=np.zeros((10**4,3)) for i in range(10**4): rx=(x-1)*np.random.rand() ry=(y-1)*np.random.rand() rz=(z-1)*np.random.rand() seeds[i]=np.ascontiguousarray(np.array([rx,ry,rz]),dtype=np.float64) sphere = get_sphere('symmetric724') ind = quantize_evecs(ten.evecs) eu=EuDX(a=ten.fa, ind=ind, seeds=seeds, odf_vertices=sphere.vertices, a_low=.2) T=[e for e in eu] #check that there are no negative elements for t in T: assert_equal(np.sum(t.ravel()<0),0) # Test eudx with affine def random_affine(seeds): affine = np.eye(4) affine[:3, :] = np.random.random((3, 4)) seeds = np.dot(seeds, affine[:3, :3].T) seeds += affine[:3, 3] return affine, seeds # Make two random affines and move seeds affine1, seeds1 = random_affine(seeds) affine2, seeds2 = random_affine(seeds) # Make tracks using different affines eu1 = EuDX(a=ten.fa, ind=ind, odf_vertices=sphere.vertices, seeds=seeds1, a_low=.2, affine=affine1) eu2 = EuDX(a=ten.fa, ind=ind, odf_vertices=sphere.vertices, seeds=seeds2, a_low=.2, affine=affine2) # Move from eu2 affine2 to affine1 eu2_to_eu1 = utils.move_streamlines(eu2, output_space=affine1, input_space=affine2) # Check that the tracks are the same for sl1, sl2 in zip(eu1, eu2_to_eu1): assert_array_almost_equal(sl1, sl2) def test_eudx_bad_seed(): """Test passing a bad seed to eudx""" fimg, fbvals, fbvecs = get_data('small_101D') img = ni.load(fimg) affine = img.get_affine() data = img.get_data() gtab = gradient_table(fbvals, fbvecs) tensor_model = TensorModel(gtab) ten = tensor_model.fit(data) ind = quantize_evecs(ten.evecs) sphere = get_sphere('symmetric724') seed = [1000000., 1000000., 1000000.] eu = EuDX(a=ten.fa, ind=ind, seeds=[seed], odf_vertices=sphere.vertices, a_low=.2) assert_raises(ValueError, list, eu) print(data.shape) seed = [1., 5., 8.] eu = EuDX(a=ten.fa, ind=ind, seeds=[seed], odf_vertices=sphere.vertices, a_low=.2) track = list(eu) seed = [-1., 1000000., 1000000.] eu = EuDX(a=ten.fa, ind=ind, seeds=[seed], odf_vertices=sphere.vertices, a_low=.2) assert_raises(ValueError, list, eu) def test_eudx_boundaries(): """ This test checks that the tracking will exclude seeds in both directions. Here we create a volume of shape (50, 60, 40) and we will add 2 seeds exactly at the volume's boundaries (49, 0, 0) and (0, 0, 0). Those should not generate any streamlines as EuDX does not interpolate on the boundary voxels. We also add 3 seeds not in the boundaries which should generate streamlines without a problem. """ fa = np.ones((50, 60, 40)) ind = np.zeros(fa.shape) sphere = get_sphere('repulsion724') seed = [49., 0, 0] seed2 = [0., 0, 0] seed3 = [48., 0, 0] seed4 = [1., 0, 0] seed5 = [5., 5, 5] eu = EuDX(a=fa, ind=ind, seeds=[seed, seed2, seed3, seed4, seed5], odf_vertices=sphere.vertices, a_low=.2, total_weight=0.) track = list(eu) assert_equal(len(track), 3) def test_eudx_both_directions_errors(): # Test error conditions for both directions function sphere = get_sphere('symmetric724') seed = np.zeros(3, np.float64) qa = np.zeros((4, 5, 6, 7), np.float64) ind = qa.copy() # All of seed, qa, ind, odf_vertices must be C-contiguous. Check by # passing in versions that aren't C contiguous assert_raises(ValueError, eudx_both_directions, stepped_1d(seed), 0, qa, ind, sphere.vertices, 0.5, 0.1, 1., 1., 2) assert_raises(ValueError, eudx_both_directions, seed, 0, qa[..., ::2], ind, sphere.vertices, 0.5, 0.1, 1., 1., 2) assert_raises(ValueError, eudx_both_directions, seed, 0, qa, ind[..., ::2], sphere.vertices, 0.5, 0.1, 1., 1., 2) assert_raises(ValueError, eudx_both_directions, seed, 0, qa, ind, sphere.vertices[::2], 0.5, 0.1, 1., 1., 2) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/tracking/tests/test_streamline.py000066400000000000000000001051211263041327500222260ustar00rootroot00000000000000from __future__ import print_function import numpy as np from numpy.linalg import norm import numpy.testing as npt from dipy.testing.memory import get_type_refcount from nose.tools import assert_true, assert_equal, assert_almost_equal from numpy.testing import (assert_array_equal, assert_array_almost_equal, assert_raises, run_module_suite) from dipy.tracking.streamline import (set_number_of_points, length as ds_length, relist_streamlines, unlist_streamlines, center_streamlines, transform_streamlines, select_random_set_of_streamlines, compress_streamlines, select_by_rois, orient_by_rois) streamline = np.array([[82.20181274, 91.36505890, 43.15737152], [82.38442230, 91.79336548, 43.87036514], [82.48710632, 92.27861023, 44.56298065], [82.53310394, 92.78545380, 45.24635315], [82.53793335, 93.26902008, 45.94785309], [82.48797607, 93.75003815, 46.64939880], [82.35533142, 94.25181580, 47.32533264], [82.15484619, 94.76634216, 47.97451019], [81.90982819, 95.28792572, 48.60244370], [81.63336945, 95.78153229, 49.23971176], [81.35479736, 96.24868011, 49.89558792], [81.08713531, 96.69807434, 50.56812668], [80.81504822, 97.14285278, 51.24193192], [80.52591705, 97.56719971, 51.92168427], [80.26599884, 97.98269653, 52.61848068], [80.04635620, 98.38131714, 53.33855820], [79.84691620, 98.77052307, 54.06955338], [79.57667542, 99.13599396, 54.78985596], [79.23351288, 99.43207550, 55.51065063], [78.84815979, 99.64141846, 56.24016571], [78.47383881, 99.77347565, 56.99299240], [78.12837219, 99.81330872, 57.76969528], [77.80438995, 99.85082245, 58.55574799], [77.49439240, 99.88065338, 59.34777069], [77.21414185, 99.85343933, 60.15090561], [76.96416473, 99.82772827, 60.96406937], [76.74712372, 99.80519104, 61.78676605], [76.52263641, 99.79122162, 62.60765076], [76.03757477, 100.08692169, 63.24152374], [75.44867706, 100.35265350, 63.79513168], [74.78033447, 100.57255554, 64.27278900], [74.11605835, 100.77330780, 64.76428986], [73.51222992, 100.98779297, 65.32373047], [72.97387695, 101.23387146, 65.93502045], [72.47355652, 101.49151611, 66.57343292], [71.99834442, 101.72480774, 67.23979950], [71.56909180, 101.98665619, 67.92664337], [71.18083191, 102.29483795, 68.61888123], [70.81879425, 102.63343048, 69.31127167], [70.47422791, 102.98672485, 70.00532532], [70.10092926, 103.28502655, 70.70999908], [69.69512177, 103.51667023, 71.42147064], [69.27423096, 103.71351624, 72.13452911], [68.91260529, 103.81676483, 72.89796448], [68.60788727, 103.81982422, 73.69258118], [68.34162903, 103.76619720, 74.49915314], [68.08542633, 103.70635223, 75.30856323], [67.83590698, 103.60187531, 76.11553955], [67.56822968, 103.44821930, 76.90870667], [67.28399658, 103.25878906, 77.68825531], [67.00117493, 103.03740692, 78.45989227], [66.72718048, 102.80329895, 79.23099518], [66.46197510, 102.54130554, 79.99622345], [66.20803833, 102.22305298, 80.74387360], [65.96872711, 101.88980865, 81.48987579], [65.72864532, 101.59316254, 82.25085449], [65.47808075, 101.33383942, 83.02194214], [65.21841431, 101.11295319, 83.80186462], [64.95678711, 100.94080353, 84.59326935], [64.71759033, 100.82022095, 85.40114594], [64.48053741, 100.73490143, 86.21411896], [64.24304199, 100.65074158, 87.02709198], [64.01773834, 100.55318451, 87.84204865], [63.83801651, 100.41996765, 88.66333008], [63.70982361, 100.25119019, 89.48779297], [63.60707855, 100.06730652, 90.31262207], [63.46164322, 99.91001892, 91.13648224], [63.26287842, 99.78648376, 91.95485687], [63.03713226, 99.68377686, 92.76905823], [62.81192398, 99.56619263, 93.58140564], [62.57145309, 99.42708588, 94.38592529], [62.32259369, 99.25592804, 95.18167114], [62.07497787, 99.05770111, 95.97154236], [61.82253647, 98.83877563, 96.75438690], [61.59536743, 98.59293365, 97.53706360], [61.46530151, 98.30503845, 98.32772827], [61.39904785, 97.97928619, 99.11172485], [61.33279419, 97.65353394, 99.89572906], [61.26067352, 97.30914307, 100.67123413], [61.19459534, 96.96743011, 101.44847107], [61.19580460, 96.63417053, 102.23215485], [61.26572037, 96.29887390, 103.01185608], [61.39840698, 95.96297455, 103.78307343], [61.57207870, 95.64262390, 104.55268097], [61.78163528, 95.35540771, 105.32629395], [62.06700134, 95.09746552, 106.08564758], [62.39427185, 94.85724640, 106.83369446], [62.74076462, 94.62278748, 107.57482147], [63.11461639, 94.40107727, 108.30641937], [63.53397751, 94.20418549, 109.02002716], [64.00019836, 94.03809357, 109.71183777], [64.43580627, 93.87523651, 110.42416382], [64.84857941, 93.69993591, 111.14715576], [65.26740265, 93.51858521, 111.86515808], [65.69511414, 93.36718750, 112.58474731], [66.10470581, 93.22719574, 113.31711578], [66.45891571, 93.06028748, 114.07256317], [66.78582001, 92.90560913, 114.84281921], [67.11138916, 92.79004669, 115.62040710], [67.44729614, 92.75711823, 116.40135193], [67.75688171, 92.98265076, 117.16111755], [68.02041626, 93.28012848, 117.91371155], [68.25725555, 93.53466797, 118.69052124], [68.46047974, 93.63263702, 119.51107788], [68.62039948, 93.62007141, 120.34690094], [68.76782227, 93.56475067, 121.18331909], [68.90222168, 93.46326447, 122.01765442], [68.99872589, 93.30039978, 122.84759521], [69.04119873, 93.05428314, 123.66156769], [69.05086517, 92.74394989, 124.45450592], [69.02742004, 92.40427399, 125.23509979], [68.95466614, 92.09059143, 126.02339935], [68.84975433, 91.79674530, 126.81564331], [68.72673798, 91.53726196, 127.61715698], [68.60685730, 91.30300140, 128.42681885], [68.50636292, 91.12481689, 129.25317383], [68.39311218, 91.01572418, 130.08976746], [68.25946808, 90.94654083, 130.92756653]], dtype=np.float32) streamline_64bit = streamline.astype(np.float64) streamlines = [streamline[[0, 10]], streamline, streamline[::2], streamline[::3], streamline[::5], streamline[::6]] streamlines_64bit = [streamline_64bit[[0, 10]], streamline_64bit, streamline_64bit[::2], streamline_64bit[::3], streamline_64bit[::4], streamline_64bit[::5]] heterogeneous_streamlines = [streamline_64bit, streamline_64bit.reshape((-1, 6)), streamline_64bit.reshape((-1, 2))] def length_python(xyz, along=False): xyz = np.asarray(xyz, dtype=np.float64) if xyz.shape[0] < 2: if along: return np.array([0]) return 0 dists = np.sqrt((np.diff(xyz, axis=0)**2).sum(axis=1)) if along: return np.cumsum(dists) return np.sum(dists) def set_number_of_points_python(xyz, n_pols=3): def _extrap(xyz, cumlen, distance): ''' Helper function for extrapolate ''' ind = np.where((cumlen-distance) > 0)[0][0] len0 = cumlen[ind-1] len1 = cumlen[ind] Ds = distance-len0 Lambda = Ds/(len1-len0) return Lambda*xyz[ind] + (1-Lambda)*xyz[ind-1] cumlen = np.zeros(xyz.shape[0]) cumlen[1:] = length_python(xyz, along=True) step = cumlen[-1] / (n_pols-1) ar = np.arange(0, cumlen[-1], step) if np.abs(ar[-1] - cumlen[-1]) < np.finfo('f4').eps: ar = ar[:-1] xyz2 = [_extrap(xyz, cumlen, distance) for distance in ar] return np.vstack((np.array(xyz2), xyz[-1])) def test_set_number_of_points(): # Test resampling of only one streamline nb_points = 12 modified_streamline_cython = set_number_of_points( streamline, nb_points) modified_streamline_python = set_number_of_points_python( streamline, nb_points) assert_equal(len(modified_streamline_cython), nb_points) # Using a 5 digits precision because of streamline is in float32. assert_array_almost_equal(modified_streamline_cython, modified_streamline_python, 5) modified_streamline_cython = set_number_of_points( streamline_64bit, nb_points) modified_streamline_python = set_number_of_points_python( streamline_64bit, nb_points) assert_equal(len(modified_streamline_cython), nb_points) assert_array_almost_equal(modified_streamline_cython, modified_streamline_python) res = [] simple_streamline = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]], 'f4') for nb_points in range(2, 200): modified_streamline_cython = set_number_of_points( simple_streamline, nb_points) res.append(nb_points - len(modified_streamline_cython)) assert_equal(np.sum(res), 0) # Test resampling of multiple streamlines of different nb_points nb_points = 12 modified_streamlines_cython = set_number_of_points( streamlines, nb_points) for i, s in enumerate(streamlines): modified_streamline_python = set_number_of_points_python(s, nb_points) # Using a 5 digits precision because of streamline is in float32. assert_array_almost_equal(modified_streamlines_cython[i], modified_streamline_python, 5) modified_streamlines_cython = set_number_of_points( streamlines_64bit, nb_points) for i, s in enumerate(streamlines_64bit): modified_streamline_python = set_number_of_points_python(s, nb_points) assert_array_almost_equal(modified_streamlines_cython[i], modified_streamline_python) # Test streamlines with mixed dtype streamlines_mixed_dtype = [streamline, streamline.astype(np.float64), streamline.astype(np.int32), streamline.astype(np.int64)] nb_points_mixed_dtype = [len(s) for s in set_number_of_points( streamlines_mixed_dtype, nb_points)] assert_array_equal(nb_points_mixed_dtype, [nb_points] * len(streamlines_mixed_dtype)) # Test streamlines with different shape modified_streamlines_cython = set_number_of_points( heterogeneous_streamlines, nb_points) for i, s in enumerate(heterogeneous_streamlines): modified_streamline_python = set_number_of_points_python(s, nb_points) assert_array_almost_equal(modified_streamlines_cython[i], modified_streamline_python) # Test streamline with integer dtype modified_streamline = set_number_of_points(streamline.astype(np.int32)) assert_true(modified_streamline.dtype == np.float32) modified_streamline = set_number_of_points(streamline.astype(np.int64)) assert_true(modified_streamline.dtype == np.float64) # Test empty list assert_equal(set_number_of_points([]), []) # Test streamline having only one point assert_raises(ValueError, set_number_of_points, np.array([[1, 2, 3]])) # We do not support list of lists, it should be numpy ndarray. streamline_unsupported = [[1, 2, 3], [4, 5, 5], [2, 1, 3], [4, 2, 1]] assert_raises(AttributeError, set_number_of_points, streamline_unsupported) # Test setting number of points of a numpy with flag WRITABLE=False streamline_readonly = streamline.copy() streamline_readonly.setflags(write=False) assert_equal(len(set_number_of_points(streamline_readonly, nb_points=42)), 42) # Test setting computing length of a numpy with flag WRITABLE=False streamlines_readonly = [] for s in streamlines: streamlines_readonly.append(s.copy()) streamlines_readonly[-1].setflags(write=False) assert_equal(len(set_number_of_points(streamlines_readonly, nb_points=42)), len(streamlines_readonly)) streamlines_readonly = [] for s in streamlines_64bit: streamlines_readonly.append(s.copy()) streamlines_readonly[-1].setflags(write=False) assert_equal(len(set_number_of_points(streamlines_readonly, nb_points=42)), len(streamlines_readonly)) def test_set_number_of_points_memory_leaks(): # Test some dtypes dtypes = [np.float32, np.float64, np.int32, np.int64] for dtype in dtypes: rng = np.random.RandomState(1234) NB_STREAMLINES = 10000 streamlines = [rng.randn(rng.randint(10, 100), 3).astype(dtype) for _ in range(NB_STREAMLINES)] list_refcount_before = get_type_refcount()["list"] rstreamlines = set_number_of_points(streamlines, nb_points=2) list_refcount_after = get_type_refcount()["list"] del rstreamlines # Delete `rstreamlines` because it holds a reference to `list`. # Calling `set_number_of_points` should increase the refcount of `list` by one # since we kept the returned value. assert_equal(list_refcount_after, list_refcount_before+1) # Test mixed dtypes rng = np.random.RandomState(1234) NB_STREAMLINES = 10000 streamlines = [] for i in range(NB_STREAMLINES): dtype = dtypes[i % len(dtypes)] streamlines.append(rng.randn(rng.randint(10, 100), 3).astype(dtype)) list_refcount_before = get_type_refcount()["list"] rstreamlines = set_number_of_points(streamlines, nb_points=2) list_refcount_after = get_type_refcount()["list"] # Calling `set_number_of_points` should increase the refcount of `list` by one # since we kept the returned value. assert_equal(list_refcount_after, list_refcount_before+1) def test_length(): # Test length of only one streamline length_streamline_cython = ds_length(streamline) length_streamline_python = length_python(streamline) assert_almost_equal(length_streamline_cython, length_streamline_python) length_streamline_cython = ds_length(streamline_64bit) length_streamline_python = length_python(streamline_64bit) assert_almost_equal(length_streamline_cython, length_streamline_python) # Test computing length of multiple streamlines of different nb_points length_streamlines_cython = ds_length(streamlines) for i, s in enumerate(streamlines): length_streamline_python = length_python(s) assert_array_almost_equal(length_streamlines_cython[i], length_streamline_python) length_streamlines_cython = ds_length(streamlines_64bit) for i, s in enumerate(streamlines_64bit): length_streamline_python = length_python(s) assert_array_almost_equal(length_streamlines_cython[i], length_streamline_python) # Test streamlines having mixed dtype streamlines_mixed_dtype = [streamline, streamline.astype(np.float64), streamline.astype(np.int32), streamline.astype(np.int64)] lengths_mixed_dtype = [ds_length(s) for s in streamlines_mixed_dtype] assert_array_equal(ds_length(streamlines_mixed_dtype), lengths_mixed_dtype) # Test streamlines with different shape length_streamlines_cython = ds_length( heterogeneous_streamlines) for i, s in enumerate(heterogeneous_streamlines): length_streamline_python = length_python(s) assert_array_almost_equal(length_streamlines_cython[i], length_streamline_python) # Test streamline having integer dtype length_streamline = ds_length(streamline.astype('int')) assert_true(length_streamline.dtype == np.float64) # Test empty list assert_equal(ds_length([]), 0.0) # Test streamline having only one point assert_equal(ds_length(np.array([[1, 2, 3]])), 0.0) # We do not support list of lists, it should be numpy ndarray. streamline_unsupported = [[1, 2, 3], [4, 5, 5], [2, 1, 3], [4, 2, 1]] assert_raises(AttributeError, ds_length, streamline_unsupported) # Test setting computing length of a numpy with flag WRITABLE=False streamlines_readonly = [] for s in streamlines: streamlines_readonly.append(s.copy()) streamlines_readonly[-1].setflags(write=False) assert_array_almost_equal(ds_length(streamlines_readonly), [length_python(s) for s in streamlines_readonly]) streamlines_readonly = [] for s in streamlines_64bit: streamlines_readonly.append(s.copy()) streamlines_readonly[-1].setflags(write=False) assert_array_almost_equal(ds_length(streamlines_readonly), [length_python(s) for s in streamlines_readonly]) def test_length_memory_leaks(): # Test some dtypes dtypes = [np.float32, np.float64, np.int32, np.int64] for dtype in dtypes: rng = np.random.RandomState(1234) NB_STREAMLINES = 10000 streamlines = [rng.randn(rng.randint(10, 100), 3).astype(dtype) for _ in range(NB_STREAMLINES)] list_refcount_before = get_type_refcount()["list"] lengths = ds_length(streamlines) list_refcount_after = get_type_refcount()["list"] # Calling `ds_length` shouldn't increase the refcount of `list` # since the return value is a numpy array. assert_equal(list_refcount_after, list_refcount_before) # Test mixed dtypes rng = np.random.RandomState(1234) NB_STREAMLINES = 10000 streamlines = [] for i in range(NB_STREAMLINES): dtype = dtypes[i % len(dtypes)] streamlines.append(rng.randn(rng.randint(10, 100), 3).astype(dtype)) list_refcount_before = get_type_refcount()["list"] lengths = ds_length(streamlines) list_refcount_after = get_type_refcount()["list"] # Calling `ds_length` shouldn't increase the refcount of `list` # since the return value is a numpy array. assert_equal(list_refcount_after, list_refcount_before) def test_unlist_relist_streamlines(): streamlines = [np.random.rand(10, 3), np.random.rand(20, 3), np.random.rand(5, 3)] points, offsets = unlist_streamlines(streamlines) assert_equal(offsets.dtype, np.dtype('i8')) assert_equal(points.shape, (35, 3)) assert_equal(len(offsets), len(streamlines)) streamlines2 = relist_streamlines(points, offsets) assert_equal(len(streamlines), len(streamlines2)) for i in range(len(streamlines)): assert_array_equal(streamlines[i], streamlines2[i]) def test_center_and_transform(): A = np.array([[1, 2, 3], [1, 2, 3.]]) streamlines = [A for i in range(10)] streamlines2, center = center_streamlines(streamlines) B = np.zeros((2, 3)) assert_array_equal(streamlines2[0], B) assert_array_equal(center, A[0]) affine = np.eye(4) affine[0, 0] = 2 affine[:3, -1] = - np.array([2, 1, 1]) * center streamlines3 = transform_streamlines(streamlines, affine) assert_array_equal(streamlines3[0], B) def test_select_random_streamlines(): streamlines = [np.random.rand(10, 3), np.random.rand(20, 3), np.random.rand(5, 3)] new_streamlines = select_random_set_of_streamlines(streamlines, 2) assert_equal(len(new_streamlines), 2) new_streamlines = select_random_set_of_streamlines(streamlines, 4) assert_equal(len(new_streamlines), 3) def compress_streamlines_python(streamline, tol_error=0.01, max_segment_length=10): """ Python version of the FiberCompression found on https://github.com/scilus/FiberCompression. """ if streamline.shape[0] <= 2: return streamline.copy() # Euclidean distance def segment_length(prev, next): return np.sqrt(((prev-next)**2).sum()) # Projection of a 3D point on a 3D line, minimal distance def dist_to_line(prev, next, curr): return norm(np.cross(next-prev, curr-next)) / norm(next-prev) nb_points = 0 compressed_streamline = np.zeros_like(streamline) # Copy first point since it is always kept. compressed_streamline[0, :] = streamline[0, :] nb_points += 1 prev = streamline[0] prev_id = 0 for next_id, next in enumerate(streamline[2:], start=2): # Euclidean distance between last added point and current point. if segment_length(prev, next) > max_segment_length: compressed_streamline[nb_points, :] = streamline[next_id-1, :] nb_points += 1 prev = streamline[next_id-1] prev_id = next_id-1 continue # Check that each point is not offset by more than `tol_error` mm. for o, curr in enumerate(streamline[prev_id+1:next_id], start=prev_id+1): dist = dist_to_line(prev, next, curr) if np.isnan(dist) or dist > tol_error: compressed_streamline[nb_points, :] = streamline[next_id-1, :] nb_points += 1 prev = streamline[next_id-1] prev_id = next_id-1 break # Copy last point since it is always kept. compressed_streamline[nb_points, :] = streamline[-1, :] nb_points += 1 # Make sure the array have the correct size return compressed_streamline[:nb_points] def test_compress_streamlines(): for compress_func in [compress_streamlines_python, compress_streamlines]: # Small streamlines (less than two points) are uncompressable. for small_streamline in [np.array([[]]), np.array([[1, 1, 1]]), np.array([[1, 1, 1], [2, 2, 2]])]: c_streamline = compress_func(small_streamline) assert_equal(len(c_streamline), len(small_streamline)) assert_array_equal(c_streamline, small_streamline) # Compressing a straight streamline that is less than 10mm long # should output a two points streamline. linear_streamline = np.linspace(0, 5, 100*3).reshape((100, 3)) c_streamline = compress_func(linear_streamline) assert_equal(len(c_streamline), 2) assert_array_equal(c_streamline, [linear_streamline[0], linear_streamline[-1]]) # The distance of consecutive points must be less or equal than some # value. max_segment_length = 10 linear_streamline = np.linspace(0, 100, 100*3).reshape((100, 3)) linear_streamline[:, 1:] = 0. c_streamline = compress_func(linear_streamline, max_segment_length=max_segment_length) segments_length = np.sqrt((np.diff(c_streamline, axis=0)**2).sum(axis=1)) assert_true(np.all(segments_length <= max_segment_length)) assert_equal(len(c_streamline), 12) assert_array_equal(c_streamline, linear_streamline[::9]) # A small `max_segment_length` should keep all points. c_streamline = compress_func(linear_streamline, max_segment_length=0.01) assert_array_equal(c_streamline, linear_streamline) # Test we can set `max_segment_length` to infinity # (like the C++ version) compress_func(streamline, max_segment_length=np.inf) # Uncompressable streamline when `tol_error` == 1. simple_streamline = np.array([[0, 0, 0], [1, 1, 0], [1.5, np.inf, 0], [2, 2, 0], [2.5, 20, 0], [3, 3, 0]]) # Because of np.inf, compressing that streamline causes a warning. with np.errstate(invalid='ignore'): c_streamline = compress_func(simple_streamline, tol_error=1) assert_array_equal(c_streamline, simple_streamline) # Create a special streamline where every other point is increasingly # farther from a straigth line formed by the streamline endpoints. tol_errors = np.linspace(0, 10, 21) orthogonal_line = np.array([[-np.sqrt(2)/2, np.sqrt(2)/2, 0]], dtype=np.float32) special_streamline = np.array([range(len(tol_errors)*2+1)] * 3, dtype=np.float32).T special_streamline[1::2] += orthogonal_line * tol_errors[:, None] # # Uncomment to see the streamline. # import pylab as plt # plt.plot(special_streamline[:, 0], special_streamline[:, 1], '.-') # plt.axis('equal'); plt.show() # Test different values for `tol_error`. for i, tol_error in enumerate(tol_errors): cspecial_streamline = compress_streamlines(special_streamline, tol_error=tol_error+1e-4, max_segment_length=np.inf) # First and last points should always be the same as the original ones. assert_array_equal(cspecial_streamline[0], special_streamline[0]) assert_array_equal(cspecial_streamline[-1], special_streamline[-1]) assert_equal(len(cspecial_streamline), len(special_streamline)-((i*2)+1)) # Make sure Cython and Python versions are the same. cstreamline_python = compress_streamlines_python( special_streamline, tol_error=tol_error+1e-4, max_segment_length=np.inf) assert_equal(len(cspecial_streamline), len(cstreamline_python)) assert_array_almost_equal(cspecial_streamline, cstreamline_python) def test_compress_streamlines_memory_leaks(): # Test some dtypes dtypes = [np.float32, np.float64, np.int32, np.int64] for dtype in dtypes: rng = np.random.RandomState(1234) NB_STREAMLINES = 10000 streamlines = [rng.randn(rng.randint(10, 100), 3).astype(dtype) for _ in range(NB_STREAMLINES)] list_refcount_before = get_type_refcount()["list"] cstreamlines = compress_streamlines(streamlines) list_refcount_after = get_type_refcount()["list"] del cstreamlines # Delete `cstreamlines` because it holds a reference to `list`. # Calling `compress_streamlines` should increase the refcount of `list` by one # since we kept the returned value. assert_equal(list_refcount_after, list_refcount_before+1) # Test mixed dtypes rng = np.random.RandomState(1234) NB_STREAMLINES = 10000 streamlines = [] for i in range(NB_STREAMLINES): dtype = dtypes[i % len(dtypes)] streamlines.append(rng.randn(rng.randint(10, 100), 3).astype(dtype)) list_refcount_before = get_type_refcount()["list"] cstreamlines = compress_streamlines(streamlines) list_refcount_after = get_type_refcount()["list"] # Calling `compress_streamlines` should increase the refcount of `list` by one # since we kept the returned value. assert_equal(list_refcount_after, list_refcount_before+1) def test_select_by_rois(): streamlines = [np.array([[0, 0., 0.9], [1.9, 0., 0.]]), np.array([[0.1, 0., 0], [0, 1., 1.], [0, 2., 2.]]), np.array([[2, 2, 2], [3, 3, 3]])] # Make two ROIs: mask1 = np.zeros((4, 4, 4), dtype=bool) mask2 = np.zeros_like(mask1) mask1[0, 0, 0] = True mask2[1, 0, 0] = True selection = select_by_rois(streamlines, [mask1], [True], tol=1) npt.assert_array_equal(list(selection), [streamlines[0], streamlines[1]]) selection = select_by_rois(streamlines, [mask1, mask2], [True, True], tol=1) npt.assert_array_equal(list(selection), [streamlines[0], streamlines[1]]) selection = select_by_rois(streamlines, [mask1, mask2], [True, False]) npt.assert_array_equal(list(selection), [streamlines[1]]) # Setting tolerance too low gets overridden: selection = select_by_rois(streamlines, [mask1, mask2], [True, False], tol=0.1) npt.assert_array_equal(list(selection), [streamlines[1]]) selection = select_by_rois(streamlines, [mask1, mask2], [True, True], tol=0.87) npt.assert_array_equal(list(selection), [streamlines[1]]) mask3 = np.zeros_like(mask1) mask3[0, 2, 2] = 1 selection = select_by_rois(streamlines, [mask1, mask2, mask3], [True, True, False], tol=1.0) npt.assert_array_equal(list(selection), [streamlines[0]]) # Select using only one ROI selection = select_by_rois(streamlines, [mask1], [True], tol=0.87) npt.assert_array_equal(list(selection), [streamlines[1]]) selection = select_by_rois(streamlines, [mask1], [True], tol=1.0) npt.assert_array_equal(list(selection), [streamlines[0], streamlines[1]]) # Use different modes: selection = select_by_rois(streamlines, [mask1, mask2, mask3], [True, True, False], mode="all", tol=1.0) npt.assert_array_equal(list(selection), [streamlines[0]]) selection = select_by_rois(streamlines, [mask1, mask2, mask3], [True, True, False], mode="either_end", tol=1.0) npt.assert_array_equal(list(selection), [streamlines[0]]) selection = select_by_rois(streamlines, [mask1, mask2, mask3], [True, True, False], mode="both_end", tol=1.0) npt.assert_array_equal(list(selection), [streamlines[0]]) mask2[0, 2, 2] = True selection = select_by_rois(streamlines, [mask1, mask2, mask3], [True, True, False], mode="both_end", tol=1.0) npt.assert_array_equal(list(selection), [streamlines[0], streamlines[1]]) # Test with generator input: def generate_sl(streamlines): for sl in streamlines: yield sl selection = select_by_rois(generate_sl(streamlines), [mask1], [True], tol=1.0) npt.assert_array_equal(list(selection), [streamlines[0], streamlines[1]]) def test_orient_by_rois(): streamlines = [np.array([[0, 0., 0], [1, 0., 0.], [2, 0., 0.]]), np.array([[2, 0., 0.], [1, 0., 0], [0, 0, 0.]])] # Make two ROIs: mask1_vol = np.zeros((4, 4, 4), dtype=bool) mask2_vol = np.zeros_like(mask1_vol) mask1_vol[0, 0, 0] = True mask2_vol[1, 0, 0] = True mask1_coords = np.array(np.where(mask1_vol)).T mask2_coords = np.array(np.where(mask2_vol)).T # If there is an affine, we'll use it: affine = np.eye(4) affine[:, 3] = [-1, 100, -20, 1] # Transform the streamlines: x_streamlines = [sl + affine[:3, 3] for sl in streamlines] for copy in [True, False]: for sl, affine in zip([streamlines, x_streamlines], [None, affine]): for mask1, mask2 in \ zip([mask1_vol, mask1_coords], [mask2_vol, mask2_coords]): new_streamlines = orient_by_rois(sl, mask1, mask2, affine=affine, copy=copy) if copy: flipped_sl = [sl[0], sl[1][::-1]] else: flipped_sl = [np.array([[0, 0., 0], [1, 0., 0.], [2, 0., 0.]]), np.array([[0, 0., 0.], [1, 0., 0], [2, 0, 0.]])] if affine is not None: flipped_sl = [s + affine[:3, 3] for s in flipped_sl] npt.assert_equal(new_streamlines, flipped_sl) if __name__ == '__main__': run_module_suite() dipy-0.10.1/dipy/tracking/tests/test_track_volumes.py000066400000000000000000000046531263041327500227510ustar00rootroot00000000000000 import numpy as np from nose.tools import assert_true, assert_false, \ assert_equal, assert_raises from numpy.testing import assert_array_equal, assert_array_almost_equal import dipy.tracking.vox2track as tvo def tracks_to_expected(tracks, vol_dims): # simulate expected behavior of module vol_dims = np.array(vol_dims, dtype=np.int32) counts = np.zeros(vol_dims, dtype=np.int32) elements = {} for t_no, t in enumerate(tracks): u_ps = set() ti = np.round(t).astype(np.int32) for p_no, p in enumerate(ti): if np.any(p < 0): p[p<0] = 0 too_high = p >= vol_dims if np.any(too_high): p[too_high] = vol_dims[too_high]-1 p = tuple(p) if p in u_ps: continue u_ps.add(p) val = t_no if counts[p]: elements[p].append(val) else: elements[p] = [val] counts[p] +=1 return counts, elements def test_track_volumes(): # simplest case vol_dims = (1, 2, 3) tracks = ([[0, 0, 0], [0, 1, 1]],) tracks = [np.array(t) for t in tracks] ex_counts, ex_els = tracks_to_expected(tracks, vol_dims) tcs, tes = tvo.track_counts(tracks, vol_dims, [1,1,1]) assert_array_equal(tcs, ex_counts) assert_array_equal( tes, ex_els) # check only counts returned for return_elements=False tcs = tvo.track_counts(tracks, vol_dims, [1,1,1], False) assert_array_equal(tcs, ex_counts) # non-unique points, non-integer points, points outside vol_dims = (5, 10, 15) tracks = ([[-1, 0, 1], [0, 0.1, 0], [1, 1, 1], [1, 1, 1], [2, 2, 2]], [[0.7, 0, 0], [1, 1, 1], [1, 2, 2], [1, 11, 0]]) tracks = [np.array(t) for t in tracks] ex_counts, ex_els = tracks_to_expected(tracks, vol_dims) tcs, tes = tvo.track_counts(tracks, vol_dims, [1,1,1]) assert_array_equal( tcs, ex_counts) assert_array_equal( tes, ex_els) # points with non-unit voxel sizes vox_sizes = [1.4, 2.1, 3.7] float_tracks = [] for t in tracks: float_tracks.append(t * vox_sizes) tcs, tes = tvo.track_counts(float_tracks, vol_dims, vox_sizes) assert_array_equal(tcs, ex_counts) assert_array_equal(tes, ex_els) dipy-0.10.1/dipy/tracking/tests/test_utils.py000066400000000000000000000527071263041327500212360ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import from ...utils.six.moves import xrange import numpy as np import nose from dipy.io.bvectxt import orientation_from_string from dipy.tracking.utils import (affine_for_trackvis, connectivity_matrix, density_map, length, move_streamlines, ndbincount, reduce_labels, reorder_voxels_affine, seeds_from_mask, random_seeds_from_mask, target, _rmi, unique_rows, near_roi, reduce_rois) from dipy.tracking._utils import _to_voxel_coordinates import dipy.tracking.metrics as metrix from dipy.tracking.vox2track import streamline_mapping import numpy.testing as npt from numpy.testing import assert_array_almost_equal, assert_array_equal from nose.tools import assert_equal, assert_raises, assert_true def make_streamlines(): streamlines = [np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [5, 10, 12]], 'float'), np.array([[1, 2, 3], [3, 2, 0], [5, 20, 33], [40, 80, 120]], 'float')] return streamlines def test_density_map(): # One streamline diagonal in volume streamlines = [np.array([np.arange(10)]*3).T] shape = (10, 10, 10) x = np.arange(10) expected = np.zeros(shape) expected[x, x, x] = 1. dm = density_map(streamlines, vol_dims=shape, voxel_size=(1, 1, 1)) assert_array_equal(dm, expected) # add streamline, make voxel_size smaller. Each streamline should only be # counted once, even if multiple points lie in a voxel streamlines.append(np.ones((5, 3))) shape = (5, 5, 5) x = np.arange(5) expected = np.zeros(shape) expected[x, x, x] = 1. expected[0, 0, 0] += 1 dm = density_map(streamlines, vol_dims=shape, voxel_size=(2, 2, 2)) assert_array_equal(dm, expected) # should work with a generator dm = density_map(iter(streamlines), vol_dims=shape, voxel_size=(2, 2, 2)) assert_array_equal(dm, expected) # Test passing affine affine = np.diag([2, 2, 2, 1.]) affine[:3, 3] = 1. dm = density_map(streamlines, shape, affine=affine) assert_array_equal(dm, expected) # Shift the image by 2 voxels, ie 4mm affine[:3, 3] -= 4. expected_old = expected new_shape = [i + 2 for i in shape] expected = np.zeros(new_shape) expected[2:, 2:, 2:] = expected_old dm = density_map(streamlines, new_shape, affine=affine) assert_array_equal(dm, expected) def test_to_voxel_coordinates_precision(): # To simplify tests, use an identity affine. This would be the result of # a call to _mapping_to_voxel with another identity affine. transfo = np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]) # Offset is computed by _mapping_to_voxel. With a 1x1x1 dataset # having no translation, the offset is half the voxel size, i.e. 0.5. offset = np.array([0.5, 0.5, 0.5]) # Without the added tolerance in _to_voxel_coordinates, this streamline # should raise an Error in the call to _to_voxel_coordinates. failing_strl = [np.array([[-0.5000001, 0.0, 0.0], [0.0, 1.0, 0.0]], dtype=np.float32)] indices = _to_voxel_coordinates(failing_strl, transfo, offset) expected_indices = np.array([[[0, 0, 0], [0, 1, 0]]]) assert_array_equal(indices, expected_indices) def test_connectivity_matrix(): label_volume = np.array([[[3, 0, 0], [0, 0, 0], [0, 0, 4]]]) streamlines = [np.array([[0, 0, 0], [0, 0, 0], [0, 2, 2]], 'float'), np.array([[0, 0, 0], [0, 1, 1], [0, 2, 2]], 'float'), np.array([[0, 2, 2], [0, 1, 1], [0, 0, 0]], 'float')] expected = np.zeros((5, 5), 'int') expected[3, 4] = 2 expected[4, 3] = 1 # Check basic Case matrix = connectivity_matrix(streamlines, label_volume, (1, 1, 1), symmetric=False) assert_array_equal(matrix, expected) # Test mapping matrix, mapping = connectivity_matrix(streamlines, label_volume, (1, 1, 1), symmetric=False, return_mapping=True) assert_array_equal(matrix, expected) assert_equal(mapping[3, 4], [0, 1]) assert_equal(mapping[4, 3], [2]) assert_equal(mapping.get((0, 0)), None) # Test mapping and symmetric matrix, mapping = connectivity_matrix(streamlines, label_volume, (1, 1, 1), symmetric=True, return_mapping=True) assert_equal(mapping[3, 4], [0, 1, 2]) # When symmetric only (3,4) is a key, not (4, 3) assert_equal(mapping.get((4, 3)), None) # expected output matrix is symmetric version of expected expected = expected + expected.T assert_array_equal(matrix, expected) # Test mapping_as_streamlines, mapping dict has lists of streamlines matrix, mapping = connectivity_matrix(streamlines, label_volume, (1, 1, 1), symmetric=False, return_mapping=True, mapping_as_streamlines=True) assert_true(mapping[3, 4][0] is streamlines[0]) assert_true(mapping[3, 4][1] is streamlines[1]) assert_true(mapping[4, 3][0] is streamlines[2]) # Test passing affine to connectivity_matrix expected = matrix affine = np.diag([-1, -1, -1, 1.]) streamlines = [-i for i in streamlines] matrix = connectivity_matrix(streamlines, label_volume, affine=affine) # In the symmetrical case, the matrix should be, well, symmetric: assert_equal(matrix[4, 3], matrix[4, 3]) def test_ndbincount(): def check(expected): assert_equal(bc[0, 0], expected[0]) assert_equal(bc[0, 1], expected[1]) assert_equal(bc[1, 0], expected[2]) assert_equal(bc[2, 2], expected[3]) x = np.array([[0, 0], [0, 0], [0, 1], [0, 1], [1, 0], [2, 2]]).T expected = [2, 2, 1, 1] # count occurrences in x bc = ndbincount(x) assert_equal(bc.shape, (3, 3)) check(expected) # pass in shape bc = ndbincount(x, shape=(4, 5)) assert_equal(bc.shape, (4, 5)) check(expected) # pass in weights weights = np.arange(6.) weights[-1] = 1.23 expeceted = [1., 5., 4., 1.23] bc = ndbincount(x, weights=weights) check(expeceted) # raises an error if shape is too small assert_raises(ValueError, ndbincount, x, None, (2, 2)) def test_reduce_labels(): shape = (4, 5, 6) # labels from 100 to 220 labels = np.arange(100, np.prod(shape)+100).reshape(shape) # new labels form 0 to 120, and lookup maps range(0,120) to range(100, 220) new_labels, lookup = reduce_labels(labels) assert_array_equal(new_labels, labels-100) assert_array_equal(lookup, labels.ravel()) def test_move_streamlines(): streamlines = make_streamlines() affine = np.eye(4) new_streamlines = move_streamlines(streamlines, affine) for i, test_sl in enumerate(new_streamlines): assert_array_equal(test_sl, streamlines[i]) affine[:3, 3] += (4, 5, 6) new_streamlines = move_streamlines(streamlines, affine) for i, test_sl in enumerate(new_streamlines): assert_array_equal(test_sl, streamlines[i]+(4, 5, 6)) affine = np.eye(4) affine = affine[[2, 1, 0, 3]] new_streamlines = move_streamlines(streamlines, affine) for i, test_sl in enumerate(new_streamlines): assert_array_equal(test_sl, streamlines[i][:, [2, 1, 0]]) affine[:3, 3] += (4, 5, 6) new_streamlines = move_streamlines(streamlines, affine) undo_affine = move_streamlines(new_streamlines, np.eye(4), input_space=affine) for i, test_sl in enumerate(undo_affine): assert_array_almost_equal(test_sl, streamlines[i]) # Test that changing affine does affect moving streamlines affineA = affine.copy() affineB = affine.copy() streamlinesA = move_streamlines(streamlines, affineA) streamlinesB = move_streamlines(streamlines, affineB) affineB[:] = 0 for (a, b) in zip(streamlinesA, streamlinesB): assert_array_equal(a, b) def test_target(): streamlines = [np.array([[0., 0., 0.], [1., 0., 0.], [2., 0., 0.]]), np.array([[0., 0., 0], [0, 1., 1.], [0, 2., 2.]])] affine = np.eye(4) mask = np.zeros((4, 4, 4), dtype=bool) mask[0, 0, 0] = True # Both pass though new = list(target(streamlines, mask, affine=affine)) assert_equal(len(new), 2) new = list(target(streamlines, mask, affine=affine, include=False)) assert_equal(len(new), 0) # only first mask[:] = False mask[1, 0, 0] = True new = list(target(streamlines, mask, affine=affine)) assert_equal(len(new), 1) assert_true(new[0] is streamlines[0]) new = list(target(streamlines, mask, affine=affine, include=False)) assert_equal(len(new), 1) assert_true(new[0] is streamlines[1]) # Test that bad points raise a value error bad_sl = [np.array([[10., 10., 10.]])] new = target(bad_sl, mask, affine=affine) assert_raises(ValueError, list, new) bad_sl = [-np.array([[10., 10., 10.]])] new = target(bad_sl, mask, affine=affine) assert_raises(ValueError, list, new) # Test smaller voxels affine = np.random.random((4, 4)) - .5 affine[3] = [0, 0, 0, 1] streamlines = list(move_streamlines(streamlines, affine)) new = list(target(streamlines, mask, affine=affine)) assert_equal(len(new), 1) assert_true(new[0] is streamlines[0]) new = list(target(streamlines, mask, affine=affine, include=False)) assert_equal(len(new), 1) assert_true(new[0] is streamlines[1]) # Test that changing mask and affine do not break target include = target(streamlines, mask, affine=affine) exclude = target(streamlines, mask, affine=affine, include=False) affine[:] = np.eye(4) mask[:] = False include = list(include) exclude = list(exclude) assert_equal(len(include), 1) assert_true(include[0] is streamlines[0]) assert_equal(len(exclude), 1) assert_true(exclude[0] is streamlines[1]) def test_near_roi(): streamlines = [np.array([[0., 0., 0.9], [1.9, 0., 0.], [3, 2., 2.]]), np.array([[0.1, 0., 0], [0, 1., 1.], [0, 2., 2.]]), np.array([[2, 2, 2], [3, 3, 3]])] affine = np.eye(4) mask = np.zeros((4, 4, 4), dtype=bool) mask[0, 0, 0] = True mask[1, 0, 0] = True assert_array_equal(near_roi(streamlines, mask, tol=1), np.array([True, True, False])) assert_array_equal(near_roi(streamlines, mask), np.array([False, True, False])) # If there is an affine, we need to use it: affine[:, 3] = [-1, 100, -20, 1] # Transform the streamlines: x_streamlines = [sl + affine[:3, 3] for sl in streamlines] assert_array_equal(near_roi(x_streamlines, mask, affine=affine, tol=1), np.array([True, True, False])) assert_array_equal(near_roi(x_streamlines, mask, affine=affine, tol=None), np.array([False, True, False])) # Test for use of the 'all' mode: assert_array_equal(near_roi(x_streamlines, mask, affine=affine, tol=None, mode='all'), np.array([False, False, False])) mask[0, 1, 1] = True mask[0, 2, 2] = True # Test for use of the 'all' mode, also testing that setting the tolerance # to a very small number gets overridden: assert_array_equal(near_roi(x_streamlines, mask, affine=affine, tol=0.1, mode='all'), np.array([False, True, False])) mask[2, 2, 2] = True mask[3, 3, 3] = True assert_array_equal(near_roi(x_streamlines, mask, affine=affine, tol=None, mode='all'), np.array([False, True, True])) # Test for use of endpoints as selection criteria: mask = np.zeros((4, 4, 4), dtype=bool) mask[0, 1, 1] = True mask[3, 2, 2] = True assert_array_equal(near_roi(streamlines, mask, tol=0.87, mode="either_end"), np.array([True, False, False])) assert_array_equal(near_roi(streamlines, mask, tol=0.87, mode="both_end"), np.array([False, False, False])) mask[0, 0, 0] = True mask[0, 2, 2] = True assert_array_equal(near_roi(streamlines, mask, mode="both_end"), np.array([False, True, False])) # Test with a generator input: def generate_sl(streamlines): for sl in streamlines: yield sl assert_array_equal(near_roi(generate_sl(streamlines), mask, mode="both_end"), np.array([False, True, False])) def test_voxel_ornt(): sh = (40, 40, 40) sz = (1, 2, 3) I4 = np.eye(4) ras = orientation_from_string('ras') sra = orientation_from_string('sra') lpi = orientation_from_string('lpi') srp = orientation_from_string('srp') affine = reorder_voxels_affine(ras, ras, sh, sz) assert_array_equal(affine, I4) affine = reorder_voxels_affine(sra, sra, sh, sz) assert_array_equal(affine, I4) affine = reorder_voxels_affine(lpi, lpi, sh, sz) assert_array_equal(affine, I4) affine = reorder_voxels_affine(srp, srp, sh, sz) assert_array_equal(affine, I4) streamlines = make_streamlines() box = np.array(sh)*sz sra_affine = reorder_voxels_affine(ras, sra, sh, sz) toras_affine = reorder_voxels_affine(sra, ras, sh, sz) assert_array_equal(np.dot(toras_affine, sra_affine), I4) expected_sl = (sl[:, [2, 0, 1]] for sl in streamlines) test_sl = move_streamlines(streamlines, sra_affine) for ii in xrange(len(streamlines)): assert_array_equal(next(test_sl), next(expected_sl)) lpi_affine = reorder_voxels_affine(ras, lpi, sh, sz) toras_affine = reorder_voxels_affine(lpi, ras, sh, sz) assert_array_equal(np.dot(toras_affine, lpi_affine), I4) expected_sl = (box - sl for sl in streamlines) test_sl = move_streamlines(streamlines, lpi_affine) for ii in xrange(len(streamlines)): assert_array_equal(next(test_sl), next(expected_sl)) srp_affine = reorder_voxels_affine(ras, srp, sh, sz) toras_affine = reorder_voxels_affine(srp, ras, (40, 40, 40), (3, 1, 2)) assert_array_equal(np.dot(toras_affine, srp_affine), I4) expected_sl = [sl.copy() for sl in streamlines] for sl in expected_sl: sl[:, 1] = box[1] - sl[:, 1] expected_sl = (sl[:, [2, 0, 1]] for sl in expected_sl) test_sl = move_streamlines(streamlines, srp_affine) for ii in xrange(len(streamlines)): assert_array_equal(next(test_sl), next(expected_sl)) def test_streamline_mapping(): streamlines = [np.array([[0, 0, 0], [0, 0, 0], [0, 2, 2]], 'float'), np.array([[0, 0, 0], [0, 1, 1], [0, 2, 2]], 'float'), np.array([[0, 2, 2], [0, 1, 1], [0, 0, 0]], 'float')] mapping = streamline_mapping(streamlines, (1, 1, 1)) expected = {(0, 0, 0): [0, 1, 2], (0, 2, 2): [0, 1, 2], (0, 1, 1): [1, 2]} assert_equal(mapping, expected) mapping = streamline_mapping(streamlines, (1, 1, 1), mapping_as_streamlines=True) expected = dict((k, [streamlines[i] for i in indices]) for k, indices in expected.items()) assert_equal(mapping, expected) # Test passing affine affine = np.eye(4) affine[:3, 3] = .5 mapping = streamline_mapping(streamlines, affine=affine, mapping_as_streamlines=True) assert_equal(mapping, expected) # Make the voxel size smaller affine = np.diag([.5, .5, .5, 1.]) affine[:3, 3] = .25 expected = dict((tuple(i*2 for i in key), value) for key, value in expected.items()) mapping = streamline_mapping(streamlines, affine=affine, mapping_as_streamlines=True) assert_equal(mapping, expected) def test_rmi(): I1 = _rmi([3, 4], [10, 10]) assert_equal(I1, 34) I1 = _rmi([0, 0], [10, 10]) assert_equal(I1, 0) assert_raises(ValueError, _rmi, [10, 0], [10, 10]) try: from numpy import ravel_multi_index except ImportError: raise nose.SkipTest() # Dtype of random integers is system dependent A, B, C, D = np.random.randint(0, 1000, size=[4, 100]) I1 = _rmi([A, B], dims=[1000, 1000]) I2 = ravel_multi_index([A, B], dims=[1000, 1000]) assert_array_equal(I1, I2) I1 = _rmi([A, B, C, D], dims=[1000]*4) I2 = ravel_multi_index([A, B, C, D], dims=[1000]*4) assert_array_equal(I1, I2) # Check for overflow with small int types indices = np.random.randint(0, 255, size=(2, 100)) dims = (1000, 1000) I1 = _rmi(indices, dims=dims) I2 = ravel_multi_index(indices, dims=dims) assert_array_equal(I1, I2) def test_affine_for_trackvis(): voxel_size = np.array([1., 2, 3.]) affine = affine_for_trackvis(voxel_size) origin = np.dot(affine, [0, 0, 0, 1]) assert_array_almost_equal(origin[:3], voxel_size / 2) def test_length(): # Generate a simulated bundle of fibers: n_streamlines = 50 n_pts = 100 t = np.linspace(-10, 10, n_pts) bundle = [] for i in np.linspace(3, 5, n_streamlines): pts = np.vstack((np.cos(2 * t/np.pi), np.zeros(t.shape) + i, t)).T bundle.append(pts) start = np.random.randint(10, 30, n_streamlines) end = np.random.randint(60, 100, n_streamlines) bundle = [10 * streamline[start[i]:end[i]] for (i, streamline) in enumerate(bundle)] bundle_lengths = length(bundle) for idx, this_length in enumerate(bundle_lengths): assert_equal(this_length, metrix.length(bundle[idx])) def test_seeds_from_mask(): mask = np.random.random_integers(0, 1, size=(10, 10, 10)) seeds = seeds_from_mask(mask, density=1) assert_equal(mask.sum(), len(seeds)) assert_array_equal(np.argwhere(mask), seeds) mask[:] = False mask[3, 3, 3] = True seeds = seeds_from_mask(mask, density=[3, 4, 5]) assert_equal(len(seeds), 3 * 4 * 5) assert_true(np.all((seeds > 2.5) & (seeds < 3.5))) mask[4, 4, 4] = True seeds = seeds_from_mask(mask, density=[3, 4, 5]) assert_equal(len(seeds), 2 * 3 * 4 * 5) assert_true(np.all((seeds > 2.5) & (seeds < 4.5))) in_333 = ((seeds > 2.5) & (seeds < 3.5)).all(1) assert_equal(in_333.sum(), 3 * 4 * 5) in_444 = ((seeds > 3.5) & (seeds < 4.5)).all(1) assert_equal(in_444.sum(), 3 * 4 * 5) def test_random_seeds_from_mask(): mask = np.random.random_integers(0, 1, size=(4, 6, 3)) seeds = random_seeds_from_mask(mask, seeds_per_voxel=24) assert_equal(mask.sum() * 24, len(seeds)) mask[:] = False mask[2, 2, 2] = True seeds = random_seeds_from_mask(mask, seeds_per_voxel=8) assert_equal(mask.sum() * 8, len(seeds)) assert_true(np.all((seeds > 1.5) & (seeds < 2.5))) def test_connectivity_matrix_shape(): # Labels: z-planes have labels 0,1,2 labels = np.zeros((3, 3, 3), dtype=int) labels[:, :, 1] = 1 labels[:, :, 2] = 2 # Streamline set, only moves between first two z-planes. streamlines = [np.array([[0., 0., 0.], [0., 0., 0.5], [0., 0., 1.]]), np.array([[0., 1., 1.], [0., 1., 0.5], [0., 1., 0.]])] matrix = connectivity_matrix(streamlines, labels, affine=np.eye(4)) assert_equal(matrix.shape, (3, 3)) def test_unique_rows(): """ Testing the function unique_coords """ arr = np.array([[1, 2, 3], [1, 2, 3], [2, 3, 4], [3, 4, 5]]) arr_w_unique = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5]]) assert_array_equal(unique_rows(arr), arr_w_unique) # Should preserve order: arr = np.array([[2, 3, 4], [1, 2, 3], [1, 2, 3], [3, 4, 5]]) arr_w_unique = np.array([[2, 3, 4], [1, 2, 3], [3, 4, 5]]) assert_array_equal(unique_rows(arr), arr_w_unique) # Should work even with longer arrays: arr = np.array([[2, 3, 4], [1, 2, 3], [1, 2, 3], [3, 4, 5], [6, 7, 8], [0, 1, 0], [1, 0, 1]]) arr_w_unique = np.array([[2, 3, 4], [1, 2, 3], [3, 4, 5], [6, 7, 8], [0, 1, 0], [1, 0, 1]]) assert_array_equal(unique_rows(arr), arr_w_unique) def test_reduce_rois(): roi1 = np.zeros((4, 4, 4), dtype=np.bool) roi2 = np.zeros((4, 4, 4), dtype=np.bool) roi1[1, 1, 1] = 1 roi2[2, 2, 2] = 1 include_roi, exclude_roi = reduce_rois([roi1, roi2], [True, True]) npt.assert_equal(include_roi, roi1 + roi2) npt.assert_equal(exclude_roi, np.zeros((4, 4, 4))) include_roi, exclude_roi = reduce_rois([roi1, roi2], [True, False]) npt.assert_equal(include_roi, roi1) npt.assert_equal(exclude_roi, roi2) # Array input: include_roi, exclude_roi = reduce_rois(np.array([roi1, roi2]), [True, True]) npt.assert_equal(include_roi, roi1 + roi2) npt.assert_equal(exclude_roi, np.zeros((4, 4, 4))) dipy-0.10.1/dipy/tracking/utils.py000066400000000000000000000733571263041327500170410ustar00rootroot00000000000000"""Various tools related to creating and working with streamlines This module provides tools for targeting streamlines using ROIs, for making connectivity matrices from whole brain fiber tracking and some other tools that allow streamlines to interact with image data. Important Note: --------------- Dipy uses affine matrices to represent the relationship between streamline points, which are defined as points in a continuous 3d space, and image voxels, which are typically arranged in a discrete 3d grid. Dipy uses a convention similar to nifti files to interpret these affine matrices. This convention is that the point at the center of voxel ``[i, j, k]`` is represented by the point ``[x, y, z]`` where ``[x, y, z, 1] = affine * [i, j, k, 1]``. Also when the phrase "voxel coordinates" is used, it is understood to be the same as ``affine = eye(4)``. As an example, lets take a 2d image where the affine is:: [[1., 0., 0.], [0., 2., 0.], [0., 0., 1.]] The pixels of an image with this affine would look something like: A------------ | | | | | C | | | | | | | ----B-------- | | | | | | | | | | | | ------------- | | | | | | | | | | | | ------------D And the letters A-D represent the following points in "real world coordinates":: A = [-.5, -1.] B = [ .5, 1.] C = [ 0., 0.] D = [ 2.5, 5.] """ from __future__ import division, print_function, absolute_import from functools import wraps from warnings import warn from nibabel.affines import apply_affine from scipy.spatial.distance import cdist from dipy.core.geometry import dist_to_corner from collections import defaultdict from ..utils.six.moves import xrange, map import numpy as np from numpy import (asarray, ceil, dot, empty, eye, sqrt) from dipy.io.bvectxt import ornt_mapping from . import metrics # Import helper functions shared with vox2track from ._utils import (_mapping_to_voxel, _to_voxel_coordinates) def _rmi(index, dims): """An alternate implementation of numpy.ravel_multi_index for older versions of numpy. Assumes array layout is C contiguous """ # Upcast to integer type capable of holding largest array index index = np.asarray(index, dtype=np.intp) dims = np.asarray(dims) if index.ndim > 2: raise ValueError("Index should be 1 or 2-D") elif index.ndim == 2: index = index.T if (index >= dims).any(): raise ValueError("Index exceeds dimensions") strides = np.r_[dims[:0:-1].cumprod()[::-1], 1] return (strides * index).sum(-1) try: from numpy import ravel_multi_index except ImportError: ravel_multi_index = _rmi def density_map(streamlines, vol_dims, voxel_size=None, affine=None): """Counts the number of unique streamlines that pass though each voxel. Parameters ---------- streamlines : iterable A sequence of streamlines. vol_dims : 3 ints The shape of the volume to be returned containing the streamlines counts voxel_size : This argument is deprecated. affine : array_like (4, 4) The mapping from voxel coordinates to streamline points. Returns ------- image_volume : ndarray, shape=vol_dims The number of streamline points in each voxel of volume. Raises ------ IndexError When the points of the streamlines lie outside of the return volume. Notes ----- A streamline can pass though a voxel even if one of the points of the streamline does not lie in the voxel. For example a step from [0,0,0] to [0,0,2] passes though [0,0,1]. Consider subsegmenting the streamlines when the edges of the voxels are smaller than the steps of the streamlines. """ lin_T, offset = _mapping_to_voxel(affine, voxel_size) counts = np.zeros(vol_dims, 'int') for sl in streamlines: inds = _to_voxel_coordinates(sl, lin_T, offset) i, j, k = inds.T # this takes advantage of the fact that numpy's += operator only # acts once even if there are repeats in inds counts[i, j, k] += 1 return counts def connectivity_matrix(streamlines, label_volume, voxel_size=None, affine=None, symmetric=True, return_mapping=False, mapping_as_streamlines=False): """Counts the streamlines that start and end at each label pair. Parameters ---------- streamlines : sequence A sequence of streamlines. label_volume : ndarray An image volume with an integer data type, where the intensities in the volume map to anatomical structures. voxel_size : This argument is deprecated. affine : array_like (4, 4) The mapping from voxel coordinates to streamline coordinates. symmetric : bool, False by default Symmetric means we don't distinguish between start and end points. If symmetric is True, ``matrix[i, j] == matrix[j, i]``. return_mapping : bool, False by default If True, a mapping is returned which maps matrix indices to streamlines. mapping_as_streamlines : bool, False by default If True voxel indices map to lists of streamline objects. Otherwise voxel indices map to lists of integers. Returns ------- matrix : ndarray The number of connection between each pair of regions in `label_volume`. mapping : defaultdict(list) ``mapping[i, j]`` returns all the streamlines that connect region `i` to region `j`. If `symmetric` is True mapping will only have one key for each start end pair such that if ``i < j`` mapping will have key ``(i, j)`` but not key ``(j, i)``. """ # Error checking on label_volume kind = label_volume.dtype.kind labels_positive = ((kind == 'u') or ((kind == 'i') and (label_volume.min() >= 0))) valid_label_volume = (labels_positive and label_volume.ndim == 3) if not valid_label_volume: raise ValueError("label_volume must be a 3d integer array with" "non-negative label values") # If streamlines is an iterators if return_mapping and mapping_as_streamlines: streamlines = list(streamlines) # take the first and last point of each streamline endpoints = [sl[0::len(sl)-1] for sl in streamlines] # Map the streamlines coordinates to voxel coordinates lin_T, offset = _mapping_to_voxel(affine, voxel_size) endpoints = _to_voxel_coordinates(endpoints, lin_T, offset) # get labels for label_volume i, j, k = endpoints.T endlabels = label_volume[i, j, k] if symmetric: endlabels.sort(0) mx = label_volume.max() + 1 matrix = ndbincount(endlabels, shape=(mx, mx)) if symmetric: matrix = np.maximum(matrix, matrix.T) if return_mapping: mapping = defaultdict(list) for i, (a, b) in enumerate(endlabels.T): mapping[a, b].append(i) # Replace each list of indices with the streamlines they index if mapping_as_streamlines: for key in mapping: mapping[key] = [streamlines[i] for i in mapping[key]] # Return the mapping matrix and the mapping return matrix, mapping else: return matrix def ndbincount(x, weights=None, shape=None): """Like bincount, but for nd-indicies. Parameters ---------- x : array_like (N, M) M indices to a an Nd-array weights : array_like (M,), optional Weights associated with indices shape : optional the shape of the output """ x = np.asarray(x) if shape is None: shape = x.max(1) + 1 x = ravel_multi_index(x, shape) # out = np.bincount(x, weights, minlength=np.prod(shape)) # out.shape = shape # Use resize to be compatible with numpy < 1.6, minlength new in 1.6 out = np.bincount(x, weights) out.resize(shape) return out def reduce_labels(label_volume): """Reduces an array of labels to the integers from 0 to n with smallest possible n. Examples -------- >>> labels = np.array([[1, 3, 9], ... [1, 3, 8], ... [1, 3, 7]]) >>> new_labels, lookup = reduce_labels(labels) >>> lookup array([1, 3, 7, 8, 9]) >>> new_labels #doctest: +ELLIPSIS array([[0, 1, 4], [0, 1, 3], [0, 1, 2]]...) >>> (lookup[new_labels] == labels).all() True """ lookup_table = np.unique(label_volume) label_volume = lookup_table.searchsorted(label_volume) return label_volume, lookup_table def subsegment(streamlines, max_segment_length): """Splits the segments of the streamlines into small segments. Replaces each segment of each of the streamlines with the smallest possible number of equally sized smaller segments such that no segment is longer than max_segment_length. Among other things, this can useful for getting streamline counts on a grid that is smaller than the length of the streamline segments. Parameters ---------- streamlines : sequence of ndarrays The streamlines to be subsegmented. max_segment_length : float The longest allowable segment length. Returns ------- output_streamlines : generator A set of streamlines. Notes ----- Segments of 0 length are removed. If unchanged Examples -------- >>> streamlines = [np.array([[0,0,0],[2,0,0],[5,0,0]])] >>> list(subsegment(streamlines, 3.)) [array([[ 0., 0., 0.], [ 2., 0., 0.], [ 5., 0., 0.]])] >>> list(subsegment(streamlines, 1)) [array([[ 0., 0., 0.], [ 1., 0., 0.], [ 2., 0., 0.], [ 3., 0., 0.], [ 4., 0., 0.], [ 5., 0., 0.]])] >>> list(subsegment(streamlines, 1.6)) [array([[ 0. , 0. , 0. ], [ 1. , 0. , 0. ], [ 2. , 0. , 0. ], [ 3.5, 0. , 0. ], [ 5. , 0. , 0. ]])] """ for sl in streamlines: diff = (sl[1:] - sl[:-1]) length = sqrt((diff*diff).sum(-1)) num_segments = ceil(length/max_segment_length).astype('int') output_sl = empty((num_segments.sum()+1, 3), 'float') output_sl[0] = sl[0] count = 1 for ii in xrange(len(num_segments)): ns = num_segments[ii] if ns == 1: output_sl[count] = sl[ii+1] count += 1 elif ns > 1: small_d = diff[ii]/ns point = sl[ii] for jj in xrange(ns): point = point + small_d output_sl[count] = point count += 1 elif ns == 0: pass # repeated point else: # this should never happen because ns should be a positive # int assert(ns >= 0) yield output_sl def seeds_from_mask(mask, density=[1, 1, 1], voxel_size=None, affine=None): """Creates seeds for fiber tracking from a binary mask. Seeds points are placed evenly distributed in all voxels of ``mask`` which are ``True``. Parameters ---------- mask : binary 3d array_like A binary array specifying where to place the seeds for fiber tracking. density : int or array_like (3,) Specifies the number of seeds to place along each dimension. A ``density`` of `2` is the same as ``[2, 2, 2]`` and will result in a total of 8 seeds per voxel. voxel_size : This argument is deprecated. affine : array, (4, 4) The mapping between voxel indices and the point space for seeds. A seed point at the center the voxel ``[i, j, k]`` will be represented as ``[x, y, z]`` where ``[x, y, z, 1] == np.dot(affine, [i, j, k , 1])``. See Also -------- random_seeds_from_mask Raises ------ ValueError When ``mask`` is not a three-dimensional array Examples -------- >>> mask = np.zeros((3,3,3), 'bool') >>> mask[0,0,0] = 1 >>> seeds_from_mask(mask, [1,1,1], [1,1,1]) array([[ 0.5, 0.5, 0.5]]) >>> seeds_from_mask(mask, [1,2,3], [1,1,1]) array([[ 0.5 , 0.25 , 0.16666667], [ 0.5 , 0.75 , 0.16666667], [ 0.5 , 0.25 , 0.5 ], [ 0.5 , 0.75 , 0.5 ], [ 0.5 , 0.25 , 0.83333333], [ 0.5 , 0.75 , 0.83333333]]) >>> mask[0,1,2] = 1 >>> seeds_from_mask(mask, [1,1,2], [1.1,1.1,2.5]) array([[ 0.55 , 0.55 , 0.625], [ 0.55 , 0.55 , 1.875], [ 0.55 , 1.65 , 5.625], [ 0.55 , 1.65 , 6.875]]) """ mask = np.array(mask, dtype=bool, copy=False, ndmin=3) if mask.ndim != 3: raise ValueError('mask cannot be more than 3d') density = asarray(density, int) if density.size == 1: d = density density = np.empty(3, dtype=int) density.fill(d) elif density.shape != (3,): raise ValueError("density should be in integer array of shape (3,)") # Grid of points between -.5 and .5, centered at 0, with given density grid = np.mgrid[0:density[0], 0:density[1], 0:density[2]] grid = grid.T.reshape((-1, 3)) grid = grid / density grid += (.5 / density - .5) where = np.argwhere(mask) # Add the grid of points to each voxel in mask seeds = where[:, np.newaxis, :] + grid[np.newaxis, :, :] seeds = seeds.reshape((-1, 3)) # Apply the spatial transform if affine is not None: # Use affine to move seeds into real world coordinates seeds = np.dot(seeds, affine[:3, :3].T) seeds += affine[:3, 3] elif voxel_size is not None: # Use voxel_size to move seeds into trackvis space seeds += .5 seeds *= voxel_size return seeds def random_seeds_from_mask(mask, seeds_per_voxel=1, affine=None): """Creates randomly placed seeds for fiber tracking from a binary mask. Seeds points are placed randomly distributed in all voxels of ``mask`` which are ``True``. This function is essentially similar to ``seeds_from_mask()``, with the difference that instead of evenly distributing the seeds, it randomly places the seeds within the voxels specified by the ``mask`` Parameters ---------- mask : binary 3d array_like A binary array specifying where to place the seeds for fiber tracking. seeds_per_voxel : int Specifies the number of seeds to place in each voxel. affine : array, (4, 4) The mapping between voxel indices and the point space for seeds. A seed point at the center the voxel ``[i, j, k]`` will be represented as ``[x, y, z]`` where ``[x, y, z, 1] == np.dot(affine, [i, j, k , 1])``. See Also -------- seeds_from_mask Raises ------ ValueError When ``mask`` is not a three-dimensional array Examples -------- >>> mask = np.zeros((3,3,3), 'bool') >>> mask[0,0,0] = 1 >>> np.random.seed(1) >>> random_seeds_from_mask(mask, seeds_per_voxel=1) array([[-0.082978 , 0.22032449, -0.49988563]]) >>> random_seeds_from_mask(mask, seeds_per_voxel=6) array([[-0.19766743, -0.35324411, -0.40766141], [-0.31373979, -0.15443927, -0.10323253], [ 0.03881673, -0.08080549, 0.1852195 ], [-0.29554775, 0.37811744, -0.47261241], [ 0.17046751, -0.0826952 , 0.05868983], [-0.35961306, -0.30189851, 0.30074457]]) >>> mask[0,1,2] = 1 >>> random_seeds_from_mask(mask, seeds_per_voxel=2) array([[ 0.46826158, -0.18657582, 0.19232262], [ 0.37638915, 0.39460666, -0.41495579], [-0.46094522, 0.66983042, 2.3781425 ], [-0.40165317, 0.92110763, 2.45788953]]) """ mask = np.array(mask, dtype=bool, copy=False, ndmin=3) if mask.ndim != 3: raise ValueError('mask cannot be more than 3d') where = np.argwhere(mask) num_voxels = len(where) # Generate as many random triplets as the number of seeds needed grid = np.random.random([seeds_per_voxel * num_voxels, 3]) # Repeat elements of 'where' so that it can be added to grid where = np.repeat(where, seeds_per_voxel, axis=0) seeds = where + grid - .5 seeds = asarray(seeds) # Apply the spatial transform if affine is not None: # Use affine to move seeds into real world coordinates seeds = np.dot(seeds, affine[:3, :3].T) seeds += affine[:3, 3] return seeds def _with_initialize(generator): """Allows one to write a generator with initialization code. All code up to the first yield is run as soon as the generator function is called and the first yield value is ignored. """ @wraps(generator) def helper(*args, **kwargs): gen = generator(*args, **kwargs) next(gen) return gen return helper @_with_initialize def target(streamlines, target_mask, affine, include=True): """Filters streamlines based on whether or not they pass through an ROI. Parameters ---------- streamlines : iterable A sequence of streamlines. Each streamline should be a (N, 3) array, where N is the length of the streamline. target_mask : array-like A mask used as a target. Non-zero values are considered to be within the target region. affine : array (4, 4) The affine transform from voxel indices to streamline points. include : bool, default True If True, streamlines passing though `target_mask` are kept. If False, the streamlines not passing thought `target_mask` are kept. Returns ------- streamlines : generator A sequence of streamlines that pass though `target_mask`. Raises ------ IndexError When the points of the streamlines lie outside of the `target_mask`. See Also -------- density_map """ target_mask = np.array(target_mask, dtype=bool, copy=True) lin_T, offset = _mapping_to_voxel(affine, voxel_size=None) yield # End of initialization for sl in streamlines: try: ind = _to_voxel_coordinates(sl, lin_T, offset) i, j, k = ind.T state = target_mask[i, j, k] except IndexError: raise ValueError("streamlines points are outside of target_mask") if state.any() == include: yield sl def streamline_near_roi(streamline, roi_coords, tol, mode='any'): """Is a streamline near an ROI. Implements the inner loops of the :func:`near_roi` function. Parameters ---------- streamline : array, shape (N, 3) A single streamline roi_coords : array, shape (M, 3) ROI coordinates transformed to the streamline coordinate frame. tol : float Distance (in the units of the streamlines, usually mm). If any coordinate in the streamline is within this distance from the center of any voxel in the ROI, this function returns True. mode : string One of {"any", "all", "either_end", "both_end"}, where return True if: "any" : any point is within tol from ROI. "all" : all points are within tol from ROI. "either_end" : either of the end-points is within tol from ROI "both_end" : both end points are within tol from ROI. Returns ------- out : boolean """ if len(roi_coords) == 0: return False if mode == "any" or mode == "all": s = streamline elif mode == "either_end" or mode == "both_end": # 'end' modes, use a streamline with 2 nodes: s = np.vstack([streamline[0], streamline[-1]]) else: e_s = "For determining relationship to an array, you can use " e_s += "one of the following modes: 'any', 'all', 'both_end'," e_s += "'either_end', but you entered: %s." % mode raise ValueError(e_s) dist = cdist(s, roi_coords, 'euclidean') if mode == "any" or mode == "either_end": return np.min(dist) <= tol else: return np.all(np.min(dist, -1) <= tol) def near_roi(streamlines, region_of_interest, affine=None, tol=None, mode="any"): """Provide filtering criteria for a set of streamlines based on whether they fall within a tolerance distance from an ROI Parameters ---------- streamlines : list or generator A sequence of streamlines. Each streamline should be a (N, 3) array, where N is the length of the streamline. region_of_interest : ndarray A mask used as a target. Non-zero values are considered to be within the target region. affine : ndarray Affine transformation from voxels to streamlines. Default: identity. tol : float Distance (in the units of the streamlines, usually mm). If any coordinate in the streamline is within this distance from the center of any voxel in the ROI, the filtering criterion is set to True for this streamline, otherwise False. Defaults to the distance between the center of each voxel and the corner of the voxel. mode : string, optional One of {"any", "all", "either_end", "both_end"}, where return True if: "any" : any point is within tol from ROI. Default. "all" : all points are within tol from ROI. "either_end" : either of the end-points is within tol from ROI "both_end" : both end points are within tol from ROI. Returns ------- 1D array of boolean dtype, shape (len(streamlines), ) This contains `True` for indices corresponding to each streamline that passes within a tolerance distance from the target ROI, `False` otherwise. """ if affine is None: affine = np.eye(4) dtc = dist_to_corner(affine) if tol is None: tol = dtc elif tol < dtc: w_s = "Tolerance input provided would create gaps in your" w_s += " inclusion ROI. Setting to: %s" % dtc warn(w_s) tol = dtc roi_coords = np.array(np.where(region_of_interest)).T x_roi_coords = apply_affine(affine, roi_coords) # If it's already a list, we can save time by preallocating the output if isinstance(streamlines, list): out = np.zeros(len(streamlines), dtype=bool) for ii, sl in enumerate(streamlines): out[ii] = streamline_near_roi(sl, x_roi_coords, tol=tol, mode=mode) return out # If it's a generator, we'll need to generate the output into a list else: out = [] for sl in streamlines: out.append(streamline_near_roi(sl, x_roi_coords, tol=tol, mode=mode)) return(np.array(out, dtype=bool)) def reorder_voxels_affine(input_ornt, output_ornt, shape, voxel_size): """Calculates a linear transformation equivalent to changing voxel order. Calculates a linear tranformation A such that [a, b, c, 1] = A[x, y, z, 1]. where [x, y, z] is a point in the coordinate system defined by input_ornt and [a, b, c] is the same point in the coordinate system defined by output_ornt. Parameters ---------- input_ornt : array (n, 2) A description of the orientation of a point in n-space. See ``nibabel.orientation`` or ``dipy.io.bvectxt`` for more information. output_ornt : array (n, 2) A description of the orientation of a point in n-space. shape : tuple of int Shape of the image in the input orientation. ``map = ornt_mapping(input_ornt, output_ornt)`` voxel_size : int Voxel size of the image in the input orientation. Returns ------- A : array (n+1, n+1) Affine matrix of the transformation between input_ornt and output_ornt. See Also -------- nibabel.orientation dipy.io.bvectxt.orientation_to_string dipy.io.bvectxt.orientation_from_string """ map = ornt_mapping(input_ornt, output_ornt) if input_ornt.shape != output_ornt.shape: raise ValueError("input_ornt and output_ornt must have the same shape") affine = eye(len(input_ornt)+1) affine[:3] = affine[map[:, 0]] corner = asarray(voxel_size) * shape affine[:3, 3] = (map[:, 1] < 0) * corner[map[:, 0]] # multiply the rows of affine to get right sign affine[:3, :3] *= map[:, 1:] return affine def affine_from_fsl_mat_file(mat_affine, input_voxsz, output_voxsz): """ Converts an affine matrix from flirt (FSLdot) and a given voxel size for input and output images and returns an adjusted affine matrix for trackvis. Parameters ---------- mat_affine : array of shape (4, 4) An FSL flirt affine. input_voxsz : array of shape (3,) The input image voxel dimensions. output_voxsz : array of shape (3,) Returns ------- affine : array of shape (4, 4) A trackvis-compatible affine. """ # TODO the affine returned by this function uses a different reference than # the nifti-style index coordinates dipy has adopted as a convention. We # should either fix this function in a backward compatible way or replace # and deprecate it. input_voxsz = asarray(input_voxsz) output_voxsz = asarray(output_voxsz) shift = eye(4) shift[:3, 3] = -input_voxsz / 2 affine = dot(mat_affine, shift) affine[:3, 3] += output_voxsz / 2 return affine def affine_for_trackvis(voxel_size, voxel_order=None, dim=None, ref_img_voxel_order=None): """Returns an affine which maps points for voxel indices to trackvis space. Parameters ---------- voxel_size : array (3,) The sizes of the voxels in the reference image. Returns ------- affine : array (4, 4) Mapping from the voxel indices of the reference image to trackvis space. """ if (voxel_order is not None or dim is not None or ref_img_voxel_order is not None): raise NotImplemented # Create affine voxel_size = np.asarray(voxel_size) affine = np.eye(4) affine[[0, 1, 2], [0, 1, 2]] = voxel_size affine[:3, 3] = voxel_size / 2. return affine def length(streamlines, affine=None): """ Calculate the lengths of many streamlines in a bundle. Parameters ---------- streamlines : list Each item in the list is an array with 3D coordinates of a streamline. affine : 4 x 4 array An affine transformation to move the fibers by, before computing their lengths. Returns ------- Iterator object which then computes the length of each streamline in the bundle, upon iteration. """ if affine is not None: streamlines = move_streamlines(streamlines, affine) return map(metrics.length, streamlines) def unique_rows(in_array, dtype='f4'): """ This (quickly) finds the unique rows in an array Parameters ---------- in_array: ndarray The array for which the unique rows should be found dtype: str, optional This determines the intermediate representation used for the values. Should at least preserve the values of the input array. Returns ------- u_return: ndarray Array with the unique rows of the original array. """ # Sort input array order = np.lexsort(in_array.T) # Apply sort and compare neighbors x = in_array[order] diff_x = np.ones(len(x), dtype=bool) diff_x[1:] = (x[1:] != x[:-1]).any(-1) # Reverse sort and return unique rows un_order = order.argsort() diff_in_array = diff_x[un_order] return in_array[diff_in_array] @_with_initialize def move_streamlines(streamlines, output_space, input_space=None): """Applies a linear transformation, given by affine, to streamlines. Parameters ---------- streamlines : sequence A set of streamlines to be transformed. output_space : array (4, 4) An affine matrix describing the target space to which the streamlines will be transformed. input_space : array (4, 4), optional An affine matrix describing the current space of the streamlines, if no ``input_space`` is specified, it's assumed the streamlines are in the reference space. The reference space is the same as the space associated with the affine matrix ``np.eye(4)``. Returns ------- streamlines : generator A sequence of transformed streamlines. """ if input_space is None: affine = output_space else: inv = np.linalg.inv(input_space) affine = np.dot(output_space, inv) lin_T = affine[:3, :3].T.copy() offset = affine[:3, 3].copy() yield # End of initialization for sl in streamlines: yield np.dot(sl, lin_T) + offset def reduce_rois(rois, include): """Reduce multiple ROIs to one inclusion and one exclusion ROI Parameters ---------- rois : list or ndarray A list of 3D arrays, each with shape (x, y, z) corresponding to the shape of the brain volume, or a 4D array with shape (n_rois, x, y, z). Non-zeros in each volume are considered to be within the region. include : array or list A list or 1D array of boolean marking inclusion or exclusion criteria. Returns ------- include_roi : boolean 3D array An array marking the inclusion mask. exclude_roi : boolean 3D array An array marking the exclusion mask Note ---- The include_roi and exclude_roi can be used to perfom the operation: "(A or B or ...) and not (X or Y or ...)", where A, B are inclusion regions and X, Y are exclusion regions. """ include_roi = np.zeros(rois[0].shape, dtype=bool) exclude_roi = np.zeros(rois[0].shape, dtype=bool) for i in range(len(rois)): if include[i]: include_roi |= rois[i] else: exclude_roi |= rois[i] return include_roi, exclude_roi dipy-0.10.1/dipy/tracking/vox2track.pyx000066400000000000000000000251451263041327500200040ustar00rootroot00000000000000# A type of -*- python -*- file """This module contains the parts of dipy.tracking.utils that need to be implemented in cython. """ import cython import numpy as np cimport numpy as cnp from ._utils import _mapping_to_voxel, _to_voxel_coordinates from ..utils.six.moves import xrange cdef extern from "dpy_math.h": double floor(double x) @cython.boundscheck(False) @cython.wraparound(False) @cython.profile(False) def _voxel2streamline(sl, cnp.ndarray[cnp.npy_intp, ndim=2] unique_idx): """ Maps voxels to streamlines and streamlines to voxels, for setting up the LiFE equations matrix Parameters ---------- sl : list A collection of streamlines, each n by 3, with n being the number of nodes in the fiber. unique_idx : array. The unique indices in the streamlines Returns ------- v2f, v2fn : tuple of dicts The first dict in the tuple answers the question: Given a voxel (from the unique indices in this model), which fibers pass through it? The second answers the question: Given a streamline, for each voxel that this streamline passes through, which nodes of that streamline are in that voxel? """ # Define local counters: cdef int s_idx, node_idx, voxel_id, ii cdef dict vox_dict = {} for ii in range(len(unique_idx)): vox = unique_idx[ii] vox_dict[vox[0], vox[1], vox[2]] = ii # Outputs are these dicts: cdef dict v2f = {} cdef dict v2fn = {} # In each fiber: for s_idx in range(len(sl)): sl_as_idx = np.array(sl[s_idx]).astype(int) v2fn[s_idx] = {} # In each voxel present in there: for node_idx in range(len(sl_as_idx)): node = sl_as_idx[node_idx] # What serial number is this voxel in the unique voxel indices: voxel_id = vox_dict[node[0], node[1], node[2]] # Add that combination to the dict: if voxel_id in v2f: if s_idx not in v2f[voxel_id]: v2f[voxel_id].append(s_idx) else: v2f[voxel_id] = [s_idx] # All the nodes going through this voxel get its number: if voxel_id in v2fn[s_idx]: v2fn[s_idx][voxel_id].append(node_idx) else: v2fn[s_idx][voxel_id] = [node_idx] return v2f ,v2fn def streamline_mapping(streamlines, voxel_size=None, affine=None, mapping_as_streamlines=False): """Creates a mapping from voxel indices to streamlines. Returns a dictionary where each key is a 3d voxel index and the associated value is a list of the streamlines that pass through that voxel. Parameters ---------- streamlines : sequence A sequence of streamlines. voxel_size : array_like (3,), optional The size of the voxels in the image volume. This is ignored if affine is set. affine : array_like (4, 4), optional The mapping from voxel coordinates to streamline coordinates. If neither `affine` or `voxel_size` is set, the streamline values are assumed to be in voxel coordinates. IE ``[0, 0, 0]`` is the center of the first voxel and the voxel size is ``[1, 1, 1]``. mapping_as_streamlines : bool, optional, False by default If True voxel indices map to lists of streamline objects. Otherwise voxel indices map to lists of integers. Returns ------- mapping : defaultdict(list) A mapping from voxel indices to the streamlines that pass through that voxel. Examples -------- >>> streamlines = [np.array([[0., 0., 0.], ... [1., 1., 1.], ... [2., 3., 4.]]), ... np.array([[0., 0., 0.], ... [1., 2., 3.]])] >>> mapping = streamline_mapping(streamlines, (1, 1, 1)) >>> mapping[0, 0, 0] [0, 1] >>> mapping[1, 1, 1] [0] >>> mapping[1, 2, 3] [1] >>> mapping.get((3, 2, 1), 'no streamlines') 'no streamlines' >>> mapping = streamline_mapping(streamlines, (1, 1, 1), ... mapping_as_streamlines=True) >>> mapping[1, 2, 3][0] is streamlines[1] True """ cdef: cnp.ndarray[cnp.int_t, ndim=2, mode='strided'] voxel_indices lin, offset = _mapping_to_voxel(affine, voxel_size) if mapping_as_streamlines: streamlines = list(streamlines) mapping = {} for i, sl in enumerate(streamlines): voxel_indices = _to_voxel_coordinates(sl, lin, offset) # Get the unique voxels every streamline passes though uniq_points = set() for j in range(voxel_indices.shape[0]): point = (voxel_indices[j, 0], voxel_indices[j, 1], voxel_indices[j, 2]) uniq_points.add(point) # Add the index of this streamline for each uniq voxel for point in uniq_points: if point in mapping: mapping[point].append(i) else: mapping[point] = [i] # If mapping_as_streamlines replace ids with streamlines if mapping_as_streamlines: for key in mapping: mapping[key] = [streamlines[i] for i in mapping[key]] return mapping @cython.boundscheck(False) @cython.wraparound(False) @cython.profile(False) def track_counts(tracks, vol_dims, vox_sizes=(1,1,1), return_elements=True): ''' Counts of points in `tracks` that pass through voxels in volume We find whether a point passed through a track by rounding the mm point values to voxels. For a track that passes through a voxel more than once, we only record counts and elements for the first point in the line that enters the voxel. Parameters ---------- tracks : sequence sequence of T tracks. One track is an ndarray of shape (N, 3), where N is the number of points in that track, and ``tracks[t][n]`` is the n-th point in the t-th track. Points are of form x, y, z in *voxel mm* coordinates. That is, if ``i, j, k`` is the possibly non-integer voxel coordinate of the track point, and `vox_sizes` are 3 floats giving voxel sizes of dimensions 0, 1, 2 respectively, then the voxel mm coordinates ``x, y, z`` are simply ``i * vox_sizes[0], j * vox_sizes[1], k * vox_sizes[2]``. This convention derives from trackviz. To pass in tracks as voxel coordinates, just pass ``vox_sizes=(1, 1, 1)`` (see below). vol_dims : sequence length 3 volume dimensions in voxels, x, y, z. vox_sizes : optional, sequence length 3 voxel sizes in mm. Default is (1,1,1) return_elements : {True, False}, optional If True, also return object array with one list per voxel giving track indices and point indices passing through the voxel (see below) Returns ------- tcs : ndarray shape `vol_dim` An array where entry ``tcs[x, y, z]`` is the number of tracks that passed through voxel at voxel coordinate x, y, z tes : ndarray dtype np.object, shape `vol_dim` If `return_elements` is True, we also return an object array with one object per voxel. The objects at each voxel are a list of integers, where the integers are the indices of the track that passed through the voxel. Examples -------- Imagine you have a volume (voxel) space of dimension ``(10,20,30)``. Imagine you had voxel coordinate tracks in ``vs``. To just fill an array with the counts of how many tracks pass through each voxel: >>> vox_track0 = np.array([[0, 0, 0], [1.1, 2.2, 3.3], [2.2, 4.4, 6.6]]) >>> vox_track1 = np.array([[0, 0, 0], [0, 0, 1], [0, 0, 2]]) >>> vs = (vox_track0, vox_track1) >>> vox_dim = (10, 20, 30) # original voxel array size >>> tcs = track_counts(vs, vox_dim, (1, 1, 1), False) >>> tcs.shape (10, 20, 30) >>> tcs[0, 0, 0:4] array([2, 1, 1, 0]) >>> tcs[1, 2, 3], tcs[2, 4, 7] (1, 1) You can also use the routine to count into larger-than-voxel boxes. To do this, increase the voxel size and decrease the ``vox_dim`` accordingly: >>> tcs=track_counts(vs, (10/2., 20/2., 30/2.), (2,2,2), False) >>> tcs.shape (5, 10, 15) >>> tcs[1,1,2], tcs[1,2,3] (1, 1) ''' vol_dims = np.asarray(vol_dims).astype(np.int) vox_sizes = np.asarray(vox_sizes).astype(np.double) n_voxels = np.prod(vol_dims) # output track counts array, flattened cdef cnp.ndarray[cnp.int_t, ndim=1] tcs = \ np.zeros((n_voxels,), dtype=np.int) # pointer to output track indices cdef cnp.npy_intp i if return_elements: el_inds = {} # cython numpy pointer to individual track array cdef cnp.ndarray[cnp.float_t, ndim=2] t # cython numpy pointer to point in track array cdef cnp.ndarray[cnp.float_t, ndim=1] in_pt # processed point cdef int out_pt[3] # various temporary loop and working variables cdef int tno, pno, cno cdef cnp.npy_intp el_no, v # fill native C arrays from inputs cdef int vd[3] cdef double vxs[3] for cno in range(3): vd[cno] = vol_dims[cno] vxs[cno] = vox_sizes[cno] # return_elements to C native cdef int ret_elf = return_elements # x slice size (C array ordering) cdef cnp.npy_intp yz = vd[1] * vd[2] for tno in range(len(tracks)): t = tracks[tno].astype(np.float) # set to find unique voxel points in track in_inds = set() # the loop below is time-critical for pno in range(t.shape[0]): in_pt = t[pno] # Round to voxel coordinates, and set coordinates outside # volume to volume edges for cno in range(3): v = floor(in_pt[cno] / vxs[cno] + 0.5) if v < 0: v = 0 elif v >= vd[cno]: v = vd[cno]-1 # last index for this dimension out_pt[cno] = v # calculate element number in flattened tcs array el_no = out_pt[0] * yz + out_pt[1] * vd[2] + out_pt[2] # discard duplicates if el_no in in_inds: continue in_inds.add(el_no) # set elements into object array if ret_elf: key = (out_pt[0], out_pt[1], out_pt[2]) val = tno if tcs[el_no]: el_inds[key].append(val) else: el_inds[key] = [val] # set value into counts tcs[el_no] += 1 if ret_elf: return tcs.reshape(vol_dims), el_inds return tcs.reshape(vol_dims) dipy-0.10.1/dipy/utils/000077500000000000000000000000001263041327500146465ustar00rootroot00000000000000dipy-0.10.1/dipy/utils/__init__.py000066400000000000000000000000421263041327500167530ustar00rootroot00000000000000# code support utilities for dipy dipy-0.10.1/dipy/utils/_importlib.py000066400000000000000000000024571263041327500173700ustar00rootroot00000000000000"""Backport of importlib.import_module from 3.x.""" # While not critical (and in no way guaranteed!), it would be nice to keep this # code compatible with Python 2.3. import sys def _resolve_name(name, package, level): """Return the absolute name of the module to be imported.""" if not hasattr(package, 'rindex'): raise ValueError("'package' not set to a string") dot = len(package) for x in xrange(level, 1, -1): try: dot = package.rindex('.', 0, dot) except ValueError: raise ValueError("attempted relative import beyond top-level " "package") return "%s.%s" % (package[:dot], name) def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ if name.startswith('.'): if not package: raise TypeError("relative imports require the 'package' argument") level = 0 for character in name: if character != '.': break level += 1 name = _resolve_name(name[level:], package, level) __import__(name) return sys.modules[name] dipy-0.10.1/dipy/utils/arrfuncs.py000066400000000000000000000073511263041327500170510ustar00rootroot00000000000000""" Utilities to manipulate numpy arrays """ import sys from distutils.version import LooseVersion import numpy as np from nibabel.volumeutils import endian_codes, native_code, swapped_code NUMPY_LESS_1_8 = LooseVersion(np.version.short_version) < '1.8' def as_native_array(arr): """ Return `arr` as native byteordered array If arr is already native byte ordered, return unchanged. If it is opposite endian, then make a native byte ordered copy and return that Parameters ---------- arr : ndarray Returns ------- native_arr : ndarray If `arr` was native order, this is just `arr`. Otherwise it's a new array such that ``np.all(native_arr == arr)``, with native byte ordering. """ if endian_codes[arr.dtype.byteorder] == native_code: return arr return arr.byteswap().newbyteorder() def pinv(a, rcond=1e-15): """Vectorized version of `numpy.linalg.pinv` If numpy version is less than 1.8, it falls back to iterating over `np.linalg.pinv` since there isn't a vectorized version of `np.linalg.svd` available. Parameters ---------- a : array_like (..., M, N) Matrix to be pseudo-inverted. rcond : float Cutoff for small singular values. Returns ------- B : ndarray (..., N, M) The pseudo-inverse of `a`. Raises ------ LinAlgError If the SVD computation does not converge. See Also -------- np.linalg.pinv """ a = np.asarray(a) if NUMPY_LESS_1_8: if a.ndim <= 2: # properly handle the case of a single 2D array return np.linalg.pinv(a, rcond) shape = a.shape[:-2] a = a.reshape(-1, a.shape[-2], a.shape[-1]) result = np.empty((a.shape[0], a.shape[2], a.shape[1])) for i, item in enumerate(a): result[i] = np.linalg.pinv(item, rcond) return result.reshape(shape + (a.shape[2], a.shape[1])) else: swap = np.arange(a.ndim) swap[[-2, -1]] = swap[[-1, -2]] u, s, v = np.linalg.svd(a, full_matrices=False) cutoff = np.maximum.reduce(s, axis=-1, keepdims=True) * rcond mask = s > cutoff s[mask] = 1. / s[mask] s[~mask] = 0 return np.einsum('...ij,...jk', np.transpose(v, swap) * s[..., None, :], np.transpose(u, swap)) def eigh(a, UPLO='L'): """Iterate over `np.linalg.eigh` if it doesn't support vectorized operation Parameters ---------- a : array_like (..., M, M) Hermitian/Symmetric matrices whose eigenvalues and eigenvectors are to be computed. UPLO : {'L', 'U'}, optional Specifies whether the calculation is done with the lower triangular part of `a` ('L', default) or the upper triangular part ('U'). Returns ------- w : ndarray (..., M) The eigenvalues in ascending order, each repeated according to its multiplicity. v : ndarray (..., M, M) The column ``v[..., :, i]`` is the normalized eigenvector corresponding to the eigenvalue ``w[..., i]``. Raises ------ LinAlgError If the eigenvalue computation does not converge. See Also -------- np.linalg.eigh """ a = np.asarray(a) if a.ndim > 2 and NUMPY_LESS_1_8: shape = a.shape[:-2] a = a.reshape(-1, a.shape[-2], a.shape[-1]) evals = np.empty((a.shape[0], a.shape[1])) evecs = np.empty((a.shape[0], a.shape[1], a.shape[1])) for i, item in enumerate(a): evals[i], evecs[i] = np.linalg.eigh(item, UPLO) return (evals.reshape(shape + (a.shape[1], )), evecs.reshape(shape + (a.shape[1], a.shape[1]))) return np.linalg.eigh(a, UPLO) dipy-0.10.1/dipy/utils/optpkg.py000066400000000000000000000052151263041327500165270ustar00rootroot00000000000000""" Routines to support optional packages """ try: import importlib except ImportError: import dipy.utils._importlib as importlib try: import nose except ImportError: have_nose = False else: have_nose = True from .tripwire import TripWire if have_nose: class OptionalImportError(ImportError, nose.SkipTest): pass else: class OptionalImportError(ImportError): pass def optional_package(name, trip_msg=None): """ Return package-like thing and module setup for package `name` Parameters ---------- name : str package name trip_msg : None or str message to give when someone tries to use the return package, but we could not import it, and have returned a TripWire object instead. Default message if None. Returns ------- pkg_like : module or ``TripWire`` instance If we can import the package, return it. Otherwise return an object raising an error when accessed have_pkg : bool True if import for package was successful, false otherwise module_setup : function callable usually set as ``setup_module`` in calling namespace, to allow skipping tests. Example ------- Typical use would be something like this at the top of a module using an optional package: >>> from dipy.utils.optpkg import optional_package >>> pkg, have_pkg, setup_module = optional_package('not_a_package') Of course in this case the package doesn't exist, and so, in the module: >>> have_pkg False and >>> pkg.some_function() #doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... TripWireError: We need package not_a_package for these functions, but ``import not_a_package`` raised an ImportError If the module does exist - we get the module >>> pkg, _, _ = optional_package('os') >>> hasattr(pkg, 'path') True Or a submodule if that's what we asked for >>> subpkg, _, _ = optional_package('os.path') >>> hasattr(subpkg, 'dirname') True """ try: pkg = importlib.import_module(name) except ImportError: pass else: # import worked # top level module return pkg, True, lambda : None if trip_msg is None: trip_msg = ('We need package %s for these functions, but ' '``import %s`` raised an ImportError' % (name, name)) pkg = TripWire(trip_msg) def setup_module(): if have_nose: raise nose.plugins.skip.SkipTest('No %s for these tests' % name) return pkg, False, setup_module dipy-0.10.1/dipy/utils/six.py000066400000000000000000000312471263041327500160320ustar00rootroot00000000000000"""Utilities for writing code that runs on Python 2 and 3""" # Copyright (c) 2010-2013 Benjamin Peterson # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import operator import sys import types __author__ = "Benjamin Peterson " __version__ = "1.3.0" # Useful for very coarse version differentiation. PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3 if PY3: string_types = str, integer_types = int, class_types = type, text_type = str binary_type = bytes MAXSIZE = sys.maxsize else: string_types = basestring, integer_types = (int, long) class_types = (type, types.ClassType) text_type = unicode binary_type = str if sys.platform.startswith("java"): # Jython always uses 32 bits. MAXSIZE = int((1 << 31) - 1) else: # It's possible to have sizeof(long) != sizeof(Py_ssize_t). class X(object): def __len__(self): return 1 << 31 try: len(X()) except OverflowError: # 32-bit MAXSIZE = int((1 << 31) - 1) else: # 64-bit MAXSIZE = int((1 << 63) - 1) del X def _add_doc(func, doc): """Add documentation to a function.""" func.__doc__ = doc def _import_module(name): """Import module, returning the module after the last dot.""" __import__(name) return sys.modules[name] class _LazyDescr(object): def __init__(self, name): self.name = name def __get__(self, obj, tp): result = self._resolve() setattr(obj, self.name, result) # This is a bit ugly, but it avoids running this again. delattr(tp, self.name) return result class MovedModule(_LazyDescr): def __init__(self, name, old, new=None): super(MovedModule, self).__init__(name) if PY3: if new is None: new = name self.mod = new else: self.mod = old def _resolve(self): return _import_module(self.mod) class MovedAttribute(_LazyDescr): def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): super(MovedAttribute, self).__init__(name) if PY3: if new_mod is None: new_mod = name self.mod = new_mod if new_attr is None: if old_attr is None: new_attr = name else: new_attr = old_attr self.attr = new_attr else: self.mod = old_mod if old_attr is None: old_attr = name self.attr = old_attr def _resolve(self): module = _import_module(self.mod) return getattr(module, self.attr) class _MovedItems(types.ModuleType): """Lazy loading of moved objects""" _moved_attributes = [ MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), MovedAttribute("map", "itertools", "builtins", "imap", "map"), MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), MovedAttribute("reload_module", "__builtin__", "imp", "reload"), MovedAttribute("reduce", "__builtin__", "functools"), MovedAttribute("StringIO", "StringIO", "io"), MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), MovedModule("builtins", "__builtin__"), MovedModule("configparser", "ConfigParser"), MovedModule("copyreg", "copy_reg"), MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), MovedModule("http_cookies", "Cookie", "http.cookies"), MovedModule("html_entities", "htmlentitydefs", "html.entities"), MovedModule("html_parser", "HTMLParser", "html.parser"), MovedModule("http_client", "httplib", "http.client"), MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), MovedModule("cPickle", "cPickle", "pickle"), MovedModule("queue", "Queue"), MovedModule("reprlib", "repr"), MovedModule("socketserver", "SocketServer"), MovedModule("tkinter", "Tkinter"), MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), MovedModule("tkinter_tix", "Tix", "tkinter.tix"), MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), MovedModule("tkinter_colorchooser", "tkColorChooser", "tkinter.colorchooser"), MovedModule("tkinter_commondialog", "tkCommonDialog", "tkinter.commondialog"), MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), MovedModule("tkinter_font", "tkFont", "tkinter.font"), MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", "tkinter.simpledialog"), MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), MovedModule("winreg", "_winreg"), ] for attr in _moved_attributes: setattr(_MovedItems, attr.name, attr) del attr moves = sys.modules[__name__ + ".moves"] = _MovedItems("moves") def add_move(move): """Add an item to six.moves.""" setattr(_MovedItems, move.name, move) def remove_move(name): """Remove item from six.moves.""" try: delattr(_MovedItems, name) except AttributeError: try: del moves.__dict__[name] except KeyError: raise AttributeError("no such move, %r" % (name,)) if PY3: _meth_func = "__func__" _meth_self = "__self__" _func_closure = "__closure__" _func_code = "__code__" _func_defaults = "__defaults__" _func_globals = "__globals__" _iterkeys = "keys" _itervalues = "values" _iteritems = "items" _iterlists = "lists" else: _meth_func = "im_func" _meth_self = "im_self" _func_closure = "func_closure" _func_code = "func_code" _func_defaults = "func_defaults" _func_globals = "func_globals" _iterkeys = "iterkeys" _itervalues = "itervalues" _iteritems = "iteritems" _iterlists = "iterlists" try: advance_iterator = next except NameError: def advance_iterator(it): return it.next() next = advance_iterator try: callable = callable except NameError: def callable(obj): return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) if PY3: def get_unbound_function(unbound): return unbound create_bound_method = types.MethodType Iterator = object else: def get_unbound_function(unbound): return unbound.im_func def create_bound_method(func, obj): return types.MethodType(func, obj, obj.__class__) class Iterator(object): def next(self): return type(self).__next__(self) callable = callable _add_doc(get_unbound_function, """Get the function out of a possibly unbound function""") get_method_function = operator.attrgetter(_meth_func) get_method_self = operator.attrgetter(_meth_self) get_function_closure = operator.attrgetter(_func_closure) get_function_code = operator.attrgetter(_func_code) get_function_defaults = operator.attrgetter(_func_defaults) get_function_globals = operator.attrgetter(_func_globals) def iterkeys(d, **kw): """Return an iterator over the keys of a dictionary.""" return iter(getattr(d, _iterkeys)(**kw)) def itervalues(d, **kw): """Return an iterator over the values of a dictionary.""" return iter(getattr(d, _itervalues)(**kw)) def iteritems(d, **kw): """Return an iterator over the (key, value) pairs of a dictionary.""" return iter(getattr(d, _iteritems)(**kw)) def iterlists(d, **kw): """Return an iterator over the (key, [values]) pairs of a dictionary.""" return iter(getattr(d, _iterlists)(**kw)) if PY3: def b(s): return s.encode("latin-1") def u(s): return s unichr = chr if sys.version_info[1] <= 1: def int2byte(i): return bytes((i,)) else: # This is about 2x faster than the implementation above on 3.2+ int2byte = operator.methodcaller("to_bytes", 1, "big") byte2int = operator.itemgetter(0) indexbytes = operator.getitem iterbytes = iter import io StringIO = io.StringIO BytesIO = io.BytesIO else: def b(s): return s def u(s): return unicode(s, "unicode_escape") unichr = unichr int2byte = chr def byte2int(bs): return ord(bs[0]) def indexbytes(buf, i): return ord(buf[i]) def iterbytes(buf): return (ord(byte) for byte in buf) import StringIO StringIO = BytesIO = StringIO.StringIO _add_doc(b, """Byte literal""") _add_doc(u, """Text literal""") if PY3: import builtins exec_ = getattr(builtins, "exec") def reraise(tp, value, tb=None): if value.__traceback__ is not tb: raise value.with_traceback(tb) raise value print_ = getattr(builtins, "print") del builtins else: def exec_(_code_, _globs_=None, _locs_=None): """Execute code in a namespace.""" if _globs_ is None: frame = sys._getframe(1) _globs_ = frame.f_globals if _locs_ is None: _locs_ = frame.f_locals del frame elif _locs_ is None: _locs_ = _globs_ exec("""exec _code_ in _globs_, _locs_""") exec_("""def reraise(tp, value, tb=None): raise tp, value, tb """) def print_(*args, **kwargs): """The new-style print function.""" fp = kwargs.pop("file", sys.stdout) if fp is None: return def write(data): if not isinstance(data, basestring): data = str(data) fp.write(data) want_unicode = False sep = kwargs.pop("sep", None) if sep is not None: if isinstance(sep, unicode): want_unicode = True elif not isinstance(sep, str): raise TypeError("sep must be None or a string") end = kwargs.pop("end", None) if end is not None: if isinstance(end, unicode): want_unicode = True elif not isinstance(end, str): raise TypeError("end must be None or a string") if kwargs: raise TypeError("invalid keyword arguments to print()") if not want_unicode: for arg in args: if isinstance(arg, unicode): want_unicode = True break if want_unicode: newline = unicode("\n") space = unicode(" ") else: newline = "\n" space = " " if sep is None: sep = space if end is None: end = newline for i, arg in enumerate(args): if i: write(sep) write(arg) write(end) _add_doc(reraise, """Reraise an exception.""") def with_metaclass(meta, *bases): """Create a base class with a metaclass.""" return meta("NewBase", bases, {}) dipy-0.10.1/dipy/utils/tests/000077500000000000000000000000001263041327500160105ustar00rootroot00000000000000dipy-0.10.1/dipy/utils/tests/__init__.py000066400000000000000000000000431263041327500201160ustar00rootroot00000000000000# Tests for utilities - as package dipy-0.10.1/dipy/utils/tests/test_arrfuncs.py000066400000000000000000000033311263041327500212440ustar00rootroot00000000000000""" Testing array utilities """ import sys import numpy as np from ..arrfuncs import as_native_array, pinv, eigh from numpy.testing import (assert_array_almost_equal, assert_array_equal) from nose.tools import assert_true, assert_false, assert_equal, assert_raises NATIVE_ORDER = '<' if sys.byteorder == 'little' else '>' SWAPPED_ORDER = '>' if sys.byteorder == 'little' else '<' def test_as_native(): arr = np.arange(5) # native assert_equal(arr.dtype.byteorder, '=') narr = as_native_array(arr) assert_true(arr is narr) sdt = arr.dtype.newbyteorder('s') barr = arr.astype(sdt) assert_equal(barr.dtype.byteorder, SWAPPED_ORDER) narr = as_native_array(barr) assert_false(barr is narr) assert_array_equal(barr, narr) assert_equal(narr.dtype.byteorder, NATIVE_ORDER) def test_pinv(): arr = np.random.randn(4, 4, 4, 3, 7) _pinv = pinv(arr) for i in range(4): for j in range(4): for k in range(4): assert_array_almost_equal(_pinv[i, j, k], np.linalg.pinv(arr[i, j, k])) def test_eigh(): for i in range(10): arr = np.random.randn(7, 7) evals1, evecs1 = eigh(arr) evals2, evecs2 = np.linalg.eigh(arr) assert_array_almost_equal(evals1, evals2) assert_array_almost_equal(evecs1, evecs2) arr = np.random.randn(4, 4, 4, 7, 7) evals, evecs = eigh(arr) for i in range(4): for j in range(4): for k in range(4): evals_vox, evecs_vox = np.linalg.eigh(arr[i, j, k]) assert_array_almost_equal(evals[i, j, k], evals_vox) assert_array_almost_equal(evecs[i, j, k], evecs_vox) dipy-0.10.1/dipy/utils/tests/test_tripwire.py000066400000000000000000000015411263041327500212670ustar00rootroot00000000000000""" Testing tripwire module. """ from ..tripwire import TripWire, is_tripwire, TripWireError from nose import SkipTest from nose.tools import (assert_true, assert_false, assert_raises, assert_equal, assert_not_equal) def test_is_tripwire(): assert_false(is_tripwire(object())) assert_true(is_tripwire(TripWire('some message'))) def test_tripwire(): # Test tripwire object silly_module_name = TripWire('We do not have silly_module_name') assert_raises(TripWireError, getattr, silly_module_name, 'do_silly_thing') # Check AttributeError can be checked too try: silly_module_name.__wrapped__ except TripWireError as err: assert_true(isinstance(err, AttributeError)) else: raise RuntimeError("No error raised, but expected") dipy-0.10.1/dipy/utils/tripwire.py000066400000000000000000000022701263041327500170660ustar00rootroot00000000000000""" Class to raise error for missing modules or other misfortunes """ class TripWireError(AttributeError): """ Exception if trying to use TripWire object """ def is_tripwire(obj): """ Returns True if `obj` appears to be a TripWire object Examples -------- >>> is_tripwire(object()) False >>> is_tripwire(TripWire('some message')) True """ try: obj.any_attribute except TripWireError: return True except: pass return False class TripWire(object): """ Class raising error if used Standard use is to proxy modules that we could not import Examples -------- >>> try: ... import silly_module_name ... except ImportError: ... silly_module_name = TripWire('We do not have silly_module_name') >>> silly_module_name.do_silly_thing('with silly string') #doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... TripWireError: We do not have silly_module_name """ def __init__(self, msg): self._msg = msg def __getattr__(self, attr_name): ''' Raise informative error accessing attributes ''' raise TripWireError(self._msg) dipy-0.10.1/dipy/viz/000077500000000000000000000000001263041327500143165ustar00rootroot00000000000000dipy-0.10.1/dipy/viz/__init__.py000066400000000000000000000006511263041327500164310ustar00rootroot00000000000000# Init file for visualization package from __future__ import division, print_function, absolute_import # We make the visualization requirements optional imports: try: import matplotlib has_mpl = True except ImportError: e_s = "You do not have Matplotlib installed. Some visualization functions" e_s += " might not work for you." print(e_s) has_mpl = False if has_mpl: from . import projections dipy-0.10.1/dipy/viz/actor.py000066400000000000000000000447271263041327500160160ustar00rootroot00000000000000# from __future__ import division, print_function, absolute_import import numpy as np from dipy.viz.colormap import colormap_lookup_table from dipy.viz.utils import lines_to_vtk_polydata from dipy.viz.utils import set_input # Conditional import machinery for vtk from dipy.utils.optpkg import optional_package # Allow import, but disable doctests if we don't have vtk vtk, have_vtk, setup_module = optional_package('vtk') colors, have_vtk_colors, _ = optional_package('vtk.util.colors') numpy_support, have_ns, _ = optional_package('vtk.util.numpy_support') if have_vtk: version = vtk.vtkVersion.GetVTKSourceVersion().split(' ')[-1] major_version = vtk.vtkVersion.GetVTKMajorVersion() def slicer(data, affine=None, value_range=None, opacity=1., lookup_colormap=None, interpolation='linear'): """ Cuts 3D scalar or rgb volumes into 2D images Parameters ---------- data : array, shape (X, Y, Z) or (X, Y, Z, 3) A grayscale or rgb 4D volume as a numpy array. affine : array, shape (4, 4) Grid to space (usually RAS 1mm) transformation matrix. Default is None. If None then the identity matrix is used. value_range : None or tuple (2,) If None then the values will be interpolated from (data.min(), data.max()) to (0, 255). Otherwise from (value_range[0], value_range[1]) to (0, 255). opacity : float Opacity of 0 means completely transparent and 1 completely visible. lookup_colormap : vtkLookupTable If None (default) then a grayscale map is created. interpolation : string If 'linear' (default) then linear interpolation is used on the final texture mapping. If 'nearest' then nearest neighbor interpolation is used on the final texture mapping. Returns ------- image_actor : ImageActor An object that is capable of displaying different parts of the volume as slices. The key method of this object is ``display_extent`` where one can input grid coordinates and display the slice in space (or grid) coordinates as calculated by the affine parameter. """ if data.ndim != 3: if data.ndim == 4: if data.shape[3] != 3: raise ValueError('Only RGB 3D arrays are currently supported.') else: nb_components = 3 else: raise ValueError('Only 3D arrays are currently supported.') else: nb_components = 1 if value_range is None: vol = np.interp(data, xp=[data.min(), data.max()], fp=[0, 255]) else: vol = np.interp(data, xp=[value_range[0], value_range[1]], fp=[0, 255]) vol = vol.astype('uint8') im = vtk.vtkImageData() if major_version <= 5: im.SetScalarTypeToUnsignedChar() I, J, K = vol.shape[:3] im.SetDimensions(I, J, K) voxsz = (1., 1., 1.) # im.SetOrigin(0,0,0) im.SetSpacing(voxsz[2], voxsz[0], voxsz[1]) if major_version <= 5: im.AllocateScalars() im.SetNumberOfScalarComponents(nb_components) else: im.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, nb_components) # copy data # what I do below is the same as what is commented here but much faster # for index in ndindex(vol.shape): # i, j, k = index # im.SetScalarComponentFromFloat(i, j, k, 0, vol[i, j, k]) vol = np.swapaxes(vol, 0, 2) vol = np.ascontiguousarray(vol) if nb_components == 1: vol = vol.ravel() else: vol = np.reshape(vol, [np.prod(vol.shape[:3]), vol.shape[3]]) uchar_array = numpy_support.numpy_to_vtk(vol, deep=0) im.GetPointData().SetScalars(uchar_array) if affine is None: affine = np.eye(4) # Set the transform (identity if none given) transform = vtk.vtkTransform() transform_matrix = vtk.vtkMatrix4x4() transform_matrix.DeepCopy(( affine[0][0], affine[0][1], affine[0][2], affine[0][3], affine[1][0], affine[1][1], affine[1][2], affine[1][3], affine[2][0], affine[2][1], affine[2][2], affine[2][3], affine[3][0], affine[3][1], affine[3][2], affine[3][3])) transform.SetMatrix(transform_matrix) transform.Inverse() # Set the reslicing image_resliced = vtk.vtkImageReslice() set_input(image_resliced, im) image_resliced.SetResliceTransform(transform) image_resliced.AutoCropOutputOn() # Adding this will allow to support anisotropic voxels # and also gives the opportunity to slice per voxel coordinates RZS = affine[:3, :3] zooms = np.sqrt(np.sum(RZS * RZS, axis=0)) image_resliced.SetOutputSpacing(*zooms) image_resliced.SetInterpolationModeToLinear() image_resliced.Update() if nb_components == 1: if lookup_colormap is None: # Create a black/white lookup table. lut = colormap_lookup_table((0, 255), (0, 0), (0, 0), (0, 1)) else: lut = lookup_colormap x1, x2, y1, y2, z1, z2 = im.GetExtent() ex1, ex2, ey1, ey2, ez1, ez2 = image_resliced.GetOutput().GetExtent() class ImageActor(vtk.vtkImageActor): def input_connection(self, output): if vtk.VTK_MAJOR_VERSION <= 5: self.SetInput(output.GetOutput()) else: self.GetMapper().SetInputConnection(output.GetOutputPort()) self.output = output self.shape = (ex2 + 1, ey2 + 1, ez2 + 1) def display_extent(self, x1, x2, y1, y2, z1, z2): self.SetDisplayExtent(x1, x2, y1, y2, z1, z2) if vtk.VTK_MAJOR_VERSION > 5: self.Update() def display(self, x=None, y=None, z=None): if x is None and y is None and z is None: self.display_extent(ex1, ex2, ey1, ey2, ez2/2, ez2/2) if x is not None: self.display_extent(x, x, ey1, ey2, ez1, ez2) if y is not None: self.display_extent(ex1, ex2, y, y, ez1, ez2) if z is not None: self.display_extent(ex1, ex2, ey1, ey2, z, z) def opacity(self, value): if vtk.VTK_MAJOR_VERSION <= 5: self.SetOpacity(value) else: self.GetProperty().SetOpacity(value) def copy(self): im_actor = ImageActor() im_actor.input_connection(self.output) im_actor.SetDisplayExtent(*self.GetDisplayExtent()) im_actor.opacity(opacity) return im_actor image_actor = ImageActor() if nb_components == 1: plane_colors = vtk.vtkImageMapToColors() plane_colors.SetLookupTable(lut) plane_colors.SetInputConnection(image_resliced.GetOutputPort()) plane_colors.Update() image_actor.input_connection(plane_colors) else: image_actor.input_connection(image_resliced) image_actor.display() image_actor.opacity(opacity) if interpolation == 'nearest': image_actor.SetInterpolate(False) else: image_actor.SetInterpolate(True) if major_version >= 6: image_actor.GetMapper().BorderOn() return image_actor def streamtube(lines, colors=None, opacity=1, linewidth=0.1, tube_sides=9, lod=True, lod_points=10 ** 4, lod_points_size=3, spline_subdiv=None, lookup_colormap=None): """ Uses streamtubes to visualize polylines Parameters ---------- lines : list list of N curves represented as 2D ndarrays colors : array (N, 3), list of arrays, tuple (3,), array (K,), None If None then a standard orientation colormap is used for every line. If one tuple of color is used. Then all streamlines will have the same colour. If an array (N, 3) is given, where N is equal to the number of lines. Then every line is coloured with a different RGB color. If a list of RGB arrays is given then every point of every line takes a different color. If an array (K, ) is given, where K is the number of points of all lines then these are considered as the values to be used by the colormap. If an array (L, ) is given, where L is the number of streamlines then these are considered as the values to be used by the colormap per streamline. If an array (X, Y, Z) or (X, Y, Z, 3) is given then the values for the colormap are interpolated automatically using trilinear interpolation. opacity : float Default is 1. linewidth : float Default is 0.01. tube_sides : int Default is 9. lod : bool Use vtkLODActor(level of detail) rather than vtkActor. Default is True. Level of detail actors do not render the full geometry when the frame rate is low. lod_points : int Number of points to be used when LOD is in effect. Default is 10000. lod_points_size : int Size of points when lod is in effect. Default is 3. spline_subdiv : int Number of splines subdivision to smooth streamtubes. Default is None. lookup_colormap : vtkLookupTable Add a default lookup table to the colormap. Default is None which calls :func:`dipy.viz.actor.colormap_lookup_table`. Examples -------- >>> import numpy as np >>> from dipy.viz import actor, window >>> ren = window.Renderer() >>> lines = [np.random.rand(10, 3), np.random.rand(20, 3)] >>> colors = np.random.rand(2, 3) >>> c = actor.streamtube(lines, colors) >>> ren.add(c) >>> #window.show(ren) Notes ----- Streamtubes can be heavy on GPU when loading many streamlines and therefore, you may experience slow rendering time depending on system GPU. A solution to this problem is to reduce the number of points in each streamline. In Dipy we provide an algorithm that will reduce the number of points on the straighter parts of the streamline but keep more points on the curvier parts. This can be used in the following way:: from dipy.tracking.distances import approx_polygon_track lines = [approx_polygon_track(line, 0.2) for line in lines] Alternatively we suggest using the ``line`` actor which is much more efficient. See Also -------- :func:``dipy.viz.actor.line`` """ # Poly data with lines and colors poly_data, is_colormap = lines_to_vtk_polydata(lines, colors) next_input = poly_data # Set Normals poly_normals = set_input(vtk.vtkPolyDataNormals(), next_input) poly_normals.ComputeCellNormalsOn() poly_normals.ComputePointNormalsOn() poly_normals.ConsistencyOn() poly_normals.AutoOrientNormalsOn() poly_normals.Update() next_input = poly_normals.GetOutputPort() # Spline interpolation if (spline_subdiv is not None) and (spline_subdiv > 0): spline_filter = set_input(vtk.vtkSplineFilter(), next_input) spline_filter.SetSubdivideToSpecified() spline_filter.SetNumberOfSubdivisions(spline_subdiv) spline_filter.Update() next_input = spline_filter.GetOutputPort() # Add thickness to the resulting lines tube_filter = set_input(vtk.vtkTubeFilter(), next_input) tube_filter.SetNumberOfSides(tube_sides) tube_filter.SetRadius(linewidth) # TODO using the line above we will be able to visualize # streamtubes of varying radius # tube_filter.SetVaryRadiusToVaryRadiusByScalar() tube_filter.CappingOn() tube_filter.Update() next_input = tube_filter.GetOutputPort() # Poly mapper poly_mapper = set_input(vtk.vtkPolyDataMapper(), next_input) poly_mapper.ScalarVisibilityOn() poly_mapper.SetScalarModeToUsePointFieldData() poly_mapper.SelectColorArray("Colors") poly_mapper.GlobalImmediateModeRenderingOn() poly_mapper.Update() # Color Scale with a lookup table if is_colormap: if lookup_colormap is None: lookup_colormap = colormap_lookup_table() poly_mapper.SetLookupTable(lookup_colormap) poly_mapper.UseLookupTableScalarRangeOn() poly_mapper.Update() # Set Actor if lod: actor = vtk.vtkLODActor() actor.SetNumberOfCloudPoints(lod_points) actor.GetProperty().SetPointSize(lod_points_size) else: actor = vtk.vtkActor() actor.SetMapper(poly_mapper) actor.GetProperty().SetAmbient(0.1) actor.GetProperty().SetDiffuse(0.15) actor.GetProperty().SetSpecular(0.05) actor.GetProperty().SetSpecularPower(6) actor.GetProperty().SetInterpolationToPhong() actor.GetProperty().BackfaceCullingOn() actor.GetProperty().SetOpacity(opacity) return actor def line(lines, colors=None, opacity=1, linewidth=1, spline_subdiv=None, lod=True, lod_points=10 ** 4, lod_points_size=3, lookup_colormap=None): """ Create an actor for one or more lines. Parameters ------------ lines : list of arrays colors : array (N, 3), list of arrays, tuple (3,), array (K,), None If None then a standard orientation colormap is used for every line. If one tuple of color is used. Then all streamlines will have the same colour. If an array (N, 3) is given, where N is equal to the number of lines. Then every line is coloured with a different RGB color. If a list of RGB arrays is given then every point of every line takes a different color. If an array (K, ) is given, where K is the number of points of all lines then these are considered as the values to be used by the colormap. If an array (L, ) is given, where L is the number of streamlines then these are considered as the values to be used by the colormap per streamline. If an array (X, Y, Z) or (X, Y, Z, 3) is given then the values for the colormap are interpolated automatically using trilinear interpolation. opacity : float, optional Default is 1. linewidth : float, optional Line thickness. Default is 1. spline_subdiv : int, optional Number of splines subdivision to smooth streamtubes. Default is None which means no subdivision. lod : bool Use vtkLODActor(level of detail) rather than vtkActor. Default is True. Level of detail actors do not render the full geometry when the frame rate is low. lod_points : int Number of points to be used when LOD is in effect. Default is 10000. lod_points_size : int Size of points when lod is in effect. Default is 3. lookup_colormap : bool, optional Add a default lookup table to the colormap. Default is None which calls :func:`dipy.viz.actor.colormap_lookup_table`. Returns ---------- v : vtkActor or vtkLODActor object Line. Examples ---------- >>> from dipy.viz import actor, window >>> ren = window.Renderer() >>> lines = [np.random.rand(10, 3), np.random.rand(20, 3)] >>> colors = np.random.rand(2, 3) >>> c = actor.line(lines, colors) >>> ren.add(c) >>> #window.show(ren) """ # Poly data with lines and colors poly_data, is_colormap = lines_to_vtk_polydata(lines, colors) next_input = poly_data # use spline interpolation if (spline_subdiv is not None) and (spline_subdiv > 0): spline_filter = set_input(vtk.vtkSplineFilter(), next_input) spline_filter.SetSubdivideToSpecified() spline_filter.SetNumberOfSubdivisions(spline_subdiv) spline_filter.Update() next_input = spline_filter.GetOutputPort() poly_mapper = set_input(vtk.vtkPolyDataMapper(), next_input) poly_mapper.ScalarVisibilityOn() poly_mapper.SetScalarModeToUsePointFieldData() poly_mapper.SelectColorArray("Colors") poly_mapper.Update() # Color Scale with a lookup table if is_colormap: if lookup_colormap is None: lookup_colormap = colormap_lookup_table() poly_mapper.SetLookupTable(lookup_colormap) poly_mapper.UseLookupTableScalarRangeOn() poly_mapper.Update() # Set Actor if lod: actor = vtk.vtkLODActor() actor.SetNumberOfCloudPoints(lod_points) actor.GetProperty().SetPointSize(lod_points_size) else: actor = vtk.vtkActor() # actor = vtk.vtkActor() actor.SetMapper(poly_mapper) actor.GetProperty().SetLineWidth(linewidth) actor.GetProperty().SetOpacity(opacity) return actor def scalar_bar(lookup_table=None, title=" "): """ Default scalar bar actor for a given colormap (colorbar) Parameters ---------- lookup_table : vtkLookupTable or None If None then ``colormap_lookup_table`` is called with default options. title : str Returns ------- scalar_bar : vtkScalarBarActor See Also -------- :func:`dipy.viz.actor.colormap_lookup_table` """ lookup_table_copy = vtk.vtkLookupTable() if lookup_table is None: lookup_table = colormap_lookup_table() # Deepcopy the lookup_table because sometimes vtkPolyDataMapper deletes it lookup_table_copy.DeepCopy(lookup_table) scalar_bar = vtk.vtkScalarBarActor() scalar_bar.SetTitle(title) scalar_bar.SetLookupTable(lookup_table_copy) scalar_bar.SetNumberOfLabels(6) return scalar_bar def _arrow(pos=(0, 0, 0), color=(1, 0, 0), scale=(1, 1, 1), opacity=1): ''' Internal function for generating arrow actors. ''' arrow = vtk.vtkArrowSource() # arrow.SetTipLength(length) arrowm = vtk.vtkPolyDataMapper() if major_version <= 5: arrowm.SetInput(arrow.GetOutput()) else: arrowm.SetInputConnection(arrow.GetOutputPort()) arrowa = vtk.vtkActor() arrowa.SetMapper(arrowm) arrowa.GetProperty().SetColor(color) arrowa.GetProperty().SetOpacity(opacity) arrowa.SetScale(scale) return arrowa def axes(scale=(1, 1, 1), colorx=(1, 0, 0), colory=(0, 1, 0), colorz=(0, 0, 1), opacity=1): """ Create an actor with the coordinate's system axes where red = x, green = y, blue = z. Parameters ---------- scale : tuple (3,) Axes size e.g. (100, 100, 100). Default is (1, 1, 1). colorx : tuple (3,) x-axis color. Default red (1, 0, 0). colory : tuple (3,) y-axis color. Default green (0, 1, 0). colorz : tuple (3,) z-axis color. Default blue (0, 0, 1). Returns ------- vtkAssembly """ arrowx = _arrow(color=colorx, scale=scale, opacity=opacity) arrowy = _arrow(color=colory, scale=scale, opacity=opacity) arrowz = _arrow(color=colorz, scale=scale, opacity=opacity) arrowy.RotateZ(90) arrowz.RotateY(-90) ass = vtk.vtkAssembly() ass.AddPart(arrowx) ass.AddPart(arrowy) ass.AddPart(arrowz) return ass dipy-0.10.1/dipy/viz/colormap.py000066400000000000000000000141361263041327500165110ustar00rootroot00000000000000import numpy as np # Conditional import machinery for vtk from dipy.utils.optpkg import optional_package # Allow import, but disable doctests if we don't have vtk vtk, have_vtk, setup_module = optional_package('vtk') def colormap_lookup_table(scale_range=(0, 1), hue_range=(0.8, 0), saturation_range=(1, 1), value_range=(0.8, 0.8)): """ Lookup table for the colormap Parameters ---------- scale_range : tuple It can be anything e.g. (0, 1) or (0, 255). Usually it is the mininum and maximum value of your data. Default is (0, 1). hue_range : tuple of floats HSV values (min 0 and max 1). Default is (0.8, 0). saturation_range : tuple of floats HSV values (min 0 and max 1). Default is (1, 1). value_range : tuple of floats HSV value (min 0 and max 1). Default is (0.8, 0.8). Returns ------- lookup_table : vtkLookupTable """ lookup_table = vtk.vtkLookupTable() lookup_table.SetRange(scale_range) lookup_table.SetTableRange(scale_range) lookup_table.SetHueRange(hue_range) lookup_table.SetSaturationRange(saturation_range) lookup_table.SetValueRange(value_range) lookup_table.Build() return lookup_table def cc(na, nd): return (na * np.cos(nd * np.pi / 180.0)) def ss(na, nd): return na * np.sin(nd * np.pi / 180.0) def boys2rgb(v): """ boys 2 rgb cool colormap Maps a given field of undirected lines (line field) to rgb colors using Boy's Surface immersion of the real projective plane. Boy's Surface is one of the three possible surfaces obtained by gluing a Mobius strip to the edge of a disk. The other two are the crosscap and Roman surface, Steiner surfaces that are homeomorphic to the real projective plane (Pinkall 1986). The Boy's surface is the only 3D immersion of the projective plane without singularities. Visit http://www.cs.brown.edu/~cad/rp2coloring for further details. Cagatay Demiralp, 9/7/2008. Code was initially in matlab and was rewritten in Python for dipy by the Dipy Team. Thank you Cagatay for putting this online. Parameters ------------ v : array, shape (N, 3) of unit vectors (e.g., principal eigenvectors of tensor data) representing one of the two directions of the undirected lines in a line field. Returns --------- c : array, shape (N, 3) matrix of rgb colors corresponding to the vectors given in V. Examples ---------- >>> from dipy.viz import colormap >>> v = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) >>> c = colormap.boys2rgb(v) """ if v.ndim == 1: x = v[0] y = v[1] z = v[2] if v.ndim == 2: x = v[:, 0] y = v[:, 1] z = v[:, 2] x2 = x ** 2 y2 = y ** 2 z2 = z ** 2 x3 = x * x2 y3 = y * y2 z3 = z * z2 z4 = z * z2 xy = x * y xz = x * z yz = y * z hh1 = .5 * (3 * z2 - 1) / 1.58 hh2 = 3 * xz / 2.745 hh3 = 3 * yz / 2.745 hh4 = 1.5 * (x2 - y2) / 2.745 hh5 = 6 * xy / 5.5 hh6 = (1 / 1.176) * .125 * (35 * z4 - 30 * z2 + 3) hh7 = 2.5 * x * (7 * z3 - 3 * z) / 3.737 hh8 = 2.5 * y * (7 * z3 - 3 * z)/3.737 hh9 = ((x2 - y2) * 7.5 * (7 * z2 - 1)) / 15.85 hh10 = ((2 * xy) * (7.5 * (7 * z2 - 1))) / 15.85 hh11 = 105 * (4 * x3 * z - 3 * xz * (1 - z2)) / 59.32 hh12 = 105 * (-4 * y3 * z + 3 * yz * (1 - z2)) / 59.32 s0 = -23.0 s1 = 227.9 s2 = 251.0 s3 = 125.0 ss23 = ss(2.71, s0) cc23 = cc(2.71, s0) ss45 = ss(2.12, s1) cc45 = cc(2.12, s1) ss67 = ss(.972, s2) cc67 = cc(.972, s2) ss89 = ss(.868, s3) cc89 = cc(.868, s3) X = 0.0 X = X + hh2 * cc23 X = X + hh3 * ss23 X = X + hh5 * cc45 X = X + hh4 * ss45 X = X + hh7 * cc67 X = X + hh8 * ss67 X = X + hh10 * cc89 X = X + hh9 * ss89 Y = 0.0 Y = Y + hh2 * -ss23 Y = Y + hh3 * cc23 Y = Y + hh5 * -ss45 Y = Y + hh4 * cc45 Y = Y + hh7 * -ss67 Y = Y + hh8 * cc67 Y = Y + hh10 * -ss89 Y = Y + hh9 * cc89 Z = 0.0 Z = Z + hh1 * -2.8 Z = Z + hh6 * -0.5 Z = Z + hh11 * 0.3 Z = Z + hh12 * -2.5 # scale and normalize to fit # in the rgb space w_x = 4.1925 trl_x = -2.0425 w_y = 4.0217 trl_y = -1.8541 w_z = 4.0694 trl_z = -2.1899 if v.ndim == 2: N = len(x) C = np.zeros((N, 3)) C[:, 0] = 0.9 * np.abs(((X - trl_x) / w_x)) + 0.05 C[:, 1] = 0.9 * np.abs(((Y - trl_y) / w_y)) + 0.05 C[:, 2] = 0.9 * np.abs(((Z - trl_z) / w_z)) + 0.05 if v.ndim == 1: C = np.zeros((3,)) C[0] = 0.9 * np.abs(((X - trl_x) / w_x)) + 0.05 C[1] = 0.9 * np.abs(((Y - trl_y) / w_y)) + 0.05 C[2] = 0.9 * np.abs(((Z - trl_z) / w_z)) + 0.05 return C def orient2rgb(v): """ standard orientation 2 rgb colormap v : array, shape (N, 3) of vectors not necessarily normalized Returns ------- c : array, shape (N, 3) matrix of rgb colors corresponding to the vectors given in V. Examples -------- >>> from dipy.viz import colormap >>> v = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) >>> c = colormap.orient2rgb(v) """ if v.ndim == 1: orient = v orient = np.abs(orient / np.linalg.norm(orient)) if v.ndim == 2: orientn = np.sqrt(v[:, 0] ** 2 + v[:, 1] ** 2 + v[:, 2] ** 2) orientn.shape = orientn.shape+(1,) orient = np.abs(v / orientn) return orient def line_colors(streamlines, cmap='rgb_standard'): """ Create colors for streamlines to be used in fvtk.line Parameters ---------- streamlines : sequence of ndarrays cmap : ('rgb_standard', 'boys_standard') Returns ------- colors : ndarray """ if cmap == 'rgb_standard': col_list = [orient2rgb(streamline[-1] - streamline[0]) for streamline in streamlines] if cmap == 'boys_standard': col_list = [boys2rgb(streamline[-1] - streamline[0]) for streamline in streamlines] return np.vstack(col_list) dipy-0.10.1/dipy/viz/fvtk.py000066400000000000000000000766131263041327500156570ustar00rootroot00000000000000''' Fvtk module implements simple visualization functions using VTK. The main idea is the following: A window can have one or more renderers. A renderer can have none, one or more actors. Examples of actors are a sphere, line, point etc. You basically add actors in a renderer and in that way you can visualize the forementioned objects e.g. sphere, line ... Examples --------- >>> from dipy.viz import fvtk >>> r=fvtk.ren() >>> a=fvtk.axes() >>> fvtk.add(r,a) >>> #fvtk.show(r) For more information on VTK there many neat examples in http://www.vtk.org/Wiki/VTK/Tutorials/External_Tutorials ''' from __future__ import division, print_function, absolute_import from warnings import warn from dipy.utils.six.moves import xrange import numpy as np from dipy.core.ndindex import ndindex # Conditional import machinery for vtk from ..utils.optpkg import optional_package # Allow import, but disable doctests if we don't have vtk vtk, have_vtk, setup_module = optional_package('vtk') colors, have_vtk_colors, _ = optional_package('vtk.util.colors') cm, have_matplotlib, _ = optional_package('matplotlib.cm') if have_matplotlib: get_cmap = cm.get_cmap else: from dipy.data import get_cmap # a track buffer used only with picking tracks track_buffer = [] # indices buffer for the tracks ind_buffer = [] # tempory renderer used only with picking tracks tmp_ren = None if have_vtk: major_version = vtk.vtkVersion.GetVTKMajorVersion() # Create a text mapper and actor to display the results of picking. textMapper = vtk.vtkTextMapper() tprop = textMapper.GetTextProperty() tprop.SetFontFamilyToArial() tprop.SetFontSize(10) # tprop.BoldOn() # tprop.ShadowOn() tprop.SetColor(1, 0, 0) textActor = vtk.vtkActor2D() textActor.VisibilityOff() textActor.SetMapper(textMapper) # Create a cell picker. picker = vtk.vtkCellPicker() from dipy.viz.window import (ren, renderer, add, clear, rm, rm_all, show, record, snapshot) from dipy.viz.actor import line, streamtube, slicer, axes def dots(points, color=(1, 0, 0), opacity=1, dot_size=5): """ Create one or more 3d points Parameters ---------- points : ndarray, (N, 3) color : tuple (3,) opacity : float dot_size : int Returns -------- vtkActor See Also --------- dipy.viz.fvtk.point """ if points.ndim == 2: points_no = points.shape[0] else: points_no = 1 polyVertexPoints = vtk.vtkPoints() polyVertexPoints.SetNumberOfPoints(points_no) aPolyVertex = vtk.vtkPolyVertex() aPolyVertex.GetPointIds().SetNumberOfIds(points_no) cnt = 0 if points.ndim > 1: for point in points: polyVertexPoints.InsertPoint(cnt, point[0], point[1], point[2]) aPolyVertex.GetPointIds().SetId(cnt, cnt) cnt += 1 else: polyVertexPoints.InsertPoint(cnt, points[0], points[1], points[2]) aPolyVertex.GetPointIds().SetId(cnt, cnt) cnt += 1 aPolyVertexGrid = vtk.vtkUnstructuredGrid() aPolyVertexGrid.Allocate(1, 1) aPolyVertexGrid.InsertNextCell(aPolyVertex.GetCellType(), aPolyVertex.GetPointIds()) aPolyVertexGrid.SetPoints(polyVertexPoints) aPolyVertexMapper = vtk.vtkDataSetMapper() if major_version <= 5: aPolyVertexMapper.SetInput(aPolyVertexGrid) else: aPolyVertexMapper.SetInputData(aPolyVertexGrid) aPolyVertexActor = vtk.vtkActor() aPolyVertexActor.SetMapper(aPolyVertexMapper) aPolyVertexActor.GetProperty().SetColor(color) aPolyVertexActor.GetProperty().SetOpacity(opacity) aPolyVertexActor.GetProperty().SetPointSize(dot_size) return aPolyVertexActor def point(points, colors, opacity=1, point_radius=0.1, theta=8, phi=8): """ Visualize points as sphere glyphs Parameters ---------- points : ndarray, shape (N, 3) colors : ndarray (N,3) or tuple (3,) point_radius : float theta : int phi : int Returns ------- vtkActor Examples -------- >>> from dipy.viz import fvtk >>> ren = fvtk.ren() >>> pts = np.random.rand(5, 3) >>> point_actor = fvtk.point(pts, fvtk.colors.coral) >>> fvtk.add(ren, point_actor) >>> #fvtk.show(ren) """ if np.array(colors).ndim == 1: # return dots(points,colors,opacity) colors = np.tile(colors, (len(points), 1)) scalars = vtk.vtkUnsignedCharArray() scalars.SetNumberOfComponents(3) pts = vtk.vtkPoints() cnt_colors = 0 for p in points: pts.InsertNextPoint(p[0], p[1], p[2]) scalars.InsertNextTuple3( round(255 * colors[cnt_colors][0]), round(255 * colors[cnt_colors][1]), round(255 * colors[cnt_colors][2])) cnt_colors += 1 src = vtk.vtkSphereSource() src.SetRadius(point_radius) src.SetThetaResolution(theta) src.SetPhiResolution(phi) polyData = vtk.vtkPolyData() polyData.SetPoints(pts) polyData.GetPointData().SetScalars(scalars) glyph = vtk.vtkGlyph3D() glyph.SetSourceConnection(src.GetOutputPort()) if major_version <= 5: glyph.SetInput(polyData) else: glyph.SetInputData(polyData) glyph.SetColorModeToColorByScalar() glyph.SetScaleModeToDataScalingOff() glyph.Update() mapper = vtk.vtkPolyDataMapper() if major_version <= 5: mapper.SetInput(glyph.GetOutput()) else: mapper.SetInputData(glyph.GetOutput()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetOpacity(opacity) return actor def label(ren, text='Origin', pos=(0, 0, 0), scale=(0.2, 0.2, 0.2), color=(1, 1, 1)): ''' Create a label actor. This actor will always face the camera Parameters ---------- ren : vtkRenderer() object Renderer as returned by ``ren()``. text : str Text for the label. pos : (3,) array_like, optional Left down position of the label. scale : (3,) array_like Changes the size of the label. color : (3,) array_like Label color as ``(r,g,b)`` tuple. Returns ------- l : vtkActor object Label. Examples -------- >>> from dipy.viz import fvtk >>> r=fvtk.ren() >>> l=fvtk.label(r) >>> fvtk.add(r,l) >>> #fvtk.show(r) ''' atext = vtk.vtkVectorText() atext.SetText(text) textm = vtk.vtkPolyDataMapper() if major_version <= 5: textm.SetInput(atext.GetOutput()) else: textm.SetInputData(atext.GetOutput()) texta = vtk.vtkFollower() texta.SetMapper(textm) texta.SetScale(scale) texta.GetProperty().SetColor(color) texta.SetPosition(pos) ren.AddActor(texta) texta.SetCamera(ren.GetActiveCamera()) return texta def volume(vol, voxsz=(1.0, 1.0, 1.0), affine=None, center_origin=1, info=0, maptype=0, trilinear=1, iso=0, iso_thr=100, opacitymap=None, colormap=None): ''' Create a volume and return a volumetric actor using volumetric rendering. This function has many different interesting capabilities. The maptype, opacitymap and colormap are the most crucial parameters here. Parameters ---------- vol : array, shape (N, M, K), dtype uint8 An array representing the volumetric dataset that we want to visualize using volumetric rendering. voxsz : (3,) array_like Voxel size. affine : (4, 4) ndarray As given by volumeimages. center_origin : int {0,1} It considers that the center of the volume is the point ``(-vol.shape[0]/2.0+0.5,-vol.shape[1]/2.0+0.5,-vol.shape[2]/2.0+0.5)``. info : int {0,1} If 1 it prints out some info about the volume, the method and the dataset. trilinear : int {0,1} Use trilinear interpolation, default 1, gives smoother rendering. If you want faster interpolation use 0 (Nearest). maptype : int {0,1} The maptype is a very important parameter which affects the raycasting algorithm in use for the rendering. The options are: If 0 then vtkVolumeTextureMapper2D is used. If 1 then vtkVolumeRayCastFunction is used. iso : int {0,1} If iso is 1 and maptype is 1 then we use ``vtkVolumeRayCastIsosurfaceFunction`` which generates an isosurface at the predefined iso_thr value. If iso is 0 and maptype is 1 ``vtkVolumeRayCastCompositeFunction`` is used. iso_thr : int If iso is 1 then then this threshold in the volume defines the value which will be used to create the isosurface. opacitymap : (2, 2) ndarray The opacity map assigns a transparency coefficient to every point in the volume. The default value uses the histogram of the volume to calculate the opacitymap. colormap : (4, 4) ndarray The color map assigns a color value to every point in the volume. When None from the histogram it uses a red-blue colormap. Returns ------- v : vtkVolume Volume. Notes -------- What is the difference between TextureMapper2D and RayCastFunction? Coming soon... See VTK user's guide [book] & The Visualization Toolkit [book] and VTK's online documentation & online docs. What is the difference between RayCastIsosurfaceFunction and RayCastCompositeFunction? Coming soon... See VTK user's guide [book] & The Visualization Toolkit [book] and VTK's online documentation & online docs. What about trilinear interpolation? Coming soon... well when time permits really ... :-) Examples -------- First example random points. >>> from dipy.viz import fvtk >>> import numpy as np >>> vol=100*np.random.rand(100,100,100) >>> vol=vol.astype('uint8') >>> vol.min(), vol.max() (0, 99) >>> r = fvtk.ren() >>> v = fvtk.volume(vol) >>> fvtk.add(r,v) >>> #fvtk.show(r) Second example with a more complicated function >>> from dipy.viz import fvtk >>> import numpy as np >>> x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j] >>> s = np.sin(x*y*z)/(x*y*z) >>> r = fvtk.ren() >>> v = fvtk.volume(s) >>> fvtk.add(r,v) >>> #fvtk.show(r) If you find this function too complicated you can always use mayavi. Please do not forget to use the -wthread switch in ipython if you are running mayavi. from enthought.mayavi import mlab import numpy as np x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j] s = np.sin(x*y*z)/(x*y*z) mlab.pipeline.volume(mlab.pipeline.scalar_field(s)) mlab.show() More mayavi demos are available here: http://code.enthought.com/projects/mayavi/docs/development/html/mayavi/mlab.html ''' if vol.ndim != 3: raise ValueError('3d numpy arrays only please') if info: print('Datatype', vol.dtype, 'converted to uint8') vol = np.interp(vol, [vol.min(), vol.max()], [0, 255]) vol = vol.astype('uint8') if opacitymap is None: bin, res = np.histogram(vol.ravel()) res2 = np.interp(res, [vol.min(), vol.max()], [0, 1]) opacitymap = np.vstack((res, res2)).T opacitymap = opacitymap.astype('float32') ''' opacitymap=np.array([[ 0.0, 0.0], [50.0, 0.9]]) ''' if info: print('opacitymap', opacitymap) if colormap is None: bin, res = np.histogram(vol.ravel()) res2 = np.interp(res, [vol.min(), vol.max()], [0, 1]) zer = np.zeros(res2.shape) colormap = np.vstack((res, res2, zer, res2[::-1])).T colormap = colormap.astype('float32') ''' colormap=np.array([[0.0, 0.5, 0.0, 0.0], [64.0, 1.0, 0.5, 0.5], [128.0, 0.9, 0.2, 0.3], [196.0, 0.81, 0.27, 0.1], [255.0, 0.5, 0.5, 0.5]]) ''' if info: print('colormap', colormap) im = vtk.vtkImageData() if major_version <= 5: im.SetScalarTypeToUnsignedChar() im.SetDimensions(vol.shape[0], vol.shape[1], vol.shape[2]) # im.SetOrigin(0,0,0) # im.SetSpacing(voxsz[2],voxsz[0],voxsz[1]) if major_version <= 5: im.AllocateScalars() else: im.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 3) for i in range(vol.shape[0]): for j in range(vol.shape[1]): for k in range(vol.shape[2]): im.SetScalarComponentFromFloat(i, j, k, 0, vol[i, j, k]) if affine is not None: aff = vtk.vtkMatrix4x4() aff.DeepCopy((affine[0, 0], affine[0, 1], affine[0, 2], affine[0, 3], affine[1, 0], affine[1, 1], affine[1, 2], affine[1, 3], affine[2, 0], affine[ 2, 1], affine[2, 2], affine[2, 3], affine[3, 0], affine[3, 1], affine[3, 2], affine[3, 3])) # aff.DeepCopy((affine[0,0],affine[0,1],affine[0,2],0,affine[1,0],affine[1,1],affine[1,2],0,affine[2,0],affine[2,1],affine[2,2],0,affine[3,0],affine[3,1],affine[3,2],1)) # aff.DeepCopy((affine[0,0],affine[0,1],affine[0,2],127.5,affine[1,0],affine[1,1],affine[1,2],-127.5,affine[2,0],affine[2,1],affine[2,2],-127.5,affine[3,0],affine[3,1],affine[3,2],1)) reslice = vtk.vtkImageReslice() if major_version <= 5: reslice.SetInput(im) else: reslice.SetInputData(im) # reslice.SetOutputDimensionality(2) # reslice.SetOutputOrigin(127,-145,147) reslice.SetResliceAxes(aff) # reslice.SetOutputOrigin(-127,-127,-127) # reslice.SetOutputExtent(-127,128,-127,128,-127,128) # reslice.SetResliceAxesOrigin(0,0,0) # print 'Get Reslice Axes Origin ', reslice.GetResliceAxesOrigin() # reslice.SetOutputSpacing(1.0,1.0,1.0) reslice.SetInterpolationModeToLinear() # reslice.UpdateWholeExtent() # print 'reslice GetOutputOrigin', reslice.GetOutputOrigin() # print 'reslice GetOutputExtent',reslice.GetOutputExtent() # print 'reslice GetOutputSpacing',reslice.GetOutputSpacing() changeFilter = vtk.vtkImageChangeInformation() if major_version <= 5: changeFilter.SetInput(reslice.GetOutput()) else: changeFilter.SetInputData(reslice.GetOutput()) # changeFilter.SetInput(im) if center_origin: changeFilter.SetOutputOrigin( -vol.shape[0] / 2.0 + 0.5, -vol.shape[1] / 2.0 + 0.5, -vol.shape[2] / 2.0 + 0.5) print('ChangeFilter ', changeFilter.GetOutputOrigin()) opacity = vtk.vtkPiecewiseFunction() for i in range(opacitymap.shape[0]): opacity.AddPoint(opacitymap[i, 0], opacitymap[i, 1]) color = vtk.vtkColorTransferFunction() for i in range(colormap.shape[0]): color.AddRGBPoint( colormap[i, 0], colormap[i, 1], colormap[i, 2], colormap[i, 3]) if(maptype == 0): property = vtk.vtkVolumeProperty() property.SetColor(color) property.SetScalarOpacity(opacity) if trilinear: property.SetInterpolationTypeToLinear() else: property.SetInterpolationTypeToNearest() if info: print('mapper VolumeTextureMapper2D') mapper = vtk.vtkVolumeTextureMapper2D() if affine is None: if major_version <= 5: mapper.SetInput(im) else: mapper.SetInputData(im) else: if major_version <= 5: mapper.SetInput(changeFilter.GetOutput()) else: mapper.SetInputData(changeFilter.GetOutput()) if (maptype == 1): property = vtk.vtkVolumeProperty() property.SetColor(color) property.SetScalarOpacity(opacity) property.ShadeOn() if trilinear: property.SetInterpolationTypeToLinear() else: property.SetInterpolationTypeToNearest() if iso: isofunc = vtk.vtkVolumeRayCastIsosurfaceFunction() isofunc.SetIsoValue(iso_thr) else: compositeFunction = vtk.vtkVolumeRayCastCompositeFunction() if info: print('mapper VolumeRayCastMapper') mapper = vtk.vtkVolumeRayCastMapper() if iso: mapper.SetVolumeRayCastFunction(isofunc) if info: print('Isosurface') else: mapper.SetVolumeRayCastFunction(compositeFunction) # mapper.SetMinimumImageSampleDistance(0.2) if info: print('Composite') if affine is None: if major_version <= 5: mapper.SetInput(im) else: mapper.SetInputData(im) else: # mapper.SetInput(reslice.GetOutput()) if major_version <= 5: mapper.SetInput(changeFilter.GetOutput()) else: mapper.SetInputData(changeFilter.GetOutput()) # Return mid position in world space # im2=reslice.GetOutput() # index=im2.FindPoint(vol.shape[0]/2.0,vol.shape[1]/2.0,vol.shape[2]/2.0) # print 'Image Getpoint ' , im2.GetPoint(index) volum = vtk.vtkVolume() volum.SetMapper(mapper) volum.SetProperty(property) if info: print('Origin', volum.GetOrigin()) print('Orientation', volum.GetOrientation()) print('OrientationW', volum.GetOrientationWXYZ()) print('Position', volum.GetPosition()) print('Center', volum.GetCenter()) print('Get XRange', volum.GetXRange()) print('Get YRange', volum.GetYRange()) print('Get ZRange', volum.GetZRange()) print('Volume data type', vol.dtype) return volum def contour(vol, voxsz=(1.0, 1.0, 1.0), affine=None, levels=[50], colors=[np.array([1.0, 0.0, 0.0])], opacities=[0.5]): """ Take a volume and draw surface contours for any any number of thresholds (levels) where every contour has its own color and opacity Parameters ---------- vol : (N, M, K) ndarray An array representing the volumetric dataset for which we will draw some beautiful contours . voxsz : (3,) array_like Voxel size. affine : None Not used. levels : array_like Sequence of thresholds for the contours taken from image values needs to be same datatype as `vol`. colors : (N, 3) ndarray RGB values in [0,1]. opacities : array_like Opacities of contours. Returns ------- vtkAssembly Examples -------- >>> import numpy as np >>> from dipy.viz import fvtk >>> A=np.zeros((10,10,10)) >>> A[3:-3,3:-3,3:-3]=1 >>> r=fvtk.ren() >>> fvtk.add(r,fvtk.contour(A,levels=[1])) >>> #fvtk.show(r) """ im = vtk.vtkImageData() if major_version <= 5: im.SetScalarTypeToUnsignedChar() im.SetDimensions(vol.shape[0], vol.shape[1], vol.shape[2]) # im.SetOrigin(0,0,0) # im.SetSpacing(voxsz[2],voxsz[0],voxsz[1]) if major_version <= 5: im.AllocateScalars() else: im.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 3) for i in range(vol.shape[0]): for j in range(vol.shape[1]): for k in range(vol.shape[2]): im.SetScalarComponentFromFloat(i, j, k, 0, vol[i, j, k]) ass = vtk.vtkAssembly() # ass=[] for (i, l) in enumerate(levels): # print levels skinExtractor = vtk.vtkContourFilter() if major_version <= 5: skinExtractor.SetInput(im) else: skinExtractor.SetInputData(im) skinExtractor.SetValue(0, l) skinNormals = vtk.vtkPolyDataNormals() skinNormals.SetInputConnection(skinExtractor.GetOutputPort()) skinNormals.SetFeatureAngle(60.0) skinMapper = vtk.vtkPolyDataMapper() skinMapper.SetInputConnection(skinNormals.GetOutputPort()) skinMapper.ScalarVisibilityOff() skin = vtk.vtkActor() skin.SetMapper(skinMapper) skin.GetProperty().SetOpacity(opacities[i]) # print colors[i] skin.GetProperty().SetColor(colors[i][0], colors[i][1], colors[i][2]) # skin.Update() ass.AddPart(skin) del skin del skinMapper del skinExtractor return ass lowercase_cm_name = {'blues':'Blues', 'accent':'Accent'} def create_colormap(v, name='jet', auto=True): """Create colors from a specific colormap and return it as an array of shape (N,3) where every row gives the corresponding r,g,b value. The colormaps we use are similar with those of pylab. Parameters ---------- v : (N,) array vector of values to be mapped in RGB colors according to colormap name : str. Name of the colormap. Currently implemented: 'jet', 'blues', 'accent', 'bone' and matplotlib colormaps if you have matplotlib installed. auto : bool, if auto is True then v is interpolated to [0, 10] from v.min() to v.max() Notes ----- Dipy supports a few colormaps for those who do not use Matplotlib, for more colormaps consider downloading Matplotlib. """ if v.ndim > 1: msg = 'This function works only with 1d arrays. Use ravel()' raise ValueError(msg) if auto: v = np.interp(v, [v.min(), v.max()], [0, 1]) else: v = np.clip(v, 0, 1) # For backwards compatibility with lowercase names newname = lowercase_cm_name.get(name) or name colormap = get_cmap(newname) if colormap is None: e_s = "Colormap '%s' is not yet implemented " % name raise ValueError(e_s) rgba = colormap(v) rgb = rgba[:, :3].copy() return rgb def _makeNd(array, ndim): """Pads as many 1s at the beginning of array's shape as are need to give array ndim dimensions.""" new_shape = (1,) * (ndim - array.ndim) + array.shape return array.reshape(new_shape) def sphere_funcs(sphere_values, sphere, image=None, colormap='jet', scale=2.2, norm=True, radial_scale=True): """Plot many morphed spherical functions simultaneously. Parameters ---------- sphere_values : (M,) or (X, M) or (X, Y, M) or (X, Y, Z, M) ndarray Values on the sphere. sphere : Sphere image : None, Not yet supported. colormap : None or 'jet' If None then no color is used. scale : float, Distance between spheres. norm : bool, Normalize `sphere_values`. radial_scale : bool, Scale sphere points according to odf values. Returns ------- actor : vtkActor Spheres. Examples -------- >>> from dipy.viz import fvtk >>> r = fvtk.ren() >>> odfs = np.ones((5, 5, 724)) >>> odfs[..., 0] = 2. >>> from dipy.data import get_sphere >>> sphere = get_sphere('symmetric724') >>> fvtk.add(r, fvtk.sphere_funcs(odfs, sphere)) >>> #fvtk.show(r) """ sphere_values = np.asarray(sphere_values) if sphere_values.ndim > 4: raise ValueError("Wrong shape") sphere_values = _makeNd(sphere_values, 4) grid_shape = np.array(sphere_values.shape[:3]) faces = np.asarray(sphere.faces, dtype=int) vertices = sphere.vertices if sphere_values.shape[-1] != sphere.vertices.shape[0]: msg = 'Sphere.vertices.shape[0] should be the same as the ' msg += 'last dimensions of sphere_values i.e. sphere_values.shape[-1]' raise ValueError(msg) list_sq = [] list_cols = [] for ijk in np.ndindex(*grid_shape): m = sphere_values[ijk].copy() if norm: m /= abs(m).max() if radial_scale: xyz = vertices.T * m else: xyz = vertices.T.copy() xyz += scale * (ijk - grid_shape / 2.)[:, None] xyz = xyz.T list_sq.append(xyz) if colormap is not None: cols = create_colormap(m, colormap) cols = np.interp(cols, [0, 1], [0, 255]).astype('ubyte') list_cols.append(cols) points = vtk.vtkPoints() triangles = vtk.vtkCellArray() if colormap is not None: colors = vtk.vtkUnsignedCharArray() colors.SetNumberOfComponents(3) colors.SetName("Colors") for k in xrange(len(list_sq)): xyz = list_sq[k] if colormap is not None: cols = list_cols[k] for i in xrange(xyz.shape[0]): points.InsertNextPoint(*xyz[i]) if colormap is not None: colors.InsertNextTuple3(*cols[i]) for j in xrange(faces.shape[0]): triangle = vtk.vtkTriangle() triangle.GetPointIds().SetId(0, faces[j, 0] + k * xyz.shape[0]) triangle.GetPointIds().SetId(1, faces[j, 1] + k * xyz.shape[0]) triangle.GetPointIds().SetId(2, faces[j, 2] + k * xyz.shape[0]) triangles.InsertNextCell(triangle) del triangle polydata = vtk.vtkPolyData() polydata.SetPoints(points) polydata.SetPolys(triangles) if colormap is not None: polydata.GetPointData().SetScalars(colors) polydata.Modified() mapper = vtk.vtkPolyDataMapper() if major_version <= 5: mapper.SetInput(polydata) else: mapper.SetInputData(polydata) actor = vtk.vtkActor() actor.SetMapper(mapper) return actor def peaks(peaks_dirs, peaks_values=None, scale=2.2, colors=(1, 0, 0)): """ Visualize peak directions as given from ``peaks_from_model`` Parameters ---------- peaks_dirs : ndarray Peak directions. The shape of the array can be (M, 3) or (X, M, 3) or (X, Y, M, 3) or (X, Y, Z, M, 3) peaks_values : ndarray Peak values. The shape of the array can be (M, ) or (X, M) or (X, Y, M) or (X, Y, Z, M) scale : float Distance between spheres colors : ndarray or tuple Peak colors Returns ------- vtkActor See Also -------- dipy.viz.fvtk.sphere_funcs """ peaks_dirs = np.asarray(peaks_dirs) if peaks_dirs.ndim > 5: raise ValueError("Wrong shape") peaks_dirs = _makeNd(peaks_dirs, 5) if peaks_values is not None: peaks_values = _makeNd(peaks_values, 4) grid_shape = np.array(peaks_dirs.shape[:3]) list_dirs = [] for ijk in np.ndindex(*grid_shape): xyz = scale * (ijk - grid_shape / 2.)[:, None] xyz = xyz.T for i in range(peaks_dirs.shape[-2]): if peaks_values is not None: pv = peaks_values[ijk][i] else: pv = 1. symm = np.vstack((-peaks_dirs[ijk][i] * pv + xyz, peaks_dirs[ijk][i] * pv + xyz)) list_dirs.append(symm) return line(list_dirs, colors) def tensor(evals, evecs, scalar_colors=None, sphere=None, scale=2.2, norm=True): """Plot many tensors as ellipsoids simultaneously. Parameters ---------- evals : (3,) or (X, 3) or (X, Y, 3) or (X, Y, Z, 3) ndarray eigenvalues evecs : (3, 3) or (X, 3, 3) or (X, Y, 3, 3) or (X, Y, Z, 3, 3) ndarray eigenvectors scalar_colors : (3,) or (X, 3) or (X, Y, 3) or (X, Y, Z, 3) ndarray RGB colors used to show the tensors Default None, color the ellipsoids using ``color_fa`` sphere : Sphere, this sphere will be transformed to the tensor ellipsoid Default is None which uses a symmetric sphere with 724 points. scale : float, distance between ellipsoids. norm : boolean, Normalize `evals`. Returns ------- actor : vtkActor Ellipsoids Examples -------- >>> from dipy.viz import fvtk >>> r = fvtk.ren() >>> evals = np.array([1.4, .35, .35]) * 10 ** (-3) >>> evecs = np.eye(3) >>> from dipy.data import get_sphere >>> sphere = get_sphere('symmetric724') >>> fvtk.add(r, fvtk.tensor(evals, evecs, sphere=sphere)) >>> #fvtk.show(r) """ evals = np.asarray(evals) if evals.ndim > 4: raise ValueError("Wrong shape") evals = _makeNd(evals, 4) evecs = _makeNd(evecs, 5) grid_shape = np.array(evals.shape[:3]) if sphere is None: from dipy.data import get_sphere sphere = get_sphere('symmetric724') faces = np.asarray(sphere.faces, dtype=int) vertices = sphere.vertices colors = vtk.vtkUnsignedCharArray() colors.SetNumberOfComponents(3) colors.SetName("Colors") if scalar_colors is None: from dipy.reconst.dti import color_fa, fractional_anisotropy cfa = color_fa(fractional_anisotropy(evals), evecs) else: cfa = _makeNd(scalar_colors, 4) list_sq = [] list_cols = [] for ijk in ndindex(grid_shape): ea = evals[ijk] if norm: ea /= ea.max() ea = np.diag(ea.copy()) ev = evecs[ijk].copy() xyz = np.dot(ev, np.dot(ea, vertices.T)) xyz += scale * (ijk - grid_shape / 2.)[:, None] xyz = xyz.T list_sq.append(xyz) acolor = np.zeros(xyz.shape) acolor[:, :] = np.interp(cfa[ijk], [0, 1], [0, 255]) list_cols.append(acolor.astype('ubyte')) points = vtk.vtkPoints() triangles = vtk.vtkCellArray() for k in xrange(len(list_sq)): xyz = list_sq[k] cols = list_cols[k] for i in xrange(xyz.shape[0]): points.InsertNextPoint(*xyz[i]) colors.InsertNextTuple3(*cols[i]) for j in xrange(faces.shape[0]): triangle = vtk.vtkTriangle() triangle.GetPointIds().SetId(0, faces[j, 0] + k * xyz.shape[0]) triangle.GetPointIds().SetId(1, faces[j, 1] + k * xyz.shape[0]) triangle.GetPointIds().SetId(2, faces[j, 2] + k * xyz.shape[0]) triangles.InsertNextCell(triangle) del triangle polydata = vtk.vtkPolyData() polydata.SetPoints(points) polydata.SetPolys(triangles) polydata.GetPointData().SetScalars(colors) polydata.Modified() mapper = vtk.vtkPolyDataMapper() if major_version <= 5: mapper.SetInput(polydata) else: mapper.SetInputData(polydata) actor = vtk.vtkActor() actor.SetMapper(mapper) return actor def camera(ren, pos=None, focal=None, viewup=None, verbose=True): """ Change the active camera Parameters ---------- ren : vtkRenderer pos : tuple (x, y, z) position of the camera focal : tuple (x, y, z) focal point viewup : tuple (x, y, z) viewup vector verbose : bool show information about the camera Returns ------- vtkCamera """ msg = "This function is deprecated." msg += "Please use the window.Renderer class to get/set the active camera." warn(DeprecationWarning(msg)) cam = ren.GetActiveCamera() if verbose: print('Camera Position (%.2f,%.2f,%.2f)' % cam.GetPosition()) print('Camera Focal Point (%.2f,%.2f,%.2f)' % cam.GetFocalPoint()) print('Camera View Up (%.2f,%.2f,%.2f)' % cam.GetViewUp()) if pos is not None: cam = ren.GetActiveCamera().SetPosition(*pos) if focal is not None: ren.GetActiveCamera().SetFocalPoint(*focal) if viewup is not None: ren.GetActiveCamera().SetViewUp(*viewup) cam = ren.GetActiveCamera() if pos is not None or focal is not None or viewup is not None: if verbose: print('-------------------------------------') print('Camera New Position (%.2f,%.2f,%.2f)' % cam.GetPosition()) print('Camera New Focal Point (%.2f,%.2f,%.2f)' % cam.GetFocalPoint()) print('Camera New View Up (%.2f,%.2f,%.2f)' % cam.GetViewUp()) return cam if __name__ == "__main__": pass dipy-0.10.1/dipy/viz/projections.py000066400000000000000000000074531263041327500172400ustar00rootroot00000000000000""" Visualization tools for 2D projections of 3D functions on the sphere, such as ODFs. """ import numpy as np import scipy.interpolate as interp from ..utils.optpkg import optional_package matplotlib, has_mpl, setup_module = optional_package("matplotlib") plt, _, _ = optional_package("matplotlib.pyplot") tri, _, _ = optional_package("matplotlib.tri") bm, has_basemap, _ = optional_package("mpl_toolkits.basemap") import dipy.core.geometry as geo from dipy.testing import doctest_skip_parser @doctest_skip_parser def sph_project(vertices, val, ax=None, vmin=None, vmax=None, cmap=None, cbar=True, tri=False, boundary=False, **basemap_args): """Draw a signal on a 2D projection of the sphere. Parameters ---------- vertices : (N,3) ndarray unit vector points of the sphere val: (N) ndarray Function values. ax : mpl axis, optional If specified, draw onto this existing axis instead. vmin, vmax : floats Values to cut the z cmap : mpl colormap cbar: Whether to add the color-bar to the figure triang : Whether to display the plot triangulated as a pseudo-color plot. boundary : Whether to draw the boundary around the projection in a black line Returns ------- ax : axis Matplotlib figure axis Examples -------- >>> from dipy.data import get_sphere >>> verts = get_sphere('symmetric724').vertices >>> ax = sph_project(verts.T, np.random.rand(len(verts.T))) # skip if not has_basemap """ if ax is None: fig, ax = plt.subplots(1) if cmap is None: cmap = matplotlib.cm.hot basemap_args.setdefault('projection', 'ortho') basemap_args.setdefault('lat_0', 0) basemap_args.setdefault('lon_0', 0) basemap_args.setdefault('resolution', 'c') from mpl_toolkits.basemap import Basemap m = Basemap(**basemap_args) if boundary: m.drawmapboundary() # Rotate the coordinate system so that you are looking from the north pole: verts_rot = np.array(np.dot(np.matrix([[0,0,-1],[0,1,0],[1,0,0]]), vertices)) # To get the orthographic projection, when the first coordinate is positive: neg_idx = np.where(verts_rot[0]>0) # rotate the entire bvector around to point in the other direction: verts_rot[:, neg_idx] *= -1 _, theta, phi = geo.cart2sphere(verts_rot[0], verts_rot[1], verts_rot[2]) lat, lon = geo.sph2latlon(theta, phi) x, y = m(lon, lat) my_min = np.nanmin(val) if vmin is not None: my_min = vmin my_max = np.nanmax(val) if vmax is not None: my_max = vmax if tri: m.pcolor(x, y, val, vmin=my_min, vmax=my_max, tri=True, cmap=cmap) else: cmap_data = cmap._segmentdata red_interp, blue_interp, green_interp = ( interp.interp1d(np.array(cmap_data[gun])[:,0], np.array(cmap_data[gun])[:,1]) for gun in ['red', 'blue','green']) r = (val - my_min)/float(my_max-my_min) # Enforce the maximum and minumum boundaries, if there are values # outside those boundaries: r[r<0]=0 r[r>1]=1 for this_x, this_y, this_r in zip(x,y,r): red = red_interp(this_r) blue = blue_interp(this_r) green = green_interp(this_r) m.plot(this_x, this_y, 'o', c=[red.item(), green.item(), blue.item()]) if cbar: mappable = matplotlib.cm.ScalarMappable(cmap=cmap) mappable.set_array([my_min, my_max]) # setup colorbar axes instance. pos = ax.get_position() l, b, w, h = pos.bounds # setup colorbar axes cax = fig.add_axes([l+w+0.075, b, 0.05, h], frameon=False) fig.colorbar(mappable, cax=cax) # draw colorbar return ax dipy-0.10.1/dipy/viz/regtools.py000066400000000000000000000376071263041327500165430ustar00rootroot00000000000000import numpy as np from ..utils.optpkg import optional_package matplotlib, has_mpl, setup_module = optional_package("matplotlib") plt, _, _ = optional_package("matplotlib.pyplot") def _tile_plot(imgs, titles, **kwargs): """ Helper function """ # Create a new figure and plot the three images fig, ax = plt.subplots(1, len(imgs)) for ii, a in enumerate(ax): a.set_axis_off() a.imshow(imgs[ii], **kwargs) a.set_title(titles[ii]) return fig def overlay_images(img0, img1, title0='', title_mid='', title1='', fname=None): r""" Plot two images one on top of the other using red and green channels. Creates a figure containing three images: the first image to the left plotted on the red channel of a color image, the second to the right plotted on the green channel of a color image and the two given images on top of each other using the red channel for the first image and the green channel for the second one. It is assumed that both images have the same shape. The intended use of this function is to visually assess the quality of a registration result. Parameters ---------- img0 : array, shape(R, C) the image to be plotted on the red channel, to the left of the figure img1 : array, shape(R, C) the image to be plotted on the green channel, to the right of the figure title0 : string (optional) the title to be written on top of the image to the left. By default, no title is displayed. title_mid : string (optional) the title to be written on top of the middle image. By default, no title is displayed. title1 : string (optional) the title to be written on top of the image to the right. By default, no title is displayed. fname : string (optional) the file name to write the resulting figure. If None (default), the image is not saved. """ # Normalize the input images to [0,255] img0 = 255*((img0 - img0.min()) / (img0.max() - img0.min())) img1 = 255*((img1 - img1.min()) / (img1.max() - img1.min())) # Create the color images img0_red = np.zeros(shape=(img0.shape) + (3,), dtype=np.uint8) img1_green = np.zeros(shape=(img0.shape) + (3,), dtype=np.uint8) overlay = np.zeros(shape=(img0.shape) + (3,), dtype=np.uint8) # Copy the normalized intensities into the appropriate channels of the # color images img0_red[..., 0] = img0 img1_green[..., 1] = img1 overlay[..., 0] = img0 overlay[..., 1] = img1 fig = _tile_plot([img0_red, overlay, img1_green], [title0, title_mid, title1]) # If a file name was given, save the figure if fname is not None: fig.savefig(fname, bbox_inches='tight') return fig def draw_lattice_2d(nrows, ncols, delta): r"""Create a regular lattice of nrows x ncols squares. Creates an image (2D array) of a regular lattice of nrows x ncols squares. The size of each square is delta x delta pixels (not counting the separation lines). The lines are one pixel width. Parameters ---------- nrows : int the number of squares to be drawn vertically ncols : int the number of squares to be drawn horizontally delta : int the size of each square of the grid. Each square is delta x delta pixels Returns ------- lattice : array, shape (R, C) the image (2D array) of the segular lattice. The shape (R, C) of the array is given by R = 1 + (delta + 1) * nrows C = 1 + (delta + 1) * ncols """ lattice = np.ndarray((1 + (delta + 1) * nrows, 1 + (delta + 1) * ncols), dtype=np.float64) # Fill the lattice with "white" lattice[...] = 127 # Draw the horizontal lines in "black" for i in range(nrows + 1): lattice[i*(delta + 1), :] = 0 # Draw the vertical lines in "black" for j in range(ncols + 1): lattice[:, j * (delta + 1)] = 0 return lattice def plot_2d_diffeomorphic_map(mapping, delta=10, fname=None, direct_grid_shape=None, direct_grid2world=-1, inverse_grid_shape=None, inverse_grid2world=-1, show_figure=True): r"""Draw the effect of warping a regular lattice by a diffeomorphic map. Draws a diffeomorphic map by showing the effect of the deformation on a regular grid. The resulting figure contains two images: the direct transformation is plotted to the left, and the inverse transformation is plotted to the right. Parameters ---------- mapping : DiffeomorphicMap object the diffeomorphic map to be drawn delta : int, optional the size (in pixels) of the squares of the regular lattice to be used to plot the warping effects. Each square will be delta x delta pixels. By default, the size will be 10 pixels. fname : string, optional the name of the file the figure will be written to. If None (default), the figure will not be saved to disk. direct_grid_shape : tuple, shape (2,), optional the shape of the grid image after being deformed by the direct transformation. By default, the shape of the deformed grid is the same as the grid of the displacement field, which is by default equal to the shape of the fixed image. In other words, the resulting deformed grid (deformed by the direct transformation) will normally have the same shape as the fixed image. direct_grid2world : array, shape (3, 3), optional the affine transformation mapping the direct grid's coordinates to physical space. By default, this transformation will correspond to the image-to-world transformation corresponding to the default direct_grid_shape (in general, if users specify a direct_grid_shape, they should also specify direct_grid2world). inverse_grid_shape : tuple, shape (2,), optional the shape of the grid image after being deformed by the inverse transformation. By default, the shape of the deformed grid under the inverse transform is the same as the image used as "moving" when the diffeomorphic map was generated by a registration algorithm (so it corresponds to the effect of warping the static image towards the moving). inverse_grid2world : array, shape (3, 3), optional the affine transformation mapping inverse grid's coordinates to physical space. By default, this transformation will correspond to the image-to-world transformation corresponding to the default inverse_grid_shape (in general, if users specify an inverse_grid_shape, they should also specify inverse_grid2world). show_figure : bool, optional if True (default), the deformed grids will be ploted using matplotlib, else the grids are just returned Returns ------- warped_forward : array Image with grid showing the effect of transforming the moving image to the static image. Shape will be `direct_grid_shape` if specified, otherwise the shape of the static image. warped_backward : array Image with grid showing the effect of transforming the static image to the moving image. Shape will be `inverse_grid_shape` if specified, otherwise the shape of the moving image. Note ---- The default value for the affine transformation is "-1" to handle the case in which the user provides "None" as input meaning "identity". If we used None as default, we wouldn't know if the user specifically wants to use the identity (specifically passing None) or if it was left unspecified, meaning to use the apropriate default matrix. """ if mapping.is_inverse: # By default, direct_grid_shape is the codomain grid if direct_grid_shape is None: direct_grid_shape = mapping.codomain_shape if direct_grid2world is -1: direct_grid2world = mapping.codomain_grid2world # By default, the inverse grid is the domain grid if inverse_grid_shape is None: inverse_grid_shape = mapping.domain_shape if inverse_grid2world is -1: inverse_grid2world = mapping.domain_grid2world else: # Now by default, direct_grid_shape is the mapping's input grid if direct_grid_shape is None: direct_grid_shape = mapping.domain_shape if direct_grid2world is -1: direct_grid2world = mapping.domain_grid2world # By default, the output grid is the mapping's domain grid if inverse_grid_shape is None: inverse_grid_shape = mapping.codomain_shape if inverse_grid2world is -1: inverse_grid2world = mapping.codomain_grid2world # The world-to-image (image = drawn lattice on the output grid) # transformation is the inverse of the output affine world_to_image = None if inverse_grid2world is not None: world_to_image = np.linalg.inv(inverse_grid2world) # Draw the squares on the output grid lattice_out = draw_lattice_2d( (inverse_grid_shape[0] + delta) // (delta + 1), (inverse_grid_shape[1] + delta) // (delta + 1), delta) lattice_out = lattice_out[0:inverse_grid_shape[0], 0:inverse_grid_shape[1]] # Warp in the forward direction (sampling it on the input grid) warped_forward = mapping.transform(lattice_out, 'linear', world_to_image, direct_grid_shape, direct_grid2world) # Now, the world-to-image (image = drawn lattice on the input grid) # transformation is the inverse of the input affine world_to_image = None if direct_grid2world is not None: world_to_image = np.linalg.inv(direct_grid2world) # Draw the squares on the input grid lattice_in = draw_lattice_2d((direct_grid_shape[0] + delta) // (delta + 1), (direct_grid_shape[1] + delta) // (delta + 1), delta) lattice_in = lattice_in[0:direct_grid_shape[0], 0:direct_grid_shape[1]] # Warp in the backward direction (sampling it on the output grid) warped_backward = mapping.transform_inverse( lattice_in, 'linear', world_to_image, inverse_grid_shape, inverse_grid2world) # Now plot the grids if show_figure: plt.figure() plt.subplot(1, 2, 1).set_axis_off() plt.imshow(warped_forward, cmap=plt.cm.gray) plt.title('Direct transform') plt.subplot(1, 2, 2).set_axis_off() plt.imshow(warped_backward, cmap=plt.cm.gray) plt.title('Inverse transform') # Finally, save the figure to disk if fname is not None: plt.savefig(fname, bbox_inches='tight') # Return the deformed grids return warped_forward, warped_backward def plot_slices(V, slice_indices=None, fname=None): r"""Plot 3 slices from the given volume: 1 sagital, 1 coronal and 1 axial Creates a figure showing the axial, coronal and sagital slices at the requested positions of the given volume. The requested slices are specified by slice_indices. Parameters ---------- V : array, shape (S, R, C) the 3D volume to extract the slices from slice_indices : array, shape (3,) (optional) the indices of the sagital (slice_indices[0]), coronal (slice_indices[1]) and axial (slice_indices[2]) slices to be displayed. If None, the middle slices along each direction are displayed. fname : string (optional) the name of the file to save the figure to. If None (default), the figure is not saved to disk. """ if slice_indices is None: slice_indices = np.array(V.shape)//2 # Normalize the intensities to [0, 255] sh = V.shape V = np.asarray(V, dtype=np.float64) V = 255 * (V - V.min()) / (V.max() - V.min()) # Extract the middle slices axial = np.asarray(V[:, :, slice_indices[2]]).astype(np.uint8).T coronal = np.asarray(V[:, slice_indices[1], :]).astype(np.uint8).T sagittal = np.asarray(V[slice_indices[0], :, :]).astype(np.uint8).T fig = _tile_plot([axial, coronal, sagittal], ['Axial', 'Coronal', 'Sagittal'], cmap=plt.cm.gray, origin='lower') # Save the figure if requested if fname is not None: fig.savefig(fname, bbox_inches='tight') return fig def overlay_slices(L, R, slice_index=None, slice_type=1, ltitle='Left', rtitle='Right', fname=None): r"""Plot three overlaid slices from the given volumes. Creates a figure containing three images: the gray scale k-th slice of the first volume (L) to the left, where k=slice_index, the k-th slice of the second volume (R) to the right and the k-th slices of the two given images on top of each other using the red channel for the first volume and the green channel for the second one. It is assumed that both volumes have the same shape. The intended use of this function is to visually assess the quality of a registration result. Parameters ---------- L : array, shape (S, R, C) the first volume to extract the slice from, plottet to the left R : array, shape (S, R, C) the second volume to extract the slice from, plotted to the right slice_index : int (optional) the index of the slices (along the axis given by slice_type) to be overlaid. If None, the slice along the specified axis is used slice_type : int (optional) the type of slice to be extracted: 0=sagital, 1=coronal (default), 2=axial. ltitle : string (optional) the string to be written as title of the left image. By default, no title is displayed. rtitle : string (optional) the string to be written as title of the right image. By default, no title is displayed. fname : string (optional) the name of the file to write the image to. If None (default), the figure is not saved to disk. """ # Normalize the intensities to [0,255] sh = L.shape L = np.asarray(L, dtype=np.float64) R = np.asarray(R, dtype=np.float64) L = 255 * (L - L.min()) / (L.max() - L.min()) R = 255 * (R - R.min()) / (R.max() - R.min()) # Create the color image to draw the overlapped slices into, and extract # the slices (note the transpositions) if slice_type is 0: if slice_index is None: slice_index = sh[0]//2 colorImage = np.zeros(shape=(sh[2], sh[1], 3), dtype=np.uint8) ll = np.asarray(L[slice_index, :, :]).astype(np.uint8).T rr = np.asarray(R[slice_index, :, :]).astype(np.uint8).T elif slice_type is 1: if slice_index is None: slice_index = sh[1]//2 colorImage = np.zeros(shape=(sh[2], sh[0], 3), dtype=np.uint8) ll = np.asarray(L[:, slice_index, :]).astype(np.uint8).T rr = np.asarray(R[:, slice_index, :]).astype(np.uint8).T elif slice_type is 2: if slice_index is None: slice_index = sh[2]//2 colorImage = np.zeros(shape=(sh[1], sh[0], 3), dtype=np.uint8) ll = np.asarray(L[:, :, slice_index]).astype(np.uint8).T rr = np.asarray(R[:, :, slice_index]).astype(np.uint8).T else: print("Slice type must be 0, 1 or 2.") return # Draw the intensity images to the appropriate channels of the color image # The "(ll > ll[0, 0])" condition is just an attempt to eliminate the # background when its intensity is not exactly zero (the [0,0] corner is # usually background) colorImage[..., 0] = ll * (ll > ll[0, 0]) colorImage[..., 1] = rr * (rr > rr[0, 0]) fig = _tile_plot([ll, colorImage, rr], [ltitle, 'Overlay', rtitle], cmap=plt.cm.gray, origin='lower') # Save the figure to disk, if requested if fname is not None: fig.savefig(fname, bbox_inches='tight') return fig dipy-0.10.1/dipy/viz/tests/000077500000000000000000000000001263041327500154605ustar00rootroot00000000000000dipy-0.10.1/dipy/viz/tests/__init__.py000066400000000000000000000001641263041327500175720ustar00rootroot00000000000000# init to make tests into a package # Test callable from numpy.testing import Tester test = Tester().test del Testerdipy-0.10.1/dipy/viz/tests/test_fvtk.py000066400000000000000000000062301263041327500200440ustar00rootroot00000000000000"""Testing visualization with fvtk.""" import os import numpy as np from dipy.viz import fvtk from dipy import data import numpy.testing as npt from dipy.testing.decorators import xvfb_it use_xvfb = os.environ.get('TEST_WITH_XVFB', False) if use_xvfb == 'skip': skip_it = True else: skip_it = False @npt.dec.skipif(not fvtk.have_vtk or not fvtk.have_vtk_colors or skip_it) @xvfb_it def test_fvtk_functions(): # This tests will fail if any of the given actors changed inputs or do # not exist # Create a renderer r = fvtk.ren() # Create 2 lines with 2 different colors lines = [np.random.rand(10, 3), np.random.rand(20, 3)] colors = np.random.rand(2, 3) c = fvtk.line(lines, colors) fvtk.add(r, c) # create streamtubes of the same lines and shift them a bit c2 = fvtk.streamtube(lines, colors) c2.SetPosition(2, 0, 0) fvtk.add(r, c2) # Create a volume and return a volumetric actor using volumetric rendering vol = 100 * np.random.rand(100, 100, 100) vol = vol.astype('uint8') r = fvtk.ren() v = fvtk.volume(vol) fvtk.add(r, v) # Remove all objects fvtk.rm_all(r) # Put some text l = fvtk.label(r, text='Yes Men') fvtk.add(r, l) # Slice the volume slicer = fvtk.slicer(vol) slicer.display(50, None, None) fvtk.add(r, slicer) # Change the position of the active camera fvtk.camera(r, pos=(0.6, 0, 0), verbose=False) fvtk.clear(r) # Peak directions p = fvtk.peaks(np.random.rand(3, 3, 3, 5, 3)) fvtk.add(r, p) p2 = fvtk.peaks(np.random.rand(3, 3, 3, 5, 3), np.random.rand(3, 3, 3, 5), colors=(0, 1, 0)) fvtk.add(r, p2) @npt.dec.skipif(not fvtk.have_vtk or not fvtk.have_vtk_colors or skip_it) @xvfb_it def test_fvtk_ellipsoid(): evals = np.array([1.4, .35, .35]) * 10 ** (-3) evecs = np.eye(3) mevals = np.zeros((3, 2, 4, 3)) mevecs = np.zeros((3, 2, 4, 3, 3)) mevals[..., :] = evals mevecs[..., :, :] = evecs from dipy.data import get_sphere sphere = get_sphere('symmetric724') ren = fvtk.ren() fvtk.add(ren, fvtk.tensor(mevals, mevecs, sphere=sphere)) fvtk.add(ren, fvtk.tensor(mevals, mevecs, np.ones(mevals.shape), sphere=sphere)) npt.assert_equal(ren.GetActors().GetNumberOfItems(), 2) def test_colormap(): v = np.linspace(0., .5) map1 = fvtk.create_colormap(v, 'bone', auto=True) map2 = fvtk.create_colormap(v, 'bone', auto=False) npt.assert_(not np.allclose(map1, map2)) npt.assert_raises(ValueError, fvtk.create_colormap, np.ones((2, 3))) npt.assert_raises(ValueError, fvtk.create_colormap, v, 'no such map') @npt.dec.skipif(not fvtk.have_matplotlib) def test_colormaps_matplotlib(): v = np.random.random(1000) for name in 'jet', 'Blues', 'Accent', 'bone': # Matplotlib version of get_cmap rgba1 = fvtk.get_cmap(name)(v) # Dipy version of get_cmap rgba2 = data.get_cmap(name)(v) # dipy's colormaps are close to matplotlibs colormaps, but not perfect npt.assert_array_almost_equal(rgba1, rgba2, 1) if __name__ == "__main__": npt.run_module_suite() dipy-0.10.1/dipy/viz/tests/test_fvtk_actors.py000066400000000000000000000200571263041327500214220ustar00rootroot00000000000000import os import numpy as np from dipy.viz import actor, window import numpy.testing as npt from nibabel.tmpdirs import TemporaryDirectory from dipy.tracking.streamline import center_streamlines, transform_streamlines from dipy.align.tests.test_streamlinear import fornix_streamlines from dipy.testing.decorators import xvfb_it use_xvfb = os.environ.get('TEST_WITH_XVFB', False) if use_xvfb == 'skip': skip_it = True else: skip_it = False run_test = (actor.have_vtk and actor.have_vtk_colors and window.have_imread and not skip_it) if actor.have_vtk: if actor.major_version == 5 and use_xvfb: skip_slicer = True else: skip_slicer = False else: skip_slicer = False @npt.dec.skipif(skip_slicer) @npt.dec.skipif(not run_test) @xvfb_it def test_slicer(): renderer = window.renderer() data = (255 * np.random.rand(50, 50, 50)) affine = np.eye(4) slicer = actor.slicer(data, affine) slicer.display(None, None, 25) renderer.add(slicer) renderer.reset_camera() renderer.reset_clipping_range() # window.show(renderer) # copy pixels in numpy array directly arr = window.snapshot(renderer, 'test_slicer.png', offscreen=False) import scipy print(scipy.__version__) print(scipy.__file__) print(arr.sum()) print(np.sum(arr == 0)) print(np.sum(arr > 0)) print(arr.shape) print(arr.dtype) report = window.analyze_snapshot(arr, find_objects=True) print(report) npt.assert_equal(report.objects, 1) # print(arr[..., 0]) # The slicer can cut directly a smaller part of the image slicer.display_extent(10, 30, 10, 30, 35, 35) renderer.ResetCamera() renderer.add(slicer) # save pixels in png file not a numpy array with TemporaryDirectory() as tmpdir: fname = os.path.join(tmpdir, 'slice.png') # window.show(renderer) arr = window.snapshot(renderer, fname, offscreen=False) report = window.analyze_snapshot(fname, find_objects=True) npt.assert_equal(report.objects, 1) npt.assert_raises(ValueError, actor.slicer, np.ones(10)) renderer.clear() rgb = np.zeros((30, 30, 30, 3)) rgb[..., 0] = 1. rgb_actor = actor.slicer(rgb) renderer.add(rgb_actor) renderer.reset_camera() renderer.reset_clipping_range() arr = window.snapshot(renderer, offscreen=False) report = window.analyze_snapshot(arr, colors=[(255, 0, 0)]) npt.assert_equal(report.objects, 1) npt.assert_equal(report.colors_found, [True]) lut = actor.colormap_lookup_table(scale_range=(0, 255), hue_range=(0.4, 1.), saturation_range=(1, 1.), value_range=(0., 1.)) renderer.clear() slicer_lut = actor.slicer(data, lookup_colormap=lut) slicer_lut.display(10, None, None) slicer_lut.display(None, 10, None) slicer_lut.display(None, None, 10) slicer_lut2 = slicer_lut.copy() slicer_lut2.display(None, None, 10) renderer.add(slicer_lut2) renderer.reset_clipping_range() arr = window.snapshot(renderer, offscreen=False) report = window.analyze_snapshot(arr, find_objects=True) npt.assert_equal(report.objects, 1) renderer.clear() data = (255 * np.random.rand(50, 50, 50)) affine = np.diag([1, 3, 2, 1]) slicer = actor.slicer(data, affine, interpolation='nearest') slicer.display(None, None, 25) renderer.add(slicer) renderer.reset_camera() renderer.reset_clipping_range() arr = window.snapshot(renderer, offscreen=False) report = window.analyze_snapshot(arr, find_objects=True) npt.assert_equal(report.objects, 1) npt.assert_equal(data.shape, slicer.shape) renderer.clear() data = (255 * np.random.rand(50, 50, 50)) affine = np.diag([1, 3, 2, 1]) from dipy.align.reslice import reslice data2, affine2 = reslice(data, affine, zooms=(1, 3, 2), new_zooms=(1, 1, 1)) slicer = actor.slicer(data2, affine2, interpolation='linear') slicer.display(None, None, 25) renderer.add(slicer) renderer.reset_camera() renderer.reset_clipping_range() # window.show(renderer, reset_camera=False) arr = window.snapshot(renderer, offscreen=False) report = window.analyze_snapshot(arr, find_objects=True) npt.assert_equal(report.objects, 1) npt.assert_array_equal([1, 3, 2] * np.array(data.shape), np.array(slicer.shape)) @npt.dec.skipif(not run_test) @xvfb_it def test_streamtube_and_line_actors(): renderer = window.renderer() line1 = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2.]]) line2 = line1 + np.array([0.5, 0., 0.]) lines = [line1, line2] colors = np.array([[1, 0, 0], [0, 0, 1.]]) c = actor.line(lines, colors, linewidth=3) window.add(renderer, c) c = actor.line(lines, colors, spline_subdiv=5, linewidth=3) window.add(renderer, c) # create streamtubes of the same lines and shift them a bit c2 = actor.streamtube(lines, colors, linewidth=.1) c2.SetPosition(2, 0, 0) window.add(renderer, c2) arr = window.snapshot(renderer) report = window.analyze_snapshot(arr, colors=[(255, 0, 0), (0, 0, 255)], find_objects=True) npt.assert_equal(report.objects, 4) npt.assert_equal(report.colors_found, [True, True]) # as before with splines c2 = actor.streamtube(lines, colors, spline_subdiv=5, linewidth=.1) c2.SetPosition(2, 0, 0) window.add(renderer, c2) arr = window.snapshot(renderer) report = window.analyze_snapshot(arr, colors=[(255, 0, 0), (0, 0, 255)], find_objects=True) npt.assert_equal(report.objects, 4) npt.assert_equal(report.colors_found, [True, True]) @npt.dec.skipif(not run_test) @xvfb_it def test_bundle_maps(): renderer = window.renderer() bundle = fornix_streamlines() bundle, shift = center_streamlines(bundle) mat = np.array([[1, 0, 0, 100], [0, 1, 0, 100], [0, 0, 1, 100], [0, 0, 0, 1.]]) bundle = transform_streamlines(bundle, mat) # metric = np.random.rand(*(200, 200, 200)) metric = 100 * np.ones((200, 200, 200)) # add lower values metric[100, :, :] = 100 * 0.5 # create a nice orange-red colormap lut = actor.colormap_lookup_table(scale_range=(0., 100.), hue_range=(0., 0.1), saturation_range=(1, 1), value_range=(1., 1)) line = actor.line(bundle, metric, linewidth=0.1, lookup_colormap=lut) window.add(renderer, line) window.add(renderer, actor.scalar_bar(lut, ' ')) report = window.analyze_renderer(renderer) npt.assert_almost_equal(report.actors, 1) # window.show(renderer) renderer.clear() nb_points = np.sum([len(b) for b in bundle]) values = 100 * np.random.rand(nb_points) # values[:nb_points/2] = 0 line = actor.streamtube(bundle, values, linewidth=0.1, lookup_colormap=lut) renderer.add(line) # window.show(renderer) report = window.analyze_renderer(renderer) npt.assert_equal(report.actors_classnames[0], 'vtkLODActor') renderer.clear() colors = np.random.rand(nb_points, 3) # values[:nb_points/2] = 0 line = actor.line(bundle, colors, linewidth=2) renderer.add(line) # window.show(renderer) report = window.analyze_renderer(renderer) npt.assert_equal(report.actors_classnames[0], 'vtkLODActor') # window.show(renderer) arr = window.snapshot(renderer) report2 = window.analyze_snapshot(arr) npt.assert_equal(report2.objects, 1) # try other input options for colors renderer.clear() actor.line(bundle, (1., 0.5, 0)) actor.line(bundle, np.arange(len(bundle))) actor.line(bundle) colors = [np.random.rand(*b.shape) for b in bundle] actor.line(bundle, colors=colors) if __name__ == "__main__": npt.run_module_suite() dipy-0.10.1/dipy/viz/tests/test_fvtk_utils.py000066400000000000000000000041751263041327500212720ustar00rootroot00000000000000import numpy as np import numpy.testing as npt from dipy.viz.utils import map_coordinates_3d_4d def trilinear_interp_numpy(input_array, indices): """ Evaluate the input_array data at the given indices """ if input_array.ndim <= 2 or input_array.ndim >= 5: raise ValueError("Input array can only be 3d or 4d") x_indices = indices[:, 0] y_indices = indices[:, 1] z_indices = indices[:, 2] x0 = x_indices.astype(np.integer) y0 = y_indices.astype(np.integer) z0 = z_indices.astype(np.integer) x1 = x0 + 1 y1 = y0 + 1 z1 = z0 + 1 # Check if xyz1 is beyond array boundary: x1[np.where(x1 == input_array.shape[0])] = x0.max() y1[np.where(y1 == input_array.shape[1])] = y0.max() z1[np.where(z1 == input_array.shape[2])] = z0.max() if input_array.ndim == 3: x = x_indices - x0 y = y_indices - y0 z = z_indices - z0 elif input_array.ndim == 4: x = np.expand_dims(x_indices - x0, axis=1) y = np.expand_dims(y_indices - y0, axis=1) z = np.expand_dims(z_indices - z0, axis=1) output = (input_array[x0, y0, z0] * (1 - x) * (1 - y) * (1 - z) + input_array[x1, y0, z0] * x * (1 - y) * (1 - z) + input_array[x0, y1, z0] * (1 - x) * y * (1-z) + input_array[x0, y0, z1] * (1 - x) * (1 - y) * z + input_array[x1, y0, z1] * x * (1 - y) * z + input_array[x0, y1, z1] * (1 - x) * y * z + input_array[x1, y1, z0] * x * y * (1 - z) + input_array[x1, y1, z1] * x * y * z) return output def test_trilinear_interp(): A = np.zeros((5, 5, 5)) A[2, 2, 2] = 1 indices = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [1.5, 1.5, 1.5]]) values = trilinear_interp_numpy(A, indices) values2 = map_coordinates_3d_4d(A, indices) npt.assert_almost_equal(values, values2) B = np.zeros((5, 5, 5, 3)) B[2, 2, 2] = np.array([1, 1, 1]) values = trilinear_interp_numpy(B, indices) values_4d = map_coordinates_3d_4d(B, indices) npt.assert_almost_equal(values, values_4d) if __name__ == '__main__': npt.run_module_suite() dipy-0.10.1/dipy/viz/tests/test_fvtk_widgets.py000066400000000000000000000134131263041327500215730ustar00rootroot00000000000000import os import numpy as np from dipy.viz import actor, window, widget, fvtk from dipy.data import fetch_viz_icons, read_viz_icons import numpy.testing as npt from dipy.testing.decorators import xvfb_it use_xvfb = os.environ.get('TEST_WITH_XVFB', False) if use_xvfb == 'skip': skip_it = True else: skip_it = False @npt.dec.skipif(not actor.have_vtk or not actor.have_vtk_colors or skip_it) @xvfb_it def test_button_and_slider_widgets(): interactive = False renderer = window.Renderer() # create some minimalistic streamlines lines = [np.array([[-1, 0, 0.], [1, 0, 0.]]), np.array([[-1, 1, 0.], [1, 1, 0.]])] colors = np.array([[1., 0., 0.], [0.3, 0.7, 0.]]) stream_actor = actor.streamtube(lines, colors) renderer.add(stream_actor) # the show manager allows to break the rendering process # in steps so that the widgets can be added properly show_manager = window.ShowManager(renderer, size=(800, 800)) if interactive: show_manager.initialize() show_manager.render() def button_callback(obj, event): print('Camera pressed') def button_plus_callback(obj, event): print('+ pressed') def button_minus_callback(obj, event): print('- pressed') fetch_viz_icons() button_png = read_viz_icons(fname='camera.png') button = widget.button(show_manager.iren, show_manager.ren, button_callback, button_png, (.98, 1.), (80, 50)) button_png_plus = read_viz_icons(fname='plus.png') button_plus = widget.button(show_manager.iren, show_manager.ren, button_plus_callback, button_png_plus, (.98, .9), (120, 50)) button_png_minus = read_viz_icons(fname='minus.png') button_minus = widget.button(show_manager.iren, show_manager.ren, button_minus_callback, button_png_minus, (.98, .9), (50, 50)) def print_status(obj, event): rep = obj.GetRepresentation() stream_actor.SetPosition((rep.GetValue(), 0, 0)) slider = widget.slider(show_manager.iren, show_manager.ren, callback=print_status, min_value=-1, max_value=1, value=0., label="X", right_normalized_pos=(.98, 0.6), size=(120, 0), label_format="%0.2lf") # This callback is used to update the buttons/sliders' position # so they can stay on the right side of the window when the window # is being resized. global size size = renderer.GetSize() def win_callback(obj, event): global size if size != obj.GetSize(): button.place(renderer) button_plus.place(renderer) button_minus.place(renderer) slider.place(renderer) size = obj.GetSize() if interactive: # show_manager.add_window_callback(win_callback) # you can also register any callback in a vtk way like this # show_manager.window.AddObserver(vtk.vtkCommand.ModifiedEvent, # win_callback) show_manager.render() show_manager.start() if not interactive: button.Off() slider.Off() # Uncomment below to test the slider and button with analyze # button.place(renderer) # slider.place(renderer) arr = window.snapshot(renderer, size=(800, 800)) report = window.analyze_snapshot(arr) npt.assert_equal(report.objects, 2) # imshow(report.labels, origin='lower') report = window.analyze_renderer(renderer) npt.assert_equal(report.actors, 1) @npt.dec.skipif(not actor.have_vtk or not actor.have_vtk_colors or skip_it) @xvfb_it def test_text_widget(): interactive = False renderer = window.Renderer() axes = fvtk.axes() window.add(renderer, axes) renderer.ResetCamera() show_manager = window.ShowManager(renderer, size=(900, 900)) if interactive: show_manager.initialize() show_manager.render() fetch_viz_icons() button_png = read_viz_icons(fname='home3.png') def button_callback(obj, event): print('Button Pressed') button = widget.button(show_manager.iren, show_manager.ren, button_callback, button_png, (.8, 1.2), (100, 100)) global rulez rulez = True def text_callback(obj, event): global rulez print('Text selected') if rulez: obj.GetTextActor().SetInput("Diffusion Imaging Rulez!!") rulez = False else: obj.GetTextActor().SetInput("Diffusion Imaging in Python") rulez = True show_manager.render() text = widget.text(show_manager.iren, show_manager.ren, text_callback, message="Diffusion Imaging in Python", left_down_pos=(0., 0.), right_top_pos=(0.4, 0.05), opacity=1., border=False) if not interactive: button.Off() text.Off() pass if interactive: show_manager.render() show_manager.start() arr = window.snapshot(renderer, size=(900, 900)) report = window.analyze_snapshot(arr) npt.assert_equal(report.objects, 3) # If you want to see the segmented objects after the analysis is finished # you can use imshow(report.labels, origin='lower') if __name__ == '__main__': npt.run_module_suite() dipy-0.10.1/dipy/viz/tests/test_fvtk_window.py000066400000000000000000000147531263041327500214440ustar00rootroot00000000000000import os import numpy as np from dipy.viz import actor, window import numpy.testing as npt from dipy.testing.decorators import xvfb_it use_xvfb = os.environ.get('TEST_WITH_XVFB', False) if use_xvfb == 'skip': skip_it = True else: skip_it = False @npt.dec.skipif(not actor.have_vtk or not actor.have_vtk_colors or skip_it) @xvfb_it def test_renderer(): ren = window.Renderer() # background color for renderer (1, 0.5, 0) # 0.001 added here to remove numerical errors when moving from float # to int values bg_float = (1, 0.501, 0) # that will come in the image in the 0-255 uint scale bg_color = tuple((np.round(255 * np.array(bg_float))).astype('uint8')) ren.background(bg_float) # window.show(ren) arr = window.snapshot(ren) report = window.analyze_snapshot(arr, bg_color=bg_color, colors=[bg_color, (0, 127, 0)]) npt.assert_equal(report.objects, 0) npt.assert_equal(report.colors_found, [True, False]) axes = actor.axes() ren.add(axes) # window.show(ren) arr = window.snapshot(ren) report = window.analyze_snapshot(arr, bg_color) npt.assert_equal(report.objects, 1) ren.rm(axes) arr = window.snapshot(ren) report = window.analyze_snapshot(arr, bg_color) npt.assert_equal(report.objects, 0) window.add(ren, axes) arr = window.snapshot(ren) report = window.analyze_snapshot(arr, bg_color) npt.assert_equal(report.objects, 1) ren.rm_all() arr = window.snapshot(ren) report = window.analyze_snapshot(arr, bg_color) npt.assert_equal(report.objects, 0) ren2 = window.renderer(bg_float) ren2.background((0, 0, 0.)) report = window.analyze_renderer(ren2) npt.assert_equal(report.bg_color, (0, 0, 0)) ren2.add(axes) report = window.analyze_renderer(ren2) npt.assert_equal(report.actors, 3) window.rm(ren2, axes) report = window.analyze_renderer(ren2) npt.assert_equal(report.actors, 0) @npt.dec.skipif(not actor.have_vtk or not actor.have_vtk_colors or skip_it) @xvfb_it def test_active_camera(): renderer = window.Renderer() renderer.add(actor.axes(scale=(1, 1, 1))) renderer.reset_camera() renderer.reset_clipping_range() direction = renderer.camera_direction() position, focal_point, view_up = renderer.get_camera() renderer.set_camera((0., 0., 1.), (0., 0., 0), view_up) position, focal_point, view_up = renderer.get_camera() npt.assert_almost_equal(np.dot(direction, position), -1) renderer.zoom(1.5) new_position, _, _ = renderer.get_camera() npt.assert_array_almost_equal(position, new_position) renderer.zoom(1) # rotate around focal point renderer.azimuth(90) position, _, _ = renderer.get_camera() npt.assert_almost_equal(position, (1.0, 0.0, 0)) arr = window.snapshot(renderer) report = window.analyze_snapshot(arr, colors=[(255, 0, 0)]) npt.assert_equal(report.colors_found, [True]) # rotate around camera's center renderer.yaw(90) arr = window.snapshot(renderer) report = window.analyze_snapshot(arr, colors=[(0, 0, 0)]) npt.assert_equal(report.colors_found, [True]) renderer.yaw(-90) renderer.elevation(90) arr = window.snapshot(renderer) report = window.analyze_snapshot(arr, colors=(0, 255, 0)) npt.assert_equal(report.colors_found, [True]) renderer.set_camera((0., 0., 1.), (0., 0., 0), view_up) # vertical rotation of the camera around the focal point renderer.pitch(10) renderer.pitch(-10) # rotate around the direction of projection renderer.roll(90) # inverted normalized distance from focal point along the direction # of the camera position, _, _ = renderer.get_camera() renderer.dolly(0.5) new_position, _, _ = renderer.get_camera() npt.assert_almost_equal(position[2], 0.5 * new_position[2]) @npt.dec.skipif(not actor.have_vtk or not actor.have_vtk_colors or skip_it) @xvfb_it def test_parallel_projection(): ren = window.Renderer() axes = actor.axes() ren.add(axes) axes2 = actor.axes() axes2.SetPosition((2, 0, 0)) ren.add(axes2) # Put the camera on a angle so that the # camera can show the difference between perspective # and parallel projection ren.set_camera((1.5, 1.5, 1.5)) ren.GetActiveCamera().Zoom(2) # window.show(ren, reset_camera=True) ren.reset_camera() arr = window.snapshot(ren) ren.projection('parallel') # window.show(ren, reset_camera=False) arr2 = window.snapshot(ren) # Because of the parallel projection the two axes # will have the same size and therefore occupy more # pixels rather than in perspective projection were # the axes being further will be smaller. npt.assert_equal(np.sum(arr2 > 0) > np.sum(arr > 0), True) @npt.dec.skipif(not actor.have_vtk or not actor.have_vtk_colors or skip_it) @xvfb_it def test_order_transparent(): renderer = window.Renderer() lines = [np.array([[-1, 0, 0.], [1, 0, 0.]]), np.array([[-1, 1, 0.], [1, 1, 0.]])] colors = np.array([[1., 0., 0.], [0., .5, 0.]]) stream_actor = actor.streamtube(lines, colors, linewidth=0.3, opacity=0.5) renderer.add(stream_actor) renderer.reset_camera() # green in front renderer.elevation(90) renderer.camera().OrthogonalizeViewUp() renderer.reset_clipping_range() renderer.reset_camera() not_xvfb = os.environ.get("TEST_WITH_XVFB", False) if not_xvfb: arr = window.snapshot(renderer, fname='green_front.png', offscreen=True, order_transparent=False) else: arr = window.snapshot(renderer, fname='green_front.png', offscreen=False, order_transparent=False) # therefore the green component must have a higher value (in RGB terms) npt.assert_equal(arr[150, 150][1] > arr[150, 150][0], True) # red in front renderer.elevation(-180) renderer.camera().OrthogonalizeViewUp() renderer.reset_clipping_range() if not_xvfb: arr = window.snapshot(renderer, fname='red_front.png', offscreen=True, order_transparent=True) else: arr = window.snapshot(renderer, fname='red_front.png', offscreen=False, order_transparent=True) # therefore the red component must have a higher value (in RGB terms) npt.assert_equal(arr[150, 150][0] > arr[150, 150][1], True) if __name__ == '__main__': npt.run_module_suite() dipy-0.10.1/dipy/viz/tests/test_regtools.py000066400000000000000000000027011263041327500207270ustar00rootroot00000000000000import numpy as np from dipy.viz import regtools import numpy.testing as npt from dipy.align.metrics import SSDMetric from dipy.align.imwarp import SymmetricDiffeomorphicRegistration # Conditional import machinery for matplotlib from dipy.utils.optpkg import optional_package _, have_matplotlib, _ = optional_package('matplotlib') @npt.dec.skipif(not have_matplotlib) def test_plot_2d_diffeomorphic_map(): # Test the regtools plotting interface (lightly). mv_shape = (11, 12) moving = np.random.rand(*mv_shape) st_shape = (13, 14) static = np.random.rand(*st_shape) dim = static.ndim metric = SSDMetric(dim) level_iters = [200, 100, 50, 25] sdr = SymmetricDiffeomorphicRegistration(metric, level_iters, inv_iter=50) mapping = sdr.optimize(static, moving) # Smoke testing of plots ff = regtools.plot_2d_diffeomorphic_map(mapping, 10) # Defualt shape is static shape, moving shape npt.assert_equal(ff[0].shape, st_shape) npt.assert_equal(ff[1].shape, mv_shape) # Can specify shape ff = regtools.plot_2d_diffeomorphic_map(mapping, delta = 10, direct_grid_shape=(7, 8), inverse_grid_shape=(9, 10)) npt.assert_equal(ff[0].shape, (7, 8)) npt.assert_equal(ff[1].shape, (9, 10)) dipy-0.10.1/dipy/viz/utils.py000066400000000000000000000165741263041327500160450ustar00rootroot00000000000000 from __future__ import division, print_function, absolute_import import numpy as np from scipy.ndimage import map_coordinates from dipy.viz.colormap import line_colors # Conditional import machinery for vtk from dipy.utils.optpkg import optional_package # import vtk # Allow import, but disable doctests if we don't have vtk vtk, have_vtk, setup_module = optional_package('vtk') ns, have_numpy_support, _ = optional_package('vtk.util.numpy_support') def numpy_to_vtk_points(points): """ Numpy points array to a vtk points array Parameters ---------- points : ndarray Returns ------- vtk_points : vtkPoints() """ vtk_points = vtk.vtkPoints() vtk_points.SetData(ns.numpy_to_vtk(np.asarray(points), deep=True)) return vtk_points def numpy_to_vtk_colors(colors): """ Numpy color array to a vtk color array Parameters ---------- colors: ndarray Returns ------- vtk_colors : vtkDataArray Notes ----- If colors are not already in UNSIGNED_CHAR you may need to multiply by 255. Examples -------- >>> import numpy as np >>> from dipy.viz.utils import numpy_to_vtk_colors >>> rgb_array = np.random.rand(100, 3) >>> vtk_colors = numpy_to_vtk_colors(255 * rgb_array) """ vtk_colors = ns.numpy_to_vtk(np.asarray(colors), deep=True, array_type=vtk.VTK_UNSIGNED_CHAR) return vtk_colors def set_input(vtk_object, inp): """ Generic input function which takes into account VTK 5 or 6 Parameters ---------- vtk_object: vtk object inp: vtkPolyData or vtkImageData or vtkAlgorithmOutput Returns ------- vtk_object Notes ------- This can be used in the following way:: from dipy.viz.utils import set_input poly_mapper = set_input(vtk.vtkPolyDataMapper(), poly_data) """ if isinstance(inp, vtk.vtkPolyData) \ or isinstance(inp, vtk.vtkImageData): if vtk.VTK_MAJOR_VERSION <= 5: vtk_object.SetInput(inp) else: vtk_object.SetInputData(inp) elif isinstance(inp, vtk.vtkAlgorithmOutput): vtk_object.SetInputConnection(inp) vtk_object.Update() return vtk_object def map_coordinates_3d_4d(input_array, indices): """ Evaluate the input_array data at the given indices using trilinear interpolation Parameters ---------- input_array : ndarray, 3D or 4D array indices : ndarray Returns ------- output : ndarray 1D or 2D array """ if input_array.ndim <= 2 or input_array.ndim >= 5: raise ValueError("Input array can only be 3d or 4d") if input_array.ndim == 3: return map_coordinates(input_array, indices.T, order=1) if input_array.ndim == 4: values_4d = [] for i in range(input_array.shape[-1]): values_tmp = map_coordinates(input_array[..., i], indices.T, order=1) values_4d.append(values_tmp) return np.ascontiguousarray(np.array(values_4d).T) def lines_to_vtk_polydata(lines, colors=None): """ Create a vtkPolyData with lines and colors Parameters ---------- lines : list list of N curves represented as 2D ndarrays colors : array (N, 3), list of arrays, tuple (3,), array (K,), None If None then a standard orientation colormap is used for every line. If one tuple of color is used. Then all streamlines will have the same colour. If an array (N, 3) is given, where N is equal to the number of lines. Then every line is coloured with a different RGB color. If a list of RGB arrays is given then every point of every line takes a different color. If an array (K,) is given, where K is the number of points of all lines then these are considered as the values to be used by the colormap. If an array (L,) is given, where L is the number of streamlines then these are considered as the values to be used by the colormap per streamline. If an array (X, Y, Z) or (X, Y, Z, 3) is given then the values for the colormap are interpolated automatically using trilinear interpolation. Returns ------- poly_data : vtkPolyData is_colormap : bool, true if the input color array was a colormap """ # Get the 3d points_array points_array = np.vstack(lines) nb_lines = len(lines) nb_points = len(points_array) lines_range = range(nb_lines) # Get lines_array in vtk input format lines_array = [] # Using np.intp (instead of int64), because of a bug in numpy: # https://github.com/nipy/dipy/pull/789 # https://github.com/numpy/numpy/issues/4384 points_per_line = np.zeros([nb_lines], np.intp) current_position = 0 for i in lines_range: current_len = len(lines[i]) points_per_line[i] = current_len end_position = current_position + current_len lines_array += [current_len] lines_array += range(current_position, end_position) current_position = end_position lines_array = np.array(lines_array) # Set Points to vtk array format vtk_points = numpy_to_vtk_points(points_array) # Set Lines to vtk array format vtk_lines = vtk.vtkCellArray() vtk_lines.GetData().DeepCopy(ns.numpy_to_vtk(lines_array)) vtk_lines.SetNumberOfCells(nb_lines) is_colormap = False # Get colors_array (reformat to have colors for each points) # - if/else tested and work in normal simple case if colors is None: # set automatic rgb colors cols_arr = line_colors(lines) colors_mapper = np.repeat(lines_range, points_per_line, axis=0) vtk_colors = numpy_to_vtk_colors(255 * cols_arr[colors_mapper]) else: cols_arr = np.asarray(colors) if cols_arr.dtype == np.object: # colors is a list of colors vtk_colors = numpy_to_vtk_colors(255 * np.vstack(colors)) else: if len(cols_arr) == nb_points: vtk_colors = ns.numpy_to_vtk(cols_arr, deep=True) is_colormap = True elif cols_arr.ndim == 1: if len(cols_arr) == nb_lines: # values for every streamline cols_arrx = [] for (i, value) in enumerate(colors): cols_arrx += lines[i].shape[0]*[value] cols_arrx = np.array(cols_arrx) vtk_colors = ns.numpy_to_vtk(cols_arrx, deep=True) is_colormap = True else: # the same colors for all points vtk_colors = numpy_to_vtk_colors( np.tile(255 * cols_arr, (nb_points, 1))) elif cols_arr.ndim == 2: # map color to each line colors_mapper = np.repeat(lines_range, points_per_line, axis=0) vtk_colors = numpy_to_vtk_colors(255 * cols_arr[colors_mapper]) else: # colormap # get colors for each vertex cols_arr = map_coordinates_3d_4d(cols_arr, points_array) vtk_colors = ns.numpy_to_vtk(cols_arr, deep=True) is_colormap = True vtk_colors.SetName("Colors") # Create the poly_data poly_data = vtk.vtkPolyData() poly_data.SetPoints(vtk_points) poly_data.SetLines(vtk_lines) poly_data.GetPointData().SetScalars(vtk_colors) return poly_data, is_colormap dipy-0.10.1/dipy/viz/widget.py000066400000000000000000000271601263041327500161610ustar00rootroot00000000000000# Widgets are different than actors in that they can interact with events # To do so they need as input a vtkRenderWindowInteractor also known as iren. import numpy as np # Conditional import machinery for vtk from dipy.utils.optpkg import optional_package # Allow import, but disable doctests if we don't have vtk vtk, have_vtk, setup_module = optional_package('vtk') colors, have_vtk_colors, _ = optional_package('vtk.util.colors') numpy_support, have_ns, _ = optional_package('vtk.util.numpy_support') def slider(iren, ren, callback, min_value=0, max_value=255, value=125, label="Slider", right_normalized_pos=(0.9, 0.5), size=(50, 0), label_format="%0.0lf", color=(0.5, 0.5, 0.5), selected_color = (0.9, 0.2, 0.1)): """ A 2D slider widget Parameters ---------- iren : vtkRenderWindowInteractor Used to process events and handle them to the slider. Can also be given by the attribute ``ShowManager.iren``. ren : vtkRenderer or Renderer Used to update the slider's position when the window changes. Can also be given by the ``ShowManager.ren`` attribute. callback : function Function that has at least ``obj`` and ``event`` as parameters. It will be called when the slider's bar has changed. min_value : float Minimum value of slider. max_value : float Maximum value of slider. value : Default value of slider. label : str Slider's caption. right_normalized_pos : tuple 2d tuple holding the normalized right (X, Y) position of the slider. size: tuple 2d tuple holding the size of the slider in pixels. label_format: str Formating in which the slider's value will appear for example "%0.2lf" allows for 2 decimal values. Returns ------- slider : SliderObject This object inherits from vtkSliderWidget and has additional method called ``place`` which allows to update the position of the slider when for example the window is resized. """ slider_rep = vtk.vtkSliderRepresentation2D() slider_rep.SetMinimumValue(min_value) slider_rep.SetMaximumValue(max_value) slider_rep.SetValue(value) slider_rep.SetTitleText(label) slider_rep.GetPoint2Coordinate().SetCoordinateSystemToNormalizedDisplay() slider_rep.GetPoint2Coordinate().SetValue(*right_normalized_pos) coord2 = slider_rep.GetPoint2Coordinate().GetComputedDisplayValue(ren) slider_rep.GetPoint1Coordinate().SetCoordinateSystemToDisplay() slider_rep.GetPoint1Coordinate().SetValue(coord2[0] - size[0], coord2[1] - size[1]) initial_window_size = ren.GetSize() length = 0.04 width = 0.04 cap_length = 0.01 cap_width = 0.01 tube_width = 0.005 slider_rep.SetSliderLength(length) slider_rep.SetSliderWidth(width) slider_rep.SetEndCapLength(cap_length) slider_rep.SetEndCapWidth(cap_width) slider_rep.SetTubeWidth(tube_width) slider_rep.SetLabelFormat(label_format) slider_rep.GetLabelProperty().SetColor(*color) slider_rep.GetTubeProperty().SetColor(*color) slider_rep.GetCapProperty().SetColor(*color) slider_rep.GetTitleProperty().SetColor(*color) slider_rep.GetSelectedProperty().SetColor(*selected_color) slider_rep.GetSliderProperty().SetColor(*color) slider_rep.GetLabelProperty().SetShadow(0) slider_rep.GetTitleProperty().SetShadow(0) class SliderWidget(vtk.vtkSliderWidget): def place(self, ren): slider_rep = self.GetRepresentation() coord2_norm = slider_rep.GetPoint2Coordinate() coord2_norm.SetCoordinateSystemToNormalizedDisplay() coord2_norm.SetValue(*right_normalized_pos) coord2 = coord2_norm.GetComputedDisplayValue(ren) slider_rep.GetPoint1Coordinate().SetCoordinateSystemToDisplay() slider_rep.GetPoint1Coordinate().SetValue(coord2[0] - size[0], coord2[1] - size[1]) window_size = ren.GetSize() length = initial_window_size[0] * 0.04 / window_size[0] width = initial_window_size[1] * 0.04 / window_size[1] slider_rep.SetSliderLength(length) slider_rep.SetSliderWidth(width) def set_value(self, value): return self.GetSliderRepresentation().SetValue(value) def get_value(self): return self.GetSliderRepresentation().GetValue() slider = SliderWidget() slider.SetInteractor(iren) slider.SetRepresentation(slider_rep) slider.SetAnimationModeToAnimate() slider.KeyPressActivationOff() slider.AddObserver("InteractionEvent", callback) slider.SetEnabled(True) # Place widget after window resizing. def _place_widget(obj, event): slider.place(ren) iren.GetRenderWindow().AddObserver(vtk.vtkCommand.StartEvent, _place_widget) iren.GetRenderWindow().AddObserver(vtk.vtkCommand.ModifiedEvent, _place_widget) return slider def button_display_coordinates(renderer, normalized_display_position, size): upperRight = vtk.vtkCoordinate() upperRight.SetCoordinateSystemToNormalizedDisplay() upperRight.SetValue(normalized_display_position[0], normalized_display_position[1]) bds = [0.0] * 6 bds[0] = upperRight.GetComputedDisplayValue(renderer)[0] - size[0] bds[1] = bds[0] + size[0] bds[2] = upperRight.GetComputedDisplayValue(renderer)[1] - size[1] bds[3] = bds[2] + size[1] return bds def button(iren, ren, callback, fname, right_normalized_pos=(.98, .9), size=(50, 50)): """ A textured two state button widget Parameters ---------- iren : vtkRenderWindowInteractor Used to process events and handle them to the button. Can also be given by the attribute ``ShowManager.iren``. ren : vtkRenderer or Renderer Used to update the slider's position when the window changes. Can also be given by the ``ShowManager.ren`` attribute. callback : function Function that has at least ``obj`` and ``event`` as parameters. It will be called when the button is pressed. fname : str PNG file path of the icon used for the button. right_normalized_pos : tuple 2d tuple holding the normalized right (X, Y) position of the slider. size: tuple 2d tuple holding the size of the slider in pixels. Returns ------- button : ButtonWidget This object inherits from vtkButtonWidget and has an additional method called ``place`` which allows to update the position of the slider if necessary. For example when the renderer size changes. Notes ------ The button and slider widgets have similar positioning system. This enables the developers to create a HUD-like collections of buttons and sliders on the right side of the window that always stays in place when the dimensions of the window change. """ image1 = vtk.vtkPNGReader() image1.SetFileName(fname) image1.Update() button_rep = vtk.vtkTexturedButtonRepresentation2D() button_rep.SetNumberOfStates(2) button_rep.SetButtonTexture(0, image1.GetOutput()) button_rep.SetButtonTexture(1, image1.GetOutput()) class ButtonWidget(vtk.vtkButtonWidget): def place(self, renderer): bds = button_display_coordinates(renderer, right_normalized_pos, size) self.GetRepresentation().SetPlaceFactor(1) self.GetRepresentation().PlaceWidget(bds) self.On() button = ButtonWidget() button.SetInteractor(iren) button.SetRepresentation(button_rep) button.AddObserver(vtk.vtkCommand.StateChangedEvent, callback) # Place widget after window resizing. def _place_widget(obj, event): button.place(ren) iren.GetRenderWindow().AddObserver(vtk.vtkCommand.StartEvent, _place_widget) iren.GetRenderWindow().AddObserver(vtk.vtkCommand.ModifiedEvent, _place_widget) return button def text(iren, ren, callback, message="DIPY", left_down_pos=(0.8, 0.5), right_top_pos=(0.9, 0.5), color=(1., .5, .0), opacity=1., border=False): """ 2D text that can be clicked and process events Parameters ---------- iren : vtkRenderWindowInteractor Used to process events and handle them to the button. Can also be given by the attribute ``ShowManager.iren``. ren : vtkRenderer or Renderer Used to update the slider's position when the window changes. Can also be given by the ``ShowManager.ren`` attribute. callback : function Function that has at least ``obj`` and ``event`` as parameters. It will be called when the button is pressed. message : str Message to be shown in the text widget left_down_pos : tuple Coordinates for left down corner of text. If float are provided, the normalized coordinate system is used, otherwise the coordinates represent pixel positions. Default is (0.8, 0.5). right_top_pos : tuple Coordinates for right top corner of text. If float are provided, the normalized coordinate system is used, otherwise the coordinates represent pixel positions. Default is (0.9, 0.5). color : tuple Foreground RGB color of text. Default is (1., .5, .0). opacity : float Takes values from 0 to 1. Default is 1. border : bool Show text border. Default is False. Returns ------- text : TextWidget This object inherits from ``vtkTextWidget`` has an additional method called ``place`` which allows to update the position of the text if necessary. """ # Create the TextActor text_actor = vtk.vtkTextActor() text_actor.SetInput(message) text_actor.GetTextProperty().SetColor(color) text_actor.GetTextProperty().SetOpacity(opacity) # Create the text representation. Used for positioning the text_actor text_rep = vtk.vtkTextRepresentation() text_rep.SetTextActor(text_actor) if border: text_rep.SetShowBorderToOn() else: text_rep.SetShowBorderToOff() class TextWidget(vtk.vtkTextWidget): def place(self, renderer): text_rep = self.GetRepresentation() position = text_rep.GetPositionCoordinate() position2 = text_rep.GetPosition2Coordinate() # The dtype of `left_down_pos` determines coordinate system type. if np.issubdtype(np.asarray(left_down_pos).dtype, np.integer): position.SetCoordinateSystemToDisplay() else: position.SetCoordinateSystemToNormalizedDisplay() # The dtype of `right_top_pos` determines coordinate system type. if np.issubdtype(np.asarray(right_top_pos).dtype, np.integer): position2.SetCoordinateSystemToDisplay() else: position2.SetCoordinateSystemToNormalizedDisplay() position.SetValue(*left_down_pos) position2.SetValue(*right_top_pos) text_widget = TextWidget() text_widget.SetRepresentation(text_rep) text_widget.SetInteractor(iren) text_widget.SelectableOn() text_widget.ResizableOff() text_widget.AddObserver(vtk.vtkCommand.WidgetActivateEvent, callback) # Place widget after window resizing. def _place_widget(obj, event): text_widget.place(ren) iren.GetRenderWindow().AddObserver(vtk.vtkCommand.StartEvent, _place_widget) iren.GetRenderWindow().AddObserver(vtk.vtkCommand.ModifiedEvent, _place_widget) text_widget.On() return text_widget dipy-0.10.1/dipy/viz/window.py000066400000000000000000000630711263041327500162060ustar00rootroot00000000000000from __future__ import division, print_function, absolute_import import numpy as np from scipy import ndimage from copy import copy try: import Tkinter as tkinter has_tkinter = True except ImportError: try: import tkinter has_tkinter = True except ImportError: has_tkinter = False try: import tkFileDialog as filedialog except ImportError: try: from tkinter import filedialog except ImportError: has_tkinter = False # Conditional import machinery for vtk from dipy.utils.optpkg import optional_package from dipy import __version__ as dipy_version from dipy.utils.six import string_types # import vtk # Allow import, but disable doctests if we don't have vtk vtk, have_vtk, setup_module = optional_package('vtk') colors, have_vtk_colors, _ = optional_package('vtk.util.colors') numpy_support, have_ns, _ = optional_package('vtk.util.numpy_support') _, have_imread, _ = optional_package('Image') if have_vtk: version = vtk.vtkVersion.GetVTKSourceVersion().split(' ')[-1] major_version = vtk.vtkVersion.GetVTKMajorVersion() from vtk.util.numpy_support import vtk_to_numpy vtkRenderer = vtk.vtkRenderer else: vtkRenderer = object if have_imread: from scipy.misc import imread class Renderer(vtkRenderer): """ Your scene class This is an important object that is responsible for preparing objects e.g. actors and volumes for rendering. This is a more pythonic version of ``vtkRenderer`` proving simple methods for adding and removing actors but also it provides access to all the functionality available in ``vtkRenderer`` if necessary. """ def background(self, color): """ Set a background color """ self.SetBackground(color) def add(self, actor): """ Add an actor to the renderer """ if isinstance(actor, vtk.vtkVolume): self.AddVolume(actor) else: self.AddActor(actor) def rm(self, actor): """ Remove a specific actor """ self.RemoveActor(actor) def clear(self): """ Remove all actors from the renderer """ self.RemoveAllViewProps() def rm_all(self): """ Remove all actors from the renderer """ self.RemoveAllViewProps() def projection(self, proj_type='perspective'): """ Deside between parallel or perspective projection Parameters ---------- proj_type : str Can be 'parallel' or 'perspective' (default). """ if proj_type == 'parallel': self.GetActiveCamera().ParallelProjectionOn() else: self.GetActiveCamera().ParallelProjectionOff() def reset_camera(self): """ Reset the camera to an automatic position given by the engine. """ self.ResetCamera() def reset_clipping_range(self): self.ResetCameraClippingRange() def camera(self): return self.GetActiveCamera() def get_camera(self): cam = self.GetActiveCamera() return cam.GetPosition(), cam.GetFocalPoint(), cam.GetViewUp() def camera_info(self): cam = self.camera() print('# Active Camera') print(' Position (%.2f, %.2f, %.2f)' % cam.GetPosition()) print(' Focal Point (%.2f, %.2f, %.2f)' % cam.GetFocalPoint()) print(' View Up (%.2f, %.2f, %.2f)' % cam.GetViewUp()) def set_camera(self, position=None, focal_point=None, view_up=None): if position is not None: self.GetActiveCamera().SetPosition(*position) if focal_point is not None: self.GetActiveCamera().SetFocalPoint(*focal_point) if view_up is not None: self.GetActiveCamera().SetViewUp(*view_up) self.ResetCameraClippingRange() def size(self): """ Renderer size""" return self.GetSize() def zoom(self, value): """ In perspective mode, decrease the view angle by the specified factor. In parallel mode, decrease the parallel scale by the specified factor. A value greater than 1 is a zoom-in, a value less than 1 is a zoom-out. """ self.GetActiveCamera().Zoom(value) def azimuth(self, angle): """ Rotate the camera about the view up vector centered at the focal point. Note that the view up vector is whatever was set via SetViewUp, and is not necessarily perpendicular to the direction of projection. The result is a horizontal rotation of the camera. """ self.GetActiveCamera().Azimuth(angle) def yaw(self, angle): """ Rotate the focal point about the view up vector, using the camera's position as the center of rotation. Note that the view up vector is whatever was set via SetViewUp, and is not necessarily perpendicular to the direction of projection. The result is a horizontal rotation of the scene. """ self.GetActiveCamera().Yaw(angle) def elevation(self, angle): """ Rotate the camera about the cross product of the negative of the direction of projection and the view up vector, using the focal point as the center of rotation. The result is a vertical rotation of the scene. """ self.GetActiveCamera().Elevation(angle) def pitch(self, angle): """ Rotate the focal point about the cross product of the view up vector and the direction of projection, using the camera's position as the center of rotation. The result is a vertical rotation of the camera. """ self.GetActiveCamera().Pitch(angle) def roll(self, angle): """ Rotate the camera about the direction of projection. This will spin the camera about its axis. """ self.GetActiveCamera().Roll(angle) def dolly(self, value): """ Divide the camera's distance from the focal point by the given dolly value. Use a value greater than one to dolly-in toward the focal point, and use a value less than one to dolly-out away from the focal point. """ self.GetActiveCamera().Dolly(value) def camera_direction(self): """ Get the vector in the direction from the camera position to the focal point. This is usually the opposite of the ViewPlaneNormal, the vector perpendicular to the screen, unless the view is oblique. """ return self.GetActiveCamera().GetDirectionOfProjection() def renderer(background=None): """ Create a renderer. Parameters ---------- background : tuple Initial background color of renderer Returns ------- v : Renderer Examples -------- >>> from dipy.viz import fvtk >>> import numpy as np >>> r=fvtk.ren() >>> lines=[np.random.rand(10,3)] >>> c=fvtk.line(lines, fvtk.colors.red) >>> fvtk.add(r,c) >>> #fvtk.show(r) """ ren = Renderer() if background is not None: ren.SetBackground(background) return ren if have_vtk: ren = renderer def add(ren, a): """ Add a specific actor """ ren.add(a) def rm(ren, a): """ Remove a specific actor """ ren.rm(a) def clear(ren): """ Remove all actors from the renderer """ ren.clear() def rm_all(ren): """ Remove all actors from the renderer """ ren.rm_all() def open_file_dialog(file_types=[("All files", "*")]): """ Simple Tk file dialog for opening files Parameters ---------- file_types : tuples of tuples Accepted file types. Returns ------- file_paths : sequence of str Returns the full paths of all selected files """ root = tkinter.Tk() root.withdraw() file_paths = filedialog.askopenfilenames(filetypes=file_types) return file_paths def save_file_dialog(initial_file='dipy.png', default_ext='.png', file_types=(("PNG file", "*.png"), ("All Files", "*.*"))): """ Simple Tk file dialog for saving a file Parameters ---------- initial_file : str For example ``dipy.png``. default_ext : str Default extension to appear in the save dialog. file_types : tuples of tuples Accepted file types. Returns ------- filepath : str Complete filename of saved file """ root = tkinter.Tk() root.withdraw() file_path = filedialog.asksaveasfilename(initialfile=initial_file, defaultextension=default_ext, filetypes=file_types) return file_path class ShowManager(object): """ This class is the interface between the renderer, the window and the interactor. """ def __init__(self, ren, title='DIPY', size=(300, 300), png_magnify=1, reset_camera=True, order_transparent=False, interactor_style='trackball'): """ Manages the visualization pipeline Parameters ---------- ren : Renderer() or vtkRenderer() The scene that holds all the actors. title : string A string for the window title bar. size : (int, int) ``(width, height)`` of the window. Default is (300, 300). png_magnify : int Number of times to magnify the screenshot. This can be used to save high resolution screenshots when pressing 's' inside the window. reset_camera : bool Default is True. You can change this option to False if you want to keep the camera as set before calling this function. order_transparent : bool True is useful when you want to order transparent actors according to their relative position to the camera. The default option which is False will order the actors according to the order of their addition to the Renderer(). interactor_style : str or vtkInteractorStyle If str then if 'trackball' then vtkInteractorStyleTrackballCamera() is used or if 'image' then vtkInteractorStyleImage() is used (no rotation). Otherwise you can input your own interactor style. Attributes ---------- ren : vtkRenderer() iren : vtkRenderWindowInteractor() style : vtkInteractorStyle() window : vtkRenderWindow() Methods ------- initialize() render() start() add_window_callback() Notes ----- Default interaction keys for * 3d navigation are with left, middle and right mouse dragging * resetting the camera press 'r' * saving a screenshot press 's' * for quiting press 'q' Examples -------- >>> from dipy.viz import actor, window >>> renderer = window.Renderer() >>> renderer.add(actor.axes()) >>> showm = window.ShowManager(renderer) >>> # showm.initialize() >>> # showm.render() >>> # showm.start() """ self.ren = ren self.title = title self.size = size self.png_magnify = png_magnify self.reset_camera = reset_camera self.order_transparent = order_transparent self.interactor_style = interactor_style if self.reset_camera: self.ren.ResetCamera() self.window = vtk.vtkRenderWindow() self.window.AddRenderer(ren) if self.title == 'DIPY': self.window.SetWindowName(title + ' ' + dipy_version) else: self.window.SetWindowName(title) self.window.SetSize(size[0], size[1]) if self.order_transparent: # Use a render window with alpha bits # as default is 0 (false)) self.window.SetAlphaBitPlanes(True) # Force to not pick a framebuffer with a multisample buffer # (default is 8) self.window.SetMultiSamples(0) # Choose to use depth peeling (if supported) # (default is 0 (false)): self.ren.UseDepthPeelingOn() # Set depth peeling parameters # Set the maximum number of rendering passes (default is 4) ren.SetMaximumNumberOfPeels(4) # Set the occlusion ratio (initial value is 0.0, exact image): ren.SetOcclusionRatio(0.0) if self.interactor_style == 'image': self.style = vtk.vtkInteractorStyleImage() elif self.interactor_style == 'trackball': self.style = vtk.vtkInteractorStyleTrackballCamera() else: self.style = interactor_style self.iren = vtk.vtkRenderWindowInteractor() self.iren.SetRenderWindow(self.window) def key_press_standard(obj, event): key = obj.GetKeySym() if key == 's' or key == 'S': print('Saving image...') renderLarge = vtk.vtkRenderLargeImage() if major_version <= 5: renderLarge.SetInput(ren) else: renderLarge.SetInput(ren) renderLarge.SetMagnification(png_magnify) renderLarge.Update() file_types = (("PNG file", "*.png"), ("All Files", "*.*")) filepath = save_file_dialog(initial_file='dipy.png', default_ext='.png', file_types=file_types) if filepath == '': print('No file was provided in the dialog') else: writer = vtk.vtkPNGWriter() writer.SetInputConnection(renderLarge.GetOutputPort()) writer.SetFileName(filepath) writer.Write() print('File ' + filepath + ' is saved.') self.iren.AddObserver('KeyPressEvent', key_press_standard) self.iren.SetInteractorStyle(self.style) def initialize(self): """ Initialize interaction """ self.iren.Initialize() # picker.Pick(85, 126, 0, ren) def render(self): """ Renders only once """ self.window.Render() def start(self): """ Starts interaction """ try: self.iren.Start() except AttributeError: self.__init__(self.ren, self.title, size=self.size, png_magnify=self.png_magnify, reset_camera=self.reset_camera, order_transparent=self.order_transparent, interactor_style=self.interactor_style) self.initialize() self.render() self.iren.Start() # window.RemoveAllObservers() # ren.SetRenderWindow(None) self.window.RemoveRenderer(self.ren) self.ren.SetRenderWindow(None) del self.iren del self.window def add_window_callback(self, win_callback): """ Add window callbacks """ self.window.AddObserver(vtk.vtkCommand.ModifiedEvent, win_callback) self.window.Render() def show(ren, title='DIPY', size=(300, 300), png_magnify=1, reset_camera=True, order_transparent=False): """ Show window with current renderer Parameters ------------ ren : Renderer() or vtkRenderer() The scene that holds all the actors. title : string A string for the window title bar. Default is DIPY and current version. size : (int, int) ``(width, height)`` of the window. Default is (300, 300). png_magnify : int Number of times to magnify the screenshot. Default is 1. This can be used to save high resolution screenshots when pressing 's' inside the window. reset_camera : bool Default is True. You can change this option to False if you want to keep the camera as set before calling this function. order_transparent : bool True is useful when you want to order transparent actors according to their relative position to the camera. The default option which is False will order the actors according to the order of their addition to the Renderer(). Notes ----- Default interaction keys for * 3d navigation are with left, middle and right mouse dragging * resetting the camera press 'r' * saving a screenshot press 's' * for quiting press 'q' Examples ---------- >>> import numpy as np >>> from dipy.viz import fvtk >>> r=fvtk.ren() >>> lines=[np.random.rand(10,3),np.random.rand(20,3)] >>> colors=np.array([[0.2,0.2,0.2],[0.8,0.8,0.8]]) >>> c=fvtk.line(lines,colors) >>> fvtk.add(r,c) >>> l=fvtk.label(r) >>> fvtk.add(r,l) >>> #fvtk.show(r) See also --------- dipy.viz.window.record dipy.viz.window.snapshot """ show_manager = ShowManager(ren, title, size, png_magnify, reset_camera, order_transparent) show_manager.initialize() show_manager.render() show_manager.start() def record(ren=None, cam_pos=None, cam_focal=None, cam_view=None, out_path=None, path_numbering=False, n_frames=1, az_ang=10, magnification=1, size=(300, 300), reset_camera=True, verbose=False): """ This will record a video of your scene Records a video as a series of ``.png`` files of your scene by rotating the azimuth angle az_angle in every frame. Parameters ----------- ren : vtkRenderer() object as returned from function ren() cam_pos : None or sequence (3,), optional Camera's position. If None then default camera's position is used. cam_focal : None or sequence (3,), optional Camera's focal point. If None then default camera's focal point is used. cam_view : None or sequence (3,), optional Camera's view up direction. If None then default camera's view up vector is used. out_path : str, optional Output path for the frames. If None a default dipy.png is created. path_numbering : bool When recording it changes out_path to out_path + str(frame number) n_frames : int, optional Number of frames to save, default 1 az_ang : float, optional Azimuthal angle of camera rotation. magnification : int, optional How much to magnify the saved frame. Default is 1. size : (int, int) ``(width, height)`` of the window. Default is (300, 300). reset_camera : bool If True Call ``ren.reset_camera()``. Otherwise you need to set the camera before calling this function. verbose : bool print information about the camera. Default is False. Examples --------- >>> from dipy.viz import fvtk >>> r=fvtk.ren() >>> a=fvtk.axes() >>> fvtk.add(r,a) >>> #uncomment below to record >>> #fvtk.record(r) >>> #check for new images in current directory """ if ren is None: ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) renWin.SetSize(size[0], size[1]) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # ren.GetActiveCamera().Azimuth(180) if reset_camera: ren.ResetCamera() renderLarge = vtk.vtkRenderLargeImage() if major_version <= 5: renderLarge.SetInput(ren) else: renderLarge.SetInput(ren) renderLarge.SetMagnification(magnification) renderLarge.Update() writer = vtk.vtkPNGWriter() ang = 0 if cam_pos is not None: cx, cy, cz = cam_pos ren.GetActiveCamera().SetPosition(cx, cy, cz) if cam_focal is not None: fx, fy, fz = cam_focal ren.GetActiveCamera().SetFocalPoint(fx, fy, fz) if cam_view is not None: ux, uy, uz = cam_view ren.GetActiveCamera().SetViewUp(ux, uy, uz) cam = ren.GetActiveCamera() if verbose: print('Camera Position (%.2f, %.2f, %.2f)' % cam.GetPosition()) print('Camera Focal Point (%.2f, %.2f, %.2f)' % cam.GetFocalPoint()) print('Camera View Up (%.2f, %.2f, %.2f)' % cam.GetViewUp()) for i in range(n_frames): ren.GetActiveCamera().Azimuth(ang) renderLarge = vtk.vtkRenderLargeImage() renderLarge.SetInput(ren) renderLarge.SetMagnification(magnification) renderLarge.Update() writer.SetInputConnection(renderLarge.GetOutputPort()) if path_numbering: if out_path is None: filename = str(i).zfill(6) + '.png' else: filename = out_path + str(i).zfill(6) + '.png' else: if out_path is None: filename = 'dipy.png' else: filename = out_path writer.SetFileName(filename) writer.Write() ang = +az_ang def snapshot(ren, fname=None, size=(300, 300), offscreen=True, order_transparent=False): """ Saves a snapshot of the renderer in a file or in memory Parameters ----------- ren : vtkRenderer as returned from function renderer() fname : str or None Save PNG file. If None return only an array without saving PNG. size : (int, int) ``(width, height)`` of the window. Default is (300, 300). offscreen : bool Default True. Go stealthmode no window should appear. order_transparent : bool Default False. Use depth peeling to sort transparent objects. Returns ------- arr : ndarray Color array of size (width, height, 3) where the last dimension holds the RGB values. """ width, height = size if offscreen: graphics_factory = vtk.vtkGraphicsFactory() graphics_factory.SetOffScreenOnlyMode(1) # TODO check if the line below helps in something # graphics_factory.SetUseMesaClasses(1) render_window = vtk.vtkRenderWindow() if offscreen: render_window.SetOffScreenRendering(1) render_window.AddRenderer(ren) render_window.SetSize(width, height) if order_transparent: # Use a render window with alpha bits # as default is 0 (false)) render_window.SetAlphaBitPlanes(True) # Force to not pick a framebuffer with a multisample buffer # (default is 8) render_window.SetMultiSamples(0) # Choose to use depth peeling (if supported) # (default is 0 (false)): ren.UseDepthPeelingOn() # Set depth peeling parameters # Set the maximum number of rendering passes (default is 4) ren.SetMaximumNumberOfPeels(4) # Set the occlusion ratio (initial value is 0.0, exact image): ren.SetOcclusionRatio(0.0) render_window.Render() window_to_image_filter = vtk.vtkWindowToImageFilter() window_to_image_filter.SetInput(render_window) window_to_image_filter.Update() vtk_image = window_to_image_filter.GetOutput() h, w, _ = vtk_image.GetDimensions() vtk_array = vtk_image.GetPointData().GetScalars() components = vtk_array.GetNumberOfComponents() arr = vtk_to_numpy(vtk_array).reshape(h, w, components) if fname is None: return arr writer = vtk.vtkPNGWriter() writer.SetFileName(fname) writer.SetInputConnection(window_to_image_filter.GetOutputPort()) writer.Write() return arr def analyze_renderer(ren): class ReportRenderer(object): bg_color = None report = ReportRenderer() report.bg_color = ren.GetBackground() report.collection = ren.GetActors() report.actors = report.collection.GetNumberOfItems() report.collection.InitTraversal() report.actors_classnames = [] for i in range(report.actors): class_name = report.collection.GetNextActor().GetClassName() report.actors_classnames.append(class_name) return report def analyze_snapshot(im, bg_color=(0, 0, 0), colors=None, find_objects=True, strel=None): """ Analyze snapshot from memory or file Parameters ---------- im: str or array If string then the image is read from a file otherwise the image is read from a numpy array. The array is expected to be of shape (X, Y, 3) where the last dimensions are the RGB values. colors: tuple (3,) or list of tuples (3,) List of colors to search in the image find_objects: bool If True it will calculate the number of objects that are different from the background and return their position in a new image. strel: 2d array Structure element to use for finding the objects. Returns ------- report : ReportSnapshot This is an object with attibutes like ``colors_found`` that give information about what was found in the current snapshot array ``im``. """ if isinstance(im, string_types): im = imread(im) class ReportSnapshot(object): objects = None labels = None colors_found = False report = ReportSnapshot() if colors is not None: if isinstance(colors, tuple): colors = [colors] flags = [False] * len(colors) for (i, col) in enumerate(colors): # find if the current color exist in the array flags[i] = np.any(np.all(im == col, axis=-1)) report.colors_found = flags if find_objects is True: weights = [0.299, 0.587, 0.144] gray = np.dot(im[..., :3], weights) bg_color = im[0, 0] background = np.dot(bg_color, weights) if strel is None: strel = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]]) labels, objects = ndimage.label(gray != background, strel) report.labels = labels report.objects = objects return report dipy-0.10.1/doc/000077500000000000000000000000001263041327500133065ustar00rootroot00000000000000dipy-0.10.1/doc/.gitignore000066400000000000000000000000131263041327500152700ustar00rootroot00000000000000reference/ dipy-0.10.1/doc/Makefile000066400000000000000000000100251263041327500147440ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " api to make the auto-generated API files" @echo " dirhtml to make HTML files named index.html in directories" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: api-clean examples-clean -rm -rf _build/* -rm *-stamp api-clean: rm -rf reference/*.rst api: @mkdir -p reference $(PYTHON) tools/build_modref_templates.py dipy reference @echo "Build API docs...done." examples-clean: -cd examples_built && rm -rf *.py *.rst *.png fig examples-clean-tgz: examples-clean examples-tgz ../tools/pack_examples.py ../dist examples-tgz: rstexamples ../tools/pack_examples.py ../dist gitwash-update: python ../tools/gitwash_dumper.py devel dipy --repo-name=dipy --github-user=nipy \ --project-url=http://nipy.org/dipy \ --project-ml-url=https://mail.python.org/mailman/listinfo/neuroimaging html: api rstexamples html-after-examples # build full docs including examples html-after-examples: # Standard html build after examples have been prepared $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) _build/html @echo @echo "Build finished. The HTML pages are in _build/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) _build/dirhtml @echo @echo "Build finished. The HTML pages are in _build/dirhtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) _build/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) _build/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) _build/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in _build/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) _build/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in _build/qthelp, like this:" @echo "# qcollectiongenerator _build/qthelp/dipy.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile _build/qthelp/dipy.qhc" latex: rstexamples latex-after-examples latex-after-examples: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex @echo @echo "Build finished; the LaTeX files are in _build/latex." @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ "run these through (pdf)latex." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) _build/changes @echo @echo "The overview file is in _build/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) _build/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in _build/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) _build/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in _build/doctest/output.txt." rstexamples: rstexamples-stamp rstexamples-stamp: ../tools/make_examples.py touch $@ pdf: pdf-stamp pdf-stamp: latex cd _build/latex && make all-pdf touch $@ upload: html ./upload-gh-pages.sh _build/html/ dipy nipy dipy-0.10.1/doc/_static/000077500000000000000000000000001263041327500147345ustar00rootroot00000000000000dipy-0.10.1/doc/_static/colorfa.png000066400000000000000000001540521263041327500170760ustar00rootroot00000000000000‰PNG  IHDR´Ý6X sRGB®ÎébKGDÿÿÿ ½§“ pHYs,r,rˆÌMvtIMEÝ3šk×tEXtCommentCreated with GIMPW IDATxÚì½Ý’äH’¥÷5àYU[3»ä’ÂÙ+¾ÿ+ð(òŽÂáÏtWWfF„»ÃÌôðÂYÝË®¬Ìš™îêž„ˆ‹DfxÀá€BqôèÑcÌ×í_j3 ¯çàWƒ×8ԯܗůø@ÿÌÿêç?·/ÿŠ¿õgì÷Kþý©Ïö¯ØÏ——?ó˜øÇä/¸n?w,ÿÒ×Ä¿â\}Ñûõ5CÝþž¶úgZ&òõGéÿçný ÿ™}}jߟÚϧÞ÷9Çö©›÷s¿Ó/_p^>u¾ü‰ó÷K×C¿âºñ¿ÿ¥sõK×–ÏønŸú.üÂù×× ýCÅÐ_1ôW ý[ÅÐÁ×íëöw´} è¯Û×€þº}Ý~«Û×¢ðkQøwU È?äÿ%ØþJÛýòñðçåSçë+m÷óß¾Òv_3ô¿¥ ý•¶ûùÏþJÛý Òv_Ò)ü¥“¡OÜUþ™ýü¹“ÿ_îçSwîç<ž?w~îÿý‰cóŸø>?—Ùü çÛæ\ð‰äs²"_ðyŸ“m)^øŒß rø+Ëñuû»Üê'²¦~¡Hø¹;X_¸/~&3é3ö÷çÞóKì—¾¯¡ÀÕ'ž8þŒýª8ýô÷Æ?û}~)+~.>ýÒóçϸÞúÄá—Á§>ÿÿW¬~- ÿä숕áA:ÿêE¡"X–•R*I'³“iœ tcx^J§IÿU/é_µ(üª¶x=Á6j®´ìÜr§·ÔøÓðøÚ«º7,êF]%š£"-‘ö0¶ ÒD—d«Î›1³(‡LšLƒ‡ ÿÒ´Ý/Rk¿²æùÚî+ä oKHˆ>\rh±½„ˆ¬ê ·¨˜ô.çø…߬ÿH‰ÔK¿’ãY” QŒ£±ç §EáÈP¸ "Ð@Õ*5QØ9ÄpÑ< ‘3s8‡þ¨íðw 9êBŽ_CÝ}¬ñgüíçVÚŸGg•ЍDE´¾6hà á ìbc*áˆB6 gâ63篠?þûq]y<ÿ¸¿'¹qÃtlá,V€m0󠌃%Y1 °B §¥Mó嘟)匑WȆ³.Kã_qÞ-}ú©}ý+àÊ_¦ ÆïõûùÅO)§» /ˆŠ2‰—&;i7P AÒÇwÒ`´ –J8¡§¸‰qëxbî/Â5øO+?´göLL'˜ ]f´ÚÈ7ÿDù¬dãØ€jh¦(g6îÁ¼æáxÜ„ µVjö™vëŒqùk`hý30´~ CéúúK|4Ÿx¼|Îß~ŸýgM!¶o6£¢~1tSœ(åpÚóïB¬¦œ–$ÇóÛƒ´Pbï¯U¬¹Òz£åøÜ‹ìÒ÷ç“÷!.mW:›Â³¾+2!}<ã6–-“¸Ø®ˆ*´‚[’È`ôÀ-K0¿Ýb(J€Jµîµ_ƒÑž?' þ%®Éçû—•òþÊ¿M‚õ¾€Ì¸èPÒTpBôI”™Ñh @™ø †œÛŒLàBˆ=?ý4÷§…sYù°¿¿$lH„dT;*"X„â#‹á0¡´š² èÑ‹ñ0á0¡yÁsÁ¥qwWÑõÄûÛõþ»æíNàd<È3øæ3Ù3€3œŽÀ¶p@JXÃ*˜|äli¾,c‰°*°âNϬ&*ÄwëÂNì7xIƒÏ`ÕO…j© j†Äë="Ï &=¯Ü2³sYD-G"Oˆ4š¹K 3¢ÊiÎdp¥Pùþôeð®½| èßü| X^ Lb‰$°|é8õŸÊAxòà23š¡#8t‹=Ef` 3–‰³P±˜}mC Æk¿D3îê*–TDS©y )Cr1>6QŠX û, ûx½¡×ÿ3âx˜…k«¼+•R¾Eí†óýw«å¨§•8§Ýi$ò™reǤ¹”D˜H;rfL›*2’&Á\4ãОïµg±3° Î@–È1iµL9e'Eã¸Ë Fް¤t «P É®17Ë„ÅÞ V\,²CßÓj"Rlj–м‰'a’žÇœr"Þ¦•÷ô|ÿ7­å¨ŸAÛ|Š®û%ªÅ_°ïÏ¡?uLòûSl¬ª´ç+™@›ìWú€ $XÂe>òãõ7a2 Ž:ïQ Æ%füNA$Á&Ò@`U2´,b°fÙ7;‘ÆâÕA!Ü,w{LÜn-At™Q †)ÆU² bIQšp³éGöω,fÑžOŸ<t|I Ší2:¥TÌÆÈÛ?÷úÿscé×R_DÛýͰ'*,´½»·™¾^`¤”§*Ëypy“™ØÚNI–­jE1*²jÈ0fÌ!KqÜ:r¡=CGBQÀÂî“"éR(p€•Æ©´¡ªBE$rÇ=9wT¢NJ9KZ¶dQ°kX5L…pX™"Ò8m{–³dH#4é² STßlN,ëƒrÏ þ5×äsããKcâ³âòïr,ÈwºMƒQr¢X 5¬"ÜM6Ï­™=}h-OH+SHÛ"-ç ”<´³šŒ2 ¨†š1d áÄ–G"“V™ùQÄĵÁ›DžÍyÓ…¨.ÂQ:ƒÈtì(r2&e•kB­U;zPýÓ1åQ[[~ô[&U2oáÈN¸û´¬\nûë©ÿ›‡³ÛâÁ…áÁdÈÅ(DÅ”*Ø ®…vM†APAqààÉdhöÕˆ1ŽâPtÂÄÇ „LD†&gü‘1I°É|%Uæ£_…@Ôù{†Àq4CŒJA£RQ—N‰q܈)bå,‚ëB¹ˆX’Ò'킎H™YWNö#íY`R 31nÔ€¥úø›S®ý]´µ'F‡†éÌ¢Hž=Š5‚Z…—À%p1®‡tÇFé™Å^«¼÷½(aP(! e@4¨#Yr~ÎnèšGá9þi·¯éEš*9„?ù‹û&M ë9X·ÂhÐÊûWã“0ÁÁUDÌ`ž,ߤg&VŸ7N úHQ:jPó&Ææ¾@-Á·üÐÉíTÄRDZ´QŽ˜%Sžq63VR·`Âæ`yIê5© OmÅEp)ÁX Y =a¤µäê#3ÎÞÝ1ÎùÚÌ…ê¼¥ŽWÙL.Pját¿ÒZ0¶ oIžwÆ ÂšXh™x;Ê$ͳpP03P?bp@Žã׳iTDòfc Þ½ïSý7©¶ àa -½Y=¡‡I!¡™™'É5Û½ž/RG‡x@·}0ìY0Í45e—!´Ty;£ÓƒÙ@[——›¨He˜bOœ³ë¤ëqkÁQ„¤÷OØï5àr¾Ošõë‘W§ÝŒ’K1g‰G‘oýAä½# §Ë±H¥Qg)ÀQÎNÏk+_ÿ#ùhYBòhÈ Dsz{¢pýq|n=õçÞóWUÛýæ‹Â%Â÷§UYí—–Jì”åXÃ3cIAvšývTu Ö"¶–%èNÝZÒÆð°ÈÔdk•”*–>¿…‡ïÃ÷oÐÒäåb¢›¸M~l즷4CŒVÉYÝ)RhL-…ÉÙRÏ A§=‰î™Æ_yä@C¾´…è?tç}Óø¦sû>iw6·N$œ7¸[‹µ%Ã}âæa4’œmõ™˜ 4f·ý x¬i7Ì‹¡ŒÀ—ðZWù.¹½ÜŽ6åo»(üÜ ­/ÌÜŸ{—}Î]øŠ•uZØ¢²‡x!• ¤œìHY‰râÊ…„=“ÌTÁÁ²Šm) ‹¨VfïfØžŒYŒÐúFÜ?Âý(/©‚5ñ64†iiö„vôpºDïâPQ€s’"¯9ѯX]‡úèH‘¯Á¥WP`ì]ºî+ì ålôv'¿jæ¶¢TRnƒu-”µˆFBzÐý±‹$[èÃâ›/“‘ÌÀ\}ž×JPX¢ªÞ×ÛUcüb7ñKžØú…¤§ÏÜ·¿CÿUyè¥o6/.´[jبÚŠWŽ*&Hˆ³Ñ V2/p7ŽÖU±kT–Íl„Gº¾˜=ñ^Võeu=W-ç² ×zSQ'9Ò-Smök¸Z4`'ب•³±—fä+õ¯¢Œ©ã;˜ïâ‰`vôüJãÍÈÇ#Ù/ϸއ–Z vä¡ã–\Jh©A,##5Ã:ä"?r(f>Èp¼ÒÇõ8¤Ô飺µ¨>­Cçºñþ¹±öE½_Á+i\þí…˺q¿­¨%{›eæ•ãåhÍŽDÄñ0Ÿøvø¨ä{RÔXÇJP8­â´X“çÑxpYî¸n,§Ëy¥ÖÈw¸=“m§ïƒK7/iv‹+¦4 M¤ñQ-”˜|í—k 6¤ ¤I ›Wý‘i1œh$4دæöëÛ‚9‘Jœ“WzÒ‰UÅg¢Ô`ïÉMã(’ý1n%È"\¦VeÞkú8˼Wæq[T%§h(â|Çþí‹_ÐúÂGÀçB“OþírwÇv>Ó¯Ö&~p$ó"DÕ2Y ,§– Ç÷‘è¦NdšÞLß§æ'Î’BÔkPG¨–oTò¸ÞƒšFn´úŽýúžËuèr/;ì}Âæn¸2 5ƒÚ¯ÔX %R$‡tPušœI òG ÚA‘À…ìW«_6ö—œµÍfJ$¬©¾u®çN½Ϩ7fA9ÀiéPæYéШ EP§æªjÊKGÙçqÚÐGhïó¨²l¬›¸\üÜ‚ÿsÉøò!ýZqÒ_|Hö¼ý'ÅÝÆ{fÇW&«CH K¨žÂ.¨;™‡Äóh“Ù8 RU Û e’»iNZ õ‡t©ÆwBY(¹±ä=åútýÎùÁôx ãNO!?qᥥ®·pëLõÅŒœtâœØ³ÂdÕ 4e’gFöð‘™å°qÊN‹Paq¥¨DÂNážäË™öþ¥-¬åIQvSÓàvÿ¤÷ož\/¦t3nÖÞðsèå§ä;ÛýA”€±â°HÐK¼7IK×î9Óÿ¨Î÷¨}Àcü,žå¯4$û›ÜÞnÿ=÷oþ;ÞÅÿHŽ>%Ÿ‘G—ÍóÉS:%`™(uqÅúlL¸õ§3fÝì™,»¹eí¡0êÊØÆ^ñ¾×3-EQÚ¹–•—×{}øcFÇçøµÇ ñj9 œy÷ÕíhAûjŒ„|mº¼¦éÙQÚÀ—J¾»'N•8ƒ¶gÒz'Û@}'»éã€;¯!árèWÖ‚¡Íh…%`õ,¢g‰81Ö`h2%Œ‰¯UM¹?Ñß?塉‡>-wü»oκ-ÿ+Ò‹Š’‘ƒèãuvOE¢sžÄ’ K¥ Ñƒì¹l«ÍúƳéÜ;ìtÔDv¥j|»ÑuöõZt}î.ïý6”kEQ‚6Ðèi÷Š4éW&™CÉtÀžIƒ“)ZŠHEiV)«ÌùÁ”bTä!}<Ç‚†Òw[/–Tж¢Ç î4ÏÁ.ïMý}Èï`¿½¸Î8Ÿ#˜%‰RÀK˜sÈ›(‹YJ²Z¬CžÍa[j¢v>ªBŒb¿Á(p^ÐÝb¿´ßý›ÃÐ÷箾ü/´EAáYd1ôšk šøMþ7Ll("pyÓ¡/:.Ä,Ò…´è6%z0Z(üpbœît».ì‹Ušá½ÑH•:ˆÚi9Èœfd¾Š™^3­&òwr¾Æù*Þœ#‹¥ ª¡j¶\Æl~„‚˜Bå9+“G¶ìœ´$.B×"µõƒIÞCzÞˆ÷f<½0šÔmò•Ñ>B•cœ«H¹ˆ8Á²˜­ Úf;ßi4f'\1æ“ă“\ÉõîA½=ã¶)Íö¥uÕgÅåor|…sËhì#è@îÀhÌy»ˆÙ˜L˜qp6þ¶LQünòýd"ÊœÓ3èQ“9éŸô[…ýŒË#y÷H– ¼Âe¥ŸVn9ˆ¸Pôžî+ã0}yÔ“æôË+‡Ö1³Âá‹‘4wÈ™+Cô:ƒ±¶FôÉ+’²ŒW¬“«šK#ÖF© Xdëxïä5É—Žo‰_I–rˆêív8X\ˆ„Ô ª9Ýú‚?˜öÚF›f5®Lx2ëëÙ /mâ¶}c‹ß}Wù§úÝ4·ù 8'ýfxèï)úuáÆ×aµ4½Ô@-ã¨9Y¯Ùà&cà¥ÃðwÅ,¡|ŸG Lž*äƒÛõÁíNdH×1ªt ³or¼ó[ÇšªûRÕÎ Ù›UžTüŽîÛÔ#9¦è_%ˆÐǧr¤X,êÑL ÛCŠÅ‚v}N–õ3åþo¾ßøv{Ðÿü¿}øÊCÿÔή<Ô×bš:h$ê‰Æ¤IKZü©Ýœí\‹Ô‚ªà°î!rîãb4LF±à1}ëôªr÷,¶hÓ[CajMªùpa¼yÏè/ìã=ÑŸH7F™-15Ó‹¡WŠiŽ@ÉSHNÊÁ¯†5GR['lîœl2µN^—ÙIv{TZ,“v¬'Êé åîžXOÈ̤„È .ƒ½4 çÁ=Ï‚ùT[€*z5Ü™õ³|c´ŠÌBvÃè@} 9¬0U†spØ 9Ôé¹óãSòý7…oî+?>ÿu¹é߆V9³œÞêv¤b©vÈžô>h%L eâæáœþ\1'"×.ΉÞ$åí .Oà”XÑ1ú,ÑzÚô]ôÊЮºtÖ¥©¿1í­·gíÞAu\b¢ CÅT›õ8™µ_E?ÆJ›jØ0'§èfdªÚ¼±¹«b­A-Á Ù=SxÖÆ5Îd¬¸¾‘ÎßÃù[X«’'œ¦TÈUkÒ—ÕFdjÞD!gõ` F˜I>¤ÖïMy ¾úSQÞêžyO_P«tŠBN—)v%©›‡þÏ?t~ÿ”(6"Lþ©?É_œ‡þ«BŽˆª‡í{Rá»@¬i—£ð’§P SC¯u—–C'1(ô^p÷d5Ô'à øÎ甯SiÏv¯^uÏzm楕»‚"ªËf•šæ%µœAË‹¹ïHIÔthÚË­ÀÉsêšœ¶¡ÍD©[¯m¡¼©h, *'z}ÃX¿µÎoÅùo8KHáׯˆ9I¹^„ÆT kÙ²<Õu£&å”Ö}(î‚þìÏr^fsr&V¼‘6s’½8•ÚQ$IZ¾6sÝÑùtb[+—ë»›#€¿¥k%h{pûäÓÕè”,g8¿…õlt3zNÚ€z ä!•ìJï µž‰¸¹ÿæ!Ç¿øö¸¬<ÔÂuoˆÙµr‰W­Úk… 1…),:k¡xâÑѱ'Ñ ‹ÈÇàåjúõ0Šyä*Óh&òãì,Q ¦èBA,'ØÎh –­á5ɵÀi¥œëÙÖc“·%Y¢O¶W¼lèa±¾ß(µºÜît>_}·]8çÎ]»9Ÿ“} ®·Ážb—¼—ÙwHÇ1$ e±ã€´=…]¹à}†w•¶Bö!âù:-R8Çî,V5Ô²SV› \+õÍë·›ûÅôwÚ0ZnD´9ï¨pT³œÄº 2ÝoЯhì³xž^Ùâñ;8¿1ë"˨w±_`¿â>ÝÊ!£‚Â’Stïg®t®ÿ††d—ÂË]áÚ’ˆŽ³‘4LÃ]35§òé>²Â¤“æÐk˜%+ƒSšûQXS°ò>YmJŠÃe7×61nþ.¥ÏAÑQîˆ"¶x¡j0,š(+¾ß(ßAœV–qâ|zá~-lÏÏÔwƒýÒØGrmpsÐFÌP*?^™ªiEÝópYÁèåðÐë(’R ¥LÞ¼[”n7bß©”ÚqI\ƒÈŲŒÃßN¬÷ùM¡½O®åiêÿ”¨ìÜHº ªØ¶ÊZ…ºÈ!Üf0‡Ì²Àݽøö[¸Ù = ÚöÛô%¯ %é~+@Uå®|Çûñÿü‰àê·ÖúþøŸṼ`ªÑ()bÎ z„8¤ŸCÈ‘slJæšCËnê@måɪoÌù›d='§€û". < .%ÕŸƒþ#LÖ i×ïêóX®7¼­P§W+ÈšˆäÊPŒÆ~”çT{Ï{pMh–û4h"Ó¨ˆu J¤Oö@æp›HM®s2r}öÈ1ÃDšB½¼\)ž®©vCw«–4‰®D.”e£¼V!9[ãc>öÈÕ.cšCìálù÷«¶S ÎfÇíhÑú|0&@è¡ÒôÕ˜ó'–³uíaFšHˆ+|xõGqz‚»«Y7ØV''QWqÙ­KWzYèZ8Ëhë,‚’z2úÎèƒ1› û _v’¤ ½7ñœe–!³iöu²åRá$Æ„J¤̬iÿ3‹çäzXt“á>Ì"éÑ´ëÜÍhg…Œuc©ƒ­Ì©vQkLݲÒê½–'³,›VWz.DVî·•»µðx¿ðxWQÀí%x~‚ç÷âò ·Fjº(>ZóŠœ\{C½>~î;Q`Ù ·–QÈñÝN-;í¹1vÈ>ÕjĨàqÂ¥"•F‘¨QæEî1×ÃLÛ«9ÑÜvñ㢅)oEyp^ç´÷Æ1šA…ð ʼní¼p>€ïD¹»2h8m¿1vÐèÚÈ—ü!éížýö–xZ‰§,íÆªd•9…XËü\GòÜ­Ín‹(bC)°Æ”ÀRͨƒl“Ê“ òaøx4îË1á2ìNörãv2ëyã´A–JÝá”y(©•J_ÞÒy ï’¼Kê6ØÔÙhŒ(Ô*¾­âq©œ—`³xþ`~ÿcò»wßÿ!y¾š½Ç~Œˆ…æðÁbͺ<æ˜[‡‘&{RÂlž>(ûÈ߆þgËGk-¬[!³‘ÝŒñ:ãl#'"gÁY)ÊEø'ãÅl2ê9Ì‘‡Ù/ èÃ;±½+D`QÝ n ô…¡1 p¢èDY ËÝŽOC»½w=EI—&jJánòYtáë£üòÆq9mUÉ+K}a-;k¤7¥R¢Uiè#çÂ?9Åò‡“5’ªiëQ´ŒBo!Æ—:*Fä)—]J±«®f¬‰ë ´ëFñÕë€k·è+«Ujl,!zˆ^¬ˆBï)Úa-U¬kg[…2¸^B>$?ü0øÝ»ôÓË}øMÏ´LH,QX3gMcò@ )e‘UjÕcÿû“žê‰°cN ψLS 6Ë9D "7êx Êé 4SÃ2i¨rX6ç1’Vt¸¾,üðc0”Ú÷Áz]áÃýå¬ç=x±*Ô¨„ 8µ÷ÎåÚx^vœd-[)”eˆ-a+ÐVà­ÂÓSîBYþ •I¿çÃxâ6:—ì†}®‡¢r裇2Õ QsæßÛŠn u?sÚ+™’wÓÈ«Uª §€mY´>¶ï ùÐ…nSYØ{^õô”Œ§ÎÝ­ó蓊íEåZ( E©Á^/”¸hYMY’&ñ~—öóònðãÓàÿ}n¼kM»#rŽU+ KKUV?FÞÆ!§¼9”JJ'5šý÷Óú^Ù(ZÈÜyr>Ä[šZçÃøÄÂ#§+JVJÞ!¬ò)î IDAT (}h•SolÏfês¤ÛK¥¿¯$é±w­·•òô@^îüÒ¤[B-°„‰È)ÃC·[ãZo®uèTís ÝEaYmNCÞcvÛbqÄ·*ñèQ®íÆK¾ç¹ žö)2Òb"ðè¨X8¢X’BÃ% £Ÿä~¦¶G¢ñöòl±«fÎO•Ói±ªúãÂ87§R½5nÜÆÕ×ËP¿vÜ'äu.^èèVìÅq ¹ Úy°”›—u——Áu߸\7?¿‡7ôþ¥ñco\F·çæë`BA` ±„¨ñÑ©WÁ¼Ö´Šˆ˜Kx tŠJí/Òúþ 4VÂQïÙcZuZ0b®äòqÄPÌ  t§ºz.Û îþQhÇ×x¿ÚÄœ$É1MÂ…6UÂÅíº°ÿXñ-ïå-O,/g•¶0úpƒZM­&éÚ[g¿6+kMÖÓði îCh£ÑFøFçe)Œø~^bÑ(;Öš¤Oì `xïƒö!µ¿K.ï;/O»¯{ÇÙ©Œé1¥MDUò¢©©^ú!|̹ôÆb3s÷©ŠLµ’[ÉÉÓ®¢l…e§g‰5ÕQŠ©2§7+ùïV®÷x.ÿ;Wúõ¿¦]ÿ+.þGbüg–xϦ÷\øÏýÿ ç,~!ò6CÃÓw,ÆSÃBë7äŽ,öqÏm?³…pþHå=µñýÒðÒéËài釳¿-¸õdAâ’æ™ëôq¯Zf»} M:tlä5hcgÜŒžºvJòFQ²dŸÙö˜ÊáP ¶€[™íï’sÇ´f#cxÎnZSF¸Ä¦•—ë‡é]ò èÏqÌÿ9Ìý'?Çö9?Êû ¸£ÑL(§à=tt,kÏùºìB"Úa:~¥îϨHu©Ày5qÓ}ØwµjõðRP–•¢Ê™ÌMŒBÍdíÍ5wEéè´Ó·A[sU•X6›[ %ä5Êm¶Km+,aõxáÞ3ê™ôÿÅ^><'ï_N\ܹªSÙ°Ã Tç.\…*¨”ƒFqãâ%Þ ~ï`UÑÙ§Zõíòâoë•·§›v¶Ó./I »ejé%¥e˜eHK† !”ŒØå¾Õ¦XŒ›”}®þÅ(ô!íÝŒk²ìéÚ[±2=­kÄOÖ{Dz)»+ÕŒˆ™˜4¹×ôáå>Ç\¦²#eDZ"ꢵž¹¶§Ïiuû3‹Á?]Ðô_µõ½"Ö+î'oÓúõXö£†(HJŽ…Kö9éç´Ò”†Õ_ÈçýêØÎ¬ª<îEãÑoâ¤ûµy•U*¥òc½ãCT:r!rP3¥À¾ë¤nøtcœYCÒj¶À§¤ß%í<ˆûÏ)ŸÒ±A­f Ko2ß„¶—»‚óÿÀþö‘ßýîžúÝÙ?îðã ÊÚýdŽÇPH.Q‹Œµ<)¼;²©øw>-‹îîäï^ô~Ï7wOÞ–ë6pÙ«ö«=ºåH9 Øç8¼£Î1¯¡¡V†]ºê©¸d #Ç\ +ö>Çbš–µÅÇ:0s…h«8ÎåcR#Žõ |Üc:*Ó©oØS½ä´2'¶ì\кJ£ÚÙ?§õí/l}ë_r„Q4;Ž ÎvX/ ©PÏ6†ÍI¡OÊGò5Ô~%®&ÆÎšZO<ñ*5¸£²+«¶šf}Þ2ñqñ””¹Ðû:ˆ»ŽN¨óöòVÈXMÛZÔDË æuñ1– ðæ\øf Nõ‰àöR9ó-ÛxËýeå|«\Æ3»^èÙè²Wp%´ ¼.„b:ªƒ¿£ðûSðxß>v¾ûöÂùn§«ÏÑ©¥N4½›Ól1äit^çJ\K”¬Æ ­•u’›·¹ L$(5×àRÌB½ \ Çœ‘ôÑ0ñ9&Ý:×z$& 95ÚSÞ¦ùÎǦ¯ßRZWêz¦]?üíaèh¦Ó°póÑþ5‡E+…5æ çcÖÙmÚ&ÆÊa<uì,Nª;UWÖ\xËÂÝZY¡¥4 ‚=cf q#{%[¥y¡³ázâ\O,±qªI9A«ÉNcßc F=üJǘFÓ”iøPÅ1»d5abìKpwoNÿpáß­æú\¹\‚ÑÛT ÷3¾V¸Æu![%%Æ2ËÝ섦‚$ˆ-©çNyèÔ;£3´ ­@/ã\¸-âRæ:*#!cúç•2%J(W”"KÐÈo(ýÄÒ·¹Žb_XÆ äÎ&òF#qŸ¾£˜ñÊ……€‚T@+ë°'®uÎL–WÑÒ\‰ëèþ¤ÃAõNô›^1ÊßN@k %éëd1t›wí«wE q²X –,DTXM–¤Ý w£ž”2Xœuådq·nlË:»†žbø6 ·\›hC´[aÜ*7îx‰­ u;±ùŽZ̲šÛº“ômЗÊPÌùÄCª» |7Ù‰XæêSÑ!vS{a¥RWx|Lb{™ZÕgP%ƒØÊóŠb¥÷ʾW¢U£œWQ«ØKÎWmÜ–äv×M웈5˜Éî—`ß ×2ƒy“iÀS—¼IæS¯]raI³ôJµm,y¥úÂ̓ÅÛHZšöªw>u4ƒYª˜BŽ)LŠ’ºûQfNðáçá`¼QOÉöÿIú_•‡ÞÂ<Ô+/±«éPÈ‹3( ¦&IN‡§™ø ì¢S<ŠŠæiµÙœ¬‰bÜÑKvÚ°n —a®)]ÜRt›¢æ¤e¥ô—ë¦ZÞrz”õÂzc Æ"uÚ-ÜoVÛczɉ¼}“zx4oNèqMß5X®V½še¯,–ž.×Àˆ Ê\R“J¨º¦\v7Ü4UÿkZÑR¡ÖTY±6bkèdÊ‚š„FñÞR×=¹`n5¹º»ì9UTeb.EÔcyº0”ž*Ü ›ñ©¥N;Üõ›ß’¬ÜtÖ5v.1¸ªûV¬6g‹§¡ÎĤ·’´°so·[Ç9 Þ_——æ£ñŸ†žUqxºòq’ã·®å¡û5xÜž1;ÏiÒA™ÞbÍcqvsõ`ôÃöU°dÑ–…eœXÇ™…R "µ0“}${&zã©užrð”]’›‚ý˜HT)¼Úmù¨Ëåð™èî–ßQ’íaUª°?-ø9´ÿô?49a)}kÝ ñ6’o1ß*uÚÍz…z)Ô[P÷ ìP®¦\!nÿuï¶$IreÙ­}TÍÌ="òR gx _ÉOâ/ó•?ÀötTef„»›©êÙ|P‹‚Œ ‰nt£›àS•”d–dº[˜©³÷Zó.^R”Žj&ÅIf©’ó11YÌX:cix;ÐåP½4.ëä‘DãÆ«xû&¾µÔÝÉ=àVà±"=âZ©5¹TiA,)ƒ%­í˜¿¸’úx˜󹯼ø“BÏd4özðU;oqè¡A›|iCטÚÁó{I¤vÊëSx #ÇŸ¢.ó}¡ËÑP4ÃHJ¦'`÷4Vi”DË ¶NY^›³¡™C~âëÿòMúãÏâç;þ¥£¯2÷‹Ù_Â5ŠÖËJ-&Öæ%¬:‘!Õá(CÕ.ý+Ï­ûS¢O>«òRŠW‘‹Z®|®+~Ì "òp8Õ1»Ì/|‰ôOwBÝ‚fÔféw+m‘§=ÚVZ´‰<Ö¥âÛ3«øwÃüEwèEWžx¶söû4¦Œ©÷¹ ‚¡œëj¶Rèë¢v©ô¥âº²>`yð@ý(#y|Sò-“·œ¢Í&i0e•…J©„PDǼêè;¨°ôNÝ/ÔQa›»w4–BgÓÞ:±7~©¦ïp¼¿“t§uþ¿‡ÊÜ^ÍÐ~å,LèBi4Á!Ô cœ`öIËuZ’XË2æ¿—T'iC¼ä{ðÓ ýþÍüô þø ý¼Ã7ÁñÑŒ’Z^ Žº6¤0ä9N[Sekl÷o¼æÃ~чÜxŽ•KYYY´RXzpµxŽ•®ÐnÑOT‡r¶>Jn¬T[·þЃނ±Ï§Ó¦9l§6.%Ñ©aÄÕôðß6ZþUwèƒ9t•bñž»Ô’f,ÇÉ œÚž³M4ŠÕ‹í˜®”±¢íY^¯b¹¦Öµy¼Á>†Ü‡Ã<Æà•¡W†ozÌ‚”2fîŽ,…¢¹ªžA„¡áax ‹û(¨KEµÛ%éÏÉxˆ¼—…žÖcoþÚæ_«7+w êGtýhKž(ƒwÈé‰rd]ʆû¹#ù{FX©ùž¯@*iJ—cÂŽLßGêkÂùw·Á?¼Š?¼ÂßR?ßñ·Ý ­àQEŠêm1¹%.£ÎâáÚ…Yœ߈~ ?ÍGLHŽ0]Ä*e6dƒN)G¢û,œ(µn~Y’ëšê='ŸÛ'Çý´z½o?&0Ó HsŠéÑþº¬¿úKa©•\îÜGc¢ŒÖ±û9×<“a!¯a_«üT‰¢>wÅòÊ(¯jaîmš¦Ž Ð>:Çè:HšQ'&6€ÎŒD¼CAO’ÑŒš)“{7÷&Jj­øÚ5èiû§*]ªg‰6ôvÈÇWëí€û#u¿áý;wôãÖù ñìA6üÎ1XvÄ7‘73nÈ÷ù%sÁ¹™S¯1 ê4}ëÉ/‡ù©™Ÿ›ùýý__ÍßÅ_šŽ€c5c-âr%.çZ8 :– ]7*4*²ÈE8¤®ÆÍçaç¢Ìu ‚‚9á!´¥X3)‰§Âyí¦@/m.=ƒ^ðuðVï,½s+ƒV,eÒφ‹¿‚AŒ Eˆkòñ)ô»L²ÿÍz eUÉËΞÓg’£”Ó,Ùg åÔÝð{k ô¼º|¬ªŸ‚ú4:”ÞýhÉ×MºmÁþX8z8™ú†1¬ùšˆòÝÉÄÇfÌ­ä)¿Q±¹Ð,ÏÓà ­ZÊB\£vFò©X‹È":rïâÞìÛn;>vãøxüvǘõ°æ:‚Ø…)ßEÈã´¦Y ^'щ™j¥wÝÆð/Ãú‡þñaþ¸›ß¿Ùÿù‹ùûoæžáCR†`Úªc»ë3Y½v· }]èK…±L”i…œû>Ò;Ãg÷˜A-™S5NL¤¼¡úØžb ÒƒÌùybQGáÒáeI¾_éN„¹UÜ[’#¤æŒjâŒÈ ´|x–o×àë·ü7ãrøÏü7ÿ‡s ÔÕ5;,H‚Ò‰‚kœ4ù³?£õ²rùxåùãâ§«Yj‡£1îÉñÕ_àx3–óÈå4§Ãr’ùyWâœZáùOÒ³£˜&†2Iš¥K™a¨ áÒ¼Þáø`ŽKò“S±ì,3d5Âõ<~Çœz•¤/v[’¾ F ï ~9ºñàwÇð¹'¿»Ù¼ÃÏ7øùܦMËš­€ÿÈË2UÈÑmÍ®à+X\ÇJ%ÎþÄ@êt4’ƒ›+#7gߨÇTÔm¶jÖ2À Ã#ctž|†è;…уº§_Jí\”ì)Y|¸Ò²ÌàÒ©rÊšŒ°_9gçŠ_£ÄÿÄuøO^§•¿(ýOM9TªTPuDj¤R.NgõRªa=v©ªõ²ùÓ‡«^>,<-Ë%·ƒþõŸ¡ÿ"ÚMSpiKùÞŽ˜çŠwô|£ÖÙ O£¾<Ðë}~9U{‹!;è™ sÝV*ï8ÚbgMõmøuÜÔô-;¿ïƒŸÚànÉyKÿîÕúò*^w±˜HŽi$Tì± .Ðëé"2އªŠ6W s‚Ü%í§—y7-Þñ8H7_rå i•YkR˰F“óÁ1º>Ôez™Vr¦“ÑGeGO«Ø.é#Эuî½XYÕf…ý \‡ºßîÉë«È('ôÏ.ðöçN ¿^—õ#G¸¸Ž™˜M™\Ï›GÂ’¡ › ™ drqª~º/|þ%|=ÐhÈýµêøº¹¾&ë õ]“ ÷«”ò]Ü0M–&H§ß{×’ Ù¦.óç,#|l…xYØžtÝÄr¡cgë³å2.θ@5µb×óIpйG‚‡ØÂ)ÀíM|»$_Vü’« [š¥-#X^fóÃH4%’¯£ósïüÑÝ¿?R8Ò¼[?ßÍ—Üæh§ýmª]©œ½‹íZ°êüJ7¥ÒªÐR ¢T":rud%²`­ÚÐ9b×·¸q° »† ¿¡¼£ñf÷‡'G5CxœmœÈD9¹ª™Löö1½BÝ&ÂZ«««“ÃS-’¶çr~áõAmð'­Åß ¬Y©í xç(A_ƒH¨#ØZå)66-änÜá¢à%ÄSžïó1ç‘d‡½8.S.?<7/$ÕÉ Ï ö)€W0ïÅ‘H¢ó³Za[!6Øka¿.\_®\ž¯”ËŠ—…Bâ½Ã½Ðú­<[R®_ÈaŽö«ü|€O²Ó·„ÿs\á§'ñOÉç5ù´Ì<ñƒÒá2‚un O¡üäÃ}mÉ?<¿ß“ŸÉ/Ü;M´>ß5ŠÎcS jN”ØZy©ì[p°ÎÀW1,ÉXƒc©3µÌ•ud¡ŽÂ6ffä^ƒVáÛrPÂ\{çyo„}|%û µ†G§Uq,LØû,±PFã]£4ãc¥*f)SºFp¤PKœAËsóX/¸\ˆ;þ+ÿÊSŽÙЗÛl…D™c3£2DMQKPUCЃ‹àC ëÀ×…=Çy#Ôs¡ª 6)|wG’št޾&üókeM3W'JÈQb6¬‹  ¯!¯•rYY¯Wʶ ]Ñ8dÆ*¨V©”K(F8#Þ)ÒøÓ‹æ£Í‹ïÑàÈðÍÒç!>3Ù!Ç”ns¡h=Í]…ùòà^mþá-ùÃ#õËnÞóåvŠ;§ŽE!(Õ®‹UV›Ñ:fBªô9?cRl0Jõ( .JA”I0ŸÑÏyÂÒQͨ.G ti Ž|%ótSœçß>ÓurœB$ "Ò¿Ãç EÒVÌEóܾL³Ò9‡ÊS ½®E$ÄR=Ú¯gé¿)‡j¢ëÝ£¹ôü25dúT«fÉ™àŠ‚–z:ýf‡áH¹Ìצ9­()T\,J‚I—bb¥òt§$¦ÏwºSaQ)G5  ò&q-•u]ˆRÕ3i^h}êst"’zY,­ÄÊ£; UÉ<XN†ÄmTr/¾3øê™Ö;Æü‹ÂE¡Uò"£Ùfþä—¼íø˜ãS­(FKL¼å2ÖhÁ¹Ì4ÓôÞÝÊà ûm–‹ #+ò:ãªQ Zd×÷º_RŒg0dYÍ­4»ò8 OxÁIÎ I5'-i¢Fô«ñY•wk­ÉéÛ{£ä09 …™F#šehÃ,® ÒŠç*üo£$5‰zhX1ß`3ç"M2è½ýÌÑšÃæ–C#ñ©XÔs‡v!uâä,Ÿ åH•jTæJµçPqžëq©F¡*(.!e˜¦ŽS,®ZXXÊÊZ–ISj9µÚ†ìÌTæa©+*Q­*•jFH}ŽÓ±NÉÕ$ôrÅcÑ›áK< e0f/OHl²Ö´5 sæÑáè’r¶ÄUf¶YÅïŽMtfA£ˆ¡™÷ÎÑ4|ÇìF;ÖÔ-;«3ÍÙ”VÍ7”‚,æj?rÐôhô°ò<áJ¶Ê|âE9=gE2ƒ`œ!g|ÂXÓu؆9Ü)-e‚ÑNÀY¼#á¥R‰Ëf·1/è¿pR¤¤8ÏGÄ´; Ï‹ =¨²æ úÀ|+cúSN˜ù–¡p¡Ë´˜†¾6_2•‘³xyÚY3Mf’ EÒ¢I÷_ë:ÕMžêÈd(d6ˆ _pŸa÷q³Æš“\ÿdE=Ðh¢Ý>`œoe¥$¥Ì N›^L~õ ¤¡w†r†£ä„A)çt—c˜.å RqnÙæj kr>¥ 4™†ªé-§B”F,!×Äå¼s6IC”CZ…e¿h=ÄÒ;ů(fz¨Ä`I4K9•o]óv›¹hÏ(ó8Ç™yÖ9ÀÆ?ùByìb¥æP%s.eFhºÚkÌ8ê3Дu²Ñò/†ýÛ…“”Åq„–‘Æ„÷õ)R›wiÚ™Út£1/PKRQpÉÅ‹‹RÐݦa¬t¤Ä»e¢²<ÎÂ-áUEOËÊ¥^NtµLG’&*h ³¹hZ¡÷ x©‡¼ÜCëýêõ¾©ðR÷}FZ;ÐÓ‘ç8$2dož'—+öE9GÚÖ,÷ù´¡£'*zx¶’æÛ*RÎ'’m”áéN,ž$¦fêarÙ¸—ÅÎýo4#ɤË6-:}€;ï"ŽÙMf0N6GÒcfj'KQFžŠw†Oh¿Ç¬ú¿æ×j$ÛN4—dÎy…Ýæ]mB¸»—„­_Us¥ÞŸ¼.—ÇJ9‚Ü=g«î6õNQwYWá#<\Î?þDýf=up²é:›5ï~Ù=pÎCNγ):dÈI#A“³÷asfç£JÓøú~ñ`еL9SÊ1ïr±àmIÖ‹‰‹ÑÅ~DòzŒ¾SÚB½ô%ð±¿mŒ¾¢¬Ðì1ÙRïEl•°N#R­ÁšÅÞeˆj\ÑÌz O}œq>Ezša g=§ævª1ÖFÏäH¹g(](¥ú^Ÿø_®¸—Âÿ^v~÷eÿ[ÛŠÞ,×@WÞs<—g,<Å\ˆÌ7mID¥šT`xÞ‘GŽùP}ÿc§'ؤã qÖ€ü믞̈~$m4Pcqñ„ú _Ù¨lŸj+´£3 Ýû r6͵UÆ1ï¨é8í¯@ ²ž3öêIO=Î?¯¸—y9×3Yô«:ybï§ï$\¨,çäæt˜(‹Îóó9Ièç]9.ó½§wÅf+æåj–+Ô+|õàvßWÊ=Ð×Bÿ ò­.ó«ŒY›…ÖSjP…j¡ñB奂mˆE°X”ÓÌ«D„Ž3#ÓÚ‚û#/Œ=Ì(7F}ã‘v‘½0´¾ð¿>âûñ7ü>øÃ+¿ûò70¶“„µàrÞ¨cîíÉ2gç¹w~×gKP„CvÌ¢ƒ4‹­Xà8×€ïªß®_Ú–d'éYÁŸ²¡TwN¨Ë9bÁ…:6jyâ]b£d…]¸&ýx`ß´,mŽÆ.Eú(Ü»ÔǼ;;MN”Û,ÞüºÅ?ýÜ ›ó”p¾ÕŸÌ~ÕoaÍáä;kù\Džno湦Ä$öϳéyžžo½VRЍ[p½¦>¾˜/XÛ<±Ô6(¯wû…ê,ÈCô&õœ‚NÓžy¿ù Nó¸Â ¶¨þĦÏ^y…« —(ZÎr³4Piޏ!ÝxŒÆ+É‘‹2¯ôþL1÷¯CÍ5MKëÈ#™ÜGóž“MBÌ!Â_ë¥ðÿËñOì׋U^°:Gßí{Çbï!ç £#¥É¤Ì§+aXNšè<+Iº[tÆDÀ®ï[èùXÏ t!ŠE([7ÍJÛÝSÛVÊ@u*çœz IDATO3“°XTu£CI|kŒÜéõ è^>‰§KP?®D[x³Í=õx r4²Ÿå—1 B§k\ÆÅ¨t´ädJ·w4ª­rnš…Ò‰•óm^ð%íb%vKIS+7ІôŽ.sÚ±^ƒ—á?}÷£xù.¹¯ö·Ê×FùÃËcó¶4ÖÃ4 _ ©Ñt#ýFuƒÃr§°º³dgA•'-|_žø!žü/±ú©¬ZëF f›_‚¯ÈÕwß¹¶Î+æJãêÇ{÷\µF<ÆÎΰ)]ÿÇ·_Ø7îêü'ßÐVð½û/9;ÿk¹ÿÍZªBÕiy´CîX»D+sWÞ/MËò¼;W/ÇÉð·:Ã]Ã-BÇÎ8›-ïçÒÏyœRÇxh6í§Qk&q“á¹ÊeI­Ov|¬^>­dÙÙ£ß5êZo¾Rù|YX¢8jPÊ=ÍHö×áIŸ>_YŸ7ŽãƸeä+òPI±†Ø6Øž;õSÂe0êPVè_8î̵MÉÐ8'u…<„NŒ€û”Är¦ÿ̹òÓüi>R³y'µ]ž $¥)­+4›/‰b´Àr5×gxþ,=}‚õ#Ê%Ø›8šÉ‡5nÐnßQ,›T~4þš<¾hZfÊ–È$„ž(<—…§²q-ϼ”'>–žâ™-ž´Ä•ˆ‹O4嬽;_Æ—ýo÷·=u´‚zy0t =ØÕi™sü³è`3Ç–T¢­TD×=þ¹Â¡?ÛXù½Ö8h½1à| ”YÃÁ»L]œ:õyì@Š”—˜¢É…Â…¥%V›w’;]_"ý`°{ÂÃËHÂcÞ¶‰y¹ÁxŸÛŠÂXíÓú›/;ËÖ9¾Þ9¾}¥û&<í|‹X_ë¥ÁjF˜Öàö³x„NÓ@̉Íy<#ÈÔóšÍ<­Çïö9ü˜ûëñž|áž¹”ú1ÑÅé3T 0u…õÅ<ož>‹ëGX®à´ôøÍäÛ`¼5¼ï¤pÙµl‹Ëeþ¿Êk¡» 4fûdI¸”Â%6®åÊS¹òWÖØ¨Ú(Ú .XW†6ÉÍw~â÷Æ?Ün|yܸïbô rœ†@%Uƒî¡ŸBƒóÇ=b¾¨ºýB=1Ãû_Œ«æ'àŸ;¶Â#¥œxK3çå'àO@’ñÞ¡›çýwê{2†‡:áÅ¡žÁæêkT.µºP¢0<ô¥ßØÛáµ- G³È™ÞšrI™È9Ë”C®ËÊÇëUŸ.Ÿ¸–‹í`oÛþÆ­í\Šo/Á 뇢$‰mxy²–+^ÖsªÑ,$Ûù0zÏ^;5ÉN—ÏëV j«ÈêVti&Yh€VHŸmÍåÑ™/x­°mÖó³üé#zú(Ö—BYŠA?$^M~Iû‹Ñ›å6 îh½³mÏÚ.WǶå;FI¿Z<‹`!Uh¶£‘ÇVºŽèþ»^–ê\Ó^ôa¾µÆ—½éË#ùv^[°Û‘ç8*§ÌzšàP̳SÏÂÈ|ßÉxV '2¨ç®Ù.þ³ïÿS-ð/:rü™ÅJhd™­Þ°TŒjú|•?«vóŽ‚ÎlN ‹ÈTŒ®b¹0CLKàËXä¨\¶-q¡ÄGZ¾6óx4-Í,-«Ã!»?LQÌ(xDêÓºòãö#?®?zヲ{çÛãÆí¾Ó†œ{Ñ Ø£(–˜V‘šª|½¦ÆÅ œãÌv(‹k{¼/™Nöü¸Âf‘YAYÝ%SU¶2èB!-šÃô0Yä‰G,ÅZ6óü,z }÷±pùP¬ë"T5æu(ÿ`ùg£W;<¤õæxºi­øåò¤q1—åïèUÆ}Bä]^Ý Ly‡ñF —Xµ– Ÿó“¿g×' ½Dà_n¾‡4+´ï…Ñ©z.6DNKcàŒ#ˆó´ü$¾ÿ!øø]øù¥¨n £lŒ¬Î„v˜ý~p{ë~Ü s¬ÖŽÇqãÚcÈŠg¶ëoèÇÍ=UÊJºÓ<̹юòæ’‡2„–¹8ò‚\9|ÐFŸÝÁw˜þBã¡Ä¦½«8—JÛ*Q‚» «ßÃÉߟnó8gK ãOó»¯p’ìú¢².¬ÑÀM­7ÚèÓW7rÎkcvök5kË2ùvnÇ|Ù>{ ì˜CǸqÛѳ6>é·Œ^à,}¾DFIe2»Xª)ÅT%£X­ø å{®å·}à>¾èõxã>n´hdÌ”y‚ncµÊªÕ5‹¬eÃ×­]É—ªÙ€¾ì’Sôx/”a”"âDgÅ©¡ Ü-N ÍEyº)V ÄPhEʺµ²,•—ÒøüRôw¿¿ýïäËsQÙ Y6F^è}ÑÞàÖÒ_wóËýÐýa²a)¹í¸¿R×Qºìg®Ïÿçâöõ‹úãNmIé1ã·Ñ…Æ”2ͤäF] ‹+ ›.¾RÙÑ¡ÚÑ“(IA9M_f~ÛRY×EÇ¥2¶êX‚k ­#9~¹Ór¨>îç0÷:%ž>È?1ÄþUwèNëO¿'¨›Uc†Ë·>ݾV!‡9·DZ`[϶u­â>÷î3w1œî£éðáá¤Ò¨§[v›ãÌ^²rî#4Ûûá`‹¶åïüqù;6ý€r¥µŸü8~¡õ×÷çݯä1<y½ºÅ‹’ËÕ”í¶ÎÆJÛƒŒàa¹„¬®25HçÙØ¹`W4Š#E¼‘=Hs=¤ó#•õ‚?<›ï>'ß}/>ÿPˆµxÄ‘9.î½²?’Û­s»Éo»éMÄ(„p;:÷ûuy¥Ä›W=³ÔO\ÖÊ›~v¸y'ÆNÌù§Sƒ6;G †%qdãÈÃÝáNQáðrŠQ5Uu‘AÌ¿Úùâ[Q©.ËÆz™½KÅkë¨ó!¦Ž5H*5.Èšb‹³,öÏx)ô_¯S‹)(}ÐG³Üåèhµ5¿ÁsF•'M„Õʥl”º²¬‹ö£y¿½ª÷sD SyUó…cl…‡Å]Öª£‘tºg¼¿¤-Kc¬¤Wž¶ßøåú?éiý Åq{8ÛWeÿGb|e§¹vÎ’Õzãí!_›.ê¢ÐÉåj×ËtúÝoèò ßö@ߦˆ;–eL6r·HÁ)š+x³´HåÂÙæ±ìärŒ¬Âèu:¡ÛB)‹×Íúð2øø½Ù®³Ê6¢ª--WwuÃþH߆Û1C¶*A©«c.<£¼òÐ¥òÌ•ïXÆG_Çÿ ¼"~Oèg‹3ޝI…VHÓ‚°xë«¶¾²ÅJ…R ªaE …ƒpºp5úH÷6´ôÂs>{•µwÅñ A³gnd•ÆR9œÕƒñw ÿuÈÜR(% ú ÐîPæ”A5¦Ágˆ%M (#XXXë…­¾pÑ•=v^ØÀì8“á ë‰Gfp”A¢ƒ:©NWGž±G1Çh° ò‘Ëúwlõ{è…þxe¯Œãgè;eœÊå"FÀ‘ÜÅínÞî•K1/Û ¬ƒµj1—Ïpù"–obÖ^;QÚi¥Ÿ™a†çJ13—q%bC*Ì–ÀÛ ÏÏÊL¶)Ȭd.D,”Q¸<¿ÀógX¯sêRȲЩtÇ0‡¹¿vÚ1æ)DÔJ ÙðÑhõ=~¡.ßs Qú•58Ͼ;èõ<¿ê}ûeŽ`k,\´qõ×¼²Íþ Q˜ ˬ¿Å* ~/ÊÓrê0Ö\yñë¼ßw»Ï z~v3E;OÙ{Œ…Áñ"þÕ/…Okðñ÷ÃzÜ“6쨖¢ uEËÂHÛ½ÁÑU[g¢ŽÊ•mùĺýàV:ÏíƒïãMñFs÷ð“F|t¸°ûgeû¶܌›Òݮư|/‘ÛÒñrÐ/ƒ¬áîAßßtì?sÛÞÐŽ Çœ'sIXì¡ÚnßoÁm1O>±V¤u“_>o×…5VÙgûÉûyÌ«p^|,U±¬hy2Q¤û7ûžs|&íÎ}¡s­u¨nÉú9¹~7¸~ÂËeªŽEqaFHïͼöë£óvoô–Tc£µÏ—ò1«köAŽ7wß8¼£}aÃÙ;™o‚_H½‘ê'ËY KY|‹>Ô|¿üÈwË~)Ÿç+wzn—‰ßÓ:;Ç€(Úbáy}öÓúÌ“.¨%ûëáþú¦ÑÖOí7Éå{¸| Õ(H«#ªJîðhâÛ‘úöÜönZR@Ô$ëñή™qíŒ|Uoíûâ¶?Ôûä+æ¤îdXi“Ã_XõO|W?óãö[¾[ÐS}áQ:ðÊ¡êÇÜÆ,ý^z¢ÓÅž—+Ï×OÚ–÷vg|»©}û†ËcÞˆj†‡DË€23« "«²ŸÆŠ¢YôúöàÑmk¦É:CÊé81UÛBy d+—ƒ…æ2æcQñGV665Þè>è¼Ñu#ë,w•x€YÀ Ä’NìÏ1zqMêÓ ,]¦ÓÛGû…{û£öq§1[ïå€v¶.º` þÅ<žºöúVÈeÑp%•Ä"Öhû®sù̓{O€lå×Göã%*-/pù^zù/—IùþòB÷èþ;|É fáºÂó©ç’åIh©äYxÅT¡…#2³jà„þëV}böjH©¡Áƒž7ŽqG½jäƒôÁDj6%ƒt ÁÆ¢ñÂwåヮº²°@žò!V"¯ÂW’ è âA-b)/Ôí™§õ³žê'Èàh7íoãNÓAžå…Á`6Ñ-Éq6ÕK!F!û¿¬Qºòzo·CC=¦Ÿ º¨Ž0휧ÖűT–ú¤º^P¦Ûº’±-…^öŠÚÆE…âªJúuã'g¼eµû8+]äÅ.•{Xã>l’õ Ö§dÕ€lôã`ü¢{ÿ£o̹È9KÖ¸ŸhÁ¨##޲*?VûjÒ+YRZí²˜å7]_ß|Køö¶Ðos¦<Åï2Âõ£XþÎ~þïñåEþú‹ÿ ± u£Î¹òÖ‹.±øe“>þFþø#ªWÈ(¶6R 7«FÈÇŠÆåáXo, Œe?eÄU¸TQr²ŠmÜé¾¾!WÒìv“5ã€h: WÃK\ø¡|âÇú£>Å‹7©Ûy†ùCj~¢´1¾Š¼±¨s©‹Ëå;Ö§ßêi}ñEní ßnà¾U×Í}Må¹Ù=+SÁ*«¾,òRÑÑÍýöïkÒFoÃ]Y¹Š è½;5›#ã„^ÏD+sÌålhOzƒvOÕ¾{y|’{á‘~èàÎ1éÃç*='¹²„5c#’º‚pÑêÂ66ª7gojmçÑ¿²oôh³,2ñä™ÅRÕl¨:5ëQ- -ò¨nFR%|ȱ»¼ ®ÿq×vúÝŠ¿-¨wkL­ÚÔÆ®èòžÀÏ¿•·|ùN,ÏÎã ü˜d}/T­ZÊ3ëzÕútgû|'>š¾.<¸J~¢ä“˸¨æÂÖÍ嬭«¹Îf­Êìc§ùµUœs«7uMêt¼QZqú!ÔÎL¬ß—"s¥1E¤–¬áν¿Ašª7ÁÂaq#Išc¬,þÕ…•ÖRµ^˺}&dŽý¡ûþÊíþÕþd(—x÷žŸ¥KMýÖ̹È9%©ÿ’9ô¿ðÈ1q9‹š–€.ñàlA÷y̲كÌnfh°k¤J&‘âž+_ó‰ê-ùFåèwµ|ãˆ_@‚NéIäùƒ„ˆÓþnXV‡µo,oŸÙúw}VÏÁÁCŽå8ãôó±:/è “¥¼ˆ¸„ʇŠ>®ª× i#íZéy¡>¾!5Q`ýÁlo¢|(ðsEÇAô(²‚¨Wôü >|–Ÿ>àå .OèrÇ–r¾¯z¢^>¢ü"úõ›«Èò¡®íÊÚ=¹ðì…zïj¯ù¥ÓÁ7o ²´Ù€9{—½.CY ­Qo¨—ÉO)y~•z×Fœ²LÓb×—üÂý8¨ Í8ƒ•ƒU*.å?ëÿÈvkË¡ûã÷z{üÄ­å1ÞÔd—ºnÔeÁ=éG'G2]¦ÿs¯Ëí‘c¶% É:ÁÚ ®³»™²J*uÀqJÍsSºŽN鯣*Ç«#^YÊrÕ`÷ÐŽ¸)Ø]œÔDÅ1C.30ª"ì!e—E1ªƒg–Ç÷Dÿ‘Œ®G¹qÔ‡Zéç.þt¡yVB'äYè*ÊSÀS «æËÉ(GÅkahÓÃÊcmª/‡—O…xY‰ëBè@,§…2 ¬h»ˆë6®J˜Z ÕDE<+ê³ËÓ³ôy³?Ü5Öp ip%Ç‹—ã ÇBÉ…¢þ°_^¥·Wùç¶¾`I憎LO¢â^­>%¢Þ:Ùòx¹RË,*L`ž±‹œvÚ’a¯0î»6Rò6V?!^ëßQâY¥|&./DÀýU÷ý«¿Þ~Ïž·¹ýŸô«®ªË…uÝœ: Iœ¡¢7yL|Yþñ¡ÿ«;t­ÏÔº`ÃAÌü*û¯wok>1fx(ÕpŒ÷òªFr*®‡²ÇqRé†P#²£L-‚§"V¡jSºX€’R§rPÕbcèI#_Èñ„F¡E£EãXÞh:ptå©î•#æ—·¤êÅÔg±>›¾dÞÈ#Ø_­\X_®žØ¡Ñç[d¹¤b]àÃ3ùq¥ŽQ”ãÆlŸE¢qßNòþ;åñ:çõ!å¶pÔ'¸>«þ¦R~kÅÇó“Ù÷î‹úq¡ö¼¦xÜCãØÐ˜eñ¢³I‡2š4zÒ6ËÞªèuš ]‡dŸµ‚y)ÏrÏìWÒ™b‰‘s²€Rvª²†Î!fÝ'@gJ¶ãC4ç…½­ªã‚x¥ÇƒqÿoÄÇÿɈGŽl ƒ’…EkY¹•u€&„žˆNÆ bâ/®f\\ôì´„{ÿßèX1/d=ß®#Ä™¬Ë?äÐŽÌõ¼—ÆßÎ:ÓÂ'´Ïq9fJ°.Ù˜AwMœ Gf³ýP=… qÏäœM¯²(Ë…Ì…Àˆ²+ê7Ò~àЫe²ŽÉ–£ôåLÖƒ†daEv«H+´«b¿"Íó^Fª·ƒ¼£í9V×+Z/ÄòBäw² Ž ßþÚCdƒ¾cí²H*Wð«Xnè¶àÏ K'Øií@]qTJqL ½_éýIÙEïIo©Ö“ÇÔ©wéÖ¦ìrÒ°ç,,gyÙ êš¼±œ^t¹P¼àùE6+®Àh:#‘v™Ñä›äLÇ1š;Ê7¢}ã8® 6h߉þ =ˆ«,<<kóûغþ€9L„h1cä–â cc2hæ_Å7ŒQ;á6›ÙçC@ž4ÕSíçL¤ÍwC|šV`‚;Æ€g<±>‰¥¦ÀlRFêSFãcΞ?rÖöSÉ­–²’*Èr úÛd¾õ‚Ú‚i…,Ä1z1 r‡C;…™ &Ç~Zñë ±_`1œ~¼±¿ûgYnŒõJ¯N´JŒú¿Ð‡‘13 Õ–µ¢r%Ê+v¹à7ðÛÀKcôq?ë”—Å)¾ÐãJ/Œ0ŽcLjT¢m°M!‘õóEåä/ÍÖÌ0¥NÔÂ'B¤T²®øñõŸ¦mNú˜L;×÷VçÏ$¡g hägŒ ¡)86ÃØñþ²O»¯ ™’Ê:íX}–¤OÆükçë°“<Âh)®iÜ0†‰ßþôè–Ù|kä€3ùGGîÌŽåH«ÏhRÊÉ8Ai;iÏY-ó¡óƒ‘ð·SžªN$ôYÝ:¹3{-æÓé)¦â8NŽq†ˆæ¨ bYfƒ|tlÆ ö„ †œT¿B»‘ý‰8n4» (Ì£w¥ ãèF?Sã²îÄu¡?::¯D|ñ€¶¢ÐŨKÅÐÒ°Kâ—ŽÕFæûƒ®fAÖy¶"j®x¼`ÍçzùXï§÷paJ•à첓§ŠzVáN„XBél½T/ WÌ~¡DP¢áã1- #Œ1½Ë0&Ì2ºˆ.,fÆ ŠRz|'óÀ³Íà×YaÊÙ9}Ðb‚ˆ&Kk¦b&‰J:yB¢D¡Sæ=:ïŒîíeeõ•Ë~àìá<†:Sk€õŽáœ¾9gŽn]ËyŸK_°iÞLO‹ÌgN¦LjÐ"?ÝÖ9> ½a['Ç —J/Έ Ѿ‡Ñšp+'CzZ>Ki\ËÆRæ%jo Z¾¢úDè•Ö¾`Û3ÊëdöÚNøA÷à0gD£ø;eÞO<ç¾þB;VFÿ'bÜIÌ;ÄrÁVg]¬—wÊ2 LaÃ8} †5¢¥O•+9^ñ£â›XŽƒš.½ó …{á£çÄ–u$6‚väüdÇÖb.«ÏDýõàºÃëvp‰Âb1¸ÇÁ£ zÂ莌>«¢–B攥 ¥ÎÖ6–gßÎi ë$wF$ÛÑ9«L9D8Œ"B…³ð‡#ü €zv"þÚ¼ÎÒU”>hÉ &Û¼PO¯IŸ·Ò)gügødúùtG˜glòLåŒéô³-1—‚ù7IºÇüjг7Ý9¬‘åÁ¨wÆâŒbs}¬Ìqžóÿö­ /â²&K Â…JÅýÓ+ôgâ¸A®3ZæE²¤™x¾ãÞX×Ïì…^žÈm…:Ÿo(s†U(º¾³¬;aÁÈ Û˜ÒJÏÙGIôFÏFËäN98Œh:#³ k^¸òÌ‘6¿E" ÞMàŸ€Ç&¢QÆüíW_Á¯”qå– O£qÑçJ¾Í”cˆIL@ùù0Ë ªŽ.¢kq@4d•S—ç¤DÈA‹~ÎÊgþ;qB…?ØgóI›{sš­´˜@À?ùÁ`}4lÄ”þL¬Ö§áêó*g˜Y±É}üAÝŸÔNÇ1¤r6kýÉäd¦ER”¬‹`‘0œHc„ð2(5èOû׿ҟ¦#"Mä=à#ùäúË‚ˆFF›SªÊzãz ¸ÝÑRÐxEã)ù ëxAýFh™P=úpúy¨yPâç^/8_ñúV€^ _P’F‹'îýË;—úÀ/ÝžÐ"}ÞV›/íœwl¼£öŽ÷ÀÇ:k[ÒY.ýJ §î?X¶¤îô%ˆÒéQV 8nNØJPÃ:CiwˆwRóø×é= M’ê¼Èؘ/ª1”2å«Ð2#½ŠNz›}›dØŒ?pçøîüÿùÄ•jâ.ÎóÆ<Ƥ£Kµû=ÿÔ:çßzd‹T›Um(S¨£ lŒ9Bñ8«tsúɉ´Òù÷‰ª˜µ†*qÎpÍg™ÖJ&]ʉœšõÒd¹hà‰cD¡;ŒË ^:ídS IDAT×·Ü¿ ×Ï ”‘gh~!9ŽPôœY¯¸WJ½f½¦–/†¯žzü*îÿ9WÙ¨d/VÖ sºl6ª(bóc&T æý4\àQÈ~˹ëôxbô§¬™:lIÕ^&*«ïb˜(&ªH‹®ìl¼ãû7t|KSª˜y\pÁ¨”¼ä¥-jGåmñlEZ†¹j«B ¡B:åP”2~@|ÏÐÁ¡ùMB#‡E BÊÔ˜­;³‰ê( ¥ÑÓ8šc?~AöD‰¿ÇÇO Û4\Mƒ}sŠ1ƜƤÏo"OF:-–…>l‚ÃKŸ¸þlx¯”¶»ñ¾?³/`ñMó7f6ñb6'>%娍ÛêöW¼:º\ *# tG).¬§äR} û3qøy‰9îKO¼‚—@ëjBû+Œ¡å~Ä#;‹ ó`,SõLÄtÝÃæ’dx —ñÞé9Èldä‘d <ƒú9çoÓ­ìçó‘@Ë Æ*„’1Æ£­ý»þÿîÇYªÈ‹ «\Òø^íK›tPLg)T!ÚÈÏÉôçOvjÞì,fMäì|ª;óFžMЉÝ4ûç8–©¢ÁBÇmªµÚõBÿ²r¼TXŠÜÎ:ϹÞÌpM±$+ËüÇne¦ÈGÐòо;zû ¿Èë?`—WeYt»º Ûù ÷‡b¨÷9EÈé ŒóÌ ûXiÍImàM؆r§t±4Sî…·íY¥8·~°ø Í{ˆÅ‰WN–è,}§l?(ß$nèò3© ‡a¬!.JÍvIÁ}'íÛ¼`hS°12£c*§Ín¨¬|݉ü+¹ÿ“î|ÆÜŠQ+âšó¡ßS£Ï]ãPœÿöRÐdä b ä>«ûf©Õ?ŸoÒ<Ç€Æl…OìDÏssõž ²Ó+=ÆŸ<·²¨zÉš‹¬^Á9éÞ$A e•Tëã©&ÍÔA˜a:ù º’B¤/&“Rª V"§•²„TL–i©^¦)ÞÔÿœ§ÐÏ…I~¾§…òÜ(Rê'ÜòćÎËɹÙêçÔ­™©ZN=qªÝô NY}æü¡3&‰s±pš®6°Å±êXT<¾¤Å/²üéç \cÙ7e;`{¤Å©}CËwTß2Ù•S3ÇX!F.ŒqÁÓ) °ÙŽ¢¥“ñ\:Á¤‹;K–žX“Ô+¶Wüº ?Щѱq`¹ayOõ7i«(,%Wö Ù!†g¤Ÿx­g,¿¦å›LßRf’)Ó%Š¡êd‰LëJŒlôJä“5’óó˜:¯!97Òš»€‰SöÌ›ùйa˜AÂâ°T¸¬Êë*ÕJ±©§0§É9FaïFîâSÕ"fJ6ó2ÁŸÿ†6¯( MIÔñ6I8q2’G†%G1²ˆ[qž5/Fm-g<ók:fÛ÷¼åšÆy¶9‡%ÌK…ÏGœqÄ|«¯Õ(«èW¡5 Ì6øœ_yâSîicÚ¸l*psüºP.–íg®¿ÿ.Ç¡”¯PVF)ìرS8ðíï¨ü_¾3^ßèËÎû ÊÂmÔ.c™¿ROäsE\b¶BæÎiÁ4¨xÝh <âƒqe¯Æ•/ Ûh—c4Fïô:ˆ§y)/ü£’'ÂÆtž9ø‘çò)Vl¼âý ôOsÄ™ƒðµá5ÁŒu®ÿÛ;´ k ^'´r86tîç1cðI‡úSÌÿ^N°NÑ?±~ü¬õí©Ç?¤•W²®„”‘ µ†µ÷,ùz|KÕïö#óòNxЊ§Qˆ4jTJ:+9yÖ¥3FÃìG'³¦0¹H÷@ËAîÆQ`Ù<ŸúUkÞ’4íÖç1ITO¿ì,*ä¶&»”†zΟ;D:åÈ+ŠWˆg”•´Áð–*,IX¸æT~WyµÄéÃ(CX8#ÿfH˜t¨Ïq§VD>yCU₸òù/×ÔËE<-dG܇ØÌ‰Ë’¬‹¼Jë¹ç M´†rk‰z²Ç™ýÏu¬¤zt"¢‘ñ/Xâ}Êìü{ Cít§\‚²$/¢¶–S– ú©k˜µùqNDòSÓpâáê'q©@-³Þ´ô`yÌjQûèÜ¿ß1î·S¯–NzÀrÞCûéÒ[ÀVg)7–ü•’O” ×¿ ¿àrŒ×øNÿ¥ýŸ8ÿ³¿‚~ù}cy»òòíee=GNÝ{ù†QðQ&#¹Wzf>/Úõ›©ŽZ;M ‡Á!âáŒxÅFÇ不x¡P=ÇÙ¿1âÂÆŽ= Q(†û{àüBµß û¡7T™þ]P3ÔoØ>ÈC”ã`i‰ $ƒ#“#æ9ö$ "›Ÿ §²~I®‹x*ÎÓ ¯—ÎëO×túV¸½;[uËέ4>öÎ}wîGòÁlÍoìS)’ŽY¥\ž9öÆhÿ®7ô¿ð—™Š8˜r´ ëÔLêyÉJ$uð¼¦|Ml ,S4£ï‚w#vM„ÿ'svùg¥lä9n›);ÄlrXKªzR-¨=©ŠNÏCõìkÕQËù|H×ù‹8)|²eºIŠ=Qû/XüJú¯jåõܼuV6ÖüÚÿ ßþ«°ÿ›¼ý˜Ís=”c§nOÔ·1.`I[úóï¹×wÕ¼PÆ3´9ùèÃUCà9)ɦyyŠ<›ÙÎaR»'Ùo;5ºj…êBEd³EÒ¿í¢#ÿÂGæÌ¯øªRÕ:²/¸ý¢b¿Ñl“x?%MgÅÛ;{G -íƒõxP£3¿Æœï¤Ï¹«>×a79sT\;O7ãùRørA?¯ƒ¯%¸¦e+Œ½rý±pÔ`{Úu«ƒËV©÷*›{—Ü'—V™ÇÀsPJUµ…ÑÏúÿÀ_¥ ‰ ijsæ©¿:ÁÈ>ëÂME„`÷ÌÈ9¶«6^ v¹ ¯i§(ÊF—6?Ê?øj1ï‹úc†‰™²Ì ‡4ô‡6.z¢AyßrY¤Ðe¾1ç‰oZ|,O¯«|yÆõ3–ýL–k⦈†ŽGÞuÍ·ôñ!ÙÆ(G6o:Ê`÷àà_íK"hÖØô`ÓÎÁ1 _QbZ…rL»ÀèÀHs©†' )<9–ŽF§Ü“²•´ÍôÉÕàšè¢TjrO23c¨ÆÎ…Rß³MÇœñZdZ‘ûsÿIžßS¹ŒÕ‹[ZJvnqsDzväMiÓ𡹺ÎL!ÍÝ«ÃmëB–gáÏ®ç+¥Õ¯X|EñÙUîF)#×Ò¸ôëxä26Ì:ážÃL5É¢HÏ#¦F”G‰}}Ì#GmŒ:2Óˆè ŸàÁd´Œ¾ zjvó0 ÒDÐzXöáݳS¤çÝ¢CŽs{N’¦É‚zPõÁ@4È]î¶0ïV îOØqCyM³BqýAã|Wê(ÚÒ¦àéݵÈL¥ÌE-p­äsM¾\Å—Wñül\.pY“ 9Ïà=slbû0å»èwrì3·¾Yðfžofú°äî‘[ˆc@¢Æd["Í@Ô´ãÙŸ$Þ´ZçÙ2•[ý‚Çýƒc»>l‘XèdMˆž`öH>ZåÁîb”ƒâ+‹ž×_/Ô{%WF7é<†3xpð`îÓ/Ed²*(ËL=Ú8c&ºÏjVµ zC>¯ßÍÄai•Qžˆå ôj•Šs1q­p“¸¨÷ <BT®Þ§oåÑwF6†‰\&¿ÎÖAYƒ~ ¨ƒl…< ;œz Æ´6&GÙ˜ëíÒ0s¼'Ënè~¡?žÈ}å(AÞ«ƒŒ™¾3Cîh¾‰¬‘¹1´c:(t:¦N·yÕbŒ²"n3õ7Ý 6¶ã¯ôýwÄXï„ Ú2#»±ÏøjÎ63nPWñå ¿ÜÄ×'ñÓO…§çJ±Ä-ÈG26ññ‘ôoúeÓ HÞoâŸq~vö1ØFðØ‚Gg ùµ‹¯ÏâõU\¯gϰÁÞ`{ˆý#µÝƒ¶w¼Mä d ÞoÆ{5ýþlôGШ zD–!jš>˜gàCi9, œþÇ.…ª+YŸæÙ/¡ƒ÷öÌÁ‘¹€á+Ìċ͂æ–pL…GôÏÖ\tƒ‘Ûløv'[°-°¨¿vJIêrPiø»ÐZ#F§ Ða†ŸÙôR ±+" à ç¿à§–…l òWÖõ•µ¼PµÌäžÅ;C?hù;E¿SýwŒêqÚœØèX¬”ÇO ›l·¬Ak;ãÔE½ÌÅdžÛIŽ ·v¡¾€².Ä÷ïÒûw¸¿Ãc÷ó^Éç§ÔOÏð—×àï¾?=™¾,†¥ññQï™ù£ckŽ«PŠiqgëH=ɳ©™ÕhNf•l…zMIdЛ`GsÑò©’šø‰Ù´ü_gÛ¹ ÁßY¹Qt)•«V u~×e£.EõRÈ‹3®®>æWI¨³2ÕÍØó$EN•۹ʳ½¡þ(ôçB.¡ú îÁRªÁýH"$Suðhâ±µ .k`K 6Ç\m©ÄóUv{ÂüÆË¹ žõ¾ó\>N¶]lXûÀ÷7eÛhmhú àCÒ»’KöI擹ãEs<¸LIOˆ–ó“¼L6¿¶#¥6È6àp²™"±¹ÆÛ&Ê¡,Pª Ÿ}¾¡ÚõÔ¼)ºè½2˜#g`cÃô¦äÊ^olKç¸Jã¶—]qÝÉ«)oưB §¸ëú.Ö:q¶GšR"똫ìë‚~þ’ü§Ÿ‚¿ûúû×äiÕŒþ(Ü[•´?XŽ×4T®[X̹´¾«õ6®æb¿Zq"* á_å;µ71Þ15ì¬|œÒôÉEáø¥íLeê úlW·éŽjÉ ›É⩞³,2…lJ%•™èÊÕQ%'äå¸}þ‘?:'1 ’1"{?Ôú`‘;¡å"n¯•cÜß…96ÇP ›k“‘DÕD)‘&T–ŠžVx^³?­r_)3k‘>Rvt¼:^U©Þå­c}¤é_êÚ6ÙfªrPrÌ\†Ù´¼†æ?œ8EšF¶É›8÷B3«6f³#ö#³AÉ §*Oð¨(DÍdí#­ʾ‘}o¤E’ó¨ÜgÞazM(I«"W†.¤{fí²eËRåR2k9Qh —,ë“êú ¥3,rÉA*T*¼TøùIù÷_Ñß¿ŠŸŸ<Ÿ«kGoŽ~€ÿ רÉýBñg[h*™tÛ²iSäFŒ=GHÍޏÐt¥qe³z™zîÓ¼EPÎÉ–òŒË8þû“Æ¿o±™´¨ŒaŒì =¬ñVCæó­j,mDZÊÉ)(wT4×—~:ùF~Ì¥ÉR¶9‡ug±Ú€·i¯å—§•—¯Iî«uýþíà>ùb  ÊN B”*‚r)ð|e¾h».d)¬ˆ:Bvô SYWÆÕ±ÃP„¼ÍZ\é¦ g¤+èì4…MèMcÒä³ÊÌIU‘Åæ½lŸ¹mgZ÷¤¤µÁØ6á+.“|þùºK©¸9k/}¾Õ÷±ÓúAh2;®7IÊˤËÎJñDè",¨¾Iµ1q³Xé\¨þ¢ºþL½¸ü ê&µ`âYÉß½Â_~Bÿø³ñ닸ÚÄs7Æw£ûÞX¨Ö+±|e÷'v»²ûÂnΜXnê±áÜ©yŸ™¦~¥ñĽ¼ò^žùM•žßÙe±SlœÏŒh),%ûÌcÿ/ÒGÏzœÍ£gBvµY •[L7·Ù´ ‡2'ÃNRæp*¦ô ÝÉ̤tƒ‘¦Y¹('Œì9T[K=‚å÷ª’5ËÓ¢åvM/{’¬Áþè´}œº…ñGw¼8¬×úl©/Wøú ϵjé:µò¡4Nݘ Jä½Qû=ËØñhŠS§¥žÊ NغYJ½¥BŠ0""ùÄ)„óÇ™˜Ãaè˜ žéš–s"È£ ³”‰$JÉáeζ ,‚ÒRÞÑO—b’\=‹æ=Âi1>gÐZR¹ô µ'z»iþöï*Ù WFffú‰¸ª/_³¯«âRM†S¬åëeðŸ^áןÐ_¾(¿\ k&îžíMl¿Áñ=éwÍñ¬U”·´¼¢\±QÒÒ0EDÉ%œKº<À(Ù©TUÌV6¾“Œè&©#uÆ}-•x¦4›+ù?P$ÿϵnI¢²Sk2ŽƒÞZ¦†|=}2ó¥ˆÈÚBÙ“°‘®ÐUÉ—Ì\Óú\Î_ÎLÏu9¡šC’º”-ãÈö²Ã¹|{ÊõzSýyaùµ(Jc-ró×B½§ŽmÐZàÔ:¸^Œ—¿\òòŸ/êÿùúú •kª7Ù¸sÍdÉ’¥]äÛo l”-X·GÖý‡<þŠô–=7 íYí¡«ý –#ûІÖ«8,Gtõ~hÀL„­—Œ{ª7ËÉ=nAôÈ!¤:9Ù&Ð-ÙsÂßW%É‘ÁF°Ž $£I>(Æ)Í\2TsP4²(U<;–{^ó¡¯Ûwêû•²^ó+5²”ºå°]ØC7š]òwÿªGq~* ¯å–/õÁ—§M¯_;?} ^_2Ÿ—ÐŒ#sm¿÷öwqh¥Ùš=úžÚ¬±Yæ!idÒsÇ#i›úØè¹gAªÙEN ¢bÇÍ)}üÀ¹'êŠ8c—&™ÍŸÛ13lÿ¦Öíÿslg¦t¨B´!zŸŸ!(sw0uPFæÈÉ—t\½¶\È‘LáéaZâ /Ï›©“_ù$Y…^Z=? =P¡‹g^o®—Ÿ¯Ô¿{Éý×WŽŸ¿Bwì1Ò²±ôP†-};(úQXî]uß(ý=•?@`GŠ ókýȾ4¶Õ³S$ŸÆ…Í20T|–š‘Íf Od0ÆPœVÍÓMž•3 d#3{íyDªGâ9Д³ÓdJ– ˘eaWÇÉœ_ ;—ÜPûH{,𾲕J,P.•(VG†£\èVÙÊ-Ûâ|½˜n×…ŸÊ__ùåõàöܹ®·ž£wí[çñ–¼|ÿ1x<œ~-4_8†8zãaƒ­Ìõ{Ä GmGí‘N£hP],i„ŽhÜ3Òg‰™;²ØÈÒÌwgb0d:þÕ%ìyõ-‰bWÆÅó6sÆ}¾×»f"jb¬™<¹–­¦?r' n.ã;ÓÊ óm:éÚ$fúHj¬”¬T]0UZû´=èe"W_Ê_ƒenZps–Ũ· åå^^ÐúŒüB‰ÀiØhøÑñ-ñã 4ãéÞxy;ð÷ÁØ“c4’á#ÚDØNxÇ,¹Äét ú: Jt !§OÁè„RÎFïyýdǐǿr×þá“õ‰vðDkL=Ê2«HÄ [îlfmþŒÉ*À àˆË”úhô‡±o¾Çâ _iËŠ°›ácaùõ6ËÝQˆua[ ßxÄÚ:Ú6ß:÷ß?ÞàGOÀÑ7:ƒž³±½Uñ˜Ó8ˆYþ t´N$E1(&Š'è  º½ŠQ…Æ6ëzÄ 'ENŒþ-xRùif•IÑ•F%r$Ü!ç€?ûü47²‚.É‘µOqNa¾Á{*[JnFÁ l'cÁ˘U¨€Ú5n±²Ø%KY¡:à­³ícÕPi,·äjkîË Ó’ÕŒ|ºe~¥ßž‰å ¨,yÌõu4´ïé†ï¢ÁÓýxb IDATw¾¼}#îÁû~á¢ë ûgÌê <2|žå.=©™ìÞÙ.sZ1úÀX^éš\ûdðµ“óg‘äøŒxÏ™ÇäæçUÄ”§MRÉ´KR2Óê™GïóÅ`ª˜-É€ŒžAŸØY®5 Pû n-Ûöh´ÕØ×B[X>°jè¹PKår\óê† G,´â3È?vìÞáý‘ß:%¿¿‰ïé|X°}<æÖ"· wOz=MhsŠm«³'õÉ£ž¼› Mà}4å9žJ²Bxª1™\žpÌE_1\i“e'DIã©›~:Ï­sí]uøpÆÝy~{쵪øä1§]èë…×Êï7'Z¸=UÝ <ÅÁuOn».üãA¼oèû&þyÇþeÀï7öŸñv°ê‡.jçWwª{¡YÕa•C…;¨3Ø46‰"[NÆ^#ŒÈÌrÄbÉšÉmÖÔ53‘e$u¤ZÇú¤j™ŒâÁbA*þÚÞmY’ãȲ\[ÍÜ="ÎÉ ²jDzæÿ?ižfDz¤§Ù$qËs‰p73UóƒbU“,²º/€D"éaa®º÷Zêe® ¥2EGan§v¹JõF±'»RìI‘Ïd>“Ñ?B*¼rcÓMAÉA;^¤Q¾VÞž‚ŸÂµz¢»ÑÇÊû0ŽÃd?6ôûA418ä<š¦NÚ'†‘¡s‹»3Y'(}òѦqlÿĉMgø 6i$å>sÂój6áöUn4ÿ¸4H¦Œâ$ÖÏ&«&A;4Ú !eæE-æH˜Y(É#¥‘ÐÈ<,°ª³…rbítÆ2³ËÏì¯Ôå¹(«†mùºT¾Ô­ç…¹®Æ…­¹Zôú©f~)*r+Žr°ŒÆ¥=¸µ¶?howÅKK¾}«ðþŒ÷ß ªZ³”;FGégÛ¸i ?³³5G‘T£Ó=ÀgˤZˆ|RçÙ· n)ÕPŽ9ÐÓ&rSr¤ô6ãâX†d™fó³ZdY¤_ÕTã ¥%!7Ë´‹dŸÒì3E_ ¯ .™ÑiôÖÔöKöwÓ²e.×A-² „N–ÊqI½Gf»W`å+ßz¡µ{<(÷7)öĤy`ç»ÕDÀ…„S?ŠA2üu榩aHâ䬤æÌ5f Ï&,”’ 5%c&+§FYŠJ¥Çß’éo¿¦£~œH§1{›uùPŽ8“‰È ÀÏ:_вD¡Da ñêš/~#(#&ŸùD’¸ŒÝ“ÚOIðvÃ1®WöçϼÞ?ßV¨5ûd¥­_…þUØ”m°XPµSã`õ·~àûë;í›°·ß`ûWä¿¡ð•P¡+ÚQ¾ùÎÃwî±Óè“Õ\‚ºµ ½Ð=Ù‡xÎ䫿h«‘×â|Íà7á<9\†Qº1š ÃMƒ[Gˆo^8*N. [Â2Õâ‚“t‚ÆàÜSô(D© ¤”JÕÆÊ%ŸuÊÃØ³ð+÷|âŸØBlì<)ƉYæ$dOÑk±±·+ïºÑÆÎb/,kÁÚ”xyVº6"Åâ ‹A–Š×eÇçÌùÀ†ŸL˜¿ã§üg¶ñåãOíé)Ìr–£cª-«° ô>ˆ¿ƒ ôWïÐʼŸÎÁ˜hØr^Ž"eÔžTÈL"Õ|˜eç[i QhŽŽœ§}c66>?Ý2Ì<|¨q]–Ú×ýë'½×ÎÉÀxʃ͆üýIŸÏ)»Õœ…¡8ŽŒG×xï´gÙ(÷Oªí·(¾Rô éJ²4?2òç¼ç7ÝéjH} ´jUa!T#rDÒ|â¯(N-Áeù¼}Ÿð»OÝX¨˜>‰”<ÕÐÍ"àçût"K*·$¶Th>8dWã®ÐÉ’–{šö˜'QýÀ;¸À3=O×ï~ä«ÞG¥ùƱ ¶êº[§­~Ó ÇhàÅhK™U¨±êhÏå3-ö”]d‹‘ÃÎ_GÊUgUv¢ÐÒXÖù-FÌ–ŽOD®â$²Íï´™•û ÊœßÙÞ9;*šæ.iÊR³oé{ÿˆŽþÇÂI³ e…µŠë:9oŠÙóœvG5þLÇ!Q¼`^•^/ÃÉ,‹üƒ:ž„°³tÌ‚å"]oF½t«Ü1¼w"P£rXã¸töOƒöÉ©Ob«ÉÒ›Êhr¼¼úå‡Fû“8~üL|{Ö²?±Æ‚ç +?å8]âç‘MGÞùªµ>¸•Ƴ™ž¢pKãš ™&~€ÚÑ2°5X¸-Æo¾w¸Ú|I̬‹Ä"§‚K–t=>èõÕ ÒŒ,¥«/ÉX£À] ïVõ`å¡•Þ«ÆÞðã…Ç>¸Ç«:bñ-v~ˆW½æ;Ý^Õ÷Fy+²í¸Túg#"äÑ!‚¢ŠR*nèØð¾Â¥`“pIVÈbò^q&´=$:+žE£T¢Vô!€ÊÄõ»—t{ç_Lú|ªã\á}(HrvýÏ„¨¼ A?úÿ ,ü4!mp¹‰ÏW£¢Eàý\°¤0Ÿ/:[ŠÕ‚EÆ2 Å|ÜEóÒß3ñç†è×·ÖIPš r¤`Û’ëM,W¡Íø"ÇFÃhY©Vxß‚ûóA>OÁûšÁr4J; £wÞ^:/?tÚŸ6ôÃgÊ·/\¸²Í=‰³0¨rº ÞÔyÓŽÇ;â•K9xZ‚¯Vùâ Ÿ¢ò”+ϪlKgÝ ¬Nn‰–˜’Ÿ"¾|7`M°ãTAkê4‚Yxm$K v33F™óeSä6È[â×dlÆQ*ráQ6åÂ/ÊOß:o¯/y§5ãH±gòK<ø!_xƒtÇÓÈû3¹ÞÐSACdäìë§ÓÉY$Bm%ú6™Væ& &܉,ÆPŨŒR&‡.ç‰<ƒhÓ—"+gfçÓ̦ϴ5üZ}þHP£sÎÝ9—S„ÿûôþ¿™åpwF½›Ó­ópɽ$‘²œïªƒÄŠ®ŒÉ˜ö^ØÚªì–9¤d‹J?ÃiššDWÒ‰4K-6•IÓˆGú¸ËÛ=sBóÛµ™g_~IX“jƒìNkMïo=ðX¹ÿIzüTÒ_+:‚ÅMDgÕva©]ÖW®KË¥üÂoì]FÏ…ÐçJ~¿%_„žÜòêEkX^0­U,K¦Ö ×@5¦#ÈËH–1{S˰È9$Ä¢’䚦Y6. QV‹°ÅÑ%ÄÕ3ŸÄX½,”å¦e½æº^‰½ª-™}qZ îû¡÷Þó=;ßr箇v™ž"VÊX(íSê±ÀkÀS“}wϨSAìTÙöXS÷…rVCW2/•iÕ¥¦G0âľ¥™ê‘Œ²¤Î.)ié©s:6‘æJ1ó©I¢óò/§ôŸ¥D'âeâ³H•)®$ôWæÏÿS–ã/á 9x'·ƒG—úT«J'MAj Wö.Ê,3ç*a£j=–´f²>ÂQ‚&t £OâÊ´,YhØlr—"Ky´ÜÛ¼qØ…a7ÄSÉÀ& ¦b%±'ÙÇоìïÁñRhßò‡5ùæðpˆCÃŽ”/”\‰z£Ô+Û¥ð|ͼ^:¶Ü©õž‹ ®*ù©†¾ÔÈ',ë(/ó›É#ÍBfõ܈)Nx2xOzKbÖÅ”df‰9ƒš]©Œ(",3+QÅR²Ò’Y6T7Om)Ödl–n+¥^³^žÙžžt½Ô¼-h·žowÚË‘ïöз|Ïw:½ÌˆUD¤eè’K^ã3 ýÅéÏ÷´|‡õ˜N¢\3h_`¯”=°%òxª’ŠedQÎ&CÎá“Br”#L X(c-p$R©_+åTÅžwZœy9KT”Óy}‚šæÛÂÏä/=ÈÿY÷·+ñHØ >*ÑÙHªw)aFNzïìú á.™ÄeˆË˜(ŒIC; ngŒÔ~ý5}|8óÄš=Ø÷CCw‚ 'u…Õ>Í‹È-Ä:˜¹8g¡rþx&ïWØ;ÙvrÜñØ!‡RA1±®Îõšço¹ê·t{ɇýQS 6r-7=/W>??óõùßYøíw%?ß\ÒNÑ#½hÍ™l³hhxª²1!;Œšá“4¿ûÂûHz–ÉÈž;iŠ‚ËK ´(3ªºÞº¸w²¡îGf€bQ9 Þ…ûô÷ùPZŸ&WΑ/t{ËÑŠ|¯£ä·»ôÓ‹øáEü°G>Ž¦Öƒ‘‰‹t ÁHJWªgx—ye˯(·lþ£Â_Q$NÏzH'–NÖžGoZû ä-«6Œ:Ó×Ó<¦)Í1ì3ø¸ir"—>^ô23ôHNü IL çÔŽ’ÒIŒ-6çå-âï&'ýuÐL:º;fWëìx™!SºMͱŸ$©SôJ±šï™2ÓnDxö1GJ F??s#ó쌻ÒBª j´T<¤¼g×W´-²z!ÕY3MÒ©uHÑ“bò¸PÆS.þŸü{î>؃Ìxt);ižÔÄV¡‹Q®‹Ö§•í‰,TŠŒª–5Þ)>ñLóm¡g$Š™ ¥9ìN¾7ãçV9Öâ\Ê$mÊæíðRSJ±‡ò¦Ÿ¤ü…d†œðÙÕTµ¤Ì¯öÍLO KŸÙèhžf>cäê^ˆVÈ£føŠ³Ì1®YÎX ©,“[ÑñqduXò²"¿dŽB~x¢c`#3ä»ãep ÏâCëpˆ‚ɲpr±Í0;K ýÐôSc[ræ‡<Ê’´L4eNú JçXøãj2»¿V#çô$ÿnÐÌß„5Š7ݬ˜ê‰qR(M¹¨ª¨@TªLø¦ >@çæËÀ×üÐõMß ‹p)9Êvº¥/$KG¢£¸k”A>­¨^§e©VáB„¬tªí2»`ñÌÒ¿Sí+ÞÇqÏÇãíÇ á ÏÁkÞe.ÖnØ‘ðÄë•=ªnkp]ÈY%íYÂ)žª‘Y<$Æ-óý€÷#ô­?íΞÁºEÞÖÔ¨F)•˜»"ÅK˜¾yò—~ÊÇ0|Tv3îÏ7öÛEþ¼ÀSÑ—üŽÁ§ã`ñ  ùZÈÅr Ó–†iåûz¡^éÓ‚ ËoµóZ›Þ»3<2üäGá {ÓóeÌRÃ&SÍ|:ir`Ò…wÑ™ár÷)EUr™nƒ»‚rîŒt¶Ðæ ãt`Í=ƒIiÌW†3Å™Ö4͵²|>”Á¼º†ÏÀý|‘ìþÌþÇæÐÿržwLjÖsNØÏOdµ¢E…¥TŒªLÑt¹æ¹– 9£Žbisc‚Qnt¤Ýæx'ܵ8˜wÔä:ȶ@¹ß¡,³úBb KKA1q`Êa¤—y‰ ïûž’Âq†uÌÖŸòвñà¡>uÊd½ÌÊ.h§Y-bæ÷=Æœi"èi§#|Q†t^ý'j’輑û ^ °Q Ù`ÄôôÚpj˸±õOh@ÞÑû9Üÿ²‘ÎáÇxpïÆÖ:µ¾r©Æ³çÞð8æªÕa ð>—CšxÝŒ×Ry·Á»;½ ©å‘ü©Á+⩊§e¾Ò¼ ç5‚Ÿ¾¥hk!ž6ÞŸžøöõ3/Ÿ>1nŸ±õÆO"ø¹ßÙ¿°ø–@k²®b]Åe-\—‚B¼/ƽ&^f|·DRû”fÚR J½¡òD±g¶|ƽ³ì{^_,1Õ¸m+Õ. ¿€_HŸ™ñ®N¯NØÔ9O‘¦ŠÙ«,óZ<ÿ‹‹(F#‘‹P=9ß \¦¸ Û‰Æ1SNJŒ@GàýïšAëoΡÿü³VØÆÂ—±@vÖiyL‚{M¢&ÜCÆŽhYÊPúaˆYM’k:ïðùáO*Ó¹÷‘ä‹p#óÄÛµÈâÂTÈ<œ>gÌG¡´+‹ßp0¼ãÑ?:}s±1ŸÂ'µ¨;­ßu ÏÞf 4#ðúð3G!.î-x ô­fþ´okÕ»jöÅ`LǸÀÛ Û¦–áó5©%ØÝ9|Ð2&Öìr%?_Ø?}bÚß2KüCl»?Ûv22äÃ<É!W̯–Ììîš÷Å’]¡!#B©ùz;Gç!ìlØù³t¡˜”ü¼øÏY­È Égq‰vI î­c½#¶Ø‚¸Î‰BD›ÒÊÜð¼ÑcÐcJGO˜?cñ% 5Œuv€ ßà~À¨¤k¶ˆ vrÊ~JJæl]§aW¨Và*xÒi!Ð ßž"JÆ‘Ä.ìuÀj+~q.5ÝáœÖÒ&—ÿ ns.YrbOÍ’¥eÑÏ\âsfùg¥ý—¬ù=k¿¨ø4qù¡Ü[ˆÖ3–®è–£§¼~ôô}DzwŠ‘cMÓ†XMYmo:Áá©}ˆ×QòèÓ(õ*Ëjò{ÿÌÿË÷Ù–âùö»Ü®Oеg¯ï4¯ì£%~‹¡’4ƒ˹¨˜;ý:ï ¹ÚP†Œ%’<:qÀ¶ º¥ò]Zni{H¯ìÇŸÉ?ý‚?^2¯ïä§;©’2W6kàÅ3Ô ÛŒän>¯e1»ˆ:æh0ó•Ì-»¿ÐÆJzMùóMsØXYV ËHJ¬_’pÅl±äš«^¹²³Ói Fq*$VwJz–LêŒ'Q”yËà)ÁBô˜7ÅÞ§:.ï #±!ŠE‘®”ÁŸÑÿsÆv¿Þ£ã|†z“LSW[¬&å´|3R:—ïçf0@¡I°þ—LÜ·3“DZš-<ñ”ÿ…gûgÕú=¶|/ã+Šå ÁqHz8ìMiRîÇ|@ö!ëŒ×†µÌK.2‚-;–I¹DKã% ?qõƒ«\—i¼ÍÇRôvÙòq]¹­‹>­K~^-ÛÊ£ {Y³åŠéªá Ç»“o ?2¤sõ ïžèH\¦2 H·‘™AuQßg™ÀÚ K—ŽAy{Ãw^ýN*å™´OÉ‘â—D/븣ºkyèiäQÄ~©ótKyBË`ø+‘®1þ;GûX¿eŒ!ÅB‰ŠâìûmU¹ÍV¨Ì’‰Osž½^ØÊ÷ʺOås4ˆ–Ós8H¿£|ÇrWµƒjR“RB¥ÌözKÑ{j°Ï{³tud*¦•—DÇcpŒñ—®ÿîØîïÒºE¶é¼PAVÒL QÍ2Ó4s–Ó1©3žv»´Pœ‹L}Hí‘–cÉ«>ë³ý3Ÿõ¿çZ¿hY>gr!¢j¸s´‰(-¤£'¥‰ÃRÇPA´Ì±;ã1P&k-ifTÚŒ%YI—‘ª ÓîU-7µVº]²ÕS#sž.7<—й3ί£š> ±;ñèdS@SÎ}ì>‡íu·´‘Š-Ó·9×õ6gñõ°)¶t)–=í8¤÷7üh<F±4»bl¨EÒ›ÖÞXµô\ëÏ…ãb™2Ôf›>³»gq'rO÷èýXû ޲̵½4 ³BnKæVfÉ7±f±Ûdø.WÊzä²4Vk¬¾SÇ÷Fï#_ðXÞ²a%du Êœ 4Ÿ'ô#Ñ~$í˜$ùÇù6óK}œÎ}"ÿçÐÌmytd»Ê¿ˆåÓ$e-Ó¡âEåꧨ>}Úµ¢Xæð¼T’Up1tÓ–Oå;=ëw|á 7nR©`L™9FOQr%sÕ–…©éç áI¬^éa™ªC^ÆÜLΊ½¼0Éðåe`‰*‰É2èÊ6²Æ`;šÆã‘yQ]/¼Û¡WÛón^†â±ÃJjŠèbr ¦Pr’EÈîR$TɱGuª:HÔ@­ ]Þ;Ã_IßfG)K'¼¦…“í öŽ›«¿$¶¾$zviK–ç’%½Í_cOh‘²q§ï¤ìGj¼iñ6ü&JV¸,O+òNŒÈ¡ zÉjäZ¸,h­ÁšÛÑX¢å Ó}Ð:×*× ãx$}¸Ž„=•à­˜îÞ”:ËÃ#3=g›æ°«Ò6hÇGhþ?ÿ„žâ¥qþKŽdÕ| ÑLL•"­ u”¼=ÐÚ§90†)âtK©A²äìá] |Z”_ëÊoëoò“ýV×¼±Prêá92è!õ(ˆ gË2yÐs[š–¦ì ÞÖt¯ QÕž¹8^Wcœ¿ñ(æ©vª™3cÞg‚©2>:åØÙó=úþúcÖeÑ#ïÖ9. Çõ’ìÅ'cæ°23ãô‚%Rˆtž©ôšdÁKr,AÈY4öÌ.õ™Þe±£â¨Ú¬'q'GrF‰•݉1è–éw¡UŒçùmXN f3Ï<a³âG?ðã'hâ#-¬»²5+¹®éO Dàó5Óž5Èev䵼߱þ °OŸL 21éXÙsáȪGA¾<ŒV,£H›9KÌžS”⢗5£,¢ýéÿÏ:ek!TæÑÎàHÌ\óŒÓ ‡k>Qµ¤¨‘!Û„uG’ZÊÁZ:·Åø´­úT¯|¶+ k˜äyâŸPËéiÙÓ„Vº]YccU#aœ ·TcÐugð‚¸#Æiš?CÊT%ÛGlÒ©ib=ÿOå”m;MÍ“÷½Sºqàj‚Ñ>Ç&õ@‡MƒÑ<î§ôZ3‡±Ž“1uzUQÙ­xa¤,B3_|(½1dÌù²Í.ý)±˜ ,2å!’¢HC>ç Ë‚–Kr¤ArŸ.nÒˆ:« ²Ž•F¡ÁžD3Ž0d³JǸÏ1§ñõ®RÞñøYÞ~âÞÞùtl­Ñb°kp”1ÍeêÖhêìr킇‰=Å@äŒÍeL†bž/Ù#è‰Æ„rüµ1Ý¿›¶ûûNè̴˪¸ÎsÈz£´¨‹è¡ìGZ:—¸è«-ù•‹>åFɉÜË #—úƲÜ.EÏ—K.v™/&ž²î9?ñ‹Æ4:ððÔ¤ÛÆn7–Ø´Žš]¦‡Ý( IDAT¼*¹¦Zíiö ég ä;åtUO.ydBkbUX™¦HËcøŒ‚šUJ)ÈL‚ôtöìà(ÒÒóBô‹òñ5å ì€1— ¹Ì)çÚ|¸2cÒu«dRO~•÷ߦ•Ñ^d㑞]AÏÌ!yf(e5ÉJZáTLYïÄ¥e(U—ù!¬RÝ2/—ÁsØ=´3½eÌžAbd-Ø"ê2(jÄ{*’þb´˜¯B`äàȆç®5ßò?ëÑþ˜?ÝÿËþ§#؆³Ó¹—®® &`êš6¯ãÃ4õ0­‘cj¶&¡^3‰žoóÖö?ŸÈ«õýŸÐ ¶Säíc^^|Ê'œ= B³ä¾">Q¸²jÕŠtj:1²4T;—jܪT,2£©Øƒ…+õ$ aªót¥ËYÊK©ÚŽÛÏŸÕo<íš>Á_îr{#y‡h‰i’˜çWo";]pg¥“y‘†Q³¤©ÌƒŠ¡ŒÈðP¤¶(µ¤Ü¨Ýet–â”5讙ʛ H²÷k©,ÂTe¾fŒèÛäHw#Oò?æ­Žù¦SÀ”çð6Œ_똲DVdµR·šÛ*.KêR’KŸÔ™êËS¤™²åR(7åòtH×}ÛÈ·gâñ‰ˆ¢ Óý/éñ£ÈŸ°ò3•)ñ“òüöë‘„GÞ­qW§ËùÈô¾É-9¿óüžT¢È8…Ÿh ±Å䕵à2ÑßÿÞú?x‡e¿SÆ*”‘tgšöd SGy÷ÐË躪ñ„±šeU¥Hê2:¦Ý¡àí,Ùs+©Õ”7“nËU·²e ´žF›Àh»IKAF.oOºþþw9n‡òkÏQºb{Wn–”Îù­¯²VQW©VTªå<é„W1¢Ÿí‘-E%-LjÛÌœ-‡mj—§d}Ri ý§\ÖW._îÓUr7ùC™³éÌÀ¦a)4¦Sñ¸¦ü&|Aû!u§ÆYK/CY2gÕØ4û–œÔ*a‘ŠùŽ©Ì”°š¹mÉíIzºÀÓ2õ„<¤v#SÇ’¸R‘™ËO·ÊúÙT¿™_tÿ¢ÿEÿÄ’1~|£ô?è¿Ï ?è²þ¤+?q)-¯Ÿ e»MöàúX´c 9™}²À'à9gË)lbF”ÓKóÚ[~›U‡]Ù/Ÿ8Æ{ÒßôoNá¿vBÿùŸÿ‘š4OÍ|°ÉûŒY)rÒéUH)GJt^iù¤¢g36UÝf¼ŠV“{Í|©ð¨@IUs=-G~Yßµ•J)×ÜÜD,´c‘Å\¨`GjYP­*meyùNËû/ŒüYQ±™—Eªã„ žKM5Ù²”´³…ìúu©CÈ’,Z6ÿõ}.ջˇešd¥ µhÕ±k©o”Ú&S£“y˜ò ‰Gæ³JJ´ªlK¦§4©˜ɺ¢ä*i¿‰â$ÄÛ„·fƬã'™ŠPÅ´-â¶‘·’ºÍ‘ý]™wS¤§/¨K!•EèåÉÓžwq;P¹ãŸÒÇ'2\1îøãO”öû\â¿ëŸ¸Œ_r=_о,_XÖ•¶Â~xnÃØ\Ú]4ÙÌu´L<2cÌ/òæ‡úœ\äÙ3´˰ˆ¢ÿI)¼ÿwœÐßêû×Yt3lÿ4%ö{#Û—s‹"3%É!ç=]/26irÙ¹^Ÿ‚—ÛÐ/‹x_êºr»ˆß^LO7Çêòެn”¼bï+zdŸgózêÀÓ…jF¬[ŠË„VÈÎ8·å¤ƒÆ2MXg}ÞÏUý 2b‚¸ËáÔ˜FÃÆ¢yÍ+°Aðmö ‹3Ôé#ˆnô(¸ FPb¦vfÓ{Þ-™#»Od1(å 5Ò‚(šø,NTÓ ËLØùÇDF“bZLÚ73žKáÙRksìÇÇ`|›jR*ËôÂ(l3ìò@kJvŸík]PùNs`üÑ~ öÿJ>þ›ñ#É Ç±k{8ºV–§äs5¾«ësÑ~<Ž7¿óÞwÞ­q_œ{ fŠ$iÓé=Wk%I›Ø´%¦àq€_i÷Ÿÿ#ÛnýëïOÀ8îªöO‰žðöFŒÉ&K >°9Q’ƒ!ˆÜrÒë<•{‚oE?¿|Îü¶îÛ…m+úz«¹=9ñ|`å]ìo9Þ…sS´çŒXÉ^„Þ3/OŸÉmˆåšV®ZJÍ”—ȼ¬"Ë™§µ6zT´´8»lÉ%Å(K‚†SÇex-&¥d3ÑDé2;²ÐIQ-h-Ya̯cöI;Uä̳Ìà,:8©Sûl1óYV'Ù?Ï—½HiÞ5óž{QQÍ‹¤«”W’kº»bŒÝéoÉØ%9¹TÚÒóBÝ »½Ãuå> V•õ)§¯ðÄþßðýÿ&ÿˆw‡*ä*IYGp¹ÂóºñÛzÁYi¹êÛ.~éÁ‹E~[’ÅBÇLú¢8St aŽTUY(yÈùF`Þèùø[WŒÿÌ—ÂÉ1Žö–çß)–I곑9Ñѳ~sr6É{ ,:Êö¥Àµp|^ɯ+ k\®…ëSÕåÚ³^Qpð>vš…v ¥ën+*­tòfØ—¦zÙ¨·ªzÝH[gšk â646cÔõDFu-Ó*¥S*6§eÏŽi'²IS/8ÍÐÊHCJÿx•W†àn¨:·¤ŒI69K턜1RÃ!Í•ò©áÆP&ž‰ƒ‚ŠÛeÒë#PúIòp)'HkÂPæ?[cÁ:òGc/#9œ¨®A;2G›ð{’]xnäóžQº†zîô|aø¹ÿ_Êö{ˆA 5<ŸÄ4îÍUïÅ+_/×¥ä’ÉRÄu1Ž-Ñî°''Ðg Ù ³°¢4á•Ì‘WáÂÌÒõÀÇËßÍý¯7VþíãMé…õû¶×TŽ™#ŽºäÜLé}1ûf¼- ëÍX?ߨ¾n"¦Î÷é"¾»ž·¦Å "yË&ÏÎ#wzVFVº5åSR¾6êõ{–ÛÆÓJ²á ÊæòÛ 61Ö rœ…0'ã Cúø…˜*V7l)Ôj*Õ‰¥k÷Âc̯ÊHŸ¿—ESwFPÂÎ}I‚eLoɼDœk\-βN ¼·2ͺL²hM±…´äü{^ iá°Ûd^°Ÿ&¨Y¸üè¬ ƒS+„8èô1”‹Ë vFL¸a—B˜V©71½Q¼M 7=Jçv4ö|¼7=îÎãž<‰–Ô–ÔKÓf´­·=Çs×X”>.rÏLsÍ¥ ”²B­3Avz”À”>_Ôr­“ß¶E]Rg”Ù+˜°£¡ÚvýÊ8 LNÁ|bpgA¹“Ê%EÕHÓ12ÃQú –(*3?’¡1ÁÞ™™.ÙqÏÍ›ä‘êcB×— 7Ó$ùY™6zË¡T­¢”Dæ‰Æ¼vÇ$­ÚDybè“îöÊàùhuÚûƒãÍÉ—=××oŠ÷wbxÏ3g&Š#ÓTTUsSÕãJÁ}ðÚvÚH^,²ëà¡Æ;®—bÜec.kû©c›SzSâéùBäÛœþ$éqÿ[ò_:pÿí3ú×ÉIåïýú¿ùþN<~ƒ=­¸AZLÿVLx¤!Ф3{<4Pj{Á¢Ì0ltú» ·Á[6|t=ûîì;‡°nlî¬>¸öƒz[ý‰ªf«ãV%wP§Aœ÷ìô´`ŽÜÌ´š±£Òõ>¶E5É«²ÿ&#¿Wýî’Ïÿìºþ&(¶ï_’?|'ýÞ)ºS?KÚ+í5a¤³ˆT¤($5“¢ÑÎVw‰ ûŠÅñÍu,°×’æ1D™+d D³ùsÚâ;J,§Ì¢“jŒ<ò/  òïx°ÿ>­Û_¢£ÿÛkÉèþ¿öÞ¥K’ä¸Òü®¨ª™{Dä³’gÎ,z×ÿÿÌz}fØÓ‡@±ª2#üa¦‘Y¨e$QU™E›´UdF¸ÇÃÕÕDEîýn½Š1ˆXPz)9Ð:Ä ã„aŠhià1ä[§…Gû,Õ`«DMÁ5yÔõŒFÄ&±)–6KØ2ûа´Gzܤ×{Ô¥hïa©j=w²Ý"å§¹C“QÕg®sÝ¥…~°¸#ºðúL!à %y,‹Srb)K¸ ö­G¥+ˆèÄŒšI ܘ,dŽj¹Gñ˜)X)aÉ" I½þá‡%͎ĆÕ\OF(I=M=òÞ;ÕgeœlŽ˜´8a¬²(šÚôê6_ –N`oèñn¿ ¼îœ~Õ"¿u‚…qYˆß½~ ùÿÖw¿%ö;œˆh†¢Oͺ&•çSä˜ý)8TE-;mqö¶$\ŠÜD ä)PŽè2Z2’ŸÐþ9ŠZ¼`JÜéãöC4¤?•Úî®õ-d–2ɤ¥–d[…-R>æCy6_©Êô€’‚l®ÎȇÓŒ:Û_ò#ÄqòtÈpqõï6ÆãEíü†OʧÆÈ6G³açŒ'‹®pÇ»P%™dŽWg4‡Äî¦á ¢D1ô*E$„5©¹GCR)‡–äá.|eÃh%³LØLÄ"fú<¦†#lâ/ÆT«~çO+êþøm»þ Â}âoRÆÒ¢,X›³VW^@‹°U䔿‚¶ 'T#±!–œÒ \Ò8Œ‰ E›¥íÔÌÏÝÏ"”k‚«³ØÙOúã#žÀãT4д˟3iøÑzë²T'›Ñc[T7ydº2)-*ÉxJÈäôÖqg"J"Ÿ¶Î»H¿ûÌÏ<¥É0+Ÿr‹'¾»}䃙A &k–Ù :ëbÊWg¯šì‡ÈÉ5Œn"l.æ²fB¨É ô1g/¢lÅyG_«åwô¯¥_å¯v=¼ n!®×ÄíÅ´ûÀR#Yð(“åÌvf¾ù73=”•5­ÌƒN›HäÒé©á}SÂÀÚd…û8pG‡$ ,ò’4Ú ê[FtrNó¼áíKjçhæÇ:ß ¥SÈVáÝ牾Í7oêi†t¶€ÝpFDÔ1á3Í]6ÑÛYF› >ú¯äq$²Lá#äÛ~¹€¿'•ãLœÏ¹HK'¿¹àßÕ%)jƆHÈ9TlbÌ,ùÌ)Éf×?ðâh&ÿ-Åù!«æFÍ;›Õ¸ C?Nˆ!–ð”¦ÌÓD¸zS†¼IrrI9®†ÍÊÛLMSo>Åù³4J²gò ‹›?[LàeSm±•#ô$×+bý =¼‹üê¬å«ùuiÄ­&í-¡K!oDØE¶Þ)º‘»ÇÃHXµŒaĈXJR6C³ŒVó1]%¡IÖŸ2’Í dL´Õ'mFJŒï5<¤±#扱Õ…/~Áºüâ>ôjí} †eW¿Wêq ÔmžÊÐMÑ”BÃ!F‡½Ï Åä´áîŒ1ÆÄ©GÐMÖf3Ô“/›ŒðPÛ¤ûǰص¤%¤õ‰x8G^7x§}Ûéët#{SiNJ1Ér|u:hwÑz„kæG¸§h{æœ oR‰ué5ÑÖ¦í%¾ÝœðAí3gpƹN¨Š—ÌŽÃt˜ô&Ô0B'=Ä9Ÿ¨.^F§â¹Í1 ¶ˆ(]sðBá”8Gò‚‘Øu‹-_µÓ©uí_å•5½f×WìúEô§×دXÞOÏ”õÊÇ–ùÝ·K¨eN{fmuù6Œ,vSª‡½ðU=Gª>“Ggd…g”ÍÈ¥à=¢öν;spÃÑ2Ë•fNÅ©!šëÓÛ0ú>hãN/™xu -'ï6üÖã'é×ÐÿúËaÜ€‘ð6ˆ%˜Z ¨Ýá ‡î34(ÕÕyr"„÷Ù¼Mchfì…M!@Ì€³ˆIU²ÞÈmÚb…ôoòÃ{¼‘Ÿ¶<ÂÖÈþBêÕÙJäqZ…­ƒº÷j“¡\õý­5&ÏyŽÒe“&õ)¶.‘’“ÌÉ6­‡ùH5ð£ù·3­H‰ Œ™æ‘Y£°DÆBìîmÐ%'gR¼¢ð޶¼gœÞ¡·™å]ãôTyò¼uî-£VHnœ^ˆòÆ>‚µZáÜ‚ÜVäbkÐÒ È“ÅÃbÅp›Ícâý!܃q˜„…>ˆèxwzÓ¦;3*}ßùc_ÿêCá§wS»VIË6lí uªÞ'×Ãä«yH›«!>Éš¦wIF"LêIŽÛÄ !'Åaù(wG}(áäQÆý+âÉ¥¿ýšò–ó§Ó£üz'÷;ýð$h%gJY9¯O„¤Ú®hôx—L_å‡xu:óô´ŠÓˆ«.[ãùÒõñƒÇ­½›üS–BMàÑ?õàùÄx“–¥4#öØÃ5óozÉcÞƒfù2;Î5‚]…F2wm½±è'ý’oµ´× WïOį²–7wÞœ¿‰sk”+º=ò.­œKQK;-]iåcŒõªîw¼ ê&…ó>´ÖLñÉSDݾãîÔóD“(¾°tÅ}@«AóÁ"I…<>/IĶûçT2ÿ–KZÑ:v>‡-]:MéŸæ–ê0bZâ{ ’0Oa$’çÈQT|%{Š¡¦–ö8BeþÀzDêh®Bt¢Çªî¿D·ñ‹A.•u9ÓË»v%ųhwü`È'› Á¢EkzÄÑÛFòÊÛ¤x§Ì)'–’b7çÞz¼lU/×—k°M'ú¤Î;´|zÕLæè¹Ía‹MchˆðŠÜH)Q”ì§ør‰fõ†¶0r¼fÄꉅD„S눽íj1CêQD #î‰îÁvd¯ˆc‹±•`Õd Ö (PÆ<ÃÍcô˱êþ,m;ýäÎ7å‘H-a餅©èÍÕë †c d!3HfH™4ŠN±P"c9 Ae°1ׯ8Î9%Dé…´ÔXÙzR»/R)<ôg">¼è·ÈW‚—Év¢ÑÜÜg´DGKO¤X)$ƒ ÷½r‰U7u>ú}纇ºž¦ A:Üï‰étñÑçÀÀg ¥‡´û¼U;ha*ñc ß9ò¯ \!Çgº,S'©Q­"42æ¯Tô·Øòk]^;·÷ë»üâñ7zj7^ÿC§|\h7© 'ZSß:^>ÒÒêé™öj§gœ„–е/ƒæ•ïnöÆÝ7¶ù÷Ò°)D1ͱx45U3ß3 C6-4=7Ü¥¥gäO$þ­¿âöê™—¿ºñðö;~±þO·Áéë7ðááÃwõ¶…ëN? ÚêéJ{ô§ ¸UçãKçÖmÜimg‹F>ù™sAs ÷qÅ÷(AQA¾àÑÆ`ù+,½‡¸ñ-–†ÜküD×âÇ´E?úØü-’lÛý~rÖuìŠ-sZOQ~UÞ:ãwÿ££û Š+Ê02Ԙ㤕%Ö”TL z@ׯÇtgƒSk1¥“Á’¨Rí¤ê,u ¶¤öí/¤f‘Þoó|öá=¶Ûá¬~aŒqÔïΦ iÊEŠÍ‡J«Ñݽ±9±ESNŸ}ÕO Ò3³(Q¬DBªJ¸¥Op"">Ã-6ó°#þ9ý0‘Êf3ÆCJ1÷Ÿ%ú¤‡Æ˜ÂW:Š-\Ã6üõo±_ü÷Èçg--wq¹÷h׋6zì<ãÙñ2´­Õ]#£±Úl=¶?5Æù*=}ßi}ľwmÝg]e6#­âÀíGîñ)ï§y'\!’ÒúÀ)Ü—pwÉœrNÔ{ÓO,äϵ`ý<úè—\Í÷gž¿Ûxõ·ïyó__aÄmG¿ëä–¥‰2æ …KJ‡b¬#ßI^YÇÎÚ&'¥`ÉâÕƒXŒz25g¹ï Ëžð[¡þý7ÍùñÊÓß~‡Ï¤íÄË#;¡Ï„E‰žœ-ßi©!O˜6êû‘ß×>EC2ޏ›ˆ,ÝL……ÄI %%lZlÚ ã¨Ï~u §‡Óc ;Œ‚6+›ö«œò§œklÞ”Ž>Hh5Íß:/ñºâíÿÁùÿÒ \Þ±?7¾«W.õÂÖµ)IË™ý¡S›èQèr† Žñ4”[6Ò)ÐãôEÞÃÁçÐ(Yú>$Óc}>ým"f7«ŽF*<<}EZß°]w¶û”6ÐÆ¾ß~ïïÇŸ¤Ëñ'¹¢Užÿ÷¿§^_(_­Ø9“ŸìÚçMø˜aèS"’#7”:3á5É))X œVxz„|÷Õ gw¢‘ŽiN ¼¼Âí+,ìÝ7èˆGc¼œcax™9€ã“¡]ò ç3üÈ™`I;šC¿és?¾cŸ¸G¬“âS«Ò§,>ø˜¢&M /VˆÈ³Mw(&rØ5…ûJØìFRÍ‚H1Cª÷÷¸`MÍÖ9 iLŸaã°'GÉUDd«;ÅCÉsH'aO¸ÞF³/¾séŠÌ¦ƒ4y ¹¡4YóQõý¿"ýª°üb#ë­Ø¾ŠýÃ{ݳîM1”5xîjºFƶýæ·žº¯èR´V>ÞoO+2 SG °ªaˆì‘JUN`¬±•BIë ëI¤5¢rÕáÔÖ‰ûN¾_Yê J·P:)÷Æu%.‚ëoÕs>ºí¤±}uÜF_fÇÃ=Âfÿ¥ÙS™sµ T ÙŒÂL„ £*áô£ “†Â”ô‰/Š™;¢)¡b°¶à)’çÞé+UØüù&·™REÈH`FaAò0Ë2_°‡=â׿‘ÿº ÓÙßÛ[µçwì/ζYì}Â’flv°¡æ…¶-ø5E\³d‚[F/%ôt­Á·ž{Dm»Zk¡.YaV”ôK’½Ž“–8‘®ïÑååíoÉÿÛ“oÜϯâv>Ñ=á{ 0ÉÆ,¢ê¾ù27ZR“M‘rŒ#܈ S+újf£Ž™Åp §Ëâˆä‹Ù¯MäX(caALàí]—lªæ¸e–\ÈEqZ8å…B‰¼/rÝhv›%õ¶ÂËãz¦oKô~¸lŽƒ¤’ eÅ ‘[AÛJ¹¯¡$öÛEýv¡ß÷Kv5š2M™=Y|ÊOq9É"¬L-°ïƒql ÒGÁ*ö³ãyD }û>Aö3'ƒ•nzëŸuBT›Íi 4‰¼×æø|„¶á8¢“´ÁÖáæ¡K·!Æ£KòŠÅEŠoHíÿSvgð :_qŠG O¤mßÝH§“V2çG£ê¯p{ƒ÷oÿ½ä_#ž‘¶Ù»™ÿ"…ˆLøé€ÈLǧ0T© ;©€Ï¤˜ !íÄTg0&Åc¶ñ¦ #“µ¨ jÜ ºª.¸UE„I^ _2¬'•§WœÏ¯°½`…þæ£ÈñêŠo_?±ÿC¡^]·6c"¦ëdJT§âÚIjœcg 1ñɨZÓèú©µ˜‚–à ÿb.¥HŒºôΈ‚ë”ü@&£Ñ¡Õ£cbÊ$îcü”¥ïO2Xù³_Üë Y&²aÙÀ¾;WÜz£¸±/Á}Iìݨ[Ðô0†ÏbÞLpCþ¨)ž©üšU7È¿¦”¿Fõþ;a§·¬§Œ§;JÅ–Þâ÷Äöwhü¿”ôw$v†OÅœý •æ8"“¼Ný¯R!ìLXž ¶ƒvšÜq3œסªÓ”åE,˜V’-ì/ +Ý.xê̶HÓ~>ØÛw”×ïQ_ð͈Gèé„_;úÝ#ñß_1^2ã¶±ûF³†ç˜±šBd*K8} n{fX&êí΃]“>z_‚VÆ´%XØÈô ·ºã¬äò+Öüרøó¯q߈¤ÈÒÔuü™¯“ Pê(“£üÉýà¼ã>sÂ+Æ®B‹ ¹ÏOŽæ‰öœÞ%M‰üã"‡ðc¢¸zbéH ÙÞPr£¤ ¥•¼¬à¯ý—„_€ßþÞ~߇C+¦ë[Å7wî#™.âÈÑ>ÂBÌ'AB‘°ép%˜ ·×D~ñHèAÛ ®¸f JO(¿Ã–Gâ”éç3ûé5·õŒA´´žñ]ø%Ó®Â{Ç­Qug¨ã (&/M‰¹Æ Õ˜¶˜K–¡ïh³Uyà ºœÆL²ŠÁÔiŒÀ=!‹ñ4™¾ÑpUB&-&ÉzÄ'›í_î‚þ×t9þÅs¹‹ÞOó,46P S—+ˆ\#ò|FZIfs‹ )¦ñ5%Âìë E ñ¢A°Ç»·XÚM²_²–¯ÈåÖ^ɺQPž©áìí)†¿UŒ•™øìr,$—Ì4š'G£Ð& ò˜‰´¶1d(3lCym:$'Ö‚JÊŒô×tý—pÏŠq Uh#)¡xBú_Pþ/ËkùÚÙg˜¸yDÖ]©\®1nRÜ ÔíaÅ¥¥2ÆÞöpºJQ䌆=Ptæ¹eÔðñ,CTÖÁ M7|Ôˆ@õµ-ñ–G~é­ßiþm`;J»HNx‚­u¾pMüåü¿äPøOÿ#ÁNŠ0'rLþ±9)0…ŒI†’I¹BÜôp3…ÙÜj¹ÛÔK÷qaPÙ nc‹)Öî2ÞÒ‡GTIyc)!#•`;1öAOl—÷í]“Ûgˆ×ÝÍÿ«€‡ÈƒÐšè‚AdIfO¡üK†;÷£E×@=«R<þ^þz®a½uÃó%È1®øîø5ÅØ+ôëÔZ§PIC¤˜o\KqŒ¯ û¢qUù„(~r×X`Œ™H51WÞ1¦'Œâáf0a™Ïœ…÷÷ëõÇzLJÂÕC&×ãŸ<,+ÈLgCÏ%ÆzÒHy#¨[£]²¸~dÜ#ÈFDhÁyÒ9DgŒNÊ0ÇÌçðqˆpÂ¥Á÷¢#o‹ךDÂc÷P|¢ÍÀx™g Ý1«‘ŠHg#-Fß*×ç«Fs>óà÷'×CÿÔöþcЍ?ôñD69Î6.eÂ[øHx”#ý=Kæa2,dž!H}‡Ñ¦£%ÄäS—yòòŽs¥Ò¢ó u| ã;z²ð¼RÆ ·;ËzÓ«7º_¢n Ûöú‘ñ-ÂûdʼnIn~Ä:›GÈç¢fÙù;$ò¬µ™}d‹©çX™^FY ;Šâ#Ê0Š/$Îô‘4Ö~×íw<Õ¿'ùùÆ.Å^êšêÿ} zæ9ÌŒEƒ'’ã>ö©ÝÎn=">ù ÙÇAh…†+E²iQƒ 3~~ø…‚ÎΕ¤ŠÙŽe'¯Æòd±_6ž¿¾|OOû Ýç(î>Gm÷O&…|fÉñƒ‹óGFà?†qâ>î|ßvßAíŽR’rŽ5NhcH¸lŽ#¬L¸F˜ÂÂV“ŠAÆNÊuî|êXv(!¥oã”þ~ê°;XÛ)¾±¦+ëÒØ^îÔˉv}m¾«vawB7ˆ)¶™*f#¬ Q¼;°·mÑg\n¢9EK›˜ºr «'òýªì-HCÃz7-åëùªu¹‘K‘ å…Z‚º¢°¥V¥”ÂóЧ1#…vÅb)uY$–0=áTk„ïàWÂ;ç}*’dIaéί}ÐÚ¼WŠVÖR4|Ä]! Ôæßtép‚ôJܯw}üû ÿì$øSë…Ï\OŸûyý›ô¡èßáN¸³µ¦¡ÊÃéD9‘&ÝÔ8)Ù‰¤3yÞ%o M„{W„“r%çJ>„AÇ—´|ÐSù «í¸gz –VYã.-Æëw(?òÌ#õvÆ£’üe*“ì‰ÈúFÄo‰øî8Ì9!#b…x²÷"nHÏs&s éŸî‰]}Ùˆ⬴?’ýÙ]#wFÙeËeùNëéNYo¨4í©p-™~Œs'¥¡ekXê¢4¢ zŒ>T4Hy,qJ ;®™ñw|LÖI7›€x7±>Áù—ŒÚØö;Ñ;¯Ë‰syÀ{ÓCGfâÒ‰‡3\_îÜ~·ñ™¯ýÿ|}èÏ’¡ÆàãýÊidNç çOREygÊ‚¬Nr§·4M6‘4íòò,k§ä A(‘»ÈµÃ}GÅ(¥²>6–™ä¯P¬˜ˆTˆüD¤¾Í>¸Ç÷à ÓxÄIxôºƒé=™ÀM“ß•+¡ËÑh`K‚ÇZ;/“­ŠÅ á7¶ýNmËcæö±5“Ö¾<]/ôè´¸Ñä4:;Ns'1µÃƒÓ©î} ®¹;Ëð°©.LA¤X.‡d5ãq¢“èÓë3IPšù4¬‰HÆöÝFÿXÿbÖÍÏÂéþŒ’#>ã¹ÿàólµÇVŸ9ŸšN§§ÀÆŒ˜ÈY=)R•Rw¥û£Îžqx0dDÊ,E¬§Ðù”bIwR4’M mCqé12Ø«,ç3‹‰u<1⭔߅—3”3nwEýMxß]N S¡ð„x¢׈Ø*á}msо£d‘Z/È“,×°Exz”òéý£ô¶„ê½¼DûpQÿîŽ×¼Rß'Χ…ÓyÑ2N!LmÜã:7ÿ@¡–fli$ßÂT4árÂãpf»åííŠ^#Û(wcÅõÄF§Å¦™¥£™ä¹F4ê·Ï¿ÏÕÐÔ½ñ#ªÍ/q¨|6N—Ï(Øãsì/?¡œúœÃÀ~Í}»ÓÝ9=¼&d 1È(ED6ä +c.Æ8ÎŒéH»%èQqßH3œŽØö˜¹ =9£|„òH9CÊ rG>P8)2Id?±¦w 3¦;Ù^p¯xìù|ò¤# OlÐ?LÚ°vNaO½;‡½ÎŒËíåo—û†û âDv,٦ФuEmP½S­ÒÑð9ܘé±QTI1fΚª¨~dLV‰ƒQ+“æ³ ›Ù8#bÌ—,™Ö.Ôëðñ¹ë†/üÜÏýü¿í¡ðK­îŒx!θW…§pe ž"1Tü¦:o‘IKÌú»4ZÄð~„¹‹Tf†uë¯ ëÚ–ÚÓÿ ¶ ^þ†TßMþ¦ß¦*Ð_SFaµ'Îé+Ì å+»¾å6:·~DËz: ŸD´(uüj¡¼}¥òö<­òœ£¶«n/ÑžŸ£a…ȹQÊ΢õª±oq»¾h¿m3ùqIDŠáÂ}¶ñi£ˆÙŸ½2r‡¶#ÎöVk~•za05¬ R$2'iM1¢iÛ¾‹Qï|áºù³ ÿ]]Þ6H Îà3}*8ÔïØè“Ø.×oCý£a÷Dê9r,dÈ O)Ì2¦e†c ÆhD÷àÑáŒBº>DÜ ctu¶™Ú±Fä³XN™zÙ¹|{ þsÏAÿ&£ï×Wx¥ò;†VNË;3: ÷iFÕ g-a%,2E™×:ñJ'O¨Ám‡ûÍ©vÇK#=TŒ;1õ>ÇeyŒ©V ï¸UFªÔô‘W:;%>ñ5Dµ/7[‡–C¶’Ê#Á·Ý:·¯¯ÔwƒÕŒóbßÓ÷ï²äÐOôõ>þ¡[~Bšª(9ô_€Ü‡¶ýåŸülrEUçÖ›ŠªNÔxCç!?"ÒN;:©ÆÙƒ‡1”,b1äÝèè-´ï}›øLÓ2Ù1§ ê<žGðq¨ œf¡Î>Nš"NWÑú÷Þïô~Ñš,"–”tZ²–2õ{mDT/Ô‘Õëˆèèà»L}E Ÿ„è \Â{‡”LiŸ`¤éœ™J×ÉgO¦¨í¾ ¯ý‡^[~d½üPÉñCô?åâþܒ㟬Gñùâ¤?ªúÞ@?õØÏ©Åõ9ÿN$ÞØ#ïí5_¥§8—¤}¹r]/Ñ߸âµÂ‡Ë÷Î~ëq»4m»3”V&ÅãpΤ°©Íì1&íßdh9ÁÃÃtF·&Zƒ¶Aß#d2[â(›$:Å:% ¯^ŸB z«ÔlË™šJxmòmgÔ17^·9´ɺÌ:NÐB1<É[ †)­#Ò:„MD/¦P ) s÷÷çïˆ1>çµý©zùKŸãsÖÄg­Ëu$Åè7ø‚²äç”A_¤ ¾õg¾õgþïŽ^Õ¿Ü8­3ÚAž”4°êØ&ÅfР&òи™0ú½±bòÂäB½Oçì.¢—Om/Åhô¶‰ˆ#Fn%‰”Œ©yp©°5ás@¤O."fj/qˆ¦¦gPÇat0“§Ð -R’fô›&Ÿ9I©Lò^»ïìŸ>þÔ¯‰¾`}éºüþêÆâÏiÿذæOúó™&7:-‰’ÄC ³‘¢0FR E0†4ú±•èÕ~X³’@ò#\''䙣ÀÆ£Ñc›ýs&ý´ëj¨$¢ºÃ¾uúX Qjí oÓXÀ²`9‘bL ›‰š W"Q0Š’,‰¡ Ó¦± W¼îô{=¨N–ë美Ÿ3”ãÏšù‰ƒ„¾à±”’㇞Ó#bŸåAú”¤8å®s^9iÑ™>„w©‡ØÍ˜‘qÃüè:î9U‘SV²ã£ÌÙä  QËaIìÃÙz‹æÈûßòÖ]êƒð  sÈ/!k8!M÷„a8Tè[Um7FßÀG|œüárîOQrüTÝýS%Ç_hæßëÕFÐFåeŸBœ„‘•È1Ë wc„ˆ”H2¾Ç¹gÁú@Z‚ÇׯºÂöMgû¶3†#M×ødfOãhc‚vº<醑Û4 Œ 9DÎÔ5Á’ˆez+ã6=èÞñmÚdjð‘Tÿ®ÿ\Ð?ãi§ýã¿_¼MB6KY¦·™¤²÷É[v„(G¸ò¬‹GŒ6¾;£èšb¢ƒùèJŒ>!‘ÔJŒoƒøGsêÈëOU—þG½¾Ô±ü?ãKñsÿ?Uò|Ö÷µŸñ ¿ÄOøcÏ?ã±Á—I?×Ë?ñ{~©'îs®ßû}‚Ïøñ3~×ø‚¯/ø~?ç5ùÙòáÏýúÿÜ¡ÿbvèÿðƒÿÜ¡ÿçÚ¡?k§úÏú?wèÿÜ¡ÿ#íÐÿ?¹ãóÉ,M˜IEND®B`‚dipy-0.10.1/doc/_static/dipy-banner.png000066400000000000000000001134361263041327500176620ustar00rootroot00000000000000‰PNG  IHDR¯úmötsBIT|dˆ pHYsˢŸ¿tEXtSoftwarewww.inkscape.org›î< IDATxœìÝwœeÙÿñÏ7!-ÔP…ЛE@b@Å¢;ú³ñvÇÇ^}ìØP°ŠHE:"UJhÒ;$R®ß÷¬Y6§Ì93§í~߯׼v÷Ì=÷}esöìž™k®KÁ ‘ôà“À?"⫽ŽÇÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÚ£AJ^‘4 ø0-è`ƒˆ˜Û»¨ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̬]ãz@3J^'éŸÀ¹,N\XxGcÙSÒa’ÖêÖšffffffffffffffff£YßV^‘48ø8°Uƒ¡÷GÄ‚.Äô;àMù—ÓIÉ4çEÄìN¯offfffffffffffff6Úô{òÊÍÀ¦†'v!žGUkì^ U†9)"néd,ffffffffffffffff£Eß¶ ŠˆEÀW ÿ˜$u2`;j'®,ì |Ø©Ãq˜™™™™™™™™™™™™™™™}›¼’ûp_q[¯ïp,{wnG£0333333333333333Eú:y%"æß(8üŒاÀ˜›#âÇafffffffffffffff6jôuòJî§ÀŒãv”´'´ °[¡®ºbfffffffffffffffÖ‚¾O^‰ˆ9À· ÿ†¤ cW`™ã '¯ä 1ffffffffffffffffcZß'¯ä¾Ì*0nSà}Xïc™LÒêÀ•’>Z&(333333333333333³A7É+ñðƒ‚Ã?+i•ŠC(’¼reD4M°‘´p°5ðUIÇ” Lɶeæ0333333333333333ë•H^É}“bÕW&YÑI%í%éLIëÕÙ¿ °C©š¶ ’´&)qe«a]ÒÑ…‚]<ÏZ’Žôkàaà_’¶he333333333333333³~00É+1øbÁáï•´y½’ÆI:PÒÀùÀ«z ${QìûtN£’¦Ú mYc÷7%}¨Á±ËJz…¤oHºxøp°F>ì•b4333333333333333ë+Šˆ^ÇP˜¤‰ÀÍÀ††ÿ9"^3âøe€#€c€GŒX?"fŽ8æ8à=MÖz˜ó뼩âÊfMæù`D|·ÆñÓ©ô2ÜÙñª&cÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌúÊÀT^ˆˆyÀÇ µ¤}$­,é“ÀÝÀq,™¸°<ðÞï]`­‹$®¬Mª¸Ò,qà;’ÞWkþÇîž'瘙™™™™™™™™™™™™™™ ŒJ^ˆˆß—þMIã-H-‡Öl2þƒÃ@$mlT`sk=(iRâʦæòEI«xììÇ- ìÞÂ:ffffffffffffffff=7pÉ+¹£"ý޶ŽŠˆP,áeMà°a_©º5’W$­KJ\Ù¤àO¯ˆˆÇF<~>P³²Ë¯la-333333333333333³žÈ䕈¸øuÁá_•´ ðµ‚ãöy‘ä•G"â†áHZ”¸R«=Q=3½óÛóDÄlàæpòŠ™™™™™™™™™™™™™™™ ”L^É}x¶À¸IÀ/³€[ ŒßCÒZ’L+0þ¼á_HZ¸ˆb톆<L‹ˆ«Œ)Ò:h«¼âKGIúƒ¤¯HšÒéµÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌltØä•ˆ¸øFÁá;‘’]ŠŒ¼ØX­Àøs†>‘ôRâʆãxœ”¸rm“q-8ß«[X»e’v>Ü-éGye333333ë’–‘´º¤U$­$iRþ˜z›™™™™™™™™Y-Šˆ^ÇÐ6I“€k¾x9ðg`…&cÿ œB±VCëEÄý’6'%²´Rùä1RâÊõÍæ'Vo2ôâˆØ£…Z"é$RrÏp‹H߯¯6©cffffffÃHZX•tóΤê¡Ë§FÄ¢6çÜœÚme³§€Y5¶gù™™™™™™™™ ®N^ôfंÃ.#UiæïÀËšŒ¹5"6—´-ð7`‚qÌ^7=@Ò¯€C› `ƒˆ¸·…XŠ®?¸ ß`ØyÀ—"âüª×733333T’Æ“Yœ¨2´Õ»¹â'1§Íµ¶¦XÜ‘’’XΈˆ™í¬mfffffff6ªd0Øx”,.îqD£ÖR½ ¬ˆ8YÒë·¾©P;s®¤€¿NBõ©âÊtI+oŽÞÿlpÜŸhž¼"à`à«-ÄSÔ14N\t‚ôÀÉ+fffff6fIZ ØXž”°2™æï§†›´•¼Òâ:#› Ìkóx3333333³Á•i)` `R²ÊöÀvÀŠÃÆ\|øY{Us­¶¯¼ i2p°NÁCž–®`éO'Œ,êaRû¢eH +‡’ÊBœGÖ;PÒ2¤Ä—ëÉÝÛ´SS’Vî–m2t°yDü»ÊõÍÌÌÌÌ̉¤µ€ƒJLqrD<ÜæÚ/vksÝñý6533333+.Ó›uIU  †}>òë2Ÿ7é†ÿ"ÛøÆÖ?ŽÔÒu&ðĈO¹‹á™ö6'ý_ÌÏ·áŸüºÕÏ‘¾ï†}¬÷y³ýµ>¿,®®óoÛx5‹ŸkC[Õ_|l!­=OËn"=§kµ(žEÕüþôZ¦å€²8Ie{ÒH Îp pYÌíL€(Óú¤®9ãZ<òmdqóÀW^ˆˆ™’Þœ]ð*W‘’W–iᘇÿ~ìTcÿA’Ž®Wž9"æJ:x[“u¶–ôˆ¸¾…Øšù ÍWþèÄ333333ž)y|+ï5GZDºicè¤h+ž*±.’–E„«·˜™™™™Y3–§£Ù"2=Å’‰-·——÷m"@ûŽèu%|¨¼’*v|½‹±ô§LO××ÿÊ?NïjÒG¦É`«6Žû$Yœ4ô…:tsWOIz1p1éÅzý!"ÞTo§¤I :Íü,"Þ)é À§šŒ¬ F¬u8pBµ®‹ˆÂo$­Fêƒ>™Ÿ’Þ lCºkqøöXþñ‰ˆ({Ç¢™™™™™ULÒ ¤„•­I­]™ü("v<°Q@Òv¤›(Šº¸T‘Åßc3333³±&ÓÊÀê,n“3|{° é¦ï‘7d[q7Ç¿"‹²mb;#Óò¤!jµ¸ºIb#`ãücÑne<"~Y`¾"éï,.¿VÏ"â3݈ÇÌÌÌÌÌj“´)é$çŠ-ú0é.«[PQœ¤‰¤¡©¤„¡¥[8üñ@G33333³Á—i<)£ìÑOWóòí¹Ÿ?L$Uîl¶M"UϘP2¾N»ŠTåD²þlm[H¦Ý³e*˜í^`×R>ª”é;À*˜ié:îtÒM#Co&‹9¥gÏ$REœòmð¢ÒóÖöàud1£íÒkÈêÀæÀÞ¤Bí´º)â½dq\‡æî™^ ü“Ö’‚®^F¶äù¶Q¼ éÇÀ»zGA?þÏ5˜Ÿ€½µÀœw’Jª]EÊ~k伈Ø{Ø/+°Æ"â{HÚ8‘ô6ÜSÀ #âÞëô I·›5öáˆøv7â13333³Ú$m¼²ÀÐ…¤66wwFŒÉþÄ•’4žTy#R2ˤßÄÌÌÌÌ̬Ë2­Djé2¾Ä,—E‘ë_­Ëþó>hC`ƒüãðmmú§kÄõÀ;Èâª^Ò¶L?Þ^ÁLï"‹ŸV0O5RRÈ•”Oy#YœZADÅeÚ8‚ÔªgJÅ³ß ìGE®‘7—¾Ï’ª:mYÉœ‹-vøJG¤ïßeÀÎ-u?éûRóæ¥QŸ¼ éë@¿¶oy’”Ôñ£ˆ¸©•%] ¼¸ÀЃI/n;FÄ:ùÜ;“2Øšy xADíìNý?$.¦E Nï/I‘JK5rhDü¦ñ˜™™™™YmyÅ;€eë ™A:aw[³›¬}©sSH'ƒ6cÉŠ,GĵݎËÌÌÌÌÌP¦Ë(×>¨sÉ+ÍdšHªR9•tÁw¯üc+U+«´øðßdñlbh_¦ƒ€“+˜i}²¸¯‚yª“éãÀ—KÎò:²8½ŠpZ–¹^Eú7lSáÌ37ÅE•͘býp,Õ&—Ýì@ó*œ³d:8¡…#f»‘Åõõt£§SÏEıÀ'{ÇW‘N ®j5q%W´ÔÐÇ€¿·¶¤¡RÚ+8÷w$®l\|ŠÆ°{’úÒ IãH½Üšy¬Ó±˜™™™™Ycy{ÓG<¼¸89"~7:q¥³"‚ˆx8oûSà_á|ý#Ó ÀW[8bð¦F‰+0F*¯ ‘ônR[ž^%íJ³º°^52ýxI‰¾M®*œJeºØ´Ä ½«¼2R¦ ûT4ãMÀ‹È*>¿“i*ð{RÒM»“E™×¬þ“µÜù¦Pk®1QyeHDü˜ÔB§Û¥yî>Jª²ò®*Wò;ÿ¯àðÿŠüðnAz¢ù%ø³‰+ëçäqM\˜ü*OÈéw«W$ÁÅÌÌÌÌÌ:,"f“n$8!"®qâJÿˆˆN\13333³î÷YÌ&‹?“Å1d±éÚÝ÷§;¼²€÷ÓÉôš¯U¥Ûz||'Uקײ¸ Øø]E3n |­¢¹ËâN।D®*ŒN Ӥпë½L›jáˆ/I\1–¼¿#eJ]ÕÅe7"ýðÜ+éFIgIú‘¤OIz«¤=%Mm3qãG¤»›Ùx¢À¸o-0nð¿Ãté.Æiޝe.°j›ÇvÓjǹm™™™™YŸÈ“$z†u@þ~ú½ŽÃÌÌÌÌ̺¦ªö#ƒ!‹[ÉâýÀº¤›ÕïìðŠëgé;d„kÉeŸýü|*r xpd±8øcE3¾ŸL¯¬h®ÅR{¯÷Ÿ®hÆ¡\ÑâÛÀ„‚cO>UtâAxÁ©\~W×.¤>Leû µbE`+RVÙ»/'ª³Ì•ô¤Jú½¤oJú°¤$í(iͼ%ÏðË,R+¤"ŠT Ù(’DsRDÜ iI'¿V.Ëp € Ø5"jãøn›\`Ìœˆèç_vffffffOÒ8`àõ’Þ$i^Çdfffff–Å<º{}¯?dñY| Øxp~‡Wüp2™&vx²FsòJ§«ít_ €·gT0›€ïT0OmY|øVE³½—L»U4Wïdz-P4aèïÀ‘dÅï&“É+1T9äo½ŽeSH}ÙŽ&ý@ü¸xxVÒí’Ηt‚¤7’²›ž)0‘ ¨ Æú5I¯'•g;¨àq#Ý ¼4">—ÿŸ ‚ñÆ N/@3333³>'iI›÷:ëK›“nXx‹¤½%-רÌÌÌÌ̬óÆn;Ø,‘Åéd1 Øø û~üLíܼÞ-N^4YÌ'uy´‚Ù6%ÓK+˜§žŠQ”%à{d*r¹?¥ÖGß.8ú6àõy²aac6y%78®×A´h"©´Ð^ÀáÀvñ0ð¥Šæ/òœ8 xPÒo€S5ÛX'€ïÛGÄ•mßKE¾G ;…™™™™Ù é…¤ûH„6£Ö%yeÒ|˜TñôI/’ø¤™™™™™5ÒÏ Ý“Ådñn`Kà/Zewàb2éLÐ N^DY<|²¢Ùލhž%¥ª!ï šJ1Ûï­`ž^ù°Aq3€}Éâ‰VëÉ+Ï׃–<1ܽùÇowuiÍËIÕVnóø€WEÄ´µN‘Ÿ›±W®ÎÌÌÌ̬B’&Jz )qéïði#:©Úض õÛº. ì&ij÷B23333³.ÄëK“Å]d±©SÂCXaàt2-Ó¹ËÍÉ+E:o ²ŸWW0ϛɴlóÔ–Z\\ÁlŸ'ÓêÌÓ]©ºÍû Œ|x-YÜÙÎ2c:y%"O¿íu,%Üsc»°ÞãÀÿíö?Ø&"ú©]S«ŠÜ¹çä3333³6IZ 8”Tur¸µ€­»‘õ©»€K€F%hWö—ôI«t',33333ë‚9½ /eñ{R{Õ_t`öÝ€_“©ß®/æä•Ñ[yR ,8º‚™Vö¯`žú²˜ ¼øWÉ™V¾Z> .JIkÇÓ<·dðV²¸¼Ý¥–j÷ÀÑ""fKÚ´×q”0Ty…ˆ8EÒ…Àž\¯Ý2ÝOß*ÙØØøPD,¨,ÂÎsÛ 3333³È«ª¼Ø…úwï"éæˆhú7wÞVf"©rËÒ5>*"n*ïÐ{šE¤÷‹†m;žmwmƒˆ˜\-éfÒsf+RÛ ZÖ•t=pyDk=—ÍÌÌÌ̬ïÌïu}+‹YÀÛÈt5ð-ª½üFà;«ÀÐ-eŸ ýü\ýï]³ø;™î^Pr¦mßUQ}Y lV`ܱdqJ™…Æ|òJnZ“ý¿n'ô\ X‡tâk}`ùΆÖÔ}#¾þ©R?õõ¾ˆ”µ¹¤³—²Ê†üŒó pÛ 3333³ŠIZxOV<œ;> <[$Ág4ˆˆ9Àyybʤ÷쵌¶6•t~DÜÑ­ÍÌÌÌÌ̺.‹ï‘i:ð{Ú¿9½–ÿG¦KÉb;[X9ƒò QëWHSYÞ¡5[±˜I:y¸Gƒq;ãä3333³1KÒºÀ«HÉ&µp9peDĈ}/vhsé ’XrÊÂÊ”J.ûža=R¥‘º$Íf³G|œ—\¿ïDÄ à’6^FJ`ªe9`?I'DĬ®hfffffÖmY\@¦¿W8óÈt YŒ¼ÉÞ¬gR>ye½*)$‹ÓÉtpT‰YvÞ WMPi©@E³œ’ò)JóÉ+À~MöŸ–Ÿ«)"f’4®¯µ_Òx`m–LjþõäÖÆµ á3¤¾s»µ9oUÆS¬dÒNÀ:K•zž¼’·]""néä:fffff&iKR5Ìzg? ü5"h°¿Œ ´_"¸—É+˳\¾MñøSt¦ÿy_ˆˆKº‹t"hGjŸû¸Ò‰+fffff6&dq™ö.¦ºê+'iYûw„˜å. ß)Óñ¤{É+ÉG€=ÍKÌñE2ýž¬oo0ú8©S#o&‹JÚo•9Ñ6Z4K^9«Ìä±0"K#â·ñÕˆxD¼6"¶‹ˆUHwƒmìKʰúp"p!p'ð\ékf3FÄà`à±2±wÑν EE~n:Vž;/~p¤-:µŽ™™™™Y'IZNÒ®À>Ôÿûnà7 W |òÊÒ%ŽíeòÊ2%Ž]rí¾ "â ààÖ»gWt?*33333³Éâ`oàá gÝ‹Šª-Ø—ÅsÀ%gY—Lª"œB²˜BýëøE¬|¹š€*–i+àÓMFpx•˜ÆtåIË’2¢êyœ.œÐÊ[ÿÜD^뒬ɒm‰¦7˜ó~I‡&õÍêg›JZ%"žèu iÕ‘Ê+ÃW†îœ¼@ÒË#¢æsÇÌÌÌ̬äïiVÖÊ·µ²¸¸¦@KŸ¢‰ I'æøXæ±ÿ"%±Œ#½W?âëz˜܀&¯äísDDß'Áäï·ÿ*é:R¢ÔJÀß"ú¼§´™™™™™YÕ²øw^å"`Õªf%Ó/ÉbPn¨·þõHÉãŸëz ,®%Ó§¯•˜ådú Y\YUX¥eOjÔ솯¯’E©B #éäàå4>áwv?œÐÊ{º?œo…“i"â/’¾|¬S±Uh'à/½¢ ÂwWJ: x;ð(éE÷‘Ÿ?X$qGÒ¦¤Ä•µ†=¼&p¾XÌÌÌ̬ßHš¼Ø0ÿX¤Í ¤Äг"¢èÝ`³I­\g“ª°<=ìóÙÀ3Àsxos¹UÏ[ÐtRв#¶ehžp_6édW`#I77H2ꩈxHÒ¯u"|RÕÌÌÌÌÌÆ¨,¦“ýçæ÷*¬ü7ðÁŠæ³±ëÑ’ÇßSI­ûð*RÞA;Æß'ÓN}Ô‚ëÃÀKšŒ¹˜æ•YZ6Ö“Wšµ ”dŠF> l Ðë@šØ™Áù~i 4”±º9©Çz#gû7P'qeÈš,®ÀR·™™™™Y§IZ Ø ßÖ¦õ*§GÄœ¢DÄ3¤¶«cJD\SoŸ¤¥I¤µ+æWöõSí®›Ï½Aþå”|ÛFÒ…Qö.©ŽŠˆ…À½½ŽÃÌÌÌÌ̬§²8‹Lß>PÑŒG‘é»dñïŠæ³±©lòJoÞïgyBØ Àä6gÙxðÓÊâjW¦Ï7õ(p0Y¹fÞ’2ý¹Gƒ}ì[œÝ­@:%"o~ÝëXšØ©×´ È‹çêÃÚ=•šOÒ&¤Ä•µ [ƒ”À²uõÌÌÌÌÌ*%i¢¤·‡’ªr¬Cë‰+w§´’¸bµEÄs13"îˆ#âñ·ˆ8%"~^²jãT–¬ì2x‹¤iy{^333333ëo%]l¯Âà‹Íec×`&¯dñI8 IDATplÉY¾L¦Uª§m™DJ itngpY<؉ÆlòФÍIå«ë¹*"ft+žNÊï.;ø]C©åNà·Àï{H мxN e×M)3_ž¸r!W†¬Nj!´U±fffff•‰ˆyÀ‚6Ü\œó+ Ì:aÓû¶Ž´mžÌoffffffý(‹¹ÀÁÀ¼Šf<€LëW4—Me«xôªmÐãI­tÚµð…Šbi×QÀMÆ|,ÎéTc6y…æ-ƒÎêJÝÀ'HÙP½2 8—”}¹?°FDl‡DÄÏzW«Šfþ­A±Ê+5KkKÚ˜æWFšE‰àfffff%ÜU`ÌLà&à|RuÈæÕ@.ˆè›¾¾Öس¤¤£z&{KZ©+™™™™™™Y벘ü¸¢ÙƑڞ˜µk’Ç÷¶MpAJþx®Ä,ï!ÓEÔšLS¯5uð¹N†áä•úþÒ•(º$¯¾2¸¥ËØ X9"ö‰ˆOGÄ™\Ù¦hòÊ`½væËW.$•[/êN`ψ¸¿…cÌÌÌÌ̪rwÇæ_ü<"NŒˆs"ↈxÌ +ƒ'"Î!Ü<˜Û`èêÀ›%­Õ•Àº@ÒdI[ö:33333³ }™t“BÞA¦‘mfÍŠ*R ‘›+‰¢Œ,n¾Zb†qÀ÷òö=Ý“ip"°|ƒQ‡’EG eŒÉäI“i\òfpU—Âé¦yÀã=X÷òˆ¸i´œ˜Žˆ§)ö‹|[ÿyhø’6"U\q⊙™™™ ’Hw—Ì&õÍ>8."N‹ˆë"bVO£³ÊDÄ‚ˆ¸8ô]ï½Þ²À’µ’&¯ö‘4Mò Y33333²xøaE³­¼º¢¹lì)“¼rY\SY$å| øw‰ãwެ&”ÂŽvm°!pYÔì&R¥1™¼Bzá\ªÁþ³#:›5Ô#k/îÁº‡HZ·ëvÒÆìVp®éCŸä‰+­|¿îöŠˆûZ8ÆÌÌÌ̬Rù{¨_EÄñq~DÜ z—uND̈󓀇ë ì+iÇîEÖ{«äŸo $iÅÆcfffffV•¯ÏT4×ÁÍccO™ä•*‹¢¬,æï-9ËWÈ´rá4•é…Àÿ4õY²¸° Ñ4LàÍÞÐdÿé]‰¢‹$- üŒtç[·½ x›¤k33€«¼Ë ÀÆMƼ°À<DÄ£’¦’*®´’¸r7©âJoû¸5 ie``"°Lþqb¯,"ݵ¹hØvVDÔ;ÞlmûiffffÖ’&’*>EµkŠˆÙÕEeƒ""•t2©]ìÀ„Ãv’ôïˆx²»Ñ•'i{`dõ˜5H7jü5"îî~TffffffÉb™~ ¼»‚Ùö!Ó¸N·±Q&ÓD`›6^ü²ÂhÊËâ<2ýxk›3¬AJ(ù`uAÕiiÒ÷né£þJª&Óc.yEÒ²À+ ™ü¥KátÓW€zÃöùöàaIg‘YΉˆª2:»åš'AIB¹þ“¸r!°^ 1ÜMŸ'®äV£q›®fÊôu[WÒ€¹ù6 xjäæ;‚ÍÌÌl¬’´°)qeià>à= ÊRž4>]Ò£Àë€I#†œ= ‰+6ª³{"ð:I—DÄÕ] ËÌÌÌÌ̬j'SMòʪ¤ë‘WU0—{Ë·yìd}Ùâ#¤n0«4XÇûÈô3²¸®Â˜Fú‹1ܼ•¬{•Æ\ò °KžDî܈xº[Átƒ¤}¾€îI—V¾výšÐ’ÆÓøÉ¿8½Kát\žpp"©/V#>K:wkDü."Þ›’úz„T¤[­U¶>\Fj/ô Iæw²õ‹Ûg+˜ç¿i-qå^`¯NôTW2EÒK%½8ØT"{J‰©!y¥žY%7333ë’–—´ðF—,*ir‹s¯L*…úI›”ÓF‰ˆx8ô^rTˆˆ[I¥´gÖ²ðFIe߇˜™™™™™õÂÉͳ}EóØXiWZëN1ÜûÉâ™*éTj·ó๳|L+VÑÿ¥~‹d€3€oT¼f!c펠—±¸lq-—FÄŒnÓÇÒ<»ñàQ3#/íüMà›’V"UHy °/¿—UY8"ßÞBu¿8K‰ˆE’n^RbšE¤jEÝGª¸rW+‹äwþíì_«±o}`*°!õ[MjeÝaæw“’XæÖù8ôýGª4nØöT›ëB¹ä•g"¢í„-I/¶&Ø~bØ63"攈ËÌÌ̬%yÿö¤¿]'4~pUDÔ»8_kþ ¤÷CU\ö“t ©UŒ[¨ŒaQ&½/EÄã’N"=çk\[ 8HÒiQ潌™™™™™Y·]FºnS6!E2­MV“~_ló¸SÉâw•FÒ YÜB¦¯ ´c ÿUM<Ú—”PSÏ=ÀyâM×µä•×7Ù?jZIÚøB“a C#âÉ"sæ'ÞNNÎO€ï¼ŸÔf¨ÓgwaVœC¹ä•V*µ”¸"ik`o`°°BþøqsÞNjRÂJ‘ש@[¥¡"béŽË^¸¸™ô‡Ör¤6@÷å©ßR«ÐÏE«¾ï+0¢ºŽ¤¹ Kföù,_ß133³*å-‚öšUR¹¸,"ic™i,™Ø¾)™å¼6æ3ëkñœ¤?‘nÙ¼ÆÉ¤–ÓÛü™233333ë¾,’éÚl'<–€“W¬±Lû‘®c¶ê à}GÓI_Ú­Vü2O7–Š"Ó*ÀÏŒ˜DVü¦¶ª9yåùþÔ•(:,o¯ó[šßUù¹ˆözUEÄBàIwÐä•KŠ&ÙtÑiÀ§º°Îý¤VAwÖ i}ÒEƒ¡„•5ë =PÒtZ/¿µŠ¤•ûðÿ ¡p=pMDÌéÐZcRž8õX¾ýGÞNhžŸÌ2ôq¹aCËT^YqÄ×"½.Ô}m4‡Å -WDÄcõÆš™™Ùàˆˆy’Î"µŽü7p~DÌ/;¯¤€kìšü%\ºÏƨ¼­î y{R33333³Á“Ål2- ü5d'¯Ø’2mHºîÛêóãrà•d£àü,~N¦#€=ÚœáCd:ž,n.¶žÞ ¼²ÁˆÓÉâmÆR¹1‘¼Bóª+£¡eÐW€5s©QÕŠda®"iJD<<ô@D<œœ–—1‹«²l?ìØF-ƒ~¬UãñÝ€ë$}("~^ ¾¶DÄ\I?¦Úïk§.7¾ü+"æux-&¿Ž3;ßî¾OÒD'µÌ,±ÌÈä•"–Ë·)À5í.,i `R¶ì¸ÛÐãÊ?ŸMJ¤º7"Êü›ÍÌÌ¬ŽˆxDÒo#âñ §Ý ˜Pãñ¿Gij®c6pœ¸bfffff£À,Ê·ý©ò¦o 2íü’ÖŸ[—û’Åìêƒê™£€ëHEZ5ø.©@Dc™6¦q{¦ÇèL‡‘¶ÕêO>½¡ÉþN^‘tpt“aÏoéPÏí¢%Ķª·#’+#â³±©µÍ{€S€‹k#éà€ë­/éTIµJšWåë¤ïï Ø¸Î‰+ý%"æEÄC1½ä ï²–ÉZ]›ôs¾9©ÂÏÆÀTÒsn}RbËZ¤$™Õó}{‡Kz‡¤5K¬mfffuT™¸’·*ݰƮ{#â–ªÖ±±IÒ8I;Hںױ˜™™™™™aU´eqåK2#ÓçIÅ ZM\9xÕ(K\,n!¦h×42½©ñœÈó;?ŒtYÒ©5Zô éEî\༼*ŽQ±˜™oK4žTñd(™%J.Y&yåÞ’k›™™Yå äëרõpu—ñQ$"žËXFÚ\Ò¥QöoT333333kÍ3Ìáä•A‘iGà.²x¬ä<ëûÓÚ˜áiàãÀÈÆÈ¹€,. Ó ÀmÎð_dú9Y,®à’i"ðK`Bƒã>@ÖŸ7¢êäI+{7ò4é"ÿÀ‘ô.š?‘‡t©ÚF‘–D;HšLjiÒLÍäIÛR<epX~¿ry,'Ûvbþ‚ž&ÝxpnDôkëC±”A]U»žûI 0‹†m G|=ôØx`mÒE°å)™¼’·P{*"-3™™™Õ‹$ý Øx©‚"Àùùßfe\¼yÄc“€uHcš™™™™™Ù`™Õ묰ƒ£ÉtpY¾]< Ù8òy{3- ]ÙGJ°˜XѺ3Ÿß'Ã×2³xŒLÇ?os†W’é dq*™^Fón!Ƕ¹NWŒöä•74Ùß·YEõHZøÍqü)"¾Ñ…†\N*#6©É¸½s Ì·fǾDãL±áþ?,8¶0I[’ª­¼¸ê¹KZØ.߆{€”õhÖ·"≒S¬Ëâ?–V$µ(Û˜%i:pSD<]r 33³ž’´poD<ÔëXòäÐV“VÍš¹%[Ñn,é‚ \Cÿ%®4rG¯0ë‚ë<¾"° ©*Ñk%MÍ_GÍÌÌФ­$mÞëxÌ:äÖ-Cj39jIZx©ªæx`ÿ¼Ý®™™™™™Y¯4»Q½ßð2(²˜œÝáUn~ìM[“Åœ¸²„£HÕmÚñÒ5ì ŒY@ê,Ò×Fs啽IÕ(ê9?"ÚnSÑ#ǯm2f.p@þmçû5³µ«ªŒ´pèI+‘’vŠ^t~OD<\plS’¶~ìXÕœ]ääÕòd”f }"ýÂÞxFÒMÀáÌo33ë{yåÅ=ò/ǯÌ[î]æöx6šDÄLI3€ÕGìÚ ¸»ûuž¤I7Ý ¿±h"ðzI'GøDž™™™™™õD•W¦W0‡uÏÀAÍÀ¤¢“Å£Í=zeq+™¾|¶ÍÖi²ÿ§dQëÆ¡¾2š“WFUË I{Úæ4óÿ"âºNÇSG‘v@ª¯43ØçßÖ+8÷/"âÇ"ip°rDüdľeÿŽapVœ¼b£ÝR‰ùhœ°8d)íE’nþî½iff})/¶7Kþ-º#©wô ݎɬÃneÉä•©’ÆGÄÂZ ¸‡9¤ª+í¼NÒ"bþ’‡™™™™™™uT•Wœ¼2X~ \ l’oçW%%3MÊ·ñÀÀŒ|{lÄÇËÉâ‰.Ç?Z|8Ø´ây矫xÎŽÔ ò IOã %‹€ÓºNi’¦'‘^9>"ŽïBH5EÄtIk5ºOéH:8´`w,20OL9øé¢÷“’~Oçû_N*_U¯I=“N¶nÑâqâäÕ†µ,»HÒš¤ŸÙ•›:Ø Ø@Òñ±¨³‘š™™µå…Ô¾kâ|ÈF§Û€ÝF<¶4©uШ+9OK:Ô6hé»×ö“t†ÿV53333³.+[yåq²x¤’H¬;²XÜœoÖ+YÌ#ÓQÀùÏ|&Yu]K:i\ó!i7–¼[k¸Ë"ãE3OÄ9 ˜ÒdèuÀû;QS)0æÆ,´p\Áu‡7«  iUIŸî~@J\t¡ûÝ’V‘tEÊ(|[‹±žl§DÄ3ÀCÀßH ,»‘Úµ{q¡lâ‹“WlLŠˆ"âlà§À…¤’u#ÍþÕ͸ÌÌÌZ0%+1\ê–w6Ê=Y㱑muF•ˆ¸úmx·–ô’nÆcfffffcÚF͇4ucs˜eÇW4×\ଊæê8'¯ô1I¯>Z`è‘q{§ã)èbàî æYšbí…®þ»ÖIÛKú p;ð—:[…Tš¹¨Çƒ#âÀˆ˜1ô`D,Œˆ'#â!Rië£WQûÂf< | x/ð àOÀ ¤ ï<ážr6¶Eļˆ¸."~Mªbu‹“É®Šˆf•YÌÌ̺NÒÔ®Vøp}—Ã1ë¶ZÉY+t=Š.‹ˆ[€ÔÙ½‹¤Íº™™™™™YS+˜ãïÌa6veñ©CÎ&‹§+š«ã–êuU“´©v=ÿŠˆ¾ï•-i*©$š ýFDü© !!éWÀ§KNU´$Ù\à°ˆ˜?üAIûö.G=§GE4î–—s_œ#i[àפ»h[±,ðIàÇÀ‡‡WØ‘´) v#R›£†mw·¸ŽÙ¨–·‹;GÒ•ÀvøâŸ™™õ!IËQ»òâà܈^v¤4ëŠZ'TFuå•!qEÞ2lë»§IšáÌÌÌÌ̬ÃÊV^ àÜ*1ã~A*n0©ä<Ó2Fgå•76Ùß÷UW$-üX¹ÉпŸè|D-«¢uP³¤!ˆ›$—t°¤kHm{:‘¸ò©EÓë›%®Œ”_8©JÌÂ6Ö~7ðOI››ó¡ˆ¸$"NˆˆÏDÄ!±SD¬FjYdf#ä•‘.Œˆv~ÍÌÌ:íåÀÄ_µÚ©˜6#+¯Ìæ×8J]@í&¯‘4¡»á˜™™™™ÙS¶òÊ¿Èw+0³6e1‹T¡¬?W0G׌Æä•ÑÐ2è»ÀöMÆ<¼¹[^DĿ˻°Ô¹Àw$­(éhàßÀohþ½kG*Ÿlmg¨EÄ¢ˆø<é¢ÄƒmL± p•¤Ã ¬5·ùÍÌÌ̬G$mBí;œ®ér8f½òðGÒM?ˆˆãú©Úh§åÕ;ÏjìLë•<ÍÌÌÌÌÌZ±IÉãÿVIfpQÉãŸ%¬ ®£*yEÒ¦À– †Ü7t+žvH:xg“a ƒ#â¡ÎGÔ¶vxþ™Àç€oß6ìÐZ·{FÄ{ªºÛ5".¶þÚÆá“€$ýBRÙRQffffÖ$-ìYc×"R» ÷ ²1!"žˆû"bæÈö°cEþï>“Ô&w¤U%ÕªÎdffföÿÙ»ï8KÊ*ÿãŸïÌ003ä¨H–ŒÉ(J0€.*¸"꺻ººîoÕuM¸×¸¦]WQW](* &‚b ‚ä CNÃÌÀÀ&œßO5Ós§ºo¨ºU÷Þþ¾_¯zõíªzê9Ý}»ûÞªS瘙ÓÐ$`¯‚G¹ ŒPÌ €û ޤ”(*4TÉ+ xÕI»_oc×#ââ^ÇSЩ¤J(½2ø=ðÏô®ÿùbàSÀ®Y²I©"bp$ðA › :'WJÚ¹ÔÀÌÌÌ̬»ÓsÖ_™½n¬„¤U%)i[·'1«OD< œ×´úfà´ˆXTCHfffff6üvÖ,0þià%Åbfp_Áñ–E…œ¼Ò'$­ œ Lk±ëÙÀg{Q1±”T¥WvÔÃã_ì'öòÄ`$Ÿ^ÜÛÅ!¶®ô÷åFffc‘4UÒÞ’†í¨™™Õk³œuWVÇF¤ÁGÿ(éUY…K3«XDÌþLª¾zaDœßê]r¬ IDAT­ƒÍÌÌÌÌlhXpüOi8ÙÞ¬Dy-…;á䕺Hzã—²z¸¼¢pºñ}`ëûÜ ¼y€J†ÿ˜tgØ ™Gªær@DÜXÕ¤q))!çW] Ÿ|KÒ%­Qndf6š¤ÉÀ+}€£|Gº™™•èçÀ9Àè*+—dIáUZoÔãÉÀ–¤;¯Ì¬—?ŠˆêÄÌÌÌÌ̆^Ñä•ï”…™(šàä•Íø•8~ѯI’ÞGëª1‹€c"bN!•""–ºãèÀYÀñÕ,öJEÄìˆ8 x/©eQ§Ž®–´[¹‘™€$/6ÍVmžV›™™DĤö›ç7DDÑÒ ÝX?gÝã•GafÀ³Õ:gׇ™™™™™M{;øCi‘˜YæÖ@§†)ye [I:öÚ½'"®îu<=pÐïwˆ= ¼>"^÷×LD| ØŸTi§S[—Izw¹Q™©½×6Më¶düª_fffÉ’Xnˆ k a½œuN^1333333f í<§À¾[V(fVš¾,ì1ž¡H^ÉZ¥¼xœ]æ¿«&šöIÚ8 ˜Òb×S"â[„Tº¬ÚÍ;€~íËý40;"Ψ;Ñ"âJR¡3»¾*p’¤3%­]ndfSVueò›÷‘ôü*ã133ë…ìÿ“WÌÌÌÌÌÌÌ&žã Œ] œ\V f6q Eò p°Ê8ÛÏŽˆnÚ°ôŒ¤ÉÀO€ç¶Øõzཨw"âOôoû ´þÔ""žˆˆc€w“ÚFuêµÀ5’\¬ ¬\û…À_r6‹Ô>hÍŠÃ233+ÛZä'ÖϪ:3333333«HC«Ç8Â/iÄCe…cf×°$¯Ùbû9•DÑ™OµØçIà˜ˆ˜ßûpzî‹Àeu1†u0žˆø°/pGÃ7þ(é½¥e6qý¸+gýjÀ+%µª¤effÖÏòª®Ìˆ…•GbfffffffU9X¿Ë±|¢ÄXÌl–ä•#ÆÙ¶8¯ª@Ú!éUÀ¿·±ëÛ"â¶^ÇS‘ÉÀ)u1†©Y%œ¾×»“ªõtjà¿$%)ï‚„™µ)uBã|R;ºfW™™Y¹ò^+ºêŠ™™™™™™Ùp{s±?§×–‰™MhŸ¼"iàyãìrYDÌ©*žV$mAJâP‹]¿gVRU&[ÖÄ8úºú @DÌ‹ˆã€tqˆÃmÊÊl≈EÀÙ@^;ºí$PqHfffeY+gÝã•GafffffffÕhhKà¨.Gðñ£1³ nà“WhÝ2èÜJ¢hƒ¤Õ€3µ[ìú'ཨ’V¾ü[ݱŒczÝ´+"þظ¥Ã¡ŽˆË{’Ù„Œ±yI»W™™YIòªºe™™™™™™Ùð:˜ÒåØŸÑˆëÊ ÆÌ&6'¯Të$`·û< ¼!"–TOÏIz pðöºci¡ï+¯Œ×{Ò~+¦s€/ö."³‰'"n®có’¶«233³ä½?\VyfffffffÖ{ mßåèe@£¼`ÌÌ·¿$U(™,õx~¶}`EÄÍ’ö¾ÂŠ~NŒˆ?Õ–Ù„K%l­~ øyDÌ®/233³Žå½†wõ>«„¤Õu³O×F*Ø=Bzmeã´©2íè$´—Jz0"ž®),33333ëG M!Ý„ÞmÕ•¢á› ̬|›¼’•/yåà·…3ž/»¶Øg&pü ·u‘´'p2°CݱŒásñݺƒè¥ˆXü½¤‹o>WoTfCD<#éÀëHí~î;„Í̬™¤ €Çúøe¿ÛYòÚ-.­:µ+ÿO^%錈p%33333ñ`÷.ÇžA#Î.33³›¼Bú£ºÑ8ÛÿP÷…CIGïn±Û"àu1§‚J'i:ÐÞKgšwÿ< |اÃñº¨‡Çî+ñ#IWs9!ÊlÐDÄ|I?ž‰ˆEuÇcffý%«*q,ð„¤k›"¢ßÚË] ¬Jz]>²8qÀª²Yκûüž¦m—[ë5­ß88¯òˆÌÌÌÌ̬ÿ4´Ý·ü™ ¼§ÄhÌÌV0ÈÉ+G¶Ø~N%QŒAÒ&@;•>þ%"®êu<½ éPR…-;À×€“Ê’íWzp+z‚Ô&hÂp_s³zDļºc03³¾µ ©-Ï:ÀAÀ¾’®ï§1«îlbÊZÐn‘³éÞªcTY+Ëó׳ò!ÛIz,"®®!433333ë MNVébto¦—”™Ùry=ÍE«ä•s+‰"‡¤ÉÀ©,ï×=–Ó"⛄T*IëK:8ŸÎWf“²2ß \CïWÖî’ôEIV0Ÿ™™™™Ù³²÷;5­^X½†pÌúÑNäŸ^b,ff¹2yx9ãÇ^gÕ•[ì¶xcDç$3333+Y^/éÀmUbÖo$m l”³ÉUW ŠˆEÀYÀ39›7ö¯4 33333«VCShè[Àg»<ÂÀ¡4⦣êWNî·a5pÏíK^^Ôbûd`û*MÒ»€£[ìöp|D,« ¤®Iš!é¿ËÉ/q>–N.¾œ@ç¿;GÄÿ;QÄù¤–De™|€åI,´F23333[IÖšã9›®‹ˆ¥UÇcÖ‡vÏY7¸µê@†QDÌ~Cz¯ÞlIyŸÌÌÌÌÌlÐ5´©ãßwy„'€ÃhÄUåÕSE[£N-%ŠÞ(úµ¹mì`›p?ÿJ^‘´©‚G+e&5´$ià‹-v à„ˆx¨‚º&éàFà_iÝþh´›¯'%­´[eeÄÓÀ?‡FD^oîæ8';v8G;F’XfJú¬“XÌÌÌ̬€í€)Më‚Ô’ÓlB“´°eΦkÜUžˆ¸¸,gÓ,àáŠÃ13333³^kh'àRà.ð$ðrñçò‚ê¹NºGôb|/ ó×f­M¸Ÿÿ@%¯Ú»´1«ç‘d$M~¬Öb×ÿ‰ˆ_WRW$m(éÇÀ¹Àó;º8™”•øf:OZ¸„Tmå³ÞÜíx­¿çEÌþ¸Ô½Àͬ—$M•´NÝq˜™YO윳îîˆxªòHÌúHv3ÂËY¹RçRàúê#nq%+¶*»8=Â}ëÍÌÌÌ̆FCÒÐÿvèò(#‰+W”X%Š^ Ÿ^J½Q4¶K^°L¸ä•æ»û–¤çÓÆ®ózK“¯ÐºMÑÕÀ+ˆ¥+’Þ|X·Ã¡—’*­t#€ÿœÔAÒʈNÚñµ.b33k‹¤ÍHðK$껌Í̆‡¤õr6ù¼Yz/x©-ðè›jnŽˆõ„4ô.Öî®ðÛ\3333s³§Z•t­íÃÀšŽtp4¸¹”¸ª5Ì ܘc­9y¥ý íÅ[ÉUI;GÛb×§€c#â™ÞGÕI[ß^ÚáйÀO×ûáʈøJ—cwmcŸÛ÷ `.æxøfãÌÌÆ%ià@V¼#àOõDdff=WueвE¦Ù°‹ˆeÀå’f‡ë Èooc%ˆˆ%’Nw²´™™™™ ‘¼F&ކvŽÞ<¯àÑÎÞHc`«3óþaþÚ¬µ ÷óˆä•ì"ß[ÚÜýƆ2ÚÅÀmì÷®ˆ¸½×ÁtBÒR ¦Ñyë_ · ã2à€ãÛI^ùkDœ œ-éU¤$–Ý;˜ã³±°›àÌÌZx-ðœ¦u»IºÖ­$ÌÌŸ¤Õ€mr6Ýàª~fËEÄÃ’~DJê½'"æ×Ó0s⊙™™™ †&Ñy7Á×Ð6¤„•ã€íJ:êg€iIJ’ŽW‡a¾À?Ì_›µ6á~þ‘¼Dº«÷ö0$ýŠöW~§ô:žNHzðm`—‡Þ|ø'`Û‚aœ^ðÄ}ÞÅ€fyggI: ø`·c$U¥13ë…+W5­› ì \X}8ffV²íI×G[Fu‰öf#"–n133333kׯ¬Ø‚t85´°°¶ìTâÑgÿH#~Vâ1ë2£æñ½4Ì_›µ6á~þƒ’¼òÚöíiòŠ¤Ï³òÇ<3I‰}AÒ àSÀ{èìú2àkÀÀç©CùtD|´à1`åŠyn‘4¸¸ø-ðÛˆØ]ÒѤ$–Ž1ÖUW̬g"⮬LþæM›vô—ˆ˜[}TffV¢€Å¤ÖAfë§ë ©ISû±ª™™™™™™MHGÔ@©° ðÒu«ý²e£Íøà_iÄã=:~Õö,8þE¥DÑEcëç¯ÍZ+úóÛ‘†¦Ñˆ¥DS¾O^‘$àè†ô,yEÒ§HívÚqIDÌëU,t$ðuàù½žôõþ ðÏ%„òˆøBуHZ˜ÞÆ®þ¹o’-“¿‡”È2’Œó¯¬Ø†¨eÕIkÚ.}¢_~Îf6p.eåä•IÀ>Ào*ÆÌÌJ‹I ,7Hz)‰å–z£êŒ¤é¤žÙ#¯¥gHú¦Û™™™™™™Yèä¦÷þÐÐÀú¤›\¶"%ªŒ,ÛÒÞu¯¢f’ª­œ_Á\ÕhhKÒ÷³ˆChH4úìœGCÓIwŠØ‡†Ö ák™ê°‚ãW^ œWB,•èûä`_Ú«²1¢'É+’>|¤ƒ!_éE´!ð?¤ÞwX|¸ø>}ÿóðOñ‚ÇÑn¦é£À 9ëŸü]¶éë|=ðQR;¥ÿŒˆEcTÒþ¤¬Ô-€õ€·µ¹™Y&"“t+éÍÉh/tUD̪#.33+WD< <\wȪ6¾=gÓ&À}‡cffffff¶\C»‡ÔÃTÒõ¡ H )ë7=Îû|ÕZbM' 1¿Æ8z¡èÅ}H×wþZ±ÊtÅ;bL^ü²p4V­†Öö.áH‡áä•Ruš=YúÉTI‡ÿÙÁ›"âê²ã脤·ÿ¬ÛáЋwoÎT0”%À[#â‡3Z»É+ÐúŒ€g"â I?Ž~»£´ ©ÕÐÉÙê·J:;b(zšYõ.¶aåvnû¿ª>333ˆˆ§%=¬Õ´i7œ¼bffffffuih ð]Š_ßÜ–†~HJ X%û˜·ŒµmZÁù«²€Ôiàs4⡺ƒé‘W–tœWÐÉ+¯(ñ8N^Kº…•ïJËc±aëÝ:šSàjRVd»Œˆ?–G»$m|8¸Ã¡s€÷Wßv/!œg€c#âç%ëY’^ œÙb·…ÀÆÀc´þÅþDDüG‹9_üü¾y;G í?~3ë!I±bë²gDă‡cff€¤½HU0›s«ŽÇÌÌÌÌÌÌ&¸†Ö'UÅ?¼îPÀàÀçiÄ@UƒíHCÿ|¶¤£-^Ý7-•ú[àV¾ñµ¼•Fœ\±¬ íL*8±^IGüðÎAH`éëäIÏ:¹p÷—ˆÈK.èvþ©Àïé¬$ϯ"⨲bh—¤)ÀûH•A:ÍøüI6öïH­sŠ– ˜¼&¢ü?ò’N µ3ϽÀ§I‰<­Œ›l$é¤*6ãõ<8"úùÊÌú’¤é¤jW«4mº3"ή>"3334ôþ 9üÚˆø]õ™™™™™™Ù„ÔÐ*ÀñÀ'€çÕM¿»•”àómñHÝÁ”®¡ç[“Šü°WÉ3ð àtààN1§ä9ò¥ä¬­I•ÚíÁ,'·wЈÇz0‡u£¡Õ­HÏ#€7³ò5£¢n¾ ÜÜ ÜßÉ,ýž¼rð£†ü2"Ž.qþ¯ïì`È2`Lj¸¥¬Ú!iOàÛäß¹?ž{I_ßý”Wm`6𪈸´¤ã­ k‰ô½»ÝšÅ‘w·èhOëEÄ’œy6¾Cû%ÇÞ'µ¹¯™Ù³$íËÊ/´—ߎˆ5„dff†¤ƒšV/¾‹jÉÌ*&iK`󈸨îXÌÌÌÌl‚ihð÷¤›¯7©9š~6›t“ú)4⊺ƒéJC/"XkÔ²ö¨Ç.ìϨ!ºÙÀݤ. OdËÜQŸ.¥wäŽnhàEä]k‘:lÉÊ­›«ð$p0‹±¿¶«iÄu5Ä6RÂÕ!ŒýÜ^Øب†è‘žÛ“ÿ³Ÿ ÜC#~[ePE{ÂõÚK;Üÿβ&–t<%®ü¤ÊÄI«ŸÞKg=¯–_!UyW6¾Œj+a‹ˆ›K:^·V£uâ ÀÅc$®¼’”¸ÒIªÏKº0"nê`Œ™¤^š{°âßòIÀvÀ5µDdff–þ?5'¯¬ìHj­j¶Ië›FøÄÖ “$`?²Ö¹’fGD¿õ7333³aÔ€÷P^ËŒasp>p6p.x¦æxŠzpBÝAŒaÝlÏÿ¾<ƶ7+5¢ò¬ ¼°Å>_"]G¶îìAª†ÔV%]ƒÚnœ}þBv^ *Ö¼’ŸÕÖ!I›’Êætb)‘¤’^D*í´}‡C¯%ýÃ?¸ž”ÝU–›—GÄ}%³[k¶¹ß™£?ÉÚwü7ð]̹ð]`Ÿ.ÆšÙ $ÝM* 7Ú8yÅÌÌjKºجiÓî’nˆø“cV"I›ªV®*iaDÜVwLÖ¬mØÀ¦£V(éш褵³™™™™Y7&¯;ˆ>óp1pp>¸µæxÌÌz¢o“W$=•/âµRVå•ïÐ~òÈJª®Hš 4€ÐYµ•ÀçIe~N§üòC—¯ˆˆÙ%·[k´±Ï“ÀOG>É‚~lÛåœ7zì™™uãfVþ¿·¾¤õ#bV™™™‘’(›“Wf¶_}8Ö$mO*ƒ;)[u˜¤yñPaY÷vfÅÄH?Û#%ý("æ×“™™™™ÙDq/éæóF-7҈ŵFefV¾M^¡óª+PBåIïípØ2àEçnEÒÀ÷Y¹tw+7&•ù.Û¯cúìV;ÏígÕ&þ£ÍqÍ‚T샱¨‹ñff3ùÀtR¯Á[€›œ¸bff5› Ì!õàí…’üj‚KeØØ«iÓdà•’N‹ˆ'+ÌŠºØ„•Xf¯tfD,«>,3333³•,³,ÉY7‰t­lJö±ùqÞ¶2®§.æ6-‘’Vn¢á÷P-,aÅŸk;—±üg:ÖÏ=oûÈ Uy>wòõ-%½ïkÊ{ÜI«Æ2:ÿù/aùß´vžÓ£×õ%EDÝ1ä’ôàm Y L‹ˆ¥æÜ¸X½Ã¡§FÄ›º·I«úû}ˆÎžLK²½|~x_D,i¹gI$½™Ô2©¨½ÇHÕVöëòo‰ˆ JˆÇÌ&8I;ÏwùfffV&I›Gålz8½_ßSZoe7ÆØ•+gGĽÕEeeÉZG~UÓ¿FÄ%‡dfffffffC®êŒ±NÔáþ3 &®ø'®,>Ùí¼­Hz!é®§é< ¥¬lÐ< €7EÄ¿T™¸’y¤„cÜì\K÷‰+?vv⊙•%"nˆˆÛœ¸bffý$"f’_åò¹t^Ò†€¤5c;qå)à '® ®ˆXœK:çÑì…’ºm·kfffffff–«/“W$mlÙá°[ NûÏÀKºwjDÜZpî•Hš"écÀŸ]Ë>~AwûEÄ©5Í?³„c,%%+åÝEÖÊIª6òõˆXÚÃyºq7Õ$¯|x_D̯`.3333Y›Œs6ÍæÄ€ˆÈ«¾`Ãm©gžÇ€_GÄœ ã±DÄ“’Î^³yI”Y™ÖÌÌÌÌÌÌÌ&žž'¯HZ 8„t§ÖáÀ&=˜¦ã–AYIïÓÈ¿k¨•ÙÀ»72÷$à À×€uº8ÄOw_ÞØm-üxoD<Ü£ãu鮯^yø»ˆ8»‡s˜™™™Ù`Ú˜š³¾«V¦fý,"žt1ðò¦M×èìG"ânIW{7oÖ¨!$3333333"=I^‘´p<)YeŸ^Í3Ê:’¶Žˆ;:ó5à]Î÷Ùˆx¢ÓA’¦o> lÓżӲã½ØT¹¥,W‰ˆ Kßm£ÌÌÌÌÌÌÌŠ“´& l¡éãèõ#"[žŽˆE]Î+`Ú¨ã3š—ˆXÖÍÅS$yEÒæÀg€7“Ê ©4AªVò¡ˆ¸@Òó€Kͺ<æ"âÍíì˜ý ß|;Ë_b IDATX§ËùÎþ>"jc¾]€ƒI툶$%³¬ <<˜}½\÷uWí$m \ BRÈã±~ÝA˜™™™Y1’¶^ž³é¬ˆ¸«êxÌÌÌÌÌÌ̬z’žOºØ;)gQÎç“G­$"n.0÷±ÙÜÍÇmÇ5qE—óNÞ–}:úâró…æ¼ ÏK?wûugso,iZKÊì2bIvÃÂÈs|tòĤ¦yFÄÌsïFꊑ÷»¬”à1úñƒqe¹_G꺡1ÆÙvuD\Ö弓ww7pIDüµË¹×ÚÊÈ,µ,.Œˆ»»œ{MÒµþ‘c-îºJФ×ß%=yú‘HI“ôOÀY¤v0Ý&®ÌÞßÖÄéŸÖ€"­b¯m·"JD\\W`¾=‰Ž^Ps8íZWÒdß‘ffff6¸²äô=s6Íœ¸bffffffÖIŠY’¶'%4L!%qLãqÞº#âçÂß/›»·]'¯ªÁNërl‘î"]ÔïÖÔc§¯k£¤¥d‰,ä'Ïœw3qVÈáÅ݌͜ ºœ{'`÷ìÓ±’HÆú|qD|£@Ü{;v9ö`f¹·6îrìâó¬ÌèrìäóÍÀª2ƒkäïéˆæŠ0XØwÔçÏtüG*kUóà=©Ò àdàQºÿGðáˆx´ÕN’Þ|“ôäîÖ|`—AkåÓ ’Ö"%¼Øb¿üu°é9hffffƒiÒkºfWú333333›ˆ$mlBJн4'4?ž< |§Àô›Ûv9¶H¤ Ý*ÚÉ¢®“E.PCJ,éV«ŸWóÅô¼íÝšJ÷6 Ø÷mµs×ù<+ú\)2÷ ~݃|r±ÈßÃæßÍeýq–´%pùwö»"‰+WßoI3€“€·˜Ò›»GÄ=3$mBʰڗ”¬òBú¯%U76ÀÉ+fÖìÿ©Ù²j¶,ŠˆYµff6IšÎŠwŒ˜ÜVq8'ýKã ඈx°Þh&®ìÆ€ÝH¥dù¤ˆ™™™™™’½çZ%[¦6}lgÝ/ ¼GØ„å•!:UôFå"Õîëœ{¢&¯©ˆQ4Ùh"¾®óy6¨ $Eç®Sq—ù·xiÛ¿ì’^ übEÑ\àM1fÖ¤ÝÓ}†çˆk€ƒ#bNÁã I«’^Ôì;jy^­AõÎu`fgïlíàœb13›èö'%6»t¼÷ ö¬€]$ý:"î¬; ‰DÒ¤ïÿv¤“OWÕ”™™™™™!i©²Â4`N÷—;‡e*°¨Ë±E:MHèe%Vê¼°?¨ç!õç5¨Š&qyžÕ9wºþº#"²DÄV³Œnõþ]¨>yEÒÁÀ™ëG6ˆ‚”¸rGÞÆì®ø÷Ÿ¡ø÷æ"ਈxªàqú–¤Í€}Xž¨²ç9åä3ëTÞƉò7Ó̬odUW¶ÎÙô@DÜRu<ƒFÒ =²O'¯tqD\_cXC/; ¾)i¥ù}$ݳ«ÌÌÌÌÌl8e׋¦eËjMóÖ­ÆŠ7Iœt{cs‘Š*°t›¼RdîA®¼2›ô}[Ö´,%][kÝÒllç‘.XGÓ±G(çñÈǧ Ì»˜t­8ož¼ÏG¯›>û¸HB}DÜÜ^ v@Ùsf1ÅŸ÷íÎ7¸§Š¹ræžK:·b6aŒ™¼"éyÀùLÌv'wJVø§™ÝÅöà_(Þ¯ àÿ€w ÚÉÚ¬túž,OTÙxN ¡é…Ñú”óóheuÒ×½'ð)ÓòLà/ƒž|df})ïÅwÑÞžffV@DÜ+éTêíŸ;0"â1I§Gëäì²°¾¤s†¹}j¯dï˶¶6jsXwˆˆ¢e|Í:"iM`«ˆ¸¦îXÌÌÌl8IšìFJRYå +íÞ¶fé å&¯ŒTYœ}lõ¸ës#âaàánÇ›™™–{LÒTà×Àó« §/Ì^“e³=KÒþÀwI'Ëðßñ¾’ŽÕS’¶fy’Ê>¤Ôu\@ àzàR™ö?‘’VöNž[a,ÏÞ™-³%ý øp~DÔRZÉ̆NÞ›êù•Gaff+ÈJxÖRÆsEÄ“’Î^M~Âûs€7JúMDÜ[mtïhÚ¿Ùdpp“V¬Ù R¯¦Iz&"ÜZ×ÌÌÌz!€ý Œ/’@RäºÀ2еî™Mº~µxfÐn˜6331VÂû« ¤O<¼""nY1ªÚÊ{(ïËFD|¼¤c•JÒÀ^,¯ª²7©²I–‘’U~—-¿ˆúÒe½í.^|–êkÖÞ’-‡çU<¿™ §5rÖù®t338±@Ò™À‘À9»LŽ–tpEªÑÍ­´N^)á}‹«EZ]$í¼Œå-­^&in½ÄÍÌ̬ÿ¤Sýé|XDtU $"–JZ@÷I(«u9ndîŤ×< I•XÆú¸Âº¢7Äf7Yt]=ÅÌ̬_¨ùÄ`ÖÇýfòû’³ŽˆˆóàÙ¤ˆc€ÿ¶*iŽeÀ»#âK:^a’¶#e"TUÙ‘úÊ Ï®.Ë–+Û}‘š•œ¼8•bYÊÝš l•ôÙ3³á&éŤ2§£]×™™YQ’&/%µ Ë=¤j†®6Ö‚¤Õ·±r Õ‘Ö@×FÄý•f6ФmH‰kÍ?q% 33³‰+ë°©Àú¤›D§×GÄEŽ{°a—Ão‹ˆ_˜{jD<Óíx33³‰.¯BÅ—˜x‰+Nø(é|àPRÒÊî%ðÆˆøY‰ÇìH–³#ðbà%ÙÒnoô²-®.'%ª\·w{°ì.Â'3$-Ncù]]U9Û‰+fV¢ÕsÖ¹òŠ™™ ¬¬tõ…’"%±ä½}>ðfI§EÄœJ0ñ”¤ûM³U YÞÈw]Z¿¸ xx^ÓúiÀ«%î È»‘vÝ‚ÓéS'¯˜™™M0£“WŽ­-Šáôcàí1¿›ÁYÒÅ^¤žïgËn¤äŠ5I½Q¼„^§ay¢Êeñ@Å1´-">“}/ÿ½ƒaÛgc?|HÒN¤$–×»Ž1ÆwKšY™¦“ßó×É+ff6t"âI3Ý«k§+Y)ô H *#É*ÍÔòL6!•67jq·¤?’ëe’æöóù33³aµ®œš³¬:Æú™qg—ÓµSÝ|©zýÝÀäʄNZ133› HZ x„ôÅŠY¼?"¾ÜîI“€€}F-Û“á²jw1ªýpí Ý(éXR2Q'æEĵMÇÚŠT¥èo€½IwŒ=lO”®™’6bå¤ÒEñ:â13V’Ö–FÄ“uÇbÅIÚŒtQ<¯¿ý“ô¨Ç½¤Uw8ÄuqqYñ˜õ;I‡;ælZüÄï­ÍÌÌÊ%éu¤bGR:qUDü©Ëy_Lº!·Ù`&)aåÞˆXÔÍñÍÌÌløŒT^y-N\)Ã#ÀëÛéÕ,icàðl9X»Ç±µã)àJ–'ª\ÕR1’Ö¾ÚÅеó%·¬Ì²Ì¿|1û¾ØØ'×̬dÍ¥Ô!Ý™mff%ÉWŽ–Jú©X†ÂÚÀúÙ’g™¤y¤“åþߎ,GÄyÝL‹$-Véf<ÕWÓ4«ÛŤß×ç5­_ xµ¤Ó²¶bfffCEÒ*¤ë0.FÄù¦žAjÃÓN“]ž¿—´3+v8¸£Iåfff6øF^4WkÃá2à˜ˆx0ocöÂt?àRÂÊXígª4øp p!鎿eõ†TºOëu9vCà·YË=ͳŸõ׊gf6†9¤7ó I-âF>š™Y F%®LÏV㖡ЪMÏ$`­liVôäù<ÚOBYH*~/pODÌ)8·Ù@‰ˆ¥’Î!U\³ióºÀ’~å‹Zff6L$lÞåðy§/’Úuòʨ¹G®Cp—ÿÇ›™™ÙX¦HÚxYÝ °yÀ‰ÀW#béè ’6%%ªÌÊ'eªö8ð{R²Ê% g²Ê³$½ø‡‚‡Ù”å ,—–™YKY¹ÔÛëŽÃÌlå$®@JzpËàk•¼2ž¼ªg+ye1ð(©JçÃÀ#~Ž™AD,ô+àõ¬|Ql)©êà’Ê33³ /k ¹©RÉ£–…qIC/.0¶hÕü:“Wn!ý_xºùŠ™™™ÙhSH=ÁÝŠ ;?þ_D<϶zq¶¼Ø¡ÆØ $ý=ð;R²Ê,«ù$Êyno \ é%1»„ã™™™™Y ÆH\±©œ¶ W·¥Ð¡œä•¥Àc¤D•‘eÎ{fÖ¶ˆx\Òo€W±üwðJàRÿÚ˜™Y¯eI*ëdËú¤¶vc%k)¥ND¸½‰Y—"âjIwEÄܺc13³¡·°e—c'“*5>ÝåøÑÉ+K³ÏÛ]v9'ñh‘ñffffUqòJg&‘Jö‹Û€÷EÄÙuÒg> lÜÆ~Ë€×ß6oóØ/~*éèˆ(Ò§ÔÌÌÌÌ* ià0Ò{ŸfKpâÊ„#'þ¯;3[™WÌ̬"¿Ý'¯\Ü,rÅ333³|N^Ìq’Š™™™Yÿð0°QÝØ æ‘ZwÖÌ ô`÷6v½Ø-¯·¨¤ó€iLý‰ˆøö7333³ÊÚBi𫈘WqHfffffÖ&Ië’V¶f4m¾'"~Q}TffffÖkS€ûqòJ¿ø+ð¿À"¢ëþ™‘¤Ãh/qà=y‰+ñI¯~I{í‡>&éɈø¯6÷7333³ÞºX ØtÔº»_GÄâzB23333³±HZÔh{Æ¿^±©¤i± šÈÌÌÌ̬*~A*«mõXœ|#".¯;˜A%é"à¥mìzzD¼¡ãý éç2¹ƒ0þ1"¾ÕÁþffffÖ#’VÞ¬\ü!"¢Þ¨ÌÌÌÌÌlDÖhSRÕÄ‘¶@í¸$"þÚ³ÀÌÌÌ̬¾ ¼«î@& ëï'GÄ캃d’öÚIü™l÷µyÜH?#µÊ“ÀV1«ÍýÍÌÌ̬‡$­l7Ö‹™™•+]ïdàf''š™ IkV¶Öè`è2`&pMDÜ߃ÐÌÌÌ̬F#mƒ¬×ggDÄ-u3D>Øæ~_ˆˆû$í7´Ú9"N–´&ð•6Ž=8‰+ffffý#"žž¨;33+—¤IÀ¡ÀvÀs ëÈÌÌ:´>°Wû?ÜÜó{’™™™™ÕÍÉ+½ç„•’´íµ½z ø²¤—J:xgDÌoPDœ”Ý ðéqv{8,"®m7n3³nIÚ˜å»KÍÌÌÌl"’48’Ô^`'I‹"â5†eff™Iª’=}œ}·7EÄ#Ueffffõšø‚{yþ\•-WFăõ†4ôÞL{m}¾EzÃóÒóþ Àþ’Nˆˆ‹ÆŸÉJÎ gó}À!q[ga›™µ'+‡þ`ëlY ø)ð@a™™™™™UNÒàhàyM›ö´0"®ª!,33ëPD„¤›=š7÷’ª¬ÜK+ÎÌÌÌÌj£ˆ@ÒM¤þ’¶Ü,à@àÅÀ>¤΋s–EÀÀUqo=¡NLJWtg›µØu1鎬ïjÚÀ—€GÄ¢ó}xç¨UwWîé l3³ŽHú`“¦Õ×FÄïjÇÌÌÌ̬6Yb÷aŒ}ëw®Šjf6$­ Ÿ}:¸¸9"žª/*3333«ÓHòʉÀ'ê¦] |8="ž©;[‘¤ƒ€‹ÛØõûÀiÀ¯ÇÙçzào#âúqæp ð&ààЈx¸ÝxÍ̺!i?àEM«çßvë 3333›h²÷æG’ªæ¹<"®¨0$33ë’¤½€û"⡺c1333³úMÊ>þ¸Ö(ú׋HmffKºTÒ$!iº3 %‘´ã,Z?Çw®”ô¯cí]$~+ðà%N\1³ŠÜž³n:°qÕ˜™ÕAÒ꒦ׇ™™õ‡ì½ùoHm%òì#é ,ÉÅÌÌz@Ò’ö’´z‘ãDÄŸ¸bffff#4rÓ¶¤+=ë g ,žÈ>>ž-³³“ZËÌŒˆÅ5Å9”$­Fúþ®Õb×[UÍÛ<ô×#¢¹µ™Y­$½…•ÿÞ¹u™ =I›‡“ZzþܧÌÌl„¤)Àk玱ËmÀy±¬º¨Ì̆—¤É¤ªW;›.ˆ+k ÌÌÌÌ̆Æèä•÷ÿUo8Ck)p)‘åRÿÎK€|¾;’ŽÎhc×ûMÚ<ì­Àî1¿ëÀÌÌz@Òþ¬œ`ú4ðÿ1³a”Ý-¿7°é¤8ÀŸ#â²ú¢23³~#iUà(ÆN`¹8Û7™™uOÒsH +Û’nmnDœ\}Tffff6ŒF'¯<‡”X1£Öˆ&–yÀ À•¤d–k€ÙñD­Q Iÿ ¼£ÄC.öˆ«J<¦™Y)$m›³é숸³êxÌÌzIÒ4Rµ•Ír6ÿ""î©8$33ëcY–W0vÅÕ‡_FÄÂÊ‚23pYÛÎí€u[ì~FD<Øû¨ÌÌÌÌlØiô Û’>|®¾pŒt'ý»I­ˆîˆˆ'ë ©ÿHºØ©ÄCžŸê"Ž5€—’ªèÜUb’¦‡ÛŒ³ÛÀ±¨š¨ÌÌlPIÚØÔª¤–sj É̬¯IZ xKCnn‹ˆgz”™™™™MHSšWDÄo%¼®†x¬{SIe·cû3’îay2Ë Ë€µ&Ê«<ÐYÀ‘͉+’Öfyu•ÍÛ8Ö¾’V÷]\fÖ+±DÒÿoï΃ä8ÏûŽÜI¼I€÷^%‘:,ÉÔA‰T$Y.ËrÙ’cVlU’’c%Ž+U)WR•”ãŠíXgËRJWK¶sX %ñ oЦD™"ÁWw-’4ÝU׿ïóöenx5ð¬_%I’Ôkã†WàÕ¥YþO&‹>‘™_}£j1ûO)>΢¦Ú¦‹Ã@c×–ÆåˆÖ÷»kKDlÎéà üåŸëà:à„.”ö¹Ìü.G’&WQž"ëîÌüI¿ë‘¤©ª‚xï®l2lðýÌÜןª$I’¤™+"æ¿ Ì¶R+OdæþZ “$IÒŒ2ax "> |áoü^fþÑDVk~¾ø¹j»˜ß§ÚÅh×–ÆPËèï»Ý "vÓYØd'°¸Kå4Z™ÍnÂHRÇ"bðQ`IÃÛ;(Ý ¶ÖS•$µ®ú{ìCÀYã|œÀßúd§$I’Ô?±x93_ª»I’$ÍLMÃ+ñ»À„áŽ÷'™ù»SÙ!"oàh˜å­t§kǰ:HéÚÒlÙlÝ2so«‹ˆE”5V§«å™ù|ÝEHnqpcõë:à¶Ì–™/Õ]Ètg×–cìî¢ê®’™«k®G’$I’$õPDœü"åFñà&ç“$õKD,^Oé´2•yØÀZ`•ÜI’$iPµ^yuçˆO,íZEݵ›²LÐL{½vltm¢ê¬<™‡ê-I’$I’$õCDœ|˜co÷;µ$©×"b.ðy-î²X <™™#=+L’$IꃎÂ+ðj–OŸNéFQ]°øð§™ùJÝÅÌÚµå)à”ÀÊÿËÌí5×#I’$I’ú¬Z¢ã—)æŒg#e¡]ý«JÒL×W5²X¬ÉÌ=ý©J’$I꽎Ã+¯(âDàÿ8½+ºmÀgÏB˜^º¶œ,oØVŒùý„>—v¸ø¿”VÀO÷ùü’$I«ºÑwqf®­»I’:¯ÞÌš`ÈAàÎÌ\Ó¿ª$Í4q&ð+cÞ> ¬£, ´©ÿUI’$I½×µðÊ«ŒX| ø š'Ä»é àëÀ}f°EÄRŽ·\ü}&~ú©›V7ßîÏ̃}8§$õMDÌuI4IÝSnð-¥t°ûiÍ%I’Ô±ˆX¼XÔdØzàöÌÜןª$Í4ñëÀÉÀJ—•µÎSJ’$iØu=¼rÌÁ#V7ïÞE™Øî†ÝÀÀ÷ïÛ-c¸EÄ<ÊÒC?–ôñÔ{(]Yn¡´~¼ç–¤®‹ˆùÀ¯QžÖºßõ°%µ£º©÷VŽ •™[ê©J’¤î©̺ž21‘½”ËSý©JÒLR]sïÏÌ—ë®E’$Iê—ž†WŽ9QÄlàM”0Ë¥À” ï3€eì¶x¡a{Š$¸×¤ù̧RÚe~±Æ2ž£ ²P&¨üò(i DÄ{Kª__¾—™Ûj,IÒ‰ˆS(V.˜`È.àøº$iXDÄUÀuÀÜ&ÃîÉ̽ý©JÒts€•ÀžÌ|¦ær$I’¤Ò·ðJÓ"JgÓ)A–YTa•Ìhôw™yWª’$I’Ÿá ¤ˆx˜rSeºy8˧­$MG±x'ÍoFoîÍÌçúS•¤é$"ÎÞÇäVS–PüqfìqY’$M1x3eN"€5™yK½UIê‡j±«)ËiÎoa—ýÀW2s¤§…I’$ICb²Iiiºú𵺋Ç­W$MW™ùDDlÞœ5Á°ÓFij”ËK}+PÒt°hv-“À*à‡™¹§?%I’4}T7¡ï‰ˆ5À[(Ý % ©²jçQB+çsüÒ@yx”æ×Ö’$I’ØyE)"æ(7Y§“fæ7ë.B’š‰2ûöà4ŸxKàqàîÌÜßÚ$Õ/"®cüwOQBmÛú\’$I’T‹ˆø pN‹ÃG€'(˽ػª$I’¤ádç ¤Ì<ü~—½XÌnsÿ[»X‹$õDÕ!êÁˆØÜ,™`hçR–‘4sü„òdé¬ê÷ç(Vž¯¯$I’$©˜<¼² ø)ð˜~H’$Ií³óŠVDœ< Ìíò¡w_–7µ¸ßO3óê.×"I=³)7©_O ïuGf>Úߪ$Õ-"ÞMù;á¡ÌÜRw=’$ £ˆ˜]-C$išŠˆÀ'ÿ!ÐÀ#Àz——$I’:gç ¬ÌÜß~­Ë‡^ üKà•”umo¨¶w2q‡‚[º\‡$õ\5YþpD¬®¡,2z}° XUWm’ju›ð’$õÜ›#âlÊ2›ë.FÒñ2sD<\Y½u˜²¼îßeæËõU&I’$ ;¯h EÄ€[:B{KÝüêè:µ1x#GÃ,¯o8î ™é²A’ZDœ¼‰21÷½Ì\WsI’¦("æK2skݵH’¤ñU×ݧǓ²äÈý™y°Îº$/"NÞOù÷tUf¨¹$I’$i(^ÑÀ‹ˆ(7Z'³žÖ—j´øåÌüá8ç^ \¼ øŒëÚJ±$3wÔ]‡¤ÖDD+€Ë€K]™ùz«’$I‰ˆ·S–ïl´¸33×÷¿"IÍDΣK’$I½exE/"> ü÷†þØLy²iªÿ,3¿ØÆ¾’$I=§s4°r˜ÿgf>×ÿª$IR3q"enb¢±ORB,{úV”$I’$I53¼¢sg€³'šÀJàÀçùS<Õ½ÀÛ3sdª5JÒLSuX˜™{ë®E6Uç·•Õ¶¬ÉÐu™ysª’$I­ŠˆsEM†îuîNj_5ox°537Õ]$I’¤‰^ÑPˆˆü»†~!3;"®þ 8¯ÅSl^—™›Û­Q’f’ˆ¸ x7ð4ð(ð¬×Rû"b¥»ÊJàÌw;|Õ™$IÓOuCýg×ÑdèóÀí™ùJ_ “†DD,¤,Íu5°Ø˜™]oU’$I’š1¼¢¡§(_F›Ù¬ÈÌq ðß(O;5sxgfÞÓy¥’4üª®+¿Î±!v«¼‘.µ."®® VšÝØ+)á±{2s{/j“$I‹ˆ3ëS› ÊÌý})LPqð:J·•9c>þvfnéU’$I’ZaxEC#"þ+ð‰†þNf~®Úgð¯ßgâBŸÉÌÏv§JI~±xÏž¢tcÙàuˆÔ\Düeò½U¯Ok2sWoª’$IÝTÍM\¼˜ÝdèAàÇÀßz-+"Î~†Ò­pÖÃÖgæMý«J’$IÒT^ÑЈˆ×?iaè“ÀÊÌ<Ò°ï{oql—(Odüj÷ª”¤áVu]ùÀÉ- ßA鯲Ún,Òø"â\à'¶X <ž™/ö¾*I’Ô ±ŒÒ…ey“aOeæwûT’4­EÄbàòj[ÒânßÈÌm½«J’$IR» ¯h¨DÄ]Àu- ýù±OZDÄÀ_¯­ÞZ¼13÷t·JI^±x;p1ÍŸmtXO¹ùþlfêMuÒà‰ˆÙÀ§€¹c>:@ ä>lJ/ê%I % ÎUÀ[ùc>Nà›Þx×Ló€K(•fA¯±6?¢ÀzQš$I’¤^ÑP‰ˆR(“¹53ogÿÀ—€¯Ï̵].Q’f„êïÓ+(ïc»Z5³øŠ×'1˜“™û;8Æ€ €ÃÀ3”ežÎÌ‘®)I’¦ˆ8xå&ý¨Ç2óöšJ’¦…ˆøàü)ìò ð£ÌÜÔ“‚$I’$uá •êéäõÀy- ¿23WOpœó2óÙ®'I3TD¬ „XZ鯲&3oé}URoTKgœK¹Y<’™÷tp̳9”+V$IšA"âLJ–Ó¯¹Ü¦fºˆ¸ ¸q’aIéìù£Ì|©÷UI’$IêÃ+:ñ/€ÿÐÂÐÿ’™ÿ¨×õH’ŠˆXHiíü3ÀÒ †}73Ÿê_URûª ÊÉÀ”J§§Q‚&^ÎÌoõ¹ üqï«’$ª&Ÿž«º±\F ±ìê$¸''›3óp7j•\ ¼­ƒýÏÆ]®P’$©×"b)p(3÷Ô]‹Ô«Å”ÀÊ“~ÿ“$I’†ƒW4”"â `U CŸ.ò)Iª_DÐÉuID\¼¶Pºp=lñïyu*"–js÷Ê̺X’$IRË"â”0íZ`Ufnª¹$Í@Õà 'gæÝu×#I’$iz±óІRf®ŽˆÛ€wM2ô<àÀÿê}U’¤fº¨=§ú9X^moF"b°Ø luù–™'"™™ûÚ<Ä‹S¿ƒžÚlÈÌmžW’$©#U‡Â ª_/.ˆ”6V/Eĉ”ÀÊ%ÀÙ@Tï?ìŸ=I’$Iì¼¢¡ï¾ÛÂл2óí=.G’ÔCÕ|¿5…]öRY€(ÝYöö¢6õGDœ,–V?_Ï~œ™÷vpŽËÆùhåÏÑ蟧­™¹¿ÝóH’$uSD¼ ¸r‚“¶] ¬·c¡º!"–p4°ræÃîÌÌGúW•$I’¤éÎÎ+f7OO2îmqµ_˜%i ­˜âøEÀùÕp?ðPëQDÄbJ€d¼€ÊìIv_Úáé·R®ŸƒO[;èæ"I’ÔSU÷¹Ëš ¡t¥=8Sº±líG}U‡Ÿ‹«í´v¹p.N’$IÒ« ¯hhe摈ø"ðÙ†ÿ6ðÉ—$Iê¤,ër*Uê)rr~pÜ@YªK:<÷-™y¤ÃcH’$õÓà)J `²ëäùÀÕÀÕñ °X—™S]>Q3D,¿XIù.6gGÄ";`J’$Iå²AjÕ—è”ešÙœ“™/õ¾*IR¯DÄ|J–Ñ­Õ Ô/·Û=#"–g;Àžô xõÿÆló2óŽùnàŠ6w?œ™_j÷Ü’$Iƒ*"N¢\C],žÂ®k3ó{½©Jƒ.">ÁÔþ<ŒP–ªz’Ž:ÔõÂ$I’$ $;¯h¨eæÎˆøðéI†.~ øƒž%Iê™Ì<@yBt=@D,Φ¬³~:på‰ÒF»:\öåຆßG"b%Ȳ³áçN`Gfîïà\ÓBD,£üsÏæ5ü}½²4Ó¸ËøDăt0ÙÞæ~£ç^è2?’$i¦ÉÌ]Àƒñ p%Är1“Ï ®ïumhkk[wx†Xy&3ö²(I’$IƒÉÎ+zq ð“·ÇÝœŸ™‡{_•$©.±„b9ƒhÙ•™·tp¼ë«¦°ËAކZ^î¤ ÉõÌæh¤1P2ö½Ç2sg›ç¸x_e~53w·yîK€÷6r€ò¿íJÐeôçvJWœvN+I’4tª.y—WR®Ç¡t(4h qEÄiÀG&øøð4°x63GúV˜$I’¤dç ½Ì\73ùM¶åÀ/ßî}U’¤ºdæh°am—yÊÇÏ£,gt*¥Åv[ᕪõûJ·ÛÉ86RB4íèôÆ @[áJe/ãTvØUE’$©5U×ÂGG#âJˆå2J=€WÔLf¾Û€eÕ[û(Ýzžžë Û¢$I’¤ÈðŠfŠÏÓ<¼rø°º?åH’†ÈÉìÛnxdÔòö»|ÒTt#¼Ò–Ì|øóÏ/I’¤™ù2pwDÜCYvó"`K'ÇŒˆŸ¥,ß¹±:ÖÖ*0£áòp¥ëñ+’$I’ÚexE3Å­Ààò1ï¿üðŸ3³£IIÒÌs)ËÎ-®¶yS<ÄŽNßi€dªµ¶{î¤<¹§ÚöV?%I’4ÍdYcqSµuêJ¨áÜÑ7"b'e.æE`+%Ðbç¼>ˆˆ9ÀÒj[Òðz[fÞÑîq3óáîT(I’$i¦3¼¢!33"¾ü§ê­Sº±ü…-p%IíÊÌCÀwGˆ”‰àÑ0KãëÅ¿¤O'Wê ¯Œ¶?Xm^ös4¤²¯º "I’¤""æS–Ékôºø’†±»©‚,ÀË”å ·gæá>”:Tªpýx•¥LÜýpqª“$I’¤æ ¯h&ùð&àË™y_ÝÅH’†Ofî§7^ûYDœÈ±Á–¶Ÿh­‚™‡€¹M†l²½ÒÁ¹÷7µ»¿$I’†Þr Z{bµ]Øðހǻ]Ô°Šˆs€÷‹ÚØ}qDœiGbI’$Iu3¼¢#3÷«»IÒÌT5Ù]mÏwé°·G8¾óÉAà  O$I’T“Ý#b %(¾ŸÒ1pÕ1qÚ‰ˆyÀB`°73wµy¨ý´\µ0¼"I’$©V†W$I’Tf>Qw ’$IÒ86S:°œIYBhìšÍ´^¡,Iô–Æ7"b„*ÈÒäç!JÐ¥íîˆqeyž¨¶Y”`Ê ~ÎjØý‡ÀƒmžzG›ûº4"îv¹OI’$Iu2¼"I’$I’$©kªe&×U1 88 8½ÚNcü%0TËq¶kÁ8ïÍæèòDÍl¾ÝÁ¹¯ÎjsßñênIfŒˆ½LÞ}%]”pÐŽêçv`›ÁI’$Iu3¼"I’$I’$©g2óðRµ­ˆ€e ´œFYîgo‡§k;Bé–R—Nê†FYD ¨ìäØpÊè¶33G:<$I’$õ„áI’$I’$I}U5úØVmk»xè…ìÛix¥“î%†WîF€UXH’$I’ŠáI’$I’$IÃbeiœŒ¿,Q/µ^9H ž´âÌ—:Ù_’$I’êfxE’$I’$IÒPÈÌÛF_GÄlJˆeᘟ Æye©NlŽp4Är8@ Ôìöóz¿KùH’$IDÕ¢S’$I’$I’$I’$Iê»Yu I’$I’$I’$I’¤™ËðŠ$I’$I’$I’$I’jcxE’$I’$I’$I’$Iµ1¼"I’$I’$I’$I’¤Ú^‘$I’$I’$I’$IRm ¯H’$I’$I’$I’$©6ÿÌñÍåHï¾IEND®B`‚dipy-0.10.1/doc/_static/dipy.css000066400000000000000000000012011263041327500164050ustar00rootroot00000000000000@import url("./sphinxdoc.css"); body { background-color: #FFFFFF; } div.sphinxsidebar h4, div.sphinxsidebar h3 { background-color: #000000; } h1,h2,h3,h4,h5 { color: #000000; } h1 { margin-top: 10px; font-size: 160%; } h2 { font-size: 140%; } h3 { font-size: 120%; } h4 { font-size: 110%; } h5 { font-size: 90%; } h6 { font-size: 80%; } table { margin: 0 0 0 0; } div.footer { background-color: #000000; } div.body { background-color: white; } tt { background-color: transparent; } div.leftside { width: 614px; padding: 0px 3px 0px 0px; float: left; } div.rightside { float: right; } dipy-0.10.1/doc/_static/dipy_paper_logo.jpg000066400000000000000000001346301263041327500206210ustar00rootroot00000000000000ÿØÿàJFIF++ÿÛC   #,%!*!&4'*./121%6:60:,010ÿÛC  0  00000000000000000000000000000000000000000000000000ÿÀu "ÿÄÿÄY !1AQa"2q‘#B¡±ÑRUbr”Á$3‚’ðCSt“¢²467ÂÒáñ%5DTcs³E„£&duƒÓÿÄÿÄ6!1A¡QRa"2q‘ÑðB±á#Áñ3CbrÿÚ ? ¡5=¡´ÝN¥¾ÅMm|P¹²Ô87글v l­5qÊæ‘ÂæžÚY»WÑõ&²–ëe¡¥ŠŽŠ f -.Ï.¼Â¦X¸*ŠŸ‰dp³tÜü>ødŒ$o`=\Ü,k©öÅ[¨*l´-¾Zièb9câªïKÀvÆ6Û;¨+Geš–åDÊ®æ*VHÞ&¶y8\GM‡/Šê˜¸)Ôi|îDðòSÉßȤ¡NÜôæÙ{¦´ÖÒ÷u5N „— 2q³¹sR§²ýP+ã¤4‘qÈÒòñ0-hÎ7*Ç^šI¹-JÕESSVkn¿\®õ¶êJv=ô2wSÊ^mw†O?‚‘ºöS©­ô¨ARØÚ\æÃ&\ðø(xŠIÙÉ\•B£WQ) Ûa•íâdos|CrŽD…Ö{7­ÔphY£µYéª¨ËæÌÒUwnú¸è•êºQÌ—[ 4ÕIYÿ92JÏoЂ¾ÅÞŽ•“RÈÎ&pÈ8Ü3gÅIÔvMª ¡5Ͷã<ÇV­UÚwWEN9]˜„Ñ…$Û 9p÷a{'r<>NÍ`B†Ž”š6 ##Ä—ƒ>Áò+ÃænÒB؆xÜq;xsö›ù.]ÑÚÉ-ô C%Öàú‰ŽÙx|<‚¢u/¢ÙiÒ¶²Ý˜"‚*X;éØÒçžÚZOSðQ“7 r[7 ¿K¬27"&ŽÛàа?s•ÜZ³‰¸ËEÈÅ‚–³„•—(°€^‰ò %„ì?’yßC÷û 'ÜOG{@3ÞT]¢ÞÇ–p—nÌÀÎù˜hŽ‹c‡™÷,€Æ'Œ4ë ϽC;Z-MU9¡ªêi5]´RTÍ}SrwRq°¸e§Ç‘PkOÕÅA} ¬Ÿ=Õ=C$~N*j+Å¢ºnÒLë=¼WÖÒ2Õ -]DTw¬™‘Jæ¶AêìàÜì|Uƒ´CW¦ô45vþÔÈ"‰pÏFçàW7í_XÚõK­¦ÖfþŠ^_Þ3‡Ÿ1ò[}£k›F¡ÒtÖÛy˜Ï‘¹ÜlÀÀiuãà 'JQÙ»ÿg«*ñR¨ã.Jů±Û…UîŽåyºL*®ͧï ×Ú ƒvl¸ªïg¶ûqíJjêÉæ§©3@÷ȸrGû8Æ6UžÍõ³ô…t­šTPÕc½cNÒ99¾>îªøÍs -Ô]í4n}Ê öÇ ˜âNçwz£'žÕ£(NiBù––åö9§V3Œ­¿¯Ü·Y¨à¥Ö÷×Sµ­50SM hǯ봟ˆh*§uuê·µ¹­ÓÖ=Ô&i¡ûpÐq<ŒåhèÎÓ))ï7›ž ï%{£îÙ 8ƒÐ@oÀïÝV´þ¢¡ í!÷ÙÌž†j&“Õn]‡coŠˆaf³©ÆþΟr:ž"/#‹¶ºýNªªêi{h²ÃMQ41TÓF&dr¶\:\q±ø­Ú®´úŽÕIeDTÓDÞòJæ²O¬>ÓAÁøªî´Ö´uÚòÛ´6I#¢Š6–H8 ˆ{ÉîjÁ«õÎŽÔ6Îõô’ºå@§t‘(ŽAæÆ”á*rq¾–dJ¬'ÅKËÆ¯¤‚ºõ¦aªk_®|œ.-…ä}à‚‰í (jn”í›[?ÝFÚv¿„¸äúçðø*®¾í&†âÛTú}òŠº ®ÿëcÀ#€´<ç·Y¬4­†ž§TRKMY xxx^ï<0nÜøáQ `£&µÙ]ýtëS›”S\¹éõDö¢»Ø®ñØã§»Ñ×WÓWÓ9†7'zÀ8æ7X»bÕ·=7OA¢AµEî|Ü!Å¡¸ÀÛª§_õÍŽ{Ū;5ª*;}TsK;akd4ì {ÎJÔígW[5T–çZ̤S¶@þñœ<ÈÇ஥…}¤3GMw)©ˆY'–Zé±cìÏ^Ð Ú]GRêzš™Ÿ1ªá-l…Ã%£Õ#Ç’Ÿ¶X+c¥¨—FkI†SÄPESC¼8³·ÉP;;ÖÖ»M®{.¢¢QL]Ã3XZ=f‘Ïcub¶ë- £©j_¦"©ªž§ÌõÆHÎsù úeEz3S—g¯¢iý‰£V. <–Ÿ&¾ç'ºEQή*Ö†T²g‰ZÁÙ9Ç–Wlì‡þÌêû•ð®%r¬’ãq©­ŸíD®•Àrœátm®ìö5®¸Ïé/|¤pG‘ë ·[1œè¤–·F\$ã ­·¥™nÒÕóZûŠº›jz)ÂFpAv ÁØ•þé|¡¹ µd•n‚Vp:LddvÊ­C®¬ðö\í<ó?§Wô~¯'üV¯dºÊÕ¥iî º³Pö9Û8¶çñX燓§QåÕ½>¦¨×Š©OÚÑ-Jf¢hf¡¹µ ŠÉ€ ã+C¢Û¼TGYx®©‡=ÜõJÌóÜHüV¢ö£î«žL½æPލRrB€B „„!H! žœý[¿d‚±ÌÞOÝz¥Ýïoé0ãÞ7N f6?àW<Îÿi‰3Éy Ðäº!VÔ0FãõöO’ÕÆè´‚PÕÄ^VHBòÒZFzž«]7wõ‘ïÿwȬÁÂvw¬ÚFûcÇÍeŠVœµÃgs‘U]§sE”•ˆ´Âج¥0ž6eÑGÃÈ­`­M=Q§f<%„Á^øx†B•ÌhLŒ$¤äß³]ªm5MššW´a®ÆÝp¯QÛÝ=÷‘Â)öœþ‘#ž>*ƒi·Ët¸CGÎà¸òcz¸ùºèºŽñHÛ•’ÓT÷Åäd½ûåñPd:7lpVv²g³‰‘c}‚åÂÍ4Ëó^é ‚¥ÔÎá%À½ÇÍmzW;ïâ¡ê_'âo 'dGPqîV:wÔ­NÚ•ç;«–±P\¨ŒuEŽ•ûœ»ƒ¡ÆîõÞ9 ¯úN®Ûl»µõÕ ˆ=œÏÅzÂgwWˈöeÖÇ=BóYGÀÞöݤr+ 5At}Ԝٻ û>^åe“Õ^ÞÌŒU6â̺™#zgbUë³*gÖÙn”<8ù‚«Œ¥eUæŒpžã¦ÇUj숫k)LÒ²B&àã ŒDÛ¤üQej5\Îyª¶j§ÁâÅ®s†ßyV M²’Úñ4Îe]HÜß«g˜™óR:È>ƒTWÑ·ŒB^$ Ä2£à‚¶ f9Þg>¬¢ª¡—º®¥ž–B8ƒ&Ìv“¥hu]´9¾.nñÏæ?ÿbgÿñòþXV:ôã4µnÌÛú+TpoK\â4v›•|FJueT`ð—AÞðÈ ?ù7~ýGsþOÉvÀ¿ê­_úÙÿ…«ô­CMp©§‹KË+!™ñµá’zÀ8€yu™bêv’§§oR#…§ÙÆs“×ÐãÕV«$‘GWo«§|dž6˘^|ߘäŠÛMÊ‚6É_n¬¥Ç„:xÀO†Hç±WmA«+µ.¬Ó¬¸Û ¾Jj¸ÈiâÁÒ7|ÝWù@ÕjõæÿøÞ¬ýLÔá -dqúx8ÎQ{b†Ù_pâ45Ua˜â0Bé8sã²QÛkå¬uT5Oªgµaq‘¾öã!uù=Syýø¿/:[þÝ®ÿ»/ü,Q<[Œç{ªâU(BW÷ŽgþMß¿QÜÿ„“ÿ Ó¬¡¬¡G]I=+ÈÈlѹ„q ¹ö‹Ú4úFû ¾*ª%3gâ{È —=¸ÿwïRuÓQk.Î$®®¥ÇQJù€“s›œ8xÎ|KR*3œ=—êZðtÛq„µGÎmiy kKœN$•2Í!¨ßMé ²W±œ÷'8÷sû—Jì7LÓGl~£­c4Žs)˹DÆìç{ÉÈ÷4ê»i§Šòøb¶ºK{$,ï¸ýwqÄ/0“ÅTu(ÆöÜ®jj u¥kìqÉ#|Otr±Ì{Ik†>t[pÙ®³ÒЍ-•²Ó\&e;ÜÂ3Ä6Áù.ÅÛŸ¢»i¨¨˜ÑQ[!‘»w±;üHÈ!IhûƒýR§þ)/þ%R+[Ù’°_åtÛås…QZnUñ™hmÕ•QƒÂ_{AðÈ÷ ZX¤†WE,oŽV;…ÌsHsHèAÜÜ;ÿªëÎÿñÆ«½·é¿E»ÓßéYõUŽls㤀l~-rî8Ë×tdŽe…µU3VZ.t0÷Õ¶ÚÊh‰áš±¹ðÉ^à°Þj!dÔö‹„±{ãàºì³ÆÉ£†B8¥á®ãä•xƒŒc8ÇqO¥)FOcäØ š¦fÃO“Jó†²6—9ÇÈ ÖäÖ̺ií¢`ËžúWµ­$‘€¯Ýšé³MÚ­tiîíG4Ÿ2Ï›\OÁt½oâÊ;¼ÖYÒçS+ØkøƒOû§ä»Åc; (¥Œ6¶‹“v>_¡·WÜ …MYg´ ‰Òpûð×ù9~ýGsþOü*âu[û?¸Ý)ªèS+ŸÜ½¢N1Ä›®Ó¤5 Ôšm·vÓpã î‹ø½’G?‚犫EÝFññ¹Õ 5:ªÎ^×ó›¬×jTÕÚ«©áaRKLö4dãrF5žªÍs§£–J›md0·q,”ïk9í¹Ý\µjMÔ6»CmN§39£¼3qc…àòÇ’¾öŽsÙ¤¹êÊ|ÿ}Š%‰©R6mÛø&8zrRÉ+¤žàŠYålPFùd~Íc\\|©‰´ž¡§¦ô‰lµÍ‹ÏrIð7%×{5°Pi="ëýÁ­ô™¡5HFK"ܵ­ó#ñ' BÏÛ%=eæ:zËw£QLðÁ7y“NÎwLx¤±u%'ØÆén#…§®ÖVlâîÖõ®Ét»-–úš¬stq’Ñï<—Cí^ݧ«®¶Êë]mUCiêýF‰þ°Ëäû—GÔRWi½4Æé;C*šÆÓ´5›äànã÷9¨Ç*Ö^<„piÊYž‹Àùâ¶×u±ÎÓq ¨¥ÎýŒ†»ÈE)ãžêß÷Ø?çÇs±IoÖÔ’ÐTËÅ´æžB<œÝ¶?xÂãtu,‚gÄçqÓ¼‘Ÿ.…]J¤ê'ž6kèþ„)´£+§õFzi97bU«[JiÝÄÝâw²|<–j˜ /À9iݤu =$Í‘†)‡NÄ+omQËŽoe‘åéŽÁ[5ôn¥p#Ö‰ÞË¿‘ZŠäÔ•Ñ™§fev2†F÷ÈÖ1¥ÎqÀª÷LÇË+c‰¥ïqÀhê§XØ­Œ1ÁÃ-iY'6Gä<Õrž]l)öš³Õ,m´ÒÉþ‘8úÂÓëþˆ=ãⵦ¸¼4Ç sÌ7üýëNiÜ÷¸r]Ô•±l¶V\E$%Á¾ÓÎÍo¼ª²¥íLÒ¤ýØ43wóÇñ5Ïqõ ØçÍIVV:6'FcÈϪy-@Ûm¯ˆOZÙê°Fax>KBk¼rFØÝå ;øx*ògwKBÎÑAY½I ˜ã¯¢t¬ÞXúþóPØ;l¥]-[è›Ü¶6A Û»vTcã!Øq ÷«i«]Uw³E·DÚâ}º®ñVÎñ”îCGHFr|€ÝGÝ*ašg•ç‘fØø-ë&£¢¡Ó_FT¶XÞj7xÁœ‚|¨õ¹¥Â†–IevÆIÖ—5•çÎäÑ¡8äQ¹k¿ÝíO࣭šϵýf{NËE{ß9tðB ŽK¢$U]½©Î}Í©.gXwÚÅÅò+.kéé[&Ë]븎CÈx«fÔúŒ8»X_êõ8þKjù¥ŸOn¥®ˆ2ZY˜×ª‘°?Ÿ½fÑô:ÖOC¦¯/#Ù¼$sñ9 $êÆTݹ›#M©¢{´XYC5=Õ´l—-îß3ý–ì’©꺯V*É\GÙ…¬o–v]ªæÚ‹C1Š3â#Ê~̇â7Y*AØ´Š•8x“(Uð4Û!`ã<ú/q¸½ìq;ñÅg}š¼îØxúÒ“(ê`sDÐHÌ8ÚTæ‹ÙœežÍhG®Øýk¬ÿSwüm\á[{0ÔôZR÷=mÆ9äŽZs´ž z‘à¸ÅEÎŒ£ÎpÒQ«-Ž­oÔƒ´»®¬p1Uµ’S‡~Ÿv8›ñî*Jñk†ÍÙõ΂—úˆ©fà£H$†WÖz’;¶²}òÓßA‡FøŒ€5Í}‰êöïÚÕžç¦j¨ŸIXʺšgDpÆð–ãŸqŸ%åTÂTY%áŠ=Hb ó©?|#ØýU«ÿ[?ðµFÜ»j}Ê®Y#£Îøx½/\.#8àòPݘëûV”²ÏGq†®I$œÈ ,iÀHðVïùçÓŸü­Ëý“?ñ)©F]´å*y“õ±êDzŒUL­Þí«ª×–›¤”ͤKO`—fËœçÅtnßb{ô$Œis"­iydAnÞ;b´RѺ+ÒÏŒ0ÊÁmóÀ9>í—>ì÷SSéýVë½ØO;_æ6‚ç=Äî@ç• •Z­YF×VH—R>Κ•ì÷;´ÕúsOÝ£¤½Ñ>z‡ÀÙZæÀ×ú…ÎdŸŸšñ­‰Ô›OU`ªtTï§ïƒÀ;Æ7röG"6ðÇ%É{OÔÔZ¯PA_nŽx⎕°3@’ïÁáp¬úYÕi éÈý"Ž ú à’98…l¯dãK}Ì´qÕR«¶Ä]U-ÎKtиUÇ)„Å˳Œæ»Þªa±öBúJ² Ûâ¥>oák?þ I½®éW4T>š´Nî]ðw/Šç}¢ëÙõs㧆Ko„—62rç»ôù*Ú­‰œ¡•-YÚt°ñ“Œ®ÙÖ;2–8{3 šaÅpH÷Œg 9Ä­})®´­Þñ ®•ÔµR´ð@Öq`gT4Ïi{V†ŽÉQkª[‘1,˸±¿zø*’¹ÇdÔ–ëŒís⥙¯{X2KyyáV°nn£šw»±cŨ*j-z—ŽÔhjé»J¶OSRêˆjd‰Ð;°`ÇŸÇ}×C×W/¢®úfrî>áÜ<ù=…¿‰ ˜ö­­:Žëe­¡Š­ž/¢V4e¼M;aÇ}ŠÉÚŽ½¶ê»m¨êá–ž£¾.™oÙ cï’§°©>ÉJ;&˜í©Ã´q|ÓGTšŠ n Ôoáü ‘Äsú¶ü‚‚†WÏØ›¦”åò[Þ÷I%UuŸjWÍûe1ÖT6g= 0rìsÌc—"±Sö…h³q§g¥ŠCx8½üYÇÁS5\©ÉkuôE’ÄRÌÒzYýY!ÿ'û>× Ìð¥ˆãÜçÝW>Ÿ¼RkË•ò¦¦™ôU±÷B&—q´7Û=z•DÓݤY´þ‰ŽÕCOYéñÀï]Ìo™Û“ž,àáÈ*u¸ÔtÕpM%â²fFö¹Ì|™î½]<=zÕ'-¯¦¾P¯F”!í®ž$÷naoÕm®‰¸Šáÿî7g}Ü'æ¯ýÿÙ´¿?üER»K×v-[eŠž’ Øêà”I¥¡¸#>_%›AögÓÚE–šØ+P)â‰-õ‰#rá⦥:³ÂÆ:¦!:pÄÊIèÑÌßÿHwïŸÅ}ÚYÇfþå?ül_? ¥Ý ³÷®©«{B´ß´TÖª8*Ù8l#21¡¾«šO'´b©ÊS¦â¶zô(ÃN1…DÞëî\n?RvNa·àÉ=8:¹˜%¾ü´…Ál–Éî׊{e;O<‚<ìo‚HðUÛBëÙtµ)†¦UP9Ù,iã'«s÷…qkºZ(ÝQ 5c§xÝ¢µÇÞìþk=>Û š…Óz2ùöUòÊR³[”]MÙ­e‘öø[]MSQpŸÑâ`›àœ’zmŠ´?Tk AJÍOGMp¥{»¨ådßX09ƒ·,ŒíÍPõ޲®Ôר®z+iHôXØsÝsÅž®È ¯Ö¾×lÕöáK©í¯28bN›,Oóá'ov몰¬áÒ9¼|~G4çIJ]œ²øx›%ÎÉÚNŸœÍBçB×÷2G0LvË\˜Ü/ŸotM·^«èXâöÒÔIqêâ3÷.±sírÍn·:—KÛ#≱DÃãÂÿrãÓË$óI4Î/’G¹Ç™$ä•f”àäÚ´^É•ã*Bj);¾l·JÚ˜ýcë âqü9#tRAiÜ-H ƒ‚9`¢·ªrZðʨ‡®Û+dýyS–u—™ŽŽxæŒÃP8˜íæ´êí3ÇRØéØfl‡Ô-ù­±oîž{É@Ç@¥¶`ϪcœZáÃóT¹åÖ%ýšš´ˆÁvÈÝ ¨#†iÆá¿°ßæV‘/ÝÜ# Ô]šqPxî:}‘æ´æ¹2‘Í»Cc69~ïæº‹Í¶¬‰Z+]˜ÒR[šr%ò–ÒÆ}sûçì½kW]êë#‡)‡(!õZ=ýJâ.%Î$’rIÜ’²Gº±A-e«(í´ŽˆòZÙy^äà&ÆŒn¬+µÝ‰‹$¦K\Ôî†ÉŸ˜Z•š®ìïœ ¬–8jŸG·?½=¡÷H±ÉË>Óf¸ëN&Ë–æ0a¬ÃBܶÁÀÖ¸ý¥¡Pã5l„}§ŸÅM°wp<Ÿóqýë©»E#šIJnDt†J—Ÿ<, ¼åÄø”–„¬¬d“»l„!ɹE\è}I tx[óºgGÇšðFpáT"Ø£«u;±íFy´ª§Oš4S«of[XÐq$E§öOò+#gçÚ ÷Œ,³ÓGWš|‘Q²1Ѹ±ã(J2&Rœ7Õ-`;Æüùƒ”¤‡Œaà;î*0’Ù§¨‘§ÜCö·RàÖ¨*©èÑéô H> fÛg¨ª¡Í ˆYË%ï–¡±÷\Y?dþjÃ<­§ˆAõ±º¦¥YGÙEð£ {FÎf1Œ£¦c6÷¥$­´ÛÌÎÏ.Ìk%®ˆÏRe“f7|­mA W ÁÝNÁÝŽ3…Lmu·2ùf³’ß‘\sœ÷¹ï9q9%xÆVó­Ò‡–< ÕŽ‰Ü.io¼-ÊIìy²„–²1’GT.Ê{‹ÚÂð½3gd­Äá‡$²L0ÿzƈ5gc5?P³SF.ü–:HË߀¶H»ÍU'ÈÑMh›5êÞxÈ YmNÀ󱘸’º‹IÎ-³ë¡hÚž=! 3°àÊÙã8 ÿ5ÏŠ¸h)8hª8½˜åãÿt~JŒR½;—aªX¾2âé.ê+“YèãwûŽýÒŠžÝd¬š’1ÌîlwÂå³Ö=ÕNæç¼—ÅYF­‚çb–Ž©ýÄœ qsã’ò'FZ4zêk[•ë~ ’VBÂ’_‚îñ>k}õpÆAŠ.ì{åÜ·ßç…§éMC§0½tnÏ Ž2<¿%žçÞCPøD$áž©Ï?æV¹B9¬Šc'–ìÄk.!Íg«ÅÂÆ“œxŸ‚°ÆE=+^–¬ÔðX­m¨¸„»~«­ÿ`ÿÉ}Zšw¬¼½GvÇÌ|£ô%Ûõ]oðïü‘ô%Ûõ]oðïü—ÕÈNõ——¨îØù”¾„»~«­þÿ’_B]¿UÖÿ°侬‘íŽ7=ä5­$ô ‚n w¬¼½GvÇÌ|¥ô%Ûû®·øwþHúíú®·øwþKêܦë//QÝ«Ì|£ô%Ûõ]oðïü“úíú®·øwþKêÄÓ½eåê;¶>cå/¡.ߪë‡ä—ЗoÕu¿ìù/«ë//Qݱó)} výW[ü;ÿ$¾„»~«­ÿ`ÿÉ}ZFËÌM{A?Œ—1Ð'zËËÔwl|ÇÊ¿B]¿UÖÿÿÉ/¡.ߪë‡ä¾­M;Ö^^£»cæ>Qúíú®·ýƒÿ$þ„»~«­þÿ’úµ,iÞ²òõÚ¼ÇÊ_B]¿UÖÿÿÉB]¿UÖÿ°ä¾­4ïYyzŽí˜ùGèK·êºßöü“úíú®·øwþKêÄÓ½eåê;¶>cå¡.ߪëØ?òOèK·êºßáßù/«Pë//Qݱó)} výW[ü;ÿ$} výY[ü;ÿ%õj½eåê;¶>cå/¡.ß«+‡äd»~¬­þÿ’úµ Þ²òõÚ¼ÇÊ‚ÉuýY[ü;ÿ%µKf¸¶9C­õ€¹¸Pþ%õ >''ûz.—î>aŠÓqu<‘¾ßX8›·Ô?ŸÉGý výY[ü;ÿ%õrq9/ÛÔ>Ÿî>Tm–íÖ×[ü;ÿ%äÙ.ß«+‡ä¾­IOzKËÔŽî^cå/¡.ß«+‡äŸÐ—oÕ•¿Ã¿ò_V¡;Ö^^¤wl|ÇÊ_B]¿VVÿÿÉg¡¶^©*ãšuk\×sôwãs·%õ2ñFÕ²’¸rNêGÏU¶¹§x‘”Õ#‹w7¸~ßrÓu5Â7ðS[«Þ¯4ïÉû—ÒT,s_·©¡á}O ¥­1¾ èk 2Žáÿ’ƒ­Ó×* `¢«š?²æÀþ^{/©»qwQêq<š³gÊB]VVÿÿÉeŠËtÕ¶°þ‡þKêc·4×oŠIþÞ¥k‡¤ï˜ùeÖkžv¶ÖÿnÿÉy6k©ÿôÚßáßù/ªç//R^?Ü|½oµÜ`¬ŠG[«@èÏåòYźàÚÆ¿Ð+ivþŽÿ‡EôÒ/ˆ¶ï—©ÚÁÙ[7CåËušà*»ÉíÕkwÞûýËz¦Š½Ô3ÐV¼òôwçð_J¡Câ.Nî=Dpyc•HùGè[¯êºïáßù#è[¯êºïáßù/«¬ïYyz”÷l|ÇÊ?BÝU×ÿÉBÝU×ÿÉ}Zšw¬¼½GvÇÌ|£ô-×õ]wðïü‘ô-Ûõ]wðïü—ÕÈNõ——¨îØù•émךgñGl­ ói¦~Ü·*-5u1‡}ZÇxwå¿rúq —Ä›wËÔ²8«.m>ÊN²]Zâ²µÞbÿ’qÙ®¼c6ÊÐ3ÏÑßù/ªÓ]w¤¼½N;º7¾cçzt´0¶’©òŸ wþIÑQÕÏPçTÒÕF<]Nñü—ÐèT~ºúåêiX{séýœ¡ÕPÕ6ž–ЍÂî)=ø'tZ2Zäs+é*–& wä;侊B…¶ÑëýðíîúgÌRÒ\L„6Ópàè{‡Ÿ¸…èQ\ÜÜzn<LÿÉ}4š³¼?úõ+ý#ót>^}ž­ç×´ÖâÊwä±>Á_ŒÇEZWe¦ê½²·øgþKqöšÙ ÇÑõßêïü—Óˆ]>$ßíês´ÍÐùMöK qŲ´ÿûwþJÓ¦(j(ôýQšš¦:‡K´NüDxòò_A¤¢§sŽW¢žS–dÏœ„wVÎ{š:¶ 9æ™ûøôZÑ\Üòc·W†òÑßœ|—Ó¨P±öý½NÞ¿Ü|Ël¥»Ò9îe|!Ã…Ü0<>JnÉ­ï’ç[l¬ª–!ý”S¼åý ¶Øy®þ…ÇfÞ=IŽÇ÷t>^¼Ç¨oUאָ·×:Grh¦xkƒF6 Kè[·êºïáßù/«’V®&⬠Q.¤îä|¯’äç5®·V´u&ÿ’Ë_l¹ÈðÈ­•½Û6¦~ÿrú‘ ;ÍÞùz“úkf>Qúíú®»øwþHúëú®»øwþKêä.»Ö^^§Û1ò›l×N¶ÊïáŸù#è{¨;[+¿‡侬IGzKËÔžî^cåqhº½²¸õgþI²Ír.ÖÚÐ3ÏÑßù/ªç//S¯Ð/7Cç4”¼2:’¡ÎãÑÞ’Õ«¢¹ÔÕ‚Û}`h?ü»÷û—ÓU® ïw¥¯ u–ý„Ò^a´hI>ˆB!4i&€„ “I&’h3“Ë ¡$ЀIôI„(›¶¦±ÚúJçMÎÁ…ùqò ”² u;jaã¶Z®5yö ¢áçÀKsË Pµ:²üû¤v¸é,ÖêÙÂÈj«]<‡lŒ²6ú»îäÝ5ÍcÔõ•0ÔÍ&®Ž8ài‘Â’ÐáÄÐðÒct™Î##p›ï4ï0õ-ô2i&§$25²Fæ‚ײ\# u!ÒP¹¤r[ä¡–°Å{š())n:K“ƒ›¼y ¹gvâ[×§‚›·iMÞÛOYWÂNÀñÒSŸg$;ÀùåpB¬G¡-PoISu¦9ÎYp˜þ.++4ÕlD˜55Ù£æ91ýæ”… º-ºª :†–«‡ìÕP[ÞXæázŽ»SBñu’š©‡œ´5€¡ ?iaB¬Õ¶ÛkÚÛÓ*mMqáUDDYðï–‰SpËÑ6H^Ù#xË\ÓBÐÎNqމ¡„! ãÖÀ>I¡B!4h'ÞšI !, &’¡$ЄBi ÒM! um5¾™Õ³ÇO 9¾G€¡»jÉI·dgIs}AÚÕ%<ކÉJjÜ?ÏK–·Þ7#ÌáP¯ZëPÞ»êé"‡ý»f<Èæ>%a©¥ #©ëPኚËÙ^»ý>ö;¥Òýi´‚n7jr>ä_Ýýʱ]Ú¶ž§$S¶®¬ŽF8°÷ˆ?râ@½ç,Äõhÿ¼yüõÜ»$HáŸÐÞCòØŽñ*ÝIu=HpjÿÒMô:Wl‘3=ÅŽB::J€ßÁ¥FËÛ]^q¢”Ú¨'ùÏã¥#qþÐ|ÿzó Àï¥ýظZ>š§õõ_îÂ`à´‡W÷:}±ÝòØaáñïÑó!lÇÛ4œ?Yd…ÇökGþ̱N¬!k¿jM׉ 7>*Cî 'ñE¯ãТX|/(?s­ÓöÍo'ú]²HGìT±ßŽÅjzj­Á®–x ý&ÿÀ\W ðòn<›ù,¦)$d>÷7zë¼+Eë¯Ëþ¼[+|ÿéô­®ñm»4ºÛ]N=¦Æð\ß{yŠÞ_2GNaà’ ^87Üg-ý×ÇÇ!Z´÷h×û+Ùs¾•¥ý‡pÌìÉö¾9ø-txœ'¤ÕŒõ8kJôÝýçØî)(-5«ìú¡´5<@eô“ Yý“ÏÞ2òõ#%%x»£Ëœ%–JÌI¤…ÑÈЄ “B!@4!B!@4!B!4¢M!@ &’M@Bü=­áqâÎàl=ëÑ8ñÝ4 iЄ„$@<ÂM$u@4#8ܨZÍSk‚©ÔI%}cyÓQ0Ìöþö6o½ÄÊñ<ðÓ·ŠyY|^àÑ÷ªôŒÕ7rGyŸ¦ÎÜ5.gÛ>^õî+GEES8î7ÄàÚš÷ŽyTì@Ù  ÚÊÖéL¾þñ88á ¼cOíK´lþÓ‚¸ßîì e]lô6($“ºc#i¯¨‘ûÖ†a¼D°U{E]ÒþêË-EÁò›­½Ïdv9ÔaïÖqphh'`s’TÆ›¼†¾¦ì!Óu™ðSÂöÔ½²Àòñ.¶þ«@À瀛·ÍK D³^5©wsNe•ÑÓúAwu#YƒÖhðç²ÜÔÁ§*mT4“SéºJˆeï.ô­#¾hilnsXîrî-ËE%MEᢢ¨ôªŠË—Õ¹òd89±0 ൠ ·§5o‰®lm;ànìc'Ü€çúNÙp¼êˆµæ£¥†V6jG]ñðž8ý^ \K@'×#e<í,$×2__!ôwÓFÞé²=¹•¼c‰À8p?õ Ê„1š ò1°WÞf©¥¦¦’–Š1`cñœøÈ hmÉHÒèËd ln3Kn˜Ç ÝêFÙ[Ã#dœœt<”ûåƒ/{Z<ÊÔžóm§k-l 3Úõ³ñ„•6”´SÓ²´ïtQÁ 0käs²Èž_9;áÄ¶ú[]i(!Ó±Îsco&ñ8¸ãÀd”4šÖÏžgOVàHÄ1sá¾8 ‰¶´0vŽ£mž qq3G ÷÷„|ÊѺ†Œ9í’@6á,-oÌŒš–ò,sÿzAø´î4qe¯lq7Ï \ӚͩÄâòèGÓÔ´45‚(ÀèÑ‘Yœó#}GÄOï·ù•³NÑÈÌ~?’’§îšßmÙóhü”ΪNéÂÝ‘0G(„I4nøË@xù·!gÌ«ÝR…°8çˆ5ÿ§Èû¶ÂÃ51;°‡îó’«µRßBÞÍ­Œ¤ñFLn=[¶?ŽV# Ù–¾0ày– ½»ýÙø/rÄX=Bb2$Ø;ù?$2¨°÷u1–ž„òùøþ*U÷Z‘§3Ä0µ¥§Äè–9§ú²<7ËHçêWyÒO¥lp¾Iú¨‚¨>2Ç6P ûÁÏPAê¾zÔÕ⎲',Ùh?k‡ßçÑvÝw³Û4 ²w]Ý5(¨²dlc nä´ìÉÆ7<׻®”§'¡æq(Þ1K{—*Ý6²¤–´GSNëu6××Mž€F]ÆAñÀVyá©…“SJÉ¢xË^Ç5ÃÈ…îFq–Ìñ% Gs"…ÙÈ!@ &„„!!@ &’¡@BI¤€GD !$!Є “BI@ ¤šK&„’ÇUSž®hà…ƒ.|Ž hd¨5%MâW³M[ý*™¹oÒîéË¿`né7êh úšˆi`|õ3G Lt’85­dìeÚ¶¢ñ!ƒGÛpø]p¨ÌTlK]ŒËÓflH,‘ép™•Zª±÷y›‚Úr8)#>-‹©óq%Ycc#cc¡ŒhÃZÑ€€ áÒÕýCz«®ÉɆœšXqáÂÓ’=î*rßAIm¥m5¾šhÊ8˜>äT×SR»†i@qû#sþ?òQóÞ+¢$œeÎhÈñ°ø %¥š8YÅ4Œ¾.pÅCÜõ 4áÑRƒ,ÄðµÜ9`>$õïÆ29¨k”œaâèé …ÄåÁ¥À“âG<1ᕳmÓâw‰x¸iH¤9Ûdæ!·jÙŸAB×QÇ0ãq¦cc`qÁqqoROS•=gÑÔ4<U¹ÕÓ0å®—8¦ÄœôæJž¦§†–!ÿdç¬g|ç8ÉØçjݾ®ô*¢Œ5ìys] Àù6ŽáÀ99ÁÆ@¾ƒžê!|30>9Z摱qÚ{y Õ÷ \tæFÒMÇž\CXà HÆyûº©¹QÔÁQ0•²JñÁNòì`z¬vÍà«v >ËŠèš[YCuikåcÌ{<‘Àö¡Í<ˆëïåȘmq§`¬²GP œÖÊZpÓë8Æ6w_d|hº6jùŸq‹¸‘×JX=%Œº&“Åh·#‡ˆÜ>€pi‘ ›ÞÜý!¨Ÿw /1uä”?:s$;C×ÐÚiM –x篗-tŒppƒów€éŒ•Ç3$Ò¹ÎqtŽ$½î9Á<ýçürÙyk]$„W>Ïóÿ{ÇdcÔäû_ùyÿê¾oˆy]ŸqƒÁÓÂBÑù¿ÏÍFù[xc8oWuqÿÀØ¢‚GóÄ׸z­nŹäwûG}Ï!¾9%EKÇ sÀ{†0Þ™äøéœ-ùÈ£Üñ‚K±íüÜG/Šs·³‰¨×²`•îÈqჾ¯9qÉ£Á¿Žäœg:“¼ÈÀé8YGªÁË÷òðVGT ‰8¾Û€sü½û·X¦s]Äçœ1»¸ÿñ÷)ŠksÊ“¹¤û«©²àÐÆ“»ŽrVìˆd‰®näï°'ðRšC³K†»"á[3­–FŸª<’§Í££hóèÝugdºV‰ÓÔVÈÍ;†> á5ë®êE7£<ÇŽP“[œ’žçõžÒ°?™YÝ’z‘ÓºBvÀhþK»Ûô­‚߃Ig¢ãn3sÿ¼r~õ,Æ5ácCG€R¸4[¼¤Câ’Z$|éGAvª~iìµe‚G~ S”Ú~÷ ²Õ|`sâÂî)+_£-Û+\N¢Ù#‹É§o‚e²Õ`~Œ\sIQU¬¦¢Ÿ¸¯ ›‡‚fº'pï¾ÛùlW}PÓOÉz¡Ž{tÞ‹x¡&Z*ö]ÕŽñk°ã¾3à”íxI—Sâ³r´Ò±Ç}¼gS%o!ÀüBÒ™Ž„Ï â-L?—⺕£OiÍkfm®ÐË}Í®t~‹˜$†vœ<¹Îþ¶v!CÞ»4»ÒIb¹šØÀ$AT<ƒ¶ã²O…Ö‚Í™}¥céÉåšÊþ¨æ•´ÑÕFÌ69;¿eÌÁÀðÁ<¾+*ÛW¢ºHÜF2ÀZ@ò=<÷ÝM]in4ˆo6æÁ)ØwÍ,â÷³¾­nê2–‘¡§ÇݺΥ:^ÌÑ{µEì½ ÚrÇzÔ1Á-j •ìyŒ‘œúÁ¥»`ÈÝv7¦ ·E]\Ð×DO£ª—¹pßµÇs˘\ŽÕ;mq–R=Ôl~x›†0ìóØŸ ¶Í\rîî)‰æ­§§CXÓ»øÿÒ™àêUÑÎÇn’åCÒÖÓ3÷¥hþkÓV¿ÖTíÙù®(*a>«Xìø4gðXjj!c p-ýá…w~TnÊŸR®é‚^ÿC½Á<5 ã‚VJÏÒcƒ‡Ü²/iëj)æï¨ª%†Aöâyk‡Ä+¥·´KÄ4ñE44õ% ã{ï2x·?º—¤×ùV^¦Jœ6¢ÿÍß¡ÕPª=}CV×6êC' ÁsÚáâOßncšö5ìps\29x¯NzuÖjnæ ´gIÚjǤ! â B€HB BB€HB¢èšB€HM$B€M„!&’¯ßu\45ŸEÚ©Ÿv¼¸dQÀà;±úR<ìÆû÷=@NÔO4ž¢VE`¹ï{ƒZÐ:’y*̺²ªêDZ>ÚûqpŸ1Q³¦CùÉ‚90x^)tmÒ¢*Ýg\ÚùXC›AN (£?ºwç«Á[Ö±¡¬­€µK£â©•šž©÷º±¸dÃџ؇Ù󓿬kZÐÖ€Ö€Øæyâ¼S<4yªÝv¢žIè1§‹lîxˆƒ÷ ,5tôís¦™Œ ØåÀcª‰«¼ÍP;»d2—œúøiÆ=çŸ" !uR™nÏ<»ƒ^ÐÜg;cßò[Æx„SK,{×<àã™ÃP hd"Y®Tõî“Ú- ØV£«©¤•Ì¡¤¤™ù 9¥"Lä ÁpÁÝhÜæ55L„ÉVÚ—´–¼¹€ÔþoÈò*ác²CCfSé]¯ Nù9<÷ò@GX´ÃD¦²àÀ$.ll Ë@Y¤‘‘FçÈàÆ4d¸œ{Û ž@kFI=[W^™;LΑ¹,®¦õTÖˬŠY8!‰§U<ð7ˆrÆ œpÐI܆7£im¼Ç]w1Õ\»Ñõ»ò§íl2ó¹>dZÉ¢nW—2Kˆú.‰ƒƒ„FÒ “–´äG’}§eçöv ¡Yl–û,.ŽßN#s÷’W)%>/yÝÇ~¥nË4P†™¤daÇ…¼N'Ád@ &„M$ÐÑ„ЀK›jf²ÒøËÄfj(ÆçÇ¡ë’é+—ëfzGj4&9ø_MHÒæcÑb1æ0êz‰ \ãÄî3ù~õѯ°Ã3$c¶`¼$’ݺӞXåÕT´b£[Ë4 ,Šš•Íssì’Xü%šß^ê]ISfm<4ñÒMÜÒŠVðxG‡|ÜòäNÊý ôšXÜâˆÜ<³Ô~+š\?çè#Àv3ëpÅÏ—RÞ£’èvìÉgƒÄZæÌg9 ã;sʤ›%.½ž75±zU^ÁÏêäÀq÷ñŸ’è Ÿiaÿ9——¶.í´ÔíhCí¼ôÉDZãò]Є !„!tM@B ¤€hB®j[Md.§„2zÐÎ75Ï᎞N‘ÛãÈ\îië½c–9(è¥`­áIHâm3O-¾ÓÏÙoÄá£+‹WÜ$­”ñ9ÜEä=ÜEÎ<ÜóöžzŸ†À^v+©{1Üö¸ x‡ž¦‘üüüÖz÷¬jªª½%’º¢©¹à©‘¡­‡Êd†~öïóo%X’Ijfsä{+ÏÞãÄG‰Éæyïï>DÝîÀù¯29­ih8hÝî|‡øþXð§RU´}m*è«AXö2<7hÛ¶Ú> ÆÞe—Drèøü–8½b&ѳà?Çøäºgf:#Ò»«ýî\J5ÐÈÖÆ€}øßî%aºU[lå*ŠòÝ‘ÐEà —qïžY?%1¢´Óµv¦e¾@ï£hñ5{†GÏ«#‘q{ƒ±È- Œì¤£’¤îq†9øavÞËôÑÓ:Rž †×ÕI«={Çgû# øÕzÜ:m>Ò[/äò±µ{(dŽì´EpÄÈ¡ccŽ6†±Œ `è´“_Fx`„!$šHŸD8×,ºéÍW êÏq†‚–äÖÃP*Z]LéÛ³ ¤{ÍÛŒuh€r¬6Cx©¨Ž–õ§*hÞ÷Š˜Ù 'ÎAÈ÷²wVšxjà}=T1Ï ƒ…ñÈÐæ¸xv*»I¥§±U²]1XièÜñß[j_nw1Ÿj7c'lƒ¶Ê—]= J¤g ²Jþ?óýßäXª)᪅ÐÔÄÉ¢xÙ#Cš}àªß³{-XsíÆ[dÎß08˜Ï½‡ly +ŠU)Bª´ÕÊaRtÝàìr§vczcˆŽåC#3̵ñ¸W—ßïEGe÷Lf:êYÿW.üZWTMb|7 ÿoViXúë™É(»3ºÍ+ÙVúZv7v k÷ß®Àñ B£²`)ÿ¢Ýßßoê¾2GA³²=ûû—KB˜ðì"Ddwœ$ƒ¶ä˦yãžvç ×Õ¨èÚî6çºõØAφ܎y õðpæÓIqÕ‘à 9˜T<²8˜òÆ;qeã“ xˆÜ’Áw«’¶ã%æå,Œiì"Ž7=Û264Œñ¿b=P}l`ã¥èý<,Ô‚jÃ],LážÄ,nxbgì‚NüÜI'šé]-Ka„I#…]ÅíĵNg|CÉý‘ñÉSÈB^¾‚’ãs_ML`ñÈÀàˆÏ#æ ¤ÓU¶ç™tÅÚJAÌÑÕæ¢ß3ÄÏìŸVd )ßå…ÊÐç·VéúŠ82kèIª§Çé8ÆÁïYmWZ Å#jíupÕÀþO‰áÃî[Š»qÑvºŠÇÜ-âKMÍÇ>™DCzzÍ9k¶ñaB©U]u.žÏºP²õih˪è›ÃQß%ðç×·g™Â±Ú®TWjëmµ1ÔÓJ2×°äÈùÚ„„!Šæ6gÝ{X½WH°BñZÞò!ç é­5:nÃ5t®hý\!Ü‹Ï,ù É÷xáDv]au¢ÂÙgñOTL²±îÜGÎ6mÀë”î¸}·½µÍ$µ…Í-qÛ|îŸ=¶U^Î(.ð\*in¶Ï Ì€º(Û,oÃâ~O7t#b²ö‰q}LÑSÂø{™ œf{ˆ1pŒãaË‘óãR4Ò;Gön*# ±Þ´MÒ¢nAØèÜŒù1m†JE5Ú&S×O!sݼÓOZ\Æ¿‰§=Û~ØûÕ¦ KOMHê:ø+mu =¢Jºw6"ìÄ£,둺ŽìÆÛÜPµçŽFEêÆéI/¦NÛsËÃu'¬gºBÃÜÔÒÓÑ–ûE®t¥Ø÷Œàl ß=Ò‘v¿Ö½í“¿š6Ç ÒrQ—Ö•·U]eíVª‚hê>‚—ŠŽæF*Àó‡øŸ\cÈn½éÍ%E{³Ð\¦©©…ÒHD/ qËŽÝàDxoîS7ÍXË-T´°Ûk+ã¡€O[4NoôxÎpHqçœ ”WIê=I5↖åQ-E5Ò¾¨CPØZÑ blÀÂïˆÍ8ß-ý4ëܲï ßSÔTÑYxö>ž66f¾"ì’Ñ‘ƒáà¥î:Ò kݾ×An’¾JøYSã–8Ác‰ÜNÀœ ð§î•Q[mÕUÒÇÄÈct . 3ÓOU¬ŒoœøWeåŒlm cCZ90ô€M$¡5Ž fž´:qÀê©IŽž7?äþË@.'Ày©µÂûTÔb稪)ᘨɥ`–d>òàîgšÏ‰«ÙSo™·‡ýEe·2µu¸>¶w½Ò½ìãsËÝíH÷{O?´qðË+IŽå³GOñþ<°:N2@>òÄù,"&œ¸ýî=?ò æ¥vî÷>抴vFgH[õQÿXá“û!bk[3øGõ1s'í×oÕ´ƒ<»¹Ýüº+Ó•’麋êáŒqÏ9å<|ÉäàB0rj1ÝŠ•c¹ÔvKòÄÇfú@ê[—¥×F~‹¥w®?ÓõQ톰ŧ#£c°j¤!ÃÅ­i'ï-^ã§.VÞÝO­‰–7›Úú/C“Êþ2/ÙkIñ!ÀóqMŽã‡‹¬Ä¸~éå÷câ±Ôq;ÖË^Üù—±ÖÕ²›Ã±7—×à¾YFöKsÛnÚ²sAYΥ״ѽ¼T6|UÔm±~~­¿ û˜W{TÄ,¦ß£…ÊvJ¼HjœìoÝòŒ{¸}oí•_a„¢¨ÒP>cWµ¨ä$ÒMj3‚„’h@$!„*ÅÇ\[ã«u¢ï5­ö£¤c?~Od=ñÕs)Æ;²ÈSGh¢Î“ˆh.q É=!¾v›{2º*PÒcbc=ùiëëû'àóUK–¢¼ÜÚæÜn•3Fÿj2þ쌹yÕx•(iv{48%z©JmE~~nu SÚ•šÌײ‰¹Ô4ãêœ|óø«žë-OwÔ3O%¶Jê:©”Å–²œmŒ:l]’NN?gšF=Swtµñ—Úé?¬Dw<›‘¿™ÿÍvú*JzXéhádD8Yc h÷.°ò­ˆJ¤‘Î2lt!ÒæÙ™BôO„ IЄ !„Ò@4!B!4i&€„ $„B€µÎ¾š×ožººA=; äyèÙTûœÎÔÚÂ+->l´Õ\^7MÎ<ÀÝîçɠ㨴õ¦¦ñw§PDæJm¶†AÿBˆÜáþ•Û’wÀ m'–|¼V 긨©Ý4¹!½¦]õ]1©w C²Üð°8ðÏ!ætë¨_u]D5ÇE¥S˜ä€Á!»úÏkšà7ÈpÂЬ½SK=Dub&c¢–Ÿ¾1Ç.â/`êÐIéÓˆƒê·ësªÚÖZs•Ž÷õ|Ž.<¹gÔ` ìNê`»M¥éßm¯¦®6Ø_ÕO`‰ÅÓÇÆÇ<–’mêØGÞb´2Û­×룩›sQC .Š'±æ0ÂZ7`É%Û”N¸Cpé*ÙÚÈ_ qI(icÞpdsZ×gprHÂË-Æz~îm\Æ:8¡s[RÒC"ŒÉû.vpTƒÝM¾Á=ξši®†¤Ç$òÈîí˜cäpkIËŽ%<geãP;K‹K=2šzz i¥ª|PÄ÷qÆÌ=çcÆ&p2rHáb«®¨§¨†Zý)r|ta±Á™3 „ðG²H'=|Öµ }£ÓÓUÚLïaàŽI%xspXw­‘Ý´ H·*1FûÑ­¸ÔTDÉ^ê¦TRÅÃÞØKÁÇqîÁg|åt ],tTPà ŽÇä¨tó[ÛW,Öøê u[Ä“™_É û̸#;ƒ’7ð šNúž)sAÛ—ÁHdâš™òàÜã‰ÝÍr½U|T6ž̳>Q´_çç=î#sÔ™ ç¬ntÌ´ï“…ÌxϰIb|qæ6É—2´µ—A)ãt•εOopÜ+Ú6-i,iý)9 .=—Xšî+½O½Ä’GNZ i—Ù–Vͧ ý–~Ñ] ARÝ-ôPÇm±ÐÔTÇLÑ#¤‡°°ãv˧VOL¿OýM¦š™¹çSU—u#ýäÇTÔ n¦õ3%§rxþªM‡LzÛýË0ŽýÄÜÕ[xqëE“$ù}bU (>ý½hmõ-ÇÙ{â?xpûÐÛäqÉÝÜi*h]8¤Š3Ÿ –üÈ( T(KßI †Ü+ªßÜÒSDðLÒc'~hËœzWš\ŒïowZšª‰£æcý–µ»<\I( ÕWºii)ëŸwÒ²²ßr{ƒæ…ÄŠzͱ‰3ƒûm÷©h,ì¦{OYZÐ×qpºröŸ"–Ûë)㨎ÊÑ$¹ $såŸ/#à€°ß¡ºÉ=$оŠåJ@¨£”Ž&ø9¤{L=9ù.«ú¶Ã%Ê8®6©5îƒ/¤Ÿ£¼b‹ÈŽ™ÈÜ-­3|Šùlm@a†¦'j©µO3vs=üPA²ó#Ùn’G± ¹Î;ˆF\Iâ$ 玞•Ú4ŽÔ}Ž„“+æËHák¸]—ãÁ¬.w™áñ\õÎ;]®Yä;ð>_úB¨viA%ÊéY©+CFi©gëÛpý• ¾ÓA-4Tð02(˜#cGF€>J Qhë}ú¡ÒÏ=]8š.â¡”ÓÅDyÈkñÏ™ù« QéÛ|wȮ͋ëá¥m$M ÆÀI#¡ßð[·*8î6úŠ)‹„uº7œ–ÊëÆ¶Ühh)ãt´ÛÇKQHîíñ;$cc‘̱ iô;E+IJÅk¨uSD§¾‘ÁÁÆLóÉq*Ì„ZAÚi¢ ‰Îžx¨ P‰’?Õáœö‘Ôp<kfŒ¶Û-6»u#çlª—USåù!Ä<`ç§Ö½ÊÄ„NÇ -¶KÜ7z:ªÏL ˜T=ògÒ»Çq}fÛðœãçîVÔ“@BŒ¡§{­ú6Í]]Œú4—<-'ù/•æ.Æ^ì¸åÏw‰æ~ÿÅ}Ú„æŸ@Ýäo3gÁÎkOâ¾m.yß`@ùr^N=ÞiEÂTå.mØØ€8öêOøÿW§JÈÈ0xŸñþ7XLì,;ýS6'Äø,”’iXDn’i\Ln\I8¤¯3+g¼¦’²fí¦‚ªº¶:Hûêê·†µ£–}ý“о‰Ñún—KÙÙEMõ’»Öžr0eSä:Ð|Ôfz iºS]q }Ú¥˜~73Ÿ=O‰ê|†÷eíá0Ý’Ï/yô>[‰c¿Q.Οººú‚åý±ÔqܨéÁþªHGïdÝ ¨./Ú}H›SÜGD1ˆÇ–#ÉûÉTñI[oŠ8|oZþªÌðØbN>9?È(;ƒ&¸¾žßLìOr¨eŽ ¤†‚† :fpAOb££Z0È,èI}Yó šI !CWj‹=ö’Ë=c}YádMß„ã#ˆýœôÏ<… ¥¹Ôbå²&P„”œ‚O{ccŸ#ƒXÐKœã€‰^*ª!£§’¢ªVC M.|8k@êJá=¤v‡6£™öëcß¡§|e¯© ûNêà߉è5«F’»5a°³ÄË,væË† Ôt÷ð÷ÖW¾Û¦£qkDg7 ˆ`æ#ÎÙùïìÓõ¯ôÚj²Ñ²ÓhiÞö|Þo#Ÿ»|õ%S$¸t’d€$çrà:,Fº íßòܯ­zµ.–—üúWC B›w¶Þ ×Õú¿•ó'@°M!99ê° Æ»f1çÏ„¦ãìÃ!>%¸2²(4zª–̾ö) •Lj=튒šIHœ\ZÜ}äÿe^©ûA†–£’èêhmVʆÒRº7qMQ(`24 àà‘áŒïË+‘iÙµ)†¦ƒOC3}3…³º–"é FpÒþLnç–9²§E?¤êx#îƒrÊVÈx¸²7qnܺ¿Uëá§5 k_GÎã¨Ó•WV¼¬´²æÍŠM­uµ[›§©á³[šwª•œgÝ’0Ou*ó§- cô•ö¦ê÷¤Œhå¸gïÆü”´12YLk#cCZÖŒ µèB›ZÉÝþr­€ñ[A5 ¼K#"ÒJö±.qĄ̀Z½SD×­Ô]êÇuDÎ0œ‡ oÅÁ: õ½½—--pˆÉÙ å§›íC3A,{OB%Š(µ5ËÖ«ž–Ë ÿ5N="lyÈì4uØ4ûÖòzßl–ã-Ew£Ž>:¹‹À#~"9}È M˜Åu–’¹ÌàŽ³†¦(ÃHËxA#Àâß`y•Ò©ØÚzh¢i%¬`kx¹åÚ-­}Œ‘+¢†ž\³$8°þ]9®›qs™A+›Ž.díŒìOó@rÍw.î•Ýð•ŽïLmvCäâ#Ö/,oMƒ”§fôtÖú‹…kS.}JÐ;Ñx¥òxqžUËÛ*$¿ËZ飒;|2Õ5…Ù{÷79ä;ÂÏÂ’¥®¯u5¾Ýlª´Ð2šG÷~¬ŽkCKˆkOî$uPŽëå#~Zþì·`ç$á½ÒÈâqã×lª…-¦¦ ªa­«¦¤Žûçñµõ3O´ öiÆ9…ØèY†¦õr&WwFHäŽpËàhÙà 2¤¨ï”n‘¬wyœâÐÞ¸ÏN[é×Ëk •qÇ’FpAÆwù*i°ÛæšH*õ Ê*Š›šjÛÂZýã$îG.£ÉFÇ¥-—Iª_]v«ŽÎðÅ,qJZx^A-<œ/€¸M¯´Ür¶8î’ç ÿF‰ó`yðƒŽKjÏ«¬7‡6:œ™Ã=ËÏw'÷ƒ÷*ŒÚz¬TÉM²{=•4üÚIßÔ‘¼MÈÁÀ{òµëô•òjiê'ª¶ÖŠrxb{ x8yð¹Íqnpó@Zn”ôtZÚÁ3iaÕ ªˆ<4¬,cýâážxÊ´.Jëf †œÑVAVêfµ²Ç-3»ÖÆàìµÌ9sšá±Î\‡BµYµdöÉ¢¹÷QÜèš a-±Ç ”Ñ#žû8¶7—¢L"ñ–ÈÞMÎÜñ¿‰ÿºvU[]É•—Ø" wwK)ùÝÛ5À8öÇžAQ·êùt1¸ã’Sžt–F6ÆÛóâ+‚¸çuâvËkØçŒKœ¹qFÎêI#°k:Ú ãsdŠF¹Ð½…Æ2“’yžg8-Û>Ó²€êZ¢÷On¥‘Ž‘»„ºGû¶ É?yuT;-†ç©+f©žgÃK6|dµò4lC“‡y,åC]+jjâl³TÑoN\d±ÇvªqJæ>77‹‰‡!ÄîOÍ©`Ó”Vx˜ §Š'0œ6?dÒljñç¾]K))ß4¾ËFOø;zó_VÊ:wHíÝÉ­ßÖ>Ž=ëžj[¥ÇPUAd³È=*w8½ÅØ5¸ËœÁ#mÜŠRåp¹êÝJÛm¸ƒ cå <4í9ç® kAëÏ“—O¢¤‚‚ŽJHÛ°1Œo&Éhé½=C§h}„=Îv ³Ês$Îñqþ\‡E*€HM$B€„  Æé¤€}’hBI4~Ôâ|ÝŸ^[K‹a<àã÷¾bš¡°Âx]™Ëðþcæ¾Â¨…•4òÁ(Ë%ac‡ˆ#|sªlµºoQÕZn p}4À1å¸D áxò#æ9…‹K4”Wˆìàé›-á&(²ÁÄí¹®ËØf—d‘¿S×FâçEBÙ-|žòrÑäŠá±ÌZú‡äçxþA}q£é©èô­¦žŽHå†*HšÙ"p-ª2àFÇ'|ùªp´“žgÈÓÄ5IB<ÿ„K$šKÓ<_>jÚH¾]dÉp’¢P3á—÷a}Hh$œ¹_6ÈÿK«{ÏùÉKÏÅÇó^/~ÌêðÕ¬™«PÂé=åÄ|6þjÙÿ'ÚûWꙆžS0þû‹ÿŒ*ˆû»ÿ¼sø+ÿa³PXôMÂít«‚’:»„‡½™á€µ­k@ç¸vÞjެÛ|‘w÷\ΰ’åZŸ¶X".§ÒôF®LãÒjAl~ö³ÚwÇ…skÆ£ÔW²ç]¯Õf7ó†'÷QcÃ…¸ã’½j˜ºPÒ÷2Ñáµêëk/Séjºú:&ÖUÁNÑÍÒÈ>ò jûDÒTÎ ß)¦#ÿ—ÌÃæÀBù¦s ºWÔH~×sñÆÿ%¯n•³·¿ôÔäáÃ<$7ÝÌüU­m]$¾/ý× Œ^YI·è¿ÙØuŸkòO”šj7Rñlê©ðì0r÷Ÿ¹Pô|²K«)+ê\ÐÎÚŽg™^‘ë¸ìs¾üñ×’ŠmºÞáÂ;ÃæOܱ}w<ó4ŽG‡òXeˆÏ,Ò}Z>Ê)ÅYúÿþÕö¹§h©$’ª:ÑQÌo§dAîý`x~d*×··ð¸Zlô’¦lÿºÑÿyráŽWwœ!ü‹Ø1ÅûÍýüמä‰?«áÉ{ÁðZY6bîÊIÞߟŸŒ•Õ=¢ê=RÑ ÂV2›‹ˆSÀÂØÉéž®ø’£(i*jÞÖ¿bóŒd™;нè®Ìn·ç2¢àÇ[(üOn$~ËNøó;oÈ®·mìÿKÐDÆ2ÑO9`Ž¥½é>~¶ß •F¥oiéñ8–&†ØNþ‹o™Ëôïe5ZvÏô…³»Îæ)} «ŸŠ´Sv7FÆŽúï19ߺ¬ùŸš´ÕèKÒ÷ôt޶Tf{{Ìo÷vû—š{V§¶ÈÑI|†åNÌWx^”ŒÜŸ2 ¹aaz7ùÿÃ<¸…Yû•}-nºõ±¡OÙ^›úÑYQÿܨ#þ)J= ¦hܞĥ̟s‰ fµ¢nÒ—dCX<2Iâ<÷ÛܶV˜Ð¤µQGŸ<]yhê7óf8aŠž6ÅlŠ6òcÀ,‰&¯2îB„B€hB„Bi „„!šHÑ &€„ !BŸŠèߨõ%þdr²¢;S}¦El‘ü>$¾\cÝÕImdu5ŸYPYêïV9»‘ËðyòÞ'DCMw¾ÖÌakÙM]SR\FxéK[‘œ`àþÈSÚ‰ô‰ä0¹Á­o Ý! hÏíq€å\¡š:š{­ÐÓ´²Bìä½üYé¾êAâ¶Y;É%ŽÝõ • —»’ÚXAós<ø‡ŠÑÄYdžRÈ»–9ÎØÈÂ\ÜóÇÇ2=CÔ­ë_K[]k½Q¼ÒÕÈßJ§/Ä‘¼c†XψÀߑᰀé°ÓßàŒFk誋Oõ’Ó¹Žpóáv3îÜœ´×Ù° Ê’™»dÃL\GܪVûÕÆšF‚á Áƒ8œ‡$n{]ŸÚfAçºÕ¾Þ¯ÍžF6ãANÆ9Ç"Vqwäã–û²€¸ºÁn2®•Ü»¸j¦.`sõc ä|ª½Gdµ@j!­õY0Üú¡À4D|×9Šš¾ïBe5Uwé£Ô‰²ÜylH ÆÛ¼è2QfÐõ k]5=žd3†Í&\}¢Ö8ðŒþ“úh UË´:h_,T”ÓË Œðp°‘ÇÓ;gäóP—moU=%ÅîÒÑ9#Š/dp9ÆGœã lÜï•»MEc ¨É+ëþö¹Í-e<ñä–™Œ n3Žg ¨ýOz ‚Éu´ÓÉKDÙè&…Ôлº/ 9zÇã™Ý@6´lÖÓD;ÁLŒðDíÚvß~Å^5$¦+SÀäòNûîUM!LfÔÓÎç±â>1ƒž r-<€Ç0¬zÁ}²&±¼C¿ipáâØ|F9sßܤ°µµ—*­žé*礧 kGcçkÞGS´nÈWJZÛíÊË]{ÆÆI<,‚9#pö\׿‹cÉÜÇNjŸ¡\$¾X£áš–w…Ç$¾:2Hò^ŠíX@R­ºNñ tÏš²‘•4Ñ÷Ly2NK1Ž[ŰnäoŠoÑW ›Á5âž6q0æ µÀ5ÍsZ ‹†h#etB©þDBù›-EÖ¶g†5„–DÞ Üðç…ƒ—±ïX΂Œ=·Û¸p÷¬'wmêZß’·&€¦»BÔ1âhuSçkCêŠx8A®Ì ²¶a¿µ²—]èät£-¦|[džÆNOEjB“·WÑÔ5Ím¾x…3)Üaª{$<%ÄÂ3ësÈZõUsÅ —«=\7 F:#]5?~ǰÁ0—z¤ úØÁóWä 9T´ôUu]óˤ…ìdŒÙk^Þ9pn8÷àŒur²ÕWUUÞauDOŽŽƒ&18`.s†F’ À'a¾ +¥URSU´6ªž)Ú:HÀïÅEË¥­Owº”È0ãËsðå÷ # 8n2éŸê°>"ôžíet¯/q¢„—gÔ £Ñv=A'}[HSþžÀóïǵñÊ•²Ñ›užŠˆœšh#ˆœsáhÉn (ÎìºÎÚˆa©¬I Š)Ÿ&L]Zp1œ8¿‚†f©«Ò’×zð–È\ÂeácÁÇõR8 ç9lŽ›õ ØØç½ÍkZ2\〭UjªœU4Ö:ê#=Û™@ƒ‹ÁÒ»ÔÇŽ2|;î­uʨSZb«©©~;ˆž¬ÿpÛ·ä1“ŒdOiø­…Óê ¥,wJÌ:y ÎGØoR»s“¶À* %u¬})YMg¤“×ÿêLGOT5OXô­ŽÄ÷Ik·CÎö¦ÇŽ÷¼äýè /òÚ‚P ¾ßx¸4œqÓÛäáù¸«ðÜ˧5 c8ÿ¡q}ÍqVT *Îíà økß[@zúU Ѿ7%¸59i»Û¯ýýª¶ È¿J‡ò[‡q‚«÷Mf¯¬ÑE%¾½¼ªè_ÜÉמ6pß‘aB§At¿é‡½š¤²ék–Ýia-|CÂh†¼Ý¶Ük£ª‚º–:šI™4·‰’0ä8yd!„Ò@zÅÙ;ŒsÙ4!!@Bªö‰¡è5­§¸¨Ä5°‚iª@Éað>-=GÅZ¡¤Õ™ÔdâîŽ/–ŠëÒ¦ÝtÐTC€æÁpAêB¼hͨtUNm59€Ÿ¬¤›/†Oìô>m üÓ£èJ-gmÁ-§¹@£Ôã—ì;ŧîæ:ƒó6°Ñ—}3Xa¼PI.Ãe1KæÇò>î~ ,ª.”Ÿè9¬DRçàuJùGÒFúFœœUuk*ZX|ò[‘òSÇ·{ ©Y$6»‹åsAsH`h8Üg‹~ÍÞ„¸[tí’ ÒqïÊN³·²Å,4oí£º\»rïât47¼œsTãÛoóU(G€Ñ?ˆTº6Kžs‡jêÏë¹ßˆ^>¤¦Ögâz´h—¸­ptEÔ¯xæ«VX% –CŸ]ØÎøß§‚¶ÓŽ*wÆ9˜Ýü•췳ˆïö&\k.O†œÏ+;˜#~«ÈöÎ@ø7âªÁÂuT¡ ôÿeε,<ÕJ»Yýt*Ämgõ{y‚VC#¸°{p¾·è9AMÜÇj‚QÕõ½y?¼ìŸ–ËKTvyd¾[=ž– lÍ{\ÚŠxZG c9ò8=¢¸mE®c™qº2vPi§³¯Ž®GÝIèk] yk†Zî"vÎ9t]Ÿ²=<Ƶ³Ï_QãÇ+ZýÖ…«ÙΞ¨ÓzÖóCe’ÞÈZînq!Ío™Î5Òì=8^QÔòñ¸ÊÊ¥©Íåi5oTU){7ÒtÄZƒˆý9¤wÜ]…ŠíÙ¦›¯Œˆ©]E'GÀóÏ÷NGÈpBÐèSjÎ(ÃUx»©¿©Ê«;'¤ ,ªïjntñ羦g©!oé0ï—|=|sÎËiÐZSÐ"ž×NüH±UÇ;ûÀy‡5ÙØü=êà¡(?öMîKw*Jî*š_IÎXþ9ã÷ø*Õ pzGF],]z«Y;®«ó¡áÑjhÍ4ð^aæê1 ày=£…ßzðí]EKêÞik­.ä]S1gÊFq3ïV v*ì{¯ýÿ}Lݤ_¿¦Ÿ×C e5tz*ˆª"w'ÄðæŸˆYÖ…’×AY%] ÓÊÞºq çp6[ëµ{jW,·öv! NABB€„ “BB€„ “IЄ !%WÖWQn®¤•Ít‘QC5t‘‡pñ#n|Üü|TåŽZ©í“W–™"käànHÏ%Tj©MÚþ¾å’¦ÔüMÞˆB¥`„(én¬f ‚Ò#â|´ï¨sø½€Ç\ü”6–ä¤ÞÄ‚…$i&€çýžTCM©5m4ÌlŠãÂͱÅ2 ø¹Û«> ¤ŠîþíœÚá';gc¾68òz*¶ ¦}›[MR#⥽ÂvyTFÐ 8qëq1Œ#|åŽJ´Yïtw/,kñÀæñÜþŽzŸñäA sKmk+âsšÉpÙŸëǪï=a°nªCN^VËuLo…”zžÚû‹á`VDÎñìhûRµ¤8g#vÏ ëv¯¶ú‘ÃGS Ž>'=ü.cNH ²8|w>J¹sÓÐÔKÁ2–q48;„coT€|qöºa@#¡­ÐýÁž pÈÙžÕ÷¬ ;î ¶|Ÿ ÷é.Ô1²YI{xÁ…Œ9Ç´=¸Ü2wÜçUh§¥¨îàâ•¥ßX݇l#Fù店³iJç÷­¤¦l9á‘Î# Æ9|BZñª©b”ËQ[)ªcdÑÑNÿ¬Ž\–Í’ààHÆø-8ÆAZVê;õൖÛ]LÄÃkîÒšxæˆÝ·»h/x w '‡8'bWJ·Ù-vÐ=ßKçÅMŸáo©&“³ÿJ{æÔ·Yëß+ƒä‚œz4Àa¤†úÎ!  —ágÕ4V{FœŠÑGO +jjiÛ·Ø•„“דøá[Õ*ò×ÔÔݧ-l ¦ª§a˜’ç<4ÆàÀ6án\s¹@;]ÒÙf¯ke–id¬{Z$‚6—¼aÅäc½£>å1}ºZŸ#ì²×ÂÛ…C>®Ÿˆw‡ à€Hóê©w[¥cmSAèB’’ßLPÔ@é_]3d?RÓ‘ƒÄÆã9#ÁeÔ76i‹W¥Q@i+ämÍŽªªcÙ˜ç†4ç7`xwtF‰°ëKlMoõuµ`àŸWêðß÷C~õØNÃ+”=­µvƒDÕ:²7¸õÃþ¨Ÿÿ’?’êèÇq1®ÁÁ!4Ò@.&ñpñ.xÎ騫ޜ·^H’ª7ÇRÜpTÁ!ŽVc–7Pž¬ìyuºçM¨©ÚšàÞâpÜt™ ‡I£Þ€¸¡Uè5Õ±õ ¤¼GQb­;wWwMqý‰¨ÿVh¤d±‰"{^ÇnÓ~(I&’8d´äŒàuM .í©l–p~’ºÑÓ»£3CÏnrO@Jª½SãÔ H¥/¥±H©lj\1s×…¥î#Ä·á®ëçV“Oh‚¢Íiw«-}TE•c;´öÝã°ÈV[M¶’ÑA¾ÃyÀI9$ž¤É@muUÍK« ´×Ei·ÒËu½T(¨  p·ôäqÙó;ø»ª«*ém}Õ¯„WÕ¼SS¹Ã"7;í‘Ô4eØë…ëNXi,4BpeþµET›ËQ!æ÷»©'§!Èl€‚‹GW^§mV·¹z âeº“1ÒGïÔ}£%m¦‚X4L†(Ç XÁ†´y‘x’hãφCK¸Fäà9”D( Ý_l¡²¥Ïã;5‘#ð¾%E¿´Z6‚áh»9™ Óvåî@\“Uj.ÐôÍTÂ'Ü= ç±:œø€ÁYØöÉ|nkÚá–rÅЄ ¦\ží rúF<ÿ“u²†ÕÄýW¦oì9Ç u æ±TÓÅUO%=C$R´±ìpÈp<Â"jŸÙl¿G\,uNyžÅVê0e9{¡ÀtN=}“Œõá*à€HBi&€„ „šI †®–ž¶šJjÈ#¨‚QÂø¥hs\<;™a©;°\d3Yç–Ó!ܱ£½‹û¤‚>J¡UØMý"–çl™ …ñ“ðáwâ»ê2£ r4ÃV ÉŸ?Ðö3©c…óÕÔP@ØÃ݉÷»‡8À ÆøÛ~»…Oë0;Ä|ðWÒ‡cÉ|ï_GômÚ¶ˆç†š¡ñ õhqü‹Jñ8¥N1”OSˆ•i51Ñã¼Á=qðÿtNÂæM\) õ©®2æ±Ãï'ä¹Ì;Iޤ}ãoÉ[{®ô]cy¶¿µ2ª?{ÜñòY¸LòâñEœF¢Ÿƒ:êI¤¾¨ùàM$Є£¯ÔWÛËiœØêápž™îäÙ[ìçÈîÓäJ‘ICWVgQ“‹º5­u±Ü­Ôõ±4µ³ÆÂîm'›O˜;rÙQ:_þ…T[žä×T˜¿w½vqåÅÅ%,¢ñM“Q(ͤ4! £€I4„B€M$„!Є hB!@4!£èîN¨¼×P:6µ´ÌŠHÞžñ¯âÏ»¤%©¡eFœ¹Å/²úYAòõê™ØíK« •Çÿ‡§d'ý´ÎqYçQƤaâ]w„§àz×ù­ÔÔÖ¸‰â¬e<ÇÙozéü ù«Íe<óTSSš7ˆŸêÐxAÀ<ŽÄ{•Ù,wÐî׉ôKLNÜ Œ†ðŸ˜oVÝ%Lø,‘I;qQVçUM““ÄóÅø> 6YªJK›Eý¾†ŠêÐŒ_$¾¯þê»RÁC©Ùiªà†'RzG~÷c./- ÇöIS‹‡v•vp×ÕŒ{ŒžŽè£ nvÂ?´ç|Õ¸ÊÒ£MJ;Ü« J5g–^p‘ìŽ|ŽkÐ\ç8à9’U;FÏ%ûS]u y%¢Ž”¸nö´‚HòÎÿÚÇ0«7;äú÷QÃaЦZ l®vCÄéA>·N›°8ÎJêT4PQÅIIb‚†1¢ÄK4}Ôþ¯ì'Ae—¼ú#:HBÖfЄîÓE|·¾†å{ ˆp܂ז¹¤n;‚:¾h­Ic>‘¦jMÚ áôÓ¹¬›óų\r<¾2FË©¡ÄáÔ†‚+ì·H\ iQ=ÁÃÛ‘¶ÀÆ8FI2öZëÝÑŠš’yÜA$Í–xƒ!á¿dt]Q å‡K²œGQqõç"#ˆø {^ó•drI4„·ÊhRn,¨­µëZ:~'THèXÌqw–`ù¹½B»*½D4ºâéq%Ka|®.hÏ«ÂÓŽg‘{É’·LqÃ] ˜½Ž’¬ÀDZŲ5„·Y®ssÓ9ÆVŒ–»OÛê,íúA´ï’޶J&ÆùšÆ’b¯”Ü´òÜø©j |϶\¬°ðÓ>×õt³Æ7ÌiÇ­ÝѾū ššžK4¶ÊÙhç¸31 º˜ý!²û`ˆê´çÖ#9=|P÷š]hâ’^jÐÿAªcjL”òâ7É#}Pì–“·29«þººó§(«&#ÒŒb:¦Ž ÛêÈÜtÃPlÑrÓÑ\¥51O]p”Í(d}Ô.ÈnG\FàœäÈUëõúVí<•¥ÞVáépƒÄèf¸ö˜@õ±Ž\] ª!x†Xç…’Á#$ícØr×È‚9…é!  0WQSWÓ>š¶ž:ˆ^0èähp?«Qö{f£ÒÙ¤¯³¹Ã´UOc?¸rÑòVÄ +riûãG .¯¸1£–ššCóîÁ^ã°^1Wªî27"()ãÏÄGŸ‘V’ézz«t”7 ëd2¹®yRAv:e¸ÛÄk=³MY-s:k}®– œxŒŒ㓺”M!@VêÜéûC î=Õ5¾j†·lq—µ™ùgæ¦nµÂÝFêƒMSTqÝÓDdyþÈPZ­Í³Þ­º’W9´”í}%c‡(â‚$?²×“ÐTV¤·S@d2äÆ`— g#`Œ8x‚ãZÓq%žý` ¹Ö¹¶'¦ÁU5]î¾ïX"¥eS(£˜4–PÎ'9æßêÈáÆçœY[:«T}'”6·6YC]ÝåÍ#ÄïÐn|þ O[&¹ÙïµÊÇ¶× …=X<]åSxesÇ1ê5¤ÜÀÕs3…Ï©¡†A†È(§ãsFüEýÙÁ;çK$péÈ©Àq®|ƒ?FT8ãžç$s+­X)©k¤š’Çâl‘7êÚæƒÂ<’@q;”VBÇ:’J©C€ïcu,Ü=wo©Ë}ñÉc¶^ë,URCg«6ÚWH†Xß,`“`·ÕãÙ#ùÝ#CØæN^¾Zel2T6µÙhÙ®qo‹ÜÏ#À@EÚ»L³º•½J(ë¸"ŽI"qÁ9k¸sƒ²ÎËe¥éG¸·é [Ž®¤˜™j¢j 9ã«uDVS½‡1¿×f;c##pNÙØÌ4®•¡/îÔzr éš8.ŠfŽŽi玙8é” íI“ƒwŸ¿Ûø…™šÿI½ ‹ý súrpþ*Á%<2É oý悱 '{Ttçß$>v§ÓÖîÑ>—¤¼Ûßo»Q÷²¶¡¥±Kñ¹ÞkÜ>9ÚeÓÔÔôuRÛjmsWESÇ‘#ØàiÎÁ$õÙ`í.†’‡M …= 4UPLö2&#iÛq‚v;l§nš^Ãv¥‚šãh¢¨§§%ÐÆè‡ yçÓ( m_hWjh,Uo£¥u-U¤\®¬y| –·,^È/ƒ“€Vgëu·Oº;…¾În4O®ž²xKâõ8~­.ž,óÈ]&²Û'•²KANç²R´– ¢w6~éÇ%Žm;fžÝOož×I-)s#Ç,ÉU¹kɨý(Ç% ÍŽÄÛ¥<ƒ-mL…Îh'<; ¹úÃu^Õ½ jKV«|qIG¢(éËø!=…íiü~_‚ós§5v§gfçÀxþzù:;*±ŸôuaÚSq>#dÕ+²-D/šV:iý6ØM0'%ÍÔÄ›\®‹íã%$¤””\[LI5ÑÈ!@ FùZëuž®®1Å$Q8ÆßÒ~=Qñ8¼¼Ms3‚V5íÈv22Aø ‡v´:‹I¦Ìª&Û­´´LàÜïâGŠ©Ø+[¡»5lÓ;‚çtÌ‘0XC¾y¸x¨;ÔµÞá‚çRëíöbêVÿSæ#8ö°pHh#î…Eºz[ë_wš;­ù±Š‡Ç#€¥¡`Ô‡–ÙÏÀ{ˆÊ©ZS›”UšÓáýú}F£¨·£×ãýzýÍÛ5º®–Ýk°èë.òzmxiÇ>0O†3òtû}U5m$u2²Zwd1ìöH|—-·Æû• }ʶæúKD§úeÎVðÍ[Ó»Œc-gL“°ÇÙ5}²ÑÚ`Žß§mX¥§ooª’G¸~%fJ’»Û—çÕ·âô+¯QÙoùýjõv£²[¤®¸Ê"†1ñqèêWÏ×»€«¼V^gúMd†HâÎñ³hÏCÀOᓌ-arÕµN¨¸ò8YõcòhxÉ''¢ßÑZr«U_}i8!h㨖1ÅÝ· ÉØvëÔï…Zx™ª1Zuf¬5(Ћ©'©-Ùæ»ª²è*ééd¤| É+X[#;’G0ÑÈœ .ßÙ,m’75ìxkšr<ˆ*¿kÐúvÛŽ;d3¸c/¨ë‰øì=À§iiá¤¦Žžš6Ç M cÉ r ÕÂÒ«J9fÕ¹zv"¥:4¦D&’ÖfM$š ÀBi ÒM$š Puõ7ÑÚ®Ï~cOÿ¢N挜gˆ»Æ²¯ê+UZŸz°UÑA †¡ì&žSþnQ»îÎ3å€Ö˜ÃM~¥º‡¹‘WÄ)$Øp‡ƒ–zÜß ÀQµ6¸í2TÃMJú·ÔÖºìj'S‚Kåæq¾2q¶Ãu©¡n1j[M®àÙHs&‹|Ó¸;èö>M=v’£ê; –úÊE»Û¦M#[Ä;Æ{2pœÇ·|Ž#˜@N[.tª/H·Îʘ± Ó¨;ŒƒŸ0AUM[d†C$o‹»2(fcpÒwÃ3ŸUÙÆüˆÏUgÓÖˆ¬vŠz¤|ÝË ²c‰øñüè jº’êY)ª]ƒpˆ9@rý1¨®]Æžª•Õ òMúÊrq—1¹gRÀ27 shév»¥ Ú›Ò-µQTÅœ³Â|æ‘UÚ»3ÛYÝÖRŠˆ^\;#Ë0AÀ{Fí#ô†Þ⪕öÚ»HeÊÏq1¹Ä¸Ëªþì%á“²ìøº¬#¢¡Y{H†72ŸT@( Àíÿ£<þÑç>yj÷Œ–6ÉÚö8e®iÈ#Þ€ö„!„Ð 4€hBdcdc™#CØàZæ¸dzEºv}4Ròz²i\U±¾H¢Ï>éÍs\Áû9#à ø¡õ6¦¶iºQ-Æo­“"v`Ë3¼Þ¾þC©@R®ZFÙ`¶IpÔ•B©‘°²+m]ÄUG×>BO‹ˆÇ1€¤é#žÍÙmÊj¸ã†cE4Ä@ÀÖñ¹„޾ÈhÈäд촗 _zŠéwo t²µÑÂ7ŽŒðoí8çsÆ9 fÁ­øªÍ¦Ë:úÖ:QŒâ¾±Ùò%­oövŠCAi££$Oq?e %¶„ ÕºÔ6šŠGa¯yFÂ}·tÂÙ‘Ü,s€$œÍsÝ[{¬·ÌÚÂç¼DöÇ4.'»xßÖ`û.Ï.›ç'ía-$tÒ82&z¦æÁá,™hνê{²Ý?UUq‚®©ÒÆÐmÉP³>¼ºGIi¥4ÂCý)ÿèZr wC°8ÎIÎ2C‰oh´[©íÊ{}x`§`csÌø“æNI÷ 7„ õåÒ:2óJ3Å%$œ8çÒGÞÞš«ôí=nªë54n;uá[Uí¡¨iäcp?%Ù„®›³û#ÝÏÑ€çžD䀲¡@I4’h@$&’¡$ÐI¡šHÀ‡A õBh ª¬Î±_ªh0[=í;è‘ò;| Õ¡pqtnŽG=GÏØ5Þ˜n¢¶ƒ]M—@âqŸŸ~>Ç rC3㑆)âw Øá‚Ûð÷{—Çñ+¡7ouì}6 ªÁ_u¸´íæ]ª£¯ÃÍ#þ¦©ƒrè‰ usvpøŽ¥} M¯¡ÂñªQì§¹ˆaZ}¤NÖšI¯ áÔ…¯r“üºí}–÷fKu¹Îk›ÌpF}|þô˜ì(^Õu×Mc[GÿÂQŸDáÎ2Öð¹ãˉÜσ:ïæÕžfê=–‹ãÍýôãd ·z¿·Ü±v] +õ•êVÒÑ‚ièä¨;–ý§ø—8ønIpUE¬ ¯º\_<µõ÷Í;8û³<46(ó¹9qÈèÜ([Ʋó4^“&"¦`d14pÇ9ÖôÎß´y’•=3wk=œœœa¾.=ç÷¬SĨÅB(×RÍ#>­ÔWW,^™ÝQÑÓ´2 Jp[c—/m÷¢­ÖCSUÜÆÃ#ÆKóö%Ǧ$ç8ëc³Ù+/5M¦´Âùd#yqÔŽg5'¨~Œ°Ø*4å†VÕܪÀ޾¶?êâ90°õÉ8õÜöo©*·”—‰Ô¡vŒUÙ£¡£Ò uV©®š'—ñEC_—7‚âÖø`s‚z«ó»I²Úè)è4…žiž^Ö²HÎü²K‰ÎNqƒÙޤÒvKTtÕ,§½îtõŸ­9ÃZ2}6k¯DöK%Œ‚Ç´9§Áä½ <­4”ôpQÑÄØià`Ž8Ú0Ð0@gBuuꊖ Òã5a¼]×Èœò 3ÜdltÇ.F;±—oòÀßÉsmOYèç.‘“Dâé£ß!§$Í»œzÃb2¦¨¾bÑ÷¥ÜNÄù-ÁÈ ÀÈ8rp2áÌï7JŠ™ø£uL® k¡f\ù3± êã†ÜòxxIh¾Êd–-s-<qÂmᓵ †‡ÇÀÖž~&Að]}Sû4ÑßäŵŸIV†÷Á˜á‰Ï `õÆNORJ¸ „ÁÅI;|cp玊½Ù|/§ÐX¤s)ðwÏSת”Õ5b‡M\êÝ‚!¥•ûòÙ¥jv}NitE–88²’=Ç.H ä“IÐŽˆ@BI¡!@BI¡“B©ë}õ¾›AÁ̓Ú;6`>Ë¿‘ÿËÄ*êÒ…X¸M]Ó©*rÍ©À& ª’:ˆãwÑ;›ãþ9ì°^-1×ÂeƒLl|}ÿãù…Ù5†”ƒP@%ˆ¶ ø†#”ž?Aþ#ϘùƒÉ¦Š¦ÑW%=TNˆ±Ü/cþÁóòð<ˆøñøÌLLðÛ“ÿOÔú|.*˜e–üþæÎí"§M–ÚufžßÉ1Å% ðÇ7ÇáÔtÈÀª‚¶–ãG] ñÔSÌ8™$nâk‡½p›…¾šéâõ%o²ð=fþcËÿUi¹ÞôeÀÉn¨11îË£ º ÿy¹çæ0áâG?OÅTÖJ›ž~+‡8¼Ð>’BçÚsµ‹Uw7¸]jœíÞÇ “†ãÜFÞ*÷IWM[žŽ¢*ˆÉñ<9§â» ¨¯sÈ9AÚHÌ„!Xp$ÒO¢B€¼½ícKžàÖŽdœ«×qaµ0ñV6ª^‘SòãïÎ>õÄêF óv:Œ%7h«–%_Õںߦ`û»ê§R‡{Ù%Ïuh—‹¡t-Ês±-~$?ÚÇø5§ö•WÜeî-ãvå퇌“â\Iqù/#Å#––¯Äôèpé=jièLÝ»E¿ÜË› H£Œ™Çæ7ÿ{ ·3k*žéjd•îqõ#ˆâø–ÛÜþj\<x?¬"'dS=Ç¡’AÿußÉxÒÄNzÍž¬hÆEI;ËòâÉzu$g¾ˆþki´Ï?ü42Êf™ý)!øÁ¡SÚ?à³'¡ Ž7çÒïfGÞp>õ%m¾]h€6ËÝÂ<}†‚æüFHZõ4a¸†2óWr|}¦ÿ5‰ð9ŸÖT5£À3ó$þ_–Ö,¦P¾’EÒ×Ú†¢¤pms)n øá’'Ÿ‹ZGÜ­4«[äúu²¶ÿô€‘¿3Â~åÇ»úvz :Cûn'ýÔÛQÇìA÷ðÄ•²ÜD9ýLÒÂQ—/¡ÜÚ^›qõç¨oµŽ>YYÙÚ&–ÿ©ðþõ<­üZ¸Œ©û40~æ1þè[!’´zõ'ɲm÷.ß«ÒêsÝÔÞÍÒ“VéêÀ;‹ÍO&¾`Ç|‚°jMee±Ûj'–åHú†F];fi|ŽÇª;œoÈ.8ÛE]C3ŽMßÉjVYê!5a¾Og>à®\Rvö¡ü•w|ÒFnÎuU™ž¦ãS•RR¹ŒmÅ+¤$ñÈp²?eW«fšá]S[PXfª•ÓHìa¥ÎvNÞ;en¾™°»ëiË=íþx?‚É ”±îÜòÈ“÷V:˜©N)%¡ªxŶ÷5#§îØx½PÝÜ_öIûNñ'£zòåÎÁ¦tåEòrÆG£ˆw³Ï1Àhê÷ŸÀ HІãEŒâŽœ†{-2G¸à-뎠®ºQ2ßOŽˆú< 1DóúOs‰sÎ߀À ˆ4Þj»~sÙÉ4­LÞÔ–žžŠKN˜‘Ô–¶íSXG •gßÌ7Ë®~ Åa¸j*¦ÒÛéžØŽär$x¸ý‘÷ü±èíY¨mMc„t¬;Hê&§Ï§¿cÙ-º;Eih!lQ·™Æî>$õ+Ñ¡‡ž)©ËHòþ¾æµá‡¼c¬¿7ûÝ%Ùõ®ÄÈ¥¨cjë‚G¨Ãû-þgß²·£¢·N”),°V<™Ô•Gy0B¬8!$B€„ !BB€„ „ÖZn Miôg¿¹©‰Ýí5@1?ù‚6#¨*m4&Òº¢û§ï Óš¸¶žV´_»Û+s·º÷‡"1¸¸\´ý¾ùPÛ­š¹ö˳FÕ”„áú24ìñËžþ)-S¦­š¦Øê´FƒÅ€ð¾'ŽNk†à®h*ïšµ´7Ö>¢ÞO =Æ–½£ý'è8¿Ng#@]âÔ«,on©µ:Hc?ûÂÚÓ,n.ˆfFppóSVKí®û¦´WCVÆœ;Þ³ƒšwÞ½‹QQ] ŽfçGÛdüGP9}ë×KÙo2²­Ð÷UCÖe]$†)8bhÅ’<—H× É'˜ä7Rš" Mn»ÈÛÍ;Å®Ÿ"~÷¸Ÿ99Èpw²8€,纲Ôj =6;û¥yå™›ù¨ª­{b‰Å”rÔ\äÆx()ß9ǽ£âPt*„Z¶÷qèmqÆp_s•”ÇÛqù!Öm]x?ûfý ¢ œÓYÙÄç 홤åÏ…£šn÷¨mV64ܪÙÞ@dMò<žA¬h.?¢kûRÊi£Ž[¡À's›éUØÖŒ÷C¡qõ¼æ¤,zVÍc•ÓÐÑ·ÒŸ³êeq’W{ÞâOÌ©¤µº‚’ÙC¾éé¡hk#Œ`4-•åî n\CG‰Q5—Ø¢©î#k¸²HÇycËÏÈø“QËY¹ÆÙS`‡0NÒæH6œnÐyq ‘ày.i©ã–¢Hj*sk¹`HekÛ!#ƒƒ½„‚1³ø]€v'X/ZšS+„€9ã ¼×n–rÛ#'l횢K¶ª½RÒÅÚÉäΛ†02÷r#À;9'à͇U_\]¢pàãßI#Ämã£ÄFs“¸åúN亂Ð1ØgúVìöU]än8š=HsÌ7Äž®ÛÀ6^§Ó—Í6÷TèºÁ= `õ_'Žá®ƒÏcãáñûŸG„Ç*ÞÄ·ðñøÚ«,<ºŸ2Äî›qäá÷ûÖµóÚê;Ú¹íóŽf'˜ÏŧŸ»`§)êÎ8^2NpÙØçƒãäw|V_Iˆú®-Ûì“ù¬0ÄÕ†æÉP„ö6-½§jj ÒÑÜØÞbhø$Ç™fÃß‚¬Öþ×è¸ö½®¢”ô|/l­Ç˜8#ïUÊg˜b'Í­(ÓbÇîÆØqŠÐõø™gÃ)KÐé´½£éj¦æ+„„í–šY²?ÜY%×¶&ÇųÎïÐdiÿx¹kÚç)ÿˆ"I+!?]BÇþÔm#ðâûÖ\ⶬ–ª»qo‚[y³‡(Áñ'f7ߌýÊèÓmÙ+¿©M-[Ðt°¸¼>MœyïËÉmR[c¸Th©d­8,§ÒðçôˆoÄ…Ñ4ßf4ÐQ©%m|ÜůŒt§üNAM٭ʪ3ß[â§£+Ø3ýÒ¡sìÊåöQMÖ‡|š ?rîh[»®š^̤¾Ñ“¼*=⾇ËõÖêI¼'/^ÿ’ÇK_5;ÌEÏÌçÆ@øåó_I^lVûÌEµÐ?l­Ùí÷är<—׺JkMP†R ©êqÄ:ƒàGQæ óñ8Z”çíGÇÃâ´1ªí %áö##ªŽ¡ƒ½‘ñ»a¶ß÷‚Øsg¦%­ñaˆ|ÛÕAÛc¨s^rÐ#À%Ç„ç<Øì|<”ýªë%+ÛMW j :š`@Çì;›?²pzƒœ/5ÓQ•“·çÔÞ¦ä¯k˜ã‚ygcZÉù\1I€I8nã¯2W@¦ì®'º¶åÄâs[LÁƒáŸæ«Í¶ƒÒšrgÉ9ã’m51ñÀæ?hmŽxÁ]3F^z±²¢|™ãqŠB@N9Àò#Ã|¯G‡§:Ž5ÕÞëÁ¯ÌÊÓŒ©;-Ÿ‰ fVXÛ‡OXãäöòáR4ÃFðÿD3¸ýsˇ÷viù+¹%ê &XšÒÑɉ­ hk@ ˆM%¨Î4!BI4 BH r ¡SI&’hB&Ù4M$Žyø ñ41Ï¢ž6KÇ ˜ö‚<+ÚãPöm-4­Ñµ £“ô'’"Ïì8{Ëgš«[õûI×ËM¨è*âw¨ÎcÉͯùg›†Ë¸-K¥²†íJê[p;œs08}è ––í–ìáxÈ8qqäÎ#È“îVø«©æs[€—róT»Ÿdº~¡¯}¶JË]CŽ[,¸ð ì… .•×V)XûuÁ—("-t.k%# åÑÈ O²9=¤ :®ÎÛb­E®ßTÒÚš iæ$…®ÏÌ.7[®5Už©¯®¦”µÙã‚zy`$rÈÈs|Òn·ìý°zT¤ÔÓÍeÁ¿d†rÁ dó¿P€ènÑšeò`·“’}¿’؇LØaþªÉngº•Ÿ’¬Sëè†úísÈo ø}SÃ’sžNÜ”œÚÖŠ7ð‡0åÁÛç}ÏNž( ØíVè¿« ¥gîÂÑü–ÛÐÖ´4@ *ýV¦Ž0LeœÈàò;ñ¥9µÄކJvðq!è Èw^P(9®îš'IG]HÖp‚Òc/.'l{_ÈóòZ×˽I"¨vÜÄæð°çlI8òÆüÐ ª"…óHÖ4u%k>äu4/” ²}QŸÇî粤WjjH©¤’y$ã`õË]ÅÆìmŒgÇÌû;ª|úº²¾GÓ['ðe§º€—¸8ž,æ7p;WtM»]©[3Ÿ])0²2C288·æ:ødàl¹õßU²y‹)ñ\8KFr>ÐéàG¿át]6–Õ7‰‰ŠŽ¯úÎ0ùóá—;hÏ ogäЫV[u Ä™h©ä'ô¢iþK,¸3å>ŸÙ¥qUÎN — ±÷±¸¼²<²›×q¨ÓJƒëÛ`oÿm¼ðáhM ´ü¹-¤tGÅ?Ï*‡Áë/u§õû®)Iî™Ç,Ìû-pý?ÿ¢Éß;Nˆ·?küK\Íuwvqc=jG¹íÿµ§ìÂÐíà©«‰þ%ùû†o„â9¥õ;\F‹9¤uL-âï8Z6ãq¹ýá–ˆl2W´úÍ>ñþ?šºKÙ|üQ]C é"!Ãˈ;'âTUϳû½ºFº‰­ªˆã.„ð|ÙËâYjpÜDUÜ?‡ü!¢Ý”ˆQP:äûË5ìNÉKÂ} NáÖgçÞ=Ÿ¹LÁTñ÷tñ2&²Æ†[èð½Y} uxºÿãÔæ6>Î+nOmF¢ÑSó°¼]äç ›î>atk]®†ÑHÚ[m,T°7~ÛŒŸÔŸ3ºÜBújXx妵z•æÄ„!h(„«}¢[ ËLÍÝDdž™ÂhÃFNÛ8 ~ÉvÊÈ…]H*p–Ìîp’’ärîÇí]ýÖ¢ªPÊ=ðÈݤx99iðÉþ’ÖÒËK-]†.êVãD?«“ǃôîõO"7Ê´kÕw+l„ˆ«Ï§S“ȸí ÷äg ƱÒÃS•Êjöº4Ô¯8Õí"í{?ÚnÛê"ª¤ñˬÉ9u|ò<–{•‚FMf¤š8`‡¾ŒHæAŽã¹ÇÇ+ŽkzVÛµ…Æ&Ö>a;¶Þ'ï .›ÙÅa«ÒÔñ¿Ú¥q€û†íÿt’óøméWÍØëT£©T! èHM$è„!!@I„!!,``&€¼ÉÇÀ{¾› Є’1¸òM! zi&€„ !$BH@hp-p`…[¦ìuÙôË=䜒úvó”B—uì¿NVåÔIl—}ékN|XAiù*«û¸Âç/pTc…ðº0 õp<úºòH'g] 7Š— wÀüŽ7VJK9dÆ3·‡ŠÝ©ÐZÔÛäïÍ®¶PÎÆÊ©£8ÉõA;äóÇ>«±¦€ùòK&µ¥¦bÉv€Fx›Ü=“ à}¬î6¯/=¶-ºG_\±M%,”´eÅÎ5Sˆ· e¥Àòý —{B–Ù»ŒN×꣫!hÀ¦®`<½§’IåöC~õÑm6‹}ž˜Al£†–01ˆØŸyê·P€Yõ±ƒïB@BC8ßršKÄòÇO æíŽ(Ú\ç¸à4d•S©ÔWGŠmÜ<òó;3^Q´ï+¿ÝI@IêCè50ÚíqÇ[yªÏuN_zË!á`ùžAiZtL’Á_S]Pû¸˜ÏSWî}$“’Ç4dr¹©3¦¨tüR ••Ц²¡ÜsNï;ÃÀ ‚™@rº[–°3Ú[3'’jÆù>·¾îxŸê½„c»Æ0sá²W*ýI6‡ÕRS:äkÅ㺦,.d\qS†ÅÈx®ª–0€åš=ch¦¶[[q¬¨šáqq Ç9ÑÄ"ö];â8Ë·fÞk¡»jËT7«­EwC$ñÕÒÓš‡TÕw„GÈnøf2p]u'4;@ŒŽEÊ5¬¿ÅQk†ëqv›{­qU´2ˆÔº³Ž8qŸ³Ë€O? Ú£´µ·YÒSÒÇ)´ÑŠv\ˆ¤$˾îû ·lò:.Ÿ$Jæ:X˜÷FrÂæ‚Z|G‚ ;10ñœ»-·¿Åĵ¸Õô÷Ký¹ÏtRUÍ å‡Â9ûcpæ¸|Bš¾Ü5…Öéh¦ÓóÔ±óÙYVþ¶÷¥ØË¸šAç»F êf‰$ÄÂO?Tn½†Œ006@rÛ† Õ4W©mK4— k­ýȆ˜÷RAÂßIs ââævÙh×jÛí7h ¦9^ÇÜÅ3hÛf ;VøÆq¹2GN‹°`g8Ýxt1:VÊèØdo'Œq@dB€„ !$š€„ !$šI !IÐ’}„„$€hI4„!!@ !4„!!@Aêë|ÕqWÐéöçwð㛇Úg¸ŽžAHÚnÝ-°VÓÇ3x€ð=GÀä|Ò®YÇÐúš²Õ³i«¦S û.äöÇYåþ:Š\¥£øòëè]n<Ö¿.©@íi­‹Z4ÿ¥¤‰çûîoà›² ’ú…9ÿ7#ýàGýÕWí…ÜZâ­õ ÄÜöB¬•RÕP]nTÕÐIO)†980qÄìÅyMq ­µþNM<Ÿæ§EB½óÆ$„B:!!@ &’¡@H¦€„ $šB€„ i&€„Š¡@$ú$šB R@ ¤šB€„ !$BÑ»^-¶js=Ö¶ H€'ŠW†òܪ°í[Ðtz*ÉYw~x}*fú=+|I{°O¸ üPu[ºk: z§ÐZb–õso:Z,;ƒ÷ßì°{Î|ŠÓJÝï.2kÃ¥ˆœ‹}¸˜iÚ<ïmÿ=Û«=¾‚’ÛN  ¦Šš!É‘04}È ´zR¿PÎÊÍmT&‰®Eh¦$SÂG黜Çßä­ñÆÈ£lq1¬cFÖŒ<^Ò@4!BI4¢„„!$š\ BB€„ $šB€„ i&€„ !ŸD“@B„M$Є„!! Zºj¶¹ÔµNÖ¸µÆ7‡FÄuY„¢ït´æJ[¥EG£‹kŸ3ŸŒå…¤8~%(©Þîû¥Stµ¬š¢g7Ò¤;¶Œ;‡÷¶ø2‰ÆÛ–¾¯—Rê1sšKñs!tu,ºƒ[ÕjzüÅ >dÇfz¥¬oÁ¹$øïÕZô‡ƾçxsc­xŠ™§ý{|NN:­*ê&ÓÓRi+SÈ’ w•³7›bûDù»}†:…o¦‚:jxà‘DÐÆ4t’Ë…§-÷Z¿ÿO—Éâ'ã³Ñ|Ý™„/DÄ &’ôB€„ B&„ “B!4 i&€M„Ѐ@å4“@ &„Bh@$!>ˆ$ЀHM„ЀHM„Ѐ¨Kÿ8U2˜~€·S‡‘{<…¹Ø’8Fã,“i«ý{nZ¾ª1Õ–êhéÇÌñ;ïV´ GfšjßRÚ¹éd¹Ö4ñ Šù ÎȇÀ+sÖ45 häÀ Ò ¡šH„!𠤀Hî9á4’h@$ãlgÍ4 BI4 B&’h$ЀHMšI “B!4 BB€HM„ЀI¡„ЀHM$~¿FYª§50C%YåQG!‰ãå·Üµ}6ó¦^;½°ñq³ë¡¶ÑíãÏÞH Ö¼Ë#"‰ÒJö²6ç9Ç s$ª]µ†ótZª7¤õ_œÌTU”Õô¬©£™“Âñ–½‡#ÿ_%™s+¬°ÖÞÝÊÈf$å¤qdRg—öކs•±Ô6âïq”DîqÔT¾oÿŒ½dXÙ6ã95ÍmõfŸÒÅ,ÒšŠõßè‰MW«¸\mZuþ‘p÷nš<=°ŸÑÏòéÌøl §Ñ)*ço¤Üª]ÀIt²;pÀyœÉæw=RË%§IÐÉ[3Æbg¯Q öG.´rÉÛs°ße†ÅIQz¸·P]ctlh"†™ßæ˜~Ùý£ùsÀQ–¤¦¥Sßä¹Exú¿ø¹“š .0÷y¾oÓáÿMÝ1i–†j®Ü«ÞTIáàÁäßú4„-ð‚„r£¤æîĄл9B&„ “BI4hBB€P’M$Є„!“I4„!!@$ÒM!@B M!@BI@4!BI4 BB€M$B€„ “IЄ ! ÒM!@B 4“@B„M$Є„!„Є„!Ô4§™AŸ‹€Gy8Æyræ[5ý‰ÜÝTß};•’h!›‡¾Š98yq´{’ôJn^÷Ï8×rö$’ø7þÑt]$½¤ïñþŠÓõÅ5C»›5]}A¨ààh÷ówܼ7O]/ÏlÚž«»€&ÑSœ4>‰>+cÈÆÆ´x…éqúyTÿÚW^ EóÝ¿­½ûhÃÿ(ÛÕêÿ¯¡¯CEMAL £…Ä7áhæ|O‰ó*»WRGW%ºš¦åW-s aáiòãÓ¦@*±ŠP—˜£c ÝÄâÖÄ|O‰WN2²7o—ðUFíÍ\­ÓY®7º¸«5?vÈaw6øÎXâóöøÛ$:i)§MSõo™›ŸÀhB‡„!$šH„!!@B„„!!@B„„!“B„„!“è„ !BB€„ !BB€„ „B€„ „è„!!@B„„!!@B„„!“B„„!“è„ !BB€„ !BB€„ „B€„ „è„!!@ÿÙdipy-0.10.1/doc/_static/hbm2015_exhibitors.jpg000066400000000000000000002217221263041327500207620ustar00rootroot00000000000000ÿØÿàJFIFHHÿþCreated with GIMPÿÛC      ÿÛC  ÿÂÛtÿÄ ÿÄ ÿÚ é:š2è\³¬@“8»Ç¢|àWe’Y—“ÜÈWåØâJ38qQ/3±ŠÓ$´”vj E=vóÔRJõ)¨Á\«k Ù5¬†g 2o&LÒ3“™ÌҜɼËÈHèQù31b;8³(ÈÎ…?…Ñ!3¿“5(ÁÜMÀ©“pL„Ì…'M!˜LœSôvGMvÄèš3»t y/2åg!~Î ê&P™7hf’¸Eai«C$9˜Ä5ÓM^'–kM0M¸ÍÈ’Eª÷àjÌõÚZ§èŽ,ë7(ØI3…‰“1–6DÍL8Á3‘•S¤âf4\J‘ÙÜ/ ‚rŠJ8Šc‹ø‘3²;Næw]’D&fq‚r¡nAä*$ZauÚ>Qä Âi¢„Sù—“·gléÊ âÈR¯…Šê‰î/\XŒédé •“v&‰à‘UZ»y,®h¨«KبV×fXÓ1døá|`wŒ‡Y+FÉ]¹ÒD™ÓlrFKZ>H™Kh¼É@•±S¬6™4ÇbyÅGb°‹:‰yב8$³’%®Ué)•˜S¢ëÌB!I×WbôúFLDÉ»(.TÊ"ÞtÜ%fñ:#°%Ž*2ð)É¡f©2$Ì™©‹gÁEãŒ6ï$ P³¬£]RÐRe™¡i‹É2OaM;4JÇUžòøYvŽ·^Ëßt!4-d¢'TÙ$("æÇœ5Œ»yX¶UÝT-³7j‹)¿ÏµaHQTjŒˆ+-ÚV’>é•Ò_©jFŒRQç¡]–Œq;wL 6%„ºÏ§¿àtʲó<4sÁÚ†éeE8IVY ˆ&‹c®ƒ¿š$N2¢Q7’â…¼´ÌpE¼nŒHñ¤BƒÆR7Š+³vf®Ñ³×¨øþ:q9½&ý¡’®æÄ-ßü‹&C4®õ.÷±ê:5L_˜Ê˜Î¤ü™b¬¹ÅF±šœÔ`îáZëén5/Fù¤—ŽÍFæ#fc *RÝ3÷ å›·r®JœVv«t¯lÑ5ž ²QË.W'Wƒ’ŸMbu—s°z”PÉ.qW†gl™6g¯Aa¼£b’½Lc»Æ¤õÙKp%%Ïao9 j·xTtšd  H…»€8"Q¦èŽ ÎdŠ:Í/”(§Ný$úuÎÚ¬ùµtã¿H©Yô¢cƒj›QÕô˜VÑF îTé³+4 àœ 3ËZãjŒÄ,”ø zÖÈ-œ'Ä5£—§"Fk9t"rêFn4«™ðY'VJwn,ÜൠUuLûW.s³Y$ÒlÏ¿xü’©ˆÉ4¡å§Î(Æ6zæ¡ðjiM 4ÈAãbÓ(M"˜È¼•¢³—¼’ÓEsž8¤åãVJÏd†fZêK ©¤R)Y†Ò&RUyfâ’"x•Ò|ÇU|æzJºeÚTLîxžM àaŸ2­=ÞåIIëS^8íc2Ã#3*Õ¹³uºýZB•hkç·0}&žõ Þ$ÔŠob†§C É6xèY¨}oŽïµŽ_¸›šÂäOä–&f”–j…*ÿ›ÅçþÑÀxÔi #bõŸÒA®]Ó΄«y8$Ýó´µèlçö)óÝì–-šŽå¶+¥w qUú.¶«Ò€Œ\]c.:LäBú®¤ W ŲP'n½b­gO’î̾“gç:öä«af^]){uNãRéSØoçQjÝh‚ãj¥T1c­k1c-j¸;”]/w˜ÔÞ!Ê/óæ_jÄàÁu¸„‰ìq_éŒBãþ«Èê´òbóªï˜^“¦®ŽNY›TêRÕ5v›SéÐDEDü³/˜U=C9%ÂgÑ[êþS×¹K§ók•-½—¸â¾‹‰èL.Òj\ßw3¥hèªãÏ·òµüý=VµîÓçvú×ìj…V^kÍ Flvg\ÃjÉ‚ïm+g”!®¶szÃѦyïC´Œ>c …d†Á~o>ñX“–= y½ żú¨(·ä6y"®IV—&6ܵ°‹Ü’ ØÙÑëíã:<žñ™ÙÄÉ_9·‡ÜÀê,OCŒ’·;p¼…/Ž£ä¶®Ã«Ô6÷$$–ãrþI“‡-,öÛ—ªµ)HÉ,ìöq\N_ï<Î7¯Äsˆ°¼ŽT$¤í7Ûø£«òžÕäýsúŽ9ôÚ›c»ùî›…z.X‘‡fbt¼Y³Ít~Öu%\ÚÎ-°1§Æ‚‘UEâk$$‰¹NfFæ±Àô«v7o)^sW™š7'¤ðDÔ²št@—!±hÐÍ)hÞng$ìÝ"8È“S•Zd™»kkSåÎ$wq;ü~Æ~ëØâ:|–å—×Òlä48e<ù-ä¼–çØõ»?EÒQ(fêºÛONç¹}‹gxŒÅJ:8JË”8ß=­öÜËPÁxQ3 lýµ¢ž¾!¥Ãtî­q—Wåð¨òŸCÙœï_ÌÚY¥acôöj{Ž©Y“f„‚º,1ñÄðä¦RÏÃyŽ^—ä£}·žÓº]­Ÿ³åŽŸÈÖŽUc›¯y_a律Êsët÷=é¼iÓùs5s®¹¿I㾸ÑÑfÐàÔ*jÚa·‰\Ç2¢üjÉD‰×Lêà!7úC#Ðî÷nöÌ$†D‚FÀc,v ”ÚC(¤´±Áлå1r¥^á`QÎÊd*tÙsö5£K“='ŽQ¦‰–®Ew›Ý(ux¯$L™­Ÿ;ªÈô9е¬¤äŒ ·./ºÓcß­Ö¨Vo$þIhôsv®†G6µVŸ;GÂR½[–ðþŽÃ_Cµ½Óð^ƒ†ð‹R¯oùæ‘—Ñô7é¹>Ÿ#ªfõ¸×C¹ŠÈ‡¬9¿Xâ~³Ïz³›ôº·*RÕשkqþß)Z’é*‚Da–Œ'¢JªÅ(“x€‡¡³;‹G7Ü=™ŽÈYÊ“gIÆo¥ˆ­`ÎÞ&‡™¡YÌp<–± 6ª8ù*=žÊ8ó­_ž‹C†Q¤ƒš™ ’B“Œš±=h¹k0–’GŽ-Þœæ}&& žÛró Žfk†^4ôöp\î?0õ¿=k«Q8¤u‹nç{LLÌGjüf±UÓ¿gtkx0¯\\Sp°×Ú¦Û ÍhÛèt¶ª={4L^˜…Nè3ª Þ5{V”hº7±ÖØ#1HÉ!LV|¼ûKcUKz÷& DêX dxòa8W’ªs¬ÊzHuÉ*3³^D™ÀÞHS8È@Ä™Ø[ªÞ@@áH¢33Î"çGAÞØlZI† ½fAnµXZôp¾ßÎ#»Œ$œJœ‰9R+£3™¤<¥gM„€Ê €â›º”ûFVy¥iô̬c2PñjÈÔ×™‚wb$tÍÌñÈ &É«Œ‹Õë<­ãTšÿ—¾wfhžܬü‡kߥÛ>´÷оYu©ÌÑy~²kS**Ì5ì]ªç?Ñi=ÿœÁãlIô\Ícœé,=§Ÿg~kêijNÕê~3Yá}_Ð<¶¿ÂúD—yæPœ§zþXõÜ)Zr}Éõ°‹bŠ»ü©|þî‹OrÓrí†Õ¼£/3_3.︗ü¬¡µÍ!£œ±=à=Z?´ó•ii9åûX¿PñI_4öf]§;ãý+Õ|>cÉýͶÏ:סãÓÖųyïèkKÜ#ºåw®øþ3[ÌZ© “‹Iì³Ði0ŠÓHåp2¼ŠAs3®­ËÔ²âî9ŒåÓVeÐ%«VúX/©„Kéïµxµ¼Ë£2|wü{Ú¤ïP¿õü^yËõú—«ùSäÞºòítn-=y}Î~ÁÒò‘yz¨X©Xäû= Ùü <ñït¸úÿ…Q M7½ìiKQ¬Ô×°ãþ›kÔðÍ÷yyú!-Î]¿UÅ:á}:?Òü~gÀ¾¥ªýUðՇ翬Ùçã»ß,}Àú›^¯…cÜù¿¶/Nqi¡{‚V¯XB#¹øÄ ¡0Ê›IÔk$N‚(ä›±Ÿ²9RÕ¹®Ø+$ÓL¹1Hâ þo'aV}þ•nRÙæ„îëDѹºsúøÑTîíHZW½¡AKa-vW3¡ò6AÕ‡c/mÞ¶+*öZT¶:XíTl“ÙçšGœß3Ëqº¥ûãMài53TBžlSA˜ „ÌÛJz¤»SÙÛ ÜÊðš7sÍ™¶T“±T–jxwfz<†/¯©¤7iñ0´^D)ü$ Lü¥jŒåDÝí9KÓ9žð]…$R¨\Æ22TÇÌ‘D„‚’$B8ÝÄ(É3LÄ#&ìš 1–5䉫„C68C‰‘™6ú ¤¡ò@áO Èä~*¬Î¾:çf³›Ï0Þèí|®¬vógmf>–²R@ÎJ­Ž»Y "9‘à!09¦ä‹¤HJBà)¹dÈEg3´†òˆè“t“°¢L›Ì]sÊú–£Í÷€›É ±œD˜ éFdtÞ6^v€Q…”bMf.\#ÂE Œ&Ù•cfΜ‘òqÅ®(í¢Â›šú7›lj>:ylɷƹÚJœhóÊIZnJýk  ¹\: ä¡´9¬Z¦Ä"}kW«Ãz· ë¥Ì¬º†êÒC»ô^l™‰dÜJñùÙ'`D…Y ‘&oLXE„JO#A Á7[rÞ¥¨ó]à:3ˆ¸ùÒq‘Àׄ˜]y7£/FàÎ)yÑ“yדƒ¦ Š7ŒˆŠ.ZÒÐ\äYcÈÈeº¨¡I‡çá—R4wô8>³âòšðƒcQrIÛòfr:³¹_Àç Ú–Y*h·1¢]QBÎÉ{›åüÞµbyÓäëá61OsnÚâ$mf"BFT’'EãL˜©¼¤#±˜ŠäDÅbqcEwtXJá×|—¬j|×zt"LTˆ‘Yʤ.Æt)¡ŒÌ) !&ó/$þI*‘¬òÄZ…Y¹RhwÑ+ œPIÉ Æ}pì¤l°ôªŒ”·m‘GÈ/tªÜŠòôLÙ<°ömG^ûk 㣭ªæ-çõ:_O’)8,s¶oUÑûÞzòzmäªÖX(’w@„*E¦#œÈ—™Å‹ÎExÈlgb;ºëõo—î„Ø®É;‘9y#¦QØäÇtfDN70°¦ó¡v…к^w+8'^u†“s´‚å6ñVLiI ÉíâÚÙoº·[ƒ°_ÏåúW!" êí Fg©'±3uÁÏÄ´¨sÚßíâá0èA¢ÝldTƽw¤ÇƒÔÛnÔäÉ%fsf´–²ÔH’DÈnñ¢™F¯db*‹ÎÀDS"8Àƒ.·ãýo\ã»´É*ô¢Tˆ%æ^;¥åyD:bˆÎXœÌÞMçaKÉ?üÌ.Šˆ‚^r3‰œSOŸU<Ÿ;B¼zæ­MÙÖkÙå^g{5µ‰×{Y¶MœÄÐ3ˆÒLìãJHÚÉ/f Ž«rœ·8M]„…]6–SRi%dNçGämÈ „¯eTɰâp4™1\J$ýmÇúÎÁÆwIÊ“•ÚG7ŒT8Åœ ìÞ­“HÛ¬rK#"‚ð¤A$.f^qòqtV3‹¸2*!q2Ew3µ:9¦¥‰óÁq.r^vŒÀÑêî‚­×s:ªtZg܃ªV[UÞL$ Dá#ÆWŽÒFÀê5’2×o5dÐ$ñ£4h1–«Yj¶–š$FÐê‹J4À&â‘W!0›ºHTiº³’õoÿÄ7!"A#16 $0457%&23'8BÿÚ[/ûÂa8r;É"bÕ%«â>Y žÉyªmêGºÚû¼Â?yV½ñ‘ïǾW‚¹®1îpŒ»èÆ J ߌrP}µ<ÂA¹®K [„}â>éýw’9-ç8<üáÔ³7äC”Ýz¦Ú‘û¹uµím¿tµgh=ÊÜ{À÷[î¶Éñi¯y·ß¼Ü½îÜÝ©¼Úq÷KSGºZt·ÙÚÝh®.HŠâÜÏÞ­È{Íž½êÑ[Y(ýÒ׺Ûsµim¿t´ÑÙÙèí-ºZ;Kcat Òã’­îˆ{ÕÑ|·åï¶ÃßlG½XûÍŽ½ÖßX|™± –™?»ä$øÉØØØØR„H’ÛlwÑûãÍuL˜:o3"ËŠ!®ÑØëŸxÒ]É,9¡°Œâ ­µ*ɬ²Õwõ.“r`õ^”£½’ér[aTæB¨Œ­¿kòºò&ý¼”j¬Ò{ìV”œeŽ–‡L¶¤š ÏFFÙé£\H‚´Ið Â4Ÿž²If´ŽI¬ÇF“t•¢5ìÍÍõLuR ä.žÌ’8ùüPf®^L¼‘(‡÷Ó@Ö3‰©m ™‡"µ£ˆÚÂà$’¨HÑÂY‚°pÜ!Ú;®ƒÄ—QtÈ´Ñ…ðq\¥(@ùë(%ÃŒ’N'T¹à”6m£ W­+@н2cßP…£3Þ úH}‰$<%(W&ƾ/¦Û2‰æ9xüËfi/$ãöè2uÅuL’o'J’/ARcª£ WÑ´ë“D:Éè7º@Ü0ëM8 ¨}OâU†¯—'Æ'ÉØBfÚEJrR¿„¡íÉHn{¼ ɹe%Do:kgød¸Æ·eÈýšRnÄ_mÛ¼ÏM¯û,Ø>/‘6=* x<„^„C0¼$º.ÑYÇ”u–;[$—ná¡1®×K8Ît~ªÚZ[:˜øœXlÝ,ñË vòñ[JùjóŠè®’=ªÕ$¸óÛÁ¸Õ!‚ëå/¨ÏÂk_†Â;J¦Ë‹n”Ú)µr-· z"uÔ“PÝy )Å©$çÔnØSÕ¥JTÂî:Ê¿ˆ‰ÔÒ:£¬@Þ"_QÔ¿‹jW•+ËŠ3‘Íd4Û„í|Eš©¢ó:·P¨¨}¸`Ì’’º„§Y´Xù„Ø É"rMÜN¢'“{—Ñܲ¨ýXú›:º=…Üú¶£WeWE…ê#žàÖO\ó4ÔuË$¨ ŸÊòVš3Êj9EE¦-±ù“}¶¼Êe-sñí0#BÌšžETkÜÍ2ɬØC³­¸œÉ“Ëa¨E“kYQk^åiR«˜K˜S)ceÄ-H–JAfKèZ[o{5™‘6©+uîºò3Y’ó«ŽD£DsY¶§ þ3ófjÝ¡±Å=A¯CCAH%#ò#Xæ c˜Sžñ¸"36¡È÷±Y¦\¬zÆ\Uð“õ á4`«æºÓ%ª$ÎnG›Ü+®Ê‘c!–¾e²eMå&T«èÒ\}ȱøæ˜mx©®Ä~L¸ñ˜½±vL\ŠÊ4šìƶÁ„ãØÝ‚>W¥v,ìbÒ¾úE™GJ²«ô¸¼ÁçZEž<ë=Í ‰'É]¯u2D'ÞGhãMÅpCÓ’å{½";2q¹.6üL8Èñ¢m;È4ê_i¸ G’´%À”’è‡Ta´,)AJòjð¤$ÝølllllöAkCeù¥_™žˆ×°µ#Qƒä ^R¥ ǰlå#¯Õ¾ïAˆwwPë”ܘćI¦GÈAo¦F:&fü$8fšÇL•LެŠ6ù¹O5 ˜¶ÈqÉ6ÜûÉ]8Wsk¬¡zƒW2¿°¯¶ˆv3éd#-·Ë®ôYà,Êì'4¸̬ IÉã8~õLàî(]7m˜Ó19‹*œiN_c®®tzÜâe6Á›ÜðrRq´©²&ã4„$ùÑŽ^y­éäÕ«‡µ+Âù+ò0`ÁŸÀÔ9×#Ÿ‚o5>&<3 ½üõ§yløÙsjáA‡]Cvií\q/°ÌÈ\Lˆe–tXÑX½¥]t§SNð ‹I/²5'’V·”'y­K#WŽ ¤‹}UÜjD“èÅr¬ˆŽL¿U‚Ú8¯«¢„ÜJôÕ˜Ú;¹ƒº’H÷’ÊÉ Zb!ëö\n)½&)wí†=éä*ÚR+É$0Ék™$‰%±*s AÕ‘’I/¤Âc)Cµl6„¦Úg¬_”X­¿C|%yÄ2+á"dë8ˆ‡<9Ë帜~ZŠÆžm*Jà­£:¢lEððâ|Õ∗Qa´»2V¶d)#Ç'ÂÞM&JQÙ¶Ë,M| QJ…ê)ÌEi%Ö Î«©‰WcW"™ð4F8‚Ð©ÇæÛºÎT†æ`î5e].ªØ’ŠoO”Á`Xù&Ûq¦:N!Jй+‡é=”÷/=*¥«Á ·*˜•zò¸½/¨)ÿ³Jaû1¢•MSzЉ’,&áZtk›°Š‘ß×t¡fk¨‘ê6@’O©7ĶóiRƒ•j[Þš4¦püŒ¹ •e"d”1¿ 6J[ŠÓo«“n%Ô΋ђ§RMWÿM)?ÇšA²…ŠdêÞ÷û¯æW [t=ôÑßÎ#ªºys28É!­Š/Íì—Yö5 XEepFÜõ>nWƒÖñõ%Ƭ8-Mƒ"µ/.k‘Z›ØÖ„*TffB¬kº®‹«<¾á'c"ƺDKÿ±x?µt$ÏÈ-íbct3-læÊ¥É¦WÏÍ+ZŸˆ-•$`t]g²¬µÖf÷’;œ[)yÉY­"xÃ}Ø769å‹¥fã’=S)2ôågYU½œlø­nitAô9"bcýkcé[f@˜p˳oc¤U :ˆ¼ÑMLb$`Èá‰7cÔ’“äÙ—‚h }GUÓ½®Df•ÉGZ¼ÛJÑZÙ7GõÆ@ÈT—ûŽL•¬Gmh¬»ýPyæØdv¶‚Žk¶6²&jÂÖ´ši«(mª$e´þe©=e¶÷¥3.o<ü—|q$Ÿ;]ÇôÕI_Ÿ°zh£3r3Ì%Âñ"ý÷ÓÕšÒ¤)å Ÿá$¨z~Dycõúˆß&ÔÔÇ\I—Ó¾?I¶F]"éhd ¥$)N wï›äX*¹b-´â KGä–â\sJäIÿ®‡€Ÿ)kÌU˜¸‹¯BÝö¶Çµ6#BDg® v'ùKŒRá|¾Èùy³ Šø¶“b)J2úãË’Ì{Üg«Ô܊ï2ë‹‚|i_éc0^}0cÚ펗ÝR’†Ü¸fz¹±• âB¢ãUÑ« bá/± #ŽÍ•㸤xÿ©‘í)C¥TÉù•¢M¸ $Ùæ?¢]`ˆ¸X¶‚;ÕÂlILäç!Äœ¥ñ¥`.0Õ¤Çñš«òÌzZíñ»hgÒ‚KèÖÇ&<£eÒÑízðeÓHÂR”â²$&;_K­Vw¤ˆòoÉÿÏd69HCdÙÿé*¿é}ôIî䃙(WHyÙ¶ßÜò´qmSùƒ¿š#ÝËeÛ8¬ØRŠoÒ‚‚o:Þy@ªÞÕTÇs‡~fÜ5(vmêŽJ«nÑeåÙÏib<›fcvNKüHÃb+5þ¢Ù²§è­vål¾æ¾ ÓXb¢Ç¬wAiÙ}ˆüPP=m"îæ=%jªóJ6¤ä¨'p­™ÇB‚ã *9ÇÁ¤ÍŽí¯à¸%'ÿvÆ¥­«´–ãžß)'…ÙMbóÈRþ“ûèhÅ ·ýHf c—ŒKµq¹³N:¦Áµ•Ô6˜eûšõ{œä£õ—᳞j+·ÓɇdÊ5¹Édm¸K*ö#I¾\u"¡xŽIýŸ˜‘ƒœjÎ^qëè´°«¯È+~IŸ×­§CþûÝli6Í~eùôiiÑâY,ÕYáÌHÞj§šj»Çí¬ÕguÎ0SŠ4$Ü%w’ÈÛž£xœ!¡¯<~œ<Œ±¶™i¤üLˆÁ²Iàçpà7QU²W…o‰È} £5-)'ô’‰Å2óÎ8ë†[/qšÎp÷9áéržA2 XÍl2ç̆‡T·ŸR|úkß“MKµþÕý ;ccCŒ[@}-ÜÇzÒ_nå-TçóeWeäÅË´y\žÑ Ú}ö$Qk挀|Ó|‘Þ:ǵ•j‹8ºé͸°²Z~¶~¤ŽgµÞ[I¨‚’ÚŽM}ZÚ½@¼SrìfØÈJ¶dg½Ž©’MN,¸¯I7R&IØ;É©<ÁŒOôå|ÄÍ®ýÝ ÙhvÑì¢I¦VW‰· LšÒ£â´8Éâ iF“!ÄÁ£dmù4Ž£‡xoºWF@Ò ¾6€çO@Ï@ÌrÐ߈Υ‘*c•ÌAKVÒœ­;.16b$9•’…m‘«]wÀÐÒˆlx1äó_VÏgùøoZW#jÑ6âÚ43aÅ%Mý´/ <‚=ÀXéC3q– <®‘™tžIš•µxR%>‚ÁÝSØ Øõßpä†Ú{z"òG¾,ÆS¶±œs器a©¸ßrœqÕqQlõ„›y‹ƒQC“k'Û7Òº˜“fÔæ­ç¹dGÑ2óÜo!{ƒ,¹hâÞEâki!R$bKªaÞ> Óï_Y¶M¨´†þ°ápBPJGL‡$Çr´“+5MHb-gͳ±¾›:*ü¹¢3u¤¶M6N8êzo6]GŸŒHm”s}ôtŸb18Ζ•¼Âa¦ÍoHŽM ÏA% –PêœO‹óð’R ¾Iò) Bev×ÔEôtc(v±É-Dއ_í:Äe²YšˆÇ$%IÁxü¢¦U7•"¼XJi¡·ÒçÙér9ۼ̹Uí½:OC¦ªÙòQ’IA” Û®~ÆéV*^&pzˆãñ#­Ê8[‹–ßÿqaÇiîdšWœd 4·Y¶ª.£6u´ûv¢<¬ºBÙÒÊTÏû¤µþ,TAõâWöx{ê?ýQ Ì{löIÞÃŒ§‡M:Ñà@Û1Äp Еނ~R¦%EÀu>IV¾xl¶v,fM˜_kÌjÖSØÝ]åk›$žßK†„¼·ãÃi•XIN‘!Ô*1vÛrvHÃMãôHK˜–¤Ð_»”µÚP×>üÌcväç2øl¼r4ŽJäá¥lñ4²@¿wÈ4‘ƒlÁ ÒCÈÆiÐÍoæãX³yߨEùËÔAŠÙ\Úãß÷Ö鼩sðch‚˜…}ܬn¾4–ñÎêY¨n€4 V ôaÛ4GJe7L¶ Ð #CˆÐãð1¡ÄhõÄhhmJHò6Cíöøð#?<hˆµ~þf‘ øæ9F<ïíÖ ¥—kçX¢kƒñÍ”ƒeDjÙ§ÕÄ ½7ÇWì늈ld¹]Þ1˜Ç̸Y­‹Þ¡_óý›â™;Õ$›OT`GÄrvòj,Öú^9‹U¼©øµ´Øõ_ê;Üóûdcù|µä lb9Ü€³¹¶k— ÿ,fžžDÉxåŽY:]ËÖ9µkt· \Öd÷R©ƒ÷7vs+²…Œ&ë%¶xìrÊñ¯#_¹‘ü|¤kμ|66>ÀÌô¥^9}XéçhhhhqF¼&#D·˜5Fe+(½vÕ«ïÖ&z~š×b¡ÈÆ~Iõ c•6p›ì}‹Ìm7Ù%_ƒâ¥CE‘})‚ÉPëÆ‚‰ë?ªŸãìwü}m»?õ;ĉ>§Âm 3bÙÑzb[/QËXU!Âòi ‰‚`Ðg4•CEWë7¨%¡ p©òOLñ̎ XÓ¡NH4øãðÑòCcÀòIÙ þîþ¤ÍH.¡Œ ΣþV†¿‘¡ ¶’ë+¤kG†ËdE­¾¯ŠÂž[>³ÿ‹±Rߥªe Š3 ž4¬Z}§øaÒ£#g—¦þ”§~hÆÿè?U?ÇØïøöÚ{UŸê{Á—ªSThUåƒÒâÙz’ƒù‹KÁ²h«•‚à“[=R«Ýýjõ´8ƒH›CU`¼’…¼|¡¬åS`Ð Ð &CCŠuÇCÈÒFZóð×î}ü ôòt48ƒ/çlzOÊðÖ½>õ-ˆ¿!ú¢1FoqÌiüRÇ-õJÖk’ÏåÉ+¿±–©X^I;Ä$ô÷]ÎÆýJɤ'/ ¢&ÛÅ-09Þ©/©ÈÆði­äc Å'ãewNÅÎ>œ*†TÕó¡âÖxMŒK·i³ëDPcѨjrìnmñ š÷l±ÎÃ?„Åï­ì’ÚPѤA¤G‡3R ð8ÐÐÑo_¹²øà_£ÆÌrýÏ#˜#/ކ††¿–g¤§jGÁiJÛ‘ŽAT›ºj÷²Fkªbœ8ãQ‰È'—+,âäåª4Ϻ©€ÔFy3üÝu-!¹ :×ØÒ ±ÀpØ6Á |šA¤hq1 i @4ƒH2Ÿ‡|qÐ21÷×Ã[2 qñ¯8èñö2àî«Á ÌÄþ'ü÷šmyÑX\ÎÛÌ2ëWup"Ŷ’û×ÞV¤™ªŠ}ÜÇÿ îPÑ Q¾ßº² d@¾þjð?ÌËé`¯Ž¼|h}ÿþ0/ÒÿÄO!1A"Qq‘2Ra¡±Á #BrÑð34Sb‚á$0C’²ñ%&57s¢Ââ6@c³ÒÿÚ?6Ë}ÇšÙæ…fv+EزÃéY`Y"íö-›<å³oh[/H[.å±rٞŲbÈGèYGb°V ÁDñ³Xð½M>Ûì´w4pD`€ (NÝ;7jq“µ¿œ|PˆåòÏŠ.œ,ø­¤þqñ[iüãâ¶óùÇÅm§óÏŠÚÏ矴¨óωFZŸ<ø¡5NìçÅm§lø•Ò&óÏŠé5òϵtŠ‘öÊé3ùÞÕÒfóŠéyÇÅmg#Ë>+k7ž|VÖ£Ï>+mS矷©l¡=Gœ|WHŸÎ+¤MçÒ%¿”|VÞSöŠÛO矶ŸÎ>+k?œ|Pš8ø­¼Þqñ[i¼ãâ¶ÓyçÄ¡,ÞyñFiüóâ‹ê|óâVÚ§Î>(ÏT78ø®“T8ŸÒj|ãâºUGœ|WJ—Ï>(Ôʼ>%t‰¸H|JTùÇÅaÏ{á%ÇáÍ{ý7ßšÊÊÊɬ̋n`ƒŠÎV×N)ϹHƃbmêBßÊ Ñ;p²Ø¿±J×7‚nnÄ^{º*[ j-h—íòðF VÀ£‚Ù]–Íl첫-®{Nåu¢³x« E¢õ ®³‹ý ªÁe·‹Tìë19¢ +zWYj¬µìDzF-›VB8¬/õsßøs¶79·FÖ]Kj´ú49ö½“gX+“wbÓšßGU˜ö ý7¢Zƒ¡ûAÄwêwÚ­“‚{tY,²¬¥eN±lZw£NÞ ÔÆÛÖÁáHÙÀê¶é¡÷ÔYHË ËW"Û7Tr«¸,èÉ•mIòPÖRMdÙãµÜ1AYš›"ßÌJ΃‘:!•\pWæÑ‰fŽåmU–W ÒµæÝ͇~„÷þÖ@µCè5™ŠÜì¿@:È8Wf[+m`¶ÚÈÎŒënt…Ò}+¤®”áÅt´jÚx&Ô1tˆÊ0ñWœ…+™ 3¿rŸšCfuBÚ>÷º‚µ¤dœiÚ…,:9ªZ!#-{/›KMÁº–…û>¨Fš]ÎILèØJïu‘á½ÊbàÞ º£ùºf}{Œn/îL©§☑ê_4[t§ØŽîûn(¥¿«ù©MD8jéúQ«™¡tòF¡2µ® µ‘.”Á¹2póeJ)gf@ñjm#©ÔQ¹×ONç€ÖîRQ;ì!EPw„ifel&I¯¹:íò‚/jÎúßô"së¹u³—7rßÌbµú Þ¤7rº/m•lCB}Xˤje¶[UµFde[U´FBƒÂ2£=“ÞKÉBi[¸¦V¸ J£šw¡S1†‘Ö ®­õNô` 6 ‡ c,ùwû‘f¶Yl¬²-ÖÈ'RÃæ£Iá?§:‹ªÌ(Or B¥¢Äh ¶F×á½t¬Zš@< ¼Gû§ÿ…j;+ƒû«ç¬?ÎöêÒè¶”íÚANÇ™´Ð¸x%óýìèÝàßÅ|ï†o1‘ü)•˜Tòlõ?º¾n¤?Ý„Ú(öP¦„7rfÎö·­Né#gÕ¾å œA©Ú­™§¬­¿ÓغS🱩ŽÄ)iwUìÅŠÁÎjcßð‹sÎ`û6ÇrËØ9´N 6*ßUe¢ fWO"ú"ä\¬Ks,¹SæºÎQßu™]\,ÍY‚6"ȺËh¶ˆÈ¶‰Ó'T„Ò.9²æÑ eu˜†Xí.…TSõÞ²¸pæ’¡Ñ!t—7©[»Çâ4øeDY˜.= : 8iúÔôTùÁ`°Ž(T:3¾ãî”ùä`t];N±!miO–@A°8]„-›GŒYMÊ™Ì:8¦†ÈMÚP|Ê'Z÷rÛ6ÜÙdŒ…ƒ[£:ÞwÀ} ¦Å …œÈÝϯ;ލ”Js¬*Ú”÷æ(”Jººº'ÎkÕî.‘u‘¹=îÉÏ(—9Q<ذ Ò㢡d1ºóîMÅõz_rséÞ~¿Céø,ŒŠ_­' ê?=ê®35ÃÙùñRÅc½V4¶[•q¼&=¥2L¥ {‚©êeÌ¢Ä^Ï)Cˆ jEî¶±¡#Jê¸ÙÛ¹€Þ¶iðÇ=ƒ®¥lSh7§áÆ]¤¶ý…:*†î•Þ+5kwHWM¯o÷žÁø!__ûO`_8×ÛËÍ G'­”úªÎw7ü+kÞàÌëågøàžÖ»Ë`=Ï?€BJgI¤&ýÿ‰YX_¬/öý(z>[lˆï9õŒTåÃU×½¬°¦â}üï€DXóY?¬ûóiÍemÌ–fDsäôäQDó®™µÌsz“ƒEŠºÌ‰ áÈ«ßrÜëÝÜê²4êO– 1œU,ÂÓ&ûh='ó¹ILÙ˜3i誖¡Ç,G¸'±²³)Ü¡!í4òïжt³4Œº*8Œ½W37ïnXN¬›¸4.§~W 噫K]55ÎaÑ J†y!*Àíé’’ƒ®EîVÙý¨UHÕÓÜᔬípÕ: N‰ÙÜ,T±ÕÂÝÁ£<©!ìFŠ3Á;h] G P„¡âë„÷½í³‡±2)\: ¡C{}©½-ÞMý©óT°ÙÄ‚…\£í,:S4$žßÜ0Èrµf«ÝjŒ -³–Ýé¯Ne£ÍÌíè‹§±H2TP‰bª">Á(#z’†4_6EÚT¸k€¼féÀƒcÍK‡ÇQ{Ѝ„Á)aæ°R²ê‹lðg™Ä_Ü« 0T¾1¸æ¾Êä,êΜñ!¿Šš/ë lzÁI ¶ÝÅT5­MÇñR¿cfð²’(êÙ˜oàTS26ˆÞ2û•DŽc,Íç@¦¦¦Ž;ËÖ>õ[BFVJÝûŠ‘²Bü¯ :½Ð$&½PáµÆíѽª<‘£¬INÁ)Ʊ“JË$dziÑ]2˜¸]ˢĥ¤;Ø®Së裑®‰ÝVÝT–Ê¡€Lü¤£Am®WÍ‘ùÅ 5ƒí•VcêÚíBlŽoÚ “çuœt[BÇܶzŠ[»¬Õu+¯Ú¾±TLèZfvª\iŽuÖ 0ž™ÏwÀ&æâŸ{h ™±÷¬¤sHþ2;êSs`¤†ÛÂs oÎÛ+í낲{Q‹9Uë`œÝUcœØ o?œ|WHœ}£â©+^ç†IÅb‘iw6¥ õ¬J›oѻǻ›8 8«šÜõ¦å‰ôçñ+bãÁ9IXC2SŸkë¹÷;¶2‰xn)²Âøó}ƒŒ¤µÍ9J²²N!»HÑ\ ‘¶Ver§nÑͽ„¨íQTdàݪr Ó~ňáòæ,;ÁÓ×ù÷§×ev… …uE««d$åW×ÓàÔ̓^ãùÞ¦¯ª©~g<•AŒKO 7jÅš—h>ÊŠ·)³–Ý Ú•=MŽV¬Ç}Õ=A¾GªÈ¼ Ž,xruk¸ 'ºô×ô"Ué}K–©³Ú'Q[šÛSâQ^7J|T»GÉî¹A%uÀBrÝèÔh…dÍÕ7¨íMÄjÏÜF²ûÓëªänRQ‡EÉÖå¢pýï€OkÝüÁ:W?ÊGr`Ìî`HEÄïD\Y0åz½µ Cr¸+"/”‹MµUšÓ”ZUœ©˜çÔ4Š8lšßJÕP~¤=k ©ÎÝ‹·…ˆÀ)^]m „<’F ¨#fIww•…Ìùöw«Rò;yéYžŸjÓbÁñ+g#)žç¸…JÖtVø§9¬ngnSôš‹:6ØI+§‘Î~ñ¢|½}›wû•LA‘¤úG½6x›õp‹÷(£-%îÞV5—b¬Œ†µîß»Ãù-ÇD-Í,²ÌìÒŸJM‘Àè«NÇ v6ß×4EÃî~ÈöÿªŠ°=2WfDê™õÐkÅ«¹?õ/RiT:¼ª±yŠ–ž97©#7˜_PŽ]ËpÜ‹AY,ŠÊƒ7,Ïn–Fiy—&Íè]÷¸'Ãsp˜Ü¢ÜÁ¥ÃE&Qsß™þ_3÷¬Ë2¿4©ÊHČʺ;WÍìíL…”í9Ê©‘òËwóP~§â£ÆðñÁKX…'zÃhí&w'Þ±J¤›&îõHóÎoС~Z`֋渷ç½Bç†H5NgGFÕ'rsÈ¿Hå:©±V³weŒ·3NõTópPDÚxmâ™T:ºžÏÅEsžéw=J¢œ–;SPñ–›{¦¢'°ÇTÍÒ$FûOò\¥¯ HϤüÇÁQK³ ‹Üëv\<÷„ÉÓv•c‹µL”ñT.Íx´…\§~©êæ¢-!8Á»·®•´º© †¡·f…IMSÈE¶d[}Á§3U§6ë)–Ò^(…o\Ÿk[Fëy߬m¢dÀïj»P âìPï²·6T#%?Y-Í7”¬,¬¬Š‘9T؉Í7œŒóyÅG]3[Pª¢eLA½CúŸ6Q³“fíÅVTtx´Þy¨cÚQÊÞÞl¼Ølû)uÜ„ñ¿Fkܪ&iú.â™%K[g²ýÖ['JìÒø'ÅÛ•ÃDÈÛ s@:*†—Â@U=hòµ§çÔ¤ÚBËǸpN•Œ‹hw*œûs›Ç^jªq+n7¬œØF& üîÒ1íô‰âQap x<®€Ö8¹ÛÓ/šåŒ¿y:ÛT©¶*»-Ö­ wjÛFç®Ó¹8V·¡ê¬ðºÅåC,“fíÅW°gµHÜ­N’>(49:0²‹"‹Yx'Bîd“\›ÍÐ]›Î>à…¸ [½FäI"ÅyA×Ô,ÅgRHZBîºÕOå.žÆ×R'*ŸÑàŠ³oª€d¥»Š‹õOmT³É1üØGèܧ±LæŽh‰Q< ÔSÃ'!½÷*–Æ÷9û͹Èz’ž)ä*#6!Dý¼ÛAäÊ¥öfFïvˆ6š %&ííø*‡ºj—8óÖD&nÕ„a®~y4Œ{}b¸¤xl=˜uÿÊ‹äs‹Ÿ¼¦}Sœ3+ðÀ×ve?žåULúYÝ÷„lÞUSÛA‡ØpÈà:ªžªF:÷RJ~nÚ~èB·^°M•»Hü¶;мÜJ¡Îùû– þ³Z­ÆÊVBï)«gfÍEƒŠ-š8'²ÉÍ@]eXµ#¾÷À#q½ml©ñæ îa[TeìA® E*)Zíæ+?ÕäONR3;r£G´ºï(è£a»µUµM˳bÑQ~©ãÍenl'ônU£úËûÑEÝ«xÑ`æ7GûÁK.K5¢î*Xjdf®õ("hê’jkê ÒA˜v…Ò%˜Í½¾ ¡ÛiòÂ:ÝuZ= 3c&iwÃЫ&Èc{†»ÕM^FºNÝÞ’›4¬7A;fo¥G55“y7Nˆ¶ œNÍ7z‘ä»ÜüîžäþïþÈòXŸï¿íÿÙKÉŒ.~ÚöòšÞ°|MØtýo!ÛÿYAG‹Â$¹ÁFjü¶Û×ùöª,>— ŒÈçkÅÅb˜·MšÍA»ñFV–èeÊS|ÿ¸=ÁE U‡WBèÄ.Ðjš¯9£9PÃæâäÖÅIžM´™Ü£VìE‚÷â¤gö/+‚,EˆÆ¶z, ¥´®Îø™Îe`­Ï½o[&¡¸G˜±®VNj#˜§°£$½¨Í/jÛÏÚŸ$ŽÐ”B-M¨ž6åk´çʲ¨çšf'—=Ùœ‹4Ni%lŸÁSÏ53Õ3 Ùí/¯Tu¡¦ÏÔv©çcËv]gÄʘ_ÆÝèU1òenîÕ&CϹSLAÙÌî&ôxÝvõÝãþ‹¨tŽ-QÓóܪ¥Ï/WpÐ!dctÊÚˆÍÚåóî)ûOrù÷ý¯»ð_>⟵÷~ ØÎ&ö–ºMw໹©kêèõ…öüö/é.%n ¦¾²´ÞgßÝà„O,ΜÅœñ_9W69ú¶µ’ÛÂŽ¨fë*lRF 1úzSq)\žézÎ(VTG5®¶alÚO­Ó©\w'Bö,«¦=ÿ³ÆãÔ7N“õt¢lÙo¸Å>WOV)œ.çn·ÞLWîhñü±ºžgDýãDrËr¿1‹#ÌèîœË,¡mlžr¼/b-Eˆ±YY3-úêL–êó^ȹfFåQM®WÈI+™Ÿ0 ôj™l›@w…!ƒ>Yõ§ÎXàÈl} Pü¹ê=MªZw–ö¿yôzf!õ[8ú£òUu ÝúÏ為²±WZpZŽa¿Esǘ²éÎ\÷ MÕ­ª¹²¡ä·(1:YK|z‹ÜpôsêSRUSÔtyX[ Ó)ø(ù/ÊI-–ŽOð‘ïMª–¡…%aªe|'K¦=¥}YVY¼VV<Å ï]œ 6qéTÓÂ>¯ž×çõST6*a<~FŸáþ[ýJ¥ŒùÆž®×óÞ©<‘m%Ó6¶ìjå§v!xŽ¶×¿ýMÏ+YÚV3ƒÃ‡D×FâoÚ°Šñ ½‹Í…¯¢Å(ÙAX`a¸Xg'¥­fÚc•§wiG“lƒ,r÷ƒðX¦Q†IgêÓ¸¬§Å)Ý$Ž"ÆÚ,K— ª0¿Ô{B§äõ-Fkœã›+´·Vÿ‚‚Žj©Û "î*Ÿ‘tqGš¶SE€öÿ%]Èxz.{m}aK ‘HXñb(ù1IƒÑ6xžâK­­» ìô"¹5ÉŠ\j•òÌ÷4µÖÒ݃Ф#ËQä­ôsç<îÏ–öÒÞåÉ~NSc»m»‹reÝn7íîX ¤¯šº†9Íð6X}+jñiŸ¹îk|M—*¹3I€Ç¡yv{ï· vɬŸÄz4Ä´e'ORåO„b¯¥ˆ’·úEÖÌ^é²dÞ¡ª„‹fs}©®ŽoÑ·7yÕ5ì„ub#óÚ¦©šGçàÕYˆÍ+2ù ãéU:YKŠ¥‰µL‰ßhâW-¹AÉšXe§‘ÎÎHë[³Ð"ù;KÊ\Qô•- awV×ÑÍoÚ¹Q„Åc³PBâæ³.§~­áÞ¹;„;Æ"¡àã©ìhÔŸ Þ•Ë.@Qà8`­ sܳ³t;Žtõ®Ja8Þ0Ú·–ƒb-¼kÄõ®Yrf>MbL†"]ÛpNþÂ4üê¹%ò}Ia=:¦G319mmÃKê;nª¨ª)+_Fñ×k‹}`Ùr£ø_'01Véœe%­¶–ÍÇ…í`}‹’عAŒ²Œ’½ÄphüÛ¼®[r—“´QÖQ9îmììÖ6¾íÀzoêWº¨äF#Æ2$v|u´¶¶ô_Šä_&(ùKU,S½ÍÈêÛ·Ò Ç°öa8ÄÔQµ†Ú¨ÇLÖ¼Ø.{ŸKƒÓà –;µƒÑ}âl;ÊÄ0øËšjÙ76Ÿð›_՟ܰº÷btÝ$3+äß{›ÁÖá~…ò…‡Á‡r‘û=Ò€þâoh¿­5Ë9PÕ>6Ø&Gék xШÜËêVxøw>Š›ÈQÇväm›NjV6åΔÒÓ¼vsEMšPß@ëfžÕ…Å5,{;=Ìì!¢ß÷_Ô«¤ŠŠ7Cˆ:eÍ«sy¢Äú¼Û™§þ{ ϵb44ÏÃÞÁ ¸Ó±S8t†w…Šaƒ­.Ëe†àmê6ÂLÚ[rÆaÛcÙâZ=Ë”O¤¥dqé˜ÛÔg’)óÆlBÅ-[€í^5°w­rLZŽO½ð ª nQa×f½³¸ÿ5Iò]ñÈ,Cd÷¹r6&˜ï7ü(j¦«Ä¤kÎŒ6»ñ\’«ž*þ~£¯§¤kuËf3oÚh'¿Qð\¶°¦}ñþW,‹ÂØ|¿{àñýk»ÑîE¿üò|-Ò¿ƒÿ5öÅOýGÿ˜¬¿íŠoúŒÿ0_(¿¡¦ïwÁr[?pûÂåÀÿx¤îoùB²p¸æÚ9‰H±)ÒÈþ*@ž?Ú0ýöûÂåW%ÙÊŠxât»<†û¯ñ ’Ü…‹“ƒªÙ9“3Km–ÛËOiì_(zr«ø?ýl_%ø[)('ÆgÒ÷þëuqñÓøW'ñQË,"®’±¶¹pÝö|¾¶îõÁ[€cþòûZ}ÇܾP¨Æ1€SâÃ5‹m÷d°÷åQTÑrbšƒ ~÷Ú1ß—Sëu‡ñ,O“;o”h'êÞ6‡¾==ù/÷—ʦ&j1H¨º!s÷ÿ­¼WÉÆÍŒÔ.ÿàggy¿}‚ÁjÝËnLTSV‹HK‡uÎfVƒøTðÉO3¡”YÍ$ñ¡Ußò¸ÒÞÕòOœ*~è÷®Yÿòz¿¼¨° Rº-´qÙžsˆc}EÄêºÀk]„œ+ž¬ eiq/é=ú¬bWá”{,Aæ\Ìtl4ù2ß9òCº¢Ç7[}†õ3C^Ñ 5qÅ}kãsýå ú,þõÊþEaÂ'Ä#.3°f.s‹³[}ïèìµ»•…•ÜW7BW&Nön)•rÓH)¸ƒœ£ÄGÚL¬€¶÷Bª2l© ãM-¬†œÍ™£z•Ñ¿QÍÉøø›o¹ºþ}vNŒ<ê¡m=D¯ÊÑ‘½]Ã}¼T³6‚<ò§ogâ=½ê»”TTñýIÎïg­Düõwk¾+•RI–j¹3<²b$9ÄõOÁrîs›¼e÷+Òr‡µì}­*Iɵúé_FõÊ,Biú ;øúà¹)ú›þ÷À,;vZ_öNñùìUïdØT¯a¸,w¸®Nâ,ë eÑö äØÄ&é4λ}÷N‹ Á!ÁCªj »x±ªá‰Wºfù;‡rÇ0ÇâÔ‚;-aý ©ý¨ð+‘µqÄd¤q±v£â«9ùjËáë ”“A†àb‡RGm‡bä#rôŸàÿÉWr&¦®¶YÄ gq;u‰`órrªàó{éû¤,c §åNéßn->ð<'y1ó ª¨ZÞ€7Oä.QV3Æ%¨É:à-íÞ‹U#ט „Xo¢{ "ÃU‡‘ó„!Þ{}ëåJYâ ¦Ù<·¬wp_%õ’ò‚VÍ#œ6Gy'í±rÞšzÞ]MM»žc¼±‹Ç(y„SS†gû ^Û†®ãÇÚVò£E]]3éËÈÍ{_Ô¾T0ž‹ˆ³`êÊ,ï¼?û—ÉÖ"ÌO“¢žML.·«Êiõnu|¡â¯ªåd.ý^À}íäû‡©aõôÕølX™°—¿g¯r‘Õ<¨åÉåNÿOþ#Ø=ÊZERSÒ2<úX ÚÍm…÷ÍÖò—GŠbQQ¾ÐÚù¯¯yÑ|¦à⃬Iõþ!¿ÇCâ«ÿåpÿ¥½«ä›þ!S÷G½rÄÿ½}r?ùÿ”QGWw±£3¯®Ü;¯`¶4¡´lƒ_WàS°l;Ä¥k#²Ü—¸ ëy>GRàîËsk Øl5Ìnc¸ÛªãëÜïÝ×ÐN«”8¾ „áîn"FW‚2qpÝ`>;‡j‘Ñg;=Ü/Ø®bw­-Ìw"Ò·ªw„ÏiX ΚŒ¹ÞwÀsÝ]\s2Y"7a²ž ÖdºÝëÅèé©ú<ç.»Ö5WI> d€îâ;G0qi¸SÖUT€&yu»T5S»<.Ê} Yåùå7*9¥ùâqП‹bonS)ñZïPWUÓ °¼´zbu)•Õl‡bÙ^ËéªÊ¢®¯¥m ÙuQ[WUúw—wó|ïŠþÙÞ+ç|WöîñBàÜ!Œâ­nQ3¼T¯|ÏÏ!¹ôªzªªKôw–ß±|í‹~ÝÞ%UÏWZAåÖíTÕUÔ?«È[ÜU^#‰Ö3-DÎp쾞ƶh±)!,ÔnQ·K¢ÔæŸY œhB®Ä±\E¡µsº@7f7TuµØl¦ZY nµ® ´ìNÄqWtí«¶ÞuõÝmýÚ*êüKx}d®ÙÐU¸Ö3ˆC±«Ò7}‰¾ªƒİÂî…3£Í¿)µí¹K4ÓÊd•ÙœãrOTxÖ/DŽwµnmc¿OJ¦­©¢œOLòÇŽ#B«q ÌNA-\¦G .ã}L‘¼9¦Ä*ÜkÄcÖNé5±7NÆñi(º§vÊÖË},= ‡Äp×QJèÉß”Úêz™ê¦tÓ»3ݼå`˜ö!€N騈p¶¢úoMùQ倱Ì7cî½—Éæ'O]ƒÌ—œ9Å×ÞsßÒ ùBi<•™Ãaÿ¼'—Ènãuef«`¶k!@¶ˆHsp7¬Ñ•ÉÛt'}ï€ú×ÕI³Ív+«óYeV<úðæºº¿Ñຨ°ót°V NrQu,`…:% #cþ³r–1œ–î[(Æ{küÖDX‹#Ñ%˱ô²¥ m\¹/mô¢9ÎűÆtk E¥jS½€æ½Ö[¢ËsuUìš\×fnŠ\[©¦èòÔ=ÌóK‰ ý«zÑpCœ, ­šÙ•g„,¹9ú“¾÷Às_è]·aee•ö-U¹¯Ä ZáqÍf”cìV!q¯5´Õ è‹•f¢Û!\Sâ[<ÔÙçU°¤fSÑ·.x“šm$töÉÅa°ÂÑœ·g­KE‡ºRçI­ûB©Ž6N[¸Qap6=¥Q·¡t, äa±ï?_‡ËC.Wj8„aÐWçÚ2Ûw¦ê<3¤`u{úLJújª©é&ªlt#Gwïõ§aX-­×>¿p_7ò~¯«òžóÿ’ …t,œJÑX«ö®: O®Óͯ8%8öópW!f×UÉ¿Ô]÷¸ke§=ÕÕÕùˆÖüÖÊ,Á±[xÁ±Ñ„ò ÈJÙ”BÔ+ªqºÓùŽäÝèï[£EŠŸBZª!¹và±|¾µ‡6ÓžïÁT·ëßÞU3Õ4‹H_>N[[ªßëXKdvñþ‹`nÓÕñU'm+¤vò°÷¶ ÆHíߎ‹Âjjj ðë~ ¦’¦Ÿô!]]óee!JÊ ´+ßz·bÌ®‡0WÄ” ]½9­ÍÕ@¹2oBï¼}Á]_ûó]]]_è]_˜:Æáf}·¯­íA­?¤N û'Ÿ9]RœÐ {šOblMÛщìÞŸ½];ÉLÞŽõkƬ£mÔ±‡ªÑ|ªˆZcܪAÛ;¼ªC³©kŠÄâ"|ý«"©fÇ ÿ’°am§«â‹EE\FõAVúìÐÔ4ôÍdÎga(Ä,Õ¬¡…ø«5[.åwqV]Ypæ·>õuªÑrgõ}ãîÙ]]_û{"0jlyœ8©ŽPXcvkµã1›ï)ôà6Äê¶&ê:WM F™ìvš§´ƒªÍfÙfaEâÖ ÁMg¡xݘ#<ÕÌSµ¯¹¢ÁGRÇG’qt×PDs0kùíU2º¡÷*ŽvSfÍÅè©ÞØ&"ëi„É«›o‚uu%3¦n©Ú›§6á9‰ÌNh ÖæËtXäÔlº¼ÀÙw+•šëNk«ž 듨;ïpW ÁeVú¢úWþÌ £fžpš@=Ší0æ)Á¬PYÁÞßÅ äÚÉ£#µ  ÇWz¹L²² q )D'5¬«"1¢ÄZ¬‹šˆE…dö1„XBµÑb¹Ynµ vþfÞÈ€²óY­h@Éqj}ãî÷! Qú!3]éàõúZ=ˆ€#r€–»E1.vªM7/+BŸoyÌbÚ!¹íüÇ›Š(§îg#ô pNç Y\¡¹qOìCzÞ¬,¸¡¹PÞ†åÉø{¾ñ÷ÿÄJ!1Q"Aq‘ 2Ra±Á#34B¡Ñáð0r%Sb‚$56s²Â&@C’ÒñÿÚ?k•ʹ泘«”{Q%\¬Åf+:ºÌ³ûVe™\«•r®SÁxâ|SAoiñ@¹\¢\šâ(k°Y7v{fßÑ ,|–XýP·qr u ·qz¡d‹Õ $^¨ð[¸}Qà·pú¡nâ?t-Ô~¨[˜½P·Qz«s%¹’ÝGÈ-Ü~¨[¸ýQà·qz¡náõVê.Ku%¹’Ý3[¦r[¶r[¸ù-Ü|–Hù-Ü|–î>K$|‚ɪHýP²Eꬑz¡nâäŽAn¡äæ.Anbä·,ä·LõBÝ3Õ[¸¹TÖ¶M6[Ïk\BÕ]]]]d,F†ˆ‘ĬÂÚ"ñȦ¾>Ò‹ã©¡¤qYí[°ºhê®ÔÕaººÎBÞ!"Þ½[żYÖeuto³Uª×e¶U¶Y[f¾fŠÊÊË]ºy—W+1WUŸZ;¶—Xù·ºÀèµÛt\mÁu¤†[Ùj®¯æÙeö,¤p ®³L8!<ŒâjØt:-ô\Ódjγ¬áfAÁ] 器v•tVr‘•œ,áf]½««tÊ{œR‹••–Ueeb¬¬¬¬Uœ‹µ°ã·E¢²²¶Ê¿¬ÙupQ6@Ül²:"r«’Ûù©ÁÜA]{«š¬…dYD²¬‹v·kténA[²ci@9kæe5Ltñ—É UxÍLî´}Vþ>+6lÙûÕ8æu*Nœÿ4Ù36÷M‚··BAu¼ÐuÊà³(í}TžRÃôc0F®hú¯n«Ëê¯.ÿ"òÖž,Að¹· ñ¬±•ZVR²¬ŠgÍ îY¢5EþÅåŽ ²Ž¦&·^)•Ö[è9¡$^°Yã=«ª²¬¥e*¯ë<ÇÙÃ`67FV»ˆD‹ì²² ÙFn»IÕeYE Å‘dYE¬…dYVE‘nÖí•t®òé OoÃEudgªóñX][1¿Î8šòUäe:› ¹à±*ãW7WÐ?=€A„ˆ-,ú»—%™g²æ³…œ ë ó~+;“exPÌö¸ÝK$[:ÜÒI£ Š4®ˆñ^G-´#Åyü“a²Èr¯!'Ñx+Ȧõ‡â…-G?Å: ¶75ôï[ù9¦TH;P­.ÑÁIÏ%ýɱDÿI¿‚òz^м–"Hê£HGjòW¯'bŽI¡v[¡=ÖrUa&QÜÙgl·%}­.'P¾òâ›Ã]ŒjƒPOxg¤AŠË*ʬ¬­¶Ë*ʲ¬ˆF›­ðÖHÇqì…òÇ |FÎ ‹¤U~ŒÑfö? ~IØëtsÏE‹b5•T†!KñÖúrEFÎŒa­—5[Ç ̯&Œö'R±0S©…íV*åhƒ†Àåu…~*Ü’Ë~Ç <]n>ôOš®7YÚ#SP îUL{,þ)ðÂÿg½"²ÌE–¦ý[”];O\yôO‚¹¶·QÆà4±×¹ Ö‚1²ÊF_€[‚Xæ•[¤£¹[kMÅѼáÁ¢ jÉtÆÛù lƒkB K¨ÃdeS{t?/ß±5®y°T1E¼Ü hnëèôNt?M¡Y[ŸH:½œ•T0¸]®ýþù©¡×ÛñüŠè¤Íu ûÍ?d@YQbÝ…$MN§N€„æÖÙ™Áo\·¯[â··¬·=Rš÷ÇÅo·ƒ­ª¼~ Ya?un©ýU¹¦õP¦¦ä|W’ÁÙtiì4'Åç ñDJ;]û÷¦oɰyðNŽª-L‹{PÖß¹gq¬ñtÒî±îo¡][^ë¶õ½ßšFŠâË]—\JÏ×ÊÚC`óM­¢Œ¼Ž¶Ëm ¨ –W+¤‘ðìæ – apöŸßúvÊÑ›NåO96‹´'5²6ÅDC›¹“ˆüVJiZtà™óª[o•=^ø>#‘Tu×@%Ì)À–È´9>$:;"•–[ Ë,¶à›'4ÁÁg :ÞhH·ÈN·ÈLÕ½jÞ2N©M iãø§IM‰ <í‚&•¼mø!$\iâ=н‚9€¶´ä7)öqºà´M„•¸bÜ1:2Å™¤-WMÔlºf¨ºÁ5×¾+|å¿rŽÔ5Ù$Îc¬·ÚÒ¥®,}š2gŒ;šlÇe9[íRÇôÍéú'¼ [oz˜5£x¤vê,ñ>6T¶þG#XnTï-m›Ä©©éÛÒu‰TõUx<í·¢ñTżŒÜy³ÔÇ)؄ǀ²n#'Þ 3&ff§5ç´r™(ûË Nm‚sš¹MOvQu¾rß¹o$Âã©Ù¨@«¢]ÍÝuy.¢ŽÇ@šÂ«´”w~håìQZú©þÅ{쉟x§Ém.%¹¥1áá=™]}‘ð]»Wºnˆ®Y[Éeo%$b× ßwdÿX ~Ge;šMÓ6S‘¹ |c¥6’A‚=)Ãër’µ¸…Vôz=Ÿ•Ô®ÝH$ìàP’'³7`AÆK‡ cdd›—ž©W=‘¹\¡nv77¦}5AcUKwÄCoorÂ1QLa¨;Gà|/î·$Ç5ìa¸;fÅpPBú¹ ïL‚(ÅšE$nœUË&ËÍ‚ªß—¨P\frÈЋfj¦“îææm§Šhú[,ª}¡cK.BÊÎJÌäY_e•–P²‘«vÔ#4ªíeɬsб ÀßE6O9æct¡Q 5*û²éž’]<€ÕOé_dßZ§ŽÇ0P?x-ÚœB{ŒÒhª`'ŒI'û¼ÍO?Óm#sS ¡hù•‘ìÎq¹*­òv§84\©·óÙÌm¬©¤3<—q Òuò7Šž ½§½ £H…Ôl —;‰Xƒ¥†Vϳ›ªÀëc©cÄz7CnWâ<~*ÛZÖ³F퇭V-Íh‡ûÅOyF ²Sîøjˆ ßE7rÑ~ÑïYUV ôcf@²«++yš+4 Ö¦†¬@ZaÜ›:yÌo¶?L)»6Ûd~†Èø,š¬‹*ÛËxVô¢âãª`h®¥úÔ@p²it2)äÒÁS³(ÌV/!Ž™Î¼ÊÚ”/{ߊ‰ÎÊ ÕîÕ'‚sˆº$(Ô6:¢æðFFeÌÞÕPòÈI ÛVM¨]JŽ2ç8ËÄéîL–ª€ ²VÒÃqhÿPùËÁ1ì•ì7aÙ]Q»nìq*‚þRªX^Í •Úz-Ñ9ª¬ZTÓÔ Dß´ûÕ•X9Bh™âÁn%Š9ÞÃb³Fát|ÐUÕ†ÀUq&QÜ…¯dë±’¯­“ASpº¾Ë­à šG².¹Ù–b®SJíØ8«”#Ja,u¶IõŠêvf &gvÌM›È\ßaMkžr´\ªNŽÏ(Í9Ê9v£Ñº¶߇ä›E6?_VsBf;ÑÕM+OÑrS;EžÛ­ÙÞOèØæØXØ«E3K¢ )õfNjLñ6ìà;¤kcÎx*œÛû;´ÏfŒ»›u)ú'~ßÍqªª¦À,=%ONê‡çÀX'j,©‰…u™i¼öY¸Múÿz̳5fjÎÕPÆ–æ ›V‹AY\ÕÕÕÕÐr»Uu·¢Ü¶}äü½ˆ„4à´{QmŠÊjŽ0â¥u…¶CÁv­â»v7ŽÛ”u~É>³kXÃeO°ü:š‘¹˜:Ç·` ‰òѸ5G4QEÕ7ä+ Á•ePÓ úw¦ßÑYUS Ù§£šZgXø//ŠÜ –y*]”r§¦Ý7^+)ºÊ™öïzâ«)d2 Bލg‹£S`D¾w¨ãÈÛÖVV vÄc -¶Ýª¾±68âô–b¸ìÑ\€µáo^Œ(ƒÛ´<€®@€»¶4­ Vj UÖV8Üù€¢Ö<êhÐ+0Uô‚¥›Èôxáù(La™¯¯mÓ*ƒMŸ¨æ¦™¶ïRg‰Ý¨T1ϳx)2În MòJîÍÜ1×oYÞ)µuÒz ãÿäwðñä°êsOO×ô©ï=žî êH¢™¹$ÑÕÂsçÜ‹¯!¤õWÒz«Èi}D(éZn²ÁKO Þ˜_ÃiïÚ™O>€]¶ZeäðçÏmU•Š’–5-^Aб蛢¾Í‚¶ÊM=¥¼|ñÂÈx-Û“@‘Å] £h6@«¡Á7)Œ›ê®®WØ7©™¯ªn-K»¨Õ<{Ð|…¹®}š¦Ä&pSÌ9òÉø§ÌZàØ¬TùsÍื›¸Ÿg±M4õALÎ<K,4ÍTqåóïåËùÖ ÂëE`ŸUOò8ꃚææDj©Çß Štw[¢œÒY]êîWWWeO¦ª·ëí=Qtum—Ñv ¤ô”®Éw%„b³b9¯hä±Jé()·¬7²Ã*ß]F&x±ÕbXôto1D3;ðt—aÍ$bÝÄ|ÖŠA‰GvhG±œf|6vÇA¸¾«®‹¦3Þ9QŽTAŒ Ñ–íÝmù©ªb¦ˆË)° ~•ÕI&ZXôöêÕQô¶A&JÆXsžâ™#$`{ ÁX?SŠUº ¾—æ?5uŽãõUCc‰ Ü_[¦?;_Ú ŸãžA”eÍkëuÒ n|#uºh9¯ÇÙoÍQT:¦Ž9ÅÍÄ]VT:šŽI›Å­'À]tw©Æ • e· öÝcؤØUþ ¸ûÖ ‰K‰áí¨X›ðöMÅŠÄéÓ7Ñ%CU ‡¤G¾é®ŽSÔnnóªlC« ÒÍ<™‡g‡Š‰®©ê›Ø8©Ü»• 3(éÛTò˜ |ƒ°º/ÒZ¼ry#™nQ}.ºMŒO‚P6¢‡àÝ{‰ù, “£«]~ÇòXÎ"Ü+ ’¨ñ=§³÷Étk¥µµq¥«k[qÕµøŽ#R{> ¤…V†ºª¡Å¤^ü¸v{—F±·c”N•à5í6 ~ ¤=/Ÿ Ä|–5Ö÷¿Ý첂ªŠVÔ´õ\/îµÖÒšìk4â6ˆÅÍõ½»;{–=ŠŒ }Oph<ÏîþåÑ~•OŒÔ¾ž¨5®µÛkûø“û¾ÈzQW/Hÿ†7.b/­ô¿µtŸ¨ÀàŽHZ˜Û_Ña5Ä0ت^,^/¢uòè¬éœOo‡È\ÁÏ÷ðR³vì·Õaò¹ôÂýšm-:+ð[·!:ý‹)íD,¾eO¦œùˆã±œQsm²ÈhŽœzpUCHýÅa¸‰ÃžçÞëÆ_è²ÚߊÂ&Üà™Ç~+¦eUS¤—\¢þõ$1Míâà¬2ôXæé§K–û—JMêÙý?2©å¨À1 ?VŸÄs‘’ô‘¯a¸.ÿÒÉœC¹ðÿú°:X©pö9£W “ßù.“ÒÃ%”[¬Ûkìäº-;߆–»î¸ù®‰bOþƒñj̺_öØÿ§æTNú6«ÿêßõ®šù?ú¿ñXYþìƒúð w÷dÿÐïûJèI´³÷7æº`ºGõšè§ü>÷|vbþWFø»{;Ö ­ûûuXvOQDÉ$ÖþÕ4\~ýSl8 «>Ç'ôŸ‚À1×`S>FÇŸ0·,{¥rc”m§tY,ìÜoØG/jèwü¹ú¿ïréÝ{ª*¢Ã"ìÔ÷žÃⱊìÖ#OQLo ?êo¥ãóNòl_ ·Ü•¿ºRpÌbj9Í® ûÙúfO†«š®½¿w®{¯ÃÜÛø*swÐÉ¢¿]½AÜÿÓ7‚è êõnã!°îoëÓZÇâ¬Xd'Ñ·ÿg~CâV'N:/ŽÃ=1»ÉÃßóQHÉ£lŒ7ÅRχþ£þ´/±ÁýGàº4?¸iÿ¥>xã6'_PÂÉw°´rˆ _xÅ»mÝÉ^ÍKIñ·ïÁRVɽž çmöhQkJÝ-Út\–í×[¥V2ÈŽaÁ%º"÷ì¶Ëª¨q]’O x¾‹¤pÅv´°ù¬ “ k]ÛеV_{\|B›¥îþ‰‡7·‚À(f–£ËeáÙí'µtŸílþŸ™X†ÌBŒ7ï÷ÍQ1ñbq1âÄ=¿á‹Ògì¬/¤†/'¨i xbÄñ‰qrÚx§âVEäB#ljïX>"Ì2¤ÊæÞâ߈ü—öºŸü#âºWK$•- ÉSt­‘ÓÊÂ\ŠÀbš¿5ŽIï=‹¦&ûõâ©:W=,p˜ÏTà'9O+ÒÝ-â Ã+æèõsÙ3=„|XÞ=ü]§„ ßÚO¹`”¯ Ã#…þ—o¿U™f ÃÌùD~‹¸ûë³£u¹¢4®âÝGrº«/ärIø.ŵsoTqï]:‚ž<"39ÇþW.‹ÔGKÑXæ“Ñhy>ç9aøeWJñæ.ËÚO<‡ÁVô¢–‘ó¶`ì¢ö·{×A1-õèžuQÜ#ñ]3¤u2ff‚Q“¿~ÕÐÌ9°`…Ò®½ÿ§€ùŸz¬£ž’¹ô=¡ÖïåñüS8 3p‰¾6üÊÂpJ¾“ÔMPçåÖäÚú•‰t"¢‚…õ-—>A{ZÚvöö WA±/+à +Z/ûO˜ðTŸóáÿ¨ÿ_í ìpQø.Àiÿ¥VÉäôÄ·B³'R·ÒG᯳³õZñaTñM,— öù÷WZ"!bÓï2Ë]·+5øí-¸±PQÓSÄÀÞå5<3·$­Ì=ª8b™" X♹dÔÜ/c³‡‚Ó±MEMPsJÀîõkhGJù·®`ÍÍ]KECRo4`• -/Ô0 ŸÂ°ßð[à¿…a¿à·ÁXbކ¹ÙŒCÁFÆDܬ zjj›o˜nkø^þ |==5(;–ß’ž–’¬}3»Õ5+³C¹,Ë2vYXápV%ƒÉLLêÏ‚èÝ>V: öè>jêè=\8e<-&ž ÂySKK[î¡ãŽº¡EF)|—v7~¯g>ê–’Ž‰¥´ñ†ÈY]Sa˜m›ÊxšÇ{•Uu¼¦0ûp¸ºŒ‰‘‹  øn-O”¾™4ÖÚéÁOO \F)ÚÓØU-%-2S°0{‘ {r»T¸fDòúhšÂy &áxsj|¤DÝçÖÕUPÑ×46¦0ð9‹¨`ŠÄQ 4pOOCr½&ž÷¬F'G5íÕXÚ‡½X ¶VÙ}–VZ«+ˆýxîó í¢¿VÅY[eÕÕÚ»vq⊲² ó-³T Õ¶ VŠÁ2åf²Î³"ãm]¢gRL­Ð,Ë2ºƒxÛçRLcmÓ$% ¬å,È9fWWÙ}·WÙ}…¢k³‹«++y×Y–eq³úñÝùí·˜J¹*ßȺ̃‚6A@&ÍFíÐì¹ 2ó-æé°³uî³Èx&ÈobQJ_ÅNç;fœ4Õœæ]ÉÕ/.ËßUÇ©PÎÙ›qÅUT> eíN©žChFŠ)%dEÓ!SY9ú!¢ß×Å«ÅÇï’¿ól­·Š²YYb_^;¿?8«yÅË1þEÖe{®Å»u®¬›Åg ;|ðì(mºrˆ4 ÅLzŠ3Ô WZ2©€ ºº‹èêKB­7Ê™f44)Æxˆ š©‘³#”sFÿD ®¯²êût;mæÙYY„š«‰ýxîüÿ›eo:ÊÛ-tBÎÎIÏioU4¸úA(«bnJ}Dq ’]Ùàšö»†Ëyí*5!ꦨRu£*ÝK+¨ÎjŒÊ¨ÞÊêéÑÆÿH)¢ÙÌ*7’ÀPz@««í½ök²ÿÊÅ>Ð;¿5›ùVVVEªÛ-ç]_̺iY‚¸RL©à„ìsNTÝ™ykE“ ¡_#dnQÕÞ£¨Þ›aíY´RÕ2!ªec¥¢dŒ¢|Ðl¸…•ÃL6¢Â Ú¾™ÚƆ#Kø äñ–V©o„2È~¡¢ƒ•Õö¯ç?û@îüÖ«1AêûlWY¬ÃͲ#ùdÙ ‘}—FÇŠt <Ψ°ºf=`S"§Ö]@. {ÃÙ¡Q<ÉéÈÁfê¬v9íjÌÔ ]]fAË2`(uut ]_eÕÕÕÕö2þn+öÝù ‚°(èPóјâ‡þÌ";ßwÍ{PD5Ulh;FM”Àh!©À])Éžž60lyÁåb¿hßšÿÄ[  !"1Q2Aaq #‘±Ñ345BRr‚’¡²Á$bstƒ”á0Ccu„“¢³Âð%6@ST£ÒñDPUe¥âEd¤ÿÚ?‰Œ—Ióg37s—d|éìn˜®iv¸H[:n¬ü Ãþ––Åòà f¾•ãò©ÝÿRöÚüÙÞ™x(Ýc;Åþ¥ïl2|Š¿X@ 1=xjcõ­½ X;œÃþ%µ£kÛú‹ýëjš¹½ôrz—þ!½ô²z–u%½ìpû—»£úKݱZUqÿZU =ÏYIœºGκE`2HÎÖJX|á{}CÝü¥KŸé+i䮑ó¬œ|ë)ß*öçý%íÏúKf®\\1•³Y8'HÔ··œ9=ñéŠã#[|ç6^ùÕþÒïZ÷Ϋö‡z×¾U_´;Ö³Ò5vý!Þµï­Wíõ¯}ªÇô—zÖZV¬ÿJw­{çX?¥;Ö­øV¯¿œ»Ö³Òµ‡úK½k-+V¤»Ö½óªþ½þµï­O–wz×¾u7ý!ÞµïS¿¤»Ö³ÒUî©w­e¥ªÿhw­{íYûS½kßZÏÚ\²Ò•?´;Ö³ÒuGõîõ£þ‘©·lîõ¯wԟ׹\é ¿Ú²Ò5gõîõ¯|êÿhw­lé:¯Ú½ñª¿éõ¯|ª¿hw­g¤jmúK½kß*¿Ú]ë^ùVé.õ¯}k?hw­g¥k?irËKU~ÐïZ÷Ö¬ÿJw­g¤«irÙÒ5žZ‡,ëêÿir¸¯¬·éYé ¿Ú]ëYé*¡ý!ÞµoÂÕ~IÝë[:Z¤žÚ‡/|jÏuK½jwÔÍ$ò ’/+ËE¼Ž˜áb|9 Kpðnó…©î:ÆÊ*yilç´Ü…×µ¢ËX;áiYsÙÿzC#S—úŠ–X(yÆÙßZøíÝuþ¯Ö;óZBêÒè]1h”;ü(k¤áùLiû•Ÿ¥*b•H ÷ø—BPNÓÊÞ’Ò¯‘‡Î±E]O!᬴ cqt˜rAÁ  <‹‘UÀìB64÷u)dfÿ„,…š 8µfÝ««XyÐ!Û×Fë÷.Šè.µ¹d|áoú•ò+;“—WŸ“'•žC½oÅØ­kr쀷}ð‚¾·$yré]n˽gÉo»“#eí…t®E^þEl» –âN>eÓxò*‹’ïÆÎÿ’ÞVG-Æ!¼ ø' º1¼[ÕòòxÍÍÝS…·Õ´æäʉhÝF]ð5¡Þ…„>BùCÛß&ïxj±8—Ž£Š_•+Þzcú»/zÏÍHæ¬T’ÕÑÉðO9&Ȉô”Uqßt›Ö)éê€Jë£ ²± tjã±ûÓ4ÔÍÕž°*|’žW?¥‚oZptR¹ý+0bpƒ]•˜p-ô¦TêÛŸBMêÌàH-Þ€-mìNû&9Žx¸Ï­3 í| ·ÄðFΨðÒ‰2ÚYÆ#r"ø•°Ý àu]X:ÞUf¾ã½dåÑ[ý—YµµwÆG‘]¯·yä°pWþT|]ü¨îMãή ü«jëe˫ʾ0W,VÚo•s™¤1Óõ·,ŽÏUЭ÷ rÏ%™<œOénû-åÝçD’Ðð ­~ÄÖáþ]ë Á·aX¢ÆÀ:!0½” À[BÇ…×H–kwœ­ëy[NÂ8Ý ×Yò¬šÞ·òíÄ×÷„L”Q_°#©2Sü™âZbh›Âëb°TñÄ­>ˆŽqÅ‚ÎMÇI[Lð:ZìQEÃH“Q©alp1½E•_Έ”¼7{lñõ!ã5’ÛaiÞèZÁrÄeqwHEUdhÜûf£1°‹¶æÏQÚG3UÓ¯àõ“K×mÚVÜ/hâZœs¸u–äë‹aÞ¼[1žÕвSE3zM|–ó!,/|gqi,ª%e³[(ù¡N“~>¬Q§Äæ<Øïh${?̳f1ÚÝ=ŠÝe‘ÄM$-©0»­M.•…Õys6Ç’èG+9ðwHá²lÍc›þ)٦ᰡnæ‡ZÉâ’KOð\çsDçwï|þF¬é'oêŠÛÞV+9¡nnUÿ‹?e©¯ˆå|PÈÆ‡4ƒŒ(i4S]&æ–è X»Ö˰)ئc¸ ˆÄVväÞœ3Ån¤á'b2D^Ä.’â³Mü—]ïg‘~CvPºÞ·­þþWžÕÒ[Mo™<ˆ– ñD{ ¨œÏ&òO!$Ø åÉÝ̺„pVÒ;†+°¯">p£>0ÊjcMC/¹3W'‹kö°½Zø®ûfÛ©/nxuÃe&8ú†ç&@ýtO9‡ ¦ª"ÜøïkïSóYYòræb«ÕT´õÂ-dÖTÿQu«2È×üSºÎ¯{ ×ÑÆ+Ùù «TèÚˆ{ÀV}<Ãõmõ«º°~U:ñEŠSðL ܱ}c4­Âíå¨Ôhý$`-Ì Žï*ÕÓ{(¥u>­ßxAÒiX*c½¶&k3>)b¾`a[Xx`Ía©§É…gKaò×´?Èà¶ã“Ì uF Å-®ܼë&c…·°ª†3w;qÏäµµÍ,;­Èݶõ忸¸-ÃrlF\ng‘ä8s*-m>7¤ìAR9ŽÃuƒŠº“kjùaêYýiæV`8ˆܘŽj(^sx6['%¿“¶¸øDÊÃÁÞ·òåšÂÇHî QC$'Jm1†þu­©Íg‚>¢º'ÍÉ«êë]Ÿ"»rîX„¾é¶”Ž¢ÕŒï³‘qŒùñÉ.)£œ:Xx¾c|‚¡½lÍ«ØØmÕg-k4Žm”oŒúSðNÙASu±œL&v“í@ úJgRsfx\µ:ZJþ½cnÒ…dp¾~ŠbŒ:š˜™Õ·šš³EÅS,MÎ+>î%Ö{’©£¬0´¢çè:è‡ ^CêAµš6­­í§(>W¶™Ç{d¦zµ>‘¥‹åLŠÌ\+oVåÅda–ÿ€£­¦kÿ6ëYx¶ÍúË.>¥±4oŽAÑÄéäæ¼u}‹þå€Ó6ü 6\æ”ê%½2-%Dá?^¬ ‘ú2¨Êãÿ†’L.jæqËQAÅ®zËJ<ùBʺýí ÝMþ¨/oŒ÷ÄñýZñÐÓ¹¿! tña¶w‚ÿzÛ¦¤w}:΃Fyn?Â#ôE€ñRÜŒh7Üð }ëÐu`þKÿû&cÐÕÀËm²cרšÑ¬ÕðÞ˜ 5–Ú¸²-t¾E\×ïîû W<†öµ6KâqvG%ÒÉoåÏ$Ú]KìY‹Y‡g»“-ßÁË­_` ™¹ÆÙâåÌz.ëâ³²íQÓÀÜR½Ö ¢»)ÌOÕS _[-·ÛР}6ât0Œg2}*—D†þ1°É'ÁÀßóe$2Yñ¼YI¡tüf—7ýë:Š©ki#Ž8€Ì# ÝÖ¤§›Gsö1ÖŠ¶G®ß5ÊÁ3ƒ¢~qK÷cÿ%´Q²Ï"®ÒJÍ·î+6½½ÊíWù2^0<÷¸”æ‹7æ»Ê±¶W1ãsšs 9*å×½¢×#5&º?*ʤ߱é¸kôÂ÷N/2ix"ýí7ù¥.c½Hb§úЊß<&T‰iÞ~#ekÏ™jÝQž³;Z~¤éiãžVñk ^×RßÕ½SŠÉßlIÌ’±ís]g»r÷c]ßbªey<ì‹´[àµXnä×¹ì ÃúÓ<ˆˆ¼d;5`2ä½ð…™'ʲº¾ML¡u3µf;‰m•ør8ºí Û%#a®#cë6 ÑHâÀ‹e˜âá†ùò{¢Qæ@k¥ú—º%ú“ÝO>¿ƒ0¢××àò2y%‘®$äÛqRS¿àœà2¢®y"sókYmʦ¤¹‘ÈZÒygª7z†S á¤íz–Šƒñip㎈krqêT+½åú©ÞÑ•­'Ó«ýªQhß+w†¸€|ÈÍnȰd>-Åþ¥­k¶ñ‘„ÿÙSÐU@t|€ahxØyìrdtÞëú¸oÔx£-{d®©vÎ##±ÊîÀ eU9’7ź÷·b³…ƒŠ#©¦jgŒ¼œWŽ–yÝ×´DÒTK½B]¦§ÒUÇ«xϱÈWÏȬ1Sj4¬¦Ž3˜…ƒÆyx/kšüu©Ò誃8ÄKÒòææ×ƒbÔ ºW¿ ÁÉBIä.þóiÿG×e]]utÕ°Cˆbs0݆ÿZqnþ0Fލêa¹åÑï˽:~}TI2Þ…DÿE¾¥í³y›êZF…°ËQE €è‚¶i&¹Z&JÙãk-\¡ò=Ýä¸A{vûÓìݸ¬²[îPЍ•Ó<44›ä³[9ª–KÒmaﵑD·))éæþÅ9Î8œMÉ@O{xµÖD°/²™­éTS–?ån¿C†D"0Ü!ý6?²9+ÝlÅ=²ïZHîÍ£û]²a@>;Ž!tU¬º7G%½q\Y…íWŠØK|Šäª?K?e«8cn⺰:‚Éë÷áM"þTÞMëw ä'µ9øÈ¹ºö×y—¶»Ì‹Úòë‹!ò9„°½Ðÿ2Îwù“Í4GÛŽÓ“ŸPÓ†A‡àò3çzTsFlö…•¶…Ù‚äú™™„Bp±§ã~åÌãwŠˆíö¹i™£6xÈËÀdPÁÎä«k Õ ¶&þg¨i«éÞÉÃp’®í¸ûÔqÖc=KoNæôz÷ðQk6£aщêEÏpcFòJž¦›ÆR¾Í›Âí “ÓÈÉ5™î}[Õ\Ìéà°òå÷¦4Ù…¬Å3ûzÓW3ŽÄQŽˆêÄíÁWͤZ9̃VX:";u) wJ)\ß1²Ë–ܯ–¤…Û7ønMÑPºî¾)íõ¿Ì¡kâdÒD¿Z•N• úUØUŽÉ[^tá{†T¹¿P?zÒ,i# KÆ[ºK¨üÔ×ÿíÑŸì…ímUñºFG,¬n­—ÍÖ½ÔÕf•’O%ºÉ>ò§ïÿy ­èZê,UV¼rÃÐwxÜŸ¹>7YÀ­­ý‹!àf¶NµÉuQ‡þ,ý–¬GpÞ:ÐtSž¬.Y»»ˆò•®Í·¦žßh9£²MV­à©>Z —¶•íÎNl’ŒkærHøÜXëŒÇz÷TŸI{ªO¦†µÚøú÷®uñf6;ˆáÈßéäæÒ)˱Ȗû{òÖ³Zb½í6ïÃ’Émœ=‹{”Oâ§hðÈŸBÃJãVî½Sn—rvŠe3êêånq4Ûi*8êôy¨’ÞÙ ÏΛ6‘}®”°v»‰Fác¡¶ënT±2Q,ö ï¿©T1ƒ퉭xMíõ!HÓgÔÈ"ò|/¨Ùh[¦›tøs#°®{#­ CµJj‚I2Þ¶¾þKë‚Í ¤¼T ;Oøý6†ˆ4U`³7D8”éK¤q»œzÔRo p*©ÖÆg wòfÕ²<é…ög¿îû•T¹Œr¹Þr·âì ¬èÿ£Ø3ù!YŽmÐ{Fc0ZQ21åÄæJÄ¿Ô:šV“þ†jŠ¢2[¯ŒµÖâßû«±Ü¬FÚ¯ÕÉ–ôyv^Bé*`±çgìµ8ÆÜoê E#dÆd¯;`²Âæ‡,Lˆ1Ü[’ïE¤r]trëX8òIòÕG aôò»óx_3’^ñéå­Œ¹„íw(õ¹Z"ã?#~w§•ŽØ‹Y„rU~pzL1ç†B.| ,­œÈüTð7Û.~ UsÕdóÆÇð&ø›èäÉm±¯ùBè Sb‘¦ñÈÁbÂ¤Ž®VRÔEí{­~ÑÄ#Y<ÎDâ-Çy šÂ1ÕUx¸›é>D¤&žY©˜ PIoÌ•Lò·þ)êà<Ü·ê+_>(ôsg®NÁëMÑú<3ža³XÝЄé%qtŽ7sŽóË$Úñz‰‡’Þ…5,Ù=‡é+54-¼6 ìŒÛ Z¨»NïÞ²b/§Ñ9b;Oü9vÑQÀNö±O¤(ØáEð—-™rïVt¿RùáisÍ»,8¹ícœq6õ,\Ý®=…mÓ`?%0Û±oYd²¿ƒ?é'ìµl¸;¸­ã—rk–-Á_zÉË7]}ËWR|µ7ç¥\f9ïä¤/™Èèqà¿]®½×ÿ+÷¯vÊýèI+C†ë‹êHÎÊG ñnLùÞŸ¯óƒÐ«³þ9Ü™¬•AskábZ.n¥0ÇÎ+%>.;ÛÊ{µ•ØrÓ7ò»y^&iᨷ·6K­Ue;´”h:~P‹åеŸ¨±ÁÏú*‚¦M4±LÖÌú†aÄ Y|â`î)t®vdiâøA@%hz™`ñÍÅ)ˆžŽ[ùêST;7Èâ~SZë]ªŽ Ëówʬl5™DC0Äí^ Ï"tÒi²ùnçlÏö—¿ÿ/ÿe<ÿ…qê£/·6ßaŒ·¯µG.RÕùJ)› ŇÅTGŸýÖUþ6wó)*%˜:L>2¢L¬;8 #QÇí•Ú²mz¶ä/ÿ§3ì…’ƒDÔèçŒagS%ýèÏ£ªïŽ×÷!®¯§c/Ò`.>€ž÷¾Ì7»¥!SVOƒŽÈø­ê ᮿb´r>>ä$ñƒ¬…{±á q[Ê·[ÀÞ§¹¿ãGìµx¶wx­Ër+}ü‹¥nåsšà²D7ÅÝÉ7*ÛÚƒí‹$¶ýkÎ'r{yóíç̺˜+I;Ü8_.]L3–ÇÂÃÁsiç1oÈ'K+±=Æî<¹f„‘=Ñ?ã4®z*æ-âYŸ´ÁI[Ý<ÛeõR;GVÕÃ.°6ßg®ëÝ …ã¥Ç‡£ ’7nf´‘~Ê~t-Lc8ñ d”­¶(ø ì0ß=üV85š[H|kë]çÜÕ.'5Ó„à7k{w—@dõ}Ý¡2Xd³ÚnÜMÒ³Ò/ú-õ/|Ÿôê^ù?è7ÔŸ•î|on -Ìy–K‚&Ž¥Ñ½»Ú|ŠÇQ~:¯Þ±VÔºP73sG‘6ßšáÞ¬G™sv]I€G«Â:#©m2Ë}Šš½ÒÂ7G0Ço:#ÄBî-‡Ö¹Åe\“»ªîÝäê[óW+'7ÌG̺ŠëY8®’Ú±ò.¯!ä›ôƒöZ™;H7ðßM©3†ôÞ×n<•Ìyd öÌ[ڬاw͵ñ;aí¸Ém·»“v\œVBÇ‚Ìx.ŽÎÔ¶+ߨ•©æåй¾Ù‹&øGeÝY]lb¿o&îMÜ‘¾F1àÒ µsŽuGO@Æ\º¦Cæ;“«6=d!¯\’WÇ<£tí#Ê¡¦Ñm¤ªk…› nÚonYYs½3#dk]âh è½ÝWâ‰sEN”{õÕ=šBë˜Ð@Ú&iˆ"ñ¶ô¬1ù]˽fFÜ™…‘²Ìro\yFwWä¾…nµí%X+nYfU¥¸ ¥oœ­¬>G] 2çÆË¥pºy«ï ÎŽÊá[YçU~þvGöZ„Ôˆ? Ò_•‘»¤þйWÛ"¤¥ší¨8€¿Çýû¼ª¾ŠÄHùãÏpF}¶Ç²éÃ=g¹ÎÒÖã:¬_üÝHûfÖ’¦d‘±­¸ÂµÌk^KÃläÚ‡³ $îÜŒQ7[(ßÀ çÂÌ'òH_”:M;Š8ØÇµÌÅr›32?p(QˆÛ‡[~¼ì,ŽÂѼ«A·h¹Vž ;[Ôƒ¹fß.@иäÕXoMËzÛÂ&Èä¯eŠÜ‘Í2ùµ×±ó Îy]BÁüTr°wéÜÊ•íþ1õu ÈþÁÁIÍô%Dø[ é]GVÆÅLû±·Ø¿¬£›K鈾'w •br²sFh0…‰—íX\KPÁÖoÆÏÙj‘ÐË+ÈnM{à #>H¢Ö±’Hë7ÉÂ_ŸqÈ[MBùí½ïv­¿_©k±RÁP7ºì_ÙQTÕ "s&Ô6™0ç´~ô]KWJQ2í}c%Ld©{ƒ¤ ~'Þ÷ÉO×°Tkq‹t¬„œD1b¾+¢ñböµî·U½Ûodwhâåuqæ[¶×-KMÀ‘Ìï ÍýêÒmBî—å*71ØØéc ޼‚§ˆn$’¢s@ÆöâqZûZFŸAø/°OÉýã’?‡rÃùj/*ä'É)ëʇ#š7õruôÁ$®s~)vA ¸›n¹åge{Ý9”ö•¿0S\ÔQñÉ5ÝG4¾Á:[ZéÁÛÑf¾hO¿þ¼ÕÀ°X$->U´qe`WH5Ö¯ÉÁq[¬·®•dUðæ€–2;n±6 bálÓ†CˆU'ÿÜwØjs"°Å×{&Fs#­¼(ߢk"ƒ±Ê ?„&‚F[<ù&ÙÒ‘ûþ VȾ5³T÷ž^q#u‡Æ‡Áôµp0 ¢/¹÷p+ñ–šHFòzG¹I˰ÂEݼ䪄Œ±¼v YZu£pïQµÂáØó«àÆÍÂû¤jµ=3µ¶ø{‚v˜9à'áÖ¡É}é­Ý3Eãr¤d³›PÜM?)S{tfø8­EDns[ºÛÇbe<1ËîërlG§½ÝéÒ¹…à³ ‚÷;¼ê*†‹´dîÄÖÉ2Õ¸§T² $ª÷&3Vne ÃԜ׷¼ Ö6Á4ü¸ÇDò`ëÐAðD&‹]k,\U¸,Eö/”S[k Ü6¿jÅÔåóBrzܸVk?zÌräº6[—Súc¾Ã|g·Y,m}¡t$u8‡ä!WE‘˜,æ7xT†ZIcñFE¶O!iÌé΂BNòÖÙö²¢-âù„#…‚6|P clàæÝbQ_ä«nAÓÀÉ\p[(Nèéwãß'ãTÌ—òíš½#Yä«ëÜÌú+Üñý„ÿÝ\Ó2ýË Þ!­Œ>Û®¹ãú(êØ~ mÝálFîð#$\ݦz¤òë%ïšÏ>Kp¶]eš¶#e–GйuÏ&Ñ%aÄmÁlºÊäæ®v[óG“w¿Àà·¬ö¹*,oøÛ¾Ë|`éÛfåHý$";:·urðäË%½Ï]Žôök¶Ö*&G`Ááî[¹2*ÒŒþ0WiÄåO]C2Jú¡´‘l.=DpL’/c š·Ý9¬KýTÿã*?êSO§4àÚ¶Ô6=Cã»p´ÞÎí'ÀÓ3D÷E+(esÃbÒs ªZê©«%Îh|Ò›`fYòÂÍeb¤êgÕ]×q×e£ÙY~vÚf ñ;LJ<úó_ƒÅT‹þXu~ç¿Gvüü ÿÃŽ™Ø°juµß~³n¥_6çX¦áÖaê&ûIW«Á®…²a½íqu»ø,ü,•±šãüõ½q•?¦;ì7ølü™ zÛåùà@mïÔ…N’¥Ç2æžË&Ê7;“d«=—TNiÿòLËõr-m¿FÁýØäÚT쪤¦¨Ð3:ìš68In±Ò¶!õ¨j©¤ÓÊÜL{w£Ð>Æi©«‚Ygk‹quî# ´Þ2ÿÁ³b-Õ”ý¢èΑÓu5ïtP†’Ü Ú6òù“«êiÿnÓš!‰À›´¤Æ ­€Ú¢1»=ÄvmPË+ê„DNÒE‹\zˆà´ml¡­–¢–9^¸4•UuQ:ˆ[smçñl‡sÝ£ù­³Œ`fcçïò!¡½ÓójÂì,“ ®¼šCÅzŒu-#¥‹‰<”ÑàÑqÌÇCSªpÆì±nëw™REO õ´ì…­‰üÎS‰ dwªz!OÍj‹x 0í£Ø£ýSkÈ6ÖáÄ]Ú;;W9®§Ö@:W„¡¹£¹Y”±“ÑT\Ú8Ÿ®Ç‹ZÒw[íR³Øý-éXëkÈ^|•UW² ™#ywÁèØ|^Û§»ESj Ù4­Ù-eu8„t¶¥¼™òf·®+0²6Y‹÷¹d³U?¦;ì·ý”õ"NdðÙô'ÆÜd%̘×çÛh’|‘hnü h:œÞÃZÛ]\HmÁP»ÿsg÷r-SIìœÁE-4o‚?ÂS· Ah°,ý–ò•ôª*M+\Úí#=tÚ×?ÞHÍÙGU7aù±ã|nêpZ[Ø›Çdž'ß8¯¼³åÎj™þ•©må¿ñmøžµ§›æþì­#¤°Žpê@w†ƒþ/©Xæ²Zv``˜ü™€•GüàßîÞ´ó|?Ý„ê)†(_,eíâ \GÔ¬‚ÑšR1‚¤Kª.ÏXóXùÖŒ«˜á11Ćߤۭ9úŸñª_Ó›ö´GèQ}€´”Ì6v«?(áû×<Ããª^nîÀmoJ±ÌáUè貂L@7³0´GëÀ©éch €*êx)K.ÑÆÆöú“4}s]NøÜ|f ƒóW£ªŽ~!®Ï̳õ˜ºÈùù3[+5Åpð…ïe°ríY‹ªŸÓöþÎcbaêOÔVÕÒßâM{yÕW4ÓÓa©j#:c¿¨¨™ÎaÒ±·-MFD­¤5ðñCñ*çFw"ö7ü×OýÛV彬bJ¹v)¡? Ü{‚¬öW¤ªÏê¦ÇL×mžþ®åŒÒ’jôŒ±ÎöÖõþ+OÉÛ+?Ï›OòeVÿ8»û¶r{*þ“ýûUóƒ»zÐ_Íðý€[1à %ˆ=ß:´Ÿ­\fŒÑ1mÕ:]ihÞ°=Ï™PR¼\ÁNÈüͲӿ©ÿ¦#ªµ·úZ·1ÌãÙ IÂÁwj±òN/¹s<^:šCvö{úQ$صY¤!Ú‚0âÄ[Zõ¿àå.ª¢òï.ó…M¤tmD‘.%Ù´Úùy•%C›gK ^Gx¿ƒÅf92+1uÖÆ\<=üœOéŽû-ÿl¦ÑÚ>X!š:ÆÌMCˆmƒ:øÊ8 ö^Øa¡±ÆÍ+RÐ70¯õÏÿ—©ÿ¥OMìž±úRwU9â£^ùp3 r»ûAó£¥´ö¢~‰ƒ¡IO+‰À3 Í£YUt“ÌÄ™6Ö ÝJ í$5¤kœì7òµY£©Ì0ŠWEkÜæÛ}¾å=lR:J³7‹¹Ù-hë‚i‰áÑßÌmó-PDûâx³rɼVªžÕ3–^G34Zv]Ã’ç5ˆ:݇ý›v~îLóYrnå©ý1ßa¿ù ÜÛ¹”ra<6‚dîg~"ºÌ޲&¿.°ŒÔ´Í¦™¹‡Å°~¥’Râm~ÔÝûDß>Õ¯gdu¬5-lÃÂhº|L$F:‰¿#²Cÿ"¨ý1ße«ÿÄ'!1AQaq‘¡±ÁðÑáñ ÿÚ?!jÞ}Á˜ ö»#ÒÂ…iJ#w¯ð‘íá¬ý¥2•Y¿ÙJ`ÖŸnhÚý)O†wSE_&`;™h2?ŒáJç] m¾)#ÿ$uŠ*ëH`?“¼©§üs4SÙ`?bú9ÿ©†_ú¡ !\„ú¢_Z^#d”¾©Q ³"uû‰‚+áÆìZ¡_xÕôo÷…®èœÇÙß½ÆOxž‘мpsßÚ3XÏ\)Ÿ·U¢µ½½,¨ˆ\³Ûs )Ò3¡O)–b²ýÓ3Åî̈fï† 5ï_ÜÚY…=²'ƒ®µÉ¿žcH.ÇúÃß"g;‹øë0nô#ž®Ñ[[ê".}ȹùÚjHÞb—òüÍQ˜M†ŠØ­Ûýã9¯‡ù…[¾?Ökwû¬O_5Æ„wœî o1£U¼ež10@JúîTpŒLaÖĽ÷„9–î9 mf~¯+oIr±%¿\Ë•>?Î.Ù?ÉDÞ+gÜ—w/µ˜ñ+Ààƒ'âjËøH3\ÿ¤ce?6gX¹e(8{V29‹¹ Ð „ùf7ºfGÙ/æ.l\åMõ2¬RËk…Fø³z¡‘f¥.)¸Ãž“& ºE,·Dm(¸²¾ø]Þ’ÜvˆÝÀç’N‹ÃØ% j¯Ìu¨¼Çf÷d…µ¡<‹c#N¹Ä@g.q×^ ‘å,<ýEÊìœn°bb%å/Êà <Ü ¼TaþSÀ§pÇ*|EQè2§lq™W ÈTu`-ENCºÔ?êÐlâô¤cå8陨½dçuX%"du<%ö–¸Ž•F¢\)ÌzÔ\…:©NeEÖ¥‚ìD>œnÂn];@ £0~“T‰<ãMï¹4ÅÒ®]—óÄ^½JŸÂl¯álw >ŒÍͧí?s‹r DÍuôk¨Ý½¨>,Æè¿”çT>ñ˜ 浜ÉEß°™(\2*Æ¥ªp}®!–0Ò‹](Ú€JE3§ùÆ¡°›˜Å‚œ¢ÐÜyÅ-™LÑv gm{%¢lxKlº[Í}LËí á€Â¥½FY•])º9#ŽïA¡Gæß1¯[#äŒ2*Ÿh!Úý~B‹€¥ÙR>óbAeÌ®UAt󉲔¹Gî“rÿï¬s·Þ˜í:’·åŠ©}ªÝà‡GiÚË”¢fx„©m9+dLE[ßAÖeñ ;FöWE]4{‡cÖ`G“W+w_\=a©É®è—‘m®3qÞcrŲêT¨yÜœ;K6è <Á¾äÑne’ÖdÙMÁ¡ˆ«[a†Ñp•n8úó-Ú;ÂåPÊ¥ðƒ6÷˜µyèà ȨF‡tÁÏ(ˆò¿‡>†XÖŽ¥¼YÝ3Ia‘ñ«2ÁfVvÄi*5G† %ÇMù—£Ø ùœ©¸™ÿœ (#Õ¢àKPO}G@ø©°×œ >ɯ×w¢Ç–…ø,Êé|" ô-}¥etOK—Q]oæ¦Sý“wø¦ :,l*ÅŠüÌÆ¹5â3)†ºÊŽoÖüj4¡‡MAH¡X¾Âh~À¯Î6]Fà ½Oî¯|²$qPà1EÝE€‹9l‚¿à»@T4³ñ.3–¶¿£]òh¾0†•ÿÒ4%4ÅvËÎk=T(<¾ÙÖ#„N^S“²Ék*̤¸OQ¦V¡—ØpëRžÎ/PȽEz£ð4jQLÅÆâ¦=±ÌDh²ï.´Á‰íŠ˜w+Öd~ò¦QÛ¼ý(A]¢à:»}¨M‰ét.(hÌ<¥{‰–ßèóßFP©® óÖ*`›:s¡­pÁñἚ¨ÉÕ¿Þ> ¹AÐù…ÖvC=5>õ,iöq+ A×ó2Ém1>#êl,¦BÀA«­MÁ…é^¦[*Š½Ê„«ZL®Íbt72=fQÙSÊj/´nÓý£AtŒ±¬´&u ø›™g´—ˆ—¯ú©¨¯Ë=sN{#;'•$ÇV¬LA´§f„ÖÙ÷PS¬Ï˜; ù†Š›Mü3nHEmï*ÐY5 oÔÖfu§NÜÊl„y ŽÝ<ÂR’v'léø0„üDEº‰¡q`<è#$kˆÇº6&ØÄÞRÄoc™¢œjj"!TÛÁ†*P«ã¬ ‡\KXP"¸ª¿ãRáÃ"Tò@UÍ÷°õ3×Rð„Ùu7KCŠãŸ1Òª„]ü]“þÅO°ýæLL–I¼Íð°ã¼P¡ê  p<€Eˆ”v¼!®Û|Z™K¦‘ü Šoª?BQcøËÏm,ñt?IV¤¤=~hTR¦Í«áÄ áîq½èSg›ýB9S¿øÂ¹ê –¹ºÿÙBó‡û;1ÇFãÎ~˜ ö•Fu–SàH>pÈ7ÌÛNé'ÚqÇŠ·+bAÙ1öDœ§*Ì»KJJÉdƶSi:~e¨ä:Åtî9Ïã/ᙄý 9»#¶ª4Ècin }`\j<HíÔîn ÚÙ–xŠ)‚(ñ2`‹­[/bD,ÃpÒþÓMâ ¼{©eô +Ì|)2ÙDjt–|&„^«Ð ²ÀŽ}™i\:gy˜‘š VrÆA ö]Ú>èA­ušâÎ䪕 j­JºÌc´Ê‘‘puí3áŒ;tsœÊejÛî¬Ï?h©¸±4'PÑ Œ¼Fæþ#®ìèÁ¾†§b¶æûæÿȘÄj¹?âb¢®òûEŒYÅÿĹ݀ì:~Ñß­’;ÕAº£ŠrM þ&bJíw,æuŸ`²¶s¿9Ðy†NÆp5)»ûhCO8€|†ÅŸ]\¨Ë?ÆÃ7MÈ3×$–ÔzdéPÛé;Ö§ÊUp»½AêÛ©ã¬.Äfø›sœæ1@6åoÔ·âÓ¥ Ñe’üF[RrbÉ}å÷˜lé*Ù.dÄÃ÷°;à—õÀ‡7>¨ |ÍËÓ<æ!‘Ò›à7#WVØ¥R\;sLùÇ/Z•ûiWÏñvÝ%¼8|Q7(MˆÄÉ !˜ßzÚ`ìÊ0¯›8;|£öõD˜Péø€Ã¼Â•ö3bÚ‰A·¼.[àck0H^2ÿgò‡MCaæ'©Ô¢é=Y–>y~£¤ˆÜ+ž´ÃììzM:í²5ÌAwö«ôÁp~¡¼ÃE31,j¥J‡$¬\oR]Pòè–©÷K=Í‘J <rÚ]ºB[¯)ý½¥ÍôÕê…Új+ï3è†}³Ö:H8ÍoÐäòÿ˜=íû—3šÀzÜöT<¾#ùÌ€ë,ÿYý¥ $î“ЖƒFŒá¹ÿ‘œös@›–vbÚ&U^‘»ŸËÝ36¯iI ]º8-#ŽßæüN怪כŽH@¶†^®ÿøTK~6aéøÏ0Š9¶¹Hér³at|’šëu21Ê|gk¤<…tÁî6ç–!¯Ì£¹ñ/®PÍïBŸÚñ)4Þs¡íî‰hbÖíg-NŒ P^vgṊ¨žÔæÍW¨(¸ V.aƽda°¿£l˜ë5ȸÛRèm³3@Z¯1¸xܨ%N#NÈ>êG«(gàž¥g¶Ê)n#UVägW3­pó>Ñ#¬À¬÷›³(,é¯<Â*œÝc˧:Ùã2ȕըìŒ}ݰ@ÆÿÊ¡µÃ=™” ÅzŒ\Ì¥¶§Ú ñ:NE’¸¿”@rا1k¤˜½JÊá§ÃòÁÖþœ&“oAítS€ßàÆÛjS¿Ú#X™5+¨®|»cFåb4нÕrîž ^ýL<—¸ƒ"ÑÀöq|’Ô°†ÓôWÙô¬4ÓPiªaqB\]%~#îy{8ŒUâ±·@¶-Ì^i—°Íø‰³Ž/x¾8õqu®Âµ¯E>µú%=èÝ·×öÑ%!‹…:ô=½ÜÊÓ´yfö CW2ĵœÙù(ûš¡q¬p$,¦?V»øæ[P|J~}#DŽä¥%§¼"à0Ø^œÜg3 ˆœ’Wzüô¹{#I­ÖÑŒXñÕ÷³*-8¬?83$Ý ojêçƒt ¸ïýQ¥r<â ü’öî À80›÷ÄÊÄ”V"¢•*ºÇvÞäC„<&ÈðÁ ¸J΃¶\a¸Ä ö”ÿæWËÿT´ÖÝ#Î#fbª¨Viû˜Ï 1âSq¼A‘S‚øìÙÃaûKgý´G“.±AVJ^~€Rì?Ò' L‘ d³¼,™5€:·w䘖·UE$–¨Z4nµÖpwuF%P®3Næÿ²Â¡ܾñO:òàßÌ[O¤—â5ù¤²ôº€>Œ‚°uíÊ.ôTgÂb:÷vB…u¾5¾ ßi¥)¥ö¹?1<~æŽÕúf«§MdRüaI}M,ó]sÔ¿9jøtz;qÚ#^¤×í~à$zÒ>ìdýB´®YߎҀ—Z·¸`ÉxÝñ ÿ)tfuò8|Þß52﬉ìo× FöIg0 ÉAì—hó£¸)å¥>AÜ"• 1vÄî…x.<¶‰Õ–&M´^â4(§&‘ê´š½Æßèø€þï´þkõ,ïôLÓêP#º<›âqUŸ¢Ç1Ë-öLê*™V.QËžÐè= ÏýRïæ­øÒôj0møÙ«1ù†¨ª4Q\ÔKÞ@ú0*ü*¶\ß®e¥dªtôæ9¦ñÈie[ÄHì5z_ù¦Xé :)†ˆ\6 ¤Š§?L¼õôˆÛ1W’± êÿIµ ð=ÆPƒO²/™Ä.½¸6#ÒQj¾&P˯Ó@ª†Ç¦^ß"}É)ev]€Àñ).ü6 xŽ`ó6áˆ}jv×),S𠪈&í¼ÂËñô™Oó£³®c©Ä£¸XGVœ×™h )¥8ûšë!5„açR¿ªbŸ@ æã­[ª,cnŽŒÕOŒÌu1ë¬]’Ž!]&Áœþ¥£ŠNIÔïœLÑK”õ–8¹‘90£Ü¬Ó¬Lâ+=&ö–Yöƒw™IÚÞB–P4éҀøbW™JW²†±©³î”‰ÓþѦbá3kOÆU «= 9ñ×âºjÌÕñÐÀéø¶(ôn¹±Vû ÛlC¦¦ÆD¥Î‹rS›²YJfRïÃz¤Bï*˜£jðŽÅFëã`h½L a™*xIN®´ÎJéLÂ{1:šw,€Ãsð%ݵ¶( \ 8¢±IXªœ© Ú«‰Ê+á ³ž©RÙ\ò2€°petPUÒj¶ݽ5_«æb^#¨‰¬Ç3C0Oósù¦Aò Cï «gÌ’g 4è8¶¡¶›SñqN„ÃD$zÉë݃sÊ‘ÿ!0׃ÄûÕÏÓ»8s­ ÌĬ9?êMü–z§ižùˆð.Öô©ƒ‡itEÉñžrTúJ» hæ½-n§ûe2‚«Ô–XX_2Œ-Î#Ö¢óÂJ…s á{L÷Uîj㞢¡”wÙÃP§Ä_¦#WÞ‰ÊûëB⺔måPÕǨ-V¦FÛ·ÜÆúÚPe™âņA")A[ñ9øä⹜"Q1]aU¸ÎRÍ´j.¶ Aa`v¹w¯eÚ6¬Â΢4jŒ¡§PÍU.^¹*€KªÕ®Oï¼ÿªã Eš}âh`5x)³â…O2¥Œ®â¼ˆPNÞ ¿& BÓ̤¤ºA†ˆÊ"›Á60Ëo3c+s†±¹­cßÒÆçÝOê(A¼ÈXx€á}.O’å˜ï+Ó­Qó-`Žùd,¬SÊÀ‘b쟲Šž-ÈV»bù}˜{êÑÁŸJOöï+°Wp¢TîÍšbkê©GÙþß÷Ú$%]çúCŤ°b²'|ªƒòÆ%¼×¨æ¼°µ_xVöíCûžJ°Eêå°¦>.71þT³û1(jÿÂzÙ<$†ÞìÓ$èQ~S&`UvšDH| ­ÐÕ4ÿ"[þEÛ\ʆŽÐæ*ª ^?G׈jñœ¢æ}ÿˆhKV2·×ñ.­LžXšÿº’â¸fŠÄ´LòްSb{ž–`*¬“Oaؽe@%Ææ§6»Žë3J¬ž×iÂO26¡•Ç»‘›MôLSã‹•¸öO!ÂæŸ.vH¬ÃC!P,ÅoQNQã Á™Í­{Ça™q™LˬçRÊSTÊDBdóöÄ®ö/^LÏuåvþà—Á¡–Ó -k¥iµ¹êøíûÊÀk£uë Ì¢¦¢û³AÆQb¥£·i÷ĺ±Ð¹\oí°Ø9ÞðË¢Ÿô˜bJ8k^¤Ëì`böඇ|SŸË _'üÚ55N>¨â‘b¹ÔKO¬REÇð2´>´y;J Õl[ÇÞ ïƒiD›èE×Þ67Ù¶ËÎÖ8º¦bÇŠ*ž|ö~–O¨xˆÂpÄŒµJ3‰DºÏYn¦m+â :™šÜ®&6óæo1ðpóü&¤ÌMÚ(.±ÙUpcOô™ôÄ®ÈÏ 4<†Y\Ø”åZyy˜Ñ/ó)O ©¤0'þÄËsj®f. tºé-¤zC?•Ër!R—߃ŸlK(ý&³‰gfuþ`©Q²r¬•T =s ØÜZ(U rÆé–»NóÄÅÑPy!†Ê*ÄZa XœÀ#õH%ï^0ûÀµÜ‹³1Pé2ÇáÐé—ÁÄA &›Š Tº¡áù›ÂÒ|ùˆPNéÿƒ™sñ#ƹÔÔU!r P íoU×ă¼òµpݶB穌§AÄÁÍÁµ’/ÝŒ€ÜÒ/ŒMä–Ú+¼C»æ[½=¢šÕ/Z|âáï…²îãbšˆõ.ÖOcswÂbŠë,´0oE‹$ÝìFU›Ñ‹--¬f ¸Ô žµ9JíÌ[IJÝLOY†·)µù"+¡u”ì}Á¬¹æ'ÍAM(US•#Háê@ÇÖø‡6Ò‚øŠhÆ»²ÞXè¬A6tf9Ê4ï¦Nµ9 z†>#¡…årm š2£k€Ÿ)JGq13ZŽ”é¦ ¤ÇYqAí*ª0 K·SHP_WKg˜Z'‹œÁtÙ4Ž(.®…ëL¼ýÐaUdG˜+O ’ZµÇxž'@•Žfp‡+ c‰rTlH³l³mÌy>røÌÛQ¹©Š¡ˆþšk™ý'„ÖÛÎz€öô¼^þ€«PášÄµâXÇ+u^#YCX™óæCâ'ˆ­1¡y”â×.7€t\L›g©—eÜųsÌ{2ÐxíÄ»w<ä¯qQ²Woº_–e4³É8B௤5¥O?EЬæT©PµŸ1Z\Ic~ ^曹؅ó@?É$Ïjðü.6-xÔÖ†"AWó˜ƒqu¸ÍAzÔ¿ÛR¸†Tңܓ<p%‹¸oz†¨V³AG.edeD71ŽíÍ·]ȹÉBÚ;[*YQ““ l©Y¥Põn¬°;ÜÍnûË áÒ>P˜9-”±vyëÂŒRÊÕ½`¸SÆDÝAîÊEœÔ&š™ª»†£‡¬ýÁ.îXÕטðE`„@s¹tS¨åœÊbiÛìN‹{•­Q»ùîðB‘×›^ZÃÊ/Â6Aažðº§mÚkê·éãg´èy+îbh KžV +u®°¼áÝÿâ cLí6Qh-R9¼~B÷JBĘ›œ©ú1W V–›k/•¶3‹¶uyÂS;p¬,Dº× \¼7ÎÄw¡„ÃYä‰1J"ïS´´¸;Gþiq‡Ú[-qÏåèú+™Jœ‰/ÊÝån] ÑÊi@ìUIìAs+F?J•*WÔ©R¥J•+êU æÉøˆ&ÍizZYž§’¯£š•˜Êðƒ+N±æ—‘ƒÙ ‚Yò%Áí2¨ƒ¬ ßâØö>¤XòIì:8ôJËÚ¿³¯G˜E?ŠÀŠ©ŸÒK\|Q²ÚT;ýBšXœÎµ—ö*ˆêKôúC¨fÜheÙ:„ýÆ;ÁÔÁ«šÓ¢SÍ )Û뮚#{”Üáù€qæLÀ^ëwšiŠt>!{ñB¹§Ìn¸òPuˆh3¨W¢fWÚP÷‡ #mæRïèF}F5õ%CêÓ3ÿÅJÌûË+—.?KžQ\õýS]Ž:ÂÑÔ– *€%̽:ÕŠCVköeÄ¡6áeÁd÷š¬Vm]‰š{£90ÆîƹJ’/'ÜŪÝåÚOÍ Ð9½"´ëM_|À„.ަ± –‹?0Zgþ!©vv{ˆÁ`6*X5f,#òSÕ€pÁêuJÙq•ðRB‹l-ènú5œT¬OêFéûÁ@âL6ÃûW&_›0|Îò¦³ŠÏIvÆ[&ôŸàÊNôQÆ~ °«*‹4ƒÌMêȵWu™fBÝ›>'=Ô^Ș·»äý`0FÑ/5 ¬H£Zˆ^c‰¤Û߸¥Äw \]õú,è›b\þê«M‘ÃÈ=¾Q4ħ‰GL~”õ–x¸È­0„SxЏö}ô—/ëÇׇ`¡¡–S†ÇE¥ÁJ$±Ë®çlá<Íf›öÌ2ÐѤàp&+ÄÃþ­¦ç¹AÓ9ž“ q½ RúÐ3ÖXêî¡rzÂÌBéÓÄtØÒ°ž§Ã2×  T}Xa°Ü»è9Fð+S³5ôYïé.u#Œ»èÄ3¹’YДŗNÉŽ ½çRwe:Ϙ—•;“µ™ )+úb)Vr”ȲlÎ`¨K¿ Û‰Žþ„¡2AebuÓ*¹¤¬C&`/R‹ÔBéÇÿN~œÎeBuœ0u¸çhâ<†ÀC=Á¦ÖÝ@Íõ,n ]WEò‹•FÊ{¹ë <!t]äVùy—|à¤÷W, &žÜÁxrBü)óq‡˜˜”D%©ÐN’0"gÔڌ倶 /PÐTrÌ Ä,ª,æ`ÐT&÷)Â[s–e‡$Fq5-O£?ÿÚ O'ê0 |Ú/}'‰›¾U7Ó¿ãýÔZ•¸eójV3‡zT)ŸÖÉÅn{ìà¢æ¯vzÈѼ䵿áÎ#?¶nKüœ’3¨ƒ>s ÏGauü‡~¬_‹‰}3c¡cö¦úD WŽ…³aì‡T¹öë#-²â½‡$‹d–¦À°T…ɳçÞ†“¡ü\›ð²¬™˜šÎRtÌÈNÕç\¼nQ0Z@µ‰OL¯Ïe—ë^ÇkxÎã‚Ëë8HlÕÞe…bÑÊHߎ´ç´ ìãGJð¦.ãGuٽƦGQ ­&/2ág¢Ì œÒee WGGJQçYªtÝßÅ[ú“˜£bÁö½AŒŽ.?£cã®0¿¼”5ŽLš¶ôO–ü1fÓ’>D÷×¶@[+¤HظíñZð7\è`#§6Y‰®N=¤¦Ìðøø±a v@ý4¶d:Ñ?¨5[ô¼åÁÑFá†á"%CFÔK§Æï9H‹ÎU]GÚ6×®:ø,w¡Ðà‚)U- @³Ý_)_t1šêîRÝÑl]X›WÜ'œ›hc•o´\ìZn]!{Yï­ªceÅ  ó‘4§’ùV>zï]©þM±S†*üùmPvƒý5k³C¥ïn­õ„sòå/E¶º´LXÇà§ùõ oI:˜ìÝg,V¼q F;x ]óÃhƒ"ðOCä‘ µ†N2<0´\ç«:8ÞäÚ2±"O§ˆq¹º“i´ÊàuM·MV/y¶9KÞÃzgf¨ô¸rªõjhú"!‰ä¥“ÚœT™c)¸…ò¨\½:)û®¡H ¤éFÞ÷NÇš¦ätyµÖ¸Û¼þûdjR>¶‡sìÏØÚ˜AìÑ:ú Ví1Þ˜Š‡Ù–óÃ* ÅO`ƒŸ"å€=†e© ä›¸ìs¢îEJE?¼K•h'È4Q²íL¼$°_”@Š˜tÔKOÿ9û.]°-UÇîr“5?r¿nDàG°¡ùÇŸ¯†…£”l4 AÜb;LϨé|ïe«ÂDäDl31Ë]vFÙ¿ÓÙ“A†ñXßAX¤z¸‚P‹yNÍ­ÿÄ'!1AQaq‘¡±ÁÑðáñ ÿÚ?²×ª5ÉÛþοÍý–eöî÷?W ö­µö?°C‡ùÑ‚ð=äH¿»ùÿH³Ÿq;¹ý‰µúA‹´w>_øˆoáâvHtÉ_v€{š¨?ăó,àˆžÓ¨J´ÁL/ywÝ™?sûbÚêŽ>ÇöW¿yý”ãæb;÷ŸØ¶½Çö<žûûÉþîñZ_ö//}ý‰éñÖt=çöQO“ú†gÈÿg ýßÙY³ÕýŠŸ«ûo¾þÊëï`=óû–kÜf➯ö-ýì§ú?ØÑŸqý—P÷Ø+÷£F=Ä?ï?°æ÷ŸÙ}¿yý”ßÜþƬŸ«ûÇù<Áå÷_Ø{ìµgû;Êûè§É_ÙÌ÷ßÙšÏuo}ý”Wö!Gù;ÍåŽðNý5ýˆÉmµ]u~§æåK”@…3(˜Èֈʈñ,/âa¶üÌ—û`Š_»þ@t›ï_¸âº©ˆÉäx?Œ¬´|ÿfž¾ó·®õ ‚ž·Ùjã0$Ì ¥8>8†¡ópb:Y˜ÙPæº.²§“†Xºú›–»D&å&Ú‚@vŠ hF5ÄwýÌ·«‰†¥©L’ÁüüVB–€…!ˆl’+&Æêbâ5È·Ô³–)´6…TnÓ-p°EØ—Ê®{ñù â•™D¢TR¦'*åèLÌʸ#c–-úTTª°Qd£ˆÒS –Ü/s ˜˜iÃÌr’œ¨½Â+íˆN§¼"ÑàÍpü*ÝÌc© ¥Õâ܈îŠö=3ÑÕšØB1̬;ŠLç¡ùf¸•ï+|Á˜-_k™”ù+9ˆ ¯^<±>e˜&Ã4\@¹¦`^XY37T`J½Ä­¤âl–(‡˜ÑSŽó† nå ƒ£ˆãlRgÎ}ETS¬@²ÜN±YpŒæ%CQFNÒ¦?1 ½eˆ5s&RÇ3 ÄìüÈõ ÆœÅBúÎ7Ê=U1/Ê.u4Àp ,JÄÞ#&3=õåéðïÕþElwÖØR× dó[ó¿1jûõ×üáK•7´>€8€nj ÁNìbì˜ëJÛ{MO¤ TNA‰[ޝ¢s9ü %®‘(ÜßÌ  LÈ ¥µ‰l¾%º`ÊâUD`m Ü¢vÅs-Ü]n=l¬+0cð¿ A¸',ª4Z¸Å¯½ýËL²%3s@fñ¨ý½þÀ µˆdñ8þŸƒ¾å1k1Ö!Ã*(R\PÙ¿³TD©áÄbÚ óüŠZ‹Eæ©ûæRa»ÉUCêWy©·Íù}'‘û K+¯ò†EÍHüŽ{4Å>k{÷hª÷#éÅSì ;h¼ÊB¤Ã®k¾ež¾å­îê>wÚ)Òê\,^•1ª½Oì.yÔù¥¡þó×\8-²žbä=nZ{àŠª§yA¡¸E¢ð˜šy‚s.º­þâ²ß¤@ÂÔ Í献!uÔAˆ¬Cy’]È–ãtÉD¾P iÖnT.aù•ò¤Ö?`.XÆþ³; gÝë1â‡Z«ò/¥ÔMjöü*wq&LªTk¼x?$¡Ñ”¸f“`P”O)‘Q0è©@ií&ô[Ül%ï8|[¹©‡ÈÓëñ78Ï%?)Þg¯Å®œhO‡ ŽÏýŠe%“ªÌÃåºH¾áö1z"ê×ëùÕcÚ¿’´z;ø±ô¹FKò}„EžHÄaßqƵM&ìÿ‰Wmt`UçþNjóq`_²,bø˜t¡mSø)sœ‚€×§Ô:s¸Ÿ€ºŽâ±D¢n2éC¹°(£ %Êæ`t}JpŒJÔCa ÁòéÚ¦`ît“÷*‚àµ|Yyçâ¨áUf”CO ¯<ë¾³ Ô*‡ÝÃÇ˜ÂØÍ}+~f’VஓOžgÒ'ÉeÈI‚!¨(TïH=ôƒø¸qŒM¢¥Œ=§ID­lˆ ÃÖRòîKÜK‡â æ+zãý%ñ+‡«§õ"±Ìo>Ïëëz²È%Ýÿb ×ÞÍú0ÎkæAàÂþ³#þa†•¾‡ô,¶ú³í6ì>˜èQ¦¼ûÊi›£<Çr¾O’bC0WŒÍ´î_DjdbX± Šx‰U)üV?:cÌJÌÄÉqÆ;:Þ¼ù…¬¼ßübIR²6nÙ™­~¢[™ë T@ì¸[‡ï=°=’êaÃ]øtÎó RÚ*Ù]u¸()xìy×ÌI•Ec=„ôß06V®G·û hK«~ee²Ï'JN×ê{E©Üè`ƒDºÑ๜f›JÆhôšÂQ±¨$yS`ÊqÄ(´—a¨L6•]eñø"N4Çœ|NQ^ŸÈE‹i~eOD “æV½,~%V`>äX¢]ÙOÄIVÔ"0r73(ÛÍE®éÔÞXvG´Ï=˜¥næΘä˜ë¦9󸘂¢†eæ&r"x—Žñy‚¥òÏ·òF=9÷¸§ü¿‘‡Gßâ< N#lJ¢Þ«‡Äáž§ K‚€ñdÓ0+ÁlrïÅEáT ÙçˆKXŸ%Æä×½l=~„µà01ËÁsnÃZh]]ä8Ï\§Ô¡MÒÛgHUÑÚÁø•Á<ëϧYrÙ‚ö{:÷Ì!»÷9ô#RWm§¡~Ý 4îY‹#4 óÜêJ^u,pÌÑk¬¹ômð¾ÁÊJþ@ô+öÅj‡‘ãC÷-ð×úÎÐÛ野œÿÉä÷ƒ¾Ì¡Naë³1Í%]æ¥%šèÔ*ÀœÌiwÇò,ß×üˆ_Óü–¢7ïµÌ«è‹BN4Ì×F|B¢á…?d¢â6$JeåÄn :TÕ- ”ÂUTnÙ‰r@XÇÍ(pÁ†hÅš–kq¹:~$Â"o –Þ%±5û„XŒÚ6dÇ1ÿ¤þËWó?±K½›èùƒï9}ŸLKe,õû06#~y{lõë¤CJ|V<ßî9ÿC×êàÞ¼q)mÚÆõH·zÀê%:¬ÝèÇx¬—\±ñxŠŽÍ÷)Áç`ê {Ù³¶=¢{ g¬z~¢ñs¨ì׿+ÞÔ³>•Áã—ýÙzi.ŠîýyƒPγVZÁÖPC†eœATÓ•kÐîè9P…JÅtÃk·ÊõJF:]€Áí«ìr‡SÇM>rï£äpÿ}#PnðãÏXÊúÛú"îKóRïOöœóúS¡ã8žïûÞ5½¡ø%°Ûz/²T!F‡T}SnýP1IµwçÒ2Gæ]+SÌj…@Y/¤Æ””ö¸5dZ1]=`æÀª$—?ö¥Œ Ù /uÚ¾¢Þ¦ÏËøBÈ^PÙF1ñ‘VUÂÂMK%ãû)]¡¡ãî‰fšGÐË:ÂÛØOÜi©þìÇs§§×ˆ4å³Óé"²hUîÿÅD›½Ç§è÷œƒ­zj!6[ïóC÷OjÄÛ==ŠÑâÙit|²ü?QÒPÛ¾›ð®:e¿t/Ĩçyz¯èæ Q' yQÍn(cý•ÿ±,×u 0÷™Ë£°·÷wÛ¼Ê*´õàùP=ÉneE½æ(¸Ä’Ràј œçX ^Pû1`®§!‡ÝýQ³9anäìŸ8e—"¯§Î¾áx?nôý…Ùíûˆ¿D&Í=L1а™Ã,hG †Ù)@ÔIËw(¦j=È—ø%b+—7®åär½Â'P)õˆé1$ù+ꢘ ¢—,*,âÒ ’iÑõ‚ÞêýB â"%%ó,ãî —¼û¦Fóoßû8b,{nŸö&ólÓã§Ùãß^ÐèÛé÷Qm¶Pûµy¬|þîSrƒ>Žê=eû/çG¼µi4b»¯¸JóªËÈ¥}@&·ïWàù”Pý?’Þ–Ç;º÷ý‚%»´zÔ°nG£oÁ•FWšptzž%àÒýõï,£HZðþ£Çç·òa¼0p}îËÍ?Âèóˆp˜€5Ö{ôíÆê‰Z«v«·Ì'rׄƒU+ÉŸK¸-ø²s’æv"_šýDÚýÃesÚD -°ö–ÙÑ7^Êì™ù†¯¥{ì:ŒÎžð{ KÔ:•ªË2 Û4€e§80Ú]Í`G G‚<»<ÆmKAdoà UMÃ.£ö†@‰øuxÕÍ`‚ý/¸E-oN|ÄÖR}2ýFò•¯òئ£1h·íÛæ|“êr¾‹iˆ˜ÿØ` XrxNÎ/’7v*û·g¦>?:špù” ‘0YXÛÂשÔxS…Êí<{ÆÛbvø€XY=ôãÒàCIñfCò(ëíÿw3áYy_GWÐÎ C…:ô=\ar-\ªõü E ù£ë04•­œ'’ }iG÷ÀeGyJ¿¶Y''Ǥ+g¸Khôî JE³WA]øû†–—=ÿòQ6¾`È7Ö®\S…jͨ·l ˆ\²ލÁ•ñ ² f£’Z€äŠé.¿2ˆb+#GÁ;ER÷ácì'î !©gj¹ÿ‰ÿcoøÿ°#\ô=¿ìk]¼H¨Ô­kü¶&qıˆ¡†|ÓêúËîY11P¸%˽ƒÉÍkùòG|5åzaèQœeÚu¿Pù÷&ßüé·ÞýçM Ÿ¿é¬.šùàáæ´’߈)dxXºã;Ýê3j­\•çðÈÏ䩅еwÜr«–7xJÐîrrw©]s1Ñê_ #znaFêÛÚª- NƒÕWEGªz¯3*àÿ®½~%¤®›?ç×h–„;ý¸ååÚ%ÆÖ»â%6"GTJ¨&ä¼1‡&buÌAÆ#À±|¼½£Mk—l€ ˆ0Q;b—2Exˆd¸QF Xæ)neBˆ®HšŽ!¸ÈoüAÿæ?âCí§Ä>&+˜ÜèÄ.å)Lm ~°øý‘ZåcdG«—¬ŠÓ÷$uwAc>‡N#GAÁNøôÄ\jn…ã›òAµ\˜'£d@¥ô(Ìíõ»éýéÌä¤6¬Y{­˜«`Íz»{ëá‘ZVC¯ Û¥×T\Ó<>­¾±ZÖ-K;˜aœãVØÊ ¿oâ< Úòöƒ·A²0Ô\nÕ¶l|«=jàUsëÿªø–¤MŠ=jålYu¼ßÊ (zÌÔ%jµX  _F†V_eÎŒ½¯S;AììzÃ2Œ ÜR‚à°K–q µª9j5iaW(=ð¬93ø©AùºŽ³ž Þ/‚µža=¥“¼‹U¦îª­Æe+ë ø§Ì:r«ÓõÓ´:Tù”©™eñà1!@*ŒŠh/¶õæÝ-¼S©\ëd7ÄÆj ‹3”xéë)}fH½ uÅIFÆá•´Ú'ƺLd¦Â½¯lFv(g£Š5E›Ê±NrýC¤Ý ñ€öƒ¼ ô åñ,ésg¶½/à]°¬¯Å=Mñ[‡è8äN‡O·éL£)”䔌¢d‚;!ºap¸Ó‚0±¨ÚÒŠï5ˆ [uâ[2c0\-e„±6El »¢ÅÛec6VåÈ×è õ—‘ؘDá"ab¢ÃLâ/$¿2ë 7 fé!4,5C©ø%[Îo3ÀØh˜j§˜€9)‚ÍuP§ƒè¤[QwÀ }”7€sh]´ÊÕà Ê4cÑg¾ý¸,`ݨ›ŽÀDŠj^¨õ‰` Ú¼ƒš®°2uƒ©x‹wÒ©h{Òòì€úaÓ\' Éì±WõŠUPò=f{Íð&Ÿ<' ᥚmˆ†®š^zËòÚÛÐ6®0ïZ\}¬+çÙ¾‹,ÚÄꛊ™hŽÄi ‘\ÚÀnÇàSøYyYÌ¡´)ìÄ|ÓUʽgK5;èê•ë”Qvލ´3QG‰°4—eƒˆ²¤^*"¨ë”٭؊ȕž;^ 9é Ì9ùº|Ò0¨Aá«øŒ žSWc*zÑÜs€>Z‚ê a²÷¾_“Y¦Ú|Õ{Ñç…ZºGû™Qäݧ|Äɨ`Ø£æ ®BÐU>.ÂaÄjm}t (1ª†+-`m tKbÁÍAš±ªÀµEwtª¦[bj¨4)Í)á$¨¨ÈTP1C­EðÆ6«,n§Q- ¤9FSa ðÛÑzà$ÎòcY`ÊX‚´T@HÀÛ¾È[1Æ…¯-*òYLD·g½”è¬Üh›¥:<¶ZP怼ðJÞc P_C0Ôa¬6{¿EX'…09—Z6K]mw1Ü*¨ZZ0ÜJ^êøÇ â<–ÂKÐYÔâXóônS%IÖ¦I9«–;ƒˆ%ÄR·®¿¢ºg,È4Y‰lƒŒJÒ˜€â ¶hP ð‡´¬ÖXét(|¶cÀÈZ4”§ÈÁÖéÈ€ô­DYTYz®õêÈ‘m\vWR-BUm3vô‚{Õá ØLPh­^=—,ëýïÖhÛ¯"‡gñ! rÙíz•K*3èð‘ ¨XûÓæ;Kœ@TµÕfû†‚)µƒ¢…=l½pÄ ž öenK4é„g«íƒø€Ê€7ÀþŒMæ*/ ÂP‚Ž {§ÉàLH˜¢Å¾O`ÞʬÑéjÊÙ«®w‰eLAЬkÚH;-Ö6‡JÑ2êò地ZÆAÃ£Þ èËùM¢«>ñ&-EÖ îé1’ñQðjéÐ"º'¹håß·ŸžqïF-,ZnϤܶ¬6!`ejáµUîU¶—"Qè‰8²73ùý€ŸOpÑÞBS>I¢°+]‚€²ñ–-©&bP…dùToQЬ;T-TZ)«ST» ‰†uµÜ¸Q ‚wX‡†ïé@õ1oÖ§_Ñ.×0C2ɵ»ï,²%EQb¿LÉzK k¥ÑëYzR§hÏlî)δRM±V”-–íîÄ/L^JR ôNëôeí¸ÈCFíAÁЊå/JqÚcB¯=Qj«$£5ikDéÈçÉÈè%¨z¬tÈõÌ…¨µ<”1ÀgdW1›Ë§X·'}SÒá4ŒŸZ ¼“Û(ô»â:Xµ•€Ú¬ÞߊáΫÚõ£ e½`ÝÓŸUZâê ÄE1C´Á„‚þZ¡æKéJšG#hâÓ¿Ye#KÚ-yâ¸Óø„CÁ…Ô|\âš&Å7Öá%Cs&J‘Á{F•¸KÉŠ²øhàå¼?ÖÂuzé¶s,ˆô¿‚ª1AŒòÇÐöǦ[”±×Ip /m+û²—‡ûà·/bt 4Í5²/¶å–ÈJ…+‹Kl£¢²Ë^òþ(«T×H±/ÊÛŒ¸)r#§|>JceYbt†Ñ!}b‡cÄ¢ÃbµM·2Üíëʽ´¥ÇhJ „KÔÿÛÄ¿®!%$ÅKº_vߘoµ*ù\Àµ}Ù.®®º[^cÇþîña¶«-^êúÑ,›ýˆ“O©;Ê·‘‡Ôül Ân4䆵b<@2µì˜DÈR#Ù° \YzcÖ‰)Y' u c¶ Öe=V`èAд‘ÚulÂCG©f)tÒî—=Ø…fìe[«k¥± ‚¨UW*¹Xá¼@YµÊªÍœÛ{—rJz,F“%Šx`rª!Z/E«]UŠ™#H™áFaXK.óJKç‘kÔC*¢„;@z´‘°k‹‰I–«NªîZpzF͆bä+ I|Òäã«D‘½f[ù° rS©òY;Û/uUǬI¢f›FfJ³¥‰sÒ9n3L •Ç܆òü,²48A”kðC¸¬ÊÊ5 f]1¡ø æ“qé*Z–mÀ8™7(Ñ ê)2î4ÁøKÔÔ¼_hv•‰ƒQtœ—›;1¦dµâñ™î¢ýs I˜U‚VŽÅ^ æ6xuzC©ÖlíÒúÓWÚ:Â’b!Æb…†Ä˜1ÄDp»Ü@¦xÃfkP §PØ>DÔqvŽ]2d¦˜Ý;"È·*¹k,(ÊZ¦i]|Fî§t¼qy``\d—”îW\Æ1¨¤XÂ2%Å—›üf?„1 Î’5ÔB­Ô1påØê mˆ3Æ»˜n6K¸ÞnW%(Ž ¸!©”Kàƒëßõúß_Ô-ë97ŽÒÔÊK•Ýq]¬uˆØÁÊ·Á¾²…é)]+’“‰RŽ©±¼ “¸±ê òîû3)×T¦c.¹ê¤ä‹ñ‚Á{.Ç¡Òb ]WØYï‚ðjæ3Ðy–Þx)xõ¹gåÙCÍùˆs}r>6ð#¦˜é„ÄØÔt…J *¢ž!…(2«I(¹©‡Ò áÌÁ«1¸R’`À‡á¶¢Ë™`¼~/ó¿À‹%Ì7;»%Ýf.ÜÄ»!Cé(…Ž«¬ârˆ K#ÄQ†ÏÀZ£STY9™K`‹‚Ú³ ‚ÃN²ÁRS‹æ§ù]¥›»î3_êØ%±wíoêYzLwK¿©S&`2:ïw÷ÜÄù£´_á騢à¶ô£oK¸é„S€1xF¯{ží©‡Ã§Þ!iÄ!lBÌKˆé°<.¼²l\ᄊwBÈÃvC1Àµs1oå°—d¶¸$²\¹råÊKü–ü-e’ÃRðrúÎ bÈúFA}jY Þߘ}’¿qÔ ̽°¨ п2âþÈæœ‘&âÅñà 7‚¾˜Ýn>.ÿ©êÇÙyÿ¤2ëܯÜÃØ'¸U}E-TMÑXïvö‰’GÒ&ª¡¢€áÉìÙåXK N¹ÂT5ïJC°J(F0Å vdi.3²€dYl² UÜ; †P«Äi˜½`¼j+S#0æâ1R[Q¹l²3ñ… ”Æ ž%<ÌK%ܶ\ÑnT!8”JbWûS`,…þ#P‰BÀ`â²At))AìéêˆÑ,ùÿ°qJ9ñhíÒ Hnm8c8hŒ®.3Ž£9Oû–B*Š;AUÝjïÏ~äË(Öþ&†ŽŸöc…ÃUÅ÷:Âb‘Âìò'î;!à G5Gªå®„YYž Þq¬Šd—Ò[¦!a„Ë0Abd`3cŠñ+pÌ‹Â-Ê^e³'8ü{³p}1ud±¿ÀÔÙ*JdÌSSŸÍËÏà·TĨb]ÊÄ[,ûÃBïÆHõ•Q&¥öK…hÎüÿØ!syý ,¢õé]—§üÄau={õ,‹Š÷BEj¹›0‰N*dŠÊw*įáË)Œ’ܦ,±r”Rç9‡s9¸Ù˜¨ DɬÄÑl#mÂ(KÙ"¯èÌ¥Y12Ù(ËXb üÝŒ3añXüXÃ`Z#¨êqjq\«¿Ç“ñpÔVêq-mÍù‰šp"6Mò¥IÐÿa›t‰én \§x /¤+‹®êýÄŒ™/Á%œ¿@€¨…@B\ÛÀ, Ä bmn 5 Upq¬ÐÄHª:,ÍÄ´¬M¼Lªà†%lKÿÄ'!1AQaq‘¡±ÁÑðáñ ÿÚ?K~f±n&|)—X챯 ³—ÌÁ¹ô0o c1fóº"ê;þeÝžðçb;³®Êb‘òMÄz§í›¦uXmß1._@`!:‡‰¼>`´v‚íðCOà%¿¨˜ú”kà?SþQ ßõýÔu¾O9üÃøÔ_gƒõ:_ê<âñ©[Ÿ?à& ø Òx"ºx>ÔTÁðCGâ#VŸ§o‚dø#NŸx¾ Ñø'Cà‡ùDÿ˜N? áà‡ø‡êÆ"µñí-txÿ`ÚCÌ2û¤vÇ™C'½þI€ûŸ©`>‘^>0ÜAí(—Ùƒ¢XqÍÁDë‰x„‡tÂò°ó-åª ÊM¡L¦<ˆ Åkât@ËÕ“>‡”ÖT*šK˜­ E" µš ²úNØUK¨½`ýa ¡+ƒ‡Û4`ÐË–Ë—S‚pDU—ÒÉ„-‹AF•]lb¡jé,KB.YÊà–Þsü#1eÑòÊë¼#_´3'q,ÙÙ˜—TSH–dKƒ˜âo¸"6n[N b^' ZCrl™š`ÂbÍ(à$º-]F†c׿LlÄ^þ¶J„´õÆÙô´wÎÈ/M>ß–\)¬v\K=°:ˆbç@LÀ¿BËÕƒ¤BT‰au3Ksâ!*Q´-+,.£–‘ÔÓ@o(ë¼®Ì.Z2¶±z£ç nÅËÚÕßQí^òŸrZüÜlc³Zvnu3Þ( 'Qˆ1r–)&°ÃdC" o¼³=„Ü>ó¢laº>`w»”òs=¥üŠ¢Ì0.‘ªÒÖZ¹tßO|b+zÏî âEæ1ÝÞ½1ºŠÅ’ÀòBÚ?2÷‰TdPß–7tË‹¤Tg³=!f"”PnxZq*"XÂЋ™Ëp‹méd0•BðR1ñ™†µpí=’ÓÃd£4Àt~;XŸ@•èe]Þ3Èç««·[ô:v¸U•ƒpÔwrüpËo ‰dS’ÝK¤ ¬&B™„Ã. ƒ:Üiˆ,w,”Gã~ –G²ày 3¦ óŸì§O'éÐ_wê)X¢ñ ×Ö/¬éú€+tǨLr âTûÆÒb\“÷4ï„y ÎDÔÆ±ek#Ãíˆêܸ`¹RÙµ0Ùwñb¤iWÇâß‚7TE"0²(™T-ÀÀ$© A@†gÐQ™´ôL:û&Ÿs'ODå&§öûs|–{€/`@›/‹R¸¥•-Ø1x»s¥f jŸBì­ïÕø;»ÇQy¡MiÔ€bbp0Mà]L¢JÊXLBU8xêäìÅî:]'á–G$8€»1F“°? ù‰_¹øeé£Úÿq:çš”E{†û£ˆJ~ª`€‚ŽäN†ûF¡Oh*éó-y¨϶QoѺƱ$Qʾfc¬ÅÌG˜Ð2‚' ˜§Ô%J'oDe#SÌò•ÇL´ ÿ8Êî–v°Û*HÙµ˜Ó¾o€K(ª³”¡NÊ×sg¾¼Ìju›—]®2(›>Õ‡°z$Ç´¶‰§ðÈûFg@#äOh±¦;YÐCKH©’V‚–M ¤rÌÌ†ë ¦ ë2¶EÝO$¨Ð®– Ï‚[ÉùýËÿÓû‹p÷bÿ‡Ô¯P÷ÿ%³cùÄÓ ÝÞÂ^3ú,*?Çñ CÛ"–«Æ°•¨ÊR¢:-CÜ%3%Þ#E\pw•ÊMRÊ%Loú€Å†¾‡=4€Jf&ø‘4Ê‚€Ànd€ T*bå…OȾÂßH8ÉWa­qÃŒë˜Dše)Våtæàfl.Ô~ôùŽs UÄvlÿfB]œ="œÀÝ-ù†òäK#ŒSXiäŽÞ&ãÃörSå2Ý=æQA jDyŽbézÚÙÅeN5Ãp£¬ }VÜÞv‰*âÚ0»`{Ÿ2ð7ºO˜R!û$9™ŠqGŠ˜/ÎhÇO¶`1-t†#2 ý@4)“Z!¸¬[K›‘**¹ÅÇ(K¡B¤NˆÖ¬eÎgD€m:Dr¢žŠÈ†xb @ŽḬ̀֫bBË„]ukêüËsÍ^+ì@lÛ¥¶ ¥Þzg˜çC¢šÒƒãRN)âÁø•ÙOcý¯â_Èc:=<æÕè÷ßÚ-K«jñŸC›•Øäèv½¶K¾u³Èð›'¥¤R0ÊÍl~xˆbïæ]¢N˜0!,þÄ¿ ­+YúihWYapl¹cë´ºtÐZ0Ž£MšÄLâ°Ë‚C,äí-k±RÀÉZDa£Ñ÷ Ep"FØï(¥,<ôufWnRaàb)C5%çèä´:A»€‰Óx‚áÄmw—S'íd~æ ½ãÚjéÕ{¦ˆ¤á¨Zì–¯z‹Qì~É l:áB•6XÈ—N¡n1ÀÖ×µ8÷ùˆºyƧ4€Õîqãh ôŽBÆ]T÷1õ¬b8½ßî’Œ‰x8®¿ˆï°¤,C.Å l &ã¬Ê·2Á€ÓûnzGã¯Áý‚UI÷æ'HmMú2ÐÓ}¿^ðˆH×u•¡®„ ª UjKêrˆerš¹–†Žÿ¸Ã*Û9ωPG d£¼Vfô®#wÁ‡‡Û5ˆ¢¢\2çEõO(8;ˆ@.1Kñ‰tuŠŸx9lW T ˜)X2è„üˆ{ÄÄ I¬£ö¿³6¬«" Õn^Û1¯o[õöGÁS =1§¶e‘ÐϾ~Ÿ¨è"°†Bоß×ú¯7åú•ŒÏ/C—ð@D8Mþ#f3ïýŠÖ…Ö…h‰QËwÒœÞÍàg ò–¾S ˆ‰ƒQCœs)&e¡·µÜhÁoƒþ;E(Ó±|S/µ¤7Vëö×êÌÞÁ§«íŽ{‰ó_s]ã]áH_ycЪp&­fŒžÀ}±@²Y‚#*†‘ÞT¨ˆfdneôR¦àMåy‚®:ÌIbàN„È™ŸŠ8[Ìo©ŽÚý³•¯ökf/–¯Úÿñn/Q\ô¨ CF–>å‡[©¦‚ÈÓ}x›3]vñý¤Õ7o oÔþϼPAhÿ­S¼Ôz«Î?0ŽwŒ¦±µº¼ASXÛ¾o¬dj :ƒY4K¦‘&€zQóö0B±£™”ÃW›¡ûØÂCòþ<Å÷P¼AƒÀÁ\F´ÌµÄ÷ðüÃYàú” 0êûcMâ0\mÄOi¨“‡X4bÎ%Ö¬AÄ”8†9‚é4céžlh¦ ,$Ê0Z„$°ãŠ\MÔÐ"s0—ù™‰\".°æˆ¹ŒÜPá€c ´4„üP€ß¨ùô5ô§ujï·Ì„À¯b·lÏ»cåä"hO7ôƒ–¹À9ÃfÎfÁ§Z^ú~ôù—6†ÝWjÖ²äOÊJÝ3MGw—à•müø—¬¶=ïîëá¿Ä¹ X{oð2ŒÊ3Mº2Ýh¿Ô½à¹]SüzB™9»:p53©‘ é8šë[qÕýDÛ̼¼~àU @7"^&ŒËަ˜6óùÄÚÎ"«õN©aLÃÄÞ1ÆÏÜSÓf*©„Z„ÒCz%Ò>ØãH­+NÓ+‚õ–w„î:Re±šGÀê¦&¯xß¼ÁϬÁè”8CÓñB MþŸ»¨µÎÇmw¸ Fe )®A´ñî[²twâgÐú·g×¥ŒÑ×+X&‰¨ÂX5üœŒ²¡åuOly©ã·°A–ƒG³OÔf”‡Ê`ö=Y%Яò_Aü_Á]ž]×ë—ØéT8%K—‹ÞTûûÄ9¦üLí&iÜÛýñÕ3a â±òÁ «ÖP%¨SR"ЉÆìWiï™m.Ò -–Á]`»ÅqbZKGc·åšô{3±Êe¦.“N4ÆÚ+fªQþ%‘°ÓŠ•òÊâe.z,ÉbáÓ;&Äf Ìü0ªÿÁñ ñŠt˜kÐP˜4E'|ß[އ²?/B7Àð(Ï.¨o0YÈséGW¹ýÝ•øB/ˆéŠb˜®'jI©Ào[˫̎1¿öÑ]ÓÑfÞŽ²ÍŠz¡îŸ\‰—ýþá2nµU}´x£í(vÜÒûÓ(Ь‡ŒX=؆³Ûõï—uýŽòËfö¯7ø…( ùægÖzôéµÜµ\Çl¨°4דüú˜Ts¿ûe»²€¢´HÁÉ-½ «7 *dˆEqùa”C¤êŵ²ê"Öa‡tCÞCRÅå –Ö%PÄɶ¬Bö—MÅ«™CÅm:Pº A™d²\¦n¨H!”U"6Æ/«žœ=#gÔ,ŽãzS´pÈ8&ÿäAç¯Ûßr±áÂ{3]ÃV”¾ ft «yâáÈ9µyÐø™ÕË]Ñ9X;ª,€4¦z{TÓ–Vuxl€’²¬< |}GdùpáùqáypHDίîW1¢ýùÖ9ÇËü„hýùÖ(H‡"¥½Þuó³1/)<˜”è_xEb%E%ÊP”Šo„Á(i4c³ÛòÅèzçÓ ¢%—`æ‚ÅækhZ •Pq(ì5–&BV¨XPhV°‚R\wvmªà\%^ñˆhÓ£$6yæýðVÙ}â0¹e:g‡:GP.¬Ãó0t N¸Åx€²4ãIv½ÙoK^€Vžß‚ââÙLûp<ŸÌšÍ`òÙ—BØA&ve¦²Ä™‹Z˜J”D#­+Ñ)5*q+ä÷}é)¹ä8ó,ïÉp ˆ‘²mÑ ¢ÄC·¨ÃPÀ¸ü³JTÈÍc`-‘#KÒÄ¥±"d/‚áž™nÖë š…¬ ĈŠ.°¦ë¹ëœœ5•7 ®nÈIÝvmôżÉÔ¾»œ>Bƒ2תlœLL:yò;•\oÝêËV%_ݯö« nÄCáE:Ò·”)´{‘¾´¤44G"G‹ä°++Œ¡!w¼ä»M“ˆÈî’Q‘WzÕûNM~XѪMmp†a ‚ Û0Çc¢ ˜‚(ܶ«^ ¶ª–ªE²7ˆUœ*ÕÝ]¹€ù‡d”ÊbSx±kÖ0íe@f¯â0 ’ è§Ämq¾æáC)Þ¥;ª>{AŸ7rÙ­%y%=5ªk«ø8Ú6‘zX,3mfÖ>…ê›ØFì|ÌÓÞZŠ:µtºÊFƒ»ŠjÛk4]£àD^DÊÔ•Zµ²Rܪí’ÃbôU÷l*¨QjæÓ]F>8ÇÉEËÞP %vZ`FЖ¸-[cš€ °§Jé @Š*nP(‹”äJ¬”\ZQ®Ðv^3ˆœfYà ň­¨mÒÕùˆ'$ ¦Ýê×âßh=y'“HxkZ½oÖraàU|5í059HˆcA7DXª”ÊšKW·åŒ¶n£qÙ˜`‹mÊ:°¢¶‚•º"Âþ ZÃ-U7à ”‚Ùi}b>Š»Š!Ùz›N­ëY÷F(©ïù´Y¨;®U}^§ Æ˜™u£è=Ï{µ7 r¡7Œ‰Õ x·Ä+U·,/ŠéÊÅhÔSVä.Î3Z±’hÉG²¾% ä4.¨,¿˜ôЏ²3ÏèÁ?׉Ѿ ±Ä2/±“ÍW¼ì’Õ;‹Ž¢…¥ƒW@â$8YaPñd˺ŠTpSw£p‚°íTªWÒ2¹›PFøûÂ_l@°Z½µÔ%˜o_½}Åû$¦=¯±1¢÷:2;2]¹/6Do¦Ù]¾Áwa샸xj«t¤3¶IO TÝÑy½r^ZJ["r>ã7PkŠ »/¶g»€+Áuﺻ¥Û£¹*¨’j¦µœ•Ž]"mwUà¾{#LŠ ®ÞüÌ™˜e¾‹…’ V1¡-Õ*—¬EãòË-m‰ek Q5°‚¸–z9%ÔNК_ðaéÔàÇmE”½”2Ñݰ½çgNÎɪ™xp£Î~"‘ijuÔvçuƧ-;âkG¦‡ÙÍJ˜ÃæÙC‘0:àNj·„ð\NL¡«­²&š0Û­Wk­Œò¸)uîéå·°Z¸ÇŠÐCT¼Å¥r/@»]­E湕½5‰T([É{áéÄ¢³Ù(v»èÔôp×Ñ) ¿zƒtËhé6â!$M“†Ðêq²7qÎË4ØËºª`¬ˆÔèRk¯h‚G%›FçãQÖÎ.N¢r{-ûô‚Î ‘?•Á( ×¸b´Å`5£a¤KéC¢ØyóX Vš³‚RÔ1ÐmšºÆ\Mm/wÉåð—÷‘ÍUîeænŠ´éSÑ(é«hBŽ´´Ã»™Ôïꮺ]XJk`¬ëAf™uÁFðfäHÕvÜÑ¡ÂZ/VÇÁì^YŠûf¡ÆŠå×Þ®Y«Ô~÷|N,Rök®ã[ÅÜV.£Rò~ξB ÞÇvc7G2¥°eñ0¤ÉÌ«è! £í…ÊÞ%Ç(F !±©HÂ|ã†%Pá Y(JË¡eó „ôŒÆ'â|–§wÃdTP qÄ#EÙ£}(©Œê?¿tËï r:  ÝÕ÷a‰ÿ?â%a™áû> ó–€v Mõ  ÕÕÕóGˆox¿¨FªÖ—P¡Y¢;:žÌê ~Ë“Ùô0†PHèuù{¹:ù夹ðŒù4{B ·(—ãh¤wH5¢”‹8jh%Ó½)ï(qéÛpåÞ8(´+:[Q5˜Å`©Ô³lƒžáRêêôº/±àÀPÀ`†pÚ–½l¢¨•Ak l±á¼FúÚZ kzÚ2GDuð0)$±¦¶²RºÍ&í½m¶ã‹£Ép=–@p`´7­Dš,ý\Ó"ࢪV·sèÊ” ,Uú-%%\//LÜJc¾Ãí•éˆ 3+i”&x‚m1¢eŠà1å2ôTBRfà˜˜Ò0ZPßÐ¥âT¦\,‚‚Ìe¨Ž±:¸0d·2ç¾a„ PíVß0Õo54Ó`ùôq3–Qœ ÔÄ ÏA"KŲQ)̯G ÌC¤DTV㬣ÔD´£Œø¸¯CÐ ‘€€ÚS+Õ d¡-4¬ÃcÊ,’¢˜æ37ˆ™½˜ˆ1lÞ%²”lbÅ!Oçi¨‡zË Tzæix Ã.Þò¤ß]e*ì:‰¤©0På¯Já9ð›ã>q‹Æ”qn hö}¸‡zÌz!Ä[šÁj¥“´s¬£˜ŒYfؘÅD€ÁiÕ–ÞhÄø¸Ö†²‰uà‚£A(Ò6K— úS,UB˜íî ØÌh ‘|ƒHÁ%I‘”9–‡«G¨„«;auyjPû%ƒ¿îxê#>ñ9Ý€Jœpßî7“ñ(Fš¹ü7á«Ï¿™ Œ\C/A0”a[KC2ÒS´²ó)*½+1.]€ªfˆAHÚQL×o÷D²¦W11*VeJfcT¨™ˆ¾ŽRˆN‘2×ñQ‰°÷éj‹A8ŠG£V½÷ñ-ö:~¥ î:ËDÄ céu.ÉI,»Ý'î–@5!@»ËŽgQ©Ö ¤¼KÞÒ¢¥2’þ1è&ó `‹I‚¿P Š´ÒiXÿ!ËB+aŽÛ7Œ^æÙa|_ÅÀÇØÿV²‘d,%mX/Xn–r¤(É.¦Qƒo”BJõ `תæX0’F¡4še.e¤"f_0M¡ÊʯF|?Üe0•2B`ô5›BÙÒ«‰uŽ4†I´LÄ"õ}+ÑÒÍ噃¿é(^QfWÆ©L@¦ íÚEKHËÌ#”%ÌG ú–ÄÁnÂ×ÑlmE™¡ ’Û†e±3/MåÃÓH,¹mσûÿÄ'!1AQaq‘¡±ÁÑðáñ ÿÚ?¬–Œy„š?x•¸[sJ„Æ ÿMÀÑFñ5î©W·ú² _¨~òy|F8Ùk~ððhÛUôŸÎæZ×¾Â}aÿ2?¬*XsGṞzb >Ó-j §þð´Lä|ú D ï|iŽTÅÅB?x,#ÈÀ(´ÿs‰-¼ÈË_¾Ô ÇØG¬\‘ì~˜eØüïÚÂ\nÓý° A¤§ìrøiÃ{÷r¥’ÿç#j3=èá|¾ߌ„P€^ŽûCd?“[»î˜OÐè\IϼÑáp©·…Ž!Ø`”ea³‡Ò»·èÁ0kU¾ÇíޕˆCbañ1%ŸŸ·-Ä݇ðÊnx?ƒŠB½%øÆÍNìxÂïgêðïíì?mEýçÃ,§÷a%«5ååJèS ”}É3´½ØYZ&›%ù«rÁ&|µ}äHöÃBô]¥ƒî+þ0ôrñ…%óàLáëýᤛãû³X#C­ž¦ip(cýì¼¢9V&*üŠ×¬¢<ã÷•›߼C…ŒùÂp±3ÝN ø\–˜îü`®ŒÃ˜ªìe_y ”¼`ÑpQCñÿŸÆZ†²£5÷g¬ç®ã¨#ûþsü±6©zÍòO2¸ÝɆnc" j¹Aç¬RØá+7Ì×xüWÚoåçk®´ý˜'I8:}?ã ¤=ÚúìP’º;Â*©·ì¸ò¾fʃ]øæÞTc“]Ç>ÃF&añ|,ã9ˆ¢Çʳñœ±0/Û³(0FÃËQ »-È ›ë&mÙÑÑ•Ê/3D>Ü|å è§ðÌJLC“âa¹ªl ê¼ÛN¢ÃÈ*޲i(Ÿ¼•"Øh˜z(m¸”¡uå€2¢Å‰!8fÃć㬜ò5³kpýâC ê(~éËŒ‡6¼ªü˜€´˜=àDI—Ö°>!.¯ÂbÂA¡K‚žY£ã NfÞ}bwXë`å´……ÄFì…ú™{íögSƒÉÀ¨vj°GDq±Á— j§H¸·HýÜwå ù™a´ïX™ím!Î:Ÿ{ÀGP×ÞK|íI‰ÓYvìUøÆ¯\û1{aÏ¥(ùazÚî@ÎYÇñ„ Üö~ðî^5ÂæºÊê*Œ¨¬xÍÞ»qF€ï=b8«cÕ_8`Åη€ô0½»ùÄXσ ‡ÿ0pÂT†¼ï'ZQuËë¾/Îoæ1ìd½â=둼k2œëOŠáûôŸÎ²4tÑ0izl'õÃKBˆ±18šcà+¬Ñ·¬Å¶àþ³#¶)üä¥Ì-m£0憴û²+ôÉåƒhR"9”¥Mà5Í¥{ÌÇ«ý#Ü©K*Vf09:È„šã¬Go½ Œt¾r5Åv„lQPZiG«Þ(òEP%ÔÂQìÒ:* ÀÒ ŠF§õœ"ÚÜ8ˆR±ŽB l~$4 CéÃì\T‹x„Aà©1M„ç×ÕÈ­(§ñ8Çv7ïœP`ö3ÏÎ"“À·ëô+#õž)Ñ«÷¬àAƆ€›Ý”d<†ID4˜~²™‰Ô?ù„ë±ùÀ¢‹C9ht$\hM7@=í3]1Ј~Y5Â~q W]OÑ€«-ƒÄ_‡x<6Kx*bB»%¸U9Ö»ÎVƒ§oN¨¿¨«.¾\5”"_¬DNÚ#´£š³Tžf-”=ÜÚ—‹MÜÎÕ%¼O¼t²ü)Ør|cX!`šÿó$<3³‚w1ÒqÁ %º8Íž?§ŽcãŽM‚_Ö ,;ÿ|Íšfýg Sçy¨ 9Óç´Ã&õL~—E¼O“÷OÆ*ÅëóyÇ~䣯ƒ,©¶ÈŽÙÆ^£ˆ8 ä ã‚©Ý5ÙÆ+C·ÜO^œáLo0³Ïœc–¤Þ”rvÿ~š0Þ€pó¬ ɼ÷ TeÚ7öd&ì? Œ$€¯ÖZ>Z0ZêWç-x½&ZA>0*DÄ=fTâQ9ðåÀHy†+4hz´ßç;:d]…@xãÞT¾¤ß²8H×h'Ï#ñ‰‡aÚ…AÒŽpšK¾Cð¸+dÓâcµ.†~PýãÐðSg Ð|àⓉ?ŒlÒqè°«C,€‘ó1=jdG[gçÖUJ1HJ›÷ƒ¶°·x±Íž›of44m«ì¤LxiToÅ#Š"xˆÊœ“ŒßW\9q¤ÉÆËµ˜Ç?“*6 zfoµ!QF`^pÿ˜ ’ÎYn„`Ôz†@&m¼d†‘3îr×<ó…¢{ye$‚i¼ãVǨð-ZÔ„Bz×Su¨Èõ¯~17Á¥vä­7h Îòâ8,&vöùÂô©•DûyÁ-/f+'Q48:Û}ò^rm?£…ª«¯‰ ðçF9Ýn<—Æ#z0OËWçÞX›o¶V)µqÿÐ[2o!ñÆ :Sï°uŒì‡¦â Ô{zÍT:Ö,ËÆNɾó¾óóo1ZneWñ–D¡x=ý˜IÊÍZš#¬~=Êÿ|:?¿Æ>"Z›ùÄu½¬¿Xzpß q­ÔKå_ÖC`å€'¬¦07›7ªše ¤kE/ù1iEϧ‚7%:¯eësƒ¡žtZùÀ'ê·Ø†håÚÓàÔ÷¬¢× ƒò°Ø€zc³ç8†– % `œæÔpdˆ^Sl©<%'Ü\H€ð@*ßO÷¢ø—Õ@}k+‰›=ãóÀÇŠBõk Z3S#ñÄJ$Áãb˜Úæ‡Ù´¹«T|цâT©XÏ”>ñlªbœñs'†8Üö!c™ÃÆ7:Óóc3lîF¾Ê©Pf‡Á·æ…Ÿ«Œ…+wðކìœì§Ž±ã'½æ_õååÁppq¼€ Ýr㇒UEÇŠëÖ±z& DZéíŠZ,“ãe†½96‰€dO2ŸÁFˆ/Æ€²æ•Ö±­Žð‹ì8vzçIrœÇ‡x€ða€âÕä~1•qAÞ§76†"¼ë ¾ŒJ‚ÀúƧŽK›”:I4vàðRh9ÁÁÒñ3Ìç1眥F±ârØÈ2ÊÃÊõ²81P X@AÛÕ #WTOS4Rç…ÆD@`ʘ$†`y '™¨ô$«A Hâ,ú4©CŸ˜{#yb~¬äOøüâÁ7[–#¯9…ëãçCçÀËfF a§B)ˆÆÕâï.¶âñÇ믪%ùAÅ"Ôú _¦8—h ëhÏs6LoöØP¢,ò&üL  ªûf˜5Þ:poÜÜÄ0SÉ é¾+u¼B™6.ü?Œb~¹âädo“PÒ æv\¨XÎw÷ï¡"ñ3@¢*MúÏk1oO¼ƒƒ’瀯yÔk¿0ä'_Ȳ~óCýŸJe81ølô¼£Û/é\LÑMDªO/X}ÿI•¾ÌÚÆvîãG]&&@ŠHiÄ=ONl1™±§ÎRM“2Ê Aüä…×¾XÂ;ÄxÀ œ¦ç#}Ì;€{ϵ¶ëÃÈ ŽˆCšc8CË!«àÞ%#èä*÷K‘¯XÂí£¼ðI€ê8œ¨–gÔSuo81e"Øît‡:?f\Ñ™<Ö÷XÈ<·¿#•ÈÄw­Gj¤.<õ<_„ ðÙŠŽí b]åY®iü€õiAÇj8s4µmUOB~*¢íGƒ¡†ÈßMQMÑÒpô™£†e{´H–—Z­ ])•Zs¢Òq²ˆLHÝ~qÁ­xoÞø©ùo ‘f¨+6ïœ â-¹*!ñï&:`÷B`K­Ù98 Ë2D˜ËçÉ} ¯éÀT„ ~qGŽdýÖ;  xÓ0O#VŽOšav'Ø1”õr5Ý0=ðp±·jßy`G´¿*:Æ<âCôn>œ²qù2(.ˆr åñã<'ÅYùÂãÞ'— Ñunl&±i€[ ã¤ºU~îMC³%-vrGÇû‡Ü³ÁŒ)ûç‹ûÄbïoÂ` `hmECÒoœ ®$øÅÑ ö>qFr w ­c±¿„@å1ÈTI´u¿ë•i´‚h ¦(U®wбK?9ÛÚ”>íÃ{ƒ¨þq¥H › .÷‡ž'‰9áËP¥ÓŠða(ðayÈ–—gòO†cª‡ƒbœ\up—-ž7mì'nÖ]»ÌÖ³Ö OKx‰t¹.ñBU`'^­'IÂᆸáÑî•*J8>-m€$ j‡VxÆfÔ³µÊ[æ$ß¡Îa†Ý#k¢ÕäbþQØv Ú®ãØ”ÓÑð;àñ—¯»‹€I­4À;MÉîIJ胙“]cVF¯O#Ù;›HæÉã`u—?˜LyÇc %ΡìûŸBb•̳xß5~Ë “¨+Ö‚ëoƒÙBÕTðiß""‚s+¬ `¥u ί+5»kpÖÖˆ™çë×Eúž±ÊÁˆ/·•Ö&hØŠ@""8S˜™TüÃNžõO¥zq®ƒb7áx%À!L±5®\3á j AÚq‰{tàòvbâ§§"Š<¼¹™lLͬˆñ2óŸ3OÖL‚H$ß'YT}ãwd€x\>î]Ã} ƒæG R½ 2Ÿf uNY²¨l%y `4rXåC!JŸ2Yòåž<ö;?œiCÒ*Öùæó¶$PÝ4ŽÍÇG ‡8¢4õˆ%Xi™-þ {Âm‹À`ª°Ê0z?@âhBƒ‡ë—"Ñs_ǯ‡˜~i›½¿ü2bmþfPß³ €pWÁÃMM>Ï ”ØóËøÍS-E ƒ‚  —Œêõ‘°ïÃH‰hK¦à2‹µêDS9)À/ƒÃ4U¡ÞlI èÉí‘‹}æqü9Æ4 ÔÓð N}ªhõ¼TÒv`ûëÌ#Œ(ÕâT¼ 3ã¦À›(’÷‰‚V£õÆ$" ÂqšëŒ€š]®ÆöÌÆ™­¢Ÿªæ„È0 ¦„ GºX†J”¬ØÒ¬[~ù¬"pÈ‹þ6Ñè ¼‹Bh ?‘G/‡j ̺é¾T÷‹ä>YkÔPµØ®Œ'$°~È8Ùé$?¨#àÒ†"fÊ6 ÃᆲêZ”8@4 «¦ìêuÏpµm\ð[0ú²‡n¸‹ViØØU,¼‚T * ä_ Å·)´Â2À•GNÂð[’9Ј´¾çœ ‹±Æ²ï§3ÝÉi)ÒüÐ^@¡¸t'ÈŠ>Ú'wÅseŸÒZwÐ~!—J—ˆäâåy”,Þu.ˉm¡"ÎÞß~05d¯CBéõ’Çj?y{·ý0kéjÀ vÀ€ÁA½‘LJâà5Ñ —ã«9P1fÄši„ä=ÃçŒFVÛÅõ‘s\Leb†Ž_&=lseUÉo ³Adœmðæ÷ÑæìAƒé3ëÀ梬Áœ¼ÝÇÿ€âFóm󃙣œ¾½³z켘t@_È_ÙO¼}¤; ŸøÎ?˜gæKÖTz~øk£^p?&'A/Ýá J¾f›ë.GßþÓM^¹ÊŠy<âÚèVCòL~í‰äìæ©Ø&'fÜ1´x}Öñäyc'&š—öšc-4žf²pFsˆÜ}§}¸»+m'„ËÔª%OMN÷|NÔ.O·º)Æ·‰Ð+ÄÞÒÌ„ö:žÊoÐAãíTÚ mÇ´'tÖ«±ñŽ’t—Ì…Ôž ÷)l•àï%†Ò@V*M1¸ ›6^ÕZØ­QK{Ö\Ôæ€)AC ˆgžÓ„ÜîMƒ CÝ5ò‰øÂŠƒ´scQ¨Ì¿œBæµ+]±VºöåV8­£a¯4~bHzùK ;Á/ñ¬Qâ´öÄéákZŽÕ­À©0Mtž‰„¹CÁºiÙç4ý!u¼øÖ6W¡jQü&–óÆ&~tyMؼsØ Í/®%D¨îéçl.'°ý&B”œ-÷1´çvíÇF í㈠Î^5ç£.0Ä\£8 ˜‹TŸxtÌÔh}™Dö/Ös¦NòåfC¯:ÆDc¯úqu²:lB³zï57H¡=‘Œhıÿ3z¤/cŸY?GTI§ +~ušüžÖ°Ä~gñ’(ó´Ìl¢r8y¨£â§ñ”ö2¤ùEÂvp`¥þñ!ta¶KÆâ¬AºÁ¦Ínð˜ozijȈ‡ã#7~ÃÄ¥íUåWÖ4Î?üGq~NW‘(ž&`ýÕúiÖ,óÅ.†?•ÄŽè#õ¿ÉàcNt øt¾?þ C*u%u7 Ác(7¦‘µ‚LE¦¤Ha†µg~ï×–Z”¹öQü«A›² ü(hð¥dj j<(; #qx⦇È}0#°Ä‡v&Áà2•@y¢‘ÐT„*³<ÑTí™uŽUê¹áDcÒƒ÷ŒfÏ&\Z­š‰¼2@»¯'Æ0áòëk}9ÍN‹¡´o†Üž§™+Îö#©äÍ9 .Ÿy`@°i KÑOÜÀi¿Œvê|~0$õð/Þ -4 §Ûû\ámšaëYËÙ©ã `î¬ëÆnNÁûÂQŠIØ:AIlh ¥S´ˆÂBB€ƒÆ üICPàÈ*ŽÀ›bÊÂ&ÄÒ"iÆÃ!'~±HEΜç?:ÃlW§¼å4­˜FŠð˜1¥ó‡QG˜®ÒJÓŒ@0r;|á UOëOжZÓÏY)9Aõ(ýf÷/˜Ö)ÒKúO?#%i>ð4BˆYOþdÒ$ô³ùÊÔ€áÿ2À;<á–Eµú5‡®€Oóƒqp5'¬G’tXVÏá?Ìâé?Ì+tX€1ü.QFcÑ&ÝQ fj ^öÿìüà˜&NÑýŒÓÐJJçV&†'Ÿüå6¥¥ÅrM4Ƌߣ-G•7?~UÎ:#5W— (_ä~Œ=G@Upb±@ü½LræqxLßb‡ EŠÇ‘-É»áÆ›)ƒŒ`@"¤PB š¶%e_nå6E Ì—íW²Ü¾Õ¡8$©'–EûC†[í’ýÒÐ÷´,É{ž"áÚ„{ÃËÕU¥=¯‹<̼¾0M¡,UŽÖ²Ã‰2ºyqõê©Fu×G®?òx#A/ÃAØ^^°…``½}ä³–Ó·®¹u‚T’ ›c’«Ñ†@Õ*UVáî+îk¬y:¶è<‚| ¼¾=LpÑv—4ÜÓI1Φ€¨ÿÂcûÞŽOÎ*¼žJüË!Ñ!Î^Ñ©KùÈÉ 6‘±Ó.‚$ª^Uv¸¢½jºê´âtÖ¡wwê¼3—ø‡Þ<õ§7¨œ0\q9œ`c°0É¥v`5ÐîÎr©!ä¾Eð >0‡ˆpÁ(b*'7ó„Äñqö¯M[¿·ÓŽ©£ßúf°ìç—$IùÍÅTES½¦h "?ã¼'Aú'œ@ØLÝÓm¡?ÖVäãÊø?9Ù!h˜•ÔÅÌĵ¥M.žS"¤GèÿL+Y›mË­$u3RncXj&>#†ƒ!"â¨Í’®÷œŽðcmN¼˜²UyÍPB £É³µè€W8Ω‰ @Bh=Ð鸤»ÍÃ;)çºe‡½z]Ú¯ÁJD>Ü:šqÿ…!R‹“ç0PñLêRÅP,A­3áÇŽò‰(°†0]Äý8 cª’Þ^#U}³…x‚ é¾Bå  W° Ý¿ý7P7O–… ³m?CŽ ¡QzƳkø!‡tÆÛUª·Æ¡Ø[€ V‹ˆhÐT¯”Íw×£~`‚|Çc„Ðz8\BŽ å=§ \Ô§ÈS匵ˆß¼¿XÒ ñ$pâd*r¼"õ„Öˆ<À¹Qœ AX5 PHY‰"Óð4¦‚¯Îœ)}E §)²ìö`Ì âÔ ÛøòNS‡W±? ÕÁ”Ug:Á PãXÓ²ÖI9Qˆ! 0Š:¼Ó@7 Áf°’Ù†v™?3x|u†R™o#¿*qF官•=ïï?ÄG¯‡7ì{©üešFʯÅp¡ ¬Ùåÿ\f±ñ4 ›Wo–·å’ ›þ8WëƒÃ¬TÙ6Þ߬*¥òýãˆ_§?Œ‡ xóŽY?–Z’3` _)«ð£Ö7öC Êáš réw“ŒaÒèsH/Þ^YoDÙÍÁ9'f}L»â‹G”ç(I#i¤2õ°\ÔÿéÙs¶Ü?Hyr–ÉË6èí`”šÔ‚Z:Õ-¸z#nñÎ#i¡B¤Þ§ÙŽm1ô –Nð*¬2 Jz–5b—À€ã@)žS·‘VyÁ 8:sZǤß(NpªSD@Ë ¯ñã¬6•O—œw¯úiëG]I òDˆ˜ŽÂ®ˆ1ÐYbÅ>ÃÛT-Uå˪Ҝ¸ÓX{ýàK¥Œñ€ª²¹«M&Á—Í4ìNtHËÙèÖŠ±K… ^/¼ã,@ß ±Dfª“n‚¡Þbk¦`°t® cH~-ñ„I G\gwn¸ç$dB40¿šÒ•ª*ƒá$6ÍvŸDa•coê/¬#šó±›\4ؾ-Jö¯ijä†] 8Ï\TLàNm3ñƤo_Ù‡%]ÂýàÔTF¾& ;Õ˜´4—ç=ÀlwœÈVŒ²Ê¨8Ü.«¶cx pÜß¡u—ÓÈó2”kº ¯oŠ Ûˆðœ8ãZ{?SZ@?nÌ#u®Ê¹Ñ‘À¤’‰— xìÇïå„jþ\DlëÙ›¾[ZüãÈC©a9Æ^¸g:Ðyʈƒi‡ƒ3«Æ:\B:e ÷!üa´ãX1OdÁ ZPRì§j÷ŽˆW)€ÿæRÃPå0 ”L#]6§XrU-WPýfƒhëTÅ1Á¦ÂàS@˜r¬;Å“M3º@uy)ï>=:*9‰âAµ‰…èÍ]fÐiQlISmBÌ—uPŽÜù¨Íd;ûµñ á”Db¿gÛ_¼¸`ჰ¸-~ryv-q£±šcÎpr¾h=g–^kxÖ±$„•+bŸy4Tâ`—4­T|P‘ª5³V_x”ä7Ì?ƒ )ê/ä!c4©ÊåS¬à“òûÆÇ 7FÍ%ÀFQ@š€Ýs† ¸$ž°‚º6Žò@ Šp¡À±{HOÇðÝ`0tm7lF;€1 »[Å’ÎÖ8â7Ú~7›‰Ø ~óž(§Þ-¥ë šÂC+`É‚£2‚à€_`°)¤“éÞDZ0¥MîÖçJŽ•ÚMÇ´œç“‹œ¹9ñÎ-¼á§ 5-Â#&þ8+§X±gG@ÐZº)°Ö"œÛò&ÏÆzp,%Òpû1Ë„îâIðo“‘ 2,öñ8„eèÔõ€ ^dÐi¼|ÔÊЯ  1Ô Ì%–€ÕïѶ…«§mC}cKk‰\‡ÅÀ!z­sÀ—O˱ª‰˳eÆŽ1ïðe=°r?Æ(A¸ð2ŠtJLI¸.¸™T¼áP:tñº˜=pñ‡‚â_Ô††‘l4#´dƒÀ쑼Ô{'¶Áµ(‰pÚžy¸RÎòl1‚ñû‡Þ/³€šÒïëË˱çÖPà¼E£~Ë÷’Àt¿8-ß®³¶æ‰ssLÙ~GE@w%î·X-¬>+ïÖ8>B®Ü Î"-Qúd]:û‰L »N1°É—ïœG˜&í'¬“Cc4Š/3¼Q±ÀÒ'ÍÀÐŽûnoLÒuå¾]f°Ñ.õ×Öj‡YtR¼Àüâ8Y2 3Uh„)Ä®¡Ã!ry¸¶€2|囥©Ã^•ç'Í(-½Jdbu=2w®×VŠåiæi@‘9ÑWHwÁ‰‹·Ê‘o1´sŸ«ûvqÏcɓޯÔYØ£ìÄ£­qB9†aò}”ǽÔ‘>œ3„ý#øÅ–©Šðž¼Ü1Ž€ CòPž#åÃ`µ7å~LQŠœoúç ÏÛh7“®›¢z2n<'ÖÀ^~s~ƒP×®pb7í…w_Èâx9øqDƒÞ1siAé³óÇÞ I7‘‰†÷ *}á„K¸ŽÅ ¥H‡Áx>1ª"¾qØÉ̬º›¾7Îð]Ø·k¾šO(ÿXA*1>™e¸¢tÚÿÞ1`QBl?Ö6˜œÇ _d,Ö§ï )Y¹ÏÛ¼eê蟟Û%°ã‰ùÆ­Vãåþ ÄF´n¯®>°.UèF85¾ƒxÙœPGN÷‹è˜$-Ã#öë(‰€Õ?îñ†à áto¼ IÒ/ð~ò Ù,~Xˆò}àÒ¨îåŠõùÖ%€N%O¬P]‘B˜¯DìÔä-½#€€¢ë^&!5M­œâ õÆ[f pç8ÄÿÈLÔ˜<¿ÞP5Џ_“*rãÛHø1«j€G“ëŲ ࡟8÷F¦öÁˆó1‰ÿ±“éû ^»ˆíAQ @+¾°~ÑhÊ ¥P»œ{±G<)ºÍŒ¡`'mÚwðÂa›a!ÊR¯n l«±Mg *uP½aÞK~á)Iއ (áÅè4EŸ³^UHFÈ6p©8sžÔ™™N2ª}úw0±S!Wã*­Ó~øôìÆˆI`]À±³bqð„ ¡ÀW[òºÒ‰ö4Pó/¬8#…»öãĹp¸°µ½T_8Iû<¡vžàäpì?·ÁŒÁ?«ÿ¬ ƒ ~2Ä41YK¯Œø=ÖÁyþÇ F±·!󓨤ÞÖÏ®0Z—~q”Tög pNÿéÿ”¦×•Ïáþq|&§;ͳA¼‡X’Q›1ÂoÆ0.¥¥¦°Pü mAœï9®>¦çë)8Ç@ÿOã€DûûÆ cÅ_óñ†aÊ©ö?_¬ Þ <~ èb=—Œz"QxÔó¬àFª§óU¦çäʤÛ{ʦ‹ŠÍ*+ÑÇ×dˆ:oüÆ@eU#|q­dôÁšÿëÖ0’`­õÕ8ÆÔ¬UJo£8eúbJ-,³»ŒÆ¡SÅjr§¼3†Wü±ÝPº(øÀ‡JþÙ ¥À'ðÇ-VHMb Ç1[¨øÀ ü† ”Dþ° WËSÅñ—%޹üŸB bïÛòˆ5œXaƺ«<± (š+G]á':§Ò7zó1µ +M¤}ed n)ÑÎIÇpEìÙ~qšœ¥¬.ñšËu?3KïuáˆÛJã5(Àdø¨6ª¸t'ŠÞ $ù„}cC¤ÀoúY‚É…Âþú2<<°ˆkPI…eãÆ@ÉСã6C7Z}ÁSðïP b«~ÖÛ,¼X~0-þ:Ê%ÂGGó‘Î&,ë‚?“¼_× Èý:Èp ƒŽR”Lä.X_—ÉïóŽÝÞãoî~2‰¾úËÊ}2uy+Á„ 9¯»€]ƒ¦ÓÀã» î/Pª˜å!xxNý ¨Þ;ùÅÒ´Gk‹žBF‘äÏxZ?`1(xÄáHêùÃ`{*ï…%½XT:,©ŽQUU~pÚ--ã¶[-mZó±íìÀM—‡xÇ>CN"Ÿ”p8öìrb|ƒ‚(á4à­UïUI–©Ä}â Ìñ÷š2:\U‚,¼˜®üè2x»f$ñóŒÕÙë7 Òq„}üžLfûŽ!¸°ò‘õ—IW‡Œ$ý[÷ƒ¬?6 ŽÑ´nýdÑ£Ɔh›i°_„ç6ÔÅïQïÓœæ¨4 ¼Ãœ«¶;ÂöÂMmšå´×œ„ÊûÆ’ƒç§Âã&øSÏ „#÷›\VÏœx¥ñŠ>&€ÉuD]p€ÕPŠDLFxac¼»¨W°­k(ØÜ÷ŽÆE1zqšÅD ¢[ƒ`eOnüaí–6ìˆÁ)}‚V3oL £Ekn+¡”ZüöÄÖŸŒñŒñ‡Cèwî@âëž ¢0r“I<®£¡ •:Ï£K ,8ÆÄ¯ëZ=÷нüàŒ+Î*(±WoÉX‡_À-8“ôâZEï;†œAO©Ëã>±}Ðò(jSŒ:ŠÐJŒ6ÝYušÉÜ$’ š‹p0•@ZdJAu€¡ZÐ7v& â@ÎÙ°Å4öå´óUÀëÅEþ±2í8b—D Ôë®Ãñ›-Ç|VkÉñöÀƒ¾pÃË’V6½÷—É÷¬åãta‘ –°Û›1º¾Ëm'‡Æwf5îzw^ØÉû¯ÞGo®iÎ6l*;¢~f=ødJ>DôoU4ÕSÎo.àÚs€È뛕€rq¢bȽ¯ë*cÀC\˜²‚/xE¿ÄìÈ)Xcné Dmø/ÁÀ~v;11ä1Ò•°zhÉ Íô(D óœnDH› "`ãÕ(r§mB©.$:nWÓ¡BT˜&.pÒ eŠˆéÂ~.€L•yÁÀ!"â/P¢¡¼^ÿsæ ¸ž`#ƒœaW(Á[Þ.«ûÿ94IËn§%ñL·†(EùDôó`i¬¢LNS–Û7±¤Ãt„T§;å:rˆ7`Öì¼qpÔ²À4 )àÉTÝÖðqÙÆÒœt¢d0‹,’hÆ;P’]LTpvéÊ( MvÓAæm_”±õ4Õ™:q<¼– <`UñpBC’˜4©ë$,aƇ?1£èÀŽáÃfå§¹{¢übš 1ˆ€@\aªîž0OF ç:.Œæ MÜ€0¹8ƒa X‚çW«®°Ð8i­¸é\uÓ1÷¼¼ÿ9ËYÉ$Àk¼Õâ}c¦ÜÈŸ^§ZpÏ™€5ÎN‰³¼{/ç›=bh‘/ïSðA?K(ç#oeË3©¬y#;ÎkÊ´P˜‡£hŠOk¼"ÈÛâšÇ„C•y>“I%ÖiÉè‡Î5wŒÐ:¸È5 ßÒTÅéd“(è:0»sŸ;#vƒÛÔ|ÒxH‚ü702?-«àPîºõnö%ÒuÎQf5UHœ? ûÁªZ( ü€}™ÍUà°ƒµÔ<äVªÌg—Ê{”§hU^ïtcÒ¶uh9ƒáÆÙÞˆžr±¡Â8uÁíp}$ÄD಺hÌ/‡’áÀÎÅèãÑ¿œ’ ž²±_n1PcQä^±0„9é‹kUĨðã5J»#C  "޹¸´'v›ãŒx¼ž16@ðóƒÝ º0¢ãNA±®„ÖuÞ0[œ¼à6¶e š¹¤L=!üå88Ëñ€Ö¦ãè¹2`ƒäÊŽ Çç(lýgÞ˜"¯ÎHÈ|±I δé˜Ó^°-†h{=`ñKÊãùÙ4°A ¬†$–†Â?x›j h¸‰ × .´ Ùä R`ã»<$»v€Rk/A¤Ù  ‡,w®ñý§(ž=ÛX¥¨”,Ñ„ÞÙÝ–W Y\E†ð\aŠ6%,SÖšA ø Ð\#p³ZBJgC ¶ÈûõQp£yt ø8&„LãÊ Ð‹L‹çšý4Gºå²¦©Ê5 ¢16v…-ÅèÀÃ[TG–/œÃ1¾¼Å¢hh0yZ“Ýä;àp¨ßä—¡ñ]‚i$ ì;RÕÏä5-Ü›lä—pØñœE¢©¯ ^a¥±‘J]wQæ/Ë7—¢ˆî%]a#³O ðe®çoyqÕ<ºpê;=d‘_c*·pÇÈ.ŒGè9IÆ4;ýšÄUy‡L÷ÊïäÖ.Pö1] òàV$'!£¤k€h ×Èv'ˆå=ðÝ߬T±wGBû±Ñ¾ò™¯fNÞñ‡ãýb ”V'é“dâÖ½oîëÄÍ"Ï7±õ•6Ö ÃzÎÃo7ç.ºÍºg~pwÞ:!Ï„Àiï GrÜc:OäéÂi=àÐøÞ#q•DäsYFmÚÎÒºŽeÃëVÓ@6#Ý;ŧ)v¢L¶)ç’Àª¶H¯œ[$i4™^ƒAvqœÔ€Ò“ÄÉ£#òåÁ¼Û l Žànl•>³ ©të¼]¼I˜Iô­äͼ €xN09qï Fwãøã-—Àk¬j¥L@aሞ­ªóqAvaŠ5Ä?xƒ]o :·¬5PŽ¥)‡ áŦQSsgŒDÐy¦=\Ä· £ØÆÁ;0È´'Ö+`~0ÓŸL•tœe•zäq7œL¬pM|e¡ÄÖ;…92Ð]’â ç“çAúÂYúc·ÿÜÎI§Œnôäarcò/¬Tš“x Šb\Df£\1ÑLðãËñ4em½â¸xr¦ ºYÆY¼nU@ólãòŒ%(¦Ei‡ ‚NÑÅ @”ñÌãÎmñ•¡êÊ`{T(®måp]3`A®œ¶í®(`ËRHë^&môÉ4ö7ì¸0Lßä:÷ ÇŽ?8þpüñW„?üŒ3KÒA¥Ï ')}”#}Ȩ9He‘GzÌÔ³Œt™õ¢O†Ð· `Ã^õJÕŠ,úŒä3Ìà'CØUû šƒú ¾Û(CÚbŸè÷åo¿è·b:¨-%ƒL½¾¨fíg½HGúŠ `íS_V2¶ ƒŒeÛ阌}Óñ‡ãÇŽ?8þض½‡ ~—™u·YÞg6YfãY·Ð{½¿]9~_»ü>«ýféÛ­ÔeٚͺÂ×M®~úd ½ßl]3ÖÙkö½]9Yu•Å– PoV;B¶­XÍà?ÃÚ“!tßϯ$cy½V,²ôñ,²ë¾™¥ÏJ¿égoP?Úg¬È:JÆ1*«nºé»ŸtÓ‰d¨K3êÍñ‡ãÇŽ?8þè9Nº#X½Ëm¡»-t·…>xÛÜzv=g!É~_Ý,ÇŽ?8þpüáŽ`988888888888l7qppppppppppp‡O\º "tA„.ˆÐööË^c… BwüáøÃñ‡ãÇŽ?ä„ÞÛ±\¡ "tA„ƒ·Íf×s’ì÷¥Ñ¡;þpüáøÃñ‡ã„îààààààààààà0ìì? =Ý|Ú0Lw*—8ýÞm¼‘v¹l~£Ú|=e»Þz´¼A¶v?n¹næ2>‰þíøÃñ‡ãÇŽ?ô…ÛqppppppppppøX' ýwzÖt{~Ð]•¿£ëÊZV– CíÓv@–AåÝI};5÷ÓÇ òêõgõ½,¶ÓÚ7hYt•U®nïéýG¯ƒ_êý¢ß¸ÑOÞAm=úÒ?X”!ì4¨ý²Œ{šÑ¾ƒŽ©Ãú ãÇŽ?8þpü1°º‡ .äãmƒ;Ãûé³ùj³;ÃûñÈåÎð~rú„ãÇŽ?8þø”ð‡ÛqppppppppppøX' î ï?çÎðfGw†×ádÜpgx] ˆãÇŽ?8þø+Îò1 T×mDùɯ`õZø¸V°²®, ²‚µÓ bV;êmìg»¬³åAeï·Êr3¯`)ÙV°ô:ø;°e¯¬AWw´O9î` »R—¥ß"ãNÇ»~ãV–1ꓼâøÃñ‡ãÇŽ?þŠñ‡‹qppp¸Éá{â”àààààðéá5§‡¿ T_~öá'Ù?¿—?á9Þ>ó.2d9ƒbïD…_~ô8Këë|ëõÓÔZ ji×çÕ΃ƒƒƒƒÃÍ>Ñí¸úø`´A¶>˜l˜4aÚ¥œ¿Ÿeë” ïÓ§}Ûµ£W»²´EÔ'Û´Y2´.ï ”%tO‰§dëU§öñ¯¬õfµ#]Ú7È–{ÿØ ¶Ó}?¿’ŒåÑÅ®dìãYd×|3KŸ• ~ÓÕÞ ýf ]·¦=ÏÓ‡ï¼OÚq¬ïž?Mš¦ƒèª×8ÑS7¿òØqþý'ïà^nèhùQæò9þðÕ³¼±pV/¯¿ö}[Û׺%’¡/g=nâøÃñ‡ãÇŸ*þ ÿµša 6 }(þ° ’îøºð‡ù@!üÙNxùPãz=¿3Ë€ÎÎ6uvû·ç‘… íëU¾ôyO2è§ŸNeý÷’=‹žº½“E¯Yt%}l=ŒÀŽÒG¯ÃÚ¹›=‡9C#]üuØ:¤Ç;Ò§ß Ú7Ð7Éè÷½Æˆ®z2"òèþ;ù;~YöÍJÜÖÞüÜŸÉÕ•En?tLÌííU¿ô±‹d©àžýÓ|þŽ=|ÿÝ‹¼xu·x³¿F;ø=ôwÉyþGÞ9p "¿ýŸ'Ÿ˜Ä·úÙ2˘ïøÃñ‡ãÇŸZþè1Îgâ cíuç!õ-úÖŽøÃÁrppøÄÀ!ÜPþJ‰ö…˜ÿ·ÆS³wò•ûæOßy…ÿçåïlûžUeÏè4_¾ý3¬·jœ]½Üsd(â‰aµ¹A;M°ÚÙZ0"ˆÜØxŒ‘Ü(vÊ—ï»…ñ’á/ÏLTF[ízÀù哜YyéÇÞù~ót޽se¾øà¼¦åÏ_vãààààpsòùֿݲ ð¡¿CöüΰóŒý¶ÆµÏsƒÈB†öõ*˜œèY2=ôjû YWºe’È’1CÐk] šBÙY~r2¶GwhçnöÜI~ñ~:ÉZ‡öxg˜-t2öˬ6ëë÷SOŒ±÷g(îÎQ¸-ûÑ×.Ÿ¥à…úk?«_¼ÿ3ˆço«§oŸy…7®œÖŸ¾õq«LvÍxþgŸù*ÿíç“[&vkgâa®É$Û´Ùê{¢Æˆö±‹öî¢Ïý%þůü>wÇnN^‰ùÁÂnÆó»4¬¥¤iƒ·Úÿ7£»®µ‡C·TõÉÏÌ37SÒ•ÕH½±€î#_Ìeñ…~¶Ì2æ;þpüáøÃñÇMÏ}ƈ,¾£ÇÁAü²—nä¡Ç"ô³ëÂþýzáÃÛ5YϨ^-tíRÿßÿàsý΋nw¦¸ÛÙ>@ž^ç[ûµe»wt}2„¾eöª·ÛyݬúèeË~õꀺÈb×,ç|e@û J"2¤-ñ‰nþÛï|» 8F°[^{^BÁoÑ ãBx<”ú©Ë››2Y©ðÅûŸÒ}#3òÝ·~À…ÍËäCh¶cÉ{c<{ìaªÅ²(|pc[Ëùæü#沪*Í$Ò¼ :QÉËo}ñ8qjù~ÿ 6šqV=ÿX;檇äèÌöîZųÜ|={ôb"O7F^fþ΄ÞíP.üÔ—öKµêúz[°J=ßÍÄøI.6¢NEò‘Àô¬cÙ‡ûfO½9þpüáøÃñÇÍÊ=þÖ+Ö,k?ë7"=ÆVe°£OÚ§¾,º‘´áºñ‡ BwA„.ˆÐ~b‚UM5ÚÉö©z±'9ñµ&âóøÛôޱ)Iüöí^ãä•ýoþÍÛäý¢L”Çtµ¾N”Ä=õcUi'1qšè–‚Ô#¾ñôîé£4—j,µ×Ñ­wž¾sVùñƒ|ýåK$©fù‚õyáÎÙ‡urdT‚ÜÛ ‹Ì“&a#V“Ä$Ñ—®ðð‘¢NŒŒÉcͳçxE›­±¨"ÔZ”‰yâþ .*ðúk+,.5û%.Ýñ‡ãÇ.Ý¡» ô3'D˜Mÿ.ˆ0»=\á'%ˆ0}ˆ•ò¡¢¤O¾½ü–¤±• Õ¤Ù¬Ëh±ÀÞên&½#Œ{û¥ÑnÊÂæ*qšJÞå©C÷u "TU‰Ó|Ó¹€CQ‰“˜Ð äK‡ç3{ï¾öN!ôøÂÝ»¥§ò¿ÿÅ)i´“¡‚wìæÐÔ­2VY¡à¯s¾q„5™"—F˜V*¤KT–w³?ú%~þ¡ ç§žåáûÆ(–BÑNR.IÕHÁX!áoÿúqþÚöµS2Žƒýlë‚Ð8þpüá‚Ð]úuáw¡ƒƒÃ'Ëß['Z‰ ­ßòÈ͘§<Îܵ„bñ¬|b…͆pê|iÍó/~ágøò}3ÔÛMB?äžÝG»ÖÛ„ÿã¥ÿÐ øüч)ø!©µüÞ7þëƒLxòð®î¾öN>ô0Fh'ép_q€‡öŽ=“cLŒžG<8Õ¸FT%¿YÇ´7ˆu[öØ[ýÒÞËÔÌ ›)ÄIz­ «†)A˜b <ÿ½«ll´;Ípw:8888Ü$èvëÃÐ!>ëµÝ;È–õNëïU–^™{É1¬Ž¶ks¿ó”Ydɺ…®CÊÜO÷Y¶¨³Ø~¿Cömq!{àk·s˜ÃMÐ!ußk ½×9Ñ~þ“%¸l§A„’á½ø}RK±±ªA4Q„Üh€6:O+ªŠ ¢¨I Ø7=N¡²Æ;gš¤Z$Ñ´«>Oìæ¶]û0Àh~D/ ™´uqmÚ&¥”+P °Z‘¤VÏ 2j\ûËîÑœ¸•©±K:]½ÈéÚíœo¥ÜÞT¿¾*š®èjåÆ?ÈxZgvïKç6ii(‚ê–’´ç˜0mòU÷^XäwÿÝku¨~ %"*("‚!Ií0ãÎNüÔñ‡ãÇŽ?>VþȨ£a¿é ðÃŽ«ýtÐïXì0¾•™?|† Fë7ð÷+c˜­ó¶aPÈÑ/`iÐíCe¸-ÍípЀÀë¡û~:Ù ºÕ+³Ýño½N}jPä:Ê­CÈœEO™üñýïÑâ£R49Þ¾t‘ïžy›Ï¾‹(iƒ*V…±±ušõW—sø›h,¤Ò`º\åá}wð³¯^“ň`Uù‘‡øÂ‘YmÕhÆ‘¼Ÿ‚×¢`S%Šþö³·Ê_œOù¿8¥ªÈ‡SôŠ %É í¶%ÞHº*èžÝO辩 y(.riõÕ`£%&ªÓ,Ô%”ÃÛ8vïŸràèYÔ<©§x©ˆA©'!Iêa”¸Ýdrê‡ï˜æÜÉï2VÞ„$Å›+S9±‡\Áph~“¹Í2§¿³É=ÿ.I¢×³O8þpüáøÃñÇMÇ×¹Ïëýêӽюöý>úôôÉü×-‹È 39é2Õ¬n3ù^å”7¬Sëuh®—Óö ´Ë: ¤ÝÃø^Ûõ“Kh}ü¨ŸÿfY¬+m3LÀn7íýÆnòJVÛ+ˆZˆ/&ØIKq*Ç•µ«œ]¼JéŽP뉨äL³SŒ ­VÛ(`|E%¢š/rtjß9ûêGÚÕˆ[Ô¢†nåŽ"NÍÉ=³‡±jI­UTå‰Ûæ5-/ËïüÅ):РG|îyz[^{y™õ×jÛêá©#÷rëì}ä §tªº&WÖpÙÐ\£Ž__¥•[¥^Z#ß>®ã‹Ìí}›VH;³µq!‚ÆêI™ Ú‰êž\Ž_ùÒ=òÖòÃ<9ýœ +ò˜ám3¦A€f&9µ³q9ú1ÑJ¡ðġϓsL_¦>g›ÇI­PXYÀÚ5VÇO‘‹¦ZN¸ýžo’Ï7hà“‹¤`D‰¬GFÂ&-’<…ÜEî¹÷»–ް+­[â$¡}5&1ðê6ßN¿³â|ÌÁÁÁÁác…›€888ÜÜPH–Ñ£%Ì-î:\åäÅ:+mKÞâf‚GÈ7/¼ÉgߘæËÏX*ÅS¼öÞí4ã"³»/³²8Jm wjI-ì˜aÏä Ïäïæ_¿þu~xém&‹&‹â4%N¦J£Ü2¾›¼Ÿ#§ÓJÑ@М¡½³'_äöGŽàW”ß]ÝÄ?Q侩)|«TGŠ*ã,ÙäžÉqŠá¹ÿëÌ5±Fò¿|ß³9ÈÈÈyfÆ®rnåuÒÚÄo6Y9‹úeŠõ[˜ÙÿS».¥vô""Êf’³¡—°)—”z»LÍKy3|•ïÇ»ØØ ƒ/Â{ Ãz”gäÀ*Í+øK!+ë Îßn8 ÙÒ“uû[·ç‡¹à&kª:È–öo»ß³¤:Üé¹VBÞÔ· “ú±_;‡½Ì&«ïe± оAëÈ¢«¬rõKÙ7¬ÿÈuðËaÓuö7úÉ»íûÍÕ6íV›wkrf©Á·Œ'JâYL"ülû.öEUÎoDâ1¾—ÐNsԥܸlÄxKÊîÊ.ñÄ“±|™ÿò±_殩ÔÛÍNú]UÚ6‘¶&ØZ›`¹MZöÄŽúˆ±ª4Û)iªL-³ûÖ*•‰<Õñ"*ÇÉÍŒãùðîryz¯à]ÓÃã·àÖé'/f÷ÔyZí¢œoFk¥Å«bƒinŠjãqæ÷¿Á‘;ž•T=±¢HçjDkH’PŠ^LÓ€gßoIsလ:{'—Èñ}ëbf7ˆ¼ƒF)-ˆGBfþÞ!žüO¿À¯~é7¸oïQé4PIÉéøÃñ‡ãÇ7- ÇNÒÒ7vÒG³¦ådÌÄ'¹Ø±§ †á¢óûEûÑßïºù,õ÷*+KíÓöa²ydmãNêÛ ²ècPyuÈú³ú^Û “Á$kYt•U®nïéýG¯ƒ_êý¢ß¸ÑOÞmߟ(ÙëR úóëx9AJôZ›|ËçÎh†µYÖtyeŠ0h³kü*ÆXÖÖFISctkTTdë'UK”ÆZ-úZ üNJ+kA;™¥¬ZÊaA+¹âµßù·stKñE c!iÇ“Êc\œ¸1´#áÒs‹|õ·ó÷þñ­úùÇvëmS÷²Öetä*Óã \mìÑ+í=„ëkm£«#§ÓÔd„¹ý¯Q¬¬©M}m†[‡ÅT„éýˆ†@’VI¯œ¾[ãvR.%/¨íÜÛŽhÌzʯz–Ç㵘/\ãgï=Þ)úÃ÷¦w·¥ãÇŽ?ÜÔü1€Ãf£&ã×N²m “}N3¾;̘:”º#X75cø›ÇNðdî‹›?(Ÿæ½ÍEʇ 4—ëZ›d—–™ª’ª¬of+ åb #JŠG¢>ž¤¨Hç«õÖ¿E1*|ñŽ;(ï2$’¢ª`:­ZqÄ#ûîäÔÂ9Ö£:¾ŒvFO}?ùíÖ:Žrq@úÄÚ`Oy?göœ¡Nµ¬XÂ>fÏ_híãé‡ œz÷+턽3gi4Ë\\?€¬Õ £i~”¼Þ êsäÈ·Ù3~Ž´Y ö-‘¿5ÿQ° Q;¤* M_ñUð°DqŽÆê7=Ϲd•÷^Œ‰ÖâN0¶H„¨µBFÇɇ-Tc µï_Ø9;%¢Hg&B§$¢HèA̵$‚B'+V£YC­E³t¯>r>§·®®ëZb9ë+_˜×©f^ÎÞ×+ ßŠ_Ò…Úˆ®\¨Ó¦¤¹)%hÇ9Ù»ç${çNÒ¶‰=•¶¯[ת¦jÔPðbM=+bE}RÝ\›eùÊ1…šHyQ¡Þôeu3Ät&!ƒÆˆz^ã­ª_HØ\ØO²6.ö=§³­¹{¾DÅØHjú^a“—‚º¾â5µŠzF¥‡:þpüáøÃñÇÇÎ]lØK¶íì¦ûM/}vƒt›ñ„ºÕ.ã—ôèÝä”c‡t‘‰}B{ŒsÒCÇ×Úb>TY¯ùA³Àβ‘@ÿ¬Òç¹Ad!Cûz•?LFíÊë—1bØìÝÞÉbC¡–š~úèWg?›;ËÎAÆöÈíÜÍž;É®ÑO'Yëï šM%KÖ̾i oÄ“t=¥q²‰·Û#<¼ÿ°¤Vå¹ÓgYkmâÂì• F¯VÀ¨l4¼š»$FDüRJPN¥ÙiÔ LŒ.S.Ö¤:ÙÌVävg‚!°¾¥`sœØ8*å$/©tæ%º5G±jyjö6©„ìfK¼¦EýÉ-#þ¦(ª‰iEîˆ'å±à¬ÜnòòàJUª¦!«~*gÇž¹°Ÿ§Îî–—å<ß•¹s\åóc÷ÊÂÉ#â­×ÐÜ8”<|ÓæàÜks "{Hê§ wi«ÖÃóI;DzDSOÚÍ«…JºúÝrÚêž'Ç'¶æ /^¸È÷NŸUc,sT¸×ÎAå[–…õ =SZQ¿(b5Uå•1’Ôcÿü ÂDSõIÕ|¤}jT=5:–ŒªH ËÖy?Ä\A´%ê¥ŠŠ¨Š(x ¢$VHÅÓ@S½×[ÖSÓ¶þsMãªÅÚ¢ž ½è¹me‹“¥=Q-éü1]_ú¼®¬N« r¨WR@ÛÖ°kìM)!J £W×vlÐήŒÑVâxVUz¤5GõÜÛ«jåÐ:1V#Ž=Öj¡ÊÖÐ[T5º¹1NUTÅcrîG÷½¨Éb íq«W'ÞË’¼¶bc4jĺ~fµÓ#úIáãm-·y(ºµôö£çÄñ‡ãÇ7+d‡Œ6Ô>cH¿þ§CØX{´q˜,}+kdÀ~šµ¯fé›]³`õ3­AI¤ß³;Me6è@;h;†­o˜”fƒ¶a˜T˜ ¨—aýgД™:¤Ì:„-®—ŒìÀïõ÷LÏ}ÕZ“(N‡íCšÕÏTa$ÈQʬG-Fæ ZzºDíd¬+¯ù*‘ÇÞû+$µPï\<ÄÔèœÖïþç¾~æZY˶A*±¢†{tž¹ N×–õd|•Êç¸íò}ÔËMü|ªš€MÍV¶ª÷ó|w¸Ò¹Ìo=TÚ…SvgtT:_ÚQbÚ>ê#<"Å*ÛÎCÆ 4A“¦£ ¿‹âÓ"ÅJž'.ܦvó /-ïæøþˆG& ¼xî~–Ï|ÏÒ.ä¿M”iÚ3šîû>¹Ñ”– µ xŠŠ ¨(ö‰S_ǃ±±øÖ£d…µÔ'i–Õæäoÿ¹rM››e.-çQíìûC5)Ë+S¬.UÕ÷#Fw­éäÈì²!Î ³)ûZ®‡Lç[,ÑÔÀòIeéä–1ºgê½iø#_öyü‹3¹½ªQ3¡íYLYøwÿò‚.\l05RШ™²Ö?žÅñ‡ãǃùêuã íÔt;ŒmÕI¿zvZÖ0¾1Ì£;èó}Ûás}.,R>ž‹>ém¦;•«Û™Ø«7Ò.7ƒÍoT®©„ IDAT›¯§l?VVà~ëËpËÜ8ÿì_‹7Î.Þh½ëÌdž¿ÿìý2%c<ò<^ÞÒ:¯n0õÕ‡ˆj³Tøs~ý¯X˜iðƒ?0,ì~ÿÎ9äù‰nlðB~¯xåÄcºZÑÇŽÜ"§° ÏÇä>ãc0¤©ú ­zŽ…Å]¬Ô'ˆ’˜”¸ÓäGs#1ˆz‚Y<$0[ÄÁXˆ|¸Tõ™_‡RºÊhzAÑÎ&²vJÌau±+!¾ñ¨å¬w„VýQ’¥sSç¨ñââƒ,_ÌÆ5´°›FxV}S¯Ya2·Æ±±5TF~'¶>°"(QHlgb•ø) T¬à‰PoA!WX£Õ¶x‰‡ç)ž€ Ä(»ÆŒål£Êúʾ¿I³^&,6ɵ"–.N'X±”ƒ6*‚K®Õõ]Œí9JrîšµM”ô¦íÇÇNŒò ¿~˜ã·U™Í!­N¾)Öε1Gž¨îçô©ÿç7NêÂwr}ÄqüáøãÓË?òzŦü¤åº™Ë¸éýÛ§wÀ𠨇ƒmvâ`ÚåÿY¬—Û€õ ¼‘?‹Ž>çÉ¢¬² Óîa|/‹íúÉ%´>~ÔÏ»­H÷t‡þÓ³ÏÄ©ei£ÉÏ<6Ãgï:ðÁ H¿@À¬zúˆŽFGr<øpEwë3¥²sÂ×â³úм*v|Quâ1ix—ilžÓ÷É;Ï_Ô×®ž”Æá{™|öIVþð÷I›pɯë÷üËòÙú!B?Çü¡qü7<’«)' ‹œ÷×u¬™©DxaÊÕ… 6Ò±k¡ˆ"¶ÓÄ­³8j´SɵÓ÷¦êû}¨ F‘R ˆàÑÖÀ6eë¶B+ˆµ cHrÑç:Šð‘¦q„Õ•q¿Å}—y³õˆ.,NPˆ/‹%Ôøí<^ŠjóœÔf/2ZôUl‚ø`¥ó“Šj*}¤êÅ„&%UÁWQ_ò$©ÏÌÜIÝÈ/cÕ“åõvbÔ3“p1¨ñL‚ˆ¡XiR*Ö1©%,¦zfYòEu£$c^B;ˆÙaw»Íl¥Dó™_ãÒ·ÞÐoüà%í|c¿)øcz² O=5ÏfÛªç‹<öÌ'îžTÙ‰Ï[ŒíDõ´ÃT¿üÅý¢óÊH²q¸ÆíϘÿKÃå?Œõò·#ÇŽ?ìÌ/¯+ôÑ“öùìã˜äÓÃ/‘q'²nI²ŒQƒød–ƒ,zÆþQ—zIŸçUê ×¾÷ 6ê Ö­Œa‚ò†yn€¯Aëf@[Ü”µìAí5¨ïõjkV;Ó¶¬AjƒÈ5hÀûX_\XÜàÉ»öshnœ¿|í,¨›Œ½îÈúùÒZÄgWäžGªboµPµ¬¬´ååt•rnEÆý µøVÞZZ’šŽòvð ÊÕ©Œ¸22‡Y~—öÂ:ÑF[¸ÅçÙÂ<`)— òú¹+,Ùµ‡SîªÏÉÞv•¸c°´›--"ÁÖÝ?&¥s1!F4AÂ8åôt…Fà1¾Ù”Ô÷PcÄ ”Ûk¯Ò–jp ?‰DãÎ dIß©C`¸,'¸´q/¹¸Æþýx/½Ÿ 椰rEÄ+`ƒq0˜ ^£-Qî{ï|—}£ui{ÖQ£´}¥í©¨¨¤Ö“õv‘|ãù1yk‹ø"ÐáÊÕƒŒLŸ•ðè«bCåóU6ëh Ì#,Û|"[Ÿþx™[ÿó|¡R )æ”ýÏþ Ç~곌훦”ŸãÈÊÔ±IyúWføŸ;ÈÝNËC÷O1¹+OܰâED±(j öS©C<ëÑŠcÂÄp¬PaÏ=eY92/Éøn©Ÿ^ƒFìøÃñ‡ãì>tÃø#£¼ƒÚ~{òý5« ÛG³&¥¤_â“2ÄX±­ ð__§,n‚¹ v@²hЬE Ýô1ˆ³¬Þ º½>È*†|W°È¸‚•u—úµf›sW×yúîƒìŸåÅw.ÑŒ’AV°^ݹ¸Ød³ñ•Ÿž—‹•U tW³(Oß]ѧ5䕕ݜٴà]›ÕÉ$/¿dÞa!ãÊD@rém쫇NTä7Žæ1AiŽËÂåoêÞ‰=íQÝÛcÀR4Úí)A縔ÝÚA@¯M@„ÎÍæ&µ²VÌ“‹cªÍHSߌ tEÄZR¼J¬£Þ šõΉ(_ˆØ L|ìÏSYhìcïÜE.åïäâÊ~F®œVAsS‚ñch™‹Hã<:vY޾À\èkÓ¬/’øˆMÇ©õ$ñ°IüB5Š)Tב\‹ 妯{ÞÃ7È•¥V ÖCöbØç¥z&.Êå—DÒ&bCJÞ*·TÏqnO¬ßß›ˆY+i) d´\gÙrmŸû^¥uuŒ“—×9ùÅ+Dicg; ’mlÌrüÿä~ý7’;x„õÒQfoÍs÷O¯sô3±Îï/rË"SRDm¢&RÑš@‚ÚÔŠmUbQÚb5J¬$aŠ¡Ú.€/NËêìyÜ_ƼY¯žÄ‘ÚÔñ‡ãÇ×yd'»×säz[ÚÉÈõ:’&}ve܈Ûq+Xnë'¿‚uîê:Ó£%~îñ[¹¼\ãÕ3Woø ÖÚz[nß5Æäž±XîÞ¬²k¡*ùåc 6’ï«Ç£·äï¯,³;ª“Myuä Ú`ýäÉÝVàÈdþG3ÍÉD8Ã+õK¬ì‹X.×åîÍyÆM›O‘Ø’¶=" ˆÐ —ÙJGÛÙ¾ÁˆÄb˜\k²QÊ¡É'ëy"ˆ€µX… Ò’Qÿ"~Ô«‚ˆ‡ˆÉÃHb€sˆ/ÔÒ Î4îfßì%˜áÝÍ»(,/F Ѱ**9Ä÷Àóhǯ³é_–ùCÜ?Ù Œ$ž`¤3ÑNˆ²Äb(„-P¡` ¨H-´$aÄfm’wê9ñfOIÞ‡KËšQ(x°Oa!Pù“v޹wöâ%Š…M½In×*?¼Me)€RjdÌÙ RšxTü˜êÚ&oñØà“·í—++gdeõÊp; ú4_ò$ jUT¡¾ðÐæ9ñìŸ}hž{ïÛCu:`¼´ÀŠ¹Ì‘Ñ+Ü1[gt´){fc·!^M°Q*’€HS+ÈÖiºTˆƒ”¶¨X“3„Ö'”b„Q¤l‘Ø4eäÐÆxÃ>Y;yF qüáøÃñ‡Ûq; 7`¤Û*‹Ðû2¥~«3Yw2²œeäš~më÷y·Y~'Ã̳—\½Œ©}Êd¬—ÜYtկݽV²´ÏjíN†ºµO݃ü~=úÈ +XYê˪ûm±ÙŒxðØn™-ë·^?G3Š{½(}Ú$}úµVÂË'—yæÄœLTKº¾n¥xÒW9_’­HË~ÊýóV~q~I϶Ç$Z÷˜¤©Õvž–©ÈªwFë»Z’æBž,”PRb[•úÕT¿_?ËÞýkÁ)Ö6©–sÇ^å–Oñµí b(€Ø¨Z:±îëQ‘œI0a[k(¦F-°é§”­!٬ʺßÖp÷9–V ra±„´,"ŸÁ š¾ú0#Wó´¥RXÕC£§¥±¯É÷÷XÕÄ£{Œ—škôüÈùc#ê¿ýYšzš¯çþ_}´¦™úÆÔ±‰ÃF¢¼ÑtÅP¬zŒï 9tw…_ý‡‡xìËÓ2¶ßÓV3àÖ'¿"·|é6}à§öË=ŸÏóÔ­Sj$”zÔ"F+KÁÓJ­"ùzYó›>A1V‘XÕ$"bÐT;YÎQQ ñTSQÂÀ—œñÕO$Æjj&l™i;FœK¹ZhE‡c–Ëß}‰4:©Ò8þpü‘õ»ÕuçŒïö²¡öhG¿þ—UÎ,þ0LYìÐ7²–)v@úõ—L~ùþH¯U€n õ{~Œ^3Û,;Y.sa€Ï{­”±Í½VzÉ%ËdÅ-«-é£ÇAl•EwýÊɺ“µ“ºù}'}¤__!c¹)ë‘Ü{lZ¾òø!¢8•««^+§×~®®Õef¼ÌƒÇçeu³)¯ýh¤ß%UYûàGÚ°QoËhp¢0#ÞùŒÅ„ ›’“‘4‘;Â&{¦ÿßߦ³Ìk«fµÝ°¤Aç¨ÔtkŒÉõ 4 H]Ö‰øê«g<Û¹}Å¢x)굌µûYðSÁl-¸Yí´KU5ÝZnS£j=EUñjVµ™ iª’‚Ÿ ~ ø³ÅH’×]öÌZŽ|e¤#¨uüáøãÓÅÔ‘õöô,_BwÌ~žeR—Åw¹©=«_öÒí 7’ïd,tó Ëíòô›3¸#XÝ· Àm¡»-ôOØúêf‹ßZGî˜ã™{öqdºÊ‘ùQ~ðÞbÏ6½wyUÖë‘ü·ˮђüåkçnøú•å–¼vy‰ï“êF€&±x^*¾¨ûRÛðÙ7]' <ùÚú¬<Ñ\dÍxòjnŽPHß`#ûý<ûBÄP”r4)R~KÊ6ÇÑÚ4©4Q±‰“<)ž^"lEvtfY¾ htµˆñS™œZ•f=Oª¾ˆËž-ÈTþM ý:ÄtÞ3bB*b _ãß+qñ»òf<&«­}’o5%Œ± "á„´ýU¹\ü™ZÚ%#v,ì¿ÄcÕu9^©ÈjA1ˆXšAg$ˆ H3 ¥"©Ø U!—ÚžŠ'ˆˆŠ¤"¦Ò’•XäÊr‹Z#»­ÇÕвzqFªW'DUd²´ÄôÔ%yý`ÊÙ©„d¥"~âÉôHM4 ¸$ Õš‘éÑЉÔ_AÖþMC–^YíïãÕ~~Rn=¸"aÒËo>Àʹƒ2}ë÷es²"»Ždn¤%¾©'â[A4£¾äl£¾,²Î˜ Ó² $Á ÄxVÅK &±i§^Ï3×|1µ¶“Â,5" žâ!*ªx±øxĆÀz²æ×åù±S²lš2¹9.¹Ô—4iÊôÝ‚_äÒwZò~æÇŽ?pG°Ü,wkè#X½²` Š›áÆÅOBä' × ©Þ®wåSnóÕæ¡d[«E¼}n…/æOØÃ=¦O¾÷Ö•ž….­7¸ÿÈ'n™å[¯eµÖºa>R|MŽqþL‹Z«ÉÜE´œt–IĈO«Pª$Ì6yËárÑðts«IžSù9|i³Ÿ—ÓqÄ£Å23¥ÍZ™\4Âh;ϼ­rze y“£­!±æLçŽk ÛÙ^Pƒ†‚mÍf›šN*¥­s7±t¾ÌOåÞ"ôêÓù.j bcó(?Eš{——â%ÞÚ|„¼—pëÄ79~ðϨ׊l6g0ááë¬/0³| ¥&g¾È£¶,#QBËWZЍà©ÒJCÚqˆ—k#žERƒ± lÁ¤µ|Ìj©ÁfÛ°´^ F˜]-s´p6™$xí8…Ä21s‰##ïQÛ³ÁK-Qž°rhj™uëSØk\=…–BŒ ×J¼ý{«°¿acW~æ.îxžùii·¿}7koÞÏÓuûw"Ø¿„˜6>AêI,¨!¯< ¸º5)JHlbŒ„hc,x¶3/±)`@AUI­E­’xJ¢à‰bÅ%A ñA½Ž[<1²¶8Y¸Ê¨õ9f«T¤À.S·ÿ„aæ‰1öÏVÑ$¡:ëÓXM°IDZÞRaj*Ïúzk8þødòÇǤ'¹Il%Ÿò2njÿvY°\“nõ¹,&Ÿà,&Ëë-™¨˜›¡§Ü{`¥bÈ '°ú‘×ÅÑZ³áÙ{n¡\ùæK§N‰v_=*‹‰ò›Þ£÷±{ä• +ìQ9Xªj´–âùÚÉ`„'›!ó#M½mr ө쮬èÁ¥¦|Ç"/cxö4+vE¦½¢Þ•Ñ4`b}–šÄÓW–-´šÏY#‰†*¢ø^ VQÁЦ­Ø’ÄÓT0¦ç›œ¤‚îʽMèÕ…E1¨ þ¿Gèïâtü ?lOÊ89?aïÄ ÌŒ¿. K·²Ñ¼U[¹w¹Pú]ÆÖ§™_¿“…ÙfK§ùBnŠæhLêQ#Ú -±GgÚHFÂ\D ä#H¼Î,cÁ$Í|,Ëù¦ªQjõœÔ#Ÿ#¡Õ‡ªui­O‘œ>¢ž±g÷i&Ã%YÜ—è»S*I3‡‰}_'ŠCÖƒD.•¯°9™ªçùRÝÑçþÕÍ?_îÞó¯Ù\ôÈ/—gôÜæo®h{G&òE=üÎ<ö"VIRKΆ›!žI¯¹´BÎæ¥³oKÅzâiJ*†ÎDic¬ªIELª3k¡ˆxŠZkEéØ'µ >¢¾‚¢F j«&QQµ¢$žeÄæ9Z›¦`sä5d„€"!»š#2ätlN°¹ˆG¿:AaÌãÕ?Üêî²þì¯â?üã|æ™yþìë¥ÑH8þpY°zsË‚5øäâS•ËôØ‚a›m•nÛ)Yn˜ÙY¿£\Òç¹AdÉÚaº•Ÿ%G<Êë·->Ì:=ÞÉbÃ^[sYõѯÎ~6†ŸágÉq-Û*úÇ 9ñ³èž~uˆtâ£ÿÇû_ûö)òå5ðù»÷ÊmûÆ·}gë¸<òâ{üÁ÷NÊ®±2_zðˆTйí&,YdßÖ6£…wÎí’¼ïóý‹847ÂÕ.œmR/J*QKH‹œa[–…Ë9©&VÆW œÙ§tû*ÿÉÒËü\c•²·Ô¤Ê5—d%MeºZ#,Ö¥(!©µ<°g?­–Ô¢–äLŒ`%Ns"‚ø~ÒÑ‚ˆEHEĈb­\“Ai›Í`MD ¼WÓ9º…z'ïvóº‹/Ka$FèIK­ÄINâv5㈠d9÷<‰]b|}·øˆ©ŠŸòU%:'ÃbOi{`´sq¢U£`½+бß=@E<ëI Èîf@5 iD>‘5”€;}‹Ûô°R'˜OL¹ÅÅŠJœÚµ©Zù¨7©ˆv.”Äð͇þª¢¶“ü*ñ,‚àY‘Bj¸è%œ3‰”Z>#@ò±‡gEÄvh²˜bU%Kš*ÃL½ÊþÚ¨Üvë˜ÌÏ—¨½­26rüž ù™_<ÂÔ®<*µÎ êŽ?|"ù#cyYîN‘ušõýa>Ïr·JßäˆXV¿ì¥ÛAŽBíä»,úY–cmô›3üÿì½yå×uß÷ùÞû[ÞÚ¯÷Y1 0Ø ‚!n¢(Ò¢¤D–iEb$Ër¼TìÈ©¨œÄvì”].;åD•T–JÙqœDI©â¥b+ÚÌX¦DФIJ$DÀÄ2Ì>ÓÛë·ý~¿{Oþx=ANw¿×=”({ºjjê½÷[î=çÜ{ιgùî„„¾› L ³×Ò´ÎË4Dà& ø^ަ`ò~ÃrÓ€2ÝŒ zZšíeÜšð¾›&µ—5±_§z/´PˆÆ¾~N3×]ÇæÉS¯#s-~ïÕ«lô‹Þ4*Ÿþ½×”%žŸûѧtÏm‹Ô²„W.®¢ikíM^eIŸú1ýÐ}wpÛ˜kç:àçè­¤E£¹R'–#Éóf/Õ²p¤Î¸«3äkÅ ZÚÔ;/v9´Š^©ßÁi—•ê,kJÄaCÙ°Cnžç._d¹Ù¢–$–Hð [iX^’aòc×-@ Fž•Ôj#U!yÒfjŒ’Çì)ë2óJ"•üâ)VÂïÔ¯°Ò=IÇ–8©’ùæijµË\ºò /—_g¥ñY–†÷shõN Û°ràeÞ‘mèèLÆ G8= Ó1½Ai T)u_R%™S4(½‘^/ºãˆH–VœÎ‡<¡ÍêFM¹‡ïU$µuæô;è­6©%¥:øº'×ùê1Q`ÌDq¤µÉiEûJ l…4m±º)6?}•þåörèÇΙø(ß÷‰ÛÔí^åwV¼n›/xç}¶¸Iyû:šF¾‹,â\¢,xšE®„yh‚LÂ0+ñåØÓ2W½™‚ecç,jŒ§²ÕþjŒjo„eJ‡äHÍ 6ˆ¼œj –«„ÕÚÊ¢ÇÇ‹íK|yîu%xfcsFå£Fi…š-4{uî:ÞÑj·âøñY::C¿,ÉÍqùµ^~mã–þ¸¥?þPë=>sRc{OúcJÛS7iíÅfô·ý¬ÑýØàÚÃw7Œwœo ÏüA!¡Û„§»jìG('‚ŸŸâ´á›ïÙëßN%´Ãû¦A²µ]dã;¡±Øš]ob‰?„)Ä(oÎ18.œiP^§6¥_X•ù IDATÏ¿—žªh,oØO¬œãå ‚[à—†W8šK#èÆÇßOÜv‚Z’cI¢F!G΋‘ Û]yÀ‰,/ÕšlnE‰Æ-¬pVOÞ‘Pé)3=‚+?KÝ>Ãåõ–¯ä{+cÙ[é G¤âJþN®u@—7¸¶8d”½Â#½Y*ÊÙ·¯+!¢ CãbsC>@ ‘q½ °”DÇL}ù(‹R…ñ.u¡çcduI¢×Rãí¹ ÎHÙL#Õz‹VmHÓ¡U (júZxqù Oç‡X³œÑåMÖ¾ØÛq¿T¡Óäñ,ëHØd@!Y…Ï Ÿ‹çž½“‹Wäj­.È ³$Hía›¾º–_Ub%B¸PU9²|ìiDÃ…qÚ™•QL²±óa×£V&\”ð†ÉˆŒ[Æ]LJªRŽ .4<Ûðõ¤´gÓ¯åÓf:b˜T)‰N挴òÊG2O6t% fŸ<ÌÉï9ÀÀJÅt(«ë½ã-zè–þ¸¥?þðê år§9ÞhŸ°)Ší›Æp3‘Ðm ™ÚmÍî }Ú5ª x´]ZÙw%úN9 6…@Þ(wlšMn»|³ý¼Òš”irb÷{²0 ŒéO¦Šíè1 wâÝnô°=ÈÞNc”Ïšb ì"G“Òàí2&¾Yy»\Iµ œZ ^KèöŠë™?6] ž¾ÿ0‹íºEàÎó¼ãŽ%¾ðÂ6‡å y9(*ûÔᆲg^¹dµ<å©ûñƒOÞ­Ço~ñƒQ˜š®EùÒ‹—ˆÑ4תÑnd?0Ã]GfùÒéKlK:±Ì½ë.œÄÕïÑtîZ—OýîËœ»Öåû;¥§8Æ{8ΙKk:w­ËÓwÜÁ?ùNýÖK¯ÍHœ#šÉI´k5 Ê’¯œ;ÇÁv›»;‡¦kýº>ŸÍñ¯³ÿ4Õ3n–‘œpóÜ»8  ^ê:Z efT.Á9cØO<XÓkk üój™‡n»¨ÅKÇûmæâ"Ÿõ9Ô(uO–3äTæ1VQM$£Ò¸ˆÄo¡žlÕsŒÓ°qË!‘Ã$ÕÊ’ZáèÏÍ0ã/*õ0‚HÝ/W~•J_§Ý|„¹xg-òB1àpí%fÚ«„*áëåE.´/ÒZ_à±þ¬üld9]á®Å@h8*Ix$[Ø$†Ì!aV¤%GÆ¥(x#3á*OݤKí>g^¿ÜäüZc½Ë¬/ñú‹÷i°ÙäÀÌE<ø¬Þ8VñÙZ›pe–¹å«ŸÝà²yŠèUÕ huu¼\âjî9ûùË|ã®rãr o–C±ôý'øÀ{çØô—õÅKŽNÿ¤ÞqÿùL—;‡ó´ÏFZªø¤Q4´™U$–2_Íê*›T6¢í[&CdõpV1nÁ»¥Êr7nfã¨_$ªÜj0 Ä” ¢à\s“ÕZ/©+ÎPðÔò!! :¶Ù¢ÓOi™²*¡r¸V:‹Ff¦Å(6ÌqÍ¢X¤mpÇë~üîÙ¾Ó£÷-ñâkk¼úF÷–þ¸¥?~ßô7'}m›k/´Ý‹­¶™Ó×ÐÍp@¦ãÍê v3d“}ÊÖÄsºÞ†×v ¥MÒyêFaÁI#ÚÅ;¶]ži7»M9—íB…Úádd’H ÛŒo§î;ÀÍëb²Ýi‰nðûv§.Úåtbï\;xÐ;…öw ¡ït:·]gŠíÂô7’?Ý@޶ïJjÌ·¨µë E½Õ³óÛÆßë—$‰çá{— ûú7V‚íöŽoã÷zo¤Ï?ÁÖû#:Í,áÄÁºýõ¼¡§î½Í~êCé®#ózðø’½ïcjÖ2Ž*͵j:mCŸúÝW¸¸ÚåŽÃó¼ç¾£Ì¶s5²\?òÈäÎÛíKsúð=§ôÂ¥Ë6(+ýÐÃØÇxH^pçb‡…ڌʮ“'ØÉ0ÐrÊ™Ñs‰~µvgýœ}cÐÔ×F3(:õä™±)fq ¹¡ÍõL•‰£‡úœ^›#Î 9 T^3;g9M¡_ÕköH½¦Ce‡Q2®(‘0Gi9QžÔ—xKðv=4E49"rò29s1ˆˆ¹™R³¼NR eª ÿ¸GQø]ˆCû±Ã×d ˆÃí—h7×Touù^׺IG÷?¡;j/øЈö¼QÖ¤(YHÐ(5™ÆÔÁÃZÍGÉ)8!,$¦t\Xm#sš“ì•V—kBýºÖ63}Hâî$òõ«uî…SÈŒf2ÔáÅ×ìµ»"fJå˜ÍÕFòµ2Éœ³Áì@-EºÃœõvig>õºV?WØ®{D–ñàŸyX¹/Õç/¼¾ÒP½wÈŽßv‰¬½ªùes±¦^VÚ·8 j”u†)J,Ñ\˜áe®XˆCd†@ic0” S‰‹$È4†sÞ1]̨b”$ˆ²à¢Ìc)NUjœ¯mZ0ÓRÙÀ¢³L!:Ë’@³J8Ü«Ë!=_Ù µ’Í,hÝ™~cNQw`F„M¤ºE;\yEo¶†ÔÆt tªŽèÅ/úŒ»Ð»¥?n雫?&Ça›yL­?˜¼£×$v;ØŠ;ñðFtb‡(Ü$¼ßÉ.d—u³ÝZØÉ†Ý)ú6‰³±“ŒLBí5‚ÉŠßm—õ±ÝÚ|Í’}xÛÓ9ý~tÁšÖóÛo¬ýžàh×LK»½6N2—ýœôL:Þ›q"s3x·Wxë{3îxϽÌ,Ïòì¯þëVXœ«ñ‘§nãâÕ>ÿò çÐTüýôu½sžÿè= /=s‘g^¼¶ç©_ÿ3|æÙsüÔ‡ïçßs÷épxaŽ+}¯V"³³3|`iVÑŒ‡NÐFoH-OXïø…O?ËÊzŸ_ù‹z×}·ñã|ˆ•>ݸÎ÷Ý·d0ÛLi¤‰>ÿÊëœZ>¨§î¸“ÇŸPM‘h#¢ è®jÀ±jȇí gUãù¥+1Ó¯ôa>S_Âù6>Ïtuv¾EÒJǵ+5î:´ÎŸ[zMÿtmޝ*yòÚHƒ7züpy˜ÿ­×Ó¯f×øsóm:ÕkÆäÁ¼ ŠÊ4DDBLˆæð‚1EØ‚J{YÃx'6O?ñš·ÞVëÝtH¸{Q8ƒÂ¢ÞOZžâ7äUç˜KlkçT1áhõ”ÚÝyæÂ%ÒöP²UŠÙ®U£’À¡¡7*2„‰2¤bVa@EéLQFÍÆ‘š|p*:RÄF') ÑkP¥TÑ8`[µ”™1¨•ãÎÍC_òžwÐr3ãk§WyíÒæ-ýqKÜýñ?ßˉö~»XiŸ¼Üï÷ûåË͔˛eSO;§ïDñýŽÏ¿Y@„ûÉ›»Yư—1îw^“æä}§ÆøäËwϧÛ=œ,oÕuô‘Û™92ÏåÓçè¯nŽ'cÆÇ?x‚?óc÷ÓëWöìK+‚qgªa¿âÉ»8¶Üâ_|é!Ú7¸NE§{N.ñ¾Çä…s—W®pÏ‘r¢ou6«ŒµBTUE–¥Ì´´ò„…vÎS÷ÝÆc§±ØÎm0hJ6G»å°t„÷ OQEN.Íòä±#,4[Œ¢Ç{oUѤÄÌDED- ,—#eû‹  ë<޸ƹ¤Æ«³ârî k4}É dÔã@pm#çðÌÐeQ¿±y×±x­b®ªs(æsaQ}§gSÖ6”!Å9Ã"ÈŒ )Nf‰JɶÒu˜ANÈ3ÇZkµH+ä$±Oƒ³àÀ’Ÿ4U_”Ê×Hü÷rYžu#*'ò8âPã4[W ätÏ=MóÕ 6$ó¯UÜÑè‘vd…—pÂÜ /‚aRSjy6"˜pŠÄ¨ãÈ¢FG݉٠.´û¼VÁÙ‹mšãÎèGÏ…¯>I5µZŸ»çONnòÌ¡1˜árRbyÁŽ*䤭@©’³Õ:׆WYÿÅ’êâî‚6ó‘;øwþÈ"«Å€/^-PÑàÞ;βxð" Wd±hP6 ]dà» ˆ—·Z‘¨Q4ØÌÈQ 8…Žèǵ'ŽŒH…,àp¨*ƒTà ÄHÜâeaPùˆw๚ è&‹ez‘±a°,î4l¹WWð‘çZ#ÖEsd.ÐDh¸H¨RF&°H@¤©Ñ:@«pÌ B=byäÐ<ï}ò0o¬ xîôZB’8ª*ÞÒ·ôÇwzÌ7sn7›NÓ>o/uÅ¿_óún~Æw½|_DzýÖ|Ëÿ¶Íç®ç[B.¶ƒ`Ù6×Ú6¿ÝèÛmÒ±Ûã`—qì4—îÝî;Û^;ц è=ɼ'¡ÈÉ´óß;={¯ïžæó~ÖˆÍÞ~ÀÿÙäÑ?ÿV¿ç«ƒ‘ £7Ç6û¯ÿ×gøÔo¿a?÷'ßÁÿ#§Þ¼÷W¾p–ÿù—NÛGž<ÊÿßcõÜ›&aÚyþo›wšxûwßkïºû€::osK·ÛÕA†·Ò¤×l&ë[ék¶®Ž]µ»\Õm¥Êl%äVø:Išrüàw-6-ïU\½8gÝÞ,®UZÒ)`Á¼åõÜfkX͈Á‰@j˜™S´$FÒjd%½¬ì%4‹hOWícÝKüÃÎçìýçRç_¥Gla­°/Ñá[G,$‘Ðoœnpl0°™nÆÿ¥“6z``© ì>óö½½{øÊ¦q¹¶ÎR»o²`x¡“‚µÜšYS‰{É‚y3sæ–å%iZ†9yÛä ×xÞbÕ¶A5Ç"P[Gï-3ÿ¸¹¤ikÙeë:,bùªÙøX|4oA–•ëÖ蘅¬e÷å‰5kX¹°-pî$ŽŸë¶þ ’h•3óQf`æÌÀÆFp”Õ¢³s¡½ØX3§eO ›q‘/¯.Ò–'™¬GÚÙW¬Æj›´òFR1GjìÞ¦·ÕŒù´¢šïòîð´½ÓݽÛþjÔ2«š±SíŒË£Ò®Ž R3_™—,± gnÅ`&Ì0{³ÉØ·¬W¹°…ƒâ®#Õ¼¥RýÈÌU™ ¿U›>î‚e΄wfx³ÄœU>0È Ê$X=¤Ö2Yp‘…2µ½:Y”]I‚­g3Á[ÖF6R´Ô¬Ê,FgK´-:ìêVÝûÌ¢3—˜…ÄH‡Žh²•fäCŸ<ÎÏÿOÙ?ùßoïï|ðMè˜[úã–þ˜ò›ÂnbÂ÷í6öa[í&“Øp»Éߤ¶çvs›æ½L9wv‘ÿièÇïbŠõÈ”ëtÒµ:ÉÚ´[@„Ó…înIÝ’Ú3Ôñ<ÄÌmKÔæšX-ãÒ³¯³yaõmØì—ü•ÿö‹üúgÏò_þ‡é‡>tòÍ÷á…+úÍg.ðÑ'ŽðSߌóeSI=ùàq=uïm²ÞP‡ëQ‹DÝQQÈ…³®Ër²¢ºL*,eCMVis5Ô¸j\ u*¡ÜhÇ.q#¥»6§2KI;Á¢ú•Q:”%%™+Æû`hu‚y—Œ¡B…!JEôÊÓ¦4Æa7à?ë¿Ä‡‹UmøšN† ¾–´¸àsIÁÆFÆ¥ó5ýéåWø×ÓïÍvä tu?9~¸Ä_úÒkøÆy[îË¢!'ÉIÞJ%*ÌSÄ|Ü^—¨­ºo¹Dtæz4ZŸHb«y¥AæH¨®ï¡ÂFàïþC2AÊ?+‡¤ˆ¶ø"ÖÝ\À'޵ìUuÛg•Ì;•Þa^˜3•nŒýá·°÷æ¨hªRزÀKµ(å&†‰CÁ­UN®49w`|ÃEŠçÞE½×‚lÄ‘öjºl4Y”ÚõÁW™'ôÊ”¯t®èÕ™sl„Hkm™Å/½Cý«µörÖ£ï[Òz1âì ¤š 3jêäÚqͨBÝBþk9æÐ¸±•ôVú”p¸7ÕÕæÃˆŠ[îÛ[jlË1ÑÛVš]Ow§°áƱ¼IC Œñ Qpœw+&Íš8RdÊ‚§ðAWë#B Á©Ži$Ø$Ò Ýû°íÊ3ªUDèœ=U©ÁÁ¹öH*Åp÷oÒ9$¿­Î_øé‡øÄÇïÔ¡åÆ-ýqKL¬?öpç!Êù- Â? ›…²×Iìe‘2ᆷ¡¾8 Ólhº ÏÙïß^”Þ4‚½WZíÅ1ü®îãžÔ3䨤UÊBÅ>}D?øôQušé›÷y?†0ø'ÿâVÖGüÄÇOѪ'üà{Žñ39ÅWO_ãÕ‹›ú‘'oÓ_þcòØ] ^hì8ö­JÓœ‡ï½‡àê B¤RF´4€h Ëš†!WÛõYNV5ç»ä*åÌä-*âèQgÓj¬åuÖf긴Ò,k°)zkm*—I ™¢9Ì92_’º„¢¼Š˜¢'*K2çˆaœ¦UÏåkM¥‚F–Ñõ-î­6ø¹Ígµ‡”YZ±º–Ñ»æùéæyN¯æ/T}vHÇF|rtõÁ1>wyÃóW™möÇ1é”™pf’œÉ¹øfgdYãòƒ··»µ”~.Å2'„LoYËT¡ªDÃ×#o“˜¶Ö£ÓØP3ï©9—PÓØyóª­Ãq‡äÁƾKÓU`gJÇö6yåð&ºI¥WÛ=Ö®5žrZÌFZ9{ýÕŸ÷”¹ŠZxm6h#¯°^z€v»Ç( ªßêj˜Œ Ì4ªõ‰×¹ü¯.ñÂùv5F]»ÆC±RŽÈeºÝÏ0×èþcií8`à‡X¢7q:doºŠDúJVÈ#’ˆ”ô}ïmj2pÁÀ%cçP†¢Ñ I FØØ'ôk%=W²0¬ã5vlr em¥TU2Ö‚W;:H|LM™úÁ#3Õ‰ ÚH}©‰ž aRÓ›*‡z‰q¾UR8Cf”…ÐF¢^78ÇŸþäýüÿô]üÄÞsKÜÒéŒÙ½äòO‹²¹Ü«£;IãƒI¨÷ &½ûuRÚO·­½tQû®ÃqÛühS~¿]˜f·ÐàN÷°CŒ]Â…7cN;…¢vúÌ.¿Ù4µ)îÙ-T;ÍŸMÈ_›rÜ;…w›×´|Ÿ„O¶G:LMÓù»2sÛ"ÑŒÒà€Jû艔¿þgåoÿÇOØ…º„0ntúåg¯ðßüÃg8´<ÃðÇ"€=ýÐA>øÎCöéç.qø`‹?ñ½wðßýÙ'ùk?ùNµdÛù_è»ï=ăwœ`­js-4Y¥Åº5*%âˆ&ªàV91ŠÙ¤Ëb²Æ¬ïÒVŸº–XeŽHéµÔÖ[uzµœzÚ£]nZµž3Š5†¾Nˆ3,:Gæ+Rh\Ö@i)A HæbØÊ%1:œ3ë÷3B%ëÌŒ†ˆgÓÕìpìÓ±™ÌR•Xa¼ö¶…5ø@mOwð[i…÷]kžýÌò“öþëU~ióGæ–ú$\ ©FxJ*ˤßËò ß·H4³ o‘õÞ!úÕÂøÿm·® ×äßÖˆÉE›;¼N=RK‡Ü^Õ8§Do¸±=½(’U2F0gBF+*"1ÈM„­3ÿs„V²ŠÍ~J-8; \sÞÆ¢5ú™˜­­ØÂü[™‡¾‡\Ìd1x™•«×E+ÊÞèë\;È嵋 ª¡i§¢£ùGß3Í”ªŠvÔÏ»„¥ZÉrâ¸X_¥çG&óߦ†d"‰Ž‹ùŠ]ð«´B¾ìªmPKêÔ,3Aæ ~+–¨}M‡çº˜r¥Ž€V„ÜL©¹€óqŒð÷¦[ad¤j–5üúÈâ(%¦5ûæòcœ7.k0*ooÝm’óQNž'’Xp#«ç0¨2Gé…óNø1ò¡E ¥¨yWecÇÄ›gf’€3bmm½Æz7çþÄt{RØ…Õ£vñü²Húòë¤}­Íu±SY¥$½í¹ õÌ“›S¢¨õaf KÙHûvñ’×A˰‡Îl­ÛFA‹ì'xÇãMjÒ#u©]î‹õ`ù(Ç… ‹‰¾Å'¯‘(dÝ| fœ±™°h]´ª>‰KI,‘G&S…¬rãUMx½µÇ JÌ¢ /HUDÖÝH}W)5‡ ÞV¢S­à•±‘•\ò¬ò–¹hr‘¡A-ÊVªÄ"¦Y̲q­Ö…æ‚8QÉê`5ÃêQ,D¯†‰R&3IÑÙª+¹¦‘ÒÔ©*Œ“ñ§ÐÍßP8÷íúÃ;]ßné ôÇÆÞ·ÚM;A$°½Å.c×cÚÍ4vF2·]ìÎÝ褾ÛÎöÚétÒV´ÓØò¹—¨‡íâxiúMR¸lm×nX7àßn€¶S¬?Œ)X»å¨~7¤`M“o¹Ÿ°à$¼œ&·pÒgïµ%ò4a¼ÝrŸ¿kBè ­”Oþû‘=tеAT#ƒhj_¾Ä»¥7.öÕiåÇW¦4ÃQŠUâGúj4ú\­r`³N¦ŠcôË/ÖÏs2s0h1 )ÎE,8 «)âäqD á„êµ±Ã"2ê4Ș#íG5 c¦ó’jns‰˜ØEVu‰³É}`F}P°4ÿ š­gØË).-ê•9Ó……óÜÝ©P–0L„EQFªBª†#o$•œÉ;)5Að4q$žY¸¦zŽÁ•6?ä!KK}fsVœ¾­FW÷x‘ÁñÏ/GE³ýœv}ÄŠƒQHIÚ]~»~^¾jp¥8«ÑKK½´Àg¿òÖ_ªvÜÇ~ì(ûp?€KȆ3:SÚí¾æ¬Z  ’Á€¸ž¨wbÄu„„Ú(Ñ()¨¹ß/oH IDATµËŽr9Ú2¼yÆíÈ"RŠQA,IK‡+¶|ŽÄÉ0U!Œ ý#ª$ãT¶^­àZ½7qdÔ¤.ÓEéTž»‡M\›YÉzµ`N—ó‘Ñh^fNAƬLuDY%ô¶juˆâÎÂ1/©›yœjÑá F‚`‚Ä› E‚Œ…Ø )!í^?4 x¾ð‹—¾mï0ƒGÜ÷Ø 's\º—Ê[úãß"ý1­4%-'±Ñ~?R°¦‚dÂùNËûiø9ý:© íuN“‚5éºüKÁºaÐÝB1û ÍM–›¦ûÅn!·½„Ïló½Ùẽ„mcœ4Œº× MñÎiøkÿqë46»#ÞûŽeû»?û·Ò±žûÆ ùç?Ë×_Z%oËàRûÈ'íÔáÃ*£aEàg>z7õFÊ—¿qÕÏÕøÄS'y÷=ËoŽ©LKB{„ÏŒ$2**R*æü:‡“+¶ìWl9Y¡ãº–ª"QeUÓ.—óc` f§+ÈÌêqD‹5_P¶œmÌÖˆ)Vc@A 1:3É|ð.ñV†”ÒefÎáb…ÌlÜÉ™Ìè^ÊðË"ïTX€Êå\JJòbH¨ƒ’@êJ.ŸË¹ôRnO×› œàù#ž4)©Ù÷÷Ž’]8Å(-˜mö·ZìBžÉ443YóoÞÇ)>ã2CF=5ˈn«sSÙ¶ñŽ}ã·Ìn YÓÎ9ëû̺No;3ŠÂÊ­–s×Ê_yšA™E™µ¢,lÑ¿t‘,Š“ƒ–/à"  ¬[þÆQs¡92ÃbmÈùÙ’‘œ¹&KKWé RÞ`½hòh»iE¾Æé«›vâÚ ¸x''.Øvó`é=éœ:„ï\°U¬Ìxæjb—óuŽ4£eˆ@ü¦„´o ¥Œ ËB“ÕlÍ 7²TžZåQ%¢7‚‹oõƈc:ÅtlªoµÓº^•nÞ‰À™lScõ,$¬¼¡h˜è¸HV9*XI"W%Îå…Õ¶" ™"Ep†a Q¬›Ù ô eoVóˆW“h›[\¿ž×Ü—Qb4LÔǸ’xóøèHŠqzßf,ùêÿwõí"´õwòT“ÿäçæ'ÿ«{øé¿{ó¯>Áßú sÇñÎ-ýño‰þØe^7+½lûn?iø¿×tºiy3ÖÍ´éG¶Ï5jðhÒ´2ö “{IûÜNð׸ù…èûñ$÷¹Y^çw2 ²0¨›}‚5©×¼ÞMC½œbí…Ïû6šŠ–•åÇ©:l£¥ž9®µ¤,3ŽÖG Í)\[1×ÎôÐ]ó¼z®Ë`õ'~ðAþåçÏð♞~ì6juE¤KR™®gÆ„`¤‰Ç¼ã÷^YåžCmy‰cÚ|ß{ðï~ø?þ‘ÛõèýóŒF‘°9nŸå1l«ó¶ìfÌÔtCªé†$. Œ” ¹Hꉋ’ "!Ê+!È­oêe5 Ÿ¨Q¨ÙˆRÙ–a‘“œŒ§q­v”³ˆ9‡ádœ3Y?ãHêÆh̓†”ZA2ŠŒZ©¢÷dŏޤ»šáp:yÂ3sd@¶b¨H½'V3œ®]¢iŽd0C\ T1¥´“““á ˜U•(VŽháegÒW±bÀÂh^­ÚUêy&sßVK°°ÁŒû笥K¬ï 1ÜdiñzD {u.]½›µNIæÏꞺÇÕ…¹ ztÅE* ZBÇ¢BVQ•À9‘›ˆH­àÈœhXB§Êx¾ç´<2N"Ï®/³òÜ#¤C'|Å /ÑþÁÛ¥™ Á¦‡€y‘DÃã¾ç˜ŽÌ×u~}È|+ãžC3äíÍ™6‡•]Y-p-H ¬ŠH*ÊLÆÐTOÇx}ÞÉB”2Jr„èÇ|a¹«£´ZµIUYîJùÕˆ#“7 ™­»ºê£‚Z1€(ED4̹ ,©¨2ª˜È¹ oÁ\ ŠLÈLÄRŒ.Ëš'y§Òp=Utžè\ÔûCë7ꊉ̇@™9m®;;µÒÓÊáÈ™û3½Ä|¯ÇBhè·×V8Ïû{ \í5±¤"«†Æ™•[çõQtŽNgh¶áTŒRáh‹lµ¦òQ–¥FH¸nýRfÂešñ ã³ÿq§1\ ²@ªY.cÚ´¨<ãb¼ L¿g•½¢žðNUÑ´¦U”>‚7ªmõ\΂·‘3ÍGš˜=+½Ò3û+8½që‰qàÐEf;—µ:S0È„ïgÊ›=ë ºc0yt&Yã…µRýáÀ®×£«§XZßà¡G;ö׿a>³a/½±Á—Ÿ¿Ê÷=u—þì=Æk­„¯yÍ~˜@?­Ñ"¸Ûôø±T¿Z¬1,†*’Ô’˜ã]o K$Ó˜^NE!!SÄÛ¸Ò½²’Ä;d•rsäV³q¡·'`ÑÌK¡ÇéŠsAxÃg«ÙHeVZpQbè¢ 4‹Ñ.3L—òÒ*µà­žy ‚·èA¦"‰¤Þ¨U^]ÌJ)A™¥ÎÔ¨dµèüØ©¯0 Œ(3oR0¶$Fözû²ÖêCBiV.bQúÑâìk=Kßw”™‡;r_|Ý *ËÔ*y—â­0™ ÉbtòÎ(»¢Øp¤M£èF‹8¥8Èû%£fJYÏÈ»ê[ïrƒ7^nRŸ TÇzlŒÄÌo‹Ymr¸jñ›ñ9µ_ç@ÿ^J™Y†KòDù1$¡‹JÓ¨[$"ıÑH+:b¶[ë„Ò+‡ÜØ“+Š1&ÈÝ”ÔWÆÂ€^ˆ¼¨€OSÚgcÉ»|ÊŒdÍ1”¸Þ¤yäÌ"cgµÀ!òè°ÌX¯°ù(NÈør™³ÒkØ\„à¤ÅúUÚ {qÎk5-Yêe–• UtäæDË8×ݰáfɃþ¸å‹Z›=Ç™C/ó?qœ?3˜åçÿïgxýbÁ¿÷Gí7æOóëí—8Òãžéæ\Âa_ãKƒÛt=ÍÇÜÒ2§Ò¯>1²]ØÈõ¨T‘⣣6Jl˜IyL,XÉ]HsZ¤FhË…“]ÿ·…×3°°qÁ7†ÌcJ$ú˜õˆ4ƒ'ʨ*Çfw•5%ˆÒy– r‘º9Û®·Öj !Y™Øp)ÁÙƒ+õ­~ÎE,:8<T*¢ˆ‰9[i¬óÌ¡WYè×yú»è“°‘?þÃ÷±HÆi?â+3çìðGšø•ø*g›ÜÑ]bHà7¿x–Ïý×ìä}M>ñW3’£ã”Ê}üßâ€ÜÒÿè]æe;»û±?vs>'•‡Ií*írßn²2ó³›|Ù>×ذ“òiÚ1î·ta?6ù¤kïm×9v–ÙHh·ë§ uíT\4IQù$`.Lñýv^ß$C;Ô0Á¼¦„Ü/Ô¤ :Ú¯´‡ùïÆ‹Ý «öòîi>OµFÒF®™cKêž_‘ åÍ\.õø<‘™ñâ«ë*û¥Ž/&ÌÔ"“Ö‚c%8­ #£2*OJ¥ÉH{ïI>þÞ;uõJ—Í~%ɤÜÔ‹™ªèdáPŒÊ(RG•9„ácÄzH½¨¤ˆªUhÁ'ZJS-e©–Ó”¬›¨¼ædƒLŸúòyýæ—ÏÊ÷%UNY¬T …¬H tÔÓŠV^¨•´ò‘–óUš~ AÌñ2%i¥Ê‡ØŽC2l&t;¹¬nRb 2/$¼‚‚y*%2ç%‹ãðcD 0mœÉtéåU•H2*e%D¼ë#\­RÙò5) ¦žÇ]¨1»™Ð¿­”ˆrôyl4¯a÷~ýƒô¬Ä1–¹Lu×S¢RcP’(‡)šôkŠ•¤1XóåŒZ¾©ªqj‹áy Ô„ë ƒÉ)¨*L—/Ô°˜Á¹ N%N õT'j¹|6†ÃFž û¯û¼Èdšu%!­¶\4Ž˜¼I›>ÊK^ 1ÝЭ¹¨Õ´..I~$“(¯Õ(ó‘V:‘$ŠæÌ†\Zª½œ €|k…SKâ`+ʺózìüÃjç×NœæSµ3z®Údŧ%©~ò‡Õ{?zBoÌ®é|vI¸¼¨ÙV¡ãjê€Z2àlÕÓ±VÁ\êTF)ÆDTŽªSjý5•o–d#gŽ´òª‡så’RRµHðAr‰®ÄÂU 8.쎩„»õŠ@)£tcG¤ðA!êúJM:•§žå>j&$¤•´ž•tݸ(?M¢¢LD§žIÿ?{oãYvÝ÷}ν÷-¿­Ö®îêez•Óœá¬ÜD¢EÑ”©X¶K²!Fì8ˆaCˆmV "8Û±9 `Ø–H²”H¤)ÒÜ·Ù8œáLÏÖ{WwÕ¯ª~Û[î½'¼_uO“Ó]U=#…’ëÝøý~õÞ»û»çÜsÎ÷ëPY"3ŠQØH¢¨Q1Qä`e$HR§‰)‚T*ÈÔbBƒW¥F±ˆŒÒRʤ¦Wæ¸:— ä555kE)Ýqűõ\â8•Þ5Í69¹9&ˆiI‹Æ(:òPKþÜ/Þ'ÇîwÒc¼ž° ‰œ~×üÞþñGhÿØ¥®ÅŸ»›ço7ž;­ónˆ#wCô·Ýs·D€;Y7;c¹Mp'kk7¤“»Y§;]«;Y›âv`)Þ.têʲ“òÙehÔv§ wê‘ØÉu;é£?¨¬íúc§my§O°vsŠ±Ý –ìй“2d}¥€´÷ϲïÁ£L.®l'×õ×WàJ©‡¼O¾ðÙKúõÿë öwË¿ÿc'镪ýQ”~%:Ë’DÚ&’ÚŸ(?þáS5®uìcMš÷D´ ò1 !ª­oc &DŒªêH¥ 5ÿÃï¼ÈëWFl9d~ìô)ž<º_˪˯ü‹W¤'ú«á.™ÄT3X"kEO¬‰,Í\#K*ê°^Ík¦Y.Wæ-ÚùD¼T.Qoœ„`鯂J:¬‰²E[®*Ä`õX0$š¦^‚‚$X©HÆ×®˜ôÚt.¨j¥¬,ÅjBZ[¤ãyúä*Ý•O`8Z?Éo‡%þMç%~hð.†!¨¥Æ4þ<)‰)5‘ͲAU¦§ë £¨D'ýÑ’vº¯Š³SCik(ATšØÿªÎÑØ-vfÆÌ]ÑCe‡¥Ø5B)JªÂãÆjáŒLªœ7B¢G©ÁÔøh°QHA­S0 Fz‰4$„9NÐÉ‘j8²*QC‰Q'b-W^ì”Òõ–™è´L¼´ŠŒNΦpq’r2XzéHSmIœÙÔ3w?%ÝöˆË—*®®±sðäãÇùÊåküg>«Ãöˆ÷¬¼—Å­œõ+LbνºˆÓ„TŒvœˆ1ª×ÓêÔ)¡Ô¨ˆUƒ˜&]bŽ5&méÕ¶¤œP+1iPÉP‹RcІÝks¯ÂÔbÔˆU§jÕH¡okWK v\3YŸè¼·2´ž~^b}JÒPÝS‚VÁ1‹JÇ Æ¨EE+Ø µ ÝZèFÑ‹©—Eï0M*–šÜxÓŠ ñ$`£e˜Mtµ³)í:ea¸ÀÐA™•œ_>½ºLË·™%å¸ÌêÓùŠ,LZÌa3A2á×óUþá?ýN¶øþÎýºo¹…/¼,$–º èbɧþˇù»¿üÏ>³Š4<)»Ú?d ý@uoÿøØ?þ< ²‹~Ý­^s˰›ô“lã…ÙIˆþÛñ€ÈèQ°óôƒ„¨ÝÉøí$rˆÜ{':ùnۦЄ`íÉžìÉïƒtöÏ*ú@ûÀ,n¦Åäé ª×79þøiBŒr–‘‡áÃþS6rÇo¬½ÊÁ,ea¾Ík‡„ûOÑuÇ•Âm¤¢¦*:Ñ`ƒyÛ¹b¢Ãù$e“O¤U ÃtÂ+óÏsºÿ0³uŽ a2‘Р³D”ªÙÑ¢í´³¶¨V¢j,  ²×á¬-èú” †Kù„q´,K'XF¦fS-ë ]çÉPÄ7#Ÿ+$(Ö6¸V¥D, AXöÂAM` ŒM åH´ ~ÓŒQÀ©P¸šµö&§/œ`i}…U6z›,–’I†> <7·ÊÐTœÏ“ZC0ð›¿÷ÿËo|‡côøÙ¿y/KK-†ƒš•¼¢…csb©ëÀGæÚì_Êvýžºÿè»ùKò¯QÕ¿ô¿ÿ56F}þ“O~Š?ñü÷¿ö_óùggïe¾'{²'︘½.Ø“=yçEœáä'#–à « ¬¾pã ‚`Ì ¦»_þÕgùÉO}†ÿó_¾Ì`u“c‹†NDZŠãjmÁcKg‘ZÀÔZ®¾üÊet¨4‡Á¢¦°¹ # ½¥¿qòÞ{–ùÓï=Å…õ1Ïž_£EÉrÇñÓ|”`2„š+ëË\Ƙ€)Ï_}˜çÖæ…+§ÙÍ3Ñ6 1X®^>Àê¹96'±‹‘HîJ2W6*ÔÆRw€^_:lVãÒ€W‡7 Ѹ©¢¨‚·´ZiR3eˆB Õœ­ ´ÆÎD". ÖÊK9yÚ™e°L¡y§†¡6®MøËWY!¾ùhzYeÆ4«˜˜æT}+`VTè ŒÓH¢Bim’¯žñ9ýa—<‚hBÛ•¸öˆW÷M0Ý(×k 2†5jBkȼ­í0Ÿíƒ}—YL2.œÃhöÏM"Ÿ={¡p¥·†^Zàû6…À•0âhÜÏþ8Ï·Æ\¶W¹'É ´”Îßt8Ö0ž¼é8N•VÝ%ó9Qì³4oIÔ¢•PGÅ'Â8&x5Mrî”cÂ6éÞ¨ UxüîE~úÃ'oèåÇÞÃ/üÄã˜ëQÖ# Z©#nñS¨1o‚VŒDŠIÆê` c"A-ÎÖ,é% VHW+VG³\òK B1Jž”¤®nø+°T¹ Ù n‘$«£x‚qç†^€<­r‚Ÿ¦¯iØQ»Œlài‹i>xù­r`œ< ¥2ÔxP¡- eJe¯dWŒ‚ó´P†Vµñ€D!ºˆ†Ú &ûŒ‹ EÙ_¦dñÆÝ2³dJ£˜(‰\žYc~Ô¥U¶¨¬gÐ× 3ƒ¹X6ZEc|¬/r$vQÿú oð­j…ÇþäKûZÔudRÖ…<:ŽÄœ…˜°l-÷çB:iϹëëz'¢§òU]²9Þà=w?ÉýGOóéoý&Ï¿þôÛ{nDZ'{²'ÿÎÊ^ÖžìÉTÒ™½ÃóTÂÁ¹µ·g„Ø RÙéQoT‚÷,œ8ÄáwßCÿÜ®¾|ö-ïýì×.±±Yqt¹Ëk+#þ½ßÍÝw/±ïÈãÁ˜ßùÊ9N,õ¹÷Ø2³½6z–:èØ3ªRÚ¦&1`ÁhlÌeåùäwñÕ—VxúÌó­”«cî>´þ(2® ~êý÷šŒ¢ö[ØNÈt×T¡6DŒ|sþŽb!Öìo]ÁgS(‹Ã>ýdŽ]  ö»5r[ƒPûµÍS*u™·Kl¨‹k,*ˆAUÐ(ÔÁQWŽñ8g&!“CE”YK$\7Œ”#ËìÐÑš5¸VF?©h¹”ÛÁoÜËLû<=c RqJæiÅÿv}À·'N6`Æ5då,6¤hòÖZh´J°Šâ1ê0a¦`·fŸC5€$6Ùø:Uú§h¾Ä†#½1¬ HRMÄ˺õ„:aN…T…‹­’k*,IL –:¢‰”QÈPJ,¥i>ÏzaÁ U¦,C'j©¤ ýòªFˆq: †Ù ­:o z“l`q³ÇŒÏw*ÎçÜXä®ÐEá·?ÿ_^á}?u€y¸ÇßúßÃÇ?ȧÿÍ«üÚo¼HÊì¾î=}˜/ùÆwÏÓßQŽ2`òÈÄ ƒQGKt‚O,HŽ…*¾ šOùùO>Âþ‰ð×?ñË3-ÖGªP–fZ q_l4ߨSï-mÁ«£9Ñ}‰íÓ±8SÓ÷ œ ')%§W 9Vé$¡ËJ½@TCn*2<ƒÏ…:qQª"APÄ(A ѸiäRã!Q5$Ópžñ8£–˜!(BÄNM!°VY_IѰT[Ö%0Ü_cºÂzÂËM.Ù¥©0ŒÑ&×Eä†wå¦ñoê‘ҷש¡¶ ’$`“)mºwÅo’Ù!ƒÉ2×ÖîAÕ r#·ešæ‚Q¶òšµiÈî¦ÌÞ$PÁ;ÅÒxElTT#%p,‡ý½ Êéƒ÷·.‘,Lèç4²?-hÙÈš Ñ(©(¶è°0:†¥Ã…dƒ ×îþ“¥ „ S‚cäÆ|E^`¸V±88AÿÔ˜Ö’'«[œ«,É<Æ;^•+Ø¥³S¯ÖtͨûÈÍÝ\ĈРó$ÚbNR²<öz(œb¦F`P×x˜zÉB“|Þ<×€O+‚­h‡52Zœ«5s‰'‰«†L… A/ÆB¼‹ŒT°µ¡´Ç&Ô*…‰‰ ]@T…Y5$[qeú¦ NQ®õÖI|¾y¼‰Œ:#2oÙ·9C¿3áõîLJ]ŽU]lËð™¯ç©É5ÞóûH2K]Fr,™Z†(Jhˆha è Å1·ÀÂRþ}ï¬ÛÉC§ã½|˜¯|çs|ã»_ÂÙ„yô“œ»ú:ß|éËß?f;t­,Ý=ÏGá}|ð/?Êý•GøcãqN~øpó »µ'{²'7< w‚½S*ø·BBØ-vöÛ)ÿvÏÒw Í·kÇöÑ[Õy'D@ÛµåVD9»éÇô×N¹X`g˜çoçï°,wzTJÿ¥Ëºpÿ2'~ô!âDõÜ7^¸éêå'ŽëGŽrñ+¯ê•o¼·@¾X:}T“BÜt´'†Þ|BÒóô“’91«=èQ¾Ôyž?ã7pÚš2”„úV ‚Wµ •n)|)9¹i‚U¯&|ÒU15èa¢ûc$õÿÁä^yaÃü[:›U¸®7oMDab 2`kQ°'5Ñ`‚0I"5Vƒ(€ ò¨¥(]M\IÔ@’T,$cÎ.UºÒ‰,¨²$ª…h4Š2Û2&¬g:Ú%h ³oMF‡9~ù‡42#.5úöwÅ:'® Êö3sªÏñvÄúÈfaU¨˜žs㈴ü÷6³iÖ÷ýØä´Ì Z¸hé„Y5ÔØ0ÄŠ* ˆÊ¨­ñæIDb@I´¦Ð¸0j°6ª R;Åè|™SMqz@[áJZsÑýÑZO­MØ[m£¶¼°_•+NUJǺSjQ=ä > jU¨L`ÅDMë„¶ sšü+€@ÛX$µõ\_$©S­\XÚœ¡ß*¸ÒpÏp–ã£u¦ü«ßz…/]½¤ïùóûdq>WÙj ë‚¨ºÐ„’²$P“Ö:7éÙÕþ‘¥9yÚ’¢šhã9ćúž>óužyåë7=ç/~âãzúØ1þɧ?÷μò–ûGk6#É]81GÒK˜1N­ÚsºK—o·YýáÞ?Þº~ºƒro‡œt'ûínöîêí„ÛåVíÖ;ìÓŒìà>ÝÁœy;zÞntÆ;‡oW/ß®¶#C¼“¹µS½õ:úí䀞•]>óNèéßiØÚ;…G»÷Éíê¸H<¹ƒúÞMÞ¡¶+;‡ô{'ÇèVåÊ.åsŸIö½û0‹÷bù‘c\ýî9ŠÁðzn¾¾Êñ?~š“?þëg®R®o*/ëdÌ.õ¤Õk}€¨hŒˆ5ì;u„$Ïtýü¯Þ²[yÿï—Ïëg¾vA>õ³ïæ£Oä#-séÚ¸qYV>s¤ûg™_hÑ2¤œX’,à/>Ê yŒD'1^„a<ñØ©åÄ2šT‰¶¢5D¬õøèj™Ÿ]câÛ¨ÆU‡ÒgÚj$ªãÜø$3u4ÉÓ2#: P‚ZŽÖ°¯š­#3*—؇¯„n5¤›¥ÐŸƒÍ„´T‰Ö‚X‚Z¬q b-Ìö†ŒÆmFÖæíJ’Õ[×xc±j›1 šäÜkç2æMXèYžuct90»Ñæ=Å&§«žžuˆÁc¬ë"´˜hKh¢ÏLs²-*‘mU/ r•Y0À+jS¢s˜zCõ–ïâ)ròõ¹œ˜@ÛxfšP2ER'H©Ê’€CðFˆD²hè» Œbņ 5ȯÒ>t™çŽDª(´&9›­WqH¤Ê¹ª™÷^y˜ØM Ëgùá§þ*•ËK¯rÑ]‘×Ý9>²<ÃäÈý|ñBÆÁC+,ÆÃ\ñëœ-&9u•á½¥!¥ ojb“³rSÛ§ÎÓ°šë0)¥§!oBǤñ5ìè5¦±*·"Q´1BD‰Ó|Ä¥«edkºU.ë¢x”G9kûp¥îÚºJ^XçòW_Õ´›sð½Ç¿¯¯:óüèií.tñu`ñÁ»è^@Æ5Çy@m–ðÆ×Ÿ×z\ ÖèíNp|Pþ›ò,é—¾È7Ÿ»ÊòlÎl/£‰.IÐ^ôIâ퀤J1N°•ÑÔ(“̰NJÄà3«Ñ fŠÉT%·B¯dQET›H'¦ÌxSZU'µ*°1™gRµi%c$^Ökæ kz€‰ïÑûôÅø0WŠƒê}‚¨R¸ŒÒ ‡t¿öµ’” ßÁy¯yHÔçB³&}Wkƒì fòi¦‰÷V“ÄÓ패*G1NѺÁû2D"F-~†Õto†Î$!ŸŽ-´YšK©$`5°¯%C}1ïkâ"0§Xq+÷E#d+©ÜèÙúuÖëK:IçYkupú9MšäDÜMk:Ìòýk+Z!š­h/ÑÌzºIEÇ•ºÅømh¸BŠ ê¢hÇUvl„¦µ^謚ºÉ7¯W÷£gg#iæ½ÕJµ§F%Æ­‹ù&Õ`–kÇù‹}òhôÔú#ô†‡u­{‰˜”œIÏÓ“¯==Ç?‹)ý£CކŽöÈ´¨r}é¥Èâ¥HÚ°¿ë($£¢H5EIë6É,4°UF GåóÍ ÀOþ🧬 >ûÔosyíÂõkŸ¸çnî¿ë.~ï¹çøÚ‹/“åðîwÏé}÷ÍÜäÍëÌfØÌ¢Vušªƒé.¾t–×¾p®¹0êÉýc‡eìd¯Ýi»t—žƒîíúè5z‡zÕvzçvíÝíØ¿z—Þ¡·çíxZî$rEwxïèäw4ͬÆX÷cPÜ©…t;ÖÅÝXè»a@}«:¼¯ÀvmßM݉è팣ÜA·»;µ¼e——]Žó[~ÏfÛ<ðç>Ìòc÷á‹ ’ÁÓGÉ»›Ú¹ò­³RmNX~òÙl«ùÛ48zíü¯}ë5‰>`¬¡wd‘|_©ÁâdíKr廯7Ù!nÇŠ5Âë‡üWÿà)þùï¾Æ¿q™X«,dVµ„ÈUaœ)1MCep@•AiDˆˆÏ,°Ú»Õ" —4ú5:xETÅ× >X™Ä €ix$Ä”E½Ì‰îwÅÖK‚ZFaV.ëÎ\»[†“.móRï€|öؽ²ž´e¹¼&ÎFÖ’9™õ1µHe&¦…ªA±&"uM.[hCZÓí4ž§Ñ(§®1RD‰8QmÎU kuiè_IÉ#ØJø²ödêùÐ$Šè~y5)ÅРaµeˆ“ZšÈ¼i6±³liÖFEVòuY)V«*꺨8 Bå*ËdÚgF/Òtqú¬­Ì…æCm…Ò*§"Ó”[;eÒiBŒ:*"¶¡Â’( ³@™À\‘Ib©w´Ü}‹çeÀưÏwÞhЮÞ÷® "¼xö9ëྻŽÈ±ýK¼|ñk£­–ãØ±®9Òàð ò“燸ïƒwI1,)ëJ0"Š5’¶3ÄÈéýc—:Ònú€ÛÔSî@¿v±²[]@n£Wí¤·cêf›ñÚɸ¼Þ¯í˜ÞwÒÆ·«/o§÷îDÇÝÍœÜ©Ž»mÞ©$ô½? uÐÿÚµ[kû®£þaóɵåú¹S)×k6.\£wß<÷þ‰ÇH»­ë× /npùk¯ÓZêq𧸮QNã¿Ëaq}ù…: uÀجe´¶®×o€[mÊ×Û¦§…ß~}¿þ?“Ÿÿ•/ó‹ÿð)>ýå Ô“Àrf¸»khň±†m)¥ ±´´m`’¡Ó°r+S#¤aÔöÆ€SL[‰[¼$ÓWÏxÜ¡,sŒÑïíi Áb´í€¼aë -V+„ ì\±v¬ê½ƒ³Ú‘m†ÌêB2†´h†ØZ±í mE*¦Dj¢Xëy³„)µs†4©é´ÇZ ua 8TÌÔœúÆ“a” à޹QB„Ã[ø^‹ÐG]ös<“ 9›õI,ˆHˆS05Ò .i{´:ÄlÕ%E©Û¨äˆ£ö‚}”Y}‰£±‰£÷!#Æ)qbl½)LJ@07¦$QXI½¾Ö))MÄ…FŸ¸€·‚S¡,¥5xQêà©Bä½w_æ‘£å€9 ¤Á`€BŸŽºÀRYÚXæqs„¹ÌÒ’…Íìï?À¸µÎ¨µÁÅd…|æ/^ãkKÂâ‘ËôX£3èQùÚúòÙÞXf ø­ñ€€Ôx7žþòæ ®D $ÚÒƒ£ã$ѲS–c M›Dy"÷C¢ S#:†ØdvhÓÛ 4 ›IÅ )Q” ¹*ÐE9T%¬&5"Ì)´LŸ¢Ñ’JÄE´-‘¡@K-5ÊØ(ÚäPI¤º*ÌDC02Ì«aVMã07ZY;O«ÌØ7œÃ˜@«v ÓŠ¶N z´¼2_(aàYœÍùÓ<¡‹uÆ…¬ÏK‹+<¿x‰¯|‹íM.g#.æC-]qÁbË”uç饎îfÉ—ÿék»zGvZ=&刲žàŒÃˆ¡®+Æå˜Ô‘[9i 1ÒÍ›$wc…º 6*Œú‘ã<ðѤó- E¤ÿ­“k±L&^ûâÅïõ|ü‘Û?~Àôýî§·!óƒÔ®ägüÀÏï=¬=Ù“7Éë¿ó4“k²¹ÕfÅd°ÉÒ‡8ñ±nºnåés”ý1ËO#›oß´¹¦­cMóÖÅCJÊxuƒsO½8}5L7ø¨XkHódGõ+êȯ}î,¿ð÷¿ÅßúOñ»_¾À™WÖ¹{&áTÛÅ@t‘*obÿýÄ‘[ ¥3kˆ¶ WrQ‘êÀd›¢šFƒ!{ãÍ‚r-,³žìg¨³lóxI b‘Y+,´× &¡ˆ9"òÀÊUf6†t&ט©ú“¤EKÏšüŽvE-)ªÒoMà†ÄLZD¬F*0F©ê¤AÉ’æ_”©Ñ€`™ ,åjJ'œZ¾–m’,xæü˜÷ç\‹«Ö“NOå-¾.Vs:W¹Ž¶¿^àêø"S™.µ„Õ©’í‹ñ5&œ«¹¶vŠþÆŒx²vA’Wè”CbjoÝ´e8®fž`Ä£!J4F„¤±éÚ@a=¯Î ¸b ŽžºÀ©÷¾Bv\‘Ì1•®&®¹ßŠâ¢åb•3˜Y£e´C‰‹Õ8E«|RRÚš×xƒWÖÇ\Ž˜Ð¦ã ûÛž¡ cß ¤5õ7˜©g¬‘Lé·Æä¡ÇòèF-ú¦dô­¬h•¿@/,`‰Øi^G0Šà@}cü…7o­JœÆE”DÀ‰°é*J ,OZäÁP+,j“4r.õØhé˜@/ ÑI¤Åš~m‹2È"FšÜùmØûíNék‰gl`$ ?ËzÔFe¢¬t×Yõ˜÷Ž™°Þ)$p†™Jq!2ŒÉ‚ð¾:@…WÝ*/-\¥íSÚuF»h1?˜5h^aÝ”ÌQ tžÜ*‹UÂ0W²ƒov?m¨úÓ?ò±Æò»_ÿuúƒUþÔ‡~†cËwóÅošo¼ô¥©áÜtúá}‹ ÆÎ_]#‡ÛXkxíµ!1(ÎÊqMí¡ Ÿ/¼PPlŠaɹ¯_ÚÛ\ödOödÏÙ“=¹•Ôã’‹_}‰´Ûµڄ"bÍü}û霽~ÝèÒ—¿þ:­…Ÿ<1Չ媱Ïh}„qæ:L¨ƒ¯j†WûןÑîµ8tr™‡>ô ‹Ë »ªçú°âÿþâ9þò÷Uþ³_ù ¿ôžfíâ€'÷·¸+$Šv¤V¡;âò¶È ÑÈÔÉ¡˜  »´U\ÒãÅ(¨ng@–Vo‚àÂ…)ÚœR¯–xîÚ㮇M”Dj&¦Í0ö” –õ°ÀÅò8+Å16‹Eòài›‚õt–‰ÍhMÆh4b¦x\£ô‹bŸâR%¨±× · iZÑÊ Æ£Œ„ ÉuÝŽ7`¦ oåWZ抖øÄ]R§¤Ás0dIx.¿D‘”$63d KÐÆ¸q–†àADÖ´OÔšõ|™Q¶†åË7,¡1Pk†"å UÙAˆÌ/¯2»oƒà›°±­[äMÿoeÎÖ–(0J"K•Ã*ô¼ÁKÍ0­Y(r–ë‹>gÅÁåÔ³!5çxëe ¡B›¨[QkXñ¬v®ðÙγ \AÌ/Ÿ·%ýÎ5Îg—˜·ëÄ—ŽqumŽ¹Þ€°9 »6G_”sã’Dë)$cFT˜`xÌu97.WI<6:òКO7Ùמǜ †Kq³Qh£ÅF8l4Xßójšu·æÁTÙG„¡­™$5"Je•Q´¨ ª62¥­JJdmN' äswÊåÑÖÆÈ¬TH}œ©OMËN4Œ\`5«©Ey#ñ”S¯t W­SCe¡h±¯È1(µ ØD9>jq|˜“ÖÂÐÂù–g=ñôª„Å2gÁçÜ×?À‰EN¬ïã‰+Gy÷êïZŸç®bDð ‰gœ8 =1<µ°ÉýŸú 'ÿÀìõwÑíää¡{qÖ]ÏõX^8Â|o‘ÁxUÅL=¢÷9Ì>úg.^â3O?@¯›b \]­¦H2ÛxF4 ®áî©ËˆK\¶G9¶'{²'ßo€(oÍYz«$¢^ÿæß¾÷3·¹çves›2oU·Ö]Ù>ñf»ïoõûíî½Õo·KºÓä.vÑîô;˜'»mÿvcq»gßiÙß÷ýÜï}[«a¡ù ÃK-7 ÍçÚzðñc7]{å›oh5,ÙÿÈ]š/t®ÿ¾¹:ÔᵡkTµ•Q"}¡b €vç:œ~ÿúÐÔå£ËÄÙáÚ»é÷¨èÙ•‘þãß:£?÷K_Ð_øŸ¾A¹:Ö»åÈŒAæ ÃdÓ©¯­Ö¹Ñ~'ÑqæÔ j‰j*EjÒ ív¡[¼ÝÙ¡æY¡Z+Ó“ˆ1‘¨F¯Åh]'¬õg5bH×Ò¶õ<ÇõêÆ‚fRà$PZÇØeºV.ëp³§2‰¨-MF»éL±Im5íJ ɉXk*¢«Q *ÚÝL½íV¡1›mÔ“¨—D£VëÆ›`¼ª¢×:«™î/œÚŽÕ+ûU JQ ïÒ§2«CSMY+—–'цs†`]gzhi¦ NƒT£¢^Õ8…BÕ}\ÕܧZgt!?«7HE*Fož·:MµyÓo‘Í©(´¶Qk«j§©Îµ5x+”Zëš™è‚Ï4õN% …ˆª zxlézKW¢&S‚,us—4$#í$%àt5™PΦ¸dútеô2—œp­:¬‰‰Ìµ*=ùÈí Z—‰Šš­|s'›zïŒÕ¿zèþDwïU/K“P¤×ñÝn´YUQ­MMiJ5(YTä-2Q«‘1&%1ÐØ „*A‹fˆ–YK -ueÆUWëñ:Ñù2ÑïØÈzp¨¨v-¢%­Q,ª%J‚ÑÑhªh>µw‚Q­D™¢3Á¨ FUу•U¡ÕZT£i¢ëD…LáÈÆ¼&>e’x+«?tvIOn¶¹ÔñÙõKÇ.è¨]q¸ê2ãSUQö½ksNƒD5x㙯}p}A—†]ö;<¾~@O ç´ö‚åš›°/Dýä£]ý›ûˆþý_|¿þȇ–·Ý?bŒZV¥Ž‹!w-àƒ§?ÊwÏ~›ñùÿmú÷Æû‘XK–$ø´¬kEÑ”ªúó?÷ýÄGÖ3O­êÓ¿yž³#4z¢¬«iµ»`U=ªþßýc:ÇèXÛéZw´ì ý¼ Ýj;ýb':ÜvúËNuÏí wR.»l;ÛèO»é?vQ»ÐçØ¥ž·Óµº“µy= ý­’|n— µ“ëßüÛ÷~æ6÷Ü®lnSæ­ê¶Óºï$Yj»ïoõûíî½]¢Õ­úëv}Ãú{'íÞI_±ƒy²Ûöo7;MPÛMÙ7}oíëÊÜ©}Òÿî9I{mÒN[ªa)¾ô²ïÁC²üø±ë׎.mÈ…/œ¡shN¾÷ÄMÏ#¢‚ˆŠ˜(BðC!#rï#§˜[š•ÕKkòÌçŸçʹ«°óäÈë¿ËôŸ5"®Mäýö~êo^~õ_¾È3_9Ïdm@gò'Ñ; …ÍQÏJ‘Z±ªMòu­bbœJ֮ŕ "•gϯI”}3«ôÚø˜ÈF1Çbïª,̬²Y-HaZ¶%"*“Ø‘QÑ–D*ZL(z‘çïž•Í^"éÐKo}„‰*W:ûAEòº@Ñ4ŠÏ…‰vd+UÛÚÐ뇊y“¤•—’g%U™ˆ6Ý-•8¥8c@«ÉØà*#-/21*ñ`%I7ðPÑ—G˶¤fNÒ´›FIm)¹Œ‰ØëýŒ1 "Jǃ㻥¨G‚D™h½ H""µ¨9)È)éºYiÛ5Ñx=ÿA¦‰ôò=ãx}\§Þ‰…‹xQ’ ’‘€J3­Í\ég¯Ï äJ«ÊxT"pž†:¾ÌkŒ«Fœ-[³Z´¤=Y’ÁÜX e¡ê‰Ô–“Õ2—{26©ò´ž}íßì§²ôºn IDAT|hÈýG_[ªdûJ©5ˆ¹^ÿE¤‰<Ük‰5‚Ae ½¸Áÿ’·œ»™Oå•Þ9Îô^–NHXVºšI“˜ ÖˆˆÆ©é7µÝ*µ(¤2QÆyÉŒw´}*#„äX‘Êedl•ý(V‚ÔÁŠ(ä&Ê¡«ˆEiG‘rZ¯)\[E*2l<6bUÅ+ÚÉB0’"äÚ¬‘ * ’c˜ ŽïÄô³H%Žƒ›³r×êœä‹Å ‚ 1N6Z…œí¬óÍ… ¼ÚíóÊ̦|îÀEyfn…–7,ÚâÔˆC$‹B)£uGN°)‡Ž}C{(•™™Î[¾ÿe›õ3ûOåÞ»”Oó7ä©—¿Ê‰ƒ÷püÀ)†“M.­ž¿éZÖ¾I$Oq¶YªPUµ<ñð yÿ“÷Êxeíâ„PFÖŸ¿J¤í¥R˜Z¾ýë/Êú¹Ím÷+VN-’ÇŽ>J'mÿ¡Ü?v¨s܉޵®uGûÇÚÏÛЭ¶Ó/v¢Ãm§¿ìT÷¼ÀNËe—mgýi7ýÇ.Êbú»ÔóvªëídmŠãÖd4oE"²A}‹gÀíqŠ¿çùVes‹çï$ÑZ¶i+·(ëVÄ<·ú¾ŸÊ-î»Uß¼UßÞ®\½MyÛõÕ­Ú}«±¿U[o7æÛ;·¸~7eßô=édzüã§É绫âZ- õ˜•t&ç®ßÃÆë«L® P?©%i§êZé÷?sK!ø’}’eDKU]>mñ©ÈÚªC#Z޼@£½iTÝnMn}7rPäüÕ±þò?ûŽÝ}Îó<ýžÿŸ„–:u85ˆB‘aR¨u"£;µqÞÐ˼Îwæ¹N"­¤Ð¸Õ•G_x7ó3}½Ð}ž—Zçùüv!~°ÄQÚ:yù°¤?ò¬Zg9ÿòILÝFf#!ÊëbRµ*ã¦8\Þˆ£P£%°ÏÔúÆÞ¥7j“ŒÊì—÷kÔD1XQjb‚4Ê~IC5åC ¡ÆgDÇIÍz:‘^•C¦Y!GªT»ÞñLV!¢’¹@ªè(2 -E‰:F¨1š˜H­ Yu!J/-”Mƒä*ª(¥(ýÚ²e"dQ&ûÅð©6ñSŽÑ\­D”$êf‰‚´‚cyÔÕ±xJãÅ‹â¢\môÜÜ:Qò*åȸO4ªcWЪ-½:á\{W_in|Фí¢¨šÑÑ>Omñ•oØ›ÚF¡Eeiöfi‹­½ iemŠjÂ`²÷-ö£ßiÂÞx¬>Ä1Hžf:”),ŸcöhG:«-6ž­AFqD`²SLe?¬±üÌ{>ÎO=!¿ÿügus°!O]~†g®|c¿ŠG¿çíÇøKoÇǺS¿I§èžŸo÷âÿBnñ÷4>Éí®½ÝêmÆqP¿ÓˆK3å~˜F´’)ýÄiÆ©wpÏÛí­i}½iÞÍדrïôä}šø;A@ºþ :°iN.¦APß4LOc7 ÕÜwé)ûäæõNÑ#¦XáíÓæMMY·÷Ú¦œÿìsâZ–X´—g¤wxQ@ˆ…’uÛrä‰S$@Ê1ÅÖˆ´ŸãZÉ[煮DièUѨĺIk¨ øàÏœæ¯ýÊü¿ÿa>þËsÏ£ ûùzÐIÃT¨Ù—_ÚâW>ùûþ"Ÿÿ“W$ï©ø`¥8ÁÙë:)œ`EE‚" ˆÍ".%b¼áGÎbÞŽÉÊ}v˜Év¤-6&‡PŠº%eÄK!}¶)êTŠ:ç†;zæò&Ið¬Íµ$­j†‚ŸXÁH(ÞvÜþ´¨6Êá"áô$£ ¢H4B´†< ÁˆL°Šè%‹†™*“(*›"ziÙ<ÊdCÖ1a½»Á…þeùÁËÈ©rò(ƒ ü„íÎ%ÆÙ@ÎÉuÎ]^"™´92Z•Ç.ÑžÙ–­‹÷ÉW¿ún)ÆæÚõ›PŽ}dãõz!ÅFK« vO¢DDåMu÷MÞÙêø+åB,Ÿ€¨C bBDƒšU¿Q/£BT$ئâgb=•õÔ.PFPïX)S¹ìÛ.J_÷E ½“ ‚‘Ȥ‡R›(íB,{-‰’ªÈbhŠÜó(,¨!XdhƒD`ÃD驪ˆEˆû4ÇN¡%oTF¦¦0‡¡¥©ôBJKZ’ÉmYÑ>½˜a£ÈÐU¼ÚÛÆU‰<²µÊ£;«Ü;œçÞѼ<¼»(ïÚ^¨á•Î^3·ûSD$•çÅ-Ù¥/Y÷æ”·AV‰½ÑŽie-É’œzìGñÑóŸÿµ·ìÃ,Iø‘w¿ #Âgž|JÆU!÷ëH’)Üs’à|ö¾!" ¹×ÍÁy[hõ2ɺ­©ìÇRoIf[3T¾â£§?"?ùÈÓ˺oAn¾×íÇdJLë_Lãg݉íæÛècZÔäíˆß½]*Ýiÿ}JæiöÎ 4ÓîË;E@¦éïíηÜáÞ:èÞ·ÜÈÀíNÊïää`Ú“wý3Ô;èÄBîE˜¶ÏiO6ãíú;èäâ ±ÝêDDnƒØLq¿¹ïi¢ïiO{šÃ›Í Sž4x*±õÍ«lý™‹²ue¨_ûuëòèNOCnº®_y[^¹4ÐÌ ?òƒ§©G Å@g/Cr_©¤ÒHY¤Q’–ªúD|6ŒˆÍlÉñþyã9]›¬R„–Ìw6 r-F9¡Je‚λ-)œÑ­Á‡óëgYLdus—A»«‡×Çâ¼— F › (j¤£¤-Á‰º¼bÒÕ¶‹àÕ˜€ žTŒ5Z":º¥…-vvg˜ŒsévGªjˆêH¤Ä“ ÆT–âzJÑ÷ÌwÃ,0ž $™ÊJ±Ç¡pT_Ig8—nsO=#µ32= ÑŠÅ7JwûJÜO;ær¦ºGµ ’ÔÈ:0hزbŠÚ?‡øß'!Ððz¥¹ÞdýöµA´©rAºÞhß['A¢¨’(]iPŽÒyÝËjÆRʶԚ‰Èlhâ ãÔSš()‚WÑhI‰V{E‹;k²SZ ô|L‡”ŒIk‹—¼*Ö¬hèmËGï-T_<$׺•zàë¨lÙf¥7á¾9/“ÌR/ y*tUã›ÍÉëÁ3¢".¢êšj‹?ûÎ)ŠS‡D'Ä-­¬š˜`B%âÑМº}”ˆj”¦¤Ý DeÝÔDí”Ùµ^2…T¢^v*}ÍL£›2‰† •]£z¢´˜¬f[QC.ª^‘ P‹jT¡e‰(•Šöjµ¨SÃÈDÙ•¨KÁâ*Q ªdV„vmyC°MŠU;&âpº‘ŽéÔ)ã´f')!ˆâñ즪ȱѬ®Lz Â*QX¨;äÁ²•ïh•$â¾rè$©¥¶AÆ}¼Ö¬Ü¿Æ±3…œ}þ­ßÈC©Ó÷Ï$øö!=õ®l\ä¾þÿÑJ[rxá˜&6á•+/½åc’% Ç––T.¬¯+4èÖ"s½¾h½pe“‡Žî“Å)£¤]I³„­sÛºþÒöTöã±£rj锌‹¡®äKüá…¯ò…Wÿdÿ<&b¬Èꉞ&©åÊù=ª"|OÚü‹›ù!7ó¦y®ƒ²Bômœ¦ßÊ/˜Íácä'þÓd¶ÜÎO¼]¿Ó Lo×Ï;h>§Éæ™6{çí":ÅZÈfÝ)²wÛøâí¦`é¤`ÝlƒÊ”Pâ­6êípZçWoóLrPìA©HÓÀ¶Á¬ric·ƒ8oê9’ž¦ß[}üoöáTî<õnªu›=½D6›Ëõ'/~ËsjTÎ~êkjŒ‘ùV5” &ÓhK$$¸,ÑÕ÷ž³k*/½ºVÂáVØ{ñ:uÞð/µ)•õ>us]>s˜s×Ô&FTÑ'ï<ò©oÊ¿üϳzzFì¿xT>ö> iËñÁŸá+¿wžÏüê³Ä°ŸÿqgýP§ Ã‰çúµ§)Åðc?tºm¡ŽTÖ1J*¨%£¸ªT«…dø˜ˆ%’ËX[Í™ºDŒvÚ±âÚæ­zçHm¡óÝ=ªÒˆhT‡O.팩mÊN/¥=.µÓžÈ ïêV>'3Å.›íy­b"i^©Í½ ‹.}³ƒ1c£o5ˆ+£¡ 4¢ˆ1¢íö˜QÑÖªJH]-*f¿A•¿$ˆî&Ê ay¾æRFó‘™Å í‹?<þ»Å„³é–Ë:±1&£QA‰ ¡âƒõ2gtw<æ¥âyÞ·µHдÝ-Á¾$ 8Ú®ÙmJT‡(ª¨ñÍߺh º¯h¢€(ˆ—&í§½Ÿ’§@i óVò’ZC¢V‰FKtcq¨.yÇHm©U4D‘=oT,r±·Eº»(Ö÷UC-Q=ÑTúZ÷Fù¶¾·›Éåå!ÃÞ9¤½.f2£©\f~iS'š0(GV—©•Âñ™«3fàk’Öjà zßoýÖª@e&$êt_æE]t¨ bb¥6¤¡sx]ÇPB€Úªf"â“ µó$*$²k£ÞW¤2¸nƒv¢(ƒEU´6QM02ƒê«¢bƒÕ!HdGæ(uƒ°`¨ƒH°ªyWpµÕ9«´Ôˆ€Dµ*tÕˆHæEæ|®QQQö’J¯´wØK*É£¥0^‡¶ÞGJ…ÍŸüæ9²nÂÿ—ò+Ïü4ÿÕïü(ÿÄ=´úéÛšƒ%"“*òwÿÁ“üÖg_$Ìy#ì7ÈS&¹mtDÁÒV “‚¶cM  )UÌ8Ó~žû:ϲQ,³^®`ÕPV-4 ^zÝ!KsÛÄØˆøEkÈBäøÚ6í²Æ„Hâ=•$lÏÎC"´«1&*QÛ.¨%ÅkÚ“K@jI‰Æ¡bzÜØ(Z§Î3×ߣժ X< „”²IÅÚ?ƒ¿ì•X8ŽïæÔy¤šˆ0O6ãå¯o2ÔwíßÝv·}Ÿ·»5 ·ÇÝïåÚÿ–{í½º)߸™¿ø'>v¿ûÀýòŽ€ù3+¯÷㋚«úŠÔɈ X—Qleí™+ˆŽ}蔈i“".s2»Ú¿1¶›æqÆ™[ìÓ™i³qe‹Ñ`ü–M5ÿâï=Ë?ú[Ä?ú…?”ÏýÚ‹R޽º·ÏßüÕÉßøÕñÞŸº—´åÈ:NnÒÓ¬åÿú¿U~ëÓÏKÝñ35²›fŒRG£;! ’€´%KJÔ UÌH¤”3íçÉm  ¢c0žE±R™Œ ‰ˆÅ`´ÑäÐÄ`c”$4Å&yQ“úš1-Ê$“^5À >Á´+$õLbG¤AAªM€ãMB°©¨T‘XÉÒR-B´ b©EˆX¤~¥'¸±(T¼…á!OÝ¿%–/çó²ævÉ0X«¾)|A#h¤’ŠE?/÷–G)­ R æ)A‰@ìW%ÊK¢d€ ’Æœ““wÐ 3ċɣ`´áp-œ6ÚÛÖRo¤Ì›TBaR²ãJF&Ê0­hG+Ã:‘Öæ¡Ì¨mdOçúPÇâî"'ý2EgMAjR¤·a¹Hp&8q8æî½È|oÖl”öœ*#µ·Uć†ÁÝXϫ˅«Kâ²R¬¨,fM Ä8ÒhÈ4j'o}¯‰¢b5‘ÃÅD=Ä£®‘3Œ6ÈÉ\¶!óÁG%؈‘`"cWa…í ­S$8FÎK.JˆÙÕL)Uˆ‰²ë¼$jècÄ ”HS°¥ …@j‘Ú€F¡SƒF°*’#=ÚŠ¨À•\ =ß(Ø;Óã¸ÜÚ•gg7Xkˆ¢$ÑJê-*¥[¥Òò‰´‚£RŽ}9Tv96™¥R)lÍÄzÊæ’GDZqŸwî.‘F‹‚X+`I¢H+X R;¬pûB¢Ÿ82‡‹•üqÕ‘¥{ÞGj­|úËŸ#Fg–)Š‚µëkßòÍüè£ïäþ£Gøô—¿Ê…Ášü…_ü}lE`Œ!ïf²zfYÒnB÷X…}¨Öª0G.vŸIîÍß Ìe̶fp¦9°ùÁS?(!ª(³õW¹žœ-[×'ÒŸËda¥ÅÎfÁú•Ñ-íGšI3{C~éNm0wàÜ­¹[r·äà{ß6f¸‹€Ümß—­½Ò§sxöm"'‚ŸÔ|óŸ>ÉÎKk,<¶Êpg“þÄãÌÝ»üúOw^]gçÕ­ýêšàÕ^ zzG{,>´B=ªP…4OX=³L’bŒoß@›d†N¯ÍÖõmª¢ºå0_ýÚ¿þË_áïýüðñ‹|á“g9óË|âxëÿø?ûwÞ˃Z}ÛHЗ>½Ë«Oyh µ@¨ ;yÊ(³8«Š×„ÐÍp©Çj 30aÛ´í£Ùy¢òV‰&Ž T bØsLª5¶a*Š NDB•´¬q10&cœ¶qêIBƒ>Ô!!íŽñbñšböQ‚º×£PÛ—D¡®-uaISª°;éSkJ"M$‰ ìÆÀµÁ +•¥îè(^”Ãq‡Ëv-Ó%Ó€Øfù"²/È(`- xñÌ…YŽo/à[Šäxî‹îí‹ ª}ë·X”(ÝOÂr*Ì‹kRjì: y4Œl³Ú*›Ôõ”V)Å#FY™´hU Eâ¹&‚I+fÚFÞr%\ÊF³R-u:f,cúÙhíñÀ– × ×»)îÁ«à*L´ l lyÊ‹†­=åè¡öOµƒEÞdK$©pyEi'˜¼àçNO¤=¾¸˜„&ûVëÕð9áèä$&452b ¢¥ÆxmÔÿÞ$>¨F1Q0ûbYÏÆô|FoFreÊ%î#AaC칈Š42\lL Eí‹4* Ú´T µ(•4ÅÐvMdÏD¢@‚¡¦QB_®-³>!º”íÜs±³Çk½×I…Ä[’` &’ªc®n1Wµ™/Û$Þ2ŽžKÉ€—Û[œmos®½ÅÙö/µ¶X·c–&mrïØH lmÉ*GZ[’Ú’Õ–Òá]XáèÉb䮑¼Ûî¶ïñæÞr–|ëfš|¼›µiixowýÍîóg¯ŸVøð ë9`|Óæ†Þ®øŠîÇóñ¢á¦ßƒroõŒÓÎÕ4kù-÷8ú±™{`•ËŸAÅÃË»l?…©Öq?Û<^^üäSœþ©wêÊûO •„\ïùðÃl¿²öº[îÔcñUI~¨¥«s÷ìŒèÊãÇDò6±„²Öî|[\DUU¨ bH1.#úšîRŸˆP—56±·“Œ¨Fåâ³Û\|v[¾ù…«úäï—÷üø=|ð/Ÿ¡×úÐGó•ß=ÏöÕÏ~î W^Ü™æ}âôâÿÑÃüRœÚ‘¤ë5Û †ƒt£îUÈh”S8«3‡jª²­»“¾´– T Z+¤ Ö¨¨Š‰•FϨ¢F45Ü—T.…à ˆÑR3œ©Å˜ˆ5žA,¯QŒÕ(¨¢M3/Ýþ„Ñ°ÅæpAE!o•b“ íJ8³øƒnÁ#ƒ‚ÎbÎd¹F7[ú®b“ûó£|9K8î/‘4·“ØRG)7d<šjq4úíVS$¢`Pê3‚6ÂlzÃ#Ò7ן¿qÀ¯¯ócÝ(å¥M£H-J˨Ši¨^ƒ‰ sÑnÊØ•`U{“”"­t­HÈÓJJÒDb´Ì‹—È.ÍÖ‹8Þ»ý >µxžÅzAœ7Ú!Іæþu^«8‹ Í"! 꼃èÜÂ&««×è¦9bªŸmꥵ§Ìz­U[ÖöúìÌnPEÁ *‰¢û ¢šW ­²R#Ac‰âB‚‰Ѻ™F·Oº¬HPˆ¢U25Šª”4ZÆÑ°R§t½ãR^zˆÁiV‚Q Q‰†h<Qô$"4Ý{¼AÙfu QúÑYaÇÂM½ý¬ FÑJT:j´ï í`;álo‡ARâEÕªHâ IlD4‹}­~éÔxÞ©DD¨]ÐZ"uê‰&jR9Æ‘WÐ ;Ábˆ¦AÇ¢‚kêFdie q‚d†+:æžG»,ü§ù½?¸Ä3‹‹ú‘÷ý{,µËg¾øNö8±ü íe‰nÌ;ÿÓ,½ÔâsûI=6“ÊCGzÁ©…h4+êá„ÎÒ¼tó6a¸¥&F¢u”Û5åV "”‰ÛËõç>p†±ïò›ÿðIôPÿ?òàËj•Íj“ÇŽ?Š3‰ú˜è‘ì0×zù\£ÒIuéH‡áN%×/ni?N?4'ý¹T/œÛ#½­ý˜Â63…=Ÿ†LF§ð?Þ®?ÀÛ°ÝÓPíOs?ná0¥8ͳëø6Óø|2…ßqÐzëÎÏADBÓúÓ2¥;íÜÜj¾§EõöÕ-ýl7e‡ò66òApã´ýÞ®˜Enò»ƒœÝ›D2åËx|ª\§wp?}óÉÛ˜o¹ƒ5œâÓ)çêVÑA¬ øQI6Û⾿ò^1©Óñµ]†¯m1Ùpá3ÏP*bå߸ÖÈbˆ×“ëqÅË¿ýŒÄ ,<´‚¡–ÎRŸGþò£lŸ[“uMtä IDAT|¶M Q%2›98ü¸”þ‰9LšS+6ÏnÈl"{x]îJðRÁ*X0Nû‡f1­œ0.y+³äMÞðøVɈjäÙÏ_á¥/¯ñGÿô, G;òÑ¿þ?ôs÷ÓÏ8÷ä:_ûôþø“çlÃú–k)XægWégçè]¿ÊN{QŠ–h6Q4ÙÉSUji—^U u–#=Ù$R㣓±ïÐOv8i^æìÞRû/ÂPæe†+êLÑ y^0ÓàRek{†¥Åm‰Ú  ÎzÃ1Ûs=¶M_:n¬™/‘Ø%q55Ó®¤æd”8*¬ „èš` "D¢±bb#¦à½ˆ)…ÄÚí‚ ÈÞ C±Ûg~nGÔEfö ã׿ùS/úçÖÙ¾7gæªÊòÕ‚ù8àëéœþè(£cJÉÝD'¾%VMÊ š,}cƒøàËy\ÞA¢ö#¸p–Ì–7¶õm õM?¸¡KS -*¢Vb`A$õ†í$“JæÊL¯‘료£™‰h°Œ¢ €2§%kÃ6£–¡4V²:ãl'eÖÖòn›¡{}<ÐßèJžæêóH>ómdÝ×xU9th{\'œÐ GTϤ2réê£þ‡„¯îf<½•sd1²/•.HDL@±QUI}BM‰1‰:­1j@-J‰­Æ7ÔÃ!FQ£à÷±%haV±Zµè…„ ÀŒwXU¶l`NTæ¢èõà$Q˜‰PdFU¯Eè‹‘\…BTFj´@¥‹êX!ñ‰R‚æ¡Þ(¤ôÕh-*íhX­œt‚ÑÂE.vÆì&%µ ¸h$óŽ$B4Hêª0ÔJŒFú¥åj·`œÖS¯“vIkœJ^¤$jš`DEñ½A•æT¨åÍï3böÕ2‚(ÃvÐ=<éŒ#¿÷§hñΙ¶<¸Ü¦¿¹ÍSŸÿ]9|´ÃO~ì/1Xáe‹äLÂü#süðó×öäÁk‡——X×Þyæ!òÞQ¶®PÇ 9¢cq(@‹õãͤ4±¬.%Ü;,åÒ|dûÉmæÛ)?úwÉN~#þ—ÌEŽÿô!ž}˜Þ¸'c?ä\xV 3âêÙ‘Ü@:Žž‘N?á›O®3Ö7µÇNõef!ãò«¹zax ý¸óüvl LaõüîÐÁþNŒûíÜïvþÏ4Ìwâcòm¬å4©`·;(ŸÖO;ˆeêV‡ÇÊ¥>T(?ÍÜÈ·1†;ñ…o6ǯ×Ýî¶ï—ÖZêÒ;<Ãèú€W>õ4׿ržÃ¾¡µÜgþ‡‰!²øØ1lêØ~ñ׿ô*•ñÕ]&ëƒ?óšíåãë{¼øÏ¾Jïø÷ýûï¢33Ë™à ‘Ùã DãˆuhÒc¢¢>‚± ƈ†bXQ·-½Å¾6@K’@tÄ"²sy“|6%Mì~AûÛ;äªÆžsO®qîIøÚ§/ðC?w?+§g8ó‡øwÿ³wòÁŸ9ÃöÕ1¿þK_áìWÖnzQÕf˶8yè"'à ¬mç•ù“T©#/ ˆa7w$>’†He,´S$Fì0Ú’*d5tdXEÕ"µC™¥ÔMºÝ»Û®¬-ÓmQ'¾Í¤,h¥BΡԵ†^1`ºT&m´<2Oœ¤”šã¤nRw¬Ç{GÀ‘j7ŒE¢£%†HšyÊèH{‘Có;ì\mS– Y+`=¬Æ”Ïo&ÌÍ+¶ë;Ç×™trêîÑ4š#7hd€³"ˆAŒÁ–½á³²ÉLëð0J†çafœáhç FJ¢Þ<ëµ–Æq¼AK¸/ú½Ÿê• ©@¿vX ¤ h`±È±*[s=@K…NâšÈ$ŒBå<ã`q¦Ãbm„Ÿ–UÖÚ»D[‘9ö©ÓÈkäÏ܃ØK„û¶¡r JELlo.b¯ßâë"1gάs¤åÑ`HbÞÄöMÙdï·ˆJË { ‚ÀùÎyWÇYÒ@t‚ÑtŸÿ«Fh&û™â„è…—€r5ƒ ä“” ¸’5Z;1ÂH›ÂrqN4d&²Gä0MjžJ#n*œ)É"}/T(¬Ò¯…öþºÔ( Á²XY¬$\nW\ì ©MÀƦÀÜEQ°Ñ`c“z–béû”Vmdò¤¦nU\¥Øe!æ ¤jj)ö¡ ²__ÑØ÷L÷#1Àí'ýE ÝW4à!Zxô]K"Uý4W½Àý˜Ÿ03Ÿaï•™y…lPÑÌÐ~wŸù¸Èñ«=Âåy6FcÈfXúhÊŽ¹ˆV àùaE‰Ð›ÏÉZÚPM›¡sz{%z5¿pr–ôøý Oœ¦5êS_ˆ˜ËûVÞϱ—O4².r!¼ÀÖæµ Cz³K‡;ìm—¬_Ý<#1¬ïR•«û×ÝmwÛÝö½ß,ðKo3⽓HéN”>eÊß}7Ûw¢ï;¹Ç´§0ú¯|—Öû»6¯Çðüµ÷2sb—9z«}êÍ!—>÷"›_¿D±>`tiGZË}Béi/÷8ü‘û9ü¡û蘧µÐañ±c[#êA ÀC?ûdý»ç7©v Ù>»¦ ­ä)¡PBíѪlrŠ­ir$bsÃÞ…-—¶¤wl–XGÖŸ»Jµ9’¹•>ÚéB–#(‰:âÄóò¿ú3‡gpݦ ì\Ýb{m÷ÛšÐè•sO®óÌ¿¼Ä t•ñ^%K'z,ëòÀV¸øü¶ÜLKdy>ãçÿyºíUYÈìd[3ñ [}T-6 Ñ65©WÄ@4³ŸÐ$*´Hm)‹íuÝ-çØ+g1ée²¤ I= §ÒËG¨ —×Ðk%u5‡D¨R'Ušhb©ÖŒM Mg¼cT¢Ê”ÄÔXˆÕ j°„}dƒhÃvƒ@bH;J]ۆͫ!ÚÀ ÃJ»àb:ËVœpriHb,örJk¾ÐZÆ`äXY¨¯ &ÃKÖ¸¬bšêjmj]$* Rf:/·6 ¾‰%ÄË8³]Y˜Ð›âCJYÏ1Ó`Zb,ÁÂXÀbiá~°”V™‘ˆh[„–Œ ;yMik¢Y(3-ÒÀWvºÌi/mS†„Ðh[ph’3öŽkj¸äKl§¢Ö2C®‘ºš™Ó}ùºýOß{–õÕKÌøœ^•‰hÐJPO<—>ó,±2sz™|©§ÅîDºGç9õ—þT5¨\üýç)·ÆLÖ‡zÏÇ ‘ëO_¤XIµ[Йï«)Eö. ÁB/K•: ‰µQ]šÊxmÄèÚ‡ßw#_Ùye“åS t²M‘nŒE#giÏut´9 =ÓA­‘¨S‰e<çÆ WÏîò©ÿþi¾ðɳ{pNþêßýýy‚ÿú‰O½YY½qžò=Ìá‚kçWY¨Ö(•îõ5íÛ3G¤5R5µ‘A’(ÀÌØãl”à ä¢"I¨©Iµ 9m7’£ýרš,i1nɕͣZ-'²ÐÝ Ëj ÞQJ‹<«HÓJö|—嬄ˆ$µ×îhÂ$Ïe@[³¼’ˆU"iZSi*’|‘Rø–vM‘ˆ1Qc´RKBBÝœŽ§k#h¥ä’Zs†­®Ò©&ÔuÊÈ8’­„“RêçòUN‘“ó…Èl µnx¨èeÛIm¡6‰Ñbx±j¢6é|V›…ž•h,ˆÍöÑ-ƒR£r… 'ÉQÊq®U‘aDåF6`ª¢Ã²Å^´²œ±¶R€–ŠhsÚ-.Š¢‘I"tj'µ«Øht½‘ëÎë8+e¾2 ½£„æŒÚDY3Ân,uìERéà1zøðPŽNÚ¼¤®¡ uží™‡â¬Î÷²,NÓUyùüQZ§¿&>»›9~žÝ°–¯kZå„訌‘k¶âÙµ—˜í<À™CÂcWfõ;=vâU͉ÄÐCí0QQhÑ+H,¯Ø˜H“aæ‘Q+ˆ…葸8ÖÍ”‹¨°V$æêL‡F™ FJ„QR“£L¢‘*Zí¤ûAS¸„j # †±(N”hÞh‡j+‚5H¸ jU™ R*º¸¯äP]¬¬ÌÖ–ÊY.t‡z­5ÂFCê-JMCTЋŒzƒT©çµþ«{]ÞZ Ž+­ÀÊhXÏÆÒ+RÚ¥‘=2‰ÌÁ¨QÙßaа–Ùr ÅqEæ«&HÙ/cQ/ÈÀ©:½QZ¤X\tH€R" -Ä·‰¨ô³€Þ·ÍéÚPÅü&åüPÍœ—îÕ¶úíZ¶Ÿ¿H×åœ9vkZf_=DuFiv+"Qu1Œ¹zo&»r­gèZOgñÅ<1©éÆš|ã:͸ª¯ÈÙòiò|Vçß}ZêÖ"i ˜õ×tëúD6¯Mnj?f29zoŸ‚³ÏoOkó¦J›ÂžÝʾM#üv;>Oö±ß™ÊiR°¦Õy»•¶Ä­æéVýÊ>‡¾M?o?yÚ ù6úœ¶. î<ë ;ñ7o¹—ï¦`Ýmß7mý¹«¬}ã ½Ã3,Î7?ù®?yîál’Ð;×Ò%ŠtdsÛžgÜiÓL- Ò„D•Þ¤©) ™@Ï"1’3¡ ^Ëí+ÌdÛ¬V—mvGó(BیȒ’Ò䤔ôf†šQÆ„T*&®Ek\Ñê ;mzaLÇÙÑ>!8r7¡Œ-ÒÞ‰Œ¢‚:,ÑØHøaШøRl¤¤ ±!NRb ˜Úc o¤<»wŒoÎE>‹;ZÓ¾jyO½ÎÜQ.§9+q^Q QlC«Š¨rƒ–Ô6Ùë%G$ /"é &iXÛ¶¯Ï1¬ú˜Óá-%ée´!!óc„]£ô¢¡ jA4°—+{I Š°ïèWm;»ƒÚí*# †]övæ8rêÛE­ Î >ì;—®VÜ'Õ2B6×`çú€ºò8{C¦£¡ßí-öðå<£Íyž²t|‰µ×®3Ø}Gæ-Þ`—F³à7þö“¬ž™åã¿ô8£í’/þÆ9ŒÜó8l¶¹çð3LŠÖvïa¯sˆopäÒyÖž¤ÌsZ#…{-‡‰qŠïD·@*ê’»‚ûž£ “ºÍh§‹X¥îdÄuO/ÝcnR£ÄФ«ØævwÙ°sì¹6}3BD ÁÑJ&x ãI’‚˜܆E„,QVkl¨^Ï“7FˆA‰¨‡8QÄT"‰V´éÕž­íðõdžkG»tMðy΂¯ÐD9Ÿ¶8:Ó’=ª˜q$Rò†.¹y}Ò5:´^h‚*„^µ×ðù.A-Ñ;bhÒÒn™ý~ƒb´aÅÚµ–RUmœL£PÏZ6auÔ¦,{yÁU ­"ÅÎ(c‰xµ$Ò(£ ô[‘Ó­@¬á‰rx˜ó§­1ëêg}dAq`DÐàм¤sß%úxêa‚1žcžœ3ï\í©«ª’ÝÍ&›$Š‚ Á¢!LÀ€,~1àÀÿ‡íGÃaØ4d ’(‰bKMv«ÉfwU×|ëΙ7ç3ï!âóÃÎ*²ÕÝuóÞ.p÷Sžsvî!"öŽõÅ·¾µQ5Î\}Þ¦^ÉZ-Ú8  ™‡QSИèÆ@/9N:mÝÌÔ<=  U‚:9zjU¬æàÈ<&f4‚˜5 KçA‹‡S›ÑQ˜ð v–ž9ÓÜøpxJé:M ž•ºË%ÏÍ36qkuÆÇÚ2csV§]:!cXvXfÂ\Ψ1ö:†‹%qÐ]Ð#D&–®u‘ù$ifçãExÚên¿â¸ˆtë¶x]çßçI\Ÿå\]ŠIHä‘Ú\¡=f0‘Ùy½ mÀ՘ΠV¼çίßãµEäÅ›/³ºšá]…îqj…ˆËiÅboFC>p£ãx=O¬-r* (T2¨JÒò:QÃ+·pMN±ì³g·ùQù‚ Üp„ï¤ñã>Š.ÙhjÆÑÑéy€ßnk[v¯öyôpÆ£‡ógç³íÙöŸÖþ§Ç¤àžTMéiLsžÄ¬ç³R3Ú»ˆYà“*/<é~Obúó¤çæ ûòI n.zì'í¯Ÿø´vc]×¾zƒ“[G²dm›f^ky²P5)5ÛŸ\P=©yû—ÅÉ\Í¢brÿ”¯\eôܺþÉm|'cçK×ne‚ÙÃüÉÇl¼z‰í¯\Çe^ålÉòxNÑíàBɤ&!/¹N`rÿ”z¶dý•-¥ˆºkÂrÉtïTÃUz¯\oõñ«–ÿ‘…F'·÷8Ù;Óî®aËJ>x¨å¢z’¶¼È3ÖƒzùÆßÎ Ówÿcbc„àù‡_ûE¾^x^´“‰ÂIû“´¿zŸ³c)2÷™²%¡E执#r&ó+Û6‰–-°ÝÛÓ¢éó`r]žD5Y§¦®Ó½\Ry'’29„ÉusI'½µr9yjXcRæh, ™œ7\)Ô´l)90‡#!KòÖ‰mb¤ªÕ–ŠæÉòˆÔ´Eåɉ|á´zÔ›‹tuI#Ù~Pë1²Z)ó´‚WÄ«–œƒôI©¯#å’9c­9£¦à¯€­#ÛÇb‡‚´þ€TxÎ7T³ª+× ¬":±p3Õɳ*ä£JA¯`mñytHBe@ ‘²HD×°LŽGUÐÖpÊG‰#Êä|­ØgtòF³þ’¯û!³þLó¹åŽ9‘ŸâZ'pyÐáy]Ó½î]ù©¶(8¯°)B¿0ÿ?úí§Ôž¢AŸ”oö$çš'Ñž~Ò ä¢mdOЙO€ü¬öøë?¾ïù_ù °~ý%m¾¼mšì×6?Öwƒ­‘Ýø•—µreãw÷íÁwnëøÝGT“Šk¿ö’ /ôÑ?ù›¯]¶—6µùú.³ý1÷¿õ›_¸DÞ+̯Î(‡j‰U Ãr™Hf®ô—kj#Ë‚.¯–§s{øÁ±¶ŸßD+}ˆ´EÝ‹©‰†ñþ¾“«¿94[6Ý?ú¼9¼Ÿ¶ÏÃ÷ÏxøÁ¿óß½ÎösCý‡z›Ðxþæ7¶ø“ñ¿øÈ½Ü±;^aD2ª>Ö©tg<²noO½^n¥å„J˜7Y4Ž<5r€ÞhZOdždΆùXãrÍ–±'µ ŽÓ;~ªÕᄲ*,ùL1KÎË+‘ÇÊÊ)fÁQyS±¾8¥égTdTuÇBˆ²NB¥C± ¢yÔ 𳤶Büõª¯ˆI ±²º¤©=f]Ÿ¢Aƒ}Cõ­T3´Êd™Þ#z®±^“4‹L§Ôz–×É ')ó2ŒQ³ (þ²¿ÔîÅ5 âêÖ÷œ=\³ò¬àê‡rÝHéÅIž˜69)y­» ç£U…¤"‰•Æ=Ö8G•ËPk"+M`™<÷O†¶Ñ]hšEjDŽ™¹Ähˆc¥\±…u´Ö‰|gýŽ=?ßV±ò{ÌMxicÈ—²› ßyÁبtXÚå:R›°¤­‘Ré(K”.Uo­1bžÄjÓªx­4žaãØ¬k1ÇáÙ­;tSàAg®F gÒ2–ÚÃwû½óÑT¬öX}¾ggž(5˜z¾4û5zWtâFŒª)ù|[\a¼y„al_çVz˾»ü—TT*6wXyé†ÅÉNß~·ÖcøÆ+ô;™®ô3n^Þáê«/°w:#.ǼöåM;y´Ð‡?:#ýøBÕEk@~êüqœð$uŒ<‡\t…¿¾ãé‚‹Ö€pö½ˆ ¯}F]´_~ÞŸÕ>ö„÷øóÖ€ð¸÷"÷¯²ägÞÃ3#ÂgF„íF„.8˺å¤üñýÏYgwOøðÞµWþ³7X¹²JÖËÙûÁ};ßÿ±~)ûoÝc°;âú¯¾Ì`gÄûÿìvüᾎ?8`ñhÆîWnX=«ØûÞ-­^цE^øíW4½wbªKÒ(KÌÌH­Ë ‚™Ô®&Â'eàUj IDATnsçòd›(3qv0µÓ÷X»²M +!5‰ÁúÒÓà ›7¶í¬‚§®›‹¶ýIýÉÿ}‹¿õ^çÕ_ݵ翶CçàŒÑÚ]þx#ðï–}þ}o¬?Øï<ñÕqÅs‡;öÁ$gz,Ó—2š¡Èê„kD*ÍâÜ[^EY0âªÇ5æbR;ôó‰ýÒ•oñqù’ÍÏ:šN†Ôý@6ª©{p6ØæàT‹3Çr¿ÇÊÖ‚¢W³Œ}ËbM§ŽÌ;†I˜DXVÖÏ(W‚je41e%©k¸ ¾QLÞ¢¼"Éyó±–\"™ãàôeÛY{‡,”Z–]‹ÑÑíÕTe«RæžâÅ1i£2ûÑ*'ï_¦·ûß]°ɪèqÔ6pg§ K8¼â_ô ”%ó6ôú]rù¶{, (Iuƒ,˜ؼ†˜,7±üd9¨•TµÆÙ§1Q‰(GDÇ~?2-¥°ÕY¡^Ìy«SÚhëÒd‰ÚÐ A¡À‰OdÉ1´ÄLsn÷æö&L'¥íL׉ÓÍK+v¹XÕÝÃû¶¾°n/»”F÷Ê}6Ÿ››,“§±à#ÁG¦³UbrdäÖ³•â|Pâ-h™ ²D®s¨ÜM–É›ÂÕ a9ÅyÈRŒØ’Ñ\›Ã(ÑšT:o ˆÒ'ʼb¶HNÞDÖ~PÔlFO£J¶æàlÒ›ÈÊ.«M°.úÄÁÜ–H¥°.†LÖø6‹£lÅÔR¹0v’ìDg f¹ñ¨3·¼zMf–ÄŒÈZí¹Qz¼7Nûfš¹ÊÿyÇÒ7–»\–ŒÆÕöQÿˆÚEeÉ3jº6 KúUÆö¼c×…Ê,1éV›­•£*c¿[by«plȼL3šsY¶ôIc[Û’œËÏBC7:; Æ I!Éî ³xi–«H°SúÖc±é[…„{Å’h ySoæ0¢ :Nf%Ë¥™†´ú¿ç/ñF°¶(éF<,6-”‰^³Àšmù82—ÒSTÃõŸsÖõÖ,ßÞ!Ù‚ùÞ=šùÌŒJˆÙÒ1`[™FW_à7ž[³{ø¯(ç3ŽÇFLz€gF„ÏŒŸrö¾h0ô¹~BÁú¬4äOûþ"û? •ê³Rk¡T}Öµ]ôÚu´Óã>V:î"çzÜuè©ÍÇ¥ãžöZž´¯~f[ƒB/ÿÍ—Ô[ïj~¼ Ö±ÝG±ït¢ÉñÌàú7žgãæ––' -Næçûêg¦ÐS“tòñ‹£)ÃÝ‘®~õšÛ=:£œ•Ë+Òʵ ­]R)b#k¢\è팄“¬,EŒ¼ÔʹŽ0“S.“ÏÓ½SÕó–‚›v>›Î˜>šèxo¦2¢Ý_º)—$¦Ã÷ï(ï:,&-&K:k…à4?3më@tÁ6½È8ÿ±íý?Þ×~ãŠ^ýõËÚº=Ó/Ô•ü°ÐûE®ÆËPêßlœéÝÞRÏ-‡Úª¤ƒnêl1Pq}.W$ùÆ‘LÄ`˜yùÆZ%'/,"×´ýSPáKÍjAŸ¸eÕ!ë5 S}æ´1˜°õÅFô9¾3P¿X*WHZŠWÖ w«R¶bσW3‚kkQT9© ¥ä%ц-fm±8¢“ŸI®Í”8—TÖ¹VWç*—™šä`‘)æ™ì©ÂŽT?êkº?ÒZXÒ—éL­4•,zÖWP-)a‘6¥"!Cõ0’Ö‡ʲWDóšdRz(1nG]n©šõtíæònTé¥Y0–u¡Æ¼BQ\R¤5Äk i½qšu¢ŠRyô çþA™ÉbÒQÑhaN}£Ò*p¿3eo1P'VÇ<ìœé¬˜ëÕ“«:ž0¸–t2_‚-sZÛÈõgGIåá›—˜¯œh=åœÖ¦nÞh­HšÏúÚ]Y¨‚’’ú~©ðšwr½†ýù|ÂañHÏwM[i¤dŽy÷X“âT«³ŽzõPÄZN¯Ž²ÚáëFH‹dI)µëµ¡ÆA¢r‘ûgÔ2ùªÃ¨ Z¯ƒÞ)jVBÅ ÎubŽ>¦Z(&§­:g&#ÃÉáäœÑi i@¹Œ&9íFÉ…¤¹I£èô(DÒnô¸dÚ­ ôáðL“P+‹Ž"YrjHº±Ì4ï/9íÀÃA­Å·bß?aõ¼¦lw¨AÓ§CN­¨{½S ¸9ÛbîkÍ|I·Éti™i=S—ÈJG¿òòHãNähdåæÕÁ©8—m®\Tr&©­Ñ—$Èe¤,z–2äQ5bœ%½7(µthµiëgpP¹¶H½H­ŒA?&.—A½Æ“%i£ñ’™ªŽçÿl¡>˜k°S¨»‘ivgL]Ìåúâ0jeãªî¤-mÖSu£T¯²¬;rsi4Ýà^úˆïTÿFµ5„î@+/Üf3¾ÿaÖhõûctè½¼«At:m& âøPéô@ùÖ¦Ö_zýö¨æË‹ÎiOCÁú,Ë“|þy0Öã°Ö_éüñ”ØJO@Áz\ÿ=î~¸`ê1ôiðÛEÛ… ü­ `Á‹`³‹ô9¸'.@åzÍëg^ÃÏòù¬Úã<<.Jyú¬”áã$Ü>ë/rmûþ¢rqŸ•IxœìÚE2ºàJËEÒÌOrßi«Ç]÷gQ±ìÒë;ÜøúuBTN+ÊIù}¹8™srë@Î;†;+¶þâ&ƒœY¬šÏtü´d²X³þâªe=QŒ2®ŽpJVM,ÇÝõžhbKgø\iÍ’!ï ÏD^˜ë 9˜§<›!‰lÐÓÙí#+Çsm¾¾k±j‹‡u:Q'“Þ=ƒn—Ë_ —„–ÆGô²B¬^ZevQdÕÚô"ÏàµÏô¸¤XÉùÆ?¼É—z×?œðâ¤Â÷"»g+ú^µ¡K¼µ~ÆÖ—t^0úõˆæt7–¸KE*G’ˆ¡µæîÔMk¿Q8£6ù­!C–è» ÇiWæ!Ÿ©CŸ0±,L7¾|`«/ŒutgÅNô´Ò›Z§(!z9d1—à 37‡TÑ53/5)²k®tò>8Rr8¥{‚xߨt¹Í¢ÜT¯slɆȳ†jWeFÚl/œPô©†"K¦ úDb´°¾IÂÉ$aÖ´H4E ‹5ëþ6>¼ñed‡(í![‘ûÄ5ÙéÁլ˵—ö DéÅ2$MA=¼T¿žÅ#Yrt\Ë «¸Ú÷*¢7Õ'ж”Q‡Dƒ@¢K¶¬úírvoÎáld[t4_}ÄÝÞ©õ,ç›G¯¬Òƒá±Mæh;Ëmf¶[]cz¶Âòl¨ÎÎCÎzV”…¦Ù™Õfä©ààp“µNÃf¯&KCMÍ÷¦‡MäËźÖ]Ǭ˜ëûå™mg‰—ÜS­³Þ‰MòÖ–«tª GÙ.ƒ \lä—ÁA@1&‹Øy –BR8Ì+ʬ&«3KM®Ý*³Ú‰ÕW¢—¼¥äTÈl߉Õ$r—“5æðÎdÈÍËd֨ͷ<ŸÄØ>9†&ŽeŒL†ºÑÙå¦Ãa·â~oŠoM%µT2EXŽÃµ)›óžêÌsœæ–ýow”íèýÆUËÕa`=E5<ìžÙ4+Ù]®h–†‰E×Iî, *¤±T!QfÉŽúgš:$yÉzæé'OŸL c©d2µ¡jrD欚u‹ •7=(‹®5-\eçÏDíà°H ’7CÊÌ!œ‚ÁjíØ®=ë£q^ïMóUd°S`=ÇìA©y“³íþón°q—Iê1lf„²K¶|Yß­þØþ¸ü7t5лͭæsdä»— £Œêá‹G'Ü]Z>Hã®ä=ç(C®³“S¿û‹½Wßdz¸Ô­?y‡“]`.ç‚ôž‹2ô„Ÿ?Œõ$¬ÏmþxJlõ¸ìÊO“Í}ç"ÿûY}h\ÌCäi2 kýœÇâç=¦.@ÁzÜór¡qù,ò,òמI1iº?S¬£ÖŸ[ãÒ›—È»™êEM5«~윖Œã[GœÜ>ÒèÚº.ù*ÝÕžbÙ°/°d?yç¹”õ››ì¼¾-”æq>IzôÇJ‚þåM¥$Ñ.¹B2)Ù§+Û8×"í$¥*éáŸÝVè:õÖû4ËZÙJ ·5᥄ÜɘN&íß>®.}í¦\”BãtëÛoi~rƵ7o(ÅDS%åýŽh"GwiêøW²‚už,ÒÇïª7̵úmÕ®§ÁC§7ÏNôâÉ&»Ç×ô»ƒ;úážþ—é·jotuùƒuuo'…—–RÇpU«~e!É£ˆ&T8%s¸e†¢ZªŠgnƒíîÜxªzá5³ -9åÄkë¥1»/ëðîˆã‡C »Su³%ÔR ¢ÎßU±ÞѽYÔü~ɢɸ^4ú­ÍU½å^P¿)Õ¯æêÄuíÍPþU”êûÅw˜5cåÃ5:—.ÉÕMïÜ–?©~´Û¡ß|…Õuó\#ß{ÉÞ¡ü¥d+ëògsÒ¬ääðôYäYäYä?± ˆ»oΞ‚ëö¤üEû nÛEÏÿYǺHˆ=æÚí îåIï÷ç9ßçŵ§¸ÆÇq\æ6=œòÞ¿xß>ú£IMäúׯñÆß{ƒõçÖ~êØ›îOxëÿúS~ø~ÕkköÚß}“ÞFÿ§÷ݹëÖÑ{ì¿}dþ| PŽYfµ5º£!üþ™ìŸZ6,ÉE,EˆÉTG¨¬®ZÝK3K&,Ï-Ö%ÃÖoîëhò¡„œHɬ©"rÂe¾•é•pÎYµ¨X½(9½{`eÝØús;¬¬ ž„j<Õ ~áê%{ÝoòÿømbÉþ/]ááîÔé2Óú&ÓebÙ·ßÕ‰ýÏi¿_Ú¿œÝá{ÿí;vëÕ¥ýó¡É êŸ×ÃTžÚ‰i‘Ù’@VG|y ¾Á»h•u¸\ÜáZþ1››øŽ·`Ñ:Ã’º3àƒ;¯Ú¿ûý¯±ï²}áwîãWÄ;»¶œzqj!5T䜥G¶I£œÕÉ©å©Ä¹D3,VŒv1:áœYCFÄcçKë–Dá'¬÷oñàðËì¾Næ–Ä(Ìy YtÎÜBôNÜÃ!RnÃ/î|ÅxRØì¬ÀY"¸úÓö=¯þñ-E°>¦ÜV@wÁ½ß"½h¬_9°A÷ÔÇ9-U –1£ŒÁF®¡§kÝY†x.ô+ΕSm^˜mÌ;Œ–™+eF^{›ãÈi û¢‚uÌÙ‚ÄF“×maI+ök&+‘'Ï¥ÉÕq—?\1Ëdž3VÓÀ†W'¶‡sÂú1;®Ïš/0Eúƒ©-zV«±dŽQèòr?ã,•üùüŒoŸÎì}pÄ¢‘ÎÕиoµÙºuËŒä ñFR‚Ô˜¯Zé¼Ì R«L…Lí~€¢(ÔP»†FÆFc°ZØvrsÔÑÙZ#6ëÀ¬;±IgŠKž¥Á¬Õ\3/ã4y†Ô¤×‚IyXÔL|âaÞðaQóg½’?ëÍÙËœAIxÐIXë‡Hááµ5o_~±G¢1XøÌ¼¹”ð2ò¸•Þá0îóbö*%%û`.˜F#BîálN3.­sÒàòŒôË7°²aáKŸ±?>f¼÷¢èlÉ‚·7¿ö7_îÂØÅyá3÷¸¹ßž`~³'˜í‚síE1ÙÏú¿ÏuþxJ\cO‰«‡;w¿ö„ýòyà.ãñµ>þ×ïB@ýÝQ+šŸ"¤ˆ,µÉƒÄt»P0º¾¡b½GjL2‡šK ®×¥™×*ï’{˜KÍ瑵›—È:9™«»[|ô¸üêß9 %cpuCÓà 'Žžv|üÔßô—~þ•ç®ó?üÖßÔÞ:¥—Áæ/w™­äŒ&6š)Ç‹+/7ÙX¿Ç×;z-V|+åÚ»Qröõ[ß^e3“جqµÃ') b=’B0'¬ë "WEÌ9¥äØÎršÖùhö&.‰Â–Ê{®ˆŒW´wg›£ý-ÅÔ¥*Ëe.OCxYW4xJ êØ#/#M¤n¢©rfªf=r*œNFL¡ÍÆœ;3·Ü6Ï ³Oîg|üè›x"£Þ=’2 G4O´Lý³[¯Xörò3¯Î<¨ë &zðžÊ: /qu£ÖzÚ©édø¬bÍNñÙÇH_Bqø²>ØÂ=lÔ§Yl”*¶Kj'N”±l2ú¾ÖÐ7œ…ÄqÞP˜“ž¡„“ã¬Ópš•rj¢ç­|Á¢¨HæÈÌéÀEú)ro¹Â·«œ­ïéªÕhÙ£î&Uý1z†iE_<¾‚UsN‹¾;ä‡ìñ••uVÇWÔ[Œ¸­±>8êÐorv2b}ã|ä´iÈñ8£ØÃ›—§Ë£Xóƒ‡}¶þÓÞ#þÅñD+ý’/ ÑZQ1u ä.Fz /§yCr„ºÁWçYGÑ’’•K­ÒCHxZÞ&«¹¼Ò¸ÄFHM`Ï'‚ICAý¹Lt"Ô…¤^H¬š'¥Ö¤/—é ¢kÃÔ%â ¨ò‰…9VLz"=DÇ×–™Èo¯*&à/3q°qF–E~õÎ.÷‡K&›ÒÆ?>eú‡·Ùøo¾B±3¤_vè¦BorЙrc¾N^‹G)“¢Aje£g!2 IkÍ$;c"ó¬}g«LÚ³ÈgE-“áiïiT@42=Μ"!‹ÚŽñ0«YbxÄÀ/.L}Cœkëmdí‹¥œ†ÄÂ'ù$F1Snbì"ó^âÏ>^ò£–zq7ð⊨k§î—46Ðêú›ä©aTÎ5h†||RðOgÿŒ-¿Ãì&?ª¾K6ew\ÂÆ‹&jöáò) ?žËurÒßz•à †¡P–"÷ßz‹žð_üÞŒÿú¿zŸKëŽ?èƒÿp›³ã3êªþÌ9ï…/oóæo^Çœ>šëIqÂ°ÈØè$Cõ¹:ÛSà}NøIO‰›ž§<-ÐSâ»'•Q¾ÈwüœØòipߓܣ>‡ó=ÿ*¥xy€< @þÚáÎWû$¨—Í'ˆNïžqøá!ƒ>/l0Ø(+“½±þãXzq2çá÷ï)ÜøåçU :œ||„%£vtõë/PÏJm¼´Ãõo¾LÖÍëøéUYJ’ŨÇìÁ˜ñýc­¿²ÕšÔÅ6[ÑJ ì$Ãgõ¼Òøþ1ù #ïÄšêdÂt†-Ït]bm{ ¿s…Àú›WQ•Æ­?þ!ƒµ[Ïmëlÿ—åô6†õ;ì¿ÿà/Ó°>— $+Ú˜j<_ð•ëÏëï~ñ›\Î6XìÌ™>¿€é7÷Y/ö¸3~‘ý³«Ì«¾®žØi¢þé^¢9Vw…ͼ¶½°^"$Iµk]“3Ô©!Mî0/¹2ADÑÂ(|É‘mqºXÇ5I=7#wòR‹i®D€^AeL6q£¤îhŽK°ô—Á‹´ÌD/â]¢®:ŠUŽ'tžAJæÚAô†g¥û€Ì/¸}ð ¼jVzÏ÷q$¤ØdheI¼>¦>ZQ}¸JÞ¯ YT¹Ì°(ÌL®ý¦iA³¼š^€UX-Éü ù¯Aº \Ó€&XŸewƒª³ÃÆÕ©òbA%QfÖúî…¨—pÀÒýä¥äÊ‘2g%û9Þ¡°O"÷­ÓõLhc¥ tËŒGxBˆzw1c­pôGµ°D•Õ8uôÂtTóƒlÂíNMSÖ¼ž®pÜ4ÊU0Ù| »~ß¼z­Y×›°Ö©Y&È$2½å:’¤0çöaÁfyÛ¸Ëûc´µ>áµé¥¸ÖeÞ™]I¹"_—8ïñ–“Ï¡çêÕ–A«5–ôF†ã´S1)Jšä90±Z{ˆžyÞ L= Id:ð°™b¬$O4Õ÷ŸàÁE:ˆÑo~X¯<5¦¥7Ö’£gŽ&S•Áƒî\YôäуIG«ƒ/èV9·®ÌؽÛUù¿€»>`ø[Ï‘¥œ~,8Ë—ºß;%:£ÓŒ†ãNI–<Ã2gé:×ÖS›‹‚nT™4É#“¢¦Ó8m. zµ§;óœF0s­± E#BdÐeæ8ñ É`§l½G’ƒµ¦à4«)]ÄYK¯ÄÀ$< ¼IÎßè8Döòši2ÖÖ;“M&‹†Îq%^¿Œ½¼C?dŒòBÓãcöß})C¾öÛž7n>¢NY,®êÆ+¿Å<òýÜúËSŧs™œxþÍ-ž{c‹½[g|ôýGXz" ­ur~åÚ;ý.û³…ͧ*x ú¹^¸¶Jžy¦óêYò,y€< @ž ÿ @ÌŒ+_¼Ìµ_¸B½ Žj^+Víê^,#Ç·N˜ÌØziS—¿|$-N4ÕOÈÔêäã#R2]úâ:+Ž>8 »ÞÓï—Y½±®þö Õ¬I.øsâak^g)AJ¬^ßdq<×tÿ”•««È{LÉ}ZÈŒ¤„\bq4ÑdÿŒþÎHÞ{Ddþ蔃wÙxóª†]üxJS6ºóΣvÙxå2®vTGsî|÷-ê²fãÚ¦Š^ÁÉÃú+òEÆÉ“Åç2.Ón±Îï~ã5†ë?Úó­w?Ô󻫬»¤y—fcA¹aÒáÊò€•ü”ÛÇ/óÁÞ:8¹Ê•Pëhåwû9þ7KêNÒµ÷{£„©f"€¼I(Aêzá@ó$§DÂ3pcV³#Nl‹³j].%F½Súý©\Ç ŒreI£œ&tÕø.ý͉:ƒÙ,–‰²(º%]W)&Ý™©©rª¦KPM¦C2s$Ž„?wF09’eŒºÈýœ»‡¿ŒH ;ûœƒ]%9²Oµ¥£N‰,oäœkG­8'§Ô"d3p^ΌƬb!} ŰQ<ôU¬ÿ#Ê~ ¬¶YëUäKJïˆyCÏ7x%™kÑÑFH&žÍ$2u€Æ¹y¹Øs‘°ð‰¦‘zQ牞ƒèÞ ×z\a™Ã‘)EF™8ê$yzi…?à!ï6‰‰-Ⱥb}w&Í=E5Ô£´d­SRúšeY0ì-ˆ]o”Ë.o¿ý×vNžÐ;â`.òñ ¶6N—AÏ­Íùòº)w ÑehKëûå@°ßº»‡*¡„ÈZUë”’’ ¢Ú ÷<9ÉKÊÐ’gY®V9sAÆÀ%Íb†¢çj”޼Q˜(”ôÈ À“…KLÍk tZPVÇ@¦ÊÄFtÜ Q=ÄJr¬ÆÀ0eº½2g*ušV½þd8Ót°àGë¼t¸ÆÛ»g( ÿï¦ß¾ÇÚï½I¾³ÂpQÐxo¸¯E¨0o,\ÃYQ‘ÇÀê¢ ‹b–G‚Zá$CIdÉÑ«êgć{òÞQœÕ'¥ì7ob—×YUFéî»ïqpoŸµ×.ñÕ_)YË9or{ïe¥f…åe_ IDATá1ßýî»?5Ù¾¾Âëß¼Æá½1oÿѽÖÇäü÷•­žŠ~N]6Ÿ¬5ýÄœô«×væoÝ}Äñ¢úô·~/çK¯lk}µË£ãÓYý,y€< @.xOŽgÛ³í¯i«¦ïýÁûì½µÏ`kÀ+ãe^ûWØ}}Ÿ{êeÍÞÛû¼ÿ/?àþŸÞçÚ/^åKÿM¶_ÞúÉè9xŽÞyÄÑG\ùê ÖŸßdº?áÞ·?"tsVŸßdq<¡YÖHΩ ´ŒÌ —‰þæ½ïÞcï{wQv®ðë<Ê È;(ËÀAª*:«9;¯ïâ½°ØÒ$å„ÏC»R[ÇÌ~ê|Ю(¦&’÷:lܸÌütÁáíC:ƒ‚þ¨ÛÞK7çò‹—>·¶v¿¶û¾™ý"ÿè×ÿñ¿ü 6Ö<ßýèÛôô1«Èß^c~cÁ­W‡ÜΟc«ûˆ×·þ”Á{,ô/5ü÷»G\º;çÁ÷ÅÙNÃ[_žR5-FÁpIÄ´ð”¹'Ô_§–ŠU8‚2_³L=6Â/öß!v<'Í&‡“mº~Î¥Ñ=67ék:Ìùc¼ÕLÇCš£ÉkÄaZEE¤c TžÕ„n‰ * Ép.a@”'ÊãRÂ¥HTFc]¶WÞåòú÷xtöe9 cŽ'Œè=ÙÝ.»9œÓRRNEÑ­Îíj8çÝÿÅ+Ô5‰T{ʘA½±OksN×HÏ¡Ê 3PúôH$kMO‰Iˆ¼×­H@n¢a2°D”è×9Ý:c`Ž<4ÄÖ'ƒ—çâ¹Eͱ9”=¢‹ôò%WºÆ~Yðƒ£Ó²ÓzH„ÈY^ñ(À¸Ó›,©ó¿bô‡ÜytL§8Ã÷jÞ{n†ŒÉl“Ñs­3eÞ>³pÊ8Œ¹´v@ÆG|eÐãìl°™‰"‹”!¶€5::•K@ÊUñå âÇ.™wAã‡ûìݺËäèw欮¼êxåÜ]«‚cg÷ÛÛ”Q²ÐJ7®ßÿ‡ç ŸßÐú¥>7¿»cß=øà$Ö/÷õâOœãxg­ïlR̪:®¶2>wj™a^é`Zpue6‡z™.Ÿ[`p”óÞÝÕ<ñYlx¯* =ÎùýP]ü^lxwlOªÎùaØäðÚÞga;ìï§µá}¶èq×î#mxß—`=ý+<›míÓRV£×ôîY>÷4âÓPŠz‚‹û´6s¿WÞ§Dz†Ç[¸}ð·šNµwsÑîH΋åËËZ»ºJk¹% &a0¸;ÐÁíí•¶Î}þœÚË-öoîS—µ|ä9ÿÉ ê-v±2Ð^íÐZïhçÝmòénìà¼'n¥j¯u°°¹]¼>hm7CNj­vÕ[ï2º³«¤›*éd“À$“ˆç ÈÔ•¬®ÁL’“ó¤dñÅ î0º¹ÃꙎÕê]\“—”¸„Ñî!›oÝ¢Ñmèì+çî³{gWË—O'å`¤ãÁè£Æž¸g>xÿÜ©®þ­_¼Bâ{oÁxÔŵt¥_¨Iíö¶Öö´×ÒÎ P¯OTn®Rš¬G»Z\Ú#9=Vˆk®iÌöø­i¦æ²(›ÆÂ(RVzàÂÜ´Œ^µ0¨^Ô#‹gàæ`})ÙÕÌšÙ"3kèðp‰:÷ŠÒJ!óX$uZ#>Wº0¦N¼v÷N);ªi&cŽ“¶Æ># %Y˜IY °Dù¸-LÄ*ä©çÅG&/§ ‡á,(È+(’³R‰›rwô9ŽÝËÉ]y*ÕÉ$*‹UV‰šÑ¯Z5e©žò(ø… “D8©L"5‹±zñ¶ˆwE¸&…©ÄßAîM‘cÈEú­#¥©Jç”ÇFYGLB¤†ËEDÛ#“š829 ãšÍ1y\!“îcâÁ¤fpl¦A…"ž$ìxϾ«iX¢³UÌŽj C– µSŽv[ò}ͨiÇ©ÎWM†±{<âroAuáÈwcuWŒ×ý¶V‰h•½uÐÕ©¥fÁp@Ë;d‘JŸK:ªöë>/ºuÒ²¥vcŠùBÍÉ’‚Ÿ1IGj–Køº–ùR†/!x “Í rˆˆŒƒæˆ†ELÌ‘V^Yqäçy/#gÕ1m3 ‡dÒŠŒ[˜ó´N‚(+s˜“œ‰y\¥6lžnš1:±ö–JO¯ÎxØ™é ™Ñ,cI¥ÞˆWvôÜþ2·f:nætÿù6ñ¥uþø%âÜ+q)›GÅS|p2‰Ns渡Q\ë •SÊÈj¯N¼‘GAÁµ3’ÚÑN£v.L´Ç™‚‰Âô}*)››n¨ö¦¬öZÇ~ÞÓâ$§Ý¬T!T(0›[+ró€ú“2äý’ÃNül^ HÌ>çÝ)fÂÚ Ñƒ¡–\¢Ž‹Hï¼}ŸíTžj3ÎÅ»÷zpÿXWãWTYÎoEo¨µt~÷˜Îàˆ•®l0i¤êíOÕõ§Î«\ñšmí³÷Þ=ÆÇC¹º;{–Óç*®®?!í6ØÙ?£X%~ëôÚKŒèÑæm5; /~á´ŠYÅ{ßÚTUÎ#Ó×.÷yá‹gt¸5âÍzWÅ´úйÿ¥•©¦g:̪šoÜÛ‘ôÙW6hf1ß~sS“iù¤sôãìúûlJ Ö3Í<ï“J ž+> ¶ynzšÏó˜kú$6ÁzŒäêYlxyB þ´×BÏxÍžÅbùƒä¿ù èÃ*ËÇƈ/ù0DQµ}“òaA>ÿÏc~’sùaÇaQ¥Û03Æ€ˆpy\û£b@>¬"×yÿq« OÍ™™¦ƒ);ïì2ÞŸ˜‹¼–.-Ùêó«ê®wÍEÒhgD1*8¸3°ÙጥËKZº´¨ª¨8|tÈá£CO/©ÙjˆiPk©M{­£ƒ{„²æèÞ¾ö®oZ(kÅ„´×™Ù¼ÙRš'F“DÚˆÔî%–HPV'Ú~g8aN’s‘)a“—Šã‰&‡¹úW7l´u,Û=Òò™ŽL¹ý­û,\\¥yº‡‘Žïï²ýÎ9ó²ÐR£“)ne4—ºx3 0Ø=úqûÁÄwûˆkó×n6«9½Ñæå?Ô¢=ˆoU=Û¯[t’.]x“••ă”¡ëhx6X³.4¼F•ëçÇò­ÊöÏ«i‹ú\´­¿¼ÙÄ·#¢KÆÈ±v4o—u¥ˆ¼™"ÓLNQm–TA&¬ö^ªÁJˆ|¥IÙV¦©­$[rÎ4¤KNC£Y‡rœXb¹C§Š“’´;Áù`³a‡zœh‰}U‰ƒJ¥&®IÀ)ŽKóqE(bYí-uódäBüº°OKVµî+jÇZhŒ´æ8™ÛÌVÁ«Ä[æ*uj¯à ajHÄΙ9iì EΩWdv72Mæý-6Ái¼%o‘)—)ëË7·X7Ù!ÒÔ$«›ÄmÓd¿mYŸIQêAcÏ’µBÆÛÑž–{M+âcí׬W‹”«û¶œåêyo¶¸G"£´ % døp"ªéU}]È/Ê!B?ŽÑG`ðÇÍG݇öä‡ׇßÅéÏ’„þ¤”ÓÓ„ÚS€×g¥ ÷£~ðÿ4á“ÐrOK‡>í1ü(“ПE:öرžLØygGq“4Sz§z¬<·Bk©%€áÖ£GÇÜ9ÐÆ+váÇÎÉEží÷¶Ù¾±E>ÊI ±‹Ô[îZ«ßÒhoD1-¬.j·÷tðÞ6u^Y÷T¨‘`!;‰´>qO0ÙbeE"“Åœ0‰bÌ ç<Âc¡V#¡b”ÛdÓ¿ºÁxçXÓ{û¶¸Ö&Ÿ”lOYºvŽæJ¨pÌöGl¾y“º¬ÅÞÎòÃ#§ôN/µéxk`E>of<÷ŸüQ6~þÇÉ·ŽTlý®k󹟺Èùßÿ .\êðú7îS´ ”UÐ×¾ùˆånÌÅV M–Ðdȸî³S´°ê€ÓkûDµÑ¼ÙÖQ§Áî§ zÛ%Ã7Î3±&­WfL_ZáááK¬¸=úã}}Ú"éz|N ¥•3@Q˜+Ò /àYÎuýUÉbÁĨëµeÑ`ª…lß,rš„¶•q¢ÒRÂÐUµœVºTE™‚‰no@ÜŸÊÉ,ÍKµGS’¢¢TD^¥ªå‘¨Ë˜PGøQÍû4Â<åÙa’ÀYÀ‡ŠÚ'y:ñ.Ýx›Ûå§(h²áoQãÌ1«ð.(òuí)ÉdÎÙ÷§_ž\ ­rÄBs"‡êOÌ—¦í›"|Â'¡óë4–g´â@G§óËY™§B4\­\ÁFI N)¢¡¹æÜ4ˆIëˆ{q¡™ ÁžŒ´Žˆ‚تcõ“™-5Ç–cmM;,& ;ßÈ•¯Þ!j+†5fÎn>RïÕN“ˆ‡öãÍÓ,©[‹j—žª³äPgëÃí5öó„~ï˜a‰D,ÏÒì qÙ¤JÙˆSõǬ Òqth>žâB—a¶­îØhOT8áë€/l¾¸yúy°¹\Ë„Cò'®NÝkŒé‡˜(ÏhOÕ ÞlEFZÅáè*X-SO°¯¹\­ÓG¢@‰cjbL‘Ε9•cß׬Obb¡v,”1›í)[ÙT2²" àk~ìÑ2í"楑,†Ökc&¿vöO] ¾´ fž(ánk_#_àqÆBBô?ß–û›w8ZòJ •¦È±ÞᓈdÈîçjTub¹§2qŠENedfÕIÜ‘“pÏó?éT1Î;Jqå4È*ÆQP%ÐIŸG$)qs¯]›çkž ï¯yØû UTÞš¤8BìaRbßÜRñß}ÇÝ„ðr÷™ö´V jÙ»oqïþ˜W²W8`íe“[\áò[79wóžŽ:uYE4jÃ"Ï…„ùX°°º¬N³ý=ú—ŸÃ-_ÐRg‡—ÏÜ¥¨cn_b´¿®ºÈ¸ò‰Áó¯þ¦“.Ø¢ó¼Ã%oÿ£Ûš r^\êòÜJ‡¥Õ\kÚ{ßÙÔþ£Ÿ;I¬k«}bïLγÜÊô›v¸<¶Õ6¯\Yæp\ëÎ^i•D(˧™—?j®ýýLBRý³$¡?Ëÿ= š$ô'‘·ÙÓà’g<Ï'UøØïÃ?­Tþiï­k)ÐcÚ ~è¾>–`},Áú—.Áú¡ûÔ|ùíàΆ[CŠI¡(X<ß×ÒÅEºkùÈé„ ¡.kõÏ÷9÷Ù³ÊÇ3¾ñ­w7‘“$G½¯õËëøØ3x4@•WÞݧš•r‘Sc©9ÿ¥…¹ÔÊ'—eºÿÍ»Úzý!3}%‰—ÍN\O"ÁÉŠþqš$£æLŽrú/¬+ßsç×oÐYlhi½­*HÉé5µW{²ã’v¯ÇdpÌhw ¥³K,Ÿ_áÁë÷„÷,_^Çf¥îl3Ìû\kíç>«Þ®0~û‘Šã1ý‡ÿî—ô‹?÷I}å'õõoßÕ#Í›|ã·¶ù÷6¹¸ršÓYWñÑ¡FõŠ¡«3‹·ÕïjzØ'/[l8Š4bõf¡ãÃU† }-^Þ%YÒÔŒ/NôÖ¦ñ-k²pÖ´PzÖŽ"LˆÒÉ;H"#wsD••ANFÈ„yá&5‘«¡áT䪌fx&ÛŠó+£Ë ™êaü€%µ”–=M²Gtfmeus•œLQäjÀÏ×ÞÏêR¨$yÃ9Hj¯*®§3Z!ƪˆ¬öš:À„“1 ^ÎÄFä6è@QñÍ¡öm®ÏŠAqp´ü\¹ï‚RKó8y­—‰ðŽ›½Šjϰ5Sä‚^Ú]ॡ¶{ýWõ×n¼ÑþÉóD>ÑBÝæ0™éac€aø8B¦rÿãMòáË«rgZrõ¼oÃá”N ~ý˜ðKw4ý_Þab%ÕWÖi<,T}{GåCʇÊoáVÚ´âDI™iNù\R¦¤ò¢†Ã´ÒjÕ «# |IŒä…âyáqbô+Ua^Ǽ¢yó‡Nq˜™ä„5c…{Ç 뺪»G¬žîrõO}J7³UýÓ:ѹÅ¥75jÏ`wÄñASçtN·›¯õèMtå­zóBŸ7^Ø =­8¿sÎ+8)®Œb¹§ø3/(ÉbŽÞ¹Ag©¯•Ë/ÈRã…³78¿º­ýà ½qý‹!V»®ÙX»¥´½Cuø‚“³ìMwÔwMÖ¬«3–[±–_Y‘N5øÞ7î‘Þ-õ…³gÀ¡ƒéìæ±,ò¼ºÚW·aÎÑõ‘Þ;8ææà˜4ò\:×W'v:ÿÒ5~êOý Ÿï·d» ¦¥ÙǬ%XK°žR‚õ,«ç<ëi*¶ß«ïÓlžàæùQUù<å~ž¸z|†êùio.=Ãw?K#Ùï4†ù0×àÞ€áöP夠ÙoÐYï²|e™þ¹>ÓÞ=òaN{¥¥Ås}u6:šÏ´ýî{wvUÕk—Ö0xtðÁ®†›Gì¾õˆ´›Ñ9½ Pä<Å8'ÔöFŸÑîXt:—W°¼By)ÊRòÑÉÁ†V óã\ãÃ\K×N3~tÈî÷hùL—Þr“£ƒ¡Õ¡½ÑG¹)3înêðÑuÔYî¨Ýoã I#S˜ îïi|<PçÓW©VWiò, /¯3½±C¾u$'ô_ü¥~ñÏ2Ù‰qý>ßyc“×¾¾Iã•5­ÿûŸaág.â>½ÌöWoñæÃ;:ÿò ´ÖzøÁ£òøîPÞûÕ7ÄÚ'ÎŽã°@ÿÒ —æEªÈ¨3õ;0ÉÑÑ4ÁzÍù$^ŸH²9¦;C²¥¾aU ùÑ„áwo²üâY«I˜ÂIˆÕpÈø`Äé—Ïðî×ÞÃ% K§Y¿²Áþ£êhÏüÜO¦<îrç¹ .üW?Ç»ÿéß¡¼±…ÿò~³—se2¤³Ûçßþé.¿ü?ÀÁ;G¸ÔÓÿÓWYôFõ­-vÿÙþ§ƒïð‰ŸÿsœÓsõïrýúOp¥“‹ëßcÛmÐÜÛ ;2žƒôBI÷~Û̩Ƶ ¸óJ#á‹7F|ýnÌæç·Ös>ÿn‹Y3ÀÔ‘Ïh{ÿ¹˜[0û÷£ï V ? j–X õìÄôõ}+^÷ðYTœ…ªÄ”þî'û èËL4© x˜H”jW[̨LØOf, ÊàØ“(\MÛ×ÄQÁr-²2æ6 qÍveŒøvŽrñ\¹Ä¥}~l¸Æ?(ö¸ØîðÇÆgyÔ¬· úIJÕÊyxö!ç´Ho¼ÌþÂG§hàâ@å"öªœÈ<ÁOñ,°˜Ÿ!·¦€CDæ1WSÆG$•ÃW†ŠËÀæj½`÷Í~‡ÄŸ[38‘NšÑ%ïŒX0Q Ž ºµglÂcäóÆiލ N#Æ'‹…‰ÈD¤ßaNrÍÃ:ˆÔDmF#8ØnLÁŒh.÷¢Q‹µa“[ cº¡Kw[lëñz›ôÅeâ*" 1÷šã ‘ó9Ükô›{ØVàóËóÌ0·ÛíÑhÆmÖT»9n1B ÛþÚuÆÝÍ }W—9Z“/,Âr‹8väeÉáßy[}‰ø“«eÙöK7)?cl¥3\Nê;£>éHPÔ&Üûcx3ê¹Á¸Ôì¦üê=»t¡Gòs—ÑBÆß»žñÍûŽs c^^ŸrzeJZ{®Vm¦!çh?#vØÍ6™./°z4¦³·Çëç:Dqƒri•m/~ï.E YAr8æÁÃ-&»[,¬®Ð[ßàQ0bËç,ÍÜ¢Šhäéth/ØÞ=Í·kêrÂÚê+tÓ6¿öµ_çÁlÄì¹e”Ð^»È/ü{/ð•‘1šä?ðÛû‹æ+4Ó”¿ñ:EYSå%Ý¥E¾ò¯¸)%«Ü»›•x«Ÿ¸FÚ̈=`”€:)/¾ønN(~õëOòooO°}ò¬«ìÿJ±íÿ ŽAÿ ÎëYúe~”ÇøïyïxéË—8÷ò+—h/µIÛ)ýS=ÚýŒñÑôÄ­ê„å îØ¿s@9-é®wÈ:­¥~C¡ 8ïH; ËW–è¬u8¸=`´;bt8dù¹U–Ö—hôš”Ó’ÙhN¹[0ní’õtO/¥ I+…`¸Äã›óp/½Ïª×5*ªy^ŸKw°@”9¦ûc&S–¯­Ó{ñmgDõ„í;GŒ†럾DÔHˆKÏöÛ·u¼½‹<ëÏ­Ó^êp÷µ»´×útWÈ÷Gl½÷ÿÓŸçsŸYá'Ûû³‚ kô?}ž£oÞäõKÜ9ý'¹[¢Î|yã€ÑlÌ×~ó£÷i|é®ß${µÇBÝ×úÚ5¦Ÿ]góÊ2î!?þÒ].YœÞg< <¼ÝaÚŒ˜=çhÔ9k7jòAJ Sâ•’…¼@Çcþþ^c®·?-ÖŽbZ•Œj‘D4 Œå©œh¨2êÈiÒH‰gšÔÄ€¥Ž‡;ëàEÆŒ†ŸÒpnÊBóÅÖ1KÑ.mwLÃMè¸!]?¦9™`3é¸Xf:mu êÄS6çÌBZ•‹dZƸ—R'j‘TÕ‰ZÀ‡R†ðQÍ`r UÐLö1‹ Ž:D˜9Š:¥.„œ\ôA&‚áÔhϨr¡YE«8¢8·áS¨¾îWÀ~S‚®“µ[ÔF™œQ§Ê<±¯pºµ§r¦–EÔ‘«¤t5«Ó”ûqÅž«ˆ8sTˆ(Àjž°èädà`«*x9ŽÉ»#†ñ˜Ý¦­1ÕÊ€£¨âÔt‰2Q•ÓdÌýé_ì.щ Þ=Þã¼?Ë*‹ÜiÝ&ñ5-KØrœŒY¨9S÷YÊû` AšŠÞä4æJªl€«›XTÑœ4Š B 1Dø’y`2— Ö¡&`Ô²9«æEbž c«1¢ð®Lɪ˜nplFæ+V«˜ãÑWàØAl¢vÆAß<3 “1°y/MDæ8]‰ã¹™=“œA„X-cbEl7§ä. Ç­)«yL{–1‹<}k2»wÀà—®Óýã—IŸïÓ4¨bx·»9ðqŒûÆÑ_¹‰]ìþ£«° YMZ‘§;I8þ»G ß®©g-¥é)!ç î“}ÜhDû3gXüóר'…ÆÿâõwÇL~+eôÆ1åë÷p_X…sm¤DYDј]lG"¹XÔѼ¨ˆ jDôCè˜"A"œ„Š=²@þW_WýÛ»Ä_#D1ߺÞâë·[|ê܈?üüVA{f:c”w¹ùè*ñ4áÌò#VÎÝãïÿrƯåtÏ\äܹç]¿Ã»ïÜäðJ›öBÊÕ…3«g¹°ÒæÕiÅì°â½}UÕ˜ÿì /qfi7Þ¹Çd4#£Õïð•OžåK]Ç™¬æÿ¸ûˆ¯íðÊ‹ÏsöùçHŠ‚86 çØu ËňΛoðÕïÜàû“ÒÿâýÆVú‚ïôÿñïøƒ€‰?.@>.@>ú{äDÒH‰Ò˜(‰%¿û娋ú‰ŽQ^|âg¯qêê:/¬Éy1åxïȺkI[)µ‰¬Û`ñôýý‹gX¹¸Ä™««4:)à qQÏJޱùæ¡ ¤”¤•¨Ñoâœ#TY/cíê*>öl½±ÅàÑ€…³}ú+}V.¬0>39šüNrc‡´›Ñ;Û9,f‚¡“j°4'¢gó%Ä耆@ÚMiœ[FiD{e•xã¶ýÈ,kоrŠ$KñSÈ:m=|çVä“‚¥Ó‹4šìÝÙ¥¹Ô¡¹Ð¢8q<ié?þ9ÞŠN1þäò€*ÏÙì­Ðyõ £7wh9OèÆ|û0¢ÝZæSí{üõÿ}—«À{¥Å´Ýä¸ß¢û3—´Î{¿ü]ŽÖ:,þXƒ_øÜ7ˆ6EÔ 7p8:Ïá-êÓ3êË":ŠíÓÜÚu|çµ!‡Ž«1—ÊcîîVzm”Ò¾ KæY9ˆññ\VSVŽ,2ªQÂ4u YHÊ Ò{F 7 hXJ_5ŠvƒÃb‘aèÒˆgtÒ•y"Wû 3‘*§ïèù=wH7:¤í'ê”#úÕ€~yÈñ`‰Ê{,…ªáÁCZ—´g¤yÁ¬ÍÓÊ …Š Oe±"+y¯ŠWÉN¸À$ôh¹#j‹ð.‚'Ïcœ3‚ç6ÎÁ@ó¤œEzé!¨Ä¹5ŸFámàu° i›²ýu«™1ʌüÁaÙTâk2_‚›½—5åñ@NM‚§S§l%5V³jŽ)âÀMŒ…Q‹Ø!›²ía2…s>ânÙa0iR¥CÊSwÙ^ܧpp?lqÈŒ£t½*%aÊ÷vw¨ë.¹eô|›Óa‰¦5)ØJ·h†Œa\aÔ3šUƒõz‘Ê*WRS~P€„䈨lQÆCäº ~†$Ò\øÊ°ÄÍûˆÌæ!„ „\ú¹=ìÌ×&ʈÅ2&rbæ‹Á‘QGSó ÁÄæR»1°€£"C<&£8aRgTA$sÖIÞ <‹uÌ~³d«1y?+ƒqkJ§Œ¨å‰\B³ôlÿ•o­·éþÉçÈBBC7º»L|÷”†ÿ{зö±?s¾¸‚f55FË{^¿wþö êx3Ô\Tæv‘RÆõ $|‘h°Kýú€ôó«”÷4ûßÞ…MÇÁw;ÌîLˆ×&èË«ØFWÑ©6ºÜÁ5Üù³ŸÖÅÏ^âôKgtæÚY;sí,g¯Ó™kçØx~Ó/-% Q’Ð]éÒZêÐ^êX{©Cg¹«F§A1Í-ÔAkW¹øùó4{N¦…/¬qúå ÖŸ_#jdN,NO  œ£ÑkX«ßT£Û°îjGëÏ­rúê*ç^Ù`ét—ÑÁÔŠã™lVÐ^lÉ9ÙqYaî•vR-^襱oéöoÞ¢±ÔbåÒŠõ–{š gŒÇsÕG0ÜØ!i§´Öº|`„o&1|8À9g>‹±,umšswJïQ5bÜF_†ÃÆ›]º¬èî]ülʤò4ά’µ2c*z MVÃPîìÙtV±ö܆ší”­÷¶láÜŠZ½–Íö‡ì>ØÓñk·i|æ"wÛë„\LJn;ÓFŸÞ'Ÿ—E ÿfóÛüë­7ù_¯±Trðî-»Ðíè–k¾p÷£(ãv·ÁtïP7ÿÛ_¦¶Àâ§Ÿç‚?b=3Yèá[F³%;¸µÆôR¡â¼³‡×¯ixï¬-¶sŽöàÖ‰r‹¹v>'˧ú烄­¡,¾ˆÎ cZS‡¼Y(¼¼3kĦj3K!D"6£QUÄ.¨hD„Ê™ŸVjF3‹›¥¢^M™$V¸LƒrÑŽê¾é”ÚÅLª6Ûùiöª5‹U De ±J5ܘĸÊèÙ¡%“ZuS;Ga)Uê©ÛŽ´(i òV̸—àKU9ðÌ—…³äŸÇ¬—>”æ—Ù¥IA^eä³Ä¼ Â;“™ÌÃ[3ÊÜኚ^óó øª^AáMà L]ð·­l ÝTÒ0]Ìæ´;O÷Î&ò'.Õ2‘šS7À4®4‚ÕÞ‚™*5òˆqäŒ ˜yÓuK¨K†í:ñÜÖŠî— ÷R³KÍBi÷€£²¶WrÓ.¹rPæÄ±GÇ iTÙýÉXkí¾ÏtPïòhxÌ‹ÉE —óíý@k°ÊåþÈrc*0iÍz¨n|bæJ9KÍk–îáHik"Í»š}p¥°ä$MÞLÁÌ@ÌCâóBFYApЭ0ÚµCÁ3<á 2 ^‘Œ±0œ:ÞXAf&Õ2¦x†&¼ÌjÐyƒr>ÒtçÒ, ÙZÑ‘vš%GqaQpLãR °åI¦a +³–¾·¥á¯Ý¡÷³WÈž[²Ö4e’VÜoÌ»¸³÷­}ü_»…}bÑìÏ_š7s×&"ÏÛ·KþÏ¨ÚÆåÍ‹SRíÈðäÕ2é5ð÷· wfÄ×–±//+þçlé§ÏÒXñ*¯$Äñ,:Õ@¥á:)ê§Ðôv–нS˾º‡n£ÅŒz9…zžã"ƒ:öT»Sʯ="lŽÑ©6áæ!ªa{‚ÿÂ)ù³]ܤRÄ´t¼tjÌ˧&V€â:b-¤–š×Í8g¯3Ñt2±ëoÖŒ:+j‡@÷Á}¶R|mÔÎÓ ŽWßÙdqplUäçN ®6ÛMµ]ÌX9½ÁÅW¯ñàh¢Íñ”FzÌ'.< ïüöOsNBŸÿ!ÏÂF_ œ•ªòŠ*¯(f%UQ’dQka­g«—×X¹°¬• ˼ÿZ½¸ÂÒ™>Ín“…¾Î½|ƨÊkBaȉ(ñòQ„÷Ψ+°pÒë8wÉŸgrÈBmÔÕüe’â$ÂEÞä=I+Óús+,Ÿë«½áêªÑ€çæábe£~åËKŒwÇšÍr’Åí…‹k}¦Ã©¦ÃÙœñÆàÖžÒNf­•6'u‘f³Ýq¯ƒ€¹Õ…”—FÉ¢ÊO’%1>Äø{w©¦9n ´A÷Üu =ÄðÅ®^=Ý tžÖZOy £ýµ¾¢Èã«Àh0aüpŸóŸ½Dóù¾^göî +åŽ`%¾ÁZÓ?ßý³±³ð¢–ö_ãoü ººöE^Yqa÷ ã^ÍÔ°wv‰^ºÆÍä,§êCë™ÂzÓÂr‚oÅ N‰<2foœÁv\ZºËzÚà°rz°7aíbÄgzGüãÃXo:6ˆt-ͬ™;Å',HQ:|\“ÅAUí˜%"ÄŽ¬Ä!;éÿÍÞ›>Ûug~¿w­=ùÜùâ# ΩYò¨(n·ÚÝq'vÚùÐU‰S• ù’)He¨êNªRIuâNÚnÛñ K²hÍ–DRgÄŒ \ÜùÌgOk½ù°/(y €TÒðTª;î½ÖÚg¯ý¾ïó¼Ï#¸(ƒí•™\³SÂf!WÖh»ã9¶‹EÓâzz\ne‡™ú†ÜJ³WÌ#Àn¹$ ˜ $vJÓ%ÌyžàŠPMì™Ö‰ÊB“4'¦õˆ¨p„ÎQVM¸êð>¤(ë´ãÛRj ¹‹ m’ººfÓ«¹Tö U³³C­™’§dJ·¶a€­­ ù1Äm ¼öë ø°‰í$ua` ƒ"!¶%0Âx«ŒUè–DV) Ú‹¹)1ªdÆÓw"ÛV‹h Šˆ²í"2AZÆ3Dè춤a·•R$=™Ú IÆìv›³áœ¬¦Ý®¤ZŽÇ]öLÉÉ…:O5Z2)‡l÷ѣѱFtpåMoé¬^fâ ¡ÀX2´E\v(LŽ£}D°%΄”z^“x\*¶ºWm¡PjÙï³A¼jå'R‹J ¢·ÂRK[Êl±&JS…´t't‹RWÃÄWÆ ëÁ– š¨0PCb¼"¤Š‡HCT½7iõw(Xæ\@n5¦äâË€Ak"±(QiÛ`. Ùýg? :Ö•îß?­afH$ázc—q‰‹Üšªýý¨D?¿ §ÚàTˆ3«á F¸)W×9¸7ÑNVCK(»ˆ"a.„g ÜØÕb7b:œÇy+œ‘ÄÐ>áµ’6 Ɖ.CÚ©Á”)+¿faˆ·ŒŸ®c—BÕd>ã«®&hh¤üúÙÿzµucÊ?¼¤æì‚˜³óHŠÉªî#0ß,h$N2/ä^èÑÔˆ õ¡”qÆgåh#fWçè­™ÛÛd­ Qúz#ýBN\^Ç”5TH¢ÂF·Á‹-1a K²3pk¯Ç¸œð±GnÈS®Ó×ôµk!Y‡Ù”ï¾|‘·Þ2zîôY19í}ç%¶×oÒ?RÃ,´äsÇNòèTõjr%Ndô­×9ÿ·d±rjY¹¶™óÜ¥ÒÂ#E`X9»*O¬Ìâ¶Ç|}k“e&Ç~ˆÕ•”N°ZÒÍ&’žÕÁ«£uÔªDÃ9("˜ì9YiEz¨mxmk̤ð¼C|ô^МÐ?pB·ÏÆ¿ÑNè?kXè^t®å}<÷û5æŸõ1ä=þÍýŒWºKMšs5’fH1Êx§Ïh§Çh§_½·zLûCšÝ¸jÜuuŠ::÷öÛïP4çšt–:U{DyG)JÞF'|©Š)SöõWïïªïÕïû&To¼§bC ªÊC¬*‚Ùd¼Çx…ÒUeÓýó©‚/<6´Ì™ÁÈÓœ4ÍI5æÌÑYh3LÈ'9êUö.o±üØ*I·þ6ݬ>ßÂ6šø<­VÙJ5쬦„àJ4 ð3M„`˜"·ñÎsãÕ HæÎªz('pf!à™³«ÙÀ™€~9ËD›ÜÎVÙÈV°x2ŸHA`JC 7¥UŽˆòG@Þ ð%N JkHëaá0%x£ŽF´Cab¦Ò’HR ˜c<™«Q% •"šŠTnëj)Z(‘›ÒJÆäñÄE œEüD[ˆŒÁ2Ó hXÖ0,bB㩇F•Ü*… ] !Ù®åìÔRo‰óµ°``cQ©”œrQ&EÂ" Ʊƒ¡Ý¯‘†žQ3£ôPfq@7p<â:”6Kã./'·ùhúN;ü°~)”S''‘[Óm‚¼ÆÑ!ú©¡ÏævI“)xOá”~†¸hSØŒB2ºãUÔ¢6‹¡žGˆOÑÂRr­„‚ ì(]efhL%ÿ*UF( ºgeX«È蜳dÞ°´Th+Œ½Å‹ˆäÒs–¨ÊnPÌWT¬ÂÀ¼ F…%Dh¹êwo™Ï#Æ‘r»6©ö4Î8³Jw©IžxçïüµøÒëµ&D°&G]Q=…L¸ŸUè_™›z(s©"tŒb*:”óŸ{DÚŠíÔï MD=ªerQ´€²¼sxÁ0A¥i ¢Póâ½V&b«cùý&ñÂ!¡ ,jD]¡Q( ,àŠRw®ìqssÈ¡S«²xlIÃ$äõ¯¿Æt0Å—žµï^æÁÏÃF¸¼TWˆÉ‘ F]V/I„i¡R”hT¢ê1Q ;³‚ÛÝÀ鳯Øbƒ -(Äò¿}ONE¹>öÄIÊžJYîqæÁ9A®©(EAœ9ñ›‡¾jùÜŸŸ‘OuoêË}Aþùq§ýq‹5§ÛpÅ–|}x’'ò|8¹È­ÇÏñ¡'ÏËW¾ó¿ý§ë£ÿÉg—XéøÇŘãGKþ‡—©ÆB“ IDAT_¡˜~’­î Ïm/üÎS¿YÐ9Xä%>êuÚÍ#r›^²É;’³4ùÑyôÌ¡6Ÿ_Þÿ³¯ºü„½æ’tG¡ÆxjÍ’r`˜fVTQ™„xa¨ˆ‡Å[Á–N$FM$ø1¸©¢#„©j8[ÊÜBQ\g:L³\Ĩ&n*³Á9±öóœÒó³zeò ³Á6‹á-æÃ ±™K¡q™Ò˜Œ$s±öëMòfDs”1Žcz35fv'D™â 0^‰£u"ÍÈHªkWyèßzw%½i“Præk=Œõ¤­6úst´fF ÒWÄ9¸ãÄð7q`Ð%o©cd””¢„¾’IUoY÷²G†‘õd5…P:+W5ÖQä0ÜQUÍÕM­dt9|Ûj2s‹™0`jrih[—ʮبO}0«¹›r{“ÅKÒ ê¤AÊ$Ë%²¨_y‹ÛW;½9jÝmÈm5/ŽÀ%t³Ž ?´5ÕBl ª`<ˆûÉÍ£š¹‚ºÊbO¬Q­v •º-5Gd–äNd¢0A4P‘ÄíyC2«ÊlR–†u­¼PSñ¹&*ˆñÚ¨hX’+ZˆÊœ3ꨤ~#W]”íZJ!ž¸ ×2ЏFé é .O(¾s›ú3+Ä'g%*¬ŠX¶â>¹”˜F„\ˆyî¶ê‰¶ð±E¼EëcC©Hb Afµ¼¶MÞï £ÖLFáJœhÕ!N¤#Ï.ªùò¡+)3‘ñïæºðO똮ÁxQ¡A€ ìăر\&´Ù s/¶”û;®ŠTJqà9º È|à@“«zUQïU©˜cP©Á•TMûaÙ‡xñÔ‹’…4BK‹1Èåq¨×6S& 6;Õ…U•0iè¹7ÖY¼¹)ehW …[³M.ž£œkHZêÓ©„Í–J½‰ßóÜ—»|±{P²°©]5Œû<á¢<:â?üwõ‹_Þ“Ñ+Wµ\Ž™.&|df–ÇçeêA¨^ß"{ñºÌµýô/>,3¢úâ…1oìM±Æb&5ËÜr—cs]Ùxë2/ïl©I=ü4'ó¨UÏÕ¹EyüÒëÚÊ{Ø…„æÁŸŒ¶RÊž£?F¾´¶«_]ïS8}¿‹œ÷cDø~0FÞ`Tï¡8}/1çÝÆMï6Ž÷ y?¯ù½" ÿO¾›I!|`Dx÷´»™ß¿F„b„ùÕ®˜ÀH1-q…Š+ï°Q›iÖc k±ˆµb‚1âĈÃýÉ·ñ¢Þ!8)-±Ö3ÜêË¥ç¯ÈhwÄì¡9DTÔ«ˆØŠ2%5VÀT¢óX@‚@0 ΉñN|V2ÚÜ«|"[•ÎÅ "`l•)àT¤,«‰šJaZâf$AÍŠih 4ZMiÍ´d°Õ§H ÞêI9-èž1"x_8a ®¨x­Œ³¢ªlŠ#HÚ̬’·±a(µg…Ík"ªbfg¤u|ë; ˜,ödüK/±õävÒL&o48¸ðè‘¶\é—”…‡[›ràé_¥¥òൂ(mȉõæ¯ñÂpY"§ÃLÔªÜ*Ù™vä¡ð*½…£<´XÊó_¿Å$ó\ºósg›4k*:¨K<*kóF¶_½"æéSr³·CñÉ^{†±=ÀøÀžLÅÐÞ™“`ãbQNCÊòºÌF%½Ü¢•O¬Ð,çóX8˜Ër7df” ŠÔkžš:Áƒ³ûAè$Ä'ŽÂˆÈ´ÂA|,¢F°ªbB© ŠèHa Äž¸•K\Ï¥ÖI©µ3\ˆ1ŽP šv(­¸O3J+г–ô”D4ƒò] Å‹z!)sédC‰´i’H”•äQqVJA, 3E)‰Ä«!°NãIËD²iˆ¥ #8E½—qX£*s²-Aà$mwd”¶d±¬ z ñßDƒçE4@ƒm‰iY+ƒ}$ 3I¼Ðôk ®F1ô¢\&¶d¶ˆq\6¥Ìy¡g•‘QIÅqćbóDnGî „Ž¥^MÒ¯;j"VÊØv“= [¥œ"'’íx$·¸äCRöd£,xºö€b®;çsŠçdÝîÊF/‘$ÉyóÊaêñ”¸1’nNLYëciM—`| F”2Ù#Vj#‡/F âœØ‘PDmõlòZ–F‘е)û[ñDvã)q3u–ºQJAº. å [Xê¨t§TC2¥2Ä‹¥2ï‰Á‰JK V$vϲãE<ÐðF–³¬e­>•‚ê¾ß˜p¼×”i Ê\%ú—k’¾²Å̯?,Ñj‡zIznÖzx Ʊ_¸…ùÆ–è/¯ ŸYƺjÃÕaAþß¼ÆäË—¥Ü¹-HVyÒV‚RpçÚÿåIñw¾º‡Ù·`%?¿%~”QÚŽ8 ûñ2oeP8ïiJ’¥d‘JW#D¦Ä‰Š ¸k}1ª<2Gö»¥øŸ_¯*‘ž^añs'ÑÅM1Q'ÆW2ÉÎ[Q`ÿÙQ"2ïBÚj)ÅËTœ8_R/EZÜr"ÿürLpá&iXÈ Y— w⃀¹2s/_–ÚxJUápÆÈÕåŽ çÄ^¥T/&Npõ‹Öäñï¼*¾¹Žæ†gÿa_æÃ¶¼þJµÛkò©ÏŒyì)+_û¯{ôzcœjððlWþÎÁU¢8– _Ü’¯~ç’`…_ü쎓ËvùÚkë’z!Ä7²v,ÇÎótbäÂåu¾µµKûЊœ=w†F–³&4´Ddfw‡Sã[t…R›¤L“[#)úe%œØêËÌŠ•µÊk7&ï‡ÜM<ðáÝÅ6ï7ÝËÿó.q×F„wwΟ³wÁûiàÝdb÷ÛLþ×ÏûÓ2,}‡1é»óÝ*Ûøîùiÿw7ës7ëy·(оÃu¬ªNyéËoý­çí®Î²|ö.+õ'Ž"x¯’NÀï˨¼~¨Ú8`fuŽ(4ϵr3v´æ=óé£be„/½J¡&`T]%fj£·q~«?ždª -å`*kÖ9p\˜KJ§ŠªNb»ß1ìOP!sHáU"#j-NÁÖg¼/ÄYEÓ¹Õ9Ž=qB^}îeXûÞe‹-<¾ªÅÔ¡®Dò¬Bb\ &€$Væ"¥CŒ—¹¾}UL\ëtµ0%Æ µVDo}‡éö`¶ƒ<õ EЭ³ÛºÎòSÅ+m^«¤!cŽ5"^ö1³y©¿ú­u.œXâ…Ƕå‘rMËóçäcþü‡Ïó?Iô¹>$Z‡S6´EP4äP~ƒW“YºMØÀ$süöוÿê-èd·Áík§øÑ 룯ò½?þ 3Ç]ºþ#ÝÜè³þ/·ˆgR­Ÿ»ÄÜßU¿·ÅÞ‹+øõ/3œ®Q[<Ìl»Ë›/Ý8=/ÇšøuKs;Ónw]¶fë,n†:‰”VÍk§Ì¥é•ž$äÈ eìuØ©ïB’ ´²´¢¡»r­ìiF£$ÃÓµEÜëôvö3Ïr¼×ª{ªìA-ˆjX€)K)¯,w•û¤þÇ;Ù¾-˜}ìý»9ÐÊ.o¶ 9\†\ŒrMŒ—@<”†Ø(oT“Ò©êíH%O¬¢Š¨Ð3NWœUQPЀ^¬ä¦ÔÀа¤Q´Øl{¦—·Ô½Õ§ûöØ’6¦‘„&ÖkÉ&©-ˆš5äõ>ö÷oÀ±¦òK+¢‰Åî9BcÕæVöÞêSlMÔ4 VPUõê~„ÚŽúg qí`_OÑA¢Þ8 2¥õ$ìÝÞ$x5uÄ,XtºQQËöUŒQ ¦uµŒK£¹w‘¹9V¿›’|ò A-–Æ4¢ˆÀIŽ/FT+e²JcÁTÞêöå‹-"m îíá–ɈcKî [SÏ`¶º§Â¼Ä[ óËrö›¯is¯ÏÆ|[¼ ™–X§¬­vUçþÎwxùуüðÙÓš5[rðõ|èù×µ5Í™n#¿ü©7™?uR¿ð'ž7/^ç >ó‹¾ýçtçꎔÇD“8âDkVƒ( És‚þôü†^ëM9üùËüñ%®]¾ÍýèMúãRë‘EaºõŸ8uŒW®^äÏn¬‘<À™>£õÒ7!!ŽU¦í^–Å£‚i'š÷R¦ëq©¨jŒ©÷ps9s®«Ï(ÈXàJÊK[#½Çøâ½¼ô]P½GäCï²²71âÝÌ]¹7A ½‹¸‰w`м[ü&w1§w‹aõ~¯ˆ¾‡µùië}·è—ÞÃçê§ÆÙÁ]žPîãƒün¨ÀÝžWßÊ‘w€ß­ÁFùۘ[Øë^›}îfs¸¹_8ñ¹ŸgñÜÃ\}î›l¿~AL’õzoŸ/ž¡·Ö§wc÷ž¹–3GÇÇŸe‚BP‹X|pAj5ƒ/ꕸ•Hز¨+Ô» - ÔXÙÏgu*Š˜PQúŠàKˆê g>}ï=…WÄ”‚+U¬ìÓ¶‚öÕì *¤Â!¡A#Á{ª’§e‰ª“ÜAg±ÃÒñeÙ^ÛÂåN7^Z£{bI¢z€/½âŠŠw¯hhEâ²Z&ùD®ßb¦^çR«)nóMê^QcØzõ3gkó@_wèn—kÿí7¯\dõ×n3»ØÁ¼ÚaÍ’j€ÕcëåÂà÷ø¥W Þ˜=Ë׎ÎÊÉIcçòÌVÈž¾,ÿë³Wˆ#åãÍ=¾2˜ã_OOó›Ù l´[èö÷ˆÿ§o’]Ùb³~„Ë­3r²ýû,,—¬]|€¥ÖGøµµ¯ñ*Ó£ó2{áŠÖvÿœIIáêÚ˜ÉÂ#ßÔÿ¸‡š63Ÿ˜eøñd•ö¢—µ4æôbÌSkc¾Ÿ6¤51)˜Û $ÍEãX$°BäJ𵂡ÊÂ` #x¦]¾¦† ^T´ðЉM2E·½øu-ƒ¯í»6KI§;Â$ÆLFu™Ä©æi$·ËѺ¯3qM ŒcÒ.ÜÖâAHà¯Fœ‰4ô¶ÈqŠ‚«¢ã‡ƒ–"x\a¹Å)–§£Jf@"AT¥(1i.¢ÁÛ|wî£Â*â£ûF-É$¼Ž)˜M)eì,f/ E”L$,<¦¦ì–„x¦ ô}¼‹™›± –kSG½3‘ÛCË4õØÚ@jÚ&œ–Øáˆ‡É­|MqŸŽÖ)D¤p&¡è\Π»ÅR+Ðc“J˜áêU/rø!aZÀOäb(`4°”V¬«Ú4ÞÞ´µ¢]yUŒâöAL«UJè­t]üvBu'+ñûgIØïJQz(ÆI§œ!¡¥H]Es…–Š˜jÃA´UX±*ºO†¹´³˜^=ÕÕQB(£ØÑúÖX¦yIãÃ+ŠˆÔ´Î0HeN5À‚WØË+³ÊN(lÖ ÆˆD¡ºb"cßN¶ÊÜI ^SÌŸeRþ5Ü¿»„|k óÂ@ÌDñ!*¥«&½‘ár+Ѥ$ZŒ ïXÒÜY}Ýgó1ãBf|ÄF­&»&C9Rz ÿîqL7¡1§l9£?¸Æt+Ç|ö€pº ©‡}—t´rÎIűxð–±x)*ÓI-%õÂó{1&ë£>«ÚÖt~‘£ë}æomʸ‘0‰,í¢À(ì͵èÏÖåÈåÛl-ÔtmiŽ"·²òÆzþ šÓB2ohȰú/ß|X^¥ ÷õÑ'¦Üx!ä…qUÆ«]¢Cmyb᨞𛵩¦Fxóå5no$~ø0r`už—^¹ÎÎîv£&RohÚ0ZðäÜQ™ñƒë·Ù*Jž8q„n§-I¿ÏÈÆ„Þãs'G²-Ž ’@¾;‘éæ—yÐH$œÍ[-ì “Éžüâj‹Ï/ÖpÊoýÑEyñÒPï#¾¸Ÿ¤äývý¾uÏw+îÊ=Ƙ÷Jº×ˆ»z·8Mî"@—»H ï‡^¥÷¸6òÆp/±ðOCaôz@>xýõ%ÂÁgŸäÈÏ}œ¹‡ í(§)kßüýë7\[ã‰ßú ²½>—¾ðUú—¯½û6󯽫[ã”;7 ¾J&O-ÓêDdà ÉÜ, çÎáøÞUOGe§¾Øï8$ªxª8W•GE=˜LT ÄUS»³à˪ŠjmÕ(lH®hT5¥²ïn­F)ȉÚ1'Ÿ=Éb‰µË;Ä'@æWqé:¨CLð¶ïƒ­Hã6Ø÷#TjÎój{†#F˜Ërvã­Å¨T|Çо?šXÙy%åö `¦'YùÏ0©}Ÿq>„¦ê\ôŸ˜ùsM.\ø(ß=Úfàú<³îøÔ|Éð¥G'g3f£m¾ts«yƒC³9çYæÖÜúツ)7›'YI–Yšßfo}Ž~¯Nຬr‰Ân×vH¯“»ã”vŸ)í“KŸy„­«m£C>R0=ÿ;×6ùѾÏßÿ¥ƒ|®¾Çoç9ß~«Fí¬CC¥Ì—@‘T#…fRP„†IàrƒZ%í¦(±fáñ!À¦S*€o[è9Øq NAÁÔ*à«^OIf ²Ö˜¼ŒØXoB&“&{ÑDÐ {ø†¡%{ Ö;\ß>†)<§x…fÇy»ûT„ª‚¸ƒó–z=S’ï…Ðï-ÃÑ"Žø‡0y >‹è_‚ÙCJ‹I‹¿ö$ûñþìQê>$Ú÷¯vÆãLu/tÓMJ ÀªÁì{^ܰ†ZcÊ\ \Èj”ê ›O ˜iO9Z&”“^pËÒN—O´ÂÛ)#³ÆÇvç9ÐV¾lL'M\®×röú=ü…sŸ,çõ½y²iUy<'ÉCß6îÀÛ´5½"b1bç1å_Ý;|Õ#€˜ª‚¯(åÛx}•èO<¾Ôë_Ùz"ý1¶ˆ2U%RK,zC*PG±V!Ci!Z/ût7ÄXBg÷Õ•=í,dxv›Sêõ}taZx(¥d3’™’(ˆ`\bÿä&dýø"º”Œ•F"KzÅ¡ã$ØA%Ûo¶‚Èb¬AjLsä8¦%ùù)E ;!`F$4„ï “ço¾œRöh%lðOùê3di”–qP2y¼C Å÷·(^Ü$þµФL%•m¾¹ ×Gèc]x´K=¶B‡ð"ä¦ÊòDa USP!wxÆxÞØ˜à'*ª'ët˜Í•'¾ýõñ”ÍÙ&ÍiN{šã¬aw¦ÆÊ¥u´à;:Ízw†ƒ—Öyú+´²œ$ î“ FÓ]Ê¿¼ÂtÝ0´ÁÁ™’oÿ3Çõ¼MyÌr¶ÕåC ‹Ää ÂwßÜâõo¼E÷à,“OÅu¼øâk¬­íÐHBLw9rŒt÷2G¼åô‘|÷òuÖ6{|hõ +3ml–26–\ Kå„c~S­‚PIo÷qÓŸY¼Ñ ¥~ÐÑX\Åíî¢ ‘Z ?ë9·Òâ±¶xñÒðƒ8äƒ×¯w `Ý ´ôNô¦wÊøî–{¯ç§céû0gîÖ»—5º[øînÖô¯G•·þ¯/rí/¾-G>ýQ=­x˜ø$ÅdÊúó?döÁãµ›Ì<ôÛ¯¼©W¾ôuWoüÔÑŸøÈGYíuô÷ªÁQÕ*œR…l˜jöã¼öâuæ6X™é¨˜ýd_)$y‡â´ª‘JŸƒhȾUõ‰TÔ{ÄDUÅÕWñŠ«úa5pxñˆÉŒjhª¤Dµrü¨‚( k‘·³´O­â?ù°†Í9ì÷”bº†Šî‹kéÛTâP4 Ò”h?Idi:$´èf£ƒï41lÄ•¹Uer¨¸¼ÐƒÏœ¡~r•Ù§4š?C4s‰·®kÞŸ’Ô4" ^wÇy°r`ôû|¯öóüé‡y+¿À'_|P?ûüƒØöóü®ç×wøìÊ®|cã?W\Öc·7È~åq™¹¹¿8e7> —jg9••Å+lLøUâ¾—zÜW×™2œ~Š2(×ãÖK‡tñð‡~¹Fþõc”“KZª ûá—Ùù×GõÆÍ¹òÑ…):蛵kKÊ–Äzd="+E£@q‘`3ÅZEB‡µ^óÂJšZUwõÔ´îe-g…d *©•Òˆ&âÆ SÅâ•üP •±%µFIÒ(ˆ_×Þ°K–'Lû1ãa“4®ÑHFÌu¶É1›“n–G!œv/±È[9…M2ké·›,Mwéê¦öX Ím½£Àf}ލâƒ|e*aÃRÃö˜tœ ª8 ¸>> †;`rÐÃHVVÔ¾’„ÃÜI<Ù'oyQRëi•Õ Þˆõ^ P+BnzTDȽH£\ Œ:(¥·Ôš&ÑP'»Ž–Û½š6SžŒfùÚÚQ]]ÙæT\§SÂõ„³“ÐpÁ¥êÊ)7¤¯ %WûªKsMŒæ4gÙÌ02ÄÄFhGŽüˆBJ¬o*„¸x€j\UÐT<û9Å_ßRôŠŠZõˆ¨XµêPF&gV¬˜*U!Òª‰ñÎ1´æE,Ðû T)«Ô_Éšª‰ŠZ5‡ˆ@«0DÎè()Ù‰RotœäÔ¼anRãfÇé쥸°§ñ# ØnL½ŒÕYe7¨A‹ýöòœh)ŸXzÛßH-Xçtô!Eÿ,Aó<â.ã\U”h6ãýÑæHÍ©þ«PÊ/u4o% “>…*M¯ˆ:•(„ß+TÇ%eZÈ .5F±Z T HU' ŒÑlk"~c¬ò‘Yü Ãgr‡©`™„^‹²Dœ"a€4,8½“ª(8©Ö}F#'…: ¢®Ú–‰ˆBOR ”²¬³âššö,'~ðÉdʰ™PŸfˆWJkÁ{޾qƒA3Ö¿üðin·g8tkW¿xƒVš‘aܨéŇRe*Ñï”z­{™àÌq>ËÅç.èíÛpÐEMºÝb<µÈë…W7øÁ—Ïë­„gŸ<Ì—fìîŽyååëãL}/Ö"¶¸ég®Rˆò­ ט5FYY¢?;G\–Ú—˜¶Oy,¸ÉjmOµtŒÖÇè4Ç;Ѳ0õPj+¡ÖæÛäÓ’rÒ×VmîBDüðê˜o¾¹óNt—{¡`é=~}·1ÎÝúHÜënâ³»¡%é»P’î–öô^ã¼{¥`q¿¯qù»­ÜCœ}¯±ó»Š¼?ÎÝïßÜ+ôw¿æ,ÿo;¾“›»1ºEƒ¿a ³þÂKÜþþK’t;,?þ+Ï>I}qž>÷ó䓉ä£1í•e:+X|ä4ùdÊú÷~Èõ¯~›t·÷öÁô)û'ÿžžÞÊ_ü—¾õMt_oPÊš„f—{z…¤i(®üQÅ–ƒøý¯­ÅKXýWh+ )Ôºýc-÷]Ë,Ø|Ie`+å•ý¥1Î"Æ šA:Á&u´QVOăŠRF¹XíM)^~“釸•Á£¼0ê³Ñí¾­Y¯^ÑÀ"õDèÑÒ“xÇk­¶äQH(Š/=ínÄ£ÿøX?¿I{u µvKLZÒží°ø‰ŸÃ4gp£j”lè¸ö]–϶uöè‚ìùóAÎÜáµíë|ôêïp3þ-¾ð‘6çžüsN¾|†_ìaÖáwùG+·Ù+[òòæ*Ï;\ª=À̯=Eã÷n‰Ñ˜/Þšcp»àÓ§öÐÌ“^©Stfpe A]¡["qޏòƒè‹GùØþÇ>åxóKKl>7eùFúðç/ÈÎïz®¼1áÉGöà’§0íÃÅÙŒ…í€z&¨ÊDµ¬¤VÅ€7$¡'4^&ã€ò""6:Ò%k ÝkJ`¢0n…$y ¥§œB8)5p^\o_¦y,HäHâ’¥V†oCÚ­1LÛlÜ<À$kP“ ó3ÛHé7›ÜȨY9îÎ3ë{Ø–Ç-ðÆh&B÷¬¤¾N[ s1£¬M SPšX*z j6Id7pÖ¿fdQŒNHüIø1E´ 4¥‹K-}SÃÕf”J ž|_«¦¢SëE¬”H‰ ¸”L‰êÞ0öí2ÈJ„Ėʘ4wIû ‚Ü’ì¾[NÁÀ’ž*Ž01ê‘P4s¾n0Û›ÁLK†R’*tGÌÏ4‘VƘ=–bC-I1­—(C‹q[•«¼ K¾Û'xªI4³pîùá”4ö"…`KCK«ué™ëQk»%òÒ@ô#³Hhˆþî ìá6Ñȑ֔ÿâ&äœë G€è¾’šRµÕ9v¿ÇX(=FIË+#˜ä^ÌþEÔF“¹aÆêÕuL^°5Scfê™g¤A‹œa#Ò¿üÐiÙhwY½¹Í“ç¯ÒžL)MUíyõè!©?b9óÍuò-/×7èYÆßr¼òå]z'šLLÄÁŇ0ÍJ[¥S^{ùn0åé³XjĸÝ!ù‹ç †ÃÅE.ÌÊæÕp¦VçÔñCüÉÕ+LÆùÔòfçf–©Fãø˜¹Ìá¤O>UÆ·'¸q†×UKÔ©¯4‰gê’ŽúäÃm:YšuÎS_Tɪt'Zyª¡ˆRQ¸°j#d°=`ÚËiÌÔÕá÷ë¥UË«JT¶3Ñ«,Œc: WËuPƒÙ××0¦rO+â½£Œ¢H ˆÒL§„'ok#2ØÀbs)¼ú¹Ã¤õø)Ñ ÍÆ#Ù»µ§é$göÈ’H` ³)õÅÒœ¥›^bi÷-=¶ñ4'N}C:7H7ÎðT°ŽsèÐ\ ¹ƒiÂf§Eë‘ÚÒ–›¯]çò÷žç±#1­¦¡ÜœàóÜÄøbQ 1æÃ[¢ÕâƒRþ°© ǯÑ92`²þ°ŒnܨdቑØFIÿ†êÁÕ¾ü«Û0ÚŠyòGMÝøH&ËY ó{‘¤¶¢W‰­‚Mo„ÁNGÊ<$ J­Qˆ*Zz+¦IE3±¢1ª‰— Pj“ª`«Ž£HŠz€oäq(¹µÄµÊ¯@S”a¨Èž¹œfmD§¾Ç°×e··@ÒȨ×'„š´ 6ÆYKùBŽùËÔŠ”R"D5©û3~GUDœUâs5êEM xÄÚgYf.¼Íbt­Ç\Î0M=ÝIN;zÁ"îQ9®¢#Á¶8²Ûh£ZaJŒ“Ü@ ÑŽZ¬$ëñ”ÐpÅÔUÅxK€%4…y"5„Ù(çFéØhŒ¤7ˆØs ]ŽEŽQãBjt‘4ÜÁ´„u;@°8µ\*úåV¢$TµVm¶9úÎÒ¸>Ë{LjÝ ÓZ-%·&RI$¢‘Ï…c¢´CT6TÄK5,U’"G÷“³dŠšr?Ë ö«õZ©`‰ˆVž?ˆº¯°-¤AA¬–š䥥ã àRPŠPͼ%[y‡**2[”Ý6*XöBPá¢ZC$vædÞšPn5§:±%**E\°:lèNâ$æ-¯Ù÷6$~xžhµ­aÈåö¹)±õHÍ7¶°¿=Ñý§'ñΖ†N‘ͨî¼rKxá"Dk¨1XúF¹‰'3Êl²7z2]¿„Š±ÇˆuH&#¼¥2zsMË«ÂA)¶ïh®t©™¨4äâ±Ö©Õž-ÄQA"Ó)ÙVŠKÈÿìf¹=7‡/…ÑŠ×+àWWÏc¤’US‰hQâ÷ qf¿{Ç¡¢*tbôòò;?šÐå J«ƒŸ]‡_¾È‘ ×è8Lb,­7Wç(}I{oª/<ù WdõæO¿yEÛ“©ÖbTÙœérc~FýhæÍ/ZdãèÀæÚ¶n0’¢ðÈãS‚ÙS´´Î\žê÷þâu¹xaCøå3òÀ‡1-”·®o1~é"e©úÀr 'Ÿý$7MS¶®¿¬7Û„‘åk7®É¼ýÄ¡ƒ²~ì(#«"òlx•‡Ìƒžèh³ÉG.ïb­jKûø ”é?Ò­7UM"_¹^ðÃk‡uWÿ—ïÝäkÝNèï<לÐï=^¾ëß('t¹—Àõ.ö^Íeî§ý^åÈî§ÉéýH@~–HÐ}_Çéîžl¾ò7ÿòEÙ9™ó—k5qYAF„¨Ùäà³O3{ú$óg¢HsÂ$&žéJ7Xyäép$»W¯FB¢ÿ7{ï,[vÝ÷ýÖÞ'u¾9ß—ÓäÌ`8HB A )™(R"E›¶ìâªÊUf•ª\.QŸl~r¶¬*'‰”Mš%R¢(ÃA&˜ür¸ïÝ{ßÍ¡o‡“ö^þpî{˜€.Úš]ÕUÝ}ºëœ³O÷ÙÿµÖýÿ!ˆÄ3óM“m\)àEÄ„¨gÔ &$DDÀˆxõÛ*°G܃ñ^Œ¯4t ‚qþ°}Du ®Z.Åãý!Ê©@`ŠWaãÆ&Pk×^Û^j•Q A¼“ ×·™Ÿe!9Îl]T=FIîæ ¦Šä¥à<& kå®kºîviOÏqüç>EQXŠíUÄX ¼¶G(ëã„5ކ]ö6–ʼnö2Z3£Xa¸™3¡‹$£ã ë-b¹ÂøÎ%&vN_á³f†lõ>\#//˜6­šÈ@[4÷K¾ö¿}•ø]D8ñ·û|í3Osr\9w¦ÎKG;øí!#û%™­ãç°O D¦÷ .—R|¥ÎÎËc̾•é—¥\ö†hÉèQÏþ6˜¡ÊH'åé=!o #ÇD1´.Ô¤Vwä ©³„ªˆ´—Èîê¹ iŒ%q%¡ª8cȃwFÄ ÒtâbˆãÀxÅ8%‘RjÖQ†²f%k„¸z@‡¤ID¨¨;´‡É€=í—ÔdˆÂnw“(µ$¥ 0±cX4XÏæÅ¨§uéwjA(^ l€ª‘’AÑ p9FKQ¢X ‚‚ÖT&y·Æ|t¦íâGÜ–ûéí$˜nÂT£Ml ¸¯€m!þÇ1åm)›=vÇFP#Ô‚Œnœ‹7Ðòg•qÈv½@UÉbºQÎ2•t¬Z‡Sa Jd †e,;jY-b¶Š§BÓ[‰Ë- ë™L†ÕÔ²:Ñ3¹ËÒô:·“-VIihÀÍþ&cƒD&'&Ù)ûrôX‰ˆ»!_¿þ,Ÿ}7„Ó<.“˜ êœõ¦¢UùÕÊÕýîv£ža* w3жAŒ üÀ‘¯ßDÆgqÑ ½ý¥V†«—W¨bñÄ ~ÜÖŽÐ^­³;–²=þ(©¹B¶uégßdz Ÿõ Íá¿X¿ÈÆvÌ7[$|ª±Âôþ.£¿s•gý©)§>ÄS¯|•<21SòäOMòîÏeÔ÷rú2ꇈDºØ™Ý•&ËOÍq߯\eâøM†/²ýÅÛôôv=QÑ·v¯9ørÂÍ_ŽøÉÛó”“=ò²OîCŒ8lk€ÝOèïÖéÖé4H†[(T•’T(·CüXAjÛã´ò©,«~‚F”#(™XúaPqÊk†KpmÅcŽhX¨2â÷étº$;]:dY‚fÂÄèµ¹¶÷f¸rð·Ž3nîКآˆò(@Bá"Äûü¯1(‚+…Ò ¤ï©;<6…ä "¯"á5à“høi|)Gô)‡ÑžõôCÇ‘AHP„$PjŽõ0‘GUo‰xZ¥!ñ†¡Q6',}Ô x¬q¤eÀòÎ ?_÷¬š‚¼gËô‰Ó³Cêèî nï|+^e¤á£û'¹Ô¿Áòp‹4a)¯±Ÿ+ï¡NQvÐî•-S]ï‘wÑC5*ñ¸°ŠÿžUÈøC÷ÅC‹ñ»©²Êî® 6ü=û»Ÿ‡Â8ÆÑ÷†R+6æ]ò•¨yhxa5€¶‚·Ê^³ âCwðM£N¨{ƒñUóyi«ÆžK‰!ô¦j G˜ßoRØn !/°×v '˜®cû{wùŒ,æÖó¥ ¨è/…Hˆ†;KôëÆûCóÅY„Ï*£Î²€àŒ!†xë ¢[x·ƒÓu@‰’9Ñ 1 NƘ‰ÛØN„©dqI·z CÌý#ôŠœÜ;, …ÍÖ™š› XÚ'{ß<<6…䇊ZªŸ÷ËCSIƒ—ÊIÒH•\©î°ñÙw¥µ{ˆ¦W÷Kr1œžKXßÊ ‚Z‡Ó-N;ÜhƒæíUÖŽŽÑm%œ~é&c#|ãüYZƒ”'^¾J³?$ ¬÷ˆ*g¦DgonQFµ^ÁBÒbu{ÈÔ7¿M+†dgÀns‚¯f_½NY^Ô9õø}ùÀIvŒ%[ºÃÒW_¦»²K’D|ðþ9&<\zöÚ›×Xh7é—9Û¾à±Ö1žíŒò Ýâý\'À±¹fH×ûÄñ€°@­C2Ó"H,Ã>ä㵈ÛÄ'W†ü//¤ÔdÈö`—Ó#ž?xÅsmÍ}_ö¼Ü?WçÒ!åwÙ¥‡a@’DTF\X˜lsd¦CoXФhw@[=ëvÝ;˜æñÿ­üT?~‘Ü¡þ°Q÷Ë““ÿ?óƒ…éUґųrì)òaùö§•A¹s”i8ŠW¾x—“{ú—hE€Ò¬(«oª— Œ8r,$¨ÍaZ Ü»Ïá1òõçqw¶H‡%k77ɇ¥+”YÆ‘ÿL<ü6î°þù§eû…giv‘#‹œúbýÂE®<õe\Q`ƒàû^;0wbL’FHwm@/È#?7ÁúË‚ <Ý­}1b ‚Q#M‚èP¾²ð`‰44¨w"¾Äƒ%ÂfN.n<ωòÍZKÒ¤G¨¦2!´" ,d’•BäPc!p턦œw^ü‹šx'˜EEóè“ì_¦¤!1q»&Ÿ?©cQ–Z°›®Àé÷39ÌØH½ôf4£øåU>þôùê×ùgc–_Ï|¸Ü”ï ^ …—ê³ü̯žã›ÿùei,L2¶»ÅäÜ{¸œ¸â*3ûl¾w‘'‹|è÷? ÑÎuDž¯ …”ØäºÈøQ.üþ)ⱜc½Ãì°Çê«û—Ê4•¥KÊHl¨$iMjk"·&ûµ‚­WfYxwÉDö5’DÍ>(1ó;„{uI­'¬Y‰%<ð´\.¢Pª‘r×6!k+6U⡼›?ô÷go‘–’”ІÃ0ж"šeN’ (GìMrèÅ-66fèï4dtr›™‰U.ÊyÂ^I¶×Q³’A-‘z¿Ä{CèSŒ/Ň1*FP‡:asoš «Rp3;žk–bû“‚ÔL#>¯°¯bXŒP b"_y\ ¢Æ+^”ý¤d|Iä NÈŒg€ª`ŒÒέÌu#‰0gôEE<YBCAŒµ%^…‘‘ ‚‚|·Îp'‡Ð°(c”©¡hÝ‘•Ñ>ë®ÊïÃR°ê¸¾xé …Q ¥€«ªÔÏN²N»7CXÖðÆú£#†ªÄ‹'p枪ëÝ;ŽWÅy/"‚7ˆ3`µªD–‡¤ŸŠø£÷Üãs5dÞÒ2%û*ˆŒ'ðШe(J¢P1BåsXSÍÚ…Å lÖR\ÕÛO?Éh¦!äVöOèլ谬î q—<òX'ÈÓÛ"ºè'æñg;¨*qi1a`2‚?Þ•à\ð*è°¢sŠ*K¥g'»Ãî–4Gƒ” /n“çS uQŸ;TŒ5äË=Ò=šçFÉ™hl0"UR#Hš ²t€I´ö²é¡üA%ê'‡2Çö°³ß Ô±D* ´ª~¦Z$ ê…óÖÈÇN7K ϯ ¹ÜO¤gJÞsT»ÿ{÷Pî ±×÷Yxq™•¹q¾õÐiFö†òøËWµÝ0 CŒª(ÂÅãs,ÍMòî/ÓHsŒóìδوC¦_|…Ñ|Έ&–æ·v蔎À‚sŽ™#£rúô¦™Hqsçÿô;ì-ïRoÕ8îOrëùp» Ó3ŒÆ±¼º·IÓX>42ÅúhKÚ»üXyï‘­Ma¸‘†Ž •H47NÐL Ìq½L&¬çŽ~ÿZÊogìy>ÒBž8Òãt{@5ØÑRnm÷V×ÀI(ñ.1iIï•—•¦²·äâžF@ûù÷ì3ýÆUûø§¤53¥­‹Kì\cî£?ÁØñcÒ:u’^ÞÐýó zkÛ«…ÈözOçŽI£Ugb¦©Zf¼úå¹ïýGˆ;±Š1 z}ÜÖPZ“Mu¾Êö‰ɲžÚ(Æš°êq×R52ÄEÀJ®˜z¹fÄõ¢RãO¥j jlåK’;EKÐ%ÀŽ0lq¾ÜæéƒûYZÿ–&ÇâƒR ¾6”Bãîhëâ’Ü9?¯<§ž¿­Ÿm2ØÎVåւדµc2ýr¡[[ëô:sô§_ÉyOPò?¼·Çÿ1xŸüfÿ;úƖ俵 <'uŠéiš¿qŸ>gëŒ}û*'oym½üÀÐi›‡Ÿ[’?œMô؉˜s«CõȾh"š¢S)é… 6ž™SÿÞ-d¬M´g”¥Tš'ÑÛý@´«/ éœ ôþ;ôžßaït¥Åu™[>I3ÜgÂnh·vœ½0& JÉ'»š¸¡ÑšQIêhPB˜ªxÔ‹ìC·†M%é!âD}ŒP€«|2TD%ÉU‡Vpr„È;©kIl {>Ö[c¤f¤®…b!èfŒ†2ª¬ :ØiÓ™è2ÕZ¡QëQK3¶zSâ’\ð n ¤@ѦEUbXE„ÖTÎæ~[ÓL‘D±R²‘/ÐÓˆ îëý‰ ˆ¦ %È*ƒ’¸¬ f¨æ™ñÉa¨/o½Ði\zBÀYÇ-ëHÕJˆPH©ä–3Cà ÇRVzÊ„ŒY+‚bÛjÛÛbû‹lï6´lÔ†ãñf¨Ev cQ«É@_l­ÒBM¬êE3›Êõ±ë:¡Þ¥å`2<Þy\”³®3Ö=FèjâÅÝ»7‹¯ø<^ å®Iž•¿õ ’ÏŒq9K¼©ÔÁjE(µÀ1J/ä^Ô‘®ˆÆTGÇ ¥ˆŽ"›Æh×8ÆÄ«„ÄKµUñ ¿r]Ûý!Ã0¼§²|efR^9¹¨g]™ÙÚGÝ™eåĬŒß^glsW} ÎãP±‡ºÐȉGu¡Öfdq”õ•-’ßÿ¬DwRÊÆ˜ž?>Á£ÌËÏ}S÷—wåÖüã1M³!wÒ›ÇÏ-Jsz¨úÛ²Ê(;ÛFÇï,Å^šÇ:„íDMh È¢^_Ù)ùÜJÁŸ^J¿0úñ‰ˆOÝ&n¥'ŠáÁÖ½ºÌÕøù'Fä‰m=;S“£Ç[úßÿÑ…«®{³YÓS§˜™ç…ç¯Ð©11RÇ”‡W•R"WjÛ{V<²Y~/nš¯qr¡¥«[Ã7Ãto„ýx Ã[Ä…¯‡gôûÓ›f}ŒúfØóõÎííì÷­(›¾Ñ¼¼‘‰ÁbDÈ[ćo†/õ Žû°ðÍõ›áùw(Xÿ®Û—·Y¾²ýæ?åï3¼Sj#}ÞÿëŸäøÃÐO»d¾¤4®jä4N Ͱ»·(—¯’ÌÏ¥ûòÒ_ú9îßX‚²Àå)£'޲ôůSi3~âÙÁ>SgNräñGyõÿ훞×ÁÎeÙཿp’ÈÕYùFÀÀò+Ìœ£1^ggõ?wÓIp««˜ÀkÊùà쯲nWˆ“z•¹ÅaLjØ‹÷xÿØ1¢¡áÂ*7k Pàä%„TéíV‡åÕoñ³ÿçóL?~Šßyz;B¤Ctg“¢½À =ÊÁü ^•p³ËÄÕeäý' S';Øcíú öÇd~æãÐâàÜ»'R®[glå<üVÆïiñÜö|¨|†0s›õÌ<Ÿ»oŠ‘÷5ˆö'²‚áíë˜ý ʵYÚ£“<º³Ê3A¯ýÌ—¨m~œSy Ôãsp A¼Žñ5O86S,/Ïp²y™ÅŸU«1·š†Ù€‰ú-Nïlñ^‡|¼ÄµSlºÈAô.âͧ˜ßºM<9O?NÈ2ÏþA¢‘ヒ¾Zq¬Ä¥RO¢!¯ C ´š¢8 ¶2—<¤CÕð:‚ÑujÞƒôÈÍ\›äÚ NUÎñN鎂Øì˜°F‹¦)¼g7,)v3z—¶pï!¬˜¡CcŽ»æŽ¯™Cê=+C«àÄ“VDj˜Cõ±Ê¶É‰ÐQËÂÕº#aOb„¡B^*¦_¶cÜ'NòBsšÎ­=¿~‹VHnmEÃõÊ•ùi^<>ÏÂê÷]¹Iž„¬/LR†–±Õ-Æ6w+ÛH¯•4»*Y¦ø ýä9N?~”矼ÌÊW¿C¾µCrs‹z»Ã|~ÀYÓ![Yã–ÏY~ô,ÉÎÙ¶lLwÝ1ÂÜ€3µuÖò6ÏçXÜ_¡5S›²$ ´(ðé<ÔµKÈÖ IDATÏŸ-—ü¯—•næ0aHØIx¹ ¦³–žë¯zV/ôXÛ†ßøÈ §GÇùäc-榅Z'᥋ûü§ÿô"ÿü+w8vl–³çŽE!/<™[·Ö˜iÐÈJœSJR>éå ¶\~/² af²†Wouß:¶Ã¿ÅkNÂ÷oŽ‘×yýFŸ;T*yƒ2Ú÷Ûöz <òÞÆû¯Wvz³×ßï}ÞÆ¾Þì8äMææ­”C_ûNUÿî‡yǽmeš±üâK²qåó§î—ÎÈ”ˆC|pXE.K4 ¦¤ìîI¸{‰"¶.­Ý;ŽæHûÞsŒñ©¦lßéÒ>}RZ³S²wåº4GǤ5;ƒ:OErë;/Êö¥Ë¼É¼E>ù[‹|êãs<û»Ë²Öu²xvœ¹éG&ë²¾Ö“¨Jc¬F™ Ĥ} EQ‰dðî†ÔzC)ú%HeDbŒä}•Ýl(abè{'^‚ƒ»Í'Š”N(½H=ĈEòàÁ’<´ó<[á¤\‘Qê¨]{üÜ;gŲº,#ÈÇÿ¶ì¶"ÉÓ®”Ý­e‰Æ8˜:*¶i] ¥Q¦’O_–¢Û–ã/BÊæÿêlO:«Gx,¾ÍÃnúŸ$èú@VyY\ eîÊžå® ¡Ä£û²0Óg~÷AyiAäÀ"§&ºLïHùBKüM+ac 4¼ô{gh7÷™>¿ÁÊÊ‚¸k†Ñ±¹u/¿XʵvÁXÞ•Ÿ\8"½Ës²vd[ò΀ÑÍ9šùƽ Í´”ºÏÄÅaÊp³CïΨˆ[ÏÄ©H*†ÒQS5$¨ä-D‡"¦<ô'¨$*FS€ˆ¯,e¬ª„ŽŠÏdc*Rvˆî‚ÀKVØšBà Ý“^Ù–¬H$i¤²œ-H4,™Œ7d%’Ç¡ÔÓ r•¼kñQ5ÄŽA¿.fÊxc[â0“Ûò€ w;’ ö¤ ›Ò‰-S‘EØô9Qs >Ùëú2LšÒ©¡A&CƒŒ•‰ ¤fîÆ9Žýz!í"”ÛÞJß2V„’[A¨'] ä2±Œ…¹læ dadO†Ï+…§áëRø&‹ÚdÓ«dõLü ’‘XˆÊ¾Ü VÙ$c°å$[«ÉƒccÒ7IÎ×b(¸½]ÊÉxQº ‰M&‹’ Nåx9)tRâtBl^§LöÄ%»„.–Z&"”â-ĹH‰¨AD¿‹‚¥• ·XµZѲ¬rgâM%½kU!X TQE 5²/‰Ç‹Ê–RiTÂ݂„7*¢ªâ X™ÍCê.µFÆn”‰uF†µLöšÉ-âÕˬŽHúÍ;äk=iþøq‰ƒHúA!kÍqF±Ïìˆy~Wxl\xxLÔ@\±·2¬;†Ã’àCÑ;}Áî!¾[Õ*™ª¥ô•’Š1¢H`pA†ñ]Á R•†S±j¤P•Æ´Òy×<&¶Ò5¹P¨c5Igc©û€¸j´—LKJQ)¦aºFÄVÎæR?ªÛ—VõD¥Š!+Aóê:@õ!Å‹J¨402Ù e¿–>ßåàß“w6“#"¦pbgšL¼gFÎ͆rìÒ öÊeˆqcŒ\;6//™•#›;zNææ&A^yùºÜºµ.€tš±œZ“ÈZñê()Ä Žîô¤Óår³yPpîøˆœ<Òfv¢.fÈ•ž¬l äÄI¼†y;ØJÞ§¼U ÷zÇÀÛÄžoÖÿVöËÛ<÷7ÂϼÍùãmìë­bcÞÂ9½–·°í á È;ãûŽÖä®,ìîýå;‘1¨¯$5ón—¥gŸ!í÷xï¿ÿkŒŽ£¥! Ès‡ÖkD‹'®ßbòè(eû…ÊaÝ•žæhƒÈ*+Ý-<‚÷we_cµEÉçæi/á¹nqwÑTÕï-ZøôoŸàÓ?s”?ÿÇ·Y[ësò‘iÎ><Å>—¯î²ty‹Ñ#£L”†hJ 5n˜_žæÌø,_ß¿‰É‰Á) ëû=ÎLÕá™­B•ª$°ØŠÂà<>Í n1¥ Q—~v’2wðٲا¬%;â¼Aá…vºÅQq«5Ãî~åwÍrÌÝÇËOÿKŠ‘&úê šOþWȧÿ6;>Œ0zé4ÃPY[Øe|kƒw_Y䕳Wø·Ý):r“÷„L}¡Áúõ nÖF`j#Ÿ3ØH§ gºž_ûÜý|ùä>3kLä1žG@S\þ<gä½ì-×8úãËD %¯|õÆovÉêûœîüÆ€²Wãææ8û\„„ýÙ>û_[Có»½YFFnÒꌔkôf&èLGtw›ä·Ç­¥h3¥È+U³aR†a 3G^SòÄÕÅ6©V*WIuݵÎTž.’CQØÊÅÙzšZ€ Yi1qH£™c-hÃâ÷„ —rfê/¯žgç`”°rõÆ9Î4 ‚NAÕÈrÁ÷l M€–†¤–±±;Ëú`Œ£ÍK4Í>·åA–ÂÓ´ú·ï€:| µ“ˆ{ø$˜?@m‰‘˜’€ÌX©T‡„0ôt2(TØ =^+`è*?4p´½e ÊÐŒ²¯±ˆiØ—>Š"DlFœ©áSÈ–ÛDí’®ÛgyÐÇ–…ÜÀ'¦N– V"‹¥T½Köy}ž†(öЮܠ6CM‰-j­Ô¬UxßáàîÇ—*ÑÊüÐ~¢í(ug¨©°y¨”ÕõB‡ª")töP¦½!ºwK©ª!U³ºW‹§R׫úø=<oÉÙÍ.忀øì8&´„. g GpñûGËè#¸Ì ¡eÐ(Bòر_ëcÿt{y„2Ú@q‡çóÚäÉa5F½ùž)R;@]óî$ ê©ù!ÆDôQœÀuÖa¤ê¡ôþž‹|‚¡/ÑP£M¤ð•y‡¼Öïq$qxªÞðîs­œÐ*ÅaƒzhÁ‚] Ùú½í[žÁÒ?’#ŽÑr0­–\`Cê<-”QÉxQ…ý8¦í+±Û゚ óÓ,¼t™G¯,!—9ª½pëÐwGïQç”ÖX“¹3SœûÀIF¦Û¼ðù |û3¯¢‚$¸Ç7ngÝFÌFé˜ÜïÑh…½x‹h¿O°|Àé}>ø3÷sîdÌ·ó6_Üå ]ãü‘>7‚:;¯nÐyñ;›äYÉ©ómt$çËi‹n»C'VòB‰ú9g÷úœßÜ&›nrö]c9×"Œ!w_ûVÉÞ¾réJÉ‹ýþäâú!½ªÉcÝG«UçÚÕe.]ºEž÷~Gg:4k¥SrçQãyd&➘añþ.ýßk¼²Úgjwí­ìóͪ?èý•û€¼Á|ȹ~HøøÇhOM ªiJT¯QfÙkM$Ué\ú››²qí*.ËudnAl½Ž[Þ‹ŒO bе%ŒóìopY¡e^J‘LÌu?s ;w£Æ;Ù¾tUÇO BòÂñ6ù…γ05¦Ÿœ— 7ÖÈóòn‟þ/Èßÿ…SºóÏò…oìðëÿèýú+ï!¹ñê&þÙkDíDçÉÎjõÐh'êÑЂ ˆˆH÷Ü騈‘Ã~|ÔŠŠ()Œî•¥L4ëd(ƒ¢P#5RѤWq‡”æÐbŒ%ÇSî5õòÝ\ʶ5• ÑT›ƒME²ñ3nGüæ Ôé^w‡õƒ;rÐÒ½}ÂÒÓK¦¶öXø7¦ÅúÅäCRß¿C²{œlä€Þä3Ì-/ð•£:œ¿"¯ÒáäFƒéw­0ÌB—BÉf ßYgìVFËÔH‡uj㻘ÑUškGô¡kà¼%ƒñ /“pµ¦yÙŘœ 9 ´Œ.8¢V.7.œÄµ~pCl¦l•|c`õ±r_Žoª^¸ßIÔ&Ÿi0ã:dQŸF :=+í² ÖJb$#Öƒƒ¦$£ÖîkÍ—’8§E`Ńw8ÔDQ#ê #*rHY±…b³ª+z§£aœK”d6$s–Òº%õ^ Aà‘¸’ê5Vp™%*RqrãÎ’d¨ƒaK¢Î°‘j±Û”b«†u£jB)Ë@Û£]Ñ8dsgT޵¯2­±aޱŸ%ÙÛÄú€"šd¬þÓQ þ,pEá%0-ÁÒÑ&Åh€2bodª´”Ú) °*KíŒÄ4] ·ƒ畨ˆ Qœ)ÉÊP#ʱ(ãzC˜êt-%ïGÒ*”Xo”¨-ÙóªY&’$06 48ÙHØò9C«-ìŠ Eo÷d˜q6%Ó‚;»%'âEº b“iÏ*…äˆCfÊY²MP&E  Ô‡ | qéÄzU!(Á”Õé®Èa5•(ŸEDÅWv@ôÂP…­šIêyÌzàèˆ"j´ Œ¡ªÁa´{Ø^âD5QdÌ ¡?”ø5ªÎ ÓEH» Heµ1 /¢¢yTPsVD Ͱ¦ÁSÛôž¼)c¿öˆFÓ-i Š݉úbïæbÿ‰yåñ ÄC½$r–n+¥WˈžÃ\P-¸.¢î^÷½€îä{½§<%F@Á[AÈ+­Ã–ÕI‚ó¥ØÏà‰qÒ†•BÛ…ÄõÈXÊÊe NJ”P ®tx§U°[Øîr½@_ÓwÃ÷ƒÃg®R ˜Ã ЪIh%þó˜/„:ÜíJw‰¥%É»k:544ÙBÉÄÓ ú·ÿl‰•[C”è ¯Ëï{„-ÈÔ —x䯲Š1róì"¨râÕ›¯­[Î{²¡2:Ûæñ¿õˆÞ÷Á“²qc‡WžºÄů]ÅyꪈçÕ[+i`óœš/‘@¨÷3»º"¶ŸcäìlC?ôþy¾`Gø×Ò(·õs…<¹6ä _¼¡ßyêŠ,¿ºÃþ^Îpg 7®wåÃ#¼Œ±8ê{wdqm›š”ŸœPfûÀ¼Æ¡¤eÁµkO>©úGŸq\YÊå¡Ç6ÕLnÈõí˜Îø4=x\ËÂñÒ‹WeéæEYÞ[‹k82Ó&Œ"ÒÂk#v¼ïxÄ?ü[“ræ¾¶.í;¾ve i!Œvbõ^¥,­©ã=ÒíõÉKÿ6 Öïø€ü8 ÞñyK> ïT@Þßwô·w˜»ÿÇÞó(W¯ÑßÞAÄpã™çؾ~ƒÆÌ4#çNsí³OÒߨ`çÆ ž¹qƒ½½ÎÿòߥޚÀïìáœ'³¿xŠbå*“Ç,©¸ög•#ûúÒ6‹§&I¶që·±'îgìþ³\úÃÏP|<%¨×QçfC_ýô{)ö ^½¶ÊSO_®â!?ñøÕ¿y‚ùgë\H3þƒß|œÑ‘„ßû—øŸþëo2–Lnö˜?Öaz®‰+Ò êK4*‘¸Qº‹EÄãœGE 0hà°>`{?e%é2;Úbm0 æåu[f”•3øðõñÌþ3èa¦Øßc|#ÇM޲>a8!7¸°q°1`|îeêí­¡`ký_þ%†Ï=‡\£üL“ÍñiFF‡4V§Ù~ø*7ÎþKŽ]þþÒûyáü·y*_à#kpæ#W¹ì…5®Ÿc¸"˜[Ê4¤»2KrßUÜȳ”{GÀYÄ(íÚ 3ÁNRä±;Ë < 'Wh·w¹þêi}hƒÆñ%ú6)K¯qÿñEf¾‘pçïÝäÚé5~ì•;ŒMnñb'f3ëÓÙIˆ‚Œq]Ç’q&ìívk§DÍ!]£DxÜ¡Sµ‚f†¢æq °}C(V!t¬ƒ†ÏHº"ž8öh`Š­2ð¢ãȲÉbF“!>ªøöV Ø‹—5NŽ^¢ßˆØ®Í0èÐin3<°x­dªªÌªGKˆÙŒf~€¸ªJ‘¦ñµb ƒá©íP3JYI4»JÎ7²Ž I9áxP+„ÁaV¼4U_ÀXRbœ%òÊzE5ÂMÖÍkiõ»Bawé4[¥RX%4–vYÇ:‡H‰wžÝí!÷ïט©5y—Z¾Ü!wB{˜Pº’ÁžÒŒÛìÕ‡ÕʼnËRÃ+Õ5úî5K+u²Jj×Qq‹À–‚¹+3jå59¾·È!uâÙC˜<Ü’ ìOè-ã ›Nðˆ©²îíªÙœ1gHÔp×£^5µÐ<™-1ÎP%{!iQË•‰¼EÅøÂ¡…C¨$‡a^É~?»±EÏ4ѺÅì—D•ÒiX€5„a­RWÈïž‹pWBø.Ðÿnlpï™j©Çs· Þ($Â8‹ ,¨{K=5ô®5ÂÅ:Xƒ¨0â"jX¶jŽƒÈSë+¾ð¨Ñ{e&‘ÃcÒ*(´b+U`äù.ïÅM°O‡|5 7}ÒÑ.ÑϵI>ÝaÔ M]ïHñ„â”Ô‚GfXhî²õì:§ŽÒ?2ÍÜó9wù&»G&É€ÎÖíƒÃ «Ô¾ŠÜ7#fNŽrîý'éLµ¸ôõë\üú5¶oÄÅu•:H{úí:#M¦o®Qª‡º+#áT‹Ï¬)_ÚÙàæˆãøˆò¹—6xêkKŒ­ìÒ‰Á„1V=e=d»Ñ >(ÐpH§ÈIÒŒ™ùÇïëpa¤Ãó&!Ï<·¿x™ÎK}9ÊÆÔÚ%Ÿúôáô>¿ý»M’±Y<7ËúúßùÎeú½á_úŒwêØ0!Ïùð™„óGcÒ­”ÿëë>¿R0(àܱNªöC#!^•zìkT*—ïŒwÆ_»ñŽ ï[îÿ#ÃûVæãÚ7ž–´{@{fšÓ| ?H™fŒÌNãËÛ¨SŽvHf¦¤á²¾·‘öûüÉç¿"—?ûYzœüèG9ùøôD½[!Ÿ?Iúâ—™XgýäŒô®­¡ ·¯nÒm`—.á¦æ Ç?öa ëu´tÕB­àŠ’Íô@:6á?þÕqéNŸÕ[+òS¿µÀßùécœ}©Ã Õ–Ç~iŠk—¶ùGÿðIyù…õ{ç•6'¤·p–|õÓYQJàm•a÷)š€H€˜@ôp2X©²€>x©9Ë~7e_JjA ÷<D Dó¼2øÊ«À&Òˆ®dòdý¦T:Û!E*& °q@°¹IÇ‘^Ð"ÊsÉXá?2]¾ÔùצN#°œæÔã7¥¹œýÏÏRìb/tÔ»Æ/¾‡Ý“Ï}IN¼òKŒžx‘;}‰Þ7ÿ’ÕºÿÈó˜¯Nñ?Nëø[×IûëÃ:ˆ$=Ùë¯PäĈ$õ„¤6#»Å%\©„Ö‘»å+GiN/qêüEÖÿtQû Ý’;™@¢‚±4ÚmI.qÆÑŸòWV9ÞxUþCp͈¢aÐïH¢LF«2Ìò²ÌóåÉ;2ÖÈ8³;.‰† ð¨(êĪÐôx'øLp S¹BX…0N¥(l vàiX„ì¦mšóû`c=‘z¤¬šÙËPÄÖÁ¹ˆ€œSæфܩ¥Ü‹°ã^0úÝèPP°¶”îþûÙ$pv°Ç€–ãÓDÛ=‚aOb¬-ØÙŸc_;4F=Þ—"ZVêrF O8()ÛH¤à«{$§‰ u¯ø°`¯ˆÄ•ÐVáv…jâ+Ê"{ÀTÁX¯ˆä@<©É‰6Hê•A0À¥‰à#œé`òMކ&TZE@,*¥õì´S)ŠOd•J—8 ˜ÌAí¶X“2ª‰ú^Þ\ ¤øp Ƈ„¥ŠñeezˆuÕÚå ß€Ü[?¡¬BøïÉ9=ÌÀW ¡‘%>lÞ/ +"‰GZ˜×¬E(—¶·ÔƳg8”ÐRëe¦W£žÖX›¯ ¤|n•Úùi‚©æÿÃÞ›Yvž÷}¿ç}Ïr÷¥÷î™éÙ03@ €(’7Y¢6ÛZ[qä-±ý%W%’ŠS)۩ر*–TI)%»$KQ9‘ÚIŠAp€Y1KÏL¯÷Þ¾ëÙÞ÷ɇÓÆ’(`@•é¤pªºªoß>÷žóžíÿ¼Ï‘05dg7šˆ·@ÕÂ~Ž$*ê!rë…Y\V=öJ‚~í\’p¼¥ôÀ øÅŒÒ]ÊkyÛ¸ã>¨yYÞ(‰ñ„*„ªRà ^ëÛ£òÈ*­0†Ä±ýËרÞß–•ÿà8iš35ŽjlÑÜ‘ÿî6ÅËêï^%ygB‹×+p~›ƒq2%›/ ëI<΃í(|#Ù/ÆL®§ôG·E¾; óá&é¯o0º:óÞ²{ê^1^È3Ð0 zºKêá¥Í”Ô‡òèçŸ×Úõmn¯Ì1hÔeýú&õñ´´p^ɦž¸nyðƒ÷rò±£Ì† _ù¿¾&·.l¡ªDõ2Û%H”"P)¯k$ž¦Ø,GCèËóÏ{'‡i-àåæ Õ^&ù\âøÎ€ðžC Q9õ‡rO!a•B¿¼`°¼ ¯¼ë,ÕÌÕB®,4å²÷DµÈ £™c*U+ ÚÔ®ÇìÖ Ív"?ðÃ[<ðȈ_znYæÖ—ÀeœûÆkœ¿´%>/‹#¯;+—¯­å£ï¨ñ¾†w¤=ê«/ôåWá2—ƒŠ\]Z ÖR§¢"@ B¡Q¨L áè™Ã„ö·ìôÆoë¼mÃûÖÇëmÞoñwDèÞ`ö;µüaä;°_wu‹1V+Œ}¶/\âüïþÎ.+O¼»|hæ³þAh;ÂÒƒ÷³xæ”,;ÆÇŸz—ç¼øå¯rý+_¡PÏþ­›Òèté¶ШÊlÖ'ÈÆ¬žyˆá­ÉhŸñ`†óJ7ÎÑ¢ :~Š0 ¹üéßfå÷áT™jÄJ4¢nFVZmvf{RÿÞ)?úÃ'xôü£V‹a7äÒ7vùçÿø9÷ÒοµoË?Ä©ÿô‡Ñ{–û÷Èw'ø·—2­@B‹Ú€¢p4È›ãÒþoJ aÔPdŠÃñÞÃkŒ Ç~–Øò¡)¹GxÖ‚ØLÀ4™ÑÎrIF=F±˜›²ÂñH=ã±g8rë<³¢à|Që<ï™K¹‘El'BÜßdý؃ŒO¡¹p…cý/0í¯2Ë™¢¤ÍÞÉ‚¼Ncã,{'¿DëØuZ½G¥Ò¸Ha ‚“Ôö×qiÆt¼EµP_ÙDXÃí<Âä·q‡WÖhÝ8L’®‘[•é´Ä‹üšµó¿ÿ󧯱¿×§ ãùœ/%!ïžÝB^ª²è# µKKS‰‚a˜Ó­Œ‘ê O0êh ôÒÎ/ŒxöÔ%ºýœ³»1D†ÐÄ•9¾N…$µd)îpßE(Œ¡Kä*a©°Ù€8œ2³uDËb¥jÀ—A0‚bð6 ÔœF:f°¿À,¯Ñ™ß!™ÖF)F>ˆñÔ ACyíê›r¨þS™ã¥êÓèhL<AT¥°m:ñmÖë "ÛEõ*ð*`,&‡¼³ßv2š.äM*He7V|”1Ö‚0¡"ž=[nxdsÔ³:‰¹z…b;Ûx Y2ŽÊ<®•òûæ»&a!€Ç¶á1ñB…U°QÇNŒ×©KˆFCÒhÌ„œÌ+knÐU³Fdri@ÚKh>>±°ó/¯Í‹ä÷UIÒœì3Û¸ÏmÓ8ÓŸ©QhYÐQŠÌKЫ õ=7böÏ.P¼2”àD3q¢à#!¨*òÉ Å³3»OqjÆÜÌ‘é6ß¹ ºP!xÿR$q[˜¡Ä‚ZÈþÖˆµ?¼ÌÂí…±«M’)µÞ' Oá=Þ«Ôšä~N<²Ît?á>õ2×_ÚD,Xk0^ Ò² /ƒ"ÏD•0sW]:,H+—ŽŸâòʺ´6·8t}—k'îX¸¶CÕH©9Ð*€ó —»ÜxÏ’ùà‘ÂaÔ“gžèú.÷~áeN¾|…£¯^ãtoDÅuˆêÊÇ~`“{šò¿¼È§Ï/àòŒ+®qåµ[-X›3fY ÊÌwªüí¯ò_|´Á‰Ãõ^Á¿øý>¿û;ÛÒï ýõãH½¸ UGiP)O/?ãR[[cíèKõ–ØÆ“þ;­äß|'ÿ?ÿŒ0ñ·\Þ.@Þ.@þIJpò¸|üý×%^W* IDAT<øáÑ9¼Æ¤×£½°ÈÒcàÃækW¹ü…/Ñ]^ ÖjR¨²£"=± ëº=ı÷<Îþæ&×¾üenüÑó2ØÛ%–Ž.b|óUb›pôéï¡}›i¿GÔl³vjbØ#<|Œl4åú|‰ãO¿ï•Ôœˆt%'SCœŽ>ÉÒàä­ˆª]d#þÙ?ü?óOŸaw§L­Íu¨­,‘ö±Æ¶+Ø÷,£Çø¡Á>ÁÞ>…Çú2í }â#–¢(ØØÏÈñås±fœõl¦#¦€9xàa¥ÌIsÄû2%=°ågI$v–©æh` ƒõÊGÎìóÍÁWnV¹h2 gÊÓEÊ«TØÐ Ù€¹L·éªÇæ…  ˜¯É¥†‹B²Î.ýCß`éöž;ûYlåš´^}”úɸ٘éþ*‹¸t„Ø[´î3ÝÉ™V×(¾+ÃSjϬR·huÆÓë$ÙŒ L°AÊÜ1¤2§ ¿Ve÷\—#OÍèv\p9/Ž…¿TpªñäÇTß1ãcvŽ#•£ò‡;‡ùbÔÁF `LehTP ÆI‹aºÈÖò.Óh½¯yVoM òœP”:ÞGä1HÅAaÐB¤0BÊxÍÒQ•Š-ˆqä‘5ÛHªå¬ªUœ ¡(¶œ‰,Ø@qÞP˜d\cVÔ˜Q§ÓÜ#3f¿(§•lˆÏ…¸šPíìÜZ¢[½-óÕ2©óZô'ÄÓWm#ª‘2×éÑò-¼†À%Ô¨¤˜-×h†È$gsv/7“U^ËV¹–’á𾨩a–7¹&¡†ØpJ½ÐUÈbG+ÌéÛ2÷!Ï£…£íC¦¾Å®_Tº[.`ÑÇ,Yf5’Ö¯„·˜K;¬kƒÕý6ó¾Áî’£é„Q,D·Ñ|µJvâ:F<³ƒ¤PeM«D¤]Œ .!*3C˜ç`¿Y€ÈAÒ¸ÚºàÔ‹ ,jÀ;ð”…G,‚³ß,@ƾGÞ’hù{ó4ÏT‰a&PQ¥î„¹ÀÝöxÀV„B”ZR/š.À!ý(Á«‚Az1½jJ(ݼFkË2úü5â{ç‰ï'J,b »íú×±¯ŽÐ§—ðO,L=•"a#Á[CåBŽ~e§ÜG+¨+;æŽþãà^"*øƒ|kJ“?p§ò¹*µ v5&´)âÆ¸L š#ˆvã2/ýìQ¬ >O(šó@ƒär!ÙEA2Oðá9ì»»dË!¾eËpL‘×;J‚ZƒÉ•âÓ·É¿¸‹x¤ø•›ÏÄ<ÑÅt#‚_‹Ð_™û˜ŸHYø;]’ß¿ÅþÏ_aþý«²ðŸÝOÚ4äžÙ¿òè"$+BËŽ8ËZ­ÊI…ÍWö¸U8ö‘rÿ_}(wŒ/îágz@Ó»çÑ£òôO¼›Åõ9^ü­Wøâ¯<ÇpwŒ Ëâ#H[(Î y,ÿ–È¿¼O+Ö Þ¼sL¢ /Ÿ}ûÍ6«»[2?ìQË2^{ðÍIÂBŒ3å±Â4*F$–.Ýâß|ŽãÏ]dýÅ+ûÚ%½zƒÖ΄j?¡6H°ÅŒ¡ïðÔÆ'=ÿä÷Žr~· 锯|éEúûZøÌÞä¿üþÏ^ι¼íù©÷5ùÔß;Ì?øÁuÞ{ªÊùÍ‚_xfÌ?ÿÂ>W/MHÂ%é>… bpŻH‘Õòµv¥Òia‡SÄ4ë5æ«!Æ$YAžßIlõvòvòvòvò'—Ö견=þ0­Ü°Ô^àÞ÷?͉3§ÑÉ„ÌTÖ9ôÈÃØFÍsl–¡¢’XËDŸÔêuÎ<ý>Z+ËÜ>÷ªô¯]ãÊ3_¦ÒhpäžûpÉ„ýÛ¨;‘÷~ˆíÏ1ÚÝ£{l8éáÅ.¢½¼L{u…Âygâ>q8£–NÞoFÜÜoƒ]BÝ€Oÿ› loMx׃ïàÇ>ô!îý®'©|â{¨Îµ©^¦˜&ÔVqµ¶8>˜XÌs¶rÏ(WÂBK¨¤Í©!u嬹JY``€”³d>ECÅ„ÑÁSü€8âÊ28Po%ã1µ^æl“t:!­ZŒ1ä3Ã~êxç©W7>Á×_Xe¯yAZâ9»ÕešVÙ¬*›yD<ÞáGk_a²Q0WIòÕZH:[Ɔ»Ôz]\{‹¬ÑcíÆ“´oÜǯÿÈ?•AàX8ÿ«§n®æL_[ s!³¹ ZK·q·lväOM_hÿZ[ËûLZüf—œ«„ÕŒýíuâN[N=ý :só‹‡X|ÏMf2á¢\œ8>j=íé!^v#n>6fvÍrº_—S‡ê|5oó+a—ΤŨjø{|Xð »Æræ8’&¼x8áü‚çÄV…În@u6 œ¥ wºÄùŒI­J=,¨zsÀ|+f. ›Æø4Àä†H=±q€PGE!C®†Ðx¬ª˜€˜‚"‹¸¸q†°;£ª³”¢£ÐWĕťËk=>Œ™öB«7¤'\ d']¥²×G$Â×tŠ-ú,w>CSïÅ«¾ ŒÀ”.lÉr•Ž“ªzL^Çûc Œ¢¦`6›#®S¢:\§šv0E…pºL<^¢«a}Fácö}„39 „AÒ`Î(3kÙsåü{Ôì“gsc̯³tS¬*¿(—W™+\oçØ’U½&á0bûøj¹ÍÈMU¡íëD¦sµ¸xˆUK%¬Ë1¦Ì-µ ˆ”®FÔE§^Œ1xÑo ¶ÌœpF™„YIE*J}Rfq±À@îе„‘U"`K-¦›Ž !Ã$̰guR¡ê {µ‚­Êã EÉʨÁn#¡JH핌¢7£þÔaâZ•ØEìuRö/mb?}š!þ×ÑNLœêY@:v:jy•`#Ãe |Y€ÜœßIü¦ýNQ´Ì1`°º†2‡gJhTl€ª'wŽ<‡øÑ&_¸ÉÞç6|’Ñ<6GãÃGI/ï²ûß^•ì‹u4óDßU%Þw ø¹;,¸2ï¨,MdÐ cÒ_¹Ý»^qLð¡E1Ou1¿"¿X%)&ðcS©0þ7›ŒþÕE–ž\äž¿ÿ äM¡3gösJò A?(tç ‡3Kd ¦×ûìÄÕOÜÏé'WeøìM6?yžâvJz¤Bíc'yôäaN­Žº2<>¹ÍÂö) ­ñìã¿Eëü#,½všÊêaãÃÙ vÖ‡2\TuÇçñk¿Ø!ºÚÁ¹!×éà Qº)„¥#V­«,žšI6 tðb]d~ª«§iwÑ/í8¶ÕñáˆþÕEM¸½š!Ÿjp<„S‡Rv‘­ñY]u òòr_Ÿ=ÊR–ëCÅ5Näû²ˆ>sXåÕFLxù˜¶S1™D³\㾓=í"GRªÓŒ9_H-B<42R‹ŒÓ Îø$ÒJP€U)¸=zP„QŒ–æ®Ó¤Ë¬+0’U §ž4°C'Rˆª 0VÅFèÍí>c½u‘((8Wy’ñ¬J}o #4l`|Îñ拲ں„äß­èÈ+ˆ^©B2]­ps>gÉg,3–µh ö6óѦ ^£eZˆ#­ìcª}" ×%Næ°éœ:ßB“EÌt…ÆdEéœu.H;Èè©î)D3l³¯iZaÉUYZšÊ­Ã{ºhkòÔà÷ :pCD åR3ã3¯8FEL»Ù@*m,­½›87’\ EýAJK ˆªñâš %n`3Å8Sš.d©`¬J%–¬ÈÔVª¬?Dá•Í›[ß ûÝ ðÕ·ï6 ýÍ®{7Ièðí'¡¿Ùq‘oó³x X÷ÍàËïXú·ê€¼Q˜à[ ü³Ö{3ëܘ\Þ¾Üm`oðúϺp„»KÝ@ˆ»8^êw¼óû?.•e)D% I3¢-6ót| RXðFEÅÐ0‡¬á¨k„!»½žì¼ø2‹‡9þØC–l¿À_ >·ÌÚ;Þ)Iïã›WhÞÿË÷>(næj¡Èdïäĸ´ ¶°ˆ8Ç©jOZ6|€7ŠUCcÖiÞ–ÛµžL¶Žqr9‘³gŽqÿáǘÌ2ùÇÿãO35Hç±³ì÷{Rd9±q2¥Sìñx³"ǺU¾º3cR¨D…ƒh&’×# _·õHˆ^4°VÄ{!0ålg~àxd ÄVDTTr ˜$"Q,ZœÁåÜ|nƒgž“løý¥„a×oÔ1=‘›Gv Ìd²ŸÊxóÒö0ªV^o2¿t“ú\BÚ_‘¸Š)B$N~žê´Ç™¯ÿ‰|È×ßû»4®ßÏŠ*ñÑ+¤[ËTúVªÑˤ‡Ù¢+:ª¿:'±Ÿ£íëR´ yõØXZ‹T‚ Hàlßlj\VÜ—ºL6:Üÿ‰‘ä&‘ß¹1£ï¼üDÍ¥'åòÂéÃO¶¥~³&=*4“ç½—CÅ Þõš\i$|m="•dpŠÓ³]9‘Nøƒuϵ¶áÔdļöŇ"1ÔHIæ4pôÎ-Ép{žùÅõÀIXædH^q5G¼û·Ø‹m¥x Jb N-^XQ Œc2­ªc©¹%vR°“¬2)ç3ÌÌ Æ FÄJwy$7wŽb‚)‡«×ÇFp†±«SŽÀ†xÛ$®gÌ?´%-s;xH(ðeÛ¨©¡qHш ##]Q3Nš&ª ÉdPßg!ž0«oÉ^kC‚æ†ñˆ<˜É¤u‹¨¾ËÛâ³øˆÈÇÒL:RŸ.ÉJ6GŇhÞ”ŽD˜ÎE<7kdPt·Ä/Í0"rï`ZÞöÐá‚D&âx¾Øæp\çÊž• xÀ¢–Uq•žŒÃ±lù™´Lˆ‘€ÎxÖd@LQ‘Šˆ˜ ¤,@JÁM ÝE}‚eŒAUÅ"^ÀY¥""SëF72õ–•<" öR)ix# 2•2ë#V•®74œ`"#D`T$ Y%gyV‘fnÑ dæ217 3Ò(— ÃJ¯FòÙëâ 'µw"P‘ˆˆA#cv½'ö¹>ÌÇ¢O-b¥‘¢¢²Õc¨n@ú\–´—âcSî»"wBÿ,¾å뀎&¾Lz•À–hÇŠàØ!4¹Ä&§^ò¢‰Ê¢TŒ¥ÝŸ “œAš‘;°×2ÑO÷Á@í㇥¸U¡Ø£û7ñd"KuŒ¹#ˆ/ÇÛ*Da„»2"ùßn S' ¦j%úON`–˜ÿ5œ°?”JôƒV&}Çô—®P¹t[*§Zðñ# ŠìÿNÜ‹HøW……ï1¬‰%.DŠ@ؾ1 eGìý]ê+1Çd<£sï<û{SÙüà•®sôËûr듸øüuönŽ0VÄZƒ-ŠEÂPZÍŠ\¹r“n1æ{ζh·O-Ƴ=á­ÿÈ]àª7‹Õþ¬÷ß F}³‚ñ»á͉¶åMbÄ7ƒå.ÃaOy ˜ünöíOÅéÁ[  ÉÌðs—ÅÇÝR‡¾Õ¶(oN©ÿí8&¼QQ o°žÞåøðmüÿ]¹—Õç9ó}ÆVbn]¾ÂéåE$)û.R&Í€<4ijB*‰#NiÅ2©äìxd”YË‚Ó"“ú‘ÃÜ "’Ý›"{×9ûÄ#¸,çŸù¬<óKÿš°ò“´æV\‰ñ|Nj«÷°tê˜Äµ*y-’ѹçi¼³Aó'py.V„P|IT8XœAbpßÖzÇžãŠzÖëË<ñ^G¸íx~ñðßû›2Y«SËrÚ6¦#±,xøru—½zJ—“ã>³ñ€ÇZrß\Ì3·gx¯àUÔL1ÃuÊ„w£ej³É±…ÁdMhtp^ˆ4‘iZÒ±² ­†åFG'H𡾆 ‘H»6ƒËW).7¤²xŠ•k,oípøj —ï I›1éW¶¸õìý2Yî®caÕ°pú"¯=sˆlПS–ÎÏQ´qõÌe½<÷C29þ ^;ü"ëW£½´Áüñ«p.F3+„À˜_ ¤¸2F8q•ë=ŇЧIÛá—ª)ØØáçZø´"YE96 yX‘_Ïá×ÃTܽHó 1Ù;36>¾Ëί­qó–ÊñêkÜ_OØšµy´q–O¼ò ?ß±ò©S!ïî¤k““¯³zhÄÅ37dß§4od¸"%¶éºIžÞZ]vÓ³s]Ù¹Õåè½·è® ¤ Ô ‡&2w=ÅL-y;)…;¯yn˜hˆH³5$ÊSÒ¼JN¤¥{*‚Ü îa?_ Ú–tš¨Y¾¹}væV©É"ËáïÅ÷•ªÜ;]DQ‰¨Ù9ÁíjGŒ: ‚KÊ\7*Ú\\sƒ ãµBLÅ.½ÈÈx¬1Õí¤!çÓ*Ó0ç¸kW(ȉ’eŽû gl»I/!ËCy9Ø ?ªa6­ÔgóTÅ`­²QŸJ¯ZfUŒĈ8A!âUÉMŽ%UG~0ù µ¬]Úﺈ¨¨¢•o"î?v¿Ñ׫y^ÏR@|iuà:V&…‹2´©ˆ ¤‘Ä )s?…Ž:ÂPÀúÒš¹¡œˆÆŠU)¥Xjhæ‘4œ!ò ,d»2Ô\ëy ËÓ˜«Ý ¡1ˆÅ6c¤aJ-†A#•ÑöÁwA÷ñC˜ÈJe\j\úÍ'Js¡a.šçeh«X¸#»/÷\Dõõ£;%ÉeȃðÁhI)S£^aæ2 MB¨¯\¡vdÄ<éÜ.ÕÊ”j¿D1Í¿|œ¹w/3˜Ÿpë_^”éÞÀë„èáeQÔ—ç(Vl©Wz¶‡»9ÓŽ‘ýûTódóK¡Ø¯†ÈGSÌ_,˜d0ù…K}ùñ±:•¿~ŽÌ1ýú¬§ù×…æGŒ,;K% u2ªZïXfºZg’*qUè>¼$ãÄSÿ Ž‹YÚI>{—ž¹IPEŠ`¼`s)Q] ö€üÀÊq^ñ²z¢ËÜ¡®ìíŒØxõ6éÔã,rõÕmÒZ;ê±²nY?5ǹs3IclPºElnÕùßj²ß¯„ãöÅj³tŠ’e«Ä•yV× ËD’™¥8,"ï}2g~1#KJW3©(§O;:ms"y•$ˆAø¡'C¶û)ÿý'7å—¿°Ã÷>²ÈM7'a­F(à]J¡¶·™Ûéssµƒ7Ö!,mÁ#A‚&•Ò%ÏÊ “0DƒU'YîX® TrOIâ6H–#ΗO¸2>¸D¹S¦ ÒhŠ •8–¸P]ªë÷°¹¨£ye(i6Ò½c1Æj}¯OûÖmÌö5¿G>™g£Ípœ‰h®¾éÅÒJìJ)‚,î,ÓþÚ*ÛWþ€hÒaþä>e wBQ®h¾h™ÌÿâûްÝ(;7™ãФË`y&7ë}šûc¢VŸÓßuSj]§ç¾ò˜ô7tñìeYl5ô•­&ŸŸöY° ïß äúdþ{FdkŽÃÿ{‡Ý¡%9êä=µDÛû™lË骜“‘¼¢—Ö,‡zY~­«›ÉQÑô$£Ö¶^Ÿr8Y÷ «S +c¢,'b¢õThz£ÂÆõUÛ*q!íJN.Â Ž´º”P5^v6—Õ×JŽsòzë“ €&åLê~ÐÖ­ä0•lBÅMÅwŒz±D¹“[ãuø€“ÑyºÕ>7ì}Ü”ãTww1 >šC,T»{D«¹$sý+¤¡²\ÀWb\«A/8Æ€W“©«iR4HІhÖ&ÍÚÊl‰ÊèÑð8Õ¬Æ É<.kë°¾Eõ¸ì›Õ¾T–¯è-™ò‚ ¤ks¼Ít‡\g‹,hkÖeÙ·Yœ–ÚæºÎOºÒÈK9÷|ÑãÙî./‡UÙ›î³&9bjºZ,â$'ˆûlË>CÉèÚˆP#šÉ"qÚD|(y}WóʶTRQ£¾^P°DËÎâ%?H·¶Æˆ*ê½âB/ª12³Ž[Õ±Ö5-Bf1»-5šˆÈ ¼æ"F= juÎ)(é8¢e§6s:E¨õ< R#ãXu£>–ÐÍBãd¿Í­æŒªZ/åäW÷©÷1ÂNU𮮣fÎîÞáoÜF¦÷×îZ‘V¦B\Xú͹x©„U&=Í?¿+’x$4*ª”4¡ÒT\¾Y{PöƒîÔcwL²krUÕ ²…!Å«•6E±‚—‘Á3WÓ©.Òúè2Ë?y”èÉ%âïY”¹£bŒHàÙûüUõÓ1sO‘ÖýKêP|™¦.Æ a=Â]1ýé H¨d*Z °w]ŒÖ°ÿKŒY÷Ø¿•“‰Èèç.iôÉW‰#*ÿ!Ì}+Òÿ'Žä÷¼´ m²œ—¹6Ø6…ôŒS©G¤õX²ªFÕeê…‘âv•õ©‘¦u/Ïdôü&¶jÊËÜ—ÎÅÅ)?‡‹6K!ž‚+ÐJleõļÚJÄîí·ªVt IDAT.í‚W PƒŠSFç÷dm^õ/ý­c2·óÒs»$³òškŒd³Šîl†â|Œa[½™•!³Þ#âS0œvY=T“S÷8=sÏŒ}¬Ge £ñRÁ¡cMZ÷ÄR_©h5m0Üm°³Õ¤¿W%Œö)t,ƒ­†¾rÍÉg_ÞÖÿøç.òÉ—î9uRòÚ’ò˜À§PLpÅ€(³¸7bܨ²³ÐFP£ â­h Po©u‘Š+Ê{w¥Š†!X+*ÉDüh ƒ½1¨a?ËxukÊë!'ç\¼vSö“·)XoS°þÝQ°þ«?Ör‘o£µ&o†âsUÙµØÞl»înÖ{³m¤»¡šÝmÛKÞ€&öF­Í7³?ñ½µF“Ógï“&;ߢ1o¸J(> KU¤WñÉB!­X²š¥:Ή3/bDÔB!* *;Ni;ωNG’î‚ ¯\Àm^çøû? ÇŸ|R¶.\à⟑¥{¡6H6ÞEg¹ƒ~$F|2-ª«Ç$-™8UÝ!TDÕ ƒæ&]n¯¾"½Ö6ÍiGZqŸßþ½¯³‘uå»[mžÖˆHB„P~;Ü“k6'P¡¨ìË(ªÈuÖi&òp4•©á “XŒ 1¹Ë)n ` ^D­b+–k™Òî'ÍE¼¨J°œÕŒCÌpVvYê5ð¯ÈRç8ß;÷ý,¯Ÿ’l¼-›~OŠ¥­w½KŠØ’ÍF$UO·Ô÷)Üžä£Ûâ“MY}ТÅQÜl_†Ý»²4êÐ;ù ñ¨!‹½ÈC/ÊÕ'~Kî­Í‹ŽZ2Ú Ë’® Óæ ¾‹VNsiΟ ŒZˆËÙo‰ô27Ù¥ÐP<ÇX:½‡ œl¼tBLä8ú®ÛœïÊçoe<{ùHó—m“›÷ía8ö©í“gäæüŒi¾Í½‹*Éô0»ýGäÞÑó’E^8édÕoÒÝî{kt{m¹¶²//­d¬õë,åˆ Ú~5*{óK4æzòÎè‘<àÊkGeïöó+}ꌉ32•PLC #/ã[]‰š©xãoм ¦(lIŽ1¡ŠIMTzv^¦£:ÍYOl­@ëè~ÄÜâ¾ ó.ûYU×iÅCÙ6Ge[Ö$Ú‰øL|Ð[ ¤vv"a7Ç«°¸³-aò>Ô4—Dü¾D⣈aí¹ÔÄøƒ´ìÀz(¸ãc„É›ŒP¦6YÉZ0[’ÎtMZâÚ7§v³PŽTwy­¾ÅóAOvÊÞÒôè%éî• ¯ÐÊOæÙïÏ“L볦\›Ö¸eo¶IÕå’Û+A,kÅ’ M*çÛ×È¢Þyš6ÈÕdn´.aV£Ymö¥6³XQ‘Ò 9(@^¿¾Ì.1Öˆ*x.@¼Q©`˜YÇne*Ö…oÚ‚Ü[<"¡q` £ÒôÂ!µ)ÐÊWÙ<ÑÀÓôV:©ÅÚH¦¡J?Lˆ\ ãZ‚rYר«g¬LšÂg7eüÊÍï:FP¤æ*L«… Æ}±_ÞC¦NøÈQ³"Õ‰!‰sFµ”ØT¥8·ÏþÏ\ß÷ذ”——ûÎå­J R2:åNŸ¨ìˆÓ2ìÏš§óâ%o ζĒJ@îæÅ˜µ=б8ӑ滲ôH[r#HÝJ]"ŒÉwGì|î%‰«râ'a®Ó’I‘In¼xÀzCxFè®Mñ7fbš^Â<°"æ§k˜¾ˆùI',¤’ýì+Èg®Pÿáãÿ‡gEŽ,Ðÿi'ÙTiÿÒø¨eiå5•ŠÊŽq8Dœ+«­y„ªÀÈ)cWª@•XTòv,ÓÞŒñ—6ˆŒŠ-T¼¤8…-楨ÜŒ8ÐS­…rêñãŒÆ‰lœß&›ebKËt…À!QŽ'ÌtžC'kråÂ_žˆµ1]@1>KŠØB` Œ_/Õ¥;p(S·$›;ó‹;ä݉üV/–ß¼óÌ–‘q8'º¸Ì¶ô/#’ìˆË‡dÙ çÆ×o“eÙþÆqùÙÏŒù‡¿}žjg…ûN•ù¹6Y–"ÅDȦ¢~&ÞæÒÝO¤9ɸ½2G…˜’4‡ø ÑF ëc$ËK._¥‚–ÏlQ¼HžB‘‰d3Š4e0JñêÄTÏÈGΞ‘x²uýмº©Ø•w1ì]#º¼p÷4¨»ÅŠoÛ¼nº›õyÜ%o‚^ÿF%yƒ±Þ:Uên…¼Åcöfe b{ÿßÈ[Ñ|;¡»iëüy|¿ÜÅ6¾Õ›·Úªä-Œÿ[×o9fQ²ÔîŠ ™ÝÚ–ôÚMôÖÍ1"ܹ›§ê)¢Tp! -N!«Fb3O¸P«èÍ)’uçan‘ìÚEÆ^¢R‹YïÓl|ýeñË¡p468R "ÆgÅOLâ« :5áÚ#êK+*!ðeX5¯É s“AÚ–F¶H5½Äð…[ò}gÞƒ!$àŠzùMÝgÔ܅СÆI8ªÅ˜#ÛS`z<á™í™¸SòŒ1‚Øèëu ‰åoÖ™Ž÷Í/†¡l% ÆÚ|äE .ÌŸ@°¦äç&…Ðj‚(.9TWÂ\MZrjc™¯×^f¾qˆÓË·Ù²C0wøñÍ9úó}pUOÝ`áÞ»¯uIFû¢5HšÊÊV‡ÙeÔH«.¢ÿÈEV^=‚¼ôQ|–ájÏÂ\“Ípâ•\b'hh¤Ö>Bµ½JQLh *íel£ÙDò,âäûö¨wFrõg©Néž½Åñ‘•¯m¼ ^Né€å¯…Ü0!ÓGf¨‡Ó›§eee¶.cš…Ü?÷*{³Çe–Œ‡ƒs ü†|錡ãYÜ©»´ûól,õxqÙñ»•Ê-÷ËyŸv>$d¯1OÍô8Õükk’L Æs,-Œ˜È¬jaXP$Q™N[4·eèšU‘H‰Ã$ 3'CÓ%DÔgCѦ 5‹nLEd?í¢y.ëáUf•®|#xßK© SÍk´óµöµî ¯žÅíÂô ÔìÏŠš"!>ŒØo'“º˜;¯{$Ýùí`É^ˬsQD >›'N¤íZÌçjÃÃ,NŽp"[‘v¾ÀÈ8É€”Ã/à×6äâ4asý9Ç®a¦UZ‘gê &Ã#2?^ãØpYÝfËÜòÉÿÃÞ›Æèu¥w~¿çœ»¾K½Km¬*VIQ"%’©¥%õ¾¹ížži;v1e‚±óa$@>äS>%@ â ’™ à{â8î±==ÝnËÓmõ¢–Ô’H‰")î¬}ëÝïvÎɇ[RÛ‰—¶»;HàE…[¨ûÞõù?ÏáqiÑÊÛt£>o¶ïb½¾ ÏßÄ´úKENaÂx©&Guà‘oÙ´> åÈÚ2øN‹8ûgˆ8"‰²¯ÀåadVRZö•ÉBaeÁjZN“¹I ‚UHæÆg* ‰Œ JË{ÍCReð¦ð Ëýª <èT&}u@òàʇæñ«¡˜PX÷Ä~u ï;{˜_\÷Â4a*T~5!ñ QËðµ-òµ‹n{èÜ”ùƒîˆRvD+3âP"è?s–9Ò”¤(‡ˆ‡•i1Æ(tK|w@€%·3â”é1é+š: r2&Ï=¶½Kúr"ÍÉUÓ2î¥~{•ÙŸ~Œö󋹡/9‰8Ä Ux¾@nÉßì`îà˜÷±eü¯L‰Üõk¹Èù„쾆ýú}â÷Qâ_9/ίrø2Ò1Òþ5!þîy´¬Â¢|qûâH´E1#ÇÐÙ2£$PezºjI; ÿì ìÑ FǨâ$:›"¯Ü# ¶p<-²üÄ<§ž9Áê­mVoì㇥¡”LYñ ø…‡Ñ˜Ê,‡Ã î¼·#÷ow0æ˜h¯Hq ŽDl ‹r¬Ö8Qïkÿpéœ, øü—™|¼àÖêòò›1ËÁ¿ÿØ6Ï6¸üµël½r[v¯ßf¯û€sOïqòÑ““û’öê\ã ÙìDlfš\8}œ~RˆÙ¿ÇÙVÂA‚äN!Ê¢lAœF•ˆa%,G‰ bBœâªUQÎGŒÁ‰¢°Ì2F$K!KÀ0`²”ÌfêŠOŸAž;ý —fV*|ù–"[øe–ÏróÝ?‘Cýó£†Bÿmiô?оöG©·äG¨GˆÓZV~Äšüo\·þU¬¿NçðÜØ–‚õWýý“‚õÃŽÿª}þqP°~ØÑÚOš‚õÁJGcî]»&7ßx‹{¯¾.w_{“ÝÛ÷°ã„Ñú6×nsðÆUy¦ÝtOÌM2#ugp‡)¦b+”#«E¼Â9<‘GÏ–v´~kRtkšló­Ý'®W˜¿øŒTf§©>þ”‹æ— Rs™’«´¬.œÃéƒ;®èକVÝc*,DÄÇ–nU ¥MsÔ–\[îµïK>žàÉ¥—–šL›ÇEÐÜÖC~Wí²ëÈ›»RøcrSx.”‰Á‡]sýgX®w˜¨nÊõNWšÁ‹Öå$è(;LD•w’˜’š§M³-IJ¨51æ(ÅP­KoS%¨a"„.ðñécvúUZïž£Ø èD+ K[º]É^e† y¥ õ¹PûÄG);Ã}ÖÞYŠy„cµ †}\s‚,ÈY^Ÿã`ñ6E´Á#·>Aóe¼Bcò ’n&EýO\Õž =ûKŒ×V1žÁº‚¨6}ÄaˆÑ5Æ™BÙ ê³û²ô\B‘VåÞ÷ι¢ð¤õèí`–omÞís©fä#á3Ü«ìžßD'Š™? ¡y\²$e¾1”ÙŠR9ÈžuµHqn´-{~Æëe!=àѱ£weC¹ÿÈ-6ªJÞp_âÕú“Ô÷ÆÌ :2l5\î)ZéSk4&vDIA³²Kª#7’+Êá¼0g¸WCU2Äh\¡PºtòpøÚ¡2‡ë!ûã7V‰ó!.)”ç‚$£—OÉÎx’eu›åú=:rŒ»ú)Ôáˆ`¹§ä~­Wv/ĹQ%áD·ÆN5å`bÈl§×zPñˆŸš!ö*"džÙGþx}w„ýùeÔɺÄåDƒ8Å`GJ²—F˜C§|%Ú˜£¬pÎÉ÷Ê•©ã"úèQ†:w”ˆ.Dã¤í¬hŒ6(×ßàQ!W“àÅ"ŘFP8ÉžÂlUa{ç{/“jgÿ\SÒ¦O²5p­mÂ¥ Ù³#—([°Z%>@¶Ÿ“}c7,œþå%Q+ ¨·Eô–!OŽÈþ‡kßX'üwÎHðKg½dèþó‚ ¡öŸˆSï{2eK×À÷£sq °¢×Eæœô18!B¨¡®-ŽB{’÷s·û/¯‰Í¨9¼ôQÄÄb*÷ÉÃ-g #…Ó³"¾æÎÛknµ'~PΔ-§:bk"TÈü)—{ ,ˆï÷;bàùÍñÊç8Œhe‡OÄ¥¥VQzXåûœ|ä/VòÕ×êì]ïp®{›‰Îžô Ü«=ëcL1–Q‘»ý]‰ÊI3C¯³9Ôüé¶¼Ô»=¿f%âúýMK¯ó§¼¼r‡ÍÊ Ô±¿Kcê‚x·ÿOê{ïÉvæ'OÁúët?lsü/¢ ýeµÚÿW(X°ñ7=Î[ Ö߬ýuçî!ë!믦`8ëÄY‹uN¦Îœáñ/~©×ÅÕ*²ÿàœÌGüòg^ǪžÌë”%±,8ád°e1rrN· |dgÊX :Ð(g±"¦@ךxÇ„(–Ñ­kD•P&çqqUŠj•8lIPo1n‹•ƒÍÅyIYêìÉpc›Õ”XR©Öbq ˆ£ ´sâ›lbGuŠ98N»E—p/:ƒÖ–Œ¢!Ê ‘ñäÑÞ”\èç aäŽ'òÄæó,Ôro¼&Û£¢dm—Ö¡‚ößï@ÿÀØÿHÖáåšms©Z“¡¶Òµ…(_ ƈ¤ùјr¬¤ô†"ʇzœ— ¹Áò¢¨Ö1Ñ]¹W‹loFš›p0µF¦b±2ß<&•[Mѹ'OH¥±H¤B¤›I·³O\›¤Ù˜¡Ö©ƒï¤7·%Õ~Sâ½SRY¸+zÆ“µ¹5ÌÔM‘õÄ•G™^nI±Ñ'ŒÄ¸Œ,9$ž˜+‹%géyI´.nXÕ…¹s#íÕeõÚIÚ§v˜xdOæ² ^Ù-¤c+\Z8Muo†õM²ÙŒÊm'ÕÍ *Ós"Þ“j<Â:â¹®l÷^¤Ù\”Éø·êÙmyn£/Í$“q>Ã8PØæŠˆSf‹¼Ÿ­ ÍD0?T¢+¨_&š[k®ûÕ–Žn‰ÃPq%\õê‰äF‰ËX…ÒшJ‘À:ñó‚¼ëÉöáœ$I„Œè™{Jµ2FU´ìŒ&™–M™ªì²ÏqÙK–Ewsq^C”kJãÅ»ÒúÌ1õ¯ÑaâÚŠèñ Hø– ©àÅbkÙ‡šïŠö3¤2¤z¬Kej,q{@ØŠ„ctm€ßê ‚LœñQa†ø¹¸ÂÇž`´Q*ÇŠÅ•»ÒÂx õh’éÁ3ƒyY,Hk<ÏÜáI™îγ®“úŽîĞܚx›]2y¥þ úᮜ•r?›„âíNÉÂúcÔzÓT»s´·“Ȇ¢L$*©‰¯¢>J$HË.´*ùRˆ‘2u¾Lâb­åÈŠVò#:–Óål3@z½ 1ÏjpŠŠU¸BKÿhzà9Ç¢ÕR)„ÑžA¼ª£…rÍdÑÌ•N³VK7È$Ì<ò <̘ÅÒ |QL¾‹ô¿µ"ÕçæñiR1±\[ýµ qO4p?5/¡PI=…9‡õ×ì÷<±¿Õ¥E[Aû~¦ÐþÎ8Á"ZJÛÛ#GÞ# ˆ‡Ãj0â°f$ÖuÅz1ÚzBî(\€“HDën$OФ¡Ô/¦2õ…ê3M‰ž›Ä;Ý¥ùÞP²—H]®Iä´ÄΓÂÙÖ5v7#ù§PÏ4$X8…7FÿB.riLö?Ýse_Ÿ;)Á—N3ü:ìý÷FÜ‚Hü+*ÇÆ@1i¼÷A‚“²Ò[f´â$ÅIzÄŠ•jAið3.ð%ÝéËþ«+¸ñ,~±$PHQY%QÛ`‘…SSRŸªÑ;ÉÞZ‡a'?(ã™”S([+- =%…®‘Ýú"nÇ!J[Ñʆ‡ 9bFXJ>±.SŽlÔµÈÎF*+W‡°³Ç´H#®‰–€qæ‹“ª,¿ÀdkIZõyY^˜’˜clŒÞè!ÿúAÌå$—4 äï<ïݼÃ+ï¬Ò–L..7)\@£ß•ÙqO'ý(’Ü÷ì ° ¤&×KÕ|©ï(T6v‘ñœ‘2Ȥc-µÐ“/>Ñæ£O|„ïïÍðÖÝoÊåÕ»rHEZÇž—h⢨½?aøæ¿ •"Æ é*EQ˜‡¬‡¬ŸËãáz¸þïWR<ñÓŸçô'?I–dã.Ÿ[nóé“Ç)t@*ªÚ§Ýô«)ÌB¤N´ý„[£‚[‘b-F;ÄZt{’JsŠÄ ]‹ñú}âǞĿô<©'Tãyfëuv&'È÷wЫØ.*q(3æàî _Ù YœïðÔ™Μh3QIEèͤΩíóìÏ¿ÅJ}—ÙÜ#‹¯°Ñ™á©½§y:êñzvƒ¾Ÿðvû> EÀ/tæI½>·+·X[˜â­õ¿Ës£/piê×îb Á3 §rP~)ðs Ø21×¹É(‡ØÕC C Ç%Î÷½R”îb®(/(¥"í2ΰi^ND…éïÐ?k0ÏNqø-ÜËQ3õz ­4(Ÿ<·ôwÖ‰†¨TàðÎ$¤=!\i1]¹ÏÎÚ>óíG4•Iz kì̾ÁRg™Š|–í‰Ë¬?½F°ú4Kßý8»•˜G/âŸxoï_Sä)ýƒ{„Õ)“º é°® '¿ïqx? ¨whÏïæQÉ#W]—ÜóS’ü-ÎF?ÇwÝ4ëÓwéͥؗ6·jz-9± _JÊÔpÅPghOqjPcMYz®ìžu¥ í«;¨#Îa-„mê\Ï F…‚Èjz~F&–P ñ æ,ŠTYªyˆ·oH׺Tór2f”e+bvGxk öÅi˜‰ˆûp ㌢jñ^‹ÐÿdÉV‘ÐCgÅŸë1Š€³åGÉŸm~`Ë’²‰]"1‹µ=œqS8§ÉóÀà…m”s88·ˆ§ª„T>=ƒ7/„¦ ãs€Ù}ån: Z®3C±Žž-Jðá…£¸ÜÅY‡ŸÍ⿎þtŠ<—’þ£«ÐÍ©ü×Ï¡Ž×|~£`â# ùU[Žæ@Ñ4-åwA„¾: ÊWXã™î‰@î 3%]Ϋ‡Œ7»¬ýþ;ØÃ)Âü&Ü#VI²”öB…0 QGg·Ïáö­Áª`=r]ʼnú”s‹>Ž1ïÖ÷‡P…ç“ë 9Ò;  }¦ÍÁ.’ç0,'CâùX5ØÌ.yy☚ž¤Õœ£51wD'­KÇ ž.¯Ñ…é>¯øòªÏvî>Ÿ_2„³ Nš{4ÇÛ<Âǧ5Þn—–dZØ®Ñx]Qz¥y &paˆS LQNÍA6Ë{Çîp÷ÖG9íq"\G›'чÇù·z³dÊq¾}ŸHå„Ö1íïð¡Þˆo ¹¼x‡s7.ðdã£|¿µÉå]è2è®(@ †’à N9DäðnÀÏzMN§pG÷ñ}§’›°¸’Ì/¹ÁÕbèvP£Õ²óC’[o2ý®!9}žJç ;æñÙ nÇ rŨ? SÛ¥yvUbEê(2GÕF(]åp­KçÔ:Ó%ì N}m¼ý*Eå)ò§ØþØk¤Ó]¼?Z ¿“2cN°y_sÓÌ1Y_¢6\/¤³õJùÔ+ópn[”—tføþÁqÚÅ&½Éòí]êv@«“™©wñÚ—)<ç‘÷GÈÊë\Ùk+ü{?3‹ˆc²yÃÃÇ鬟棓+äþåñ+(_¸rgú+\ùWÏé;àóï}ŸùMnŸ> Å~ þøÉG˜¾þéå¼pî{\œý'ÒË äi:ªI1ÕÌc4 JSñ "Ž3ñ6Î ¹ÄFA5aþü1$ލ$+Èâ.{Õì`’Êê2* epf'O!ö:R$hi­Ï`*e춸ÿªåÁúÃ}´hü@q|±F¥êcÍÐýà,›K¦pœªÍÜéãƒCDYònƒ¬ÓÄ‹#´œ-K‘—°NY¬6¥$iÏRt·©/žáÒ`ªTP˜‹Øõ=Št?ðÇ^sÀ\x‰Î°ÂÉl‘bs Û¯a”¥·çã\¥Ûl×ð”…£v±àDáë”éê¾NþLûìz9Rl O4œŠÃ·Ï*ºÚQ=Ê~v®´ÞUƒû9^Eûç} IDAT¡*BQ8ŒçÊ)§&r…ïV•®J¾Q8qŒÃ •zâèÅc⼑F|µ†€€Ð…dª[ê½¼²j–2Û’±Ÿ3ªeHà#_ßÀ^¿M>ãÙ£º?×ä)'¡…û ÃâÏ£Êí”s¥FB4àaÝøxs(ÒvT̨kØ|‹ùSó³s{ôv­ª3¿x9Ý \lâ§Â¡dôU^"?OpCCúG[ðDiÍ Ÿ-3Ò_¿‡9ñq 5Òÿ]ÃÞoX¦ŸÓD¿" ›–ú@Ѷ" åkPÐ7k±Z¡b{u‡°¢ñ/N¢E¹c))y‰¡óÍkì|ÿùÝ:ar’"Ø%U·ÉhN,Ÿ;ÎÊM¶otÊÁ³TÈPèYŒò®£BGÿ}]Í'À*Ÿ"˜À:E¡b$ ±ý}{nÏ,2ÂÆî}N,yDak½C¯“§±8òfkžýlzo•T¯û7‰çY¦';h>ÿb;äµý€íDób#¡Ý]£¹š1ÚX㻫ÌgŠ™K ,rÇvµÊ({qZPÔ#l8ƒŠZ¥&ÑZöKšU‘]kñ|TP?¢ïÖ¾²[8¾|3¥°—Ѽ Žè€qÖ¢{ëët7^bÃÒ£'xöcO2}r–›Û݇ÑÃõ€<\ÿטּÑ`é¹çpÖ0é‡ÔµálT2ÞÛé2ÓhV|¤”Ó¥­‰ˆÇ>Rv•ÇV˜ˆþ~0Í­Ñ×LÆŠÒsdyèÆ ¢ÓçñO>Fòæw½õ]¬8j§Îrÿw¸úß|…Ÿú/ÿs¤¡èÌîÍ^¤Ò¹Hzãul IḵÒac{ÀŸ|ï>3Í*?û¡Óà4S‡OP<áØ™_Å^þ÷©O½Æ•烗“e.®^âܰ û‹ŒˆI<ƒ+"¤¹Éb·ÉÞö¯7ûütñažœüï쿇- tæáüôˆÌî#e ö( 먵†+Ò 5¦8$ô5¶ãzÃ#v‹ór$Ô ªÇß;«ù½è)GìÁh¼Žßšãôªa„f;ÝaÒ;ÆüÖ>·¦ßƒJˆZòŽcáñäšµõ³#Lw›SfŸÁÐrïÊÍ uŒ7¬µ#¼q‹óרºð.ó»ê{Ž­Á¼–ê¢`·ºˆm dEÆððñü 3kK3vÆh¶C½ºŠþæöé«ßŸ«2qs½·Ç‡W^Å»4YÔ¨óïð•ù L]©òÎÖ§ùMáÙèeÎ'oqµr{àˆ5®C­l{º¤þd¾`uÙ@L²ˆ4õ)"eq7¥QÚ"*GëœZ0`¨ZäüÃê “OzèJB½ÊðìÛíЕû$íuÒƒÓ¿ÕýÁ\ºo nnßáíïŒHö,£®E¬‡§K–nÝ88ŠÌ?[É~@¯uÎñà~Ÿ¸²†£T|ÛÌ'{Ì/Æ\|êÉÎù8bjÚ'ò"òq?®áœÅV,Ê;†³®QtŽêO¡7"TaªŽ¦s¼Ÿ„J¢±‹,l }E”T ³:£žOár¬ƒngt‰<¬Sà%–ýÁ JYœã/€ ¥ñ×tã>Â.ʹΞSXc‰ý £ Öú¥ÈÇ”U„FÈfâ Î@ñ¾×­+'.ÊAdëõ! %(4F[+ baXÉÈ=ð~G—w0ÕD( Œ«(Ùh„I‹ìꣂ߹²³}D½Ê±8<äÈ ×!.—Mº DÏb}…GŸ–wV(˜\SÈ&ÉÉÓjQXJ™ááŒå°!„Ÿ]d"ÓXvUBWr<§P8ðãß\ÁõÏ^ ¶äÓ~òË#vÂï×Îa'Cö+gø¿ÂÌG4ó¿¢Y­}Ŭ ð‚ÒŠ¼·qÈÞ`Äðú.þGŽ†æ¿»‚zïâß~”Ã[&ž«cÄAèðb\ö_Y'¹WN’ë-ÒàþTÀô§Î0ñè4÷~ë ºë}”>b³Zð³òò*¢¤¤QÑ7øs•S§4¹7ñªX4ž6´Z­&ìÝè³y£ËãŸ=ËÆÖ˜ÚLƒ§¿xŠJüϾG±“àyk8ÑX5åóÄä42—`OôQÕèz^i~xïæµï /_óâ˜=¼ÇB1$Þ·ôÆëII{SZz ™nòNîãEÊAê å§hôÇV#µYˆ[8S ™AÆC\– ¼UŸüÁsA'Ž÷é}kŒ{ßÈ"#ËûäîÜù]l1ÄHÀôt…GÛuþø¥Ë|ë•‹¢‡ë'¶ŠÐŠÐ?ˆ«¶'å“ÿðR™ž’|g•ÏÔj|²éã‘óýµûãDÎ/Õ\ žñ„rˆN¯²OM ­hJëDŒT”Ï|p)Ö81²;.p'GÝWQZtTG/,:;ìKöö뎽Mf.^$- &ÏefîQr3v‰>„zUÂåÇâiQ…C`uAš[Fܽá¼~s“—¯>õÍ!Ñ^‹ÕÞ-v½}54S¬âª]þtz—EÛ“vQE÷ñ‹œ^ï”xqÇ™B“îhöZ$><瞟>ÿ—w3J+F'Nß rd+ NŠ…Ë¡Õ&bÃF–“KIm“4+üZ ª¨;Dt5¤¥…Ü—±uxVPV¡Ž·ˆ­O~{Gz¦ë¼éY©žZäàànÙ5]Ó¨´È££¾Æ×Hì'ôo5ÄëÍd‡ô j ±ßbØHK¨w£¥»n0»_‘ð ç:ë -Ž(¬0á;Æ2OŸ(YGë°1/~XÅó"êÃv_ÆwÇÔ[N–?²ãÔ`Sè'´ž;Ä3–›W o©LøÂÏ'7‰Ô¯,z#â7<©oÔ¨FÇQUdºfÝj!Œ‚=™·ÙÞ¸(~>Ã#µ±»Y[çFë´¤ïÖ8~p_Nõ'¸±8d}vDåðŒ´6Œó¤‡žðãžßõSuîÕ¦yÑíº¶ïˆó=iÚ=—Ú˜¨ïȼ€4ô0à ´g(bgðKP“~Vw#5êÃŽÄÑÐ ]‹tß— µÏte‡›Á <0§©on£&‘Ÿÿ7ä]#ol “œ0÷PÚH_÷YÝ,܉Shw'7P\Å÷„?94|år»‘“õx”Ë“‹˜1¹Ó.G¹Ïåh—£)D+A+ç”8<åHFý^!ÃaØ3ŒÇ‰¤ÅƒÃ>ïÝÞ–›îskí®¶Å°è°¶Ú“±Ûw•ª.Âê-à{> -âJ·éìàè(p¢jx„Jð’:Q ³³€t&±½ …WMD׺H¥+U5¢¨}jÁ@šÁ¾kV;ÄÁ¤ˆÉL€EãœÆ8]Zk;µZpÚ ÆS2è-‘ví-‹ŸÕq^Aì8qFÇ´QDV„XPZ°)Ð ‘U9EÅî Î陸F¹^5‘Øá–› Bƒ(˜ÙÙý?®âÕ#âæ©›CÙííýÞ&´CôO§êŤ*“…¡S× ú×êÙ)É °¸ÈóE‰"O3\n8rãE´8'‚‡ˆ.;çÎPj>()”K\æ‹b e'D¼œÈÝFìˆq†dÃo"t³ÿíÇñkaSCyÄÚ“¢°ôÉ¥À2QxÎW (ä@2'¶œàHùI¿¾M°;ɱŸ™cêiœ}¯/û×·áï-‹‰éüNÁðŸÀÌ šù_Õ²Ù04ŲŽP†k]Ù{m…;ÿËk²ÿ•û¸­>U ¯o’¿ÓåPUeõ*n÷­1Õó‰.¤-C6iPÝ™aˆ½Ó”‚}'§w¤ù©efáZ;IÚËî7oCb\0Y%ªVQDŒ3º/HÏ•€íhÚ!ž~,h»ÜoáÄeF¨b(ê˜F5cçÚ‹-Ó'gd´=¦$R›PÔjw¯®Ò?ÌDy Á 4ä}Gó¬/“ŸVèXJz™l¬¦îÍ×2þ÷ßÎé¼½!Õþ®;6ܦžñMÎx\dŽ£<]WNâ@ñ3_|’}?â^ÇŠóP Ðhø5FÓÇ)â:ÊNR´U¢Ã::¬£‚Šˆöå!Z‹µ[$œ›Rœh÷÷v)Ò±ÅÈÙb ¦HpΖ%B‘#ã:7x£”S-JT«ðæë·äÛß{õrâkÁº¿²¶z(BÿëËCú_@ŠÐxöÃ|¿ÿ_ŠÐÿÜOË©‚¢»'ç¢*š1¡ŸÉ›«{r}§/ç—ëk…b3ßù8§ð¬Ç~c «KPÔD‰wäå‚(å°N( •“dÓ>IÈFfcm…¢@ëPÔô,‚“t{ƒüp_f/^Â)_*3Óˆ ÅÙBÆÅ&¹ëãO.Imöq–ëU™«ŒIí˜5èX‹³ Zä`8àÖ=v®hÙînpë`ŸÝ+°h2y,«Icg‘q±NM}OôöJÞ7ÔêNö&ºr£z±DWd1¿"§f-¯lŒr'žV%€-"ê(¹ÜÑWWV‘X+6y¡^—ýÂÈ^ž‹òT™ˆž DD Î+_iaéí ˜oDz——-x•9)Æ©ø§N :¢¿wKÆÉÕ ?‡wIºkRD"sóm™¬ù2*”ˆ¨2“dk$ý­i޵éö* 19!^^ãw$›ý®žË„8•G;­ìm‡$IN!…Ä´ðýXÆE—¬ãÙ!µé3R›|›'PXé©îð€ågFÒ>QȽןãÝ•¸Çú²8Û';¹½=â~Exʹd‡¬ÖγÚÞ GýfHÜe<8$ñciÖ«bâ!·Ç¾Lë>Sõ ÙÛ¾H­X”4Ü—ë­·IW‚[5yÜzô«ÂS»ëx½ób“PT5¡YÊô~ýb–lÆã,ë2›åbrV¾%~4"¯È¡™‘<<`°Ý ¢+¹ÄQcÅÞ¨%LËÐ4¨W÷¥št©N$²=>NʉÆ&üCÙTÒíÏIÜ;©‘Ó=±‰’`·*soÎÊl¿&k·{¼ö­ýËCùÿ(Ч±r]Ä]¥5rÇ*üÐ ÊóÏí ÚC´'¢Ëß}D”FLŽØ\Ĉ-D‹_9|eñ•ÅÄ;¢÷ØB ΡIJ¹‘Èý•YÛ_eo°)‡ÃÖ¶·YÙ¾uV”Ö ’¾WP c‰›³ ¾”sÄ:pªŒ²Ã(ÁiÁ*)_ŠAs8…´%ð3”B´ŠETÄT¼'ÑQ˜J¨s‰üT‚CªajÔ“Ðï{=*QWâøPŒ‰)LŒˆˆ™:‘.Èü>ceÄ:L[8ĺÒV¶PNŒ.s@"§¤fB#JË~”1VF”Æ ™gÄ+ªE ã€Èx _Yë‹Ô.ÍÓr‰ôîï¼Ú»T‘ð™YB?½Ö˜¬kÅûuäê:ÁóÓèÀ—ÑV‚‘@i0“¤¸Â–Ï[È‘¯Y) ;²UÖ(q,àܹכ‰çމ¦UÚkƒÇ>Ãq&ÝaŸ[š¿ø˜ž—@”¨’¯˜ŽiiÌ„¥ÕBI¾ï¤»Q`µ/R"q‘"¿Ò!ÿúé_:Eóc =éF‹…§¤û5ýc'ÓÏ+YúO}¶À+|Ž«@F÷dë;÷Yùò;²õÒ*þL$ád@¼k1oŽe(¡ÄÿÁi-M3>02ñ\,ÕŸ­R,€Õ º'âk-ÕM25ïl!í/SÇþ#}¾~E ™Ã×¶¼¿«m¡Òt¢%N{¢-h#(PŠÆ²rÚ¡BŠÀ`“¡(›pfV1&r8ìËFo$"%Nâ@[‡2Nü$?)ÄOsQˆltnßÛÃUR)LN¿“ðüé&Ÿ|bŠËzEèEèüÇ ŠÐ®v-=û,|üî®1c-/ζ¨é1Æjö‡–FÕc~2$˺ï:E¿²O½?OWp8¬sˆ*…%ìÕà,C«¨úŽ G»Ð´jï ›Fãi‹_ŒñüsñE–NœÄ¼ñ-¶Þü6Í ¢8ÜÅŸœ¦fæPÄŒ9`0ºIá/01šÇf3?w›Îî^¿»Å Ï |§=tEŽ|/€•„[jÌö†G#¾³÷9é ×êíý›œ™™Ä#nY]ð8~×Céo³Ó0Yù ŸY|“zmŸIïÈFTò’›­\9Õ0‚SçY<#Œ†ÍœS~Àƒ3ZáâîI¾qJa.äO æºCªÄåJ,ÊA†&” œ2N*åÑÌQÆ`•O e‰ü1Z ¢2t:By&™eøÛ_"®1ñBŸíbÈÆí[\ßé²ÒñxC£´[z7;ÆZÎMÕ¸\‰XËóÕ º£.i‘•Åé_4:)mªÓ!bвy;çÊ©¦58“R‚…’⃔R(… H–»ý’µÛÝ% " “S «,Íœ Š|N,MáåmLq¤apÖ‘çîˆ~x´o¶´ 5F3è.có„l›Ø¯xTæŸ*©l¥Ź#áyq´ûˆC©*çÁ‘F(F³¤b ñ hX!´D5àäâs è#Ázd„~”Ó R”ƒÜ+(ü‚ö(&ц^5áÔ^‹ü^rGpºE€GêYFfLðÕm°ùè,ºAâHÚùýò‡’úu£G24z„¾‡!+2ìÑþ‹z'Ëú謕‰äGZ'×D¹~nqV©—† œRØ ŒÐSý~†þÃ{x&3 îý毡8õUðoìÁl çgè~ÛÑýŠ%üeŸ±ˆÂ@°[µùãL\òQciKr¦JöêÝÿq@zcŠÉç=–ÕÇ›RT Üï°ye“ÍoÞf´6&œöYúÒ#´Ÿ[båË+ vÔóÓÔ>Ü&~a‚¹AÁô³,(ú'@÷!î)0hÁ¤ã[ê?ÓÆk-bz;¿û6ý·7ÝÜ/ƒ½g¦1[}ò»ÛŒóŒ<àÈa¬<¦FûX/Äè ¹WG\Ÿw|ˆËRœƒ,ƒ™“uÚ Mš³ ŽŸ£Ò® ³‚Áê>k÷:,={’ áE>Ε.kžÉÉäø8¼kxýŸ÷¸üz^'¥ÛãÀ‹Jç^OÁ#ça¢E}ãÇè-Ç©…§Ámƨýüg×yé–%-T5À>„!x¥ÎPgd bìQ¾-¸¤‹Ñ*-œ`|dŒÍSâÉ Ús¼²:`gh¨~™Äc ^‘£ ƒNK͈X‹Á£ð}\à! Ùç…–*L܈1¦øÔ“Ó|ãÝ=þ·?]}X(=\?v È;„ðǨò£Åü¨á7S ×ßf»×6?ê:²öNü“RŸŸcýÆk<}üí0—-c¹¾?¢—´'4¡§ÊbƒÒã]9M¿²+ñhÆyÖ+õœ-J4 )tŠvVSX#)-j|!„åh _M*ì&1` ]ŽRrlQ‚~¾õodÿå¯ÎÌ<ƒ^\&®·Ñõ9Žo1JîsÏí³¯fd¾qžO?ÆS‹÷yåÖ†¼ug‹Qžài-^ì¡BAÕZD{ÝAHŸ]‘ý€Ðžâ¦$LìßåÒâmÑòøÆ5ëÈtŒV¹|r¡Â[Ûît3 !/£ó™7¥}2áéê“\Ýéó¥œ7³@f“×ðӓıÏÂgj’uÙnE*ù[w,oLÍËã¬s»6–wrŸKõ-Vü? »ñ–f?ÅÕG~[îžÛâsÕs$o圹™ðúÿÅÞ›ÅZ–žçyÏ÷ÿÿö¼÷™çSSWUWWOì‘ÝR“4)Û’"3’CG´•Á6‚ Aà›8—œË 7 0;†E¶ –,SI‘âÐìn6ÙswÍÙçsö¸ÆÿËÅ>Ý’‰b“4¤À½€…*N­³×^k¯ý~ÿ÷=ïûø€ýK¯ñø7vX;:'ÝÝy*³û\œz›H-›ƒ³ä±] 8°mfµÁÙèçì«$ÅÓ$¾-íÅCLý<$Áä*ÞD }ƒéê–T³å¤Z£¿×’†î‚ªœK€ñh#ûST_¸ÁIí€o½þ;G÷1&$n׈]ˆ²èk¨”6f2v||颼²0èàKDÔhž(¾ðïs¢¶D¥øãpkÿ?Ï «Vœ1¨ËÞ_>#FàK_‚ÏA=V ֌ע$ªJŠ2êÆÑÏRöz‡8'lõ' iR­9®<Ò—ÌPêÔÛTÈSK–úñç DÄ–“‹Pâ¬à¡¤Iog éîÍ1$[Øj“êÙÇO­Ÿô‡æÄ1Õàƒf¾÷!jÞ(ZBhØrì,5þ8"ï‹R§"•ÓçÕ©FåÔ#ˆnm„%ÌI¬È œ“á›û¾¤óĬf‘PW}ÝùÆþ¨t×"û‡ý}ÂðÃèæïG“ÿ@×ÝÿðG)fÿœ·ÿ?¼ùs8¯ïyS<ö×?Ç…^àdï‹õŸ™©Ë‰æ|i๾wBµHyü|“00Þa}€?MîÒ¶ˆÇɬŒ]BÄ”8,*J¿ºÅHPÔPQb3ÀcA+LÚ”K­»Ä•÷G-rJF^5:³Kø“#Ê“C²Í»dk·)¶7pqW›…Ð’kWzÄ–?a-oòØ\̧Îͱ2;OYxz½Ã$Ã*x- &fjh YPPx¥T%5ŽýQÂúIÂ[ý’Ù:üøÚêz&Û sÕÆ(ツu¸SÝ'¸qîò‰Û¹– ¥ayf–‡§§8ôÙÎóñª³–"Ù8”Pœ@0Ž#Sg~A­ Iƒ …W1¹!ox^X¸I1z›7²ëš´Îþù`l´ Ò&î\!rõï=aÃbò~³ÁòämînIOÔqOôI<¦~c—ÖW©¯:\ß0\ŸänvLøÎUçè§ã‰›fÓf'$Ã}²"#nÎD ñyB%hq´›Ò\<`ò±}¾;yÂÆ‹3[O™yöáþ<Ç7*¼;±É[6’ÿz¸C¼²Ó Z÷B²-C€Å—[l5éLµyrºÇ¿ÎñÄLþÎ.£Á,û‹›ìÛm®œc¦1 Gy¯Ù£×Jxlk—h¯¤_ŸÁ,•´’=.gßf¨mR[¡múTò’,Ù©Ì0«ëL²CêšâÃ[@î ei®79M±ë©ÕN0ý±MñaÝÍiV:7™×ØŒÎñÖèSÔ÷E£ÑôÒÛôþÒ¯ñݯ±soâЦ{ IDAT."Äñ µ\¡ðmÐßB$ ÎQì¸5“ÉÝÍcN B–ÑY¶2±ì¨O@cFiU4™ 6hÄ5•:¸I#nœîuêQmIœà󱓈›&¸ kÔPãÆó*bÇ‚²€2Ô9Æب‚1>RûGözûììss›·®ßa·¿ÆÌ]ºùE&4Ú† –"a>€Ò"Öá„íi‚ZƒÁÆMÂÆ$AcŠ ÖÁØPDÇó3¢zºÃèî[x]#~P°­>Rïa[=´Ú¥ OÕ œ(A.DãœrÒŒ €`,Ûq*TKC/ò‡9ªÊqs0v®+fFu&±ÆPÜ<‚šT›£(<9Žw÷q_Úš#x~7Sá¨9"ÿï ^YÇV7UÁþÄÃÃ%±sˆBžg”§¾»zZ•ÈÝ™q÷#ŸÄ÷:æ`$¢”-¼àmA¶°ê0fGÄî£ÚDKA}NžAã|“³ÿ9ÂÍc&ª—*+pOIúZIò^•âÐRù+À3ž¡nù–òÀP»¡3l¸ÿßeðÛûøÝŒ’ögG„mYÿ_¾Ëîïpüö1BÁôSó<ð÷_ œšàÞ¯îsë­„²É…¿³ÈÂ5âÀP–JU--µD…ÊLÇvСc÷+wÝ:”ÉKÓX+”êYûå7¬S} Eçù±ad¯Êpk5‡8|®„4ž&;ˆ/pù¶8<¥L *MÃÙGxêgáÁç/°piŽJ#‡†bÁçž×¾|»7¬>=C£óòo½ÍÖö€j½JØi³—Ô8³Rev~‘ƒÕY õ¶ð±ð)®þ·ŸdþÉ9.-+s_¡ýô<5¿É :O¶µDBx1@jÊ;¶Ý5~{­Î?ûÂEŽ’Aè0 &Ï1YŽïíýañ!€X¤ÌrñíY´ÚD}Žé÷4EŃ÷h2æ¬÷£.ÉïñA@^¯‘W+”A€ŽÎ –êBï¥w¶¾[0mb–:5òa‚e¼³Ö“ß¹vôç­Õä/¨fü‹|Œ¿šøOÝþ(òooú=“ïü ÍŸtxý{ýþ? Zÿ“Žña îæfú~ߣ? "ÿQ úÈÏþœ<ùùÏs¼ùž&i&ÿá™eV\!/ŽTß81ÕíÊr'be¶ŠÕq‚މë$>!·…FY/‚CQ-$ÿ `+ÎÚ>–±C–`%CE(4Ä‘«3©Ì6w!±6˜À{ƒÃ+y)R­jpù±“ÓHšã|÷ìÝ7”Þ@Âxލ:-ÖXµ.cÇòúh$Æz¦Y‘O›cyrBcD6{ØÒâ3¯‹3mé Ì·˜\9§s,6Ê)¼R8Hö†Ôît¾¢ÒŒ32®&Z³!«ËšïèúIWŒÕ1ø'Nul./b j½-àÈ'\Ÿ ñ×}5Æ"ÎA–‹”§Ë¤‘ ñhÓXùä|EwKÇQ®b’—ËçCŽŸ½Çë{%ÜiµVC]EFÇk¸ÒS +T[§‰‹Þ«ÄF8‚üÞY~žÂt3©Æ¢'2²ó=*w»Ô7×iMwð)nÌ_Ñò‡ˆÓYiÞØÐÜlIZz'.×;¦* Ê!QcVPQÕã£c9<îrõ±œðÌžþF³/ùï=©>|OfÜeãÝøv±OVëò_'ÜŸªÉ+óuf¿£úÐq,®èð0CF!¹ú°)秇ZÚRþÅ(gªruænÁ¡Q½·t[†Ý  g¦ìËÉñß>›R ¸rK4‰?QA#hÝßáJ÷E*í|ƒ}³De˜“…°ã˜/6èØm†¦ÉHkRxK îÈë{ûWÅÅ%ôPí0“¸Srp4Íú:YÛ–vx¢{Á’Ü=@ãäP[䕜ƒßá—ß$é*T«L7kÌÖbFeȧ£>UYK¿ |KD†aÌïu ¿y;Ã¥C1å3:RöX¸jeú¬RmdT'RmúW®.rñ±¶œëœåBãAÎÏ.s~jUÏO¯Ê¥Ù \ž»ÈÄʤ֧"æÊi)¦,鬪mB.Þ«ˆ3¥ÖÁVÁÔÆkq‚ •"Iz_b´» à•d¨šÝþ€·ÞÜ•·ßÙâ ]§ˆ·ÉãmfÎ÷[ˆ„©ÚfWÄæi€j‰ÛM ê5ÂF ZÁ:Å:c¬Zk°Öˆ5†xb‘¨v†r¿E±ß„£I’íïݸÏöÁý Oo§Ðɺ£Q1¢ ÅØ×V¼ÑHEš…EŒá^sD"¥fQ.Ã8%(“Ã:IãDÊõ®î?3/eÍQK#íÎx†ÿì]±°§|îŒÔ_XeXÏôäTÜ/¿ƒÕãEÝO®Pö †×N$ çYšŒãDäýÀ3. 1§£ªÅ隨9}N÷ñRŽ£NmŒñÓŒÐpC RåžT<™€/U'ÎMо8%z~’^òÒ3û¹Ç˜ùìCà‘½/]g´±‡¸î#lЍšPÄF ù€ ;@Š\}±ÑsO¯È㟹ÊÕO]"®Ç‘WyÑÒ“¼lß>ÑoÿÖ·¹ÿö!‹sòÔóÿ^ÿÚ;²ß?fñ™§µÝš’K‹‡'9—ŸÑÙÕ–l®íŒ ¦ÓKŸ=#W~bšsSšG›x[!‹BõšI2LÑ­ˆðu´,=öj(‡·Sýâw¶äŸ}w†—ßY Ë lž ý.~p¨>鉪WH26w)S Í|TÒJ2€¢ADÕä…„£Tãá IE¼¢ÖRV"ÊJL^«¢ÎªÁ#YèÞô n@B~¬œä¢KÓ-YnDL7 †êù¿pŸÛ‡‰|÷'Ç-ß§îüÓþ¯þÿö½tœü:ï{é>ýçøÃèå?í½áChÜ?M¿šüÃ\¿ŽÿòïãvÚþ¯v:\úôgÈ’>E2â‰é9fLÎí‘ç šI‚-=s“΂É,Æ[J«–ܦ¤.§2윀㭠G1 É‚£êíþ<¶¨RHLhá}›5a”ðXs‹D ¾³ýš8ª>e„â½Ç-_ÀÎTv×0{žtíùÝ›÷o-Ÿ'X<ËêLH¥Qò]ò‹Ý>—¥ £Ê3 Óü³ž9·ÄMÌë×v¸qs›A:¤6Ó¤ógÏ#Ñkû#’\99й¹Ñå7vJ~&î®\áÂDÎbIžÒIÞ:y–\iUfèmró!WžÈ¹põ_Ì#οøÏ?wƒ§ŸÚãñ·gx¥Ü៚6W²œj‘Ó­­²yø ³ó·ÈÝ›S„²ÏÑÝ[ì\p|zÞÐËBþ¯-Ë5çxä‘}îÞrç|…[ѯݩq•'¹3Án|BÏ °™pÒ:æ¶Ý  KÙ€—66(½g„ìU)’ÌŒ¶R€õãUûr„)ó¾; þƒÌ •qPâþæˆõ;}͈•s°;¨Ï<>‹(z5J¯Ì/Ô8±…/õƒáŒâó€ü°ÁvÖÆT•û{kìŸìâl@VdlìmPd‚á'Ÿj²0P”JÉ)^súâÔ€ñB­N]Ã1ÃJ†7J”Ôòpl€°ŸRÔ-ÕÕýþç•TÆ´FصÊ@F˜_YÇts$̃hî)®ŸvAÿȳö~ëf·(PŒ­1FN-–Ç×Rÿè1t[&<çqìá5#uMÔõ|ôWoP\ž†P(lIN {)e#DPû¹±SŸI £¡'PK//èÑãB3ˆó€^žQô3‚G.`{1Z¾Êè­}‚:L>7Ãìsg˜øø2RÙ½×çÚ?ºG≮ø“óÌ>XÇ9!”§!­‚¢ä(}JJ”D”rœ03¾¼5x+äY1~¬¡óüYŠnJ÷;}õ6¾?Âŧ×SNÃEP#8M‘|Ȱ€|Ìesæ‰%Î=ºÌÂJ‡|·Ç`ãˆ`¦%K<ÝÝŒÛßÙçp«ÏñNŸ:¾òŸ1Ý:ÇñKJ÷0EƒYL.¸~æà˜¿ü‰9fž]%+2Zß*èîÆˆÖ^ß%˜nÒºâ‹7Ž>ÒMm1 1 ?‚M• Žyú?ýÏ%ˆî_c¡=#?>Ó¡RùÚaNAE¢Á€zlœ?†ÎõT~6#MRQ'jÊñd¾’ žP!·)£ð„6 c'u§7^IÕ7(Š.£´ÉåΉM¸¶qUò¾¥:Je`Ÿd”µ{¾…iÌÑœ^’|wƒÑƲ»7ÐÍ5ÙrŽKç'97³K¹©Ê ?ä̓}y ø++æêž‡—äÆ;'Üô¸¾u—·ßþ†ìOLQ«+ó z¤ÅŽ_æk°&·Ö6øÝMÇÑ¥UÖZ“òüàwȺÛ,¡œí,ðæîuÔ{D A‚?œ­D­bDHÒ’ûƒ’O.N3Uß“õÃDƒÀ ‘ƒ¡ŒW¨2A‰ tG%ZE>6cu2¯¸Ès8ªI›¿ýpÌ«ïíÈöú~bõ67›¬W°._+˜Â¾„ ‹¯À0½ÉüTUά°ûŒ¢‹#äF,i`“Ÿ@öîb.ßd*?’Å‹T›Ë$‘Áú¼ý–Œºï‘µ>Åd¶M-ª0°!ƒÝkÄÍ9lK³>ƒö6_I8÷àù\%å›K›òO¶–iï6ùÄó÷ø~Èk·4ùŸ·xxiÀ{nËêíçpï|\bû%ÂPÉŠšHvÈzïiÍ¥<ÇiÌ­4a©Þâ‰æŠÜÝ(¸såoEïR¹÷7i ®4·ùÖC[|÷l$‹ïXëÛ袥7=÷v—8_ÞçI#æ|¹PÎÓ<[blŽ/ÝØAÁžÀÖ`YŒ-¨Ê€<µâÊ‚ýÝiâJvmWªnÄwUvŠ%Z£6êor½òR= ’Æø8DŘˆ#©±‘Z’u„’¡ /‡x×F®6 A&E\cg¨ô!Wu•÷ÅÈé´Ÿ¾[âËÜ6*øòT骲³»Mäb Í¥Ùl±:{H FÚÍ9æ'αàæ$ð™Ý%{@È{½•ûŒn÷˜»5'"Žþ¨*ÛG=N'>¦,CÔ`kÁ”©¨–ˆz¤ÈÀ“­£ŠP¤)×ß9¬Có|üP00û¨*{'··‚?–ÿ¨à > åc c¡:L‡$y:þxKXoR³ðäYÇ£g#)J%Náßg½ñò¾½-¸ÒÇ…”¦Ä•†¨ptØ’©í’ÜÒxn™´?"t!b­p€¹3ÀÌV$:×DKCñKGbÞ¾‡5sa¹Ô’âÕ}Fû)Dî´pòeñA:^ÿy)cjYO ÷ tlKìÚ@ˆÉ[¨ÞYe™J ·JÊŠ%_h`’:ƒÃóí’JvÀ(n±dJ=¥ãhÉô¢ýs wfiç{\ßy„4¨0®vS¢¦roó2ÂÙæ{8—sÏrÐërËý"›•7…b@]&)¢ïb,1Ô›`=å`ŸŸ2Çœ·%i¹Šø.puu0†2²4—ªr~¥A±’aVSæŸ4,>gdþÑ€¥Gª,<2w9fñb…Å'c–>]§¹Z¥$&¡îÆ©lE0¢””“Ãë[kÜÛ½ÅÚáòmOv8ØÚ`cýý#å‚>JçxŽZÒb¥½Â#‡Xšš§nÀÉtÊæÌMZˆ9×& ‡T\?0h5ò\"A„¸x _k‰3%NJçqRàÄ F)Ó‚Áq¨Ÿ2ꥌú9£^.£~FšH³þøÏt@šŽÿ.Z Øqj¾TªAÉÓb:!y'£ñXsc~Ä!ÔÔà¹å8ÎÙ †qF¿:",š§£ õ•a™â„e8îjÍ(^ßÃþÒ}왕Ï_¢¿‘þŸ·öØ'¦°Ÿ¥üú.Ùnʨâ0ÖR3ï=išŒ)DO Ón–þ‘âCŒg\¯ Þ¡VÈ«1¦ND—R,ÞX,â0Tu›PŽ0™eò\ƒÉ¿{Œ!õˆUBk ëUL`ÞŸFÃÈûNecÞßèØT¹%Oyòï¦ìÿî.2¸ÎÄc«Ÿ{œÅ¿ú Ô.MÑ»ß>bû+Ç´¦bÎþX›ÕçÛ„±¡Œ£Çk0VÔSç ®Œí銧ó`<{ü(§÷…ë$ßÞ”ÊÇWÆf \Å‘nté¾´Ž‹¬˜Óq5+P˜*†HÀ‹ƒ)¡½ÜâÉŸºÊÒtâÖÝk{„±`gZtó€k/uyýËwؼ~€ñœ_ý,Î<'ͪ²³÷ ×Ö~Ÿ{Û·É“Ésf›AàØËt±Íqÿ˜ÿÕ[ÜxibT@¥ÀkH³îY¬÷¸ùû›ì:ƒë|ã—Oxù›ÂWß yù¨Âî‰a°ç1…[…Üݼ‚XŒ bL4¶Ù[o ñ¨wÙMY¤¹¸ÂcÊ’2´”aHG”qDŨ³¤e±Ff&[šäi©Ó˜ ‚ÀblÆDp@@Áî‰ãü?·ø—/ïúïB[}Ä€|Ä€|Ä€üûÈ€Ì]¹ÂÇ~þóh1Ôƒõwefb‰+Í–6M* ¡hËw6¯i-2<¸Ð”(×;à-CLYAN×kT½x-±ª/^ "c ʘQÔ•4:¡šµ@ "IÊ7²R)5Ò/b“AŠ 2ÂÖºš •­Á²’‰óœÌÆÖò rTXÍDÄY‡™œæ¬F—®`‚t0ƒ[·Õoo‹–Ô‹šVÊXèL²[Œx+9Ö{¾ÈY©Ìqu~EçªÈô•¯·o ¹yã>ÙàX”âÇœ û]gβX {»TÏÈA™²yr€ œŽÁ̤-ÑqÎh&8çxhi™ó5ô•½ÒRÇEHáUŠ8ýÙ0Pg­tK¯YßÑ/x,‚Í ÇP]ì3[Eí›}ÎtjòÂÏÝnÈVwÀÂè,íö ¹©)ET<ñ¤#¿ž ›ÈÏÄÂ3t±‰»>YL™98GCJÜ™7H’}}ëûw¾.Áµ¯iýÝ7¤HÛ*±!²w92N†Ñ3QçSIïb;+êâºd£L:…/KzbCVËRû¿ÊKMǰnyaÒ²Ò ùÅ=ºjäç².I+Ô÷Fr¶¨«½õ”Œ’’(JžoëñÞ±œyâ!Ê©6‚}:(ËQ¨ây)/Ø™Z#v#™8þ8îE¬^çúù=Í'Ë÷ *ÙRu\lN“¥!«á6÷ï’¹*.æäÖzŽÂòJ$­^áAû£sj(¥Z;Bª‡Ç+ÒK:´¢æj÷µÞ0r]«zçäm¹UûQjd©øY%dôqyõ>ðHo—,Ky<ò,JAᯨxA¹%ÔpÖð­“¿»qÄíµ®lo èß˵ÚVš ¾D\'ÓÎYèüx•VEe潓YÎB\2ÿÙ–.ütK–?Ñdé3fŸohP‹ ÃBÚ ƈnÝ>’ý]¶¶ô0Ù•ãÞ›kÜÞ¼ÆÎõmªGôûF·‡"£@©<&sõj‹ —Wë,¯NñÀôˆØZ¾§áÌW9:,¥(2„&¨€‹ õãüÔƒÖ£ÎYqÃY‹#ÇI‰•q !ØS4~¼»˜Ó°5d Ô–%5Ëêt¤ƒLù¿_LÅ8X™5šH¤†*V[™‘jiÙ¯–„ iœkäRÍ"êID{11Šˆ'Åd yYà#øà„Úoìcß<‘ð™YÕ§¦¤÷…mxeMõþwáowñ¯iÑ®’û‚°Ì%pãŽhžghé9mNŠÈšÛvSÐo´…袉¤ÕIJ[CŠ+ Zt‘d+û"nNc­#jÅfCš€ÊÓ ¸ÖØ mÁï5m#ˆâÇM B.Êð4„.“ñ^â)­RM,½oí •Ú4Xý¹Çh<:ÏÀzÙ×”á^*²Yræ©‹O5©N…ª)óqÏFDĈÁZ‘ é5K¥—LOGíD°&´˜é ù^Ÿ“ÿý5Í¿´Ž­Å}zÆNТY‰mUh}lÖzbö†„;5b§ª~Tˆï—ØRùøßù8S͘£?¸¡.@&ÎDzRŸ[w•7¾±ÃúûLrnå¯ëÇ®ü¤Ô+#Þ¹ýU¹»õ Ý:Ü"M2œÏ%öGjJ’l'VÛ—Ú’'=Þø7ïQôRœ ¥tJî£^ÓDeíVÎΫ‡¿t»¯t¹û¶×£"–“æ¹F„Ψ3FŠqåéý¸O4¹S1!bãÀXq"âï!f¼«‘cbpñQEË À;ó¦)Ë‘x-t²Óác]G:GüpAï©}¢~rcŠOÝii§ 2!Q:b¥jRŒ‡nVÕß}·/ÿè‹wH‹òÈÙÅ€|¯ȇm…}¯0“ïçÂ}ØôÅïõz?L á¿ýs?hëîû9÷óý;Пþ…ÿ„…Gcïîk2S›à“³çè%'R ¡j¼º±ÇÁèD.Î4d±“ã ·¨Œñôãc¬:\ŠŠP¼W,¡”R RI€¨•AeµµÑôx®%0 ¯*oå†õ2àÍQ“¤¨O\éJ½s(ÉF÷,¦T*EFêÄ”j$°EÅ$ Z©JÑlJ<5+ÁÒYLJ9ì“lÞfxïšä[Û4Ò&•¨M٬ʾñjÚå^šcòR&'ï"ç™yÔ°=Æ|õ"Ukeç`óÔ¶S°Ýžlfr}îã˜Rå\²ÁÊ„çk['¨ŒéR‘S7,UÁ/±+ö’>Sí&ÖΚ IDATffå÷w6$K 1ÖŒ+·¼É °Äa£@Ž÷¤åqH¡%¡ZiÉ·*¯ócEé«Ü;(yþ\•~&ÜZ⽘V»‰éˆŒs Ê×3)û…ØOžÀÇ$_lÒX?KÑâ:žVáh,ÞbgP•ïÞ[–¼ù¾º"áþÛÔv¾%69iÕÄÚ ýôa Û’v³JX ì¾-¶½L¥5Ož2Úq3GL]éJõ†åîvÄÛ+¬¸R©#{ÃB¾y\2ŸçØmˆº˜2¨âm5U2©ÐhTùøå*3M+'#/_}'g~ÒpvÞJž+–+µ"oè†pXÑ« É^ƒÒz*¹¥‘„RHIj½T¥"ÇÆTr­/Á?½+R*µÿ⪌úŽÁ¯\ÃíuÅ}f‘r/ÁyÛjÈ@3)K$ôœóEJ^äèxå_ŒŽó[T9Qãgˆ®Šb¥›”.¤:™ĸ¬‡)ާ7/õòQ Ì’ìÐü±6•g—Æé(Å‘Rf"¦=1ü) “áIUqj¨á°bŒÂDc°WkL}b‰¹GÏÖcö³‘ |AÍ™ˆB¦—+D1£…ŒC_ w »*'}eô… 9YsÒŸH â1*¸rÜ™òwûä¿uŸâ¥]xýH¢"êt {®‰–ãïõ ÎbB'É·7(6‡+cõô’ŒÜŠ,=¾ÌÊ3+L_ž%nWÙýî}ZK-é7ÛllgòÊ—Ù¼uBd§9¿úS‘Èw%(”Ždgd2J†2CNºÝco?ãìB]ž¸<ÍNwDwX⌎GÍÆ“P”#OzìÉÙZ¼@ViàLŽêP´è‹úõ™¨f¨/P_‚/EÅ‹jjú\”Ob0â±·ô8½Ö8ÁXD1êDÉ(5Åk)qã,—/>!Ï>²$ sì]ºÇ‹ïÐÙnñ™÷:<´`ºV†ÝT—¶C$°ø†i@âklÔåûí»¼»µÇ‡Ôt?h`õ÷3Võgeÿ #X?ŠŽÁ÷ %ü~Ïñ‡ÕË–îý~4®üšüÁ’UDÿt@ô/@äÏ:wý: úC!ì8|ê/qáŸdxxŸQïP[~D΋²“u¾ê¤bD¿»¹%"裋-j±“D ,ëÇ«zÞetk{¸""È+zš%ª` ÕK!…ä‚Ѩ ¤š·°>26c3}2¤%–#oŒê¬ÛlžÓaËüÔm­Ç]ÙΑ‹Å‡‚‡W”Ò‹X«Ä%/ÉB ÕªDóËÍÌ • Ö¨6ÊDöo¼‰ß9!Ì­Ug$Œ+lË7ó=ÝíñE [tèòLç§¹ØxJ«óÇ]l¨Œ Õtï˜~·+{óè^cJŸÊðÃc¾³;ÒZ%DÇAã÷܈ SŽGÚO|ÊÊÌ¢®úôûØ`< -Y¥Œ#*T”ȰLË¡z S ¢haè$-~þ쬊ä|éÝ} ‚Q²y?¡§÷hζhÔ¦”Ò ^ñš¨=ا|àDâ«Ù7 ²×bÚV,n13èИ¹Ï¨k±Ö!趤ÐUÍ?,YsJÛØÃ}\±æãâœ:K§S%d:Ê3©u¦[íWU02õìºFu/Ý—"n‰Ó¯×^hyç_ÞÉÀ9þV¶¯I£*¯Ïæ:o‘ Ù ýb^óî‘Ø4Ó`ÂÈÁú *ù9®N,r£¹Æ7òDÍõ)ùÌŒcB¬¾]?‘¹Më­!5ža&ÝÖíÎ}Ùžꉥ¹1"êø+¤Rp¸¾€Ÿ²Œ*1•aÊ´ÙÐ<¬qà—Ù}ï™î³›Ìqä§µÚ<‘ʨϨÛÖ£dNµ}.5ß ¨ýjq(¯ŽuutU.e?«›í»²m¿-ªá<å Í®˜&WmÂÛ>ï÷U´‡% ÞXêóM­®L°‘ɘ(U«Þ`eåpijïnsq¿§³oŽ˜þÕm*×ÑÆx8^Kp/u5øÊ‘¸¯ã¾Ñ%øfOãoâ¾Óûo¶i~c_W×{²ôÖó3N›9™^öœ™©cî!ðÄç«ØÀh~RH’÷umÿ–¬oßdoƒíí»ÜZ“{[kûm·.h°Ñ¢Oð`û!Yi/rne’åÎ,秸¸¸¤ççd¢!š}‰\•8¬R #*a¬•0’JX!*$^4ÇáM$Þ„êMˆ7¡xŽíhÍ8ý½7¨5 aµ$ a¢n¸<稄cúìÌ´•ùiK(¢¥¨•œªwZÍ”âY«'ŒÂœ$Nµ‘V$ÎCœ&1±wš„*ù(Ó¨k8œ.䨖`û^íWv0ƒBäSóÚ{mWøâ&v1Tm…R~kŸ¸ÞD«Ãt„±8›“¦#²¢ç¬èxBC*ã°F9e?<¢m”iÍí=J—‹¸:rÚ1²…ÃùZö•‰í’âd²+a´KóÙiìÙ ®ý›ì~¥KýcñB©eâ…Àª^ʃXÄ ‘ZbqX„OSb± ]1[K¦„‘–X1Ú”@ê85bDÇÉœ&¶hbsɆò Ôã÷béÿNGû/6$ùƒ¶êa€}l ¶™ãoQüæ}̨@owñ‡•Ï_Òà'WpO͹G½ª"b+!Éú [¿ù®fI!¾WÝ~B·_Ò>×ácŸ{BWŸ\•æb›½;¼ù›¯3J”AeVßøú‘\ûNW "^øYÎ.ÿ4 S!•è÷èö]7{'²Ý¯i½åEö´jG”e‹B§ÅÓÖÜŽ$· ¢hÕ8© T¬²²ØÑBœìwGŒ’œqµ4¾T§fU˜J'ªi)ÑqS HM¡§œ™¨X3 H FUÕ ÍÑÀji ñšáF‚AÊ¥-ôÿeïÍ~$ÍÒó¾ßsηÅ‘{feVeuUWõ:½°gåŒz8¤%Ù¤ [„ À† ² Ë€ÿ_ùÂ׾ЕðB¶ Ðql™ ‡’(Mr¦§§§{z©¥«º¶Ü·Ø#¾õ_DQ`Š=Í!aXî‹D"‘ˆÄ·eÄû¼ÏV™ ç3œry ï|EQÍ”$†^þ†¿òÌ_Ð »¡¯«dÿÒ#ÝþCÖ÷×ø«?ÜázZðþÒœ*u~5q„m+¥Ì<³4dìjŒ&mç«>i‡:Ÿô‰\À4˽ÿ³e@>+;àÿœÏ¢®ù´sþiÏOÏ€øÿ¯2 ÿ öFô? ßOÂ|dý§5ùü4¬Ïêù3aAºÛÛúÙÿüï4bŽï}ŸÕúßì®êI:áQžò|3ÑZÓŠ#Nf¬5ÚÔ£B%†E¯Ç0©Ÿã½¡3ÝXdKÿ:¡R©R9F"’źX¦ª?õF8œ_ô;¯Ø9ëFºdc^DޏpâpÞåbxIûç×Xï*r&e“ª²„Y*#9À˪¡‚u3gf# IÎW˜¤.Û[!Þ½ÎkÛ]]QÆt–2|pŸìè\µ²F×ö›=Ž|¬ÃAÁ¨Î€ Šæ]ºµ&——®èÆÆe^x>&J2¼ý3•ó)[_PµtSUÜ>>Ã’ƒB‰§É%>5L¢ŸÏøÖõë\j¶ùOP·ÜÓC•¥pZ!‹CæýCÝ܇óÉAeHæ-®·æ|i}ÄÝÓR÷N+¾¸q:óŒÆà‹’¥•5Œ 䫊ʉƶg³Ûg%_˜±vwBú~ÚÆA£b5oP_ÙGјì Áèx]AX€éªl¿ˆ‹–!Í1³3…ÝŠÒ ˜Ekj› o2X‰>õî:Q3`~ÐVmç˜ösÙ‡õ· ;岸f3Þ>Í4Ïr^»Xe…DìÎHete¶L7¨áJ§rtNýRSñZÉч÷iøgx±w‰áÕ{<^?ÕVÙ`#kqÏu°2%ÏHf/Ÿï°~~ [»3¾ÿJÁ¤gÙ½WQ ê¸UC>¨1.[ˆN9d٩Ǵ֣ѸPzTãÞè9LÍÓ ÎÎgg;Ló–¶7ï±ò{Ù„ïGªÏ:ÜLÿ²îwþýð-ÅZÁ…í°EXzf¾ÀѤ–Où¦ís-¨p„Õ°x) Bšaïh£;ç4†™.Møê‡{<·wÁÕã‘vÎ'´ G£ô,&Ý\âàÆšæõqšéJƒ—®ÊÖqáºy`îÏÝO >N ßOeîæ”o÷é¾7ÒÚ;#V~pÆÖ­ 6ÖKv¿Ðb弤¬—ZùÊ2«ëm3w9£É)“у‹SÏ>áöá8Û;¦{¾Íè×éݔɩ¥­Swk´›–µ•¹v–ê¼²[Ó —6y~k“—/¯ðâå^ÚYÕK;vV6À[:„ÕvK+­&+­KÍ®–›–Û-ºõ[íM^Ù~™gon²üìW/W¼¶³‰Ê5bµcdâEA<Æ«JJ–ÒˆvfUÏ^sθ9'‹ ÚóºÂÊÐÌVfu\Eèz0&Í8»Ê²$üÑþ¯S¢W–ä®4˜ýú™aŠ¹ÙƒI©0·Øú£yJîæ¿A=˜É»‚¬X´MۧŃUæÕÓÈ]iQÊàw(5¥Ô1A°¤f‘Fxo1È ±Ì1aC³ ÍÐL ²‡ê^7tÿÆóô?LyøN‰z†•¯µ©'TÞËt#ܼTuw@´T#®Gà<3UÌ|EË-ÀÇÜ–XÌ`kr8èr°=esýÒÎ5.·Ú¼õøð¤XŸuþùi> ‹ñÿ& Âg<ß? 䳨“~¿ÈŸ' ò9ù·€°\Ifجd:7ªâÒÉZJ‘†¡.íl²~éº5‘Îtúñ=8ÓJCj¶!W«1*ŽŽºœW9§­Û„qªž»Î’–ë›[,íž³w8Öù£3ìôBƒæÕW¨¦'¤ÃC0¡¤§YŸò¦2ò$ ÃÎå6ïàK/E‹ØeÅ⬤ÀR9C–ú«7 žÌëŒ2Ž‹)ø ä¯¿ ã¹Õ[ç4bÃæZ;cðUFÝÖhvºòÎ!ïȳˆÞrJç¥} k!íEsoB>YÃn‡hãºñ„Þú9ç·yôö %µ>c¦ä­¤Ý×ñaGŠ#Br•›Kô<„>Ô<‰!6„r¨šÃò¥zEþƒ˜î}Ç{Í€¯¿$z®Ôÿq–óøô ¾qŠËGÜ].”Œ—èLÖ‰ƒuùª`öøTQ«AU1<™qiëßa}&îl~¤O¢/Λ¼8\Õ^Vqû•&›·Ô Ï?ôºvb8Ù øørÎ,¬X¿Ÿ´ÂÍŠÂ@mRpU·°¦á2Û H§::ÙæqvF2bÉ)?o2È×égº^ûˆ·8åŸdgTÓXÛÙsœ´÷u˜|D¤®ÇÈOÉó3†Ö“—–e“óãoÅ¢øO!”ŽùÉ”†šì(ŽF¸÷Xï”ûÚŽ™ôZÎÑ¥ºXiòþ«Ï°¿½Â¨Sãp³ÇÉzGÓfB0©[Ζ:l­«ÓÑLÉË'Ï^"oÅj§3潄³+åÝÚ´ 8)”ì—Øó’@žúaIýútß¿`³^j»¬Øê§j\X¹RgûÍ:_èå&¬CÏl2æáÞ¤½ã;ô‡g\\œóxÿ÷ÜçÑÞT®ØBe,WÍqy+K\™Sd¥jጵžçÚF›—:\ßèèúF‡›Û-^¸æõâ®åÊMÇÖÕ&«ÝËÄ5ˆÊ„²qÌR-eGѿʪdN*ä1'§,)Øš&´ó@ãÄs‘äLj)Qe©å±*[riÐ$”%Ës²•)g¡Î<)¾7ÆüÝÛDó7_Ñø÷÷á­©âÆs"ÓQX¿Â4‹˜”§à“šTy>'Ïsc0tŒÞ ×[4ЫÂXrà:86(Í}0–(ˆäÊ>iZâÊ ã<ª†,×½âHík-Â×.qÿïaCqó¿Þ$Ù‰1k ìr"oV2+5|lo ë= R#æÑÂÝ(¬êô6fAâzðxUx2S*7…Ëä?ÃpýYé®?)FL?!ÍÇŸT|Å÷“˜|ü§’>íñ?Á}ðŸrmþØk$‰¾ò7ÿSžùÙ¯2Ú¿Åø|ŸKm}cy…Zp+q8›³„×n«Fb­aÒxŠ`Œ¼ˆÝ¢6Ëaü<3K†J²E;ïÓýx‹%¦T®J¹‚Âb0ú£X|ÿ4²60¹<žÌG^.Ô²™ûhé.­ÞCv#2ouž¶MW¼ŒÇGf±#{Z5&cȱ ˆÉÅÌ yÖ¨ „g^YùºfõK[|íR›ËuÃÉÙ©ß»O<˜POCjqWq{ÙŸMC Žó™N÷}lK–‡/×[ óÏa4V6ù+M5z+í=†j†l$$|$0B¥Á8Cê3¦AÎ/ã9ÃŒ;‡J’paP-JÉùÅ a$C†¤sÚ±8Ìy¯Ì(¶¯ÜhÔ ~ã8Ã/i‰;ç§ã\aU±Ô[“ ,¾ª(Š€S–_xÂÞ¬ƒù`›£3ê q¾[Ã6ÆÚ¬ï³:óá2¤'ÌlÏ |uH«™Ö-ýâ ¥å ©—Oè—F­µœK[g*úk>+ bO˜ˆì´AíÒÝçOuñ¤ŽûÀ²|Zqw9äÒ®xp2чåˆk~V»6æÖ‹û Ë©¿zX#c[Ö×(ÎTMsš7>3–òÃ+ŒëìÆ9½<çµi‹òΖ.öê~|uÂ'W0J6Ó¶¾r¿Cëñ”ïýLél–„ZjžÄÜ+|H4˜E;¤ED¶òðøSÛ¦ô©æšg]Ÿæ=ÚAÊãæ÷ôòÔg³)ëÙ†ÒfÄIó1AØÃVdHsr%èp…’­ú„_¨;‚ÒË4jøÂùãŸpúÑ µƒ ölFu0eÐj²÷üÃnˆ—×£ÝU|UR§*#ÌRß¹3iÅdI@œf˜*×,¶ŒZu_F†iËpº\g܈u´Þåx£CPUj¦LÚu^ßR´ÇªÄrçÕú›KJ²Â'ã\ÊúβÔm:¿ª”Í¿´Äå¿v‰x%$ŒEïrƒúrÄÅ^Ÿ£'{\ 5ŸÐœêøt>â£ûûÜ~°§[öüíû|xÿû')³4âb0ãøtÂéùD'ç3Îú#&é=MƇþtr¨ƒñÓsßíª­î3gÔ+C+ÕÓ÷¸E'D)äŸX€ª ò½,¢QZµRÍ‚Š4Î|è-Í4QàñKÓD¦øóß{ÀðÝÆsƒÁ5ö+ì¯ïa~Ô'þ[7™]Dšÿ·’ ÖV°á—™–¥FÙGÞº)°M-rÆš§³E@‡—ä«E žJSbå½—Çy$®Rš¯Ô' »ræi¦2¯ÀGã-3š¡ðF³ÒÊåe­¥þí€þ÷R¿õ×z,ÿ|‹Ù“ £·H•="kd–kT¥óf±R…|E§SÜy¦Z§Aé2#ÂÒ~ê[ÆáÖj„„²Š0DµŠ`¹@Ã6ÅÁ’tp‰èÖ5Eï^Çÿa4{äõ I p¢p‹TÙÊKOcb¢zÚ{â ]’‘'°*þé}ŠðÕ;‡ðÞ‘üãý÷|ÿÝ}ªã Aì& UØò•‘šúŽRºÎÓHs4~¢$+0.ôã …P=(ˆl®œ‡£„ÉÜÓ®{æ³Aœê¥ëë”UGã´CV5™1dZV*½¡×hRº’>)‰MKÆÖ˜´ðÆJ¤O#é—)U*r¿‡¼ac¾à*ZYB<_MTáýV–Ií.“f¥sÈÀk(j1>° èy5Sç…µUþÝëŠ7~‰ÞfDi7äN÷áþÛœ<ÖþëȯT¼øÁ.?wЋ†8Yã|áPQˆr\R¥Ž´Ö`–u8ë÷¸ûÒak¢ßk3ŽÑû7ælì6Ìøþì}ÚlåŠýO’ìü¤Ëñ?NÚþošÕôfÀ?iîúIÎ×ÿ~ÖŸl|Öëü“Ì—þ§$>íÞýçôù4“ÏŸÆ\ôY‘æg1ëSP¤þ”¯û,þ³ zý7WŸr|ú”ëÿÇëʵëúúñ_2;;ÔÅÑ]õÚ›ú‹+[\ª%üád¬Ûó©’,g'²ÚèÔeT9QPRšT’Wè­´h@×4hÐÙ£5[%*ê î$IŒ*Jyy¬,F^OWq‹(ÈV+å TP.ú§±N2e€1hÙˆÞžºíCŒ†³%ŠÅžLráe™\heËŠpž+Ê ª0 JBÁ<ËéW†i½­çw×ôÍKMšµˆ‡‡=Þ“=Œ*]YYÖÍúœ;iSû“Pt¬43¼0…•îŽÆô9KÇC-ŸŽX:›°|>ÖÚÙ˜ú¼PfŒsز"ÎrºÃ©T:>z~‹þrCG«?%m-Ë™€N¬'Ϭðèæ5VOÎ18ùØ`„8/Ði.~8 úgçjÿx¢æQ¦Æí>+O&¬üÇl|kI+/$j]‰´ùFOÍ̓Cƒ\¥ù|Ä|>QšN”¦ÒùDóùâûpÐ×£½Ýø˜Oóèð‰í=æá“=îÝèö½±îßž³÷јó#åG'‡<¾7ÀNUåÖ{É9œº8.Q£ÂŽüâ°pNÎÑ…y,؈²š©*|€ V0~¦H©jQÌp>•-/ˆLÂ(ßÔt0¾³ùK]mÿ‡=¹ÊË•ÊÓ9ÿû]õÿñ#¢gZª½¶)œÂÄÊ{ÛPþl®ñï>Vr©ˆs?§N@´`œ…‡B v"PHH +ZÙÐbbGù»Ï«øýë*~ïüwoÊ>ZÁ\4dF5ò×Q¾y¤ [—$iQ¨JRù4l1•x$d%y ¿è‹—‹ç÷ý#©(ä)ùpN>Jå²JQd©£6žšËTó)²R­ ™ª£´ì05±Š6d¦¡ÃÄé¬1!æt½×ŬF½fµÜHqé"MÉ ”U[ìŸÄš¥B6Áy/“©y±?Êùøt Âe·˜ÎcªØÈÛ§±‡Æ%Â5c=_‹ôZÜTÛ$8:æUÁ†ÓKÓ±¾‘§`B•‹®ÅÃkpÁ"3Mx9WÉ©ÐîÊ‹\»ô üâ³+$­«:¯·Ñb´W(ÿÎÏñ­3ûO$ûFƒw^â+{±6“ UÖ+ *¼—ªB”ÓÍsÊ8Ñ,_ÖÉÅ’î¾t!Óë•·{äèïNôléÐÌówÿÞöÓ?nFùIf´Ÿt°ýiŒŸtnú,¯çSæ®O3yÚ1ñ'ü]}†ûOÃ&}Ú5ø,÷ì'ewþÇû¹ëßr V{s“¯þ­ÿLA(O>TQd<ßÚâ‹+kL¼ãûã‘fUI=ÍÙ¨…ZëÔˆeeT‘S’›B’'|Zñí1UBäØ*&É›OC2ÿ¨ÄbˆT*§RN(ÈÈc0 0ò´!'P!‹ã°{ lºõ* .êª\ˆAj6.èô±Ù=àùªÎ<í2š{a¼•q‹êCƒ7FUàL  ¨ˆæ>0rÖB‚ó\äènqØ\á»+\u®{KO˜MÉ‘îŸP›^è4Õ´â´èp·óãrŸš­éËë¯`*¯ÃÑç§n<æÒVÄé0] Æ.Î.Ô¢UÚ¬· óc'l®îæ2€·UN* ¼r B»ˆ}:L–ç|¡$B8Li8¼¨ÈÓŽ"îž3wSþƒ¯îœXކ›ÏÕé®$up³¬NÖ,­ôÉÞŠH?zŽFtH-4œo•4–Oé=•Œm\ºy~`û}í•ßaãõwØ|ù¶_üCu»ÇŒN®²üås5{#ú·Û¤§©¼éS‹=Q&’°–jÖ‘g¬õ>ndÙÿQ“h\R?©ôênÕnÀo¹4ßXáå群ÓÕ‡´ó#Þ<þPóf—j醪“9ÙñXI=ƒªÏ¥W^­ã<>¿ÃÝgZjvÒ:Ãw×hÏ–Ø«ªjcöw¦Ü}-_ýÅÈðþú˜ÀÁzТ21ñ±g6o“-'û—tVmÅ9YŸù¸§É|ƒ'?äNó;¢˜’P4[øFKJZÈb|J·ÕÖx±ˆ¹>ËC¾É1ßÚH¸ôÚeÊIÉ;pÌáÂNáåmÞþ™Wôpw—ƒÝ+Ì[=¢2D$w{ô——9]êq²¾¦³Õe–û#^¹õ [§}V†s–ÓR±ypã9vw9Yo2ê¶U+àòãsÚã‚Íã!­áT¥5DYÁÊÙH+ÇCNV[ܾ¹¥¬1ê„”ò8j³”0M©¬dœ'­Çò‘%”ž‹•~üòÏ~8$ùÝcÂwÇÄpAü¿î©ñý :o´YÚ XÞ²¬«Å•7›Ú}s…«o.i÷[K\ÿù%²,BQBs£¡¤7›Ð°Õ¢ìÑ¡fÝ›ˆ¢ªhk¦õjL¦€ÂÔ¡¨ œp#õ|}GÔ/qä_aà#a':|EÝFœËplhQ²(´èb¤ô­v—Ÿ¹öuV{_`­^²Þâ­Á3š%SªÁœþ?ý‡ÊïÝcý¿úù_7ªE|ñã7íH3cÖštÜ”Ê[ªÂÃ,g\ëp§ù û Ÿ=Át¦¼òvIÍs|cÂ…zŠùG?Üã·÷á-~.Áú\‚õ¹ës Ög‘`}íoÿm®|ñË:ÿä]fƒ#¶Ö_àë+›lDV¿?rZlÉ’Ïç¬Ô"­·ë„2²^”òd*úÅVÌyãÃ*¢§7ÎhÎV0Þù`!µò¡J3ó^¥"¬ìâ÷ZH¼oñBÖd4Šº§jÊËúÐ:âr›S™R•™ñ>¯]Э ô—Ó V•&ç\Ä'¸²ªÀÁVe"ï‰æ9A^ªŒC\h! ©œ8ÊО«±[[£ûZÊÙïÊ»ËÞ?ƒ½ú{#m•Öw§–ëž½(ç½ü„ã äÊê%E•óýÁ©žá¸¤°ÅbsÈÓRB³0šª²È-¼q#æ/¾²ÃѠГ³)qhð’¨*ËEÛµØEûµÖƒV!MãÈ{ƒB¶€aV°Z[Å*åíOÎyîÊÛ«-ýx/¥ÌçJ/.h/­D ÎW„k}ÂÞŒìGuf¸Œ©Ïɯ¤Zjâ—kú?üKìDgyž¿Á›Ofúêü„³^ÀÃÒŸ­‹NÐTf+§vNèB’p ; GŽþx™G£gù%VëO¨ORÆÓÝ‹nû;¿3%‹T5Ú^q#Ié_d”I›:K¬ –¸ðö‚S®9kõL›öRŸ©ë·6oðík¯ø;/ÝäÑö&¥ «% íI>§ò9•Kq>鈠B0(˜(\æãlʬr°Öåts‰³žr—ÌÇ>Ê2¢¼ 1™S#ÔéÎÝéŒZ–«–;j…gV¯«×ŸÐÏX9³~Чô^çKM?ìÄr¾`ÔmPY‹3â`{YQ^1m&>KBu#¿~tH Ïh}™$K ¤˜ƒÿ8#ø­Sj¿²Gíís5–cZçj%És miéù†ßþb×v¿\çê7Û\ý¹gj˜F¢•çš,]o°ôlCKÏ6üÒõ†z×,?×ðåHÓ1ô–ëüâ›ÛÄVÞUO]n ±à;…aåŒ"§ªáðÆû<(éf±Z§ÆçÇcù¥Ø›nBÓ‘7 üÕÇØ_Û#þåë¤k!“ï<$ôR†¸Fƒ1Ž´#šà_SÏœ`«=\U"kd%Àz§u9µð:BþœØ9ï)ÞjÙe•ÚGT>TEér\éÁ!c—±x¬øN’P:OY9yÖ(| —IK_®“-Ï}ç¥ lðäW~ÈÅ[}’X;ÿí›ø#Mþîp¿¹ïÝœ“-‡J¯$ÞÝíSßí‘Q©tŽNR„ž“ýs~¼ïõšjq¤ dCp5ÃÙs†¿r›éÛï)?ßC!ÉÏw(iHö—Þ‘»z KÑ™.»…ÅbY9”µ Œ(Þâ€*«˜ß¿`öý}Œ÷ –ê>?êÁÿö!|D©Uà•˜6 —øV6%)#2ê:7]Nl׈•yëKX»Ê cfrñ ªÂ¯9CS…¥¡U¦Šq̳’"ó$‘%-I€ÚáL*Çãg¨ò$>U=&ŒXŠb⸎õ™j~@Ó¥$ÆÔU¸È«ràÖkërá‹þ^¶Öð¦Oò]ž©x±ÞTЧV×ãV G< ‡O „†°½D%qëè‡Ü:}Ÿï¹wzKGÇ÷ð³Ç'Å5ý; ª>ÚúŽçg­£QsTãŒn’â½Tæò~’Ë9¸Û}‰#-q±ñµ&¼ün‡Âˆï}q¢†)yñDºh’çÚüà­FÃìs Öç¬Ï%XŸK°>›k÷Ë_¦³yI³þ„‰^Ú¸®—C«ãªàî¨OÃÚpVÓt‚óN˘$xƒ‘'W)ªDÁÓÞ(¬bò #*ê.^¸Ê‘DHOTj.œHd„*áCÀ`ð*‚T¥Í0.–UIä8JÆaUÈ{Oi*Y.„Þ.ÒÑßâb.í^rÚ¾Óêt#~ò˜æÆ7è.éxð ƒKÇJw.ô`¥¤·²§o´û\Ïë<›/Ó;ö:^•ºs[Ê …cu«X¾Ã€ŠOžlqÔ¿.š¨;?W0«qXFºÓø̓3¬iË%u'’µ å¼' 6ù:äCešªßÎd[ëZmöôƒÖe}—eEi®W{ŽNÓòÁ¡S9MÙ8>fëäX”SÙñ™ÂÁñt@4ÈΆlóÚÝGìŸiíèŒÚ|ª®¬ðÑv—GË5>YJtÔŽ5C.Z‘ú­„‹f¬³nCƒfDJÎÁj‹WVU+“ʪæòA5URAÇ ›AMke‡$ÍYó¹šX2Œêq@#¶´’€(²r8r—*-Kœ7„L%Uø0&¨×©ÂXy™¨`ÎÄxP­ 5®ä‰¡¤kí®–¢¾|v[Ú §t+§ÊynU^oG‘Z ª( ðî)øX˜o<¥ŒˆeE¦óÙ¹*N– ¯Â{EÎ$ª)¿ÑeÞ¹yY¿¨ÝõóY¦$*„FUepi¥"õ5·Hƒ%Ö£cÍjC]ºÕRgé£çf:Z/X® ½ŠºáÄVüö?{Äd”.Áú\‚õç&Áúœù·i®®êú›ß$n$š÷Išë<[kr#x˜åz0“ FeNT–dU¥vN-–1‹ô&ïU '0Þ Â*VM)”zÚ[$?Q!2kœ©ô¹·UôT9¼ˆ”_0 Vøy<¤'DyWVIý<œhä>,›XSVàpÊmõ¡¯— ³hªÓæ!õù²Ö';lù„ ~„íÝaËǤg뚃Ì"Ö‘…,‹* $A^¥9Þˆ"‰dÃ< :{FÎŽ|teÆW¶Ö¹Ñ¹¦y-ñÃZ‹ÇO §–ëk»¼WTµc}h ß[ÚÖv38¿ ´%>(µhkÅO£¿äÌ"ð&ôTeÎÏtÆÚ›Œ*‹5’Êj¡9ù£ècP€³È±u¹©Ø¶|V ÁÀï1ŸyŠ*bÞ:¥ÍÙ;Né5/«U xx1T ‘ ‡ll{FГÖn’ÛèýÇ'õX«×N}¯6%?¸F‘zš»w°¡ðQD- x;›ðýÉH÷˜ñàÖëþý_$?è©'8ë4Æ>gK_Âç{Ù¹ cbåçÏP¥1+_ÿ>½W±ÄìΪ.ÏHO ]y&âà Õa¿ò;WBfHëIƒçûO´ 8i]÷Ó Ã¥ö©’Ž!NB¹ùˆ“aÌúsß so.wòÄïFAµ}Hgë'«3ýá¥|kÐð/æ1½Òhn­‡žÌV”Æ‘×,§K% z8ׯ9­ù”£QÂÛÁuÝóÆ&˜¸‰‚X*çž| „ªÂ˜Äuˆ«„A뜢×Áv70­g„윞±ûø W/ÎyîZC;MÇüWßöÛ·>áÚÁ>ÛG'l³ýÉ»{\Ý?gwÿœÝ½ íî°yõÁDÕ`LÜûöé9ë‡)›%[sž?*õâ“1Ï<:ðW÷ϸþäœKÇC.Z‰†5Ë…qœ/ŒÆd®ãåk=òZÌÙr‹I£¦Ð^A¤ý ²8"IsVÎFt¦¹¦õS•¾6™éhgÙƒè/5 Jǰ×$.Jâ¬À:G=Ï8zf‹´[WY¸ÿúUù‰£ûÝÂ÷§DÔ|çÜw~Ð'½—‘ÞKq?qûvŃ÷söß™êð#ÞžpðÎDoOüþ;S=yÆþ{Stk*Ú½V(´ÞF&\ЂedäcaBKY%ãÜWßÛg°ßgø£cñ?=„+ ß~v™öwgªÎæ>~}]c›ùQ·‚Ìþw·0{)þ¹ËŒ><"˜dô¶;Lç•Ê$aV4qnØ pS"OâÜ GUú§u>•¼"W¼—äõ˜À9BŸPºT ¥åº¯LE¥#-’§Œ/|…_¸²1&’‘!ðcZQìsçxžU%K¯¬c\H¼¨:ÚIÓ¯¾ÚÂ4jWº¤'T”ïÿŸ Ðô×îúîW¶áJ‹á§j¬7I¦œü‹‡Ì>°õ•¿|mEJÄ8N5¹7¤º3¦ù¥Uj?·AóÕ5Õ®÷¶jdY‰ÏA•‘M…Še1,â‘] Jë©#œ÷g¿}ŸÃÿù}åû#Üñ”áoÝcòƒSªqAm3dóÍ]Í¿î‡z-×CÚň¤!WhbjÌû3Ûf¬ÚÂÄïsä2oŠ\Þ¼µ)6̱±ƒÂ(/DÍ¿XL>Õ’›óqîõAáÙN,µÀPIÌ Ç¸pšŽ´Zä|9ï)¼ÈK”…¢ðežÉIˆAQ0èô΃ߤÌÔåØ7+ÏÇI›ï`¹UU|$Ëy âÈçI,ážNbQê[A’àê|/by£&naà ’fO›qstFa¥ƒ€ÑÇQ•@ÿpN;ÏXÙLpˆlî妹Ÿ'MÖ/³ÝNY 2¢' í‘å¬[pÿj†—´53lœXŽøû¿uŸïýþþgÝô΀|΀|΀üÿ¹úµ¯ñì7¿E6>Óðèc¶—¯èÕ0–—ÓÇãEF=®i iš¥X#]î5i%‘ð"JU*ªP8+cò…€JRà²hJΨϗþho#a‰ÊŽ‚*QIŠä ý­Z%4†©0ÒÉÕvÈ^ìåä°M;¯Ì©¬0¾±Çôã‘hw ÑÉ–lù¦¾°ÁÜÏ•é¯â_ìÉ`«K¿å¥4…¤¯m3õô iüâyûIÖ¿tw˜°ó•Ûl}uƒÎT•3¿rIÊňħ”c¦ÂÓ áDEʺ_8ʬ /J)ÕK(– ¼Û@¤ õ€/*Éf_v~ÿºß{ ÝoÞ“r¿Àõ2²»=|šÓ¾Ô‘Å®‰É?RÑÕ†èÎ.QÿŒBmKº¦A×4šª”X7FÊ‘àÇàG"6#¬z)ªJ©æºIAÉ"êJùF’óÅ‘ò{}/7rå‰jC¼·ôŠŒÒ²¼§Âú’„q_(Å8WÛ6[!´T#ÄÃÊt’†ô}K0C¢ŠŠ  £g é%#9ÈSÙ1ïKbõ¡¬¸RæÕÉN%¦4æØ:Ê‹Úl"µ «-‰«M9;û¸œ›>+[!µÚ9—§X©Õ$~ëuâ³{´~£.™qÃ*FC¹Þ-xéÞëƒRN/DOXœøf[‚Ù6SUO%(AiÅ¡äÖËÛD¶ç½¨„¬Vs‘ïv¹ÚÍøðÓK4k!÷Öû?­€ü´òSúÿoIè"èlΟg剧(Æ]I†GœZ8+OÔkôÊœ›Ã¨Æ³©ùŒƒÖˆ¬Î4˜ªDòúAŸ¤t¬Ôj’N-Ö¦“ÞTG%kÓoì"ªYë½ö#ã#1’Û! „D“†$ˆ&‚¼Ç±9âÅiD`Rb¬kâ°f@pNÂ2›‰°T –ÂÔ·¥ SšÉŒD.¢]Ì0_Ìò½Ó_”û•:»OˆJF¨ ¨?¦Ê > ăx%ÈKXœèìÆápžý¤)ó婚r8ÝU IDAT~é‡6bÿÍ—e/qëiyÈÔhû#¾S¼¸]QJÔ–"‡LúAŽ+ Ö‘zHˆ¤ ÝTQ;'’ˆWÁÚIÔZ1Ö’9G-ˆøÕ³gÈÅs»ß§T`<–ÐUSåèÒ]>ÿì%vÞòà`LT eä3¬Bok¬aérM¤z„ÙjPäó—©yÜ­œ2ªÑYPŸÛ$½sIööC‚sä„ò•ûu~m÷Y™KÿSy7í%])I–ÇäÓ*Ñé‚“²Þ.I~ ex–ÀÅâËòñ|¦äû'Iï_ÄÖsYøä«ÔgêHÿ¤ôoxfnr~Ùr]\ÇŠ7%á—êÂ4î2Wßã~ÿn0RÅXËtkLypGÆáyÚ«1Œ ^>ÄÿI&zm>6˜£xN% -s:¦ËŒscËJ¶Â…ñ,vxd8ÍbÑ K™ÓžÏ9±˜pq¶!]é°Ðj’õe¼ÞÃææ"­,à¡çïÉâ;ÛÌ_Û‘Î÷Y\ßårP²T£=ê³ð3]!«Xþè¹[ $cdr雜¾-ØâÝU¶`,%©ïQj&ÖOpDj)KC骲])¹×PJ` Oß&rŽûi8E`iù†ˆob ¨ä©L'óÝ‚Á°”ÚÑÇ·ö™Û;b³²3Û¢5ÎY_lËk–˜$"aÌáì§R&ÔF)½F…[–¸{n‘éƒ(pûâYŠ8¢ …Æ eíÆ¶4}ZGQk¹sa•»âÕgÃV² mW9¹?`m7£aTî}ø)ÆgÏ`çæÅŸ8A£Úâ/^ç±;»œÛ²º1³R^ë’¿Ó¥¼Ö¥¸6yu׺¢W{È›=ÞŽòå‡ãúù5šÛG2®GìýWϰœâÿÇ·™úås”IA¯^ÀKûDÿë )óc‰!Û‰ c#Æö”$Ù4%Ôu¶@J&ê1ê1¢x¦[¯F¨l–“ʆcATÏ`d5=J³MˆÁ¥*øI‘ù]² Ä6 2†{ìFžÓIKΦ R½Cá÷$ÍŠ, ß¾|“»rî«{tžYcúc«RÜ`¾Õ“CI8JSƒígWèÕ 7ç-²Ýõù½W÷ÏÔ|ÖAItqšàl“òFÞiI°š#u_:ÔyJ)ž@DjQ”/„[É)ÉfŸîË[²ñO_ãàkw¾¶G~§æAýT‹À‹?»FûÒ’¤{чOPýм˜µ)Ö_s0ŽèMJLBTKTRôbIņV” 0W!Ì2*2´b¤BáaX C+¼8ö”‚üÖ 'â9YY‰¸´Vae¡ÁC'R lmÇ¢¹EËŒŠXC-aÃEÖf¹´°8Óiì 3D”„QÎTÖæ,ªÊ^oLP@mœS‘9¦´!Sek^¬ìU*8a"e/*>È1á —ù¬<}ö4ËqÊ0ârÃ1Õ}’gÏvXžkRš€÷ìºL€÷ ޶Éz¸=ªaÂÇðémYbÊ#–* gM*Q^Ьœ^¬³\¾s+áw’+^úqã­@øëGÊ_£óÐW±tð²ð?lÑõÿà™ÿ÷·èOø¢~ }:ŽÿàoN³4_øÒˆk9ÚÝcóÞ]TUÅÈûG¤ bŒ–y.×_a·+ÆßßÀÞ9†ÝÞ_ؾ>;ËÊ“O¡.×ñþºPkëààžøFk,^JáÁ»‰x~ «û=¦êyhºŽÏØ—T¬aä ¨Á«À‡·)ÓýlunhXÆÕ÷†ÛDÑâ :©AC/ª0ˆ EQr­a$ÇR`$¢ô!^ „Hà \HXÖðaÁTÒ¤Q4ygîMÝlß“©ñ,'ϑے¹t‘Ï)ò¯žc»zâè"‹‰ç²ð¢5ôe[zb >Ö#–³#–†»ìê´ì‡uFaŒ ”8UÞ7–êc{ü9_~áEöæžü Ó•IœÊ¨lNaŽRqÖc|‰˜§ þ½á©âU$´¸JuâÓ᱌ù>àTQŠ\4ŒˆŒa«;âË7¶xla¿u¹Áó뻤ÞR«ÌYáÞz—oüÞK|t¹AöèeyîÆ’ረQCfštòÆ×Æ<ÖjS;5@4û‡l-U >Ñ"úÖ‘Üzþ ­’æå«œ!âÆ+ |'x˜Ï>õ]>­Âï¼ó›„µˆHJõXñjXh®³zb£·jòàëÏì_¦Ùœ¡oÖê—š‡Iƒ§µ™Ï•oË`ð*báðO>ŠOE:ϾÌÚç_ >ÎΗ/Êùný7<÷®<àèc#ž~k–kß™—щ³<}ê>|—¯>÷Y°ÆùŸ Õ ÒáMÒróðQ°Ë,|6g­š0CIá„ ÆyÎ;ˆm“× 0Š¨Ç•^½÷Çâ—¬È1±À‘$òûõ»|¯½Kõ¿í`¯5ˆÞrÇYO¿ªä¦…`H#O/H©çÛ¤AÉLQР•˜ºÌ°ìrÔ$Äž3wö¹tí€zà‰7¶(kU9Œcî/̲6Õ >JYÜï3 ç^¿Ït?áÞj‡^§Aë Oyçâ µq‹ùÝ¡\¿¸À‰õ=NßÜDEùÄ|›0‡£Ù*ûKöfõå=9ùÂ6ÀæŽB ¼Ëè‡Â7>þ¸DiNÚn1˜Fÿb-øø–ŒÁ—…Tº þê‹2ÕïáD8usÖÈ“[CüÈͶ†áHü¸Gô¹Y¢+ÞŒ9½_eP…í½ŒÇÊG.TÕ«›xË8ý#lÊlˆõCLzHÓ<£J¸¢õåbS¸Ó‰ q,r/.„WÞIxgP2×Øï•“Yë'«Éøüû‰#?hçÊO"fü ±ïûåÿ$ÎCßg,-ÿÐ ?èËë!˜ü°ÿé_q@þ  ò~ÿÃöõ—‘e”÷Oÿ‘ƒds“—ž{Ž"͵½º$õùÔy´Pâ©*ŸxâÏæýüFzܼƒ÷žåµ5Š,CŒyïÆZŠ,ãöÕ«ôºlß¿O:P™jÓ^]û‚2OhÏŸãD%&Ãn:¦§UP£¨œÅ š¨—{ýÏ:Ïl=ЮŽøLšÆR¨RŠ"(^彟әrâ®{ÜÚ'"Ѝ J¤ RÓ#'ÇjˆjAct‚Xƒp_·ã{²œžA|•BªDŒ™4[!ª¨w"ÖD>F²¥MIÑNmY-r{ú6›3·µ’7˜.RX/í¢­Ÿ,åH#^([Ú‹E[ðÌüËÜpÓÚÝ»$Ã2ÆÚ1Z#Ò¯ÔIƒˆ‡ò=-Ôgt_­Oè„ÛyU7ÊÛU•?vQA2ù£ï¼Á¶Ï™>û°Ö;MòZ*îD›`·«&¢6&UEÔO°˜ŸÁMY¨Úñ*j X•0²\qqŠ#µÀòæÖ!ÿÏWnò+—gõïœÿY¾ðΫRÔ=gNβ<²|÷Î÷pa¦¥ç§¤—Ùb2°±š¹ ÔÚ»I #ı¡*B^ªTDB! kUkDV/Tø‡ÿÍ*oÝNøOþ§»ì÷K~Y[þ qÕŠ;¹YÞÇöï'Øÿ«€¿,žûQ±¦üÀãÅÊ'ÿ°kñƒâá÷“Ðï¦ïŸ.?eóÎ]6ïÞC½çÑ¿û‹œ~b…2+Põd’<ÿѵ.ðž2ÍQïß¾µ"LÍ´h2éµýscH•öì,áþí[ô{=²áaé(†°NК£Ñ^ä 9¡–ìH\Aßõø:†CŽ\Ia'Ç+¼§Tƒb ŽÍyÿ <òˆxÚƒŒ*GX“(K,sŒoUõ½Ü® dQŸQe— «#Z9†/zÜå18µä.ÀŠÃh€±),•¢I:R3¦y´È 9û¬¯~`ýCLõ–)Ã’R#ZÕŸš¾ÅïüéÁ³<Ô}œ‡÷™žÞäKãöÆUJ¬*©± ƒ˜7LH@ÉEŸpI*¼m%"’Šˆ{#OÖ.?ÎÓÞðâó/³ýàÍ'>Díñ3ôײÛGvð¦ÀàP,ŠCÅNÚ°¼AÍ$ÃHt,Û« ֢DŽDQd—ò¢*V ã2ãKwÞaçÞO¬}„ß8ó ¾pïk¼Ùí³hkø0f#«pí·i×bæ¦kàK$Ï!È Ú‡ûÂîÌToñPcŽ·JÚ3û¼þôeFÛ»\ýºaåTÀÊÌÎrÁƒŒ¿2E+Ÿ:õE¾´Yãä,Wš79™Ñö}Òíñó<ôK/¡ áÞo=Ìp}ŽÆ©G©Oßå(Ý%+žÃ›38ù8IÙ§W\cÖ ñ·fØþŸbù7K–~ã+h0õõ')ßÎÙ{zÀ ÿè*£uÏÞ Çk7€#/âJeë·r÷3|üçffAùìgg¨Ô+L×agß±³?fu9¢]¯Ží£œ«wRÞzý€ƒÍC"¯œºë™žz»Pg¶âj Ö V…d³<6ž„û£=“r*­a¦¤cèjAëdƒ ÂÖÝœáÔ)Ͻ3¦ž¤Ù¡r¶5ò—Üï߬£¥;Q>3@(ñŠf9Ùæ–êÐÜ“% …sLŠû]¼RkðÖ’„A˜ÒŸ­RM2š½Fs¬÷Ìö ÎVÈ¢˜JÑ"±›µCÂA9f>ñLçuT ­1®ÌS²”¤¸Á#)9 àô­…Ê0fsm‘»g–¨ .ÜÞáôÍmòJDëhÄýÕYî¬v×–xö[×Ô#¬óT²’£™o„jˆb “‚ –'ÞºÇÌÞe ¯å±Ûy(¨@®¢@èÉ'Lu8Ú(- 9˜´ú”6ÙÇJ‡Lv@À«P:7 žï·Ç(ÌV+ÌT#vGY^Ð¨Ú  0a•×ê+®äѾ¢Æ2õ?JóJ‡Ý¯Þåð6 6 RÂüSâ‡çÙxy“ú©6XCm¹Iû\õà‹’¢›`|æ(ŽR$¶Øz„G‘£Q‹é¾¶Mÿ¥-©˜¢Ÿ1¼¾OÑÏð$€Úêñt•²›TCü~Ž)¡Ò©R{l™°ÓX¨i„‰,eR2h ï¡mO8púï­Ð8òö?LðµB.ž†+™öCq4|Ž 4|6áö äÞ’ÊćÉaL@ÏEÀxÈD ^§2Î9ØÝÅ4”¨ÞĪA]ùÞ3Õå2áï‘#’€¯ð~2î‚@°.#O£PF9N QQ%%™FÖ0ê q@_¢Õ…(jà½ââ€d±Š·àt<Ñc©6Ñ8ÀùœV4ÃÙÖÃT¢„ªQOÃö—1ë‡Ý€Ã/AíC!µê4&jSÆ‘µ¨X\ Ao‡ Ý£Ò`T@Þ“‰GQB«TCEÄ0J•‘+iÖ EJwà§ù$÷a„™FÌÚ‰ˆÃ^É»¹Ð*GúÓå§Ë¿Îù) ýÇ+å}ÿéTgÛb+1ãýCƇ=FݽÁdízÒŸ¼þëÓï1ÊÌlÚ\-_ñõ@ÊŠ%­ IÒš!©BÏ'Œ$ÇX:³sœX9ÅâÉ“LÏv¨Z ¾À—¥Ù€‹¦”vµÅ^V27@ck¬$£€Á>]_H*Ê3ó‰&®¯¹Jè-ÖŠ ä8«ì[Ô >°¬¢â0X pRPH‚%’`.|Ht[·™N–˜Í–&2þâ‰$A&"ø8BQ5¦9ÖתBX¬§%ß8(å[ª¬Ô%GI%#k°HCéQQ—Í;˜öJOn;l]ÂN3_ݙڠL8K ¥¨B JaB ,c'4œJŒe¯ºA!‘ ‘ŠŒaËGÒ99OÃxòÃ’ý]jÕiéœXawÚb7Åäc¼e"Ÿ" Ø ?Æ8ÔøIød-b­Lxœqž‰M² H *„Wn¬ÓݼʼnfU6Ë!ÛIN/Í ÁHÄÜ”¥FOnn!°B’¦Ä±Êò™˜J˲»µOwk—­CGÇì±´ª /]dx-ÁgC™9“Ð0M ØC½ÉÍïœàß¼-`‡Wû'©E#¹²:¦Ö¨²~ä%ÛêcúG„gûÌž¿%å¾¥w÷‚4k1µ&ŒÝeqƒ“’q’±_ Õ–¸(ÌJë¡=ZO¼Nåä@â­vvÈð·¾ÃÞWŽ{¾@¼N4ÿQ’‘cûÖŽ´+–Wç™=ÑdjºNž[)JC-*XéÖ¾úöÿ÷·wøÖõ.·¥/î`Àƃ×oìpûÞ.wîîËkomóÚ[;˜f‘7rÿ ÁŠ°Üˆ%Î-ÓeÌ|Ù¤J(U…j!RUC7wr¿›³t²ÂêÙˆù“c¸zu‡­® ‡èÁz°?< <êJyÐÃg.Ëð 2Ý©VðA3m˜›ZS„ óØj-<WãXªEA˜(¦TO`@=A2FËœÒ@i­ØÒQŠ£ßnŠ¥ SH%Ñ¥ŸS+bªE•ƒJA#SidC¼ŽÅù>ê2ŽBEìÖ4°Á j*™A{C¦ºGÒé TbÆ3-öçšôëUZƒT¦‡,í ¤³Ó…¬`\¯Ð›iÔ*2¨G8Öyò8Af·wX¹s‡é£®ñ(P~Ÿ IDATÄ…•ÖCn^Zá?ÿ$×/Ÿ¢;ÓdûD‡Í“sl®Ì²¾¶À¨Y•©£!‡í×׿ec¥C«T.mw¥4Ó‚°p(¥AJ£d¦$gIì ¥©† ÿ+¥”ÆRºV2TçÅ1…"b%!¬TŒäE†è¤å™A¥…J_¬ßÇ <'IL‚“LœìP1”~²Ý±g)(LW":µXŽÆÝ$à D"Äa‹‰©‰ÈŸ´JJ#|ú0”¥üø,ÍG:t¿µÎÑNÌÎ÷r²Ge9“ÿÑ#äw2©t*ìovIÆ,?{ Ÿ{z×v¸ý{× ¢g”…ãà›÷ØÿÝw¨V*ë¶çmzßÝ”ƒçïqøúŽ nï3¼N1¡ÁÄÁ 3(œ¥0óÈ ±• Õ•iŸY•ú‡¨]œ&š«‚¼S²Ò‘Ê$ó®(F‘!ª[$¶’w3o yðö˜1 ÆöÁ‡¨FÇe)U‡÷C)õ ÅCnÀáÅÁ”%a:ñÇ0“‚$6+W2ª)E$â´C#\"Œ¸é6f‡’w* #y; Ÿ²¸j@3º@%>)©v9ٚŠÊ!§šøØÜ"gg{ä'.s¯1\s/‘ñm™æ©ó'¤W˜¨9‹ø¤ ìïPµO0S!bÄRj Oˆ¡ÄŠ‘ƒQÀk››‡U~û¥ˆñr†#ÝŽ˜¨Ã—^KøÂW»¼xÍñÍ7rù'_Þã·¾´ËÿñG{ÜßT?ޝ&|ÊÐpöT[Ä㤔wó,0¾û) ý¯ÞÚôï ý'ZÒü‹¯ÏÁD6>ð9zç‰[u–ž¼D¥ÕÀ;÷Þ6¶å@½bBËÊ3N>—¸¬ žB7áT ƒÍ¥õ‚XõzyfF¢°Æv˜ñÈ™‚z¤D‡yãî6÷{÷‰«8ýÏŸ”8RF&eãÁ¥°Å©ÎcïyEU°¦<>Ö4‹3•t Ññ!NJRé« R• ¡q‘Dcަ¯²rð(qÑÄI‰ÚŒHFƒ’iT©‘Uêp/óÍýßèŽ9Ì„440*õjeye‡³q…§ò³IõÊI^xá{ì¾ñ]‚8B‚Ú±O£Åh¨jJñq9¹°Q•ú$# Z”È8E²\50¢Õj˜[hlqÇÜ^§²ß§˜Ã­œ„($H?´<ºZås—xýµu¾øºc7-4´¡Ô™“–N×èmµYó>å8£]·\YUäÂ/ »—±ø:Oýæ?5¤{g–í9×nïòô/péã‡|åÁGõÅü)ùÌü=N„G|s°ÇÆK\¼½Aµî©_hà÷§¸ÿGŸ£»õ³ÌžÞRm¯³ï‹ßécý4FΣÚ@LD8˜¡Õ?bñáC®ü—¿Kãâ-¾úß'<ÿÛëP¤h1Ábµ`¨%¹Å«`]©C«âO.ð«ç>ûÔÙ¸‹WC5 8L2^º;à‹¯ìq{7¡pú1Õ ¹;n‡šp”œóò¹@³U% Iî¹²Tç©s-fŸµ¬¥5N ¦JŽ“IOTxÝêåŸ|gWS–"Œ1<ùä/¿°Ï×þéUš>Ÿx»0i5‰Š‚Fw„)x·HE‰ Þ¸L±ŽÚé)Á{CÌt{ÂRE¼ÇïîãûC¼1ø}Â4C dL0)o™ˆY¨±Α´ZÔG ‚0šž¡³³KmXâEJ¨5bÉqX­JJi8®j†˜ 1± H¥Žw‡>!ã£é6éb‡'f¨ä%zþ:~o@\¡ãEØYœ¦;ÓàäÆƒ¡zïd[vNÎ0jVhö3Öní²qj–A«ÊÎr‡¼³´Ù¥2Î8}mâÿlÖ{Â,§éKh-õÒSÍKÆÇž* ”ÖãMLnæq¾Ch#m7ÅŽwñîZ%UeNè¥9AÁC¨÷T*[á.éhL¡`}‰jÇCx qö*A1"ÈNQ°DhÆ““ÙÛ¨Ju|€¨0‡:W«Hw”ñ /ÄB+qÔ‚ÓQ+¢ØL%ø¹£ RÒÌP&)ƒïn2,fë Qc¢X/ÇœøÌšîü£·äÄ>ǵïÞÇ”J¥1¸wD9¨ ZgõWV¨†CÌ™l-àðy…|kˆ„†b«Ÿä„Ôˆ ˜Ê$°ŒbËÌÓ+Œ®’Üм8«­O’øg—&ÓêÄ ½Œ ä^É2zeBdž4¤Ì=W{ ‡%ûoöéÞëR+­©—* _N’SFÐãzºñŠ3!q—JYšñD÷Ù 0ÂÄJ1¦ä(™a³{¥§]ÿ¦Œ) ›á4â—0LÊR¥WTŽ¨Ú£Iòà ¢Š¼b¼ÃãÀxµ”ý1ÖæÏþ^as÷&'Ûá±…¿É7Üsü_ÕNKh‘M&3qB–ò:a½üc>s™Zs…çÖ¿Åbu‘ÿâÒ"f¾ÊÅ)®ÿÁkº]ÿŽd !­×þþÏ]äÊ#³8UÆe…ñÑ%÷6Qm¬vÆŠ„€S ×&/ç'\Û%²n†|óN„–9£Ä1*³uá©sœž_a»çŽr­U¹½ÙãóÿæyšÑ~Ê|í6_{íÆ?n¬¦?&0ø73þuÞÇ_‡˜øGÿà€üeF-ÿ¶9 ?ˆƒòo…ò>o”“ù‘½t³Ö°qDu¶ÍÉ?FX© ÖT"ì¸Ä:h憥‚ªGœS¢Z@§ ÖÕêiycó‰Kô™ÅEy+k-ùÿØ{³XÙ²ó¾ï÷­µöÞ5Wùœ{îØ÷öD²»Ùbs4iR”dJ²" H` ŒÄyHÄ‚8°Àz ; ‚$žÇ–G`ɤ‘l‡f7»ÙÓ½Ý}§sîëœvía­õåaŸÛlZì’ü"³€}[§°k×®Úkß÷Ÿ>{qI+WñúíS9—¹²²Ä<ÖL|áZSŸi:¬¢–ÒV%’U}U[ ŽRfZ™©´´CÛ8ˆb©Ó9ýr¤³ö¾”ÉŒ•ÉŒ©p2'“B#}ñšh­¥T”|õdÌÓ'SvKOß8}øÂœ[?R™äúU½•¼7ÞÈ…ŽèvËʵv›«›§ªé©\,/37s~§û‚>;~HªÓGxX"×Z…~Sûrhô2¡n”7Æ*¦áý‹‚•Z…ù #£Z$Ë= nh¯óÚ—¾,ÉÞé3×g¯­ÈW¾ýÚ/¿†iµQã@ŒMz€+%:UŒAZ-!ÉP+TòÄ(Úvhbv÷~Ø<’$JžãnÞYäçÄnm`|͆,±lhÜ–G“9Õ^ApQgmáwž;”D#V Ý~‡vÖC½p°·‹Ô‘V«­Ýsت‘‡t¬ûøMYu‰ž|íxaþ]Në¯Ê'>]ñð'ô7_ÿy¹[?ÈÏm]Wmß‘ýù_ ì½>Óñ$kšÈ†ÜûîÌñí'uíâ!ñácn…»èS1U ƨ˜–X¿©”¥˜ªÍöæªj÷»òÜþ'-OrÉÒÄ€6ˆ[´ªJœ¬ôteINZm–æSþÚgàcŸ¼¬ZÍe2]ð~ëy¾üü!Ib1Æ`­à­{S? r?x¸AØ|»/êRBˆªª""¯ê½ÊÖ/ZûL—'ª‘~h6’~ÕÖ…"ÖtE~ã·ù{_¸ @æ„Gè‘›¾¡W½)XuÞÓ›OÅÄx1h:²4>¦5+I2*h3etý¾bZÄ1£$ç·›2UâáXµªkÐi;÷Ô4‘³AFe‘º‰ÁQU•ªÓ¡êtÉÊŠ|y"ëwï©«*1±Q%R¬©G ³…(p ÎÎ-ÓM»RÒ'Jvp~B¨óõÙKmïŸH{R0Tè­¸waU¯\¿#&ÍhG4h‹ÄÊþö²ÝŒöé\Vnîq´6àæ• n^Ycx’sþÖ!A„ ‡S{í€`ATT F¤v†6¢î,UºVÕ •hº{í ¶V¢q´GbKFÝcµåÔ'õÆP9#D%IR5Ö ÆˆÊ@«j$Án«gGLŒ˜XéªçATT¾#®ÌÐð0"΂7cõìHê¥÷æÐ QIEØèµµ®#wËJvzŽnåY+•siŸŽKùÝ~¥sA~qšj·‚Y™,yªñ”Á§®pãË)„‡ÿƒmfã…¾þ;wd82ºöĦ >dxù7_¤/( R]Æõû\ø+ˬ|zDyXÒ¿t›Û¿ömÌHШªŠØnª„(ý÷­3|ÿ&G_¼Iu{ªÃÿè}²ú ×X|ÿXýë§Ò}tY“í®ÄÜ«FE;N¹çÖXÜ+è,¥\üÙ5ÚK ¦Š•Æ}ATT„W¿º¯ßÿ·%©ç¬IIWju‰Ò4î÷oœ&6â¸(**† ÑÈÐ¥l·2MŒHTÑÜwnÌ«.³b@]Ô}‰n¦“ö-™Í+­ŠS~pDAGN6”¨Âf?Õµ~-¢ªÜ9ε¨¼ˆ6뇊j¢©”V۲ݮÈì ›ëÿDKŸË·oüu†íyró¯êÓæ«ü/Ù?”‘Œ4Ä ÷›¢(^LP uÁ¨³¦KU¹=½CЂ˃®»Á¢*ôø»7èþeå‘_ìʧ¿ü >1\fâƒh€äø–úz,kW*- AŇE½ êpfJb0R*´™Å`ÏøÖ€iš. j¤ò=Œq£jaº¨äËÏÝe2¯ù3~€÷?r™¿òw¾Èÿñ…WxüÁUýõ£<¾½$ÛYª¿ùôëò_üݯj^Ô$ÎP”áë;cM£!m®] !¼[PÞWò'Q´¿]Ýøãh@þ$²wª{¢ùÉãO²mlxª‡/¿ñæS÷¾ó"•Áö:—?ûú[[¸A‹r‘#±™uJC+ZBØÝ$g¯uZ7‹ýyŤ¬9ª=N׈1²µÑ£:…ޱxg(UqbÎ0(iì¡Ñ¬o uˆ†`„(†Cb  ØÐÅ»9“ÎM†ó-ÚÚŃ˜+–T„ƒºàÕ|Áÿup—JûeÍ(IøÙ•?3ìÐw6nRʘkÃÀ$©xö0áèpÀÉ<åËGÏ%5½ƒ„þHxò¡oÒj×üÜéøDâøüåÿ‡÷žbœo,´&¥|ô„p/ÛLÛ¢%hÄÆXê$!ï ­¢FN+[Ëô>ñN¾ú%þÁŸæSñÃ|à¡+¼r÷’WвgÅg£ÑÇ7ÞïªõI§,M šXHRV½‘ƽ$ÍÀ+®¶,Ò.W?þŸ<óÚŒgŽº=`jsnU;ìV|ŒOŸèG¦ë°»õ'·>Ïl÷ãÃCêN8ƒ&Ø` EÍÑõç˜ w98ZbyØcãSûô®^çêsŸeºô=ôà€03 Ò}ŽX[ŠmqDçÊ]Þ¿½É ‡ó7v“C6>ð÷Q”ƒ[O°æ~Êr÷Ïäæ-Ön2›ö™ê¶ë±ƒ”ë÷v8¹ýuê+\wÏŽ1‹ o„2³TˆVñiJÝK1Õ‚!Žøßþå1·g ¼³ìÍøöKcÚ ¬`òZ+æ-&÷W×û«dR.P1oj•~Hj ú?•ï| ^ùŧO\â'ëô+ǬîîüdÆhv¯á‡áöï-pFèm¬RµÚ4Is USå´?"Ãý²ê¬ffÞà¢?ËÛi*¡ádLç䄨í¼ÂMñ¡Æ û¨WÜÒͲÆÁkÍ7WQgáàÝo¦í|F«¨N© $óœÎ$§l9ÒãHLn_>ÏòÁiÕhN²|A¥Í˜JMStUª zÅÕGœ”G¨éÒÉ.Ò5çP×⨺‡{ýˆóò B 'Œëš×7Gm Y;œñ¾WwHËL3µŒ§˜¨x#ä™åÜ#6vOxß÷nâ¥Ì*‚[ÔÜë¦DvŒ$Áb¤M#Ž©4àE¨b m¥,¢âIиa c`Ð9¤“Í‘XSåe£òOS’Ä5YEÖ!Ö½=B䘷ÙÂÈ*FŸj”Œ¦¨Ë5H\!ÒŠEeNàðŒa‰o6 šmEXí¶ð>r»,9è%ô*ÏÒ°šõYµŽ¯tjrÏMS:A¨SHg?/É>{ ÷ÐÖn”¬u68ýŠýmïñHÒ¦ûþ÷q÷·ïQí—“YÛ‘$) )™…Ó’õbÈì󷨿?'»`év…ÑçB¼PÎkZŸ»Ô\#Ãé¨ÍÚû×¹Ç]è¦%í¸÷-žÚGŠcꨤO®£Ö W»´RC75X¯ÄF"Dg‘nÂæÃ]ü0'ìLH „ÄR;yÓY=C²câÙ“®±8ɸ”àûä±qm<šm´—CB©)y¿…¸%AíUzIÅôð5–²„?¡¬sÒ$1X›Ñrm¢úí„•~‹yxõ`Æi>§›lðØÖÿÀÞôKÌ«Æær‡Ä¶8‰2,0ñˆÃÃøÆÑWØf,]àÉñ1€JgVçi‹a’í@6ä°š²·8&s" /gÈÑŒ$IÈ×ÖØ¬=¿²{Ž Ã¢‹Ü~á.2Ýá©{LW©MJ¨3¢¶¨ëel¬ÉÒ;)Q«(æL‡èðƃÇÎsBólé˘¢™%&–à•~KøÕŸSNÆcÇK¬_Xå³?›ñ7ÿüûI3alJŒ”ÈÅñþüøù¯0[Tüí_†“ÓŠvË¡o±ÏŠ!Òöyð‰GqÉþöõßùE^ü¤Þû‰ä'ó3ý› "|‡‡/*BY‘Ž‘ÊòàG†T Ì'tFçÄZðÎKAe”Â)E ¾™æDóRªÊ“Y#u¥ìž”ä•ìÎçÜ/P…Nb™Õ=>ª¨ÔA©c"Dê©‚J”B ŠP‰GŒJu0œ$‡,Ì„Îé¦Ä*¡ÔЍ5Óºæ;Ó9ÿ÷ÑüÞÉ•ÌX>6ð7–ù¹µk-‡-S9Õ’£ìXúΰfZ¬®Ìظr[V—ælô¼´RÏ8O˜äùÞ½E™²˜÷Ù¬–ä²…½áóÌü*uI/ÖÒ‚RZ“œÝè‚pæN#XKRqµÇù KÙΈVIË“µ%Ù>Gq’süê«rî§´ ôN…ˆ=Ëu‘„U‚Öˆ3ˆˆ`jlc}‚ > >4©dÖÕÓí®à’6u=G£[©|ìñËüÜSç8Ý͹5Ô©pZÍ9·”Éù¥>/Í„ƒ¼¦¥%+ÛçD/œ£õÉ'P•9¾^`¢hµ°­6!ŸHîNÙÑBê(¬lìabJ~óa™Êk¸*ðó{òÈÖó^„îLöóMŽ68ßÍ™ÛôÚ¡ŠRïÐ_»A(W9º}•^èt*©hqñÒ=.gûâh3‰Iíø{Ÿg‘~]Êÿæ£éQ±×fös¨®¬`\3‰Žô‡´•Jw0 &mÞØ]p}žÉ^Õ¦½ºN¶²AÖ5BÝ!uoˆt†Ðm¶º;¤îŽÝ¡ÓAêòlÚªrŒsß§7ÜSª[žÛ˵œÕ<ÜÊ‹7ø_?ÿ‚ìçLg‹¦XAZ2‡Ô.ŸàŠ9®œ“3’r‰A\]’”‹·n¬£J3¼±cÅ[KÞéq²²ÆéÊ*±P´R™‡îŽ ¾BÆ'÷¡*‘A±é÷DÎm «KÄþ°™Wž$Ф!‚4FÒ¢"-$ó)1z™. ©MíÚcCJ‚õ"†H¥…ܨøXSW‡Ì«#õUEm"½¬O– ™ X Î=ƒéœ›WÖä°›1´8.1,»ôë™´Ê€Sh•D…Û—ÖIjÏÒxFg^2:]0:ÍI‹šJ„T&£4¢¤bÁe–`EªÉ`a¢‰ŒÐð¢KtÒ™ôZcºÙbM5/ªB–aÛmT£ÄàQð¾¦\,¤(JBôb$EdXˆ²*¹€Ê‘×DÃ%ŒÆFjóbr“HUE4‚m¯°"ltZ SÇݲænKèÕQúUĶ:œ7}öÓ’‰§Ž¥`¤6o¿Jd²µIYõ˜ÿ¶²2¹€§ìì²+·xô=I'ŽÅ~WFv<Òâô•=ŒŽ;mö’9Y1¡{Z1˜|wL}cL9žÒûÌ%†¿ü0­nÐ}lUÚ+ZÖX+PxÒaJkµ­‚˜ ”ªôRFðŠ0ÌH—Ú¸ˆ´D®g εh¯¤D…”Ô€ /å¬bò•›TÏîˆI,Ƀ«$=ê©` AÖiìq3Óa`;Ò1)YÜ$Õ%|èp8_å¸ÌdKJ)Ä›êduGhVƒó{bÄ,ä²42¬¯¥”qÁA^JÕ‰FeœWÜçrëxΰ²9h‘‘:*§EÎzïÓl?'“Ù³L'Ï a‰ýã{¼tó·9I¢.¡f^Ï蟞R…BŽ{§./Ëû/õ©+<|ú³œœî2•ïË[\^ºÆFw[VZçYioˆÔ1gu°Æµõ.¿zn÷¹5™W2Ûa=¹%›—jì²ÃÓ_-­SÉì™9DÒ@L”˜Æ† \ƒ®ŠAÕ!U„`‹ªµ¢ÑRË •ÙÀë"#ñ~È|ÑÆ¨rý8å÷Þ¨øÜã[üÒO] fPÖ=±6åê¹e¹t®Ïòºåòö×®\’áÚˆØJ¸vmS¶/­²}a…ó—VdãÜ I§µŽ$MÄ%Ž›¯¼!¾ò?Ñ€ü)Ö€üùSøX»ú £ím_ý6ƒöÝÞE®ùS®å•Ù”ïÄÚCHÄ0žÔD ¤ji—‚S¡Ê=ßšý‚‘`PåzwÊJ'£±ÉM|S”~P3ÿÈfˆT"†“&ù¼aîâm FIë×àÌÛˈRÇÀzÁž)黄Ÿ]^a˜>²Úc53ø3?xç3Vçç÷îá½`ò.ݶašÌXZ³µzJ=í3ŽÈÇC~ÿÄrën‡gÂoööØÜ_b}U9×»Å7G/àÊ÷Ñ©Wš€E#dIŠ ž:Ö„M0ÆÒ” ‘¬(ÉBD‚5,º IYãZ=–>ñIæÏ|ƒç¾ð Éz¤Z6èƒVcX£ÒoµIÇQ½@½Gê±Ui$ªFB@› b‘3\}?'Ü&”ÇŽ=ÿk»ÇĈ«K–ƨ‡4?¦}´‡VY]FúCüxJrá²ö0Õ ×1i‚ŒÇØE‰UOÔ@Œà*OHöîáe‘µpV)FCV¦m‰.cS1ë.¨\FЊ¬ÌÉ6 y–0Œ4c¤}Ú± ´3lA}0áê—ŸçK«<»½L¿—°$ §–ÕýS|–`kÏòxÎÕ{S\Q‘EKÕN‰ož¯ê‘Ä!Ù*Â*„‰'D3&GXÄSB´=Ð Øíö˜aw‚‘š"¯ðÞ7öæ6 x_QW%Þ{bˆ ùì~Zµ·àF Ê=DkB4¨Ô¨©°Þc|»±ŠÅ9 ÊÊÊc£Ð3y½“ÑsŽ—ç n9è¥ç#“lÏ”Š[‰r­–¢âMÄÙ‹Ž=7$½7 ³; k†cŠj‡áòŸúì[¿t‰ÓïçÜ|zÌ|žÒi'¤A˜Zx¾ãp•ðÔ¬æÜ‡. edqï˜öø­K#º—WP'ø*P'Š-*\7[r-Ç(Eï[DŸq.”Liê ­¨Ñ‘ ˆDo2‡¶,Zýê½&1$¬Ð}r‹ÞOãô·9ùæ.ýNl\À~VS)Ê5êè”…oQÚ# ²9˜jr„и”q×çd‹.Ì BP8MA{†ñ,â½ÅYGÔÜßPÀ¼öxU²¶c=dÜ·X·yñößb:Ô^$kýeå·X^§(v( k ¶ŽøÄ2étYôø ¹Æ£——yã¶#LÇüÓçoqµññíUraV;Šr@æÃü"ßÚÿ*]3ã§WÛö)í*ÆyÄE"цÎ&(¾n#(¯ÖìÍas <¾ºà{÷J^'üµ?»Jž—Ü=™Ñw#¡ÒšI˜`gB/ëñóÙ"qy1cï`A¾ðX+#‹ wïÜ „ø&J].ÊŸsÊŽ-D~t"ù;9®ÉɃ{ësòGàøý(M…¾ î>Ë»ñå]'»™ó IDATöÿvZ“÷Âa|§×ð.Z›?ôÚàk¢FÅXI;#j„%›òhÖÒãÒð˜Ë¸¶5kU^ÚIõÆáÁ÷"u ô Á©œ ßE­F„ýª”ãÃêŒ:ÿ&".g†±Í?ÑH$¢Ïê G»Ú‹`ET "QN ªÕ&/\Qgl™L­ ¯.f´œÏ½Z < Dyd9c³=¢š= ešKfŽQ5âÔœH)IgÁhkWq#}¨;’ïå9»•—çg¥~%?a#ïI/õ2Y¹§µ¹Ã¢êK»cÕAŒq)£>z! ✪)[£&y)&qRt3ÔXue%®Ý–îcOé䟽†.Ari•º}€Ö•YU¢´\J;u²ŸÏÔ!ui*¨CŒŠ:QÒD%Ð,ʲ˜¨ëŽ%ë]¢:&ÑÃIÎï¾økËO’.]f1)ýœ‘i}€«I‘zíªì瀞Ÿà–7pÝ!îÜtÁç©O4NEÄ ‚ª³’9«¥ùÞž¢š#öYlH¸}døÂ7&Ï:™k-IkÁäÑ]=5AnGÒo:n'b“ .·2›.áËæÂ¿{ó9‰o룯ž—jY®às¤ë_•ÉW¹}ýu$‰Økd·UŠaMè@ñP¢fR"~ˆŒO-þÌ…æÌÀT¢žÅŠHQ‡J_ý}ãjE!ÃHiÒÞÎ~±fŠ.oVûÖ;½ûÖüTX™‹S%ŠjTÚµ"òÍ—OµX©¨&Ò˜4W©R·zH ÷¹ Šª¸ù ¦*ù¡¦]TD¯$™‹D¯÷É`¶\4>˜@Ýî¡Æ©ŠÈ¢Ó#Z§&™÷GŠÒ²Áx,1ut§Gôvï€Güb†ÝÜ­¯ˆéwÔwÚ„Y.jPÿÆ]U’¤9êÔDÑ:Pú9¹ˆ†<—cõÚÎ :¡ $̱¥R×-f=Nú-MÙ G™DØ3Ö©nÖ]6òB–’‘Þöi }rq—ƒ›ûxQª•ì†ØQ[™ãù+ë,,ôÁÛÇ’·Eº7‘þ¢Â[ˆfM65J-ÄD(5R„54 Ä«`ÙÓN=ÑTkkÄ%º­B“´’”:Fõk4¨ËBC RWôA1Òô4‚qÑUmD0b¢¨F¤öQUvÅ&ÇH,ˆz Á¡öH£½+(xUÍýl'Uí¥Ž–³²7/Á$Ú m¢ä]taE^L Û¡æJu)F¢YÈ8‰m©å+vM{ÒK†ÊyâÛJè\H÷ò §»¯<ýëW.pá“ç4 mf®’•Êë¥Ó’a4t®.I]bHŸ\ǹÿõ{:zbK¤Ûb/Ωâbsíœ-þr¶¾«kšjqg¢rA›l£3qGL Ѽ AP1‚Ÿ×’ÿÁüÁ\´ ZÞ8Öî·è}x[Òõ¦›ªôSézeÕu4J—zÉ‹cflNe~ÿÂÉ¢Š)„ûž**¤‚*ÊÙ:a@´©mBf†¬t>¦¹kI#ý®pwþÿQÄc±Æž]yF¢z åÆÉ ^†XÏJìÜË©yFª!BoéAÙ\ù¤é0Í/ˆ×g‰ù‹šÄH+ŸÊ7Ï_ÓnUÊo=È+ǪÆFñêeck ÏiaÖ¥®EBL4ˆa3»‹¤ç0ÃòÉõäá–Q¿óº¤rD²4»œ1P 1öÅÉÛº'8¯QDõ¾½ZHß:ûFŒˆÂl«×Ö(â>¼OD¤q´*‰­å•|ª/–ü õ°Ï•¡ç/>šÒvÈÂGí:+ ŒkÄsXÝ^^–à2" ûã{\Z«IŠOéUmÉûú4†·Œýè:JÞ¦n”·©×~TÝô^´ÃïEãüvõܻհú6µõ»™A½×šñ­çFßEã!ïpÞ Íy»ó%ï¢yù¡ý¹“ Ä»|ÁÒP׻ѦÞéCÿQ-Üþ8Ú»%vꓲöž^o“´0Oá .HÉÆòZ‘ËëEÅûWVYmÕ <Õ½$~gÁ<Îx|m…‡7.pw1á·÷_m(¨1Pk$sB–±Æ`òxr0à‰Á€¬T霺;a0ß"ñm *ÔQ¨$ˆôMxEî%_>Ù¡ˆ'Âr’ÉÏ/Ÿg”Z¹3›ñܽ±”!2óži wç¥Ä3pPøî0eµe)eY:`{uÁ£ç¡ë‡LcMÝ®1Îswô:Q¢\:~”Ï´zx›÷ä^kŸ/ÏîòÆí :{W%ÊÝ"ŸgÒlÒÍ.e§&“ƒ˜RaQWˆ¯ELÃ3ÆJ%‚„ˆ«ÿ=8¨Ï*ÞØŒÿ$r4_ðø`H¶²ÌóGÇØ ¬;Ëÿ AA4q‚ÄGÔÄ%2¿÷=:É­¥ Šr_Rã=e‘ß`ix…áê6§3åàôÊWÄN‡ÖdÕ>2ËÅÇ%Â^NÝâ†Ë¸¥ ²ÕóPR3° Å—ÅŸ ÆŠ‹'±±Ö)£gQGÑÊ`hSÌ•ÿ÷é]Ùå­b†3&˜ª‚H [¿… ©ì”Œ¦ÏF¾9 <òJ޾²..!i›ôvEùh†:A3³PÂfÊÞF‹£ãŠF’nï'`bÏœâÒÒ³y÷X²ªÆ¡CNByVü7d* ßÊ8½¸Åh‚Üç g“¿·^g)ž!¾éYîKؤI+—X]>s¤K„7õ÷5[j…xÖ–D`<\¡Àž¹ñ¿em‘u¥AošpOŒ¯Ä÷1uA2?Eb5†¤˜¡ˆD—Põ–`Ñê°Øî%+rZÅ‚v±`yÿøÆ)®Ý"´ÅnŸÇŽzIJÆS赩öŽ öâ¬EÚè©Ê"””Vdn„‚~eH¶t‘Í{tfcIà ™ï±ä2ÊöÓœÂÔ*¹«ä$)¹ëWm±ÂÄH§†÷…ŠSAïG vÇÔ ›bY>ž­‘*KùÎÃ[tòRbU³4.Þ;AAÕT+‚ícL‹V}HHR‚ñâ☊0j éKÌ}‡ÁæWQׂ¯µ ^ªæyLã ÞPoÕØ%1v…ö‰þXT›»u \\ q ¡æ”h¯‹j£ù¸¢Ü‡‹[ÖHj û³’6)/Æ]XanïZiûAñå”ñFÁñ㛬ö3©rå ¯LùW/Ïä>Ë K "VÖÚJ'ÙÇ#`x–ökü{^åñs¨öwH¦o^ÊÀ¶Ñ(ˆ4‰X{ˆJ-FÔ·›GMC«Â²¨W›ÖÊYYÄ‚ƒiA?…µ´Ý´ªäùœëiÉ8³ºÞ“_ÿüËܸ7§Ûv¥ÿãÔeê¼¼ÇÚîíþ¦ï±Æ•w©ÿ(ôþwÿQjÙ‡ö^Ï×;îß½CG÷v]ËÛ5ïÖIþ¸ÎUòåÛ£¾Ë Ó÷ø¼¼Dåíþÿnî¼Ëçâ=üØßÙxä>ðË¿Ìüð®úb*f¸Å(FVÒ„½ªÔÓ3qµ*gòÆ­w玴m‡?wé>:ÚÖºª‰T|cz‹7Š F)ÅëN‘S…ƺô{~ª×OsbÍZž«c.g©´N[ºä2ÙJ†,dªEíä™é„¯žì«C™E–“L>9ÜâÃí+VÐËÄOl*M‰´¥ô%ßÚ=Ö£E$Ñ;ÓJ^?©HÄ*šp÷ÀñÜõ‚ˆ×sšrÙúÀmÒîBýœýÅŽ<$ÛŒl¦t ™s\º°Û¾ ùóÚ¢9ÕzT½Ê‰¦½5yßRÔ–ñÜÒ.$†:TÄiˆ1ªÖ "j*©!sœÕh î©O| þî·0Ë!B‰±N} òúþX?~y PyñäÉ ¥ÕiÈDÆ V•N f9RŸ™)[#‹zG“秸åauã §‡»|¨_ò‘sCi=šé+ãeùê9û³@ ¥ð^8ìü§#˜ ÅÁMʽWX¬Ëæ•ꡱ,|Ikí<æÚ“hŒT»7ˆÅŒ0ŸëRDƦUňH’ªªJÈgªÑ‹ŠQäÁj£ bÔH@%°Ó~Y†t_8Õ½çîH{cKíù‹øU+ùOµ5¦"¦VÎj¤4V»µˆÅ€1DUu"²‚Óƒ$·ÝF‰",P ¢ÞßCó› ¡™×‘·ô ‚¡¢1J•3ªûWŸŠÁÿÐ5ØÌHå>ƒC5UÔ_¸÷¹gÿŒ(± ¨üÁkU"T ‡Ýžiê¡À¨ï¯€*éѦZ*v1G¢W*ƒ+:–‘Dæ£u‰ÆÉÉh™Iz°²&íEÎÒÑÚjBïú³ˆdbV64¹º-$)>FÕÊSÏr(+1Yq¢ýÅ\Aµ´°°Ó){ý{×®±5ŸÒ=ªH‚e8?Äe+]Ó½V!'É\çV˜'0O·æºº€¥‰p¨JŠaXª£Veס7%wdKÑsÆÊ¿³sÈÀ8Ä­ ¨vÕŠ¼i&’Ké5µj"A´äŒîd¤iF¨*mŠRi짪JPUQHUÔÇFûC‹ùý×T’HØ#ÆUÄ š)ª¸rùsHÔ¨Zsfm‡šfÉDE%*'Ià´¥ЮQ1)Ô‰\¬^ P§{a•Šs¬§RS+ñU¢¾‚D¤&ªh©BšÌO­ÒÞòÂßýŽìýÁ1ÃK[\øåG¨^½££:§k3IëT£®+þÕ™$?½Ak«ËáßùåKÇt?¸¡3ç¥X̯d"$?‚C¼ŸÛÞ`Û&µÌO*‰²QFŠÚlnîS¾àYÜK½¿ÐöƒK úYûÕ'0™UÓIƒÆÊ£!"ÎA5á@NwgL]­Î(14¸º4]i7Aˆu¼ßj¨EAC’¢Öœ¤ ‰Æ³”·Ü;k‘:Ì9*ŸQKBâ–ôcè>"ßxæ¯kˆ¥-:ÔG7žó£KšôØýcÝhŸÒK…Ýé+rpt¢í,Ã&qçè;²>éi¾q‘—Vžç±‹¤2ª¿=Þc¸ÜæßýÔ&Oœrêá7¾½'ó"jêŒÔAuïhÊJØ-÷dg†:Óî¢6|bX±Ýi#õ‚öÒÌjÒ ¡u“àÛ^ÔÐØùi[%$àQ=®SØ 2×k ™L+¯wfG)ˆ@ „”e›5zDE‹ª’SWÈHTX ZYM2œkO*>óÔû »r”Ï5DOæÚiJQW9½AF/ˆ¯˜„J–Äñ±'¶ø{w_Ñå•¶üÚû)=:YÈýk_×ÓY%ï2¤Õw¨Qß­öüq¦óü˜ˆ¾ÇšSÞa_?Â;ÔàowœúcìójòwúÞ ô‡Þ(þ„‰ö§ç±ýøã|î¿ÿ›Lvn ÞãV¯ð`Èù…4áz±àé“O­­³¶v žxp…¯_‰3‹ 1FÎ?ú!žÚ¼ŒQECMÔcò˜“¹.c_óL¾KîK¦ÃK³7ò)îLZ„H­¯‘Kí?Õ_ÇÇHIÁ7OÉC c-ˮ͇ë|°ßg#éâU©ÕLM"ž)°qÐè2¤ÂŠâUi;ᥣw¦NLżâõ#ÓLçBYô,µ¹¶Xo§¤byh©E'…ï^ý".[ƒ’ïŸãÖ¸Ík;}ªiÂ*i«K¿;"ÉgbðH=Uh²{Å5n)¢Úè5îO»‡¦Žxçþé/ó1¾P+ˆiƒI)*Ϫó|ìÊ>KøÚÞÇ:ív£Çð)*dž7ˆHæš!ŸÜÁ1&¯¨¯],Ã-RLåÐWϵøì㲮ᕓSòÛ¾~÷23D+$•`kƒ­…8?"̉³#4 bÒÙÅ I õvi‹X–Äb1PŸì«‘¦ x»%ñ>ÕIêØp¤ôŒ‹mMmµI“!çvî°|:&.¯ç ªs–Ù¯¬AÇWLeÁ@ÔHøJÎèÅHâ *?ú=Õ˜3ú€¼Y@Þ×_èýù6úW*Î*Âw_D«w™¿üè{¥h ‘Û¾ãÖûÄÅÚS|Ë‘Pb˜˜&Ì2Dz8 1`¦cLôˆ¯I'G Ñ=@q>Óe·G´)u«ÓìßXL ¬Ü£7›’-JD éò21ëaz}ÈKÂtޤ feˆ=cïíaç%ê`á P(;)× ûtg%[7^gíxÜ@R®‹7žN—ÃTXØ/Ê ò,å‘$¯¨eà hÅ)A,ÄŠS«7îË\²Ž‡³>ÁÞwÕûÁ}íw59;+Н=ÅbŽDÅMtµ$ÆBl>=[¯jßLÑý™Æu¶fœù”ƒÚæýŒžÇp Õ¾z‰æ8i$I!n ñ2jOˆîeb}† ˜&ç£Ñ}ÈÙeÀYZžÜF†š°í¨¬HÒäÝhdWðlLŸÌ.s‹({$5¨†3í“¥F™ÔžQ¿Åêò!Ú¬òüÿü-²QF~Y¹¶Âþ®³Ø›£­>α„˜Ü¿‰ä³ë褦øW71'Õ?sîVEé©¢œý½¥¤PÄ ã[9÷ž;æøÕº6°q¡…½8¤uu­<É ÃŽÚÌ¿¿Gqãˆá§¯`{) üêhqbdüômöþùK"Úk‹-*²G7~x›Ö°ÅîÿþmêÓ“ž9 Ú3·¬ø.µœ¦ô.Âyêë+Ÿâ꥿Eí÷yyç¿"Ä„ƒ“ó¢fQydýÏñ©kÿUT·D^~‹;GƒÕ~¤×ê°7s2ŸÓGáçp}—áÅmþÉî>9§$X¢>ü¾k|º÷®^0œh ŒgÏߨáb¬ùÂÍ/ÎG! ÛËs~éqÖ›ãÌë¸^…’ áŒi–Dbb t„ãAb…õ3@‰´8•'Xp'UŒìfUŽÅ2K”IV±a2Vƒeý´æ´^,&mZAyÉ®‡Ÿ( ›õ±™òÚN‹¤3àüZÉxQcEbR—p8›P›”•þ€Ì/‡c?ã\0´Äð{×Çt—;¤þ»ÿñxùÖ ¢PU?)GÿmzXào¿…óõGÝøØÇ¿ ÇÀ¿éÏÕê÷åÚ§?#¾˜‹Ö•¸¨ŒŒÈCiÊÌWrk^ȹ^_z½™ Q4_–7÷¥Û1reµ+K—øâñžXTÎw$ˆÈGb/½4•ÍŽ•ú™<ÞÉå¬/çÛ]žôäánWDDZÖɹVGråë§»¼¼8‘×ó\–’L>>\“Ï­lÉ“ý5y¼»!V¢x¨"A¼ nˆG¥Uö$J!EhIT$R‰ÅâÄ+²ÑsòÈJÆ•Q"—F–—*Y^ËåÚ¹\®n/dyc.ÞzÉÚ^²¥™´ú…Ü;Låå#·Oƒìåµ\? rk,’gS 1ÈùVW¶WKu+ùhk]ÔVòúñ\U.©KD±db1AÕØDD1!Š„ ª*f´,2Š ùBb¦ˆ8œ$‰“Iµ“ñ‰´)B^¯-‹x¦¾!ªˆFÁGÁJ£Ø‹*¤NÌ¢Bít~ Ô1FöN¼<÷Z!§³(ÔQú×'Ô;Ç’Õµˆ©[V|¢bÄH’ŽÄv–›¬ycÄ´z".|WªÝWÄÞ’pzO¨¢U.ZL%Ρœ ±n>ºFA½ QÐ ª^Ð /ÄZÔd ´2Ñ,é„Ñšd®+Û×w$‹3)F])s9žHùÄ@ÌãK·æ"X1K‰Ts9ùö=ñûS™’ËØÍåÄÍ9µs9ù¡m&3¥K©XH¹˜É©èb" Ѫ­ ‰ÍF¬ Á"Ö™FA"ú#¶Ø|ÉÆþ¡­ñPΚjL’±¥‚$"’ˆÒ<§’ˆJ&g*Q±¨X‰b¥q‘3ÊXÒ×(= ÒþÿÙ{ÓK³ó¾ï÷œsÞínµvUuõÞ3=‡ÃáP$ÅE‚mm µØäØ;N`A 䣿 ’|ˆ“ p`y‘w-I¬X’%šâ"q™n3Ó³ôZݵßõÝÎ9O>¼·»gHqHQ4ļÀíªê»¿÷œ÷<çùoe€Ê06b‘XôÅC¡èKU ¥í¯v+ë$¤©ˆ¯Ä•s±M%®­Ä¶µtL~•éê†,z™†â3'fz*îàX˜%F3è‰ä©ØAOäÜYñ.ß´"ÞKÞªàãƒdӱ̓TŽF}™ V¤hŒä¡’è+q1Ȱ-¤¯+âbE¤q"Q^D½JCãrIâHĪôb. ’Ø(*²‚AbŒbÄˆÄ ££DU±QEb‰*Ò´bêFœ" "‰Š$FÄt‚©C”Ú{i|”ÆiC” Š±¦{€3Ý4µFÔ¨ˆ1¬‹pNP#>ªÄx*hÕÁ_:Õ]‘$ãn‹÷¥,ƒTD±""Úõ*¼™ö: *缓+dF¤¡•ÓØ““xQZ³!iâ$uoŠáu’8•$:±ˆxD#!vç[G‰k…”‚D‹œûáórõgždüÚ]¹÷›_D¦¬Ê¬ÉöO•­ÿð¼Ølˆ»2`‘€Jïé32¸vV’,‘¬Q)°$„VˆAHŒ‘²ŒrïÅ#±§sÉö™æ¾T¯ïK¬¼´û3‘܉[Í$=Ó“âÚ¦€Jl¼bw~[¢‹þ¤¿heüù=Ùÿõפõ* ø:ˆI ®mÊÎÏ?-¿(å—ïËä÷oŠ„(F»ï?¦N$ªØÆ‹„ø®W@LãÁ:!S‰íL&Ó/ÈÉäw%MïËÙчå±íÿT‚S™ToŠõ7¥)?/ŠHŒ¥N¾(¯Ýù™,r8©¤mƒ<¾³!»›#›rÙy1qMn×ÈÔLEÕJ»Ò—ýýM9üƒç¤tSiVïË›wÅ¥¹<{eSb:”YuQ†nWFö¢<¾¾.á……löÅè-IÜ\‚ Q_ˆµµ„̉ÚDð‰Ø¦×”bšZ¬ *xJ+21ÏŠ—QcÅ‘µaOîˆÜ«SYYȉx¹>ZÈÂÑE-«÷g’•µAO2kŨ21ˆ«rΫh’ ‰‘»m"(²ÖCDU|ô’¸T¬ˆìÏçRd‰¬d+9޵ $‘" “qþÒe¹´»&ÿê“×…¾Êý_=/Uäµ×Æßªâû´fü~~Žï‡šø]¯î;`ÿIƒ¿“Ë÷"ˆ?¦8üßEáwz¿Ž®‘g²ó¾gH‡4ÄYšÉœ½/}™P7ßUŠå¥}˜è[‚o0ùAÓp¹HáVÓÐÏl¤½ŽóÞ™cˆ‰Jzyw]úÉñ¥}^<ÜÓ'û«lô†âÒŒÝaäîáì$½„EˆÜÕi¡HÖXÐ ´œ/zºV$m¸O¸»¿Žˆ ây¢ßçJ¶ÊÐA«–…o ’‰éV8£TÙÖT­´4E£¥5-"Q«µG¯ˆbp:’œË Ô±Ý4^.­EJÓèþà@fnÎìÖ~ÒW©3¹ýÆ:uq“=¹µ&É`A»%Œâˆ«÷xb§Ôõ“ÇÝ*Ÿ›L¹~t[‹^ÎàB)™ßÕQµ%µ¦œÄ £­:cÀ8ÁÔ%D±uÛ V.^E÷ïÿð¾šbÑ(jMµ—8Èï¿ú6×t£ß“£UDÀ€¦b‚´i#Xƒј¤Ä<·@@ñg·ÐÔ—[>•—o.ˆ^èOoeUU)ƒ“†ªmˆýŒ6ƒh"ÖXÜÆÅÎS@0Û…Æùq'ÁØ´h}"aq‚ؤcÏÇ|­uTרKI&f° &EÒ’TCš ÆJ:[pöÆ-í…¹ÜXiµLAöÜP×Þ¿&ía©Íx.ÃK}꓆ãÏÝ£Ù›Åu´–o%+ ‹´Âva[éOª…±†ì¨%™´#.ª&ý“øDÞå¤oû[âú+¸Þá]NJ#Æ‚dÞ~Glyt'U "Ú,Û¸OGÔQ¯©F2(*}õ„NÝL‹èIžw[–1«â[ìì´û5¥ºé±*\9S5F|o…6ï1¬0ï ™ŽÖX™žèàäDò£ ã#Gè±kØí3èú*áð¹·¯½“Sr@L-Û¯_gå`ÄýËñÕ÷\aëhU/¼ñ¦äM¥ªÇÒojeŸm1\_‰Z%"¬FÆqNår=ïE§Æ$NdÅPNð±â8D’PSøº;ôÚ¡V]­£ýkg1×¹bHçh$F1FŒÐÚªÖkŒ*bÀ&fYZ+"5F£±°4TŠ®cHDdG¡'A[b8TâXº·b¶íFÆòGŒµŠ85&ÜN+Ãc¾‡žUq´)c¢ã¸#­¬“&žÔÜÁqŒ -N¢ €ÖDÚÖKl‹mϲû‰kÏn1¼º†)œ¢È+ÿøeî}yÊÉAz#'%Ç“#ò™áü çÀ+uÝ‚àJÖJi„ÆòйZ­J—µóYŸ IDAT‡TŠ2W¥%J«Rlå<óWS/Õk‡”7ÆHTͯm‰é%Ôw§øqMÿ©õÙ5išJ—ùˆo<Õ™ÿö iOªNƱðäg~æ«?r™úhÁÝôe&x_$j%ÊDL$‚ƒhì7Õ.1IPkYu)bê¶KÕ¶9¢nŽP=A}ñUyúÚ_getYÓLÒæ&÷Ç{œŒ_VqVòâ,«Ïp2ùªN絸pŽ"O8;’;§«ùÙ¸àWêÀÍÍ5ÈeÞ;ùIÑÁTóö?“_û• —W×ùk?u^ËYK[URÛ„Yí5ÆZ.î쓸 ª‡d½ÕLMð`£†4ÓF•è1a.â=ˆÑçt]Ëö•î¢&!ºhÀh¤©ŸzñuýÌgoPVeóçžd5Éy¦?$‰ 's0F‹<•uUJ”}‚nD$1 Þ¦^˜%-g2GBZÚ Z¤Â¼©Å:«+Y&>z­5²¬àTäT+\±Žzáôþ~ÿ¦~|wGj l¯¬ 2=™ÕïVw~§&Eú]ÖqßMÝõ­h÷ßi!߃×ûvõoWãþ©ÊwÀ=ã{Ttÿ»¾üÿá=¼ãöÞ™ >þßüç¬^¾€¯kŒµ4ó_}f6Ø%î/"Æö^ü*{_ü2bÌ#š]NDu2à¯þoÿ;I‘0Ý{»z†h¼>o¼7éë¯Ï¥ÇV–R› ‚²rä˜O§¤Òòž>g6ú÷¾~_J¯|b÷*ÖPcH]ÂÑtŒ5SÎõRZ™dÇ!c- µF-*‘Jñ´éŒ¢ZÕ¤íK-%Qj2 lc†hŽjÄOBBOacJ 2354aOkÇ$bI—iâF‚ЉžàNÓÙ §-ÑVbA™4ÜÝcžN˜»N IÕ£¼¿Fo¾§ë¼|#a^ ÓРÁpõŒ!O•abxa'ãØÃÿ}4垯™fzk5/ Ö×`±ÅÝ8’†¾R#tÝì΂U¢¢iBz|Lù¹ORžÜÓÐk%Z‹q°BtiÌtFð«èh ""š˜Ž]ÖHYu¥þ’Š%ÜÉ)2­ð—.ûÅÃ->b¤K7>WÔˆóЉcCŒ%Áµèæ¦ ¸:ÁF»¤0uJiy§õZÍ–~¤b‰Õ)a¾]Ñ1 ù ’¯"Æ!ù # ¥)ÑYÉOX{íuÖnßEvV¹¿•rhj¤n‘:0øÀ9Fñ³—1s>¾Îôs{Lþí-VÆž¼ê(êκJUÞ9ß–ùc”›í(鎿!·û.é¸ÁÍbåNŒOt——òö£¢ŠdJ/]&ªóÖ£Ë;hÖ×·°.C5>ºU Q1"6I—^qڹǩJíòžqÜ1Z#(æmÏ—¯Õ•1TÀ)Ž(ï[lS‘–3ÜøÎ¾©&&ØŸæ4Å€àŠjAÖÔô'cF§c\ 1€9Žäò$OÑÆ£¯¾=8Â5-‹´û|³õ._¦Œ8stÂ3¯¾FQ×xV$ Þ ˜ô-ži7¦[ÔZ$³ÐŠcàLL0ù`=•iĨª N!ñÝ8ÕoXVpÖÒËÌ’nU«âcè>;KÚäCeN§R ô9»d&w¡mVÖ1R º ¶÷ÑpL¤BµZFû¬#ñ*¼¼F'®XÆþ,—Y§Pa--8Î''¿ø¡øÏþüŸEOnn}•/Ì_àv³ËÓçOxr÷€Ä‘¹»¢AI4¤NŒF’ò°³O—„R.bú5dªÞ¥*/hšö¤ ‘j¼ÀÅ[Îù­½1ÿüß¼N¼~Œ±†çÿÒ |ìcç\i8mZæoŒynß³¾Ö'¦86ª_ósy~Q“÷W6ã³oEá‡/‰¦õ Œeµèq{rŠËzì$–2¶¨8z6gVO™’ÐëŸÑùô¾L›̶¥QåWÿÉ›¼wyÓò‹ÿç—Ø;,;°?êw"°þÓ¬¿ŸŸãû¡&~×Ë?E$ÔµÜ{ñ+LîÞ#¶JÒ/8óÌ5Ò~O5Æw˜n½÷ižú ?õŽÍ‡ª’9·?ûö¾øÚXuáY6ÒúSÔ%üA¨x¹S¡m8.ç]•ê’Z’3J®oxÄV4ë#bTýý ¿ur*Å,ùþ=Q>!é͹[ì±:ßÑ"iÌ@•‹™j&A¢O©‹1iè0” 5 }É0KÔ ¦ëf@ Eµ…HÐ AP«Fió{¨!1§¶ ]ö,! b5&2¬‡”i)­ñꢑS³ÀTkº¦A´gÐÌ0Oçªi)ùÅŠÌŸpæ$èµí-i&¾tÇ2i=7OÓ&jæ‚|m¿¥ç,ßê[’ò;'VÚ¹×ßïŸÊó>ÇϯçÓ³ ζy54r¹ÔjŒLÒmÚ–°¾‰ûÀGU~ë_b+£æÜº„ºRÚÎÒS³!er"f2Ó8胕΀>±hL;%sUCÙ*‰A³Dü™ L6‡ºDzy× ^e>—Ø+Ð,%šÎ»&ÚTL°Ø˜b|‚ѧKÁ­z¢z «b0ê¼{`k¹$l&boË®¤ªm/Y‘%á^§Ku6MlÉONX=8ÖsŸú42©%ösÛЃ’Vºýò I¶v‰[ëÚ•Ò ¢æÊªÄÃ’üW^#›µ/HPµ©‰·+ÄÕßî)AQ'’5ô÷J–aòH~.b›HzÚt‚séê^‹HÒTèqI°BpÄD7ÒáBfóòá¾ã‘1Ò2”.I4_?#¸UUEŒ¡×_Åt~Y—µFTR‰ê;새hP³|¿ÇîÖ5‚`ß&:ïdQ ±«[J ’Ü”3L5%­$‹)õ`UÛ,—²èëd¸"ãõ9ëG‡˜¦¥Ø¿ÇÈÎv{[åéÇ çvh߸%ùlJÏ70“¿ôãím½÷ø5½ªÏ¾òŠäM¤u]ñfc«›“¡Œsaا7>%iƒfñiÔ[…eì½lT‡lÇ0k‘ÄR²‹šØI ¦s—s¡QK…JW§j¬M ‚võæRãc2 Q aià%bÙÂè9§F2ŒÑ.„TÑõw%ø›ŠÎÅH'Mxõ¡)J­}Tý²e´Ô?u¬/Ò¨ºW¹WÔŒ¼r-l©Q&Ñs7dX³NßEÍÍ$‰Ó.-];ËéÚ(uÓ’œéÑ{ï¦V>’ä¼<ö¾]’~‚Ë-wÿà&z\3þ·¯žhß«¤XÜÕ„s +çÖXœœ’}}ÝNY˜û¼ùÙ[4 ¨NJv’>ž¿€fÐŒ'Ü{ñV†l¿wrâô£Rˆ°*B¢FF);èN¥KçÚn¬j@U²slj‘Ä‚,]r»ïÊjPfŸ¹‰/=fs¨£§ÎHß ½ç¶0½W$ý;ŸºÅéÄc3¡h+ôÎôÍÕÁ7Õ.¶õ{®ÁZ­R'¶^ÅDÚ «D‰ÚÓ —dTüYv_¿î_—™±3ü0k+‰ž4¯Ë8ÜDç'øb¡¾P‘èPT#Ç‹9F=žôEBŸ$,HÞø—šäw¸{îÇä~v]I$K,.µ8#ZFCáOd˾I¶éãÛq2%On.Á8 Æ(iFÖNUš™ɵ‘³,ôq1ÅŒ"»­ª¹$¶Ô˜Îyí~E¶PòiÅ «Év×H×[âAO“Í[>“Ï~ù!µüH±M[” êHž9Í©Äå]2ZØT¢shPOGôr02¦‰‘¨Jf­ÖÞ“ˆ‘5‹–±‘…FÙœE3g¡F’¬Ïb¾ÏBÇø5AQÍU~æ¹s F ;}ÝÛ/åéKP‘­B?@@~€€üù^! ßRHþ¡çÉWWЮ»£ª*"gž¹ÆÖ³Ou½·Õ…ª‘tÐ'é÷˜¡1bŒcéP¢ÚqvÕ€¨ê’¹ ]'Õ¬1ímQUgDD„€âPR±…^¡ª˜hˆÝB¢¤g„犔Uk¨:š9ª¢g\"O¤}" =rI)È0âÁÔÚëêA ©A…%Æ.¸¹v¤<ÏÆø ‹tŸL ¹æDQµâE–·>”ÌÝŒ2-ií#-*ʨé3Îg§L³)ód†]zÖçmÁ…ÓÇY_ìˆ% _Øk˜¶‘:D^9l™ú_/…޹2Ï”ë¹âú$ç¯óñuá¹|ÀÞt‡/Í×øRÕ£ÒˆXÁƒŠí¨7¾¥ù§µ}ãëbv/Ж‡iR$J'tmçÐ”èæŠÆÑ°+niÛ¤i²î¾[k ŸÂ íÂB—®ÒuÕí2y‹náz°P ˜à°>Åúäã¨ëèË»¶DÌ#ä!ohÉŠ1Ë(Ž(´I ‹šâtÎèÆ[ºýꤋVÆk«ô&þÊ.w® 8u g^¹ÃÆ4Ã|ìLþ“ñx†{«g6 ÿðUâ?{É,šÑ<@:ô‘Î]À(¸ðöÏñ Dð–‡x"4í(Eb$:£õf.!]nVœt¢Îoœ¸FHæžÞÝ% %ßTòÈ¥[OO[²“N¸.iG3D;Ãc–]rÓÉzƒU‚@c„@Tcœägc‰ÑSôVÉŠF,ÆÚ.q\#h³Éû]\v„;¯¢N”>Çp,޹± ÁìbJ:>ÀÎLjo0Þó>Ñ¥KT¤O°ƒ²zrÈÊø„ÁÁò”äñk˜µ5Hâ­=ÜoÛŠE§ñçøÜ—¯0šÏ9wï;ûû]¢Taˆñ«¸$g¡Ç:‹G’-¿»½¾%ˆawæéGC–XœQÒÌR±IŒFú4 .ÜĆ1jLg9úP–¾ ÒçAø©H$0#Ä •Ùòdl;„Bv5áRÇ{¤îŽ™tó#´¯Ã>‰+ñ ‚ÇÇû#)ÄuÌQ˜p*‚ÞFbÃxÕRý¯¤wQ7ãoþèGùèûžCoâî}š[£+˜ÞEÎä Šô-R{ŒúÎ;d)a^©”S‘Þ û ¥?‹53úýWp®ñ„У*ŸÖÏ]_È–žzjƒ:(MøL¾ÏÇ\žYÎn^ä7þŸCîܾÏÏþØ9VÏž¼½àâ°‡]ÍP ¯K£ÃÙDvòUb–›–¯í HÒ„ÇÏEfUM[6ûS2ce)óè±&…™D0iŸyµG]—VB_ÉÇP,,Å`‘Qêùê›'üÎ÷8žzþ_ÿêoå‚õÝØðŸ¾ /ßá{ûvÿÿ'±áå[솿Õë½ÍÒE¾± |Ç1tE®£ÝmTUåˆêZ6žzœ³ï–Í+W#øÐ¨qâ4h”ÐTªúiÎ Flè鸚RJ¤µéˆC]X‘ˆzUΧ†÷d+\NÖxóþmyåàŽ†-ŠáPPÅÇV£z0J£p«”QÅ-»SAUGÖ²í¦sŒŠ Ï&kì¬Ì¤4cÖçÕH“k¾z‡s³+d>£gNeR³×?еñ5òz(Ñ.´O*¾ËmÃH@UˆTàY¤ =)NÅ‚Fã´…̲G½SgcJ·À bÖ+<¾ÿY3”Æ´:¤ K¢ì/‚ùÒ=Oz¼Ëxá™ú@HUóFç!—§Ö¼~èâ”ÝÕ uZÊëÇOè‹§W{Á.ó"ŒX 1Rÿá§h¿ö’Hšª_³Ä̈x‹<ˆnKÕÜd)ê,êDðQi½t»ÈˆÌÝÈè÷ОEMì¾¹®ü^Ö fÙ¬`ú50Þ,WeYFÔ+Ö'˜w´ñõm#QD¢At懈JTµQ4zõÔ¢AU*Èǧ¬Þ¼Ëöõ[’U­Fc9Ü:ƒ]4 G=&ÏîÊÍd¦Éþ¡œ»YêàÂ¥}®¯“Ÿr'Öæª7gÒþ­ÏO+e<ÈàèÊ„e…£b'ôUû M&¼ôË ‰Ž`ÍÃ[Qã#Qa‘9°?pD·L+¤T›Ù£öÁoªÄÌJ³’.Ö¾ýyGEH7÷¨Èƒ~­JPŠýФ ˆlI¦-ÎÒ¡^‚¨ !5*M ‹£Ø¤‡qI1 7Üc iÖëž^Õ–NGâU@”¥¬€ Qrˆ¥´©P[Í$9=Ä–Sµõ•蜄´‡/ª"Rõ†š¶ Û‡{ NN;r°ŽÝ=‡=bÓÂûpr,”s- RúzxáÓ3Çð»dç‡R_?ÑpR³øò>Í×dz8§¼teÔõƒÑ¢Ä*èÊÏ<.ƒ?w ·’êJÒ#·c™üëj6¨XùøWãdqÒ²÷å}ö^Üã…¿ñ1‚ UÒÊôÆ¡ü‹ë29-U×26~ø ùå ÒžÈ ŠÖÏ;cšÍLŠõ\µy?0 ƒ%0µl¦?H:’eN­Æ)çžá¹!´_ ôä÷¢U­k’_̨o–rô«·™ÜH´ž;ÄDPÄ„·£o'Ž.—2äÑnÈÌEhÔD£Þo[õX>Ÿ¨¢’È€žENØÞžÉîÇ×_»¨÷‡\¹ø×pFêù«úÖþßÁôÏP‡SYÍŸÑ­áÇyóøŸ2­ßÒOÕÉ6&öˆ¾$czæYþpe"ÙÕ ÿÅÏÿ¨l^¸¤‡·Þbzø5Î\¹,©·š%·ÉóC4:T”l˜0Ÿ&üÚß?âÞ݆ÿ…äì•KZUB^Ü–¢¸ƒ‚Yˆ¶}-®‘§[L}Ëõ;§¬D^[™ëWd&>ñúá*£TåôtÛ¯V\»X°ºRsm2“ókC#V8åÕvªOÍ+t´Ǭª™‡†ÕÁ*"§ÕT†y® ÌëŠQ–’ZAq“²qÑÏåpq MÅ(& ¦:H×eØßV_e29PIam‘¨áü•—å7?Wç¥çÆýé»Õ¨ß ¯~5෻ߧæ”?ásñ]ÔºßIÌߪ ïï3DŒùæÇòñ.—l4àgñ¿£XQUsœFrmC+~2Ñ‘Éåƒg¶ØÚ˜àMdP^ã÷^{™Íy¿`g´ÂͺÔòIbêHDY±Ïgk %û·Þ¢ìœ¿p•Çk6²ðÚØ…„;¥åÄGTÂrѱzè½¼^yZÕeó¼[c:n« A6]pmuÁÅfBJ&  L¶¿Ì{d“Ë'ÏSÉœÄ6¬J¡]Ç,I‹0Cñ”iÅ,›‰8í¬z{!g–.¸?8DÕÐJËi§–«‡Opv|‰V׋%7ŽY~Ê‹«_æÂþÜ<‰4G«Ü{nûšy¯fÖfô\ÂÎö!åÊuÖ‡ S·ÉêñGxÝçøà¨ÔpI¢Z•RþÎoïíaz=Ú5ð=0µÁ´°]’|¨%îŒÐ¤Ó/¨5ˆ¨` R/-zÅ@‘£Y‡Ôcº®£>¨†¥]°1c–xúÀ[ó+[–|¸eË2FÞžöeÔb¼U|âÒ T[4*4‘|:cåö!;¯ß¡˜—ÌGCN6×5?“Mb}Mxö2w¯¬pgl½qÈV³~üq¦âF‚9Š„—Ž¿—øÚi§¥pÁ­¡IÜ’rõ gùÎY¥"˜)êÿ(–†Œe‘g]3¶+˜0±»§O¿‘¨„ÂÒ¬HÐoÐÇ|‹y­Ð®$4«i×`•w¢3DˆNpsOÿn©Ø®V2m$;h0&*‰ˆ b‚í‚B"_$¨8lš“ôG¸4§7XÇX×™>DÆxxˆŠøÎJuyʯQæ*œKi‚*RÎI¦G¸rŠiªÎªXLGÁ´u1  é•s¶ïÞ¢·hÀäÌ.É… ¨I`2ÃÞß§<9¤U„AÂxk‹ÉæçŽxü›Ÿ@!ú¡Ö¤bŽÏ ¦}‡Ñ–3UM¿Uî÷ònTÆ€õаY2éÒQ“*ÓU¡Yj Ño’pa9ž%tÁbd;=Â)*«KJ\ Ú.g·4ùmÀÜ'p´Ë „nçƒ]N¥ÖÄ‚ÓÔP% œ(©®†”uxuLbÁ©f$vÊ& D#Þ&ZG/mˆVÈ/®°úñ‹ôß»E¶= —:ÿÂ}™}òf'ê‘0k0}‡@­$ B«Hž€ ½÷mËàƒgÉŸXCrKÒ*ª–öå'ÉÆf4¡wet­¦-=§{3lš3¼´Ê¸YhmTÆ_º«×ÿÁ›RÙ5Fïßeó¹‚õK)©ÎDaÜ´œd`œy€‡’ˆÁ Jdyl:µÓÒ«âaçMñu·bˆ61„¹¢1ªY1©0…åöߟrø¯Oq}Ò¹:X4¢¾yD}¸/yûD¶DŒãQˆ ß­ÿ`§¼ÏXY;åÉ'&̧–ë‹9T¼gõor9ÿó¼tû¿åìÆOºUR7b½÷>æå-fŸãõãȬ9@³Ck+ܤ­‡¸uË…nñÜ'ÞGÙóìÝ»Á³çwqóô‹›ÈÛõIxùÓ%ÿèïÍu}sU~î?þ+›#ŒÙ§(ncLCˆ uuÛ™{)ùHþÍÉ}þî/ßæÙÝœÑõØ[‰¤pµN Á‘ûƒ¶`çô€‹k›çÜ>Jæ-뽚zrªd…˜Þ ¦m¹Ó¶ÜÕ„§{#RU«)›ý>>FBhé'–(–…à%Å)ÊfÊ^»‡$¢iÕ×bhYííÐï­r:?`²8A­“pvÐCŒ¥j[ý»¿ñ*¿øËŸÿòïb¿õ=Ò€ð} ‘ï È·ûìßþ©²lgÊòwùFªÌu uÃ{>ñÓd½ŽœT,>4ì$¹üäæe.Öd`2bÌÑPZ§÷ŽîK¨æXU5ˆœ,*ü¢çƒú¦bÑ62C¹œ&†yžr_"ûM‹óž«Ù@{É€T¬ä¶æZRèSYO.¦–K©áBšq6qr®y&Ëy>òtžðDæpXáÅdslâéSàb›ÓT_ªyµ ú¥¦‘—KØ›Ž8.s^«"/V¾Z{ÉÁ+rTOB 0–‘M$Ãk ÑÒš ¥«Ä…œ(-ƒ¶Ð$:u$šàWQ#'ý#¢i6}mBë‚¢VTÁ´+Ú×ЛÑÛ8•Õ󇺲YË•QJzíëÔv®¾p8-d¼¿Íx’ª=meµ]¬Þe£ÚdyëtëAÑ ˜0BÂ@;ÁŽEƒ šêÜú IDAT±( Qj5D:ìrL”;Š9B8äP£É’â¦HÇø²±3¬[$Pg)µ®Ê,‰8ñD×RÕ˜é®:™…7È`ë¶a…Zg™5 HÏäÌO?Á™¿ü ýkÔ¯süÏ_aò[78ý½·¤äçþÊSìlDÝDû½7±¦lKåw´n΋ITÅEæ{Siö©Æ‘OÞ/YDÅ^° %ÑFaÅ'ÒS…DèOàR¬®eŒç©.*dcÔbê9Æ{t´Ig§Ü3†Š–m›b%±k:ÇêÌQŒ,ÌŠ¶’‰Õ ¹D|¨—'µ% ÓF!úi_{ÅP¬D”š"MÔY+£<Ó~âD {†WïœrywÈßøé'ˆªrýö‘ï‰ä{Y´ÿI4 ’z™oÃú¾Ö€ü€‚õýBÁz÷ïáÝ À>„üÂßþŸé¯¯£-ê4È|r_W´–­®êAÝðÊxFÙÆ®1NÔõªÅ)Üu‘ÃXËÕ~¡“Y%>½º¾K/ëñÊtSð‰“ÚM 5Ò¯*~nmW?¼ýuôë>ANYמu:×JJE[ mï„~µ.}ŸL©“è !Ç» wÎ}ïNõÙ·>&¾ÝÕÏ·BMÝ¿ÇhqVà8´úåº¥ŽˆÃhfƒlX«®£^ШòC½„Ç2+U¬µ—÷dÐKEo¬¾F¥¤õ‰QSµôO˜dsIÚBózÈ­õëTéLVªÝ™ž¥W¯ráè1™&•$¤4®¦J|m÷ ­dg¾£÷³#9ÒRÓfÈäÕ§øäLj ºÝ¤¤” Md5pî Ü2}ÊaÁu?ìú|7^Sÿ…Ï U%’&´+¨ï© ¢&$İû‰ÄÕDÕ¡õJÝvnIV i`Qw,ôÓ oE­+%øwI‘® o@ÓDQß¹É]2L†Yx”†ØÑÀPÎŒ‘ÁñTWîJRêÅWîI™åºwa—ã-ª^ÁÙ7nÊÙ×ÞR/†Æ´pnùssSOdýž×íÇ/Hõ—6ÕU\›ªÞ™ékb_Ø<ÄŸÂ#"b—®ŽUeBät‰yȲ/îÀ2*²ãðH×É:`‰È܉Þ$Ü/,kµri¥uï¢:Œ<3ÎF§³˜rW{b¥eËL5%RƒT1ÒT­æW×XýèF:O²–ËâK÷ÿÞ f_¹¯mÕv/šQÔ¢HBšŠÄ£¢m–-RôÙüékœùÉ 1V5Ô¡Û€EU#‚3NDTÕ•„—ŸÀö}büSØs{¬ÌS ´±‰Xkµ¦•Ò¶Ehj…¢ªtÿjð鉑ˆhKD*4(µ(F;NMìöKËx#1¢Á+G/•X’‘ÓÏLµ~e,Æ¢»D º>L¨Q%y4•CŒQŒIsý†åôk§ª¨Æ¥Q3ú6¦±­ˆ¡yÛšû€¾ê± ‘Vo0Ü^è{Ïí°ÙoÙ?½&áÏê•ÁÇ~ÁQõ¢œœ^×éäy~ž;ó/ÈÚð Ýî?EžäÜŸ~’ýég˜ÈÓ» ¾1ÚD‘Þ©×k†û+רÞ>²J5µD×iˆÒºâ×~µæ·ÓóÞ{†ÿÌU¶³#‘ô@m²€h©FTéI˜Ÿ×ã›BxcLNçž±ü‹›3ÙÿìL/=?Ë?2Òõ(ìÎA„•EäâqäìZŽdr}’k½\Z)i'b’*Ãmh[L˜3ö§ˆXúÙ.j\'úCÕ,ƒ1f„—‹ÑâÜãꈶ]H¢‚†¨Î:zÙ@Š|¤N¢˜X+ŹBÇÕ‚¶-I&e#ªª³:°±š³µ–ó?üƒ¯ðßÿòKbhˆú Ö(X? `}/)XßícÄZ~áúÛôV×Ð ÄrÂüðM­|#¡Ó]ˆ ¤ËN‘A¹àµ£õä}v7/rye¨¿~ô–NNùÈÊy~âüs¼:Ùã×o|޳ýUÞ³¾ÃÝvΫSNcà¼Ë¹˜öôR6”ê¯S›c¢ŒÅQaª­Î£ˆ·_ŒÍvHd•¹6ôu€-Jn\üWlLÖ¸´ÿ TºÔ„ÿ½7 Öì:Ïóžo­µ§>sènÌ„H¤K–lÉ’¥8íR”±’râÄUI¥r‹Ü;W©¤*©ØN¥*R*Ùq,'’RiQ)Ž Hh 1ô|úŒÿ¸§µÖ—‹ýŸn@" ’"YaWõEwÿ}Î>{ïµ÷÷}ë}Ÿ÷xx•”ìNgªKÞ®kNÒªlÅ[wâe¿ÔÔ‘µ% tHy¢  O¥‘¡8ª¤f–ñ|a9W, 1P& uølEi"ƒÕ&³ü„ÛoŒg£œ°µÚ¤¨7(š Ö§dÍ«†Uºä8ñ­s_FmÃdµMëú‹=ê;çùÆãÅE‰ †aã´`a˜FFNoÅ\>ßç52?ÿâ­ëQj ™(ê€Ä)ƈi-¦í°¾ä†8I‰™ßBÓáDº?·-4¾“ë¤Mí™7ú;ßCøØÉ§¾“9̬GLk“]Ãú' Ýy래éŸ.8w;r²‘qóò§{{´IBR7œ»~‹Éá”Ö)øÂˆ|àqnnYB8wé<ö¯LhÇàÚ”¸_ÿçoâ¾zHšFê\XöÓw%o`Ö›k&FδïH½§á+ÄaBì¹îü~ç„äwŸ]w´ª¨tèÐÔ¼×Sò½×èÙ¡4ÝïYûî~0ŠŠWéŒð†f#íBA¥§T{Å}ùVÅ’YKïvE~Rc‰X«Xß•Ú>¼Fl1€Þ—÷Žw1b;¯F$.1Úœù€ÖЊ]#ÂT§&¥–îd»Å)nqŒ›uç6IñÅ€¦?ÁÄÀ`~ÊÖá=eKð {p»{ø7n¦¨U¢k‰–ã ÍhÌž*{wïª-©– j r7¦L\äðìËä¶e°L@ L s4vÙó*ˆ9Û”_CŠÅˆE£’‰a¡^—ê%W!QÁ QÚ®_YË!Æ|bD#úÆ¿<•›¿='É»S7˜5)[1~ ™VÅŠÁJÛ8³¯ײÔ4{påþ@ ©VÀ9ŒËÖpô¾:S ±Y|Ý£z´ÝGµ¡_ ¤CòÕ›Ð2H6 ÇÑlΉXv/þúo<®ïÞ+ÓŽn¨ã ‹’ ;,/püÒ\Gý{òûç3^ÜɘJýϯ8üý’‹)ø•ß# –å¬âñƒš,e¸7dß =.›’‹”´M…Šë‰iäÕU’0gÙ{†ÚíÐÅQ*¢E(í/)‹Å ᔲ-)›êW$8Šl iš‹ª'7ˆG4°l”U­ Ô¡é ÍÆZ1Âç^:•œÿáŸ|‰7oÏ(Áús Áúaòç¤ÉÇÏêØü…¿A­‚3)õìq~¨»ÙXÄÔêë™d¥çC}€É!´¼y÷5Þ¼wJ‘lnmÒ«ÇýDB¹à)ixzc‹Ü¦×3n.Î%Û 2å6G¼´Š¼VµÜm[í'OäC>Ñß&Mfl'5WãQF/K"u6§ýzLPKÅœR=uµÁ‹¿ ÖóÈOvC-UŒüju S(Œ¡/ïJ˜-œh««–(ë¥HG Q(#ë7C¢ŽÍ¼bà…J…W|h°âÍÞ½fÄÎô"om½Êñà.¢†h<ƒzȰ³±8 YHqêøÒ*ðu9A¬Ç©¡h†ãY˲N¸³\BMÄÓk,£ÊBš :2*“Ô1%á(6Æ)«ë¯sp÷—çÓàëõÁ‹I b-Ò¤1ha Š®Pl[į+¢¨|ØÐ$Æ3«ç;f|æ>y0Þˆú‡žº×oWž¢¬YÄH°†Ñ½)»×n“4A'^T`1É8¼ò‡»›”¹ÁU»7ïq~ÿ.ɲ¢¡.œÖiK(r ù 7Í‚ñÅã¿xÙL0m‚î—4ÿà›¸/çÐfež1Üg1®MÚ1µÝA&¢q+’ï@îŠ U×á—Yxä´Yÿ»|÷õ%ï ´ïÖx¸|¾«ÊLç˩û3CTÕ7"Uèf¯­"%ªhPBf1aMöJ «KÚa‚ZÁ®Iç#!Ÿµäm„bfˆj!Op½1½á6EŒ±ëÆ.6]ž…†õ ÿAVÁÓ ÌLÂqiò~çÅYÍHná–y*$9Í`LÕÓ_-Ù=¸Co9'©!H±µG§K¢¯ ÎcÚ@“ óËWزVU%“·X6ЩAÍ1 .,ÉÛN·_Ù”Æõ˜gÊaQÑš@™øû—Ájd§lȼÏ‚(Ëó–Ü+Áf`¢( [ŸÁyICÔ<¨ÈÚ°ro¤ bs†yj¸¼h„.ò 0׊ài¤L¡N…˶ZÎÇ„T{(–ZU¢”,Ú¶#[íüâ“L~üù#cšÛ3á†Lï&Ë7Z4M»ÐÏpõ9T4Š2B%#6‘ÁÓ‘Ý»ÅJ6ÈÉ꣭R5ìvN6N4ßtR<ì0 „Z¼ò×á¯%|ã)²Òážû&øÖqšËÆÚ)í€æ¬1+…6z¦]L£äk‚®Iâ÷ÕÄQ0FH\§2ö*ô“¨÷nVò¿‡Ð¤8btšÎúæÛ޵#nÕ Q;ú•8LV€˜¶»4x~M)ï^¡†®I{ÖE*ÖHGXÖï%ã M¶d5ÙÉAk8¹Aœ-±úŽÏŒš+\æã\Øú¯ßþï9\\% FiiÆðüùÿ˜Ýìƒø´:-gBl87È5”MätQQ7—.éÈ"XúTOªœýÓ oÞ:áµk¯²\ñ;/îÿ°ùsЀüP‚õ¯±kM¿‘O~ò£ü›¿òK\\¢Œ¹\«j.ƒôçGÊFþ¶:{ Á&)ÎZ½~²âÓ¯2é9>þÈHA “ŠëЭ´¨C ï Yú ×——FVÎ /΃Þj"Gðr]bÕQyvhôG‹¡<–¥ZÇÈkUàmKL— —ÖþhÏA¨ä[eCKTY³zîëò‰¸è$˜– AQ‹‰NDÑË[Çò[jšùMSr©¹ÄWW­œ¯‰¬u:²Ž|W•F Q5žA‘ž Á›–T­$Šs_®$QºêÓEG\K T”$jªÖ‹T×Y´ŠìLNôƒiFZ;^[-¸^zÒø ‚Wc$+äm’Œ'6D–EÊëÉ®ƉY,´|ó‹´‹ë´U¼;M“HœäªœLîO ¥ŽÄ VTÛ ´þlqw"¸É×A`A„GNK¶Wm·o$Ï=JÇü߸sÂäxÆÝºÆDH[Ķ“Dç›cö†rxþœ6‰Ó4:8>”í»ºw´€‹ÄáÇ})“VÛP“lïrëá1É“#Æ/ìŠí'j*+ìWÚþ¯ßóå»ÚË”&Yä™Fkň…Uí;4t+ÝJgÖ€êõzQ­ÃöDCi˱ TGÜüÇ3=þ\)ç>5äü_¨É¤3Ì€ŠLæPñ|‹ü³¿Âȵôòw© :MT*£ê±ŠæQ:1”‚ˆÅ¨ˆAUiÕ4JÑš((º]àUÒÔ*(mäp®¸å‰þÄFM-9ŸþÌŒ/ü^Í'òÔ£AnE)—=m²>j‘@$Q W·ëÑ„Áêº5²Vµm ª1A±j¤;ŽîÚ™ˆˆª£ò§·Æ_!„TD­Q#*Iw/UßFB)§ç.³šìhZÞÁœ.±¡'Á­ôt#§·HO ImO¥yÆ-‰vG|’éb+rÅ}„'ù(ÓÖóÍ'ÿÿÖ“39¾1T¹ò¤\üðeõÕŒƒo^'”¤ÿcoiž²yïˆöO•«¯;~îS—ùÑŸãlEÙ¸ô@µJmˆi&#m¡)­%­~ÕÞ\$Öc”ž9o¬käëßZjsØð©­”ͼÇ2ßà¡=%µžÐª4¶@ŠcM›[Èê î˜Ë˜Þ%†.ŚȲ-i¼ŠIÇšgiŽZT# ‘Ê ôAc-US³ª—Ú†šžK¤0NW•—ª ºî ÏX)Ìêœ:X)}¢•7ô2Ëî°Æéœÿò¿û¢|þ¥{?¤`ýk.ÁrïÓ#ßã~¯“"ïaÌ–÷y"å=N޼G3ó^Í…¼Çz??Ï÷2—¿Ÿ&E¾‹Ñè}}ÞZ‹÷ž;YŽÆ â=©_puú OÒpiK%P·²ñÖáPqVÐ(Z¯”Íñ§ÚÒú@ÍäÚbÆÕå—ûC>²Ñ“‡z‘»iÑÄÀÅ"'é;ùÀjÄ×ü‘®‚áë3•—WÇ<猼ÙÔÜn<–䞬‡ÔZaÇ9œf"­+ŨU •Lë_˜lÜŠ:;•I³EQf úçãï{ò•;j |bö$g)³¸bl!#ëâ %JÔ€$²èÝ“»­åÛ§x ¨i% /6Vé;Î"ˆÒt‘Úk€hb±m7L{ÐÂK'–2 &Aò)×5ª¡%4%ÍHèÄ/—j&ÒŸ¿AèGV“šôÃåy&÷>s—ºQŒ@ÄF‹™e„Í';#©r’u´¨¾÷8"YIÛ€¸NCí ²3oyüî”Ä‚5œ;]²Q®0"b¡j]å°>Ô—ŽJE·LŸã^ , ¬Ûd7çxwC–…!)WLŽéŸËÖÉŒQiY$VÍd ,mÓ B> {jƒá Û’ôRh-Ü^Òþ×ñß<Âm$ÒÆZWyFL,º•â{M­hß=ÐÎTÚ^Ñy#"&¡ P‡uzÜšo“žÙäô»¯³w?Óô;>ƒÞæ9CbËw–i Ä(”Ý|6ðî=Yoà½C"$Î7RÑĨ™·¨WÄGIŽJì¼&륢¹Ój'—j/£ÚM)ïÕ5Åi‹› ô;©L˜ž2_N¥-Éú;ôG{Å¢%5†¢ â“V›4Ò„ ƒ•Ápƒ¢­¥˜0ŸŸ²ÜØÓÕùGHÜüXÒ£;ÈôÛ”4ý1ÓÉ6Ñ:6ï1˜®Do^'ŽÆD£‚¨ÚhÄá0‹¥úå’ã­-ÚÝ6›€=™ÑF$C T8E"†x¢6–™ bÎpѰWe´V¸“¯X¹È4s’U«*¥ØuÎÐRÆõL·ªÀ£+!2jƒ¬.’³pIe§ö’®ñ®g×5š@ÊT˜çF‹¥rJ‚‘mMt+X6Ô’a¨% ÄpJk•F…zVKznÀÖsçØþ¥§£œ|úæ/ÎY¾è%Ú *鯿êSܰ¤x(#{t!£çF´wŒ†ãHÿiKº'Ä™Èü‹žÛÿãéæ2„:’>, ÎhrÑqáßÑ,#7ÿáõ*~e©=*Oyõˆdœ‘_N‰Ï‹éÿñÓ4_ýz/|AzUN›Å.c§³‹I°®Ø`µsz‚ªBŠ!¢´]Vç:7S±Ö÷RfG ¹ùÚ¯ÞPFEÆOí^e2še›"ã‚U‚W2Þ=‘pcÅÝ8á­QOÒeÍn°8—VQ¢|/ëÖLˆ„&ˆ­jL°b’L¥ç¤mW:£a\[T:u›@í”QÙÐüá½ÞóCC Ö)Qm·K)[âô.–¬Dñ©Ê–l’ù! ×’¬j9êµ”®a¼ŒbÅ4­¨³\<^ñ_Ñ£ê z.ÈAYëÛýçøä§ž–yp|ú·opxÜðÂO<-;W<ß>)ȹ Gw-_þâ >òcž}^ÉŠJç‹‚$=ÆJ×Óˆ1S bØÀOwy¼)ù`ÏÉçlMk<#/¸cøÈGÆ\ÙoØ;¨åŽÉØCn=ÖG¦6pM"WÒ>›¶GЈƒ3†·ý†Ì‹ \¶ V"*‘E¹Âæ[ ò\¬®T|‰‹K n¤™ËEüJgÕ <­¯(›’Ìz&•PéoºÁÞZe¨F0&Š"zRç¢QpÖsi£¥—Á;Ç|æ«·å˯~¿Cæ÷ªm¿× üýÖiß«i‘÷hJähj¾—iüý4C?è1|?µðw:Ç÷×ý“rýQáϺ¤Mþ¤~®#¾ k9«¡mJêÓ;|x;•KCCjiýÙ¼ÇQáíEE]õpÀás¯ïsnåÖÅ ‚þ¢Ûæ;b'›ó÷¾ÌËšÍô OGJª60J€¤®ácÙ6½ó7Ù߼޽ú<¯NŸ›ŸˆAx,ËùË£‚&‚Ä.X)"lXã¹’b)œåd|DQn0(/o|›çÊŸ¡ÇÛ1ãÕvÉ~XñTyV·™koÄ+ƒ¯ñv~™'xƒ‚oê’±³˜ÎsB'hÓæ5{ÛÞ´³dR 9*Ž$ßq èÆ ¨`l‡¶Þ`ÎÂußAmµ–å„o®·ó y’ܯP5ÉÅE j ¡­»_ÝRüó_sJö´e{ÏÉù[%»¯žÌÚùªŠ ‘ƒ)2n_Þa>ÈIBdxñQ97/)¼2Z5ôëI !t6¯ôV6D”Ã\·Ðü˜3œ $¡`«7åp£GÝÛáú¦2ÏGʲQ_Rœ°sãˆÉ|I[…J„• v2 ËÕ mZ)¤`õìP?µGâlqgEû^Áë—GBj˜¹~‡›ÝÎÛY‡x]Ì~ELÖY³qÝRÄ®tèh±H!ëŠQH‚׆6ÖDâƒA`7¡›ˆÞ-xô~Ãs¤&ï–t¨ßOζ!¿ûã@éš%•wüÕGÚjж³Ç¨˜pÿ¿ ËNZb¬AœAÛ#‡ƒÏ;)‰;®aÑœV´“œj'gu>§ÚÉX4d§ iéɦ &váo6(íÉ U]Ò†’~—ðª¬rCáúŒ­ÐÈŠ…ŸLZ0œXŠjÉtzéì˜jç>ï£.ÅÍI秘¶¡íX}ª W÷OŸQ̦ˆ Ñ8Íæ ùÅÏRŽ yËÆ*#©ŒÌ2%ˆJÓE!iE‰(‰8ÌzÒˆÐEPá¾ï#Ëå¬æÚ—oðæ·ïpýæ”izžçc£ÏIie;QžØöêqr;ðå¯ö¶ðÊ…sr+˜vÆq/ãá|‡Ñ4b*mÀÅ;C[tž7S·X_á\†cjYpRz\ãÙ¨,UªT ¬’@é¢\>M0*Äû(ßÎà"FÞðâ“‚b®l86Áhh•AЯ-Â1÷†%³"ÁhŸ‹«òÓC²Ê³\9ªá%^ÅñÜ ÊOþXA6 |ó'üæoÜæÊÃCŠL¸ùæ “Õ$IŽì<ÏãÏ´<õ¬g0ÉY. ’ìH¬T*ñøLP×`µ&ê6A¯p|'rëÍ«ò“?~‰_¸V–¼Ñ´ †&À¹“†ñiÃaÒg¸‘±S´¸9’È×ijkúŒ¤‡Fðbäž´è§äiŠ3Jåt1EŒeÔËItkO»\²dHÛ´¬æ+¶ì‰5Ü«§†²J¤ö ‰m(Rípg9©Ú„`”ÖäÎ3ˆÜÞŸòk_º«¿ú™·¹¾¿¸ÿ˜Ö?ýšñ£öý“:Ž?Óò«³DÞggÈ{tòÇXdÿ ;'ö{ßß×’`7æË"ßÇ9yßiðºÎ@4l1bØÏt'YÕ¯WâW*Â"IykYÊ–öú{Ü­¥j/¾ýšêös"‰“צ‡ìnípy¼Ç_òžßºû5^œN±mŸqR³9ÎéYµ­ú(RÙW»rrîÛ|x×ðœÝ㩰МLžtCöLÆ[ý[œNÞbkyŽÉÉ¢!£‘9ÞÖäâØÖ ªþT†á“°-ÿÓÑk¸2 o4s–¹¸Lå©<¥Õ¨Šs¹›m‚”ì6wÙ*oÄ+óïxE "ë)Ž:!ÝBò ${ñ]ÉQ…4Û}CtpÈë¯ãèp(©Äþq¿T|Wˆä}(l!úˆ­=¾—IÌUq3ú_}Md± 6†Kþ„݃·eéR’¯ ÎD%ŠŒ ÿ m| ïW—ìœ^Lj…‘uZ}ĈH’f8ZtµÒ¢º"=ˆŒAêö¾>ªàMWbÏÅòâ•ó²ÊÎq4P©Abìv‹BIïðDG÷Ne|ºdR7âÖæÿÒ+¬$CÚ¡“Õôßqõ•Ÿ¼€ý¹‹ÞºµÈ½’ö{Eâ7 p¢Ù:DÁ‰Ä­”°“‹7ÈÒ5+Z霰 ×í(I7ÁD]×йq6%„†ü`I .4D]ç™ÈƒEB$:«å¤/®jH×k£3c#õîˆh-n^ @ïd…é6Âd8'>·¨9‹füë]PNú´½ Jq¼ÀÄ(Xƒ*Ô½Í-&Ä®G]WÀØ>ØY‰!"m‰`OÛîËç1{i¢#ÉáŠä¸¢dR^ìQ˨Îç˜*Hq¯¢§$YøŽ"ÖK0¥gÕÜ¢ZžP ¶Ž/ˆO³ØH,…é±—™ùcʸĸ”t˜²á–2XÌ8Ø¿Îl÷2åÖyÜh [ÏHŽîŸÞW ©ÆÛr´¹Ãl4æâ› g 4´EÞ¢ÁÕ¨õFÄDLYuL#„ \}ä‰ÀÃ7o´]Šz›pßl¯Ú²L…( I„¼I¥F«ËÖŠªßõðÝ¿~]Ÿ¹Î×ö„³OªL0AÉšî#Uu*ÒùB"+“ÊŘðtè`qÝÆ(]ãQi}Äû@º‘³û©Èä§/sø½Îô +ª·û¨>„ØMÄZ°S’‡tüüP² }Ò|Äü³†£ßñ,^4´G“£kK”¨;„Éß°ØËšÎ»ƒ"B,T|è"_͆“ g3L¸ókSkxòßÝm)ï-9~µ$ÿâ-FÏîá>pVþWÿñ…ß#ï/´öN‚sš`e¥M—/Š*âñkNXwÞ¢jçFºØSc¸võ”«_¾Á¯\ÃG¨œã'Ÿö<{!rÒlÈg_íë/4Ê\0ØgyÉ­¸~Ípœïr{°©vzW"©«¹5hñ£,Wpt$;§)ý:ÅWJÙ7ø"#Ä(>x\ÓÊŽ1Þr'-=çg†¹‘iaX¦A¿qn%i0riš’6ž4ë“närzïÃ89SnMBæáöM/‹4òd/v*JãD1œ›DSs}âÖ ýf"q°Þp¼ÌdóÑWž7ìôr¹Ø¿aèõœüÌÏ^"M„—¿|ÂöZéõRzçöø™ÿèƒl»·¨ë›‰5µJmDø\$Z°jiVQWESÖ·¤ñ+ýÜW_–~ä1¶²Œkµ!&ÂÐG¶O[ée)ùFaÉ4rHä˦á¢ð”ô¥{^vCÂkeOwSd#íîöéjJac4¡Ž‘PL!'M†u)ø•Ü:©n¨$Îc¢/T>á¤)A¶‹“ªÄõ{´lšÆŠ³gTFyES7üêoÝÔôéë¼zc. Ú–ïQ×Éû¨ãô¨ßoÍ÷~jÍï»Æ{õï{©‡~œà뼯zÚñÞ¼ä÷knQþôs@ÞË«ñÿEȃÏ}÷Þøýœ£ïë¦ìT®‘´©XeIÖ'ëMø|½â_ÍNië ë £²"*ÜL”4³¥<ÞÛæNu¤[©ÈpÔ玂 ß<¹ÎÕW¿&£lÄO<õÏæçøúô&Ó)xÏ\ÞdkcÐ¥šÚHpÅj['ómùÊ•ÎÏ/ÿs~Z.±4‡ô¢§h Ænî1krÞŽ‡zUˆV D° U«¦}K’˜ép*ˆ³–T…AGM£¿=¯åÌ_m@DQÞSLƒnªÈz6®QÂ;æškCöº^TU …“z»A­’´Š ÷íÝV¿…—W™bwY­œˆ´ÚŠÊšÄÔ ÇÁÔ^¨ÃÙn¾`Íýïèh¬uð;/1ú—4'Ùbª»Q2pã\í0ñ]G.J®Cbœ»>f šv…²¸ØM»úU)ŒéF½±R| €5­ª"Ä D(› ‚$œÓ¤âåZgyD™ç¢B”´ªÕ6ìèyYËFr©ÞÀ/+êægÐV©( ;/Ç«…ÚV…'7á߆ê‰MV/žêàáMìþLôù6áõ©J&’ÛF—y&d–8L5lfÂI­zTŠŠvôšþz‡Û|z«†h-«½!qkˆ©=qÑhrõPÒª+”QB–¢"ØÖc| žôñ©£w8GB$Ÿ®TBDňïuŸ5Y¢6M%iyU¢ŠI“ûí³œ k·íšÆô‡8ÙI…N»ã1>"ýLí¸GUšÌàZ;]S«~˜J´Ý’T×wð}M–Æ¢WÄ#fÕÞ÷)˜t­yñ€$'¥¦‡%õn!õN:£ËË}Y/èÝ)µ¸[K¶j±Y·»Ú%óÅ‚P—:˜\ëR­JåæbÛ i,XÊŒV’b .ϹضlNïʽ(¬¶Îò=Úí=’£}Ío\Û”Ú 7¤îOxû¡‡)ª’‹w®kQµ‚x¢±Ä` jéy£­UÚuÐuïè„›^áàÃæÒ}òªd¸\t“ïdÝ髨AD¤h‹ ËňÛ\]ˆYpLr¡[ÛÞ­•ÿª´‰P' «ÛaɵZ;G0^¢ªºRd;¤<“§Úë˜{Ôž¨^ VEQQQÒ½›?zžÍŸy„å«S}ý¿þ}©níëG°E¸Ì’ô±cŠGF¼BÜOuöUÚÃH{àÁ(ÙÆüƒ†ÁÏ î² M·i抛¤àâÙ³A ¡ ÀGŒ ô?Q“|1°úVKl”þÖ€ Ï^ääS†;âp%Ľ̵KÄ;{Ä' je#6u¸NÊÉ}òµêz_i}*×EkÑD…qÒŽú|餦® ë =¶Í#Ïï “N*}éžåÖïXþî_ \Úªõõƒ©Ø8Àzeãà&Γ‹¶†ýƒÛ¤“Àd´ÉJç:MOdRœ›Í„:QêÜhtHc‚FZú„'â6ûÃ’WÇ+¶O‚n-E9NY¤Ž2‰úÆVI]LøéñRŸ¾ª·¹-Y¿¤0[šE'[á´mùÒ`¦ËIê§ b3Zk™Q3H ʶâé‹Qàxyz‚†£žEy̯õ_`FýœÅØñ¦€¾}ÈÇ­ew£àI’€‹ ªpªÇ\+^åâé,ì1§,@§'|³|š7*Ëbq‚ XCzTcªÓÉ4¤Eh˜é´.‰!­•dÖžM1ïÿjU‰g"{QÔ¢gZ,Ç‚VüzoèÝë3‹o•£YK=4ä'lC"´…a©)cm$7ŸÑ¼ë ºãLß Tz}{9ù#ÆŸ} ÊŠ,…I± /0Xõ ‚M±MĶU—žì6º§(õ+ˆ’³í3ܺš2Ò¡-& JЄÆO *Ñ÷ íF°K*iu5‘·6*ñvÅÕ­Še0!¢¢˜M1mC:?…¶3ç>U?ÌN;¤Š'¨ÎÁ ¡‹æã^ŽNYXE*>:Áü­ç§·aé<µMr'`ÿ÷·Y¾r„Ž245”¹Eû a¯€Äà ~^AÁ}®‰ŠÄHÑP¬<Þ4I¨#ƒŒâÍcŠ·Žï[7|ê0m—œ]ö3BêÈg+$*Ù¼"×NNb|'ç8“ؤ2È Ÿ¡Ö‚5ȹîŽ1Ö±‰ïòþ,÷eòôX÷Ùx?>Dשó­B*–o;¥¬PÖwT35‚Yßß&’N¶òN'$ „(] žÛ9¥[%9.Éî­ˆ¹£ÞíQof,.÷Y^,¾¹$;mɪë,…*íá=ާÇäãŠÑI>$8hO¡¬)Ò‰“Q.µôέJfÓæYŸºèÓlœGŒÅžÎO°uE=³ìõ¹yá ›'‡ôWKÒ¦E›€ ^•€% w©±ÊøxA6ÿ·.Ÿç•G®Ðf÷ïrnŸÉlÖ%£¯¹°Ñvg>Z%ð$]Ñ&ЮqÕ&BÖvfÿ2ëò>ä;l^Ù x ­h¦¬1Ú]›X†”ÀÂ*­V:i’¤n è=ºËø…‡°ã N>»àè·kšÛOa{ v²wÔì¢gøÐ.L öÿ®‚íÞR£¿j±#!ÿ ‚Û\4¨éLß"FЪ“ZYœŠ4… œÎ”Ç+Ž^ºKR$øÃ«›3ö~ü16ŸØ`ö[To‘Ïü­qþ“—H¬R1ãñ…/³zûÉ|€ä+\ˆHPk ë]€ÞO!W„°f=X‰X£˜hÉ<4ÈøèÇ/rüPÎ`”óÔ b­púÆMNg-‹6R§Ü¾+Œ7››9«:'W-óžàíÖkl™¯æŒ² ÒlHSÏ9²+ª\è[vCŸáBi¥I-Þ<‘,:.¯z4¦àå­cî WœŸ9v—ŽžwŒVž8xßÎyýöK,&×.dDWQx!¹e[Sz¤à¸g áÃ|kGÞã雌Åè„IYóÖvý‘çw#[µáŽã'ŽsW_Y&’âä„– œ’ôuë‘$0yÈ@&´DBl‰«œ*Ý!³`à „%š6ÄÞm·)çBCN'7øÐ ŒØ¶9­ÐÈÓãÀÕý#ü²À^è**ß0ž¢'»ŸG])Ÿ8þy½¼|T*7%3F‰¦¬Q¹UÕò­ã•OK²ÅÕÊ"hºŠ8£Rg¾›~Ǩà:E—9KáMk1hâ`Åà /K0ªí“¹œ;Ù§?«Å$ÐL!JÖZ«Ô¦g­ævK ×É5 bdl!Ö¨8c ¡PUC ŽÆo¢XL°âÃPœdÔ™2µˆQDûr}ÔèQqŠA¸5jY¹ˆJR×’/ZMç§bÚM–SA£F鲷˜6gn³hîAKŒÔÎIr~‹aÞÓxp(U-R¢æ™‰ðŸýˆšI!î GèãìÒJö›Ç¬®i$""ÅR »$V³y%2¯‰J0B^ÒeÐái…8‘¤b[Ϫ—r÷ò6¶lttu_LÙ¨: ºQ Rí±µ'Ÿ®4¤ ¶ bCT Š ]ÑœÅ'NŒ€IÊÎíåd‹ E[‚QUéH÷-™teÙ´E§Ø1* æ¢YÛå'xÚ?0j²$81b‰D-›RÚª%¢uŒFÖa:À•¶Šˆˆè*hhZV“¾ËnîøQ5‰ b¢ªíÅÁ1"&íÂ&c&H¤¸1'=(i¶ri72>9$Y)ö+íÝ.%-=®oEÛ¨ÕÁmiWsò‹äùXSWH$Z65&:B] ´¤IЏ\{£”¼ZÑ׆£ Y*RNÎáúcÉö¯«SœÔÓ\ËÑ–Ü>Y‹rÉxvÂp>'[¶Õ@´Rk7t0¨¶ãL’jÅîí;Z,æ2ßÞa{‡ƒ­-vu÷ðPFU)ŪÂTJììEÝÂUÕð@­!k?‡–QUÍ:ZÅD°áìy¬÷!¶"ÒbÓ!¢^D*‹çÈID´1ˆjT¼àSÏ=JzaæÞˆ£ßŠZïÏeõº`͆¸q©"o‹ŠB›©­6v ÓßH»¬DQ’‹VÏ%ZÞÌŧ–à•Õovš@͙ߢ“å5hï²ÊÞÏlOÕ¯«[ NÞº\.]Neôø˜ÛÕX¥Uyäè_½Y@ë„E5Óf~J1‰¦b9ceVzgå§—V©ô£½eï Î ¶­6’hä‰ÅPN’ŒÛ3ÞÜ8ÕžÏå™ÅyÆåmo-ÙtI™:²ÿ—½7 ¶,»Îó¾µ÷ioûú—ù²¯ÌªBõ…¾!ˆ2%ÓDÉ4ØOáðÄ:‘Ó¼'—Ÿ‹˜Ô^çU!5êÅ¢FebÖ²‰$͹´„:Aç+’™Cl4!²C¤FÄÄ(HêBëc1Îb¬ÈáÃ#×™Äëmi¥¶Ðþ$pÑ'4gtâlq•ÑO!r„º‰ªJ unJ#ޱQ“©4ñÒ ™Ý–,¹§&*e2[e2_ÑÞDeZ¥ZÖV\0X»¸›j€ÉlQòK:!¿| Tq£ž„_‰¨çE}!ªAúÁQ:OàÁl*ÍQã‘ ½º”±«§!¶‹÷uŽ0〗Gc^ŸNß áŠQŠ9nSЦ²mD½¡¶?. D^¤BIæŠÌò³•D|n0AÏÌr “·ªkÌÓ’ÈÁùmšÉ&ëÕ&½æCÒrIÚu‡KÝCžÒ™K©$ÃEmŠ8âKç"¾Ý½ÅƒóÈúàǸ0»ÄU·L…Ê+£)S_óÒtÊ=W‰Oáä2•ïIÎBÊîmÊÆ gY`®¦)£i-ƒ¹' ¤AH]¬=cÙ„¹Ÿ°üí]â—rr#—f·Çæ®#k]£eWÈ숵æ•Þ§a2c%ò=B˜`­¥p§^f ©rªk/>!![îrîCO±òä†÷vyðÅoÑ¿ùðG*"\YYáú£Ñ)'§·˜Nú4ä¨RŸìÆ}°Ñ‚Ñá/õ"ž<µ£º@µ&,jKQ=9ë=Ö¦~‘¤H“x±ßÌ™×âCͼª˜‹Õ`:7¸D°9ˆUêD®©— 4²œN–T!÷øs“¶¹˜5øH”PPP¡–˜vö/½ÉGO_ÄÄ×è²Êr½N¯]3Étm¼,U–áeˆém’iMí¦ÄÕ Ÿxðr®sƒ?J^â;wú\.Ú¬ø@·§sæÁáuq“­ùžGz/PT M 7ºðÉ Ži¸w8>òŒ‡£ Ëð쳦QÌ_œ.1ÚîQztN'<öò[TE?Mp åâ|O·N®Ë…Ö5lvŽHR\Ø¡â>i< U%’uµŠNqRLg¬§9M»Î@–â1"ìw÷WFglw¡Ž…H+484ÔÐJDšÃW&S‚’Ù˜«eÍ®õÌT(bbRÛ"VËVµD앤šbë)¶.P •õki¦mù¥µôîߥˆöןG?{s¯Oô‡‘/Qt=ýê6Én*aÖ'ˆ!t n3#´b‚µdã%->.<A#åèý›T‰Å÷fÄÃ!±³JCdçÁy\+gòø&õRƒìpÄÒ›ûÄ¥#ª•¤ hdè­µ)ó»’Œ!Ÿy5‰‘+µQ¬ hb‰æMND9^†Fd‰ó–÷S ÍS!®CM¬‘7bÝ“jkB„%‰1BA ö%N‹àA`Äb±8jòZ4‰lDo¥fœT¤i¢usÑ—Ç«Bî®–¹µ”A,Ø…x2òk=„€&‹ ·¯«gz‘Ü"> ΓíŽIçT+³ Šsþ­1ͦVL,˜Ìã‡=¦ã!E딬½JÞ^#IšDQ††Gakª*Iš± ä~ÎËÀDÔI9ÿ¦œŸì‘ŽNH&Êö2ó¬¡ÅùËÒ/f, útF’¹'ˆÇMF¨W²I·ƒO Ò°yçËûÌÛFkëŒ66 Ö’º-ÚÓA Íé”K{{xñ#´fŽô¬¹Îp, ég{ jÎ2 ^bmÉä2*!&è:I˜‚^BIPH–Gµ?bóÔž'„ 1’/#tÀµÐ4ûN-4é’¢A©¨/¸‡žþà%ºO¥\ýÌ“TãŠñMO¾auù©Æ;± ðÞ0Ÿ/QW%øÀê㫬\_%ÊcÄ@]yôg"qÇzÂÁ¿,¿‡=½)+/å4ò1ü™´ñm9˜6¦˜Ê¨q"®È”o=)ùõªóÇTnÑhd8@ä 5–f3Ö¥Ö©œkÕ¥2ñJ7²´êÅþ@ÑÈ8wi•‡÷nñß:e¶²†¤VŸKOå¥/(y»Ã>”qívÉíæèµ¹P@e“ذÑ+ÉŒáù1íæ e”3¯ÆdQÄ’ŽLÅ~+"ÏcZÓˆæHHÊš¸Z`zu ó¤$U«ï›¬I3Êqî!ªnµh$ .ZR.<ùA§LGû¤íe|ÞQ’É_ö©¥àÜìy.Ì?ÊýÎWx#=¡ÙhóëÏ\ç“]Ïk'â•â®Ðp í`"|Øb\ΉnŒÙÐ ÃÉ=G¯W#! Æ8wÌR´L*9¯×5ãÓTŸˆƒœÏ 2_¢5„È,¦ÜÑbã#*â‚ZTŒ(^ eÝ%RÛ!M-© Så±L ™2w–‰‹ð>!òsFå)ûÓ6n`Èd¬—;«ÅÍn*4¹KE}"# ŒFMöN—M3’6;'V‰w '¬6+-ôÍ7Gò•—&¼øþ5͈Qa0&&K.nmòëëœç€ck­¡Kqd¤vá]LŸX}šßüØEþþß}…íâÏýðÒÝ¿±uëߊÿšÖ» ðUDø(2˜¿iá»KâFޱB9žÁ@DjÇþW_Ñý¯¾ÂƇŸÕK?õaÖžBLž‘DË]}ú1úwvøÎ¿ü<õtþ^D„ßÁ8wþ+++âü IjÎ,Á6ZjÄˆŠ Á!!ð¶a ¨â}%¨ª‰IN£„ ¢Š¥Ê[êýbAñ¡•-®¯4qùDbo5+ÚDñºÔuÄŸ¾¤7á’ á¬NÏ«JQGÒîŽYIrmù+”x¹’ÖüDÖÖØåŒmɃ•[2lï²yü>½Ð»*mItn†Ô¶¤å›¸¨+;=NâïhrûFu½øXeÜ–ÓÎ)ßn~U·zOð°ßá›ýý³Ç,Q°‹ÈUÉó"–× k¤+`ŒHlDÅ äL4]«âÃ¥V"«ÖêG³ˆ`À×Ü`ysÏãµ–å–èǯzyþbK¿/ñµ‡s¦¯½,õdªùpÊÊC–Þ:æ$[£·Õ$<ñ‘;lÔSß@”¡ŠìcÍ›’†!¢‘z‡-U€™WTsvÆÚ¦%Ëî9Ýk5äËWfZÙû^D0K¿‰ k³™LŠZKk%™Ž‰G="…u/š¹Šõz¥Ü´ŽÃÒAÉÄh£²lV $x¤Ü'¢&„ àåʲ̖:ÈdF#ijn»R.Ezüà–L«‰FÿäÑo©9˜b_>AžÝ¢XnHï ÷àÈ1ôU| ´"êËM X™Ô’žÌñR4ˆÐ–²õp¬¶VÙ}bRUÓ7ˆç•¸n®óµ–Jzï\P×Êdvu]ËÍ.É`ÆêKiŽ$®Æú–tÞJ±¢ÒH­æIÄÖÑ”“åš[@uyœ;KÑòLÖ3^ŽfD/&KÔ‰eõ0a™H’Z•2 êEÓvÈ1äT‰×q·"Å(ˆx´;ÆÇ»íŒùúªX³x¯•~ÎêIŽš…‡»6s–§$‡…º:+.J5ÃÎòœ²YÃê$ª dÑ‚‡ÏÎ4›31ZœuA»ÈâÕ‹•Z06ˆÆŠ«QQãÀX£)R)RÕ’íÖŠóRn6_oéü\Fs{FÖ+Å`cT—Ð?ÕÉxÀ¬yH£»IÖ\ÁØ ‹¡BpXkE5h3TÒÄè²:Õ3Jšb²¦ºf—x|JÔ?&žàㄪ¹¬ó$“Ùù‹Ú[^eõôXÚÓ‘Æe-!gÑx6“¤0x‰HfsÒÙ\›½ž,íï)(Úé]¸Ä(Š´Ês9Z]ÕýÍÍ·i*Yí°Ò;ÖŃçDòÂk¶fk8¯¼yræýPðÑ„fÞ$“†Њ5ªrLR%DšœÑ¢S==%ä‚Í…°¡¥ˆì9t.‹ÐC¡îc“¦J”ƒª¬=_âÆ•îÿ^µ(2Û¿cØýü)!uC(/zÌ$QÕExŒˆf†åkŠÌ¢{ _:•`!ÉbL®t÷*Ed·ý–¦ñ”ósàÍ)>pÛI g’Rõ^¤ðycÂüKïgøo~^óŸüsäþˆ%I×ç PJÅÜÕ4—yj=ƇŠrëŸþÉ6;³Àç>}ŽîrJìUV³Dú<ûC¹~¾EÝhè­ý>¯|Ák§‘ÑYŽ8"ƒþXz™ÆÊÈ]« ÝÚÊ$ò²RS:†å”¼¹$yg…‰×889¼®Ôõ«–Cæ¼µSËs¦K³JÕÎqÄTµ2)Å7RHcõÕ ±K‰WŸ‚N)»i¥ý®È¥ëÏá4ÒÝ7_ÅÅ™Ð^B4¨™Œå€44e£zV/Í>Æaþ‡r_Ú+ ýÏ^ç3ÊüèDnÖËÚ¾š \0'¬DÇŒ9‡gIj-tfæ‹–xUzÇžù ˆ5èB :'"]B¤Â`!„‘¶æ3©%VM#AŒ¬ Tµ¨¢F ¥´–‘kÐ+RADC0ÒÎUû’ÐeÆfVá„D˜'ʼ7“ûÓD+TbS’Æmâ8ZàÏŸI²Mž¿ŠH¢ §9:9§Ç+XÖšÇW=Y¤”FŸ²\Ié{ý˜¨ëúÕTúU¤£`ĈÕÝã‘ÜÙÛÖ,‰ˆ­á¿ÿ¿¾ÁÁéDÒ$ZhÜžún²òßÇ›®·ÎóŸ}ò²üÌϾ¤§z(¿ößÁKwÐ¥ÖbÒÙŸ<Ä{D°ô·»ˆð½ XN×GøŒ+"|ÄyÅTD¸tùýćõäæƒ…£ ÄÄV8¹õõ1 áßE§ÞU¾rôW9úÆ«²õ©rþ/²ñÁ§ð³™ʹ>¥Q–°ýå—8}í.Õdö~±–Â;áŽt<{§=¾óíWøø'>ÅU}œøìDÅñù«’DÝò˜™ ÔE Á‹1†º.èAi´Úb£„Ô«.ÍKâª"I”û—¯0?:@'c阜†k Þ"¹4ÒŠ¤˜0ÊÛÌWs¦³S"‰¤1[ÕmIå#ܸC²z$¼uƒÍÑ%Ží‚–Òµ ë¾­Éè2·:»TëoJ<½€” IÃ’Vôe ':<‰øNï»Ú—í{T’vYLcdC”þb±%PkxÇo«¢,]“In•Žé¬ØéÞ’rÖÅ>±p|DV\jqxbY,?Ýlè ±àŠ±|³Äï=épjhkC.®DúÄ9øÈ• ÇYÆ¿žE¼|gÊô¥›M‡¬ Kžÿê-Ñ,ãáµpP0{,â1›éjô!”>˜»9j|åq. ÔÂy†UÍÁ¬¹ó¬î¯­gòêúœYˆÔP#rq>ãroÊ¡(»x¶ú=öÜŒ\ Âj6¼²á•íØÈM+¤ÚbÝ5X©›,É2UQ»‘Ôaª³z# Fqy¢U§Åls$D…§§D’ɼc8¹“Ñ“ ²ŸFäÉÌÜGšMáçŸQÙ™Iù»˜÷ÆlÎr’í9EÓR?Þ 0/Q¨"! Ò—º±7Žn„Ü< *¾1{r߈‘QA¾=Àuræ—V¤ÜìOKYýÖ}Újb#tR&-†­œý™$Þ—žk¯ äá¹÷/tˆ=dU¤‰é9qÉÕ!­>¸N¦Oœ¿‹‹‚¦&–ÄC0*ÁÆjòšâéóL—»bjÕ"«åhm†Â;átEPïIšm6¯¼“¤ **è@Þ®.ˆ ñ§ªßzÀhpOÂȳrœb+á™ýœ¹/¨Œ—Óå Ú6 ›5³Ø‰Í,Qli+ÒYl.ÈL KE8 õ˜à0é›ük”RÄØ¦%A%=š’Í™\ïP®çÒ®«ÙqIç­1ñ̋ĂI¬¯øÑˆáx Us™¬»NÖÝ5!ĨV-%¬&&¨’i-›ÁÓPÏ@c©L¢óÕKb»ëd»w±“¡6ç;ø¬EÙêPÅ/]£5Ë"¬>A™;’46T‰A0⢠.N韂¼Ûbº²" à¯o°¿¹Åþæ–¸(ÖÕÞíÉP¼’º’î°§Ö¹w ô€¨ŒÔZ›ŠT:ï0‹ÏV(™¨ó¥„Pƒ? *´ûal¼Duò2cˆÑ€‘ˆŽž'Ñ\„E…­+†ÃÅÔò·Î†01ºp &Jpe`¸=C=b‰8íŸèW_zÿ6*&ˆpüüùq¹ú±«hP ØÄ¨™"ÜPÙÿ_œœüé”~{—A´+WKhå1Ý\$^oâ'œM†‚.2òÃÄÑ ñú)ÍŸüŠèÕ4똆‰ðzÖ<†ÅI­P5ôÆK ¾vÊÍ›c¼Q¦tdu —VøÜ?ùK1Fð‘¬5½nµKYÉѣZätjtVClòèOSlËZ®D¶Æ*X#r{:àÖ½m¬1býì6Ù$‹ /ßéóçgòAý¾ëÆTþƒg»ú3?ýMŽª~ã„oÜ1 øEåà¼7bçß¡œÌ°Q$ Œ÷é»ì}é[ÿżïý«Ï?Nº²„+KVÞw•åëåäûìýUŽ_½C=™Ý„ë?óqÒV“¯[ªéœÙéà¾YYTLÇC–Ö®Ð]íRG g„†®f©R˜&j ÔÕY^`ñD‘8è‡R],9#C„§Û?•y´ÕΘ“Ð&ó)Ó2pßžò èñÆxÌ µDi¦´24¶8çä£Ñc|,ëpÙïòÆlWÖÞâ+—~›OßüÇDÕ2c»ÏPj–L,ku—IÿG«·Ùî¾E´­$’ËÍù˜;ʼn ꊽ©³†™=cÞ–‘ *ªŠzáF£‰IæâUIê-ä#+K†ˆŽõœ4½ÜŠV¨â6!Ï$ŽçlEë|0Oy!IHüL¾²—ö{<™ÏäZ3å³W»\i‹|íôˆÿýŽ°Ý¶ìžHûî]l9¥SÀs_»+õJ΃§¯½Q¢×Z\Žy~Ôe®µ½-‘l£š‹¡ö‹}€Xj™ûÀÎt&GE¥-…Ë@Öjñõ«K¼¹Q±5„¿Ó–”œatÂ’ÛgVŽp‹@>wå¼$²åÁ( L ”œ×#¢¯›4CB'5½ê6•ëSû a‘o‘.‰¥\_¢Z^—§de=ª°uŒ_i0ƒÓ{”Kµ¤¿ô$á…MÌoßD–;_ƒ—÷¥ùJEqक़Ùér'õõ6 v{†Ÿ×šPÅ"(4ç5«§¥¨Wúy$>P ÕV‡âê Ѹ ½u"!¶œ~ò 0‚Æ–ÆýSÖ^Ý¥=ò«©L/v]ìP7bÎßRž{uÌ;ŽWRn_\¢¿”{¡3M±ÞRÕ¥ì·&Ä4Ž"®Þk’F•4+ƒd‚Šm÷©.¶ IÎô±ëâ7šÔ—–ŵZ „ /üåìÛçt( ª£CœwoS7ò—/êé¹Uø•gÅl ƒ £o?3«u–9h¬S®6—%Þ1ÞÓk– »5¡öT™b3#¨Y¡i…JU¹J]¸vµxi"³˜„EÊ‘:EFþâ·I¯=@Ç«¸HEœ#B,FBX ‰ëaÎáp_^~ù¢¥Øíñz+晋Z …Þ´àî¤bi5“Ýп[úC¾Såâ[®ž+PIŒ+†ƒš]kÞraêaæèm4Q¤ì÷©ãkY›q1áD`jD–€ ¥—™ÀI\ðjvÀf•r!]!Jš™Ñôu]âA*§ÔìæH"¬5RfìMö’H³ ®ÂÏ&tt Ëùˇ?K§ºÄkÝÏËpéU>÷ÂóüøK¬ONirs‚Ü\îrå¹ k=çýTLDuqQjc&=LæŒÄ Ó<Þ(¥ ©.JNkfxr1„ ’Gµ¶ÚNjhºBN‡%NðÄ4‰ÅËf.‘Ýq_k9¥Óœ"!AUÈâŠn>GDÅ«Gg+B#Þ0žAlÝf$òdé!‘I‹òe±¦X,|W>މwHLà‰+IC‹¶vePÀ뇖ÞL”, ÒŒß)j&±Ø8ŒâHˆ#/Þyj§|æ…5~ñã[òv±Ž*TÎÓnÄüÖ—·̼•'‰ Æýq!‡ýùÙõ4â?ÿðþé¯K{mÆçÿè¢Ü¸Úâ—>{ž{ò†}Gïy³ý‡]¿>jFâ‡Å£5/¬?¢uó“ƒy¤ãüƒFJòCüý£´U½WL‹€@=J“Õ÷|F›§46—i´Z,_¹€† Á{qó’å+[¬¿ïq#Ð༣‰j˜(Pþù·urÔÃ&‘Ø8æäæ÷¾ïdHŒaù}Weë“`ã£ÏjGPׂ÷Ô“9ƒÛõøÖCÙù“o¡µãÅ_û.ýØ‹ý1Åp¬Ûö G¯ßfv:ø+ šÍ&Ÿúô§¸öü‹ºÒލ³”ûÝóX±ÛT—ê>Sp.@UŠˆP»’Áè ž­¼Ë(ÉРlzG¯Q]rš5dgi•jo‡Õ(â^¹ÎP¾\õäf5ฮÔc±KM1Y¬qá$9Bx6ÙÒ–­<ÖuzÍxíÚ娳ÍvþÏ~Læ¡xõd.cg<Ó}Wqºz_Ž‹R®ŠªaJ¦¾&ÑTdQ¢©Š¨¨ª‘Ȫ>Ñj³ebÎvUTK>¼¼IÔsêfº?Ê1¶–`-\T*xæµÈÄY.؈îò¶î4w$mó!³Â•Ý1š:êºæ‹û§ô&^©¬,')/n.ñD7eÍ”|½?æ³X‘—ìÎ-âÃCê(&’Œ/ÝãÊ[;|ûW_$úÚœätNÿ§6øøèˆ‡pÚ_WkŽÄª×ª®¥-|H5µc¼New<×P–Ò h;2²»¹Á½eöÚKzy`å©“LWgFv¢c¶£úvÈÄËAØòB`)@O‚Dž±òtqC;!–8(ÎM©˜1¯ ¡BÕ#@|fR"êN‹ri™°Ò Ôqϱ1rQ[g—;­Àäõ·d²ŠÚÿêcâˆâ•1I'ÓôRS¿ú 샒ôÜòZGRû€Õ ¸€Ý™£3‡k‚ä¢ÁŠ´Æ%kcpU`ê uÖÈüéóZ-5Ä/eD“’xg ÅzWʶjbiÞ9¦uóXHŒF­DZ'S&çÚ .u0^ôâí‚Ç_S¬9ém$ô[¹ Vbê; Ôi¬ë{FV-gÉ¥$K+¢ö×f[ðÍ&y&/>§!MÅ¥ ÞÆTî£Ã欱-w†ûü¥*fcð³ ÅÃ;ªêmãù÷žÉH7¶´qý)I/\A’X]1‚j¯9'wÄî?¤qè)^ŸÃP!ލp:›2jxœUŠÒaS‹‰­Æ‘HÙ…0[„)*…¨ú0ć9k{'"NTjE*ã5B½œêôr[BjimÏ4;*%éW Â1"+¨YTÞÚ¬AÒZ!í®a’\ñhÅ¢:N ta€R,‰Ú„BŒÚqOìl¤Q]ŠŽUgâmª¬©ˆëkíöGrùÁÚà©r$DgN–ÅŠª7‹@yX'ßKšàT‚1â¢qNë,“Éæ9EUæíŽÎÛW(Jâ¡]ž9‰5­‘íFIs¸Z,“%M¼u¾çæW Î!bÈV®h"]o©Ÿ~ƒõr’žã/.[]«S^<’x7hó“‹sõµÄ¢IM ¨Í„Î'ŒD«@%Jeé~4‰ç ¿±·¸ÇˆJÚ¾L}àüùF.`L“P{Tx\ä¤{›S°V¡k]¹ÀÅÿúGøY­¨]ä߬ã`Ò’†·ªÁB>å™›×ðýUI?ö5Ô¬4¶ð³®…Bkæ‹ v5¢ÜÝ)å˯±Ãûû:üÆçžÔ #’(•µ¾~ûѸUoti©)çÎá뀫½ºÊ‹1è݇îíM%µŠ{}B8õZOåîrÆ”˜Ø{=·u…µVWuXes«C9¯ÈN¦äŠŽ,›ZÚá>ÖT,•±¦Õ.¦¨Ef)‘ÏyíjÅþŠÃ{ŠjÞÂç-‰Êõd¤Qæùè•ë²uÿãìn¯qoùõ–ùº|èÊEþÙ¯|š¼žP¾ñ2Z<\Yc}Y«D¤æ|´yJÓÎyë¦AºŸÆ6ºúõ›bÎÍÉbKøæjö·Ÿø¥Œ´¹(hq.¾Æ’mp·Ø¡-{ú\£'P•Húó˜ýA¢4[dI*ɲúPɨ:ÔFë@šYUUÔ/‘õº(Ÿ† ‹Úõ K€ÁÁ[£ˆ¨FvŒT+ªu#áÌ‚©š"¦ ŽîE3¢(à§œçþ*¯t“#JlVÂY?ˆ¨Å[°Öˆóªªˆ ·ðÄ.\UgŒ@[³J ½·ø$\øW_ºÃ?ÿ7"ùO?ðÿôŒˆ7-'³ÇtP¬KšÝ\mÈýÝ{ü³ñg|嵿RŒ €.·¬üò'–ø7_r0pï†ý°9‹ÖMò(Žwkµúa?>ÂäåÝþíû¾WôFN߯6ì½æ9Þ­ àQx3ù_LáAå\0 IDAT÷‰ÒDnüG?…¯juóRÄ9úÖ¿|SOìrtë>åéHêy!µeÿÙOHÒnPŒÆ§©<ùÙOЉ,ÁLd9¹ù@F{‡ˆ± Cduï¥7¤woWV¢!Ð{ý.ƒ[Ùþ£¯qñ3•óŸxAÅFD+kÏ\—õ=MçÂ7ÿÏ?à­ßýã#.¼ø¬&í\žû‡Gû÷ve²÷Ò›ƒÑbcuˆQÓÉ缨Ú3GÆÙ…BDúñ²J‰‰œª3¨÷D6&MÌ‹¡Ž|%&$TÆje"1Î/ömE4C°Vú¡âó“]Ž})ûõŒÈD„<—¨™Æ‘®mOñ{Cðà–:úê|Gv øÍΆtŠŽ^8}‚ÉÊ÷6¾Æ…½÷ËtÞáO·Tµ••ô+ÛO@A+²,h+ŠdÉæêƒ—ÔÀ‹KlFK8©ÄKІoÉc-´ELUÔáå&ZžÈx˜k¡‘¼éGLkUˆŠÔ(ODm}¡“Jºq³z[vÇ^_‰wä/vKÞ|pã‘â*‹+¬æ6“§Ïuù‰+ë´«Jÿö}n.%²ÛŠ4J½4oÞ†Ý}Bœh#]åò›²uwŸý·TTÒ£9ÓK–KGœVœ–AëpŸFœkQVR¸¶V~•F|,èœþ¤ÐN]KÇZM“ˆW·6ùâõ‹DÎðcRéöGìÅ»òz£ÔÛ£&t–õ:0åÔ(û‘׃€áRµÄJ¥ÕQIéGßs•" ÁD8ÛÔà2f›+b:F×OGõ*-† ʼÅôF[Ê–2¹uKÇ:Gñý"»:ÿ]IöƤ?sEô·_ÕðåÒ|ìqu‰•¡™JPƒ‚WMîÍðs'®!/>Ú£Bcg¤ Š+ ­;‰”76tz}Mˆ ZÔFÌŸ8/¾«™UÒ¸sLó^OI,ºÑ:µôVrªF¬ç'²vXÈ4ÍÙy:bÜnIˆ‚J¢†hî(æ†Ë8·Ý¦1UmUY™‹¬+Ú ?ó‚V+Ëâ×7­¶ªRÔ¥x_Ñ»ÿ¦Î'}©{§fS±gá²3tòpñ;$UH‚è÷¿™Ì÷0w oKÖZ–óOj§¬Ë9ÑaN1k2œëÌß$´jªb*©·å–޼ š/aî™Î‘"Ž´0BœZIÓˆ®m¨ˆÃR«•X©XõbM@ã  ÕZÅ”Aã~!íÂQ®åL.5e¾™Ñ¾3!?(YPoAbÁÚ Þ™Ï§T£SÒöŠ$Ë›jâL VõYtZYQ 4ÃK÷˘—\⃑œo µ“ «ÏÜÕ¿¿Axxžæm*D«sœ¤D$DZãÅá)UäÒå†þÚÅww§ò‡_ƒŽw$ý±6œO-Ý$’k—VØÞh>õ¤‰ÅÔT5NDlž€ Ï?µ¬Ï=µLP¥}F1òbå<—¦ßx©§%^ S2+jZ¦%./Ic¯ý©“YbtÕi%×Mj{žx_.Ïh3)%X£U4åäbS;eÇÌ(%5™†FGÔFØj®a:‘ŒB>{ù"ñÑOëî^[,ÿÛé7¥Ýh6ÅF–ù¨D½g°ºN±¹¦DN|í¹˜Ï‰´ÔW¾Qrïà†|ð3-ÝŸöåà¾c³c0Ëh1WÆÓZRiÒ––ÖŒ%RüÂéd„< º)3B0:ó© ºZ*UèD©¢*Ir¢ç›»ˆñˆˆç µ¨™¢¼=oq¢¤‹É—ñX D‹²j]TÒÔh4BlŠª=»°©ÄThe £Ë œ²ßONPƒãFg" [ëÈ¥Ò+b¥ö¬®'ô¢%iNNô÷¾µÏ¿ýú®ôçúŸüì ùµO_å·¾º#ÿëß×Èq>èÅõ¦ü£Ÿ}ŸÀàÈ—­Æ±aN"eœÓXîèZ#—_~þý±#ÕzŸýÙ%UV§ÖÆŒïÎø/þù¯=øîðm„k¥eõ©‹ÿø§VäÒjÂÏ}¨Ë¤¸§/ߟËõs‰|þë£G<<êâûQe‰ï6¡x7á»aZ<šúQE„ò.ƒˆ®ýÿÁª§s|Qqù³]ìt°úô5.}æÃb“˜zVðàÿù3êy`:›0Ü=Æ8íÊ`gŸîc[t/Ÿ{'ì·|u‹Íg®£>œqœFV®]`Þqzg›£7îP 'à Ã;ÛLöŽ8üúwäÆÏ}Œ•g§Î2t4âüž¢±Òe÷+¯pr¼Ãlg.IHY¾sŽÍ÷?Á3Ÿû9ÖŸ¾ÁÞ7_åðµÛTgØ–÷ž{wïqåÿeïÍblÍÎó¼ç[ë÷\ótæ>C÷9=³ÙMš“$J”dɱdKNìØIl‰s“Ĺ #‚0|•ÁNœØ‰ȑ㈲dQ&%‘¢ºI6ÙãéáÌuΩ¹j×®=ýãZ_.öé–dKl¶•’Ûj£öþwýÿ÷­÷}Ÿ÷Ég0ó)Ö;bWâlŒªbñÄZR`ÀÌ#†$n™ÖÝ c%¯Ü¬ -èä™ †‡ ‚Gy+;F‹i$di@/H¸šF´§RKÝËjÆ2ëϬaP8Þ<ÎøÉ•6ýÑ"åýUö§–ÿùþëÔβ[U•”ªl¤1Q‹)%uw—k½ž\˜žÇ—©¨(µ±7Yf:¦½»Ò.sZq³p³Îe×Õɹ^VŒýHzq1h¡ÖÉ‚¾”6–Ã@æl“¯-wÄñà½E9µ('' EDè#žZNågÚœnÄŒ†S~q{G¾gKXïÖ¥˜wnãï?ÄÆmÒ3ÏÊünŸ3ßù*'ç›l_ÞÞ¯íS· ­U¸|{@å…)Fæ-õÓE$ ú„2B§½²’–ƒù®¼±±¦º]–F—,— ×ãcÞŒ¶‰Eä‰Òpª$¨ðܶžS32žÔ7dÍuhO'ÄEŸö)|6s?‚ïDVjQ¡–ÞGR§–¦Ï‰ŽŒ${JåÛ¢ó Ó&EÇ0¹}‹Q>FÿìSØ/ž¡øV_‚4&üt÷Õ;ø¯ÝYž'XZè̃”„;¹Hᨛ± !ÒN䤕R˜f(åÅe¦——$fø0¤ŒÊnˆ­*:ý‰°3"ÚÂBжBÄÎδòf„u*íAŤ0Š&´}HZYjuŒLFšAsÒàìV›Nå).·¤lø…6ãÇ/⢿²&.˜ ö¨·Uv¼EUdåXªºÀ+´íxú}°y™Yœ~¯0òÏý’WT½è` 3Üct²' º¼|‰¹¹ÓtÎ>Mµ<–ôìEª2ggë:£m °Q‚5V ­Êc§µäN)r¡²†¸IÄÖ«J…a$†J,N:$RÄÎ1%ØiMãáQ(çb†µ(ç"’ƒ\â£S(ŒïÇdUN9HÜ[&h÷Äļ+? © ³EDqÄ8BçIÕ‰ˉ dØY`7¼#aªŒ0N†”Í“4âh¡Mœ—4ÇS‚J¥ßyÓ£æI-8UÝpŽ Tñë ø( ÚÞž)Óœh’ÿ™…Ñ>ÚÕ§»ÎËŠ\¥ÉCûP$s¤(tæ1a(±I©#K¸lDqü6çXë<Îþb&­Ñ\Ù½G\æ»—6ØZZäñ{¼po“ñígž¤õܲ„QÄî¯<¤œìÓ]ΈŠsäúœl༥ñ› ‘b£U‚(…‰9¢Ž¨Q²;ä:‘äâeÚ—VY_Ÿ2þVŸøFA} 懞ƒÑÅwì}¹¦ýÅÓ„É­s71AEçþ9^ZÛÔÃ’¸|3-Ó\í¥L-Ÿ;»ÎúöxëVK6Û_g3~ÔFüüµÇä©KëTeäSŽ{]ÆÝyvI¶u‹Óó%É`Â?úr!¯§âÅŸèÑìÆ‚V<õüãp€ÓZüÄ29 IÃŽÄ2d„gÖ*ïlÄa±óð¬.Vºw¥_ÅTj% §AN^·I‚H ÆDâªjf 1*1"Šbðt‚™k óÈ~W}§Vš¨‘ZDk0©C¤ !žâŠ’ÍÍ5ަJ’”rº9¡ìf É5äöÝ©,¤%gOYÆå„0 xçáˆÿìï¾A?«$ÆãÊ‚ß|ý!¯¼³ûûæÈ·îö7Rº.÷C5ËÓ³<>~ŠSNÉßø÷šœYꈟ9(æhØ=i5ôNZÀë›Ç܆yéRCjŸ¾Òä/|aŽ0ž>“ "¸Êñÿü²Ä‘ð·~í_úöÿoÁúÚ‚|L[Õ‚üÒ÷ãÖ¾\«Ö‡ÄWµÜü_eôpO1¢^Yyñ*ŸN}U£Î3ÿÄ9qU€­“9_|Bwß¹!“;{Lï÷yøÆuÆG}.œbîÜÆìTÙ\]ë©®ÉêS—™¿pšó_xñÞ¾õ÷_y—¾þ¾Nß½ÉÓ?öŒt?÷"ní,T%½K§i¯/SÙœzÕi¾œÉÝÿòëÜúÏ¿ÉùŸx‰õ箲pñ ë7î±óÆûÜÿ× ¨ó14ÊŒn6æ ƒWZ8–܈ûvc|íðÞ‡)Qkždâ*L«zQ­eh+=ԊЊ ÍElÀÏi›Ç5eÙÜ—šœj᪊áÁ›¶‚XÞîOñló +¹qý2S§øjL­ŠÏã½TW“¦\MæxºÙeߎ¸¹ºCïéÒîiI‡ó*‰Ø6%#rú¼9ñ<ôuþ]¹1Ž9dL­ª¹zË—Ò ™#PŸäJ«æTvZCi†Ug—ݾÓ_~xG^>ê“—k¸Òª-z’ˆP•†µ³C.]:æ¥ÎYÞ)å׿}“·áèʲqÊBxïŽúû÷Å Z§Ÿ'NçuñÍ߯ÛJö/ž'¾=U“;éÿØÏHÆ™w˜4VHÄih*ªªRïU;RÔÁ4“0+hT^oÏwå/èV§Å³GG|úöÆäïR]øK—¥zó÷wk5]Y¤zh'"ê T1…C&µj(D4†fVjTª :-úc‰Çî̼N®,‹eß>’á¥5¼¢¼¤9Êhl´>ÌDc¤‚ª8 Š ñ ÒQ3’)D¥E–¡æøñ„ll/³ÒÌ9Ëñ§.Q^ZU—&³GTÒÀ{Ïáö{šMrr²KžTŒ‘ª.…N.ÖVTIú¿GÐ…"2L“àwoPúè3÷Šó‚†ܣ쒈  V‘PT=Óѱ*ʽÉw9<ºG·»JÚœÓÅå ¤Æ’,¯ÉÉ™-²qŸ““]N;jL !ª”ÆdFÁ’ì Wx û¹˜Ð$&‘•P¡a*¹3„§©Õ'xu!âCƒ-”tkL|19Ófº–’-ÅšîçtÞ;!ÈU\ ˜j&§©Wj?R·7;hj4·,qoÂï2DK•ú¨ÎF¢Ä—ŠiøJ{&à8ŽåK•40Áôñ%áè„tw—:Ny¸Ú¢5‰èŽKíœLxôÕæ‘ %aáôÑeAó° ÅàH4† š]ïåƒÕeæK«8…Úè…¯R•}eô®¬ôž$^<£G‡we13D®"èt5LºDT¡q1.›póÛï³ÐÙbòéÑíÇ>!þ©OÑLŽh¯íá}Êð#²‡÷™;»ÍB š8ËΛ[²õÎApÌ6¹« #XûÉS4×Ö”­y žà¾s›`f#aî/\Cž{žòàÊ>ù¶æ)6Rêãy\Öbó57¾þNÎÖÖ˜ª¬Xêæüĵšf+"sཨ¯DrjL žYã´Õ~É«oäW»œ>Óc2iÖž±s8NyT]ƒšò<Û]Ô¼VêJ†OuT¹¸˜2¼ìq" Ž#¦ק/uÄWN¿óΖèô1ZzÏ·hú’~ü-½åånzļk Ù¡ŽÌ+M;¢Q¬v|$>Ïq©Õg?-½­âw7¸·ø5}¾, ðóO<ÆKgVt~cNÔÕ ´â¸Õ¢.0”L}…ÜxµâÛ/OyóåJWÏXžxÊJ1Qn#Y#GŠ8Õ¥^“ ë-Ù>̈íLØÊ`Õ“é ¹F£Rï™.NªÎ"Aèµ”ŒòXRÛ$P öńԻj"0$ÁÓ~dÿ‰&ÓZ1Ó©Ø$ º¶ÀOþ•çù_þëïòÜjSî3§åíÍþñ«»ÿÜÜùþýÙò@¢UÑŸÓó|ÚµäšÍ5£ÍxI|Vh¼u$¥mÚ½ª'±Ø~KuÉßøÚ Ë_øÂW"þÄ';Úˆ­º K©Â¸òã‰B¸v>Ñëw ™f)?óâ<_y£Ï´øØóëGͰÿ" ÈbÇÒ eéG(òG˜É?î{ûhæÿoX@>Ê'ö/cù( Öš7‰ç;4WÔå%j…ÇÿõŸùs§pe5ë>˜õï© ¬ÎàËšáƒèçÜýÆ«ì^¿3DÂ8’t¾ËêS—8õɧ’ˆ¨™rtû–Ó\n}õâ&ϽtEÌxgCøÔgñ‹ËP•HYGý ’uøí‡’Z‹;Ÿ_gîÜx¥÷!÷_~ýë·xþsŸå…Ï–ùŽ’69¬„tpºïȃ §Ö9‘¬ÀÔ³e©® =´sjl ‹Zè~XJߪLˆ¦1Þ/°Î“–eHàk¦pã`OÃæ˜í{}¹±“QµSÍæS©­R«gê*UT è„u<åùöÏÅÑN§šF¥¤U“®Ú[vÂw—^Ó NNï<«vÒ•ïÕ'Üô¬Àý:gâU­ˆtM m ä…hAOYCíkžŠ—¥kC-ìDvæßÃMRmŸlÈ÷ùé[踡ý##ëBl Ú°‘´;ŽËW‡œ¹xBàJŽ_^Õ/_/ep¦Mxz5NõÎØÜ)JmvNI8 ÄœúÕ_Õù7ßâÁ‹çdT6i¿y¢‡Ï¶„O·ùÌ×î±x’FOÓˆJÅìP–5UQˆ¨ªÍrâi.ûQÈ+×û‹ 2_úüÖ&kÙ²Õƶæ•ôŽÍ1?ç[€ê/KÎTDª´|‹z™sl„%ûù±ÞM$°Xƒs^Íïy¢a›©GPkL*´ÃšVé5ËÛ.”j1Òl#E=îæMN‡Rü›×Ð?uEó_º+Åë:îq•N(åÿø:ÑïÜÆ¬ô´sþªˆ õft 5©xML vrª†P§"±”$¹êÑbWÌ´ÔÞýC©ç›Œ?yFëÐJòÞžNÖç¥XŸCœ§=Ó¾{LÕÏTb‘v^µŽ­äÍë„ö°$Î*5¹J¤q2Ë6åuư.9uÐãÔA‹yéã.vØûù/RôæÔŸœ`ÄPއ2¼õ£ æ°èD7CDÅ×¢ªNÉ"Ëó×ÔQH{ï’wðQSÃÎaÒ¡ÖRÊzŒfSŠjÈ$(™_¸ªQ4/‡Û_ea´MKÏ0ò1›­-Žæ,Wv¶Û‚Öª5ÕÒãdç)'hÀ£µ©^½÷„Ù}‰óMÀ‚ K`+šuIõ¾²)Z¡Á©–t~ô鳫ص¦©lþÍ}úÿðMV~n™•¿øõ@h¶JökáúÍ“ƒ>¯ì”£\Óºu^Ïí<”kÑÅLNJžùñ«zùs¥rž«Îªd¦Òª®Å¢û£šÿánŠŸfüåÏ//´1€ ²8§*àU‰…’ŠÐ´Fÿ’ÇÏi#35Ä{EÝ£½pÖH-Pë OÑ4dk’éõ÷Þ¹Ã/A³¦ÏWY¨bjJ=ŒœÐ;«aÔ‘áð-µµâÓ.>NÅŽûªZKFÂå^¢úìUyýŸ~šw›¿Åfãw4’HþÕ«ñÉ%šõ¡¶/^*IØ÷Iˆè&#^“\û¼üwŽ ·vøÙ?…ž{î2…gä`’ëW¾y_Ì|ÎÆÕ€¤V]z¼ýÛ|íÛüÐ&ºþÜ£®wt¤Emðå¾vü$ +Ýdªóɘûƒ¶t‚âŽJ°-Aã–ziˆ˜Àž¤,dV¶)^•iKª´¿çWA{g˜µg(•G¡5là8îwA+–7öÈ')[·OédÜc4*ä×mKŸºÉO±£qlÙåÄËC×ÂjM›ËNþö_ûM¾ÔŽô¥«KòWÿÎ|åµß¿€ô檵^KÿüŸ¿Ä…'Z<^vɪXj2æ‚M²¾HÑÐFûHL÷„â$U}¸!‘wÍ#ßêW,t>ýx“ºRÊZUňGq#Òˆ ï>ñŸüý]þýŸîêÓg#)ª€­~Éÿ뛜ødvý£, úGœ—?êàýÿµ Hð}¤ù>ìâï'ï|œÊ”ïø(?Ù÷ ÛèG\€?ð½ý¡ý¡DqÂø[·9Õ\Ã嵺©ò½ä´JE|hè<~FÃ(¢ñÜY¹R½y[w~ç-‚$’jškÿúîpëkߦ³¶¤g?ó,kÏ\!j5è[—ÀÆ„¨ÊM‘àîûLù5¸öIìc—) ¡³YÒJ{t¾¸‚f%Ùá@‰ ­Å:¯ —ÏÒÝXfòÇ?'tÞ[4ØÈ¢ä¨ì) GÀ½ÈáéãM#C+³€1ÔASµ*@J5{¶¤Å„­cC5“ ³3âÌœ‘‹ Ëzè •9S{âVCÞØ?Rj–RNÒ@\è‰ê*Ý8e-YÐy,×6r¹÷䫨è]Ûî°¸YöÝ= q§x/&‹tóäŠ|Ëí+Õ=bª59³!úrØž¤ÒøT´Â‚ij‚‘D”Iã!E9àÄu¥,-‡·ø­ÃÛ²9¸­Õ8IÕ" DZk³å8Ý5²ª òÒ™oFœ¸cyøý•7îó°È$j»ÖTŸp{KäÝMŒM—ÎI2·Á°ktõ«_‘ÕWÞ×é‘Ü4ZçCña AksZÓ>Êqq@OÆuâWãœÎQfS‰Ä²»0Ç«§ÖyuEΞ ù›rzêu,h!†á.ûöX>áãåe ±Þ±^¡óÕ+²ÄF8%>Ûy&÷Ç…t¦ùaEðªâ´lΑÍ/ÑdDÓ‚Ž-1.¬n騌¤L#êŽÕìT*Y œÈhw“I9¢þ‹OŸ~‚üW6)Þšjç_{\L/”éßzƒøåÛ:=½$Á¹sÒÓ@'’‹cV†%¿ûüCâKíL¼ì-wD+G{ÿDªÅƒOÓºHz}‡¢•H¹ÔFì$WÝRf¥˜…X¤ÍòF‰%o„j*¤{Rj’• $ "‘\kò|Jû8Ћn…ÇvÛbkͯ­Ðÿì'…Å[¯2Ù¼-’åLѱŸ`Ò ciå–¤D'ñìp]°¢Îë–¨Fľ”4p:ç=ª¨ª aa8ÑŠQT¨Ávä§Wø©3ýßÃ\þ£øm¢¬©Ÿkž¡8ð„ß‚·»™ˆnŒ{2|° ù(Ô¹s­)µ7:‰ÂWŽŽ^ÓÕ¨'ǦG§;¯ëëËüÂY­ë’ÃÝ÷åäè¾”Ó P#Þ`DÄ¥!®áz‰8кt„ÓZâÐj\z‰€Ô#S1šÔ*`âZ}¬â0`ˆ†%áRÊ…„é©ÃK¡f« œpêF•˜BEk ²bB¯u5dZLEm ÒêH«»ª6IQãSa¼U‡ÒyŸ8 IDAT§Š¨§©NSq2K_Ír'.ˆ¨ƒuÔ¢Nç4ìKYæR$!8LðHÝh£bT­Æj|SŽç»x1šNÇÒž ªª3»6Š‚¸ÈÕÔ"·8±39X_ f–¶Áêxr„ÓweuáªÖK§$<ì«æµTã>&‰Â6j¹Í4ñm±Ù”ã½wdaíi_ûa9âk0z¨m¹ÄúhM‚ì.£V ¯õæ8=ÉÚî-u‰Žï‘Üù¸J5M>õÓÛkD>]»@0÷¼jóYQ1HíT¼‡¿ñƒ7ߤ˜"Ggá¥3´ä,'6DG¥úoÐNTÌÎ M‚òíý=+sç8¬¶¸~Oùåß>ƒq…†U.§ÇCÖ67 êS¢÷3P™0-³Ï $0FÅ Þ«ô÷G<Ü<ÂUõÌ_O5~÷ý¿ø7{•Ç~æI=÷‰%æšVJ1H`ÄÕ^½W-Õ0¨+¬‰ƒèO4D$D0VT‚GU¼@Œhk†GP‘´Ö©tôms–ÛöôŒ>‰'rTÝ•*Aí»Å¦âf2Pìd€ñ*žãLËñÔú¹ùúU}¯ñ›r¿ýÛø" ëKziyÐå’¦V$°š—%±YOô†æäuKî|»$>êÏýÙˆÏüd[Æ®ËáQ¢5Cé,[‚v¬ê|Q0Ft<*e»¯²bŒŸaµñÍh"—æîéÑxEv'óD6“Qap¾Al-*•HXámS VkEáÎÛžfKäÜF“–ï±×T”GKÛ0ŒGÄ£¯¾þnZ[>gãT][Zœ£‡]¶oÒ[èÙ+»rý{5ÿø—‡zvEåOþxW›‰‘½TQÈëG쌗Úý~ê¢<+"ÿöû=¾òÚàR/Õ§.vå¯þ;mmWD\ÀéNȰVùîXigzná Y,ޤ®=v%3ÿ>58¹/éJFÐ cøéË @tª¿Cøƒ{F>j6×?$òÍÑQÓñ¢y~ðbÁ?lëû—aÁú8Ôý>¯ý‡¿ˆ1ªÞsíOþç^|N겚ôJ\(¢ª¢JÕ0¨õ¨Ôäɇ„­ëìiV?óÆZõUÍö7Þ M(ŽÇì}û:où7(9jxuQµ“‰^ºŒô:È»¯ߺK{`)ÚCJ–KóÔeÆÉ*šU¤Q‚xO‚ï&8A·É\·E5É)O&TQ€Dñjg˜G`¬Êȱßðê¾U¥#™a?/•º¯BÆÑÎÔc}@>œRúš·Š‡O)"&#’šE¦÷\+‚uª¶öb QàJ«Ç¿²ú=[²mÞåhxŠ‹ïñKÑ×iMD+ÍŘ‚׳œ½õŠØ‡Ú–eƒ¯…â`УZUH3`ÁÆ´§Š³ªYle¯£Ôa ‘mqA££Söî:™ë–Ú K4‹éÒo'ÔíU–«DLØmÿ…9¤nE8Mx}ó >ÿìwùÙŽê? æù_[ùsÅUž´ þö'o±²é­¹ ?…+ÿèiýÆS¬>v+_|•±†Üœoê´!\¿Ó¡Õϸt²ÉîÉ6óÉ A²®'f¥A3~‘I÷œï08Ü‘*ȨT5pH0q³#du†ºQ…† òµ'Éjm{h(š¡RÔJ†Ô‚Ã`b‚a¡Ñ`Š8O݉);1'—;ˆóÄGé~¡q¿S¨úR Šðxp% u<>!lÎᣤ3OÅj,‚/Õx‡§ êh©#•š‘XÔ 'ÎR‹ b¦‹§AU£É[b¦C‚l¬q‘‹Ô%>ÕÅM|R%- JÞhkÖìþ®CÎÒá€VÿãB­Ó& „y†7¨h@s˜‹Š*^€I¶¯û‡++Ï£ M‚ý#¥ª©ó 6lŠ%Ć1^*BMiçèÑö›Ì­?ÉÂÚ00¿‰¯¶™÷«ÔUJ–MquÆ0h¨od-/¨c½ßŸQÆÊ!Ý—¿JX†hyåyÔ48ZéP·S:7¶‰¯¿BŽr|vƒ§OëÃO^•é\—:“[âW8ÿ·Y™o*´Ö8zcžý7Kzçvø/§Ü¹Ù¡Sè ‡¬ínÓ>Î)£€ÕKaÐZfÜìzùÉ?Ùà?1.EÇ™GLÍp_u1iK¼š1tcäц¥ ÖÂÈjª0žÙ`Pbq,625>dR¥…$ÑXûã.±‰%µ «MvDE5Oå;ln¶øïþú+§-ÿî*œ™ó”¹WU3£TÅuåfVHë?BÔ«È$ªGqWýðé‘b#G{Qغ¹ÆÑ^‹K´¹¸Ég>ÝåG_ÚÐ4Q&S§®24¬arª%Oi‰ºH¨ö¦ôFÇë--–šð#ŸX癋 za£Ë‹O¬h@جÑxįê_ßnè™{=þòüwé6N¨¦Ë*K^hS-ç$r‡„§jcEUTådâ1x,Þ ÖxŠkZÌŒ)°¶˜°Ö³|ë–Ñÿâÿ8`soÂ×ÞÊ)*ý¾íÛ?àŒªc¶þ8óò÷ûùÇ)Lü¨¹ù™ÉÿÙßûX ÈÇ “|¶KþÂä'¤ó‡Ñµ~ë}¯q«Á굋4z-œ¯¨ÍŒ /-ÿª"^g6„Y²K‚TJÄ+>1R7¬¢N¬Nýð'ÐPO Ö?ó”YAœ•ê3È21QDr8DÀjmÓøœ”LJ.¢9µ˜íCFn‚ö§,®1 öKI]€}jƒ÷t_FýcBc Ò„îé5Â*€¼„Т™5 …4À¨ÐžñZ3l AòJ(j¤ªqègî Íjīԅ§´¥©ñ©áNuÌòP>оÝÌZ"M tÞ±Îãs¤ðÔ‹=qQÈÈ•¼SÝ“Ä7øî´`pŽ¬Ù‘"Žö¨¥¦Çå8‘sa›Ê‹¬Ù˜ÇM—£…ÛL}N!‹e,­Á:ê!†’ãi+¹<¨yï`½ƒ);dçèH4Xot9¿Ð’ÅVÍ'×Úh½HÜšÊôœ0 *Ï·Šë288Ík›Çl…5Õ‹bZ—£G°w(zï>5ñ‹Ë‰à%íÿÕïÉòÃÎ˱«ÉC k ãËmq%ØÛ¶º]†{*›"®V‘ƒf“qJ£,Y™Œy|Ÿ«û{¢UÈ$XaQ ÈVxȱ=áªáe"ŽÓ.À-Ó –éÚ>ÃòyNQCÓB ³â2£!YP5LV{¢qHw2¥3Ì)Ê”‘ïPã;B±K¾Ðܯ)w¶9o1ª{6EÿÒsh?£øõmâO¬?Ù“£ÿíÁË÷$²Ó¹9‰šmÒJE$ú ˜úø8ûÏEÌD˜t »!Ñ`$Ñ´¤šoJ=×@òJ´rháÓXÔá$'äÎæ¼Š‹,yP+4¦N’¼"ÄJ¢1YàUSâB8=ípqk‘V«'uûˆÁO\¡ñ”T;÷Éßzúð€XWŠ1i`ðd±á°P†Ð¢+ù3,ºS,Ë ›vÞeÔô4•ƒ~@Ò8£Íøšxß¡˜?ÅÀöèîgÄî·…IÊ`îÍ"ç—Þž“¿ôéülµÁWèó÷¹Å=Ç×l®Ÿ•@榆ڻϥÏ~S{wE^?ËÚÓè­ïÈò^ÅÃ6ëóS6 üÚ2_:›“•*“j‡Åd€ ,7Š&u¼$Ëíé¬3îîsd½LÊ‚zw—`T‰ =6Ì)¦ æ8“z–x%×@¬x¬@«ö¤ª8²p E©T!Ô­ˆ v˜¬$É ì0Ƶb|h(–SʹXâãòðºz+Dལ¨öñüh ®5'¶ÕA‘(N°¾šµÍ«Áã@½t¼Ã :,cµ’‰Å€Œ›= cZs˜º›±“A A6B&Átªââ7>4ž¨XÁ«Q"Þ|4ëX®ŒÅ7ÈÚ1^Œx+DENX† ]A«8`!XiTÈ  žX‚¤M6|"…T8ë £T:cÃÉö»4—Îu¯Êöü„zð€µ»SRTNÒHOÖäáÁE€tZì:Íñ\OŒÂÅ]må9âU6Þùát´ìײۊØý‘ϰÿÜ%¦sn|)¦ø‰²ôî§ß~_® Ž˜Û€íŸÿ”¸Ѐ­!7ß°™-¡wJNï±±ûô¤‰-ãkÏÓ~êW&,Ò–ú±¦ûÜ»¤/ø2‘Áþˆ¯ü½ïr÷ÞÕ…˜‹Ïoàíìù8Ë)QbùÌ3ó,w4²òß÷„wnÓ³57¿sW.=½¡çž\—Å•.kM†ãšÛƒLn¾ßǹÄŠÆ1gì³ð`È͇cq§¨ÂmĬŸ8Z¥ÊfW8‰[Ö´‚ˆ…¤C ãê=ž3Ipo²IÚyFê¹6ÅÖËÌ—mI½r×LlNÏ]£,SYÜØ¡3½È×wnÉnç}pIÄ;%æÚ4&0¦  ‰¬PfÜ|oÈîüšD¼UseÝóù/¦Rúšª¶Tõ ÞTl Ø;šr~ÃH(‚U•ú÷L'¬$C°*ŸÙ’FäÈuª“2–4*p4¥(Û4û(ð4ň‘)±4eûŽ#ŒàÔ¥ÙVqµ¢¨$Í EVóàæ2ó«Mâ¸&ÏNÈÊU‘V¤Ä2*ç?è|Dt–•QÅû„Ö|ÆågðþÝH¾üK–¿òW#~æÏ—äÛS²IŠCpµðò­cŽ­çÉgçÉ}Aç¤/fX°³ÐŸùÒ%¾°Ö“Ó§ºœ^îˆH‰HŽ10ߺǑlrsš³´¿(qá«ç3J?GÜŒ¤ÎQÉE ê#B÷ðQ¼™}ÿdæ©ão(ëˆÄ–bÄ!"D¡űäSË7¯Wò¾1â˯žpgwòûflýhšÓ©—î@Ãú~‡|„åêã„èÐPýÇTý.„þϾns¾ÇÚ“I{]~âA#¡>H4ÈP1Ø0ÂØZuÒG‰¹G •~@¼qØ©br7{]AܸÂ"K÷Ü´ª)ó@mV ­h3"Ú9Æ5Üé3 ËŠÜÄ+/hïh$ãý[LÞü6ÖYjÀ´M#WÜ€7¾ó EQ²~fSâóäVqUý»MZµ‚:˜<ò°›À=Þ+^EæçÞœ¢~Öµ‘Í8Ø|.¢3¢L(†ÐØG]eÁ&<ݘÓÛã½áˆ­ÙŠ­>ìÆRv Àݰà~~Õ€‰ÏgõÚÓ%Ò¹#®]y çûOKXô8Ž˜·BêtŪu-Wt{î-)šœdƒö‹ýÇI«žôP^ÛÚå$ÏØžèÎ0ÃyÅúH®-.éâÙ‘¤ó¼ çu¡jK3¼‡Å¡nMëÍ9y`¦|ÇïðöÑî$"îÒ"a`°Q€Ö%º¨Ü¸'ŒÆÐl¡Ë«zæLƒJJ¹“5ôÌ»×eáö>6XãáFS·z¦Vñ 1™F*oWr+YâÖƒC©¢D*&!ô^Ï?Ø–nYjS”ÑPe*ZøŽÔ²¤ j„Ûá-š6C}I§êjÃlÊXFå6Y ©‘{DSõIKòŽ0škS¦!ݲÒù­Hàòˆ×¢ìD”Kå\ÖÐÜsš9†ã]™ j9/"?zNõÇÎùåó¶tˆ.µáõ=–¿~€ŸŒ4oâ–Vé!amth2™§I‰$¥â𳝣Q¯‰©9n&Ž'$ÃL¥ŠŸÖzä¼àñª®™Š¬Úa&áþpF¹A­¡Š¬ÖJí!­”Vሽ%õ1ãij›f:¿#ríþ<î¢dÄîw(ÖÏ-Î1zçM¦›· Æ,˜P¡D%KB²&„>ÖKÅ9Ù°ë´dY•@úÅ{ÕÎæêªD¶ö#í¬¼ðÜ”@›ØEÈ{9áȱ4}†QøÕƒåÁÚ]ê­ ØúH×î†òU³ÅO7ÏògòSü:Ûú´¶%ÈÞ|â]í=~›ÎW>Ãýë,n<`Î{Ýñ Ò¸fêEŽkÃDc,Ö )SiÄÂêÒ7óm­N‘«Ò ËœGG\öŸX Ÿœ¨ +IzûèqIq³M5¡ÑÇ·½Nwæ¤q÷PãÃBBåpDc2¦¿±Áw.^@T1ÎëŽVNÇÒÓ ÿÛ÷¹›$¼ÿ£ ýìç1©ÅÔ;Z›L §_ßä¿òmâ¬àîú"ï}²Áp±E´Rse§&¹c ò’³wnÐ9ž@ÃgÎ2¼úâ3Ÿä…¥Û¯½Â·¾»É>sšâþ ºÖ Z(4Ò^hòSŸ:« =9{m™IX£*ž ð<^gÌKÍÑ!l é¸ 8Úëà«ïrë½.=w†'žÞÐ/ýð)yõŸÜfúæ€Ú{Œ±x&4'n5f·ò›GT --¥ŒçƆp†=åÄV¸Z.‡i{¾”ÕN΂*ï–›LMƒÆ)÷dšÔyšµj·Ì™3/0Ÿý¸LÎý†žï^–7_yœûö·”´”²‚Ï,r~®£¦8¤d´q–v§­ý|ùÚcb#žþ·šT¹rç5§OþÆÓiŽø¶z×@/…”ZH!µFĺ(gÁ³G÷l¼W U©E¨¨Q¤ê踞"¢ÚJ+©5T¯­ Ô"I_½1bÄh–G ‡!oóˆ0Ržûœ°´žSd:ó¢ï¼<Ç[ßœ“ ×.ð±÷f¿–e÷}ßç·ÖžÏ|Ǻ·êÖÐÕÙìn6ÙMŠ)‘¨!’XBlEFC@€ yòSþ€¼:d@; `"K¶e4%‘”É&©nv³ç®êïPw<ó°§µ~y8·º›©±˜ë¥Pçœ}îÖoú­N‹þé„ÁhÂx^ÑMU›+NfuÉÁȲ(ŒAs ÄOÛäËiM`)æ›Wwy쇦¤ÉšÚAƒyû@|û@M½-ù°©¥÷üÿü F2ùßÿöãd¯ÑÝ2Kb¦Ç•^ yüÙm ' N5‰ji¤N±H8³~:å¿TKk»ÖF+»!1¯-UÙ–@éÙRŽQg"R©Õ¹ Bé¼ÉA´‘„RW)»"þõ·îóíÛ%_ycÆ­eá±Ìð¾Ë,ä$ôÿï8 ÿA¯tµÃG~áÇPç)9^@ŠŠäÁx)>mc ÖZL`IbÊNƒ: A…tIÄ ŠóÿÏnR£Vð¡P5—§Ü5-‹§·P#ý9j >1³’2¯(“ˆ8îâ7Ÿe´û6Ù^š–qWÐQIs«ÇOþÄgÉO&ììl`F3îžðPUçϪ|*þû åèɲåßã6[ºŒ{X_Ç­­r9Hy¾}4LØh®ònºÏëš £L¢¥3‚xEœ¥¨j2ðË­§Ø°cf’sÿñ×е}ž}÷i%©¶˜éŒÁTñwvm¾2a5ßäMû*o¿ž°(Ó¹«éÄ Í0æ£[ë\í¶é…Íõ9Ç/3Ó—`|…ññ¡xÞáŒo0`\+"˜Î:âJ¢Ð.½ªz6€·n!£ušÒںȧ>¼É«7vÑ{cB°Æú) !ãnLÙ¥StéѱGÉ¢Ä9ÇVíxf0$ÊÔb8/hœq1Î Q­hS-‚("ðoFw™˜;µa 5*ºEHæ/bLɤ¸Ï¸˜á¦ÄCFÌ í0Ü ÉWÚ„êY) Vö”E“’Áu,³ë êF€Í•æCN9*X˜ŠæVÌäç®ãõYÒß¹Áüy…òñ+´å äÝc¿ñͳ1u¨Í&¶Ó%ö†À{æANní Ò\™4Ε†êÈ’, L1£9­H°÷¡ Ô²¨ða€kÄ ç¤UÁ†2 )¡öJV*íEMVLpZ-¨òš§ï¯ðÈÞ½KŸ¡¸0àt«bü‰G¨½2}åO)o½E€`Ÿ5†RÓØRd +ט>»ÊÎ 9Oî k£jŸqõ€²:E$ãBûV{9òvÁ¼€ngÂ…w8 ¦±J4X„»íߣ´%ÍQ¨s—Ã?Ηï&<ÿØ×ù…òÿ(ñGfŸÿ4z’ÿ3Ùã3ÃÏMÛ|¡5c²:ãÙŸX2±<f´r!ox.nä¼sÒ`;ZØ °DÎbrC' hôN¤3N&G´/ÏZ¬U!+‹-¦Ñ*w:gä2Æl>`®ÉÂ5¬éâ¶0¹2xë*Õ]’ùýRJxfˆ‹’l¨¸Ò“!_8*WQ%–* ñÞaBçdyI4ˆ(V3е„E ØÍ”xXÒ¼=%X8d®øà\9Ë*Õh=e±˜QMGT­¬‘%)6ˆÎ ýe£ñõÒ'hj¶Äâ¼e"–¡ p@ÑìA³·ôiRÉVïÑ,FÔ`æ34Œç¢\J'«'pŠwáRTKÍ ê• ˜åMNWV)«ôX1—)ŽÇ˜0#l÷À'”∃> iT†^¾É›+>V¹?Ç«Zò¥îëg3–t"ËpxHyåQ$ërøÊ‹¬¾Æ†þö:‡Û[¼¶s‘½ˆÌxÂÅMrψ´]SŒïç9)!Û7ðìo} A¹yy‹o<~¹‰Ð—rVV•Çãˆk‡s²³HTP=qÁ³Ÿbû­­ã.á3¦o}‹WûOhö,qTQݽBðÔ˸ތF+æg~ùL·Éîƒ9Y'c¥p:3êç$êiåÃEÎD=Þ†<ÝÎ9yy„$¢ø\˜F¼zóMvÿè>Y3f´;¤7.ð^©jHRK+6f e#!]”˜8ÄDe£ä^Óðø@yr·Z5‹¸…”«œÎßb»Ùãžs»:¥™í Æ0›ÞALÄÀT,¬°š[Ö‹gÙM^æs›X;ù1¾4¿= tžOí\à—ž¼L³ž¸>ìt/$Xsxÿ˜“Ó1ú¥-’Õ¯þfÍ¥5Ï'Ÿ¯˜—ÆÌ‹ÃI=äÉ v.,èÙ{%`ÌÃB °X*㩽û¥oízLËÏÅaEc°XÄÔˆÔÔÌ«ˆÓqF(‚pL³=ÁJ—Wþð1~ûwxî'V¹ödÌÑéÃÓ …ºIÄõNÍpj9‡ B¥†Ü-Uý𦠒ˆ4Uò:äþk5/| >ÿw„=]Pì÷¨võû¸Þnq™/|mÌg>q‰§>¼Nð•'3(=u`P:é˜f¶ •8®Q±¨)1‡»øiI\âR˜àmˆ#Ρ6¢Š¶ðb‰ë]μ%#" bJ{‰Tï‚«9›l°(3º &0L§«×üÎKÇü÷¿õ6ƒ•{Ÿdnd‰ZVåëßÁú¾)ÆSî¼ð a³ºs‰ K ¢Zi£âQ]ZtšÊaÇKï & ¢ÓÑyÂ^]\ÅÇ!RŸÃG²øÜ0`œA¡„ùÒ{ÄEB-ËlßÎðvéຠH‚™Uä±›t?FùøRNUEÉýBÅ™Â)PŸ`lýý‡Oò}&o:âûgÆ@íϬé¹{—cø}¾×¢~d‡Ú ^=³0$mwhOkªÚáÒ˜päÊßÚlñ‰ô1äÅmúo]çåÍ}úùWÙïà s9EjCGr^ð­áŒ7K1~/$ pR“»‰ ¹Ö]¥fÞã IDATg<½±É¥ND(%%BŽÂ¬‹¹óÃâ9Ôš?â>‚SGbªŠp‘C^"§}4‘‡28·îcú ¬&D¹àF÷øæk÷X”¼ˆgøõ 4Ž4óš|'¡^)×ÚeÁçï&Iíi¥)Qí ®8+JŽ3b š†8#„DµRƒ†]DÛLmÎ~pJ¢J…p`½2æÃôo“Wc¬@ÏÖ¼ YÊ} ­41ÝµÙœë£ np¿ZAÔa"ÇüJ“|=!˜;š»%­£9‹Å€Q}ˆ¹ÐüØeNÿþGq±!üúÓ¯Q\½Dçïóö!³ÿë ìÞˆ*(o®_’ÚU5˜l™¨±¤mŸ[b"€QC ¥ä$¥#)=Å…6ÓÍxTžªÓÀ'!AF4žˆPC‘-‹_+JéÌkÒ¬X†nA]U<³»Éµ£.<û ò§{œ6n3yä‹£”wÞevçV,¡.Ÿ5/°=u{•µôòS«ÜÛΗdÑq¸C­ÐËîp}£äh¤ ×?~›íç-û_‰ˆºÍ båuªøM¼…ÙmÌYAã1ÃÏVÛüV´ËÛ2ä!Ÿeƒ{Á”xg‹_:nòß|þO¸ó —^~”ÁµcÊço“U1ÖxÒÔ±çcroi˜Šú\âÌ«W 1‹ræ­ýtŽõë¤gè,b>:»Ì¼Ùï ÍÙ*e3ô–´5&ŒÖ61[ dm€ùä„j¼Exæñ_É §!ÜVÌÄ#(µó”ÓšÚyR´ÀjÉs²ûU;ÁÇ!u2ßJÉ×b’£Ùƒœ`æ0å2Úk)H¼Üã*7BÙxLÕhuºHl‰âÁ#&ÀˆÅ«CÏU•@k"udb¹LÅ00!X¨°@ðYû;4}ê ×ÁHcìlLtp B°‚ ûùb‰Åwàl„³‹¤I4’F…± \MÛl°·Ó"=re:!ÊÚ,²„“ú„ OìBt%å‰ÓÙ»»¼³ö§|$ûÏ7šãzŸ}óÇìÅ5\Êúb‚÷5ªÇ”ús?νÅ7Ißî³õî}.ìî±õ2gÓúi ;›ÄÆðô»wpo¾Ìäþ˜K·Ž¹z6 ¬jzm¾òÌÌâ˜v@o:£6JÛż àê%âg¯³Z­òè¿8$š—_»ÍÝ»ÿ†ãÛoákðIÊî‚m=o‹àËŠâdÌö#k´Båø}úóŠwÞØå­?¼KŒ*Þ˜÷ZýÐ--)1+«Š¯æj¯Åö‘ëd¢tÜ)½µ’‘q ô¶`uUù™_ΰk2ªàô@¹¶âØÚ(˜Žã¼o®d£Ù%RèÌ@?:‘@Í,‚×u0«à”ñÅÛ/mðC?cø¡Ÿ‰¹¿ÏƒÓQ ¬5àrÇ3ÍFBåâ°¦ô!µ7¬32S¤1ž¯ýñ_ýÒ?õÃ-Ú“.u³_;`±·Mv´ƒÝÜ%º°Çjq[„ÖÀÞ”‡K…­Í i\ "fI„qF‘ªÂûc‚0Æ$`íûÍÓó{Æ-TRæê¹ç{®Ø®PÉ?w,¦˜—­%olØãf¿âë7Où~÷öÓï™âø?(@þ]­§>ò679{ëgUNw}›F+ÅÅåN¯5ÊyR:ÂiùÞ]΋¥s+gÔ‚iO4‹ñFqÍ ßn Þ#NÁÄ/“þ Â…”*³öh΢0o†¸tIF›;¤òËÍeQ.Mš¼RgZ\ k«˜õï=iSEã-ç:||P~O&cO–ŸïË’äðŽN©ñâaЇ¯¨¸$"\['È_×h+£ì&¸,àæƒ)³³ c•\¼~6`V>ɾõ¼bþt)oê#¢:Âs€!•ö’S ‘ ˆÛžÒÔ\o¬óìÆ7c¶ê«¸B¨m‰š'ºàËóÁ¢âX·u]nè"È"§qÐGSt2A¼b$„²FFó÷Û a‚F¯žÀ* 赬ݻ=Ú +¤“‚ -ä—#6ŸYCºhýÏ¿Gwúó2yjðÞè ûÌþÕ.Õó;´þÞ˜· ÿñ·hÎÐÀSFÂbsiö°gÇX …,›’ÐA:®¨‚$\žVl±Àø‚NîH€ƒGVqI€)j\£¡EÊšhš/“:¶ÔvY|…fî°•ÃK@a*Â9<¹»Éå³UúŸ¾ÄüGbÜÚgcvç&ƒÿ-¦(±a¼ìh×.0Ä6Wº©¯^¥¸ž±ûü]¦­Ù;5+7L‚û”Åq²Fš®“ÄW@,ÓJ8Í»<{yÊ¢¬yáGš®<7älkN}ÜÂttÒ.N>É$½ÇñZN\E¼xùßòÌøC<3Ìø‰VƒOÕ›üßÑMþ©¾ËfÑãײc¾Ù^ð‹=>9ùâg¾ÅÅ·áôm¬JO‘Ù¯ê„d<ÄãØ×RàR±ÍioA1¼O4m±ê»„Ió\…¼[á§ ®pù8"Ür¿ý5Xû$«ñ¶û#캗¨çë¦ER¾õeÖ.[öå*“O­þá€ø•#ž¸q—ºuJÝnã`ç‰?x@pîYP[ð&öŒ°v°Ç†óôª’NU/ù{ƒœÊ=i‡Öê5z_[ݾÇ<,8‰F î¾L,ºm*צÜàFë.—¯ô)o]'X?%[M‰º)®ö,3~ÿŸ}ƒ·öbXÙ̈CyO6·öJ#XƤ²Ó`DÄ&ø³C´X@bŒ0ê´‡ѵU¶Ÿ^¥s%aº?¤”¥±©¨ ¤ Ñ À ,å0ó\…Œë›T¶ä‰ð)NÜ)Gõ)g׉Ë1'UŽ`p”„¾Å¥òÓ¸j…‹+¿ÇçÚ]¾øê“Ük~“Ýæ ôâˆÏ^Û¡ZÁíMÇi©¼úrDïâ «r®_<„K niÌéíšÅDi]7·˜Z©ƒŠÚåh­Ä2«s~Œai›žãwk\`aªCfÒð–P°~ȸlPÖ–f:!/Cœ ̹“‚©0¶@©æm*xû›'œìÖ|æW k«;ü³¸N”ôø¹_ht ÷wû<8£«ž†r2©¹?°Ôj‰CVð^H¤Æâ1‘Á«ã÷甓{þ‹¿Óæ‡>ÖÂÔ ò#‹öŽh^ÜGN·)Ž/cÖö¸rý„|TQNcŠILdÛSÂ9u4BêŒd˜‚]8¨:˱P°Ô_òOÀŠ£’³ÁÄÕL}‰GéA¸EQÌ‹!¾lAÕ¦.+ð¿ýâˆ_ûêm^}è+òƒõƒäß÷ÚþÐužxæI¦Ã1ýÅK¨Q’ ªØJ–ɾa@½’ Iˆ‹¡åózÙí5‚³K'MT §9>JSPU Ä+á¼F³ í{ev !A¾„M™Ò°rX²îsf­€Y;„ʱh”­\¡€Z¤öØ#´So÷0μ/Sñ=¯´"VµßM°B6VÐ.²(±µù³µ‡*>¶Ô—Ö`4ÆÏ' 5R8Ì`µbÇ5¶®Y<8b¦n)s7òèYˆF·k¸Yý)¦Ñ&ìlmyø›V=*åŸÜÔêi&m¶»ž*q!ï.æÜ¼{ȽEŸÄ§ìKÉ Ó§0Žû‡èýc ã;‹-ª L¡òçÖà%€Ï „j-> ‘VƒŒˆ®]¥AHëÅè¼ñ.Ù,E ì¦àT™=Ýáè3+T]Ãx eìH¼T'‚1‚:O]•$°L®,KÍÃÒ'ÔÁ:¡®2³ ŽlŸH…D•]£\t=šuÀ¨¸Å¢’ÚåO·Ž1œ˜õ̲fǬϕlÖáØw9uJâGT[!ƒ««xÒÚ+ÈNg¤ƒe0äøã£Ÿ}’é/~»?¡õob¾pÓiBñ£Óý¥«ˆ¯˜þÚ[4L‰Å1 Ó‹;Ô½MÖ§b/ˆ‰)dÎÌVµÐ;¦Y½4¹¼Ôx_Ñ*•ÖLï4™l6—wcåqÑ’‹Œç$³‹âKY¼_ò[ZyMXÖDàÔãæ Ù_áÒpùîãk¸•˜|tHùà“¯8°aŒ©jœ/©Úè­]äÑ‹]vÃ&ïn-˜]:¤qëÇ–»ž­o o ãM®Îwh„m*-qºì¼«6«Iʇ·&¼±'¼}CÙyºÏÚõ#Š-ú“®ûEÆóCÒzƒ“àþOv™]Ï5X!°B6ž¦ˆï Ÿ ŵ5ê.³¼`X µ)«'}x{JÝ5O=B¾vº²„_¿A‘çt-:_~À4,6&zÈ"vdÛM¶?úin­e ~ûMí¢;sŠ&${׃WØsïåCT-=·Ã¿JgµO¹Ò¦q­ÇS4È"à ßì³wRóŸ?g(êŠ_¿ãØ–8LÜÀÇ+hÿ  j<15wvOÙ=<á[=Aœ2l/auîdfΡÃBP+“Èq˜V4rÃãavšðõò]f®ä¨<â‚:V$cWXɸXý$iq‰»;¿ÇÓ;)gw>ËY²Ç½î—1ÎñÑhƒË>fïÎ ë½3n)_þbN£½Âßý‘.ªŽŠHÖÉò›/UøÜóS?\¡8$©ðÖq”XeƒMé1Ô #bXîÿÎ¥߃,RD”PCCkj5xQÀR”ðþ ‘!Ö@b#R“!áßÇHΤh3œÄ$F‰SC˜8vß]ã_ü¯’d–ÏÿJBÒvwõÇDV¸¾âÙh8Æp6Yºƒ$ÖaO¿là½Ðæ„VI†o~sÈ7¾6àW~¶ÁüãMúeHQ{´jàܬ£g˜a“`j1½’xý˜¼Ø`¡1ooM¹xñ„ å1Ì’¡ %sÇ  ÁÒ¾H "X<Šg&CRµ§Ò’–”¬…q‹œr6§šw8FcÏþVž°ürÂͽ?(@þ´† Øo+U"fΩÓ]iƒ÷˜i±Tˆ:7M#\ª¨D”]–v¶TÒhÉî.ã5 åf @¨Ua1ƒü,«T¦ 2 40L›B”×d•"A‚©*´ªñu€ó^J4>ŸFÔžú±&A¥ ÿéãB„ï,@$ŒP£h]"uŽ©ƒLH–3uoÜZém nå½·óºÂUí¾G*‡.&ˆ«À,ƒ¹Ü?ÁœŒ°¡%²ÌçÈôÕCñï¢=}?5„Scí*b<ïV¨œb1¨8 †Ïœ¥JNK—Sª‡‹ï˜¯A¯mRtRT!ÍÑÁ/>´ÓÄÄ ›²téØ6I3%üÒ¼ô"ªe»Í(FÞakOÕ É3Kà-GNh¼z›ÓÄFê‡bﺔ@¶Åˆ`ëåë  t0FØ3‡ ÌQ81žU—±1W&å-ÊzLb 2˼òÔò ‡“˜™²mÀÔ; |ÈmÆÌ/Eœ^Ú Ñ_œ.ˆÁà>ýOFœüô£ >³DÙo¾Mòå;Èúï ¿ø8ÝgWÛÇ”¯öéî)ea…E;evñ QÑ›ö‰–W9WÀÒ%¾¾ª€ì|²T.¡XçÖ§UQ§á²ÀBÔZL^fÞçŽ,O`kîÈòŠØˆª<§1ŠXYô˜<ü™éæÃ†/¿€]0) ‚ #ÝþÝͧØhV|üÆþr°1J¹ðvÁús„{?²§Bì2.¼Ô&\òg¼·Ô„ÌÊn&<±mxñ¦çÅ/Áå¿÷&I‘Â7vƒí׉ª”æ$fÔ)iÎbv¥Ïëƒ ®nZ~9¼À¯i“›2â茺~srÆÏJƒ_:éò›cÞúÄël~û 껫,ž¾‡Eý²ˆЯbÖÃ9þ|€é€  ]@lkÆã¼¡–Lªˆ¼Š(Â’ãæˆrå O½û8"# +Œ7¬ŒV鸀úô"Ýþ"\Èôd‡éñÎ70—‡Ä×G´;[tŸ«xP~›äÛ=änÌñËLjWbÆ]s‹kÕ1 ¹Dù5Áü”âw'¬µ,/NKúµãwO¯¯õgä¥Ãâ¡È—Ýî^÷ý¡=‚JE,5ªÊþ~µäJÄK8¢•a¾0„¤ê¨æÙ#=e}’ó 8`V8s#Q‡vÜ£å†ô?Ì¥ùÐ_‰æS¯pëuê· Ò=.Í„hÞ`±›óo^¿8ŒUªJ­ç¹OBÔ8ŠàQV£”Û»3ï{Z©°µUrj ?o‘IE᎚TbbÞóZôxV‚5qW‡Ç“I‡X5£e ®ËF]®}zÉç “YL/¬XÄ,0R#DŒÊ¹k‘ï/8Ü-ƒ{¯¯°ù–ÿObâÌòà`ÀÙpL­ÂF¦l4jަ0š×”.¤Ò€vT0÷!¥Z¦ÀŠ’4 ¼þí1?ûé”ÿTJfp±ÅZOQŰM[ Z»vO0<Œ÷›Ä1Yó>­#hNÚ¸2ÁÔKÉ~}X‘™¥ÈFF–RÌCšøU*B"ÉÙ29M¡Ú ˜/ .9<†×vCÞ=X7}Æ’ñæÛ«Tþá­%~£öëßKò]ýk¼öýü7þ<ýãïÇÄÿ›ÿÏ|—A½2<<Öt¯K9_`ƒ€F»KXUÈÙ`™z»‡I«4cTà,´$€ˆ¯ô¡[3 p¡,?'²ü›Å u ƒá2xË2©«Õ³·i7zÜoÌÕ¡zï€Ëk0](Æ@ˆì¨Ü؃8xxEþ"Mk(T™û%¯@^¾ÈùhG1j‰ À+ÕVeM©ýw}×òŸªêÊf—ðdÄÑKïFNYÛ–¸ÑÓ‹¾EWšD>ÐQ —š·ðï¼À¼„Ø6u¸³× îÏ}¢'ýç»(bC­› éî±:.k±Æ‚_r‰Šª\ºz ˜À¨±¯™× -Ãk´m›9 ݵG”8Œ:B:9øÙ>¥xYŽí(H4WVÆêtÈEWâë‹2„©ŽµX 8ÛX‘Y'%>QÚ·œÆgÇÔ­9‡?–qï|œú‰MïL%øÍ×µûÿÜ`6†ÃO_Õð¿zŽÎõ¦Ö/Ü£ú¬ÞîãëB+ ‹fÊìÒ5Õ¬Eg6#qg­ÚóôwÙŒ:U­ß¿ QíÉr§y'”ÉNQ¼¢Ö‚ˆÚiNPT*"(ªeˆ‚6óš,¯@…XCõu…:¸2ÛÑÖåm&WJÊÇ'?>¤ÿÒ¿U==#e‘‡÷„q›Î•ÏÑÙú;vÂnt·‡ÔuH4K¸øo*6ï–ê%àþß5ì}Ê/TLò‰î®wè$Ð@¬§¬c†å:Ýh¬Oïxú9zï–²zwNç£7ð¯_¢{ö Qú•Ó˜„IE£´ôƒŠß˜ ¹6±ú‘ÞUþAùÿuòUnÈ)Wò ýƒ|Á? OùGÅVFÿdu ug¢ƒ³÷û ¶3ÆkV7zïL›rZGºÍÈC¯µ‚ÚÒÎCšY@æjKOµ,×u™ôÀ{ÞíÙkKÄsñ‚K̓<ÑÛANgë®v’™¬½õCªó6ÏH›t‚ v<YFÒíjDZÖþÜÞÙ„¨X<¡ª_ 8€A´^êÆ‚§'ªi ¸|JË í(ÖBÁ¨jY }c©Ûm%z„ùxDv|ȨÓ_mò‘‘²1ïê›k¼Vò±|•ð$fñ¥ÚŸJÁTÔoñQ‚O®Ð›´èæï°7x‡õ¬ÅOêvãã"ÆêíÁKÜ Gœt[l6.³’w´µ™#N9ÒÓº ÿð¶4¯ìhïwß ½SžÞ¢µzÊųLÓ¼YÑH<g5&5˜(lj£ÒJ¬ÛÕ7Â5ZL;mL>f6šqÿ¿Bþ­7´YÎ1q®ÅQÅ‹§ÿ·¦-9ü“[Tº¶iXé¥|ã[wh„ó­®ÖYÈþÑŒþh¦vY7bEøâ·Nÿ!3‚¾Ï[Æ}Ÿ!(^ ¡‹tídŽz'£¬¥¸o=½ žî6z8‡½3ÖŽv¹AmwöÆMf4ú#½Ò‰&Ñ’a¹ÏVû2W‹ž&gw)Í?U;ÙÅ~eÁÉåA!´Om´„•‹`´Rï ¬„K[5?úÙP»—/Q›cÎðši%0ò…ÔµêôÓ3‚Þ”ÁÙªÞ®†%ªp¬·qÁ¦VËÉ¿žc Äbßëõ-g:ƒW]nËFš*e=†°ÀŠ#HÛa± LrªjbJ”*7Ú0Ê»{î„ þÖO®óÙ_J ÃÁƒgƒµVRt»Ys2WG‚÷µiD%idôlZ#™u„‘áä¸Ð_ÿõ\ê)ïçZ¤Íˆ)1bTj¨6RyA: õÄn!½\[!Å~“ÉbƒBW²—N´ŒÔc—SZ«ˆ‘ó=ÿršBk„¡6èûSRDBVŒêºŽ/Œg¡zŸS,*œ¢ðí”ýI¢ŸºxÂõöD¿²×‘Û¯œêqÿä=ŽÍy(úΤà+ C­ªê/•@—Z–þEyÌ_ãý¿i^þý~ÿÌUå{(IÓ¥/²#ªÔS…yË*ˆDsƒ9SLÖ• ´*ι(çŠÚœ«ªç0uxÄ‹†ÅΕàô\Çý\Ö7X@8RqíU'…$DƒeµFþY´åc¢U!êýo;ÁU¨sïM=´*ê\ÂK‚l€æ ôôtYL-C6•¯Xk…\i¶uÏäRŠc høÀÁ#Qzçbƒ<º.\é}'EÿòÏŸ>ä£,Iþï]s]¸ÎÝœŒ,£ž¼¿K|°ÎY;<£qÜg¯?$H…ðâc4·?ÄöD¤9)™Jν¬ÏbqHò/¿ÁêaN¬âš F Áî/(7cN~d1H$†<ÉèœMÙ8ˆÊ~åe©v,ªÎ3,®.fQj".ÀÆ e ¼¾C..8£}ã¥å"º G_N>/®QF â\,Oiye® ÙÚ IDAT; ë9EPK¹ž±¸’áKc¿dõ;˜hÊÉÆüü#Œä2­Ý)ÿéÛ$tÈüÞ‘ä[)åO^#øÅ‘¤Žê×_¥þÆ+·ú8—³°†*2,ÖÖ´\»(iQ³º˜áM„yˆó‘óѹ*îáy~…—æ‘A µ5D\h Vœ±P;±³œ¨vç‚ ‚³†Ð«4rGä ¡DØÒ1Ïh³ª­ŽW Š=AÞ?åìO¿ŒŽÆ„6¢ –JFÑ,'Ýx†ÞÅçYÓ#–¯n_ =ºˆ;:ÔÇoUòÈÇÑS1'?¿By±Äv¦Ä—毎d³ÉÖÉ6-é’é(-q*,æ m6Û}ý[O‰üËcÏßMùÑÿvŸò£÷Èÿè¶;Ïðîê—HËA5 VÆ1/¹)pò‘΂뾂Þ÷SYôb6/¶(Õ-Õ¿¿·*/^;àÖ'_—ǾðÄ·ÖȶǨQ¢Èc­ò ŽäC>D‚ê½Èê¸ Kb[S¸` ò5E,“qêi—¤}J#RÌÛÔÎ’XÇq¼ ”šY6âþ#/K>Zljc}ÑâeÑá%ÌÞ6¥u”§ é?^±èT´¶”ëCN'-yî©ÍqÁoOŸNk5–D ®…@D8ÑÁ”p’Se1>¨:1ãvD8*%>Í æŽhPQÖ*B` 97j«–:hURÙBÊÅœr2‘°×E#K–6 lø^Úg©ÁDx±xÐ\#Š­S“dÞ{¼r6& #Â("õž¶÷ B‡œ­®aðýSfnÈË—<{àåÊb‹77¦ìN&GûpåjC>ò‰wÜyg@háÄ‚»;@`5Õórâaîaø1ôj–÷ºIßsËDŒ[îÝÉôL¼‡ª‚Ï}¼Ë/ÿ”oÞQþø-Ź€°ÍA~‡é±Ð7=åNCÖl° ¾†Á!¤… T¥Ôû›×>·”£ŒÔNØÚ='¤¢¸b í B‹ÍÚŒµ«Ah`,<˜M¹»WàK‘­«sjŸ0ÍS¬Q oG¨ýNkR €“ïŒq*%òy(Íò,$¶§:Zdž€$Gƒ9bKªEÂÙ ËFfÈÒLër +ëÊç%CE8x0¤?áXƦ®' „»ýeC¶òÆ(aèäÁ4ÃKÀv[J89.ä_üË&ƒœOÿD‡¬±p!.9(UŠ1!¡ò6ð…ÙOñdõ5>}©»HPU¬´Î¨UË2:¿1Σˆ8‡ˆÒ÷Mt˜KC%ðÄ>’ ›é€zQ1X´*ÊJùÂ×…›‡¡<}uÆ'v†|rã„Õ¨àîÉ‚“,‘K«¬Ä3.­¶ùâë» ÕwäŒkk¤YJ”çlììpïø„ª®0"Ë{¶òxï8ôÏs7øö­µû+ç¾ß뽿®ï_”ÿê_2—þ››¿n ñœˆ±V¼s\ÿø³Ú»rI†7nÓ(¶Óж„d£ÜuynžöŠ´<¦WÊVÍb%ÃT>4KB[äA,¢hÙTñŒ n,ÀÌ ¢…Å×n6Áx£Fì’Vå=®ZŽ ,­3C0óØõÁ2«3¡êxŠžP­ÄøÔ"‹É‹÷“k÷A¨‘LJhQ æ»Ê{÷ð¢Ä‰Ñhí²\Ü|–æDpÃ3n¥Ç¸Õ™–ÕX®ÿÖ«t¾}ŒV4¤ÉÍgZÒw^[{s™|¤½T#óîÿeïÍ‚-»Îû¾ß·ÖÏ|ç{{žtƒ„8K"£Ù¢BÉvâÈ¥²K©r\ÎCœ‡¤Ê©¼¤’råÁ•—Tòâ¤W\VⲜHÖM¦DqA$@ ÑèÝ·‡Ûw:óÙãZ_öi œÊ*çA>O÷Þ½ïÚ笽ÏZßðÔÅ)yšÊÖ]¶_¹­&¢6x›À¿ÔXt¼Õ]«^K—BJ+.¹+#½mïKß˲;Ò›N(kOd›äCr»ªUØÂmÅÒ¯'ô†S¦ºÅ!!>ˆ¨6ŸmKg>&}Ý“<(™}¨Ö¿pVŽ^8†–Á«cNü£/}uÂ|¦On2ÿÏiûãÛ÷f2ÿ_¿©ÛŸ¹)a'ЙñFðÈ|µG±±Š!Èf˜Æ*KŒ¾.ÈŠ©úPEÔk™g"‘}g®©¦iê‰ ú–XVóìÙyFXTj—7¿J¬ ;©ˆJH‰1¥êl2•Ž 8Õ?ÏÁ¥è±seÁÑÿ5Œ©ñä±!že„ímºÛϱb† mÉõ{LÓ­sŸ$™}† {÷Õ¥!¯m†‚wlŽRġٹ©Ä,²‰>XïJ{¯G•Æ8j´žK¦¡îÍNËtÞ…¨âò•‡Üº^pëW7I?øî™¬_æ(½Í"ºO{0Z¯÷KÍ Ç®ÌË)—ƒu~¶>Íï»ù¹„#ám«_îglWuRò𙫜þúe¼tüÉûl­”r74¬÷Jní§ö¡ÌÂ}¾ðE8¿jK*Ù»»À…– «q&Ò*tâÊZíñN"ª~JÕ É×lîˆF­û ÂqM锥v†DñQñEA–=Ð,B²^ÔÞ‘$-m§A#ŽÐX°IF0* ªF¼„@¡&Æ“C)òL«+Òív1b5›M$IZœ BªAOGu‰2)3Ù•^(6Ù™v¸3°ldNWÊŽ,nçøkžèù.åW ´j<|ªn=Ik¾§ƒº”½Ñ—8rëkïãõdH–ÝemTPò€o­ìëNzžÇ6å„?O8r”6#øJèžQmýÜ|éw,ÅÈCZÑ$œ &¸ÑŒ’.N7©eÈ;æ(®‘éÁ7îSF¶éè;4´M÷ÛÕÝ5ž/þ*û„Ñó?},{·ç|ã ·ô•/Ýéq ¸ØªúV/ü­^´y÷v¥ˆZï0ú½÷vEqöíèÂaë¡ÚV ~Âóá'ͲÈw›ã…ê›ovä´D_®¾ì‰Óf.³u}ê¹¹xqF5©jÑ“†Ç®Øf…U§Æ;qµ£š:U1iŒ-|hnºR—–ÆÐÎhnKy0ÏØ}Í7°Ã:a1It˜§bŒÃ#à¶Ì*‰íJY=TƒˆÇѳ}Z®«ŽEnèr×[†¡6Ûr­†:(4mO˜-Öµ´ÄT¢Œ,$¨=»£5m‰•Éq¥×¿žaÄðñŸ9 Ü?f8:FÄ jt«£¤¡—ƒù®ÜhËÑJrê¸eg`‰É)|Í7_žèp&ÿÙßZã…g;,$Æ- â檂Äõf½Í¡†ò#Áh/…¿¨ñ‰”öñ.¶®Å›n…Y‚ÐT_‰H½LþT§Ò‘1}Ø®´R8ÓYà2‹ÉR âùÂÉtÞfV}ý¶Ê»VoLÚò©gøkOÜѺT™$¥NªPN'ž“O…|äñÇy|§ÍJ·¥ ÖäåSÒ&"Ä;[ë$­6Åp¨6 åÒ'²ÆUÊ?/œ[«øêµšéì€'Î8.l&ü‡ÿÍU>ù쀭•Pÿá¯Þ% Œ$±0™»?+†ýw> ÿNèVGCþ2¤÷ê¬ø^Þï»Æ ‚€ýäOpúÜIWÈ ë˜¢Â¡R–EØ¿cŠ|`q‘å-Ц©…`\QŽÌZ¬X£˜:µoÞz¼uäI*×4Uí¬GT¢…ƒ%І)ŽÆ“Àj)d;"UKñø@›v6G2a±x«#ñ÷Ö5äS•w΋~ûcÒÀ°šX_ð ¾²ñ"6há;Asm}!{÷ub $&xçÓ*:)xóL´(xG{ýÝ÷Fµx7<¬Ñz”0]N:¨¯¢Â»R|9E‘fƒŒ1Hܘj#¢ ÷‘GÂ|év m!{‡R$ïKº½ÙØ|†Ö^F;œQ^8dgmÈ'žÙì÷§Ü¾s@F>‘éVÈ(ò´¾6–r+fz©M JhT*õ¯ä‘¥ŒB1ž‡Ž ÞãÕ#ªah ¬`œu96ìRÙunÙW%hpejktDôå#&{fgAìþŸ!µ"ùW÷™|~“ß<µöµ–\ F OòíS¸þ¦‹ŒU_c°"²$jNYç¢bIJ(—ÅzGwîp±aøø&y/œÇI(6¯ˆ& ¢Ú‰HóÜÖ‘%*é¢&Ô‹0› q~ëýèÙ@¸¼ t˜ýÉo¢ã1a”H…§ˆ ÉtN7Xaõò¿Ooõ"µ²Û]¡¬¦(H<àìVÌÁð/þfɇ^¸Éå¿’áÿ·Ÿ¦ÚÿQ®žøud±ÀV0í”âå²~jfùX*üÕcò9û€…fœ0]n¥•ÜŠ+¾ÞˆžôÂޮܔøO~ˆÑk;¬œ»ÅƒVD¯UóÀznY#§¼Á%b¯Ö†®ZfKŸåSí ÅXÅž:ë!jçFJoˆd)Öh7dmãÁYÊÃŽÛ…¤;÷1Û‡¸2¥Ó±˜±2›æ„YD=ìH_Ï38yBƳ‚/½VP¸’t#`p²>3;î\Ÿðpo&ÓiÁü®GL(U"FaQ`òš áÒYŠ”ª ⣜¢T¢i%uC"Dêf­D½•VÕ|LB*e4“y8 ¤I‹VÚÁ«—8J‚`9OAS¥· i¥]&£¡><@½Òé÷ÄÆ!µxjWP.f’tœÖ¸£S™q·³V®0Ÿ—ìÛY¬thí Éï–èFˆI"T Z•h9Å%-Éì9êoÌè..ú*et7 ÷;Œ$–VVÒæ2JoòÊÊ1«å1mö¢}ªjJká©\xVDß§Œ~7nµ`U”þ ó5åX²~À(R¶ ¥–6sµH‘¿¥ ¥¥#:Ó~rEüaÎþÍ©i@kT3(,O·~Ž®¾.G×éú<õ‘ òLË‘h+åp0xd×ûý«–"Ò^L‰ËßT*äÛA.Æ9¢²À¨Ç‹P×°¾¢½Xþô[9uVã3G§c9:%‘Zž>?'D$ Ø?kùÐÇ 6Ô¸º’Í•C+Vœ DªÒ3W˜ªFœœGŒAƒX4hãÂÄ–âªõ1X+™ÂÁ°d6>úCg·…‡¥#mªcD’˜ûþˆ…æ’bÁ—¤¦EdyäßÕ€´–R%BnYj#5…ïÈQ¶rLjcŒˆˆ3Ê;ìÏû²a e^ËîÍuíyâýë¥c¶˜Ñé5û°/9ÕW&yÁZr5<‚¸ ©‹\¥m†¼Ü h§2O6¨tÐÜÏ8D½}”x4ó«9Æ:Á(Î9jSÆ2”>Άr¶“±ÆÕ륶5f6 åÖx iׂéÐ?Ùe¿òt´Å¿¼•³?›Šm?·ÌgBB³˜.h»—.¦²Ó‚=.QÔpz¶7rΞð¤ñ›Ïñþ‚úçésm¹½_ðÊ¿ò3'xõö‚ÿêß|»výýcRùsÆÌ?hLþƒtcþMcü÷ú™ä/’„þÑBú·òèt»ØÚ3ºþ&Ñú U¯^‘(ýŽ´±ê8|wଊq ! ESAˆCÕÐ(u'ćà­Ã…P‡®Aů’ „‹€¨ª©ê ßK‚ëI£¸âê£:™ ‹ã=lƒ¿{"+‰ÛH²„}gF*¼EýX²½ÐÀ.]›#Þp‚)ò¨wþ]çïœ{_Vàê†iO*MY¬Æçó·O—eÞÖ8ûmºÜÞ7>­Þ[CkUà뱡ŠÁØ %Ò„ÈuðUEuôoÊ sæÁ™m²ã7ñ»ûPUÔT¬uw8ß7­¨ûû\yzÎå+ëHú$ó?|ƒ¯ý“WX=íS§¯|êæ¥#ÒQŃYǵ,÷¨µ¸ iH…EAˆ„bŒ!jWSÕ5YU±jŒ†ÖFpUCžW£à#&Ãá±*¬ûŽvóJ5VšÂamCJíá’Vb¶n?Àg†Ã`‹P Z©88—ÒžMÜšakîþ½ö~aG_~(—þǯ3xyN~·æÀϘ}tìG."Ï$…ágî1}ñs÷÷91›²[QˆøŠ<´Ì·¶pƒ ´ªµ›gÒª+ÄF À[^)Õp^áÚ1‹µÆ8DU… ð8ðÔi„ m#Oí<á"'*ëÆT ¨Ã¦Òž–XÖäyF‘F´Î]æp§KçÔ íHví:ÕlB`‚F":2Ä‹œ~¼Åêã…öà"u>ä•è&0HvxX¬¿v•¯ÞÖ›[²»NKŠá06l^ˆˆ÷ÛèÊŒú¤gTW\;5æÌÃ1ic]¹|v-i§Ò*w’ {œÛ^arpÈýÏ*§>}DÿÒ]¦·N±²8ÏAç[ ޢܓ§°knò!ð}>Yïè×;ò»á}šZ|¶¿ÐsU kY̰½àÞ /³úÚEö¾ôÞ¥›8ªÔÑJ=wç}2Jlè¨X  jK=ïs?,É|Ô$¢$qI€i „bx Ïé· ª2&WK;ªÁ5÷@ë6ˆâ­§ðžÚ…äÃ&Ý’0H„ÖÚ‘MqÛHŒ¡s´Åì®åðŽ!µ›ÜFØîS\¼\‚¿O.½õЧV[<ÙÊô[£‰\{1Çß\Lk¼ÆQ(8ç( BØŠ(×SŠ­ÅN 3¯ˆK⃠SxªZ±µ¢VD°¾)+Gj‰\ý©ÕS• œE–3ŸŒð¨ö£ŽÄALe<´[] 5Ê`e@ÆÃ!ÇGÇyAwÐ#‰¼÷„IᆶÂ$e‘eܪÛG]&킯¬<àÉq‹S‡1š Ò2ˆ±ø¸…š-æ*6”zs€­bÂÉrx§Ö…û3f’jäCiU¾Rœ9†hÆ´ž–V´¥B˜ÿ©0û¢åJ^èºSñLƒ€»Û Œ¬Ã,j¶\$Ó³ˆÚO®Ð{~ød›ÁìèüåqÿÝWµt*à ²nD‘|Å‹´[C7fd¥r¼µÉmilgìwÞê;öœw¼ŠÞŠ>ÂÔ~ò¢u-íù A1YA0ñp¯àŸþ÷¨ª†9‘-àé§Ûüƒÿâ2ê+²²D² ¥¦׬ž5 BÔ“{a´Õ¸JLâa]-Û´µ©MŒ40`B¶l$(k<•ñ—÷¯)“eçG”}“pc–¢Bè,°`в7OñxD ±i‘Ú.Î;18U6ÖSÎëC mˆÇxKY·´kšìaN„pw¾FZ I¬TÒ# Çš¶½…çáþ!^´O^XVS¡¬KF ÷EmQ~\ò oSiÌ©n@èÌÊš‡÷fúéåcê3gò¡‚E)òŠY IB·SSÄÛLmñŠ­æDŘ š5»¸s¨QÕ¸|ÍÌt+Df=†cKå:ìÝ›rûÚÁsõÕ`ô?þ; “"®°\¿føÃ¯ZfÂÊNÄê¯ó‘ˆBnÍN³_wîÃQMå¼tì(½0ÍU©têœÞºÁuÝhyyö‚bª„Óë—OE è/¦QÐÇ´T꣘µVFž{䄯ð‘+†óHûŽüïÿeŸ•õ€›ÿìÍïÆ ù·?ÿ H¡§‚õÿÇ«¬*>û{¿OocÞÎ/lcW»¸ª~oI§6š{Ä [ª¬ŠÍJX4§š|©že„º¢6@Rtj\à©,ÔŠ—ßZ*O•:›5UŠéÍæˆ7ØQE‰ñ©k‘Ð~Ÿ÷êñ÷ÿ4ž·ôðŸ·Úi ¹–t8ñM×ÅÍ1ó5ŽgùþÆŠGëw×ÅD…:×ZBµ–ïK“[\6~××H6ýrW°KXÇDUB,m<5õá~oßh?ñ¶7 È¨oßÃxƒe½½Ãfç)fÔ<÷øœËOylg•êð)xù6/þ·¿ÁÝÑ!æÔYÖ¯VÜy¶Í(tœ½6¥ZpÝ`é–¬`ê(&˜ç´ƨ>ËmšÊ–*£ZYU%–fþ³*E¥ wš9ÅPKMW»˜jB¡žÈ4 H!m*cµC‹„c:íÅ"ì¼fåæ Y@nÂñ€µ/ Wþû¯aoϸ+³í„êÉmÊ_~[§÷Ûo0üâã…pîÁG»qL¿½Âtº åÉ‹hÍÄEÎ<ÏXéˤ$ËçøENÅÌúÂl5¥=Íߊ+‚¥2YÕŽp¡iÌõ´¦E£¢4êiul‰sOXy‰ òdqÈÚÙFÖRØìP¼ò ûÓTÞ²ØÎæô¢-}Фž.CŽ7oð•Å+$Æpþé}N~q/½Îá…Óì}à Áâ*:£² ‹©§#A?$¼Páv ¯ž:¢5iqe”Qu ÎD ¹vè¯Ñu÷i08“òÅÏÃ냊KÏÞ`m÷ ÓÉSt^ÇÔÝa@P¼Ÿñ;G¿8ˆ8©‡üB}‚? Ø÷Î-¾8È8œ„ a±é6ûϼNòÙç)ÿð ÖÿæUöm@'É;Ç¿Ž Fµ‚z!Žëƒ:&ZrŽ ¦Á±8·4ÞTA³.‘qÌRŠÆÑ±õ[• Apñ¨l¾Êl7¥ÒN7÷KVë’¾Y%ëï²¶ÙÂû‚ë/±¶ùÐåSWÈkCؾȫwæ„¶`½7¥eÆì¬‡?=ãÖ~›äÀÂ+#ŠÛ3Ç9aÅ!EáðEIx§$Kêv‚´Bæg:+¶òDÂ`\bJsG­ ¡Paš¸P¤Y?m³nWA“™TÓ)ÞM©RE–,á’0¡Ûí†k›ŒGCŽȲÛgIÒaÜÂÕab‰OÚistpÈõü^Nr¦>M}ì¸sj̤séNJ˜'øH1ÆàøYvë Ì ×Nñöf6$xiÌi7Gd„"±l™ÕT÷&|{·Á/NØ3pÀÔ.Úe"°õX {Ç@-¬þäIZ?½‚C|¦Er¾ƒŸ8̺Ð>Óá±ÿä)زd’2[L¹ö›/ÓþúGH?: Þ²Öoó¹“û˜éœÐjµQÃ[î› üRÞUøUæE7Ç1„ßqŽ·†ñ`…R,'ûsÞ· • µ÷¨D EáØ:Ù£ŒzK¢IxÄÕÔÅŒºlŠ$è¢Ùã‚€€qÍ9ˆÅÛµ1Þ&¸ I °‘QÅ8w]œï‚m„Q–#†Õœlaxß¹œ“„kYJ­¡„Ø…´Â)UôÃÉbcuD’’JM (Ç㜵µ„Ó§:ÌeHí—}°kZ⫤¶Ed"ÔL ‚)3—”m« )o¼´àὟøù ¤]Ãý)½^",òoר·8o(|@?.(±,\@'’À3›äìÞ͸¼SóÂ3}á–ë^0ªäŒëM"Ú«!Uà Ë Q~LXMðÆàÁ'e#,Ð*ÉºŠ¯×0~ƒ»û f{Êîõ×^½ÁÁÂׯΈãŸÿÅ“|üǺt×ùÂÓ®*ò‰rÜåÒ¹€ÓWZ<Õ[À®ã‡kìfWfd‹ŠÃÚ2?Q%ÂÈpv]HBÃJÔácïKHl@'€Í5Cd ¥zr<•7ø²ÂGË–lÅVjâº$¥Ö€Q>à0 ¨ˆH‚˜(^}sƯ~ü–àæ˜„ü¥VÁúKóRõŒF#Zåô§þ=jïñ¾nĦÞ#Úø·ƒëG:Õªú®ž›©ürñÅ€óJÚYÇ@^¡ûÍXY†N&`;óØ…kd(1¸Ô6ÿß^2 tþg#ìä{²ú3!š™·z#’•È4[þOÓð¡GÇÕü€ß$y÷/6›ëwu[·è¨9ϵÀGà Á†¸ºzW3Óá%¥-=Ô;"×%’6Öä²`þðòpD°¾Irå)4ˆï^Ew±ÞPQØAë g.ºçŽY+7^pûµ«<¼ó›˜/~™ÉV»mâ7kî?¿Âk?¾Áú¿ºC4®˜¼¿ÇüdŠE±F©'uíá”í7`òª1~D1Åø)KVŒ›FNÔz%‚ÜÆXNñfx‡±L‰4 òÝr¹ IDAT!Iå¨}#1j2èPK tº!›<÷ë-ŠŽ§8S¬†$ý–’ûÌ:5'þùUVªjÖåõ(cÿtHôËÏ~ðùQÍú?~ ÷Õ»ìÑâl6åò¨`h;ÌÂ)â Æ‹CLYÁÖ)4i£‹‚VUaæS¢b[¬ªGq8õ¨w˜¥zƒ|Û#Ó]T wzL·»ˆóx"xJ”déÉà­P†qV.M.CÆ:&<ü†ãÎÍû¼ðµ»tF¯}èY&=CûaÊ¢ú å<ÃO,Óýˆöº%¡¼9Ç^Ï(†%w®ˆ¬ÅX¡®*6!Nàî!Q?¢^oQuÊnˆñJ8©ˆ†%>âÙT¨•eàÄ[þÖ .¿d€yo[)u½@2 2f‹ ê mµiµ[lŸ<Éd4fïî-:ÝU6¶OÅ}êºDµÆ5kë«€çÎxŸ¨Œ9§;”ÝÕÔtybWˆ4j®©ŠÚ…øƒ ÚgÛl~bÛ²hÕ¥…†T,µ²°Jx:@g¹,×Ö¢maûòú÷k¢­„­_Ù!x>'¸¯T/e˜ç"ê?Êÿ3'È:tÿa‡"¾•s|7Çå`B‡z%ŽΈ²voF>/ B‹‰=ü’¨ïXÿ0Šž¸x›ËØÈ±>êŽ7ž*X¤mÆ Ïó^áïÿòsµoH±•’ç#–ÊÙF"%ì6"ïP›6J.¾F´D|…-͵lŒ‹Úxã‚VSLS/ Ñ©qÞRû5œÄ„FدìU¬§Ê­‰°»/D]ÁŠ6à*[$ îçmj R…P-ý G¼tuŸ×^?b4-¸pqÐHG—=ê=δ—Ì!²ð ksœ·Y70L‡5‹YEÜi6¡Ó- Be6™!•­éõ†Ü´Âš4¬y˜µQ1¬wB\¹ (jÂ*çì¹ˆÒÆÔD<â§h`Èâ„°ÅoB‚jNšß#(§Ôq‹¢5 ŒÖÑÈãÏ|ƒ@æÈlÅd¯|¦&ޏöÍ!×®NQUö÷J.=ÞåÓýkëÂÏþœ#‰L"bn gü£?ø×ßHø¥?Í…vÂ×®Nøæ¡çæ°ÆMX„ Õ"ÇG?üÌ€­%Axþ|Äz7 T!Š¡2PæØ/=ƒ–¤Ä~8§dĶĠÔÄ u«žÊEÌéài„dT™•0îñwîy¶×oò;_z“ɬüwÆ{H@ô{„ßMBë½Hèêwã%®¯kó=Æ/RfoK@¯¶{¬k@ã­Š6~æÝ×z¾ô&4âmCžRW¡F¤œu6ÔEàÄ)¾m¥SqÉR|Å{¨QæsühU%še˜ZUT3Á”`*¨ÛFªn³)úˆF6˜¨%-›~oLÞRhéÛIçoýЩß6_ºÌ<\…/æê£Ê€4T!£"ïÈÒ¾ý~èw~W)ê¥ „¼é½­¶¸¼3^|$êC@3È2ÞfÑ‹Z èšM‰¥§¡¤¢Æ£x­´`¦‡ÔûÈñDÛ;>sEÔ$,v¯jâ°È ½ u{å"—¶„K­¡¸þM=|}Ì-ç ‡ÂÑX åø¹ôæmé_›ëíô¨†sº·r4nL84hÒNK eÚR­:_z‘TE„Vá—æƒÎU$N±VuŠ´ÌB£VŒ!G#-ìñÒ¦«ÂQ¸…+…iK%¡†}dm†î»ˆ¬'ä»8<½WÆ´¦a1—BîêÜ{aýØQyÇÕõPæ1¢_Àlv¨ï.ÿËD_y²ÉYëõ±ÃœcIØ ¦ o ‹FO¼-+‰ÊŠV6g.V]»/‰ŸKYæšs±b5T»LÔK¬/i7‹M…NvRö.®¡^—(,œ¦YÕìÚMÅSâÂiœ;¡ö•šõmd}MòN¡­vG:¯¾Îlo—E+U¬È4µÚd´h±òħ鮖¾»OmB^ûðë:Þ.9§RÝ)µ÷{­{9Ãg¶™¬¬a†3 V/“`¨¯],(FÓ}'ýv¤á<¦~¢Ä½âå^9Õ/Ÿ=ævdପ­1Z“-²Aÿ!›'s>ý ¿ökÊ7þ¯œ+»…í?&ÉÑóÜ|A'É‚2 ›cÏïíÖ|ú$œ`UÊÕüq¸'c?Õ1©¶q¬ +Ó ÜåwN~Ž£÷ÝE3#‘z¬-g}jðB8áq)¤ðV§^9•ÅzƵd¡³¼-ó*Šª‰ánÕGcÐÚ{Y-åLµ>lbñRáM­jK1F5óBÓSÌ!ìïR¹áÁIFZp0?êË,mÛPìņû™uí$ÎTfopå© Ó"àx¼ÆhÖçxÑQ;Z“¨Ðª3®ߗö…H¿¸.IÅÍë}}ý›‡2›TSœ:}üâšDÝDß¼?¤x0‘¼ãz‰ú^(ÅZ¢j…b=Á浈‡øa¦á¼B¼ŠVª­Q©ATëfñ²¡BèÀy¥œT‚ÎfòbN·×%jªZe>=Ò²œÒë¯Ò¬cƒ®x_aâ–nläHÞäñmõÎ.¶eP$Ú==o³‘oIàZÆ*ª5J£¢uÙðèB«U² ~Að~MV¸Ú±of29PÔ•š^‰9ù+§q…Ƕl7žB¿‘Ü£2VÕ ®h>³¹ tÇ0)ÿ‡ Eg©"rÏýíŽRÔRÿç3t·Æ–×§¯êâô‚üvÅùd(½÷ßT7ka½ÁAºí!ŠUóÌ⪆“‚ĈXU5ºÔEUƒR;UÕ¥:–6­e“:¦(Ô â ¹÷å)ÿóñX½WŒ²E-Ï<¿ÎÇ~vE ¼Ô‹wm ©C»ÜlB ñNšÆŒ Õ›h¹eUËk[ŠR!y¬â bøD©Š¶ZµLÜU/O¶¶µŒxÓíñUíÊ8Št%lŠ0b5¦&²žýù¡4Ç*S_éNhå¥Wöõà(#j|ÄÞeT¡ïàîWÞÒJæ¬Ä¢®Z‘ȨNª6û“‰œbâP#íŠs#Ëd:ת2ôúŽ¢°2Ï#5¢ÒKKu EÝ(ãEAÍaÙbT†œÛŒe½êÑ¡ç<ïªM¯ã©œªˆ6Y U+¡ŽCÂÀ‚Ѝsšd÷jª8¦lŸÀ¥+qê3&×UŽ.ðåßšr÷æ}°;‘£ƒL{ƒX’4Ô÷?Û“|h ë)/ŒîS—‡’Íž€ú ½íXÿøúœìXùŸþî ™¹Zÿ—¯Näêq©…÷ Ú §V­|ð‰U=ÙµòØFÈ mT=”^e×ZU&N)XT¨Ä¦Ö~¸ÀЧe‹e%̵ÍBÛê|@®‰ª¢ ¶¡í?Š]<`œð“9ËG>zŠÿÎ>“Yùýâço?¦ï±¤û^äo¿Ÿìî{SÞ ïçóâyþ¼$tù3êíòç “Ë{üû÷ó=) a(W.rö'>ÂNoƒ<ω¬Á[—„¨1¼Sq cåQMó^¡,¨«¹³{Ðí¢«-œ-Eiø¾ mmjµƒY.¨¢e¡þøÑ%“®¨0• Æb‹Æë«Ž¡NQBa€ØƒÁD-1~<”µ*ÿ¶îá·Ï]ئ¾ûêbyTÉVñ. ©’¥8ñ·%-ïĽëZÍbUk&YkLÝip£îå;àYªh+N€,Y 0[ eiLHKR×%4-¼«dQ7Õ/IágÈñŒ`N²s†øÉg„4erïÆË•‹{¼x¯ƒ·gZ«òãÁœèwÿã½9“ã¹ÌÖ®^<‰t7¸ro,åjm¯Ñ»=ãµOíÈÌ×lÿþCŒ‚_ >ÝCCÔÒÞOÐNKæñ_V„aH/DÔ"c©« ïÎ{+XkT*—RÖmiÓÚèQ·`©£¢”zµ] E"'I˜0â è©€ÚB÷Úœtdˆìü.C)$õÐ/”¡À›k†á_;'ñ_}?ÕÜü‹kt>wŒŠº£leŽíy-Ç2D„¾"s9Æ{Œµd[Û8k1ã9©«‘"' "I|M×W¢Txï¥ö5bTœºwU4¤ö¸Xdï…³Ìû)‘*µ Á¢U5F¨"KX©„µ't–E¬²zâYÖN]¢è”²rõ ºŸýcîu eÉ´`+'a^x’¸wŠ–c¢Œ7ž¿C±zO>|{Æ©i—7Dnxîžì_¿Íƃ‹z}Ö“ ®°ÝÄ«ëäpÇ9Ã[ á"íEŒ:ÜssüïrëiOk+åƒ/–¤Š·¥V.•Ã|›¸µÀÞ³õxÀÅ'„W¿™pœgŒ/ÿ ÑW>É•½Ÿ“WOü:³ð/–h \Ýóüßw ý.‰üTyŠÿ×îòÉ®$a¤b@\'ô‹ugq'L\ÆÚ×ÎuJN]™à»*·v#ö†)[2ãIëYx‘¼†Ê;LÖ%‰*™6zv("°" +æUªb¼¡Z 0ˆ7 D÷Av°„€Õï¦Æ—J¸¤w¥éì³5X櫌÷¶qAÁÈ-d”µi=µ*Zx~-²h/"¼ØÖ#ZÑœ(tlÄs¦'T߬Y< U ¬ H"ÃJ;¢È ™Í3z-h%á­¨ ^ðA@…TIühw—W{¡ÝĵWç#¦³wv§ìí'|æÿÉw™Ï3ªª–'Ÿ^åÒã}ùÐG7xúÙ¶ÄÑ„µõLêüùü‚KÖÁ´ Ò#˳üê}Žs§JþÉg ùòe³‡\^·ôR#?ñtŸµú‰‘0†¬€aáe±%zQQ…È:ú¦&4NÁ+^ìÚ²ð-fÚ%×õ‚#Q%hŒŽ›UT!À""bÅ-Ÿ°Òx>ÿͲ„Ìýƒp5þ,õ©ïÕ,øAexúŸ7ÎÿËÕÙ¼pV?ú+¿„Ý^Á.ÐÙŒ5¢¾¨É³ËàIˆ"]®RøÐ¨Oš … +\èTÓÍF-ʨwª³š/»ŠÎ*¡v¨«ñ³‰R7né¦V‚…*hdZU]V‘ 0„a¢aˆIÛ¼eÿjÀ­D¢Pƒ;×hÞŠykŠÄ+æ¨TÂ’X÷–Ã[³÷]Yo¯€A´Ì‚ó[”q#q؂ёƒ³ûj8ÅwQ.ÓÖÓå)Ötƒ‚P­‚œaz@tÜáñõS¬•õ¿ýUF?<Òí­džk.a3Zˆ±µ 0ŠtrK¿cu”R»€ÒjDY‹3jgEAko%0ÄZIïçX³è jT)ÅÚZÕÀ±˜IÇSL6h­Þ£Žç´SÃŽ Àr£uOÝí“rtϨ[pµR>Ö}²«÷½ç UM\0žVTtÆšu†rw´¼J{¸)õÞè”ÍsÖÚcmµJi·§\ù±ÖÿÇÞ›>Ùvç}¿w­µ§3÷p»ï<÷b&’à ŠÔ`RS”²d'ql«â¨R•ª|JUÊ_’*Wå/p%®|ˆãTRvì8U‘e™±eI”IJ θ¸¸óÐsŸ>ã×zóa÷ ˜à Ê7«¿uŸsúœÞ½÷^ë}ßçù=\zæˆéZ÷yxó@ï½ùõ^*mŒPcu^Ö²\ê ÏÁQA”X‰’ˆf¨wÂòlWÖ¨•ä°ÐîÖ7­UÐN¸Þ ¦$Ä!΋ڠD*#Ô 4¨¸€]Ì2x©«ZºÝ.ýÁPë¦cbÖÖ6´*¦Ü¨îIn 6ݺnèé>—K]-G„°ªâ¤½÷4#úe¸¢íÏŽ-–TH ¤]íÙþaÛ••%ä8“G7ý ¨o/L¯b £Ì¤‚X‘à!jsoÕyòß›ë´K¯×cT¯ó°7fÜi´gâ §y]"Þòzu9ĨA5ÐÉR9¸2àöø:ËûèV]R¬Æ<ù©|/°óÎBvWzº“Ƹ ÒµB(–:+~ë—z:ˆ…ÅÄã3‘ÜýÎÍevØðø“}ýëÿÕE6O&rãÚŒ×^9Pk¥ôµœ¿œq8.uÐK¤ßj‘š:´^Ì÷võ*F ñ.¿þ]½S°‰tMª¤IÒ«uV¼ýý…¤ö"ÎwµÒ’H,¥¼y4Ö/|±æÄÆ~á‚””¦ÍrÇŽNR°ª`é XcÈ\*ÝiÆ¢ún>Þ»ŸO¿K³‹sÓ.ÿÞ;𯩕 U½¦ûy "è$CmšRæÓJã¤OÔ9O]8úÖHmU½ªøÊh];œ ``¿ì .¬9"'²8WÁË0Sbמm*V«N‚"‚•w“ Û1Ò¢ Õ¢$¿³ËÞÃo½y‡{Êw^))— ƒQ&iæù™Ÿ;Í©3]}æC9}Öª5ûÛmmÊ2?\¶ó¡¸ƒïŒµ"æÏ`iÒ?Oå„í=‘+§#ý›ŸLd³ïô… V2cÔZ¡” St™ V‚Z D&HוŠ"‰mè»%A¶Œ±H'¡‡ÃB{4Ç…©"‚&D(*V¬* Ê£ÉFƒ+$±å+ß»Ïßþ»_áhVòcöÏ1yŸä§ #üaÓý _÷Ó`Á>è½~ØÁ‘SÌP,svÞx[ämG¨M¦K©SGcD¢8ÒÞÆ¨ žñŠ’Z¥¥à\›FާAFÅ‹ÍL™ã)Å—GÚ4Kd¯õÕ¦%ET-æ:š‹ªmMÐ!B„øè‘óÚˆ$b’u1qOÕ‚U45hÇ¡NgЪ„‡Gb¢— Põ4ÍüX1v¼BM+ÁE°Òÿ)ð^ `àß„ú.ªy…Òÿ»¢®GÏ­ª÷ „Ð1‚}·Äi³>TÛ¿c´Èߨµ®dÚ ¢¥k„¢T™•"EPãzHÞ Z·á~Ú»³±˜y…=ÌÅÔ^ýfŠ_ë’í´F»ÊŠö¨Æ5“<ÈzQóôý·©¦û\ߎû­ˆW2޾¸Mú/nÈúƒ‡Ì“ íÖKÃZ±Æ! ËAÁʆîOî3/§"­]™¿ ÁX̲`t¹dwIâŽt$FÂï=y>_ÕÄ¥âòFlåµÉŒ4Çr¬¤ §W•o#‘©š¥Å~ƾ½ ‚3Š qÙ5ÊbñØ“—hµ‹¿öë_û&¾iØYͨm{~Ž–¬l\‘§оÍŽì§”[†_YøÔCyxÿ<ÞÞ£–Ržø\—;+1×nÅœ®º~â6»ãfYˆÉÎl>Esï- UÍì~*q\ëÊZ$鲃>¯Â—ç:/nðÝO}þh!—XêêZ%;óˆñrnvD¼?¥7°|èáÎï Õ#.}î:º?”ÑôªžßãAxKj‹¨á›u¬«•ãÚ ”{¬qÕŸ$ÈŒr4É'²rÒjãJš}îüìw¤÷/ŽÃ×O"O-$JJí¦s¹™¹ä—\p ¼ Xo©kæ)»½’Ô64ÁT$s W²ŠL¼ÅJ{ÉF®'-´.—ÐXltÈð¶Ìv7)çuåÕù ®<”) Ý´"éìÓÛ{Š3Ý |/çÁ÷+¢žÈç^Xå¨ñ­íRv£÷±4r¥W:61bÓ“§ñ ZUáìø~ñpkPy7w[ÅiD5ùú[‡Ä}eí$<üÁ’o½| çÏ\à…—6¡ÆT¡áf5¡Œ+~õ—‚Ô½”¼#ø*HÜý\Dì ™p¢bêH—KÃag&›2ä½&?t¿ä´õ- º¨3Ž¤ÏŠ ÌCÀ†œ ±K1¡Ïþö„¬ë®º½R*o Š9Û‡Y­ù_YÊॅ`Y[†™0èÆäyÁ2Ïé%ÐOô˜È©Ô½˜ª“ Z¿ª± ¬$éÜóÖwÄUzëöœ¼y$‡µ¾y{)ƒA¤—.w­ÄüÂgOÒ$œ91ÖRUˆß"T{MÙêo£ wÅ»HMP1M‚F¸xLÕ4ìßþŒ¬º‚ÇO*çOfP@I`j‚TAµ2ŠwB&ž,x×H/*qêImu ÙJ)´#‹Ð%¨•Jããz=H„a‰Åb1j|F å¨ñm’‰œ4|ù[åïü¯ßááÞœш—³ç'ÜÃÎíøQ¯ûIöôü”5ÁOò^ÿÎçu?bª!?¢šúQ?“S}Ðkß_)ý¸Êéƒ>ó½?€ŽlÉËÿøwôøüリ|DI"]àñO¾Äê™3øºV ŠÑÑmu³¦¡·='^z¼T µ©9袈R ¡QÛ ÑÜ*A°•Ù9ûI IDAT"%$àSÑ&VÁ£&éB‹ˆQÓí· …¼¨øZ¥ͬ"*Rz5KУ%öî}Œ±˜Þ&>T¢ÕѱñX–èô;HèçƒTU©4 fÔ9}B4¨¾g;÷ê{…Æ1:§VdéßëÏ<ì¶ðrE;|í3:ì{‰*z4G¼Imø‚,ƒ°¨¯-sÝû–§XÖÇa¤ÒGÍ*­JB¨ÄLKvP «™„A™C“ÔhäT´©ÙAÃÉXŒ q]ó ­ypå9±ku©ŠßÛemÞHïÖ½~‹û/žëzøx‡w~é„„ƒ#|û[^:«gH.nêÂ%ò¢Ü-iÖFVt‰µV‡Q$Ä«Au]±•—tOÏÁ{cÄcTM_bMpºTÛžö´ÖÂI¦^ Á‘ÔS;êØQn$bKOtdÔ6 .<$'Çè.‘­§òð³«ýôŠíJø£-_¹-f>×eRaD9¿"¿Á~()F*Î?§÷oÈdy„ˆÑº×“ÙÏh5X9.xVhô ͨ“«*òCBbZEah¯/*½½\óQ*‹µDmÒÒoPÚK% ÎèûðJ*VD¨mb'^E­©¬×ÁÅ+’¬vuvë¬ë[Dy!w{±NƒZèL ­>Ææ“¿DcWId)õl[o|þO¹vù N~èþòÅ?aëÞ&ß{y+OÏyéC»t}ÿæ^—ΖåSG±H'g[œš´O¼ñ<Õá=©f´Hu¾KgÅk²Lˆ‡ õÕJÒïåì÷îÈ^.ô±CáÓ~MϘ1u7P„ºËœüaÃúJÊ™‹%o}ÏÓÿ¨åćÞfñÅ_•s»cîé²3#{~íµ!ÿ|Ô—¹¨~²r2‘}Ws™+u*/,:ʆ“ûV‰ãšåÙõeŒÛK%]­N"'FFßžî4ÎÙ\Ôy/êÇjÊHsÍGU$¨¨‘À [LÄ88*ïˆiÄÚD“žGšOV¤,Qßô1vµËØ¿~Ž2¥Ê#¢•Åd]OÝ=¾Vx·duv^&ÍUµ%É¡êF<ÜøÆÛ¹ú©® -7ýà8V¬¨*A¦âqi¡kÔ\6¹Äé‘îW=¦UÆx±*š‹.=;úYNïD"¿ôÑ„£ÍLß\är4.åÍkûäóJ}¥²zµ£'Ïö9õÜõÂׯÊb2S*ÁEŽø¨$XKÞ‹Õöô @ͻѳ-Ý«Q F0F$mTc¥ƒ©¨t²º5/ƒ×݃]yF·›áÒžHkœ8l˜Õ9×£;\ ç¹Zžg­rký“bW®Ž—ÚY®Hã5f£ˆ3ʉeD·ŒTM¥ÐÕ<ó„(ëUµ2˜G¹¯â‚èQZs¿WjTµ¶hS×t÷÷™ê>—ä{º+wã‰Ö½a;P(:=|œ‚QUcé)¢ôŽf¬ŽåÄç¾)îáÏhþƒ'I_xMåî+9ÝOôôìßÈüç7Ù~ù@oÿþ}ŽÞ^à2ˆµ¦SµJæ|«ÄìOe¥Bÿ—¿«' Kdó´Õ¦‚8Šˆá#ŸìjwèiæV¤î)… NÚf•Uu\½²ÂtV±?^âº*ß~uGëÆËÏþ¥uͺ†àÿ X q¤ˆˆbÑLÕo»ãR:µÑ49zäìúª¾ôÒÓôFMUŠôÐç,| ‘‘ì\¬qu¥¢­ÿŸX§í¿j·2#©Q´F_ÿF-¾[êKèØ‘x¿+ªún@íßß"*M°Z7‘H‚Ž})µ/ÈÔk·³Êü(È7¿tO‡k‘\}1U‹ÎgŽsDVqZàGp’˜†Aäµ Óâm„q1óƒ±TÕ8­ÐJ¤êdY*FP[¢P“¹†Û7§|ùû5òµ¯ª/ƒT2Y4zæLG~ëo]ÒáJ"Ï~h…^/¢?4ê¢C|u›b¾§(•´™ŠI ΉƒŠ‘ê8†Ø –­Jsx‚ž¯´êŠL #u^jXx©û–EêŽ1¢‘,mtÝæ"F4¦¡ª”}?Á©UÈÉ(C¢A[3¹h Á‰§K„ÁhTñT4ðÍq˜²±4x†~,n±äŸ|þ5½³=ûIºÿ?lo­ŽÍÿ›\( ¨?Úéƒöñòc†ú#~ïŸùý^ –þ¬ª ðØú?hô$‚VyñïüÜDVO}ô¼vOö, D’1R©P)ÚùBÄIY ëPc¥êäh#-À–FÛV®bÔJÊ.ªVÛÑ>"b#ÝIRšn$bmËMð‘P÷ •Uµ‰“—¨„º{ÐæZX'S‚Nò9¦l'NŒ¸÷‰ªDP3n„ÙRE§VÄ{P¡ž”4ãGÍ$¥jÚa‹l¬¨l¬ý‰f­àJ[Œ¡Hã!ëmœ…ñL¹½-X£j[K!"H^@°¨µ­ÀZUUÓé‰éŽ ÌUS‘8Q«ÁÚÖ6S5²Ùxlàôµ»S¦U)Y^«ÛYH:õ+TF5WªNI7MäRsNÍ4ȃɛÔÚ¨Á²Ý32=÷"½ÐWîoÑÉg4y.u~GׯÝ%ßH¹û‘K\ü~NÙ³”§ƒ×W¢ ž¨›èæ‹—'%GíK*çÇNï›}–Nh6-ÎIŠ Ú{\§)¡íÀÑ6Íl-µ9§‡¸m‹VÑ5ß—¬^h£žT ´ž¡Ö|¢ÅÙTšŽÕlßÓO‰Â}rrª ìn¼°Âø¿þ„Ú+k²xuÌø_=dpíY} “Ì‘Öpf)$Í)öŒg>¬yâÒÇYäƳ]E„&Ë8zúCêlÂæõ»z0°î«Xí郇ìŒeõè;üÉü<~þ¢¾ýÕë'rñc—´i žö¯ð×O­ñ/vÖØZŽõ™:¥Ç8‰‰;âÍg´š}]L]PÎ3-–lx±U¢ñ¨Öº[ŠÛ¾§oŸ‡k'k¾ë<¿1{œ_¸»d«\åIY›!#å£/ìr¸'rý_ ¿ü_,´¸ú޾sí'†OqøÜ†Ïœ¢n„~¾Ôÿ¼YðÎÈÆ¥þ=Ùk5$#a4YãSã¾~M'Ü3žÃKwÙ}ñ-I®¡¾ù{zWã¨m#,Õˆx£âÁ¨W]«bÙŽÊã†DÛe*r5*µäVQ«N@–'5Nâ\CÝÔ4>‘ƒw.éêå;tV'”÷N§»Ì‰4%øvSXÚ’2Û“´:£! >¨JbðÎ "uPW:ô%aô°Ëw»cÂä”ΫLDD÷ˆ‡H¶It$ž ÙLÎvfZ'ÓÑ.eÉöÁY¶gkú`"½Šãù“ÈÏœŒ‘y®¾¼"_ze‹ý¥î]›qxs!'/ö&©þÚÏ_ÒNæä¾v[w÷—R.*Œ¥ «t¾“•¸¢ÑãÁhPÕÔ(jE­mÁÝ­-:ïE «s•¬BEu¦KÉ‹YZÓK߈`?°<·FyqU0Ù±2I‰™U*Fã2—ÞxKÙÔÒ¦$ ÒîD+1è›WI_xMM„\ò)ÿðïoËÚ3±~øs}®þ'>²ÊWÿ§‡ŒoåÒ4¨éÅgÄT :³©F¢ôSðµòåÏçZ{ b-úÕ/LXYµ„`XŽüâ¯õôÅg7(摪UÉ2ǰc5µ±l|ú¤.—Æq8®ôŸý㇢ª|ö³gõÂÅeéõºäýqGWúÏ}Ä«¥›zú}ä—q³-6ƒréôH½9KV¥®Jœ ;õœ{ÍŒ HêÍ{“wL¾:&K)è‡*¥(…û×½.ŠäZéV9æç>qVÜ›²³ßR(}?,¬¢E½@}ìâGUEFDœ‹ØNu±¨d0²šdÄq&3¬¦›S+Þ{ñ*Úbi˜5þÝP>ŸP"FMg!d•[¡èvI2ÕŽ.)òœ—ÿí˜oõ€½šï,IÃ`ÓÕ?±Æ§>½Áhé…Ë„JÕÔX¹C¨ö¤.ÆX-QÔ:ñÙ@mÑJ͛ԋJÞ>¿éªÚ¼;FŒÂ"Ö|~Цaë†Y)ªIÍñ\Æ´¦ò¡«¥ç¼F&ˆ³„½¢Ï¤vR‹ÓDq­ \Aq¢’«ˆ`Õ¨A¨µ‘…ÖÇh˜$¨4FÕ%p‚@w9'ÐÐ1•î- &‹ú'i†ëÙ˜ÿ$E‡þ¬¥Tú Çþÿ`ý8OŠþ{‰áý¡æô$bõÊIV.oPÍgì-ÞBDÈ쑤´EÛìL?êÓ¨¢¡ÕG&&áDèQú*‚3”Ý@pþݹ‚¸ãw0Ýjì»þmQ޳0,M×°* §m—S&ã×Ìi,ጇSEéD ¿çUÞØ¿GêZêÈÎÁË9êÐЬ‹‡$Þ±Ú è×%IhÐ,§Û¤£Ic¼U ”z^£Ë%Í­¼/iÛŠ¶Ù +}äÄ ú`–e›ññètó© *[‰¶cpŽ™ðuu .BN$„|Í—˜Ñ&JÁãkO72\ZM¸ñðé~ÅêúœxG)Ôh×Ñœêa|ŒÄ Æ”ôlÌåò<’7\?xiq€µ)‘‰IÓuÖ³S¬ÙÝ8ÅIk¨Óßý=dRðÊß|‘ ›¯?äÞ/®ƒzè ±ZäԯǻO&RWäE‰_iQÊ+§cÖv"ÂQù.Òó¸úb(ÂÊ»]CSG4‰#–.%5S3ç‘s2j<ÎP÷RÍp> bñGµ#^èíNÈòÛÌãŠPÀòDÌá3'Èÿ“çiÖú_܆/=dýöÎYFÂÚ²ætpa=Ø6Û<}îSäÕ‚7ï›Z€nÉ3/¢Y‡øîM&Y—8¶tË;…§ŠëXzIFd=u]°Ìç4Þ“øÖ°XÆògîµ”j˜h³?@Þ“`¿ï®äA¤ô0葞¿ !P߹ŹýÃÆñêzĽ՘µiE¬1ƒÍÇI'˜,„,ª¨'»\õeœÒ¯sïßðÿüñiúý?óW&<ñ‘OOaò.¿}zÝ*æK߆sùˆi’¢iL<:G¼²Nu¸$7¬ tŽ4îâót^ œ*×7{ŒGëüAo­pÈ‘ÂèÀðÂåj=á쥟øÄ’/üþœWþ©áÓ¿þ^¿tDxÊÑ_]'ßžòp|È›·øØ(Ã\ÍøÍú"_pWøŸ£kôz5ïø)¿½·Êóó þÇ ;ÜÜÜgû#¯3zû<'^>I}uÂúzΩiÌ­Ão™‚§ì”F/Н…¸Ž&9UT2¯RTaß(½x¦3aàÞœnP›œªJI:Sú'îP<¼ >¡Yfä+ În‘õ)æ]šùºfãUVN- >£êR„>³þ„þOõÀ²;.9ÑwÛÞ6'}®ÜOÉ«š•ŠY´d` PKQv(1LÅò±Á¡<í›êéÆSN œëÎØ®qXŽX4 7‹î7C’r¡ µB,DÛ†Þ,$-¹Ý^Jxê¿_%òå1rÖðñ¿sO¾àEøÿˆ) *&œyƽ¥E†Dycûw¸üÕËŒŠÃc§}—þï#®ÿÛœç~¾Ç¥;üêß{Š_Üæõߟp´¨g¾ÓaÏö±~ó¯-8w9ðÆ÷Jî¾"¤‘iðu̵7ç¼õýçÚÉÉÍ»3ÒxUa‘{žyzÈö[—ØØHð¾a}`2â?Ùç~æ,k'SâØÒ,,F-Æ(„·2nÞ‰ùÒ•§ŸªùØÓÆzž¼Æ˜@@¡§)Ãz‹—ÀN½ä^uD#ÐQÁªÐHÛÇ×ã“Vðv¼º[P ¶9Æ’çîl¿ ëOÖœ¾2ãÜé²Ìá}ø¡[Ì J)m®j0ÀS†Š,!!ãúeã\L”YÓˆÓýVHP{Å„@­–ÄúQE!†ÒZÄšrɸ^‚6OÏ®/ÉuH“õÈ¢’Åî_ÿÖ„?þƒîÞ­(ŠÀ©SŸøÔ:'O'üåß<…µqÌN©ë-`Œñ[æmþ(MãÓˆ%¤c‡ugÒ€Œw˜Z1¾I[ªxæ0Ƀ3=êyÉòö´%Qbü~àôpIÅCÓ¾Ü;ª`ÉËa·©íb1bQ±¨±Hð8¯¸c‰U®U+;ka0`™44V‰-LÖkö_ß§xù€ºn0VˆœåŸ}{Ÿ—oÌþb3ýçÀðþ{ãù Š®)j¹û•kºóÚ=BÓ¼ï*¡ ÄÝ„õ§O#‘‘D‰ƒÄÝ1†ÌŒpÄB'ÑÒBFDl;½R$ŠE:]$NcZ?‰kiÞ •Qú½T:.â ;â3n“ >Õñìˆ?~ðMžX=Íc+§( "Îqä+~õò‹òW¯| ¯Jâ"ÞÚ¹Ç÷ç{ÄÄb9¨òêd›¼©qΰHæl5¥TÁcXðtW7‰›Dl¯C¡¶ 8¯¤•E} *ñ>C‚ÃiD㌠‰ˆ¶<÷òyS"-•«!N°¡EøP¡“±hQ  `8ëP1Ц7ÄlœT)ÊJ¬ ÚèÊl±Ô´ž#:FâU†9r8e÷ £ –‚­HÜËtsX/,ê)7^eZàl v]V“sŒ¬)ÌÌPQÒw®ÓÙ=`ﱑ,³ç_=¤Wøv$ìPS+Ýû¥ˆZ:Ï?§Y/§öwÄŠÑÔô°Ÿ¼"ss‡¤ ŒÞip¯îŠÍ:”¼¢ªø÷^¢h§R3Dü'%¶ ¡Á`hš)eSÅPg+ÂÒJ'c¾Ö•¦géî–ôöv˜I%~ º³üí²øåÇ ·fýï o¹:9 ñ޲ŒËÙù\nΑ©X]9Í|1æîÁ;䩱F‹ —¨WÖ¤w÷¦úFůôl½ ®j¦ýu_3 ë¼(|9¡*Ø8ꀭÁ4µ(þ=£§€xÅ/ 4íò.ÌY!YïÛE2¶bÔ-KÖÎ^b¸v†ÅdŸpëmY–Il¸7Šè/†Ó’ÎÆ‡9óØKâƒPV^Ö»c¦ËFóEà…Ò%Œ:Š ÈÉÇ çžˆ0n!.šáÝ9òí]žwAßÊj~P-ø•î ñ ¼ž§$ý‘ÆkW©'ûB¾T§rtד=«bÔj¼QúãF®vžÕlóy)‹C~÷ÊH ¸Ê%¦õÊE wÖÉú°ñXÉ–ùü“µÞ;qÎ4•ÕoœçíÛß`ïü¶š8á+S/—êmNŒþÆò ÿÚÞãÍY¬Ôòm—ënÇs?öD“ûÏ¿Åæ·ŸÁ½zAäàFë‡ò˜[0ÁpÓg\Ö%Æ54>`K't3WS6±ÔÁDÙ¶"ip >ZãDÞ6z4[%­c|°íʪ,öÖçIz¹VË _d AêþŒyÕÐ7Jc¼z’œz^¿^Ëk·!mÐuÙpÉøŽ^ªÏsµº(»ÑýÎ6è ú½M6çps¯²¨Q'Tþ4,YŒÁL‘ b¤ ¶³¶E©& Ô{žæ‰uÌGGè¤32dÿ °æ·"üs¡mœè{ÈW£ïKÞEhÞ³m3!…ºDëû2ûÌ’“w#¥Ó3ü‡Ï÷ùÞËo±,üéíBî¼Òáÿé*§nƒsŸ^“kÿàmîþë]ŽŽº$IBUùæ^&÷׿ùßÕª[)ÙÜH\+åb•Ï¿6—[û5‰kóDZž‹2ûÁ‘Úׯ|÷»^üÄ–üÊ“ëT³ ÷ïYý£ÿsKîÿ@ñ××X;¡äËR‚>Ê#ŒÀ_þtÃwVS¹u·¯7ïyóVŸ(ªyðü‚ÇNÍ9{ÊQ».Áq ìÖs*Q‰[ 2‘-)Ô‰ª!2«H–H[1Aµ@J”N‚¶²1•´ãu1BneêV !rF&G%ÿæKw¹ô‘\†«SÃâÝöÔ±Uý}kŠ¡®={{|÷Ë{„g^ÊȆv†ÄVÉ›6ËˉJZŒA儸»*YÝC¦K‚oÿ§'6œØœÓˆ×Åú’í[üïÿ>ßûÎBÖ7>òÒ*WŸìrñbÌ ]§i@´¤Ñà§TÅ‘ˆ«1;¬hVQ÷»¨Q|ìÚ2¶rXlx±ut\|ˆˆÖª&8_0Dkh5D}#ÆEØÈâsÏâ à=¸ÆJÝ “ÒQò‰hû]*"Ätˆ‰QÓÇ ih˜ióhYÒÚa™x˜f•®a2­¨öƒü_ÿòò{Zocd5¨âŒ¡Ÿ9Y Aù ÈOáù÷þ+4ž½7üÈçÌn9ué HmQ²ùÄI\' ”‘¥è;ŒfàkLw€ˆ…$A¢¸Õ Z¡é|Ò.ü•Q†6æ²ëñYwŠ“¤”“)ZðÏwnòýé67¦{œÞ»ÍF6 ‰#¤Ó¡®Ÿ]äBoDé+…3ý!åÄiPňaÞT¼4:Kékœ*õ¼|x½r“61¹QÏõÅ.Ëi‰ãQB­K†Á`3‡!#0’1Uj+H£Á3ˆRܬSÏ…¨ƒi —šíÔ¢I—:R³„("4 µ*g²>V,ÛËIk@ŠÓv1«=Á{NöžÞèà‹‚×îb2øä Cî^ó¼ór‚‰„õÓ’v×È¢ˆá´¢»04ÛÜ?z›Yq@d0QCsçûáå©Mâî U™ãnÞ`øÆ[t•럺Lö°díÕ‚mƒHf¾ *SåÁ­ï1íõ‰ú&x’#GÝÌ Í1®O:/èG A K9öñ4“ªd^7¬[K0‚Wˆ£Q<À׆™ÉñÒv¾2ï5CIÓéáK‡ó ªÌP¢&°òð&?f–€y~•åo<ÍÁ󧨿»Ïòë{ø7v‰“Àö@èÌ;œžÇtuIeàž…¥l®œ%KûÜ?¸Á"Rš^F=Z§^?Iº»EI±r‚ÕPW»&¬œ“F=ÄYê2'_NÛΖ—¦Øº$. ‡‰É»Ý¨ˆHSÕôCÎ^¹üÈ21¢Q'Æ#³Ù“ßxrM߸wÄçß¼£/½0áÔÚg¸÷öŒƒ·^W— Íj*¬¬0<û!Vg5ýÉj¸?½UÅÐgä&æØmC²· ÚÛÓÚ62mvÀ:’¢ÔÇÞÞÁä^¼pŽr鹯í*bëc(¼@»&ž«Ö‘2¯X¬uqê4a¶»EÞMTS#¶\bNM¨n=h‚¤º •4A1BsŸ Þ‘†ÞD<Œ(¥Æ`ÐP"UuÌȇÊͤÂ☠û¢ýH»[[Rn2‹aúëOhñWŸ¢q1Gÿf›êÕ1éÁD:,wÈÜri9e½œ²4Ûº#®¬] j Þd+M'•f¸¦õélj3ìx¬Ëþ§ŠRW›%Àr0Âù‚ASáƒúJóÅTªºB£ëÛš¢Š ¶‘vöjò¡×Ʊá"ÐMIß½žÕ´Ÿ"X4É+’î ÙéóÂõ·Ø˜U:K¦V¤´$2½ Ÿ!ÎÖ¨ªFë2Ȱôðî;o¿Íð\£!n$ëèôüáT¿~óGã—ä?Ž]á6¡z]5T¦ÇÏä?˜Æü“{¢£ü•§b~göU´Fºù¤úùÍl¦Á™£Ù AVüÆ9ôæRÍÁ=ìÙKº+Ø`©¤¢8ÚÁvÎ7–Ã^ÃÞZ)E×1HV´ÿ»ýâ¼4ÖzeŸSó'8sð8ƒ-bŸéþ äæã^îïòÛã«üCû­ôå숟_ޏœÇì÷sUãeëùkœ|å =õõÓð³÷tÑw\¹[Á;M‡óÑc^ ¡1ŒŠ„½¤xå*¨Dˆzm Û’1M"}|Q²ß4ÜLk–e¬‚h°sÂb†VIoI]Dhpj¬blͼ†A䥎–ôæ› æg€=F=*IÛ×ÿ—½7‹•5;Ïóžo­ª¿Æ]{:ó<öxš=")Šƒ(’’(Qɰp” H؈€@ˆFâ È…ƒHA€X’'‘íH²dQb(Yd‹ì&›T³yºO÷úŒûœ}öP»vÍýÃZ_.ê4›,7©è*òê¦.ªvý5¬oxßç}·%zKî %P Úñ*MUV½×\M+ÌŒa¸&¢¦œË‹5Ëé:GÈxJszí1+éÃŽÞ¶c4ŸÕ%‹&´ÒLW9ïÿ@Œw…n÷ryóJ_oÞØç÷çm Cˉ3N?¾¬ÿÈ1îm3óžk·÷¹=3¦„d¶?×Ð!UݨÊE*² ‘ƒÀ£y„Ì›Bº«]בµj™†;ÂÌtõAtŸ^³‡Õ‚¥²‹4—˜¦Kz` ÒfU5EDT)xm8$CÌ»¬^Þ£Z,ßávIƒú.íÍ{‹»{d%Ù¨Á½f¨‰5âœcžUØÈEèlæ)+%, ÔöãêÙ·éÝæñ!¡Z\«N1Îi•3MÊŒâÛ»lܪË×ÚúÔ/qòGIã±e!…ÑÜ««9îï@-0ªÄ;Gï·îk¶9Är¹‘SF8 ãÉs¸z¹Ðoþq&o½8PÙsü|¬û¹c¤—?bÆ" ^Ä(ê#Æã„4uúüûæ\8½ÃÍ{ nÞù£oX£:Nƒå¶0É*ÝöCéU3Ô¡Š.f.*Ó¢ j50W…"N4UÁÅF‚©‰n½ZqãUá¹OY´‰–Ë– ð{¡v\Mœãµ5F$­XkT¿³òXj•,Ô½™Vä A+Þ+í†åá­œý½’C'#:jÌfê•‚’{‹£#ªª*ÆD4Òen¾µ©dÔ¢.VǬ¬MH%Ëaó†c>-HÓÏ<“rôX€óV›­…t|4ÜÁPHa J¥.qx©–õúNl˜ñã=ê*DKŒ_p½Le1¥CôÑ Æ$4 †<¯étÿˆ¸éq´Š›fØb@Xæê})°f 2wè¼²Äb H@ƒŠh&sê>K„%Â3æ¸ T/V@´|8«#³ïlû”îÊGV¥ÒHê+[©§å Ç‰ÈÆ•ºJÿl¡¬ïTú^ëiùkÜ?¯¦ÖïØô^[ÞÃÄþ^ÏõW÷šjÃàÔíïÜ_Ns=òѧdùÒq\o šçúð´ù|Ñ€ü)ä¬K.ß-îŸUÓE1o@´&R5•F I!´âP&¡+B‹P?hVy.X¦$$RÍK¾6ºÍ×öïɃþ>>°“ÄtIRð‹ð0 ê”q(®.qì§s™Ý™agžB*®ìnòöþ€Ð 3¡v䥛—©;‹K´ö2>¾tD–×Wðl¹˜@|fí¤„ÖàýâçÎÛë=Î;>°t”~9—fq{ºÏv®›@Æ­…ʵ_NqªLÈÅái±Ö1 \.+¹°>µ„««rqå[ó!ß$Á{t˜;"ÿÑó‡åPÃòúF_þå7ô?8ΜÖßü'w¹u½‡ øõ˜¢YÐiµX›‡Ô{»dó¡ ³žÎ¦û,»&)1[|wl½Ç:,óÉ}<•¯0®”ƒZGhÝ™Is{N‚0ïRÅ–p\i4(LÆàWkJ"¥1¢³µ€Â9!JI÷Ætº*óJôˆç."$bHŒ!Á!ªÖ5Œ¬!ã©ð(V!p¯k´㜈X&Iƒb9†2—âþ&£5Ãô“ç(úi‘‰cøÕMÜ×w¦s\蘷ë4熳;S–óÓÀsÛ@¶äüɘfûÜÙy‹QUãÚ+GÎI4kØë1ꔽ¾žíËÃv¢£¨Ne#Z³}jX$PŸK>ŸáE±„6ã¹1*Nê;™¦RÖ²ZüÐØ…ÆcDÿ5_ýÀ# "Y ¯£ˆû9IéåF×2±B<˜­]¤Þ½¶b4CœÔ‹l]¿A9Þ×þFS0–CG#âZÀ–kHõÚm¾ú{«|ñÙž|®áùVºá”]*•n“O={€;v.¯mN¹ØÚæH5Ô·ú1­åƒ-W·ñ†eTaS&;•.w‡Ô£YŠfSÌ-¡ºÄ‘»)ózB/ÜäÀ¾2ØL˜WëŨMU]’£Ïnjyó»/e2½ð%ŽûŸàÃoü”¾øÔÿC¹_YFCÎ<ä“Ã#œ‘ŒöĉGű8âQ1"¡…2-DI€ $VªwÜSH%P႘Æï騒OD±Ôçwç9oÔ”íþŠÑŠƒÍ1«µ™ìæ}=ª°¹ÎÃa‹Þ¤+÷Ã\[õ.çV¶åÄÉœ£Gk²ù¾eý“WveçáTo^ísój_oÑé&zæÒ /]ft6ã_\¾'÷úSe©Í£‰4÷Jâ~%.6 œ_yl XIœ’‡Â¼ A†$ÓEÀá,)´gJ{Zbd£¥SúáXÆÁŒ¾ôYs+tü’-NÐöu,;ìÛ]¼ÝgT;*Ûíe 5Ž÷EÚ%Èf$>ÄuÕéÆÜZ«¸Rö| ¥s;åLÏˉÙ*>šàb"ÄN‰½²*êërä}‡¹¼SÜßåÏFܺ›ËÎî€C„=f%½Æžœw8ñ­#ºqò>×NätwrƽŒ*™€$Ó9AMð³ ^ËÕû[lu‡3Ÿ;Ìppõ+SY>“4­nnyÊJDŒ@Y1¹>—bä „x6£>ÜE¸*‹V$ƒWq^IìbpýÄ“‘½4WãŸÕY¬²Ý{QtPQXQ Dú#ÕÖrÎsÏípêŒå Ÿ¿ÄC;a°so#â+ßHãÔœ¥‚.>›¢,ÕcBœQ±ªDÎà*+j<êU‹ÈðØÇ±!¼õJ¥Ø’cŸ12\®ëÊÓÊàÕJn^v<ùLðÐðf¹hÙU!@ß]ãÎ Q’x¾ú­}z;ï¦I÷PÝH©TØ/„ÂÔŒ‚È0žå|ùK䃪qîÌ€åfg<[wÚiâètj\|"$ †ˆQ„ž¸b*¥¶@ñõEâm j-∊/"5îAƒÇ8A4Â`$ŽÑd¥MIÅ„ñ‚òO%Ø%š$]ä/UQŒ#•,j½wÊ¿@­‹&fŽØŠw¥“[.5kÈò’„~¾ør’qm^è¯ý׈÷*VÖ"‰›Ó¾C‰…Üx±0ü·¬¿r,žû›Õ3'¨òâ;9" REY+ðYÞPÙÂ>&‚m6x'·âë¶`‰?Zzz}——çDØFŠ4Rʆàk–Ò(5µ\’‡ƒ?¬sÔÔq®âòÞC¾òð6×£e¡cÏñ|•`TQËæÌSaÐ AåÆ2˜P¶#X­ã›1î´!¾“Î ¹Î)Ý Ö‰â.Ep{¼‰Û¸­6aÜ`ã­oÑz-"ª×hkI”Dœ<‘F½÷ÄN·˜¦)ÆœJÚœo® *œk¬ðá•ã‚Á«ò‡;·øÝ­ë®ƒPyÏZ­IbBfã=¦6‚”쌕9yå0*ä•'¶ž‹ËÂg/%Ç/ýá›ìKž?g9Ý=Åoþã9×/o.Åøµ:ºÚ`MŽjn“­á-Lo£bˆ9ýÝŒ:ËÈÊBîaJG¥%Ób†7Ñ¢¨±B‹Ú1Þ Q?'½¾÷(×óÖbt¤Æú‹;4¯Ž(BÖàNv¯fÁ×zŒLJ4(®N¨þ䆯 `DÈ+ǼªX2ìø^H´Dj%–€=™IŽA°ªt'å")7)¤¨²jrvVqàúmƧS†ÿñÇðkuÌ+Còßßauç!Ë£!—¬×"sÃùͦ=&>j>eE”XÂÈл·Á›7‰â”ªpÔ;1ÍÔ2:®ýh—•_ùË¿ño<À³þmÆîk.ñd}À(ßáôºá§Ÿkð>ßàÿzeÊßú‘[Hss¶J´|‚¢j6…(¡È 2›QïxôdÌô›̃mÂcûØ,„Ð0éÌamJ>­Sºˆ•Ãc–oqù_•,Ÿ8Çé_xóË=~#fzø!Kþ$‡z§¹Ûx…v;âÐZÄÃpÆ‹·ø»zžQ5æŠÙçr4dÛ.ñÜ(å¥ÎTœ½ÏüåKÄp‚ü?ü6û{1ç5gCÆÎR…Ž:@Í ÝÊò0rø…§ú;¡Ñ•ê3êý¯†BÍ£bg!U¨%Ž*òiL'Ú£±fl¬’»$+;8f칂F˜²:ìøð¸¦µ&ŽBX! …Ê*‰κˆ[8ˆrBS)F²%,Ê…|«Žp,jjÀc;{|fðör?ªUÔ¡ç•+ÖaÓ)c«˜CwiÕÛ´¦M¢"f>jÓŸ¦¬7‡¬6Ǥ+9ŸüÑ” åÖoüÉ.÷ïŒØ¸5äË»|ø‰§å•°ôXeb‘ÜãÇ' Ÿ@R)¡³ÆâLгáwV&±ÂÜÓ˜/Š´±*^ .ö Â)c3£é{œ(q¤8ˆcÍh‹÷höoSD»ì­ãµÃ-¬S“’cû%éLKXb™´š°L4`5/X2çiÆÑÁ”; Ç›ë[¨D\êgœäŒ†·Â Wßf7YáÔžaä|{ÄûžYæÉ§"î­dx?ã7®ù;ÇwY¾u˜ôJ—kggì<p野ñûÿüMô@I§Ž3Ѽ"žgÌ %ÿê6{¯í¢æ3Å{8ÿ‘ÖÎÄ\ûfÉd`§LjTõfyqÍŠFƒérw!6†pžÑ}øãÌÖaRÀÀ8†œ0,¨šSâ™"Îዸ%âúŒ¼òÛ¿ž²÷–ò3¯{x–ñk/ðéî lœü<¯¼:áöí’Yáø†aíˆP”Š7ïxe‹b49ÒÚŒ¹·8àÍb›óì…ô6=ßþã’Cg žø°2\ª3—øaÊÌL5ÇògeŠàT¨ùEP|õÝãP‘GiàÅC°à/çs¡, õÐGgB„wéLâ…xÅðåoÜa:pþK«9ÇÏæý;÷›,­ÇN•ˆ )ñî#D+Tò…„<°Tõ5*Qƒñ¼b*Yl;Lx‹R!ªˆšyÝ*…» 4椩¢ŠyJÑ_gô`‰$ê yNæL«Ü¼lÍ,‡¨Î(U¥ä›—)ÞAÏÈÌb¿[iŽ£¢¢"PK!%¹NIÔ;%)-™)˜b⨹èBTA<¥÷ìÛ13&’{v‰ûñë½ ê•~`XŸ—<ÞÊ.´øôÏ]àÀonð+ÿð­w| ß)!oÐëÍɦÿVžõ½H°Þk}ó½Ü÷ýä€üyë#ýÿüüª‹nUµA€£eQ ¢ØI Æ[´j¡j±6 *Kn}ñÛ³¹Š5öÑU½§}ú +OžX¿½'Z]ÂÔS²Þ|>¡±ÞÕ¤T9¥úÑîqž¢…ŸL|Á«{wôUñú`›xk¢ñáî@CºS£X‡‰ *§¤ã³È輞"FT±&TéÏ ¼AÖRÔ²£ÜG‚™×Ê”~Nä µ¤MZë2Ý'Û¼¯>ÊÎᆎ{sÒ­!“©Õî„:\=„5!ÖDÔû}¶ÃmµÍOÛ¹‹!"J *L` Ó²àò` u˜­‰åîxˆ‚b¨Xø\\Yh5÷DV¤šÊóGbŽ·B^8ÒÖ;%ÿíï½Ae3>xé<­¼Å?ùå74ó}‚÷-©VSïÒ9ø8‡73l¾O/ßÕémL¦Z› ÂZ‡té0C½Ôd’MñΫ‰jˆ±8Ê…ÅòÞ¿Ý™«Æ"XT‘Y¤qWSy%xç´‘ïdè>j UK°Ù—ƒ§ÒÛuìN©al% B|Ué¤,éåÝÀ¢Fpæä½ê‚‰u#¸ÉžªUð‹¾G‰,ÕZÊÊp¬sŸ2_ЉfSÜÅã÷¦Scòê>½µ©‡úûœÛÛåê%ÊŽorp”Óïé(Pî¦Mž:óaÆÙ@¯Ý{…¼f)ë1U{…âøEÂÑ@j[u°v”Õáˆ^¹¢ÛgŽr§ÛÑIâEèŒö©·ŽhØh¢~Æ`oGK—CJ@èBu®DÅR™X³ØâÍbŒ'@)‹•ïÊ™±YŽïvòÞ«ñ‘cj:]Ú_ùšáô—j:Oì<‡Ï¼@iÖt–M™bÑzX1®2|åq6"ÔR—VêDµˆÍ›Æ·¶©}èË_ºÏù7Žseý"¿¸û5Î÷ÛüõîA>ÛiðÄþ/¸‡úãÇ:üö­„»[Û\\ípëzS¥u’¸{[Ëñ·1åœi¿Î¤§:PP­:_®¡½‘¦‡^e°fé„5N­&tºB³^лsŒrÐ]¹ÏÑ3w˜ífzä"g~ñEuÿ`Âö7¾Nx4á™;Ÿ$èäºwé “˜Ò³ß)´×-ä4-}³ì³ç¦üÓ¥>oç°¾ÕÈÉEäÁs¯ëá/?Ña¢¾0ØØÓH2ZYÆ–.éÿã—øL™ÓÁëÔzÂqLËš†Yc¹QNh7 -‡‡G‘ÞoçrÓxUoð^ˆDˆ[_æL¶êH.²Œ‰q³WlÓ«ZÑ&YXC@KP™GêšJQiŽ:85K$¥ÞÒŠ`³jŒÊ;ICï :DÕh%Š+rŠÀs 9&°MN©Õ©UÊ^_ï–ZÔ<¦2Xêó`e—ú¼ÆÒ¤¥k{«l »ÜÝ[§™LYm ô`g— —V8y¾­wß³ß˸}uÀ—^} Ÿé.ÇŽ´ôÒÓë¼ð±sl3½vgW/o1ïÏ ‡ŽÚ¤BCƒ‹­ÚÌãBÁZ!P¨WªÓ¦ Fˆ2h:e^v›ÂRæiä‹ão¬^=Vâ(Ô*¬ø 7ä6«®K×/éáâ I˜Ò7=­ò}ÚÛR¦ ´×Ù[ê°×*hïÜ¢5žéØ qE¡kšJ4=žç,—pãF²o„„K+Òôu5+Fwk \bg9µÙ&w_›èµö*ö±uýz_y©D–c¦¡¨«„üö Ú·Öx,Úàê T?Óæð.ûW4"æu¡H…yÚFr%-=U½‰›MItAõòW·É¿µ­‹¦¸¨§”y]Å{DUФ¦Y³½ð:Á¢©…nÉšaߎÎÿˆÕéZ¹ ½{¥6Yä6ø–bâßú­@_~%äwfúdqŒ­Ïÿ×?ËðÊÿw^äs?·¬7n:þèµ6=õ˜¡ÈÙWjT±F(2èo ÇŽË"u=PM¬RN`óº×úŠà+Èr@\özübÄàB¨÷•ìß42¹6þÓõ‚ª}N|D×ÏEU±"®ÒY™cbáÁíRï^ÏYZ 8u±¡³Ì²šVtjhœ1š(-[â½Y„LNà‰Ç>ýLC»]ÏÞ@˜æ]ª<àÐá[ÒZÊ1x5úÜDPƒ§BÅhÑjPÕk ºðlT<Þ®T5å£h'YtZ*øEc¨E½u¡g67úò•.}rD£ž3xL§;u|ÕÄh¥Óñ˜Q™ª·kª–¨ ASQ#ªQ/èÔj^VÔšu’z]]è‰]]-ÕR{æ¡L©RóžØ7Õéb(€¨:q¨(FÊÅÔªeLÙo4b(­‰£1©xã ¥@ù`:çgñæpmª_þƒMþÆ_àýâ _¿År:Ô‹O/Óyß!ý¥ÿþuÞ|cŸ¿ ë/Z—¿—ôK¾:û{Mn/ÙÙ÷$ÁÒ÷ð„È÷Á–ïÃcò^¬÷ò“|÷Ú‚×þùïhÇ8çde}MÃ$‘­{ü‹Ç±ˆcðUÅàÁƒãkÞùæu6_¼Œ¯‘Çÿ“Ÿbxõý_×óÏ^ä¯_xNÎ4ÚtK#ݤÁ›ã¿ò«¿Æ«/½¢ÓÊÉ¡|@ÿá Z¢{²5ÏdYÄ<\ð…”Þkg"³Âé¸Óo1"&J°Ã9â׎™¬”ké]'jtA*r¬Zœu$õu ⦣‘~,³Ã|;!¸5‚á”VÒí,ákVCñ¸Õ£T[/K^nêW¼%/s)uλ;â…YØŠ¡ÔIm¬¥Ÿãq‚¼¢Þ©Tº ‰EVôT;k„n£ÆGN¤R“!gº5fEª_z{"¿úÕ›9´ÃýàQÞº¶ÌK_ú¶VÒ—àRG«v(ÁÀV÷ +K1Ü&ËFjm*‘IUÆ1Ó\«Z€K›ÌŠšxÄ‹H™cµI[$Mf›lÿŽVYþŽ­tâuF"h‰©t¡ø|”Mñ.©à]ý´Î+e¦Bb÷ƬžiS_N‘­‘ÆYK•ÏÅÔŒ,ò²ì£Ü‹ÐÙUvµ’m»£v±H—šOÔ©—RŒ:õuO”YI‹ù‘„â}KgS’›}øµ«z[k4û#94îs}-åî’e}oÂÉžRwC¡Ê†@­¹Äã§?ÄpÚãúݯK[Š4Y4Ç.ކ4ß¾Êtåhé…{¸Z,7 Ý-T42º4èÑj#lwD«Ùd¤y>¬ÅWNņXcdŽÃT…¹±¾3X‡Güz/ßE(°y‰)JÁ˜ï|g3SêÌÏ¥­ªÄ±` Öy±j8röy4XÓéd&õºÅÔeŽäÕ„7:)Ú–`]ZK¤Ñˆéõ&ÌÞhñðÓ{„ßÜcùåÎ>ÿãdÖÇ͹ IDATËl ð÷NôZ~œŸY©óBšÊ~iƃQȯÿñ\ÿýç®ð‰/4z\£õ'$ö(F;Q¢û[K'ç,4¢g"Ýÿf!îþ€Îù&K®‹O{%£‘–ô®:¶o¯®ïqðÄzýãzëÊIžíË…ÿâ¼üŸ ý›z(:È‘ÁcÒ›Þ"¯¦z°ñÚ×gòÇfFqj&‰„ª*lȘßj åñ݈~=àZs&·>ñ =øÏ>+æÕu&—¶Ù£2/‰ç•ìä«üžL4­¶dT +Äú¡ !½î˜q Ñ£LÑ0óF}R‰F•."é”P«•’UF”«­}9÷dŒ«J½øD—›¯ï˃ûS æòÅ/Þâ•olê³Ï”gήqòX—+wöôÎÕùÝ ‚§l*å‚„çC4ð"V•¢!¨8SÒ±2kÚÁ8¯õù½6O%*µ(¡´Ž±3suÇíÉjUë,™¦ôƒöË=fÃ} çUÒ`Úì’­œÑª1–lSè°Wrƒ”Mw‡Uz$uÇ:œè@×¥Jv¸| I>_§µ&d[Ch–Z›$Úªï7¥ä8û´%éX /½Z“Z'Õ~ÊÊëÊßòÔþA:ñœ}Š}ô iDbX»-¾ê;Ò^9J§µ†ao;—‡w Šôì…šìdèdîLKÍ\H­,ÐÛsˆ«¡ž;7E¤?nÜ=„º9N¾M­6%0{¸|.êo >(›í80˜²B|Á¢)\ìPÕzQqj¼EÔŠ*>5¨XÈÍ¢FñˆÖ¬È§>УÑp:´˜÷›bºÚG¯hïÁ!™ß9ªõ•¾¤ë[„éT÷#Jš˜¢*),™lJyh¬õ(&ŠB1ÚTçx-T*uä>ƒ ú!ºççâ¼§“Z Ë@Œi05s É@D+œdvþÈú!DDð yÈò¤ä~Ç2Œ-‡|ÆŠ/ôíá)ÆEƒ×~ÿMyÿÊ~éï|œªk3|ÈG>¼,ãckZ–"÷3ÇùùE¢ÏŸmŠáåëûïP¥•Bhaoü=7ÿ& ÖŸgSø~mò=ú¹ÿuu¸¼Waÿê=tcßã½<Q]Ù_øùËYÆ|4¦˜Le°µÃÞýMÉÇÝ$O˜ÆÌG#²áùx¼³Y³Xsþ雈‘¢v4£œd”“ŒlÌòƈŸ~ÿùÛ?ò¯¯J³4|ëõ+üÊï}ËF¹5sk›Áƒ‡2|û6õzÊұâ& ÞŸ2[ CÌ\P’ÊTN¼BT¥ ÃEò¡Æ`³_ È[B4/élÎÀ¸Àà}‰ñŠ1 B‹µ‰6A³©èdHU©:)qVQ g¢Æâ[-‘ÀF ²{RåSÄxÚD²^;@;î’HL[gP·).ˆ0*”.gZ” ®Yؾš‰åGN·yº[ãÓ':ò¡3«<~0æPšq¸ÙáVßð?}é6ÿòò¦œ?±Ç_ûÔwï^à+¿óÅtžìHµ![NR»ÊZÐ$Ýéãs1 ÑÒºø¢$ßÛI"¢æ*qÔ¢rSÉéœû#Œh·e–íâË&4ÄbdugJX8faƒ,¬Kê•zV°ùT›ýS ê÷&Ø»CqV0FOµÐ–%DÅO*ª©ߪágŽ•kÛ4ï +#&´ÄÆ¢êeZز¢‡8#•ÇຠåÝD<ÈáYL#ÏñÖ‹UXpó%?¹ÌèS]²ÇšDWw)ó&÷û–¸(9Ñß•ýFÀf;aePpv×Q÷c†¡ç µÖ2O}€Át‡ë¯PY+eš/¯’»@4™Ðºq…ÙÒ*ÅÒ—®¿ÍáÙ„›çNʽ0¡¨5¤“Méæq£ƒ1•dã=Fƒna4†DC‰¼ÅU¾* ‘"2dë5!4DÓ©ÀÕB4²,ЂÍK’Y.‚Åh¦]–Ž_Í â·Þ”ÆhÂÐ(nu?Ê,oâ])µfªZv*wýC^[ßIIw»býô’à=[÷úÌÔƒó´eFºZC^ÛÃ'ÉÎ-S™·¨Y¸V ù²p½Ti ‡ƒ˜Wv¡®#y¾;àæì(ãè „QH±w C©±äaF÷h[:éA¦ým©f1ñr$Í ÚkŽÐ)“+%¶P?˜Ñ^’…bï0B]ÖÏÞ ‡l~»"Î íø´yDv`‹C•ÛRÊôfˆ™%í Ÿ”ªlˆŠÇr"Ù­åôWF¬¿qFZËBñÄ.‡qQ²)cqÌYr;´Âû’'›5%*»á£P-B!A”ŽŽS¹Sv¹%²×™25ž¼  ¡rÞ;¬R_Ï ÒRŠi‚Ç1)"œ‹°ÓÏnÖåÈí˜ëc#‹)OÙ€7ò„iQp2u²š6ðÙ›Wؽœ•ž“õ)D3OI#O/ÞC½àRƒ7†æeX°š5õ¨Å–´4Ô4£ Ea^£bb<±qÒU8? 9ë”Ç*è:+iXP&÷Z#&é”*,E²óY“Ѭ%é!+"VZ†c‡jrît‡õCM CK/ãÆµ=Ù¸= Ó‰9q¼KëB‹ÞvB¹ŸˆÖ ªp±õ´•"•¢VÄ,l±T‘P†‚Á 8”ŠE^D\!F 3ñB­2„6À†Ì2eJ.¡Zé¸&˾ 6b$}‚|F<S…1y}IŠæ*Ä‚xÔ䳚eÔ.˜ÔgÅ.õùc–ÙŠ+¦±Å/{ªyŽYNŽ,á÷EœxŒÌ$(rŠÒs°ò¡Ç›äNåÒJ@0\A›#±KCÂ<”iè(W ó±JÿÖ[”DÎ/2•ʑ|LdÅö˜µû#Y¯'üØÏ¿'>xTZ„3Ït!Ã\$°”*ˆ ,ª[•XçĘ…†»÷=o¿^òê— ÞO<“z+qeˆrËÝ·þůżòb„‹By¿ýI>¸ý r`¹A÷“¿ÁòÇ_¥ó¾ ›úy!ó1ó¹ÇUˆ}ô>=2U‹y´– ¬°Ô©JxóuÏ×_*¹vÞ_$ðŽ÷•Z-âКew×£^e:u<´/ÍfŸíûuB‰y°=¥,½Ø…“c¬tW R V¡¡x”E¦¢^%ÔÅvmÿa%·_Ïi¤žiHæ-OÐŒ„Fƒ@„h%ÆUêÑ>‡:cDKʸ”aìÙ5évwXoeøÒ Õ|%> (Û-ªfµ`|%¶¨0Þ!ê ¢Á"X^D#DCTQ Þ,<è‚à A > ÐP ‰<Ä¥„+[„KcL\¼&Å ÍÊ—¥yxkjHqœZµDêB ÅX‹†† 6’F1¢ÎãÔ0§”­jŸ=ÈÌWLË€¬4Ì+aZÀ¨pB$Hà K,)¡$$šRÓ”€XJãP[!4–*¨È¨è¥Â8ðÜcÊRU‡r…RÏŸlËç>rkúT³kt¹Ý^f{PòT9’ó&/ßòÂÙ6¿úŸ>%:³Ì×Z0Ì2ù‡?ñÉg |Å3/¾ïzù{öó—TÓË÷ð½gðÿûä=^ËŸÿºõQ^ðŸ¾Éw™Ù¿óW›–üÏÿ¿ä'üSL&SþÑÿöOå—ÿñÿÁo|þ‹|íåo0˜Í¸ð‰pá‡>Ȭ?ÞÝ \¹J·Ù–¥#0SG4˜­D”i“„^ ½Š8GXTâD¨¢ðÝ}¬ 0B(êBmRÐìÍÉêñBésBo0va’ ¶&aVÁ°Ï¼StjTJ4Ê1õ¾‰¨%ËROÖkK¤qGZÒ («ŠÊå8—“‹gFFF†zËzÊ‘VÈ]Xâcg:òÂZ®Ô9³Ü ÞN%Œãö MÊæÈð+/ÝâÊîž\Nä'>p–›ý³üÁvÉ7߯N)§B®Ä=#Â.í©Rfb‚V© 6®Cé$ª¯Û¦{ŒíX|½;W¥›;ª("}âjÍ“ôû3l`Å$u"?¡ŽåJqßíR6„ãXVÔH¯?aÜ›2;jÑ2d¹ßàøjƒj4¡¼Û#~ú'™u ƼMh,c)¸\Žå¥ùŒ-°çrnØÌxÿrÁ¦[“,lÃ|@5ÜÂÄ©¹Á*$—q6–(h ÚÍi—)  bzűßk‘ž€îêˆl_oTÕaY]‘®ßå×FsÇZqNjù¦Çn“žßdžFö8˜Çh¬Ì»³#zŠ©RNYË©™p}}ÈÀ ‡óÌñ!kœuÂáЈºçŠM§*-N¦uÓ]Ig3Rë(#K¥BÃx¥P›&òu=È-Û”8ÊÀ Ï£ŸcÀKD™×A,K'6ĵòÉY– ~ê~ÌûöSM ¯ÏK9è[ ¯Ï ÓJ8½\“•xN¥©c.ŠÍê’gm¦³6;Ó:éÔ<+KVnpøÄ•SÙëe¼ýÖÃí)nÙ ›ë”¯®È¡'"ÖžvìíùEеTäÔ(•\;„Nˆ©<•JŒS‰ŠÅŒ0 Ï¿ §G?L÷èž,}ö±üéß#HºÈ$wÜ)ö¥Ò~ÖŠˆyä"^ "YìV>ª q*L¦žA_¨5r*'L^¼‡ùÜÜS•† ¤·í™æyì¹=Üìp÷NEÒ\õNv”0›¨?XA<ÌE›#†‡%‡˜Hõ=¯~q"{›ý™:ˇZR¸„îÉh]¥PGÚÉ¡³Asue- ¥¬Ud±TËCêëcšÝ’ ¬j£e«)®ž"XŒSlé°%²ØxŒ@°ˆz³#6‹Íâ+¢Zã ¨E4«‚5Š]ä7Rœ¢±!ë/3¸uœiÕ‘¼Š¡BRÛ…íg‰Š¥E¼x2“Kx›PúJ U*d®Â†ÛcÏdßg¨”Ò°Z±x"T*l¨²ÔhÙ#F0JeJ ‚%¤&5RœÍ0V %@²Jã±rM32—p²8Bè bµVÅ6ocôE˜p³½$sÏTCZå\‚fÊÇžíðñÓ+œì4%Œ*ž?Ó”Ÿø€çG?ЗŸýXÌÑeøí¯y¶ òW£ù¯ÿ’›ù 4ò—Ð||÷ãÈŸóØïÕ È÷ù†pêä1~ús?Æÿù[¿Ëÿø¿þª|þ¿ÌÃí]¦YÀhc“r6#i69öÜ%)çs÷úòàÊU:+Ë4Oƒ™Çä9U-¢ª¥x§VžP¼—*XL)½µ ê£Mˆ„yKH&­­y.ŽÔ uÄΠ֊3H ÆFTW_Å8?zDŠÔ€wD¥I›Ì÷6¨wŽI·EŒ•Hözl˜ê”ÜϘڊÜ(an÷*yáä*ó¹®¼p¬Î¹¥šõÂêÔQDE+¡4"â¸FÿË—orkp¿ñS9Ù9Ë+÷Nðú e~ç2ATRlˆ¶,ì8i \ S9¨%,u[„ÌeóÍ—ì¾M`1e%åpCòlGÊNl ˆâ\AËÆr´{„ ÇŸd¹µJlêÍrëÌç ’U 5`m:goÕpÿÿe-Ëîó¾ï[kítò¹ùö {¦»' a@"!€¢,‘ƒŠ,É,ËU~ð£_\.—˯®2Ë–K®²(SI Å @”( ™LìéžÎs;Ü|O;­µþ~8w@€'@~ðë¾÷œ³OØkÿÿëÿ}ßï™6\5DÜ+¸î 'ÙdˆüÒ"kºÆ2.¾aî»Ä© m¬å=ÆïäŒãõ0œyý¬Ešç(Ôzg-ØÀM‚÷Ì=(±7|´< –dnB£PÓÉ<:?šù£!Vþé«¿¼…ýzýÅ9$ã!s%ì4DÓ 6{c¬¤9FÇ}˜j“ž|£´‹;»oÂRyÒUj< hܹ†¼ÚÂhõ4.Þ»§oÝA©Å7NŸfG…X„æ¢s0ÔôZ‘’qÔÙGé-”1€VD±RjôÈÊÚZ²äµ€ùb0š³éGé‰8 W B¢yX²ÖËa#Ì$qqŒ¥¥3 j- w·8ébyR"ÖÌé'éyä“”P4ƒ¸¨äMƒŽÍPp~¬ˆ‘Å~'CY”0Öƒé̃³¼¡fïôP|öGV½øeLœƓ‰#¸=Ná¼gœÍÁä16–®³ãN`„Mì`wf ’˜ ¸3# kQ;¦°•¬èG§‘õ4üN‰^1‡ÕGúˆ+9{5Ëi Ic QyWß,Ð=="Ç “u4ýíùmÈܘ7¼7­¦«e,+åÌ‚zcïØÜ9‡(ùÆ’kç€fˆéÒ€ñ¸àib)PhE5ÖÃ6SGî öLJ3‡Š%¥àµ±!âPq§•!5 ƒÇYc±RÍÑ5%¢c•ÐÃÄ)•)X¤æSDYA<Û-ðØÄáñ‘càÛcËk™ÅŠQ¸ØˆñÖÀaâ Ï<‡…Z›Oa¦ègä6/ ­g2( {ªG¼j1Õ¡\‰qýÒýê&Œ`b…ÛQ‡_×Û<Ñ ÐÛÐ( ÕyàHB«PÏR ­½"<‰H€!6EpR„yXP'SVR µƒÓž2mpVÑÍcZG8XœWתX>Ñ@n=ŽöFìÞPº`+Ÿo¢òãs·êH÷&À¸$´šÊõ¬6sJ ðN s!˜(øÌÑ)B;Û=ÎCÀ{xêXÒÀanÆz‚¡ÁÂ#Ã"¤EhlŽdÒƒr– ‘WšÈªm¸ "æcÀ9Ú 5Ö%êY‰æDu<œd ϵVˆø®p´SbéT‚ñpŠ«oíqÿÀc~)Ás'«Ìv¡Û= *:Cwè¸Ëí§êˆPÁ¹FƒÑ“þ MõØ'ÑüÌ ý÷~ƒ•ów)“³”ñ:éöíˆC—!8@Ç™3ƒò1’qV*!›Õµ¦Â¹Ç&¸ø‰L­Îzh0W#n—ØÛs4 3Z¯€yÀ›ÝíZnlVÙéep3ÿ4óLpñYƒ$ œÆ pjVƒ4=z¢ Ӯ㵯Np´-øñÿnĹ‹1TbY?Ù[[d}fþ±ž¢ÚaòycÌñb—6žB)‡ , ¡ O,lÕC# cp–ÄÌ")ÇÜšY£1cg m) ŠÐ€òŠ„žÉƵ§¢P)‡ÜÕ0JçPú˜Ói݇›fË•‹§sH¥Î2 á3GöÚˆ¸‰Ü&pt˜è”²P xL¼á®›bÏŽØózn‚Ÿ2 'd]y4´C¤Q¥¤ÖFXõŒ* ]‡…1sö¥<ÈKpªÈÔŽ9”Ìø7Þ òÂ#T‚#”x %~"_Å¢DˆhXW]´…€[¸*^7mæx<ïcA Z]‡ÍÌi«Ùaý.-ìa©5À£›B‚¯]þùŸ;L²U/¿WÝÌXãò?³&ÿ°Íð½& ò!=ïåù°š¶–Â÷ѽ×óÊû|À£îÍyo½ò~çþ{G?ðñ½{ñà;¯cîÔ&ûÜgeîÔ¶¯^ç­o¿‚¹µUÔO­C„ˆzSø0€CñN¨ADÎSY‹w ÎèwÉÚ°5›ÌТz”#Ίða/â-"§èš%Z+ osðæmD᜔¦d^­$ [ÔI ÓÝÛ [ËBïa5XA?݇•õh Zj°RÁ¹…üÝ“‰¼t¹ŠÕvÈÊÔ{™Y4ØV ¸1*üÛ·÷ð/¿ó×â—~"Ãbýùó«Ü(<ýÈ·0¾·qC6cOê.dÕÎ3`Û¨c®]E=ãÖµoÈþöu†ÞC|Jk‡âÁ5ª¤J@Äù’sQO­]–õ… †&€V„I”—ÓÞ¼ I3 ’yÑ0œŸf-ÅØ}j’ðã‘`§Cs£Ìsð©59Ñ^Ã!I«Ä‹bÖI±´a°Úˆ¾>DP‰‡4(…µ<šfH…âµL"ƒWuSjQ²^.£™“Ór„eÀØyÑí&?{Нí ñ»Wqoc»'އ€w2­FH¦}nt‡Ø[dJ°e$\:óQ™#ÞÞ~m6­¢hµ‘>ú8F#„÷obZŸÃ`ý,.Ý€®ßÂ`±…—}D¶ã*–Ds@‘”²èÁfdé„Т‹{¯FpF£> A‰ñò¢Áä }Scôà¿Ä —ä×ã+ÜvSìž2PÕRF;Ûw{lÅUÔ’P4c–®@g´+Y™Ò P¥Ac¨`6­YxØ—ú´ÇÈg2 «Ì£'ö0°‚•àg0m¬8£¹:¦y•ñ$Ä':c|t˜c3œ¦¨Âs嘆¼çZ-Æ¥Vou,&¥—3MÇ…xÆÈÑY Zz!œK§„± ê¶DÛÙZˆÿÓlÜâÒ9ÊQ†SÝߨ]Y}½Ä³ÿ®J¿çáG= á`Q# ¬ÂÐ*4Çál!Ÿyq‰?B Pᦇœ„C-ÌY«±_ËAuØvܔìÁî´~šH-¶\Y–NÕÑZoˆµ‚ÑÑ‚ù>‹j‡ MàÙèz·5v3J `7‡œ:¸H£\«A9òc4©Ì|6$¬!ÂÂ#(un%´ ˆPcª Œõd–áßõ {Ø<`ÊŒQ6DPdp&DVk#­¶`£.JfP¶2Eª 2c0J4,YŽù‘C[ IDATý¹µ$ ç!AH^z~6q˜(ÀS T=á=i%nbqã[%Ï?×Ç'þî=©,Rµºâã! SFáq.¨.@å1Ò¹¦óG⢠Bå JxmAãæ Æ*8’j„JÆÌb}?®Mµƒ¶„¡)¢ÔìS›õ+BëbéNÖ1J1ÉÚìOVÑŸœÀx²Àq6Â$bUÈÒÎ ¾ˆE K1UÍ2ÆzŒL°Ç‘õŠ`.÷ˉ ]I/^Jqôâ0Pš¬*‘(Š©’ Ñ(òâ-XzñaÉÔ AhX¥™©ZkÔ\Óbµ£‡`5à ¤¹@àa”à62lØ:.»&(‚Zë{[ƒ×Ì2BžÉ{\v9¬ªˆÏª”¡FÖ'²4“°}:Üç3 hÆüÊ+MüÚÿ6ÂvGÞ¯Ò—°9ÿ^>‘ëëþÏõ€àý< ´‹áû¸ßßËØòA ~€,ayöLJWýMïéûÎùÑ?çæ³€“Á€q­ ›eœÍ2ìî¼ÌQ@Â[‹í7®2ªWÑ>¹Žs/½ˆ°Våëø§X9{F ‹`wZ¢Y… 4½(’T "Æ:(ËÀ•‚­)” h&q7G\8X-HCˆf@O‡À“ãŒ7DʯRÇ5èJ’OP6L0 b€P%¤>Ž”Í3dõ ªAëG–õúª,Ì5ñã§úrˆ3gbëQÞÀw ø8„]¯Ñ×CQÎ39Þ)úÂkÛø¿¾q‡ƒâ¿ú3™´Ãïõ4Zó×øó?ó,$wäõ¯/0e"\5ðSAu’àd}“Ñ|q-‘ê´ƒk/ÿ[îìÜA Åhø@AŒE •|“âáaÙ”:,£[iáÁáCìÝFeî(„¿v >ÍèL+c‹²êqíGç9<ÛêÔàÂõ:Ôí.íá@Æ]B^Ž1r]øv _²iÆ…xANÝ3”¯¿Žª ¡ƒHÒ{d¥EgšbN+h£¡äZã+aоÊÙ(<Δ+ðnÊiyCÀ(К9¸…%˜¡‡¾²‡­ŠÂá‰5Ö†cq(™W4Æ],ö'X$bÑ €.€ó›4Q‚›^¦õ³Ü©¢=î“r%ªw®aÐZÂ`ã.Þ»¾u‡ u~ûò%Ù‹«XñÄ XøtëJWÀÛŠéÖÙÙ.®l   Œ Ø<¥+ ñ*O°$l¬PÎÅ€&5ffFTB@kÌì Â¤>es“BV+²²|^»ï ìO¸šyÄÚˆ¬Ã4\ Å‚qÈPȃ!^Iz²ÎåíRμrSãf-ƒt„ƤċÁäøñªpŒà^“ŸF ¼¸M|²ÓÀéÉÒöãj†‘¬)ä©÷Oà0¹Šaë>ô§°½mú`lÚÈG=LÛM~÷{CLË—ÙÅ¥Í`„0J#ÐM©ëý æ°Ê¸@}šáÂý1ÏÞî`sgGúq…ã –Èyxd>A`5.ï÷ñË_¾¯÷ñH œ€ ‚±ÂÁ°ÄïQ 5ÎUÞìZ™XÁ™¹ Õ2)  øY€ÖÍJ>C±™§l[dóJ¾ü_%ÜÞþÎ2,Ü-ñÏ×å›üñÛüêwVàÞŽhwSؤß_ÛæÁ†‘VX›Å¦+G•zTR-ˆ"³ÀŠ@HOqÜq§bÁ ÖEp±¼ SŒCîÕ¦¨!†TgutÆ-ô³ ãF!yaï/*È `–ÙÕ>ô›]‘g«°Ïµáëx{J^C”"Œ¤ðâô,ýNy2û]£3„â a¡­P €ÒÁda F*‚7”"|/3s•ô@P¦f#h[PL yÒDVk!­µé‚Æf°jFøJ&‘¢VQ‘SP^!žz¸=‹h_˜Ç- Âgˆ'7N!í4¨Û}¨8§÷ µÄ`ÏáVo‚ø¬ ‡¼ srç?n¡[€©X¼ùÆbj‚° J5+ت³®™&™ÇÕ¯|îs\ü˜‡¦tZÔlŽp£r¸å ‹VGÒù#ºÐC9år€žJ*#dꩵ‡× @œA1˜Çî;ëËw«ø7_YE«á°¼P‹‚Ò$T"NÕà¡qÐ;‰ƒÁ Æ+èOV0š.`š·0Í[´Y íL4ENi’ A>åÒ™_¾ÉVëÌ4G¾;¡‡¯xšY>Œ"æê@%ö2áÀy4ÇV$¨†ÂJèEè!ôô±Å´‘r¥˜†©¤áy8dNSZ•b'ÙÇne£¸Ï\!Bj,¬V0ˆH–3‚HñN`´ç Y°5¼X. ô uFˆID8À€9^ <žÏ;Xô‹ ?­BÆ6sLû""¢æ6•ΡxÁÁïÿÇ_øÎ>þösÄÿ1¾rÅa¿ÿž Âce7üa¬òš¡X§¿+ÁâÏðoÛðþÿ‡‘Rñ=ÆGDRõ^çöAÏý?y-*rõÂiœyö2Ú«Ë\Ø8Á3Ï>SO^B¥Qc˜$œß8¤QèÓ#H(£)^ø½,’ÙwvLœãöëoñèÖ].=rާ^xÁtÿˆí+tõ˜*/¥èâhÒ³B3‹f’æ4 ò(¤7ж¦X&@8,Á‰Ä£’ ÂÂÌÆ¤V,'½Eƒ>¢Ü»Ëhé kyÂ`š3rN!¥¥ºw‡ÕÖ:}’¶ T«`)á9ÏgÖˆ¸´(–ØÍú… ÝJ…tÊ:&F[à_½¶Ã?¾v‹Oäø{/¶péò“ü½/bšÞççòË8Ù»‰ßûßÏq«;‡àB@_ hŽ—ã †­6j~„òàï\ù&w÷¶ÀjD„¢èU êÂQâ„>‰ñ$=r & – ‡5ôM…“̳rã:u:…×6 Ð*pçL““&™æÆƒ*q8B90}lŽs­5öÖrÂ)f™#‡ssó\t|óFí*µÒ Iˆ-™f)Së8TOn'†·  E¨Ã†­rY–˜ù ¹íAÔòú<óE¨qÁa‹sÜèå-Ù­GHò!çz=.äÂVY²cÈ‚K <¹ö¶ns0î‚J!_\Æà‰ç`Šœµ›W8h.rrâ4½wϼ}‹G!ø Ø]XaÓknÀS•:¯h¡˜Nöé³!]™R”‚˜Y³3ЉRÇÒ•(4i¬Gu”Q¨YT5g™wÖ¦†Š B1< :ûP~{l¯œa«½Æno“í-F¥`9÷H éÖÎqÍ#‰„^hÑ`„+aƉN^ÝåÜö=î½ÐäÖùyªý1⎅r¾j8øÈõ•I[1lzúkG¤÷?ó)¤ÞóbÿgB~~¬yjcH6„HƒuA¶û«Ìã.Âd‰µÆ2yŸÍ€.ЯiëC†Gcºû ^#eÓÓhOm … IR Ý3ˆ=•ò´oL˜Þ3k´ÈGyxƒ“%Í~ëAê¹¼ÿ¢­5}Ã锉M8ÐÓ¹”*šÉj¢~•¥Œ§Ÿäáä£,ÌW†o¢º²NV 98„ŸŽaËϱ̾ O@ehi”¦Q¢À¸PR‡Ü•t†4Úr±WbáÈÁ›‚g†%>¶=äż}.S¾xm/]ÝåòÁ”iÉt³F[Ñ„›-žÊ ;ÇÞó. £ 8*…gç.VúiAU:Ð éXGzT3©ÊŽ'÷>™ðö³?õ‡=\¼[â.MðÏò¥í:þÛW—É»5¦©Bp¾À?vıÙÇå¨ÍM]§…Ð+SÄ÷Ršƒ”èLЩN™/(€ ƒ@{ÅY¦ð,=Z Ù°FÍ5%8¯&D½Ë¼6dÌlÌÌÖÑ)ç¸= 8ÓŸj3x©‰ÓØnÎâúè9ÄóŠÁ¥%²á¡o ¡ž®BêPš'Ô£>ÔÌ+3£AfAâÂ’BQj’å1BU:è´DàÔÌÑz¾›~-PÇ‚!ˆ€B*ç)âIŸ„Д9E+¤µ6&­%dÕ&ŒKg²_q†ÊŒÊ!RºØÑŠ£”°-ÐΑk­&Ÿ|ʰ@ -•UÒˆqg™´mí>y@c3Ð+j屮§0`”VF ½äN“.D1haxÿ4¦OáaWóí=Ç‹gS>uiÌz•öXL[ÌQGg°Â[7×xïηè\Lë ]i¨SÇJõÕætQ3{XظÊFã>jÑ.km„É~Âö›tã‹~ƒŠdmA£Qê ‰@£IM²#ÒdJ×Ì%ó¤@—Ì”0w¥(ZZ8•Aà(zØ% ÓA¢Ñ±xXåÒaºô|kõo×ïñ^åµ÷hæ1&¹…-IZT‰±Ó|®X`ÛV°Jƒ@íqñJP>›w¹è-3Tà¦1ebèRa6tÐá˜ñ܃dqŠéhžãSm/qdûÜ8ÙãÿôËÏ=ªùÿ±ãvGÞÍ@ÂûÔ¸?LmŒ÷¨ßO‚Å!óúÏÁ¼Gg$?$ÃC~ˆ ˆ|€ŽéƒL@¾ïÜt`×*ïa¾ïù˜A騈¿æ,'HWZ4–çäò½È¨£ß=ÀD &•Ò8ýÌãröù'€×¿ö2Š4“îöšK 2Ø?Bu®I›—H‡£˜ÍÜÝz€oþ“ßÄú3Oðüßz »÷$Ës„:K"ˆ€Â¢à sÄy RIš3N"GæX‹:kn<‰4—j©—4*i4‘¢@"œù  èµ3ô÷ïHùð.ÔæETzÑÄr¸aM‘Vdx®lÀŒ'°yã¹'Ý©¤ý¥(æè{‘ÄÀžª‹«‡P¥CP8š€ò°ßåWoâO®îÉGžìãç>y‘íøãøÓ7”Möñô³[¨¾³Ï+ÿs‚£2}D )QÑ5ŒG{H;wÙÉÇèîÜ•<ÁT+µÐ‘*ó`aÅTÛPós°q xOCHµÖˆEIÞ݃Yž ·SŒ‹-E†~*ÞÔ¡¦‚潜¼¸Ð ·Ò†l„x1E× ƒ1|á!â a£Q©wX´$Z#Tj¶Ù(NF¢ ã›ÊAf¸K©å–±­H©Cx)¾[&8±j™Ðâñ²½Ð‰^ª,ù ]“ÀNX¤U$˜+ ôŒÃŽæç6qzýIÜ?ºÁ½Î–(­˜.­`tñ è,Eóí7$¯4-oàÂýxüÆ-ìiàÚr ýö+ž2}†4›ºŽ4ëÂcDp)à´æqÙâ§µB¥¨‰r¡ņÇ%ùžëVþÚõIДVti)Š¥¸2F”2ìߣêåĉÇYÝÏ ¡1³¢VaF†€Šnx ÂŒõÝ»"ŠÕ³h·7=°|pj¢ R+ÕÃ)¸dh®M¤·Ñrèþñ æ²¼]›ÇS×aßÈñ™| Ÿúܾ³šóíwyuqb¨îgl=ø’,Õþ!òGce8–|”bz PŒ*bæë¨mŽ¡n~ Ï)HÍBùE´¹†*(£íɲAõ%Ò1F¾·O`T"&óPFóÎå;RI^ÁÆÎ£˜ûÖóØ;ó-¡·RB P±ðƲh•Èûdæ+˜7…} 6 §Â~é`ŽTw¨- ðQ*÷%¸0¯fW‰ÌÅâ­@¥…ÞÁCaØ&½¼Õ’hDädo„õ<Å2ÂAa”0~Fg>æuPEêYš(Ü "øÝÅJÐ:й«É‰Ð i½Pè&"ْ̄Áµ²ö0åãoexs¥ÄŸœát?–Ïn×)##ùP#¨zþÁ‹GøísCùÔ½_¸éOdà\ïÀÉzŒ£ñXþ}Ú ãXörÇÉéªT©á{0×( ¡•B-›€'JA{E㽜R—üw—&¸·<ÄÁ&ÍݶÔj ¨|º‰í…=HDf?¹‰ìbSŠ·»Œÿ²‡äa_Ü™1ðéˆY} éoˆ>Ìáž­Q<|·çp{,P¬TfÚž½1¬§Ä¹…ñ iEa\SMÐzÆuƒšäRÍlbP&e æTâ1p3Ý™@ô¬Ùs^j}@ l”0­Í¡ˆ«¥p´ö(¢éH’Ñ+Ã#Œ44½ˆ˜ºVÀÅšq™ËJé[û}, `)n6¶ñJJ'Ø\­áéjˆKݲIÌëë©ýÔÌï=dj-^|ñ¢`œâ7ß‘ÎoQÆUDA“-;’“’Q•ˆ•¤'šè¤oï qõÿyMlé ã. y}oŒÛ¿õšLv ^½v$Q¢¡€|¾@XŒxqü,‚å«ö›è~ÛPù¶äÅ ¢^)¤Z+±° 8&($)³uüûÅÌ7ÀCÞ w3•‘hLSäžVC¦pPÕ¤JªPTà0.rôòO^Öp¥àßöô¢D9y—.5[g¬\)ràîëK/*¸YJà÷B(¡/E\Í1ê:ªD<…ÍHKÇÊH¼5èõ+²Á( Dëœa– „PÎ䔥€ÊCWJôŽê¼uuMÎÎEÌûmˆq£‡çžÚ]É1µ‘e ä£eÚÆðP°;(øÎ[SÙ¹ÙÅêYƒŸùõ=¨,@8w Lˆ¸},Â:å8ìppuÑF(^IÑoS¤%A½D}9@A;[.œ†žõÐâ§R:LëZ”–få¢Pb1ãÈÒS$)±ÅqvÆL‚HÒŠ@h¼h€n¤eéÎ 8Îx\as’)d…¼>‘›>Gè5Ÿ²óRH¨@#P{˜#y+¨@xºè`ÎSÛ‚ú‰’2w(SBGcÖ×ïˆI†(Ó §G«2Ù^‡¥BVwòÒÓ~qAãË_søïÿ™Å­ÿ½0Ã2‘÷¨Ó?ìäý$Xï¥túÀóC$`½Ÿ?â‡1“ó/£Í÷58aãÜÇžÂÂÉx羿Â1u9ŒgMˆÐç?3P)ؼ–6ì»IŠ$὇§Ã©g.QJ÷ˆÞ9Ì­.c:!ª$h­,òà˜†ß÷¥ŽŽðö—þ£Ãžú?K†ÑJ3£—tV ’-…ØzN⮘¢2ּ͙+ǤÇlt¯ ¦U žælLýšƒ( Ñâ0Kòâfï) WKPäªÝ Œ=ò¥Ý• s5DÛ•P&tö Æa­Å½£m¬»ˆàççéÚ'D€zì`B ÚÐøúCþæ7ï ŸõñÂ#~î“OÀÔ~Ù†Wo°nç°òÕ7±ÿæ_/Ád©Â ¸J@YäÝL=H:…JGд4q„ž(B*ˆ¡ædsVß$Å{Ôt„e3LJéÒb:ë5­æt”!E€‰š- UÐR‡@h8ïYÃ ŠÆD¶gÙZŠ`ô¯ ‰;Cœj„lK ‘:Á SÄõˆj@‹ˆ.[N0¯Z?Ejf‹ž€^EH[-îÀÉn™31…ÃQ« å3Ö‡T§š y«¦Ø Ã 6WÅÃÃx¸Ðdº¼ŠÑ…Ë0“š7® ­Ïs|âÎ=ØÆå›·Ñ!pc¹ŠîÆy°ÚÆ*Û.Å »…°ºVáÇ» ·°e Q!œf7^ (jjkg†{(çè(H« m@ð¯§Åñ\ÏÇ‘2ï^Þ; ¡hHæ¸\]‚[vÀÖÛäá.dùبnÆŒzCêéaaÙo7ƒE[¶E;¤KS„]Åqï/PÏ>‹`ò#È¿‰bz•‘=‹Ò¯Â/£ÁÒþ,¿ DC C8ïPŠƒ&PJ#Bæù¢Œ\¢ F ›‰ß鵂5jæ50À,™põ(Àᘰª©…XG¯Yüìqu,ub^ÎäVN„ aÌYÁK’•Vˆwž4è­_øÓu«ñÏ;ÀwNLðß¼±ÈO¾SÇt7¢Ê¾øéüæÓ|ænƒ¿v½¹NÊ^ÿŧ—Í…p%ѿԠ5æß¢’{¾ñ…mìlVøó¿rR¼ñ÷z?C<èm˜Ð ³™·HDÑYb+¶*ïfüö­j— Ÿk‚2so“8Å~«éjH»Z…j7à¯t¨^ëÀô˜OÌ#øt“þk=¨wrhM(3qVíŒAÅÊlóL¦„wH2'º´˜ÔBfU§I^€ÐðÚP;3Êa\Œ¨UA¡5¼OáQÂxB`èdFí¦'‰†I3T‹}$ÆÀ´6‡"©³·|>0¨ö·‘£0Š$% C\:†›: w°¾<@z· ?©@USŠóh.Õ ÎσKÅLE³òÉWpø–ÁŽæcÙ¨po·Qªçh¬ƒ™æˆ“7ך¸³ÓÇ^‚ä#—VPoTðö½þÝ7ïC‘Œ Ö5SqÈ•€¡B{àŽïàí«ø—OÏcu9¤µ¯ßñ°=ËÇŸ ÅÑñÆl !d¶vóØî8ã値ã¬cðèÀ‰hh#(áY1*QÍ*P¨)Ó²À0µÈ2‹È,Î:,‘  Âó»ÛÜ2“\»B°{ß½¶¼ Oš-–4 ðNxø ÀxìPCÔ*âh¡S¤Wâš#N²“^:Iª¡6ј4NAy(‰-l"í. }°d¸À\•ˆ[}T–QƒIZaÖÝÀtÔ%Ädà±oŠ«¯Ž±u3CoÏ1Œ=^úÙ–V!¹‚ÍBäà²ÞŠaå`IÝÃ;P²:‚¨J‹âuÀ'9m ðp˜¦„”=`Aã<úa†2Tó„Qf õlæÇÂPÄI6ÛEörþ'5£hèã1%´tp£3ÿW¾^zЦêp{‡ ~,[Âe×`EH¨qs(W‚*àɲ9dE~ÂgùÔ²œAmˆú‰;0IŸÓÎ &;(²*ó&1]Ò2^Œ¹×Õxó?Äø_~/Å×Þþ+búSgZ¨Æ¾ùö!¼¼¯÷âý, ÿ_¤i}˜¿½g=oÞC¿õaMèòÿúÌZ(@mqŽk]@\ Åå‡6¡ó¸IqÖA¼ÿžz¶ø¬?vTDu¾Ž£­!Ébšáþ[7°°¹6»Ù*…“_D¥YÇö;2 á§wÅþ>üö°´r‹pK>§YÆ“¶C£ Ýµˆoïa–#ÉJŒâàCgˆçF¨j©Ç4¤¡Cð®ªÕ{ز„Z\‡Z ?Ôìë¸páO0üÓ`üž\{é%Þ¿´ ws Ô˜¹TÒ\8qÑÕd”÷è´$€+° @/¢JJ@X•COޤC ü”t¥0P,Ò £ñ¡H9áü|sõDâ+B}Ø&ÍŠšV)øã›€+ HNI¥`ÇSÄ®œÝŠd¦ÝõIÈrBèÃ1B£%0ÐZŠˆ0à,Ã}`€B H0c¼È e¤ï`s02lÔù Ù‹jQb³ÓÇõ‹ÐÞ¡9ì#ÉÚEEŒŒ±CaIàÑ¡°vön"`¼º*£ —i¦cD‡/¬a²°*:'vü*Ì€"„Û 0ZÝ@ecss‚â¶Bå¼AzdâP¬xäc-“n„¢P4O&¨'Š^ŠiO‰«I‡ú$”IµÄ«'ÿÎ]Æc÷>JÊö“ÿ¹)¡&†AâŒ3ØFyÒ‘ÉäËlçCñð9ä®Jt¹‡øÆŽ{`W¯ ü§Iœ…÷ß ¦`¹ã•ÀÐk(õnÀ(¤ð»«Þ÷!ngY‘nµIôŒw1»E÷K2+µpöݪòøÑJ(2Ó¡¸c —óBëße¼A:O‡(ÎÔÄ<\eøÕ‡0ÿrÉ™ÙJ{c )-T¢‡D¦g ×`oæ%\-B ¸;EY `”Bõ0—I°1hŠ Aé`%B©ª3îQj¡ÃRâjB§B8_€(a™aVLkøãDù™ûEÿ•'  ‚leœ`ÚXĨµ¯jÝû(HdP˜@`‰ØY±Š¬&W¬?¤\Y‡í·Õ'(Âæ ]Û_9…‡¯½‰‰9„ú¥%<ù÷Wq·s„‡_Ú’­À¢i S©¢+E1aAbW+ @•%‚Wï#ÏJœZmâñ'Öqþü2Ž3¹w«ÏE#RD?r(E =¤PŽb)e°—ß…lõÀ$ƨu5='EáX óOX_)D,!~6ÕÑ‚f&Æ ÕñE/¥U|wh¡…ïIïat€Z²ˆ8^‚x‘£ñ-Zxd©‡w³éSsa›µ"—ñx“k§R¬o¤xë+mÑj¦ÅøÙž÷ÿËÞ{ÅX¶¥÷}¿o­N®\]U]û†î›ãNàˆQ ¦h[¢ôB²õ"ÃA€_ý`ÆØ’AÚ´ 2Á’hq8—a†“gnNÝ÷Þî¾]ÕÕ•NU|ÎNk}~ØÕwg†òAè<p°kŸ³ÏÞk}ß÷O‚D¡ ŒÌ©ó>ªBŠh€ Š–™²yÅJ{a…î;‘®wÆ"©æ­£YÈì`àÌ!Á£7±¶$šDjŒG¢\J5¤G+ÌÎ;Àæå–DÄ2·O–°e¬Î‰ì~˜qçF—þqÉ3fX¿Pð ¿Þ£Ñ umi“·—D­jÖïH9Ó )$5ˆ Ro4qŠ EÈ|®¥ˆ58¼Wõ)’kS"±rWpàúø²ÔÐ*¾Ti #Ä›*OØ›jÿ0Ìwö5Uî÷ñ~ vT°€(ÿž÷E…$DùdÜæ¹Q‡KBL¢SFa×¢&FÑ'òœJQtpãͦ#õ9µ®Æ  éÑ*ã»—t×etÙêlÁŠ‹ jÀsLWØ;º 4bËõ×®ñ7ò¯ßéñòÇd…ÿQ"tý1HÉŸ;zÀ_´×ée«/tM-"áŸ2 >›¡®ü‘†Ëbÿ”Kô`º{zœ5•­J}>äüBc ÙdÆâ…ulœ¢$J6žâÔqöÚU6®,IGÎ?|…¸(a÷3?‡kµÓzS¼­á˜ƒ³†xª4gž2<'™å$OÒ¥è8">šáCË, i3:e Ψ7X,R–íEÊV›bûõñ£Ìæb|§F“z3˜Œq­ÓrDÛvx¨æ¹07à§ JÚ´êml;ª<îK‡ „(˜ò¥÷¶øÍ¯3·¼Ïýâ:gì/‘Ç-Ò2£4¿ Í7¹õµÇ W¸÷Ÿþ'%ÿæ;ò³5:3Ãùb ï,Ýá-J™"šÌã¥Dà _äøÙ Þ{z Ò•eBµXï™QÑHÊÜ0·t…ú§žÃQHq<€¯¿YyéÚjy2®B‘!—3.3ZÆ2ôÐÊÌã2ˆ¯4è\œpö«J+®“úÊÇ_U™åEYbBK‰r'´LBUâ¬`¡p´ƒ Ãú Lkž^£Éí9R)±Ó’ ‡]ºíQe~pBs:cmZ#.CömΉ…ËgŸ¤ÕZâæÝo€‡éú†PÈ¿w‹Ò˜ºÕÔÜ|Ħ;Ű…'œ8ÒÀüàê+×TW¾ ~Lç«<éf-‰ꪆUseûzˆ%ç—wÄæŒÿDþþ›«œ;ˆ˜í'|ùúÿý—ïóè æ¿yyJOZˆ´Ò¸=¥ýFàè,½çÛd­”Ñ•6ï?·ÈáÿzfÊW¿pÀ»¯öøë9¢‹Mô/¯OSÖ?Ýíro–ñÕÎða³€Z°¼—òôß3´^ˆH³’z}Ìñù·Èfs´6iO›4§MBÒ[<Á½˜“¯^†½…Ý«¢ë5ÜqŠ8Œ@R š{Âã&ÏÐ0ÂÏ…è¨ P¢qA.žQ£ÎÜxHX¤x¢T6M¾ï l5Ô$XM(™"ä§.²†B _ýZ5”Rzâñ˜01Z\cÒÞ…Vo/PBia†EJË4+ù“·î³x©Ih¢SPS98žÐlF<óÜ/ý“/°³+%K“!«¿zŽÅ• E˜S2°BS Uzúº¡¡TÅ¡,=yo†ôºcÞxõo¾qÈdR2g´Œ!%Ôf–Å‘aäŒÌŒI=`LA‘—oá½’Ø‹|ê/mp~=G‹ÊÙÉS±Çb+„¡2šVˆž5à}õh䥡Ù, œƒ@!"@j jÉ*I¼ˆ—t´Íd˜‚Õým*!y¥,wf4kB-v¬´ ŒTý÷’ÀQT!7šêYŠ"O奊+`ãR̵ϴX¿±´Ø%\2jŽ™õ›ä·71!GÞ눆1a¡Hè(½%ëw˜Þß$ëÏaCŒ’¬îRZåpwÑõ5Êö÷2ÞyeÌÍ×ÇŒŽ š-˧>7ÇcOE,¬.cLĨ_gp, &ö‚'‘i©ô‚4cìeI“ÊéM-5š•AÎ)-Ы¶º:#Ä33%¹šÊX *«à|õ·x¥øÓ2•êþVpZ]SN ô»ÙÀ¢„ÆcùWëAélenÔdÔès{–ðØx„”axÀëa Oå'Ìçž|ÒÁå!Ù  È@LNcu‹dqrVãø½'ÈfM&­„ÁÅ€´T+N°NX[jrS†xUZ1ÿðï>ǯ||“ûGSÞÞáªõ¿€ °öèûÜOH€ÏJÌ©xöûCm­ù]ýÄkØ>ðªA®~$0çt}A˼£,6 X8»Š÷:g+*°õê ¶¶9{í A’f9IRCgKnHÖ;fR«aÌ"AêQ“%žÁ¼%ÉhY 'Ô&KM|àqÍŽ3ðZŠÈŽzæÉ⃡²À¬ž£Ü¾Íä•?Â<õèò9|^"qDÄA›´4<ÚÎøé‹ƒh´½JÝ–àJL±ñÜëñÕ[]^ºÙcqå€ÿâm.¿ÌÑ¢`÷eÊùo±ÛŸçæÉg8üØC÷åö]j£Õ‚ÓØ.÷ºt'’»À`Ǿ*Hæ4“®3™¶–I6.alÈ4‘g=š çh®œcúÖç .\§õóŸÅØ—O™©Tiñíõ+›»y‹ <Óå¬à½Ò²†çë!wOõ´‘LOi|ê«"\KÅmç9Q³Î‘+ÉÔÐ8ȳґZÃN(œœçIÒœs&dNöE8l)w:k.v°^ïˆÆ¢Ù„÷ç" ¹pxHê§,¥B½h²åôáâÚ,-lrãÎWzdgÏпþ¢`#&e–&36îÜå±;;ì·^ÝXf°rƬMǬ„1y,“4W)‹ŒÀB£¹B6=a:8ÂUÁ Baï±e•0žÙŠš Æ¡g×°‹s,llÐ<³‰ï G[Úx0_ÿ¾íÖ«çd¸Çzkdq•£öíŠ&é]µÓ›‹1ЬAV½٠ŗ™Û0Z^a')‘;7гWøp} ¬ÐèG¸­·`<Å%^ 6HˆÎ^B_»Á(ÝÃ×Þ§_á¤Ñá÷®ßà™Á —Nþ ²ß¥ø§_#\Y£üXÄj´@ÃÕˆîdœÿæ>»Iwi“à`7A´‡é¬àÃg(®û·9~5£ˆ,­§·QòÎKk¸+®<¶K«3ašzÊ4ÀÖ=õóm.Ö.r°×Åßg>¡|óÊÅ?Bòé·‘dóvç%ºŸêbד3=jGü`Â̾D?Ãd÷E:ïc¯Ý'~ùEFïœÙ'0Ÿ¡ô_ÀË1JL©«û}CQ%ĨGð„8*ÿ2_MÍ+‰ZE•rúÑÚúýåƒáŽ8tºe‰È“Hxz_y_!!bN›’JD’yå'”Ë{)fZðÅkSNÇ_Ýžg³Röî'ޝ=ÙÇøÙ­µBèùqOEJ0Óü:ó¯ÿµÃW8yñUF–¹ü¹þóüøÛ·yë'<\tÄä,¾iù«¿~éÀðŻ»×;Ø©§ñ?OÑ/:æs~æ…û4oY¾¸ý4#”ŽÍÆ3òŸ8Ä<Ö%:\%8>ÃÆî«ýÓ•ûtW<£ßØ$¸5þÜ#>3Ñ€Ò+A¡H ØPªF¢„p¨h#Ã;Å«îOè?4‰Z$;cŠ,@j¡#ÊR‡…&Ç.‰±l-"6s”šSê È MÞR[5"§M*˜¢¤ÕݧŒŒæ7IÆ#jã#\T®ƒFÀ¹ÄôRKYÚg÷˜¬`–÷Ø=i1äÂù‚zh(fBT uˆ`-ÃÁ!´æJVnn5*:(Ï>> ŸY–ZQT2ͽB'NH³®ì‘Nî±ð{ºà•âèß»Äjðé§¿ûõ:{·ÛDÖQºQ;ªÂÙ¥@䕎f€/Aá‘Ï5É}@ci×éÓÍ ~8‡ßÞ NF4¯¾E2õè8D­ÃK@Ö›cr¸Jz¸Š ‚$ÅÔ¦¤.`oÿÇb(()¼¡Ô‡ÁK¥&SÅÔ ¢Â`µ2xðŠD<¹ YU‚ϰ9#v!T‚$µäú½Ã1£T5Êúö:Š2Þ Nبϸ—¨‡ç³cæ e:™ÃOC²qA1ó˜°¤±ö!Ig7hÐÛy˜ã`…éUa²j J%Ì+g9<Ô,”ÃŒöí]þòÇÎñßþ­Ç‰¡7Jùí/Üâ¿ÿçïòâC°Ý…½Þ¿o@þ\¾lðäðS,_%´!Í"¢Ì8fÄÙÅË\>û$··_æ$íSl®1|ø1ƒŸÎ˜Ì-qþà€çÞyœr{c…7/l2nuÊ’ÅQŸ… ÄŸì0u W.‘4×Ȧ4[ò4ept€s a5R©d3ËaR"Í&6´Ô–Ö Ús´)Ç#²“c|d16`¡y–º.ÒÕ.=âÅ æMZ!ÎÀÁÑÖÖaié"ýäuž ‘F q&Ÿ‚ÌÓiÃGÑ6y\&]£ÉêÅÇ9ºó-ÊÝ;D6fg9Á?z…úáCDßx‰<0³‚z¯Iú‰‡¿õ:—~syú7®wØ^:Ïþ ÏòЬ¤ÙoráÎíñ:÷ß Ö .Xî·ÆÍžùÒ—Iå—È–ÎSÞý6&mQŽ·)Ökäù*áfz·ÇÉ[i+`ó™™oqãkW™Üxʽ‹ armŽæ¹”ñjõÅMÒõ9÷&Ìö,s‰gbs^;÷‡ää|âæÏ²É<°úÏØ[ÙŸ° hÄ Ý‘ ŽñÖS¤÷6i¿ø:æ.bÞy‚låi…“ÎÖ(ꇸȣe5›ˆÈG)%…8’6bªM¼§ *É6 ÆÂ #_àpãã+ËåcG8šáŒ«Ü„4Á'_Fƒ&”µj)õZ¡N‘²Z#ÕWÅwrâxïé€0r<ÿÕ)Ÿ¿:æÿxâ„϶ù;ï-ÁŠ£ˆ—¯ùò“}žý×ÏòÔ‹s¼ñ‡¼Ø÷¬ö þÅ?xŸÏÃcŸÙÄì"þ hõ2òÿ3'xͱôlιÈqûÎUÆoÕ蟴»1[ËO8ÖÖ2î=Ña|öNðÛ±ý%Ú·#™ßc0wÄÑÃ`­$Úic¿>ÄÍöñyb*¿ÕÂ:ñ,Í-Óº:Ow{—Ñý>Ñþ„ìB‡áÃsÄÝ)r_É"Án 7ˆ†)ä¸,Ç)„!RĘ8ÄF™£`F!ÆäØÓ |ˆ'95(DÁ.Üd<¿†-fDù¬2¢ðŠhA€ ™ÎrÎ\¼Cÿ_ÿ ÉõwyæÑcéΔû+gI†Ô´fPWª"@#€8aÖL¡” óM.ÏÏóòËw[!ê«ü”0øˆÇY…WlÊÈ(#P4,ÓŒê!¹X>uí¿öÓ×yýÖ}¾}{‘ádÌ¥ VVJfÁ—c$®A–×ÿX¸^x® \T¢ÄÇ3–  [w(Ä%E³³ïù`·ËÊbLž8»tÌÒ‚%ŠªA¥wJl,õ$"©Å„qF£æ)SOiŽúì£B ØÔ=+1º9ͯñxL qé)ún{V$íd®Çü¹w 4ÇI€Ó€¬×&=Y$=ZF½E£‚L =y:O+µÄ±¿­l0åÝ×ÇÜ»“!gÏ'\º’píñëq¤¸ÂF˜†iáÑY@^0%“fÁÔxš£mM"V´õ= s:>tCÆfÆD3F¤¨TNne¨ØÄ“ÖSŽjc.ÂzS9D% “­´ÆT ·§Aɹ%r‹¯Ðuñ8ë©yå¤3¦_Ë<ÀŸ¡E©(©¥°pÒf~V¯‚ZE™R2‰3Þ‰=óª<“÷˜/•é¤CÑ7ä³_zê+÷‰Û]¬ÉÝ¿Èx´B¿ÝæøRÂB1ÞŸj~YÉ‚3HiøÏ~þ +Mœóôfi®üêOlðÔ….×Ïvùÿ§߀üùý2qÄÅž¢L3ÒÑÕÂå)Üm2ä»ÞFù.š–:ÿÝf½ÕâT7¸ÀZ$°•… вïPW¢ª”iJ¡Š±–‹Ï^ǹ’|–S_›ÇAƒ°* }‰QKÒËP0Z6¯„ؼJ#Ë)ÖûïÀ†H^¡ ÞJ+$N K%NiF!;+‹<9×"OsŠtZˆSLê(¤à¡•ˆóç6™4AüSzÔ{¢ eëø„ô'÷Ù›Îø•OóS+Ë\N’þR‡<rïƒÙ´äáÖ€iÙ$¿e‰ÿ„ãµ!Ë“¤ê Šq»}Šã»ÔÛ-ì™ XS§õð Ha[Œ (]ØZÁp%>Oq^Ñ"Cl@Ñ?b¼¿‹éÔHïÈá{T!g¹§”CBÛ!гL@Î$pDSËú^É^= ˆ Yéøp8b1/hUÙ×øf‰Hpjn)DÝ!ëã)Kµ¨’‰rKKöÅ3­ 3âšyA’—à$‹hû ¯5'ÜnÖQqÌõÇtÆSÆ¡2h5q8«´Óœ'öGœHF?I¸:žG´äDŽˆÃˆå«tosozÀðñ§)æQ ~–ÒL¸rpÈÒà„Ý…Enž?Ï´Õ¤°–Ú¨GÓy–“£}z£#üÚEZsÁMi4ZäéŒAw¯ÚØA)Qµà…ć$s €äÜ¤Ñ ˆk˜$&=< }ÿ=²á1éþ!ãË´±R_g¥¶Nâ¬îÑ'cª9μµXWMÅ ª Ø•Lcå@§l¶æˆ}Žò[¿O­ûÓùUJµD¶`3)‡¼§CÊpÌÊåç9ºý*“íwiè£$6Ä}ìYô­HY`âÍ ¿÷þÙ6Q7 —ŽïáâíÏÖ1[W¸uõ+rç±yÂü>×¾ù&[ù{€bŠ‚¥€+÷Ø|ÿ.Çg–0AŒ¦SìÉ4¤8g©Ÿm Û:Ç[žñ†¡qiÄÜÝåND÷ý&s'C8È}nÚòŒÈL B¡¹2GÜnæ™ û4ã)7æËÿ¿ôÚc>ýêÏðÉ¯Îøý«¿Cÿü€l~Èú·.ø”¢õ%ˆ/bk- Œcâ»O£G÷ù[|ïßDÂi™}]®’±GŠK3Ê¢É6ïéy–Ê)ó¾Ï=7ÿ;³@q•ô™gÊÚ>%uÜ Â—Ðª{.§=‚¬À58¹xL8wJë²D"UTäŽâT'¤Â²…€wžµ<ò΀©Ïøý‡&Ôáçw;Ô&ÊlðòÙÿöS].÷#þÖͤ¬&æ [¤Ìl ágññ&.þP{Hǵ¹ù‡|þ[GôîM¹öt‡Ïü²~Æ­{%·w•éJ›ÁÙ3<²Ýc)/Øþýˆñ+ÊC¿Qrîs9Ó7ÜÿÊ<£^Á›ûoñæøÍú”ÿè™M.íZ^zyÂîÙמnÐ9¿….áú Ý5–ÆËÔº'Ôæ¶¯/1¹2‚¼íaw‡‘$U¥™ÆŠ”k›ë˜õ Ò÷îÃ[ÈíÅZ“²¡B²=Äõw®ÎàÂ2sïžæ)BŠ•‚W:\"YŽDaØ'O!CȉTðÆPÁ©Žh —Î3X¹H§{‡ (P±ˆzBãèõ{¼yó>ë­5lä1Vé SF£œùå9–ZãÃ}jéµA•·âNPÒzÄO}€“Ò²×MIj ļ+ñ.­6h§•Ù¡TÆ+ª•vª3Ô+> ±™Ðî Å\ƒ½wïóêÅY£àñ§P·ÈlR0yŒœæcÂÝ­‚mÇÎ6aÀ»ïUÐu½æ‰â—Ï+uù Ë|3 ðk|åÛ)e‘‚òöû)ah¸ß]àÜ™)Ï^0ICN1K ÖZ B0UE‚ŸznfÇܾåÙ?̃*\ÁX ”î}OmÅàʪéHbh $X"ã‘ÑxdÎã]€­ w_îõ¤½E²A_F¨qäÖQb "PS#ÏgìïôéïÅ|ãJŽRš-ËSÏ6éÌ<þl“ùK=Š¢dPV„CŠa"† ‹NÁ;Ï¢/Hµ$o[Öèy˺Ÿ#’Q!Ö/ÕwµZý–'ñsÀq³„PЧ0%ÈÂ’vã¬# õ™!XøþE IDATÑ|¢f‘CF*”Æ“EŽ8 sƒñŠAX4ªf£¬ÓH"\¬d(EX"¢8”¾(í(à×$ KúÁŒi˜e°:N¹d&t²€iV'ëY²‘Gq4ÎìPŸ¿GÞoÓOÏÒÕM&›!ùœ8Å”‚µã·nöy|>a³S£œ¸,çZ­¤ÌÆô<‡bT·›üò'ÏcJåúC†·¶ÿÂ5 úcðš½—þÙ1ƒÿbòï=Ç×|ð]ŒÑ­Wßa°uŸ«<¬µFƒ46TŒá‡/^õ´®è5æ?Ÿ|7OK(ѵʛl•ˆZ/^5EB« x_VÐu™?°ŸÔ|6‚Ъ­ÅŒJ%ÁœB“átŠÁ ÒÀ[££…`h%ÊTƒ´ÀT´.yÀ%S#•îÅyŘÜPõ»ñçs ƒ˜hqC§ƒ°f|g³´Œ9íÂðèú‰Ë9óu!w^BõŠWêA_GüÃ/ Ù›NùÛ¿ðž~lnƒÖögÎ-Pœ÷z²ŸÉñ<þè‰ÊÜ»lï]”×Þß ó·t©8Ë#¦ÆVpÄT=fw¨ Ž%¼pIçþ$¦=¯*‚‰âjQÎ3Uï±A Z–èpˆˆÁ„‘Ú0¨Ð%ï±õ&q§N:Ûçði ¥S_f‚L)j)qmA[µŒ•S>­&OzQDƒYÉ{¼š5´ Œ p™ÃªÚ®aÙ§>èv½&w)™ØÅ©ó^ žÀ©Z1xcña@Þhq¼ØáNQ™0Ÿ†Ì ÇäÅQ-bÔ¨QÔç´'OïOX纵l1ªŒÅË(œ¨âåòü5ÒtÈÛGïh÷ꊥ5ÈrJçXìöå¹›w™÷ß¾z­3k¨(MWÒéîh,™˜z¿O:Üg6פÝ:+QÄaÄ0«+r‚-ƒ c‚Z‹ÖÚl/¬ q¬>ÏŨRܺEyx¬£t,³|Æ)3%Í-ÃLö¦÷Ɉ•h‹æ"=è2—´hÄ–Ù´‹!céáÉ]V/²°~…{wï°¸ú –;‹êÊ›O*¥¨€ƒ11µLUdš¨No½‹\½ÎÂŧôäÃ×e´w“<†ÖÆŠú'Ã|ã›B”¨†vcc¸zž]ûdÆÕÃÝÝ[ààâ2ë_þít¹ñq§‡Õxå꡺n$2_ª,§„÷B^»œqiý]­/ý$z°®ùpKÉð ß&zä:—~)¦wÉຠ3'dJ87ÕsÏßd;|ˆ¿¤ÍÛ#ÛÇL¾(ôŸZ¥±ÑÓx®+‘0 ‰šq+&iNµHè/xcãiú†>óî'åÚÛ÷ùúÆ¿ÑáF[lèæ,3¼|C‚¥ÿ¼^ ΙmÐÝ}‚ä„£ ŸÐÈC:Z£rN]¨bÒ95Üð FÒbKšZŠý.cåSK3Xob:¥R‚óB;.å–4°\ ìJ_k¾Ï .KÎPCFÌÊHe@ê-¡)é”9ÎY25$Sxù3bR}â剼ôpÊ[Ë©~ú°-&ø L{/ýì¾i"çÕ%>~?!+Kœ±‚¨`Ç}Õða´þ7ÔÅ/I©÷h…M}e{ÊÖ´ä`w¦ÿÛßS._oë_úÛXyqM[þ?<ÃÇB½ØïñØçw¹ñZ“ñNLœ,‡S5æˆä齸­'GNv¯îkïëS~ùB›¤&ü—¿s—?ÙQ›kjð럖ͧj4;}jë}Õùcáp…zoUÏ>Az‚·‡ì\C³3G¨ÚáD 8ÔNN´ÿÖ[¿ø$Á ×ñÿ×}e‹Ä¨jb%oÕÈ7Ûï 1;S²F̤Þ&)°ŠÕœ`<%zBJ—ˆ« sU!ˆ"Ñ )HA2Dr0âÅâ¤F<Ð侎7,_d®û¡—âM¨‚%M &SOИQ»¸ÍìÝG«¯R8´e?ÛàµÎŠÈ¸¯"*F¼Õ*‰¬2'Wñq!‰ÜQ¦åT¢Ð"”jÚª](#«âÁ—žÒƒ1‚ÉbNmV³9%ùGYÁ+Ý!÷ºÚš¯ñÐõ3²¶9÷¡¬€#ìlF}‡µS¢0`<¼SƒšFQ Ý®ea6Ïæj x Ù»7á¡«©^¾T0ÍÉsÕwZõܸc98öz<ˆùÅOœÛbêŒz¯¬od4á®ÕŽäwN„{BU"(ã•0íîyn½[òÂFŒfJ¤U^gˆ¥&5çiÔ›”¥#M=ª‚º€ÀTÃÖɉSÍ¿Jv"x‹uâÅ[KÒö4£±*}n¾ o~³àÖ[ž2+¤Ñ°<ý|‹Çžl°x6¢ž@ cE»N0`J¥ð®«g†/Õ·^‰P„– õâ¬Áj4G|ZjúRq¢”âtjS¹W?dyÚ 4^ß^½'ÃhL¤VëyL¤¢!¡¨W:³„za¼Á€DD+J\•ØiçÕxO)àlå·gK-!œY r‹œú(GyDœÅ ˆ3ª.Pò¤Ä^ç@!ôì„Mufr"¯rv8Óó’IB:©‘§ž|ìZ=ê‹{šÄÇ ºç8>¹Äñ¹³…JqbK£¡Aé§vTß*ðgbÝÿ° 4Irf…0›8Ê¡CÆ%¦Öâxº!íh…ßøUÕú¿÷™Þ„HüHS©'Xÿw1ÒD¨?Æ êwBù1ɇúg<îÏbÿÅ9ןæ´%€¦£‰¼ñ¯_Ò >ļ‰ÅôfØØ*FøÞÄT– î™×CÊ8xÐp|4ô3Η]oegï­¡Œ*mI¤¥*® /ú袔§*N$ªÏøXñe!Rä"áÜ{ú¡n]ÕÃ[ƒ™f„YAÙ¬UÒŽa´æéÜ™4j‘ý^ËScÐ(„YV} 1߇ãTw¬jåwm↘¨†vÔwØÊ¶e,µZüÂãg¸²¢…)E ¦ô˜,“0ês2Ý祛†Âßýd‡‡¯Å~ø1Òh]'çrFÅXz[#>¾¶Šl|A¦vÆ›o>ÊÍZÆjsE>1^äh4ÐA>ÃÕ õ ”¥§ž`þŒ˜¨V9‹ˆªdiÕ%±0¡ã :⊯%~w[’«×”¤ú^A£Emù<½wn“l>Ìʧ_¤œHïõ¯`‚bÔãäø–Dƒ gg%qmŠ+¥5x#à¬}{Œ6/«MöQ‰KñqSË8ÁMrIN&Ê`È;‘J®)#õ„Þc¼c\\Ã©Š‹b²f‡žYlYIÝÆÌ¥=|1a§ù6ά:ð‘ÀùAÁÊ0ÇT9 âèÚcŒ+ä’6Š)ït?äðêUqó+0˨ &tŽz,ö‡/6yùÜ# CK0<á\’õŽqY!KAÂüá>Y>æd¡A²tk#ðSœŽzÇ䓉È$WÛéˆ,45YX¡¾´F4·„w%eÿ7èÉhûC¢£t4Âörñ­ß1±A Ö¢6¤,3N²CÒ ã¬=GSêòˆ\ —£ò¥Ë0„de*ƒIW7Î<Ê\{•÷Ý[¤nŠq^0=©? ›é1Þg2‹ëèR[üxÌðæÛÊ#ÉÒåg9¸ýM²ýmÌ…¦„×/’Ü|Ÿ¦"A€zÏâ>‘¨þ“-Þ ¹ö™myìMÇaò8Ç+›:»ý?ñ[_—æ~C¿ú×òÁÇK&“•F¡ü”£÷Ëûf_šÉ¡† OJ1ºŒ «¾Eä&Ø +¤¶ç‰rEC/͵]-ïÑÿ°#i)ÄSeáµ#„áÚPŽš·h^›§YÆh´ët6[â×…rŽù¤MñK[2¨ãê»ÏqçÑ7dëám|l"µ[W(·O7¿Ì°Ù öH ûswÑ‹Øü,Ó‡ßD\—üÍUq‹4=0 ÐühÜ"VF’¡ > %NÌ÷Ú•TO9€ü°)è ô¦ž“¢†ÄýD5“HzÜ´ ‘PÐoç òšÌ“…Z¡Ÿî©r6pÿªðêÓŽç¾6Ôñ/¯±*ò—ö;ÌçÂ8þÍ^½>_þ`ŽŸ¹×"/+Ka1‚õ‚ŒR44¢µ_U} eô/ M kùÒ;]ÝïWΈeîÙŸˆì´–tæç$j[½´š²&'2—¦¼öþ¢Þ~½N=X`õŒG>ï¥;msü|¤æXέ8~å××䳿xFÏØ—þÍ.;s†èfý±ô{µí&û¹²°žÊâú”æ¥(Æ"Ý5’þgý¹HŽ[ËzÔ°d¯¾)ÑÝ’„±P 2Ù:¡vû®Fëg1ó2f2Åß<sµEÍç”G©¸vLÐËЉc´iÞêÐØ™áLDaK¢b&V3"ÉÈ3/eT£cl6CÁÆ1‘i .ÆQˆcšcÔȤ'*ÂxqƒþòE:‡w\&jlˆŽfƒlÈÜÊ“WaîyO-èHËrú¦CØ9#ÁI…ÖZEÅÖ©<彊–„Š+ÊÓ©rYÊz$Aéða¢Ó¥6f.&8IóV£Hnœ:ã1*ªEÉÖ»""Üym—Ç?~Ïýõ'pÎ/ÅOUI•ç¯eAÈᡲ¿5c®©,-̤Û-q.æ°qtˆ1 a­gësî|ÆÎ]/Ÿzâ<7—ôð8g–ešM©Ç±†Æ‘M{¢¤à›ûòÊ$cëÐD§e„Óï1ô”½M%@¯y£Þet¢UšõKŒ=ï½¼K½)l\ˆ1aIÔPÌê”iT%¶)Ý g•RT$1 &Bw§‹)ºòÇÿ*äÃw-¡8³™Ðœ3|ü3Ï„uËD…€–ž#Åiãö xœªEP˜SqlaEÆ¡hèEdœk·6b>lº’÷£=êaÎZÁ8µcúµcY"µB¨•-¢2¨ ¾§î“<ZTvØzJW1„¦Ak”K<͵9F­€Zy¡žr”dy€äæû=‡„*Ž^(ÁåVë¥V+É‚ûA†³*…µÄ¹g±‘Km3$d£_ˆ†íZk·ñ Gã ìÄW™<©O ÄVM€èž#”"wr÷•Mß`zW¥7Jõì£"R«1Éte–¡%Ä 1QXRq( øòû‚ \èpóÃÁw—~?®yøQ¶¼ת—Úþ‡Kþ4,ù!ˆü‚_Ä1ÚIþ,ˆüˆ€”eŸû½ŸEU‹i*ñ|‹|.Ñbàˆ /&ÿÈA÷û¾KE@ó‘[ɸ€qùÝ~W¹ïØ(œjÑËÐP¸ÊÏPœj‘ø@Ä8¯úà„N?’¹ÛÒ=Ј+±jˆÓE5È3B¯LŒÃ ŠA G¼s„oÖÀµµqhéI†^ƒ4"«‡)X, „Hàô#»šïûÑ+§™R ë$ê,iМ§˜ôEk1Ç“œµÆUþÆcäúr¼œ©Ç ¾ êv¥î¦ºvùÍo d¯÷…e¹þÐûz”§êlŒY´¢‰â޼†;¹Ôž½E¯~S·wáÃà YÒž,艟q7˜HYäÔêk,?ö “ŽxW(e.¢ª¥Çã»'ê¬Å5‘Z$zù<Îg¤oÿ±Î~÷⹡A‹MSAÁF A³#Ñܲ&ëD¬%;Ü•ÑÖM Ô}í[b>¸-Ó ­ÚDÑÆAFÐlÈ$ˆPfZ.%J+É ×Úα˜,gd¢N"c%ouÀˆº0’´ÑDÔ¨àEi–k‡5. é%¥Þn²×É0ÞH{Äæ(9±d£ˆèÌzâ=®‰–6wøÒË’C««²5/2™×^T3šB™Ñ8éÒ—|x圌[ 1yNûÞ-æ}NVk‘æ^Ö¢š¶º{Œü”i³Icõqc Ê¡h9Õñ 'ãþ1X«­«JtþœFyïJÆwßÃÌ ÜÎ.“l ./$˜zqÖ0›ohˆ+b3¯R~Dg¬Å†©Ür·iÉ¢^0kÒˆæEV¯2ìÊt|€1б"€wNŠÐ€ Á{Å;Tª¤jTÙ<Ðåz÷ü1¦£v¡‹;îÉð½·Uº.+Ÿ§ÿ=Šî¾ö7:Ì]Ý”èå·Õ‡5|`iìì"ŸzwnC’ÿg‡o­Gzõ©1?õÆßxþ³ò•O>ÃO.44¾‰ –wµµ7ŸþE·¼}=æ+q*ûÛ# ëP;÷´æGç)Æ[ÔÚuœ±ŸâVÇ$×BНŠo ñªª Òšï‘?¥:Ú¨ãrG˜+˜™¸†Ó"Z’=Aê^ÕÝ8‚À³º² ‹É‚°",óøf©»?ÿš¬ýþ\¼ý¸îžÙ–î“'Ú½4£ñͦïgâÈ–§`½Ì½5OžÇL_ìIøüƒ‹VÏÚi¹µ¢&“ï^;, ß r‡Ÿ…ä»§VV¢ ‚*Zd’ïµð“HpF)ÁNŒ÷ª‚ \¤y™ ÎÑ'b[.J3t<’öäƒ ¥uÔ幯õŸl"wæ&|úpN„"û{ý€ßùµmZVõ¯ÜjËÚÈþì½ÙdY~ß÷ùs·Ø2"÷¬}ïêÓÝÓ³’3.ÅE¤)ÑÔbÀ¶lÁ€ô`ðƒû0à2`=Ø€!Û°˜’IqlqRCg4KÏLw×TwWu­Y••{Æq—sÎÏ7ªº{4ŽlȆ %/‰ŒÈ¼qÏ9÷·|ßL)$Ƀˆ›à–?¡Èy ñßÑÄÆœáïþþ®þƒ¯ Àsá²6—›rî§ÎêòÕï~ñ®ÎË®ž¦õzWoþFàh'’Ëÿ‘a©Uð‰£wÅLÇúß~-ãÎþ¹úúY½¸2’ëv¢gV+w࿾ɟùÏóö7OøæWNtëÅ ;£Šb&²û°£';©¬ŸÓÝšhóÒ»Tã®Dƒ5ÚGg´#M6ŸkÊÃñ@§;ïJR¢XhÄFsüoÝ…÷û4>{FŠ_Žâ7Päb?¿…• ÕWÄcŠ€Ñ y¯Au½Mó   ¹‰ÕR“Kr2V&TKK¸FC˜yü´Ä7Rl+%ò©ZMÄ1_849,¥F“CŒ(£•³Òß¼.½ƒ;¹œ4¹ýàˆ÷·»|fó:nKÊÓÄk'šW1§ÚÂK§r“3Úœ‰æ3 Õy«­tѶÅ`²ÊSž©ÔkUH°B\”Š*º¾$Y¯C{¯À ]vˆ©‚.âÄkc^È$R42DÖ((ãq.ï½½#¶áKC$=}îzKÖNÅ$ %Žà•W"yüÖ6böDš=§ çââʱ±Å1‚¤iCNú‘ž|[ùΛˆsFM8apRʹSm~í3è¿]ñÆí¡LF®v(¾#V»Ü¼7ÑÛ¼¬Æ¦6à5¢YK™; Ák]?b_Û‹iÙL›é¦$MÇö›ßoüþ—?Ý¡·Þ$JKÑÆEÞ“r¼¤b‚ª…<2”ŠXm6‘48ùÿ§DvMÏ]j°qʳ¾™píc-LŠ+R˜xÁé3y‰4‚Ö sU²(ÉŠÄŨŒ¬Å!j"-‚“Y9b»uÀ¤9ÇZÅŠa4mè¬R‰O–$ÔƒâÚ˜¤²hh¨ÿ¯ôiàbg¿Ï­úÜÖxúzX_*s5Ф¢t€Ìæ #"ÕIü,® ª¸…üë©Sol8‘( ±Z‰ÅRÆŠ7^Ï̦´{NR×Ðé0":Béò!ÝSïK9iqß}L7{hªT'Ø©ª>*EgAõv%óYÐÅ<|]–6h{EÈC¦å* (I7%]ް “ȃ”RVJžëýŸR>ÿ§ø¯þû7ôçÉ¿¬`/ÿµjýÃcò–ü°ÅLJ"~t²9JÇã_'äOƒ®|ØÊSßßæÃ>Áâ*¨ O½1™ÔàÝ­U.¼úÂ"}Q’ÜUúìá+µôÃ/Wêáå¸Ï,+#§¨A JÑŒ±] ó}(ÑÚGÏსfÕ +¬»˜²ŠØøŽÚµ3âV»UE¶w .€tq±0[…t QîÞûµ{ÌSVHbléþ…Ooq˜ Îáâ ‰0Åö-mtzr铟â¯~ü/¯6uTLë]RU˜áL5'4o=.y{Çñç®¶ùøÚ’îEw¨ŒP.7Ñ´Ruyá¹»½¿Cig¼óþ+<éYVì†ÌNf*‰•ΙˤéZ.ËA5LîßÐìÜuq½%‚sèÊ2²µ"ªy!†ñÇ‚òÿü‡ZÞ½‰¹z‰øÔU)Ще2?Øæ°ÿ;ºzùãDk›hY‘­ÖæÖyÊÍ-ŠÁŒö»ê›+‚FÍbª3¿wSG§4צpdßi4-Y‚Ʊú´!ó¥.ÞZ£U£‰Kæ+e¥Š²:/87<Áè*Þd|gåXïw†vfF²¼Ô<-A¼$&f³µ¥½½CñÓB –ÃØSZ‹µM\;ãþé3Œ67)³†FÓ;š¢ÆÔ®!k«ì_îÏ&´žlk·˜H§•1u'ƒ![Æjo4dJÁq¯KºñY£GÈO°‘Ö¶Q¬½W>…M3Òõ- Å7h1<¢8ÙG÷¥R0[Òy…• ¦J¤h.«uhÐEßM¬z„†ÌÜU]Ò­î)iwÏèÑî )ÜýÑž Ëêêyí­•y5€(FÒ&¦š#®ÔÊ©øÊ㫀Ƴ´„(¢S¬2Y Ç}úï®}Œå3ÏÑß¿CU–”©%N"_¢¶¿¿M¼¾‚ôºšî=AîÌxãj›_ýügó}½™_–?¹ò—ÞÖbuŸ—~+bí·:HËégÿñº´~rUûõoSîßæùFƒ+ØŸ>ÁΣè1Ù{§i|ÊcÏU„®âÞ͉^±°•¨m”¬î„A¹ÊÀ7ÑTToÒoЉV 8³3£ù~Ž>0t›õË0•Ã,…$g÷“·™Û>2Õ“øˆGK;\ú•ëT³TíT"¹’irWýdéÎà¾Ý×pjŠ^‰Ÿêjt+©4¦•šyΨ~ŸA¹n鄨¿Ns~F/Ÿý<Û—*¦wîa !I j! ³ï³ô`¤ÍW6†eú½ æÄ±ñï½×V½µÇôæ!æ¨Òh,ù¥.óõÈŽ Z;stb>!6S"_‰“1¡ÕÂÛ?ãË ×J±iLäš58*‚)1:£7> VÏñÚEl\aéà!Ö•ÄÈp pýlëP‹HNïRNÎ/G¼¶eùú¶a¾ºEk÷~؈(5ú辶äy&Øg¥¿zV LZfÜlÑ}ˆò°/Y¿"'ú±]¥‰¦­|®Z8Ùj¾Žë”<Þ¢×nSÌ+ýâÿü=ÙÚlñëõÏpþtW—zàÑçolÑîY™ =eëtç’ˆõ*Ix¿X”ˆÚqÞM½†ÑŸÿK«D"¬Ÿ‰ ^)ŒfPÕvôZûÚh— díxU¥R!H=Ÿ¨â#jIªªBQ“Qª%§!‚3HeeyØ"ÌY®°¦R2WG%^Í"Z4N‰*Cb„—ý„è8¡1ŸAœMX:ý›LØeÝ^z‘a£‡ñޏ0S”›¥„y@¼R(šÕò~cD[ Iªê½%JLfižk`šÓæm˜©£°Ô–ÝÞò7þÊ«8¼·æ¼ú+è†á{¿wH¯øAã?JÜþÃdSÿ*1ù›øS9 ÿ¿`rjc]?yõyòy. ?˜É\'’d)ìJX$UPܳ "bˆ³®*Î=UW¡AÅ$ q«Ô2'±!¨1±Á¡â(Á¬ÁÅ‹”Ý<ó­‚"ÎcêV  “,ÑÏ ¥ªK åÆ2É£ÒãøfFg/e|Öˆ5 %*,eªŽOhžúj|äêÅVIñTÆg6(ÖÏ Uœˆ©<éa‚¢ÆH°µ lYÐ~²M÷à ½àÑÓ§™¨¥?>'~²¡ IDATf=86çŠVG¦Kgi¶ÖˆÓ%æ£'$vu‹ììEɬU›fh2}|_ó£=)gC Áa«@3ia½aòg{¡È"Ì ¢RÅ¥ÔÏ"BX<Dê. <åa "rÂ|L4Ðin²²ùYyF'÷u:;a}í"]ì|ƒO¼ðkbÏ_§qïŠS/rÔÝ &¸£>º~N´ÝenúÒŠ–è”Ë:^UÑ“!ý÷oÀµ—ém^‘ááCò³=Ò{K !nR(´žìiqvp§Áúƒ¹Lï—|÷3=®_ÝÑ3÷V9Ôö®¶ÇF>}Îâþc/ÍlE óºÆ89#ÿãî‘î­ÊúµkŒ&g(Žî#”üQÂ’~’þövÚ$mߢøê\¦_Q]5tuWVà K“W™=j{\¬ÈÖûÂÒa-QÉŠ.!]f©äÞéô@˜ÁY#¢ÓÇNã¢4>~G«Æì8õûŸ%$ {™'‹fœù˜æ/L¿aOua_àÛNÌ-Å|­ÂwS)¯´ {4&z<“‰£T‘#,Ž-•Ea¦Î[5Ï'u…6Xyö¨wš¹7rÈeZ‰V†äÊ;÷¢34¹8–æÐ×z/RÂIJ«¢Ép‰qO®|«Ë•¨ä(:‘7÷¿óÊ~÷3Ç|áÖ¿öVG–Ä‘—ŽÈI=Ôìñ|J0ÑÓæš ‚4Ôѯ ‚Qˆ++6²<&®,EªâJAæ^óØ1\|„(¡~ˆ–äh¹¥:Wbˆg*§¬óú™ëlþõ˜ïÞ½ÇÖz—ŸûÅ-¬ŽÇl­{ AÉsè6 Ÿ~ÅrþòèØóÞ-Ø9Ì Ù?Èê\¼˜°Ò¶rf³ÃöãÓi!b’8Òƒ9ÿä«™üÊÏe\ÜtúÝ÷cNæ]¹*™¶ÒŠO½¼"÷õ™çžÄ‚”*EU;h:_?ž3ÊX™Gʦéjõ¨Ü| Ì<|/§Ý.¼a¬¢¶"(Oëù‚€%­ÅmâÄ0œ)­šA!'ûõwe µåoJÀ«ií€çÔÐöž#NÀ‰Á(Pª¥N!EŒÖ¦T& qõ‰JQó”Ö´Aiü"ò B»ø0VíG–…Ø‹&îEÌn1Pžd€¯ ‚°^­z´ˆØ0™d‘e‹‹Ã¹J£ÒJ}Í:ǵ"Éó&ÅNL9 ’4Æ,º‡_Éy4xAu‹Ü ñÃ\Ì®G¶ÔjÐ’ÉPIEšMÅ{#qŒ&© lÊm'jc#éz†6”<öÌÅQ*¨–a“ªû‘ôOõuÐ>àù Y»|Ž»ßÐß+þ–`ý°?ð£&ò£óñÃ.àGN\Œ€5©eÎm-KW4LÝ㊒¦cð²ï_ÅÄQÖÀûR>pÕ}:ú¡Xµƒ‰dËõðÚS²¹/Kf'û¨wˆ’F›¤¢ªØ4Řˆ¬Zäã"TñbjÈ)S[ϱ[©g|Àz%xG£³N»»%“rŽl騺m¢Á˜x8Æ¥1}Csæ™Å»px¨:=ˆWÔ,f¾o“ÆÁà0”®”ÊAœ6ø¹_ûeùü§.3( ÞØ9àÚ’H’ÉûGTÝUÜò:ËyÌ7nsg0çgžOy±³ÂÌÞ–Í5FHÕÀ§‰$G–éh‡üú0.bÞ¹ó"ÓÙ:§Öº4¢ǺM¾¿GdSYZ9M:÷” KÙjÖD÷V&a6%”¥¸ù”¥iA§t”eÁt÷WT=½…C‹!A0yŽõÈD\…muh^}I‚™æSlQbóBâƒ88áhÖgz¦)z2f—d_Ý#5>6ø¦Ÿ6ñqŠ‹¼IDDñÍŒ,æ|j0Ähà•ÕiΡ¯˜´¼ÓŒe·)¶äQ„W%Í Vg^ÎΗôŒ¹³4 ß4röpÎÆAkµ{z‘¤ÌÖ:r°yZŸœÞbš¦u,âÑ”…Y‚¨µ†l6ÇNŽarBïä˜ó&ß;/ÛFÇGlT§‚B§+ÓV–6H—ÖðD ’µ­Ú•¦*©fcßï+Š£]1•§HŒDQBbR¼$÷žÂTDUÀ:`Ä¥Lì¢l¦"! qô¬`Nµ ]#z¶ÿ"‰@KSíÈò©—hv6Ø\º*UQ0ž ¤«M¦ã>3©ˆ{ëõØY_ÜlŠL81L»V“ ‚?æÀô‰M*-·Ì|ÙàŽܾϽÌÒ©ËÌïÞB uò­ ׺½'$I%ó,FÐkÿviû{²¾²Âì¨Cåfâh’ýÒϰü—3rëê™ UyqtŠ×¾Ø?zDV‘.Ÿ¥cˆº©øÊà#‡ëzÑ–bò€Ý¢Ã‚öÃúä *h„k ˆ`íº«L»9Þ†ºÆøâøš 3ö‘'1U 8Õat±Ål+£w{LÚ¯¹ÅØKÍ ¢|DªÈáÔáš.…Èxb°j1¦‰š„Þx.³ÖŒi{‰f>–¨:b’Wõˆ°ŠTOãû=‚ÙgZļv:ãÅ]ÏŸìYš+›tö·Qy*Õ”E)Ü“³•Œd)¡Â1…­(T¼aÞO±Îãf–²ˆ8ã¸0нS ­”¿usÀîÃùŸ&“úQ þòÿ0&ÿWÍäß|ÞØrþÂyÎo¬’e íF†µ†Ò¹ÚA Io…(IŸ& Ï.]°-ÅÄq¶˜°”¼ù°¤ËàŽûD6¥Ñì~(W4õ”ó)“~mÌ\–SŒÔ‰E”6i5W‘$®Qª@âEÚã‰rO0PfµŠ¢¸xÑ¢Ó žâÝޱÅÚ\#aéxˆ¸Š|¥A:*É%Xp™'¡1Ðú´‘ºËR[^~T6f€ÈªHê)Ò‰®\>Ç—¸;ðç_8ÍŠM9ܿ˲©È³eLìØ}ø€¯mïÒí9>wv™¶ßdì–Ò²1>3h3¦±#|õö ×>~ ©Vè7hDÄ©%/ú Ëûè(ÇjL7êϽÛFƒb¦s$Nð;(·owV‘ÕóU@M‚=}æ1‘Ú¯°ãúOHúØG)滘N´½AÜ\Âo߯ŽkðîR½ó&&(~< ¬fHÇâã´…ËšT­fm ™Ä! ƒ´b¼WB7¦»ÂæÑ!]sLàAqoµÍL”iQZƒ"Ĺc%ÏYžÎ1UÂåâ =épke‡ÝVÉÕþ*§ö„œXá$KèŸ?‡;{š<­=Ó£YñÌd@Ec[ßÞbFûä˜æÉÎéÍJV“&þâE¶ƒgt|ÂjY°UU$EIÙ]&^ÛBV7¡•5ÄQDÕ?!?¸Myøç•¢œƒ@Ë >4KˆrÒ!A©‚#H Gd“¯Â¬ÕBãPhçžüR M ²`GyrŸj>fÒ}Äæ«/21OhÃ8iŸL¹rϱéÖ™Ìf½zƒôc›¸çå%Gß»Á¼©$ñ2¥±…01øé0›ÔM¦PϪ™i ûý ³î€í—ßæ'~ûáxwã åz˜nŽlN1Ç× ä䘶AW€J±óºX±ɦ Qa‰ ûìÌÌ|òL/¡æí‚V³Iä Z”ˆÒ4gà†>C©§gbÊ­ˆòÆ”h¦H$„ûåPhä…˜èô‘± …!ê;pQÅŠà2å´fœ«Î2ß(ø'v õRÛ’{ùcl;LÓ‡ W+ˆNcT0’y³äøÎCÒ·#6Ö0Mel&vFî_òú…>¿»ÛçÀß|mçO7øÍ?ÚçÜèó¥/>ágÿÂY~õg6i]é0x®Í϶…åß?àñ­1·¾}Âí/žððkw¸ò“ÏqáÕç Ú”EÉÃ~Â÷ö4úS®•÷ØX™¯Œ˜5±Ξm2ûÂ)ö»˜½œÐP\[HÆu*ŠÁE0L`fˆY¶ fýüÍzË#>ýx ÓX§¹µLǘþC¢y·œQôô¯wHFíGs’QE(#œÉ°q¤ŽäpD4šàÛ-ª¥U«AU¢Ê‘”ë-Ö¶XO˜6ZÌ[K,O‰ãñ“›çclàN–¹reŠ„Á{ŠÒãŒe¾²E2é“NFûô¹&ĵäËòÈb¬PwâôÙÐ1"Èb.]’À:Üþh9½**V7Z1|ãvÅ{w‡|åÛ–Ú._Y¥½4â[ß~@£ñÞý1§Ï®""ì”ÌJƒµ м¢,k±B„ÁGÚŒ0b8uºâná¸ϱº-¼zu•P:fù}¼ŽñsK•~ê/u¹ôRŠ3‚s‚ ¡8­!º*BZ—:+ŠSC‰! 4 4ÔS`°ª`›š™ædÁ"%2ŠAj9 Æ[l€<-É»%ÎÀ¼3c)wâÇ3A ë±"\Œ²6Î]lUû§èxô™¼]E±cõ<ÒZðõýåô ÊrH¸ä[”¸èÚ\rMš!b=$XcˆÅÃ8*8Šgì&sÒ¢àüAAöPɤ«i+ÞÅäý„|?E¤¤}ö!~kÆîì4{wÏ¡· L1³€ÚÚ0h,ÚKŽv/à\„j„+…²€h9¡¹ÕÁ6"$Ê$Pù0 à󌪈ƒ­¡0¬è,”ä®EÇM¹¿Ñku|²àÝ}tæÿ-äÿí/ás?ýS<÷Ò Ä¥GU O™‹ŽÃÓâ#Ó”µ3…¼vÇÅwÒ:AxxDé+*ûÑÅm&sÄ ÓƒÃ ’HƒV{ Ap® *§P€Æ]Ô¹g¿«I¼º 6«A:ñ´n%#”©à½Á/Ì~ÊÝ»˜vèôeÌtFÕH‰æ%Ñ|Žk¦˜Ò×Õú´Öc¶%É,0kÅ€â R>µzXÌ®¨!VK)Oð/~{×~õµ3tò7¿Çëë·²†Æ ûM¾4Ùçf?á§_Žy©½Î¼8bÞ½… =Bó'¨¤Akê¹wá_¾Gî=¼È¤Ü êF¸f‡A¼G~{Ÿ¤°Äg/ ›5×ÁNsd:gá`Luh\x1urà’”Å ø‚Ú¼H>â*$J°Ó >“?¸A÷à„´¸Auç.Õ;ßDfSÄZ¤ª ,P øöUgQ¥l´ ¶njl!(íã’lP0üì2V‡T3p.ÅïÙneÜid”‹ƒZŒÁú€™U\ò¢ W¬Vޤœbä[a“»c¾×:àµÃu.º¼9¡M­,3^À‹DØÒ/2库¥ÆŽ$£cŠFJ:êõOÈ.N*ÎKÊΕËYÌ}9¨> Ù'…EúuE& Ñ¢m1jë8P,ÑÌ’ûœ<š‘F1‘·Do)6¯™t³WïiWzªa [û~Ñ­ª!iÔ£©`†0–Æ ¦°‹2oXp¢½/5°ÛiÔ’×øvBuo‚Í„¦$”Ý!e(ÉC ÌáúÕ!›ÿAŸ[®äK{Ê/Ÿïòç®vxó(ç‹ÛŽîN)ÿð˜çmþ·ßÜåÁšá¯üÍË|ü³«Ì'7¿Ùçë¿»ÇW~kwÿé 6/žeik™²÷áŠ.Sq÷®ã޵ˆÖƒ”Çû ü<ÔtpÛºcŒÉQí¢Ìð2ÇB*‚Æ‚›OÑ(aãSŸ!jö˜î?áá×ÿˆb>&kxb@§¡û<&î¡þ12ÏIrG|R0»Ða¾‘Qöûs–îNˆæ†2iC¢DÉñ9ÑÉ;·š”ËKTí Wz¢Ê“Î+e©3c”µjHíѾñm^¿vލ3#Ša4˹ugÀÇŸßàS§Þ/”yÓ1As‚¦ÏÖž—ú[1ød‘é.üì:¯ ú|Wž -žýO¯1)²|•‡Û'¼ÿÕ¬*ó±Ç´¤iŠm&°Ò¢•D@Ոꥤʸ„¢F;wîÍP1Ü».l´Fóç;5e±‚Sœ@ŒbDq5)Y´Bœhh Tƒ_Ô+UÀ%’F‰"|ý>*Ì‚e,F…+û[}¢ dbxçò6íÐ`3_bXx–]ÊröÔd´¦Ì_5Ͳù#Ib>H0[EM¸·"ŒÕqGçÏÞå©Ó‰e=¤\wº¬5=CYR"FQΣxÈ^<ƒÈ³9-Y¾íi*fIi?Wgžr’ïĸ"¢±²OceŸa+åÁW©Þ±%Tõ‚ô¦î4õ6I¢´:%¢(SªÒÖÔúŽ¥¹Õ$ÎÀ–dfcG%µhÏRÆ£„¥Yå4¼«Ã„HR–Ôñ‡M¾´—ÐÛò|¢9§â "üÿ¤ùE!Ùà"Á-V±&õMÔÑ ñøû»GÖ Öþ÷cÅ[!ÉÚÏ6wH‚¯=òƒ#Ä.0qŽf4æßÿä­”ÿæù?x©gؼr‘cÓ¤=æVÿˆßù®esÅósztòsµP´ÞGtßø$Y”òp'ð‡ƒ)?û©ob4æÎîëLÒË´—ÕdLeJdè±ÎgM&ý=2“' b±x©µ›’¦ˆiP¸‚i5øh½CjY“<¾ÊñŒhj)¾ö», °“)þá6„€‰¢EÅØ¢ÆR¬má“Åø$Å%mƸ³ÙþˆÞÛÇT¶ÀÇ)úDpó9ƃ‰Kr“ ‘¡á-–&—‹Š%1ØÒÓõžh>è'#U_>»Ç“ô„¨w–íS<Ê+†Íe¼…-=f^}à2k#LU`¼#“ŽˆóSÍ1패p.Ì*NÙŒÇ×.ñ ŸÁáW£˜Æjêêuª8Áml‚'LÇ„|Ê|÷ÅÞÁÍhhL«ê0h;\â±*X5¦~ðÛÒ#EEí!£8Q¡8k‰Ê ë<³¨]ÛijM±^H±þ…F¬6ÔA¢~ˆï)‹µj±”Ó>;ò&Íö&kÍs˜³WØ9yÌÊä1—?Fuë;4vÞf¸Ô±äÓx½Àxmu8—¯áØejFt IÙ![î2Ž0UŒ<Þ ªQú)Ì•qíÉ3ÂÝÞ!‡½6þð4/ü ú7¦LνCï÷ÛÑ&ãÕ“ ý1‚вKuñA­þÙad2ÃæÑãoŒyë§ßåèìcn¾ú;|ú»‘‹ÕŸ%ê §ÇhoJb·8å®Ó^œy 1*Šj˜! +½wAm ¥÷ÏÖ¨íÌtQ™Áˆ!Œ¾ï꫊ñ_dE`BQO“FXMkxš3è7Gm°ÄEBõ¾‡ÛŽ,K)ç%å<ÇT ŸH1?– NqêºH|c0qŠÅ÷cÜ» šѸ1Ë'DÖbãÀ,)hÎ×H5bÆ/W?¶Ògóìœï¼dÙë&ü'Û|~7âæAÎùÏvy8¬øõO¬ó_üü9~ïæ ëß§¾õÅ'üò_¿È§a“ÏüÒ:?öã+|îçÎóÛ÷!Û_|O¼þ"©5˜ã„àæ”Yƒƒ žIcô¶'‰#BYsšŒ„@´zí@yx†›B3Ï' ¶ïsùó?Íæ• Ä©åþ×¾ÂxXÒÛèbünb(ffmÙbÖ8†yIëþߎ™o¶™m5ÈWšOf´w âež´°qƒ8šc\Nt2ÁN¦$ÅjÍ|0øPÑ:8`²ë|©'Á ¦¨ ÉÔ8µF¤×ҕLJòâhÊÇÒΫËŠ†IŒPFV}³)}Wz¸ªboµÇƒSKŠk‘F'!©e°¶ "ªˆªÚ|&Ñ|¢j#²“=âéã¶t¨|“”^;eàòÀK«ÓdûÚyö² +–õ+Ï‘\{A‹8o X‹ô‡Œ¶o©ŽÒ]Ù +<¥QBwÔfØvÌŽØMBDk f2"iFn ¶"ÞMW:k°^Õz• FIîQÂÜ/ZÅ1v¡óUƒzk$òТšËáø¾&6“ÞÚYÊbÎÁö ¢s_ xáç´ýîÈÊÍ/1謓ŒGä»_Çl½ÂQ7FêF¹){n‰íÓ¢Gð†¥Õó8«”'»X#X 4Ë“´ÉÜZݬ*ŠF"óo~yù:ñç?©‰þ¸½8Õ$ ÊlÜákf¢ãäŸÊE{EÏÎT^Øý—\ÂaÜâïé˜r¾OÚ9MÕL˜N™6žÈ¤ù‡>ËêÁTyȹG;²|£O£ˆÐF—áÿEÝ›ÄZ–eçyßÚ{Ÿæö÷õ/ÚŒì3+³*«*YEÊEʤŒ’MÙ°ɰ-Â’aÀ‚Ë#{ä‰Oä‰G2 A‘&hÚAA*ФYìŠ,VV—}fôïÅënO·÷^œû"³ŠE²4#cò."Þ{qïiöÙk­ÿÿþ_Xèê¿õþ °n´¾˜rV­ÁÒà°ÆªÆ:Y"—>µ¨Š-:š×»BW)Çç:qÄ }Sì¯~‘øÊ×ÔüÌ}1ï\ÅݪIH„†HCÃ:4x *"b£Õ§Ä§ /¨´ÒN1¢¡ßö‚!qXë0ç5²Тd$€šIîíõçkŠn ©†'TÇkH³ŸÒôœjÔ6Îl˜wˆb0  æwùãˆD%ÄŠšvíV#„ƒž˜m(Õ9{Ùƒmôîw>”A’²Ÿ A=×^'RɃŌW÷Žù^ëb³Èâ<2ÿçKMÿ‡ÉÏeò‡ÿdÍ?úWÇúñª¿ý¥}ý¿rCþõÛçüOÿ×]½œ}ü¿øîªkvÙ¿ž³<12ùÎ5>{e—e·¢ž–hpÑ$"0ëÀH…ăÍ;´G@%X‹jÀZƒtvðv„Ì0Ó¨¦‰AEåÉûïà›š«oþ5®¼ñ&ˆpç÷¾Fc†::Iq|gd›þéˆZ<ÅhFRE’ºÄ®kêí.Å~Ù‹CÊÏðΊdÞ ×oqæ¡Àú w¶Ä.ÖÄAíŽ4&‰äUM6ÕÙÎŽ ²]Vó·Ÿè•Ï|ÈôÝ[2·ÜmÎøêïÝa¾}£³’|»G5Qõûš.fȤpI/ V˜o÷?Uplè´]úö•hD%×–4C¤µ8ߦ³"J¯S°+eʇ™£ª!JtJÌ׊*US#g"‚h6ìIÒË!DµÎJÒËh6½!çŒ$ûCÖudr¡V¢¼ýèŒk»Þ|¦Ã+Û_~¥¯¿ýÍZîÞ¬ÊÀã…¾öye7—ùj©ÓY”áÀ!uKÉ¢ØÍ¬GEÕ\"ˆÖÕ Ë¢ ÄZÅXÄ©šÔȇo•z÷튿ñ_íÊàjJh¢Z£bKÀêšH.m‘·Yx5UÛ&Å „h(€*kèH¢[±Íö!qÔN9i­U¥é®Y — m«ÅüÌä:‡«¦R¢¨V¶Áªù¡q •húô炨(mpáÒ•”Æë¦ÐT-ý˜i킌cªytDj º0…4¹›NèJIFʼnö+‘½»5á>„ŽÒyÞ“ïxbe˜}8ÒPI‡Üð ë%½õ"“Ó=\]cœoU‰Òé[þ(hT¡iŒ„Iî1Võò!¨Šâ½˜EC””š¾z¯£jêŒ]<œˆzVUE–X¾w´àý£9®ÓÁõû4UCÑsøùš´f&P?®åðÅŒðß s†óG¥þ“ømù!D¬‹’á<üÈ{ò±nøS)X)’Г,CUõ¹7ßॿú&ëÇgº/”£ÅÓïÎPgm‘nD¢â[\Õwj\Jw¥¢jÚ¹ˆ| ÞÓhDÚ4hh.­REVÑ&ž'y»VÆH Þ,N-(êûèŸW­ì+5í ×ÇöŽò^Ã2ú9a˜3Y-À7Œ{=c*ŽEæ.£Àžž5ÚÆ‚pU’\.ÚŠê'‰ˆºa`ˆ±ÁF#Î[jãõåCC:´üãwO¸tÊßûopëjN3mHÆ ýꇿö‡–Ÿx6‘_xmW·ü3î¤ÛÝ-%ÖÛ>ÔÓrÈéÛì¼ôMŽï õÛ_íKø7¿BS)ªØ~*ƒãÌL8¹ë÷h¯²žœëñ*Mœãæjû©\Ç?iNS•fKÓé¡Yï>ïÓ”Æ:‚uŠs"ýÒÔ¤Y®Œ¶ÉêF’Å”E,ušâgÓL—ù’¶½–σ'Ô/ ñUD;™Ž»]n>8!) U Ò„k¸È2mú=¹?"ª:uŽû[[@‚']ŒTçã=Æ×¨±¤ós\±Ä•+’Õüòa{YÓ䙨 1©U¹–æŒws½÷ê‹,÷÷èaéì !H\¯ñËëó‡t;û¬Ü&ø㽫šÏ•õdAm<ã*§NU²–Ô£YèàMÐ `‚j¦±õ0…ض®£%ŠbbФRÚ¼=UÒ¶Áo]ú§ÝßOí‚Oótð‰EÅ5AE„$B³â ÛƒëØí=}¼xÂ!+á…/S=z‡Þä.UÖe:Г³•|Ü[ÇùK­Ù¸h4YudÙLY;èš-M4ŤҢ’6.M’ÐPØoºXQ•jM™Gê®#Ý~Ó›+ñ!ÕÙ{j²-ɶöt½Hx˜^¡ßù]¼j Çùûèù½¶ºÊñüÙ•+$[7¨/n£Åš‰yO,9tŸ×½@çävè5»iNø­H7ÉYþ½µª=󿘬Ð̠݌ڹ¶ø0W64u©""b U+WQƒf¥ Hjž0µ¿Ë•ðc K †k_rZÏÕª#5I›Y#-dßµÛ ý´”e# 1VÍFBŠ4ÛÈ6HŸê·âA|ÿ*5CqŠÄ…D5ÅÚ¼Õ‡E+¯±­#9f`‰Š–Q%ö,a'ÓT̲UD:ŽÔ 4 ]¯HÇv] «ŠØtZ«?.¸1kÈ­T]¸²ëõË7.øÎ“ï7ˆ i 6löqFÀÒèY|]#µ¿Ì $4ßÔ—F6U”è½ê÷ƒ|0YCÅ´¿ë‡çŒ±ÔÜ(J6_)"˜ªM¡ÙˆÑÛ"F@ê–+¬1Ä,ÕE ô«Ûe-:-ˆi†ZÛW€Ï">3dsÕ.œøÄrÙNúTPcÛc±–.$)¶]°ËÆ£ºqÊnŸ&M‘°ñô”ƒ¡ªnk´?DÎŽÕÅÇâä±X²*—Êä Íû4ã1¦dóŠò¹1é¤dt¯Ôt!Ì¿´E|aH=„N†Î£ºÂóQn©®p&½í-ç˜Z×Êvb$+ª§:ö–LfqÅW®ÕKÒÅ£¶*0M£­å²pŒíþ¯®T"ØkW4(Fû<Ø:¤èuȺìì‚xö„üüóáÛL»¢ô÷¨W¤a|xÎʰ>~ÂÚ.ŧ–iT$¡ƒƒ·J´B$]úöÁ[¥­hЬ›U€u›»HR ƒðLûKy…Bô±ÝÀ6š jMëˆm¥l+¯Î%¬e®ëâ‰d±K²÷,ÖE%s¬®}^»·é”+Š´Ç5¹¢ _s\¼ÏVç%4ïSj¡vÓøk#ôtŒ©s•á2 'Â&Ÿ¤´†i’’Ä “%$÷Ži¦ ÄyD=b,4)Ï~GÓô§Éº[\×8:Z!ö.o=£¬ÕlàÍYÎ{¦Ï£Å=º£çif`];….ü’rD·ó,=æÌåÎ^^>²ÄJõ½y ðÒLã = û°mµ>‰-=¦¨ÀXâÑ 5XQ AT¤äê7û_z~¿ùÅ+úÇG5¿ø=åú³/ó»Û4ѳµ5V—$xï‰1’Õ 5¬j£©D,6O‘(*εèÆËã²x³ NГS˜MààP¹r•jbtÝÂwUM¹Æ–‘D Þ‰j–Isò1c» ;$}ar玮z$F•©ØaÉøà YúŠ¢:yÂôÞˆSL5+Ò<¡ÚîRŽSªA¢Ý“‚ü´Òlڠ궇sG‰iäôÍrº*,;]æ{Ûž\èêQä>¡{½Ãzjyùæ.ß¼òHM3a«'µ&ÞS úôz9ù|EÄD1¨¦ÀæÊ&Q¹ôwªFÕKE«ÞXBœmú¦•fi›#²9MʈLJf½GdZm9 ˜î«‰vÓâj³³¬1ŸšmÔ6@LÑ&PLæO/èzU`×6¿ÄŽû¤Ö´²š«[TwVü³ú?ö3·TðMMQ6|çǼüR—QwÌ|íôdiÙz!²ó<¹Ýöy>™µÆô&Žž(Wo¢Á·~Ó‚.±‰Á ÚÓ@­Š‹¢6æ«ÈñÛ-Päà•Ö$êš‚jJ¤ßÉ c yͱ­˜ÅÀ-¿ÇÝÂ)<ŽÇ: …WAü¸àÁµ'¬²‚ݪÇKÓ®,ÆhLä4_3³%Q•(Jm}ëÍAéÅ”¦$†ØJýðì •ö–دûdXÁ·ÞÕqÌpj(Mä4ihXi°¨Ö#ÒóH7Ö:ÀÑIKíîIª ~™²8wZ<6„í=ãé?SCPÖ2­§)ÕÚ¢nÎô8g5¹¢M™bLDl[p‹v‘î `Å×†à ¦ë¨“„ ] ±4XT-wJÃŪBŠß8õ:==”“µ§Z—˜Ä‘ŒÆ r$ïÀx„8‡KÛý¢ªbB¤Àjh”³÷úÐÉHë‡ôöáÖ«ï-ù_þço€ ëIó#ï©ÿõÓŸ÷þœÜ–%;ÄýˆÌà?ïïÿ´ŒŽ?+-ñßJ¶µumO®~þYŒ³êëßTbRÑÕnÛÁS#ôÖ‚ mzhÚ(•¼PbšPåVìùB]í!B™;|]"E#—U½ŒÜ¼dmhÒý?ðÞ7¤í‹9¾*ôOåCœwT"µo„¨j¬ÅX÷4bØך-+OÚD qä¤îvµ ›‹QãD.'jÛ)ˆñȺۡ·œ‘מEê6}KZ)E›gÝêGÓNû`•;˜—5_~ý€/<{HYÌÅT~ïëoóõ÷ïQž®e†«Ž|{Uë»ß|Äz¹›†vŠ¿K±XzŒq,¼a­i¶’DEã'ÙšÆÊÓºÈ:Ð(ÝG0 «^–åg?¯Ý‡÷>|„ MQ—´­/U4U ÖÈj4ÖÚ&”Ý.u'ÇUÙÅÈ["§g¸p¦"B‰§ .Ñ&ÔèÙ²ŽÄ=MŠšwω;Žß¼‚ÝísëWï£Ç*Þˆj/E-m^KÓÚOäl´­‹þ€³ñãu{4Ȫ5vCé2­B sqŒ­ ’õ[,[?e -’!§ƒ‚ÂFƒk1X²[/‹59¼&n¼­Q•¹õÙ Ù;ßÅÅ@g6cxïçI€½WÄå»D?§wpHg¦dM8î®ÐÔ0˜g<ÙZ£Ô$1Á’S9F uÄÅH×´ˆhPÒX³ÊSé®!«¶©Yuo4šVw-J;þ“?±&(‚[7¤£œîËãVç¬ÒӮطOµÞÇ>1 *nÝhݱrvñ€ìMªÂó‘;’ŠÚÝç¤Üy‘ÎùÇšå}rŸÈ‹þ@÷›Ä»ÄÞMºÝCYû€T +]ÈýXâþrå=¹ ˆàBƒ±ŽeâØ/lšýÛ”?ñ%­ñÆû"Dq˜æèò®ÊèX{>¾x™ò4å•W?b÷MOójäð!t¿–qçþæ…Üð Íä¦ìHÕ=aV¨IïsôŸûIêãšiö&‡B¾> îöq¿Vb¾ÒHóßå—Ü»™È¬Æ•5®lébô,(¼o…(Î’ù²C¤7Æ‚[¤"Óñw»*_¸'ò…'Ø2ÍÀ§c+*Ön„âOW––Ùi,Xƒn$¬Þ×4ÑcmqßÑÓàQ·y”„@êéå}5±ÝÀE ËD³e -ô¶‡¤é.ª½jiLBz1j•ÚP=¼ÆFU· ’΂ŠÙpÅEÄ-ÃÓ)¯vŒ"Z©„6ü :t/%ä 1¸(¦,Y¬DßÑýÁHöÆg:*ß(D›xˆ|5cñÑ›YÜþ˜ôu¶þJŸ½­_=VYÖAŸyy›,Ï[<»FAB]iXÕÄÚãCà{·o³»³#/>ûœ61ˆÍÓvgi.“6EZ»ß•`5ÝM’¶FÞ·©|ó’°\i¹*¿‡M³SªœÅV^“YY‹âëÆßÆôžA’.O¨c!ëé¹šÄ îÖÙ;øœl½ôyÕ¦äãß2œ}ð$VHÁ”5݇ Í(×õA_–7º>ìÊàã¹væ[ASåI0Γ6-)ªWÜeà7žaùì¹ÿ‘Þ»}Æç¾˜±^Gl¢¼Ùý)ÝRÃøˆÛç"±ñh§¯Æ,ÒŠ‡PQÙ@ñ[@ï§ãƒ1­ Ê´o‰µ‘îY¤í*Uù”A}áÅ‘táu ]úM*wúV×ׇb—*EƒË"Ô¦Í*2‚uVƒ´ÙzX‡Ðr¥4T¦ñ—6õuF%éå¤×v‰»[<<™Ñýî¹ ®t4Ë#ÖFNίÛ{»)ÇGA>{Åè­k÷Sx´Ùwèf˜,†§¾Ò +oI¬’ªâ´Íò¼RŠ7¢¥ò¢U‚T«¨_ÿꜿ¹à'ÿú˜ç_VºM#¶nÒ Su[ÊÔœP±ðÊsá€[q‡©ÎxÂŒi(¥ò—M¿àΕÇ\ô–V#~üôöf}NÓçé²t5*-àäš²Uµ“ñ€²ºøO&%hm*âSp»%Š! ".-EQ«$6"QD½¨Að¹ÌðF“ŸÕö•T ITÄZõó9q6GE¡å«FBô"Ö‚(ƃISÕÉŒÊQŸ´ú³™4çGT/<ŒD%¦I‹µ“–¤u)kÑK„q­‡Å% V4xXÍ ©!¢Ѧ!¿ý]½óþÙ/wÐè¡,9;žPÌ $BøÍo(A±› ŸÕæò‘ijÅhÒêKÃ'£Èk¿/ ûòIÜŽ™c¤÷ÑmÉšÈÙë¯Ëìõ74'ãw?Özÿ€åOÿ,¦öbWŃñëy›ÍÒéã½ÚÊ·U¤µ˜ª yte-èú\¼3à Æ9ìh[ìbEvýExé3¬«#Y¿ó-Æ‹åex\³uæõIn0E+¦ÕZT¢#™XYF—‡Wi‚Š4ª¦5 ªÆ­Ã6•Hðd³3²Ùj-®X©øAWÚ‹EÅn²\µE$Û”ÝUƒÉ{\ 3é~îDZi;b:ñË~µdþðë³Ù^­Hgp)ÃÙ’•U–/|†¤¿O(/èô»t§Jÿ gÙJÖÝÀÕI—Aᘠ*gˆ¶‹#ÁDµG› ý,Õ\T*QU ,»-3­ ªÔ‘—"©Âª ¦QÔ"uæpu$ì§FIË‚Œ@Ç¡½ »¨Èv…ôå‘hPkàù!É­ñSe–uFe^¾w‚mv‰6‘æÞ¦]Ë:ñv^¡Þ{ƒÞÉ]ë¹LÝg•uå¹þã°Ðos_bïþ!eÓª¥Ô¬ÁÎu$5Bº¹C]ðjT bhŒˆFAêU9ZßI—šÝô²8[aïŠÎ÷Ôt®àMÂÝWäàí©Þºó±1¦…:ÉH%ŠªGÅ(>uÔè®qÙT"Ò*‹ +Q ”ø(un9=ìHgZh²ö‚ªú$¡|¦ÏÎÇ3¹v”±×»ÎÅ›=ä¸gsÀHáúZ-áÁJ+uÕº•=™ŒÛÐRçd#†2aóœUš0/h²™$û[DEÏOÎ8|&•Nn¨« F,K5’uT%‚›[9Õ¸ª-m.I+—_X × à ´TM%‚Zb´›ìF¥éxÖK쯸ñÚ;œÞŽïo±Z¦ò­œPã«@ì&R÷s¦©rÊšUlÄá•xÈ-ÝáT/xO¨¢Ð„“Eš­ï>a–d8¹¶ÜÆ”Žï Žð&´N”[ÍH®ù‰ B&yt* ‰:¹‚ùä²e‹Ñ„žï‹GÄà|I*™¸ÈªÓp "®rZwß—p!Äc0£¡ã È×2ê1ì.ðë󳛨2§«ˆæÆkçØA,º¬îö¨'"±Q²½@÷™†$ 4ÇìnõÌÈôL¨×"!ê4Í£ ¶=Ý¡b­âR#JŒ‚¯DÖëMRì(¥X‰&Á"^YÖ^¾ýpÊ7îMˆQõñÅ U›8Å:I†:W¯Ë†r€ÉrDŸÖ¸bPlˆ´{ˆ>`²”*Ë9¨æüT§`ˆüÒ÷Nô‰Üáïßøœ¼øÂ˜+W{üÔ_ÑÛç<8Yý¥ "üKá9»w$g߾ǫŸ{]}ˆ`¾(µÊD¤®Ô\,h4¶®‡sºQP{¤c-’&ªyköNÄ©éäGýOc§Ù›oÌZA¢ÖmG¥mî ®‰Ú_!±—#yªš¾QžŽÙ×ÉÑÃ}d¶ÄŸ+"â5¢W“w Mh&4tbŠ™®¨ž ì‡D{<Î:ÒX§H¼,:ZÊî&°NbD6šüêüu(ˆg9ˆQõžxû;0=1½·*F#‹&0¹³I*5gS’Á@›¼ÕžÆ‹Í†ˆ­šËJŠ‚&MQh²Îf–Ü~êeré K_kËßxšça•³¹ôÞù@«k‡œ½úª.zCÜéÕ[€ÏS•¨`1!⊠ãkMW+$€Ï Ѷ´‰R=u7'jÄ%ío]l°Kw÷™M$bÖíôõâù]Â, ­ä+ ,MžÐ˜\›¼‡>ÊI Ej¯¡©ÅmÚ±í#˜Øh2»‰üü±&ëÅF~uÉ37¨±ÄM)k0HŒäM õÞ|†üÆóHUoÜdÜí¶½èYŸŸHóh¥óû·Å/ftG»ÔQ‡«%‰tæ –Ã鋯 £CâêœN·CÓÔøÛ„Æ0ÙõÚi„Q!d¡W&Ôë©”‰×"MíÉœÓ\”¦ðêƒ2¬×”ëÄ’TÚ&ÄJ|J¼/‚ÍŒªk! BÔ`…zÕPßY¨[5$òÌ“¶^)°×Ã=7nY' wLP»ºJ÷J]-8‘ûœŒï¿Î3ôŽn?9–ÇYWo_¹ÁlÄëÁèÛÜúÏ‘oߤ¼x ¡ZᥔÆ6úƒË­hK÷š¤™ö|ƒø@rûþê5"}5Qp£Žêøe)NÞÑ®û}’k_Á%Cè °ñ;ÿâBÓ8åÕŸ?äÆW:üØßÙã¥iÍ7¾Ýᤄfq$®[£Iª‹ævÙaûÚkº~–Iù5ÊáCr°®«öƒž$ÿ”ÿðŒêïÎ0ÿë²´J¾¡¿éSkPÛMwF5uhtÚ©·IëL¼™Sï)fkŠN2¸=†½éÕf¹6ÞcBlQ.i"Þû.VÉ:øNx1C?øX­Fqx5bˆ»[ÄNNÖàz=:‹B{‹5ZÕ›á'Ë~ÎrHÓMˆ^5ª`ž{I$½Ðxö]ÎN¶©mÊîü‚7î¿Ç[{ûQòÌê!Êó¬mªÙþH²:P]h8ŸJ·“QÍ̯{¤“jâ±SéåÈð$¥¶’¾M´QuF¤Ò¨ÆÖXkÔJÁl¦>V?É«5^%ñØ( –%Éì¼U¢-*MN(Ö îÕßW+ýƒ߸ÉO½ð<ÝNg]›#£bDÄ´­j5FED¼DÄX5A¡¨E}‰?»h•tVp¾Q¢Š:Üøü˜78×ç#Üëu8yi›Çßš ÛVÁëíoФ†,3Z‹ “»4ú€( ¤SÆ“-Š^M¥ Þµe–¤byurE?{v• »¤+–ƒzijõ¸mš‘>XŽ; -¬gf×:3k¾ÛÄï oSŠÇ‹rsùþÓ{ÿ¥^_yQ;c{}ÌÀë{/žÈÛ3¾rÚ×áýªws5F…X`ò5.+Øëô¨)ÖWY_@™’:î,ÕJL7P¸Ãú%zÅõ¢Ž_ipÝ(~f¸ø ÃâÔ1?Ö QÄ¥ª½q[pŒö‚&©ÊSk£¢¾2”e"E)Î"XüR¨šÈg3&«Š?ºs¡feËrŽì`QUÓëcÇ;*FD0ŸH’cDZ1ItÕD4ŒMˆ.¢Thé±äæ•s™ç5u­ú_ÿ{^|ñK¬ ¯ýíœù¢æŸþò{Ü}°øQeUá< á' ûÛÛ\nSg‰,zÊrMòí1§5X#bl;›WT­Á8'I¢:ì¶72±V´›ƒ³;[D5¶¥6‡FkÒ•#Ò$ eM²¨ÀQÓv|ÝÊ‹õ›ÉC/c6BxûIãò¨d‰§í^R„hµýÀIB¢V(#aí›Ä‹™úªB’YAi”“^.»u…®–¨S‰ßúÉ[¦k°e;á™® šÄ"y&UÕ°~|›XÌ1JÒÆùX‹˜î¥ä¬äQÉ„$ûäЫÖyWVýþ§1‰â¢'oâ'§§Õ­JYÕ¸¦ÑïsäˆÁ¥ki¤A«ÍèÚ9ITƒÇרJL±©Å>:Òƒ¬oªtp‹5I’ ª¸³SLYµœòª Z+>ouÀM–a#äÕ Sd‡7q‡ÏàÒ®t·®µÝ¼y riHÐЪJÖû]RÜ™K1pôì¡®áâÆ@ŒWì¤Vbh§m—&]cÅ„Ó4ت ¿8–t1A|ƒZ+*m a4OkDUõäd$ÑкÒ%ìÌõë„Ã+Ľ]bð„õ ]Îev÷#|URœŸ¡U!tºÛ;\·’ãE³ÛêíÓçžGÓ Öçt:¾i8ŸQvoÖi[gºUÊñöÓ~C†TID£JðAE¡“8Ѩ¢‘$ÖZ¦–¨†þÊÓ$iŠJÉÓ|¢Š½ »”¶²žÒ#óM-Ť¢zëB!ÌØó)£‹=Žš»¤«ZPÕz”“=;Æä®…BB–²x-MÃiøè éŽ_ùŒPC÷ø±ÌçpwtSŸ‰ym®¼ïï·ÈÆ×¥œ>$VkVÍ©äYCjí%Ös#Œ"Ö”½ßü}m^{•°kE j‚ÈðÚO2ÓLÖ˵;ÿ·ýyd5‘øì¶f?÷ÙùíïPÿ:ÜÐ0þ aôŠå Ÿ«ù¶püQó)Ib¤î´ˆ'Ì›¡ ŸyžÞy )ÿ¥úî±ß1)ö!¤_+ñ?¶¦þ™óÿ ÚNY*H‘O­Â¢>h@Eja÷ÞU.öO‰.°r3<5<Ø'~ã îï¾~æ„úÎŽ”,pO.Ú‹3¤ šXB@ÂùRûÎÓO>Fy­³¢+µ¬4ãhxÈdxEûÓé䌠*>zdáq ¤ a,¼­´ž÷1™Þ^pã¥._ø÷#Û»·v䡃ïx4óm€r­’ÞzÀúÚUÞ?¦¾ Î ;qÈkæª$j8Ö3NõŸDæY 7JÓ©¸;¼`žtp¼0Ûã§ŽŸ—¾O809àX¹†ÇÝV”w»+¹ßYèsUÂ$-dm‚¾Õ¹#ßè=ÒD!ñÂÞª ?y´Å­Åû2”§ØÝ’*Zyó¸Ã—nXŸôÅ›F]ÖHÒ›“ Ø´"Ì viÊYOXO÷IMCÖ/qlOEOºþ°G³TLéÞ$}•P–÷R–'ŽÅ…a5o·=Ö"ÁCbUö¯6ˆC5"-¹µœUe*ó¢ß^¹È: u0<:_ñGë‹’™oI«éÖÙhÖh²µÝn®bl‘¼-´/uTê¨ëFPÑ^'ÈápÞèKÇ?sÊ×Îi¼¥çÞ¸~A'¯€(wç7ô_¼›óî{GR®Þûð‚ßÿæ}êп|¿Ð²4å ¯¾Æ®æÇhŠÀ`êp$„LnëÒÍ>´›#œ¶cnÐ4Ýp£[ƒSŒb½áÛG0 IÚдD©mÛ6«HRÔZªQŽ ä%vÝ´^ìdÕNgZéVãu‹±cU¶_/-oÖ´†Û4kG˜!R 11ÐϱF0RÓÌŸl`¦9½ 05ÇM$Þw`#þôW7$ÔÑDæ¶íìUš¶´Çd]ZÓz§…áñɰF.}/?DÕçÊ5ׯî°õæ>6k ±Ø˜s~æùðñºñõ« ¾Rœ³8Ü'¨#UŒKém_GºJ7COWmåÛ듺!¡\SLZz˜5ÄÄBãɃÁæÛ¬ÆÛß&óbÀœ?AêužP :dx”´;Â¥–¦^{×pgçHQ0¼ú2v0—+b]â\†uÉÓê›)¸y$®²4hi¸÷ü[{ì²j»÷-ݵƒÄ@²š‘ÍNIÓöáS¨uD—ÐKÏ;vŽ‘qTFtÙÑÏЭ*ÊxÁúKŸgöü˜fÐ'.T÷ïP+–'Gĺ¡žO‘¦¦?Þ¢wõYêØ´át?FGg¹±Ì^|˜$°:&ïvð¾ábò©ý:å¼_0,S†EB•V,;‰vhœÐ8O¬#¡öd6Á¨kŽ" %³NFVZ =&$H4ûÔºÕ³¨X=…8|ï#(>h+ƒK7™:¹TúÇêÓsXU¤u@ûñö(º›æ\ÝŽÐ-¨bA:¾FEAL•‡olÓô,ÙlH~ZSõNy8KØ}Òc/e’øaxƒrúÿS÷&O–%Ùyßï¸ûÞSfdDefUfM]CUÝ t@7»A‚$€FÍÐ@ýZp¡v’™vZi%“2Q&Jf$e$ aìnôÀ®îšºæª#"czñæ;¸ûÑâ¾Ì*X0nÀ· ‹°°ñî}ÏÝÏ9ß÷ûîáËç7tÞ̱ÓjÁFOKm s—`b ?~ÀðG¯pþ‹_h‹ÇXczû?Íü02yð:Ã|×Ý&Õ%æÙ=IX}çUÆß[rv;£wÓðø¿køìO¨ì>ã·þñ|‚¸œZŽ™Õ%t„Áöô?Ï<ü€Õè 7`&èÿÝÅÇýæ9‘Šò[m¸XgúðÚ~3¡Šd}ŠrŸÔ¿ÃxëˆÏ<Æ o-&¯ð--q6Át¯èß¿MìtZ8÷¥-õ ‡ç„ùÍîð #¶“b ñ5(4ÁcÅY‡X‹±+ ªŠ3naÚxº…ÐÊ.–ЫO#@"Ú3ìì „©êjÏ"¨$Í¡ÅEкAçK´i‘ë±®ÛIVž![ÃÖ°º=BÄP=>o©Y§¼÷Û÷yG!1KºÁÃÅæ3B'!tkLß¶6q«Åí† Þ´M«&Ÿp~iI4“îC–àÇK|¹Â‹eØuô' ¿Ï…ÝÁ.!&DÅ• 1š®ÁÔî M?eµÛc™çÇKbÏûmê]üEZýsuVÍŸAÓ·Ò¤J… DöŽ ¶f–Ç4âåý£ m„ÄEv7„»§†²6D…Ížç¥Ç.°ê]Ë»ËmÎO3’T b ,k’c_à©H%CbÄF¥ž,iÒ„bw‹ã™²q¾ ›CÕ4Ô¾C]y»RñÞA‡£“”î~Mé×/-ê£@ÆG¨@´5 Õ ¨f9ùpŸù;Âå'ë6_Ì.I‚ƒI—ÔٹãÚ 5é^Í*û õ ²1ŠUÍÐtȳ„ûrÎisN40.&½9¹5ŒÓ“l‰X(ꌯ=E?$”®Í¶z¯wÁ·ŽùÑöâñ6wŸbo«!nßg¸±25Ç\®3nŽ7ج~¦ÚdØ$\.•lëë ç]êƒ.xC8/p¶!NH7qy‰uŠÍj44«}êé€r2D¢¥c’­ §è*¡zcƒú¬]#‹=OwÏjÃé;9ÓÇjÖRN}ÝZÛ ò’M¡*ºÆ˜ˆWGU'4>Ãk†Í >Fî¬àµ‰ávå('pïBI7vmlp³T’p ]”èU¯BâhŸƒ UèyêÒ„ÝþŒà ·O»üÍ'ùêãÇÄ(Œ—“2!5‘*:þðý+Dœ>ø°æ½·Þà‹Ïo2uø'¿þÁ'äþÿfþUèVŸögú—TCú©\ùkyP¨ƒ&.affL/NºíßTÛë´Nƒ"xàoGî¦õï©O‰(j›–NR;Å4lZýwaE‚!b4 j©º‰JlìuÔbb¦ós·F:´“m±¥äÓS³Æû®;å©'ké„TµÕ»KXœI³škH öÜÁl°¡RE ÄF$6Ú<„K£h–¢ídEPU”Dõáë_;YUª‰JÄ·ídïŒT‰EùóæyMCoXðÕŸ¿¡Ï~­Gš”°ê”[œßÉyåì[¬zï`åeºå5Øû}ýǼ¾‹ËZÃÇCŽù¬™(D‰­þË sÄEu‚mjòÙ«1ÍJ­»=´^3Ôös$머”˜:6’ï?O‹³énÞ M‡ºz÷üÁ¸§¾ ‰M1©ÁØ4¨ˆa¹8cµ𕦠hÈ%hÔäl…xÿå£"h’¶Û]ôš.&¤'šOÏ0M-.¼µT┨b 8DóEa#Qa=»ù6&Ü€p¨‡2a¾‘2/çZ¾û&¾®˜¶ñHB­=q ½ÁÛé’Þ½MÿÁ)~k›4DMŽ',¯ß`I$Lè úR×5ãñ ¡!ÁÈEwI­Âå‰Óe>gžÍpA,µ hP Þ«±—¥€Ñà„h£F5#du$Ñ(5Šwò1SQ‰¨ rƒï;]7ôczÙÚݬŸÀ±­·Ö˜D$wÔN4]ÖàŒ6Ó Sy='š«fEJçvÍø£ÛØ«=ÝÚ¾Á,9gçÝsÝ>¸Çìr‡÷füŠ“Ë¥ž^o ¹_¡çÒÓ-Ì("ÇB‰]‹Þk0©‰ø¡#橪is.⪢óÃ×Y¾tE››[¡ê•$Éõžcyÿ˜Uþ½›ßÔÄnª™ÎžºJÅ_ǯ"ã÷þŸDF/sùòsÔÏü,ó·NN`cD­':™¿Š3ýÎg)'G”ÅšK`ö‡º@ÞÞVûÙwD~jªîµñ¶Erú¨ìl¡W6D¢QlÚ¶ŒÁïÞAB›$=¹t¦õ(À‘eþ‘ÑüÈQ¼tŠ»³R?“aËcûKž¸4Gf‘~6Q—åÌÎ÷ôNÓ•Ù¦.Õ² ŠÎç„zF½ZªEu-±c´æx œÇ.F,b£LZGmrÉ72f—æªÓ»¤UP§¨„‡ôQ’Ðn¡éÁ.u'“¸_éI:" l1¥Èa6‡ƒû°Àp„>ý˜j’ˆß>E êû‡š–5[[[G¹Z! ¶ •ÕØxÄ9¬±„FQÔ‘²¡6]-ß5­u£³öÊ¥#è ÓbPu¥"©çZÃ}Ó~vã|¥1x´,IÅá}@}PÍx|‡âPdmèx ÆPÏ–ÄNÔe¹0ØÔÂ׬AH§iÒRÞkUú`WÂäTc¯‹U°Q‰"ÔΨ˜€uª·§ꓜàF2âªf#ìER§Åƒ%ó,ÇÚ„lºD­G%hè ºŒšŒKl¨7r©v Ñâ¢dÑ1¬6 F÷VlêÁÕ}îÊ6oÞ_è—_è1²öOßàïþ—_åÉ¿û/8ÿÉ}~ö_"þä„o?óãÍö@ïøѹ?/áˆ\"ôÚÆv·G…(Q³âãÂ‡Óæ © £zã–áÙ»N; ÷ú0:OyÑDuŸ©ˆKÕ pTZ¢Â[w;€òÁa®•o'"Ó±ªmjȤh• tsÌ΀ä GóÞ} 1`ň AÂl‰vµIrš¦$Ôª^ëʲ˜·úíÙÒŠ!MÚ£B{„ùd’ëÇY_U•cT16°SÔ{a|§Kˆ#MŸ’xƒ™$úþï¦ßv|óïého…/y¦w™£Ʊ¢#9#›qß\èI²ÄU†Y¾dš”Ôi#‡½ª¨1S‹ù•'{®ÒŸ<>âŸ_<Æïü¯bÖüO)ú´¶Š¿ ëÓPoÿ\òW‘_ñ© ‡õs|º¿©*.MØÜ»Ìr¯Kg¸EZoƒK¡ØZwóc›Û¹¢G ^1z\1u@„,Á®CT ÖФ `™¯ÆøNPgÑ­K”[ˆ`Œq ÉR=¾÷ŠØ´K¾÷“ówQmI*æÚg0wÞfñúw¨v÷1YA,—hðTËóv|^­ðå £`ëµ¶^ãÇ¡#­Ì µ–d1E|C2?'›ž‘”+R ÖR['ÞƒÔ‘Õ-y>ír)IÛdÛª¤Ñ@Œƒ¨:N>”3ÓåÈeÜ~çÔxªycB IDATÅg-©ulÌ—ô«Rϳ(¢Bºµ‹é÷IŽÈœF„í²wÞ%t Æ£M=¡ÓëR×gGâCƒCÄÓ$†Kç¹t<œŽ¦Ô.€íR¦­±3T*E‘“X‡FðêH‚'éúPÓ`ë ª¡@¢mwFµB,ƒ¸…¶&ÖA²®1ÖWÒZmÛ³ú/_´-νˆÔëÉaHÄH`©µœ­².÷Ýœ|v›ëƒ¯Ò”•ÆPËåמùý·ÈO6ùÎÈÑ‘l_µ„þŠó9>“yK²Õàbgÿi[¹'‰ÄcKv8å2‡,»=® »uÑ+oÈÙþ5+H&hH‘Á&½Ï1¹ý}™ºßgxõëêH%45ås7Ð,¥ûý×À¦w«ã@2|›áSÏÃÓ_cùÞ Stاnî3Y¼J6øºö¯ým™Í¿M½zÛ»‚ë<«Z×¢o:Ì ¯IöËýáóh] &b{Câ`HXžJ¬¦ˆMŸ¿Éä½×ÉD7ÆÛòþçßbë·wÉÞ½‚=8…ϸüÏŸ!Lvö<õ?ƒ°As,Ü?ÎÉlŸUìá£ÊJ4Ö4ç焦Á{OІ*ñ¸4aÓwÖÝZÁ´§Ô&ФˆÒøˆm CP!÷2¤„¤FÍ× Z3Ø#Ü‘Ag%qò!¹5èíB|· ]‚½-¦_ú|»Ž]L0ïßBÎÎÛÉÀŹ´»›ò+ðø¾Ô·ï£’מ¼ÓÃúÄPX>8Ã'°h »ªU,$ø ‰ Ä€MÖFã5a=¨ ,ƒb¬A²g¢÷ĦAËŠ0_¶xâf%oŸr¯:¥ÿâu²­œWˆ]K ÎHL[ÔÅó bÚj!¶š£YŽvz"¦ &ÁÊà‰ËZÝ™Ü1ô:W©iÊ;¤ÓFdvAÌ-šlŒu w´ÑJ*Š÷s©šbÑú«†…ÂD!O‚#‹‚¹Û´t½.Ö¯Ô,‚ ¢1ñ® ‡3¤‰R2–ýç#.fÛŽl²‹p^Âûïò7>{™^¾Æo|÷#þÁÿù}~åoòäÓSž.`ø–æd¤¿÷Ôdej'3Bþñ`ïáÙB"ÄÊ>}4Z6D$®ÇŸ8RIPò:%Òd“]8I§&áâø„7Þã¹gS:ˆ÷Êݸ²ÑPÖFÞ?Ì9ž$,JÃtiIS%GQ[ôÖ Ww°ÁÓ¼}1&ˆ8¯ÔM LØË›L.R=O=óÔMÅù¸ ß¯ØìÕ|tTðÄ¥R~ú³¿ùûJ¨ ±_þ#“å:«8"AAšª°Û$âËŒè-š7è,ǯ„èQÓO$¤9¦© oqr:b6¸žõ)mÍý| q…˜vV{–IMc‚dš’|ñ$çå O•¿+KçH: ÒÑÏÏ/Nœ„û,GïËréü¤‡i$ç9Ý|„â ÓŒeíÚ4Úõ!ÇåK:—ï’åSJ®Ë— î'üâiŸ~°-˜/±œ•ÚŠ›y’Áq?U©RÂÂ`:þ^0Âì0á샄ù‰eÍ|YG´ ©DLzÅ‘?a4˃tæ v®TeÊÔwH]Æé¼aV.xÿhÂkrDArc›Ô(Ï »©gªÊOõ½é¢äaV)7wÆL–É,å‹Û_zîŽì VüôwÎÔ“–§5aÕ•7nõùpéôÆÞTzš7Ê.«Êñ•ùž~ƒÚ[ÙÛš“§1J’€~ï1ŽÞÉ™<®¼ô¥-ö§‰~pk"üã¿è\.ÿšgü‡ü›„þØgnêK¿ôs²˜ÎñÖbÒœ(h-^Z™KÄKC°`"äãF‘ªŸHlÇÈjc$¤NVÃT¥ïZYž éŸÑ¤=DÅF­ª?e#×àUb¬Cú¦Í”p®5CËÄ—ZÕŠ˜ºÁÝ>EêstŒTe ÏGÑ5h@$<òÖÉ:I¨•DÅG8l¥E ¦uƒ[w¶ªÔá|›÷ñ0n³q†*q̽‡&¾‡°Gš$¡, ÌÃ"CäQ'ZE$ªÛqŽ8Óªoƒ «Ò3¾½õ£ãHÙÊÎ4.‘6 Íâ„×ÿ›ä‘»úð é\YÒ­V-ŒÆZ𢸨G3õI"«"{ôµ¾ UT%ݹ¦.눃æ4ZŠvã’®’\B½@’"Ng„U‰sñË¥.\"ll#Ǻzï©÷¯§cÔWJã…¯Ø?iGn¯ÝÃæ¼1ÕŠtzN~~ 64$ï¬*FV‰m»½QõñFy~¿/Ë©0[Lô1u2G™&L| ÖžÛy®wœåAþ®Þ5V¬ªú¥§[GÙXÖ$£ í]¹*£É{êËšSv0$Ýß#==#¿@mRÞ¸©½;wH'K¹¸¼ƒé]ÞB]Âì䦩Uœ‘ÞÊl¤˜5ìM7tÜ¿ok°Ê4#J;&Ž!"‰Ã£!¤ê Ÿ&šU 4Ti"ySS'¶µà¯g©¨ —ž¹7P#Hä!cñO—!†{íERMk/ÍÃèÌØ¾WV匭+ ;šÔFlšpÉnp@ÍÁWèOxâõ;œ}öEͪë²ÿŒ‹ËŸþ&/ïPgâàbs‰Ï"á‹,?;lÿº•ïΑw;R¿»dô£c´»­¦\Êð[o3{é›Zߘˆtß'^l!Öj|æi€Îßÿ–ÌW3ºOýFɪ¢zê:t~ø&®nˆA¨NÒÙ›¿ðUxöº|çÑñDL?£ögL«vnhß|^¦õ!qyK5»ŽdÛppµyþ5•Ñmä/Q®œL›qÓ zrBvp[5z©³Š^2 ±{ºÔð]¤ZÞC«Z3:"Æ¡Úh>¿$——_aãÙßÁ_Yrz/ã‹ëÌ–U1âë ~9–X×Ô“DÅÊ:Æ*=)t„mëLƒ„š†¥«1ƲpÎ]#ꢑ¾osgh"Ú v•IÕkhF%½°‰ÄL‘øhÿˆŇ€ª¦+’y‰ypFs|™piñ˜:êgŸ&®–*Gpô@äb ÷Ôì^Ýß#>ÿ”žÕµ˜w>"?¹ WUä#5y&ɵ+TÓ9«Ó ÝfÂS£ŒWËBW’‘ä©X]ç­™1±­’»öØ4×XUÒTKbYK+†ñ|*–._zòkŸžóîáoã.:êò æ`†Ljĵ†ÃlcDÔˆïtÚý$¶@jã,ÙÖ6»_HçÖÉStˆÙˆ|Ч6–ëEͳyM…/ }N¥Í`ƹ«¥x∟Ïj¾zç| oŸ ¹{:Ò'“/ì¬øfb‰ÃZíF%‰ ÷K'x‘ñçðøî”²v¨B–’YÎÃ0·0)¨U˜Œ êÚêé÷ð2’áYÉ/oBþ«Wù¯þ»o+9ò_¾ÆÉÁR_ÿÖ)©3<ÿä&?~çôÏ„3ýõJBÿkûðuÃj¶DÁƒÔ'Bp 1Ô䳚Ä+Õ0¥É-±ꮥî%§k×Úš!«ñcÁœ*q@(Æ¢¡AëúÏiQ¥MèF£Gc€ÀWp‰iq·i†=¹C÷µWPçP×b!‰Ñu"‚˜v2¡5°™Që¼ J‹–4;cò.zïuTMš1×é ŸðrˆPeјG+±Æ‘dõÎÐ×kXBöØ3<÷ ¼pz¾Ïo~pÆ«G ^~JùÙÏZÞþaÅ[?>'¨ÇˆAbâ v± óÉ“©ÇH$I<Æña†Fœ5ؼ•¨1Ôy¾&@´þG~Œ°½ Òë(4’nìcòn{£â›Óé]VG·Ö™„k»¨f“{“à²-|SQ‡ìõëõ ÷ê÷h–tk³ª&¶ly8áj¿ªŒoZÇrB:ãÊÝɵ–Æ9Œoý âN ¹ [‹Weså)³Ҍ󺢰– kx­pœ]NRËÔŽé…”~0\òC6|—¸¸‡ψ,Y>‘R_Úas2a-"ÄñÙÙ¢‘z[Ut©]Jç¸tzÂt{ƒ¥jÚl˜¼1ì_t¹( §cT¶ñ¦• #”©PTžfUQ%–´H5¨W‹—Hçb­|Ì›š¤²˜è‰‰Ð8·Î“4‚¿1Â;GœV­¶Ö®%‡Ö¢…ƒÌ"Öò‰¥0šVDÑʹ•:1§±õ7‰2ÚÚ'žrxç'Ü_¾Ã³/Q{áèI©åɽÎ犻O?õ\þîïÑýöïð˜ÿtgq ·.MùHNé¿~ó–½!þtÕ¯lq÷ð ý÷ßcãÛ‡4¹ÅÞ»G÷'¯S?¹ ¦ —ÒX#’_ø }#ÌŽþ„êÒGdOc¢#™/©ž¼†ZCçÕ·‰ÎÑìm·Ó¼ó ò-äñ¯°¼ý}â¼"öæL? :OQl~ùÉoá/þÓ} ’âñÓ˜¡=ñ]|­ÜþÝÏ1ÕHÂ=6–·±ÎB'gÐŽŽ¿Nÿƒ[,ÇTù„à*ÔFT-Á6†¸µ`Îm83T§/sÿ"Ad‰1?_RMgøeI"†ÌYp‚3f T x"žÀ\Vˆ SCª BGÓO ù#³¬diK$‚[E\Ài2%4îQðAWs RÌ:¹LˆÁbHλÇm#qÔÛ#b· ¼²C³µI_ ‡àƒ0NÐ+—ÑË;Ä—žcq>aõÑ=ŠÓSÌ|ÁàÒ%²á€«Ã!«ó 7Áž]¹"”ãSÌ ‡M3$*mA¡lh¦ ârÕú9Öky ÚRsB@ˆÌçc=áūׇ½w‚édÐÉÛå×YªUÙ®…"Hž@ÑC  '%œ.Y…%ÕKuÏâ§ÈÚï×451&ñ&ËÔ›SL $U…· •dØÄcÔ·“)Lò‰*•<ëºO¡\j0]@Û\*UC5ƒ'L±‹H¬+š"!¦WGº÷¦¤ÓŠj«`9è’­j’jBY\æ™òƒ×Ïøü“}þÆO?É÷^½ÏµKf³šøk·ø¹aÿïxþÓ_ÿ›üƒ­)G¯¸2_ÒØt]ò±* ŠÐ&alK»ŠŽkÊmCݱ˜*‘ –Ê&,žÚ+ß0ßLèm¤Œj‡qmÞ‡®Á–·Ëð°Þ\ïýOøøŠó±áþyÆÙ¸æÍ,¥ôаyŽÙ />ZÁ¯·qYmršGº»‡T’fJ'om¨%%ÉÖ]>¸¿BqHÞàY Ò§»Êɲ†Iÿ‚›ãmŽF FaÅgÏ/èúÀÙ{»ø‹bã3¥-J$«>>MFÁ òÍÄú‡P*3¦¿ä–¼òTóKø²K5ÛÀûn7p½û[¸¦¤\m1[ô)Ç=´IH3OÞ« A“Šúšó"Å®ÇÊjf9x#g|×B«F5ë#ž5J6‚â*˜+M„tá)î{M—†œiQõ|t<ãGwƼó`ŽO2z—÷p[˜N—Ra#V|>¯y)÷$.и@qéœÞÞ1ÑŒ'Ó@Uf”‹œß|ç*g#’E‡«ÝŠ¿wiQ˜J¤èU<¬ÌïžT,6YÜÙ^ö”• ËO Ö·Þ Ïq®áÉg?bÑïñ ÙѰԚŸùÕÇøÙì*¿øÕ«ø; ¯|ñ˜íQÎdÞð£·OÿZ{@þÚ>Þ»ÅŃ3žü¹—Ùêq’YñJtBÕK(û)”˜T„ÅV¶F¢¶F쇦.Ú©Åý½‡¦iǨÖAhÉã=±©þ¥b ø±“澤KR²ª!=8$Þ~ŸÐqk4n ¡•(´e¹!`«šf0€íË$¡ýÄÄ$§¼v“*Ë)ާD_:ŸQæ)«NJÓé·vöõa®Ý("j-Ñ.Y @¡IH×õèo\eU$„º¤ž^šš,`F—ؽ±âë/õXœôøµ™`lÁ¾Öðå'¼hŸæü‹úG˜ºGvü4U÷6gý#òÞxﻼûÊw˜—#Nî Ɏ¸ÙnŸf£OXÎhÍ,b3D#&ËH¶¯’ vÖhш$ZtˆëƒHék´?šŽHfIF—!I!FB5'Æ—Öä• h‚µ9¦*‰Îᇛ¸é”ôôŒ˜õÛÃñºUc¡„$4¸rF>~@6Ÿà|ƒÆ«m`bŒŠT Ën†z\/ Û8N¡wq3…Ññœëó"å`¸oo¸À\ Ã^Ø)®Å!»þ&Ž 5çºâ<;!6vYRv»,;ÅÕ}š^Nqÿ©kªý«„4£w÷.vѰ¥lθ,Ç' ¾. ZtèÊ‘5Žm?'¨²(*ÊdI°‹<ÇÆ60Ñ5‘ºH1Î!´ð'¤Ëm!IÉ›Ÿä‹Hc4&í1t]Ëw›ÀôR—r"GíØâcH“BîÐ̼zdñN B\ƒäc‰®¬ÁjÑ´‡ ]O&cð„í –‡ÿÆë¬6s6LIθHRómú?x 2gn;›OaN>À¾û}ªü‹Ô—éÞíÐí^¿Á·ßÂ!ˆ–_Þ&Üìnv¸ÿ_‘=ûC†x€Äƒï¾Åôk_¦ÞTd2CC RGêgž¤›¦,ßåÆŠk_Á%]’ùŠf—y§ÀÌfÄ<…ºÁ|t“?÷4qïy–~±†˜VÌ–oÐO¯Ãð%æ@oòC¸òsÔ£Þ\Â6»è¥cÜà#†G ™Ù` ò¤ë?‡›*Éé HžÉ‘8áî‹â¿W“Ž3?Éè=íHÿí·q¿ž3¿ÈЦ¨§ BÕ`‚’*¤yÞöa×½¬…©Ñ±AXÑàMÀy¡[µY62Ò`1Q>Î3\¯6š¼Í“¡Ž-. Ø|IY­Ô_"¥ÔcþTûgÃw釜(.Y¿'”äxŒ‰g¤'ÔW¶YínRwst6CNÇÈ­;˜ãSôÒ6º»ƒ~îYæ³òú;”ÇGGÇt/íz\$›œß¿ÛÂuU :!àC‹(צAcDÚd²vñm&BaÑC‰¼{üœM±6Åö:m¸m!  &*Ö8$´Iîy“|ÉB„ÍÙ˜“£­r$W"sêåj L+F»5ÃësĪp•Ã?ž“ž•Ð皘1ŽÈÒr†i*Ô´2¹$6¶ûDm[Ós\ãaV“ºHH2‚µ„"e5Ø¡ôÈŽp‹šP×Ĭ 51’Ÿ-±U æ4£ %¯WÖ ÿûwqÚðKÿÎ <÷ü.¦%ÛûþéŸÜáûNù/~ánþç%ß¼[ò¿ë(' ’®_û:?ñ&0Á¢•à‹uiÜ»ª(¬!$Ôv2§w:¥ð1±ÄÔ1$Ouù[ŸÙ¡(2ÒŽ¥.ú(Sø“êïuêy#”d¹ò™ÇKü~äêvÃoÿî9÷?œÑ¿ºƒôÛûßÏa9G£EÔcUð•'œMɶûÄ,%T5JÀ7–ã 2ˆOSöF†í 8Y€¥O2Å-n!TNÀBôpz¯a¸aI ÛC²šùшÕEeÉËßœðâç#ÙLˆÑãsˆ›è\Œ˜GC™Ô$«¬5ê©Y'w˜wº±ä«g g‹6DttJR,Z˜“(éè“ 1n´ù,b60-¶ßEÃØÁYuoÜž+,é#ŠÁýá™™S/ûLæ{T“.4—ÒÓ+Qñø3K<7ÄÊa;lWYN,ã÷³#‹oÀ8Å9À+&¬¯ä×»cZ×…â.,T&Ö±òÂýñŒWnsçtÉRÓèèï^!ÙÜ!¦¥ Ô5Ϧž‡ _Þ\@w…tW\Ú@Ú[aPÊ“Sc MÁêλã>O»À“×Ι¬æi…$ R”to>`~ÔG£°ZdŒ·1â×ÉѼ ½î—öÏIz%Á&,lÎilÈ‚°þ“Ï=DX½ÕI¿ÿó7hBä¿ýŸ~ø×Ú„.ÿ ÝÖ§Åç~­Ù_Ù#}bÔÃ¥ ^#a˜µ)mµçšÔ¶šQÅ5QZ¹OÛ©Ó¦bX·7¼¬ÝUˆs¢iŠY¨¨¯Û¾õìθ1îájô(9Olî÷H6d Åá}:÷ï’\Œ%?<`šOSb–c\Nê¶®Yí=Fµ»'v:C”ýõhu­ë[jS™<{‰t<§ÿÁK6|’Rf¤ƒm²+×ñ‰RŽ ‚!F’JÙܺJZ’ÅŠù°ÇtØ%[VtOgļGÝ]ŠÎ&×Y.i¦ –‹Lþß·yë`Æçn(Ÿ½VËù±²\Ý6'ȪOÇì°“ÞÌpî‹l^Ë—ÿ­3ýñOöùµôöâX²£{mpPhhÂ.Îû×(/o Óy{õ&¤™<ÜÔÛ‰‰¢aùèþ‹~"ÚQc›ßcloGbhX®ÎѦ$É6%Ö%a¹B\Ä'qYbŒ!ä} .v>ÅM.hF[¢ª-µª©ßH6=%Y­0õW•¤uC4V¢µx£Ô4I¤õ™=¹K7íJïczËŠw6É.&Ò=Ÿ1Ÿ7œŸ.¸mS9ê¥,ÅÒSË˾¡"ÝE-MµÐA²%=›ÄIeBQ:òÄRaU%½7Ïè' V Ë+Û8…ì½wàK[¬"tâòâ3È÷ÿUÉO"U’á.¥”ÿ‡ÿe©Ó‚þ÷îÓûá¹ôÿä+'ôŽÐñS\…m'–xuŸÞÉÕíÛx~׿€39®©ñ;Ä,ÁÞ¾‡œœ"! Ý‘H„4¿L3Ü£™!¡‹g&ÓÅk$RP _OU/Þ‚ñëX”Xv¥[×/¸öô«¬Þ˜‘ûm\ñ$¦JÅÜš}Iã=.Idçþ“+§,,If—‰ej$n-™Œ+ÒyJôKÄ+Á¨JH "b¢2·¦Qò&¡v Eãè'Qìš´ü±N}‘6TÎãÔ‰‹î¡v¥¡v YL¤³Lh¦ÊbkŠ™•¦Éh/€h+=5*Ûê_™c±¥¥N!‚7FlY“ß:${0¦ÚˆO,Í•=šÅLÂñ1f±Àœœ¡—¶Ë;—^¤>?§ùÁ”wn“mo‘9RiÊ‹¤­kѪBU±I"Æ4IÐ¥ Éú=ˆJðë½E•Õø‚èݼÓî-kt¬AšHêZé¦EH£ š !Ô“…Ôµ²Ñ‹|ýòÍ÷¯„Ìáߊ¼}è q©ð“Cn|¥Ïüò‚eÝáÖ÷»¨‰¤Mƒ8[‘ù.:ÚcH JÒÆ1#*$\Tj×—ÙvR_.0IŠ”U/Å¢Ù‘ÓL0¥—ÒNCAÜ¢¢sQSÎ ª«]1R[p(Žÿå‡wùÕ¾åË×vØ7Jîàk?u“ÿùÈ?üƒúŸ}½æóO¨ë+ò­Û· §K$K?V!Ð-ZJåùòœUñ¢¤ó€ñÐô!ÎÅÖñQ'bé~—Á/–Q?§3èÊæÐQ?ôsøµ@âaçƒO bmÛá/+HS'{W”Ͽإ™9&GcÑ“sŒi³l1Þ"jÄxE$âÇSl¿$/h–+¼¯Ä»”óq k*̰3žÙ¯8¹û1dX×±?ÙØSL”ÅV"Šhj£¼ÿÊ’§_îÊå%Ví§Ì{]|öË™Ø,jÇxÜ4'“š¤TrcɯrR¦òAŪ‹©»L“ÀåªÏioÂÒÌùúÛÛrmÚgfÁ‹ \ª’³¶‘*·ˆet+‘hõ*õ*A£a¬ ÄyùZ#„*²‘ÞÆn4ôÌ‚$]’esDUV³ ¦gWˆ¥ÅvjÉÒ7XŠ¥žüiÖ6¥UjNŽñX˜J‡¬f IDAT:ñU+< V”¬ˆ’A†"E/¢]Kã…øÁø”i-R!ŽüøÖ)-9oÓë“mn²ÑH;‘7†KEæÝÍÕ>OBYzNÎV¸C#|ëÕ#^}ÿ\ŠÌêbÕð[ß¾÷i¼òWøþÓ<ϧòy»¿À¡.ƒýÓ¬ô/‰hÿ´¾‘?õóÇ¿ô{Ÿ¹)«é5m^‡ËrQƒ†²–tî5ŧF]ÙÀªÂòˆñP2)Y¦Ò¶¡À¶&W ^bµÐöM ˆuج#"£ˆYû0T×2®ö\ÏjUŒ Bvü@7¾û&~ˆ6ƒ!Išˆayý)êіƦAB¤Îjyò ‚‡åJä­W¡wOͽa‹q,K\¾Móøu‘°&tÕ†$½®ƒzN*]1£kºÚèö妕ôtÔ¤³%•ƒ"ªf•Ö¢Ò¦B}¦*§ÉmJMÉèå'ˆÌ¥Žž¯¾%Cz Ñ†¸jð‹€)½hYi™”T˾xsk_Q—Gœ¨Æ^Áâ37$FL4jS±w?h)¦î‘,Ç"³õÎcÊ`„ô6øÿÙ{“`˲ë<ï[{ïÓÝæÝ×fßTeõU@A€`+Ò¢’eK!S’ŽðÔ9졞Êá™'¶G²ºi[2e†%Q[°ˆBÕ Úì^æË׿w»Óìfypnf%(¢4"¾ñòFdæÍ{ÎÙ{¯µþÿÿRQöÈÄ®SR›DÍÊÀì¼BHOö×1+5e™4¶@ç­FB? ^%¦…b¨1¤Üi·}™òÞÇ’!F4ån9£:Þ£Úf ‘ä¬k5×{#DDb¦ÖZ¦_½ÉlmL»>`p®$±2˜×ZºLüh ÍtÎw†%‡^äÔE­4ñLò¦¹Ä#ŒæÐr ´)jU<M—TÔa°bmÙ×·õRÔYÕb@¹»«îø”æò Â¥K“×ÑþdMÒÅõËœŒ ³)ƒÅ„Þ½¹.q\hvT‹¦ :´Ÿ%;«Êãv¢1¢ê„¬‹¼ô{SY߫ոNa©[¼ô  Y5{Âc FUsBzG êºu2½S˜1…«úÓ]Óªw‘º˜ûH]×RkdrxŠ.JeƒÝ¸-ƒ—_Ôu4ME7r}I•TÕ¬Z ÷ZŠÿq—îo]eÿ¿ù‚,¾~A/ÿ·¹ðwß¡úèDý§ÏiWdHh$IRë+Ä—^Òìì*šè߃Ë?‚Ó ·l ƒi4{v†Þ¼¦:(I‹)#ùå7"z¼LÆ휅 aG/M~ži€zñ,NÔž'RˆÝ’=_à®ODÞÞ@‚¨Ñ;œu˜2—5ÖÔNoq× M9ç/ý¶~íá_•L2¤PåÌÀ£ÔK‘í¬ÊÒ\4ÚˆÇkd­ÉÄJÂD”dÜ:U,Ñö!FûéÔ¼ˆöÑ–¡:TGîÓ:'ECW\µPB&E,TPA$Ƥ¢H’§F­é I”Žˆõ«•BD£µFLÓRî*ÖHšŒtNË—¿×ÓDÖUR— µ]iœêdÍèœÇW™àv­Ò³VÙU#£Ntç‚“vѱœGÝØ´ ¡ó žxÌeÅÉzÂWI˜ÏÑÍ|õÇÞŒä÷+Ó,,˜7‘˜D\Yh¯®LJb“h’D8›c¶ÇkI1õ¢mš¼— C=šeŒìŠãðäÔ¢T…Aªœî±ÒÁÒÉRÓ¢Ìè±wEÊÁ\½¯¤ˆ–Õ:wFºqé€áÚmû_‘/dœÕºi,i«a Ÿ±iMÑòc‡¹>_ÓÓ¬ïÿɪ03¨vOýbOʨLK!Iº©ÓE]aŠ€³5Q…¢˜10çLœÅä [NEWA¢)ZíæC©§ÚÎ+I ÕöBìæ¹¦©Ðäh0è2qŠæ0=6:?±Ôgö iM¥WÍ6ÉÚÕì"Ø¡ õ³\ºS‡U§JÆþ¢•·îêÇ{g2 Âaù`¬ãëÅ *YŽj¤ yåµBù¹‹s&k ½ù¹Oȇµ„h55%Ëýmü¢",KbS¨dýØÌ36_ºËäú1]mESRk”ó'„ƈ‰-°T¡\]9“~pªTï±ÃåÈrÖÛ$«Ü“ºÀ[ÏÐrçþ”¿û+õé^F¸óp&Ë&èŸ µV~ˆüßæᇜóùaçù?S,€ÃOwÙyöÅÚ€ÆYî¿ý¶\º~³ìPÑRðQ‘Ì"Ò)²~Lþq.MíZÔ·¤•Ò¸ã Äõ«ÇÝ,ˆHTLP$¦Ç ô'O}`Š„Ñ³W®Óm]¤¹tmÕùJIJBW\ˆ'“äz‰dغ‚Ú•~ÿ.æö~_î $wŠ9ø„xù&ó—¾D~>'_x²4 K{pD[däçÐU‘vhè²DL‰¤‰Yá¨êšñ™0•t«Óª²„–®çxQ¾wøø¤áõ‹CžÝ©ññižàã{'=u7GOŒ}JŒK®†îæs¤[_F¢%¼û-ØýÍ ìé#ŠOw!»œ£{·Ñk¤Kßa¶o!Ãu~EKyì`¶Oà-´KØý.b….iò1òÙ1&xb^Ò­m“-Îpõ¬ÃøèhššÁÃOq±!’¢'K©‡OABÂ4fsH¸¹ÃæGKÜ>øaAÜœò V…˜ç,Œ`îs$Ðl¬qVæT]ä •aÓ)•-1ù„ÄŒ¼((BKèÂ#‚G.ev®=¤;="./âÔSÆ´—Ÿ%iCÚÄèäÊŒzç*ÞÒa؇ô”$}Ê™¨2 |I‰.O4…1„>§ßO9°1ab/tÓ#ƒóP¢<T2œW|%#¬×žä ‹ÂBÞ›9ÌÓ6ÉÜAf1!‘hŒ@T6¶\xè©ièò3ÞRW9™Ø˜ð™Ã¦„Qí¿÷.²V\b´q‰s3çÝê¯îüW.¼ˆ÷çwï—ßãì¹k8cátÊ£³SöîŸòÚ'˜COh>$?ê¸ð#Ïs:È9|r§•ˆ±JYä~Gñ¿ìâÿË+LÿòMZ®ýíßcû—ï"ËßæÁ/>ƒ_bÛ%)\(ã5Â`€ëÆèámÚÝ·‘ë_ÀE¾#\½ ëkÈüœØ,ð¡£\vlÅŒzíöˆ0=FÖ†4~—i]!ƒWoü h ž½‡kÙÞÄGFÜ`L– ’ñT®ÄkNY”.§ˆu1C‚Sζ1ß»Š~x†½yÊæ«'x楧•€ÆÄÐ;ÊÆ‰˜(ÕâRÚËD:§DÛO(¬¬~öŒ–ɬ€K«5òI%jŸðYB—Zo0MF·øaÀÖ-]ˆêˆj‰«‹cÕökøŠñš$Q†âhWÅR,)¥Þ‡ázYg - ò!1Am•˜Þ·˜Û{çº9Aç rt†mÚžD„D8tP°=¹À`mS8D =›ƒ'¶Ë£Sb𤸠s¡°1 JiòÞ»h‰ ™°Çœãû‡l¿~óÌ&x×C77÷©Š– ÷æKŒsw1âƒoäLRÂ߬P:,j÷?öÔ‹^ÚLÏŸjœÅ¸œb6ìö¹Ülˆ}€D‚V RXŠÁLœ U€VSßù6Œ#åÙlÑ'B䊺†0°hYÏÌ,‘2C(Àå‚ PœÖh–è¶ bä:á¼~·9çî¯~Ľ7áÏÿ…çùâÕŠ¿øúÿâ=Ëß{û 5ùù¯=K ÿüŸ~Lè Ë,$ð䤭²—Ç©’Í2Ü™ qJ’Ç©{–T 0u ”9ݤNnnqd“ù’Wñþ#eôòeR^Ò$åí?è¸xÑpíª!¥Uýg¢ e®/á×n[F¼|92$Æ›ŒlIq>g¾h ™%—ØïLL#ÄE]’ t³9>tä® vBà¼sŸ»~³’€u^»ixî…ŒE–PM JøÆ7÷n'~ô?6OWrqÔð駆_ý•7ž/yù 0‘òÂ)$‹&A‚Ã%á¢@Ì<ÛúÁ´Ÿ7‘¼âΗçíÓidÿÆéÑQ”F”tTíÈË%E9íÏÕ&`m蓯’a9Ý %ƒˆš’v1$tÅ8’¤Ðî–„… EŒ’PÏ ‹SC35D/ˆ—Ê`˜È]B®;ª"’¬%œe„.‡˜Q8ÇÁ´á­»ø`oÊó_p››¬ml Q!Ë©5átQX‹‰¿tㄯ^>㥠§äë3–Ó1í|D{´Nh ¢ÏzÊ¥S\uç%ù°fm´¤(jfÌ, I)Ñõ‰yÛ7AŒþ‘@HógR¬¦#Q¨*@"yø?¿¹Ëÿ¯ö xÚ.1wüY|ýûH°äßÃ+ÿ$tùaï||—µËÛœÜÛ£[Ô"ưÿÁ¶w¶äâÕ-š* Ö©qY/“2c̹’}_C}Kìš~ì¥ q6ïÓad¹Û›´A’РЉé©(Š'…‡¤Ì¢+a}ã¦Ô7nèãз'_HJˆ>å¦CHùPâä Ä ]„íK¢¾íÙÆ"ï`öîššH¤Í )ɃàDÈ:/ÅÉ9±ÜÄMí$ÑŽíyFÑ%4sb[Oµ¨©‹ŒvXb¼—®ÌÆ\Ÿ&nëR‚íøÆ§ÊAjy~sÈñÆ%œÜ¡N*ùÓ!äO"†ǮM]'2¯±£ MÐVE6®Á…›ŒÐž1÷нÕþÉf§è½ïaï¼××5Ûw„ÁZ/“ãûXêOMÄ øÎö„d%Ùh"{( D.ÇŸ‰[α]ÍãH«d,­1â|!PZ±ƒ¡¾6¡¾yA.}ï{?þ"z¹fûŸÜÓ­@„«[ÊÄıo¸SYYÔK’ ä—5×§5/,œL×'Ì2á¤=%wC†Æ0pp&¢QU‚v.I‹žÚl²Þyb?K§§§ª1`-]¨NO¥¨•îÒ†´›°»V•z¹¿×0+â² œ+ÜTÈÃJ c„Që´i嘎¢‰˜6JÌÉ ã‡SfÖ ©ïlÆÌ`TM:ãH}ÛB¼¶—^ì¬ãÈŠØÜ@÷Ž¾Ú®Êž®ÕU‰46¼ó“ë Oynð “Y-ßÉ¿ËþåBF‹Ž²ñ̇™>¥Äb’KQnœ{쟑⓾Nv}]bÓ¢kkRž{.ïÞcïÅç°·®òb³ÃûÕ§üá(“—›1kï}ŠþÆÛâ2þÊ+8KŒI=ÞæDk±¥°ñ½s{FóÓdöŸ\áöÿð3¬ÿó;ìüï¿/)e<ü¿HØ Mƒé‚Zo$õŽâTÙ#êì»T×¾@V  ë4´²¹wÊ1db±'ç´'n¾ªÒ{¢çǤ5˜ëûF×/3ÞüsÒrñä7!];žÞ0~¸…™ÅT+«Xq"§g‡òp¸K°dm)N áöúÎŽd¯žá¾xôÑŒ(AŒ*;ó!¥7M¢Î<.ËÈ¢, « „AVM;žxÀö¹2=|ÿû!)š”"丣 ³üP}ÅÜùPˆJÐÔ7ÿŒ!¡C¥{,Å,ŽÎªx#4‚h&8Mt)0ì ‰+)‰c„,³Ìº…<",[á΃^5¨«…Ìùó·hËÄò|Í—\}怰;”ùÇ1Ì >")àGFæÏZÜzÉ÷yûö;ò•¿À•µœ4í%ÞÃhu½¬$‘nx‰òh›ƒ®äð}'Öbã5FŤ Êl0’„©„j·ar ?¡\´}vHRÅD!‰H\ršMC–jò¦ÃFa„e®²JM]=ÐR'Zïã’%®eçÄ®_AÜ>Út$Íðò LHR79§ÝR’`ºi0”û;3f§g|úKßákŸ»$?÷•«úå›Wä×?^ãëßyH§ûüÅ?w]–Uůüê.›gg¢Îb BKZ/$2Î7„Ù$!MIvÚŠ©Ô؃mdpÒ1Ük0É3|4“‹ã’¼î¸ÿðLv;å•[ÂöÅ©ßÌŽ Y¦|poé,“ëçlŒœ™záW¿›óüEÃ,Žäëwçüá^äÊ`ˆgÒÔ†õ‚quÆîÞ\ÚB(Û¾á)Šd!Ñ%<:!³ŽÜ{ˆÄ×-±ídV8?t+i«•!z(ס¼Y,ízçç²9xøè­Z>ÿŒ¬î­É?û¥Cö÷‚¼ùùB/^Þ—6‚éZBåz¢|t¤`¤3Љ†Ì%¢ôé›Bê­­’µSaõC$5j ¥Õ²æ¾ïˆêÍbLL=гÐd1.‚Š—¨Fµè2‘º$~š£ÞJ±~δvL®ã=´ËÞ›„"Æ*ïDFÛIšk˜$æÜ°˜Uâ:)DÞÞ=åÇç/½Ü9ZbªŠìÚ mn¡Æá£à%I”+¥—Ÿ^Ÿ‘ÛÀ[xýÒ~6f~6ó‰4û[ý)È&Á%¯îbÇ5vm©Y+"gõá€Ùý’³Å„fZ"6ÑÌ3!f?ºKñÊ9!yªûƒÕA.‘¦õ?{õ©s8ô©PÉþÑKbèCU„,ÙÆ•Õ4\„<߆«ŸïS„¦&3ÄæŒåÚ€6¯Ø˜yª“3ÔYb¾A²†åŽ’-Vf­²DU.Zm v‚ZCEÎËÖ’ûŠ]k–¹ð½6æò(ç$õß…$Cœir‘ñÚ%ìÞ§¤‡Ëà|v¿¯ ?èV^%gYß/ûkgl¯ ò-åÉ£Uœ®ù,C=œéð®ÀÛ ç ÖÆëÝÅg™_‘óõÚ-Ï­÷NQ#œÝ²6r'=82;žS}tD:^°§4⊌¡Í¸~|ÊÚlI®pz¹r1²$cî=s_R ²¨hãœ&Þ¦rŠ2¦”!^Zªò:qñ Å]–¯½€ßÜ ;=!;ØÅ ÖØžÎÑÊrþÜk}š0®Q Æ,3êÅ" 3áb©ÿÈmϘÔQå|­"äŽjí ”"Ó*ƒ:RÖLOq7!²¬,‹Â`Qp‚ ‰ºtÈ(ÇÔYº˜ 3`åŸù*Dgxx«¤¨áæøî¨ÅソJ‡ãɯ`ûKÔÂì ?;gxó9ÆÃMîÞþ:[ÅÊ0F†ÑçØúà×.–|üùWYTC^¿õoeŸðVÊxæÕŸgóÝO(?ºKõý×,œdÒ'¦ðYúM2²̩nO öÈ›D÷Ÿ]eïo}‰4ɸð÷~›É7Ÿ½¿ñ‹œüìOŠˆ„ tP’®\&H§-MûMÌ¥—Éšžø6/àg-îþFã vF¸“šÉý=N®]&šŒ0;@ILÓ·ˆ©e}ô9Æ[?ö×iãF‡Ï ñ½æ‘-KQWøzÉÂ,N93\g™DÇødÄÑ•£3¦ÇT‹5¢.ÉEèRƒó‚Ëiµä¤JXu S…YM!DûøÖ§›viÓt|žúã ÌÕw›büŒ[I¯µc ]º‡R)Ï2b”'ÕôDwþôN€`ÀK‘ EÅ0–’+uЏFMèDL#$M˜¤ôúô¼÷šƒ12G}c‹0Yc¼¹ƒ;³¸÷ æÈsò[ºHl Æ>NƒÊöñò¸ÔÒ""Ô¾ã­Ûp2›Ò.=/ýÔç¸ùæs\½° o~žÑAdãüŒpÚô)GIð{f° œìðíó5lò8QbhNÑi7:¬Íû„0 ‹pL—–ýô¼˜E21ø‚f­ ¥l"’úƒ¦UÅÅÅÉZZÆ,ÆcJÛ0h=yèS³¬B"`ºÐ¯§Ù—ˆ÷”'S rýÜ‹·hþ!Ô )ü¸$Ÿu˜ÚSî/¨N–,®Œè†ã‡0œp:ðõï~s—I|å…m~ñµ×7nðOß[òÌ÷Öù ?>àG^›ð/ã!ßúøœ24ägSâQ@ ©²ÄÍf¤ÂRÞŸraqµ Ÿ²¹éヱ‘rމ-~Þ{÷œ³÷"é·7~aƒ¿ºEÞ,ØÞ’üίuܸaé6*~ï¾ã»{pAÏjÆw¼^sq’3’ õ7Ü¡Ú)8?9¡M‘r¶Ê¨N «Ú€ähæhÛ›e8ã¨Og¸"{ò¼ÄØgâ|ùË–ûšå`©|û}Ë0ƒ/m@–A['ÝíøÜW£dN8^À'wì\rLnĶ ¯•é[ŸGK»z„Û˜#Y¿wD›ˆÖÐ 53ì–A¥Wå›náÉ– ?üè}Ä’$¿ákÄ]ëHqÕ` &¯q!Ç [ü©ÎèµÞjQ 會Ôg!|Ö»p”UbóR€–ÎæÄƒŒà®UÇÔnžñûŸsûhŽ·9ÙÆ&åkÏc¬ ® „DtŽÍ2°&S¾´3ç+[s._:ÁóƒmÎ?ÚÀ·Ñ;Ä&Üö Sud׎é]‰¬Sôáé½m´Ë ­¥™Z\.d…°œºži2Ü–ìËG¤®ŸÞ¬ì”Ÿ• Ÿ!zK²ƒtêðß¾ˆä‘â§o#Ç#Â'[ €¯iÉÕõœóG퟈ ø§yò§šòøgMÊÖ3Wm¯sñùzé¥g$†Hèúñ·Y‘h5©ŠØT@I¾ÕÔ5QŒµª¶csŒË•¢ºn•„šD‰“ `ËÊŒhè¡g!‰Érl—°]@Kó槈1TE†NÓ È®«`ï¸ê"«€ JU•ˆ‘åÊ«bVF¤¢U2¯´…S_")¢)b0ØÉ%li Ñôëd×Àà(r~]˜_vŒæ£yMè2KÑtÔ“]îp>⋌“²àjˆL”‡YÇ­R߸0’”Ô×WýLÛÁ„~a’œèΉYÈ¢%hRYÁ[ëaMÈJ5IgQg`>,ŠA²¶'Œ›œdrÌ×UŸû¢PÈÞ‡0?›=©ð4FUQ‘¦íWäÑi–˜O¾£¤ *†è jRo(ŒY.e땤$ÑW¦V’Ͱ=ìN;㤨†—n! !D‰ï}‡ì‚#C¢QLÓ©´FBžˆ“ˆûð@'wÁX‰™ÑaQHÑÔÄQIµuA‹ÓsŒ 1E=ýäTtg›˜)³î”ŽJ£[9Ô­è28Ñ<¨“S¢^”ÜTn¢­HèzÊTʲ>F¹YR´yë9•,|­E5 +×EÔ÷ÝÖÐ…aŒjõ3òF?±C뢧KFuÇ2³œŒr-85h),'¹V‡g4M$VÑ$"A‹.-ë’×à¢ÐTÊ Væ[[zvsMòý%ݼƒB4"’DÔ "«ðñÇ!WªŠø CÖ&%ëäÜ©¶¹«ª¢ˆ‰ªÞZÉcê;Ø ÿ`WãÍç¤oP Gø(1–” 8›lêå½}yÖŸ¼ö2RøÂ•gx÷îmº3š_øqÖ^|†íñu6Û–µ #:·Ð<=ï3VU&ïÈÿÕ‰J[ËÙß¼ÉÁßüªè…ø¾\û;ÿPE“œüäOðýŽvè•‹øÒa¿ñ‡¸{ð?[a®ÝÂuÃüÆUý îX¿{WÆUtnL®VãæÑˆ³e”³äý^Z7|áä§Tƒb§3Ü'#é^X0Ý:böÎ1áx¦uæÅ„ÈÐŒ(ŠLGûÛLßÊñ•<ó~øùoÉK÷>G(vud¬h'àAré P“ˆ’tr)R¦ÁÄ>nµwÒÒç›­†ij¨mCg“H/šï#ªEˆÁkè‚h–2”CÄ )D¶Ÿ¹ª×^{IRˆX“±¨Oyÿî¯éB–²óüszóÙ7xìlÿøïrzx€u‹¥HÙg•º¡Y.q.Sc-mðÒ!Dƒ—†Çö‘U‚.¹Ép¦-¯òªo@Y¡MùC•t€O‰E¥¤F:Í$³F‹¼÷÷”Çv躨JbÖÒ/1%ÔD>÷â-ꦥ>íôA²ß]p%¿A< ¤¡–Gè IDAT4ï{."h§hè?[Œ‘,(„Aé')Š¢’4QUQQªi'®Ý€bYjï‰&ÏrÑTú£h#Dz‘Q ÑÑ Å,§­Jfå€Â·”Þãb¤Í¤—‰Bœö^1˜šEåøC‘7ÉÇ/©ïK¢%.ºµJ3dÙ‰m£Ý9ókB·ÖàÚ‰ ®°(7ôïºÏÛß|ÄOüÈ%^yyKÿÛŸY—ƒo^ãü­ÄÕ×oóþ…‚åo>àÛï3šE&˜…bNk53/éBEšä$ 1‡X=»8’”‰ŽvkqM"[&ÜÒ“-JlM¹7>Cä”Åq§©‰<+;Œ*ß/§QäÇ~6ÇZô›[©f>¡ÒèŽTrK+ÓGþH§ÃR¶Ò›‹š+[Ø2§ÎÎ5Ö'bBc}ÒXÒ¬ZÕlåÜ!¥¤+›‹ø7o½~KäË_6ï|løø¾åÍ—¢Z"qTªs)24ËáèTäþ¾0›:=·%maôýG11 Iœ'‹Ÿ¼?fýù{”׎4%‹"bƒ2¹°@|§(4fHW)ù\È–ŠÊ=óõR»?F\ Š—4¡® ¨É’¸Òk>ð5H¶¤Kƒ –‰èÙh¡m'²8YÃwŽÅ´ÔL?@ÌTŠRU‘¬Rܧ¶1œÛH#˜3«7bŒÑÏrÿhÆþ¬Ó·L%¹LËí‹Rm_ –…’qÄ´Ôɰ‘7¶ç|íò)Ï7h‰mÎá'×ÑdTED]$»yL1h ùÅ3Òé€p0¢}°Ž6Æ*FÀ{´™Y+±3ÔMB²¤¬uR>sF¶Ñh~y.æ0CŽd£RE»ºìFéã6AkÛ§AôVgÖ~ñ;ý Ù$¸2£øÊïþÚ@ÿþß«8˜‡v.ÿ·QÍÿÈ¿ëëÊkÏñòÏ~™³ì|1†áÆ„ÁÆóÃS\Q`³¬?Œ…0ÎöμbãúÕÞ9›"ÚÔHµ×&Åä®Ïiáìø”pÒÑÖ ÷¾õݲÆä96(¦ „ïlR¬ 1ÆpõÙl¬m“| YÁOÅYðM7®®KZ+ÛÚ²ß*ƒUò6­M?æ·Œïÿ”›·¸Ö£y"æ½7KÔ”äKÅW†ÅFÆhÖG¥6‚K‰L³l‰FèÔq¸G5Ÿ1Ù¸Ât´OãϹ¶sÙ¼£^$U[p¸Çúñ)ƒ.rž{†.ãõgžçÑé1'·9»~ù+?Ïð­wȾûkeÉÀ+%¥aá,FûÉ‹ÑÈé«·¸òûïSø)÷ÿë¯püW^ ~þEvþ·¸ò~‰Ñ{ï1ÿñŸaúÆ´¦…è±¶@bŽ™\"-:üÃûd[;8c&Ç¿|‹c“8~÷»”0¸x•ëgÓÅ'›WiÏ,qq„m¾OÝí@vÑÖO±è~óÎôeúê#ÒoÁ ذc²¼÷)¨$Bô$õ=(L-‰À£át~Îæ|ƒbd(&†Ø*Ñö4é~ªái³«PÄ^N”€yÞMêW¯¨l. 6Ú‚£‡¤¤e‡kɶ._`ríÝ¢fm¼ÎK_y“j2&t›×¯pù¥[hˆ8—º–ìŸ&¾þÿ˜ìEËé'Y¿x™=Wß{‰³£CŒëSͲä0Öcäî[ïrðé=ºeÍìè´'œ÷Þé~¢±ªT¬Íkð’µäÁˆ,}Ó?vµîÄ~ËÄà0xÉX2±˜\p+_aÏŠUÔ­š—>â}_œ¥˜X‹#ˆŠÆÔû?2A.IOO}Ü{ZÝ_É<•êåÒ…>fFÙÇ`Té!ý'ƺ Êœ.5x¿|Êã¨DiÓ1),{I/†¤h…$B²6­¢¯…¼íÈÛŽ¶ÌQ1¤èIeA–„,t´$«Ø$hT(†} ^hi?üv´ƒ©6HŦñèyƒdª„&`Cbô`ÆL Yj(|G0C´¸ÄGƒçožNùÙ/^æúëß%|ø*ù§™|þcþÚW§tËš?ر•„bÐ"eF¾wŠì'$)Zåä OþÞ9ÝzÆòbÅòRI:²yßD¹|Û0šY3¨ÓœÅГe©–sÏ`äX]"œƒªT^¹ÚòÎ7 e–Qo:NC`g±äB'0ÊXŒ„£t†fÜ, ^-ÜÝ^ç /Ð÷q¾/ÚmPBÞOºzÞ±>ÑÍÔ³ïáÊ5ÃÏÿ‚áêuÃ|#p°/¼tCxi½a¸ih[eójÅx«`~ˆMâdæøçß°dyÆà¹ŠºV¾ùÈNyùú*™D…à ÞD ñˆ FúÉáýO{iîú®Uð«©cº5è&•ßÏ¥Pg(¼#“+Š‹–…iFê„Üv˜LɆ‘0W–3û[˜,ÑÔŽå4#ä´µ°<³ˆI Õ(aD™lEãˆÉ„6Ìë¶×et1±×ÁwÎáL{wfì>8ì§7žÅäa0F5qM<Ãܳ½ÕðÜæ WÆ žs ÁÑ,Ô÷/£.a7H(ž=ÂjlÞöSÉû›´ß¾N<€Æö˜Ýná0¢Ä øÂ“&sðŽêõG¸­qwˆ»4Ãm×è4§ùgW0yD&žìÕsdÔËÀÓyFšf`ÿÁq¯Bìj·}$xËðµšøÜœ¿ÿ¯fü¯ß^òÿ…ןúÞ§>øè‚pøé®ÞÞÅ:Çö3W™\¹À£÷?eri›â A¢=¾wWë¨Zº“™l\ééºFDœ8$%’F’AdXòèö.çGˆµì}ïSG§\|áÊñP\ћɕˆ¬ß¸ÄäÊ$Å 4&‰æ<Ùdþ °¢…Ö=Õie³î Æ6ÚÒ"I¥˜vˆ€k®ë†ª‰d”°¬ ˆ*†] ÞÙ¤šŒè†ÂrÃp~V²~žÈ’§3BY·,]¯§¶1ⳌÝñDF]…‹‘i³”½•‘I~ÀuT”|~‰`¦,vÞÆøŸÄtV<ªZä}‘¡«ª<)9\ÜFC20§”­,)yÒb.ºPÒr.}–žÈ÷Gðà)-éü¢ûü•&±b©º©;Ô vu8Nj˜_º!)+iÖ.‚q‚’«ç<í6Ѷ\U%·Žb9cyïunÉîœôég&c8wt—Öäð?ø<©t¤äEN§ V,ð¾­%'a©cdÜ4¤ª¤5- ?gèJɤÖa–‰3Kê`d˜ÐŽ” 3¹8;Æù=ñ‹¥†W“ ùÑ)ºí $_cRFªWÏþ“4£HÜYˆþÑv†¸˜Ø<_âºÀñΠŸžÕ´m™ÌA–E_t:ÄjGÖ5’ŒeZ1QpºdF1ç|ÇŠm"rÖ!1‘ªLÒ ëÓËœí!º¾ˆŒ«©¤šÞSb}”ÔÌð‹© ýõË}’¸B³(=›ÎùH—fC•ŒÈJf¹hI­çÕê²¥¡ÉÇ /^–îäÖ&g3êñãùŒÉ¢ãæµË ÎN¹·‡ÓËϱ|ãØßg8¯eËvÈ´æ$O´Ö‰7kÅÞ¡,·6ÙþƇŒ¿õˆÅ+[2ûjŽßþ ¹ü?ål}ým†÷¢&'|ù ­qU‰ùÒ‘Ù1åâŒüÓ‡¸ebñü lç…<#>‹Tª#ÏúÁãR¸ 1‘ýÑPÂòPe‰ù”ÚÝëŸÉl‡Ñ¥Ÿd6ýUâï<À}±dðùŠáÁPX½Ô'Bl¥hdqòX!,çöi¼`ñîL.ýèçJv^+ÙýÝ9v(¸$lÖ•1ÄjF,µï¢tôrÆK8ïHù"Q­yöGßd0QŸÏy拯ÉÍ/¼F»XŠ-2†lžaŒpr{WÞþ剔9MlIÖМqù»»ïËoþ¿Ä…ç ¡ãů~‰g_~•Ðu«ÿƪ±¦Ê•Ÿ%©òÿç×å÷ÿñ¯àK¥°%¹æ"ƬžMV÷KEË%Îã!‘R#“?<êìÐõ„WÛŠ4õï?>”iJœ/õeÂʇ£VÐŒ^š×çwôÑñ|¿äâiéŸ>±O%’ë¹G*©/<½ßP#™ØÑE"Ð-§øP?åÆs¨U–ù©¤W¬¤©BTG›”hÝD(Ù¬ eÍ¿ú,}˜…º csò¸$J/{S¤¶×W=×âüÐP&7h$¶ÙàŽkâ²Ãeô`ÎüʘvÍPÖçTíBšl[›ÍŒ–üA=•wçîÊ€¿ü£‚Ì×8ùÍ7ÙøIá¯ÿÔÛ„ß9äíO²mÌΖ¬eŽêþrPÚ! Aƒ“â´#?÷Ò=ÊX^®h6s–Û+AÙ~hØÞ]çæ¡!¯ì¾5çÞWÎyåõ’Obb /òà¾!GÌ’óBY?Š2mqTÎ9XÎi;m¹•Gás·8&'}°Û'b!ZÅø$1º®%ËsB£ÒžÔܼ!üìW20ÈoþFäw~7ðú?ú:ð`É‘Rk®¶YJ[vo«Üý®gëzÁÏÜò¼û½Z¦ðÂK…Ô®ÐéBÐhÈQLòbI6˜]ÛG ª£0–ÝOá÷~S¸õª2Þp¼ü憌6¸r‰x‹‚1Qžî+‚Ð^:§»vB¶;Fäšh¬•ý²DI䃈.¡k„żÏÌ ^ˆô|$Æ(6‹¥2š$Œ#ΩxÉéȈMIHEkähÙñîƒGtƒu>ìJÙ¯ŠÍFl¼¸F¬Fâ¥d½BnR³—<ÿùçï1[T¬knæ*Ý|³6#,+ìdIöÒnTã.ŸclÓ átD<Ðí¯“f ¦ð$ohûü1>÷}Rˆ³Æx4 VjÒ‘Hx¯Àk€"¢ÃŽký>bTÌ0"n©¿½Æò__@†‘x–¡µƒ'ñfB™ȦWxÿ_·üÒ?ú†ü ÎÑòÒ­þÔÅðþ™yíx—ýï~v˜§ãÁ;ñàØ¹u™µ!F:‚÷ß?`ï{÷Ùûà^¸Éýµ_ =™b}$¯J²¥ÏÐÂaÅàœ…¨Æ2ÊKÄž{åET×.1ÞZï7 ßw\î0Ö"Fzh–öæõôœÏRüð!Rú(Ñz—ÆDy´Ä:×oI{nˆt‹Å“¿ËøœQçÉæKŠÓ ·ci‡B;ÉèŽ2E=´šíd%HD+Lóœ6X§áÝÃ9Ÿœ¹~ÍÐýq÷€k&dùè²·…šÏ cúX$.‘úô!XƒMÛFÌtÞo²¥%ž#3‹QÁuàý9ÉRª‰í!&yl—nÎpz‚MЉ‘jáûëŸIO—Œ9ºz™öÿåîÍb,ÛÎû¾ß·ÖÚÃëÔÔU]=wßù’—ä%)‘” ¶¥r ΃ŽÄ ò˜×¼'AäÁ6#@â6b#ˆcŠ$[²ERœÉ+Þ±ïÐ}{®êêϸ§µÖ—‡}ºo_"í#R=UÕ9gï³ÏÙë[ßð´ÀÚ>fôü·'OLÑ:󆬂XGðèùvU!„H7O±—<Ÿ¡{'§„ó+ô¯OéýÑ!¶—†9R7˜²ÁÄe—uÉ(k±ä-‡<Ɔ!`ë†u(ʰNæ$&2ÊsËŠE©)‰±ƒÃã$Ãd]ìán~Žjs7Ó $³.U*×ò–’4#±C|h˜Ï§iq´SjYNuZØÊpQb´c‰Öb}û^´¦W•j³ä EƒÑVÝ5íêRwW15DQš®er.A|Àû¶ƒnX>I´ô##ÁnÒ®‰¬…Ãu¼!6%óÃ`øØ‘XhC0B§Q\ˆ¨‡*·ø´íKÒ’}}( Úe:ª&b Ϭ0¿7`xÿ½½}äÂybž²÷Ámß¿ÅùϽÂåUÃíl]£¹tžâú{Ö2ùÀÀ/˜$ ¢J´–äþ“ÿèX}tÞ›ûL?³EúpA}±fï¿ú,ó¯~ŠÕ?úÎüÑ¿ÍøS/Rö„Ät±3ÉX™)ùƒ#œK9¹|W·FvþÒ ŒwþïÀ­;qèLé'5²Þ§´s8Prí.“ïô ô“Œß¾yŒzH¤Tšè©©X¤gøI²À;ÈJåÄîbØ$Ì_+66:ª¤Cì²`Øõé¢Âkd¦‘26Ĩ8¯hÝP/Jò^ò„Õ gùìoüeÒNÎùWž'ôЩæõ¼ õ™žòÚ?ÿC¦Ç§¸4aqpÌéÞ’8ªXS‡PzgFÔÌx÷­opsÿm4Â\§¿>"6è ê€4‘­"ãâ/|šŸ{™˜ ¤·T•Ó*b=.ÎóÀ–“UÈq$²Œµ²D|ñTgÚ·ŠVúT§úc[§,›,¢„D@’'S¶XQ4¶ÂOƒTž²»A—Ð\Œ Õ2é0M-uªhŒ8„¤i»üÕž2Ÿâbd^ÏÑÖ[›h!i Iã¨Ó\·-‚Ê©Wº‹†JL»žÄÒœY¥×™’Lk¤ÔvŠ`!€´ªY4‹VÅ1¬€m"UŠoùRå ’õÉÏ^#,¦Ôã}È\;õ žàlõp{J(léïN™‰PRœó$Õé"§JW©]—¢™óû·ÆÜ‰·øÒÕ1¯f…ãïŠþ—§üç¿dù;ûoóæý{é*‹íóôW6@`tëé┦קÞȱ³†tÜNša‚Ï-ó³åÀqûËxݱþ‡Bd¹Åxï¸x©u%ÏsåæuOÓ¤d6Ò-Ú8X6ay/ ñÆ+ç7én­szºÏw‹šÏ˜†«9l]írÿ¸ÏxoŠ JR uòØé0²¨a _úläÙk‚/-ô/F|€Û7JþÞß÷\ÝŠ|ú ó Üø|SGü)œ½fÙ~^yÿOÆTû5¯|bÀµ/Asæ˜MÆRe–®Ÿ‘茢ï*¢$f|òs–N/R–J·ïyxÓ3«‡\{e•PÁbòšþú!1´’ºI¯BlÀ!ú”±tXÔ+)îFM8Ræ«JƒyÔ*ÆØZ²µ²²Jš yϳ²æÉ¬Ã¥†¥Ñ„B3$vP„²\pÂ{Çœ,<·§l§}‹q‹R¯öy¤Žg;¿4œñƒy线Ò+ØÉ”¦4ÔGe Q…t{ÂàÙ8"fPb"øÝ>õñx’1¿; K-¶¼†33 ûÄÊkƒ\;![ù¨a[ýÑ&ÕW6‘š8"Ô¢ÅØvªªAÉ¿|ˆ5hiI«>)3KÚóØWOHú4–úæ:qža¬¢&0¯…ßÿ`Â?ÿ£»Ì (fü…ùqžß¼ÃÆÅ3œÿÄ6.ŸEŒððý{ì^¿ÃþÍÝ'Ï[][%ó`ó¡ñŒï=âö›ïr÷˜ÔñÒ?Ë3Ÿy_Õlîl!ç¶—¾¦ÝB|BP÷Ás´{D9+Úäû19ÞÌS XÚ‘;Êúp…Nž´)þĤ-l-kBiBC¬j°†h1B¢-4Âͼ©ItJÚïÑ=H_ê(Æ «ô°µ‡Z)»‚uu‘g2îŽO8)=WŒüĺVM@Mx¢‚õX §ñ3*JΠ%R%}4ÁÇ–üUÁ4`L‹Ì.jtÞ :'ÐnÍâ.¶©I|ÀjÃp:‘b °#-ÿétJ©·ÐN@ò|nÿç™ÿà5f秘ÓÀ´[R»†.ëdÉ&gö/Òwh²šÌ8†®ƒÉr2—cDlNž¬bh8’u5GQÂR˜£uøöhãYÙÚd°¹Æ¹—žáù/ž|Ðg´}†r>çá·©æ º+CÞûÚwxïO¾GgØÇW ‹Ó ÚŒ˜vŠḃuCËï±B§¦Z©°'%Ì3¼ýÁ~C«pØ®çÝhxçí·IÿQNU–¤6oçÛ)‡EZ)áeì²bÈÄ}4\ ~<–­®Í“6J‹|€v½/ ƒ‚}JfFi–I{ýñøÝÞÄˤyJÅ™–G[ÀGÑ%ÙÛE ã}¤˜â6/bm·ÐÇJJøÓcâ¢À÷ùåótV`cmÄçžßäæ¼ËhÖ¥Ü8ϱ³8gY|öúÇûtŠ1q$É©•dZ“޲ãšì¨DL/vñ=Ç[Ý9g®­ò+ã*ëRf“V6öÞKíak+RN”ÙiA™zÝ“XropÆðpÅRÍk7÷èÆóÈÊ*S“ðz1å~9ç™Ô±~>¥<šº…{Û*¢™¡¡¦—-øõ_íó©"wïþÕïGövÁf-ìx÷“X>•[l8wF9\3ÞõÌ' §'’¦`‰‘Ä7\˜9f{ñÜC–84 n"äË|- â)mMw”ò¹/ç`ÛÉ×üôˆr‘’§IµO9<ÞbRî€@sìÈâ)YŽFËìd›úƒ>ômF¹0P)rÔ€ AZIã¼ßÂ7³LYÙŒ¤éÒõÝ8nTï'l®ôYé8T wgŒ5¯ïN¹1 ­qdÞ¥så,1IZQLU¼B©†KYÅ/œ=á?Üžð©ƒÖÀÐFʃ5¤_’®œ`Ï’îãb@½EŽ:Ô7wð“å±C|ŠMÀœ)a­$\>F¯£I@;±„Ûš»CLÇ:Tßß!49ÄCM·WQ3Àûg bÓ0ýö*Óo­µñGŸjÒYpyÃÊHq&’Äš.H,”^ùÝ·KþÅ[%³ªæúQÉ_¤Ÿ?·Èö³ç9÷ò¶žÙ!ԞûûìßxÀý·n}ìy+gÖyáóŸbrpÌîÍ;LN¹ÿþ-‚oIß¡Ü÷&åtNáIgêã5ÁR \„ /_$ïçœ<Úãtÿãì“ÉÄ£;©æÝ C Ûë«xÛcíìY²•¼Æùi<ÁšÄvóSg0Ö!«gWp»ÇøbÏ!Q199mÜÔ ‹IÙñ˜¾‹”£³¡#)Ùý’¦ö¬Z¥qެ¬‘XRörTš(ä]8³ ñá;¦óø¼Å–ª*ÖºIB=ZVD_CfZ _Šct>Ňb¨À²Ê³v4&/–Ô“Ì€Mˆ.avùšu©p°Þ›0èžÃ™ ÆsúE—°°3N×ftê!ðÑw©sÒdˆY_§Ṳ́ÀLJ° >™ƒ/Zµ˜ÉsøQ«á±sX)ýÓšI1†Á:M’0 HON!¶p5‘B"ê¤éf,²”ª¬˜ûŒÔ%¤âYI…I1i¡mö˜ÎÒs)Ñà“c²[{TÏ¢i¶¤â(+G§LV‡å1tÐ:Œ/!F•ÒY45¬Tž……Ó ÄQ%5uZã´5âLªH¬ZŽ‘8ƒm†¾æTs²3ÜŠ>—“†ÊEšL 6²:Ω/dxu’Po 1óré`Ù Hf±>”žÚY|b[÷êØsVŒ Ñ‚]ºŒ¤5¸[&ŽFÍ“i²K¬ç,Þ|ôò:Ý{»ïrX|ÈÅÁgðE`â×Y½x…ù£‡œ¹õþ NÏl2ºz‘á¯:Ž¿òmô¿ÉÕ_þ++éD$–¸˜&)Gƒ>uͨnè{Ï™(d_ƒ£_}…þwÑýò!“/äŒÞxSu(/ÞtÎÒ IDAT¾Åä×ÖÑî_eûïÿ!£o½Á•úáîßþ/ðkëØÆP¬­1Ù^'{ë]FoÞ$œÏ_Æv2LÓÐtsâùb¯ 7nã?xîL5=fM]c&¥Þ^~/’_¦k ¼û:ÓlJè§ †5Ýæòü‹¸$ååïüo½ò5ÞyõOYˆ¼0¼Ê©@½TQRlUÑøŠb:CChç£!´žá…/}žÑζŸ½Â3_ü åtN ñÃC¾ö¿ÿ_4“7¿þóñëÚé°±–jq "t\Jš8 Bý8;ÿXg¨¦5óõ)l5ô ‰š>"øØ`¨Š‚r6Ç8KîÒå£=”Ã<™p$a9¥DX¸†ã´&¯SLx<Ñø!Å8ZLyÌIjÛèÇ1 ²äñ-…¢‘e!OßÔ¼UìR ˆ Øj5Šõ„viª@#b]ëc¥±UVs­— 1.§%JÕ1”å)M(Ú©™mˬÊqMŠšHt RÎ[™o5Óîo>¬`ê’FAz¸®'íÖdÓŠX‚-lÓty¬‰j©\‚Ô+ŽŽ³4!RÓªÞÕ“}êr†#t1G} ïR¡gûøsCܽ1¡‰ØFé=œâfžb½Ã|˜‘/æäaÎS¼é å,ò¿NosmcŸÿàÂ_4küæ/>‡¯#×wÇ<{!ðáÄqóÄSôºŒûWØB§œÓŸÒº ¦ðØ:°z’âªHúþœÊD¦.¨¼ýÖ‚î‡)—_ ¬¬ Ï¿ÈRáÖ-ÃËŸ3¬ ï¿Ó0›”"ÝN†Á÷sts@”ÿƒë$k#¶?÷2'ù ‡§ûìG8{±GïÁÿ Xì¶éĤ„/~Nyö2|å›ð曞ƒ{‘~/!šV Æ&†ÑÅ ßù¾p|yóO““t#ß}kÁë+:©cVM,SM™)Ík[4Á‘'%®1ÔW+L®lHJ¡Î—MÕtAõ eþƒM4s%+/Έ’¤axùývZX]fo À @!|WщÇtâëÛ [î àÒV¥kõLDŒR{¥öð;%ŽU“ñµ›ÇÌËšÿì®°=êðæƒ1_?‚i£äÒËd.i•°&bð|zPr. TÞðKëí´c|8¢§B’–v‘~ÅÙ/½í-qFsw…pœSíhæ]T´T´å:u¯@þÊûÄk3tZÚvþþ€ø°ÓƘq†«…òV—òáz®]ûA‰4XW‘4 Õ¼ÛÆâ"û‰v€Þ8ŠelksAÈÃo^€¿ùŒE€_û?ßáýãò/Tòÿ{'ô~ìÂ'¯òò_þ¬hTݽ~Wöo<ÐG> 4?Ê`Õ¹ñƒw¸wý†LŽN~ìµíîëÑîþñýˆª€ËE6/n³óÜ%½öÙÑEŒCÔÓýcŠÉ\UÚ!öZ5fË ðù¦z_SU \1¶£h»™Ø(â¢à¹ÆNB½9 I vQ“”^\Ò’“¼ÜÜ«E¨G©¸Ú™/ñØE°jq‹‚îý†á°ËɵLg["fÑ!ÄHÓ4 ‚Wq½ÉBê,ÑÚzÈó;Ýcä[÷§üfX뉆Ç(ec°ÕW ²µd]üs‘¥büÒe^T‚›Jg´‰OD›Ó}ä趘ñ.œŠúb‚ÔI”Ö =Ôº:žKÖjØZ…à‰Ÿø"ºº%’õU’¶<ÙûžÚ&Èp1#µjQáJ¥zæ]‘Nt#fÒ\º Yª­¯‹ˆ[[Ãt;K`·AÏXÁ´•…•­ïÈióÚR¶i©ðCU—а2‰Œ&A¦ÒŠ‘V©Ó“ÕgNN1‚DuªÀÐÁúfB37„ù>U3&¤Õè{ÒKÔ–ªéH7;¢ö«*j%5}MÜ*Þ¨Yø~¤Ó‘:Ì51‰¬><У¤vÖ_?–—‹ÄÊA7Õ ¥´ TfHíjù\ƒ­I¼CÁ¬¤'‘E/×Q"FKÛJ&&M«Ó¼FšŽ‘Ðshî˜vS=|©/ó¡Õ(VâШë$"e­øÖ7E{)¶j„²¡tQk•qEA⣉z§¼)¥Ÿª•öÃüáØa?.ãÐZ5¸D4FŽïÐT…:›>Ö ÂH¤ö >QÐpôàW†ôž¹,js|åk¼û/¿ÂðsŸæâ…m6®néÃã1Ñ{²ÐlÂa–qšd²^—ºU”lUžÞ7߉=u“Äw*íì^¡öêÕ=]¼ºÉýÿæ·è~÷­ÿûŸðÌ÷ßsø—~…£¿üëÓ‘´¨ˆ—/itÑGˆo¾ƒîl!ε Yu£±?ÀîSbû]ýÖtn{Nbàô¬h­ 2«¨ôN -ì>/Yï%rµ´o`“ÀÖÞµú¢¤:Ò¨àQÓªØÜ¹t_ÎÝ:ËênWZ(I3_Èüp¦1÷bÄáLªÑý³[ ÖVå™/}†þúªn?wEVÎnêñÝ=n}ï-Noïòð­˜òàpÖ‘v: £Vé11êñw!ŃšŸd)ŒäÇ-ú Ê~%ÝN¥ÉIGÔ…VéÓò1¤%„ã¥åÓi[Ú<©"4Æ(elžª°ä΋¢µlT±MPQyzŸùØZ—²ÁˆV]ü¨¸hö©}J¤Ð,[©MñŠyŒâŠ*&¶*Õ¹ ÁŠøÄ´¦•öÕ&5TC·4?€hêܶW¨Š&»ï§­[žÚ6þ&MÞð& Îˆ4‚ñÁ´¤‰F'ø~*шâC+9‘Ú¤tO¦ˆ4Ô«ØE¥¦h$-¦†rè(VúÚEt6ÅRÉ1jÒ%š~!‘N2z‹¨‹¾˜RàîŒxqE¨«vJ°"6*G35“šù•¡ÎWrÒÒÓ«¦’iº?–,OÈ7º;_ðïß’‡/WüÊ3gô×¾t+Nyí¢á×.®è¥³VnLÐ×<ã´Ã~š3Ëû’h`xøPÓjÎ,µÒ›%ºu”ˉ­ÐÔk¹»Ç÷§Ù\åí=/I^ë3—œœÛ¶¬®‹¾ð¢a:1òüµœwß º·ÅiC9¯$$ZõóQÊ@ÎH¸{ ÅwÞ`åóŸ ?;âà¡–3N¯ÍÒih Ï2Šs¢óE”ó¨ßþÐü1c©½sâÁ9å ´Ü¿®céo”¨¢ƒ\Ë:0>)Å{ÖQ7‡N¤×ÓS®.5o½|Š9±£ Íf#¦±Ú9FJ“·âuå9þ“!Í£\º;¥Î^ˆDÐFpÃÀèNÚŒ8zÛ5+¯ìÑ¡6„G™ø[5=Åè"y7¶¶nÄ$†ƒIàÆ£(!Âw>\°{ÚèÝ£FŽç^­Eºýž®ô:òíGúE—Û“ÝíU†Î‰÷F ›i£}JD•WG¥œë=—DY·ªjTŽg™îÃíc9~8ÔþÚXEÝ~Nùð¬è$W?îIÈlÎеRËŠVVíÎ.g†¤ŽÞë¢ÇìuµÙïBÖHÖóZ}ØÃ[ˆ+> j•P`‡ ’EPÃ8dHªâÎT?)~ò»¢˜y®6LëöŠ5°¨•oߙგ%"åÑÌëϨ&ûçÆ ]~Ê›“Ÿòÿ}Пœktvç¿üŠìpŸÝ÷îrx{ŸÐø'Úóú„ˆÐ¾fv2–w¾ñýÇæ‚"Ft ™úØqEäg!Íè߽έ×?`óÂ6ƒõ!1D4¶îìg.í°}í|kj%BY®ó¨ñˆDD2¤¨ÈO.ÉD%`UÑ„zµOyiA±Ç3ÜÑ w<‰-Ѿ•ý5B½ž#‰ÅÕ uSz b-~ïæ…KtŠŠþÝCª•M&;)óuèUª±G›ˆô»¸Æ“N òy%Ñ¡¶ u(B/1K3¤'\tE âLSðÑ~m€„ÇøA‡Z#ÄVõ#6Sê÷h’Hur]L±u+R°ÆJw6ƒþ:~´…ö³‹Ï¡g/ ¾Q® iŽ45îÑ!®8ÆO×­‰Qp¾ƒ˜]ÉDW4, LÐn.š¯¢ƒ.š&OŠˆº˜Â|,ar¨¡/ÖUT[®g9ôpá ãTPý±‹5X$Øø.Û³kil”.´ÖÇA‘¢Fbб¹41hzb¥O" e5µ_ªñ˜JLè’›(…˵,!»·Çü•ñ+똪¦Ž5Ãã…ÄÈBP£c-YÚ¡ðÓöR•`[fzŽûG4Î˰5>’j %œå­#¦ðä>0îZi¬a8j¢Š7(ª0?7¤XOñëü(gá!$–`µ½?‹ÚLQ3)Å.j!R[KpލAºÒe=¦:‹§˜à¥ôG„؈·äí ²Ž×˜T0‚É2\Òš8>b *ǡЩ(›.e§.¸}°~Æ1¼xûË¿Âä«_a÷ëß_|•Í+ÛÒùð!ÅÃCµK¥!£x±œ¤ .zI}ÐáÁ)®ÊØú×3™½Z1¿²/Ù馺7™/ìÃ'ÕΧˆiÆÎ?úìüㆩkã·0ÙPN_;+ri ûà¡f7n“ž,hv6©ÏmŠ›ÏU¬!<÷œxɵº»Çèý{ô÷".‹Œ×*d¼ œ]WÎè=OÖy™<™íü©ÖÒ§ûÞ­9ERІhé`FegÔ…“,ªfâ𾡞~’“VJSy¹øKŸÖŸÿë¿!ƒÁ›8Ò~—½o¾ÎƒõMNî=dï후¦‘òtб†sb$Æ6Y-ZäGâw«¦U_P¬œ%°M38@z²YDÇ‚TJwê1ý•ÖתZ|-&[׬*©¬JH & ‘š¢ƒˆsHÕH‘ý’¸’ ÃÎk‚¦ã$©íÞ›R¯uhV2™m È“Áã&éî)½ïßYìòÎ{üÕ/]æ_Ø–?ºs̛ﰳ1¡ëÎðÉá€_þdGvçèwyùêAŸÒ+ý‡RåÌ;%“^)ƒyguØíM¸Û1’f©Ùg|G(»#99€8åòs9³*ºÖ-xö9Ãù F¾ÿ=«o¿“¡_ÑyÐyÇÐ Rú—¶‘É”úúM|öä+çܺÃt³+ÅóJú]I„*’wïÞ¨ètºÒë%ø¢uÆ]R Õ9ƒ䔓3-ɬcmÊÖÈ6]É$í&$ƒE˜Ý|$çw×®t¤ AMj¨Ê„X¥t½“áWkê’ùT4$Н²«%[ã&Gÿì2þ8“÷ÜÑ„E4X§¸Û+çsÓÉs=v^…W×JrU¶V#µ©Á©¨‚MTkÍD£hEl“ñû¯?äOï“8øPªýõ››y+@²²Š¦)·Ê jû:Ø U¡RW¼Ø¯Ùè^̹˜D#:À„s§Ìs/ñþˆz8'Ý8‘Î¥Özs1EŠ9îÊ„i½ µ#lÎ…‹»°=A¯NSœ(qš ‡2Eâû}%ëQïöˆYCºVn i\…UÄ¢]O,,f³$Û*öÊLͰF£`–«e¨û ÍtyìdŠÙ‘”IË­+„Yàúä”…tcB¾Hù›_ðÚýR¾q³øY ‡?‹„þÓrúŸ9'ÿ3†?3 ]þ- ù.ægeÎÿ¬ç}ò<›8ypýï}í ¢+’ž*>ž¼&†øCý±×òàE?ò%„ÆÏýwoÿÈc»ïßÓ¬ßáÜꆜ_ߤ»ÞgÚ±K?`E;}]ôw× Æ«Xa(h=–ü¤"»×’ÕbjY ¦Šäc1ßÏ$掤VÊT¥æÄn‚™WÈû{ðâòá€ÎÞ+7£-üÈì+e/ÇT^Ô¬Zk¼³ds±“ŠK]G}~Àï¾±àß¼nø¬˜ÙºMÝ4­ Ù¤íHj ø1iâ鎄Ì5b§ZÜ¥zô>Þ«„“ªò£ˆ ^Y‘7Jì䒬ﯾBZ7¸Îz¸)>4hU UC#ÍþÞ²œ=$‚XK_¶QU(cëÎ,BS ¦ÚÆÖ÷w`”öÄ.á"浌ö)n#bpÆŠ©Íå!Íó—$5¦åÿ¸ÖÉ–§`yÒ"3ðꉨà4øÇ±¤•X1†2xé¨Ê€›”ŒÎv9jz˜ñCæÍi¶EÔ[Ô&² ™;Ec-™]¥t‡âç ¤ö4£uìd"uŒ$ICÿÑÕÆŽ„ÔâHÈòób‚£5IªÒ #™·të§î˜EÇI‡ˆp0Pa1>`1P•ÒŒRª3Ž·ÛNs4Hl}V(Îtñ÷·ï3Äú€ OšmÀµÄHìeè¼à!Í–!8²“]b”ys““ÅA,Q ½:ˆh‹É7‘§øOº×Xc!Fʇñ‹OšâM¹£m.‹nE=áZ]qãì99™¬Œ*šb,¬té|ñ ˜¯}ýo}_WþÒ¯2zþõx*>Æ'ŠDV•FŒÌ­eA™KèõŒônN¹ö?Üd÷¯L/­Ê`qA×ÊOÈñkï€y@çBÍø/½Dµýß2úú³õÿü.¦QN~é—ÑÉÊ9SâÅóâûÜ݇ô¾w]Í¢¤ÞÙ‡ÅÌf,®î0»vŽn¿Gçõ²ñ Á&–ÓQ#Åá;-i¸ó¢¸ì*¦xWNÖ'Ìú £ƒ„Z"»ë×ñÔD[òöt:'L ÷}Ö:2—‰i”´ÓåÂg¯ðù¿õŸˆä9‡¹ñ0}´+þƒ]' kp Oª†d¥wB¡*,iN”4J[¿ÿ˜8Aê¨ù˜k¯L¨Å’WP5%åJ%i1eï}[ô[Hᱸ‡,)íàõI0§½/?j*ýžtÉ AäÏØ4Åp!]b©–0 gDŸÎ ô‡ŽÿTÕås+ÁÉG-TªTˆFOBK*`¢J«4â½t*ϨVlTT™”žÂ ÞDÖcޱÄO,wÛ=&X%&MÀhŠ’xA±DÄ|–@¨åI¦‹ÐÌð©Põ2ÔD¥lNé”ñ¨‹6.JÑ¢BòN[¸D%ï‹AÉrC“AˆZ¡AZùÙF$öRAæ RÑQŠö3˜˜ÌáÜBìƒnRQ\2Ýè‰ï¤tN$»Çbgsl–“.jæ’ÉïMnòÎ÷îsd ¹±<:läŸå.[gûòÊåŸ8?”ÿôÙ.?·#¼þ'Ǽ}\H3ìbŸh¹·’W} ^$«hNñ÷çXÙº€Y=nƒ[ï{®Ï*ÉbÁsÏ9>ù鄺ÒTŽN×µbÞI-ÂL<Ù0“î&‹ãSª7Þ%ùijâ.\"Û}Duæò¢ˆÞ:ÀxÅdQF²,â’Ç©è²'®*iš`»–Y¬¢‚YÔÂZ(ïÍhŒÃnöÔbUyÔ¤Ü-Φ²Lº ÁÞ¨ĘJ’½á\ É® ’ÍíµâÃÏ1k,ÿø¾Bí”Cci¢Å`àdH˜åN…ò8áÊîˆÕËÖÏ~cù“Ã\†¾°éF1¬"‹¦átÑðp‡>%Kggn·+.ï`Ó„y€21VYAb+yu¥à¢]Îröò•NJçø*†ù…U™Î w ‚Ç­!Zà÷S‰'†Ó½sÈ¢‹´’ñ²>“ðÜâÄ33D!§„úâïw1yl¥¦¹¾…”VÂö)¡bi†¥˜/< m Úˆ¸Dq—f˜^Ó’¹G AˆµàëVÜdQŒã©†îS±B—Ä-E¹|,MñËàµáoœ7½iÊú£[y"÷«'|ãfÁ9Ÿÿ4ÿ=ù·Ìéùw¨ ~Úßòç‚uº{¨Ç÷–‰çH·(5óžÄGæ.¡²VZô„¨/ Ât&â5Y""‚M3ƒcQ¢ª$ÆißåbƒA´ç2¬˜ÇE¦ÊÊ6¦3àhe[œ±Úµ©I(e.½oßÐ %õFtDµPl±ä Z©QkUÇ'¢ó©b,¶nPç$&N½Xk(Œg"Z6Ä(Xc)šûÚO^çúZW§xs,U¼HG&ZÇ1²ªÎ8°Nͼ ÛDqõª$ƒµÅLê4Ñ|rJ~øÅÎ9T I’’¸”X×R:Ñ3¡”<3VO3NNï>»EÝë`BëŸòD½+D9RUŸ'„Ì1ÎRZ8H\ši¶„\ã½<¾Ým»KŠŠ´ò_O­EA³æªHÌÞD²d ×êöN¾…1N¦~¢Áª¨qšÔQ:¥×*1Ìs+Z5õú˜«§¢Ð8¤tVë½G2ýêW 1¦å;£â„ª± º™®Ý‘£ñ˜¾XÖ¦§zš:f㮟ÑùÍ{Œ'§l}æ“Ì߸΃o½¦k—.¬ôˆGbLQãë#ie,Ã&ÊÑå‘®ùŠKßy$ݽ…^ÿí.Vϰ•]VÁñ÷ÞÁ¸Cò³ï°è¼ÄâÚ_c8ó/þ_}ý«<ø/G'Ÿûöôˆ*šµ!~4 f)éõ;Ê=ÊŸÿ„0èj2_àóŒâÕ稞=§o~ÈÕ[·yv9zfî½/åþ›°%Úë¼H:ø•~{¿-½âWôáÖ‡üîÕ"Û¯2Úz 9•I]bBÞ&ºmV,a\êð¥ùÂßúM6?õ’&{wyÿïþöüLêò/4YId=+ð襄½3;qIRËÝ@1_acšÑ¤Q0A‰¢Ë=Ò´Ai‘vÐ Böñ"E;±¯†Y†étåxe¢~8–Qpx“i\â¥èš'ã±""¢e*-¢Êø¨IEž‹*O0•—‹˜æGZ’¬Q¨x‡6¹ýmåcÕ÷G;†4&j0í(*¢Ú –¡Ñ&cx ¿õiDO¼0tµÑI„,e^Ì´OˆI äžÊ¢µT/J´…~©kYéXô&¨/΢D*¨ÒD}¯C4*Ò•Q×xIëŠù £1"Bg:ÓÑáB™0_?OV;ŠxO­Z’Â#Q+ªKß ©"¹ñ™¡LÁ êU Xæg=m ^Ó¨ŒkÂvWLfÃ…ŠÙÄšDÃʘä´Fn¥:ÓÕr”K“è$V{·0‹…'ô6·5øÈ; |=•N/G‡ Fd÷´Ô;·øãG§|ñì _xf]>ŸAù^¥‹ËžwÏ{)ÓJkkåg=+Ͷöë „þ!ô@ëZšû·5ÍzÒÝÜ"Ô^Mn)&©üà­È»A«¢¦8iè {ÒëdOšæT92ñµ¦SeeeÀüÞ¾È;¢òò³°³Ag¼Àö9âþ9™‹›[MV­”å\mâ–aôiHÄEM<-0Ië]#©¡?è•m/·þt¬åqMµ–$Ëôá¡Ê×_Ÿéo½šâœÓY.P*Ý$H6R '¹°VjÝO°M$ >…Æ¢Oé}b,³Ks½þ%bȵ9NZ_Ã=EҨƵA*yv¢fµ/DoÈ· ¶j6r ¤GV$‰®ví_(Ö¿ËDÿ=N@>v®ÐN=ô'ÀÄäÏ(þ¬ââ§ÁÐ~ÖªïɹSþøõ׸¶}ŽK›[Ò«;TyPßsON/ˆˆi[I± ¥§Hk²Òj7íE¡È#³¡ Ë–d)+ª‘ÆzØè’4‚_œ²`Y;@ÖÞÚ£X½Àb-¡sPcvç¦bo¬jØ83É»’ •¢/mtxn½bïxÁë>½ÞnO:€©PMþÕ¿~‡üÞ ·îtH{VW‘–µvŠ T%­*:•¢ÃUñמáxuHaú=IqÈéD›Ž#Xªâ°v% Q;M§=S6-ÿ?ªø(,¢k±Ö"Öà\*¨jbfÆ1F1FÈ]JlÙ”K{á¥Å6ZãpÝÖ#aRæù­ý÷dú™ Mb Qbn9ý¹-1 ýš¤1¨ÛlÊ{K²»µ-$ûI‚Ófê‹£’¼Ÿ“ú:ö9Ýê„…?e˜nÒ· ¼V42ÆD‡5cÐUzÒ£ÊÎK5»Ž{ø·¾N½¾.n:ÆÇ Á4t÷ïKµ¹MHYÖ%Ï{L«Š“L IDAT“Œh­`ÍcÅ\‘ÚÖª|$¦m؈ ±…Bµ*Au›0u#¶nÝècš Y.¨Ý!fˆéåK"C#ÂjÑ6Q¢¨,!"´`ÀåÁœøšühÁÊ•gÈ·Nn=jס‚¶Ðhk ƒ”q·Cœ\OäÍjAŒ z£UY;wž0)8,OYÿä :¿þ¾¹G¦±b‡†ÇW,•sJšˆ)dµýúÔ ßaç7xá~[Þþk]|êUYÛºÊìÆŽÿõ=ÖÕ‘û¾³ÍƒßþM¢sœùÃ?æâßù;rç¿®uòÙÏ!eê~7á²—wȾû†Œ¾òñÊ9æ×Γ•ž P¯®Èáç_Ôb{ƒ½}9={•z÷ÕÁu‰ë Í’ó’‘qøïýÜïGSν½ÂÊk‡ì_Y ™Á8KÇe8i;ù½מ¹$¯þÎo±ý™O`>|›äŸþ=ùdýÿ±÷f±¶åw~×ç÷Ö¸‡3ßsî<Õ\.Ûå²]n»À! ™ÔhÔƒ„€Gxá™'$¤ð”) žŠ„!@'Rä47Ýî¶Ým»Ë®¹nÝ{ëŽgÜóÿû”ËNÚ±Ý4H ½¥%-í½ÖÚgïý_¿éûýœÄOïZÔð ~ü9aú{¤§µÔžçÿ«Âýƒûñ/ÿõS~á+~ëË^þÎ/Ϩæ;üµ» Ýt‹Gýƒ#F¤Ñ Óèq¡CŒ…V’~ü›ü'Z×[]ÂÎtÈd¸”*kÙ%ËdÝáúñ¾ŠpîÁà€üÜÉJŒ†Â|²&ŸÑ£¼Ö]øajÒ¨H­âÇs÷s±A¤ÂBõq¥Î2ò†pÞA—£ú¤›.Q$}.@ã֥РkhYÈÀ!ÃþãUH­%+òI.¤>þwØDºAA.Ϩʼn÷LŒ¨È*Ó,&ÇÄàE©µ=($«,ƒYÆr8qkÉ}Ô4&E»”ˆWˆwëÎnXÿÄËÅ’ ¡Í3‚rHœ³1©Eõ0¹¾O–\ ì#ÕK·%´G´Oî¡—=ºYëGÎ' bk}…6´ŽˆG| x È£PûµÃãn±^;§GèjWŒâ6—ÑLzÌd*ÍÕ!ÍAAµ]jühŽ>[Òß;Úd|åvlNi'GHˆ¢6 ЍÄùXÏzù{Ë:~ÿÃ9¿òfAa¬ ÛžìžlOYeút ©Ä$”¤åA<~¥¨;KxFV¦¤E"i™Ð:OçC#raK±è““±z‹A^²Tœ5ÄbX°|t$£"§»q)öR5¢ž½Ãwî ½AãÃÍ+”M~<¾ˆ5H‘Y‚´=ˆŠ!ªeÅ›§Cd4ŸqkÓ!‰ãƒÇ £=?8ä{eΗ^ÜI,Ì<*A²8B>è—Vô…‘dÑ“To¡o5ÃÜñýÛoò?þO/òÞ½Mlê‰ÞãúŠ(Q”Њ&x&A~X 29²êëøî9òa)ß|ªãvÅÒøxp‰T ½ŠkØ b”¯lÕìšÀ‹ƒŽ›e/m¯ Ñ&q6¸%Íp¢Œ)9R·‰‹”í·ŸŠ™ô¦Äêˆ1ŠvR’¾þH’‹óØo/a·"v‚Bˆ‘d™NR–ïP!h[sš¥DQ›µÈå #Dô"©ð ÜÃB>ödAÎ' ”Ä…%š°_žÂÌ0øÒœñkÓè†ê£\ºã$Šþd­!"‘Õ{Ú'™@ŒÝw·8b{!»Zs¶3å¯çŒÊ’. ³#JþøQý1NèŸE.ÿi…öŸÓÿ?í€ÄŸejJÿö0Â? -ÈŸ&yùYÚB?Ë5þ¼ûÿÄçu®çéôŒ˜(ö·w±µGÕNЂ֚¢U2\B4ÃÓÀð \ï°}dÒÚIc#“ ´B¹°®×¥– „ž–.TØNP¢ÁhÌÉ‚`-qÁã)>7Ì® $ ÂตÐÔtãŒÙNAŸhF“V†´\w|úÂX~ð¤å'µìmD>s)CN„â”-—¡Ú]®8ñòwÿÛ‹zÆ— m—IÞvžPTN²Ö!;û´/¼†{öÄï\¡²-¡©0ÑRÈÑ$J¾ê°m¿vŸÁ‹P%Fjk¨–Új”Dtž’ äyBšX‘4¥oi b„A¾Á¬;•Ú-Ét!™. xä\ÌœœáuD,B¡4¥2”ÚJ.‚zpÂÓ­šjO£¬!l•’´"¿¿âøW¯ËŒq¿-ùbEqx,ÕrеµC桘ÎäcÛMÕ;‘ Á6.d0H鞤­pJKª÷è ½¬b…VCÞ¬ t.•{BhÂæ€~{;›¡Ú ’ºŸäôã-ˆ=Fºf…îZ´ÑrÿfÎÝ ÝJ@%\yïXn¼ÄÁ£m–±Üí:¡“íBÕyD¤Q)AÔº +ëúµ®zLÝ£ˆŠ=«PM+BÄÌVèEî½(·r|–â3‹îz®M3²ñ>û{¢€^)Z¥$é›óN¢V¨ˆ8­±®}Ê â=ÙYm¢ ž•®hqrað,C»ƒïÖ–¤ƒ¤—…ª9›œqeUÑÍ[ZÓw=å`ˆçt«©Ë²ÀŽÖßÅÐu²¶e¢6ç/!’¿tE´@˜®è_z†Õ¶Hw³¡l¢ìã‹í\ú‹{dùúøŒÕƒ v`1Ù6‹›¯3}õ¼ÿ.þþo‘>ºGså’ô;Û('¤wi_$± žLXé‹d)©”Ø>Œbuå€Õ §ˆïËÖ5ËÊ èWg¸ù\s(fp ›îS™ ÓŽËߺ(wÿ¥{<ýÔ1Å2“Ûo_âÒÙˆüuDï)®]ü¯ý…¿7â[_ÿì×ÿÝj!˃m–Ù–LË/1_¼Cyò&l_ç÷ÿçy{ë_üÝ_ú¦ãsþË_;•G{ŠÁœ_Ðò×fËYÇ3õL>ÓžpK-%'aCÁžŽ¤± šDj«¨,ÐX¨²T¥ñ¬qÆòv݉è,!¬;iN­x½¬í•‹(¿ðK…ƒ¢Rô‘¢‹.J¡ˆBªÖðµ-¹ÒäFµc£Œ»(ã.2ê"ã~ýw᣶:‘q¿>nÙG=”}}bQí’8=¡-ñ: ¶‘‘ΩÅ^Ô¹^Ð4†l¥YV8ã JÉhÙ0œ·R§_¦t£‚Cƒ mßS.Ô…ÅeÁh†ËŠÝ£9ó±eqí6›UÉâó¯ ÎÒY ¹&¤úNįE7r>Êl<"Já-èó5ô½ Ì9ÈÐ÷`@òYµD·‰›è$#ä½Ä>bf-É¢#%õvA·Y¢ì¼Â¯æôÍ I/‰×h¦¨ºFœG›„Ô‹$.¦Ax£Æ¤ ÂæÂ`1 QÖIc'´îŒÕê1~©D†QÚŠÔ=¡ñÄ>ˆR‚՚ܲ<“¦ô]Ä÷ç$çÑÉš5ˆÈÜ¡k'>âª"|Y‹\ÔX O§`>[§žÆ$"~í ¹nhÔ0£dë¤qÕa°„ài;'ÚEdÖb #‘zå°‰•VÁ»Gs-r}7Ç+Mt‘~.¤£HRâ" G­HÝ­û”.ÛÛ ÷òÖ{;LfÙ9äV¢H…R"ûƳ­a¬#»&ðKƒž¯Ž‚‡yÔòÚ•„¿t{&ÓàÙÎ× mD~aků]XñÙA'_Ùhxm£E9-óN“ì.0ûg˜+gR]اήŠnj^3—ðuÁÖÛGØn.ê ¡W>÷X’Ï?BÝ>yù)agI¨•¨EI÷ÍQ ô½]Ú{mïð|Þ‹~f‚½T#6ˆ:ÌÕJEÜ£‚8I$È*%0K‘Æ¢jKl ¾50ô¨–DA&] »é‹KÔn—(é~Ky³"»ÖH~­&¿V“]«È®Õ’^j}j!x¡þ°e#纳”ÅÝ’ÅGóM.õüÝïÍøûï͸Öó£8¡Ÿ£hΟaLýg#üaò³@~†1'þ#X?‹ÐE~B›é§]?gfÈO¹æŸ6’õO/ÙÛˆ{_x 5oEw‘¬W$QaDK“DZ×ǸQ"‰"E¡DÑK”ÕHÓ§J”¨ÆÅ˜¥k¤£‰ÎU¤>Áv"¡HÀ&˜YËŠ`$š$“lZS ¤'d«HòxŠš.ˆJĵÎl·®9¶Š\V•ðîi%i渹™±Yàó1[ .i‘tEµý¦˜æ7w79Ø|ÂòëS²ã%n»¤zæ–¸g>›_ü+âw¯":Eu+æ—¼„Æ!“6*›¢óí¼˜µKLú ¦÷Ñô%‚ø@gµ´FSY—Öà‰"1¢ãz^#ÑŠ$K‘<#MJŽ«‡ÒúŠa¶#Vè£ÇV)ÉE)……´hÑ"˜4A5ýwß—ªlb·£ˆEJÜ,%{TÅâƒ%‹—vpã”ÜåÓùÓC©«i Ñ‹œ' åÙôÜâ{í<£Âl}À/{¶.̼6 ~)Q±:%Q+iC¤'bE‰ŠXIA'ta†Ë”„aÅub–«õ¸sˆïi·öˆÆ`%R×KYeÂãç÷drPÒf‘kw<×ßsìß_¬c±7âøê&]iAéÇS¢ø¸Nrýzäªx²bø`N:kÑ‹½j%8¡¨Zl¢ÈÏ%ô=¡0bZuÛ JD¯íC#„<—ZF‡^Üþbby:}“`Œ8Q„d¼ì)Z/^ƒ…• …Ü!»ƒ«Ì¥Š]ÏÉg“[Aê"иPÜ–az!F·¶LmO]/¤]yvš%Öû85ŠÓ¾­LîìLdvø˜Ò‰YJ»·AÜ?À˜ ™ÎÎ-€ƒ Cˆ„Øzå¦4÷GóðwíªØé)Ý•HÒÂÆ·ï2ÛÉ«7v¨ÎÎX|0ÁÍ=ÙvÚj¥Ú}êú§bñÑ{lýÑ{$OP߸F{q Õõ`ÍΆ´—.±p'<8þ‡"¡'­²èÖáÝî3 ‡Vòþ!õiC\Etí!zpI9À…)!ïäÁg±Ø©¸öáyñÍ+Äd„ù¢lö¶>-¢¯Äßù½ß“7Þ~Ÿ;zÄ6oð¦ÚáMµ'o÷o[?”‡‰ß¯HÞ Üþæ˜Ã®äoþåÇ<Ýõ\:)øww‹¿òî6µµ’v+¶s)}E™Õ\ §ÜNå`ÔÄÔ {iG26ƒf¨-©*Ht&F)ÖeH+}V‹7=mTq­LM`ª=3í™h+¥WÐèH¥£TÖ¸ò(>ÆèÏy&â‘èÒù¨;‡êœ¨ÎEÛ{±>FÁüȦϻo6*r¯¿æ§cÄpñ%*‰^„cë8ÕŽAÔâSK—èØ[%½ÚÌR º<•>OéÒ$‰$h!JŒnz‚›ÍȬ7§b§OÈîžÞ+Ò%Š ©eëì)§6ÁkƒŠQP•ŠIc ¶,ÆKš Dlç1­—^[b–ƾ´à½HŒQy(—+Tèd¹1]bBÏîѶñqrýº$£KdÓ‰4Ï~Ú·˜tF:¼,>-Ð[#¼jˆÁAQQ DÑ~]Lrfè(e=Á+"O,SH-Òv ÝlÅIÈCE/zlíVè #n”£•ŽÊŽó ¡]Ù6J¢ê–"]£ÕÄÄ¢EÅ˼hX^LÖM§)9-bœY»ú)•²žToK¢rt@,j]q‚ ®÷4ÇH' •'¢ºˆ8 skMç FV4Îég«Øµ™R¤ÞãòŒ8( ‘‡'1Æ ®X¼¬IQQ²6k0‰Á„H3©‰U»N劣4 /}ëHbdræd2ï\ßF§™$ÁÐùÀ;Oç”nì—Ô¢G46H¹Ó”XEd³…s;ho#ވĨHK'yðÜHV¼¸7á…‹.ØÀ¬³|q£á×¶RضžAT¢¼Ä[ÆK·'¬Û§|îÖ#.^t|!òBî¹4èØËU¯¤ßŸÐ„^–S7®L…eÎÒܤ2ב¢ê¥² qsÎöéG$‡ÍN‹ùÅ»¢Ÿ9Eö–B€§™ÄÇ›1ÞâO¬ø§#úG¹4«H¼<‹>툅[{–ÌRqJÜG%ñîfVüISØýždà^meóVMöÌŠäsÓ˜¿2g¼ßÉh·‹ö¥ÙÍšìFÍ8lhØØY0¼2%ye…d?3„…ý¸ˆqi©sO¢ôžØyEçEl±û ÞtÈnT$W²‹ rs…ÁðéÝ’/Y^»–˽ªæ¯âŸ²ÿóŽ`ý<€øS’—Ÿ§ÿhäG·?)‘Ÿ°ïŸu±?oã'½þ繦ŸvþŸöºŸe??Ã{ÿá#”2¾¸#v{ˆË­Hï‰óšH”¨„~Yr+¦Ì$qAt%†È|€4…BGÕzB‘Š$‰ÄzE«I]*‰·û³êQËš ñ‘P5âFy4˜¦“åNŽf’Î;‘§±“ŠdÑÒô^ÄUrû&ìmŒäRVð;¦òpêxn³ä†Ý—Õ IODèо”¶jåñÑèß…G¿Ùóáצ /&2¹}]}þ6ÉÕW…[ŸŸ¥äÓ9ùt)AE™o9|PHÛ‹_-D‹ÂØLœÕ8#»‰ ë‚ØÖaÖ\Ƶ€RRYMk4­VÒk…DŒ&ÐÁñdõP|ôì–’åc¼œRâúŽ~Uѵ-µsR'J\ÝÐ7 ­ÕÒö½øSmôâ7D,ý…d+)î,eþé]ÜfÎÎ2— "³Y5 é¢G6w(”'g‚k:»ˆà¼ˆBl1^òt IãС• #»$¶‘Mð$º{z_ $¥3q®Wâ¶ÇâF#’ùúIêZ$)¥Ž¥Qµœ "óÝŸ[¹øðŒÛït\_³q6‘÷^Ý•_Þ—ZIj/¦uµ z/éñœìhIq²’|2§|0“ì´ÆeŠˆGù^bfð›)Ä·žPhÄhhÕZ;×åÐXñe!°±Œ\¿B«{žÎÞ– 5^kŠ˜ÉxÞB ´HPB•‰@áDnì|ž§þ±´Ê‰ö‘ô¬ÇT^t‘ÒŽ-­¹PÞfh÷$x'ñÜrÕªŽ$3$ó›ÕBÚ,•;YB&Z†;»’–…¬–YNÏ(ÓÝ|J•)I_û¼¨ÇÇÂÑbD$8ѪI´5âï>Ƥ¥Ô›¤wîJó©Yeüí{²Ø.Ä\½-E>–ZGiŸNÅÏ{I/´¤ú˜.½.óg¿HsaÌÆwþHÊ÷ß—öâ¸áˆ§è¶å=^AR^ É6¥¯Ž‰*Ñl£2Oâ"!fR1¢l¶ØúpGƒ¿¼#~r$}{Œ\¦{øôXtt£ÙøŠŒºç©_3|®c‚,„‡[rÏîòîÖ*nqñðº\~r[v'·äÍkò¤R.¾”i:`¡ Y¥˜¢g#.es\1Ì´\ÎÎä¢,èTNb‘^ 0ª ·F’˜‹W­Ð"’„K E!¢DNj™h/sht`©£ÌL¹ ÌMâÚÛÏ$ñDñDé%r–93¥‰²0óM–&ÈÂæ&23AæÊ3×A–&Jcµ© ¸ÄˆÏRúT“h‹NRiú<“>Íèó¯©g¢ú\‡j’/Éö¶$Û·™ºüZ6 "Q)I#*©µ¨ P!ˆòŠ^”(„˜¤Ò§ëè6"²yr*år!ÕÀÐçC¢´o8x0¥ÉúÚ‹ ç5ÁqWnB×J_/EÖ³Ãô*aóÒKb-ÒõÇ„DE¤[c5‚1kc@ NÖtºÖvëÛ%¢´Èb&!2¿!E)ÒØ~M“o½˜ªS{úÂÐmæÂ`[”ä¨ù±h·D'ûLF^TÓ"u-‚ ÆŠhê-³d±¹†Úî<‰2\y|*ˆZ’®¤XIüHL«HI¬Pd ‚ÄiªžfÕ}щÁwŽè‚h´HïQy*m¡D‹ ­•°êÄÕ­™¬ëÅça{,OÅ/f¸Eº€A‰ÑkÅr±‰’rJw²·è%ÂR7´KÏËÏ Äi8™ö†È ñtE‰§¢r•²jœ.*ùüµB’ÜR‰’¸XbË݈TV|Ù‰d½ˆ?ZZp"(å™k¾péˆÏížñ¹Í9/m®äúæR^Þ?“ýý3‘­©ŒöÎäÍÎðÖ*“`z^á>Ï•^6}ÂâpG²é˜q0زgc£’Å,a1רñT–§šØEÒÄÌhoè‹!Õ芈VDœ´6 ¶Înü1Ú·ZÂ*‘öÔàSºïìHõÝ1Í[›â¸Æj‰yCvk*v¿¦¾[HûöXÂaFÿîw Y€0Om'ãÏÎ)Ê(ã‹d¯Ìṕ¨aÀœ¥x/øN ­}š{%í~+aà…$Jw¡ÃT˜rÃJ²…ÈàQ”ü$ŸZ1Ç¥ÄÄ*}R  ‘'êi*¦+’\ppm%É•FÌåZÔ3Kñ¯ŸI­ wƒl}¡‘ävÍø–ãkß®e¹ŠüŒ1øÏËþI1-?c|ÿÓÎùs†®Ièÿ¼Ò˜@›PêãÕ†-}èÈ\Š †Ð¶ÄÞB<ÒEžP7ÈÝ7ÚbèÌn8ª]Mzk‡|ZN $“ŠØõô>G$âB¤î"Z+ʘ££Æ%c¬0 &ÜÿÏ×ÿ‡ž£wÙ}>ýkŸzŽÃ·¾@58e8Ÿ1˜O©Ç#¢Ñ$ç.ð[d€x†>yÌ($—x‰téÚq©ë#ZÀ¶=Iëðæc»Ê5){–§˜X$ÃΣc\»žëÚ<£Á®ÓéV8­I‰D,Ñõ딼iˆ'“5<Ë(’:rñIÇ;¯üh¯nmäoUJ¹òÌêž-/k¶âÇ@²s{Ð`4î<á7kN í¤a£È9]XLÔ”ý1ž:½An–ÎÓFa`Z¬Ÿ!²M‚&Oö¨«cÒîÑ>w›êÒEŠà|í=]wÂÓlÀ$kèŒAÕ—ß9âù»Gèf§K"ž³ )gåz\"D’Eƒi:ê‘]SË ø&Ñ´£Œ˜húœ[ʱfžCÙÉÖpÌÎ#D«‘T¯ ½'d ÞìtÊArƒ´ÜeÖÌ Žõþþàzò•?:«ðJ‘w‰‚µ—h¤¨ÎÿÓ“¯²çc‚ ¥júÍMúé c¯Ø)vXDÇÑG÷¹pý ·_âðƒ÷9ÞgocŽ˜¨?fóÙ«¨Ã§è®'Xý±NÅ÷1‰%–)ú½;¸í™ï?Õ¯}ƒ³¿ð›¡æÆÿò»™¼ôãBsšjÚw™ýþœñW„dôzû GW~•ng+û¿çÖõ_sö•/óè7~? ªµ~'Ò3.ŸÅÛ«DŸà Úê’ý1V,~™$È^½Æè‚öðM¸ðÝáÛ,ÿˆrï5’WÙ\½HŒŠpήè´áfÿ„ëÜòOI&žƒxBž¶„ Ù2Kª"ãßf>ªÚ0 ìv©’}ÒP& ‰ìáâÚ©Lb$÷¡tìɼ?ýø­®×‘V45ІþÇð>ýº“ñ+d!F†¢1:¡ŒR$&;¯ŒD‚68eÉc$*ƒï–˜§ïñC‰½(¤žcNî!}û±ý7ªê Ü0¾@«…—ÈñŠ®Ìž}¶·Q>Oáƒû¨¾§é÷®Þ;A¹n øXήâ'ö¾*R4=[“šÓ¢À'Šv¸v“($uM9›JˆÉ'-ŪYcr7¯PHAË#üçÖ.ƒMMˆ«SBpß#ÊÛ‰4£õ8ÃÌO±ËÕDì*b½¢Ë…^Ëùj¼rc§AydÕàG9jÖà–g\½´Í­ýgxïô.÷Ã1a©Qm =ªP­gucDW°W¢º]äè1!¾MÌ7q£ËØØaNîO¦øÝ1z8àòÁÀéeáÝÏEö (æéé²9øú,C²"ÇyGïMq.à|D%5HðV­¡˜U³æŸ”í#±up¶"+7èl#ØÝ67´‹³Óãs)L}ñþK/¡ÿ  –g£ Þƒú‘²qm³Y ³„°¬ÙËW^Í0NñK¿´ÁoÇÖwmdúx‚hE,2”U\°Û,ú)ÿÇwNù×^Û#É:g˜Y¢Ê+nU¢·lØ&¢}¤\&tJ3ÝŒ*…¹7$ï5¯g+¼Š¸‹s^µ¸ã—µa¶Û"Ó’Õ½k¨Þàz‹ÞX‘ÝxB˜P¶4m‹k4n³¥Ö=ö½éˆù•q#¡N^¤§P‹†¡y‡x'0ÿþ.Êa™ÒϳõóØ¦˜/>&ßë0E ô kê$E ×?=É1^Pžì‹s&Ï®pY Í=ùý7IèO3ºØQ´¨±CÂ'^S‹K-¾p¸[+xùM‰‡E FkÒiKö45¤óšüxŽ‘ì¬DÈ} t yføîoi=¿òLΪ ŒÆmuÄé‚…áÁ¤áï|4ã³Ï[¾ú—r.# ö› IDATÿ7š§‡á_˜ØøÏÿ1DV³oþη8¾ÿˆ›¯½Äγû˜;§ðdF‚Â̺µÍ^ˆ´&°ÜX“5¹Å%–^zºvARƒÑŠØwľÿ¤ÇÕ9›1½’#'SºÚ‘g{<¤¬ µ‡Õ~†~î"Ö9âéØe¯B†5¿üJàüqä»yž=€ÁiO¿»¦g!P:ªeÏ—þƒgxþ¯n1ü…ïòøÛßÛ䤙rš->z„ Gt£æ5YPZp[ö–a¶Å¢š²Zs4¨Ûž¨]féŒ^ߤÏÁxé²!QŠhÖ¢õÄ:¼V´™Å¡h­]þêcךµ@ΟkU‹AAžZæ6Á{à÷yÉ LïhŽîàW¨”[oÕ¨¡&œ³>$üÈM!x\p4Í‚Æ;^ì5žêï.šó ücÕYßGºÃ{¯ 9<r4¸ Ï1!¹‰²G”iʬm×¢|uLï·Éí>c»Ogχ÷q º‹û„É Y¬xre‹÷^Ü`5¨1.p°JQG éYEÙE:5Cù§SÞúbI— ¶îÀ9zíq¥·.UºÌþ%)¢ÔªcøÎŒ(k{ϸ™Ã(Ã׾AkˆUß,£ uVEá³í#ƒÓyaQ6…B=;ÙöŠëLäÎz´åüó ]ÃÛÈt¿ÿqngúSБˆUŠ4ÉxçÉ£UÃf’²×Ö¼4ï[œLϨë†Á(áÂõ9¼ó}ŽïpqïeV'N‹[_üö÷ß ƒK’5cÄ׸UXEp=ùï¿IöÒMôÞ Êü.§ñ%vþ âÒßþû<ú-ýs×ð;7˜E¨?ºÿxÁæW-vëÛØéêW?ÃýŸpõoý ö~óë@äÑoü;¸Ñ]UH×û%¢ rØÓîq°û6'¨—Ó±ÚT/^º;ÄáÒ=G;yÕã?@v¿H²ù:úøƒ‡Ã[Åu^jîñR{›íc|£!Â0iÉSÇf2%´CnÄÿ”vðï´ßeÑî³Ê²Jfì·%©/˜XM”H§Öɇ²`Èt$œ'ï1ñG|rEè:⺋Â'ÚÒ—F~leñ¢XM¡ F§ôzM”p¾(ˆFŸ}„9ºCÔvÍj˜ÉãO>6¿é¡»öõÖ>ø~MWíáGÛ´F¡ Âô[èfNŸ,6JbW£WsèxX;)ž2"-(¯Ÿ´éê`­©³¶³vBX§ƒD"åbvzs‹]$ªcÏæÉúý›hßãËqwŸX5ôM…Ò«,­k×E ïPÅf|@RM©7®ÒdBr]y’i@54@,× #Ú¬e ±˜UÄAŽ;!&L—Oiã.tûˆ[ F-a.DvÖRÞ³¼9¦ÎêBJæ6Pgs$ö«0×^A•9þÁÛëý‹;°13”ÓÈÛ_“ý¥ÞexšQ¨MœšÜC\èp>°:7?‰€­ÑüP#·.¦›Ä€3ÖÀªÃ4—ºà()ÅFyVÓ%Y™S¤-é霮 ›tÇÇô[ëû}ôâ'‰ˆ²U ¬!>­¸¸ÑðëÿÖ6ßÿ^Mßn_0üáF'Ä®Bžžòü§Çº‚ÓYÂ@ø£»O@„¿øê.&OhúˆI"î<µ˜e‰)–¨t¶Vô™¯q*R"ÃQÃêþ>í²䟿Ëêý-Òö9H{‚ ¸:#Æ€1-Zõ("]¨ž”(?ÂÞ:!ù•{H‘ °U¯…ÿMNóð—ñ«=¢êiDµ °ßƒÃÍ÷öèè–ä¥c´['Ù¦'»Yñ$Z¡•&¦àòÀTã‡ì'Ÿ=AÕ© .Žn;šË-ªST^¨®Õp­Fy9'›FÜFÿ±öúsvŠòÍ-ìI†qBØj'8©“ÀÊGdC‘ì Y.èiDy°0x<#?™­AW^£|޲Šbc?däÄþÖ×æÌ—ÿì«» 3Å7þ`Îþ?/¹rQñ•Ï7Ü{àÿ…Šÿ\„þÿ¢ýÇ÷¾wÌO&röè|X’^Ü”“Ðð­·¿Ïè`‡MIé¼g¾¡p™F”ˆ©#*(iÊ€«ç¤ó€mÞ­ˆç7L5©O˜¾8¢ÛLƒ·™ÓÛH=P¢ó1ù’Uè9p ·µÍJã“3YpÝ­}ö•RÖ"ÙÌ*â0ål¢•„PnŠ–1vDb¦€‘…ó¤º'+Š-´2(SЇ &OpeÆì˜{×Fòàꈨ-7Þ}Ìé¢ÜGªŠX/åâª%©{f£ ¾ù«;Ô[wèºa4«1] _¶|êûO¹|oÂÆãûwΰOÏdüÑ ;ïKþt‰_FTÝ¡R-jˆô7o$¶=’¢ˆÄ.@iÁjôñJÔ¬!†(*ô\î·¸rðB"|ÿáo²Šh“seð<êä©Ì¦wF‰7¢HPÉÜšCò°=d¥AzG²pØ*ˆÊ,ÍXÓ*/Êg%n4$­y?öÔ}äÆü ã{fHwö9”UÝ"c‹ÖšÁè21ô(doû:ÝrÂdöUu’:Á錨´M‚Ä€"Jžx¶£ë{ÇaÿûÏ3úÁ ¿ý&§„ìâmFÙ..ª£î¸&ÙÈ0å‚ÞÉ|ë9ºÏ•ÔD6¾öÛlý_¿#¡,¨nß"Z»¿ôŽ:HZ”˜,eœÞ“ÅCÃÚñ¶G%š°sMÔxBô¶Õ í쮘ò vt®~WÞ¿ûK5#ßó²}äyýÎCž§¼(x>ËxÞîóÊ“¯Ë3Ý1ó—?’÷ÿÕC¾|ö×Þïøþ…GGÒeÄ©•e‘ ¸Ñ<•Aì8)·£¨Ê’./øò“7å_9ú._ž¾%_®ÞbZ&逷Òkc†šqS“*‡Ï Þ* âÑn“Íô²lŽþWOÙ–¼Ðâ(ƒ%ÑDeHB F! °¼RÒéõ`§•Ô¢hÔî§Îçö‰B*šBiFÅEñÉ&V «Ä$ƒ$ÚŒh‰t53}LúÁ7°Þûäìáûèé=?Ã,NAŸ 6¡ßºBõÌ—i^ Û¿-«+Ï2ßÝ£+7èË œ6"³¤£içè'Ǩ¶}ñ2’hQ“%OðºAïnK–lМ=&'¢5A+Œ3 Ï,³3¼å¼p#ââÚ¨·®-¶ƒR”«ã“S¢MXî>‹×Ž.Y²}2a|ÒÐ\£¿t›ôoLj{WÅUsúf%Ö¤@¤u-ãÊá¦ÔmK}ú”´9Ÿ¦tfG’'I5ýF/Q@Uë hÁ)ÁP*ý9J!z‰e†òÐÎòøì„E[²³}›zi¥"ôë¤Ë4S;ºqJŸ‘ ½£ß*dõÜ&Ë+½vˆó uÔmô´%T+éHÒ!3¸4VD¥Ð´Üº¸õò>2 ¢½£ÕN>ª–œÔWÆ)Ù°uDT­H;ˆÃî6ù¥NãoÓêG(ÕÙ&wŸÅ ˜ÙJVªŽƒSÄŽvè­bºµ ÞéEÏuc^CÙ'øàä´›1–¶(!:OÑ9Rï×A½Ñ1(…Kx£ï°u‡BH|$m=‹Õ# IÆ—ÄdC:ÑT ]jèCPÂfÓ’ú ÁhÜé Þ¼ClT—l¼ø´¡ÙÎyôê¦÷—ÑöžùË»„ÔpùIËÆÓS–«c©|œ·µÍR`4™­ƒqïˆ~]_õç6µ¹VtQXœt4eŽÄ ºïQÑ¡b¥/ X¢•—öü¦E8¥î 3»hÑâc»Õ¡<ÚîÝÑ–rÑòâ?æÚ‡gØ i6÷D¥ŠØ-$[,I£ðÞËyt£ [¶èºaã´â¥2z4gãhÉþt%yããæiÃþ¢§ÆÑõžlˆ>ÒÛ”*â•¡„AŠ[¶„¦‡Ü …EªNbb"ÃTô¼UOH51Ñ Oç²í‡l]ü,ÇË÷y0}ƒN ٞܚúøYU‡`Œx£b•iÊ.ˆœåZæÿ7{oòcÛvß÷}~k­Ýœþœê«nÝîu|)6%ª¥lÈ‘c8pÀ1ÏdâÁÃL ÄAºA2¤E‘X–cÉ’,™¤IJ¯á»ïÝþÞê«N¿»µÖ/ƒ]÷>2²(É–ƒDÐàLêªÎ>{í_ÿû~¤ÂY£¶‰H$]\ÅtSª¡¥²‘î«Òw[ª¡í:9cq2•ç‹Sže}ö«R'ë'ó™<5©ö÷öè;ÇÌEœ#)y—(‘àK:6Ã&E®âkMÖ¢bEÅh‹1’MðȬb02øÞSÊMÇÉßzáwŽþó#âî6fs›¼3‘¸5¡šÕÚ<2h]a¦X]“W[ø;ŸC$Ò}ï#ð] ƒ!õÞ.vÄhzMª =«²Gmn3zjÄ<~D1 *IW;b¸ƒ˜¡@…ëN@Œ”—ãò=\çPfWÑ4ÇŒFCjÿÎ÷ärW/wäj2àr¹Ü?äñ«›œéº»ËÞ)jùô­gj'wË1oßg™÷˜%9 ɘKŽx7†UÖžvål0¡ÏšÍzÎòDî&GÚ­KæÒç÷Fos‘©cdW˜D%© >­©;ß’ÀB;ÙËjæÞè“hÄSÑÓÈã©$Ó4AIJ(¸Ä‰UePÕ¤ª’*:n<™FV‰“Ë,¡°V—Ö2wV:uÔ•1ZK-–E’P9KíÞ%-Õv~,éóÈîýSÜùch Œo0M-¡·¡ÕÞ«„Á˜z²ËòõŸ’êÆÛÔ»¯ëzûPæý”¢“ºD‘µ.¨©µ–†Òx““iâ rt„V%z뎤ý!IéÑ>ÕX­X FûÒ̧¬®Î°.iñƒV°ÁjZæókE*e0/¯ë8NªaNHJ€|UHw±Ôbtƒj°Mã®Ä†ÛGW$AYî'z®q~!ÕÝ/ yWârÆ€GÐH ôûcònŸrµ¤xtL¢¥$¶ ¦#Ù´KfÆÄš(1k ’¬TÕ Á‰dyhDPmkˆ£.¦V©3íöÙÚ›f­TÍÒ(¢¨+lå©û©øN‚tRµµSEÕrA(p»MD’šè¬VãÛ”ÝM‘ÒÆÉž"Ðîå]ȬHnn"XieÇ‹]7â:n£!«é¥"ܘY¤HÇ µWYÖH'…NÚ.û«ÐëdΦX$ÝŒ$1bgkU›H™zbQb¢´RÉF0Fð!´c­£ÅÉ%V é÷©ço¾žHÞ±|ô­Ìkyíí ë(åZùüÖšÁ뻜Lî’Î=ëÙ\ÊôpœÈd”²®és%A¼‰A—7- ">S¢¹†XŽô­ ìþé6°µ >"g=\§³±T³¹†;—È+ô,§<|¨(×5þÒ’½;¦]üYFO}ú>‹&²oRÙ[ÎÄ <ìå¤,$”•$ÎIÖÏY¯˜RéoˆÏ¬¬æÇ2ÌÆ F{R6K±³9‚“vñù{²»)!™.ÅØ„ØíJ÷òJºÍäìg>/—eO’_¿/ÙûOdº‰èæ&é“¶¤°ÊúÙâU:û•\JЈßx‡æµ×%™^2ø½ß¥wïSB¿/Í­W±Á¼ŽC4࣊Ÿäh6ÄË• Ì¡‰bÈŘM2bXb'¨¡ººd[’v(®ÎY_U2lɰ×`]!Î5$¶$µk’´–Ô&ä‹[Ò{¼ÅÜïȳíöŠWd;lJו²Õ,‰”åÜ#«ZlÕHZTâÖ¥PPøª–SÍù8Ù‘gôåûn‡sºòåå}ò¦‘c7‘Ç-y”n3µ¢K¥+r[‘¸ N­x1Ø HåQ°,Œ0lVü”žqh2<¼ â*áôb!i’0è÷I­"Qc$¡çýÐâ ½1bĈw–2±Ò8‡·F0\ÆŠ+§’>ÿäôSÒ'ï‰=;% ÇRï¿!õÁ[4›7eµsH}ð–TûoPoÜäj{‡u&bmFtNj µñ‰-†Q,©¦äd2t¹.™udÖHáùSBQÈàî]öv7éY>~*MYJ•lïî‰Fa>»ÂZ'ˆ¢Ö`ƒ•î*‘u-€¸‰Q¤ROÄwS¢3â/ƒéŒ´ªe¹óº„ÄI´sFÓ+Fgõî šÛo“<ü¶¬ï¾·ß‚ÅJÂrΊ3N|l„¨äY´Û¿˜Ëêü:HjjL„fHbÌE"ÔNü‰¹"!ˆ­U¤íTâ´™õQ£B?cÄ­½ˆÖå’ÕÂKZĹˆŽ"êŒPF±¥ÇÖAš~Šï81©ÃhO$8h¦"ig7Ę!Æw$—®ˆ&zbŒ[)D!w[$3HfE‹FmUÓœyì":ÁkD#fÜé$íèh݈#Ôž8_ŠDÄ"= E"’8G'KX^Î%†HÖíˆÉœp¹¤:ŸRAš Î%m¥%NH’‘ÔIÌRiN¯Hû)WMÎåóB^{%¡¼¨yüýµüò¿·Ã«_éñþûµ,/k?¬xë Jz°!WÃ}IššÓ³™]•L&£ _GÉ*{ÓHÜ/2‰py "êB»WÄK‰v¡ç…›s‘ÛW"Û…Èx%zë’øÚ™„Ý)MgM˜,ÅãY?4âMÝBù¦”FŠ{b HVŠ/G4É» {¢¶ŠˆÓ%7ådëdF½t²|5b¿8G¾8‡××ÄÃ’µ¨„4B´*õ¸A"b¤é(«d¹c¨»Ò&¬x±$mIH|G@ê>ÔbcC"…¸Ä±^Œõñ$q6ˆ$AœFêņP¦’¹J¬ âPâÀÓLjÒÍ y¿‘^ ò‹?/üÄë"õY-áQ‡ƒOoÈÆ£ ßÿ®ÊÃfÉÅ,Ƚ'É»Vìk–fÇJÙ™ÛD¼$â>¿xùü—ŒüôÏ9;UNNôŠAÿ»„þ#Xÿo`ýŸ1«•·{;4™eÝm—š$Dìºx±*°EãM Í qk„{rN9±”¯n!iŠ®àlIR–l}püù ­SdíI. ±—kÂz*¶Û‡Í š\A3rãP¸{{‚YF‘ÐÐd•̘óøD0êäÍÞ6#khúOu˜j@Ù{LÕŠ Xy~,Ÿ|kŸ´]“Ë…[±²›¦‡£/s;£±+¤»4ôB†-”µ U¨B…YbÙP×µ4UE]VR­ Âj.×èb…” UÄ|¿#Ñ‚ˆ4H’D¬÷¯‘Ë"ØØ>ĵ1”0‚»œIñä”N³äàì˜N‘suwÌѤûh…k<ÍnŽŠaó¬’übÎʯ¤nJ²Nr{›J ^ˆ[TPÄŠˆ`"4‰a–[ìÐQvàªô²L"¥Djgde*úö) I]ëóšˆ8ñ”•Òu{¤¤Dã¨XQ¹Š¦—KOsÒ˜ åQOgµ†þ!ɤj–<|{¢›’͗ئ‘ÃO &W‘:uÓŽ±\ËKÉÝ ®R/s³bÕŠi ®Tâ+Câ •°ªEy"š:¨ú}Üéìå”ÐïKyë-Vw¿$åömü` ߟÈb<†¼‡ª'J»FcŒA,Œ;“´ÃØuè§©tKî ýÄ2è¤Ä ¦—#”úþCt½–ü‹ï`v¨QÖ÷ã âfŽ~î])g+üüc] g´-Ýeº¿D&³W«4ÖÐ Siz­ÐDo±bpuIÌzTÃ}š¤AÂ9›§S’ZY½óÓØòЦ8¥yó'±¤è|.MÛ¡!DònŸ¬×—ptÊúùê퉤ÔäÕJŒŒ%hY i†Ó!2ü $&·VLÓJõŠiµË%Ä9ÌE0è|MUÌÈØ”ÔnhÑŠ0¨µhp…WêAJÓu—’ÅmX-ÅÙœA6–T£Á€Ô*uÔV 1"ÝÉHbÚD£…¬¶šÁF+íÞc'é$íþ@ŒÂ¬€Y« Y7bùr7»›ßt~;Ý¥™YÁ2Pž"Ë!ýÐ0kòFHcBb-©:ÒÚŠ!!®{ÔuJ‘Qn¹9é!¾#!Q†yF÷dÀ·ÿòÉo;¾ÿ¸–o|£áÓ{Q6¿¢ŒÆ9ÿdÀÿüë+î~ÙóKÙñ3_³ø¿þ1þ©Ç¨þ?=‚åþ5$ÿª‰Ç¿lòñò½ýר<Ü&4—&rþôŒ£{Ï0¶µ ñ³ õŸ&¹ø³H>0Æm@UqYB*´ðÄäºO" ^(šÖ(ZAû9~gHsg‹äÃ'4i ~ãI,f¶Ä~|JÿtÅÐ?ÆÊbtS”¤«—Ô½tæ ßy@’ÐÏM(F*“/8^y­Bƒ¿&I·²W¢ÜÙ±|÷ÁOvç4r] ñÄd²ÆðuQó©nßxLÖ}Àƒ÷¶äà Ë+;#¾;>æ¢B »O¯Ø9šÑy|O–w¹ÿ¥›¬ú ù|EZ,±«Ä©5¸ÆãÝËïWÏ@#*‰¤•’Ô*1‘¶ÃÖ|Ù&è$˜UÝjR%©1 âœD_sGo‹¹úµ–¼»ÉquIJ:Gĉ%ØéÞ‘Ž/Y/¥Ì‚:M 8ŒÒBÍ^TßTÚ»ªæZ\¨i«sªƒÍ:×U:•&@Ð1ww_㣋5«Ÿ“–íÀz…N¶Èî¾Êr½¦ºZ°½Õ9êyCsqÄ`¼ÜzKfß#œ±qç¶0ý„ª¨Ð,#gKÒ“J:_ÿIP.?|ļ×AdÄæ§Çôÿ‹̾ú&ó¿~ƒÎo1ùß¿ÁLSÂ;¯1J†Ò“.ÃŒÙ:#|oAÞ?'í„õ%ªoé¯IçÇ~\‡¿ñ²÷_þÇ,~öëÌö/Ëòµ;˜Â¶ã?ÆåĽ):œEcƒ¬×ÒͶðùu}Š µ€R_=D'‡Ò¿Æùòc.¦Kd•‘Ö†µXjÓº•F"ÏЗÐðžœUY#,­A¹–h1þ ü\ƒÂÚNƒ+$\EÇàVJ+©z9a³—¶C‘Õä6Ç˜ÛØò ÖDÍ$^U$ÓŠžÎY¾:fÕä+Ù¾ÆpÔ—N&ÔA(›†EˆT™Eœ‘vÖ÷³¦â [ß‚d_P«å%?ÆV»Ž¨!*:«‰‹5"²Ùmϱ âÒVÔCUL#5¼J­0Ú±š¯d=]¦»Õ#í$bV-,Z%ãâ'NçkôrIúΛ¢¡ÑæøL’½mîrY$]Ëû¿;ã'ÿÚ–¼û¥Ÿr(7'ôw¿±¦ß»àoüÕùï‹×xtx—ªâÓ£©¼÷xÉ¿{ØçªH™=Š >QØüNƒ|º%ëÏ]`3Å}0ƽ6G¶+‘5„¤!$´‘`ÁwZ»LÀt¢d_Z A½Ó«‰ïVb‚Ðm ØhIM¹ž~_í£RKt·.錿ÉÃsùoõ-^ùëòó‡ ’“µ‘˜ègÎè•Jê[ä/q‡‹°GQG1 ÚJ=ÕâæoÒ]hˆml ‚s)Ö’«+¤ÉÀÞj­W°bó5éÎsb¨iHçZ'iH'Wäf[{°‚ÇB3’&ÌÜPިȫÙƒ¸à¨óŠóW.%ž ªl\ øüÉÜþrU±’ßý`Å|)iÃý;T¾ä£oð½¿ú›Âö¦çîÃp4ÍŸ8©?f´êO›¸üY'òçVkëp›W¾ô:UQa­açÎwÞ½‹Xƒµ–Å圇¿ÿ)ÞŒ5X]-ÿÌ?Çd2~)÷è½gc2æso¼z-±×þÜ:K™*¢iÚ3i—ÒL4ØÚÀæˆj€ßî#ÇÄ'ÏiÞØCó”ätNòáÙÉšù16.8½ñell,žP눘l‘¸ÑFÊXá?Àõ áÎ|OØÛ£Õ=T÷ÅÈ‹*¼¶PÀëD@!d)Ö0Þ»‹[õ˜ü ·ßyÀÓo)Oç‘ôÈ‘}Å0Ï á‚(¢@ÛÅßNNíÛåÙQT&*ôtÍQuƬW3¬òV‘B®å@‚"M Ú6ÔU¤n%1‚9¾@w7Ða¿­8ň¦ >K¯E±uiµ†&K¨£Çœ^A¯GÝϰdø ¾UÊ9§¬sGV+if¡®•Tb«¤"‚häÄÓ˜ëk­@6Y1ß&!á ¹ ³”7~ï!ŸþømŽ·:ˆö˜Ž3¼¶‰Q¥XŠaŽ[¬º¦·vl?÷ÌûJcFË@}i&"bmP<ó¤„×Ä~B(|?C²³¬¡öh7g¢!zD'È,p±zÆ@‡»_ÆuÇ,ξƒ¢ÜN¿M>Ø ¯W\V'¬3Ûv?š@4æºaÕ|h•š®`Óí¶ö5®É‹˜ÁõÔB$ u’Óéí2KÎà {Ë+^yø}¾=½b½µC6·ßUp]‹t,n¡t§—°µƒÞ|‹ó‡ßa*SF[}ò§¬Ó¬ »¬#<|xi3¢­¢ÛupùBÆ[Eˆ6i»Iåœüèã{ØÙ’Ð1¬n½Âúæ»øá!M i+aëˆdyÂR#e¯‹æQjcQ3bÖ¼®ÂggV­…,%v;¨5­}y¡t"Ét /ìÁ²ÀN—È|ÝŽ9Zƒ©=ÝǬV%Þšë€Ù ÆçV½K^Hw”IB|ÛVõÏÕž¤*©{cªþÞ¬±~Á`¶Íþ«ØÅ9—cƒ÷ÇéÛ”°\â}M¬XªX¶{1/J±ª¨…Ø@’±Šr.±Ù“ehÕÁÄÖ†‡XúÙ>•yNŒ'½ È:¢¹”žä£+ªƒÍÍ!<šQ†'ˆ9Ä»1&é~ ¿ºG5¼$’¦mÒ¿?eq·ÏòÐr·Ú`Ód\ÇeÄ;CL r­ä¨×õeòçÐTí=0^Û¤#hÛ•xñ¼¸ 7N¯}‘A›ÏÔÖT ~Q!+ÜV‡¢(>DzݜްËr¶ÂG%YH7Eóbø|H1*˜ÒÍðOO Ã!ÙW¾HùÍï.¦˜ý Nï\±"z…¹µ(_ͩˆÁ%ÿìý†_øêov¯8}ã&ÎÕT÷îóͧf¼³k‘,ef{ôJü4%4ÐY¦˜7ø~À½·IöÚ%’ÕDI©»:D×JÿËõ³¬Ö ›Š%@­H#h)] ŠJi(‡ÈÑO!ËÔTÔ& æ\Öß㻿šñ_ù ëiÊ—wNHË„íOFÔÛkªÝ÷mï‘sй\ –¡–äz ÝP±Sƒ¢ØÑ1.ZT~xûÀ‘ºl‹,X¢iåû-‘&+°±bøhLC84déÅ ÇÌ"‚(.­áùŸ$,¶gøÓ”õhNïó5;÷n Ñ1æäûûŸàÆ„í!éé’äÙë•­ù}D-Ëñm0–ˆ°èÝ!ñ“åø$âsƒßêÑ„5Éãçt‡#õ]+!(h¡m &!F!qèkûʽç"ß¾¸àíc,Bí,~ܧ{ò&eÿÔ“µîÿû¬7W¼ûï|“ù´Öoý¯C±O…qw›³ϸï!i†+ 2±' Q« ÒÙÓíæôkOýÔó|}¢ƒÉ@6܆ΟœHŒ1‚†ˆ4ñZ•l´~dÕ*ÃÔÍJ%‘á TĈGÜ#ÝL%A Ö5H”<™-pß~ˆ-7'|ò‹;j¼Š ˜HÑÛÐ` ´8Ÿ†¶Œr=Žc¢¶-­ó¥-†R¤–ufè׃s¯;ïì°s³¯ïýÁRº‹µ6õ’hô‚rž‰6ùf[Pf‰u)!FÖ¾ffÖÒðqú=4CíÐ0¸ªåæGtÞ¾‰u‹:£WT˜ X Ôlé*éRÆ’QW«ÄA¢q»•V¬› q³GzQ`ç%~@jUš ¾—Sç†^2ÒNäââõ'¯äc¦å1G³÷IM®¯oü§ßŠÕ™Æ²”*OTHZzLT]åF¼u¶Eв¢+=½1©Ô*û¯17%úè=6)em?{¶®óVŠ5 â,Þ&¸°iB³8“côàÉÖ bÞWí¢œ‹­—ŒoÜ$ŸÏTó®tßùK̯žªjɼ¡~~AÈs•ÄJ¬]ÿÚ?ùk?Ïø—žñ¯ý6³r‘:t¸ÍÁ¢dïWŸâêšÕ×·éðꨗ¿ôUú»·dËõ¥޽gþþ35ß?‘Ñ—:¤{Ï´ˆ3šá+Ðûþãߢ÷½®ïï3ÿK?ÃÕ¿ý·¤NÄ¥„Z™' µÆt¶žÕ&zIʈd;ZSqƒCäYG«Ë²\ÑI2çÉ]FVqe©iQˆQ~ =ý!×­mc mµ÷e2q]ˆ× ÿ þCQ±!b‚¾ ŒZŠtƒÓÁ)ú¥£JÀ”m4äÚ¶D 1òòykPcÛºAh¤ûä{˜jMvt·(ñ=ËòÕ7µ8xƒõÁ]‰¹TCžÐŒz"í“Å‹6®ªˆ*Xª¶1mšÁ5"QË‚P¬¯/IU;¹¨±ÈÅÙ¹<5‚]•˜'ÇH]+bÄ<}NR4$«šºnÖ 1bÊ ‰/<ʵR0ÁPõ®ýHPlj=Òt[µ8㡳Z‘¯*Êјh,MrÉä|Åàʳºó*Œ¶ý:Ó·^a2ØB‹@¬J‚ÄÖö‡ªõM>\ß-QTü°£¡c$;X ps5ý5!ä"jQ"A½[¸N—ð¸&KìÏ´±+ìÒc+…TT4Hþpìu‰™#,gdeŸÔo`† ay?_*ã¦Æ¹NB÷#Ë×úØ9©®¼^4ˆw¦-¢%€1¨E‰QÅ”ªâ¯²"É*jŒQ|hF4í¤RVj Ivú‰^i–Í ‡þ2 áÇMˆz ,¤@bŒV>P§NÆÛ#-–¥èua…·o«[Ω§§â]CKÎB‚¶Ý1›&dßýžšÔ‘á-]üúoI"hv0&>¹‘†&Šnô£Ü>DCoÌüÙœ_ù‡Kþß®ùÛã1ë`yï­;D½¼wŸÿñ3ùÒ.ë«9ê35ô×Õõe.ö=Kòî ‚CïUÞ9p¤kKºj¨»5ÐäJt@•JPs}Ë­Š ¢½àQ‰°šHõèk˜Å>’TȺs}ztOþ‡ÿl—«'†Ã ûïÜ—¯ýÌJ«*“Å•m•ô…ßo¦îeÕBZŽ—‹k;¢FMtÒÚ’æZ碢Q¢´E 혗òíQ*B4Ę“Þ\!dDM‰Xì'Û¸‡{=º¹uA3htôl“ÍÇ;R7P×ÐEU‡Ô Kâ;šdHpƒö¹ËT1Vâæ#=û±ԕeòhÀþ:áÀþê×è6ÿ7ÏøîQàŸ}ºäã5ÎþâÇ?ƮꈳùØä?mLþ'ÉþÐgùsÙ9{tÂÙ£“ϲ¬ÔñüÞSBˆ1Òõ8xýk Þ{¬³Ü|ûIž¶0 æçsfgS¬58±,Ïæ<¿÷¶678Øßm­*Q#£áÍ ñˆN•ú£Cµ•Ö3BÔðY²a ÁÄëJ®‚F 3’z Id±ÙcùêûìûÞ§„aN³7$9_“œ”hâVI«9óÉ!Ëáy± DO ¶ÓC3CH…â°ƒ&¤§îäÆ Ø¸™#Fðù. ¶É.H#t2å­ÛÊ?þžò;çÏø›ëzË}êÑ ©D & .¨·"³ïý[L_?á/ÿ‡Xž÷ùà0çÙ™¡>ȯC‚—n“¬ßÅiÂâäœéª"öFÐé0>|ÅSÏ‚5ãý» 7vð¾c(OO¨NO@[ÿ‡³´;úˆÉ‘(èlŽ^^`Õщ]t¼‚NvmÁ"~D<9Fš{Ÿæ´B­SòJH"±×AÅ“¯deÛ9©ë‚ª\"½2Ù -J& $p-…À(¬­p1tHŒìÍúuD¦kŸëÓ–kGÏ&¬ÕSYË~Ñ5†´sk“hDMÊ,”œÖAL­am+„ÈjcMÔŠÝON0ƒ­B–’\œpµÙe¶Ñ%d)ÁGdY²Üè" Étųý'7ÇìÍ^­ÉWk:ëÀQ(ŒæXC}G 1*±Ÿb«€©<¾cÑÜ!΃âó”H`ƒïn~‘o®ç,Â1sWQ/?¥‰£|—yuÄÑòûŒ²zMƬ|N9l.©W¬ÊËDÜGaãM'ïϯ¸:­Y®)Ë9ÞÃluFU, ¾„ L& cxzêˆVáˆ#94ŽŽ$䣫tMýèÂ|FîÞ$ÉûtÇÖ’0]LAR:Å’J>Ü% ~é<;b] 1Ë!ˈó5Õ{³øÅŸdô _Å9ÃìÁ1WU… 2vê1[ÿË3ºwΘýÂ]ºgæáöû-ª7ï²üêWHÇ›ìš ~Ãå²âò[—töïDÌÆ°ÌÞ`u÷o2þ­W˜üÆoÐûß!==bù?Íük_§±#Q#j"OŒÅŠÁ¢¸ªÆ$#b·‹yeD¨¦4ósŠAŸ<©±ú1ÃË=òeoüôæú¥ÐrŠþ,–Öžý+r#à> í"N3Â…”"­h\C㯋à´ª=ÑÈËO0Ò/ºjMIvöˆüä!ùѳ¶#´ÑeöÎçY¼þ6«ÛŸ£ L>umPSÖ×±¦¾„’šuuÓŽ6õ5Hμ˜LB« ­‹ëš¹ õ¦ñ_ç=GÏ…4Aó õmV‚…¬ñZ¿„Fþ`8ÑBÓZ–”ñ-NÛz®®é.æDg©{[4É ÛTŒ.Wmaj÷öâÓ®¡c&d丿ЯWˆ1ørJ°# "†´×'ïõñ«ÅÑS¤ßÅ„€ÅçC4™bû± h-¨DŒMðEEqv†Hˆ#öÓ Ö½Ç\eSò)غÝ‘¨äç„ÄPg–P\áoT¤{4ÏÏÐÓ5y¼A%'ÔÙª†Öà–î,e¶S¥5±ÒŽ1‹o Ê#¦ˆ˜ºå¢H‰¡%Ã+¸IFQVeÀX!¦žJ’:¤“ÐtÚNbL_6î0Ö`¬mïƒ ^Á©!ůŸ–c,ÆÕrMÞIqÓÝêå%MS‘%é˸¡jfYc×i"õûŸþÜ—èÜÜ£:¿BÓ ÓË0W%¿ûg¤}ÇÆ¦cxhùòÏŽyô¨âƒO=ï½_ò‹¯<`z%Ü{õUâ½û]T¼÷É’×otI ¥ÍÉ×1Âbåè¿?d¸×žñp<@F%’0BgÕ}’R©;J“· I›+˜ˆK¨ø«ôê®ØÂôÖ,›šG>ýøŠ{¿¿ÁâɈ®…·¾2å ?» ¨#¶¢t+/ž EÕüa+d_.2Œ·×cŠ×5*ùl™¢©¾X¸ogHÕ´~¼î+ J˜máŸíÑÕÉ<Áe˜å sPl]QTS¼d˜ž¶•Ä´×cN WóŠ¿YÁTxó5CýÆ’#«˜5d%áQ¿ó73ÐðýŸ y’ðýÊS~çãÅŸ›XÝ÷_ÃÈŸväO£(õÇÍÀ]w1¯Ç7ŒHôQVÓÅb-å²`q>çøÁ‘<ÿôÇŸqþø”bUÈü|&¦F²èÈ]ÂÆdÂp0`#ï³ÑÉÞö67op°¿ËÆÆ„Á`ÀpÐg4âKQøà¥ žÆ×Ծ‡œ!Ïž=ãìüBfÓ™\\^ɪªéL†äI©ÛäƒáÝ¡ÎJ4âs~*Ü?E%â_ÙFSKzZFO>a÷£G¬z¦Ûo`b¬‰>b:}èghRmeû¹hô¨(ÁPÈ/uÎÞÄËÛb«.¶Zƒk¤îOÅ׉¤\­”[Ù·7„åæ„:¿…«!]ÁzôÛ"Ý·¨þ¯¹œýæ?açëØ±á“÷Ǭ ¦ð[I»ëà™+ËlLßå²®*ª¢ÀôGwqI‡nw(³«./ޤ¿s@wkévpÃ!éö6Ùþdûû\¿ä³×žäôoÝ•îþñ˜îήtööIö¶I†]’N&6zL¬qD캔x>%Ö¬öl¬êaΣŸÜ”H Év ›=zË+yý£ZBô”õRŠÕ ét0»û˜º–áÑ…˜¦"¦Ú.È7þšmèžq­¤ fUc;™\C¹Vé†FJ ã°ÅÇo‡‚Ý!J!j+œMIUpÞÓ#öÂÛ²å÷…ˆ¾¤ñ+­IV+²Ë)Ùt..–“^K·‚ˆ84qÔ–ƒœ‹›[œÞQôSš¬#—‰,û»0Œ!ìæG©T1ŠÏlÕ EZé¥à£øNF“[v“Ïu>/Z¹<ý@–¦†$aQ<§jæ¼µý‹Qy8ýçtmŸOeV)b#äMce>T2ÉwؾÁ¯ÐÍ6p½Û2=û˜÷³÷f¿¶e×yßoÌ9W·ÛÓŸ{Î=·­–U,¶b#"–hɲ:™Dà¼ù5ä/ò?ÁOF †#FÉŽI‘Õ”H‘b'YÅêoßœ~ŸÝ­~Α‡µï­¢HŠR$Ž LÜçÞÓìµæšcŒïû}§ø¦BTäxr—àáÒð%b'²¿Ÿ1è ÔsîÍÏ8kfXZ.·–2g‘­3ïàã@ëKš¤'Ç2H-ÆE/EÓH϶M!Á:â^9|ëE«š¨®D¬Áç!¨¸+—Øzé€þÆòá)ó|‰"êþˆçdu3±°¨Å><¦nrf[}’ñ&ÃdGéZKq”w âFçÈpÂrkGN¯<'bý5’·pùÒasWê±×F%ˆj\·65ø²±¨ñøé}BÕ¢6†Áˆ6)p…JV$ˆvN£üÈZÕÒ¦Už4XTW‡sÀ#mdðΊw†Öuò³¢ét÷ÆKŒH×xY­N¦$òÁdhиšÆ,»b5T`"Q; ÒÁ»>M£Ö‰ACMúø]·¾MïÞ›â–sæûù³Ï1ùôßbú‰ÏQ]:"U/”r1A'a±– Âb*a1#Ì/Ó‰øÅ_,Å’P¢UÙ­2GËñ-ÆEë:cº³Eˆë–51ÎD¤šÐ/A?­*’ýkÐPQãc(–´;CšÈˆžKÇjÕU0ž%.UZŒ"l£""4ý„6³—ã³sÚÞÅÚª$g49b㸢>¸ß½F}ò³È0ÞDú=dYBÀ7 iê6€jló IDAT‹T54 É`DmCÂbÎÅ£[4—6ÅÍ+Òó SÄ —B°h“¡Æv^ˆüàdŸyÉ-ç¼}Ktí@ óÇ3>€‹‰¡ªÙ("ÚÎÚv€ÂÁž'Yѳ j ²PFu†'Û€kÀxT\ðx‹øjDsrCÊ㤽¸*Öô^Î,oøÊÌä«¿³äío¥Ò,2ö¯ç|ö?>ás_:•õýšàEDW!ÀútÉj= ¤]ex<Ï}êKêÊÀNžØ…¨\-bZÓɳ¬`ÂþÄb¼ã;ߎ¦L‹Ú@~Ÿæd—a¿ÆX‡—5†`¨D¢âPqâÄ ô]KbTÞ;‹0NmG$ƒXþå7ù¯þ‡·åˆ—ðío!Å™áÅ-!kâ­’rcFÓT\‘/ÝÜäùçÆ|d+áü£cù+Æ5ë/Cný·å‘¿¨ùëÉÿ_I÷â ÈBõG[Mi’`­%4'–çnÜàÒö6™DD­e-êÑ—S(²l±…¢µb1dýŒ$Š€@ÙT´êñZõ„à êg%î÷(ªšwÞ|‡³“ ª0è(–] ´5#–ØE Ó>Î+;Âî:ʰ³»l3ÇLîáçâÓc í'ØEO,ñrÊ¥ï¼Fk-³Í ÅSÇ`úCüÕMŠYÔRlG´+®R°u1½`ùÙO׌Æs-ÛÕÝ-R»ŠõµšÅ<âk·KT¿¼{³á:¾ß#™Ï‰Šš|ôÎ}žññ¦Ì~ûuÎß¹àæ¯zÖ¯TÜzm0q›VÚq-˜9hȦ%€‰,‹¢ß°3HÈŒ§;6†cNÎqrú€q³‘Øî ’õ‰Ò„(éVœ&¥ Qšà’ÕŠ#lšb×Öpëô7Ä}âí1ñöFCØml qJóömBhémŒØ˜”TËÝÏo¢p:F!)çìÝ*)µ nJªº@²f¼ARÖô'ç-ÁY¤mÑÆÓCX¯qé(#„:l¥R%1Å´!mK<}Œ$F[TqüqŒÙÑSDZëT´º Ö˜¾îÑó¤X–çÄÉß‹©}ORŒW¢eŽÕdRµb‹¬†[LQ*ÅZŸéözœî',÷7¨Ö3нŒf?ëDE…©ZÔƒÆúq§ÓSh‡Ižžå ½AYMÊˆÈ y´|††ç{/rmü ÉCÎaþ4 avFŠ$"­=Y(#af¶{—ùÈÎÄöðœD„Ð`l‚µíb‚Y_£*fôâ ‰¬ð‘½ÏÛm¬Q6Ö4´ŒtA£†3Ö5žËó9ƒ:çÑp“³Þ6J;yb³º*‰{C²Ì¡ÞQ‡ˆÂ·¬Ùš´i¸( Òñ:no›ÊìÃǤË‘Q|å©ÏfÒA6×X»±C6ìQ<>gQ´6Bm„¿€h<ÂïMæ8up|†9<¡­–×z"i‚0ÂiDqÿœúq%ô"ÜFMÈf”[ Û;,G;DUÉú‹øá-ÂÆ’õñ£^k$È*@~•0O'0!`Ú–(ÛDF;hPÚÙ)iM“Îèr¢.Í~5QøË,}úûîßyk节n±ZO>öÃË[o ­é’½ƒí¦a5aö«©²ƒ%£Œfxëq¾Ã‡hˆ"Ô¼s´iÁݧwïûdßcxû L±d¹wÀùKŸfòògXî]¥Ž3ÚbÓ3ÑÙ L`v¯sš:§nJÚ¦Bë šZ„U·tÕd0Q‚‰“®àˆŒKÀ¹§Å®Ûó­X¢`éyKâ-icHÚnÊŽzäÑ#Ѫ¤xö*ù怚wÿY,[¤™p1Óù:´“BŽºêÓUŠ«µ1ÅV‚„ ã³ Qã)Ö¯S÷g\zpŒ±Žâ¹O@=g–?Äf—É®½„Öa¹D4àë¹ô1Þ³)§DY¬7Ä£LÃ’ žUDÁ‚sÂB0Y‰IKBB„ZºÕ4"6†ÂµK.Iy0=•¥,vX̪Q+b$Ï‘¼!‹×ÉRÇÎXØiÛÀ¼>E³EÚñ%¡7¦d$Ó†ôt5Áòž¶m©´¢–†Æz ÚÐâ ñÚ¨ßëž#‘ÃÅ1Qì°Æà¢˜(I‰“˜Ø9œu8#ôË8‹¡i)Nç4E‰ÃôZ•¬ˆŒ*kв&ŸåØØ§ mžS\Lb¯<3ô-K#Ôª¦Æ75a²”ìòM]ÑMqóc çÁðð^…`n'²qQæ[ïˆ3|êjKo9áýyJzã ‰ÀâxÆù$pÿ,‹ÀÆVIçoÑ"°4W¬4;¤1œ&´“„P4ñ0 ˆ7ÄmÓyVó>‹éG(Ïž¡9?À—}¢eÁw¿7ç«¿»àßP™Ÿ Wök¾øå#~ö?=c´19Ygs3'q †¨Ò¥!ª Qi%ª„ȃ ˆÓŒ—UŽJ·d%ÄzÒ‹IrK23¸Z°5˜l+¸ª+H0«¢F@íê}ò׬·Ø6ÂyHGSL]À¢Ï*QKó¤ÆOb<©iñ¦uLí _¹›²Õkx4¯ùþÝÿø7Þæ{sŽŽáw_Uþèƒ|뫞?ûFà½ÛÊΞ§ôßû¦ç¿ûµ‚þµ ¿÷ ÛCǯóì' —åßÅsù0û+T‘$‰YTUñ>ÈÚÚH¯_»*ƼjŒÈp0ÀÁû÷âCKÛV"võð0âˆÐ)%4Añ‚ƒ‰Óî“·ÓXDE©¼¤6âúÕë¨jçoHSF7º?#¨o=MU‹6ž aw =š“œø¬Ðjm!ùs×hmÚ"‹Ík¤U$аÆ2?¸I>ÜŧÙüœe?Æo¬££1Ñy]T{)ÕfÜmè­Õ¶;(ŒDkc;i³z]±†À;L“i[Û…l”Ó²äÁ™¡¿ž’ËÒÞÇú1ýÉÇ´Ú»{þW0ýYü³šd|ä¿=Åü× ßü§/ðh‘R™Î^*Ä ‡®G}|¢ëq&Î|‘Sße[Òñ¶"'—‡›:Ëç²Fͺú¡A}CíJ%¥ 'bÓ8‰† M«R’ ÆhwÁvO.v0,8‹±©šK»?¼ÃødÚŽWo‰ÅÌÑ`”º*¤ÌgŠsb¶vØ=<Ó¨j¨œ•'g>}r}êŸÇA”ÝÛezXj¶ÐB¦±Å‰U‹‘º=Ѽ¾Ë(ûìŠ)ô Ã(êa4ç‚÷µVO®Ê ºD]Ò<žÂÖsW¸¨–:š,dóä”ѼæAPÊ4R/ˆ™•øÄ‘jLºt,£‚¡^œQ:kž,nÄ*ª"^U| n=ñùLêÍ1Õæ¸{X«¢Šzmd³ˆ¹´¶G³ ¯¨¹¸/·–ß#vcú!ÂéEõQĵ ¢­1AÕú .ÓƒµgåÚú+ÚO¶Å©#sZ߉AcѽŸù»Òž|‡Ã“×±QŸO]û<Ïo‚ÛGY#"ª´¾ååõŒ·†&Ù"O.” ÆMI´¶‡ŠƒJµ]Ì9¼}GÚ½6·6Ht1ëÉݦd$µ~4.eQÍ8²#{jæ ©¾õ=•E.YO‘šï¼Áã;h~îc\ù™¹:H¹ÿ›_!ŸLÑ8aœFŒ–†¦)Ô¡DÆ‹Ao?ÆŸN(×O4ÿØ”—בQ¦nq‰†’Ù› ùQ`t³ÖáuO·\D×e~µÏnäÙ¾uíòµxåãýÜÏsqã U?S©=6ˆˆ´xÓ¨+j"LhÕy‘þඉ\•frí§HtrùHܲ§Ã³mqM&ðÓôÄúDz%?¤Äzúü'vJ‘´Ûz#ŒYPäI“ÓÈJbAžLEbbÝ&7wi¢„¨)5è‚r´.mãªB{G÷e|ë ²£û/¼ø.ö÷˜Üd±µ§!NDf§¢*´´¾}"•Ò§=Q㈢TÇ¡;Ÿ,­ª‘È&ãTA¼•N&òÄQN,]jzK@‚bëѨõUá©ÄS­Á'BWÄ7$VÔ(’DQ'Å)‚*ÞÚµ B–và  7®U„ä‰üEUM+‚I^ЛÏi³ êÞUœ³~|Nº„êÆd¼Cuû«Ô6fpùÔ¬À«Ú%M³ êm UÌæ¨‹:Óªê¬h?ÃM–êjD‚`æ5k(†ØÑ™Ho‹ÁÐÚ€C_.¯G¤Nµ—]f¼yÂôìPm‘:3]4]xîZ‚;œÑÎïeŽÞ.q:ÐïešlãªmîF):­Õ^œŠllj;I:lXPQa{ ¹N»£ôRâAOŸ‚DÄf±Òx‘Ŭ‘¦—|C3;U)ké;K·Ý‹FÑ@$XڦƙÎÕjP—×¢yMÒ(µÕV "Š ÞÓ”5´­ÆýÙkR¿}û‰ XŠ×€³†,æI¤Þ?+töø\6ÖúšõSrí2KÌ8ѵv$¿w®_ÿê”û§¿ø‹}¾ü.sô°ä·~oÁ•g¶ùâÏåOßâwÞ’>{Å[÷ UÞ»q~®úâóN>ýJ‚DŸTäßp*7v2âç¢ñ‚Ђf5ÒWâÂ4_\&¯ö¤iF‘+Aw6¦¼óVÉoþ‹JÎÎŽ ×®VüÂ/ÌØ¿tc?È÷߸ÁŸ}{QVëÇ/ŸÉxÇkSZ±j·“9F^Å[ô¬/ªg:/]«dE`PñNµÎ¼„žÇU–ôÂBä VU±(æ ¢5+©"´‰jß¹ÈTñ‚õ–^o†nžÒ\Œ0a k Ö. £ß|ìhZ$ pNôû*ù£wæX#*²{wÏøµß¿EQ=½(älýð)¿õÊÿò¯gáô¢f:«Ÿî“¿ùí3ôß3È߆÷o2ÿãÿqÈÕ+—âCçõØÝÙfkkSžH‘§æqUQ”ÆW<±eç ŽQ ˜8ÁÅÉ"O¡m1Æ¡bQµàTÍgKÓsCÓ`6ÖÇ#œœœñöÛï!"b%ø k»[ì={ E`Áê[ÊÍ ¹TWÑh(Qèºi-F,&XÚõKœ}~'éhn=}r»“œøñïDŠË]¸“Í5J»©TÃÀr½uÿW7ñ]‘OUê>zðÑ}áÕ·füáñþ‹Í©¢• 4Â6kÒ˜Îb-ãô¹sôÌû’ü“?cýo{>öK9œ¿ oÞÃò{º"¿˜€ÙÙÁ×±,ï=Fú)!Kxx4%+f¬Odm}‹—F;2ë­q8Ë™Îî>´¶ µBßE²›õ1ˆU¬Œ3`80¾êÞ7ïVÌîmŠhˆÃ´BX‹¥}ùyª»·påè?•T«s¸;‡dÞ³ßKjÁ/Á°J"⺖¤n©Ä±|þeå $e¥špQgÖ+¢„Ð.1¡"i ÐÜB“ë´aµÅXC0Ž~ÜÃÖE‡Hm·Hu“4Ù¥©ï’ž’l¹Ÿ™®[nÖC¶/ ß,ÓqÆ­gw0UƒÏHˆI*aÞ³˜ªÁ–5!ŽÄ„ÐIll÷…«Ð…8în ªDÓ!‰¤^v媪Ä>æ€}2“P õr.çoaݨ'r^’eÛÜ›½†Q!+µ³RÆ×4b«›Ž¹yðó²;zB<ïÕßç¤}Ä~taºA#ˆÄŒû—yáæ—dc¸ÃõñÆŠ¥4-2Ÿ7¬"|4$Ós^Y¾Uõy¸¶Íúâ‚›ÓSÞߨâX<™é‹¤kDaD™Ÿrzë²ô%z㡈–³>çu"¶]ðLyŠ•‚|´%Õ'^ÑP–o¾MïÞ‘ô\KëkòÇ5Çÿæ»ø‡Ç\ùÔ5þ“/pÿÿøò‹µq,Ûša©‚é´f$Ù˜eÞŠû§ï¾xÈ⿹IùÒºèÕû¿qŸèÕ;œìlßY`H?è¿ð}î¯ÿ}Îßzg÷Uɾõ-Òïýéßûçç—¤L­U$Xl ^µNð-¦ÌIÓróçÈoCuú>¥³â‡1n¼µŠ¹Ø‚Ö¢æÇp°>D×c:9ÑSìOx~ˆüøý~Õ;òƈwòcù‘AﺂDu.¨ãœ¨µâô”ìhAz2Á• Ü[Ârk$‡Ï\¡I{L®£Æa4m Ú?,»¶/VVˆôU3KlDb"Yëø;¼ÛdÞÓu6ù'UèÏž~kF,Y°eƒ©š•QÅ‹,M?khÓU¾„±˜¥Êê`Ï~-ôKC]îû@'ì.KQϘ bD ‘ÐÆ†µÇuÜÐŒ*įª'µÒ -ADz³9Q¨‡)m¤Då£ÉŒ9š+!,ލòq¼‹Íˆ†î~’@SÏDl‚ ¢“ â"tÐGEŸôѬ"¤¢¶ÛøB9Äôæ¸tŽkÔ¬¼^긴–°5´”&–Òôø=.¸‡F•ÇíYÚÝH4asÄȨqqv‹b~H¼÷¢,{›‚Ý„ICÛâG±„‹ s÷]qÖQlíãéÓ[$$ƒ&Ž:Ó¸éüª·µžæñTüöˆf$øÇ÷%„@=Êp¶OX.Eó…¢ô1’Ä-F ´u«IJl…F‘Aˈ‘F<­L°â}·Ïг`˜Öc«ú„Üêð‚¥÷E. I‡çY|¹”°»†>s•öÁº½xgÌú¨'Ó7pûçü¯ÇsþÁ—|á—6yð^ΫßmÙýäž|ö‹9Å÷øÚqDº™ühÊrrNT·„óT¾ó=åô<ðÒóÏl ý<§zÝ0'EwÒë1ýý1=ü2P\d„Ùºøb€XE¢VlZ²œ^Èýö’oü±áуˆá0ð+_žÉÕg=³jÌwW¯Æh+ܸrÁg?ùHÆQ¹•z §¨QI–)É,¥x˜Ò>èAð "úL…\YЏÀ‡ìµOÑÊîµâ–üZNtg„Yvþ Þ=×Jd\€B\ZqYÜB§åTðbi0õ—ÑE‰o°*åÒpþб”ˆrs€KVùê[ùßí/:ßþØ=R»üŒãtÑþuò?þÄðþML@ôǰ‡ÿ­N@²4•(ŠhÚ†ñxĵ«ºwiWÒ$Qí(UR· mÛêy¢ÚÒŠ†@(F$ÅÆ 6ŠUU0ÖáÄH±\rq>àд+z‚J™ç¼wûÎS„ïÓ/(hGÊê^²ŸÅÁÎ' 7×ôÆÇ^õAÝÚf=ë¾/ ´øAD3ìÆ­˜uµe-ɤêê‚ÕãNm‡x¥ªº¿²fÕlìêbQïqç9Ò*ååTƒ‘ jzFªõ.µ³˜*ÏèþºH;àªL;çöÓáe×N«¡‘êiK¿ÉFXÙ¦­NÈf/i>}D=ú5¹úÙg9 ŸÒãßß’ô7¾FÞ_çkÇjæ…pj†!es¹F¾íh¶×Õžœ‹Y䈳¸Áe ·ÝÓ´U iªy[É´*1*ØðtLª^T¢ÈêE”< §~ZdbŒ""íÓNì>í˜bVYÁZõ'éƒõðþË1÷_飨Z±R=xÀ–ÜĉjŽUí{‘¥3ê:)†à´­ ]!O°Fvu׋´ˆ.’˜¾_HÌ>Á,µ 3éI¬usBYß“$Ni½'6]s¶RÁ·^wSË‚‡Òè5²èš^CqòˆÁÙÛ—zæ‚ܹÔçx-áÚñR·&%›ßº+·û®(²ÀraL„xO4YP÷½úh†N[¹û±K*q§c:óêx(ÑÅ‚hºÔ¶ŸJˆ#Üt¡ƒ¹—Í›%_ilb™Õ'ú`þ–xmqbô½ò]|1ÀbÑÕôª3 ¨Hðº·ÿÙÙz™$YÓÊçrÜ<ÐGÍ9òH$åfôr÷“l‚z­d}tƒ­çÕ6^ŠJi@ iƒ.µ¬¯ 1éÚ9W³‚?8}ƒª½NIz( B]©àÀ’ÞšÌÏ'Ü}ýûŒ7¶tçê5o¥¤ËHOçCiÚ†³d§ð:‰7dþÜ M.‰~ó mß|W"ß0pPŸqòø˜öèŒk¿ð1~ñg8þÓ7˜žNXÒ2vV‡z!§ÊšB&FÏã˜úí¥˜ÿþ’ŸÛÐòïma>Óˆ¼r‰Ko-·n©~§!ý½ÀÅù‚Ô—û¸ëy{Àû‹Oëö»²÷ƒ‡ ÷·ÈÞ}G/~þo3yå%©cÞ© *¨'X£ØH´^¢ l!×ÿK{ñP‹E+É Véç‚<&\¬£>"¸Ë‚UyŠEî(@N:Ã/O& ¨¬{O ò8ʱHüðþ¯¢êÍ??DÕ@ÓVhåÁ80ñ»ˆ¿Ë²4«kÇweëµ÷ñ­·Ærñò L/h1\Ú†~Ó°å#2qºÊ‹CQ†8µ]Q¥]„é†1A5tø^ɺÜnúÞë¸ör[jó¤ê! ¢Ë7Í»<»8B@Û8ŸF` #1ô½Gk¦Æ(ø¢ÔIPѼ$L—„"çIÎîE¥Z˹H·7¯øÈmÔlw µu7]µZ÷# êêF|S·imÎx2%[@}°_ßÅ¿ùûÔ®G|ó%$Ëðù’ÐzB»¤m– /wáJE!2ZëHb!°™‹;/p•ªQZ¯ÚĪ¡u„b(npŽéOðÕIˆ›”MK’*×Ó¼ô,OZ‰ÓmÅD–Ðx­/r‰·‡:~qŸÙ[åÑ{ç|íë-_þÕ ®½˜ñæŸN¸óÅ Í>·ÅÇ{•ìœ3ÓŠ·úW8º•±||Ìä´Öºrrö½–»Z¾ø³©>·±—-%«+ªã˜ÅtÀüž#Ú]Cz)í2F¢V“QEðAd÷¡~ýÿ òÚÿôð~Lêb^x¹–/þÒ9Ç“5ýÓ7¶äáƒû£RvrùäKG¼ô™ û‰èôdCfG‘–Ÿi$ x´NeœÒÚ>zcÅ`Õ°™ŠÆc%ˆ(¢\U‚¬ðŽ}„œÂyI{cjQ±*ŠàÄ«•Ðo WAk0—–j{¥h &RâA‹ ,ÅÐö î0Åœ&˜¼èà*ºk”/_ƒr­/gW2ˆ„ª÷½ðû?ñ¼,…iÁO;/ÿ¤3ôOú˜ÿŸ‚õ×}}âã/sùòEQE–$I¨›š¼Ê !V‰z*#©çè脼,è÷û\¾~8Ë:ŠUP‚*OJD„Éô„»ïÝez6£©ê•yÒP× ? ïÒÛ3ÜãOÚO¹ú‘gèkH=ÔY¼_ÔD§¢J(®œã׆(BïÑ|‘ïïcªŽÜѦÛ´¸Ó 죋.¬+‹@KhJ¤Ip!†4FThz†z3" MMߣ v ƒï41ŸQÇP¨rÚ|ØzJñü©°>!øYˆ¥¢×Kðó‚ÐÂtm£“z¨bâï•:T E9§ñ Ûý æQL¼È/+p®û7M‹†.Ge`eð?r×i€45Œ‡–¼hË4 Ô²ÕGµ"´ÍÛdÉß¡ÕuA$v僩Bƒ3Ç8paŸ4Ú¡lŽpwî°—>Ïpm“c¦Lû5¯_slÍjž»{N9ÚÈàªUE;P|a| šœ§Ò„8Ï‘¼Ë}ÑØáA½§öpeMr:¥Mbd¾dÍíb¥#NYq,Ë3Þžþ 5 ÛÙeFô¸_Ýç“?Á©'ö‚õJmm+.eW¹rù ´&p¿|—GÍ&í1j ûî:ûÑ56ØÁ·-Î& ¼8D‚Ù-ʶa»Î4(BS+‹iC®Kz¾"¶–žc^äÔ" D8†ƒë„òœ¶Î‰4CkOÚߤ*.8½{©=[Ïß ¦lˆãbf™·Â~Y±ÕÒ«œ÷¶©>û ¼5”o¿KÜx2ñ˜,eñþ!÷TÙxaŸý_þãÛxøêw9­*QÌP…ÌC¤J/;^)"Ëä°Bþ÷C’ß9eùŸP<7Æ~fˆ|É‚3¸_¿Åð2ûùêÎÈžñýœµWÏ:òQˆ^{êÝÙc¹¹FYZ×%f‹W‚U*_aBMR$öÚÏQï²|÷©ôS²¬FÌ‚þ»%Éd‰O\×}m¢Û`:ÀF£²ZPãŸæº!‚&ñ¹N×Ï íf˜QkÌÿD_wŸù–xvÎúÃû¤8½1d¹»\Ú$ýô~9Š IDAT§ ͵çwn1ïô_®GdÜŠÜõA"x"(Á:°öƒ¬ @ŰÛa@'9.‰Å¯äŸ²†Ì–K–ó‚lØ'Hâ.SH­AçKdYá:êg÷ÍslëiªŠé*;(´ßÔø'û‡ÂQ¢Oš0«]ÙÃb8­; Œ‚3ôs²¼ _¦ê%¸úátŽ:(÷žÅ¼ÿM–å³õqœ¥ŒÇW0ÍóÔïQ¢u‰•<¤–$z·ÌÐ^AULi‹ãÎð6cž¥4΋¡*ø³#;$v}´n°ÃÈé¢ì¬ 4}žrÞ‹@›/~äÙbÄZì …Ø 6 ó Û!9.©v"êDÆql):\fw ZK”e¸¼~úóU…Ô ëi`™)‡ÚPÜ}Hµ> 6Ý™ ¾˜3ßÞÂ]ßAÞ|@x÷1eÙhÀèÅÌ;¸ózÁWv.øÂ—7Èžßþg-—Ÿí³wIØ×’«;JøhÆrºÇ׿='ŸïÖ,Îþà«ðÎ%Ë/¾ÏÎn·Ç÷‡1’f4 Mˆu†[V€ç֛½yËWþ¥CÚ>×n:.ïÀañêkœœf¬ïT|é?ÀGz-r z7j‚r§Š‘, [&7˜ªëU¨ ”±bö•æÂ¡§`‡ó¨£¿0ûŠ WÅqTõèõ Áaïd0]ˆâjJèÅt æ<…EÖ<Š yfŽË3–'7}:åóÏ ®4¼ñ=áâðUŠ_õ`T?Λ}ô~‹HKŽO3öÇÛ$‘ý±‡#†¼.y|qΨ¯ÿÏ ­÷4Mƒ÷-MS3ÏV ÊÑÑ)“ó)Öv˜8#ï•£ãc4(›Û›ì\¹J9£ª<¾ÿˆ¢XrãåkD©%„ÀÚÞˆ¤÷ §Ïh›N£ o?¦ÌK¬[ Ä ûÛìÞ8 ­[6.o3ÜuH^$rˆ€w–e?ÁÌKܤ =¯yNãÀ† ’µã¾ûýÛw9ÿøÇ¨zBÔÔ@@ê¿X²À©"êºIH;é”m„1J Õ†ay=¡Þ4ë¸íR€â©§º¦±¿BMüˆYáÉM¢?<{«=ñY Ù“ºÉè”ÓÒñú;‹o½ïxð`Ädö„A¤,œÐö}Düðˆþà»fÀHgL™ôß{~gš¨xé¶nÙ€ !‹y"` ¦ ]aç4mw¨Th³‰-n^`òZ6/=O/Û ñ%™ó0Çó÷‰ã5ž’uŸSú9Î8¢¦“D¶ˆ%a´~Gí]Ö·˜ø‚z.¥×Y—M¢yË^|V(›±ÉoºÁ 9CвÓß.f-V[ΫSÂü/éYÕIïÖ„K7PÓ!FU•£Ú>%xB6 xöãÔý¶i‰¼²ÌÏi}Óµü%_A•ÈX6’q”ÒÜzƒäþ{ /Ø4C¶·¸»yÒ_¾ÄÖæËdQŠø¦»ûÄÔ®¼ojBˆ*¸.ŒM¥+4duà Öê²BÚ¦+Vgï–θD± B]–,Ê‚¼(é% ›»;˜4ÁO¦È|Ù%¥\ÌЪî ûÕ>Q˜>XÚ§ûB“²£†€:傯pŠ,¤…Ã6J‘U8×0ÔÃŒgx>`1Êð¦f4¹ ›ª½+ Š?|‡zë*éþMl¯G3™tÙÕ)¡*ˆúÓw:C’./ˆ’ö‡ˆò;÷ XµhãѾCên£6Ðc|†³%ÖTÄvÈÆfÀEBõ™Oç3B^álF›õðI­ ¶êdfê¾hØ­–ljÅlÚpÿ¶òúCÇ›w<“Y¸g¹t#%Ùȸ] }°3Ã/|fΕWJF×<çG=ÞúÁ&ƒ Ÿzñ—êCx,ЮÌ䀈ÅÅ‹ÒN=íîÕ°’H©{Ì ƒÝ n_“ `œÃíª<¢8ê¤Ó"!‘´1kÐtwƒ¬x†¼1å~ lbù\J€=wèºá»ïÔO¶cã0½­L9F¤I´Æß}å“<©3Ÿ\/f%ËN\Äýóc§ç¥#Ë¿ÈO‹lÿq«¿Ìì¯(ÈŸû\?4Zzýõ·xëí÷t…Ô©[ÈóÕŸø–ªwÞx›Ã‡TŒ‘Ål®.vdã„´Ÿ|À¡¿7Öƒ+7ž>±Õ­\’¦i‘.„ IS“ôRÍFýG郶Á‰hGüð½Dq¶+N/ˆîO1Ó%Þ­S[Έ뙖Wn0zëM†ïޣܰ¸~ñ pKO2;Ñ:D‹ž“hpÕŒÏÄÍ2Šh“ò#=ªk1Åe«>CSff”Òc=Ë`ßJQãݽµ²Âm®Ž*Ow¤úº^ªA+õÂqÿHø­ïÞæ»NóåeL¸¼yÁó7Îôòµ yõÍÏûz\/pªDz>T›Cr&Ø\Ú¼Uëœ4#£® ˆ E²êó)¥—v¸NU"3 jY>×¾Š:ªÎŸ—UþPÞ­|ÈÙc¯¢ÖÅDa ©Tp]1k !Íâ!L›œ¢)õzÓMÞ5¢ÞŠxUŠNK¬&„'ú] +n¤„LFÆD–ÙÂsvÚTi?²üP’ô2¨fÍ]\ôY`]Úö\#鋨NŸ>)sݳÂZ4%,Ù¤ª¤=?EfÛD"2ú!£ž½Ç½5«Md‰[emS‡ŠeqŠYÔ¢>RÍÒUñáµ;€Y}rU˜6 Þ#Öú ¾òj‹JT=ÆÆXiëki|βžªŠe-ÙÔýä@/nSãqÒ‹AÐyæ¤H-Qä¸gï3/çäíLǬñâè lºKܹý‡ôû×qI¦•_Ò”K™å‡¬¥ “Bh m«+³üC΃¶ÙІ¼ööCN¶†zu}Ì·.…ÌÔÈÛÓS–CC ®a$ŒS|‹Ø5¥Zž²¼˜i1 *º}ýº¸È«ÈË>ïT ž ‡†¨¿£áò.Ç÷ïR75*)qÛ…¿˜1ùÚròÞ}ö~ö½ò¥Kå»,«qŽ&V™$†(¶ºUx镞¾ KQJÿƒ©Ú[ zÿ:!ÿûä/5Ç’¥Š´^›1<ú‡/i{ó“Ô‡3±ÓI´F¼˜:‹KR†!ÐÄUÚÉQUÁ•`P¬ë=®,ÉÖžÓÐ4'w¨ó L¢³ë[">èÎkg¨Ž ³sÒïK³á€¾ü°§C#hOQ¬FUš¶Òί#é燢Œ¦6c ÓF°|ñeu7?.õÍÿ›½7ùµ4IÏû~oD|ÓùÎxï¹÷æ\YcWuU·È&[ÝdÓ $Â$LC¼1à…— Ø€7üx᥷†{á…ÓÄÁ%RT«vWw×U™U9ß¼Ó™Ïù†ˆx½ønfU5›d·å… 1—'ï9ß⋈7Þçù=úO8m?a¡§ ë½ô:Ñ8"»$×ÖÈs›¸>÷Ç;—ªH­P#ˆ1jš‰‘h6IJ° `›öÒ@ÿ™×^m;_¡VuÍj¹ nŠ^I9Ù£­ÚNbz1Cš–Ö Î iÂgfäQºei½ºØPJÀªhgâûöÞc’õVõÐ’êš0ß>ç,£M'éΰ+Ö*Aq•â3G]:lðd»š&Kð.âÚö—pH}ãKêNî°J²wS\„okBS‘¨ÒÔKÅ„"CsLÈh¤>zlž‘f¹ÐÌæŠX¤‰hb;úK¼tLj4Qßpn‹$sÉúC- ­IeKÊâ|F³Úa1ê’11¯©ÂBŽºéº ¨ 7O¤¶½§ZÄ ®Ðlޱ‹”üÊ—UL*ív§± ø¦Õ¼¿GïM¶çΗê¸K¸™Èn²Çhîq!¶­jˆ¸~þÅMTl™‘ c¾ ã5y¢&K.±4—{Šª¥=]‰î¢Öº¦Ž[Bhqjãð}ƒ8ƒWÕùf˵^Aš§º=]HhÒ´$¶Q[߈QÁ‰ÓÔ9šp#“}aºï¨GJ«Ä³Á9¢ÅrM;=@oL`·¥}4§Í‹ÕVGnüí·yöþùþð‰~ëM'ßúfÁ,ùÓ?<ѯüÆu £¤ ôG¯|µDPš tâòν]+°áþñ3¾yÅó+G‰üà¾Õï~l˜-\îtx%§œæº‹m”/õ+ÞÜo™kÆžÀÃõηû²Ú:žžæÜoô~&ƃÎEÙês‚€ &bl·NÆ+½Î èƒ!vùÉp‚ê³îÞŽQºŸLŠn6rŠbÅ{ÓH/»µ8õiÓ¥+‰2üI®m9”ï=Y±«û9Ú@R¨|í´5 o¾äØÕŠ5]ôÏOîµüðãVBŒüÉ{',¶-yjUU)R§YbD­jOë•ÔYNW‹ç;UùKÏN–¹\ÿŠ=7Éßþ,Ãú/bŸøéš@~Žké_T€ü\†‘_à‚ÿªyÙµÐ]UAõÃË_DáúsÅÕb¶`q1WýlR‘Ðzýàûw:½qŒ˜ÄñÖüu™¾3ÀïÚÏMmIúÜH©ÚÌ‹c”U½îW±âBÇšîV*/ê â7j6§ìŽâDDÅ­¶ÔÉUÑ‘PdÔÓW©‡×Ôžì2 *ôïm©{Fšý‚ü¡ ¾Æøšd£ÔÓË·†lÞé¡iwˆž[hµ 9o´Aòe¤ÙZ¾ük†7^Rê]*™ÏëURqckh% ÏS^•T º~*ßÙ|JÞZæ__~V•DUÂg/÷‚Yƒ5H‘ˆÚ€”r)ÍÒdÑÒ»·‘ºÞaG©ª*1xY÷‡j}úÛJÆ‹ >±g:#ª¼À˜üù»N…ŽmßøHÛF¼*Mˆ/B§}—½†S¡Uü ßžc’[x.ÖzÄ$dÎÒ$c©ƒ£4[Éœ&ôI“«øæîì?ìáÍ“ô&û¼úèÙä »^ε׾ŠQåbýg2|lälûH+³CED£$FUÓŒïŒÆ´Bg–Käðlù)ÓÉ+R$#ÎVŸòt}O2×ÓÃ/Ëy{ÆOßÁÇŠ\,ÖGT‘:wøQ†O ‹ø”©»ÆÀr«|K¯¦·ùèÓ?`×,yåæ+D r1ÿ£Žýòe¬I‰Ñw ¦1BZÿù”)$´ Ó/ñæ—kNÄÅ@õA:ºIʸÓ„®ù„$“f#ãëÉíT+¨¶gR­OõøÓOD%a|pUúcѬŠ<=…ooD®ûV¿Ê3L3zoÞäáOî°Aðn@â[_“Ô[üÚ™W¿ñ–¦½¢ˆÌsS©£Ê“ÜÒoõ$ãh¯[v™“MT­ïèÿŸâ ‰oNØ|mHïÊ$#më\ÂAŸvoIµÙPÍ7Øùzõš¢¿G1˜úˆAÖIÛ˰ÚÍ]ÑZBX£›§äÃ[b®þšî7ÙÝûcšÕNÌoîK8¸Æ[“«\õ§úÑ{3Ž/Rò¨_ˆÅ gpÕûÑqM‡ãWür2ÑÿëGTˆ6ï¼Íöµ¯P_EHRzjI›’ÔFÖ«»oï0Nr´(¨×Ä?·Ñ]BêUŠîÌÕ(ø¨bD’Ækçobê#¨\º”õsÙÕF:kaSײ[Ì4Šîï“•lÝ g3iB@Er‹·NZÓu8õÒ´ÞuñeÒ“t ÚA,T®”dã[Ìô!«¶“Œ™dG:Ÿâ/ÁÊ­ÔyMèüOQ%‚¨#Z¬6H Tý!!Ó[<–Þ¢¥½q +Qtñ”ÝÑ zƒCÈ~6ï$¢aCQ²r! ›RöÁZa½"úš¸lZH ͧ’q@ˆµ˜a¦iæÄdVmï6QÞ“]xŠTÇìÊ!:vLƒÃõ"šLúÈ ÀÀç¶¾]ÍbÎëÙJ⺠h¼üů+êÕ‚:®DQlL4“í “jh¨'©+ØóD/ËÚÑãB·U+¡n ‰¦"I‚ˆvøö TI®Ù°[®:/¦±lŒ#K¸ss˜ãz·Ð;ϨßÂ*©î?ãê7ÞæÊ/¿ÊSåÇܾšSpÆwÿB^ùå{Gv±£Ê"¦ŸxqÛˆßM“~~ßw)|±Ó!|¶»DŸ'rIÁ"Óq!žßó ~n0ÄNºõ¢ Úµ#’KÏf Us^K{þ€ùñšõ'kŠ¡•vk0¥aÓz9Ñ„ÉØòrf_7§ ¿övÎ2 Ï”¡Ö9æ’³¸ôùÓEI¹ÍPÓ9ÒMŒvƒ•¥×I1œÁ¬köjC¯ŸéÈjNaÙ/£’½ùŠÑ|‰·ö3ôF‡¦}4þâÎJ_ ò<¯†K<éKo” àœX¢zbû ™{ 1#Z¿Ä‹¡ßËhªÖ'ì'„tNíKvÁœ_]!öBØÐŽö]L¬ÝÑ‹}zÂÅnFºkÄÏFˆQír|d§JÕxNcD÷ g˜ž4T‰c]Gäá†âÁš‹Ç×XÿÚmzÓ+ô$¥/06)MoÌ2[R z¬žS/mCÙßô-Iž-l²«]Bs0ÍD"®UŠáËÈËÂöî?¡YUè°@‹Þ~õzÊá«785%p&òpÑçî£ ‰¬I©¶sãÒPSXÛmÕ.Ó†åç<†Rý©?Óˆ\¹E^ô)¼G›êuê(ÿ §!0ß~JðÇ”z„Bá[ÌO³[UŒú/\_/å^ÏÓΉñ9uæóįK+H0­kÚÙ µ{x„³{>'Ÿ¯iÃŽm¯@¥‡Q%hƒk¬$DQªdG^2!âÒT݆òR6lÄucÜB]±<{Ö¥­KÇ 1*×âMõ¢s­V¨!2˜/iSËf|„ [F§Çh/Å—c²;ßæ¤ÌqåuÜô¿Û¼'ÑÈzõWaò}üY®‘W_#¨D0î3×ù({iCÇ11Ðä¬iJÞæÄÍ¡wŸóÍ åøu̸x|Jܶdê0£öp1#cŸZvÄLq5H1³´vA÷(ü»d޳…ÞbË=Vçw ùþ>¦,›?ß`‡9±ÑÊlL–¢6¬“&ípÃ1viåÒe\b‰mËæ|ÆØ"›ñ‘X{ºí&nO—ì̆`"ƒäýÚB(Á‚ ]÷ÛÍ*ì.ÀtHR¤ìÝ8$Mͪ"lR“±ÓA½*ÅØß7d¹°h :_ÁzÃÐvá ‚„H•"Âa ¢=#¶¿Þqü/ÞãèëoríW^çâݼo†ôXÕü¯ÿý1{×3~óí„«cøÇïG>\Ž9=nQwÆÑ«Gœ,Çg£fM;;¥ÞzJ—áëÈ|q¹0œæd£’Ì)_šzÞ¯Ç̳œ3O×V”¾ó'|yoÉ;ã×rÕì6–íÊ\z*@ýÏÚïÊ_0?Æ|ñÿŒQ’ô‹f2—ÄËFV7E„&¤¬cB-± £ú¾q#p>3X£‰àTGÓÀ÷ž.iÃeWÆ®M2²Ô’«å?ýÛ]Íž:Ëßýú÷ž­qÖðåWÆ  N|K’Z&ÃŒ»–üœÈ_K°þu`ý­¿ª=õW=ÿ #ûƒÿé»*ÿóϤ|‘Ü“X½ùëƒÉþˆðìTÇoï‰í9TÍ’Ž¬¢Š ¡!ÝÌðy_cžIºœa¼×¶,©÷¦Ø*“Àö+9ÃïU ß[³¹*l§QO…Øs²»å´úr-RÔ±Û@y·¡ø$²¾ÙÃ6¢ipÒ¦ž BkÔ÷,®I˜­2ùÞ*ì驆^‚˜”B„ôdÆû³-™"†&´*!¡(V;‰OT-†"Mäöµœß~Møæ•¹yEë†òUzΟý_VïÉWäŸÿ/Cdy®^süÚHÚ¦·:s ³W^¦·? 7)YD(izCÅW£šè)í”ýìUQ7_`Ö+1œécÖvKN5“=žÏ\›^¤•¬½²»KO…vÔÌË_®*½ôRá3§ƒÑ>ý³Sé?ìúbâ•ê cùÍ=¾?£Y­™¯/8ˆV¯íàŽ‚ï`N¢òÅñ!@ލ‘­÷Œ>7ÄùéÖ¨’«éø Õ9J?\à‚ë^UïÿLBh±’bM«­õ,«ÛŒÅr”œ!=öY/NqŸâÞ¸MOt-Íxªf5'ÏJT·h¬2Tƒ€ÑAïƒATu¤G\ï½öBcðpû!¿èbDIŒÕèֲܜÓË89ÿ@¢"ùðPuXΪGúÉò‡r¥|…a:äÉâÇÔ©¥eê²T^µoq;{‹T²îPK[ýøá?f³=çÍÛ¿KYLi}j´Ì÷! 1t~óÜCàU]H$g &q¬ã >î1¢1@Q£±§²+˜N 9u,E½¥_S‡ŒÒõ›‚PWz¾ü2Ú£è_Å%l’©ËrÒÞ¾næäìÉ]œ?eïÚ-¦×xõæD/–.6zúCiWµj™ò“™ÇoøûóO¹ñÖ˜í(WQåðKo•dC‘çWøp¾Oñú‹e_O«£Al5¨ÂzÍ IDATU!7tÒÎ/Ò|ÿÜ,l?;~ÖKî©oaWñÅ<‘ˆHBž}•Ç͆åî IuœÞþŒ8ñ´/H/Ίt÷µî…Õ;CHÜ×1Èn§áü\Bšª^9Ĉ0züŒdyÁ…«xœ?ÓJ}n`ÔR¥µî’JzÉ>Ãâ¶féò A4ÖŸ¥mbJ=FŒ¥7¤ .ý3Á imµ?/d=li“VWBjiKÇp6'ÝîXN÷ˆ.§?{L^¡þè Ta£ÍàUŠ«¯ ñõ±Ù`Ì—O”j+,W÷À[œª8Ü9•M«šÚn}©=‚%X 1ä® «"J¿,i)gÛ•ÚÆ³9]ÊæÑ‚ÌXd”oïkŒ‘½Å–i²Ç§z¡Uº“ ®VmAm”õúcÊÍ—´˜ŒYï?c(ço°ñwtß={CíªDM×]'éçÈd¨I–‘Z+¢J¯5à‚´Œ°Ûl‰´š,w”“’þ8Ã÷‡Ï;×} ZÕ´µ×ùã%ÛÍF¼TlÝFcáÞ¾˜ý#ÝÙKbœFØTZXÇÍrDªÂ³8SWZ°–b2Ô¨QY?8'V^]fEbbÔ4ÝÁJÑë°íah ¥û\:€*’XÒ¼$j °‘öh@ÚÜ|«õfM=ßpòý;røõ7µwØ—ê£G]Q«F¿»æÉ]åÞÀ |å• «Å’$ï³>YrepΣS>~R“%FaH½"| ¸ž£7Ì¥0T›:Ô9Ú4Õ££}Ê~ÚðúpÍÍrÇ·ÏÙ´ŽÂxÍÅ‹o¿GP“¼hSêÏ!'€¦µø`_¬¤/Š â^L«z ïP|ÓɾDjñú{«‰¼»íkڑ帞 õõ¬–æŠå¿úFÅ$ šë–QpNËÜroµå¿ýß?`½óĨä©å?ùoè;oìÑ6ƒhHT¨UµBùÒí±~åöX­›H»¼ž$ŸÕú¿}ç˜g绿j?ý׬$X?£µósK°~Æð³‹ËéÏóybäþ}_ï‡e)מ$qøAŸô#HMj¥w~tó”Õí7Ŷ;FLÛÏäüoþ:Ñ îlK&ÚÜ€ÝëŽíã”:«‰¥•Ý«9á £¹žŠ]dúwz÷*V¯õP#8µbD;Ìo'7Wrg¹wlyÿ‰!›ÏeuÛÒD%D’M—ºµËX‡ëì_°½ÌOd†_¾q…¯~ýuâcÒå ÙÌ¥>¹Æwæ[}üÁô%ö®²Kr„BšE˵ƒ ¿õžrå+§ò/ïóOþ욆“5Õ`ÇÖÉ}ŽK3‰N5¥8'jƒ# ®›k'a¼ưw>bZUÝCÓ¨œÍ¡mñýŠ$”dÑã¥dmÆŠ4±QÝy¼vÉw$OCÙÖ’”¥nÚZv› ¼F²¬O–õé{ô^Úg3Šojvë³Ù#v›™ôû Ƈ šFÚÊN…4Ò£!U:fšÌ¸þå”ñ0ãÓþDž5=l¦|rz(«Ñu0ÒKÒ¶ä¡ÕŸ‚$"—ÔªŸjšˆ"ñóxmÅÒ©elo²‹ æõÇR¸C5RŠjûü%DE´%È‹t ¿kÄÁ¨“AÅ êkˆ±óÚ¥îPE`³Ód±MsâáDʪÖýÇ'¤MäÜÕ¼—„ØTŒ$ÌÊ&Qä/É~q•¨žmŒÝfË·˜º&M ÑÆ©vsµø^iúbŸ/½ Rx«ååcr©þé"&¨¸*R3¢5¸ªÕ6MXO&X?grv Y!¾¿GØ<梜H1zd2¦™Ÿã·kªíŒ|tO}øS7è+o-žÁâ©„ë¯2ìMH’œæÁ3<^´Ÿ •×NrlÀD×XB2¾oßšòtùðø™=¼ƒ©^"3 ôSâ­=d8_2Õ ¡8 ÑSÙÕkbf0mÓ(ê j<¾>“ÞÓ[Ä«®®œ0JnP^|IÖ»÷Ù„¤Ø¾¬&š‡/bœb„ªí”dË-›]‹I±í§1Ë0Ê^V‹š¼— ª2¶$´‘ÙÓ9•o$¸†v¾Ìt$foЉиN†Û{¼SbÄ7[ÙŸîѧº<]/ÛGZ¡ÚTRo¶HšÐÆUEÉb‚M¨Qbèj»ˆÝøpGbD¬0Øë!™cölÍùlFHÆÑIË„Ä4wlŸ]Hó䜰Þ`èôƒynP©‚¢bø—wÀP!Ô¤¾÷£ˆ²cØmw¿øÄ€˜Â2¼6!öñ.o­f&0H¢ìe­¾3^J­f׋-kŸrQ÷¨ƒe½ˆ*ñ¨PÊNœ tHŸŸÚ÷]Ê«?7 <-§ÌÀØøBùÙÁÁg*ùÚnžˆBh,;|¬Jÿ×?—Oª”o ½WùpUr íÓ5ãm'å¤À7Š:$Ħ–ÿú?ûeÔYCšŽOwòã»3>¶¢­üóï=“÷îÎôý¾ö2¢ªÔmÐw^óüúM¾ÿÞ™ü—ÿÝ·ùÓ¿‘¬¿î€üÕïÿ/ì€üôëÞ¸²¯Åt ub ëVmk±ë†b~—ÔŸ°¾}6Z>¼'õ(åìo~]ëéU²~‚Ùy²}Ì#óoö8ÿÛ}äÌ ÓLw“ U$y¼ÓâÃ5ÙLð{Ifl©SlEÛ$H ;½ª±Šªqƒ/ZÑLØ]¹ªÅi…i*â0¡˜wd—æ0EÅ€5ˈW¸±ä«c£=o‰÷.äÑdËÞÛ#î~ô„ÙŽûäœïÝ;çlf轤fÄÍzÑèÝ»'¼ûä}ùÊß[s5Oõw¾¶£Ù¤ü³Ÿ¬±Õe1TokñŠFbØ©ïA.9=)NÕ©„D%L'Ï=ªÞ#ƒ»óä1"¤ê3Ø\€ £,“$´™! ¢AöÝ@L–¢y®îÜab+Mõµwwl 8~³dü,¨‰Jœ‚MR}r0AcäèÙ¹Šª4FˆMkƒªv›&oÐÚG íLèF„Pd$¾ynYù°ӟ}ëó–J3‰á¦[J gÄàqÆªŠ¥gìümÖíMzéC9LaW$,.fÈrEr0&h»7Å}òæél &$¨^“¢ïÔ>ø”ºŒ<äêÓŒ˜'ƒgØÛg”_Á¨£í{Rž5µ}¹>zzÅ¡Žó©…-§Í3§SÞ;ÿSf‡2J§|º¾K0 yÆ Ít(ƒn5JÝ.‘jC™íë«·~‹,à/‹QÓÑ´»â£ Š´Ý—“Úž¬ÌWÇ]ýœÂ¤""†.TT$(Ù¯;Éôk»½Þ”éò.'aNjÇ´þª))ÓC’ÚN愲R-GH¯TÛÊ0y]›Íœíü³§Ù­æ:>̪­|xPsenO„/éCýÒ(Ã_ëËKƒS]õÍU=Ñ®®x¶Qy‹Õæ’÷¤uÉ”ùâ-¢ÎG’&±?5ÿ+ˆÑ˜>ßþˆªµÆFABèà"jÖ[’ãsªv¦q¯/×ÎæÚ_n¾á~Y 2{´]]¶'I:À¤}$ ¨D„çÛ/5ˆä)>±ŠæØý=ÌìBý|&áåÛhê@U›Å9ÁÇŽÄu‰4ö.èjXI4Wuù%!qd»Š|·a7œcpqBÚ€dj6g,Å‹äGš\»ITO[mÄŠÅï.P—ã ³µêb)€Uìü˜õdªýéMöÊ}ƒ3Yßù„£Ò‚øK¾Q$MpÞñì}ýJʶšþ-éÎu7?Ä‘h9FK4u¤ë^Õ–èO£ÐPªADàL¡¦­iÉêô\M“R,hÊ ÛÞ)û¼¡¶Êd>û‘îÂ}Fƒ×ÕT ÕÙ†³Þgte¨ƒ£õÀJí,Ë5§³§d×^ÒÒfôê@Ruƒo?3¢WU@Tu»óBP$d’iì—øÌ‰%R{5³-® ’\Ôj[Hê€×H2Í´œ hš–ÍbC¹?ÒF ø€¯jÝ\,…Ôa‹‰¨©TM1Á¨FÈ2HSX·ŸdäÀv^ãJ!‘@‘”D•½ƒ÷Tg;bÏbo琢`$ª„ºU3‰i"ñxΨŠ\DÓ.d×I\‚ˆÛÙ¶/Úú6³šô3ܨ@R,E%i¦òJ¹Õè#·i]kUÊz«q+¬³Œgô©CB{)± ’©"b d&€ˆZ‚ÒJø¼ëJ^$wÇç1/³µbL×?þüVM£’Zá­kF­º°eo”O— > Ã$èï .d’©þ£ ï?LI%¨4­œ7ÿ{Qñg÷œ‡–ªŠrãZ¢¿ù=zG£àŒ°ZÕüË?9æŸ}û©^÷ôR¬QbP>ýt¡§OÖ|륩~ãí#iCÔ¶¼~cÈÒ+ÿãÜýy÷ÓÝù·®ò‹¥A¾xÇs™¼~ƒ´Ÿ“û„ù³…dÛ X©«ž±\AÚ@qüHl³w^gwxCòwï“Ï[\,wª©Án"ÕõS‘¨Ò»SÁ¢Â=ÝJ6S\ãÐ2 >R_Ï:ÜS«´&H[ÄG4ÂÈB‚´…GMǤßûñCÌI*d´We¯ z#A½ g‚­<墕ºŸÒL §{~x¶m í‰gt7pü­!ïþxÉÉl.¾ht½6Èßú-‡?|ð^Ú½Oæ7ù?þ Oø2ùíÿü„ßþƧcäOÞ«¸X¦Ò+{d~_’dªjEd4¸–*5ÔÍVrK{ôBAŒ "V$ÉTÆJ$ŒqoˆAÖÜbQ•¥¯ˆëÙjÉÄ[Qé“(d£“ŒÄ„cÄ‹«"CŸêãqNÍLŒ*›j¥¢Ê¡:9Îréo+ñ€÷ÓySDÌBŒ¢ örct¬ªöÒ¸øÓCH~ö]ûYö»>£iÏ$7ûˆ¼ú†®MƃՈs?Dëß(N¢8ó!Ÿi(¡ëÔ$V~zFïÎ:-Ö¼†sÈfó‰6‰“dï—Àö!6¢"zéÑz£xn^êÝgëÇçä j ÒzÜ|%²Þâš /Éù)£íP¢>ÊZæ{Òƒ+ ãKˆIELÑw˹'¶ó‹h” —Þ„ƒèx ñ«o“Ý»'üè]ªo~ ›'¥ë «ª(DÛý³ÊJšh"¶U‰‰%f–áÉ Ñíx‚ “³5b-Ú+e•×l}NyxKèe„íªûàÑcÀ–cd»E=ŠN}úžvz]®&˜:²¾û 1‰P·„Ì Ú·$.!ÛFðÊ5'M›pìS²ý1ƒÉKÒl/ˆz Ñ~AÜî˜T;qÎò´ ºõ½v(­ä š¦"­GšÎ?`œH\gWuÌ+œÛ»¬öŽå•áWH>©äÑÝïèþrtåe?Ypþéë³­ôž,ñ“”Djí ’uµÝÞ¾Ž*ÏèdKEŠô:Ñ)®H%õ1RöS‰ï›è‰UÀ6ˆׄe…ÑŽŒQ1†Ád(Y–±žmÔ)Y/AµÈ,:îËf±&ø€q—JÀ hiHTƒ©Ðç`³D›v‹¯#±gp(eÛF.ϹòÚ˜Ãëc΢¡ÞÔ˜ÚÖCìxˆ’¥ŽäÕ#6ÆÐÎ×Rì—¸ý>˳9 µwŽÐ$c³˜í¿ÚuÝ#$½TÒž#Í-M¹ÑÛq³<§'-¯N*¹§z~–pç;kyxªºËSihõú¸áÖ4"D¾tÅò¥«–ïÿ… ŒÓ–Øò  mk$^ÊÞ:¹¤¡Ö”&>|¨$±àƒòƒû-Of,ÔWBP¡ ùÉø7RIƒJ–¤TêøñIB…Inå•‘%w*÷gPFU *º $ÊIÉꢖÙICÝ(Y‰sH{B‘YÊ,Óå),N•_¹}(¿ûÍ[dYÂ=¶ºh ¿õU+Ήîõ3‰eЍJúP„?}´a¾ÿª¼ôµú«×½L‹–?üöS>¾¿ü·¦bÿæ¯xÓ¿Hñ ¿@qñ‹|¨ÿ?®/¿À{”¿àQ±E—t*oÿ½_#éeÔë W¤„º3«oªZŽŸpvº ]xtþˆCÿ2®YîÝ¡ÿì¦ ²½uÅ;¿DzZ1x¼¡Ìö0eõvÊâ×RßÌ:¼0dŸTÈé–ä¼!­RÚ£’L©ŽR°–tgñYÀÛ–86Ä©•0M¢ØÖ`›ƒ‡ öß}Ÿõ×eûåCüí‚8É$d·ˆÒû`CÿÞ gœìòU ÿ a± lZ¥%œûš÷î/Y.mTІµ ÁHˆŽÛoþοo¹õKFlS0:;â Gœ¼ßgã~éw\ß_Ë›×Θϕý0bË 8#† Îåìf Y<<¦7’ ‚xünGÛT²q;¢±bÈh"&ØL$±`Ñ<‡Ñ$ŽFÄÉÙŸÂÑ¡¬^šâA65[«âçç½GV¶#Îß©ìohµe»]„H<<’ÍÞ˜þӞ̨K=&vTæÌr1T1"ôÜ%Ò¸±Žý½Œñ—‡ìvQNÎ=±”M#™(VÁIµ ·ò—spŠ"’tk0fFÔFDŒD,ÖnÑØcÛÙÈjD‚¯i7[ÂtIR•à,QRÒÕ=& ÐGM†•–ýv$âiŠ(Éþz îÞ^‚l_ê|EUŸËjñ”ùú)«f&ËÝ­F’dDnû"Dú¶”ž¤ìÚk]‚€‹¹¾d®Ç^y‹ÔR¸ ’õ%°Æ@P!^V—f}ŠzÅDÚ‘Ù23Àb%±c0®¤Ú­I\&u½åÝïü>1Ô\»þ*hèÀiA’ÂüéÒÝŽQÛpZ²uh-Å6KÄŸS¥Qª,C4Ám¸: Õšà"RŽÄ}Êr_œ-YŸÉjvŽˆÒë÷„è9YohP†ýÃáòêƒéP¯çâcƒZ‹½ ¸“H$f©h„¸m0Ñà·VŠñFÆï¼Äðë4͆B¤ieuþ”Åüœüä ¡ªÐùLú.AËh_ïhšKS‰Žè§“P¯f¬fOi«¹Ë$÷‘Ü«Dc¨»SxlŒ8“b×Ð4…Ý’°Y°ì äátB3J˜îÁäZÊtÚc䢚¥"F0»­V•ä›évõ愗Ïp3YÉ+ûs\nѲ'bSÖUŠh÷]@‡‚¶­‡;˜ˆ>7Œ+ÄÐÉl4ó¾X;Ä-žQ7%H‹ÉöQ±úyü„0.‰V‘$:ƒ`Î õx[‘ÔŠ/Bæ^̨{«ÉPFósöÎ*iGcš f©ÁfWÈo¿Et–f1ÇnH6@ò}òÙn‘×^ÃiÀß—õÛL®½.=“³»sŸz½Dò©‚ˆ2+.OIjuÊ­›ŽI/‘ã*e+)Yá¨Î=ÛÅ ’la8 ×+¦9¯á|åaë%­ºîe•œ!6Rh+¢1` ŠGMË ¹.‰+Xñ’–kû/ÑV;æeïÚ×^»-å$#úÈú|C}¼†‹ù¹uí ©¶²Øm ý’¸kˆËJêà©5Èj`Ùô-ÛÜÊÂzÈ }— Û ¦ ”b鉣pNÒ4%-3²i7.ˆ;O’%28!ÎÐÖk-Ûó…ô G9,¤ª<«óÿ/{oòk[væ}¿µvúÛ¿{_ÿ^õÅ"‹¤H5TÔÄFA€À3#ÉÄ@F{dä_2ðÈI ±Å‚-Y²l’"K»bõÍ«×ßwûÓïn­õË`ß*2ŽÄFM:³{³ï¾§Ùû×~_–FÄQ„_·b[ARK,VÄÁ`d˜lek˜Ÿ^.¿ ä©HêÖYÌZŠHèoçÒª²*+‚±IŒÎ*¨ZÌ0Ç*$±EÆ=\Õ ¥c¸3Æn X¯~ý`Ås;Ÿ¥B¯À 0èQldh–ÊÁÈñù¾v<¿±âü´â;(ïLû¼®ñÐoÍ—Ò÷5}#÷5øÕç{}Ï•QkÊNßÓœLÒ–à‡AVU`¶òÌ«ˆ(ÎÅÚbY5µ)CÂ:$”.‚8‘(K8ZEœ,SICÙŠ,êœÒGø(Ò‚Ú#e°|xxûAÅ{Oï)÷N½L%«uɲ2òp*||³:"2ÝpZ,†ÈDDbH¬%KbŠ"Cmʳcˆ˜JñUà~Ýg:¼N½uCž„!ï—=¾3ðqÕ“‡uν2ç{'V¾ñ8ðÆ¡ðíCá[O‘wf ½ý«²qãÿð·7åüÚu~ýõ» ‹Œ?{÷ðçqƒÈ/X4ç¯1¦–Ÿã¼~fðiÂ/ˆÿâI…þ”ŸÚÉÿÿ¥gùsÿ¶‰ wÿÁ—ˆ'9ƒ½ ûŸ»Ãös\ùÂm®|îqž`"Ëð`‡ÊôðLóò„Ï×佂ÙhŸåÞ&ƒó'Ĉõµξôlidë©ÓÜöP§Ìž¦_íÑŽ,ÑIEô`Aô´z‰Ö×2dÙ?uÄÁÆ ¤âzFëÍ”¨Ú‘§Ù ø Aû]…Í,„üÜ’”9!³¸q,Ó/PÞFR+ñ'• ÞiÙùã9ɱ¾š2½“#Öpð£Ó4DÇh,DNWЫ<¶ ¬Û5Þ<Âý‡j„¯üFÄñ» ßýö…¸¼ÕßyûOùÞýÇd}ÃÞUåæõšë“3¦Ÿœ³n„Ù $_Óè)gßçþ7¿Ëz¶æüþ!‹Ç‡¤“ÉS%G£%k³ìC±â‚GlޱI7j"Œ±DQ yEŽÍ ¢Ñ¿¹A9êáFòÓSéÎôÿòeiÌîÇSç³jJU¯düÞµwì=;b˜Â¼ƒ”#Î! ¹1¢ª´Aé#d˜NN„И˜„ÑÝ>åÒqræð§W7$ˆtd§H»ö¤ˆEÉQ&¨f$ñ˜ ÷{ @ Æ–´íDÖ¾[3ŽcÊåZ–ûW0qBS¯PQšé)ÌΈE¬W\E4jqþ)ÏrKYd˜a²˜ô“!OhoŒˆÚ€-ÜzM/ÛBÄÈlõDç\0eA«žÈôHmŽ5«0e© œ…›£/òâöo±Õ»%IT°¨Ž(ý’³ïIº‘\íº—„2é¶ñÇs‰WVb›!ÖP³¦1)q2B5Мß#Jû GßáÃH‘÷¹²‘€±Éh‡¦¬hŸ>`«^S'=>̇”ÙQº…Ó–Ø•4±—yáÕIMk=A•´N0 .H„¨?ÀF)BFØïD IDAT[;¦'G¬çˆÀ`2`4ì±z|Ìì“gØÙŠx±býáCªcë€õã:Jvri¢ÐE¿Æ·ÔÁà1¢Š½T̨t#AU`÷¹»rû¹çõæÕ; ûC# ÇcÊfÍñô”áñ3ªógôæ§Œ$¡ÂwT˜­icKQL˜L®‚@¹¼`zö#–"ÊÈ1Š:kðFï0! ÷‰÷^@ëœ<ÀIÌ›ð~nØË„粈Pâ†Âh€æi÷žæÄm=Î ÞdÞß_189cëé!Wå”Ï%f5f#—A„ÎdŒWÓ½ƨA"sI9wÝ<|d1—¦OQ¢Tãt»<§­Chˆ’-L”vÏùŒ2ÕÕ.e§‘ýñK€žž-J21l´ŽAëXã8MGL6I²AWˆpNT½~ºÎþÙ ííªi‚/r|‘C#Ñ¥yÝì³cì; Y$åsµ?À-piÀGá2!êÎÕ„€75â1At½Õ'«*’Ú³Ú¼Bo½dïñ n¼…ßÚ—s]¥}úý«˜+Wh×KBU"®'A% Ç'ÈÙrë6±ú½Ãj¼Ëà¥/2NG¬ßºÇúñS´‹iZÖl‡3Ï­ØÖŒrí¦e¯q8·4Ã16²ÔÓ’ùÓ%®q˜xŠñ-»ôÙÎæŽ£iîdžx¢„:Y¡ºFl†q"âÛnÈÒê[ÆÃ!Ï]{•e;ãÉüÅ„»×_eº8âÉã÷(ŠÛWíõÉG62Äq„_9šE‹›:X.h h·‡¨1Rî÷¨7s\?ÆYÅ­æH ¢EÍÉýš²Æä1nÕà–5&ˆ†™Ø8Ò(IF9Ñ0ëHU. ‘au2£<¼`ã`‚óãG¨Ù¸¾Iu±",=V¬„¾% ­Òë ý±aZG,ÏZ9ÄBž 6*5øórËbíHE(ÆA/][Luº| fØ£YT”‡DYŠlõë8Þ~âh½ðtê9[*[ƒc«J¬žÍ"°ÙƒQì•—„×ïÆìŒbéç±îo¢""$9Ù¸Ç`oK¢»Ê£ÓÇ2ãœÙ'Âû+þûÿ©Gñ[1‰‡ßþäŸßã°Þa¸_àÇ~ñÒµ!Gòu–‡3²QÎæÓÏó€‚'³•F!H2°ó¥/Pçs¥?™HlZ $)…öÑPw0,‘ëf^µˆékŽß»Fõ«3Ú7?”& „¨›ÓíŒÅ]À70ê1xð˜bU"ã mZÄyÑ©a¼D@ÿù×K«ŸâÕ5*ǧ×âªî Ö"Ú-5Hð*?!¿ê>‘¯3Bh±ö:Þ?&ƒ5 1"Ž,Yàë]Y‡ý$áÎxH}øŒåëbÔt­8—Aè' 5I½4CµO+Sª$@YE("Üõ>2¯±eƒ#Ä7[×1Ì%“Ëú)Æ W‡¯Ö5µÖLýL¿Æô·äêøubbþ”‡ç?Ãù;¬Û @Ö;r¿Bj{¸Ð~:ÜzßÉ@UÓyjÔ >4*6–j}Ƴ÷þm6®±Í.Gõ3bmI+Ç·ÿw±Áqû¥Wq~…‰c&·ï²jæ˜{ïêÕ‹…Ü*&z—ÙÑêõœþx‡A>”¢(Xeë<¨ÇVkÈônýv°G{üÍñ1O·¶ø_¢˜6ÌyQ1‘ JÈB±ÓuyêY— ùL}#P:Ò·0>ç‚/Þþ˜‡»;ò@wX®Ü/¯Ðzdí¢ÎûZLÝt_(ÆPU¹D­‹ïß Š"ìÑ7pó‘l}“öºrõüÄB–ü˜íy™ ¶{xŒ¯éEãÚ!Î3‹÷ó®\c8ÚA½ ×v[Ãbä''#4²„,ëä¦y†`0M‹T P‡ªÒ´GêOÞ—ÁSQ¿ù‡’=hq£‚¶gèæU>•³®û+LS‘.ÀÇV’¶eãðˆr0Á%޽ÇGØ€ÖWnŠ›=b-µäã›D7^¤]ÎhæSbchÛäC‘ÖÁñ1æúut<$úäÚÔkÿÕ×d8ÜÖõ÷ß—òƒèfÖ¹>ê¶Û„ƒd Fb°Ž׬ÜÙLyxªÌ£‚ÌõùŠ“wÑ Ö]­õ#± ] ½ ’f9­Q\ÛpzvŸ­ì§7¸˜Ÿr8€- ÙË”óOxòè¯hÝ2èç<÷w9{xÎGßzÐá§¼H²Ž±­¨7kÊý ÆQW#sR“Í[âUÍEÝ¡Øãü.Åh›¤ÖŒó”Ñr©/D»lå{òÁÙ×)c¥±%é‹Ñ€%(Z‰uKš¸Å¥+5>—¢ÉUÏúb—=tä^A<èõ‡´Ëþ[oRÎKÜæ¹¾I–e݈栧Ë!&¨l6ŽQ’‘lŒ™ïmèê“{²ë4"USÎ1aö¿,Í`yô]¢Å ëÌð¿g}½#N~³:×›¡–6Kñ¦ÀG*ãa·Ü lÇ„mUBs±P­Z‚ˆHe9:·=7g}ÀA±Ín9¸ï¯o±ðg®O•Ôú€ø E4¨5þR²SiïJÿ*œý¿|D¹~¦ñø±½L>¹€„ÎrxIûUkºi¬£µs&AeP¶ºÖFž¥-ÕîŽf“-IŠ!Y¤m•ÐuØ>ܪo„`-!Š”(ê¦ «%~q„mõú)MsŒ(´¶$®Ïµ*‘tƒ¼Ù$ºxŠìtvÒu«`,jŒæ«„¸2²Ê+T„f˜Ñ[̰!f5S,Ï5];ñ£ ZÖœÁ'ŒÇ{¨¶\w;oõ’g˜`ÐÇO0E†¢ÓÇ4¦%¼ð:»{¸éœúðí'HAé°Áv­ZmÕŠ—Ûû)773Îèk³™“ªÊôÁ9ÕÙ I f„LÆ$ç3Úõ)ÓöTW2F· X–¨  ÒFB”ÂF²Ïéü”¶9é¾Ë›ƒfnAÙ4Ú¸J>z÷ûlµwÙ«œî<âƒÙt{~C®m¼¢Ã›} â 6˜È°>_ÑV­ö¶ Ù<†³ZŸ•ÈÃK%¦œª·¥ôúc"“ªk¸¶$꥘^¢­¶¢uƒ{B,jŠXÈbLž(Ÿ^ÀÚiÿÊH\ݲZ”4gK¥ö¨G¦Ÿœ«ˆHG”Ÿœc¼ª &t Û Òª¤#Ã`hX6 ë¿jÔ˜o; ¢62kÄxe¸jÔÅFgšï Rf³ ÿ©öó’5mu*hã% æê:/é§®ˆ‘ý¡nmd’'}̽‡ñö‘<·]ѳŽ{Gðç›ØÄ²®•ǧB>ö;È•+ª`Ĉџ„W£Š»X£UÛ.-jj?em‡Î:¯ª’DòŸàNKÓ£Hu]ã½ûFÑÁFÄv0UHmÓT®¼´©BWˆÁƒ1ÔëŠÕr­ñ /jÇ$Ã>ÁBÛÒÌæ¨ª†º÷ÞCŠ-2ŸÆ¬å7¾¶Ã¯}m›ç[¾özÆ“cÏÞ«i¯ONïß÷’è‚ÈÂ?ù?c- #/ÝI9ØÕy•[7„~.L+ô[*ó­òúvÄ–Nùoþñ·øèáì//ó3`M?OŒ«?c§ägÅä?OÞÀ_DÁúÛÇŸóȳŒ^–q:28Øâ+ÿùßãƒ?øïÿßî*w*L¾°Ïðö&Mé0½Œƒ/SÖ«–X,¡—@ߢ«)•óÝW°µ#´1QY±¼…à#ê=‹]¢3!/˜oõQ»j\aÑÖcOJÚ½‚ó¯î@€GØ•Kצa‚/ a#îÎ5€ ²‚íï¿ÏàÍC–½çY^34×T›!MP…â£5½ÉiE„­ŒÖk7»ìZ¢fŽ ^Ö ‘&Œ|‰´—a²¡®JgE°‘Á­<>(Y“Ú¤»^åüC8õÐøÀ'í9/~Áð¥¯%d…P¯•¦†ïýÛ–¯ÿñŒü`ƒÍÏm3Ü¾ÂæáŠ½ÃEwƒoûç Ä{êYÍû¿û»çÉö7¹Øq¶n‰ã—f¤“ϽrÞæ¥‹Y—¨_âGauÊØâʳñdJê Î7¸å òÙÚ![­žM»ùÅ$‚ºéÄUFHÄP×íƒ JƒRVpЃÁ.(öRæe¬!ÕËè‘Ñ bN˜…@vIñøôë,(˜” çx?Ƙm$܇G –åm³M †„F¡JÑˉšªÂ­gØÍ1QœR×%žX‚uHX1‘Ùj×÷A¥ƒ^ŒÒޤ ‘%* \¹f{r—Áè€O¿Abræå1œ|¯ qT°lÎ iÂŽ½‚Qx¶zŸ³õ6ó›Ü¼Æ0Ýÿ ob$ꜷr)¸÷Ý'J¬A$"H r†Ñ¼ oêUÅAô"/~î·‰ã>6J™›)Ñæ.ײ߯š¸ ½‰éï¾BšŒj9¾ÿM~ôñ7IÒ>öè»ÈID¯]’+4&¦- ‚©4GéyÅÅ)Î48Ž šá’N°Í74ÃS¤dÃ1òê øº¥dгôwG¤ELy6£š×ÄyÁ3cqmà•EÉ *ðWoq¶±Ãq¹¤|ð€{ÿì_Ò¿ºOšmÒ®keóõ; nï WÇ7ŽEÔï*œ—Wõ–@å¦Mˆ{C–ýˆvr…öŽ'aI=?gp¶Æ¤Š¢Ïªœ²XQ–1Û/·YÏOXÍŽ9}úùd‹Ôm0éíPöRªXðÚbg¤ÉÑÝÿfþˆøüVøÁ(g-C~i}Îíªd•d-”iB(²ŽTc3êÄk7¢Sרªæø…Gñ´!KNŸ²7³;8¢nðÉù€åÂÊî5×1^)5'H€°-Øá5’þ&îâCÜá÷hN¾‡¬oc‹+˜|ˆQßuShZ¢óÅÅœ¾Wrï)}ÃYn)÷®ìÛ” ¢Bèî¸QLçÆì¤¢!J êUüü ¾Ð.j¢ÆÍJšóåQL~6J#—ËÜ‚ñ‚´PÈg7M-j;Ѥð^1V>Më˜$Áw)H6Î ÖQ-IGÔ*ËeE4ÊMrÖë_»Ë½ý”ð†½Œ/½Wež0_”ŒK?²ÄEЇNÀ»ZQENb¾{a”YchTµb†y‹Ádùåÿûc{ ]7ñÓªw‘ðcÙŽ~J[ù‰õÓDIˆ’¨Ü;¬žÍqM F:`ê€1–@ „@ÖËìŒ1ŸÒ%â^Fo„Š¡°þ|E’~“Æ8×ç9ùîögô³vc ílÉÇx…Û/׳fg'°#ÂþUxíÕ„Ù2pïiËɉáí¡®•GG޶uÚÈrtÿG÷ý{cÿmòS½,ã˯¼Â[ï½ÏébÍôÙwó‹¸ÿ­7Q”óï?áüûO8[¶NŸg1϶?·Çò¹«˜EK;î6cBdhI‰§Ž67 ²ê#5˜V‘º³p—“1Äq·Xí*šIÀ_Éð›dÔàÓ ‚Ç.…heIªˆòZÀ÷¥ÛÕp‚”й"ŒÏ¿ý.»o¼Åª·Åìµ «ÛÄ»V÷V$3âó†l.´ã˜4®ÉŽÏ>3|ã=Q»Ä4vOg ΦDj¸¼£FY‡©•A1ä"ëñöã§<~rHEŸ)¿ BãÇeÍ ³Í„ßüO¾üD$©0ùš#y½æ;_?á£÷•¶wƒÝ”½;\b1çkvN‰jxÁ/g†¤—«xüÁ£ª!6†yÙp¿UîT»ü½¯LØÞüwôxëì9& ¼v•60:Z ¸¦¥Hv®`E˜œ\`Ë’Ú4Lë  .(‰@ê;ÙY#J h;;°\&Ÿ^oÜ64—kY?Þ­ýÉ‚Á§·)UÅù‡M6qÁé kjZ4&Ò-¬œ3Åq¥®¹~qÎÇ£1‰:¼B<Þ¤]/Xª#!H@+lÝK•—²5§kȆ˜(ÂxEBÀgÂPGÜØøU[w¨ÜœÈ¤,›3Þ=þ#6ŠkÜÞø/ß[ÙóÜÌ?Ǽ|Ä£ùÈã!7Ç¿Äfrpù92Ý‹z>Ó5*Ý•[o<Æ[’&b¸*Èë„@˰ØGŒ%"a—̲)Þ*£ÁkLäuˆZ‹Ñ/´–¼M¨·…ÅyÁb¶&.Z$ŒM1"diJ±jðb(lLò?!¯Á›”&Ý£Ì YyŽ4g C\3ÀÔ›„l„)të ¡×ɵñÌ+÷"£‚õôœå“'0Øà,éñÀy6B†f)ã^íÝaù«,Þú!‹ûO(M1 ª-ý¶^½…V ãİCßtɰQÅ'ÁR_nS{õÄÖLDPhÒŒ,Û`¾øÔM®Ã]L³Ä´ m3ge#mGZ,§'¬æÇȤ$ÝØ&éõ(óˆÖB]a¢3ºƒŽn"Þ Z?æ£,çédŸýrÅëÕŒ WÜŠvT²Bðh^vr½4BÒã-!) MÙ:u4Åšub(ÇfŽ¬Ë›¾âõaAp3+ùçãYØ>6whš+5aì(«-VÕnûWˆµ}òMÜ☺ºÀ&#Ìä&f|3ØCìG÷(±ÓÔ(GQËb˜b¶vI÷ö:€¨¿ôüTu÷}¶gè‚G¡Æª3šÙ'hyŽ«ÎiËSlÜ#Ê6êH‹}ÒbcRÒê*½å‹4[öðÅ®j\Ògn”&º,@h5T½’´Z•2é_Ì ñˆr˜“ÏŸR¬¡¿É¬oYÆ ½²Gví: nQáë4 l6FæKp{eŸgÔ¡B·¯°±ÿ=Ûcþæ»Tó)’Åh]cZµ•.‰!­x~¿àÊÎ&qA))õº¥ž­Xœ.h"0WǘÍ!¹÷ì,—D^XG[´~Ši‘¦†Ø~ÂxTpeoŒµÂjQÑ‹·(’!!ñiŸÙãǤÃ!Y6 ,§˜Øp!Øßd\\gœ­Ÿ1SÅÓ%€º]‚ÄÅBI‡5nlbØ»»ÅÖµ1§÷Ïxòî¦öt‰J'úÓ¶Á75 D¾K½L ¬*_\g©OG96Žp­Ã·±‚fD¯ô}üÒãZÆcÚ.ÃЬÃ>£Ý$@£Ò´ì¥Ü0‰X'1µRcº^¥£]¡ ÊüpNÚÛd¼‘sv¼Â…1¬—`kU0Ai] Ž E³8;ž3é'G”Uëiæ5ɵ‚ºjY»®“bqˆoÑE[Ö4#˜¸Km¢8îd±\>—Ëû$)ÆvÉ«•S!54t ‰Æ‚3B½jºâ“‘.±éLH»¿5o±«êrŒR1t ÃÙÅ%ÙMºbh”&Ì4 HžÑ«-²vø²%…Vi\ƒ!°EЉ"ÒÑl«"„ÀýeÌ÷ï7l ;ec³kn4[7a]Á—¾U-|뻫…ÖŽ§G¹³üÑ7»BD–­k–ÈÂö–`~Iù¿þÍ9éÖ6/~îe®Ü¼†wÝ}P½'8Oo4`²·‹±ß¶„ºþ,1Æpã¹Û|ãw~‹“Ó¯bl ü×Í,ùKÌ”É_ë'#Á±%ëÿñ\ï=ûÛÛܹ~j'üÉ©ÕóâôU4.î~öä_Ù/ ”ÞÅJ²£9“ùŠâø”Ñî1úáÇ´Ezs›âÄKïÄI½m$ä± … =Lо 1T»ci&PôIØëá7û„à°Çƒ:Œ£Û‰ cK»#ø¡ Î`æ`¦sH.‚—ãú…ØrA¹‘ñø7¿Hb½Œ/è,Ùxï\6œ0š’»•¤¦”Œ•äõ‚¸^a]EÔ–ÄÁ£É„&ÒD)•‰ÄÙŒOä¼?¤MGEÛ„dB›y¤ž7Ii øÆ;ﱬ[cÑ8Y4ŽyãX¹îj»žÃ»æå_ÿNÃÉ“ yÏðë¿‘ðÒWc~å×àn²fñí§òÝß9â^ª$7'Âs[2»2³cyTµ4k'Ý;åQÙ²ÓÏä…í!EF‘ä\+#q7… IDAT1ç-íáŒMÎë•TÇw‰Ìo²wöŒÑ{o°>˜Ð«EBë°Ó®¯ªýiÒXú§§Ä«R|d;‚ŽóX)L$uðx”Fz¾K>fz òƒ¾ ®ö¨Ï9:jhɪZòÐÉ6k2¬YIåh_ ¢•5%‰*’¦r¼±‰N/p®Æ¤)ÍÅ) b;ljó"db5eY9Ï[ŒU±S':Ê„^Œ´šùϾ$!ˈMB– I£¾Œó+<¿ýë²”Ïæo3Nw¹;ú«eÍÓ‡gÌÎW CAZN§)M©Vs¶öoIëj\SQ¯TMCoóy„± Ó«íI‹ÄÐÄÊ*ö$&ÅH,¨K /Ib¤^V2?YÊÅÑ‚jQ uÛ‘÷¼J¨[´l»½Ê6ˆúKúš¹‚Š z»C²Í>›ÏíÑÛKk dM **jk"âÆŠwõ—ޱ髙!òF¬‡í=Co`8Y'¬fiÜ¥%ÝJÈ#H"±I$þ¼"ÔŽx’‹«Ib¤]¶¬§µŒöz$YDS»îÿ‘K-®ˆ¨¤õøÈb,ŽØ RÎ+œSâ<î 'F¤=›Ãª‚²&¬*´l õ„Æ}v1VðËJÚu¯qëJü¢”°¨ðó5ÍlI=_J;_數ٚvºBÚ@d¬P{‚¨ÓÑíÜtM;]£e+¦Q1 HRÆZ1cc:Úµt0E ÞáÎKüá¾lÄ¿p ÷ ƒ’D’²Å´C¬V´ni üºêº#ÃI¯`±€wï~ø‘e]N¦ÂƒCË0ïI–™ŒqÊ•”Wïf²{£à,ëqa‡rs¤lY¹ˆ FŽOÏŽƒ<>TÞ|Ë3õäæ—>Ï•Wî2ŒG FCý‚ádD–¦„¦Æ×5¢AâÈŠ1]qK€ÁxÄ“OîËìôügQ_å gýM°„NVÿ·; Ñ|\ݶüÉÈ/¿ö_~é%ÝOä›_áæ×¾Àðú>ù£ïðbuÌí/\åôÆ-´i5D‘$‹9£·ÞeqcŸjc„K6|¤l}ÔtvÝY ¼Š„ô-Ôˆ l D1"Ò*:vg[d®hnhnXÂ0†Ü‚‡ Š} fÖ +ñåì}’²õôÙ»ç¸$&˜ï>ax4Õ|¶–`»YLQÑÕ$Di=5‰TfŒønÇÄçC¶QSÑà½S§ &i#`^DµäšjÄA¶Çé`É7ß{›"Ëðmóó¼Z­ÿãlô÷ÿ·VþΚðÿg)/9bïÁWþ~Ðõ_5òÿò#~ø§éîŠn~íé$£ÿwŸ—£ã¥ýé}yúÆ}>|Ti/ £\ø/~mÈÅY¦ç±¼75¼ù¯YJ=ÚHHë–Íc¥·ˆñ&E¢†Hk´v¸Ã ¢ë;*[›„ãi†8Ñ<©Äû ¯[oŸËéÆ)_Ü8åúäë|gýŠ~´óU¹–}•ìÍ?¥íRo÷ÿoöÞìǶí:ïû9çêv_U§ºÓ7·åå½$%Š¢%3ràȶ’ †ÀH^ò‚ Hþƒ<ç) $IG¶‘À]$S’%’"¯$òöݹ§?uªßÝjçœ#«Î¥,“¼Wòbk½Ö®Ú{­U{®1æø~߇_Ò=ü=`©c)S” MfW·÷«ª¾ÕÐÏ猓Їµ¢"JèhŽß&TÇê3bs†±Ã×H‹=Mò-±ù”Z"ëæ~€©ÛÇ€SÑ™IŠE¤_¿«\.òM jÛġFDZ¦gsšÙÖÃ5Ó“§Œ—³±&+‘®`¼õ2ÙîUbSÓœÐ-±é›0Ÿ#â §£#ø–ÉhÆöÖ5ºÓ9Ë>í'·uGôŠ3)*œl¥·o eóÚ-ŽƒÓrÑJl=mÕ²:Zj\{Z) É0c´?Cz­¤£Œd˜õ’™.püäD›¦•!xl55Ö8ñu§>†~ eÀtÒç» Xc°•ªu"[Ûýr»ˆ–‰ªâ ÝY­Î‰Hn´~¶†ªg"F×'ÚŒSYß?W‡°>XÑ\›0ÜP–ËeÓ7Žy®bŒ˜¼Ï!’ÇHî 1¢«ã¥ØÄ²³}…ÓóŠòd¥øÞ(ây® }–ÍóksaÓS׳"j.dM±ö¢z1åˆB°š }ê§ÒJGžªæ³±¤Ö¨+‚¢AÓH}¾Ðn]‘ZdhÁÚLCá¤j¢FU‰ª€Qg‰Ñkˆ}|³sÑ4ª3ê%H³3B»;Ô5ɳsQªLÒ!šUñ+ôÒõa^Ò” ÿü ñBz}kßê(¼K¤›M+8‹>«Ü_ î²h榒N–üZv§OÐ'‡FbT]”eØ„l]S®ËÞ…ï"ˤ©ëϪ$ÁXËÁý‡z÷­wqi"Ï«VáèÉÓ?c@þu;š¶åï¼Ãª¬¸²·Ï7_ÿ ?øÎ;LRáÕ+#^Ø*–p–9¹y ë=&q”UÃzoŸv<¤¦¤Ud|¿¡Ë¡˜ óÊðÃ’ñ» alY¼:CÄä£Ù ‘8Í>sf‘Ü"Ó±ºD1•bÎ#4Љó¤E|gQ yÙ0R}&íO¸8*D-.š²C#8“ÑzÏ"|L§ &3´+Öëš¼®é.]BN!q¸Á˜úø%ÁŠ#šÞŽ)ºŒQ•±t-1ópAÜÊç0T…Ê´œÇSö1 7ùêø°ü#>Y½I²®™f{\›~•ÂxûøÛ×O¹1ý:ùº°ÀhƒJÑ3Ïmv/´g±æBTqÞà‚!HDЦ¡w]`5l‰F1ÑÚ\ÏËs|Ög€´Y ÚˆšŒºÎ1O>fºÝ¡iA4æB6ã Wo¿5ººå…_¼Æ[ðG?}DaÖœŸÒ”KœxÒy?ò¶« qÖ YöI›sðkèž@Ýú!ÉIÄïÿMq—Fè “ÉÆ—hVÇtÍœ®šóéaIù£%«³Šb˜óÂë;l^™ê-šªáÃ÷îõr+#›Ð®jÎîßC/䪊Ißý›9Ä Jl;&wn1ºs““²È©*õxŠLfÐytœ˜1ƒXcPŠàÙóà9bŒŒ¶I‡¤-´'œ>ù„,0ØÜ¥ØÚ¢+RýÚ’•[Ñ¥çvÝÞB“ˆ‘5 ÃÅrÜg·hWÒ-О‚_?C0$Ã=FWÿ"i¾5)A<Áל/¿K >,‰¡E0ôª|ÅD‹éK6hÅpž¤@Ćˆw–h­«‘¨$¾—²žÍ˜œ>dÿá‚îêMN¯maŽOÄÉ-ðM‰/Ï1¶Àgh[cª™Îˆâ¼d°VvîÜêù÷î¢óUÖ‡ÞOBISË­«Œö÷8¬ݺBBÄûHµnXŸ®±yB¶7&›¤MÃÞzE•GuÄ— W÷ˆí]Úõ YÍ+ö¯ÌØÞà[Ol=³bÊÞÖ >ºÿ&ãÍ[ †c|Dýµ×é^ùwÈâùîïrúÉÛL’œÉt‹|`Ȇ)Áa04êy-›ña·àwücF ùçx È ·N‰¹#Ë3¶/MÙœ iÔR7ŠUßÓÎég2‰‘°hèbä|¹¦ZV¨÷„®Ã´J3œZ|í ±—j™‘#Ðõ2.•~2é«xJŒýæÀs,¡m=UÝ1±ƒ~¢QvˆÄN9ÿàœÁå&whÎ?>Åd–éFAJUö9"Ïù¨pÁbÖ«—Z6ÃNT‡sž¾ýhbIw§˜,éë#t]Gˆ‘¸¨Ðî✬Áu÷c ñóó¤¯=žË¶cŒÄ®çb 1FÊÃ3êó%b ƒ­6Kpƒ—$0Jp]àδá¥YË$3dtüî{ ‹JI!µ9Ë.á´Í°ÞB ×¸Â¾t•8J{yVÐèŒÐ( ’÷ß;Ww¤gklPm­Ç/Ñ"C'C4³˜¶Å…ˆ*|ð¤F»Ö“ “$”¹ÃZÈxkøTƒ4#è&/ܬ]Oxç‰Ã.jÌ8£r†¤ŽŸ>#´MUñöw¾ï:¬µ<ÏĪVk|×ýkQ_ÿYòŽuUñæ»ïðìè)¿ôÂߺš¡oÿ>é]Cj€"AΗø?x³?E‚b¼£¹¶‰ø@>ïUN/ *ý%×ÌJ1kG³!7cHj;^Ñæ9i0Ëçý¨6±èVÎ;\Óëýш„ˆ9}ó! ©%æŽüìœÝ¢ÃŒl5§³cb>ål’³%$êHò1™¤dµÐI`--$BÑ:’.à“HÒ@Z ~бJ’RJ …ät.ÐEO¦6œ™5÷NŸ`Ãk×nñòþu~ãíðèôèóGbzQS?¿ øõÿ¡á7þ^Ë_þ)ßúk)_ûUÇ_ù•‡ß|ãï¶üîo·Üû‡o³xó!G߸Êà¥=F;c~ù?ÿC7çïÔG˜_™ñµ?·Ïã‡%$-'³S>üæËÜøÁ_áúùˆÁèâ £*,ÊsÒí]ìpÂôlÉÖ³cN³s\Ö‘ˆTɵo*QjQŠE„h ©\åè¾çxþ”ò¸&qE?×{€>ÇÎÊše˜æîOlXD "œ¹8ŒÉ\Z¥ލÝ©/L¢óÎ*D[H-Ò dm¢d im±gßÔô."šYÂбÜ»B´†RÀU§¨iY ·ðnˆg8ÍȽ%+#álEl=2Œ4£ˆƒ+ëµ „ºãÝgwÙnqso¦ëQAlng¡­[ª“Цly||ÌÎdÆ {×xõÊMåš"͈ªcXÕë¦úB÷aq¦üÝÿ¾áÛÿ°ã—þJ¯þ”×Õñ¥oå\~3ãä Üýk~ø÷?àÞµG|”X¿x“ù­KüÓì.=ð¼R7œÎ#¿ùý5«îˆ;ÿÙ—8Ùùúè”WOD©Ë%㤠N7 {O¨ t(¶óÄqrcéTI&‚(ç¶ŸDOCm`혒’³ÏðŸv 3Kº9¡íÓ—/ðs%ßÃçú'ÍÞÃEP]E F/¦#CT ´í”2DDB$Ä1FV­*ްiF}rF~ë&6+hËoÑZœLìß|Y´´ièw㞬 7G}𘢆VkNã Ìa}Ÿõê Ô fÅ5öƯâµåƒ“Ááúc®Œßàjñ;Âû³¾ðé3žƒˆ¢1¸`•i›Ðf5–ªø$L$í,Y›xû/Muf˜çžŽ‘„lymN1'oc¿Ë e’ácÇÓ7ÿ Ç;·ØuäëÛóF¯²‰ ê-µo0Ö`à\ÆË_~k-mçÙ¹ñ*NR—ñìñ]>øàh}‹qŽáHQ Îá¶·Qg4 c›‘»ŒÝ|‹8…÷(«ù‚ò°ÁEh:R펓s–÷+F.£‹Ì%¼º·‡ DU&™go3gë6˶!wáàÓ2__f¾†ÐA›€ÏÖÏŽX£½ &EæÐÅœÕÃûhˆ¸ Üåë¤7ocÇcÂÆXGô)Z˪#šK›¬²Œn8 »r¿œ³ZP-ON·^½…ÏS𴥋1–Ä匶¾F[íÒtÇP=ÁV§Dc(5ð,åSke)/¬K®~pÆei'5G» 6͸óRò• “› Ør¦øÁÙ›"%ÈÊ£IêÙfp~yÀ$Í(|dBËD’dÍìSªò ó ‹Åë1ÝŸGR‹mO‰ÇoÐå3í!6¬'v¾©‘á>éþk¸b›,ݤ¬ïѬޢ g_Ò³LA„}ËŒâ1&Ç% DÆäÅ5Êò×bA}@ï's!³DÃsKŒ–„ M˜¨l>yŠ¿z“ƒ[WhŽž’-,²w ;BÓºƬj¼HæB¾œAÊwR2¹vƒÁ›”Ÿ<¤ºûèbg¿ÿ~zçi“—9¦SÜxƼQº²¡[µTË:&ÀtšcFIî8·Žºëh£rXEB0Öà-ã‚Ë×6°IF2ºJ}ð#\8!ϯZK;ŽÓÈ©«8¢¥J=£ñ,OqWï0Ýz¬l° ([âÎ¥>L®mik–ç%˳Š*”4 M(¦#ºÍM8\rg•²9žÀ†EU ÐEBhæëÃ3¨ ìÁÐÛ)Û»œOS®A•® ´^qb‰.›ŽØy2Ÿà¢ABÄQ”bÂÖK۬Π­Çª€M 6@ZXvv…ÄÁY ÕZqS‘$Kp&1ØÔ!.à³Ýb6"~ÞÒ.ZÒiN{^“ øªãðþ‚Ñå1;¯oÓ,W-³HTL ‡hßEV'KºÄb!Ýà6GhfiÖe?YhªÓ)®Š¯x ¨z‚*q#yB”H4Š»(ì£$hì—&±ÄUÕOm’ RŠÙ.€ùePºgsZghk0‚IGCkÃÇvL,|PžV%cÛ²^Ÿs)?aïNθvf©2²²yùcWÉ,¹ø  ‘vÅg›#£º&m*˜—LÆc6Š1k©— q6 M-ONŽ8üä[ÅÑpÈd2aT >ËxIExôà)?zï=–«EQ°»³ÍÞÎ6Ÿ|ú)'ÏŽXÍÿÆÔÕŽŸœTø'ÁíŸÄQè€O¾(ËñZÞ” IDATÓ‚ õsØ?ùYô§°|sùY /mY¹½a´ ½ÖP\¦f¼ÃÛïH}gÊË7öu’Mh>øPÜFe§á“ÀֱLjÓùL"b¦Š®ŒdO£WÚm: )4—2ív-*:‡Ä(:ìm™½E¢^h,c”Ä[¤´Õ£© .#挨tQÔæ,w·?9b Q“LR¶Ra6’qt:(ñAÂYIXV ¨Uh Õ6‡|!$kq¢©qŸŸË‡Os´<—×®ÜÔé`¨÷ô ƒÐ¦F¯mìÈ­Kû|õª×Ì&´m+76w¹üó[*QU†iÎ÷?}ŸÜû@?çžüñû&GO#ÿàjø½ÜéÏ}ËÉ¿÷Ÿd|óßM¼aÙø~!×þÏÀ£VòƒO;99ZêüÖ–|õo}…t2ßy¿U—¦Üþkoˆ¯îÈ`YhÌþ6YŠÔ í¼oå'6Ó3²²–ªo>T}Ÿ100NcdѵR°ˆ®L”Ä)Úöìjj欀 i"ÚM¦¬àΗ"MGÈÄ(EzâÂL§yÔlˆJ® ŸÈÒœÊÜå\îDkÓb „.#F'bêç›ã„˜qR·ìdÈÆ|¡Çã Íl‹öYŸަøÕBÚ´P#Á¢1jƒŠ¢ÚÃ$°·¬9Zfx‘ç–Šjl*GñTŽËßÁ”kõÕ\f,»Ó7tø¢ ìH/ß•g«I݈+Ã×dd.ÑŲŸû¹‹¨AT‰2¨s¦Ë¡D Ñ*i°QRŸÈ°¶Ÿ±6ZŒ>Ï—î{9z"T+ÅQ¹2yú÷Õ5'lÚTðèãt‰›r¨ž»9{üL0OÙÚ¾©zðÓýã׿.’PUU— b4fƒþ{¢Dñ¹uó¶ÕK땦ÅÆ ËvÝœyIB(×Tïþ‘Ä®å+ßø‹zsëšÄ6’¹D³ìlnpðéC~ðí7…ÃSm¹¶#æÚ®&› ãÅ!¾iõ¤óýɶ‘Ó»wõÂe’ÑP/ G‚¢‡ë£,—qž‰÷ƒÍ}†×® !ŠÓ–”ŽÓ]Y6AG~Eç½”ùD«ãS<~„™ŒDAÅ©ÞÿÕº$½q[M’ˆÎ4»ó¡i°m#oqÁS%¢BF7Ý¡Ïè–ç²XK÷IÅpcGF›—Ôç)u¥Õ¨.ÉÄŽnkÊ5ºbŸ¶|LX|$)Bá;95ÂKy”8Ýmå…·„îêkzVoËøÎ=¶_yÌàÚN%1".WYÜý9C¦Sé–sbçU4ŠlŠN_JÄX8©§:)7…nÈ£o¨¸…Tõ†ž_ {#W½ûq'wqg©ÆbŒ‰»›-ÑÒ Ë‡ªbDª.™ˆÉ7µíÖ²Žw)«Oa1¢û<9Mz$çf$é–ú°ÄÚH¶±¹6’R|x"¯<>ÐóäL,¾DkúI*b²;í;–¢œ¯ÜÔƒ[W¨Ÿ2x\#{×Ämï`§¨˜/©Û¥úaŽÁIÔ êÀÔÉ`¼ÉèÅÛĦ¥úø!tQ#A=AÙ  ßêx0%ÍsºÊK»¬¥>«4 ‘Í‘M±ÎáË2Ë%¶UÛª4-¦òÄ:ˆÑN”ñ¤ý«U©Öîî]×X>aqúD²ÑÊñ†f­$%]ôjbÆlp]’MXjvø„Áµo‰™DbhaP¨ Q\]«j&Ùx¨ªQRkèÊ ¿®TQ œ$µ—A1ÅN6MÔX#]ÙR­(–øºÚH3€³Nòù™ºV%AF4ƈo;AcDSIÐàÅ·­FïÉ;'©· ¢!BC$ÝëÎë{2%œÜ­4ø ŽTâÀB"ZŒ™©LÆ­ V-zÒ?P¢ ~˜hR$BÔ>—Õ]íId#“.³´G•è¢Ól£Ðö´b€ÙÌ¥:©ôìî¹l¾¼)&s¤>êJ &Š7°BPkES'” 1(¶H ÞSwµhTu‹4—¥ý¤¹j µ‡UÛ¯ÀP{$jÐà‘ÖÄ~‰ÎSÈ:T½xÑÔ€ˆÆª×µÏI1‰Ó$Ë%ÄE¯Y^{™^ÝÀM:?8“f]K1›PìLe8NÊL}”Ö—<ˆö½¹XçHÓ”'žéw¾÷=$‘ º»±ÅÎlƒ­Ñ”Û;—éê¥xèGOñèéc’4‘¯|õk[›*ƒ\,¨z•f½ÐwþàMyòø1“ÑH®ìíë‹7nÒÔ>úàcÚŸ.­’/õ!ü$sÍŸÎxÈÏà·Vx¸ü ¶Z~Æ{ý+ ŠûSëŸ×h|Ñßû"nVŸGòÿ¤Ÿë$õ?ï\þ•×nŒ…‘Ä Ÿœî¯W_¼ÌîŸÛ%güö›r|\êõ¿p‹­ÉŽ ŸZ¶Ž,±õœï!«WaÖ)çS§¸yIþ¤–üH©v2Ê;™„‘²÷½wI*Žn\'&uŠŽ†HZ€öÎ+XIEÚÞG»Íz}%âú HÓ1-èhÊr›ûO(\”˜Zæ7^¢º±Ã †+Dc œUèi“„0HÈŽ+dÅ ~ÊHQ9:9ã`~F<ß¿÷>Ÿ?ååýkòÚå›UT•4I$Ï24F|H$Ä@ÓµRç.Pi%±}²õO¸?ë ð™•àÑÓ(ÿäoùÞot¼òÇñß¼ðkŽé/9vhÙÿÛ)gÿ(ÈÓ÷N¹ù÷~Ä7~uÊßÜ3ò;?ZòwÖ—Øý…ÛTóF¿ÏÎòA¥\s¹UÌöŒù0—g'4¾¥0Ö‰´ ÆJ<©„#¥»`;Tµé­‹kbìu³:ÙÀg)IY2¬Z2'Dg ©$‰$æ¹È4(–=:¹áT„3ù©1É#¹‡ä¶¢ëÆønˆ5þYWDzÀð¨*ÙM 6+…14‰%Ö Íá!É¥-äø€*42´cÁô.,€èEzk9°D÷ãpgQµ†n~ ÁËØnrmö5v×ņÕ W‡/2ɶI“ 23¢ u sÑMKPŒJ/k#F3Ц—cÖȺ¶s]¯~þ»÷˜'§bÕöþŽÂ)´µD ŒÙãšîÐ]úëòÜS]m!—þ7ž¾É<ñr:ÒÃÉeÞK„l,7º9ó“g,ÿ7¹ß.0—öåK/ýE’Il+ıù˜C¿âIyˆ‘y»Ô…_Kb8a¿x›ù׈¡×[«tø½$Dö³WE—J³˜Ó Rl®˜\RÞ»÷HOî>d0ÈWþÂ/Ó]Ùà|LÖFÒá>2I… ñ‡†Žz}*]Sâ»%OJ/ÏPŒþ!Æ@qº`4:虚àÆìîÝd:I%‚Še‘Åö&õl ŠœIè$ hª’õƒÌ?ü@üj‰$©4Ÿ~Búå×asQ%±–¤éDQ—°ÚÜ£×4«9õ³OÉÏe¼¹ÇhºA(2YJ°FÄ&ØâI¾§íà mõ€¸¸OÖ”d]‹·Fžd#žEÅœ$ž(㣗8œ¼ÁhÃàµËrÀkþ=rç±í&OVŒ.'lŽ'4Ý™´-tšŠ!å“§wxë㯈ï„è©>ýfOãF•^‡’H}ó&yy—üî;¢üТÖÐl:ºòDâgÚ{ñzðŽX”Ìõ™š8šQÞÿ]1ÄÄb݈Áð©êO ±Á# f@+¬ë°ÎŠYvºÿéCv§²Ué¥XˆŒ9]®ZNz!+[l*œÅnîRSY®ŸŸÌÖeÌÍ›}óa-º^S/ ³±Ø$Cc 8ÄÕî‘ÇðöM@©Þû­}¿|8%Ž"ãÍ)ãÁ6OÅH¤ð%'‡%6D¶g‰,Æ#ÚÂQ;G‹ý¨ø¦!.J1»@‚ ãIÁåk[äEJ]·Œ !K‡2ÙºÆÁÝ? «Žy²›ÉÛ’Ø’K2k ’:Á×ñã{RžÝcUì1Ú¸M·*éKÉ··èêN$F’<•ÜŠÌ!EŠnNäK]ÉR‚¬VtgkÚ“¾ìú 'Qth‰S×[±k… xZ‰1J6,Ø}ñ~]±xp ±íðÞc+•Ì;R“ogÔËZü܃@²3b÷}™nd,ïÍa%ó=S2ƒ3"ƒÜ’$P¥#‰“”n¾Fü¢g:Pá©+eowÊ`”QÕ$™Á¯©²«ìÞî`M‘9g ñäÓŒ0Håìþ¶ßØ¡PëÎ5!hŸ /L¹Eˆ#G,;äIƒn¤t&HRG¬µD+„LP“AHP5biv[ˆˆë´nð¦AUqIF’í$$ŠL‡}F‰Féšš®5<×âšÖˆ±½:AW-®‰\º¾C2Heg„Î}äìÉ ¾îîoJ6Ì Æ`,ͺ†qe%ñé)q0Bn]†ÄBìëªØv‚*H—Z’£SlYI¡Z®hÄpy{G|UVz<<~ÆÃãg¤Îqwû‰¾|ù:“|ÀµÑ†l\͸9Ý"¸ú¥W1ΊG ëJº"6¼rý&7nÝâòÕ+ŒGc1ÖèááXçàóÙŽŸVã꟢îýÓÖÁÚÚ^¾¨3–û)̓üŒ®E¿ýþE\§~–sÖOí˜>g£ŸsÁ~Ö¹þñÀ4$Èk—,³¼ r®ò[¨4ú§¼øêmÙøÀ²8VÜH˜jª³÷¥Hc"´‡$[3ì̸÷ëoã–/þÚÏ«ê Íé‚´–î’ÓülÁÆ{i;Û—ˆ+DÅ6˜hð³Tã4ƒ±³vj+‹UC0Q¢ë}·h±eÄœE$FºAN;ÌQŒ¾ð ÕtưT­UKJªrŽË ²I*nÑBåQ£ŽÜ íAÃI¾b²=‘:C›u¼õ×üx5çø£¹~ÿîûôNÈËwnèÆd"]éùðÁ}—«ÞbO.ì­{RA.Ü+>w²ö/Ý÷ ;ó‹#8?Q¾û›ßýz'ñ¯§úÿ—¹Üþ¦åæ+FÍ6žYÁžòÎÿ}¢¯måüÕ´æÏkOÎ^žéû[ïsPTŒÎ‘½¦MÃítƒ»›âcÐáÁ!K_óöå)Wç /Õ–‘¥oÕGí +ŒqÐJ{Áƒ¨‚qÏYF¶^épíDͶŠ[‚ QÉu¥ÞÖ20¢b-ë}`#;~DB+È'´’Qêe?æÀ²2žk’1i7‰!Ç&z±ƒdDµ!Æ£Äôù̳ãçGO¨Y3T/iši9ÜÀ-Ï.¤"?îô8Ï–>õØøÈ`Ñ^øž¨Ù¼®[Ã["1ª mRŠÁ‰‘Kŵ>Ÿ«\?å#Á(Ñ ±V5•@¢`9—‚–Ú+±¡J­ôœÜ t*A„ÖvZ•ÞQ¦rîö®`ŠÈ'<Ð 5Ég \ÊBÝÎ\7ëÑ_U:ë4³!Fê¥Þƒ¿khÃŽˆKõ{Ý3Œ—‹„kQY: ÒE¯ Œd‹vU£²ï°ç^`–ì¡î½,dÚÿï{ßéz=§Yz¬Kõ)?|ëMþèÛß§˜Nõûù…¿ü+òôáûºx÷ÇYe#ìþkšvm/Åm3ܸŒ†ÞU&ƨ¡kñ¾Áw¡:ßÕjD¨ÛVÊÇ\€ääìˆ'‡µ3ܼþ²\ß»®›ÈÀXPÕuY¬*fÎÉî‹/2}áE}öÎ;Ò<| íÇÐ>¼‡Á¾ö:éK¯Nfk1mÇ npQegÚnìŠÏ´™ŸQ>úáÙT“mÍ6iuîûp;›âŠ[šoH•]Öjñ1Is*¶+5ëZñ.Á‡S•x$ó'9§OS¤¸„ÉöôžÝ•?t_V! j…¶ãë‹Gº“–b¡÷Û-Þ]¾„ýn”ªlhÊCµ&"¢"j•ÔJÖ5«û4ù©F 嵚µ˜*bë€ínƒF+,7Rš4§Ôu’/×*¡éÄ•5¨ªíJ7І•Vþ)Œ.‹±)&:jŽš õœ¦?ø-^þà-}0Õ©ž5‘³“ŠáÆ@ªéP[kèÄP…ˆtA¬1Ðv´‹•zïqUèM Ç`š‹K¬î_Ý ÏS >Pd®OÚKíÞbuvÀéÁ‡b¶zI6dö8`\¥I1,„t@n.iŸ0?øŽƒ :-ËZTUézƒŠKû›Ô>‘`Àe‰ŠuTb¥í‚ꢒðð„°ªô3e\j#+щ""F…âJ1J4´™¿¢6wl¿¾Í a[Žïà"H×V*Y*1ï u»Ø•W?Pt”€¸ “B sˆˆDUÕ¢GæÃ²D«~ÈÝáQqH@BÝ u‹Å©5FX­/Š1ãB%Kˆ1Œ‹Td”!ƒ„Uï>;Æáêþ%Ùšmj¹¨dùh®±ŠR?<× žt6’l:ÔÔ%bF9º1Ò°,iO¥Û)#1 &Ï!ÏŸÇ“h"‚ìg †j½–÷~÷÷8?xÊ×~þçôÖk_âɽûҬן=[ïùøéCîè•Ë—ùÚWØÞÛåÒÆ& øÇ'P ŽÞbÞY±Ó±Þ¸¶µVÚ®Óª. ÑÓ4êÏ,_¦»?¥6æs†Ÿ7Iù"“ùœŸý¬Úî3²õÏŽ?vÌ2á…MÃí™a«jkåþ<òáqÀWÞ¸ÂÍ_ºÉáûÏHO »ßº‰ÍRf÷ ù2âSáì… «Í³©W¼÷?ÿ>7¾õeö_¸Âà{GÏšËé/‰CåÖ?øùÓ9÷~þËT0ýÈ-~’v ˜$ɰ'B¶†MÆ:«¨³in±âh6,†ÉrD-{?ú€8»z›j¶KQj*–Ýœô¸FLÇ žEì²AE ‡\±>™óßf¶9âÊÞ;Û›3MøÃýËÌÇúý·8“†ÕæÉº"‹†A1ãÒüœ|#q%pPœòx ©‡Ͼ¼ “‹T]A‰X“rix›ÊÏ™!7ǯ€¤H¬@#F¥®’Ì0H¬A¢´ ë6&¬ó§(çáÌ>£¡"šŽÙà2©Ôc| é$C4ÿ+ë`*†uwÈAûqŸ¬þ™ ¨Iz§—Gðaµs‡ƒ®× ÒùÕ€SE5 LÙfS®ÐiÇÔO˜Éj1Îá²ô³õV±XWbíPº®í Bc¸ûî÷øîo~ã¾ö‹oðÚ7^èKÉÒœ·>ýCžq|rÄñƒw‰M‰ßy‘,É…@ܸ É'jÀ`È|‚Å ‰5š‚RÔ)ƒí>’ ŸOˆ1â‡M [w·Øy{›Ù³)ÇÎXeŠÌZ˜4¤÷F„BH#-3Š~JQ:êÇSV Lf:߉34»=–³a¾æŠ-ÀÀyÁ ÎB:?Ë $+3l½¨±Uƒ¹ôªÌÏ*ÒaÆÞ7öÈ)Æf'sÎ>=EDXI@3K›°g¢72ÔÈ—&E•׃ç/;¸_æ3¡(--‘ˆ ‚µÉh·ZRíŸêöËS©ØÐ}ÎNfè‰NpƒF… Ь“!ª2²–ÜY¨…ùÑœu»êÖ}—`/“æ)1ƒ¤,(FCªéŒ:1${[Ä,' útY!ÝZ˜ØCb…Ò k¯¬=`ejyõðS^=~B’¥Xc9}ù’êôŒ·Þ}—›·o‘¥)aUÎfhÛ"íe^L– ƒ;(;oKŒx߃§ ß´çæoß'q ãNÓu”¥Ÿ±Ú*X^ h±¾€ÓšÁ•MÝzpMâEM~ÔÐlZ.~³O½“1úhÂøÑÇo\¥—¨·Rì*¨§‡) $³H1mì­'XEšˆ´ß·øÌ!A‘<ÁxU;YŠW£>uR,VXS333Ä’Ö[C»^³Ú͵ÔTì¼Å-ªKÊ«#¶ôŸýù'œÏxÿí7{ô{Óù/»ö_üÛ()H\B’%ÜÙÜ£·5àh9áÃOvÒšŸóÊœaXX~Á÷òþ¿«¥ò¿ü··æ†û¿kY˜ˆxø­ˆŽ?:¦>Úç×Ë”'“g<ž´dYŽ ‡øvM®®³º—“½úœßx5çé áÓqÎ8)¸iacå¹VCj ™;¡Äb|`}™ÎªYŠæ!¶¤k«©ÞDq—ÅB•5‘ C®Ñ€HÔÍpOZòpó#§ÜZ$d8¢Ì€Ÿ°¶q@Íqú„†Šë¼‡#}«Ç Ôªzæ[)~ªÇòzâ’ºÅä}ÒÞùÉ&t„”DFMÍ‘d„ª‹5ùgçäý\›ÌÈòzA°Ð†9O/¾Ë8»Æýí¯áL‰Ç]NÒ4¨ªC$éæ)ª¨zT— ¡$õ[]‚n\‘T‘¥L˜1gÅ‚ŒCÙa°Ø! [d7çÆÇŸrûO¾£«[_“pûÛ ¶ë2]¢{Ï]àzlÄ«×,zi•˜“Šíús¢" k Á.Øh—x˜.¡»©©ë5ÇΑ¸V#IpHS±ŽØ¾UhÔOEÛ–èk¢ZâO×寋¨ë6ɼ°ˆ1|üýÏøÁw~ÂøÊ€»ïÞÒ÷ß¿+Ú.¨O—H1 Œ¾w÷ò¾*çósÝ|›§û/mÅââGÓ ÖWˆ³ó3\oݾÓÖòÆXÈJ’Þ1zˆJh+’v1¢12]O˜¿øŒÁ`£#h5+¶·ö°Öq69a£³W »8ZçȮݢŽi‰Ôgœ±þ—ÿ·»‡»Ÿøæâî&¸¦%i²6°JsšÝ’°\°^ÎXŸ½¤˜“Ž6éíìj3i“ˆä}Ct=§^FïêÌêëÛKót‡¬ÐúqGtº\ D/~¯[1b^GJgS1ÎüloN£!v m„ Æ*~Ø}ª \«B±$m$[yúçž`Í#¸„¦·IÓï«1å6&ÜÅ!±]Ñ=õØdÀ*ÝgUŽI¶ÞB›€ìŸ£m£G×îK}ÒâN¦ ‘Äb™€Û¨¶q)‰_†×6¨¨°3Koxóî»hêÐù‚æô˜<ä©FKÇZkj\¥”kÇàúUìõ-$I‰ŸÒ÷k†ïîbw6¨Tð K QU#uDg³n0´„ªÁ\T9;1˜Ôâ¬Aš%©lï!D’Ü‘÷².â'Â|²æâtÎ`»$n¦Œ¬Ã©jÛ¨4b©ýHÙé3¼Í(·®io”KðëÅ Ä:Gêï³Z.9Ÿ=ã¬ù„2^W~²XVâ"ºAh#Z_î3…#V55އ$½Þ%ùK:jÓb†·M¤ÝaÙ@Ì š;ŒÂbE¬=©uô÷z”»ÇB $.A€ÑÕ!Ûom11åèÓSê¡—@ÆRµ ÁlÞ=—MaÒP®.ÉMB¬=¾pDAµHÄV-&B"~V‘ïmç)ªÊz]Ó®çj\à IDATõM|“])ñ¯¹ T ƒ6 q …p:#"%"Y-\¾ÿ¼ªQI%ÇZƒJ Ò}wÅtiìa¾"Lš·è¢ó2¹ÄлX iÅ9­ÖY"ö’Hl‹W¸VZÞd|81ôÒ–ílÁg‹œÝ7ßäæ;ï@]“T5Ó7 «•nnnÊj6§>½€‰&¢V±yŽXÛ‘·ú9>v¡>X,—ñüÙs=;;“¿aññ×ÍËû[S€ü"Ì-<زÜí'P8aÙªüÑçýydÚ(møòý׿r;ß¼Ãäå„Ù|Ííßy›w¶o±õyJ[w£4¯*«; ¾Xá.ÀúŒ¼7dókhíÉm®¥L¾™I»áÈ÷•þ‹SŽ\áüÆ.!3¤³Ví<ŠßÊð[9ôH³ì T[êL¨c‹¾NŠPÈ.õ•T°‹SEhõpLœ\¬ÏMKÓ‡h‘˜š7v”Ö‹=œâYåÔ7YxIN+î÷¶9JrfóöÃØ¨:ܨþe÷f/1.ºNÃÍ+ä»4³$yJÖËÕ‰¼îXý¼giw˜Êo½=¦õ?3+ùe!’jYWÊŸÿ¾èGˆDóºˆUí¼Ý¦È0ª©§B“(Þ ³v…­—š%¹½!Éx›¤ÚõŠ~\ËÞ¬ÕÊ!w{ì-=[Gkõ!R¡’ªé¢èFöd í`H0­ƒfÍm5ØbMÕ©z:Ø ëè5ÃI"FOð¦eؤ ƒðjco wV+~ª^ŽIìXÒØgÇß¡µû\¤ÏIBJ?n¨JO5%5P¸\OBÀ¥vM@£'^vT#⽘žˆmÓZj§ª!BуÛwdÜF¶¶ïÑøšO›§¤ý^ÞÆù5²tG£"&¬´c‚H’uªmQZQYcT4kÆM©Ë¼‘Vj´©µ¶AÛ¨Õ‘lÈÊd€oæ|~þdªë\>ýÇûsëücН“ˆTFæÙˆU1b`>tcfYK„Pˆp·í3\Fnøœ­©³Y'gì¬Op²¯®•µ±Ø5„(çYÁi¾Á¹ËTŒ‘PéfZÈ­xƒ›7îÑÛ‚b=Å´ç_.9Út«?xÅÿø3¹ýæ¾ùíûƒmæêÛ Î¦hU),XµÛ )£bÄ×ï}Uß¾þåøì@>Þɳ—O™Ï/*ªË©´õç(»jA£—´ØÆ¥}E—&X*ÞK [ mib¤m*|Ójur$hÐz5‘ó‹#&逤On{é€~–ƒsZ§ÙÆ6ÍÁ+™S}÷_“~öñ7°ÞQsý†HÓj:_Š]UTÞPå=|Qj\¯¤Z/YF1?Åf=Ͷ¯ˆnmªÏ t°'õÙ'T“d0FÊ›¤aA²<†Ð`L‚ƒbè$?ŽS¹ŒŒ³*¢îò@Ôy>¾\?ðÚE}úhˆÒ…û¨"QA4ªS𙓦ìÚ¾U߈æ‹FRö°8ò“cuóã§5ÑQ»• ÅÑm‚εŠs!BX³ö3hhç/é--n±`¹9 hPóª–ŽÓî ¯fÌCgÈ£R®O1FõäÍ›¬²FÊcC÷öö‚zâÙ­TИY‰ÚÐ >P,=Ãá5Ò›»ØANn”üì”Ø¶$ÛK¨£0oÂ¥RSðFÈZOoY±\´„ɊІ®u;¥lÞ£>jjEz£k댊–«V‹š^–±˜­xùôˆÍÍýa .!‰ªgG3fM$ú–ÉÉJ­ŽÄÉ+'¬Ö;4mõEg8ž]úÀ ª#ua[ÎN^rÆ£ì>¥»BÔ¨J'ËŒÚeŒ&L­Ä¡©Ñ˜Q×%¾Z/êVñz:_5ÚªÊ寝Æ\[ŒÌ*™iq]Öµ¦ÎÈÕ7vIËŒ“g',N—$6Q+"ªöR–/çzüðŒuO¤Ü,µ—gânå0_׺ZÕÄØm‰û ÑÉwˆ(«—3bb4„ˆ”Ú¯™5*»¶FÛâ×-³ƒ3MËL›•&09šwáŠ%Ñ{ ºéKŒnܱØ_ÈñŽYM×4“šzÞÒZO–tÁ°>ÒÅf¢QQ„¨d¼b Ý$5€‹$V51àËw‹‚ªQÄZh½4Ód‚’$ jDÍÆ†ã!¬ÖØÔ©_U²<]¨*R¤BlZšó±ñJó%èg5â%£;Qq&Ukœ(48E¡¡+, C»hu}ãšäyB†!ôúP54±ÆÄˆ‰¢ç« ?j[.áæ e(5uía±Â4ªŠ¶nÈCÓŒÙÁ¡ÆºEÛ¶“ÌçfÐW[æBçÅS_×Ò4kbTu­Ç'§òâù =;=—_Ô|ýkœ—ù+Ô‘<ê—©þ_ "”_¢)û÷fò?è½±áöÈP&µ¾°ö¢òð<òø"2©ö²Œ®Ž¸õ«7éoö˜ΨQ¶¾r•ÝeýŒÉÅ”ƒóC”¹Ø¯ï0};ÁìªÀ$9bXÑX­¥÷É‹wíXHOdmHNž²$hâp•âæ‘v+Ço¥J/ ‡9¯(^‚ö´YG• Ä®µtÙÙuêE÷3L®U-j‘Ô£åÉ3I–Ç–oç‹í”dÖO”õ¯ß¥¾1¦÷ãÍ^Í…~Ž\Ô$‹À%ó•E[ñÝÏq²šýÅkª¯…Ì&D”÷Æ7—=eO{ýž4=‹$†Pta?V…¼ÏÓ‹þ¯?øCBûó¥\762¾ý`ô¯xÏ/7*mC1[£UDEXôJš4ù)æ—/›*Öu)¯üÔ¤ÀZKêrúãLÙ'¬—„ù”©_rj[¼†ë–íeÃn¥]8Q U “#"9T-e³AáE>\‹G£‘F hB‹Qe(=fI¡Ó|%Ã&#£åÕÎ5NŠ”ÕœwÎNÈà ’l—æ4ÍZŽÒOY%ç$!'i¶I›¡Ý'•T£žÔiÊÉÍ›ÌM¤ž.‰£m޾ÏhQãúŒ†×<ˆ«wHâM—X=ã‰k˜]½ÁWõ¿"øŠ¬¿©1´r^ØŒbH‹uŒía}ºhFé,¨ºmÈÚœ^µ…7–UæQéþDõ8ºï‹´™ðùóß'š@úÖm²kW¹óÙsžýäˆç‹¨7ãLhkìzÉWêc+$ÑÓÓ.‹£Åò4Ò8G•¤|à6˜—%‰3Ô ëLßj y£-ȃ¡ˆK$š3¼,QsÀ2™â%ñ- Q^¤ ϳ‚‰KÉ’òf­7\"×ï…½û_¥ìeÄvIl$þø‹@.—XÎOf|ÿ?aÿÉ>£”ßøÞe8.P ímmI’bèÒ¤5Åõ$ØË6%MS66Ç$‰ÃÏ|1çè씪mÉ<ñŸ¼|A–Àr±dѬ±y èm’&#Ò|ƒh;Ä‹Ir “‰™¶…:þ~ˆhãiýÚŠ¶žãà žÄ$lCnÆô4#±i'÷l–¡áprÆêåK˜O±Û;˜7Þľ÷+$›[$« Y,iC•ZÖiÏé›%~9ÑöüP2×'í_½IÜÞ¡ s–“g4“ç´±Âõ7È6vË}Âô ›°%Ùk5H—ênk^VwfÚ0kˆ«ö¼ÖI"b/½¬Â»ö~™7|)%0ÆW_W,Æ€IˆI Å&Ḭ¦OÙælL"DO8{ŒÎÀXd½D|‹ºÌ—S_”´xB¨iò‡Àâ¡WÚ æbM:7¸°&XlG¾]éxv"§ïÞãâʃƒšáà.æÖ­NG~qŠ6]°a”H­ˆhQEévÈz”eŽ:ÇF;#„ˆÄȪUd]“¯*¼ç½iúb>¯uµhÅ­­[•$µ$‰¥ nIz)ýA††GcÔ¦örp0Ãf e™1å¬Ú†'“söz9·‡h‘¢md¹ô<}~¤óùR¬Cê"%Ÿ£~J%·Õ˦@àµÑ+±g‹ž¢T–aŸ£É!£âãámœK™žá›¡ç 11¬JÁÅ+/UPñ*:óõO¯û"]~… àL7 ÐHÌ-&˧3ªÓ)i™qýÝk䃂ÃG‡,Ž—ä.Ç ˜A†ÉiiÏ¢„Þv~ž“XHRK¥†¦jqVÀ‡îž×4¯V˜Ü²ñî&^•ýÏNðÖÐßimôç¸EÃü[ïcomSýßáüñ+F;Cî¼w“ÕùZ?=)äJ¿ª)Zèû.à RÈ'.ðï>«B("I™`ÅP¥B›u¼Óª„Ì\ʼ=1BŒØ†NÆ–Y¬ ÆÖY M•$+0 ¶³Ê¡N@#£ªéP˜é÷A,¥iyãzÊá*ƒé%p¶và£ÆU…jìš•ª¬ÏiV1<^†$Æ‘¸ Û*š9BâHÊ„­í_Õ_,‘¯¿G²1TÓTb D‰ˆ Cë¶Âq1®jhcŸb0¹\£![¯±iE“¥˜2Ãdâ,!xš¶A5¼k9==ç“>æhÿà§l–—MÑûçß¿õ׿éDÿóÊ¿« È_fhÿœtkhäÝË^O4³"+¯<¹ˆ||tZ+>þ?÷áÞwÿ“wµ¿Õ“éñœó³9Ûïí±»èqå¸à£Ïó§þˆ·î]Ó«ÿð>ëwúÒ)>nYÞèá7rD Fª Ò”3U«”OTŒÚÎñÍ “dØu—ùÆ™ÆÌ…Sú©È´"y^ãèãÇIG® ]¢Q¡õt²žŒd â#¶UzµÑ¬5RK«~¶/ÛËs £›¢néepè)®ìêù¯îɪíýø@ÄGÅÜÌKvT#¾§Ÿ­çüŸ? ­L2e%‚ÈÝÑ.×ÊMõ±ý2LiúV£ªà:]½ î×Ì[&˹>«'òñÇŸt…ÔϹ—Fk~îägïù%¾CèÖª÷z‘ß¡©¡Ûc,tbéИáRªj~Áó¯—l¾Ò+Uo݃þPD£úÉ™,¬bÍiÏ©¡ð*e°85j@öZÚ6dŒšRw×Oˆ¶Â™T¼ª~’GúÑȶ¢Fk+žBM¼A•/Ä»C6æókœm&\ô-I]ë­Ó”A{Uq¤1ÅÙ’`O“?a–Î4«”óÓdxO·Í„6±rpû6sñ4ëÀõ¯ýSN>ùœ}öGä{7ÙÒBÓg1ñ†¤:PIΤçÏô‘^ímñ•_û/e4¾ES/T:‹9¨jÔÐu˜­Ç¸ ˆéß$‚/‘ËPr•5˜96Ò[ïà­ÑÆ5‚ñjd-BXE‡ìX÷VÉôàOùáÁC²ë7~óÛ ½êÛŠ´ž%V­1²ôðä´átRqшÞÑ…¼_ã¶ãŠm¿º,F K“MGÓ}âüÄÕ÷zœ„œÑBä]٤Є+u®FІI9×ÃÍC.È}$ñ6äƒX'ÐÆŽ¤GÆ^oÀ½÷¾Åε;”eŽo–]Q+Bše¼üôÿü¿ûïõê®^+DKTX¯tçîÆ×®ˆ‘;oìjZ&DÄ·/ö7…ƒÃ¶wväÖÍ;Ý¢†¢!jÝTRû€ Ÿ|ü}1›s1ŸÈÉÉ!ÖX5VÅ÷-¶ñÚÏw%Í-j ¡·…ºü‹ç>Q#ÒÛEb¤^]PÕbhñÍ’Ä:DŒÞŽÙu#¶Ëä=8r9Ÿ·øgÑÃWç31›jß}_Òûo‘FHÕ@ðŒÈ$ Ô‰Åb5¶ÍôHÂl¢NRÛ7%¹z“°¹A–¬.>c}þ;¼ŠÛ¸Ž_.^ÌšË(1^Ÿò-¨µ*BÒ%z¨_Š(ƈè—P:nA'ÆëPÓÝaŒŠëwrw›ªË®HrhÏmJJF¨+H2õã-„V°ûüCìÙA— ^×êC-díàÍó0[¡½5²ÓtÅÑ+¯.H¦­dK‡ÑÂzcš†~u¡³7÷äâú¶×%£Þ]aЧZNðó)¯ M§»×4-¤×ÛÐQo[œ@O<}¿¢U¡ ÐΗ¯ šš²np¢„“.æ-Õ²ÁÑ|\ŠM¬Š"åfÁøÚc›ZõmÅùŠbk£œÍTU$&NA¹²Ñ›>Ö¥ ï”cbâM`]E–³ZçÓ>z1bÑñh eª¼xúÔ¯Ôg÷Ä»í/ƒ[£ýÌ-’DÊ,%DÏ/¿Çáü€q¹­WÇD´¯&K„UÅú|‰J‰¨,Z±ó¦Ãu§F¡ƒ…81"tÝûh@UUÊL¤Ÿãg ªa¾–¸np‰ãÚ»×´²ÿÉ>‹ãåhˆxÅíÔŽrÑSüºa=¶Zlõ–…XQÍ¢Æ2¯•£ZÀÄ qT/ZK¾±ñÞ&ëUÃÓg§ èÝ·®²˜6苉8k”WY,ÖrñáSШ×ÞØ•^¿ÔƒOOPéßÙ¦qÂò|N¨úÑÐkD­œ‘ùyMµh°¶+¶ÍnŠjÐT¬4D–)HêTbgÛ“µGæ-k í8¥É YÉg^C çwKY—¾³i5h±èö}³R!*¶[väò«§ªKÝÈSÑe-ò›_êÕ«#ùgßj<.èka¯øÖTU½—êàTµõ¢FhCP‡ˆ¥Ö;CÑ+CÄÀ¸òØÖsZ¤JêDŒ ªŠª¤® qY§Æ4¨ Ql;"Õ|>âPbð„uM\WĶíHZ ’&Ø2ǹˆ5„àñÞkë1Æ0ŸÍÔõú²ýÞ{x…óÃ#ýä»ß•éɉž¾|%ÿ…‚þ(XúKhµÿÿäßÕd»îm©ðÆØžO#û eZG^Íñ%î yïwÞ¥žU´›ï_%™ Å…es’ðôéçüÁ¿À{¿ûÝù7e}ÚÒüO¸ÛÛDrÇò΀õnŠÕ8ôm [Œ0­Å/ŽñësœwdMAÓSÚ¡¢‰é<½DeÞˆœ¬é+yÝ0»½ELRÄ_Ž@c—€n½!m¨’]4ôÖ‚Ž ]öTÖǯ4]¯åÚj‰‹p‘˜çRUØ5læ[ØÍ!¯Þëk¥µdûsDc— 2õdû.ó°æ_=ÿ¾ËÙ)G\í¹ÖÛШ*ÞBÛï´ ~`‰‰`1š©­>n.”ÍeÍwW¯ø½'ŸýÕªd1¼wïã~ãOÝj¹ì}Öa_`¦SÄ@£p?ßàn)4:!èe°#`<0èÓÞ~€T+Ü«'ˆoÀØ/¤ðŸ¤Úw)µÛƒîgœÍ¿xئ}¸èeLÊu K¦–$t]µ` Á\ôÜš7šE‘` A#‡¬±ÞóöÚ° +£,¢BÜV‰›Òdç=Á5ž°¿ÉãÝ­O¹ul¸.ï®\E/^ROŸ°Î,M™P‡#4.È–ž£·uܶ’d)ÕγÉ1ëÃCv¿òŸ2¾û«}ô¿³\ü‘G”£«l\ïsüð¹ÞùÆémõˆ­§”<~ü˜—/>Gp„†yɽ{÷émŒ.uG‰3IмàùÓÇ<}ü˜Pä¼ÚÁÑá>f¾¤m+l¾&‰ŠÛØ‚¼ÀøQ›wÁ•®N7m[°߬¨fÇ4« ÞW4¾¥Lvv¹1èS%#žÇ!/ '‡ÄÏŸ÷‰gÈÖ6ö­ì¦‡d­¡qJæØJiúŽ˜%—½Š®!$Èký'¶„гst½¢nøÕ3[a&s´­`=‡‘Álæ˜m«‚$?^‘¾hqÍ uB9Ú­Œv7Óõ(—¡n1Ü|@ð ÍrJX,À{Bj»à·4£WŒ¶JÐ,ÔÒˆ%[ϘE×­eË›mC¢­h#Ë:j¸XzÆ»}²~Š£ãkCq™ÕKýj—}9Ól›ÀùáŒÞ¨ 7.0ƨȗûp‘èé|X™¥Á²ZzŒ÷äpFTED£RÕg³)ËÊ3™]0µTâ³»´f£Ë×1Ý=2"”‰'kRÏñü!“ ó!ï\ÿ›½‚z&U‹¯Wß¾ŠÍ-ûï³<]QnÉom¡ é E^NYÌh¶SòÍ’AQàФ«’'³ŠÅªÅåYçgÈm¯G_;»{åcCh=×JÞ¬ù`Ypî-¥‹—²caå AÍë^„4vž•:Õ´ùòLÖÑ{´nºiË¥d\‹) µE&b»‰GÛ¶4ÈzUqttÄÃOâCîþÊû¼ó뿆1†þƘ¶®ùì?âá÷¾§/>c-ñµ_íïØä߆—¿ÞŸûzgËðî'r²R}9<¹4–·ñ~&¹,>ôíß~ i/eÿщl“´F®ÌGä6×—Ÿñ§ßÿD"»·¶õÍÿâë¸+øWÊŸü7ÿ“<¸y‹÷ß?Yéâ^Ÿå=4HzlÕ, °ÂÇ¥$•Õ©ÖC¡é+8‹ :HDæÊÑJL%l¾Ö$:FUÅF³DÔˆ'Ua!IÙ£L‡âû}=z«'U¬ÕÍ*ÄGÔúÏV/×Òš ÓfÅ )dœ”¬SÕ&éÈ3±´ÄͬBØ®;Ýž/5ÌÖ<=9e\É?Nû$ë±>쳯5Cry5|2_êI_r5úÏÖ¯~æ^¤‰ã?ûíoé«»ÔmÛMF\*b­¾Ohš“þð_aŸ=@6ì-Ææ}Æ}^„vž PW^ߣúÖï M¥îüñ-¯;÷Êëˆ<1Š’gcªÕr¬“(hÄÕh óT˜Ä¥4Í¢°µ¨ ÆÐf­ëB%yÚ±ýƒÑþºeí§rmÙ²å.œHÏGµQˆq è£1z&Qfš‡R&ƒTO¯ß Yι>-0_ûm¿ÀþÙSÔ¥¨´º6û²,Ö`Óþ–VÃmÒÄ"Í‚öøq:Ç”)W¾ùOÈwÈdþX9xDþñh"¢”·ÿC²û¿Iú音š,øhp!™Ö¼ñÎ?Ö0Ú¦ZŸJ¶h5ío‹-ªÚJÔK‘N"FZQšn  –-ºÖs+F¼SˆH¡J*¨hlqYáÙ±=ýyÑœ3Þ¹¦ú­ßbk2“»k–¤Ó½$Aªª(hj…ÙbÍ“Ó?>¨¥‰B#BLJM¶ÂR†êµµ)Cmøj}„ÑÀŽ_2Œ K›r*9?N7ù¨?d*™ŒB¢÷ý€[‹’º7“8Xiåjˆ+¬–Ú«+†MCe-‡VyhkŽ“„I´d&çë÷¾Í½ë·ØÅfŠq¨IêÆà/÷š¦NI‹œ¬—vÈJezx®çÏÙ½EšÕŠz~¦IéÇìÜÜc:›òð“‡òêOžNƒ¾û[osýÁ¢Bt™LVKm›5×o\—4Ó®½8?•u½àåçOõùá>j¦Ó3YÎŽ4±*eœã´QI ŒKÑÑUÑÁÈzªÙ° ¬WÁ7 |½Ä¯¦Ô« ëjÁfY’&ƒÁ&ioK(7tÎO4¼Ä¿zI(1Štu øÐIËApVc/GEhL‹¤$ÁHÕ«V®f™ZiújêhƒÈÀ¶ºÛóò¼Î)³¨ïo®—ª/ÝŽœÇ‚DT—ðò¢•PUZ´¤UÄb }çó‰U­êC‡í4VÅYL™cóI¡õ´¾¥mkPe>_pq~Á£GŸÉd2ý™3ìöZô{ÜûêWe¸½¥×ïßg5›q~pÀÙÁðCVó9‹‹É¿ †÷—atÿVbxÿ½Ÿ€l›†Óµòbi.K®×D9ý“·þþ›ô¯ ¹£5‘lah?Y²µ±ÍçG|𯈿ô.ÜøÖ=îÿç_U]§rú§‡|ö¿~—ûÿà«Ü|pólB½gXÝ·j—"öUEK°Š Ž´Ih‡B3 #5厸‘âÎ’k­³ ÙE`x4cñÞu‚HÛâûWA²ÄâsGo^x¤,v2&÷GjÎ.Ä|üD%Z±* Œ¡?›’…5jŠ ÞS÷‡8úÚô 9¼1&=o°u×QÌgB¿Zw$Œ¡£É aG©æÑˆ]54¦£Å¼89bµ\qúòX'g–ÿzkȯ-+S%}–iK*ŽízÆ+¦°œŒ•?\pî+é¦YšðÎíŒú%>F¢lZ Ö)ª"1‚XìÑsdrÒ‘$PØMîÎîÍ–<Ï>a±‘` ÛÇ”WXïôiFýËyŠ €¼£ˆÅðÅ#¥¾¹£¼õë¤w¾ŽîÜ‚ågK*ðó}\´újùXž·-,woü}¶¶ !ðª¯x¬] DTªFD¬$r¥›xhÀ˜Œ }²é£Ãù¼ÈX¬yÓ{|Œ|ö},7¾ñ÷8xãîÀW?ø>Åî&m^"ÁkZæb6FШÁähä£W ~|ØÒ®—U’³Žrë°(‰ôŒÑÛ~*÷Ú »aÉ 6,L©|èF<ÊúLm–qp¼sв%öÖ¬lM¯©ØX®4¯×’û–…sØÈ¾ñTÏ­¥èírs÷.ï_ÿ®nõ1.âÅ_¹–岇KD‘\êÚ‚’ ƒM«mU‹¯=¾™qúìsüì‘sŠÝüÚßãìùßùþ˜Õñ”;_½ÅÍ÷n°}sÌÃ'ÏxôƒÏxï½û\}ó¶(dÜå´ ízxu¸Ï'qðê‹zŽMúaÑ5š¤íS Ñáâ2tã¸5)ÑׄՌz}ÎjyAhÖ$Fƒá.io›PŒh„é„ÁÙKfŸà« ·µEqû6öÊMìÖž†DÄ;áˆcÎÂ)Y:fl¯BÛ²^VK2²|Èp÷.ôJÖ¶¦6 u;'XCë”ÙÒÞ6“Ùh—/Á{Ô(›“ ¶Ï7hÚ Óï3y#gYv(ÿ7{ïñdY’¥÷ýŽ»_õtèÈÌHUYYZtuµîžÁLƒC#±4³ÀŸÀ5ÿ®¸ç’€#´4¦{Ø3Ý]U]²+µÎÐâ©«Üýpq#³šÑŒf Vaö^¼x×ßu?ç|ßï×Scú—Œ°&ƒè;|h£é ·l6tÈËݧCÐv߯n•¦øÅ”ÅïÐãá,-,Ïe.G¥8mIú«Ty­Ú‰½<"lç¸Ý ½·Ä‡€ÛØ&¿üº&ùPÚ²¤:=@Û–h”¤è‘÷†Lëä"dp¡&Q1NO*•j¶äª¯(2‹ÏSâ @\—™ÃyòEÁ  1D4(Æ5¶ckDþÿù¼×€¥3íÆJÏL- y0Œ0ÂBáyR< gst± ÓÙ’¶®´iJ©›ëýñ "‚Ë2ò•5 '·$¦XØ ¦Ë#.]~“¢7¢õb Öt(å¨`°”å{»¿Ä Œû×Xl2诠±¡o»èbTU$&qœÍJ–Ëš4KqIÊþá í¢!)2¤l©Ò_±yc—[ï2ÝŸ‘^^epm «£ÒÎNÐe˲ ôzy–B`e­òx¹Ä7L&C®\ë–‡§¾ö´"\£ë=¡-kæ{G€2¼¸©.K$5B;]rrÿ9mY£V¸þÆÇϨ} ¿¼ªibE›€K®èü^‹“9õY'IyCM íÅ!µµ„yÍòÙ!2α*„´Œ­¸<…6"^±©X!xEG9pœŒà¶åõUøÃ-:CßAÏ ªÏ6aPDõ¨ü«[Žñ•£m|‹†Nq¡z®â=÷{ĪQš¶klŠàÎ'po^s\ZuZRà™ÏùôD0Ñ`}B&P8¥—vòú«+žµ±ÐªÁˆêñÒÊW{Žà#N•ÐÔ„ª&–]1¡!¼p¸žO<2l–!΢§mjmÛFBðh’0º´ÃÿýÏþ%w¾øòß'åxÙÀ4ÖR ‡\|õ¯}øM½üÆR-ˆÇÏw¹ÿÙgÜþÕG”óùõ€üçâùO<ïKÁäÒD^ÿƒ×(ÖúÄÌцÀÞÝ]Ýžåõµ+|qû¿úâ3BGdÀþíïþÁE5Ç–ù'G¢‹šµA‰½ˆ_ $3TiÃTMÒ*Ó(Õ†¥Ä+â q£À–AG•R§^ë¡JïQ £!õå1nÚtògHÝè’P2œ7äuÎéÖwP†9gﮩ‹ùü¶Ú`DÔ’gC’Åœ¤Yè`±/6éS§&4’T•F›Êr0RW¬ô%Ô Û[øµê´-1$w¤Y¦fÑr:›JŽ?>å³v€7PÇ™ÉhÚŠ”âTÖ$r%œÉÍöŒ¸dk='û¶Ç­dE¦C™«0•¯†LoH*¦Wk™•2O+Ýž-ekv†ó µ¥u”'RsÛN%’ ®°±}o^ù¶® â ªˆIˆõlZÑë¯J]Nhš¨Æ9bH¥?²Øt±hu´ËáÃÛܹýkY yýûß$ë]ࣿû Ý¿õ@&›ïþø[“žNN9Û?‘³çÇ\ûÆ–n½º%&Ëñ2R› 1Ëå’½çÏøüóOyúì©Î¦gRŒÇ*FÅhÙ ë“ “b&”Éš ˆ¾•°ãu|ñ%g‡<½}›ƒÇOXžcì¤Ç"œŸ‘þÊ{@þ³—`ý'^ûËßÛÔòú¾ÎÚ•1™ƒq®³“¹ÜþŸq¡ØÐ÷ß|‹g÷ŸÈÏ>û@mâXÝÙ~žsã÷njýz–‘þYŽU+Õ¢"æ‘v«sYõDZã¥î7šÎ éÒP¯i¿Å—Ça‚õÂð/N‘™^1šœÔ’ÁòÝ-µµ’íWV µ pšÊÆý;¬<üœjDÑ“±—ý VS™¦ÿÖuWD½QòÆÈ`w¡Óæ@ FÕÕzŸf" F¬äR¼HéÆ[Õ“qÀÓå‘©!Y´ ö2<¨Õz8zuÂtŒ˜ÃÍöÎh7ÆÔ¯^"*1ÒrÛÔTÛ×ð“ Œ†—¸ót9Sß“¬Ãî Ýùfî[Ôº®ƒh’‚o‘åT¢¨ºV¾Ü“âà€³É±Ö+CÉ÷”ºÄGwp,#‹t]G‹UIü\Ûþ)¼ýÌ•ñËŽþ96-XY{U\±¦áÎÏåääs¼µ+ô½iÅéê5öoþ€Ü·=ú³g_`“„¢YÈøèPuõö»ÿ¶·Š;=Á`‘É6ÚV˜»¿ x~(ÓÁ*‹7vt4¼Œµ}9=üRcr&[ïk(S2Eây ˆMĈ;ï•*Æ8À°˜Þ•³£ÛúôÁ3©ç訷'EºÔút„j³^kí­\þñQ\ÜÒ7ÿé?æÚ'I•åzD.­X2¼ÎH¹oÇâE4ç,íx…K[CÙ^+ð*øÙ\›§»äLJrØZ½Ÿ­s& ·’5’Ø ¡"`±±ÅjË;áŒíXrQ¼\ð3IJmG6—O²M}b'Íä¦OuÓ\±ä¤˜ãbÅÖbÁ¸œ“6µu,¬£"¢D¹- GÖiÛ[aûúïóí¿Kw1fAÛžïïalÁÚÆDÆÃ‘ž%œœx9:šriç-Íz ù `œrvxÀ£¯>‘åò7¿ý®®®_dïË/ùÓ¿û÷Q?–÷Þ»¦oýáw‰’Êg?ùŠ“ÝÍ äÕ·X½4Ò˜®Ì’¸µV¤ijž<|¨Ÿ}ú1O=¤ª*ɇƒ®×%"&ªø=iâѵ«8ÉHú:¹ˆOô m5“rº§õüH‚¯Ô%yo•|´)ƒ•‹Zƒ9=€ç™?zÌÙÉ Ûëáz=IV×5½t&#)¯®ë‚JÄôñ‚Ú(BTÍ1íé>¦òš„Tzà M&«@8Hh8Ó²Þ—ÒDÍWn¯¿‰ÉÂüS7ªHÊ ÒúóÕ=^Äs’µ„,ULUw¦tkUbWdèK/""jÄ"bÐă—ê7_Òì>To*‰ê±Ñ©]T´¡ã2D£šP’Ä ¶°ï«Ù{†ˆƒ˜Ð#‹W-òF“¦š„MdYÐ̼dY®EHo0A°š–A‚šrŽÊz/e‘N¥•3ñúØ”…A_À¾~›k±TVIXó‰vòKÕ¨J9¯«^HªêX'U‘Ì©q U«ì³äX* FÕ–Q.ͬn¬ôX•<9ÜZ‡Ý=é?=ÐX´m¤(†¤E¡(Ø"?Ï€ðèl)‚h[–âÎ4±9ªJ4ÏH’«:\}›vZ±<:¬!I¬š¤“Ð#h/§í÷¨Ë#9=þ •›kÑßbsøžØáHÕFQEFLì®wŸ@ªAÄMœSÕÔóZÏ0 ¶°+…ÎfÌN+\b¥¸¾¡ÙÊ€z^1=:–íQ®óÒÓDX$:§ynquͬôLç5Ô-³›cy²Qi¿DÞoV4u¹³döõ‰Ø+•Wº)Qh«š£Ç»hˆ¬ìlcGÐ(±nõìþ3bÓÈöå ΞÍÕZ‘×7Õç¶Ê&bŒ©5{3i¯­ØFÄ@/š.Xòò„y/‘æh®þp*a˜¢­'9ój¬ÐEG¹tê¨\Üéñwþx"‡ûAþóŠgÏ=?|Çò7èXz¥‰ Fñmà£}ädøèÔèÞRI’DjÛWc{RŸ,•Y)yT½±åxmK¨=,Z•»‡Væ¶‹‰] LægP¿¬%¶­ŠѪQõ×ñ%´Û<»ƒÓ)ÓLÉSéèSÞ£U)¨jôJÛFR‡˜,ÅörLžª8GAš¶Ñ¶mM…M³Žð7YÅE—üÞÖD kXÌΤ.+íõF<üü ö>–ÙÁ‰žìÿÏ£I–±vñ¯¼ÿo~ï{ WV8ÙÛ£©jyrëknÿêcݽÿ¿J°þªaxÿS_I‘ðÆ_Õ¼˜õÕ²á7ÿà׬Æ?|ç}¬ ÿâÓ_\Qý•ë×.CÄO؈ªëFöþé}ôÎ’ß¿Éâõ„hÎïûFƒHx± ü¶ÓÔu(³lýbN±'ÝTš~ÔÁÃF ©/)ž”¸VðÃŵá²`ðükz{Ÿ#œï“Äw”'u]x°óÁ?ZÃh$=zJTG½º…¦Ô5¨¦L·®/Ïèvư΅H›ä´Ãâ¢â'_Ýæá¼ü¾÷‹þÏk‰¼ž–:"ê6Â&Ð"Æ"XT"^ÓpJŒ¡3qcQºì# RM(èQš–Óp‚Ó‘ª´3}©tã÷\Šj”à ÷?R÷ &èoÃñL'µê¶Œöj²eàé›Cª¡eòg·ýœÅ{WÁwæ´x¾HÔ瓦¤Ë±‚Ë΃𠓧÷(QÚkotè>mKÒ{_hܺ*áâ+ÝØÙlÕ²ò«Û¸ùל½û>1DŠ;¿VS-:&‹±HŒ,œb™PèUšúˆÕè»ßÂ^}—àïþÙ¿ÏÊ+?Äî¼ÃìñŸ3?øŠ¬­uÇ‹œÖzé†oü˜,î±<{Œ zðˆìà)ƒl?úc´bŽžcML.!ýv:£<¸O3¨Írq›Ž?g±w‹W^ù#;$zƒø¬Ãbc0bT$AÅH½xÆÑîŸQžÝgé3ÊÞkäþ„Éòk?`®‘ŽÈâæÊ»¬|û[T{GÄŸ}LqpDfS>ôûô}…GÔˆˆCIÕóØŒxlGô}ÅØî¯]eraÕTqÏŸSܽEZ.YŠãëlƒ;éºî¹œãâñ¾yi*^÷3Þhy+Îj‹Aiã™ðYºÉÝdB¢?X®j^,er@ã"E[³±\pqvŠø–S—Ðóò#²¯%ÓlÄÕñ;7~„Ùcû‡jìD¸ýðgŒFcÞyóUòñÇŸptd¸tá;Œ'« F)£59Ùß%„%›—F¤¹åî¿áOÿÞÿ ó3Ö®ßäæÛïòú›o0=˜ò‹úsNvg|ø‡7¸üÆ×ãe€·C‚&$™#-RBëypÿŸþú#ݽ׈9ƒ1bâºnjâpí;è#ý ¹(²z ŒCÄÐ,Oi–Sêù!¾] 1R 7pYŸ|¸ÁêpŒ²RëâàPöï|Yá#Ò+WÉ^ »9¢N…&ÑøøXÓÌ÷i›±œãJÅhBžÈŠU;šû+²9|›dØèéÇi+²TÈœáÀ´P3ÃsbºYE‚‘WܾIèî”`ʸãOÏ!Ãо‡fBbrô\S©W.åíV_ʶÎùvÈË;ëù¦&°´àéÜS^߯9ù³RIò^ ˆz @uïTˆ±“~ÍK^hlÄšîºH‡9vtÄlï V^ù€ÑöûÔÇ Pß½é¤cË'Ç4gK‚'7ijöØ×{ôd•­þ[ˆZbjWGbG=ÚçGÐÏ1£,kgª¡¾wˆ¯=’CÔÐŒæ mnÈóŒÑæul99;e³_гŽç‡s\â: qÛpñ„ÖGž<=îÐÎyBÌ ÅO.¶ 5ƒeÅp×3_bÚA\êžE} 9šup™õ±bDò<ÇO—ÝzÄÆ¥“rüøŒb»ÏÎÛ› ‹T£uÅp¶¿dYHöÙ):¯Dpê¦íöÊdœ3[+h9˜ãë†fà`Ùj^ª4±%X°‰£Õ.OÉâøþüÑö‰ÞðÏÿdÉ/~Uó׿eù½ïÍÒCùWÏ ï‘!‰sj’žHRଥ°‘?Ü^²ª%?ù´bÑÀÛ ÿý»°9€»Ï-LÒ*üê©ãÙ´K-Ç€B½¨;ïˆ1¨ç2ªîÜ¢/²6ôwŽŠçä».”¬…"n\Nùú$#Ø›tXù²*©[OŒ²Ø¬m‘¯®*ÞËK-ÿK´W¤ 5­6øà;™¢K8Û;äàácæ'Üûä3bðÿÁ³ëÅWo0ÞØàÚ[oqáÆ+Ø$¡­*nô1å|Æ×ñKggå%XÿÅ “K®÷ƒµ>_þ“/É/Œxío½Ë£ÿûË_ŸðÃ÷?d˜æì §iCo2 ÉR'3NŸ³6’ÄHum®õDþá3Ò¯¬\Z¡ÞHX¾’ѬLÕ̃„¡Csnbä·³Æ6=¬<énæ§;ž¨­:ú×F$³@zæñ…E ŒO”´†:ƒyÞM[ŠÙ›·oCè¶„˜9%‘²R‰J¯Z⺉'!;gž·` “?¤)Ršþ×Ö¸ºú·–K´)í‘$– 3/ú|QÊ3œΪ†êÜaû£}7/d§×£ÝÉYæ}D @Í úå€Ä?ǵ{Ìt… ŽDJ29£Ô1žŒ>Sræç&fP³‚g !¨‚”QiµÛ£†sþýù¢ˆEŠš®ÐK%'“â¥ô¢ZŽÆSzGKÊÉ€v8$;œÃ|ÁâòäeR²Óše4½ÁËbìåÂ3¶#‘uöu!›Õ`†ìü9:à ²Ý‡ºVlKsým¤.1 ~4˜œÕ~Brz@µu‰ÅÕ7ÔžìIþà‹Žña,¦i‰‰eþö_ÃTùý'øxˆ®$ØwŒ®s|ÿÏ‹#†;ß ·r•PÏ8{ôSÍžÊúêÛMoÄ`õúãK„z ¶¤ª¦Ä_‘}õØ‹ob~ôÇ„Ø"³cêrN|7\c1mÔº9•åÆo+ü|NžOpiŽŸOyöì Nu†ˆ%²¢ï~À|^É“½H¦!É* w•ŒIu4L™¥× ÏH×/²ñû?¤©_ÿÃXÎÔ¢¹²ik²é‚X½4ym¹‹Faݶ¬ûA ¥:žÇ”~jIo\¥\ÝB³S•$Ïž“ìÑŸpb -m*÷Ò5ž¸1¥I95àYjÄ©°âç¼ßp=·’œ@-Ž'nÌ/ò-NÍPGa";’|I]”L³–­åŒ›Ç‡$¾AË$] IDAT40·Ž#›Ñš”IXжs(.#Y¹ôºÚk×$ugLIypøˆµ•kºµ:’–ÝÝ'<}rÀÓ'»ln~ÈåËo²±½IÞ kœõä}Ͻ¯~ÿù¿þGûG ú¾÷ÃqõÚ5²"áùW¹óËŸâÌœ·þà{¬ln’Wyrw Å ÙdÂxk…þpÀÑþŸý³_ñðÑ}ŽËC0²€1Ý2WgÁ&DgQÓMŸB¯‡ÍŠÁÆeØ$Ç7%õ쀶:£^}‹Ks²á½• ¬™öŒ“¼)©§SΞ>£:›RîíbÇ+¤EþÍ×èm¯Ñï%ìÆœš”6˺B¤<¤iç„j†L+lÈpÁg¼Ö˜¾¡ÈÇ”©§& Öß"&9qz mUu£éDñìÛÌØª<ÇcN]W—„0…q[Q9‹.× vï92=#ÚŒhS%¨0ìaÞ7^%,k"ž0˜’4b²Ù¼ÂZèO²AÎ3cØIÌð$˜._ä<”ÑIŽÃBÁÃÓ%ÉÇ+†ãXñ¤Óhde`×Éd@§¶™¨)6’ØvOjä·[®¾àèËÓ]íþü ><š“·ÐÔ{$*z2G«µFµ¬…¨Áߘ—‡Æá• ì¬K¨[’~ÁòtÁÞgÿ'{¬Þüµ7¾Û¥iÇx2©´óŠP·cQc aéyúä ž~E(k¶³×XÍw´ ­„6Τ¯^Äíl eÓyaO{ë)ËêªÆËÆå5V_Y¥ŠPáðµg¹wB”pq{…½ã‡§ LH¬°¹=&I‡GsæË’duŒÁ{¤ôœ`/¬sy RÒ¤5úx‰Þ_ІH̤óZžûë¾Qœ•ÕޘŽçà6.¬1ß/i}Ä_è“ö,W×:ìe¢Ö#Lw,l‚‰ícC€Ä ª*‚b|Ä÷–G˜:à,l¤ÉE“E³l»o×ÑàP`H²Œï}¯à¯ý ÇYÃ?ÿ—%?ÿeÅßï¿Uþ·û)_.SzY®§ÆXYMïN*¾¿Q²Óké§ðõ¾ð¿ÿ™ç×O•ï¿ÿãû–Ìväìó-UØYuÇé×A­g­'‚µçóº‘Ð]{m=qYu¤­:_‡1˜,é$„uͲŒ|ãºÁ§=N|ʼš&P× MÛ¢g¥Þ»¤Œ6'ÜsWyTˆmÛ}¾ˆ8 ¿…ÔHwþ Ñ£ª4¾¦õ5’i‘SMÌOO™qûÏ?ÖÐ42=<þ÷žOÓ¢ ïõ¸òÖ›Üüæ7Ùyý5ÚºætŸåtÊç?ýOoÝÖº,ÿ+믔K„WôŠ\ýðŠVóšÛ?¹Mã#7ÿÆÛ²<šsÿŸüFß¹ñ†Ü¸q©ÖZ®;Bíeÿë'lLƪ˖ç·Ë—.“[§³kŽÙ}»‘á—,)4-MQi=‰$‡ n®R¾1Ò˜˜Ž0eºpi‚fOKòeAÚ$,VkA’¥¨MG"YJræU­ Ÿ YË^ätìÅ[Gä`ëÙa£Î[©^YUNNÅüæžš´ÀyÃàôù²é÷µ˜>Å” Mº‚æ#y|r '‹¥ì¤è•Zùí4å|¢Î@æèèuY¡¤}ZqT&ÃáÁ´’‡‹FG¾–?2•î8ÃÜ xvuCʾ`b'¾¶AˆÆÉæÉ)ÛG'ŠXÑîŠ!±Äsê¢E5OúÒ$¹ZMÎSÅ ^ÖÉkÇh1ïeZf=i­'­Ñ|¨û"ËQ§6>’!m±™ÖöQ…8»ªX‹okj­DU"YœÑ¬­±ÜÚÁh$isq¾P•™À™6ňÅd ×Áa­(D†š`-ÙbIº¿‡:+"FÝr QüöÜüLÇnKZ«–—.1}í’G¿!|ŒDó¾¦'{²\ÝÐÓ÷¼z_?ÄsŒ_Q\x™\”ÅÉcí})ýµkô·ÞDšROü”bí&ƒÍ79yö1Óƒ/™\ø€ñÆëKÁ4ª@yô„Ül“Ž/á©Qcp[€1¢ï\‚Fh³Z|á5QbÛjÔ ‰MôÉþ§<Üÿ1†Ô²Òôõ wƒÍÞUþüÖ?#ñ‡¨ËYz]³æLVË»Z'cYdµïc0Òç:|}GŽ~ñ€Ã_>Vé9AQƒ-$´è½ÚÜ’Ífâ1ze¸¼<¤ –Afäz}@R•DI4 ©_½)~2QYV$ÏžÐ;9ÂÌgÔR”7àŽ[ež8äi£Ó©µ¸—›™¼Úi=×ü‰Lb¥­X¾N'ÜJÖ8‘1—ý Û’á‹9³þŒÆ.Ø^”l/f2ªÌÕê¯Ó–Ö¢¶ÛC¾Ä˜‰T”âæ7¤ÍS £·8)dóÚ+ô6ûÚ43ÜÿŠŸÿÙŸ ²ÎûoÿO²¹u™$j³k•á(Á&Kyðé¯ôWÿú_sðô‘diÆdç ýη¿-w.qÿî=ÝýâS<¹ËÖõ«ò­ïSûE&M%<üê@Í8cí•×Xݺ(i^ðüÖ#}øÉmyz÷±U‡xm CEñDBgd9é;€I3%Ï$ïÕX‡$¶èI=Ý×ДÔËSB»<?÷­_¡—ç²Þëë°È ªåøéžÎîÝ‘êø¬UiY½²CÿòÍhH¹¹©Ó´¶×W¯5Us,>, ¡V;oEª  ¶‰‚Dñdƒ±¦iŸju"Ùê¦JŒ¢×Ø4Øé—åÄè1„åœØTĦÁ'‚ˆš¶Å¶-u½$ïs½¬$<¾«il,¦L‹ûÑìçC|êc)*m'Ùõ-+©öÈKÔà‰EŸà MÖ7H&c˜Œ±«k’äy7Õ¢FïgìWŸJkúŠ—¡éa2$K-&C¥—‘ˆÃ)LU˜ÇÎöyޡՍô‚— QµÖמdV‰GñuCÙv1`Š3ò[C*ª´yF;`DDÛߦþ°£‹‘Nú¢ªHB¤ÿô˜ìtÙi£Î–ÛïDŒ1$y¦]·ßüå½ZUÒaOÓAFE¬‘êxÁôñžJ{ç^zO’Ñ+]äyg’×Þêˆlwá¶¥ ƒU#–çϾ’¯oý}õµÈõW¾¥Ó§»,ŸŸvÔ¾1vØ“TÛÐÕW§ŸßÓùí'¸,“ÞÅ Önnjj"eé±9|v¨¾l¹rq2#N¦ºœ×ô—íK«’©ÍX–ž²™Ã ausë‰1¨ÈéÖXWÖ̤’ÔyM÷[N+˜VQ–6àÒXõÈk#å“Íûý¼'‹£’ts¤ÙåUY,—Z¨ra­G–p5Vû m—b›VÕ+Þ+U^H³Ï{gR®÷µí'’/ñˆeߨF%Ÿ¼o: CêðœŒI$Ëýàƒ„ßÿaN/wüÃTòé¯KÞ¼™°ùJÎÏO wªdΰ‘}sXñÝõJ.÷½&¢RQÈ0EìG~ý4ò“{p¶TIì_>ß½`i7mÓÆ#m‹¾Lûu.ëQƒªF¬±b‚ª6Hâ0yvþðî\S$¯Â¬ ˆ6‚¶Xqýþ5ûD^ßè"Ž›„_ÎVøM9æyÓCš(äx^⻾²¾ÈçQZm|…X5ªõ²ì¤r­çÁ'ŸÓ”%åtÎÞ½G´uý—äRýÑPßüîwÉzWÞ~›b4Â%Ž'_ßâÞ¯?¥Z,xüõ- mûWF‚õ_¬ ýæï¿*;ïí0ÝŸrïg÷´ñ÷þηñ>È/þן°6\áûãGTN<× «+Ò– §ÏŽX úĨœVKÒa;~z"Å]C˜ô Ëc´Z Qp§­ú\BÏ©©jKL7‹–Þ½Š¢í3ÃÙv£!IÌH­$⦞dÖ’GB—Zz¶©œ'°­ …ëF·Î‘48o©n¬)'§"_ÜR×Kâ~v‚d}’ñX׿ú×’,–œm¾«w§*?¸­Á×2´èfÖ©~÷M › ¼ÑïÎØ¡Þ ®è‚éÒž´iíºäúlª HKäIVPÙ„ Uw× &ʰÎ7)…›"rNM±¨æÆÈîæÇ+\ŒœrgT4Ê‹î^´¢ýYÃÊá’8pÒæC•*[¶ô¦ªÃ##U_9-žâã\Mˆ’M;âXâü Êï~2}Aü>ÿÙ‚#ˆQ×fbc†²j•,AF[âÍ&*™šØHÕ›r°±†%#5#0Fç½@„NÔ%mCrz$&¢sj±2Þ=ÓþÞ=êñ.ƒÃge´[WÈŽ÷h‚×Ýëo’õ’J;\!hIrðœìÒ{Øþº.Èâì1iÛ0yå÷4Cl+Éz«hh©fÏY,I³>ƒÉ5:I«jޱ˜éùØH­Ëº›ªéR¡»É“ÁCc†ˆ*éÊhÝ–²¬NÔJ)#«ô¼Q1ð5_}ý÷ ©ÓË4n¬ãå=)šc=Ê_1-½vWÃ責ÿ»Ú[éɽÿãêÃ.uA4fF"‘‚ŠK¤ö¡ã§§Iבª¢ä½„ö˜d:§?Êx«|ýÍõ› ‡Î Á-–z|¼ ?Üg2;Z ¾¢4‰>LG2µwò‰.¬“=3 ª0önµ y«<ÐËþLVãROm.Ï\Júœ˜mò¸ E ³H²P³R5\žѶQš>¿L×Ä‹°¢-[~®aŽ+C­(B£º~lˆ.°Ø1ìe:¹t‰gÓîÝú\îܺÃÖø5n¾õ·°‰ÕÓÙ-Ù¼¸ÍæÖ˜"¯ôÎ'?çó?’Ó‡·¨Ú¨ë«ëruç ¯ðû:XÙ”?ûÙOùôÓOYYòúëW¹~}›$¶úüÁS9œÕš¯\’K7®1X]§7ÞàÙWÙýê O¾|ÈéìDƒ Ôã†H·.¼ó]Ç9ÑUgÅø ‚ŠŽF¸¼½É`¬¡ZHSOiË)Ñ7ê}‰ØDÒÞDûyÁöê¦ä“5šY‰Ô å“G,÷÷iΦäï|ƒÞd„ï3ßÞ¡½°¥ZähžK—Ôí™Öa&±)1&UvO$ylÑ?ßìÉ󯥏õMLÑSÛ´‚÷š ‘YyÌ¢™ë@,&“¢nÊöÑ!Þ·z4?“ñrN̳\Ÿõìå=*[v‰ 45Uœ$Þb|$IŠ»¸ƒÛ¾ÐÑFWVT†#ˆQ$xLÝ¥¤×NqÁ“j«3³U§Ú=+­é$U‰šqŸ]5XUbtqîGU1‹¢bc$9ža_d"-kÌÉ¢#E%êy^B‘@æºý3Æf§Qê­ n<`°l©fª> FÐA¦fPˆË2¥ñ¢³R™•XUqÓjO´çY šÒ~Á`{C­³¼H‚Ö—|ÁóC[jS©vÏ8øä®¦ý\F¯]ÁŽ ‚³ZOÅ4 ÃÜ–¥¢*ÆfÌñ”.$=ÝZÉÞÁ”Eåém®èÉ£§Ta)“á†f­ï3.8[ík±6äZã¥\zÒjnƒ/•Ó³™.Y,çDA]éA ‰AŠÜéhÔgº»¶ñ˜­žkqI¢ª`‰’Ye2HH‡9í´¦üzŸ:m‹fRjÀ!ƒo£@b´ÜìK#foFõ¹ÁOA<>?ÜÅNÎgmJ’:ýàƒ„÷ÞIee”èŸþi%?ÿ$èÅï½kùÅq.ÛiËwÖK½TÉm$x4†® °¡‹‹²©‘Äý—þi‹Uó;ôµsVÛ¹o¶#´áºFåïè«:“B‹Nh ÖZíªên\gŒ‘Ä¥D 4±!øV5x©|`uo^~&¼½ ÎM— c‰dªz Û¯^Óùé©dý½ñùñ)'Ow¹ÿñœœ°<6é¼¼rᢌV'Üüæ\¸qC'›LŽåÎÇŸðëõ':?=ý+cBÿÿZ€üÇ €ÿ¿ ÿ74€—»þ½kzý»×åѯq÷gwQE¯þø&×üËäá?¾ÅÛ¼MÿÕ-š¶Á=<Ѿ81Ö€öOO™—%øÈƒÅ oüí¿F:ɨ‡ ê%=*ˆ³)±™bË€«ÍfFX¤ô ‚ÚN…(RGÆw”bj)G-g;Q¹d¾CĦ³@1¤&%:8ÜR–ýˆÔë…ØOP+¨1äû5®µT¯­£Ó3̧·±Å›÷ Ó3l#d«kzáöŸŠ-ç|4¼¢?¿s(¡\ò¡(¼üÚó°¿úJŒìdÝîDÄ‹e¨° †HËa;†ìÇǸ—›M'³6â°â_þíb½”沸°ÅÑʦm1¡%y!\ë°Quó–ìij¼XHÈÑtE³WG?8×&Ôþ µŸ+ Ò®¯]Fz¼«¶Šò;Sž®9oéuñí/ÔçÚ^v^Îõ⨒ˆhçuPQ•`[ê̑ʑ¹ŠO>Û6"n¬Ñ©44!Š}qc‘ltõö}éÜC¥¥¶Žº×ÃÆõ’à2=ÜÜ¡M±IB:XÅW1DCR¬j–L$úîÿŠäò7á†jhDÏ»»Îø¦K˜ÎÇ—±ÙÔ«ˆGÄ‹«Bï¼Èë4­`ÅŸ«È• -NMp¢b1&DqbÄh"3IýsNÎ1˜|ƒÇª{Ÿb)¤L¯áâBûÕYf[Z2–axÔYz.¾%[ßzKcÝȃŸÝ¦™W¤¡ëÒy5­¥ ‘³Òé{EÐÜÑÖµÒDã¨ðÈ2"£„a=ÅÍkâÚ—W ßÞNHœ£ÆQá4[.˜ŸœHyzBÿxÊ2KõÍÅ¡(†…M´1Vþ¼·Ãý¼Ï±ôÕ*R„V/…©|sùœ Í‚q¬XŠcn-w“mŽÌÖu“4o9œ°L+rßrq1××Nö¸-}ù([ã¶›ðÿ°÷f¿–]÷ßç·ÖžÎ|î\·Ö\,R$‹¤EŠ,[¶åö [v'Œ†35ò'ä!ò–·<%H^À1ÄhÛm›’lK²$›)‰,YÅš§;gÚÓZë—‡}n‘’‡Vœâ´ûÜ{ µO½×ú­ßðRõtÔ«€<åGô¨uÁOdàgT6¢LÚØàµuþ2Ë/à—|ÿ«\÷M†Ã¹|á_êáè±Ü¿õ%N]|–KÏ=£ý2—òÖ·ÞàÎõïéÎæ]éǹ§_ÒS—®È‰µSüà­«üð[_#ÒŠþÊ:ŸúÙWõì¹ãrãí÷ôÛõ=™ìrâ™8ýÒ'8}ñ†ˆ­[¸ÿ½Ûúà‡w‰R+šy;ÇÙš*©PBi:"Y˜ÚS:Ð몤™Ø´…±<ÕtGCUŠ«§êƒ'NÚG–ÎÒIzýEZmÒ´Åáë”ëgÁ¿»ƒít)ïÝTÊ¿´ õú1¢á¢ºz&‡ºOð…¦¹—‰Nñå »7%>P§âƒØ™KܨèY£ÁXR_Ë`¶ƒ—Z'g¶öE-4H®J¬èývW¶Ó ±.N´PE\ãÄT5Ñ$ ÁÑê,‘¬¬©ßÝ}x1½ð"ÉÓi YÃQ2eA*^C±¥Ãù1#©Yhg$YÄ¢DLlLM¤ZÔ ;YFa#Œ*ÎJi¸mÑ´P;ž ón²sˆuc-2+‘ øiÉ\O°AšZA Hd‘$j€ÐÊAMC­ß¦µ5&øÊ©&Vì°‹Y쩵FdV¡Ûc´¨T\ X7ü'Aˆšd·òo Ù §ÆZßHdÇ6R;7©?‚'û¨RU;‡´×è_| _Ö[7ôàÚ×ÅÕ)ÁžÃ$mâNJ2ì«ÍRÑ487÷æ¢4ÁÆZz-öö%O{±O}Q}Yᦂ¤½–¦Y"¿ò.®¬uõÕ‹R¨£µÐÓªô´‘eM÷Õæ…Lr6·F¤­鯬u; '6ÑȲòü=¸õ€Ý­GÒ.è’í ¾fÿ`D[¼z‰ ­HÆ5ê‚v¥lΠšÕäÛ;¸Ã©FbĶ3MºÒODäbïÁXª¨¦Œ½Fq"NWÓaO$‰Á+½–aض¸ý‚jsŒö2Í“»7)ëÆlQI]¼B@«A*ÅB ÷è[Ša¤Zz‰F¸O…Ú6pE«‚ƒ‰b“˜$C~õ—Zzî©T¾ð…™¾ûNÁ'^KxþùHzxÒ(½ A1¡‘# óÂ4ˆhÛ¹àƒ—ƒI8ÒKhŸP"‰È´2¥”Q­uü¤W¨A1é ^Da±^š7׿z£yïg9þ‰3t÷…áí@DŒ[j3Ë”è°$¸ÃíÇ1ÆâC`û`Ÿñ¬IÖÏþÒ+œþôó<üæ5Õx*«¯!š z±<˜"f—‡ ŠÑ)j› (A ¢D,_3à<£•7ÌH}QÑ´B:¹`ê@íkGä}A|@k‡¨`œ í†[‚ ¶PlœÒH£ÄMöÔ&á©ãèÞ>ñ½ÜÓ§Øýæ·˜ÝÙá¾ãJÿAÏÒ€.&È™T.¶àtkŽ_4è°6’¸€–0rމîb$Œ$LÂ6£°õ7Vx–cË©¬…fA! ˆ$ÅØ« ­éÉ BLêÆL ð±R-4?'›Ô½6ÅR„Ö#4jQ®œ"Déζh FO>ØÚ¹ ´%í“n=BB#¨ê›çö¡]#áƒjêÃ_BtþwQ$EãL#Y”*òŒì¾;œ_30.ÇÌԱ⇺úð¦$“m¼‰¨ÚÌtD¨KT ¾ÕaÖé1ɺø(Æ&)Q«‡íô‰’Œ$׫O„Æ>Ð!Ç"Æ‚c.6Go7!A¤¦)Fü“'"D2 RCk®$ÒØt‰‰0&!¨ÇkÍÎä]ŽõŽa}ÎÞþ-Í¢6WÊÙ’¬ãÌ­é ÐÀ^ïâ°K§¼G£ÿÂGYyú¾y“íû;˜ØÎ§àl ž(ÖƒÓº‘k¡l)imiMçÕ 1øà°•Ú¥zdT7$P*Î÷SÎ,%œY´R‘ /–t2âñÄQo="›”Œ’.Š-2ï°xwÙ²]6âï¦CÀKÐã~_Vª‚Ëù.ënŒöl‹]Y'ç6BZ³=Ü)YÊsNŒG ‹)oD‹|=]So¬UÚêP5,‡™®%±\#Ù~“ÒåxW#QBû3¿Böìövñ¿ú"‘<Å3—þ%»÷ßàε?$]:ÎÅ+¯ðüKOS”]=Üà;o|‰G÷®Sú½>¿õùÿŒª*ù‹?ý]F÷ QÌÒÚ2/œâÜsWØÚ›ðg¯ÃqNw8ä© 9÷쳜½|™à;·7¸÷æmn~㪾!ŸgU« H oM©c× %9Ú3µ"Hbd0Àĉš(“¤¸bŒ–e¾‡¯Ë'ëquí4§/ ªi,¡×R[z±y4¾f¡‹]èbã™”„ý1䵂¸¤™vÄÖØ¹`cŽ©=£²Æv2’vJ(*͇Ѫ&žÎˆLÓ'6F06ÒÊ{©êÆ'¢e"†Wί, µcöà*ï| çÛ{ Œ'éwÉ–ˆZÙÑjîú##} E)Z–„ªÆÍ 4(I7#ÉRª­ K9I¶ÚcüpñÖ>‘5ˆ5$½.Õ.º³ „ˆ­ÄÁs|mo”‡öð“ ‹Oa∛ßù6ÉÊ'Ï=ÍBãöF”ªl_à©–EËÛÓšÓ*ªÂ³ñxÌþÆõxJki Ã§ÏH[Òɘ­;Թî÷¨Ëò†ûbQÚ±$+lÓ&lŽ0(­‹«Ì6Ç”›cŒ5Gí´£Aêãj©M!JØ©oGR§‚W$e ¡JÀ«'ØF@'- ­VBí-í®ðk¿ÔâÔ‰„?y=çÆÍšç/ /ž.-ò ÀY¨£&¨££æŸ<‘µF µ&#óm1*0–q<¦´ D­ˆ+ŒZ‚‚4¦‰fnãež(ò4ÝNyÒeœ—ßjh…6Qˆ(’)ª5_û³‡l<.øí_¾Hè¨!‰„964(Ž8ˆ$ˆ½`ƒðnÞgÇeÜ/;ü`ºˆå„±ï3úRз‹=XL+¼D¯\- lo“u;D­”(isz \쎩œ„”Vqóþÿõïü9ïß?øÕÊpu…•“'¹÷î»äãÉôùÇÁJ:‰\ùüú«=}ã}C¦{3Žô)ÎÿÚG´³£´ÞšQŒJé­ý¡«— IDAT,R­d6p÷»ïrýíëêŸXÏýèëµý+ô—ä_ü†ž¢¿~Q¤rÈõ=Ü^NF„?;ÀG¢âTÔŠŠ*„fÇ+ÊÂM!Ûƒ|õbŠ‘D“iç¨ ˆ¸€›ÌRÏèRì ÞÐz4cv¶KH-F"èõˆ÷r;qM¦K¨˜H̉cD“’Öîˆ<ÜÔ÷¯ß“¿ãyÿ¤ÏñoÜïTnÔ¼q¹‹~jÁÈq…¤JpÒÂEPbY×XV¥bŠ'GˆlžË7b‘I+Ú‚`SÑh¡ŠH‚I¥¥>¦¡G~#©‡• ¦¤ħ²QTˆDCA©QQ ZÉÑ×ÈÏœÃw–” b«“O›Þ‰0&ŸYUCsœŠ¡}÷¦F»À7€1sŸÆ¸Ð9ÒÄ•6¨ !(–—ÅŸ>‹Z«•¯ÅÌ&º¸}Hk2SW J8³ ¯^%xŒ©ã”Ãþ³¬ƒ"ŒMèæcm{/þäÓD½cHM­m!ÞÉ‘*ˆÑ¸9˜E› ª È{ŽwhFØ‚ˆÔ*R=‰ßMÕ‹¥÷µVn"ÆÄÔnÊöøª:–ƒËzbpYl};û?ÐN¶(°Á°¸ò¼TåˆÙÖ;Zu/Š‹;šÖwÄûsúy]ù¢ÌöÆzÿ»·Å»Ð‚Q4¶àB“í ¨wª¾r.´Â:0*ZeAÚ³ˆ¬´«DXðóþY+¢¨JôÐÓÉ"^9éùE‹W¡ ’`,½XÐñDË{eçûcÄÈóÓ‡,¸=_èȤ25±>²}ùëö "’Ó¢%Ïä;\©Ó÷9e&mî²HÄEzÉ2»=Ýn“/ËEÁ‰ƒ=Æ^ôj´À¨'…X„ ª4’§×.óìò%ZƒDuëÏ©Þÿ6Z9IO§óê§(ܾù–ŽzröÔ¯pûÆëÜzç´žìpå㟒+?ó¯tt{kK¾ù×_åÁý›jŒ•ç.œçc/\âîƒ[|óû_g<“Îrm奜~ö¢~ü>+[;#þìõ¯1ÙßÇFq«ËúùK|ä•WõĹÓH¶nÞ—»o¼Áãwv¨rÅÄ]Ä&êl)^œÎ:3©’ ‚³• âçÊÖ4!°ÓF»1I¦Q¯Oð•hå¨ó]êbÜ ,¬åØ©‹¬®ž$NÛø¹G(fºóopx󖘹“™mµ…3§©_~QÉZ¢½.$ ¢J¤¨ â]E5mðÿjj/½Ru²y‡ñÖ]1q‚ªªŠDÄk­ª^æFèjP±i%´ÍP{g/cÓ )½˜v»0Äûšüê÷©Þ}Gµ,%ú諌uB¯³Äò`…vÛðÐ@•¦X "äÔR¢˜¹XÆ<5D­h‚ÓB½WLí$½µ…)KB;F*‡Í+La£Hµ¢ÓJµvB7Á5Îy8r3ŸÇD ¶óñµ'müL‚B©¶S±¹SSÔbb‹Y`ÛbD¥t6u¥!Ä£Ú[èJÛ¨–I‚)ØžÔCd¨ã-kR«ª;uŽ^|ZLLÜS7ˆˆ™ˆÌÄ: â(Å:EÒéµè®,jÿÄ1)6®qpí«˜tdå%&vµžÍÄ$±f½Žô–z¨*®¬)Æ9´û"bÕLÄï("ˆꃠ¡¡œ$ókÚYJÜJ¨gãÍ}Ý»·%­Ô²ºÒGUµ}zU¦š°yw›l6b¹“²=ÎõÁîdu#.ÓZ]ÔÁ¹ãÜýæw%évuá‘ÈÒ‹ ÝN¬Wu£ÒÒ1ß*vtÝ-ÈY—2}ð‡ïo¢"tOÓöê"Z×ô­—ê Ð›»$I$i¿ÕÄÆV"¡Ÿ©ßªJP%ô–’Œt:#Z둬ôtvc›ºÚ-ì´@‚ûùÕ‹kÅ«]ê‡ZÕ,·Åç5Yî±A(¥4¡9㬡ž¨>{>泟hËþ¥×ý©ÊòùŽžZùã×s¾óf)ÇV„_ÿùD/®©Ì”v~ÎÌ ý𿎙H¬ ݺ§Yh#jð&0s'S¼øùüΨ7^@pRªõ ሢónaÒ$Ò…a&ô'ïóßý÷ßÔ¥…LBøÀPSDTTäÁ£ ³™ã_ÿê%þ›ßzk„YåpÚœ•&(uË‚‘ÆmE ‘"J'€‰bÝ©ìÔs_³9š»-© ÚKƒdÖk¬(¢ÆˆÄ’8jÈGónæîaÁÃÙ9·^ÉÒHï>ñßþß{ÇÿAø€ü“(@â,Ög~ñY81ä/¾£Û7w$é&<û/Ñ>Þ×É_=&Ü™òöÝÛòìù ¼ø±—8ˆ*f³œ»ïÞÖÍ»d6ž°ÔiÓÍ||äø8Âù ³™ýÔŠHáàê6»;:ç–iZ„Ü©F Í¡éš7F2Á(+o7lïÙzF¢1q¥ÚÎPWÕRŒ ¢ŒŸéS-Ä?×¢ÿPÒ½9fry€oÛF¥ÕÁäµFw·DËRãq%ØÙÛ#’Àí{z8+þ½ ?¾6ž9‘Êo/ ­‚J>¤©òái,‰Y °þ¤3aeQ•T‚ú¦Ki÷sp¤ )ƨH-ÍXõÉ2E4÷=q!kt±$–ʵ•*™ËÏ%5”J+ݨ/(ú×ëÍãV1uQD¨*5Û;´['Å­×"õ‚¦(õSÕ¬MâƒC q&¾ÝÅøšìÑ=ìl‚„ ñÞ&(b暘âü©eê…E+'!޵îõèîîJ’ÏpqJ<©°õ ŒGƒªó A¬Œäiʸ7dÖîâ¢D㪔ÞxŸN>¡>û‚ƽc0<.ôViŠ—˜# Z(‰ZJ ¹‰4bT‰P” AB¨™Õ‡R"›0ÍïéÎø¶XÓJ,õNëúð#’Fm=Ø»)ÛÛï°UohÇâ:0ˆ† –ÎÊÁÞûL«Z«…óçUê‰Ì’‹tÏžÑcWÖdÿö¶nüð€æšPy(œÒI+<±]p¡Éq$hí*‘.”‰£;‰‰BC”NKÓL -TYDj½¼`¹°¡‚Ü Y­œZÍt0Þ{ïzx¨^U¾Û?ÇZ9¦*µª²^*¨ÄÁëžmË›éדerZ„ØñÑÙcžÉwXÒ%HL©WÈÍŠît…ýî¾Iˆçøl¬§÷Ø ©|-=Á¶‰UDQ_‹Ó@š¸röôÒ…óX»Éì«ÿ£Ô·ß#>~šö ¯Ÿ¿¨!62˜N᪙þðúÿÅûoý¼ö©ŸçÕOÿ dA¶·öøë¯}EÜ»#j,Ÿü©ðêG.òúõoóߣ5­Ô•ÊÕúüé òËÿãíÇüù^§Ø¡bÈi!ÁëÙ+¯rþ¥W8ûì³vo\åÎ7¾Î£ww)gNm´*H¦zÕVaÜá¢Z­ÅÙùtd¾ƒ ˆ¦±†4Ʀ™D K'XµTù>u=ÃU3¬QN>u‘$ÉèõI:]­ó’½«ï‰–9^óí-É·¶›fF‰¾òSè`®ž;+Û'èŽpâ¸0(Ρæðòy¤Beæ÷Õk%b,sÖ“$³ê‡Ô!W/nn†ÚLM鈿ÿ.õ÷ÞÄÅhþs¯Ixö2Z×àfŒrеlj1:ð¥±R‹aÁÕsGhÅÕÊho¦½Ò‰¹½¥ù$G+Ä"ic‘FüšWê‹ZÔŠb„Ôà&#F;[šöÅ9iÜÁš F-ˆj2èËàô)fÞ¢Þ~“î©§éœù„ζF2ºÿXÝü| ’ÔPÇÌת!5ÕHRoô(IM—Å$™2šˆäÁ²X†§Vh/v‰Ú™†ÚIØÜEŠ’Ý™¶Vú2Xà ‡O)ÅpïÖc ï©ÚaÓD×^¾ÌøÑ–Ìn=ÔîÙãRµ;`-½ÔêÕa&k‘ç›å–N¶Çrò®azoI,ýÓët¯*(}*dšËÝ«[êÒê¦b4|T$‰•…ÚËÄïM r Ô“©’/v‰Cа3Á$VܰE™ÒQÙL²m“„§Ê@µÒ!ï%ê6÷QAêÄÒq‚™UäuF†O&VŒNʚϼ’ʧ®´ô÷¾èdgŒþÆç2NžŠyã[N®^«(‹ Ÿû…LΟ(*.4Ì 7H½iR«‘ôë*FAð⥓FVAA0ꬊ7M ãÄá¤ø‘<æ(9鸌{9o¼u_­ùæw6øË¯?ø‰rËßþgøÿòE¼óäUÀÛ†ƒ+ÍhQ}d!NittŽíÐÍhš†Èœd„ ̼ÕwÇ=ñ^ôb²'mS+i&o>¨¸þÞ]¼ó$±¡E|ýÍGüáWoÿ»r®ÿ_ úw°àù{ ù þÍÿ[.Çßõeô –EœÅ<óÙË O õ½/_gó½M‰;‰^þü Ò;>Л_¸&›o=zr‘A·Ç§?úªf«=™ØštÐcocGwï=–d4¨1ËYœ+mŒ-tNZ130;(ƒA¤D¨Àiºr´ÔF:ó ‰‚F*b ËöåDǧˆ´!ŒAÊJìÆF"µ+^ý¼×ZŠ’£í~iQ£<—îõ÷Ñ(SßéQ û”K+¨I±e)Ý;陼 u·G49$ÝÙcˆÆSBl˜ž{E±ÕL*u§Mµ²Jïþ¾ôUìTFÞw—Õ?õ"²uÙˆˆa¦µLÒ”¼= N[´ó)i>VU•°rFC£JwåY¯„É\_,(šŠvî$/‚zE¶§÷™{´’!ªŽÑìž¶Ó!ƒö±cNÓîd+Òo­ØD]±!Wßþ7Z•¥¸~O³J±>H' ŠŽGÅ´Wði›oâã%üâ%]yf]²~ÂöÛ™>>l`&ó”)Ì?JçØð&²ÏãX30›/ U ˆOž`T«ØáðÒ*l㬠;‰(Âce­ [ÍP¾t{†k¹¼Òáb7ÒìÎûRܤ‹n&!Šôv¶,{¶ƒK׺^HÔ1t3Ûï$KÜŠ)%£ >^Þå¤KJ‚x­eUr}‰iÜÑqV±ßÛ#OJ"*Y›NU 'Û!ã]»¤ccĨ£v3Í⮬ ÎóÌ…Ÿf}`µ|ð5©oþîá=m½ôq1¯ü´J»M>êÈîN‡4I¹zý÷y÷ÖŸòÚ+?Õ~†vç$û;|ë‹¿«÷lsâÔSòñW_ÖJœ|õíïq§Ü"D^C"¥òܱu>÷òKºµ±#_þÊWõp2¢e…´Êe6 Ä­ÿ¥ÏëS—_".`Dx÷+"×¾õ׸½-‰WÕÒB4ÚÖ ‘Ti¡ÎÖ”iI•T ¤‘±<2û Ö*i"¶ÕE:Ó®¸Pⵦ¨Æh=ÓáâšX‘ùtä|C*7†d2ftûŽîݺ#®®µ><”PÕ²ùþÐù¡Ú¬sgÑ¥Å9/ïoà œ2R=w]\|câq:v›RøñZ j «÷µóÃ{’_XgúÌ ÊµjðGeÖN…TžÒ6©í©QeÑW’«EœÈ0/(‹@Ux=|¸ÏdgJ¼ÐŽ‘,B"«"š.(^Ñ¢Æ;&Vˆ„‰ŠÎ¡£ÍÒü®j !‹ñ ±BK…啱1ŒG…Úv"£ êl$q–ªU!L ÂhΉ ÓÉ4Žc¢V[ÜhF<¨é÷ÅÕÎUT±ªíõÈ‹ä“}™îhðÒ•Òiu‰FÅ£M5@²¼ˆ]^Ûí"Q¤ŒÆBQh~¸Ïhë>8 ÞÛT#‰1b%"FÔ Q¢bÜ=휸 Ã|Z}%2y´ÍèÞ€º¼ hC`®ÃË‘ $àM [9†ÍZÄjH¢ ‰ 'iùšnfé ;j](2ålÞÞÐȃAKâ^Gg6cühKÊýQñº(epöé°«ߺ*½¥ÙêPk‹bêXˆN.èñƒ±lܺÏÁí•ÒÓ^_¦½¶DÒm¡e)ƒÌh*A¶î0Þ™18¾@}€zåpg„›U×øÒ©éd°Ø!n'ôvÄ'±N†]ɶ°yE2lk|zÀÖÞ¶KÚã#e§ñá’™GQŠÕ®–U%aw¢ÚQ…V©TyA%J0"!¨_HduAxóF¥?ÿr"}6Õßÿz½ üÒg._ÊØ9€ó‡S­ÊÀ/ÿ|K.œ¶Ôµæ>3<Á 7Þ/Á|HÜVåÉÖ9ÝY¥Œ=Žº™ˆ| ƒ1 éí7öùÂß“o¾ó€É´¢ÓŽi·cÕ «zk킜9Þçç>öYé¿øé§h'Vj†#ˆöÑg¨ Í”ï¨YA4›‰Á'±D‚ihq-Qݨ3ù½GgÙ.þ«µkºyH‡÷w7¾óòÆ]®oäŸbÕ¿K½ê')þ¾ýÒˬ¯ŸdTRššxeÛiÃdF½½EÉþÖßï6vØâÔk§ë#Ç{„¥6LjØÍ››læØú:@d0¹#ž¸^†­;d“ˆVehåbCѱdï}ŸÎ㛌Wž¥JV0xF—{T q££­}“#«¡wcÊørŸÐ‰§HÅ_}È£Ã}V*CÑÊy°µI2n\?‡I•…!‘5d©ÐKÍ­h!Ø7#|ƒû‰}?^9J­çãYÌÃY­êFâÄ®0¨Nâyá0E5˜'Vè¨XÐÖ\%ÂÊqDZ¨” JF‚`ÌÈl^Î(f>!©tFÆÔ!&5 Ê.Ä ë2&ëf 2O‚Žŧ–éj2÷öOØés¿o$øF{¼®±eÕü<>ËðY ‹­ƒG›ÔÆP,­ÐO¨"ƒ¡µ¹ou˜ž¶ùÞ‡û˜º&Ä1®Û¦}ÿ&ý;ûDv1Ð}tí$õÇÿÕÜ\í°ñ+¹õ-Üì2Ž)ó&IB•¤MEé*ð5ªJkpœÞÚ%ÒþQÚÍÁç KcÞ%b¨ýŒÍñ \¨X>‹ÌŸ³¤Gu8’©±&Â{O,5ÇÚ)?¼ùeß¿Nl|Üt,Å7A4\$]X¡ÞßBGc¢l‘=³@ïÜyÖ.-2Ýž°óîFƒow;µ†Ðüf .M%ÐÆ3fók^ýêk´<Þ4P®Ò:¼âº!ݶ¼Å9a9>³œØÀ7=%¼¶šq¹g¸sgŸòÁm:RsÞA,ûq‡©IÙLúÄÁÓñgË]LðLLÂÔ$|?YeǶYv3κ.V;$êp’QÊI*N0Ž—˜d3;ûL³’ŽÏYžÍ¸ã»ú„M)­…PQ”‡,õNðñç‹c'NQm}•êæ—‘Go³“­’½ð2ƒ3g¸~ŒÔ+, OóÎ{ÿ'7nÕµã¼xå³<û‘_`ãþ5þôûdVsé§~Ž¿ö³lîðÇo‡±ŒHlBP‡ žçVOòÙg/rgo“ׯ½Íöô–Ú9v4#1†c맸üÚ/röé¨\ÅîÖ&÷ßú6÷¯¿ËÞÆ>™s$Ô'uÚAµƒ*‚Qª¤"ÏrLª¸¢N|³]hŒ\£c,$É`Íb<g UqˆÔ%­¬…/&ÄqÆÚ±S,—ˆŠ_Uìß¾ƒ+Kl–4Em?"ÇŽ“;÷)÷öçr:K¤Ó9Wj8„,{brÔ5ãL'&ªdã‚ö¥§˜¼ö4.0¥û‘«:QÎJ›§4mLîhx-ª0=,9Üš0Ùᜯ±ý ‰MÓ}5†ys•¡¬GrÈGÒés#™ ƒ5à=! ”G„•-U–jÏbÄqÄØ)“ÒQ*hœ…†tK^á'hj¡“’˜˜"B+Ã& ¡*16ÒÊȧ‡L¶±bÑàTURU9F b-6Iɺ ØY û#Âx‚IS¢Å!ÑpØ\ËyÂdB}p@~¸K¡êZÕ„ÈÄ$Q KlR"½q÷ÉÖ_&;ñ6Žˆ’WVLo3ÝØ¥Îˤƒ`[’ÆQʽ=|YbÛ]¤×Á$1ÉÒ2’&„ñ”X„ÞÚ­,¢m!M#7xøö´®‰:Yã±XÕø²Dæq #,?{žöêûñ]¨*ξx›DŒƒåÐFìމn?"<Ú£ZÍX.Ñ?¶ŠIc²P9¾tŒ¶gÌFK—ŽÑ]h£ÎS»€ÍnP9Ê©FåÞ”:¯éõ²˜´2ªNFçp‚)jZÇûtžZ pž[[˜G3’(æpa³˜V-$Ûê,b²Ö%l¼§êŤAˆ¦.òX©§c ÏMH"øö;Ÿ|1á™g2¾ô†gã±çÔ)Ëç~µKYþè&ä…òÏ>›qþ\DQ~ÀÏiÚœ‚¨Á̧uò¡\YðaU,/¾Y£?¶oj‘ûFìí— ûiã=xdøáí-¤ù?x¯ô»)žYÃÁ¸BüWUlíšóÇ{"W7Pa¦®¹(§ .‘æÙ 칌›³—{~Êï+i+å¹!<Øsõí|áÛøö»;ÿAçæÿ$HèkO¯ñòo¼È½ï=àêëWh-wxñ?ÿ¾ô¼õ»ß!ß²Ðiq¬ßi V'WWi- vžÑã[ÜšŒ™u:œ»|ŽV+#‰-ï>bãá½Õ>«g—¤<áV,Ñn€½ŸÍ¡Ò)Ö‘!Ú.šmÕéÓßHjÈ ðV9X‹©ó ëßùb::ê=/¦ª ™eôLŸj!^(MY=)@:·fŒŸéEí|F4D6ÖÙö¾ìÜØÐeIdåT—$íCHŒ5D‰¡ªõ©ßäÂÓŸàkñ¿põ;_`Ð]à“ýNž~Žï¿õ}®Ý~‹lpk:xEíø¹++6ÒªjîÖÐì÷"-©“ · êØ5Í’ijñ‹¢¤Ý¨çµZجÃlº)&ôfجÝaiõ8« ËH]!Q„Äk,Q”`[q3! Dtôà±#ĘÒ=1†P;öß{Ÿ|k§1"ü‘VÍœä* —Â>÷ýW^f1QÚZ@…ªôM”P»9ãMµ×ƒ‘EM¾7!LkTv¡…égØÈªµ„ÊÁ\@BÌû‚þHÇGL«JãðnÛ ¾›²×ËX­=©ºÁÓJPåÀ&j™w†‰c«¶t¢>¨ÆFª¼ ·Ž¢*ˆÚ]ªØD U/‹¦"ò‘—µ:C nwIú ïщìâ"FŒR;Ñà º³ã ’&¤'¯.+Šh^?x@YΨqMQêJïòó0+ˆgR%©æ­LD½Š¯Zž›2}´¯&‰$Š,"ÒpþçÐX¢j XM×IÔˆJЦóÛ¦æø0ר™Ž|+ôÉoŠ&0òŸD|zÑò×ÓZ¾tP뀌Ï,¥œkYyc§Ò7§n9“V™ë±zÂKÓÇD(+¾d#é‘„Àݤæ¹$gó}¼yõùnç´îdý:ç3{ï³îöÈM‡J–(yšš3Œâ±¼×¬e{ª¨dµÃ^ïû6èàñ¡FUåäÊG¸töÓºrlp÷§|ûÏ%’¬×èår«nK±·ÂÚʽvóËòöµK–©þüg~“ó—^á+_û?äÍ7ÿT‡ƒeùç?󟲘¶õKñ{<Ø9€Åób¼RÕ#m-ª|î§^Õ¥Á_úá Þ¹y BìˆòšxRRû¯Êŧ_”_þi]?~ZZí¶NG{LÇ®ÿàûrëÝ·uwgƒ4n…€Ñ%&ò-²º+ QH±!’F’³5®yœA$Ïfäí’Ðé ­2/¤±Ú8%”…´Ò­VOÛe.^7\Nœ&h5UOAÃU–VŽKœfí¶díŽïŽ?ªð§á*"¢Åá!>/¨â/‘|¨Î%N QdD4°³x\'­¾¯Çœô¹Ž§ìç•"“h5ÎÝÝç|ƒ»¨ò’€""·Rì°…QõP9‚ ^TÅëч6®Q»" „Ä’¦1IbÅÔªU7馬:§&5Qо*Ö*U™©e å‘̨ ±1b@ëàdTÍtâHqU—8õG&…M×7Š16’¹Ð©Dí®öºC4‚€÷¢XL©ú€<Ú™åH5{su±QœLÑÑDÂxª¢*Òïh²¼LÔï!ñ#fª„he;+Äo>Æ×µN¨$€¶Œc ;µœ‘>j¼Ú^‹áéuù¿Ù{³X˲ó¾ï÷­µ§3ßs‡ªºukêêêꪞ›Ý"ŦH‘")Y”D*,Ƕ€ “ Ékä-ÈCðC`v€Ä@dË“)ÖLGâÔ{`Ï5·êÖϸ§µÖ—‡}nu·%QÍä!ûP¨ªsîÙûì½×·¾á?DI¬¢È|û@ç;ûÔÓ9ªwZ$+Kõ:j²D´vø¼TB x/ù½øy¡¦ÛcpûcÑT€t©GÔΤ<˜¨aå‚rpcS5x’^7/ÈGcZÇ¢*ânÝWÛN¤<˜*e Ç–iŸ=.k®úÒâ…ßÄÎ;·˜îÏ!¶˜vDÿÔ²¬m¬ªD1i;_Öä{SÜÝ?/´µÔfxö(RÕÌßÛDH邚 ѹfý½~‹å¶%´¨½ãÎ[wE¶JÍÚ™ÌzÒÍèÜŸ©x…³CŠy›ULÄãæÝ|Œì·¼Š‚)[7 {í•Ó§[üÒWN±<ìòö[Sùÿó'Rý•¯ © 'ÿü_íkU8ùå_êêcç™çªu}?8´± 9:4øÀk¿ùºä£\éðôßyQCä•ôMªY£¬4ì´ØXê#÷F¶ÆS>óÂOpáì9}ïúU¹tã:÷v¶hW;âÙ/§}ÿ>éþ¾KC²½FSÀ.*,×JÉW–5t—DO½€¦ý‡iU’ %Ž{”0BT+&ì¡Z4×ÂÚÆz•´)bh¸¸Ùõ×ÑÈJuò<¼Šq^¸²ûmMã\<ú"ãðaW;-+w¿õOõf¾)¶7DÊZ{Oý‚à¯ÿ_S½ùM$½ø„\ªºÔÉÓº¶t\îÞ›+׿«…nÉÏ~öo²±qН}ý7xýí¯ññ‹çÓÏ~V߸þ†|íµ«UÒR°Þ12†µþ_úø§X.óûß{Yß¹uc…ã›uWQ]c¬ÕÇ{AÎ^|Q×Î^‚wL'#þè÷þ¥ÞºôžÄ6EŒ! V©ÌfëŒë‘oKê b×ÅKçaŸLå}H†·ÊtXãâ 40!)zJ™9mʼnûK¸àÕ/ùè>Þ Ó]DQ , ±~ú""±¶ÒHâ$RU=´/&òNMµz?6ŠAu&’pHb_ÍŸ‘B3”vŠ$1íÔ’Å–vi7µÒø‰7žÌæ!+·ùõƒy…Kdÿ ‘ÑB®´r5“z®£j&.øÆØ !Ê:DQ‚ñ^Ñse]µiK8T÷Ñ®Wr0ÔFp-çHÜdJ¾»«.ÔКœ&Ê +:š Ó9Mò‰˜¥>S§°íÕƒ]ê½}Âl®™Gb„4ãzB­i¨¦2°Ûš˜Dœy„ÂÇt°k©‚×î±é_ÓlГbw¤“[÷È÷F¨ªDí–&+Kâç9Õþ¤1b4‹Ñ°ªªóµ3:ÇVV‚ˆ´Ö†”£)»—n4*IQc¦«¾:õêÕ“%mé ñW;ËÜl-Q`xbºÇz9!Våjk7ZLjƒãXy •¤¦Ôœdfž'C½—r¥·E;›±—ˆ‰Øª-×òãSŒÆøP‘Ø”#+çyôÌKœ<Sßÿ=Š7_ÆÝ¸J뉧¸~ü9Êèg6žæúÕïðÆ¥o°<èð•¿þ·ØÚºÎïüÎ?`{÷6_üä/ðÒ3Ÿá[¯o½ö'ˆ5XÛ¸ÐUÉp0àK/}†#Ãeþð;ßæ­kWH­-Vá`>!+A!ŸCw9⹟ý5Žœ}’¤Ý&Šc¦“—.½ÎåKo°½u—;µ6c\¡ÐtS_ù.^Z´«9©Ëñ¬â̰iDˆêÌ‚&GÙàSÀ²ã™ =VâÆpÏϰÓI£š†Ò9r„å3gc9ÒF4ìû{ðb] u#êûâ錬=lœ*Š +àëšý¬Åè±ÇÑјío}0­èD="£Þ7±#jŒm‰,6‹ÕvR1Iã{ãªW»FvÖ7ŽDæa³6Š "B7è Z` ­ÈÆ–*,ìWh’›ÚyF;SdZcÚ) ;ŒŠ KYBž“´2$µ„˜º‚©/)ƒSÑ I«§qÚnœ;="c|x¸§šºFœ{Ÿä¯ žþ},dsÎËbhÁ‰P”Þ9DU'{â›IêüÂÄ4 œ#]Ð>v7è!õîåÎ.ÕdJ&–.í 8Æ¡¢vûtä>¥ÖÌuTútLÖÄŽ:à¢Hãµ$K]’¥.õ$'ßÚ¥M©g9&‰‰ÚM‘¬>Ð;q”le@(îbky€ªrpã.ÕxF¾?æ¨ ×Ú(Â…ŠÂM1ÞÐ×A=Õ¸™…²¦ÿÌct 1³œVQ'%ù•]ܽœ<¯‰—Z´9Fÿøf´¯7Þ½+>@ÒÉc¨f9i'£»ÔcåØ i7û “wo‹Ý›Peê”nbP"˜Õžƒ²ÂtÒc+t; }u´W: Âþ[[ä’D¸AªÑ¼³Ÿ“œ’ž·ÈÓ½)Õ¼d¼¹‡óŠFB)¥m@ë”râ Àã÷yñ'R’Vª¿ûÛcY[IùÕŸ]'TÊ¿øƒ{\½QprÃðô“k»Áù/=ÉÞµÞùׯi¨ƒü3£k¯Ý‘ç.\$«g66H²Tê¢&¯ -ó’Ö°%£%§EâÄ8e~.A3«Õ­åý±t×úd!Öî~ÄÒN"UØ]¯¨ó™ši-Õj†IÚtn–ØÍ1-u §­ÖúH&d£RB4C¼ÁWsÍ™ˆ`¨"‡Øˆ¥j ¾3ä`Éã4P?%W/ßÑ+ßz‡Ú}˜“%òp?ø(×ùáÏ0µz¶ŸÉS+†™Õ¡µØ¹“Â9ŠeúdÊv$¼ÛB·ÿÁ™—^Ë/hý½5yþØ:㟜 û.Q ¾âòî=RkU+ÅÝ~G"ëhžHš£a„u9…*Fp!’€A4(Ò‘`†Š:D:bh½Ï9Ñ›°E…]‰· "7ß>"ÙC¤Ö H¥5*š„B»M "G©T’šù¢kè©?ަ9#‡<‰$ŠÒ(!IJW1­K6gGX9+N4*«Ú®¼ôlÌÆÚ²–Áq¥œÉÌ/©êÊ–Ô܃r5¥\KµÎb©{©ÆÞ‹­jÄÕ¨5è_¿ŠTE“[W>Ít~lEÒ»}Sm^‹)šBª°pÐ_fûè2&8Vó‚#ýã”ÇNa£½|†{a‹w6Ÿ4êÐ.!tWÐ8R)sD pñ¾ÒDSI5§)Ik O®ýœô’G@æ¸j›½½·uëÖ÷è>ñþØ1¹òÖ×Y -.®|ŽKY¯¯©‰¼ÜYz£±M¹R/]{OЉšnGdЦ2†ØÕÚ‹:§2Ë1@$F"cT¬ Šj ø€/j •ãaß©!‚~ÀÝþ°Õ€¢(¡Qr"¤VøÄ’p®oxu ߟ¢™ˆ¼´dy´mxå~Á[£¹ÓLŒ …úêX³s.Îîq®ØEMÐûi—÷:+’ÊÉÙ„ã:Ƹjû¼i‡·39R87ßÕ«ejϨ“ÓlË@öãóìiêˆ˾‰Ø+cÝ-Œ¼8\1g©sŒç.|IOŸ;"nÿëT—_Uwý ²²"·{hÝ{†áÑs2?¸Ï«¯ÿ矸¨O=÷¼\»úýÆ×ÿ ˽Uù÷>ÿe&ó]þè;¬»#‰£èP;Iœó {}>ÿ‰R¾úÝïqóê&}õ#˜xhi)†àj$ŠX9ug?õsº<Š,a>sùÒ\»ò–Þ¹}UU#V“ ŠDTâ4U›ÆÌ,xU¼ Q§§Qœ¢alÔL\t¡K'² +v2ÇÌó¦HÒBvˆg³iŠIS´H,B-¢!²ˆ‰ÓPVB`>›áœS‚J=é!lYdzcŒš•¡DËCl¯ƒŸåZoïPÆêJ£€d­©‰°^ˆ¢Bóâòù\tèªU/ý¨­©$hDL„éfH+Á.õ¨ÇsMºÇVDŒAUÕ—M1ä™ÜÛÁ/TЪɜz>oâQ–RÆ ‹Iƒ¢RTj—“• I.x+¤ëkÚZîI½s@ky@2ìc\MZäT¦ìÝQÄJïâÖŽ¡Xp—L¥»cÙ¼³§i¿+vÐ¦Ê •yE]×’µ2í {Ò_꩹¿/a<§êwÈæš¹ZŒ5Z{•y¥x ÔV±Ãv¹OR:VÚBûhªrºûî²SЉ¬6U¬G­!,e°Ü¢½Ò¥Ók*Õ8g¶=aº7ÃÏ+J T&Pš€¡9÷âÀéÒRÂO}®T±¼ûF­EäÅ;œ}´Ëk¯ÕúÞ»#)JÇ Ûá§~úgž/TT:¢ÒZâØÑqñû¸j½ 0d¤‰e2­t:«›W±‹ÑŸ¨s*‹]âÃ9°xÑd?Ýv¢ÝvÂ4¯È '£qÍÛc5X9½<äôÊTH"¯¿ÿËòûß¿ÎßýÊΟèóµ>àÒ1ŸòÂÅ#ÔA Úxzv[‘”ê)ØåÚ‹©¾B[Þ¸²Ãå›û‹Tˆ4”ÃÂCDh¥ijug/—øÏ^gT~TU«’çÿEè&ý¯ý¹Çú+ ÁjÛ<ý‹OIœÆüà_ü@óQñðÜ¢V,OüÊs¬^8ª¯üãoÉÁ½2žzøùýå?õ Ÿ žÕÜ|í&§mpüø1\åÀ£Æ)ý³°óè­9áò„•Þ€•ƒ–â‘ñŠê¬“3o•"•bj0i‡tž’^ÞE'ŽšZ{¡”±™ªªˆjMÅ%à“ŸÄ JÝR÷†ç)Û+Ìm¢,"ÎÚ\ûæ»Üøúkõ>>|ŸY`„QKýØòüZ›Ç–ZlôSŒS¢i ´5eâõúçûÜþt_6;†Ý|W§ÿl[èÖÿçÇè~e ogò+ÿæ ®÷™µf<(öØÚߥ(e)šOyô8?µÄíûË7KÕi%ëõ¶FÁ &"¨ÃŠà4Z>,G[vcÚˆ¬I#*)‘ÑR0ð‡êUª©(šÉA¹x†šHq€X*M$—CX´Š *±µêUÅZK/mY«½´M¼Lë’y]jYWâ¼ãA,lŰìàH©º\iSYà•IQ×8T=©T’©¼A¼W&A‰MÓëPõ,ófC \k‰k'tîî²rå=’ÚŒ!,ò‚C’½ÔÙ!Uº,yä¹×sÌ£©K–‹Šã“’ Álj&®äÈ©¿#¾½¬ûÕ–\ném¹Ž,d'½V ¢qÔ•vÜcE†º½ÿ®ì§Q’ð³g~A»éó2q]M’Dêò>³Ñ³Ç;ó·™ÔIÏÈR¶Îdå=3ra|U·–AÄÒժݗQYëþxWê2gó`‰#h%ÔÝL]+•ļ󪣩D.`T16¶MTvPÖaR5ÄóDšÎ·HC¶MÒà)x¾_ˆ¨+¼D>»jôÑ•o(ß?Pú™ÑO#9— ?9ym§Ò$ˆˆóHƒ¥RC0–v¨9â§œ¯p¦ÞC$ð@ºz—> ²&õSb úVg•«íUéQsazOWË­Zeg&§y#¶ZÚ;œHGÝ®Š"0/…k¶¥Vc1õœ¸Óç¹ó_Ô³'Ž!½;R]}“úå¯jOänïÒ~M—WÏÈ+ßÿm¶¶/ñó¿ô‹?ùo½þ&¯|÷»zt¥+Ÿþ‰‹º½?‘¯ÿmæy‰5öa[¦¬Ã~¦?ÿ™Çèv"þðë×åÖæˆ$3ø÷ÃçÃxâ\!µ«9~ü'7Npñ‰óÚî´+L&zéÝ׸~÷ŠlnÝVS–XiL!ò­"ÄY€]·‘4Ž€”€¤U›¤ÌTJ)V3´+MÓT°µ`ô}YÒääv†1V³²%¶ŠT¥q.Ay«Tgy7ˆ[NÕŠC@b£jšÄG«[Wºšt°bÙÊ'Rz‡D +O½HzþQü{·´~í²ç¼ddÈb’ÛMî’1‡CQk°ñ&®rôZ ïzî‚ IDATilµFb’T« ˜¼“W*”¾éë6| ‡Î+m¨$ H*ÄÁãRdž‚oÓΈ“¬Qîk÷íF#œWB=„V%Œ&‡»Ãá`6WªZˆã&ö|€8l[ñ OÔé’ûdŒl[ºaFܘ‡‘Ä -1”¾ÒxÍQ‹,ÔºÊ mI8( ™äžNïKkGèÌo³[Ed ¯ž0Û¥<¶*ß<¹7‘‹£k¸ä&µHä—H“Žô׎R1¬`EÍ&L&R•J‘µôø*¥‚쎈¼Ç”µ牬Ŷ¬A,‡°•PÔjO錇ÈZ¼ ß‘æ~LjÜÁ»e3 3åŠsŒ¦"/9šÊÇW‚1üpìG³A*¢QzåF<`Çty+>ÆóÕÖýX6țôÙ”w’ÇeÌ3Ó¹Pìs£5äú`Cîº\—期¾M$ð˜<'3ÿ(Ì.»ùÒe'eÎNʲæ~+c&»¼r󫇟çÔéS$g=àżý:Ç·oQ\ûª„åÿSg_`w÷¯¿ò=:.O=û<òê·_æÂ™rjc#+\ººIÙÅÑ`’ˆýQ%ï]ßå³?ÉÅÇŽ°¹ÓÀXc+ï àÆÍ$%‹•ý#¶ÇTe-çΟ¥ßïb#K+ëðÿœ<>žË×ß‘W^}™íƒM¢nëÐcL„˜¥uaË¦Ô‰Š€øcCo ÆKµ„¨™f•¢ÉŒÈÕD5tFmLÕZHUAZåQT.*­J˜µsª8l-FrRUÒ}g*“ ºÐxzhê—É~QSEÎLÓ -Ìöž0°Ú—¦ÈhDlc³¸Šà#C0 z‰0-i§1Ö+óQN”yLlÉi2•Ú”5Z5Öbâí´(㈺$ÔU£ÄÅ$Ë«h1'¸ m·H“6ñB¦ÚFq#q¼èªÖÓFŽçaéj‡­qNtzEZEEkšs0sÄý¸Š½û{Œ·ÇÛKôŽ$¶è-µ •“ÖJ1"Å$g:ž“×%£É”Â.ßžFkøÚòïܧ¬]ÈúF‡VÛʾ»Å·_¾Ç»ï¦\<·Æ‰uäoL˜ÌJ"}àÚ«B\0AB ;ÛNfsO’nl9T„¬]s樗,1¡Y{ãk…ž<ÊÚrçÿ“,–à”Ñ´zH–ŵX|$|ñóçåh¿ÃÉÕ5òÊñ…–øÄ“ÉÁ4çôê*o^º!åÁί¤ü³—·¸÷±™<{öyµpo'P‡9ˆð×¶©*Ç'ŸYçÅ'>¬ó>ûâIZÖðåÏŸ“ J[æ¥ã×÷]6·gÜØɬp? Ý$ÿsð’“ÿ¸u€ü•€<þ¹óœzᔼõûo³ùÆæ‡ÎmxvEÿòÓT³JßúW¤au(FРzæãgäñÏç½?¾ÄÍïßäù/?CÿH—¢›`“ˆô~©ÎÈ¡Ÿáü€úþœî×ç V{ìŸvZ‰—ƒ›cí®µH{‘d»Oc|˜2¸û&ŠÇi„æ¹tÏi]9ÉŽ­ÑÿÄó˜4!%X UøF“!n½z{7ïñüßø4q3¾wÀûeͦ?Öä…µŽ «gû½D,‚—0­™~ʳõ3)7ž2:¹Âî«sýËŒþ÷ûB¥HËèÆ?zLäÓmúÿõ„ÿtô1][ÊäÎt›Q>Åß½…ß½O§c8óHO7N ¥ÛÏŠœ›¯lRïLu?ʽ¸«q¨¤ãr"_³fá.ªø´ µ ªN•"hÓ“MÌSb-¹¬‚—i0  AEbiK£2ª£bNpNÒ DA• M!»(€ÑCËB"l1(^܃ZTJQ­D±Šàæ°Í#=ÒÅèµ2¢ Ü¥á”FXžVM‘ã<^D÷³DŠDpF°Þ¨Á/ëó’µ¼¢_9ºî0t7wÿ euoQE‘Ü]IÔDZ„P)k½§I£¡ô²ã¤&ÖY~Sòò>wŠk:b&ÝÓ|þÌÏaüL·f…Øè¨îî^¥ÃòÚǵ•FhØæ xÀ[wþPâÚqæÑ¿¦¯¯Æ2kµõ¯½SəɴîiS%Íãäé2yûèÂÑAZV…ÜÛ@”Ä:iYÙ35d ÓÈíŽT|¬%=˜bªš(nD=‰ã¼$؆±c|`aáÐ诩6BF%ø€·FÏwE>ÓWnäðµ ã*HÕŸZåâjªßÜwòú4 (6h£ _Ôy"/Ôˆ~©¬…‰^¨ðh½#V•-Ûâ:'5 O÷å‘jг‘^i/q·Õ§ž³Ó ÇŠ“š›'ÏíÖH¤sÀ¬Uƒ*Wͽ¼Ü]#¶¬´czüä™_’3K„öeUWJýÆ÷)_}Yës_ꙿÉý»osé­¯1<½Æg~úóÔÓBû~K|ìô‹Ï=-«Q›¯½u‰k£=€¼$Ñ ®é'ž9³Wå•·¶ùÁ›Û„ Ä‘ùÓV@º@^7žÚÊ2yæcOðØã"‚ÞÛß¡ÕNåøÊš^¾y7ß{U.ß¼Nd#Œµ”2¦ óCIŠC2õwè&ÖàêBìTM£B(Þ©­*I«šÈ‚±8m«)”È·ˆ} EµŽgâL¥M•PKLNB­iÈ1Ú¨î6“yÔ§6}UŒ &낵ZGM‰1±Ä’ÑÊìÉ£DŸ{žpg[˯¿" ˜VŒ‰"È"Bdð­Ø4ߟ+b–ºÔ½ÖÂÈöÐ[ )Ú¢>:ô50£ã 6NˆŽ#tÛ„ÙXÃlÖÀ+q·Oä›ç²I Í¡ a>G˪Q¡r?aºH’f{H|_¬é´ñ±¡ô…~ˆß+"V;âåÙ4_*¨˜à‰$°•'ܧĢT‘⢅¶&R‰ÁóhTèz+m ¹oà$V™¥ÚÝA5<4€Sç¨Æj+/Æ+ÑÒ;쯮¢U¥~<‘zgWÝlÖ Yņ i} @‹èœxÓU …8_é6~Y<ªy£ TtZ""DQªÆXÑ÷åÒ>´¯ÊB&;¯‘3b]ƒò¶ èK«kÒÙ8¢X#“»;ØéÍζ§ ήJüâ#ì$©nwex$ 9–ɽ§t¨UDz­©¹zg¬åÎ>~­-ÕÑ%D7&A:ÓB¥¬ïe~ú(vVmî5‘¥óÄ)ú-&ïÜ’ý;hd8VÉú2Išh¿,d°ÞÃtRv®ï鸀Áú@žXÆã’÷I±û>ùxN¯•ajÑÖr‰dîö-AÑàCÓšW2Úãct4žÊd{LT«ZÓL!ÄI©±"Öˆ–¥ï›XlŒdž²ð,„Çôå.ÿ~5"’Y«Öˆ¨‚© ÛvÆkゥ[÷vsÿöž–'ήñ©68³1@Uµª8Vdg<µÔMƒÐ‚j ¬Ã‚ƒ £Yœ AµJ¬1‘K¶¥ß}ûžüúWß"Eå“ëò“OžbkâI¬Ñ,‰%¼?ÇUq3ñ¿÷;eÍ—?ýH3•×&ÿÀ¦bC7‹u‘½KÊî¨@Dô?ûï¾ÊW¿{ë/Ýä¯Ü¯|íŸz­bHoc‰+¿û6司±høÆ ¾öÄiÄéçO’uj¢8bïíD;ÃçŽãô2F„`{s„ŸÁ8Zc*qœ1ì¥KD^)Ôq\gô¥FT‰UAÖ)t!ã9\™ªm¼N@b@ȤOdŽ£ºEÐMR¬1j|Ì5,ú˜Ëí6eðLê’©ŽVé¥-fyNÐ@§Û£(KLö©‹õÕJŒ61,:î4cȋÞ®a¡f~ø zQf&P,¼«0°ê o[d$ľÀ[˱YÅéÝãÄPH} U;¼îwÛìuªÈ’:%­•¶«8Ô«àœiÎ!—@Z9æÞÛèà#C&mZ¶ÏZç"Ƥ¤É ¤KǬÞa>Ùæv~…* \\ú§û§d-6wïò`´ÇéõGie=®_ûCö¶_aíèÇ.o°Ü:Áó'ª.š“ß¼ÍkGîò{Omð™7åÔè(që.±U#²ú€n¹ÃÈöí“tV°I¹³P9u¨ÉÕp¯šãûKLƒäEQ§ ñÖ>&/Œ¶‚1Û͈¹±‹-Ô™¤Á`Lc~ˆj…w÷6/- ?}4â›cá ÷|cÏ!?¹œbp¼:vxcˆ¬A£€xKpˆf5£ìuzlÎz¼–®ó|¹É·Ï/O¯ñV{¯-Ÿá•²àÅùîñØt—ëíQðÜ0[¬°Íÿ(ƒé:wËŒ»í]6Ú[D©0[œ39W¢¥í0­f|óúobô¯sfã1|ï:ñ³':ušüÛߤm±rô,­Í7¸{ë&Û÷¯ñØÙ§ùÂÏü<ô­¯òî­»|éÙç8µ±ÄåÑ.Š‘–ÅWÞ¿ Ê·ßÞ"D]XC~piXç›êö\O³Ðw¡È ^ûþ›Ü¾r‡>ñ,wö·xý껼pêqžú N®™ç·wxó­÷ؾµƒ/zx[¡íŒ¥ôSòò>ÄÚ ð>‡ DeM\»Ðì©"¡Œ%Î+ìBjÚ›‚ÚŽõ’! 5‰›4°­4Þ´ê­¯ˆ½‰ÀFØÁg•¨(±i‘Ð&q­+Üæ6rõ.öô1¢ §ð×61YLÔKñª Ú vÊ\3X¢N"ò¥6u?Ljñ¾)jEˆ¼'~° µkÈÚE •@U¡“¦•‘Ø ÛNÞßëë¦8Tí @ǤÍÅ Î{|dc¾$!îö(|ά7É–Âð Bíq8$@2óˆ‚S8Û«x´[±.uS(X ©õø²ÏfcL:À(‘‚UÈÄ Y›íu¶Û}b› U8H3t8d¾÷3šÑ*XCÛ$yœVT»{p°OÈKtZà÷ÇhU7…Õáð‹êÒì.i¸LYœÀ» Ê@½ºGŠE‡]‹™.&®`k0iܱ;ÃS'H[-ˆ óͪ»{ׯ,¿ô§—Ø™ÔÞ‡Õ¥BlÀJ›Ðf°§¨‹86Ò¼ÄV5f^"V‘!º¿ß ,¬iŠO#DÄ’õÒII1)ˆÅ¸š0™ãú]F zwÌÒ‰>G]Á]}Àöæ.—ÌJ#úà<“²t¼M«Ÿ‘äŒ÷F¸¤3b²ÚE∴Óé·‰Ú GÏEVª!ÅÉŠzgÎîÝ]¼U\í™—õCZ¸1ˆˆDq`á=¾gšþÀâº$AèT`a ØTzФA”žMyæ‘Çùù_ý'×2ÀðɧN²Üo‘—5öfìMrNíYËdê©ClŒÇwÞ:`:Q^út›¬e’»æ ¤‰ˆàÄ5¾ê0KžçŸXæÉõež>{” ƒNüÐ(ÝVÌñ·žçñ3CjçÿÒåêÑÕÈ_àí¡aôòQ'ò#ô‰?*¹@ÓN*ݵ.óý¹Î÷æ:Ÿ¨KçHOó½³ùÕÚ%\E›j^ÖήÒê&zûÕ;è %ëG{äû3ö+VŒù¿Ù{³X˲ó¾ï÷­µ§3Ÿ;×­yèªÙìIµH‘%Ë ‚ €ÉCø-ÏÉKò y‘<ÙP$Û(sjŠsw³Ùì®®®¹îø€p| ¶±Ü7ráÊ 7žßP(gµÌŽ FNؽ{¬'&“<ë«§-‘VšU*VkF©%·•ŽU™…X.¨‘¾TdÆSûLëЃžuÓ**ªÕ.„—…Pj,S‰9F˜ &×À #V,"6ˆ&ÓNS‰¢X+ï8*çRú@?Nt£·D'²wtˆ¢º<\–y‘³ur¤N+Fb1¨Q¤á£Š6ªPcQl#=ÐRTf,HÏÓ8¿x8i!•µhÚ–b㊶4*ޏQ÷¸±U‹Ž÷µL)Rª§ëѶ@Eìô:t2 ÈzáĨg%¯Ùœ×XUZ΋3¢s+¼˜&<Ê;DŒ”®Ú•+²ÚÙDâ–^è¼.‘IuÇÝ‘‡å¨G®› löŸgot‡íéGê"ä•õ/ʵÞk´âR}¨åxz ÁE½tû—ôü…7äñãoðèÁs°·&çÎŽAIûý R;+—£+„Ñ|´¦|ý3ýÍecÔ'˜ Y´Of÷É‘®Xvcy0ߕݨKk¸I(KZIK—²®t5è *F¦U¥SçeÔn35·2ÔYd¨æ¹D“¹Jí‰]8‹ä±A,ÙSuZ9‘ЈO¯b£·'AŒW}cù|OyS¬UF¿6Wh©¾Þ3h!¼7óÍšX46¨¢`…N‚ÆUi8Œ;ºmnqÙæüíÑùÂô‰<_ë{Ù†|uxM6fc½&\ˉ‚׬Èc±´å>—ÃŽ>WYY«ÎsXôôp3ˆ†R/U6ùTòÐa^Îyëî¿ DG.…‹Ho sõEIž<Ôøö§ÿ{¹rý×ôäýcyóûß"JE®n¾¢¿ûk_’·¿û~ðã{¼xcSË/?¸÷PƒÄ P'Ú‰ñ¾ýöjñÊó+€ðÎû‡â¦b ÛZµ‰%ŠŒ,r,EÒHëÚ³»¿ÏW¾ò&jD’±ç;?”rkÆs¯Þàâåsº±2”;ïÜã;ö5’Š™7tê-ÝÐjˆöXB˜¹mB¶ð’ Uª‘ÉÄ«r"^*"´E)6U¬¢ZN¥®¦ãß@dF<ЍÓ¤åY)íšÖv[¡ÛÑ2 RÔ#ŒD&# )Q<YÕº–0žaÒDZkCµùDÒVBo©«s'ÔÆJ‘ÆÔbtb-.±¢"j/æx¼`–‰2ÃtÆ")T´nÜ£TI¤×iP ¢DvnGÔ4®9b„H ‘ˆU#F þpÞ‹x>4Ey¡>/$Ò@J£¥ÊœÑ³Ñ«ª€Q´iL4¶Ècn—mÞyÕ=ÝfFW)µ£õ4§IÄ¥iX÷–DÂɱVû‚$+«š­­÷úÂdŠ=©Œ¦P;Q“Ä ÕÙR=ž‹Î •8’g’UOKJ½(™Ù"µ(‹Mõ¾µ}¼þЦIb.¬K#ÖŸÜ3Ïþ¯§Ü,ñA˜—ÍwÛ/u%ëwpÓRËí©¡v*íD¢›$»¸Œ¤zäEàwf,_°¬_\wO¶Oˆû]ŠÊ±LÍúöæ"b´»Ò‘´Ÿ¡^ur0–zëD‹Ú‰iÇœtZdýŒn¿FȲD‡½®h§#ƒóK:Mäd4‘²®u>/Ä/ ëÄ ±TÆ…v x¤ë-‘5"V¨µÒ /‰DÍ|¬îR\HrupŽ×oY^Šù£o|¨÷Gri}Ißþà„?ûÎ]ùŸþëÏk¿Ý–¯ïýÊ$²ª('ãZ.]LÕÖ–¸-gŠRm2Ô›€^qˆZfêåòå.¯¾°¦¾RÌ‚TR¢AŒúFóÔhX¨½ÄMhå>(oßÝcûh&ô—øÃoÞ×ð:ïüh‡,˜µüDM­?á¿FHþó(X?ËHJþšïú+í}ô×Ìÿõç¸dý¼×ÿÛ¤`ýÂV±ƒó]»¹Æ“·ŸpüèècŸÝ¿8Ôµ—Ïq|÷€ýïèO|úφ§b¹à<Æ⬙ª»ÒAÕtI+!J ‹šÓÓÞ Q-t‹FÈXÅZ«}®}öeÞyüfyEgìœðd÷Bý±cl/u‰³WÖ¨ê™ùì³Ð/@pùÑ”º(‰³„º¨~‘u?[Óñ¯Ë|þ¥ßÖÄPsþò—_Û¤•%¨óLgãGc}ôÁ¡œTž²5 ’e¬:ºa¤± ÔUWƒö$%Gíc*SQË8´µ'NR}9 ïs­Qêè#- ‚Ô€«H…ÈaC£ªÑ‚ÚE;I‚XK¡žƒ|¼®IŒèrœÊJwH%ž© ŽÕ¥U*çtëè@êÚ¥¿ ~%QD„AB¥…k \4ë0[¹N2~@^UOv|Ì¡µ‚±©”ƒ6ÁMÕ¤×%M3ÍâCgé'©E™G–©8*#ªb© L2ËA§CÅ$>ðÂIÎs£B›À²§ÔæÇX kPURç‰êM[ÔË0«7©–61ë/é”3ò*ׇÅx ï© 9›æ<õѶÜo“ÏÈÇ >Çz|QÇõ¾ô²Œi>åáá}­æ%«+Ú\fuíÃ0HÍÚ IDATöÖ·Éó=}xïé.±yáÓ$Ù@»ñ²¼^Òµ­‰ìuÇTëF+IEæ^§á¢Ì9G[·iqÑ”+¶ÔMœÜ”UÍvÚã‰iÑ2 Z}mÃR{õP3)ç¨$Œ‚ã¸eY›i1§¬j$ŠÑ¼À•Z D.4 ¶Æ YÜÐ0œU©÷<÷wÞã+ßzS;_hqùêMÍ‹R>zïm.ž[æ¥[—ØMØψEpVÕ Øæià+÷ˆRËkÏ/SÕ·îk+‰#: ÚIqÖ >`NrUUâ,Á:ǼÌ1b4ʬTµ×÷~x›G¶åÒÍ ÜüÄuˆÁ™U°®±Ü5b‘$Ã'`T¥¶tÛ7D{ñ)×Kpož” ¾ßP!m NTC‹š懘âÅ⋚`U£$A´AÒk:#óRLÝÒÚö±­¾imJªzŽ‘˜„¶FµÅ4±"±Å$g´q§;™¨Y²j*ª:0ÂRÄBpžÂÔ(a:CËJÅlíГñ™ëikbŽ@ª;„Á+Jo}Àú´€’Ež­”hs­°At{ácpÊÅ’…Õ·sÈÑåZÖÇ"ÖÒ½´NÜδ:œ0ýp-kµY,`ϱË]Õ¢c²˜ºT½uéÄ ­*%èâ·/ƒâ<®(µ:IÈKÅ'´ñ jíÇ4þ[Ëb†* Y„i'ÔNu¶?¢¿Ò'tHû-Üþ„¼R²’É\ë4¿Ôct4%<³zq ç.­0ÚÏ)|»šsaÍ2}s47 ÎuÔFA|~Y‹yA–ת¥'ŸäÌŽg2‰ÓNI²„¸Ñêµ´ßi F® Y;·¢³ÙœÑxª¸I‰=®¯T®ežþ@U/ˆkü±Å‘aUƒJúWÄäÖ@]8ýÇð¡üëïvxå…Uþé—ïóxÄjÿˆ뛼tîEýƒuHdè´ I"øà×_îòú ]–H±…CPJ Iþi†‹pAóª’¢rFÕ Ö4`”„ ©G"m‚N¯#BU{¦…ã_~÷ßyDøê;[<ØüÌú»rÊU?­žûEêöŸõÜ/[“ÿäûþÆDè?϶K~1¹üŠø¿Úué3ªùxÿäJ'¨b“háí힨æ4ð @ÚËÊYÉì`Æ`½+bw ÊÊÚ@LT©'ˆ…Äœ­L*‹û`“ù'H9-¨ü„åk¬ÝºÈ{>’$KçÅYpõ³”¬×bïö™¹ðêUÒv&§ñœ¾vœ»yž½;ÛŒvyëŸ~WÖâªú—ñµÝ’ ÿÙ•ÏÉïpïð>7ÿaÂÒ¹ˆÛÿxÆû¿?’°_½»ý?ž——þþe½òQ,þ׊Á]‡©§äÛ»¢®@ÖÏu䥗7I}—Ù(gg·”­­1îpNî2æIC*m;'¦²TÚÆa0È\LË·¤ˆÁ‹PRÊ ‚’Ð&—N˜!®Ñp ^¨£ÑÆIª¡;‚ê"õ´ÙšÅ‘¨5Œ}Íq‘cÉÄб ÃnŸ$Žåàäy‘sqóˆaçpïo韋.uó™l1™ŸH*-v·¿OÒé“ÅK¬¬¾ˆ lm}[¼«bŒåò•/J‘TÕ{rýd…Õé%©©ñ]´ê³¨ÚIÙ‘ªXg”ÍÉ챜/wù¤›P¥ ÇLå£zΞ·²ãs(J†±ÖЊV:}Œˆ ƒc3Ô89IcŠ,0Ò Ÿ%ZƒÔ󂺬1Îc¦s"Óˆ^Å9mö#kð¹]{z…ã“/¹‡¯î-4ȇF¹²sk-fb »£š²p´ˆ1øTÐØF b@]Í“nO÷d VëàNgzr0ŒùÒÁ]¾X=äûéy>LJ®–·é*òÊÉ+h÷[ÆpÕí³®…DIÌ8"‰xlœü`÷ë$Õ¹|ù²ÐyDöüsø·ßB£¾Ü¸ò9&õ1»ÇOäÃÇ÷YY½ÀåË—Ø:xÂ݃ùÔµË\¼¼*÷L‰Eá´mhjÖFh”ñÑL¹à…›K|db™zÈ+ðe ‘E°rz[#¸ÉtÑÀ«8 °‰íÇL}ÅïÝ‘'³D¿-²%tXű…¦>G0&jŠoiÜÌA¼ó¨Q´ˆWBp¢¡Ñçx[ t!튋Tm*âR%²¶™^TPûu©Xíbm,Q«‡ëDä2Á¹’X2ÒÐë ¦R$2È0C½â#‘¤“°Òȃ—y»Ë~%”“oM“{1/0atXU*®·«lšžîab’«Fµ¬1 §ôŒSʱ+§r CÈ3ëúLêÁ¢•i¨-4FM‹"ûéF>Ëk‘å¡DÝqUŸÅÞA\Uãç9D&2BHŸ½ß>MOù©{ªæNðÝÙ¤ªÆ‰’És´ÝÆÛ³w€­kjç$ŒGHžC»½žÈÚ¬ Th:#ÌfBíˆ4mµž*âdÓÔ}¸«„aO gà¨Evû‡»„lñ°iðõÖZâV*ÎXB^4šK$êf`›¼Ib9ep™ªÆŽ§B^?Þ#¨Ò¿~^$™ÞÛ¥>œY!½°DYäh0-õ¯’Y¡Jé”–¹žtIÅóPçøÉŒ´Z'3æÕ\ËÑrFmNCWTREЀm:ÓNKèdhí°óY\zÑB;0Ϭ h¯(Æ9¾j̬Š$ó×NÑvÊädJñèXV7‡ Îu™ÍI±·§¼{{/}~ƒï½w"ûGý•6.4:ÖV;¥ÕÍp.5“£iÓØOJª“\ŠØ0oÏdšÅØ(–,É:‰ÄŒ çÖ›šmPáדќéƒ}ñe}¦‰P&kæLÉ(!4Ú;Qy†@‚¢¦Y‰Ûû£ñ——ÏËÍsW€Ô¥ãÚ•”$k¤U/>—±<´Ô®9[׆ ËÝHò²FœÒKË‹z‚6P!H„,èÜ*ž@Ñ€`b˜Yc-¥ d^$ OëçN;a{kÂÿòûoò'ß{ø‹ŠÅÖP^~g×_ÆèIþ-˜FÉO£`ý2Ù¿üß‘½¹×^S»€LO T"k/œÓP9¼½K¨½þ–.uýÆšŒvFÞ=d°Þm&P‹»OÚŠQk©­¨Ô*šØŸ½±èx묓k_Ø$í¶Ø÷ž|–ÿÔcÔ <ùá=\QÓYésåÓ7‰²¤)¨C“{õÛ$f 6Þ9þeÖýcëì€/Üzàs}ç£è¼àäÆßiQ÷R¶öaÖ¼:ƒËÿà2¯_½¨×ÿ‘ÐëÆ\}¬ª¥ˆLcÀMYµ¹óaÀMK -Ù=pŸ!’©D"¡¦Ä¥§eȼ€j,±¤Ó †­lLmQ8»ïr,±]G©œÊ­²RQ¤lä⪊$§›±Œ‘,IÉ’”‘+u>D¤-"…vœ’¥™Ú(’ÃÑ1ãÙœ•á@“8a÷äX¼«u=Í„Øà}M»òš(ýž÷Z òTë(—<©ŸSÌI,,‰ÕbÐâ‹Kzyg*I´˜é¾¬þxBœÌTv^ø”:_ÑžL8ñ%5@÷2Ö,¾_ZÑùs¿EØý¦,ïàI¼2Ê„G]‹««óJÆI¼°æÚ*g}aóeBk»þ"Ò]ÇÔ9ñû_&>ÞÆìß׃Š÷Ö)L¬Cß–niéy}€˜HT iÖåÅèóô2þùÿTª™ÌcV”ÕT76_‘¥ö%u¶'Þ*ÆÃÊêKèÃG_ÇùBÆ“ÇLF5Ý|AÊéúãPɧ^x…Uë7ç$:ÜФ"Q Š—­’sQeCZGۤѫєek92–G2cnk½çDïèE)ëÅ€PV []6–ÖI50¤SÏ‘›±srÈŒZ;½e¿+s ˜IFÕΔÑT’уQ A"k±‘AÑûjå’/ôf;Èý~Ä£“š‡'5o ¼¾ó¥ýVÌYÄN0d0„Vc£ÜÄyKbš±ýcÛ‘v‡;íU=Wøäô Ÿ;¹ËóóngCýa¼Âkå{vGî¥KÜé®qkþmƒ¾X¼*s“ý,ãÜôGz%ÎyÜ[“)!2º·s$oÝûWØê÷ôÒ+¢ÝŠdmHqx›t°ÉÊÊ vª}}w{[Z­·ôÕ«¯Ê‹/¾Âû÷ÈîdÂõÕeî¹?:¦%±¶B ›¥b³6GÀ·j>»ñ…ë}ý‹ÝRæMæ…Èhö´ 6O¯_D°­ @í™1C3ZID˜UMvMÔkýÄŽÖ4A¶IP×@`bçbk!ªEKS‹‹¡Ý(IÔ¤‚(°02€HL±ÈЉÉÜÓRQ)…¼˜H.û—!²=!KµÌ‚TŒjžíHZgDU“Nl"‹´cˆvb¢vB¯7ö®¨Zéh‚;Ø4Á¶ZMò¶5Ä6B\8³ŠçOgúº@:„†…Á F(:1e+„F²aè/dú9Ç£9>Î0YŒàÏZ ˆ§s%*BÔï5MТ±1Q㣈üàêZ­i2Iø¸øgçI……sÆ3¯S ØN›Ö`@éj­Ç'¢½>öü9d2&:ã&¸’4M0³¸,S×ëŠt»˜É™ÏI\ jŒ_9õ³©Ä‘a|4§sa¨Tòã™­XÌòy­ÏÑzÿkjî}øÒçð¶/¾˜©„ ÎüÔª6ðR:¤v*U·i ç´S•$‘¨ßm޾ß%Ïs*çÔ¤±x"7+5exeEŠ,ÓüîDˆ"lc§¯AáÄ#ÇWb£-«2žäŒí°<L©Ä!¨ J‰UcΦü,¬\›Tî^[̰£Á{°O•¦„­]ºU!À4'ÄV£$"¯½8H—º$ÝŒùá´,xTÆ…¸°ëKÈrñþ‘²3–K—ôûuZö¶ŽùhkÌ•Í 9œj~P¢çZR¸ I;U+‚m'DéPP¥šUÌF9ռĔA'ÌEÚ s$¶õ3ɲX‘î°KwØ&нX½sM÷ÝÔ^º°š83 0ˆb¬hj4vH䞆¨û(}­±‰Å*Ôùœ¢[GdBñú'b}áÅLfs¥•DϺúá½2*ëÆåF£†H«h†ÅªŠ¥²¦a½éâwU%ˆž$«Q'FæÑ3Pš€ëZ^þÄç/÷é´b|P²Ôò£;‡üé7îÿ¼¬¶_„9ôE蓤| .jžqªÀƆ¥+ p|÷ð—þ\c &2hP‚óOùTg÷ÕgÜœ•§Ag‹¥g_m“ï<»?¼Çòó\ýÍ—8øð Åb“þiWÔgŸWLr‚óø¼Äˆ zÄÖ‚üoöhÅ)Ÿ¿ù)Žçc¾ýãw‰¯bx³Çh*LšÓ%IÞ¸¹ÉgæKôÿGø™ÁUûiDƒjº }$4[ÒÉ(æø¸©?(ñ˜¨)âPÒ \Ý¡pƒS·w¬$ÄDX1hPÕÓ.f®°ÕŒ™Nši¥Iˆ]Í‹>¦}ñ7°Ý+äåXÃ¥ö-†É*SsA†+7©qä‘#vë•ÕÕ—ð¡fgç-ê:çáãop=ëq~é³¼óäË<|ûŸñ‰76ØØø€v^óht‘¯nÜäü,å…Y Šƒ)׈æU¼Á´=£í°$'¬ú ÎFܰ†wÓ˜GN¦‡¨sôê)¦‡ ¢–׉£˜dH·Ÿ°7>dû˜²œ“ô:tV—¥ ¬/Qo®&3Ìþ ‘*RUDb8ÄòfžðëYÉç—•­vÄûeÆ–‡í'5¯.Y>1°\k)÷ Ã{³@Y 3”ŠmHަɄÀ(±6âíàáIÖa›.ËÜêò‰É#>3ÝáÈ´°Ò[]ªF<”·£^¨~L7€Ñ—ÉòóÌmûˆçqÔ[¦V±W9ßýðψ{«í>Åæy݈^1a³w÷ßb<9æÁá/Þš±‘ Q^%ž>¡májwÈÞá”–0bÐn#Ôyê4áƒÇ'ø]Ï^Xã CÃWßßg:ÉI¬ÁXÛÑÃÇ·¸§6J‹{íSÖ ±m¦ë§¨°°¸ŽneUð³–4®ø¦6·j±A0•‡*œ½×¥HjºZ!^ˆ¤-éé·—Í&g —OIÇ"ÛE†CæfBfb²Ð!r1²(pLd1­:Qƒ”e12è2-rŠ#l°$ϵˆÎo¢“Ôu“´ÝÊÎ r1M²ùYÊÚ鳨mZ´ñr‹XúS‡³‚¯+ÒYM䔸LÖê¬I¯¯Ê`âÜ&.tZ\±gæy<*±(íN—IÚ§r£WΨ´F¬Å X„n”bŒi~Ç®rf?ô×q3N{”g¬ïu±Ÿ…nßN©ê §PTXï`i ±0™£yAÍBÖqpÔКÛ-d}ºèuñ‡„Ãc¼n;asc@§—Pn8l;eçÑIš2t¹–L:ä7?OöÁ×°;ߦxñKøî*ñíˆ8¥0[{ƪ¨O¦B|‘/Ö64¸Óç'Óf0i¡œÌˆÒ%ânж+›èÑ”PûEZJ1Ô‚1DÁÁîˆñјP9ÎO›×Õú ¤š JŒœåªLÕ3óžnÒaåü26œldeØØz§qo¢U¢¼¹Bos‰jZàk¿à7 v^âöް™B=-9WôÒÆà'mÇ$W—Ù;žQªrãfï˜ ´#òulñ's+´ºi£¹´ˆÚ Á{ÊY…ÛÆ%•(dEU1‘†:xre{·â‹_h£˜WOQW‹m²qδ¦/‚¨m쬃b$`› • „…Ý·`PŠ'à §a£gµz¨”^;æ¿û/>q:›m2@örþË¿÷ÎùæØŒE†ÿëŸýˆ?}óþ¿·õúP HœÅÜúÒ-f‡3½õ˜àž Ë—–H:)ã''»9dµšSüåŠ:Ç›]®ti£a…B¢E±j]ãO!±Ži{¡ë…Ò÷ÈëU•À²!TÚÂH5XãèÕ3®Ÿt(0¶#gÉ¢JZYPå£ÌâZ–+…Ç gz™4Iie)±m1ª"¦Õ}zIÊrÖE5`¥•µÈË‚<Ÿ3™M,–9œŒy|pH; ?u«ûÆX`s2ÇLæHUs‚'0íõµ ¬¾Þ¦ûîú­/©cyn_^e-¹ÈÆò ’h™o_ïq÷Â$\gŠ÷Y»ð2WÏ}–0pwû/ý]ük`Ûô¶o“vÀCF›ö²˜Ì{–óãQ€Ì+ó$bšXZxŠã;¸|‡ùÝ¿àʽ;Ä<^ëðÞ­ÆmXu=nv>Í“Ñ_’»9bcD¡rÊqŸ7|ÌN^±ß/øÖÚw±>á|vº˜2™ìâO3ÞÔaB…Ô¦qø2гžõõWY^ºÉÎî÷Ùßÿ{ï‚÷´§9ïÜ=áá#Ïå[.O¸²þ„—p¼ßŽÛÓHš æ•}W3§t§]ªh•¼uDK¶H͘ÍàØ”ÀVdy¿ŸPJ“¼â¨.yðäv”rcùYîóQ´Äûé*·ª÷XÒ»Ìýë´ÝsœD¾Õö|éèÛƒ!ƒHùp)ðçí7ùìôžëœãúÒ„Ùý¯oþ6¿¾ù;|÷áŸóhc™oî?ávÁRg“À*¾Øge ┢nÌ ä`‚K"üÁQc”ïå5½vÌo½¸Æä¤Ã›ã|Ñt"c°ú1íÚσhUäx}aK)JöLÁ. FOUÄZ’žÞŸÛ¥Eðˆ¥)„ G}œc| Lg:‚ýŠ– i  © •'&#ö-’ªq7’8ÂÆQsìÓŠ ‘i´ C ³h,%¤Û%]Y©‡,C²±SÖP.õq !œýÕ§M‰j£Q ‹óe~µOZxÊù #q¬´OR:'9uaT¨Ã,‹š!˜j#LÞ=:lt¿ÖŽ^„í“ 5ž9)ÎǤ•bZ–Ò×À†ƒ «Ãµ9óƒBu N䯷Ê3î.§…´5©¬µhí“ ‡øá iù{Ìó˜£c¢'‡˜y‰9š<h.ÖRNipU ób!mΉèÆ&‰S¢*PïŽÐ²¦í¶Ó¢º·ƒ ´†LÔ$ØËhF2ŸñÜ“cÒqNqVäz–c$YLm ‰QZKmNF'»0PEÊÑÁ b KV°ÆK„ë¶a:Å6³¼3†º˜Ï ʼ"YêÒYé2ÙmtG‘â``TàCÀÄ1Uðì펷Zô;}¯DiÄòj²öĵåŒÃ/oAQc×2ÜRº-Jš~-=-<ã“D4† ŽÇÔsGŒA„¶E“ű×1Vd ÎÒcrÿô¤RÐØ¶,vA+¦µ dÝ”:¯!Mp¢HÝ ’$nþÝô§G[^*ôjÅ ä õYÏÑP ƒÑ¨ =u©Æ`ŒÊH µiòc¼4æ/²°ðZØÓ,†fÑÌÔ4ÈS'0,• ¬,¥œ[¿€ˆì–ø/þòá¿×5ûXˆ4¢oUþŠŽb㵋´–ÛÜý³÷©&å¯ÐÜDSgQ7͈Ô7ô'1‚‰,¡Oѯ0whfÑ¥™¹Ec(Nrnï£AyðÍ÷Øyç.ÅèWk‚ó<øÞm|ïßléNW+‹#*7AjÇððÊÅU†ÿdÀõw…ßx>ãÆŠe²ÿQáˆ2HúO„Ÿ§tÃËzŽaO>¢b¾¸¸çX…% Jê,Æ'”¡GZÔD !"‘@Ë“>•k,¨¤L´EУ{VšÌMEnª& Í•duÁ9µ\PK[¡- ;¾È6ÚÇMl³Ú: ' Ú4i‹i>g4:¯ôz=–K”eÎÎñ!¢Ð7†d° ½%üÞ( |dÀ{|Uã d­>¦ÿ9Æ=ŸÛÇüɸ±wBoÕðÖµ‹I(²ÕŠúγo¦ôÜððѵ^êa³/qõõç¡ö%Þ(í:ey80%6ãq½ÌòÖ6£Á*Î(›ñ5–Ós[ìf­rô„“ê›DçnÒf ã•2ƒ* „BI¥Åùóo`LÌÎÎØßý!‰¤tâŒyéxÿûcÜ=8Ù(¹üÚG¬Þ|w'ìf” ß¹§¯b³ßåøƒ¯3zçÏ)?ñ;„µ ”ëC4¯ˆvŽ1µCv±EId Þy‚÷GHª ‚Ò¾¸A÷ÒyüÞ1ÕÁ¡v,=Áõ FûS&»‡DÀp}‰PÖ˜“)f<Ç8×hÅ ·QšÆ46˜("t2êA¤c°Å ÛÊèZ¡œVÞpÁsòä€Èú–‰LCföív…Y^¦ÞºKUæÒÊã½g2è°tþ&i|•½rµ‡_æú[ XþÝ+üÚë“òÿ>.ÎÇ´íc|è‚OHúHKˆF-–?¸ˆTê'hp ÅAÔ!¾Â„@½zémÒsWÐû#ÎÝþç´òs H„q–rÒI qBG,ç±UE:wDÎÑ­w®yû¹.©É¸•½ÄÅáËTå„é{_&©¦D¢ô‹6ýIÉI·ä {ÄW[ÏÍ/vÑ^i³Ù¾Af ì2ÏÕ¿Å‘ÛcÏ‹ÉΛX_Ѻñ…†þ2Д*=ÁùšÔEll¼†8ÇÞþ{8B£eQ‰O ûGÂþÁç¾Å+ÏÝàáô˜í£9.‰H˜Z僮rTY®åéÄ0®zÉuL»B» ‹ÒzÂk®¢ž=±“ETưÛJ8®jWÍ&=Ö:CžÛ¼ÂÚ`…ýÑ!{“#Æó)³½C,P¥)&i8õ±µ$ÝŒƒ´ÃqhÑ‹`˜Ï¸hWcÏ3ÇCñÄE¼[Z&…ò\ì¸Ü2üÆÀpX+wçGUÄþ¼™¸á a+u·®Û²iD¢¢b7kóxØ£0–ÏžÜc× wâ.»ãÆÒ¤% ï²ì >uòÜk?ÏwûW§ÁW˜Î2v'ãqqÄw/¿Mõ5V66Éf»L]ÎFÿ*‡w•3=Ùãú¥]––/P–=lsqeÀþÑ”¢ª!Ô‘i 42sŽFßøñŸ½µÄ§¯÷ù~b9ª }iƒ´Q9‹KÛÐÎÎ@d áLIáèQœ¡g?L£Yaîbò•ÄÕWœ²`iÖÔ#dÆÄRÙΡòøG»Ôã)u3O™÷ÈF}bíbº$N‘E뚸$Êв1qÄ6ôÐÄ mǨ1Móa,±‰`ZŒ0_éP¶jN;ë!ƒ!ÌçPU¸tQ¼–%¡nc!Šˆ³6Κ)im›bß6A¦ „ù q­jBQ‘E»ºÆÿÏÞ›ÄÊ–]gzßÚ{Ÿ.ÚÛßûú.[f²§(Š%‰’¨R©d©à*yb0`ذ‡žØ0 jh=0 XO .wKVÁ*U,J$E1)fËÌ—Íëß»ïöÑžnï½<8ñ^&Å"•”-X.8ðpïŽ'âDì³öZÿÿý1ë¡ëcbUa±'Ç HÚ TJHE¯`™gÔ±æ¨]Ò0&á ôV…•b$-f÷Ã’ KKdËå\ÚÚ÷3´¯þ1ƒ7¾NöÒ— — u”Ww˜0Ûc\ÕX »Ô`k°ƒyQÐÛÝ">:¦¹€Æˆée;£Î3j ½,£PÅíO:ôqã»©Ö › `B¤I…°•3¯RG´ > #HòHSF’"¾Ã,ÁƒНó“ùZŸ@Yú}0iÛÁª¤uÝR/J²Í!ÙãSšª¥ñ‘"sM m0•'ËÂr± `¨KOš;zý„$1¤©%ßÎ)Îõñ•'?)©Î*ªÃ9Á2ÊPchò„` ¢Š[ýí¦šO§ýL?™t>Étñ+©¥‘¿ðÑï6éÃõ>ÆʪŎrÒ·I–X|ˆ#|îâ6k½œ²iº7~œr4-é9X¯”fÿ1±YCd°žqíÆ9úƒŒ½i9~kÃ{3Îô!sw²-z†Þ¡q ¬Oˆñ± –N<Õ]Ä" 'ƒš8&ا18¼fäî”^TšÐR  ÍŠF ý¬ÑUê8çùna8s‘‡I'¸<¯éÓ‡áÑwXø”Ç)YÁ²*9MÐI“”ñÚ:yšq6›p:)?7~ã«LÞ»F|ýw)t£b×I"öŸßåþµ«|ön`ãáëì½ /îòêó—Ø|vÈg¶á·–5_7pël‹Ý|ëé¢b’q †´.ÖÍJW-†h¦ÞÄ&CjPž{‘þÄPî³w;B‹4#‰–&O°YÁ0D$DÒÅ‚þ²¦W¶LÖrî_qû\ŸKé%.×»5ν¹{“íÛoc† ¥Û`Ö±<î:KIÂS¾çîàkôTaΛÉcœz®Ö—Yw}ÞãŸR.މ,9åñCÒôÅæy–î15‘"8¶6>Ãö凋w¸÷Ú1ijHHP«¸Tà,rð?'ýó`¢²ÓÆ ‚…Hä_]Ì–9ëî:~‘Q *ƾ&k¦HôD…µ4çÅàRvLÂCm–Pâ9iO±mC”½tÄÕ‹ì¬os²8ãá鳨PU5f±ÄK¼ó¨›~ZK÷9õ†IpÜIzÜ©–\qgL̳ͅ÷1ü`iy¿R.e‘=á cË3­òN÷çÅÔÓd]DUj…ÞFBa‘ ¸†×»(ðs“[(Âídƒç›£UÑm‰š‘ñÊÞa·¾Î~v‘ïs®åC9eo8g­UÞ~œpïÖkÏ]dxq?Ÿ¢aÀîæ š‡¯Óœ-ùÞ+oóÅŸK wi›%›ãÀÎΘÛûǨ*Ö ‰³ÄÐ5xú»k]QˆÜ÷†Ïôà76¹¥†e6¤¶žn¢ÚˆD}êéxÒó«EñÆ}D®#(B¦ )u÷57HhéÓêC?T+‘Nîð‰!”þñ1zÿ=:ƒ ”ý)Óú.ò8/sœö0ý!’f§˜ ô|ŠŽ6´~ÞY,¦“] ÒU8¢é²?Ĩª¡î'ÔÔvTó‚èRDc U:iF&øºÂö¤—A– y†wI§×_”dyÖ­­Ç,kTŸXL]¢1|ƒu "m²Äd!O‰WÎSnààˆôlŽ],‘²Ä$ f±d8Pˆ¡Jr–6° #ñ ÔÑ“îüˆFZ1,“„¤m MÅVÈŒåX3tÐ[}?¤ÏÏÈA„æ#Õ…ú€†øa¶Ÿ±D5LÔýˆZ 1ˆ‚¢èé’¥´ëëP丣ðu]3*DÅÆn¾• Îa­£hGT¥cLF-°#N»+Ð]Wqd Â,´Üiç'Ø^`ïæMò|›øB‰ÙÚãrÈ™F0ãŒù¨G%Ž˜&è°Olú•§X‘& þá1Íþ1­Q‚vJˆƒ›ŽÎHlˆÁZ‡,ë‘l ® ¨ídpýõ>éZ?“Ö÷Fœ×u&u6Hèå)¡®iÚØ…ÝJWÿä&A£ÐÎJü²Æ;¡™Ð_’¤“®¦Œ&x²Ö³hZf'S¶/ïRlif%MiÚÀ°Ÿ$BUE|ÓåFåÚÌ¢¹COÝ´Ôe‹ígdI _{2g°™£·; ß(¨/ðmçù¨'K4sÄÔÂ('CCGL  ó•'ÁÅ-v#²™v ¢p¸¶eq¶À¯¦:b„l<èPê«Ð;G~u«›{Zc(Œë0ëéfŸ/}rÄ‹,>€µÂéLûÃЋ¨Í*6pÅmR¥kC'$¹ëp²« «C‚¢D áé¤Ãh'¯ê~×Ò˜øt#D ¢¸vÀîa•ÌYö/ù/þÛoñæ{ÇÿŸ®Ù-ð?Fýú·ÖŸðý{ÌŸ"£¼»=óóÏ0ÚrïÏïsøþáG1 v‡ öF,æÌ÷§?Õ1»Ä²ûÜ..s<úÁ#’i‡/^Ùå…Ý žÛY“g¶ÇÌë–£Ù‚&ÀæèœØt‡?~ïuFÍÃé‚Aléõ /¼¼É•kCvw†8k™ÏjÞ|ó1Ü=à Ù§1g8E„¯ ƒÅ7çQoi5tæBAžXò­éÓ͇Ä+ŠK°ê‰þ8\ö€m™3H {Ÿþ4ãË,ß}È0;‡mSîf²<椚qÚ,y¼M»8¡œK¹ôz6±¶Ö'Ëû$¡A&­'¦Ž­ÝÛ7vÈv6îéí®“¬HÇCYæCáœTÔ6çc 6Fh[¢oñFñ¢Ì¤f"5-eÌ@¬ )-Ž+5©V¤´X:â¨tlóΜ*+­UkkhRÁß? ~å-âû`²Ä®XgœMßÅ é¬ÀšÛ_Ǥ91QL„Ô[(|ß ³‰ŠM’nC4HÐQÖc@±ÄÄH5p:??&އ˜Á“æxI‡¡N•& ‘ß{“Á•sȸߙ×E³T°VeQâ}Mc>zZõ´‰K,hÓ`Z/*]H`lÚ¶FœuÈ ÙÚ$ {ÒÔ,JlÙtÓ¦ÖwSÑ&ŠñAƒQ–hˆˆëÒÞ+gYd ÞêÄÃ….ÈÙ®:ÃN£íº@±j©ÏJü¢Á—-êÔ&D1x5V±®hçsBU‘X¡ÈœÚm<±nh'3d²Ûzƒ!Þšà)sGc äáð”ÅéjãÑ*€Ñ‘%Ʀ$š0 )ƒX°¶‚ãœÏ¸Ñ¤ Ô°”@âU’¬Ïb8¤9{LÜ¿ËAn9* óv™Ÿ’ãÙ‘H“À|T°1a6Ö˜‹ÈüÑ¡V³­o³1„nÂ5 eKïÑ1&s˜açÄE#¶õÔƒœÉ…MÏîH¯ÏÙ†åd |²¿G¬#MÓ"ÒÁÚ©£]˜ªP/"¸o)Œ²˜´äÂÁî¾m)—5&D’¶E{F˜Ð©Bš¤“Võúi¿?/‰§i#‰ISG@Y6ÊzÅÔ¡«sòÉ ËF›É/–ÖXš6BÓÛ@’XÒµœt½ e$‰ƒEƒ4Tè´œQ;H; ‡5hbñQ‘àñ!0ŸU|½nhʆO\ʋל.#g@’ˆ:§š¦xcðbРb@™,áp³Š~]É_Cýÿ#ù˜Môãü¸÷ñqó§BùŽv‡âRG5«žU_¶¼ý_ãù¿÷IžýÍ—+ÉR¶_¸¼#Eâˆúa Tj é*œÈѳ²–ïÜyLí‰5ø¨òÏ߽Ϣñ|ùÙO²»9âðèûlf‡¢>£­„ ×׸ñâiæ…ù¬á[z‡É¤Z}•¶V±“=ø˜³ŒUhPTU:XÞ*º]œX2ÒÕk)ˆœbM jñ: µ†ö€Sóýyàý´à ~ý³#^ÒOSú=bs¢ÇŠN'Ü› g=G+ÒZKŽpcZ²×(Ã4ZNÃ÷CÍÐ+ÛIiBð+v¹P¸T¦‹íä´ã²Ûê˜ÿnIuúmŒ´OÒÄ:5lÜ?•+_{›ô`ÊìÜÕµ2É ÚË„ä5 Dã3~wšò+ÃRi³•o”7h–˜þ°ÒÕ¬ÌlŠ.R'Á8;'m^AÂ%Ô&X“¡ªÔ™c•¼Ý'ijo¦¼wå˜y~*ã#C•w2amY³7­ådmÄë/lâ]ÊåG3®„ü”ã‡ßcr𜟆͔yºÁÒ]$—>m¸5†Y‘°9kYŸUœ RÅ9q&¥—Œ‘V¹pdÊ”?êßåó#¾Ôûmž™~‘öO§nœ(Ÿº„n[¹ýÁϵk¿Ì X£Ž"˜ÀéÒ`Í:Ï?÷«2™>äÑÁ»Ì'·Ñº›WI·¬ôçò$¨U»*Ñá'tc|oWý•t퉳 Œlü9&ã—hšL¨)ü:?·1`³ |ÿÞ)óŒÁ "/¦ ÉÍ€žq©·ÉV6âñâ”I=áÌ"íÊŠhªZT;R‘›/¡ªñyÆýÝMèóA3çZµäù4°[ÚBØ÷†wÊJx¾z±gäòØq>*ûÃ{3¯¦Af^H¬H¬„Ͷp+¼¶vž(ȯßäSõCÞNwø Ùd7N¹•m²Uϸ迃Š]Fpõ+øÐpròm.÷jªÓïñݛʋîl3 ˜/ëWØ7G,âRN–ÇÈÃ[üÒ‹ŸÆW=v å'¯qì'BkRÀQ–Q¨| FðÖɶõÜs&$¼Ñ’,!ˆRû’:q]çDÎÕÒ‹ ùJÐõäÚ%Â(CX>žÄõ6jÓ<ÕVKˆ" I’ˆž2=9¡s3Y"Ã>mÑ2·˜¿OzèHýú©Ú¤/’ä´¶F¼‡-,ÍРg%Ô¡ó2ÈJv5Ê:-wðˆ BÓ³,ÎÑ^Ol¯ÉRbôD!Ê[Aâ…°šV]}ùØtѪäN¢]I‰› &vlô<ÑÕ"éì©m@91vž]ÌÄÅ€$)¢Š×%6*RmS#ùڌפÝÝ!>>Æî`—%ê,Oßé-`ÞWªÜ03f-½þHm’HªQëÔ‰à˜EBƒ¤Hj´ ðCŒÅØŒ·¬HO&ÉÞH—Äv†ëÐzšªþhƒPQ•°òX‚ÒN„ºCêF+Rç_dy&qjI6¶°EA(ç,–SnŒ¶ÐË{LS\ۇµ†¶õ,ÎJ|¸êL7’bHµƒ$Ñs¡‰\l²§ù‹”ÅÕOÓïMÌÛo°ÿ|d±±Žø–ã¦æŽœàŒöÒ5¦ÖQö çžÛ“‰q”“öÖ>fP`·ÖÐ4ÁÎIŒâ6û˜aë,Y‘qÔF¹a“Á c-îÕÇòÊò€‹Éˆ É8d¾‚tà,ߪL †Eg¢Nœ!óe^F¨"֊ΟIoñ戃‡Ç´ªˆµ?TJëÉû“Å’éɔ˻»kÒÌJ¬æKÏš3ä©•E-,¢§×+°^‘²†ªEó‚µhÝÒ4žÆ å ÇÖžbé :‰–Iý‹#-Î$,=‹{S"׳ÒßÊ;JÚÓ$Å'éÍ¢]fìËyÍ­‡5w¼´1¡9V'W˜W×ÖGd^wþ#ƒ$½”d³ªm—{?=]h}ÿDîÝ<äh+c÷Ƙ4µŒsõs]}âC$ùH©,Ôu×QUõ‚ƧëÚ.{³ª÷¬JÔÁ’‰!hµ•(/a0RM0]K’iGÓQw‡=þý¿÷i~ïïq§k¨ÿظ ýËké¿n#‰ü¤ È¿29 ïó²~ª“G“•Äñ)Ÿœè£ü࿦/ŠÈs¿ù2"¢¿{÷c倸Ôa¬Q_{‰>þ Ö ëLGCx \ùñ›Ê'T^ ’§Ý…6ªâŒá¥½ .­iC|š®£tØÍ«C®mŽ:àG(2µœ,*͇úNg o<>åíǧ+œ¥á¬¬¹sò#‰šòÌVÁ‹›3}ÿþÿ. 0¾ü<ÙÑ\Û³–ŠÌ‘ŽS¬Àã{ÚÒ〱 .ŠB§ÿnÔ±]†xMñ«ôñΠa±8±8,Òe«Aź9ÖÃ.mãì}݈G²Ûè?›¨ü7gt_á7þÁ¯ðÕ_ÿ¤>¾ÓÈÃ}áÿۼߞi1Hqª£ç$•íY…ÖQ·óžx;Ë’ü¥¾ž©¸7A•ƒ®:$Öb!6-mT ýÄP`hg^cÐÁšÐ–ªM)Mæ0>ðÜ×ÞU3JxõŸ“æâËüúé¦Þœ[9Ž%›³NG8h ýýiÍ¿¹>ÑŸÈæ†¶ú *ê”Nö©¢&(Á`Õb¼QF *³Ä…—4¶‘`d³[¸³}dGx±÷eÜý€7oëÂd2Ë2.—-7&%‹~®vÎIÖf\Xü/º½÷[’†„ç¨LBÐjò˜÷Þÿ'ò̳¿q=x)Úâ¥a}|U×מ—GwÿD½*M³ÄKxš­h0"q¤ÛŠ5¨Œ(IÕ5+ŒЬÞ{ZÒá{í‡ãŒw„¼N°q¨Ë^ŸkËÏmYî,ZÞ¾¿Ôkec³b0žjžN¥èo°f{ÜïjÐMy¼ß%lX IDAT<ÕÓúL‚z¦)x,ÑM/G%v^bn=Àû<ö¹“Ü«¦\ÏTwç¼õrmCx¿¶¼}êya´ïD.†K…Ñ{)ï#·N[îÎ"Ušª†€.k4D±½œðêæ%TDÿÎÑ;òÌâïå—ˆ2Öç–SJcÅP‘É»Zµ{’¼þuŒ>Ðí+¿$vý:T¼xû›¼óàf»Ã+Ïj–#UÝèxtAHÞa–À [#ŒÖ9ôK6²Ó&º#¥`Ž,A;˜"#*"b ºðAþЧüŠIø¢?â &úªI–:$Mp*Ñê(¦’«UT äÉÚÚJdiÂ4Ò:<´¡ÆkÓ6à¬XÒÐhÿx.ÕáŒôÁ‰Ž§•ÄœPW MÓjÝK¤eˆ8:¢ÐôR¼3«¤O¯š1ÈFšö‡²´$ryg‹ÈªhˆAB j3'ÉfJhºnsµ¬ñ]¢¶D,ƒ!šL‘t%¤ÕóeÌœgv¥§Üþ®ì¾óÉ3Ÿc0:§e)ÇRáD Fýóê@"‘±I軋踼µ©Ù¹çå4f1àÛ >1¿°&1Duª²ÛKX{é"“:jÕ®•žF*ï5D•CÕxê:eBÔÆXªÃS=Û?âç4Ol—Ùn»î^ˆˆDTDˆÖp´ÂhÔg0êOfhŒâDZUE’&dÓ£3úãÙ¸¯ùæPÂÁ”¶ Tµ'Ïíg‰4ó’:x²AŽäSy¤¬‘eM2êiÌ!FÑӹƪßKµ)2ÊIKnT™Áæ .s¸¾cíå­N[µCǨbž°(Ä|”a§ˆP¤Vb˜,½2«Å¶¾KÔŒŠ)E‘ØFÍ·z’ôRʃéª1i› “ƒ™„EKºIÆvš£3Ë|½$lõtD%W’ÇÔAyñÅ/¿8$Ä@\ V¬~H³êê­äÉ¢;H t+˜ïr`"bUW'jqâH4jOW'5´¨J*œ3ä’RÕò'·øÖ«øÊç.ó¹vAÑ [þëÿô×$1Âõ?¾Â©›ä ƒ^¢ô¼tmC×úøÊ]|Ô¿19 òW˜Bü´Iˆ?íéã&+þÐÏN;Cο¯¨rówß@žý»Ÿà¿ÿà/=îÝöl äƒo~@9)Y;7þ¡×QQBáˆ='âµ#ލý±Ï3h—¤÷‹×ÎñÙ«»4!ò$•v£—1ÈR¢>}ƒ¬®éƒɜ?¹õ¨Ã >aSÃɲâµGÔ><ÅZ&eMâ¿ô<öak`å…mÃFÑšCÉw_ÀnŒe|xÂðt"Þ Ø$œœÂò c"nØN--HÄ0‰MP…tˆ¦ãg+b18qX±nrÅÍvf!Ö@Ñ´W@ZRn“—g²si›·.^’ßùÚ÷ ™…ÿüß~™OŸ_§ª–²{Ýðp~&ÓÉkÁÈ9 ð V–m FYÏ ÉåUJî ½[­|"éºr14Fié^û"IiB ‘z•6¼ž¤¤@ƒ—(wáEü£·Ä—%-Ê8rðùMùÁW¯s¼=fëÍš£v"w7JòƒÏ0š )ª׋œ4"¯• þÝÍ9×ò[<2™µ8«d3쎵 Q¥SÂLPbêXîÜÁŸ½A>ùªô–4ñ€ǤËCìâ.%\J_â\]ÐØÛR£¬ùÀsg%>uò`gLR¬qñ¬?Å'ŠÌi ´yÁÅÓ)ƒÚ‰É32‰´!ÊYƒZŠ6åò錹ãuÃt˜HÞ —Ï‘˜T)ÙÏ<—_äg«ge1üïÍ>¯Uÿ+Ö®pýÆß’´=cïmaPþo&¯1¯OYËF’ŒU±k¼ d)–Š­ /Éhó þœ¦šbldè“\”&-¥Î”ölB\λžS‘ø¤%x,#÷¨‡'Ы‰P`1HDe ß´lÅŒsiO ãÂÉ·jï/XžTÜ{=²“f¸ñ–¬…Œ]³-;ŘE˜Ëi=éÈa!2µ–9u‘¦ ütNº(Éó”[Çýu)l7%çCÍ5×rqKäN¹¹þì0ðȵ‘áÊØqn/ã™aàÍ#/·£Å9¡¬ˆµÇæ ½"á­õó"Ÿ™<äF{È·)GIŸí1*§)ì»Ôá2î?•<Ö Ÿû;,¤Â¿°ÍKÉ?¥ÿèˆvãKâå"mœ‰iøÂíœ<³Kػ²^+=Ï9ÃAFŠ´àT#™é$ÖšÔ€ˆ4xÚÊR*&©ò†æ\Ñ–O¥‰ÜAhj¥g#M%S‹A¨%Hå+Zß>]üBøÐ¢Ö]×3 ¤ "–,ªôÕÐ[zúÇ3ꓹÄ'ø“uî$ÝshÌ)‹“{ÄÃ¥ô[ˆXt<À¹´­ÌÝ”èTÖŠ”f´ZigM·>;'ôSt”!F„Ö#Æá‡cêÝ‘T{9IÑ÷-_z6ãþ·_eñø„PÖðÍÛ‡œÿÏþc’hyó÷þ9Ç’fY×dòA†Ûì½p•ÁÎE.~á2¬ßæôø¥]#m—bOÔVÔ‚$hD!rÚ4!,jÜlA$Ë11J,h¤òsª¦$wýµut}¿9¦¬æt1®POIš@Vµ%4ËZê²ÂˆH¡Š·B’9œZüf!yÒM±]²ARÏÄU‘RÅØIž˜xŸØi­Ág WÿÌjó©«]@a•êt!í¬FŒˆfÝÄ®b«HSWBÝù¥>-iÎ<±U)R‹µ9ÖšS8|DËŠ”§zÆ"*¥:²^ÆÕËY‡øÖjcçE´1Š‘Nêýá¨Á€¤ÒýA@Å‹§£`Ùî*õ”……œfÒa}‚_bÒÈ÷ß;e{3gg£àÙ«#¶6SÞ{ÿ˜ç~‡Iéå|åY~ö¥s|óõ‡?T[Žû)Ÿ{vd^¶üG¿ýY>óÌ6§³ŠË»CùGt“ÿó»wþ**¥[ã\õ’ü?iBWøö±Ž!4žÛ_g·¹ñ«/púÞ!ͼù‰“s\ê(Wù!Oä }du‚:Qi¢ü„#Ñ|¢û%Žq‘Qû€ÁÇÈ«ޏ6'±OÀ‘¨ bî͹w:ÿ‘³«ïuù¡£º8¶|ùª£öÂÞÆ ²sÌò–™A“ÙTÌrŽM,ɲ"kKZ·"=$† @gñ@†:÷k‚ HètÒM<±jĈí&¨&©±î C‰ú>>l É cݧh•öò&õ/}‘ÿákoR·Ý‚óÕÏíòüÝŒûŽyðAÙ0sýÅíT¦w"[ *ä™å¡Q^5/¸„> ß‹ Ê~ŸÏ™‚úàŒÜYÒÂQÕB£ÐD!j¤¿")÷Gb„è#u}ÚÁæ]–·@‡]˜]»Î÷¿ú¸Àn{ùn ÉÕnFH”Y\±ÅÅì;­²uDzĘ0È[v²;Ìêt”I3¿K1›qêZâ4°ASªzDuzŽy6Äçé¹=vd›«7-¹7®yŽ6º4Ý3,Õú.6 Y¯s¾·äKçR¾s9+=iiß~Èíµ~£dа=^çBÌ)ÚTs29‡T±áÂÌ&LÚÈ¢Ÿ3G[{¤nHT™?8dÙï±È3IΣ¶ärâõz¿•Ë…r·n{¾qÏëí3/××W6¾°—  w§‘8,puK\¶˜*¬å¼¹¶ÇÅ_:»Ë'¦ûÜu|½¸ÎsÍ!ý)Ä7À(µ¿HöÆw‹}æoÓ&áú¯qTÍ(šyPMkØ­Z¶^û·ëL·®RW ß©¦¼Ô6¼h7Ôs˜8PéŠB”Ï‚–%-mð,"Âû•ò MøÙ¤áWCà5³Ò#´‘ K 4²’*%«Ép—ˆ4Ò…ß%]¦EQ¶ «dQŸ’,*ªÓ9Õñœà f{€íçhÏ1›Àüøé,#_Œ0YØËp¶@C`a'êM#kqë2š¡ Îb&5aÙt_rt˜"6! {ø®o¢ƒÎn’®óՎĹü…/ñð{¯rv÷.XK=³ÃcŠáêdB=S3ºV/O'òøæ-¶/|‘_ý·~ŽìòÇïüwï>&#U#a:Cë_¶˜Äa’.[%¦µšXâ²ÆÎ¦h’ªÉ31QÉŒÐ&ž*ñ„H³‚|sƒ~SWKª¶dQdÄÉùdIjD]ÕŠ¢ê­ ‘¬ö=é$RX‡ tYW ¼.œ1¶ókE¥÷ñiqj¨l¤õPïñsKÞ[S0"îi?™,*Á80F±*õi@ebbh4bb`=´(§3>ÊiUU¬³$YöáÅO:\°I²<Ó4ME|ëÉßɶéÈPmÓ!ì —¿ÄôÎ7y°ÿ&[îóôú[¨FÒ(¼ÐZ¢fFÙ’šZ”‡:á$ža8eËäì¹!Wm1œŽ$µˆÊ‘v=ñÞ¢!Ž:õ”ê±"¸ÆPjK’vÍ™ºéjpëŒhj#¨k°yŠÌO3>¥—Kð^”"±Ä'AÇò´!Û™©Ëš´_û”§S¦GÖ¶×(¶Çĺ¥.½6>JPíà ÑãËšlPršª!XÁä)=²èü:PËÙX! ¤ŸiÝ:É!¯*2ÛM:ë x¯0¯¨m'QŒ“%…K5Í,bELštÒo…˜8dlÁt1ì ¢¾Åõ í²{ÁÜÎ׸X?ðFU²ÍžöF¹xYÎj¦³9‹›g#d=°ª5|ëÕ’Yc°VhÛ®áüü•„a!,*Ô˜ÐAyE«÷içþ@’®ÌVŠÇõ:Ü´HDUT”Ø7!C9=%ö}éñ©ëEßrzmi¿ÿ'oñ;ÿÛ÷ùŸÿÙÛÌ–-Ï\XãïÿüuõA奫›üý_¸5BˆªUã¥õ‘ÍÑŽüÓWî¡ÊߘۿrIèç¶<œóÁ¾Ã³¿ñ×¾ú<7÷)‰ãéàᾫ›rÿ1O¬]5qÿøƒG¼~x¶š~tŠÃYIâÇÖ¬ýUÝ@û3ϼvTq“kÙ.Ëö>õþ]6CBV5ø¦lHÊÈ u„¥*rQRS¿É4Z¼&+XCé©.Åü ÝŠ.Œˆ5œk°(­ß&hJfŽè×X#Ë_{žÏ¿ü~ÿwxûfçÓqFøíŸ¿Ä¸Ÿ±lÕ¬âáëÇ<úö6E4dD–¾åjNRÃF2fgøîì”öÒy>?Þãä½w–µ¼  F¿bÕ§Ö­<5‡°žg¤Òa ë: ìýÖñ“ÿ þZÆÙÿ—è»·ÀFmFòhBUXNƒW᳋o'KÔäuyoFf•ýºÇÌ*þÃí3ž+ZÞäQ;·]hß¹š Ánï<ÿ¨æÆ#Ç›,²ÊâY´]g<¯Éç÷Ð$ãØ8’ïý{Š,c”07díó+èmí²|ð´ËŽ/#óDXŸ•\=]P™æfˆ¯Lây´5c™Ãƒ5ÖçÇ`RN‘£‘@’³5¼",Ç ò5d<à;£?ãVy‹/”_ä“ñ+äW?`~íeÏ9Æå>{YÍϬy¾ÙË™ÕlÙbΤÇ3ªÄqokÌá…]ι>»½>ÃÆ2+™†9‰a˜æ©¡ÃL üdŽ™ÌÑãSª4Å÷ n ŽTx ž‹¦äzQsý‚å;#Çë‡ý œ´|ê\Æ—öRlx…ebqI “9™“ߤîø鬎Ÿ™>àD,_ϯñ+5œkOÞ º>Kþ[ßfh–Ïý„,¡5)óxÁA0` æ~‘âͯ¿ñ§T¿¼ƒì8›WÜ5pÉ+ëÍœg‹1oùHhhYJ õ ¦jÉj¿J lnš>c/È”TJÞ å±(AA#ª¹kºÒwd#ëy푦FDH¦%þà 8!žÌikO° ;CÒnàh—s–MC=-Iϲ²+†ØþK ž¥™LÍ5“Ñ+ÒUðÓ E°Ã †)š@ÝöÉÎ þê³dוÏýO”Õ“³¿Åb~»Öç…ßüudE;ºñK?ÏìàãÍrÉãûû<³¾Æ§í«¼ùÊ+üà½æD‹IZÒô”k×ß"ÏyíÏA~…þî:ÍéŒÉ{÷èõ¬_¹L³œ¡1 ÆݦWg¦n±óí÷1Ö‘ª%z%.§”y…†@–däAÈÉ)m Š%ͨGÝÏÉÖúä'3’6bªõž˜æ Jæc§'Îbš€‰8Úõ5],1Öá×ú´yŠU!«Ú¶˜ ¨ÒÁ&ªJb2‘ÕùD£¸Ê?‘ }xÕ‹‘àpÝÕùˆk[¼ýÐ3¤ #™*Á‡õ$ª4FHò”¢*» ÍÊ>EP%³ÐdÓUàÒó佯ê9Þö9£ƒ2Q…,Ây,X¶¼ejfì;å(¶ê!üœT —Üó®GbSUª¨B ðB“œJ x"‹sÐz¥þ¿Ø{¯Y·óLïùÖZ¨\÷îÝ;‡“O DQ# )P#Æ–dË6 Ï3Û²öÝøÊW 8@ ŒûÂÖp†Öp$S"%’‡™'Ç}v»rýq­ÏÕûJâ9<”C€Ý@¡…®ÐuÕÿ…÷}ÞR‰š ÿT{­ƒC  p+ÌtŽŸ²²-JêÈà ¡•@Y¾¬gž£•Ç*øàqIL.0ÞÐ]jÓ>µº¨nïãë@U/šÀÔET¾^`v—º¤A)J¿ >%tÞ±[…E@c¥0œ£³ßLÈ: êVL„PÕÔ Á6¡®*ŠÊ“`šãëŠV·M#ŽQkMNU"•Ó½©æ™÷„ äy‰ Ë ‹u Òø`÷€*¦áSC(EéÉÇUQà¬Zä3ÅÝ&!ŽyùZ q$8+4BÎÅ1ëë1㬦 ÇÙ8È¢Ácñ5$B?؈à ïç–˜ãÐÂô-¦¬„Ï=yT 9‹æ6ó´›]~÷·Ÿã7>±ÄëÛ.^ N¯wøü3§Á »{S¾ÿöî¼Ôˆøïÿà^¹¶ÏR'e0Éy÷îðÿÇðþMøºÿƒÛg¸ü¥ÇPUÞý—¯”gã§$ ó~òKÈ[”*‘ð‚÷Smà‚ßãºf<˜ü¿º"8»Ü ßpˆkq®‘g»¨íÓÒ £Û‹U¦é‘Š霙RH5:ƒ#fê;d!¥æX‰°bpD8± ùæ­¤ZŒ™bÝœÈ&6(ª„JhÚÛ¬çC ¼úï÷xî©§^wüÑ‹oR× sãž[åWž>Aí…¨q÷Å›¼øû?¤ßŠˆÖbx/‡&P¥ÊÞ\1Þòj9 }ò"_¸üÃw®Rå3Ö—Öð YY’W…÷Dfñ¡ŸWÞC;v¤ÆB”“šÎcÂÖowdý_ý f7þ˜ðÖ ´,xl’r'rÖTlDBÞ äƒ‚½þM¶vžæÌüóµ)µ)é=¾=ñ«…£- C¤©„ùã3ªå©#|j‘Ò‚0iD˜Î|uÊ©AÁÞ©=ÆG »kmâÁ]¨*ŽÂèþ—Ÿ;M7/hö0Ú"̺LOo0ú̧ñ>a6À™ÑÀ,2*.NfD´ÈÝ&-…£~θXš¶èå1Ö®²ÛJ¸½4`c¦]–.o1Φ ö®Ò?÷L€Ìæ¼½GQŒyæüHû5Ê£mê¿Ê•ê3<³ò)îçÿ;‡;;4N&lròÝîŸs²ÚbƒË\¦;°´ºØÁ9(ÛBµ¡-ƒxO̪ld°¾$¯O2CA7“÷}!Rºû%›G–ÒUÜ*öÚŠ‘Ÿ+kû-Öv iÄö a{%æîªÃ¦)§& ¶&Glù]>Ë3PC¬‹„ySxÌöÅÞ[½6{K=j®r¶±ÁË!áj=b£¬XŽrÞÀD £¤Ï¸Û†Y†N産1~>'3–q§Év³Ã I8æ|zÉ“¦ ?¥¼·3aRåüâ…&¿´á¸ŸþüÐ3Žé’…I†›¬ÖdÖðõsxÓáÙÁ}Äìó§éE~E•“õ•\§ˆ¶(ê z¯}E(¯ü6KIÄ0«óc¢S‹hù ÂêUN¿úÇdßþ:;Wždýô:u™£Ñf‘q±.˜Æ† G †ÄEذ(êˆ#4Ò¸A[b¬‰¹ë kEÁ•0âª1 I?@o"$U«ÁŒ¬ ©üqc ^¤„·÷ñ»#üpº@¼Æ‚_mÒ¸´Is£fdû;Œ&ûxMˆÇ֜ĵcLÒD‚¥¥Í)dNÓôpi2’Å¥Rt^¡¥GR‡t¼ÆhÜ¢ÿYÏC¿t“ÌLù³?\ãÌcŸäÄÆ[œÜüglo¿À;BS"2LíilnÒ>} ‚§Ú܆£1gž}†µ¿ýK\ýÓ?ctçq«ÉèÎ=¶_~•bºM=B9{¤}ƒåÞœ«ÿ럳s«ÅçÿÉLºÞ£s’¤‰´ºˆÔ„ñ9–n[êµ6Tžd{ã 9$Nì¼Ä—ƱQzÝUšÄ4Ä‘•¹V픢“CwT`†ct2ÆÇùRkAj4(›18KÔháP3B¿y,É[‚lVAV,¶QaÌB3ä’„*#bC ø ãq£ù¢ÞÄH”â'GÔ³1Ce„Á¼Ä &è1ÒÜFŽ´×F¬Y„Üþä¹!ÇP+Ø<'*s¬°Àá– zØÌEÔ.¢]×Ô"DqL;$]EÜóÙœª¨ˆ›-òYN^ÕyŠ^Œù:¡AÏ[6BÄÀVlû ÷Ý DÙ ›¾Eß$¬Ú”“®I±lðªÜõ¥6iû©‚ ÆPN3òÑŒåsý÷‘ÆŽƒ:AÌ¢iP¥”>§êÆÌ÷§ä“9m‹÷ENõ ‹‰2çN“ü(b6™3ÞÒìµiœXÂD–üpÂüpB Þà\L5žQ­÷i¬ô¨Š’l0gu#Å«0œ ¦#~1D ˜üxó^(ç0+a©ÍXj¢n“8IÚãŪbcGÜH¡ÏA©ò’:+Q'à=vR`jO%0-á>0/Ê…OV)`öú­Rë² Ö`ZéBHï ôZœì;ž»ÔB} ³Ô¢Ñ‹ ª”¥òúõŒ£©çO®¼Ü1¼ðx›‡Ï5è·,óZ©D(Ž-ÀAtA*£Âè"5c6Z¨A=AÀ°VÃñ{ø'bã"JjàÂÅÓ<ñDŒWÁYÃÛ·üîÿøçtÒˆ[;#þù·®‚9Ãx^þ®Ã݇ Ó姘ÊRë§™Ð?®™üà /ú!‘öõc.¸û›h@.}ñu±ãÝ?|zËýà±d¡?ôµW¿ÉqŽÒˆÐäæŸ]ãôÙu5¶VAüBS+rM§šÕ‹Ÿ[ñwñ3(Z|ıù+ÇöAPÏ#m.®¶´ôÊ鎣“X©GjÇÐXº„›M<—ÚB ¬„5KÍ}3¦.ø%ŒÆ2©sû>y°5"µ BL¤÷Àƒ"¢FEŠØ‘ÆÑΜt“¢škûôí=ºU-™‡¯ü´ýù-yò[[úÕW_ç½;Û¤X¬|ñ鳜Ýìêáö.M×4qˆÄ†?y}mè¹[*kk†ùiQi'Ú•sŸ|ˆßúGÿ#/ç“ IDATžü«—¹ñö«²’4ˆŒÑP×D"êEÅ[K+ŽEP-kOЀQ•P•ZGõ™_&jÝ þ”;7› ßySZ« ]:ó°LêB§yMfŸYmH¹\ëÝ·=vnÈBÁ×¾ý¯9º·Ë•Oýy¼ÃØ <›¤H£â»Ã!Y>qVk_K¹s¤=úMCdäpo__¹ñá“Ô%û9wÄ‘W¢­¢W5Írñ³Q+Be­k¤ºw@uïêhJðµ Ë©F—6Y>µ&š—øíC-f™ÌòR½4­¶¸cƒQõÊÜŒen& A’¸«®½LmŒšÒc;m˜—Ôã ¬`z)^b‰NÌuãK÷XzhDÿ䔓rÿö÷†ò­ß{TŸø¥}>ÿ÷K6.ýFk Þ;ööŸÓñäœx5äy¢¢Š±"Q·OLU½Çű<öwÿ΀9²£Þ{å%ÚÍ51þyÂüyêä%5Ñ)žýÿ!{7:,¯ŸÓÆZŸI´Çl°+óù&u*¦” S¼/+Œ1Íze±Å÷AÍ8ÕµhÔF &D$AÅ‹2.îá-ÚKë4ãXÓ²”y>¥(¬2XmjÚMiÍúXë$KDK³  =ªÎüž`5aáŒC ‚Ô"I·«6ŠA-"x]¤ËUÞk0‚‡µˆu±Šµbãää£K¤.KŠñ¡6BÅV¿‹X+jHò>ñG5$&”Ýk»RW5"¢²(À%n&êVzR"ÄÖh]Ö€ÇYªוZkÅzUtZ%¶š¢EoÝÓN3¥»¾‚!HäО̠"•_ĺ"ˆIÅ€.{Ç’IÈB‡\=·Ã[n,×-Ú®"Y· }4^&2–½2“\k=¡ml¢†ÅZŒJÄ:ÂdNv4Vû؆¨A5@œ©åÜfa¢oÐr¹I|0a¼{$Ϋ&VdAæ8.̱—s–Qô:4–{2Û?Òƒûâoì°zæ«g7H–;jÜ.ÅpFUÔÔuÀa;#ês©ÄýŽEÅ4«h4βTT‘¡¬4I"l^/V A¥Þ)xaR*K]±ÝT['ÁŒçTi$ ½ØFª´Rм@êF¬Ry©¦Z."f4DÛNÿbí¹À˜¾®~!Ek4¤‘<øÿ0 !F…°ìßËùìJ¤gO¦Ìó ki¢?xsÊÕ¡ç`ø?þôˆ­õXŸ{¤Í#çRâÈÐJ„Ê+¹ñ*”E|ª¨¬:5@,"ö¸ô¨TZ‹â5,²A8E´&µžÚ#ûÃP-½ò}ÿ .¬8>ÿÄ ìlÎCýÀïýë7õõ»“÷ëìü ÅâGÕ—úµò‡™Ðùˆ:ŸQÏÿL ¯ü]ýßÿ¸frùkàåCÂÇÆÝûÞMĈ\üÂÈÞù—¯=hBdíâWÖÙo_vÞÚù‹kŒÈ‚ŒnqêÔªX#ŠˆÜzã+OmÒjDh­hËŠ8ƒHP;¬³òS`¼ÇCó±Íþ«íXZ‰ã©Ík­˜fdhãÅWÕÑ>• &mŠƒîüSNI‚R™}º$¡”\Sj0T2*“1­úRCjgÔ!uâĨňÈbë: *ÆM±vˆ0 g ºIF¹&«.ÃÕm£|ë¿ÈÏË¿ùÝxc´'¿ÿñÛŸèò_þÖ÷¶{¤S¼{w$“¡r®a¸òDCÒÜåþ/ßÕ]Ï©|jéuVxø¹Ï£·¯Êk_ÿW“’øôIJc¤:šQOl #¤Oj„~š2+ É´^d‡@(U8y‚êâ#h} ¤Mv÷óëo±taEâåuâz*½,⮋M#µxvÚâí|Ÿ›÷_åðæˆÝ×÷yìù_ÐþR¯;Ç—b#©5”ÖàJÃÚUdÖ„ÎÕ»râækºûÂ3âú]|£'»|í7öeëÕšgþé=)Ž^£ŒÁº&KæIÆÿ[¯Ò::dÖ|L ×e/ŒáG?¤SÞ¦ÐL¤ÙÆ‹’T5g‡,ç1uü#‘1’A¿âÖ‰œ^ÑäÒá* mP9ÏQrHÏJ±L$M¦äŒ·¥Þ¿Éf{SüñèúÁY-v-¶¯½ÈToÏb½w†lþ;“¬éÙ’1oO¿B°§¤²Mzç ™˜šaÃËNtUØ—›“O5Uê¼dur‚3þ‚Xµ‹·‰ NdvÂÖ;Òn¯S'0=ehÝó$OÞª%wœ-nHcÇ`T{ÆMÕ»§æ’–JñéG\ߪyûtÉ˰&Ž Wî𤩉M$¯„&uYa|%uÛ¢ U)¼Lço^{—Çô2Ï--ñz^pÛ{f½%F¾f©®XªkY*s:uÅH,ãnƒizTÕŒfFÌdÊt–É7ÚMýdÓñD\²Üsb“„k¹á룚SQàz†Ï-Á7k9¬„¤#ÈKìA-u¤%'I³OñTñ É.ßIOó©\e³¾ áEFöSÌü“bîüˆ9Š'þ±´Úg©ë‚PÏ îÌ/‹~b›þ«/ËãÕ6oŒ ‡_ðòée6.¦—H»Á³+KüÑW¾Ê‹¯¿Ã¥Ë—å©~• ˆuŽÌz†Í’lÙJS¶¸.ŽIÕ¦SW4¤Ô†WQ#ôæ…Ø‰Ç"Œ!ËJªÉD²ùŒúp‚3‚QBlÄõ[¤NJÿâv0fôÞÝÅ{Øç„º^ìb³—UX£$332™*qÔ%鮊X«Tl”`ŽæTeuÀtRÂR‹ºÓäįߒÎ#ÛTÓ˜ý„¥å˜­Ç¼þµÉþ7xõ_X>÷+~í?{ú½âC“ýƒG .е%“ì…ocz}‰ŽÐî„Â,l«åp¨Åp,g?ó):íuDÍÝþPv_{‹l4bç­×é]8IÒk/*ã øÎߤÙn³|áô¢~Ó@{}]VΟ¡ö—U¢“)hÀ„@löØ0Ï™Ìoã:I[]š®Ž¨æ¡–i,ÔI‹T…*” €(‹©º Jä‚‚4pÇØ×cúUâ¸놌ö‰›m–}×kH=¨Ï&’º”8jÔ/´.V ž¡"PÌl´Ð÷÷»rºÌYuŒ¢úÍŸø^lQT•çW`¥ãɘªb¬›Ë|*£ûGHè/'€Ð¨k¡,fÁöjU9nRbÂrS*3Ï ÂlN0N¼áXÂŽ?*±^DŒ(N…NÙ¤<æ(çÐzÊŽ‘¬)\ #Ù«3NDmjQš‰„…Ç£ÙŒ©(JE +ª^eñ:›¨ßÇÖ.j#"jDÛ÷ÇBì^¿¼"X+8³€ÇþĄըbëzaÒo7óT¦Ã¡¨ßÞ[¨:Mé]9E>˜’Ý; Í)+ð“9ÅÕ{$­DÚIÌl^’å%q³ÉÅK åð¨æð°&g±Ñ »Ô™àƒÄ¥'L )²CdLjm§Ø¥´R"g1Ó ÉJÊF,¥3¿ÀT‡V"Áj?‘H,b­` ô~¢Ä’÷ ºÇÄ­J Š-¢*R†LÑ“yàÛ·ç€â=¼w'“fºˆ4m$"ã™§Õ°\ÜLùñ;3½~¯{û_ýŽpi+á“uØ\K覆J¼Ô ¼(Z< Å…ÑÅÞ µ*8ᘂUËb°‰ÅW7oñ•¯óß|Y^‹3ÂÎ`Nbá7?µÅ¿ýÙ3ü£/\Ò'Î-Éoÿ7ßag˜/¼ûr ªÿëaxú_·ÎÿÿöäÁõw¿sCCå¹ð·âá¿û$oùU©ó@£ÄI”FTy­Çƒ˜÷ƒôøƒíôÅXguAC‹¬"ø bäAöÅbúR{òáœb’ëO$Ÿÿ•Îñ'žè_9^‘"kDQ "'\XiJ?uøccqä,—Sí'VÄ{l6¥žy擉U¤»LÔ_ë½²wª‚FÔ¤c—ÅTK$•%È¡lyYà©0ê¥c§êí£NrèB½ˆÅ*Á¯…½¸è@­=|Â9õô¨ÂžX{—ŒµôðÇcxûóVvþüçßxB/noÈ?»t]w_H¸Ø4\êwItCÖ.ÂKïå:+„3u%m7ÐWÆF¾{¿úภœnÀ§Wõ•ºvùÙºr–›_ùŠr/çÂùuY}è öÞ{G‡íŒ´ÓFòvUi<º$š«x] %¼÷’;´øÌsx6¸m‹µ3Sâ^LzrS¤ÝÐÒ"½Âéãe›W EŠ j¬hÆ<¼Î¯¶öÒUÞ<òƒ¯~•¿³¼¥Éî–¼ÑÊ5ò]RãÄÎ=ñQ¦Ã•u"?sšy—ä`™‹?ø!„9óÆ'¥²ªÃdWB¥´²}&À¤ÙÖ€25ÍYF?«ÈâSL£”L2lWzo¥¤=·\­ÓÔ&¹9à^ë€Q4âÔȲVnH¤ÒW_ãvP­ 1Ç93ïë/òyÆØÞb‡›òt~ŽGŸ`–½«G³¯±™~í‹Ü9|YõüŠ4Ï<¡rã±4ôOQ&‘ ²û:Ñ™†ˆH“Ô±ã¯Ë­ú–>p¼Ê"˜Iý}/AO×W/-Š ÒB¤¡”ÆÓ?õ¤šVt*H¥ –µzoQ}K¦ÄGާ÷;œ¿k°™po=È+K¢^Ö¸täHË¡\2õ‰áu³,~4Õt6§Ž95±e6ÏyíÆ»<=Êcq³7dÿî-|¯%Gk}FK]šÏé9ËUI¿Ê8´–‰Xæ«] ”0ž‹Ï4›ÌùÖ$°ß±\n}..¹*ïEf^žo Ÿ]A¿5 jOÜŽ0 '2ÊuÏù^wG^lå/è“ÅËâ›3¾Õ>¯ŸÂF}‹RWdj?¡—Ñ$7¿ÍÍPkõ‰ÿ”nº…HP´ÚÔøÙ_cŒ^zõ%Œ…W'˜ÝØ%_[¡·ÖcXz1üâå‹4WOʹ§ŸÕ¸K™‘©'LU"uÚëõq“ —UL¬!2žvV)fÜT©)gs­'…”c|Y¨¦V´ªV1iDçüIm?rNlUku{‡ñîäUɬšªú 6•,#—¸¨-A cª¹ÌÔ’¸®¦UÁ9•Úãº5ÓšPÌÐy¹¨`ÖLOœ`ù©™¬lÕÏbŠ:¢š-”ÿÖ}R‚îé›2£Ê<òß2Þ©$i[ùåJO=êd­·Ïé­Õ˜ŠíûOÈd²¯ÚZõª–Zb\#Qc=Ùý‘ÚqJdÛ¢ 9^¸Ç§9Qñòæ—oóÎ}W‡7¯“öûœ|öi±¦C9¬ÀD³Ý=ŽÞ»ÇÎx*×¾ñý÷O½Ó[zêùOPå¹l>ý¤v7שl¿ø#¡ª8ýèÃDÍQSí¨ŸÍ$îöðšI[å:Ïç”.G• ª‹p»E ž¨Jj#\1ŸŽu4')wÞ}—½Û·1ÎÉý7ÞÕ|<K¿:å‰ßúMMÖÛÌ÷nhQy²l€†Z‚·¬ˆ&&IÔz%d™„¬À©UUÁ¤ºî…EÌÈOL¸?(pº©(òëUՠǵŸÕå3kï#íD+¯šÂâßQ]^×µÔ•Gb§ÖAðbTrÐ2,ü›AŒÔÆjÇøyÎx<ê RÕ4{¢vc„þê­iSÕ:#’a’ë0ɸ]©4ÈeíkWc\j)ŠŠÚçXkÇRð¤(²H 8Î= *©â¬ÑÚt^ikgJn@Ýq®¶~`ù+•X¸4–µKšÍò÷¹²Ók»HéòÛ¤Ëm\d±wöq“œÙ¼À¥dE¥Qêè&Ž2F;9¾hÐë[ÖW#zMC¥*£Iàpà©ç^ÕŠD݆†Z…¥–’¢ãLëqF=˜Q®$Dݦ¤¶™b¨©*,‚–µÔƒ™ê‚t¦â_×êË€YÅ,v=Þ•ØÐpVʬÖ‚4Ó©uG.jÑãóþ±æ‰Fj%x¥¿3+¼î•„ãàƒ215{‡%Î ŸvI'óÀ;·æ¼y=ãµkÏ>Òe¹ëdkÍ虈$uÔb%«jõ¨$ˆ£æÞa0 É㡊ÇKMÔt¼zwÌÿðåW¥ZHÒßí ÿì[wù×vùÍOæù‹KÚJ-6™Zþ7qò ]þÒå§u.ò!×}ÔÆCþvYò3¶òÖÏõ·Lî(§§>yžÖFGßÙEƒJ{µÍÚÅUæƒ9{W÷ ³ÖfåÜŠhlE°T°"¾!AÜ:”Öf¤›¢±A"#Î#“;CÞþê›rx}Ÿb\|Øó@Ú‰e½“H'YÈ¥Z±£ßˆäù3=yz³ÃÅÕ–\^oÉCk-yt½Í¹Õ6›ËMNwcN%JR—Âp„ŽÇ„ñLÈ ðˆéõÅl]W䘽;PIlK"ã‰ý¦4 ½)F ÒÅ[B} äŒ)ED¥ô]"±,àºVDj±Ñ˜Èí‰1¥„ª ájZRÉ}iÊ6máÄÉ+EOþç¢dü!ç¯tøÅ·•bÇóÍÙ=É?·Ä…Sm¹\[°=qIÁz#È©õžh(°“÷8œ5å`ÑIEö&5I€¿µ\X“díiÖÎnÉ¥‹]²ï½Dv}(ÍËŸ¤½Þ¥œLXþ'­-#û/gØÍ&§Ú IF¥” Œ±< •™¬”[§ÎÉø…OI¤+Ä.çÌ…—ÅÇW“_í–D¡ÀÕžƒ¸âu—K"†K©ÄÈÎ0È`º+—§*zÙj6¸’¶¸7hï9ºW0OPõ¶G‡GTý–hj‘! $ó¦wX¹¾+/Oi™-:ñ ب/r*6ŸŠ’Š˜†Óæ(™p×ÒÔ9U£bÔl.4Á&HRä²>žI0]Æ«Rã%OæÜZÏÅáòÁÍ:’ÒŒ¸×Ú“ƒtÈÆ¤äÔH!ÚÁ“sÄA¬2•€ôWX[½"ó|(G£Û„ºB<¢6BŒ“çÌïbkËJëY‚lã/½åG1ãÀpç±gÎâz]‘Ý»’Öþêeil\aÇŒebkéªl-“õ¤EjjÚI%íDè¡g%g0¾{ƒ{2ßg<º/Ãñ6ƒÉ=FGwÙ\yL:ɲ´Í ÖãÊÚä¦tg3ñ6–†f´ü©G “™¼v:–àœµˆi °[+2›ÕÒ¸uMº‰a )³LIc+‡ã\$jÈÓ]–Kçϲ«p+)eæsŠ:ˆËUš…§YV²4šÒÉJIƒ—Ô{±*TIB¨½duͼ®È÷F’ßHT$„€)JbIŒ‘VÚ$ŸNeûæ †‡rë7yåk_çÖ›oÉ­—^—£Û÷epw›º(ß?ÿ]¿J5ËH»ët6OJ]ÏDœ81u)*BQÒ)j¹8¯¥3Ìh æ´†3I}-N„!Þƒ÷bðõ"úà{ï_#¾’ã âk𵈯ïå}}JØz›8q‰ÃĉœÐl2šlÑZÅû eQ“8hE" £’%‘ £’¨ÇŠ\Âl.ÖYân“2/¥˜Í1i"®Û”X-ýÐ`£Ù&‘Ô6C‡†$rFnî¤ðFÓrh´cÖ/ôq yMÜŠˆ›VŠJîŽ U-!ø€*’TAªHÄ¡âŒ!4S°™Bå% ^Ô9©œ#Ž-‰3’eÆR1hí™LD‹J¢^Sâå®DXtž/  bÄ׺V"c$q–º2y¦cE"ËÊŠ“徥׈5OK‚ ¦×i'ÐoA-âü†S)&s²lޝ*¬±¤;‘$Æç!/Å$ÆY E%~ð‘c&(‹È¨ *(e…Z¤»Þµ#ÒnS¬³$ÍHâ†[Ü—5òš2÷\:ßby½)v"kqv3•µ®“nj¤ÛääzÊ/¿ÐçÑó-.ŸmÈúr,Eäk3Þ¼>“;{µL2!_6zɲh!ñÄ‹¢‚XAˆ8qÖ‰‚ìæ’奼q}ŸƒaöSkƼ òãë~xmÀѤ”ÊëÏ«d’©™ù˜õýÏR0}hÏ`ÿêgtGò3:¤ŸÖ ÉÏð+ü´ÛþåÛTçôQ›˜Ÿöøòš÷o7Ý™ˆÏk9ýé ¤ËM=xk‡F7eã¡dÃLvßÝÓŸh@ÐØ¢"Ø£‚Ðr„†Cê ‡×´½Ù•¤ÛP \˜Üpï¥ÛTó÷?„µ.­¶d­ëZ;f­³ÔˆxáLO>u¾¯WVš\\mqåD[.¯·t³—ÒoFôš1K G«›Rtèp¬L3Âl‡Gè<ƒ¢‰€8AÖ·q¸;×DªJÄô5‡£”´âpŒPq‚ ":7Š=6u•² a%Á,˜jS%»8w D}¹E«ÔÔlÓb6µL‚êŽ;Á7Æ}¶ŸËÊïzýÜþCüâ­ÇùÎ{7øýÿéë´Örøìº¾ày¬m4ËKBcª}B>•3ëú¥gVøõ§ûœXJ¥Q•ò¹X~íWžàÖhEÔ×j_~…ù_‘ÎS©;÷‰Ÿ#‰‘ô¹¹Î¾;Áßð<ÿ¹‹ÒÅêt{²`û£Š*â+ɬÑ7ú5Ì…‹,K!«ë»rêìšó¬ñï(ã{ÈdW¬WÙKJyÃÚwNžî1.h¸Ý"Þ͘F4¤ÃºmK?µ8çÄ[£Æ‰„º’|>Wd$“»Ò¿}U—®½+ݽ·IçÛØ0Á©±QJŸ¥kŸ”D—¤95elLc GñPöÒ™$:×ÄŒ˜¤‘xc¨E¥“zæhŒ MFÉY‚1X9b·ŸË¸etcÒ‘•YSªj¤Û»²ß©t}dsT‹Q·´RÏŽì3À$-–O>$¤ÏáÑUÎwBhÔ8'*¢¡¬qÙœrvÈÉ´!Ýôq)L®¾u_znUÆ;‡:Ø}WZWÃ.-«Ÿ ÄíèÒêe‰W¶ô~µ#C¦:15š¬ÐnªüB4ׇcÃE.DÂùXX;&mDN6¬Õ cY7–Fh®?‰‰–q]ЙLèCúþ€å°ËR~_Îg;rªš¨oÖÜèÒTºEÄéƒHw’‰¼Ù›k–6X mÚe)ëó#êÈÉíÕUõ‘#™Íq^A &ŽÈË‚ÑtÌR§ÇÆêÓÙ”Ù`„=š`ç…„¢– £³v‹:މzÞKÕY)Óˆ²™9#óJõ( r2Ry(ñÒ³ªûDlWF*¯z¥,E¢Û9ä^AL#kŒN«Œ …ôCO[~õ*—Y<ÖÊÖ«},C YgnÎÑö‡R5ÐqcYÒdY#gÄÄ׳‹IL]“êîNŽvå¨Ù–w³©ìlÏu{û€Á¤ ß_âdÛB!™÷L /6óW5qð¨5tóRÔZõÖQÅ ¥±y&y™k1™I½?½7T©=a5±Fã©Çíµ¤õüeí­õ™ßÞe¾}HYV2-f’g;òm1Ɖu}Ì4×È[1ISs²+• c¬´kjÓæb[¶ÒÇ®¯bîáÇ3aZH³+'©6{rúÉÒ?}KkµâD5 Š©U4Ï ¹dÙz,gEoURå ]R> ·knü ç¯ÍåÇÿ|ªùÌ0ÞW¬58.“ï¶8ÿÂ…?cêSŸ IDATûû¯qúI‘ë7tçû‡rþÂßÒ¨ûM4z‚!¸S˜¿G÷ìEY¾xVš+Kzÿ?æÞw~ ‡ï¾§o½ËîK¯SÍçœ|ö)Yyø²žzáYNö“¸4‘´ßÓr2¡Î ê·ÌùÍWÎ6yôR“ǯ´yø|‹4±Ç"+=§gN$\<Ý IŒ¬ô#†ãZß¹5—wnÎõæýœ$2´c+K-‡S#¢êk¢ÄÄŽÔ¢ÈGiœpwoÊ»·yýÚ>{ƒÙ‡Õ¸LóZ*¯ú!Í‚þ¥@?†ÚéÃêåŸUëGÜï_¸ÿŸG‚õqI¯g{òqÖ=g£ñóRh?t 3¹?¢Î+9õüY#¯²´µ$Óƒ©î¿· µ¶VW BIÜa–žæÏgsùN±fÏH×:æ' ")á˜6Vš»ì¤C)´)û2i)]„¥™çlMm1J¶Æàd‡ûË»½X6&=NZ„lÊNoÄa·`uVsjTá|J„ƧąJê0`ÕÄÝU¹°õ‚ú:“íû?b^ÏE°Š÷ˆ³` ñp"ͬą&ÆXŠ•ÀZÔw5Šrtÿ¶†V$Ýg>IÔY£<º+ÅÎUí䵬.]f}åaæõŒûãk²[ç:P'÷¼‘v­ô5…SNØŠ…-'rª!²¹*wføF /OʤºH$îkëklUcQZâ¹ìgœðc&½o/7dý¨Å…½˜£fÁ­N.gè„&½:ÈJ>Ð_R6öúKDªDE…=-êŠi™ÑouXï¯Ê¼›H–eȬÀŒ°Ã):Ë™µšdb©’˜Ø@¬H?xmŠ’8+ó8¢N#FqÌA ÆsÂzº&Èv¡Ü©-•±<œÂf"XAÊ ^ÁÅN¬u’Õ¥îÙ™dÆË’_Öõ2fb6‰Ã²8ŽˆtOJ9%§4š½Æ~q•a~(¯ßùÞ±ÞëJe4; ’¥>õ½;tê9ývÉ­ú_O¨†9Û{c&&•Ë'7õr"ò³÷&1–eùyßï;çŽoŽ9"ç̪¬¡«ª««z ÕMÉ´@›¤” …e°7ZØÚxa0¼ò°ÐÊ€‚á• yl–dˆ’lµD±97«»Æîš+çŒÌ˜‡7ÞñœãÅËê&¥&YU”ÃV÷âEÄ{7âáÝÿùŸó}¿oU&4­c˜'‘¢ª" —¤´ˆf1§žÏ©ÛšIÆÁN¡ËRd’I+S{’­u_}ŠÎ £âÎc•§KÉʬZ„rvW<”µCÒbÌù\±3ÄIŸJ%¥f2ÆÊ؈<[!Ž{òÈÙõì¬&ŸáÆj=þÂˆæ© Ô¡àµÿé;˜¨Ô¥W¡©—Ë«qX.ÊH¨ªD6ˆxö[ ×^Y¥Š¿¡ÃND(?%¿ª)Cð¼UêÝïÌuøq`8z–$[U¾õ¾ÖŸ:åå_J¹ôô>¶xľ£õ+›2ɹHÞ$Í»ì8ç;ímÝýõß »¿÷{ÜûõßæÖ?øŽþÎkì½ñ6{?x‹½×ßâð‡ï±ÿæ9ùè–Öž{š¤×Õ…Ÿù*×~þç]¿ÊÖ—_oZf{û¨¶~ºû;;<Öã÷>dï“Û:Û?àðþCí~ø1÷ôwßy—Çyüá'ÚûðV¸õûo°÷Á-ö>¼ÅÙîž\ÓœOÔQÿŒ×ñ§­ ß6|ð.«—_bóK_¡^k)q2RaJG2© NäɨCwN#çýŽå¹«=ei‚Œ%Ž#Ò8&‰—Èó ¨<§ó–<µ<}9çËOwõÌ•¥ìîlÒ2]8ýð“{G5÷÷*Y냌ռá£[÷øoþÖÄ6f<-ø¯ÿƯ³³Þçg^¸ÂÊ Ëßù÷ut6×g4ÿ´9õgõ~ð',àÿQ=þ„~á§¾Ö×€|VúgÙÖù¬2¬Ïjtù¢ Ègz|²{®ƒwjǵo\Uh=ÿÆ'ÔK¤™þÐÈŽ|/^>Yëɶú˜4Vp:1dnÒ²V¶|Å:]¤lS.Œr’ÈhwRqR´ø¶e@K>óƒ4é[6û^ö“ǸrAtrNþèXÙá¶tDeM4«¤?°íö)þ÷Sñ«ü²I·wuR6TP$E³+Õ‚$2çi Z(d|XæEˆBÀ…€<:³S ;§ï3žÁ˜GX3F¤¸fç¶!‘‹&˜ø¾F¡ ëàÄ·L,zú—…—¿ý—(¿tÀ¯¿ú¹8½®¿ðÑ/’ ¦u£÷N˜Ì¦ü‡Ï®ð Ïo³gPÕ¸1ì’»=æçÇúµR<±F½§”Qê9ðëüãëœ4ꆷ?T×Ïyæ—¯²y%¡žÏs†–æÞ1'qå•m<>g÷‡Çôvô¶¬üÌcZÇñP<¸þs:¸ü5Îü O¥G˜*fmûí‹?¢˜_Óâ Õ©Œké4žýNàè`"÷«ˆ­¨ü”÷Jâ|“Õƒ]ÔNP8¥mDÔž*mN‰Û)ÆW2¾ÄÙocµq‡i¾Ã"[Ãôn@ºI¯³¡­þý^¦2m˜‡•J¦vÂÔN˜˜1§IA[uÃ9V¥fI‡&Ƶ\;<Çzqžm⢫öV »+6§}]=é“V G½17f *Ïㆨ]"–Cö,ÆöeŠìkÊ4KHº]mo<‹wµNN?¡ôµ 8O”Z‚ó¤çs¥e‹1U›S'‹= %ñ:Yö‘²ô§»Sù¸Cvé2ñ`KÍÙcªÇ©×6×ÙN¶fk/޹*=Œ">Ž#ÞŽ,M@-`c1ìˆv5¬ü@øN‚æ fgôÚc¹NNÚ›’¹sB#hž {1„­4-[‹S¶ÛŠéÊ û«C\–W qÝblļ.)›šÑºÖ#ö2G›DXkÁ{t6Åq'SÊ Î»]&þd ]ï§Ñ288ËRn‘2W¼9Ô2­÷+QaøR.gËË£*à 2±…,b9=3Áv»Aר´®–mÉ+ÅÓÇ·§TzÌi}¢;g»Lƒãòæ–ÒÙ˜äàæÆó°²Frÿ›å‚—W¾Ú/¤%ãýÇ” §Ë+ʲÐN¯Ç•NÂÓY^)~òÿ^ÌgTó9• ÔYL8+‰?x,Ê?ˆq+©¢:T Öb_¼ÂðË×ä§sw÷(gsfÍ‚y5U=ßʼn’u%æöh‚-kEyÙoÁF‰krÒt@HŒ|l0›kJd ·ãÇ‹%v7)žÙ!½­¾Ãý7ïóίΔö,—¾Ú{bA X±”Þ…@í Q*.>×rýë=­ÿì¿O]¯2ß{(W׸Þ8{\0=Zpýåçtôá*¿ù·~ŸáÃÞûkWbn~Kòö· zˆÌ2¥8]ð½¿ñ¾Ž?|ÀùûL>¢-+ý˜Ùùdñ³-Jf÷9ùàcÝû§¿Å½ïþ¶¢¥ÄÑõ«\üÙ¯éâ7¾ÊÚ³Osÿ7~÷­‹É„³ýí0=9¥š/˜ž0Ù?Òxÿ×´Ÿ§&ÿ‘õ½- ¾ñ;$ý.«Ï|Yδ  hV²YµdQBýøTÍî)íÙ‡Y͵"çˆ|Kg˜)íÆ¤©%Í£O‡þÀ9i)É–²*“,%V&‰°IDœÇä½DY7!í&Jó„$ûñP’EÄY‚Íò•!É”u6/lô( §¶q ç' Æç…ÎNœŸ-ÍâMë‰Ò˜8’HpJ}C~™;¥@  "Eô\À,Ít j+îüî-ºýLy?Ŧ"ØD÷ÎYŒ§ÄH‘[æa„°l@ÚØ%F Ä‘B'GÆ`Ê šeáqYB“¦Ò¢"“×êÎ UQq>-"³†8µ#ªYÅâp‚"Kïòºâ~W5¸¢"I,!¼xh[GQ7H<ñ”¦…(*ÉF0èI;[–45Z”†¶h Um‹²D¦ß!YaqÁÑ´ a^K^¼ôT_7/äÄ‘Q"\œ’´0ަce+ÎãžèÔÑj.É,›:ÀUN¶ 8XÄ(Â#…8¦i<‹iÍáQÁxR©×‹I“Ñzá½–ÍÈùÜñ½5aÔµl ,>*Œxñ©.ßzyÈ3Wr6<>®ùø~¡,Ø?ivÿíÿú:ÿÇw?âýþ'üêo}À;ŸìóþÆûÜß?#ÏþÉk·4ž•|¹®þ”sâ/l0ÿ< Èÿï= ÿìu¸e€–.~ùÁvßyˆküð€¬*$‘âI‹OŒ0BnYô]ðc0.`K'ºÐá{Ùx¦ûç%Ŭ`Õ—:9™ðáý3gŠf3m”3Õã©6BÍ—†èJQ`g’[yÅóVQÙà+ŸYa OØÞæýq?†í™,•]Ýa˜ÇŽOtüøT“¶˜Q£Ä/= RêE–XÆ…–O©€B*-,"iÐn)oS0‡ ü:®½!ºòf‹O•Ø=­·-©·œšV'ÚúʿΫå¯p¶¤¿}ÿïëG7>äZ±¡¯ß~šzQjç©Wøö/þ²þÒ«-ñAÆ{e) SžQ«<ìéŸðWÿçc~áåm]ZKù'?:Ñk3>œ®qpX+&Úºõ69ÝüË_çÂ3]š%™§,nל½ÿ@æR£‹ÿæ&É4!Ûiõç^PwTRÞ›¨ñAoþù˜ןÕàÎ5M6*Ýèž‘QZkmã>…ÿóZ´?«pð6‘w q·_k~2eõƒ ‡žküÉ=Ž«ûøuÕí‡*x@ñr(8É@f.’i[‘YÇÄÏB|UUܧ5«\(òÆ9«Q,c21Q:À§©–#V9ÕõÂy8Çû ¿ÎIZ²>³²¨Y¤VU*I•öG‘vWzÚžôtýxHìÇZÄ{ [\äµ3ñtK'/¿LÜM¯ RÑrœ5ÌÓHIÖagãyDÐÉém®âI¢'øy)×6$m¡!¦Kæ3¬¿§²~ŒÌ*Qt®~ç˜,Tªw÷Ô&]ì…ëŠFØ| êä!óÛ¿/w´«Q¼JZÕtÏϵZ k8îYËïE‘u#ç–S+uÓ@èfDZ!žgÂyÅfA¿»§¬9—&^jƒ‚žäDvYœ[ä­ëžjp¤ÛO­èþð9vv]?H9x=èל4 }bbušš­Å±N»™NVV’D’‘mbä¼S§Œ’.óñ™Æ¾Ä﬙~WÖZ1YÀéÎfrEÍIœQÇ1.Ž”K¬4"17–=Åšzñbây¹ëåê†7§^'­”YÃÍŽˆ$Ž*äœG‘!Jc™ QÐRéÙæž,gf¤zVžØ yX0Ê#uÓ.Ÿ<:ÕêÊ­Ë×enÝRþÑÛ _û&a8¢¼u‹¤rêw:Ê"tsô,'¤wÞáö}=lczý®V;‘¶ÓŒkÝ55‹–»ãCUCµ6–}<&þà!!5 Ã:QáNŠü‹Wè\Z•{|ÌâðÌÊ)í¢‹3šêŠr²ø†ìÞ)j¢ÁªLœ)O°F^n$–ô¥,&˜ ú]ikhï\þx‚¯ÚåBÎfŸæêºÖ®ïêês·ùÙwƒîJ¬;ߟóà­BÞ¯d‡ &5êd"Ë$¹°´8Ñéìkm{Ì•oþŒv¾ñ¯ÑÔ óãs\Yü¡z”õ:ºùê+ø&æ×þ‡¢×þ·)oü·¿7–o®³uíLþ Á¥jJ¯µ«)W^Íe8}ØÐV´‡ðÓÇÚ²¢O´û½pûÿþ5ìêì“;dòÑPŸüƒïès.&ê3Ôé?êºþ(ùr¬m5½ó—6vÔiƒüé ÑíǬÈ(õÔMðóy/3Y(ªjR#…YÅâ¤ò炪IEy0Qu<£:]¨:]|züôœúd¡útA}¶Py4%´ž´›`dVK“±<·Kî”÷È5^Ql±y‚ÉsÙn®|ØeçÚª¶®®ªjÁcä[§¦všLJަx)JSÊ`Ô)yâV0!Ò¨c‘† ŽkeCP’ÙÈ(xß?dv0au{ $OˆRƒ¢D§‡3ªÙ‚ɺði¢HF.’âØü KÈÒ%‹¼(EãÄ’Ô¥6MÕ¦ ¦®‰«Fé°ƒ±–ñùç<‰ŒŒŒâØÈ¤‘*‚ªƒ‰\Yc³DñÚb‹«ZEÁGV>€ KJؼªä‚'1–¨uj8<³Tµ´:B«+–•Õ›$ªk¨g¥BQ.½9‘!õÈ6׉ó\¶uD‘åÁY­ÇG ~á呞ÞÉT-jö÷§šÄ²)J-ëy¦zѨ,[Æ“’(’Ö·: Wsòn"²ÄÊÇ‘LlQÕHFtz &‰ Y¦Eº»»à“‡ ÍçµÝXy)Š,>@ë Kb}åê@ëýD§sÏï~4×¼ðŠ"që Ôá¬åËÏõôÔ…œ•XÎn=,ôÚ»Ö¬kQ-tx~¦²n¨u^?üd_ï7?øƒÍÇ÷Ùú< õÿ¯ñ€ü—_Åû…;ž/عý‹x}}Žk@ÒMÙy~ ö?ا­ÝOkÅ”“÷hJÇFËP›Ä°ûÆCMöƬ\R.Þ>àÊ{ŸÞ?DE¥¨,éÕ%½ºÔÐ7<ׇgz°‘>T>õmÈ:0ù,bvq€ëXÊÍG¯Þ`va!ò'ÚÀŸp²¯mm\V¼²I;žjòðy]³Ù*qA™#HSNÒiû‘Çx!&‰˜D""¢Ó–xN t \Àû FÎÌ É>½èX+0Árjc’ÁM¶¾úÙ¼¹ÁÜOønüOÙ¿zÈæ<ÓWî^ š¶|xk——¯÷ø™ësò(èáYÍ{oè—®®Rhöo×ùåŸyšŸ¦¯ï|Ê_ÿ^¤»á¦“S²Ó}º!Òö ¾ôü¢6®ˆçÇøÖ ,‹YÊÙƒsʽC þ½Œ‹ÿÆ:gëŒ^Ú’»8d´ºGü‹ooê?Gç …£˜£‹k8¿ÆÅ䘲èjçê°Ok²·…ßûn1ÁÏ&ä§>úÞø€ÔL•4cb_`}àap¶K™\ Žzšn]'‹oÒ©7”ѧçºä¾£Ì'ô}Ÿž3R;£ ¼«ðÍ1¦~ˆü ” ÐH_á|K7œ›Ñ r5 ïîó¨ƒvm—+n®(1È¥ì\ºÊp}D}°KúÚoe9îÅWiSênXåסbIp™ .ÙJìñÁã©°¾–§H9YÚÕäö#ôÖm’G§øÕ·ž‰ØLâ¹Wsiø©M¢¶Á=ÀEž$¿ˆ"s6Ætzؼ'<8p‘—m I”C7!DKcj²²Jt:ƒÝc|åðM+¥–ö©M܆Q? ·R#¸ôB¦_íðÃ8Ö{ß9§ÏYÔžwß=âÞîŒEÙ2Ĥ±!N–NÍ ñ"#¾þÔ@Ï_êR6â|q2õ8ø³¯$zúŠôª*°µ’«uâ£Ý_t¾üY•Cÿ¢æÔú‚÷‹?µ+|Žâ³bxÿ¸ßÿ<Þ/*Á ?µé$aûùm{ïïÑÖn)ÁÚì³òìfˆ†9~û¶î¾vÅ q'&î¤<|óÃ+#uÖz<þøˆõÅ<Ü’àp¡#SØF¢e§•¨"1‹ öA«Kúéš‚ß"„ì)ŠNèkƨ$O8µNÍè\ú³\ý…WÔ]KèGÝ_‰øÁð5F³®^¹÷ˆP\}KûaT‹Ö‹…6Xíõ²³x|mÉúWtq%bv6Ñ÷OÖ9H¯òË7J~qcÙ4¡IGzö—¾ÎÖ—Vt^À4/˜÷"æ#£: ¸÷,Ôt IDAT£zOmÒýJ²s+ûQB…c­0Øô2¿2å‹=zo~{xMÓDaoc@Ýlð\ÿH¬¬²²vO³Ù7BsVkòÝÿéÛß#{¸KçôLø†È6¬¾zlu“¶ó“oQÓÃ9ƒW‡Ævä•дc¦:SË1N-­KÌ0TÔæ!N{?Ƹcäç’Ÿ#ß çhÜK*úaŸ*N4‹/‘4±:õC¶§‡TIÄ4ëù!­‰Ù]54¶åòY˰S$gÚEažvNsã!G¤ Þæ&Æš "“*˜)çqC'44šPœÜÑ¢n‚#AÀâIˆh«ªRyÝb=<^½ü2ãë´í®23Á6¥Èº¸$×ä,„a:¦7ÝU4‰aÑÕ$)ɯ>Òµ+Ø´«¨¿†mHƒu⪦;]Ðm¤néÂæÜqmƒó–â<èlÑr0®8ž5¡×@œE‘Â2MKê«wËž\¸‘ Ó²kóýÕpÃÿ\¯>ÚßøáOóÔçϦ܇퇛ô}®k»q ÃÐc¥*ؘr–ÇQTm(kGt“ˆ‘…~d461»& !^LZ2+ÕÒî‘x¡ob¯\v\£Äâ’ßZž-Žu…ðæÊP‘™ryñ€žJô6Y(Q‡šÞj7ì\¹*çMxíá}ŽNs­(ð—®â†«øßa®„Ý*{®ÏÇn¡·ê32—ê«]˜LK~pg¢lµsa5ô»1CŸ0ùèãÙ˜°’ú)QÏZ¢Âá6ûb£¢ñTaZÐfi¨¹¦ó1îè„|â Í8”v¢(Ý!­z˜Ó‰Lœu#oBp X'b…~LHm!`=Ù$ <8”JBãÀ9Ìj—úâ€ßý€ïý/¯á}‡«_ÙAÙ¨áæŸYãK?¿ÍÖÓ†ÅiÍÑÃF§›px§e÷½’XÐí¡ç£ê=eé}.=Sòì+7~ö­=ó“IêÉ„Õu 7Ö9¸w?ÌÎÎ~\€V/ ôõë?ÆpŸüýìCÒ<çÞë¥~ô¦¼üí>Gwjnÿ~ñY‚lÿ@°®µª§Ó0?8ú"Ù^_TŽñÏiË7C¶×7Œ†Œ†Cžyæ._¼Hu6•i\ˆ<Š%V×zdy„M¬¢,&tB<êƒ5¸¦ù ‚ÖJ² &²Ø^†é¥¨—Éô2L/ OŽúÃÇ3Ì—6žšV¡õø8–˼p.à—›Wøã).€ÇО/Tí)g Õ¬ÆËÈ{BS¶øàI»±ânò~JwÔa´3$fD½ åyòQª(KH“”vÑpx0Õ8Ï™w;(ËÉmÀK˜Ll£µ.ý• E‰%Êcª*hzº ž—XkE¿Oë=TK”tXÉÅVqëƒÏS‘,ãß´¨ iÑ“h$y0¥ª—¾a×. õPÔNEíà xj«Ãõ­®Öziˆ­!±Aý®Ø^7¯Çl þþï|ÂîñéŸ4 _p!ÿóbx?ÏF@øîÿ Ãûy%XÁÍOæœÜ;ev2_½>k77„öÞxÈä`ÂÉ£sMŽfœÞ;¥ZTºükç9|Ÿ¸ßÕt8ÐëfüèÌëA G|0E{5A¶¬èîÕÝ;Sz^/”+™Ê)$,MCDÖp¢­G]:uE<=“==ÂU…ÖF/idºjÊ3L°øàå‚“ 9µ¿©ÆÖœF3 1 gŒJ¡Üm6«:l© Û„hñÉq´¯Ah4pïÑ©m5VÀ’Ñ_ÿsšåýÚþ[\¸~‰›—u7}¤×WÀÏÝ}A__ wù¢ÏwÙiÔ]dÌ]W˜—W¼ÚÙÙì¾N†_ÖáÙ×8ûÕø­ª¯7xš§UúÖÙP/ðÃñ€Þj¦ŸýæMÕTwª‡h:'ŸÔòóÛ´´G}´’*ýö©Òû Ñý; z4¾¤ã; ñµ}MÏré£K$zIõ¹î¯ònD—˜^(däÙܹ«yøËªÎÊ×þ6nº h½æf„g@onˆ0Ðbýš¶_¢g8¿v‘qÿ1ëûs¹ñœÖµ„8¨²ÒLðÜQiö)͵™Ë«•ädØDØ`à•«²ËüǾ?‘ÅËù ¸Ð¥²{ZŸíbƒá¼3BlâMOw7‚fi­k'3mMæ*â\V,³]ž6¬L;´¾+£’D3…(&±kÖJå4å$©XÄV&´Øj‚o+µIª C¨[¢YÚ¢”ª‚Ô"ç]C‰ º©4Y£­îÓQ­zbnÜÔÙq¢ºœ’šseõ!éa$Ž[²ü‚Üv_Ñê6éè2ÙúU¥ëWˆúk˜•Å;O“ôVÕŽT5Ã8Ó–±$ã;n°ãVã“JóiÃ|Úêø¨ÔlÖ¨ß5²€ïYÜV‚"¯ÇáXo­­Ê¯ü5^~<Ö+ïü5ßx†¿ùtáðo’&ûª¹Äêq®^“q´Òh/ªhIÔ7=œÕåñ©&«Ó,Vi*:æÖ3ŸŽ•+ââ`ŒÑ¢*šVf^ᛊ&–Üj³:ÀõRLídÊ7™«=]P-Eíði¢ž÷ôcCG:#&'èfÔj=7”²|8t z¦g8ª¡rŸºP=NÒ<˵]N¸1;Ö}3â͵ëô‚ãùñæIÂG½MMCàú…m^¹Îññ©Þ¹½§iœëúñcº[Û”Û¸OÞ—B«3utnºš_¹@EÎñQð¥^£¯÷œS» Ë×7‰’D.ÉtPU[GÒB²ð²6‚Q©ÕZS]ܤLf{{˜é”üÜ‘,)¤îˆÌ0ûÇ ב!ÈEACê¬|fq½ï½Lž¯ŒÄѹü¤À|Ûç©Ü¥!ÕΈYˆôðŸèþÛgì¾ßÅ­lXÝYÕæõËê »\}yS—^ˆØx*RÝÊBÜ}§àèv¥Ë7Ó¥"6$„8Â茨Ûju{Ê¥§æÜøÚS k/ÊÆ+l¬¯àêF÷?øàIp_P[7<þøGÜ}ûï±ýÒ}õ×QÖyãoOô«ÿÕÞ­¸÷z©Ù‰ûc%X?µöý$ÏJŸSþ§–`%i"Çêt:|ùÙgyþæM.\¾ÄåË—Ôµ±ª“1¾,Õµ‘º6&µuí4;/´8/8ߟÐ[h}{EilÉóDÝnJ§›¨ÛIévRu; N,CXRù0Bf).àÉl@²3™žbËJQÓ Y爚[W2u `žÈ£LÛJuChÚåv@ãäÎÔGSU¥WSÚE£rR©,œ¢Ø ‚G6¶t{±òN$£å„>ÌöîŸèlÐçtk2Ï´3ŒÕï.eÖ¥|Àà—äIQjQdXAóqA½¨–8Ú\Y£E)òLùF_£'MÝŒÄË·c±”`…eu‘±RÕÉñÆâ' ŽÉ‡VÖûÔEÃùd®`’ Y¤ eï¢4ÆwQ·”ÇšéB+[#ú#5½”3Pë‰Aj¾ Xc¥<ÆÅ†¶¨–BãÖ3›‹ÉÂ*‰<›k­z]a²ÁÇøºÅÕ-RP‹Ç·5¡ršžT\ÝÈ”3ݸÐ'O"m­§œøTLJ CßjVÕ*RÑ&"ï÷”¶¦j™-jµí%ÞÔNu»Ìv‹¬ãiÃÞa©~nôÕž¿œêù«]]ÙÝÞ]pëÁœ;g•Sž :Ržnš,ÆZéŠUuK­ö¼7jà kueÃ2/fúïþ­~ÊgùOšcÿ+ Öÿ%XÞyg g ‚ÿIa­Çöõ5NÞßg÷­‡ø%{šj^±8_°óå‹Ú|~›ƒwóðµ{œžÜ9X°?®9mÑAÄ–Ë]£ëÄÕQN·›Òé¥ìä†A!48WJm‹êVj¶h1ͯ ø”dÓ!2+ÄeuLÖ«Š.àš’y9“k[Œ1ò¡fÞŽ9÷" Ðsµ|È(¸‚3Vµ=ÁšJk>b®ÀL^k­Xk I'¨C:H Úä0jQ×/õ?Þù5Ûtfë '|÷­×aRóLo;Þgö`—¾wEë'†n1ft§f=¶ô/¤Té¦ú݂ЪïîqžÖü7‡¼Û ?(x7¼¬ÍÝ-¾qçy™½ÀþIÆ¢ºÀZ¶¢+?³†?«þ›?€ï<ƽÔ¾_NK:›9S)÷-£û)¾K‡Õ&2SÂa—ƒßúqšÌ5m|Àþê9‹Ùƒ¸`+9W²vÂåKcžý;ÔSCOè^»‰º›g=v/­‚‹´y÷öôrrBtðƒùÅÆ ûž]œêù ®³I3;–1Gˆ9R+OŒW ‘Q°€í"]mA"õð&¦ˆ–Ê?¢Ê¦ÌíiµÅY6¦°4ªbÉe0&çÎÆ\ã|Á•³);ã’Ê®ñ`Õ0OJ.ž·¬~yKð^IÜ’$^‘, oÖ@ø)'I‰O¬ ncÕÆ1>u³ ÊT„+J…º|‚y ôJa]Æ´guÙÞÄW‡ÎejC!§—v¨’î7²~B7ßS§™“ž¯AÓÇg¦#–ˆGa;C¢Á†Ô[%]aÖx”Ì» m®Å¬ä)½$bЋI3ËtÚp|\2לŸVÄËèj‡ºÁÔ˜âX¬\`÷Ò_ç•Ýc^}ó¿ÐÙÕ«Üú¹_ac÷ªsvÌý/}‹ðËo°}ó ^¿Ig2ÐÃ+-ûi£PF è˳C.̧ì®9íÄÈlÖ¥ÎNÚ99†K½UãjŽ•Á6SÖòEAƒ§ìÂÆPfc…(NÀˆPÕ´g ³J‹I lëÉóˆY’ÉxÏS”\H§IÆ¥Q?x¾Ü7$}*Ç Au0çÒæ›;;ðèþ.Ë9lNÙ¼vƒüÊ Ú²yx—fœØ”¨½"¦öVû¶Ã…¼Õ«ù‚ûg%·J.]Ú ×ÏÕé ™Ì &“ ‰"Ì “O Ć´›«ØX£º¶CÝ”TwîaË’­mìØSSꬠ3Ú!žÔ´çç˜N_6ïZ‡‚‚´¶øÌ¨D„ep4Ñú*f\(œOQÑàêƒA£L~£Gü­WØøæ7dF9ß›ÓG3>úÝSí¾Wal¦ù©cýÒ*+[+Šl$éoWl=cèm&t7SE½ã Örõ·uE©,²z£º7¿Eb®c'S ×rë­·`‰¬•kjŽ~ÈáƒyñÛÜ,‡÷þñ\w¿_pt»fvâ>+æ‹Ôâ)¬¯~ëÏð?÷-®>uƒ•K;D?+ðóR~^â‹c¬"kA¢õžYÓj:/)Óy‰—‡ÅtASTòeƒÊ–P5„¢YËFaQ“ÇVWè÷sƒŒþ §ßÏér-Ï3 †²8ÂâAW27žËT5*+L݈Æ÷Xc–É>€á‰Ï³•iZ¨(kTÖ„Éœöx*7-h›@}¶`þñ>e\šb¬Qb ™±œŽÙ‹R·H¸ÙñÚȸ±p1µ3¾7£qŽ$‚K›‰zY„dQhÂç+Ú¶¡×AÝ\üÖ›wôÆû¼ýÉ©¾ûÖUãÿ•ëOÙDüI§Ï*ãú¬Òª_ìk÷×{l>µÆx÷œÃÛÇÿÜ÷·¾´ÍÊ•ß: çÎpU‹/¢Õ¥†¿øT§×3Ò,¢—,#€)*LQa54ù'ŒO³¾E b©Ùìu‰Â ‘_!*r™& FsBgN'Ïé-*æÓ,Â!lÓà%æí‚¼©Yu­ RJÖX˜œƒxŒµ»Ú}1µ3yVZÃÀ‹8§@MLå·qv†‰ïã팮3 ÜrëñÌ:&òKt¯ËÉêËËUñÖñUmjõþ,Üûõà¿sÈ0¢}}ÆþëÇÜÿî>÷~ó”ãûŽÓÝ–Ã7Ž8xgÊÃ×'<~³àíÖùáï‹b|È•_ùyž¯W¸öÆ:ÉJû4Iù ۧϰ™ì¨óógø±¥þÍ+´‡7¡ûŸ‰»–l«Ïøp@ü0eÐ)—鲑8n60f&jÎw·ÈW¡¶°wE›qÖIŽ(Ä|äbvÖYKãóÞ¼9••5uUuWu7‡î&-ŠdJ´i?X6dJ¶aØ †!`~ÃO¶dÉ0 ’@ˆ‚D‘R“gµÈ®êî3++çáæï=ã#Âçf±‡IêÁ†62p.Nî;Nœ}b­ë_ÿoY²Tä<î¶9ê¥+RQ§ »i ¥œMàÃbŠ5sQOãfZ ²ÆÕ%¯f©ÜJõ:(±h8£©=ÓQ¡ñþ4ÔEM(»¦Šè)p.j¨²Œ›¦ÅU[³–ž±rÇ̤œ¬Ç\¬ÙL¹Ë€±M8?;¢*î&‹Ê›N-wH²“Ñ”Ãá”Ý4ãÐÂéSØ£üí÷ÈÛ ìD ¸² äSlšiúÂ܉>çÆ,ÐðîãeˆxêÙsH–Ç×ï3,§Äý "‘ô;´7V)Ï®3ô¨‡‡ªnÜ ¡(è®®awJ‡¡ÈŽÈ–Ö‰jªÇ±íQwsþ|„"l0ˆ¦Í ½Çt2¢8%aZዚÐxL“¬ æcÞüΛ,œ=Ãé~:);ßzß8Myë×7yóŸ=b÷î˜ߨfýÒýå¢(#2ÚC{¡QãBp.à!¦ pˆ²‰ˆÒŠÃ›×yø^‡VÔ§»<`é /S91y¼ ~®ÍÑêŠÏýìÙr‹P;:‹†÷~{J1òŸýi¹ûÿ¤Ÿ8®<÷,§Î!Š"d-ÞZZqL«•‘v;DAÐx*ï(›šÊÍY¶BÝàk'BŒØº·Íν¶ïí°wý{ìÞßý¾¶ÃxLQn2Ù‘ïN˜îŽ˜î·Ý1“!³a>gÂJ#yhfå<àB%,¿è¸=ù;sƒÌ¦0ÞaœQQÓœ0Îçˆ!à¦%ÅÖ7©è/vu¸7ážRò•²ñPO ``=‡w÷ig†Ä,‡ÉþCw±MÖK‰’ùfråf£œ*/°ÂÑŸ—Ø$Æ_\§?Mç•ô­ô8ÌŠy]…„1Â(³LÞXì´ ®ãQ®ÞJ—Þb‡&¯gÔ‘ˆ[)q˜+ÀJË:Ô&PGë`ä=n<&«Ý^‡,‰ ±Å÷:$ƒ6¦© ³ŠP:LdUxªªÆ®ñì-ÓÒÐo7,v ÒÌ ÎFäµTÌžg¡bÖ4ÚÝœ…‡Æ,/¥,.¶Xïˆ$–^?ˆC”´HŽf„YAaòžý=­_9¡ñÞT»·÷~ ÙþT;×·9º¨¦l~ ÄŠ“Ý×x™i.å%**™¢Ñ±€Î“êØ9®AJ"LKÝUY»¢¸hË–-™ª‘â™#‰¡‚$K¦ÎxY•MTš)ä…"XôhÁ¡N|è3â¹I5Š·d˜°ÔHÆŸ#«REË‹•ÆÈHªÔy"UVòñŽ •:βè AÖil¦Bq¼¤ôôÏéÆ/X¾õWöu÷Kµ¢QMuà”eËj]l«è×dÝLÝ•XíÕTÙ¢´§Ôû¯MyôN®Go×Y«*Öm­?µøE‘¯På›XAJ‚ÐÝd—‰oèû³ÊÂë§Ã­\ùËâÙEõŸ^fë~£ý-G·3TœÞV”Çjï®’62•SÓÁ"d}PC¬–i8Ñ»¨8ZÑ{ôîÑ®Ú6R'²ZêGZXM´pº­Á¥L,Ke˜å9“´äíõuêàŒ¾òú_ÕþùK|ûgþ ÙzWgÞýûÖ©øâ‘žZü–’ßîs{ë¤ÞkY¦¿ÕÖÙb™…&Ñöš×…FÑÈêD9PݲZiu6Ñv–i˜Åò±d$ä-jÔ Òùd iÛò8sD>(õ’dˆš@4kD^à&…¢¤É,ta¡#sî¬æ°~)–GSMÇ¥¶J§g|ÁBl5jwådXòâízQ4^ª/UX­×-™BÛ½EîD‹r^Ê7µ7¼SJý•5]<·¡µñ–f÷î*ÏNRŽKΟ?IšOU>¼¯¾/…" [!Cä‘)¶:.ôù0Ôªi4î,±rþŒb)Š;ºsí¦»»tÖ—eϬ1Ž ÃªQ{–‹;w)†Š£DŒ+…½).ŠN,ªŸ.©x°©àQw«àÎ:ŒŒÒÆÊe׉ÂE&‡SBÓÈLjïem$ÓKщžÞß}̵_ÿ]¦wtæÕ—µñïP”9o\ÿCf©Êkóúw¿³¯ë¿ûXŸVoqù½…>†R±5Š#«(n+霓lSW Î É$mQ •d÷eêSòÖVž_åÜO?Ëê•§µùæ]šÙDúÂÏ÷Õ[OTM_MõίMŸ¨®Z{¨±kŸöÿþÐþu:zöÂ%|ðIU]Z–÷ötëúûºyíºn^{O×ß|‹³W.sªf¹ª½#HF2ÆÈÊ"æ…[@AÁyu–:Úxzƒ(Š•ôZŠzéw7â~KÉ c6-µ}w[G»C w†:Úê`ûˆƒí£^÷·ØÞÜÇŒ¦DÙÜ4ÇX#wÌ©'ÇÄ’AÇZÇÿÄ<.y‚Ž’Œ8^Ò%!cÀXƒ)ki2CÓRaV¨Θlç%éÞ¡Ö¢†Å^Ìî;;Ê·GZ¼° qnT”MCo©M¡Ep^qjh¼¨j«|8S5Q-tÔ$v\@ Ökm±#Ž& ’h¥ú®D¦q ’Œ™»lµðÖbg…lÕȇÞ3X`ŒTŽ Uµ“‹­¢4QÔxy?Wo¹@jƒ²Üᬕ­jhÅívª²ªTHZVqr³ŠfZ cÚ‰0 ¦Qä<åU^Ⲩ mAº¼,›&DME⽜³L]­Æ8•eý[cíí¬®fzj=a½Ë¶­v›Ž¢¼!ä¹¼|;¦îF Î+ VÆù˜Nk5Óâ ¥8Žt4*5 !¨“Åš^›;¥6w+UN+…õ•„+纺z®/t8jxã½±®ß›i:›‘Æ’ FKm¯füw¿ü¶~é^£qá“~ŸÇÒgð{ùÐI} ?ü³¬çO$Ý„ IDATÿkÖ¡`c Þ1Ù›þÀIMѨ4eó¡}T.ðîAÅíÃJbO?|3OéÊZŒ‰È’U‚Lo /5=ì4E¥AUƒ5Sl4;UÈÁBèå+äÔLÝ#LY!$‹Î(õbÄ"S60j¨í]¥¾b¹ŠHÂy9ÚÀŽ"ïI‚¨ r øãŸ Om§Øàȼ¥ï ŽÀušÚ€) »¾ªÖúŸ!ÎNq÷ÏmóÞÏ©\h˜¬çüî…{¼ò…Ÿeõ?ºÄòê•ËúüÏ.qùÇû<õeÏ©„þbÊ…;ºÕ yùs3y¶áá‹7_èÒ>ѧùÎCöÞœjxHû©RýË3Ò´bíå70¯tUÍzøkßTþö?çáÆ6;¯.híGˆšŠØÆä•QÙ?`FøF4LÛ~Ó ‰"ÇÞÞ UíµÅã6¯¯|ƒÃ¬‘c%*µbÀgNÏž¿Îtg—oÿâuüƒkT% û#ŒíÒôªâU6 lõ©²³t‘o±o% Y[¦Æ i΂$£®‚§ÒФœ”!»ˆ*ëñ´°TŒ»3u ¦Y'­Ü\Ú%su 7Û M²zÂÚÈÐ+‚5†™áÞâ&"çüQ W y‡š¢ˆ #kö[S_©™$,D¥LQsxè¨Ë–âÌ`Ú±v—Ì ‹Ë“¬ ÄèÍúЧ¤5¦ ª[1UÚÃâiéßL4Hðʸqx›ã uʼnnJ´b(²@‘x/ψ&9ÞÀkkËô‡ýØ[¿ÇÁ¹§øöÏügT­LÞü[ ¶ßbòj¤S/í¾“±ÿ«lÐá?cd0DT5h<ƒIŽËb!OÓ‰0g6°Ý6´»ªFšIÅÑQNÖ¯„ÀNÜ"QÐ%ãpiBÞÎd"CåaÇ´I›ŠÏËû«òIÄj1ÑÅÉ-j¸üI¯O÷î5ÎÝ{“­,cÖ^ä©sd«Ëªöw±{[œk†äÁpØZÀz/³7&9šéÁÊ*mãy¥>à°•²½¸®õ^JÖ]ähœóhw‹ZAùã}ò·o Û÷åm͉ ¬%ž5$cÓ ³Ð&qîpDh ¶Ó#X.jHB$Kݵ‰cì¬AÞa /òÙ9Ž>^hS„F¿ÿß¤Ê ÊÑXýÓ'œ9EÔo³õÍï¨™Ìæôæ c¤ÉAÉÍ?Øåõt‡G×÷™y¦‡±Nœ=…µ}Bˆ]Œm“ô–ÔÊ–ieˤÑ2½Åeúƒ’ѽ3ÔeŸþâïsrã,ê)”{´{cξÔáÜ—ú$«ß8Ük°‘@^ùð£7/£ºúµ6'¯¦:q)eý©k—ÓOl'.¥cG9õj;Ó8áG?÷_zæÎolÈyG»•‘—…ܱ3úQ¶´, ¦ã1ÓÉ„ÙdB™ç˜'*öI¼pBÞ;Œæ%ÏlÄ!Œ™ ݵm.¾z•sKZ>³ÈêÙ%VÏ.±rÜNœ_ÖÒ©â4Öâú"KK,l,Ò?9˜·§Hº-9&hµS”ƪŒ¡Yc°‚rÎã}@~¾=(™ã¸ã˜ßðøS†0×` Çùìã“çp,®h0Ѽò»™–ÄÁ“Îf¤y)ʆé£ÍÁTYg.n<Û/ñ.PÏ*fÛô—ÚØ$RÔ²äuÌl┎eEijU®&:trEí,&ÎKTΡ•@ÏÉjŠJÆ5æQµZkIëJ¦j ˆw …YÁ‡÷û#O´ˆØ¦15„#¡UŸ„Ð y²ÏngJJÎú•ð4È•›¢hH+Äô)lÃ0>dÄEìÖâìûœCá2öÁ32çŽöÁÓ¶-®dÏSñËKïpbhÙÏO úeÍ,ŠØîŒi{Üšè·–fÔ»÷y´Ûeñ¥œ¼´Êã·÷84žéÊ~Wôs ÌeŠƒG´÷rv[†i7A˜…5È´É¥NÉ`ýo w¸5.Y˜öxEúxØ.èN—p{Q,X^ºû˜ÑÙK¼õS‘"ëròÎ?¡»s†s/<ÂŒ×ÿî3<øÝÓn.ÐkϸüÅ[œ\:Ĥ繸ÿUü;K¼{aÌëW<££ˆ/?êÓ±6ª]~rs—_Ý€ý¬-aKî¯5%?rdø¼[$¤1ûf6ÅLrÒQATÔsQP̼êÓšC<Ÿ¥äMI¼¼‚][@ƒÕ–Ñæc^+jÚ£’‹ F¹ãVcXî.G×K2òIÁ4wÜON³Sìrùh‹3½ t–¸9Xc­ò¹Éß|ÿM¾^Ô\Îø_ñâd‹_ë/SPœ (™+›Û'ÏÌÏÈL„é$ؼ&{g“k-8¯Œ Œ¸~øˆÑ ÍBóü3ϳy÷!ãi‘'-À•Sª^‚6Ä⤋11.â*À¬ÀÕ“¤ ÍEé‚§49‰OˆCDÝ1„Ô⠘Ȓ„ßÌëfȼŸk5|1™Î×õj<áÛóÿ¡½¶ÂÉ—žã ÿõÊ·þêÿÎìá6!€k¾×ñ/gŽߨáÆ7vˆ[1Ï|õ$ÆÌÇÕT «çz¼ôÓgçÇmí~ÌÊù‹ 62ò#Gj,õsÚö>?ùWÀž@.Xü¸ÁsÄdZòÅŸßàÕ6¯lÝ(±ñÚyW²åÊtˆƒÕ£˜ð h 1_ž6¯U|ó—ñú/ßûsF³)ïܹ͋—¯ÛˆŸùòRÖw61És®Ý½Íx6cZäد¾k-ü¾ãÚÛïððÞ}~ú'ŠÞÂÓÃ!ÅѺiˆ‚ÁbDYÂàÔ*²&‡ Y.êùäséxC9&2œ¸¸ š×7/Oß3¦b\2=œÍÇx?Wµ6@f…QàðábRѶ"øÚÍ댾ÏÇ ð„þö+?Ñú¾Íc«Q"LdægÆññ÷ñÿçÃÿýŸpöC„hNüñ³Ÿ…¥ƒO€]ýqêa>Ma .®tôSW–éÇB6"JSbç±Uk[Êb[ªRb„ÒÈû@Ë 0aÙôCEÛ"ò°\ÍiE÷"ÏÌÌ*Ñœû¡Ô·HÝYê0±Sb¿Å )åãc”ºœˆ#’¹6ªjµ¥c9t1w|êˆ1tƒA!04^c0ÕÞü³‰~íç¶Sž6;üþŸ»ÏÃ$RЧZ¶Õ¦1 ýaJt4Òç›Qdù!T OÈêïÞÌ••=Õ1ì7â =ïe–¥t…õg{Òçîó…ÁyвÒÞ»…¾Qèñ;òáÓ´NRy7æá¶ØûSÈ=ëHm™ô—N°ö|©<¸ÕŠöfŒ¯QÕí°W¯ÒÊw06Ðüô=šE§âíçYên`oD$]MÕW«uȳÙPÆE¤Ë–£\è©sá«2'.2Ñ”iTËYƒÃã"Ocip‰‘m P«#eBÖYO¾s’þt‡ÞlWµµŒ¬Q%èúJG)áÔ¡ë<ýª‚(¡ÑâÌÒš®áŒe«û˜åbÆBUј¡ u l+x›+h›ÀíÆ±2fNv çÁ®Å—T¤KÊc1Š'Újí1Šgjâ Ð 儚:i¯¶÷Ô‘UŘÚáêS{ù,"–Ñ´ÿ4­øyó:UýÝ‘SÝ ®“©”Šf1³Â`¬ÓB6c ©êÃã‘…Ê`ëå ÕôPM1#5ËÔý6e¿¥(QÿˆÊ&xoHh÷öXîl±Þ‹8µšÐn ðõ Üè";QM”=âґÙˆh*=ww¦é¹yç'þ=F gèîßÑ…·ÿ&qyDúj®î•!ïýgy믽D5N´rvŸ«_¸¥KgwÈ¢¥{rýœÖpƒ3;]êaÍ;'ò6$Î…6+UÍj~Èã,ÕDVVbCn=Þˆ³e¬D½„¸7PÜéÚmUÖ#c ™ÚÉ£ÈXb• Á9òÈ)/Ç8DB½TÕÒ¢‚M8oK¢¼Ðõ‡•8ÍØ©`y±M»“}ZMÅɃm9l_£8#ñŽ•:'9Úçv^óNÚ'.w£î•«JâˆúÖuüÁ>7縓­S»J5ÍqÇ•“v|Ê?Ñ)ŸÖÏ¡4&2]ŠI¡íûIºm)kÉw3Œ ñ¸Ä‹[sGR)?›ÌwOÓï¼LTSR1£ã»RQw,>’ÄÝÆÆ„Ñ9äg%X;èZ1tÞ¸þ®ö>°õtFÒëjåò%uϤ}é´ö¿s'™²¾ñlß²usÈö­»w'Ü}c_ïÿþ6oüÓ¼ùõ¼öîqÿ­ê¢b¼@] ÇÜ{玢V`ãòI²nŸˆÛ@šdXõ‘(‰Jâ­œ^áâKëœ}~sß×.¼¸®SOŸ Ž$ñ‚z K´{}Zí.Yç£[ëøõÂË«T³†oÿêƒõ¶¸ùðînmPT¥.lœââÆkK˺|êŒÚ­–"k©›†ºi>Ö^./,êóÏ=GS×"x¬µóÉ´ÅѼ`»•²réå>6Ž) §"o(¦Ž|rܦ åÄ)Ÿ8ЉS9ó”3‡÷çué©+¯¦òÔ¥%–â,UÜJÕ]Îè-µÔ^̈z-|œÈöÛ,œ_¤wn‰öÙEQ;šÃæ ÞÊ㯞diæß2š?~žQ8fÉá˜eóƒ6Ç<Ù¨’™Sg›ïª9Á9#EÖàòZõ¨ ÜŸÉLå§9ÁyâVKI¿O|4U¢r•º ñ8Ÿg(²ºm‚1 ãý\i1Ž?®e‰,eš*HÄEõö†«’NJo¹G“WTã%1k(« æˆ …8RH,ñd&—µæòI!ÇjLgDÞcâXq;ÅÕNuÓ`[1Q„º‘¯=q+‘I"jçµÃ¡8R^Jã²E”%ô¢‰:IMN*¥œ;Ù¥l‚ögŽg¯ö·b®]?àþý)n›KgÚ,· åUàÑ,áü…˜¼Öh{ˆÃSÆ߉eÛ)>¯0õœt ¨ÓiMd ƒ~‹ª äUCU6E…ŒE‰îoïÃÙõ†v«Tãj]ÏéAÏ^̸x:£j[;AÅL,õûª]`’çÔM£?†¿üY!ħϜü«Ì~ÌÞÁúnîÞOÒïø°‚“Ï2¡ßÍgÕù¸û˜nȇõ>a‚ßP" \±£©XZ€¢¤µ?‚8¢êga„¯‹y/™š®óZdÆÀ | ò¼~žÙðÀÔF6P þA`…£/”Æjí‘ù뜙 a7AΦ Ú~¨–Dm¤‚ ‘ñ’<òPx±†þqð‘Ë3±>8¶B'¾ò"gþƒ?žI/ëÎÝdáp“¯þ†%Ÿ6Ú=]áZ5δ\—<Ã3C…Ì*Ru"mî'uø;_žêÙr.î9º1¿þ|Ç®OärÖ¢*Œ–ƒ^ÿÒ[_ñ:÷ôB8Ÿ·ØycÊäÞ;Ï6C´pJîÏO9ü‰qؾ5Õßþ¯Þfû`}5 ¦•ª\™Ñ™ ¡êvµW¯Ò*v0‘gvuB:Sð×/i-y÷¾çúB¦iFcgê$EX«Z*ò„úñ·yêK+!]ûYXýŠÚå#lVº™”vý˜*v”qCrp7´öïc§[˜ÉcÙñ£`'°ÓM%ù9MÈ%çüñ89µñ¬Ósž~5$oŸ¥^y&t‡ïã:'5;ý ø=–FÈšGA °&q…ØMÐCB(‘zCâýœR2D(ºHÓ:Ë^«Û­öÒCM¢"8Ù¢ !¯)g9^µ\fÉ\ WzU&&o%æ)tß –ÂÁš‘™˜ðRø•¥©2HÛ<>Üd\x AMdËÐÊk #жtNgÏ|Ø­5‘ÂZ4QRÏ8ª[´èÐjZØÆ†Y³§ýòÕÅÓÔç/ÊÔ5U”¢Ø‡êtöH² >¶´;–ý‚– F³e¢á‹‡}²2b©ÈY<°ì>õE®ÿøÏkÖ?ʆS7ÿa¼¥ô˽¯†÷ÿæ3z㯼JùCËþaxqí–NdãªHÍ‚Su%ç`ëÉö€Õ}ˆ"Ë»gnwYcYh:,•'ò£°•¶˜)®L #GmçŠXVžÇ™U >KÔÊøn›º‡¥PTÐ8)€o'D6")š—lYS„çªTGAÊÓ6W£*tÔè­CO™p.v:8*¹¿_@ÕÐZìB–ròÑÝЩ ÝO¦é‰VÊ…é.Ëå”óå˜aÚåÛK§Y(gá…é.zös4YGÍí÷pû<î¬1‹û¤Æ U¡œ‚„FMLjžµCù¬K½°Œd‰“Û;ª'ÁÆs*Ú¸6na’Èš7á}…_˜³ëøvŒKÈ"Bfe[ml–…¦mäá AFŠ»]—„ªÆ–.$3‡ôÐO1í„›·ok8ý(ŽFáÌ~‘$Io¬„öùS:øÎ5šYþ™íG>ª5V̆å´aÿÁ”w~s›[¯oóâ}Ù°æWÿ·_ãÚïÜÖæ{#Þø'w)²gñ«_âÝ~‡È±|z £8#b">¢¼U”¤4úÿóßø{·x÷·óö?ô‰í¯?äÝßzÌÁÃéG:US‡ižëÖ£‡Ü~ü(lïïëîÖcέԉťpje•«ç.èÄÂ"kKËøN'jû»Y[O>CU–Á5Í’G$IL’ÄŠ“h^œ>É)ÇDíÛŠƒo‚œÿ]Íùœ rs"5M ,<ÅÌQÌùÌ…ræTæŽbêTLšPLòé\¼®*|˜*íÞÞcïö~ÈrU³‚ÉΘÑÖ8¸a®¨q˜yæ7„'ÔÆÖ|€cæAˆ£`̶Ç|æ{ž0çš9ÖEÒÛ“ šÇc| ÔN¾vÁ7‚2cHƒ iU¨Û[Cš%> ª™ÃÂÒ:-мPž$YŠÉ”DÆ&Ș ïegæ8( •Gu–»D­˜æ`Š"l¿C3žÑ4ŽF!022>„¤¬;ª†¦ *#‹L1“™l¿KÜÍ‚µVµ˜H$†¯¦h‚\I#ò¦&Ÿä¸º!é¤ÔUдŠIÛqè'¹åak(íå1Ö[ÁÕµîïUá…«}Õ^Ü»=ä©‹}Ο[ׄµ¬ÔJæÙ 1»ô•T%ÍÑS;BlC• ÐŠi¥)Qã1ªÚ‘ç Q+eéì µkÈg9¾ Ôµ£¬µ—ö‡†ÝC˜ÌN­ É>d©Ó [óô¹˜3ë&äe©6–7try…ØZ톟˜¡üùÃ|Ï;çãÖ¨ZÏ>­Oþiâ†ø ч ì£÷ý~ø”õG $¾ÿ¾M 3¦ð }~Øõ|Š/Eóñ)‚Òªacë0P4Ú2 Bã+BPUâGƒk ãKÎPc‚÷T+„‘õÔ†9f–¹š¹#Ajˆ ‰T…Ž>NqVó}Òà˜ÄèP Ú!²'ÚC¦¤6Æ“h…  €‡ÚZI¤žSh‚'—×Ðz*A(!ËZáòó_æŒýþhÂ+éFÐ˵Î?´\­lxûWÞæþê·• züƒ§\¸ëoñÕúíÄã›6Á‘Jrá[‹cÞ[/Bëº À?>Ÿr}- gÜ×»§fø# fËüީߣÚè‡úÂ"ÿþçO±¾yšñ¿lòè×^cºð&ž.z>Ám×aÿý\ÏþäEVº)ËìÔžè½h^£jŒ—̜ףÝ44MM“˜¾è8ûÆãó†ËqØö–ÚCoo„¯ÿÎKúñs¿Otð¿¢é_ÝÐÓáë¿Ií\ˆB`µ©1ǵŠQ>™3¡ÚåálÌA±h-{?@ŸXË’ëRú„Ê—4³CÌøq¥©L8tXá‡éäÁy±Z@ähš$:´WJ•¾ìƒÓ䞦Ò*Mç€G/ý›|þ2Q§oýmÖoýcX‹H¯Ì¿ñ oüåWƒûJ®Åÿòa¸tc—ö^…¯b’P‡¢éq·ºÞ]$\;`ñ☚çøÂ0åìߎïòÛ§¦ª|þ`-lT;üéí]^,†$¥²†`›¶ä’‰ÂFé½NÎ^ÒÉ vF/ßëãꊦß'Te°‡©(qP 3,ƒ ­fI 6ðÆD”!â«=Ç‹Œ}“pÞáLâ¹vª©!d{3ÍN-°pþ*Ï]ûVø²9À¬ŸdRÇüJ÷‡‚ËK‘—¡RŒs†ÛÑcƒ§&|PIYãÈM­N°ôM‡™±L˜gL$™šp³ÌX=œ…‹[÷¨OžÃe‹KNž:Íx8ÄsÀ™’¹çå;QðqªÐ¤sI;ÃC˜'ÛyZH€@Ž]¸@Hã„ÖâBh¢DÍÑ!‹Bãý\ÖBf¤, yYÒ4ÍØÉæ×éWøÂòˆòŠÅg.‡å—ŸåÑ×÷³Ûù6·Žß|‚¸«…‰¢0wVoLÃã7ðßù§|å¯<²õŸåWþÖ_g÷­_B6ÆD&ŽÂoö£Æ ×xvïN>ÊŽ– ·.«Š›p{óIóÂÅËœ][«‹K\9{žgÎ_Ðp: [{{¼~㺪º"/K¶övÃßùÕL¿Ý!feΜXÓW>÷EU…‚@㽪½#dì M‰…>ÇLQsŸ=/òâ»Æú‡°–À“ìC4/ô}ó6›:$OSÕ>8¢šæÈ˜AaVCå°± í,bЊd¬È#!¼æÔ|ß3ÿAúži FǨã@#ø€Ÿë{ü‹9»øÞi?F#<9MOJ៤V\À‘e!ŒgO ²"/Û´Ð…Vòä~óN²Ö¼š%%!@dñíÞgzŒ(‡yïŽé¬tY½z’£÷·QÙ`ÖWTäE(G꺦ë}HÅZBb±Ò1Ô+àò†£Ì2(ªÐº÷XÑÙuâåQ‡Ñî‘|Z4­¨*˜¡4K™5Žép‚÷…õ…ÐLrÝßls¸²ÆéÎYZ±“·ƒ‰+—¨ß?àÞñåçˆZQøöýœµÓ#_ëÐÉÄ.Ì8=±|Ý™pçhQ¼ÅtBS;ÜB;Ôi¤²Û"I,ng’`qÎkZº°´Òçô cïæãÑ”rV‘ç çÏøpæTÆ»·áÎcñîíÀç¯^¼,œó!dT…ËgàÜÉ”/½Ð\°?Ÿ IDATá_¼1 ›»K¬ô—•3x÷Þ-n?~ðaC}J7|Ìï™Oðe?Kòà£6ö?î^ᣠXŸ–ë“¢> äéã`[Tá£Obø´ï+×§eÙúh&¡ )­J‚¯©"¤DãÔò( (s°X‹®3ªäM šÏQTä ’±2¢±ï5Ðq•d5=œA-Æ,O”à4nKGÌ¡Y69)ùFžBÞ¥zO;H‹ ª#Âu¢HÓ8¯‰¼†‘§˜5mØùÏŸ‘ý‰SrÛzosÆ­«-P¬eÄíT§Ìšžv/óLþ _ÛyAçòE)’\œRøŒ*djÇnäô×OÜÑ÷XÿîÝF…øÅ“oDFkU#úÛœÍ/iùÖ"ïÚ÷ÁG::hôî¡Þ~zOÕKžn¨8pÌ~+Çþb©µ(è/¥‰—V¥+¯kv˜+ÛŠemÀ9I‰Õ¨ékxWÓTö‡+*ÊWÉ’g5kï«üÝ;bfµwjE‘fZfô[ þòMnÿÕoiû7¿¡Ãßø?4~ç·¨¦cUe.ªR©o$W*ª+iᢴtõûbp‚xãªZíE5Ó‚«çI÷l »qE~å"nùeQ¥m+ãKÆZViTMPUòÅc™é®‚Ÿ3™XÁ9BèJæ€`îæ ì¬¢'4¦§qkC[™ÕƒìPãxB­JqÔeá¢r¦ T¥P»·¨ÕÕ 8q‘çúO³ØZ&D‰öµ«¥&ä dÑ%­ô~AV3µÏÿ=ÅãŒ{cÏD¹nnþ¶œ›C ƒ÷ªWúØv¦äðm;VÓnéJöÝh\ú@#«^4Q+cäBŒ 1åî¦w¿%_Ìpù‘p^Ööå›TEµ„¯[·˜ ÅJlÂrH´ærYÕrÎê°X¡1Aa#•ët”LvtêÆßW+ȾPsÿ÷Îèÿæ5¯–Jþ‡M.><Ô…?˜HD¤¶Qá»zóÖר)NÊ\«ôôÓ{:ñóV³î3ªß_§ŠžY¼¨lù÷úžª’–ëL‹u£gG;J¼×NÒ’w–Ò7¯³M‹¤ Ú´sy !’5V&Šu:òI$×Nðý¾Û.ÈDZÊV¤¸lˆK¯¤A*ÐDb'N”Ÿ+îæî–虎Q»³E¬2¯ +Æ:Ÿïi1TªNoPŒm*·°ÀQ”iŒâºÖ¡IU$™Ö¯^VÔjÉÝ~OaWÛÙ²öÓ6x/I$ŠÉ ædÁ:M¼4¬3*·Ôé÷Ô,¯b”¦ ìnm)Ÿæ²²øÄÊ-¦øN„O¬ˆ-¤É\e5¯¡ldJ‡J§¦Î¥Æ—šo)¤ IÖR'kËõ»ªG34žZ‘|íäÇdz-l¿¥÷n¾Ï[·¾×{zÓ]üüçè,-ªQPÿ™ š=ÜÒôѶŽ÷©ÿXöû†åSZ:¹ÎÑö¶öm~p^3³õíoëüý°Ÿy…ÃíZ[×·5;˜hzPjrP2=¬˜VúÆä dvT}ÈO‚s|¢Ý¬êZyYèîÖ¦Þ¸yCGã‘G#Y#ΜX×Ò` —¯\åâÆiŒ‘{–ûu[-}áÊU½xé).oœÖÆò MÓà@X+Å¥6UŽsG™àøÙ{“˲;½ï÷sç7Æ‘óPYsqfqìV‹­îÖЖŒvCÒ ـ—ZÈ€aȰÃK{#Á+ZY²/,Ȳ¤¶DÉ$‹s“UdÖU••cdDFÄ‹xñæ;žãÅ‹¬*v7É¢Z2Ôyñ†û^ÜÞÿ|ç›\Õ°˜ÊgÕ,—¥R¯#µ¯4ñd d‰Sšxµèt¤ ÖB£8FIŒ¢Ð+ !ŠPz’Ȧ±ÂV¦¸“±¬&‘ŒêÆkVy¦y­(0²Ë)ÞGþ ›!-åWËßOÉúàc=;ŒàÉù2 l¦õþ›–IgØAËJpþi×”j™&&ÎR5—à‚ª†ªYB’ªe-ÊF”•¨ky‰ÚXÉ,Aƒ+*´LðRSÕŒTÕúVe‘L^ÊHÌ7V•¯ödœ[&]¹FƪÓD¶i°,,TYã(¢PMÓ`¹Œ÷xc”ç%ÞX…xÅQUÔCÒϰa bºPUÖŠ’WVZÔ!…m«´e˜ª®ªF\ßI5—ÜÙ[ð±gº:<-õÞ£ë½Hk½µ‡Nì9—ÖR+U]9™²³B4ŽÒBƒ7FqÉU ͼÉRµ/m©·ÑQ,湜œs§ÃÃBÞ-ÿŸÇsËÑHš/¼’e±0BUåbc¥¥—nx­õkð±:iKç×·uicGû'ÇZ”…>È0¿@’Ý/”Dõ®õó¤\µñ}‡ŸÖ¢Ÿ‚Z>J‡ÇG•<ýQÈègU·ÿ,IÕG­§÷ñqýŒÇG©³ÿC÷päàÍ®wQÛ.YU{ö‚N%6JC·6 €‰ñšXÇÜx?±žÒ†BÆ[YB—‘6(p–¸iˆü5ƒ¿ï‘µŽ~¸P7Ÿà6 ¿¶Â¤ð0©uú×V||š=“N×pñ¦Êk1ëëèôtì5öX Y…Uã4Ãù©sÔnùSU·/}œò?®Þä©ï?âðëÍŠÌÿÞ¹×õÃøGœÆÄñA´¦‡ý#\Tú@!¡ß¤©×”û lûÂĪýº?È#.ÌøS“6Ié½zŸÛãÜwí6¶£Nµá ß™q”V†ŽÓ¹c¤ýKþò Oùõbím””ïù½‚ü¤Rì’®?òÎGd™9¹Z>¢$'áÖ÷Îi2Ìüú_y3 )Þ¾®,¸à“j…£‡9Œ,ƒs븺& :߯›Gû*îîúÚô)g†Öó_ÑÆWþ²oõ;ôV·1Û—8ÞÚÆô.n½›—ÑÚ6Ag]ñ|äíÃ7iæ#¹t ÿœ77D”yj¡t ¦Ô•cѤª|èCÕÂz« ±sH–CèbÈIä̱Gy_xKpÖû;ŽÓ„“¤Í~ZP˜)¡wÈYecçÃÓ—ç´ÏÖ +«ho]åòæ¶ú;Ä&Ö`>à`ºÏ~qÈH¹ÂÚûîÜÉšU_¿¸&mÛÇù¬mñ8<ÏäA¨Ä}›Nú¹¿H^6 Ưa,ª‹Æ÷‹PWw¾äƒ\Ê'G~/›ÓÖt5|Úg*ª5ò9•kÔ ¦>4s…(*Kà#êÑ¡{·|3>`;8&4–ºŒ4™^ ˜¯S̺ÞÍ"âz¦È5Þf†v+'¦ÔŠ1G#¢ÝnnY™ÿ>›£¯áVcvoîèÖßyÑëÅýí#:>×õo}Xy"çTG‰sï»×é5§\þÒ&Ýßø”Ï2xJV¦Œ‡{¤ñ„?}c®«ßt¥?­BVê”ÏùÅ)+¹# FmÈ1¬7¡ÖëÀ%§¦’©j*j_ú ïCÄ(äŒp4ž4¥ìe˜ ÄE‘ê@^ü!WÞ5¨c=5þ½B¬†–íÌê8ý 0 «ŠqøØx® ÷å^»´Ð¢ò½õ:‘O“²j¨¼ç8í°¶±Šš†éýû,Æ3ŽÓ5fa&àkœÞ6$r¡3rxï†E(2W²yþ¬m˜/ݽÿŽÏçs¼ñR弩‘jÊÚû²’ò³¨ñóœ²8õ~žË/J_T¢Ü(ª M$vÛÊ’Ô×·o¿G¸?TÚÎh žÓÊF6Ž<½XA–ø£Á€½Çÿðp°–z¾À†¡Î}ú㾩J’Ë;( Øÿ¾ÃùóÇžÅbá?þk¿Šk÷ߺ…û&¼šÍ¼+K.~î¼ô—ÿ‚6Ÿ½ê£v‹ÙÑ€j¾ÐÏØ ÕÏ™•Ñ/87â¹ád̃ƒÇ<8x¬½Á¡?È’DQñÜ•«þÙËWyöòž¾x™Ú5Œf3IÆï ŽôµWÀÁð„ÈtÂH –Àáç±µ#Ì™.üôh¡ÉáÜO˜ÏÍ/-üðpÎl”+ äcyEª‰Œ#0 F ­L´ÛRšâ[-£•ͽ­Žïm´YÙÌÔîÇt73¿ºÝ¦¿Ó¦®#'ùÚƒÕ2Är™Ô+ÜÒû!ÏRmå—pàI:Ö`âÏ‚{ýûk²%ÎðgÀó¤ky˜%–0Ëè\F<4$çÏ$]gæ÷'¸ÄƒÇX©q^E) TVø¼ÄÍ ÈK|ÓÈyï]ãTE!uáÃã4• eU3™æ´7ºt·ûÞKÖøùj›ÅZ—x–C^R¹“—¬„œ“çiœgš&rÎùh8–›ç>Ïk^Y²dmŒ½ÞvRÒ^kYÊ8šQ-J!|¨F•³¾T*$o“€yá´’ÿÅg=¼}oî7úËÍÓGG…O"£,N±AB;)¸¸ŠÆuèÇ…EÕÍ5y±¼‘FøVäÉB|ÓÈ6Þ‡„xµaHÜJhuRhæÓœ²†ºn˜Ïr.lJëø¶g &sé†ñíT”•WU7Þûš­UñÔ¥6ó&äpÜDmœ¯ypðøç1 uþó~üG|¿~Úzög<÷Kä?H E‚Ì@ûCF;©4Žaà™Y”¨l(ë3¥¼¨]ײÞIª‘JšÐqü°„7 ôí)lÇ5‡‹Zó§;”kKÇ¡%ŸÕ2+]‚Í+Zÿf¢ÎaWÕ‹} þËá_ ÙÿŠÕ¸»ÐÚë¥úµUš„*§iS3Áéäj¨b3$yÐÐËžUrý³¼öëÕ æúS_ßÑâæŠýDû—NùGç_%|Øè“ÿ&Uq÷>?ÿsfÃ;êõ†ÙB¯%ï1ˆY„SEîÆnêJ}NŸ¬ž–‰^Ô8Ýâò<âR~IÛî3úìè·èŒOôõ¿Ggÿ[·/îjÚ:QI¬j­¢çέf¼úg ¦_ŠtÍ]Rs2`ïÍWyüžÕä8TÚkÔÝçB£¿¦Ã»)eÏ [4»Ó“jÕÞÐ »¯“{snöÕ "%AMé µO¯ª÷ü–.ÿù5müæ_!ùØßPÜ]UZœ¨LºZ„}%ÉŠµlýñ±â;?`qpG#Õzti“^zž´]õä>œÊD«˜îÔÜý‘|ScV8˜SeΨXÕ󨚴0säÇ’o¼eEÌ£Ó8Ò~+Óii4êT¹úy­hnLZe¥vMY·£­óÏh}ûi…½u5a ¼Îuü@{“}ùÓrÂ8ÈUÑp}\èêÔÒs¿&Î?ÍðÓ3.ïêÜÊPÕÍOhö ‹êˆ¦x~ZËh¬w÷~(€R(¬ žK[z±û£¼«£ÉäªÁ5­´B2f(O5u•ïPÛŒ©±”xb(5}BÛÑ"?U'¿£ Õ-µgû„þi gÖ¬¨X¬)Ÿwa&åUª“Õ±º©S;›¦µê#Ä݉âÙ©D£Ýï­êÝv•­þHë}WÇO‡êì×Üxc¨0®ULúüè_ÕÁ£=ýUžùTúü®û·Œöþñ×´¬iõZ­y±§é‰´uá!/·_¥;*ôöʆäB©J5Ȥ룑®e3ö⎟$J† .–Çc[ªª \Sª¢Y¾’@¡ ‰ÂD²6PcœêШŠ-¾“Ée©ê~g„¬ÆN  W"¯ ‘×ÈY­OS7zì •Àeò0ҵёVg§ÜnZæFå´€Ú)²K×m˜„2 Áp¬w´7ltô4#‘©—ÝEQReœ¼GQa1Nª§…¬2_êòùmÙõ-¼4›5ÜÛ}Oãb(8d­Œ·4uk™LîP“S“Ë’›¹‚8U§½†Z1tSÅqD’ĺùðŽÆ·êòú. ñµã\8z©Ô)ªRw<àd8üÃóa 04;8âÂç?­´ÛÕÁÞPvyGQ·£ãWßüw2?Ö.œÓ³/¿Ìã»wu÷Ç7åÝO ŽíkpëæGGÚùÔ'tõ+_ÖÚë Ó„tu…Åñ‰\Uë#î@þ{e@~Ú .ëŠãñH{ƒCÝÛßc÷ð1EYi0òøx ýãv?ÖÁÉ Ç§§œ™Î4u£ª,µž¶è…1Æ9 ¡–çÒb^èt0Ót¸ÐìdÁäxÎd0×ôx¦É`Ît°ÐäpÎpoÂÉþDÇg:|4V³hä Çâ´P>*YŒJêI¡zºP †ÞVF«©ÕOÔ^KÔYÍh­¤j­g2S3]’ß÷Ž/-ïg†}Èëqöª÷;c6´THœ1'K­Ä“ëø÷ îgY³ôžX£'qÀzx呚'ý%^z"C“±F60ògó©¨ ËJ”Î,)™:‰qI$…VBªg¹¦§3ycäj¯´›°ÒŠ•U…Æ8ÕQªVíUW•ò¦9û»$ëù@9” •—ê8 ) ™¼¦t^Š#)Uû¥O+r5Zi$kŒã9å¼µËÆt9‡Âh© -ôÔfÍ‹[ÜÞ«t{w®ÀNÆ•îÌ9•\Üj…±ªªâ\_ZïÚTK†Þyš¢Â– Þ9‘QkµO§Û‘—䜗+›&D­D¡ TO M!J×.öux4åô´Ôöz ¬Õ[w=ó\Š#£nfƒZuã圧¨MkäBiTIYU5^qimmMkkk”eIµìÜùÿòKúÿÇ&tXn(Ü/a%€kéˆÐ3ãýÂUÆÓ(Sâ²Æ;Ñn4*)mƒ ¦Îóã |+‡Wgð½9<,aæ`äÄ·¦ˆ¿Òaýo¦ªËŠÕ×VXûÖ:[ÿ0öÑÔhò›°÷_ç~öùJ¬:\Ô¨xªí·Ùy·”Ëk ç˜áYX¨;;m¨W={ÿEˇ¾Ç»?U+ÉùÔkmÿîùB»Ÿ8®Ç5óÜió‡»\ù¿Þbý•CVn͹ññ˰“ûªº«-wDKÇ|+}›ñ›øpêC³¥“¨åkê»ç9Ý`›UÚ.áB!Ÿ¦‰¦ç&üö[…¶‡}?î;>×\cÚkÔ¯»¾g­n®-`5ö¿òÔ—uñù«„ÝÃÛctk¦ãÛŽñ±#íÈ·7¬N£ öÞmaU˜ÖÆÔv7TD›tÍ9™[Þ}ÿ„´p¬t}C¤ÕûÖ‡®³êÓz¼ô;·µr¾àäøW½ÒmÍï|›áñ1*<ÃNÉùµ¹_{÷ý{0èT÷ý—èZ©&Ô£¾Þû¡Œ¼¹øe忇/ „ÁXC‡SJŸû|É¿kÝ/wÆNab ÆÕùʆ:ÎR²˜A’0 Œ÷Ú˜MY›Íé– ®NȰlo]fmç+Û}wu%™Þ]ú½Ù¡v'{þñ∼ZиJí²`e:ÁϺPÔ\Z4>r‘ZõódÇçpÎùÉõ¡ŽúSï&NíAʼ½Íþp‡Åä¶²ßc£÷²úßf°xèOò‰Rùo?£õèÁ?>¹©ÄxŸ…O)‰RF-ÇIwJ\&äuí{n¢ Ë‚P¡È´LJdûŒêÄ«hÅÐ_ôi—iå¦IGójñb“I£á6AXÑîžv ¢$×ü¸Ãdp‰ÙáºßþÄcû‹oñøJê6Ö3¯³23møßü²ö¶ü3Wo饯]¸¬½GÔ¯s¡s…­O-è^ú­Ê1ßM$Ác6Ï·ØzzäÝÖ=ôpEGaÝž¸qTPUú=Úð7æ1‘7:0%ªT×Þ7ŽÆ@¥F¥+mŒµÂDƒs5•/;.0"Žñ½¶Wkœf œõ7ÜBkÖQɆ¼#gˆŒñ¥±E‰?l÷u˜µq[kàD>œ²XÔøªÁ8ïÍZ 6̦¹ÊÒ³h,΃ñS{o›¥ÝIMàqÖ#cùh¶ÖÖ8ÿì5”´©ë”|Qj÷áC_”%Q˜ÊØ/OMAåç4ª0¡43j•XÓPã,¾Ý]'kudW3c¼¹VÂ[{÷}{RëÂÎ9òÀCãaVz9¯`³ƒÉN†'¼þÖ[O’hþÈùQç…LúO¾¤ùÁÁzßo¼üq=ø'_¥É‹?öü¨ËŠ•íMÖÏãxo_ãããŸxÞÕ5ÓƒCö~ð#½yË—“?ÿYùS\ýʯ°rí Þ{Nï=ø¨ Æ/šRùóŒ«þ§0 úƒžUÅx>ãÁÁ¾¿»÷ˆ÷=ÔÞàˆç.ùg.\V/ks~mƒg/]åÒÆ–zaL»•aâh ¨­¡tÎÏëF¥s¼xGh­o¥±â8ôuÓèÌø±lñž|Qùù´Ð|VPÎk¹ÜùjZG!6 U—Þ»͆9{ïûᣩšYC1­?žùÉá\ãÇ3NÈg½DÞÁô8'_Ô4ÎsÆNèC·äýûa$ÿDœY7>t¯„?³´û'ô'N-û߯*þ %ÿ êñgv%¦xR”xæû;³¿¿E¬‘o-Þ‡ø$—•7WP”‹SÕ` M;IDÐJPÝOsŽg2œbʆ•^æ»’(Ïk¯ TÕÍ|]–TyŒQÈò #ïQÕø £*hÉ+_–µheÞÈËyƪˆ‚4R”Dxç}³¨µ¯¦–o|”ø4ôZi×þþ$ÔN×ó©Ë)­,âà´bº¨}Y{ F%ãyŅͶº­ŒÀÀ…µ†{G ÿà¨QàêòÌ÷ã<«„ÎZŸEcðÇU5uY¢ ì·±Öª-H’¿ôg¯yaõÆÛC[û$òzözÀÍ÷àÖ}çǨß2~½#9g0xm´+ίÞ=6ŒÊ€kW/ñÔSOqíÚ5žzê:kkkôû}.\¸à¯\¹Lš&Oÿ`|ïŸ(ú/‹1ñï €üÄùõ ®dÂ9À yÃ2˪¯´ Y©rYï0®df+æÇž™ÛsøºßAìÎàÔýä‡Öà@›¿pãJ¢îÿ’rþî/å<ü‡üg#šss GØ8©^)U”òÌk¤‡·±û_mqøë0¼xLŒæ%÷¶§]žèôâYzʆaÏëÞuˆm—ÕqƦYù•Ël'-ž[]®aÇ„„¯îþ½ûœ^|ŽÜxMûîŸal®qºÂ8’âÉðØ0ã|qE7ü&[›×u=¸ÎŸ>(øŒ9Ï`KÏþÇJVª;wÌZ†Ë“-m®mpñ“+qðœÚ¥çï]û>%m>{4"l½µÕfX.O ½Æê(öqˆ•Á—¾iÀÕ4T®¡p%¥/ œQÆDQJÆXYš|®ªR† kåº-N“kM©såœ{µ%4†«±ãqc)káÑQk…½´¯"0`À ¾—ጥ:ÀÖ:ìl®dŠ[!ªê¥{ÖƒŒ‘I,¦ñ2¥§ ¡‰„5Ö·wØyæÐTy1×½‡w©Š#+ä¨È©|Nã+WѨ ² 9žJbZê¢V$Ÿ(pÝL¾ýç6/ÈGo…?]À¢†8Ј‚¬Óf>Ÿs÷Áê¦þ™óc>8á—^V”$ì¾ò=²‹Ûê?{ƒo¿†«ª?Öü(óœÞú7>ó)Žvwõøî½Ÿ:?f‡ö¾ÿ*{ßUA’â½gýÙ\ù•/²ùÂ3”óóÁɇe\ÿ¾ÈGþü™«³”š¦a£¿B†šÌçÌóœé|FiPëâ%Ò4Ÿo–òŒÁX+XÞ?¬!ˆ‚eŒkh©œ—ƒ Lh1¡Å†kŒ‚ `Væ:2–†—Ö$!a*lE¤ý”Îf[I'AÆb‚…*‹†Ñ`F¹h˜žäšŽ æã’b^S7†æýšô? <Ñÿø\žu~`7ÿPIö™wþì~ ï—‚‰%_â%DãÁ-OŸt”Èà± OðáCÍ’Ž°fYFèaÑ8l9ú‹¥‰Ä{­j‚¼$˜ç2Îã²ÓoS{NËèöÓà «ýŒv¬, £Ü†Ý8G]”*Îa!Ò²üT7*Oa¡µÊá ÓÊd¢e‘¡7›WPÕ¸0PœÆÄiÞˆÆJ®,Á;j«Ö$a£[Øs½Šç^ºÖ# ,»‡ Uµçè4çtZéâVFÇ4.`£W1)½ŠŒ·àÝò÷¬XJÕÒº©ÅyÑx1?S-JâN† •ÇS\é˜Î¾üùsúØ ëܹ?ãþîD¿û Ûë–ûûž‡^+ý˜v?RfâШ“F¼ñÞ÷¾Â×¾ýúÝ6A0›Í˜Ng¬¬¬põêUvvvØÙÙáâÅ‹ºpá<ûÃP×€ IDATûûgaü +"ü%ù€¸šX:.¤Õ@ÜÄt+GæjTR¯IÐ0ÁØ­àõ¼1‡9òå˜ÿvtÓ²òñˆ•CŠ£š,•z>Òo…çxîﮫû/ZÑpð·NÙûï©Î5"ðPxj[ª Lä„ •«©î-ÔÜ©Y\˜ýv—ð~‰zNþËsf‡Ö8Ŧ¹F¶ÈÈÓbäìœ&Z`Â’ÔK¦ÝðÞ— v_€Ï|êclì¬RM¦Ø¦T OlBâû!Ó5Äþ:j:Ò_=~—‡½Çúo>û¯åï0ö¦éˆ½è…©_®áâ¾|«EÖzµ®pýîªg—£híÇ1—®–lÖu¿<æÕî1mŽÙxy¢ÞïÖô3ƇâÑÍJ³7Oˆâ„+Ÿ>&o[Нo¢ã·nƒJú±eнÁw¢^š>$¾{„™ U÷Îqüô™ö/IÞ¢ºÄæ2u&÷ñ¬ö±Y…;¹«J6±ô‡VŸeÐ/sZàa§Å4б>T¿îpqp!±ÚÛ&íSrá%Ú;7ˆZ]FÕˆÓfÆíáîïs²W êºP;/Xo¼.LçlÏsïÉÊRÉxF}e…§>ý‚º£†Áþ€*«4Þ ‰O6‰KG²Vo÷){N'Ï ÈW‡$ó«óp““±QQ|ŸíŽïtëè€,ÞÓ¥Þ9œ‘%"ýYÒ즌9Æ6)¶êÒu«ñEý®­âÍ1‹ªPî jÍh‡RÓWÐÚáØ¦ŒÜ”"…¶}›V³rºÆÚI£€¸ p^LÊ.§—™žn*kÖ·ö‰’ù´¥âÞeâ“Qf߸½÷^bç™C>÷›oiç…Æ\Ö?¿ßá_´Ô¼Ñþ&¯¯üc¾·ÿÿSù/ùß»?âkÝ[lÔ}úwžæïÜâÿ˜¾ÇóŸç“Ó§õNö€o¬|מּMÇ~}7Ñö¬a¯åh§ơš,äîv€’c-¦nðÅBÆYÁ)‡É»¨±Ô³¹ê¦ÂژЄ$iW©I Ï©«ZÎÀ•u›‚ÅœÈ.Y´…±<î,Û…ƒªÆàea9ô½ÃDO \,#¾kGQÕªú=Ìf“E˵Æá½—mÇ(¶Ké‡óx³Œ/å´²Úáü¹5Œ,®I)ò…vïߣ( Í”»SdCl˜!à]EcÊ厮·xAlºtðaHQÌå;-ØÙ ‰¬Ÿ(î=æêÚ¶Jy|ÙÀ¬Dµ‡^¢Ýù^§ÃîÞ#íïã?Xñý‘ó£š/hòBÏþΟçð;¯2züX×ÿêoーþÇž—_xsׯóÞk?Öáƒ?w~,N†zðÍïðÎ?ý=&»{„YÊùÏ~ЧÿÂo⪚ǯÝü€üÁ×=rëá=ͨ)B1ž´úÉO“4žÐ8pC¡5:‹·Å¦1 ,MÝ#â8T’DÄQ@…Ë#‰ÓXY;e˜OtïhÓ|ÊêJNœ©˜•ä³BÞy²vL”„2q€,Ae±²^ÊêNv?#ë%ÊÚ)a¶Z+a+ q^¾v„v ÎpÓ“>Dé,¹òÉñ¤î×¼ïáý͇ú€?ÌzðD°uÆ–|øüÉ+žXLÌû}Âgý$9÷Á—óÔIÈ" èOKyD]/iYa›FA^b'ù²?g¥K$( Id™˜œÎ¨ªF~F+ 7 ‹•6‹‹[4e%?™Q/UZ¦1dPÐ8J…@j[O9)T' µ&´¸iÁlœKÆ`BC”Å’y"v_VàœŽë½¨V?­ùÆ^‡I鸱湾Ӣ•†jœg0ª8æ:Xkh·Öz>~­­N»b︡q–´Ó¦®*æóœ|^ðâ•6qh87Ø0¦\T³…Ve^Qg ÂÀèOéŸÿ€ü€üÛa ‘Ĩ°ôšŠ‚š<ôäÍÂeZ•Žkøý¼2·rx|¶éÅâù¿Ù噿Ñfç/&ìüVBÿňÍ_‰YÿO#¾pnC¿ñ¿]ä4¬Ô|¦æÿn½?wÊÅp…ö;©v¯7lݺƺOÕ‰C†Ó\Óa7 !”{&dþÛÊçc’× XüN‚íT>'PMäE>!s!‰"‚ºCèR°|8ÃÔ ãš½ÕoûC¾ÕÚåA2RÇ4¼±Uó{_˜òÎ¥w¸ht½´<ê}c#aþè"vÀ›;ߢ0†s_íª~'çÞÚ@o÷_£¶b¡œ*«Ö)Œ*zâW-ÉLº}ùÿk÷Mª¸áú³VñÇJ.n$lØ„°‡F=‹ÃŠ«/8÷ÙcȘßßQ5îS¸·hë Ýã =¾«éê˜[×ín]£q 㺡«„fÑ“­žyñkì~í–Nv0FX³•†õÏQú!—ÞÞåðÅÏéxçæù‚Сîð]œµëÊ$Õ·!ŒdÒ“­Ò nÓ*欛ˆ@ðØ,w»¬ ^ƒÃ ê`…õjõy¥sA—îæ*vãvó)ꬣq5eüˆƒÙcNwæCl]xAÕÍ&lÕNÛyI«lä«z¹-g O”žÖËŸÅo~Z‹Á”ÙéÁ¢PïSnSû¯J±+X½×R6h3_+8½~@Ý“ͺ˜ ¯£ò ƒ9ôƒ[º¾v‘Ëý§Ù7i|ãŽ|ýÞ]V–@|‚8ÜÂCT/è+ª²ˆ:í’N ?¥nJ*3nbªf&;³–.ãÞI„×qð*Æ<Àè-ÚÓýñ*YÞÃz‚ß:oR,:>$´^>,‰Fé;›rê3úôù7Ÿ{…o­ïé_7‡|Ã-ôÏ7oñÍÕÿK¯˜¯òmû-¾“ßæµô>WÔKÚ L ÓÕÜ8ºÄ§w¿@ºÆfϰåÚúÑÆ!ÏvÚ¼è/q½?#t¡.ï7\̹3nKUÕ¥15'­· 5NJ"*[RÔ'Ø ˜fʧs°žÊÍi wÖ;IÚ%Q¤j4¤ªçäÆëaÖ¢c<ç¦SaÂÍ k«(ŠD+nkiå0†ØŒ#ae (`<ÅMfò‹WÕ4uíÓIÁ7r¬$'Àj)NÈ-pœ 8?zŒ9÷<ó¼Ðþ;w)¦3SªÖ‚ÚÍÀ5ð 2– êcM„q–”6qQG¬¬¯à〜¥a}mê‰m¨fQâg%TYCx»z‘º®xíõ×™Îç?5óÓæGS–Z}ú:ëÏ=̓¯¾"¥1Ýk™ÜyÈâðø5?6.^`ûêU»»zôîí_hFžÞÈý¯‹ÉÞ>6ŒÞ¹ÇÑ[oÿ‰ OÎåW¿Ì¾øE.÷Ö9WYPŸœP7¢)ëe¹ƒ¦näjGsv$«ZÛ+Ø$TØÍˆ:™Âvº¤<(´(°ÈÕEE?k陋—yöÒeB0L5;™3?]¨¬Ÿ3],˜Îšå9µuÔ‘Ã'bãÂ:q–ÈT ï‰çÕ‡AËûÚ8³\²;–e„KÃe’â¼¥=Ë—éZ΃ƒÓNÌd'Ôµä[‹|ödiI½²„¸—QW5ƒ‡͆sœÐæv>ޤ©™%V¾¿BåÕl®Æƒeé]±Ö`Ôͦ ©œšyIóDW` Åé\u^¶bdÍcËûr7_U2Þ1¨ÚêÇ5O­¼9Ì8]8¶ÒŠg/¦º¼Ýf4©™NÃIÉÍ÷N‰ÑJCâ(Ò¹µ˜,kØ?®ilL”¥4EÉ|–SÐjÇ\Z ØYO9ZX¼÷ #¥ò4Óœ¢¬ÙXOu~«Åúj³7ÖDØ¡¨²Èpõœ×z{ÂV& ÝyM"o"ñyâÍËœ¿~ë/>OÖí0OHZ-GG<|øÝÝ]ööö¸{÷®ŽŽŽOišæ—ä—ä߀Tž[EÃJ .¤[4¬àíz¯€¯árÿ“)Óû5[ÏGô2ƒ-EûEK÷3k/Å´W壆;ÿíH»}J¾¶ p ;}&W ^øÒÛŸâ·Ç“‰ _Ü–~?á ù9Ö- ¾súÄÂüå˜ùŸmÑìX‚ÈÓÄλeUR˜£°À˜J¡1D‚HRL@T·i•-F¾ä^zÄ^4ã¡uz;løvkÀ«k]šqt­!Hœ>3€ÓÈè»Ý€ú´G4¤Ù„§fŸäs¯ÜÐü»o3?=Öw¯ý¯^ú.7[ïqÉd:ÿÌÓOKÑÈ0z­æè¶Wx+£[õ)Ÿ‰I6¦Jz%î~ÄÚ$cõY£:‡Á­)­ÞŒKŸ©xçÿü"ó7WÕ¸ˆ¸ð8:âFðN5¸£ ‡*·DÕżET\[} N#æÇ Óò±Á7†ùÑ6BÏf§dòpHÇyo|^ÕÃâNo“Å™‚Ùò•g ŽäO ‘Å®>+fGøÉ>¾šÛˆZpbD$ÔXprˆi•Ô¯Óª&$ù#Ù~J¾~މàp¼ÇýÑ= C†ù¢^Õ iž“GØD¹Øp5ë Æ„TFN†8ð³9ã­FþÜ&k6å¶ýŒÞj?ÇêÃocšZÞOÉÚZý˜fj4‹ÛD •{1í£Œñ… 'OR§ÉIOaR&]šùsŠmŸÍV¨Èî!îcÊ››xó–œo0œ'އÄa$Lqê(©Vˆ]D÷åSKËv‘ó,ê)•‰Ô~ñ˜¬žÒM¦UÆ oS»CæõÂðÆîW Ù|•Ît…ÖU«Øa¥®¹¿u—q2B>'œ·$oI«+åF vÈÚŒjeDY,`UU¨,Ë4%W© Â{OT5*¢½Õþr‡Ü\_aL¨Ž-.ŽD–áºm|·½LòŒB\/%#ž¥,Å©¬Ð¼@E‰k õòg‘=Þy,Z¦ÊÖZåuÃÑpÄêü”í4 èÞÃÇ,f%¡e}‚†‚Æ/ËB2ŒM‹µ>089L·%6W)}M=Y¨óhÊj”R5µ\Ý,=•#h%¼¶{[~4Žyðè“éô#b<‘#®|åKŒÞ½§ûÿêžúk‰tsý¯}¿\Aý[ÍÅtÆöÕ+l_½¢ÝwÞe1~äù!cðMÃðÎ=ýþkœÜ¾CS”bH OŽY„ÉåÎ]¦é%˜,Âô»LLÃèp@bC5µ£*+ª²&lÅ´¶úØ$RGØ4RDØ,"ì¤D½Œ¨Û"êfrÃIIˆ 6³XMbZ‰‚õ>.I Í´wtÌÍ×ßæÍ[ïòÕ¯~]?|íun¾ù¯¿u›×ÞxG?zã^»ù6¿ÿÚ[¼ñæ{Ö2õðÑ{ƒ!Yš’Äñ“ªtx¿¡ðòxø0ŠàQ‚!ð~ÚÖ“„­¥á\ò·t;^ÔA@XŒÀËø_/ÆÀ‹þ°gÉë3'wÆZâÓNÂþöš®µOXïÍyX®.jLžÓ4ŽÚyl–u[„I¨£ÙŒ|0UUÖ$qÈjhY ­¢^›¹µª\ƒ)ëeƒúYÚ—šÆk"á»-uªe»ÏœóøÐbÃ@60„Q°´è/}%Kړįª¢q^¥Íø­§O‰Œçã“Ò³ÎÕËÄÎzJ`uÛÓyÍíÝ)w÷g4Î+‰bžºÐ£„Ü¿?dá I§E“XãIz®n%|áF‹ãIÍhÖ6…ž9ŸòâÕwïœÚZOØÙL)‹FÖx*x M çjgÕOb.õBÅaB¿1 Z½U667غx‘‹7®óô'>Fwe… YÙØ * Š<×x<ù0øø @>ê>J /ÑôýG=¦ŸñYÿ.bxù9Æu~†ñæç™|~‘Þ?ôºÚãP‘Ë!üþ }s ?˜/Íê ÿGÄ(ží€LÞ­™Þ¬¹ö±3r„'‘Or«âhƬ“kð—*ªëPõÞŠ@V“FŒ¯ÍH¼'Xs²2Ôï¯ÜaØk=éò™×®Ð*2n]mµßÕ"Ùðv<'µS~RÐE(44YNžÉÄ„¬wÞ…P1ËŽÀx¦!1øŽBz>&ò±fÖ3‰Jß E‹ÈyãÐq¯³q¦7[E©oz9&j'¿ÂKîs2ßûg˜Ù 7­âõ+ÇäÍ‚ß=xAQkÊ;ŸÚÓðÇôc%é­Þ(´y§Gç^—ôü„ö³s’G‰¢÷"¾'ìFï~¼²ƒ{>¤¼ÙSìŒÏW=±M9ç_àôx@¹ŸÎ­ÝôtÛ ªJ3Béˆnì5{; 0Grtžþ"ÑÆ9Ù·l'ôÊ1£t…z°+ôÁÎ5J¥ºøî9üðU1Dп€ŸáëuQÒSQ}n!d¨;£ÚWðl rÉs× IÙ-NÙŸí3/Æ4uêYS“Í&tG't+©íå»!‹FuȨ4„8zÄ>d¥ûüó—ôÆï®²÷ô„…®Ò Wµy÷Xj©.¼w#m]k[%¾Ó¤G)«ö¡X{Ð>L9zþ„ÙÎ Êåç5ªúŒ™êdÞö³Å§hG/*°û8FB§`_ñ^ßG:RÔ¤±QÞÀš†¨±d~]ýxÇw’.qØf^M˜× 9c˜Ѷsß ‰q=?Ì·8-æTÍÒÿ—½÷ ¶ì:Ïôžo­N¾9uŽÈh$‚ R¤DŠ¢¨™Q²=ÖL©æ—§Æ–lW9Hþ1ÁvÙSšù3å©r¹dÙck’•,•FE‘ E‚$h tî¾}o÷Í÷œ{âÞ{­õùǹÝ €hH*‹iUíÏÙ{ípÖ—Þï}ã³XVˆ\LTLÑèNQ-À ÚÞI·4ä“T4¢T%ëN都E>Ø;,𔇣9~´ñAþv}†¬Ua·–0W©Q‹¦øj#åå̳ÙˆEÖë'/ÖfHhÅŽë ë\«R(|àæ×íÜ” däÄÄÞˆu‘&>£"¢µ¤)õx‚àêQšj4Ù‚Gòؼ˜,ÎäÚ¶¤ÃR¥ãÊ’Púq¶7¨šØ Tšzsm]Î_¾¤!„»¶~8bé2æA^þ…-*¢sO?‚ëõÙ»t áOd?‚÷}è¦,qéÅ—¤·»{×öãͨn4ÂçÅ;Ùñ?kÞ÷ëxü±ætGDYJ(ß"¼&ív[=,3'ŽÐ:y‚x¢­ÉšñD]}fA³æe{ØåܵËz«½-[ÝŽ6'šÔk5œscÍ UL©#L‰‰,&¶×+¤u’F•¨–Õ+DõŠ$5ÒVUâ,¦ZËÈ‹_üüåì‹/±³¹Ež (£¼á(çM›äE©ýáˆsç¯ðÊ—åå=s•#3óÌ6'ðìkvŒI/uÿû¾Bè~'¹Š 2f¡oû?ïK¼¥‚¢òVéCÆDD=F ÞZé7ë*‘•4Œƒñ ãfþqfLϵÒ4b¬avÏe1÷)³´’2¬6ÈM…v\!w15ãžç…þHmáÇ"&õ ‘÷8_²µÛ¥·Þe0,hÕ«ÒTOÃL%##â¢*;º¥‘ùJV&›UfZ©œ>”*ËC.Þè²¼>’¼<9ÁÁ¹Šž¿¸ƒÃH¥YÓþn£‡'˜™©sdÊ2S·Ì·,«37]åá“ ¬UÚ»…´¦=×ÎÙ*SU#-C ðFD2Z±pqu‡ÿ÷åJ iJ^^nÓîùï•j…J½.Ó ó9}JO=r†ÉÙY¦æ !Ðkwî&hx¿4¼ï§ ¼·*û»ÒðþCÞ›Fðnèyßi²ï·Šñ^t»w3§÷:þ{½ïnþÎ]œ;ïã\Þr=‡¹8‚s#¤¾ãÜß2‡½Žë_qöWö~>“|ÇOä@1+ý²K>lKe/H%·"b ¤¹ÁË­ÖoL¬J§:¤RM¤Xr\?Þæâ==é´¼`TèF¸v*Ëó¥ z–•¿×Æ|u†ü3-¤T™^Kåto„1Èöt.õÈçœhìÇ¢³& &H  ÖKd-¥JDL,QˆÁz¹Zs¬fHHLä’Æ¹ãi¸Ij®)ù•ç©_ëJgªÅàÄÅ=u~pù„ÌïUØHÚråô£ûë¹ôãõK´7À¼4Â\ÍÄO™Zš#KY‘j*~qŠö%'½­¡$(aõ óËbZ}ÍH]““”²2$ÜI¶¢²;¿K2·Hè6X6ÄKÎÒÞìå"êeæc2÷ý?*ijE¾ô ìe1eý†±óljÝ.tºæŸiƒëˆ‰ê„Þ¦»#Iý¸èh[%¼ æ¶•XA—$0-=»&#³)¥ô‰œPH"7ª âFTKGæ Zy_$bCU¢¡—VgC²‹M[T2‘8F¥¥_‰BÉdªbÀZë &Žþ 9-®e´Ök¾eäðÚK„Í+HIciFüÎ.íÂbÉ|²F½¹+Z~ZÃvªÌ_ŒÉö ·Ù‘öñMDJL±R¡,¥Ý›•­²ÉfZêÑÓL×~L¬y” "²(*]T¾æ‚Dñ-ÒʤY)‘døÐ—f¤‘MÛH ?¢ï=ïè…DœªÔM‡é¤+ª^ŠP•½²"ë!’[ÄñK$öª¨IŠE™è-aBOnL¬J®!Î5‰|\"ýIŽfä„Ý£í7åkÒ•s!ÈWRä¥ÔÈѲ\G&¤/s¯æÑo<ÊÔ ‘™É :¾Ê‰tGþc{S~xPÊ ?Öòã{¹|ª_òdÜ(¦»•I¤J?“YWçôŒ°T?ÉÔhQ²ÎML¸†ÙŽd«¹Ž‘HvG‘ «5´ZÁf!K„J‚ú’`÷ûNË ~_Y`LËéŒ(UDÆÍä^‚+ ®^‚8œ8-E#ƒV3\£µªH«)åDMÊZ*b ÖláĈAŒ½Í­aØÈ#f_âÃ8ê÷ˆ ²š6èU*+clFë""ŸHB…ØÆ¤qB%N‰¢X¼QBø¥)l«.v£K´¼MÔÏE²XÜ @K?V /ý8šk0±4'"W®_gmcã}Û¹ï¥uì¬|åÜøƒ¯È‡çð}œ¯½ÄhsçOd?²Zû>ôI–ÉË_x–ü­¸î»¶¼7ç»Ùﻩl¼Z|x7zÏ}ŸùÀãñÈOü †»1Q$E¯ QË}úÌ×2lgGâÁ®¤yNâõ$–™‰ ™]œ§63)I«F}zRæŽ,1½8/µF±V¼ ^D¼~»ñá¶>†*ã>±ÖR«×¨V+$i"!xŒ1ìsㆠ3S“œyøÎ<|?=zFž~ê ™hµ †LMNH³ÙV³Akü]ªÕ VCê i4ërß±c4*ÜpÜ[¢Ae÷Fí“öî7˜ï7™³/î!·©l¹œìsñŽ›¸…;}0wŠ'•ŒA­&£ÜI¦*šD˜ÈHÅå˜0†PØ ¢Q$ûŒZBPLOS‹ª4wöÄ+„0R†ƒœbÔ“=[‘íP•ºÉ‚ŠFFˆ"F‘HI íç%iˆ‚ŠAP5ôºC6oîJÊâÒ$­ÄJØØ£°1šÅ’ä…è82C¬H$ £RÊý #Bµ‚óS:‘È Tu̦ŷ Gºß cDÅJn¶#Ik‰œYp°6äú^E–{Gê}*±Jµ’1ÓJåÈB"§¶•AV6¼qmçáÐb]NjÈò#/bkU1µŠÜw¸&“ˆ ÌOÄÜ3Ë•ÜÊó›^6GC:Q‘…ùª|îõ-ž»²'·:9ÕXšÕ˜¥™†ˆ ¥G"ñå×wä+¯oÊ×^½!ëí¡ìµ;2èõ¤9Ñ4Ȩ×Å•9e‘ËÎÆ GsïcÊÆY[¾ñ~‘?wãSs—ëÍÝó]×Û: úóÝTÞé$î¶"ß!jûN•”w,|ûœïæ\ÞiïD-x7ÂRïEñ+ßax`¨ß1Š}× Ö°(:°v³§;¯á• 毑ï?ð(ÍA‹½ã ¥}©¤#ÕÈñH–jy„KD|¤Òo–2ªŒÔ0ÂhAh ÅÍî)Æ1kŒÕ„µõ¥xÔ“µk¤CÃt6‡Ö-þüAýòf.~¹ÏÄñ_°^ˆh¤»,¤mj‘¬[Ò-"ñº¡‰ý Ƭ!ÆKÝåèúQí«D¾T›ôÅ”sšÛBðUœKdدi·¾t<Ø…3=!+,O—þ~¯ÃÇoLqàì&.Ü'nûN¾¬¾šË¨LäÌÔ½7ÝeªPj½_NÈ(ÔUëA´éexL¤.›½%œ&Ze$õÙªÄæ¸D»CßY–‡Cƒj¹ÎžÜ’ÇjM=œF<Ø ¢yÝŠ$)!ŠñYE¨W ÆìƨÍ=Áb‚W»/iFP‘ J‰FvœÍ%Ž„Â©‡ª‚Jq¡`P¼#˜h •T4I ŽÄ䥎Ý#ˆh@E¬UŒ‹2ÒU‘‡Ù#7VnD5)³SÆT¾NQ_:)GÅøá,^P†N$ ¡^‘øVsyr' ^Õ ¢ŠªàFƒ–÷êI¤k[[²±µy×öCŒQ7¡!È¡?©õ…9¹úûÏ*‚Ìè11q,k_þæŸÈ~x稵Z2wøùHn]¾ò'²w‘ý³ª€¼Ý®¼ÃÿßrÜÛ´Ó§ŽÉ±>ÅÁ>ÂÁœ¡67-{[øa_}üûÄ>CWs|¸(–b²Á…×ÞÐW¿þMnÜX‘óçÞ@U9vâ˜NNMJ³ÑPGã8úv¦F5¢A„ "ûÁÚˆ^¿//|ó[òÊ+çäæÍ[:°$‘µwæE‘NMMÉôÔ-™˜hi£QçÀÒ¢œyø~9sæA=sæAΜyPÎ<<þù±GÏȃGŽsßÜ!}ìч™8¶$šÅ"6RÓ¨ˆ©UZE¥–‰TRÑÜ >è·[ÏÇ€¢7LÜV=×Û*ëŠÜ†_ö•Ï­&šâ.Pô‡dƒÖ ‰QÉ|©âUÊ0.Ÿt§šãÏ`áöy•Þô¤´B$Ùng|«Ì8 ŠT%í•j:]ö¤K^1L8K(*Eë U•#QéTJ'6 ©I³D’,–"(íÍ£QAYdXHh÷Å8Vb5Æãdб ¾ôâÊ ²’W3 ΫuþNþmÆ‚)2–x7¥å¨ÔÕvD\IäÔL.GZ.·+\Û«r 6$6¥”^4²–V=’ŽUuºËêVÎ…åç®ut²•2;™I¿3T‡a˜TØè+ ­ˆÉj$^"yaýÚVàí˜u©É o,³¼¼¦Î&Òîu³—ËË«C½±Ù•/?w£A.Ni½šñÚNɵõYVe{m“¯|þYV®\#t¶w©T«R­×ØÝØÔßý7¿,;ÒÞÜÔë.2èvß©!ïâKËwð©õ}ÞÍß}7ÿ÷ýtá6cÛ»—UþJ ý½Ž÷ ÁÒ÷Q"Ó?¥Q@~ìÃOêþ©ïåÞûr©y“>{"ýúô7XËnQs •^4P[Q •<Ño·¹ ŠQœQ Bâа§ø8à,ô¬åþ["ɵiýjÖ––êìƒ eéA †Ø£µá¸¼;[$—ËéPä©f*Ô#Eó/CJA/.5.…'ÿÙP†U«—¼&eÕho.ãá_˜ç¾5E}-Æ>f%ÌzÝþTO®~ºOÞ,õÌ¿ûaŸû»róôç8»øÏuâ·JŽüÁE)Ò®jð:Ë¿*yû›Z_úkRý¤Jœ‹ [Š”!ÆQÕ‹5ªyh³‹cgp©Õ!IžË¥µuåñ= i®i»)µ•9m¼v€8ÄâÛ…ÛI#a¾¶¨Õd‡Ã­D*æ :ôk@¦èyЯˆˆS9†åýރђDÞ—{£MÝ®±Õ¿(#¯«#Ó> Q8®Q„˜¡kB•,R&«×™Î„Ä>&bžTч\}WJièîܺ5¤ªjˆ ˆ{TZëÌÎÜbºÒ¥ W4¸pùQ¶wæX:±)¶2 ‘m½µ7ÏâlîÙÀFŠw–²´tM•ad0Íž4n]Ÿ‘•õišÃ®Î¯Ñ¬yfÏ´¨Î¤IU"д° ŽDÀ¸Bnì•z)¤ØÌÉ·…ËQ]½Vdä,’ìëø0Ö¾ˆ /Áåco"ŽÙçßßÇ©›±tsáTœ#R‹ÅP#TþÁ·¡ÖÄ"Öª[M E†9¦Ó«¨ã Æ£ÄQ„á8m¾7_‘Ë¡ªÏÊ,ý`Å¢õœHT½—à=Á°‚"5#jÜx¾>'º÷k„êÔP$"A1ÕXåÐ4Q5“•+Wõ«/|S†Ãá]Û1 #ûúÙŸfóµóòÿÕ?R€æ©£<ô_þ¢ZUnüî³\ù¥ß¾kû!"ªªÌ>Ì_ûOÿ.Ã^Oþí?þ¹1èwýà;«%s—6ùÙú´Q×ÖÁEN~ê’Z•æÒÃÝ=Ù¹vUçû˜Ìú¨–—Ÿ%êï’§‘\yýužÿÅ_R¾ Ù’8Ž9p耊ˆhP}Ûݦ»}G¿AŒa8²vóÖן8~TEÆq8 E^püøyüÑ3 G¹#xh4êÒl6T5ì»Áˆw^CYBt¯lJ÷ú¶¦S5l5јÛGk÷ùsCÐÐø€#‰¢ÈTì;^I1ûžö~‰•F&väT‡yƒ+)}¬jÒÓ¬ZM¢¤ÝžØr ÛPñºbßE5„oË?:I³&K«ú¡c™®\Ø­© 1G…4b¯^«( ÆŒwÛéy^¼Øáëçö´ÓsY¨‰Ñ {í!q5¥,Ï<Ôâ{žàüò.ÿã/}Î-óäÇŸfñž“¼öå¯Ëùg¿¬Çï?Í¡£ˆÓDªõšv‡%g_xU&ê\Å0wüæÄ=N˜0–k¯^à+_üò[ô=¦æf¤R«’sÝZ[?¾îwµúíäO+D¨ßaâw3þ,„•?!Â÷:w}×èn]ÞuâÈj>VÈÕÿùé{äcOÜOíô}´æ0b´k»r¥q…ŠSUJùíƒÏë­JWê¹h­ xƒ„}Þ@o•"‰yA<8A±‚QÄ ,ôT{•›sŽfˆðb´ìªo÷OiÇU%hßzQT-ŠÇ{% ‰Z1RíM‹H¤TÚÁŸúÏÖ™{¥ÔÁœ•½ã‘.º.¢¢•íéî ¿ß’tªÖTzlþè®&'fåñÿç1Ô ¿ócÿ@/Õž•ø—Ç8õ…i6.GUT&Ì}z~è!n=ƒkÿÝ74~ Èô/ÈÝföwîÕþóO²Q9$GÜ´ù ?ËFcÄSW?¢ƒ/([¾#µƒ{HZÓ•ì!ùÞ ¿Áì³_Âç‚6„ÝG>£ÃÙ'0:ÀŽ.‹Y½¨PƒÅ‡Ek ( «_.þ–ÊÌ8öˆô×^Çb ý]â‰%v5b0èkäFÔÜ@1 ba-OðAUƒ`ÇM¼¢%š¤ÚZéÙ$EŸòÚËø½uÌÒILó4zq›0º¢U¢©R9ñ„‰¸«µä$£Ñ ­ &¡ }í¬þª wž§qàG´>ÿ)Ñ0§ìˆõv!\­‘±jÔÊË€U$*jТæÕȉ%UUˆ¢cbOîF ª±b¥®h"H} Ñeñ–²Ù!L¬).•’ ³ç07‡D¦â¹«ìöÛ Ëc Ö’°qC+ý-R Fª2ôuÊbM¡‡ë{ÒH,±9©"ˆ O âQëtÔܓݖ×Q³--CS4¶˜\¸ÁÞîÃö,qâ0QIÒÊã¦&GzüTA¥%Ô`ÄcEµ¬—¢´Ü¸ÞÒÕÕerrif~kƒ#¸ÿC ­Y#Zzú’°5é¢mÙ‘îbúj~W÷Mºa[vrÇ 2¥ËyYîg¸f®h"õö}µ¤>9WÊq*q”«`„h,lÈ>?Æ`0Ø<¨Þn~Ô ìÃ:P%AÇÄÐÆªD‘à<¸’4ÄÄí¾Z¯bG%R:@4ª%|<¿!‡»ú{a‰Ë½LbçÆl[cò_T^Á{(ÇF0Öª‰#­X¨FjTÄ Êa1–B:ЀÌ5ˆ§ê4ȯö³ôý÷e?ÄÑ8þýߣOÿÌOÉ­ç_âöºóºƒŸü0þß‚rñÕÏ?G÷ê»¶ï9Í÷ÿŸ”öæ&¿þÏþ9oSDÿÿÕ~¼O?àÝ–»²™§>ñ©LN²ðнZ_lŠó=²x‰z/Wí¬JYÏXßXã+ÿÛÿÍ ÝÁF‚Šˆ¼­ ÷nÎýÍUŒ±„Æ‘à;ø ­f¼c$åœ8qŒ{ï=¥Þ9Aï<³‹ 0Óèpè¥:ÊÂSŒüf”¤1“$UT"ƒ*2zœ *ˆˆcåÍž‰Þþ’fV¬5·§:¦ ÕýKTÅ/Bˆ­!ˆD‰k‘^8½D}£/ +[iLˆ"(ÆHìœI"ƒ8¦ÒÁ{Äï«"æe d›Å˜$"ŠcºõT‡Á1Ùw’'±nG"ÑyI½;*# ½×AYJé=ÆmıØ4†‰q)>HÏäCñEAjb­fRYB6V/·£B%cTö¡Xã{)²ß5¦AD Š´¡ójò‰{zŸèëåNUv†UÕ ê‰G©©1©Œ Ϩ´j†³—»¼v­Ï•›#Œ@b…Š…chéÆÎ&¿ôÛ_àÚê¶Ø8&«Uµ¤Ø)âHj:'ï?ÅÌü´¶¦Zróæ–ž}áUQM#ó'3³´@g—þàKxç¸ðxûó{on—ÇÞ;Aþ^>áÝVîv‘úóæð'™ãŸ™ṳ̀üäñE¦³¬~²ÁùöøÔúS-ƒ2âìôªþÚÑ¥Ô5ª£mÔ¶¦)&8¦öF$¹e˜(ý,`¤ª˜0®yºsƒóÊæ>3žõšÜlJå[‡¨ÇÑÅ[|å¸çÆRÎbÓò1¨GÕ3´†Ü =»G¤‚K¥’ü0#wÊüK=Žüހÿ?BA³í ¢žbÖM8ñÚ!œxÝó9£UKˆ ýgzLm%Þº—Ýé‹|éo=Ë¡IåǾ°Èêó Ý[–á¶P9X¡ñÐÃ|@û««Œ:ó= fÿû›dµ!ƒŸÿ(+´¨EM&Ì›Ù7yqúuë=Ô7§Ù9«\n*›î{é:þ£ßÀÇÈz:³ Œü$QéUŠ]ñ-ĵ0v ¥@h£Ö0Z»׿†Fjïýˆì­½Û½I"FÁ§ \s‘Þp€ÁPæ=LØP›(•z q}Š7þ)FÈì’£ \Ü@WW-$.Hâ&­FÌΰ5õ0ƒÞ÷,I±ÇàÆ¯è`הּæ?C}þ“¨:4”o+ôÊ›×qŸ¤‹î÷¯Æ ƽuÍ ‘ßϾ=)ŒõíÜtæØ4G¢&A|„kîR¶v0ÁŒ ` #f?³?VþUF+7Uw7¥yÊ`©FŽÜ×è– µjÅõõ‹T%ÇØ'A-¢ÓÎâˆrb™]·­ýI+!;ˆs16)0±[".qTB)$vHZRoyOv©†|̃©‰t£²'Á›;'YkGlÚÞ3}EjG·y]®ñbîeJ:ÝÆ¤%¢Ð5)3Au7ælõ£¥m†Þ’۰︇± ¨À¡ZZ ¡YZ[÷1]Àñí%^áAÚvLµ›«!-râÆøôáhœ¦ro¬óeªb°w dÿŽŒ3ÂŒá•c*ß(ƹ K4*I:CìÈ)yf¸Ê#n‹¯˜yΖ“hw„ ÁÜQh c¡C_”tÜ·¢Œ–³Ûª`²˜bo€äX50,ñ•yêÖ·×Yþê \Y¾þ¾×ÙÛÁ§çC?ûÓt®¯ðùÿæÀÅ×Ì<þ ‹ý'~â¯Ó[^åì?ùßÙøúË·A\·†w\«ÓJEžùñåè÷óå_ûu.<ÿÍ7¿çÏÕ~Üå~Þ÷ñDŒþ­óE©NÎQô{x×¥ #âîÉú«J³!=xé7?ËùßÿâwµÏðÔGŸáÓÜétñf8磒|ÞâqYf±o/pè›.¸¾…[àö’ªw:Íßa„ñGTóÈJÈ=É8 VhO{ªÊ˧qâÂ:Sm\âÉ Ä+!¶¨óxpE ¶hbÇ('W†±`²/ ýÜa* Y½J^›Éé<£.62OWKÒ&œPÍ= lo¨¥ªŒ†Þ| ‹,“*E-æ1 ìOЃ8Ò¸R£êUªªXUò8Â[C<*‘0ÆŒ[úUïè<Šè¾Ý#Û„€*¸J“¹¥'g ==Ý—œˆö0áX³ÀCdSzCÃ]pLOĪeWLSöÛ”ë—ѬJöÀ'1{ü¹sЬÂéûI Œs˜²@åÅ™q¶y/›õ ºéåI}ãE¦æ>#µ¹ïÏà,ÆFØ$ÁK\Ž™Ï JR •ALšq‘ƒ0! Ôøý-Œ7ö3:ám› cêW1c&˜q÷¤u%¶„xõ3¢^ SŒ+@¦ŒÁ%PƘPÁtsÌNÛ+ˆg'ˆŽ–hæ0éÒA˜?L¼0OõÀ,fqrúùä"£ÅÃôbz –ÞRDoQéÏ6"\3@Ë •€ÉrL}„™È‰£”të(Ín‹Ã³×‰N^Âf[$EΠðE‡ÊhÈE[ò[óWyi”H÷Ò#lv¦ùǾÂo}èwùæ‘sò›37ùíù/ÚâÜ¡jEÀ®xFäLæžÙ ‚­H8=ˆyb/åäÀrÏ áx/åÔnÆ}]ç7c~ærÊ©ö³…áþѺUÎOZÚ™Pq0ôFkiGØ,‚,ÁH„ {~=n x‚:ä¶öóíûs[y!в¤F$†ÈÆxõ”Vq•„²žâb+>K®Ç„”¬T'V³ñGÃï7ïß{c !3v½ ’ ¡phîÐÜœ‡ØŒßŸ—¸“ „§`ùÒe.|íù?Ù:»ï\tWn1uâó<Èh§ÍÎ…;ý nm°ùüYÔšG2û‡ÐÒ1XÛ$äÅwܽwNS“œ~âqÝ.×^}íιýyÛþlhèßÑwš>~˜Ø#qIéK²õ|“Ý›+\½tIvo­qõ«Ï“÷úßÕ>C¥Z¡,••­m–wvéŽ Zµ*Ya¬!Š Q<ÞT„ð¦m\»‚Þ¡ÕÝWA—ÛBƒw¾¾Ó&2&{–J·K†P¡HcLjÉ,´§§1Á0»Ù!8¿ÜËXpüƒ@±£“m¶?¼ŠK· KäaʶâU¾¯$eG.B0ÄvÀ‘—ä³C:óE3u½6Áù§Úl ôÅl=³òÃA`òå’Ùo9jË%§ÿ×u$LmPZ$>ˆD%BÔ ºîQXY ÄYBð€Q$„qJ*hÀÚk€+^#ˆs"FoÊ+ä(B¤J´“%{LyÅ–ìaò¨Ï®¼JÞÊ0I) òÖ,RŸÀx‹h†½ùuHJüüÚéS]>‹›=ˆ_zšþòQjiÞóQFëè¯¼Š Ž8ï"nDTi2wø^†3Kìm®ÐÝ^eíêK6Θ:p„æäñ‘ŽR\ì‘»S€U ÞDccëFcu,šµÏcoüݯãN‚ÝWÖ¾mtÊÅcd–*f D핉Çt”Áa`a˜€@Øé#É n%k Ût8î{I(iù6¦9‰žz”<™õ·±Þˆ 9ã[ 5Œ/P3¢Ò |å&N—™šÊ±ù" €´³I蕼rêëD opïÖ =UVʈ—:Sœ¼q?sÎ15õ;ˆy3«]ÄLj‚Õ¤ŠŸ¾YáhaP ëqdAøÉ5øÆTΡ~ÂR7¥q $&p-«ñ¹úa"”—¤ä¹F•[YB”^RòÐh•ݾ…÷)'ó¡ÉŽMØ¢ÆïÅÇEq÷J²Î++"àñõû)‡QƒÄ1b"¤p ‚#àRi´0VHF9¹áò¦p”IÊFÒ"ô…š/(2ƒifPq„Ü#e@z% Š-¶Y%7*¹§Þ Îã 7ÖV¨ÄàÃ÷’DD•”J–ý)]ÖqEbÔé’ÔkTf¦þ¸Kíçá—Yùì—8ó3ÿ þýŸâà§_áëÿíÏázƒï¸û$͈â·¬hÐïmÓþéÏrú3Ÿà¡¿ñ)’# JžöË\}í[+«˜ÈŽÊïòqé \:qŒm¥É)?ú²j§å·ŸðГ}»òöò†*ûë̘:÷vå­È›o?›"†Š²#Š .iÚ@Ñ/xáÒ5îyâ ³t–×1E„quÀXKðžW7ÖiM69Ú¬P J?þ¿•qk˜Ä ‚«¼#PvdyD~ ‰K,u3R‹4ZäeÎ^(iyÃh*¥#¢¿ïŒÈ«–ÝjL³_LN[R1Ô¢„®sWâ]I)Ed:énõ¬!ø0fÃÛϪë›ðjfÌKLr§•A1ÊU™ÄH‹mSË<½\¸ºWáH£àÄ4š\Ù\^Ë9w3âSgªüÍï«ñÙçnð‹¿s#§ÈsË“gá¥sçȋ⮟•öÖ.ßÚ~8päàû­xü{1þ*ùK4d£EÀå9¡ ÏtÇj„GiJʸ Ü_ÿj¡Æã{9pižÎJŸÆdJøž’§ÄÝ IDAT¢Ó‘6¯öybÈzk†/ŒŽ3[/ñù6÷}áט¹þ"Ï?õòÊCÃhÁk­Œ{wrÛÜ!ñ¨2ÄÕû”—WÑõˆ\«¸¹‡pµ*áæaÎ?ù ×ÿ‹ÏQÖúd;³,~õHo–¹ò*g¶Ÿ£îz$GëìDGiËÀVAT([§†\û`Ÿ¼î°AyìåÓÔz5¢AŠ}ö%§$•œ¸áÀ9‚¤¸dš`2R³‚Ýi`|‚‡·-hNDñå[NÓì¦lî¾Àp½Oä,-ˆâœÉã ÛGÆ)¿X†ËçqkçXhncÌØÎ2Xúê—˜^™%tæé…kìÜü:šº GÈÊ&•½`aë$QÔÇöº~‰².|ôÆi¶ÍÒÜsœÒK|pÙ… 6,J@p¥UúqDǦcZÀïg>O´„ UËg'—X‰š¤´[{t¬¡æ„ÜÄüÈV‡{7÷ÈÍ8[¸4 ÌcJFÄÜgzTý=,ŸÐKt%å߯gX¯Ö(LJÞóD¡Ä‘°&ÂQàÕáqc°x(ÇÚI Ö "ô|‚’ÄTdYª‹(‹1¼8s€Ý¼Ì·Å￟úö€¤7‚ª ¹#Ô¤3Â3®&1I’P–%e4®vXßèæ§)N.R‰,Y½ò§y\ÉPUÜçýŽ€æþÊ/ÿÜÏsßßû æŸz”ïù?þ1+¿÷eÎÿŸ¿ú®»í«Ï1ì(§ŸxŒçßàúk¯ÿ¥°O:Ñr–ªXÖ¶Öxþ÷?wçzþE>Ɔî“2ÀO>ÎÓO=IÇø(ÂÞÎj‹:]èö¿ U½c£cÌ[aUûDû o‚[ƒySž;8/J$Ž$a8ÊéôGTâ˜J5áæJ‡W—¹ïÉ3˜é&²ÙAËr̉¿á²ÕŒ|n†çvÖ‘Ù„Sõ*›ÁÑ×ÀT·CZEˆ#Šb”8‰°¥£»¼Ë0IH'ªdI™^`0l³Wn2ÕSâaÎz2¤l*•‰wÝÞfk©I¯_îåÎS…â„^ð8çˆã€ h[G+‹ÉúàÆÖX¼cíU‚°Ë_Wkô¶Ë8€ëõ…K:IÐ >p°K#õLWøÈ%Ž -MÎÞ„×®9ØŠxòigîgu+áõkðԙǙlNòõ—¿Ån§ý¾ÖUX÷‰ýåóIù«&ô·Ïþ=iBû~Ë?xäãŸlò‡ó–>Øy@¾o÷rq*Š@P/A@Õ‹3±d>!ñEê Æ`‚`] 7/^m*.ll48)U(ƒ%¶h>*D›B$ãÆºªgà÷´wÝ.¦’R?s“Æà‚úXŨÑ8«ˆÛì²òO…Þ…kD…ª ¢A5d"ë?ÔÔ§pDF ´–drbên½©ú¥¡Ìþ_+h:DÙV¨ˆÈy ªà䎢# û ðªNƤȞqZ=Þç4ªû¹cì8½Â6°)½$°­kèw%„’F”2Q¡¿xŒ~ihNâ³&Æë¬rõß±½óŠ$ÓǨÞó‘±0ÕÖ²šæ’Õò-ÜpH25‰ÜÂ÷wUúm\wC@°Y“ÊÑÇHfáË-G*{¢Þ«ç4ôw‰gŽHvâØtŽþòê7h?ÁP=ræÂ®F»%OÚ‘¹F¡;EEF½ÿ½÷ޱ-ËÎû~kŸ|SÝÊùåü:¼Óiº'f‘Å` dX²MQ$h¶ýaɆ†`Y²Y mST )RL#Îp§gzzzzÞôëðúåTõ*ç[uÃÉ{ùªî™ñt÷ Ý"mÀ\àÞS÷œ½Ï¾ûìo­½Öú¾R_ùÓYÒË3l~äãòÇ'7KÔ¥d®Áˆh"§7ZÞ‰if™:½Dˆ3m/-I–d¨Ów˜´?àÂG6¹úìñ7G™þêcšë˜d5«¡&ò©ùËÁbV½GFe&=¤ç¿=)NbñÒ.®»ÂÂÃ]–Oæj+®8™eì|C\QIº8A•þ)õCöœ£RVÉö/Ó¿2Ϲ/ ¯˜óL¥Ãß:H!.Šâåî2ŸXJ¯+jËÝôDG'Ø¥k³åÞޣЙ?§›WŸM2¼š©Ž„INŸ Þÿ,“ס¿3€8ÓÄÝ6­Þ7ØI_À™ªô QËUߊvàÉæádaJseTÕY‚`[œ&£›ºæy¬UŒ))­‡_ µÀÓ‚óá€üIß®Ú]…7Q_JÝuD¯«ãEF¥°RðPýp«'§ÛJb\Ì3©=Jqw#&'v|„B ©Dj]+Öid‚[¦BO<¾m9ßW×EmÐnW(ÓD¤œ8¦Ì{»¬` FŒˆUƒˆëí: Ž"*Æ׉0ÆÅ£¡Ú¨œ¿ª?sáe–« ù?O=†Š#‚ßÉñ’§(qvÈKÜ=ŠUŠRQ¥T+EV`³RÉK‘¬D«æ½X¶|!øé08>­翩ßü?~ë}ãÇO>'OüÊß`ñìk¼ü?ÿïš7=èñcè±Óòøÿ«ƒM®ýæpå×ÿ åÛ΋|o¿¸¾ÏþÍÿ„‘ýÓ|é7þ3o^ø Çþ=¡ï?uJN<õcû÷éíK—åü7^d}~áN¸«÷a»¼W_ïÖN»éÃÿØÉs}–­ot•¶ÝÝÆøþ10Ž#v‡¹ÛsšçùÛªèãÃ#ô7›$Yªs ÄIJ% äÈ丞Giwã"Ñ´Ý“ÞzKiÖa¨_ÌÂ*¶›Ðl4*ÿâOþŒå²Ð¿ýßþ-Ôqd}q‹ha“çosüfa¨­ãäÒÆë.p,.ô¡©i6+ž”IA_œ#…¥,vÙ¹]G( KQ앹¨ÊN^jzÒ 5$ƒµUY)²D—«¥t$ÃñC­Œì×ñQ”¢×Ui]ÂTc¤î8 V7³„$Ïñ\—(¨Hâ”ä‘«CÖ?·JQÈ^äH‹b—Ê×|¯nüwkBÞâ.UU¬H³·ÞUÎŒwõ™;7·*ŒúÂP%ÇwKR\:©ÁàS"¢Èa§›èêVÎ¥™„› ©ìt .߼­ù9½½¸t§9t¿Ïè{˜ÿªýÿWBÿ‰:ïM“öð¸G  Öèh–™ƒ ×úÎÑfymè:›ÑªìkGÔ2‘¨Ì©å–¨TИR:˜2)Œª^jÞÞ2}iÄF”’™‚¨°X›±ê žæZ1=i§T„„TL”`¢TÓ8ÀÛLYø§$Ë¿ÿ ½³×Ô´I/,hï•[Ä/ß »¸HuxPH¨:êï ë´$¨„„}u‰5¢ Bß«]&þp›É/ÅL}¡'¯Çøó±8›ÕÏ QÿÚ(Œ f ¤ŽH}×h“HD¶A–Av@¶Ed[Uç€%vƒ·5©ïfÝÊ Ž©bLcŒ8ÆUãxbÄÁ“ 'bÛ›KŠ)z ˆÏ !QÒ£º~“´Û"ž~cBÈ1lãl\ÆÖú%÷|Š­E¼¾ qšã{¹ó»õA£F$]ßT¿1,©“H¥,ë¢eI‡²½†UŒZa}†2íJ‘Å$«×Á¢ƒáÁ©ŒQÄ9ÙöÑО Ù¾æËRÛÓâ@Hû@ƒ[ÛµH¨î´¸ü•[,_^çôÇöñÐsrDÖ8¦Kxš3Pö$/„¶ëÉõZŸ.UCIO\ÊZHc /ôbÈ7pZmFW÷sä;G™¾0"ýÛ=ú¶·Ä¨a§2(Q+×Á¥Eœµ-ɺ%Úo¤u(랞غƑùLHö±ã7Å©,áN´84ÑãÀ¸HýÑiMýÅÈ é䣘hH¢íœñ|‰+ ú‡þ%Ÿ;ò9YÛŸéêxA2²@ #Ö#ß t+ ŽâxÆ8‚ÍŠ=%b$]úºÆ·þRÛR­ùŽCJ…VV%ëïÇ`³÷ z㫈ÝÂqG©„8•[B’’m§º©[ì<´ÆÚÉŒ4_gd!a|ù1Ü•SèüÃäQélãæÚsÜŽ"¹4øBsT¯XJDzîF\«ûlVJiJŠz©›m>¹½Íɬ͑¬%w»üÔj›O¯wäéíŒ'[Êtš‰¯%5¦¤çztM(]i¡F°%¹W%úH² IÑœ8MS‘(É5ÐŒÊd›ÓƒŒ×žÅ(±îu‚8Dš¤¯ëù‚µ¨qÄ©Ö0´( Ë[î©ÉÛu"K†¥tŒX/`¨»ÍH{K6Ú.5úŵ%…‹&P4òèå)ëkkT†4­Ëb{M2¢¾¾]6‹Š­ʇqe~†+37åÀ³"mµõò¿F{eí}ãGëÖm|âY>yL7.]¥½°„³Ç¾ñƒøÑ[ZcýÕ RÆ “Ÿ~V>MséÌ.üÀúoËR:[[<ü±D‘^õµ·ØpþÂðã.ðôž•Ð=ßçô3Oó™¿þV«|óÿ˜W¾øeéí´õ.ïõNTŸï†×w`”{¸ßw´%z®ÌÌÞÖk—¯ríê5nͲ±´Ì­YÂ2—‘ÐW'KÅÉRÜ,Å/rŠmÙœŸ§l·¡×ƒ^~×¥á Úí°µ´H¶Ý"(2™ªøTË/Åϼ4!¢”FÕ£a,¤GÝQ†›¬–òåWÞÐsWoÊøô=y†,·$›Ûxyï:{”Úˆ”%š—R?q˜+g_ç•^¢â¸"«†lõUÐÂRnôÈsÅõŒ8ŽQ1»Eð"‚ç$/qwR2 òȫ͕fn㑎”EFº½&¶ÌÕ„ñ›˜þLk’ŒÂ1⋇B-Ù.sž8’hNê©…UD-ò]GΈ¼MƼ+ܨò€¼]©öò.f–¥–®Çr/"/…}ÍLjaI‚Çzì¨MK<‰|U‹µY^²´QÐWsxðH×Q:±2Ðajlš¢Èdk{[¿'µê~7èïôœßÉ¿Óúð¦„îÞÁúÛãïôÿwzÿNÑ»Œ2è»|¾ÛY½Ïãz—ý¸Ûkë=DVô.¢5wsLºŽÒï§úÔÏÕŽòäj‹ký¿Ï\¸D×Y÷+Þ9”¹ºPYe-\ 9Øe8ŽP_5§ ,]NuDó¶°èÍpe,&îZ:no$f5òõ—^m3¾ë?ûBBÜ9ÅÏ>~’n\âÕ{zâIåÍW°É:Ó6´:êP*,|ù¬1¸þnR“5°yuA8h^"fJëOĞ߹L6»ŒxÞÞHˆuþí2Æ !¨¡â(8Ù÷½Ï*-ÿ{FLvRD6Õà#¦‚Hˆ2ŽPEÞÖȇRR —ZQÃW“PÁàê[ /¢œÂ˜ $gñ‚2Q¡¬Vq¼Hk'è^ÿ&½›/keô¦>´›“« Y††*#C佞v—ð}4>K²>K:ž"Þ!¾uÇñqŒƒu|Í6çpj}·o¬OÄ«7 굉›2ô˜»^¡5aÙ>Ref'àÈKW æ·xäã<ðĆ Öè¹.X-ªúroŒ\…R\®8zÎàF½‚µ'·Úvío’Æ=lšD]*EŒWz$G%KÕt[ôwºÛV[û©fm¤[œ‰^ÖT#éxUª[l×DFÌ8J’bÆO?Aûà#J¥ƒß7Gw —æÉ—öiTVyÝ øÎÿÈë•7™ªÖþ(¤Ñ¼Ä‡ê=ÆÛu‚ªÏˆÄÄg§éÌÁñk´WbÒN× vɸd7ÝgõöKÚ»õE†ìÆ­£ä „- ³ÁjÒ ´‚ïxÄõ}Üm:3Ô+çà4IãcêjLQ:¤eSqè[šÁyã&éºÃÚä*aþÿ üõÓZ.YXѹa«]9¼Ž¥}!;ë4ó8âó̦§'{©$b©åÊdlP\„R¥4©‡–* «Hô Y1ˆâ¨ˆ%ÕPK­P¢ê!n¥ªÓKÅä°{ÂÆþ&Ó' ìs,éQO_âG._åRó>ï0q‰r££“£4Žî#W‹d%’e˜^¦…Í¡( ×¡tR¬ë#ÆÅñ#ÐR×£ ë•gn_Ó©"ãµQ¼-Í‹§,47¥äC5oŒN_¢âª•!¬T`tJ7Î_' ¦‡IFëdäܸy[ªz¾ÏæÂ+Wo|`ø!"jËr—ø.ð£u醶.Ý ÝÚáäú vhßÓ>ØwòâcŒîßÏ7Þàú¹W¹öswjWïÒæx¿vƒÞ–ßßââ’.~W_„ýC<÷ÜStâ˜aW´žÆo×w¼õW=ö?|š2/°ª¨вÀ µÐeâôq@ÉKÕVZÐK (w󧌎ˆ–ÖâµJYñYéô¸~í¦>ÿÚníé=ñ<´›PM â,e«3X‰v¥¬ÒÜhití6Óc² Â_} EøÐ§°ƒ ¶÷xÎÜÚJñ"—Jèà†¢°P(ëXÅßÌè¤Ë,jªWf戎£QV‰Šöü’"íPì´È·75ş™žÀ¹v›²(µã:ÔŒ¡?ˆh¥ I–R‡.m“k×äÔ£p7­*I0"êCi­Ú=þE+‚QTTwÅå÷ŠÒ°i¦» `Vys©‚U£Ç‡zŒVwX•€kÛúòB×"_ˆ±X-©» ]yæp|…©Ÿ ·bæWkÏ096Ź çYÝX½Ÿçè^loîÓ¦–û°ãïöyÒ;9Nî=Dî6¢ïñ^îàÉ=x€ÿ>…ß-‚s/÷Ú±¹ÓîÓ¼K¹ƒ×úŽa¾©É&ÿÑÇ ‡²\LÒÌF9³ö+XÊ]ƒÄ¶œeÅÛ”9oXçƒ!úæymx–é†W¢Ì”|§G²1‹‘œÐ¤×—°òð&£Xäbƒ7Cò­:7. ~ò*ÝÛKtÏ<ÀõÃû¸Þ‚ ¿+gj›¨cu˜.CEOŽ[êÉ.%óùxXÞ̆ÔÔ•u©q¶:ÉòV¿ ĹŽ'#Ý ?ï¡"¨’R‰ÒTv0°8v’DT†Ûóe¹ô^ƶ˜Þ‰pû< ‡R­DÏI!Ó$ƒG´]Ÿ@²+’_ZÑ‘ý·è->@œº D³Òn|‹ÿ¯·u¢y’}Ñ ü‡k©~z)Ä> ì<»BxÛ£qeœä@•ü@ ão±}9fö+=²N€ ü¡!¤·ÍêÌ‹’¦ªêÒ'1žnÑN"ÇR`’ôÈAÔ‹ìÃî?€U¥-é. ŒñÅ9ŽñÔeðú+Œ]yíåldt¯­°“¶èÚ 6ø¨8á Z’õ&Å´­`ìõgñ¦Þ$šáxß#¯IP(Æä`JâŠKV„`ƒ½4„@¶Å•do=PÙ-÷Ï4/k䙵¾'6ôv“’³u •¬âÒísð­/Y$ÚšlP8){7h^üSNÎ_¢Õ˜àÍáaÞø7/rýó/ƒU~à¨:L4ÜÏÈ™HPAújâ¨j±Ó†8A‹âî.ue‘¡¾'Ö«èí‘AÖúd|{KGãj]œ²T- q³×Ä ûÖ*I.õJUýZ?N³Oæ¶6ðœŒc}¸Í* ¯œ§·ÞâØ§>"®ïTBõ£"I?üp£@P«åŸ¾3~ìÕÀÞüÝÏk¼ºÁþÿ„<ø_üÇL|ê=÷÷þ1ñÊúwëÊRÎ~á „µª>òÉOv{œáaøq»µïŠ©Q­Æ±Ç“czœñÃõâ7¿ÅWÿÕoQwíòD@”»ÏæÐ{Àò÷‡Áþ&§ï§Ý‹¹¶°$g¯ÝRGÌÛW[–äiÆô™S 4›x›ßÅ8×nÜ"IRMMQ"ÒWKU4ÎD,8"êî–®m®`«£gNqe~‰¾ýªjŒ‘æ@ŸŠÀå7/1ád¥åòì,:vŒªç’•óë›2œå<35É¥¡A¶×Öùòk¯x;Š3î3bš°QÅysÝI1êU<|Ïa÷È]„¨(ñZ1‘ˆÌÍ.óí-ýøSÏP¯øR„õ¼ yÒ&Ï»’¶V5ÝÙ §ß3H¦Rô75éÅÔÓ”šçÑ‹w™Ò|'À/E¶óX}ß% #Š¢ OSñ\WcDQÊrO,u—KuÏ)1"jTÌîÁN‰JÛÇ…ÕšÌmû<µ¯ÍÑÁXë~ÁzÏ—¥ÔÕzné pJLÝ-v;J/ƒ'O×8¹¿àÕ«Û&‡§êüöçŸg}«%{[œ÷ã‰Ükä^lê»9ÿý¾ë³òV Öÿ“Ïí‘ò.ÇÞ+\s7áîâü{éÓÚ¿Óyw†½Ó½s÷»ür‡¾Ë]„’ß~¿o´_~îSÉ@%–0½F[¨ˆ£ lIµ´’È(Ûæ€8å â'éOŽ‹Øý’Ùã’mŸÆËë¯Éï ϳ9œèMÑÌ #Ö‘c刜ns|Á—¡Ú>‘¡ƒœ:qˆ#O×äÆñyñ'-S‹u¶fs)årøqÃTáÈ•¡mLÝ—c'™x¤*^«'dú“1]—­€¥i+IèËPÐ#p;xZˆKÈJ–D±ÅêpC°+ ë‚Æ )HmW4V2‘RD6½¬kbL$Ž©#FEÄ1žˆ8""bŒ‹1"žˆøˆ"‚¨î (oŠ19 ¸Rˆë:Ò KË;-±ë‹V›8¦B4óœÖu)\Åi·X›“ps‘|ä0fpJŠÖ"ÉÚ ÜÆ1q£†({bÖŠc nµJÖé’®¯‰W«J04)^uXÜÆÈžšµâ“pê4^ßKûÆEÊ^K‚¾H‘1)ì´l‡ÒÞ·-;nDëPW’GÚtä û¬ŒÎ\¢¨>"ñÆs\‰›¼^Ô¹µÕ'×Vûyeu˜s[Cò|AkL’lHʾ«zE´ùyþ~ï+üYºÊèÈIùy;$¿4_ðà†/Aì[VÜrHØx› ð#ŒnËàÚ¼¸Õu©·póIbÑí¶·.u×­ÊJ¯C_lžãö÷KþÉŸÁ<ø8#Ã"Y"en¥Lrq°¢\üsâݺJ~e…îÅóÒyý œ[3T²¶ˆ‹ TÚ’Å!;™G¼z]pnqø£o0râ%Ф"¥uq£¶¥ƒ¬ÆÎžAVKwë «³Ï‘”5)ÃŒ<ã$â;@IždEEò2"³²²*iY%Ï+äYUPg7¤ˆ<ŠÈE¬%®;²=äÓ­;R4z}*›#O33>%çª7¥~a[¦®|ƒæÚ,nòõ£'äßm‹\ýÏK™îÎÕÞê&ë®ËÆå[¬½qEºKëâ÷Õ°Y.•Á~œfCJcD}OˆB4p!òĆ.ëÕ*·«ý²<Ø/;5Š*žkĉ"üZµJàUpÄÝ•w¶–<ë‘¥±ˆ'C}8ÕH´´rûÜ›l-­Êƒ?õ#ôOMw:rûì«d½äÁéçž"hÊò¹ólÏÎß5~h^ÈÎõYYýÖ«ÔöM0pú¨Œ=÷8^%¤uå–è^ѵªÒÛÙ‘ãO|Hú†‡¹öÊ9)‹â-¦¤?WüxÌÏqÜKÎßM®ÕäõäñÏ~†­•U¾þo~7¾öuŠ<—wé'÷ØæÝÜû½bÿ{áù»ëŒW'N¸0;'g¯\çå‹Wåâ̼ÜX\æÆÂîëúÂ’ÜXZ¡×ßG則%*"+IŒ#±EV·vˆ3‹Öèf…”{ªê’—"¥BV‚q¤ë*/]x3Ô”áéI¹y嚬îÖÓH½Qã±§%¬V9÷õ—e ¬Ž‘¯¼ø-q]WöON`TYiµäÒì,‡M†ªU®/,R”¥\]Xß8r¼ZãºÒÚ?€‰sÌ IDAT.¦áwbI“‚,ß@ }ƒã±ž‡Áµ–ºç‰a!î1VoHÕqÈ«!^³OD1âá8Z’ÆÛ`­T2ƒõ\J,¦( d—s«G‰aéH©JìªøÆÇÝ$Ý-øW1æmÁ>y˱ç{êößâÅbÏBÀZ4Ï1ôlÀJǧê—2Yi†%¥¨,Ä¡¸ÖŠo­Dd” *º§bI- ¥ &|ôäñS£<ýà´\¼¹ÄÚV÷í¹av#0ò.ϯ܃-waSË=<ßw›Žu·Ïл®om¿×ÎÉýzü÷R¢w±›ñçy/¯ïƒ¨Ñ{ÈÑÓ÷™Ã»K‰­è‡NLðç'˜ªÐî¢*ÎÞþK)›rR»2.Žê äÚO"ƒ»…­®H.¹vY'q ¬K_iÓ^§ª«€K¡U*¦+U{E3|±fRK“ÓS´D¼ÍD=#´R£MÙ·#T¤¡žˆ)uʘ ¯6ð§sÊû¼,÷R~ã`EÃË#ü¼íÊøÐEÕôª;…>_«ò'uŸS¿µÌÄK]J·”ïêÔ *&ÀqÞ–”Ý[‰ÚÀ yPÑ$Dw ²½Ô*Wv×%H°vñ»C-®¨nii/‰GJŽˆˆk­Z¯AâOÑrP=è®Ås¸eŒ ½ÉaɆ:ë1ÃÉœÍX{Z‹ãH`w´¼ðt곸ã¢ù2¶\AÕQDŒÑ¢,鮬"ªøÍ&~½ˆ¡ÌbQ[¨8ž’l§ 3ó²ßR!è ´mzÙ~–9Nª‘ôà¼fûo1üo1òõ¬}üÝ'©œ¯"ë³à×r‰†ò¶§íVÈÒADš…Ö¤²ýÐÀºÙ·©‰¿Ëi?ì%­îˆ‚–"lÛ'ƒe×eÙu%R«-cäËÕH],¬ŠÉ9–&2Àˆª?%¢£´JKÇǺuÉ2Oíâ×äÄñÏ‘Þø¨ö&ÉÂMñÇÏkµ2Ë1÷&½d•¿½=+¨1CÃGøÙlLÿË›J-Wé‰U11N³Ÿxä4ŠA‹ÜÎݰCV‰¹0ÑâÌúS ™ß)ôú—"äR[õ¥4‰nv/°º³&IÜÕ'§ï#Ÿ@f.¢yNÑ7‚3;ƒyõ5¶Ë Yai ,2Ô|„Þ--£œn²B™('¬uÐÆÎ#cô®æÈz)þ©F£%^».¦ô7ÑxkÛ7?Ln}Ú;c°vPÄ)p®:~µ}û¾N8p]GýÛ˜ +Zz`e7lg Yàj êÔ5R8h·ß“Ò5ˆUµŽ`œ²”ž\ëKõ;"‰2Ñ“ßtxðÛ£2GUfFÆø'|œÿÁo3ÿõ×ß?ŒçJÔlè±úÞp“þý˜ZDY»ÔËy)”¥Ý.…EL_]IÙ¼5‡M 5¾/tbFÇÆ¨M`ŠRÏ Úël‘Ç]Ùeu\Gº[Ûzå¥×È’”‡~úGeèÐ~vnÏéóÿè×én¶>ü:uL>ýþ®®¾y™oþýL¼±u_ø1üøƒúèßýe¢‘AnþΟ0ó_’ëo %ê‰'Ÿà™Ÿü n_º,ÏÿÖok‘ånøq—‘ˆ÷Ädã:Œ8 ~ú“:và7ßxSÞxþk¬/,è=ÚD ˆ~™Ü…}ô^sëû1zò¨œùKŸU¯Q%˜Y¥±ºCf м$ð}zIÌÜÒcCCÒ¬Öu—mNEK‹D¾ƒMYÚÙÔ+ׯsæÙg(’”ßûõÿëíö>û—>#Ÿøái7…ësx½_yù,ç޼ȧŸý0Ož:!&Ë´ÝíÊï¿ð"Õ ä'Ÿ}Vs[ò7ÎóÍ øÌcòÌñã,M³8="a7ÓÆ·0óà¹Ô«.¾+zdQD‘¤e*:9ÍòÄ6–7èßjËb¼­7º[²ÿÌ£Öû$m·UË‚$kSô¶j!Æñµ¨øiN­T<”­<•DU#/Òs´Wq%O‡Äµ’Å]uóBŒî–¨*EiEö”Òw-ƒ=¯dO=pWkEßòNÄø>ôõãFžNÔ-?Ü‘zÐÕ¤pØN]vb‡ ÖB)–ˆD”ÑÍ•^’Êø «ˆbŒËN'“/¿|Mí÷^æÒ­•{†¼ßȽր|;ր܋xžÜeNéݰÜÍ@ÊG¸3‹É{9r‡èn£z‡óô®§÷1žï¼Û¶w¥V7–ÖV‡áÐå-ò3í=cWè~{W1t'6#ÒeÅ ¶¤$”6G±e”bYwe÷»¾ì”„´Ì -Å$¢ØÆž}orÕ0ƒ•]B Ñ\QDĈzO[É «¯È‡qå/•*zB™— ;Å\çeÂØp¦½%›Ã×ôòÓ1£/µp ÿ­š»÷ê ÖïÐnJDŽ#2 xRä»"D¦"ˆƒê¼Zu\ÐŽ–öê[[(ª(FqŒ‡P€\q dÁ8ëÞIÊMÏQ&ÂÈ"£E³JÏo ^ÝMòÄвƒ¨dmƒ†}‰ìèiÜãÃß\–¼½Š GÐrUJ)0jq¡±oZÒv›îìy“ÊØ(Æóñ)SKoy›oQë#Ãf¹”IÌäè2õ`‰+·KÈ ¬vÙ¸6&Éç¶µoþ?tTæ~äQµnGôÓ«Z½X%¸\¡ÒŸlSl$ 5éOw§X©‚ò’ðÇÎ8iˆØÒèDГ'ëfï—\-±ÀU?yÇ•%ûSÃÉÂc¬Œ—Òêûˆ–Äá>:Õ§0^‚Æ[♲öçg8Êecüêu+Õ² ñs"7Û ;tIzD½Uin24!¬œŸØ"Ì|N¬ª.{mö¯Êïþ⺦o Ê_ù·v]™¨Ò~w?+ÿ釤wþ5-¾ò>†|xWzL™td€õ¼ÊV#ÄgiV'e``¿nwëô\#;éMÎ-‡LM6õÁÕ:²1°PÖ ¥ z£• Q‘Êøu­M]¤4)ëGÅ.?J§Õ$Ÿ?)E\WÊ@6.þeTŒß¥6ù Žß¦²ÿÙÁ 0^LÒâª'R¸8åÛÄ5x…¥o'Ç/vEôÒpÁצ3¶ª"O]ìrꦑƒW\JÓÁ¸Vº¨k¸yöª¬œ»zÇµÈæݵMyõ7ÿ@;}”}Ï>ÆÀÁiõÓËÑ8ÅÁâhkë’÷bzWf˜?wIâ]–©gÿúÏÓœ(ÙX›—Û¯^ÄfÂôCÇ #S©"IœRœ’gþ³3*Ž#ÝÍ-’vãºâøÞ†y/Æñ}q_ßA<ì®ñcí;ç囿ò?èþÿ$ûâ“rðg~ˆWþ»ÿ…ù?}@.¿üm¦OÓ3ÿ·Þ8Ï×^ÿsû<ö®6€Ó?ú#<õã?ÊæÒŠ|é7~“Ù‹—î6åénñTîÒy¹×´ò;ýŽïÖ×;±©ýÀu¦ÊN»Íäè(?FœP”4ªU~òÃÏðÏ¿øe~ï…øËyŽO>öˆ¸ŽÃ×ßxƒ/¾r޲,yNORæ)ËûÇ¥r|ByAºÙ•ív¦g¤â:Šk(¶Ü€TbФC®VÄui/¬ñÊמgmfNûÉ'*äq)¡ßÐÌq%јúfBIIîºtD¨ô{­,%+ B«¸ŽÐ«‰m©¡1äÆ V1f7Ê "¸Ž¡´«ŠykgDT1{N‰}+EKÁ& b7ÈãHf²&Ïî+¤/Ì 3úÃŒ-Ô0…Å/Sñ¤z¶{¾~õ¢°Då𨣃R*¡ËÏ}öaù±œÔ?zþ"ÿÛo½ÈÌâæ½²`½ÛüÑ{œçw²é¹GŸànÚúþ~o Ö{5"÷±@½_ÅVy‹áý†Vï÷ø½|ï~@àŽí÷W9y`„‰¡ãƒuƇ¾ç5Ü'ÃuúU©¥Ê°ºƒuÄ󱸢ÆÝkDE1(Žh‘£i‚Ÿ¯K-¿N¥˜¥’ÏRÍg‰ŠYjù%ùšù›PÄ8ÅŽDÅa±L/I^xPäTòYübIüb¿X"È–Ò%ül Ïlã;] ¤…'-Ù&-¼¢%nÙuñË »SnRÉÈhÒ.?*m÷!6ƒGe˜‡h® áÄN_Slk4¤‚aÇ4Ä‘ƒBdšÒ’ÂiRJNl^£í΋5B(ÈX»@iÏb휨®¢º„Õ-„Ôpqœ@ÇCŒƒc žø¤î4›rÜö¤HÏbóE(#oˆl¸IZë#ÝÉ‘íYÑtS¯ùÃ' œŠƒ;5,E¦äAÔ³,¾ŠÓYÇöFÜ~ Äj(RXñ·¯®Qæ9^Ô--cé4ûðûúÑ4Å©ôKsr„¾}ýˆgªÜfjÿ2Í%z—_ [|…ñ‡†>¹_œ¥#ÔÒRÒ#ì+ñŽu±c…Ì. £–äh,Ý=ºÇz'{RL¨õg † Cn"#~Œ+¥Üî…,¦Ó kްæaáɇâIN¥Ã.öÉ@øWȪŸõƇi7?L¯~F¨*ÕÊ·%»¿ô öjzÇÃï¹4Oˆd£†S;G¿^‘©î"GÓ –:]þË|®’Êg½ƒüW›ãüÄRFM{ˆ·[¯!«b±ºÍª{‹[c‹¼z´Ã‘6˵BÆ6}¹\eüv‹³áœü«ê*¿{h…èàšüršÑoJVûÑJŸ˜GR†Hró&vxŸ8ÇOáu7Ð…ô–0ž0Rͨx9ŠÐ+ [tèm¬ Ç‘þFFöSoôûkøûJqYºUK^5¤©+qâR8>e­Bì×qtœZ_&œ\À¸…?O>¾€ô\‘¨…S:Hé‘¶ö¯œ’¬=Ewí4ñÒiIk.eQÅlõÉ€,1ÒêPï¤4z)ÍvJ_Û²V)å‹GrÎN«TcáÉË.Ÿù¦0¾\’ÓÁurÄ74j3› ÿÓÿú±½ä4 ÞuýÚK†è¬m²üÚ%ºsËTü¤Ó¿Qà "×Tp|—ч:ºácûÙ÷ÈiúF‡Gè¶·¹øù¯³vc†•«×Yº|Sʼ ÞÚæÒW¿%¥ò8¡³º&ñf‹ÎâG>ü!’6K¯~ øá…!“O?†ã¹,}çu’ÍÖýá‡@¶¹Íê·^#ßéH8Ødê3ÏÒú(ñòÉÚ&íÕ5úedß­ö6¶‰Í24/Þ7~¼zÏ´¦Cg’ýÜÏ2}ü W®qöó_`æÂEîsìï«ï—íê^ús/¿÷\?ô}¦àÑÇ“¾vŠÌ¯a6;b?¢ks³¼~ñõ°Â§šzŸlµ·™Y]¢2:(õ©qP¥³³#333Œì›fd|L^úòWÙÞÜÀ|~ü!? _y‘îòš;r˜ó—¯Òcýðaý{óSòïmR°¥ J^Z5…%< ㉔ŠÓ]W)²]ZÚï¿z½n·Eæ¨Ú·s'w+(kš}Ïw•H^Àâ¾Eu·Û¨1{,òƒ÷ù–Di4€† E‹~7T#‚ÑRÍžþ†b˽E¢ –avd¿:žPTG´cN2üÀSý(ñç~òÚmÄS1M`ÄÑÄtHdƒC×YÔDÖ1  =¥uŽ Ú•¼|E•Ђ]ââ½ní)>‰ˆc#jŒàŠŠ#Já²åÐ^I–^Ç–‹j ¥dšÜ­‘;Uœ^Š»³A¨Lè¨T‘á ¼ÌU¿·Há×è L¨`qË„¢6¬éHN4{ÿ¶M=ƒ¸»q» FÕä9^¥BmzŠÎü"=§-~£Š£AÿZBãT=úù¸Ö}ˆ8nÑZ|p¤Gán°òûÿ\¶¯ßÒÉ'N0þÄA¼Rt¤œ'O_·xAAÔÌt±â±z¸%ªªB)†jÛèè‚·§Tž©ØATŒ¿««bs8ô(øCXñ´¬=-jFÙt -}jc^›Î?bmqŸ¶ÛL5fT.œ‘(z@ËJLÙ0Èô% ¹¦Ãù<ýy›þrKM²ÉùUo™ÏÙ.Ÿ,ëߨ>ȉ ~“0éQDýtŽSC,Õ–xißkt½kL2y»Á¾µTOÎ4w¶øµC-þÉñm†JGéÚ?7WÑc[¬>Ýâ;ƒMÚÝ1<¯@w Nƒç©]kÁ¹— Û7±›1”eBÍÏ9ÐHiU"6Ö:n“¢X¥–8ZÓ*'OÁwç‰×–¸õéΙ&EáQš„é‹V“ë™Ä…UWÁ4}jõq2¬&ù&þdOtÿ†ºÙù‘[ª›>åõÐÄÝ8ˆ›Ö´Øœ€•Çë)·ÆQâfÊÑé–Š_ÝÂï¿ÉÚd ' ^t±^pú&úñs® ¯[¥×£cK|cqв$Œªìlô NôûB­wZ7÷¾-ÆP–%‹—¯³zë6^%Òñ“G˜zèÑaõÜq#Éz±ÖšýÔ†úQU¡@ó4ckn -w3ˆã.ñNWwV¿!Æq(‹’­¹Eu|qí›cêÁãÔ†úiŒ`øÑY^åÚ‰Ç~ñ¯±ÿ£O³uc†w–¨¾~(ˆ1¨µÌüþuéù—åô/ÿ5Ý÷c'àæï~žµ×/q[»zæðI>5ùW™ =÷Ïþ%;oì‰è}ãÇ]báݦksd˜c?ÆÑÇÓÆÀ/ÿ»?᯽@ñîJÑw3öÂݳPêô¸{&LáXƒ¢ `lxXO1<4„ÙŽµH3YÜX£VoèÔðnàÓíö(“ŒŸ~˜é‘qÂÀg»»£¯^½Hsjœ‘ûtæÖ µjÇu´Z«30C±wrî×+{?;7ïWpé~£ïÕ¹‡>Þ UÚ|çØX…íNÌéñ@¦jº§ËÅ[”™JkAÄ "¥"±ØŽQ ÛÛ„™‚Œ*±““;¥lDq†“Ž:ß7‡,îîç½CFJ5޾G§UÒ( öh£~`LDI×ÞE°Že±w’”7©é˨qÔÔ›’{Ãܾœ³smœòÒ*ÆyRl6NÏY ©^FQ2é˜-Ï–8šQÕãÔõ06Û"³¯aíü®,º:°» í.LÆ`³[ü)‚ç\)ÈKè2(]™¤—t)Š«˜r]B[P2JÛ)pèáøvC­[é߇ ,Î ¢8N‡25äW^Á럆FSKÑ7J]X¡xí+8'qƦ°¢(]JSbÊ’ RA¦&(Ë–bÔGÊ ÇX’Ô`Ɖz£ôÊ”'?MÚËXùׇηéûÌ-Ñg>É–ÉQ«8’¡+·Hçñ½7J@a²³ÅÄz[1FT×Íq$DUÄ]G4§p‡(½IT ©w·½ QïUZ““xà9Œm„·ÁÌJÝݦ¿ïw°ÅÝå@Òë\›¤šO‘9è;4O¾)¾7lRK: Ë –§Ð>ÇÈu,ÿ]ã¼”ÃÕ!~zöCiD0¶LT(Ý‘SdÑÛKZ,r­yŽdøI@ukPÏ G—vØ×ŽùÂØ¿ýx—FR¦S—ÿüVŸüÂ|?úœïϸø³÷žA–%×}çïä5ÏÛòÞ´·Ónü f0C$ dˆ+†H®$RZî®b¥Ø Vú 1´¤6"cIQdˆIaï§½¯îêîêòî½zþÚÌýPÁÓã@Pĉxu_ÝwÓÜÌüçÉcþªÈÜÄÅZ–°Ö–ñM§9+ÝK½8Ñ~Z+1OV­à…Šz˜¥×õº­ˆª{ègW‰b›Tvlç ë Q ŽÈ]2Q?î®í˜Ö“TWÅés š¡tVLlc§$Ý5–·TxêàÇÊÍóÁ“=ì8§èZ ˆƒ¶„:Æu ‘p7ãfLÈñ™&¿ûðÌ^GÍ÷òã›È$ò®'îv[.ÐÝ{˜äÔ—h>òû>v?埽€ÃÆÂAûZÂØ:,f°iÊÐP‚ˆ³rª×Ár‰#CÒ Ìàà×ñÙ¨¿ âÐÙ]â嬄8©€ùרf/‹çêf£ö$®[•Ré¸î‚©u< ʾé–Õoï±·™üp(z×7LÜÈ-EÉ›#_¯“‰Z$Ä3Y«!Ž¥IÅI®Çð«ö_Wkì“þÏĸîßÉ¥y2­€zyü8žxÄÑ"nÐ!µ‘dhuÓ)0ZÙàÞ…SðþÛd[~ý`•ÙlÀÿ:U0¿6Ý/=a’E7oN$³òB§g£Lw£×ı–®lÅ$=Oü硜h“2{d§Pg}:…p°T•$ Ö; *'W(ýL?÷lI›ë_EŒ'nî 9߆äN“^OIþK§Iè˜Ìè"vYÇ›„ WL­M×ɤDҎ¤\G“ Sw<9¾ú5ƒËb\¤]T¢ÍãΓ½²]*½Û ÂAS¾4.‘kð3Q'K«] ðì6îT)“ßöˆZ¼jB+@tã8B6s½R— [›Eóáñ‹«¼ÕøÑZ¯ÒZ¯ÊúÌ<³'Î1vx#÷ïí&ìtˆuLÝ©un(/auü0o ~´–V¸þÈÓæÐ/II š IDATÿ<ãﺗêôµ·?¢f›ÅGŸ¥5¿Ä¶Ÿû¥][Yyô9V6̸£ohHús]4¸ŠÑæí>{uŒ2ÆØŽ#CÛ¶qûšt>gžüâ—¹ð̳ҨV_Ï)îë©÷›eB%ìK˜Ð_®ŒÝ[¶Ê¾í;kYb2 ‚Ñ^sîù£œ¹xAÆM±K:µ&qcŒÁr¬Í3Ÿ„âòü¬!•”wß÷cO>ò˜lÛ±l6k.OM‰¶-“/•ØXÿ^¿‹†Ç†±—••ucŸî®²œ<‘F»”ŠÄƒ\;qâØ,®Wäêâål–ý“,W«æÑ“§%ÖšGOžääô4½ç>õàƒ|õ©§9vù2J)sÇî]ø ÃÈX®%:¥ÌÅ+óLúés’Òc'Ø16Ʊ çñ<ÓçΙñ‘9´?3³³Ü¤¯Ñ6³g/Iôo¥ÔÓÇÜÔ53ëºlíê•rW7­NìušRÎçL~mUÚí6åVÚ¬Ì/J²T0N./i'—%n·pŒA'Ft,&ŒP"زi 1"lf £6ãÓ7Ýœ•€ŒqL#^§ÍŒW¦âkÃlïò6ÉF4|lË3žÎŠ£2ìvŒek¹¸bsü¼Oc½mvo͈«33W“Ïžcvyƒ7±_æÖ½W›k?Lè6?‘¿•’M(þу ]šÆlZâc­I»3µ€ÿõëlt"¸{¸—÷ŽõbZ!á­ ÖvdQñàæhH´5Hœ)0)š‘†&H„T•ÁÖ6ÉÌ MÆ©­`5« ,”Žp6Vˆu¶`€ʹa11ßË.qã˜R§òÄÅÁW´jRÄ$Àv SÄv°U€° Û3ß|Ž¥£³´«!–íb'ЦMôi;nǧ;0 ŽŽpâì>l{'–ÚB¬¯Æ1f…XiüâÚvÁRA‡t§‰ÁÈ&KˆcmÖ´e؈KNQ5t´q“œlrTœ>Ú’A4X&Äf‘É÷bš-ìpÐ`9¨dqU’‚7MÎr©öXDÅ4rþd>Ä ìÀêïAvoÝäI¬žD_öaäTzÏ¢•…hÁè Ll‘LŒÒ5¸‡8WÀ 01J,6VªÌ?3E5þ7å^ñ~¼Ê>VÿøëøÍi²8·hœ>›|rÙܡްÄGåƒèâ-` V*AG\–³c(åQOßbcÂMއæÕ kÏ<É|·B«Ì=youålò€À$ýãۚ؋=0NfàIÂÒ3HkƒtÿÓØV‘Ò•! z•„åá*Wblm•àO”ÅïÚ3ÌÇuþ™7ÎÇjEެ´é8ML"I­¼/×G;^Ä Ú„&`U\:•AŠÍý•kŒtœé©ñ™1/´Ù[OóoÏòàZš|˜a:éò‡Ýýœ¶s¼ïÛ9r‘C²¼J_×ý+x±ÍÅö0–•k éß×…ãF,_ÚM®‘p/Û)6V3DŸmS:3|Û ºº„æ)ÐÛÀ$Àz“iv¶¼àâÍ^&Ù[&·-‹›º² •ÃJ[³VÓXÙ˜ùñÍTŒKkÏ*Ú\T$ŒÁ„ö¨‡?j˜Ýó'n{ß&7?ÀÈÙqv~ëV"Û`ŒMœˆ™|n晬Ž~•üØçƒã$I¹6«RäøÐ2Å®˜ú_†|çÊÊÛ¾Î5×*œýëGY8;Eº”§w÷v&vó×ãïÜÁsyÅCǯ õ"3ËäÌ_|‘D1ÏãqúO>ÿ–=»~y†£ÿ÷>}€‹É$ïþùOsÿÇ?FØépíÌÙ¿90H¤ÒÜõá²ï¾{©.-ñåÿø{T—~Ô? 7A­^ãüµ+ Ýz å½Û¹ðÈÓœûÖ㛸žJ³kxb£1 ”eaÛŠƒ†¸Ù,·îÞAÊqyö‰'iµZ ZÇ A*ÉõËÓ¬ÌÏ¿Xn©\bßá}ضC½áÅ£ J„T6ËÈÎØ™4ÇžxêÅß|ã©gH¹.ûÇÇØ3>ÎÅÙy–*6šM>óÐC|êø¹÷¼‹³×føò“OkÍ;nÙ6/Ž( lÛ±•g_8NzÎá½·ÝÊÞÛ¹p}†v»çy„aˆeY¨.™/•¥©–¦fÈóÄQ„×lcöîáÞ¼À¡é·QøìÞ¶ÀZqLX­³¾º†½w‘å³-Å"q³É "BŒŒ6h×!l?@DŒ!Š"\ÛF¥Í Ê/Áx›)îQq„ª­Óè¤y¢“Fívt·‰"Ám.o¤˜,6i>¯—í}IvötØš1 Jt9rÌÌWøõßúâßÙùðäo©XJøÓ§Vøêñu&{’Œu¥øú©5¼ ƶäÅ>J»46~3XH“ضƒdÞ%(BÅ¡àg#ØZ¸\XåX÷<ƒIÜNƒã¥+Ì–5cë. Þð™;ºJ{®I"ï"Fˆœ*˜%ð]–O*AH·maÄÐJÙ8[Q²se”8¼@?¶câD ×kãþ¦Û`™cmzƒZ7Òèù’£!4UPÍ9A×X$c•MÅêÇ79” ±ðpØÀ2-b“ÀioàDíMk’•ÄÉïÇJŒàE‹Hx‰ŠªÉÓž¿Œµ4…Õ®"­6acS‚‰C˜\7F-/ž&Ž$·ïE¹#\´ê@ÄÒ)òG„ò¡³8× b ”Fôy6ÕAÜÅ_C9BU"l»,LŸ£½|‘جU^Z¨4g‰<…² Ã[Z,\I¡µC®XÀM¥è¿ï0©¾ÍνÄíl`§c*ç§Y?qž°Ý&\maûŸ&WÊÑwg€ºÁV›Í˜¢\± '£ ¸L¢xœ{šnÕÂ<Ò¾O:¼Š›ÑØ&Æd5’±Xq…«ù½¹ŽÒüv{˜ÿ%,ª65Ç'ÊÓ.N€íàt ¡nqM6$M=Í€CWIÛ <4jø÷ÛZ<ÓÝὋe~çô(ÛiŽç\>—Ïñh¦„XÂ^ߣ7'ô'Zô—ÖIÙ&²hÉMo=1(Kk ü0Mú×c²W-Âÿ\&š½;‘LA¥Ù๯Ì3yk‚]?»‹hišöô9ìð#ÀÏ¡9Ö®ËÜò+U&ÇÇIòLŽ ±æìñ=qbÓµ*ŸÇëx ½Cœ}áÕµõËã¡¶Qåü G™(wãõú¦Ÿ1  –m½ø› 9{m†Éá!»Ë|àŽÛøìw¡¹É6NE|îáGhvÚìå#wßÍ­5÷<@ʱéhÍp_'2IN\¸HO_‰#·aûÖ­œ8uй…>óùÏ„á)/Up[ß›Û×®^err’þAâ8¤ê{ è$È(ÅøØ(KëëDžGÉ9ê,·ìÝO.—#ª×Ù QU4–1X —Ð@2ŒˆŸ+óó욘À²,t#Ú $á‚ H§0žõ 6üK—R¡˜‰pœ˜Þt€%ºçðÔ‚°Ô}EÃMÚ¤hEË Íá}£üïÿA>óµçY\­ÿ›¯òF3`½Ñüo&}ïë!Ry=ÇcoE¬·ìžz'æ7¿6 À¹…ïßìÞ2À¡l´<†zrüóOÝN>íÅšH¢Xƒ@&VRÕMžèºL>²åð|‚åä,W r•´¸SH„ÄFÖmƒèMkÀÕ!Ãénˆc‘¤63cIð{ÉWÒ=äÊ6hÚ䢈Ýa…Ø%´,´•Ä ¨(À [b%PêFƒ…ÈëÐ*âˆ"e¥¥½PaýÌ5”ma'¼µ&óß:)Ú°lEª;ƒÖFE¤/cGÉ !Zy(K°‚ƒXB$"‘leHÏ’:=iÇ3¢ô,JG¸Æ#ÒRI:*O€‹èPÙ iVÜð+u0a ¡`t¢(Nvvb‡„¦C^¥'hS³¥®„DgE$ Œ D c…XÊFª-âÕ&º·GdÿÝXÍÚÌ!jYŸãAbéî¶ä¶Gðœg µ‹AD÷,AÏNØMò+ÿkqi§"¦²ßûÒ³<~ê/uë4? üØT0dõÜWzŒ[~á“ìþø‡xáwÿø¥ÊÇÇWHï{ùøq Ý]|׃Üñ¡:Où«o½¹G@‰B߈5±l›¡íÛÈ‹ŒïÝ-Ã;vl²w{¾¼ðõ¿æìSO¿‘öš7Xï7›ëì?Þh–¡M‚NÏ{ñï`£A°Ñxñ:å&Èf2´£@be°-ÅÂÊO<ÁèÈ0éRAå’ æ}·–ÞR‘£#º„¾1&½0à ?ÁD?½÷ùðÝwqrú Ç/]–½ã$“ ñ£ 93w]‡°gÇv.OOÓlµdí†Uåßù>lµ¹2=MWw·¤’Œ1R|ò¶+×%mÛRY]§gbɤ9þv„ûŒ±k¬›ý;ûMÐŒ¤V87¿BLj¥Lβˆ¯¬Ó¹^ý@ÞÄ“¥¹+}›ô²#÷_Þ‰Ëj>0ç…Tè 3å˜oÞb$b†•l$Ïä4M±Œ%Boš‚ŠØ;Z"h)9ß\4ç -Ù²˜e šRïY1â¹;@)ceÒ„*OcnMâv±-Cl¤vvÚ¬_ºˆã¸$¬ÞBUê§—ÁÞÌ6i¥‘ìD¯±JD ÒU6-íÐ\moˆ-W9Ò~pŒ§‡ëÆ· ?s¹"•‹ótÖ6LdiL-†Y‰2Æ>×B"ˆ”QbIJ‰ãM‚¾šš0m{xS ‹Wüs(ã“Ò–ˆ¡ÄWý& rA‡â:-“0UÄï ¤Pâ걂D–•7u¤'òïZ)ñ¯öš÷-ç9–Îò;=ަr8ÀÚ59ÒišaßG‡B`DtlL€ƒ± Mè&¾KmiÅuRzƒÒt?á\–«÷Í|TÑSÈ’ýRâ]RimÒ“`ÞßËÌ@‚„çÃî.f ËdÍš-ÇòDn,F}ÂH´ê;˜Ì"i¯nîü¯†°Tb`5A'Ó¢U0òøš‚¯ÌÞ3 /c¨Ž NZ$¦Ø†3Jr!ìXòŒ“DÖÚ Ú5Ç, ”BMÜH‹¶•q §¥kçS™úSŸú4Î?aa¸.=Oÿ ³•US8-ï½´Óû/üùw.áÝܦòmÃXN\^4§¯,ÉGîÝmÞsd¿ôÁ[åÀÖ~¾ùüesqvíe×È·?.}õ[tïÜ*Ãwaá…“fáÙco~m¸øü ²ýÖ#ìǽæôcOÐüþx‹WÄn6æÑ€6˶é›7[ÜÂÄþ}”ûû¤º²jfÏ_àì“OÑn4Y›Ÿ-n0¹‰v¿Ò»%¬|3D„ðêdŠ7Sö[FD8¿¶ÂxcC²™ŒI: jµßyþY’é{öï#ÓÓ…×jcZ³²²"sK‹@Ç›,£©LÚŒ öI­R5‹3³ßW×Éí“Rê*™³ç®ˆ6bÛ&Ž5Z²ÅÉtšjeßëüÿþóçÎsd×3Xȳg|Œ©¹9íÎ÷µåêÒ’ùÂãOðá»ïâ÷ßÇÓgÏrüÒeöŒâ–KØÉï½ûùÒCqôÔ)î¹õV³mrBŽŸ>s3„—?4¦®^½&[¶m3ƒG‘‰âPa`,EË–áîS¿>#F‹¡ÉqsáÙ¸taJ¶l™4¡Öb´ÆˆB[b”Ö’Ô±ÑJЉ$³ s’RŠñ¡aÂ0Ü i·Eù¾‘L+“&ju 6ôv%MµÑdm¹ÅzËf±šä¶-Е‰d²Ø2ŸÜJÌÔFZŽ7ûLo¡Žñ[’0ž©…>±éx¡ùGŸ¸‡Õôåç^mc3Ù§n6[Ü áOäy×­“|ìxô±‹ü_¿û0Gîë\Ì?þWß¡Þ „ðÁ­#|j L8פsoLëòþK9šnı1ßÐr¹8rj0A¹R ¤ž„ËÝ&‘+‚L èX°PÄV‹SÅΗ×Hl‰3.ÉØÅ· UK¸Þ{Û—¿E_åkø¡Ãü\‘j«Ÿ.¬UÇc*M¢Z„(ˆCÐcúg&ÈD½Ê%Ý] ïÁƒØiÅ¥oOqí…%Bqp‚ìò,x>Ù­#”l¡«,$.]EŸ\dyõ ¤bÇJÐýž ã}Ô½ÜKM"/`C’¤Ü)Ý‘;BË Öbÿ2:®‘Ô!!PE"Š]ƨoà&b60.‰ÄþÍTâÉ äÇq:‹¨Ê%|WRùÐÂÑ VU‹e\aEú˜žQìñÃÑ\ ÓX#¶–RX7ÜŬÀÃÌ<ä û)d*ìÚ>E6Ù"²6ÍéÛC…„ kÝásÖ]¤mÕQh"+µ„‰\ÌU"mu貈ׇ‘˜ÍÜ­“™E'—°‚^¡Îâá3Xçö£ÖòÄQ ¿÷nal©R ׎(J‰K”Ü%âŽEPqˆ)l'&•ô±MÐ#žE5íòWi—G/4ø«ê míñ‹Q?¿÷P ¢® šíÇ+ŽcÖcÃB'K»Õ! @K_ÐüõÉ?ã+Ÿ[Àü­y±6üå£gyäÄUþánåï=°Ÿñþ_vŠGO^%Œ¾ç–¤,…pQ/q3y«¥>;Ïñ?üsÞóþ5ûþ㬽HÐl½må5*UžøÂyç§>ÉýŸüßþÌŸÓi4Þ×/ gt„|¹‹¡í[Ùzð‰tšù©KL?ÉüåËÌ]œ"ôýŸ€ï›54‰bËè©d×±Éó¬66ð€}{ÈçòtêM´ç±²¼Â±Ó§_´Jõöõnæzqlâ8fuq¯ó=¡w —áÚm3ÇO±º¼tò®ë²ûÐ&vìà‘¯~ÊÊêÕ- C¾öÄÓ|à®;èçÁCùÆs/àý@JåkKK|ùɧØ;1ÎþÉI®,.Qó}úµÁ3†d*Éž­[8{å ­½{Ù³s'gÎ_仩€_tÚmŽ>ÿwÝs7ù|?ò }ßĬ·4Û Ù,Žå`ò$‹ì1ÉÃCC„µ!ÆRhePFÈ9uËÂ÷ò¹<3×gPJ1Ú?@Çh­‘(‚fU,àæs,-¯Qm´%XJ#í Wm¾YË0>šáα:…DÈÁ¾c¹6(OS²'‰c6ãNLÏ®0¿Rãì•¿[®‹ð¯nh'/ýü )E^áúÕî=®TÂ+½ÜÿäÌ=ò*^Ç÷¯dvz­ë—ûž×QÖkÕC^­of7øÖSüþ—ñ¥Ç/ÈJ¹ÊØÇËk-¹ð| ßd$•’Ûz "¡FíNÉú„–¯w¯Èm9µ¥Í…¡g¶%d¶×ßFZŽ+휖lœ¡JšfÚ;Úd M*ˆ4A‰Hh$ÛŽd¾²ÚK~)ÍŽu‘òJZüJL«åwšrésS²ðÈ´„í:Aà6< =sç¨ð³{%º£G&Ü+ãï;L×{ö1xëv»ôß¹•êRSN}í"‹+t¼@œ[»$ÕƒØsëârîX—$.×ézLFÇÆÈ–JÄA€èXD)07òu:¶øJIÚqH¥Óc(ärb+%Æh1FŒç‹$]QÅ~£-:ŒÅ¶EDŒè8–Ћ¤Ö0,4’*GÊé@ŠÉ˜²ˆ1±hlbåŠKlÚìß6,Ïž[–ÿô…§ä&ö‚73·nfm{­9ðZ{a¹‰ÿ½j¾«€¼EÞ¢ó  ê oG»˜[mpöê*•úæéÇÕM’y‹ýÓQivBô[þç[ö’w[bžþ*O]凋=‚‹Æs’¢IcãcTDÒ‹èm¤Ù>Ó…åÄøé@ÀÁC[‰V…'áNòîz‹Cë-žOuQÎTe[â$û²œêf.•#œñ¡œBÿòA²Ÿ:Bêþ=$ß³‡ñwÞ®C;Þ1Nï®Qò}ÝU‚¤eÓnx,œ^æ¹?=ÎúÔé­yº>4&ÉEèM#ÃeÒÏ/ žŸÅ›Y!9:w ¢RŠü3Hu“4[±fª$–ÏŸŠ=Ÿ½¼«Iée´"mØÐuÚÒDâˆLn=ù7×.CœÃJ'1 »Ï%‘ôQ^Õh€Iã&öa'Fñº»‰ºJÈâ3Ä‹ÏÐ*¸\Û=!a)Ç–Õ ©Œ»;q€Ž®R‹¦°ÊXã·ÑÝmKWkù3Q죻qFûQh,¯ƒMâvÝ÷ v÷NŽ ?Ζòš‹ßpBP‚u‹`ÅÝÁ_Oà¯Ù¸5D­[묷(·Ö²d‘µHɪB`Иˆ ¨)Úׄ¿j‰^NÐuº›Þ….®`‘îÎÝ­UºÚ«t·Wén¯ (£7yc³iµ H'Z¤Ò>¢4DЍíú._N§ønÃç;S´š+Ümøm3ʧš‚A³˜Ì³R'* Kg™n”¹Ü˜§·ñħ7¬ò`õ49u•o µøßni‹âW®tó{Ù[OóGÝ£üvÏÛ•¡Ç'ëîn4ަ vò;h'¢Y´¸°/ÍÒK­Ë&LÚDF³±³FÜs¢ü}ƒZÀ©d9S?¿µÃñÛ+¼0±ÌR¹ÃÆ–$)>Ÿ¤rOLXT`cù¿X58úàUJ‹“W߇¶ŸQŸ«òqŒDEC®16åÓ­ôH’¢vЮB² g=ÀªEt|ð|ÁÑ‚d„¥,&åbEéD‘Ö†&|ºj|õ×8·µM1îgŸI‘ìYÁ=z+=Õ½üáúoqôÜ¿¾ýÿ àæyrýñ˵Ûc®,V97³B1›b÷x/ï<8IÇYZopíÜe^øügöØit½=øqƒ; h¶àÜ\–ꥫt*ßÈ[Šõµu†¶ocpr’µùªK˯úy™òÝd’‰}{ùé_úEöÜ}c{wÓܨQ[]“c}›ïüÙ_ÈÚÜ=ó {¶o§¯»›f»EOO7+««^±ŸÖ×Èe2 twÑ_,²°^ùAW¬evu•f§Ãd_ÊR`Y4ãˆN­A>›af~^º»»)òLM_~åô×xWÕj•¡áaÒé4Q„>¹L–f«É̵z{z( $Šy×eêÌ9R‰C££˜8Æ„áwÉÏ7ûSk$ŽX©TÈf²¬¬­³´²Bow×f:þñ2b ¦ÝA·«$V”1û¶¦¨4 £BŸå*$RI¶tkëF\Ilò†²é`)ÃôlUzî ÇÎϾÕcùÇaOüªßà­ÉãþJ¾c7#oÈ«ù˜þ¨x@nf1}½< ox{¼F¶dË»ÿá}é´ 7 ØqËq¸²ºn qß™ÉKg%§[ر–DT4ÉPá'[Ↄ•$ÉÐ¥TO‘Œ,° ~"Är´±´P¬»BÂ%‘ÍGfl®Ú¬Ú9«@&‘”kn7ž¤p”±ò ܽ—Ò»ÌÀÈìêb¸¯‡ÁÞnrŽƒåGÆ‘jgݬ{ëÒ1-Ö§+ÿ³³L}ã2©‚kôKß¾^Š Gœå¶1ß¾ˆó×çq*¾H;6&6¢·õÒþ¹ƒ&®{’ÿâdñ ƒ¦àW¤ØY¤) ÖdÀÉí’r„b|‰:h#xhÓ “Ê£Ê#˜¾QcM¸ ±2v_Fì¡vÑA-#‹¨ZUw; u‹‘¸$AW g4O1ßgÉg˾y²uYÊAÀ/9#üËVŠÛ;kÆ6—Š=ÒìÝCw²‡f¨å|­Îb»Jd…¤è˜mÍEÙã_¥“^åŸÜàßíhrh#Ã:>Âÿ4ŸåtºÄçÊ]|¡8HÖh>Z¯òÉ åN$ÍX?"tŒv"©uÙ\Oš…‘”D®…ŸÐTóÓI²TjšvÁ“gzàLNvƒÜ–mç1 )æk<7yÚÝ‚‰8Í b\j{cÓ¿‰RŠ@»ø–Åü˜¢–OH»PÁ$ÛfË wbØ&Æù:¨Ç®Ôƒˆ¼ŸØÍ‰Ýjàž;‡,{h±M:iI~¡M~ÉÃe‚„Ÿ‰s.¤cǶÄm›zh›'»¯Êõ V¢«žÅnY›`÷ʈIÆ ³Ë¦ê-‹uê ÉåmüþÜÿKC×ùùÑ_ è9];e|íßÌzù#Ǧg?uM®-UÌGß±GîÞ7ÆåkK,­n £èmÇöÊ«ç§(Mޱïç>NnhÀøÍ–x•A%äûhöâEzGG™Ø¿ÚÚº©­®½&~¸É$#;w0²s·¿ÿ§¸å÷#"„¾ÏÅgŸãÉ/}…S?*«³sðÚ¼òÞã«aÿkõÇ[ÁòJqo ÈËÕkËаYÙ¨â›XºËe”e™³S%Žcn;p€z«IÇ$\×\œžf}3h[“J¥Ÿœ”t* Ǭ­¬ÈÔ©ÓÆ¿ìîº.üô¤³i¾ú¹¯0uê·¼Åä³^8uFjæM÷k†RowØ2<Äd?~rqvî¥7~_Ö×emcÃØ®Kw¹Äõ+Wå¡§Ÿfç–-dÓ)écc¦Ñh~× r3ïîûÆŠïû’ÉdLOo(Ë"Œ£D‰ë¸æü… ’Ëç²=eüNÇ}úYÉ¤Ó ŽŽ¢µEߥAGDŒmŒÔku‚8fpp¹…:ý=½ÄZïÁŒç!‰´KÛNˆÎä™ìµh4SïÄRÈXìÝR4ýÅ„^›N’N¹FG ƒØbÙÿä7¿,_}äÌÝ/¿lß¼Ì=?v< ¯¦€ÀÏdòVœ‚¼‘LX7“½âfê(oÞÈiÎÛÁÿCrú‘ )v»þtQ*»j„u!5_$—ÎQ¾='ë“>í¤à’–”ñ@ié«ضX$©•ÙˆÈöÀб#‹R5C¶“@l«;ËìZ.É–F’L˜¥õÉ5ÕEKȵ,œ(!¹8K9¶§ºLeÍLçHk%ÍN‹0òõ Âr¸B-®ÉŠ¿ÎB£%-i±:Ueã|ƒÄPšþGÈí* Ëuüç®JøóXW+8=œ½#µZÈá^ñß½øü*îWΊ¶,Ú¥ n°J®¹*­8Ë2cèÔ$ŽcI6ºL2^GkC ¬¥JâôoCå‹›Ù0ŒF[ì®$d‰›­ÿŸ½÷³ì¸ü~禗c÷ëÜÓ“f€à IQ¤DÉ T´ÂÚ Ÿ½¶¾µVi×^­¥Oq-ïzeÉ’µ’¼%Š9”˜$209õôLçør¸©Žÿx3€3%±ú{_w¿{oÝSuªêäs`q³2Õnâ¹;ÅŠwàE°/!¹í6o™¥â.J{œÜ²…z—›>Áp'–}cŒbtg(©\¡¡,›÷VdlȦ¤mfž ¥¾‘*Ftã$±•$™Oô-µu´x@Œ;FzöÓìžš%5Pìg³±ED±…êÝ :ûzøS=émíÒÛÜ¡·¹Ko[¯%xU lúAyHß­ ¨Š\Èb©[þ#1bÅX¨h"&é' ´]©9=×’´¨Q'"•ôñÜÏ ÄuÔ&t$Õt™3žüéD’Tb>e-Ë™Æ,£Ýžü^4ÆÏEÊœKíg)RÈIA„ÕnÄt#jcg âu¸k}š‘`FþrÛ¿zM‡¹$ܳšå7ŽU¸¾‘àÁBžÿ4¸™¯¤*¼»Qå{këìlw‘Àűx½Æ ©8ÌO¥de4Ir‰œHÚŸ¹Jn" ÛvdÓBžm‹É>Q¢5눭qì‡çhV†Ú„íXœ•3X[ Ø…q`Cäà»6Û¡—1¡ÅЊCaÃ" ›V]¹ñX–‘t€«`Ío3'_êNƒ9ÖOÓ+ß/jÝ€Ú5du {~•<žd|—(™ÀI¹$ÅЕ0R¢È„–­ó…ƒ'Xؼ!«HÖN“Œ ®¦ÈT"‰ð{Ž$ÏøüóÏÉ_þ"ïùnn¸•?<ûŸ™ëÎñþ‰âŽÁ·Ò‹»œnŸâ›•~,¬5yìðy2IOÆóÜzícyfWê´{Á›N?Z‹ËTÏÌ0¸g'›ï½ƒ‘×J~r‚îFÞFír1¯‰~„=ŸÕÙYvß|M{v3ýÂ! ^’uéÒC–E±R¡<2ÂÍïývößõV®¹õT•³‡óø'>Å©§ŸáÄOôc ä*q&¯“fÊkœ«¡ò:ð,¯ƒ_øºþ—76höº¼v¿Øžƒí:<òIJyr’r¡ˆëz”Ë%Žœ8ÁÑ'^ÖÏÎ=»™šÚ$’ôpÒifOŸ‘3G_º§4Xâý?ñý,Î-òwŸø,ApÝî] ‹=}F6jõ«Ò¦÷³xYŒ Wè„G§g.eÄz¥1®5œœ›eËø8“£Ãrèä)¦gç¸íÀ RÈåâ˜T*)§ÎL½h¹š,fR¯Õ˜˜˜t:Cl ~èK6a \–™³çñ,Œc“Êf™>vBNŸ:E¾X`xl¬ßWØ;U ‘ò@ _•n·ÇÄøÕzÏqH§RýX±ú‹*Q»‹ùìwe-pé`çˆC³éKd”ë·fÌËÜJ‡û¿tŒ-cYò¹ŒRX’‹<𴬬·Þ ‹‡¼Žg¯–'¿j¾õr.X¯'¢¼†‰|½ÂÇåüÏ®ôP‘7Yø¸’÷¼QÄø±9õÕ&µ†/í]Üëc‚l@±““MÓœš°:HµX"¡=´DÅ–r''•f7¶@m¼ Ù n×#WO1XÍÊ@=MÆ÷$ÓJRh»"¾…ݳ)’d4Yd8™“íù2#™ ¥d‚¤c³V©G ©F-–‚UšZ£n4M“žúâãƒX¢qËœ-9œ›‡PãKð¥SDÄÞ/àEˆ%—ÎŽ°×ãÌôYÉÙl–é™ ùÉDâE!äQdDŸCÊ’ïQ²cÈ¡^ë1³äËÈ`’‘<ó«ž=z^¶d)J‚í!–…ï‡RouY^o¾–óîj”• .o¦ðñO;Ķ„tÒ%á:xžeI¿þÅß# oà<½ö¹íÂ$•sÏv¤ò¤Çµ÷æX¾£Im¨…=mS:—fühÑ wHÇ¡äë% "v(¤ Õ©vŠÁÕ å$é¶MªãAàAd–ľ£[re¶ÊLæ‹äž¸øÌ‡KTãÕ¸F+nâk$F1€âO\\u±ÅKŸ9›Ä K‘/žÃúäqÜÇf1ØoóC{hÜ0J{s† dcfëDœ‡#uЈÀ\[È¥^ÏPœ"}`ÙÈAܦž"%=bÄÖ)àVF k-Âå.¶ … ÝÕ6åtÚØÍ 2I%ál¶‘¹Ë"õîˆÄ€’ê„U+E;‘¢UQ2“!þv¥;¤sC†åŠG¯›¤9(, óÃKáÜW-N=èà~—#©æ áJoj‚D¹Œ."¨ÈÐÝèÆ œÙ™¸yœÄð~,„ØøÆ¡gÂØ&Žlâõ$öɬ8'²8'û÷T–Äé4ÖJ‚ rð± ôÅO[\ºbÓS›6§syæÒiêV‚õd’õdBÖÒI"òQ´j†b=¢hu)J—=l@¤_+#츢m;JbišóI¿²ùƒb‹Gý9–š XÝ6?mÊüÛ ÌݾŚ“ådéZÜÂy·ÄMŽvº¬Yʃm†*Fv×™Z˜åï×ù‰›j*„üw3%þý‰ ·×R¬¸eþÊfîϲÕø¡µUöwzD–C[¤ü®D®aq2É⦂M=ï37Te£Ð%Õ³™\̱i1Ï®óe¼Ðfz¤ÁÓ;V8ºmèDŠá¯H4°ÁêÍPݧ É0~t„zªÁôêv-¸Ü~>ÁÖ#Êžç\vžJ3±’`Ärð*‚ ƒU´¤—… eÈÔc&VªdÝ% §¯ÃÚ˜¤¼å4ÙÑ.~#EìÏ"î³ ¢w£² Ó{m6é&óÌ•BÝ;Í »gyâÚ³´ {Ǩ¬%Ùº6BÎdè¤ jBÒ ŸâF/Hà•’³p|e•?ùÌqTaÙ_âpóß7ö~n¸“Ï¿˜û3¶d¶ò#›~Œ™ÎY¦Û§/TòME?.&ƒª6{¼pf‰¹Õ·ïÛÄ;î`|0Æ,¼HôßxT š-6NN³øÌ!ÖŽŸfhßnÆÞÀØÍر•ÖÒòKcD^7ýX9ž\©Ä¾;o'èöX›Ÿ—÷½kn½…ëï½›É]»Ú:ðCyôqf¡¾ºÚ/¼fY_û’«µÄ+ä5¬Ól6ÃÖ©)Žœ\k4ضi’ÑJ…³ss=uZ6OŒSÌf ã˜ááajõÕZí5᪺QejËf ùAàc96–"_þòW(—J KøaHeÓf‹õå|?»w‘H¥ˆºÝ—T:7¤ <ÇæôÌ ƒƒxÉ¢J.›í»_©‚XHßÙ€FâŽOl{,ø FŠ6·nu9³rb¶Ãæ±4÷޳Z øÓ?ÁŸ|âiNœ[ã¶ý›yÏ]{EDxà‘£oôZþ¦ù'%€\t«½õÚIþøW¾ƒŸýÞƒüÈ»÷ó¾»vSköp‹-c%&‡ TJi–®Âìu…jo.ä¥"wïfëm9¢²Ð+„ÛC²$;U`[×cOkmçÆdóü rub=A©æQ¬{d›.É®Mϱh¹jlˆlâÈp&Ãîò[Š%†ÓY\Ú¦MÃ4e>\¤Wéš¡ Œ ±b[`Yô!ÕL“V²K3ÙE#4+ô‹³Äÿõ8<|5œÀúѽïÚ,k[r4+~sïáEÜ¿t°êۈ܀@긎›n¢@}ßfdwg©€i$qzÏR”U,ÛÅĆ i‡‘m˜v‹`±—4Ø9¥;¿Žß68A›J¼Äæ-Üôíû°Â<•-!w¾m‘-aƒ­M¶ÕÚlm¶ØÒnö?6Û×{l_ö¹a9ó]6Ÿ·I4“$!ÓµIÆ6+ 3Ÿƒ’SØHõùy¬-X£[ ['š;N·ñ4ñWÄ»sŒð»®cµœb¥à±TL±TH±TLQÍô…ŸEr¬Ç9©F96âëQž|Ïc9“f:•c.“e!›f.—a1&°„N¢žt¨%<Ú®M!ê±Ó¯RŠ» Dq›ŒH“Št(Ÿrà“ #Ll!1h,ø]—°åaº6VèI3•æ©‚ð7!¿—XáCÁYºktü×FÿSTæ—ü"›%C+U¤YÙ‹—)’s|ºqS~ Í4)ú”í€=ór®{ŽÿñºUþtK‡‰žÇOŸ-󋧆ñKüÑÀ\ž¤a%¸¥Ùä½µ£QL`9Ä*D Ãúr~[’Ú@‚NÎN¬³Rn‘o%¸æì;Η®¦qC›³£ žØ½Ì¡-ë¬zÔ 1CWxº$Áà*N¶É_5”Ÿ"蕳Ë,çÉÏÞâ0æp3ñ¨C¼‚1¥=¬ø9%Ù$ÓŒ_l3¶Ò!ÛŠÉÄ Q·J{}Ao {ªErÂ#8»œ`?òVÄŒ#µ¿c)•ä‹ß¶ÆùKœY¦¤ÙVc¤7€Û0ØÍ0k‘n÷Xï18¸CE¼r’â@’éÅË"ŸöxúTŸéYòy¶þ ÷UÞÉÁÒ­üíÊý|pî\[ØÏOý f»ç9Ý>ùMM?:½“³k,­·H%\n¿vŠýÛGX®¶™]©¿é0„íµésÌ<øí•u SŒÜxSwÝF~Ó8ó øæë¦&މ£ˆ­×]ËÔ5{Ø~ý~Ù¶?CS›è6[zøúà‡8ö•¯°±°HôµZð˸Ô|KysZ³Ýî§@WŵÊÅbßÅǶXXZâè‰}†÷%0OmÙÌÁ[naîüyþüi~½;•¬-¯òèãÄ‘þÞܽm+»¶Nqrúgçæ±^ÚïÏÓF½A׸ë¦d’)ŽNŸ½ìñ14šmnÙ®ëòÂñâºScc(L¥ú.€çν’K׫â*Š"RÉcãã„aÈúú/¼pˆCÏ¢×ëáº.㣣¨*^!‡ãyL9F£Ñ0›œÀv]ÌŽ ‚(ä²YJù…À§õ(D>•°Ã¦Fi§v˜5¶vkŒi‹lÊ'kd_Rãƒ&¶› téø ‚À…0A#•f¾àQK¹|ÒÝ?/·ø#åSíS,†-¼8æÚÈågÂ2¿íðî8GÇqX/ï QÙ‡:±´Ø56’MÒ¹˜ Ø5»†Vø¨3#¿¹§ÉS÷¬æøÐ“›xûÚåø“1ÉH›˜[]å;7jx±ˆƒºiÃùí†!GüÔs]¤{6{¦¹îô ù¶ÇR©Ë‰É*G7Õxüše6r±c‘ ],?Ëø‘4å) b‹ñé5†Œ…Ø.½vžJ"E~0â™Ö kqÄÔ½e‚„ÖXL˜TDcÖºTVBÆZ2²Ú!â@éh‚ž$%Jnà–ÚçÔ'‘Ñ&íÞ2´,µPYGìç-€’YéQY½‰M‰2ÅÈå¶é=ìØ£—‰ Š1Ýæ®(ˆGJˆë,òÂÙ:?ýëŸÇ ?óÞ=¤<‡ç§7ˆbeÙ_¢nð3›ÿRVŠ/®}žÏ,šýÅø¡M?ʲ¿Ì‰Öñozú1¿Öà¡çβ\k3T̰Û(OŸ£ë‡/0ľÏúñSœýÂ#´WÈŽ3~óv¼ç>2ÃéÕtV×_×<ÕW×X>w˶©ŒOÈ‘Ççä“Oó•O?À¹#G }Ÿ8Š®7ß@ÞĶ^­rüôi ù¥ö…ºO=÷­vûë``ëöm¬,-1óÊ€ôz>¼ŒQ_Y_gúüõf®¼ªÏ×ÍS£Ýf¬Rard˜µZµË[/Hx.ûwï¢Ñîp|zZfq—±J€|¡@µ^¿dÕ¸Z^Zbë¶mXX<ü…‡YZ\º”]kmm Ƈ‡ ý€T¹@·Õ¦º²*K‹‹~ÀøÔ&,ÇE/î é ã™tšÕV“õÕ5ò…gÎÎÏeÉd2h# Ú`ﻼG†¼t(;Nè;ã”LÆŽˆRó’ÚLfÇÅ÷ÒH( Ù —è©år±%¥8Ö‘éyÙX_æW´ôO·w¸q=#?w¦¬w­(…9>VàùŠt,‹÷U7¸¶ÝÓM½€(‰ÔÏ•˜v:9½˜FªqÄØj†ÉåQ¤[YAâ„ð½Hð³bSÔÎ7íîH$¬¦¯aÓg^ð_ÃtDal€|¹ Q,¹ ÉÚþøožÒßùó‡àg¾c|Ï[8¿ÒÖ?ûì yèù%p*ü«?ÏÁâ-üþÌäc‹Áµ\~wßä@ñ&~óä¯qÿÒ'ÿÑБrVn¿vJ|vúRúò+€íÕ¾¿\õà¯û?]`ò¶·èÖo»‡Ê5»hÎ/ñùŸÿUiÎ-¾núa9¶OMÉâ™é×M?®pÜz…su¥tïÕÆúz*¡_-ͽ\¼æJèŽãÈH¥¢×ïÛG¡Pàðñã:zôRÑÁ—>ŸL¥´~s‡*?9=ÄÎ ðÖõ,/dòüu± O¦r:å÷xK»ÃÍùž¡m ¢Ò(C'§´sJàz©/Ù2—a šÐTÏãÜp“éÁPNFÔr7H*Lhz%Á®ãÛçR’™‰I6E¼®¥=Û£i¹X&O‰7»ÄÙÒî>Ÿ åÙ¼uùóNa‰;îDrõU­ ¦;˜´G»b "¡mYbE(–Ë3•9–Kll>$·5ÇœÝCq}¿š­ç‰ƒøxy"pî%Š?#îéy¬’ ½ˆÔŠŠßNNâ ¥¤Þ¬ig­“-b ”ˆÃúˆ¯_X'ÈÿóéãD±ò/ß·—bÆãÉk¬÷VùíÓ¿Á¯ìøßäç·ý ||ñ#úËGž_»æ·ø…¿‚ªáåOÓÓK„¥äØKo¹\K¹J&þòc–~FªÎê:'>ñ·Ì?ñ,·¿E6½õVM•K¼Dy-̈ˆea¢˜ –e½#ûz˜ú*8Ыœyx¿}¥ëåÕÖÏ• rBéË®‰ˆFQ"R(teu•çþ†ãêu»²07¥<Û¥ ""ªŠ^^8º,žT¡ÖlñWûY’žG×÷坸AÀÙ—À{a=Ê ÇO09:J2•bj|\&ÇÇuzæÜ• “/Ò-U–—–¿á9R¯×yò‰'e||œÚò*¡ß¯D."c8rø0ÛwîB.§Q¢Q„ŠC®çÀÞkXtß÷ùÊÓO“ˤٻs'q ªDa¨±QÄ"uåÜRFëR‘E]kÍó8×lß)…lŽõZU¸ Ôk®T)~%ûP®`Í_ÉÞ{ùšð´%ÿí ƒáΦȤ\â¸?5^È »Fùoßs=ql0FIxÃ9²©Ë->úàQ<×ÖN-Ëß}ù Ac[ÂÂêË4ê:–£ÄFß´qåÓÿçÏÜË=×Mrÿ“Ó:»ÚDZ´œLÊžd+­øû 1`Óê =Qü²àD©j_{Ú/¾²ã މHÇŠ­1 ¯M,¹rª ±FRêu(G!ÉV†L+Õ¿zA1ЈE>(÷zÄ– ¢êT8DØ—F+Ž¡žL²°n£ÃXžÅøÍ áhDïãg žYReUì0S¸Îhâf¶aøÇÎ@Ð黓%÷ 齸¤zÇȦ<,Ë!‚VË›é P°&'é6Z°¾„Ó]'=žeèÛo§0”Ç BĤ¬̱@GÖù¤Ûà+v“"-‚égµýz|ª\<ÍÁôgI1àŠ¨ãÙ‚öƒókV$ê_4ÀÅ„ –€e]2Q½ÅŒQÑ$®i“ШŸ–W/uK,ʽAž[ 1`¹Ë2/[b/5~YF©gl$’ý´¹´S®zŠçp¼5VYé5x0Zf=îpÊ_¢c XFÔá'«ß޵ȸ9™0›>‘*u'I/?L”&N”𭈞iQG²NÉÅÓ˜ÄzüÌ~»ÁG‡ü»ëXêðoOLèÏž”e;ͧ %¾œÉ3ãºÜÞló߬oPñ#âHè$¡Y‚µ1ðSJ7;Š*Õ¤–ë®X±ÍR>æt%äÜ`›å’EÆ÷È´zlkÄŒ¶ð¦…‰s±,‹ “I¥ºú|YzÓJfï)r?–&÷èÉþÖvÆ6w˜Þù}ö<ûŠiþ—»Fé…JײéZ6¦ç³ÚA¥êÆÔÓ=žÙ1K=ÝÕØQYªTqM!JpÛ¡[Øò¹ïÁnh|é>Aò…$ˆQ×=ˆ„? Ñý¸ò~²B#5ÆÀ.‰BŠÄ Cì¦hÖšÓÓ8é ‰‘ ‚¹.ñW×øø‘i~ÿØq¬—˜Æò]»øá·oçcÎðG§Ĥì4ÿ~ׯs×à½ü»ãÿ†V>EÖÉò¿_ó›Ü5x?óì¿à«Õ/caa0ÿ¬èÇë…!;6LØîâ×oŒ¯w\zLÅ›㛉—oœ¿¬y®ËÝ·ßÎØÈ|þó/ <¿Z˜ßȱ½ÑóôuýíÛ¹“wÜq;^2ÉáÓ§ùìC¼›ôZj]žûí[p¾Žññq¾ó}ßIÂóˆšMÄÄýbC2™dni‰}östº]<×åío½SG‡†$Ž" Ùl?žFÁulÖª5¾ðøãÌ--½ìÝ¥BN·ûÒ doÄü^M½¥ošöOÖëÍ0¡æPU BÃh%«?ô®ë(å’RÊ%ù®{ö¨ç:,¬6˜ž¯b.¨À?ôù#™^Õ(Žyô¹óWmBç5¸`¥<‡¸g·î™ƒ»GuÓPNõ@›­€Ç1[±ÆqŸÿíe”ZÉH$h"Še \ô²Á3Ê–zÇ1"zAqI[ýøTâÅ1Æ¢ïXÔW¿ë%•D¬Ò¦¤ÕVƒ±A‹‘4idTDEbÔd ½!Åx¢*jŒ*Ž…#½OŸÖîO‹¨ª7Iwr JŽÎOÂhCÅeq¼&¦©!¶›)Ü…àiªñ(©‘L¥%ŽÆaD'_¡:0"a­§XyG‰gÅ®žÓ‘‰$Sßs îØ0¥Ö:©¨‹GD$Ejk_@hJ,®^~=ö'DÅ–c‹•p^¶îcâ^@F¤±9'¡|0±¡ $ò­å=PH÷"² èÚ ¢*vl¹´,ÜX/a Èh‚qõúAýŸ—­'Ñ—˜ÁT‰‹È½ ¤» 'ŦÇ8›eOúz}8~PªÝ†Ö´-¸¶–­M¼%ˆ¸11È;Ú Ù·t ¶pÈH jbHZ‰ -dÊ9±vLS"ÓP+â•lq\WZK†Žœc`­« ·ø­=-9T ô@-'?°PâûæÇôùTŽûóEy0›Ó‰^ÀM­wÖ›L´Bi%„fÖGÑ^š¹HB7V'„‘Õ4ŦC"°9_962SÙÈ,±ØvL¹æ¼#c'CMVcÒ 0‰R 5j£‰¤DÖjN0XÿL‘ài!qàÙ÷È{‚.$¨ýÕV~ùø/ðÀò§HX þÓþ?”zX×?:ûûr¾{^ƒ—,ügK?^E‹ûMïÂ{…ãþ– ÖÕkŠ/ݳw×.¹íàA=7;Ëgz赸ÙÈUÎé•h°õ5î ®ÉDB¿÷ÛÞ%“c£Ú‹•ß?ççæ¸Šñ¼ÚÙqÅûá¾»ïáúƒ7Iàû˜V 1F°.<Åç}ô‚·‰ƒçy¨*·¸›¯ßO„„Q„c;²^­êƒ_ù çæç¯ÄBñZ¬¼Î}v%–”ot–]nN¯h]^@^o%[½“ì«Io—ì•HvÊ?P%ôtÒåûîÛKÄzãž1¾ã®Ý’pm¢ØðÒI—j£ËG¿xTë-_ÖëýÿîžV7¸’Jè¯Kнíš1)fä¶{Æô¦;†¥U §[Ø=w² bT,…^Rµ™3bE¶–»ÙÛZR¸K`°^œ"ëkøiU‘†¤iKJ-ÌKyXÅ X†´’-ÒXÆ jÊFÔë‹1*æ¢A@A$¹`èí¿ÙÉÙè±*­_üªÒ Ŷª饇µ“Æjf¸á–@êÕE=ýÜœØbF*VZ¤p–•Æ«?¥‰hA2é4¶m†‘,©V&hŠ…dKôšàÏÌèPfC¶î-°iï0Å¡”š0F^Œ‘‹è±3I×Á3*]ËbŽp××bN_2k’ÐBâ:b%ÝK†míNÐn ö«´ ýÔ˜–Qz G× D‘L7¤ØIáLÆåw7`Þ«iʸb¤o¹e¶¨é°Ÿ×U‹Oé*š \Q÷¥Ub;•XQUsÁr%ÕĈbL¬Š%›)s«n¥ì½Wîn·5mº¢Æ"VÕÐR–‹9b/‡åŽHœ(ãÅ–v­¦H¯©Ýž$ .nÆQ+ ¥ðü¢V¦×e.ßå?ooñ…aŸSYŸÔ_=¶Uæì<+ 賩´8Æp[½ÅÍÛÛ¾vm‘ÚT+J»‘cèy}—ÁÊF‚jÛs¥ˆç'+ÅtÀoËž“éÓ=v6šn ¦ïÞ¦q6)&•BS â£qN…’ªfUZŠvÿ¯A‰ž {±ýÛbTcæŽláÔ£×°íà_GøòL•·ïœÐ·oÝ‘ⲜÙ`±ÔæÌ–uŒÍh³$“ÕAZyÝT­@‹ˆ€4òBT”ü#÷‰{æ:¢}_"©Ÿ!>¶¬&FÄ5¨mè'”ÐCz$ÖuãX÷îQ•¸Ö†8R K:g}|¿—ƒÖ‹Ï<»È—–õèFõEWÁ ܱo˜ßüɃœ˜«ñ+ÿå)–ª]pÅå·÷þžÜ^¾ƒ_;ù«|récìÌîæ¯~DOµNÊÿìi=¬‹~\Ù9þjc׫˜£7„~\p9fðµâîµZG®´ú唬o•Ð/^³m[ÆGGÉe2:}îœtûE$¹AT®r}\é:»Z Ä« y—ÝŸ•2ßvç[ujrBŽÑ}æ3r!ˆüÕ|}•ï^m;ìºç8ò¶»ïaÏþk‰£è¢Ò/Æ+‚ëº<}ø0Ÿìñ—Áæ¹®lž˜àÆk÷156¦]ß—d"Áá'õo¿ô¥‹cùFëïõœwW¢àxµ3ꤺ÷Úë6!uz!ö©çøëÏæ¿|òY,K°Døwìcßöa,Køñ÷Þ@1—¤ÖêñwíàÙ‹üÅ/ ª¬l´Y«wÞPøïÇÁ½Éææk†è.¤R6q D™Þ‹y…Ò¢H`pÏ[4òjõ/ÅX¬I‘«Ÿ «Ýç†.>g²u_=Bu”x,FÓ5/òá&g×`i@hG¨LD[ŠQƒ-~à°ÞJQc’&ÆH†]k Ês«<)†H#‡–3N3í)o¹§Å¶÷XœyÒa´š£]ói­FØ9œ|oé9¬¸F#™f-‘f0É¥çXD~‡(?†©…0}ˆJQ¹þ;v³ýæMÄADä}nþö”88Âã“kjÐëâ#´ 7¯°w©ˆ¦”0v0ªØFûî*"ýŠ( N*…¤^zà©2Ùî»ÀÅ–ÇÙ²CWa>21’g$•ÄŠ-TQa " “k¼vÜAökÁ`û‘x°M‚™MŸ¡‘;‹¥p,e®™b±•ê#[úV“‚Iâõb6š³ÜmÆxg\æÖØ'ã$£º],™,õ| MŒâ‘'Ú8aØë M$¥”M ÛÄ$N.S8³L;lq¤¢ü›½ oñŽÅ ¿st3ã­Qþ <Á3©45Ûa«ïsOµÉÝÕ&j õ´Ð)ÆÌm¶’B$L—\ÛeÏÙ"¨Íb9âÙ Ÿùb„v å%á¦#†í§b*«‚U‹éæ]zy SJ¢®C¼Ù&. ªqA S >dÚùP°RTš`Yè<Õ$¸±Dd„8†”Ón§Häs$í:ëAÈGöã™=ç±\%zÜvv7›ªƒ$#ÁNŽÈŠéyQßJ%}k¡ÝÇô(—>BTŽ_¸vÚ¥“}ˆRûDÿXW XA¬ïFg‰ŸùŒëcÝ»{P±›îéˆÖóÉŠGfBñ‡ ™>Ëj¯û2®áâïG/óÔ©5Þºo„;öðáGÎ"¡†üÂÑÅoìùmþõö_Æḩ—?ɇç?Èû'~˜w¿‡¿šûËoŠoµoµWiq_Ôúÿ³l«ë|æK_â]÷ÞËž];yæÐ!¦Ïû{‡#ˆ"zô¼LŠí»wÚí^ŠÑ0äàþëèöz<öô3}ê,B†œ<{–…åeÞû¶{™aúüyæ—–^LÏú­öŠ«1þã4¡[\ÔI-‚ycLè_È¥±Z"ZÈ%øþûöQÌ%¥˜MêwÝs ¥\’N/”(6¸Ž­¿pž¢V?“WÔQ)HÈ–^ µ#ÝÓ¶ØÓVñ´£»ã¦dâP#:"±¨/.mQË¥¨æóBbX³qÏXX& J¶‰ó= ‘Zˆä7be¶&,®ë¹ä:gò]yvPõC])…ðýse½um€BwJ>\*ë3É„l |nk6uoÝg¤çK3‹6ŠJ½,4ŠB/÷µ÷j˜XLi¶í17ˉá@çóQdØuHÙuØP™7Ø¡…ã+½œÉ'‰Æ“±$R1ÈV6 IDAT59!vcŒÓÏ0ævbìH$Ó‰ul¹E"Ši7œüò$«3ùâ1¦îsI•‹´jÂÒ ã˜™AYy÷s)áì÷ãËIåÚbýîCdDL_Ñ—!ÅõBþ§0º¢å¥{¤Ò¾ª´< ÙiGT2z¾hc+òÞ8È>{äžX^±gBÿ§ŸÏ#§Züú_íçøB÷¬`^jS~ë‚ßåÚñ—ðó÷þŒ, úWWþ<Ò=¤¿rï/0ŸÏ}g¯¬ ÖSë‹gEÁz†ïãw<ëñŸS““ì=ÿ<–WV¸çþ¾å¬3ßÕê5^qýõìÞ½[m‘SõûâSâ0bqe…ê†u9ã'Z-I¸úÒKd­ÝÑ<Âã2ØoP°¾ùî¦`É7uO=v½>mר×ÜÃÑ?o;ÖˆìÝ5É›_v!LÕÙµek _¸óˆÞõðœÔ’Po¼õ¹íÀIÖÚ9þcšÞÆþI‚Ù›õcÍiUBY\8­ÿî’yáö)~ïÐÄ/2¼õgvª9T‰<â¹óe‰ž7réJ¥'u͇K\êD¼`ÖQZìµ8QŒ †RçërãÅ ëÁ^­•ÄíÍLö"ÎY®å,…9GTÖÙsôÄ©;)½¸bbu„©•ó)ë³´†õŠÖCrqë€:bñ²ÔXŽ÷Üý×§u~yT4lèö«#ÙòRÑîæ„•Zƒèæ£rô/îPâš$ãH2¬QÕ—úü –¦·³–ÄêO?" éäV*ñºº†H’rå[§h:J=J9ï¥{Ô—NzýŒvRÖ^¬Ø&‚;˜ëŠW‹LZI‰œë$m׊•AÔ›ËR°&kö–rœH­<圲¹FJ¨›Õjð"¥8Ùc,›5,gÂ6t=&£94¸wC'D^Ô•¨ñä¬&kM¼xQ£°Î«°T¢€xSD´¡ÍÊ‹¨UD%ÑôJ.Ër†ÊH¶å ÕÔå2â{1ZáÅ;Gi,yhµÆÒjŽh¿6"5¥æb ŒRtqµ O.F–PN®ÊÊʼ~vlAnëp¤áõæM¹Œ¡î鉼óðV.YÜÎg†&¸µÞ æTß´²(t3f²JÛ‰g+f·* S•uj±N[‹˜^ŽXKáàLŽ}ÆŽ9¶RFVaÇÔªO åHD5ŠÛlÐ4 W­›)UìÕ• œ±Œ´ îÒXÍ5i•âÃ@+«rêÑ ß|Ú;ÅÖkNP¼p”'™]²<ï}/§»}™Ïôþï¼^ý†í\´eF´ ÅÕ"RT¸_!ŠÖsí\"Q˜7dU¬™é§5܈Í*âÖy¤ó×¢›Néjÿï$=}/IÎôTd;¿%¢BõëZV±,ÔΡ>9ª+§{rÛ©y>sø»·5øÙwì©òÎÿã˺ØÊÅêõ‰ó˜5¯¾ýR¾ïšüöïÖß|ø óå•#WóGûþ”Gz‡ø±;ß©ÿæ¼_•·ny»þÞÁÿ(<þ¹ëOcýàÙ¯lP°¾Ùoß‘,¾9Åå_4ëIúî[JÁzüwµZ—½â:¦&&¨ $Öòçx€Ósóú©/~åÕ5žä½øfuÜ `ýK·øRC¸CÐÇ%}•Ê#J~ÿ––Å{å ûð·æ#7 rž«önæu/:N¿àåWîàð¨*×_½‹¹å·Þw’ÏÞö(ÍZÌgn=ÄZ'Òç\¶÷ÞöŽëpq‡Gn½ñj‚îÔN“ã¤>&¨v`\…]q¤Ë1ñH@â â»+ºýû˜Í<íF†Tr–z3TÖ¨U uÓOJèocµu.«‘'X§[9[bz5v¾5Çé³HË2b=‚'p!=⃓œÛZ¤é,™isjä0}Û%ÌÚ„í5úyL?A×9ðÒ-¯—L]¸…CŸ‰¹úÅ%Ó¯4¬nJqÞRs+Ÿ9B£ ²yв1N0mˆî=†æJ‘6‘ö¨°eL}iÛúK¯ëÎ.˸¶™q«T ‚ÍŲÉlò­³9KÂDáwOIi:Hê¡X*Э70„¬ 5(ãb3J­H½ÁwÉ'»HàˆærFNTt»9_ª-rMœ$ìÙ¾k¯¾’ ©Êç[g6ñÆW¼‚¿ô%NÌÎm4ØÓ´ï2ôCCï ðË[üB(*½›ÖƒƒÌ7ñkEPPÖþ¢zNÊ$2àúŸ^¸ðþáKù‡/€‡ó7±w×Ý^Á½æ^õÂÝìÜ<ʾúbjIÈ_}„,rÓmòùýGyɾIÖ2Ü«9rÝõ#{de¾o,aËéˆU¿ÌoþÔn‚f yTbäyÊ…k w—¬¤×Ò»`Œ0ßÃ49ã‹~e~ â ÒV*ßC‹mléŒ7oFMŽQ ¤XoP¹~p‚–¸¸a¼fÅ“vof¸Ê™pBm}3»ÉJ h”žñž’iÒ]~X߸Dʶ=†ëケ‹-§&ÚÑéÑÒ‚4sí4áÁ’xOEý¥#¸~õ ê÷‚©äa|ç >_Á¼|/æùÛéOÕéµê¨£ç˳ËD¦Fj=¾ü*õÐÀT‹{&ºWÒÌe['饸ÀMöFQAOXÏháÙ_ Â#‹i ¥ çÖr¦¢ŠÊ›ÇZZT0¢ŒEqZᢠ+ ÔOOQ†Y9~&»”'pBmy˜ W£2P÷—‡×1Ñ`aÕ.ÓUk]YAã=Ö?>VJÖÌ„ZÝ$d~¤IPZ†sðÆÐIS ‰‚1b¨ i‰›XC|FýhAÕË NõølsíXàŽÑ­ÈÑ ”89Ì›N7Øš¶v‡øBcŠÖ§y(ª±¯ÛãU«+lÏ U°6ªô›~ QÃøjD³P…Îwo/YÍsÆï-Ù×ñì: $¹âˆ޾7m¨F#Ü8.px”ᵂ±åŒ$SºÍÙ©¼b*eä¡õVIX…”iŠ7BÑ ™Msn{ù½TFìü£+‘ùÍìøÒqšç0ÃÑÎ>úgOq؃>±Ä–‹G©G‡;„¥£Þ)ˆr‡–µ~ÃóÃÈP€¯WTs}¢ñå¼£\q´õŒò²£gï"µûHØÇð…WG-Ú÷µÐJ!þGDð?„ú wncôd‡Ã§àãÌQÕ ·Ÿæ{^°…7¾p Ÿºý7ÝõõÓ¯pëƒ ¼éšíìÝ>úâÔѪZ4m“‰h‚ýãüÓåM3ßÏk6½¿>ñ ð±a¶aßQVEQ°ÿÞ{—<ÿ*jµ®¬èg¥Ÿå õLöÀ|—P°FÞHýµúÖT=LÑEæŒ)ORvÅ ÚSŠGJûxp"TǼ®þ§Šê”Š„€íAu\¿Yy²ö¯%¡Œ4^÷¢=|ÿõÑËJ.>wŠ­SC]ãØì[§dk ,/¯²¦ÒO^ÂȦ{˜K¾¤k*raèógWÅ÷ûÆ¢"g>ˆ‘¤‘Q•ÂŒh4„zC‰SÄ?±Œ²~ž(¬X6y§•ÍqvYfJeª2Z bÖÚh•S„‰ZJ³òdqÀ鉙@T8E+DJëÙ‘Œ· tu™20Ú‹CQ ="^(Ü•qßÎ>{Vš:¼6$¦¥ªX1ŠV¡£0JØòR{¸­f­’Þ5Lj=áe88Ïüân-Gϓɑ;yhê(£Ï¿Z›GÇdU-]ˆ¢®‡¿« ¯¡qHà$îë±]s²eL® Qi –ʉ´:1e¨†Nâ-kLµb²¤b~¼ÇCK¡n[¦H¸d\%NKUN‘L¨•¨GÄ•¦+£Ôç§ÎRl”± ¨Ú~JšÒ¤‹U"8 CÚç¢ê¸SŠA1XœkñÈeUAñܺºÖ:¿P³ ¬j¼J7‰u~¸‰Å`T%( 5Ÿª C/^U‚!1&½V}¬b“–gb–s²Ù®žv->7rŠ{G;Ü:Ù—Âxvw=¯ÊÕ+Ö)´Ágš£ú÷Ór"Ju¢¨ä§OϲÝe åø&C?6Z&*¨õ¬6z¡DÞPXX­y¶×ÙŒ*8÷~Ïð èp@>“ïN('žpŒªR£Â3±T0Ô.$,=qápˆ.6c©œ`—*õ"Ú£ÎD FÄéƒÛæä–ËVïEVG;4]Â%Ÿ¸ˆÝï½Ñeš¯]Á¿¤FYzø›]è·7nÑÛá{÷m—óJO°V¢Öj¿Œ(M s MÖ–Rô1‰›¡÷„±UÌ`Ê™ºpŒÑsTÅ*ÚšÐå[¯‰`â…Ÿ§ûèͺzß,’‚Mò7U|CŒþMsTÿ—;3ù؉µ'L8»füö».ÕÀùµ÷ß­޵¾îüté®1~ó]WjV8ÞõûŸ§Ó¯Î^·«v.°ïO%Ô½ó‡d<žÐ÷]þy }¿tÏÏÑ®Zß‘ë¬ ÖÓ+ßë_ë±ÃâAæw€Ëö]ÄÞ={h¦)õZªþÔ§9ò˜d0Ï Žßµ¬ïú< Áv‘¡·ÒT«ÿ&¥RÌ„‘Æ,&Eµzܵ묘³O‰ :­´?è´šS$‹–*ý¯º3 «ë»¿'í‡'Ôýõ/>O¯ºp3ï™æE—l“µNÁp#¤™”>f¶µC—ûÇÅ›;´TÒöhzjÉÊqŽ5ÔœŠÍúŽÅEoUŒ/U“ÀY*³.;¨œÄ**Þ£q,ÔêÐi+•Çh<©[/Ÿõ9>ÝÔÙ±ã<Î e¨P/ƒhw§ÂùX'º•TŽžŽ#N '¸P ÃR´°,Z¯y½  ¼^Ô¨¼¨]Wé5¡àÔ…WB˜B•ÈU^š¡¥s,Öº žÉqÆ‹uªe+ Ê-„*<ÖÕ~Jáƒ×ÀxbõPZ 1Ä^¨/NT"Þø³IO¤Î‰‹R‰rÏÐ*·Œ,Wv‡¸°;Äö¢&¥q:е´ó¢:PPë•@ëAÕš\6¹5 Õ‹"Z¥nzì¬æ‰¨pj}¥*^4À@ÓWK±xcÖ£J8ûÊ®ÖúQ(¢ªó¬5ë¬4ê$…8E%jÔ%ô**kjÕ¢¨x+Š=úƒÄqW}°J{©Ç\¶ÊdUr×Ó¥¸Ã‰90RñçõxûÉùÞÙ!."±„zOmHþxb³ž ëL…ìíöôÅ–lNûÌMˆÎŽ›u"ÚèXif³ªªÌ×Ì…fËÞ© -{lh…©².䦚[TTD½R)#+9I_nå4z%êYëK'•¡ŒBò¾ŠU£&¬!b(B+«×Cc+,Õúrÿžãº8ÞÆˆP/"ΟaïüVFÒˆÞGÉ>=LrÕi¢ïm¡[‘/O ŸØ©söÿXÿüÅ#O˜´~qׯÈoÿiýýC¿#ï?þ>ýùs™wïú~ãÁ_“ÿvü¯6‚ПüožÂÆa#ýÉ7£<‹~ßBÿgBšãîŸ,ý›0>2Âïcvaû>8 G?yÙ7‚п[= Ïå Vz­AbÇ1±´Tì´hãõv\D‚© Ñ‚© ëœ!@ˇ=ý[üà9Hù]žî €D· ê–õ¶åÖ©!ö힢Û/ù¾—ïeïÎI¼wìÞÚd´Ù ÓîjK é”Nÿösʦ!ËeMKk¡ƒ±FÏ9¯!½Qa©êkaJÁŠ&Ã*[Ý WoÐl%„•jcR‰J4rˆH "É™zŠиTT¨Àt¼ÒÌ%­*Ê•œûšóºùt&÷4Öôx´"›z%3Y¨/\ˆ©yËé˜ÐÊÎn“Ci¤_ªÉѸ®ÆM©<\ÑéèÅUWv}í #wT„zßf–¤4ê­•¢t=¯«®7ŸaJåœy‹«­¶ÇRŽò™*¤ô$ý’0÷Œ¬$¹2Ô)*GéE½µ¹R©FTHkPÆ’ó¾V¥•Ùá·ï>ÎÒd[k$¬¬Nt›rÞüª@fZ£5¸ZI~: ÷ñQäpŸäÊF_ä©÷Jf?t9y™ê†>ƒI[òú±c¯¡u´¥É0ÖËð¹$ã©R9#É£IZáv¢l^½ô¢-T¢å‡Ió>BB•¤ºÈó¥üìéñ%‚—tµË~䦊õ„^ño)€ÿKùœ¼÷¡ÿéàÕãFO# ôWß¶W.Û=¦ñ‡äïny¢,¨ð Ï;w\÷'¯¦Õ+øW¿ó9É wv nOwðç—þ¥¾Ÿ¾ë]:™LÉ^òg¬”Ëüèíï ëº ȆdÃòãy uÞð€<ÈFg`ý/ú'ýMâõ“çì$Ô_`ÇÖà´R⽆¡ zJë]•¾Ti¼%@Ö½(’B~¯§óQ‡Í¡÷‡v{Þ‰ù'æ[Üsp–¡zBZ^õ‚sÙ±y„—\¾“sg&ÈŠŠï¿lQ¾úÀqë¦Bò½=š30ó¥õýã;ÁÇsmÃìÖŒÖ99u¯lÊ”ùÐС]ëÑ«e$>ÀÜ—c#ÁY™°¬×ǃ-7®äçY\ìÈ‚  ¨µ„«ul”sQE8\X¡¡CÇ›A`»õƒ±ºžd ¶…³«`üƒw¤4HàƒŠj=]P ®1Yˆ¯,¥ñäQ…1*¤j*_$'‰JÊz€ˆ§›%T…%vŽ$±}Ô3©eýœØ;‹T«aÆÉZÏMαå\¾:ÁÕKãì*…Ðôñ ×{‘ya¯’VÐð[ÌÁ²TÊÄrFP*Qå§ô+C?I(½à4B ^¨©èØ.·g±–óðöYJkS¤õ} ÛØµ8MèBgÎjTÆSÞrwȶ‚Ñ+Y=ù_ùìü§ùáíïâµÓoàC§þfcÙ° Û° û.·àIPŠ< ê•§yýSu/}½¿ŸêóŸî½äiÜ󉿣`uná‰Þ 7Ååcÿ£€GÂ=Bí&;$nV’+ õ×Z´d-¬P{©¥~½…`@:ÿÃQ>ê1u¡<âé~| ¡Š‡µN~VëЇ–×]sÛg† ¬ám¯ÜÇæéa^3Öà/3ô»•|ÅÏâW{ ÕKi´#ÂVHµX±R"ê ù’àÛBGáþs2:[sðP¦ &ÀV±„ˆzqHhQñ§ØÊƒS*.rˆF—FIV„SY)’‚2.)Òg§¨Þx1e„ͱÆc­_ëM(*.ƒ QQÔ ”£¤²bEqA…‹üt£ñBدI‡¨õTÎâ—,)ÉÏÈ ‘3D¢R Ô #imªäyH¯Ÿ`Œ—V/!+#t@’PÀZX3n•Ci›‰"åek3ÌäCˆDt“–¤âÔàew5G\–Òõ–éj…HbÎ Á‹:àªà±,èÎæG›RYƒ¨bT)ËÒPÇ€ÿ%bÄPÓ!âõ\(Rw5’2&p‚ÓAÔ`0¨ÄHUËðµlàÑÁGN4Í裫‹Ž‘ž.;4˹cxMneª•³§c¹r-/Êpi¤Ž§Wo"î«Mp(iÊá¨ÆÍõq"Q¥ò¢V›FTÊx-'‰3NM©$ žYI2¡V”À‚->\¢U)ÍSIÊ­ f,di›‹ñ0ÒêKºÔ#ª`¨–þ1ÀŠÐµ ÎBU‚¼‰Q¡ðHOa­ÙãíÇ)Ë€V³'ñœMQ¶÷¦Å \´°äD„7*F Fg<4CUP#/¤­‚ᕜ¸rø­5Vf›ÌÝP~ß•{."9ôeÙ’mãpã0ñ˜Aã!úl[lÙÆö;ä}/WÓ!maCp6Fc• ,ˆ¢ecP’Ù>IáH´!õ¥6*ÕžÝý3R;Ò$½|;íÞ£´ûâ£Óˆ¹‘÷H®?‚5Æk·9ö¯d´JØÊÜjÆÇ¾tB~øú¼þêͼ÷ïòuÔ¾å_9ÎË.ÝÌ+¯ØÂ§ï8A§_šÒ—Ìçó™ˆmé9ð¹Å›xݦïá›ßÌGOHœºïÞõãÙ_÷\]ólíÙ´Ç×;ɺå~&{—§RVy†×~+î©OR?ùmÊsð®Ê3|äŽ]y†×>ݾ.Æ<ñ!ÏÁ¸{²gês4ï=•9õõûÓå¡ñ]vÿöP†'ýÝ4!ÜeÀH3Ú…äùF‡ßˆ_U!¾Ð`ÆÖ•Œ”ìËI¡³£{ƒ…ò¤žIlý—ضMÃ25Vç]o|»&Çp3Êõ1¾e-èã×=Rœ–úí5|àÈûÉRŒ­,ýMÕxE9Yк´‹z(GJбJQÄæS 2p+€ñ¨Aƒ,[$+ L"•%«g€`=jü@-jÛù¸DÊ —p›q¨YW 0Š·oýÚSEQyr9eQ!(BÄ >ð¤ku¢NJ™¨õ”I7Š +¬QBÓixKâjVW ÞZý„^·†ÏmõU¤«ô㊠ò²Å-ìh‡à * «“ŒiWdÔw‰Õ­ãLl`Eóäa yH·274¼>Z=Š¡“DøÇá\ˆKÅ–Ö&4Ì–€ØÇƒ:‹jà¬ø¢$'g¥^†1IQൟÑPAS‡ÆŠézÔ ²ìa¥¢Ùt­âxÔÖÕ mšå“3Ë,…9ŸøÇi®ZŽiEžTÇâQÃ_©MèWj£œŠ)+¶õ †|ÉÕU›Ñ¡Œ|ÄÓMÊRëŒtŒµHÏÓ’Š…¬Ï–ýA¥ƒ€òK긆Aj^c1b*ÏÄb¸ïI‹¼œk4 IDATаtx„õ–81ô$Ä•1a7¥ˆJ޵ð½XOO¬Ê£[—XitÑ:{–fpâÊjŒôkëÊÅ2[ÖAfò*ð8#q¨C}7–@…°0²Ø&R8Í0§ ÜžúÁUÆÞ1rùÝ¿îѾo”ý#_bê•sÙ•oBÕiè—d\ï!ìÍ¢ËǨÊR“±1±Qˆv:g†x 0ÂÄÉ‹qh¡Ò›ÝÌÉß@ôÙyý¹ÿ+wÏzLNÑ·@õðKͼŸ6üî}K_3^þÃ;.âm/Ýί½ÿ>vË ¬Üÿ‰üÞO^Í‹.šæwþún>þ•cg¿Ÿˆ&xï¥ÿ™FÐàîýYê<ÈïíûC^5ýZ~ýÀà#§þûÆúñ¯ÿDõzº4‘續ÿ”ýòíÐçÿTe~.ëö\·ÓsA9úv©×·ó=¾íßï¯-|›qx%B´I ù¶€hà{nj¯¶ˆ|GÑu%¸ÞŽî;Å’×ü&ýš~Ù¥f¤ÇSjÇ|êÑX1¹¡sAW;çõQD²-9Åt¡R ²p›" Z­k²Ô©„".ÈÓ|&&µ^õÌ Èzâ ñFÄ‹ªQqA…*Îzë×áP/XgëçÇÅZ¯c¥ ª¨¨Q¢^BÜN5È#1NÖˤä>Þ¨º¨VoˆVš:KÍ Õ(-%Œ*gÉTô’ñ)“IÝ~´gôÅ}/¡7 u» w»8#„êéUqgŠÈ •!ÚNcéÇ‘¶ ËÍšØÕÓ¶øX)ÇÝÀKS¡LÐÁÁ>Ö{ê. ˆ§0¶†QQ§•ˆë¡Þ³ŒÕåfŸz­-3Ý€ûfÖoÔ™¨<~àý° ™ª¬:PÓöjœØÊkœ;j™ç¤Yokóñ™E=VËd5rìnú–uyDZ”Y€ Ñ#шì¯Mé§š›dÙFdbt{–³#˘‘‚‹¥%y­ 4E’¾U£"µ,Äz£Ë¶”æ¬ÓÆ¡BÜJA>a`$ š §Dk΋(Œ.÷µÞ«DLåUò¨‹ñA@®1ƒÊAYY|°Ðèqt¤ÃÒH›Û/}<ª.XÜ‚Q‘}§Ïa¼×ĉWgô¬ ƒ7~ l'¨-Uj…Ó~gHŒ¯é¹Ãs’ÏN'ïFt"‹ʆ£öèá]“cäÊ>˜sµ¼s†ãù1¹Ë}¼òG™ZýEêª"^BZŒ•·«ñ#’ˆ¼œ‘aÑù9È3A Ô›0ο¿³Í«Ùæíßþ±çñÈ©6ÿóŸßA特AàÂmÃüÍx…|åÁyþí_ÞÆJû¬¥þø9?%?»ãçô¿ü€üÁ#¿ËÕ£/à/ù3îkÝ£ï¹ïeµ<›dcýø'\?؈ùf¿oÄ€<õ²?վ܈ÙˆyÊ*Xä;q±PE3H_`¨]7ØlÙ)!Ø$`Á­¨v>âD+Õê„Jû#wZyç[/âß¾çÅúÕöœHÒ£îTã2êÎÖ±XµÞh, ÃË´“½…ŒÎ\A¸(dE@ƒ–‹ôwdä›r5¥•l—B¢¹ÕþX&eRRÖ=–|>pgÓr#Î"Μ €ˆñšÇ…¨ñ5gûYg4tFTT×Óe¨ñ[¤«¢`£ q$¼ñTׯ ’tg=Æ‹†Y,Ëž<°¥Eœ¢UTŠURP¥…j?"\– ‹´9ICÇÝÍ6·Ô»zÚ9^»Ú“We°7sšöûâP¦¼Y/ûÀƒÈdIi­*B7Nd¥VǪj?Id­–¨x%ZCêK–ZâñøDQ£Mxñ‚X‡ hPÚ\ºt´«¾evøÃB­ѹ¡.õQdk9NÑÌXm%Øù©€BÕ,VV•ÖªRJÍ´£«ü÷sÚ||ó¢|e2gG7ÒÑÒÈ›O§¼ùdªû–95”ðÅú$‡£a=7å@ÜÔ-E.cež~W¯ì·©,Ls#V'ĹÕf/ãŒJ‰$ËŽr®¯óu'Ã'½F“Vt*@‡-ɧ¹R2´ZjÚ”ƪ_a¹­aƒˆ¢0Z dR±&J«ÑçžóNtk,޵0 ØÒc%êðàÔIÝÜãŠçú@êU„„©ñHX€–^}h¥‘+:›¡C‰Ú¼!«©žž­Kd>ßHÒ¨ÈWV(ʘP"ŠÊùa ";TR=\Qßt’‘Gš?´wpXîšþ"é›w³}Ëå:*Y¹W¨jø ®¤CŒT÷KâçhèQêþ¸zµDÙðªëÚ¬ ^°¹!n[leÁÄÃøIKT*~ÝËf‚]o;QÈkžSç:zuÁ:A˼ ‘³TÊ’&9VÔ:)'z1D7Œ-“Ù’ŸXÊy÷B—zåX ,ÎXÖ…¯ëò F•¾‰tÙ4$Áák$¥´–, ¡ªžÒíˆ6$®{ĬKD{0 ¹…¶šÚc˜«Ïs²¶„4+vãtÒ’4F}¨Æ‰hK)ËAÅÍ\…ÉÖIÿ])ha™q2îq8^áá¡‚mmsÇXÎdò¦“)¯ŸKtW?”‰~G£1Ž'†/Ôg8³&çäûú].Ï;$‘£–º:KM+±³Ä•f–(7$ ž’j9gÇÊÖ=É”%›‰¨kAÍW˜’v…©*r„*&V7$Ô€’¤xæt•cù"§&Ö˜Ÿêû“;W''L¶†h)«µŒ•zGëE,õ"FD ,‰;ƒ¤„kÃmpã« n|7Òÿr‡ªçÙ1>Äà uö?Ï•º¼iTj›…²,ØÙXe§-˜«okaÆ”ú}“°ʪ vÉamÏ0sÙ_½ô(ç¼ì™X ™<ÕC›ÓÄÛwiešâGv‘H›ºíaLĘßf'q•ú©Y—ãs¥VO‰½~ɧor¤_ó†ßÞÿ[ì>ÌÏ]´…È*•YCüÛ‘òÇPýC&£/sã±üOwÜ g§•áZÈo¾ëR.ß=Ê¿ùîä–¿f‚ºêüIþøÝ/dÿÁE~õ/o£ÝŒÿùÃ[”_:÷_óþãïãý.¹’?½ô/¸sm?¿öÀ¯²T,n¬ßÊõã¹ ߊ2nP°žY™7(XßšzmP°ž…m¨`}§Ù7ÊÚRAul0NÛÇ*Ú³¾ù­CãsbÁno´ŒÎÄìÏOr‡?Aa!† ü(’RªgoÔ'Ä`0,&+,ÖV2`*eSkŒZ³©6J;ì³°{ ·Ã³\f=¥½Ø¡;™3}{ƒô”%Z5lú\©„r¸¢}Å8‹¯+ý­ ÀDÂÁx1 R*âãB£H 9üº:–úA¬24’®Z4PÄ¢žadÞ®g‰˜³ŠGÖAÇò¤#«+¡èèæ©’ÕÁˆ‚UDÖ7P•ç1•¥æ„ Û–ÈX„7½ÊýQÁµyÌ«Z)×¶ ªd‚A@œwIò.~pJŠ¡ \Ó1 sv”:ã&‚TŠ8OY EÏõ„¢ªº§a‹ ×§Uˆ &I¡3‚D7Ô£éÓhœ+u¬bQ†]„žpøN†Á¬9ž‚)â@Õº’Ñ^J3z’ññéUþ~kŸ›¦û*Djù‘c£|ïlÊu‹)1‡¢Q>6>Æg‡&ðI¥\Ñj³EsÎÉ &’Œî&OgHXƒq–ñ^@£c!S4S‚Å>2›1Yâ& MT˜­–¦ÏÑ^ä ™Ã+tm„¯×qêñaƒZ8FXŠ0`)Ï9‘.²ìnêEÌZ³G•xšeÂîlšéöi:‹!‹<«µ>µÊÓXÁd9Ag19ÝÙí¬ߋɅSõŽ]t”‰ó2¤¹€­F_ß$ÎŽ+éŽ*£C}Vn_ +YY ¬áxÚäPßÒs«Ôl«·E챿¡NëÐCöÐÑ:ÃÇÆÙ7¿Šœ:eJž¯÷ÚÔ‹ÓHën †‰½P…ÌFcôÇwr"º˜M/C>‹íÞÏÈHBQ9ù<_¸m?Ã:víìÎÖøã—þ:oßó¯xÏ—ÿWá?yÁƧxù2Ø@õb €mËËë,*k„µ^Éîçe—Lñš+7]²ÿà"Ÿúê ^sõV^rñ&þþ«ÇÏþv¨{§Ž]µÝ„²õvnZ¸‘×nz/™x)=õá9}Ã6lÃ6ì»Ðž™ó鸰Ÿ Â}6n²NúS½îé¸ÐŸzë} ¢]hÿíúÎÛBïï¼*`øRêF‚Âݺ¦]+†c cT´AÈy I#m³5©³š´x´~š†OØÜŸ Ñ«q>[´²ž5ß'«•œ<YÕˆœ¾v…nܦÞM¿g˜d-Âfc_®#\]©Mx­†d»*Ԭ˼Z¨Fº!'X¯X'Î;œu„> ò(••¡Ó†éƒIǨ7ƒÍ¹ ö*¢b@Eçg¼T¡:Á ÚOÈ É߀&â×_¿.eË &\ÅQâ©D4ÀrÀ–òÞZWU'WµSÞÑ®³ÑåzÂiŠ—€š 5E%D Ã:EP˳¡À2-é êÕ£F$ª ùŠhÖC-G KV^›!C}XqÆ#Ý„d¥©u‰Ña¤éâ†ÚH¿$Xµ„„ØV©¬T¢fàݰř·DÅ8‡x|Lt3ÚÒâžF‡G‡ ýÔ¦ŒOoê‹ôy­šœ×‰ô§\·ƒÖäÖÚ0·4Før}”Ž„œ×É´¦N.smvùnØkRäd uJP C.$--²èTçs’•\lè‰]¥õ /¾f5ª«DeE•«••ÓL"ahŒ ¶hÃDíH[šÉ]Ñ¡Ÿæ¡‰SÔ]Bk¤Ëž…ÝÙŸ’¡µ”F>È_b<¸@éÖqQQ+ºŸè%‹ôÅiQ¯ׇî¦ßžÖêØÕ2–oèk+_•bË)–®Y¡F¦£Sk?oQƒN[ÆÏ¯1½<Æñ;NÐôŠéóà\Äù Ñ­¶qè6Ç-Í‚cc#†æi§Õì*ébW6±µµ‡ühŸ™xMÕâÃ:Öõ4(s*W®ÞÁ#ó ¼ïîGôX21±™þÁŸT›d×ÎWrlj#zÓç?%7|òãŸ]f¨i7÷ÀlØw‚AR )¢IŠ6iÙ´Dz-YŽä(r¹òG¬Øå8•ØqR•ª8%»âȶâ²#Û"¥H”dJ)‚ľ0ØfÀìóÖûÞ»ûý-Ý?î‚$bæÍìäuÕ­7óÞïþºûœîsúô÷,9ÈbXŸõÈ.ylQ¼#Ù´˜ÔÕÐ¥º þíòå“?†i€)&ÖwU=³3¢ç›φc²²çÇ‚‡‹„À{6– é@óVYBÞSÂÓH,y<éó­­fŒ èú€Ð‰ØY*=Oâ!º^„»…êÂÙÉW‚ÈúÓM0:–qù[iã+“;´b©D}‚ `Ы㠽ç.Ì2ð“LcAaIܘ$M©3¾¹°Î×öyx~L/ò,—s¾taŠ?s¡ÆkeªV4\Â÷ªÓ|·:Ó•=phr߸ËÁRBµii‘ ¨ŒC*ã ]Ìaè¨g#⬠Tr”jŒ0Ã8ÏØ…¤>Ä›ßh‘”Œ a¥ÁpÉZq¦ÞæµÊE–›SÐítüj¹«éAÄ¡lÁ§8Y¼¿Þ5äÁo*åÙ`M=e<žãh°ÊMÙ,Ÿ\;Bœ…l”»¬D…÷‚³Õe…‰ãPw¯gYßGèE/øa˜ªí‡¬‡)›wääåœh,†7å>^7ª¾#ëñc¡úräÉcÉámë²£r)ˆl­šóêÕð÷X§¼7‚àRHC^y 7)èà yü[Y¶.Ñcòp4½)ŒÞªiŠI½ ïs´£µ…‚ÕÙô¿–õ¹!Žõ³ÓSþCÕ’ÆÞSÊ-|1òèíšò—º°¡! ܤªß[z¨Tâ‹­y™”î4>ÞcÄØ{Ÿ{ÂKãÔª0›5ŒkaÜ?:ëËÚ <Üï‡ ûUR[Á&“j&wÞd¹Œ›dÍ ë# e?RlÇä6ã¹fŸÿóÎ>Χl$žÙ4àC%ÿçíàÁÕšæ²Ä¯–Jz¶V÷ß«4y¦Ô EÚ]¤|q°îDùkÍIå9CeRï>KQ*¯Q¡øÜ†É|$KR÷±(¼äd }¦Šd¼O¦§U®5±£Â'Õ²úEî×ÖzZÍÏðÐ-/QÊ#†Õ”Õ¹Ž¿çÂA}á8ãzS*Ù,°øÀãBç Iaá²ÚêˆJo„ëeÐï ,a`-a4&©Bfä]à'…*#¯¼âm‡ñºÂ¡¨Öõ³å‡%gØ=<À ÙëÍJ®óÇÔwŠ]ʹί72 o;EÿÞש}v% :/[¢Õ‚Æâ9²× >¿ož Ùâ|ùà•2öõEožåpt•vÝÏVjT®sÚÑò\Xšõõ¤àôà¼þæ¿{Š«ÝKöò$%×p8À«Çñêñcoïów—·eÌ¿ã×hÄuÿ·ïþY-7ø×'þ‰ÿÄ®n™ªÑw=0Ï£à'黸¥µâ?³sAÿöôª'‰·sT•bC`Ì÷•—inùç.ðé{öð…ìã7ž<;©hþñÇôBç(Ÿžûan©ßÆË½cþW/~M÷´îå¯îÿIž\Üíp[l¡_ Âð~ ÛAè[£ëvúÖ¼í ôíJèÛí÷íÔw ~ö¿¾OýðæËõ žWÎ;š%G\²Ð“ÇNž[ý4±7Xy>äçRðØhƒW“5NÎslÇ: EÜîäÆ|šzű§¨0¤Õ‚Š/³KÓÔ‹±KØ1®2«&]ŸrVmŠ,bíÏIwBÿºœaP*â1¦kð±'Ú4įG“lªB7AIÚáÄˬù¦§rÀ’ÏY°»ÂWÀU Ì —òlM :ŽLþŽ}q©ºz€§d,R'#òbèÿ¬Ýå‰þÉJ|&®rÏ(b8Ìq“¬½”§ Ìèñ9¿·Ï'Y½ÌÛâÑ„'Ùyw{Ì”v@\õø‹Z*ˆÓ!QÄó(šF¹ú”Íi ÇhØÀFS— YŠÐeƒRKìû˜wd6-篂W«¬Ä}~{GÊoìs±bùðz‰Ÿ>ÕàóK ZEÄ®¬D;ߘæñR‹çãc/d#ŽnLzøK7£0 2 0^ÔFÉЦ–dcD°>¦9íj– ñ¸($/ Ca+ Â(Âä†zk Œóœ±Ï8fΡ ¸0Ýæ…ûÎ0“6p Çüf“=k3K†Æ¸Bà 6°ŒbË0Ì (åQA>‰Û#šEþhD7Z‘ã1aN œÁ;OV*mÉ'.x¼„÷¾Ÿ¬‹C¹rŠjò"¤žZù\£ÅzçÚ¯|Œüõ0>üÇï>ËÂìˆÒ­Ú+!•¬Ìê±ó”û‹ÜûÉý\h{*ê„ÍÍÒ6-óÜñœpéö—Kì¬w8t°àçþ—c;Ý}‡Ô¾deëËvïý»ÂÙÿ._9ô%>³÷£üë_ç›çÚÜ>SÅxá\&ĸ=Œí‹|iÏ-|gñ(KéêÛKùøùýœÝseJ±aœýá`´'_]áOŸçKÝÏïßϯ=v†ÀÀF¾Î×—»šwó_\÷Óü̱ŸâÉõÇyfãi¾°ã‹|tæùæÊ7¶…õvÛnÛm»ýÿ¨Àßãý¯†~µ7XWúþûÑ¿®bŒ×ZEs+Ï] Þ•þÒ»o}ÞjÆH­V‘››ºõðñ☕>i2qÒ%6*ˆ½Qè åÆãä ¯˜€{.àúÑ4Iµ`£4¤¤‹W9SicåÙ9˜Vk£N³[¢’¡•꫾OǤô]®"°4LÂNßbÞ5H|D%O(ä•WÄ8qŒG^‚t·et0×àú‚to&ÓʨF¢\ñØ)ËX`/zŒEÑ…€Òë!Éé€ä”Q¸ޤä|@´ø@á8 Lj #,Éä{|δÉY0a˜s´1Ô¿/õy¡Èø«Ý?³QfG嫬 × ‚µÆzÓvÒºãÒGZ·°î :#Ê£âþ&I¿ƒÚ}:¯&Ê7Dk¦CuZŠ7f)'X-¤¡#¢@¦!í˜0?Û€þ vä(òÞü1ö„iF˜¥„E†ñ–ØðŠŠŒéqÊÉr›_8°ÈÏÞÔÿ~CŸ×–ƒÃ„Ÿyc†ŸysÏ/·˜¶B_ç[YþCkN_­Ír.H´/qér´ÁÌìP®Y`òPÍ~ÌT?¤9@ÓýŒÚpD}c@+ÈT*;ŒœŠJ‰,¨bëÓ¸¹L¹I5™•©Õ¹hÆlØ‘N«Íáëz±t†ûɪV¶âi©ª»Wpçùë˜ë5(g ‘ 'VY2© $†žê Ïp)f3M©Ÿ^UÖé1¤ÃÈådÍ ƒA\Jõ즻ˆveœóAV(HsÂ"#Ì3B›_ª¥.Dìœ.–C¬Ë”»6Çšþámëüâá.sẎ6+üè…:?óæ<Ÿ[¥âŒÂ²ÞŒkþ‘J“¯5§x!,sKoćmÛkv6d OG* #ªÃ„©>4Nµ4e¶ßWm<òIn¥FDäµ¾Ú ˜™—¦fQQ£âêl*çYá¤õrã'«‹ÚL†TË%UÃÄÚÜÉÁîíîO³§3«ÐØÐùÌ®gѯbʰ«Ó"è‚‚2%†þ4#wNß|þ8¿úðYF©} 츜|ð[QKÚWßÃç÷ÿÇÚgy½{ŒOïiil×=J„nœÄl2È÷ðøÚ…·ßï<ºûð´ß;_áø¹/Ÿéü^ùÀw´Åõ!×-Ôõ±Ûvp~u ãç;,§KÜÒ¸Mw6îöÆçxµÿ ‹ã‹ÜÖ¼œý§†op¢|[|Àúã ´y7Ú^íae+´ºÒÆoq®W À~7z_«ar¥ÃžßâyéJs|?íËõ÷~­×º‡´…±m•Oº ýx»•ýwµ1Ó—[Wkp\nŸoem¼gýqþ\‰wï*g߉€¼óóý˜¬wùÝå«kØÀ\¦Ï­ŒéJý_é{WcÁ_E¯-0WWŸ9ÐäÓìÕ«'7&¥øÞÑ>÷å}ÜqÏ ·Ü1%çÍ^ªTMÀ‹ñŠN'«´9ô5¶^7nîÀ„FÈã4Tʺ´Ë]åÑPiÒ°e5l…–/kÞÕ©‘ªJ t*¯:æO&jžÙÜ™iõPªîÎÛ*°ÍBEÃR´¬òÙ~ËøPF±¿Ðxטl.—Ÿ3Øi,#uƒé p •/ˆhÉ ­ìé;ûÃéßV =VɹkéÇ6+úÁa$ã!“&¥Ëÿ Okúÿ–„œYWVoÜd}ÐÀ“P/çŠ"ð>I’Gaˆ¯ÎÈW§ñ¥a¿­hýœ‚A_A–Vµç.eê’ŒPˆ$ï”ûT/Ö…eÄþþHOÍvù©ûÚœ«zþÖÉÝüõÓSú‹fuOV;Óº6‚ªÚ”ôp¥É7jMýnµÆ®q·Îî:Ì×Fʧ,ÞET†^¬J*¦û)³ý¡£!•ñ[+‹*øéyÂú´jÓ ¥–ú¯ÃQÎòèÔk<5s’7–U±%æ]‹×Ô\Þ`¡ßÒTZUäBò¨‹^©ð9ʤ©\次{¢N%[’ï Ⱥ]6¦×Ô©Ž¹8W×ÅC%í?Óe×Ù±l œ÷ÄNÎhN?c½\à5ÜÈ”"‚¡#èYòráìˆ CÒG&õ2š|]ޣ܉ÜA%’¯Æ˜Âɯޝ½ÐÕw_ ШØÐ››OéXû{:Úþ®^>ý’^>ù:¯=¶Ì…ïÅ:ñ°ç7¾ö'†ËÚ§:b¯WU 3ÅfŠi-Ú3tl—Z% Ó/dí–o×ônÏœw²Þòàž³§¶OÿÛ±¯êæìoT•ºeäïk$ú¶f’ý¼°^Òjº—r4¤™ÕçïÛ­82zü•5F™ýC²Ë{”[ÇîÛG9õ§ÏsIFi-]å‡çÿ„æ’Yÿ®v •tIÏ'æd3ßйáYÜÄ—q[|@úã2ú{«ëëJt~·qq™>/÷ÌÕô¹•¹¿ˆ¶0ö­ž©¶ÂÏkAt™µs¥>.Ç#]áÝׂ€¼WC×Àû+}Ÿ+ðôrô¼–uª+ÐøJü}/²ˆkXg[ÝCﺶ]°® Ö½ÖÛ²k…HßsŸøènþÎß¼›Ã×71‘¸ãc3|ù/\ÏG?µƒÏüɽÜñáî¸k†[ožå®;ç¸ëC³2;v:W%æàè0.‹ÙßpkÏëL=çbM£xd3)J ¡ p¡“5¯‰KY@‘ kq왹&7ÙiÝ2ž¥ãsŽ'ë:­óFyWëËL%ÍÚ2%â¢*)ýhÀF©Ëz¹§‹ÕUJ6¡â*¶Ät>E#«k¡7MmPÖê\—ÅÛG ê8 ƒ¬t)`\>vØZNQÍNÔÝ5¢hJ¢2ŬÇÎyå ìM9Á>Gy3P܇4q¤Çæ3ýÒáÏHJ©ŽF£Ã—È£ ¶ÜP2·‹rc–ÀÖY[ϵÖðbtV_½á ^ž9˫ן§•Ø3žåPo§v§)%ÉÈP”œ|œØI?S1€ÆºSå\ÀòñN,ìâ|iƒ©î9òæ@˜!Q6¢3å4¬Ç¬,Lc¬á–§7¨ofJcx“´Êþ­S° § ® RDسøÜR”¼œ™01N ÁØËäIxI8Pjña’<†Bk®à_|{Eë½·,ƒÃ’»…“1$cŒ³0ì÷hoœÇо8Ò+Ë‹|dê3a•(uív׳³Ö¢±#¥ZC§WÇ߯þÏUÉÄKÑ!:׿@#iðC»ï×ffù7'ŸäÃs ³eQw"î¦p'4S:Ë‘Æê™v—n¾@½óà] d…ã‘—Vé òïÛïÙ•Sµ˜OÞ¹KƒqÁ±SXJ—¸·u·7oçdÿ„^œ`)]âÕÞËüÔõÿ%?²óK²X^ê¼Há‹mýñé÷@×m¬÷ÏÍeÛëêÍW»æ¶]°¶]°¶!tÞoÝ;Ýq猿íÆî»{ž›îkiï‘û÷Õ†)›É€qûò¼ÑÞ*ì?XS£“ÇܨÅîî4r*Ù1»Æžå²ØL ¡C7Är 'B/"gˆ]€™­½ <¾d¥Àc‘ ;‹*;F-îëîcǨ©¬”ùªËºöxºz‘53¢š*\d½YЧæäÏìùs¤6U;[ó}Û¿”MZÛúãýÒÛ.XïÅ0¹ÒaoÛëêèÛ.X[§Ý¶ ÖáŸm}ës-BèQh´Ò.8·2’s…öí+« ŸZ\æI}AÃx£AœÒ7)™+”d ¡bådZ*-Ë™ ú¡åDÝ+Åk×FÀ¨bÔ‚ri®S*bª>JTÅR(ŠJ®ÀH×Û½6´dÙ~¤dPæP:¥[5¥f^â@Úbhr½X^Ñ å:aÆÓW•HMb…“ˆ_!'G–޾>¦uqw‡,ÈU)JY¬Ý½9ͧ]H#¯ªÅáÔKrúIN½_b®]U”…LlIŒ#.¤CýœÙ¼ËëX~kÿPÿjÚ©[ÀTœr³†úËãT?‘÷ùÓŒÕ2^.ÓÍw¼|àUØ EVE8yo'&"ˆ@JS0u@¾¶_›‡¤¡Àäñê  ‡Fõºh´˜œR—Áãã*.™’œ#^;KÔ>'…˜ÐãâXÍ¥q!ï,QÐWŒˆüCAžKJ3íÕòN%ƒlðÍùŒ·g ›7§øòù(«Ðwž8·:…úê̔Ζ#í‹GúRGw—:ìõVÕaL³1¿–©ÙO©tFªtFxFyÄ ª(w!¡‹Æ5å$œmò½à5½8{F'\ ½¯G=(ko–_<¢›WöPKK„Æ`Bá pc£¡Í°k/)^ñÔ7_Òk½/k㦟äÍûîVïö1𛓠lì¤â Ôqân Û UZwŒª–Îl¬Õ¹)J¯›ŸÝP2.HãÉúŒ ój¤·ŠMº¥uÉÈÈHIÖá ‹—Y£¨°“úK&¤Pî¥ÌAdD-A2ŠÊ–TÿòË R7±Î¯B?7ÞàÛëÇi†eí(Õ(Éc,4ÓYM…Mfš‰Ê­œÔô†ö=Cèý|¨ì¸KΗxj帎43f*#¬[@þ.y2äÏ©›—xzý¼ü%·¨]3e}ê®]òÄkkÖ¿«[‚µ^·]?E) õâ›m SK`}~á‹„ ôíµ‡´ž¯ àü迾ø« MÌMõ›ù³»ÿ¼nmÞ®ç6Ÿ¡›oþÁõmýqúƒm¬÷ ÙvÁÚvÁÚvÁº:tç]]°¶ÿDn°vïšæïüÜ—täÐu¾T˜ž«‘S¨È-Á(Â&–˜ÉøÀI¥<Æ`Ô¯[UK{ˆ#²ÒA(9OË:ÒÀSV.´øÐÉ–~ÕRD:Ò¤ œÄ$ ÷-ï¡·ŠÝiv*YÆõ|aüãOsÀ5™Šbú&×SZæ¤:þœúŒTPñ‘Z$„F¾ÙNtÝóuïbqþÆ.+ÍMúÑPR—^Ò÷…qXœv æhjä5¦GMÒT¨öb oeœ([©âDb`8*Xñc}kÇ_œ2<›ñ‹ ýXÈå#>r_ÑÈßì!WPáe‹Ø;]*äw ±HZøÊ´üôa¯ú>QÛõ}Pž"ð žÒh»lŽB²¾ă֤#â4#Áæ²Õi\yš°ÛVÔ>‡õqa"‚Y‹dX—˜Œj¼¦({9+_@‘9¼³˜ÐOl ÀQ¢ÊÉzM?{Çúôß¿x G6Œ•–³IÌWg§Ù¬ÃÇË|Èô9RXÊ£X•žñÍÕ1ረ“aFŽ,H™K ˆð£HnPbÍæ¼ÞXçdeE'ö.²z}W¸âtwèÆ•=ìߘca0…7‡V.òhÑ×î ãùßðïœÔþÚýQ®£'.ð.«õ•ÿÖ/Ü{ Qôšä-¡d´Û¿ãw®<Í‘êPÕ*fhõ-½iXÙÝd³UÓõ¯uý‘§; ë.„È…öRþe¼—Ÿ¤5ù´AÉØ`›!oíÍ»”º98L4Iä ™E¢y•c¼³jÌž=Ûç7žÚÄLk½ç¬cý œ­Ëâ©…Í V3e‡Ýé5(ÏŽY·F©{@»–¬S½³Xçøé[ÿ²ÖÆ©_¾¤CÍ2#¼û X®§?©À|ý¢w|\ppg{Oó›\lÞu®¯_ì* ?þÙe–§Ž¯jdG¾µøÔìƒD&¦WtYLßþÞs›Os´ó<½¢§ë7û/ìü“šOæYÏ×};[ÛÖÛÈ6²€l# ÛÈ6òÇqƒ5?×Ô_ÿk?Ìý÷Òþj¢¼˜A™°R2œeBJ àåðÞÉFÂÆFÞ <´”rBJÞhße¡£y5†"ÉQÂZ= _ :/aZMb/œ‘¼0€‚vpµ!_Éeëc¼ý¦²XyšI¨ýQEû¨±@…½¾¦7ÕÕ1Óæ´zê(ã|Ø×uuö¾VSÑð ¯+„§Q0bŽ´VÚÔru“‹Ó]ÆJ53lP³ÍŒ̧SÄÄ”ˆUÉ ƒ$WÇ8^vcžvV_­zžbZƒ iéLJ]Ý;,˜îÍä u•h4œ£H+r6u!¢ ‹LAPÌ”ç´nDõ}"ªÉÅ‚á&­p¾v^›Å :þ«ÕeõœdΗ”Ö¬ÎNunÖrºe¹ÐòÔ4§(žÅô7ˆÚ¤"ꄱ…¢´9 Pa˜)NÖåð¸,–{\Q yLˆyyÊÓDóú§Ú|{v•¯œÙ«/.à½#°“Ó÷7ZSzª^ÖLJ}ÝÏPÍ<ƒ@õÕÕ^¦phñÖ%%åŠ06Q4.‘¥!£B¼>5Ô37œçøõ«œ?¸®j5aO>ËuóÚ³1£fVÆ0.9¦@ÎË †Ôì€g¾µÎKn…áþ.ųŸâã3hh¼Ú{e[l# ÛÈ6²€l¡oÙ*¿Z+o«–×Õôÿÿ‰ Âõ>y^e¾u˜òð85:,Œ ÑØ±¸£Í¨œQÍ*”|‰Ø'$*cÈùŒ8CŽ‚,†Z^eçtªcõJ†^²y㱡——g†‰4Œ Y¡w IEq.ø£[!Xiàj©lk¹™Ü<È|¥ «e sÐ79ì[ö- âŒéë¨Úœ ÃéR§ÛC¿Y( šd êVs¥1Ø4רި z22$E@ÃV˜¶-5|™Nbô¸R^ð–gkcù)Ëgñ3k?xÍE#gÃÏ’º–|ž –d’†5‰0qETwà[‡q­ýøÙCØò”ºe‹óõÓW91uŠåä ‹åEë›Z¯YžË9_‰4w¼ŠœxþîŒWxNωӳb‡ÝÉîl‡ÂÎ*ñÚ¼CÎF„®O9YQ˜ ±®F—TfH¦”cIdTP+ Lb&ȇñêÖB:¥yFfžŸ¿þÿ÷îS|åô>þú‰JŠŸ‰q]üîÞ DMݤ”Oæ#êVPJGÜ/ð>À…!¹I†%ƒ2ˡׅʘ'n8ÇÑ[9·]A]ìMgÙ5˜Ö®Þ4¥qB3‰E“⣓:i±nÊ}üjß|ö<Ã}–°å9þlWŸ>Pç®#u–—½þùï¬0wï_Ñ‘}J¯`ÂBÖÕ•™uìòCÜ,ÑÕ0íR×iTuœ=ؤ[¯i×ù.»Îö1äeCTh‚~À$Eñ%ï´iÓPê@<éÞxâ~•D™ˆ #“yžÃ8!&….|æ&Ù¯â*!F9mSèÿÖ¿óäæD¸”uxºsJ«iÊl\£†4ó:3ù GJ×kï|•~m…• ûÖÝÒUöóµ¨Ê—|ŽÚˬ ŸãPàଜy窛˜ÙÏë§ØÈ'¡ìYî¸u“;k|çÅeÆ™{WyÙæ¼¹ØÕg?¼—nßɯ?~šÕq›ï®ÿ®VÓv—öð¹…/pÿôÇÙYÚ©N¾ÉJ¶ ÅñE^ûÝKézïà#3÷sÿÌÇ8=|“•tƒáå·õÇ{¿Í~/ç€í ô÷†m¡¿7ä½|ÿZæyµê[9¤¿oúã=¬MÞãÚzÏAè¼O‚ëjaÉwƒÔþ¨ÛûÑ÷Õ¼c+Ͼý̱—NòÛß~Œ›>Èå= ëCß©¥x«ÉAÌpÈ‹ÐGT\•8 ð8’"àžó7ªžÕÏjbÉc‹‹¤¼$ŠhÒ[Ù:š£‚alèVBºåo<‰-p‘…qD´8EÑ“ÏuÑ(Bî’o–>tØzá$±¦ròÓÄÜÌia˜ò /•6xuzƒç¦Vy"\!wEã3äQÄt7fçJ™F§D` äfœ²nú,5{¬·ú²±aïpŠ›\“»Ý4ÕÄóéz‰?µžr«9O¡‚îpQ>ƒ'ºtïlðD$o‚š7à§oÃWðµY ã/²XYæèì œ.ŸbµºA?î©_É—ÆåBÁHÜñh“J7ä¹ûƜٗ3ÆRÈsÿâ?°¼ƒ ³B¸zRK@F)jSk,D–4[a+–¸è£‘¡>´TlJy&ÁÿïKœXhbÌÏ—Ûüýr¤W×ß;v;q‰AnÔ¥ï(ñ;fŠ.㋾G#´˜±§ÜÉ ÇC ÷£ׯðò|‡cûÖxæÖ3¼~Ó yÃrp¸ƒ›Ú»ÙÛa¦¨Qs%¢Ø•Å˯·µîzþ´_ãù£gÙ»6 ÎF¤uG#O=Ýãµ(ã¶Ï49stÌâ·†|þþ)µªß~¬ÍÃ9Üóc?¡j°ßGÓ€Çù ^gXÛ<®î»~!ôŒÏÔ¨ôVŽ3GBÖf[D™gß›Jãœ0^Ĺ.ä×xp!ŒZÂQÞ˜$O(æâÉ#¹#Ê„q"9Lî™à{’wÞ+w“ç"á¼¥2ðÿ¼¼©_zhíD½Âóê`EOtÞô];¦•¨)¡^ÔØ,°wº!SÉüzÞe<¾ú÷¿¶y’F\åS»?Ã…þýõ ðä>µ¹v”^ñë©ã©õñ%A$¼gûæ«üòÃg~ÿB‰oËòµÎ˜;|ìÖœZêsâ|‡¡òb÷¾¾ük¾`GiŸžû,Ÿ˜ù;’´³6kÙ*½¢«;Gýo.ý:{Êûø‘Jw6ïòKãEÚÙ©K·õÇUê÷i¼ú€Î 4]ß‹ñ÷AŒOÄ4ü Æó^ùò~ÑÍÿ1­™kÝsÿ±ŒÃÿqíÙøï¶­mÚêßØâ»¶Ú·®ñùâ][뮕~¿ï™4Kõ‘O.(Úè|kÀ0pªféÏkÚÕ„uH5ö=¬Ï"4‰J®¢R(¶7÷+Lz#éépÏ«b²@HY‚\(aP ¯, ”FFih$yÅÃHÆ{å;7P((ŒˆœTI’kŒEä0Öh‚Š<² N)Ô0 T *º)Þ©n,èŽW[ºueJ•\ƒ¤Ð‹´uÂljƒ¡²ÁP×o”UÎ#% UÍC•r1¬ZœÉunGG¯ì¿¨åê*í³V¯bµ;ˆ´Ûº7›Õõ9iI]3¯Ñ`^ÞEBF87‰2ŽB™À…‚hV£ù•…N+ÑŠºk§½~Q³Wuvÿ²\œ) rùÀ)ô/¯"rRj5ûfÄu/V´Øòzìž¡ÞØ—)uV©·ºqA_ÚºK WO)*ºJ‘’j_ÑtG}³KioN¾ˆ•ªi[EÈå(qc™)Œ/Õ©©ofÔêϪcRýóë^×zœêÇß8È­KÓêö¼Fµ\o³|=ŸÇe¡>§®ngò=¯ÊºS8 D&uX.úîMçõòU½xçùY´3m鮥ºum¯êyY•R$RœÓé§úÚ¯¿®ßúí³úêo¾Ž=ÜW}Þ«ôR¡}A(?*¬êŸÏõÈé>µ»JÔ¦B}ãVõƒûkúüGZœ^Lõµï\ÐM·Ü¡ý·ÿg$åŽLc ëBy‡œ×ÚÚ/ó…æåúòv¢òÀɤN'omh}ªÎþ3]í>ÓS!Y)²7*.y^É!/¯Áœ”W¥R×+飴%å‘—³– C¡•Lîe†v²V1òxÈȽ0ÈT•ë^é¦ú¥ïµYYÏßOÙs9yÁÐåze°¨g»gtsÓ«jêJl¤ÝéînÔm»æu&_ÔZ/ÛrŸ)s¹–G«úòÏiWõˆ[úºmÖhl!ü Y¾C·×ëzxí‚Ö34L -´Êºíú–²ÜéÙ“ëï:'Mêkê{/-é†=Mý¥ëä…ŽN/÷Èz«§7Ÿâ[«i3ßÐL¥ëŸ.ùõ榦›¦]æ{¾¢®á£ÖL{¢H>©a‚¯ ”q9%VëâüÎoL­ú³éKª¿Ô&9µÆf£ãO}4gPÏ”2òN‡,,X®õ}š[¼TÓ¡[XBÿÐý=-ÍìÞ(†{×øØÊnv/­ž ¤u•ª¯†gPšRÇ_‡V|”eJ‚®'/ÈòHÞz¤…`¢)Æ)ñ½h 4äã€rý þ;3üÄɃüµ—o ?Îý :ÐÒ-𨙦3¨òÉlȽݡ¢¶'ÚÝÀr|ºÏ©Ùߺç Þ¸nƒöΞO*!>{X·_Øïw¥S y_±ÎñÜ‹«zíäÿúßçW¿þ¦¾÷ø"§Ît}yJºï³Ó#qG˜ø)h8m|9 ´z&åñ‹ö¼ŠÏ=ßû—k|òΆŽì-óÐ3ÿ½3ýéñŸë«|á(Ùuó~\›—ñg}ߎtï¹Whî^aøêáÊ›Öo6B¼ušÒ¨àºS]Õ6 ”‚q".ä/¥HF^È{ò2Œ¦ AîI:ŒMƒsŽ €¨&Ÿ¤Ý5 ÂK^Ö‹ÌÇ—ËúÞóðÊ_üÖª?öÆP\9Pw«òîûÉŽ?ôŒïÛ”';縘 Õ«ÄÑ23Äì+n÷{gªL§ôÓŒî8Û‚Lü÷@c?_Øÿ)^ï¬ò/_û5ÿ‰Ý%•"ë­Ï%7ò«¾Š÷}]à<”âÀîû¨–~åÑó—Õ‘¬óäÖñàÝ»iTbÿ§Ï½Už@C;àùγz|ýQ~|ŽÙdV_\øSÜ;uûÊûhgk,gKœ¾ÉëÑŠ¦¸¹q+ŸÛñ#$AâÛÙí¬½­?¶ª?®í¶ùrtô\> øZtÿ•èá¯áìr¹±n•ϺŠ1p…u´UÀ•šýi﯑®WÃKÏå“\‰¾~ îCþ2üÚ*_ôöéåèã¯rޏþ¸‚Œºš5é·°vüä!Ûí?Ù¶¼4¢»’•²XD½1°~RÎÂhƒf¥I»Ò¤m† í"™RT„týoV b_åºaDÅ9²$g±‘QNCši™Ö¨DzòÀ1HÆ$Î"ò9…YÙ0,òT¤!d Ø3¡ñؤ0x ôý.Ioxã)¯C;£Šáº¼‰ëÀ°ÎÍÓ-^6mÃ>¯±IÛx-\§T ¸!nQ'fwÞ I…È…ÜðR’5´04ݘ¾ÙÁYFdA[ƒÿ—½÷²óº<ç~éåׯ3ÐÈ Å%ŠTN–,Y¶¬±Çag=c×ÎÚ®šÝZo¨©qm*g¼³k—ÓŒkÆ–-çq’(Q$-R bŽ rN»_~ï‹÷ì R²DÝ ²¤>U(ô{ï~ßM'ÜsO"SCæQã“y*ÖÆxQ‡ÅJÀ×¶ÍÑË`tʰáK¾î2½5äÈm-ºÅÄÆ(ÏzÄdê²þLމU&f h5¥5±£í‘kç˜èYjMŸgI{䛯€MHüë‘ĆØ:ˆZ„c–”ŒOdBS ç•pDxnp'†æ¸uv€ZO³˜2{MŠN8%Ô‘>÷¶f Ó§·5ˆÅ!ÌeÜ>‰AXß«²­>ÎØ¹¼ÔÁ5:”Z˱cM^yežÅzÈýž&I2ÒT¿‰‹ w|¤FuÄ¥óõ(’ Dz…”3õˆâ„Kàžy Á¶õ9>pk•™FÂ×_™§2¸žÞ–ÛÉŸ>‚žPÊ›Æé|pˆ\0α©g¹Ý?@;~7ÃD–S»+„9ŸÍ“ *õ“,Õés,Kçè…â,K\.¬.Å,ù]0¨Y2€¹±à¤‚ 3Ll5K|S¹K)a^øÍ¯Îò…ýÍï˜Aÿõy5åïó\ãŸg(—g1<Ë'ÆngïÐ~ƒ¿äl½³¢÷*0œs9PøÒ©6?¹{€¦5`ºX3EÁÝÀ¶RXRNÏtÙw¢ÁP%`ï–*¯j^ÔÖž]Höð‹“üúÐ~~ü½ÛùùO]Çï}é0Ý0%ÓìXŽ©hŠÏŸû/|{†îåccçG×ÿï¼—ÇáÙ/ñJëeþ‡}¿ÀM·ðéõŸá³~œwÝÇ?ÿ:i{M0¬ÁÛçCr•ÀÊ@cm¹×àûÖïrh4:u‡ q‰®ch ˆcܸ„“æIú›â6¸‹n•³AD‹˜–×%v,Å,âµJƉ|†£>ÚE¦Ê-¦ƒ&¥¾a¨[%ŸúiG ©Éèú}2cñœ kë0FÁø–BÏ!SEp¬PœìB•„7Q±Õ…âœÁM =Ðìb]¥—‹)•÷¤ãô“Œ9'dÚ yÒL‘ñL2K[6y Æcsn€Ý^ÀõîêVI¬a6LÁ.2î98Qk5 N¬X·€‘Žõw dž\7]£` ùé”,íqúæ63B\j­B‡T\Ô(ëŽ{ÜþRc ÑDL·–à8–=—\¨ ´ ªCdRhÄM"B¿Fsp'ê!Ž*Žd¸&äœñ0ÖaȉQc-à¨ë¥:n…Ôõ°®Ë©bŸßÜ|€$ÉøÅ×Rq g7G´F3QžýõYa‘îÖ§øB+Åípv¼ÁX·Æ†æwO–ð2‡±ÖnââøPrI4cßþEž|jŠGŸ8ÏôLï¢ø·åú×ß[âèK=FO+vy„9Áµ‚ô3ŽÏDÈ^‡Ú¨Ëá§:Ü\ |ÃÃ/µ85ŸñÉûÆÉÝú´ZGñGI_sceŠ˜ñÉ.AßbuÉúá¥ò†R ™%* I^pC%×Tâ ŸÕ,),N&H¦˜x)«ÂW7Ö¢©Å5Âbœñ;-ò…ךßqzÿ¦€kZY—ÏŸ?޽ì5êq—®¿Žz/\Ñ©IU—*Å‹(üÕ‰ïÛ4ÀXqžŽ]@¸—HfWùf~hb‚¿:ÿ(§fº=ßæŽÝCÜqí0¯jbŒ¼¡l\ >÷ÐQ†Ê9þùG®e±ñ‡À~K©÷3ýÓ|þÜçxdþï¹wè=|rÝñSÿïzO,>ÎçÏý/5^à¥Æ LGSì)ï}cß×` ®.ͽõ`€Âš²߇ ÈÕ΀u5¢ù¯$KÁ•f^Xî{¯¤ÝÕjÃ3Ïñáô¹·V¢·˜1?â3=˜›†:)ã ÑÎ$ù&Ÿ¼éÑ´³lè®—Ádœº7Ï‚F^„ÛõÙUéù‰ÔK}NçØ8_¢Ö­ÐÌ÷ ’ÃÉ™dôü+*Ý TÃ’e )‰SC©éâ$k–vÖ\˜’òFV"1*dú ¿0ÐãÌÆ¦äÃW¸©»tÀô ùžïòqÙ&i‡â: 6ädÚ”×hp$®sú†>²°Mƪë¹qa”á^,e?̈¹®X2 CÒ.³•¶ôscŠIÀÎÖ Nf°~&ýev1®sŠÉ.İðú I’ ó}üŠHTͰ#ÆÀ"NjÈÇ%-ç+êGq Ò‹†ÔTTÊæ<~h%£N†/Y"RÏy”‚TœN¬‘Íð\—À»:^Ìq±¾ˆ"¼ÌpE¯Àd7b9Ö‚GÏuåŸîpŒÌ™#Ka8&òo¤Á•ç,ðÁ[ÆÙ½±B)çÒ Óe­ÑÏŸ•ܾݱ‰_8ÏL½Ñö“áyþäüñØÂ#Ü;ü^~xÝòßnúç¼sð]<6ÿ;ý×üîÉßW\¬¿&?VÞß•V»Ãs¹Št$«Øã•ÎK®$¦–÷ÎK¹í,7ÃjpUV‰+ík%çÎ+Í€uµèæjdÔûŽÈ«D¬vß×b@Þü¢ã»Æ‡7îdÐɸs[š/äš1žC1êÅëO1Ö™Aéeˆ#F’Œ¡¾Ø¾ÆN IÀ¦¸®£IG:’Ñ0©ä#G‹}ϺRM˸™`’?º^+J™«¹ÄÇQG¬ÉÈ<´UM¤WÈèT22£`‘سdFéSZ!a!a®ÖÑsÃuiVCjS9‚žCg<%«ˆz©A4ñT+ ÍRBÏË—B–ÓÀ²ÃŒpW²IîëVô3‡ ôbýCMyxä¬>ퟔ—‚³ì/Ï螨"®:`]|ñÕ#FÎ÷ymS[Ï -ÊÁugˆ{}jG Sþ<3miWÅ‹ ~èàEŽ58jÄKz‰HN=‚J ·ZмW ”–¤—)%e-¦%ñ¥ˆ:†\ó4~ýµ¯-$⮨ñèŸ/0ùrŸŸüÀíÐÊýOÏ3>èu÷ý¼$•M𬠥rø¹ ÚÌ:Òq랉#â,‘6=н„ú@À¡w ¨uT¶žZ ²˜A"b¬àg¯»ù‰Š]ª•Ù2Äå%ëG¾qEHŠKuÑýØà&‚ -NÏ",¥Æ€&‰3ÍyFŽ´b~ïùé¤ß>¼‘M±K ý²yêbXg,?Âí£7ÓˆZº¿~H^˜‹t]¡(»gIí5`= gpù(/5æh$ =9Õå÷­cÏæª¼x¬ÎùX”ð¢òc¾ê±É–|â®Mܺc„ž?ûºå䢼±¶Ù×z•G¾Ê‘Î!nªÞÌF?LÍ«ñàìz!ÖšüX¡üXáxÖb@Öb@–»—k1 k1 k1 ßðàߟÃf–ÿ퟽ƒ‰¢O®Ý¥Ü]ª^/åyz£å®“ÙÔ©r¶t5û2YœàsÌ)sCH2ÈXäRéÖy¡2W°˜ *MÔ‰è—n‹ka€¯†F>¤ç/ù™W¹ģæˆÝ”žÑ/&ôMB¯”’ A¸ô|;×£ôÈppG;ìS\tiŽÇÌlê!.Ä„¹ŒÌ5xêR d"xêS sr"\3yޱ´‹¸æx74ø«]' MÌþÒO{/”ç)Ä>:Î Î:†Êe\ÏãÕ- ,æ—|Æ«3ö剿»œ›XdèD‰Æ¡i2k@k–dÈbÔà6œ¥¹9‡!?‡ $žÁ"¸ÉWLÔ'ß:‹wˆÂãfTjç±Y‘N4’˜&$)6Sü|‚Í„$ÎðŒÁqs|eW‡‡vtyïÑ­x®G,¶—ðèÖIz¹Œ{¢ÞÝÜȺöå®p,*ñ¼É±;êq}®GêgXÍPu£ˆÊê2ªÇ¯ýñ«=Ü`¡þ®" Ëð;¸æÆ"›ß‘gê@Äãáù†~YpUh7¾ø|M.Ñmftê?ó‘QʇÏ?:OÁ­¼“Å¡¼Ò$ØŒt´€?à✌¹ã†& }šIM\ì¢G}{ŽvÙc°Ñ¢Ò ÑÔÁ¤Š—äõe×¥iILùúÒÜS_Q£²äz¥Š‰ì…‚6K1ÙšYˆRcèXËï<;Ï«Sáw /X¿z7í±oñ ?±ë3Ü6zvüoè§G›ÆEL+5R9ϵ“Ü7²™ßïžÂ¢ì°~¸ÀÄp/¿Ï—-òì¡9>tëîÚ3Æ£¯L]öƒa&šæ¿NýO.>Á§×†LÓ5°k°kð]k È÷<üè$],¿öoîdÌÍÖC¼^H-õ838È#׸lšk†m~Š¢s„ª}ãÖ)!¤nF—9­°½×`¦€ké)nœ!}°¢´.ž ¨õŠTû †z¾CèB%u…Z·D!NHœ”ÈOèSúHE2C)*²PŒ ¢˜ØÁ Q!£^ˈ¡”ä=ëPˆs’€ÌĸÚc$Œng”º‹,¸1ûd#b}rÜbǸëô±„<]™å˜Óáñ)Î!¿³û"Çy‡7ʈ)QÊ£3Eîy|#ÅyŸ–ÙüÌ ^Ï¡ïĤ50µ”tÌâ,¸HÓàI‚„øYJi:&5B7ïáÆB db-Ö¸$Ò(@UÉZجH7,,)i A.ApH“ Á5EžØñÐŽ>Ý¿ƒ½S#´%èZ~cûAŸáÓ­m|¸¿™@=L*´3¯™I*Ü1ÝaƒÑØè î’RaRpæ-Õ¶aê|ƒ÷§¯òìÔâ·_M,ó{Óû*8žpîÅ·ÖÊä«]ÀI•…VBa³Çï­ðÚ“mò3–»ÞY¢ŸXZ)ï¼ÖeÏ–;9âîAÌA2ÇcöŽ›Ùöê J§büc£4Ù…v[˜¦Oïà(aÕ„!c³ r )¸Vx½èàë'o¢’yBqNq#¥;*$ÁI?Ä€DŠ$ŠÈ뉩Å(8žðòùÎ÷W}°ÿNÀjǘws¤6¥›~#ÞçÀbŸÉÎ(£…û‰Ò_ ±Uòó¾ÑáKÓ‡™ §ù/_9·nçwmà©óL×/¯¬ ÐSþÃ_½ÆH5Çÿòو⌧^(.(K«ý­á$ß'2Mñ›'ÿ¿5Æ¿k°k°¦€¬Áwžztš¯üÀyÞ¹õÆ7–ëû)vös™.ÑÉu)ؙ͒n•8¾‡~ñ6§çÇ£Ý-ÒñD"ÖõòàRLJ¥´¦Ib5ÆŒÇp·‚ ¤’-¥>ŠQ€J@eôý˜ÐKÈLFâÔS*±Kè$ôr)I^°Æ’ Öw‡¥©G7HɧÂPا–(…Öy:RÀhȬ?@Z¸ç|‚4û4†a,gK -/àîtwœ¹óÌiÑpÿÎIž©LñR:M+˘èåIò\7?ħE5Ø8SÁˆÐKqj ÁPŒg-½ù¦mr[”Ý^/ÃZ!M,q˜á5b‚ €œ‹d*‚’µ.~>Ýþ0V 9Ó€$%‰ žŸ "ÄaY†ëyLW˜®Þx=×OVè`©Ô= Ìó·Î2šå¹+^G…€hQ©-(O—|fÊ×ÏõXw,Â-BuX‰}H[&cpV˜šêðïÛϳs‹«ÆµÊKeÈ¥1—rÃhžuUŸ¶bÁá‘ý-vÜS±ðÌC îªåÙ8ðÄþ6¯žèñ‹Ÿ¬’¬†Y!ò¤µ"Îb“Öþ s-¹k^Â6 ¥ÚéRh§x0 nfÞ8z K¦›¨Ia)îÃëCRXr½Â€££‚ÄŠ -ˆ|CùÈ,ÄŠg„ØÀC'Útb{Eûïj~2Ýãñ©ŸÚ&ˆÌ£2Jff©m&ò›™ §Q”bàb­&vEJÒL½Ïž>Ã/ÿäÍüÏŸ½ßú»ƒnòÄ-Zˆ =«Ý\$º![MvÌœÖj?ä…JIž–qN~|#%?Õ‘~æH4(2èÁb>“™²%,9äN$2ôj¢éu'ÞÉîùQݲ8A7וWÌ¢LåºúØúI 4¤™õ¥Íó˜=¹«eÈ5EÓFé»2â-J‰X»5‰# êkÜÊÄtT\ÇSÍ©±VTŒX×WâG…6N`‰“Ѝ yÓ”%åÃ×KÄõ2Ò$MÅõ]fj#rbdÑvíó]_ñú®œÎ7ô×ön>“Ÿìí–튇¡ú²ÒŸ¯z®¼÷µ–¬›ñ7ò¡Å=•âOd ntz¾Ï¯<{ˆ¯O-|+®é›àåÅè‚wÜ[æŽ È ¶¤rÊr÷;*Ú2*X¤âý‹'dý=Eõ]#§ïrû†×m+ÈþS¡œ<ÛÖ{îÙ-g7~Fd´L[k…4_T·JõÄY’Ôˆëx9ì)O³2´oì‰ë5eôdŠ×ÜÌàØ¥ÀsQQÉ”¸„ô†EEDò KÖÞˆhæ ^ñR£8‚Û¶KÖ ‚ˆª ±U“ã ¿ÿj]þâÕÆ›ñ Kù_ äMxޛѼòæ…¤ô2¼ãÍxÞ¥¨ÿ/¹iøz¹wýݼºp@|R# „©å¾‰’únW¬½C3ûÃ~z<.Ï,¼(Q–ÈžM5*pô|›Ó³ÝÉÃ皸Žá7OÈ׎°c¢*#yÉçç{kòãm–—;9#èEú._—¤ÖËü—ö«¿”O»\d.r Z¹ÈEÖU.Ò¯.ƒ¦/UÕûbg-–±_z‰½áës9^·bùq‰³â¥öP–É#YÁÞ_Š®¹ Ý\Œ.Ѿ'åÇ%øÜ%ù¬{ „½3»ƒ¼Üs\æ;.Ó×ÅÆ¢,/RÿJ2&\.³.ƒ©®d}VºžtÏ>~„—_<"_ܽ•ŸûììÙ}eóµ97ŠØ5¹H½äaÍk´‹G%×ý8Íè$·—À‰ùÞ Ê#eFºG¸qþ”Ly>ÇË} ÅrY¼\Fò¡`"K¤}DM„ÄH †Ì¨™G) £B¸‰KÑ $u,bDдg„$§rfGëŠ u »ñÓáÖ ><7\’˜* p[o‚!§ÅbØda.j×…ða6ŸÑ¨(¥:TmÒª·yæS™œ¿ÁáΩ2·-Ó;a¤Ûõ™ÜPcR{ì//È—wœäµõ <·aN2±ìêæy P`ÛâzyÏäVÆ“>9šÝ1 }ŒÓÃj*žzLÅœÙqó|NÜDI]w)Ò9N1&Áóú͆U!oh’’Ä.®áz i$ZœœËÌÐLJ†È…0Ô‰%I…,t(Yxnt^žœãîxŒ;Ò1dÎJùeK?¾t[Ù?ð|-6ù[}4µ„ÇcÒžx†É0”ûÜ!?;w¥tA±êH?µì˳7u¨[+¶dpú–(¶ä X•v7cÓ˜Ïí×–˜o%ü飋ܵ#kÆÆ8§{0” k=$ðÄ­z¸^7óéÎ ¹á d i””ÆPÂúé˜|ýB‡ýæ¬WHTºÃ‚$h,)Ñ€æEü®ô›‘Ð"é’ÅDXÒ”‰-ÄV¼Àа–/l^Jès‰ÊjiX¯/Zm¡o{÷ëq@(£Ÿ"· ‚øX=ÀGGœ‡§n`ë|aJþ÷Ÿz·ïâ±}³+Â-Uø÷Ò}'ùÔ;·ðνãÜwÃ:æ›Ï™“?|ø(‡Î6×äÇÛ$?V!¯W›åèJ×j9‡óÕô»š9È[Ðöjd1“בê& rtås_nû•ò#¹Štu%{,W¸/zðò{N~,cß°€ü›Ëh´ºL-øršÑ¥n°.—Íár7EºÌÓe~±Û2–ñ™Ë(h—›×¥6nÙ7XY‚ÎL6äþ_ã¥WŽÉµ÷Ü #ƒ»ˆ›…0?uÕO„‘ðjéËØ,'}s½Þ¨ôÏ>¯ÝÒ8qy#[š‹Ü5QÎ…B¢‹ùD‡ÄWͧ/]reÑ,ÃÄ©˜4Ó^.•N.¢YˆÈŒED$u,®uÔÉ–ê6®”&´»9’\ÚÕZ«ƒv)ÄÊ17‘k›ó¤nYSg3;ºN#µ³Ò›/Rš@q\èV3*VüF¦îcuiÍvyù“uwñƒûj²ùT@ï¬jTW¼ a¸SgKzÛd™¹[Ø’ Ý×í"‹Žðäp]Ôõ‹óĦyFÀéäê·(¾P(葽Fzç¢Þz¶ÂpË'öA¥á»$:€Mó”„$rqýX<¹qñõ IDAT?Ñ,1d±Š8ôrzÊ­IÐSë)&ƒ^Û¥ˆåáuSòÛ×Ñk¨ÊÏ´÷êàiŸü3à´àȺO﮲.Uâ/’ºiêΉŠôO$¤}Œ1ü?Ïæ¡“3+¡om%›vçøÐ3̉#¡Ì=ÔÓOß5(‹i¦ÖˆŒøŽþÑgIntÙ}[™ÇÿdQ‚ó–÷ÞV¥ÙÍø“Gxÿ-eŠ×ì’Ù{ÔHÄ8=µÖ—XC Æb]÷ˆpnHcëŠö K/ÁXÊb¢A×Hš×«}`2•$/Ú[ªï‘o(ù†JTzÂßU-ÖÁ汎¨Ó[R@ KE%Í Z ÔªºüßÍòÒù>˸ÁÕU0ì•òªåð]æór1~ôM}tòID#* aF¦è»'TÍ©ÑÛɲóTyzñivl,òþ›Öñò±:_?0¿bù‘YåôL‡ž?'¯ª«UÅ‘wíÓݺQ¶O”itbõ]#ÍorÏ2òFÅÉ5ùq•åÇ2- —ò‚Ð+ÄëåX@.·ç˵0]ªo½Lß+ù|5ÎXË¡ño{¾ ÒÍ–†[éaTWÀ¹„q¹©c/õì¥öP/£ü_îp¯W°.ß³òc•´yѽÈÀ.7y½Ì;t™Ï,§o]Á†\ªÝJÆ´’5Yî÷ºŒ1_Ñ^Ù?©ÿêWþ úÈFî¸îvn«­c¤~X¡õHÅ'ÈæÙý–.êÝœ6ïÓ$2´Ïv`s vá÷æ¸izN77á«ãk=;`)'U*‰Kä¥D^‚X‹u2¡ÔP%ó Ó¶ _]RÍð%—¸š™¹Ty÷™–vò]æ­Ã9×!§enZlhßÝJ-­Pñs´XÔ#]‡T*š·à*$>,VS¢¢e8Ékp C÷DOûïà¦ü¿nˆ2]t³¥x‚è H+TKdÜ`J?xª ÿbz' [ãÉrÊËçõø@ƒ¯/pÜkð³7½Dj2öθ#\§År‰ù‘Y ³¥þ(åÔCÕ8‰0Ú'(v±RÂ&9ÓÀ؈0öq¼/HÔ¦6µ8žjæäHf„±f]á<:RÄ„ƒ©Ã\±ÃŸl:©Ó…>?ÝÙ£ÛeŠÏ Í©ˆÙ<¼´­Hœs8ý§/qôä ý?úì´Õ´g1žs¾~nž§'—Ü® |KÙ·eÒ¢Ž ×ÞQB]añ@¤· tc«ÆTQkaf>A(ùFïÛ] Zt8t®Ï ›}î¾uO”>¤:èàÓšZ£¢aúÓÎãìÊûêHŒëù:1¸H¦ÊÙÑ>ùn¬ù–àØoT´ ÖAãÂ’-$×Tr %.‹ö—2[åÚå Öu;*ž¿naV…x)ðÜä ONöxöLo9t¶Ò°]e[½Bž¶\þ«or}ª(t‹`U¥‡RBœ‘ó,ŸÞôqþãÑÏ‘±¤¼Ùod/Xµüxúà,Oœ¥Rðô#·oä7Oè{oXÏÞµ…c“M}è…óÜÿÌYNÏv^R_“o±üXÆ—»¦z•ǽÒóÅJƸҾߪ½á*Ð8ýåã»^!¿ZI;]%ž]îY]áÞë*èúJæû}!?–3—«cêSøŽ—¡ýnÃjÆx¥óR@N¼ÜÔß~¹)ìiññÝ͇k:uzçpíi2J) Œ‘RîA]•ŒBÔ`Áué©r}£O9ËÑ®#ɹ8~vºÈTÏ'S×(¹Žª¨H6 ,T3jä(JiŸlb6—” ÏÁ¢Û%¬€Ý $Vü4…áŒæK4£ù™”óR¢g‹léui†Ùñ„÷ʼc‘/O´Çp®–ò»#Ç T‹=‚Ôå?m™äƒS# v ;Ú¹bJOËä(˜&hL»ª®‹Í„4´¸Æâ¸Í…IÓ¥<\‚Á"¶ëê1¿%u}žšçL±ËGû›¹ÙŒNxîåyj#¯UË4öMrêуüÒ}Û(/8t›)ƪÏ#§gô—ß/‹ýùvåcE¶îÍkœ©,ޏóýƒ„V±‡‚+<ÒãðbÈmZó)ª®F‰åËÏ5e¸jð©Êu´´‚Õ3¨z¤êà» ®Ï7 ?ù/ÊáyP«õhŽFtÚ/2¸ö‚íCUÕ ýšV“(~g©ÚyHÀ@¾®hΧk1¡}Ýõ TÑÄ*©J¥àp.Jù•Gg˜ë¦«o+ïYI½Š·‡™]˜¿'‚ª rq6¢z=™Fsž­…Q§çqj¯ÚÜ[½„?{ô_{eŠw¿cwíe]­ÀÏò:î¾nŒ¯¾4É×ÌÒèDL×ûkòã-–+xÏÕã[¹/ÿöü­óÕœÛÕ^§•¾o5µå¾“|ûË;þÑã·ËêŠù¬Äj5¶ÚBR{¼}…¤–Ón¥…¤®^÷é>yà Ý’ÛÓdaúÝ8·W¶Ä;)vö©›—TËämƒ²7©ƒ%—³íu²0k¨'yt{…ÂàF†úmzIJË iÚ–Þ<7ÉpØg¡ ‹ùŠö´!­â&¬)’’Ð¤Žµ1ã-CÕ ìG”±”˜Ó°_:%éG ¢ iEC3.-ÏÑ|±'‘ÀtOé¦9ƒ2õÚH®eÈÊÊÌúDgk0øjLçùI=UoÈÄ-—´ÔUö¨hrÓŽ5j±9en»ƒ¨è–s]ñç…)‚¤À|!åéwìׯï9'ëy~â‰1®;^Ôwž¨ÐÛP‘}\=.Èd¾ÅÃëçÈ$Õ?›˜åoÖÍËŽVŽû¦«ZG~ä\™m£YŒ<"+šËõ)$F“)¸V»Y™éé â”ÅMF¿zݬ$Š]—G&&9Zm’Xå¬ã§ãÝ} Á_ýá Íá_¾ÿɶROžù³ù—»‡ù'woåø³-U«2P øû“3üëÇöÑŠRD——oê°qg@®ì0y0dÏXUA”¼óó‰ì dãu=üLG*uØySž~¢Ì,Äú³d*W–V>!šª ªŠ—Ñâ×m§µ}I$ÓZ¹-¾ŸÒíf Mš˜tV+¢„°"HªA4Q¹ºô!0H&¶¬²t½Ÿed¸¾ÑÔ…÷·åÄB €Õ’â*ÔK_ŽG]Q!)ßx¸Æ%µKxòM¹Á–ÖK™FÍžc±\áÝÍžye Ç—Gg8XéñäHK¼ÌåX±O 1ã]w¯0S(ÉÍ=«óYGŒZ0ò_k=^ÞØgÔ™³òàºiRkňè@äá÷*ÇýqöµÎÿú«OSËååWî]Ììeºšçø=Ëu‹M>ù±›˜?’Z•À5OþmOÕ*”òŽt ‚8‚•V;“ o Fr®¡ê;¾0ÓN©ˆ xœ-ÝCXÚB98. š“”Œ­…ãxSHW@G")E ¾ŸÐZÈÑhW¨¬78Þ¢& Šõ *.¹aåÁíC<ŒÄôæ„\YÕ  ^;½xnÔ*$ЏB®hä [üççY!¯¸s/Õ§^%¾wYžÚN:ôÒ>E¯ ™fâ¼1Ë U,u ˜qÑ ‰e–;Ç|¾Å:yH¶äŽq´¹“ÒÁ­!Á)[*qÌM“®>01ÄŸo¬2w¸}¾¡Ý9©µbúc{ŒåדXåàÐ71#ÝSŒö˜®½CÅö¥:‚»ž†®§[¬QvÏi9Ó­j=«JIã[Îlèã-8:>íÉ‘1‡·[nk–tóþ­Å>n©*âæ5Ý–H²^ñºV+/F¢%—4ó±b´µ1•b²õD'ÌFÄI|o;ÁW÷žg¶²ÈlÕOÏ^'Á¹)ºiJäûº°£LoЗ‘—[JØ“õ%—ÏœEqõÞé˜z¸&û{üݦ†FN$¿³}†ÔQÆz¼¡ÍH\Ð{g\þn¢©Ek$uD÷WC¼¥›Û¡ÈÓÛ§‡ÅѾ“òÇ70Vï¢3¿ôëÏPp}~ûïÓ‰k×ñŸ\#¯î›dö™“üÖGw±m¢ÊùW»äŒÑ“­žü‡gŽ0Û‹®Ú V®ddh½Gc.¡‚¡Zp°‚ª+’Saa1æ±C-õo¤ÓÊ4"ïÚ[B <üb“¶t0'Ìg#âyTbUõ5”§% c’55&•r±§žÍKf…^èÓk+¥õ9L>¯ZD=‡~M°ž¯+AG ‡„nI´1k¤ØS¬·•"±"²äz¥$$7g˜í¤úÐÑ6½Ä~ßÞ`Ýúa>¸ñ=¼wâ½gÝòøÔÓßÔ&$þï-ü1â<§¡­PóˆÝåóÒˆÿWœ·E~¼||§ëüþƒG¹vS•ݾQï½awï“÷ß¼ž_ÿ›ýzbª½&?Ö, ßShͲfY³€¬Y@¾Ûo°^þƒ)v~l˜‘%©m,|,¥ãÏÊWÍ—¸ã@“BýZº½=Ò±»XÔÛØÝûÏØ‘óÛ²þ¤Pv3—¼eÐIå½çR=[tøÊ¦^Ù1$?t¾Ì¶VZïUpJœsžc¨{œwÎÇ‘¥šo¹Æ9Q§@Û)‚ICä 9AN/˜ïçÄSÁRޝë³X´Lå3n=Rƒ0Xxßlž‘—úÒ9¸€äK˜±A’½©¤ëo1£z8q Ò¶ØÈç]n„L„mÒЧ®eq—W¶çË·¢QŠøèkùôÔ­B·I·³€d øÒÜ4ÀÀá.N½+¶Yz•|?c+y6Ï•ùÄüX§ÁïN,Pw]ž†ýµ:gm]^ª5žHfRˆT>p|-Z¥(#seùè¹ ò’L»ef0Ü4üÁ_bØÏók?ÇÈ¿{õ,ñ½;Ø5×â;Ù¹e€~–áˆàˆH/I©‡ÉU½ÁÚ¼;ÏÞ{Ê<õ@ƒ­ê±}, Q ½¶%7îÊ®w—°]+#3Jm«ƒãõNʦª+­B…óåÅò$8V4óˆm,7޾ÆÈÙˆîô¨Ä¾À„‘ÒdJÔw˜o–éµ=ÚÓ†Âæšda›Nâ¢àõ¯§„5!ª†Hµk¨6o0-‹‰/¤Ü]ÊØ ™Bª Pt _=Ý‘gÏv¿¯o°šq‹fÜb0¡Ü \Há à 8bÐl¨¡Œ#:.jŸ!ä6nŽ‘¡h'’Tßù§–ézézG_™’{öŽóñ»6q÷ž1r¾³&?Ö, ßSYµk5 È÷˜äbLa%)â–“ í­Në+`tËÙ¨Õ¤Q¼˜6|9MT—«M£øžo‹øâwXtp[ž[þÅÆæâTü±Ç¸sä8N{Ÿºs7SwC/nÂíí"8.§o>á³ñÕ@Úmʱ֊›ºªŸ=fyeÐðDmHžÑÛGŦ]†zgt÷üy¶ôSQ¯Ä¹âNM[E;h ¯—¶ïcè«ç„F=Ý ðÅÒ©Ärj¢Ï¾õ}m‰K¥çI€ÑÌ £ ‡ìTWë‡ÀË#·m@$Hµr0• nÑÀQ 3¬/œ–ÕáùˆtÀc²0$¶‘×CÛsÿíûÙ“n‘÷Ù¡µ£:– 9#A¿¯QµÈâÖAÊ'#*G8yÁôÇhf­Çš¹Bßuð%¦šÔòKûưFØ?1ãNBŽMdܲ¿¤¿ðÅórKµ¤¿|í5  Kˆ¡Ó ‘dšiÒ„™ªý¢åó0Ï?µ ÿögïÑœUù×_Ù§éÞÂí>?µµÌõÛw2ÝV:ÇS²ÈŠ8®Ž#c.uÓÈ2éz©w~ª&­ù”W¾Ö¦XÊ«ë"Qn)øC»ª_{¹)ÇÏ…º[(î¾¾‚ªÌ6îÜUdS9Òºw‹Õ°ÎžĨj"¾[Ó¢·NⓇTúÐö$ÌçuûT,‚"¢ê¸JwJ¤¿~H³ñ†ÄN¯¯äªIA$F£Dè/6,äE¤¯˜È"Ke /D gh¢aÿbÄ_ïojf—}8º ê2…Ær²’ËËÔrUÓ(:âÚTS›¾ÞHêq¦í$Ç$Šv!½•CÄj¹mð=d¹QÚÉ£ÔÊîwD~<þÚ4OÛv sjº³&?ÞBù±ÌÎJÓð.'µç[‘†÷RÅÜ–Ó÷Û’†×ñ7~Xî¹I—Ñ—™ÿU‘—°¬$ ï¥æ³Ú4¼+éWXYv¬ï+ù± Ú\•d%9×{µZ-X.C4«Ñ¯äÖB/3f} nV¦• ¤¡åÜÓKŽÎ=ÕäøC‹ˆ¤gÙñc£œÝÑgcëˆ\¿ó0”“Ã]œÜ·÷iÛ¢¼ºµCꆌžñ±ó®h¦êW)áý“!_p…çF™\7È­1v¶Š’ï6éhåó4µ-7ÇôèµhÎÅ™K°ŠtħˆD“qf¢Ç ›ú´=Hâ@®éyl }FORîù.á©9ã`î ¹V€Œò‘Lü¦%òpçbéU ·)‡wF(˜TúU¶WÆ,ÜvJî¿ó »ºøì‘©ž äx½K±s‚¢´QãKs¼Jêç©XDŒâ]Ä«Ž8YA%sJøRÐV3ifZLð×´,{—T*œœ1ú?ýî¬tOg|èÝcâ9ëÆDmƒ[²%ëY™Û‚ʘ‘ÏýÖ^|h_ý™wQðŒü«ßø*í;·ÊÝ×Op͉i†;}Î¥Š5.X‹I„ȳrp¾E+^‘䒿犆»rÌœ‹q:ÊÄ_Œ™˜T1‘Ê|?#7ꈟ7”ZJØ·Ô ¯ìëÐîfÜ0a$Ò´©Ï‡Çi…‚¢&Fè‚ÎÓ7 §òäF×óñwuùúþfáÛ*?\GH3å™Cskòã­”«¿Q]鼯´árç.Waß®t.ûL4/M+ËÁg¹Š{¥–¹Ìÿ«±–È*ö{¥ý®Ô5íûV~,g×b@.}«´D[I»ïœ¯~{ÝÙø¿_ûI^c½õÆ3TÇsUྟc ^cgy Zô8½ažCÊÆ×|•£>Ž5´7ø Tt{§%^ñꈒòôŠc4¤‚ƒFŒ&Žo˜¯]£^8#EiÐq,Qâ )d…D†òòÆPg#վÖ®Çgrl¨»X+™8 ·š'놚öºø½2ùy+NŠÆ#¾xs1AÕÅë|©œQ¼† «}qÅ,h¹=Ý{Xwôkò#Ïß'2Žg=|1ä4T2+ýB™$W¤|²¥ÁBGœÀ,9ó¨%“<ÆSõ$¦l›r°ìòåÚF©üðô ^¬ôÅ!.ÃHµ ¥ÁßžnêÿøÞ­òÉت}Ï'^0â™ ÏS¥­Òt­Úë=NN7yìo§øñ{v3\Íó ÿþA‡ ïûÔM4zÜÑí‰â—s|eß4­ÉˆOlœàt»«Ÿš‘^’}3A^‘ï-¨b3äÕ§: :wí)a}!Íõc¤ÕNq  wTÔÿÿÙ{ï(Ëë¾ós«~éÅÎ=Ó3=y0È ‚È HJ¤$Š »¢d+ûø¬-ûh}VÖ&ŸÝcÉ’­å‘(kMéh,JEJ$‚ L ‘1‘&‡Óñå÷~©îþу!@Lw¿î™!i±ë9Óïýêýªê¦ªº÷~oÉÈŽ³h)é9er4 .$ä~ G†¯Â–æÄ]’¤°’ïœR÷´Š›¨ïôµWdïT¦~®²X‹028‘ј÷©Ÿ µXõ¤Tã „n&,L&SGe›ÑÄŠØVŽÉ0B¯œS|  í”ÃS]<ÙZ™·\ø—>tÐ÷L ïKpÄ­¬‹wþ ZRè€û{Œ\+šŽ .`°ìøæÛn?²•ÓÒ–ý¸Òöcm~ÝÊéO·P°Ö_Ï­öc½9xk¸`Ösíè%*¨~™a­…]ËåØo‘•~ÂÖ"ðZãêg,²Áõ„ËçB_õ½ <òdíÂ÷/>\ÇÏDÞÿ¾‚¾ã®]\5çÄ]%œ8Ð%‹ŒœMµ4]`jr˜sbL®ƒ:‡¨#Ç£3\Ö”¥6*`|£bdeqÓLÅ ‘¶y¾ìéwÉldùÅS3ÄŽ ƒÁH¥Ä'Ÿîñ>0ÃÞˆwß» ¯RŸA±ÃÄÐG÷j£Ó úèœþæÏ¾/þÍ”Z±¾æ—_/Ûªo›[d"IT#|xúÌ2£ícû’'V¹…¼˜Ü°ï†AÁО˳–bd4óVÞfÊSgºúÅGëòÆ×Žá<ô|:·&©“]cþPΓgý0#ç!n•bišáÚC$Ç+äEtn´ˆŸYJ½„Nâ‘Æ‚7juô&ÅMdæ)7Õ$(fôÆZFôô+ÕŽjeBH=Á´šDEÎW:Ô©â—DšýàçyìD›F7§Ós+“×u•öjº¢_}(}ê¨õ6kéŽlÞûÙ]XŸƒ¢ZRE¤ Ì š‚x û{d$³äN·ìÇ÷¸ýXgsë‡øô»VýÐ’ ¼·_:®uH]o^áËuÝ(}òÕ±›”"´¾_oú9Aj(ôð²”V¯KëZÂQO+¶¥øcE:ËñS5o®À Eœi3º˜Ðð ,j%Å+ÂÁlˆî£]–Z)Cõ(=B—@Ý‘†q!¢8Ó"hôÈÅc»²e5ê@„6Ö4ù»Ñ*gÂuä·,6éXƒB@"þö©9Î.'Ü{Ý?ý‡XlBÖòð½cÓqÔCh÷‡Ãå IDATÀsŸ^f(.pûµÛù‹/¾À“Çæ‰†Kì|ëµ ¸œ·Í-‘YC±ð7ŸåŸ8ÂmÛ†ˆ<‹S¥‘¤´“ìÒ¯ÑÎw¾áõe·y<öÙ:Í3)ƒoe£Y< sË)ýâ"c·…Œì ¨ž†JOèEß|{½ã8ø£o¥0컌Kl³-žë‘ÛS»Ê”gS†çÔÑoðˆ¶Y–çé.^Þ&Ñ€XË´ÚËäËÂþQ‡7`ÐŽÃ6Ýù\óoê:5¯h9¾˜ðåg›+ì,¯¬3±ÕÖc^‚Ù•!D)¢ÌÏAþ4þ"Í©†Ì×ã­EÛj[m«mµ­¶jÛBÁÚB1Yí}¯Ê9S¬67ø OjŘ£™WJHšj¥•à—<4´’Ô­&ÓD£¯du²Y…rçŒÚ<Äj@ê9™¬TcOS«rÇóEͧÁ¯8’ž’·?²&=µŒvÜ“ÚnO=5"Lõ ¦ªÈm$§È±ŽŽõ) :_ ›òD<5Œ…¥.q,"£NíH‚—¥˜8¯ÛUg}êÛGPE‚fO‹ª–À‹ÎÅ#b%ш¦Ì‹¯gMÄO-qGmY𯍵¶D;ñøÀƒsüÞƒ TŠ>¿ýs·0V‰têŒßæê‡96Ui ;êW‰>ÿÔ²dωþÐk÷sÿã§ôßÿÙÃìxÝn©ÓkÚ]ÙÛí©P#~ûk¥<@–+N­„~GËzRXNÕQ‘3Ýu4Á·‘tS«T|‰F-qi·fI¦’Ö}¶·%›˜fêXÀvQ K"™S5±;_ê].ü£VñÊF_XŽù>1+KÍœXÕ¾Öæ{ Å$W‡5V_VÏã›Ï›SW¨€›}¸ÜgÁ昖!=6ÄÎ[[¼ÿ­{å×?txË~lÙúäËUyrµZæëÑ}-Ùù®BÁÚ$ßo¡`­M{ØBÁºlöc²yÁ²÷Z¿±„ë·ž‚ìG.¶8²ŽP®g¤O¾žJ×é§ø=ÝÄz²‰õ– Ð@Ÿp,|ØPü_j<ËI¾oúz m'¥…„´"ZÊIBO– ùIÁŒ#×w¸¾^b*ìà<#A”=Í­cG;¢ØA:6C,¢ƒªi–KõB☇‰siç1õ† Š-¸®H&V³0ei¿Gq²Â`-¦},f&«ò¥;—i… òֳפB¯ãK–¼ÑOñ»©àçHÒE’\ºUr<-OבL%ã¡~ôÒîÖ¨ãKG’ÜPè ?Ý# ––°à…Vü À‡]ä×?¶rHøÅ·СJÈâBŽçäx±Òö•™«¡+9ùxÏuYhvùßþø!I2Gq´Ìä1X¹cªAh g[ ¿ó‰äóߘcG¹À\5²²ûOVÁ”e}7ì7ù÷|žFuÄÓ æÎf¨cß ™••½¾ƒZ#gb_${o.PìÀpS$·/%1 Ý^NÝçAi‘LET|ÊÁQü©yò<ÄôûO4dÐ5ð|šÖÇ?PD|ËÒÔ€´gyÏÃê‘cî,Œ‰2±M%E°u'6¾Yí…@HBäsÏ7xñLo=9ë'iTX?¶š¾×ùâïëטmv ¯ê?^¥ê—©' jIýÕï’tEx²«Qê UàiDŸÜ[ÑìnŒ|”(ܲ[ö£¯5Xï ÀÖCúØØovó¼™ ýä‰l4”e£>[ù–?DVTv¿<°yû±þaG6¨#¸Zn$ n£á€[öcm]v±5¾0ÞË‚%\ž¤©KßcÐË+„†'žY’åí·qý¡½jü41„~±äËx§‰;‚¦ÃK¬àìp@0ÍZ‘ÖIG6ߢèuñFêÉê”z†½;œd‘%R_È{/•úX9|¸Êc–©Vʧ¯]IÝ%WHw|[tÚ}»ßÌûý(wŽßÆýg?Ϧ¿úªA¹üf`áS¨[wƈü*½ì$Ê9°JNœ¸-û±e?.çÆö3ͯ”¬ÈÅ>0¯<€|§äs³ý.¤ÿ÷¼ý¸”v¹*¡+|Ç+¡¿4†ïd%Û~!ÞdƒBw)Œ´,ÚZ Q«¾ó†}ü³rˆ#OÌðÈÛOÊ#cÇõ®“ƒR ,²sH²Ø§stž`¼ÀèxAu'ÍšGÃwTG¡ZÚä4%—®Ÿ“Y%¯ f Ò‚HV6TsO|1,Rº¥´œS®¾×Hé êOœg¤§ì^¬Sž 9ŽÈ×ßsž]ä¶/ŒKtݲЭl¤ V´¨ØÉ¿Ù#LTLI–ºH­‘ ¦›áõRqfå?s¬§‚¢ŽÀ´Ä£K–XòÌ ¤’g`,ßàùE±6àW>|”‡N´ù…·äî;ˆÖé4™x¢H¦2¿ËÑ»JlìO‡d×H•ßÿäaù‡GN) …¡";ßqc^Ûi3YŸ©ËŸ~ùäz|ßîq†¢€Ì9ŒÜæ _Å~$ Œz""LŒ90rçÕe:¢ª+¦ëp™J3wLÜT d C5ÄèùsJà[:í¶šàV†vT­ã\D¡0CuùYÉj&‰àãOÒ"ÙH$v™¹gÒ¹6…°Mègt‡ÄëìoBÑj©(ùB/Vòý+…*C–Ï>Ûàþ'ëÌײÊìF/åöhµq¬v{Ùni÷VvñþC?Æ›vÞÃöÂ8òâ‡ùÛŸ:¿&ò’G @Ä!J ´‹/CRKk|j¾Î}ÛÁðÂ~ x©„ú–ýزÙ8I¼±‘›ð~¾ß(Í7B÷+õ››NBwß<|l”W7e?úÔuý$…ëžÝnBŽ·ìÇe¬„nXº¬ß˜·—?¯› âjñp‰¹[í·úYÔuÆ®˜ËFç{)ï»”ÖÏz¼¢úÆèF3÷×yýã;´Vìò™‰géTÁ =íM/' K;O``@¨ ‘’Ea*Ϙ­&Ô˹¦FñÁUÁY°]‡–r K!F[QNâRFžK)M yÙ#sN[EGíK¼]0-Ñ‘ã‰VTG¾ðºSúé[žaáê€òÞiN±cŠ·7QogâR‹°’Ôkwñ]:ƒ?¢0×u‚ÈárL`5dXbÍC–Z„C¢bQ |rS"0VŸÊùÈ“5 ¡Ï»ïØÉ€oi%žšŠ‡gs5]ÇrÕiýFÕ¥¥æËÛ®Û«_{q†þýÓ§9A5âÎ{×åÝ3óÜ.sÍÿü¿>¦§:hsÇÎBAx~±ÁGž?£—/õ¦7T˜<é—>º¤Ý¹LLFÖ{‚ó` èñùÇëúõ[Ü|O•Èë¨p5½nNS… \"(44S£Q6g±ŽjjñQ›§ŠïÚ)Tè¹¢.¿ tÏÄD~L8RWÂS«7VbKJP6 B²èH—W@œ¨€_2ܸÎÿõá)¾ðtc3ò¸žl\ŠŒjzM×è×}×Ô©¿vë¯ð¡ïûÏüÂuïçùå#üاŽ÷èoòÔâ3+92¨ZEyãNxýÎ%jÉ) Cì×ñÍ´¶2O?{®§B‚˜§ðÎMÐ>uˆ»®æ·O(€5²e?¶ìÇFÆ©›|ÿFäs=Ú鯷ÑwlTVך×jýôùç²ØMÊ…ö¡ÿÖzv£´¿ró=g?úX¿¾xp k«m¨Ý{h»‡+œ¬Õ¸mo‰‰… tz€cÓ|er‘{ž [hÓ»Úâ—7“‚/ U,‰+Ò¨g³1ynñB‡äFIÄácÊÆR0íÐÑ"fød] éFÄå„Î8ˆ²œ‚Ëp.@hó‡oýÍJÛïã¾§÷SRžArÁÕtÔàçJq¾K¾£ŒIS¢ÙeòУW‰ðj)’+ÎX¼üÈa<ÆbI ¥fJ–z/>«Ø@ÈLÀøÏã_üÙ7À~–›&«,ŸiâÓu´:°°S)<žyb™¼áS=Ðã3Oœ¾°Ö7ýü=Lܶ‡[LqG§Mj#–§2Nžk¿‚&™ST#B3ɘë\¢Ò€GiÐrn:¡è~ñ¾qº©Ã– &V‹ÍŒn3Çž¿ÔÈÔñ kgÏ6x,ÞÇî7ÞB&ô ZdgòQ8ÖF{–SDW¤^à\c'ͧRò¹ÅB“(ŒÉ²*-”áÑc”†còŠOy¬¤M·’T. >ø–^¬ó›&N· ®^j‘ ¹nè?sõOpßî7sªy†ÿðøâÃG?Æb¼¼êUÖD±Àpñ0Ë ‘#ü ùþ’ Y·ÈhÅgÛP´ò²µî[m«mµ­¶Õ^Ý^ ÁºXìØÅ’fúA+è·äË?[+Él-4”‹¡>¬—̶Ú\úqö‹j²^’åzȰvÚåB1Ùh⣼÷uWéh¹À_?ö‚®*07͵y—.ž´Næúמ•Ĺ ´¹}Ç0׌T8JEÑ÷Ä3"™Ó‹í'ûAdP? F»Í\ÒXIs‡ª"ž¡©×V.[ ¬È¾»K nóu´.Ò˜Måt3××\]UÑZ»#yû†ª;0aW$¶øËmÕãˆkûbÔa2'”ÇIÇöjm¶$­S]òfO KàCžUµ#޼zZl±!Zñ©V ’)Ýi§yWAýÂOæãLÿþáeyÙác=“~<ÖJ(ÜŠI?<ýÇZM¾J§< ¿tÝOóÖÉ7! ¿søƒúé3ŸçxãÔjsºàºHjæ|1âŸÂóPŒ”=át§Ã'f®Ö÷íú'4³bºd¹Jš¹-û±e?.Ög5€~PwÖ¢®C“Õd£ŸÐ2]c?´²ÑZc_-l5Ù_k,«É²z²ózÈi²Æ»û²¬ŸØ¼ÞÜ× !Ò‹ìQYcmt¹­‡ µe?ú׃k­ßEuÎfQ°úé³Z¿õ”äzF©ß±Èe˜Ëå*Æ"›\Ÿ~æÞïÚmfޝúûëÇfåêí£¼û–ƒ )uzÅD‹-ž#’*7t‡18Q'D‰Hn,Y9¥¼­Ÿ lÄGÉ̼Œ¨ Š3*±äHËɶ錴áÓœ(Ž%’ç°ÚŽ‘³].Ê •ëRF’Œƒ‹Uî<;ÌÙ ~b˜-”HÇ…’&BÛ ‘Ovz™´—‰?YAâÞRƒ´èKs{Ó§FŒQ‚(Çxl ƒ'm,)iˆËkr@Åø‚šð.äïžIøŸÿêEþõ]+ï½{ ÇÑ^ŽŒxˆ*m#2»×p Ö} s!åBÈoþI¾ôô4Å‘×ýÌâ•Ùñ©'Øuí–‡¶U/¼â¦Zö ”˜¬HrGî”gæj¬røXg^Á[;E\OYŽîrüÉ7î-bŒà…ÂÓ'ÚÒZÌØ÷ú|OØyMDeØJð¬c¸à†FÐÌÉgæ|_ÂHÈ3ƒ±Êpë1 gg虈B’Ci2²ƒ´æ¤}¤CÞq„QLè .¯Ðµ=ɪ§™X¦:ìQ¨Z$‡î´“¬åÀ@¥hä¹Zç§ZœšéÉsgºlBndrt)H2r ò¾!| º—Üóv™’û;þæÄ'^Êõ@Ñ5礈ÊC`2!¿•È](zs½˜'k»ågö¿™zv$GD^*FxzË~lÙ ®µ\âó›}ï¥ÎQ®\ê˜/Ewm¶XŸlrl›Õ¹—«Pè¥æ?ü£³GßÅ/WÖ¥&º}¯ŒaÍïW9^_É$ ñ/¾ö<#¥Ÿ¸ójâ^H|&Ão #)— |}× ‚…ÉÖçÊ a š‘<Ê(•{ØXP§4¬C‹†h.¤r®DRJÈ5ÆW%l4‰²N ݉=ÞI²L‰Úiæ“.G,/„œîéî|A®;3Êõˆ;Pj¶é4ÓA…|ØRÞÞEkà:–p¤ˆëthµr /Ô‰:øiFml¸P¬Å BPÌÁ¹x¾‡G—€6yîá20¤¨S¬/œ„¾Ï‘¹œ|î ×íà'ß°‡Öb‡sB~ö¾kð|4ÎX3,ìL # ½íþä³Ï1³¸’T>ppœ]?úZv˜œ74Œù"Gεxîé6o™`±×“VòM8ÙJàÉx)ZÙªâChíFyâ¢ü{Í%í6œxº£š@êk…z#ãÔÉ·o/ˆUÝá³ëÚ]ÈeùTÌ®qŸJÑŠfN{©“öädê0iÊø±‡–b¾m4Od´…$.ÏœZ¼°¶ã¯Û#»$çµË 5èñ…øøQÞ>>ÉQ¯Á—NϽ‚6¹*©[©obEXê&ô²|³›µ Ï+–[ß: fÎ_lÊm{K\µ³@n ÞÈ8|¸Åµå€¥¥Œ}7åª×•o¤,¾sí¾‚ŒV=–zòɇ[|ËO°ûæ½ô$¥Ø¨Ëî³' p€¸Ð<‘KsÁ:#Æc=Dx³4Í¢d¹°»S6YGéžÍEsE­âûB'Uþîé:É7ê—«ÚFpÜ/ÇûXc£|©zo#›ÏÕç¦q 8Àó2ˆ«N¡¼{†§O4øä×gdÅË¢[öãÛd?.qsùm±Ü]ªÉ•ÿžê€l–7ä2ðœlò]Ùw^jË%7[öc“t_-¤Tõú­…а7;kÜ(\ŽØÔõ>ï×u.}Œ@ ¡•›¯¥Zr§jÈWŸ”#!Zé9‘²’!¬åZ¨gÌíT™óc0¾¤C cóEFZô·wUD©¾lknÇÏP>1S{ï³€©Ù®epWJ¼ÝwEM7#\î‰ó,2ê©5JÞD¢f—’M‘¢æ™•îñ.¶Ü@BG«Z¥à+%:HÖQ\[²DA}œwñšë¶Óm;:%Ãò¸#3ÊJ+DsËß?tBç£K/Î/Ðçö^W~~qQ«½DJ¾å7ÿþy~n™ß¸û6çÞo®ÄZ²ßŸƒ’ö¹ÑÕ>·ë…!I›ÙÍ&4¯‚µžL]Lo\ŒNýÀl¯Gûõôþ–ý¸DûA¡k[!X—ß5·îsÝ8“Gž™çÔL‹N/#Ï•~ó^F†"ÒtN5Ëd¹^ó.{!ß¿³Ä½í$™»@âBh,;Ýà…“u`¥D_5"Ö_{jŽ/=6#žoV¦/2H2ÇD5€¡"íÐ’9¡è[9~jIÿËß?Ë?yíï»qLJ»gdÄ’„– 1Bx®‹köHšvÁ‘îȤyxg,Þ¢‡I)¤0”‹ÀtU 0V ý :J'7¤D’:ÎRÊì™Þ™–„5H«B>*x5Ä_Îê=´`Å GäII°=#¼‚M/#ðT²ñ¥ Ÿ žQ‡;HZÑ ã bbœ K.¡ˆ*N iTa)Ïå“¥ç¼óµ“Dž•¸íX:õí1¾ •s¥i+½QÕ?øäÓrz® Û#Þ~ó¿úC×rl®-;«!#¾•¿yø¬Æ±ãŸÝvˆV’ñ©cSÔâä%²Ë·rœ¢DÖ¼$Ù—äB?ôÚ…’•·ÙYòåžë+y®|úó‹Ü8qÓž"û¯)°ïíi/d$GS̑8_y¾)?þæÛØ=3øèG4¦|iÎYâxåüŒ…‚sd5d°ºL80ÅIéI½ísUÉɶØÏ;âÅ•P3ŒŠo 'züÑ×hôÜfåt#²ïIºS˜,û¼cO‘Ì•ÁÝãk½.Ÿ}XY¬]èt÷5£Ü{ýO_â³OžÛ²WÐ~°‚Õ¯m…`mŽ7¶B°¶ìÇ·-k3.»Þ`mÔ½Ô/úI¿¿µÖÍÆZ.·Í¸ÏÖ}n~±«¿þ» "âTÉså½oÙËŽm%·䨾,~:Í”(0¼ïîÝì/ÓKrr§|æ¡)þá±ÞqÏ$ï¸wV¤_èKA^sõÿûªÈú§ì4WœY'‚ËP[ÈÐÕÃÔ¶—¸iGE³¹ŽÄ N(•|’¢‡”°=Ò°‡M’–ñ54ˆ¦BXH ‹ žMq¾Ñ4³‚s:4%(eÐLpÜÀ­X´ÕÍ„¸FERº¡Ñz1z}‚L iϨWó$¬À„¯ih%V%ìöȵ ™ D4GÓœF¥ªõñ’¸ñê™Ñ\ ‰›ˆ¤êFŒ€Ã¡ˆ1+‰"jUéU’0 ™oê¤:n»q»żkm©'D¹¡¼è>/4æýÝ/=Í'=¡€\;9 ¿õ3·pû¡ù£Ï§ÞèéO½~¯üáçŽë_<´R}ÿPk„…óÕ͹êÅÂeH^–¬$vb j<‘¡²§£eÜ@^2²{4d¸èñÕÃM¦j wN†º´œÉWmð®C+VS—Ë;nÖýQ.ǧu®CsÉÒZSÁ‡â ÐÉÔÆ±Œ„Ë–¦å„íqºáëžHåêÝh8f¥{ÎÑ›ËqÅ´äùú‰6_9Ñæät37XýèÆÍ¾ÖFçYOGmäVµ·¼R %‹S˜ZXm°ÐkêRraýå-·lgçH™|ì(í^¶e?® ýès¾œý¬G¿sÙ̸7n´íú‘ý~ÇðÝâÙÿ\i}¬çFÃéd“´ß²WÐ~¬7­ömo $é+onÿêÓ'úêû±ûOð¾»÷ð÷îa´rëP…Å¿ó¡Ãü§?}†b`±Æ` èš»•ÃÏ[ïžä]oØM’æß³ýªqDO ¹£Ž¶(…þåOßH'É™êåø%üž¶r ] 3‹z?4øa4Jéu|\Q5Á Ö±!ž*~ ´= ÍÁ ÑPRu€`°È‘)¥sfr—¸2°+§Xî— ÞrL©Ý"7Yaq Î. ™Ãë9:&¡å —°íe:ňܷ욞fdv² ,ø¾!3–¶u5Åj€ŠÅ©‡ÑœÄéúer§ì “×ÓŠ"\ÇÑvÌ̱F¨ÌŠ(Á¢ád£Ë']¡ó »ùíz+û·•øÃ޲Xëñ/ﻊ™åûÈ(üÜÍ.„|äùÓ<1»´B³‹HXžýËŸ~hˆ»Ž¸ãp™#Í”LSµÜ{S­å|ì KÜsU™’oh¹ŒfœÑì¥CÃÇjrpâ {÷L0{,¦3å‘ħ‚7L”`¹‡¶;ø¶ÉÝÁS焽;ahÂОwôÎ9ÔèJí;Y©?Ñðsi~þ@N·tÊ•jNWrmV`ì2 7‰gDZ|–œ˜»¯ãí·Mð™ÇgxððÜÖ¢mµ­¶Õ¶ÚV[·y¬îªY-l=Üä$¡¬«ëÜH\,–s=8¿Õæ²Þi¹_|ð~`&×ÃV^õ¶`ºÖã?òù“OèϽå?pÛNþ÷Ÿ¸QvùãÏçéSËëÝb|+õ™£Ëü¿y^œÓÕÆ@æT~ÿ}ô]¯™`¦ˆùÈŽª´ÓX;ížZkPO$® ªIé **¢A×Ä**àwS\BaÔŠ ¬S2ë©-DR®(ŠˆAÍ™¦ÔO×Ézº« Þ@ÄR[eî²=ñRêY K{ê²ãà;}Ìb‚ç'¢‹ªÀ²Š—gê4Ø LS¤­Rt˜H¤Ü;%ælª6ÉÉsõ­O°©'S~Ä\)ѺJ‰$8õUir5ä™Ò³£yËò¨_­ŽÌø§2ò… Œ‡zÞùƒ_ºf/•ïÿ?>ÇÞ‘ö?ÝE³—É¿ûëoðÌÙºzýØ VBŸSõ¹ª=*ô ÚXšIÊÏÜ´—¯M/ʉZ{½ØñW}'U‡Üþ޼¦¨O}¡!'ëè{n’(0+ÌžKZÎþ¡€rdõêÝI}Ä9˜ õªíÃââmr×¾Cú™?•kûŒHš q&˜P‚²35%O¤:2-^^èÊi K]Ñ«†U¶Bšª$5‡Ç n2 HXùrÜáÏ¿ºøÒy½Ää‹É&kÈãz:hµXÙà¸÷Sƒàb8ñëéÖµrúуk­Ÿ€ª’ RÅÊ^yÉWûî»vjXx|–F'ݲßÅöc9ØlB¯ÜOÝ~b÷µ°žC`åΣ ÒxY>Ô*r¶V¢îFò“V“}ÖÕÕdHYݳ³^í˜ Û z!ú™ûZyÊÚyVôIûÕtç–ý¸"öãÕëãÑa(ÖPˆ«Mb#N~ús¡¯Ç<ýwZoÎlò¹~Ÿ‘Õ$}¹ð[{Ž~ý,ï¹}'ïã>~êMûøàýGøü3s|õùù•\‘>ÇÑl§}aó·Z e#D x>C•Aíœã¡oÌòÚ;&œFM$hCV4¤¢•…¤¤ BXϱ]C0àiq|D\3Fêè¤ô:K¨ bOTo$k:âfB=hPï:¶¥mÔ†,ÎVh/9þêPA÷ކüÊL<ñ¥•5 Jâ§=¼¤«)+뚘Gdæ5Ÿó¥9 :Ý12X‚ý{E=O¥uÖiÖSÁ®Œ\bÐ*¢éñ\.Q¶6¢ÏVÓ²Éw±ŽÎ]oLlBïõ£S¿µßExÈCd±ÞL=i*ÄÜt°ÂÛo›àÁÃs|ùó[öã»Ü~\æ¶Þg3ó½\!Xë}¿n–¿rùVŸ³n@–e“k¥}Êæ¥†`md]uüЯ\È:ýÖã•Ë‚µe?®ˆýxõs›IBï禇uþßï;úMîé7žN.áó~’t”þŠ5m:ÉK¿åùc³M~ûãÏsl¶Åܹ‹þŽC¼÷®ÝÜÿÄŒÜÿä <5ór º‘DÁW}·g(äªmEyö\›™8dŸ14ÏÎKøz`ט”m„ÉÅ("*‡’DEšÍ:­f’R ùPˆqÝúšä¸,‘°™S19ØØaT)¨¥—‡¤ ™à …ì„‘Òrhßöš¹j¨ÄŽ–CLŒñ”Ô’F4ŠïÇxa"œE+¸e<íI®J¨-¬æ`œ `ÌÊ3šâç–ú€@”1ÐtâðA…\<šþ±-àwSü,WðÈ2+Š’…à‰Ï`Ï“ðt›4qhÏ ½œn. Bþ×¼Q'G#ùØWÎòÞ[wÊ=׎qõd…_ûóÃ|èó'.ðó=“ãzûĨ<;_çŽM¿Ä<«Ë…Iæ^ÊÿÙ0¹|åû¡í>–cît²¦§ªÄ¡°mħÒÉHR¸~ÿ6™® ž‘n€ð@ ¬Ag©+S>yWÉœ8ƒñ#Ac±¶ƒwh†basÚ“Ì3<ßUQßpÇÕÈXEiM9Ò†Šþÿì½y˜e×UØû[{ŸsîX·æª®ž»%õ y°Û²$2žÁ;BB äA€dzÉ#äÂK1/ÃûÀ„ÉŒÁØ–Û’lI–dÍ­n©çîêšÇ;žaï•?nuKmuWݪ–dÙ¾ëûî×ÕgÚ{¯½×Z{í5Ù•”_¢ÒVb¡šxùÄ×;åбréAÉÍf²Z?Öœ+ìw‡|ZÄ”¼læxm;÷œú=~ðŽ]8§|ù‰i–êiW~¼ÊåÇ:ž_ïšÚ(®:ÉÔµž,^ë‹‹~+nÿÖ0¾­çõX@6ü¼Ñ¢ŸëYãßõðâõðŽà¤+?.I~\ÇÝ ôõ`½jƒÿòë§ù˯Ÿæ½·mã}¯ÛÎߺs'ï¹e ¿wïQ~õÏžî¤5ƒÿÆõCÜqy/_=²„ •Òð(¦¯¢ÅržÑÃgãZ”Ð V°ª§` Yc?•"%k(>ѸèÄG*¾€*&S ›^ÍU[-'4— „Y“`k„,jAS‰ÃEÆwruKôºÃ˜2TJ²¬aì$‘ zT”,AŒªQ'y·„Á¡ˆFZ—‚›G|˜ñµ¡^®®/éÞ¥PŒPŽP—£>RrR¨Æš/sƒ†bÍ¢5^ñ‘kdÖi0Û(^¦••ˆ5‡7JÑÚ“F¸8Õ»÷KONË¥/?3#zÿ)–š©Zqª:RÎ3XÌñÔìÕ$íhý¼°Øü%[.Ïéþ[Ë,Ïeòè½Kdˆ¢êq$ \uYAò=Cøú0…´ÌåMK! õ¾çŽÊÈH“ía“}š6DR/š¥H®$ØÀãçÁg¾q†{Ÿœä5— òo½œ¼a'û·öâ½òÜD•}áË”VêÈÜú,€yd†w\ÕÏ[öõ³+qs/Ä'á!L_?ó®ŠvŽp1#©„4¶…„O¸'jÂÈTK˜7$ƒio©Ç[Áå„,oP#Äe‹Tœx ò§æ0–*;ðqHÐP"çÀD´ìVcJÙ,%i0oFaE'RÀY‹¼Ôì„m*°¤ÔÍ0 ¨ÀPÒ"r™°š€ Y‡‰M‘¢Kp2¾Eˆs†­K‚Q%+Í¢!Œ,þâ®ZNyÓÎ>×N (™‡V3£$+…„‘á‘£óüâ=Æ™…&Ö´3˜mé)ð½{¶ÑÌ¿õçÖq,¢g+¡o¼ qêÈbåWÙ·%G#Q®n&ÊŠä±>ÀÙ”ÅR•ÏWŽqßçÏðý­1Æ‚Ý4–sdÎã¼/ò'©&بExÙiÌØÁ¼`j–‰Ôð¬W¶*cƒÐZ†¤Ú¶óèJÄD…,Púbáï_`ª–u ÿA MJdÔfà'@÷Ò—+ðÖ‹ä"מ˜f¹‘bŒà»ºÐ…ï*0@/0×EEÖ ]äÛv”¸õŠAöŒõðϾw?IæùèWOòWß8Ão}úYî¸f”¾k¹ÀðÚ}üïuÛ)ä,_}f†?úÒq ¹€VâøÆÑyæªñÅ™ŒÀÄrÂï?8Íá™A¹m{‰b@æ< ØÅE¼ùÔ!™ÃiHZ*£ËB„‰E'—ñ±¢9KÚ Hh(Ìe8UÒ‘¨UÍTI*!Y¤JR°Ìf•öµyòÁ.®>ºˆM²È±œ« Z`Ær¾EP ÈeMÀ·ãP²™Øön=Ò¶¢îiD9°€‡Š+3 cÈ(¥UZ¶@bs”ãefFsß_òl=n±™â¥>Ò,r“-F¦Zä+™X2g±¹³ùmAŒ`C!gªÍŒ_ùó§9x¦ p.}r_>ÇöJ‰ÔyžžYìLyP%4†›6õ3^mnh-íÉarÊáꌔ‹Ü}ýnúË£4ƒXßÖÖ2Û åOspx’Ù1Ãø'„;–®å²Ê&kE1…€bA0a@ºÔÄnŸ"Ü;’T öD@u>Çl%elX¹þr!­)Íq×Nçey¾Ü¢€õÐ((¾$œšŒ»Dÿ ‚jMo¥æ œ¶Ü0°ŸFsˆ»o|wßÖÇSÇ—øð½ÇWØ®òÑ….|·A,tÑÐ…®òÝŸ}|’£Ó5nÚ5ÀWŽÐ“³üÄwócwî¢g|éà 3³ z‹! D‘Å9åõû†¹óêQ+4Ç}ONqlªNO!àøtÝ ck„©ÅÖ¹T§ðÐ4ðP;Õæ[öô²¹7G3õ„V¸sw…;ööÑÓ_@Œ!®Æ .-# ´Cùü4Άd&‡CP È P‡¯„ÎcZžÜT‹\«IÒ Ày2Ð(ÉÊm¯Á$‹‰CKu¨—|+c 1K’O©Ë,{)4+ôù&\Œ <å†G3ÏT_,€|zçÍÙm6Ul«½ç­ x@œRÉ–iFމžI…¡iK¾)¨:ÒÈ‚©{tªÁß¼zWÉQÏBâ…€ü …¬ê…åFÆsgù«oœáÀøò‹æt|¹Á¸ÿiBk:ZB;]j1°üýÛ¸çÈÄ k‚tvŠ•‡×¼n€rã²ùÍ|ÏÛFyíU[i5SÄ$4ú& \¥ÆŸx–byˆýÃÛ¸az˜lÔ°ØP$ôä¥NP $G<_ƒË®˜‚ÀAlÁ×j¡’R®Ü 9§,Ÿr¸–bð+¥ÜETH¬’ö ǵ86ÞU@^I˜¬+¿ù¨§šN±˜,ñ¡Û~’ÞüÊ9@™]êÎGºðݾ‹‚.tï>xòÔOžZâSN0vïQöŽõðÏß½]#%¬ÞqýÕFŠ‹ø•ÌX‰XAµmÝxó5£„7Z¬Ë„7^³ +B>ùðiž8¾H>²ùÀC»z¹óWß„Ëy⢡>Ðê (/Åôͧ¤C»qQˆ_^PeêBˆ´P°Æˆ{^ÉÑJ!¢·˜ãîëvòÖëvòÚ=cÌ.6åØÂ¢žŠ¦9ðô"¿}Ï!ݵ)ämû®Õd¼Ÿd®·XušËÅÄêI‚‚š‘>lÙbËd3-õÞ¢RaáWëñxÚ|Lw?IX4óØ9¨¶,ý{œîÜ$’.y“NÕFÔ£ˆ¢ÒFŒfV%ˆŒ¶æ=OœjÐ! ¿”ùÕ×*¥—ÐæzsݳïXO\O.waSný–+v{’ÌñÉÏЕßÞò£œ^lì²AûpƒG̽T|´+?^Eòc• L§ó /! ®…“—ƒöåž÷Öy¹ÖóË]D70æNðt)´Ñ•/£üXí†çÒë€\H›z¥ó¸¯–^™<îæ×^O÷ŽÚî/ IDATK]œkÎãþÍ=Üzù 6S'ÖˆþìÛ®¾rN›‰#Y‰¬9ç $+߉ÙÏN׸vg¿"‹WÄUUI3÷J»„\;´£½)n»k­ôHUÚÎ6íû²²USw.¦ê+$¥ˆÚa!oRJýIj– zÑ èÄ[£¾‘ÕRÌ®IQ· ™# cÁ·ãKDÐD#‰“ˆ ‹1’êÜREÄ¥!‡‹óBÎÇ:ÌJ%¬SòÌ}šú@É‹Su¡, ‹å…cMH2н"阩à UŒlÚÛK~Øñ…'g8x¸Ækz¶éξ~š8Å3³ÓR B]Áë‹r˜FH½Êo?~šfæ¿yâTž(Ÿ¿e/ïÞ³™Øy"cxtjŸþì74q^öoâöý[ªõ7îF ZiÆ':Ì'>Êsóüä­ƒŒ•Z š©ç­—í”k·x]SüŠ_”ˆ‚iÏÕÙñ³¾R‘µbà'KÕ,ãCuÖŠ“¶µcۣ˜‘• s•³öš³ßÔ«Jì.'™Ù呆ò;žâ‹«A½n¸ÆÃZ§HÍã®—ÈïXƒou£^ö<îå’ð+?z ×läW?r@ï{|ª~Ù•ßáòcš`cî´ÎÆj÷:­q±Z¯ö: ÐY¹ÄuÖéó«QרpwR#Cר¸o´HW~¼‚òãBc¸”rð]ø…=ceŠQ@µ•ñ†}üã†1+8§8UK{G{ȇ†z+kÇN¬ÔÐðÒ>·U]‰1ùf®gõzá%ê#¨mǧ˜¼â¼ðT->¢rFSHgèö^¤Â\ _MV¾cΖTk§øEqM!©‡Ø‚§Ø—J–â4$seØÎÑǩˑº/‚Áã !µ È\ÐÚ/œlPî¬Uh$Ô¦[,ÎQ Œí̸|O€dðäãM&' ôå…|Ѭ« €•vMÏ,ÑržÀ™WÒÔn‰3Oo>dw_éviÆÉåÍ8eÇ®®¼z^•Ùj‹P#,âÒ&Ÿ&ÉÇ|ÒO8”§k“ÚdŽÆ”@­¢Y/VRŽ/ÏðÁGãDµÁ•o¸™wþ³Ÿ£¼ã Žü¯;ü»ÍÖ YSy0…½Á3ãYÁÁÙh¦ÈÁ‰þŒ†O>¸ÈüÌäËEó¯æo¼x½¥ÿö373Ü—ç_ÿáS|å©é—RìÊï`ùq‰ï¼œóòª¡¯—¡Ï/åØ^j<½'þ¯–quåÇ%@7 VÖ„$;?VáéÓË<}zù‚ÏÞ¼»ŸÁr®­€œÝPžãBæ=å|Àܵ›ë.ïÃùB >ÀûY!ù†Øf“ ™‚‚KÁ{a àjI† ¤™%kÂÈaB^‘ æÑÞ¼GnesîiW&G@ò)I5 ¦àëÁ)V=9©4òAŒ¨âÒÆzðž’ÂxVçcOMòþþÍ ŒÐ4B¼œÙ+#¡…:yü Ǧ\öƒö^±Üò|寫\œ£·$xßþµ½ÕÎ* íìf.ðBK-q¼v[‰»vWÎULÇ{Š(År…À¦xŽT[øjŠ!SÇt=áë'aweŒ›7a–cÇRµ‡F’¶ÀFJ¡ßQÞjÉ ´š%æN’3­v!Eë)Êb«ÊÇ?Ç×'§˜j¶ã†nº‰àª×S¯?Äs‹l5e²ªeùŒ@Ðb“x…ÙdÒUÑsÖ©vô¹´uQ”ñeÓ‚pf6éá·LÛÉ[oãª}|î‘I<8{þ¶  ]èBºÐ…®Ò…o%ô Ÿ;yú¼9•$cëÌÃŒÿ»êóæ¨/‚›ñäÁ†‚CÈüвbŒ ÒŸJûï\ ã[•±0 YÈøôS‹]Âú€¬(£}yþÎÝ»¨53>þµSç$ºúGºÐ….táR‹¥b[-@ëBp¡¨N~Ö ¦úæ{ëãj2QÖ+iëbA=û'éë:Mg(yïb¸¹nWkWWio-\]lÜ›ûóÞ™of$¡`Š-!s˜,Ö0¿(¹‘e•©%ÂÃ1'N÷sìÑÛÚ`d_¬Ÿ~ä ÿàwŸ–·\ߣw½>'Ëa‘ÜuýªóBòTJR¯¢hèS1 5t ¬ÒbÏÊÂd µ²~‘⦌þÑH&Oçµ\HÙ¹Çðà¡iù³‡©5‚÷0ÚWŸ¸£_7…Ô›‚JGˆõ±ƒ@¯-Kf’6TsH+îQ—å £:[‡2LÐÓ®gá_MÉWDoº>’™c%Ÿ°äm&…0#Œœöõ·³â…*BkȇVâÌk3u²N¾Ph[CTi®d-ËEVfë‰~ô©9:ßv?{ïåWqÓèf½jp‡ã±éqÒÔ‘Ã¥Jq “á½™†}!-7@ý¤’L×ÑVŒóJ>ÌÈ-" d±•ò¡§ò¹“§ÏsÍ(í¸LïÞgä®§þ£†µE&²ºq„åTr›<Áy4v¾­$µ=È4 ÚÚ”:Ä­̼AÆÒ@?}ï’Ü÷È2Ë-¿Vg§k¹“Ô¦«ña})7éÎ;駮㛫ñÔNiõÜ»ùÈê‡>sTNÏÖõ¡CÕýèÊ®üxYåÇ*¸Ö5h¤“çõ´½žÿ_*¬wÝkí±Æø¹Ú`õ!¬ž`µ5µÚ»«ÍaW~¼Âòcµu·ZÞ‹¥ïZ‹Y],ežl µÒÁÉDC}ïôz')àÖJë§Ž‹ ô§“ï­'õ]§¸ê$Eã‹î=øÐ8ï§fùÿ«Åõ7€«"¶*„'7 EÒÇìÖ|Ù1råå’‘‡×°FDš5¬q„WŒˆ,8rÍÇ!­|,‰8, õY&:Ü‹UA'ubñ)Ä‹BÖ©·|ªÔZÊ'™8××¾’å½×öKkp„|~žb®Á,”¶;W-ÉËOmǪʾýóTz3Ž$C<;•ÈN“PÔ§æ‹Ä=!Xƒµ†@Ds-#ƒåC»Z{ËÒœaa2$ BY^Èá##i%Tr–Éù:Kõ÷š”Ï=~œfšI9gùé;¶rå¦"¨°³¯Dd-M'ÔjV®ÜÊ]C›ØV)±µ§—zšÊù)&«-Fr½ì(öR.ú®©“hÄý²xÂ’M4!ÎD˜Žœ¨sÛè6-ðÑgñáƒÏÑȲóhoÇpÄoühAn}†SsÈô2ú”‡Ôù/8ެiœWùÀƒüðM$™RÎò¥£U:Y—{ÝR „ñzÊøSòÀÉúzèP6H7—’v#iדnT/Veƒ¼ìÜßgã;NL×åÄtÖçOÜ•]ùñ²Éu¬.a]u:o—Š£¦á]mÝëyåF××zc d×Ë×Ã;ºòã’à¸kéž`}‹N°2Îh6kÁUE1…Qmæ…#O@«1üÖé»#eqj“¦¹Ih{†´¤ŒAc¯rº…i¦ä³ÍŒf&'™ ñgRÍ3ÂáÉï†ð™L]\¤1ÍT“iæ Çž…Û¯Ø$¿ùC·êŸÞw†û'ÆyÃÖA©T#ý샋\¶£ÆH!ŽB$F*ƒFû÷R=œé“Ol¦X¨ògÇ“²pš}fVÞöÚ!ݳkˆ·™mR[2:[…ë‡ËôÌ÷JÓe åÐbyô˜Ñ3Ç=ïñHng^ú®H0yô#{e´R”=ý€>8>˃ã³|êðiÞ°}„÷_¹S~qó ¾{ÿ6¹ïؤþÅ¡Sò tˆr× úo÷ìMäïîלµ²»ßé”jÜpXÛz†ð‰ðÚÍ£T¢‚ 9ÒÌjê,ÍÄÒJ2jrbŒ—ÌYÕ̪“ÇŽqÓÈV)—B -ñé ­×ÚµS¼ˆ«¢©l¬rÙÖª[hÊ|u^ÿìéiyò¡7_QâGÞ<¤¯ßßÿgZ>þµî?XS˜glÀÊ÷¼~³.×2ùìý‹/ZÓÏÍ´ø??~R‰—…†hÇüÁ×çˆ×¥¦“fª »T:ítC£k0TíN6rò¤\< êzŠ~­uúF‡'‹ë=íîÊ®üxÙåÇpx!ܬE‡ë=Õ–ù‰\dýj‡´¹/ÐuòŸÕæµSžA<«­S:_«fW~¼ŠåÇF]°VcŒº†F¼1v"V`§ÌKW“й)v-S200ÖÀ§t@$²Æûk™;=Ñ[ë„°“ê9\© Aá| ª™œy|HkÇõ+ã‡9PŸÒ7o£Š8Õ(0$‰Å jPóÄ2晚ÊB ,’ªˆx%5B¬aªQOÌ™3c2Ø·ÄÈàœæ£4£Ò“н2ÓZÃR\.ñÄs§Xæ¶wŒpÿ‘ãú;_=&™¤ZÉåø±«oÒí¥¦·X˜vºÏ^&û6‡êf Iì•þ˜¾ •MŽÚµMû†„ÿ¥¿&Åqpv™’)sû¦¼†ýû‡D¯¨Èí;†ôðlÂ.Ù&Os,üÒÏÝÆÌ\‹?ùijÔéó/Zƒ=cšBêŽxW/é–^‚c Õ&¶ž"N‰/롵(5ZÔÒ2‘ƒÍWÌ/Õ“Bi E¡/áöJ‰mý7‘&Ê丰og‰í;-_{z™s³<±ét<]Þ‹Ÿ \ðª¨ËÚ¾TÞ BÏÖ«Ÿ“úÄ6}ݦËeh0Ò?ÿÔa¦:²ðü7D1™›ËKº£¬©pÆ’ìì£tÌ#Ë Éh¸·‡|ÅËž¡qN|%O2aÝ"¶?`áôµjƒáÞYÉWZ\u½Å9df"`hSAÿŸwÝÂÄeùìÁ<>J#k©%±<4uR?|ðq>|ðñs}zÇÎ+8P-dä†RÞzã6¹fÏ æJ¥U‡å3§:ªG¦—I21`lÂC9Þ²{3#žšTyôÈ)¦–•kúwÛ!_:*ˆuŒíhR®¤’ĆžÞŒMÛx'¢ ƒÛ3Fl»`ã„e4mR hxS‚Ðb¬ââ\€Ò®#Ò“«SŠRŽ-×øìñSò™ã'µåÜyô4Ö꯭ðSïeó`ÄG¿2Ç?ÿ½Sx}ñœZ+”‹ïUfæÓ®ïÚcìÆ€tåÇ«Z~è #H%„¼kÚxE2™¢™‡jÚÞ<û ÊÍt…ŸôF³í¿­œS†.xTSd²yaëÛ •šœ…RÐþ¶‘vúï³J†k×£¥á ™A¦ÅR¸vMUÙ\„¹m¹‹ÊÅ Îs)h×`mdí{XTßÒÖÅn HW~¬[~t- ]ø–ÁÂ2üé=pã.¡`!”€3Œ<Èõƒ¯ã=£»øÕO}™OM<û¢õ­Îã¶à-£diˆ=šá–J'æ‰f´¶öÑÚ݇ˆ"™ NȳHº 4¦JäSvìcâx™8‘%ŠXepkŒÏ/)v Ê›önåÎænD õ4æéÍÄ.cª¹Ì}§žCO? Åî'9ÎÝ×måïÞ~Ãåå1W`9ùXƒO=pÒ€Ì ß›íçÚž~ârÌX±Â/ßu-i2·0WOi%`8}´§] ÑB©Ç17U …¨èز§A©’¢^èß–a$C4&\»#»Û–“é3f&ò¤ô„ŽZÚàá©e>rðYÌŸ_@R®Ú^à§ß5Êßzã_|r™ŸÿUàÈå¡ñiþzb’¯œ9Câü‹æûgß³‰Û0óÕŒ¯=Sã¾0ËSMYQNtEð¯p¶òŸõT®7¢v@Ãk=·ž!—ø-6À«:I³ú†·+?^Eòã®Í迼yÍ0Ú[@°hÖ‚ ,hŒL6ÐÈ@1„Bûº „M—áxþüüÊ7 ž]|]_^ÿpܵú íç–›HË¡N!qyä²> ‡Î.B-kÚ–DÑ?=‚üúãèLë|üý}ð3W£;ÊP)!(ª)"Q»íV–Òv‡BƒT"ÔFˆP PENWácÇÐ_| ­tÅãŽ2üñ›aO/2£Wô% CO¡?rÜ?µ:üØ>øw­à°…þç‡àg¾¶!q©1 ë±P²N^¸ ®'aDW~|È® ÖÚ‹¼Óñt]°.,XWÅG>o[¸B&IÚbl+òýoCÿíÿ?.×ÉzÙ#¯Ý´]~û©‡¸÷äZíBxxïÉçL˜¦~ù‰I®ÝÕG¨žzo7PÀª`Õ`Q”¨d‹†é-9ôÈû¶_Ûôd2ý˜¡ÐcȉQ%ºrFTI$_ôŒíj)2kÅDZ:# XÙ—«MÈ[Zƒ²|:o¹ãò-2Y¯²ÜHøä“ϱ´awiï˜áÊ«Jd[„VÕ2}*£ÙTŠÃCF„eÁ,fè´“á¾*š³Ðg±ýVª“!ñ2Xɰ9•¬nY>6 "`$‡ˆâ£Xн9¼Z e÷eM©kO™âwŸx– wÎÚ¶¿£@øÉ·ÈϾgTOÎ&òë>¡Ÿüúâù S;¢ Õ® ½Sá]¬®üx•Èýø7 Ÿ? ÷Kðø,œ®ÃÕýÈ=øàCð @%DœBdÑ-E¸j¾g+¼e l„+z: ïÜ?t/<9|sŒÃí›àÞw!“Møñ/£ÍÂT³íÚEÛ*!‰‡¾þèmð? ?ö%¨¦hÞ>ï ûsìL¤'DÿððŽíð?!¿x?\‚“5ø?®„ÿz¤ ò/ q¢mÕ¶›WOж”Ü9ó2äêQØ: ?; ƒ9äoßwžÕF™…¿u]Fv”á7^‹þÀpùòñ·Â-GOÖ.>ÏÍÂï?Œ¼n®t-òëO´ûºE`½²»›†·+?¾¥ò£ë‚Õ…o)äKPÊpi†«ÁPn¹Ê%¨ÕáÃÏyï:p€ƒÓËçÌž/ȃÌ÷ÜØËO½k”«wøÐÿšá?ÿÕË ×]¤]èÂw ü³ëá—Þ y~øÞóïží~E'ªíkË+yAê,ÄðÔüéè á]¿p ô•àê­ð;wÀÛïi»5åÛ;{àÞwAhàýŸƒ¦/¾Ûù¿oøÍ'Û±&­ °§³;Ÿ?~3¼ó*ø™Ï¶]¡^^êu8°r¾²{@-…‰&|e~í1ø··À/^ ¦ïÝ ×Âcsí~}ìXûwNÔào|>âàWÂèü»[á_¸8Þ™…ýbÛ•ë/Þ ß³¶•_¤€t¡ ßQt¨Yë®­7w7«œŒ]Jû«}K_‚1¯6ŽâèB}~9ò¸oà«ÓT–4Þà 7Uèí7LL,Ô+Ú7fÉçk*xJ}±g¥šbN–Ò ËU9ë¦Ä–]C(J&Š63&n‚,ôôyz69U×Î=+1Úš0Ô§-.ÍzÈå•bBO>e¸œ@"dbï5Í<‘M ­MC-±Fi¶BE-ycd¦Ñâ?=ñ÷Ÿ™Ò©fãE³y ”¿ý¦!ýÞÛú¹lSžþå„þ¿ÿsbµyìô^'t¾Ú{[÷úÑézh^×A[/E{tˆYŸ\/ï[OÚήüø6—×À¯Ýó“ð˼ø;;{ÐrÄ0·ñl¥í"õÍí.¥ðo¾L¡~7ô·l‡ïÛ ¿{èùŽôFðëOÀ'O /P>^„û°önC>ýúµ©‹ãôì îjô×À=O¡ÿåÊG )l.¡„ÐÈйxõùsŠþÓagÞmûÞ¦ÂÚòí@o†Ë7û¶Ã­#ðàô¹€÷ žb·ò[ÏÀ6¡óñ†ä­^"]®æÉÐéþ£“ôÂ]ùÑ•«º`­Udi-¹N\pXe±¿ð{kµ¡Ávâÿ×iŽä‹µÉãè´k=+«ÌkÜ[-/öÅ‘ÕÜÖó…ðzÁq†!Z]D¾ü%xß]˜öõÌ¡iv~Ÿ—’ÿþá/sãèaþΞ[4­í“°ÑÔòmHoŸÑÏ<2ÎÞ­ý¼ç-;i&6B|8UƒX0‚n+ëC’yýÈ=‡å]wlgn´Éѧ2\9¶¤ù²“lÜ/xŠ£^Ï燬ìÐÍ¡Œm+R)UA!ˆFÊ I]@¯ËãœÈÜÉõà=¤-DÉ4Ä"-g4™ ©M"VéÝ–ieÄKeH4YRæKR«‡ø$dÖÀÑ¥S­ªu¯Ë-ÇN”0rüäÍÛØ3R"qž p4›ÍZ^j-åŸ;È×ÎLp¦ÞxÑ\ZWï,ò/Þ¿™wßÚ/ùâ¬þüoŸäC5a¥F‡êª>«ÍÿjÅÈVs‰YkÝw°&Þ‰ ýb´²‘6e :úf^²úZ>¼ëáë•]ùñm(?" ÿúþ¶ã¹¥s/Ÿ«Ë³½ŒT›ÏŸÌ«®.?>?Ž|ðIø¥[ÚW¯<¿ÑÇçÐÇÛÙ¼åóÑûï2¸ïÌ9ŧũN5‘üYô÷žmg–:gùX¹?Z@0è|ŒÌµV߈G¦íöÄ<¼ß ©G-ëÜå›t¢ü×§áƒPîAørxpúy±onÐJÛmgœª#'«kÒT'Å2;å?ì'.Õ«+?ºòã¼ïw]°ºð-¿" z*+&q ­.Û×^_æùg©÷<8qšjóSWßÎÀÃNý±Â^Ëé…:ÏŒ/ðÞpÖ V3$U¬sX—‘æ#J9ËûÞtŸ»ÿ ³mkÀâ”çþ¿ª²ïš~¶ÿp™/Ü{†­¦—A,×o X˜³Lœ0\µ»—ã‹§xtbœÀ\A/R79\&„EOeÀÓ[û3T!¿½ ÒV>ª3iKh´\â`´ó})‡w–j-!™nüïöÎ<Ê®ê:ó¿}ï}S½Wó$©J¥¡„f#„@$ àÂbHb;é¸;éNº/ÇÎ'YÝöÊòê N–c¯Ø+žãƱ161ˆÙ€$@æ©Tj.Õð¦{wÿñª„„ªÞ;÷Õ€$η––¤ª{ϸ÷ùîÞ眽ñ„dCžÖö4Ù¡ Ï<ÓÇ£oœà©Žý ¦‡ˆ»«šSl\PÁ ‹ëXÙèr ¯á‘ó#-x½·‡';;øéáŽóV™Um Z¢lZUÉ}›ë9t*ß~õ(ÿþD½¹±ñ¾0cÑ[XXÌ ¶vþLöU· Ä¡»öš»m¿¾þüJhaÇ#â¢fõá œŸgd¼Þkš`M=¤OÃÓ'ƸC‹™}kÿYÜñ¦áA …]¹cI-võ—nÿø]”Ö$'N"cå¶±†|cüîê§]Û qxË%ù3ïÿÝ‹á±Î±6 ‹KÖ±xÛ‘ñ ˆBÌÂúepÝåç ÁYëvõtq¸òeÖ/_¡ÇëUÜÞº‚Ý»9r ME¦‚î=>¾çâø‚›Ï“¹D\ÁÉWó‘¥ëé[`‚ù©j7Ä…–¦€Ý›bà¤rðŸ‘>ÈŒ¸Œ€º¦(w®©À{w–Ì€K~ø4Š0Øíág\Nu(¯ Ÿ&ˆfˆÆ\®\YAÄ' õí>#½¹¬3öŽÇéaŸŽ.¨Œºl{í;O«öù¥«ç³qi[‡÷ñ£}Fm­ñ¸Í®[PÃÚ¦ZúG}ž90L÷@”:¯'žç¡}GøÊî]Ä¢PŸŠ²²-Î-WT3”ö¹vy%ë.KÒ3˜çÕC£üýƒ'Øòêà„jaañÎÃDg-–T>À ÁñsäÄHác:åî‰ä‚‰?¼ßŠñ­‚Û€[¯zóŽH˜åé­a>[SÐ^ä`[WñwÇ—…•po;ä»áO^0¿®4<ÚípECáÖCG&ïÎ…ð®Zø§¬ Z¼3 R‘ÂFS’2Ú&ê@©:LË BÊìËL>3ULe<Þê¨*§Ý…;Ô1wl3Ûƒ¬¬]Õ)d`hÂÊ$YïÓ¼²‡þt†þ=-r{ÓZާûè|,Š—éqÁq 7µq ÌY0bÄ—µ‰ùT6D©JDe/[NìÅé‡ÈhX¥¬^]-«ß_Oç^ŸÁWGðûsÂK,ã“Jø’­òµ.TÔæÄçw8ÃÏ_êä艩‘€ÕUm8ž‹Ä!Ú HÄ·)®J •õyÜ "û¤9:|„þì(»^j7‚ãgeäúÄ“] Ú"µ\VYÃíõܲ¤ŽåIñØ×ap‚¡(k*«yñxŸØþ‰ê¬l^“"›Un¿ºŽµ‹*¨My²¬5N ðâž!xª—ö ñ½çúξh.eè³LaÝ2ê•Ð)S7dô®X:MëžÉš:Õy·üq òǸ¦"° ²ðÑ>vdÊx<* ÿ@`w¿9Œ;AÖ7,—»CëÑ„¿o©@Ú«€ü™ŸIÛŒýû ×C] ~ùadW_8]þÑøèrÄ­‚wÕÁCG&®ÏøôøádGoÑéƒuI§Aw§"s–?,”ìƒÇä繊Ýs†6ŒÃÅô¼Y©3ho-k"å-u.u†}ÎdŒ”™7BLÆÃ´/¡Û-RxÖsÁs ÉŸð`8ƒÞy=òùÑçvN<^¼RbsòÔ·Ÿ"‘Õ¡Tld´'x›¯ ®ö%ÈC4Wx’ËÜ+ˆúA Õ©(ßß²›-ÏÐagT^:yüÍÒŸ‚U‹kõ³p¬½²æ þ‰¬úû‘¬ˆÓïj"x8¹D\³.4Äùà ­ n&# „Á.Ÿ®½>‘¸hucÇu Q]´DøÍö…’ñ}^Þß«ËS5R­9Õ\–l^A”ˆëñî›7@%¦p°#ÐtN $î¹d3y^Ôƒ4¬Isïœ8—6éõ+ª$ç+шPuxf×iýÌRUá²uï0»ŽŽ–’K%\¾Óuc"=×? #_åèÍdgj¥Œ>–[ßDuÓµ0÷*LÖÔ°} ›‡ÈòÇEÈNá®+jÆv ÒðÔñpü±ª"qé‡çO…ãåÕ…º…Ÿv÷±¨ /®BcUÈ`ßcjÒ3ù·´ { ÒR·þ~|´äÇó~þü)Ê£Õ—UO~Þþ3•p×£EË,¦+aƒFHÙ +—–?,”äÉ¢`I Á³]Щ^øÑ«EÚT*ꀉÂj ¡¢D»LÚ"!Ç“2{2 )CJ?aÆj,_ü‚ò[DoÞˆtïQU\E³Ù Ê—±˜VPÑ>Lå¼*QÕqð$J©®#R¨‡ã Ñ@5ï"yßWS' ï§»L8®¯èãî?Êm›èÇ?²†ö -|÷äŸÿÎ.íÌÐ?œåê…Õú{çK$%%5Œ¦+45'*Ѹà¦âŠWp¡UÆ•\Íã¥{_‘\PÜxN4FMÔãÖµ-’ÏnwŽ ©“ÍÎåÙ×=$=‚J]*Â܆_m¯.mw¸ãµ ;–ÌIp·»@ŽõdÙqh„ʄ˗íâ©×NôŸØa옃i“°º–4ä‚;™›\rư~Óˆ*&ɺLÖ(Ó±™l¼M?ÞM/I𮓖?.Aþ7@.¯‡ÚZ´¿¶Ç¿Ò$à›;í=g¢@ñÇ ÐZ.´èM©L²¶p †AO¦ðóª$~ˆ|ça–µÄ‰8Ã’é© HÖàÄââæ¢Q”_QèîÍð›XÎSÛNÊÖ]ݶm$“çÛî—S}£ÜqÃ"nÞ´€y—Õñµ‡÷òÝÇòȾ>yd_5QOÞß¶€kçÎcN_~ RÙ쩞¦¾!Êüú$¾šjTD„l–`xHb곿ã$[õà'’¸.ïj­•¹µI:)‰WV3’ÉóºfOn@r9‡ÕÍžÜpc‚ÿ¹>…W‘¦ÿDž¿ûþqj*"<½kHþóå·^$Ÿp>UCÉ_1-'R[±wÃ}‘2õF™ú‘œ°‰¤L9ÌÑF)³ÝS]§Ãȇå‹?Æïk\× xÈCG yyKvXl§JLÿh`NE!ãC—U#[nC;†Ï$*”sýBƺB yC=.uüÉò‡åiã0¤b¢o'.†6”{¾P¦¡MÓy9Ì;¡Ê[~ü·ßî½_F•h/DQŽrùácÂö7òlÛw½{=ÿÈj;)±…m<ûôýõ- öfXØå—75qß %p"DâÕ¸^ /ùdßsID\úNgù½Ï>Ë ;OµoÝòÞwí|~ñú¤|âöùj~]RUUæÖ$¹iÅéöõD?rÝúÅ4VWk.=,An?;„ú9Å‹ŠF¢hP÷t$—'¶/Ú6GD8Þ="O½tB·ïî“ «›Ù°zk–Ô«ì;:XjKUGs ¦stöÈ3{OêîSÝl\íIks@ÖйµQY1§A[j+Hzq‰;)âRA‹’ˆºìBQ]Òœ"Ð@j’6%™[“ .cÝÂzn\1Oaå<¹|~íM•l^>—TÌcß©ÓâHQC˜K„S¹`7—§sÑÊ%Âé"TÓLÄ—Ú%tË(üÉÈšVøÜväÁCÅù£.±ù×ÍhÇüÒOÎ;ÂdzÏZÝ{ì4ŸýÆ6yrÛQân ¨+ÊXj÷7O +Ù\ÀÒÖ˜|pS­¶6DYЕˆ' Žäu÷ѼTDbúðÖ^jÜFÙ°¸‘¬ïháòʲ9UÔ$cš-dÇ:sä!ç+Ù¼OÄsÆ%q¤À¦€öe8Ú;,‰¨Çh6Ï¿<þ:‡º†ˆG\ú†³t¥ÃHØÅUgˆ@f:“­ig#“í¥l€Xþ¸@ù£½ Ýw’óÑ ßC^~3/M¸HS®jDïmG6ÍE²Èß½Š~n'ç¬Q“œó˜pî~o5üãMðÙçÑ?|~òñø?W!|-üþÏàvïûU ðÂ/Ãà(zÃCÈKÝE †6@ÞRÐ9Ï­k@·Þ (òÐôÆÂæ7ïžÑ[tìo^ÙʆŠšÉû¨ªdòKš+¹ni3¾¯ o¶=qqG]GˆzŽŒ3~:W0jâ—×:úøÄ·_dß©AK –@¬bù(\ ÿôôžÈÑôHÆ/䩊BK]Qƒ´TÁp}©ùþ!ôó»‘|ñ6Ž7¬ÂCo_«ëUÈøhuùØåöás;Ñþ,’ôÎMŽê¬kDßߎüÇnø/OÀ@¶xß?üö5ðàôŽŸ–¼§ʉ9 Î)ìœçZ’è¡ûÀó’èÁN䎟.§cvŠÀ –?¬b Ä ³m€Œÿð>)Üq—ÐÒŒz'q³(’sPMCd(A,êJªÒSÇArù€á´¯y?3»Žs~ûTD]Ÿ|ŹHôÍ%ç>Žƒ8yÔÍ!ùøÁ0¤=2ýë%m!ÈUiÂ;,Õ;‘è¸9Ü3[! e]Áq´§/Ç“;†e$ E“DWuPTpâQxv‡ÇOäéé?n’1k—4ácU’Îú|`Í|Ö´Õi&ïƒ.¦»Ž°¨±’dÌcÌ0á/¿·/?¹×ˆ%k€¼ƒùcç.É9ÏýÚeè×nbÈãûÐ?Ž6æPk€Xþ°ˆ%k€¼ÈÙaW¬€O}Jô½‘t*"’UUg(F´¿‘ TÕÏsˆÇ\UtÆ?kÓ)œò-$b—@$ˆäÈÖt“®RòQˆG)xåÎé§ ^VÕK«d“ÁX·UW‚áfüþ ˆ›uñ+4¼‚D²Ä"žºŽƒ¢8‘Láìñ(Txˆ[¸¯ê‹¸™„:¾‡‚¨“'ˆŒ Fú+xuWŒ;ÿ°_{OûˆŒ“qÃã¼qMÅ<ê+ã:ö{Éû1ÏåŽumÌ­© {ïÁíGxþ@—%K ÖyóÇø —UÃêZÍœ€æ$/ìL æàä:˜;w<œBÐ+£6¦<Ø4M¸ö ëüYå@áãäœöûŒæ ¡€÷¢£ù¢ÇŸÔ‘‚ÓåÖ§o‚-{ইÎÜñ˜–o܄ܿþöøä ç>·¨þòJøðJ|ùäóhÚ7ÖUk€Xþ¸ä ÉÖ¡0a'RŠÙ£ˆaÛJý|*a1˜ø0a‹…“ ó †ýVñ2mw©¾† £ÈØÝÍ›DN«¦â.÷mncͼf4Ù‰[“• b©?–‘o|e/½Ý£úû¿¶”†d•ä²>d}Åq¨K ¸Ž« n€FÒRQåê~¸›íoô“ˆ!c;!ç4G|Å ¼[ Ûûî]µJH§ÏÜËР.كבL ^Íq‚êœvŽ¡@eÂ!W n­­XlÌБ1«HEÏeA‰ŒÒ˜=òj•\yÏö ù¥äÜ$‘™©^›ê ©œ•z×4Œ¢èp©çÂŒ‹L±,ÊX«L¬^ ax-\ üáœûáQóÇø½Š¿^‡6UÀ'~Ž æŒÚh2Oè'×ÀgnòȳèÁ‰Q¸qò«KP¯ŽvÂo? ™²Ž„1@ÂÌå˳Ξ¡e+e ¨i‚’0Ê0Ñàˆ«9fqÔK%cÑïiˆò´Œñ¤Œñ–sX¬Þb–·Éxˆ!ùpä|íëã¿ ¤%¨ÔE·Ì'Ú6J4y˜lJH¬ZA§ÛÇw~²‡ÁL¯üÃ,g4“ÃÊ ‘¨ø%ŸÏ!âàzÑœâe…#ÇÓrl×i~ôpÿ$r¤çÍó«;”æf-RpßùþqñÆ{6,âÜs9AþìE}ò¥ãì9œ£6ɤÃ]w+Ë– ÙìÙ¡Ûuü>Š ‚ËAÌQùê·†8Ëø(7ùS˜¿räÂ4ŠI˜¼R}2ÂV*7%H«”Ç´r0ñ2–Š(Ö‹fº–M4Æ&Ë)—Œ?ðÛB¯9Æ}øÜkÈ­m°é2¸v1rí|ÀA‰€?ˆüÓsðg/¢cwTL湘Sq*뽄ÔË–?f”?äÌOñ 3¬™ØîÒž0SO—I_L¶ÍM=Z¦Ûóa¶=X“Œ]É…"}6~¦07¥¶%'­wõ¢ZùâÇ6ÒTÁYñZY…W·‘­[¹ÿžG™[ÑmߺU:Ž(ñL7h¾¦Š¬æÅ! ©ªP]‘ýýsúÍŸî74JOIùH&<{a ‹[ªåÙ'õKî–gw;St2Až;~* dO ýƒFÉ")á)6ñú•Ò‹R²\ê£.Ì1S]Æ@vL=AR.Ãx°JyžÊ‘µ°Ç—L’sa ËXþ°üq1ófG‹ŠOiˆÃ¯EÞӊέ€ÎdK'|eº­»|þ00¨KéwXÃßò‡åYãñ< Å*¬§K‹X=ab¯›ZïåXŽav JÒT­ô0Öy¹^%À{µö ÖIDAT10=“­=)s¬Kõõù8ÕŸ&uX»¨ G‰VÓŒŸ’EËòòöSzêÐi~÷C‹$êDÉäÕ¼àÅ"ÒzT‡G³ˆ¸Ä"®ÔUÇøþ‡Èûfn&ÝBÏå^ÙÛÃc[;¸ry=›×Íáƒï[ÄU+eýª&=Þ•æØ©´¨ï’Ψf2H&ƒf2pöŸtIgŒ–?,\¬üa8wÅæ §n` ‹Asà€8‚èù£ ½.6ö–?,\0üáŸ*ÓûQìùr,EÓŸ”` ለ2ä©Xªb8FåzËõ„ImÄ€ŒËõò/@cFˆô ¤åŠÅÍÔ¤bâ{‡éé hjk“deŒÿý™<ðè†úFdóÒ:^ï8Í—þó ;OË+ûzéHÓ=fýŠæÔ%øÎcM?L?–9pì4ß{üì92ÀK{ºeN}Ræ7§¨ˆyܾy¡üÆm˸aý<©«ŠqåòFimNrøø‰˜GÞÆ5‹ëˆŒ‡™Fïé‡b9_¦D#!efªçšÃ.¼a¼óaêÃplóq)c=‘iZÇ,Xþ¸(øÃðcºèÿ'peË[ζO™?Ê0ª$äúcùÃòǬòGØm É Ó°È½ÚPNg2 ïl´q&çå¼²o½º•oÿÍöv㯾¶—ƒ™tÀËcqk“._P͉þ4»;‡Î)¬*aÕâZ²¹€motÏŠŒ,™_E}U×>ô¥Ì©Oy\±´^+“Qé85Ì–­$â/î:Ås;NrìÔ0Ý#o§nLGØÀ Eç/ä2.„5ͮݖ?Þ1üq éÊtöÍò‡å5@,\RRUáݽ’ã]¾ò“}ä4ÑHeEÇšë¼wã|xŽ´·Vqÿ{—Ð;˜&ñÙu°ÿ÷誒^|½‹{{-X±ˆåËÖ±ˆåk€X±òvˆHáêYñ)dûUä¦ÞXiª³##"g…¢ÓóŸ«JFذª‰áÑ<ヲ•;o\D2á‘LŒ•݇ûÙöz7uU1¾üƒ7xbûq#é¼þÛC{dÛë]Ä£.ϾzRÇ˜K›ÉÖf²µ™Ð-Xþ¸Äø› Ýò‡Í„^rÑ·™lm&ôræ=tÅÿŸ C %ë[ÚVÍÍZÎñ¾ó¹je£Œf}­©ŒJe"BÞWþñÛ;µ»?ÍÖ×OñÒîP%P#Ý ä\ØL¶æcWŽl˜–i3¡[þ°üaù#ÌÜ`` …Õ Ë–?ŠÊådeRØI` Š2“˜‰~OõY“Ålªí›é1Ÿ9JÓ1Žo›ÜΩOÐ6'%®ãè­ïžÏÒ¶²ù@n¹ºES‰;÷÷ñÕíáK?xƒLÖŸÎy™Éq»P×Ùl×ÛÙŽÙÖ'Ë–?,¼}(§=–?,”5·vÄz°¬ë"÷`‰€#‚œÙÕÔDÌ•xÔàWÞÓ®Õ©(wl^ÈÁÎÓüÆ_m!“+˱,ëÁ 3n–?,Xþ¸Àù£DÿMÖ,Ë–?¦´bÏðÚ3¼ö o8¿èÎð.[P-±ˆÇ«û{&»doÏðšÕcÏðÚ; –?,¼£ø{ÄòÇ4ó‡Ý±,ëÁ²,ëÁ²,»bùÃò‡åË–?f?ËÕ“uO ç7ìšZ® Zþ°üaùÃò‡åË¡eÐÞ±°°°°°°°°°°˜5XÄÂÂÂÂÂÂÂÂÂÂbÖ`ï€ÌnìÞKoÎgªÍö ïìôËžá½xtÂò‡åË–?,\"üaÚDR&ó>Ùüš´Û&’2Ó°‰¤l"©ðz6¡åË–?,Xþ¸ÈøÃÁ²°°°°°°°°°°˜5Ø#X³Û»…~éÍùLµÙn¡ÏN¿ìúÅ£–?,Xþ°üaùãá»baaaaaaaaaa1«ˆã~îs6Ž{¸y´qÜm÷0ë†ãnó€Xþ°üaùÃò‡åw8Ø ‹Yƒ½2»m°gx/½9Ÿ©6Û3¼³Ó/{†÷âÑ Ë–?,Xþ°üq‰ð‡Ý±°°°°°°°°°°°ˆ……………………………5@,,,,,,,,,,,,ʆ̈́n3ÙšÌûdókÒn›ÉÖLWÀf²µ™lÃëØLè–?,Xþ°üaùã"ã‡É/©H‘ÅIJ<öâË[ßúL˃r¥DÛ%¤ „éïTꛪZj<ÂöWʬßTöLæNB´/l&ceÚ¯ÉÞ“)ÊLƒ\J™zQjÝ(Õß°s?z#%äBBÊg¹úo²î‰áü†]SË•AË–?,Xþ°üaù#´ þSÖ·rÔÀ ÀIEND®B`‚dipy-0.10.1/doc/_static/simplified_tractography.png000066400000000000000000004344721263041327500223740ustar00rootroot00000000000000‰PNG  IHDRÌ"Sý ¿sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ 4t"M@ IDATxÚì½g`\Çu÷}Îܲ »À¢7 °±ˆEÕ›-YRä&;v·Ø‰ó&yÒžäqâš°Ü^­ç¾ßŽw €ÃБˆ®þš[èh–€“ˆ€c2†EÃÌ!"‘ȶmo„B¡ –‰ˆ¤”"‰e[͘þ¥ñ¡ÃI¯œ~ŠHPîÌÅÂD¡ÃTDí£á Ÿk"—©'ûPÆ„>&Þ3CÍd†EÃäD4 #ã® …0fëÉ–lWÞUy-Ï=–~üY â’nÍÉ4ÆÒ²B[©8;öC}ÌÁîº u'ÿQ±ÀöÞŽýd 3gp¹\°wフ—|Õ–5Bˆlë pUn!;B”îŽYDüÞ)Ë&XèÑÜÐ5ñÑk›Æ >À±¨ûÉ0,2f’yï%4¡”RRe{†Q#Rˆ"ý …mŠÎR ®£mƒ.SÇ_ÓšDFyq„aXd0 s DT=¿¦ã\Ö³;˜E‹ÉŽŽû~š:T:Â__eæ,î!1&_Ù@ t‘ ¢5ìtlKðãÄ0,2f®ªìL0 á0„ÀD<‘íúûVèNJ¹-Dd€˜„ÜÄ=Ñ_^·R Dâ;ui/l^½ÐšÁ«$ Ã"ƒar.Ò×D´uëM]]ݯa]S½RtlÏ‘¬ö" Ý €ÁæÇSÖˆøÀË¡¡[Ï‘GGĘT ô_Ç:®þDä[¨um·øig “Sžyä¯~ñßš¾«Ëj%•TÙø¸Ïü{õDà\ê]Ÿ$\†.Nu7V]*ÏßžÈ` “Kúš5ݼ÷“_ÏçÄ D´|ÊH(œƒJj¦€€dj×ÚÖcþt…#÷ý¹ÿl?,ª)šPðUnÒ‰ oŸÍÏ<ðÈ`˜(À¶­LME!2Ÿ-QÚ1ûY¤ˆHs–D:^I­C†âT #ä2!b{È–TâuNø‚Z FNqBq†a‘Á0s"òz Ž=– ÿZ1¯RÚrç³Û³í¼±`þ=(ŒpûK)šc£ªÌ™ëe‰j¯[*zøTëÖÔMUgÞÇÊ0,2&—²@ È”ÿAD""‹ï…¦çèPS³d¥ ùy³÷7¹¿•ˆ`aI5Eko6ÂJhüà3 ‹ †É…gÂ7^ü®n8΂ü¯í’µK ‰æâbJ&…×ô'3’[t,•£ÞW±C-–”õ¾©n·à“цEÃäTgÌ™ÇØã+)sáÆ]•׌N?<ýÉ Dl©»kõlGŒîéW1”êüuè±ïl‹öÆýÐ;_# ݇8©8ðÈ`˜\¡dÆvú1ËÊ¡©š¦!bp8›y‚‚†_#eÑô¶™$¿#â*»!Ÿ2jË`ÂQáûáp0Vév\ÕPµlˆv SÓãWmÜå‚$õ¼—•aXd0LÖ9}l‡¦›wÜ÷ç™*páÂpî\K6jk:M8søtzuw=ñÃéˆDü‡#ñ„‚-åY y ¢è¹QpÖy/Ò7[*JÂÉÁt¾t™…® „š‰@¼hÂ0,2&û4-Û*íÄKOþÃ\©°’2—{$HÙˆÓ=®Ýhg¹jˆhcFòÃçßmES× x®_Zãg6O¨Q}Ê¡X~ö†EÃ䜳çDtͶ MëjéÊÍå P“±Ë®˜,²}e±‘½€Œó%OT|ÂVÌçIB‘æÐ'Ô(sh+ñ| Ã"ƒ»€™ëÔÔ¯RJJ™±S-ˆHˆ¬¤Ìzï /]ËBDÔLD ž}ä²+&û‡$¸tÌ^@"Žìê&K›É Ç…À%µ~Ð\FëãûL¿µ‰­“áE <•×¶kxï/w=ŒÈ‘# ‹ †™ã4,Ú¤¤m[™9à”ˆæÏ¯ïééÍ’‡ "o‘÷ľc9;àÔ·è7PsÅúßZÖìè•¶_69Uq ¾«ËÇÕ¤g8¢!®YX¦ ìk¦î(öLVˆY€¤ çpþÚ. YÁgÍ2~7†E“º÷÷ü©Rš£m¥TVGóD¤i9Ê'•¼œî©웢Q'F¥!àÏVš9¸›$iü «@€€…ó‰7Ž:4QsÛT:Ï÷,޼Džú5l%†E“º÷z¥䙞¡YŸ..­SJîxù?çÊìôò +áܱ³¹ÓÊšÎ¦Š²»y5°§t¯9îó·Oö&Ï+AMÄþƲ©ËYõq[8|21!" 4nfÁ0,2˜´Œé-eEM<Û;”òwÊ}iyD hx$S—–R^hc6š–Ì,nÅ3êítªTP');Ôöìd?ß= \jÙi2l@÷ ÿš°%]R—ÕCX_ d¾EV&y#R¨³ru¶K ‹ æÊ™É€3lËÞx"ãå·FUGlºFSÚV/½hQ“RêÍ7ßÊÞ°ÞSà‰Gã3êíÿ{0þçûâ©U‰ˆ\U[d¤g²3`[C D6§1â½ÔÐ(Ÿú╃íáî  {÷9•¥·-º(½ÜmzáÄ#ù6w…ˆ}¯}lËU½4—Ââ'§ñ£Óqœ)Ã"ƒ¹Ò˜ïvšB Ïâ(Šˆîùä×5Ýìî8žÁbu]Ï^ýåþàhpFmü¿«>ÞìKeøŽˆŽâ•Drôä.uEÏvغ€ß[šÝ€Œxgu''"Sô«ÿž¯Øt™ÿs¢í2½@ „™w>•ˆPwh9ýؽõ·V¹ËøbXd0W,C  ÎZªg¡éºn¶žÙ“©«««¤”JeK6éºNDáö˜GÇ…^q*J­Qw•“ŒŽÿÁX¸wPÀêb‘Õ]»±ö£Â=NÇ â#;NKEU@l ¬6Ó5J¤µüŠv´Ã#ÊNäæX`D|øì“nÝUá*eİÈ`®d !*Fk$f)5+F_MÓîŽc™*°´´DJ™‡áúU.M¤´•€ˆŠ–}u·8wáÃCÃÊVPçÉ®)@q~çÅø'GÉãÝ£ýAØø•ì¸-¦±ô&-(]¤ºwÙyíHDÑÎc¨éå7þV¶›dùO´¾Td~¶é#¼©„a‘Á\ùlò{‹MãÑ®ÁY3úsÍÒê†D3õ7Vê ÿt4‘B?#")ˆÞÛ£ÛU¯ÏŠ£JØ2–°ï\_O*! Il™WþvGÿtZ§$ ?¶n"bðøëº·lB-•…9Œ§ÛÃÝŸ[ôàM% ‹ æÊo)+ÒöŽ„f¥7Ýõš¦Ÿ<üÚœè."Z¼f©•°ÔÌY>Ù`(¢hJ祢ÐQsDº¶¹q`«œ8ªKš¼¤T„­ïÓç”Dš˜VeÜc’‚“ÇòÅË ¤•íÊ$UÈ ßP¹‘ÍÃ"ƒyQërtÇf'à‹Ëç·7ïÏŒCTš–­pÈt\Q}J‚ÇZS ÿô5ހѾݙjšŠ$ú¿ñz¢ex²/÷÷g‰ÜçÛwJEå…î`Ë êbÞ+gva@åÇþ’Ñ#/bñÕζ°”ýÝão­¼zUñ68 ‹ æýE£Ç´es$6+W_°hs0ÐßÕ~4}÷YVV*¥|íµ×³70%¥R9ŽÕ¸¡T눨dpÆLÅ ¾…ñƒ™k‚.¦ÊÒ9ÉÌDïH„’aѸ«‹fvY›Šš4;Jù°\"£ÃWž%ýã?Q¤–5²µaXd0ï;ÊLã¦ÒÂ}#!E³`ú+ª¯Ûòñ}o=š¡¤x!W6Nƒ+©,URnz[ Î~k¹f<1šâ6wÍMˆ<ûhFbu€@8g–HÛ– J½Nèxþ¨»²0Ù·¥n LC§*Š–hvd–F²Ú2<œ‘±½g×(øÝeŸæ`O†Eó~+¦$z¬k ÷+åˆX×°FJûÙGÿßÌ^Onßwòw3Ý(ÔT¹05ôèðb—Öµ53#mÜÖúÜ_$‚½lúLî\àíåE½±Ä¬$¿þޝ¼þü¿w§SNt4„ˆõk—äá’D2ä¥Èħ;ìYȲ*(1Yº’jŒc&TDv_5l¸ýd]jjÚT54yn0ù¿«ߥ0p(»é°tU5Ò¶ß(¬Ìì#ADáîÇZžÿÆû*\¥sè5ôï}çÇónûKÓ[Áva‘ÁäÎBÄ×Fge2Ã]àBÛÿöã™jN~vòGê "Ø= óÿyèo^VÓúò1ahšÃH¿KEr¬ÊV“é°F(¾ß“¡³»лxkf‰c#gžh}ùc wºçÎv" µíé{ç'U×þ®ÐÀ0,2˜Û {«JJLý¥¾áYxÄ…¶hùõ‘Þ` ¦ƒÎúú:Dò¿“KXíÆ#Ã2¯î;ꈈÆÿÉþGD)0>V–ÌT¦v"F¶ÖMñê” j]‰Ó_£9 2{­ã£g‹Lo±£p½Ýˆ8xôiïüºÛÏæŽa‘ÁÌÂàæ¹#–´§ëý€Ê„ÛhX´¹¤|þËOýÓL55ÕBàððÈœèçEZw”úc*îûè®n"Ò<Æ…Oþ{Û [ªºŽa4´%_º.#²€ˆÜUâÌ£ñ,Í3I"E1:ÇJ% EUtÕðãÓGìȧmn)ŒöWÿÞð”–¬ü5ÞðÈ`f¥^·@|g88Íï¯÷iŠ(”‰‘9"n¹ùóºaîÞþМr`C©¦žl·ó§J¨·0CIç¥gFÜ"‚afÅÃQ,"Z•.7°ãÇà™¿6ƒ‚ì?N<°B¿ÑxßÜR­Ï¤Usý°‰cXd0³l’Vû<#– ÓÛà7Ð"xa c.³¡qã`_Kî3ƒå’;kõá8©|m`4aKE·olèz뜧¶h²q¬Äâ¯Y–: ñuh:’.I‹ˆ W0SE혆Ú}õ·Ï¡‡ Û_þº0œu·ý%§ cXd0³o’š \+}žÇºâÓHMD«4 4|)C:cåú»¢á‘ŸüæŒFÏD¤iÚ\± K …¥àmv~Vˆhdw3”_³p²a+B¡O¿äºÛMDèÛke¼Î±ImÀó+#vh°û|K®7‹ª22 CDñáœzäÖêkk=•shÌjUv¼ôª±qcXd0ùBË!΄/~zÒ‚7ºÅ°M#VryÑü¤Pê|>‰³û¶99õOŠ‹‹OžÑfÏ®õOôF„ùÞ$%Hr!–n˜?ů‚ ܆>ëO)"6ÓHú xj§JDœ•‹2uß-eýû±7”®ZTØ0‡œtß;Ū‹½þ%K×ý) Ã"ƒÉGÜŽ m÷ÆÓý¾KBK,Ý1_Ò&Ö5¬îè=wÙï¯Ys¼õÖî,¹1‚t_¶z»ÃƒãŠýâ"S <ÒbM1J&•Ý%;8Ÿñó½+* *˜_2…÷ÕeJR² FAà\Æf†ú( €~pÊX(ÖsºôÚχ'#%‡ìÈ¿ÿï•þÅkK—Ï•–ˆd<<ÐüŠt9 +jo„9²ÄðÈ`ÞÔ»¦ûFÂÓœ+vøH…q,$ÏFTúÓËõW_µáÞ}ïü\ˆiÅCd6lbüK¨ ÛJÑßQ©«ð`ÿ¹¨Û-Dt}…v: &\c w¼(¼ >œK5„ˆ;Ûû®™WšÂ-ö/ÑIBÛˉLUøô™ æ¡o`çO4gæ,È”O=6rÚ£»¯¯Ú8'´ÅIºÿÁ·`Å¿[Yw[0†E“ïÆkm¡'*%L/7WÒ¾ûtÜÈ@p"ÎoÚ íÄ™–_Â¬ŽÆˆÈç÷užëH¹!ÃIÛÚŒíD¼¡RWÿq2qiw¡Èõb"¾v¨Ã‰xY±¦!Újö—ù@Œìµ¢®oÛ÷ªâ ÍTô;¶¿ÓèKK>1'B11ðµ_„¾þÜ¡G>옷bù¿ËA ‹ f€ˆ­ï>Óuò­Çº§o³n)ÑÀ;£™ i\³éÃDÅåT¢=šÐ²({m)[M²ÉVNô±î4¼ ²zcíAð,)ã_§5hF„„L1ôfÞ-†•‰!; ]‚ò¶% WÞ–©;õ\Çë'Í_^ò‰9᪉Hv ƒÀÖ p¯¼ƒÃ"ƒ™;36|°>Öl=´§»BD‹Ü¢5ª2²Ó¤¼b™-ãOÿì«—µ›dIÌ’y­ª¯€¾ÎÞ”{òî›5=á¡év£Œ£îÊØ­ŒM°Ö£¢„cÌÌB¤k”LŸk2½õ»ŽÚŠî_1?µš8Še`1 ¢d(¾TÔÇϾãª]‘‘PŒdµz¢ýËŠ aÌ …Ñ2ýömÞG£®že÷ÿ”Ã"ƒ™K3‡»¼¸"ÐsêÉîþi/D\ãÓŠ |¢7 ¤IÉ¥÷;]¾Ž–ƒ³ØþòbèïìKg.Ä¥;Þî9>n´£ý¤9ŠÓ¯yðÅÓhˆÒ?Þ:ͯp_ˆt·9™WˆÕ^×ì>™D”‰(<;*<~ïâ­™šmú×#”:‹o©Þ2'ƈùÁöAÏY[ÿùבÃ"ƒ!%¦ IDAT™clÜxçJ_AﮟŽÚÓ®,ÍDNK© 4=z#å18ÝP»ÚúÁþ³—¦w½N¤Ì¢ ìÆÄdNñi,%¼}²G×µÛ=Î)Z¶äh,qsCêç§£@ £éf†}Z"çÞq&¬â ÍÔÍmw{ ÷5×Í…úÖ‹±Ñsƒ‹÷_óÀIÌåúë?î6ožÜ?}+Vé·–è/ØCVZ¢”µ:!Ä,¿uMõá@Êv<ùCÒÄ4ŽAA’Ym^„¡ $ ÉrÉÑP4þO»Ž~iý¢åE)_·p¦l8ò½X:•?G#†eÝÐ÷gNaÀ3íÛ Ç4R³Ì:ˆü‡gqˆº¶l÷—m™×p/²Ê°È`æ*š¦ßËÇ{O½õö‰w§ÿ+â¾@ºÎòêÞHJ…Gƒ³üj"M;ND5¥-ž©£UHÙÊ yêî̪Û@ÄDoÄYS0ö*É\ *fMøýoì8—ªÆëžî5dVg!"F¤ãfYzAq¦ŠýñéÇk=_Xô±ü÷ÖD¤Q´ }ᣚ·¢vëÿâi †E3‡AÄb¯¿º¸âDûi˜ö’@\ää1™ADeuÕB×:O¶LöÁÁAD,ðdµÔ¯iKÙ !âš²F"xí⽬ãÚ‹B@PÙOŠ¿Š$"!0ÒDËÿ×-—¶ñýg* œwóšé7_4øQ EÆ}^¶VGV8õnÜÑõJ¸Koüb¦Á¹`[Ð ¯.^šÿÞšˆh4úÛg†õ7ã¢×¿òC÷°bXd0sžë®ûøh<þô‹?žþO–x„@èI¤î 1ÒÚQä-~ûõÉIÊéììFD¯/»"£®©^Úr×ó;ÓtBÃ)&ŸÉ@Ä‘cße¾†ëÈCÍu¦n(û¢4'DNØ'‹J|3òÁªmˆDñø™ªk @ˆ§2ÏADQƒhÐï«Í  Ø;pÄkx}õùÿ"bðë¿´|ªŽ¥[kçˆMÃ"ƒ¹¨7Á¿`]k4žHÌ`A!Ý£½QÓ*j Óyâí}³Þ zÚy8–øçE턢ɯŽYiš&„¢‰½Ú7v¾uAÕÝ‹jSp‰™Ä#⎙þÚ«K×g°ØÁØðÚ’|Ož|"?Û²›Ïy×Þ½på—9ƒa‘Á\!Ñm •¯¸yÛ‚ÓÊ÷@De&©t.êžW£¤r¸[Ÿ„´%K:(© m§Y]P²¡rñËmû¢öÙµelPxæß“?÷ýß<±ä- ªf4m@Š(akM㳑0“ÿHeØûäS[ê_–Áþשÿ‰Èتâ%ù?‡~`»:2ýàðhÿIiÇ G!‡b0,2˜+D¬tš¶³ðh(¶}û£Ó±nˆ¸¼@C€Sa•òE5Q³pžRjÛÃOÍ–U%¢u7\-m™ˆÅÓ,ªÄé³I¾Ôºw¢«H†'SuFCœ¦?'©!MLú³ÃÍ£që›·¬™‘¶#¢óçÉ]’}÷}3J¼óR9kF‹…%)ÛÏüLû6Iò–6ϧ’Õ£îÐhã@´µhí}‹¯ú}žÆ`Xd0WÚdÆ'kJ·~J9 wïy~:?)6Pô'(xIÒ0m¼ãÆÈhàÒÉŒD"îõyIe×à"âùØÏ´UÝÕ°©Àp8-ð¢Ü¶" ÌEÄð«g++.ÛùO¾}úò³ƒ†×) -YÉ„TÇFWU™š6#m‡ˆÖ[­ I”N –„*¥#Ò”ûeaÔ.]A™ÙT²"­¡ÎÅ… 4ù>%³FÿìFâoÆË‡ŒÆu¾¢Å0«1ª}2 ‹ †É¸£ED!ãÿÈ`—m[—õ^D´Ö«uÇUÊ‘ˆnÿèÿºÑ3ð–mÙOýÛÆ‰DËJK¤”Y5±p4ýn€—·;<(ð¢„ß±Á€3˜ªA$/ŸjÚÐ5 ^˜ÆPÿû•}u…ž-ŸŸÊuµ‰ ×ð [˜°þ/Ü)ˆN êŠÜ¤C†|ëÙ`«!ôë*¯ÎÿWÏ>ÓGºEW»þ"¿¹¿lí,N¨ôÊX‹ ³=d‘Á0YáC•%e ÖYÕ+^yíáËP‚ˆrzgˆOí’Í¢ÂøHèš[·3882+ /ð¢Ãog&ÁùUeó}ÕÁèÄqïøìÏÑöÖ^¡qmS j€Bq@Ð×TOp75i¥rÄFÿ§l„®¦L-¼ÑóŽGwi¨åÿK|à…`×¾xž²ê­³5‡ˆ;ãƒgíð³ “%JMCT/—‰ØK¯<ÓøÜšÆ”/ª†Â€€…e¥•B/áÑÃë¨}\_‘~ÿÑ¡¡“®ÒrWIþç÷ ~÷9eÇìÏT"AQɪY™À8g‡{dÌ/Ì…º8…9‹ †ÉMgÀ– ¥ ËÞÙûN™ÅÒ"‚ä±_)y"ª_xõ™oº*+ÀWäKæÌ€ãÇO*¥Š‹ŠrÙvÌ`º¢B×"CèO·¼kêN •Y n.)³;Ó24††½ñ„¡‰»RÈ»5®‡Œ Ú^LVý®+…ÞS¦5 ôODÆBvd}éÊüË­áíÏù?óá„MºQ éÎÜ+Œíñ^Ûâ(YjxÙî±È`˜˜tXèq%=ß;¼iÃëê–>ÿâ§°þe¦PÏõ§x"’’ÉÝžD´vËZ@Ü÷ÒŽÜ÷›¦i¦Ã<¾ïX¥ÝQeè±tÝ3 ÓXyõJ[Ê—~ø?ˆ˜ƒ c©YP‹ˆ£C£™õõ›(šEouϽóÓ„0þ{oŸ°Õ×®]™æS!Ïa¡sÂVXÒSš"‰Øa@(„tOuŠþשÿY_ºÒgä³×$¢h Ùú×£%õ·u”UoÕsµT‘¼qG­@Ô<ÍU¡9ƒ0Xd0Ìd vZ¯>0ôðW{Žï Þª˜o~òo*ïúýÒLÙ£OÔ–¹„hÆkª ŠžyîêŒd¶ ˜ò“±'й««âñÄúk×Å£1˲6mÚ˜Ë.­¬«BC½ƒ™-6\]\1 Œ&"¹NB¤NïÜ´º>cV—fï™™¹È î~üd±«±jsúòëøè¯áYWº"Ï_[Dìyè[X`t}¢ÝDoIåÆœ¹ù(É7âýa²7šÅµš‹M(‹ †™` ¢$õ6'ùëÞ×~44Úg›.üø_U|ü¯*nþ¼?³¦Üš¶s0×^s¯i:ŸyîD ÑD8”ªÊX»éÊÔö—þ3Y¸^à)«*—Ryæ E*ÇŒˆ¤TfoÕx+àžÞ¹l^êìý€Ç»N3Ótfö‰>ЗU\ú§cĈ`Á½3ž ÃÐdúŽvÿàÑR‡?ÿßâ¡3Ï鯣wÙµ@P1ïæÜØ "²H°F É\[<Á"ƒaÆË D|êŸúŸúçþ7þ{XIºåóÅ÷üqÙGÿ¢‚&Y&OŸ[Ë‹tÄ#0\¿õ#†avvØQêÉ,÷ï~B ¸î¶/%âðÙñĆ믺ÎðÊÅåû¹´²´«µ+ƒ¢%xægDRó/ß\µT*e+™³E“`$ñl{wM¥o©f@Ú)(Ο‹6¡!K5Òc‡;dU¯‡ò4ïÚË;‰àÞú[óÿ]>þ8õ¾›Ûë}Òå©ÎnÞm ïM ¯2 ¯á0Ï÷:w3vþ|´ãx J‹êW:—lq—Î3ÇÍ:d ±Ìa´Eã+|‡ÃeŽs͇jª^jå?T®?ÞkÈ«|3v8ƒ}ÍåUMBDΪ ›”Ðı{ªêkU®"3Î ›ÉA&ÀïôÆ¥õ\Ë;w/ØœIdÉd]'\Ñ…xàð¹˜-¿qÓš¶“odàrá„(™8ì">JåëflÍ‚Ç_¸°`~š Oš¯*Yšç1ŒDÔsð¿Ä9… ç†éËÁñÝݸÀ((:ÏaðLÃŒ§ytÿ Áe[=MW»~ýë•×Þ_4Vad›…gÈ–]±8Ü|ã'FGöíuÜ`(i¶<RÚdŒº ücKš¦iZM}ÍPW_ppdÁÆ•JJ;aå ½þò"êËLX†²#$ÞÆû“SÖ÷,¼Æ¥;ôŸÍHáÞÛ›ÈRÿ´cB·ÑŽ5„ú FOôw~IÚšF˘¸™qrWÌØš©þV U¡ž–¯% ïøi§úºÊ öÃiûÀ°êË…ˆÖ÷RX ÊhZù•ŒªÙ‰P‰íñ¸Îôû… ‹ †k•à™Øÿbð÷~2oÕ-ëîôå¾ó\Ep4MViåŠk»{šãñ  uìMÌXdÄ" r¹ /z1LãtssÃ’_QaëÑS’˜’²ê2j?Óž±wT"yÈ-øÁ~[elnO!´Œ„¤¤ÕÅ…Cï¶‘¯)½%‰¸ DhN0MPD »gæ2U4øl½Û˜·¢‰ Ó©XlÖOïTÃ{¯ŽªÁ|x¡[_úµÄ‡ÊKÜë²:éBD’( ¬Óv¨õ5f0,2f¼ó@|ì}û¾?+‡Ù›ä$¢MÅÞ€m'EO}ÝRxûç/ýææ"^œYBˆ·^ÿ‰RªqéÖqŸ‡P‘Ïï;wà˜n9î{ÈÌV`:HJêî÷’@¬¯X$Owdµ.M{ª¯oh8 >wzOë"Q^péŸN>W6-šñ2™®”Js<ÿxË‹’Tµ»âÒç6¬/Äþûvç§êµ%³þ:Û±ñÓ°2 ¹Ò,­ÚœÕ×w%Zfñ£ s©‰ŒG|àwf9P ë\IôrÿH2¿øºµ·&g2&®θ|)Œt`ýÖõJ©>—ËžoZµ( g¯ü ·¿9Ð=÷J™Éç°cÏÏÀmÎå)?ÞD4ÒP|®é#î¬~5þHb~,ˇ(„Î_þ#Ù÷–——_Ÿ½7šˆNYÁ=‰á"a¬1‹4äÓÎXd0ÌD–"4$ýÛ¾5wxýUƬ› ¸Âç Ù2&"VVÔ75®yöùF£¡q߬w‰ÈLÖ¤´Ã¡¡-7~B³HÄâ‹×®ˆ‚º™£ÉŒd0„ó!¨Ç[/íéMñ>ÚtUlWþºŠEµe/¶îÍÞªü;#£àJfÖ×È’d+}õÙÄ­0@õu3¾;§üR¶ô”oD|ðÌ È¥? žˆ:åÙE~Ýý§9}¸ìëî;*öÛV«põFéUÙ{£›e¤WÅ P[i:Q†Ew3¡ÂxüïúWßR°p]¾$ÌYàv"bK$–üßyµ‹ ÃÑÙuzÜ׊ L(‚iŸŸÒÝq ˆÎ S4RDJ¡ë‹×,õW–Û¹7g3:Õók¤´w>»µÚzSÌ E*FáGžÖyË¥R=‘!ÌŽ <‰$l9¯À]_î“qÛUéKçLìNr‚0'"ò/™™?³»NõøÜŽ… JÝ>Ó¾­Øáÿí%Ÿœpã•ØÏ]˜ÇŠ"bßö«ælÐ kVgÉh$HuËX·Œm6‹—>`Ìă{ žþçuwzWÜèÉŸZ95áÒÄ¡@8iÐ Ãô¸½§Nï§'šÜÂ&x¬Çš¦e?øÎ“RÙEÅ5ã>ïïÐ4íÆ®C‡^ºy ¢sétC·%µtGšj RVrë¥*vz M?Ø +Ê)¡T,f#À5K«Á˜EM:>Ò~» ‰Â Ž µB8CKÖêè>jL9»Š$Ùl¯õTN(#ÞŒÿÒ#|r}!rBôý9>÷Âeh˜AÍ'Ü9"€”ÒYZD/\»l×ã/ô¶t䨽JÀ#¯µ+¢ë¯*K­+ØŒš…1anª\š‚f£þ'Ãá¯ÇRr±Ú¤7ôäCqpÏÌ”ENlGÍT˜â "z®ýuº¥úš _¢6yªF4ÎzÚŒdeâî³M~sA6ꃈ#»­áj͹‘Sy2,2˜) ÉGþºwÓ‡ ¬É»c’!ŸM{{8xa7æªU×ÙÒ:yꢅŒM…D§$8<Ø(î¸ïϧn‘YìW–%tycwn|Ãú›6Qÿ`xóŠ’ ŽÓ"O²U½¦ËR2=ˆi¬ÜÞD1›r| ÊÈN¡8Ô–LºVÆf¨½Zí¯,(®X* E…ˆíážMeWMx|{¹±i³ãù°PÒõÖw§zàªÚ†¦Ogã‡­Ñ ÙUÂÙ¤– ‹ f ì üUF~Vï¨ð#À[Cóù¿Mײ%Ïž;”” ɯùtH NS» Ãp€”öÎ5§ÓUඣѥkWGCá£;öd{•R @”:Æ^¿÷ß?ø‰_^ÖQßN¦£lý=ð¡›­#ÇR®ª^ê&Eãjøw;¯q x\Î ä&[z&HåÔ¿ßÖLXÿU÷ôïuj1¡h‰Y›òÝùÏ?‹ØÑ e«/½ ‡í]17hËfý}IöIl×iBwíG>—Ùi " +ûŒUÖ³¤>µpÌû JúTòöp"Zîs·EãçÓo#6.¼Ê¶­^úÉZd =ÖkOmRñÅ'þ^Ót·g‚LAÁ`H‘,As˜ÂÐM]KÄâK6¯=½÷Ph8ëšx¼t¶ÿb{׸†˜¦aúåŒ0HN=9$Pï‹f¸9N]€¶pÔiꑎaR {S?H ĉãS“S03rŸˆØÚD÷–Σ£N¶З/‰÷$¢€:eïû¨ë÷ pöÓO‘²[Ÿýª:v469›ægJa$[µ×P‰k¥ÀdAÀ•qÈ ‹ æ=Š« ¥è±¯÷åíªêùSÝÇ8"ºáº b8üž§4šÓha:uÃ9៚›[t]âü bûËë*`Þâ…ºixegnL€¦i†>¾%†®_6Zãû5G1]vÍ"Óû -©Fb‰ÏÔÖD•„ŽçŽ”óŠS.Pµ€&P›ÀX)kæûCµºПrÈçË]; ¡îq¯ ">û¾ 'ºóá JŒv wZQÕý¿žAÿ‡ˆï$†ÞMŒ,Ô=›8#;V®}ᅵ}ãO®ŒŽe‘Á\âØ œ[/¤ÏWbYñ7v¯iúàP÷4gΉH×MEjúã0gy‰RÊŽ'`åõ­X\þ*Óyöp¶kå§óÃXß@Ô§y7)1&¨%M~z¤ÙV%B‚ÍKªÒ,M¶€úºÚɪ'ã3¨6½RÂ[ºRܰ³»ÿ€C35Ô.ÆØ•xÆ+üùp+…ºÞ•;ûÍÚ%fey¦ÊT‰ÃÖ¨$Úâ()Ól‹²uû”mÅ+—ÿ&/—0Ì,àÖ4è3ŽGD!Ä¢¦uoîzj400ÍÙ¾·-­X0ý×Xs¹¬i"Ûî=ÓÞ°z©O<ù¯dÛHEå~ÇàhââQ½ÃÐ'«<ÙÑ^PRè—; °M£º-±5²3CÁäùXàw¥uð&%#x'TW瞈£+¾ìšæMLº›ìj3õ0‚¾Ø †Ú¥Û(ž‰>P&j?èüÍ|˜âFľ—¤A»ð¦-h¤{›ìÞ²ŽZ©k%W†óË[Ýo)ÃUÂË% “G4Ì_áv{[[ßÛ(S†Mhš¡äT9».=Mu¤T– wÿÞozмÇw½›¥æDBDT„5¥®Þá‹öhÖTVH)ÿëgMXù¤+•Ñ>gÍM$ãÓó"2é5SpÉ_ ¸h"D^\Ž£8Ådbˆ¨ÚGDÉ›GˆH˜˜ «˜¦-FÄþW¿—@hð5¥skÔ%a.!5 Á}yž¼ Ý»¿-ʬ]â¿ç¶ô"¾Ótߨø›ÏÇ~rƒã#MÚUyò"Ø¿8­NÄðOVddRdg|@G\m£ÁF&» ƒ(éÀŠeŸºbÅ"ƒ¹r¸jÕõ‹šÖ½øòƒf2&{“…¦+iOaXÇýã•‹êd"Ñu¼™ˆ¶~ìκeMÏ}ïá¬ìn\SnKzàÙæ™8AÊšñlD­À_¥XMþGlëÍ÷ºm•V>.yfDcÉ$W T[ Q›ºâA@ºä y>ö` "Ub~žŒï;vüK¢¹®©«­¹;M‡×!£»âƒ&ŠfqÐy#Û bï±QhšYÈ"ƒaò‘šš¦XûÖë>ªû¼1¶ÉDŸDjÂCѦ‰éójƇG†Úz.|è-.tx\-‡Od¤ñXLhÚXiêBÜ{bx*ílEÔœ¥kf<~ˆXñäêO:Õ>60ZìrŒ–!¨¸=ã[IPÌÖæMVŸÎ×-’ੜ®ùŠõ=SìrúÊï‹S~ª‡ã£äÔpÄz+BÁF}už¼áŽý#?yÂtÕÛX»dí¥ÐÆf;|Ö]k–8Ø)ÌÖØ):àò7^yíâ牙ÀC/Úè>±+‚™K5AÑV„—û•-¹¡­ý䨠ˆøÄCÿ[J«¼*­tL†ÇCD£=ƒc?¼íshï~ëÉ—²Ñi†.V{N¶CÑó>»¦¢Ñȅï$FŽ ÓkxççøŽ Š$5‡}ƒˆ¤RÅN#Ô9‚—ýÞM3íÕF ±bÒ^ýûmR`Ši>ωV¨{J 1Œ Š·ö|Èù–äÉKìÇ<æ–hqÅÌ)ˆ(¨ì»ÓY©òɬm±bCåëXd0W>ˆxõÝ>øå·úóÓâXÉÀ(¼ÈPŽûúªë†yðÐö±NÎ0]¶0‹‹¬jD£=cë°ò†Mým]‰X<ý› _’ ú›ª4!N´“͹fý¡‰“g›/´Úwêžš”îxZuõݳ4„ÞT·ä2¿OÁ Ïa?/2º`\ÆSN_· b¼÷Œ(®%Ói¦2…D¿%Áö‹ò!]3M¥” M» `qÁUËîúʧ_øþϤúbÓÉ'aùÕ¤k¬.uî8Ø?aúËPËÓ@ÊUym W<<Ð"o¨MkòÿÁýgá kÓÀ¨¯šôdµHB+¾äœæ0 Â…z!:Ò™dŒl­Xß-›àºÇõ¥üy:ßú7LX[ý¶ërFm$¢NÕךEœ cÖd¢“V´bÙ§¯ÈÖ±È`&ßùµbBDGÃpWåE ‚ž8þHW°ã·×_tn{•Cè¥ ¯Z¹õù‰/H]ŸjW»ïî#¢åË—]Î0(Ãat;7Îå MÛø¡[žû‡"Pj]7ÅXÒ²•-iL”¦iDD¤T"à˜y4Æy¿žv.°äE… &"]£†Ï9ã[<ES Ç“•ÓÛY‚ˆƒ»Ö9ŠX Ò©€:è`dãÙ~gèù_výçŒ~Õ³ûðÞ’ÚÛ«‡]žÚ™ÎµËè9;¼Î,ºÂ¶MÎ!ˆHèN@ԮȲÈ`&fÁZW$¨þjO^™D<ŒÔ¹cmâKgŸë uþÑæ¯Š‹wU¸4ˆHYQVKDçZOûb:v¡ ¡ÞWZ¨,+<<>ífå‚y+®ÛðÂ~άDûÔmõˆð?ÛÚ“uXPW»çàDDDRÌ^*b pdCQkRD~¯ÃŽY3MÆ¥ú×SDcÀÀAÿö¾;¾®âØv÷œs{‘tÕ{w“{/Ø`ÓlÓM Á$´ÀKÏ{ÉË/ý•”_’ßK!$y@„N €iÆ6î½7Y½÷z¯n/§ìüþ¸²,Û’,ɲ±ÆŸ?W÷ž³;Ûf¾;;;C “†U,r æ§Ê+HÖ¨Õ@üéÀøqø%‘H"‘.ÉÜöœh7ü9£\rg³ÎžÑu{÷‡Òóî~o÷Úö¸l¥¢~<Ƨ*Ójv~OS|ÆØ‚k²ã cœ•AŸÿ¯DÉ@<êbÌ@Ä =° ÖÚa|Tï®ùÚœt+Ƥ•·<ÒÒR]S{b å"ÚâíˆèïvŸß?YS'-¿åÅ·ÃþàØöžÅ(FóB8GÆ(¸KŸA-,ÙòÏ3Q\øš'‚¨è˜x‘rÄ…<7Ö'œœcŒE8’Ü%ˆÈ[=D/ hÉp†:;ƒm<ÝÇUse:2œ5Eg¼¨ÀØ„§J_’¹±Öéˆá.ÃW.ÅŠèŠ4BtÔ0|}ì>E_ò¬ÙJŒœ”9âØ{#N˜&ÚÆÅݧHÁž*&Zr–üúZ=®ã4¨`• TÒÓ_¬®'£Í>¶ƒдù±DŒ2óNÙ•ÎòÇg}†qk`8&Š‘á BÍf½§Ý9 “Dþì¢Y7/ÝòÒÛxšÆ¤Þ¢ë9Ñ2@ó¦·p!„2B[Á—Gb.ç ¨¯P¦°ìK¶ýªoIzxøÝîjØHw…M¹³€@jî#ªÎÕ#²{ºd·ÒñìíŸ2µ—¼ÀÃ(®ƒŒqºŒˆøÀ/’ßoïiSßøŽ=oºníÓâ'̹rú¶Ëo·ù[¾=ïûC8¬å)G8éÓ!‹ÜŽœï޻Ã)))ÃìŸÄ¬$®ñºC%ƒñ˜•6ãÆÅÈùŽ×ß¿¤‚¯ìT©dÅëÕ”MºÔ‹á¡ëçÛG!Öž%dí² ª6܃’ÞCˆ XVÌ`ÏÜ[ðH Ž–™v§^/ ¸¨A7Pj)\¨]Œù¡'âEĸôî€X¢»ãRàŽÎ1^—6\”PµÕ÷ÂFKÖ¼À#FDnáÕåz-HôãòÿÓ¦€³”PÑ‘×5ÜÆñI6NP!œ'}éÿ%çÍ64—EÞûŸ®í/÷´VFà2  bPÕñî”8Ø\ûq³¯é_çÿ€?Û"h‹ôFk˜8an0è¥ôs^UU‹Å<ÜM¼Ñ˜˜¯Ê Üù )'ã–Ç?¯ÊÊÎ|8¢NCDwéÓ²§j°W:ºº´Áb‰µMxtcQîj«q.âEGU¤À¤xœ¹ÁdOˆÝ%ן,/Ù}è½'_xçþAÞé'„‡qˆyèT­ÉºaúDDÔTÒkçˆ0Œh¾];B<°Tw©’´„ªŒˆÃ»3ƒˆÏ)©ÎÌf¦û[+¬±“(A—:5àçê]ܸ|ûÔÉ×qDÐÇì¹ã cœÆ¡ÌZm¹ï? ½]ê®×ÝÿøÏo·vÙx§Í‰FÆ>®~¿¦§*z[uø{JBˆ(êˆ,‡Ç+ çJ010zwrÜ›%¯´ù[¿5ï{0rëwfÆÄûÞíh®‚±KÄ)Ù¬F·§£±£ñxeþâéC?|óc÷½ÿÇ¿¯ÿßWW~åÁ††ÒÕÖ™š“Õ7æì;=åÏ[w’—œÿ<ÁNš™.sãdw]ŒÞ<öûòóÊûø™×úÇ+u:9Yõ•µg½ÔåJ„ɉC̽“ qÆcòFpw”0a$^)eÂÙm!/U¿[­œ¯KM.É%CF@äôMŽŽ]ÛÞgHX³ß·ºêÄ+:C¥ÂðǽLõQ€LÁ8º•xŽ4§‹¡¶âç0qÒÚk»™ã–ŒkÖöP¦–_:A—&®ùQÂʯÇíxÅ]±/—òè„Rì XEé­ÒW=õßœû -¼Kã*¥t ¹í¶ô ö.ÈÀíß|HU•Íÿç0îÂôÆx­¹ª¿áüç1••(š¦O»uDJ‚òNõîtKüâ”)cÒ¿U= Ç›Ök”$±dËÎâòc;wm\ÿÌ«JDVe%wÆäëî[}Ýý·ÝúÄîøÖÃçô¿Vë"fiˆAÑÂÈe¸{Éí\ÃÍ Ãòn Ô%L´/\Fu1IΈ#"ÂÏ‹>Á ®Ö?r‰&ùö®7m¢c8·Ÿ!-»~G_qY¸3Z¡i¹÷ P<^®,’âF&Žm/?½ñÙß Ø1ÚRäÊ5ßÒqKƵIuj½‹÷\êZ Vºêqü¡»x[`Í.…‹}ÁæpäfÝv}yæ×G´‹RûBí|‰2qý¦o[ùåÁ¶z„>’è„1Ê(¡ÔÙØž:9whˆ·ã¡MÏýcï;Ì1ö©×Ï¿`ùºØ"¹§,â<¡‹›v®¾iªÊΙ9ü]ì)g}ƒ¯ƒɲ&fZÆLˆÊV¶û%¤rµN þŠ*5¨,¹{µa²=cBÞ`V±^{LW¡©Ö!†µi‹Â5´äZ£2ʆ3Óäîf´c4 kfBº9ŽÂsÊo×UÔ ÄL`ìQ{]à%l†ý†á<q7kncBõ§÷4´¾©7% ¢i˜B¨¥1Ãè)"ÖÝ nýÊwÇ !o#÷ŽkþÜjÜ’q R³ÖÒÅ»I .µ, „Ø“„Ußt$dI¯þ¨½¹42¶ëºeµÜ¼>>þâ?!¢MoQLÃëc™_Cít?PÊL&›(ˆŠ°9Û·ïTU5-m¾ú¢ÙDÂοÓ=œ€›½/è 4–T¾÷‡ç›+jUy¨Ý ÕÅš2W‡»Eÿtzd“^j“¨¬èÒ/‚:ƒngØ»®fO£¯3ÝŸhŠ™£·\üµVÕŸØw´¾³!\[^w²¬îxILR¼)Ö¾xñ 7,º5)%m@„qñN?1ˆÔ6”c¦³Xå=.LYÞhÎP|]LÔ·¢ ÃŽN€ð³…þñž’0ñ>4y•Ò¥XD•¾#V!.Ý8¬ƒÕaú€iÁ¬°äŠ„»m±“†¿TwÈÝ*bÖ¨c ¢ÏÙUºkˤ%ËÇ9ÆDrÖíù)WB¶ÔE×|gŽ[2®)t¬ÖÊÛ:´Î¹ÒìË# !q©âu_°ôÇîýïx¼Ýê䥿1i !ä–.‘e[‚Nü„éM’y¤¼©ˆ¤Ÿ "OLÈ ”uu·¤$BEQGÜ ŒåNÏo®ït5uĤ +9çŠ/ÝŸ¼ðÖÉmûŽ}²;gÚÄœ“ f〭ÍéÀwÙ³ö‰W4ùòRÍjÛE úpP?•kЦyOvë(‹hXž1st³¢ï-%"kŠôùwÿócD±Å¯ê%éÖÙ)+ZSÚêé®l[»lBõ+û‘ƒ.Í|ÁêPãè°tûU{k9aú÷ ˆ r%z¬0tÉ=Gß@ÛôUÛx%ØÈ°‚w©š‚ÂÙ.ì"@g±›/rJsO¡ýœa{,Âu…–Yà àß¶Kg7Ü3§¾âUÆt¶¸áxµh!=aó¥ØQL€è+{ß~yêò•“§#Œ1Ô²—P1}Î7> ˆmd\Sö·£òq|¾4÷2Ï]D\õM¼öãö€[›{‡í" „¼ÕÒ-rSBŒ™ÑŠîR k‹¹Èbç/ûÒÑ}ÿäšrôØ–AÆèÚnHN µ¶I:¡»¾%6=qø/Þøð½šªü`Ký©Š†’J&+ºg@›¼9÷>Ý» ¹Î1Š f¬ÚßVæ•Îa×§O×QÆ(µ‚!„løëë„PÎy4R8cT‰È+¿ñPyU[å[‡®ÿü­ˆˆª À¹csRQÑ.XVÜiŠuˆ™PýVD²B LŒ›v´sïºêWîÌ[;ÏL„‘›ñŽ4ïåÈÓìYg})o‘ˆž\Ü ‘wVD6—XvÏ9Mû õŽÚ‚¸Û†³"wüÌP“hœ:”ˆ;!uÙð´V ˜ˆ£rØ$„l{ùU–³ŠfŽKÚ1Ù˜5ùHÆøÏB{ÇAƵƒ0ÉG2Xz,¹üè¸Oá­ùqÂë?íènTV~Ã1êMs‰/ؒͽ516úåúê÷S,©ß(JD¼å¦‡6lz±¢òpaÁì±i;cDöp$@¢Ía‚°à®›ÃP$Üúòº}£³­['ÌÉžx¢¢™¦´í$djô›¥Šª.ž:¡ÿp…}å®FÐg[“âL1ÍŠÑ(ˆ}.Ÿ#²[þx»¦¨­”UQ pÞôĬ4*0›£whž9Zc¢2š±Ö8*›”8ÄTé>¡œG5T‡îX¥§Åœ·Ðƒ d.IõàVj‡›]Þ"ý‹œ!‘ Ŭ`€frÐÖ!c÷ñ·`“G²Î0mE剧45h‹›#í×ÂPA=,MgiI,ñSä„"êàs?IØó¦çÕµßýýxƒeÄÉ‹«áSÞ`¼N\ßü±Þ]Ë›ž8k¬øÔTÅd²¹zÚÇc¥f4T·5ŸªNœ;RY¬7tFý]ÿöhciÕæ×>(Ý}¨¥¬ ²§MÔô€yçpç~àAJ ˆ€æÃ3Λ5ž¶RW%D¢BALZ¦%Q  6´Fþãx俦ë†ÉIÅcL‹·ïg‚š¢N¿q±ª(ù³Š|žQÒ7¥ˆ4zœqáºx‹ˆ~Ðàˆ¨ø ñg¼Ç b¦4zkM‰@l<ˆbLŠ vîk ñ³àK£VATƒÉ`µrEÄà³ÛPÕL_wîÙ]K)K5;zk¦õܳŽk¢è_)¥ÌÓ鬨j-ß,jYAÎÓ&ärÏ»m9 éýà“BHúi;üž²Ö¬dû©ßofzÁ`¹ ƒ·ûˆY":aˆ>iÞªÄN>ë:I®mB½§JჃŒ¦bÐÑâØÀËlDÒ“aI9E“M™“±¤Œ7vé‰ñb¨µ&—Öä2=qýùÝØn@‰ê.8aÂÝ5xÔe˜°˜¤ZªüÖ3A¶R€«`$Âèæä¦¿þÞŸ”7{Á¸°qÝ]½.è,Ï^ü³ÏÎ qquOYBÈ!ùh2MÊfYWc:#Õéá½Ã„·Zºô”¬I‰#g7°´«xFҜљjã%ª¡¶Ç­ÝxÖEªü¼•UGN•ì™;çÖ1±ëþ†&Ÿøh\Ó’²R³'æœSΖߦ:‡^ñõx÷¯ßÚ`¹C|í£"CÈqêKç¦äÇ(²Ü÷ŠH眠¢¨ˆ”±þü2eguE…q‚Yë q¯Ñbæ\»ù±ûÏC´eoc—ÀèfF PŠ™^@àxÎD=¡D%¬`¨céòÄAîݺóј2H€-DM‰™÷9@ #¸@G@ãj´|BÈ¡¿qÀ a‚HG/'C¯ì y˜·t¾F&ê3/`Kp7vïÿ‡-u±ñÎÅž®bA4§æÜ>|*U?Lf£‰˜W¼mƒÎd^úÀ—ÇJÆJ\û:[G+ÍÆAÆ8}*ãHKKe)Wo·}Ûñÿê(ݘ´ÄtÁ‡÷º|ݲ’ª—æÇZh¿µGùgéëqIæõcÎdAÁìÚÚ“c¸Ô™$ÙìÌÝí­;x*g^ј˜…ú÷Òò/Ýj|Å’*ÀÌ\VÓnOL™ y¥ûŽP´S;–ì:tKÀk “¦ýe ôܠ暪ͻcÅ4;$úyzg”%HI_Pͨ]„€„²¾H”„÷÷ÿ^èox`„×õ%{-I6Sü¢IŸë?·‘Šp~Z•X}<þaíLüÊ‹‚ €šRNäF’=ŽˆŒ2ÀÓáA5ÔÂôu[UˆÜuóè¼ ¤ ª™[zþëÝ‘Vô®Ô¯]2!¤óØ+ô-&kBARç±×u†ø‘2ƒ£/Íå§’r ÇƘ!¤íÔ àÈ»ó3Õðqqµ" <$IgiÉ,é \N`Kꎅ.2ôø›Â‘l£~^Ìöˆ–µ‹ ¿1ÛÆŽ{5¿Šf¡7˜£(1#­ ²êÈñ“;¦O]:VƒÂe5köä¦ã嚢2q,×áŽJF©Sî¡ÆdImŸ„²=â-J›lKÈÏŸÙ{Ñçt‡ügEîhÔS€Ù‰DLÌ:7ÏgY©Â*Hì‚v‹óGy{³NìCSïmoñ;{¾èÎ~b|ꤸø¬v—#  œu`‰³[âÎ 8arG¸ Ç Àˆóáå;mcà5mGk[÷”4°$ÁÓÆ{ ÝJm{ %ŽiiE.k‡mFŠ¡Êd³%$¦æ€ª)3rÏÖU‡Û0Ã2Ûº‹U@€ˆQéö4Ѫ™„²öu”RÿQ‘«¥MEż– "›2obôUƒdM‹™(PQáÊ9C û  )“À²ƒŒ C%g9)·iu(a…;t1£;ù@-±è…§A{¸A "»«„ÿè~ê&Æ{怷§<6a–vDŒ&)ÖF’!ëÿòU‘ÇÆ’¯í€*{,‰Ÿ¹kÀã ãêCø!åpMÌ`éW2«93 '>ñ•ìœ2QCx·Íi ô¾ÔøÁ| *Øôö׊ÿþÝ…?}Eåf¿­° öžOggOéìjÒ4…1aè°ÕΌI:‰sÞ]ß: åP-‚Ê»5{DÂ¥AgÓ™—¤öš+^ÁLé‘®—©æ0Å^Ö ÑÞ “Qaݾÿ' zŠHÍz½ùf˜|ƒ`µ.žµãTGc—{Rfz¥íp|sµ1‹8Å‹xR¬Þid1‹á’P –t°åˆ…Ó~Õ f²4ŵ%amV-6Ï,£7Ï-74ïÉ\_ÊË»*+¾´àg²¾ €X ‚è!T0åÌÙpIaÿóè(ô`ú€ñßÿzuJLá(ÆdM9R'LË ”žÿk‰w¯@Å/fþtÄ€ˆ‡_÷–ÅM¹IwýÄêâ§EÉšz݈°Â®H7H`ºñßVS!êô7>úÍñƒ’1Û†ºz7gÎûMŸµæƒŒ«i¦FËËGSiJ&» n@Ì3žÚ°ï´vM0gÙ/EvQf%Hñ@ IDAT#”Nõ¾¤s˱Ûâùæ­¯­ºõ±h]K–,Ú¹swkk[JÊh.ì‰f³ìñæ/ž^³ïd Çk´[†éÜЗÿ}{ˉ*ÑÙTbM1pSæ‘<˜!½`!—a¾Gî tl;ùr4J˜YcÔÛoœñè³Gª²’ÃË«]2È q™ˆ´öµƒT/Jvƒê?Ë19Ú ã!Ø hšdHžwn¥Is{´Fz¸« î›`L  )ذ¡7HYPö×ÕèE›ÏœºõõýQ®«%{ìS¢!ÑAD†§€cèvõ§ž`7%t^ö Ñ_?½d &:Š„½Ñ¼?['ÎÍÑß9k@ÝÐõqŠ!wh„A‘ß(ÑSLÿ{³¦Éˆyþ)£-fÙø’±#W1eRÊô¯}6›?2®*W+‚Ì`éW ˆª¢•߈ÛþR×Pp)j…?äVÔy1–,ãåÛ')|P9k2Ù$I_]{">>mL3e„rkƒç@‰Šï€®õ´5û»8"G4‹ú"GvªÙ±·l—žJ}žÿzÇC™Ålõ×¾c›ôĘ›.V¼/«áöžjÎ5U“—N}Q!)&眖6¸÷OËn?Â@BzókÁNЂÐýDDà*¤.!‚ôqD=ÔD¨FS† Oâ<¥2Ìø®q`ŒEA0‘Ð`ÒOYK`Ì Õïs̱Ízô=݉x0^çÍ{$¸WÐÙE}Ìg³ÆAÆÕAUjuƒó¥¹Wõ%>CŠñå´¯ùMÂÆÎ#cC8a\" ³&I|§C)ð &ª© ëçæ½­ét¶Uuµ¥M„«“W^W¹ëhW]‹#+å|aÝth/c” ifGœ‘×_M /“€ Gš :ÆD¨k­ŠªRk9)ùp¡äaç£,,º< *Öq®QÊô’%+qÚìüUC”F hÕýÞ¿ÁI"xˆ Øç“HìDÒWÊ*³R‡æ0ЩD#¡ä‚¬ïsÄãÖ'˜Œ©`C“ô97Æåܸ¼wPº¹ümÑÎmÚÛÜg@qOÚa©e½p1"Ô¨'òËV7±î (ûI¨¾Õ«€ Vƒƒõó ­©ïýÀ‘÷ëÊ^ü‡9ÓŒÌH3öÝÕÇ€h&Ю ðžù1· Ñ„º¿Ç*–¥·j1X{ìù¸¤yl„~Q¯ODÔE2,Ç^gsCcÉñywÜ?nÃéG©hÔ;«*D[CLæ-ŸÙ~W1ÚyÇiÑUÊÿÚ_&½ñ³Ž7vu^7Þo6Œh“dÑY¡nŽœ:Ê¥~º.€ˆw|þç¿óË檄ä^}|ýÒûÖoxþä©]E“_¤lEÄœy“ëöP‚!K|¬«±=>ûLVUS]A÷î–SŒR‰ É2Õ‘£r !_¯’XD +\}qÃÓ¢ õF ¢*G# í#ó{hsy84ŸÐ5¿(0õX$@ö—ì2Ì+f­D@³ÁrA»!DQ#*6T(%” V£CQ#«æ~c0EÞGž°ŒÊ‡åÕÅ|}QÉ›ŠÓ VËá¡iK ,¦NÂÁ6 úDz ‘µ¨ZÊ GÃÎ#ª=]aœC²«IŸ˜ïÆGœBÎrÈȉŸ“s:è×ì~™ÍÇžãÈ !º ÊHШï©VO„±Gƒ­u :m>M®³y•^‡Ð~`‚pñø|$ˆÈ'¦-èÅ„ˆM=hE×ò[]ÛC:ÑЇ‘#çœÙlüÐOUeï~7rÏ2Ï¢íÅ «R|I¶NXj|xQWënQ²$¤.Å´?qé Ó6œy‹\;²aÝ‚»ˆKËGcBT`¢ÑTúγ×ÿìËÖ¤%ã cœ®P M9(¾*Ü<vo·v×ñpìz!‰a¤Í¿£pÍSÿgwãö%×_ŒìC€èÛŠBÏ ‘šš×ÒR=uÊ’¾/G·™#„¡ v¹ÖŸ|O É¥´’s~º9 kJƒ¯#Ï–¢ñÖW=¿WÀybß¡ŒÂ,ÎySÙI9êëJÐç2r!d6¼Í”`KË¡›ó–κýÞ¨>uós%¼~ÿ»@)%¨ ò¼ !ÿÜýKQÐ׺gXô®¢äIsòo#„³í§Å0 ›±‰؉~8³kÅŒG£ŸwTo0ˆ†¹™K ‘÷š´ÊÛ ÿ®p¥³êÍ’æYz—ÞÖ“/zƒÝgÚRt,ú¡ŒGÁJ4ýÍvÔ“–Ì‚Øÿbpr`I|pŽ !……E¾ÄõذᬫL„ „’Àçu!]dÊj+€«ó°Éš1ºÙÈ`!O>yáOš";ҳƥî’·erÅ–¼| ÕÁ8ȧ1ÖÐÇ”ã (WømÕ!裗‚øà¿$íþ‹»ê`0®qDÍGÄÇg~ýé#OF´È9·Žzq:Drī徨2q¼ææÊ'wL-ºÎl6—•U$'2Ê…*ñ£®“Û6lËMíªoílj±œÎô–ŸY”;ƒÁÓG"’¾W2QÚüüS‚NÁ¦.Õãµ3 çÜ  CÐMsV¯Ñ‰ôwëZÝm‡¯Ë*3G¼„j­=ÙÍõ›žý}´œBmIÉ=^'#ôˆ»¢pÆü–S/€Í‘xUUo™wl;ùR Ô#«aεˆÌNœq]Æ¢™qÒЦ‹>׸F\•訪Êâm­qËsâŽ.„„ÑÁz‘„@ÔéazÂâ’ÒuTuÌF%OI‡æfº˜¤ svE?´y›(¡E)³ E«™$ÌC@J(¥„ÒÓxtÅôG,§Çß@‹ÛÔ”bñ§7çk( º÷öýVzÏ8šŒŸtÛ÷5jbm‰sÓspÏY T‚ж@Q‰'#T7ñØ[ïEPÕ›îniBtL} ¦²éÖ"ÈÁ:½µóçÈò‡¿~U”ô1…´‚s%sYLÝfkË¡S©s¦\d»žÿñSüüã–Œqã5*jEÂä«nñ#b}0R Âý©ñ`Oj…F2¢š@'èsc 𽣄ò2¢$êTMõû=§óVŒF T·TÔµVu{»Šˆ-åÅÍͪ¢pM+Û»2„ØC==M›ZãgRBv¿hÏÎùdÇ „²¤GZÞäTÇ„%“ï€_ŠÐ YÔ»N ÀSƒT6®H„ëà·7M3n ìQEPÊ¨ÉØ±½Úš‚(u·Ôwª&¼·+©(–þc3êé>“¦ª,åšš¦M\¸¬¯¢Î# ÄMf#e×Á·¹­èNàU6™ûBD €A4½úSƒÓ¥ë`çqŽZ‚>ǘ“@)i ®«´<¼BÐ'DÁñ×ÿü {¾¶ÊλÛ>Lî –(;¦æ,×ÙÏs:;ä¯!ÐñçݪYH}åón×ÁàñÚ‚ÌG4?wW4m…¨smìD€\…øid°=® LʺR}xoåÁݪ™qÓí:ƒñª˜ ú×çKfN_º$õJà§§a³ÎÎ$“#ìö^ ¼8ºeÿ±-3&d_¥ã22®\âÀ(‡biŒ•Z¯:æ»eõ Ûgت¤Þ˜ÊYSõÇ6øÜŠ=qÄq/VÜõ»}¿üÃ_{Þÿ?‰tÊèSQ7Èbž;ëæÅ;F·sêèiÛ~üJiŒÕ‘,ØW®º¹þ@IãÞܬwv´•>õ1Ð3ÇùL 7´O-œŒœ€ª(sV¯‰>Pu²ª³¹-}â´s4Gô3¥,¢†"JÈãéMn)9âlm@Äfg!˜—dF šÚuð8×%rÀTf ­0›%Äí øÚŽ•‘cßþ'Ðe?ñPÁ¨@íI½6€`D%é!L"€`M„-rк êšy±»£¹ÁÒÙt(Mõ%ûvN2¹KI9Q÷a¼šãÓuÉGCg&³ª¦fM„X=µë cU‡öôXÕ;pº4>ðE™d‰ºÚ„Øä´áŠ %`› 6†ÂHÜw‘@dŽÚjCoâõ“=¹uØ äýÕ,Ñ*NLÐkI6ò¸©ÒòŒ@NeëSÛošù¸Ãš~'mþQÝZòÃ!ל­Çíiɱ¹±? À]¡n z*{ÍEî*ä¶Œ"ÓÎÞëØA†<+Q"‘£ß#”&åäϺõîOÅäPÙ©í­Ó kçH_lU•[¯æÎI¼"ö‡È}mŒŽ<Ê£.G••¿ýàI½IŸ^˜uÓ—n‡«“ÆAÆ•KôJDÊc¹WÏQñáQÔ]NÏ- 1¶~ù;&,2Üâ?øž÷¦ÇãFQì³¾ùJñ󭾿ËhîšN1³2?/öóÙÆMÉÉÙGoY¿áù”¤ÙÖ(¡%݇úÕ¡@µ^Ð „˜Ò8é’;PÙh q\ñtyš1d”Ä8Ѭžn¿þÁS"ú‹ÈJPå²²ªjÛN¾è¹úP§Àøž#‰±Ðc Þ†úJx½ ”p`ͱ÷Ú#@V#w.øÜîS*!ðÄä5=Ý]M â‘÷ßðH§àC•–îÙqnR½Æà¤©â@" óf-@ΩUÇöÐì*gG›‚âÒË!*¶¤’ö¦F—Òâ‘>éÄXÑh‘ôœè™d30ŸtýOK?eßäSÚÝâœôèhN_±ºï—-ÿ zçIÃîRÃĦÃô¢¦õæFãšzËßÑT%Ú:É`€^{S?÷DQˆlDƒRïªJ0§„x€h¨ö9œê†}¡5®Õw뮟8Ä3‡]›ât)‹&Ü ïíûí®S¯k\]1ýQ«ÑAio.{uSƒ1cŠ0+U»8WÏñ÷´ç{ bÒiUû>R€@Û>Œvr€´¹´2ÖCĨ3ÒYðBŽTîßÙTVÌAo¶,ÿÒW/ÛU¯¾ÁR9|ÿý°^‘$ÉItLÊß¾»5.FgÐúJR³ó¢!.¡`m>3ºB¶¾¾¾¡´66)î¾ï=rUç…W.U¨U"\ºÕ~)V×;­Ý°21ÖpvJqDœv“åÄ&ß( „˜$³ÊÕ·J_ûÖ¼ï]dã€ëg©y®IÒ¢œÚ±©«±N‰„)!ǼÕ*W)¡Ó͹½—'"áÛ¾ùÃH0X¸,6ÖT˜¸™Ô^ј3{ ϪkݾÿÎÖaˆ\Õdpvt}A÷\ãH Lià@8PFP£ÅkN‰KN%¨Ìšø  ¢ aεh,õG|Œ#š¶âœiSzChkôî»û %\« ü¸;¨‹HÞ“âRR9¨&GvL F/- W‹ VdjÊš%S|»êƒ{­k¯sï«Oëðé'û&}ýzäè=СÈ Îøù*­=Ôa:?Å+".è«ÑÏ'ÿ2NRfý`W1ì÷îùçK½¶&lùûŸû^uzl•J_>²÷‡_x.ú¥òÔåå——Ñ‘Ï.Ê@ø0ü-¥@gÈI|>gõ°2¸ÊªïWî+NMlæœðì „Ý‘ò•¨¶¸cÁwTMywïo¶|Q`RfÂÔ©Ù7´~í'Ðr¼óU¨/‘LÉ®…¾bsnïý¬)¡.hßÐ~|… … ¾ó4ꤌÖ?¬Æïá*w¤gM_±Jt—ó–ò—]²/Œ!õÞ¤c%/ÐN;F¾øÀ„+ádÙÓ²—‰ÆôÙßµp~ãWÏ…ƒ¡œ©Kï½ ®ò˜%ã ã ¥cÊ +±L'^Š5Cyª´ca‚y–cŒéÐî s~>ˆVZ8ßxäCï›ÿÝñ¹Ÿ&Žbí}mοýùÐïÊ»K ã&¢O2 ´KFÉn”$ÃŽÿ{×Ú_Sþòë¿°kÏ»^oÏùï†|ÞÒÝ[œ-„sWÄ+ågzdŸÙœrï­:¬ñ産3E½¾­¶­(;k{Õ›ÞzïÉÖ­<9x†gUSd%ÔÿE›)a^áÐ 4ôtöØQD‚´QÂÔTEŬ “uÝÛrBÏëR²lœs.GDFôbG„[ÐïF¤±eOo»€0DH[F’ê7;î˜j!ºxhj¯ñÍM×…3d¹Qk´ ¦¸üœêåwôÑ ­ ¾Ð®Ã_œ‘O%]dO‹ejêî’Ž£C}76ÏŽ2©5ôM³ Yëô77×"˜{‡‘11uñ·ª(E·-MÌÊ×Mçré¬åÚÎj­±‡«„UøÎ Rz ÃÝ!dëöæ”dÓâ»æmÛ/™’ *Þ߆š–6ÚðßÝðü»íu-á`øË¿þWA¼ô8ȸÉÅ{"ÉÒ/°K¬%¨ÌC»‹?Tî ÚDᶤ¸¡{L £“#ˆxCÖMë«Þ3‰æt[æHK01hæÝÙõ]è_¾ÑhÑ45®±˜¦—M€Úc»›º›ê!šÃ±ë‰„Í.˜6%gÆù-==^HÊZz*²Ìs!±™q\íõÌи:5û†ó9ìlnÔIÌÛØ%BúØLÎyBF:çZJVnŸDníêš‘eáÜ€Ö‚5è*‡èA eÐqˆŸqâ$ Q8@c6˜½Ý;é,C‚Тëb¤'e#â7¿ðc8Ysý÷}RRw2ù¹Ò—Λ~^2¸¥XJÅ»€‚ÐáNj|@5ƒþpNtCI›îCÈ‹Ëï}¦V+닌B–$¦@Ói®,³ÿõ‹ànX/ªúBçT•ò`Ã1grnÀç‹©jëðȰþ/¿é}— …ó{“Šé Æ”‚Iç næ5x¢ Q£_>Wù¦M²^Ð!#šM­ï–ææÝ žF 2Bh¶©è|›8kê²¢µî–¦ŽÇÿO{^×ÛÎ÷ç6y@ñÅ&-¸˜µ¯ÅIl³Ý MÇŠ·oäuâÍ×çN_|y$X´{·W©’ëN¨Œ‚Í@–å + è—†pL„"®û ï¿7ÿJÞAW¹vÅd®wc"ê,¦á´¢©¼®üЩ–ªÆ9·,š¶lÎU}D22®\êU$Z›D¤8{é*ʲèŽ;ƒE3‰ìâKk†‹½³À–9l—B&ÆOÙÓ´ãXû¡t[æHw-&FÀ«â¿ò–G6m~¹ËYk1Oêj¬;øÁ›‚(éÍ–Ìi³SfÌÜ´ÿ=«ÉžŸ6!/µph)‰©(»Ú×^ÿ ¨ÚsÊXɽ”1ÆØä[òM‘°6uáu½FèÛëƒ^À WÐY @Ig±‚ˆT赈#‚9•ô‰&{>˜’Hl !“F2!ÊÞÔÜ™¿ ¶ë&Oùªsøýg$Iw¢ì áÚ^’`3÷L§zQÅB(Jâ+kOº.@Ô……ÆŸã ¡ê‡^¯{û+Dkk@!À@è —‰ $;±UÅèµ Ò¬ÉK),ɨ"„„bý4+=káÝs²àhñº÷£éOyå§=mñø'€"GV<ü5EŽ@S¸^-hq§Bn_âu‘ŠgÅñ¼¯ùÚŽâW‹ËÞàçòÜÏ ½Ñww´ïÙéîh+ݹ=ùYš^ï9QŠŒQÆìŽ´…÷¬½lJ«ÓÇ ŸoŒXõ€…‰tV:›žÆ´ÁŒ‰Àllò-Y”r…˜1ÜÍ;™ÎfŽŸŠˆ¨q£#f8Mèépnzé}£Åôد¾©k&$Ú8ȸ²ˆrX9ª¢z©#ˆ/I´œt…¶¶ùn˰_ä ¯„NzkR—§‹›ùµ'üúïÇŸ}húã#z1Û@z´ÝnMêÇ?Gx¦¢ëÆTkžE×»ª ©ß·5Prª#!AÔéozì[ðʦ¿–h¹kÉý’¨N·äÎ/*ݸÇÙê4f¤€¨—ZKk',ëu)åœSJîÜÊ„Þó:ƒ‹æ/>æmX_ÞzW¡¸†ÍÛ@ñó>Ë„Q$ŠB]@Óz¿á äÞIÏ‘³˜Ñ@ £™‡ÿ7Ø&ùžƒˆ·ŸIœqèù—t’gÛÑD`~^-´—»  çf¤ * ÇÞœs«Qq‰„s®ubÓ)õ`¿:€> µê¥¸˜ï5€j*ª+Ä{Οi}¾Qþ×|:ÅaŽED¢q¡ÍʳÕÊXÖûüªÓƒ‰îfáߢÚÕçî:´îMЙL{þùrô§9Ø#ôD64Ä›õ|­†ˆÇ]e"/¼ÿ‚£,o/'½åG·™O•÷(sbn¬Èºc=ÿxWúÞtXZô@ xJ:J·AQÃ÷.ù1hj¯×ðÉ­ë;ëkz;ÒGMg2ÎÝ1vKWd±JoøâW.µÒêõþAtð;dFb ðŸ+õp‰£VBþú| ç8wvâ"ÃekLÆ àŠª„“î^qÁ&<÷ƒ'E½´úñ{“²SášË32®,’Q€B¡à2˜LfÅ:ƒ£–Ñ·>êpùíÞTÇå쥲oÞÛ´sœ/°±£>NúYk_«éæˆQ„±õ¥ÿ$]Së© )™KÖ|^o2(ÝÕælM°'-ž¶|8c@Á5 wQrhcLŽD€ ”P>aÖ\Ji°Yï®Ä†Mxƒá „ÿñ‰7‹€?‚¨±RdÝBþòÎaÑ ßÿæ\¹s3ÙfͰ'œSuµ—‹¾=I~G!â1-t@ñK@¾cLê{1úÿ;e)YSqÃô`8@õº][ÿZãu³x¨ÛîiP*¹ìW@õÈÌ+€hè‹H¢HV`_ =1¦‰Ù«æÞÃŽì Û’Œy0£¿@°]ˆè•{(¡·æÜkd&à!ßN7eßΊ8p À¶ªïR ÀQÛ¢¼Ó[¢ æE‹ yÝzbš'¬xwËÓag¹má wóóO@ƒèi²vpÀÉKVÄ¥f t!òîJ–dZ+¼Þô›°˜h7Ø òlýÓYÒÌÇ æÔÓq) n/úª?Øó·ß?þç=d&L•´^øË5íthsrÃÚÇ‘Ÿkk¡‚ é °Wv¦2C&3^jßçÉûëÍ@Ȩjðà|1ÁBír¾Ÿï˜S$¢©®º%ë à¥)[ÚbDd’ÝQ ñ|Ùþ“?Þ-twk­Évm&‚WÕiõ *Vb¹ &“ù æÝþ¿Ut=V?:áòNkwPãw%ÇÑËÛKE Ó7Vøä_k„a3Ä(£Ê™›ë!¤­]ÇkKND7|éŠT«=gá ½É|¸|_uKEzBÖuÓVŒ”I*IT`š?ÐÜÚ¨O‘ªwWº>lÕÛ-þzKL|6"·ÙƒÐøö^=<­ŸXSøôG;Ÿ<¶ï¿[ÀâÎJ–fÕ¤¤ÑŸ¯'ÀÕðö=½·;a˜y@ñ°ܨxˆEç<ÐäŽ0[KW4k¬Lñ«R]G€åw1Ô ñ&)ÁˆJW˜Ù¤}jššÅë\»LjŸ È™Ãiôÿ­-¯Ú4_@‹Ëo93&¤ÅàvTý'z¬ÿ/F±·(J™"RA2HäŒì-â;Do>Ý䨶«7€„ üàßﻦû´PBaá2&µV—1Âü~¯Ø µ{Jzý IDATà‘uo€Æ8¦NAD{brÆäé~y÷†,?¹cˆÎTP樭Iû×ÓÉâüÉÓ¼«½ãáYž­«ooØWvߊ€…1ó‚²·¢bÏÜ;ï+Hš ±)éQ 14t¨U1ꃼcEõN~¤I;Ò¤•CŽƒÞ=MÈO¸$Ç"ƒÑæ­MšÆ3Ò?}õŒˆ€הԙߌŽÎ¶ÿü3¡4~BÎ`¯¼òógýnïêÇפd]3ã ãÊ%DìA·—{Hó.Ï„CÄóâÖ5ô¨™D¨ Fôø²ºù±ÖËŠˆß]øãg<µ«qÛ’Œë‡ÿb²Žª\Ã?6lùÙÁm¯IñÓªŽV, Öרrö´9“–,€Ý{× ­>¿·²©´²©tÍÒµ:I?"Þ!=]‚Ij,«ÊnO—)\+'F:]IY‹43`€@ÐÒ«F‰)Œ gúpqìoæ¿ß\ñÝû zó—"Bâm ¨Ðê OÈ`HOgǸø!è½ ©•Àçtb ´ð:@<¢î` €Q„ý-Ç MZ"ñÝŠHVŠZÐ;%!½íˆ˜k˜ž28øë»Mi1ÄÁ´78&/Y>Xh¨Ãåû:[UòÂ"—Ï|¯¨J][õ9‡Ô@k Ñ$X>Ùµ¾Ïc#"’FK ·Æóªv Îê(HŸ4`Evsl¬5îz¿&óZ,«ÐN$@j2fÔª¥$K¢”…:ÕÄÌl¶2<Ým¡ /±6)Vt Ö2SÉÖO¸ž$¾Ù’öÈj_ù)H›0e „ù]å ºôXéÌœ֪²h¨Ó ßÓüææ¸ƒ¥=7°P HÅIÙ³%q*$]ÁÜŰ¹ø…°JÊ)02Û€äâ2»ë.Zï‘Fmw­ÚîEX”Ã"*Ü3]¼ü23Tj¼ bôWJlŒï*ê-é}†%-"؇'¶:´aOδÂÉ §'d$Á5wD22®D"„”)åfb¾lŽ’hŽ,íø·)#HÕqÌí¯ †uâüXë§²`·xáõõÕoíxzÖŒE_¸ñÑþ€#á ¢Êý¿±ZÏøçjªÊ5íÔÁ½‚(:ý¢¤Ó :Sš ~»×b6%k©Ø?uÖ9ð{(£¾ QžõPwø¿ž?þ{òõ‚‚H6}üRUM½-l}okW e‡Æ)¢ª?àš¼òŽ/ãÙŽŠ&“RMØÖgÆx? „àÿ¨ÈîY¢¾ž³Æ3bIŒs¼²+<ò‹¢û¢?øNœTêÝáy“êI}¡PH›¼æD+h!E¥Š*¨"0Þä6hðIDœ=aÁ‘wƒÓ—‰ÉYÂ9¼ÍŸ|VâJ”·+ÿ>‰M^•vÿöã{™§¬©q>&ÃnO®hÊáò}ÖuE“ï]ö ÊU twè£h*Ài¹0)_,Š>Yê YŒz£ÅF{.؉?Ù @â ‚šœg<Áâæ¤=1‡Lptï(…D“=vÖÊ» ä•Î_æIÓîˆûJ$Øø×?¢L£ö%É«&œ* Þk†˜%·~á¡H¸½¹f]zÞý’î,©EpàÉ·÷üêžEßVÐDБ±´-öÕë‹ÀO? DØ äŽ"a~¶ð)º[ÖÖ{F—.N¹¸§uŸ ‹Éœÿ£h‡¸ë[©À–|ÿ+çdTáœ?óÝßZb¬q© 7|þVø Ð8ȸR¨^m@˜vZÒ]6úraüß«ºý‘ ó°\÷¸|-áÈ}©ñð©&"BÄ{&}þχ~w¼ýÈÌä9þ„îæü䣦ԙDQgΟ·7í–L ýnUl=¶±ÒYoI^³tí9ŠòÑûcL8ñ@OgGô 8RÓ„ Ä}JCä”`:Ý quFÞr®«˜°mó›^O÷`¬RJë+j%ƒ>%=±ÖiûÉSeÉ6¥(%À˜QT£É¬hD ˆ¢„Û²ñÕs¬_Q®\ìöðË# (òšû¿}>\kæ5Ç´Öu¡‘À<ÑJrÙ¤LRx~Jå-‘`_ªLS™z~¿ûNtGÑ®ã]~`D˜6X<õt9¤\w}ðëåÏ TXšº2јB¹yÞ™Ë/Ǻ3©¸:{5 a¬n)?^uDA\¿ÿ]DT@®W›óÄ©{{v9uàë·Ö7mGÂÌ^s®%¼Ó º7²Ò‹lŽjïƒÉ½‡ÅGUE!Ý••¿n×7iÝÁøîx«/u;üèMQ{>.[û„¨ÓB\ßy>˜:áÑŸz»×UÞѼ%¯è+äƒðàª"/¼¿hVÑÛûÕ–€qmÑ}ìDSÁ£àñ8ω}»?ðz]ª¨pY¦Q‡ÿwßúP Øÿgï;ã*®¶ÏÌmÛW«Uï½Új–»Ü6`b›fÚ !! !yÓÈ—Nz(¡„’@  ÆÆØ¸àÞ-ÉEÍ*¶z_­vµ»Ò¶[f¾+˲,¹È΋<¿¤»sçΜ™9óœ3§4‘HQô&•èlQœÇƱH$1aYÆhšêð‰ËR£‡è/w¸Ì·e½s¨Á¨=is^ 6Æ` m/Ä.¾Âxî§$$ÅpqŒ‘ í9m7‹ð‚&;$Â…¼Ô˜ÌÔ˜Á°ßŽ>q½o$£tœ%¿€UkvýsŬ»/ 9ƒ3ÖýXKå$Cò]"õ‹à€i YàwÈ3×õ–0 ŽOÌ£-^%Ñ ÈMo ¿øÀvvw•E¼õ3Vk×~Ì£¦ð ¬óU3´¹ôåÅ/Ü:õÉ oÒ@ÞzÅg`v4È%-ŠÃKE|ül©`Ò\iN)¥Å¥ŒÑW¸:á ¯$ƒ+¥´¯e;B8vÒY㛚õ;Žå4ƒ0Ô;àÙñîÆÞKþü© §}áüóÈør„P…Té£þI\þòõ™áº-íη¥áÆJóí#tC·R¸;:]7ˆ­qÆÄG#Ä/Á†¢€SJÛk*%Ñ?ié A­ ‰MØÐ "Q! ˆŒÔïum<ð ´zÁC¥Ú]ÇËö5Rqb_mM)Ërys“SÏïëioílh,È^@‰MI3…t¢«ÝY̳LÒœAÏÕ†ºŠÞº.PÓÂù‹æBâ—'H´ ƒÑ ZJxÎóžÞ}Âʳ”eF–©¸º]ÐáPvÔLÅ9)† …IyÐàÁéPô¡ G#8Ùû:F‚“Ú3ÑHV7õ&[ó­ Ô@?@?{ñ/`BjS4 ñé–ng/î©vÖ¨ï¨Ò7Øí¢ÖçB5'»š'-ÖUK2Ÿ£ÈXÂǕӖzPù‹JìbµyXH¸ºšR¿o0*(¯;ÐÐ{’ÇBfpîÄ‚Ù:ýÈ®SA¡ó¿yYgCÎä VŒ`· mQ~‡³¹ÕÑÆÆð,oó;tÑXrî·öQmøÁÍ”R ü°Œ¯®°Jç~#žLxÎ ö‰.JT)Ù*}„3Ó˜\J©RÓãzcº5‚Ì”RKÛYìOÏÿîX¸30®œÄ«?´8šÂŒ c!´ÏßË ÆW”oLRèöZùXñˆ4ʈo™ÀN‰gàjѺ½èHwr’ñ*"ŒObÖ›gM˜5ŽÎ8ÚöhCΉèêís ]@Ÿ±ñÕ{Úº)¥?ûÄ®þ¹2¾¤j õg°©_”|¢R ªšûžÊÝ×Üâ—vXÙzM~îZSñ­È¸óχóJésMþÎ=-Mõ,ÏZû.§R1,™’ž·èÖ! ÊÛBП:Ñç›Ï ÖïëÚZ¼!=.{zölJ©(‰Åu¥mÏŽ5 ÃæÎOK/ êà÷;mÖö†Óc­^•hŽˆURd…à³³œœž#u‰ Ç^aœÏÂT<þÑý¯¬«ß^‚ëüJÌ+™Nx5ä‡c†2”óÄ`vÔÆØI"ŠÚ €“(BîBÀ2Û1χäSàpdÍ gÛ» Ä@Í:Äp{º‡7æÛu¢–AÀŸØ}&8ºlw2Å.§.ƒr²ÚahiõÛ{üµ†p÷žp=’öci€…(#"gŽQ„ÁÕBkÊp¼p`³èÜ#Dÿ©Z\M²ŒÃpÏâ•ð»íþ¡`°”¢ðöj‹ãcr%ˆxDتɉjv·r—²iŸ'%ΛžÀí}n@­ d‚lª@F:@pÚ1ŒïX(×K¼¹¬‰ÇÃCÎÎ]t—Z£Ñ°ðÞ©×´LÌ·ãŸÔ°cz'–Ð. hA»R.{ÙÔÊ¥8>¹œÅ,(DV(¥üØjÿ:XÕÍgã{zä~…Jk;žçðPÂ/Ï{5¨‡ÀÓr™é{•Mk>hŽ™µ$±¿½þ㸴»4ºØ‹.„PBx.Ϫv–½uË”'Tü葪y„ÄË?ÉB]>øÃ?Ç€À¢Ìpü?Sùk™gÚì¾Å ã®–Àcé³ð,¿lò²ËmpðÊÏgM¿kø»=§Û³ï{¨\g2®zêþk ¥Ý_.5†üp›ùÅj(¥ÓÂt‡z†Kä¡ÝöYYz-sœ0m„ ʯ×|{¡X ™ãU ü¥„åøQï>)¥ê Øºúâ·®X¿ï}·Ï}‡×©­.±õ¶ð¼jé­_Tðº«+‰¢¥æð¨¨Ä¤s³Ÿ skÛŸ£@îÿ) ³$@pÆš!Äò´œ¨M+ʿࠀgàÙÏý ÊÔˆ’òäMÂ*wxˆ8 0™›ì¾dëQUháYi¯!Ç***ª”9gk0;|f·ˆÎ2ÙóŒ&šR***£¬‡.:{ÐÕïq³è‰)é&5\czÿTB8)ìŽÔ·w‚AƒVN‡šJ’ ¡SÀÁÞ­Ò°2 Ñâ3ñdy=½Þ§á 5þÀ/E²éì©s—üÉ`Ao¨ŠRC0ZQ×€D ~°gtîÊùl­  ºÜƒá¸´ š¯º3@˜ Ä†ÞÚÃ-{NнËbæ$êcÇzW.i&ÆŠŠo]ç‹HDBÉ} ?¹À<Ïÿ•èªë©}n†=ÄÉ(ckÛâ×êã.}©G‡d,È}pËÑWå?¬SŸ?´|.¨Tìë#¢é’oL5É»O)’BY «ò¸ìHÌbt-óÌÀŽ–$rU.JZzZŽÕûÊô¯\–“ÚÐŒ´–üIž?¼Í¶v˾]%ÑÓóV>y¯>Øø%1ð¼2®Åâ¤Î:ùt›©Fª/¶'¡Ü` ‡Ñ«µ=¤˜µ,²â–•»£C®ÍMèUWC]SyiŠ 5*ýÆYñ!)æ¨XJ)–ïêüÁz$YÅÐWw~ÊÈ÷-þÚóÀÞOì¶nYò‡Ä„…Æ *Mgs£ÓÖ+ú¼€ eB¾J£aØ‘»FLjÿvÑòQûŸßiù%l¢—F<4ºÔ(+0¶¬¹æ¸ä©Ãc*?Ϊ­úÐï/àE̶î¤0ù¡•‰Ïüù`U—áæ\?¬Ÿúª”„t€ÊTfBHºvVµü 0CŒ¯ø“!ð(tôCq¨|TÝŠÎÉv¶‚_:¤°ˆÅv:Üôû>gÓ =¿ùLr.ëÇ–ùÞ>äeÞ³*dŒ˜G§ õv9ƒTlL<«"‰@ 1Aò¢_mg£¨a™µgÙ&wû÷÷0"€_†oñç¯óŸÔÉ'˜s`=ƒ˜Rk%Õ‡Æð_7w½Éb!ü¹–öL·?¶Çø6ßR7Qˆ¤øïŒùžLÅP!æ¢{ÄýÂŽöré>~aè·ûï¾ê×Ë’9÷.'µÑeh1 Ú0Qö®]¿(ÿáóg¡À"Ü${LüÅAÆ[GÄ.'i˜­Ìã‡ßŒ\ËBÅ+¯W¸¥‚¼Ð+g §:N¯?¾|Úr<.§_Ùï¢D M»}øšÙñïÏöýmMÌ„ÔñØ—Yqd\ÅBzÄëñµM6Q'ì ®c½žÙzà1ºûŒ#É5H½¦²ÒšC»Âƒ1mÒŒ6Âîrú^μ ïêÀpÚl ~ODòœ;S•®ý®¾Æ†ŠîΦ”ôüŒ¬ÂíÛ?ïh?qlßN3º SD\‚)4ì¤0qaßHúɾ]€à„c÷þÞõ BæXgOŸ&:òL¾.š>»àô²¾ŽStØÐ»Ûkå?-i<­BØIæþ™‘–‚…1ç´üúéû6îük°¡¯XîtËua:‹)ÐÑŒÏúÅÂlûŸ<݉Œ°J0À¯*ü`’ù"2\G¿‡Åˆž/•£­6–Á«g§¹Ê,]B“ÓàêrµÙúÚ°‡œò³4¼çåK«ˆ6uäd}K¡ì"0œq¨Rˆ²¿eg«ûß¼g[|e b ’¾­0BM Úßh“ ÒEËeè ª‚šâ€æsweÈ$G ð£OÏ¢I¹ì’FV`Q‹Ú&¿Î°þüÍÃ/Èë=]âŸðU8Þ·“ETºˆÄh9¤Dês;ÓŠV+*µzgøœV2åðƒiß.‚0þ¶»¿¹TyP—Xô¿”RÙz:CJÇKš¤Š#d‡Ç⤜|)Ë#|×ìŸn8üç}UïÏž°úü3Xê£Ê“”¶('Ú˜ÏLŽcb¯xè¿Ï¯À#_ͺr¾ÔØÝxôôÑ¥…K5‚f|M9Ú÷*²Wcô÷>±«¸|ÏQ`™é³&Åd&Ý8àn€Œ/x·H Ù‰#‡_;½R1艬ð¿Õö„«¹4ƒÀc|MÁðA_ߎ¶¾îöSÅû1Ä'¦ÆdLŒHJ¥”~MýljW7ZwKÚÊ 4buXþ¼c=Vä¼Ð.8®OpöT”í·ö´sûêï¸].KK뀵S‘$ƒ)8>5“W©.E"T‰›æ@~Ðü÷Zw ŽNforY„ aÄdX ’Øh#~‰¾],Ï‚ŠEéaø©Fô ˆ„®~EðƒFÚk¨_‰‰îì=A(>§§3yp1ï»@˜¦_{:ãð ƒÿbÙF÷µX†ùå¼Ü!ƒÚ'b‰OÅ»¬]VŸåíÖwlm]`„0]Øèn*æ¥È¨Ì[â;¿µªO%O²Îñ—¶y{66¾Ÿcž^½˜AÌD~n Ã™ú"pHÖRû¶ÐÔáÝ F-]o¡‘Á"š4±ÿ¦9f¢ô€Šçw³‘g|1‚­ÕdHñvÖI¨FžǤ—é{ 8Qu³ïûƒùž·š~ŠådaBƒX™JK#òüë3œ©S%Ï¢”¢Ÿ"ÿ§TªZA±q‹(…F%~àáÀ_¶*>…¨Ñe€"»»[·…D…ФD.¹…œê$ÍÕÊq-ŒÈ|Q‘zÐxyúÓ‹Ÿß]ñμœ†šR:>ä·5Êî$ö» Bi[}iŸŸc@/ ¼æ®îúb›¡_®P©™`“ê 9 ¥´¼©|QÁ"“Î4¾ÌM='zŽ'ý†Rzxëú6†GL L2êºN6ä<°üÆ1wd|Á‡å ±<š‰ŒÅ1×Ô€»¥Ý™žýŸB?t\ä’EÚþæ Ç!Œ¡3ïx`DD 8cBMoÕ…[Ûu| Ç0Á¡™I´ÕCàoÿüK¦A`6-½ =crù¡½a–e9A¥ÆAqi¼0NvvOÜë91/6oδ!UQÜ(7@Æ«ÆðPO&›q š;Öƒ©!¯ÕZ9Í»šö"²DAs©ÀeÛ7ö¶5+²$ù|3îx@‘İødJ)ÃŽ~ N)]˜´ô@ëžlwxÙoSz«öèÝ ’,šT4jâý›k:&H¢Fg׃Îõe¿"i ʵy±}°·fC=¼Ã‹Ù¿˜~o¿¤D –ªºafûZ¦ôQoÿ›ØêsømÉB–‡‡áhØFˆ’æ[=uHêw;47º«ÎMBµ(ÐN¶ÙYÜÛ´Uqh§súýxVÈŠÁÍ‹¹ þœé(sìqJV¸Ñ]ŸêáR'GtÌ }€%TŽ×fú6â‘ÀcÊ Ï9ú)”PÍ’´æ-¿`B¼ÀŽí­ý hQÔ¢(]¾œl^T©œ¢9‚F«fÎ^ ¤êòSugíü·ÚŽð˜kòv* hYP3U‹‚«î çÍ*ÌÀ¾®Òc¶ªÇ’ïXáÉ8(nÞ%)ÕEÉ PÓ­ ˆg¤£õ†LÝAè€g6ù€PÈf(…š›ÊjžFÐNÝïPÏs”ICübŠ8 Ö~÷óŸ{&v‰ÆÞØù[Xß IDAT?€ŽÆ ¢Ï–žÿQ-Ry¤2Ûfg˜E€îFZý¹ôa(ŽÊgŠÆZÉ¡ØÐ,Iñ¯=ðì­SŸâYõPµ NóiŸÿ_Íý5§9YÙ)La,nÀ×uœ†“ÕvI" çÇ\!ÏÜrt‹šWßTxÓø‚{"„zOìé=*D<ô÷¿D1FŠ¡íœÛýTí m©K‹¾ä%7@Æ|Š€ ]³=Ô±xE|Ðç®a_@ô-kkSëÉ2KÓi„PlV.B({ö¢KÉ•€Ê Ïïìo±øß,|2p¹>Túì=mÍÕ‡”1ŽKÏíM}M†gPdFF¶p®Äl2öF"~Ñ+ðêËêÿá&™gÐÇ% (&QY¡“è«õÿsïÀï L ôúÉ]|.7T 9å£ÞfR E) a ©1À€[vÕ¹K ê7ÑÖ£T–ÅN^!V_“µO4Î~~ €J×Èê3õ‰øW±C<£®)8ÝkC…ij€Ú}JÆÊ;`kµ Ó˜¨G0· rê‘T4AônÛ¥y ×é=­ Îdx¥m§ÏÓQðý±Ò¾ïoèSM Me&žV*IÍfò^3# %ŒE¤ˆ|ßõñßÞ6ýi­Ê€Ž·‘÷KeS†¢!Ò¬dõM™ìùÚ ë±T×ÚÍÁªÈí•àþÏJ>ã9~Qþ¢ñQƒR¹éÀÿSiÔ%cû¬Ÿ,œV¸xÆG¯ü|ÚÜ»†3(ªãÈøbt2(=¤'e2é×2ÔE%Tz«û…“–og…]­^z\ ÃÙ˜"KN«åȺ÷0˪´:cXäÌÛïœSÔìhìèoK JÙå´9øÙÀ€£ÏO8CØể3Øh]2-ÙMÒµçôQQ½¶D¿Øêv».dXú PØß¨mQx(…äì—é“sÔ5[qˆÖž1~óqû ¥ö­NïEn0§tQv(Tf‡(b(£€<—¹M¦’[tÿ]õó£íá,Çb„ÄÀihÖË‘‘šI’sƒ'È–’Éa÷±a“Ω^¼Z _–´ÑS¿¦1 blêzb±òÎéB+¦êÍ„žõœºJÏš†˜ò:÷‰…I#}˜/‘Äy¸ aÄ&˜†w¦ú Ÿßв~"þóä£V…Þœtçø¤j„ÐÒ¨C<4¢!ñ„Ò>ÙÅ#îÍ®õ,byÄR ÑB¸H¥ÕáK†^¬`™Ëãgà ,-µV„©Í<æ†/0³&¬ÍÑ$)"‹9„¸¿iaFêP;·åp–d²`s“OÈPm!ÇÛj„5!»Û7m[“&y^OÛ_Ô&-X TvôVh ‰c­d›[dLK "u ž˜Êä–?¯PŽ‘Y‹ÆÌy–7›ï?÷¼V˜ùôºr™ÃŽÃ]T¼o*÷_ÂáÜRg—{úÔˆ+áië®eñî)w¯[æžbǸg›É¢™±|„¢ü5}FQ䤬I7¸ ã †Û‚câq x _x]t{ylÐû6›_U]+ô“{Ü¡ ü¨ô9U¼¿¥êBˆS© –®0GßZ%He€u래ú}„ÐGïÿ…ãÌ0FoHJïôò~ÉS8svCÃ&½É  åýÊqþôú¡´ª“|\ÈÀ !Ž…_Þ¬þ«×[ZºƒSâµzeô¡-O«õ:u·¶7¦)˜ î§@× ë௠‹G«Y†‹×d…| Þúp®¼¹hzý™×¹û*Œa“FÚsœù·[+äþ÷…`¥C9Dn‰üzà‹_Å ¥ÓÇbÊÀ $_ŽX†<ò®„‚ßI­SJ>­kP³ÚU©(ưYÀ@Ùך·ü¯mg¢NéL•oD¯uʪ¤ÃagŒ¬B=ùN¨:øÎÄe#O4§ ¬ª¸eoQÒ"k»ø©ÉcÌZüè°à=ýäoûüúöíŸ-ÏçWîgs>¿s†¼™F¹_X1%#4n¡Ÿ›ˆ+ðGu—›ÁÀ1#cxOc!„¶Kk)ÅÜc-ε5 kÚ˜c=éQÙÿ»P ”v¥Yþïa¡66Q S Çoîõ{B‹òOº³Tÿ[ö¶|ò÷®à¸B þUO}ƒRÚï°±¼pÓO ¥,œÓgÞ ñ0ª¥7õDàð(&òz¹®3ðÌê$ó» ¶EQ†4£ê?AYôoX3à°Q…EDçÌ_ª1¯¼åo>¹æÔ{¿}ó[Ù¦ –Ʊ£H;ƒ’£ƒiaæ9V‡°k-Òq—R`8Ç2€ex 3'Êv-˜·zD·û}ôíb #°ôBARàéù<ƒAË#‡Î3Š(nPNÚå¾ê@ÉAyŠSJReƘR±ŒŒ#ù’gÀÓÒØ^;™;Om€.'ÏZq`2kÄÿ=9õ~‚‘ž¬fÏ€³AéÚ/·|Lªo}7$N¼#ùk*V}%«ŠÅæ:sªþÅ6 ö­H­S3Âò9„R§臿{XÜL€,T­ü»ßr¬Nºu{[„¢ƒâë{k5íÊýT¦^QuKÞ¥÷3L¿{t+‰ç}+EqX¸…3ì/–ioZ„¼WNΆ*?Óc¿DŸ^ }ñH“C#àI±ÆQûÓØ…ÅòN'µÀ4š4ÛȆJÉî¦N¼ýТ÷÷þ*5¢à>„P£n”ÝGDû4>ø¿€:œþÅ cÇo§9з»|÷‚üAÚ q|½£ì•ÒmG}0MmV¯xâ^]РViφ·À` º(9ñÖz"˱Óso|7@Æÿ]iRš{ˆ•Ma“CqÈõÕyÏh\n÷\-!ùí®«ìl.?††(rþ’ÛŒaZ£éª|B–¥ªò¾šF›µËšR;]ôûb’S½Æp¦Ñ:7Æt>7sÈ*ÒQ¥U¯Ï=ôäóY&tO½ÂbPH <43ªP\0>ÿÅÁ4°¤Ä%Ù|7æxJQ3[9œupVê B!0†’È`27Aë¡mûç,Ÿ7®zLö|*:–ó!‡Æ¨Óî! ‚%Q—íÊè«èF<úƒÙ”RYEfc8Ú¹_²WËŠ+ ÚF~ܹ$sj¼6E`T—5„¡ã¤_ñ诮v7QªX4,ÔÑÓ4]Ö…Ïš`HQyÔŸ-Jm;eÐuÜ^]b-(íö œX ‘yV æ¡Ù—u°yÞ=Hü²þw¥` ƒ ȾiÍôâ›L߉-q*,ƒY ï”J ‚oô€B 05ôÒ”PaR,Œ•m\‚¦q3ŽÐ-A¶y]¡À`ØW¯`*-Ïá&Å2”Òÿ™ÿõ~S\·ajúmËhºˆO¢„Cø:ežR<þÝ}1Ѻ¬Œàñµ`qXv•ïš—3ïÆpú÷Öâ¶+?ÐmµOˆI ¹û OOãvõQJÑ0òzû\”RÌ0p£ÜÿÛÃEû»H—ƒ¸ÂpX›pšv?”òâIËÆVÇ-±Æ+ˆ÷þËÉò\ÑÝöÏ^ú; @€r X^HŸ6ûÊU;ƒqºl]Mõ•M U’(êAš›å¾ˆÈ8sl4¥ôh¯$é%Hcp”è‰j\êT¬" =×ÕƒìòÒz¼¼ÇdzÀ`PÌLdt*´ …±W@/í*‘wóÀÃÐí0dt„%%ýJƈÉ8òÀ>[BB^I§ÿÉù¨*Ìïe(H£ÖéõQŒ ÇÄ\”ÕÊ#Ö-F@ AOI ¯n³°ÿÔ$ìý®®»,„7IR˜Í1õ”>Á¥ÎÈ Ê¿lxІšç[}Ý~"2œNÐųF€ ¦4.<ÕÞª%êCÚE[C}ì}Y?/°‹­e_‰_̹˜)¥Ó“þû^ŸYŸ}é=÷~X¬´Ø ÏÞø!⩲‚&äê#cݯI«1“€(¥úŠ Þ?*ñ,ð ÚPéQî÷£Òˆ ?7ãõ5œ9‘ú½Ýý"¡3Î!øÜýÝ õ%6s\£!4Lýóîÿæ¥8Œ\â™äõ ìüü=Ñï“|>L™Üì9 ËÞ–šóRõ m›ŒýBèPÏ@ºQ5ôÑØ„¼šòíFÔ¸¬Ÿœp‘E泚ö‘ðu¿urkqBt¡ðíÙ<Ë ±äæÀsü»¤õ 0= šÍÞ ªÉêò^ù ”NÎx¼²œñÙ`«"nO©Âõ˜ùéi„oÖB¿ÞW)rsjô9kû¼!ð£ø„˜#Ï*ÄÎÍT'ÞK×·lb¿3éáËÂÖý²GÀÜKmk,Ù¥åM„µXEòS>{§µ‘ÒV!.Nÿ¨9CNÔMÀ2ªÁ6(¥ È •—÷ºñ×êw´¬:Å}›ÝcøåÊK9?uÜoíWÚl†ÿ÷•³P¯ì}PZdüGù7RÄ€úñÁõ³º€’çצ+Óƒ="}ý Á¿J¥áßd1Š4 ×,sROfæ–BX ç&2¾õêSíGrò€g æÃ~ 8ó×ÿ¡”R /½V¡yàžŒq»›–5”©xUBx¨¨B‘<”H€pkÉïNàˆá€Ó„úÜÞûÛ]¾ü¤Iú[¹cø2¦”ùü£ÖÓ•w=þ«Q:Fo˜dÜÿyý^±XŠO`35Hs½ãÜ@î4Ǽ}º÷¡Ôž¹<Õk_wç±-ë(!}]¡ŠÂ-xð»çKWHí×¼À²œµ³-%)ß¡ÖjS&æcŒà¦ä[v7o§TÙÜÞoóËÊ¥”æéñq—2d½Õ> |xÊ+çEã‚lUZŠ0œ cõd»´æ€W@^È­:ƒ8)ÐqGÜ9 !#0¤ÜÝ[úSy ux…jÙ»Yt>©çP pÖè6h”ÒKéŽÀâ~qd\ëO²aZt& b cd¬R$Å`ôæÜN¶¤þ»ª•ÎŒ\«Oºp 0IV~ÿæf ædl9K™¢É©¨žÓèí~‚f„€#´+Vñ!–V8¥Äòà—=G[×B SWÙ–®÷¼ª€ÎÄQJ¢‹ÇÜÊ„‹H@¹ÿ¶ Åáóó÷ŽUàÅÏ•Ž>ãïï'N•¿’?ø-6Ø\äù3ñ¼@5Oâ!QDVHJ¨4=ò©WôÞ5û®ócÓ5þ%ÂP%0ó@dobѯ)Qfþù³WDò×÷ÕÌj?4œLÊ.Á D·G¥ü‡VÜ8o€ŒÿàÆè&–V¥C\“ªÅÚÿšÑÅjyL>iuÜ™x©7£‡×¿'zÜÞ—"Ë3VÝíèdò–.|T_nÙ·kmŸ£ÇÚÙž—37><+*1ÙÆ gAº9õ…ÊŠ'ìI ™¸"Þ”oÖŒÅԨĩl°ÊÐEëzH‡M^‘b¿uaêæ­”cY:6:A‘w°À:h¯¾¹ìmZt®"B¬Š³4u…çf]Öè&LͩʼhF6ô#)"¬%ï3‚nVúýg'~;´õUXšàPã»ªÔÆ~©5%C< „þY¿ŽAL¯¿ðø”Šv10%†g„KÜõÄáÑ<8kÈÅàtÅ+Áa“C"§_ç”RÍÓØó"ñ¾IÕ_C¡ }’BÂô#¿Â2Šò9‹]V¬ìôS¨ñ6`fÖïïùÙîŠwæN¼oÚïïm’íu!íÈøÊë•Ó§D„›Wl;¶Í'úîš}ˆî.{ÓV=ªøQü€üæÄ¥*c"PôgÕuŸ¼ô³×1ó+ócÓF±#&dÝ›ÏfO™ŸU8ç¼® ay)¥tŒçqð%.7@ÆÕ”øKÅcHILbNÿ»”f ‚'²Â_­ëù°É­áf†ëÇ2Gð¸œ-•Ç›*Ž¥¡ñI3æ†'¦€¢XTÚ«ÃãÜnWc}ùéºN{oDHBÑôáññ¡‘Ñ#zÒ<à¯qøµê$-©y(¥HË ækíí¤ÑK´41EIŠMV%ØQuò`bBö¨/6’êS¤¦@Ó™¼Dœ14ïÉ#þ¯Ø×Ç›.øUgÔ!@¢xŽQ…¢(#ˆ>¤}yÍk~Lr)kÐq±o–#= š¦ßy€£`c ŽLጕxýŒr5Ó Òç u@–•=¥u,ƒ·ì«dSl3Y¡!ó±¬@$ÑÆF™æ›&‹TÎÕ¤Àã§òøÄ]Gj`¦¡Íº»¸˜Á&¡ˆé]v̸ÊWdŵa½*²"ç>Ú騡@x¤þ¼óu8y–Ýwú=¾^–°«â7ö–&…L¾€:­ÌÒÙ5!zå¥\”€_vþb½0?‹ËŒ <´uVd!8ó|þ@)Õ<½§¾w©r?ÁŠ’M—…óBZ0$ãì]òº9ìr5ÕŽ…}oúÔ–£/×´ÌŠ+ÊåŒå’SƒØHFuí³šƒ‡»KŽZ¦ODã+»ŽovXk—MœÔRü["¹áÌõ¢1j:« JŒÑEçs€ã;‹n= 6h OO-ȵåÊâ>ï@\ZÎ¥@%zX¦»$¸2n”+ÄÝHvÒ׬´ac,ŽÑ \çÁõFån ‚Ç3Ãÿ~ÊZn—KzÝw&GkùáœÚÙÓµÿƒ·Žgy>,>¹pÙÊ«.ߨmݵ5¥ÍõU.›Íh Z°LÐj’³s†NµA¸à‘¶w8= Ñ0øÓ¦üíè¡—Kÿð¿3~:Vã.ül³O£‚Ð(|ß$.Yƒm6\m˜6uÙ¦Ío.Þ4mÊÍCÇy/éB€K•]˜›Ï )ÀGwµQëêÉ/ñWL‡Âœ ÕuÿZ÷é}+—òó^‹ðêKY{‘"±š‹/Q…œÅ+J×aÒµ?šÑ0«E¤i«Uå;§Û¹Eÿ™¡G($³L𤆶Že^|wË2ÀqÜ@H¢Ö͹æÞ‚”XBI)Så–Y#Nú¢‚³a¯Ú èíëßv ª—xUÁ`>]ÛÜí.,1Rsq„á“\?YËOOQ-š0HØÞr{ϱ´¼§ÐhÒÃT?ŒÜo†ßz‚á8f<~ñ8­“4ï–7ÜÌÝ;ÖnÕ©MÁú¨ÓÅYqEÌiÓ©x#Õµv{;¢?Ÿmmnhteg_nÜ-Ùï’¼VJ•Þê·÷µ;(bÆ›{[v© ˜T†côŒ t ³¡m{ݞĜ´E÷ß:L¯+;ØPUºú‰ß^œ†”ßyüÕ—Ü2ôȸÒí:&žà§Bª 6ý¿~Ô§…Àkµ=›Ú ¡ßÍßôâ³,/`–Õ™CÂ⓳g-±K‰B€å¯(­Ñº_Ä÷´·……ÆÌ[(ËRÖ”i#Žv ð\U·–Å<ƒ—Å%éJé7 Ÿz¥ô¹ã]¥ù…ÃkŸ/îöøiˆ=s“°Ù*s)ÉšsžY™ÓêN2²Û,ý[5ðH5Ÿ]1ªêbD KŽí©npö84á¡gÜM+ÆE àyn8e~ëé~Dz‰ ìµÈ`QÔ…¶¿OVDù[SÒe/õZÉ©÷ý˜©ÁʰÊ̵CBµ{{ûäÖHíÚÎj'ûúu5 ÇÝ Ülô?«ƒÐù2¢EQÌHâÄÃo… :ž_BLú{o¾…6z@ºMevÑ;‹n€M{Ê«:u¶ì«šIVXàÊä}ZbZþE–•*„„„oL|0Pápã¿1æ€Òê®@PJY†ˆð•·LmÔ<¶üRö¾óçëù©ÉªÛõ"öž£¶î’´Üo_ôP±Ýëþˆãþ­'`|&ÓÙÅ;¤Ë”CyÌŒ±ZX÷ÕuÿÁÞŸß=çç“xÓï¿­èš1Ω|L>6•›:DÏ5Ÿ¶Z½O<–s)ª8Eò"{Û=a@ BpТdGF'&L Š[x‰Œåoßû“F¯€‡óÄX¢Â ÿó¾ÍzSÆx  #b°òk/¨…#ü5Õ ß“ ãŠF¥tÒG}‘Ld,޾pvæÿ²±##LøÃ¦=.¯ïå"œ1ßÓ¼ðÁGåG=96½Ð«HtÂÜñ§[“E±·³#;kFL^záÜE#Ä ÁØ8]®:§ÃèÁÔ£á¶÷Ájó‘ö‘gõäÉé3^Y³qÿsf3¿m"79ž¡”. e?¶HÍ^’`6BŠ‹Kg̘–”8±¶¶tÏþðtDýð|v… ‡.#!$âXÙíªÜ×a5„š®|Á¨þ“§›ô]uøU\~”RÌáªzÒ KM¿_%•øh•=ðï^ÛÑeÚ9àæQo¾£Î¬b€ÅQaÆ»VÌç~Ëö©D%eeèœ NÏæÎx\n?EªÈ@f¢${Ã?øà˜ÀHo™›{ËÜÁ¨G>¿4t<üþÍÍÍþZ Äg>ûÚ&Lqá˜Q2ÿ±d+ê÷K?}ì^J€ÊD€Vû‰ûÉNW7a¬‹…â¹)—²÷]¿X/ÌÏR-™xÒÓ±Ça=‘žÿ݋Ω·Å%Îú™Éógâ} ÔǤ‘Rº[µEzO¤¾)ìü±j.›üøæ£/wØê¢Íéy\P¥äôQEüE±©3Š@k“Ò$QIqhDï¼Wkéñ~ÿ©ü  +’»³ìU@H‘Üí©õ‘SÍñ 6Þ€ÍJþì»/±3‡6ìn©id9îî|•.´B½ússDÌ¢;릸äÅ÷Q%Õ«M„WP$Æ÷ 7Æ 1þ"‚X&V( d³YFlë¼N‹µµ©£¶ÒÒT?I‘Ñ—õÀSë-b=7·öT_œNXt>ka¯[;;úzº½î©“oNÊž¨2“‹(÷¨ÍÙádrORp¤ffq÷„ž;òÛÏNrsêmèßG¥ên ‘KsTûW-”•0Ôš‰CGJ‚S ’,À r ?ÕÝÚX#eL–˜q8¥”Cü¥Ï8¥4(2ÔÞÒ9LqI FP má1çDS% òY²­EŒáÇÔa—ÎÎ(¥ BòeÅú5bo³ÔAÄL/Éûކà`ø×ÆÃr…¥¬¼)襻ê„OÕ«t™¾qËêâ g2âoÊϨ–m áö7¬#„<Šï¾ˆ¥ ‚¿:¢3¥ÔßR¢FH—:ãü‘ªn¨ÚϾuÛZñùlvU&žvºÅ²»ë¥á$¯|Ở ?~þã̤Èû—Ïà êDŽí1!ÝÖÊN[MXNžpabú$×ï?f Eƒ:zÚwÛ{JSs¾}Ñäì!‡G2k9Ð<½/SßÛTõà8qF3»J)±}µNÃ`ödËÞhsº³ бo¶ðÅ„<)Ÿd÷’^P@ÉasƒÐ`®–µëz¬Þ§ŸÈ!6@wÕÛˆábܶ*@(P"ÅSð$%BŒÊ˜hlj"…»çÜ}‰{a÷û[+NÅe&.þÑ×.:q7¿'ù½‹î|Î5æìí: 5"zT¡<_ªáȸúHü¤T㢮X&&†‰¦_¯èASÊŠc-U'ÜŽ> 4uÊÌÔÉ3?}׌Žô °X8høkµePkMèâh£B)tz%w¿ÒKåÄŽ* ŒZ]íÝ­Í„(!"%µUÒ¨È`÷œ³‚ÚÖáä0Ê7kò‚5Z¥íœ3«Ârä@=ÚtÒ'X’ÉΛ—ôùÖý3ÃQK‚ ÷ŠŠ]àÒY·)k(!éAùµ ÝÂ?@ÑxBžŽ¸ü·0à 8]#rû²%[÷ìï·7YÙ¹ÇÔ²ÀÉÈ'Ur̦<”ÌO|K©ÔS"+ˆÅLÜÁ¾Ç!¬Ò}ÿÍ=Ë>áéìkjÍ9â#+ ï™<¹Çî«R‚yå IDAT|ÌÉWmÞhN®›¢Í–¨<Ó˜{ŸpP¾ß¬Öta¢}èyÞKÝ™ü4HŠ Ýï Õ™ aáÏýpPÀÝq¸zÛªþeí-sr'OLt‹ŽÌˆœu¸Û)ú§ó'¼û³\8Ò˜Ñg-Sdf„à°sÒ_‰‡Nƒ_æ&mØ,¥}Ö©93Ã’­Õ·ÃM¿D¦$èS©þòþƒúÞ¥ªûǃ3ÂQŒvo•>XÄÞéèú‰Û¦}÷Ãý¿>zú³I)ËŠ„£bßIÉ•ÍþϘ†ØºI—Ø€I`õHoÂÁ Ö^ß?ÿU«Ñ°ß{r0b›£}ÂBLïéu€™@ø JdSâ æ4ƨ糎½•{½¢÷Ž¢;.çí_·£®ô$%äÞg \”\xâškO4×–-½ïÉ‘¨DQöH@€Å*Ôˆq q7ÎÉ c¼¼à-+5HÃDGã¨/Ví·Y÷¾÷&¯RëLæÜ…7G§e°E˜¦£”†h?h´¢?!€}Ýýi«Åñõš»2,pƒLèWSCDB Ìî©uú’eÉÓïôô»0Ãp¼QÌñ*bS8ìm^ A'¬L0]”ÙeýbÇî=ê¿ÌŽzüÑYmG ¥Ê§ütÕª™¤ÁÇœë|› ¶Qœ §q !:H݆ͯÞvë£ã#  UPÑãã5Wdá’dI²×C•›µÑcqÕ­2‹á»Yüθע (^7,r7u5+m»D¯äGe_E{N§|Y²e—crrT ­×WWÍ’·7”W•D$ç-ˆ¾ú$×kmýªà0K:UžXYxUb¬(µÔFheÍ…kv*ÐíêA¥‚Åk‰”o>Ç9hÁ´Ì…Ó³^yo×öÃ'7ï«(*H›š«^QDÑ0}RADFM×îºö­±DíóY>(;ãøêß[ë?xÚðÛÁèLŽÞоžcéùß½”ñ:<¡tJ‚q¸c¤ú«Èó!}€‚ÆC±,¦ÐK=[å–°w±çñóºMŽœTßy´0õfJi溟D è?Ç» R9* •r¹¼¡Ÿ#˜y”w߯vÞÿÀ„¦ƒ?£TJ1#àˆ:8Èþè¼GGH†/é'vxDÏò©Ë/: .›ó½g_7†˜â2ÿÏòK-m Çön¼íá范:9j%À‚ò‚ôÅað~PØ‚ˆ_¹þx;õêÑ0&ì q©!tD,a€Á€s¹‰_ž±SJNÙßZ]n Ÿ½úá›|G€»“‚G0E¤ëC­E±F[9Ü3pöÖ4 ^ðc„4,¦„Z;Û(%–cÃãè w% ~$=ôøïÂèð'}9æÕiÑŸÝŸC†ú†1ÃÉäȾCZ+k±(éõò@|wδ”AmÍÒÅnßùoKOkXhì8¸shj|WuCkieÊœÉW8)„ hs_M4@Œ)s¬jCÒ‡›Xþ¦ÂOžÉ€È”RZù¼¸½¤Ša0UÉS»€; ëˆzòMNûõ¼¼áÌÝ+ɱžÈIÑs_ïXG€b@Vç¦hå©ì°)i<½¸P8Žb¡nÐÍ(Õîܧ‰¿H„ò½þõ,pÚ37˜Ÿ´ì@‘šÐó꣫ç!„ÞZ·ÿXuSquÓôMÕÓóSØ”ðzZz,Å5qo]ƒâ]<ÿíº²ç;›6Ƨß¾Mebi£á+‡–œ¥m''/1*hU×B áG:žðKï]ª~ Obgï>n£õ‰(cTT:)eic×ñmÇ^[\ðH2£e—ˆ}33œ±È_ÍYCí÷pÀ1ˆÉb² Ø8l“RJ Üxð—ïo1OÏHŠ‘šìǬ ÙŸ0ãg@çSucñFŸè»cÖA<ŽþµÏ½ƒ1Vi5÷üøë—r1Ê?ý'f}P%a¤üÑ;8MzÄ<}ölî­kfxnæ÷º^ì03Ò }-Ð;Òþsº2.iÔI"•xÄg³™ú™ó „¶ÿý%Ñã^òͧ9^¸\ŸþÁC‘R ”PÈ6©³Mç@f—¨jé8¦¦ô°"ËDPâÓ2 &3fÙËýÐù»¨ÑF7THNõˆð›[ ŸüR©üÁÉwþ'÷‘@…%+~´uÝoìm•‘'`ýÔ+‚¸Z{ûÝœÍQÈ2ì˜çU•û-¸ï‹”wï=%ày*µÊç¹,žÒ'‚šc¾–ɾüL±Ú¥óÚ¿$3ë˜ÞtAü“w/¢„šŒZpï.;ßÒ¾,¸³*¡Š±ôITöñÑè;jeWG „°­ýO°B0 d;¾ˆ¢I(¸@M ie€]©~,Ðó^ŸAø”£®ÛÀ“‡VÎòù¥öc •OþM«h^ßÇ>R]UkÎëÕlz_ðZTšp àYsD:ÖløýÙð‘õ•¯ª´‘ñi7¤Zå4%!èüÊlò¯§Þ—©æI4>Íg¿²MþÐG=8ÔÃxrڭǶT ¬¦ƒõnù[g„Jås(€YÄiqî}&†» )„êäZ±Àdn ‡¸! ´{C$7€èñâu;‚æNê î›ü"{YUÐlqQVƒú¬ô3·Ï};ŒÀó~ÿŸÇ+úü÷ýäAw‰| !´þgYŽ_ùÈ3äs êâ£@ß)€Ÿë$†f¯ƒìhƒ R)ƒ²ýgeæ ã"ÓÐ(7YI¯ r›a¦ë: Ée}ÀÞ[ìHwã©´)EQ©,Ç{य़ºˆ æèQ"Òx†RÚÓÑÖiíñy=ÉÙ¹FóU³J[W.7+zZ•ËåDòH¡yñ‹öµî²{mÁê@ždçìk«ÿ³WH639ÇRJç›Ñ¿[±x8Ç™=³ôè¶®î¦ÈˆÄqôǬ÷ùäËj‰™I•GÊ-íÝá1yiCä„ì¦ Ñ#F¾œ•ÜÑÑýýÙYïQžq‰é—½ìl×-EyÞ0W~ÚŠQdÇaê¡m¶ÃfkÜM~¿Ý,q3ÍSRØè@}™¸IŸ—#æêgûDí$-F$0>¯ þ¹ÿ½`Μ±ûy·aƒ†U©Ù‹ÜO©.ªÆ1''cUÞ/ë^a÷·ßkML¼yY²Û;ÐZælgu؆£Ri“þ—+‡ª^Wk££“.®¢§”:¼²¨ Qú±$rõãÈ÷6%.Šôã±øŠSð„fR›ÉŒš/>!<‡°¾K~•Õó˜¯ù{%—$@θÝHê±+-ûÝG^èê`FÁ¦.5üö®30ªãZŸ¹m{•´ê½ „Ñ›éØÛ¸÷¸§:Ž“÷Rœ—8͉ǽ$q¯`lSMï ¨ Ô{—vµZiµåÞ;çýX!„B€\™_»·Ì93sæ›Sábbÿûž,—Ë:heÙ!Í즕›>{…ìí¤„ÄÏý`µuó7ݛۗã<3œû¹Ý»=^Ïù†ïâá/÷œ:Z$‹Òʇׄąž#bщ¤VMú•ü¬ D ñ,“Ì’$ö¢šú]F!Ä~,|½Izÿ 2Î;V´•‰°þŒ,}õÀ BHkuùñMë”Z]xRjlúÔˬ³¾Äƒˆ 3ì·ì͵Uj.}ö‚1±¢•d,l¦Ÿ »¦ò)Áìో5Ǩß#‰R£¢Úƒ®JZ Qz¶Ä1»{¡ÒhxRÉXÏN_àªVëË/d ¢1&²)ÿÔE½eð3BÖîÀ° Dl¦â{àHæ”ZYF”A?’€%Ç–×Ç~öba¹9ÌÕ§¿¯ƒUÏö_r_4s&¸¶yX¦É¦Ók¯÷4¯kÛ£dHÕÆEXEC£ÇÄ…<z=›¼Ÿ!_‡tz8 ¡T( ~°©c% úº¬³HÁ 'ÞvÁRîpHÕœD>Ö5;.T±‹­j·ÿïË9¢tø©G¯MºöÔÛÏw7þù8mV\^ð‚ZæC£…M=þZÁ¤âÎ÷ÑHèz5¿¼ŽO‰gS»ÑºC\w ?4‹}O‹èqÐÚOCi†ºè¤˜ÈTMäb]¸õÈûÁGL×ÔpJnÚg•ÛK<­EíTÄñ7y 1„]8†\'v–ÐRž‚ÖÚfh¬´»7Ù ñå@W›YAHý㮫©÷~q°A¡“æ¤}ã˜*"Z{¬Ûs·ëUúÕ3VŸÏ¡´"÷ÔþuÛ1)sÂÌÕ . ^ÔTæš»ƒ»_nšk¹C>æ"©,™Áý·Ïü«c/; |Eóƒ‰1™„}mþ/ÈfÛA:î=Á§'ÚT>å*¾Òç°ýòÑíJž¹ 6cÚen§ÍY@cd‡½ubßNžÆOÉÊË!²¯¶f×È{*$ž‹Ž<±@14&ÊÈR^à^±þnžv1Ej$~‹'þ߯S¿©¨:”’¾l zx*ÕŸc„h‰¬©-E/Ï }2Jzntq2AJá2¬íz¾ï±…—6"¯¸}ÕµÙXÕðQmö^/jg›Û„jd°99UaÒ¼2ÙhZÊ]Œê­÷4s#’m¶Ž@Á|{PÚÏ^e¹›´œû¢‚SP‘ª"õc¾ ‡IAs‡,©#&Ž$0óîàA¨¯Ôþ›_w_‡ÛOÄë£.ˆ0Q*l–(¥ìÁ7@Æyæ@ÓõóÞÙ!q,›WÞÚd×q•¿Uú`éñ?)4aa±£ h›ÛàPpÌø`íÈÍPÿ„éûóK»Ä…0™›{PÚºUüp w+¸lœxÓÆòøE©í¼Ú3ocêÔ§QFl÷º»8Ñr:EKä¬3Ú®üwlÀò-ÿÅ ]è9îÜÅ1Jáè;BœÄ§0Niˆñ‹^zÖ±ÍêÞ´¥\àÙ‡îY<ÊÓ·§`IkZ:y) — ™RúúÏj ZÿËõ?¸m€™ ½ÝVŸ/¹£«cÿÆ÷22«êÑŧ7±Ö”äùú©AÌBáÛߘ=5…— 2ʰ¹;LD“F¢¾™Æÿd Ý r¼Ç ™Âd£d¡WJé±vùüCÉëYöè“c"$„|ø«V•žYùã€s3æÜËñBÊ´™ç‹ wQzv·§×ˆndšÉ3ƒÔº„]âg¾sÆ$‡v4W+›ü3òúÓ¾GOª­ÌIÍX>¸Î$µXdÑÌ¡CRbfuMá±Û¦O[ùU§4IÏŽd€ÞO߈´âP~üŒ4¸(øÖ‹ò®Ž;•æ6EW!€ @×á#iAYÆÝyÑxÜâŽñë2Ï›I$êYÁM÷cLÜ…à y½é3†0Ê1Ì{‹®× æ4wþæ!¤ŒÚBCÇþw@0…Ž(Æà­N'Ç’;ã®–°2ÒÑèõ={NqI!^ô¸‰4½¸[4Ï”õ£;ŽÿuÃÑ]Ù1O!^Úçµk¦òý)U–¨¤»FŸÞ%ÊQfÕS¿c!ânä']âr@Ä©ì‚ýÒ&é(ú+°NAâëüÇ)C&‚=k<}Ó¬_q@²~‡=VÊáœzH=iw›)žwGChÁ–šž´d#" c£¨2¦ÈI‹¤ !Ï¿T Ì=·'jµü%3UDty]Ûs·/H[`Ö™‡Ôãû»þï;»{*ÅÝ¿}Ή-»îµÿcØþU€ôŒ{7/Tch àe\f&s«‚Èw„ù €LîƒK7ø@ÄB¨ï@‡‘h¦’¸olkû/È8«ä‰Ì%¤h¿J"xBv½ý²×íšµæ^Éœ=—۷ۥˆ¥‰šøL>ÔÛÖÆ޹ ^‡ÃŲÌ4àûý¾†3œ ©äùÉF,mé”âxž#ì†ú]Ê×F,¸`ý®/r¢zõôgá9}U¹“Í–Éý'沓`L½ç`Sê|sYçSw‡ 0™üRF‰¿E×Ûã4ݨNÊkÁõˆ‘Ÿy)«ƒ Y;eCK‰Ÿ;|þCѲ5þg{VÒ>_T»'5j¨ ÛBÝá >ñÀù"ß@¹3ÿ-ÉÙÆ€Æˆ”^«ÐŸ{*Că‡[ªjº%™Þ½&Q§.‡MÙzl» w/L[hҚ΂Ï_øÐÙÝ‹&/ži‰ÒîZ÷Fÿ8ö:<.§o¯–¼^ ^`9~ÑšG8¯ýT‡6„@„i YÀé»Åößš $’K•däAm3v-%i,a¾IÙüAÆ™R$–@¦0ùêÑô·æå”Ùç™’®1™/¿ã¾j?¦ÝÄÍ»Ç g;µ7ÕTu¶4G&$ú‡^懎ÕÀqks½§™ãàÊjZ² ˆýC˜(#ãïÛ¨"˜³bE#Á>ÉyFÎ<ãæõï=¹gË ó–ýÐ×ÚììcjµrJ€æx·Üá¥Â0·ïd>WwüžÌi‹ÆŒ“Ãæ½Òè_q‡˜Ö«½?V˜ƒŽæÆD„aX–9’WYam¯iì )K…g`2P\ÎX2¸Ý%PÁæFÉíŧ& UB)ÇQrÊYã¦^ åEæiÊ©Ú8¨îꥦÌ+QB@G]FÀØžq4H€Ó­RÃY\ ,cƒ£]”hVÈ$BHƒ³evà”ÑèJ¨­—ɪ-jY1ß5IëϰýGm¹®SH‹ .?Ùè(;¥Œ1o(†‡L5ÄŒ6¦d­Í%Q4©Gí'¥!LHÀϼhru×{[ Ü¥n* ³O*OßÒ)“0}ìÇ”‚ÆOÖd-Kš‡ˆi‚q¿§³HìNáô#xg@54:¬Eû)Ú˜K«¦Ü¸¤‡Tœ^í—4,@ñ½xìDû±íáº{îHºÝ+"¶ÙÛvçïž3aŽa ”S¹ûšÊ[êOÖµÕµéƒ$K”¹$omÑqOËù"â'XB£‘ÆO˜vVµ'e´R< ÉŒÄ.TuÒêî¾v81´(Ó¸Å3¾íüh*L¸tù–¤jhoEû2‘oz_û/È8ÍÅ"œÄO„«),RyÓËÏp<—±tÌ’¦B>ùm›ÇEW=i<×eY*8¸øI³æ]‘»°CB‰!ÐÔãþ áK@kbc´L\[%Ó`& ª@Ï^À)kU⚎>óqñ»·¤Üåk[ÖÜ{NYÛ¯t((Òj5Ó¦e@q/­qa€0X að¨-l{9•'³ìÅ­ ­Iç°9dQB:*†ÛJÅÍf2­Æ•Ðï?ì¥v«ãþöɲP{ž½ 4Š”„Ð'N«Ý$;Ê< 1ă%ƒ{½Ü 2¬‰âÿXä‰Õ1{V¨æWS½»µÈYÉ® €þ³. "tt» Ò1–¾Bº¨;“{Y' ìeù )6ÚÖír+‰1ÞõÊ©<²7Ã?e4PX®íoŒ«Æ=ÑÝ‚,¹~»ñ)7.˜¹!N™·gÕ’eïo­ò#í±³eÉ=ˆV§ØÙëgasµ×{eúÅ+Ú#¤ÏVÀ& ¡C:hžJ ºªÙê]½n;å4 NÁ¤¥zJIäÊ¡XKü( ùš5ñ¶Oöþú£#O/žú( „±Rµìö§  ò¹µ3„Ïk[Ë0)Ù³*pºÀ™~hHºu„ ƒˆ²Œ1_˜îKÖi…Ëä«Ý}Žm9[⡤§·¹§,wÿ¦»ÕWgîÖ *Ë‚ŠÏ¼v|`X" @pd|Tâ¤Æ+eºÑ "›¡´Ž¯/ût·×EΣºåTŠÀ”x¥IÿíX °h"©—áâi)€_ÆLúV´ÿÿЇ}Eb Ì!ãjÁˆ„“‡v×åéýfÝraÆÒ‹©«U$,\÷DÀàè~€Xxx¿J«Mžä zQ%¿¦CðuDð¢L€0DÑuü}Nca@¾¼§Þf¿ÙrSr±„¹3îúÑÄ®p<µDZ2Õ¥qôMhTÅL|€!„t?ù fÖÜ7»µ~!Œ%8õ–9¥æÇ™›sƒSîÍ4ó…ÞÒ)Øó¶_ˆ¸³×éðÌøq€„”ÉöÆ$°l‹ ›¨íÞæÁÏ3çl3„ê! Ï)Y 2JÐ/eI‚"/€™D–ÊÙõrM3L𷠔̊Ò='½E Ã1»¨öØÂ:Ï2"„VîÅÎ £D Qº)ú°™ºÀŒÑı)þýÅ‚åÝw$^ì¸S*{=ý ¿ºäXñÑ]"bµÔ!ZئÈA©2˜-ng_ÎÆ’Éó–.¼óZsŒhBwæ– ò] ¢f˜•‚"ïúß„< ¯R¦Ü²Ô?!jØ×üéÍê]Ùsóa‡O„)ö¹`¬Ä>µÈNc,¸$„ákä¬èAW H!áß–}áU 2Ñ=åRN2®ª[;ßzY½æÐðÌ•kÆ–¤mÕÞýد}<@y:p5!¤,ï¸Çí²„F„ÅÆœe åì.ì ÅÁKŽg!7{FoÎ-âV( rC–ôE E:Øà<$"E£óÛµéy­ÿTJù„„~õÊ,÷i«xØ.O?í SÐ#ûéM^Y>|dÃò¥ß»(âè£Â›+íÍÁ‰Q#›þ­¯•Ü­ôs }G;ëþòÏ­n×ÞÕhþíOð™JÔnòvWɲÓWö¬î¯Žä ítœž¹!‚óõñ¦õÀN¤â#¡7!P–°çk'w1 ÓëÀ—Õe Ëv¨‘F€²a‘Ê#ötÎ]x¿ò Š4@iÕBPp*òjZ L Žß¬çb-š‡ç@OWà õeŤ< É=ÜÝó–ÕYf™~Á®³¹Y†dDF✗;ëzžèËöV÷_†ñBÏR«~«?ƒ ’~!CØLî,Or–0‡^h'HBU8õa?Fyzð™%°±'ä}i\šŠ!Š|ÆŸµÓ¢ö¼£«³ž”QÎäà×F)ÌT˜e$„k.zÓÛãAŒñg*{˜Aˆ|äîoØ\×ÔÒ›”ä¿bIøh§ÇõÕ/ÂéxV’$Ü’¦V´Gñ†és®‹ˆï7áâ8¾ð@nÁÞc¦Ï[ó³{/Èú½NÞpƒèA€ý‰êøëŸŠŸ¸%—U Óz7Ãq#¼>ý‰{³ ýõ-^­œöÃ;†0±Ú}Çj÷Ÿû›GƆ‹ oœ d0—`‡ákÞ~<åA1–Æ’ÀoQBõ‚ D´¢­\ªLãSÌ<¯Æ‘õtw¶yœÎå=É Š±­¿®È}àÃ3E§¡ªÜéè7i²Fo8w®çÉ}«¨ƒ6`€‚ h·‘"€™Qÿó°¢Á†*ÏŒa§F±—aÿÔßÔyÑ‹ÖïÜÁÒÚÒD[¶~ïÏ ž1*¦ÅÓ}!§›R€fßûÕö·[Zk‚£F›í 2½àd{ÕÕîú¨:äÐî¼£ÇK›ÛãÇÇÝuÝôªšòâ²Ê=G²LÏÊû[Á”ÈMç‡ _S;Q _tìå WïiuÉî;ƒ–¦Ó»2;B;_8Zê¯Vh„ ð‡ÒÆ. q–AvÛEºË\ ¸QB€tè¬Ê! ç?㎑Ópo­Êñ'áãKUËÃç eÚ(ÑOoWX›R`|PÔ èùÃ.)X}k´5ìês6 ‚!6å!–U<º\w,7à³ÜòE_øÄÜÐåÐñç áP(ˆVRãuË{SÙtù4˜00€qÐ÷F¾¥|b.¹iùæ{WtÂäMÚ@þ|4ÿI0ó€´)‹[¤ã{̦ÿ|S΋]½­FM Ìü³½6;• „GÙ[Ÿó´,:£gþa@¾²㻃ÎìØÖPåûKöæšE™žÚ-RïÚW.bE ³%4}örP ª­…;JÕ#©sͺ³’lgCUAéš'îõ MF4üÈK)ÈdŸTçñe÷Ó­T’%gÚîÐ]¨BËs‘³2 ‘!¹ÿülßï_KàF]PØÀƒù—äñêCÇìd-PÀðyM_4Âè÷aZ.]JÒ¾õ}í*ˆhî2©<…KV þÓí0|K¨»½åÀ'o+ÔšØôiñ“§aè¤þè79wº{M IDAT®òì¾ù÷˜ôý˜»ÏyêÄQ–ãÒçôÛùË(Õc%´ÒÚà´„‘‚œÌfÈ(@#eµ ©¶Ò?ì÷òŒ´8‰›«àÙ1©Óú‘!þoLÒäû+ ?ÌÞûδ¹wÜR±à=m \ï¦)šþpÂ:­)çø¶ëV<|Q”ŠßÙÙ;¬~ÊWík®v³J•‘Óò·CëبàäíòeS ¿ŠºRìR4o£¹û]Y¼%ƒãµçÅçõ”î³çr„£H§R2õ)CrÚPØÑe²H 3%†™:?ï÷¾þ&(üŠ¥î¹»ãÈ3ÝCèò²ül"zÝ'ïa)¥N[¨T²û4•7j—_ëäf¼¨Á Ê!&™•Í•'êòüü‚c‚b†Xzþû—/ˆ^ñ¶ÿy@ïo¼ðd>!ËÛD À,äI&ט_XþÇ}„ebM˜1 N§ð%ÿ7„ÍÿÝ÷ëç{åcCx1*¤áp~hfjHÆxÅæâÕ·Ló‰ì‹s~çr¶L˜þgAaêÏóçîìbƒC[ªhMSg\Äðæ8=nY¢b8«ÍôtÒŽj¹Š£vé¤7c¦Í‚Qä<‰9 ,¸þ…š_2TBG³Xô‘áˆBǧ©b¯Ñr@q·|Ÿ´ñ¸´o`¡ ÜZ5ýgŸüÓ©ÆC\Äö_f k÷/èhÔÖ6ª-IÍ{û'ËGÆŸÙ3xaÆÒ[WÕÞá:œÝâd ®1-˜vùü¤µ«5¿:_£ÔÌŸ8ðÝãÛåï=±ôþÕ#'+Áz€~é˜N¾¬eEOmf8Ö>éžëG¸‡ @xÖDÂÖü²–¼RSlxüÒYc¶=Ú ï†¿Æ@À…½xÒ‹R* ÿïÈáùêýúïQ¸4~‚W…££íÈçð‚"íš•Áq‰c /!ïý¢E©eÔ:fÕÏ-ˆè»^”}êŠreDTD :0dœÍì†,àjŸøÜ­UÏ’{¦ò æë&Tkk›B¡˜5k"&¤Ì¯(Ù;Øo‘?·Ï&í²J@ FÝߘԔM¥eÇ&N˜s‘›(3œŒþÏVð­ýs”zN§üíc×±‰ K.ùW_frÚ§ÜGºÉ­±«cÏ å²¾ºýö\Ã?zã¥qÒ‘¹àé=aˆ£Á†•~Ú±Žt¨€»–‰wk…"àEJ›má«]lð‚ЬQa£Â —<6« 7 öšî'?aÃLš‡úõ,=Ý}½i3ŸãýÔcÂíÝ/ýÎE}^ZÒÚ;% àÈÀ KENtBÔD“ÁO>ôB{Ä>lªjd!¿êQâü;V?çl%}„…މ_¦7E 5 ¾Ç,$´Vž;a È/þ£çÿ'#q™Z£u´f뎸=Kî3¤_{}êœaŸü—Rlkï[÷EËšªž´8ÿ1AíûHÉ+¯›vÏ[÷¯ÛQªÚ¼ôþÕ#P€"ÿÉJ_°vßç+¶jýc)ò¼F5óÉû.pB§M Ÿ6.”úb²d."eŒ¯I[h,,b&|§´ÿWÈ „óž @&ò©®†þîzûÉëA™.¸ç±1‡/»þmën—`ÕÏ-ƈrmíËh¦~1¡TFi.·š‚¬ ªQ¶ù™§ž\¨Pñß'„TVV B¿=1u¾Zmزîée7þêôVA !1ËpƶCCãË'N˜s™«:¿¸öw‡Ž;]Þ4*üôþ%*¥0À¼ZŠ®ãáÅ{úÆ?¨tä)æÎaÇâËŽ}VÑîEQêVÌ×°ªËl’G¦ç^Ô-ç:Ñdÿ ßx{Ú×ø8`€"2£h»§~—ô›_”ü2Í6Ê@œœB‘Gó´%jÍdöù f\æþ3ƒX”ý–S ÃÀôè®ýŒ ŠJQ’vß’¿½õUmSgT¨ÿYTÔÜ#STpý|ÿ¨˜-£L†³áál؉W»x;â—é-ÉÊ .®üwmŠrŽuõJ6y¥QÐ\:ÎNbÓ5D·K\?Ÿ[5€™6¼õ Ç .g¥²6U‡ÝrbJ̬?7Ê®FÙçÄÊr´ø×;'Áã‘©ŒwÝžøÙ;UáÑÚË™rýÁuÎfE抄ỾöÙw¬-ÿí 8¿ Ú(®ó¢Aæ %áHΫyŸé“½’96|ܵójÌwß1¬yd U£S”øú’ƒ•^Ü(²ÀPÀÅÌÄïš}áÕ2òÄ| Q'óIWCgOÜÝ^WÙ×Ý5ûÖû – ±yž>üü/mHa\–:c¹ÞwÀ­¤ÅõÎòæöjdÐ1ÉÒšøX0šónŽ·¬:½ðè,>ÁÂ~3«ËÊ*$Iò‰1|#b3ŽúøËyÝm€Ésˆaõ ;;BÈ„”™55E{÷¯;û¦Q~Náïçnï\nV© „|¾3·¦¦mG·ÕlÒþ庙ñÑAƒOZùϹdjBùY¼Â0|†¹¯l‡k\Í2Ð4mB²&Ú7^æYm{U³À2OÍ9ïyˆ:ůð¤f¢dqÖæ &j$ßò½­Gð÷¿ï“]G=4ÊOœøÕ_LfÜÎ8U;pBT7gúnÙ; ªO½6/.õ‘³áË.»³ŽjÃ"ÌiËs»ýPɃkæ ‹ö¯Lqf¬ J¥ÒÚŽ€ÉÜx1±„-x¿KtÓq+ô¾¨#¬‚Ò k¹‚nV© š–Õ\.UƒHD1äÑ£ØiÙÛ×Ö• "•å7ý !o¨\¶â}V†ˆa¬Š8ä±NLƒÏÓ9ÇÛºº<„À©².ÂY¢±1†ŒI¡!Ú÷ß,OL1MŸt9-Ì­Ì­i« ñ ™žt–¹˜èñ¾ÿôž>÷ýüÑù¢0Ó/½`Gl£À\Ç“q\ÉÚm'«1~Ùì€Äh…^;æ˜`Œ¹àN@ÀÝ£6ö̇ºvÚ€Ði$ÞŸèà;™ã*]Ôn§ŽyŠÙß©V¹<²J1ÆQ$¯§©üdmá ¿Ðˆ¹·?8¶­UÞŠœ¾†OòlMÚ"-!¤žVˆè­¤Å¢Çë©ïI NŸâ·`ˆ(ï‚ð"·‘¾L4jIV<·"‘"„üZWŽÍÖÕÜÜ’––:$»Ê wýuÓ§¿-:±95cy»—NÒ³±ÑMÔÌà†]³àŽ]{>ª«?‘<ª%§VÇ’œâÚµ_åhy¡.J;~æÏbø §‹Z‹åæ¢ÿΒɩϣ-*wÕo±ä 7I›˜eHe3&œ”eù‡?/JôkØ…nH8è@ìjN;’I]¡£€!ŒW‰zh”ó¤ ÛŽü3tÎO+ñ §á§Ë”+úó®õÚ+šj6Šžî€Ùƒ»/{»±C ²K-€!¤º±cp=¹¼Õ£°·Êîr¹ÂØð6Æw·èc»·—NÿIÀÈÒõŽSžÒ/ºŽ„MUGÍÑ€»Å"dÓ/—âQ,â×|ÙüFÁÆÏ97“4yNÚŒ%Ðpü9£ä)3&~Qøþ 3~á{8„U5wvq›«hmï+,ê†é÷™’ ŠtÞœ0 2þó…“q‰†KFˆè=uíuU­UqÁqéqéƒ)¿ã½µ%UçLÎ\:sW>„“2Ý! $ˆaò$k+,/ùõ6Â23ÓcfÁRj*G–aôGLF[5´;Ñ @¢IÀ8ƒ´6ßAuµ€ Š´BªLç¿s¢$§G~asÍ YÁqÁšËl›ïõ’ý;ëKòXŽ_òÐã ËŽí´sÚå=ïtilÂ4uÚ" zNI¹]ØÉVéVùûKÌÐ £Ÿîˆhuâ_vz”ÄY˜Õ=¢õ˜Çõç€ö:hÝ.—ÇA×hyõ×5jû÷ 5›ÍC»ˆ¸bÍo¿Zÿ'Jå°´k)ÊÀM‡ž‰U*í²%÷íÚóÇ)BCbG%²ó³]ÇÛ=†P³ú†‰@Søn¹m´~›·§Ž² ¢ e¢V #’P¶ŠöOÛwr„ üo \üÍjD4Þ‘æX_‚2%,óuÔ_Ý$˜GópiwÚ;äf5³Ìgv¤t„ør'à¸Rvª–=îÁîìr6·5îfXE|ê£zsòà¯a!Ïdg 0ëN—(É<×/o«µ;LG£µúj4D“Á÷g'è³J¥¢“Nýþ0†xýÊ8ºðIJä\½¾âÝv߸nIœ©ðv]ÀÉÂ.µ†»óÁqŲ:þùáÏ}Wâ‚ã2Çe®Äëö~üçzÝÞïýùÇçr9ú·/†=I`™ëû[»ç·¯ð*…R¯þÄ=W\ò©Í@Àä|äÊÊt€¸¹$™;äæŠèãÕ2މ¹H~Œù»Ö0DüñÊ—W~öËêW¶Ö«³‚/gB|üoWo§Ï¹òG¿ôeNC’-/v::eN ‹2ëýYØ/oÑ›ÎÎ63§NäxÜ}‰é™J•zô þÇ^O{jä{Óù-3Ðå¨kÔ_8O¼dW™è%^C!’‹üMÐ31K4cEy­B[_ßi·lþÒ>mÎ…Ç7îøôiaѯ–ðóv)¿GNÓ±C¨´pþíû®ß±ëýkÜ1, wgŸÊ;UßÝëòŠÒÒ•‹ZÛ[¶·T?­!,X‹¥Ö#’ÇNnQ¨ƒ†æ¼ûYûn»äðP1P0/4O5pÚoG,'S óuØÐÅf 8|5‹Žv]ÂÌ>ÔE[1úÐ@……ÒÙÔˆH‘RNÎ7™_¢/%¶C ‰ ‹]í»è°•´ÖoMy¨¶ô½Àð…C^‘\-„°úˆ•¤ýÅ3™íƒÍO”ÏžS õaïtuV$oر§Y*úØžv—Ief‡õÎX÷³¯º[’ÇÈ™­þiî·Þ¾éÝç§.\•8i°ÚNq;ñ¬CtÑŒ¾@KmqÉÑݽKèÄK¢“&V_$ïìþRmMÚ¥ §D"Ȳü»ÇïÚœóÊ”n\TÂ@m¤Î ©7ŽÕœ+€9‘Ý‘{´óžGÆ&ôº{³K³Àåq‰²’,@rDrJäYYmí]_¼ø¡»ÏõÐ_:Äø”¾éÆn ˜UD1DA1÷_ëí6ÙëñÄ=‚ö «X¸èíÀh‡Ë°jÅžRhîC/C,Á`Òå·ù^ £—ö2@¦ò“¿ƒóÏ×%Ïüê¦ø-'Ú‹êÏ|^ùÃÑJ~T†ˆØÙPS_Rà°vŒŸ}MTjúØ 0ò·õž:ä”<¸üGþ~¡<4ÓÚB9[CtÉl†™ 8y<ÛÝ猟>J„áqG©t¸FvKðó…BžrìàT$ù6­ÜkN8“8”U’¹ò/[×ÛpÀ>K5&Ì+Î'## _™0y¥‡ðû?ÿ {ç/;½DÍ`šn˜Aœ=sõ±ÛwíùhÁ¼[ÓpãÞ‚üSõ.â·dVÊø¸P¨ú&3F5a à—äD…‰D.´áì¹£°Ï~¢ÈY @¦è’Ç©#M¼þ[<Ç(';6”¶ÿ~å×óƼr'ˆPŽ0çîRÃO'Idn ¿Åët:º¬¯PëMJõðQª!ÏÑç$†M·‡zT^ŽW#b·µ¸¥nKìø+‹^ED£êWz6± 3+{ÜÉA ÎÈù)Ú]ÎB8qÒÚÒ™`,Òïªñ}hO½Í¨ àÎÐ’ -ÞÞKXfƽIóã9Uÿ­y×ß»ë³7 ÃD&L°gbyà8BΖËìÙß4,U8Žß¾åˆµ­Eòz¥Ê6Ó/0¬ñ€D÷•!„áìõœK¿tr’ܱ1Åi›0ƒ;Qûþ¸¨ß 45ƒ7æˆ]J`¹³Vwþ1ë±Ã·ßÏ Ì¹àÉ÷ûxùq–e”5•Bûåq!qf£ƒ†ñL^ÿÂÖæö…·¯ˆNœùˆᤌmÈÜ $l•õÍ'J:Ëj©(%­^<)éÊ`Zà¼-8­(ñõ· ÛZ Ë‰žpÉ$4Œ£Œþò_ñí”ntŒÆñ[‡Ë2,KÒ¶åu<¿±&)L{]æ…]B:j~ù‰ZoXþØÏÇvãi*õì~«‹W’ˆåÌ›>ÿ‘â:¤&j; в*”ªôÙ .ˆl±ÑŽGkåã 2Ç@j{Ûd~X¦àûkN8+m£ï‡.Œë®EåU—µÞ¬Vkuu­Ç㉌Š%ÅÂb&“‚ƒoææ›¢2—óKxظã'¶wv6ùû‡@iM뛟îS«„äØùÓ’‚ü ¾.¿äj6éÆYÑÖNk6x q¬e27Ûlpið´}Ö±K üxMì|Ó”oJTA})’·0ö9Ñ(bzgŸÎääé¬DNm:ßó6]ÚIª¬XGƒX•jÞ/`„Uƒ9 0«Oj»Ü5Ié?§£¦µ~{LòýÝÖb–SÅOxlˆñ¯³uÖu£¯RŠòÀ¶÷ÐͳnöùßV/¸fj‚nðŽØÓ"}hOZm0E ƒwßÎ2¯ä>ûÅfQêKº&vî£S‡ÌüÀðØÀà#û‹PˆÝüU­$QÐ:„˜RC±§“²gVϲÎdòe9ÎÝ×ëu»jJó‚üÄñÉÑ–°£•ûE/„áÍÙ®®Ê;ï1™~uvÕŠ[çs«Œ…qåÔ¯=ð‡Üʯ&Å.öÉcTÀNä ¥bO8§è R(ʳ®º5Zo<#.jèh`Ÿ<ŒˆÈ2¬¯ÚèÀhÔ«ô‰á‰#œgêNUçl9 (Y+æD¥Ä¹]NåϼÀ `Ø_) ³´¦rÛ!wwR¯ ’¿tÖ•/\€uÅ€á@æt6)à+šÏ1M !¦+=åÅ 2¨,3쨼äFŽp¹:˲dR€L±¾ÃõÇÏ*²2Z’Q­`‡yöuÙÖÒxô‹ŽÏX¶:8vÜJ/ܽòñM=Ís(¿âGþ¾Ü„5%Ò15ÑMd³´`€¼{…"!-cäåÝ_§¯ðê”$5„½ý<ðâ‚%dš²§Qꮑü“/=ƉÓé,)9Å0̤Iiûªwöø®õç?Õ³ïOK2X¦Ÿ¯å–ˆ9³n8œ½qZæÒ?¼¹O­äÂLß³x0)þÜ×¹HÖ¿üc=J?ÂDâoj= R©Íký²sGX#§¿7xå7iŶ(6dWMëÿí+|j΄ág©V@¯Ü¿ô‚8|x±‹-nOOŒžÒ½HeÁz¾yUÔU^ÞU½Ð4…ãƒÅÂ0#áž#x$sÌü¸B|),æzp9[Zê¶ÆŽÿžÝZØÕ™Ÿ0ñC!ÄÛS¥4¥œ{ý°÷/0áÊPÔ ¡2ûnük;Ñ ·ÑÂÀEÙ‹‡þÚœ«²0[eÔÌþQHì¸ÌÁ"b·ÓóʆU§LîÖ¦cÒ•ž÷}³-Cj‰ùú=KªXÚOç…·ÄCh0 ¯·÷ðæ»;Úˆ&/1.Xóø`RôGäk:hWdy)á{MS»à€ z5pF*†ˆQ*šsÒã– \4%ä ×:Sðä~û•R¥Š Q~¸÷Cží÷èæØ~îªWëÀ+yWN]9Y”×íAÄ·ý’R«fYö¦ŸÞ=h€üghX¹]ATvýò‚V-hÕI«¦Æ‹"½K+»Ö²÷—ºXº D=âù+Êðâ?d8í¶c›ÖοûÑ‘'q«ÜÆ“ÁMºRúEY19þ°®âõmuÀ2„b1kf„ !ä«×ŸeXŽ0Ì¢û8†YÚ !Ÿý©)¸ôŽ? \Ü)~F€(ˆj&ׯ\È?´ãùñ™ÓG“Pû·[ÜpÇ>1ñ¡¥K[6ˆÈkI{¾çÒ@"vw;ŠŠŠ§MËäy¾ íÄèß5ñ$A×Ýñ¿¹GÖõz\ãRæŸ/‘ì3ÿÞ'ÆýÇ_òô9ŸyâY8Û•÷W+Ë‘kÞ2´ÐGÒÈ%vmdÈ=lýxµ«‰"e û@È*†0ßÊQFqçD4Ý›n{ã˜ÜîäµœŽŠœ0¶2;°VB´£JBH~}ž,K7†^£µ\ð•Ãx8„ ­,~¢¤3Æ÷vW·ÔmÿË ]yÝP™!ÄQ¿ª†Êy@ $o3CcM}Z˜~Àãг G&ÞaÒpH:ûÅN–á*J˜æÔdznýñÓC:òâ«…¬5r¥¨ H =ĨºRo»Ã` „´¨ …y· dº)=ÍŒíØ«Ï†Š!S¦X&¦)8ÅàÔwýž/G~‡²7zæÓWÌŒe&YzHú*›e"gÄ?SVV·æî+zoNꙘo) ~ëØ—­¬BÍqG·p<“šê÷Å‘*Åépï’,­š¾ ) ûÈ)/H+É„‘†ïúæ7×uµZ)¥‚JyËÏ~È%!¾êA öñ~õhå¶Cm…åœJ™õøÝ¬À_‰[ï{@eÀ ³`îQõíèð#ºi$þ?I“pƒ Ñìêíùêµg§^‹)è¼>TW˜¥ñÀœûåñÍ67ØUÔÙdu×x¤ç7×£µÆZ_eá„ïÿèF¥Ãns¹§xo¯ÛIgßf Œé·‡8!íw@—\×p7 D‰ˆm um u •*)=ó‚6_EÍô@•,Sx`†aº\0D‰Y¢)yßÑtÄ2M9Ø¥m4ôloï()99uj¦ —0«yDL¼bÓ§ÿ'zÝ©ËËcÞùâ"VÕwˆ²ÌÊä‘{ÎÏÛ´wÿZK@xRbÿ.õjE‡n?;ݦ [Ê«\Ô#«‚ƒ‡LÎûë=­±ª°L}ŠoøÊ !¬‚8Â)˜Ó§XèeŸÐK¦’~9¥·õIs‡}¸»£MÅå~3nI½A«ò¿`NÔWñÕx­´¬ þ¹Ôn-j­Û3þ{,+T½j0 _pî[²×® YØ&¿iE)X7Ó%LÏ®±¯™;þíÖæ÷6¾óÚépìu« e¦<ä竤ðC{o«Dh©¬c©§5.Åsʼn IDAT¼ñg³e µë>¯8¦ ±µ[r³*úØŠŒð=Ë0e¹Ü©ûÈI ×ÏŸ]Àx:³7ؼþ•Ö–FIuÍM×X¼NN’(•н ûu(„Óxäï’Ç>{æ€08UŠ’¨9ŽÛU½-¨/Z†3­<wðdnW¯A¦gB®dle{Zs-s®f‘E¤½I¹êÈ>zÒ ÈHÀ×ÄHÔˆæ`r–ÚkÓkŸZ[:eQJ“•k‰ö‘J)Í‘°ƒ‚ ˜D ÿÝ ½­’ÛkŠ›xçÊ+Œ“ Ÿuº†…a̺O@M+Úç$QÁV¹‚Aa˜åý¼®(÷ÐÚw#SÓSç.þOJ×ÞŸ´Â¬€;æ„@ñ¡}{Žœ:i a±RdÌß¾jCl›=ÞÏ+Ñ9ãýF³Ýî/±¤ŽÌˆ1(©Õ7<×ÑÛ%«´ÌíO÷»SºÀY/WtbK8—Ìeøv»ŽæÆ¦šÊð¸q–Ðð jIJZè»ÇÄ-ñ¹§ŽöŠY¦©ÞÚ§òÍ BÍ6gôâ ÇAÄŽŽÎ¢¢âŒŒIjµê’‡ƒ"(4Koøßí_ü¥¡ú˜>æ6ЏqOϱ(Šòu &ÍÊHð}1lÙƒGs¶V× ‚ÒØ1~K¾Ch'ÓôZ¿Ù¬_ ç±É² ž¸mÖ#®åCV©Xå×-)=Ѫ‹»Å^ÚÑäòðRÑaëüíõ=]íÑuÜÞÌS$®wL0ãɶ…«B/‘E–‚b~C¤2"²Z¿!m–D¯»·×ëñ¨uú¸Ðð ‚0BÈëøºí047nvöÔ™EgkÃŽ¨Ä;…±¼àEYê‚0|oÙÊÿ TtýƉ=ž'í-Ä"$K˜~°ªË¢,ŠØØÚ9}Þ^:ã§õ‡-¹.ÑE©„ñKtEGöJ©û- «Výµ_q“ÓÖÖÖ×Xï´BO—ì7S³<#"ÌAhôí>añã ³wåìš8}ñà“’$ÞÎr\qö.Y3ç¯J˜˜ý)C€l%ѶT¼ÛÓ‘‡SêHduÓBHK]ô¯Â ð«¥uÒg$f úq"CTf-×Þ}|Þ„»(•@Í)Ã"ÿ½¾JåîuK  Åjl’­ X01@€ÑÄÕØÆ#\‰m`…Þ¬çžn¯9VÚÕfµPýÔ峓²&7Hœ-án‰øf¨Ý{¬zW6ñ3ÓƒÓ“T&Ã/ ³ê€L&ÂPN(‚¼‹#Àb2‘þãÊ• 2€ˆ”I¬ ß´®­¦bá½ß&*ÜéA½!H¿™­³®(·±´húø˜,^ ßlsg—wÀ¡Rr¤¬KÉ3«³‚¡¸¡§°Ö1lmƒ“¤}‚ð¸TÕLºØ P*#̾>D©fÕ:Ng­Ð¨»„åÉHvT–m­Í,ËYÂ#G ª±Ú‰Î‡ÉÈ<©ÜÞ| :é¥:Ða;€ x.gpw•0¬ÒÛÀ-zº°ËâdnÊÞ ›Ÿ†O°œÖ<úR§è¢Qs´þÒÎòDÊs¼ºØúåkO *õê{í•U-­Î÷?.çX¢à8ÐËöÈ®y+ý…´:ÝÎ(‰žòüà dÂr¤ËÖ¸ùßWªu;ïúûò¨-l=6 €À«Ö~õ'FêaZÙldœõÐAÄ™£BÚÐá{¡œAQ }ª¶@&y"ÄÔƒÂëY¼õø+*£B­21@AÙ‘–ÎꆞëÌû½íFNò#ZŸ+„ãN Ÿ—èûG‚  \‡«ŽŸx}—GA5ÁF6V}ÿÒ:Ú[y3a¸AQË*>†%x«@bXp4¶{íN!XÆÇ¥Ü²ôJÜ¡Zv£€,9œTûU~XÛŠö0bN%ÿI‡äÿ1ÀeÂÆ¥„KÙòÊ3[_ýëÒG~6ä6¸^n8æ=1Eȸ{·ëí—eQ¤”.y览§%«§ §ñ÷ ÕϬ?Ò,K êa†Õ#Ò¯ŒøûENkE³óÓwZYÌÒú-z°ÿÈ(ƒ”-íð ;ŽII`'œííõe§Ï 4ÂøÙnÏu_Ëš LSÔïu1<¤Á™Ê‘go¯³°°xêÔ)ªÑ ¶¸<¢(JÏük+ç3!Ä?úšTÿjêÎ_±â&)h€ƒ mǤ¶ƒXG¯ÃÛ¹ãUÐ1^Êâ¸Óv¯@DÞnÞˆˆ:Nsoðµ_«ôÂ×BÑK7¿UçqÉ„€Ñ¢8çXón 5(2{‚ßÉ«ºqV¬â<»~gUíC˵ÁPr”2 IúI\y¾½äˆ ŽnkCDDðaŽE·‡ëÍ#FÐÜ”Ä!¤ ”öج:“ŸZ§e—«±z+lýù!„WBc®õ‘ÂÑUÖÖ¸{X„}Ù,¯°fíÅÞlb‚2Øô}6ƒŠK 9íÄÌ ·Ó¯–:£fkšrú:&óQøðù_”¼¯ ŠˆŸwÃk×WtvºÌ&…[”fO×=æÀøÁØbðHÝøÈo7¼õL{S­%4 )eu>xØê¬Ð˜W=ðËþðim<ºQ¦²ï7ð€h¯ß­âxsÜ*{%Yº.ëúa%X±©÷Ô’|'+ùÚÒ}V¾·+%0ßõÕLUJmlÙ†Þéwø FFÖd.ÚP¿å¬Ç»ëýM­5M,ÏÅúE¬þáí‚J;i‘’à…ÚÝ-Úb9¤¬øa×riBGEMñ'Û8Ž4êYÿó½+(pç@‘›v%@îö\é…Ïí … Â…s „Õoàù 2ÊŒ›î>úåÇÎî.µÞxîh1W “qw{kÞö ^·;márKÔ0¡$Œ~rm "º½8Žðç7Ù0w'ûY‹K==„·Æ¸»TîW¾ªcL‰çŽHÛ½à^Ä­a 7ð‰â£‡$Qœ0}öÈNˆ¸»\Ω“Íjòù‚FøºÖŒ6„KX­a¤lm/•FÒÇwuÙ‹‹K¦N¢P(.M›ðÉÖœ†[oŸÇ·\· }\T a•‚€Ü#붬{Ú` ž±àþ!C“ÿ>DpûSïõÒ#¦5`6ny³­½Žã„ùsoVáŸ}»ùfGö>zƒÀð_ë9ÆWù§/T"EY©‹Cc5Jõy—¿,QJQQqI„ùûYÖ¿rå·¨Ò‚ú)ÒŒ iFð¸e@¨.väíí€7€ Ôpˆ8÷†P£¿b0‘ë°›f1œ œ`;¶–0<§õY›u&³Rs å×ãzQñ„?·5ìd¹arr"¢§»”Ö}“ﮕZËäÒ`&„z´¶×_+Œ>+ a!d’*z¾Ö/AÁòdã;=*Ë7<ôë×ÿURþÏ"YÆ)–É©AU'edê¨m)IcÈy¡ !/ Õ¡-¤ÏYYphu‹a˜¹àÆÚÌm[Žm9}lðô•}?ŒÁÁö@´IóŸXAßI‹°>†ŸS!în…³St£6ØÓZms¶JƲ¯\Y·ÕZÎ.;»Á™æQηÿø¦$J²${ÝÞ~÷Üq—]ȤÒ×ÝàY’!–—’ÊR5èÞ{æOðÿì}wxÇùÿ;³åúéîÔ{o$¢#ªéÆÜKâ$vì´_ŠÓâ8Å©Nsâ’8v\ .0`z¯ê¨÷®;®ßí?N:„@€ð×N˜ç±±·;;óî;ï|æ­„Æ}i¥ Ó4`O‰út™HvvøïÊMFšHPÙƒ• (‹Iü··ÿ=}ÕÍ»_þûœ[î6Ç&|zQ!"Ö?ØU_ã²[)åV=üñ˜!ã,´¶÷{W}Àëd« N ¥×s¨ÂóRé‘h«çsŠ51\R”Þðù&ÏžwÑ8ÕÏ(ÕÈÉúH±xµÏ¼šVÿÇÅ$ˆœ¬kH===åå•3g]*€Žû__ûˆR*+Šß/í¾eYÉH)ï çÜÖÛU¿oûßî{ufñ]àïgmIuJÌ|Á£lÑÜÃ[¢ ˆ+–Ý×ÓÓZ]~xãþ—ìFpSï=á«ãT‘ƒwçþM-ÕNYÆw'Å$k¯¼CªæÈʨ¿ªÔäÎ0çÎ0@o»W 0Ž#[^jæxúÁ?›"$gQ °Œu@ÏÑšœÕ 1E±v¶Ã#ÔÚKˆay_ˆ ÎßËë+ž×èâÒo:ŸKýýåž¾#aÉ·Ÿ:"ö¡¯H˜YFššlEIbFä9\€eª³ø±(ìíh®<¾Ç5`›±ø&¢Ÿü‡?—¨ÕÜš•)Éq†Ó|ÓV‚ §‘”2¨ßë‹;ú{Ë|túÀV&x ­à5&¥qMñ;JvºbÈ0hYV¸,/bÌ1àë¯è8èf¾¨œ;ô‘ù£j/Áf¤@:˜ ž§@GŒè-$)0—di‰ ¶uüÕn;NjoãÜ SÜè8ð+Â+ÊHA-õ0è<$+"iA·‘“vöÔ•œa [vßÚøŒ$AuŽ@À«W€]%ð*¢'àõ%oìí«:’7¹0vöd>Ö|‚ÕKÌW uØáD,e^HR?™Ø"ˆ$vÖf™”£É¬v¡oI‰ž>ÿÈøT4K\âÔek÷½ñbñí|Jq"¶V–ÔÝ‘œ?mU|vÞ„pa°{—üÞúx‘äÌÕ®2„ ºBxoÄÂÃ7Ú#wîŒÿóÛŽ%S„¢ Ó ÉpÿnSdTJö¤ ;ð#Àw7ù]'FêÇ•ÔüÊçuAó=X­Ö²²ŠÂ©z½þ2:· ¸—ÌÊU›W˜©Ó¨.0Úˆè´[î}ê½7~tbÇ¡cJ ÍLYijyø²ÛºŽ³$ÑÁmI%j²>*»Rµ°;3o "Œ«Ç¨^·ÜPæ8¹§—)˜?/|ÚÂȉ ® zƒ"â?È€ºÒ—]"J÷[)¿OÉÓp•²âuB5 “‚tëkoåxþ’ÆsøœŒ·“ÛÏgE§½NòÛ£–ŒÊ¥g=¯‰áT&8$ #aY|–´M6¯ÈÑ ÂI“õ'ø¦Voºó+?¯¨êßüö™â¹±sgǶb߬$&“ŒYªôÌ©ýÇWßãu;(¡ÇO]{ÇáS»›õ\LÒÔܘÝI³:š3çƒbÄ rvï©Ù h"ÒŠØÃ€v°  7ÜÀl«€dˆPhÁVéõ£ò{«…»C¯˜ñÈãOþ%B_ý•¯®<ËQÛ)µ&¢ÈO7„~ÚIª”5|pšÑ)¤åÓ‹—.õ‚·’‡òÄC9cÇ$ìddOçŸÕ01Ié,¯Nœ;5cù¼à•Ut*8ÐÓÐ VØŠ%J"EàS?JŽJÀà>º”ànz?PÕw:±¿ú ‹ÄF‘°ÿbÉ-È „ÄeM*8ôÖ+‹ï}Xf ^×µ Ê'3ÇVwâPÍ‘}Ï/¹ÿÞ<î\R³wÉ{_µ{”˜t1ä~Tœn‘^åAÔóó’e·Á¿÷´í­´d69Q_{|¯ÑlIÉžtáaôºðÛ9ÑôÞ‚F¸ø4{}/ölx,á‹WD1†€ G7ß8ÎòòÊ3¦ÆË#à”¬„QÏ‚£ÎW¯üÉ?øcTï\ºè‡i«Ãú™üOïz•%Sop+ÞJOãQGyœ*ò¾[~Ö]]yªd÷Gݬ«ÂŒáÎK[ ô€µ¹ÊÉ‹$2N½òÞäKÒ—¨xºÜÞtÑ0Ö[„Ä0Ç[AsÉ8—gðŒü°`óufo°ªXrÖ!9zR]êLpX{9žˆOÿúµ¡Í…®ùdþù?ù¼½Í[’³îTëFqWT%`×EÍu£ë„t\G “ø¼&«·ÜnWñ4\7ºéˆPºéŸ¿òy=sWÞnŽŸöû?æyzß9úXú>;)F´sIÖù𮿷J}ØÙTË" ˜"bx­Î/ò4!^’¤„Ô[{ó—îü6Jè CUb45‡#m5]ÿ⨨Í[oŸêDﬓAn(Ý“†ˆ¢C€Y$cTˆˆ+…;vÉï4(Ui\nð×7þUgR§&Í=°2t¿,ô±`4p0žÅÝ; Â÷¾ócInIœtç\Jìêqn¨(‚àêÌ.qúûPƒA¥UÏÞx J£•Q·øÇžO[#ÑA‹ˆY$6¸qÄh;ØÄjì@€Ù$ƒN¼ŠWUKÄgv8Ø:/’€¨®z¾Æà’Do¶Š„_D&ÁÿRûoK+Äj½aÿ†-¾÷!^TB2¸ô*¥:’ ÄOÚ€Cƒüõ)A¥6„GßþÀ7q GÞñ‚R2û–°”õYL£”7³Ñs«y\ŸÁpÙßnjܸýô# Méù…îoœ”ªº”¬(úÐ~ü_ß½*KCƬum©-†ß¹b#“bæ®ß]õáá#ï.³Xb®Pžõ#ùC-JR&æ]{æ˜xƒVaøSuO.™6ÖÄ‘!è„—Š€!£³Ûpw—ðcIÆ9~':_ÅWï$wFCôHSˆ··ôàwLS5úøQIçjß Èza-r©Š¨§ Ó«»Ý6dTóeÅ?Ú,h÷‘—eèùÁs;JÊú¶¾Q©Õ =˜·••ðHÍD‚COÖ–.;²s7(åxᶇl¤„RB@QnœsãA»·}ÀD Dþ ¨}ŒžÝùiÜ÷ÝzÁIy`s&«Jˆ¼Œl2NÞþSu-+Mãr !/ý½Z’Ø×¿±zþ“[ŽÿuUÑ#Á;õ„gå’c¾¶½Ùhã ”ã@Ï¢—Üøˆä÷à Tƒè) Û×Çâ¬\kh­Py6‹ ûÜñ­ñj¯ÆÁO§ܺ‡} J Ì%CõÛlc%"áNBÓ Ï »?Ž˜sàÒ Ð“óÈ‚CÁ‰¯ õ@ î:‹ÑÒ`la§àæ“-á¬ýÖ.!„Xâ^Ïÿ¼¼èîÏ€ŽêŠhá'V±ï½»ð¯|ø›tâŠ["béWs™Ïã`×5BF =›½ê€¼ÕÎ0b™ÅLÐPY¾ÀÜßÂkßk7ö´|öº¤Qýã‚•T›løäõ*­H.šé€ãX©û Üu“»*DÑjµ•—WΞ=C­¾H¹B…)ѶKД>ïóÛ¡À©Hö½*•‰dE/"jÃO_ûÎ×n"’ `•¶ÛÈ®ùaS³µÉj.dy!²,­\v¿Ïïùh×ëˀŜk˜@D·£¡£éSDÁˆôá¡—4m`²§?}a«T5W˜'¡¢ÓÕë ,Ì0B6€<,9ÕÙa»­@ø<ûÁK¯œéëó?øPv¥ºe+“AYJò‡Þeïë<²}£ËшÈY Üøàwcz£ùƒã[¶žØêñ{c9I9é±éjQ Åkî~åß޳饅7ÜÇ¡”ì…*)U êMæì"8 OxµÌ¼ËI¾ ·1—Z}¿ò´r`§ôÖùBàú[“ 8ÿ¶ƒå›ow!(„)èóSk–ô§wÞó6ö¸ív9 L]¶š´7~6%àWDDÊ ð_~ìGÐÇ‘o©½ˆ“NftpÃ9îïGù!‡ÐÖø¶à€Wð2OØÙñk à` Ô´Út$˜‘“9]%¡[ÀÚˆ=!.jC[ô_ª‰À#  &¨÷ ­9¡1¤ @"˜RIô0ŒBÆÚvb9Ì#Ùšÿ=„äÓ 4N™»íÙß…EÇ;ñŽOìK?ÚÒZUJ)\}}Lʤöƒ^Ê_Ú~ÀdŒŸ;zú£[5G<±™ªÜùºèd1ÎËÙÑNÖßRþVõyÙåZj«{;ZÓ&å›#£*ZœïŸèf,NŒ6‰Ã–'€OlõûeøùZ•Š¿È6¶Ó¾¿ÖÛèaÞ,Ë34)/d/«ÛìNZ¬ÕFp!’öôô”•U\’•ä2ãîPºÈýÕŠâÃŒõ*Ë$~˜rÈ÷ºä¸¾¥¾õäKdò¼¥v¬ÿéÙyef¶6eøK%»#00 OIBD[WSsewwSJòäI¹³.cHŒá†?Ö)léú„ÄLý•³è>:€ci2‚­çg»$‘ ¸\™kò…YI—÷¢CØÞ‰î[èÙ ã=ýjÍ8×Íñ—@úu|½û¾D¿4"S»³ÿL{㦔œ{5º¸QÉ«ìî–Í–ðN½zŽ0GMÔ5=îŽÿü4G‰WrœjÝ4=é&¯þ¬­«ù»ßúzlþŠØð…½^Ïì D­ ùêCnÚÏø½nDdL™¹ô^MáÑaáÑp²îd]g ¨EõÔ´©IQçа{«KÖØþèƒQ/˜+ßòX/'KôÈß-¨5GM³nG Ëää­¶Ìk—ìÇ¥]]ÄÏÌÍR‰jDà‰êˆõÇ„éæïÈLŠJ0ÖÝVÕQÅܲÑOÖk]bvÚˆ¥„ˆPÏ𔌠@oH?êðF\ì—dEAS€FèOð'JHG³Ÿ •pâ A­ž‹ITÁR j"F•bqƒßîAYÊL’áƒÀˆ·½Á[jÀ](„Á¨ Áä_áCî,xŽºäâäŽ'–6´Yˆn&Éø_ðñü_ÑdÀ·ÁŠ/|ý£=sô½ 3×®û¤Á‹¾¶æ#ï¾*¨“>ÚŠU;¶NrY…-Ãõ{¢ŠT÷4Vù(óÖ„éDκßoÝï'È9«fUO³Üh±'Ìçæ‹çÜ}wOWá‚AÝÆ¤D}^’a{Iï³6ßYŸ7˜[󥣊NVœÎ]?ù"—ý²ýŒ§þŒ§.K“>Ë0ÕÀé'ê`íh•W“Pýýåå•……S/Éã’c«»ÊžNÆëHÄT>y¥8"ûV‰ì5"NÍš#¸:[+ízqÎâMX?ÊBv;¯¤g¸%6Ü[Rº§±©¼®þTQᲸ¸ôñ³S°¹Ú“¬å2Ž\y (Œ§ã0‰°+È+Î97G ‚gÀnÊÒòÂ%œüÞÀ7¼àŽ0 õ훓2oWkcÇúâ¾ê¹Á©‹Ÿ'̉Ødõö8 3Ì0˜†€Âä~ ‡÷íèïåÅÉiøO|nsɳœÔá`Ø2pC5ÃâRsÔ)"&cÊ`‚ùÖÞÖ÷w¿ÊSÒbÒŠ²Š û;±Ÿz냙 §…³Jöä3Í&¼8·ù£å¤.özsêJ,NF.™“Côél 4Vy]ŽA-”JÍ>dëÈÈýFµ\žž†€¸6åûðB¼ºÊ(Fn~ö^TO+ÊÕ,˜´4&•œÇlX¥€ì 'dO_¨∋fÐL™qŽébXµ¾Jh£à Ñ@nÆÞQ™ô V¯Rf×r À{ÀHÐJ2hí°, €j€ñè½èmë…ïé@[<1O!Ið¿áãù?¤ÉÞ¶ÿãO*­nÁŸý„ŒÇçv~ø÷? *•¿OÌ/øR àÑ@•fÞx9кM.*»ÄëPvnè×8½‰›³Ú(0·=èªK<( ^æ%Ó«n“x/ dd· ªÈEŽÆŠª™K—ÉãÕd¸NåTÃÀ®r+OÉK^9‰^̈¤·ð^6oôn²ÊýpÅÞ3ád¬|ÍI(äÞ>ˆ’\.÷É“§¦M+Ðëõ¾˜?Ô+拓ŽDNç£g çKíç}½d_לՠnÙø¤F6sÁÝZyøÍÞŽ.èS“Ïïdß·ÝnGLtrNö •J{Ñté„>Q“¬]u_ò„Cáï.¹}rJnƹœ{žØ%x»m }ÅdÕ¼”Ë{×Al·‚w-É<#kz÷×ÚØÌèÙ·Ž´HÆ?‘¢dÁð)œ9ù[ŽW%f¬Si¢ÆªÔåí;^mý€eß:îÂ* IDAT&Æ>O§Ã?7íl‰moÀq²õÝ© ×ëTæÐSŠ‚_þÚÆNkmB¦!kRg2Fj@dChIòûÖ>ðÍ‘:0Ÿ{û©í’,ñ”×iu~WO[]‚=è€ °@@Q] Yê Œð<ëï¯8 |öZ•™}ûe3¹ßË(ÛÿÓ/ˆ”ã@¥¡”#”B¿ÍßÑÓfóò"z¦ìe /"7=?\ýÎß~÷[.Ÿ-/y¡Ál¼õk÷Àá€-’Šéü Ý½ Øo} @ ×‹$›û$È[/°˽$!€8˜  @ ÈäP¼ôh9-®pýÏ*0þW@"6•ž(ýh‹Îdž¿þKÊäs5•;—nÙ‡ 'Ý+ˆ&᤻ Èp¸·Äeóñ¦ßö|è÷°»ŸŒ -˜ÖTÍN3`€ÍMƒ”Ð*ê+XÏPaÿÙ—yïuí µ¢¨²Dz ­5%€“î4À/Þª;ÚŒq1Q¹ó"<Š÷•Þ·TŠô…úÉäbIB¯d ¢Ãá,--»¼|¥mÝ¿«•!"åIþ—ÕÃKL oòö  òmìˆcô;¯~OµKÖ|E¥6„¾”«¹Ue6 FÃX¯ÞüÁs²õ›£GøØÚÿaŠ? |5îÁÂ÷ööUTTsz^ÔùtüÝzºX뎀§‹1 "¦ò1³y•yLŸÜç|½(_{~jÅîxÂÑßµýÝßÌ_ö“%>ˆ0PQ.€0‚i»ú¬[?|Q£Ñ/,¾m,ÇÛ ¬KÎ5Î_{Ì3¼Ïêwʬ›&_ú!… ר_Ñq‡°uu`0%Æ8gD.p…FpjõåϪ5‘ÉÙw_àU&—ʽ§ ¨J‰½ªºÜÝNÿ‚sÆ(ÀîõšJ{Wæ|Íüh]óyaѤà6‚¶„™Éo”¿ëð8}²/ HyE³²µ©„?óë‰:’J4 ÂØÒÌc­è©Þâ§>¬ŒEÇIîÐŽírJì}2! (˜?[¯ÕS£yБèØÁÞ–F§"ã-w¥˜ÌªÐ*îý‡­º«¬ž5A€¬ûÆ}ÆpÓG%/–4nÏIœdìtAß×é«­±§W¤˜'éùø+‡ï ªMzù|€pPF@ 'gÃ@®Á‹k ã"Í ð<( ÙEã@ˆxý—¾Ó^]ÑTzb §ëƒ¿>•^8;}ú^®ê8ûÊX{eMoSkGËaTȔճR ó- шH†ü/.{ ‘Ú£ž†S^kk`ö­aEZ¨QJëYœòn¶žM$bÔ]ÊÝî8ýûÙwOõ«=Ö†îÉ fòZ V¨JZxŽCè«oyö»ðžeB¾^uì+muþr}¡%ŒÙЧ0àT$*MwZwâÐÀ‰ÌìØ¹šéY|:\µ¢t~£bŠ´½ý}åUSròìÖ°žvm¡çgUGŒžƒan7#iTq<˜Æã„l-•=] $.ÂóùçǨžkuÌ?À”hãFY „3…ÇOŸwûGï?½`ÅÍb$èS“/@Bˆ ¨bcRý~o]Ý©÷ÞvÖÌUQ‘‰#Æùúïj“s sVÇ\*õºK:X@!é8Ö¤Upk9ýü‘áó Ÿ§m°°ÎNÀ #r£G(Á zùŸ¸m 0 à²÷˲¢æN9þ¶à–¾M¾•­ûX_ç­!)1ãÖ ,±¥ÆN¼ñ¶ö„ø› §ªëõôºÅ:š²J¡¤¬¯¹¡·½×å| ³ùY“cmGL-ÊÀðÛª°]$"Oøí »$ŸÀjEÀ¨ø„‚èIº8•d0*Ãÿé'Ä«ã"bÏÊ"C“(´ïruŸ”}½ÑÙë´ÓдnŽ£u¶ø=.VWæ¥ADEüÙ:J!6I5ü ž:ÚWz¢/.QwÛ=é!xqtËþÓ»ŽRŽ&.LVÔÒç};øÓ’‚^ßó“Ý5//̺ÈüÙ’Gí&‰.ÖÃTŽÐoÛ>ŒðG‡°ý¿hÐm3l ¹†0®™KÆÓ¶C€NÀ ?e1›uŽ¿¿±¯­™)rÒäiQÉéQÉi«`wu(’W>³¥¶µy—.UMŸ;©`ÉÚ‰¥@G÷Ëý”ƒ™_ó5Së=¥ìW@¦@ch2…3N}}ž¿ØvK^Üü”Šc‡x^ÈžV4êt~µÃo÷à SøÙ)\¨·G:›z<}-Òòõ*Uµ³qÝ ŒÄIñËì+½àEÆôÕ:&#ècù+¤ê ¾ìv*’âéV:y|þúîžžØØQ%n–Œ™Ó#ÇÒì¶P'L9ë¥H(I_™ƒˆ”okÙ¬¥h£©%‹,—QùGîŽX*<¬‰¼ðZO:¼‘ó³å7|[ 7â'NîèìjEõòëî ^d þýËêÄ,ý’u ã!š£Íýu}¶Ú>  ÈМŽ II_™ Ûª)OC³5X¶÷%µ)&=2dCTE™eÝ<…É P½ªóG:[û¦S å=»Q`“¼‚~Êþ>È\Õ„¦¬’Þ>À3€'ƒ`_ À× Å5ñ17°àÀê în<,¨È2¡äƒ¿þZTkxAH+œ2¥ðRAðþš>³SûŸ“|þÈ|Q¥5Ì[w'ˆð·?gsôÉ’nþ©ñˆ²] -4*ŸÎæ‰pQ "*>ùäS{³îžjÊ÷8uå§³§©Ôš·éfoœ” ü|­zLŸ€¾ÍN:z”bKá—W§Ÿ«¦mÕõ›ÝŠ••ô¬rŠ„9ëÎú(”ÿûá( *ÒPº'ePQœuã$•IÓWï:õNË¢/g«4—œÜfÄ\JþèUü Èœñ¸¶ôÅâ)‘œkyáÄÁ½N¾»~áïžÂk®çŒ%{ ß.9œú”¤Íoþ„²fÝã—ÊiÛ¶¿Ä äÔÞžy,¼5ü|XVöòqÊsAd"§æso+Î…r—£}°¢ÏãÿÕu#úB¯ "_ûè;M-½Ñ×O&ü¾œÀM¾gú¸V.²°~çZ{Q4GÇöŸÜ$Ù;£–<4žøGöÇl’½‚¬tÑ-û›¢ø² ¾zaät0p€·Õd9À”õ8ØÐŸ`V'™5#èùì?*…ùì‘/¦j}ןÓ)ø“I„% ”VWÕœ9]½85›1ÆRcÒ¦¤Lø‹/ñÆÖrôWL hÂR#³×Qî¬iC‘¤-¨Ô‚ò;¶Í9 1%\y‡E–Æ|ï›/ÕüÌë‘?ÿÕI¡—>ÿݧð3O|‰r\È7y06§ñDKwÍòýë”Àôê^GóÊ kg~•£!ÄÁ¤JÙ9US“‰‰% íã€d ௹j^ÿç­Px˜€Ä™ $ .hël«Ø»Ýe³B"“Ó WÞtQáè¯>²ÛÑ$ ³Ùmõ”rêèÀu_øÛjš²ÎI‘‡~ÄÍ´1ŸâÝ[øAbjf^ò̳L¸ûG”r·/x\L.—E‚‰›ˆ²ãÀìÍ€ €p PíP éµöémÿUɸb à#ÀFJ›c$)%\Q’ö[bŠoÿŒ½»ÃÚÖræðž-ÏüúB¸ŒÉÍd/º;D@†š((~x“•´©³Cku¢F°Ã­ÿìl¬ï?²)\  )ðI4ã’´îîvÇéßîϼ#?ˆ0jKOiõ†œÂ™#b"žÚáïqâ£Åb¼éœ‰ ³½Ížê&ëCÑ CAðúã볞±í«´m:Ñ55Íè/ÕPžpœ~ 8ÎõV#¼€›~ºh>ª@Î[õÆÖ€ÛÅk(å"Ã’·1 4eë‹°¶´å¯È ‹Õ\>²&äØO=@ ñ:!fŽ0‚†7}Ì9›å´/Ì ým;Ù¾'`›ÁëLTTJoygè§ÓÏý-èÅÈɱ¾ž^”•ð©5!°ì†oÔVí9uä-^P%¥Ž“^ùuMJnì¼ë ëšOWl;ÚtäL¢2™ã8ˆ-Jd²thÕÿôjQ•A,Fy:N„¡®~¯Ž 3E9È ?ÍžŽ„ÈoÑo!"VŸ~:Ì’“´ìƲr¹ÌÁì‰'  3eÝ]Ù-÷¹û“Ìš8Ó ¢îøÉÞ#Ǻd…-˜?cúÈ!õ÷ö¸­v»Ã*Cdù©ùà³Ù»b,Ë•,mo³û¸×^gNZbNZz%§¾±æ^YÚ`W§V'<øåÜóŸJÈJ =‹‡eìdX­RÈk ÍÌvÅêï\ô“·>ÕcoŠ KÖS^Bv `]¨Š¼  î!³Pf™:”2äš5äÈøäif€ÀL 0à°F€“ÀŽHëF cîÏš¢ã¢bÓ§Ï>µý=Éç ^€§—¹Ú$ôc˜!vÖKã‹éˆ3Ä ôÁ`‡n×?~W*F{M3¥Õ7hü²y]z¯ Ø}%8˜~k^ÔÌD”×€=&i”ÒS)zG!—hy4é–úÞ¶nA@§/ÔO)Òçu„Æ Wož»ÔòÅï7½K]ËÓ¨(Ë;‰àhöãö2xë›°êû²ÀѸ½†rT«JHKŽ)<ëÉ(yXÇa_Ò³Q²nŸë衆Y7懅¯¶ºx:éAõ•ôgr(ƒð9ÚAÍMü0·ÇÚ÷*BžŠÄ:Ž4I.· ×õ·U„œR£¦$Ï›ûÅ£»_Q¡%:=å‡QDDÿú噄 ýô¹ÆæÝõÎZ_ª8­­­¶‘/]qû݆Tãx Æ^F‹7h­¿G’µÂD ŠàhýNçkJ…1ÌœIC×)œ6ìÂã7ø›,’uÜ~__cå?õa1IËΟûà.Þ£#j§6Ö3}®»bw½U+òÑUJ¸¬6ßó/Véu|L´nÉ¢x‹ù<Æ àöù[Ú*,ú“Ѳ¸`q°óž®Ğ˦ƒßÕÖSùŠ"{(¯I›ÿäÄ~¾ÁÌÂ=¾ï·ù}JñÒ¸Ü)æ±ìžØÆ‘½!S9ºR þ: ¯;…ûT8Â…†kÉÜqú…Ûæ_àTŪˆC~kâ¤ãµÅo ð(€¤ˆž[ŠìZ»2>Ñm:Рqøe`Z€÷1#p£áŒà"™¶ld$2t´ÈG|ÄN"SDK¦8\Mìa1$ ^ýaW§PÇ©ñ¶oÄ$ÃdD$üå@&)§ ûÞ©áù1ÁãHå‰Ã éY±£¼^_82²—!kò·mïß+aµei¬²†¼÷à„ §€[S:ýžž™m­~smÚXSc ;ýrÓûÿÏšs´BÆê\µyd]VAK“—œ½èr¹N* V>»rjOzP}y_MQú˜¬RègÕá²< LI]5i8KyZÛQŸ’h«µ¶jây[mVcY¶ÿ¹rÀ?©`c åiÞ]…A¾ ÁBÈËOU{›#ãÌ5ïuJx?å¾¢|˜ñþ–öUoXúàUZ>wMI­ìØ×ܳ"#n‚¡sKO9•qD]Tü.Cvñ|š=Kro„ !M[\ŽF1%1ã–±îߨËN ê¼†j¦‹ÕÆ.?ÜÔÏS:39 Ã?=S*4Ì(~ñó“ÇZÎn¯ïLSû= ±è#¯dÉîèLè8hoÙ „#”ʹSž;áÒƒòÜÓ•j Ç|à‘œþRƒ#‘‘ðDyÒKtAÜ74#ä¡‚2Â@ Ž€Ù97·[«Ï´ÈO] j‘Qªˆq­ @ÈßA šx@’COG¯bz­]Ÿ‚†€÷ ð9` ð@ © E€ºÍn&¡@T cNÐ’à†zµŠ["BÞýM¯ßÃD5ý—gèQ^_r©à|ÿÌþTL $Ïútã_Ôâ*ðV‚ÿ]TÝH.Lá /×{=2!pÛ=éj 7ª=ãC·}ò¨ŠøèGÉEãýŠo·üî2aÝð¹D›R«ÛA†8Î9læP€€Û€"€~èó_Ã×@Ƨ¸…Ø—x8Øpp'2 $ ÈùÑrýµ¯•)tuȨ€9K0§ jËÕÍÆ?ètùž³þ¸'àÅå_°Äfª‘\îDDO§³äéƒ9÷M !Œ†Ê2¦(…ÅK.Á¸Í¾§Á׬ ’«Íœ¢ÍÏ­S|âMè(ƒ¯ì„`¨anž Ws_¿!­±Ûóê¾ö=¶/­N ^oÞUß_߉óRÃRÌ‚Vl<›‡ß^uNMC¹§Cîj#”Š9=}¶²òÊ™3§_m„1œ ›7úD…Ê™P@¦ÍÜ1R‚„ŸWG\´º¹âóû­²:*’†Ì üp" ôEÄ»þôÃc^m·m]¶ö±¦~¤­}¯‚ œµÓ×ÚC×~}zdv$Œf•KLȪ¬:RV¾ÊäùŸü•8ÐÛðyµÆ0]˜iDEKpVí¦ˆæøQ¿ËÙ§‘iÅP M[‚ƒPaÜÜËYGƒR¯¥†©}NÉ70 [XæˆUQ%3Z¦¶íh©¨´iµü²¥‰™é¦±*x!bKoË¡ª#a›Èëu*˕̽·ú w_9šë" Dmä¥:äBÝcÞàrJÇõ4Ö9ý^eͭɉ)úó_ÁHpFA‚ ô(!¹"ŒE„eüm{åÍvì3‘ˆÐHæçÝþêîÇwž~qIÁýE¢yŸ¿¯Nv¥sç`¦Ðùm'0  䉚v R\ŸJÅØ‹Ö^/ çjÀ õ<ôîò¶ ð2€9Xÿ°!`©ˆ9Sˆ™®þxFÞxÊ·ÿ ;/’Œ"ÍÌÃ.P½püãä¯÷e¬›lž4p ¢ÈÎ~›%:–Œ‘d0ÜF¶¿Ø³AE„|]î,C¡ŠŽŒ­Ø ]•póS2 fpÌ)Qš{Æ—¶¹ó̉·;Ù¬’Œ*ˆŸuÖ}!uÔì†÷~·üæœþ™Ë!w¶È]mÝUå5añ…EÓ ÃÇÀBxÒœQ0¶ÎK8ÍŸ>¨qù±ÛšÁ‰)*ÆÙÐÆEi41ª ÜüiƼ»ïyùÝW7mEFn1"Nd^Sµ»ìŽ[šl4 ÃoÞT*íšUîÜõšF£ÏHŸ:áaˆ½Ò"Oˆ(KŸÛðûÔzƒ.ÌÄþ#@†¿¯©8ÒpV° HA1K’³®ìŽ×äNl,ÆþÀ>”D!=©¯×íi¬à×Kn%)œOµ**mÿÚÑ7^Ÿšžv‘%VÝ^}¬æØšk+{Þæ(…KŒÓ Þìì9eoùHòÚ€@XüüðÔU#>ýDI­ï¶´·ºyžfO2Í]3Ò>â@¨TØn DJò)]!Žg$„@Bía&.bøKW=²ýÔ -½åÉQSâ9M»âÍàÏ)U p€h€L2 (\k×@ƧIø8oa µï8GMpKG›¨€Ëg"V@`PôM’^¤6„sÛt|.¶á‰µžF§Š+¿Bx1¨ pJž>˜±nJÌœÄÐñ·äÀ­Þ˜˜‘5ÖHìŠãë6≣îŒ=gbùûÐvÖüøíŨ½Åjùþõ¶.OÏÕX¾þ‹å£úZòç¡81Y°P_ IDAT-GLËq{}5oü»hnN˜Ù|USn«(‘î DÇQøáþ‡µç#WDܰ«ù¬úâægOg7åymìx#g/¼w÷–¿ÔVKËžÛZë:üAç_MTôÂ{Ï Z­±¦öDzZL´ëqA´y[}Çui±WHáþ®NÊq‘ I—êl»·Ö`MÉXAVÈ’»®ìoZ}Brö]£î÷~ð £æl’æ«~µŸêÎë ¢¦­¯éßt¢†çix¸úþ»sƳÄvœÚaÒ™vžÞÑÒß@ mh~õæ97ËŠºÁ'yxnùüJ÷„2Å×røIN4P^ƒD1ÿ‡ÂUàÞ ãõÖ™Ìâäˬâè‘ðÂÊp·Œõ  ‰¥äV‘è/C"€FV•Ååg<“>F« ;]ÿaRd„‘ „ÚKk Çýµ½öÈøÔ4BHÕëÎQS¿B8Õhaâ rÖF•nÁ¥˜4¤ÜëØ¬H)€ʃÀ]Õ0ªÁ”V?ë&„pYÿxô„qevê7ûsî/´LŠ ]ìh¬çy!wúL°5ƒ%ù,J,eÙñ Md™yA–&m´“"ºÎÀÚ'.„0Í?JˆŠ¿ÿ'×ÀoÞ©êíúÇnNÏq].×éÓeÓ¢øÒC$~ýÕ£ÿËÏz\NDĨhzçgFb‹áC%„Ô+þY¼n<Ý2@ 3\RŒñ¢UÀ{oü¨ìp«×ZxÇ×3Çù`ñ¼›öî냭/¬Yõ¹‰]k "OéR¸¯½U£7èÍ–qP‡?»6´bë7è7 ¡âÆ‘ñÅ1³GÍeÙ 4t±.-ãR[ËPî’h›á ”ìê<ä•16F»î–ŒñWß~ôúG×ï°vò”Bµ*í¶“Û†‹‘æ«‹õn?¹Caì‘Bx{óö`Ö¹°„©>ôÎðÎM:Ó¢üEãTÄ^àýó/U‚ÈQJÖÝ—º8è×ÙÍðµÀ æ(àÈrá²Ëbþ¦ÒšXu Í>ày“Öí*}Éãw$©M-Šç°ähÁðà!ùy-õÈøth/ê7»©þ&û0g½žI£€Uw.²bÄÜ\?à!Àv€A±Y2Ì;ibgôÁŸ­.›¢È¸æ+áa‘ü„äïBÄ€Ýwú÷r>üu½m¦ˆHÜû 9½2>ŠFrØyò´»BA¶>j­‰3Ž{ä%è(‡›~y!„áîqµlôÛ}²Gšr‘¨t`üæMé»Êû~·©!Ú¤º{A<" d~×È)ôõYƒµUÕ¢èÞñv áŒ˜–3á|årâ¿þæ–%(^*æLæuzzáØà ~›X,.ú \-mªp³`Ð_Ò†œ{´å ÛßûIÁ¼€Ž‹o AÄóo9yê£wü;Xâä²lY_{»Ñ¡Òj/¢xsYHøœ»CS~ÞlÀ†o“oû½}]­Ûþþ´¼E•yÄ×9!ç€sQ¿`«ÏtSQ–)‘Ï Ð’]¹³ÙïU$‰-^Ÿ™iÒjøKñ„Y3`_]GŹi7 ¸†?{ëz;j®›¶TVòª°¦C?C&ÙBRæ>N¨C1Ü}޾ãµÇCÏöô¾uà­³ªVJ šA¾R˜²¼pù¨â %:¨À¨(鯮°«4üê›’LÕðL¸WfÇdôs*Ð"^±`¤À–6é£AöþåèÓ“ü¨ƒ×I²›C¼P5€j¶¸†0®ŒO4¶€žÓ¾Ê!@(ÄLW™3ED$ÚK8`]Òæm²Tîv`:€i‚–JpR%Û]•{ÝŠ„Åw™R 4b 6g“½ì/‡²ï9‹0‚=Ÿ9ySròaÁ!w9øÝXþ*ùó·ÛÜ“jL¾ë3³Ó!ë»Úé·¡û Üð$::Âh?Ôäêtzmn*pq³“"rFjnOްè…•½¿Þ\·’Ì*ñÌnµ0iØÛÁ?HŸžžÞ²Ê3Ó'çЦ3îæz>&ž3GL,SU”H•¥r[³²âUîþ¢I&‚Ou2©€×ûL~›8íå¤ #„t7Šæ|5urÏ{¯?¾fýèxp¤¥Mik¯il*OM™ü±-RÖí2J„"*²lël7XÂ/Š0ÎÑ:ØÐvŽ·bëwèw½®¶–š78N•SøÍ¡› ~fó‚—²€hkHu¸E"j4ÑMJš[•ÞÝf³žnè÷¯Z‘<)ÇrÅ<3¸¯‡éÎÉá¡u¨´*=Ø·öµíQDf߆L6ÆŽ,OhÔÓbÎuËŠÜÒÛr–g$YSYh?ß°CH§ƒ€9 9²"fªn$‘ZYj;¼·+"Js×g3‡+Wp‡ÌÊdp½UH7QG ‰®PŽ% 0äÑ٠؀8°àqç_V÷UÞ`É:¯øÂ†T}װŵöI®¥y§‡r„¥ð ó40d†¼zI ‡·€\àÞö°G€»ò…Ji?ãßýR?åIbžºøNÓN]m­;êÒnÉ /YœrÜ`Q+ˆ™Nš}íµßÝì|-GWšÁÇ—>&‚Èôàyz$Œ¨Üåpã/FùIòìM¶¶M”#š}¼ԈÜè!ÁwöÖÎJ  6ã”caGÜ=ÏK-N}ÿ‚ŸóV½­¿£½¬¤,'`ãwI”ãã’„¤tÎ4a˜!~Ê¥(Aç-‡#Œ ?õOX#š.¶K2Ùíæ4jÊ]Ãt·zýÒ¼¹‰)“ò\ë;ÿþÎÚ;~*ˆãÂ+aƈE ×8ø®F­‰I™r¥˜ôe=ö6‡'Á8:PÀ~糖)²µ£Mo2kôãòØ ô·B8N3ŽgñY=è¿I¿ÙPù‚pE', 3$É®V7ºûX_¯¿AkmQ™€Æp± p|X¾¢É´Ó¨êSeG+õ¢Ñ(~ã«Ó®^ÙDD"ê Õg«è¨ø7ªš•½~œ‰òxŽŽ9 7ñl¶ŒƒU9Ê…x¯º½ZQ”ÂŒBãis£óàî®›ïL –)/ûAKHGòF&0= !ÄB#û”NÚµÄÔ°€È©ð–½–¾ø Û_§åÈ5xq­}"AFp}Ê^Öü‘×ï`”…c 3oЇ„ùÙ7ˆÄUâ±ÅdxåûHW>>áhIñË;švó¤ÈéñîÖ¿wþ[ED#øòË‚·?Ç^&ì‡5?Åê¡ %ïBG)¬þá ‰QÉhÝßèl T´À‘ÿ œ1~qá‘ÙEï)µùªüW>ª £8-|ðœ RÂSr©£½2&nS'äÌ›N PÆœ;ÿçW}”}Àæ¹  "Ê~ÜütŸ,!å`Ý£¯ÒŒJþpP (QE ¾ío/SB²‡ãî –=L~ ‚vü€Q…Ç7þ<­t¤ %ÿ<ʉ<“@ ωL˜› @pË$˜þA‘_'ꔬù>0  ž%îí{ xî™jÁKO! :e¬²ºæ¯¿ST©wiæó‹ÊwÞðvµ3EA­–<ðEí¥²å«~›†P‘\ÜBçëé%O.ËYR–˜×%/¸).4òY î)9ún[sÉÞm[°âáñLvé⻲·¿<%on||æÕ^8m‡ê9ž •« n´}ímFK¤ZwÙU$íClìFw4Ñ Èý#á yKÈ’T‡®¶éoÔÕ D%õ±€¬ò{¢0`ÅÂŒÀPõÞ¡v¼uà7j*>1\óð篺©ˆÉ¾¶“`Š$ˆb=¹á3³®ஞŒnËÛôfc4§½ó³™1ÄÅ^ØPw¼Üªk<9ÛºººOœª.))6ÓH–¦z½ì¨VU©-_%Í“dåKˆÕN"ÄÓÉÍ´A?•$A¾ñði½¡üNQËc„ ëïø·7žûѪõß¶Úâ¦2~‹ÅyÕŠÛ?ÜùÊ{›Ÿ\»æ‹CÂ.¢¯múÁѺ¹9‰×–ä\´øÔ@CžžjoÛùyzJD*GÅöÒòþ¬UŽ{ÊÞÖýHœÍÜ3ã]Ë 'ŒBc^|÷Î7Õ9lÊ]k3æÇ]:o-h¬ßõ#’).&s½-q óË!¦ïë>z¨'3ÛzÍŠäÀVÎ÷ªü Î8]#‘…gÉð@{WW0Œ¸Ýe»¢ [¤B4ÅÇ—+1=cô/Âj¨ÃÓ €Ʀ·ÞQ€É¼'Ö`–l™ó9uÆÉŽ,]$Ü;‘b¦"€g—‚ƒý¤7\ÞxŠYÎO:•©ÌÈå4j0-êÕɧ#ÎŽ{‚Ñ¢Oû»QÉÝêWwv¢o! CîqE1ÆeØŸzèÒ:Já>&*Ä’,¦®0Œ›DëÒ8øM ÛÀ0Yâ¡`ÑFuëcB‘8C¹öË®Kê¬JÙÿ£-¦kêꜳGÒ©ö<ÓõªI0º"æïçÿlÇ ¯·aLôà€dÞþÎQÉ$åœ fU,rL2OYL80ÿžÓÛYÖß x¸Jïj¢nœK‰iœ1ãü£ÍéC.ªŽ9`Þ¼b‡Ã1]°„îNöò3!g ™=W\°T¾à®8«c‘ÒäÁ¨LUõpXvØ/ìAAŸFfÎsŽ;Å£%)uÖÖ7~yãÝÿ!OÁ”b³ÅÜ|ãƒnzæå?Í^ºéˆG¨ PÎyNrŒÛnžâØÜ&CX;G õþ J$ÓõÞ¶Ö©{zF-»øžØˆgU§ÃÚuüï'Ìì6—ü›ƒ’I¹䩦±öÿ¯Ÿ(§YPè¾ïŽ#Lu:Ôó¢eq´5Øãí88вËJ¦Øe¶¤%FGöe>eG=åÇ›>ž.I”®.¾éb–Þ`giÓv] r¦öÙãlrü²_»üƒòÂ_jÕ[ÿŘ?ýûóÓˆ”@jµ3{*s¦•z¸@ +–ûVßn6˜L¥P^C¼¦p¸‹SÃPðØ8ÆÚÛ—á¶í‘CL_10[‹xá€Üt Þ@o âÛ²ý‘Š]Ì+<Ñ×›et®.¹î")ð|m¿Æ9€5)V—"·‹Þ凜ó;2O‡Í56ò]wHÛÞîFûäÙš¾áÉ…I¤#@lŽÓkW8ç¯6 œ­¸tÆïÌr|Š-QFiú0H|mšæYkMT"F—ði<[’‡I6Á‰ çüß&M»£§MÃÙû[>íÛ±]ŠK‘³ 4ªƒ­ ,ÈB~5äø\ÕmöÕ.Ñ®Ç V홹Ô›€7ï¬!”öÕtƒ ‚a3n.”íF^¹‡ˆ"«=  0¯ç´¹C׊æSÅ” `LŒOžŸ8QF)íééÚlFcAA¾Ë5I-’®Þ&TŒ]¾ö¼¨ôçßú½ýìî/™RÒ…‹ßî„8àú*iJ†ÙPw/8M¦ ›ôª#ýŽXER&1’qÎóf_[S¹sîÂ[Ï6½¹§2Žtz|:cU¿÷ºbE✠G úúFw úN”ížd¨!ç¹YPÂe¢Ú¹Åéš"¨áÍ;ÛþËàëÍâ.-ùC·ÝhÏN6+ç2bsÎ";÷´74$çØ•Ê‚«"Ž[¾ü@åFÅ,PáÂ$UOÍë¾j=< ]qywu°þ~Ï‘eY÷^~aõÊ®7mÓ²Zâ áÊWÔÐ,lŒÌ·ÜÊÚEaF\F|ÆrJ/l'ZÞ^ƺԯ©]Ç ©÷öeÚlÔÚÑ9_–’6úçEò²#ê>56ÕJ -œÅ¥.PW·­«»2;1§˜“ƒ-½,ènyèåH‹M1L(Ö-X7ÅAîì ÔF":¿)Íš`’𿵙ÙÑŽ¨©ù‹¹§whM¾HÔ¦%Q¼Ñ80bÌØÓØÛˆNå8 œ]r³Ð%#Lï­×Zw‰H‰¸òäøbå“0rÁÍ Rò,Ø} –sàŒ x»1é­š!ê°ïëFýÞÓZ~䞸HœBѽ¿ÍcïÍú•)¿÷¸¿à<[ŠË7å9焌tNºÃÛ*[uE÷tQd:ËT$AuXA ®‹àŒRªÔb“2†ë¨éºRP<õÅÐÒÒJ)ijj ƒ„A1¤ef꺞“hkÔûÚ|}mDºwm¢¢4þ6‹PÎôX¬"³Þùhk$7_\s“’œF§…ÁJµ€Îy0¹gLE“‰Š’€«½Áïí /Y—0‰“?gõ ·ëíºnãAô Z{6¬&„P‚»¹87iåœÌ1º‡b4ZŒÆ±&™ô´üÉÅ}cgÔH6F™Búê›Xœl “!Œîë‰4Vxß÷yög 6=îËŽˆ«»c÷íáäíÄRçXàÎwfË+<ïnn2›DÉmˆË¶ÏN´Xd㦜j:.âÕÅ7ž¯Ò ûÚ"þöîS/*™Ý³¬¹ ެÖþò¦žcK3ï•Ó¥V#>\s¤³ûÔ©#]9VÃÕ…¡Ù­5Ëì™ÉùÉ0$PsÕÈs]è¡s5~ 8A4Mµ.©óôn‹„€q>'.þXWç˜TZ/V–É…:w“Úc#Cž:Y§W44,ÎY sgLÚœP/h…Þ.]½ý=­háx}%Hu§ä§å(̘-F¹jyÂZÍ@¤¼/ÄB§á³w8réZšEa§¯Í<BÜP[ªHÈÜãÄì÷i„dBÝBÖ:3.o¦ÎK×J@ÂÀ3`€Jç_õg žð¶G‹(áÀ3o2…al**p EO-FÚü¡ÏøƒjdÐ3pìý—„‡Ü‡¤j¥OŠãowß0¬ót}pÈÖAÁ·íHXhÝßg7)ŠQ2(4}Ž €®ù‰(Âä ˜ÀuÍ´lÍÅÇçó766vu÷Š¢pI‹(zdéÊͯ>®7@)%£¶_Ƥ Œç…Î"‘¤õ÷L‘û™Ž_üû ÍFâé§-‘ÎùNÕGEû¶Åz(Ì9¿`—ÏS‡û9Cöì©þ<öªÆ†ŠîÎÆ§w¶É"¥„¤ÄÚUMÿüuÅ {&m+Òãß®nýÁ¶#?»ötÿšðôp‘ÐçÆÜùyàdð Ö{<ä¯ ý©Æ¢eé?¨<üßÙ–7÷Zß7©º1¹`4Môõ…ÿòt¥AKæÇ™Ò,F̈3¥ñ“¬B:ª’c3¦(1£·Eü]§^Pƒ=„Pƒ#;iÎW£ßvÔ4ô^™s?!“ätgF1×ÿüöïŠÝ²L z³9ÏbÉõÏ̲[J¾`磤ƅL)‡‡  Ø H ÞÖ–˜H8D§´°È²Ûdr*†â„¤(YòÝqc:Ø\_sF‘<ŽãÝBæÑb@iG[ï Ðˆ}¶ì°DewZ¬ìHŒéæ NHF¢Ê¹€ÇꎶIoÈ{ âC{Žoõi\×µ¯ßøÍ £/7xͲbU”4‹rm’ù³¡2>vãG¢IJœÐt©)|©ŽK… É»íãÉÔy çd `ž»Bû°Æ IDATÐÑxbDz:fôß(y…dZÀkþ£õÚHÝ#ÆÁÀþÜñ,%2Õÿ³CTÄ;fÜCç€Ç[\ÓÎb ¨Ìxp®‘¹«ÜZXµ\¿qz7a55µˆ wQ’ö¿‘›MŸÀ¦7ˆdˆ¾%·Ð9gñÔô¤<óêsÁŽVÝj%ßüËôîxêXXîU\S¡€h2ZÒS/`C%QüÅW»'¥FÔˆ½¯¢©´º æ5>ñ GÆê… –ÎJ¿Ô{¥Ó;N¦k} $–Úk48Ïùj~¬«úB ­ Ùw%> êØÃ‚`È™ýèËû…Р:úW„_?rL‘© ÒÛ>ŸWßå¹)%ÝW±:;kÁm„º]?¤‚“¹Þ–´xdúÊÛ¶„º–eaªrÎÿúún÷ß¶âÂHÊ8cŒýþÍG2-Ô)ca‚­§Á—ªž°Ý”¶€é:y@‰ŠçóÙÑçh:ð,A]e¡Ô@ÈLNâ ˆñfËâäÔ)®¸5™cL²vÒÐõâPEÖ-õ5)«·¿®£·"'q~ySk+•¬Tâ\aâ]ùňtìËϘS0ªŸõǃá`·þaÿ>Pp¿'†y:À—¬ýŠQ12Î)¹R&þÓÝ.ÕqIÁ=V|F™+ø“Ðï•AÆ„àÃG@(@àë û ¡Ð" qã@ €És-%Bȳ]¯i\ ²] ‹m bZL¶ã…‹tþCþpˆ«@Ó£é(¨Ýe˜»i]oóÞÎøu1¸aÅÕÓ>)î;,ØÄ)%á`rJ2(ÒRõp€{Ùõ²+œKVÇô"hÎ9cxá¯ÁîNV4_ºz2½/µ_õmWÿÞ?•Ÿ“W›ø·›ÿÖ¤k¼`k\w„èÅÖïGëû|Ap茩šþõ›m ï°˜ê–κýr"øhÝvι3>Q$ÖÝ>Áõ#RÃ6ôŸ<<«0ßøÅÙB ÓÕÚò?%¤­±9óFÐ3ˆ0¬BÈS;90±Z¤»7æÔ „Oµû–e9$áœá‘Ñë¾à@AÆÜ‰Ù`(¨»òoZØ«:ÁyRÑ×%ƒktþÐÚîý]¾ºU“yzBZ:<Ë'Hµ~îì8º£©§%àëͱ’";OK‡+ë\½{õ¢„„yV3@¤ãm=9çÇMâ>vl;êªÂ9ëWU (aš~g^ʘI’èE÷.×oV_¬Ñ˲é,×eæ¶=ï´ˆ×ÍÈßáëHMI‚ñõªJRòÚ© v‹,¦r®[$yizz@ŸÑÞÓБÄÂkÝ!#Âí}b‡Gphïc„  q·-&Z;>=>#66¦Ä+jû ȸ(±ûiiiÀGÀ>ð• žF´*¢n7F²E%'Ó°ð>0mèsÚ¼3¬²i|½²µW˜…BÍFIÊ PÜg „äõ©rrׯë.I’buoHLJbÀ!%§é§üù#aohÆ-…uõG™®OפD;ï=¸ƒŠR\ÅÑn6;cœs—2Ρë–ì‚KGö裼ü‰GŒñ¿ÿ%šýpz9ÍÏ1]ú-”aޞȬÅ.*œ‹ôþÁ*Iœjî «8×_»p%$ÁeuZœó ÷üäÍç|òø¶¼Ù×\ž…ð~A”L6›(I8‡¾‹¾È~vÄÔ´«‡w\T²‚/^„ÅþÆêÚWâSWÛœyå½ê¬6e.°íƒ–²òÞpX¿õæ¬9Ž]µ}ãK3ÑZçBœó-‡^ËNš™—=1ÛôÔ¼æë:Â9ãz8aÖ—ÌîÂ17ìª}RÕCK2?7°¢jº45œèýƒÁ='÷—Õ—g˜ô ™ÍœU éZòÌ«÷î({Ñkìcdc½„ÙçôY&„DÞd4Œ®êýêp{+!$¢©­>_xç¸K’oMHŠáHs8£ÃPDqZÄ;ç<¦Õ°²al÷:Í/KR²lV@ï™5'z±¾¿/ŠlŽt¶‡uÍ(Ðã½úmõˆQä¢s‚QlådVl|^¢'ïöt0½¯²²é$¥€J_ÏɺÃÑÀ4—-F%"(D9#ò¢hÖ\iÿ@Æ'¶^–Z{@8çRRÚ¹îcŸàíåC½íHúPؽ ,ƒPF€ëH_8|8ÂQ´a Ç™ËõŒ'ž ÖŠTz¿ïœ ˜!窶pgó á™hZ4X²ûÄsuÖ¼”’oÎ")ù‚ãO4ÇY’¥Y¬¨ŸN[ê:w¼A‹+(–^gpI WÑž«NôMäßh^²&gáriÙÕʧÝ)L ”p­zUs¥äµ]å%„á#ðœäY’bl³2âÏôsÞzxÏKqI3\îÔKmÁÐ"ÿ@¿ ÉÎø!Uíx»@ 1@îáÝÕZ­Ò²»´Ôåä‚ êkª~!6i¹Ã=gÌýŠDë[Âï¾^j0Šy¹ŽµkÒ»#T{’ìÊŒ8óÄgš®n>øjFBnvòDÐ6ØwªýÄcT4ZãçÅdÝH¨xFytÎ×?ª~"É>3ÃU"‹æIOñþíá×ýÈuKgMJ¹ª–*IŸÝþ|’EžioÌŠMŒI´¹r Kõ­ögj\›žu£ «Î997œ"„P‘茵 úˆ”no¬“¨@™ðzQ´Øíg×'¥­œ>Ãá¸p’Ø4õóŠ%Ö¹Féfan gÀ¯LÇЉZºÝÑÔßmñÅXô {$ͨË©òô)€O÷𺠓RpSòµ3‡BgO4Vô÷5'(PÛ^ ‡$ ›Ô4ÊÆŒíGGr© ͘5;#>€'r,ÎKÍ££“ ]iW@ÆÅ4ô„HÒà»/I†A}øØþÓ\ƘéÚ[FÊ1JˆbÔÂxç§d@†x’JĘÀ¯‚°º4Ÿ]·˜N€'Æ\-7¸Ÿ^ëxÓ« °ÞÝfeJ„è_ - CףƢ)5ßž @ë!xS®É")çÌ Ý_ßÛ°­F2ËÙëò§™ŒáPó+¢²AqÇ'­¿7ú. ›Wøê IÄiŽO4ÿ¸T2(‡[4•Ö«ýæ?^:L—.MâÂèç@ -Ýýýj¯¤Ðâ–XÖp$¸¬à<¤ê_½aÁT}ZÖ¼ò#ï•ywÅu—*‘ÃÐa„·²äNJÅh@‘â¬ò=¬»Z«æ<Ò¥Ö°˜¬¿ÇƒÑ<]‡EÉâN\:¦g¿¾Gð°Á„´˜/|n&€Ê__@µÈ3âÌ“©F¾åÐkÉîôY™óÆ76„ú8S[JK©,›“RçwÜè6EvÕüÕeNÍ‹_9‚øƒ’úòõÐ< U6Un;ºÍ"Ë:ç7f¹ Š57}¶®GäØüá c‹GéWVåó¯ŠÀ $BDJ_ª/ÏïI Sµ£Ý5#ś̜—qžž=CJÀEð›@ù¥W©4»B?X­Ÿ˜/\…¼+ ïÝò5ó9æœ?þ_Gwï±QÊ™îœUâÜ%üŸbýŸï|ú·å÷ýý¬‹çqItT ÆéUÛ„ß¼²Û ‰tÆ ö«F“”Wâ¸iq~’Û6Ú€1õ‰uøÆs?ÚüúCknýÞ¥1ao[3¥Ôlµc²Ò²­zkƒ^¿DZ¼¥æ‹H².ˆ šª_ úšóŠ¿;&·Çï=A¡·[øç¿s2fØ[߯êleŽkR"pÎËŽˆ‚87wɸàêwÿ„ ¯ëŒ¥?9‡‘’—µmuÅY³f%]7²Bzl€¤¸s¦0zä‡hŒ/rKóg, ”®+‰ËÀ;Z[žöÊŒ|¾8‹~ÇJpVÊ“ˆ®¿[[E! Ó£ÏU$ØâI Àã„‹@xˆë!êôÅÏ?êíÂÚL¡¤Z?1Út]=õ*úBÇ<¡¨çòçsœ8Ówä¶I)#óE¯”ç+NÈ‚ Pún]uôòˆOÉh÷UÎ9ˆ¸pɗϘݨåb¸·HסÑálGjJYøŠ!ã È8ÏÜ·”rUeþÁ¨ZŽz šV®ãà\pœFЄRιeÝ£{нÁ@N¾‡¶ Ñïa‘¦%7Ö;✭ÇF8Xpº£§Òw»ÁO3@Fvvz¿gŒTT¸(AxÊX*q¡› ê\g:³qÃu‘Ü”%·ˆœ0YRŒæÑÃóv•Š †cfÅKYvji;Ô<çK $ãéÜ´‘P@ÆÌ TÉ;^ww ‚Í­Š+nL½GÎù?ݹ@gŸïÀÉæê–ž‡_Û Æfð¹kçžKaŒ¹ø·ÇÑf”¢³ÝÛðkà–ø³=F¶Ú”Û?oˆO¸Œ>¯z1 €s^_q¢tçöÛ¿þ¨“‹,Ïï8&RÑôÞÀ°™ŒÂ*çü kJç½Íá²þ¾Û7dS‘\Ø££·/ÚX~d“®«”ŠÓnÌðötLf“Õ>©(Þ«î‰ðð"Rì­yfAâ7]–ÓuøÂÁÎøÔ3Txu÷½-MºÎî¸k–P¶Wh‚Î4z#¿*×9•JÅeu›ºê®_¸qt·Ã®Ï„úk™êO[ô¦‡Kâ¹:,kÛÜí«_”y·YvL‘ìm½„’/oX~ö¼?³õiBhGw–™$¥&»âeQ]…ˆlðÖ+ }Ô~=K²¬ú}&†ý±z‚òî®èzþ¨a@çüT¤ª[ó<4çËA=Â9wMA78±‰p ƒG€ PÓÉåÒš|øða‚•ø^Ë 7¢‡tîéòxKŒAœÊäŽ|Í9¿»`vô¢'$ØR_}pó€·Í75“Äš†B^W¤¦uB-_G@ι!aÑè§,I\‚+Ç%W@ÆylµËi-õÑPj±É3f’Òˆ¬Œ» ÎÆÑÑ“Žª®†}Ð"p¥#ïF$Ïž ÌyÚX3r’:q(Š(0¨×@øpÞ"¹  "(‘>ðî’ ”)c&ôªôÛrL™fbÃÏð3<{Ëê ø;ýÇjrVõáèÛ{â€ÖfÝS,ÄÑ=0¦0L9åó©y °úø`õ ¦ªî%׉&‹1)}ÜÈõ‘MX¼ÓRœ”—Bòvh(­lééáòS%§ˆóóR¤ÄÚ’\Žýé„@gȮ푑꜃0¥Á®›9tÛ}ñIæ¹ ÄÑcÛ¹©¥¯'ô?›1­uÕ‡>ؼâ¦ç’*ίó}MŒs‘Ò׋¾›IY^˜@ÓÙ‚™)£)¬yÀÁuÆéÅI¹´¬âÒ}/½ñ·ÞvßCÓ¾¸“I1™ÁÆù.¢·™h|ÀØ­îŠ'ñ±Ìè¯Á’p•b™9l{ Õ”=êŠ-q¸gGçkÿÁβŠÞ¾¾ðšÕis czw?E¨Ö—´¬®Î3#Δd7L;V5Ÿh鮿nþa®âœëª¯iÿÏÄdÝ`O^>A”6ØÚ_á 4_ûUr>¾;Wd)5á´­eç‰$QúðøN‡AJ6ËWd$Æ$AvB4 –ä¨T)=Ò}èŠÎ‹)øVlyaO™¯“ûPÙÛ=¤M£;Æ&¥0ÎJ³Î'|¥ùÔmE2:p ^Ãy0D-Ñôä²ëÊ šwJ?ºE}é:éŒë¨h]­ÒªT>ÓaȱÉnƒxØ}ôÍ.ãP9±;ò‡¼MCšÖ<àš÷·6G±Å«§*¢ßÊ‚ítHµÚíÃWÙÓ¸‚®€ŒIÕ!‡|›_¥&³—d,Yv»Ò¨ ð4áÇ¡X›üëa§9#wäÑÖ´Ó^àð4ðµQUˆšÂ­'ü'kC¢[ä<œg(Žpõ–˜5/y⤋íÐ~ 8 ’yœJœñ#ÚëÈŽIYš!™å1½QA°:œT˜’'|°£™ŠRÛ»ÏQI¢’bLÎŒ[±~‚<­Ñ¯j5JñÒÓ!Q%ât ‘Æ‹D8Òq¼¿YØýa-]çºÎe…è\Ÿëš­s报 NBH$Âo¾SÐ×íöáã11†ïýwÑÙBÁÓ:øaÇêÛ.<3Dô‡5eG­WbZæÙ7ü)ÔÍ€Ûç† ±ÖZ:<D„16+#^gL×Y´ÙÜE!_ã†s~ëç~öþkÿUVúnaɺé]b`SÑa7 Ø‚³˜Bì9Hí­ý“)~¹l˹gÐ[Kˆàˆ-‰Îþ¯>b4ˆ‰‰æk®NÉH³ ¢ÜÚÓß×ãψ1&Ú”©¬…†Žª–îúµ‹îssx°©¥ôÿÙÄͼ{‚qôdD1×%ZÖ°oéᎶ°¦Ð;ÕÛ ²§›ƒË‚¸895ÁlÁ•vdœÃ>z—…Ôb5_só…mm9ÓðÎO!aÃuß;o^rù:BÞÿ ]lØî=@$‚HD35>06åù*•–íµŠÓ°ð'מmnÙ]ß{ªÛ’hËZ“7îoeÅ™_8Aç,æà¾šòþû‰ 1¦ÔçÜ¥'Ý ‡¸b ¿øÉ ÙJ8cÈòk”ùg0UWGñÛ¯„((€ÎPwÓ`Ë‚%2€`¸LG•^ ^ýÈ~UAÖ³œÔt|ë{³Ï²3qBÈæWƒP´8îbxæ­' ·ãÇW« ä,#p0¢I¤¿yi—(PB†ü'$Q°› œã+îšSWZ)9MåÏ>Tuß¿æ]¼ØµØÜµ'w–¬»d c¯èDoÔN†lzzk|PÐWó”9q•ÁyÚìçõ”w·~8£èÛሾu{s婾—á/ž i¬¶;­È0OeØÑ{N57ÇÖzm)}X ÷9SW¹²nÀ„„½õÏ¥Çg¹ž/­^ÛZºziþÆ5%¼ñ0cL¢$ÃéüÜ‚%:c Ðd·hI†mœáûo7{R²"†­DŠ"‚¾!¯à\Ü2òïþM BPÎ} ºÈ ×:?aÖýaÞm{!#ÌØ*&þØ8™/7gÙäË©F>ÏKHómEOW}€½-M:ç3cÜy1né| ܨ,‚KÇ&RéC>ÓO+Èàœó` xà*3çJé9&[{êqô¨!è*núÿ†RpžW7#’ë‰ÎÐú-ø< ~ü]”PS9†œ¸5o©±¤Ú϶”ÿ­T kÖd[Öõ3/€aOW÷®w¹ᜃ30–rÛ—8g‚l˜ õv³7^†ÃàœSßø's8 ƒaœ›ã„ûÿnd7“  ‡"JðèÛã²"¼öJÕ¯V-ŽUŒÂã›EMÈ÷®.6ÈC§?OüâÄ€'ü?Ÿ‘zT¥€®M$³†3<ù~©¦ë FÔèó¢G!N«éŽ«fD*œé:s¾%2-ËaÙµ_9²ïÕw^úîø·é]kÛz%þŸe³Æðü!wL¦„f§°²Ô[4'^#[ÒGÓ¡»åI±xì/œóŒtÛMë3Fnð…µã­> Èp§H7BÈÖC¯9,1‹ VäŠÐ#ƒíÇÿ vg-ÿ¡“T˜Û_ÿ‚ÎÕÜØ%IŽ‚©OVôYO½¾÷£ãÍ+¶ýî}*c÷ÌÉ·›¬¢ ªº&Å–DˆöövÍ)Y¢v鵚Esí¶;ï/b”SBij{Çç!¨¥<2ÇrÓa®Ç²DHü“–ÿ’ y¾¶Ÿ*R’ãèž™–“¥ÈŸœ¸ã ÜqQ7—WOUTyzkû<"¥k³f”´ú«úË&zä’hßÁqUÊZ:÷ûKbùi¡Ã»ôîv#n›0+å›P¿¢Œùw#6g8Ã÷ùt³µ§Æõš`=%TãºÊµŒ½µ‚ÊU¢ã[8Ïz‘sèÿîpÏM̽ët‚—¯ãp‹¯}@ ªs¿ºX¯dÔ9%&c=»ß ÷t05Ì9纷b=‘Ñb•,vÎ9=÷.À/¸§—éÖߦ( ÉÈ9çã"Œ‰ìð²íöÛ–îÛÚ^WÑ¿&×Z²&ÖêeQøëû‡eQðè[û‡ÞKG]÷@j¶íµ]å–_ kÔ0 ‡Vm¸ûì*¦ª¦¿w ê°:`ôi‡ë8 é:€ˆÆ¾t}IDÓã ÎO¦IÀÌ9×ÖWï›öC1(£Oqð=êî R‚VX‘÷}"SüŠÑƒsÞÛ¾¥³‡÷†®ykÇñUW%geØL£²Xhô†U½(Å®w›#Þ®)Žä­=ϦÆeÏÍY<òÊ_kÛ±?rβVüפS¯s­Õ[¾0ýÎ(Â8žá侟þØè^² w–SJ‰ÍNs:u-$¹gƒP*™ìln ij_ ÔÔ28P–ê¥/Ì/È\‹dpÎE29znÖ€WòTß#*ôkÅÔtpË'Øm@×ÅŠvWCȧêÂY¥íˆ—á© !"!wæÖ{ŽtU5yù/œ˜Kd±ILà|~ürL¿®,ï-õ©ƒÑÏ›_y\œiÈ£s}Aüг…ð´´Ã]» ˆË›a˽¤”ÿô µ¹Nm¬fýJÑ")9ãbèîΆ+‰³Î^Ôë}z Oó–NDçúrÛB•«Kló¢|OÈbð?ƒ¢EQOÐ +ë:ܪÔø)Cùªº»+:‚=~Aãæ$&ΟjÉŒ“GÍ5ណè«Z2g &‹du˜3ò¦²/ݯ~°9,ɩµë”YEÒoßG¯™cûºönmMδ~îÁü‘ëÿzÏÕCÏ­n G4I¶¿ÓØ>8˜l35tôýê¥]ÑçÍÍM²› Jв']Š„ù…,‰qÉ©œlAÈæƒÕQƒ!èÒüW%Åe89°tVú§hoa0ÚÖnøþ¶w~c4Ù²g.»DO©Ð*zXwJ·+)˜àïx›Ê—-0¨ÁSy¦ŠH%V[ßü’¸Â‚˜Ñßhè7HB†Ë`õÞ°ß¹ðö‰3nBjZ+j[+VÎYg·œö¸l)ý_[lÞÖøy“Æ»†5ÿÞúg¤ßžâ,–]•rz3Pë=©Ç*W÷•Ìû¦†‡ÓçÆ.Ò¹ýœí'UHý@ÕÙìÒhï uŽ+£Ö”+–ŒQû Ƙ×®8B FËú».¾F_|Þi‹ßÄ+ @G¤;ÈBoy¶ˆD ‘SäÄ îuÏÙÂ’ r ÐÀöu ±¶˜·Ö(N£-ËèñŸzå8•ÅfH^œ[˜x. ŒŒ'ÜÛh©óV@EI4Û ñ)Ô`Œ]zýÔÇÐçáûwFjNi™9¢ªò»¾hš® e ÿó/Œñk?,2[LJ,%¹Éœóòýæ>Ó ¸#zñÙ­GIPÕÜÑô¨¨ÞVZµF|íÆ…CÏjݭͪhî‰/ùÕK;DÓB3Æ3]œs›É°fAîEÔRLSÁ^Ÿ´½šÉâ´ÚbO•mÏÊ[Šé϶î¯×ëÜ/$¤uX½Á×%s „õ,ØÆB5ˆ4uuþðûÝY¹ KгŠf»G@ðPö­°Î9ÉVL‹„ëÚãÔ™þþ— ²Éa‰‰" _[GÅ“¢lsçÞj‰+™ôM5Þ[ÿlªsNŠcöy('_ß/_ümcC×Ïn[²dÎb]×ÉÌcfÂêÛõU:ïVhM°X¹ÈõRÿÞ¥)IËnMÄCɵ¦Ò¼À³Ðe@R@Š@»ußG„ª\•ˆôI„ްþ~Ë Îai†åŶ“!ªÎL]r¢e—¦…?Æáh~U5iׄPJ(‰1ÆH³f'šS£÷;”¸òž®MµUë³g|¼‰lûÌ‘·ÈeiÛݶU¤"ZÞ[: u²ïÄÙcè8 Ý šb qgá º0aåå@‘^7 IDATyµO È „øÞ{ ²b¾æ&"É—GîsÎØ‹Ýoõk˜¨ñÖ˜ëÝ’kR ´~ØüqèØÆ€"¹ S YÚEý`³ Ñ…ÿ¾úÈ£{ƒ(™å¼ ³GLÆ7º2F(m|þ÷D  ”*LR7.5220ÆÀ è» /GñDt´²`0Ó5'Å’ñbúfƸóݱ/Ÿ,íTņ¼‚O‚ÁrÌ–%­טú^Ã+cŒ캴[?é“2NçÀhk¢®XCñ’(¸ ­ 6î<ä××Ã<üíÄûU®š…óÛÇsð pðÈS`GÁËø- ℹù!‡þs‡d–,ù1Çÿz1>çž’¨ïÅÄmàÔQoùA€ëáPÚBé92…LÊë?âù  )iÓ™)œòæS5Íuƒ3f»nú|ö$™óío4Bî|p"ÏVQ ß¸y(Ó΀?4îmŠQyá‘_e¤ïܰìlé½B Á§¼ €Uë¾µõÍ_µ7W$¤ä_ü¬QÐ6ÖºOõÍ -Ä ¿îyÎ#6Óm}Då8¨">ùìI¯7l·†–¯Q çÝw¶@ß[߯ˆtQ†c*¼¤jêGÇ6éLÏLœ‘›r:…|óÁ_jaoêÂï Ò8¨7èoënÞ:òLA2'gßv¼õÝ^_Óª¼§òÜmG¶V¶Ôζ†Ýá>“˜°fq×Y´£§7PU €€¸M¦ù É&IÊtϳƒo•6…}úƒOÏáæÉi]òσ…À„/‡OTÁ±3´‡ò€í¾³G~‡ƒÂp¹üø­¦Æ1¨ê6fÚ Â'Âý”òAË&a=Ä8‹Òq½ÀUgJ¢„*‚aâÝ`Ôwøö™³^¬,{«úäM¹3?ÉÛìÑ“²6cã¨ë È8OÆû¯ðHظð*1>ùòàâ¼{˧`Ì«+² i”Pι|þÇW#9ø àBð‚ׂœ úph”\5~p€ çx{oC¯#?6ÐåËZ“çÈŠ™¢ï…))C4YÍ鹸РÙ诞{"àíã7ܦdæˆÓHáH˜}ôNóÉ£ž ÷çæ:'ÆïNÞÕùo¿_2õõc3Æí­òð>“,lüÊ7&ñíÿô7Å`µØc÷}øô†Ïÿü"竃µ×êÍ*Ô<1Ï;šÞ˜Ý|…Aa°µ)Øù‡ãÁ ö¥{lƒÝ;ÒoıÙ6z "-Nµö·¥¢ \3éûÊ·úfg-Œs& ô´SsóÁ_háÔùßím߃a»1caíÆÇ¡ëjzþ— †zŠRn˜˜¼~ïîòÝe•9Rl6²°¹Ç—´ä†%C¾–ÆùÒ”4ÆyºÝ‘,Õexùjú…ÈõßIO-±M|>Å€‰ÀI0¸T2ÇdÓ"Ø:0Cδ——[‡RuêÂP_›bM³È"ƒd!„tö×Ú~)$3€£Ýû"vÛ"zd؆\GU¶H<ÿ*$Qœqg~áU•[êk¯ËÌþä;`MàsvÅ’q~Mëh Ù#¥e˹…¸”Œ(WU‡êßòl‰Z)‹Í³’•Ä,CÚtÍ_mØAJ@J€C`:p |´ËþŸ ÀuÔõâ•2~°%eiFhYzÜÂônλÁ ©ãI®1’ì.É17Õë/>tÇÑïþxš×|Úï~zÄ`þù— &çœéü7?8$Éô'\bµËKBÊöïNÉÎ@‚D8'>í ƒrõÚ¿ûà½ßíØôðªõß¾àÑÃ{ªõê çY4ÛEÜj u°ùAv:Ò>§ö6‹óSäcM:©Æê$óhËÆG×·Õ¿C¨ÉbÏ ú "›bÍ“„έ¿#‚¬¸O›²;ûZTí¶™ÙI‰1©ÃpAëiÚÒ[ûVˆíIKê+Ÿ £Š|RA±»‡|S‚Íuú<[gÚUN°åºÌ)çzdžŽúCÕ¥­]õq&é¶Éƒë•£ÝU¶U«óê½}ñ&ËlwjŠÍ>†¼5?è>ÒÞkX©,[—’oÅ„#-à*ð.t`@ÈÊ¡“‘±YÀŸx†·™oú$pQ£OÝÚæ œ†…±¦t5ÁJ ¾ gQEó`%B¥çhDs€ Á”, ãl¶{þ´¬Îù-3ò7ÕV=Wq|UZV‚Å‚Ï\(é1^“d!6Q™5ï’b‹~Í+ññŽç*§ÊI6º×_jöšÊÁžN®RŸ~b¯¢ˆªÎp²ÇüÝ•K2ôzè ¥ÆhoF Èú¡4ÜC›+¦Çaâý·Âvýò7ÍÓKç—;ÕZï+Z{ý™“’70¨þî§GS²¬w>˜'ˆäâçbÛ+ÏQ.]{ó÷ø8㜯”>#9S3‹Ë¼ùÃy¿Qáý‘}"Äqž"†ÑÂU¯¯u³ ¸ì·ó°ã€ÃH¿™mó‡ô¦º#þ¾œÙŽÝ ×ô)‰"Œ1ŠÊ#ÇÞÉjv.›½&î„û;êß {úš¶ ’… ²;ë&0MŒi3•øÃêÇL²}fÂÕã2¤×ï}âý'Œ"M·*7榺c³"íûÛÚ‹r3WÍ1ñÆ™3Î ¥zûë»ûºäÒM÷gNLÆAàeèÑ‘%€ÜŠá’ãž“ŠD0QÓÇË6*ãAmkë @‰Kn˰˜..Æõ©ƒdOû6•…ˆDâà&ÑbM:×W&¯½t¶õÙ3Þ­­ÚÝÒ¨s®2}cÞ,n%\iŸU!ÆÄ‰1q—NßBnû‹L¤¨â7¿0±Ìšæ§c(Ÿô‰§EZdQ¸ÆÃþü¿Þšjçà•?¸xl”à¯ÊBGFŽh»Ĉ (ñ5‚ënP¦ [DÿþõÊ>µdyüŠu)H«èÍo?[ÛT3]àØø•Ó…r$ù¤ÈÎ[j±º·½ý›5·ü‹()S§U3knÑ› İP\Daš0èmzË–¾Qm£­åªŽ EÖ@?#T »]±óÆœÐí¬í(¦Oâ‡ÑÜUWÕ\&‰J®yP´Ö¨ª·)Hm{ƒ»èú§ÎÎu;±•±ÉsL ‹3ï—Çþç¥_J’ãîÃÕ%ùIßX²x4ëž±fwê?V!)ôžGfJ¿ì8Ù V ppXꎮwp2.¼2éžUÆË:úÐ]þ&¿Ê9—(¹÷Ìr©—§ÕöWÖzOC.Iãêšô £-(—t<œóuÙ3ü‘Èæú‰Ò÷ꪣ×oÈž! ÂÃÆgÑ’q às”Q^éÙäÑúu®k\ûbÜí®º%×e;ª>¨ýp‹¯Ýèò31U/¼wžb7ûíͯZ’¬gïuÜÀqFB¤¾3¶žx{ð<Î8$¶ãŒl2Wƒœaùà„øÃƒ?ÿyeC£OÍ*{÷»¸—D¼3žƒ‡ƒúÞ-mºÎVÝœÖ*ÒçvŒs {Óâ›,Æ!›ó£ÿ^ hßøq±b™Ü”:uj{:;æ,Y9q>…Bÿ -ïØ„ìphp÷¶Ç¯ZûÍ)ê˜v´Ÿ÷/‘–(Ä èp¢g¦¶Ó–úM*wŒ!‘u¸¶f$É>*ôŽsî j(J¶M°¦:<íåe„[ßÊL̉ FÀ¹ÙžåNºªýÄŸ¸ÎÈ¿?&kýùÖúæ*JsSþæùžkîí,rU³ŠwöF> ØEÝ|ðT‡©×óí+²ÜgËè•¿ÛØÑÐçл¿>C>· ö[àýà*xø<èèU6A¦BȯûÿàãþbeÎÇ/ÞiP™ÊxºE*‰1Úä ÌS¬3_è¶4½Ö‚«ÓnQ™õ±Àù—yºx]c–åhÞ÷þP¨78ÜÑöVÍ)ιËh´)†y IWÐÆg dLãBª 6t«žƒG! ­sÄPd)¸Ìn€ZHí:ÞÞSÙÉ":ÓYƵ¹®Ü¡  ÷—>´v*>žÄu敯žÜV®Žú·<0ÊÔñBô3‡D„šŠÝ:g¡ò=T¤5Ms±Ù¦Îk4ªB0çÛ(¡;Ê6ןh©È*pÄ%™ÚûÚÎuó£ï<ª(ÂñýÝ^O8s¦#¶ÀøÈ{[Æ•ÈÓ–,‹Ö•=Òàª9WKp¼öØÃ¡@`FѼ‰åË/ýBãègÇæA½ùîÿ|ÿõÿî÷´ÚIsx^ÛÎÚ5h‹¥%2†,ª¯Qïx¯ZXHG }ôtW§_SðQ¼.8N/7O@=Þ:X”l3+¸‹1ìð–yBuƾ°Û# Ä¿ÂSHÕBýý-ê!¯;çf[ââ‹Y›#?ììë,­)-k¨È¶ksÒCŠûõ^Dׂ´”'_Þ™Æ +Våe'¸Ç}–¾U}ê/§x M¿ÙvׯñÓßÕ‚ŸoçÀ<\Pë(§ÎI¥S€ ðmÛ×&Q`:JÜÉ¢Aºx‘àPOð„'Dæ»MÙ6Ù$N…;A›¹êDÓÎêæ½¹©K¦þ«JÏѦÁº [N²%CŒÑtyPÅÄÍa08 †l§«¡¿²§¥©;hðömÌ›…+í È8C3q­%ܾ¥g˜EžoÊ]ã\yù™Øßåë)ïè«é!±¥9祜ƑèÿŠÇ{cJ ]LË¥¤9xþ¨“pœ ¨ñyúýÞC;ž§’ ƤÌÙ&«5¾a¾Ô”´ŒíƸ§G" Ùó40äOWåMh¼•öîÿBÊ쥓äExmó–­ïT:íisY³ò`, ûOî£ãÕæ>xêÀ³“rвæÈJÌŠ& P*ÜôůMJXé3·;!„¢”œ>{ûÛ¿]wûŒ&Û¸š&À¬³µ»hLxvkÁv_ÛænóÊÁAatŸêþFȉæk!´¿½”ƒ ü´b ÿÿì}u`\ו÷¹÷Ñ0‰¥£–™)Žã8 ' ¶IÛ¤Ûn»ÝݶÙv!ívûµM›Rš´MÒ09Ûa2³d134 ¾yïÝóý1ÒX–%Y’¡N¢ó×Àƒ çžó»çÐÊ;}ÅÉf»a¬„ñ5ó¼´{ÇOƒá°ÞßdË5§.Oʸ4ÚUlÙóSN´d­þÙLK·?¬†ÛûÚ`GåNïPOŒ^ZœÓ§K«GÎ"¥¦Y„e)©¿üÛ6 ¾}ûƉž³ã/U d/·®üzŠ(ŒÍ߯¶¼;’î"ÈùÓ/‘JùÕàïõDgçl“ôH )jˆ•?½—#‚='áT@FXc½!íÃNŸŠH€äX¥5‰§Ç‹1 Щ•‹ô«jàp«·!Þ\à(=7×Q†ÍŽˆéEsCªZÖÛ=‹fAÆ1’Yø°¿b¿¯ŒNOu›bÖ¥JÉx¶!D–ÓXx(T½¥œr” œ=76}]Έsø7;ÝÞ?ßt†@ODØEOšeEÞöÚC'PJçÙân¿àŽã"'&zçrЧ€‰Ã÷Â;À¢mÒF¹~(wUG~ÐäÀùå÷÷Œ<¸ï§óO:Ú¿ûñABbJÖÞýÃÒ© é¦Åãæxöƒgá@¯»÷­=o€¢*²"ÿàÆ¾ø—‡ &³É:¥fü"®‚ÒÅWt´”5Õí.,Ý8†9PÊ”2CÈ*q¤Jªa_‡¿ûC œ%ý*©:Æ`½a{•ÈSG3„­¼Ó;ßi¶èމUñ†šzÛÞCB›:«EÉâL+JPªq£FÛþ_ká!{úFGÆã{ÊS¦2BHƆ\S’…ŸÇ&rYØʺ²ðL7†òÛW~# ’¢*',-X¶0o¡È‹Ñe †=;nµ!SF©÷»F¾ŠÏŒr!@ç¼Óyh¿K”èß/ÖéùÉUBcÕàû¯¶ÂUwæ¦d˜§b™ģâÆõ7€Æ4iˆø‡×o4˜îýÉ-¢¤ËJ›ûç7–ùŸ®úöDO®Tƒoéã¿xk/¾æ?^ö~ßkÉꛢü°3¼#¢53¹¬Dš¹x°á™H51B%k浄 @ú&zrìÂôŽ]»Cå=¾À#"ÂìHÇÐ|§Å0âµÐTñ(0-ÌQ®¹§ŽÄœ§Úb7.¿ 490°çùð@»`O!„´îý9aJ|ùÍu„‡u‚n\(V†«f¼ é!A/rÔÔÆl–„óÒ³¢¥Pÿó÷¯jŒý÷7¯·ÞúÓ÷T1á¦GçŒVŠÈ  @@H²ˆp ]ˆ(²1&ºáþs»dèpÆlvã%©3H¬÷d½[¤DeÈ@ŠQX“hèq¥DB#‰…&y,!䃶74Ô âÚ9ëåðåŸÓ)4{‹k«ZŸÒ¯¢¶Ú²$GŸiæŒg¹ uoVrçíð0•é†äeéÆ8Ó¸k²vàgf]Y·à ¦{eÇ–®.UUÃj˜çø«V^팛-C/:^žvDøÞÜ-³’4Ó?Ì&ñþ+--õC>OX§ç¿õ? &SßgG¹Hú¦ïnþ^{mõ[ ýÞp›(éž|ïï”ÐßnùMä˜<Þ¯#¹ÃñŠWr”ãx‰I<Û ÄH§öº(7ŒöÂANÔ Ÿ11-ì̽îTÖfäúÔÌù½ÝõP£Öh ° ´yü|+µ€·ím5Ô@UÉš¯³q’}j\$G9að‘#ü­9Ú!/L³{;·ªAUñ)¡ÆTJ8V×wÕ©öõ‹sWÅX†Q/Ç€Àñ„ßýùjI4„Kµ®O?šÄ&VʪŒc¶Tä»/¹'¬ÈÇ÷…ž€·c°—iJ·]˜[k8nþê±í<Ïýç}WŽODlïñùCOpPYÿ´¬å¶(@߬ À¨¯j0ž2ÃB¶øßŒåQ„mRë‡ÕþîA¦hÙ—”êcÍá­¨V¼`Sôö­m^žBW@%T†"%Ṟ:Ž;Q^¨—ÌûêÞÈJZ0Ióvt¾Tƒ¥±‹æÌY„ñ%ŸzööW„_lž§¢ºÔ<ÿs„-ñÿègCûoYa^4ÏTt–ÛàªêA†mŸ6Rž"BÒBgâçäòe÷·s:á !Œ]U»zÝ=õõ° w¡È +‹WA4eáŒÈ7Xçé/WBÖØRBµ£ÉûÙ» _[ãl^âÆðÌœ7*oúp)–÷:å vxWÉ-¶­¿"-#Ïz†DLKmÕÞ÷Þ¾ú†¯Å&¥À¿]ÿïðÙÑÏ"{Ü£Íå]]‘+³åA`jZ1ÿ¢HSb,±ÙÉÙ§¾wWí"”!#P“Ú„#_½ƒu©vƒÙÚG4QÔ¨Ó ˜íL û‡£¿Ô~pø!LOÝ€løb³£ŒSäÏùË6?þø=xöŽÒkïÔ˜–Íç:IJÈ]68x”©!fˆ[†LÕÇÌ;‰ú‘r"ç´¹«ƒa¾E—Ohð%–ùvïa²Ö9$EØKgHˆOY=Àì-ÝuþΦ‚ôÅ™Iy£‡qOõ_wkkÿsM o3ŽÍY³0£D'MV8FÕÔ•E˜ ¨ª«¯¥¬¹‚1¦![”VX”9šá#¯þí“ïRJîÿúe'†ÅV|Ô¿ãæXñ«ÏGy$¨–@ FÒ]SFˆ¸5ø.z·åöh ¦ëhGÏ¡B ÓXâÂŒ¸bg䯩¬Ú#ýAž’=}:2 bô ñú³·{D-mLä¾ïëyÃ%™× ”3Kç4ȰóÖt)…Ûã=DöxÅðöõ¶•ˆ,YJ<×,ÑÆô«îÇ{^¨È.ELÜ{ñYn‰TŸ\³¥œ "ZÒì9Ï™Š.oz£Jc\ô£u§e`ÕwèkCÄç?zVä%£Þ˜Ÿ~ÍškÇ\ iÊØ JÈAª@ÈMTÁo¹+ôutÔo!”D+/šºwqõy”ƒŸõˆ—_HãR ­h…v`Gs®ÝM¹€)ôöØ‘<ñër½D.#ÏzÉMYˆ9ý´sT¤ƒ5‡ö™mޏãPW¯Š|XZ°4úã¶}[9øœìN¡üîÊ]S"j#1,%™%%™%ÀsÂß¶ý•çø‰Dk¤Có€$Hsé´cnblTL±FtÕ "}jÛúë7?¢¨ÁÈ{í±cžÜ^÷¥¡®ŽO¢#æêú,ªy’2/ãF‡Þ˜Ô¼³uÜ¿4…-¾mÞ–?ÿ¯¾çŸ¦ò´M‹/BÄËŽŸ‚–ž–­ûÞŽ|nèl¨m¯|¶™Fûÿda®nEbÃ{@Ž2ÔVä¯Dˆ%dØœ¦i¡¬’û¢xüú…_ñ Rg‡[L±<óÎ_£¯WAª±û®øC–¹ÜØh‚ž–mïð8ô¶½;j¿~ >j×—[L@WY6nãwµø¹¾ä|D Éfç°-Ó© çîÞãî;}Bÿ èä;Ž0B9ž7!¥T0¥ä\#êÞ^uej×yÜ€¼tþpB iGö¸<ÝFiÝüKUxáçÏý¯NÔE˜ÓaŽÑ˜zïå÷yö¾ØÑðdòªï"Ó¢Z›NîÜãG(—2AeèSÙG½>J(G¸ ³¸lÎÚq-1‘†ÝÿÛ-”ÒÜ}Éq<£aG›ï£·"w>Xòp‚&Fx ÀÀ.»Å‰†ÌG‡ž ëBnã¶rB ¯æÜ°lܸz­ùùÃ_U†Ðâ ïì PAZDâèMÙ¶sXÁq[óKá—&®‹Õ%Ì0¾S2ÍÐÍYQ•°¦TD@ƒ(úëºw UñFÕ"£<6l×Å:— 2¤T$TŒâï|«¶å¿×1DÊIà³–²ùP IDATÆ~‘3ryÙïŸë‘J¾_ø|¥~EšqMæ'G¶"²°*§%î¬Ü‰ˆ¾Q4Å ên˜WŠˆfƒP•]Õ¯i²'qáטz|6Ÿ8c"gL!”áÞ¬­3@áåùE6 €b&¦t’ªó"†êÿ¦O\ß×þArѦºw_«*Û•ž•écá´ü›™6ìM)êcñXI°]m}” ”7ÐáC£ª·Ï¯€k2íA4ÔëZwìªl­aÈëDCYscÄÔù7žpk­ËUTK…'Õzí˜Q—ìðî ±c[ d´]TCm‰yž6-©0å<ÛŠ³Œ-úkz[?l <†‰ œ¢U“7P¹¥w_{ñ×—H6Ý´ÚPÖxDà…×w½ÎS,Ì]HÉw$:O4û¢Ö4}ÖJ9‚‰…q©‹SÆ]çõâúB{ÛÞ@GârJE{ÂâcoßÓ÷ñ[má¶hmÊÚKŽ«Û´³­¦ÌÝP9€V‡aî⤬küœ8~”Ü pàÀy°. ௠ù;È`ßAdZSw7@œó-;9gIþ’ÉG#ìW޼XÁKœ%Ù ˆ›r'Ù'iН¡ü‘ƒ I—Vpëè>|JÝQ÷g[;âõ¯Í´ÇJѽžðÿó¤çyÆÆ/]Ÿ”‘g·#‹—y ØÇ€Ûn1æ8Œ¹ˆèˆ_WùÐ@ôwí± €ÞäŒ""A²&¦_4™åvÐýÆã'¥gwÕõ'þë8–ÿâÂãÀîÖÆŒ‡úƒ¾¶1w1•-»móYÞ€Á¡×ÛuÎÉPùf å¹ú›ç\”cp6,عrËg/‡•ðöýÛ@ÕÔœåÙ¢NrØÎ1—+hŸ¡Ä”<ÎxôЛë6Ý;ݽ-mœQä}úGÞ~´c(<‡?Ðé&M>“›•ØkɸlÕù%ë€)ê—»v¡„7ŠqóÆÿû+8ÑäÈÜÔßúøäoìòy?mká)5 ‚U’.ÌÊUj {Üòÿ<Ý é¸D¿ô}’æ/e…·éÎN 6¦1ÅjÜVŽ yÌDß|é^Ý×Çc ªLE|®ÑÃ(A„£À¸à-³bGéªsZI åÍé59/eióP]»ÜÈ›W§lœõñœ§*àæø«£?þ®ó1'½Ð÷ÆèË$*Ömw$\'Rq/:;„ˆýÕ½{[#¯&¥w,9-UN|mC¼Q,üêÉsöµö¶¾¶óÕÈg‹Ñ˜É%5ÑŠJ+¿+P÷~#Pž,¸iî$Í&„Ôù-!|äl"{î}0rü½øÅGjúºšŠÑ„‘þîÇ9Ž€Å.Ùc¥¾9ç$éw€Àf äïÀ^T€ÝE¸H4‡5¶Ä[rbÒ‚©ìP@U”¶<+êtã"ŒI¨à¢¬‘™‹Î•íxá¥ùˆ¨Պ׫ó6dbô‘¯^µyØ*6ØûÂÇÏïÛ·ÏJ¬z0XÖ’ sáøÃ²é«þíõgïû¥.¾æþ“ /¥Üï^ý-JX›‡”v›š{;€ªù¢“èÍßùÚƒžçËeÙ_r¢îÙ?Ìr‚IŒ;ÆxiU_íK¼ÎNÉÉE%D ôÒœ|›IDÒpPÉÑþþ}„=%÷æædT0#½Mw¢©æ´›.±¯¬­¿º+ÒòÔó L‰ÖŸ»cT :ƒ½ì™†Áè@yª1¼eTÔ ˆp®«jŽrßm{MÓÔM›ÿ!Ò{–¾P cÜuõ­ä;À­z¢œEZxóçePj^)WaMÖ˜ª^?_´H“Ëë©SïþŽÆW*æµh–¦0’LVä›Ï¿EäÅK ŒJÜ9‘Zª|«6ä E•“Î"MÞ쀯 QcšœYt YÇ<_i[þZÛÓX´&aÙùÉðÒ_j™jЯj úÙ×ï/µØ%˜²;NjÜ\ð1ÀÇA³¹èpìi«† H>ù¨"Ë«/Ûl‹‰ûBî™!¢A(¼4ÿè«UœÈÍ»®xôøÄÛâï»â[C~Ï nùuX ÿîÕ‡¬F«Æ´;7Ý5ÉÔ,YsË¡Ý/‡å€ êÇêû‡\[÷moÀ[7„•^á‚Ø0 Ȩ|kþ ~ îò‚”ÔìôÒö—4˜bR[H,c¡ °°°%T×Ù²û§z[NRɈ(ÅeZ›²—NÔý£)RsRü0@hùs þpœU¼çªÔøGûL!?Оœéºá„¦íåòPˆ)ª>Öœ¼,[²è J©’8z—åÆ:}~•) *‹ŒÌuè³-¢U䯮w>×UcªæØ¸ â¿$ãúYÆ,åªÑÇç8ECë§š¬zZÜÈ0®(Ñ‘gˆ5žÞ­={ÛD›N²é§rqzBÆ¿\ûýÉ•îpAK_¸ûh«~@ k¹çgQ³&›O<9‘Ñ–;ï»c¬‘g>ÿpµ«;«.L ËÚC÷àxÊ@V-§ÈV´(NÁëVp/p5€Ÿ{´" +§ãÉ?\†­¦âÀ‡ï˜í1%ËVÇ$$}±×ªhrÖgöV»Ê^®œ»¹pŒ·­ˆø£›îgȪZ*wTì ýúå_ñ”/Î,Y’¿Ä¤7¹%1¥€"Ûöò—ßô³íû· ¼H9Xw ©#3»0o‘5l´{¾wÕFð÷U}¼c=‹–¬MŒIå(×΀1Uõ6G ÇËDHå¥,N7ÑÂAD_Ï5<”PxËÈ¿§mƒáŸ=À@€Pzöº £¬Ýÿ<ãªýNÁµ)ä"‹Ï„ Œv¼koã@m7;×™Fìé p„~84Ôœÿ¢¤2DHÐó%vC®UšH–¢‚èEÝÍäTÛ„‰èŽºT¯Ü¯˳—”8JfÆ,)ñ9¢È2p7öSž6¼]ʼn¯b âSWfN}3=õwUþe¿·epÅÿm:]êôÖ¼SOyލ#Ö¹*}Z¨HÍ£»¹·½É÷‡ŸŠMÔwµúrŠì;Þé` K—Çk*n¼&c"98mÙòòûX`9hM›²hÛòÈCš¦¦ç.9Ó—] !Öd‹5ÙR½½þà3eón(3öш°¢Œâ¢Œbxc×ë”Ò# ‡ÖPTåÆõ7©šš“œÓ=Ðí B«[õ¾¿úŠ=s!"CÄ’Œg[˜»0òØ]í}Õ¾p vï¯ûÌÀ´ {vJ\SS–d~Uõt×-rÿ±Òû‚j¿#n"ÆvFnx=6û É<<Õ‚-9Ô]§ õò渙±S[ úÞBÍ@èP§ÊÜÁz_6OSr,ë.La¯‡µj…ÌåÈ2þŒÊoÛ@ïÞF%–>˜èp®ÎÓmâi8B$"µ«½ñ&)['®H0Щ˜ë1|î; xž7úŸ•ˆÎ$ZÛÚØ–fÛ‹`öˆd–¾Ì c¸þdP¡<=üÈnÁ$‚dÑÝ´à̽T *Þfwεŧð‡ó—¨,0¬y§žrÔk´$š¢a#3‹vŸ'¬ªxϦw$='ˆ4kŽ5Á7ß6Çb—&w™Ù#BJ Ê« Òj„gû˜ °hÎVȽ•å‡>ýÀl³/¿ðÒHyÕÏ-/ƒƒi cÁ…9e[*eOH²Hcêí¡Ë–_—,…wlïêïzmç«‘d*<å %€`5XH\z_WÝw®þÎÄJ4¦½»ïeB¹Å…kmšŒµp¸w¡¢Ä„ Ì‰ +¨@˜·g¢Gßæ]ÿ…L±¦¬ˆ^¦KžCÝàÁ×Ëoâ$Ãt‡ÐHžGà1úUút³ÓQg¡mÕú$”Qûi Àý«þ´‡PŽ.¿ÂªžÙŤfXBi*†ÕÆö!ˆÓs€ pä’TËk×SÂÿjûÎÔÁeà xàsɹ#?ÚÜâ­¯<Ô™|ÁÆÔ« £ùp˜fãTgéË 2!GŸ>€'rso[Ì4F9zFí{eíB ã9O½ñ‡ž-'A†„y×ÇXÎhëéò߬ÐTöÑ[픂ÎÀÍ]÷½_,VÆ t\‹Å˜pÙgwmyaŠodÈ®]2ìm>ÔÖßµ§‘i 5VxÓò›h„<¸اww"Î „¼ú×ß ³yãõ·~ÞYQg䑾óLÛÍßϛ֬]š_¶¥2{M†%yJ®N^ª¦ªšúð›Ú´ø¢Hežãî(?ðæ›/ü×¥×ýd\.òúÝ­½ œ]Z7ÿ2JhŽ2ìÕúŒ@8ΔbM¼É{¸Q;Q˜B~êÔ@tÿløJ¤ÙL Ф¹w¹LŠÏÂòíî½/Æ®¾mêãð°x„µ„ûðÕO4„—9’ ”íÁàp‘ÖŸÆ>6=]?(´÷p›†Vkl±3ޤŠt¥s8?,G½·!ܶLZ2½÷‰ìœàØHÇ?éØ&k!DÔ‹†ì¸ü•ü…ˆØÖWÉsBZò"@„Y+Æ,}9AFoYç@K 1•e¬ÏM’1ÁŒˆ‘íà9nßS‚JÓg­¾>?S™5Á✟¤·ŸêÎÌ3~öU•ûûåœ"ÛÿRœ–c‰ˆ’Ñc4n©ð{z<.B(iÁÊ L´q§"-Tz<ÀIBÆE o®|f—!Î’qAÑÍ@‚€öh‰@6p#ëÓ7· ºú‚~ßÕw[Ò鿇¾ë¯u¾ýDKSÅPf‘eê@s†«ãyŽÿÎÕÿ<æ÷ü’óë*?9¸ë¥˯óׇߨtSb3Ö/X¢ôW¨(k|át‚£FÎÚ\ýǦWÑ`TÒIDü‘ñk¿ <ñHðå»õ› !-»ÿ‘é­™'ª®¸õ_w}úøÀ¾—‹7OÌ>H€¼ LèÔ€‘Bj>éþ´rP•µ«oȱ;†Ø#!¹N ÙÜ©pËè{ßl(!ÝA•yWEòœá{/ƒ:Æê&”«¯úßR@]"MÛhŠ¡<¯vúZÛ}Í¡>†ÚǼ$cªÊ…÷¨ïpWĆ1kƘ¥/È®¤V{Ë»zvCœ)i¡3~nò©‹ì³F‡»ýÁ¡N/H™—”XŠºv¶5xúB9E¶Â1lÎ8Ñ‹s8Á¨§¿wh@eZeGhL[žSª2 4ÆŠ9SuÍS»+jv2¥,Ë-:S’ ‹o[Õ_ÝÙ¹»±â©±E)Ž‚¤{õâÀ=ÀÌD’ØïRj*{Ú[sŠKç­:ofCç&Ùâ$D´iiAÂÊSWýÀT,O÷°PÈtÁÚ‰.ÝŠõwØùŒr®i-kî®sÆgåI¼«­_éÞÅ9SSòâI¦ÏVªÉ~×§OÄ®¹ƒJ†ÈIY`à>@€¤Ù4’¶¯7øäS zŸ–i^s~’ Ÿxb;c/‡I.¥×IÓš‹ž ÊJ¶4{J€˜dRP.L2„:Û>9FHO²¦¯/„RËLDMj‹‚ÊBiÞôX$ÒÝ0œ}‰ä–]Ÿu¾+Rɦ‹)ŠYoHWä!žc-©³:u–¾ CÃÃÛMyJ8ªs 1ÆÌ òÎ5ë:SµÑuG9‘/üÓhÊѦ.^â m®Cu{œ—æia• ÜD dJ;`B~ñݽU‡ûaÍEÎä Ó…×fŒy`XUö7U´¸º8JÀ¬3ÎMÍËŠwÂñGÑÓ•V­Vùº=ËxÙ¸@!ò5í¼9„Žu¾®Ao‡›iÚ «Nƒ ÅsÝ7Üú7Ô.%4fÔÊ€!ë¯q>õ5ï>Û¶áçéeQBHïý?'‚àøþ7OzñÂ×}øÖo·ú¤`²Åè¤%))*ÓÔp€JvÎ@9[þ¨çN¯ wé¯úCã}Gˆï¢œ&¿Øœ»"ÔYåkÜg˜³îiÔ€1¹a(¤=÷X=/‹U¼ù«Ç¹³h? ‚èW%ˆ;‰ŸrXc‘žVÊÀÜa—xTDŠš?9¬ön­ü¸—r”ˆ|Ñ5‹§¿ýšÿmˆçâ¦7‹‘ ’³ÅòÃ~ñL¨ðfÓs"•L‚e}꥓[O«Ú>£„.ɹx¯Ü?«Vgé‹ 2†Sß¼Wì¨!…p”)lîWqÂL²žvr×v˹á­ÃL©o©hÈŽÛrÂèé@A¢ëþcCÃ뇴°J(­z~O‹B"§;8?ëùóOýêÜ¥q×ÞŸ’aŠ8^Dsþ¼¸÷‘d%Ì©L½~Ù%ŠªJ‚8¹|™ŠšiÜZæï*¹}ÕI²‚)+sÁÝÚûñ_Ô˜’Wº°déjñio€d.‡³(wÏ<•¬Œ©ÞïžÖðž´h-"ªmD¯sÜ{ÇT8„uRfqŧÏ/ž¿vAÁ| ™¿Ç).€Žc\𣵏ÇGdÃ'þ›íò´ÛM'Ç kï }ðp 4¤Í¿$ pP @™ëºÊÁC{]á°¦(ì+wðfÕÄ*Öˆ•;%¢Ÿ0aÝöv¯Wa ¤  ñ#¸<Ý"R‚º‘˜‘H´póö£ª¬ CS’-eE'òÓEùíjümæ§Ëò‹HÌ„ÈY“¢ï¶¾©è‹È.H»òä9ñ ¡ ÌÒ,}QAFÀåï=Òéiu£Ê4E+Ø<ט`†Q©¢Î&ù»=®ÊN·gôÎOñË,¬†½¡(Ȉ›ë4Ä[F hsÊqó‚ë£`ÂÛá&”tì¨S‚ V>»Œ *p†8sÌœäÉÕüný¤µÁËóäO¯ML=vfôqõ~Žr­ý]”UÓªr~áR›Ñ¢DD0NElÉCÁÌESLNÙöÜc¾!Ïšoo6ñÖ†·T>½Ëœsçê¼^€CÀކ4À à rL›† K¯-:øtYûÁÎH‰“q”SyÕЋoØïù g;yZ¼MŸ ô÷2Ææ¤{;ªÄµ_Ÿ°1tÂæW¦ûßoèûÅ'qÿºfôï-»X›vûÏëÿxî^à ãÞ» ÐJPššZ’×Óp1p€ˆda|ú~gG›?èW-VqõùÎäTãèÕ¯+X©‘Jo•Ƭú;}„€WanY 4„ËÓ, C°Iœ‘§ãò¡»®g°±74àg˼ X´ê½83ÀýAðS‘Vj™ sœ-:Ô·«'С¡¶,qCœèpd ‰D×й?/yq¥âáf5ë,}q@F_E·»Þèó@|irBird“ñ´^„ýr°ßS8Ú·|µ~ֿܰlº6€ègsŠ}4æè>ÐL8:ØÐ«†ÂC­ýÝšÀ‘Ÿ$Yt¼A²¤«iùüÃÕ[þV—¤¿í»E7gD~¬îlêìëì#@²¹iyª¦-Ș3=™H¢Ê*žÝSdJ¶O^´ÖVí}k\rjþ¼ÅqIN(¹}uÏ¡–¾òö¡WlqʆìøI÷4aàQÐÒ€¤)#ÑŸG6ž»*öÀ‡}Ïýºî†ïæN‹1ÈÄ*?t¨œsØgòäêð5{>tñµ¤à–yi6;æd}v`ß{oüzÃeß¡áJ8NÇ uîÖÂ>7çN±àÅÐ; ªÂH½’£€ p0Rv¹H€-w¥WÓz?x8þ¼;]=Z]•§ê¨›ÈʵÙS Ç ‚öA |]°cË`*Ýò¢ +hB VâŠí:(ÑqÇgï8‘4Eó4ööiÓªÎaLXSt*ç­=jo·Ö»V·‚NÓ/’õ!PàçYöS˜Òîmª8ŒÀòlÅyöéÔ€$ÐØw€$Ù³ë˜ÂáfÓpÍÒçd û²õùd¯Üü~å©d–’§%”ž+#öìx{vüh‘„ˆñ¥i{~ü^Û»u©äÎøÉÇå„^˜ óÒ äöwïo€¡S5D@QJìEÎûnÚ›d,Y÷ï¿YfòPзeÿû<Ç ”ÓKºX³ýÂ’pBê‹Ó5SÈðè“;m™±IK²¦rÇó¿ÿ¥(éñI뮼nôñóÒæ§7¿[á®ëé=Ü–·yÑÝf¼ÌÐ l€ p#PÐ0ôäçW_õ¬íOµ|ªÁ4¥UòÊ ÄqŸæ~ø µ£;þŸäà z~Ù'†ÅÂÍ‹4«[v׈qóÓsÈὯø†\&Kì)vJ ´¼›¶ô‡œhæX7ècý—P ¬0ÒO+8 WÂDD4ç,¶0 IDATî®oúà{C4NÒÑÄdÃ%W§c!û$ìÝ«@yý‚é P×0貉\’ Gà‚óIWSôa_¨¿ªk ¦‹òT²fâ̧¾.…Ë D·T7í |ZaÙ™bfìn÷5µx8ÂÙ$ÇÊä Ó Ý"@ªÚv ²GNìšÕ©³ôyÃ'¯ŒJÿe'r è…â[ž› ½JG>#Έ!Qg7f\Pýì÷5l¯xíéÄÆùN¼ñ›Y[]G~¬­Œ±Š};1˜ÌÝ|ÇóãfÆEÐs¨¥ñí#È0ó¢Ë.ò×ã é€¼ 4€;€2@úùÁ„%Ì`:|uï5ø¼˜ñ•“Ëm¾êâÉó´nÛ÷bö«¹™Ž<ý÷¬ZÐ¥6ˆ K 5s¾ÑóÉ;o¸ìŸEišÑX”D%BÚöÿŠòz^²0À4.i7(‡Bo^d¼ €Ûá„å€!ýS³¤[ì:°lSLɪüã„"PB{Ó% "É$PÊéeI5 «3“-€PûÊ~MÑ!¦$[úù…§q~ËÂGó…Ü4ì̉SY }ܱ5R•0^Ÿ´(aÕ "ÃY$Îa6ru–>÷ ƒRùÜ!5¤€&«Å_Yˆ â—­ O´¿²Æ¶µûNü_Òó;¶v6×ò¡Üœ´eá˜Dñ190$ÀP‹QäÍ"á¨È?ôFeÜ\'ÓØè—ñÕÂä²®Ö#×É`ä)%Äi䯠õƒJd,umÁä}yÿågÞ!E Ç$$¯½üš“Ž@ÂütGARõó{k·à b\QŠ-;>¢®¼€u€Ÿ†V é ?'~qÉz9¨½òÇÆ[þ-*ºG•Õœó3ÇåÿþŸÿŽùýú…s'ö÷޾š³-ßiÏÐ}Ï¢ù:To³˜°4ú(›#yÝE÷ âÉ+ùEø'zFi¿sáàS‡5¯Ì™%à ©<àF€,×]¾?´us¥Òq¤ôî˜eþÒS Ÿ —_›n4¦|ö˜·vÀ”»"â›üR“‡0;T1õÃÂ8= ˜N¾Bj_9 É ÓXÊò\³Ó ò:-ô¬ïe¸Âxñ ¦îCštšå[óPmËP}H ),¼!õ ŽòffªÙ¥¾#€ÈdeYÁU,LÌm³ju–>7 c¸^×®fOÓ€T˜Â²6å3…9rc‘¾Lexdp)!Õƒ¡H¯Ù(åOѸæ ß}í 'ë2Ôœ›Æ wØr²m„€§×{Qš9Tºö6 ÝSKNg7¦,ÏO;šRO'd¿ÂzC*ìë øUÍ-«nÙÛ9hî ¥¯.¬t‡ íºqqÒþÞi©©€â%+Ssò–©–íåuBÉí«†Zû{·vìªï=ÒfJ±%/Í6Yd@ ð6°€Ã å!9@Ïá“D¼õÏÿ¦®µÖ›–gž\÷ì{â0åˆ5y/Bϳ¯ ÃøŸýp"üÝÐQÕ³³-£;+;±€|MÔ|ª§AHX£üõ8N0§”·Ãœ‹*«øíûEß>?²©•TÆ!| l¨ Èz/ª¤óïX"‹Q–µ½;{ë*=²¬]teZzÖð˜bS]ÝGû•†A¿†À0ÅåM®×å¤ëÁtJ²¥koãPÛ€&+LÑÒÖϱ¤Æœ æÑ!ƒÏk[»´(¬¨Kr–÷ÜlkäÉÅ9±Ð±³N k¾Ž~ï ®˜¢dÕ`;Þ•dŠdh¦ @¦Y/ÃOw6IÝnX”Õ¬A³+¸§/Åv]ŒÄ$Am©.Ûùq0DBsŠçÍ[uÞ DXÒb,i1¾®ÁÚîÁú^wm˜’m¶¬¸XB¬±ßÎXI°ªU€ ª€¹çÎ „hr<ím N2TYåjO³žÈ6 É5 ú%„Ž.ÑÞ×Ôu¸%§7 C“Õ#íô‚1ÁœuÉíòˆèS™HÉßëÜ…ˆ ÁÀÓ‰·KÜêD#œPÜÒúï7øëž/YËõ+ÒínPFÿ˜²bø¸á­#žÆ>·ÆÚwÔåo^„ E³nºhcØoÎòVtduö\?\jPÖ>éö@“_­ì÷WØÃI:ÁQœäíøêÍ7ÂÚ)Ž›)ÉfJ²@ó{š¬ÊÞ`çžFhÿ¬VS´¢›–/VÔ•&TÖ~ >(2ˆå\ Ká8b—ª÷»¬‹£Ü„íñtx)GS—8OœÜÞÿùµ–b¾üÂgÞÚý¬9h[ѰŽû†ÉœÜù)PQL\„Ÿd®3í&±×jÚÆ€ŒÈ 1€0@ à'€0fb†dκ)Á^1ûH1xåWžiD*J47ߺæ‚d¿Âd=Qç–8Ê0òÔAYRá¼üº—ä}Oƾ…Túï:2}@ågMV«žÛÃëCœ%û’Ò3*[pÿ2‰K¸ÎtåÌn= »~楂ªw÷Ga& v]ìªä§SJ£y‘âÕKÿŽªCV"ÌVxŸ¥sdÈC¡Ú׎åÈÜÛyf‚òx­[âC$„èy¢!Ü’cgˆd|7R „üäÿ½Tߨ£3òÎ Ëÿ|û&½Nœ¥'û’ÒakêßwÔ¿y˜ªÝ<6êdrqF‰¤ C•Þ¼²û#ãQ'2$n½'ž¨sw4 F°ƒ§&^žfæ|Dœ#ýÁ>¿w¿ùÑU30¶En©xz'r€@(™sÃÒ3=•uJƒ‘n7ß4ã# "Îüí„­Í/r„€¹1‹©ôtûfÖ³£¢*„UM–=2kɘ¥sd Ô8Ü1Pï {e¦²‚ÍsõÃÕ©3Ú¯¿R6—¬’áÄyä"§bt|äJ:Þô4Éÿíò²®¬8 Îûÿc£Ãj>•&EŒ(Å·® ¹ýTàj^ÚWõÜB‰d38WçEK[ËäÁ ¡ ”‚kz\%'ï ûÀGï ºúB~ße·Ýdö ó«LÖòzëCÜÛØï @ŒÄhTP/K³œt<‡Ñ¤ðÆeðJß:‚ˆÝšz5!:»q€”oÈŽQ{œh3\6*–òìMDÌ(4WîXp^ܸ=í®è%”ÌÝ\8&FšÜDWZxâª9T·ÓèIr;‹+çÃm<1“pÏ^ªsö‚œ¼¢ãø8ƒ{$' @dÎü]ÁÛ¯µx]ÉuÁy‹Î‹Û ?ß8¨0dˆ! 7$› <2ÿ°ïÑãat1ãw{Þt}ö÷ØU·N·ÍMÛ†Ü~`¨Éjö%¥:»ñŒÊD<.Ûxÿ[Ö¯q3ÍL…ˆ@G AÓ¤ÝÝzd·†Úªä&Ár&zZ§•óœè«k¦„ê¥áµ©Î–`¥s d »_íkë¯îÕª1Þœ¸ÆiÏŽù"•Ù<6Ö u„ìé ð”T†Àˆ2ƒåñF±È®ƒ‰SVD~ohyí­Ãûö´jK2o¹cɼe‰§å89ò®ˆü-¹}µ«ª­·¬­öåý“*ÂT-uUÓ˜#/1zèMUG[j*û{:)åJ–­Ê)™?ºFžyŠˆ·åÚÀR]!€ìë ¨ãuç‰:÷¸d Äêµ  V'¦›Ä›—€6èº|LÕz¶@°ÏÛ¿»~-!ñ…)ûU·8«@í/ i‹PÀygpB²çZ+†j æÍ·øoû.G†íD„áú߇¤Â<ËUa˜Ê惽¡Î…,Åx¸–#v*wï¡:‡`ËÊ‹ô]èx Xq„IÜj H ¨œGÉæ\;Ôµ ØÞ¢ÕTv4x)%öÌ´@jèˆNmë bU²ˆ\‘}ü¤ìo2v1z•HœÄ`\à>ðZ¨»VJÈŠpPCŠ«¢£¿ª“©šsež=7¦\ÌìTèHøè›í_3ßf"¦Sá­‘ ç“©' 3¹ÑSÝ4T§1¥4niš9ûÌa©x9ÂiÁ°F4Jh­â¥@‹ö/[¸ß,» #‹¾®¡ÚWŽòzÁì´&-JÕ; '*×Ï;…5ÖÒ8Žl͈µ(`óÈb8©F!Û"ÁÉraEþíõ÷?ñÆ{>êE¿TPœ|ÑÜUË/N83ò´Ø9É77µ÷p«ì Mt1S´ôõsÆH–î¶æ]ÛÞ‹#¦hÉÊ‚ù‹'jgô—X«ãq¢C“÷:¼ã¹PB÷‡& A†£} "·¢Þ¸¾ADèªí媺’RÏ/|‹ Éf8d(À>ÔÂ6USÏÎHH5XcÄʽ'‚Œà`RbŒ5Œ9>ëýÑÿ€õºËS9ªüÞþWt:Ã…;®`i Œ wVDÆäÀ:9€×Žêã0€M~Z‡ Ñ:Q¾kTYôsÂüú²#;ÿTç{ŠÌYÙæ”0­–»qŸ|Ëpý’„‰ÏÈZ˜öt˜ÄîGúÿ¶dûÂ+¾f“L¢}²L¦Þ·§©ÏÓì¢<5;ië ÎZàF¥ù½àGw›oOàâNõ]@ƒ)#Œðö–-§KÐ'/LXy¦±”Œ¡~W%äÚU?DDŽ„/àÎp–>¯ #’múðc{9‰×9 E7Îÿ¢ŽïÞ¾@õ Ì 5©Lbxk®}"½> ý}Çë¯=Ú¤¥˜Þü=¸2%ÓtÖÐXü¼´É§2Ú 9$éùßÿ?½Ñd0™WlºÜ☞û$—m˜ o#"®™8ÿR‡_ÙÝ8ñðÛŒ‹¥„£·ž®ßQ—À¦kLÑ ‡/-1"l×  "k€:ôgp\vW&ŒçÓº·ƒò4±(þ8ÛÐLMFÇw¾5#E\d><ø†Éh]ûÁ&Íæ®Ñ©Þm°›&Á1Yš©0 ð'Ð$″)²a%üãÿã¼¾_|"WöòÿŸ½ïޝªÊö_kŸv[ronzïPB—^D±`CEEGGgœâ¨SœqÊoæ½y¾7MŸ:ãXgìe»¨ˆHï-@HB éõö{OÙë÷Ç !!„$ ï|?üÎ=gŸ½×.ë{Ö^{­âÄÆ6¶v[|ÃpWf¶Ó¯34tº± æf¸è‘ÀË«ðÍ àöcšIDÀZˆ¿§¢Ùݖ+Õ=ùæŽÍïŹFŒ9öÄ)qñ†+>ÙÁDÆDÁ™›˜1µpÐ̢ц|X,£œ"&ii*EYq/ß»´æýÜØÂ‘ º½]çr©Í±…Ð}WƒN,¦ÃÄ9A2ü¾êå Í ƒJnŸ}ÍZþMAº]šžbg ·Ôwd¹O«±Ñ›øËË-Í>©4ï…Use…S²BÄžRVÐTQ¼ú;?´JžüEévéú܇ß0ˆº7Yd†ÿ §Ê wQ22¡dÈT¹>yó'Á=÷ÉÃ7!ÑÎÔ)"p;Ž,93eÀ 8QU@[&†Äj|±2K³Iß¾±äÀ‹kSÕHÅÞÐÎ-m·ÿ¨¨ýiOçÒŠ¤ÉÙ½ì¾ì'nQæ-?&}|Ë—ÿjYù|âÌ»ÎÖfb‡^öýûÇül1³_*prÒÐeé¬ûܯy/Ï™?ÈÓ°±½âïS…™S¥ìžµe&Ï01˜$££²­aS­Öôˆ1êÎq¢"š^ÇQ¤_˜×¸®æx†ñá+åÍáU‹!ƒ¡%q?ÿÓÄ÷w.Is&^8ì‚]·+Ìǯ<'+ú}ˆ(ˆ"7 ]S¯ûÞ}º®YíŽc”Á)k²sYKÕïàÓÐéÚ_œ-;ÍÍŒƒS„,«÷ë 1FbÌŽèçnÆHcÜÖ¸¡,Ù½#¨Z8­oAÆ´·7Z€Ek×—;T8oìñ ˜ˆ¼õ>&°’†NJN@ÀTÕý­_l«öUmE˸91/0¡S×ìÚÈ ãŠ9¦˜mg º¢ÅsªéŒ¼UÙɉ8¢N0ßÊÄœX»À@i’ˆ ß®å²t׋Oϼ÷zÚ Ç¶™±÷È žPÿmå¾öë+7íÞ¢"Ñês½Ë÷Ôâ¶gÎ,­RtÃ%qÖw›Wü³oAºÎ|µóŽ—}oÞꘟ|ÆÇIzŠ%ô*BƉ3¬ªûÌé¸*ïæA^WÔmÜupÅ &ÂÑ/ “1Dt˜‹¼‰%ÝS½Õª_•rö¬|g¶ûÿšïÅÉ‘|AFÝ—+?(Í›×uŒPSù¿þ¼óà~¬Y1wþrdV~잺 U×Ggõ»èÖ}þ±(IˆX½/2äº CŸyõ|]Ó2ò‡t÷¦¤(}°X½zgSdÐäùúo÷hùÙ%±È w”3mˆãëÌCCˆÆ$U j i°½-¼Ûoì øGÆÈ“®_ €«¼Þ1Ûö7‚\[¡pŠQ!k+À0€JßX×%NqÉÄ9ˆŠP¶²)©0ž1\ÀˆÒïþ$¡´1²——wÆͰ8Sç=âR‹|u‡]@ÁYˆŠë ç2lhD¼ªÍá ù[‡»$—"91®Õk ˆ‡m0‚ÄÞßž¶ ·hlÒéÖE:ky•‘°<•-AÎ}ïËôÚ,ql†nä]6’ë€N˜"5Ê3’.ü^ËÊç{¤«ÙÀÓÞlhíG†ÑÕúº¬+ýª÷Ê܃¯Ô+·‘E& e£Obð3a¢ŸIFt¬·ïo©^YÁæÌveLÍÍt™#ïx(.«»8±}OSÞ¼âCý{6·–ni;tЗ™“žsÃÝC£œ¬ª¥ÎmwÆÙcÏü{v ‚›V,ADÆQᨱº¦Žqñ1zå {mÒµ©“®M4ynü°‘ dÖ‘² Ü Ê­žØxyø¬„‚ñ§Öܲ€Y²rsH¯ö«{:"{½‘¡N%Þ"~Ëkd;[- Ž€"Õ4ç'@6@@ý¦ŠaÑŒ5î>Ô! ùõ@K¸Yªƒ°þÕ5€‘›_³_ô‡*æäaììã¶xD3 ýúŒÔ¬bÒ„>oÒwE•õ©Ëë"†hr[Ò-n‹È´‰qV´ůYÑPº£==^()vX\]WÊÈd}ÅA½Ñ±LìR˜í‘1 ”uJ/!Ø í²Vâûˆâ‹Ó∠qèÒØ­æîý‰x+ôbG,Ê3›Ë³ëóä”!ƒ9ú?ˆc®{œß}¯Û5‘Ö_¥W휛{ã`2Œè»>Ùø„,Y¯sÿWÚ'‰x$Z€sy7qâzæNCZPÝùÒ&É&Yâl…W Gf²Š“M×pK`Ó#kvEì«¥£%ìíP'_œ:ïŽB‹­‹ð½¹~±fè·M½ªÏo1tÝ×ÙñÅÛ¯‚(u­û±îx-¹tÁí'd&NòA_¹µsϪ6»¦kü‚«S²Kb-vñ´ Y^ïo ë*'•Óu9ÎÈ®òÄT7KK€O€ë!€0h]ˆ†Túp?·Ëér˜s €dZ0Òðì£FBRxâÄÌ„+àˆY…ÿ3LÍÄ~¨ ›õFVÏ„Þ6ˆ‰9³¥S§¤'CoYù¼’í,¹l@‡Æ?<ÿœï¸&]Hí÷É¥m!mY¿‡èèb!=°º~Éøäéñ–¤Áóþ†å;^¾hôwâ)‡xÅ^cë4q®»ùû¹¾KóŒ•]20s1q¦$#:íëÖWw”·êaÍoO•—oª±“K¬¹>øñë»7µÖWû GÄ%¦Zç\ŸÃ›<þÕåÎ! –pçÍöÅHèš3MÑã0t~p»wÛgÍá€îLTrG;GÎN8½Q×´»Þ³!!•é:Œr[í"+r) »›ê¶68’ìE—vϬ½ÕÛªËÑnûÞ~ÇÅ3,SÆÑç†ê[ù\5ÑzÂ×ýߎò¦®ÙÎðÐWQdÐ!ˆ™XÇDC`c´H±YÓâtˆÍtÛ’ŽòÚ¶rïõ-wå¦Ù=µ:*öFçˆù%±šFÀyÚÄüšE;“§(ñv÷”®ï‡VX§dÙgçueå­æü ¬ üôô>H^ |Ш»Pš0]{Ê›}ûWGZ«â'ß‚ãªCD~ üÃóÏKlŽSFÄ+¯0°ÜÚÅ0¼üË=žfuÆ­é½Ñ ,ÖWK+êvO'5Å1ë’|x±¬½6È¿\·Q@¸Ül›%:ž}™È-µ¼Æ'éS„X©—&èm_6ø‚:'’Þ”ëDöõϺ‡¤tïzT·ú÷loK`‰ßýÉÈÓX\Úmüi°û-(ô]M""þÂ~ÇÿòR`’Xòu '"÷øëÚ6¼¥y[Ę„~ÔÍD´0ð>]a¿t †P×ç\+É34®­¨ýdBòôkÊ f" F<ŸoýgÔ£ûú6c5¦›óÝD¿‘ŒòOöš|Pxå0{rŒé{qÌŠï½PÖÖŽ„t"Ðun±ŠAŸŸdMÏvÜõ`Iï‹ò†Åiy¦`¿é£â–‡Š^y°”1˜~KFoîWÆí{y½'ì-YPb‹ërV¸ÈÙ¶§¦´@±v؆¿WG±–`â²eÅ’ßvÏ•|­G²M.îm¶¼Žˆ±¹5ØÒu±òˆ8‹KNw"××Þ{¿²`¨óÛ íͳÑ{ÄF;;€0„¬ý’\ƒˆî³Ýò—À‹!Š\(M8a5ïØøvÒÅ?êÇÎ}'ðá~­ü7®Ÿ Ð2ˆˆÁ¿sòƒ8WZÒã“§'X“ ·zkWì|å¢QG1 "Šz¼õeÅU8\Œ5羉>’ŒÎʶœÙ…‰#R̨=±wk[0 ¯ø¨F” Ÿ—`q8å¢QîÇ~½yØØøá²òc{¹Ðc‹_:dôØœbS¶ßh ¢(³Ûþ4ì?–mù´iÜÜSh=¬oso ¿{¢k‰–°lˇª.Γ“2vµ‡ªšý[CڮɗŒ]3Â=N¸ø¦éím¡cÆÚ¾ÎHHfN¡±ñÖ¡.År8@çiMä¥×VUø&ÏL^ÒÙØ{†a<’êc<ÃkÅé. ¤ôËÒˆv²þÄvëß‚¯[Ñ2Y*ùº $μ«åËk¶[3GõË«——WjU¿uýœ Ì "‚ ‚ý>öUÝRDVìsVFsgÕÛŸŸ1âwLÚ1Âo£¦ÂQYTâÃDsî›è É ¢ ÷M7éE÷¤ª©ð†ƒÆ'¯W"#¢¢QnAÂËo:b~àÝû_cE©·K9Üxmí'cs†Ì(4ÇâùÁ3d«eÛ·¶}Ì¥IȾv”¯8ØYëIÈËœàD«ì¯Ù‘àL’Yâ°v}Žt[’ÿógÅ£F¬¼¸TQwçz†·([ÛBòÑž:âqoI´Š &YÅh"Ù>#!ÙšWkM“`Kc¯8ÄWT,`Ò]qüñHhí!KqJ?Š× Îíwþ=øF,Ú‡‹ù'¼‡ˆ¤¸t_Ù[Öè3Ÿþ»µ½¥ê¾ $FÏ:ç‚}éÿgeÌ=+£×lY¾óåiÃoÊH(>>¿ õ¼"C0¿éÇ𘀬×ÏÑÇÿ½nqV|ÊÌ¢q¦•è|Â%ßË^ôxÅ+–ÞñÈðã54cÿçZPK’5.%¼«lëÞ• L°[bÆ ‡­Ó@FË_2D©à’{r> ‰ßs.¯÷—{Õh8Î#£`Ažk€Ú2fB4ø‚½Ñ•ü+6阀ì&eàhœ,¿¶ßõpà%ŒaB¾pœu]£æ6¯x¶sû'ÎQsû<¹¢“tQ`q®”™ Ù(ÃV^û.¨xiöugeІÕÀ²í/Î.¹=É•s¼<—iï`ä²âž’©7BqÌ<øf¢¯$Ãt´„ßzfŸ®ñpÈxàá jØèþ}&+NtоµaIaJö¤‚SÎçˆèªŸä¿ö›½;—µŒœÐ3¥1v°—GhÜí%+¶-:´[r7FÂ.®1uΤ› G‚\µi#¡æˆÍºB',Üg€Ùi“tÜ£Aö—G¤è{›(¨¡íp(9èS•šö+ 8 õ‰–ü3Û·ÿ|~1¬yÐþ¾Î–9*T¿7jØèCe¢O=ÖùT‰<âJû¥jÆ0–Cíà¿<ç†Áw}#"_¨í‹í/Ì}‡Ë~â=……zÖy]¤-M°æ‰vs¾›0IFßã’ç.ÈË*Œe ‰¨›aœá”FÄ…–&g™~ç%¢ŠíšŸç/|h?21+¾+tʪÚÖªöpn«f.Ý\apƒƒžâÎ2¼Hˆ±wk#Ð`„Z€‰¡%»©–äÌá~¹;'§Äðëôî .‡nsʇš{EŠ˜&±?X¢õ슇­0`°àÝÖë·iû ¾ü€íöãu³£`R rcëê—¦ßÞ‡ò9ÐÏŒQJfY§ ¨„il/÷\ÕtVF´iÑäg_Ç0Â4Ș.^Ñ]½rÝo¥ s²›èÅT5ñõ!g¨3zµ¿&¿ÁW×,ÊNH5ÆùÍ3niÚMé;—µ b£·vãÛ›6­[Ûä,Y=Iî´ŒÄÜË.˜Ñøk­Š{Ä™àá6Ý[ Ä%çh½®CÆ¡âMnˆÁsjC -’4)í25pþ¹N ½"XÊ?â¼e”Þèï—£%'”ps_ªL)² <9&iiô8ë䛉8ÚiÕ!zó6uGˆÂ#䟤ր>cì%gëøÞÊ]o8¬q×OýÕ×I©Ž ä®à­í\c²bFù4aZ2Î)t¼åM5eÕéqÉóÍ]’óQ…1t²sËòšßßôö¨ñ2å/H“ KIþ‘T‚dè=[¤þ+`¢”0ŠIŽHi_£ÛçNÁ!çXDÅ®¬­Î_ˆ á·rðYŸ!è=u$"’j BÅç)z¹¿Ò¨Ëһ뀈RL"Zóòg“çü¸—¥y¸þØþhŠô ×½  õDÚ×X‘U?¢øÊ¡0èæ¨h'.Ýö|(â½zÒOOR ¾-h‹Þ³*ÒÊ.Í“«&L’qn€E´ÈGÛ¾dÈ =.ifÑxS,ç5ÃàˆìóM`U4Ö)Xû«Å}í§*"FÖ  K‰cEè¼ÿæ´J?HÖ”m󆞠T]»~ÂQdQ2%s¾š.j›+µ „}LFÿFÃÁbRÜÎY/Žüì™ê¦ƒÁ¤ë ŸÕ=•ä÷£#'tÙ·‚¿Û†qR⟞ƒK9UüT`?RÐyÒýVƒbŸ]/{D¼ÝzõÇ‘U^ú…ýŽ£¬)L`’Å·eÂÔÛNØeˆøœ÷eôs¿Ú\Ûœt!-Np ¨i—×.R1R$ŽçÑ`›1ñÓMOž3ÿã$½ƒˆ¥Æ„® »]šGÍ8â&L’q5ÍÚÛ  ºµžˆ4C¿xø$"ÊŒO1¹ÿùŠÝ•›A¬m®@y\žôHƒžesäÏÎËv@L¼üé?*¿ó¿#Ž-ÀD‚V®©’»D°&t ¡ô­[$]”~Ž "²ˆ ù3aj#6_Æ¡Â)¬ãÒ}ŸîoùŸ‰¿½pê9I¹QÛ½JÝ2C×SM: §xv}i©Rsº'i«Ñ¶-²s‡º‡€ 2’„„¹¶9CåÂÁ‘g¯Be‘ËÞºE s±è,(ì;_ kþ“3 "ÚÏ·«¾Tº)z¦úb€“3ó¶ “dœ nQÕZ/2aYéY%AÌOÊ›]$‰Ò1yÑLœ7hh«=ÔRÙîmaÈ('£°sCX : 4’йS³ºÕ0 ";–aWÖx”Ä Ñrø(` ïøí{X,»}×9ÒLDüÃW»ÜRüŸ8ÏA6C‚!½Ou† ’{`<º~f»í‰ÐNtŒ’†v_W²kL¨a_”dTèßò¿'¢ÄGÈÃtÒ¯²_6˜òôª;[7 ‡qšÄm÷àà+ì•»^ „Ú¯›òàÉ_ÝI­ù¾Ñ”èm>®4‚CD‡É0L˜$c°¡êÚ¿×/¶É"rZóÆÍ†ãr®š8oŠaÿÖ²¯&J¢l³8¦—\Æ#°åÍíÖ‡³ 6낌S‡Ê%Cm\da tùlã´˜iims&ŸCKy”ÕlÅ!»Y9gûàøµí»_•PÖ#¨áNÔëÊÿÜö$Ä41µ@Ì›n|V¾FÊ:w+‚%ãÍ!”,¸mÐñ–¤ßÏ>=ƒ ¼ç_Ôl´t‘ ŠtÝ]|'B‘_ÄݽÞ3 xÏ¢~bûÖß‚¯ÿ9ð¯ìwQü”[Ú7½Ó²òùÄ™w ¦x+<{E&MK˜Ô¹½ç«×…7I(®­S¡‹…DK×I¿È:S&(c”O®¿O©à‰¨XÈ[­m¹Pž¢#^´¹ÂMåÖŒƒ#ð嵋¬)Øgë¸8QÆéÊ£¯Â¾úÙ³z#¥h -ÔÄÒìÚ)ÛªvHŸ)'šëƒ “d ,:ƒ¾íÕûÛüÑH¦@Î3zˆodç{¥²MŽMq ™“æº'jÃP›7 ŽLÁžµ\tgñ pDÊÏ JƒoÓÅŸ[}Ïo`n§e•`üOˆ.ðtL[(òôæ²;G÷] ]OA€§¼óÞ:Ð)Br4q ›Å]b»ðë´æ®·\\¨|.ôÎÝÖùàžxcó²§ÛÖ¾?åÖ³WíŒáâøÑz¡ˆÒ”þEK˜žÜ¾>O*q‹],V}´áÑaY3Š2§öRD‹µ7ØLñªè×CdŒ–\¦Û™ “d ¸Z²sAü–ÉsÁtÂ8ÿú—Óž÷k!-­$%c\Ú©#uöZ±E7 ±¹‚==Ê- .ˆÛ·®}ÂÕ)D€ ‚ñžŠÉ¬õ¯ÿàÁpÒ>0˜­æªTa ‹±û-_gð«ú÷ÿ`ü<—ãL‚' /÷=ï}•³£íg®{úlŸè`2HÝ“ÚYr™wï â ¸T«a#´¾aÅÔ´9±²Ë÷w.Nëg3F”¼^®*Dt¹b<>:ï’âÌi½lZ;o–Á2]¼¢›RìÖ<àdf6G&ÉxÌ,Ÿà0SŸ‡ˆø"¥—ia}ÌÍ#%Kÿ;‰Òµi£èÌlIÝë~÷ø‰lßšŽ{cIˆ°Ûú£áºã¦Á<ÐÈÿ¦vÂb]%ÿÞ¶·«¥†ÈÃÔi¿¸wjªÝzÌã}x©-Þ¹r˧5Ô@Ä!õ^çÝf佡Ëä©KÕuÝÝ¡$æòŸ¶o|'~ÒMôRD\×°œ€begð ._ÊõØïFš¿íû4úýØ#¶¨÷×><¾ðŠœäQ½/g£±\IF¥ËÆÈ¦ÄI2ˆ˜âL0åpþaÏ¢ý¡ÎPÁ¬\W¦³¿vÁˆ¸¦6oîÉ0ކ’–ÇW‡á&µå÷OÄ^7WÎÉ$]»Hã{ PýÒÍšq¼ ÑÛ"KZšštÿ­oü¥¬öÈLûè¸.×U÷õYG~‘Œ P#í‹ÐÊÍ…Ë _¤&_lŸ‘'åô—¹è´fqµÖ|Yu…2#ÚS‰3îl[ÿ¦ôÖØ~¯ u¿jDFeM=B*Wõs&#"ªðò°q„a„5ÿ¢ ;]†±Fÿ̉îÉâ%]çªHß¡yŠÅ æ*aÂ$&Lôe_T03ǧ;3bûkéïòôlÚ(Äæ¶äé:€/ŠHÛ¹x‹£éÉÿ’,£üŒA §­•8Qd³¤“ªä Ù‘|KœžÉr Ê0ú·OÛ"ôRYäòÌ®`ÄóÁºGFå^œ—2¦÷…x ÝGÃ… ÝýÒh„-ÈÅ\%L˜$ĉ>B²HC.ÎïgEN\mÞ,Äd ޝµLðºZ hW¼þ^.Z IDAT»?✠üp@-Ò]…û€¿©¢…­½±"ŒŒsFÿpÎIíy=ž)N€Œ±z1|À×ña-1`Ïû–ª²n5”âÜòñ¿ÚÒñeDzrÇåC¤ø³¦½fÈã†ê‚–@Œn`%μ«uõËþòuŽ‚~ÎȺµy­U²Oc®–DÊurœä©ÒðädqJ²HD×>ÚðØðì™Ã³gžV!µåC…1˜½BM<’ÄL†aÂ$&Lœr§eõûîx¤i“èÌìi_»¬‡"¤YEÈò¶,ÔÖ%ý×/a‡PBv³ ™ý–󓈒0¤û¿mF¤ß3þÒñ¸B _ ×LÉíÌUÑÿ¶/°1 V·[”Ÿ 6ñ(J4`Hbnx2ôæoí߃Î2¢Ã¬ÙÙ$#ÚŠ£vÄËÓµL²ÜÞÿÄñ…ý¸"«Ë«æ£õÍ¿|hƤÓ*d¥¾ˆ€ç²¢î+k#mé‚5O´›K„ “d˜0q¦+u¥¶l##":óë×eê¾·+V=a\ø„Õx²Ã6íàzIåm%Ä[eLd':Ä]Zé¶`kƒÚhÿ¶sûš¸ž7hÍa6Eöµ&Ü[ÜøX)é¼û§†‡÷ARª-½ÜZ䌙<2¹Ãzõ‹¡Êõš1+Úט«š—=íÙ½4vøÅýÕ‹ÛŽzcVâ°dåúaN/íôñ?Œ³'ãÃuŽ-¸<'¹ä´˜ Æw_Ü«y ([°™‹ƒ “d˜0q®@kÛ\csNÂ0@’‘:t…[~Ä:e¼ã’YW%þ¥» ê v­„#Ä îUŸKÕ•Õáõˆ¬^÷^c½¼D~üë¤$‹” è]RÆŽòI lo'­Ë“£ýÝš¨:Vkƒž/¢7(99Ýdð¸+2ŽyûéÖ9]`ï~œˆÜ“on_ÿfÐoÏ{æbiXÒ˜±v„kœK¹¦Ÿ¹lïTø³@0â]´áñq…sO‹aÀáÀÁò»…é#=‰)‚yœÄ„I2L˜8눮ËZÛn2Ârò§Täm/V2Yq*Û`€Aà€A›tLcÂ-zŽ£F?ôŠÿM‹l-’òYNqì…'y]÷ñ“cÈ}´»ûºc\|—e¨!èûª+e‰Öò­ëúÛ·¦¥ëI¾•DÄÉ6ÌÕ{æÁ%±¸×Ÿ<丧[ÝŠ6—äL Õ•Ú²F#;“i›¡}C§uˆì¸f@ÜU«}üÿµQHõ}°îá9¦M8ÝrÊŒ´_(^•"®Š´À9ÆœÚ&L’aÂÄ9Á0Ô–­dhJÊÄS+rö¬mæÁö1ÓT×/èwzWðÇÂ`‡ãSô#tÒ[ŒÖ×ü Eã˜ëÇmßÞgÝ0ôîé'oTÌåCB›µýmmüýS¾îÛºûo9Õà 2|Ô?¼Gm{« ¡íßU]ö›°‘õç1FHfQ8qe,¨ÈxlŒ){þDÏŽÅFØ+Úúž ÌØ€{–ìhº»üÒÔëbȽW¥íë4~;Æ ´hÃã#s.™3»Cå ßçÂ8ì˜â#]œ ›Ñ€L˜$ĉsˆ¨6m&#¢¤M=ùºÜõëóZùþÊtW³ë—?éwÝßbëÕµr#à%¥qyhU©ºO'ïs~_@ÁßÙ\3ùÔ‹ Ê™43íG2ÁrÕ& 5¿ÚÊ,6±î»»^$uÇñ¤”Ÿ3Eè.äËÜÿüóÓÈêËå#1eWª{âíßv–\*»ÒúP7m)x¶x¿s`Nò¼ž6•~QÛÑBÊ=ÆØ€ðÃuŒ+˜[6¾Cw©öN2Ë-Lé6cìV½ QDfNm&É0aâìCmÝA\=%È®éúã¡ue´°ô5t+ÆS!û®‚i¢'‚<øIðóýâH>èG†ÐñQ­Öê²üqwô½(39ÃÓôì]9ûqöô£ Tl(Hþ²5î n8eeZß8ØÓ}U¨qJ¥ö¯®}ǺÍÚ¾¢ah¿—)‚œÕåG)gسSŽ¢ž§Ã0Þšœ,ÎH5]ýhÃcã NÛ#ZTß©ZÄÆt›1x˜&ÉnÓŒaÂ$&Lœ}hí¥`¨Jê”Þ,Êüsˆ×•~ÅñÉwõ§½Ë€ñïUq6[‚ ú9>c´ü2µb§º§R?ˆ€3,S†Hq‚«§ÖÉM ïyì‹á?½øä¥ÅÝ5γpiJýVÕcäoÉuDÿH¹·¨û¢o} © Ÿæ_× nnIÜ/nüâ‹T––!1JŽŒÚ´°¾]ß¿-² —„ˆ‘У×jÛ.[ ¦n™}@›—ix5ßê®ì»á2Ÿwyc×O×d’Î fFÒ)˜‘ÆáÏ;BS’Å©,\ýß²héÃ@Ä~`¤0Q#9kÊõ€‹I&Ã0a’ &Î pÕ«¤L‚Sízm5¨ŒøüFßk4÷ïSú1L"B+φ1 q¢ý¯ëŒúwüé ;YìxeÌl댓ԟ)â)Ù©ÀYPc1“Žœú‰žOÉØ\ÞXñesŽœ‹z›©l€x bTëDZEw}½€ ñö®HnF)¨_‚ñŒO­g3âç%Y²Ž£ëҮͭ5Üùi]ÔÈÑùY]Ôââù¼>©’¿_ˆÀì‚”ÐE"!þ‡uþ‘Ÿ™ k5úÞCkc:㮚x¤ÚºÂ$Æ—[?´阥R0zm—=(…Œ9’M†aÂ$&LœmQ”aôFO_j\®éÚ¥rñ°ì©ý·WB`ü9+°»-ýÞFDüŸŽÿµ£MBézûÕ™bú ͧ Æ -}Ƥœñß¼2Þ–ËnרæÏ ÎM®1WŸÒÕF[CÚ²ÝÇVú uHëÁ0Ž—”`Iüö‘ó¢Ñ‹MÏ”-úwË«•Ýý¦jáôׄ¸\]Ÿ4¯Æš–=¾PÛ¹sëvï9í> Új‰¯pGA}po÷Õ¶ÉRrµÑ‚‰w䛳ۄI2L˜8Ëè¢jý!öÊ߶޾\wºû`lÑùJ °ÛL`ýkå&¢O‚ŸÐ*°:ï”AîMá\3X/xƒROšÑöøÚÄßÌ:ëý8LÌ{?²ìéÐÂÛó“={lðÐsOØ¿¡µ“íA¶¢öã°¾àk¯>‰±‹ÉÖï_O:­ØùJ«§fÁÌÿ4¸Ö‡ö6óº*qï¥Â·åIòa‚›À£1zb<7S¡™0I† ßè ?/´zVlòª61Ñ5ÿ7Cû… ð¿‡ÉCìÛ2f ýc]8Zq~Z¶UÝq›ã¦\)»—&¢â{f•½°&PÛaÏŒë M;Gz)LñD  =o‚¿|]˪gÜùu‚ þ“l?Å€êÓ¸62a|úâ˜ûG×± û·}Œ{qƒ^Þ¨ÿ¶Da®-}§Y­ºñ’ß#ûrz¨J/A¶¶hö](Õ¼Çr0ÓÃÄ€Á<³dÂD?ƒvh°¶÷ÿ)†#_ò¹¢]±ÆˆgÈÈKÆŸCËØ] dõó´%¢0Eþ§ãwFö<èº?çpÈí^jJ=gÑ‹JYF¥ÔÎ~ýÖþ=ØÂ;Ž ¤FDñSo@®…ÿ "ü3G ý· mXí¯àÄSléý[½5Úæí7#»€Û*–4t¸eÖ ¬/£ˆˆv½Ôq¡8¯û¢J¼“kÉ‚ÂMO&É0aâ¾C§õ:|'bh<)C g’Üå €©Œ]%cë÷0xþž-f>w/·Húû¬\@4Úƒg½›Ñ‚Š€Â߃¯Ó^Díq¢ÍÙ²òy ~Ã0 ø( Å(_„Dt sO¯â²œëìO“ð†f}m“þ»±V«ˆ[|Zݼëú©¿î³%L…ð!^9Tݳ„6®"@Ž`&B3a’ &¾A c­ÆWjø}hòEûŒ©µÕñÄÐ5ö&[#­ÕÝFÄÐßHòÕ]\ä@çžKr?ºÅѲ:my½ö‹QVX½ûÍÊÆmó&?p&ý²ÅX…€9lhwp°*=P©&+ñæêoÂ$&L|£HÆzåYZz‚"kfÊÞRŠK–ÏÙÚ"â˾?ÖùÔËsmsú¬ÆD«$(bÕ»[O½Ü8d™÷Ý=炉žˆ~j»Ma«¶÷xÒƒL`¢âݵ¤›aŸàÒDTæbÔ'tsÓjN||ò´~l "îh32ì ¾ÜùjmËžùÓ~ÝgB}0DaRw!ˆØÄ#qL‚Nl„I2L˜èO“€ñlXiõúßFQtÞpݾ M±¾,霭öûõ¦‹¬3§YŽ:”«·’vè4AoV žð9±ˆ(KHùHýòøÊQü”[ÅØ¤¶õo"bðQ.EiZ×mû;v5.ʼª¿L2ÑrÝÎŽa·*öÐØQyÓŒßôÝg"¡Ïµ…yBq*Ëî6cÔ¡0ñLÁjN[&É0aâ›Á0¢±Ã!#™{˜lOüÝOIÓ›CCÕSòìç`…ô¦Ï‚_ÔêuÆýd¤<ìX{Œ‡"û¹ÿ C«'­±Ÿ÷5H3ÎQ b®!‚Ðh´ž€¸'\ÏÈÞú£âH&M=,2êüUñÖd«hïÇèjÿ½5”bÃëså6_CaÁÌÿ`ìŒü…ëy5¦c^Ï·TéÁ¡¢Ãæ¹B&É0aâ›D4ž£ …ùŠ¥hxìuW„7í‘$éíDA—rdà_fnœ(0ꔤ<·ïãýÖ çˆd,¨DHkämÝW"Ÿ¯'ÛG¾ÁDG¼¿~ë?ÃC†_–5ïÌRw÷ÜáÊ,úï¬G hä5ÓÄË{¿Ýš×‚Â9Î̶j´d˜0ñM5ièuÍB\LS™—‰#5àïk*©Ó,“FÉ#ÎÄ`#ºQL‡˜KÇÅ‚€µŠÔ*Rr[$Kßf÷/ãþ/ ½‰ôö®ÇkV ‚si»„ˆ¾o¤°F:E¯ÛÏŽµµX&\S#2[üýÕ)ØJ²²ùyrÿöu߃q1èê~2:¹êfýIeL˜0-&L ª¢ÒöW¢”—¹êÿí•æNµœ SA}Öó’NúÏ\÷ô—ŠþauQ𵉡JkD7xd_/Ñî}ì3Ò˜pN}Þ b†¬ƒþ§àó¿]ü}£ŽÛîgÇècƒôUÕ͘x¿°~Qëš×â§ÜzF£à[ÃÉV¼}ˆÒ¿ ùL{“›)]Õ“ÕU!˜/šñ=M˜$ĉo¬ƒ‡ÂbzRCE@qÞgÝ.MDõFÃBÿ‡ ÿ*î§]Mi YÚ¬“ iÔu!°ê0Ë °’€”9B=PÑöTeTªm¢pN|[k }³DkÛ¯ŽÊmKD*¬<´ø‚”n%12ü"oé 8:cûiuʧµZi‡‘å`w Uú7Z¨:$'‹szË]š§“kÓ•s£Ä„I2L˜ø¦B«¬ÎÅT÷¶TK2evÖF™VñNàÃÛcnÎÓAÁêGW”ŽhhÇì#yÄõVLÀò&à¢ÀJbQÌ@)åìê?ú½íû«êw7?ØI)=e…ˆKk>@@·%”„œ˜¡ÓZ¿ü—{Ê­L¶ž®T?­ÕÖ5éw+Yúuó×hŸÉ`±aLÏa$#zËd&Î LŸ &ÎXAœ{ý‚ÛÙÞ µ×…ЦºÙÙû:îSìT÷¼xï&ǵéBêà(˜œëÆÀÁ··£ùŽú¦I@ÑÌR¦•ƒŽ‹9‘‘=<ð×j ÎRZõ3=J[ؾ›Ê©ó–æ5Š`¹"÷¦îŠY’ myã[W½`„<§UÛ¯µ-­ÆoÆX3íý¿ðnÔ—ÇbÜEÒu=«TÏÃ*ñ$¦˜“Ô„I2L˜ø¦‚ûĹ’p¨Ô‹ ‡ÏL8‹ ÿÚù·¥¡/osÜ”/æò÷+“…ÞÜ&ç»Ö0È9h›Ì,£*)ç¾%`0©‘Fún 0%oÕ÷FHí®ÀÆÆ•á¶9YóŽ1Ù²F+Iùmkßè½x76ëk›ôßµZ…þç| uPk"¦CÀ~®×¡Éòÿoï¾ãã¨Î½?Ï™í«Þ,Û’­bɽaƒ;C€K B!¹ä›Én Üô¼É ð&7LI½¸a,÷"Ë’ÕlËVoÛgæ<÷5²-WiW+?ß?øàõz÷Ì™Ù9¿9sæœ;*ü#e2KÀ> "³­K¯>¢M'ìÚÎ÷›sK\qœÒþ„ µo'}=Ï2jè÷GëÊ’†Ž™ÂµP6 ”Iß IÆ¢c#º¶ªRŒÖëàm©”Múîèë~»%Ô´dÔu'wÉ bÒäe¨¨;Þ<}!£µºA_Õ ?8Ù>H÷­v›› H™Ô»„Ûõ° à%ŒCc ú£¨ØðRƒiÐe·åÆåœNDëC›žîz6Ix¿éýZ\Fù‘aFW;ã;sG“a¶?³µO!ó…s® |kLÿZéÿPžåžw¥…ß&0ÁzõñaY@‰~cØ MIŸÝß·QÆÂ¯„›kÚ·¾Ú_UG÷ÂÓå¡5G&Ûc§D‹×A-…ÊÄž¢Q‹€SÔ$þ‘2Œ%ªðîJtØ´IE[^o,ÿ°í3‹8ý¤6„?ZÜèDÇ×¼_ŽO Ê^4θý¬–c²+|Š¿³€û*E+¶R!ä[aFöÓ Í R—`ôDHD㔼•ú&$|»ö¥Â¤ñ9ΑýmN4ý¤ÌºÅð·“4OÎ"ÑÏÿÕ®Ða¿|`’M ÎÈD\©¿†P¾(é=ùì>£Û‰Š¸ƒÅ?]ÂØy’]~ E´Ñ™{×¶VllûÂOJT->]Ó»#ûÖ7|ÕsGŠ’ qzŽIJ8ë¯&]ö÷9 f#¹¯PÂû¥~˜ô#¦V",'ž[„ø¥TòP~¢m–@ªïÔ¾4:©0ß[tÆMV=Zz~Óª§Ò|µÏc)o ÔtËç¹)ö‘œo¹®ç+ˆhŸÑS¬ÜÁ¸'ƒ±½lTRÇŽ¬­¡Ý+›¿ðãÒØ' " S¤R?¸"°æ[I÷&‹87*Ц‘î ŸMÉSî™%ÆôGNÓ„€µ]KáÄp¥ô¯•áýR†`¬"ú,Aí¦Oì2¯Åã;Zãu¤•$O>Ëò”,ÐÒó›Wÿød‘65^+^ˆnÅ ãeéBOÏW@í2R`q Á€‡ ÆØYÜÃ;*@J%ųîïG^5.ýˆø›Î'_÷¿sÒ=V´Æ}|_Ri¶ÔeÍò²³êöˆÎ«gñN"Çáœ/”4ÔQpù×É ÙX"2* `ÿ:öy=»±:9töŸODI“¯ªæ¯ÙÒ³@ü{‡õUGô&úPûD‰z'dózîŒCc *¼§ l3J_|¼"»Ð] -ö])ÿ¯óéñê¸/¹?7D®Y‰¨ô› eÄ8ø·ÎünI€šåŒ…?¾H¢}²pÎÖ"¤0ùV›M2R>½ˆù'¡ ÑÒwJŒ£ÝõZöh$:ûόƠÔ˾è¯Þâ;°Žˆ^«Ó77ßšdÔýBD-ò¨e‰å¦žp:É ª‡»1‡ ÆÉ`˜ÂmlÖòÇ*2óKîãnŒh÷û“*TÇ\ã¼2YI"׬ˆˆˆésÆD:zwèôíœ5? Ùôتs*<ª¨f£k‰¢ ©”þµ2rÎ¾ê ø ‰,´ßý‰çVö´n=8¼0ïú«µËëÌ£çV*DTÔ´Ëï6ì7j6Õû©$YÑÔý‚ˆ™«T´F« ׅ[r{²°r7ãÁX†Œ°Ù]©d¥ýåñÃÉYÚüÏÇz½r"’ Ôþ‹fÙ¼ÌqŬ¢Ô)#U—¶ÿéugÓÎ ëyŽ=WsÑq‰°ÏÂz=ùV˜áýÒì>CÇ"ÿHÔD¶ÛzÍ[ÕllðÕ*ÿV Z"  Àsí ADÅæR“r¾¿Û’¤‰›ó­ƒ}ì5Ë, Î·\ÛSÎf3¬¢ÈQìü;e2K¼> 0Ž4 M}þ7­Þ méÝyqé-øqÇ)"åûÉ ÙŠ*¸}ŽÅ®]Sqúvê~—âEûáZ¤ &–Iÿ: zÿeóùIû4öžR7]åTÝÑê£NŽ€ñSÿ3çÑðk¹ÄneµOv #âayp„ÈþÿñEÞÍ€ „Â}ŒCc #ûª-!ß˯@fžíúoÄþ¶7m mÓPûªçŽ¡\Qà“ÖQ~ì4SiE0U„«Z/¼Zœs…ã2ÔJéäßpb%”>‚ÿCe öžRâºW²œ#ææ,é]T+Zε {ÚL»Bß¹jFê‚»IšƒZÃ[ŒÕ0^™Ù3`eC¸5UX§X“x4ãÁXBvcȈ¾wê!sî-9ÇIÖ†6¬ ~ðUÏ8ä'YÊ]6Á Dª_ØršÉ¬Ð¢åÁ‰5(PÍB×"Å>UÈ…Hÿ:Ü)ƒ;ep«€Ðß ‰ÞÃ$߯5Ç9jfæ¼Þ;4º|ɹ…¿fóÅêÈÝ%š*-VÊ >èÊãz^©5ühŒÅ ¼Ú*ãÁXâ1ÌPÙÞÚZزɸæùîTkŒ¿?Ú"VêGYr=‹’ÝuY¨Åײ­¾ÿtéÍ3šý¾ðú[xÀ½T±ÏJ*˜-d¶ÙNÝ4Û¥9]v¿gê‡!RGf=¾¹ãå áŸ”6³w±‰è~Çç 2;e÷Yn)"¾DŸ—mI¶b vM-UÉy=F«Œx„jã…ÐØÐÃ3~2v Igwcƒ,ÛlÜø`7#C÷ è¿M)Ÿu:!j ­^»-ÍÕ²¥6urnty—“ßCD¶ÒŒÀúZ×’±øÕ xQñ"”€]¯IË ND*¥@q ë%Àeí7tW›ÑÝIsHˆHÓv § ÓOåM¿ØJÖpÉ5+ɬ6÷¹ÐëBotc? ·š@ó¬Éü;e2KÀ^Œ†æ#eÇ6íÐnùþXÕŸ‰Ã;e— êÕŽ¥‰Uu#®_³¼,Üæ·¥»û žLJö4¶ÿikÒ—¦ Æúaˆ~‡,ùà¸]|üŠ8¨­jÙ~í¨›ƒ;dO‡Do¬x1eLdÌ;÷.¶^b‚ ÎùPÁ“?üGÛƒª€{JcñLÀ“”9Ñ?F@ €)jR\¬aŒCcêÀŠC[> ßöëR«=>ÝÑÕzí«þ7ïtÁ«x«ê´$GÁçgUþySÎã¼…™ý½Í¹xlpCý ­ZNf59¿{|("~ذ¢#ÜzÕè›À>å],Ñ9Ë`¹¿¼tsit¹yð¯“@ l¨¤‚V$¢-:"þrWÈiÁû&ÚbÓÆG‡|"¢\Ñ?n w@NÁgrÆ!ƒ±DTSµùCcČշL†6+¨¸…;!O1NM±YZ·ÖŸ&dØ&eùWWw½Vî¹®dÀ»1dÙnÅž„ñ~ý«AÃݘSO“*´ãA¡ÓèÞ¼`Ë•öi Í ·Hé½Á´¤£µêu4é³c­«á–m²É }²2§g†9ZjÏ–ò• A<ð“±þùº^~¢1½Ð»ô+£ãu®{y„ôÿð~-qÛ¢/Ï 5u~go£;·¦KT´_Ðd „ ð3i)D%ñ¯ú͚噎 s?uúV™ˆuþ»]j{ŒªãQ)•dp_©8æ 5 :-kîIDATcT¹Æ|z]x™bã‰]ÿ¢)Æfˆ=}þ‡1Œ%¾Às÷ïÆŒÔO}»8^ÅÈ`ƒy¬X-H膄ˆR§îªl:Í´Î…cÈ”ú¡Îü^³ÀêÁŠöÝåm;Slé“Òfº­ÞÓW&"d '–V‰þaGmœp-V^Tô«,–âVá[aš$}°6ì%cÚ8e*ÿ<‡ Æ9a!Àsߨ D7=<.ŽÅxºë™kW̵ÍJèúDÄ̹cèà_7÷׺+)ö´çu¾¼'´§q@šj}3EÞ#Ç7ÚpÍá7«;÷_9úÆÙY ÏòŸ[Pñ ÷‹áwû8Z¶ßì A Ì¿ÂêZ¨€¡ÜJ¾•fOŠâ±;þSâ*`ìäFqùl²:”ÛþûÒ8Þí~¢ó÷~òO°–Ü–{ÍĆåÐÏD$ Å«ùÞ¯²MÈ€±ŽÔÑbý‘÷‚f $eJ¶säyíÊS”óÉ}¡Ž0=2ÝM®…Š (à_M¾5ft|¨c_¿1Æ=ŒÊ«î²*f|Æ«þ7uÒNz`x\#¢glzÚ̼}¿]møÂý½Ç¹¸@ú#¡}MøuÁ'¥cœØ¹t]g¤c¬·d´§Àªhçº+ª3`…QÛûÅ¿W…u фѳü©p ZÁ}•¢­XHùVš2R#ù×Ä8d0ÆN\p¿öó­Uí7üdb¼íï®ÖkJ¾†×˜¾äñÙŠÍÒ¹ÿXoÐ S•d{h{Ã…ÔŸ¬…H—¾Òûfggû5ù·Œñžçš"Ëh¬5ÀÇ·?þ~0¼³Í,NRNÞ/Ñ?ª¹¨æ ë Å’h…H ùV˜‘:’A¾‡Â.R|»„±BzÛÖº·æ€Õ—¶=šlÞ¼;ÁZ2üžKT4UuÛš6V§ÍÌëoë´ÒŒà†zÒMTÏã© ’¸÷¹½M××`2,yÝ@”ÀoÀ»ƒ^+.ÌV¯Ì=óÌž¶‰È àÒk)rÀçꉽÌ?7v1@׌EÏû¶È«ß+[x­+çšÉql~Ùñ»)Ö‰‹ó‡e%#bÝ«;G:Jî]ÐßÛš]iÉñ¤Ü=ó<>|×÷÷"`öÃ)iÖ¬ ߉¯…×TÑAQq‡‘€L?Ÿi=IR¤šôC¨ éäZ¤pÎ`Ü“ÁØEäèUï=sôêÿœ’Qà‰cð†ÿÝ/MðÇIú½¦A€œÅã*ŸÝØ´±:cΘSfÏͺ߬8×+þCáê–ßvY½Ú„o•öþº ‰DÇZÓ7µÀdÓüb±–ëçw` @­µ0;)¸]‚ß*SIA ²MBTÆxL»Ø;0àÐ;åokLÛŽC½›ÆhK¹³y³Oïê¼¶)\Þ¤bÎâœkíGÏßÊjR Ïg("þnoȧSDÂ÷§Ùθ§î±ßò‡à?šd[†H"dzc¦ Š@p« n“ œˆ ا ŽŒCc1:#¢q¸ÑllÓ¦£U}ö½dR|F´ûc÷s^áá„I%Y뫎}p k~tG:ë»ê®–$ 2f_Üüöº¬öG=µ§ÿ‰Ôn°\{Švô½ÃºyÚ¾zŸlÑEÖ|÷™§÷FDIC¥Íî)°p 8ÀµX1ÚLn“¨€o• ÔQˆXGsÎ`ñ>\yèÆ LÞVŠÐ¦£¢”½q¬ò£ŽÛ÷뼿t¿à—÷~™¯8£{Êè×ü½ÌvCVƒy¨-ÜŒ€¹®üqÉ“TÅ=Gµü|÷¦ Ö±)ÙC<Ùsƒô9NñiÊ™ª3Ë!¾\¬}Íû)ødðÅ9–És­S†xž€P¹DÑ¥R€ÀZ,Ðj6Ï·Á¸'ƒ±Mámåè²k¥c`ã+ u»»†B ¢ÛÝ·ö¹*½hw" ¿ßêÛ:r«\­˜[Z˜4¾0iü'úB"Ê æQÒWSÝÁ¥ žâï.±SÀ9Ñ«õ†rÈè3Á—V,dB»H¯&" í×B^–qÈ`làι¡måJFŠš—CD+ÿTßpÀûOK‡Â–Oñ=M"¾[÷èˆÔÒ‘£ÞMË{Fdôy³°Y@]ÿØk›þ Þ5)¦Ë»È„êñ=>Á—³$¡¾÷ÍÀ$Òɵ˜×€e1<ùv ~"µÒ²d¦XFdDϧûÏò)K3J.Kásë±¾á}ŸÞ…€!#xŨë È©º«þ¼1ÜßâS&’¦®Ö\£UÊsÜ/bÙLF¿ë§þg–XgMWK4Ï™ÝüHP*òzž1n?žúSZQMÄVùxdž \‹ÐSh¯ô­4@Z!×`2;‹„=´£5«mzitá S§¿<´wÌTï%×eqÅ1ùùõî#¾ºÊŽ} Šd[ºËê™yyOÛÖû¿ÞqY +ö‡š»méî>b5ÇFò¶u¼Þ–ô¥i±ßŠ‘ñR轉®ÂÝ'æî\%¸C¢ôC©6³™dIá´Á8d0Ö¿ðž*´iÚ䢞Sê_¿»7·Äµàö‘\9qÉ3 €+½ª EAÅ¡:æ^sr³×[Ri¶Å®Ö¾²­øîy€'Þüo"“\_Ëð½^û†%HÕa°k¢µgŸ"ˆÈ6Aø×Êàv ×b ¼ŒCc'5iájþ%ÅÛÓ÷^öF£bKïÎãë³ØÇ D|¯îŸÑWˆâä‰#]ùŠ8ó ÝcÒ¥!+ŸÝPôå¹ÑH’v=†˜ â3¯¥æ0ÛSÑŸ‰sž HB`½ô¯“¨¢p€}ªà_ ˜ÃŒ~²„ïÀØWM¡°š7BIñô¼XöƱ+š?ûx‰Í¥ð¹2–Ê×µ…Z$Ȉž?â*C©öŒsýΊcG×sëLÕc£Ný‰´ëP)@hüÞ{J’=íËc¿i?òÿaœ’“mÉpÝwf6H´P’Ð>WÐdÜ“Á.n‘ŠZ0MKNzwmëžÕ-Ÿy¤˜FÌ4ŽÔwW7`¾§Ç¥L:ï«aW^beÛŽCYó‹ô­¤^~¿þµ¾º¶â¯^®Xû^ 5ýh5Ì^ãí]«o]§o{Øy÷E²‹eL"³j ¬üƒbÜ“Á.†.‰¨I¶é%}š½ /6Ø=‹•{z1["¾Y³Ü"T¦ئeÌM¶ äC£®›¼ÿ©µûަNÙ§éÿwAËÏÖ…ö5ÙJ3b¶áˆh€©\L#ѹ4"ØDÁ­/Ú&# ŽŒCÆ}¾@ä@µt,jŸ˜·_xt¿7S»îþ±Ü»;x cÕ¡7,B D‘¬¥NJ»Äf±ÆwiɎƵ•}B"’!­±ž¹R'£OÒº óP†H¯#ýù×’°¡VŠŠ‡_ì,޾]ÂKxw…ÃÖâ<ávöiü^ùñOºvÅ]£¹–#[T´ïÖe¤¾ë À´ŒK³ƒþlðÞ_¯ôeä.›Ð§Qoùõ³-ùX¬Ç`>îÚ‹®o:>w‘ ÍÞ+A¸Ð’Ö|î2dÜ“Á†K;Þyíš%']ŸX“$¼ðƒýé£íKîä„1Àüº¯#ܺ£y“@!Iæ{ŠJS§ÂÇKÐ öNOŸßRV}ز'gQÚ}—6=¾ºû­ ײ¢Øvf˜Ãc¶Œó¼*µ š j¶¢7q”"Õ9hZ …%„;6‡ –¸g7ÄÐÖ}hU­E§ˆa"š¸(+j òøõî=­[ÛC-ˆ"IK•5ß"Ôžlƒ¦3fiÞTSñ‡uÅ_¹¼÷ëDdŸšÜrÄ}uqÌn^Ñö[z7Bºõ"Ž æ šƒ2D¡]¤×Rä )i¨ ppÔ`2X‚B›XاE!¢æºàªgëox¨Ðîâãy`Æ[5/ªŠ5š'ò½ÅEIz|‰q‘Fß8õðÛ{̰¡h–Þ9Ãý©qÁm íÿS–|猘%ÝÑ5c:.A"Šì½‘"Ú¦¡âæ*b2X¢5~¶©ãNNµ»ºÖýíÈß)à„qáÙbó±5’dW¤$ɹÙKìÇÙLÓ9¨œ¹IF Rûmco»¤o±ubzÆ(#t0þzý.û|Øôd/­­…Dal’Á2B QÇ,®Á8d°Ä9‘|}pkçúåG–Ý“ïLR¹ŠÎ;[4:­UûÐ cjúœ‘î|:ÏP –~sÑ?®ë´ezzÌð~zb÷[±,ª‚ ´Èv>xúî% ‚B®ÅŠÑLú!2ÛÈ·ÒTsQÍC¡ ä® WI ´qb8d06˜­ãMíÉYZf¾ƒ+ä–θ×Bû¤ìüø•È©Jêoá¹^Óžõô…óRÑû󹞹'ƒ±ô€påWó¸*ÎéŒOD«¿nJ€ÜVÏœ¬E•SÞŠ‚—È®Q)­Ûë3æŒéýºâÖ ýeéß›’D§äâáŸg¹×l¥'njIðÉzC»ß3Oñ¤Ž Îù䉷õ÷ùŒCcïƒç…|fú(;WÅÙd ø¨ñƒ¶P "FÌðüˬŠÕnq&Ö¶dÍ/ª|vcã‡U™s z¿î½mRÇs;ÂU­ZAj ŠaÍ‚–·#ëï¶ßÌعŎ“²¹—*ýº njżÕ!CÍõ…ŒØl—@!e]ÕÛq®Å8d06ˆg¥·_“’cçÓÐiº.ÚB͵]UGý‡¡¤jé™s²ö^Û,A·.iBΑw÷»ì™žÞ›lÉpv.ß•ùxŒÖeÍ™åfMBv´ñ!ÇØéB9WK¬tËëÇlNË p7F!ìݺ”5®o 5[ëU£oš™5oNöÂá‘ÉÞ;=îÉ` Ö‚,ëÈ.twcôO’\2ò:Š"”a6ŸˆònšZ÷ê3¬ «¥÷c&éÎã]ÏØPÃ=,‘˜·~Wè2Ý1Škã4µ´,ïf‹P¡ ¿(†ˆöLÐ÷?¹¶÷¦Å~33DÊn£’7Æ8d°aÒv"bGcxþçsùFÉé›aÖÝç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-ÛbKGDÿÿÿ ½§“ pHYs.Á.ÁOa‘tIMEÛ Ü‹ŽB IDATxÚì½Ù’äH’-v€ï±fVfVuuõ,Ý}—&ï_(ü:~ÚýŠP(!g†3Ów¦§»«²*—ÈØ|”ª S àX|‰¥Ê!’î€ÁÔÌ`ÐåUÀ( €Üï¨øîª¸vS ÓŸv—þFéwT|·é~Ö^Tº·}Vþ¾Ifßæ>eÞ$WW™Q’ï1d.÷wŸ2£tÞ.2—Û8´ÌØ ÿQæz™Ë÷l#sÝó±™Ñðy[™³Š¾µ‘ ý¯“¹ª®—&™7õ¶ü®íx–ûº/™iÃûbW¹š¾Ãe®{žêÖ¶¹¼^ÚÈL5º·Ù¿3ÚÊ\îÇ¡dî2?ÏEfÿ3«¸çSʵ\+^æ¶:XÝ8×ÉÜEÛ—Ìuûp™Ñbï*s•®Mu2' FD›ƒ·¼¶î:Þâ\nèC—ï›dy.2ãɼi“ê*ǾúßVŽmeæg"3½p™©á\z‚µ=ÉLZÛ!ó¶ßÑ–×Zf®Ùè€ãg 3¶O 3=c™w}ÿ?µÌôŒdÞÇ»jŸ2o2L¸ãº§-dÞexÇùì*sç¾FÎÚ ’¥Ôvrª®Ýæ Om¸ç&뮩ÿme¦†ëÑQfÚ³Ìh™ö,s—¿·‘{”™<Ïô ‘–™dæÖ6ö$3¶üŽ[Î3öø<ï£ÿO)3ZÊŒenëÁíº§£¡¿ÛÊŒ-d®[‡–[ÈÌÏXæ¶ïæ]e¦ȼ«2ºo™ñH2w•­N§lûž †ïÚÊ|H]{[™;¿/< ÃÀ}† Vá¦Â& ¨ÎûG¼KÔÐfÝ}¹a‘µ•y“¥‡-eάۮ2£Afî(s9ôÕVfn)s]ûM×v•¹ ó˜2S‹~VyZºÊL¹’Ò$s9„Ú$35ȼ Öô˜2×í#Maê6óŒ†yn#sÕx7­çìËŒdÎjöñl È·”¹ªQ‹wÕ®2SÍ3ÙFfnxç7 7ÌsÖÐV™©Å>´™›" Ï]fúÈÌžgnqm”•t¼lƒ1ĬkÓõÎ:ÝÉž¾6øñ.ŸsƒõÔÅ¢æ ßs‹vÛÊL{¹­ç·‹çè)eÞÅC·­'õ¹ËÌh¡¢eÞõsné…iÓ§£Ì‡‘™w\]¼m»ÊÌ{”y—g8Ï]dæʼ©´…¼Mrí²¶÷½g?…Ìûz7óï)ê 3×ÌÓK’ù¥Î3ðóѵ[˼ Dª*¼Ó%lÓ&4³ \¨)µ Œd“ÌØRæ.ÆÊ.2ÓžeÆ–2ó/Df<Á<7­ï6ÊAè×cC¤ð2ã‘enj-”¦ç"sW™ö%3v”™jÖ`W…¥i÷!sE¥i¿x,™»ì/Eæ}:HvÑ+¨£Æ;¾×žƒÌØBæ.{u™»@¤êt‘}ËŒ-eÞU×®{ïѦ‚.ÂmÃloãMêb©s7ð±eÞæþ/Mæ}ÜW™·9v•y×¾Ê|”ù(óñ8¿ã© úŽ9—Ýñ8Çãxã;è86Çãxüœ¦´âÁjƒ5«JOWEö(Wº­J9Ö¦ýòçu£ºTÆ})2×¥x|,™«0›ðx\sm›%s›´“»È\U{”¹®ÂècÈŒyö!sÙ¨a]?™ëædß2·Ix”¹S¼© lØÛêd®JS‹=˼©Jü¡eÞ”žú©d®ÓêÆèç"s6¿­>R·v¶‘¹íç»È¼«ÖUæ.úÈ/FæCs0€ýWÒ|λ_ªÌM ø¥÷Ù·£ÌG™_ªÓé(óád~.ëý2oC„}n2ï«Íç ócë#G™2?°DŽÇñ8Çãxãq<ŽÇñ8Çc/ǦB{›Ž6!îò¹u•]»´Wn[ö{—k÷-3=B¿·õºq™»@#hOcÝԗǹnŒëBõÏUæºû·…·t•™!2ïãy~е 4ÃËž»ÌÔò>û–™¶é©dn“:„Ì»¾§¶•™vØv‘y—ç¡«Ì­ƒ½T™»´¹ÍÚÞVnÞ¢ÏJæh׌öáÆÃrâ»Üð7*îÇ}jês“̼Cÿv•Ø\Rždj£ÔíSæ&ù©ƒÌMóŒg2ÏÏYæ¶íTõ™wXÏÛ*êü„2ïú ïcž·¹þ±dîR%ù1dîònhûlmStk[™éȼËÚÞu<ºÈ×U/جx o)3ÿŒeÆç¹Ë:çdæ}µM¿ö©kÓºvk™ ÍÒš:D-<Uß6$ªMßmº·èk›¢tuãÓF溾—‰8‡”¹®ÈËQæç!s›û5m MžÈmdæšßÉ2—¯ËHo/Efª¹î%ÊÜÄkº?Õ¼§ü5M2·‰à…ÊŒïê¦(HS_Û$x ™©aŽ-3·Ðaö)s›uÙ%b¿O™­wn#ó&}ä—(sí:MHÞU¹ÁóÀ5V(mh‹±™áÞä1nºgµEÖµ°&›d®ú¬Ì´¥wª‹ÌUç=7™¹Å·©ý§’™>G™ëž½M›Ç¦¾ÖÉÜ´®¨å¹»Ê\e¤½™7µ‘íIæªs6í_»ÈœÕ¼tšž;2Tg{j™7eÌZ>×uýk’¹éùØôâ 2ó2£ƒÌuŠV•|mݲ¡ÔfRÍž·ÌY>R%s¶AyÍZ8ˆ7ÉÜFY|™‰ôÏ6k­Iæ:½ªê™ØVfÞBfÔ죩kï2Ïm"0yž*‹Ô. ÷#›ÿåɼÏìB¿D™ŸÃñK•ùçš9k—ç«ÌÏi^›Þ;m¼]e~êýk2w]G)ó6m¶IÁÞUÎ_ŠÌ|7ÇÕvnsW½ó‘dÞëô³ûXÏÎ.ó¼ùâ=Ïû!æŽð|>¦ÌŒî˜eÞq~xǹç=Îñ>dæGžgÞrÌw™/î0o/Mfr¯^*_Â@ÔUfNæ¬NE°~?–Þ¹í}ø™¬íg%óÏ)M-¿ ¾«…þ<zfóJÇ1þY>çt\[É{”ùe?ë±¶éåUÓ´Ç¥ßûz¥¦b5>vŽÛ'K²ë¢™ŽjÓKÓž›q(OÿÑzz™øg(onòø¼ì¾†øËÌϤ~¢qâgö|e>¾O.ï%×ïĉ‘;Í£àû8RÙ±"D¢-UÃt•²Š?Ö4Ÿ™AUŒMYEÚX=uä¨rº¿*|´¡UL÷ºÕY×:°Ìè 3Õ<]mÊÅWÉTÕ>dFƒìmdŽjdÎYfn1Ï»ÊL óUŒÉ¾eŽjÖþ¡e®º¶.Ïü&™yÃXnz^éÀ2£a¯é"3¶œg´d¦–Æ/·ÜÿÚÊXæ:M¥ÌÜrÏGÍ;«Næmk-ìCæ¶ïæ:9ÛÈÜæyyÎ2ozoìQfÒÿð}KïÄüñhùŒG2V¾{,¤éˆUAg "y­õÚLFdúFî;rêXÖFfFFΩÐs ‹ iŸÙõ3rã”pè÷ÁôÎ*]¢ƒÌurÕ~÷”ºv“ÎØVæº=I á¸ÅCÞ´éVÝ£)»F[ïf—BOè¸9Ô‘ýÚâS»ök>ï²ùÖýN-û°/™é‘enÓÆ>dn»ÆºÈ|(ÏKÛèíØ¿ºõ¶ë<·Y´…ÌÀnd½mdîº~Ú~»ÊÜõyk›õgÓúÚFæ6$Û&™w)|ÕVæ¶k«í<£ƒÌû*.ÛFæ&Yš²ä´Y#meÞµ°l›:mä©8‡¹Úöµ?ˆ‚J–$<Ëg–ð3°°6¿C)(æY©ý!€¡žCz}Äzž~ް䢯bÒsh‘ kÛ"Bd‚Ý}lÎX#f¹ÞŒâ’íÞE¯Ú w>XbmÞÿmu‚.ï©6{â¾uí.ºQ[ÇVåÚH¶Ø€¸…w¼ça›BÛAã u[™y‡>u=èȼë<<…ÌxD™}tñÌ¿$™÷QÙøk{[h_{[×èËcÊÜå:zd™·qRÐÍOS;¼åõô2ó–í0§Úû!Öv{mƒÌ¬ÆCùX¨r@ N§ª€/ ˜©±*r(²Ò#¿f §F1°¢ ´oJ$é¹)'Ãà ú¦kæj(ô˜[t„]TÄÑcן¸t¯”CÄf½µÅ.=î>žçÇÔ;S×ÞIæd‹ÓŽíÁ“ÔµTã}¡dÞÇ$êÅ}™·‡ÇRVhÇþ?wxžž“áÔµ‡\Û]ö¶CðpèË|c±If:ô„óÓ¦C¼›%ó6í<Öžýdò’niŠ-á¡’[ÞBLùOõßmHœ¸0eœ[U¾ã’šµv‘‘5€˜$¢aS꫸1…ëz(–z¨+‰aÆé=æäˆå-QcÃ:ëËÌŒµ©Ê3ÒqZáaB¯5ßêÖíyïyL½sÛýäÑu°äÀ/À¶fýS)kÇÌS?ÿ¾SO×Çñ8®•—.3ûú’3.Ò’¡PÅÃ'TÃæÉ)é1$"àÕ'ƒJÀ„ÄฅD< ×žª¿Òë—ú/…K×^Š‡ÑŒ¥Þ€Í5ábTÀ²ÜµvŒ ˜)ŠEUfå9€‰3Š .µ¨»Ý½üRŸú%l\m¬°*ÌkƶÖTÉ®øÌ}ËÜvñˆá܃È\ExÆæê)e.G™÷sß§–¹‰öÒdn»Çe.~Ï/ìyî"3mù¼ïãÝü3’Ù²7eäil0"Ñ)—ã0xPt©§Æ ³(Þ} FÌ©~¿€@§Êù’@¤ccNrN=²¬R}ìªêžݘquÔ%†²Mb@XûÕ˜(4ë^ÛZ;Cȧ©µÇl 1Œ¬žJ mcŽѰq‹t\¸A#íßâ9ë/^×~ªJÞ?WÉ/Uæ&‚Û±ÂóQæ£Ì?§ÓQæ—¿—Bæ§®^þcO¢X[tÁ L‘*óY…Ž˜b3¼Þ¸Þ–÷ç’SèGz®¢MiNôï…c–hÂÂÃ0%üÒoãxŒP„%1BÔ#WàÕ‰9Ü3'oð¿2ð®ôš•]à×Ãà^‹%ª£=„ˆ kÿÈÉkã3ÑïæjP­àŒ%—ŒÒ1pÌ‹^Û­w¶n;Áñ8Çãxãq<ŽÇñèxXÄb"ù8Bú”n0Êö\Zq®Á£"U¦À‡°{™¢Lú¦Xæ¦{oœa°§´dX*ìÆŸ0X“.×úçC¤ÚÞg‹{§¸[¿oµý¥þÕØµ™žÓs÷˜«Êjc`}<…ÀÃæn´ýÅhH†"¡=rrG8œŸý—}lk`ìšîÞ¯Cd:ÊÜÝÒÝTãç<Ï/õxŒL;G™2ÿ\eÞG:í§ó§Þ'Ÿ›Ì¾óܯ¨úLN¦ÌÆî5Éš6C})…Ø©hƒº„xîgªH›§ß¼õ¦t÷õwF ~g¾¨w¢¬gî¾Æy¸c`¬çÞ£z1â·ÕáX!À£Rý>Ñ¿ÁÀ=¯!°¬º9§Rm›P,Ý–ªQ1Õ1˜8W¹g‘‚D™" <“Ø¥õí¡µ:ÈÚ~zç£glmSh¯iƒ¬ MøÄW©*˜Sî©+\4çn+óƒÊ8{’¹êïmdƆï7µ¿™»Ö è"3jîÙUf:°ÌÔ°¾!³Ï È¥Ï5ÏuÏÍ>dæ-dn»¶¹fÏé"ó¶óœ¡9ǾŸç¶5ö%sù»¶27µÝTH­©–ǦÏêŠ=n+s›÷L—ë÷)ó¦õÑå½õX2g¨/rÆ-ÖÛ¡d®è¿©*®1¹ìƒÒ} ‰H2‘ˤ”²(½'$¿›òœAàI÷YH׺0¥ÀwX©"ªõ32M3›f’‰i¨ÆÔب"£/"C¢§ŒX÷„Ka\ãJœh;#32>ý{1V¾bàZá[yÝ«‹¡ãÄÞHÓyÎ FB¢çE& ˸,uÜú,†ÌšelÖ%ù5Hl©ÝWíM:¶xžŸJ×ÞV?k󞪕9ih¬‹%³õ³‹å„†‰éJÄ{n2¢”;wx ì{ÎÛ»ÕµÙ>æ`‚]Š‘›Iµ^£KjÍ]eFçÂãÈ©MÄ®iæmçùáº"â¼½8Ҵ˺ØEæÇ* Ùözî(/?âúà=œ³Ì´CÛñÜïSæMÏuX[îÙ+U\­ž5—¸Ÿ¹ýÃAaŠÐ¢µªøžC”ö!‡¶n Þú¹=ô 4ÝëZ¯íQˆª,œý•è½ï´o °¢€k=çRû²@Èò5,¥ì¹~¶V%~…¥0¾ÄÜ]»äЃ-ݸûº‘Û${ÎÐéAÈÝäåѱ¯I`YV<Õø¹åÀG#Àº2 ÿYŽDDZvM´-„×r]BQAnû8ò#?¯¼Å^›v$y?¾Ì¿"ì‘ä}”ù—+sË{#Ë‚cRŒ‚P¨Ö¼…øq,í³+Ìüœçù9G’÷aÛüÈìyTú¼Ê¶­R('ºäŒƒV ]÷Wpöø3g´@ Ž!€©*ísˆç¿¯Q‘¾*öF”î!ð-<¼j¬m®Ô0¹ÕÈ„¥»íø ÀŒ€×ª0ÿEU˵3P*ßÀOzϱÇËø#)€3g¸ØõÖ¯_k»ŸÔXŠ!‘k•y¦í%Œ”¥3Fì_"µq‰¸/¼±³Ëš2cÐ ZÙ.kð1uíÖmG¨x2P_q+©JäÜÕ“Ö¥(ʦÄÑþE@5VX[™iÏ2SœÛÈŒ™é2·éû¶2c2ã dn3—/MfXfÞBf´”{’¹Ô’(D²L®cFþ/Ëì;û^®"ùÇÞ ©—9M Qd–ˆI™±™»½x¨Ãâ†yF‹yFÌ]àÛÊL ï¢.2£…ÌÜpÿ® ÞAfl1ϼÅ<7ÈLȾ1 )æšn¶Šù0N…O/ëkCDŽó0`1&NH2<øŽ€w$ç­]»©*âŸôßµBbVÈ$U-“Àz(TOô…EԣψKꌊ˜Åp˜CàB3íw‹Zj›¦ Tž‘Žƒñ#ŒhÍÎÀé«ßSØÓœDþIú\"‰ÄX6,ËeFÇR(0bàRe™ø;ØÖÒHÊÈRÕêù±ŽÃ_dÀÒßS5ìjˆD5ÏY¬óƒ*c`R›°ëÝâëAäçÇÔµÛ¾·Ûè#uûíˆT›‡l!º¶Ãî±Mÿy‡Ïv‘¹ z™ùÉܶOûê?ï8÷Ûȼé¥ý’enëÉÝVfê(3oqÍ.2·û.Šä}–¦íDZ*‚Q wz(s1²Lîk‘ŒÁ€±p…¨ä»mdÛ}<ö÷ý¶óÜvÖÖ0:Ôxbß®ƒÞíËÃùÌdŽ8(ð¦åP¤ŽIîcp$óšü¨ç õçXô vdŠt¢÷=‡(é#7Î wž}Ÿ¸q2"º-Ë{Uô{\Ìäd$t(,¬¯ÆÊ *6Ôsïô>§ üéioXRãžBŒb5`œ ¶ì Îe†ÔBjÛò~këd­ãÚemçó¦²fRTËÖà£êÚmuÒ¶ïñýØ&‹Ô®abÚs{MÞ…®äCË|xÁQæÇ—™0f/AæÇ†Æìg¿0E|»6šÏϲý\k‰¤øì^6çkÀÈÉ–µñU¬ÝBAÂRAÆUÉÈxr]{_{GáyN°9ÛË>²uí,wh³.+H—l%u$Ó¶´.2SK™ëú½mÖ™§™:ÌóK’¹ ¤â9ÈÜ%»Ð®sv‘¹®íÝeöäèîûR—My{™Óˆ"ªˆ>åÌ2VX!Mó9a0àŽ%FÕD1¶]û—¹yŸºgŒj{6p!ÚAæ®ãѦ/ÛÈÜ5£ÒÉ\Fn3Ä«gþTÏùRjg¥í0‡Ÿ õf3ä§/Æn‘†*¥0REÕ8Þ'kÛ«Òw›|P±¶›rH+;†d8º/EC|} #V™áà1ÿC׿[åUô4BÓ#àœ¥îDÆÂ[°è„7¬¸Þ±0ïúXÇø'„By= Ñ3¾"gh­¢uY+jåÎË´3×'«4nEñR¸ Õû³ö±àÞë|£ó;ÐhÅ•FURãà ¦¾ûœŒP#ÄîeÆe³‚‚f$®PLhH(V#Õò\2OÃÆxH¡ÒzÜU×&ì/ \]»óžžlaéÔq&Ú†võnS‡öÍ|„®ÞjÚr“-§\|©2£ãõ»æ€Þ‡Ì]dxé2oãØum£å³\­ª»÷~döæ®27ËU&]7_Gù|sŸCÔ…7z‹ÒH’pîj%/—òwWÏs3)|OµvZ—Mœ’6ëºÎÓÆ–¹k·º=»+ô¨ N{ß2w„XGŠÕOØeB€’—TI«8ð_üÀ_à%–6Õ0ï6“uIÃ}äïi…«Q±t¢¦z¯¬„—œÌex;x!S‹qÄPò1#„8"©óªûbq‰*í)…1±¨F£Xø7&,\ ËÊ4'9Çøeû„@ý-€zîbX±»gÈà 5Æ:o±‹|¤úYB![Ó-#ËTÑ!B‰6¹ÕèxCÀÿ­ÆÀŠBŠÜ÷H¯r~ª÷dˆ“]_´?…ÌVV+d©óC$òšAðŽÁEãÑöè!…ªå‘Þsf\ µZYe{àO¼ß^ÚF×ÞfÝÆ(ÙåÝÌÉÊu܈6]ß6=å>´:cˆvyÛ>í»àÊcɼ/Eyg™©¸Xù RË·nÖ y@™wYÛϱÏÛN]en·¶‰¶‘¹ù|6I´€¹ÝuƒËeµAÇyªO¹¹^`±„r38’¤º/QT†aík]l;ÏmÛáî_û–¹«Ã‚v0N¶}7Jæ–‡’¡Ê&•”óâM7ÔWú÷¸÷"û¢wIØÙ ‘Ôq.˜ê—k¡ =άfhìºqi)¬"”Ø«ÌõÛR§z9 •+³ ?FÌ&‹\@"!‹ݘ"¤”½ 0V·T¯÷ÚN7}¯cý­ïõÜ ¯"ƒÈq£²Yv«!9~ž—R ’Ç$çõ чh˜E^øAÛ4ƒæ÷xÖ"çßjŸ¾×~ØÆªçûªè·2H€ +’…@ŒɸMÕ°°±ŸQÅX¢/+ø7t/ç˜BtåDûg°°<ï ºö“éÛVò~*%eß ¿°þ÷ªÙd>×=™Œbn”¶qk3}a‹ã…§«È™ØÏÁ\L»W hbóá£*›Œ ;¿ÞÀ‘Ÿ>.Q  —krl—Ú¶køü¸þ²ÞUú;kæ.÷ ú‰þ³T©—ª8¿Õó>«mhoƒÁ˜×ßW»ŠTÑ£¾¯Î¡X™;mñˆØÏ{U<½|)¦­5¹G©ZM¦2yÜä2%?U…ù“Ž—U´î¹6}µj3–zÞ„º':žŸõ³wÚ—?!D ×}Fùêå‰×Î(ŠTa'§P/ÔxïÖC1$¦ÚÎ+¿_øZûð•ÏÚcH´á7.i±9^!pYl. böJÏûÞÉöÙ÷-B„e^Z¾RºÉdòÛ½{ÎXŽI¢I?º1[·XS;;NždÿH¶èô>a$þï} Â&½3ªx’wÎì Û÷¢xΰ°½zÉúáqå@%C€­$*Š|^ŽØù¶ü਋5c7-Âçdް‘öuht[¸P—õ´ëó¼OÈ>®ÛemÓ^ú`FQ3´©h4q!²ŒADµäïõ:D+¬Âå0C¢(3³´·^w•¹Mö»CB¤ÚîEUé·ÍÖæ^ûˆ.ÖA,Ûö¿Ëº>ÔsÙòÝH¸Ì’Šid=vý ‡¯T!ýH…¹ÞÃHÄFz¾B1+”)ë¶{GÆÑ@àkt‘9ë¸}:ríô!ž"M_J%ø?²š ™¦_…óüÇúV›!ÔÈ8ÕÏÎX¼ï+ƒ:)Ô+7¸t.Õ(˜éuÚ¿÷|§ÆÈ{5NÆ”¹)Ëu¶ôjgôœâq wß3Ћ‚¡q¢Jü@ˆžSί!0§ÓL¢Vw$÷ÿ ÆÔZ [56ÌUÖ½ Ktm­´ÿ±ƒAY±½ ’lTS…Éõ*~¯Ô‹4vFFæÜ’V1}àûï²›‘[ç‰ÎƒU÷E±/]›wxÖ·…l€ì)ÓÔvI‡ÕæÜ®©.ÛÈÌÏ\f<#™wN_?´á çzA·/6?U^!>¥{:ŸúØü,õÈÞúëÖzð¬Ø§üm’¹É#õ27Qv’9’¬”VôO_G4pö¿Wãœмa¡¯ ÊÂVƶõ©ÿ„Ôx`—ƒ2€ïµýW²îÝ L1ڥŭšçº9¤†uÀ-çyS¦­6óŒ-d¦šsªû×ï%™5}âÖûW™×ÿð2G¹~?”9ŠãqàH¼{GøñÇ2j³Ì9¨ð™Fï÷9WÖ‰€$!ıô…ˆÕøØEæ`(‰ÌÛ®ípŽÉưÛ<7§4ï2ÏmÞS»ËÜþyn›NÛ<œ$^ü„ì—ùÌ)G¹±ÐFf÷»e òs5tÊ´)œV1ª./ÕËž×­P/ò9€3Eí×…¸×óßø@âíN)tï^Û^xú׊êEZ Úd6H’½9RÍ icïH*B›¼ÞPÓ j®Œ7aFRæÚ·ÓÆ–ÝHSʾGÈH5p碦Ï4¹,YV™»¯p¥ŒB-‹•y í¾Ó{_AÈõ‡º3—æÖ¢'à>_“ôñBºÏêѨ±r¡? Ú3Ô¶,5î a>ì>¹ñEʵÐèÅR ˆ‰ösÉÀJgíÓGÝG,ëÄx K]ïCùuwNòù$3V¬2t½Ž2]±ö×"?械+¢Hažû«rimG:gcg´\ ¤À]@2z-Ê.R  ›ÞŸ„Â9{vºv²AA¦úMkãæŠ†Mœj”êhÌD¨Ï a3t$Ú0èÏMf4ÈŒ ýªcneE(jù"£¹š0ËQýË)´ÁÎÈÜ8ôšD+€§®±ÌÉl¼‹ª{¯Ò<ù¾E .T•MôÍjI¬ 9d[ÕP¥íR7FÎ †Žó\·x: —>ã k“7¸ÑÚÎs{”9xè «D5Âò;•28ñFWkˆ0ìSf¹F}BšVGIÖ§~Ÿ°\2‰F#Õ<µHñãY&†B“ËBE9t*ð;"D#Š——’±êæF $A¡ò÷.ól2Çq"ëSq\Å¢œòÈOyÔ¥×ãg±Øä¼jr©göǦ}-q”´tªXÏ]=‡mvT/³':ƒ4åªÖH7Èì 1\0nñ<;ÏmB!婲Y•,°(ª¶. <s )GYQ‘Ÿk*Ô˜‚Çûoü»þ>‹€u¦Y“ôºLù =§¤kåiUªç°" Ö¹‹Uác^©2¾¢`Ôp…ž`¤Ýµ~î·µŽ…¥ŽÍw#VƒiJÀ÷™Üï[ÿa ®ö{­Š¿E%¬ÎÇÂq0à6’9?Õº©*ÞP%û–E‘ýLÀ@ 3Ò>!P¬¡e9Òq´"vH¦+Þ²¸û½þþž‚ÄõA˜Bq»žö=rën˜É½-²ñkƒŠIŒš¿º:ç~Ôy›»ÈÎ"’ïÏt<à½ÿÀ¸.$ªSß«|C夬Õà±HʉJ¬×xÝJ×ÄEbR/ë›ÍÉJ×Ò©®£}..5³¦À±µå3IE*Oa«ˆ4m®ƒ€Ù:<¨®ÝdTTéÚ…”w }7½»l¨Ôò…ÖÔŸ6^·}T;>„ÌûŒ{£Åë2Îû’¹ÓܦÚäZùåC7Qa…GòVÞìëVËsà|.kiŸR (E0¿–fŒvŸç.ÏGÓ<ó!dÜÜ=Ìì4 D&MÛÝ/I çêñ¢ä2íGæbßÉE\Pº‡¿FŒ€Á@d´ŸÔPÑÕÆJªvKëµ¹à<"bãE–—psCèõ„ŸÇœã3e?ÔÌh³®îeÒ/*ÕßpW2ò¨‰—Uæ®xÞ`@5¶¸åœÕ­mn)Úå¹dl_»bÛçYåM`G ÇAØ4ålKgpø¦ Œ«RÖSÏ­qúê²ëï†o_ pÌ£ÜwãXï§ ý$=h¦Šæµó‡FlA¤ò]z­QTf×^ Ô>@£ M“ê=¾¦$'2W%ŽÂ¹zš#§ˆú ÿ¦ôZ16ï3ã߉SÇ?iTæ â­·qêï_Üõ¦ÔÎ)¼-/5BòYϹÖñŽ4ªÁ*†[ÄÈàJs5nNδÍd¬N!ü‡k=çí¯eªÊ2V­œêaP­bØØ›4¡­é;H´ÉàN¬<…w®=SÈ™lm‰-°¬`65žX#&otœÿŠéº×µfP±;ýù !]ò¢ô†î¹h†¯üm-£—1Cï]dÎ"/±»Ægز5˜¹µ^Þ¿bçÈ­¸(ׯ´´uºö®3ëÔ5xÛnî]”ÑMd;ê(X—<ém^&]eÞÅâ=½ÄêÚÛµÆÈ>e¦¶Bp½ª¡(¸ð¹l˜dê  ¯h“¯ 6kæk2”g‚´g.Ša{õ¤ÍÄýŽƒ”<|•o3ÏØñyä-¯ÝÝ!À̈¢p¿Á@"ëu4J”ÒÓÓ"¡n™ƒ’ËÌ;>_^iîöœ‹‘@…šõF€!„j0 —Š–rHQ¹oË¥Œ%c±Â÷ù¹ñE‚á2úšm8£ÃBRç\¦Jk:’ìUƒA1bãÏ—WÔ¡ ¸ºuÍ /Ý]÷å]ò&¨ây$ª†ˆƒÇµuâ5wÏÌ·3öœroÑââ››f¥p•™¶sí Ž¾zÅ'ªÄ3€k%2/Tyò‘ÃÖ³*Õß"^3cåD;ÀNy^SÑÇfAPSü¬€Ÿy­BóH ‰Ä)αS4ÍCÞwг)‚>mˆ[6f3õæ¾ß¾ç:_ÿË"¤X!=SjçªøÒ3p¤ð5€_‘DrÎP$4Ÿè¸ÆÒß^pàY°FTf.ð7×χzí€_éç–ªõ†„Ë!µOJ†VD m$öÄãçb»%.ÒóÖ…Æ€LT±îÃ¥ÕŠ¥8¶jÜ6é,ÜŽ ¤Ê·Ç×µ™êµ+ÔßjÙ+íÇâ\å>EZ Dúž®?[ìHã¤06¦âø.KÆgÁuû—ñA,Qæ Ê—Ì›uí¨)BÛÅA^§Kö°¤ãMö‘†“öÜÞ. Ú±Ím í’Vt™iãX™²õ¦¶aѵ62¢à» MZ9ëØmíyô!QXÔÚ½Œnf¯Oó±Mk]#sÜ``(0–[D/,cøz÷yÞf==u¡=ñª{òò|î…‡×űD9LáškPX="Ú˜îu›¨MˆÂBºLÙ&å= ÙY~1ÛþmÚsíü^9¤ ¼z% ‹øØ¸ÍçÌÇÀ|.mÌçÀÅ0nnBŸ ®T„Žu?ÒT WŶ‚<6Gý~(2X&ÆGòo.È{zVöžN{Ëö¨áÁÅ]²l4±B`Lù7eÝ Ì9u")›Õ»ÞWålQºW¦ŠîÅq¹Ë„‚reè «5pãvº±z¶Í‹»¦5jÁß[a2S ï ɽ†D/¦Î“ /#ù·0>ÆÇ£;,½ª/Ð6Ôˆ\©ÒO+´–qq<¼GzŽ%H]Õí…[Õ z«Š­µodx“åk•Ù¼ï™þ|Phn¢J1±ŒïÂ"–&Õž­Dñ5‚ü!úCÝXjDÃ"c]ßð…C4ÆŒóðQÛ`H±ž“)ThH2nNäÿ‘ì"‰ÎÇЪ{½×œÙ¿§kî'-Bh\™SÒ×8ðcfzm¢ã™RHÑ;Q¯ôŸ­ã¹sö(]D!»Ôœ‚˜¹ù2íÆRçZQ¿ž[Ïæµè\¿¤™¶Å’¡½÷⣭ í2}éc~·m*З,s—Ïv–Ù¿Ê4Y&&ú³T‡r[¹r?”OAëÏ-•&b XWÓNÑWÛ67†Û#IºÎÕÒ^o W¶’Óc¨ç%*sn”Ù|öo­˜Åì‰çyK/m÷ôv¤^š(ƒa0æsFšESþq÷1åu¹ä<ãÒh$¿ Œ‡÷ 8÷èïCæ8¢ö` }[­8Wš£H¢ëu#ËDN‘sXÒdb×WßÛ®á´y~.ã$œ «.ã4——2¾}õ¾"8ë503®¯}äAŒ—õš285§(5x”eÕòß[¤f>—±°(…pF87¸ªÉÝ\X;>5p1zÕf>÷8TšÚ†ïË“CÁ¼ëkņ÷\„#*)Ãæi÷ÊŠ)óVùÙ¼Ök[—¢õ„[ÚY3jfos¤÷^"dÖYiôb ½A¨ì|ª2ÿ<¦§2§Îè±¾ùÀÏÀáò-e-¹s£’ç8shƒŠ¥~¥}ú„t¥džug°‹’vs–~œÒMäO8d2xNÆA^«BýƒFXR÷q‘úw©)}WúÌÝÛnàÖŽÐm~—Y’R³SWg©møJÞ3•ëNûfQ‡XCëçõô«É¿q¨Ü}§JóÐ¥6£hÎA±¶èUÌ®²¹®ms®8ÌÝBïi_ßk‡Î8ÉÜ\’3J/9dìi ä€jœA¸K׆qM|ý¡qqéýÄE„2÷|Œäÿ-Öñ"/«ÒeÏóJÇ#uš˜E¹É³«®]»Ï%57ÝÄ4ïÑØTX¯*«Ç&RÊ&ÏU]¡6™sš¼Iæ¦,Bu27eÚyv2³Âæì uÌöºAð}ªƒ„´­†Ü$sË4~enËæßVæŠl­dÞ8fоè\ Ñ%Á¼å¹¬Í.Τ¯4=¬2X(Ì©Aæ‚0q1Ó•Œ‹œxd%‚4 8]Îùäòë³b:VÞ­t›m!³µ=pÕÈ!VMÏÛ¦y¦–sÚæÙ¨v$¯q³Ì̄Ʉ1R~cÊìx劵(ÅâÉ6c"Ë(‡ñȧCcÂhD˜Íêå«&]Gî;.q*¨`h Àx,ž~ñüf³ Q™qwGZÔ˜L¤Ïi2XÖ`ÜÞÌz=`:µïäÞáÁš‚bÇbXL§–v–ðáåi\mlz=«å’óñ•lVL.sa±2‹Á¹¢?ÖA~ª2Ú…yÎMo–þ˜ s+c½^K¿ Î #ˆ[ö+ƒ|‰ŒfH„õiµ2ˆ¨‚»²yžÛíÙh¹£áYkÃgêò<»Ïb¡Éò—ài”ÃÌeQÊSb*<êJ›•’Ÿ¿¦"ý&¥)2(UÉ×r¯ŸM‰)p8R¸ÔBû{OE8–eí1˜T_ÛLÕ€X)©ÙÈËé[¸vÖ¥y¶ªØ–“ aÓWš«<#UÌîT±´Ô®gjDÝøWÿM¯¹Cà ,fäaQÆ¿0xÓ2 ЬALùð[…-UçH`?2T/ Y‹ ¾FÞr'ªH9ŒÉ€dŽïTN›ƒJõ(DHáR±Vµ¶êÔ+ ô+ýþ–İÈëk»ÀY$†i¡ˆŸÞëµöÉ¢Z¯XÆÈÖsì`ZQ$Ê}ì"+ä+¾³È²VÃd¢ó~êŒˆÄÆ0þEZzNí9±êÛ@HyÛ·…­/±tÂuø•¦ñ=Õç…uÞÒž½÷.²1a1ÊŒü}¡÷y`ÿ® /&…±É³µiÿîuí'%É!ûÖµ7íO•FFÒ„¡ê¸9Öñ+Úà\[bP[·Yçí=´Ìü dæ-eÞ¸È>t)¾Êžë"ãö\‹Â½Ù¤mK†óÄ¡6F­,™BŒ¬î…½~FDS½Ï@_ܶ7w¹5‹µ7ÿ­æ Ñ›Ï²]Q Ô( •ãmå©ö»‡€&®›çŠH ö=ÏÏD–Q4¥Zæ4f3Âhäù¬J;劶)Õ‘(Âw|F)fΕð,C®Ô£¥œ®6èÂà0›îETàEôzÁšL€³³ Ïz-бÁœ¢ Ó%y: DîñØ8#œ_+™ÄK?ww¡ŸË¥´-J4åð§óséãÇZ¤VSÛ&‰EI‚ü>Îf)m{=™‡"”ŒrãÀÚ*FpšªC‡s²LæÓÏGó.E–‘ʃq°^ÃE­¨©*F•lÝe™ŒÝ|^­¤[V±Ð^×=´YæíÎßò]EW¸:¶k®Uɲt™žÃ)ì"k«™QHy1Såç“*½„ï-ŸÁHªYñкµ*V‰ó¢ÅRÄÚVaP®¾8–³Ïà\Cý{EácžÛM{¬Õ1Èœâ Êz¤ù D^*¬$R…É¢2Fbþ áIü? ]ù?ô¾1‹ÌV÷ÀHÚF Î+Žs0zª¨<æ!mjæ¼þpŠDÓ×F¾8ÂÿZ¿cõ‚[4gh •yN¡h\ 5Ðy5tæ<æ±¶9âP8Άý;ѹ¶Êès}›Å:§±«b}£óôFÇuèŒRƒkåŒ3èÚ0ÓÀ­«™ö™!ms¸Ö97CÐêexøZä"Qfxé|¡÷µuãìöù³¿O öGal À}âø}÷LTðT¿?×v>@2¤}äÐG3Ò#×ÏH#+¾-Ë•’´gœo¥wRÃþÔp0ÚM$»®8×}sˆk!3?B¿÷.ó_!QËb)_b™µNE^Í{¡©eoÐEèu—2÷ Îe´8£ÞëÖûÅA¨\L4 ôü ½,AŽnå µ^¹P*®´P,Yã\·•L£#®ÎGm*Ÿ2ïäÀkûṺºªÂÌóƒˆÇl&ʶ)Ð≮‚)½Ã¡œgJ¿O£êLf.Ôp°T§1üáó¦[›–Q*Ž-u+4õ«ñÂ?Qè9o›8;~ónÅ1pϸ¹‘ë³ ¸¿9ge’ÁIŒ Îùb$žJz=9wµ’¶ŒÐ¾\2noÃX‰a!·Äg£²6ÎÎÑÜŠ >¬!m ‡"ïrYÎâµi­p¡j¸õÉÆñâBŒ­»;¹·ÍÏ ÇšõƒQþ̧µ­ÊVåÛ´9ö™ÆdkÓË´YæÃî½¥lܱû=)툣5^‚)ã‘ˬd;llŠ´^lÊΉ£–¾ñÞh‘3ÃàñvívR¿%\ܽÆnWÌ åT àÿ‡ ;8ÏÿÄýë9Owævéê Ý0äWV@ÏîiÜ„¾Â{<‡bÀbr¯}é½ÿ¢žæÿ Éü4Q=Q¹¬}ãL,´Ý1$“¥¾Ó1?q2õ4×¶®P¬mü Sàÿ €÷,Êè!K’A±&ZpðÆÖ€¦²µy™i;·ÎÊ´vÃçê›êùºpŒ;ÿZÏ»Ô~FÀ2oõ!°¢kýÎ*jû¨…ÍAßÎ_ÚC‘»råÖ˜Püʭ؃avçÖëØÍ óÃGu©›k;C÷'É/Uö7f F™UOJk™Ý|ô¢7ÈP—ܯ'jÄÝ;c7s<ÂÃô46ÏMêëîzgÒà}¬‚ÛðÏ}Û6Ê…©ªŠÜui³ª›ŠÎ =…Ì]äjºŸ— e®«z[æIœÉ²›Óà¥F¥þùJ0T̹V)³ùàò¤t–¤‘ âv2G pª1÷u0~hðH`WlÌ+§²Ìõ\ †µ’GŸ œ ¯Ø»Áª+Øh.b€-_ÇÜm3·õ¥¤¼”rCæ–`~8Mü›VóŒælSá»ÙL”ɯ¿¾|!ÌfÕk”YpÿãqðÌK5óN³zµE]­Cg¤°\”gg2ïu€HŒÊ8›7ÆÀ;(GXë5矌ˆÍL ÓʰZ¨Ñr œœH߯®„s1‰rþæM€ö,—˜…ß`™¦¾þZ HË%ãô”py)ðþíß .%Šy’TL¸¬òF#ÖHHàù-–ÉŠƱÁ¼Â<[*ÛõšP,8åa^—¡mÖ‘““—{õ*ÃÍÀÕLæáPŒ-3ò̸óp4‹ I]+°X~7HY•énÅ×ë¬`DXÕóbT£å}(óC>NÕs‘µô¶y)Sð¸{3ég>q¶‘·¿QXÓ*eb@Á(I¦Ü`.—bH¡º)¯êS¦?hѹ¹‹vô\Øoí£ªèd¥´š6}—ÖRšÞ˜7Ÿ4:‘‰÷Þ”ðžÃ+Ý…'V [1\-‡>EÔÚˆ‡¾Ô…7Ó{ZÚjh¬ncÆÖH•ý¥ŽïW$c÷¿)éû%Ö–k˜9¢wì ­>ÍœdÖW™¿h4h¨Šë d@ŒY²MjtÀgZš+Çà†¼ì‚¶3 Ms›…Z–¾4Öëo5je‘¤ž:Ôè˜Õ˜0N‰¹èx˜¡hÞÐ ×¾>/‘Â̦jÈθ¨x›Ñf2'jì7(£ü­œ×(Y²-Æ#:¤›]0ËÜ«]¯!4DUе¨L8È6a½Ó¾Žf•ã/õó„Ô´ És–¸(DJÅ$æ8…phví>ÕŸ)‡,[6Þ „Šäf(²ÎóĨd7ÏU{S^±BïÑI×Þ°‡!KöèÝÜfCÝåhR’·iï±úüX×S—y‹ÝV––üg>¸©Çÿµú'æNË] Δ¾r[oälüÔùHÌ£o÷´t²sl_ÈÎÏfÅõXø¡“çÌùp\4$÷Øk1vÚĪƒÆP^dæk0ÒÒ© .%.ÅYÛ¤XŒ(t|ø÷ÜÞŠòøæ(š>l-eŒåR`R77ÐJÖA[.åï»»@>öžøPźZ©åšsx•À¤ŠY‡,uªWŨ02²-}«õ¯Ø1&ìï^O¾¿ºF#ä©cÍ“>øÏx L§Âw0ˆÓt |þªo›÷}>i{-º0Èï‹…'YƘÍÄ:;}±‘ ã²Xq;óà \‹@˜¼1T­X‡=ÅÆe8 ×Y_m>-U®7"¼±X伄óË™¬üœÔÌ ÆC‰"_C¥x} ®sÃcZìOe;ÿ “ IDAT roÑ‹RüÉÎ󾿀ßN(d9ðŸÂΖ“Zm7X”Câ•ÇH§DA©û¤JüÀycÍ»mžùÌyEÏÜ®tçÄIœÝ¢*‰Û-3…Ú¼Ò½³Ñ"­€*Ò–qéV•)ŸúÖ¸DHÇk<SÚ§Xþ¡3Ð ÇNNY´ŠÙ×7zÞ%¤¢øG„ B‚TŸ:cî÷ÈY䌯s9²Ÿ °ÌQ¯õ³3•e©}Jt=ÜqHbÊöP ˆoÔàü? µæPça¥ãd†Ó½[kf ÜÛnæ¢@çjú5aQ•…‹|M°Ðu×w ¬Ïek1sëÆ|psÙÛ0uØ{£_©qjð0Kó;U®Ègp0Ÿë2ròÕŠvZòØzŽÆP·ÄAÔHוE€–é|ŽŒR#Õð ?!$þ·ÔË#ÕºR„ôÍ+7ýàšÍ±3måN— Â8J‰“ïÁÙ&%8oŠ`tÍ­¿K.þ*Oé6ÅàvÊÍ»CŸë=ºû5^Ú’÷&ó7zÑ¿ÊÖE–û¡‚¹g}¥@ì•´J [ê=€/ôÞ+„¢ä^'…Œâa‹£Bfé›+yWɬþZ;˜”më¶µ}ëÀ%nÛëôµŽÃ `Ëèí_mæ¡ :•¸qµ€ú]€‰ÑÜA§2 ñ•àSøU¬WâöØðn†l–?þ(Ư-Êòtú°Mƒ¨n^àB“‰(Èòõ ÄãM¹"j ~¹Þ…y§í;;ü9–†UMÊXI+KÎØ(¾Cƒ@Â6… V¼N|3îî$º¦26–)i±.Äɉ bT<)ð$Ò1™Pa2£æÕ+`µ"ÜÝ!/ž·^ÇÝóXÆcÊ#N6Aqç®×Ò§‡¼<ˆ"HŸå§A´†Cʹ)¾írm _í»Ìå±ù,Äé\}Œ*%ÞC®äž#d×eY÷‚x› wíö÷–ÕâmÇëSÎË+XÖS%×»`º[}P˜ NÁ·,GgÎëºv»p¢÷#$»ÕÏn••v¯¥z…=°5/~çªT¹{åvZ{>?©2ø‘‚‚jdc#ŸAˆº–:õ+ºPhΙÖRXyE86-íÆéHÝb8eß`*#ÈÖk5¾¦Ž'p£Ÿýÿª‘„5‡7ËÌ)²‘ƒK Õ 0Lª|‚„Bõ!‡Êç¿ÑùMœ‚9¥P…ûÔ %¤ÿ[&­‹™½}Õ°4èQX¿ºD¨Àm$í×:o}×ß”CÔËÒÞÞh¿îŒ£;Wéz¥‘”Ãi ÒfFÄTÇË)Œâm´É•ÊöBªæ3˜Ÿs‚Als•UÇáèãá÷¶'&ÓSý7¦°Ö‡îY°4Ñ&ÃÂq\š© Å"‡–.yîÖ£eÕêkäé{„Šò¶îï)p¡ìyº äu¯½ôJF.•öJ=’»è Š@J”œ¾]a:m¼CŒbUŸªö¸!BÁÎ6ãd©âÚ&™q`™ÑAæ¬Üž³µ›°Á­d¾Qã?ü^½ë–<²:ÅK€>üÛðšâTþåʱA}@öÖ©0Š0dõ#p¦©Z#€NU.{ÝÜYŒ^²wÝ<TEóÒ—`Td†xTú¥Í`Ë‹aÃCy…°¥%QÈ–ù^¸ažËsY}÷%ª“ã×jä(zßTöõISëf>U2Ú®í}Úð цuTµ±d¸»˜Ô»w⿽-ÎMš²*ë’zv>^½’ñšÍDNÉ’d¼‚(âœ<áN%†¸y)M9vøÂq’‰ Y¢Ê2¯×”8RmšÇœ0«òlUY–áúšprÂH‘k2á$Æk¥mISÛë‰0f89±T·¬ð'§ EŒ^1™X¦-I‡{w'õ<˜Ó©ô÷õkàîŽqÿJÔëe¹ad)s³Œs(™U÷ƈ¤‰åœ¤þp’9ëõ$;Ø|.Q“ÑH"U«•Í癥ªÖa–œ8–ù1¢ýÃùá<Õ®U'/W—µ“å†é×ë¬f®ùìJÆ«Ž³Qå4ã Ÿƒ¯Õ…Ø­y£¿VlÂ!{NfÐ!(ˆO»R¥£ŸEÅ Èõ3Qæn©ØÅPO8¸¤PòÓ2]«<ÑmoÅ¡T©¢—òêŠ]Ö…#0þ–qÇä”À;7S®Àˆƒ!•h›S•Ù*›2ÅY¨<žCf2‘'qU·}ÊÓKßm2¼‘Ïûü&›g3îûjŸ9hîæŽ]deE!Zã>@Çtá}+ôÐÀÈÕÚðhÔÁ’- ]Ï›®ïJòî)êR,©é^Û¼Cæü\ÍfÄD/'™ÇÎoÕ“mŒþðןÉöF‹RgS—ReNÔ»nÖ‘Fþ¬ 1$+¤ÖOƒ±Â þä‚ðÖŽ½žR½Ÿ¤*r3—ôk²íå  ›ÈÆü")ÈŠž%ƒY²ï MÊ Ù¹¢o­Zd€‹Ì8n’òÚœ¥­Q¡(R2ºK¬Ad³ˆù*=¹¼íÚ.Æ€Š{KÛ$ ÂÅxõJHÍï߇ëÖëÀO°êÕi*Éý½ÜÓWÉÆÄȲèA¤Ï ¹Íçr¾©óä,‹’ÝK`3IÞá?ÒŸÕ ¸½%‰·>Ieð©ñ˜pvÆ9!Ë Æðé!I2 ‡”×Â Ä 02öé©@›V+i×ê|,Œ$‰°\†ˆÅxL8?—ÈÐ| ýÝß××!ÛÕÙ™À¤¦Si·ß'DQ–ó|mв²o\ ›ç:˜”o6Æý¾D V«âu!:‚á`FœI‚‚'µ<®«~_Œ1Ÿ=ªLRw–W]¥˜•JŒÈzb{™»Œ´ö„x€ƒ‡Ó`cuƒ Õ³¾"à6 Êž‡¤¥ÇÖ S™zO­Ò°¥ˆí©â=ÐNÏÕ»ýõ¯x¯ÆÂO*ÊÄŒ ÕÒíXkÒLð/iY-¥­¥[»7‹/fÆÆ@'ìk•Ù’¾vØØI#bÆÆ=Bµè•*Ðæö2Dê þõ]¡43nY"ñy¥žþ·jðô`-w©Q!EæÞ+Àø/€Rwa7³\)ŸH”Þq&ʰ˜_#@¥Ì9s‘‘+žœº(ÉoØ SÖÕk>E ;÷YŒ®•þëÜeÚÞšç”ù$Êѧ͸S#Ô¯‡>BEîko8(Ôµ±4ÁF2­ÆÇÒ½Bf!ŽŸCñ nÔ×ÈõBÚ>+dËŠŽ5j5t™¹ö}¡ë|D!ݘ@‚4RªZpxGnŒ×*«‘³Iù¯œáì-ÜFhÛ™i=W’g“‘['™ƒ£õôù5÷=…ÈÞÜE™"m7æ`XÆÒ>§î9Œµ¯1iD†úIËp±<çO­®´Qb;DÚ*Ç›ÂÉ]ûÒ¦ý*S;þ±dÞË1è À¯D¡Ï³&ÕɬIõ «ÄP£?©Gÿ×-kpO]s)esš%ûjQÐÈ.Uñ½FžÚ5÷¿y´¬Í7` 9ð€TÝjžY‹Ž‘SË,mH^²' Áßs1 Ñ•üž8Ý…{"uõ1JQ‰ÜpÉÂÜP*‰sÔ øþžFGv… Íï’·Ó¸¶©uCêÝö·ÏŸ%CÒë×¢p L*(u’!É2 ..D¡ö$ãM5 ,B!é[¥h[¿/FÍz-ÑåR”XKkžýM}6ãæÛo%ñâ°•ðu<^½áîNþ­VÂ?H”eØ¢œè½X@+rK®¯–¦Œëk(¬Èˆâ”g²ê÷CEÈÝÁ@™+ÑÕúaY¨á|˜q•ª‡Î8 å7$MÑOÓzE;IHÓ¿†Cv)gC„¨˜¸øÓHï‹Eø{± ¼ÒºÁ§ÊóãÛ³{”ù8¶No£(oX–R—1ŸÓÞ‡OIì Ÿ·óûÁ0á#ç‘4ïðÌáÄá*òf¨®‡/¤ÿл+ÖµŒ0ú’bõŒ€¿“˜5®L¡D yCÞ©§ùÑSåÆª'ß;ƒ`ZrÇaú3B)S¾û±”c…üÄÎÃ;Ò>}Ö™Þo IÃúk½öÆS¨a;Íj˜ gŒPŸÀ ½kçQ^!ðF^i$莇ÉS´!Ã&çÊJ8æùRHøn…Ì\"‹ûúö. FÎðV \È$Ò‚…B¶"WÀïV"…`ã C–<½œ°¬¤§nZrDûû£¤ªÍ)>‡EÚÏ †Ì]ó"ƒFÙTß'­7¬Vb }¤© - `J:o‘Ëëê x÷N &YFydb84Q”Ô¯¾ ýbÁy” dþ)>Ì!Ó±Bs}mõ„`Ù|V¢8æBrƒÚŒFŒ³3Q$ÿô'伂÷ï…ca©hß¾•ˆÉõµñ)B á[­„À~vúÐïï‚òºVA{4#B J¿â˜µ0 iúZ«fN…zoߊ’,¼10æsù)°)Îa]ÞÓocê# !ÕïÃ=K"9œ×´ˆ"ίéõdlã8ðX6 M%á\É·:VŲfÙýͰ96èšðyPɉ°,Y› L–w8”âƒÂýñ©qÃZ(_ÈHV,èh¿s‹÷(w2˾sã0ßù#ì<¾ÖFÊ¥ÂX”±’Á!ša•lî9(Mç=ýÀÀ·š^sè”ÇÛy ç=vð­õòš2xeÊ!Y̰Âlf$êy}§r}TÅ3n8ò5$RðY!1KÄöD•ÚWîWªxšÒ—¸}§Ø>æ*7ÔïF¼Ú™Fb|X!:ËÆ4PåùÀ¯8DP|Ƥ{•ÙÆ„8äÊ™;âõ ‡¢oK‡Û¿Óñý1ÓT¿j¨Ltž?"d27Ó’öÖx'sˆJÎè°Œò§2,oÎjs¥ëà'§æ°fLa];è”tlEÿî5š°Œ E9WƒËóg,åjœÉØB•æ3SK`o»ÏÚ~^ß‚B65›ç•Žû€‚kÓ¢]‰êK‰~÷Ê»;ÍûÏAÁ7bûÈ¢jðX¤l¥÷'Q¨¥1Óþ{ÊaÌ ÚöAÇvä’ $Ú‡÷š2xæÖÙ+h8Q™®Ây¬2ß9c¥OŃ3zúÎЉ)€eÖjÔåYáKBìBò.+ß]Sò†6Êmu%yÕäº*'rW’wU¿»È¼W’w¹~ƒPB&V¢²ú72õåPмNfÖwÐ$µ8Yã¡øäÉúøÏÁ'Å=QüÙÊÈÜÉBb轿å±XÙTÏ»P؃íhÿøR£"¾ÓÝØ}Æ·ƒ`¯gn˜Ÿ µ°¨ÃúU£ð ¢Slñ‰º?ŠaÅÿ ¾Ö’74ø3ò,X¹á¡X]›€ÌêvhUqÎt¼â`dð(Œ7õ‚Ÿ-ãàË`-±–ûçb!‡s‚Ã4Ó”µjtp/D-Ìgš¥u𨊕óâj!óŽ:÷ÆÝY¯ëÖv5±ýú¸¼$|üÈŠí—sDÉ”øëzm†‡ð8Ì0hCHïõX Û¢ôl–)ŒI”÷ $J=+‚g$Þ^Õ€ \_‡¢x?þ(çÇ¢,¿~ ѽ~-ЩÅBä:9NOMñ5Ü¿)Ê’¦w6“L[Ìz=1*$ûåսŻ/äééTùw±(²’IŠó‚yww¤QŸIi0c ŒOyÿÈœÒRî®V\µ˜S†8–lYççRµ;Ë8/°·^‰<ü ц,‡FY‘^OäŸÍä¾’jØ ì ÎkŒH´'ö}49+ÁŸPë·û±ŸuÀ·am[5t[û–Þ·X`²äÍ ‹äŠhàOùRW4c§”šÑÀÁ°z±Õsp^Ø B²\ Õ¼ä#Å¢_r04n\b¬í­¤ØSUB,íX•Ý«a¡£™ÁB8(_†“7 ’,ä ´~¯ø7…8ḏ¢x'ªhk.RÂs¤JW_bøègBúe…¬Ä€½™~ÞwQ–µq#ÔóÛW(Ð…*›wdéLaR‰ƒ9y¦•Ïÿ^Ç&!ùþ‹aä³PÔÐRΦªž(aÚ0þkï”|ƒ ,t½|!f} `©5I¾h}T×W àG­Abƈ¥š=×y¾Ö¾ö åä³èÅŠ‹ùïÕ`µñ1ï|FE8\”=ôÜ[qÁ^"( å¡,YæAÝz’@ëœ(Í ‚§Z¿,µI"–±6#,â@üŸ ¤Ñ5ùÖNæX!g3]Ϭ¬7ü†e}F.gQSôGYÈyi®ÃµÞ³—…HÑÌŒ];ì4Ÿ¿’dO³Hˆ%*˜(¼ò KÚæSE/m>)²œ9ÃÃ2˜­ÕèÊœ©1u¦É"Wë#Q#%åðl÷©B-Þ¤;cW’÷6×IÞÛBN6[}Y¶A²¢ß¹Ç¢¯ÊûÔÕ Û}AÈ\}¡Kù[É…À?øŸú­¢M3å5XÙŸóà· oj†¦z^&Qf€þü¹, y]Ðg}´H}ZÇ”bÝÆ¶u O¢HJ“£u…•»ŒS™ þ^«Úš¸Ç íh”¿Rƒ"qP±„Äy£²q/ ¤Wš…* ûiz¶”*L-uþAr©Ý2Ý6,ºt¦YºØê{j™ãk¢ºvÄÕ!±¼¢dUàºe²*Ñ-ø åXý‡äïê²ó9pyéS˜†´¯áISùœžŠ_.̶ G/°¤ð™¥r•LSJQb')r7"'•'‰q$oßJÄÅÈÓ«ðÍ7µä3_éúÃQ:û}Âå%\¶¡Sb&ÜÞ ŒKˆÛ!‚1Êï§§ê¼] ‡c>7rrƒ5ɘÉç’EJúcF‚O«Úï[p®$LáŠPžÊÕ{ýG#”êKë€X‹^O"*''rþý=åcbv;×S›Ay"Ù~®s—¹5³Ô(Œ=ðK‹jcŸÅ2[R¨?±pñ|[Ï(»¦$› sóöúŽàƒ àO¨ Í`¥0³À7º^nWag[_'92.…–Îø5¹BÔcæðdQí{Šbõqèóaóvç`‚Ä`5¸AÚnt WS’`›DÐÒÔ¼Ö>ßê=>j›ï2l]Û|Q1éÂÊဂË÷LŸI_KçÎ×m홼i­k'h&D7At¨…G¿-¨M%ïM©*,>—`Sué77ÉÜÄÉxT™•ˆLP/6.)pW]É|DK%QÇJÖ6D¢¥GÕG‡‡! IÐÂx–GäÿR#ã;NAÓº’U¾N%Û¿AxU•*è^·S®9’–W…~¥¬SÙ†IaW¬‘î»m. <¯5¢‘‘¦ÍÅ\ñ^@вV¨.•mƒlÜ~„dOåq&B^RˆßkT‚C´‚¡[ƒçgx¾Š)òFP×LPœ:—¿e¯ÒG;_‡=px†/* ÿ³ ï™|Ö¾UC‡‹uæó ÔEÆešâ¯Q°JÊ–nTá0DDÜïxËzmU«« *ŵ}}-)W?} ÞáÑH¼ÖÛ™N——¤0kzølIUkQj)çcTiµå3ŽÅ~{+ éhĹ"÷t*2žžëµD1Lɼ¼¹–KÆ»wblÌf"Ã|¼{'Y¤˜Å`™ÏI ŠúåK¸×d"í7äô”ps¼{Ǹ¿°°ñX ™ù\"§§œÃ‚,Uª§§2þRWC RÒç©$.O&büô•<ï!ƒ•À‚Dær±8E6c¼~-c0ŸKûãq ÑdÊÈõÆ é÷IBÎ#’éJÚîõ„ª¼Ž„³#ƤÁšæs©rwÇšŽÖ $1‚̈ž‡¬‘U®ëõ B'k0M³¬nƒU‰„8Þ×ÈÒ©¡çzíÚa,û”‰´g9±êñúÙ™SÄS¡ZºgÄ sþÌAa£9VþÐ=?hÿ·Ö#ÇÁ1èQ^YJáBVJ÷Bç1á ü/´z÷JÝŽ–H 3è•#€>a¡Ÿ¬1"Y/£ øgC¦ß/Õ€›rînE¦\ ‰®#¼¡Pvxh•í6ŽFºN^!$YXiŸ:.‰k3V™§nóZ¹¨_Ͻ{Ï\„zm6•4ÀžPc¢¢6Œ:ÈT[˜RÕϦþ¿(™c€_Ÿ /œílÊ«ùîôqÀ÷bóÂnÎò·d‡VầÊ|¬QŽøwº]~P¥ß®óDh[¦§ZçaªüŽ^ð#yð7¼Hò1t›?Qx’«“ÊgnëZé Q,åtHî;ÿq;zrvºnc¢f¥L‘&…c‹ L´Í~ˆÂ0>è $£·+XÈÜdÕ¸-ã—¡6û `ü IDAT‡x4#ȸìæÕÔ…/º,èh¾2gx®ÂÖÇžDnÜ/s q–ajð(ó‚§i®¬R3gçŠb¨W U´—ËÍk{:OýÙòó,m,ççå’óȆy¿ËÒÄÎyÊXSê}*»¿y§"$÷ùê+¨òodj.¤‚]¯EÑ—JÛŒï¾c|ý5áŸÿY²c]^ìJê?œžÊuã1c63Â2ç°/f)>xy)ç.Àwßɹ''r݇rîǽé÷…"p/SÀÙE.‚|¦ ŸœpAZ¯¥í9ïßí-#Š„›"©[}„@ƨß®¯9çø¬IQ$ÆÁÝÜC*žs®ˆ'I0V,š`Q0Sìqq!YÆ®®  ç«®žjÕYãHˆŠ-¦)ãäD 7‹ØÌfœ¯ŸõÚÒËržµJ `œG),ó˜¯8n„ú¯¾’¹X­‚A]„O•2ÚÓ:U̳AD\ì8I€´gÕ€œÁÁª„Á ‰—yƳJ¥˜'Ã{ºí92O+s ¥~¯Rsß,&så‰)¹ |Ëb|«/UåôŽ1ּǤ0 Ë”sÆÀ¿h?_3ð½’SÍ}sà„$Úþk$ò+óÄsH6žGdT9Û›„Cõíž*6Nô–õÉ´oˆÙ#U¢mûkÅ´[>Á7*óŸUñþ¨×Nâ#¤¶†eH²ÌTÇdÍ!g¢)™±ã\»7DÌ’¥é…(XÄbýŰõ¼Ó§jTZf¯§ R®LP,¶ëx÷8¾Üm¦ã|­cm¸ü3Çwé9.…aZK§Ù͉ÿ®ê·ºcHMÊU19V,ZNÀ?ir‚ºBíÖ:çÚvŠ‘kk¦<r™Õz 5ó‘ã2D\S¡-úíÇ! Â)ßÞÒ9ߨ‘áÈ[%ù)«¡ùïü‡BÒl˜³`¨Q¡;.↺Ÿœ«‘~ëØ£æøH8ðR„Êrˆzô¸X©=vuW*uÞÚ,Ruì=«ÒÏí°šºÎF?§ß9ï¹P¡ÌÎwÁz+}DÎ8IÝ÷ç3X;8O_·âS]úälcrŠº‘¥?:ÅÞò¾¬”¼¥ûþøÍoäú››)Ê2LYås«¢mžwë×b!Ÿ/—b\}ù"ý·Ïí°Ú#qª¿(y¬¸)øVÏ$ð$¥®¥’5¼E1$R$÷2ˆÕÕU8Ï KF|·Ú#>]²ÁÉ™7ã}æ"—} k+ž¶ÆÃ¼rp°žò‘–~nzŸº’ Â5(íöpJ¡A\¦º‹\¸>$Î#j°ƒ¢ôô³axâ B†$ƒÏDU¸o4Šaù?ºóÍM2Ñû˜÷ÿ=B ‘/Î?„:}»Z»·æÂ)Ì&cä@§FÔ^¹ùz«ÿ,úðÙ½¦ªÄO´ßÿ®÷ºÐèÁTûª;Ë"ÿ ! mâúgÆÚ€\‹õÚK½þŽ·K>ž{Ç—Ê]`½¯emºtûS*çšsî¢7«€ƒÀ%B1{-]»§NÛðÙÆüÛËÒ§˜œk».QY¿r0œÄic÷ö¼q04S˜-¢ö-$k×”ïa>^›X¢m°º Š•µïJ}‡®ý¥ëãÂÉl8TÓ¼¦%-àÞ9§©X?NÒå¡ º­·/zÿ™®1¸¹3е²BñÉdzRpá³ÓrLºïVX8ãÞx gv7p8•(Ãó=e]à`t=öm <†qA/ Õ:B³/úÏ×HpÕ¼ ¯œOY&ïø´mvb® êC ¼€ç·Z“ã<îÆ¸BÈòm ßæî\‘9Ÿ=ÉrqøWiæPª¯õq±¨Å] Ù8tr(ÍÊxˆÜkÏP³¦ÄßC’~vçjVv:uFØL·¯ß9?ÇëàwáĽjÇÏ`Ç{ˆP$:­œ6t[ÃDïa~†s7–£^3"¼R%i¢©9oÒ4¿§OÙ §BihJ¬ˆ°V÷ Ž1vœ^­0^.ñ«Õ ?©‘!3¥m¹Ÿ ¾ý§Ÿ×ŸHÓâsbŠgÕqs# Ú`" –E)ŠD‰32±¥„MÓ¢riÑS(͸𜲂lʱ)¶D„¯¾å2Mƒ¡ÇÀO?I~û[à÷¿—¿ÿñEÑÿÍoDÁÿð9üf8$|ø rM&¡=ó–›Ñe™³.., ”6QüÍßÈ}&a1Ë}îîÄ`™ÏYSñJ›××c ²E „g"ã·XÈõ——RÌp±9°16^Í` ŸŸŸ‡¢„FÂÏœ×ÝŒ™ÿŸ»7Õ%MëÃ~OU}õíëÙîÒ·o/ÓÍÀ ÃÄ1±&‘mˆ"%!HÈR°ƒ¬È8`ƒmEš %Á€…œ‰,Í"ä%(BÉ$£xÌb¦§g¦§ïÖw9ç|ßùöZŸüñë\ø7ïØu9 —”îž8r\KîÆz¯>Ò€û:‚$±É{áƒÄ•3áJ‘–TÆ’*KB'ó`Jd–ø=só»Hã’É%‚R™u§®znŒÝÂá )Çy´ÞtÀ']¤“¸ŽãâÁ¥|â¸0+‹êge݉ޯžÅÚw%Ó;78ŽÐÎͯ<Ó?±¾“ƒ¿ÒA÷[ä7|9»$_‘s¶Üp§K 5”_¤ŽÅÏ…Ó€1 ºÙ u]n# àšÂnru䶺„5Y{îQŠd'vËVÛåÄ{×L´$Á« w®¶ ÍÔ¨ u¸Ðs0+›Ì%佉KjLg‰‘™8 W¦×“Ÿw{ r] KŒ8rMäV+cˆ‘[9½Êcñ«¹wìñ=\ô4IÉ­V]m¹ŠêU­û‚ƒ³uâö·3ˆ ]FwÖ>s½ô ‚;Wú·Ö_º$e-ot]àÝr‰†™‰ÛÌ•ÈJ]-¼G®²>wsºs¥(8Aù'=ÝÍßH9(Èöq٣ þ®éö™ë\Ó ùÂu{.4Юî+RˆÊL¥CÙU³ímÚ‚ÌÏÝø×®ûdAó¹–ã.\WÅ”“ì\fºÃCØøV^sÙUé—n>—Õ“¼ìÊVwÁ?Ä'ŒÞsÁÊ–\ÕÞ’ îÏ\¢knñSØÎиm!Ös»ñU.1߸Üu‡ãXêÃ`Né-M+)¸c\2ÞqɈ—o.5™pŽUR5> ‚ ^[–9—.Ào9дu0ÝüØ}½rçqtõz¥nN]¤Ñç@¤·çÁÊš±~ux“öë${×™YôR¬ý•è`ПA¢ñf¿£WιvÁcòæ;¡×INh£üÞIÓZ¼Ö¥Ål€È½’îËãO·ú‰K.ÉØºe"rËE©ŠV.ÉÑ‚¼w ˆÒ=Í„c—ß×®Y? -®ÔKwûôó±>Î;7èc{êаZ“ ß‹ Z½é}$ߥ·ó+\‡¦;¯–¸W¥Õ?Ï]•«ÒmgÉU¿®±‘cÕ?ÔÃ{÷5Ó1çQNÄyÞg &B‹3ŠªÂ ªìÚRÀ2MÑMtâs«Ö5zÌ(™Á ­©dA¼%‚s^ÃÕ$Ãù—àIý¾‡‹…@‡,1,¾é&mj¤]« [EÛºnH€T™[¶te¨ívè~Ó7 „¨ª$¹X¯¥kQ×B>^­ä³²€Õ¼¶Û°A|¬R_rÎû½œ¿‘•«JânWæÔ câ"rP°¶ Ò&ººnxv«ìAuL3 8÷ȹ¹LHÞ@-\ö 1\ÀÌ]‡­ƒ-tŽnA¸G‚È.…ªúÜa¬#cɈ ¨/õ>™¸$Ä:b·]r»¾zé*Ì1‚OÊ\ÿ[RjãXë÷}¨ ±ž›ŠÌ7R«•ë Ø×Ú9¹:E謕*e>éÍ\’bæ}KÝß_hiç‹\²»7ðÈÁzŒ”ˆ_Ç֢Йa7_©šëyè}º¿H÷R®„Æq+B66ÚÁÀ:¼Ý£¾#ÀÆŽçœn ÉH ¾ì3“ºBÄ™S_‹u{»Ÿöîúm]—f ãÙ»ëcªMÞ±&#¯¹[P‘d5®ÜÞ¤KÚ¹nƒrá–¥Zˆ×´–%›Z¡Ó@¹[ÇzÛªÇ-õå\H}ê£z„†FHÇÚm°¦ò €¤ŒècW#BêtbÍrùO‰kò³û…kЧªÄUèö•kÖ]"8£>NtŽZšl™-œ=º×ñÐä‚ KÊ»iähK4bu´ò|ƒnméÜj²BµBVÊ(¢Tº´QþFR×V {eØë2«*3Mê«4E¥ÕÞš"Ê¢ñn‡êààr mÆvb &÷f¿O« *I"A¼IʼnŒëjE”SãBm™ª"d5ŽÜ&;j€ª ¦&á*Ó&e+Aº‘–ŽB€iAí×~-áÚ5I,6ƒ7Æcjx¦ØdqYfjKtInw<n܃=o6øZ…¼Û•mÌ`(ȶæ950+"9îjEMòuû¶@žò8:2s8Ç|º6âß ëRl62Þ4•€_º¢0E$ž6ßIø¦òµ^S“¼Ùµì÷©I fr±KíŸöû¤Îî! µÎF–©ÝVKÆ´ßËø%É¡FÀ¤‰‰è<DÊòƱ¿i§½©÷F04gù«nóD²5°Àv*q^’JjÝ5¼ŠòõûËIÄÐJ¼¸²–³ƒ¬ûÞ ƒnŒ(ÀWŒ·¡P ò Œ+­ÌÆ.ôÄôÄ•yØu:ˆV­¿I¡zžº§M¡Äc ÍDoAË3Ü­ue6âø9è‰u+N´zÿ2‚œoäú҅΃{~>»ªÕÓ`|¯oš ]N²¦:¦géŽî÷Øñà‚þŠBÂt8¶í¸ k’$É‚á“5˜ 9ã·+iYf¦~}WÖK©‘+i :MXÆî…™”§Ú°íÍloæV~#FÏÝXìZX¢”RH´ÌÀÑœ£,q€»/ê¸à’ @Hçž8 ÝŸ½'Nž÷ÂAâ,R0µ³S…–ÝU7÷ZïŸ9|ë9L!"뺜êu\;ò—… ¬cÕ&‰6Vî™ÌÜsÈ:/•ã&tè2x;ÑëBe¨†kD! Þê½r€ oìèOõwçú|Í(¨Ém $ðŽëtöõÙ`‡yX:€ûÎ%½çzojRŸ8e­JÏJAa‹ mIÜuMþò«Ä~üK¬ò¿Óãíx\¼Yò@ï`üôV“ƒ/G‚p«¿ÍùÐé+€4‡¤–kýGRÁ¥ˆ¹Y&U–"4!èÒÀ¯ ‘«·Ø1Æúz:t¥±yÈei&Ë2ù¥QkET„úuœ$nì|º:[÷ª\‡ÎƒA³èBë%Dˆpê.´Óe( Ý ª2˜®iq¢µ‘¡ÎI®‹%19ú7&f|8t à%=—•Žc亊 ¥®÷‘¾úÈAÜÓ¿ëáz` I`®÷AÇv:DiŠ*Š0Öé =QÓTÕGœ¬.q(ߢˆŠ$ÁdÍLÇ©kîBÌq{ °‡.ú2`xmDý|‚É_KoÉŸáJH•§¶zÞ3½_Ûš—¹^™&1¤û6 Ê.GöG&„¦x¿3, 5‚ùò|4˜’äm$oÆqørÀžÞª—ÄŸ&”ê|þ-ùª¶Häšèü:#ë)šzxâù@n/TÛžYÌ݉Pj ¹F¸y\ô]s³ã^{‡ë·%ã6€¯Òmïh ~&!·\PŸº¥®–T¹¥Ášð3W×Û:®5ï]£p¯  ‡íh¢P¸¹2þÈ©K†¡aN]’,™š¸šÊÁ†ÈLo飨 ê©\îP§§õ¡¨kPU¡›¦ˆª Û“`¹¤äô´‘¾¤B„„Y–H"¬¢/FvY†ó¢ ™óœ¦H’ñv‹z4f3ðn'àr)•lã<ä¹|µï#aålœ¥óœ.™¼Y¥× .Æ·0?ˆ$A#kûµŽ†íêÔÇÇŒ§ž’Ñ \¦ tㆌ㥗ó¹üýáC f§S9Îÿq€d™I^Ë÷¦%fsÏ`){F³,¨1KRc‰‚tÄg!Me|ççY÷q3ÿëv/ËÞ¶ÛR©7Òô|~Ù1Ȱ^%vSóÙïeÌÆƒ0Ò¸q¬Šo‰R’Èq¬«`×D’,ù®)=YRÕïKâµ×BWd¿¿ª<&ï¢duƒ+YB!ûó;Kü½%ɤC •²}¯' ­©fÙ½c Œýó2É€$]#íU$q¬+×`„IŸè9GšÀ$,AùÄ%=Æî4ìÿAÒÖÆÔs&ÆÈS¸žGJ×ÒÚìÔñ?Ì~÷À•6kåb•gÍ_%v¼ÿ¬  åæLì¼0>4¹ˆ]·†90!c—Tx]ÌCåZk2µÑí®A L5må"¨¾ÊΞë=cÛ‚ŽÄËÑÄ VµÎ§qhzê—Qá²ÒY¡ã›ëXG 5²Ä‹B´ë:ˆvOú9j»u&"€ß‘Æûý[Mþ´|0Þʾbç\»Ìd¨žJCâÂ%µªQ@T²5 [qÌ?ûó?oþæoF·ÛEÍŒÑxÌ?þ·þþ×ððíD¸ÇŒ3]¡÷rpé…ú(°%)UŽÏ\—À–”6J•6œù5ï—|˜û®^6Õ:ŽãZ»Zc8ž»[Ú¿2´«Â4õé¸ÜrÅK÷jVÂ5ŸjB”¨ùß^ÿΣù›vô\f›^Åó.yðÂ5£ÍXðXêZsÇÃhégM:¾` –ûâÔjÈ IDATªJ]õíèx8ô§å8äJ£½F+KÔørYؼ?z¿FŽ¿Ñ$ʦ֕©5I8$âö¬BÇÙÕkiQЀÏ\aàfæ+sã±dœG¥‘^GçªÖnÜÊu§žÑµÄ`YSˆJÝ4sÿ@ÇÑãÿ¬]´vÊÖe²¼b úv¼ÿ­rµÆ[wòÆüý+rÎèo4Q'뽚Òí2’ 5eÓî‚ÁmxÐíÒú—þÿÑü~îŸü´{=ô“„>ý¯þFß`¶œžö*Šø”ò UZJ K&¹Ú 9=µÎõG‘¤4T<~ ;€ëqÆzû^Ó}©r6õ5hÖ:í-ˆhð±C¥B—¡BǬuÎ…ƒÁW‹X(ªÐÀß\Å+M¬ZšØ Bm€×zí6:}Ó\»-W#;Q)ºz"¦z¬u@Êt쌘ʘ1×ë|’*º¡Š‰sJ?p7R:A¤*WÜ2×ïªÂ.Šç9º=ÐNŽ’»$AÚïS+I¸ÚlPívDZA&ép5PR×à$a<ó ðè&QD%ÇuV»ŒTU—%eu³(âçö{ â˜6uÍånêõˆÓ”»E\a5Ñá!êÕJ°òÃ!7ÕüшZ“ S’ OÂfà äÇ|âX`ƒ±bãùQY\–åY $˜«*B»ÍÊèÐt*‰ÃÑ‘ìçñc1—‘´j®]·îÏ^ö?÷> Áêfܽ+nQˆãóphîÝrœóss¦f ¼e?̬A¹¬ Ó©œïz¸BN'=Öª<+wCöµÙf3àñcnÈÛý¾TíW+9«°§)p~.û!â¦Ãˆ{y¿Ï <ÊîõZæ´ÕâfÛº–}6£&Y2¿’^O‰Ík«ñ[,Hïv…S²XHbÇ,çQˆ y_’1@>oŒT\^ƒÖ'óo°0#k›ñ ™èY§B’Aj’ëVåy€Z1 WÈ¢~Ÿ±Ý Ù(" í¨OE$1 µHªL; ¬.€~È B¯Ã¨Ø—@Ü×þnÔ5RêÈ‹»ÝfìwŽˆmFU‘[ÍØl ˜n#i›QWO]¡W„í ƒÎArÕpÞ¢•*ÈtY±íj 6`Y‰®üT8^ÃÚâöoIb×Õmn¸da®°˜{*'ÜݨiN>r܆9–Õÿ DÒ=kOZš·®Ã°v}Ö—_hEøY +=V¬IBKç)sÄvûoÝÂ%SD?pé µ$~ãM2Ö[¼ÌHíi»sPÅêê5[iàn<3›CÜÍ3¼˜¶r jSmqº©A,SHn{ª¶×ý”®ódIÒWi¢t† Y™Q0[„޵Ôy»¥ê½î?×7ì.à-p¦cm;sºëÚ¥¨ôºXõz¯°ÎeÁØo®á]¦‘îǺyçZ½:ÑÄtÇÁßÃdbÍEÌ´$®|kí©Î[á92:|Æ›Øéñ2󙚙9æ®ëS¨ã¼I¬q£*S=Mº/ *èþ d´Ók0Òë“°Ì‹%:-]㯰ƒ²ã! u®"…=U𨵴s5wI)ËœÃWÈê†]©t=2œJOϹ|[F{ï¾ÄÊû;Ÿÿ³‚_½åîF¤·ÁA4Ϊ÷Ã+ËßΣ"“ÓÉßÿ=߃{FžÔ:Ð1‚5Ë-]·®¾”¹¦iq™çqIõ»ªöM~¿rMr#[ß‘× Cwãõ¹&Eç!h” L¡ëê1&SÛsµk:>Ö㾪KU’Ÿ†¢H®&V!,Ùm\6±3ZÓ‰[r ¯ÊžC!›pÝÎåç-s¾!‚ù¡Á¯”~É @]st¦Ÿ?GТè¸ñVy£²Z @]ר“»²DÇ8)K<,Kô¦SŒÚmdU…º®‘·Ûèª#w›ˆÖªFTˆÊé~ÞSO!:=ÅŽ­ºF½ßƒÚmqŒ]q¿ªè”y¿AQpÆŒ}ž£³\rÝí"Õd‡˜Qš‡„H¦2¦Sг ±ïyš† üf#¶™—,¥Ó 8wëRØß͵٠:=šÍ‚2Ó¢ö4ˆËxYŸùŒ¿Bî–1I×â•W$Ixê)O3^|Q¸_øB|[-ù}»-Aª©B­×B`øŽ¹6gg"C»^ΈÉìaØà>B7ðàÂ,û( ñâ8;3wo9‡»wåwE0æsjÌçÒ4ð8Ž/›ÑÍfrþÂoů, ð±v[Ö«“jˆ×Ë¥ìãø8¨|•%ƒ(B1:ᡘ"W§ƒ&ÛnåüŽeþîÜ‘kÙëÉ>= ÉÈÓw2®ˆuÁ,©0÷nûŒÍ«}oÉäv~·ÝJ’³X0F£ÀݱŽWYi[Þ‰mu¸‰:ڽЪ$EŒªŽ´µË’ûhõåë` dK ªUj‚Kª0Äʰ23Ê4ôf߇­ƒŒt]µ>×€"sÄQë­vèV¸Êrå¤2 &dJ7ME^Ë#Ň›øµ¹8[ÒRã²^Ÿ™¯üãAL4Y±êk—C§`ª½qoVÖr ¹+o\ãàÐÔrÜ ß;(R?0ï±Ý–0l\rÓÑUßdGmßs«îj eP°»Š‹·„*Ѥ‡Àº;w5±™ºëT¹·ÙÂÁ`&Wj£v¤îÚŸAd¦Žˆo†v;œØ€¼i„€‘·$ÍÞÖ êI³KRs—ûÜ®§çRºÔÞ´Wˆ^Ez}‚à¾íeRLêuæ"_>Ôí?¥ã<з÷–…Ë0q×Óîá¾vn¬ëg ZÇAÅu^öf7tÏ­ëÔa9#(JÙ›Úå¥îž†û½Ãs=Fé®­Øýsð— ù:®“ØA,6ÝÊÔø!‚|ƒR‘&ÙVØH9@É:zML[Ôü_z:? \6ôðMÓ´ì#ØÛó$häJi‚®PÞJÇáºoÔ`÷ô¼Ñþ߬+À¯ó•¾d ¯3†«ˆú-$ ô:û7ý5¿!¿A—£þ„¥ç ÷銺GÂ=¨‡J¬Öãžž03ÓOýôOãÆÍ›¸8?çÿ÷cÃÿô3?Ã]",™ÑÕ¥Žågƒôlš†å¬6e(öÔ?­°kL+í²t´’[ˆ×lõ§G^x¥JOsI>¸þC!œíµµ•sEàgtþúÚE ÝÇ^º#ürn«{¶v;ø†B®|}mÍ\é+™\›u®]–…DÊ2ÆYhâÓ€ïéþ±H‘v9bí4me^¨Ô}$ÚÚɼÒs2FjKç„U‹Ç¢Å-%ÀGzÎبeÙàµB­ªªB™¦¼ït0‹c^dÊâ ùÅ£(P0s7޹fF«ª(8¯*®÷{îç9ÚGG(ËÙ~Oåñ1—Ÿù ÇU%F|EA1o:$ªÛÌ(ÚmXT8ЏUUhm6L½•› êå¸uK Ëet:”T—£•Û-×yÎêBÍ ¥×#ŒF¬Õ~#×M =›/S<ŠcÆhÄM÷Ã`U› ðüóŒ[·¸éP¬VŒ‡iÊ8<”@}³1òwNG‹ª’j|¿ÏxáBž×xüX:í¶tBDUˆQBäŽc ²­2¾\Ö Õv[öo‰‡Uö÷{Ö c¹ Äîý¾n: ¯¼Âxî9Âù¹A¤³“eŒÓSÙ¾Õ’.PQ“ £Ûeu—–ΑH Ìg00!ËjˆA¢ÌåÙa2aœŸf³Z9)Ò-1•,fÆr)P¨áPÛcÔ5+¾FQÈš6µ¬N‡Ñn˱×k™S£b®/%]&`’¿â¼ÍŽ7º UÎÏ:Ý.c§ðãã„~¿ÆÙYHÞÒU+I¼nŒÍ p¿&cF3ʈ¤X«2È\±èó%„8®¥„2“ßmöÀñ¨JF+ÒšPÄ n+évÉRÕà,êuD²êZU±¨CÐ×Êp©QÍDµ´êA*¹{•âŽItê+…Lôj•­Ã Yh¥{§Ô…&3O8!9f¢SV‡â!@[“±Š÷,]•K ÒâKÙ)d%qo½‹:èö›úÔÀ`0,çÝv¤Xâ r¢Z?S×Á» YÕÛ5óŠ€]-c1~Ïònê\lu>IÏÏ”‡¦Ú)´ã`‰Õšä¼L™ê‚¥ÜÓ*Âá|ÍíÜ "1·kyÛ|Nço¯ÕýDƒ½˜C•|£ M‹£/Ñ. ×êס÷Jà "ñ¶–€ðÜ•Îî¨jùÝÄȹ:&ë0™?…]ûŽv&è¼CÒpø¹vXRJSƱ¹Ð„ò€€M­×DƒÙXç«d©’[Ä”k—nβïcÝßX¯ës:þn»pZË|´k© Oõ~´ráiÔ©:,÷zO+ð…KÀ¯ëý»Õär§ýÖîй^‹ÞÛî4Ò€º&`P^ÒF;©Æœ^Ý*Ò.ݪeË–&Yk}f{®ã°Ô{%ÒëvAÀuÉÉV[Ð;ÝÚå×—ôbåw´ô®ô^ï»®XâîéRïÑ\;OmÝ6Q7ùa4GohGcàÇþ¶ã™Ò.2^çoW¿^çwW·{=hQô&û£¿á ÆŠ·8Þ×ó;9çK×ÄÅ[8g­Ê“JÎ’ÞŠ”‘šÑ™Œk‡ Ðäd)ð#?ò#Ñ?øA\¿Žßø•_ÁóÏ=G?ø#?Bݺ¦ÿócÃŒˆºøÒ0@¥¢D9¶ UÄI9”ÉxHkEìí^‚bõKÐ: A-ºÐ-½uÕB¦ñÝØèõQ™\jå*ZÑH‚}ÚËgÉ8@OI2DZ ‰,(I DYŠTàŽf]W™ÚBÎ'Ò€Ÿ ›2Æz×O+üùJOd‰¦s€U©J!XdÊX©î#wÝÖûàˆÖÂ!õ.%E6Óˆ´ƒA*FH¦ÝÑ#¢Ç1q«…ˆb"”qŒMaQUTEu‰(mµÐ"zØn‹çÈv‹3¡(¢¬,)©kJêšvBôŽÒº¦”«É„&Y†¸,)¿yíå’ªª"fFT–´‹cš2SÀƒí´^Óév ÎsÚç9mW+¬-0B3áèµ–K®Z-*óÜí’VÝ ½^ÔHǶZÀpH Y{¿ Ú¢ÈÐ3ÏD¸wO KÛ-šíM~6M¥êÇ„›7gž!0Ghµ§§„{÷H«#œž |ªÛu§N'j`>eIxþy‘]Ýn ççÔø:ôûFæ–±™ãö~/Õ÷áPþD ¸Q2ÊóDBÎîõH+ëÔ¶Í—¢ªHƒtùÛnGøÚ¯•`¸Ó‘ÎA§C89! ’ƒ„ïl&ó1Fèõ×®ö{SÑŠ0È9U©i^„ãc9FQVí iJ¸}›ÿA„<§&2L¿/JZ› ¡®#YB%ûŠcÂh®aš’z~PCšÞn(Še¤ªX‹»¸ðŽÜ¤F}2~t‘*Uˆ"…¬‘Bä€Ý.ÒñÚm“HްÙÈñM®¸,圻]97#œo6r¼NGà[}5=ÌvZ¢( ƒ!aØgl–„ND Ä-§„^J²]JˆzÀnKà àˆTwž€ŒW„¸ò…ë!SäU­ÓP+äe@b˜Qm#ÖFAq'RHÐ8 Mfœ ,#v*RÖ˜‘ì÷BK-MZŒ+±½ñ ˆIÆ©ÒÑ@ƒ¿‡$ÇÝëÏøÌcK‡17ð(RÉþ;Ti幊$éIU&³EÀy¤ì?Ý àA$ À…BWú»œ‚4/QHÆÆnl;óÆ«A±wOkµ°Ú!I¶W>J‡$a2‚x®ók’ž]U±™ì®&Wi$ሤê~¨ãéé>ÒH•™b¶#`yÓ…žc¢ñNŸBI-‹ä85«Fr˜$Q3Rpå®E‹$qMõ{è×G$÷B­×hKaÛ@Ç9%IR½Æ'J‚k‚Ý$ÑéÂú Çm{UK¨H΢cÝDrÜ'ºOèEBØ¿ À™G2† =ç½ûÚ§Ëa—)@Uú}©×ºÔ{d¬×´)O…ä~d'© ýÝÈHÖ:vÖg&ÕyF¿´Ôsn›\o$ŸÛ’$ …ôY5ê€dÛ‡ U²gi¤Ç¿ˆäsõüÆ:—ÝÖÜ´èpß.7ÏVüè©úYI§«Gá².Õ…k c=d,S Ì6dÞXϳ ïß%É›¾D’7}B÷WŒä½Ó*·-UQPJ¢+Àpô¥)Z… 9§0$n»f]O»Ïø­ôø{?þq|üŸÀk»¿ñOÿ)ÿèßù;ø—?û³¸óä Þ¥$eÓp˜*­o|^;Ö`×À—­É»Æ-+yº MR¾íˆá÷¼WçÂÁšºâ(Î*äRⵂc8ud牎ᶎy§]…D;<#§±¡jTlk§¡iÉMekÄ–¥Xÿ~¦ç¬²·Ö™h€ ‡Ú%ék h&I²òLy+k—ZȇºïWu?×MÛBºQX9ÔŒ£GÌ8`檪pE8¸. A°jÕ|DÄUš‚ÓOÄI‚¸,9jµPn·H³Œs"ôêÄŒ4Ë·Z\!Î2Г'H¦S$yδX öYàsŸC\Hôóœ’ù?ñø‹á/ð¶®Q!cnw»xpzŠÿÀ oD÷ï#=<äêà…lRí6½^u#oŽgž‹70ý^:˥ɔã1ãñã`R—$‚›¿vMà72¾ð oÜwÇǵèõ%´<·×®I…ÿü\œº‡Cnd];À °ãìvôHwáâêÜ:R)g% \̨ͧÁ¼!âX`6æKA$]ƒ‰ï…ð&žÞ`©Öo·2Ží–q~.ÁÿsÏ ¡ÙˆïA³ñ›²•¹l÷ûÂð LÌ2çBèf¡é.˜—…\7nŒô zeNåË%7<1”ý/F®ææežeM7è37#ý+¡^ºI§3•ÿ|«eP«0fI®&éDÆÁÌ[¯ìö,&Ö{ TwtÖòÏ.†càä&p±úS)•Ô[ î0(•¾h@;’ây¼ÎˆzêAWŠo*@ÓŠ÷Â:]F4•~mµâ d$á>‡ÒFóúÓ,íPq¡{ƒoìRb%#NqÙaïŠJ îÔUJ fius… kpofW\Q™)8À›¦e§tÅaÌÆp0°Ä>ðÕøîï~ËåD›ÂQÑdÂü3?óàþýGºÂ÷9˜²• %:2xU¡úv=£ íùÁ¢Vµ¤B!R¦¨ÓÒsîëöfój åÚ͵‡KmtŒ´›ê<¦®S°ÑNÖ¡Îû¡ n†„Q#™¯´ÊþXƒ½ŠC2t¨ûÙ8nB_•¿NLöb÷}­–¡bþ÷z=ÌÐnìê¦áÈzÎf~h÷ÑVÅIIóú6Ìôí?âË ’.€ÏëùÛÏŠù7yÀ™ãœ»ŽKJ£óAFÕÜÅwNQ¬Ç‚ûè%ˆ¿§×î9íܘÆwÿ’ž78èFæÎõ:WŽ4~ä@á{ŠXf;8ÜB;COšéüš¤1f5)4™èØ)MõœZÔmwÆ—áY]íÄiú¼8À½Æºuª÷ÄÂ)suؾ#'ï7"J¿•ÏÑ›À‡¾TŽÅUÈÖ›Á´èK9çÄé}Ài< ”–£ì6çÌAs€íF¼þjã–™m„@J„GààÝh¬{øWé—èƒå¯`FUøçCõqè*|‰]cp„ «j»™ã$ªxU8ï$‹u9¾xTüH`Y¼Vˆ¥v ¶štTŽq¡æ ÁÜÞ ë48·Î€Ñºò´ U–i\\%.²DBQð— ôÎB²… m«$m6iZ{¯t9>°ÇQço£¡ÙÚqJæj(hT¹©rEΧÅ[JVÝØÕ5¦U%~Dhi7fFEX—¥Ðçº]v»t7IPTÐé E\q#ít¸\¯©½ß£Ój¡ÞíЊcdÝ.Zû=Ze‰Vžc²\"›L°/ t7æ^@ë•W¨—eXDV±Âû?ð<ûõ_?úÔ§ÐŽ"0åÌõl0 .€¬®ÚjX¶7„é4ÊÆ³¨k©‹ÚRpwn·%`N úÓT‹õZöS×ܸEåi¿—àóÖ-Ùn±ýÌfh`LÐ[r!Á¶k±`|ö³RŸÍ$áØï…Ÿ œŒÀ #ÆÑ‘t²LŽ-+K,©ÙŽ#ò³B&6u##·ößø!Q$_÷uô|v†ÆË¡ß¯1=’äæü<|Öø(i*ã9=•ÏFæ¶ó±„'ð.¶Ûà†½ÕòlfÒº}ÛnÑTúÍïÂæÖT—‚©Ÿ@¤Ökj`P¦pe ƒù˜ a]µùiâŠZàOQÌMÍÊä‹mžLÁÊäqÍ%]üI‚!Ÿ%XvI¨¬[õø±\¯²"AUZÞÐæ´ÆÇÀìDºQ®€Ö6À{Ff@±U~¾Z©RUKR +Ý’o¦l}BIJºÕ u¡ŽôjùHVrÜÑÕkè>K ·hçãó°šÔ§iþû·KOgrî¶ãj¤J 7ó,SkZib1¡ ®}tkÞ&õ:pü 4Mnuáö¶T‹w4¶`;p†~ðCø±ûoð:Ðæ¦ù;¿óãþý?6¸ŽóÄaÄS=¦A]ÖP˜ÌC --Éy³T·mÅo‡7pcÇjçg¦gú°`oà®Îk¬çNA&d©k´ ÷•KŒ<«„èÊ%‘C;@pÂΚV¢ÐÒîÃÖ’;÷CëfODÏ™Bdfw–xŒ\ò»soé¾ëX]èB5§ þµ£…Ä®4kŽæìö}ªótM+ã±Bv^ Ú‹M„Úýi÷kàÝÓß—ø.=ýÜÀS,€®àc÷¼n]ÉqéHÍ}½¦=ni+­ÔïÙuVúîÙ¹$Þ"–SˆLp©]3G¼J¥š”A¾Nôû ….5ÒºÖ„é¶ÞWv?^8fêÞq¦J ßÊ1d ¬ßUx• $¦`¦â·£"…·Ð™x;ŠJoÆñx'*RoÄ·x«Ý”·¥"¥]Šf¼™Vã 5½þ‡)ÑcåséœMûÀ<·¡@€ÍÌÿÛ_ÿëô ?ôCü¾÷¾·¡x}ý7~#U]óíðÈP¥Ü‡Têöh<ØÜ²—ÚÝ8P¤TùWVnQ4Bã¶Mª¢t¬AôˆµËSúèS€±áÒºÊéPûÆëC°1C”Ûë˜Ò½ ¥óÊý}ß ¥Låjõ‘ …\ "%LÛ£« Rí Î¥’*M¨àjxm¹N<Dr*ôsóÀ'Á¿ÝRuxÈñv‹b·¿ø"¢/|ÕjEÇ8¯*þªw¿ŸúÄ'ðÝßñ¸ ¡þQ™$ˆÑJS`¹Drv†u§#\€ÝN‚¼§Ÿ&Ìç¬&kÂS·g ùEŒ‹ Áú§©(Jåyp=> ýù9píšTðE¥HÔŒ¤:N¸~]’—‹ áq¤©(!m6’dˆÙáüœñä š±Hpúø1áÑ#ÆÍ›’¸¬”Œ9™..¸ T'“@| 伄?gƒäÀxb gI‹ÁÅdŽªÊø%F~ž‰)>pëáèH’£ª¢ÆwB|$ gæ¦S´^ã15ä÷¢O #š5]®3§Z,D¹©(dÿæŸaË37Á~«ºD≱\¢ñ5™ÏS-ŠH“nÌý,Iòû ‚G†À¡¤ó 0)“ýeÇãàF]ªÝµ*1”DÉdlÅ“Ãî/ù\šÊ6¦äUiȪ D¬Œ)Vs *€Ùxm´oŠKF7:êùÑ©b)Á\2êR%|#éz4Ñ\ñÕm¤ÝGÅ„z+zü‘ÃÕ¯h•ð9Äæ®V‡Gô5XÚèÊû-^Ò€Êø] HZU}ž€ÏpðÐðÝÊõXwWwàT *%¤š x‹‚lkä¸%F¨6˜QÉMÿ»q˜Î8ˆN‡ì(MÛü—ÿòwþø?ÇϨÕj1Сåræ³YŸ<0‰˜¶q¨·{«Îöœ­§Z2{¤s8sÁŸ³Mrå1ÇzÍ*Hµá Ak<•›úV›+œ*þ[½Ž±& ™q^ôZeú÷ <ÈHЉ‹Þó¬ÎgK¯A¤A_­q¤•þ Döô¶C0q;×ë°reÀ\ƒYó‹8P%¤%‚1¢ÒÍcÓ¼ÍdÄÁ‡"ÕûÔdŽiPl¦m+åa<¥û}Ö½çF‚v¾÷5xÿ*–(dÁ! O@ð׈ô¼áÔÂL¢w¯ )WÁä{$q. o¸AgR»îJ­Ð¯Tï‘åK‡XŸ‡ÊE¶ 9"}æLüÖšÐlõ^~AžÙ:3}'Ÿcí›*ýÓÒï[¤ÑŸ˜3j"¹FH.+MÄs=7SG›k—h§  /¯ÞQãËõïÏÚXïËöÏ©C_:»¥·.Ý_9ÉÒ‘F\§£Y¾âС\g3ÄDÀ»GÀoþâ¯á¿øÈGðÏv({Î IDAT~ý×ñ ý(­~àoü üÚÏývOž`O­o65˜…kp›ÊtËUÚÏôqi¹Æoåòs5…£‰&#¦€ü²&&¦'±Ôeá±kšêÒk®Öasr®ß¯ô–Ý!ˆÂÙ£¿vº¿§?'®áémž¬›4Óï_ps¼u@ëä,ÄéLÿþš«¿t4©0(Yå·cà’¡aâ´"”èÞhªX]#‹ct«J:`IÒ,³9€"ŠÐfF]׈v;Q®êtPÖ5“ë¢À'¤U…Iž£ÇXl·œDU#É2©Íôû¨ë­ñó¢À ª0ˆ"Z¬V|E¨ª ËÍýºF4› PYb{ëðéOã´(ðµO?ãë×ñ¿ÿµ¿†¢®1m·g¨³ œ¦àÉI–a»ß£6“=3¢³ŸONBÕ>Ë@i Þnv#ò¡¦cÝkׂ Ó½{²Ý{Þ#û1 #¯×b\G$êJ:?—äÁ”¨ÄC>kÎÞí¶¸v—¥ðï¿lgû9<”N‚U¹÷{4ÞVq÷cOS ^—Ë06SJb8N¿/òéT:5«”‹!„îw¿xñEIÒžs~º(q,ì·z/¬±¨TL¨2F·%%Žj*°§z)%Œ„ñ‰,YË ±$&…þuUkéÆƒ¼—„¾âD‘] R‰×ºà=$¤M#‚^ÓJªUé­?}ìàß®+ñA†õTWÎHW©¡ ´®CäeÍiz««9HϽ¹,|0=3ðÚB(4_ëgõëÒ½S­š›ñßVÏíf;#Qc:MñÜs7ß÷}ÿ->õ©ßÔm§.0¾ƒàZÜrÕÞVô„RÖXWû›ú3YÏ®úÞv°«?¥ûŸë±•€½wp7M›nÆÐ© ]Ó ïÁ3a@!9±êvŒ@\6½ÉBÕ}§û1SĽS™:Õ{j¬œŒ»Zõ7½Å›:Órì¸nŒuŽ\ïß4 „ªCR¹/]Ô×9yìªù–|™JØD;8©{¸ûd¬Ÿ¹Ðã¼—ƒ{U­÷tÏÁ G¸ì¾ÒŽ˜™TZdeœ£±S#3 4Øž#˜È5fuîúYDµÓkùAŸ³åBÛ¶‹½ÄÐAçH;%g.©ÈäfSYÔcûè*wP¼ Ön»ïOœ Äguÿ·Ý}jjQ‘SÅÂe+OA¾­{ ÷¢iƒÚµÈ¦U¿-£½· ]ú÷Þh¯vŠN¶]ìU]R;WÚ"Ê\óîÝÜA1—.ß®ôgS˜¾1ÿ×?¼ï)à'ÿ»»üý/¼?üш_ýå_ÆüâÿÃÿ8ÿí¿ûwñç‰Ðe¶ešML/ÑJüó7ä:Œ¶ ÒÇ ê¸×‚¢pÙШªjÍ&{ªuµB¾¡KðËrû±½–z^E¨°=VSñE“ì}MçG“Þ;a´©B¢2÷ZU@ë²Ì¦‰°Ð¥ò‰äùêÔcÓØÐ¹Y;ØØ¡¼jÙêWŠ„lx,m 5X‰ó}•zβ‰È½K¯sÀJ#މ¦)MºDèÆ1¶Ì¨ÒT|AÊõtÊ»%@µaÄP?ø„ƒ:ÔP_êfÙZWÚ¶  ´ßÍ¡fŠF¶ÊENi©ÿSü˜;qâ !V–ésÀ¦®nzþ&©ºÃe ~Óð·ŽMíJJÄBèùYåÕT”ºÜng§xøð ‹ ïá8~Ueš‡;ïr¼“D¹õçú)ÌõaP•Lß\ 8uï¡~î@«ò&ÊZ½= Ò& Äè@çåŽr'îj"·ÓN…û{´&õsÚéÛÛ*Èçú;«.“»>':ç¦Jå€^ªÕp·ô¸ÆyÙjPë>ºZmO”ɨȕ--™4ÖZý/]’·V>E‹Cd´vö)C@ƒÊm9ȵ„k¤óðŠ^£[ç$ŠhFn7^ƒÊªà—aO=oë½ËÚé*9$G:Ï[W6eWBÜ2p[âÊ%߯¥±ÎTÛ%…ÂŒ º·DÙwsÌ6Ï‘­Þ_C7äD¿ì`Œ7>“6fŸÖùIhg¬ná™»—½QAÉáø#¥gÕ7ÅFÏϺ{¹þ­b`÷í`¼Oãß™ .9K78`árIû»µœ´rypÇÑ”rÛðàðÞgýEÂ?ÿåOãÛ¿íÛðÕ/¼€W^}û<ÇM"Že>þq™“Û·åó‹…üÝü6Š"t5D]Kºçç’8m·¾öä ¯óÖ0Žp¹ƒÐë]&Åï÷’Tm6Êi(é’[7 ŸÙl4Ê ûÄW$ÌsQ„ña>Id›KŸÚÜÍÃqZ-9'3 4bºý͸)Æß0r<1ÐÒÕ"N5!P}=>¢Èîí¡èñzêu¤-ñÁHÍ.5ó½m tjMzî G S[ŽW@<”}q‚àîk¸ö®†gú󑮬¨+¶Urçšd<¥+\íª×±ë©Î]…z縱[áŒÇðAs¿åÞäVyg_Úì'r8y bs×g÷û.C¶ìøøð‡Ÿ|âŸÇýûà]ˆ¢U¥"á¨ATÙ›èCn¥+ {š°Y§À’+óƒ˜éï"ô{Pì±¾-Œ(\;y“÷ Ê-}[N~ à}úv°þõà2˜·é] ¥¹S@Neäº#µƒÉ\w C°÷K×í²^»™Á=toµ3¤|jàˆÕqUöÌ]·ÄÍÕÌ Pîþ0 뎵{Ƕã›<Ôn‹ED§Ž´Ñësb@Kâá¹qó3qÝ ƒ™WŒuÎ]‡(wÛv\gÉ‚üÂqEb÷ŒÃe>¹Ò°E^ÿÚE¥]…ÎõH"Ï&â} kÍÜ%¥#t[™wéžÝ©‹ŒVð.éÉÛ üùÏ8±ø·6á`‡4K\Ò ”#¨ükín³ÄÕBJ4ú¼VÇè ­¦'J^¶ÇÅòÒñÀŸû:à…ÿñç~˜¿LøÃ—_nŒå æÆnæ!‚g¨ºP7迹nãíz¬cT§–KN´CCÖܻ皇Ot©ÞiÄêM1DUêÿÓßõÝkj¨uËúÊ#ÿXaRöZ¸æ¨Y^»®¡>×qt`ïæÍЋS\V{Z¹Fk‚Ëæ†ÐíÛŽ6fŠ‘ŽÑšÑ•«ËDî5Y8¯ÑôfDRckµe™,£E!µBf©¡¡ßëa·ÛawíªNÅtŠÖ£G¸HS<étðÔjª*l«JüN˜g¢,CÑë¡ÞïÑMÔE§ÕUû|:E;Ž‘àaU¡|ô½,C–¦Ø3c°Z»]$‡‡Îç¨ð‰ùœÿÍïý}ô#Á¿üèGñ2€^xÿÏ'?‰ÿùïý=üþÝ»ø¿~ó7AÝ.Z­Š'O@ó9’vuU¡¥‰±ÝJÐn#:8@J„âèˆË͆R²‘‡™%ðëõÌÅ9À­& âoÝ’ q>—àô¡¯ÂoýÖKøô§ø…_øml·wA´sËÁ¿¶¨ê0„‘ƒ…X'iMÁñ{dŠ\ŠÃ?WδºmUæÔ‘âM•)Qrïνu,Hèüe:ÎB îÄ"×¼@0Áˈ½íÇôJ"ç]ÈÙ•no8 uGŽsÕÒ{`w¶×±ë¨šˆƒàÂÞA*7†c—WJœVŒx…ƒüì’Åûã¦ã¡Ø¶cCN‹k ¢÷Í©ãU®0ÑÂe#Ã1€{Dnz¢ô#R{Þ½…ý¿Ù>ðývöñE÷ÛqÕlÍýÉn'x+õ•Á¢Òø7ÆŽ8¼v¹0©GÅÐu"€:°Í€NøúÑ8ý¤¶éí@FQê…ª;í²Ñ<;í[Æ'n©í8í%X7)÷XoŵëpœªŸÃ^}–šõÕPÎj7†xÔF4-Ìt+èù×Zs»ÐÍÖ¯¹Üû, LÉ:ëÇØ¸% ÓÇã:ÇÝèèãSÉ5!ë@̵“Áhü3i«ôÊñjì5;×±tEMK–efp«…²(šš‡¡Vû²è÷éV¿y£èvÅó¶ÓA9bËŒM«…VšRÇè% ž´ZÅ1èàyUÓ”¢(Â(ŽÑï÷ÁkUtJÇcÌû}ìz=$uv¯‡’YUáz’ •çT÷z”Å1âªÂçïÜ¡ŸÿÈGpþ»¿‹I«…~¯G/ž"Ës|軿›>÷.~çŸ@¿Ó•%ê8F‹<™Pe„ºEâ$Á`¿±("¶ŠóbA”çè¡ÓíJ­ëèH’‡áPèë×%@¾{W‚ìÍFPfàSŸ’îƒñ2æó@ d;“S½vM‚gSJñÀX,$ˆÝï ÷ïKâ1£áäD‚ÐÙŒptÔŠº]ùEò·ñX>7Ha6“cXõ¿ª„ÔmŽÛÛ­ŒÕä_»ÝàìÝíʾ>”íÎÎ$7žƒuP¬ò>­ÑHº9³™Ì¡uS¢H¶ÛnÅÛc8 >&E!›<B¹ñ-ªŠšª¿—‚5¾I»ü3dþ$xOSÒ„xK˜á¹xF}ÓÝ®t£ÊRMï&ö=5 ‰%n»5×3ϩ鞘˺ý³ŽÌ•¬ai*û(K—ÿª$,7@{”9¡ @µÎ„ ]Ÿñè–„x dêÒívz½ú©x]!‹íF@¤­¾’Õ+ ÎUáVw}™ÇÊõˆ[Bî¯b`׺º™sw%A]WÀ&)I¹£ØhƒMM ÌŒ´{Ýõyûäz±J%µ J7Jòl¹þõˆ‚Ôí¡Ê›šTè-ç+Ñ·²‹úY$®o¹@(UHKáøÞì릞Ç?üÃÿ ž}v†é´G?ú£ß÷¿ÿkptt‚oþ毡øñWÿêŸÇüÁKøìg_WØ™cðEÊs82¸ IÏÜœ”ÛÔ€_AX/´êŸSä[Þž{§NÖÖÞ¾x™¤§eCœ*X…$²Ï²hÀ«'‚1ÇÆ‰PN@G9!·!êO÷éX ³ö˜{ ݲüÊÿÎ%=iTP@$‚3×Å1Õ)K\*éä‰&è™Î«wJAZØ$’«Q]G½/¬#ÓÒëQPTÊÜuîÌL¯—u¾¶þ7¥ äV©B“E)‘³ûz/Ÿ+!ëºÎu0Nu¼7 þz|KÆKGî^Ùýà"’9´„  I"H“•…ÄBÂL“D] ]Ú#¬D[RxF9ë±Ók+¿Ç:¢v­*‡\âß'©«Ÿ³ñÉ*RæÂ­¯7ê(¶ üzDyQp'ËÐÛí°o·Ý¿âÅ(9_ ‰#Þݾƒ‹ ¬–KäÌÑ/ÿú¯ãü©ŸÂg®ÀQ„:ŠÐ;8 ÝxÌ0Ÿ#ÉsJ²ŒÁ êõhßëÕÅfCQž£Ö:™Ïўͻ•ççØ1KÀË ñ¶ªIáâB0øŸûœÀ€ú}Rçgà©§‡‡g™ð&ò\£..$±8<”àzµâ¦s±ßCI¿¤„_Æd"¾¦<4Ÿ·vøJ l·¹ Â-À— WÜ®™©ñžØuÄ঻0BÍã€ë×¥«°Û1<`œžŠ9àá¡)&Qcú·X÷î±݉ï…ÞÉq:n¸GGráŸñÙŒ Mþ7Idî²,º½Ò“yOXòˆÕa½´äË I¦"%²»Üü=ŽCçGŒö¸Q»¸±D«4®$“²/V?™?†%6QT_ò©kKöû=#Ëd®ö{`½côÆ„rÃbT[¡N¬xy*€øÈuH ðZˆrÖNI•®¬¬u è6˜Æ=FîÉÂÚUˆˆ@%#ŽÄ£Ì4€£Z‚L˜ã/ Þü¶þ½Å ~Õ (Lk Œ_ÕpF¡š} *6Ÿ¯YößUÌõÒ•–T¼‘°´Š¿lWêåÑV[SÕ¾‘N-µ:üPWê‚JÏ@ Ñ%öœƒEzκ%[)ë¹çž§oýÖgnß¾…¿ÿ÷¿ýÛwˆyÃß÷}ßÀ?øƒ¦ƒƒ1~ñÿ{º~ý“Øí^ÓwyG;ÙЇêÐm–”\hã`'öÖºpø„Bƒª¹ò.¢¶Ñ.Àc×-ê:œÃPçÚ T¬ÉÚ <‹9¯‘>ó¶˜e^Ϭ„¦®ê¥v\LùÇp¹qôº®9T¤­¤¶Ðk6Ñ9¨àÛ i‘#&w-8vœË-\š•ëžt5Áé;¯™ûó: –kå°9U»7wæÅ÷öö'àkŠV2ð9ý\Kç  Qú:'Q=pâF¤®L‘5aŽ8ÅMýɰOô8Èã+¦‰_Æ=/| c‹)ð3Öz?’ÞO·9ø£L«öÀz×›±$dmç…aÑâ¡&\¯8 ÌVÇò´îwŽ n–pð.Ùëób§MB]?b¾,ÜÑdå!þÑAýJÞiõþ&W»¨/w÷â ·/ºðæ¹cH¿$а–sVµ#ŠÝå‡k·]êÂQæ|#bò| ü³_þËÿ ¸ý!à?þ,ð ¥t*2…ðœh mȼ%@ŸsÁÿ‘£¶íôÈs Z=«ICסe U·2t¢åêG.¯V 2˜Ö-uµn»nIŒPûúlÐÁ ž&Y}G…|ä)‘h¨pÄ® ×¥©%צ‰£Úí7&u kB*gÄ–FŸáº^¿L=/žr%Ò%ÓËv°6™¼ #"f¬!13›U_aÒjwî ½ySÐ’û=ò¢@Ônc?¢ÐEQ`•eØw:8fFÇÄDˆú}P’àx·Ó× £* $Q„§ÏÎðªÄ‘Ìç¨ÛmÔ*«:«*¢8ÆÿOÝ›ÇZž_ubŸó[ïïî÷mõª^UuwõRîöÒv{3 0&ƒacÆì0C&‘À 3B²”(J¤$Š“HA3R00`<$48“ ›ÕcÛvÛîvï]]]õ^½õ¾»ßû[Oþ8çÜß·{ìvÛL"Í¥zË}¿}9ç|6/ ¥A{òy„×®à·?ôkôÖ·½ÿÎ÷|Í>þq.ò£;wðŸýìÏþøcTHÞŠ"LË¥ïÃk6ÑP~}–¦(ò4/]"?ËPiFÜl"8[ÖC–Ñ:¨PR·eÛ÷÷ëÆ`4’¢Ìó$Ûœ•¬Q°Ì‹$»WÏ“¬ ³µ4nû™5 ÖD˜¬Õå3vL,tP¶“×Iè†t™ö¨PDÒXˆÐ\–eú9®´ÖfH>­-u iH‘• Çj™ÙÝÚ`<ÕO `Là&#`Bž1Ê%!ˆuŸÛ€ª!Øf=À_á ÈW@Õ¼À‹šËËÛO€òL Á½6àÒÜ®ž(ª¹>U q dK†wQžêDß>™>Å^$yúöuLÓpÞG&¾D=Q]h³Õ æú&3Ñ÷R‹»RÒûZÌæ:¡_ètØ2,L®I" T¸›9´›[vÀZ0ªSu{ån«êNˆÏ~öy¼ím[ø‘ùŸñ»¿ûyݾ3úÃ?üßñ ¿ð»xüñ¢×ëã·û¿Æ÷}ß@Ô³i]¬Ø¿¥èÍnoƒjì:w4 c‡@¼¤:o¡¯Ÿ¹¢…\©ÇleèŽ ðwjMä(5KgÊ>Õâ,Ôó¶r†cªßB—°Nœ’â—ê"QUä4ˆFÔµDfàÞÑíœë”ü¢žS]óX]±†T²[˜œ¥}m¡No¨ ¨¿ï Ç#§¸îhÚ¶Ñ‚z†8Óð‘S)ô::U;ªÍm}3?¡DS+±  ɨnLæŠæ,œŠ‚Tª ÇJÖ)+-ª¯èö”\£™nß9jkæ1Õ¼œjmDèÐé*Evôø—â˜ÖqÂk»Ë¹ßцØõçë=ÚP³‡#½ŸÚôô¹nÜÏðÒ,œ>j—ª©Sá˜/fბCª/upªÛeç¶­÷Xðª)R߈6â•úk6ü5¶ MTæ÷Ù…Kz)5êK‘ÎD>cS~Z@fú·.=ªrz`vÐ+H·êé݇€ã;ÀÞýÀ=×ðxöŽå‘Ãêkª3’¥„O¡yG ¼¨ëÝp.mó— IDAT™Ø¹œ"€ç²ýhé¿Ø‘@©)åÅKeέÙ×f u¤Mhâȧ<ç6škóffw+çuÉ6¬Ý®2§0MÅêÇbÏ™)ÝåÈäöYbK‰fe,_&l?Em ØP„¢#éê4Ñßg¨=[µ ¬ä™XÜód†šìíÕ‚f;&F;ºsGtYFk-sÆŠcùZé‚òH’8­‹{s~ÚØ}4ºÖË› O´ävk:øÐ’[P`šÊ6O&5­,Mk+ÚNkýŠéKÌ*¸Ù¬ k-¬©ÓÇF,èB#ŽŽ¸)´¤y ¡JA‡A!iHQÈ^,2,€fChái±ªõ" EG(V‹(5 på f €`¤ ò‘” y²>Pz@¡…(AF1„Úi†:²Ý¥*ý¼.P¼‹:U×20úTé:㟅3†±Ñʆyïk±e…9ã§–>Õ }ÛyÎÔÒwÆDÖX µ(]¡.:öµÀq-8 ‡ï;…̱ƒtŒFhˆ££Sü‹ñoð[¿õçø‹¿8†ïïh‚¨ßq|üE\»ö ~øˆ|üâ/~D÷jÁW˜†E›%Òi¬…néÛÈÐV ›!½Œ=ÕAì9 Æ…îså  ÔËßpDÀövÝRî¿çØŽÌœIúÐ)ìR§j¸èä&ðê‘¶ôgV•¤$j³^mjQxK·ÑÖs¢º C²bgäØÓp6ãäw mÒ¬Šݦ¶Ù&$7…¦Mã+–¢yé\‹š[€•ž+»NÔÓr­x4cú3ÔyÑ{æè$ a¦ÈC ¡ Ú̺âèÜ©¼lœ[)Ú·T„æÌ¡´YòzDZðéQ­¶4nýz*Jh$r ØÔûÃ(Mäh‚¢õ5_§®ê2Æd„:ߣ"¡2¯ÇË8ÒfcJ5{á4†Kç\[ÀÐ3gÚˆžéðÀh›–usˆZŸ³tT§!Ëï޾® ½¯DAúF(Rô*hPŠ}…íùö~]û¬ yµóõêKŒ‡Joxÿ÷¿øÕŸÆ“õ£4Å™r¥Øh£B©Ò~FÂùç¡>FÎ*)u‰ŽÒ|þô_ƒï½Üýww>:ƒNätËÌM^K=‰FiïmQR×R'uÞ®Ù¡ä©E®…û) ˆ6õö¹­Û+E,rX¦œ×öôxPËÚhà Õo¢ÕX7™#ÙZ(ò3Öõ™U­ÑŸT‰B)XzS¨ÍÕ¡¢&yÝì… Ð}T6ÍVD‰ ‘ MBèöÎëÈ-$ZZ¥šÑ¬´Ô R*W¨¨çP¸zkYaÑp¾¸AÑl†ØóøfŠ™ùðäÛ½¦iŠÀ÷iPUàé”{Ìð–Kôã˜Ê¢`¤)f/Ò ªp²Z!.K4–K> Cªˆœú>ªé÷´ZôPžó$I5æ®ÜãýÿEEO?žâ?ö?ò;¿ýøÿqú¶ïún•ØÙÚ&xÇßú[XŒÇhGÊ,Cîû“„¼£#^ 03“GÄA"c¦0Ï™¢^y£•ïÃC`>g0“æ30âXúL‹ “q™F_¹"Sc¡Ã‚€5ûA„ÙEanTŒ³3¡M£Û5SB«ÅØÙ¶·%»ßãü\¾¯_—&B¦þÚfM€ÉͦlÛl&4-+t™…2•¦R¨…X£¶Z²Ì0”ÚôQ$Eÿ;BUjµdùA Ô¬$ŠT«µñ%ܾ-²a(³ZMÆr)A|–íÇÀÞa2a-øI)U¢A ¯›.k\|ŸÖö±ÖðYÈ~™À;„Ò&Áv„å’×bpC ê¼ RjZn,u£’ç¤(k!0Ÿ×a†eIëÆs2¢$´Þ‡f³Þþªäu‰~Lc Š…¾ãµ ¥ÇÈÆ@1ÂXh2«4R´ÁÀ4¨I"™ÐV+À/”å±Â„à-…êÀ=`y¦@~”3BД¡Þ8eÄ‹)KSË;„ÂèFm nå!è1R_8ÓÞL24ª%PœêäÙ\‘æJ“irMkiëÏ6Œ®BϱZ]6X4CE1w{Eæ/ÓtÛTÔb»g­mKZT+Þ<®G3;ZÚß“ÒX.jÁ3s¨L G8îëö.¸È7n< ²,uqYÊÓÿ©§žð”$mýj#±«Ë5ú¦HG?nàbóžC‚ͨάȵÀ¶ p¡“÷˜k=DÇ™žu²i#2Ò‹?ÓiúÕz®Ò_Œ‡ïsM‹I•[?Óó<¶óD5å¥ÇŠ¨ì¹ ¥G\®õÍs“Ô4™¥îÓm–‚½‡švu¤×Ó–†8žpx;äá…¨]®¯ÅS]NW¬¡ÃØd¡ÎÅ¢öH¯9Û¿.׉]•Ò•ÌßÑcÑÂ,õš¼ŸE3VÛD¯/%m¯­xûŽVÂ×mcä¡¥õŸÙÈBåKZ#ö52vF¤¥u;ž3tÇ‚)©.Ss½çŠ`À ccƒfiÀÒ”çhÎçD¼(BÖn# CxD¨ÂPŠÜ­-Z»ýllÐ:KaoØÜd\¼Hk^~³)SÿѨ¯V¤Ú ù; ¤0äïNO¥ît$#CqR:=úÌÝw âaˆÂÁ餜1Ÿ‹N£Û•¢YB÷„¦³X&)ôÏÏ¥È ''ŒÙŒÖ.HwîH‘¾»+T¦ápí°µ.ØÏÏe2¿¹Ik Øý}i˜V+q>q4áË_¶ÏÖXQHÑnA…³©#ãÒ%¬©Gb;Kh·ëé¿P´Hu"Ö¶„ï²”ÂÞ4Öà I ¡ƒÅ1­µ$EÒÈYãæ¦—%¬,i­­¦‚t}rÜæsZ'ÅÏf¼¦—‚bHO–‘è(F”yJô5Ä £Ú$CTÒˆ;/gsB'’q3WZgo~"¢î†>ÉØ“F±X1¼Lš#ÿXžÃ#yôš@ºâ6P,ÛMF$ʽeE •D·ÑÔ:«­ÅâÂÑÐ$ù:Í&©«Qƒ¤¡È͆jqyCéI‰îƒY–”z~,0®ÔuFºý•^¾ã1i×ÛʱœYèúæ,nj=Ž¢!†æ¬´˜µqèùb’"zÉ5‹Út}ªï!ÖeZÃÒ"il`–-T7ŸvmDŽ@<×ûhIÒÄÄÚàhÎrž˲8˜jt`G‘¼®nÇ>j„1¥5]PªZúL°ÈãT‡Ö ÜцƜÈbCµ!86T‘ê&9¡š®v¨÷…,–ªïÙ$mîôúÚHUæßPÐ}Ï~- ½ *Õ_'hï+!(ô*(V¯ô3² {_EÇs½íûŠbx:gøâÿ \ù‡Àë>óÇÀ|,.êíºè_Küb}]è+€;¨mNg:…?ÖG{©‚o•%qÀþ!ðÆûKo½öOÁÓ3àÓµ¶ƒæ:)ï‹+ï:´!-°9WFßóúz‰U¬è6Ÿ×Æcëo•(±WÓØ2;FJOªôؿKŽ!›±Z¨(Bê°sýR¦Öu+EŒ ÙPDƒ“>uêbuȦX×µtšŒTf(’æ_°6f4tdUŠx`¢À«zN´¹àÜ!Àq+Õd²¬Ù¿\A’ºœø>æÌè0\2®>¼ç?ÏñìŸ2>ýë·û¨|Þé)O77±E˜ÇèmmQ¸Zq–$4›a¼±AÅdÂIžcR–œ·Ûè6›ðW+ ÃiY²—eØhµðÀ|ŽNOžòþæ&Þ˜¦”6Pm0þêé_|¶Ïw½nŒ¿ýN]ãhøßà‹Âøþ xæÆ6c§f££ °ï#>:B62šM„Ý.’ªBÀÌh4ÀûûÈ.‚…AyŽÊ²®]Š”i)67EÃpv&MïKÑ9Ötq„ªÃù ^§/BAº|™×”¤ÙL‚ d=IBë¢öü\l[-ÝÙô ÒççŒósÂ]wIÊvQˆ˜\Dߌ[·Dû`…¥†û¾ 3.ˆNb<®_—¢úÉ'e¹¾oh†‰œe""ç5jàybç:: IׂÄ<óLí"E‚ <ú¨ìƒè5wîÈ>/—5ei¹±µåYb¶4ÒYca¨¤póšÎdN†ì_§Ã*º®]®|¿F?,ˆ/ k׬8–mÚÜ”}¶4p§ •-ËŒfÆk]ˆ¡¤€¤æÌ€< Ã#À«Tj­UH=†ßòŒ¥~^*IÝAIÂý¬€än`9‚.-_é_’G‘YôzŒ£„†¾ h,Ú‹ØhÅV€ãsu‰"y ª€Éí0 ìz•ʨ½ÅÌ%@Ð`,MahÌ5)ub^µO}ZŸ:—<Ãu!?ƒLVÏÑqÁR¤Xè>-CEŒËÿ¢CÉ)¸v2Ò°5-&7ZÅ–C 5«[ [h‘lèB¤ˆK“MQH€¹Ä?ù'ïæðþ.>÷¹7á=ïùïAä£,OˆhfW¯¾x4:×7s À¶ŠƒÇZ0EZY†¹Yaߦ¹1ßC£(ùª]¸Â5ÅËbÚ›Î4¾ÄK-MK-°-eÛsl~¡Í@¢ƒÏ-µ ´Dí¹þî6ËÄø>‡'¿Ç5•A‚ö ¡ékC•Qí[¸¢Z5 Ôa‘3ÍÑ:Ǧä°_Âçšo`ñ½æ1iT‹kÃT‡Žýs=nöf6¬â2A|ȵÒš&Äë.\†„ú½¨çñ²îs›jÏÈËÚ˜ÜÑí\Qm€oÞš‰"†ruu–]ê¶Ùß½jCÃÚX›¥ì6ÕÈVwîê6„9¾ÁušúÂ)=3G“2ÕÏ­ä äZ'tU÷ãH·éÀŽÞOwôó=ªó;J]×½,#\çö¸ÖÚ¤j.qfÕ/×ÁŠ+lj*uî¢ZÝJôr Æ7"†¦¯ñÿ«EF¾^ã•ÖG_%ùŠË‹k1¹§ÍÅ&ê8OéJ™žú–NÒK€ªs`ó2põnà _¦g2³R5bÔiÔ-榨_]k×h-SÃÄâÔðäXÞÍßòпZ~ ´TÍ¿NÇ)®_jcÑJÊò£Ž®×Xcm¦*½mµ¸šºÎ«Ê4%C)êÉrYÕl¶QéçLl}—®O›Z åjýh³ˆ–Epæú¿çÐÒ¼ú±FꔵfÄÚºµq#óýÈ=º(¿§TÖ˜˜†5’»òˆ¥M¼$JˆÔn—rÇøµ›õ\UËÑr\(ö<¤Q„´(h‡¡ïÃ÷}pé!kGØ{8ÄÀ}ú/DUJ³½=žœ·»‹ìÒ%´G#´£EQkµ¢X¥)ü(ÂîjE$Á 3²$¡`±Àån£  1€Â÷é~f\ŠcžH,Ò”.dúÍ&fÌð*àÞ“ÛÇ =wÐÅþ{8ž†·ÜûÖ&~#Ñ[ßÓª±…ñáü`ˆêu Cd'§(}ŸË%Ân³çž£"Š ‡(óœÊ) wvÀæV´³#(@žËÄ8”†âÆ )ä{=ãüZ-ZóÿEÈKëà½ÕŠpû¶Ü ûûâ¾”$27zŽðòEs!4ÑAL§Ò¤ÉúOOÇS­âœpçasS×¾/ÍÅp¥ «(h­±Ü ¡+IQšeÒH…¬s>—Ϥ©  wîÈ~XÆ„4(bŸ;ÕMMš Š2Ÿ úÐjÉñ) Ù¯  uh¡eUœŸËq2Tæä¤n0¦S~µ`Ýóy.ë6\£bu»‚2XކiÚmi;zI·¢oëŒ$1ÖÿLo#Y´¦À…‡²¬–ñ˜ÐíJ3#”:¡ŠRøŸ—9ÁóVOÜœüèm¨v,ˆÕ„–@ªiîœâ <Z[’nhiÔªŒP²è1ò¹Œ%öv'#`ë ÀÒ“ ?²s hé"•a¤7²`ãÎAìœööîÆÃ|v6¶t{ßyŠüän0ÅÀ*ÑI³ñùm‚l4‡ÔÓj›¬šÀÛ<ù.[¡Bòt5«‹’¤€hQÑrpYRžœé-&.¥Úi'@E°©båÜáåWj?º…:Ô-¤ÚYÈ2ÆT¿m¶Ü"£d=…׿þ>zßûþ&®]»‚_þåc:# ‰|?BYØÜlà÷~ï òéw~çQüÁ4u³MÀ·à®×I øì_ ­f©ç6êGùÜfûNC‘Áq-Ö"ÝdDq=ÁGàÆðÀ}Àý÷w¦ÀÆ‹/uÛ¶ÙdE»ŽdÏüîBн­??Ó¿©œ–»9qf§BCZk1zªO°}Ò@>>çvlê¶™PÜܯÈAW’Ú] çN¿Þunãu‚÷uly|˜Œ)pÞ¤5”\ˤBÇ¿ÃÂ-ÕØÃsÇŸ£P[[—µÜpäNv¼VÚ6 ˜áVI‚f’ ,KôWKT¨pš5ðÈ·’ÑãO'Èç„Y@8 Ð<8vwvŽAÝ.î¤)N|¾çáuŠ:žN‘Å1VDØCÄË%Îwv°( \¯*Ü]–Ȉð,ÎÊW lO§˜4Øñ}t}òðÂ|ŒvT¢1Ÿàóm|úÉöW}ì]%ÚëMùͯ_àÚk" g9ŽÇ·6LN7b´çsЕ+´ÚÞFúÜsÈV+y„!¨Õ p³)¡²&ÐtJ~» ÚÞomI!oSuËš0zÑÙ™¥/¾(??9‘ï“DŠÑvk§ K¡><”‚t:aö¥Kâ8õÌ3‚^˜=ì“OÊÔÿöí:[b_DÞ>XSŸŒneSõ0›[KÏ2)ðww¥ ·Â}¹”åöûòóv»u/XgO ‡uP^·+_ß¾-Û<ʲeߟyF>ÓhÔÛ²¿/ëÊ2¨Í­Ëk×êäí¢}ÝÞJ˜Pº,¨Ot&˜6¤É2% )èt䙚¦rü†C9fE!ûfá~F_JÓ:Ë"Ïe]ó¹lš(¾ß—Ï›¦" ÍyÊBúäóͦ|Ÿ•€¯ÈGÅ’ˆU@»T¹4Ý–<¥&gò7¥”!@^ŠMFrà&à—@Ǧg@PÊ8Æ €<#D™ŒfS`#º°»Wâ\BõBE™*H#y‡Ùн‹PNAsœ໾ë‡ðGô«ø™Ÿþ~üäOþ~ò?þAl\¼ŒþþïEŒšŠ¢Å¹×T¯=£5Ø„²ï<ÙbW_tøÖ]ÇZäX‹š–¦`:þy§ZH´7“¥sÛxÍì*rÔª¡S˜’# PÛ¼Î[³¡oÂÁÖ¨é;×a±x?ýÓ?Ï ð¾÷}>ò‘?Áx| Uã5¯¹üàOàúõ{Á<Ã÷|ϱX4¡4+gÜ#AzˆjÍ9 QàÕ"d³ÿT³rœ¢5»¥oš-ò–Žc”ç8Om vö"ç :wéS¨cnÉ!ÝzŽØÚ®ÓLXð]U®×ÚóIL”†5ut!¹”ö·™ï¥8ÿºº #À–C®îÐÚ€=ÔÍ¢§r7ÄÑ*—¡Síx©Ñ{àص·rö˹§ú6¶P¼±ùÚìli#`nT†ü‘£¿Xêò¡Ÿ¹ŠÙØq*A«þlÔ;¦:ÞÔ–-=žÆ=±jrG÷ýëd­µÈûn-î/¢¶¶ H8ëËJ8na¹ãQiçü.Ý—Û樮2¤;CŠ‚‚Íœs~Ù!âÏußT…ЦcO›@SÝn:F3m°Œ0?]k0èeSz…¢ü+i0èë@0ø«,ÿëA0^i}ìáe?{ùï 5+–2ýÚŠçP§Ô¬Ý3€ðíÝÐé¹i0°–Éý ¸ÿ@w8=E/KaŠv­; qÍx5½:ú»H‹àMÝ6sgjêv5 1=·žÇ;àí>ºu¸>ž±·§ŽÈ\©Ás"Ùd9êP…»jã2Ú’}]‹™u»(q…"窳0 ¢P ÉÓ}\bmH+Ý/Ó²œécÌušR§&š©Æ#WôÀ“=€ÏtŸÌo¢!å7ÓË~騆XŽGO—›:¦±î˱“ñ±R½ÆBu7ڸІ¢)ãúëõ£2¨YÌ”I @÷D†~%UEí<Ç¢ÕU¼"Ç2Mqßë}t6 zöÙˆFGég<@Ôï£;.\@{<æ4˼g:ê¬Vè7›èå9²  t¹Ä û>ÝÕhÐ9@ó¢ ½f÷TÍÓ”¾XU˜4¸XUh…!í¬V¸”e¶Û8^,è¯ÂÕbAW’&퓇l5F>›Óc/†øô³W(/b$%¶òð¶‡s¼áJ†ñ’pç¼Zd{Ìé GÓÍ-A&ŽŽÀ¾ ˆ­¹hµ€¢-—ð/_–·٤ªÕÃtJ¸ySŠ,NO“‰‡ÑHôUenFòù8†CB¿O8>–ÿ-ÛâÎÑ˜îæ¦ _øpp ÎP­pxH {{Òˆ4B{j6 o;­‘ .tÍâV–só¦è„ž%û‘eŒ“Én( Ù†ÁÀBI=4±Ö,µ;V§#û’$²îŢξ¸uKÐŒÃCy†u»²^±Ä•Æc8”õ<û,­‹ÑHÒ³}xè!Yþé©|Î\¬šMÑzT•h0<¯Î’h6-´Nt"œ—&g4’mf–ãaÎYÖìM§bÛÛnË6ŽÇu¨à|.ëNBUÑ:yÛóY&çHô„²$,—„8"4Z@©Ÿ¯”¹@:#T 4# "F§Eˆ"ùÙ4#D-`9%DKÕ´^ø"!Êt"p«JEBµì,a¤3`9.]ªvÝ]Âd¨ }I™œ yD( Bá݈q€Hoâï|÷àþàŸQ’„ø¥_ù(~ç_}’~Ýz×ßþfú–w¼¿ù›¿Ð%‚×%Ð’@ ¡yq[_â/Ød2u÷ñÒt{¬G IDATž¡rç ýüÒáùçZ(n*eÅ&¹Ç¨¿®¸Ökj‘hÁwÛJɲ‚˸ò‰¾W ÇQè&Õ…0iák¶§¤º†Xkƒ hsó€ÞûÞ/ÐùùUL§áèè9:8ØÇ»ßýM xÿûß‹ïþîo£ô¾îç~‚®_¿€ñ®wýWô¥/°§STWÔmhK€¿Œ:çÁŠgº_cÔ‰ãà¦râ·IößÜ´Žt_öÓsМ¾3½/-@M—S4d•Šïzܺ´¶’Áœêf䋿hDÀ jkÅgF²üŽ–haÝІªÔÿª[1Ñzài½¬ˆ=Tz§éLµ»†lè÷ÕBö¹žÖìš®Äht#=®¬zˆÌd«£Ë²é»5;[„¯™ž³¡§uê¹^3K½-ðmG?»¡û6G-ôO©¦ìÅ,hÇ®V\'/³Ò-yQ‡äjj YÑT_ÿ†*Xâø JÓj‘Tj'ˆÚ‘.'ׯeG›À…ÓÈgªšëqL•fô£ÒkŠÜMÀ¿41½ Œ !ãZÃrŸno¦ËÞATxÛ xª92£ƒØA6bÕt´¨FÈ,ܯEÀœ¿‘7}MÃÿß©W¢L½šå%´)_‹@ëýÕpŽTkOM¥»<%¯ôvùš5‹’v´xõ ÀÅðÀë€ÃÐ O¯Áåua;PºP«Ö]Pé°_cÇX0W”Zàw•úd.DÃÈ+@ã5€ÿ°ú+à¡tK?ßèŽ"çŽEª¯M̾>÷t]ÚÛÒD‡†ôÞ4PMGêá*%]÷° èÑÖ™¬4qLäÚúw:§¢a­G‘è}Ì„Zô¯ àõ¬ ©ÎXí¢s"š«]%ŠÔÖ9¬c…K¥ƒiƒgç…L$®¨Å’áBEþmgÛ ½Ørf ä4,fí»¡”´@Ÿ™²ªiV»ªÙD@-$»>.Ý5¥“ÂÑ£%ÆÞéÆ&Eׯ£¿¿? ±êv)=>¦Q»óäûÈ|\U4CÐpˆûã˜rÏÃq£‹E«e‰QÐUÅ`#ÏÑŒc„UE÷¶ZX,ôb£A·‚ßÇ=DÄÃ!nÇ1JØ÷€bd>¥Ç^hã“Ovq:lãÊãâµÞzï_›cžÅtsayõnÙU‚æsTƒ•ÊÙ÷z=¡G¥)èøÕSO‰ƒÐfêdifxžGl|ü$©'êb§j‚ai:±w")v»])`³LŠçós)¾›MZS¥Ê¸rE\¥ÊRxç;ågOŸŸKƒµX%­=—¨å‚«Mm ÛÑ’´ÄжŠIWÜ™f°šM`’òû€øÀ"Ê[ÿˆ Œ€@-h©’wîj%#û@Þ–§ÄÆÝ@Þ$Ä@˜£!ÐŽäßéàç„Ù@â(ZÀô¯{Ó#øäÇ? ôÈ›¿þ¡ßÁ_|òô¿þÖÿ…ûÑ÷ÒßøÜÜ¿‰G?÷Q.18WZW§æS}bÚxfâ Mï]iä£.^M#QÒKcaÓ—yù5©VªÅŠ÷Õ5¦rhG™S ‘j ¦ú„ô<¯E`ŽÚaÆÌÂm ª©C[ô®w=‹ïüÎ/ó½÷žàñÇc,—×èsŸ»ƒ££ 9¶··qÿý÷ÐÅ‹pxxŠÇ{?øƒ??ÿóç´h´Ä§©®{eÓ]ª§¿p\£šjcôƒ€t´x5AñÀ±©5žýžƒX Tlln±S—T;5™hw É11åÞ-mÌF]èX'ÄKˆÖf¬ÛE겚·²Ñ¨m…ÑÚRªu3kDJ)a¤ëhéÛz à1KsvÄì#%bÏUca¼ÿB¯'ãMlS¤ZxûT'ž$ÅýÌñb\Pmx?tx+Zã#Uº‘i`ÎÕÕêÀªm\- òêëAÇ·˜¨øyéõaM¨FW¯¶³ý†ìTº+mÒCÔ™$¥®ÿ‚^ç¾ÒŽnëõã©sTè Ö`˜PÚ*‰6É~“þn¦Áz ݨerAÒÙ¾E¨ÏI¯ãX¯É©Ë)™êò/èöÜÒãRé>/=LªÛ=³ã©Ï–;Î=³R Y à¬Áà¯CÁ¯R ñ„‹”º<­ui]ˆ®mZs¤›:qÿ @¯ø-hÓ $êZ”Xw½ ØÚ~¼[H“b“öT ]ÚÑÓ¿©ÍI‰—fij¦()(h®S4©ü… ‡îÛ^L€ê1ð€¾¨6«P‹\m.ÈDÉÖ‹@w7@š;Á—ÕéIçNähSÐÑæ`¡94¯¾ÚÏnèÓ€ÿ™ŸÁ·½ímøæ×>Œ{¿åظïˆîœãé'"d³1ú­…V.`yxÚØà (hs8Ī×Cw6Cž$übYRÛó°ëyØéV³‰ A€3¨ªp†´ð}´² ¢ažãRUÑØóp<%BP–Â^Žª +Ï…!ʲ„×j!¨* Ã+xüÂóDö…rlãÂÕÛ½S¼å­KJÂM¾±Ü¢Õ¬¡ªÀ§§€çµZLÓ)ù½xk Ôl‚ïÜ‘À¿á¸tIîÉå’ÐlJa¯Šcf"iPÄ!ˆ±Z…µkÒB… )Œ- ;MiÝ@ÜwŸ|f>—ð¼ÍMq®b–æb4’é}’КöµXÈÿFÏj47oÒšZÇŒ²$ ‡µ³ÔÑas“5XTüNk´#Ïn%º…ósV­…4M£‘ (Ói7!™¤át²_¦Ã°pÁ }¶ã[UXCi0U%hSYÖÔ¨<71:­5fÙ»XÈršMZÓ¨¢Hœ»qQšNu{u¢Ùi ý‰=Zgp †yJh7YðÓènÊXÎ*”Éõê¢lc4Š@± pÄb;«D£,;’ÈSmê6cÙÆF´}BÐad)a™°ÊÕ(}À ¨Eh7€|J*`zŒïøŽ·âûß÷.|èÿK¿úÏÿÐÜyy~›>ÿÄÓô?ön~ýk¢_þ•ߢªTZyÝ ÐÄ)^‡úäLH,CúT~*Hl'ÌBòÌ0_|&´öæ[[Öújz¢"è»´I ™©VÁˆ®S£]9œvÓaÌ´07šÏ‹ŽÃ×„ã¾æI}zòÉ:ׯâŽðè£9eÙ½øË¿láÃþEüÆoü>õ©çé_þËò>ðËø¥_úÉ\À‚[ú¶(¨Î8°ˆ¶¢&Yg‡êL×®LFÛZG䪽Ð",ׂ?Ð1ÓêˆØ’ï­)l:5 é>/Th¨ã¾É&°Ý¡:ÍÙ´C 04÷ ꬅ¾n÷D›ÈG*2ï(ú(ba”µ-E¦ŽúrMÍqö9×·Ø’jäÇŠíR¯¯–®kSÑ,Óṳ&Õ"Ù°çz.¶tÖ X–Cl™mâjCaº”Lu>‘jbŒ¾T à€[ŠÆ5•(}[‘K×ZjcD÷¥]ªQ§J¬•n·Ñ¼¬ÁØÐë(Wç)s›èçIEç-Çám[ÏuK›Ï•Si˜sÕÀl§µ¹éy¨Y÷´ê9Í~¤Ÿa'ïe[sÊ;´¶#ÖoR©sª}¬×SL5ý¯§¢ø}EÝŒ¹¶Ï0b—"õjô¯FPýµÄׯÖÎöÿ3ƒôQí&?Wu>Â:ÛµM)eu–€>Ð[ºO¤]4Ò€Ìk"î¹ì^í¯€óçê, ú}S§ã“cW³H‰í°ßÁ™îÏ »}xäAàòuà ' ½¡èܔ˜X²ìGE°‡:Þ‡µˆ>QJW«ö5 ‹º õó!Õ’!ÍZÓ@æCÐÒ¬-Ýæ…íÊZ¥u¬4Õe´¥8§¬Ö©t´}E0,¸No/Rj6:Ñkaæ˜.nÈg:³ŠXÏ­¯Ô§ÍšýH¤è•jÇJ¡+µ‰¸ ±€¾çQ @/ q”%:¾OOñÂSOáèÎ!¾õ}?ŒQñºypÏ\DâÇØŒ#Š8F†Øh¹µE“ñ›A&ÂAQPèûÄU…(¢(hc:EÒïc§(°ˆ"œQ³IË%² ÀžçÁCÚOSÌšMÂtJ­Ù UUaFDGqŒp:‚3QY"*âÂÐGÐo Y¤xì¨?¾¹‡Õ¸v‹éþ‡SþÖûnq ÏÝh: Ðxˆ (È×i{µX†P&„h‹ÐŠÅºvÊHë·ç|$*3 ô*І¸uÌ'R¦g@IÊHCÂÎ]òîîï8Ê P@Ø”Zƒà&ÁïÂ@ìn© ß Á3þÐÏaïò6~îø =ùø§ ½= hRÂ¥½˜~èû¾Q#Æÿô ¿HUÙ ›R²®¿ x=AS¼Xˆœ<Тo¬Ô‘1à_ p,û‰–ÒJšJYB 8žzžóš4óñ‘WG¾¾à¼OMÌÛw¬<#’ rF5Õ¥áLñ7Á¬Ù‹úZo*¢E3ã±Ç¦×¿þ{{§h4"züq° ¢k˜Í>'Ÿ|”ž|r†,{ȱɌ©ö{<Ñjß½[R¸%i/t½Fj8î=g¨m` ¥TMõ›úo[ Ê=’¯Í˜³§…§§ôªG•VrC‰)€gÈ™Æ;T›Ž6.ûú†*õíìë9+µèœéç—Jc¹¨ûÝÐóQMõ1N¥ç+pJ#£ ‡!P­Ï¨ô˜5«¥¯g$7A¡Ós£L•JE*¨NÉòŒ‚eÎN:u'î›K—5¡Fåkéþd¨)R•£ë™ê>™^ÀcÛ~¶UXè±¾¬ÇWǯèé¹>S›Ý;úù–.+×}kÓšT½nÞZÛtZ°_ÒóÒr&ü›ºÏ¹~æD úŽãfU¨Óœj+êŒêû„´-ôÜ´µ°7chSÐÖ{ëª?Ó7­¨º-KÓÔPmKÛVÜPï­¦RÙµ)R-®:4¹D·ÿìkмùk ¯ÆÎ¶Â¿®G¯€.àÜŸ^¾^þ·ÿN8Ÿ¥UÎé$G§¯¯²5[2r¬I µ~5÷ /øn=…Ï8Œ¶f4tzÀ]ø³ÿVŠÔSÕD¤uÁÍÓZka¡ndI×y]ˆ³Rq¸]OÞ ˜â€£p)ß{°µ |ü/ûKјXÝú}“ÚéÉá=G œé÷*ù£¶ncáȼFúJY)"1¸«…w¦2ÄŽ¢SiZxªM‰ÙË.t±l?j÷+ØkS1n8 µÆ ñi­¡àMm>†ÎÏÎÊ[æXìvÕfׯ­mq¨–´êäE¾gM5禞[•¢±dfpª ¹ñÜ÷iáûHˆhBÄ3IüñÄó@DØ"Âñüèç?O_þ2^ûÈ#È[øäç?D{ý‚=-òæ€[wö±j4ÐØÚB³ª0ó<.ó­0Dg8äz=4¦Sâ$ÁvY¢ ^I`®,—¨,\…!úDh4›ÜÍP¶ZÄž%âE¢ïyH–KZå9˜‘ ݆£Å‚ Hʸ†”K@­Í1¼A*ùÉ ¿:¹wﵨ?Hù5öéBoŽ£›Ì³Q UÃ[ÌÁ­–„Áû—/&ðÆq–167%{!MAAd(ÀqÌÈ2ÐÅ‹b¹Ç‚ØÔÜlJ}_DÍ2á—ÏM§À¬p™Žß¾Íëºf“°¿/v°b£zó¦XÒ& ðÔS"†çÉT~4’ÏY±}åŠPœ¦S |»|Y´Ë¥|nµbܸ!hÆh$(„¸SÕyçç¼NÕ¶ßÙÄ_r+dÿnÞ7«ÍMAT,cÂìZ™Å‚wµÍâ–Ôي״¥ÙŒpzÊë&„YhXa¨"éJDÞ«¯½¦°¹Y7AIÂÈó:‹$ y|”Z d™Ð™$·BŽ©P·q,E£Q§r—¥PÌJ É«*i¨ˆä±|v¦Iç!ÐØ(dø1Pf@ì1Š9‚À] Ùað h—@òˆ1;¼%ЊsµÊˆÛÒ|Lˆ‘\e4.2-ŠúM `{R<03ÒŒÐìI ”Ìô€´`ø°¡Øex]ALЍ2%— öáDüãø÷qáB ÿÛGþO?ñ ê0ŠšMNðþŸú^ô{|ôcÿ·^<<¹šbÊ\€Ÿ2ªL›°S×XžÌ¥ –*Jõ"€n³Œ™–ú<$™\Ùf¯1q°':…½¤þÒ„­j™91¢®NƒsÕt̬ R7ŸCOžºæš“ÖÊC´u²*z06ëN„ãã<üð-¾ûîC,—m¾yÓÜk¾™ˆD™†±W=GÔzÎÀ=Úmª£TÈu&‚eRÚ×NÕaéi·U«0€pú/k=aYu"žªŽÂ’RÏÑ„€gµ¹¸­‚áݧ\76‘†:Y7KÝ¡RÍVÚ¶ð‚ÙŒjø[Dk_ȵ¸{uQ¿"=³:ì—§6é" û:)¿¬û2wô2úüY Î{ZK«å±ñ. àGŠÐ¥j¥(ô87Q‡æÙÛzìÓ'zNNõ¸-”èõ·í¸h™oQÛÉ Ô¬H÷i 4 @Ïy¡×ûeµÝ=S³#zž-Ü®p®H-]-(/Ñý4«bkª/i¶ +:øŒ~vCÝÆì| ‘2s]ÕUÚ¼´õØÍÒê”ûu¢·jn±fQè>³žßk\ëXLßè²-#¦ÒdösÈu[(}m¬ÈQKï÷€{µ ÉôwûúÌ(õ>;×ë4eïU¸/Ñ+ ¯ÆÑ‰¾Ntâë±Ê}5(Éz™¤sùº˜ªžß3‚bÒJަÉ&åú_¼À;õ²Ñ("b_üpg¸÷ÐÆÝõm{¤“ûeM«¢À¿ð¨ÒŸ,®è§á¾Í2·[{H˜ÿÇ¿}ù/AÛ÷€¾íGÏx­6,Ç„Ís:¿¥Š©7Tý¬ê/úº/tY/ç±ã¨ƒ5æä¬žd±§Ô!KÕÎñêבã-Q8NLÚQèxJXðŸÙ·™9S´ÂhQ¾~VS¼åq­·Ÿéj‚Ú‚|Ýg5r$c[^U±v¨·w©·Ô̱¶ufe‰ûò=fžÑÀ÷±†à8¦3íV&U…  ¼å¡‡ðÃïý^|èW~ G£%:»1î NൺäõzˆoßFPU8ÜÞFÃóh·,öû8ït¨³XPœ$¸°\Â=eI‚^«…8Ëðì|Žg ªª ­4EØlRØhPžçÆ1†qLÄLò£9@«²„7¡ ¢2IÐl4Å1VyŽ(Má­V4].Q4›h’öCнV\àƒ¾‰ã…÷Ò伃o¾v?ýîçèͯ=#ïêkP}ÐdLEࢤgc˜Í@§§ ,“B/Ë€ùlv¬ùfÿÚj‰]­ï EÉÂÙZ-)~û}™†7›µØóä2ôMoyËL™!˜¿ Ì]Þø¹60¾6B*ÖvÞL3E1ìÉ]‘õ©;”Nä[®« öM¼Né0»úù ‰бãBd¸ý\ч‘þ>×*aÇZ«0ÒÚƒRÜÌ'R)D7 ø’†µ]ÐePMÚBÝÛÐ7t¬_ÛXn¤û9ÖÒô ‰.㺨-m2ÈÑA4µ`u9^=DǬMõšé™ ‘ÒÒ<çÚÔøžâ-Ç)rlk ŽMH®×B¥ÍRìXª\Ц̮իºþ¥C:Öc:Ô묧š%owÕÍ~6Ôïál¯•”Έ3BíF¶Òk*t¬xǎÔi¡bý:vÂÔZÕ"2Ó ôØŽC˜Š/º×3êL“Žã6µ§HCŸj{aÓý”$Ë7=ÆŸßÐíê:ÕÞ¦^+ÛPjW¦¨Í)jäqK)p™ž—y/ÃeÜšûåÿðU¾%´ã«¡ø–WØÆWµ|þ*§WÇ2)g–5¶Ð´ÀMp¯'Åt ³Š&|þ m0ÑeÍe²Y|ác@àƒÿæ÷· ¬)ÔœÊ#–‡âòÄ ¨ò OêéÍDTŽ7 "ÀÞQ„a ¬J§ñ-qVâ?ú-ð­À÷½xÝ[EŒþVýûÊ™#źmIçæJ‘€)Àû"èfµYåçõöí)ràZën©®¤áø“šr¾ÒñT—§Œ]öT0®M‡õqîø3Øùõ|„Nó‘i˜/(§Òä¬Ã q³çT÷9­_{¶,>Öß©E./õiÎS=¦Ûz|ÍÄí–î£mïm½rÏãGˆð ·˜éMeɯ+KlT¶Ê’/†!ûÍ&6‚=[ÞóßÉ7¿øy|ñ“ŸAãN„VɼÝ2¦3~þÚ5^aó3Ÿ’ÞÆO’^–1õzÌeÉy’ ª*pQ Š"ä9_j4øv»Ûççø>:Ï<ϳŒ‡ƒ¯Š£0/¢ˆ[DŒV 9WE’™Ëá›U…¸,±Œ"ÄÍ&ò8Æp>çbµ’Ge#k·€ùÔiqÌé‰é€þÞ†?ý³lùc~ÿßñ?þþ#<øúåØãª;õ{LGG fÞb*KÆrÉ`f”¥L=Œ63™pÅ `Z­³{nH›ˆ‚ÛÛ¼+Œé”1±"¬¹PÍ„¬ïömù^œ›GGŒím¨fêj%ÈÆÖ–Çáæ…$lw»„‹yMÚÜdlmñZkq~.ˆÉÁkq-Y“ ãü\¶E¶Sk¬V+`>gø>c_Âí¬¡˜Lý># y­C9?—å„!£Ûe1®^dµbœž2†C êk·%`ù¥ÏO³Ê•ã/Ÿ5y§#Û¾Z‰%ËXiMòÙ(bM—m˜Ïe=I"MË` Çz<–Ï2Ëï²L­f3¡Žå¹ Fe¡¡z%ീ,bø ãM€·FFÑd¬¶ÞEÙUŸAŒŒþ(ŽÕ©œK¿ÍðÕÚ6œíc º4V‚”žŒ ¢£¨)ü˜ÑŒ-ÉSF2dä@cÌðo3z‡Àå\&À\~šŒbÌðæŒ$eäx\bs³…ƒÃŽnå \`4.0Ê’Q}D%šM 5\.Îý‘Úˆx oÅ ƒ',¡o›2Aõ™AFu—Yý’Q.Z0ü70èTŸ¢¡ ë`3³°´QLÂ2%°Ãµˆ¹É2SÉUàËôåsê¼T—¤œeÚ¨^àÜÉ2 õž²L…ͽ£»d9ø› jâé§+þÍß¼ÄÌ1ÿÀ|‰|ð9–qÜgxË4z¥#°®®/äz2Ý×å[Á]qmP~·ñ,Ûf™ø^…„=À‚Êä:÷4H-âÚy'p]×·ÏÀ®ß8ƇX*Šëq31÷ŠI(8ÓÉþ[>÷° )/jHÛôà@[_–ªöÁ ß{¨©5•ºA u4–)Ò5eAbD&×.ÿ.=צˆ¸&ŽOP Â纃–e’6Z¬35bá IDAT(ȉn{ªçÛ ð„ëk Ôý2Th Ûè6øz½Ä,ûgˆÐ-]GÌbýºQ«He¯içåÛÖkd¤Û|¤ûü î#tù}ˆîàצ3güyAïGeºoᬟYн9×A‚-½HÏý€k‚{¥ÇÁ.–X¯Mèrº\Œw³ÉuWèØ·y=ÂÅ–nk_÷™ôMm¿tù‘.ë6‹ëUnF ŽýΈÁè²äÄæTß]Ý'ÛÇût›ÁøjšzûÚ¯…¼Äâë]þ«AW¾Öòá &î¶™ ­Tx­›ÀS  ÿògAÿü¿ÞzI–¥ŸÔTô#Þ­9$ô´8{tý°ýí 3–)y¡ÿ¹®wÐÒ‰ÌYøP—=iÝ£Sú¥~¦£Ì]Õo¨Õ-íW /ýh¼þ£¿ô‰^„,×µ_;3ÑJ&ôtK÷§/ÚZ8z†®²Gï芓-anÙíÚÒ×<H-gÉSÁu¤ëÏEó@amˆHêU@7us' «£Yý·ö*#Í·¤\Ñ®mƒ¡”«¿];@ÓL„ìd"~ åSÁ:©7zlM‹¢ÖÂÈt?}€nêÏÞÀLCfü™çÑ AÀiÒ A€ý0ÄÂ#:õ=z1qFÀ´ª(ÜÜÄCßôMô‘9*œ-JÚÙ='ÿæmòóœšoxÂùíO|gW®PÞnÃóòÂò~Ÿzó9¢nÅr‰4Iè.ß§1=Óh`#pùä†4¯**f3šEeI‚±ç¡ CjFõˆ(Š"LšMšå9 €ZžG‹¡8$ð(r 䙸FQD’©‘È ,J 4!ðˆQúâU.í-Âr‹$mBà!¡ "øò4IZâ¸äm¼ „²O¨RxÕÍ–‡ªôI €@}BfîLDa(Š´æ¼Þ!ˆ YK'žÝø$I5‘:]* ¬@( ¼%c•ò¢Žb<¼N.z¤œíD'±NrK}&ŽêXµ 9­É£’­ÛýßwZŽ˜uY±3¥^šF@‘‚Ì9€géñÇ/Ð'>q‰’dBïyÏ!%ÉŽ"Ïð’·o¥ÓÚ™òÝ ¸ Oÿ@ÿ-ußZ*@Ï•Ãÿ¼j:uO¨Ö´t<¤ö·]ÆjËÏ”€'ä|àPíZŸ× ºàI¥'íª(v©…ò>M¢Çxþÿ¥îÍb-»Òó°ïßóÙg¾çܹæ[U$‹Åf“­VKÝ­´,YjÁÐ`ÙjXÐDZcQ’Ç<pò`¿¬B‚‰8-¨-%†¥H­V7ÕlöÄ¡I‡º5ÜñÜ3{^yøÿuÖ"-R´)àâÞ:ÃÖ^{íø¾%O˜SéÝ&ày¯>€' xFˆËÚª!ÎÞV•<²€ß“ÊçséP9Ò š“1G›Ie»%]ŽBºPc bß´¼RvdlºrLº+¡ g2sb(Ò‘D53b¢ÿÛòs"¯'Öœq7¥.ŸŸYž™¼6_ÿûrL3ÃíK'æšÏÃפ)äûJ¶uAÀéj¸ÄÇÝñ\Éö•$-Ž@šº2JZ®ä歷ejÉ·ú2/W2·9–®u Yð.¹¿ÙÎÌò¢ aŒ1§ï»Î>ѾÌ%+Èuèʽږû¯¹zB†µmð-lsußzG޽!ÝTÆOóº.ýY©¿Šê¯h»ôa¼Ǫº{ÄÇþ?Yy¢þ[½Ý{ÊuŸøŽ¹ÊOÄßç@>Iø{DÜ•pàÊ&wŸžbíb=ru¾Ñ¶·µ“1œ;?×¾BT–ãTŠáPžÇ¦|ã1ïkg‡Ï/Ë8¨?;3’±Ó©öá¿}Ÿ?ãºü[›ÕµÛüûô”“‚Á€g6S˜NùxV+ã?¥oK+n±¯£'Uú¼ôÎç&¦¡bž‡uGew—Ï#Š8YbŸVôâsñ}#g;0k‰S¦òP®XÕ)Þ| ”5&93À$>#",wÂßO ëIQpäsîR(¨JæJ8P5–û€SðSc5ã.‡þˆ*V¯jç€S+m•]6Ö˧Àâ¨ÀswÊEÂà(s`é¨"Ya±˜#®;PùˆÏô';Ø€Rq1Za2Éñ¥/}EVë ×§ Z÷¯8g€³ÊÌ´skÒW€j oC¯ˆ-óÔSZ)¨.ÕÔ‰¬€Ú×"N„8û`×b³ÕMy ©Ö¼ ~MW”3Ë)Húìh˜ÍZ¢UÃF®ÂȽêGøâk¸wïööøGÿh‰ Фë—<#ÄÚ¬Þ Σ-ËáÞ½´ˆíïÈ“`[ª¸Û²ÚÇÒ»÷?ÿªhG¾#ûyBÞ{`±"íH¢'Od­×x\ùÖO# 1¹°žh‰÷©Q]ŽáÄR¾Z(¾72ø#Á ¿âÄÅîVèu•/å'Ç{§›vª¬ïêe9ðG¿º8¶ïŸ~ÖÐo2­»^‘DãoÉR®…¼ LÏÛ=à༔t-î¶µ—rYO­é¤ÍßµÓµö]½/Óð@x%¥ ß„nFo¾œîx¢ À7|‡¾Ï¾n€·Ë³*„_ÖлZíï/ðcÿyŠç~,Á<ÉqàÉV RxõðT#Àý‹6Æ+UƒÐÝ­0L‘¢"Bö}ŸÀî7^„»(ðÎî“ð øH $E-ßÇ^U!q]4|æqŒ·‰0\.áfÜ8†·\²mV£U–@’`åºtÜé  4 4Ã(KìyÊ4Åq­†,MÑ( 4Ä×ÀbpœeXø>fq G)ôV+À@ÝZ£w1cüöäyüO¿à«/u°øï?òÉ1yˆlœƒÂÎr ¯(@Iµ\B‰á\P–(”i'lV–‚Ÿ% ”¤£V3JH:ØívMp¯ÕŽJSNŦì]+š8×/ËvÁÈ/¤ƒpf•SKáIèÄiK®ž/{–h¾öuiZswC®wËš¿5«\iÞˆ–p¶¸1Ú‰}i%Œ±Ñ.]߇ÅÎäZ6,R|Ç’ËÕI辌ÃR:B-+ù¬NH.¤–>3ŒVdVb£¶t2¦£Ú¶œ{aÉ8ŸK'§”1z¯£5>º“·ú¨}ÄDàƒH ÿ0'omª‰ÂÊ:H¥ej#W‹B 8Z“Á±äK+@R¨o~Ø «?ºƒž¨ÒR 25¿+—ãWdªM¬r¨û„úüE¸®Se– ¬ç¡Àw<“'pŸCùlO–ß žY]§êêlúƒ_ΆP›Ï€îü"h òºR{ Ms…öD9/ª%Ü©ÿЉ®S»¡¨±G˜® Bš‚Þ¼‡z½ŽìÖê©ïþ>ýð_«¨s£‡¥c×TØéÐ~šâ$Ž‘Ïç4m4(©*z7 ) ô}ŸºyN*IЊcÓ)(ŠÈ%BâûêlµRÓªB_)ôóœ"×¥¨,q? 1ÍsPQ CDyNAUÁ-K8A?Ž™â†pƒ€ºA€êÁ8Y†zYÖÐ, lå:Ìöñ¿ÕÁï¼p 3jã¯}~„ÿñÞÃíͩʔ;>)‡àx©(B˜eh„!ò(Rª(HKF¯IŮ˪N¾ÏDmöP µé^§cHÈQ¤+þ ÙÉsæ?T•V"<|Hk…¤Á@+<1‰\ó tÇb>çÀz<Öfp`Ïçü~» ”Å´"”KØV’hÐR¡VÔ…B,yTÉ©¨?Ö¸gëŒØ-8AÛŽè„På¬`E0¾´ú€Ÿä²¡¦´D®ÖÅk¯ÞCöo>KX ŒJã™»ÏÐÖV“É1’$fè‚Wp§¥|Èò”^—;"Êœ.à„„j¬PìÊjèËÃÞ×î¿wÒUäš(̤ʘÉéê©îá‹­+"YuS‹¤ eLÊtÐÙ¨P[û3À˜—öömü{*AßÒýW'ÀR¬V~í×îâì xî¹—é'r 8(ø€›|L >‰ÀFZº“¢x;ºš­«üºê¾k©"­¬€ýUùL& YÚ4®#ûÿ(¼Zaˆî 9–Kt® ‰÷’â ¸%pW€c·wåX>!cóHq@¸)qS$r¡úVãH 0•®ÉZSÎCûmosyß”µ`_¾7¡÷VùÛr¼…Õùp,\ƒ ÐI„[sv–ÉÇlªùVgFKŸÎ„«0’D –ïÄÉß}2ó°kñttã+ŽÌ–’|Œ•)çF’ˆÄ’huäµ 2eÉJä…3BmHb!QÞR”§Úd0Út2&~ß²þR D:ö…`¾%×GKÍÖ„“‘HàßxÕDõڄϵ"°] À®ÀõµL…ï¢Ú•ô\ê dïw„Œ1ä™Dä²ßRÈr͵*Ú>€PýY2µ‘NÄG5Úûíj|<.ýY ©`¯»V£´²j,••÷µœ‚ú×ë;@÷`þ2¥F[›Â½à³2]^c…#•?]yØÝf+àÞ»†«_røz ^YU}Ÿƒ+Õ–Kø¶L'-06–×7d[ +Wž&@õ- {¸tH:€÷²©OiC¿©LíLeÑ;:‡q%-TRWÙß ­4žò4]IîhxRK~WÖñÈ£kŠ÷Z¬+ú•¦Yé¦]ÓúYX]©X–r­WRêX¾7²™–òÖºs¢¤R—ë½Ë‰Kn K„GqŒ@›E{U…e‰i^¡STøøŽÂçªÂþxÏþõמõw ‹‘Âý×=|õOêøÊ¿k£˜§èû>^==Å¿}ñEÔÃK8éîR„B}âÙ)Þ¸çax°¨9xz¶Dïñ÷÷nãù»süÍ ÞS{øîk¼<£kqŒ³&yŽÇQ„ötЍ^G«ª°"B™e¨µZð’“z-"Œ’y¡S¤·fI‚ ©F{ŽƒeQ n6ÉEY¦JÏ£Ebvå σ—¦ØØÝ…W¯ggä?~ŒEY")K¤EUš¡Hç¨T7fOà{÷cÜØKÑŽ¦¸ûLN{sõúÙ²hµ|Ž"Ë:2"乎ƒJû:è tcƒaO«Wì÷÷9˜}ü˜¡;‚Eï…÷œq…Ý£Y)©×>®]ãàþw´ïó :îx°D¬‘jÕœŒfӏбÕ|Î|»­Õ¢8?;ããÙÜäïïìp§ù¼ÝÍM>Žz“­À4r¥ÝÖžü{±àßó¹Q§::â㜉…f­¦aXlü×j™¡ÛåízžVxbRy–‘$;¦‹¢¿£Çc~¿Ñ0ÛœLØ$Þ+¿«Ý¿5'£(ø:å°L€Þ6àå@=& P*BYY„=^m’p.€jÄ$íl Ô»@îpm^m ìÍH ãœ!V®0»0ªà¦@H„"eéÞFƒmpì7xšU@uh»„^H< ›Í>ÿäÀhAhx@v,÷訦@^ÓÇ óòºPTÙ[ð—ñÓãûEø—ÿò·<›[ýÓúñÄ7ðOþÉñ‡øîÜä§R-›Þm ˜ðªésLÕ€*Œ¹®TŽ­@Až"kã7‡Œ³v)n[p‰ÄRŠiY× ”ÈHr¸"k9SFÍHÉjœ“qJž¿5DÇ~G.Êûe:èk£(*œžvð‰O<Â¥K‡xô(¥ÁàŠU¹~Bžb:‰Ð˜…”L0=#SÙŸYÐ.íÇpÕ‚oihU.øwí”þPâGBæÕ²¾œËFeHÃ¥" î4Þ½%ç¯ÇñºŒ–®Yé]y* $áÚJ~e‘º îâ“qŸI0Y‰Tk$ü†Là^+¹¾õŒ¥Ë´’DOKñÆ’˜ê„iyérÀªúk°sD¦cñ–…ÑA²Ž€Æ¾DGgú:’áµhÓPŽë WC’Ð¶f]¬z´’ñ%«B¿¥8x¬ã¨‰‹ö©ŒíTd}í9"ã»+ÛÖ„ö!™Hk!×p C 'cF°îöJË|ʵ¾dÁè4м!÷ada^.dþmˆ¦v,ßõ³TŽeSº¾ü}fÉèè‚„’düXÆ»-ü&ÝyËÈOK~v%ñyžƒ>ùúÃŒ¿(dŠþ‚û¥jÉ8ïãTùG@PÀ·_¶n—ƒÏ°|¸vè&-¸÷Àç¥# ]ªçsà©§€ú.ðú׬`Rr,Sѱ‰®…bL$qO”Jr&»Y&¢‹4Òhõ Ðúpí:@pÏplý¥tvDª¶û^ _Œe Í„d­É×ÛVòà÷ïõ­›ÉqI§¾t%†2V°°Â… º…v<’©]3Ð. ¤3b9ŸÓeéò¼!þöµ´“ «iÈu”-]“ýjš'KN( `*+(UÑiUâ^Ua¥~èø¥Ÿ«ðã?Wb÷²‚×$œÏ o}ôÊ—]|õ7‰îËÁø¡á²¢U§ wµ\—6"$e‰eØ kÛ!¶/O„׿¡ÐLÏ}xþ©cÐ邾MÃõ­ lîNqX\EëÌÃ"]PR¯c1™àq³‰Åj…¸VC=Ïå9¦í6ŠÅýª‚çû ¿sB½ŽÕ|NQD¨*,G#œÇ1æq o4‚•ç!\.u»äy)ÏÃiUaY¯ƒ¶¶¶ÛèüfU½g± áÑ–IÂôÏ(B1†ÈÙ¯ƒ¯?‰ÅiŽçtéR‚ƒ­UÔÂãGÊå äI–Ái¶Ø†`µâµ,5_€eYµD¿Ï4ãË¥‘¡Í€Ë—™ˆ¼Zq€ïºÜy¸}›“„‡ ™:X‚V)ÞV£ÁAsò1ííñçNN >¼¿(¢5ìHw ÎÏùØ;hgÙ¿¬í¶&OsòÑé2u§ÃçÙhðy>zQÃ2< ­ NŒzEkÙØÍM^Œ._6°*mŒçº´ö·Ð L¯ÇǪ»8žܸÁ’·{{&a«ÄÄK'UÅÇ¡›6Fô}Þ''4Â阻=æBø-`6bHŲ"DÛü0NG@C*³I‹åj+O s)»@OÀže›;!CfìGV,ýà{ø« ð"ÀkRâŽCÔaÂ÷ÜZ;À|8 ‘ ¿Ä´£9y€ÓŠMB3JíápëÀ<Ò©´\]NXª]ÀõUÇ·^ú:þÎÏÿ>÷™§pppŽÞE³Ù¢ÿìïþ=üê¯þ2½óÎCüÂ/ÿw¨°ÚõÌ?)oï$¼J«’aQØ€i.²û~PhÉ`DÒ¿®KᔈY4óÖ«¼Æd¿ÒªVCÞ[òÝ–TXµûÈ"›ž‘‘#XŒB‚àm ¸/,œ•lãl;°VeàâÂG–ÍpçÎݽ»ÄáaÃa$Ç£+ÀÿÁ­å0ÎÑyØ@,Á™6$Ìa«uç¥!`è@Ú‡VX¡ƒ¼‘gmèÕ@S%É…v÷e\4¤L·övÐã™J’á¹h¿†MkÌ{B.ËØÎEÚ–d¼s+ÉË$°ÌÈ@¶tYÈuN„¤®ej‘?-d;]²#™©[‰ÒJæ†>纔I•% #˜ô%Êˆå·æŒ<–ŽVÍ‚]ißoÙ$AÒ ëÔJà4F<‰°cÈ5ˆµ·ðwƒÌ=¡£\‚逫òYÍs€µOæ·îNdnºÖœœÊyhu¨ërMÎÈp8«“è˹0‚ zž‰ôð© ßÈÖ™VÕ’ãÐlS)DaA†«ÈñŸÃ8÷5)Þ’¸†@ÊjZàA cú‹t0þ² ü%'Ëú3÷ý~ýZ²Æ×TÀk/±tú3—Æ@·9ï}íÈ´×MÎOt*—§ÀÆ6pûIàpœÝy–÷bÏÊgu=D;ydм“6·òÊ]‹.&òº¤½Î‹îÜ IDAT&ý0­€ƒÛ€{8 èyZ»=mhq#Ú0 Ì¡E ×È» Q®Ò¾ ¾©3&¤ïÈë™YÎI'p-I”N-¾KÃì\™ú"ç‹¶Õí! R{¡•N¬XfuxfV²£©t=N,ôãK…’ õ嬸¶~Ì8À«%h¢½>áo}ø™¿­Ð¹ G¹\B5p}e–¡hO§ð ªÅ1Þ®*("Ôãñ­[h†!(MQÖëð‚éxLsöŽ@Íó 67QN& ,ƒÛlÂ_,Q ÏA[M<ÀUüñ÷¶h×™ã¹+ðüÓž¾¾Àxäãñ¤•(8*Àq9 žNù·V?::ânÆÎŽ €èu¥?I¸³AÄîæ&0*,—„›7¹K@Äîùœ¹š³ »!¾Ï]’áÐÀ´êuN4ŽŽ8pglÞ_jˆúË%C²ø½~Ÿ»0µëÆ'Hq ÏnWóOXª×ãóX­ ÏBwæsÃÑÉ×rÉï±Û8Ušâ=Ҹݮ&\<¥n£ˆý<¸ƒÃÉB£<ó ',eiÈäÓ)õƆ!¥O&X«k5ü K;;ú»Ã†Lëô€t&p pšœ`\¼Ã±Qp¬„€Íd̉BáÁ&_Ò˜áSaÈŽÜÓÐì2<É 81Éë@Ñâ>þœ ¶j B²‚&¯ n]øÑ] ö a\ h]ÿ-H ]2ç£¶Å„î± †JÍS|æ‡CüÊ/¿‰o|} eØZ-ñ[ÿÏÿ‹ŸÿÂO೟~ÿàï¿ú«¿ˆÿñÏàèx@ÿÍûñêËß„ãt * jP‰w€s  c>÷JÃPjæ â*^1«T»íÞÐ a‚SÔ1[Y˜ø‰¬†5 ¶õ*X¯gV VЦåRN­ÞfuH\‹ý§=+®JçEI`«!M33²kQv¼`Žû÷YNóîÝG¸ysŒï}o‹ÅŽÏHVùž$ 5 nÇ ª‘‘­Õª»Ò•¨“!‰×%ÐMå ¶'$W ^’©<Û¥ºC  Ӯ¥[21hÛ!4Ö¬ý]X8w×-¾Á†Uö§©uä²’Ä‘££9b¶VˆòOe=!+×í–ŸlZýÿ#Ë#‘$áÌ5×$Е2å:jÐ] E5äú?¶HöšG²eñ74q½´ºQ®®ØË1=²HÏ#ååÄÕm¼-ïµåèÒ±§Œ£¶²HãÚOÁ8_ÇÒEˆ¬ñêÈ5‘!N7-\‰b»Nàɼ+‹“‘Ë6­÷§Ò…[J"¶-?§V碔5• ^‹$èNN)ÁÿÂVxdEbÂŽE(ß±¡ŒÚŸ¤&Éù¹Å™Àù2 w³eq™|eœËüU$ø”`¼çŸcUÝ?ÊwÈʉm¸”íö=Õ5 x<ž{ðoƒÜçý\’׀ø+òÚê¸ùI`sxé[ÌŒ-Q°¾…à¼,ÓALïp ¶ûѹ>ŒŒæôo™[„"¼×¾¦vä-àêMÀ½”ß¼ßN…ƒ*-‘=Yžõ-5|ŸúSVW/åÖ*!im Q WS9»Ë2£u#ô­,׎ê–FÉPÎ˱jD‰åº&]ŽC‹”­é‰u‹È¿² Pº{ô”œÿ®@³:Ö5h½o)ËÇ=túD?úãJýä®ßž_þ’‡ßûm¿û¦t„ž§P«UCâ8PAˆY`•$èfŽ5›a†(Ô}ªHiZÛC¿<}cŠ.N_$<ÿÊÀÁ½¯(f˜\´pý“-tv/,]|}~ÃbŒ®z‹j¾ íPö†CT»»XÌçL-¬Õà,—X¶Z˜5›HF#JÂjµBQ–¨² ÔncËuÙž*Ë×jtº±¡üÅQY"ØÜ„÷ôÓPã1Tš‚ú} ªŒFäç9|!m»qŒ*Šàü,C^U¨´ªR2G¶{¾5½‚ä°ÂþN‰þÆ?xg€Ë½9VE€SuY °Ñå€XCˆ¦Sn¯]ÚKÐlšÀUîGGÜuPŠ«öÌŸ¬Œ­-ø>äD@sZ-VÒA¾ï‚³öp]Z+Feƒ&?‚××|‘锿[«a-»Zñ94œ losà8f›õ:'8x×]”Ý]þÿxÌÛÍL"¥?£»>í6¶Vc+æ²ðûÝ.ÿ? µœ.­Õ¢t³¹É-Ø4^å}Ûm>Æn—Ï[s+Ê’I+SéN‘çi ^óÞp4š@$BÛ…r¨¶pHÎ8I[ÜÁX½” N:K!@¦9P»Ææy`̓&wHVöL:IÂ%Ïà°K(æ@½OX$[Ï€íÄ@Ú.m«@`cÎ]ÏÔ¸óJ׉•(¯d9¿Ú²%~æ§ÞŵËS,ò-zçTßÁtUáÿ_ÄŸ|}„ÑÅ)ªâÿìŸý!þþù?à›/¾;ÌE× ¶’„Æ›ê q.ª,@mÁ¬4·`¢ºªY«Ü¦|Nðs‚êH€TYd]kZ²TkjÖ·’ ÒÁ¢Œ º„ç@µ£±òX[µâ¢Ó•ÕýTVf ˆõ,n\ß~ûiln.pûöC\ºäá…tEºeõ¨Ÿ”ïAàBu2–«]Kêä"ÙjñOX…gåItfº)™J>¬€mNïíÖÌ,¢²c™¸0^™tjæ¾ì_+9‹JöõYžÜzr9mZ›íI »’ µ6&œ%cëɪ“¥®|N½z_dÊ~J®M*in=©—Vd5"£:äËwmÙ—L¢Êz²äG—ÊlZûÕ²+¥uÎ}+1„TÜC‹x®¹ºc±cñJ ?2²HÛÌbÖ…›B27|yMswˆ ñÛæ*m½OEme%XK¡”9¹kuMºÖ6t‰¹)ózeu¾2óHGGš‹¡%}•©Ó׬!Ÿ«I‚u"‘œVƒÓ¦{™ŒoÔ+¹Îº<}þçJ0Ô_2Cá?œƒñ¡Ç§Å‰s ×ä_×úÛ·ÄÀê–òQdMiÞ)I6hfÝ~ÓÇÀÙàö]àÊǧz÷m`’¢@Ÿf#9ú6í0 >óèÒàÅ?ÒÒè!,¬$CK²ä|–†‚¦Ôļ «T8&cSÏP$Äè£{É“B‚.°wðŸè»Àhe:úö¨ "xSöýPê&nÔ0ʸL±Ö#¡ 6é#¹ ¨´êdA½J«^£k6’dÐ…Åñ-ÈXKÎ/—¤¥!·Ö›Æo¾œsË"†Ï¬:+ÛyÒš}1ÿKzu,€˜è[® Üý)Ÿþ›í= š.¡¾þeпù_·ÞÆð• µª í¢@½,iå8 "TQ„£F]"¸ž‡¼VÉc랇¨ªàVŠ‚ÐÃ(ßÄ'ž¡Ó¯ðÒw|æÇ–J/þnW]V íœãÅt—?éãò毿õ}øUªRÇ£ôüA³‰z’ l4 Š¥@ŽƒÞj…¢Vä,qª²½=…Ñ ß§|¹„çºØ( ÖȨױò<8‹ª §Ý†šÍ”*K¢ƒàÆ àì Ùj…jwÊuÑ9=¥ QRÝ.¢ÃCxyŽÔq˜Ã“çFI(Ë€Ð%§ÞÄÉ£0{ù<@+XáÆæ)îޚᙽ©–MLZ@ZÉL¡Û¡µ\Q0Lg>ç ÓẪøw­Æ ƒ†#Å1K°7ovv¸cqã¾÷ïsBÀälöÅÅUn‡_×*VYÆIÁjÅЫ àík¥«éTˆ0hNWôµ„öÅÐŽÛ³™-kˆá¾¯°¹É^Ún¹ä÷›"©ðø1oc±0«ÙŒ».ìØ­çLZ×Ò°ZÙ)Ïy›žlm1ôl]¥å=íÊ|a²•T*k‚ ×°¬ë²ß#Ù÷U+ & NV@µ-DÔž‚cdEp¤ƒA‹Ã SÍñÕ;ïž{®¤säy€wßÝyŸS O¯¹tjB%^`£½…À³F`Ó°]ét<6OC1øÌJÈJHi0reâÚ1¹ƒÑ×r½Å„Ù‰*2×V¨Åã5ŸFƒ¢¡X¦VsgtgI—E5·¤$£ät&z).ñþ‡ÜèBÈï[V¢’ê¤T™ ñ\æÓ¶Töµ(½Þw‡ €{%‘Œcº×–¹¹æ)L ª“=Ím™ZÁ·&¦GáÑOï¶ŒÇ@ÆIó.ò5”޹K|CÒº².Æ}dÆ«fUöÏwZ0œŠÒºtâWJwΑy£!‚ºS—XãÜT¦KXÉÌXޱ¯IÖ–ŠÕX—p4ë¢N.ë’<’ ïJ—i$çqjÍ›¦$¾:"ÒŽèceîuG2%ß[bm©Œ…ÜGbXæÈ€Í*†“å†ÿ¿%yèëŽEèö8éÀ¶)œ†Œ¢7YÁ¬g5rµOF,}lê†÷Ënƒ®<ÇÝÁ#Ž€Gmê€k½{ oxê&о¼ñ/×°šÇ±Åwhˆ _Í¢`é„#ËÀTˆ©õx%Á©GsÝ€}™¹{×€úÓÀéW™²E:Ï’­¥m©ãh‘¿¥EڮČO/­3!~ A›bK,OYy°²ÄÚ¦0¼¼”±¬¥J7áö±–ï%ÇÊÇåñHÚ·2&s ÉÚ°hs—d»šCâQ:Ú“eîL¶}뇀ù»@ÿ¦Â,pèµ/+üëß^z™U#‡P(ª’ºŠÐ‘ZQæºäâåóa–a3I@U…CÇÁ¤ÛÅvšb#ŠàÁ'¢–ç`VµQwR4Ÿ,ÐÞnm/0únÓ{Rß¡ã"ÁäÞÍÛmì}<@wvWïõáï´©]–xf>ÇŽt!Ó)››§STaˆ³,áR¸ˆ"Pš¢ C, ¸³Q„ýÅEà¢,á¹.¨Õ‚Z.Ñó<¢zÕxŒ²×#õüó¨<åh„Ša¿R)lŸžÒl4°ªDŠÕ 8;CQUP® §( tÀÉr§Ô |ø5¨ExuÐÇ 'Wq2ib×`w{FŸzò7*̦Àà”q—ƒ¬å‚ý®^åàµ^ç€{2áà»Óá×ÅÐ$5!ÿÿ©§¸ qÁŒ$áÊþtªy,ÕztÄ„ð+W¸2_U†ÜœçÌsˆcÞîÅ' J£+.i‡qW`^š(=²8¦Õâ„©^7^µáìŒ÷åº&YŠ"þISÞ¯î hWj8wl\×(iu:¥;#;;ü¾–Ù½v°·Çc9rò¥»í6CÔV+¯4åm±Ä/'nAÀ¯?|Èãšeüù$1‰ÚblöÙÏ"' »Áw½ç‡Ÿ˜ˆ­–€'AZ«jÀJ¸µmú½‚=)š[„YN˜×¹Â—9@° ø—øî®|ñÑxPK‚Ú²)¾Ý@m…lïiÄ>í.a\ZϽd Ô{@7ÊG„Å# éaŸ™Ñ÷€r” Ìf>~àS‡s¼òîM$ùXÞ ÙaÒ¸ò€Z— F@¦ü¸[ƒ:1àæ@1•Õÿ²Y9Ý ˆPAš¥ˆh¹Öúû*²- ^R·*³…%ýÑ ã °’'€î*ddXv‰˜°*é{šE(iÝ D´Ê”#‰fM¬´†Ù¡ t @…,[Ы¯vñ¹Ï±»›âߨA–•ö¼”d¡/‰T) À2 If|SE,«¹(×- ®K†˜ìÉè`v*Ç5ISÒ bÖÑÝ‹|ëËøDV-7ú’ëNQ`ž|Ø£TP5{Vȱ6õX‹êRC^B(×bFÆK{;òÝ¡âç²ïÒR‡ÊdN¬ÍÛ¬¤VÀfÍÔ¥»0•êx.×hfñ/6åZ­,ÙÖÄŠtFdˆÎ w¡£¶¥Ä÷ugXªIFWáºâ¿auJ´åT¤\+ùlduKzrvåúŸ€Mud¦ï½•µÊâaT|N;xi÷¯Œ p$‰±NÐ+¹Õñ\®Ž`5ä­! NbE³™Ž‰†üÝ—yݵŽ+°ÔÈæV¦ß´Ö桌iϽ H[(ÿU$ôçL0è/º_2ÓƒÈjZzœS’Fɹ² ½\U2O«Á‚Úø†WO1Œ¸Î¿èô `Pž<®ûŸ<PÐEuE’šwù2©·^ÝùèÚwÚ_¿ÇÓr%ûÚ³4,Z’(œIMhiíoÉ­Xrª•Éÿ)2ªO¤©j1€“ï;Ï—¸ :§!‰ÖHÛÔC¨iu‹% 褕­—F.ª!à„™Œ£4à)±š çV‡`e%s••$j5hÝXß±ŽM+UëfxGÎ9µ:™•u¤Á\—G‰45ɾe;B>?°ù4ð™ÿøägy|õeàKÿ\Ñý±‡E^‰b81Æu#÷ ¡ï#‰cj:¾—eðÂ{®‹xµÂ£²ÄÅxÌ–RyŽ$Ë@ÌË ,аê´ðÖiŸúø>ÿKL6qÿ÷B Ç.–.(­×ñÔhˆå‘‹ö'µñLƒòÇ(’®Š¶Z¤óÇqº¹‰*IP–%ƆI‚±ëB*ÇA†p‹A¯o>§0% –I‚Z½ŽÂó@A€vÁ òòñXÍžx‚°µÅÚe‰8Ë@{{ª ññ1M« Ë4Ež¦¨² Õb¿( Úm”Ó)à8pvv ÎÏ;E¾ÂqàÕc~‰iQáQq_~¥qÒR}oAׯÎðü3péKÚ*ÅÁµ–Õð*€IÞIˆ+WŒŸE»ÍÁôÙWý}ŸÏÓr„ÙLaµ¢u2±³ÃútÊk˜ë˜’N@»"ý¾ Þ …²äa>×Îݤ7ÆCôUeˆÔIÂIÆñ±B«ÅÉÐ|΄t½ïz!b,¯Ç„ý}…ª"<~lL W+Ãs©*–ØÕ¤í "µV˜zûm>>'í©Ñéð8Íf,µZßzÒK.zÀðÈ/í 8©÷Ùó"Ke„Ç^ hGL v/±ZHaRaTÃᨵ…À•q‹Ç²è“¥;€r‡Ér›> f@TÍ(OÍ1°ÕC¢ü6![*œä„êè­u ç"“|”1y¸u¥Âµ«‡øö»Ÿ;€wÎ’ù&º@8¨NÈu¥´/å° ó(ÈÚxÏÝÜS&‡©s%A!u¤6~ÍKÐðLdÉmœ{ò¹ŽãhÊ£±.Œ¥Î]Ò{'d|%´0{e…g¢nTS&Øö¬§CÃz2ëßò”âài¹ìQŽOú/¼p€É¤'Ç¥«Ô+ÙϦ÷Q`SêOKXH‚ÚP±Ç¡‘…O9 2Q|R&yPR;#XˠЂ(”J½’¥Tw 4Ê-ž‡¯ô.Â]éW?T×zT¼-zõ Zu| Ü}¸r ΡŽp"‘ȶoh R †©LÎSY•ü€½\I$ò %‰öµXŸ› `uÕ» ´@j¬š)ßß -6ZèÅ#K8/²Ðzé?åÛ…¶ IZ¥ÜMPM¹ý.øq£r¼ «ùî¼B¥ÀP'å üIt1Hj*‹²”®‰P!㥬ºÎsâzÞ¶Ô¢ Ù‡b*$pãçøi n÷_þ·|ñ÷Éè¢BÃq:.:®r]̉¨VUè•¥Re _):q]UQ§Ñ@X¯ã$ÏÕÌ÷i?ËÐ-KLµéyŽaUaR•p[Mužuég?ªn]žÓw¿ƒoÿNÔwÉÍ lª¸48ª F)mýõê;^ÿý9 zmu´»KÕù9òÓSÌww1J5Cš;æD(•B˜e*C‚ïS‘¦„(Bæûp‰°1#m4˜VéºXaðÓ@óƒÌÓe£x0€ëyP½žj,XŒF”M&*ÍsrÎÎX‡$Ž% ùž·Ý†Ÿ¦@ÂËs´W+äõºr\n³IÓ0Råxè`£r+<šíÒWßì`¨~þ˜®îLéc×ÇxrŽá£ã¸t ¨˜³ÇAšqÐ8Ÿ+ôz´VUÊs ^WCÂýû´†?¥©vÂæ€úÑ#~­^g²s· œvw9@9€"vÆn6¹Ã0™0AËÏœ”¼óò¹¸¿$‰ꕼNPJ!ŽùX»]NDšMV `o zo»c+„!ï[á…ÙŒ×Bmâ·\ò¶•" ‡´öÀ`N‰B§C¸u‹; ‹û_”%ðöÛ¬¥ÿM§œ˜U•BÐÚ!½ßçñn69Á¹¸ µŠÕ``ˆæ,'¬°Xpr¢ ìeÉEµcOcÀ›³œâRø$ó” øÚ –LœOˆ;>… ±OhÔ…“Ñœ®B™²3BX0¿"íK…eFˆ<`¿PA(s…Äœ˜]Ú °Óa—£(Fc…lNX”@«h9sLr`”h MV–Z=‚:v•)TSªVº{ ž|r‰år¯¿¶ ”".PL (+B~"@M©ä:•bNjPeâ.) &Ðàì0©@44§+df gÚ&SÝ$&‡VUuduºî+$Sçs€çÀpõôS §ï€NƒsžöGš¯/ Ž'•uI*¨g5ÈA@cùRÚ(p*Áy$K¦^ ê´û  s(€ñ`ýÈP—%!›Z…ÔêÔ$/-ß ágÐJ8bÍDò8¦ŒÒº’m¯¬ÆàÄ tå‘|ÎÉ Í¥Û è^E¢Ú•ò£˜‹zwWO`Tºö2“9” Y}ë.èúÁrÄÉøÚï_þçÀ+#Fç^ƒÆ @­dTUè8ŽêÈuHˆh`R–%¶ª £²„×éPÇ(Ëa’Àm4ÐT ƒ$Áq-"Lç ™C_øÂHì§æg!ŽÞpg®ª×BÚKš* ojð@áòµ„Ÿîb:*ÔäkcJ¶:x|ý:Âû÷Aó9æ»»TÍçp¢@-@yNiQ m4M§pêuò£0Äîá!œf®ã`TUPe‰´×£úlF­Öj”;ü^Þpµ±0ŽÉ_.‘$P€Ã IDATŒÇ”ŸSáº(² j±@PTv»H=nU¡QUV+ÄÓ)°Zù>œ^–ͦJ‚€9 AÀÕ|JÍft=E_;ÜÇÅ4R{[D»~à©s\ß^©åŒè,¸IÈ*`pÌt8vÈSY²ïÅ[o)\ºÄ„æÙŒß#bŽƒæC0_ƒ},Æc…ƒVTzø»EÁR´ÜAàC;ˆs…0(L§´ö£ð}>/Çáï±iBžÓº»ríï[+P1GC‰|,$©àãuZÃÀ8ñaé]">m.èº “ ó×®1DªÑîÜá%t6ãÏ6Àñ1ááCN>îvœŸ›®I£AètZ-Kæ´˜„b:夅¥æsZøÂ0ñ¹Ç1wcº&x+( ‰90ºàsVB2®û€çVKB™2µrlÌ×ÈmñkA¨’0>Q6€Å¨B³8M » ´=àÚ¿7iF ð…¶CØ|hx@z<8¼œP-”඀l%ñyÆñiR)´„ ž¶¹Û+€Ä!øm õQï”xúöäÏð'TÜDl? œŶBµeàBärÕÓëpàZjõœ!Áñ§ÇßÃ3Þˆ†`ÔÉàщ V«ÈèT$Ž­ž~[ 3Žb¥#]:ÊS`_ð×5«„Vu_I%w]1•àÒÖ"ôÉðxä0öïÚ9²:.©|çXžŠK0¡«¤ßN÷pëÖ”ƒËxí5 „GÃxJTJûqÐöŠŸ—8l~`ÀÇ8Òº„ÊT“KyAü¾$ök¥ w$° i$ÉdŒ´º“v§^ÂÕ÷$ ³+×D‘Œ³x€-w!×O'»¢¡Br-ò]’k|MÆ.äК#Q:Я³Ûùîn¸8}í¾*u8yì¡Jeœc¥ÐVŠ-”ˆ(*E3×UŽCp\WŠæUr]yN£(†ã ÌsÔóÇœ¤)ª(®úÛ¿´¤ïûT‰Ç÷š¾bsgUÐ@òÍœj5‡AH©ë¢,sʽ›´w}çÎ.½ùµ„VSÂÎ6e½o¾ ·V£~£AQU!&‚ç8È}Ÿ¼¢@Ý÷©ë8Ô( DqŒe£AépH‰ã`† €¢Õ á¥KWšÛÛè,P››XÖjp/.€­-¸®KétªÔ`@U#9:¢2 áú>ÔjE¥ëÂs]x‡‡Xmo#j4¸#’ep*»]šv»Põ:Ö4¦?HU%rª\Æ›ôåâ±Lê´QžãæÕ9}|ÿ=³5¦SµM£K˜ µI­ù aÈ}³ÉîÖûû¼Ÿñ˜]¿ öêxðÀ¨T씽\w‰­×5rо±Á‰‚ç±ÓörÉßÉsN.t'ƒî¸«ÀœÂþ>Äq[ÿNNH ˜+RUÔ;ëEAØÝ%Ìç„ósV½JS>6-Ï ÐúXã˜ÿÝ]öÉ2Nª|Ÿ”Ñ( B’p’—$’t'Ÿ”jFDh·9)Ê2ö9?ç„hµb.Jð˜O&´&œ³ñ!¡V#ôû|=ÆcæR¸!5?æsñJÞnkˆBUrw"+ «’;•s¢õ}Æ™:MÀk—à;€;!8[„<ÚW{{„­p>",+ ªqÚkv.½è΋Tâ+`ÑÊ-`ƒãó<ÚMŸPÀôHWÜQJ§üt¨(IPСPðYúûÀ‡t9Öß%Ca#eàATJ%Z‹piÏ!üR"æ•Ñ¢ PÚï²/·íB–Ne‘¯µô«UW -©–õHê;"–GËÔw¾ªæ KOAÜzkÂ3ußzèï»·@Ý6ð—ùxÄ* }9¿ºäµ² “ÇŽÓt_Îé’¥óà˹ék(]˜Ø<(u¬Gïrµ~ï Ð<Î_44;WÆâ¦¦3{§¦8Œk~…(JÓD:&ÂQ A+‹Ç¡¯Ï©ðK  å’ ºõÛm•TºUEÄ*´%‰E"‰‹î¤@’«±œo%P¸]©í‰ß…xó®ÅsNRÔíg'h?Ì à…ÿ xåÿäøÇð¶çQæyÊ#"r]Õ ÄŽ£édT)EK¥¨$¢©Rê‘ë¢ð<çÀu‘:V¾Àó0°çT¯Õ0"Z•Î …tásWçô3¿ä«Oþ`‰\zó×Új~Ö¦ý»CŠ;=x+¦r˜*¯Ý@†H+E.¥¸wÖA³¯èÖí [O¨ãoŽÑXM0¼~‰ïNO•å a£0Mi³VSWª [e‰¦ã VU(j5, ¶œÏáÔjÔ­*Õ(ÚÝUQ¡, TU…|o–EAU’mmQQ– “ ʇR ãrnQ á“·½ woâÕ žðÊ$¡" UÅ L„ím¥–Kž‹‚Ðl2‚¡H@2!ô{8\]Å×îoÓʼnB@ \»|†ÏîßC:òðî¨GèÆ Ó9º½“œ›M…$ᪿR@<—%‘ƒ@;V“(41éòe†Jy¡×#, ¡šNéÔA½n¾;j÷pÂxÌN߀×ñÅ‚ÏG)ÂÞžBQÎÏ Ý.¡k §§XKÆê Ýóh­–µ\O‹ÓSÞ^Yjå)OÇኺãpbqpÀAÿ``Ô®æsöÏÏÙ”ïìL!˘Wqù2as“ÐjV+>g&Ã;HSNv’„ÇY'kqÌ÷$1&{—.ñgÛm&HOgÀ<%äŠP¦„­=BO±”¬ë¼˜ÿ?æÞ,زìÌëû}{<ó9÷Ü1ï½™•Y•U¥*•ªJj¡5ݘÁ6mlá^À4…ýf¿ÀOÆO"ŒmlL¸!h;  vÐ@C Í­jI%•JªªÌÊùŽçžyØÓòÃúÖݫݭM„3âFfÞsÎÞk¯½Î^ß𠌄ô²Ö1”C0/@ø ´^´O¥îs–Ä}e„P &²’'°• Á!Ù†½«iTšZkòn* Þ4,ö,òb¶&ï £«Ævá|$D3[¶1â`\-?Ú¡0»‚¸ ÍmëQ=ƒ,Žyõµ‰Ld:ß–‡÷wlXÅêS±%ð®}"& Ö PŒ¸®šGVQ«jènµÖàày­Ê»§l©Kgžw¨¤ÏDá‘ÂJZZ²)4ðq•m×YzàÕžG¶u&[™Im­¤æ¦–¤=R¨E®dCé‘©Yy®:‹Sû¡&?;s¼™'é)>‡D» –ý—¦Cù‰Ÿ˜šõzÅ×¾æ*ÑÊ2 7)uN½Þ©V¼ï8¸Œ&]N¼ª°SÇéêÜl4PÃÔ@âÀ#À‹^wSlÕþÂIÏHÍ-Õ!:ÐûôLs'jzr©í¸ <¸Ô›sïéi‡"×®ACïs¦ÜhÚÒ ¾ðLöð`?±^󥃸i×áLìeªãÚ÷€ÜÎi¬ë«ðàe•ç£ààjFËŠ ½Žñy aËØ{¤%Bú^G#vA²ç^QÒ¨å±À÷´“Ð:±Ú§&™»¤êPÇ·ðåiöõ:·®‘À ^‘:±½¹{WáQî¾4õš]q¢ß…±&ó.AxE×Â¥|‚µ1µ°CKl÷+Öûéšy¨ßÍŽ±±ÀÔÔëÖ9…õêˆÍ:ÉkòrOŸîûÓ1ša“¼¶—´®um8¸Ý‘þ8xÚå¿‘’A†Öü ù-øÕ‘¸ükß'?äuZº )k¸”ÓS0Z¹gcß#NE9³ÕkãŒÙÎmÖ[ˆî¸mïøS­Ê*¬Q­ZqßæÚ.FÖš*¯zii ´z< ñü#:ÞD¯Y´IþÎ×áà¸ý²¿‡Qôäu'è£Á]Ú,ìIjU©…bT…]ýëÆ}©ó£&~²RÚžß™ ìíÉ?þÁøÖ—¾ÄãHtÌi ¥2ºý^ë]œØm?èèýrªÛGªlê=r5&§‘ðñÿ¹óBg óå _ø{Èú;5ï>0«*Ò²tp+Ù€TQDÕh`â˜U£Až$b°7¡[b®¾E0iEÄÆF'YÆ´ÌäŽÌ 73x±Ë7î°~rB°YKþ‰O˜ö奤Ë%m:A@; -/)IX cÌEU IB'è ‡tW+ö‹‚4I,¿äðP2ÕlÆÙÞ›á­õš^ž3ÝßGÂPäüÜT­/{”$4..'OˆZ-iܺeâV‹örI<›!aHÕj±Öª÷4M%o·Mº»K4u»„Æ`º]L–‰’©UÁ¨Ë ©vÌ£wr¾þhŸnkŸƒÁ9ǽsùÚýC“µ:Æ–hÜlÚÀ>M…,3$ D‘%`/—6ÞÚ‚û÷ô È-WÙÍ9ÙWçmÂå¥Á{|Ëe°ªUþä|(œDîÍ›j”$Î9ÛB..lEÚù_$‰\ËIÜÆ±åkSûr ‡ö8¶û`ǰ^Û¹Š" yÚÛ3|üã–÷ñø±»ågØnʃ6)zöÌvV¶¶,ÉÛ)E¥©=Þ“'hBeÏWU®3d•eÂíÛei¡ZVQÊŽ±Ù€ûÚ$k“ÁÕ’ª••vìA;€†>y§+¸ÚXoŠ$4TmX  èX¯‹Æ ¦/-ú¡—Áùô P «G†¼Ý7`« é)ÜØƒYiKeÃî«Ý zB|.}ì)<™Z³¿Îw!=€ê)Œr¡³Aã,C˜=òqE~CH ìF0=…fš¬T¨8¹AÒ†O¾þ”ѬÉwßÞƒÍ%T©½wæÐB3ä\à†!6¶G^jo8Púªã9 ­²ßVèŒÔÉȵºP¡ÏPlgHY`ƒ}/ ZxŠDsSKdzpŸT¬IG_›y•ô®Ç'p„Öw5HT ǘÎ.cÄÂxÜØ6žÖÊs©Êеt ÿX2µòoA¦ö7"wÿ+ï•ÍgG¾UÓÌ®!QYýx½6žË4èuwßSߣFï9-Œ¨~¼É¥§l”èÔ»üþ@1˜g OR¾„)@–9½·íõÐŒ È¢‚rm‰áQ.Þ†hcÏÛó¸!]–W:¦©G)s°)'8V¸Ð˜¹B©}Hm• Ä ¸ñ:ìÃì=È'vÞVÚ­Xy×î$_ýýR“8õÉ̶BUlJõ1ëÌFÄ3ƒKìö¶·ù»¿ôK’‡üý¿õ·¸xü§d¥*`×f€n›y Y%ù»y»Aí;÷Ð#àöïƒOüa»(þîÿ„|óWáöÔ&HÏ´«âüJ·ÐæÆˆ©*…in6d«Í†MQ0, Ê’¡ó(’³0$O¶ƒ€^Ð #ÆID) Ú«%w~WÁÏýÇ¿ÿ'çLMK¾ñÍ&þvÀòQ‡U?e9™rmóòËsÚ;†‹·„ðrÉÕ ÃU^ŠÐ”’lÓax»m^n¿'ó×¹x7çxvAÛÀâõ×iÞ»G¨hóV‹ÙbÁãáÓÕŠÅjÅV’H+ILc³‘°Ñ ëvY^]A»M.ÂìèH.³ÌlÖkSIÔnÓœÏIâ˜r8DæsªósÌz-æüæsõ÷HoÝ¢‘$4OOi>~L±·Çj± ëvIV+Ùda' ùñ1åÙdb q«E´³cƒØ8Æ46P—@÷§+D ¾»x‰ÃÁ”Û­)Û7ùÁåž•-J[Ý¿qÃ&Ž ¶Ê>XrwYBQ¢Èv¬ž­Øïì¶¶ìï[-Ûé(ŠÚ9;M-`¹´ªIͦU”rÆv«4›†áP®Õ2ð9³@gRwtdÇWUµY_¨xêv›ë±íïÛ×··íV+û¹n×ÿ®›qt/½dÇsyiabÚçjÛDãý÷ígwv¬toæs+7;Ø„k<†÷Þ«“¥ °ŸßÚª¥{[-xþyÛ±†€¶{²ÙÀÉ)ÌgÐhÙ/ïrUf¯mï6´†°ˆ­æsÜ·OÅÙò úV*–‚gÐÍ9€­ª1ŒÏ!œÙÞjqö;p¸c§BëUCµûðH,§£‘ZÄÆ¢/¬æó.œ!lÁÎh•о€pÆ3+ÑÙƒà®Ã| ÖhÐŒ…êÜŒ ‹LHzÐî@‘A‘@Ø‚!“}ùÌO~ÈåÞ‹ÃCŠ÷Þã2M9Y5›´W+‡CóÒÙ-cd=ʦ,Y–%Ën— ˜·Û¬ƒ€Ëý}Ù™ÍØ‰c–[[²h4`2a$4 š› ½“ú­VDÍ&ææM‚~ŸöÛoÃtJÞí²) c›Myμٔ2Ï)lWàæM+m»ZQn6”EaªÝ]©NNímèv ‹‚(M­zÕxŒé´ ÕàþEŸê}‡çö¯8i½ÉÙ“•-@­V6Ø l@[F ÁrIÃå¥\ÎY¾© ¢_}Õò œ×ÆÓ§µ$ìzmy VâU÷—+ûÚÎŽM^ŠŽŽìç{=Û­hµlbQ–êg¦êÝ]ìÛ„Ç&Ib¹öÝp~eiWµiŸóèØß·ãC›X\\MŠ„ÙÌ&KØqt»ÖK$Ž-÷¡ß·ÉF ØãY/ {î²´s“$¶;á¤~›M8:²JVË¥Màæsû™ùܳñ•uín÷,Cjð¬Té©*l‘5Ã`($­-`[iÙª ésÐÀ²´­ÈÞ¶™‚>ôîÂvÃŽa³„a*H&]Z‡6æ8¯`r%ä=(Ö°{.4oÙ.KµÍÆß³Ç.EXå°J!Bܲ;G@7Šc¨ÆBq¦nê”cµYÅ–`Â#>öÂcŽoŽùòWo°šº¬ëL©Á4µO,3…ð@¥7"©eJ'añxÑÔºûK/€-?åÚªÕIÓΜ©§ï\µ]‡!’ZÖã9}‚_:y O–tí` žr’ ¸#O5)ð<—à̤NJðü2RŽâv€žç1Õ*喝dæ§~ê ívÉ»ïÞe4ÚÒ²Û |ÆR;6/ê 7Óùº¥°È÷4‘åYêº|Gçã%}>œŠ{Nü¸ ùß÷ãþî7=nåy\¯>£‚tRQ›è9ùÒ™*¼F˜xbr ½5Î1®u¤­Ý‹Dßç°¾XÙL×}¨A®òk²{ó“¶°øá}Xœ×~Só Žß´·ÿäÛvÙ 5Àïê£Éå©^çší4 εz?Ôî“}èõ.tyŒ½#>üz·áösH£<þV=ñ)µ¥Lȵe‘”Êï¨ôñ³¯ÞK]¾[VM^Öµìïub×÷êDàOþ±?Æ¿ûâ‹üé¿ô—äó?ÿóüßÿà°~üøzû‹<‚x dÁª2Ç–yÍ·ØÕϸ¦¿??{ð{þtøÎáñÿ¯+!Üqnã0¤c%h™†!ÛQ„„¡”A`¶ã˜4MéµZ4Ò”EšrÚlò, 9!6Fž3†Ã0$. ò«S®ùþhÆ?“¸6ì IDATsëFÁàXX›Š¾2úµ¦Ün­¨ºmZYÎ2Xîlž^°ÊRž=“p«âú ŸMI!í ¤m &V—1ÃØ»Ç'ŒÊ¾<Û#^\²õ½w)ßxƒØ?=¥EôŽØ[.‰ŠBfÝ®lNNX‡”ý>eQdËV‹¢Û%n6é Ÿñ`kKâ$!j6 çs ÈŒa|uEõð!yžKy|L±³ƒ<{——dA@‘eTQDÇÈtJØj‘o6„A`!kqŒ) L’ ý>5áÃL&böö`6ÃÄ1ÁÎq “ ¦ßGò'0h³¹¬‹)¯Þ1ÜoóÕ“çáâií$íˆÔ«•U3ÚÛãÚâÉð÷z¶+pp`ß·½ »»–KqqaƒqÇÕØllÀ?WW6ðvÒ¬iŠr)l°¿\Ú×ðþœ{_+´'¨¡,³ïW3Âk¸ÑdbÇØnÛ÷7ö}î½A·n¹Dªö¡Èsa¹¬%d—K;¯¼bçÇu=nܰc~ÿ}KÞ^.k_‘õÚŽ=Ë,w$MíXœœm«eÉäWWv^ݼ»ã7 CܬÉ.l©’L£=•ä8Ûͭ߀á•çØä¢µmU£6K›dlÀ|eQ‡ûöI5a IG#›¤#´‡õ¸[¤O·'äsŽ…Fz—¶4‹E*,¾ÕÊÐkB'†Í1Äç· U &³<‹Y‰hÍ®,P5oABdÈ'Ûrp8áù;#–›”÷¿{ÁP¼Ï„PåJdf“°O華Pª0QæYæõ}^ þ¼&Ni)µS*P캈Ú7’ºb|Wƒ×vDÙÎh¯§bãÁPœqÙžî$Îy¤Õó;NºÒëx¸*©èŽÜôº2 å Žé\—\°7ÑàÊš¾úê KÞyç9NO÷½àvÇAeôšÅÛsýwê¨sMœãÓ~nE;/58íxP«ÔóptÄG!Z æ|g ×6Õëp×éda]òqÛÍXü¿+¯>Ðù˜×LSÛ&”:IkkU¼¯÷í±WïÝ’šï²ô"«©áŽÜ¾£÷ÓÁlÏ+ÃhàÙô”¡œìé…&;/:9X¯RîœÊ©_Ç­ï\w¦,ÿyÖ‹…üÉ?ógø•_üEVgg×ô.—·‡z}nžµah¶@޼{¯îÞ ½ms?ù_A3…÷¿ þvûåƒ<±Äy+°g ìÆ1· –A€ CéEa‘DTË("0†^Q0È2ÖkvŒ‘ÃÍš¬0¬Ï*ægÿø†¿±fwwE W°:o°þFH1%nÄ ÊŠ'Ý®­¼iÑ8 hß èO¹ šœ¿“°lX˜tÚòá&ç4 yô¬ÉŸ\ÑkÌøæÅ‹ÅtOŸ"ç¬?ûYz''¤*©:?:B./­ BËj³!«*+;»ZÑHSª$a¼³Ã¤Û•j± lµ(Ã$M‰ª i6 &YƦ(ØK–瘇)V+ûØïv©âÆc²$A:L@·Ë¦ª$ëtl€la5Hšœœu»¤«Í¢ÕŠFµZäÛÛäË%…5îÛÙUõÆ€‡O"Þžpc{Ä8z‘'OChG–T|pàܦ ÖΙÇ9Ò· Ü··agGØÝµ&uOŸÊ5wâéSÛiÐûCȵÁÝ£Gu`Ö!{ ³©åS„™uäîl •9T",›¶zŰʠ̠µÝ 6k¡ß…fb0·„¬a™b'%Ìc뤽AØÜ²ÉI™Á²U½}õSCëyXM žÛX'V}º¥ ‘9ÍF‡O|ìF|ý‹¤‚¹e«¢SõÆ€kwÞ0€Jw3‡hÏ²ßØÑ'Ÿ \¦*#éÔ}{ïÛäËô<©Ø‘K0Œ…ýõ04±Ùº®PG׊KVGúÙ]j~„“DvÈοd­×ì …±^³óà¸Ô9tÇuîçkýÞe*­ÜÔ×Ýú2bËçÎEK×î™Jë¶Ä™òý¸ ÆïTCþMÎmÑj¾³¸Ñ\T®óÞûÎwøþù¹#ì;~Œìèu=Ñã8Î…¯Ú.žöÉ90HáÍ¿`‹ž¿Ïþ¦Õf8Ó$èTa]»:O 2†£(â2 1QÄHÓ:UŶ1´Âà(Ø6†F2 i6¬«&ënƒÏüþŠÏý{SnÝ24{Âx‘°˜Å¼ÿÏ…‹_L‘“IÙÛdœ&Ûmao½b6[ñ•t—£—r^½9áÁ{;œ6ÜvåÉ:Cš :ëqÉá«pcgÂ|Ùçû“‚~Btï>a£ÜºEóñceÉÙÞãFC&——2¡[Ulo6˜Ý]æYÆE’µÛ6!èt$¡½Ù í6Ëv›pg۠׳¿w„rçü½·gwyi¯çÁûÚba“ÑH…çŸG½íö÷mÂòè‘ûé©…HE‘Ðë©"g×þ}zj…8–k§tÇÉpÞý¾=îz]þž=Ó'T£Ìºi“C´ 7oian ë)4rˆÚÐzÚ 8jÀäLU®®ì%oØŽÅÕN¦0×>f· amëà½W ùZ}åÚ-X_XiˆxÖCX¶¡-‚ÄÐ,„«÷`QÁ$¶jWQß&@«DØ™X"úôÀÆ ”Ð@ZÁâÔž—#ØŒ Ë¡ŸZ òA WV‚$Œ×<}Øâ÷ýî‡cøâןG¥Z _ÛRX±¬5ƒ–êªËv5¶¼ ´¥SB¸ô Ç\+cÛ!)/êiuÛh¥ÝõóSMT.„IW6S¥¡pîY¦ö=€q&µnâuv½ê®#«C#©¿6úwÓcêµ¼àß•«œ!šÃ¿ Žœ\UM~ægžò­oíóð¡ àoè5U:Ž¹Ô’$âI‹t*ôÄ €NvD«Õ#jõ"ôwÑiK¶¼8åÊ â~¨­« ïy§–î`.p b'€_yªK¹Çq°!·ËîëØ–º³·užM,{Ð/güç¼™w=»:vgþ7ÖêxâíäÛÖå9È;‡ì¦ëɵèþ5!:ªË…×Äÿ†äW€ßÓ9¿å%(c¯ü{æuœ‘]æàž'‰[?»Ê J½snôGÖ× LO!Eíäõ½{ä’& ›)'d[‰ánEjÐþJçnìAóÔuŒ!µ}±óƒ¹t\&Æç|)ƺžÅa]æ ås¸•Ä#Æ›®̨ºJÛ¥ÎåKé9`~¬‹ÈÓVuªQNûð:aþq ~‡ŒßÖµ\_^*ö¾’ÎÏåÑݧà£S+àe¯fàj /`ÞÖiœ{M³Ä è=ä£t¨•¡ ¶÷©®.‰HJ¸û¦mj_¼S£ô*`y‡Ÿ‚æ Xü:´–v{¯9ë¨}´œ»†³×T¬ô캻^^îP®½"­kÂB6±Áý;Ð9ó wn{p©‡z?žã„Ö†öZËö5eíDǽçÕ°2=¿«#6'£ ²MÆèäDö·¶xvïççç\Þ»ÇM¯áìT½7žºÖv i»®·lyˆà-øÄ_€í;ðä-x÷³â3}ÿTçtWçoDA@ÚhØu–eìfͪ’$މ¢‚€$ iU…1äë4aeâ¹ax³ä?ýSSÞx³`ÿ(§Ø”Ì/KÖbîÿ¿-.ÿe‡Cch4 aQJÇ4‹‚i0i4Hã„…1dä4ßÓyn‹­ƒÁÝœ_¹ßã٤䀜²ÓežÄLæ%‹5¼ðû5_9yŽp³¤Ñï¿÷ïÜái±>?§88`°X°›$$³ë5§"̇CúƳ CŒ1ë  ØÙ!žÏYæ9Y«EuxHxzÊöƒ ®®ÈóœR³^¨BTÃ!YQ yβß'"¢4•NQ°ÕlÒX¯m²ßí²‰"²å’,ËÈ¢ˆM»MÖlRˆ+̨t°¢Å¢®î·cF£&;ý„ß§„|óý>l5êŠþri‰Ï~‡àôÔú.XòÄÙí¶ nËÒ쓉MZ­:¶¦y4™ØªþÑ‘%–?yb»Qdÿv‰HUÙ„"Ϲä“Äó[[6QpÝ€ÉÄr¢È޽ղ¯ïìÀË/Ûër°§Í¦öëÈ2{þ<‡_´ã_.ívvì¹..ìgÎÏŸÃvmÊÒ^[Qؤa½®ÏÝn×]•®M.Ñiµìœ†¡í`¤©íýìÙ ´ ¡•Ø€dÂÍm(Ðaг£ÐêâEc‹Ä:y—ØÄar '&=„î-Ø@ÿÚªÒµ9´ó<:‡æ®…UKˆ:ÐÌ È¬ŸEµeS¨ÆðàÂ*k”#˜?µÄìFÇjUçkXGÐ8òÌÀ ‡»°(!?…}XVªVBÖ²÷9_Caa VbL—×^]rüÜ’'O9{ЀîÈž;ÞåÚ*e™™×KØ\;Q‘ uK`‹“Eé)áh%4Ž!¿¤¦·b!õŽêß#eËM½dH µÐNFuúš,Ãéôo¼„ÃíX=©áZUÍü‹0ðH¹U-8~ ¹àz® ÃX1ø+ýÿР×Kùô§',—ßþvWÇâÆ“è8žêœ–˜NÝÓÞSdšy¼§¨tCÇô¡îXŽ žê}ºÒ]¨§˜ö+ïªÜÏ<9ØmOÁhBmÒ÷Œ2&ôÊ•ÏrÐ6w.ôxÏé<ži‚˜zÐg’WÖ›×¢P-^ùöÈû Ðñ”³Rï½Hè/=ŒDæE&äÿP²·Ô¤bæÉ³”WÆá8roΜ‚Ó¥Ô  ‹¨ÖìÍ%}+×Bמ€~ê /\»–+÷#Ñß-õü}MnÝ÷è\âY:õÁv5{êh¹¾¿ò cÆë¸îdî%a?Ð5#šÇÞÿGšL¸NKσ.¼$¸Cmé¼íuú.u^“ëÒëu'pÌGýM¡}áˆüzüÑÍÁøL0~[)M$ôrÜì‡x…÷¨r´«]m M¼$£ò`4±~œyýØ Ôݾíå³¹×½pJNÎäÏÏ •>%îœjid: «+8þIغ“ï£yͦÐۃûpñ}N-¼«íñ>\ãuæA‡¤–ͽö’Œõq5Ð9põ¡•‡zÜ÷yݘgôؽ7_‚MËwâx}þ{Z›<Ð%©<à›u÷À,TÅ«ï-˵þ¼´ƒOÀW¿tï}õëü‹¯|…ñµ¯ÉŸþùŸçÿúË™w¿þu^ÐÚÑå[yÍè½¶3¯+å8)®ãÓŽàÅ?LJٯïÿõZlâ¡‹;Þ<¤@†äA@‘$ F‘DyNTUUEs±`eÌÖkŠÅœà*c¶0?óŸ¬ä³pÍñ~Éà¸`z0¹JùðW;¼÷Æ ?Øpc'¡  !­õZD„z=ʪâŽ1DŽ]Ge Ažßbú|‹íçÆ ÷rNßIy”txÀ™a,œœ„¼ô²awÊ&?ཇ†< ¸È2ZÓ)ÕË/Ó>=e¸\˜$aT–Ví:ËhƒímÖÝ.«½=‚,ƒ¢)Kªä´C‚4%Ô`¿º¼d}zjò²”¥1,7V› «øÀÚwîÔäöós{Í7nØë˜ÍlòÔjÕ<‹<—k¾…ƒ:¥©}ï|nÇfŒ!IäZµ*Šêëí˜ÓT!`JVOv`º†´ Í#+õºÛ†V «1¬àbå3('p|â!)\\Zù×õÖWV!j¯Ç[ÐÜö Zpu ‹¦KÈ÷,¼0p1†´q`w4ƒøÊeWFx2±¢+ë \•–g1ÜÀ8‡,¶bÞ¹¤ ­+ë ªLï´ ­&”`±„èE0cÞ|é]Æç Š| Û$Ãt+aÜ¡ÕÍyýÕ{<99äƒ÷öxá„4–³‘ö œB •ý¨Qi{ôÅÚÊ×JhQ=” 5Ÿë“lÒ•EYç^'‘ª;ÈZ+õ]¯\Õð*êp¡¤ñNM(rKÄ¿&Oz’'m©sGP®Ÿ>÷vžN-ZŽpíu­-8ѶëÁiv½ª¾ 0=– ¢ÝòéO?&ÏKÞz«MU¹Èà‘Vd—^ 5÷æÆUÝU×)=/¶þ¶·_hàyà ô§.xTžAß+}Î=Õ+'×ëÜ©võõÇ^õ~è•ýº^à;qJ`ž*ØÂ èÝkRKª8…0©ù/sý̾6¯¼2kÓƒ¨-¼®Ô@jÜHæuyÐ*¿'=S;yS›é9‰—%õ]z2Ä.:ø¾·†®t‡õ8[Ô0À¡·~]2á’˜K%N»u ö¿ìy"g¯Ü­±×¢®¤éàM•—$5´ØÓcžzÑÉ­ûBËSB{êñ¦\軫s0ò¸ •G¶îx¡•ÎÛ©Ž­¯\‰Ò‹zWX˜ÒÐÇçž*›»=ž+$Œô\¯jB>ö"\—Ä-¥^¿g:Þ}8?›Èü8NÞ¿éûÇuòþ‘^ êGœDJƒÓÛmЖÖ]IôNø­¯yý”kc>AÝ©“·SŸêërv—z‹îè´E¶‰-W ]rþW:&í´0·_izêJ.Ù ‡v‚ _¶°Á{ˆ’Â-)y„ú;ðè+ÈB‰æ•Õ3].;5•Jzü&©**íê¿ÛP—Žr&”S"™÷x)• mté fÐÒääH¼A~ ï*ëB¡IŽØ=Q˜‘6ãÞ?§<Ÿþsðê‚Gß„í‰o/d»,%{ûmya¹ä9MÞ\îÝ×k*ô]Óü9Ïq}¤†{—~?òêç`òëÈ?ùk֋éÅß¹¥•K4Dh¦©t‹BeIl ’ç2.KÆHÖhˆ)KZË%AQÐ(K†UE£ª8ø˜‘Ïý™Â¿XJwíN!«‡0ú.¼õ -yôë)½nÄ^Bg±¤ÄU… C)³Lʪ’£8¦Q2áÞþ>—³O “*—/Ýß–—n-yåîŠA\òî—ci  ÚmzÓ+‰Ó¾¬–…¼ü{"ÙÞœóí«»Ò˜Î¤Ûna>bytÄj8”ÉrI¼Ù0íõ¨Œ!LSÚ“‰Ý®Ìû}Ê­-Œ1"aHØnËÁɉHžsöÊ+dÆ]]¬×†t–K‰ž<1›ÍF6eI¼\J4™Ä1éj%mº}Ê0D66I´ÕbnŒä­–U6j4j™ØÙ º]ªª’2ME’„ Ž©¬ò’UÚllÕ½Ý6 }ZLYÄ7$[lä'Žî±Û~íìf=· CUÙà¼Ñ°Áðb!êŒmŸÊQ¡(¬¡^QØÄàÙ3›˜8‚ˆ°XZ­Z5) -ïâþ}{®ÁÀ&›M ÍçvüI"t:6‘q ŒëƬ×ÖyÛýÞ°„Û·áµ×¬¿EžÛë]¯íyçs¹NB¢ÈyvXwqënÿø1*k?·µUŸcµ²ÊZÎO£(l·Ã9”÷zB¯gU­ÇB׃pp`ç®ÝV©\á1D ¬u„âÆg6–+3G6¹0¹N„VI6̧ÂÕ œ=³cŽc¡5Ò†­PèÎíµ½¯ÂÜf.$$ ˜\ÂâØ^ I*-!6°Ì„|“%d Øn ‹2½¾å„\>´6LlˆûB¦2»Qn•ªFïÙ¼¼e;!°Ò K>ÿó¿*¿÷sWòÝ÷?&‹PÝͳ,®0²Í§_†˜R¾ñv¢Tå2¦íåS»£µö„öB`n×aY5+Û½CH;q]˜Cz òKÁlT‡a«­ÒqF’Zù|¤OËÝ)VZnsÊQ#…½ ö5ÎݹíÞ•¢>M±½y‡8²Ðuæ•ünhävpgR×õ¼ÜGtw>ÕóÝ¡6gÛ£Ñùô§ï‰ÈD¾úÕÊòÐëž85 EºÒ€èÇð¤g¨=œ¯€ûÌZìgNô½¢¤ëÄ Ä½F©ê*Diåí`g*©º­nÖ¹¶­LÇKRÏa¤ÁäÒ“ª]ˆÓ®saVþÇDqø[R°©UÇ©¼RU)§HµÔñwüdQ×sUwÆŒ;^¹/•ZV¸­IÖÀäzœD¡E¡ÊèR'¥Ôœ‡) ¥–ñêk…®ë¶¾ÿ…¯MÔhЙ".¼õê =¯«àºžÄÿ8ùæ…ÛÎ\ÎÉý–*u[yßLjÈS©ß©@jw푎y¡÷d(VLᙽkk— ðˆÝ½Ïk{šÔtt.¢hÒ;Ð5å’N$ð‰®í7õÇNÚW=,ž×õ¹Qs̶ÎíL“—‘—tÅ~Gñʼ[òq0~—í߬ka~ÄÂü ù¡î…hþ&¢ªEâ)BÇ*Óê¨0±G?I¼<ëyO&5ª›ÁR€iyµg+djúu`K“kóùk%@4•C6ª•r&¤k)z&RÓ¸@àæ§¬ ÊæË016h'3Ýß…ìÝ€“gÈÕ©u'ïzúÎÆÈ)_Oµ‘zùõ¶.õm¯þ{Í»‰.µž'5ëj,`yiÿ¾ó¶3ÿàmK: æ¡ýúÈJ÷ë+"Ókv°²-%ÖGMÈušŽÛÈkÿlJȾͥ­m#~ûÛ&X.¯³è=>ó¯A|Ó÷s°¨-àå7àå?f¯ë+–û~—L˜šˆþ‘?#`Õn³)KÆ­e[9UÆri› •1×*éWÀ‹¿~æOöúB{ÏÓŠù…ð­/%|ùéŽV v¹³ÞG±dIÂ:MéM§˜8–u’˜ÊSÅ1Åb!ãnÓë‘U†îrÁÞ*c}5àöþ”£—3ÚQŽo&D·v ÊŠ€‚ÓË7_0ÏYÌR¾úaÕm±Ê2ª'Oß|“H„|>§†D­U!£ëímØÚ"«*ÚYFc8”ÊòåÒ<ÚÝ¥ è>}jðÚm›dÌçvµÙˆTÅlF{¹$!lµˆ@‚ùœÕö¶ÌŒaa «õš°Û•*Ь!3ž‹"¹&JïîZÏ·ÛrT IDATpH%BåªåŽœ¼ÙØ*~«eùáP=3 ¦»¼T=äî˲|›{o­¤hœpœ NçsË»pФÝ]áÞ=Øl ÛÛ68ó³?Ë ¯¿ÎœOñÆ­[|î•W˜­V\\\ØÏˆ8X“õ½HCžÛ{ÑéØdÁIê*äåÒ&!YÆu—§Ñ°ÞYf÷ÇåÊšIo8[Ù8¦1·£no ³}ûMÜ Ù=ÃÊÀ:„l ÛêVnJ±-H"ÈÆÐêÀC[Mï áôžÝ$“–G†MÇÞK³‚Þ±Ð/ ]U—*ÏšeVr3=.G†bIÏžs<¢«Ç–Ÿšt…h !ìta‘Ãf áª]ˆv!¿"·ø/ÿü‡2Ü;7ÏÎZü“Ô·ó–\Àª'ÈSlñÚ«çrãhd~õ‹Cªé%&.¬ï‡‰¬RËò»°AÑ…ÅÌÂËDU¥‚´·,km„"4vçjAœA9ªµ¹– .­üEЙ AC†`Á!‰•C {6ÿ²Vé ŒW ue8ç…0Ô OŒ­ˆÏ<ý>9}þ-u/^{”Ê ~¯<~‚1/=èÍ•SH2êÝ ;Ú®ÁÔ|êS§´Û ¾øÅßK–9õ«#Q™Rcw˜žîH-!{!õXèµ¶=9á\?wS?û©1é™&©a(‘ :uǃÚ45uð‡Ã?Öó»²Ý±&Y¥©MûD!Amc¯ÇqUœzS¬Áldje,5TÊu*¹.©^WàÛÀÃÏ41Éô>g?«ÂãrtÔ¤ÎE¯‹ÑöÄÿ×ÜN4\x¸þRïu˃/¹@ø©Ç. <Õ)çØiÈØôœéçcåá6šµ™CjOе×y(å¿h§©­÷ßu–jöwGK¿®,þØÓ)½ð˜¤ÀëF½E4"qXŒÚXqâýÏôX»z[(5hü¦&‡k½þ©îz¤›Ú¥hêøÊšIÌmMTWꘞ«RÙ¥[§Rwƒš:ï—ÔÆ{NâxÉ¿-'ï߬Ka~U©ßÌÉ[Dk'ÔÊM¢DlÁ>Ž‚Yie;¨›Â¦¢5s×>NÝcI&`Þ$®‰üÄÞniÛ[m”ê$Z7‰Çy(¡Z‘¤âœ™¾7Õ<õ*úÈx„ÜyÂ<ý Ræö:âJ©Z1Ü|ÆÏàÁûÖ8OIç²Qå(E‰šVêcíÔ ì˜Eµ Ì ‚Èã…Œu,[zŒ×VH¢t>£019{ ;¯!·_†ó1¤á\÷4)jàx$ïXUžf:,Q ]“­æc?íÌW¡±²÷åq­A"sû+¨bßBïé í>èã߬µ›²Q„ôðâÏArùÚ߆ßEæzÿ¦5ÜK ['3e‰ÛA aÐhµ,T*I¤œNM˜edÆH&ÂZ¿ÖE~÷ŸÅ|âs"Qn$lcÊ+#Rïþƒ@.þqÉn;b'9*J—%™14D(DÈã˜öjŰ(»]é,´@iZY&«ímR0Éj%»ë™lŠ!£Y‹—æÆ«"ç«o}VGC1œgë ¹ûFE;˯¼D÷ìÑÞÃÓSÂfSÂÁ€2ÏM±XG‘AÀÆh4Øt:ôË’VU1íõ IÂUÆÐ ‚‡‘Ý]CLU‘ÏçR={f&E!Y’N&’‡!1äe)4›•¬V²jµX†!E’`²Œ2ŠˆÛm$M-·JD‚êšH,b}ö÷åZij¹4t:rMv^¯­dª5§Zm(s1UÊz\ñæ ç z%¿öU¤Xg°¿kKöê¤ÄÊ–[`X­`<âØ\û`ØÄbwž<Z-C³)œžÚÏïíY(Ôx,t»¶´å$jƒº»PU¶Cá’ñj·aw×0ŸË51üî]Ãá¡…/­Vö½Yf;=ö˜öú×k[åNSèvùÏÿÄŸàSŸý¬|êùçùìÝ»æ÷½ü2è•WäO|ò“üø9{ï= írÄñ 0š`XÇp¹†9’ûî®}­Ý–k™ÜÙÌ©o íŽáÑS{¯Î¯l7 Ü²PŸÃD(ûZc–{Ö¯ý$1dM¡Û´0œƒcCA9—0ŸB• UÜ8°OýÙF˜!lB£ i«\˜ç†pn–ˆ7áò1,/„nß>E+ ‹šŽ ‹„Ãj,¬cû„]Ï¡yl“ҭȰV嬯&•¸ [B66˜JÈoAqÌñçþ9w_xȇ¼Æ_û_¥h?†ua9As›Íè—^½0»—r5y…‡— h^ÄQ!DûéæÊy˜A³ ]H¡Õ€øVM¨f -¡Ê ñƪf•  ?…ðHìne+ÎUf?S UÇPM„ªi]Õé[iÝ ²2GÜnÛ^±É]EØØjmäiºÞq¢Á+÷À)-­ŒeÊ»-¿46H«Ô<Ðφô¦ïq2¯¢{(ðœ’CŠ,K套N¸uëB~ù—?IYºNÂÐK õ„X£-Lj|ýÄÔ†p-¯š]`£‘váüPË–®ºÛöÀ×ÚÔõH¾Ö l-–¨Ûqhz Ç{W½‹`´Bo4°,4pvr³s=—/ʾQ§J«þSKÒnë|,ô^ºÎ”“hY•¸õ:2Ž=÷à<¹=sݪ¥×=ÚÕyÝÕ@Ýç¨,´©âXçÃoÏ“ªj– ˜»¶0`5"õ^”Rc:†N¢ÕX~ÀJì¿ç>GIÒ|ëàc×R×ñ•B„…-ô^–ʳØóÀ¼0š|Oáv¹&d+©À3±ë î+œ©ã•¾SUþ:£îð8ÞÔ@ì:Ý(ç)ÒDÓ‘ò÷¨MúœîiÛž©ùà=æX¿s·Å²„7š Mt®Oã©×êiì~)u`a¬„u%PšÆï¤“÷ÄÃÐ<×¥d޹…¬‡=ò^‹ÓËwogìœ>»ÉætN{`%cËÇYa ¢ÅÂB¡Œ!ì÷ÉóœAS5L·¶ Ù¬×RN&¦›$F:üözÐlbŒ!Èsfççäëµì$ åjEe qY’l6´£H6iÊt³¡hµ0*ñlmI Äí6AQcܲ´Áõzm¥RÉ\§cƒkë´]WÕƒ@I¶º¿ã3NŠ#¶ã1¯Ü<£µYóÚÐW)Z ¹±Áµ3ÍÛl,|j:²L¸¼´‰ÆlfMøâÒ”ŸþÉŸ$˜YÙXáý÷í¹{:µ*Tó¹³H­•çö98Øq¸Ä%IìV+¹î¬Ü¹caIëµM.wÃÁ¼œÔ¬ƒ•µZö÷½?øö·ùâ[oñ+ÿôŸòK¿ð ò÷ÿÆßà¿ù¹Ÿ“_üÂø_þÎß±ïk6íœ _U "FÍíÜ;ŽK·k÷åNíÏθ†`Þ°1b¡Jrú]@ ÍŽ![@´7^„ãzhÞ„Á¶5îK:ÐlXÞÁd,Ì—ö[¿½ ý$MûÀ Åò1²v·¡YÙù]YÄV"Ä7„2„ì‰pq®0ê&ÊMè0*`ž Aǰ¹„奎­É^¯m•¬Â¡UuJWBœÀå* Æ ³Dz3Á yã“èsÿŒÍ:¿ò?üaÖË\w·gPµ l “ r¡ÓÌäµWï3ºLxç›w¡9‚F.˜ ªR®uñ‚šmGö)›¬íÓu5ƒUÊ@ ŸšB¹J%ŽF¯Ùô Ú²½uã  WZ /©Í¸ZºhÉNb .«…ìžGLÝ(Tbê±ÞœyÜ̃·ÜÐ ¹“õlI­ ã0æC…|{®kB°cí9±wð–ËÐ*ò€ÿø7ožòôéK<}ê”o¤¸J©k—Ϩ­gïkõ½ò¤OFÔ @;bßs¢c[i`þ¦î‚ ÝI봮 8ÂûÆëJ\z^õ¨x ¼â)09G®lìJ—§ ±q–ÁGÔæ…ûNÛR!kNk¬°¦†™xr6ÎxoÏ—#ÕkŽÞwR½ ÷êyX{Í)¤æ—„Þýu%À†Jü~S“ÐÄãeTÁÞ¹p7¼Î‘ lÛRû£4¼ðÑ©3mNuW×Ú¡ª9¥Æv±>æ©* 5YÙRü®—0´½®N_¯¹ïqWnëúÛÒ]4á^idñÈɾ*/¥©ð6‡ =ωÀû¾ ôóMjýºèlèq1ÜÜ©;8û.A8×X{à1‹Ÿ‰GTwº§óÕfØï‹3}ì('F¨ÍúžéšêzÌ•&½ß6ã7J ~»Œß(ÁøM;®ÕR.‚ 6cÅà7”ƒ¡$â Ö@3¬Õ „q\‚ìi×"×`u¡IŠËû ϼ¼ÒXÅ$>Ðó÷4ÈO•»1wÁ­W/q.ÑÏTªî$,àðÓ0»B.ß¶KHA ®áîkм<=AÊ'öó#Ïç£Ô¯äÊS8«irÁ„k+šà¾Îs ï‹m%_S›×»íÐ×-i³‘t9~–3=´÷d©Ý‹CýJ)àA 0{¶» ÎïB©Yr¼¡×˜¯¡ýtß„ËïA|r­C"JaÇ×p R³ÖX†zÿ65’2PWoÙ{yþ £)òÕÿIr¸+ÈqHC¤FÄŠ\+“uô¾+ªÔòZŒ!ª*š i‡¡,ó’àø§ÿl@ZT)¬æB^yúýÊ<ûŸcé­BZq ½"‡(¢ im6„­&ý WÚqH«ÌYµZrE2].e^–œ6›²Š"ÊÅ‚"˜‡¬«*8‹"9Έ“œotY!ŸzµäãŸÈyëÞ–Ìß9‘p·+‹’. ?õúH¤òå‡ÛÙŒìöm‚ÅBL ‡TEA;Ï¥Ùl²Î2é·Z²2†ÍÞab² s~.I«%2X‹ÙŒ MÉÃŒa³ÙÈ<ÏM;Ï¥Úl¨²LÒ<§WU´ªJ¦QÄUcÂ*Ilb0Ÿc¶· D¤èv%4†0Ï¥*Kt7›Öu[$ ÛµG¸Žc¹v¯^­äÿ£îÍcmËî»ÎÏoï}Î>ópç{ß}ó{5¯Ê®r9‰]6Nb%1qwÇ!„€(4EýG«A-AÔâÏ–:tšt+Q#ˆ€ hAQ‰ƒÛvÙ©*»æáUÕ«7Þwç{æi«ÿX¿u÷²å„$ˆ?øãê½{Ï9{¯½ö:{ý†ï Ë¥°ÂbÃ>»ÑUžˆÞæò¥‰ìì·Ù“M«‚“¤¶ƒ`kªçHÓV¾Ös:µ<‹FÆc~à¹çøŸ~ò'yá½÷d÷øØ°XØ„¨T²£ñØB™†CÛi‰ã"y¨TìÏñ±°²"§Üw^× xòI{-–#â|B,ï$Ïí5×jöÇ®[-9%Š' ‹{÷˜F2»}›ù½{üÂßþÛœT«ògÿæß„K— ß·ŒvÛ&&ÖÜO0FHÃþ¾œÑONì8Úm¡R1‡‡vžVV,¬+ í\5›BžXàh(0Œxî¹'Óº$麰}®¨DCÚ„z ‹zJRvzÞ*©Y[ªËö)0F¨5…jUÈr;žµ%¡¬%§AÏ~¸SŒJŸäÐ?Â.ÄU˜„Ø@ZŽva>VÄÂ\HCÉA ZW`>‚´õeht…áÀÀK +g˲p¦c(Erfs—¿ðÃÿžJµÆ¿ùOñá;m‘ƱNmÐ?ß·ýâ´¦ÁñqƒO~bGr“ðâ«1&‡`&e!S‰Ë¿´“TjØ8íAسªXÙ&”KBR|bûìQ¦#äë‚9‘&´¢ÁñL¹'êƒ1±O»Àh@›©óShê° ùÜSΙ{`§Û˜*àP U §§ï$SºZÙöI¬3ÅáGÆV°O¤àœwò¶^Ý”—¤èF8铹ll äòå\’¤Æk¯mŠˆ#õ´b_ñˆïÎ㡪éž't^÷ä[«bÍøî)˜:ÒJ÷PàñB$žP /4HœêN9Óß+ Ù±%Å»;hЖÈw=ÃB!/+RÈÌÎEáeZýŸ+¨zŠÍ_Y)óùÏÿ€\»ö lnž1Ï<ó€|ò“OráÂ#<þø%žþ¹|y›7Þ¸ï•g+îIÇ1Q>BÍëÚÌ€»rŠƒàHïÏ9ߟCçɶZ>T^ëŠ| Éâ’g@ š ‡ Ï5©¬{<ç¼=ë—Ñ×k5aÜ0–— ßÝó9 …Çí9ãAå(mêkcå$T ,ˆ­Ôkçeh¡ˆÞ÷‹šœ!¶ƒ“v¼‘Ø÷/é±Ïé‚&¢ÉæžãLh²3W(Ôªþ~äÈÖÚ±ZÓÏ×õ˜Î+Å©g]ÑñœPÈõTõš·uÎ&D·\R¥ã}_¹=jRµçÄôö( €eƒ ÿUu0PÈL «Â5]'îÿ3Ê’ ÊœÎÄÔ“õðít3ñj#âQæPo ×U9Ù…õ§`õ¸¯*iSMþêžð`KaaõÃ==ÞªÎ×eïqm€z*硹 £—!È ©Ü–%uèԳ랰[ÍSŠ:ïéqdë˜í?ó%øÒ/Z)}çbžÃÜ"„AÀ0f"$"ì‹Hn #`OÄ*cEÚîW›òάÌÕ™qíí³%H A¥ªpð¯…ÑoD,›LÊdŒ+UF@Ë–Ó”f Äi•Æx?œ3 JíîŒY5’Åba¨×I“„ÁtÊ~µjÍéæs¶€A·ËÝ0dže°HXoFìÝ,³µž°rvÁ¥3ßzµDãÞ!åNƒtu‹Ç¶¨·‡¼{°Éà`Fɤ”òœR³IÖjQªV1 £R‰æpÈ4˘]¹B$‚9<$ ¢ÅBÃò² ÒTYT« ëuÂÅ‚á|‡‡tEDêu*ý>+Ã!q­ÆÐ7†¼Ñ uDçzÝUÅÅ€ Ò”,Ï ÃÜUÍ›MÛÁpïw«Î`.Žíïƒý¿#_» ۘ˴&C.Ÿ?¤Ñ¨ñû,ÙçlšŠvI¬²Òhdù$±•ù –– ijy»»´Z-~ög–ãr™¯|íkY9•”=8(Î_«Y™[×]¨×­ll½n¡MÎóâþ}NÉÖ6`o·-c4²ôò²MLœÚÓtj¡]Nщ±ç l¢ÓïÛ×NNxþSŸâç~üÇùëÿïË{÷lb…ÅlfŒ$± ;f9•àít¬zU£á¤xmBæ:&µš½–RÉò3fSû¤ž7yâÁ?õc7¹†¼ð~–S8ZXŽÆ^NrþÛg®ó…O^ç̓uÆ=¬ú¹Ž­3v lC¨u¡?°äæêÌgÞT ¦ªJAd9ƒ¢’öý±Àqî[RYI O…2†Ú”ÊÂJË–Œ’]®Àjš!œL„jº‰M¸ÚUh¯B¿Fm~ ã'þ#+k7ù­ÿð}üÎo~ ÚûÖ"P(J©e¤y ‹•J‹<Ùguù„·?hÒ?*Û‡I2µ<¡\a'ұ맢±(©&k :«BzT}ÃÐ…³…'3êÔ›´ÇŠL A ‚L›Ö[Cæ¶õ{T±¯+%̾ǠË5X9£»_ìÈÆ¦Ð(<Íj×â„¢"ê¤VO­¦&…BW¡áIÞ:^FDa^w UÙ!Ð¥\^ãÉ'ïÇ9o¼ñÓ©ëëOµz?v¤`UÎ<Ñä`êÊsO›R´ }Vy_“œ²…µb¤AþÌ“ßíèõjðæDös倬zNc¬Á]=÷²Wq^V®ˆcQîéx*·Àèu´¦¬®–øØÇž‘jµ.y^3õzK¶·[”Ëíö /nÈd2楗vI<,‡#N{LOǵq÷´áu\uþ¾^SjZ(”«î­Ç…û¸ó¡pçèxÕôÌcærÊ+:eØ:õ§#]K‘ch2rÏXB~â1T3)Î?öÖÂÄØÀû†7·sM!sø£÷q¨°·P¿'e½OíÚTôXî;±ð”¦Fº.LÏ‘ø'z ç´kãºB{Röºj¾êšˆÖÕܯ¥ D¦]‰Ä›×’ë«j™ø=½Æ‹šØ½©X§–vO“<çÓqà}_cÇfß•ƒñÇM äø÷ÿ¬òR&Þ×6Ò ¹3ÓSûq PRÜRq¹ëT{‰uý{¹&×hü &…‚°tì­’€Â'rC; Cê)‹Ï”/Q×ׯn“‚th?­5äðE+h{ØêÎ~Ò9½HïÄ&Y¹g©¢ú“‡]á´ÔŠÎD0Ó¯Ê}åŒÄV1êÔ°nTÕO)pA=“á‚58s‚ rüŠ‹óÕ¼T eÛ¢u¥ª÷ëœæ×b›öNdMÊ@¸Õaå<4…ôë076![©rE–õ‘W·Ë=p–˺¼ÀÖÿ€„[È›ÿn}Õ^«ÊÑŠ³fš”åêeihÆ#DIžKªIHh ÇÙK#fò©¿QåùÎhj"TJvO¾ýaú*RcòrI†YFž$rE„õJ…ú rH7T¾ÒøTBÔÞ»ÞÆìíË´q r£\f/Iäfq«\fQ©% S‘ ÑlJ ÈtÊ&9ÕJIÞz§ÁÙGkœÝ>‘³—C¾ñL3éE+t¶Úòàú=$kóÊÍ*Õ ´£HâÑÇÌ··IJ%‰£É2ÆÕ*áú:"B&B”eD•Šd†ˆæÇc†Æ5›”Êe89‘ÕáД…0$îv%+—¹ŸeŒÃP’(Â8xåVpÚi¨Õ0µšˆÍ…ÆØ$ý AœÕaX$ö8ƒA‘„d™ílt:V=©T‚0åÝ»XÈ•³=î¼r­@3I¡x4ŸÛ`¿Õr°+áèHX^6ìïK}4âá¸97¼ùÚkr°¿oèví¹Æc›ÔXõ(!Ž ³™5®›L8%z—J6`åTµêڵ…{0°Ï<} Cg`'§IU¥b ÙVVNegG#Ë©V!IUÇú_ÿÖßâÆñ1ÿç^‚õuLžR´†½–¿!t»¶K‘¦v.¯^…ímGt·Ý 'g;Ÿr>8<´²zMˆÊ.SÞìòÓŸý€ô8áw_ïr;Þ[?‹i™N¼àÇ>ý.Ÿxæ6!¼ùz‹££ÄŸúGB B¬êWAf»‡7!L-é{2·¤ñ,°NÝÆØŽÔþ‘•¦ C’ЮôwïY‰×å Ë3Hæ–sŠŠAÂda»YVSÛ·ž- 5j ˜'°<³îÜ;7…Alþ›ÏÝ”Ç}›—^¹Ä¿üçg « 52/žÖfÍþÈ7˜–h¯.䡇wÙÝirófJ‰*Ô$RBp©X6Ú¤ÓÜŽoxs§¬Ô‘bs#Ý@.€$BP†p_˺›ƒ ÁÄPÊ…òeËE™õØ0m[\çBµ ÙØr7ìÎ 6 yÕÜž*×vÓð|ürŸÓÀXlµØqÊ^°RõTWåžèÎ×RÈ­z÷8<\⡇åòå}®_7²··¦ÃîØw4¯ÜØÔ`¾¢A¡ñÞ‰—X%Š/¿«»© ßq¥ËCã%)HÄ==îªGlU}ªel²±â‰ä/€'ðŒÔ¼’æ¶Ó¤Ô9íëü‰Ž-ÖäåXa2±9ýþ Þxc_^~ùUyç·Ìë¯_—¯~õwxë­WxòÉkÄq&¿üËÿ†é´æI÷:#¸²v•\Y6ñº'Sß@ÿî$bLê‘‹.´Ë2T.KS¯Çy~$:vÇUéè=p÷†ëà(W ðxíb­‹å.Ö(¯`CÇwä$[½û<×’lO¯#ÓÄj®"OÝË©Y•uî£wÍ+/;8á-Mòú¦ðèÈô:T«&…|ó9Ù×qFºÎ‰àL“Ë-½®XŒ-=ßž#§+Ç£ªÉÇ…¹Iɪx¦]í”]פëa½_ïyÑ›3IØÓ.HY¡d™óJôoÖ óÚÁø“tþ8 Ætó‡%ÙwHQ9_„²'këÕ:NáIήgú”š–÷7çš½îšXÚÙÑF–kàíémº¤2µ%%’z¾Š­™He÷è¬;*ÔÓYGÖ°UvnaN4±I k¤ñ Üúzw´ÁÊ©fÈ·ù^x¶5®K°ìqF0Iê IDATŒWçpêÑ—´ú¯ M¯î ’¿Æå̇ïAýa¸ø0ì¼ •›t­ƒéjði—©©÷á²—¨Ê” Ú&@%ƒìeˆ.Ct6? ûäø)…½LÇ{T¯xhÔu ¿W4ž‡öÓ˜$—ÿ¥^B ¡EìD“(" CJQ„‰cjaH9(ÇÆHYÄŒËeK[ ÄÌr#"—B¾ÿ¯¦òð•Ô„³Ø„ÃDê]Xäwÿ©0zÛ¢jRÄY®FËYÆb‘2½ý¨ÐøìŒÒÙs3âî·àæ‡ ;q,=“óAž“5œ¬®2¡1FwËeÒ  &Âdu•¥$a2_p7.1šLxùþ†ÙÞŽ8¾ÏÒªáõ‚F‰“|g>¦Tóæçiš)—hDYµÊ¤Ù$ˆ"É 3[[“`±@æscšM ÊejyNfŒ&o4Ì`>—ÉtŠˆÐ êKKÔ¬WÉb!å<'[,¸Ÿ$¤Í&q·‹É2d:ÅXÅ'KbŽc ëÑnƒL§H£a¹ƒJ"¶Rª.!™Í ·èÕU›€(ÜŠjÕ勒 ,]7b6ñ‚q´É[}Zá„—öÎÙ#M ++~U©nݲÄo›÷ï› M1ÇÇòCù/ó‰~”ÿí‘Ï<ÿìÞ€yLCh· aÇC!5¶ÒSY‚­%¨L z‚¦`Ž C˜À·0]aí|‡ýì¬.çòó¿øi3+ÅÂÒ{0=c¹QfÕ¯‚ÐP­ÔÊ0¯@R¢Ö¨ó؃×IÂ7_Û„¼$䘧–˜žÌ`¡&I“*ädžtaƒ³  yÕ@"D]ÛµIR•C.YÒ¾œ‚¦ÐF¨lØyªÜ*uC9‰„´c%y“U ]Ë&f•¦V–7](±³î‹±kð³«ã/],Ù¥$EÏÝy” 2­²z•Ñ:…líH“ç+Ð0\cï,gmU}6 yüñÖÖîñµ¯]u 9RtŒèv´+§ ÇÓãúZä©Í5øs]‚H¯ËÙݾm,´ä¼îÌÛž‘™K°\•wY #´ÄS¡jêxÖf¢&RnŸKá±pâE0G²å\ '‹Eƒ$YH’¤&Më’$ óWþÊdyy•ðþûû‰XÇÆ™ÎSÏ•dUMÌy‚z̆Ç^Í5 s~'-Oâ÷CO•Ìu0B)LöúžšSâEw‡”ã‘È«^Þx¾ ³Ç\ ˆÔ‘®¯Hïá-%!‡ž’ShlârÆA‡ìwêÔ¬£kçÈKœabMמè1fß¡¬dÄ&–÷4Qk{ŠUUƒá”²y[#%Ëo‚-|_#žÄóóØÒyÿ@oh†»St¼ŒÂ§"•/vÝ£ûúžM(¶ò¶ìq‹NqJlrkbU.ð.¸šlýQŒ?‰+÷Ÿ"%ÜófEÃIÒBÓ@ h¤%Z9/y0«Ðƒ9µä­IL ý~á‰q劕ž=ÞŽ{ßîþU©Ø±;§oArŠOý¾ $g3{í¡J8gòn×~f:å3Ï>ËÓëëüÂ/ýãñع› öÿ''NFW8{Ö& ‡‡Â;ðþûz•$ű——…­-+Ë{æŒ=Öê*\¸`X¤ÂpÁÕ¥@¾ðÔ«Ü9ˆù•~ˆÙÙ ˜N`8ç‘•÷ù©¿J­>âú[]þŸ¯]c¿´±˜ÓÆ¡P]µ]†Ò¦\¸lh‡G•IàpÇö1ÍÆ¸}Çr(–«Ð^ƒäX'ÂÆª-žîÃàÈîõÝ:l4,×d”A`,ï¥Ù‚«— ZV^ç=¸_z#hæ0mZŒvÂø^Ì'ž{KLðêë—ÞAfªìÇYu0߇üXH6^cyò:O=þ•z /Æä³ RäØ±Ô¬t.‘•Í&B~ßvaÒȾ5­¦^ªÀà0ƒ0‚`$›6Á) lÒ‘¬X×ÔY.ÌRëx>/ éäuY_WYÚ‰  ²²Ê!dc­·TåˆBv„оæªôËÄ™Úz4 {|…Ä÷ÕpeBÏCb¦•yg‚VÖjðÜ“-ý€ýýs<ø`ÂùórýúcœœDZ¾§¥®±»ˆƒ­dR˜µõµÊÛvƒbÎW´êídY'ÊG)yÐó™'yýõ7yá…ëz¾‰Á{ž¡ÜHN5©è8ÝÎc=ïºÊÃ:ØÒ¦˜:pxYŒ¹ë‚yª]<ÆžRÕg wΉÏë\Ý÷äYœhÀ@Ç6Öëw©X§‘StÒkIt<'ÚAZ×ûSÒ±º±9ß íʼê¿zÒX9_]—ΙË7ðÈü%ON¸êËÁ½§ëÆnz ÆØ‹J{ž¹ÝP;jM…IUt\3c¿{‘vYº®V¼J¼£‰ãÓlx’ÆNks¡÷hD!Ðó<6ŒWžoë:Øÿ¯ƒñÝÞkt©•‹®…äž‚¹â K%M6JžŠ³[²j¼FÓk覜ò"dNaú¾ Ð]Ðf¶,S M!§k¶•Ò·ËÏ¡emî7‡‹µÅ¶»_…F®Úzüý!òàcÐY†·_¶‚&F#Ǻœ:/Žô­_qFôûªÊäø ïФ8ð´Roü}oœ§dí}¸ôQXÞ†éInêÕÚ•¶vmFžz”똸è–ÎÏc±€Ñ‹°skŸD–ÎB;²®“{61 ½G¹3 t™®@ë¯ ñ*Üÿ ¬Mž—'?ÿiÞ~óM&½žU…2æ”kê½;Q^FžçtÂÃzMêå2õÌÐK ÍK!Ïü÷†§>–ÐÞ eV3ÐIÍï7äÎÿžÓíÏY®ULÇi‡AJÝÉ3Púk9G…CJÜz9ç_ˆ¸ý¶°S)q½ ¦\f¯Ý–£v›N–ñ¾I±R«1Žc¤T"<:â$I¤2R‰"’V‹N’0Ï©æ†t©e·e¿ü8Ï~_ÂÚ쀻-JK >öÈ1+%ëûÛ M´SÊ2¦ˆ¬¬À|N0™,-!ëë$ƒy¿Of¥f©4›¦<KÇ®±TB¨×#0FIB6›1Ë2R%ó9ÙL]JâØ¿ah+ÞÆØ ÙÄŒõŽp®ÖöyÑéØÏc‰Óµš ÂG#˜gYá°†Y:µݵ¯Ãö& v+Ó:ìßnd¹taïÐÊÊnŸ5´ºpÔ‡ù@ˆk°s×^WTµ¯Æ–Æ“ca¢öjUè¶akÕsփÉíᆡõ$,/Y)‰YG;08"/È#ÜàÑŽùÊW&Ï"5&Ë·T¸ûÈîãtT(=e4XáÚS·Y^:äÖ‡px7¢„sk6h*ʧÈt]¤6VŠzVœ<žØ ! !¨Â!‘`2ÈêÖA:Ìj¶[“5!o©K¡±ßKê\Oh¹gç< ÜzîŒÃ\5yæUßW58Q.N»?•'¿ã¹ ÅßÜó؉Α|… Ï©P¹Ï©*™SÁ=ÎŽâŽ9º¢AªK*çz?W4Q¬êµVuLâUóR0]‡žñ’F_®Ü+€Ý§¬Ø†—ì´uçv*÷¹XƒªÇWpP¨ŠçÐîÑX ˆÜ†Þ¿…ðºiÎ!¼ã­C9U¤P+{æ„#M")øF) _«:Žä;03‰™6œ©eë‹NÅ™îHá¥rèÉå¢IÕ…k÷Ïhr|ËéUF·©ãÛ×/ò rΛ£&I¡*.È}gœ¤tïíä-WãR‘2·âSú® ˆÚßœºp{¤oR ¦:}çO!× Yݬ*•Äúo^¨'‰ë ¨4­¬Ò¨R*‚%|;ÏyDÇ2PB«Pÿ–je%“‹"W¥ZUÅ Eš]˜Ü²ÖØ.!(; ²![O"iwÞ±‰Ž{öçS9»l˜½W–½£`S¤½•³óµ·þßõÕ&›³ MAB#ŒHUŒÙ|ÊHõÏäOé×J¼÷ZÄ[ÿ Ùýjiº½¼Y«HV­qÜép/I$èõäÜÞždA@ r÷ä„ÙdÂP"ÉE¤<ŸK<1Û܄ł¶ˆ˜4¥±H¤‹Ü>Ùzz]Þ>–ø¨Çƒm©ÆM¹°Õ§µ9áwo]b”¤T‰™-Ò C©ˆÔjB–IswW‚FCfçÏT*Â|N’#9ÍfäA@%Ž‘ý4=ñù… ÔÂPŽ—–Ìèþý@!V6´¾ÛÛvÔïËiâìYxâ ›I wïZ˜ØÒ’}O’øÆyV!j}Ý* ÙÎDáƒQ* K]¡ÝZKÂ,¢Œå‰à=ÙÞg'_BB!ªTä'àxãwä÷ß{ÏòAVW… akË&-kk†6£¾¶«ÔlZ^ˆë 4›°¹)¬®¶¶΃Ý];ÇÈRáx» ù¾GöùØŸºÃõƒ'øõ÷Ÿ%8`Jëòçy_žØ¾G¥<•þÆgø×7¬ùÍðz}¡Þ°sA*,ưÍ’í(La6J5a᢮ %¡Òƒ»PËaySˆ#8¼.”b¡ÀîMaÞ–ÂÒyȦ‚™Â0²0¤Rl»Pq”Wav‹9Äc¡¾nXÎj)Ü ÀÉP „8åöÍué´ë<üðÛ´:^ÿú5ˆVH*¶“@&*5™5­ß±¬/5å+¯ÈÝÝen¾Û€JUì6$æ !¨bÎ ‚ŠP>jMû4 „\‚RMH"È× ~N˜çÂ"ÌØ‰1RXÇîHQžsZQ–Èu¢ê<'.ÛÎ|¬!…ùXKÕ…R­f/kE¶jŠàªA—QlúăZåêD‰^ïP7㧪×1× «#ëžÓ ¨+°,Ãá1Ï=w(kk®_¿H¯WÓã¯RXµFR¨C—`EWÀhÂá`A¹—T 5¨v×rGÇÜÔ q̓Ը˜Å‘‚ó‘¯Ëb»cðž{Áàž&m  ÷¥à”,žÔ÷;Õ¥±Î=ÆÎÏ@¯¥%0ãñÇŸg}}I¾ô¥ß£×JQ®,yãOŠ8”‚¼§ NÞçDͲŽÑAÁŒ~Æ9É7(°KR¸q×ë_Ñkp.e§P,½÷5•™êœ­è1¦žR šI¡à5Õu¶£÷.Ö9rå勆‹™W¹·‘Oˆ&O«Ú‰š{ÜÅ:•ªL¶š®é3Êß9Q.Åm½Ï¹t¦ˆMUÕšê:-똗TAìÞVãÒiøÃŒõþD- •.5¥B~ÕÚ®xyÏC :n‚ë:dÞñ|UêÐË™ýAïè9Ñú€xüý¦æk»ZµÃÑsUsÔ¦&7¡Gðv¨¾LѤ} Îá‘ïþë0Ý):]•¿5ÌöÇ¡µ'¯Ú¢­S\6žŽBËë Œ=O W‹éR4«# ßM}¯k„¹úŒkªþÈ)ý*߃µG s9¹^ü5+ëWõèpT"ç¢|•SQg×TÒ»ˆla:OC0…Fó„šdœÑû| \1°tÊ?jÇÖÿGðá{¾ôò×xtu•»GGŒƒSÞŒƒ„%Õê(Ó@è–ʘ…¯Ìyúg…•ï¨Ï"î¼r8–J©wr¹ù¥&ɯ¦œÏF”jêé\jã3²þÑœ­ŸY|Æ0]ú7Þù§e^ÿwói™ œs=Þ #.Asw4ÂìîJf\©ðÄÉ Æ1"„ó¹•x],Ø.•¨ÖëL{=z• R«Q[,¨7Ô&˜LXŒÚœ}¾B|xÀÁÛeîÇëDyÆå«}‚y“wúË„­*g’„@¹ Y­FëàY,—˘é3"å2¬­I°¼lJyN¸¿Os:%°Éy½NP¯“Ïç2ßÝešeVŠ6Š,ì)M!˨•JdKK–ì½²b+Þ''VÚôäêuK—Ë6ˆîvUÂ]áA‹…ÝYÚ½9#¸ÕUÛ°&zV±éønݲjq¸ruuÀÖö„7^­ÐŸ…0è+¡ËqpŠý}¡Ö0úš)u»òÈã³úä“\<{–["<¾¶Æ4äƒßú­Bé©\vÐ# cÚݵUþ§Ÿ¶¯[¸‘°X679M’‚ èîXo { Y¦ñÂØÂ¶º]ëÑj@Xƒþ‚ úüÈæ«üÄÕùSW^%],xùÆ9äøqò±Oš¯_¿ÎûÇÇ–5›Y…ª»wáÆ kÀsxh;#‹…•×MÃ;B¯Wtƒô~²²"<ú¨[§…J Jëòè;ä)¼üÖ†zX(D)×]+4ÆÎ­{yÞ†hfåc½V:0žÛÏÕë0É!sÕǹWQvUú™Öê\OÛX)éB>Ó€a©Ca¬ùu ž3ÔXÝ›«ûq¦[xÍÃÛ;oñv W!]qUPÝ%ï{ÕbWýx’‡Û¯xJSS‹ˆVkÊåË}&ßü檪âú¾} ¬§:Žº Ž¥˜{„级dÕðàPSÝRf 8vÀœÎ)Öð-Ñ(¹<ïëû7õo©®Ž=}G|v÷Ñ©GÍ<—©‰î†+ºÓî¹PKÇ7p˜i6—yòÉOqttÄË/¿àÍwêÍã\£Çpfl5 §lkéüÔ¥ xO= ¶ñ¤l—=hÛTÇ\ó AN-j¾ºz¼’vv4òr‘ŠÑ5;Q"ùØ­ ×Ü[³NgÙAŠô˜4o¯é¡‡nñ3?ó VWåå—0Iâ\Ó*ž÷K˃í{·@Ç=ñ®%S~CŸB}É9lßÑïEê‘ç3[ãÔºVüY³M2î;†*N¥Àö8üÊ·ƒÎŲއCª¸¯Éšƒ-vÝýÐdÄ]ãš7VçþÞÿ‹'æ;ÿ蜮¹ùŸú‰øö†¥xШijF)yDí™wN·d§^ ïþuö5eo)ÏtêV=Q°ÄCõ9 ”ûŽb¦Ç¹§s]fs ^Wuì±÷hpmwÞ,‡‡ž†æ¸÷û¶Än<‹“é:ç`uz¯Bzboç ³¼CÏÖÇù«PˆÌ­êv„s‡`¬y”,ÑÇž>só0õlT¨_„Ö9ÛqÛêý¤ÐÔÓppâŽ×dkyÚ9úO|ùá;°üý×a؃•%¥B}X®Û5ˆþG(Å0ú"¼÷ ì̬W?ùI®ß½ËÁÉ yØ5U.3 C–Ó”³Õ*™qž³•C’f¬~®}>au9'¹)¼ùC’õ€ËÏÍÈMÀÁ¿ è}­MÜ ÉMF<‡pÞdu»Ïù¿œ²ü\Îp)çö äµʼö¯*pG(¯–9 a'M¸Ýír°¶FS„áу^¬T¢œe4ëuî.-aF#BfÆ0¯VI¢ˆò|NV.ÓÎsd6cÚhÐIÖ€0 9?NçŒk-Î?2gùJ™Ý×öÒ.Ù0çÉg‡Tƒ9·Ž T«0ËäqÌlcƒE£Á,ϵZNÈòÇLjR©Àæ&b áѦ\&88 CL¹Ì¬Û¥¤wî`&¤Z¥œeó9&M ¢ˆ¸^'Sx”,ÈýûH¿„!E‹f}½PTj6m 2ÔhXˆŒK./ÃàahaJql|ÛY°?Ý hÇ>tÂüxÁ;oÅ.,ñ8Ï-lh ©˜üî ß”ßú¿Ã¿þâùÍ—^âå×_ç¹çžãW~í×xù߀zh>g}cƒÑá!¼ý6§.ãÛÛ¶k±»ky!>I=Ëì9]"宯TâÔï"ŽmBÕlÂÚªU0’:TWØ® ùÁ•7ø±3ÿ‹0ãßüF…ßyeƒÞò\¾@²±Á¿ùM®¿û®MÐíÏ|^À°œä¯KÜ\çÈšþ¹.‘ý÷ÌË»˜¨3è``ñþ«+p8$ ñ‰¯ÑªœðO_|Šw?ì­cÎÊ1õé/RoæüêW?Æ[;+0½'‡0B« ýcH2XÝ´ÿø‚ܪ"µ[ SA}ÅöŽ@mÃ&‡B¯ƒM ƒŠjRµ²bòü*mè´`‘Ãáâ…í4W`íŒí^,N`чù¢6L¸?„ÉHzI‚42Ë]ÈcãGÇóìµ7Ø>sÂï¿ö‹Ideve¢¢Û]ˆ¦Ö™;kB¾ Ë«<ûôÆœWß>Ãtªæc³ž=Gª d òÈ u3ìhOºfŸ´¥*eËSÍs 2,ÊLábŒƒ0·JQÆÇy×u·rŽÝ/¸rÒ©/0kRغ†ž¦bè™S/€vЊ¡Ç͈½ܱ‰Zò‚|—d8‹ O)ª~*Ãyxx†gŸ=¡R9’¯|å‚1fÇ“@qR›S÷%ŸÕy Ê<д‹$ŒH¦¤i xKƒÀȃ|ÝÓ±±^à IDAToQtPN ç¥S¸ZI!Q>®}HQ  §¬Sï=r¶¥ãüPϲ)l-ˆùÌ™M®\¹Â;ïÜàððÀ |‰¾åA–FzNÅk™Â ¯IÖnyŒW'„xp8烲IQe7žÈ¼Ï#ɽ$Þý¼§‘—ë’¸s×½„v$Ð36ÁO Ù%jÑ{ZVÞÒù½èÐzn ñ„­­.Ü ÛÝàÕW”pM£$€G7<è:›Þ=t2Ñ+zíΨѱdºvÏz¼Ìã3¹Èl\”qéê¼MÖL!ý³­Ÿs Oî{r¢JRc—ë1\놞羾ޥ0<\÷œ©Ž·î]ñ *4ÂàO ‘â‘ú®†yÈŠã0¨”˜ïþ2…ô(n_Ä~V´® S{L™êT$úºo¡¢h7Q …Õ.3ÓÇ´£1©mœ÷¬x¢‚· uu±Vu%Qr´LU6Ò¥úºB6õšý ~[“­& Cdý,,_„i’·,¤Hó^©$n!B©˜¡"¥<)ôê¢.¡L Ú5ãÐJÄJ_ç!V³À¶kp«„mÕ{üwŠz‹ŒôxÚ‚9€sŸD²*r÷eXÉN:™ Ë’ØZ(2Rƒ—áú¿¶ëj5è#?þq9|ÿ}Ù;9‘Ð’RIõº4«UÚõ:9I¹.Q^Íxô§,¿$Ž#Ž~=^lʙϤrå{’EIz?2C$¬¤Â8£™–i/åTÿ¢‘îåDÝ”Ýa ïɘßÿÕHÞ%¢Ÿ,do©BEB"ùýja½ÆJšìí±?Ÿ3!KSiæ¹ÄÓ©ìÔëå²E˜0$«TXŠ"zy.Ìçrœ¦ŒUùj*"‹,ÔJ”ƒ@¦ÉLÆ£@ÂVSÎ>™°7Y’½þ²'¬_*sfkÎ{ý‹²—7©ÔÊL¢ˆþú:ùñ1ùx,áh$¥á<Ž F#ŒÂ‚8Æä9y«E¦SòrY¢ 0õZM Êý¾”‡Cdei·%òFƒ(Šˆ ²ÑÈv?Ž-HD$.^Ólxÿ4µP¥ÕU«ÈÔïÛŠv«eIÆó¹…M&ÂÒ’0YxS¹l¸­²‘ ¤óL˜'ÌJ5ž>{H)ñêÍeÒ@ìñ›M CšÏ„…°y¾&û™/Ê zž[½ÙJ—Ùj6ùï>ò¾ôî»Ò;80T*ò¹ÇãÏýé?-_üß°ãÞÞyÄ~!nܰbµê™,¤k{Ûºƒ‹Èéë-%놡Ðj ­R«Âl5)5š|js‡Ït~[>¿ôe¹,¯Êàd!×ï]âWo~B~ïàé5Ö¡Áñ ܹ#ùíÛðÎ;…§†u·°´7,™»×³JZ£‘5ì÷m¢æˆó<õ<ôíp¼û®…?/Ôªpw¦™üÌ÷¼ÁöÚ7îlóëßx&c6;=þÆg¾!ÍöX~ó…Çä÷¾*ÊÒ;´OözÍÓÓTØÞÄÀÎ=KïµÈÝÝÞâTXZLÃBÆGÂñ]˜Š–âÀV,£)Ô;¶ã17ÂRC8F8Àà†PjØŽFs$Äu¡œZ ÑÚ èÂÞH0cC`,áùä²CˆÎƒ‰ÄªllB4–ƒû5–º-.\zO.3ò×® &ää¡vf[† Ï@„Ì×dyë>r›¯þ[Œe±âàS0¹`:B0Ê*…iêB0…éÈŽŸ²5,+ÿÈL :†|,ä%AæJ(vP‡uk '‡BÐP;Ñ…XHT¤HMµýC9e.ž²)\…fN¥H¡u5«xdÚŠB¦º“"Eàì*Ûc: CYR8ˆÃì/´#ÐÓ#U¸xå±TaM‘ˆãqGºÝe}ôNN†rçNàaÆ3)$D—léözÒ©¢×uìYÆ«!`,a«åÊ¢ÇJÒ>«cw%ËŠvˆ"…ÌLž/pdx…ÇÜ×]¸¦Á¤K.KôPç«"7Æ‘€#) å‚ -ŸýìÇ©TÚ¼ôÒ;XZ\Ý’¬Žã2QøQªã­è¸V”û‘)´©¦¯­*„Ç ÞW´Ôò¸J !ê{Zyw°¨†®Ï'¥£Ç9ôº ±ÎûPl•ÝIàΰº“3]CN_ÓÁ‘ª^ÐPnŒ#Éo*I»"Çb*ijØÙYå™g¦²¶vGöö–dooÓ#t¯y!ÎÝÞaCÐHLTF¶ªó6Th˜ÛTŠd¾©÷s¦×3ðʰ¡®“L ¸Ù‘B–†º×=’ºû¾åR”Ãg:ŸUOÊ‘ÊgÚ‘q WÎÀqU¡Uwݵzœª#]'Žaœz^2}Bàï|—Nƒù LÐßü×Ìú¶GúZúÝß÷]aT™gYSµ5 Éô½M/§W#:ãÌ÷2¯¢¯9­™ª^FT(\›¹z—:Á-£9eÓ#\^ÍcE•Í“‚ .떖LJzŒ%O•j¨×9¶ÜÓuÔ Õi!­'aí" ¯Ã¤WP¨¶€ìÓ¾†,51׿‚”2Û$ìjÆ&Ö$câÕvüéæù¨hÔš…7×SO˜®êÙ¶ä^ÞZSu¨Û©o= Qf/ÚŽ=ž–…6Wñ m©Î¹Š®™…&;‘·`­®”cL€©~/O1£·zÚŸƒr` u«›˜ÖO Énü[-R,óðæ¦¹µ³Ãî``Û1í45]ŒD¥˜l#K‘ÙúéP®|vN»’Ò{îþ:ÌsáÑŸœ˜Ú¥Ùõã_Žß3䵿¤Â…³Í^°òg&ÔÎfô“˜ë¿ðâ¿(™×߄ݨ&q93Õ<¡Tkp2™°(—M´Ô•d<¦62œL˜)‰{–$´ÁÜ1Ý0”rJ%I³ŒŠ1ô[-‹‘7‡y.óш Õ"jµ(DYFÌjšêhÌáÚ—Îì_iš/xÖ˜£©4ê çS*ÇæÃmÂ4.S98 :RJSL¥bÒÁ@¬×)•(#QDÈÁAµJ~æ ƒùœ~³i¥Q–I}:5y‘«¢QP¯›¬Ý–,Ï-­o>§Ôï#Ã!‘žÏ€¡Û•ü "6ðvUó8†Rɵqlƒ]§¶d•s 󹡥~ ÖìÍÐhXÇéím›ˆL§†VCÆó:5y`kŸWï.ÑKÚ°Ò5d™pp`!H ÃÕ¥Ï]¹Ãå²ò7³-8:@šM‡C®™E¥ÂÕk×ä¯ÿ÷s£ßç«|? Yf=0îß/ Póyal·¾nXZ2L&ÂhdÉà Ú\g& ”+b‚:ñÚÏmð–~“kñ—Øšß4w{æßßÿ¿Úû/óIhè߇÷Þ±ÉÅt áu_,Š.Å``8>†ùÜ^³ƒcűå€_Gènµà±Ç¬ûw¯g¸wOèvmâ¶X@瑩÷ùÜ£/±s²ÂÿùågÉ‚FC¾ð½ïreã6_{±k~í7cCÿŽ0žO„ b÷Ëda!RíšìAo í¨´àè*-CÖ0Vz8‡| Ã…áøXhÕ`vIƒ‘!›0L¬¼íù †µuؽk$BÞ…¼a[ˆC#‚$†Ú¸ ˆŽ,‰|>3¤¹Ø‡üÂîBKmh„0‹íq@Z…j›ëïlòìSG¬­ï0.›Ûo¯â‘PšC¾n]±el•Ÿ¤f˜Ž8{qÄå3ï#yÌ›ßj[5­Q Ó· éªa^·rµ©¼d¯/7vŒ@˜æ3!\XXÕl yÇØÝ(5H$Ⱦ&$IÌéŽdê6)9µ/¨ì¨ÓÐ/y¾eo7énR÷tgÀTåÌÆŠïîjOßòÕ5qI=é…WeO ´Ý¹œdYe@ïS@sq׉¾÷e£S šÏÓë5øøÇ_—••óõ¯o`Lâu:œ4j¢JKU)®œoEêùa85×}pÝÀÝ— Ü÷pNTTNt¦»º#*c%€o쩳¹#ü¢clk{ÓI¼h—b¡ßSðVr…oY„8^ãùç?A¿?â[ßzc×]Ïg$Ʀ н{lŠò%5uÇvš—#3Ç}¨ê5O½ŽDÕÁÅŒÅý LÍ2ÆBØœ(ÀŠ‹<ôš<¹ÔޝªŒ ŽbÇåË׺n€“쩸ªò´÷”lïÖI}2^f<Þæ‰'^㡇úæ…$™:'àºbI ¶½y ü\çáŒ>SƃMÌ©u3¹±‰|ÅóÈÈôš] ¬.mÔôs¢÷÷žªDMžÿA]=OëôxMÅ JzÍOægd,i¿ïÁ®jËÇo¨3xGï÷B¿û)‡:÷_ç¤öí$ï?j·‚ÿ„Äìª â8RÖ.†ÿ>ñþ)}÷,Eý×™êiž*+ªlæu=RïV;²ó¥p„†VøO>µá¡;¾*·¾~ ç®*eflƒeÙÄš²Ÿ(Áº£›™m”‹"NÅñ8ÔÏRF}qo= ˜¼hƒ„!$3dã)(­#Ù!ܳùꑞ/Ùõ’¬=º¦ÉDz>å[È‘rWž@`¦ H]¿j÷•${z_³b9íg¡õ44>TWøzŽÞ„Ãtƒ1FùÄ'䃛7™öz*KuÙ›—…ÒóðØú²q~AŸ.oýË.Ã7fí‡3.~ÖP1Èì+pë×›ôŽ#ªAÈån&?–HùsSJ‡,ŽKÜþ½²¼òo[¼ô)ïeȬ]%®W$D¤‹p³Zao‘p½\–ÍÙŒõ0ä½4e8›‘å9½J…ecäCcHò\(•¨„¡H½NÔï3*•è‹7H¿/ãFƒp<&k4H66ˆ{=d4¢E2/Ç2”ŒÑîœõ‡«¬¶úr;|Væ{Cê\¾pLÔªÊoÏ>Â"S›L(ç9QØÆ ‹¡B—JÃ!R©yNÖéPïܱެëëLËeÂÑHÒV‹I’H:ŸK-MY”ËB§CP©XÉÛÝ]d4²Ûz­&Q¯‡<òˆÈú:&Ë„+Wl¢àÜ­ïßGq 9j6UIHU•ÒT(—-ºV³Aüd"t:rÊÙ89±&|:f‘ÓÉ{ƒ™pFöù©ç¾…©ÇüÎ7/rã° '=>÷‘>qáößÍøå¶$Ùþ]±eTXZ²É\:†å.ŒgVJu’Xã¼JÍJëu–t› …¨%tÚvOàh 4— n[º¤ ¥¦°¶½™}¨Û‚$^yFûB%ƒò†…EÅT;Âx‹’% ‘*µàÞ®…Iåu7W/„æŠC‡;ZL¼Óûª¤’,LÊòÄcž|ô¦ŽVåÞû*œj 䊹–#0mAÊY›k×^!á/lX#¤caÑÈv ¤j{ÁA"d¡M$ŒsxŠ…EÅ’B­b¥hM$[vJt÷¼f*;vÇ TòÄŒ=…ŠÀºzøÎCe§í³ϑ‰#­ø_×fENmg1 ÑRø8 µ$·EA† ¤pWFÉÍw=XM¤s%©’ÛI¥Ï´O’Ä<òÈM66N¤ß_æÎAÄɆƞ g …šÐ°èÁ3ðÄGð›*Ö¼Ípúþ¾›¼­•ö­Ä7<ÈUÝ#u÷¼Ræ®v8æ4Æ:fß‹£‰È±Ž{Ià ¥R Æ.åò€Å"öº µÚ²<÷Ü3¼õÖMnÞ¼ˆKö<ÈѾG{°¥HË•Ž|ëøÜ|¥ZAwDeñ”^©w¢s½)–äì¸AMíÄ”¼Ä+óîå¾’‚StÎh•ß¿ûz.笽¬ïiQ8R_r°,½gÎU| âý%îÜéJ7xøáduuÈ7¿ù½G·½Ït´³Ñ÷ÊÙé=ßÕªþ¡ÆÅ먧¢ãu‰\ªs~k´'…¿É@×zª÷}YáP±×áÙÅ’çCýýP•Äš…¡)LÏz¥a×9Êt«1ú™¹µ‰€ü²§.ö_žƒñ‡þ­â! =ŽÆi󯬵øÛßw*Çy¹Ò‘'îÕöxwü…W'©ýéW¼åQkJúÿ®g\WóÄóÚ:†¾'U;µPê Ï«ÿ„ótð¨¡×¦ÙМÓ5Ó‚]8s ÚÛ‚;¹cM4È3Xù(Ìáö[öÜ[z;'ÿ?oïùdYzß÷}~'Üssè{;wON›fs @€ DÓX–D‰E¡DÉ­’«üw¨\Ö ¹¬¢(É&˜L‘”I2Ay `±‹M3³³;±»§s¸9ðøÅó;sP"©På]Ý}Ã9Ïyž~ᘠãU´1;ÍP£RÓÀIaŠþ®ñÐVQ¹¥óŸÞfÖtÞõöš+"•G0¹< ¾ýŽ&‘^bÎl­%mLö2k•õ˜dü?…Y&P͍rÀþŸÂøUnCû(}ÂÆ'ƒk0ªÂÑw¡2‚‚1ìÝBIú} PÀ¡“@᪰öË!矜’w¿÷~=Gt5Ïé,,ÏØý[_v‘Ãò™²óy#áÚØL†>Ç_u¹÷Å"ÛoÀ;Å"wk‡$4&!óž'ù|žóyöK%z¾oÉÏaH. É—J¼¯Fj¥$Áø¾tŒÁsòI‚$ ¡bñã~ŸI¹Lâû˜N_y q1uŠŽC! éw»ärD¾Ï(ñ¨®¸rú°ÚâÎN s8ââ##J‹S&Ãy¶OJÔ™â%†ëÇÁ Cœé”$ŠˆÆcÂÉD’F! C†í6Ý(brt„[,â' þtŠçy2QéܼçQ.1¹áÁI¿Ç8Ý.…ÑS©H¸ºŠ©×1A€›šÇù¾ z;KšžUßm.2“ºít,9»×³qÚ×Çv;ŽmÀ],ª ìyþüË…6oïŸc||b1öµºÝÏü<ø‘ltZ\(Þ¥•;¦mVØœ.ÂR‚€§Ëeò• ¿ý­oIN„—›M¾øå/ÛþøØB’Ró»Ô¯R±càÔ)Ëù(l?À~ sæ›|fùüÍÓ?à¥ú·ðƒ)É üÙƒçù[O³q"ÐÞ…î¾Ý¾ þ!RRxêeQ,Úk¢g“¯0œ‘è——íçææìøâØ&?å²ó…8sÆ®ÁÎŽŽs û{‚q}ØóO_~Æúˆ¯¿w•?{ï4Ä.ŸyªÃg/¼B'æßüÁ GÇ‘í¸×ëÐ\¶b=S º‘ã e ·š„–‹Q­@» Å&D¡å[P²r¶G‡¶•)ÁÌé;ð¡Þ²ÉG/†3`Ø…;Bgb!S 5û ][ЛŒl"Z)€Û–ìÖ ûüŽ#».Ñ„b ¢¼åCÄCËw˜(TÁó-_¤!ìl‡+\8u—ÇÙc¿»Âî»())éûL„8‹TùÈ oS©D¼ÿν=½kÇŽ%mí$8KîÏ)®Ú-ùl¤$ð‰@ä€?§dù-&¯¶§‘ÞÉÏXH”Ù·P€9df’v;ÿHdVš›Ï@”Žõ©—’¼]fîØdJSsúÌ3sA28r“yÚ¦˜þœe‰>!“4èÕ§UJ<.ëÓÈÏ`ÕSXÈð¡@S._>’juÀ÷¿_!Žç~¤d0ÿ“ !v)ƒ£ô½¾Kê7vêoˆG3\ t>"f]TÊ·–Á_d#tnuÒˆi[÷ŸÓï–XY©ðÄžyf‹O}ê?ó3oòéOoÈ+¯\! ÍÃy{á…—e}ý wïî³µ•reÆ™u-gæ!b¦>•²9{ Íif$`F©GƒÌä`R¢¯—Ýù™È¢‘IØ<çÅŒ}œá¸øú¹P£“nFJ·œ‘kEUÄNf¸Š©FŽ·–0U323iÇê8éò&O¬ðè£#ΞÝ"êܼYP8Zú½‰&j§tíR/­ŠF†ùŒ‡Hœ1L¨dÆ–Š2^"ef>i0¿$³ä½®sy$pMÇ¿—)¤‘a?C>O2ݧù Ç©¨ ïP¯õô|@;hiÇ«•ÿ0;›ü'9ÕÏ_Ä¿øÑó—ÈÖŠQ(O¤î×âégBå4Ö_â¡Kt¬ŸÓ.†ˆÊÉö3¯ÍiG"žq¨èûcÝGdEÿÖ Xòú½¢ò,úÊ0³ »lëö—”ë±kÞ¢ð!: ûÚáˆÁœV‰XcäžÏœvsº õéßBê/"ù3Hï,ìqŒA&{Hã¤|)½‹˜>²¯Ûi+§"±SÕñ»º¼ÎͶÎKSùEÝöšÎc]åm»³À_ «ªŽžv€\³‡©<æxzö˜ëºv*lšÖg_×U;OÒÐÿµÓóПĀ]¤4Dê?Ž$}¤?@ª/"î7‘h‘ËH~Ùø}äÆ¿B:¯BÐCו»®+CוÁýûâpeÔòäÂß¹ò“¡TƒD6wE^ÿçéìzröoyä¹ ¾ÃÖÖ’Üú_cÙߘÊüb"ýl$µŸKdtU¤}è˜þWb9øMON®çÙŽE®×|¸ŽµæeÝódÅsM'ŠœCcèú¾Dž'1ÒšLäd2‘ÃáP|Ï“ R‘Ý  Çl™Dêù¼ žÜ ‰FFJ9éxŽD£‘T]W‚ ¾12Ž"Áq$â(’ T’¾ˆìŽÇâ»®<˜oIÇ2&röYßÏÉͫҌÄÉ—ä“=94åöV'Ñ+ˆs9Ɉø¾H>/Îh$¡ë “‰8ƒÁ˜Ÿgp|L' %qq‹E¡×“È   Ž[,b ‡…¡”{=)F‘8ûûM&’Â¥¤^'wú4ÓjÕJÊ..Š)„nWˆ"Á¡P°Ò³Õªp÷®ÐëÙÎÀúºå 4›ö~–Ë1YéVŒ:Ûá(—íw|i¾Îã¹-ÖùðþœìN…r^hÍÛíT«‚ã66$pž:·Ígäýãe‹›“ý=¹±³cL£áœYZb%Ÿ—¯¼úª5²ìþs9¡T²c,•fP¤jÕò>ªU±Œ‰pÉÂBQ~ñÙå¿»ømyfyCñåÝÉãò…¯¾ß’ÍûcI6„Q_ôdz2¾Ã¡°ü+Ñ+ahy)©!¡ˆßh$ı¨ ®å¬øþÌgdnΜ±s¾³c;Bí¶°»kð|‡\vúòÓÏíË“OlI»·$_xõ’„ݾ<ºv,û‘¯H2èó¯ÿïîî6 AC(¯c#¸9¡¾`÷‡BPNB ‹‹Bµn 4…Ðö»Âö¡°?z¡ M±Õù9!_UÁ „£±0é g.ÀÉ1ܽ't‚_ææ…B"Ä‘ý?1‚늱էöºÂ8’aŠåXäKP›s𘎅‹õ"aiAðKB4WpópÿZYÑ’Ç‘žÛyýéõÞPÙiW»M®AºhR7'БÿÖÆ’gñW@¨&ùLG!í^”2Ë$ƒ먷Ĝ¡ÑLGà¡÷h*fjN›úc¤“LSÖdjÚ<~ˆÆ¬gàR½‡|æx\0Çšç5ôG50ÛQÕC]Ö±m@ɼ^fêí)ÊŘdé7=Ûán=£~ß:cEÌÍ­ÃÂy+3ºk·Ÿr5T‰IFº²æ”éÜìèxSº\ª@ÕÊhiŒ4Arfz R´H݇š©x_Öy{xÝ[–Èž›A¡¤ÂÌSsb×äbk©ÆA>JÍ ‚ÉÈ †¶K+µ Æ-ÀôChþ22aö~ƪû¯÷ IDAT#$Z¨YL"KŽPt}†‘¬x,üŒá±ŸMhœN8ölÌýà '£„²‰ð=#Â8—#n4HÂPÆAÀRI§Ñ0‡ŽCÁ÷ÔëL«5òÃ;[ Y{^¸ÖYàþQžÄu¸t¡G½:–7†—9ƒO1…áñ1±1$A@¬®Ù2ÀtŠ31ªÕèù>Î†IDHæç-çðÐ:‚÷zÈd"â8&CÆ“ Q£A.( ‡Q„,,0]X šŸÇ¬®Z8ŽëÚJy»m«ìëë¶ÓïÛ“=…9u:Ö.Ÿ7¸®­²O&ö ±R«<4æ Cû^©4ƒN9p }êǼõ„SˆÅÅ”¯a{>]¯ÄógYvvå×3ò*°¾LÒX¿ˆnWæ–—y´T’¯¼òŠy(3[(ØãªVÑ@Þ¾æ8¶C²¸h1ýƒ)Ôä“çŽÍߺúk‹‡˜Ðåë>!¿yûeóÛ«ÒÿfÒú'†8¶cC,LÌóϳ àphç1ìïéÔ*B9ŽÃ¬2T’ع[\œ)uÍÍñÐÔ¯Õ²s¿µe» ‡‡öÿrYH"¡ó¹äÓ½g“ÿÇ]âäv—JÙðžû•üH¾þê:¯}§U­¨»E§ä<•)>¶ŠN9בܪ-¨U…r<_ØÞ4\б}®5Š‚'Ç×Vòs–œ}؆ҲÐZµnà»`Øæ†ùuÈ­ZYº  £Àª&EeHagö LC0"L'€` òËÂØFŽ…äyEÃÄåUëÛ'žQ])`óæ2{ÇMž|üO>¾ÁP l|à ~ÞàÔÓ·æxã3 ;òØ¥™Æy÷íª!g Î NËàNõI7TàéØöx9˜Ù®EX¶çX’ƒ¨'x-C”Ó»m]lkQI´ói€žŸÄKQa9c+–i!u·.ÈÌT,4³r\S?·ÍÌ•ÚW¼8¹×ÔÛ"13µTd} zÿÆrF:§GfŠRC±8÷iæ©fK}q\$ +<ûì›2ÏqýzS?»êÊ öÔ×jsS1멊Ña QîG¤ûÏëgŽô©¹–çlê8L¦+¤²¨:†Ck`8¯ûjyžA†D”0Ö ·o; x 5š¨K´ªW‹B¢¤«}ÊɈÕÔmœI,1&ÓLN…פ2£¸ˆ£ÿ8£üÏàVRÏŒ·§‰O]»c Ž5á™Ù%½…§ŠÎaÆ O©lâk%¿·ƒÌ=‰Ô—¡"G÷ìmg2ìÃÚóÈÐA>ø²Ìšß© pz{XÐnà #6¦ÔIi[§´›# êµ2"‹š°èë’(|©¯Îåù ”~ '0ùÒ-‡¢¦Ý#ß6è”ìéÚêºHQÒDCIñR×ÛAœ$‚øgg q_@üfð=è¾…¸Ž¥õ%ºßšïÊhê2u„¹—".ÿ]ÃÊåX†9‡Ûoz\ÿß\i.%òÈ?@N4Æõ=Ùú³ ÷þ•½§\üé¡<ù??S•í½DÞýÓHÞÿý<‡×KRˆcŠÉ€;.²ë8øÚ¡˜ó<áôiéM§<L×q¬*Y’H\*‰ÇÒ‰cN’Dr/mI_ZÇ'3PéÕÔ–§m52DÕ‹Ì$SÒ§*Ú8Ó ©“VýÅÏäÉiw83쓃 )åÕ|€ßÊóÔg#þæOMø±‹xäjHyLïE|íK×Þ/br÷ûÄÆ ¾ãû$½ËÅ"IÓ©×%œŸ7}¦qŒ·º KK¬nmsÁùÒ Å‹/ ÈcnÜ­±=·ÎZ-á‘Õ-&í’yw§‚ç'"¾o½/ºÊÎ C$Žqâ˜AµJ7Žq’)—‘j¯ÛEŒ!J=*ªå–$8­F67q‡CëmE˜rsñ"“Fƒ¸ÑÀLð¶·‘ñ˜¸\¶•òn×âýû}[¡w[í-dc Êõº¡Ùœù9ŒF‹E6ˆŸLìß­Ö¬#áû–D]-™aX—¥Â6W.茹ÿÁH½ôXÒ®G8À Ož9¡ÕóÖþyF¥š}C­Ær£A¥Ñ௿>ë‹6X÷<› Õj°´„ÔkÖ-hòÙ+÷øÅ…?aÍ½ÎÆÞÿû¬ðúö)&¾ƒ l@.Ž5Ê©V-Á:Ifò±¶£0SÜí~SþI É­j”š*²´d9 ssv>SîJ©dßët GGÂêª=FMZàö&¥¹:ÿÓ oRŸóÚ;øÖÍ3JÿôÑo˜õå-nÜ8ϯþé¨äa©nz¡-%´°ß…æ<ÔrPH`qÎæƒ ÎY²·S±~­* §6~ ´ÊËœƒÎ!œ´¡Y±ÏÆímë‰á¨/AÜWeˆŒóp4§ ¹cØb¡1$S!Q»Õ  •:Œ‹0îÃ4¶s>u­´n8Á¤o'P()סh çÁ‰mE»°{ëÇ WÎ? ¹¸ÇãW¶x÷úãL:uð`z‡Éèœ9wqOV÷Ø~Ðbg3}jÆLT‘F{ïÞ˜šÞé]{ÇN|µœ«ÐØs_“†jF²$ÕâËLu'ÕN,‚Û0¸»àŤfh ú4¹«Uûò÷÷édp©¿Å4ÃBÌe}®ªåÉÌ "%ˆ¦øýº#û×fæém2&_¹ ‹¯ªO棇Ubc".]ÚcuµmDòܸ±á¤øõ]3ã’8æf]‘Ý©üK)ƒóOƒÀÔUêvf>ª\z*ÙÚP…«M¬A#3ÖäO$àoü{|îsoãºc66Nó­oã7~ãE^}uW_mpûö[[†ñxŒH’a4¦zC…³$ªª•òV þ†Ñ5HݸGÓ½A¦eº72œ™µñ¿HIûÃŒßD¤ Wh2ûz83`)C.f¸*)WaÝ̱;©x€îûAFÎ5%ù×3²¯%`^;C)á¼ol"hàe¢ºîøyôܵ×H©tÀ3ϼÁþ~o|ãTÆ«#ŸIîªrÓšësšx¤²ËÇ3œ‡ÿž z¾¥ x%s¥êN7u¬ÕŒCwÊgYRÕªB¦s²hlb~U£g£ãÜÏœŸ^ʧÉx²÷uÍÓòøqzÞdøPè:Gº]“ÊÔÊAr!ÿ™Ÿ—,q›™ÕŽ0³‹1ŽEk0ìdäUÓæOz 'ÌøúcýyòGä–µC‘J¶êi(ÃYð,é©ãe(>ÃL€ëeÌßô”|Æ¿¡“¹ú™[™rJ—g[/qmK›‡ã&¶Ü[ÇCÅ|ŽÕÜCÖ!Ê¡Ž?´K{7†¹,\oº·mP³§ÝœŠ&Y©FJ…K“±SzÎfÆ#4ÐGÈœvŽ2·øôʺ¡' •§¡qÂW!¼aç.ë¢`TIOœì-› ­kñýlemÑ^€ð»0¹æ<A‚*Œ0½.Rè@maÆ`îgᑇ¥eØø^ûUaðMùO:\þŘúù„î¦Çýß­Ò'ÏÂËCžøû©ŸFºQ…ï~Ùỿ {ï,NG¦paUðnO¦lt:Œ¢ˆªã·‚TL ®;G¯×#Èç©æóâ†!žË XæþÔ¡70ÔM“ÏùÉŸNøÄg§,=éÑÌ…tNò¼ûšÃ+\ä›_-ró^lö óÅé”Äq,—È÷§ @½v¿^gÜï3Y]Å’É„r©ÄyÇappÀ¶“çÒ3nÞåÆý9‹uzÅó|rù-ºIQ¾}gA¼þ‰ë3‹ˆÀpˆÑÀxb £0ÄË©De£ìîE±ïÛz<¶An§#n.‡ C ½YZ²zaˆ™N¡ÕÂT*8ss$£ñѹéÔ¸…‚Èx ý¾1a(MæÀé)ªR±Ár©4#H V>UDp]›lYxÒ`B”ì8]×&-­¦…Ô %óȦăļyoIÁ…‹ÖÝ;IìÅ?ì›c³"&ŸãñÊu¼bëÃsH½zEÈ™µ5‚FƒëßûžO©d÷3ÎŽ¡9Õ8 ZØü“æïËGJ_Ç5|çù­oœ¢w8B*®vüÕPËhŸ³Ñ°ÉA¯g“ˆJÅ(oÂÂÊ›X¸îŒØÞhØ$Ä&W¶³³¾nX^æç­”nÍL O²ÛßÛ³ ÍÖ–»|Þ{nÞ‚õGù•ÏÜ‘3K›¼sï _xëü~呯qv}Gnܾȯý?M’Éâ}‚ù2sùÚ§ªçAîx]ÁÕþz2U"¸¯þƒŒ/D%ô±™]ªÃŸ–¯¦3÷§‡bóÃLõy.#÷ÑÇJyæÎfÄâ *k2RyÌ´šªüiÎX˜Kblµ•L…¾D¿_âÙgïK³YâÍ7L&åLPí©A1“<¤R¨5­ð–2AqZ «©<îPƒÁAÆá9~£rK¡0)TjYf%7«¯yáÂ!?ÿó¯óüóoÒé4ùÃ?|‘ßû½G¹sÇe2é™é4•Mù4I*k;M%e–씌\͘¶¥dìv MÒŠu¤²ºc]Ãzæ¼¹¯‘͑̚ÌBÂ4zJ=8rº†ÝWÏŸy™©IÅ墱Ž?…š¥:Ž™u_ºyàžzµÄ2‹#U¶šû‘(dNfIñÎûY•©}¨­©³á,±˜x¤°Â˜}ì&?~“÷Þ;ŧ)̘£T ¼§Šgë235H;ˆw32¾~ÆnØÏˆõ»*¥›vmRÅÝÌü§Éa^Œ¹TÕLß?Ô®Í8£¼j‡eª×Õ·€·ô:I2ÉE.ïjt¸¦*S¡&$}íÊ,ëúìjÇÌÈL6©')Éû¿Eê/û¬¤¤Ä]'£hÐî*¬ÇÏ踙K^2–2‘vR·ímàŠÊ´ÞOÕ—íK%ã/¸á TôwòÃÛ}Ø5égn/QFÐËÍ4€Ú?Âù¨ÛZ‰ B•vúXWgIÕCÁÀtn–2ÍÑb&ëÎM¨¼„,>nAFª£°' wúß…¶^VÉ$I¢—G’A'æ2|‹}}ïXOŸ¢~nQ÷¿—I´ÜŒÜoI/¹¤õÓ”¡ûU(Ú®GùGN„©oš–3ÉgÂÌR&?sÿ–”Þ”+CáE}Ìx«à¯Àd ̲ðSPÿäŸÿYXyê0šÂ÷þ ìVV ý}˜&(a÷aø°ðì”ù¿c¨¾èíûlÿÙ”W~ÇçÆF“ÒÔ°îOY0FŽÛ¾R¯³Õœci<–ÓÓ)~¡À¶ër/ŸGýÓm>ý³Ÿ|>¦ºq2(p|7ÇWÿcž÷ÿ¬$Û7}îŒ9Œc¤4Œ¡b {€çº¸å²”K%ºƒß'Œ"¹9¼åeäömcX[]%'ÂíြñY½lX«ñ½þY¸QZ?9±IÉhdƒ8¶Aóúºý^ªâT*¥¾8Ïæ°&Ÿ\ÿ€R!–j F”UÖv:â„ɣΟZ¹Å©õ6o_få!ïÁᑜzì1 ¼÷á‡?¬n5ÙàüÔšUóq|>S¹Îç—¾ óîoµ_à·_½$oœÁÄkY¿°hƒñˆ‡ÞA`Çžò,êu;¾ÁÀ¾¶¹9s ï÷í±×ëv.g®àËËÖÄïÔ)Ûê÷mç¢\¶ïœXŽ‹ˆ°§Bד ¼ó®½RÏ~„Ï|t—Ožz]nžã_½ñq8ìðùG_ãÊÒ nÝ­ñ«ÿW@dJàÌCmÞò.Æ!LEh‡–¡¼&xU¨-XÙ‹û6ÀÏ— [¹BNF6îÉ—a¾‘#|ÈÖ¥Ûh¬@.„cØïÛ5Ÿ[†iÑ®e©‡›BošUÁŒaбw¶¸Ãb+ô+ê—_°ïM÷!TÓ:wl˜ö…ÜJO`ì‚ï€ÛƒXÖCòX(ÂÉÆCÁíXu©`I"yõÕgX[¹xî›\y´Ë;×?ÎôàäÑä*σtŸ'Ú¸‘|m*Ô$5†kdØœ9>†Ó§k\¼ø››Uþ“!Ÿú±#Î. q¸ó¶Ï;ßÉóÇ_jpý;%Ž ‰‹ïÆ´ËyˆcÊÅ"õJ…6Ê9õ}Sñ<©þça†C&Å"'aˆ/B.Ÿ'>9¡Y.3·²B[„`sƒ½¥5ž¼‡›ðí›MŽÎ\ÅCxqyŸrÜ6ï\fï¸'îhÀ´Xd”$L{=Í&“ñ˜d8Ä©×-„*ЬB³ [[xÓ)nàæóä*ÌÜœÈhDn~ÞJ׊àÕëø£Åv›\ãïíác:¢ÃC™ƒT«D…ñÑâºß·0 bÑØÝ® tÓND½ÎÃÊ}¯‡r ìkMƒ£È&!)dªTR§cc ̱^Š8ߺLJ‡ ìÞ)¬$„nW(—qZÆåSkòò•Mæëcª®Ë;K$Å<ìíI´¾NÔé°}|<ë°ôûVtî,Œ=–ýŸ_û:/ƨ°Æ—7Œý íÛÛPufšåeôïï§2·†bÑzfÄñLÆ7õÙ8:²ná§Nͤh«UûÌéõì¶F#C£¥’ðØcv\ÇÇ6ªT¬Tm¯í¶0™`•¢<ËÙÙ¹¬?ÊKò·.}‡Þx^¾ðƒÇéÜó¯|g.¼OoÔâ×~÷Ó¬Å2äºP!ìÛ 4ˆíÍm­©B5úÃhϺ[OG©ÆŸaÿD˜ô¡¸dçÓÏC\´‰C'±± ‹öî{xb‰â K‹¬HÕ3˜1ì £Z5K§– IDATÕÍK¦p’³ó;ÀM„B ß0=âmûÄHz*!_…éŽíå0Ú‚âdÇJÖÆœ©`rPÎYÂùT}¿Rp¨§(ÇÁD9ÞøöæWá‘sßàêãG¼ó í#†‹R(G<ýÔ» ú!·n¥¡ÍŒdeZúRM>‚‚âÁóm·'p¡èÁt.sQyëvm«ÌÞPȱ®Þ‘>»îÚã"Jº436À/gpíÔݘ™¶~ª@µ¦OÔÍC’ ð}c¤\Æ3"½óŸèÓ¡™t9™±4´bœ“ÙÓ8—‘”MŸ8wtÛ}—ããšyé¥}yúé6ׯŸ¦ÝN“ GÏFòÃm9 ætÝwQµAꂜ-_ê1¹™re `öŽ€e YYÙäŸý³¯óä“ôû ^ý2ÿîß=ÎtÚËD@iy…¾Ì)/ µæ2@è¡büSQüØØÏ—Ä’³EfЬëŠL 2 ¶dl°z¬û_×j|J3]œ9™ÁÊRhÚ ³¬u¤û<Ñ¿Ý ¦"•YÈ$&“Œ•8}J÷ÑÕ5)ëwR†î£ÉÌ¡}Y…R>F «æp’qlÏe¢NW Ó´”ÄÂÐJ|ä#ÎÊÊ6o½õ“Ü»wAv×XU¦íŒ9dY»V÷thVÎHÛTt¿íÌù:NÇ¢ð¶¾Ìpi„ØÌ”hÌÐc- ô›zn´ãw¨SAO§{[óÎh o˜Q[ª*ÙêÎj-’ª'y¯Œ´–1Íäñ“ŒçX‰Ñǚϡûpt?ûJ*Ÿfš§±*E ´£RËR“2ߢÏ>3Yªá0ØEú rJK`®À½× Ö…ÊG¬D{ï [ñOa^:7’˘ EéýLc>£±0Íøtô´ËÔϨBU3·Ý 0÷82÷4ŒoBò–}_Ô§6ÒÇë4ûHkEL‚eÉ4¹ô•3nJOÚ£kPøï!Ü‚£¯ “M8yFß…íWàÞ·‘[ï@4ÇžGý‡B~Ú;ƒ߅èk°ús†Â'TÉùËðþ„ï¿ãфԖJÔª%©‡¼ï8Üõ<¢  X,²P.ãFÜ®Tän£A¿×ÃôYðŸIlظp…£ûmªës<õØ®¼ü×yá¹1+§c’‰ÇßõùÎïòÕ1Ç·‚(fTŠÑ˜^ʸX`­×§œË1ñåz]ºQľïSð<úÅ"ÉÎA©„)•¹X«1h4èçjû{ Ü"g®zT}Þ¼^ä0™#^]碻Ãzó€kæØÄt˜ø9’BèàDp›MKn%íDxŽc;Å"D^àF±ãŸ›“üÒnãÔj8aˆ8SÏc²³CtpÀd:%,•ˆÆc’­-Iy 4˜ ÀÄñŒ’ú7ìíÙߕРª h§än×µßi6mçàà`Ö­¸xÑVñÓï'‰UFZ^œ2äbž«^#˜^¿SÆv1Ž Í¦à8˜Ñ„VÓ_¼ú ¶“¶âK,nÑ9*±9]†‚+ý“¶M.màßëA«…³´ˆé ã;üW¾Äjð>û“Óü‹–k·]{%”rö8SîDÛä$í•J–À](Ømcmß×Áýî©Söÿ…›€ìíÍ Z§O[ÃK—,ñ{oÏ&g"Ö¼p<¶]c¬›ùdÂÃ#(à7WøÇ/]ãgÞ ŽËüæwž”›ïÔù•çßâÒ¥;ìïâ7¾ø›»4§BîÄB›¬³¶í4{¬×v6¯Ù;EÁNÛúV”ËÐéBn ñThå èXÇêñxm(õ,wÃñ ŸƒÛP_‡‚=W)ä _€^Ox° M×v&:C«µ»½]Û}ðjP~Zpæ¡{ ΡP˜ØÀdCηf‚n•@è† gl<1Ú‡\ß‘b#,TaØÀ¾ÛÄ*¨Ú’Öt ] xû ó.çNý€çžo#n‰;æ$_\æêcožÿýF|¢AdZÙŸ÷H¨.È`zöNí{Jȃ€‚3§NœŠà›Œ¹eûwØíŽ|«Je<­B—3 Ö´ WÓÊe¤O´êêdpøi)mIfz†'ö]î6—ªŒ·ÅYÝ÷D¿s’yZ箵¯sS×mî(—ÄdàL–Ún»ŒÇM9~Ÿgž9áë´Û-$…·áéxR…9}âOõ½¹ ðÛÑ9ØÓ±¦OÓ8+{›1ëK+× üÆ<õÔ{òË¿üçT«cö÷Ïòk¿öã|÷»ÕL¯¿6³öe’*÷È f“ÿ¢]ž´¤;’Ùí<äUÌHÔîëq”õ ¯ò0$:=™ñZJJôMç4—OÝÆ‘Žý|†Giµ<ívŒeæ!™îV!“pÔt-UЇózŽ+d'‹ô{©¡\ÊÚÁò ¦b¬Ô³ÄÓnB)ãç‘ò D—–̸@5ýß&Sÿø·©VsüÆoü a˜’Áïˆ5µ›h¹6Mpîgº$¹L÷èHËÊ'b€›‘$:Ô÷´3•b>–õœ¸§Ÿk鼦E‡wuß%U@«dLh×/Ê$ACëA§SÐõ÷e†ÅÎt@‰®–•ƲP7IKÇÿ5 Æ_ÅÁx¨å0Ëá5¸—B&€Ok0.3ªH —3ˆÌ<³¦  rZ/ù}_E½dl§P\mP•2·–TªªŸK=Ë™Ú@^¹ áCÄæ,ZUnC iºŸ±¤ fp'É’ÖÕ]r™„£Äìœ×zQ-3†t~Ò¤&•zàÞw,$jù/ÃÆÿ ëËà>Šì]·¼E7ƒÎS1Ê ©%Ò~Æúf˜¡IUôRVï ʪu[» …ŒUÊ›ðæ>ƒ”Vaòû¢«*PÒÏ$Ši÷B“H©üˆñ!™dÏŸ5\%Eº–ð¯Bî4¸Ëà4 ýEd¸ 1òb5™–àÒOÁ‹©?k³Ùͯù~Ígñi‡ù¿k`É0¹pôo~n‡ˆSöY7¡ÔFcv ¹Y­·Û4Eh)n#—ãVu»âŒ†Œý"ã||7bTõÙ/”^^àg_xÇ_òâÕ)†înä•/Íñú+U>¸V£ÝIâÝœƒg"Š®‡—ËŒFbºã0Ì划„cßgǸƒ}_z• ÷ã˜`a^µjÇÆˆÓl–J¬Q¬VYgúá”^ì³¶qêü˜kÛól÷jÏËc‹.ÔïËûÇ«ÜßvEÆÈYÞƒø>fwÓjëâŒF’%†x¾iµ(' ×Åñ}ÜB|.‡¬¬H\«!ã±å]Þñ±Ó)±ëâú>¥\ŽÒ½{äÛm<ñ\³¿©ÕêuÏÃNñÚmÇÁsbDZ‰C£‘ò0¬u’Ø ¼Ù´AsÛ×Úm8§¤ð¹9« e¾­šPµ&HÈîq‰+µ-ÎT6øêwÊöžb ê„Ή0tøØcG\]Ûæµö'ùZï9ž­½Í‚7á{{§‰+e¡X°IR^‰Ê¾',¯aöÆ<_¾Æç/ŸßÛ™/¼õÝÞ)Æ6CÛõ±½ãØß†=–$± D>o“×%£‘ý}]4ÕÌï›ß´IÊéÓpõªM:––,¿àÁ›œ pù²M†67­tîÎŽõv(• ÇGB¾„{ú1þá‹7¹´pé0ϯ}çe®½W’ôÒu.Ÿ¹N8™ã÷¾ö"76c¡~Q×& ’@ï¼1Ì ^²¼’“c+ÔÁ-ÃÍHjÖ±;J`8Yüs–0œÚd¯Áâ%èá  Nõ³PÒ€LòpZ7ó©€W’t#èl÷!ô ê+0iC¸où Iâ‚àx¶›oA\?g“ƒÑHðÆö®=nØ}y‘àuìüÆ„c{\ÝüÐÞѦmG{C ÇöîèMxûõÍz™³—n0߈åõ7ÏñàÞœ<ùÔ¬®írÿÞ GGÕLõ:ŸÄ,€iƒ;±ú~qÏ2]£Í#íc;ös)ÃO–•U˜BE0žMúÆGú乣峮Ø*tœ±f­jÀµ“!p§J2 úÙ[B÷ºviÒàeHà‰„'xO¨Á^ E:›‘×LÁºiù)…é¤OòŽ~65Çse&£9ƒsݽ;/Æ,påÊ-ž|ò.|°N§ãdb˜j¦sq¢OÇ’Ìà?^j+³À´”z¥nÒé“]Ëœ‰s’ϯÈ/ýÒŸòS?õ ¾ïóçþcüÛû½Þ"èL<‹ lYP;õLé.‹áOU˜<™iA]³,®¿’144©+´ŽóD“X£ëR“ÙÓy$3ÞG.c¤gd–  ãÛÖí´Ÿ×$ ¢‹ÌàsWtÿmýÞQ†°_Q”fŒt}ÂL¡¬”Q{2•`ÖýÍë¾tΊúúšÑcƒ¯Û:V¨ßy…buY^Þå'~bƒ££s|ç;ÏE›º¿-PWôgG/ÒĤ"3¦k”)!›ŒtñXç,íhÔ“C¹Vó}'_·ËŒ¥\Kå¡e– ¦ð¿N–^ÏG:'sù¢4ì¦]¶Lg,¯çÕ¡Îk˜‚¥—™jÚ‰LíNCD!H¾zæ4PtÕp-VIT5Ä{H529WÍÅ~n¤·EM@d_¿³fÞŒU"6¯2ª‡ºÜM5“ó~é&¥ ÒMu:$í\Tu¿±î7—¡¼4ív%­Cìê¾Ûj,—¨ÎǼîÃÑqùjÈ·§r±©;ùŠ’ÒÇÚ]èØm§¦|8ºžJÜöBØû.œƒS þidpŒœ[A†%h¿ ‰XØÔ D%|ÅË$6) <…¥­Ú9•¶}옜Bšzú½@Çáf® + kŸÃ¸S) -çDï4M«o"Z—¦rUú³N…xÚ gèJIMVºC¤ä×Bò q Hñð–|Ü–ˆ9Tž€Ç~™  rò>ìþ±O~ä°úóyBd4Í1ùbŽû¿Ë‡99n–%1ec$7Ñvé% ãˆS­â l²!ÈÑT` Æ7^˜c!Þ‘ÖyŸÖ§rrõÓcùìOôåêS=)=1nÞ¼þýyçø«¾û‡ÈiKêãXŠG;™JÆ’›N%F¬år r9|Ç‘8 éŠàù¾Œ‡nK2Ê•|^(å ™R«I¯ß§P \(ȤÙ?ŠdQù ÓZ G„Ñî®L 5֟γZØ”ë‡åxPq=³ìÉ“gvù~gQ6º«x»w%r|LƒRI$ cð Éa¿ô5ùÄÚëâE‘üá/ðÅ{O0-ª­§ãYHRÛ.E¯g¿Ÿ$BµúP˜ry&»;™XÉØéÔ&!“‰…75¶Jßï ÿñ?ZS¼—^ΞµÛN;+·oÛädiÉvvNNìüärÂÑ‘0Ž…b.>+¿üøreîu™L*ò¯ßûinÝÍñ¿|ä5çÒümÆã†üæŸ\”wïõ…ܶa0v…bI@ˆK0JëpÁnÚS!X&á^[HF‚?ª*™ºP¢±0ÊC1’ž0 …¼kÀ e¸ÃB›–¡è ¹’0£m!êCÙ…œ7{¡•õmÁoBÉÆ=]¡T’âcÁ™Ú„"Îiå"æzBìÃħäXcë‘àt„8’–a¥)LŽ…±g ÷†$H lÚÄ…‘àä…¸"D#!ò„dMÈmðî÷NËÙ‹®\8w]g‰÷ß[•µu_λ!‡5nÝJƒj_MÇ*8;j &¶gŒ ‰UÌŠ‹B2µç˜—÷@¬ˆ/¸-ûÝÜÀšö\M„d^e'CMŠúw“™ôh¬üe5K%MC îüLeÙÑ1ºêYÐÓmd«é¹Œ¼©¨¬­—©\dík0_WÓ¹¢X\ûTæÔc/ƒ›¯‰U šfŒÿ Enß$I&òøã¡<ñĆ|øa™nwQfØŠ¢~'õRX×íø:þC î™òa”š j— -3©Ó©V„œ§žÚâý£?–S§nK§3ǯÿúGyõÕ•L7ÁÓÄiG,65LçîDË¡©]ÊM‰Õ‹$RBo ²‰Žß×ùpTrøHö4]T‰Ö]ÝVU×w¨Z-®ÊšNSP³~Þ«Ž5ÈÈ ûÚf²È…Œ4ëX£ uÝo^K·û23¿«(o8á ÿ`=/LÚTŒž…û°¥žohG ¦Aû\U¡V5P‚)òÍ=n¾¢’¯…ÒóíÔÕ;£¥ó/z*¯Ëúy(ôIr0ƒ—ç4fó"t¶¦›â}™Ú'K¶VæTìßFïZ… ÄÖ8OVlòbŠZ@b4ÓPWòH==Є ®·ŒdéØS#ý×Ã-Rwª ‰@~½s2Ä¢wI†ÊÕpKü“+ ‘R©]#×Þƒ©½Ç¾XmaêÏáÔ7<뙵÷g´.b†äð«˜Ñà âœü —Æs™ûFâ—Ť¿šÉ•o9r¥æ™ÜÍȳœ¬Ñq˜Ü÷ÇT“çú¾ìVëôæÔ¦­U‘ó']óðsFžÿ±‘<ò¾Ø\x䘋—fMö¦uscw™/Dòïÿü¼yçæ×c6g}q»u3ËRü<?Œ;›áÃr–Y­ ÏãÈu%ñ}éDZ,E‘ñj5ÖëæÔdBÛîW«fŽ2¯TL\©ÐLSÃÁH›V·‹_«É4Ï¥æºÍçâL§fˆ/>šqvcÂ[¯¸Ü1ëøí–ø£yäÜ¡‰¢U¾‘]’ìx¦SqšMq †!îÑnaÂPâZMrÏéV f3&µ äÌ2Ç9<4­ý}œ$ÁË2 ŽŽLg8¤³´$õÁ “„¤RÁ‰"faHEø•n—N¿/-Ï3Í$ÿÖ--/ã¤)9˜< 7Ï%lµLµÙ¤–$à8’//&뛑¦j"Z­JR’,`S`+øijÈ2C½n}*p=æ¾üðÉËf©+|ëî Ñ<±†sAM6ê©ù›]•ãQ‹?;~–ÈK¹y°Ìó›÷eË¿o^^"Î=ØÞ‚jiF>”O¯ÿn~q雤³:Ÿûöûx©* GšLì=6ˬ1ß½{–7QpO66,< `kËp|lý<ÒÔ<ðó±¼Ý®ç†»w…7ß4œ;O?m¬VK8qÂÐï®^µAècY[·„ƒó@™JÄŽk6¶Î›Ö©“òó}‘ o’ÌêüÒkƒ›—'ò ÿ¾9¿²Ëõã þß¿À½Û»PM ® “,§¾µaå4L+p÷¦)D¹ r X}4‚Fy Ì&°ÜÅéÕ…¸!4RC½ Õ DÇBkVkЄn`˜÷`¯g卑Š0sr‹ê[ÛÉ ü2G˜{†ª/¾a~ ã8Áq ž+dJRtÖÁ]‚ø*ø5 ÷rµ’œ9vtbUØõs²Zm˜5 óÁ]†,¶d xg Nߪ@eQ46žôÌhz’Ǿe¢y.¯¼ü˜ úµü½í5<ו×^Û$M Rj<ª,¬äå‚3Ê 6qŠUQ`ÌÀºïšš±b]ëó1òLð«±vRU²ñKÄç¬æö 5*•­6dQEŸ–¸¡XRJÓvÄ’RRU_*Üž¯åZmUo¿Ä¼¯æbI¹÷-VïÙÑ๧£QŽÈØ1Ô|¯V2¬w¸v­k² žx¢ÏSOsåÊ)3njÇeX’P]V̹§Ç½£2½±,ȰIIöe[ý—шM4ùØÇ^7úÐ¥VȵkçŸùÌsr÷n-YËQ8RZ¤æƒ-]ÿcµ\e^µÂ¾®Ál*P×õ”"¨Vã:Q™ÖX¬æuQïaÇYÜ]ïÍ¢Ãd5Ãc×)ÝJjOu³àPˆ¿#=¾£IÃFnǺ<¤îc“‹™°©ž+wõï¶î}O•‹\M¸Îèû35<¬êÿoë~eg ·ÑÔ²Fuc“tÎEl¨Çr±œŠ‡Œ=ç§M~ög¿*'Oî˜×_?É׿îëµpÏØäª€î °uf÷rh; ŽÃHà@¯áŽšóxœQ(7¶ƒÖ•…Þžîá’òX¦Æþ¾ Ü4v½ÖtòÜ®C¬ûœë>lÛšŽ¿eÀþ¡ž3m]kG»Œ¨:ÛNÁ»06©½57êïÏ;¦H0ä¿A-ê/%ªã Që)5øÒR€œég‚EƒM|í hWCêMŽÅK‘«h•]•˜åp¡­ mnÊI5}mÝ^>²¥&t]ÍaϨiÜj‰RÖ°hÛ‚Ã@®ïïhWàt ú¥°*i•.‹X»‘}SÇ^v¹¾± I!ÿÚ/eq‡:ç5厨ÀŸ ^· .4/s¿f×Î[!HR¨GÉwܵuÝwJM¹ý…Ó6Áâ–&ªÐ-­¨½„<ò1ÈÈøÿw²—«h’¥^³Ò( æ%gõâß׆\ª¡]ŸüŒç‘Ö`n@ÿŸCv ùj|pðN•[/W¸÷k¾TÞv8ñXÿi‘ôdÎd_$û‚Gïw=®MDvk01†YQO*A I½N-ð‡ñl*W\þ0‘ŠïqêYw?7ä±÷ÇòÈV/LÄmYTaïŽÇ+/_þó6ß¼õ0¯îœ“þ¼!ÃvËømOH¦dI$'ú¾Ïx<–f2ŸN ÇuyÓÏ#w]ñ£ßu‰<¤íûÔ|ŸØ|iµ$N‰k5|ß'L&GGR__gµÙäHDêý>žãàä93Ïe¸;”•s5ž|hÀ[7êܸ_Ã?¹)kÞ€§¶îÍ+¼?"N4ÅIS †1Ä®Kwe…te…|6£º³#y–™,MÅÛÛ£ÝlÊJ­ÆÚ`Àd:•^·k2Iêu’0Ä C"ßg~|LzxÈp{[&ž‡¹{WêyNc6#ÙÚ¢beW­ú\­†i·‘É„Úx,áÆáhdU‘GÌ|.lmÙ¾€PE‘­Ö[YW[åßݵÅ[µ‡µ5Ò‰‘‡j}N¯ÜáÍù9w¼\¸—ImŬûGòÁÓ—ùƒû1jn355ò®õ·Íîô„Üi? u’Gœ»üìöïÈvíŠymï9ùìë?ÄmÖ ãÂ;W O «zµ³c¹•Š…9Aáÿ!¼.F# ¬ù`‘„¡5Ë Û±.ÛÂÅ‹–$žeª¦´$ܹc˜J~X‚BuÊ~ßhd“°»w,´ëÔc¬v3ó gÿ“œÚ¸ÃåƒÓüóW?Èá;ü“ ÖvÍõãMù?¿p–äÞ‘uÓž5 çØOmU¨7a« ó>Ìî@} Î@3€?µ°©þ¬nA³Çc»?øÖ‘»à»BC<ƒX¨®C¥%Ôk®ÂÜŽFVõb<³ð¤ÞDb±f}£!LÁo‚ÄBX·ŠVƒcëö½CÅ"ÇϱRÂ0…4°Oç#8-H”sæ ™š«Â$²ÉTP…è&"dKB0µr¹I2ÏvH¢™ª5EBVg6Oyï\'‰&òâ‹[§§yøác¶OìÈ׿~Šñ8*ùKlÛ*¼sdïfâ Çô nFËfy[0=[zËkbŸ2«-ƒIV ŽN¦NëCpbû4r*à$b­mc®&–ð,²çðJÀ-Õè/žÔ Y(ä$3 àÖâ\.tÿÅ>•=}¢‹9³’´êŒ‰VQÝ7ò R (¤9KšŽs©ÌÊk×&’¦«<úègžÙcggKVY8‚¯êÇzœ#­à7K„×nIM«]2ì–¾²²bøûÿ}ô ²¬.ÿîß}D~çwž2Q4Qh‘¯£Û…—,ðI‘È œÑdáªV sY­míj˜’ PJ_‘EpXtrî²2²4v30 IDATX³Z‰€,šÔ¼¥ïßÔ ú¾ªwµK>=~±*\°‹r«§ÉX]+à”ì@!u¹Î厮[Á=ÁBm[¹+a|¬ûÓÖj{áéRt&Ú…ÙR1°­j=+ÑÑt¬Û@‹J%Ÿÿù?‘ ^åîÝ->ûهȲ%Ukj•¾o ù Hç|¬–Á=~"‹óbE× ¸VФ}E#ÓŠÎÕè±|UJ+àyÛ,ä„G%;å¨pB×jF!|º”6¶VÈWÊUHJ7Ôh²H|šÈ†:ÂtqµÄÉiª à:ð ¾—Lí‰cñ=ºÍwwó.h,R\*‰B¤B 2“’F„§ôlñšDè®B¥‚ÝKŽJ݆HƒÚAÉ„//ÁæšÌ(RSMv5 åkå#(—@<5ÑÛ-©Eu…™ò:Œ¾¾¬Ë¼Wr».þÂ{£pò.êt΃á9X me®~k%yßÝ7`r–G6žG–ßm­¸gÖ^b©Ûz‚ÔžUÈÖÝ5¿‹ê,:Exš(5)þ_‘fú_B†ß\âýÞ‚r7U (Q.GR";:çℚ”i{š °&~[?‰´ ~æß‚ÑÈ­—‘ùסÿ5CïUï@Î˹_Ȩ>…L£\†¿ί9rçV›µŒ$2MR&®K+h:Ëá,åývSnú¾ÜJ}¦³)—žyêoMxä–J™ÌÙ½^áÊÕ ùÚ+Û¼ð¥ßøv‹Ù›ó¬‹T„GÎPOFÒvÅD®'¾1ÔÒLL–Ñ Cf󹌪Uœñ˜ætÊ¡&ˈêu¼fSÒé”–1äµA­&Û£÷]—^·Ë4ˤÒjIº¿Y[#h·I§SÉk5é6yάݖÖhD­R! &»;ÃD¼ÇVxîÜ]Þ¾\áZ|ŽFß OlíI“¼rp–¨Ñ!˜NÅõ‡©{ìÆëòÌêes¢“É ùó˜i.?ظÉÿxâ7¨º=yõø¿ãs·~ˆyŇ–o¾eùah»'VÝɪb;g»*ÿK§c¡\Ö‡B8sm§¦^·]›ñØVÔUrY[“Æ„?lsïžM¢Ö×…Ó§­BÔ­[6©é÷…ÃCËÉS¨·¡¾.?ºuƒŸ~ô¨­&¼vó>óOàNöùÇ‘í•C®ôÎó/þÓyÉ#ÜPˆZ¶R_7ÂV ÎoA+€£=ËqpQq*ôíót}æ±MzZ5õJ›Øíp•ºÐÙo,\Ÿ@³µÐv.¼u±f²Àî®0YXÇp´ G¡ÔÀL-̩ҲϪ±Õüé1 ¿ Î «à:ÂD+þõ*¤Jhn¶a6‡|j‘0;´2´ÛgUB7ª%PO3ŽìþÅ5ˆæVÑ)¸Ñ¡…+E¾í §*?é-‹È}âi…çžß•ngÌ›oÒï­Ñj%<ôÈe‘|…7ÞÜ*i÷U-,Á[ùX§AUH| Bׂ˜¦`€|N`ûÛYÜ.dS±=u%Éšš- å¡ío[‹ ë–çg“j ™éOA<=…šÑÍ’aX¡ÇŸ—`D…¡XAD¾¯ãž³P¾¹«AÖÕ¼Te®k]×àxPøYèwS  &%ÞGa(g ž‡Àׯ¯E'xôÑCž}öm¹s§ÅÁÁID6´ôÖЀë²þK…Ü®,¢RàM]˜ÑîÇÊJC>ýéWÙܼÛò¯þÕǹreMÍÂî÷X¡)äi 0 ƒ?  gšTœdášjà·§kº¬INªÉÁ fo)zWƒú¢+´­%DZþî¦,| R~* /•¬ÄÁ)T’ *‘źÇ:îDŠ ÐÄu ¥+‘¹îPŒ)ÔªÎèß‘ï›zëù°§‘”§‰e[÷h®ëŸ)§b[%\Õ˜}JaµRÄ×ÖqµÒä`Rr/¸¡,:vc‡£ûTt#‹.H½¤þÕÒó¾€71Ñë"Ñ9žÔµÊ‚‹²¥ëu ¶’i²PpNöõú˜–ö¬€ñÕJÜŽ¶Ž=<]»“zÞjr[z­ï«Ùäµ)ó=’þ[:å¿¥ìª FQ½.¦ä—Hß*ù*µ’X]ªø|íPHVê´5H>Ò¿¤4tùÆ µ(i,œ¦EÕ“˜ñ,¦Åè±6K¾ž¹ÂÁ’…w¢¨Ô« ôý«ú™¹&«:ö¶ŽQ‘tRÓÿ; 7Kz…oéDáSJt/È¥Žú¸5„ü l?‹4NBó<$'lãléÎâv¥’±FÔ¥¡Áþ…ïD¡Û •Rש&k”öóôó°ñ<’ÁÍÏÙ× ë—#MRœ…‚˜õš-”ÄÆ<¨ȼD,áZš`ôÁ´O!çÄCÆŸƒáe{IÏ"15ã°ŒáÔ'#Úñ%k “7…ìw*’¾ä³ã¦rÇL™ø¾¸ŽCËuYÏsº"$† &Ü:ž0 –Þåñ};ãâ÷$\úCŸo¿¶É‹ÿ!«o´¸u¿#Õ¹°JN½ê×<âPèomeSדA½næÆÈ$IhűLÓ”a³I{8”=`¹Z¥:#žG>³i­&µj'H\ãyÒFYƽZ O C!MI66ð²ÌÞÆk5Yv]먽¶&Ý{÷À÷Éf3Ö} ¥óî%ž;µÃ·¿n¸1XÇ¿´-Ù`ÆÓ[w BáÕÛø•´Ùw2!7†ØqðîhD0Ò‘Óƒ‘fSîi*Æ$Ëǧ×#÷<Âá°Ù´B¾ÛlÎf¸7oJ2™¥©äaHäºÄ• Ž1$õº$ŽÃÔuÉÂc &M…f“|6ÃT«"•Š!˨û¾dGG$gÎXˆQ³i¡GÓ© êçs8sÆî–Èm× åhÖà¹å·X÷wxçà$ƒa&„ ¸)ðP£Ïɵû,‡U¾¼‡yµ*ß\1+#¹=8ÃjÞ“Ÿ<ý[¸2ãÅ£•_?øagÐ?„·Þ¶¤íÝ]Û¡Ès› ´Û ÷lß·Äí €S§¬ºV–ÙäÈØß·¦zyn“¤454›¶ƒc½=„n×v.¢È:ZG‘pò$tÚ°`;“‰åª ‡ÂÖÒj@e•å†Ëß9ÿ ù¡‡¾MÖøÊÍ'ùõ?>E{v…ÿå^f}uÊ;w¶ùÌ—#KÄaÃ~_pç`¦Ô…“§mRqëm{ÕG‘5ÌsÔ80¬ GEF”Œ¼² ã²àæ°¼bc˜9T+Bë4Zà'BÕ…J"ÌU£.ºgÀ¦{CØ=†êXðÄ*:™ÄB™ÒÌ¢7È…$ƒ|&‰MÐò%x[éÏf–Cáv,ÂÃÄta2w¨Öáô†=gŽ H&TW,|*Û¹ÆöiâlB ¾ÎiÈv žÛ»ohO¸+¸#Hsžz÷€ngÂolÊÑ‘à{'y≷$Ë /}íÑ…Þ äbaì‘UÕª4 JÕË£®wR³Ð+”»‚;³ð0“Y¥Œ43ÌÌ]Ûc7.˜kz—¯èk3Áœ°ëë:6ÑÈ—”ÄY<±×50:ÔŠúª>Ig… “,ðßhà\+i(z%\ýLƒö@ŸØE@)%‚u!TŸ– IS}ªhB±Z(OÉ"¼©hðØÒ¤eü@¸]¤Ã8rîÜž|ò>7n<ÉñqŽˆ))í<‡°Ð[”¥¹²«¹äVreȩ?ý²´Ûc._>Ç/ýÒ–°Ž¦e Ђ”]$K]Ïe]‡¾ÂЊrëÙ’$î\«ÏiÉëbµDö^-Ö[ëW¨mÁõº®‘Ñà³pëi²RtS–K憅tÌ ‹ŽVá°u,J‰t#Eò8}<¯GµŠ|àϳ¿?c6›ÉB gT’•)ÈksB×&×=©–’¥eYHØÜÛ©ip+p u­vICs\îÏäG~äóoþÎm¹råyóÙÏþ€*LGºÿ+Ú±s•ÿ°TrÃ6€Ÿ)™ FºGk…4¬&cOá©Ñ+yeš éOaù$G ‘ëë9(e, u¯\n ST˜-õØ…íq_6ÔK§•{³ðqeQÞÎëµ;Tê]÷ÿ%ˆ”üˆÞò=ˆáÅ߯Ñ`SaP 8Œ¤:Ýxa€'Úw-^“~tZ??Òÿ«”¨×ÿ µf‘ ¤#ý¾žþ+”Iá9Lð­°ëkrX’X-kY´tÜ¡MhD‰¢¢|¢ÂqRÀ|Vô4T#;YÒΆ6”¤©|’ÂWuG¿£RJ¤&ösRáýÝj¬ÕR¯½‘Úà6‘úÙzÒw?Dö÷íZn)ìhg!¿+ê·!¾vi´qöÀÌp¦û°®ãX]A.|Ürç·@ö죨§ˆTK~®JÖÝŠª®}AúÖ[D%н<$Y~ZßÜûm‡ã`ì¡)´%éXY3Òü„Hå‡<â9úí†dÿ!ÞqÊíJ&ÇC×ä´GNæ9k‚x®/7gÈåYÌäbU¶žÍyïGû<ü܄ڶ/“IÈ7/–þ­‘›×[´Ïž“íù˜ÎJC¦­÷}Ÿ,NÄ*í6¦Z¥}ó¦$ahœZÍi´Ûìæ¹D"â5›’Cs<&ªV%T*džG–$ «UY™Nga£!ÇÁñ}&aÈN½NÍq0ƒÌ}uUòÁ@²z•,“eÇfS’Z“—/Ó¬Tð³ŒÈ^â±|yö±¼öu‘kÇËÒ}ä{“Š<¹rS#þ¸ÿnæsƒ×iKØï3IÏ“xsS\ÏÃ=<Óé˜N§ÃÜìîïãÎçT]Ïue·Ñ0½û÷$pãX$Š„<—¼Ù„8F@d4‚^OÌê*¦Z% ÆcYõ<¼,'M ² ¿Õ¢2B Q’/- Y&f8´Ü‚V ‰"É|Ÿ¬Õ’,Ž%šÏi8ŽÄÝ.y£!ÚÉz=Ë[C« åûpåŠ%:#ø>ùÞ±\¨Gr¦{[zÞ2WOŸÚ³w:áû'ä¯=|Àé“Üó’ýà1Ò87—êWœ§¼k<Ò}Sª¾#/ŽLþß«—ÀôlÐ?ÚŽJÙbcÃ’·Áv*šM ‡Ri`.^´Éã++‚ˆ°¿{{BµjMðšMÛ±h·EÝÉ-‘»Ý.Hàþtá‚`ráö={ÿOat,LgNÖèyG.mõåzòϸ°}á¨+¿ò÷ò•?iòLõUþÁû_¥ÑLxý[m~åO/Z½~$íCÕ2êË™m º{Ç6“‘àÔ,,ÈxP© q’ºÏlÐÙ€»÷aÿV¶„ÍS½©0‹„VV«Bǃy(t˜§¢΂߯uÛÅðÇÂd&LPQ£DP=ñ\pçB É܆¡íZTEl²"TV ºþ±õïHÈkÐ\²ma§%¬mÀ,FSa6škàL`œÙT˜Ýæm-¬G‚{Iˆ¾Þ–­YŽI!§šWìÞ ùH.\Èäì¹CÞ|}Svv3×å™gú4;GòΕ³2Krö¨ …\„Šo“­ÜUt¡Û— Ž/HK0  ¬½äõ’êS¿”$ÔYààC èj΃ %ï f¤~ƒŸ*e¨Pu…;ŲàCxæ/J¨fbqã…ët¢U÷ŠŽ©¥ÁJ ¥¤} ¨Œ’`«„ÎeÑ)¨–ŒÞ .É‘èU Ü ((f¬ÁÖik²È«WmDðÐC#ž~ú ¹}»-‡‡5=NA”(éx[´B߯U¸HªNâ›<úèm~æg^dyy$_ûÚ%ùÜç¾c–{ÄX ßVå0<{ ÿêèz ÅVýB2V÷`KÉÃEÒV×(§¦IÏ Y‰—(Q`õÏ\2¼…jÖT×x¬Dë‚?2Ñßmê˜öK¢'”î*–ÿ@£”\èy=·bàH>ñ‰“úOV>üáréÒ“üÝ¿û!ùä'ßÇ«¯¾&‡‡o*ܨ£IáLi4-´ ²w¢„Â_ ¾3M.zŽg²pH ¦•ôt.¾À ‚@>üá¯òã?þ’ãóùÏ¿_~ó7¿OÒ´ •§b92ëÞ(|j 9YY$:¦¤¢–êš.ËB!Ì×®U¢ü”“² æIÖ–~çŽ&+š°ê~V”#ÑÔsè¾X>D¥`ñjç£Hú ÏMs=3½öÖ4É0zÞ¡Ç K²ÌÅz‹½g\ÓkÄ+9­ßÂþ·ïBæ6ßå‡ïxßw’ÀÍ÷P Ê˹ª9%Bw±ã9ÜL‰‰ K¾ ­úG¥÷M•€]ü™Z/6ŽìgMËþ°¡ŽÄ6yÍŽ­ >h>qM×Lh¹"¸ú· ‡‰gËŽ6ŒS­C))["{êæ±VêÇ690[ ŠKÂn…ñ_bÕ§L[ƒñ\Ç* ¯ AÞ²¿3%Ó¢d0ý ÌRˆI0ñM¨\BêOCõ,¦‘aâ}Ln‰Ã@×oÛRÍŒz{Dq|›˜˜:PoÀ™Oc¼²ÿ§pü%›œÜZÌAšú­‡I¦œßÖÀ ‘5£d{£p¸â³ÆÕ®F¶ÉOý$&`öÝIDª"TAŒkÚïqLýçnaÒ[0üLñ[UvÖ<³Ói™1i–á{+",{®™Uªæö85·cc’SüDÆ÷df.< ©çs÷²#/þÛ™yñ;Ýëš Ã±YÈA«Éý `¯×—7ÇÜYZ2‡®+½Fƒžë2kµÌÔó$MµßgyÙ„I"©ãƱñÇÄËË´ÆcR“G‘Ìæsc‚@*aH­R‘ä«ó¹©T*&‰c“ÎçbZ-×ש×ë&=:"­ÕLÅ÷?›™ªçÉé4¥âºÌ»]㦩yèÎc:†aÈ·Œa;¦Þóôù¡‰Ž¹:Ø&_í0O=óüÉVª¾Ö—L±qãˆüôiS©TŒbý1qŒ¤©„gÏÂò² nßÿòe¢´Z$aÈüøØ¤y.îÙLÜJ“eÆcÜÙŒüäIØß7T«å¹q®_Çz;ȤÑÈß7~–YÚëx,ŽëB§Cž$†,ÛLŒxžIëuãÚ€ÜuŒ¬®š4ŠLÖï“T*Tº]ƒˆ‰«UÃþ¾!I¬i\B¥bè÷UV4³JQL&† 0£çVoTB¾6ܶÙóÄàä’uNq^â]'÷x¼r·†§Ì›Þ{äc­?7?Úþm¹—æŸÝü˜ùÊð!Cen«Ü‡‡†fSØØ0ÌçòÀ,°Ñ0´Û†  ynIÜYçÏ/ÜÉWWí½w42ììØîÄÖœ8aX^6T«†$±0£¥%ƒç&CÛ9Ÿ<)L'0ÊL#ŽùÔ¥¯PíË­{¾ac ªk¦UÃ|ø‘;|ô—©úS^¹ý„üêK™û¯ÏÍžý¦|äÙ7¨89_þæ9~í¥ÇɃªa:†Ç¡U‡†Íº¡v÷ ŽgH3¡Ú6¤! ,/¡73$$7T· ³¹ÅÖyzyKk yb8Ù2œ=-DsHf˜O ÕC=±œ†,7L {±aŒk¨×„þ¡!Í ×:|G2Ïe0Í µÀPï(#Í7̱!­ä¢å`äChíÂjÓ°Û³ªe†a4µ\‡AßN KÛ°èßú±l©éáÈ\4Ä}Ãüœ!Kdb“’ÌÉ웩¡ù÷îËÕwÖ¸qÃŒ9s¶fºôMsõê:;÷OA%7®ýA óÔW”¨Y1¸¹õ÷0u0-ƒ™*ñ25È6„1¤•oàPñøM½;*é÷Pƒ‰¶šËeƾfì“aÝ~§…ð¨’N_ñý#cß?Ñ÷Œ…ówAØm»1VM uc{ð6ü¾±$ÒŽ!Uµ¢X‰¦™ˆ88Kðu}2]uË9ᆒ××±ãp´Ñ>r®];KžÇòðÃûæ™gn›[·\sxXÑq;:æC%{º6KFC}q>ô¡[|üã_!Æ|å+Ï™ßø÷(ù÷XƒûŠtN¹Ö×=¨ëZ6Œ%ÃOUiSIêžv*•ˆìª»c!eìË‚4ÝÑušéºDð&ÔÓ$o ºÞ5%-ç:†"I;ÐÄhÉÀžîcÛX‚ñرkÓ3vl¹±yÕÂFYÇvÕ|üã3ŸúÔÍõë»æ—ùWùÌg~™(œ?ÿ¸ùÄ'>`~ÿ÷ÿ̌Ǯեƪ9š<9j°¸Šm#îIÉOCãÎãÜê=í<®µë¹’óË]°©ž¯U+´Û«æÓŸþ óÔS¯2^䳟ý8¯¼²!p¤{[3Va*4pàXï _“èPãå =NSñqhìûÚfQK½~Š5÷õ¼Ÿ›輫ª^F;+‡º.™&ú…Ûnn;x¡v†j.¸nF±vùBcy)U;óõ)pEš¸ŒŒ=cýýª6·JžÝ‹¤i ¸öW’¼¿[÷â»ýÿ/Áª-‰ªIí+ iªäl•Ùe¤\EòIa-²ZâfÜ-A~&ÊÁ(øž*7­êñuA þ´\òåhéçæ ˜¼•u¥híè8–‘ê÷!©‹Üý¿‘éëP='Î!îcˆ<ŽT4s‰úv-§–ö(™vt´‰&5£Â»¤õœþ‡Pi"GWàο‡ã¾­0/O¥têš8 Ø•„š@ XE çve"M¨T®¶hZÊÖÿ,2‰^Õ˜1dFð+"­¿žÓùñ\ò,—ãËŽDŸq%:NÖbFi.GâÔªUšu®E¾Üò" È—3ï›Ë£?‘²uÖD®Ü}Eä¿áÉ·¾ÔÂßE¶GÇ´ª¾¼½Ü•—¢ˆÝÝ]†kkLAjó9Q­&iµ ½Õåe¦y.‘1Œ\Wú½žÉ‚@ŽVW©Ç˜éTzq,K­&Ï \WŽƒ€Út*‘14óêu8¯Ù”$Ïe4R C&QDÜhHîût[-q|_šq,ÛÀJšb¦SRß—úd"-ËÍ&÷“„¡çbzÙÚ¬ÈÓOŒåà–‘Ë‡ÛäkrãÉ…Õ¹´ÂÛ²?<˾·)y“ljÌVV$j4¬"T£†bÆcÜÁ@Æý>c*þÑ™çáŽÇ⤩1i*ìía\i4DÂPÌ|N^¯“t:2ÛÝ¥2™ˆŒF8£t»’CÚlJ†b|_Ò<'Ï2¨TÈOŸ–,ËHÇcñªUIò\L–áA£©×Åõ<‘(qÜV 'IÄ«×evp ²²"ø•Ší$xží ¬®ÂÝ»–×ç‚ iÐ屿'k×ÙNÉŽlBè •¶WØ.ã G\Ú¾Åj5”0À¼§öDzâ ùæá9~ûê÷ ÁD˜¨ZTZXÖl&œ8a½'Ǫ]u»VNv:µFzgÎX²ušÚ.‡ë ÷ï[ÙZë _8“Û{°ëÚ¤Ã&$¶s‘e¶#Òí{»0uY÷'ò©“_‹õ—d+LøÓä½RßÞäC'/Ëÿðð×å‰Í7ö[|þòó|áåM™Ý=â#§^’>s4ùÜï?ÆŸ¾}Z! „Á¾a>–VíM*4Âñ¡0Õªxf ÍGȦpÔ‡cÜ4¡ÑvïáTV!›[¨xë«¶‹áºÂhIhý$Ò¾0a¹. #˜Ádh%_ã¡§‚ñ„ ÃTÈ!hÚ®EàB ¤4BÁ­éƒe YEl dGhå`–a؀βõȈÚ[†ißr*&3û½g„ÉÌæ¶ò9³&m [š'àÅ‚8Â4â\¨lYÄ,³òµÆ•Z3–gžºƒ‘U^{ecD‚j,Ï>wE†ƒ7^_ƒŽA,HE- ™#HÝvc\OHHbÕlËz³!„ H}Ⱥ !R’Õ§Va‚kåy¬•úT«ìËZ _‘…BªîªV@û*/Ú[a/dZ#}*ÄÐYàÓ‹Ò[Qáè랦è{ZÁ/Ôt6Tb³Ê¢J|¤ð PÝ[%zÁ ôx-­àëwʵkkä9rñâ¾<õÔŽ8ŽÇµkçµri²RT‡Wõ¸®Ží´üÔO}]~äGþœ<øâŒÏþyû®Vz 6dSep‹îL¥P¯Òñb×zªå¶“K%اó‰uO ’vÁ{Hµ ` ©_ ©^»W‘Ø.Ê@xW÷v¢{9‘œ¨ ÊëœOë¾ÜÐN%NAVG úÒR ?û³ÿ@¢h ?÷sÿPÞyçÒtÎë¯ÿG‰ã–|àOÉõë¹¼ýö·õ¼ÉT]ë¼,Ì3MJ%ÎÍ ™ã–®ïYÝ«BžÕh¡8§öô¼uNÉùó Ÿþô¤Û½%wï¾—ý¯š›7c­Ôû,ÖæX»<7u-Î)|¨«ßÛ–…Kq š’ ´ŠY©|ó@•Ôz… ^7m%½wu¯õÚ3%s»‚÷0,@.ëuÛd*OUN÷„vU&z^ÐÁa Ò6ÓD¡«swƒe IDATrUâ÷², 6 ‰éŠ^7ç¬~Ç[ÉãÿÃüð(PxPú]>/%„Œ>”¦¢Á­§KÔÕ€³Q¼óK«Sò!4 ÿÃÂEû¡8ÔÛYÌÈm»=¦ªt[Ù¤¤U Þ4‰¹MLû/* ÉÚB Wç:Öy%&W+ô‡š@M½¹& «Ù(™ ¶K¦{*Óû@]|E±TÄ’cÛ}q’1dSX{d]Ìàä+pï.¦ÚA— ö04ß…Ôµ¾WµÔçŠì©Û&´1øé>ÝŸׇñUxù³Ð‹lÒ¶¡¾…O©Ñd#×n„ÎAnêþõu½—J¼“‹Çƒ»0g”4‡ÆG`ú%à:b<r¿áÐüŸi¼Wœi"Üûu—è 9£45='s¢,'Ë©g™ÄQ½ÈðVäʱ;¥òýFÞýIÃ¥wÏèœvèßr¸÷ª#/|ÁãÊL¥ŸpÊ‹eÒ©óÍ0àÚñ1·‡êÆKó9¤)G««Òw “„Êê*~“xÏ3æà@ØÚ’ ß7Óù\æAÀ¼Ñ4†Cœù\Bp¼j•išÒ2×Å©T¤*B/ %«VÁ÷ñ]—¬^§22rÓ C§U­ÒªyNÛqŒëyN’çÄõºåep”e7›Bß;’3>Ï>38 yãËä‘ 2Û¼«yÛluykÿ‚ìvÎb\‡ÐqHâ˜Y§CEÖÕó$¿sG’ñ˜y§cU6û}òÉF#¢0”ùxlâõuIÓ”ha––ð––DŽqg3¤Ù$ê÷©¸®US $ö<œZMœÍMÄuqŒ!ô<ò4% “ÕjN>›‘×j„ '“z]¤ÕB|\×óÈÃ/ŠÄc$I˜7›8€ãy佞½5›öv|lƒÿåexã ËÕX[!™dxnÀ£Ýw0¦#ß'…†oCawH¸Sy˜KË1Ïv¿.?\ÿSóåñ{äKã÷qÂ}ƒ€)W¢GààŽ„וîã{{–s±¹¹0 œÏmñj{ÛšZYZ+ÛëÙd¤Ý6t:2U¸{[Î…ýü|¾à“TkˆIáÊMãóÑí+òß/ÿ.+rÝüÁÎø7ýÊ.îò±3Â#Wq|á÷ç_üÉCÜøöœZ¼/ŸøkòƒOÜ4Óq(¿ò;[¼ucÉ9Çpp¤®Sb,çP]מcð±<‹Ýûp{Q]X=a‰ÑéÔ&+ ®ÀAV}8{Ò’µïq Õ†0YïAÚ´…½xÇ1ÌGP[Ióëàm¥„Ô5V¨Û…܈GPïÚ×Ò™5÷ó}˜k ›· ®/¸Cð3ËÃèwa¥kç.!ŸÙäfi êì:‚sl˜…(´r½ÕMÈËÒæÇä–£áÕ![±¤p×…,°ªM&¤ZsÌSOÞ•Zc"/¾x–4õIÒUÞýôÛøAÀ×ß>Mæ¸àæ0ò wµgll"cÈößNE¡ôIãä68ʇVP}ñT6 ²t¤E¯¸#«ÂYnÀ™VG;ÆYE@[l-•H¿…©˜”x  ¼­Æ=Žª e'ßa>V+¹jKr%‘VŠ]…¾Œõ)²®Ç5ù8URŸêê¼[5Yg÷´BëqíZ•Ùl‰ Žy×»vèvGæ[ß:«j“E ¸\â`,ó÷þÞWyöÙ—d8ló‹¿øc¼öږε˜˜…rVC_+ÀŽSõ"i*)ˆ9, gcMÂÚ%~KAÂ6TGen—T>´UÚ»¨PZRU§â˜iIÎ¥ª{2“EH·«k]8Š]Uܽ«ÐŸ"z‹uשּׁאָ/™••eùæ7_á•W¾¦QœÀó <ò#T«üÇ„ȶ’Ó7Í‚cs¯Ä¿‰ô8# vψ%†¯b» {:vÇÊ4³­s»m`W'Ƙ&ŽSåSŸ:âÃþÏøþÔ¼ðÂʯüÊß’áp¦eܶ<'¢¯¯¤îÇt|4­RÓµ“é>TJ†x…!Á¸0q,ÄCíÅÆF|ë²Péª(è~_“‚A‰Ó´­ßq^Œ± Á‘+Ðs;ÓDe_#ÊB·ôQM^ ú‘ª…°¼({k)2öØýÒõ:Q)\xë/t0þkIÞß³«±¢UðB𴄝’L ¿™V¯×… ¶ªI§t9)ŽŸ|á± ã…䫨WåLÎT“f!&§]’¾­ø;3MjZªSà+¤© ›Uô‚V¦ÄoIµ«áÛß ÚM¹§IU¥ä…XÕ :R(•v/ÈTˆNáS,ëñ5‰yà^PmtŽ2Öñ¤Ú (n-[ÚYé 2¸K[³[Ipæ7`wv^Â_GŽAÚסûR{iÕ¡þ04]h#¼œïG6?ÆEö^A¾õoàfò€ßRÀÞø³*¢Qr C“þbè-Œ í JZ)ùš€¸KHí)d^ƒÑ ˆŸW™¯,ÊPß0ôÞéý[_ò7}BzøøâHžÁ¨ÊN†,!<žÉÖ3}D¸øž™x~*»{¯þv…oÿa—´í–øZá«i*/çK†2ïõlò³²"õ锞ëʸZÅo·Ï£)B6Ÿ3évÅ¿qÓíŠßï›Äo4HëuI‡C¼zÔuÅËÃáƒ@>Ï2\BÇ‘¡çI–$ô}Ÿ<Ël‡,¨Ïç Úm6ÓT*­–äKKøY®KE21†‰14ò\¦Ã¡LÓTúõ:"ºŽÈÒ¦\Úš³VñÂå ÒZ(C·Á3§úœiíñÚÑ£r+ؤެ‹#"ùtÊìöm8{²Œl8”pg‡Äópëu²Á'Ž‘é”a…¡Äžg\ßçø˜´ZS­b¿×1Áñ}¤ZÅ ¸Q„3™à$‰LÖÖ^Ïv=‡Üu‘åe¼("0FüFC<ÇÁT«8Ó©åst:HšZ>†ãˆsx(ˆàˆ` É‚'M©M§D­–•qív­Ë÷`°ðÏèv…^OX]C$á~¼Îók»´êcyùè‰ç²D8:†õÒÚ+žðñ¿-glþ÷Ã,_:z˜÷7_•s­»ì7ÙÍÎóCC¬&oÖ“Â&Uy΃„¡^‡³gmwÃu­¯Å|n£* ›rûÆØ®‹MÎlÆólµ>‡éDàÖ€S­„Ÿ¼ø*ø_–4Êø½£¿#üí³$Ïo½Ž_såÆáYùÍ7ÞͽX#;šp¢sÈÏàm¹°q—ÁÍÔü__ØkÓ-¨Ì`¿gñû­†°Ô1T\a÷È*5–«U­¯Â vzÕ°½ [-ëC±w$¬5íÃgžÀÑ!Û¹ ÖaÒ“æÌ¾@ÚüPˆUåd:´&~Ua<‚I-±§ I³!¬‡Bv“Ô’¡çÇ‚_±Ò¹TgÃ~—쿹c»-®oÈ!ïBñnäaÃŽ£j Æ&îšuÅÖ“#o2™B­kï`&´éùÄv;Ò‚Û‚¬aŸR¦.ä¶:<óè7dcu.öçg‰£!°-O?}W:ò«ϓä9̦Bº¬è d0>ÔK”ÏWT5jlσײëbZΠàG(cÌÂ+`EïØ+ò}0 ‡ášYI–”ÂMXû¢¦˜—$]Ö5<ÐÿÏs¾®Ð§j!÷©°§5k¡ŠSÈОPøŒ))á­˜÷5=%–c‘è×5ðk°¶¢AZQ®+Ž!"ܺUe4ZçâňÍÍ]ÚíXÞ|óÝ(»cíºTùéŸ~çž{ƒƒ3ò/ÿåßâþý*"75øî”J¥·µ‚Ü5öß3wCÈàØ ±4®CíxTÅß‹ö MVFúþJ‰{QQSÄ@…záU¡ëy¨k3Ö½tJêPAY–X“ÐBÉS¾@V""_Ôêxá^ˆïkb ýþÈ|õ«¿ë|ûÛ¯êxŠdo‡gžù ùñ„—_~“—^ÚaÛ5 Tׄ.Ö=.ªìMYÈ‹zoô´´¢ %å(ÜÖ$Àc¦<ùdÎ'?yƒ nÊtZç‹_üIù½ß{Ç9cò"*ÔîB¨…cת„ð·§p‘/Æ>SYgϱc®éO¦kÙ*©my%ÉÜBj]Ï剿¯Ý’L÷»üõ5\)ÈŒû–^Ó©ò6F CV”¯Q.ÜÞ.”ÐôÜêœ(M0{…¹¤^ïÓ’ ÒX; ·Ìwsòþ¯UúK¼ïóÅë¢ -)nWEÇCJ¾-^šÒrO4ùh)ã~I€«ZªM¢ÂîE/Aé»'…y}ɨ¾î‹É1 ʘ*$K¢Ÿ)LÓkäöR•¹»àï‹M–LuáhníKõœ’/…êNØS«Ðið,ÉÚ´4ç<жRÒPyX‹régÀ[†ÞWa–ÙÏå‡Ðûì¿ É][H W¡ó$,=›OÂú‡ ýA¨½j€õ#yîý&\ý}x5·ã=­ão+œ­€›M”èí),jO×´·èÆ0Ò}Û.‘º›t%T°d`š ñ,tOAóo$,}2¦¾š1›å¸˜D)“S)îv†ÿ´Á¼ÏÁü ÃÊ_ÏÌÆ‡.¾?eí±ŒæÅãÃ;¯z¼ñ•oý–KÿŽCEr¤2ªxìÌ"¹#¼ZIúÆù¾•³íõhˆ0æÓ©äqlâùÜÔ–—%r]êƒR¯“Ck6£ïû¸ï¼#ózÔJÎgó$![Z¢&–£Ùˆ"ÆQDÕu‰ëu¶Zfî8Dµ¸"øí6Ë• yЭVI²Œ¤V£:RŸNeÇ¤Žƒ—çxûó9¾ïÓ«Õ0~…*9ûf•ÇNŽ9ѹþYçõ£.²ÜáR÷XN®r'{R®È:Õ$B™IàyÙþ>Ùl&•n×$÷î1F|U¿Š]‡†ëÒœÍ0“‰ÌΜ(Bæs‘j•ÊíÛP«!õ:n–‘O&H£i·ÅM<·Û0™à7 ÈM– í6ó@ÕÌ œv›¬ZÅLÈ+üéz=D½#ÄqH'üZ /ŠˆÖÖ0Žc‰Ô¾j×ïï[.ÇÊŠ­dO§8'6IÃ% Ž8Ó|K惊¹6= Ð>8æ.¯÷øñ­?$ts®;gð#/%ÏÒVyÒ™óÝ=öúF-Á­ mžÙäbkËv/ŒÆuÝ®M<¢ÈÊÊÎfVý)Ëìï«Uh4,tj}Ý&'[9>¶‰Òý{0Á8‚›#.­ ø©Çþ”5ï:¸Uî'svõ.?zòË,¯ør¥w‰Ï¿ñ.>ÿò‡»Â‰¥~ü:}úMé=¹w%0ŸûÒ%n‚“À`n9ÝeÄc,$«îCÚ»ñxf}4¦‰0¡Ö€K+áö]Û§nV¡iÔ‡ú ø]Ø\ƒì6Ìú.ïB4O„Yl»&€ý]…x{vÒÌs}¨x0u¬Ll’Aã$ø!ŒïÁ$Ç|*z‡™÷Á;e;+µŒ+˜ŠA<ðXéyš«6aÁ¶ “±¨ej0˜@€3‚x"4< ØÍ\˃‹õ¼H’EÉ**dMpŒk »9?±#›#ö÷ŸáîÝ6Iâsþ‰1§ÎÜæðàIî¼Aª¶¤QYµpæµå7²Éž“êSGcû j[ÐñPŸhÅâ‹mF»Q 3.Y˜E ŒU5Òʵ¤ŒÓ0öÉY° { ©©ëg—Kwû;#Qö%…W´õø]}B JK= |Š÷¸d¹…¡_IýhM߳Ƣ³ÑU®ÊHOß_$>. hÏ¢Ï~ïÞ„~ƒ'žØckë¶,/g¼þúJ98fkkÈ/üÂ8þGGgøÅ_üa98¨–¤…ðë\ÕK:÷ÂfvP2Z“R°?+¤_•orO×h¨?gõ½5=—| Š=SÊÍpt"cƒÄY)Ò* X#ÝŸJ©ce´S2Ô=hk2Ø(uMªªp•éùxOÇ3, Ø{JÖ¯#â© ­÷à}/>Å?úG?O¯óOþÉ?c>_.í_Qu¨é¼J˜‰Ú·¡¡e¨p!EÛØ7ðu±ö 0àâÅH>úÑ„}è€N§ÊõëÏñ™Ï|‚7ßl8cê,Ì!gÊ/–ÔÍjºÿaiÏTFˆ* ׺wt_–JÞ!Ýs§d¤©& œPB·_¸Æ—ÎÕ\•«¦z.UX¨o ”è½¢®æà~ZÀ õØŽÿXÉU½ÎŠ29škYÝ&jaMÇad‘4ïjÄ*ìðßÙÁïáuñWÁ§þÒgõQ}‡†”º¢¿Ñ¡»ÚÐüYœ‚ò¥üˆBÔn •üeírÜR‹šÂqP^†£ŠŠVüó…ôªÔí{E9!©ŸÆ±v :%ÿ õ4•%Wɹ[öôý¡vBª¥9 øµÒ±×Aî´gÁ·8Ôñ®è–‹~·¿HRÄ·„jrMÞ:.;¾–~&Ùwëÿãì̓-ÉîúÎÏ/·›y÷wï[«^-]UÝU½J­n©[êjZ,r[6Æ#`Œ ÄÃÌ?„ÿq(ÆÿLÄDØ„ÑxÀö„e AHBhChën¡VïU½Õ^o¿û’7×3œ“u“6SUï½ûr9yòœßò]ÊYdšÂü Ý1ªÕª~„Lw¡÷"2ü>Rß×8°tÑ™õ!é#^¹ù |Þ|)îû¼›Câsú"ÁÈL7hlx#v£W u³l™ñ-êýBáÚ@©Â"O#õŸDš€w¢¹àõë]Èèa„Gÿ} gRqÚ©X­”Á,“I’ÊÁ+7÷yí{™\ú,\ûž#7+R©»DnNß^‹bÙs]®û>½4• Ïñm›šRrhY’W*t\{0i½N$" VµÊÂu Ïž%[,H]—v½½ždž§â<µ³ƒW©ˆ•e(×…ZMÂ,ÃZ,ÈêuìFƒ­ÙŒ$IHó\<q³LÇÁ¯Td%Ïq<`2¡šç’/¢*!MÉF#¼zĶ%ì$A9ŽÄž'‡y.*IÄr],AVâP.f'yèŽ[ߘñÚ­U鯞ãÔ í˲?ÞàJ¯Em6’<dÜh@’оqCÂz; %µ,qâ˜|8ÄÊ2¢ Àõ<ÚQ„'"y*¿R¿Û¥š$â!‹…î&ÌçÈl†T*Ðj1ÍV §ÛE ‡âôû‡!ÙÊŠxA€$ Vµªð<ú}±ó«VC­¯cU«ºûEäó¹ˆR¢@›Ïõû¨<×uŪ՘8’¦äŽ#X––‰MSýûA•ŠP¯ ¾ H¡ÝâíÕ—¥îWä»Ã;±â j0Å®øüò=ߦåîò…ø™ÕU÷Ôž‘Å´Á÷zwË–‚3ÕgyÛê59Tgسî„J®ƒLÝ€$ÇÕ<‰ÎŠîLX–†QM&J¨V…nZMÈFB¸€á^}S˜†Âx!Œ¡ŸÐŠ'òS÷ßàgïûçk×I3ŸÐödµyD³iózþNùì_=ÀŸý .ûã@h6å½çù¥3_á´w‘é ç¾~Jþë3'd2Î ]Õm°:¹9˜éj`Ã¥ƒóÑì¼^$´+ÐY§·æ0 µ3wžÁÜâ†Ð½‚–ö‚èÍ!©@`‡{Â<„pý±–¦Í<½¨9‰°v§°;\K¨d'‚@<€ñüš^~c_Ëÿö® v‚“‚£4þy~]oÊY[{S¸UX±ŒŸ†)©V2ˆmp]<´Á`;€áâøM!®é•ß­ùŠP{ID3!Zì³éE$^'ÑÅUgMCÈ{Àªœ=;áÄéÙÛñyýµ-°‘ÆjWî¾çuB^y¦‚¸žÌ!+z¿&`-âmñ¬ÆXWºàZ²X5Š ÚT”ƒ%З–ù™gÊ<® 嫬€•«­Z˜jôØTã=ímƒ.1cÅd=;& l›@e³_5\…¢cˆÖÖŸ,™˜˜ ½f¾_˜ø‰¹Ž5óõ„••6¿õ[Ÿ3gêòÌ3E95 U­TÚ[”ÌÚòÛîL;;- V¸ÿþÛÛem­Í /¼°äܹH~ù—¿(Îk×îæßþÛŸd<¦à4â÷f,Jf€¡¹ç#— Þ>/IïŽd ËÍøÜU*/¶L•¾vWeùö±}ùGÿh—cÇBöö.ð¹Ïý4ò'ï•0œ›¤@™¹Ÿ%a3¯®šùºnæfn®­Hôf²´®– M ó¾µM·«m¸SYz“l±LV îSÝðDfæÞ&fž^ M“¤ž5PÇó^¹æKÌÜ»l®­0nxÑxU\2Ç*|VÚr»ô¯¹4¦{U5<“z©›˜š9Þ“¥EòÔŒÇLà¦ö½ÿ[þQÿ/ŒÿæOÑ4+8e‡æ™Q²—¨A… Ì«fZú&×›˜éQ¨&7€»ÑCÕ3_ßc„õúæ|m£Æ4\’É1$c+2*Qƒ\­šWÉo+R÷–°%ýÚÿˆšéBì—ø7JªÂ®[í¯$œh)ßðj¥üö>óø³¥ì.ûf™Ÿ˜¥£0u?(!‹æÜdYýW;&YY7Ç¿ø9Ôýç‘•ÂáÓ( ¸¶™ÆÅØ ài}Þ^)1êƒrV!<Òäê™I rP…Ïf¡Åp«…Û5Çð ·f^ry_gIMòKîÞ‘y¦Õ’÷FžÄ0;‚Ö öþoà+B:°Ô<@’ûaO8|Cð+ŽÚ‰,Îéd +—´2ÀB5VX‰¦¬8)Ž·àhaqÙóȳå8¨Å‚™e©z¥Â­$l› à¼e±p]=Üq^N«Eûè¿RáÅÙŒl4"9u wWªUqº]aH¶¾Ž7›á2:Ë®Ý&µ6ù³áƒÜJ»êÍ—C8««jµ¶ÿ¾óeNÔ^a1NyþÖ]üáw׉&` @¡ð«B»]Ɖ¾Æ–Î Œ2ãÍÕWŒspOCkª®âðPHoAà€wzmˆ-8ÞÐØËtn\‡Ê*Ôš¥šè½A8QÚÐh*T$ÌM¡± íÌnê2U˜è.‰%ƃ"g¤»$ÃpŽbó~ˆ¦BÞƒdU‘çBu†—¡z§N ¨Á<šRX‰†_UÎÁì¬×a´f±B­Â± SÈwÁ®BúD(ü;•ë$R‰ö¼HVôÿm¥K?¹’f‰îÞȾѼ‚ÎÔõë+ò^±i­c°Æ‚7®ßKžºlwwñªÇ‰ÃxYz"ÒsÆ®B+äHKçÇuò”[P‹’–mv€“í°Ä¦OÍ1gæßn 0\r‹]xfTŽB`«v«5ê™ßi,¥JÈK}úÂmj¢tµi®en‚–‚Ô1¿×3¿w¶àJ`d¥ЛæóçÌu.J½ò;ø—ÿòÝÜ›ýýðŠ D©³è*ïœs·)"‘Sf·ßU?øÁ¦Rê¼üìÏ~G}š4]ãÿð1~îçþ+kks¾øÅòÕ¯ÞM’ŒJ݈ÂÛ c®Ù2ŒÓQØUËà|§4æ㊹¯© /Ðмä›15;òV /’•¼-²—"B«?ù%ý©‘8m›ºè0EF媨 ÏL"©JõÒóÍulзRò:RFnÖpHœÛçç;ßÅ¿ù7¿NÁoþæoñÍo~ø1sü›fÎv”IåvTF!ïS-%K…)á–Q°™D÷qU©ÔäÑG/ò¾÷í³±1U½Þ9yî¹ÇøÜç2óöF *d-¹nCÇö çmà’Zò(óL½R‡¥ŽV¦B–\£;ÌG&JTËh‰B::\âVØUÆ4³-Aç%üGÍ$/ϵ¨sc›qÞ7êd#¯›¯èzn²ô¤‰J> …GŒ]ŠÞK ­ªU“e$è²ä÷ø€÷ÿ"õÿÉÑ(ø £Ró±èZ¼zCÒYšïÝöOðK¾±yEKe—`DëKwp*¦R^]ÊÖ27çõ—ª·‘£V‰žU¼*‡%O )ùi$æúœ’±\uiø‡WñA¡(m*ü4ë°´ çKÕ+2“8 Kð­Fég‡º#  êšQØb^2Á«– ë2àp¡ƒ»AÈÑózʵ†:K›šdy­¤æ™¥7®¹ IDAT »sä· oG%ªé4¼aäm‡K‚¼ŒÌôÍJ…ƒ Ào6ñl[@~tDØjáDZTóœÅl†lÕëÛß§ÇDA@m<¦jY„±R(!ÏUjÛT<Ï÷q²Œ¨ÛÅk4Ï“—êu=oö÷YÍ Å=:"o·±-‹£<çжqf3œF*b¥H²Ò›ÁYÞ~:äÌÙ){ƒMfYUZyAúSŸçou±VjDYŽ»¿çy$Y†Éz=q77UâûØ/½««¸[[ø»»ØyŽ?Î"˘ìï‹›ç¨Å‚l:%kµðÒǶÉq]—¼ÙÄk4ð¢±m‘(Rd–ïc+ÅÐy–÷¼ÈûÖžæí›—¹Ð¼ÊOßy‘Ÿ¾ÿe1ýÅ]üûßàÑ#|©ÿA¾òÚq®Vì •á®œÚžòXó"ÿÝÆçé´ŽèWøý¿8Ï_üp…l|h*O(,Ñд•båé.Œg¤¢Cazqµ ´Úư·/8>TOCtLs Ú6œnÀd¡ aà ¸ë:ÙÈ ;-ttgf°«WÏò ÇPAsSwöŸß««W‹ŽIªIØk]HBˆl ;ŠÆB{SðˆCXŒÁZÑ~GôñŽ{yU±º­e}£T»‹Ç®.…åJó8¼¶6,Œ€YjªÊ…æzD9ä¡Þ×óªNŒlc–ºä¢<ÑÄsW_c6ƒÚ¬ã€#ãñˆ÷>~•H5yæÕ‡À™‡'yèž}Zí.¾|Œñ°°]ÑlF;ÕîÜ–Áu+KßcÞ„ªkàyQ© á|b"yè—vÏT`ë¥êfI‚ƒ¦ œ†Ë^=¾ßØç^ìJØ&|é[pù«Æqy_–¦Ù)fw¸e‚ž3E¥Ô\sl‚Ö¸äi•Ý‹ùð‡ïàÉ'/ðôÓÈáá¾z晉ÈI–ð“Y ZU¸a·ÍV˜ÚmJvv6¸uë.VWÇÜsÏs¼óR«ÝP/¿ü÷øìg ÏwÌøôe »U";'ægC³[·ä¶Æ$‹’pVJR 0v‡¥èfÍTŽ¡»Ì.@ÞE''4<ÛT˜K[]í/Ëòe«TŽMõ;+—©l»Ê(s-Ä84ò"ˆ¾d‚Õm–²ªbæÎóÈ#ð›¿ù«\½:擟ü_yê©g'Ìuí–Ô j†{–01ž™SªŒß4ŠG;ˆÜî œ93äWõG¼ó#*•€o~ó£òŸþÓOñüógM8)Ííä¯Ep"¶m‹R %â±Tuª]3 ›æŠ'OJ×)ËqQ²€.ü™I¢Ó’³;¦‹W7s¥H¤ g¶ª9ol×@åì’à>KGù]S8nÞ£æÿÆdyi ‚B8á¶ë˜þù-ÓMÓÔ¸29±×[þ$Sóõ9§IšÔ†A¶fÆÌ$Xªè6¼ú}dû}¨S`º†Œÿš/¤˜SÝŒÛÀ¨BÙ Šå¼°e)äÞƒZÓ]'ešÍò¦V²º‡Ÿ\æ¹âýõn–dæ¾¶µ²—*ÛŸ6ÓÝ7jègY}&SÔøÿéí‹Jm=åwHÙ¹O‹ªX =RÆ’IOD)Û!÷,9Ÿ0Ia>£-Ôn§#•z`6S±e‘Ù6¹ëJÇ*jyŽE¤®Kš¦RÍ2+UŸLØö<±êu•‡a(–e©£«W9ÝíÒ;q‚^µJ5ÏËY,ȃ€E§ƒ¿XHu8Tó'°ÖÖD¦SU›LP®Ëpg‡-üZÉæ&Ó$‘,Šð•RrP­ª­|ÄÕ0$ „4ÅŸNU”eH¥ÂªëÊéTmß(%©­-°,lÇQ³4ªUÄ5I<^ê_à]Ç^”wÕ¨^Ýéù*X.iÅ…y(ñtŠoYʪ㱌ƒ@e³\º$þ;ß©²»î"ÙÛ£êyTNBíí¡Äó}ì4EÂÔuÅr]Å`ÀtcCª³™J T!ŽƒupÖl¦”ç‰ C¤ZUñêªÔ“DåW®@’ ¶·acC¢0DE‘²°*¬ãÇ%ÛßWÖ«¯"'Ní6‹0ÄžÏq&Eµ*ÒnãÕjJݸA¾²¢¥a77yŽ4›¨áP“¯-KLGCáyÚƒ"ùÎî)Þyv]¶º}U&ÌGù‰S¥ãih“©§8Ç»çç9é?/?¿QWŸ>zÏšò¿¹ÿ\½»y•·µÀ1ÙÇS×Çæ±Í ‡\ú“ ÊÍUب‰²fJh[(Ç¡¦†’+ì\UÒá,!O•,*«*›Wû÷H»q¼y‹Ð øêõw¨ï=&_›Þ¯F¾^€†cÈ3Y;žªÇšßàô¹=îh`; ™ö…?ÿÁ]|óÅ– ÷XÖ”\%àW5ùݲYy Õ5ô!Y@Õf¡ÖK¯: ¡7RØØ®°ÖTÄmÍaX5Òò³vú0„•&X‰Ò6ÍјÂl ~K¨³×½C¨m@°-L"…?€xU<çÐq!\Ñ*]öPº°ÕÒAÑxWÈ×ôõ'‡à­@Íâ=€8› ÷”еÉ ¬Š¢­„ÑŽÂY7×AyÅ8•`mäT‚8`íéâd6Õ0·£È}-yëÖÀaº YUa±i)¤™«Èš·áÔôf=»¥2Hê¨ìÂüiétCÕéøô{[’Î…½½5¸çUåFßʵ—ƒš%ª š 1<eŸiI½T5ÆT9‹}þH-»!~)PML—¢nTyâR…ØíuP0&‹ÃÝ2IÉíÕÞèêL4”Bˆ¹ZbÎ;&h™(Œ$ÒcæºSCâmo€¦Áï ¶¾ œ7’c‚åU §î¹çŒü³ö˜zþù›¬­m«×^sîQúž®–J w¡(Û%ÁBÅj&à*‘]^yåm2Ü¡þÕ¿úM>þñ?äOÿôŸÈù/wš€8UË$Î/Ì]6˜ø"éZ1$è"ø÷L„47~sí©%¡Í¢|hˆùERg³ìFXfÌ#Cjö‘e~§a"˜oQ3÷:/Á~I&×QËÈíœh… ª‰&xÏÕÒ]½°H.ø!«¢} •!¨‹È\)åÈ“O¾Ÿ_ÿõóƒñ/þÅ'ä"ò~”›ßY)¢Fs-E· Î’$Ý7ó47çrÑsk]”ºOµZS>ô¡<þøɲ*»»§ø‹¿x”§žº,9D©¬(Ùšvc½è  8J)‡,ë³½ÊÞÞiÚ5Ý;»x—J|†º™§Iþ´™“·ŒŠÖÌ<L”š„/W%ƒIUJ _hÓ<çv jÙ4þ4¢t²>U:<2÷rÂ@ RÃA‰Õ²£å˜h¯peŸ¨¥Tu1W²Â¹Þ<çÈ(¯SK.NQÌ<­–XÆ©`¸ÒWˆÔmZM!¥Ú_Ê“b• R3ój–`1Ù²Ó ÜR½¤ÈjŠiX|]Ð]®šcg©ìÜ.UÀo#5K5€b*æ¥W·h,9wnéÄòI)/\3u˜Ö[Æ×ÍÔ?ª_ Ä‹¦lÇüÜ8rß6 ·Ì±·Ì½˜ë(^É“%ÅîQɘ®à(„ù¢ |Ù|¿XÖKí¥6°˜ÂîwÁÿ4 Žþx9f¡ùÅ2Ù–>œý’0ÞMS_²LXÈʾÆRt­È>(âíq8iÆ®W¢¬%%’{QçŠKÇg6Þ‹‰píŽö·Èy%ÓÇ KÝž˜£8*(2ËBTJ¬–ã¨Qœį°ˆcÔpHÒé°Ûí2èÄ1uËBl›0QŠyŽ$ ¶ïs¦ªÇÌE8E„–ŨVãu×ŵ,ŽßºEåâEÚë밾Τ^ÇÝØ 1àÏf„µ²±Á¸×#ˆ=µf“ª• ÎlF+ÏÙ¾ruõ*‹ ÇT öZ-Rß'ˆ"œý}¼z`4bu8$¯Tˆ=¦ëbÏfHâza’ ÂäØ1¼Å‚™mŠPT²¾N³nóôè>ÞvåGܽµG$GDø4 ÒÒ›×Qb£|ŸyS¯×•ôzdA€5a½ú*•{ïÅŠ"ò~uîœNf®^E½ü¹.ñx̰٤†xÃ!ÑéÓxQDš¦¤ƒ(…Z,¨t:8†À.A€7¡Z-¬ W /Ši–aÏfx†Ø·Û¸³™†8Y‘RÔ§Sòz{2jUÙí6¹e¡^Ê#gùÑÙÚšYñ`0Ð2´·niÓŠ~{÷e‹WÇ[¼½µÏ¦uÀ›I‡IÒ@ÈYõ†àe¢l~gðsüOÍ©zäÄS¼nóÌüû¹Ãç‡|>}?ç¬#VÜV½BóàÑ`Î}î Ý(`¨7µJEK¨F!{á¨4QNry¸Îlâ‘Äê$oŒštº6¿|Ï7 qiz'ŸzãÃô&ž6¸©5©Ù1g:orwÔŸ'ˆw‰’ GCŸ§_:¦žz}…±ÛÒChWÈ3O“§L'ÐnCcêë:(ϦZÂ"S`çB¦ Át¤¨5´zR8‡ŠA^ Ž"¸BņF Õ*sMd_D0Ú3Â(MM|VS˜XЍ Á ²‘îNØça´ \Ô›m*[mØI åi¥«<Óýb§öÔ–QÑkSµãP@­ Ö&¤×a%Ñ+ÛbÁ6ï‚d ¦1$/ƒ=RØw MG/`û8 H=f¢ è;˜5aaéDÄ2¤ùH—|wÙO{ 6¡~ Ü!TÆÄîýá)¶6wi¶æô{MòÐæÅšê]ïˆÙÚ^¿´®?1zƒ¶§¡P¸9ciŽGæ)ÒªèU{läF²{O–Œ76Ðr›£RO?–¥æá%9Ô·jîû%3»… Õ[¤S*KÀ2c–ðßcÈÒŸ¡UÀnLBá/Yœ M"PðÚ&P¶KIR×T™}~áÞÏ~pƒO}êÿâw÷78u*Æ(õ\¡$dv®¹ÆÄŒWê&FÎv ¥tïýðP' •JˆRó¹R"¹Övg\p\J®Æ‘ج³TåZ+yG¦»P-Á”Εº k¥ñì•Hážó’ð–|ׇ%\! Ï[psÿ3¥«Üûf, ½Í…™ ‚èg¥ñÚ,ÜßÍ=û¥y¢n' JEÜ{ïyõOÿéÇùÜçž“O}êSfüO(¥ŽLwÇ2ÏÖ6.¯ÄÊ•dS+%Ó‚2A=PO>y‡zVkÈhtž?ýÓÇøá;¤iû¶$ŽR•’NhÝ$a- 䨱Çßà½ï}™'.aY;;›|ãòòË5ŸKó¤t-…ñAÝDOE·VÇ”méš³WŠbc Ø0 JÑÉ) «¥Ž× f¬ï2ÝÃÂeûRITá–ZFÚÓ¬lÍ\¯X/d§k漪ds-¥rýmb¿ù½i)9š¡çÙ߉ƒñ×þ™s{½R£Ä{&À–dL­e'C,û1³JKz …ÏCƒ%åéæ[¦©ÄsGIAÚ+ñ÷g¥Wsjþ-~§]¢ YoáŒx%YÇÇ2KCÁq(„È‚RP-½8*M·y)¨ÌòXèd¬–¬¯—\…¥J¡éñ†9N¡>mœÛIBÅL‡ Ùò€Þw`íaX{v¾•þ\ÑaZ-mÓR“Ü.©†7K¹Žƒ¿*%tæ9-ÝÖo/£s}-ªjÔ¦ îÆNI±ë¦IªN™1:û‹°ñ¨(nþžbgGqd–”‚îô€¹çWÍuÜ4¯žo`M3Û&´m²<§“¦ô-‹¡v~ÆÛß' T·‹ C$ËHòœ@„Üu‰ò×¶ie™FCÝ(Bâ˜Všòº© ðí'hõû\=<¤ÞlRq]TµJs>W¡ãH6™èŽßê*I3j6ñçsŽ\—¡çÑhµ8²mœZ ïêUÔl§N1::"õ}:ûûDiʼVc}8dݶI|Ÿ<ËhGa’0p]<Ïcäûì4dJQ««,â˜$IÈZ-Ç“,Bn\Þãkã·ñä£ÏpúØñ,EÕþõ«D-‡È¶°ŽŽðêu†³A«…©ìÝ]ÔéÓØý>Ù|Ž$äA€Ê2e÷û’v£½ã•¶ŽŽÈ66sçƒò<'ë÷‰ëul°mœveÛšô=Ÿë5"Ëvvp±66×e<cy•("Ïsânïòel×%¨Õ´²T𢠤ßGº]T§ƒ=Sëõ˜Z™q(§ZÕ O•ІG¥©–°u¨Ö@%¸•*VÚÃay‹W²¹U!ðöÁo@+±ôÝ_qæ{ØiŸçzóÇ×îg:´ÁO8¿óc'Ÿf£r“­ú5™rëZÆ‹ƒm¾~íÃ4`>· :Ö‹Üí(‡:ájÔ ÚÔüQº7OÀÉ58u>ƒáDçB³MGóÒ[ÀÆØÙ×pèt!\h¾EoG†ÔUÓ]8„,^Bx¼sº0ySãÇ÷¡_‡¤ÍCp×´Õª@%Õ‹ÂêiH&:–r,˜Î`;EÌ`hÁê1m‚OA‚sZs_®ƒ[Ù¶zàÆÖ`xìX +®ðú!¤ -t^]ѾÁ"{®U²RKKøñ›škâ*°Œœ¯éM¼®ô¸ÒÔyDœB¯_áü…!~°¯“•|Áttœþ Åã]á{ß½41Á¡Ý¼®ûÖÖDqõ|ÉܥΡ­t]å%5¢V jQì•RÑVºÊ¾^ªLÖXV¤ ë±’êSQn*ÈçÛ¥•¾è”Ü,áÔ‹jzRbçù|¿8·ÌphvŒj)ú(ô(U>þñûñ}‡ý¯?ï· Ýª £ÔK%¤ë&Û4_ƒ?_RTj˜ï ¿ökŸf4ŠyöÙ‡°íWøèG·øò—ï1ã67×^”7 ÿsÛf¬U‰ sÊìpEÅ7IߨDÊŸ•’¯~©m—ÊtQ)Y*p¹©†'fgÞ/EhŽ©~ïŒcž[ÁÇ9 Üe¢€µº`Jú8Ž…HDµZÁ²Vn'?çÎÐhX´Z>­Vʧ?}/i:æÔ©Çù•_y//ÂÁÁ>÷ÜóêõÆŒét“Fc…—_¾ÄîîN©œœ² ¸QÒ=V jµ‹Ø»ß}Ä?øC:yÞäÛß~/_øÂ;ˆ"¿ÄÕ8(•À:–Õ¢ÝvxðÁKÜ{ï_²µ5¢Ó9¤ß¯3n2z¬®îð‰O|™ÑÈçûßßæ[ß:MQoRJL‹Ž^hJÊN£Y’Ÿ-’¾Žù:4ÿî™ç~®ÄaY5cŸ–4U‡EbVb3cÔ7ÇškÚ0ßk”4W3Ãñ,]æs<ƒç¡o¢µ¢“§J<”ž‰L;E׫Ä'YéíCý-½/þ2·I2ÔªY6ÓRþœ”rÊEégª” ¤% [×t5âR§a^ ¶#³ Äæ%²òFI´­˜’§J|ˆz©ƒašZÊp8¤[rÞ.’‹j‰€]<ÞBÖ|_MJ‰GXš^{…F‰æV]’¤oOŸ³æºŠÖPqŸEÂâ–ä§ lÏŒéÃ&ÁP未D)«›i·&pøÜý3p÷GQ»ŸÖ¾i©cÑ7×vÓœ¯HZ6ßÒ]òÌr󚯮ùúZi›*´*:æóII–·HÈvKy~Q¯™A´“OÂï„tOqùwPû} Íz®Ä‰JœÐ²À¶o׳ƀ¥ã,cž¦·Q…"( æº8Õ*•(Â?8 Ýnãg³4¥t¢ˆÍ,cæûd@C)<ÂZ 'Ï9šLhŒFäA@V«Ñk4pâ˜;ŽŽØ½ãêJ1o·±oݪVq:jyÎ|0 ®×Ù¨V™[až³±X0X[cÔëQÝØ âº4ÆcRàV·K{0ÀªTˆ Öâ˜p±ÀvÇ0Än4˜¶ZxÃ!A–‘U«ä"øA@ž¦¤†(îi½NE¤{û¬vVøÎà,NöØÚº'Ì&Ð:qÁ”F8A&T£*‚£#üÓ§_¿N<›QítPA@&‚µ»Kzü¸Nr=ks®\A67 êud<†ÕU*ƒö¶ØÚ‚k×°»]ÒÙŒ8ޱWV”ª×Eyض^ˆö÷ñz=¢J/ËPQÄ¢Z%ð}æFî6ØÛ#>s†|eq]åÞ¼IzæŒDiª“¢^i·Á÷i$ ÞõëH·«%_³l©Ø´±¡¥a•Òr±³XuÅ1ïÑÔg6@-ˆfî6'§½}®Î}˜ Hønr/~Ïác[À¯ÝñgüöøWèå.4ëæ0>ÔÝW[æiF^­1 ª: žÍtr3™BG¶ZƒÕœ5œJ…_¾ïiÞ¾öÆqÏï\}çò¬Õûòîû.q®3åBë Ôl@:ñxùêqžºr'ÏlA¥¦«ôé*1ôPohéÜ €Uã ‹–_uöõu˺&%íëîÊh+Pï@šhÎJu‚f0ék©ÙF‚º6¿Ž4×âb –1·BùºàåZmËiCÒ3$­³Úðné Þ9Ӿ‹Œ£vMnw6ŸS¡–žµsÃßPºËQ·¡Ñ·©÷ø~ž Á܆.ƒ¬-À^ë‡:aY»îèôBXô44™Üļ6¨šþž]‡| þXËÅzu…ývP‡¢)«àØÚñHL–™¾¯ƒ½ a…K—7x÷#§:û\ŠÎ€ ^}}þ`f³‡’ºöý°”N\¬‘>v–BR+î©Âr„¬¨.;X[ôj™ÙËÜ.•ô ¹JPŸ"ø½Q‘Ûf(ª²54tj·ÔX”$=kf—rJ寂‰–pViǨ–zÛG¥2a§=¬¿Ejv£žä¸ƒÏ|æiò<Ʋê,Ðï+³“4J OeØJhî³h-‚±ámâùã¿Æ™3?boï<¿û»?É/þâïóü¯¼r†+W`iH)Ø+„ÙûæÍRµº^2Y{µÔ•(T…òñ{ËüµKýĘº%² V­¯`Î’»–’8«{£t½ï:XV±Kïàû·ØÞÞCD±µ¥ç€ïkI—sç4Fd}½ëj3¶fsLž×ÈsMì¯T„?ÿs—‡}èíÔë»»1'N|PÝwŸHš*GÓâÖÖ`c#à?ÿç×̘4Ï~P Ò ù›Åíd÷¾ûöø‰Ÿ¸Äwöˆ¢/¼ð>¾þõ¸z5)‘í ÌGÓŒé˜ÍÍ:wßý.D\¸ð0@)áæÍ³<ûìižzêAz½ó¹­î¸ãGò¼À… ¯óÑÞà=ïy…ïÿ¾ñ»‰"UŠú —²S&@¿f†éút:׊™cÕR”Ut½Šw¶0ubu*ËèéÂò½¾Íé¸iþž6QfAê.Þç1KÞÑn)ª3·Ê¦bæÕNIͬY’ ºnî¯ D”ßÉêm»Æ¿‰{!¦wj.·ðæ•8÷]ëX©æá,í8”]J4T©®â•`M~‰ä=\6Õªá„é°Dû XÚ¬4õЪÀpÜ’.EÑØ=0×UГš%U*·$d×7Ëk1`E'aZ¨E›ï7Kät§´ìµKªIv©F°aŽQ@»%N~á R1Ǻlîí%m¿ÔSË:†ªþíoÁÉwCþvàëì.…ÓRÇ…tÉ)i ¼-3{æ#s‰9ç©’_êa‰OqËyî‘ùœgž[Çè-œü‡pîÇ ;„«Ÿ‚7úúÞ,éÉR3÷ç9½<¿M¶/Æ.(¡iPžhåín’à¦)‡• •,ƒ£#ètÈ,‹Ö|NÃu™yN’PÑõš,c¸iYÌVVØLSü8f1“8ãn—íáÃý}ö‚€5ß§ÒjQÙÝEU* k5­kQD’$ŒVVˆ'jJ‘‹h·îñ˜4Ï9™çêõ›7¥Ón㬭‘Íçt¯^e#xÓu9Œ"«• ‘e¤)^­FR©ÀhD­Ý&ñ}µˆ"Tµ*t»Zm)IƒVòœ(Ëq|á àWýÏpº±ÃØõilT¨ß8¢&©{ébA½^gÇxûûTNœÀÚß' °º]r¬4%>8 èv‘›7Á¶ Ož$ÖNÙ:Ɉcœé”Åñã$yŽ—$$I‚{þ<áh$Òíªºï#×®áÎç*«Õ´Öh„•eZŽ7Âx;Õ IDATŽIWWñ¦SâJ…ñÆálF{<&ÚØ@¹.Nà¹s:$9q‚Ìópòùœ‰ï“{žvÔNS-c:²µŠJE{Nx.(›úø*]ÿÏ·¸±'à ˜Å ^ŸçÇ}ƒÍñK\uÞ2€ù6VÕ×Õ{iŒ&<Ñù"ÿóê§ùÔàôAd:ÖŠWãÌæŠjUhpbžè@}™ÅÁ†•&Ööqr»Å†êóKg¿ÁúÊ!Ï-îãéÝ'x=V|üþx¨ý,MöH³€W.7¸Þˆ¿<º›Ù4Õ D[Á|£¡ÆçG±N\êu]½OYŠt¢P­è Y:p0„Þ!XðW¡Þ„  ³5Á8J5Ê#wÀ?AMï4‡öfàÛÚëÂR`Çš0ž oaì ­ž÷u7Ç™è€=hhñ ߇Ì$PÔºÚã"›j"úä*¬®ë}Õ®kŠJ¨Ùu¹Ò†O' ³.T}EÝ1fHØp œ+Vî¦;0@kâÐ9¡W‘‘‚éªNÈ$7l·šÓª±SU¾Næ2t‡$ݵ­P-Ýke Ú: {¡;Gjª§ÇSâ¹ËZ· nUáä$¡Oo¼Íúæ.?ÒãéoßÍ dX&)ŠMðèäOô˜Y™Öýsš¹(-ãMgN;SȾè„ÇÓ*jYǬÞY) ;fVúWY‚T‹Rßë%xdvEUJ(ê%XР´ÓD%ÖÞÙa\–Øö“¥]¿ L4pGÉ#B•,Z¯²ºÚU?û³Ë÷¿ÿ"ßúÖóˆÜ…Èjl;3AÓݲ Ú»%xJ!Æ}aIš¥ÆööŒ'Ÿü‹Å*_þò»¸|¹Ê+¯Ü­y䝸Çÿøküöo€0Ü/•4“Û•õ¥î^©Äæ–àNcµŒ¬’vcA¼™@õŽ’Aqަ H (M1fŽš-ŒâOlÆÕ)¹¹ˆl¡T×õév{<üðE.\øyžP­îbÛ‚ CÄ£RY`Y©r›J%g8\C©”Ù¬Ãp˜£TÂK/­2#Ï[„¡0™¸êðP ìóðþÃÐ hž×é`Y7È2Á²,DBò<.‰öï”ò›!âjmCeÉÚÚ>ùÈ«¼ýí,+ãâÅøêW?Èë¯7ÑLŽÈJÍ#jµœz}GÝyç<úèët:cÚíapëÖ*/¾øv®^=ÃÅ‹¾CÛç€+WN¨ßû½ãlo?À‡>ô2÷Ý×ã#y“ǻ·¿½Éw¾sÙlXòl•ç…™¨Zá VÌ-¿Ÿj—€ûõ’÷Ä1ó^+ *¬˜yQhæ%˜“_,ãRÒÃâž'sξWï‹oü{‹½^Že XÕRv²l+eäoãÒÜÌ-Kf†¬í” ^­<×&€–EC)Â4E¹.™m³1».y«¥¼$¡Ÿ¦Òu†J‘*E˶eqã×j(ËÂ÷}£zt³VãFâìï³rîáÆîpHºXà±Öj!ý>õvËqp ”mÓÎsâ'˜îì°Z­2"¤^gu<æ(MÉÚmT£Ád}Q+»×“Zš""ŒÒ˶©†¨4ÅÝÞf6ŸÃñãXY­†¿·‡8¶‰m£ê :-—W"^É›êÂãp§\÷ÆÐ=Åèè™ëá-ÄJã` ‡ØÝ.ñwÀ•+Ø/¿Œs×]¨ùœÊl†!i“/dž‡×éÏçˆç‘W«¨É„t0 kµp×ÖðŒbSvþ<öpH|í@E‘¨ÅB©cÇ´a^¿ø>ÙÁnš2iµh‡xëëÌOŸfüæ›4Ž#¬VQ•,£rxHzá‚^TÆcØß×?k4XÌfEŠù Á7ðéT˜ÏÕíŽÆ•C¬ß czã-E«& t@ýzzŒ‡ãm~JžáéøQTkEC‡¢¼ Ÿ·?ÌJ:ãaçÏÔo´þOùÂüqž ¤I`*0–&S×ëZ:7 )<=ð*àU¡{ü&¹×âñÖ üÔúרÕfÄv‡^tœÇ6¾Å¯×/2§ Ç6/Mïá«»çys·’±Ôœ\Rˆ,}ìjMsMæsÝÁÑŽáÚ„-ð+Âu8ƒjª¨(¡Þ€à4Ø5 FpkOÐÙ¸Žv¶±«:ÐÏG=aA³»{Ð ´ŠQžCk8”å舓B%ƒÑ-m>WÝ2y5_°kлõ.äëà˜jl:ÑP§ž­}7ú¦w½2ÑÜ_ï$d}ˆ§Z>2©‚mi¸×áKpöm‚SU¨¾Þ† Xu4Áûh µ½Ÿú™àó9LnjŸ ©ék¦á]LÒÒ9•kÉÝ|¡?gO4tJš&±ØÓɤmk±t5ÕÛ±³#I†{dɂлÙMÁª)¨q´wÚÛžc­ÓÓ«qšhÎ/¤Æ°LË*UÝÉ)Vó|¬¹"¶†c‘$f•7Ü {ÎLóF’B¡g^"h?_*c5 ¬f׬Ê%ŽD¡Y+™åm–¤_ È%à.Ct³fjàøX‰Å¹ivœKއ2V½cú~›ßøày!_úÒw +,§xóM88пç8!Ib—ìx½Të°Ä) _+@]}øÃßÏréÒc¼ôÒ `Äç>w?'Oö8yòEžxâ.¾ò•S&š°K¸ˆQ ŒÝ0Á~Až­Ë³Q5QC×ìx­R²QàF|sj®mµ¤4U{K™6.)R¥BÏHÖNo[+ÕÀóŽø¥_ú wÞyz=c4š‘çUµX4%M}VHÓœñ¸Êx¼ÊlfséR†Hƒ·²—CMÍq ºR êQ)“D­èº‘Џ­'r»® ô2¢Œ'¥k™[U7¾ j™ÊB남;ôX¨ ®¥å Œ:Óœ£Q:WoÕ|:'‘ƒïéÂÖE­¥ î…cº›©,ÏÅߨP*ËÄj·ÁuÅ::Rèä‰,Ž•mY’& –ï#ó9¶m“ı’Ý]‚z]Òf“8Ïq]—J§£äÊå:…庂㠺]$Šã±®6».N­&áhD¤”"ŠÇÑnÔ·n)&­.`ÛÂx ±ÇÛ·Þ”Ó«}õÂÕ;¹2„VΜ`/ìrÖ=b›§Õžõ6ÙóO+œTn«¹ŠçF›XãU¹Ãú¡z°ñ”<²vCÝUéK´©-d Å­¡âZáîê ± •ë¬UûœtÞPÿãöwøçwý‘œï\År«ìd-î ^UÍdª.ï¯óµ‹wÉg.¾‹§¯µÕ ­(*¹^Õf!Êó± RQd™ðçsa<ÖK¸ˆ"Z@*Âx¢áO¶¦âØqØ8)ä §ú´{²©¢î ùªÂÞ9,úŠñMؽÑ‘àDŠ@5Sä‰äš0¢HëJ[‚`¯ öšî„¤1Tm¬;½ 6Ö»A6QX¢pêZÅ(ÍÑ*¾Â´öÌwE«ÝTŒLk8k$X¢Ñ’X+ãcM¼¶ð!UŠjF}!r¨¹¢Õ²û{Â쪢"BÞÒ>!öYÙkÓ¦B–)lW°m s\­ˆ“;ÆöU Ë4€,•)dUÃÄÂf=iÔ<ÞöÀUÒÌVÏ<ÓV* €uéÕøñÿ¶ÎõÜs[zçP©6L•Ò’¿N`’T‘!$]E¬4Y_ÅÆ#\¶gäm«úûY•ªVˆ¢ƒ’Hà¦Q×)‚™Ûœ #Y!á1RšÛFñ§¹ÌM%w…%‰õ)£¥_¨)øV¢Má10UKŒzaö–›„¤`FNX_¿[moŸ’$qÔ#<(ÿø»ùÿàî»ï»»‰ìîvÕûÞ÷ªUKnÜ(Ìï*†àE¦Äxt”¶jÀqyâ‰k<ñÄsãÆ{øýßÿ)âØj’ç-F£cêþû¯qâÄ>W¯>À`°"Ëh$7¤é¥ãxjäG;F ¨ð XE©Ô„Zn ¨íšçQ˜ËÕŠª·ñò¨S½‚íè…×($ `Žñ¤pŒ“;òÄϪŸÿù?•ííKj6[åG?:Ǿð°<õÔi¾øÅ‡øÞ÷âûß?Ë3ÏÀsÏ5åâÅ:o¾é©Ñ(`8tÌf-‰ã*q¼(dUÍ=¯Ò:Zމ(5QJuPÊG©”꣔«”ê*¥ºKf¶ÌuúfžµÄ÷…Ç»¥~áž—w¼ã¦šÏ»òÍo~”Ï~ö=¼ðB(Ú<®¥”ꌆ|ðƒßSŸøÄçä]ïzJµZ Þ|óÞÿ‡²7±ì¾îçî÷¾ý½Ú««÷f7Én²¹¶,RµÙ”¨‹²l RbÄ3€‚ ÆÈ· ‚`¾‚ÎÀQÇ™h‰-JÖê…ÖBŠ&i‰Ý$»Ù\ºz«½êíÛÝï™ÿsë]sgËch®àõ‘3 i9ö‹ÒœþÈÞÏðÚj´¿—À&)GšF6€½,ƒó¦hwf”FÖŒAÈ.€ˆ3岦‘iÂÉ2” \©P˜eˆÓ™e!˜&lM£(M9Na;në:ņûÚ‹"„qŒ9"iŠ‹AÀfl—Ëä¥)t˰Ñ@mwÞö6úºNQ§Ãf­F‘´„r·K‘mö,ìg&YFÓ„ËLLj58Õ* äìî¢gÛУ•ë׬®"ÛÙA`Y¨E(I¨Ã Íó`™&bËÂ$ Ñi"«×Až‡Ê{ï!a×j4°mèÍ&ŒV q¯‡,Ëà” zÿ®Æï^kà¡ßØÄ'îÐwþ®ûÒqb{7 A•ŠÒEè:óæ&’ Z[SyIMÓ`ð‡""®®­mlÀ±mðÜ¡ßG¶¼Œd:…麪ðj4ÈœL И™-‹üÁ`†¥i¨ôûJ§BÇHçç‰Ãî­[Àê*Œ8†Ÿ¦ ÅE2ÎB59yHShï½GYCs]°¦DŠFÖ뢈!?@HSàÖ-Âü<`š@µJàÜÒû™‹WÞ æ.pöEŸ…øñú2î½èѳø_ÏNS y¹¶A%„{%|?{”¯Œ—è×ÍË8n¼Içë¯á|ÝF@uÞÛžÒÈ:^cg–M¨;Ô«#Ô²)šÖO4ߢZuˆa¼‚µ?†›Ó5´7MÜì´5°á!R÷©`;K!"º¦&Ô†¡š8V40µß"àà@¡^Ei ÊeU8§:0M­¨ÛWÂsü5U t2F—ŒU·á,(WÅÎtB ¡ –ôöp ºÊ€ðª ñø€]U_zUQ°Â±âûÚsŒð‰jè‘AÈt%°ÖKjêÏ&Á°€¡8 ꉨë€wŒ€JT®B‡€¥ ÊÀNÔÀfÀ8zÀ ­š›ÀVuœ§M Ã#˜ »¤uëïØfL-Bº¸6lyK,(ýt5fÊv”cP¢é°×#$„žB˜ØdØ&"]GBe8e"Í=…Œç$Afõ1Š\ZšPvç0j€ÖWã:Ç"d‘z륂T¤KžŠµ©àù™)OLƒùª Òú€á+½ Û€‚éÎ#Ø—¤_§`±y8 —)øT¼ïG¬Þtyø–V Àv #3–)ê#Þ–âeN ¦™ÕÍ…ªRè/¡‡æ¥Û? ‚ë÷KôÖ[ Ä1 cm-†®°ºšÑG>ò ëz¯¾:ÀÆX”"k$–¤ŽP<2ùÿʹõú>>ùÉ?sH_ûÚ#vr¢2•píÚ<½ðÂãxöÙãsŸ{ÿîß}ž¡:WH®Ê6¦RxïxÀYV٠˲_y®ˆ[p”J¥Y˜î¾Ï*?#-$5ûŽÐŒk Ï6$by[’¦¢,€!Ÿûøüç_áûï‡ÒÔÄÕ«é›ß|Ãa´7Rš¶gú¤ Ì3< y†Z-HåÈ>, =¨+ ‘G3kžœgbÑ,Œ1‘ó’_¿UÜsÏ~çw®c~þ.é¸|ù}ë[Æxì¬cî•shòÚÚ=óÌ7ùÂ…×$M¼úêÇéûßÝîgY„·"…õ‘ÜC”fÔ¸œ(_Ù Í)Gè|SܺeãÖ­ øáŸ¤ ÖñÉO^ÆC½Î.¼…ï|ç"~òCŽWŽ&ä¯Íx@† ÚáÃ*Çä¾{GDûyöG®MYau½®çB.ð]äZ XeÍØâ—‹Ìk2ˆ 3An…+Ç?·(Z÷0«@þ çÍæ™n‹ñ?´G…|.ôÖ…ŸCéh¾)(‘3dÒÏDß”K2¡OåÆs^D*³‘VƒÕä»ý÷¢Éÿ€eîH€mx©[0 3 ^ UùLÎpËõb‹J5)¬ƒÂö g¥äÊr'³åR"ÑGµ‚9\U.çŽÜr¹Ö!ÀÌ­ÚžùAP§À¨seùSù¾"ÙNAß/îVäÍØut° ”J7î¨0¤À%awFzÚ@Î#öµW0ö; Ж U °wM–÷¨¼ÊŠô·T=÷HŸæ>¸màêÿl0Ö {†‰X×)È2hšß0ÐÓ4¸Ì0E“!”+*:† ÕÆD;ºNŽa "‚íºk5Z›&†¶TÓ°Çð™Ñ1Mã@«ÕÙ6õ>šed—JØ/—Q®×á•JXqP¹Lï›&ÆžÇóå2´ÅEhõ:Â,Ãi$ôR‰†£ʺŽÌ÷aš&h~^Í<±ç!.•`2CW‰Ýäd0cÒïÃ7M,·Ûx®‹l2Á’¦3#MSLçæ§?Ž1NSt Nœ £Z…~ã2]‡å8°ÆcèGŽ ¶mÄDÈâ|p3‰ïu‰0‡§ï½M+G#F5º½[B\ªÃ FÈææ E°¿OišB7M¦á²V ÆÞP*aZ«!TÒÙò2Å̰|š¦A+—á×j4]GÜl£Âåe››0¶¶H[\DÉ÷•Ôh„¬TBuw«ç+YLß8m0ÀÈ÷A­<"h®‹©®+§(ÏSÂíé\«VV ß¹~çðò2âzq· $‰B)²ŒÇ*K¡Ñö÷¥Š ¬,Yxâžm:.ág»gX;¾L¼° ËÁ}ç Êõ:¨¼Œ‹ZD/'‘¥‘‰è¦F§> ‡.ï/ãjç ßNÖˆö2dÃæ´],—XkîâÌÊ'æv±änÁȦŽ3ÕmLØÁÏ{Ïàÿ¼ñeü?WÅ•wl¼·¥ã ,#ˆiÕS”ž4ä]lF£Ù0Ù¶Õ¿ÇcÕxŒG„É”Q.L˜[V¿¦£ 0œªfÀ©dªtjƒ€ÑTeYôƒk@°Kˆ&j^HÊjúÝ›é–ñØ ¶64†?&•)a ökª@¾D ÷,UïhÓQ¶´ú²*ð›&!ìñPéA Oîø* •Ô .µ”Þ!‹UПÝTô20àW€©®pá¤N0@w¨y*œoÔSã?R¨zC ¢’= b(æŽÛRüq¬|è]YÂòDmKf(ú”¡\qÒÆ‚y{31qfYWQÃôeÀªªdí(Po< Š¢f$'<öèLÇË¿x™zœÕpÿÙZÍM\¾|ãaMQ¸¼Xž´¾2HòñÜXÆ[£‚aºPÓX´©zkr]£´-8ydUìd;4DïÔƒ¶qQA(¬IR1dÔ×ÈÕzÂCÏ= Avcù;Or!Š&æ¹<-,++ØÙV¤YIQ.÷`ÛuL&#ܹ³… m\»v€·ÞÚD¿oáá‡á7Öñâ‹W$BYÖ•R¯3š ÏXxæ™_áþû_Å~ð?Ñ[oµ@”§.÷$³£‡;w4Ü{ï««×P*Ùtýzóp†¡ö3ó< ?3 á€yRú|Áîµ.oÿ|rnHa<,4\G tª¼êÒL»²$Eé€>ˆ¦ô•¯\ÇsÏý KK[¸yó }ç;ã‡?|a˜ÛÖæ¶=>ÍªŠ©ì]°‰É Ì©4­-K“¿ʹÊSÂ:ô÷óBòk&ÈCæ8 QÚ=:ÅsÏ]£ÏþW°¬!66îÁŸýÙ“øñÏ!Šrb~EšÛ ž|å+×賟ýÖÖnÐñ7¾ñzá…û0º`îȱ·½ª®sW£°Mš‰¡ý- ™nÂ¥8n`sÓË/žÃ``£Ù4é;ß¹QT“ÆeRp\Ú/ÿ öC8VpÎ*Éñ¤òʉõyFK´¹Æ¯%RHfÃ5.–f (ün ˆÙ<Í®2T zNmËÇÍš¬ 9Tðf­Ëy®Ø‚àÿ(h¶é‘ÖMùìOxT«B¼ Ég¼‚˜::´e‡Óÿ<r•ÞÜCWéð‘yEiÙÛSi-ÁÁ Aç¬//Ñ9lãíìa XÌ™ƒ@i6(Y&IFÛwWnx58¿yo…~±w/΃¸1>A×§ðòÇñvçç70b›~pðiúëŸÆöAÜ¥B£T\€2‚¡+ZŠil¨V Q¤´Y¦¦ù½a4RMH¹L¨Tù9B©D!€r¯šJdªaI@p°tw€Ý-`¯DC Ý'è:“V&p ã`Þãáó=ýäÏ~n{bÛ7+´sÓVËõ µ ™MHË*n:UsÃTÓ%d}ÅâЫjP‹ˆ ÕÏp4&¤=‚¶ •ø]/+Ay¹„)Ð ÓDé%”P‹€±FÐk@Èì9Âx¢©¹ Mãƒ$´Œ2 ‹3F=†SRùl©u£tW½u²L=Iu[e`0â!«¨¡z*’¤SÕdéL0\¥{ ”@âþQzè±»hÖ7ð·¿žM%ÉÙDhf¿âØa°¤<ZÃøŽP©†B xØ»ô÷mQrW¨>©)t•T1uLÞRÍ ù@Žb™2–éý˜fc¬‰$Ug4CAš4óà Êy µZÿú_ÿ)NÚ§Ó§Û´»[&¢yıNùÈÐó±³ãÓÝ»yá5,$jÕ ö¡Tht4Ôëe|éK?F‚žþ£˜LHÖË2uo`Q–Ícsó.]ºŽåå;tõj ãq>¥Ð,ýy"ÅlJªÈLeÚ‘j¶òQ¨C³ €Ã´dRÜ .PR X‘¿Éö'Rlç4©›‚1=ôP_þòßâ¾ûÞ á¯þêiüÉŸ\¤ÝÝ\Uº%ç8’ÒmMrMR…u@³FpQ&ôIÁÛ2GYÚ…r’1&µœ©5sŠAÅl¢2žzê&ý“ò ŽÝÂÍ›Çð½ï} Ï?žvwMR×gD4mD—.uðå/_ÁéÓ¯ÙÅŸÿùgèßøut:õYe¤t7²oõ¼¹´s] o¦Ù(9$uM™üç¶EëÖ›ß]Hq÷î ^}õEQBÌù¤?&…fiR˜—Hç<¿E‘âÝŸõî4)˜²åÂâž ÉìvHÊ‹ô‚îr‡©¼q­ýaaß‘B8gŠ–dºïÊd$Û‘ÌöD’‡zúU’¦'+ø8¬¨&ˆ:’.®STúP±?¶%岫’|nUþý^¡ É1úþÚÌ©‹j…¼È\ÜÜ”/É%ÌýîJC’»‰HÃ2Ù’û€•c@¿ ÚÙž‰ä×d]AÁ[ ß_´$Û²ŽUi>Xš¬8\ZYKúóý•­"š”ÓŸ–> h1èÎw•TÈÆé$ËÀIBµ,Ô:²,£4ËfF¶ˆ°JD±i:|‘¢ÔPÄŒ ŽQŽcrL“ý$!-I`9BM£4M1q]Ì5›Šb7‘îûˆÒ¶¦™ÑLSèõu§¶­Üˆ‡t]GbšyÂJŽë‚4 ¸Õ‚išÓ”ôÉ„õ… [-Ô㘼V ¡ë"Ö4Êj5EiÒ4hY†°\F캰G#âR ”$Ð5 µáRMC×0`ÖëðÆcŒÊeŠm[  ™•Pz0 í{î6?´Ó!k:EÕqº.ÏÃÐ0(¨×Ù‘ìƒÌmlPY×$1çðM2ÜÜ[¡…ã3Þ6†sØß‰‘† ™%ÙÔ‡©ë@¿¯P×E°³ƒØ²Èi6Y"BƒÎ#0ƒ&˜¥!ËÀ“ Ë‚¡ëЂ¤ëŠbÕj1M) 6›Ðu]=ª£ˆô…ÐdØ6lÏÃÔ0(˜ŸGÉua¤)šÚÜ×ëÈj5DÃ!k“ Ò¥%À4áO§”…¡¢åânÓT¨E©D0MFÀâ>rt'›múËöCØ5N‚²‰B/ U¸Ç!¦Ÿ.V¸Lݯÿ÷fo‘ú¸œ2lM5Sq„`¤Jøl™à¹ ÝnD-¬O›¸E÷âbë=|îèOáV2ü|ôz~ã"wÕ'c•Dî•Ô¶kšÒ‘°>û™=<ôÀ ZX"‰R¼ÿ–…½½[×zòTô3Vt€¸¸¦Òð¤rv(¹@f0¸ Jü=ªâÞl¨§%Çy¿ ‹Ý¦™õlK¾–¥^kç´¡Ýì“jâT t¥bà_ü‹¿¦§Ÿþ)êõ>Þ|ó!üçÿü›xýõ:ˆ6äõ œ¢Õ®O3o&ÇÝ)¤7O ç(¾[@))xA³xÞzNà.Øû@>gâ±Ç¶ñ¥/]ÁSO½0¬àÊ•'ñµ¯=ƒÍMšÖ%æ\ m(S«5ÂïÿþÏé×~íU8Î6._~üÇÿ3®^½ˆr;âœïÐÌ9GÉr{çi>­D¦$Û•l–G9o‚fj× €ušÑûjŒ‘eyó¬Ë¹Ë ÞsÈ5)3ÊÔ²›íBvFž[Ó,Öº.÷ËÃ|L3Ƕ<‰}¥€0Õ ™<ÁΖsÙ*Tö‹B{¼-Ô»1ñ ˆe‰jʱû0käÝ`ÿ‡ì  fq‚0@æV*tæ¥@¹f¢%ô–R1å0Fw ¼1‰fþ„B \&Ó|CŠ~É‹ÌÅʇŸ«kÙŽ°à~]ÚV¯ö×:V£é ž T-4U4Uù>.\}YnI]NT.Ló=ÙÏ%É©XzÁ&Vò>©_ )Ų*h5t9Fi!ãÑDf[ à$Àî6P~X8Ú» Ìùj›¨ TïÏ%ž…²Üó"xïËzÓ\ëà^9Gm¹-Ê"Ög€Î8úèÈg”~ò¯ƒºo+à=OcoŸŠ{U–e(e]§ža F„ûšϲÈ6M•­ëˆ ¾ëRây˜ZÊÙ¶©mSZ*¡’¦ð5¢Z ÙÚê–…~!±,Ê„ë_xA;I0M: i†«Ù$?ËO§*kÁuáDÊžGÓÐ÷Ʀ ÍóPMJk5d†o8Dæy˜8,MCše¤‡àR š®Cëva†!q¥hëë`×:E¡ãƒ*Äö÷ZMÙÕfaqz­ v›øÊéWϦ—“gÑ-7åIÓ‚Ñïë7ƒŠv‡üFx•:Î×è¼þ+4¢>ö±D“@|ê“PöšT**à±ZQ´”j ðæð¿ùk<¹ð7Ð øñÁgñý»'ášòG‘jGiXLS!0•Š*r%yq¬Šf"ÕØ„!Jc2ÓØíÐk7· »`} ìIºv¨“¥û¨× vFhÕ‡˜ol yX9™báÑG?~öcmúõoàôÉ!–Fõ ¼öK›~úÊ<þÛ·ëxí5[w€f"ïƒÊ‚7™®¦yÓUÍWª6à΃÷«Fp=@›´2A·Ãô àú€¿CE€~ù*ï"rIé} V:…Ô"EeÂ0ÞpÉ[ ”€–7ÞÄ;P|rUìíYøË¿¼½Þºuk žGX\ÜÇÓO¿BµZ×®ÃÆÆ ´Ûšë «µ NO¦Líó¼U|ìc/aeeôGŸÆtšIS¡åN;4kzö¸~ý{ì&-.ÞF’܇õõ#RSåÅáZn.O³¬‹ªˆ «þÃ>©J!Ïý€ŽQ˜Þ”B6ÏÖ˜¸#ÛŸ4+ôÌ3ëøÒ—~ˆ¥¥÷©ß?‚¯ýüèG÷b4Ê‹ÂuQ‚®~€ì>ÊC¥Œd¼¸Ųœ~!íyB³œ”œ =’"ût^ ŠÓ˨RIð…/¼‡Ï~öuT«#\¹òþËù-¼ôÒ*²l_¸«”ç•ÌÍíããÿ}ñ‹?ÅÜÜ>¬à?ý§gé§?}“IŽúä•kn^Ÿ#-Õ¿•ÂhxAP€ñh¢H9'Ëε {Ò”äF˜oI#pTŽ[3Ôj5- ™š8*D÷ ih{r>óhg µêKÓÙÄLã3à®\çn™ûšöqêKóŸgµh‚h䃃ž 99ï&¿/}šÝ»yóº„e©^ÿŒL¦ùN!ÿ"§/¡0ñΠθ0·fÎN”çQ†òûœÞ”#’ƒH–ü¿4”³ßjò;s­CâLæ,&‡vbž«h²˺4Ì.í=iÊç%G‘f!ÇCÜ…)–œa’]ЃXÒÙ3ÛYš—‚_Ü©2cZRh ËšÙÂ’]pìJe»"9'¢¡P.1fWKþ 5¢L„íY0V€¥c Ïzoª>\²©"Ûg²3¡ÄÝtRGÈöõ%üÏ“æÂ“ŸÝ–ÇhWž.ç:µ ¬}4ÏÀ/~ ìüD׿råjJtË®‹a¹ 8ML°mh¶¡eadÛTµmX¦‰Ä¶‘hB€BÛÆ¤TBEÓH3 Š, •$áy——)*•Ðê:&Q„¸T¢TÓ`Û6J• ÏyžBª²ŒNFŽê:ÆD4NèaHž¤Z×;,u»è¥)ÝdF¹Z…«i0óê;Ô/•0Nªù>8Ë0Si:E¨i˜XÊi /Šº¼Lv]Ž®£ËLÁåehã1Æå2¸Z%g0@T¯#ö<  8¦žm£E¯Ó¡½åep¥‚x2AZ*¡2™áºD·o£ypw8„ßhP¬iÊe¤i†vTÇ¥G&hÖ&ô—?ÔðÚ•GæQ-tïÜ:.œ“ÁìuôC†‘Bc$»»°Oœ€ÆL1ÀÆñã”F#Ò DQ„(ËÈlµÀÝ.J£Ò^¼² dŽCˆ¹õNeQÚl¢ÒïcB”˰«UÒ„• ô4ªU˜ŽCfAË2­éY-Ž¡‹»UÉ0(î÷É CdÓ)¸RAJD¡ã€âXi\W}„… ZÛóx|倞¸÷:îâúAò4ÐÙPE~¿¯¾:ÕœøÁ$Fw®Ý-ã­ƒtª>Æ‹oáÃÎ5ªNh÷ “©+ÏfyÉÆ'&\]Ã?_þÝWû%ÚÑ1ü‡Í߯•ñiÀ š®ÄÙ®3C-êu2{e¹; HåZ¤ªèÜl a³ìïÃîaG]8ÀJ@u=Àc§çïÒÃñàÅ?²MÿðO<ÜÅ¥K=<ñðžüÐzdŒ^ØÅ‡/ôhµÕe3 hoßÂúºKúí9¼ð‹*^ÿ;vz¦šØ¦¡Bn´\™–©æ‚C…æÄšÂv]!ц`%”5Bͨ”ÊjТ”ê€UÊ1al‘GHÞU‚n¿Œ œ¬ˆkJcQ1Ap«3VGbœ*0™­:a¨"_¯(¡7@}˜X@ß&D#™4OeyÊÎCsöY%FÏ2•¦;ªØÒB¤eÁ“kB(®©†•«€Y!Äà[ê‹"À·éôñŽ­^Ç›Çéöu0F6È­TðÀ…«ÄHñÊK÷(ý[@Ù&Uæwè\äx¬®;Þ8w.J¥Ê ­}¡HäFà‰zcñàÜ ),¿¦´Ò°NÎRŒåô¦=i2ù{NvÕ›5o$ ´ S(zbãË2ƒ‚l_>§FˆY–ÙÁövD·nÂË/ ÕjŠV뀎.\Áh¤Óþþb!mxf W¹f +…œzÓž8q ¿ýÛ‰­­{襗Î#ŽûRxæEi.pÐl*na¿B÷ßÿ&î½÷]ܺõ :¦ûqÁl¾,X®ÐØ´Ç"…i¥`ˆËÏBY÷¼4s6Í"soÈqQÀ.ìÓïþîðøãoðñòËOÒüŸÂö¶vØ{…Äö·!ÏìXK¹Áx®­` áY¡×gE—2¥áØ—0¯“<+Ró)ùQVŸ™ðÛoßG/¾øxà&Ž¿AgÏŽ¨b¿86@‡>“CyS‡"îõ9·T}î¹_biéþéOŸÂ»ïÞ/Ÿ5Ó£gtš˶Ðåv{•ŠŽ'v°°0À«¯“s } 7ÄÛÞ©ìwŽ8RƒÅRœÚâeËrr¤ÈpWl§’¯ÁpÝÿìŸý’~ý×ÿޫշn݇?ú£Ïãµ×‘¦¾T€÷Y ÷ ×ò¶¬<‹$>(¤MÏÄùûÊ‚YÅ ‡?‘ß›rÃëëDÀ†\‹ ù{ÕjÌ¿÷{?Á3Ïü˜}ߥõõGððQ¬¯!æÏ81ÚáßÌÏ)²-Ù÷œ/¢KJvOÎkR çèE~,qÿó äÖC‘ÇEW%/¯2§{ÖÄm+wX %Ÿb,ǹ/M_N9Ë-l›r¿¹ržã‚‹˜Ë³cï„èºÜ§SA+|±àmË58dà©#y¦Bdv*ÇEW«¥4å«„™ÅíRNã;ßЦ–þ;)Þ‡)ßaaZŸS{$4ÏÇ`](:â „É,¨.‹å‰Ì¦òT—Ì„¡PŽr:^py•”4x&ÚF¦¶‡MiLÙ¾êL nŽ„â$:"É­Õ @ Kr¹,ëž+Ä’4¤Ð¤ƒ³™è7¥è>¡š‰L ÿC«YV™4RîK¸!Í yläÿI™RŒß´£Y°•µg5f)îIñIáÞžåCÒt¼óç ¿ ý8põ5EŸr…íÜÿ 5¤†\~¹feà{D3†2Dü[q–òî óH8ó/z´ù:hýûà95?Ñ®ˆŽEb“T^ŽZ½E¼†t’Q–‘5*ö#æm›»†¡%Ir]d¦ Ã0Ø$"hÌ Û&áü”¦`ÛF¥Ù„Q«QT*ñm€¦¦‰©ãpXŠcÔ㘸\æ®h’ш»†g‡¸T¢êhÄ©e!,•´ži2lú`€ @Ž„V†Cr1c Ð;:9#µmøŽƒˆ±³C»<@n–¡º»‹Ì²ÐªT¨ð~©3M –…¸Vƒ¶½M¤i\Ùß§V»ÝR ƒV Öx £T"o:åi½¤ì±Æýô/öèÁrBçÎvð‘wür¿…øÕ×ð½½ xñÞß¡ß:ù&.,¼Ês‹}|ä´oýÈÇË£¹H05P6ód2~ì’ÅEt¶·QßÝ…–eZ–¦¬ÏÏSªö‡h{‰i¯ÕÈ1 èÃ!xm zÅ1¢Z ÜnÚNa/."Ž"Ò”6,´*´Z¬yȶ‰{=p70ÛmŽÆcjv»8˜3¸P IDAT›C ÖuÄÛÛêufÏSÙqLh4ÇŽ,ºæá7ú¨bá»×ÇÕ­ª*D{½ [[„ PHÁƆ¢KE‘Ê’X^&ì횆‘WÃ~ÖÂÏÿÖ¤g?æó¹¹=úhýU„•«ða Öp»w–4ÃÀ‡æþZ6Ånû"ý×Û&¨Wl5yغÄ‘¢ÞJ3Ñó„sm´ i&y.‚`5¹„µnÙÐs±3)ÛÙŠÐxnç.7²L;S¶¨[¤ §²Lh›¬¨¢»Á¼ZñÌõf›f¼÷<\¯GÀ.«ï«‡‹Õ&–QÖH¦£y–Ä‘‚›’™ÿŽÖÖ¦øÍßü.§Gÿþßÿs>{ö.õ«L¿õ[_ç äo}ë3´½='ëŒr^††®W°´tËôóŸŸ&`3S3¾Žäut 9 ¹p;jS‰~øÃGøÔ©=œ<ù>÷¹éùçUJ5ó )l-É#x‡eèÐmI¨D9{Uök"‚äœK?’FaDD)1kд1}ô*}æ3ïs³òtº@?øÁ‡ùÅ+û2ˆ¹Í³X੸®L«sÉHÄØy(`…€e)Tß—}¶h„WÍ­~ùT­ŽgN—¬”£„2»­bq±‹çž»Œ3gÞ…méw>‚^8ë×+¢g §H=`&,â©§®áSŸzªUo¾ùýèGOâömOrQœB!G=gô2qÆV—íçB"znhë”b‡²Œ®4|sr]g‚lä9–  µü~c¥i˜#åB¡Ó¬a)Ëö&²œL%*ü~ Û˜o;B9ó„—7œÔ}¸–7O¹ \îÑ\üß—F +×”bYš¡R.²ç™I€Í3K”f÷IÄꜺ¤î‰®ŒËóë¢BPÞyÿŸ‚ hÆ?ØhämSPŠD¦ê,M†­aN¶$B´Zî'I³"Ú ·#°íåÈ…1c¾qŽœˆ!#%ª@Í%<$ú ==Õ ‘-†8HÅÒ $²ŽŠl¯€\¤ËòEÓA¹“õ)¬çg†`|TÄΉ*ú¹%€øHŠþT5ZM cY=CrêÚ(¤pS·-“¯y¡eUäØîͪÉçâLeÌ\µi(ûwLõ­4”Ï­ÿ ܼÌ­|Øù uoЍ¼!T_1’‘7f¾<2ɧ%9®7…Í,LM: á§ÿ7dK-h×®€×ÿXmïhÖ”äy((Éy2s) a¸M„¥8¦E€·4Rσ¯ë35‰xèy¨dyI?ËP2M ëB"Å&Žcâ~îxL~³ Éð<® w2Qt7]GÅuáªìZL 㘲 @7Ë0ÁÓ)Ñt §ÛER¯Ó3kµ9š†}ß'}}ÇŽaâyÌÍ&iÛÛlN§°ææ¨»¿Í4ÙÈ2*×ëðã]GEÜÈ2 Cl´ÛجVŽFtÂq¸Z«Ñîd7Iе,Ú}ôQÎÆc̽÷•\é#p$ÀíÛTÒ4„'O²æy0÷÷I/—±Øë‘ñaÛ𠃜$Q*!fæþÑ£”jGqJÎpwû}÷åøâonà“OìÒåÿj#^;ŠJw;¿<Àׯ÷à¡3ÇñÔܯpüX‡þé?ÝÇéëxió ÷#Ø5‹íhLa§ÍñüYssˆàxS§CÚ‘#*é;I@óóŒ½=¸Õ*ôz<‚ÚmJ9K’<¾ïƒÃ,ƒf0C×4Nmš®“6#5M†ç©x‡n¹†Áƒf“|±ãÀŠ"hDœjA,ŒFÀ£¨§Î”ñ{ý’Ê[›óøÛc€¿ \¹\»¦¶GÓTÆE+m„ï¥#Š7n0FcB½>Æ'Nã/ë4_ZA¹êãé3–ç6ÙÅ>>»ø6.­Þ‚Ûx·w„¶ƒ¾ºöMXƒKeÕÄ̇ ÝTÂb0 iÌ@†Nek„Ì0ÙŠ#PÂÄ J2‹y2¥É A¿k¢}PC§oòͱAAè248—mì#Å@š¦Ñ×ê@6€æÙà©OØ>H#ަÀÁ6àX …pÄ¢TO™K6¡R¦²»õ«â] îª§Ž;d$b¥«¹3±¶f¨¯ óÂáx„¹B‰R›¡UþH95ù)È€’ vIÈ–}‡P½ 8Ë€ö$ÐÜeŒÞ%Ø'ÁPfB#a c•bdj —Ä*H0²”-ï¸Mðª€gª\g¢|øüc ‹‹ zÈàu‚ïú0Zª!v£&ïß„QÍ_#8&«7‚©Šø¸¥F`i H€;Œä i…‘¹xïÝ™†WÓbø`mH€…ƒí9^™»CÍJ˜ž¦¾LG‡òî®I¡3*°RA7R¤˜…‚Š…Ê2(¤ùŽdšoIÁáI៛ûÚÌ/¿%EÖ¼d1ôXMUs.{.d-É›c,S`C !Cš‡f( n™ O¤Ø:&Û:£Ê3FÄÀVV®àË_þSêt<0'ôíoŒÿÍ¿ù_ðÅ/¾L/^Å¿úW»tùòI¼ðÂC´¹yT B_ª1ÆOü„ŽÙÄë¯aHM¡¤ˆmHÁ«3»4KG!ŠJô‡ø,þí¿ý{ìûüÊ+_¥œ>HNÁ:)r±Î3êZn?³ Å}T ¿Lå¼ÔíðU6÷±¶á+_y––öE%úÅ/á¿ú«ãèvM"Ú³AÌy>Enëš±:7ZN$ÊOYÂíXô5)¦7¤!˓٠AŠ'”_'2¬>.“|KèPËñ¥K}|úÓWÐl®S»}Ï?ÿ!¼ùfE‘i. –}64 Ä¿û»ßÁŋü³Ÿ}‚¾ýíÇ`"ŠÁœ‡iÄ8hNJ¤zØhÈñ¤8hF "¹G¦’RêS,z \8Ëu[ä)Í50rí'ÚÚl&>‘æm^ÕŠ¬§%È‚) YODj¹C›)ûi\v…:XgEaÛ—åM¤iØÒ”õŽ%9%ÙÏTš€>€‡e™žœã\WbKî˽‘È=ž ߫ҨäÍã²lÿVîŠ`ªmjù0ŠÂhSTƒë ä$ Og.Q¹=ìa*µ-W¡[XVþ;™ÚSà9)œ¹à:Œ™-,•eº¿/ÛW’õ  ò™ûY%Òàˆ§åhŒ>9wbjÍ@3ZøŒ {¸(àï¦8'ÍË¿k²½ž8§—äö¥ßcùÙT±£â^nÈ6Lq8!i Ë÷ôŠ´Z™:88Áç?ÿA¾ùÍe™Ï8Ú¬ ^ÍqD¬ÚMÇ Ì1k¢¯¿/ XÛ¶,ˆÝ‰ÀeS­J“8M*ƒnLàºÁ"¸ïñÌ3÷å~áUyöÙ—¤^ä›ßü˜úwÿîǸs§k\¢kRû\'§Oðë¿þÇ\¼xéôœüÖo}T¾ýíÇÍù¥Ê8Ä›D¶f’°qÅÒØ5¦ƒ™I¦ Ð^ãUdAjž˜ª|é1­¨Lµ*ò²³îl7˜ã5ÍýRBènšm§F^65ëÌR.g>kW M¹¹Î¥’ÔªIÜ0¦cà÷K\,’¹’”¿dHàeWЮÚ[æ=\2c>f$h=¥{߬ãÈðƒflUÍXÀ¢zùÛÜD½uà¾ü½ŒöœÊòp t¦ì›”Ë+ªè”> Á‚#2# í7 GÞ€ªø[Iˆ½H8šË82K¡m R%¦´2Ú7Ç5hå#%fs{*Ët"êæ÷Tü9l3-³ŠWZ¹›àíuzd€76ß_5s-‚|•JÛÌx¸Fjd¹ªt2/ùb:VE3¢´ù1 ªìÜ”ª[s³]h’œÒžfÕc`–‰kVgÙüìV4C²XÇÇйÝô¹´ t©”.•±J¥®fŽ–AÞÒ/Õ®t>ÎÕPOü3äòqØ}ù«ß^èI”1›½„òõ•¨Qž‹[*¢0¤ëy´¢HÓðZ-2ßWE“e]ãX<÷<ÉxL<›)W„Vž“ŠZâ88ž‡ª×Ù¢  Ñëa›µËa¨Ž‡!¶m‹U¤QÄ,ÏÙÊ2Æ–E«Ñ éºØA v³ÉR»­¦½žì×jÚŒñÝwŠ`§éîξëÒÊsâ2Ï£=™0Žcfó9~qܶ96b% ‡Y&ãZM¹Ó)—‚_)Ò àÎ¥KȽ{ÌAÕ‚@¯^‰e‘ÈhÄìÄ ¢³g•ÚÛ£ã4åî½{Ì‹Ëó¨[­z™ç1 C¬¥%¼8&T6›QXÚ:Êwr¶nÔ8¹>âÔ¥ˆZ.¼øn‹vÍ‘ ÙÀß¾§Òl.·&+¼>z˜V§ÍJxÈ£'or¹{—¾±Ÿ%ÌðDðê>ê൴„=™ÇLÓ«ÕÂmµ(vw…FCI½Ž CˆcT«…locYžã¬¬`)…é"7XÓ)bµZX­ä9j<ƲmZ–Å`2AÇàû(×E<¸Ó!÷<È3…ë!ïyDðW8{^ø‰õ¯cÅ ÿÇK?ÊøÎ¼ñÜÛÈsE½®½&ŠBw0šMxk‰[Ž:§O/~Ž¡€ß Ýtù_/~‡ßbs²Êÿyã3|qï¼yÓåÊöy®^æÊm®>Ä•›«\¹¾Â•k®ì^âÊ­uueç‚\¹}Œç‡óí»§ùîý“¼¸}ŠïÜYçÚÍ%®ï6¹»'ìîN)æsÔpñTëòj藍Ž|½ ƒdÚ©{:Ñþí6 ¶Y!D1ìÎô{Õ²LEÈ…iEó™6û«¯Á<‚ñŽÂ^Û+ÑMrQàuuaÏŠ¡;Õ¨,†t64{à7!9Ôt™(¶#ao¬Ñ8¹‘´íºÆýûÔ]¶±RÈz0nëd°¾¹¥ØsaœÁº/ºHÙÔçÅÐô Ì!°!ꪵŸ+j¾à5 Â[7!njo ¥ôr¶¡ÙX2€ß ÄUduˆl=^g¨Q 5ãÞ”®èñÇ@‚7`Gú‰%Øz©H(\êmáèÓù/¾ú™Ó/„yHâ;<÷¾7‰ã./¿|Ñôgà̶èÄ¥ˆLÝ2 ÖR5)2URËT3 ¤å[Û’a×3ŸmVjŒ[æÍSWº‚»g>?o‚¸¤ÂQ°+ÄÑ~…,Z¾A•Ù%‹àÇY€p$RÓJðR ±—êWeŸg¢‘ l{—}èŽñ/þÅ/ã8—.ÝáñǯIšöøú×?¡¾ûÝs’¦5xàÏ<ó~øò|4h·üèþãñy¦Óÿ‰,³ØÚÚSy^Tµ‰ÛØð¦æœë^¢åOnß>˱c.]º†Rs®_Õ‚ÝVSÚµ]éHÅÑú¶™×Ó@C¹î!ïÿ÷åg~æ¼ÿý¯ÒlììœâOþä)þÃøöö”!fÛ¦x˜yv¼Bµ%iyWécÔþ–lk`\›gæÍš·µ2A¼_¨Àº3¹¹Ž à¤êõ\ù©Ÿz“|ä%ÕjróæÓüëýžþq<©Èì6Ì5ßà‰'nðK¿ôªÕJøþ÷–óo~„Í͵’T]9WÛ$F–I J)\Û´T"Yl‹áIEw³t²V>”Uö?C&[DeGÝÛp&‚ ÈÞ6 üof’•’$›h§ì†•$o§’øÌ=ÃÕ**l%Ÿ£^‘°íO’L-€ó3Ñĵ°â‡Q&†KrÙìËC"fN’cŠÒÍÛ«(o­™ûÍW ‰êYiŽi:_'€wÔßËh¯ªå/šuR,ü#J£·†DÛ~%P/ù &/¡VGÆn¥!]h‚ïí…ØQ;Ð5žR—ƒ­…ÿƒLÍ÷û`‹ý–´"KÌ8Z`EÆ8nÏ¿ œIþ†™»¬TšÂÇ ¯ã”áxšîCi´WB–Y\:óJV3O¹QÊŒòÓúâ"eý¤n’Š]óóXìIÝtkF¦ûSj˜úU’¯eá…jÉÂܲÍ> ï„å’² «Aï8Ä2x{á*%F‘jÛ@ÅöÍX®sÁÒCÄNÖðÏPgÖ‘û/ ¯ý®^G-]·ÏÇ›N%ïõTžç2/ ¢FCŠímÖ‡CvÚmÉ&ü0¤V«Ñm4HF#’шýFCRy,Ï%ð<Γ]À=8`†ÔŠév-QJüш"ŠH;ìNGæí6ËwïÊúl&<—ÁÍ›â(%u¥p”’|uU¦¶ÍA³‰šup@<QX–ëŠåº¸Ó‘ ”/;;Ùcåx"ï쬰פ>>Øpú}BfÛû<oÍø,…ȩΖº¸¼#Ïôî Æ®L‡ûÁ2AÝv÷Èju’¢ ¦Yš’‰ ¶ÝlêDQP€H j5dk‹¤ÑPE»mEŸ9Cáy¨ím-+ëû(ËוÂu…ÙLÏ'ËD‘da(…e‘´ÛXµó^OŠzéõ¨]¼@º².Çj Ÿ=ó5©©CùúóçyãÅòÎ+pë¶>F– kkÐjÁÍ›:Èn6µšT’++Š<×’±'Nh¯†N‰tZŠÆªt‚œ_¿ôŸYéÞc÷ðÿöµ÷só05Ý“x4!GY.ÑpF4œÍS¢áD¢8—(ɉ&‘D“ˆh4“(-ȧCòá¡d;÷…Ñ¡°ñ¶0ÀΆ°½ wà`_ŸG’Ó¹ö“°lmLç[§B#’¡†Jª]O†0H­šP0¥Ç,_4LÊÑR°“ +ºí V¡hºFÅ)ÑÞ^OÇ$¶®µÍmXîh•¬vKWo߆½ć0Ù’LÈ<­öÕ¨ õ–Æë»"ø0M…lñX'RóæMÁJaº-¤8ë‚“j¿ «&¤8=¡( ãÁ`ƒD¨Õ „f ÆØ|j….š‰bî ‘¥ÃE´ ß~®áYKÏ¥m~va¡#¾6Ì'PÔµ‹·Ów ÎDð °2 6Îú QÉ*ò‘¿æÑG7)ŠÏ²³s‚ñ8accLQ$²0S ÌüøÆ„­mÊ¡kyG ûï.Ë3ϼÊåËoqóæƒœ2ªSúe*Å™, Ëb9rû¢,ãºKòì³/ªÏ|æOåÙg_§ÑˆÙÝ='_ýêÈ—¿|^îÜY"Ï•Inꦺß6p¡Ž¹.‰Ò“»æúôŒÒQRqIŸhÔÀthÍü/W " ”’¾&ØÖ–Ë"-ËòùÄ'®ó³?{E.\¸!ÛÛ'ÕW¾òiëþè9 Ñã/õ#ËóØ$ 3þÉ?ù.?þã/êÿøYùýßœù¼f ;…©þÛ¦ !¦ºŸ™î@Ë»AeZ/’ØÄ¸åZ´K©är¬²H ÆFÙi` W5“ì›yÌEKûÜ—†'fqü\A`=Û“|d[Þ|Ó¥Jâu(G%xvJ“ƒ ·#4äûÐtò,£HvhÖ½[é ”Ý™ºhÎEiz×1ÏœïãÆìò³¦éRÔd‘äÕË{Ьå²Ë71r»Óᨙû´$®wDÏõÛê-sÙÒË"[À‹ŽLߤÂ)/ec-“p”JÖ¦Z/¶!a{&X¯à°¤ô2´Œj“³PΖ’«Q:…[yVÓØ•À4˪»ª(XI‰5{Zi•‰NPÑv0zRÒžº&i2õ IÌ­fÆWJ©ŽÜ4S}Òð1"“´T–óÄ$&fܲVQʺoønÅQ<]øv™ –"r¥U‰u3Zb™ßM lË©ˆÈ­šÄ J ºëOAp9| –#}.Ñ‚#"ãŠ~Äž‘³õÌ\–IØr ~ð׋Ça÷%xýwõ˜WF÷‚™û3޳®UöS&keNo»®xJF5ËâÝ ÀJSéO&dIB8R›N‰²LD„´( I¤™¦øIÂ<Žq²Œ ËdˆëÒ´,üZ¦eɪRÜëtˆëu’FC6»]\W&J±RÀmK½ÓVK’шIQÐZÓ)Í$!ZYaìºøI"£v[í„¡¨½=ìñX–›M¼½=ö³L|Žïíéïd“µ5,ÏCííÉCiJzþ<“Z$ò<œáhi [)!ŠÄŸÏ),‹¬^' Cf/Ê© ÖwwÉww%žLŠ‚hŸç¡,K²÷¹ŸT÷îµ*&AÅKEó––ùµ_ûKΟ¿ÇþþŠ|éKáùçϲG.%dK¹ž\Nçó²#ˆZ˜üMÌZnɦWºf'XSÉßš}”“qgÓ7ÇX/«ø¦c¡L·)1I£§l;—_ù•Wxê©!;;KÜ»—Ù^¿"Ÿ[^Û$C‘,$okÇó%s,1ÛÜ­X/—fx®ZH'G,¸Y˜ûøºYck•N)WI0JèVR1,%®— ¿fÍ$£gM¤›¤ä/ˆTU·6«4t’Š‘^J©­ÿ$&ˆ+51Qù•¿Kæó¬òhR¢·³P¢RE¥j±ðõ*û 7pÙ[ÔOŽ8A™cVЧ3E}³”–Låš`ü¤iÝ5—º œk_‹VåÑ92ÉØe³Ý¼2g~Åf¨L†J›¨¢Q…-ÓUAUš±ÆâEZIÜ5ÈoU|NŶ%¤´¨ÑçÔACË»g {ÒXâ¼…4+.܃ î†ù¿‘Òß@ÖÂ>ð¿À#§´ßëŸ×·CËH_79ôÄìÃIãŽÌ’o™î‘)áÒj©•ç¤æÜÓT–•ÂVŠ@„P)™‹à*E’e(Û¦nYØAÀÄqhŠÙ6VS𮫓í6#`†’;ŽL=¹ã@½Nà8¬:c ǸQDâ4›ÊŸÏ)êu”ëR!NSJ±·¼Ì¬Vƒý}Ya%ËhL§l4›IB¿Õ¶mâÁ€éxÌŠëB½ÎšR¶ZjÇó°}ŸD)æõ:ܹƒS«áç9‰ï“u:dž‡t»ÛØÀšL¸=Ó½u‹ho;µÃ~ÇX®KfÛH*EaY0›ä9Æm[ò,#«×5çF)ÒdÌÍÍÇz]> ×rå;[ç•¿\'¼wOko8¬¬âú‚30y{‹w³ËÔTÊ…Þu.-ßá„À¸y‘AÓ9ž]0­×ɲŒ $Ou˜$$º›cYÐëiï‡Á€Âu‰WVððæs,ÂéG)²vU«‘;ÁlFÛu9¨Õ4g¢ÛEú}T¿Orö,Êóla`äC‘­¾Âs½o³Çã·ÿòÅö-]ýÏó…ù^½®ˆ¢#xó¹N.êuH¬¬ÀÒ’î\xÜ¿´ŽñSï=äÓ—¿AÍŸòÒÖÓ|þ; Ôf}Œjµ·güæúó–)›”¡ô¾0rµþîp¤Ïe>×ÉÏþ¾ÞOêó- }ÎÓ‰~šÍ#aiŠÙ’ ’98vé®7 I®ð[ÂÔ7Pâ.ä5pp{àø: ™;²{ù˜Ì`b íÍ¡uR;jú‡0ÛÔ\ŒÆ%Xn•ÃÝ1.Ô=HçZÖu`2Õ㓺.¶ªê…îðG "F)¹†G9ŽîäëP· Ýhº~¨™v)÷°ûP[Öä욯áÇ“ºÐYS„ŽvJc¸¹¥¡YÙ–Ö`8ñE£qÚ0ßÓ ?„Ñ=!غ£µxµ¹ÞÇ,Ö0+ñuÈ®ë2›ÚÑ¥¶ØƒYO_úüyäsîâçÎlðWõ&C[Ãʈ‡ýÀ÷Y_=äß>EZ¸:±(<=¯nìB»y1؇‹îI1×Ð)·%Ôî+œã‚g ¬y ìã¥a›*¼[Á4+X†®t¹gÞ$ž!Ä&•§ö’ ZË€…YXb¡’ЛT,{ëæŠŠ/AhÞf«p¶eS–#¶·Ïòä“orò䯽vŽÉdÆîî’ܸñˆzì±ëòÐC/‘çKܼyÈØÞîó­o]¢×kÉO|û±çÙØ8Ë¿ü—S!kk67nÜ-ñT"˜Ôà½Òl°ìÅ›„è­#X‹ã¸<ðÀ8^•«W/Q¥âT¤‚§ +BΜñÓ?ýM>ùÉïòàƒ7°¬W®<ËïýÞsüÅ_<Ç»ï*”*9,mœ–àõšèÄ`O-º T¼ #òˆ£S–ûBålUJ’^åzÌuçëˆ[ê^n™ ÿí¶Ï?ý§ßäCz‘F#åÚµ‡å _ø8ßùΣ(56ðý õ7?Ò ýÀîñÙÏþ)­Ö„·ß~„ßø±±Ñ[X"m[v‹TåšLL'¨,Ûo‡YE#´JòÞXXA36c/w¿T33 YVÅÏ1InŸE"b›¹OLTB°6埸͓O¹zµÃW¾Ò­˜;–S3–² ]÷e„tÙàzf‰Ø¹~%I ¼?JÎR^1>“Ÿª¸±5Ìq¥òUåþ WË7so™h±cŠSf 5 gÓkoüý þrSYŦ| ™W„jŒjäaÅg!¯ ï†å”U†jW¶5]Òd﨓Q5È›UeãJ"“WÔ•F"z^I¢J_Çyqöp…ƒ™ÇéREõ»²/)L˜ãï™aRñª”JG%5’es^-³¿Ù‡“¤•ñJ½gºG©'+üa…Ëâ.x0”ç˜VP‡)°ý¬? ÇÎÀ|Ôî }×S™$ ½w 8݆ç~ : ƒï!oü¶Aêškùª™›’/T·TÆ››ñ¬˜dí¨û¤ÔÑZèWº4íÒWS„À˜òI…!#×ų,œ4%¶mZAÀ¾R4‹‚vš2Aò?Š˜XÛÆñ}‚ õ}Û¦ÓéÕjL @šMÚ®+ª(˜özìì`y Ça'M¹¯‰ÄdqL¿Õ’ »»¸µ¥PyNϲ°‡¡ëÌçôêu£V\¾,w=»(P"º–‘e$–EÛ÷iïí19s†Ä÷qòëøqd6ãðÞ=ÔÖM¥X›Ó)j0 nÛpæ *Mqêuì$!ÛßG†Cèvé‡ÌLž L“y™¹Rôü˱¹ý®Íã&,ŸJDò÷nƒ·ÜF&3ôZEæ9õ<¦1Ú–Cáåý3Ü<8‡*ë¾ÍÓÇßâì²âpÞàÖ¬Cì¹4Éñ£¹L]—dy+ŠHÆcÂ~«ÙDò+ ¡(PE5Ÿ“XI£A¢½V É2jÃ!Ç’„¢ 1ŽÞø¾V–Z_×R¿YÊÄê°šò?®}ÇÛM¶ñ¹·Œý›Û°qS¯æ•˜ÇÂñã°¹©ÿ8ÖüLœ:¥¹I¢ùƒC°X¹È§ü>¼p•|&üÙ·ù½ë@²¯áFƒ¡Š'=‡¶­¹"ºò ”*ZG¾ƒ¼‹õçq¬ÏÍót×%Ë ÑÐû±,Í]Hð}ƒBpÀ6e L`œÀ,ÓÕõF bt7eî@fën‚ØZVµÈ ™iï§%KºsÐ8(ôÛÌ!¨iµ¤F¢™{†·ÒéB­ ‡$14,èŸÔJR ö‡úe7¡‰ã¹’kýs>…0ÓFyÑ´RÒ¬šNDò– ÕLõ­7`+2ŠO#hÌ¡áë@ÛSàB¦–âÈ=¸} ùáqH:ú\³8"¸ŽNð6µÉçBv_s,ƒ&Ì<ˆ}ð ÜhkY^«g”´ÖLjØX}È K0/ ¶ôü%Ëœyà:\¾Ã÷^½ÈÞNÒ14SˆlΜröôvᅦ»w› 5ôª0¥6«ùX'î¼Üj+`§ c¡X?××7hédÍš€]7Þ^§ N½ô8Y)!öÍ“}ÛØ·†¦²YY« )Æ9ÓÒ|,^DGÒAå-˜T‚–iµJ^yúOÌÛ¾³ÐL4oû¢PØv›G}Çqyýõ%Dr9<<Áó裯ñÈ#¯R¯û¼ùæcæ Wðê«ráÂ>?|…-«;Ÿ?MûÜ¿›<¯‚¨m3æ’C±T±ïeA>ßNM{ì.ÍæŒo}ëYòÜ7ÁäÔÌ¡udÀvüø>ŸüäÛ|ä#ßäĉ&“Ó¼ôÒòïÿý‡¹rå$Ãa€È& IX¿RU/}(f²(kf•¨Aå;^%8mÆõމŽUd[š §w-[ËBU,4Û#A°ÊG?úŸùÌ·YYÙ`<>Áþáñÿãyƒf%jIeg ‰çüÄO¼ÊÇ>öMÒÔçk_ûq¾ô¥%ËÜJ™U’ÝS5°daWv„ ᣲµU%V"©x~„ÈÒ®éW¶Ä`.Æ&ÑžU@Þû•}èäïÃòã?¾ÇtÚçË_~Á +hT$–Çfû©‰4g•È7¨xr4ÍZ?4÷„ÈŸd`îÉ\ëtj¶+ጷLâ[vÛJ˜Xéhv$!-‹2p×·k×Våz”í…¤Âi¯þ÷%–‘¤U•À¼ü“rä3)nÅßÐ$R,dm‚v¯Û¡ÒtëUGÅ¢î!“Šñ|ùXš/ 5Ê6¼ŠòöQ†€iÔȨE9¨ª(E•|×רd©“eªfÅŸ²L’vŒ,nX¡¦ M…¿”¬5ÞGˆ•JǦÊY))3†d/ë& YªÌkι©kŒb/Èæ¼lÔ£L½Iu*nèÊ­Yê‚€~?Ïfpþ)ŽÁä;(O){iÕgsÞb)J·ƒ<ý¿ÁÙe¼o~^_£òU±o:H+¦ó³]IP½ gDÌò7u9VɯÃÊ#)·mÖ,Kí¤AÀ´Ñ ¯Õˆ\”Ò.êJià CjyŽŸedI‚Ój1ìõ(ú}¬•Æý>ã^F·KàyÊòE«…ºsÛ¶IWVÝ]¤ÑÐÏœ¢ ë÷i ‡xIÂÞd¢Ç˜$H’ ‚©Õ(–—™x±ŒÝ;üZë·Y ßRÃMG~ûŧ¹9ëÀ›W5ÔèÄ ¬°¶&$ ll(¦Sí¢çºC°ºªƒüÁl[Hb¨÷±|ù[<ûÀ-†î)þïOòÂôl¾¥áL±Q¤ºsGwÊNÃÝ»zßÓ©NvÙõHÝ=I½¿Øp®§«çµ6ÌE‘yBáN¡ ÓHïi¬”Z ­,uxGBÐ9èÎ…mà/I¬¥\Û't‚ b˜˜'kšB·« »‰†­¯C׃١r{'t ¿äkŒæ0›jEZès ëF:ׂFOÿ~òr#bÇbåõ 3¤ò¼§¹ÜÐ £5Ô+Ð  =„ÖL<ý»öTËÕ*O1 ;÷t Õ‰5 ü`¢÷GSº°uüXŸ£½ª{¯©Eº3¥ÿÅ:!hŸ„ÂÖÎMå[!/Àóáb œ9¤SôêùÈÎ>8áÜÙ-Ƴyë>ÝiRËœ:¯8wæÓ™Ãë¯Ÿ×æ Çh`jûÚgÄq5?4LIgMCÇ<V ðú‚;7û¨i€r€žWµ$‹rTúíëFéf£RÞ‹ ĤÏBµfVì”r¦´u I[d •R/~%r(ËKæw÷Jn‡y#d•@'9ên¸üàÞbuuW^y„é´)0f0XQׯŸ”G}—Ë—ß ^ŸóÆ' K?¿#Ó©Ãht’'®òÜb<>ÉÕ« µèL”o0ËTÿ{æZJÒìʂ쮽,¦ÓUyä:««Cuýú²¿?C;0"-ÎÛ㓟|}ìeŽß#Šú\¹òc|á ?Å‹/žf:VÊŠi¥ÒîWªù%®ã¦,Êy†ÙI^9ÿòzŒ•ö§HLà9)!9¥’’,Œä"S1§Ü[ˆôøèG÷å§ú*OÊãù†ƒ`œ°ÅÑÇ—¹áY8†[Ò-½CÍØN˜Ë[Ù0Ëoä¸Þ¿ ^ôM"Pª"™ãK™Cî˜Äªc’‰ÒCÌ>ˆedxQEN6®Œ¹ä'ÈÂi[<£`51NÚ¦{d‰9÷=}nrÜŒß4ãį\ËÈ·‘åËÐ8*B·Ž¬[djþšú•´þòÞÇ›°ó=xçw4,¬¼5fÆpÍ,Ñ©—i"J™ˆÍòµ€¶Í,$w]ñm[Z–EdÛ’†xA@T¯‹ïû²ï8R(E–eÚ»Ò²ÄÁa¤”,G‘Œ£HZ"Ò) <וy£!mÛ¦>›áø³™¬ÁpHwoOì½=ÂÙŒÙx,ùx,Å;œÚØ@yžì­­±Ûï‹;ÊÒlFº¶Æ°V#›Lt»8yŽ¥Ûíªi*÷ÛmjáԒ„{ëë슈3›Ñi4h)¥“œN‡=ÛÖÝ® ®m‹Š"JIw<ÆÊs¦½v«ES)™{žlÛ6Îæ&ç_NžËnQìïã‹HcyYT«%’eâu»$–%xžØÃ!–ãàÏfÔl[B¥6¨8Ö¼‡•­5™ˆŠ"ףݭËÞ´Çšµ/ëÇ÷dùXƒïížÆšŽp¦STéu8ŸKv옲Ç#y£!n`ÓØ¿ÃKƒ%yiw…Ýâ!N´ïsº»Ås½×YoÅL–ÎPŒSmL„՚톸Ó1ªVG<Òk:ËqDµÛÚÕÛq Ù”"I°»]ß—Y»-iJÜnKÒïÃñ"'NˆÓnÖ;…Í?´ÿLþ¡õE‚`Â_|{M~÷ù‡Øv—aëºpç®æQ¬¬èÄÁq4a4Òfw­Ü»§«×í¶Þ&Ë„ÙLIž µ.­Åò«ÿà{œ[Ý`79#ÿ×7ŸãþF¢,=Oã'8X–P¯  ”–·ÍsÝih·AD°m¡VÓŸhYܽ=ýýÙLˆc¡ÓÒTßÃÃáb?i ã9äž00àÆ4Ö„âPÀN óC ¯iÖôSF“Â…nS' ãTû_¬®èß)«¦è6…¥¾®Ô»6lØÐQ‚ßÖ$è‰a͘Ÿ`R_«Ú¬Y0Ca€¥7^×êQÙXÈçB¯®¦š}˜Ï„†«ËU³†ØÂ4TCH}Pž`ÍÌS)Ñú|nMô̇É}]z‰Š-‰[ÐÉÇ‚±¯»0þ¦PL`¢¡hQ :cˆ¡*Vj ·¹Í’ÔXpÚºa÷ô“85ׄòyMÈBáhˆY63芎VîÊ#-aKC“èIÀµ„¼NÃS<üÐ- Â|û/ŸiÀo@K§7ç=¿Áþà/¿tGP™&‹[ÖœH°}A¡«™ICöæ!DS!ª)ÆCAÕ´SØï¢Nܼ]P® NAô2x_–…RИ…^þH4&½)¥YÝB:´SyUü"Ú¦JZ˜ä¤ºý’‰)Fæí±\!?G•îA©÷X«`åêÇ9ËË‘œ9s‡cÇú\»vŽ8V"2VƒÁy¹~ý4=t‹_âÂ…^¸„ãLùð‡ß¥æüá~ÛÎyä‘-.]zMÞ~»Ïöö "ž 6Çæ¼JÝh!>cd?ëÚz–L`Ë—÷X_¿#nÝò¦t».—.íÊÏýÜUùÑ}MÖÖ–xñÅgäK_úy^|ñ2Q”šÄ¢œ»´x‡¢U©fæw{†ó2~ÍÏí˜kãTÊ¥g!›`•ÝYàîæ:•ÉeILE{Ž„üÂ/\å½ï}^jµßùÎÃ|ñ‹?ÄË/? iUx4‡f®,Dš¬¯Gòñß”ü›Ôë»\½úˆ|îsek«o"©Ü$Ee2R:g§?ꈒ# èS¤ôu˜•c¬HO*¡}#)[–mK¹Úf…—Ò0ÉDz!x×dÁ™Y3Ýœý*Û·$^#‚`(Ÿýìkâº6Ÿÿü£òÎ;ie?…™ßã†Ä=7c®›ã•ÉT`º"uѼšs^‰Y‡sÑÎèe9~n`Lå¹—]£ó&±90krÉܳ½Š‚XaÖñÔì76rÉ3s¶Lò¼kí“ÊÚ(U¨v͵y‡¿“äý·?S÷¶åvb›ª{h~™ÀÓ(bˤÂ}°Í÷Œ\ì‰|^1¿3™Uõ¬…7‡ §”ù]Ù99`Áý÷L€Ý1®Ì|æ™ÏÊ*ÿŠ †Ë*{Ô·Ì9‹î‹x&ñÚ­ ØF†ž/ QâUPtµJ'eÅ@üEóòh<† ~$Þf™¹Wø-¶IÐ6ÌrÊŒ;zi hÜÓ©™ù6¤}q+´¥>°^ ÉMè? á)Ø{YóP-ÓÚ3Kà8ȱ.<òÏ‘• _†Íß9²j’Út§²>¢mЦˆ1Ø3NanÛÌj5BË’Ô¶‘ Àj4¨5²L\Û¶‰Š‚zQˆŸç̋ѽ¢_„–RäJ‰8±ï³ây؎ÞRÒISšÃ!…~’àűØÃ!2âeÅdB²¿O2ŸËèø>‰eîîŠ?áÌÏŸgÞn3>8Àv]æ­£é”^£ÁqÛ–“y®r¥äøtJR«É¸(8œLÀ²äØÊ ½Ù K)ÜóçÙiµ˜ã,“óã1N’PÔëD»»2îõ(šM<Ï#ïtØZ]•qQм~g:e/I˜7âyÍv‚@Ü^N­F¯VƒN‡¹ˆ¤ÛÛ¨zǶéú>+‡‡2Lf¾j·™ÕëHÓIÉ:$MñÓY]–(žóê»5yøì”‹K÷™D=nܵñŠ96‚Ä1™m‹ÌçJ;¦ïÿ ò‚B„DRÉs¸9¹š<•ÕéÈ€ Îm]»ÆcÇwde¹F6+ˆ“†Œí&–-8ó‰f[õû"³™æcôzµªÕ±m ò<)§Ù@Ú-¬FƒÂ÷Ä*r¶¥b¯:ÿ–Ç:ÏKaÃüå|íê éä² Lg:¯ÕŒP¨ƒø(ö÷uGàÖ-ÝqX^† 0ä™)Å¥§ä±Ó#þñ{_‘vsÊwêüæ·ž’ÑÀXkbïÞÄPó.|_“{5¿C“Éïßב٠‚@Ž OFn—$F£%4úóV%¢-ÑÉ@l• *Ò˜üùPÃ}ŠL«EY>$…¯gÃR$6ôS++ ½¤c•ënÂZGŽ)¬!½õ®†MEtûBÃÒ¬új¶.¤_’ IDATMÆ0Ù…0ê6¼qM“»}îÀÎØsHs¡††ju›ºë€ œóÔ†Ï4ÙšB¾ nSHr õ!‚|Ëž°VƒÝ)¶ Û€z,¤Êð2H-A€Z ™Û"8‰æÇ„FÑAÃÄ”QTjׄá>v–éqúMíUbºO®R\äC˜ô„ÂÖ‰–ìDCÔÒ}È;:éK³ž"€ä–à5ØÞiðä·d¥¿Áõ›kÞµ¶øT&Ãïß›D¼ðÒ£ì Nf|4Jàk¦ƒ.k¤ß*…1q³-฾¶ÁI CÞ…q®1zÍz`O´[x^Õ3ÄÖû¦Â[ZÆ&æx¡Ö”z†¥’NÇ|¶nª« (Z™d¡¬<·dÁòë–<Y@XLIŽC*AÖ‘ÙÎ7o›eöö²¶fqéÒU._rãÆq;À€áðßÿþY._Þ`mímjµo¾y‰Ÿø‰¯ÈdRã÷ÿ½¼üò9‚à}\¸ðŠ\¸ðmúllöøÀmévS®_¿ÌW¿ú8ð?Àk¯=+³YÛÌÛHY #Eó7ÈSC¶ÄüT ùíTàb=Ì7͘KäÛ¤¢Ä\7𨲚 Ö̱FÆ„°¤Àù•f³TÆ;/ݧàõPµ‹B¶®uRX/­Z.Áú/A¿‡ _ÍÏ/:*¡!¥šOI„ßDX;†c0+Ýl' Éú}l×Å. iú¾ Eð²ŒfÓŠc¶çsæQÄJ’¨Y–q&Ë4>ß²(D”kYø€•çªgˆ´µÙ o2a/Mi¤)Ç”bây4óÏuø>‘ùθ(PJIÝq°£wo`:ÅÏs,×%r†ã±D»»*ÅÉ“b7›DJ±*ºYÃyÒ‘y£Á8ŠHЉ"V—–hÕjäEwò$›õ:ãFƒC×e%ÏÅ÷<5ì8F–— êuplÛf¿ÙT®RÔww)®_'Š"äüy–hom‘Íç$“ ¾e‘£ZÑlFsg‡Î|ŽS¯SwÂùœa2* T£¡ìn/M¥—e¨,#A:A@þÎ;¨FH|â’ìî¶Õ½wÔƒ­òöÞö¦¶UP8jwo20”âüyd6Ó Ü¢ KS|Q8¾E¥¼6:ÆË‡suÔ£6ʱãSuº»Í,¿Ê¥åN؃ÜáþÄC5´r“=Ÿ ó\;IpÒ„Üt9”m1‡›,3‚8¸ìÇ>Ï4îò?/ý«ám6§øâŸ?ÈÕ·”ÊlÝ !²¤z]Ëš<-ܾ­탑eºsáûpx½“8gÎðËïùžüÈÅW±ò9ÿïÕ |é/—ˆ†M8®Õõ>ïÞÕ2·¾¯ƒSÇÑ …ïÿM÷l¦ß-q KK:!ñ}œè@t4Ò]ÇYÀ©²Lo·NWcï­T«?96¡b:ÕIˆ²Œ|ÿH']#eÑ]‚I*x¢H ÅîD:¬ötRc=7º&<·–´Ì­=7ŠP…¢Qq³}´,ª­ÉÞsé ] _¹¨ej÷¯CÑÖ¥÷j¦44™+ÆB«³ðgzLuœæ…V‰ÊöõØië§k]`ÕB‡»fŠÆ)aÚ€Ú œ]ýIl=gµ@çåJµÃ@'^õLRèØšt¾ ¤™0Kô5ub† n[Q4…ÂÓ²¼ñ¦6}–¾æ>X€Õ0‰q%Ê”.ù%¬\ô5Š›:ø–²9QÑçÙ§^Ãõm^~å´6Lc„U~à™[Ôí}¾}•Ù`ó‰Â³Ç®tMµºØÖ0/Û`°«¡Q¸ŽàµÚ•Õ×ýYª&·©†ÂÈèËŠ)({FEª^±ô–”~ ”ŽÈTc“ Ìê(A0мâ$]TÀÓþBWò¿ð<(Á׎q §ò†sÍ›s—ɤÏw¿»ÂÉ“)§O_—~ð-µ¾¾« zL§+¼óÎ1Þ÷¾×8uê¾ï³ºzW†Ãã¼ðÂ#XÖ®û~¦Ó‹,-ý¹zè¡wÄó nÞ|-3šOˆû•J}YÉ>S!%+s>Ï=÷¼:~| O>¹Ã£ÞWa˜ÊíÛó¥/½Ÿ¯}ía67[ÅRé eÁ²J^z8F"¸LÐJù³ÍŠá`ÄFî´a”Î2Ãè_—@|dÔ¢–*A|I.#okU¾Óò¾÷ÝV?ÿóßâÂ…×IS›/ùàþàC²µÕ[¬=íò^FRJ¯áÑGçêç~î~ø‡ÿš<ùþ÷Ÿæ·~맸víD…%êü-Xž­²É—qD¸ž8Ô̱놜\:©m›u™˜„§aŒ*¦~¥3Wd¼&²P‹òMà=V:¢u*lÒ[&¡™ïäGkö—ùuõÀ™¼óÎE~ó7×[}É>n"®Fk¯ÂÌ-==Ê18²ÀÄÔ*ë,/åDCÜÄÜ»¦kÓWÚ)¾oÌn›5Ъ$-eÒ¾a~nU˜¾¡hðӆнb"ÄŽ™·ÀHÿöLQ¡iæ®ôþ¸¦làÿ¯$ êÿ§ƒ¡þ+?Ëßvú¦kÊ´´˜K"Ž®¯ˆ]©³˜Ç‘Û¤#Ö¼²Ï|Á—CIR÷Ì÷Û¦bÞYØI®¾G*Eu_ª™|Ôp)¤TU€*/ûêbšÅU*þ¶ Ÿ¢iºåù5+š¦þ¾²M²±rCïC\ýù‘RVb>[?òåÔÊI%jl‰NÀT) WB•fžcæoÛ,oƒ•a…ÏbtÄZÆU»Bqê›ï(µ< Î2’[¨ÉuäýÈS—?€œúyíûtûäæïêE™ÎSlæ-Ö3•èóP¦Ö ‡J)K»jY–ÜnµÔA»-Ž •’ö|ŽeÛ"  rÇA‡0¤]«á6¬5›dµšôÃP¹AÀ¶mk= 3/uË·,ÖDº®$¾Oà8œC‰Ð* BHSÛfͶUØnÓ²mZy.Þ|®Ë’ÕfSž‡¤©D“ 2ÒŽcI² èFÒ CŠãÇñ›M•¤©øŽ£z Ã0Tûž';í6îá¡Z¶,N9ŽÌâ˜ìÔžïKÇŠéTJÑÕ¾ ª™$(ÏÃOSæ­–ä–EÜhÐÈsVîÝîßWéò2õ,cíÞ=ÉÃP× ÇcuØï“Ä1£^O&¾Ÿe¬M&ª¸£®ãÚ¶Œ² ëôie[îö6±eIà8jÖlŠJÕNS¤ß—¢VCrE`g²{`! k÷ä\s›«›çˆ÷p<:]…†Z)ÂPp]âÙLÍ&†R’$ÊÎé„¢v-doÜä¥ä=rk~QóUI9æïòxçey¬ó}<áÐ S†j™‘ꪸb5ë~C"' zDaO%*¤GAω¤åM¸ìÝQO×7ùôú‹| ÷urWøÖçåw¯>½[û*O†¨é ¢X8yR1hGnÇÑH5·áöm-;{þ/gÎìqpÐÕ;;wÈ[o×ïyÏ/ùЇ^”0ÌõK/ýš¼þzO;Î’ÇÛâÒ¥“òöÛ=|ð îºëe9{v¬/]zT²¬n)2¹m2|Û”)ã±=çcÝjùàßå‹_ü §OG2žæ­·.òÍo¾‡?û³÷rxXRTÀ)~·[ÑDøVKàØcŽmãVØü™6Hɲ2Õ/¸JêKËž¾À½R~¦¶xWze‰ãË*Ú7hðÐC3~ÿ÷ÿZ>ô¡çq]O?ÿüGø“?ù4¯¿Þ±“mUqdjÙz± ¸pa(ÿð~Ÿ|äg \ºôaþø¿Ì~ô°äy„Ⱦ^MÆK-Bj)OW+áo¾-ds1éá7¬m®Ãjýk¶xSwmqÝÓæ8WKñ³íöìh·´P.,BV¢Dž­mÛÚRölEUÈ Qˆ†¦<öØ”O}ê]¶·=ù—ÿòAŠbPñð,-gkVãrPq¡ªÛ½Žõʵ)“Us¢+ æž=^Ý¢…mâ:öZ.­fè^mîÑRÐß·ÉßǶ1»QN<,ÚX·úŒSv͉^©pK笠bM<°ô¬ ÌkcôU Æßn&äÿB›!GS"›"U=`d5•K–“ïY ”-Ê%¶Ú׬yEÔ]XzSj j™Úc.V™âÛf&°Ú„®¥•ÈJÛj/ló!ÎJ£!ÊþÛbÕÈHǾWË\n©ä‹J©Õ8eÏ_WLά‰ŸÈÊ MÙ¹Žˆ]·Mð–(Ky’Ò€Ï_ÙÉŠÕû‹°KÉö´(Œ,*çâÛó]¬z|q¬~"²kµ‘,"vÍ6—öö91Gv¯"õ÷@çdÃÚUhŸGÎþwàÈî_ÃÞבÔ/_Ͳä•K–Z‚‰$6$04kR³ À«×¥ëy´’Dj³"žçIêº,•’Ã^O¦Ý®ŒÂ®ï3õŸ‹·XH½Ù¤¾³#½ÙŒiJrz±8ÏeÙï“Ò½u‹¹çIÜíŠ3Ÿã¹®hš­–xI"ÚqHî¸Âuíºø‡;\zWÉçáÌÚõ8ç•uüÝ«¨z]ƒ¦ÑµX0K‰]—Fž E!ʼnˆRâ1«7$«×éÔš¤²œ:ü2¿CÞÐï•ç^nH1Ó4ý”“ÍkõWôzríÚüÑ}A~ö³Ó2Níy&B¤%H½®äWõ’üÎï|“rxx†¿ú«OË×¾ö)ËæÓÇ *¾µÖ-Ã#»æ¬š‡ÌjŽíÿ–ÂT+mjí½ñKà>{Ü9+­ÏžÔë”=^bu³2,QVŠeJynõØŸTÎUÙëe´*wß} ÿà¼#Z;òõ¯ßÍÎNfßwn÷hKVþœ»ö~V² 0ìØænVžGEÄîÚs™[z–k÷`»â©Y6Zi%—âØÞ“{Ží>ìØ{îŒÀ9û¹-©`ã²y¶ÈWdÏéš}¿K!».Æ¢xÇ2–¾¦ÏÈÿ¯) ¬ÜÖD«|FkÕ*hÏï6¹ZÏmjsQ±¥UgYÐëŠÖBJƒ®Õ^bó±Ñûʕퟵk M±ŽKŠHºQ1+éV½Š#uf¼>謄â䌬s7ql³Xà,X¹IÓ¢vºÏ¾¥¹VD~¦¢7)CÝgó0›ÃÁÌžk£’£a›½m·}[ÔÛ¬ }Å¢"%еmék5{ëö*Z˜‘EˆÔFÛÈ©Ç`ó¤¹P[Ÿ6ކׂÄfš£¤b„ײHNh‘«m&VsÝ¢1…ã |_Fõ:™çÑÕ?ŠH æµ'‹B”R$Ý.S­éFÔ–KtSOfI¢ó8– Mégí<§–eº¦œ+ ú"º)"×¥îº8žÇÌu™‹ÐÕššãdM­ÁuEiŸ$º92ÄwŽ76P‹z¹$ö}Šå’ZpÔn‹Ÿeœ9>¦—eÌ'MÌfº1IÜë1»xçÒ_.Yó}Ý.ƒŽï½WöOŸÆË2zã1…ç¡Ò”óI‚“$², Šn§×à C‚å’l:ÅáðPë0Äñ¦S¼¢€z]Ï;)² ©×Qz}ö|N{4"ÌsºA€Ÿ$Ü\_gY«á ‡Ì‹B&kkd“‰&IP'OJ#ÏiD‘Ñ·ÛLj5”ë"Y†‰d1êw/òøwlìsc|šëÅ:á±µHív¥H–®‹ç8ø®Kž$¢<íº`s<Ú¾O€àºž8ÑœFM“NÆLk=Þò䯮ÞÁîa_¹ºíÌ9Û¼Â{ê¯ðéî‹<Ú|†ê/È…ÆeN‡×Ùröñ]—1lG[<¿x”—ÇòÌkgùÖ ®ï Í.x“©d7wȃ@çijÜŸ ƒܺei*¡¡ 5›ækÌØ½šÐ¹í!Á…³üÖ§ >ùž+8Ñ”_nßÉÿú£SO#C1ñÃÒÊV¸~]ã8ÂÌ ‡O2¨C›¦ß7F™k±¾nÜ¡æóe+I`<ÖÌf¦1ÇZ¡«ÜŒ$1ŽAS›#±ŒÌ„ÝëƒS×ôúBÝ>Üt­>4»†Ž5?7\È4^M¨­ Ø4‡¢ akPk ʇh{ûP„pbC3š©'.­v!„ýØ ù©6ÏB§ÛG0~¢w µ¨¨Á(÷ÔZ\AB§m²/–S£gM®Ck RûÔéÕ ß4öü3h*M[ n§…üØŒšòÔ3HÚ°—›çæZhP‰(Ðøµ¹á‰f-ó´(“¹±8–{–Î5³ÌOЮFOLSæŸ7Ô*e“¾c¶¦ˆ»FàÌÌÈK#twp&°ìj”üLHˆ Çy÷ÖizÏç/\æÍ7ÖíšÀ÷¦<þØ»ÜØ>Å»—OBkœºM1T³ 8‘¹'EÌHÏ E–9D¾&XëÜ¢ *‚"5t®"‚¢%DKs¯¸®¡|9!䡯CP‰u›jÙbþ¸b²´…F +¯üÒMªôktµ)€j&Ýé•'¨[±_-‰ºqÅrô¶Œ¬ì;Çld sƒŸçyë×7õK/mIš®±±q¨zè²¼ûîyž~ú^>ñ‰7õ}÷½*7ožáoþæq css@£ápåÊú֭޼óÎclmíqúô«<úè-yæ™GÉón%Ó¢lŠÜÿ~÷wÿš÷½ïU”*xõÕ÷óöÛ}]ùö·‘étͺµK瞊·¥T,—vÍK;õÎlá·\ñ+ng‚tlêÙDeWŠ‘²E¦o»JíLK›kT&™5n“¹[­ºþä'ß–ßùÊw¾Îññý|ÿû_”o|ãI†Ã[ˆìUlnYåŸôûØ_ó¥/}ŸGyNç¹+ßýîçäOÿô“úµ×J÷¥´bmZ’ȱ²k×Vè•Æ&µÕ‹QÓµ%ç­JÜ;ÚTV‹n¹výS[ý4µi$J{Õ«êÓÌ¢¥Î#¶Sþ°B[«•¨ƒ=f¦!“­­&ÿôŸ^ÆóbþüÏ?¤Ÿyf`Ѷ*e¯'š_PÉÁp*a^5ÒßNz–Ruhu …-ꃊv¥¤H”UZÇúc¿c÷ ­ÐžtÅÒWÛ=™ÚµÙheC¥³÷UaïÃCÛàm[dqd­­à—úÿ“Mmµø»:ý·DáŪ±Ô™R#1¨LþÓ 3LW4^EJÖ°HB½Òˆ¨U¸¹,öÜJ‰å´’,n³ä1V`^¯bi›± KÑ7•ÄîðtKÍ}…q¸e‹ø¼Ò0Œ,½©rÆŠÊ7­k·bUzÔQÅ0ÌþžˆýØmUbi¢ŠG™äU\“×í¾êÝ«lên˹¨¸B;7íRRÖ9DŠmèNÿ#ð¦ðÊwaôæzÙs+5%V"'­ñØqhˆp¨5ïØÛtØSŠëZ³ð}6²ŒKYÆX)Dküé”Bk‘N‡ÑbÁ¹Ý]:³Ñ|N6Ÿsb¹D§)Ó4eeÆ‚6MɳŒ†RRw]Hü¢Hk¦YÆ$I¸‘¦EA¿(¢ °âm_)|ÏCÖŒ2§¥µôŠ‚p¹$kµÀ÷9·\’zÎdÂé8–Ì÷éÚÌ /Šhˆ £Hp6ã˜ætJ2ˆœ>MÓóÐIÂñÝw35îDäEëy,‹‚M­iM&ÌAÒÍMŠZBkæ&ww—ÚË/L§´A¢~ŸB„p<&ËsYnnRádÂa§CÒhÐÛß§p]œ €8fm}­‘4%k6™Ä12"ƒÔjÔEd-MQ[[DIÂÐqpêuÒé”( ‰$ íÔ=¦oLd#söž%Oļ6¹›äxJÛ…´Ð’$ a’4ˆã šMÜ4Åk4pk5j£žç™"ØuD7›óJ)¼Å •.ñ[7–]^^ç’÷2-Α7טz-æâsÞÉ é¯òêò|gþ!~\|‚çvÎóÒå/MNñöÏÁÏßÀÏЪQ¼ñ&j4bÞ¦xŸN z1¯4 I'Oš†cgG¸pA#7c9ùÞÿü 7¹ÿì‹©Çýåy~xå": NAh͆y½ïÔŒý­¡`Y4¤n0ï¹±aЋ¢Xå]ø~ÀgPRŸáy¦Iñ}Ó9ŽùjWA»khHá†êƱ0Á¯ ³¹)jÃNœ„ÓçMÓ°?¯–CÒÔ„z˺zÞýÏ IDATж.%£ˆŽ„fÏÇ—S›ûp ÎÔPkZ̧0/LÌæ±oÄÔ'î†Ö9˜ŒX~4Bã5Ÿ‚ڄƦ)ÎUKXëÃôÈ4?¾-Öçc¨õÍó·[3¬½uHØ90¶¼ƒóBáyd&õYŠ9tMŠ<Ó©¹æís0¬ jϤ[/‚´Ì9Íwáĉ#8:”Ì,NìA=ÆLñ'b¾akæ<Ó.x· >2c-σÔ3ç-®±”Í­i¹wdÄçù !Ø´n›.è1E2 Õï{ß‹èÂå•—\)ç5Üý.I´Î /®G­h!,ÄdŸÈÒÐØÞ™ùòVuð2DÈ=H}HÁ‹Lb{)RW‰Áú¤ NÝÐä\dž 8‘AÉœ¤]Ðb Ç#mû¤šÙ³ÌÎ(Ý jö‰[ RýŠ8¯XÖ–O±Q¥=®Øk6eå.åWŸÊf¦ü·R$«È²¥¼ýöižþa988ÅÓO?F³™qÿý—%JØÜ xé¥;ñ¼”<_°»¡u]F#—gŸ½‡»îš±¹ù®<öØ«$ɶ·[·#w~øuùò—ÿ‚_ûµŸÒéä¼ùæ½|ýëð½ïý Y6æ‰'Þ‘ápÀåË›vÒïÛ§{¶"pÙ*á°2Ó-éOZV.KeÖÙ=/ îë²"—6Ë¡&†òÒ’Uذ{o«"½^ÁÇ?~ƒ/|áÛ<üð ð³Ÿý6_ùÊoñæ› É²„_†0ÚëxŠ øÃ?üO<ñ2õú‚K—>¿ù7_”K—.’$óŠP8®ØÕ”ƒ“JB—[Is-BW’§ýIü65èREç³cѱuÛÈ–º¾-¦c›ìulõ¥=í-YinYT#«ˆÊK„mlæ@OþÉ?y™µµßûÞy¾÷½3ˆte•T^“•Õë°b8·×hdÿ^¯8•ÇŽˆ­Ïèí0…Ûh„•t·¾¥ƒÙÆ» Å<°ÖÒR±_ÚµÇ+©‰·cžeÕÄ•Õr´8¶{%+•͙͛Q&yÿ¿Õ`”vµ%­©”¤h·RÄz+Z¶T¥’þ£íW³ž–à“µ­5)+K[×¢ùÊõˆÔͱÕk”´=V€ªÍLÕk¥—†ª/*yS‹8”’¦Ð¸˜Ó¨dDX7+ص¤+yÙHè ›¢mçrÃ|jmmmVK›@'&œgÎ[ç+o‰íþ J{ÜÈŠÓË8û˜»‚TFûöcV³úÉÖKMš¯æºÔ­ÙæÍšÀéÈ~í÷@Ýûo挦èÑÿlš<á#1iÔ¾½':f¯µëºR˜¼>´¡Ö¤ÍÐ ßgÔh°‘ç2‹"í‚䮫kI"¢ jµÄõúÑ45à R’+E¬å9‡i*ûiª›i yÎEAQ²„A@?ŽÑY†‘‰RžÇšïkÏó@)æ€ïyâ;©Özáû,z=I"‰Öºð}©e™®¹.£~_:Z£Š‚æ|.ýù\Zë½z]ÇaÇäyÎf’àxžö³ŒAC鬄 Z[Ó£n—EŠEôâX{‹… ²L†äY†ç82ê÷µÄ1ÁÆP¯V“W®à¤)(¢6IÜhh­5b„íâ‘´ÛLÖÖt>Ÿ³vxHÞn A@î8L =s]ÒÅ‚Éá!…ëJ#¨k­%Ï º]ÖëuY6›ZDZmlèÔÅe:]¿gÎH½(ðK66:òÖ'º îÜÚeË™qY?ª%O(fSÈ ‘4EGë04ƒ… TjÝhˆ¾yS‹…¨F )”Ò’$¨04ÓüåR˜N©5}ÂxN¢<Þ^®é粇y:yL~6{œç†ç¹\¿›kÞ¦&Ä©¦EçKjã=¼›Wµ—Eí6î[oá ‡â­­‘îìèÔ·$Å£#¡ß×,Âtªév¡ßF#ÑÂh x¼ïI%_þõ]ÚÞ×®4ùß~xk×<Írº˜ÎŒ°9M5‹…i.L…fcCètŒÖ#Ì·CšjÊÄqÇ1NRûû&/¢´ÃcMžKÚn×Ј´6ˆJ”# σ0Ô(Þæ¸6Û"¢¡FE¦¡ÈÇàæB4ÓÔ‚δq¬TB”ÀÞÔP‘⢠ˆupZ$f:Áî¾fj†¡pø:¨BäåB>òDÓ …(ьƂšöL8ÐôN˜©ý›Ç¦ðôrCÐÍ!C8Õ}£8½ ÃDà×5‰gÿZ¡ÐtÀC#Ú¸9Õ•¡;ÅZ8qV£jç°3^(8Zãú‚—jŽwa™™p½¶G‘0¿ö½4ßlý™Ñ¼ÌCˆŽÀÃïÏ—öÉÓ_Hm(SžFÆÑ)Y@­¡qź`¹àheä;æÛV74³cû$jÀ¼a ÿ̇Z¡iºPSìíõåž»oqçÅ×õ«/ßÅl<&hõxøm<7‘Ÿ?»¦ó,”Öè\ÈiôXp×5Ó%$;BmišÝÂ`e_œz&dO48 MqÕ:ZµAùF‹áú.Œ36îV‚g½ï“Ì©umžRå$ܺW1.“®õÊôȺFݶG­Ì'ÒÊÓN¯³JqUj0êRq{·¯/yû#K7)«€LVéȆמ$>W®¬¡µÖݮχ>ô ï¼s’,kÊ©S/ê³g5?þñ&»»{¢u· ø­{<ûì¯röl,çÏ_âž{^ÕJõQ*ç÷ÿ?ó©OýXêõ”wß½‡¯}íÃ|ë[ëÃCƒDlmmsß}W¥(ú<ÿü“¢TGk½^IOì½]Al°“êØfL­¦ °y ¹ÕLd%,Úi~½’\Z¤H LµH‰¸t@Þÿþ×õßÿû/ó™Ïü˜{ï½$YæòöÛá«_ýŒ<ýô=¤é¶Egj}*+@ 4åìÙœÏ~ö§|êSßd0ØÓW®<Ì7¾ñë|ë[ï'ŽSÛÕ-ŠR Ì}{ý—ú¶%‰½_íõmÚ{îÈNÌc»†¾^¡¹m¢Z˜é}fÿܳz޵™Ú—¡pÛ7õmõ®ÑQ”Ŷ¬BË€ÂHÃ"—J×')Q…/}é†<ðÀPïï·ùwÿzönÙjõl%}{ß®¹V‰–®Ûë<±(Óšý]×îwS a×\ú°Æ²2'îveÜë;Ù,“Z–Ñ?<”šçá7RÙ;{–I£žLT±·'2›¡ƒ@ÕööhÇè$!ðf3Kœe,Nž”¼((G²Åq]Q"JM&ÒÉ[-ž;Gše*¼vMt³‰7Hk<¦½0Ö¬NGzÇÇâzãÍMÙ d:JÖn“N§8ÛÛä9õ,? %p]W1mÔ¹ôzGÏ/8?ØF’†zv~G¥R,¨ÅBœ,£ØÜÉs‘4E7›B£a¬¥§SDk´ãÀtªÄqÇAD”A9R«S´šZ·›Êoâ;aÓ¡6?& _åø£qæå Eͦ"³©¨<'És5iµ$¹qƒùÑ‘°¹IºXHSk–®+úøXèõŒ^`wWèõ„0´NM¼õ&ÌEüs§äŸýö¹÷mš2å{?=ÁÿþÍ ¦ã(šæª•£J­…Ðéž§ÙÛ3"lÏ“2ùœù‚@Ñj™÷Qìî®Ðˆñj5¡(„Ý]pM§#(eè&CC±\šŸÕë‚R' Â42Ùy¤ ÏÑF³!Ú A´%ÂÚº ã›La<·& c¡¹a’°'N,ZAÇU¤.ô=!²Oîš5…Q"HWã® KÓ¥à×Mw­&8™ÐN…ƒ=í ¡ ÿšÜ4O¯&Ôê‚w'Okަ± „« ­Âª#$" S ¡8µË™ …œ¥" áê´&‚º"È…¥Ëй0hqu´oêÚÆŽæMûpâ¼uÄÌQé@ȦPó'rWH !íhÔ9cW›æ‚Òæ:ËBÈÖÁ™‚$BaS’¶Áµ•¯Ì“Î5n,®ÅT¨9¦ ("…s$E<–\z<þ¾—¤(úêÒ«›èXä}¼._ðã>¨tQÓè][Hn@ÑTd{‚[ Oðcò—n‚j ÁÂPûÜÌQB­Ta¦àÊ1{V8‚Û7ÈUXNyÏNn›½Pú.&˜äÄu[¨f¶iŠ¡­äR!;ØÂÓ˜('«¼eg–™ý{3ëBV¹±¬ èÔ³ O!*ƒù¤Ýž«ßüÍ¿æå—ß+?üáã<ðÀ[rúôÛr||ŸÜ¼ù°Àu;ïK)Xá…‡åµ×Þ/ýèóòùÏÿ'¾ô¥?—Å¢.?úÑòío€¿üË9<ôQ"10’ZmƒG½*"òÓŸþ†vTQ¶LÊlݘ*‹*Xn» $ÊÊã Q(ó;ÖÑgn÷u`ÞÛ‰ÙÊ—©}}[`]”ÚG9’/ù›|ðƒÏÉúú®ŸU?øÁS|õ«ç™gî”ÉDDdT)¶kV7 äÔ©L¾ð…Wå7~ã/9{öU Å·¿ýYõÇü ö÷ë¶nÙ{Aì–ZCh§à¡˜/QÇÙû¶p+³Ž¸’L~ Lá]·ûpËÞ+¡twdå¹´kVöxhu#›é0sïL¬3”'pÁ¾ß޽z¶¸bx“-ÖÖnÈ'?™ñÔSÛòè£Cvw›êßþÛ Ì祎$¶ïÙµk.ÿ¾´ú¥Ìï…¥`Ü^ç†2 ãÒîÍà*³ï]{OOíë"Û°õ-5î>ÛØ¼¤ÍïûbhV;v¿º¶)Ú=Ÿ¶ˆØ¸‚,µmí¿%æ}®CeQB{ze£o¡ø-»ob×~ùÿEª4ÏRÿe¸øí´¤Bo VZ2¯|¥¤+¤AÛ‚ŸØ"b‹ZǺ/•æ[SËã²rÅî[MCQÉTô*º„´”=Uô@WrË™@\1þ*ÙpËÊ1kv¢/¶ÉX«€—Ë Sô´¥Cµ¬&¢K- RØ5O šÁÄ6p}›ò=^ålèªÐ;^i0´ªh/¤Bk:´ë lol™ªº¨„ÄŸ±Ç*¶RVU«PШXÝF ýÜõÏ‘æúè°ÿ?AçhÞ ó-P/ºYaŒÚÆaá„GÏA2­Y×ZgJ±ïyâˆÐ}RkQiÊÔu –K”)ñk5RZY&Nžë¦ãP€Š0Ôš¶ã0wb` ]Ç¡ëºìˆh¥ë®Ë±ëêºRÐjqäûÌŠ‚"øÀJQ¸.…çQWŠ\kjQÄé$ѧ ê"õzZ€ ŠÐY†!].©' g\Wv67õp0Ðp±àd𲩵Žz=I××Ñó¹¾µµÅðÂIÜ÷iŽÇ¸J¡•"qŠ0d¿×ã–ï3KS‚éTÜ­”"È2ÝÝÞfÇø6<-ߨÀ"’4E”¢|¬U§C= éG#}²(Ø\_çx}ažS»vQ»ÍòÄ ²á­5i£aò:[-üÙLdzz]öæsyÎwâïíá¼óµv/If3¡ÕÒîÚšÎg3)D$»»5z.ÜqÄð–£_߯I§WÛLÉÓY.áž{Hóü6=+©×ñ³ =’xJiÉs˜L4GGH§ƒùÁY», ’VWK– …†B“ű–Ù &St–‘Öë8Í&Ák¯áá $aˆ³XN§:žÍ ݨÛÂPãyæï“‰É)¸y –>w>±!ð¹#}ßÖ5}x-“oþ;ÿ\ò‘–)X.5'OÊí4í(24¥’>$#4"F¬íy©È2Ó<ÊÎ`W®À¹s&o>7Ç CÓÄDÑJŸÑïÛoR±ÜxßP¹ò F‡+MR£Éèõ4Žkt§Î‘nàÛgÓLSÓÂrñ s!I4ÅiMÔ–®yÖM#ó-šOÁ­iÚ„Ý!Ì×íȦÁL˜%B@”j²¥ÐW†Z3*`ï*LçÚ8P4Ìs×w£Þ‡³ç!ž@| ô7`R74k‰H;p˜€WÓœ]7YûSh]4t¥¦ÉŽf¼k ðB1CÖvv@yšzƒŽMWŸ N¬ÁÓèšiú-Hëw¬ãf®qB!?ùYÐç i·èêÑd{¤ÉÛb¸»ö[%6#cÏ|»LÊy‚rÀ³OBè ¡Ø'á[àÃØƒÙ”£©Çcï;ÔgÏÝà——îæx?äÁ{o²ufÈÛï>Äð iŸ–¹-´¬óR„¤îyó„ˆfBk¼†&9´ciYmóûzŽ«q”» \CƒWbügs(<ÒBã‚3"G¯*¿â"¥*ÝyEõX ³é i—J*uZ¡ÎÔídÿÈ^¥È6¶OxUIö®UˆÒ[¶¸õôJ^¢¡~è¡!÷ßÿ¶~óÍ»å§?ý Qt‚{ï}—‡zŽÃÃ&·n¯èIš€Ç{ßû¦|ô£ßÒ'OnsêÔÓi›7OèŸÿüýò wXg"·â¹Åtz‘'Ÿ|MšÍ1¯¼ò8Ói•4RžûÔîWYÍÌYqéK @)̶IW´*UAݵm²ÈGa›Ž8NÀ'>ñ:ŸûÜ_èO~ò¯¤ÙrxxQÿàŸ–¯}íS¼õÖ&iªíqJ¾JÍ¡s çÏ/yê©K<õÔôÉ“¯H’Ôyá…ßÐ_ýêïÈ/yÖ’­o“°euý“Šÿ´r­Ë*nf­‘UêÙMÛ”¶+IÖy…T”Ù/¶H¿f-vk¥Èls0ÇÓeö|¶´i¨Xê–ÎLb›Ó‰˜ß|ðƒ9ýè¶þÜç¶åFÔë ýÊ+ù÷ÿ¾ÏÑQ©.¬[ZJY:võ,¢qh×:·ïÓÄ|©Ï+”¹ºm´}m¹^…ÿÓ°k.l%z'ðskŸ|Â67¬¦£n÷slíËÏ¥k÷ª]‰E^·Æ’÷SVŠ Ûô¼n³8ÊJõØ¢“¥QÁëüß&yËJb%¥V"·Â^½ÒbHaõ ¹-¬[l»×¥ÈR‹JkÙjø^Vɉ°îÛ‚ñò}Ƕ`Ç:•V²Ð»|ñ­+Òúªp¾í^Õ­$xl÷‰Uª¶Ä‰QT—Ú×T,±Ás’Ùµ¸•”ê#»Ž¦Õ[tWyb{C™Ú|‹·e4bx’UÎÙÒºdh9¶k]Øâ‘aJ`ݱ’Jø_j¯ÁiëÞdÅ×RØc§Vj8³·þÂ^¯)Ðé ý÷HÿRÆõR)Äh p—KäìY3õŸÍ4íûƒE–á4¢ëu)j5ÁuQ³™H¿E!ÚópâØ mõºà8â&‰dÃ!\»&îÁ¸Y†7ãhMzë–,ŠnÝF#a00ŽL“‰0‹AÁˆÛ䣿ÙàËyCµ#yù¹ôœâ­kÿ F#†‚ëjŠÂ¸@… æsÝU:÷r¹ Æó}ÓlnJTQÑöd"L§æuæ¸Ðl 7n„#Ë ú!bèPµšyï0¢Èˆ¿=’X(R“sØü‹"ãР7°G5!+ ¥¥?€VOXNMµXº–ÊL²«Û³¡jª.ÔÖ5Ý5Å"‡øX¨àÇ0Ý¢c£9ÈÞiˆ2˜† Î ùº xvúFà÷ÀéA§%œÝfìî â˜5-̘DÚB1²]SÌn‡i`è]5mô&Q|„ƒ4jB AÛLÝöµN…eÖ/Ñ ö”cÀHæp¶n0e=ƒI&¸&«+k¡!èMÓ8‘Õe¤æ·„úØR•s!èÅRpBÓ„9®Ñ,,sHE‘àe ºBê€ ϾbhnÅ ¡X“lÚÂk»òÐCïN“×^:ÅøÎzoÆëWNËÞx ¼± ´lú AÅB~‡A.²CƒtåmÈ—°ôLšyšA}ß°Nè‹^Ý"™™ÐFW`6¶©áÚˆòkÄ53i2!ó„LlS)œKò†m(JEÃR:Yé1‹^ «1a$+ªRH^³RI…9´%Kß:Q9•P¿Ü6(¥‡¿ýûúíé¹RŸüäOxíµŽ¼ýönÜ8K’t¹ï¾å¾û¶åÚµG9::(¹ï¾ËüÁüg>ö±¿õõ±\ºô„ü‹ñ?ÈË/?Â=÷¼"<ð¢œ93çêÕ‹,—'ìÔ÷"Š¢#÷ß¿ËúúMyóÍ÷qpP+Ë(;ÙNJtÇN¹£JbTOJÄ¥’Ó`Q¯´êµkZ³™SY×åôiÍg>ó3¾ð…oñðÃÏÓhhyöÙ'ùÅ/>Â7¾ñ+òæ›=²,••½mb§%%?Õ Pò±]’ßû½ŸrêÔeIÓ:Ï=÷!ùúןâé§–Ùln¯Y^É‰íºÆö¸ŽuV*ƒË5l³°”6·Ô9ØF´tíZ·kÛ{áÈ6-žË$ë×ì^í1F–êS’â[v¹Ý·CëŠv]J›Ÿz}]NžœËç?ÿ´|þó×yè¡ËrîÜ”ÝÝ;ä™g|÷»Èw¾sq<·¢î¬ò·,jÓžï\VÚˆ¤D:Ê„ú2ÓÅ68SûÚ2õ»D0ÊPA×Þ =Û Ükß{¿<¾ýsÍ¢b#KݺjËëN©³°a„5Y ýk²ºNyEÿRÚ—ç•çjéV{öß.ßn0ôÅr–f%Ò#«LÎ+ÿIh<&ijô¢RSaÑÝàöGú¶ø:­dPä§©R\Tšµ*ºÉ@ÊØ™™î7-²Q¬~.RõT°_''loX@©9±B8gY¢³v‰ík[•ེՒ4WYšbݦdX LŸÛ¦c^²×,Ò°ºý;mSulú|™U ´ò¾¶™ÒÐöí‡öýú•¿ò8mÛ Õ¬®Õàì9ÙÜbZ–èUh^<‡`üìü/æX€ÞËa¸ÝM¤?€úû‘H Ø6Ì@,ÍkTiŽnZŠXhÂì$* &ŽÃdQÄÍ&³v›™ëâŠÐÎs:®+ г …±ˆ4\åy,|Ÿ¶ïã)%};#™(Å (˜‰È®Ö´óœ0Ëd™$Úw]éå9KÏcZ«‰„!n­FS)ŽEÇ‘^QÐüЎúÖÔŠBjA s×%ÁËsñŠ‚ÝzÝØÇŠ´Û¤[[Já‡!‹“'9ÚÜ”¼ÛÕÓ l¹Ä].ÅÙÞf.ÂèþûEŽŽÈ–K\­ ‡öΪ(˜ ’‰°—ç,²Œùd"‡³Ã0d?Ž™M§¤ž'Ûkk,â˜Ùx̲Ó!êtD0nllˆžÏIoÜà&0:y’Äuey|¬ct¿OÌâX’v›Ñr‰8Ži(DDݼI°¿Ê2òóçÑ‹EšJ{± šÍÈz=šIB¿^'9³Á3ÛuüY*žÝÕçΧòôð!rñ›5Š4Gsq”"÷<ŠFg>G ãN5›Q8º0º ’µZäí6§1 q[-”RHš¢Æch4D/—DyNE¢tEH‹sé¼òŠDí¶Vã1¤)j8d¦µÉ²X. éž{ R0Aà ã‚öV—ôùc>|ÏeâI,?{áÿá;kÄóØ<·”2&Ç­-!Ë4ah€ÙÌØÜv»¦8<4Í@’˜€¾^Ï4¥Ë”Xnþþ>·FÃÀ]×dsL&F§Ñéj”㬠ÇÑD¤‰°¾­–P¯kB¢x¨@ØðÄkròÔϾpký wÝu“½‘˯Þýèc;ÚÚga]ðÛàÞ‘AŒŠMP‘àXì~’fÕÃh]BƒZ00äab£ÑÈ•¹=Ëíw³ŽlnšßÑ,Ë'oÉ)×¶ j—9¶+E¥e˜˜[õ±èBƪÐ**È„k=øg•P¿À†ª‰}Ú+ûº=à¢ø–”š†=Æè6—! žxâ’d]^|ña´žpõjÀry/÷ßÿ wÞùYv’øùüçÿ˜v{ÈÛo?!_ûÚ—øÎw>¨ë\¹r||–­­™Ü}÷/yòÉ[$I‡7î­›öü}ΜYpñâ‹rýúE®];i÷«´¶ÛsËÊ ¿Éª¨+V#Pñù žÝC§äÈÛ¹&0`k«àsŸ{Vžzꛜ?ÿYðê«ç+_ùO?}?W®ôIÓq%=ZU´ ƽÉób>þñ+ò{¿÷-üM=6yå•_å?ü‡§øùÏï•é4[Uf¸²r +lµRÒÞö÷J7,‹îÝN?¶k³ÕÑm U¹—Árm»ÆÈ6¬±uŽj—U˜mІ®EDnUJÞrdkÔ»Ž3•^¯Æßû{{|ö³ÇòÑÞÒçÏËxÜâúõøÑãOÿô½òúëç9<ܳûÕ´ï_³çº°EwÍ6‚›{qhïÝ’fäW¤‚^-*éÞ¾Õ’ø¶Ê ©ªÛ0ÁÓÖ¯³lÚKW)ÛPOË ¾*†PA»²B˜lÎHé8Ö°{êËÊ-MìgªäÜ@i {ÿõ YåÜ6¾²¬–Õ¿´•beI+N¥Iˆ+T&e^£kv‚n·S÷­. [QœJøí¹ÒOÀ[iAÐäõÅôYcŽ(%ukPÑ ¬-®•׉®hÊlˆ£UÓ@ÛÇ·k¶Þ”šŽ²Q°¹Ôíûsûq–mÀ+ ‘îXíɨBƒ²Ç¦_iŠò¢#ÓÕå“…ýŠÜ±ç×9Z%{Ó}Ã6ÞŠz&¥›–}*^ ˜•~îø]´ŸÀþ¿Fòؤ˜Û½’CXü ÑwBírâ=Ðxf0;4ŽV 1vÁ +Ào¬>&â*…n–I¬©ç& í,#A‚íy² C™{KÏcáyÒÊs:I‚. N…öEä†çÑw]&®KäºÚs‰|ŸÇÑ¢¾ÖÒˆ"bŽ”¢pI\—ÀqˆÚmòFƒN£!^³ õº®¹.­ |ŸXDæ"¢k5¼N‡¢Ó‘Y¯Ç¸Ù”Q­Ý.Žã_“­-ÆçÎé‹E8… –æÞÎ{¦Õs˪)Lƒs;µÓ fÒhGÈprÓxÁŸ ‹ÜÚÖæ¶˜iÊj\©YM<]ÛDø–ϯl0XI÷(*Ô e'¹YÅV[º²ÇÄA£ŠÓº-X‡–¶Ñ´4©Üþ¾;y¸Ùñ¼FQ äÅ/’¦ hsíÚ=L§§ù­ßú ý¥/}EZ­}¹|ùAþãüoùæ7?*GG–HM±³sšçžû°L&'8wn›÷¿ÿ'¼ç=·äÖ­{8>®®ÕåñÇŸ•7ß<§ß}÷¢ÍG(ݵʹL8+”˜¥è6,r3¶ú€’Ò£+®\‘À&gÎD|æ3ÏëßþíoË™3/Kûú…“?ù“ÏòÓŸ>Âl[}BÕ¦¶<—DC]DByâ‰üãü]yäÑÚçÿ¤ìÍž$»¯ûÎϹ{÷ÞhlMb!b€€H‹¤¤DšCKCh*d+&ÂŽypÌŸ2Ž™χ½n£!i»mv××u»Ä¤­”¥øJ‰iXXÉšM=„S''4wwq ‡aÈt4¢»»‹ã8Ìû}i…9sp@â8¤G››$"8Ó)i–‰»¿OxrÂɹs­¯Ãp(åÑ÷\—½("Ž"ü[·HÊ’ÅåËä®K#MiZ—*$ ñ²Œ¬Ý¦ìõÀuEšM‘NÿæMÜÛ·™fyžÓh40aˆ›¦ˆˆ4\×lîdÂl0À÷}ÚÆàš‚¡òæñ\Ëå­{¬û«ã‡h°ÀLgÈåËj*µiµpŽq›M¼,“ÆÞž'íõ ßÇ1I¤,a}]d0@Š™Ï1áýÿÉ E¿Ï¤ÓÁâ$ åî.î{ï1-K² `>ŸãŽÇxn–‘‡–b×éØâ= á(YÁïþvÉg?¹C(Þz³Ãÿþ_/r4ñEz¥-îãØ:4u»–&{t´ ś͖ÍGEq …$±Ï•VË~îÌK™²AzÙ˜Ï9u— C›Ïá8¶i0ÆR¯Œ±ÈHYV³ÍÊbû{0[ØÉûB“†Œ¾ÝÎx ³‰0>z-N`ûD-J«}˜åö޽˜ IÏm“f‰¥ å#›yqf Ž2˜v„…Øi½Óµv«…N)l¶,Å7›Z¼¹H!׈Pw «¶ÁˆšÐšÁhbß ‹À.Ç,„Vb˜Z›vÂ\­auz––àwÀëB£“¹µ¢õ.‚B´&”M;mÛÛW}.оhŸµA IY ”XýEk¼Ä ‹>BºiÇ"î ò}p‡61]Jpt+Ø&­0l Õ“\‘€>ÈB¬]ˆzÐK¦wý¹- ųëßâ‰Õod'6¿Ã™BvÀÁÁ9{ô:ïßãåï§>ôC†sŸ¿òˆ7q pa~ iYiQ(ÚVcQ†àBØ7x©dÄqr±£('W¶FÇjvJ߆-Õ¹8¥à:PºÁ®¥ã…±!öt2–׿•õÔ¥Yˆj±âW” –éÓ£Zƒ1¬Mu }òºZô8µ‰jR9U-¡X­,oµ‰ µ8uµH·IZ®Ûä©§®†…|ÿû¿D’Ø)ô`0æ#y…Çÿ‘¬­í2›­ó¥/ý/¼þúCˆk ²9%“‹ä¹'7o^åÖ­Ë .]z›ø»¬­•ܸ±%ãq‡çŸÏyíµÇ)ŠŒåä~Rãoäµ*¥2â/¥*†—Æþ*ÐПu¶¶ùíß~U^xá+\¾ü3Éó6¯½öaùÓ?ýU^~ùCL§‘ŠþÖìQ+B€ã4äÃÞå _ø.¿üËßŘ‚W^yVþäO>k^yåqf3‘“ж¦Óû±ÕƼÆ{)õµ‘V•·e©«Ð«ÑÒ;ó4í=©¶kr}Ýç-­ÄªãSj~E¨MG¡Eôq-£¤T¤d¢Ë9Cyî¹÷øØÇöyá…{òä“÷è÷ç4øÛ¿}ˆo}ëŒ|õ«¾ÙÞ>ÏlfÔEÊèõ»«×Öq Yšhã§jb©çØ©¡ ÙRq|ª [‰-tŸ+Þ¨–ï’×x2‡YÒ= ÍôÈ%ì×*ómm’z¨ÖãlTÎcjÛ;Ñ>2öû³£ä¡ÒÐÆº}qͪž´î·þÿíýb³QÍêIÛy­™(j—¹tt²yÕ8¼0«œˆ6j@k°DAlˆ|m»ÊšÌd¨³ O—W!;ú3­B{µŒûj§®§‡²¯ËÙ¯9s«GÇéírO_»«(BQ“¤%z¦ËõJ¡ÍÔPOçdi›û>±|¬ûä-‘Ó7©ePciVËÛPÚSÀ(‹´)kéûë2¼@ŽÕxì‚ìn¼û±ý8¹¢Ç1òCdò  -Øú\þâ·`ºkýnÛ Y,‡, í$]„²ÝÆk·„!+yNg:%- )Ë'ÏÕé\“¦ˆç!QD†DaÈÐ÷;í4e˜¦¬¹.=›öÍ®ã¸.eY27†Âq0®Ë-ÏCŒ!)K¶² ¯((Š‚¢,™‰A–5­a«…ã8ô“„´Õ’áÚš÷z´Ê’µá`6ƒáàð#"ÃK—Èš£ƒ;wˆæs&eÉ$ I&fE¿O˜ç¸×®!A ^–qÏuÙMSŽ=øø§,ÉZ-Œç†!#ÏãX„E’ Ã!»—/3‹"¢Ñˆn–‘û>p|LÛu 76Àóp LY2k4(û}¼²„Å‚`uo4²‚6©œh:¥9›Ñ+ šQD³Ý–^³I™eÏ£92ë÷™‡!³Ñ˜°á1îmÈ7WxüÜôÞeÐÞàmçIð§SHSܲĸ>ÒéàÆ1^«%n‘eI¿ž‡4H¤„Êsç(VW1Ã!ÙÉ rp€qLât:Äûû”{{”ã1ÎÉ $ ]{®ƒ€Ô÷iL&̉û}ŠF1aLƒ3ÿâóû<ùäŒãÛ)ßxé þ“l¾CÂh)Üv]+Ì>8ÐP;ÕZTùÝ®u‚º{×b¶ù°«DÝ¡r¡×ÖàÚ5ÛŒ¤éÁ¨BóDl#rá‚m@âØñű†è-lCǶÉ · ‹Ü|­ö·!ÉÀïÚF* í³a”XÝAs府ìÀâ{B±€µ”;%V<Âjšì•r àìXlµ¡ BׇüâÄrô“™õ·ã xsˆz:´öÀíÂáÂé›m˜ïCº¥g ´çÅ@/ûÖ™³ßƒÍ>¿m30ž=~Q £#Xó`>‚ðÌúwÀ›ÁÑrÖ.B'ƒ‰©g³/º ëîÔða3„äf;P[ꓹg Ùn ù’‰ß8ûZ>wÃÞY=Õ_d[6iËDðÎZ1zž@îØkË a‘A¨ÉI‹¾êÊ …m:RWÇs¨5ä!«E³V¢ìËœin1Õ'UEÕ©F–EMðš,½O‹6·V´¢OÃT‹Àª YÕ§¥­b'âÉ'ß“^oÎw¿ûq¼Ê3ϼͿþ×ÿçÏ¿Á~ôOøÁ~4ñøã?c{û>VeùÔ6µ0AG`ÎÉIŸW^ù(7nÜÇ¥KÇ<úè7xöÙ×89y„(Úçüù^zé’$®UAam2¿¨=í½Ú¶«¿¦R{D¢ÓÂûìÙŸùÌK|îs_•óçß&Ë~úÓGùOÿéWùîw—Ù¬:7='U¡_…ù¸nÄ3Ïò;¿óM>ñ‰ïÒnïðÖ[ð¥/}‘—_~JæsjE}80R4b§ ðÓåGú·zx`TËV8ÔñeUIŽjMÓB…˾V(}­îŠZus³&x¾­y¯VDÅr=æˆtOGÄŽÓâñÇc>ö±7ùìg¯óôÓ×ÙÚ‚ù|Æk¯­ó_ÿë#|ãOríšËáae…[%õõš=«ã×}{c¬?NM´^U´^­A®ª6§6*®®áõZ“ݨ]W¾~_ªÊ¶£ݪ¢ëzý  º©×x_+㬖sQ¹@µkÁ {ºíË­zm UeXË; õ8W´«ª1­>sýyJYªi ¥>©¿Åi¡¯~rR¡Ô„àuFYµ mõÅYö©¦TºZÌâÖÖÝRíB¬»>W›ÚD‹nôÖ]9)ÉYX Úê–e¦º=‰F ºœ]up:Òe6u7µÐÓa4ØNµiè(åI³(E†R™ÞÅKEJ¥hut–UÝ*b¥V(âp¤ÿŸkƒv´t{’¦ ÓÇÚ˜åºcí±FÖÅ]Ö—9&gfiTf¡ó³Žî·j\dK÷yU×ýȧ Àð%ÌO_³YGŠ¢ TX¿¯.X›•˜À­Cxóç0òÀÙBÎ]Ål^Aæûˆqí{ ¶Ž»4›’6ä"4“„Æpˆ§…›8Žx¾/ 08* ’„VYretóÜ´ŠÂ:޼Ùj1éõè„¡™ƒÓ) .gû 3×7 Å´Zâø>ë®+yQH©}=‹¦Hî8t<όʒ½FCŽ:q,²”Ü÷é9 Ï“ÙÊ “~_ò$7Mifërèû,&ºÇÇäí¶LWV GGÒßß·‚uc’„(¤?’Ù<º®K6›‘ž=‹IíìÈnžK–e¸ ­  qr‚—¦4òÜÌÎsæ< ‹“òшlkË䓉:ž f“iQHÑlJ $(KÌɉøa(Y1Ës¢v›Àó¤;á®­™nžÏç’w»¸ý¾Ðn‹4´Žè'‰4cäp0ñú:Æâ˜øâEJ×E&Ê¢” šÄëÉb/àÙûwe«wÂ{Óó\_¹*¡Y`:]Ìt Q„ àî]Ê0”l0Ìu% qšM$Ï‘ ãã''âÝ»‡cCæÌÐóG„p8$=<g4’nžÛûVQ`ÒT²NãºÌ'’8¦lµløg»kÜþ€_zh&_üì—FnþÜ—ÿû«ñÆÍ–ý†x¬­ ³©pxhyÿ“‰m.|ß6 ³™ÐhXw¨<·¼FÃÿEa5žg…ÚÝ®u‰º}66¬°üøØê0ÚmÛ`$‰¥Où>ØÐF¡Ý¶HÆlféÇÇV7’çÂb!ôûV žЈ„µDžMÄ>(-%(hÃddH‡vräB#Ê t[0Ï­V¢È„3›BèÞ’Ј Ü‚K„ý»Âì=C˜YT¥Ñ[²]¢PÈbÃØ·0¼ŸÚBÓ¤à÷„ð>a~Çæ…Ü·f'á‰ÖˆK˜Š0CqYa[B÷¡ta¾­Lð"aïXX¿,V-6²Ø ’ý¶uJ #+÷ âƒ÷ž0ÙæŠp¾+„cð¦Â¸„Ð/ºk†y(ìŸ@¦Orh)~Ï0uÅÂóö‰àΡá EfHcÁQ=ƒ³iéIe(ÈÀÒòm}²)B }}*œˆMJšAÑ2Ȫ}{”û5+ñ®à6í¼ˆeoðôÓ÷pdÈ"qYß(äµÝgÆ‘o5E’ ©+°«´ ,ÒÒl€³²!Ÿ WHæÐmØ¢ôÕ6Ò16 eÕ6²‚¥ÖE¹PúϵVÇÉšjASÁ÷…¸œ9ä¯a.K¼~¦Sæ –{!²¬Ð3E$æj%Õt•'eU„‡J}ñu™ åý¥9*t®R’C¥ŽŒ¥šD²¤¥”eŸ'ž¸f:‰üàÏóñÏ}îøùÏE¾ô¥ß2/¿ü!)Ë5yä‘ïóøã¯sóæ#r|¼¦´jÕN¥5°•ÃááùùÏÂ÷}ÖÖvÌÕ«ß•^ø¾xž˜[·ºây"‹E.y^M÷§Z$VË«&׉Z’ºº2_Á9~$ŸùÌ«|úÓ+÷Ý÷6EÑã‡?ü |ùËÏË·¿}ÁL&½J”«ô  2JigÀOìñÅ/~~ôÛ¬­í›×^{\þËù-ùë¿þ ¦S£ìJü;ÑŠ ® ¸{Ú”µiöT©p=Ígè9Š,èy>Ò†¡¢ UùPÿVm”u¸‘«-ï¢Wt¬U5 au)™~¥HuX]uøô§ß1ŸûÜ5yæ™=zh—4¹uk]¾ò•‡ùó?ßà'?Ùää¤+ièH5»ßžR†<-ÜO´¸?«4³™îK†už8VÚTh`ß±ÛrK-o©ìhÓW5=Íúèêu›hÓÚS…REª×üµÆ½BöŒGU¼}[Ä<¥Œ5*oX=GUã#ò~ÝMe;;×}Íu{ZJ/tÕê·ró5‹%Øÿ‡)§¦¹ð–ÉØ§fV¡6~­§ áÇ_ºKÒzòšëTP‰§ Sc¤E¿ _üBÊwYû[e?,gRMÚ«ùÈP êb–GÉ2‚¦Y£XUõàÛ]v´y¨ »Â*T¾/r¨ ”©õå².“å Æ¬éñËky”j²^%hë1YÔBݳšío^ëI#m¦îÓã ,¼SaO)TÕÌáø}@êRötáxð„ôüøKÈ‘mÀ˜Ôæ[:k8[Eëèrï'1¼ö3¸õ*ämäâ#ðàs°õ(´/ ïìG g-:Òh¤Žñ„ M)Š‚i‚çù>1AšO§ô“„>0/K¤(ÈDD\—# ÇH–ƒ8ŽcQš¢`/Ï92†°,—%ÍFƒÒ÷­ïFQ0ÊszyN'Mñ³ Ç÷Å Cq{=.ŒF¬N&VˆÜjq  Ò~i·év:4=þdBtï«“ £^É`@¸XЈ[-IóœÆd‚éõ]—ÕÛ·‰’„b}Nbâ˜ÙÆL§9'ÞíÛ¬ïïã3És¤Û¥YdƒxÝ.éÁGŽƒ»µE""ÎÁåþ>y¯G¼¶†“ç„ÆÐA|ñ}ŠÉ„t8$ÚØÀëvqÆcüÁ€$$½ySÊ$Á´Zäí6nÒŒ"¼õu{œŽÍçÄije“««”ž-zq¢9{–~–sfx ÃÙÉÎ_ØçþÕ=ÞzoaÔ%Hç6÷¢×³:›¢@´¨vf3¢²$/KÊ¢À¸.i£AR–R¤)E–Yä|Ž/"N¯‡Ü½KxrB¸½M# qDÈg3Òá ÕÂÌfûûIpKi*r\–O}x$¿ó©›x-—¯|£Ç}ý2‹BlKÞéZ-…uà‚Ý]!M­^¢BÒÔ.s>·ŽO޳tŒj·Ñämçy–"öÿ;;Ë÷M&Űay%©Bõª@ÀÁÀ6£‘ýÜÑ‘ÕìíA»³Ø rÏ>ef¾ýÖO¶¡ÃzÓa>š-‹J¸´‹ tûVÏPt ×†•ì ó#èž·Š:6 o'·tš|Ï:Ze¥E*²Â6Ímx®¥ÜÕ>:0[¥ÀÒ™ü&¬ôaºou0ùÆ¥B5"¡· ùÌK|ÚptήCoÍ&ˆÏ :ÐìëͰk—á:}a &µÕgÌ IDATt­óÙ1Ë|¡û ðš0u¬v"ô…éÜ¢¹nó1x{'4®Pˆóä'ÖæÃÜ„ð~Áï·€l̾EJJuf‰qCÛ˜˜RÍÉ{àT˜³R¤Ìš=nñ‚Ò ®‹¦fÎu-JT&œ­qáâˆÍ­!öŽSð“7®ÊñnCHnYš¾­•ÓÉ4Ù¶=.^Ó{à¸BÙ²H–Û° ÆH¬xÛíZ;è4·Âö"°c¬4‡V(¸¾eÅ‘`Khz¶¡ÌŽì¦2¿±‰N:©‘€Š]Ê/j” Ym>¬ëjHÈD]£LÍÂvP³T–s¹ê5Zò~º‹ã8”åy66îÈSO½Îã_ãá‡Äl¶Åþá¿âoÿöŠ"˜sóæEf³s<öØ÷y≟pç΃ž]ª)O)#ò>ñbðÆOðÎ;Wå¹ç®óàƒ?r¹pá-žxâužxâM¶¶ÆDQÆÑQ›04¸®G@æø~@Íh6sñýLžzjŸóç=Ö×G|úÓß煾˥KoR– ^ýüñL^zé3·´ )kÂÞjÛR ×uxúéC~÷w¿Î'>ñMšÍ#nÜx˜?üÃß‘o|ãŸrt4Т=©‰ã+«}­–ÒZÀ¬*ž+[ZYŠÒs-pïêçœZåXMé¯è¶îÖÄÇž6E«ZÅìèû«†$Ô¢ûÐÀ;Jái:Lž{®Í¯ýÚ5~ã7¾Ë?¸+àqtÔâå—ŸæOþä,/½t•{÷ڔ墆ªe5!@(X‘ü/SÊÙ$­QÚ½¶ãªQR%Õc¸¯ä¢v¼L-Y]´IHµ‰Lj\œ ±«öýŠfÈ8zŽŒêWzb31Þ©È𲬘ݥ·éi.LH.åˆk(b%¯Bf² kV<&m†Jà@¼ŒU1Ä’ÚåTs’2æ&K×àpÙ”ˆ£M†ø²°­¨”zØÛj §Î&+0dN–Ap•îA ]¦[Ü uI:c§ù§yêl*—¨±&N7õ°ÕCÓ©%`·kìͶ=œFç&2©sïêå_èå¢ FñTÞQzÛ>še^K¯ß•@»»5‹µ%Xh“±uÝ®ôcàQ[ô÷ýŽT´t>–ècf¤¶«ÊÔ›-ª¬ÃÍg tàg_ƒ]õ"ñ´yI˜|M›’xy‰WBòrng{˜!òî‹”ÓWÆCð!çŸó)å§/ ‡ïd4n± JŒã ô tã:%OS9, ã‹pâº<ê8LË’¾1¬‹°Çf4ŸKÔjáu:´òœQ’ä¦ÇahV²L¼é”©16ºh8$i·™4¸Í&W’„E“”%;ÀöxlÎnnÒ‘ Ïmáì8¤‹óµ5öVV(ÛmVf3éòÈpXÞk·eÖëá†!&‰™…à8Äó¹, X]% =îÝ»Œ]—ùÖþÁf:%¹|§×ƒ¢À¹yS(KSÞ?{÷îg{[ÖŽŽŒÇu»$¾oü$‘a»mªÙÌHQH¹¾NytׯïÜ99åùFäIBæyäžG£ÙDvv¬ ÓÚ³0$;<4e“9Ž4îÝcày4ÚmæQĤÕâèÑG)ÇcÒœLLÇ&˜ÏE.^DÒ”Õë׉/]"Ñ©~²±›$üç½_"{=å™Gßå÷®~“?ºþëL& ŠPMe”.%«ÖŠp×l-1òõ¿»Â}÷½Í¹³•SžüÐ-óî[ÏØmÏ…H“âKÙûØ'Åxß0زMF©… é+¶þ 0s›ƒQŽì~º¡¥¸-( ƒL-…Ð{œÜ©:†Àƒ¼mŸ8y¨“ø¦YR(ZKãzª‰8R/þJ¤[Ü}ú5:“S¹yÆ>}[²¤Ý„:A?©5"¢Ó[ßX®§‚c)!² 9Ïîšáp!ßü擼øâçM³¹-Ï>{›õõ7yþù»<ÿ¼ÇdÒA¤ÇxÜ& Ć*l{ J`3ˤ÷æ})m¬¯|-=ZCõªß1µ6ØÕ܉PiUîòýFå4Råh´”¾,sH4'b`7Ý1º,ÍÚ£ô  5‰4aÛSªÏ¼–ë0²&)¬¡¢ tÝ¥~@JÍ‚X(](­Ö-ý›¦€‹¯¯—öeÿÉUsµcõ.ÈuKµ2$'zœÔÂ×)t»{5w*W·'Ôõ4kÛ¦™¢‘Óóa¬­ O€œÕed¶ù‘‰¾¶®ë?°ó6Q:–»²°©ß2Ðõ®}¹ü2z¹ö—KZTC…ñ]]†&¦‹c_“˜¡®Wg6â€éœ½CäíkÈËßwŒÛñ^zx.ç>˜ÉÖSFœfO&ÅšÝÊñx&Îb$yšÓ4†$_D®X‘«8"ràû²[–º®dž'­ÅB‚éTZŽ#½Fƒ–ç‰1F:I"}וÕFC<ß—ËŽ#bŒ¬d™lƱ4ËRbÏ C™ù¾Ìq»]v¯\¿ß§9Iìû2_Y‘ù``EÁ[[²qx(+ÛÛf}±ý0”Ùú:y£!8ŠBŒãÈ<Š„¢0Ñɉ3]Y!p] ïÝ“{ÆÈøòe™#æöm9évÅc) F­ÅB¢²”q¿/ Ç‘+Q$n’ÈQI¾º*EžË|oOA I¿/y‰+BÇ⬮ÊÔJ$ët$n·%ó<ñÇcñÃPh4ÄlmIZ–’¶Zbæs‰G#( Ym4X)KéN&2eš¦Ræ¹eâÈÆ†ñÉ i¾1r&Ï¥ÕïKíîJà8& çhk ÜT~xs úrÿGâ¤F¾³½)a/¤ØÛ£ètÈZ-ÊñX\‘Á@Ü OD¼~_|›!ÎÎŽ0™Ž#& ¥, œ[·Ä$‰H– e)£¢ãéT¢ äðPÊéTònWNéHQ L2ò/¾8Æ‘/ÿý}|ï­®àW„¨a×3 I"Ìç†ñØÒ”:{Ë›Ní{D„FCXY1”¥Ãlf_÷}!Ï…•ûž4µï³™}ˆ"88X¦p{ž¥C5›öóeY¥v ah¸ËVWíò’X@ab„pE˜m ÍRð2!› a[X$ö_×µ´¤"³ù~ ¬„ØØýt…éP˜Œ…V× sßÖ"Ó=»/í{­7Å:í¤í0 ™ ~"8¡PºBé åL0‘P¶„hËŽvæc"Œ…YWÈ!ŸZŠ—ˆ'Â}g…VGeBÒ©ÍÈ. ٶМ ÷?$ìÆÂî‰0h ÷ 3#$±c+BtY8 `¾iÄ·Î _H!É„d,ôV„,ÖCœ fÓ=X ÁÉ„E)‚×7ÐtƇBž -G(úBbgCl˜ æj5Þ±ç6…É]ëíð|¡X\O(of"Ȇu|lfÏ f!¸mÁ› ¡d$ø®àÊp§-;#—.mËãîÉdÑ’¿ÿú#®á‘Ðèž/˜©t·'”÷„dWp=C£+8mK¦¥жÐ\Øï‚iÙ'xá;4H!ó…ȈµÖM-ý*Î…vG¬Èÿñÿ,_ÿú/ÉpØ‘I%˜VÓº3MÙÎõµ3Õq1–’ÖQºQUtŠ$Øed²<ß ýYSêÎL)}Csºì†¦ŽWcÛêœ ôý¢Ÿñýج­yüú¯ïÉg>s‡çŸ?‘K—¶Íññ¦ó“Ÿü’¼üòeùÿñ1nÞìËpذgˆ™³¤RWᄺ•ÛXOÿßÒë3ÓÇÕ5¥ûÙÔm •.Vh¡¾¯Ë÷~a9žÒsYR 6t#µW4ª-ݶ*);Ôc}ÁØQyKžKW \rìq=«´± b›²-à~Ç®§S9¸é_퇞ç±n_õ} ”né¶D5:ãAÍõ̸û~‘·©{æê'N?Ú«1ý*}²·èI—žÒ´†„§àdW—1­éÐMÍŒ®WóŽˆm¯%'ºÌ^Í? jVtòŸ+0¤Sx3Ö¢¿ Ë»Xó+ØÔm©ÃQ ȪhE;`ÞS}I¿2iÆgTÊ×Tǧé’juJ›jÔ@.¯†ÉRâwºÜ YÐþ\ÚT'ªeVˆ~¦¥º˜‚¥OÁÌnM†5Ô¿—5C¸®þxWßj÷îü%ÜÚ·U»áèŒÍQ@t³–v¾j×-;Í1ÞR„. 0û"Ì|S†ü䇆»o–\{§Mï¬O=ãÊÅz¬`uÍ¡}4&zdư_æì–¥8Ƙ³ÆX:1eIžç,lvQY2Ž"Äuq²Œ ìó}§Ù¤ð<¢<'sFA`ëcl¾Cž3ÊsÚŽƒÛjÑm6¹äy´×Ö̼߯Ùd²¹ÉîÆYAâ¹.ëÃ!fSVVL2ÐY,è& þpÈN•%aQ®¬v:˜ímÓ)ÓFƒÃ Y¹s‡4ÈUk0~ï=ÆEA;I¤‘e¦›$8­ûQÄ$Š`}†ã0ŸÏ‘v›Õ$áøî]Ü“r×ÅëtH}Ÿrm^£ûû,â˜r0Àó<;Q÷¬ªÊø>åÖÞ`€³·Ç™½=.ù¾é6bÒ”# 5†`± Wá{3ÏYŸÍÄ-KÓìtŒßëÉ ¬ÃÙÊ y»ãy$iʬ,ÉÆc „wÇ[\õÞãÁ­›dÍ+üìp•V6¶‰ÌiŠwþ¼ø®kð<Ê•D5 &Ë(³ ™Íp‘~ŸòøZ-œ£#K]! ­ÛÆ1q–Y$¡Ñ°ÓÛñØNûO&ÐYáýß í^Î_½zÕ|çå@ÄC£e'ÅÓ©ÂWt(Ægˆ"C’£‘ECz=ûo³¹¤1¥©æ.´« ‹jTIÜͦuŒmÆÁ]ßý÷[4¤Ó±?IbïYf¢\딥¥d•œÌ`1ƒµ+PxœX[ÕÀ¿©cé.vLõa”A^ÜRhu Ó†Ãcè³û>[=…VH Ã$±¨IXÂfi]˜fCK2M‹Hô;_…Æc{Ê›v¨G©¹!JnBóŒ 'cKOj·áÌ 47¡ÌaáÁÑ1Ä÷ píïåÜÚ º+pù Ü» ‡÷ ¿½‡ »£c(B8ð!ߴȃ?€ƒÈ†ømD6›ÃÁìˆSG°V¨ðoó‘¼A’¬rëÖZp×­nVøýߑ˗¿Ç«¯~œ/ù#§4#c\â8çÝw»üô§òÖ[óæ›òê«óÒKñòË÷ñã÷ùÎwžå‡?|Œýè)Þxão¼Ñæ§?=Ï­[M&“6"A-æ×ÕÂÕ3KýLžyfß|þóßáŸø:Ýî×®=Å‹/~š¿ù›§±EwE®.kö*‘{WmQ7Ì2[bXUcz|zÜ›5?Pcl!ýBxÑjr ç+¯91UAyUžEåü¥)ð0pŽ Žyúé·xá…{òÏþÙåÒ¥ãû nßîòñ„|ó›ÿƒy饇¸}»1 ÍÖŒZZáŒu]•¯i• Q¤5Kà‘Y ¬'êå9WkÞnÍæõ°–Q}úzmJ´_Yðœ­]¿•Oè%­ïS”îœæÁ´«h„ˆ½‘¤5^‘Ԫ͸&8 VqVĤ†.÷¬ z*øHu<½Zšz% / ñ€(ò®‚îª, jéÚmIͱD¿î•ÀûTäí,±Ä÷¹O¡…§k'ùÒµ‡Çt-¨n«:¯˜hc-bÕôìt¬ ‡².¥¯”#}Kuú5âH©Z&°†r¢‰ß)§1G2ÒõfZØÝFõl‹úÞ¹­å†nƒQ”ãíÏéåqÆ¢F32¤Ð[Ê dÉ^ÊC}­æ@-,ý¤¹rŸjBF5§)¡"ù²ùpÔ[ÁäàTbúÐ"œUãÒspæ9(váÍÿŒ¼£ ŠúÈŠõ5Õ·ìjŒ“¼ª4¬s5S9ì15«Š|tŠœ-§ÄŒ„ñ=#o|'ãøvIKJYmϹïÃWŸxìþç× ™C:CÚÆ¢5·5¼¯róa¿(ŒqÇÏs‰á>+Ä6ÛqìÌæsZ‹ƒ4•µ Ðqd."‡EÁØqdE2÷}ÊFƒ#Ça+Ž¥Ç8EaÏcwmM¦€[–²6Ks±À"ºÓ© ²Œ2 ¥ôm^'›x;=Có¾3xaÚ­Sѳ8ŽÍ·H8>F<æs“E‘SF‘Èö¶¥…!E’HÚhà†!…"â8Ž”÷î‰q]̃ÚiödY­M~ïó3¹zßïîž7öê£îýˆçÂÍ›BS£'ß}—SÄ Ïí2NNl±¿²››¶8.Ka84ÄêÁŸerš‘‘$‚1†ÍM+¿{×Ò§*mÅÊŠy·Zpþ¼h¶…mHF#›ÑEvÝ•emš ¶µ}MÛÂæaú¶&6{ ˆl2÷ph߸¿a›„É r"_h‰¢'±ÐhÙì¦FSÃáRa,Â41d#á’“ëw-UªÙ1ÎlZ§¤qf³!¼RÈwŒ}ص jØÁ?†F‰RÄê¶`ë¼Å³9Œv„Ίv =² N£'¬ª6d!ìÜVÖ„sç·°¨Èëì”@g ýB(r›Í±vÁŽ-q4±ÈEAÓ&¥mpNÚP„½Ì6lÚyÙôj6¡(Ù7Hj…í… ‹Ž}Íœ1ä3;õonÂâ¤{Và ]‹Bx¹}fû˜¹­üˆÜŽmTD f&GBqÓº9I$‘°È…rlïâ c¡ë@±àí·|î¿?‘µ=šQ›1•fQÊ’^é”w$5w#yÿT*ÔCiç*ªŒNYE­4DzäÒGÚì``U:ÿü—/ò+¿òeÒ´Ë_ýÕøÙÏžç^–ét“ýèQDõQ«æ7ø²l4r9>^•ŸþôQi±µu›'Ÿü.Q”ÈööEÒ´yšêü‘üœçžûK'4ÿöß~QŠBÄÒq"Y6Öêu6 99ñd8̘ͦÄqƒÙ¬OQxJyZ¨à6WÔzm»òÊÂV3Zºrþü¶yøáÛò…/|[>ö±ï™µµùéOŸàÏÿü×øÚ×~ÉœœôÙ95ÔWÍ@%”Þ—šÇ§´Gª™h¥5•eó×ÓsqX³­'ßÀš£º|WªØ@,Mj£îp¥û\Mò­ùÊGΞݕOúÇüÆo¼$=vƒ]¹wï¬ùêW/ð­o­™¯|åAÙݽ$Óidìö5t­YC§MK[¤Jl~Nõ#­ÖîV™:Ý×T5Yê( Mí^ÑåÅJoÊuê¿pTø®†¯Z_†[Ì;ºÏ-*"ñ –‚µQ¡ꎵ­ú¢–±×ùˤôØØóvKGí ý~U‘)-ª‚ §zÞ«PÄ©^—•íïšæ[<¬¢rGi&K‡·ŽŽ¬];§©_ÔaH=ã‚Ú´ý4ø]‰Rÿ õ4ùœÊËN­!ü¥ñšˆkTŽO•˜[*D–šÛ["R™Ù5•fT,Qq´ I~!%<×mÎj‚ðžý‘Ú®ÎId\s0>Ñ£BI\ýÜŠnƒf>šm-¾Oj6µUÏØÑ„mw‰È öz\¸7•ŠU™°•*†W? ië>_S©Š YÅ5«Æ¤’´ÝX¢'•¯€”5äéŒRµü®þ6tz°ý%¸~„¼Y“ú¬h㨾¢Ðz ÛˆìˆH[ä´ŸïÙÆËÜ)‘ÒÆàS‘ËÀ”,ö„ë?AÞúLî¦D[ëgC®<”ðÔ³}XdsÍ0]Ø:iZÚc5©Íò²úÆàeÛyN¯Ña«…l„¡½Ž‡ã à¸Ûe/Šd†¬E¾ïsØh0îv%p]ö;Žº]RcäØ&6Kk:e5ÏiC$"ûž‡3ŸËêtŠ›$Cj =¢§1›IÜh@³Ic4"OS¾S–¤‹Ét*¬¯›,ËdÌ‹Bâµ5Xiq}Ò’‘s™§Ö¯qyc‡Ÿ>Ètáâ­t(ç ŠfS\E!Ìd"âyV>CšRž9#foïäÙÞFÖÖ Š„Ù Óé`¢HÄqðqâws¹vMŠVËepë€/|vÊÓÊáü"xýWY må{pûŽi—¥úœ;£‘°½mƒïZ-! m“0Wbk[¬¤©¥Q­®Zä¡Õ‚ñXð}Ãúº ¿;>¶¯¹®ýìÅ‹V$}p`µÍæ½( ›¡Q½?Mmcã{Âè]H3¡7‡Ã1äu÷q›b5³Cû,ƒ ¬w~½ôÖ,]*˜Î…¾N” h»p\ã‚mÃJ ¬àÞ¾Õø¡Í:ˆ:†¦/-kõšïØ»ðÜŽcpæBîY½€Û‚Í„1L…° ­ Îwíóîöf)´R˜Æ‚Ï@¹ í¾Ðè n G0BhÞk-è`h†p8bÕ]Hë=ë} _\T IDAT}8…þCà\„"¨Xz‚Ó‚ÔÜV|«É˜;Â$7˜óB Žl¶H7²‘R Ð@©êAÌÀ<&”Ç–&‘lYשÖÀŠÊó‰¥,xC}Êu-ZmÓk†W@:µäWÇÄœ‰«g!H íã826…LÇ\:ÜÛñ[‡Äi‡¨-<ýì5fñ¦Ü¾}ɦ˜çCëòÔ5×/ÄÒOÚ'³ ²Ó·OмTed뜀 Î3sK…Ï»‚W$³¥çYW5g.ø3µ¸=k·7Ï¡lk¾Å~ÅS¥£ÒhäÚ`TtŒ…–®>UÆÊk“ì@l¡¸.ËLd©MtÙ«ú´L´hôÍG>ò¶üóþ"W®üˆ÷Þ{Ž?ýÓ/ðã?ÌpXòѾ.e9套>ªEWY©\ª*KrŠ¢àÚµ'yï½ðÈ#ïòè£/ËÓO¿ÇÍ›÷qrr†Ç».¿û»ÿ€_ü=îÞ]S N¨ F.Ë@=j„R3‰wuý¢î=Õä_d)Ɔ8ŽÐjEò©Oý„~ô‡üæo~‹çŸÿ±„áBÞyçqóþÃgåë_‚££*ä1RúSÅAêùªò-ZÊÏ´±Û­ñ)*k W–èC•D>×Ñp j©¡yÕô¢Ë©’ÁÖ´Ø®ì~pÄu ÓjµxöÙ=yúéwøÕ_½&Ÿüä;|êS?b08f8lË›o>É‹/>!÷wóÞ{ë­hƒiSÙ¥òt_]‘ ]諸µjNewÕv×SšS¿¦”íj5yW¯åÊ‘«§bïª*>QÚÔÜèµ§ Žš.°¥òõu;úú‡€cŒH ø±ÏÃZEªâíH––CiM{“ÊÒ*7×s×Òã{^ï]EQÐæ´²ÑmÕBwÕPa¨y•ndM›ÛNåøUËü°ÆÿçŒ:Qé1œÈâ¿_ð-AF¥ý©tôÖÕÕËÎÕð¼Êíùœ^jµø•:xT Ç;Ô.÷¥NáÔƒ¢rÖ[;]’÷T é©uj¢ô~-[#ª}mZU¼îsªþ57j•܈§Ë¿­§äm«Ï0Gz<‚å>Ÿ^JÕ©iÖöUfÅDƒôf*ºVD‡==>èû†5gã¸v̤^Uô®5–NÑÝÜÿi(Þ‚ƒ¿¶¾ ïÕÆWµÁÔÖµU !t@BßçÐuy×u¹!‚£´°]u¡ê6—ú°Fl††qpؽ ¯}#ãÎþÇûš2¥w¹”õ‡óÁg…‡Ÿ„õÀòââñÒ…Ú¨wÂÇaèy¼#Bžç € ei‚<ç¶±ÃÖ¼,YƒA¯g“¢È6EeIé8øaÈîê*2™H3MéÚ¬…•²0d4ãß÷eæû$ó9^YbŒa†œ¬¬PÌfwïw:Ä­–äEšÞ¸®Kóø˜ž'yRܼI³Õ¢p]fI" ß7½$!ÌsÒÍM†Æ°:ât:Ì\—µƒ\ßgö{(Š1´‚€¢Ý¦ì÷ŒÇ¬¥)‹Ë—Y¸.kiJk4bqtİ(ð’„( IZ-¦AÀêhÄùÑHz++ \—ölFÿà€2IHZ-Üf“$ ÅÍŒ&ËsY‰1ÄAÀ¸×Ã4›¤7o2ó})\—b2!wÌlŽ×ò¸yÐqnk—‡ºS¾ýÞ…'8H\0DÌf–öäyxý>Åþ> O­€¹sšMûhZ_· ÇlFŒ}ŸèàÀÒʧÑÀlß¡\„<ûë-~óGŒÆþ·?Íñ®úì÷Âph‹£fÓ&q—¥Íž­ ÔÊŠQg'K‘ªœ¢¬­u‘* am 66ìïei„•À7«ÓßÜc퀰ë¶61v++öwÍô ÕÒ±Œ±ÉÜû®¥—] l®ÃhñÌN—‹™ÍrH ë¸4›Úχ (Tv/¶Ol:vo Ží0jÁÝT`Û°¹ ½„±ÀÎÈŽ…BuJ2p=±Ó!ci7ù±¥[¶ð˶íæÒmFÄðĺE-ë{ïÞéó÷öí ˆ”K~èº÷œÓ½sï½þký¸kà,!qakÖÈ]AúÖ]j:¾ÑypÏCÚ¶7 û[û}Xî‚óÌ#¯@ç œE0š ffSÅÝÜθ‹„éïBaxfˆæu…åÄw5è×±ÀÅ߆²cƒ´mãÙŠMm!í &·ô°ÈU‹ÇÒ¬–98mp2U²ÖÊVÆ+ƒõ°P^*8®}’x…e9˜4Û–jg– el`» ú›9úмúÚ>ÿñ?]å‘Gsžÿð+|äù»¼}óûY ÷”.•Ùý/aœÂ>8s[à˜ž¥CIòŠ>-¡,ìÓ5[Øé‡_YŸ¬Y1? {N³ÁYÜMÈ:ÖhÀ÷ h e¬OÌŠô\e'tYAžùɯK»ðÖ[f6+k”•ʶN•’š˜{ÆxÜá•W>†ë¶äÒ¥7øÌg¾Ì3ÏLøÜç~‹µµþù?ÿŸøö·ŸNE¤"Ÿ7k:’ú„¦òñtk•MUå´´˜?Õãb3@.]šñÈ#GüÜÏ}“Ÿø‰?‘ÇÿŽìïç]^zéyù­ßúIùƒ?xÎŒFn ˆ%º_©>¡‡µ\ƒ༬ÂߪÉÈ9¥HU-Üž‚9·&Ÿ­Ú¬ô±t¡ÊÏóLÿ!²ì R'¼ÏØßO¸té>ŸøÄ›|îsoó³?ûežzêu¹rå€n·`:Ýàþàþè~€/|áyýõ‡¯J–5ÄR–Öuû/+ujúuÝç*ây¡UÊ\Eè7õ½]­†<=ÏÍÚ5ÖЩG¨)Ù•S–[£íË*b£V]QªF-òù)¥|]ÖíxO«±[ ººµÄ·úu²£S‰*…íT'±ZÆÞÒst¢ Jj)lg5À¾¡Ç«Ê¼èèäeSW9N5õ{:P€•Ô¼U» ü›ÀÍÿz€ÁŠ6õ]9ËÐ]ø×X“•@;°à@òZ$Í}íäûµB9¨MP¼Z¯£ÐIE•ÿXÑŠºJ±Ò©ˆÌõÐ¥º¬žNtå‚bïÚW b6t™U¦ÄEýª¬iJx®i“ï)æë먲.4XÏÌàÄú¹»¬†‡¢§Ö¬¨YTT'5¿“ŠqxO?çÔl…ÕœL–ºÝ#݆‰~NÁ‚ôuysæÀ?eÝ-OÿÄÚÓÞÒ4ïlÅÖ“¨æopQù¤vdeIZ–Æ0á¦ãHâyæ¢ëŠç8®Kê8Œ×q(‡DZª(ÔDèŒòÞŒÃãM^½³Á7þ¨™“Yɹs%O}žzÎáé§ 2…á) Œ#™cpKÃí²$4† vžR–’f$‰í‡âºt†CN¦Scè4›”ëëÌZ-YF¸ aà7¤aQÄ"Ï â˜ælF™eâ«`±¾Î0 9º£‹…ýŠol°\_—íû÷áý÷iÎú:©ç±>2MSü½=»»6á;ˤCò­-Ìæ&ÑÝ»4ã˜q£yŽÌç̃@ÖË’2MíÐ¹ÝÆÛß§ìt×¥0†Æh³þÑììprù2Ãõurö®]ãÂÉ ­ùœ¬Ý¦ÓëÑ <ß— Ë(= ²v/ÏiF䳎ëŠY_'ö<9‹"†”‹ÙtJ™e–i;âűH³‰×éà·Ûà8xO¹ÖâƒkOd÷Ø9wÄywÄŸ½Ñ #o>‡^زn—b6c‘ç”YFãæM¼¢°û·X`T«á^¿Îr{›Äóì÷l0 ¡)‚³X°t…åÖ7à¯ýÄ!ÝpɯÞüQî\Ïáô¦-ÒÏÎì¡Ó±Å}·k§ §§¶¸ßÜ´¦éÔN3<σD=¿£Èvh»]»œvÛŠ¸ÓÔºDU¡x"« ½,ûn Çùópx¸š|´ZösÓ©Ýß·`e<²ßäTl˜›Ó€ùâ‰mžÝ§þš¥á46ì3®¥F-c˜Ž¡a}Û]˺M ÜlÅâ@hoZÃd),\kå4m¢öÄ@xÒ¦P4íöäû“ƒ×ú{pa6 œÍ!nZÐld)8A2†(¶&8­¶×ìþ/î q EiŸž ›#,˜8»n ßíÈÖ½ÜÞ£l†6ýg"ÐxKÈ6TÏAz º±Õ«4—œ nÃþ½-ÂÉÕ8x‰u|ÊcðÖÁéÙº,ä¾=,¡Ü¶íç¾µ”M\5(J@FÜåmÈŽT©ª®&·Ë0•™c_»ºK½Ãvtêá‚9åmÕáûûôÀæu” 2“ò©ï?!Ë…ûÿ<λ7/Ñëlp~ïM>ò‘×Yßîðւ厡ô„°ΞI=;±ŠÄ…¦/­Í¯x6m}‘@;´ç2C¬~¸g5Ù¡¥—¹[öúš«ÅJ)B9Ð'Ѷ¶à*Sú©R1Ö+;ÓZX^Rãñû5î¸[ ùZh«©zOÝ¥ª¬=7yüñ;òË¿ük\¾ü “ÉCòÏþÙßç嗟ѧ»¥9ŽÃÇ>ö®ÁŒ—^úóyPó£¬ q§f?[Ö,_-½h¹„·ÞzB Išvùô§—~ôÏt›Ç<÷Ü›¬¯»rÿþ6¾ß"Ï}-BÝÚ~ûµaj‘ª«?• TAÄ /ñÉOÞä'òyá…×ÙÞ>d<Þ÷Þ{‚/}é§ùÂ>ë¯>&gg"޳4Ƹº³}éžV&3=O½­JR¿¢óeM©ÚÕ f¬ ¥ÚÞF­]ÛÆRªªªgSlè]õ*hµŽ¸zõŸüä>÷¹oóÙÏ~‹O|âÛ\½z›N'e0Øâw–¯}í9~ã7ák_»ÈÛo_àô´ œ!rŸÕdg ÕR¡Û?ÐŒª²éi¡\MÈNjsp-=­˜ªü•~½âÕsw¤ $ª,8 Δ@Ï¦ÚÆ^Ðíšë¾Ÿ‚ЦV­ï±Š7ÞžÒ)ƒÑ¿/ôï#}UaUx⤥›Õ¬`•8^…\VYïêr“• À&¹+%ª¥û\Å<‹³]]·(XT|^Ãþ7þsÛYóç` ©á‰ï¯%z›²FS2ÚÍ7úûšù²©8úîJÃaê<%•Ù•Ú½Æ >Z«b ÍåÒ\ CfQDC„^ËÎ|N‘efEÒhµðÃPÒµ5cÂP¼45ÉpH³Ó‘ÒóˆEpÛm)ú}#­–™§©,—K¼Á?M)ƒ€Ñ•+fE²uã†i,²ÖëÑcnÝ¢t‘V‹6˜Îx,E˜$Š$÷}Ê0”|>7Åæ&Ež³Y”ÇDz˜N‰]—nYŠ“çahQDfEÆ"Ã!$ ¡ã˜ Ž1í6„¡4² ïî]zƒYó<Ö]—Îæ&´ÛbŒ¡¦FÉȃ@Ï3$g¹4P´Û2 ÄqÈDdP–œfQMòz=âÍM’0d1›ÌódY¦¥ÜØ 1´Û8ž/­÷ß#é´Ì‹ß‰äùyèÒ™ìæ9ïωç¤&6†t}äÆ –Q$åÁÍʘL I­-#A³ÙƆ8ƒæà§Ó1²±Ar|Lž¦âg~ºdrçÌt7#þ‡¿;e·?åÏnXþã{}ðrCi„“V7Ž…K— »»0 ý>jI+œžÚ/IäÐÚqª©ƒa}ÝÒ‚‚@˜Í ß·÷γ3Áua:5d™hB•ÇvZÑn ϳþݻ… h4›¶ÀÎsCQXmGYÊSP‚¸†“hEÐ WR·5µ¦,»Í§·…ndÈR(§Öb6(¿oÈšB†3Ô• &g°Þz;V€¼¸.8 ”wíÞq¡éÙ‘ ´ !–Zææ¿ΦP4„þžaû)aàâThÆ6cú¾ÁéX ÔùÌ–B{ÏÞ-×RØ[3¤ç,›`)'B1o ¾AB˜¹¶ —Žm0Ý®Zª†~svÛfGà–pÒò¾Ð<6¤! -íf’õs˜Œ…L¬öw6ûËíi:°a}¹#D¡Áw„²mC í4C(sÁÌPpÚ†²'ä#›óQÎ žc©Q&ƒtè6-(L'à9†rf5 žRнóÆVŸ UâRfS²…ÁéÚ;±7·J¹<WÚæ¹§Þf£/¿vINïÌyåÕï3›çZréÜ]sþÜM.\¼-ÓE‹³ëÛàåB „e|[LInŸÌnnˆZ‚ïò©–v’W:·„Î:,À”vŽ\ øjÎÒ`ˆ(bÈ–²J¥åõ? Ñè¢*ªS³ ªSjìû¢¤)07+@VM-$c‹,‘Ÿýì{üìÏþžDÑ‚ë×?ůþêÏÉÁÁ"Uao%¤Æ„òÐC÷Í¥KïÈ»ï>mŽ×«„â:•õMõKcê9" ¹víøŸ~££GÍW¾ò—ÙØ8foï§žú–|æ3ßàé§ïÈÆÆ‘i·û´Z%kk™¬¯Gôû¹Ú¬úý”~¿¤ß/¤ßÍÚZ"W®Älläüø“ýÑo˜O}êOeÿ¶É2OÞ~û~÷w€/ùÓòµ¯=Ïá¡GQdªIqÅW¿` d "ü¥@GËKåçO´¾ žW;_ž±EæZU¤káYÑÓ2¥B +²·Xrö®r:<ñÄ)Ï>û®|ìc¯ò ¿ðªyá…wxøá›¬­É²”÷Þ»$ög—Ìþá#ò§úi^~ù!¹};'ÏÇ&ËuŚɊViGfÆRynkáßTññ©±EôB¿ð¾N7z-¶tYÕG< Î+öÍ*C¥Ò:TméRm]«¸äuïU;»¡|¢Ô¤gÔŠ6®™J™jéù˜)Ýi œ;1˜«¿¨Zì—tŽŒÕ€T€ÈuíR«ÙX «ß‹u³jã‡J§:»íÕëŽØ0†Y‘UžFEwìË=ÚÖïDZ¹kH˜à¿2ø‹tÕW¬®‘ˆj”%åx,…&NoëDc¨÷–ž%3­9>5ôV·Þ©jиÊoPÍcíMVFY*æÜÕm=ÑíÙ©é'ª À›HÐÖ‚;]åTTÂöƒÂ™“€+4]iW¤ê}tV—šT““™N"ÔÊöÁ´£Ú¾I-ú¥rBvjNW Õj¨‚ɵ¡éá²¥ïï‹m,^ý4ôaøLáÛúwÕ]Q–^¼œK·JXõltZ5¨ù¸«kA2cHMcª\9ZEŽ)…L§£H&Ž‹{pÀÚÖ&w>ü„¸Ó oÜ<åÍk1_ùíŒ2æñç…G¾.]5ܸVÈ+ÿ!äðÀeºtÛ9s„¡ïÓpq]—–ë²0Ü‘Nž³?›áù>ËV‹‘ã—¥lO§¦ǘ0d¶\JY–˜(÷âEëç˜Ý]&ó92ËT„ÎbÁv’0/KfaÈbs¯Õ’­{÷LdæylÅ1þÙ™”k·o_¹Â|sS6 æI"ý×_g¾µEòè£lL§"wîÐL(ööh\¸€?à¼öa¯g’½=)G‚’4Å Â<§?IÒncâÄ;;–¢8IôÖ[t}‚€™ç÷ûH£!k³™ÉZ-Ò(b)"“ng87I(U`<ñ}í6™1¸í¶8$‹É`@z|Læºà8•+†²²Œ¢(ð’D¢Ñ7M­§\J¾·Ç¯½èËÿü¹¯ñ±'®óö·ßäkË'ÅObŠÉY[Ãä9AÑI¯^Å\»ÆäÎ){Œ^p2A¶·1ÇǸo½%Þÿ0ÍsçHÞ|“"KYœÍèö;òñ„^oÀ×ï|ÿê§mç‘Ú„íímT7›Ù¤íÛ·m w·kiVwîØ"¿,íD¡rvÊsK²ÇRˆ"›äeU Ÿµ­œŠvvÄâµ­ckËN3\×–·ÞZŒ{÷¬«”çÙí8<“[‘Ô`l‹ÔÈÄÀ| Ï}Þz¦®ê´$ZB7€0F±uš…†– }nŒ v„2³éÍ£»¶äݵ¢^gÓ&ˆ;!,–à-`³' VÐ>9µVµÎÆïÁ¹‡ û ¡xJWp7ànóLC6aáB˳¡t² ÅyÈŒœÀ´ éš±-Ìê ÒD˜`'%íuëFå¹BÑ·Ô03ƒö%Û}Ÿ …ãÄ6½SÃâ"ø»BpéBXDŒ=«/Égàö`Ù†ib)W¦°ufK(bðB›ïa4±Ý¹h[dnfn(}ÁÙ´q!kZ¶4´{ï€«Þøƒ{àŸ‡µ.¤±ÕÈD˜u[œHö”JÇR L¢O¶6ä¡àì9™GVŒnN˜nÈû·ãS…þÖŒÉ|¼Sùü¯?ÌïŸFþÑÿe>úü<úpÂç1^m—d(³hê‹Ð*óÄ èƒY a©' p;,!9†¨#ĘBhÄvÂT” [Œçàn¬žØÌõɵ/+‰¯à!©|´x©Z/|¢OÿZ‡¿²bõe¥“¨èV›Qdøÿà÷xä‘o`LÀ¾ð÷øêW?ò€bLÕnôlÃÔ¦(ây9¾?VPÑ®¹*yòÝ%REjFV¥Q†1MööîòC?ôGÌçÿôŸþ¹qã šÍOðÜs÷ÌÆÆMü=ööÍ•+oHYþ!‹EDQ8ˆí4W„ô¢¯k]¡Ê²)¾ŸÐjÍ÷åë_žkמ”W_}„åÒǘªÝ:Pøã˜UǾR§ÞQ¾Â@õ€k²:O;JZPTS¨’ïN˜×(\Ô*žT5ëØ"ô2¾ß`këÈ|ô£ß–§žz•^oJ£Qâ8§§»rëÖ|°É;»Ü¸áek“¨Ö¬6Ñé()Ðk#ªué =Oû5*Þý*ÚXu ³š8ôk:Š™Ni´Ó¯jÛô&W'=‡:‰xS·é²“{zý^>jV© Ýæ§jþ ‡Zôk`ByO‹þD·«¯vËJSR£-5*p"+ǨiM@0Ñ}öõ½sÝŽŽž+j¢‚ªÍ7äÐàAØ`5Ѩ+þ–Txñ¿ž"Uc~É_„F*'ª¨fRV®(Du~ªbV"ÍÄpjk§Z\›Z=Öâ=ÑÝü·,­öÞ¿†ûs;‘È€Gu r䨦Éjô0=R%ŠŸVº{¹N:ªÐÂÓÚþvj4,¬•%aYÚëÅsY…¥!yò)âí£eLî:¼÷A‹×¿Ýàl²õ°#>"<÷ýÂÚ—–ã1:ôdâ M vÊR‚å’nš²Yö¶P–ì…!F¢ˆižcòœv³qzJØí²ãû²wÿ>ÑÙåÚǾω1tŒ!<>æ¾1r¯Õ¢‘çæB–IÚí2\_‡ímZžÇÆûïÓÁséÆ1ÝÉ„´Ó¡±XyÉö6E´‰{=ÆÛÛD£;GGbLÚëÁz×ZÃN&–Þ4Úð¼FÃúý¾Õ@ܼiÁ„çY EA¿/ ¶Ø¯hK®[YÕZx·k?XÐhØbߦz¯,g··í¿q 7nX€ÑéÀ;ïXpS‰cÇ.sxfðtR‘'à9–ŽeôyQÈ›°¼Ö×·úŠùú[Öb"Î E º}a´„Ó´ºÖF4mÀ4…v<Û$‹\ašC¾k=øÂØ‚I-xÈÛKš°ð­3T/€¹uÂavßN#òûª·½jÛ)É‘-6=õ t ´Xz–âµ8¶¡Å¶Ø/ÏìÆ‚®N+X‹íö;kßz¸´)áá64Æ&®»ÂFÛ Ýña½ñØçN¡56ûd؇©[Úâ"]Xæ,!]ü®&fËäΑ&;5„¢÷ÄŠ¡Í9»|Q3gé&4vò°Ø€°o¯Þ™}B9ó IDATo±)Ì ›œä¶Õâ#±m8R«)ÄZßz½ÃzkP̸ü°g®<4”ñqƒÞlØ4ñ°C<òÒëO0?Á“½Ï Ͼɣ-ä7/“ή@àˆ}zøš0Ž¥Õ «ŸÈvmR¼[Øx¦–Øíˆ‘{.‹m—­A1TúžcÝÖ¬ÕgÍr³R3¦µâ<¯¸Wö%e¨«EÜ{útêÕ¬7+ßþT‹â Å³ÏNø[ë·¸|ù5îÝ{’ßüÍ_”—^Ú­Ö£ÖHŸNË\øFc ýè7yýõ‡¹wïj•²^=ÉdE_ª—?uEªG³‰ü“ò«loßâË_þk¼øâ³À˜,˸{7à½÷®Ê+¯ü¯¿þ0/¿|A‚`‹Å"d6k3™l0™tôé«ÃdÒg2Ùf>_çþý+rïÞ#üÛûC|ùËæÅ?ÍÝ»käy¥WI´h¬Ú²¥‚DàXÝ…ª©R¨Ó…Ê"v¯¦†ëߤFX¯²Dδj©@Ö™|·lKÏÙãˆÀ /Ü—¿úWŸù‘?ä‘GÞ“v[88¸Â7¿y•ÏþC¼øâs|õ«Ïsýú:ƒERã›TS‘™¬Ô¹‘j)Îj¶¸YQͪ@¼cµ˜uÕEê|EßûÙûZÉE5P»ï¦¤Ý• ÒŤ5v¨ÿ¯¬\¯ê5ºÛ.¸¢@æ@[¿züµ:ªZº/[ºžž¬„íoXKó¾ªpª¯žNN–5]H•^êõëÖ*²q-…¾j“/•zX©+ ÎH}å:—Ulsb«UèøN0ê4(#ÿ9wJ¤æZ]ïÊW4)G?·ü¡´ÊcDÌM±Vl)!˜+:5(Ý'Q`"–FU¹[‹.ÓÜRÐrI—7QÖ¾Ýe“ÕÜš¶U‹0Ó)AC/­¹ ÏÖ}ÈW8]vÔõj³–/¹¥îå·4Ù<ÖG@å#Ð[Q ª¡®ì¯ŽY®–bìç(]ªµ’°ÉL·_ó8¤J%oë¾V:µ¿• Œº9Id÷Ó(µKô?ò)Œç#g¯Àô3RS3ü˜ïS§­w¬«®EÀœèù뀹¯—é Ýç÷V¬ÊJ£#K(«éÊB·½b"7•*'@·(hаp]fYFvýºôïÞ¥û æèÃÏKþÎÛ&ØqKÄKoŒäÚ+syúK>öÑ™ùÈÓ3>rY䃺òâ¯4Œ+ž ›"K¡ë8–%,3—šMÏcîyFf3Ü8ÆÉ2i…qº]i…!Ë$!LS¢²”»A@8›çŒ!‰c!MÍ£®‹ɶ·åhw—³n׊­§Sº·oSd™læ¹ñŠ‚Â÷™nlÈb63E¿O²µ%ÑíÛfEÜhµp Ç!9wŽ·Þ¢õÞ{2{òIFí¶)»]q Ó¾s‡hcƒÅ¥Kâ-Ò:>¦{ë–‰76ú}Zã±,77M¼½-~’Hšç~šâ&‰ñÚm)|Ÿãý}ŒF¤y΢,e–¦&žN%o·1EAxó&î` îö6˜¡1y.EÆ´Û” ¹ïc&òÙŒ¢(ð[-²²$?wN¸ß8ggW¯â¬¯KRF¢$ÒÔ~g3ŠV“ß¾µÏÜóøožþºù¥«¿'ÿç›?Í­E߬íöEÒÔ$EA°¾Îl¹$"1¾“‰akË‚ŽqÍlw—òôTz¾ÇYfhîïóK?ò¾Ù ß•ñh‹ñÍÌ43pzKž×íZw¨ °…ür)<ý4ôz†³3+öŽc 6.^´Ô'càâÅÕðøØN+êÝ4îÝ38Ìçvº1Z°áè]²ß·¯£#K¿ÚÚ2ܽ+<ö˜¡Ý†÷Þƒ‡‚fÓN/–KC ñÚ-a‚À.6‡Eams×1Ü>ä¢Á]³âïÌsN(O &µ¿3Ç©xB´‹#Ãdl òXnÀt.´–°ÔÉMd ضÏî3#ôÛ†$ÙÐÞ²1ìô­Øý̵v§÷\ÍPËÁíB8ïHXxoGg²Øn¼É Q  Çû± ‡0t…D Y }¡Øç&ÛPN ÅHèÏ “nA§ÍHXnfžà:V\==r×p®)d뀆Ƅ[†4&GPžØ©J°¯‰ܾ¤1ø;…àônˆ¥Þ«í£Ñp«Òuð§Pd†àŽÕh„}{\â3hï Ù±Á™XW³ôŠH˜e†µ$¡ p& …Áo©+††š¬ÇMp¶äÞõSòÅ+œ¿Ø„à2t=!kC£ ™ÏÍŸ|éŠßÿ«æ?ñ2?ómó¿þ/"_ùªÏ—ÿð)<$` c§%¡bÍÒâÊÒ%¸©šq!˜Kë ðî)· Ò›x~^iìS»ÐbÊÕªáHÝ“šjµYsfe5Û­¬45ÃÁxǬƉvfwYu€/j7Úáç~î«|úÓÿÁˆdòÒK?m~ã7~@˗ʪ©EZ®ŸÕÙ: ggûÄq‹O}jÂË/gSµB}©é.4sÀaå*ed}üÂ/ü;vv^åë_ÿqþÝ¿ûa-ºŒYY—&,—S±‰Ûßǵk¥¬xô˜xµ‚Yj…o\e2h¡\*Å Íàð5—ÀÕ"x\±²ê>W’P;ònMo2Ñ"<¨¹ùµÂÒÕ¸ù‰V"VÉ*Ò˜ó€‘G=2»»_çã]ö÷¯SŽœœ\à?ý§§äø8⃶µÂ)jr¬ÉÄ ’éõòpSMœ*kSéPŽ+O“¹3c«—}]îÁŠÃ\©T•^£¥¿ÛW[ÞVòT´©žçMcmZT`ÿpZå]*\{½ f¸nɽ4£Õhà­¯Ó5g:e6±Œcˆc<d{›0 Ͳ(hg™à8ܹxßu¹ôÁ”Ib‡¯³¹ãHºµÅ¬ÕbÇ\zÿ}¶ â˜"pÒ”¸,éd™Œ}Ÿ©çû>ƒ‡¦9™ÐžNÉ‹‚ÓcØ=9±.TQ$E³i¼áÅýû,»]Š0Ä!Iã†!gÝ.yQ$ ÌfIB1™fƒf“¤ßÇ™1¶û¾Xq§ÃI§Ãa¿Ï°Ñ Ñ©G{±À5F¼  ³\"·o3)Ep}g¹¤%ÝÙ!ÙÛ#].É’“eäGGÈr‰‰ ¢µ5)NNìD/M‰ŽŽÎ#oµ˜M§äaŽCÑr¹q¯Mä”rõáyr{Á;×v™Ž'¤Íh¾ ²,£\,`}/èEË岌¢×³=—Åœxœ²y~¿ý©·¹°v‰s‘ÿû·.s÷ÌÀóÃxj)Qql­a]×°·gs&f3 &z=;}±"oÏCÛ‡våø”ç¶è+ßÞ¶Y÷îÙÏzž½Kº®mŸœØ)ÅÚš]G[êQÛåd™]ߥK6ƒ£×£rÕ"Ï- Ib;µìTÄqÔ¹'µôVÓ p{—5¿a í®¥­œÜµ‚ebðRáøvh908…å=Û1ot°)ÏMCtÕlY÷¥(…MH×,)À¥¶PœÀb ýŽ­=ÚHn8ºeÿÖô¡_Ú»ÀdÉ „®½£¸x-;¿-°]ò|i×·¾cà‹»VTz6‡#u¡›A'³ËÌwís{xßÞÙ{ûÖn¾—@4§cˆO,l÷!­-{Œæ©z3f#CÞ0dŽP:КAÜô‚mweKð²¹aaÍ’¶}ømÁBá×hGö®nчر¥b%X ä-íT T#ÁNªœÊ„¾­1ó–J¶]j—yë„£°þà“iÏþðË$e‹ßxÖf”àY‘¾/Hç.§·ÖøæÛŸam=ÝíwÍ¿g.^6rp¸ÁôvëèföšÌºZùÚõ CÛ2*rCÖ²ÉäþЂ1Ù°q9µÓ›¼¥Oã±vXÛßS1Œ´@õÔõ'`%vNkV¥UTì¼f–/µ™:ˆØà¼­­‚¿ñ7~—^ø2“I›?þãç‹_üK5ûÌÒXw3Y=m+{”‘<õÔ![[wùêW?¦S¥O­ßêjgŒhE³¹i×õêë2îñoþÍ2›U“’jSÕ¤ZXÇ"²@dŠÈ‘Bÿ#2´—†DDrD¦Fd©ÛëÓyQ› U!n]µÔ-ŒmV9™YMÚZ-udµœª­é©/r»–Ä=R@U ЫYâDûDQ‡ýýC~þç¿Âþèïó‘| ÈÍçåOÿôã|þóOš;wÖ9;ó k®LÓUË—ŽV ¦&J…Û×ß7k6AUrÙQd# `Eϑ踷£•ÞXÁ¸6Å©¦2óZ _•ïð˜jV*À|TÓ Å+%/Ÿ~ @b÷Ŷ_ß7ðv-LpV³.ªlqSý¹SSÕ¸ŒT4ݨµ­×´j¼¬ú˜¸x×ÑiU© ¿¢3i~Êv­š«ÜÙý·¢»5äÄ5³ÔêrW§"{Æîz†ÀCÆR ðó€"eþ ¯¿€%…£§Á­ò•+ëW©,Y·kûV-©{PËgŒô5¨-§XQšØÉVZ‰¬–÷8«Qƒ*mƸ¢E>F‹õʹ8íêå:­Yî³$]°Ó™é!œÖr$§µÛ¡èþmh/ ¯ £2÷ªz“šwCVË®¬¾{•¬L·cOþ¨ÝFœÚ@k¤bõž®W%oÒXaÙªÐ'®îÀŇƒ¯Âà›+O‚X—½¦S$5h| G©Ÿç@÷ý®ÕS˜ –ƒ‘ªNE)bä`RÇ‘‰¡ëâˆ`°l qæEAX–\(KNE¸çû =OîˆC)‚3²yû6ýFƒ`sÏÄÝß§·ß£urÊàå3Þøf(á…œ½‡®<™sûµ‚ã±0Ú\£ãlM§l „ó9Ó4åNšR¬­öû–Ög)12ˆ"JϳNTiÊI’p¼±Ac>ç Ýf¾³#qlÌñ1ñ½{¸ó9¸.­åÒ:¦% ²\2X_—öÙ3×åäêUüÑ·(œ?Ï8Ȉ»]c8u]í¶4óœaž³0†èÚ5d4bÖé0îõ(‚@–iŠ_–ÌE Ñ`)Bj gêdœœX N»×éàø>¹1¤³'yNâû¸®Ks± •eŽ#†"ŽCY–œôû,×Öl¡½X0w]¦¾ÏÔq$i6M>Rôz¸kkö<¶Z˜ùœ|>'mµDÚmkkDÓ)dÓóç)|ãyaHëþâå¼u½!{8gcgˆOxõ÷”eŠ<õ$Ù­Û”ã1&I IÎÃw–yN”$äiŠÙè³8ŽY_ øò=.ìŸ0µø•ß¾ÄÍÞyÔ^™Ib ý²¬’µí¡a ÄX,,íÉNJ„ùÜê4ªì M ÉØÛ³Ó„££•å¬ã¨"²…YYÚß_¾l—Qem…¥šxž¥míï[Pr|lÝ¥µ}»ý£14–5maYæöwímk[ä) ³ÈmJùpl)S–/!ÎàÜsp2€³ÄÒ‹:kÖÞVZBcÅØvßÌŽÒ©S{WÊy‚Ó/Ò±­krïÜ’…]o¯k¡²¦Í•H,Ý(ò­žÃ ¬ª,[ÐÙNC³ÆV²¬ž­>DkÇë6ì4!*aqßfŒ”]hû÷aÞ°¡EÓfQ˜uØnØ4ê™(Éí1Ié=K±qÚ‚;?°iÝ&·4¨¸a9¥Rfî[è{g`.Ø€A'¶ï-–5å\d©&^d‹p·‘c'˹å”Ú†ËÚBÞ²iíꈃÂRâÜmµ‡UÑmKýƒÈ† 6sœ(á‰GgìlÞáÚ Fƒh´íŒÜ ì/ÊAàͯ>-Üžçž¾&.|‹'¿CØpûýMʳ KërÛB^å¿ ìö—¡†'äð XÚÓñ4!³®lØ}qfbÛ].+-µT`¿––µUKsª G£•ÁQÍ佪.šJ0ÞäÒ¥ëüÒ/ýk®\y›ƒƒËüÚ¯ýe^yåj­¥g´ƒ\ s‹Zˬš D2›5xì±{ln¾AžŸãÚµ‡*r²¬HUQœh±åñÜs7ù›óó\½úu¯È¿ü—ÿÇÇU!±Êª0²â¸Oµ?է󢿔թiêÓWVOc¾§ ÔÚ—•e àjX£¯4ôéÜQ]G•f]Ùà:ZÁTú–ªõ›« ¬¼ I³™Ég?û&ý¯‰ú¡ßa{û€Åbo|ãy~ó7?!ôGÏsóf‘¬V”WUƒ_Ûß^ͦ·§×DSVmè¢Fêè~lVȸfÃZUzfxìkëq—ï©6ïT®d5#ÿª¢m«UlR»î¦z.+÷)!ü[¯ë´`©v±•–¦²ñ­(QU%½U …l‹ íškZPs¶ª´;zþFºM›J«ÊjnQK=ËÚ5ejjÙY œT^®in6Ñcw ßÙ©C¿J×uÜW ú,ð²ügIÞß "þ‚(Œ”Bé9¥þìj·º«‚àõÚ`´TÇ¡¹v½5ÌÎ4TÖv² Å“ÓZÁÛÕ¹Y+|+Qy ÓDƒh’·( P6 é)ÅgÓÒ¨œ»ºÍ[žwh€Äzz¶mÙ¡šÑ¾‰ÜÖý8T «ÈùLma+ƒ²ÆÊ¼M.Ù´ŽTrÎ.Û4lHÜ^dRsÜÎj=@nÙB^Jâ¸úuPÇo³Îùš¢m}ζÝ7sj‡Ý²×@~à"eŽY[]ÉÛ«!§œØ}2ê×!£•ÃÕ°7ן—LȬ†¯5“ÄŒG:ž'{ƃc Ç ccX–%™1•%Žã°î8ÌûeI7ÏÙ1FšŽ#Y³)¹ežKZ–0Ñ:ìí±pq"ã‡ÂßêfæÚ×Jgg7呇9÷©–sx{KšÇ…ô’¡0ž07FÆH£,Yëtpº]וFQ01nR,çsL·+Çëë´g3–‹÷77%¾p|±áé©$ƒ‰1¹. [0׺ IìyÆ,—²îííIqtD†w:2m4H¦Sâ rßgè8¤ŽË¥LËRæûûRzN’ˆ3™ Ó)ý¢ Cc\×i#fs¯, ÁYæ,z="L¯'îd"ál&^žKº\²˜NeE„iJ;IʯÑÂqHŠÂLòœ™ãÈÌ÷É ‰]W&›› ·¶HÒ”b2±T¡~_¸}›*ÙÚœžâ¶Û8aˆëybÚmã/—âgÑᡤžÇtk‹åba…Õ†pvF>#ã1›ýËË—ùÎÉ®<Û¹#ïݧY"oìátCL<' aèàûâ†!~»mŠÑHŠ8–ÒL†K6ÛÈ/ö Ù¯É;‡WåÿøãïçôíkÂþ¦ §§¶ÐßÚîÞ…VËP– ‡v²0›Y‡§ÙlåÕéžg¹ƒ@dY4›lo ó¹áÆ yqQ‹(ÎÎ Æ»»Vc‘e<¸®u°* +Õ¶t6³Œ³3C8ìïÛÏÌfÇ&#›<¾ÌÁ÷m [o]„µ6¤Fhu,pèô,æì¾ÁÉ­Ú/¡··ï 圖µu–0s…¥cKŠSH»Ðܶº„Á ^K(—vº·áຜšëÖ‰ëü9û̺öŠ*k‚Ÿþ:Dëžibt¬áºk‚tà~³†!/…MWpCX߇5Wp=Á+¬}îIÑ}6 lûö³¢uÃЇùü}ÁïX]@Ú&H"Ì–`"«]1®àGY ¥g…ç6`°X"ç|.¸= *Å]¾.,O,ÍmY÷-šöÎíôÔYéTˆ\ÛPœÆàD0¦9d"x¥æy†eGH¦BšÌ]A\±ËÖ½ÚÀ<¿c©_¦ÍHq˜í͘§Ÿ½ÍÑé®\ÿÎE!΄VWˆg0Ú°Ö‹:cÆãsòú[š(å±+ßâ±Ë7xácïS†MË ’elÌ<œd>´–P¨M»)˜… 9š,lÖ‘l&öi˜gàFÖÐàXð•«ÈÛ­’¬µK½.V¡_7f¯¬hwkag¾†¶¥üÌÏ|[~æg¾D§3–o|ã'åóŸÿ9Q¨õ¨Ê­cøKÕ¢fIêåý÷/òƒ?ø/^ãµ×ža±hê´¡ÊêÓpWÖ×gòwÿî¿âsŸû=Úí)üÇ?įüÊ_’Å‚Z·yªëK´tòµxÌÕõª©4¤ª@® ùª-Xñêž×39D¿¼Už†®ëP4Ÿ{œšb»ÒÛúÿ* ¼¢ê4´€íVÂ_캖šŒ>¨8b‹Ú&®ÛaÊýØ7ù+åKòì³/áû‰¹~ý1ùâ?#_üâ'xýõËL§Žg_¾gŸÊjÝU&H°"Ç?hsoèô Öípt:SQŸf "Ήí¬_PÑD·µ­Bö‰ºçzÜÒ}+Íl]C+°“ë1Ø[y µJ|W;øë å‹U³¾®S’PÓ¿;úŽÝî‹ú¾ŠwÒ”˜JjSµ]u[kÉjr´K»«¤£®SãZ†ÈT§IhpåzÕ6Öëþ¤X‡²âΤ5º_•æîjPà®ó–N„ЌľªÖ¸¯nT3à??ÉûÿÃYêøˆjárÞªÃ-a­ð_Ô¤\CIë0Gt¸&]¥âTxj¡ %ÕÓ=Ó÷è´B*7*¥ I¦ô¥*ïÁSDSÝTt.•Ü羂©é'Ô×Bt#Ô&‘‚™@×]ê1hêvTê¢i®„Ý¢nS¢1@Ò\9F?°ÚÕX©d5Gº½kz9.T·Rá÷óöÑ#wµwá)0¸rG·¯²Ó‡ŸþÇ6[ëìO`þ5dYX#2ý c ˆZñÊù•'„tô8Lõç*í¼§·©ù*óTª¾ÒÒ÷å8 Mày2ü²”ÐpRñT<Ý0†[š“!@X–²UYF†d­–xyΚã/œÜº%§âÆ1îíÛL·wð®^}SÎÞïÓÚBÎï/ä±§ŽÞp q$( Ý.ÒíÒ* Ç‘ï#Îl&‹¢àæþ>½žlM§òÁÁ×?òÒ­-iß¾9<”ÑlÆ´((£ˆnšÒ+ z§§"" wvÄ;;3I’Èw._fýöm™¶Z8žÇY§#NâO§8ÅÖÁ`Àþ|Žiµ$!LS<â(·Ñ ( ÎÏf´ÒTæQ$‘“ Qš2ïõääüy)D(Æc˜Ï¥h6it»8‡‡$ƒeH§,%0’„åbÁ<ËdèºÄ¾/YHº\gÓFCžGZuö}_ØÞ†NGäþ}œ0D<9=ÅA\'Ž ³LÊ 0¤©­ÉÝ»’,˜ € ëç˜çý>ál†ˆtÖðg#c#o_ïòÔö€=|,EÞãW¦°×Ç$K¡(ÄÙÙ!/KŠnWètXÌg’Œ–ì6Kþá /ÉùK1¯]Ûçÿú7›°Sl¯ =dïYƒ}#<ú(ı0Z‹ÕVKµg«i‚1vÒpzj­f7¨…ý»ëZ=F£!ܼi( ë@0…~Wÿßß·)ßÇÇ–â”$V¯ÑéX ³Xȃð½êxM§B§c''³™}o–ÛTå­Mð¡ÝƒÃûml…Ðpm§8íTÃ)­E¨IÁ „²JZa¹F ð:–JU*µ'mñîŒíb‘C¸°õÏ2°¡të ƒ?R[Ûx]²P,-K êCo îÍá,‡Æ:8F0®ªç9¸çl}× Õƒ –atÜ¥Ð=Ù¦mA§kS­§ (F0>1t"! -ÈiD¶}ÕË…ì ¼±°Œ…m‰a]¬&%L]ÁM lªZ­%8Úš‘‹jš^ªùŠ qò5¡QXjSìªÛÔPì¦k[Wžg¹>¸gbY5KÈŽíy)FPƒ¿n¥P¸N¬CTYKÜ®K…½6 WXb]œŒX‹]/´9“¡èsrz^ž{ö¦—/‡8.äý÷?ÌoÿöGäw~çÃïKQD?kA>Ö¾*î«ôO¿6QJ$“+ЪMSªãYýœi‘}¦ÇgSÁD5É©œ•*žL¤€$­‘í¥ ÅÓ}Ÿ(Ü­ Û+S´ˆ®~ï*ê–Øví "8šÿ1¯%®Ïõ8v±º†@–š¹Á–ØÉ@K÷cªëìÖ®‘M-ü×Ä‚‡¡'ÕñAUW×¼Rµ¬‹]YÞK½v*ºV)+ßÖ‰žŸ „8z^JV@-Ök­Zç;ÿ¿‚öL0ª¾@ýU®œ›d\1àj: OÕJYs°²~5óšõ«Xê° ËÃè¤bt–ßÃØ\ÓiCe–¦ÒS¹,UTœª‘Xe V±ÈNpé¿Ûš¹1ÒTîªè×¹¯—æN+ªP:O‡Fv:cJ œÙlFsC'…ffD5 ß@ä•{tG÷yZcº•ŠÕ kèoÏn—ùN%§óÔÇáþlöàîëpðy˜h"ü 6„~_cÃzÏ*Õê¼¾g\»+[QŒúhÊ:‘í]™ˆŸçY&žëâú>3M2Š‚ "œ7öŒÆƒ/ÂÂó$õ<³æË%»YƹN‡!p+ ‘$1rÿ>ÓK—ØÈs®¾ÿ>­¼0f€llóí³«ÆiÂîö)—>”Ãã™Ë2r8ØÙ…õuL°pFí6½n—t¹4·Z-’ 8MÍ±ï³ C¢gŸ% ¼7ˆ ¼,“F–™†ï›NŠïºtF#û}“mlH°\R–%÷/\üô?È·¶˜z4å¸Ùd-Š( d± 0¤LSYN&†Å'ËhzA»Íf:Nš?Ï™„!ÆóÈ<'Ïq¦S–i ­–ñû}EA93J 3CQpÖépº½M,Â|>'›NI²ÌÌŠ‚y£!©1¦È”|¨bj‚ÀÒuÊÒfFı!ËD48ÎI‚<Ǹ®¢Ž”“ ¦ÕRMc¾×ïãjAßh·ÉÖÖˆ³çìLü›ïša¾Nš­ñÔÞ}®öo‘Ý›qíl 1KÜÊ À»v Y[3E»%E{ƒ]gÆ/?óU³Ñ?â“Çùg¯}‚Öíw(ãÅ£¯±EkˆÉĺ2•¥`ˆX]Åtj' ÇÇ–þd“»-˜Ï "6+Ãó,èêõ”²4âAÊ·ˆ-[­îW”¥ŽT ßggöwUÒwu|Í­(K»Œ‹-0ív¹!/„]K«i5T@YŠTK)#½=8ÛÀ¼e£‰½#, h7 a& áü9¸}Û&rûž ó4’Ôé îÜ`Rƒ‹Œ ã[/gÐ}Ò>‘p¾k)N7oÃ,·¹ÞŽÍýXk@£e]Í’‰¥kQÚåk {–^ÓP½Q³¹D÷|Xð^ =¢8™Ãý…¥ÞŒ§¶¾0Ö «ép\Û6wa ,Kƒ¿„K%8‡b-Š ayhi>…c)[I"HÏà‰Á1zÇŒW-¡ÙÄ8‰à¦z®DŸ$s{~Ê‘ºà­ÒLì{ÝÞ=‹ܦ:l±¶µXýI‘YÛŽè2ßàøB>µëu7l;­Œl“9ˆ \·”ú ¥qCH:ö¹îŒLªë®¬¼^xŸìJ@´Ãá°=Ó]Õ•ùæ›of>ÇÿèUå±'¿Îl~ŽÛ·Ñq†öΜ­,¤©ÑÒÔ¬ ÙžŒÏñÕ¯¼oìrëæ€Í­„G½ÅÛ¾íUyú™{LV5Ž\°ÇîuìÄà{BXAJ Ž/äMCzl;YÇÎ3Ñ*sGÇaJ†z#c•m}òÕJðT¶râR8?;¼ím×ù¹Ÿûm³¹y$·n}ŸøÄð WKÊS”dJ Rj à‡2j¥ÀHT4°ÏØÛÛåMoºÅSO½ÈÉÉööšF$èÓëMø;ç×yî¹ß—4õÌüÁ÷ðñ/Ãa¡f•Èj’•p±vMŒõU³K'|³‰_!‘—pMíF¸XvK H•¼P+åb,ÚS©\;Å>ªfx<˜!°B$16Ý¢Ý6\¹²âCº+ýè¿3oyËWØØØg8ìó{¿÷v~í×Þ#_ùÊãuKX!\Ÿh5}©û ¸Ø:<“:m—ªøóbNÌÚE¼0»+”¥–%ˆÙC±ûYé>ÒBYʬ×¾Vß3MÒfê¥Ñ(¢I ÖcíRdE’cì9-«ïé¶ÛI[Ö¼S=æX;h˜³hŽ“Ò<û:Æ­“¹¥WÍhä¬Éç²8ÿºV‚’svÁ/*ÖÊ%^Ïe ø`lW+vM|b]Wcín8¥s08Ðcn”Ö¡§äq£š×2ĪuÕ5™¼f\þ‘ó-$oþ/ßEÑ+½ç¬o_„ë|TÔÑûÌõ¹ ýº%jЩ&*ôKAè—<"²5Zí̇¢[ëéwæ^],¿ÐªAùg¸¥äÄ/rä’HYO‹‹À“Ú @+ö…RòáÚ·âìR¹­I•&:Ÿ¥P¿bí,.Õõ­TŠËp¨ùñ¬„(œÛdC ÄÞTßßÑ啯![Ô°Z -K—‡ŠŽ{χ‘w|Ú¸öìý«µÏæHÐwuù¥óÜ. ÕJ*`…×E«tN gñU‰ƒ¡ ÂëÃÄY&ÛIBµR‚€¦žƒ8GÆØÕqpEp²Lâ,cÛÎ{"Ât¹´çÊq8©VÅ÷<.œ?ÏèŒÇ’d9Ç÷˜% Ù{%¤¿ëÓ{Â¥ùæœ{¶¸ß¿ˆtHÅaž¦¬ªUª"懤"rrÚlâözâ $"äqÌɃÄaHÇDŽL»]I²Œ£É„d:eÑép½×“Úl†ã8LwvîíI¸\]º$ËZ 9<Ä=wŽeCã‡!yžS[­HŒ!X­dµXU«v¾‡ÎlÆ, ÙßÜ$j·Å7†Øqˆj5¼(¢âyÄI"D~É"MɇÛЮ ‡/B|bïšIj¹"Þ† ¼M¢TT6ØÉ­_ê µÐ „Ñ>Ôš0=‚ÏòêS[L•ò[y÷» R–œ `Ü´¾ù]pR+Ãêà´ìØå!ø±­f¹…+˜ œØúˆdºÉí"WRjîƒß´¥'³° /bÇVÄ¢gò)43ð#-«åt-·aîC:¶wc×·ˆìÈpÕäýÏ~Îæ’/þ2ÙdeUÀ˜*âajù$xÖ³b4ïgNÚÜ{£ÇgÿìY†“slt¦rñÂ=ÞþÎoðÈSC.^0ÜPe5ê ‹SÛí V ž }H&×U iùPÖÒ-A»æ éP¿“)•$Ï\Ÿ¡R¶ßýÝ_âoüßÃuùÂ>ÀÇ>öcŸ+E¡¨ˆÏ4tñK] £•ìÍÞß?“dMSŸjÕåêÕ?§ÓIùÂÞ'àñ]ßõ?õScgç>×®½_>ùÉáK_z’›ãºon’ôû4NOM+Ïeùøãd·n1m·%ÞÝe캸“ ~¿Ck>G ‚шE·KpzŠ{zÊ|0H„ñlFÞlÒð}¢ `™çÔÒ”ÔóL¼³#<'‹"¤Ó1iRa±ZqÚh˜UžKýô”áé)3cÎ矜0ISk4‘ ã1AâöûÆ LŠi40ah«îž·&;ZüyÙŠ~³i½.Ò”°Ñ0ñ` iç!¾/îl†g n«Ý.i³IÖëÇbj5ÜùœäÖ-‚V ÿðPœ ÀMf÷Ì«·ê²Ý.<ºäé­¾ñ`Û,‚-áè>t»H·kÌËåç>ø»µë|5þ0¿ö™ ‚éfcVµ:Ù›ÞdÇ?Ù@Ýqàüyèß»g¸»]Øß·Ü‰NÇþ}·kÿ¾Ñ°Ç]­ZˆÒ|n«ò`%lïܱɆçÙ¿_­„ñØ~¿V³Ÿ-ðÔS†Á@¸yÓò@uâ3Ÿ<ûÚï;ŒFÖ¼Ïól’!bèmÓ º6Ÿ&PÙPŸ¦ÔÛp¾Ç×µHœÙŽÂrn+M5M$6Úµ4Vvö‚¢‘›ÂòÈJ¢:cÁØàµXügÇÞ|ö^Ž3àiKŠÞv-,Ê©†·…´b;¹Z¤¶w-)j[B·¿³…UˆÚÝ„vߺL`ûŸý¾ªp0„‡ ë“1½±Êu8K«6å9ÖÃu-_‚ ›D CûÌV°„IlïÂÑÊŠ¡§š(š*Лۆ +O›ÙÄb¾lU¸L`»YË:€Kɘ™!iX8TåE\ü\¡Y™¡1 ‹à-o¾/›Ûœîorÿ^KÍ ªkÅrχéÂJô:>f™YÕ¯ú I[ìÝØâó/¼Cfé6ÍZ“ [7¸úØWùö7=¤¿52²<Ò§sà€·²ãYCDB•ï=’µh}ñ¤(*°žV<»Ö¹ü¬ŠZX×vôieŸXNÊÏüÌä=ïùiºÉ'>ñ“æÓŸ~y”¾—•ˆÕ•’¶‘ÌdÆ•mí`˜’l«o I/0<|ØåÙgÿ‚ûÔj‘yÏ{¾(ïyÏï!RãÏþì#|ìcß+Ãa¡Ä^ ¥ ZJÉE¡Ð㙵öȬ ÇAiìEU¿[ŠŠZq8êF}¬ÛpJ¥Ý Dà-T“üÂi\;Må@œŠrB,kÔq*\ºTå½ï½Æ_ûk_3üàgdgç.µÚˆá÷ÿòüóoçùçßÂdÒ"M³¢ƒ pŒ ®k%‹d1k|MÏù²dÀXx:ÌJ V!óc§ .DáÚ^”¢w´¤›j"RDSJ«ºZÝ?VXTRê\^QiMm•FI’§0œiRWÈòÆu›ú£’²—¯óÚÐs¾%ë¤å°$Ûãi欣*ªêxŸhZ”³[š|?(©:5rx_窭IÓk…;{I ø@Θ½Ü,Ü'ªþÔÓ÷ƺ_£× ¥HÙQ³AW»6N)¹-æÕ^1®À?ÖžáQ[ÿ—rG£¤(%z¦‹Ë§ø[ц±hE’¿„ÇQ$!ÑÚ“Q´ž!yɰÎ-]VhÀ·——¨õh^&ªEPÍÉÜVÐ¥Yˆj©/†ÞÖ¥©ÄôPùZµ—T¢ºïX‚6MýÛýR×a¦¼ˆ¸äÆ­äs”ºX áäÒZ6WD»;žv7Ò’1a‘ϪQ»,tù5tÌu öí”ð®m›\H¦†|JT—ïþ1ä€Ùù­_A®ÿ ²k¿¢p'¹£?¿©t>r…FuuNWkéY™­¹-¢5)jÃÂÕéËjWDZ–Œ,z>剗¨Zº]9ÞØ mµÄ¸®L—K#£éT"cˆ\WHS‘ÓSÜ,à ¼ÉD²ÃC²ÙLrǑ̌U?Âз[j°3›Ùj~a×éàlmáú>""q«i*N–á¨Lkî8’¦)y§ƒÉ2!Ël€ïy˜~/M g3˜Ï‰»] @² €û·å…—Îõ WOxû•…|müˆDi]ÜhD>ÌäÝïñx×¥oÈbYåùô›©¸‰$ÃcÉI†CÑ©09Ž ä{;»yS¨TlW¢„VKÎ$`ÓÔþ}µ*Ôj6ptœµ¤¬ëÚ9IÛá(ºÆØîE@«%ìî—¿¼~¿àXXùYADÎ’¹ °wÿ¾åoä¹°±!„U8‹´ºê×!ñ… )D™àFÂ@`9ÇPØøÅ­ÚÎÅb •@¨4„ÎE¸qׯÕ\l§#¶p4‡|%dà{V&5ž@ÿ ¨_€0‡¼*ÜyË’{àÀyÜsÐY ‡{„ðHÚ÷Ì{†µÈ…¸&TÐ]•ópþIxsð'Bâ ËŠ§pz T–>5ó…f]¨f‚·ey›FæŠ- ˜ÂL„­s–ÓûÂi³Òªéœ Áñí~³À’á½9¸‰uÇ^†Ö#^ik| šD™¤§Æ´Š-¯Äo€[· PæXÞƒ¸B>Ü… ‘U¸:ã,=óØ=n ñ]ÁiAfl÷(LÀô¿fݾ³Äuû¹è“/ïªá^S¬Lð\²‰/‰×âÛ®¼*ÝA&ŸÿÜluÒ …pe9%’CÚ:p,T+®)‚'‚°PŒrçµ¾ôÂÜß¿Ê|±Ã¥ÝWåÉ«_çÙo‘­cÇ=ðz$Ùà×…Àyf×N*»R*c¢HUñÍ’[wá1*UÚk@OºÝïï}‚ ^àöí·ò+¿ò_ȵk– Ó —ãX Ï¡Â<²RÉÏWøÆ˜5!:\?ñ­>  =Iºìí½…¿þ×?ÉýØ'äÉ'oñúëß%ÿôŸþ<_ý궪æ,dí’]–­ä›¥ZŠ„¦pƒ^ê±QV¦r]ÕÙ:“µNeÁ7i[ÈìVt{"ë ualèˆ r)UØ rc=Þšbù[lo¯xæ™ÛüäO~ŽçžûSžyæ4›±\»v…—_~«|üã泟}Š[·—Ñ( +ª•ìŒYúò°…x½èg Ç´t®|劤Ê{PéD»ÅvNJ°%_,T§§| t]lêµµÔNBa¸Ða"k+c§HHdíL+‡Â-ÜÁÅ&/±ù~a0 ë´€Jœ•Zá—¢Çlt»‰’¾²†ï¹º~‹¤¥© ÄX×C£Ä•©É:ðo*O#Ô5q ¯¸¤Šn3]GÚ9§QZáÌȺ+1.qS|åZIJN 'ßÂí9-ñD“1W×׸'®£Œ"Y(þ/'Ù7‹yílˆØKfëe¢ ñK$åò?•K5é·x÷yö;⬻&g·¿6d+ü4¤h|©.Û©M0LGÉÔ©~'±žRü¬‰ŽQ³sѦ—tù¶¡ËîÊÚÂ䪥°,ql×  œIW¡X¦T‡è©ƒvK»&þZy©é“x·JÊ;*¹}Ç*SÛ´^²TÒw¡võ”ýÜܹ¥ËúRþêßļííÈt¿óK˜á-ä1í>Óäï®M0΢ÇßL–7ª„%=Ÿê¥[p0D›¸2×%믓IÁÌÓTŒãHÝóh‹PÉs| f»€$‰ì×jÄÆPÍs|c¨û>ƪLInARH§k<•86‘ˆ ³Œ(Ï©$ A¯gêž'½é”nµJ$2Ʉ—_®K³›°{1’+—S^~½ÃÃÃÆÉñk5¹+B5ŠÌL„a’ˆt:Ìû} f3Sé÷¶ZlıÔ&æy.Ã8¶¨Ù  %B/ÏÉ}”öpH4™ÈáÎŽIA²é”Q½.qžSq–KiO§œV*L»]ª"¬æs2ÏÃu]ÙM¸\JÒj1Ê2ñÒ”¤ÓÁm6ÁuMEW*DÕ*®1£‘ñ÷ö¤ÒlrZ­’‰È‰ï›E¥BÞíŠT*ày"®k$ȱA ¹ëb¦ScŽŽ,Ñ8M¡×³JD×àþ}X{šBšâŒÇ„ó9q¯GÇøÝ®dA`ð}Û É2«ãyˆãXõ`Õ*µÙŒÖb›$Äí6~áç¹,W+L%ãû¼ð5—Ý»—Ææm­»ò¢y‹IÀ›7†üçßù™Tåß¼ð>_{€8©¬\ߘƒÌæ¦(÷BhµlÂ຅쮰µW®¦Sß_½ ï ß·IÀjeIÞŽcX.¥à“ö;ã±°Z…\ÙDšZéÚïøá _0ìíÙñ®ßv¿…—…M‚ú}ËyøP»b%r—+Ã` sX- Ýjmëa\! í6C›X,SK8ö\XLl(àzШ6°œwöíÝ:›Mëâí*Þ²²ãuÓúبÙÊ÷2…ýB’Yür¾°R´ƒS˜f0ñ…4³®æê͑ƒÐµò&Ô6„§zðhÇVæ¾&0w ò„åÂ÷…a9G¨oY™ÛJS CP6°]¸&dmË’s+ö»-OhˆO '1$G6À¯Ä°êØ$FZBòÐB––¼šà†Óòæ©•ÒMSðÏC°m0B|ó{—Ï–àÖ·i°fˆùÜ+¶ìS&¸ >BÖµk€¦M@$µ„m ­×ˆãƒL ¦!ø;‚ñ­jWµ*x¾a¶a!Q+ ©Yõ/YZî‰ëAMq¬A™7—û×k¼å­‡lž»ÃÍýÇe8É ™Ú Ô) dKÁk¼@ˆµ›cš ç ƒY Á“½òÊ×ÞÍ×^z›ß3—Î_“ËnðþçÞàÑGnc‚PÞ»`ò™g»^Ù¾=VöKJ6E´Zª$±ÕåŠvŽÕ«!;‹@ºÝL~áþýþ|éK?¿ü—?ÅxÜR¦¹“h>/uV²–55¬Mè²ÆÒ×K*MF•q&€áMoÚãƒ|žjuDž·Íéé@NN"âðúë]ݾ«í¢T}/‚ü2Uì¬'…£r¡(UŒ ¨Ô²4Oøx¬Ççª_\"‹>aÞ”ø ŽvmPbuh`['¤Õ ùÀ®™~ðKò‘üÏ>ûEgÊéiŸO}ê{ùÝß}‡ùÌgÞ&¯½¶!Q”“çIIðÇÑ {!o[“u'¥^r¹N´kQÑnÂ̬á[¾Žó¾£‹ªPiz€5œ+ ýDáëzŽªbÓq¡Š%kˆ•í‚ZŸ•’‚Ò}å`rÁÕ’QÀí ®×uMrö¶ Ü,ü îÊÛhòpô×ýOÕoªëz¦IG^xz”x%å&v¦¥†ÑkÄUèRMIÛMV–\¸Sõ°hËš,ÿ9O¯DÜJªQöø2%¶oèZIuž<ûL÷U¥ëPÏ…”:’®å`ü£’ç…”.: eOŒŠv,TY謑ë¢ó×Éü%Tâþ%]Bz5/ùI˜R£Pœò4à*¬Êhe[i3¢ JÁ¨Z ‰6l)*øþÚ®Eʯêš'AO•ŠvwV:ã®R˜ IDATí;ÊéØÐ˨« PAÉ{¢«Ÿõ*­YI¸îXÐÖF›v²,ÕЦç@ÇVt>®éÜ>­æó™•˜•±Øm]¹ßûwàéǑûÈïÿoÀ>r^·ßÑ.ÐíO¦V"ŽM›Ú•Êצ‚²Yj\z*_‹•ß=Óè±jÓ³<—¹ã0q]b×¥‚ë’:í,“UáT*T«U w‹c*ÆÐr1ÆiGlæºbkÂ*8JS9Ési' f^­&µ8–N–qÔír>—‘«Mß“/¾På|.Û/m{|ã/ õ,cže’œž2s‘ÙLd±`«Z¥²XH6#¯Õl cØK +V®‹o QDvù2ÁxŒ;²¿±!Yšp±¸ÝFj5X.Åm·e\¯c ü~“ç2n·¥’$Töö8:<”Y’º.N–ɪ^ÇÔj’U«d½y«EÞnÛÀ¥^·Uýn×Ò¶z/,—†«WÕû7›–­þ ¾zA¤õ:îÑæøXÌɉ ¶çs[Á\×%èvÅét¨ÕëÔ jË%ñbA<Ÿc ß'ˆ"™Š`ò\„:]^¸9`fre{Ožì.xir•ûŽ/Ó NùäKÝì„1Ùb)¦ÕÂ$ L&6h¯Õì1yž ê Û©°êX¶3qáÂ:ð¯T,4,T,¿5º“³d €Q­V¶Û`AÚBž\×ÞÞöö„ǃ7¿^yÅ~· ˜û¾M, ¹çÙ$b{ÛŽÏq,ÿ£R±c ÁäPëX¸Ö| Ûç„eK|Â¥MtÌ„£ènZùÒJÝBÂ.¤+ëD^m½pïzŽ½Ê£LX¬ ,ÅkB뢰؃p[—¬GÃùÐîÿö!ä©F†Ñ‰àÖ`CM›Æ¯Ú Ý݆<‚^fM¸“AÒú.ð&BÕ‡Ócxå ïYs½f†"¶È¦C×µ~ Ù…%‰'Tعl]¦³9„saøÐvpm¡»#DCÈçÂÉBXåP÷ìsz •BO+ñæádB˜eìN§ä9Ïc’ÑtŠ$ ÉÕ«Ô,ÜÝÞfÇâ ‡æ´Ó‘U¿O0Iõø˜Y1Ís©T*˜Z¨²t]ÚaH dÒí"AÀr6£9Ñò}bÇ! ³ŒU½.n˜¨ßge,T?ÞØQ£A3Ï%‰í¬xFD²é”|6³³*x)GÀž£‘­žû¾ °+[ÁµŽç´¹ µžÎ``Õå+œéTr0$‰xó92‹×hP5kKÂV‹ZãGL§žQDǦ)Étj“&Ï#o41;[ЮñÒ«UÎïväüÅ‘ù‰G¾Êʸ?Úæ7~#‚ùåK䣑-™pÖ‘HS¡¢:úÕ*<òˆíb¼öšU&*öïºvþk5»/kôgaXqlÇW¸w¯VvîóܲMõ–Ýçñ©lA4‹H=Ÿí@kýžít¬b|ntÁ„‡GÐéAУ…é^°EÁLïÎí.ÌaùPèïÂã›Í`óœÅÑ_ÍÞ%üŠ%h{m¡·F¶Êo2!¨CkÛÞif3íwϬ‚‰¬För®@Ò‚ÊEKö}èÖ¡§w‘¼«®ë‡‚;‡¶c!_/Y¸£…5\LÁI­ y”@³QKXf¶ßºŠl’ÐpÀËÁ9V³DUñòš`6­ÿF~ ùÈ&ÉÈÛ¬OHœ@vb%¥y`‰ôªcÕ½×Á‡ö«ÔêT­[xžjIfjçÏk¢—+BÄ lGƃ‡Xa˜ V#Ûqð­D¬¨¹7±óQ  é‚ë +s}rxMN&yæ™;ì^8àÏ¿þ,ÑÔ~ÛÞ¹óL;^bÈ3Ë-iû¶«B`£8†i ˜†%ÑKé14êâ´ŽY;ܹÑçË7®òÚׯrþÂTúÝcÞõ®yæê-½rÝ 3Ò´.£ÑEŒ)d=fkAú3YΚ¬eY Œ½C³éò³?û;lm]ç•WžãWõ)8 û%E“R ^ÈÀTJãèöŠDص,nA8·R-O<Ïç>÷ãü‡ÿðNF£{{}®]{\ž|ò>Ï<óUÞò–{rÿ~ápŠ1nIÊÅ-I®&¥€:Ò×¢Pµ*™j±,°Å8%ƒÂ2¾$,1a ËŽsZ©Æ8<þø„çž»Îûßÿ9ùîïþïz×çñ¼ˆétƒ/|áCüá¾[~çwžå•We±¨âySòÜ)’«š -4‘ÈÖ uj®¡”Tc/"‹©Ž¹)k¦ëv((œÀY«yèß?^À¤ôhed=/Ýw!IÛÖ ùÝfK“–B´¡•cYKõ4bñ nP©ûèùLKF€E¢â*¨0Ï+t@ ˜S¡u¢ë|Yö¹(AèNt.ç:WоР-$/•Ö¸ˆuòÅ×^É|a(vÿyÉYm^R¯šhD9*ü\Š.†&#à~I½êPßót¿ÞÚéŽF~I ÍßÀ5ðßšÿ´ãPRŠýO~´ƒ ߬$eL‰¬ý-ô"q)ÔÅ XU¥2²–F•ªÊÊ+°'aÉ×ÒÑ`;ÓÏk"wfX7SÓýdöQ`.%ªÐdò5=HB]ÎM0må.ôt,Úi7;:–Ôv>Ìd­“` Œ=»œddOy¨¡:]Y½soíbN•ð­ª\f¢óÈe=eGšÀ„VÑÊ„º½ûª•}Á|à'á½¶ð°k_þ8¦¶´ßS›¨%?äž…Žq\êTLôïç sZê±×õ8uÞ§ ©º#"s“ë9s´›T@êÚ–`Ÿç’¤©{Ã043וƒ<§é8Ƙ0I¤m YpÏó8piä¹ ‡1òˆ1f⺲LÚÆ°)bFŽÃÂqŒ[­J³Ze"ƒf“Y»›$Æ!X­8l·¥ž¦ô¦#G‰y¸¨óíe÷’C4ó¹Ïg»bLmË0IL$â7æa¥"ó,£7Ÿ›Þh$‹7“JEFaH-Ëh‡¡™¥© f3q‡j–Ižç& ’óç%ö}“J-Ið‡(ÏYÍçL§S“;Ž,=ѹsx• ÞjÅÌf2JS$ЬrU³‰i4¬,k¯×ZÍ­V¹Èç¶•+†{÷, úà P@f3Cg6¯Ó±ÛÕŠ<ŒéõÄ L»MÕóhñEÄ==…ád±0‹jU浚‰+©‡4 ×5³$±œ¤45Uו–ãà`ÈMÊWï\á™Kcóƒoþš4ŸôÛïc>\Âø‚ªa0°xÇ ôø Žc9''6ëv-ÜëðŽí}©Ù´Ç\­Ú9Š"ËÍm7d>7,Öë¢Ù´Ý†8¶ÉA¥bh4„ÕʪBYâ¸áðÐ& "Ðjå¯z=9SžŠ"Ãxl;ͦí‚(„ŒfÓ&†MØÍ.Lj¶3à/ &ƒVßò.Úm¨6 g¹8Ô]¡*VqÊ÷áÎ CîX½åJ¨÷ QVu!lÛýnoƒ òehÕ…JîŽ! ¬T^1x®Ð?oÈB´RgfHÛ68Ok†4òÈÌ„|:s¨Ï 'K8|(8‘!ˆ„¬Iµô–ž¼©…¬bÛ{®5 ìjHŽaµfcpsƒ—C-±w£  ­ŠŒ “TŽ _@5²†æ@š†Ô…¹â«Ý¶­¦3CvdðššlŒ¡’ê Ò4dB¼4È\pê¶Ú_­ÙG^LWHkÖçDZ•i[±sq Ž8¸Kû¤34—ШªŽ5¤-÷äS¬RÂÔÆNY]ˆGªÄr‚Ä>½P03ƒ™[~KhlÍꦷ3•'Ÿ|Áx¦%¯¼ð4R›Û§ˆ— ù!r¡Ó´ëD´h»Y$˜®Á­ ¡VGöüúFRˆV†f$F`x·ÁçÿüYyxxë×¶ÍΆ°»û*ó™÷˜ßüÍïãå—{dÙ¡ÀÔˆf³:/½ô4I’rùò5yî¹/ðÞ÷šjuF§Ëtš”d_ÛZ‡K„ï¨PâQ9ÓeIUËUøIZêÒ·®B¡*%•¦ª†5³¹™ÈåËû\ºôßó=/Èþàçå{¿÷Ïxï{ŸçâÅ7 N$Š:楗Þ'ÿþßÿù“?yš—^:'GGmñpÈóEám,¤h¥a\…5)>5k0wVâÖrAã„ÊÓs]•gF½SJ~ 5–;ÐX³èDw5iR¦-M%cÖ‰M\•µRýÙ˜ªôìÔØÏ]±óæ*O¥P¿ª tT^v[’¥v*D¹[$%²vÌþsUN*ÖŸgìx ¨»ÝžÎS\t~4l\0Vk.pW!U©noX>h»_£‰QM“¿Hei·t{3… æ:×›:_‘®£T!WS#5_,Ä:¬Ûï¡Q—tådöCMÔ{:Œ2vµcóº‘5·÷ÿ½%;J¾¥R$'ß»*º õ’‘zµ$¸VÔ.iÅ|_“„zI¼mRÒ(tzºÓÑÚaú %Y/Yíÿj¥º‡£’¯…VÁ‰Ôõ’F@­¤O±Px˜ÊÓšÊ:W±bŠ„¥q&%êV¡.UXêˆÀÛ:öº­‡™D/GÃú¶ùD>ôÓ°ý¨5Äý‹ÏÀíß_c¡¢½*y™úšô±C=ÆÍÒ1E%/ÏZÉšeY2ª?Ð.Oâ8f[„®1yŽØ$ƹó¶î7掃QµJžçt ºYÆ85†H„j­F3¤EÆ"rßççÑX.yÖ˜3_Ö–*p¸.·º][óÙÞ¦âºÄYF”$L|Ÿ~àä9G§§$Ó‡oçïÿÑ„ñ‰áoòúƒ€AUheã°ª×y8R3†–1Ì}Ÿ~šr’¦T'y5ÌèüyέV\©×qj5î¯VH³ÜÚB\×ÔNNdãàw4Âët¸çº¤"˜Zó¾Ï¢Ra.BK„̺ƒøahÒ4%I‚€¤ÓÁ;=Žwãû,º]&• ÉbÁÒqh=ú(´Zø«rtDc¹$q]îç9³“"ëaee«UÎܨÏDEü5ɸV³|€78#0c ÍͦA„ÊxŒ{á«Á€`2!¸ŸhµÂi·MàûÎtJEäyn©—››xŽƒÉsËêviܼ‰ä¹¤Ë¥IšMví`ÇqO‡$^ƒ«=þæ;ÿœï|Ë Ã‰ðÅ×.ò/þøiâåjž…é„!ìíÙÀÜzX¬_w¢ÛµÇ^Àž²Ì~Þï¯ÕŸ 8Õhd»6‹Åúþµ½mçâð #¢€"b·kå~mQ©Xå¨ÁÀþ\@¦lrb9ûûöoаè4µJš xô ØÀw Âñåz$+›TíÁãOÃéÂGAG#«0änÂó× W‡F§cÈ" šUì…ý訵„ý=ÃåKÖ'ãèöîZÅ©``ݣù!_ ³DU§àU¡V‡evê°èÀªc{½Ý:$wáa‹»ö™”æíCw.?ãÔÞp*.¸‘í®Œg7l…¾Ú‡y’¶=7Nâ*tØsç{Öäg(ö9{8²Ž•Ø@!•„PÙ„å!¬®)س+dž!“y°fú-/@eã†|S•–^"p6íÿÁÒB¸¨[‹$³z‚ŽŠ±»êZîdÖ¤N NÖÜ9Vš6°šà •„½aåiUFJQ=B¿e‰åÒ¶IAºg½E˜ÙÅlÀj“+Wù»?õ¯H³*ÿìýQŽªWÁŒ9¶ÇLh-U3c»2â@R‡©k¨‚¯œ‘hdµžMª¦c¨Çö{&„†'V ©K,èõŽx×»Ž8þ²³³4ýþ-Ò´Î|Þgo¯ËÑÑ.Ï?ÿ“É.‹E«TQèó#?ò)ž{îw®ðÏÿùOrxX¨ßÌ´rZ`´ôˆZÀÒÕßg¥ŠmŽUñqM¡Ð´±‘òWþÊyË[>G·{D’ø\¿Þgoï1þøßÌdRT”OJOÓPŸŽC É»ß}[ž}vÏœ?ÿ cæó*‹E‹‡7d6Û1/¿¼ÃíÛ°\Úz…âÔK‘N¥¤ÁY@¤Æú³[ŠFÜÒ+£VKhµŽqÝ1ozSÂ¥KoÐnŸÐíÎÃŒz}Fšú2v™L³¿¿Ëx¼É­[—ä7êf¹,äT—¥HÌ)í7-‘ò½µIŽª‚õÌÚÍ<)Dîõâ[~Ëö%]PSê^ÌJ*_qI j¡Õü…žËÛÁ´¾Å,×ósO¿7Ð༪­"¢ÜÕ$âÝFc L?Ç¢¤Z$~3}ÝÕc3f±9Vàºn»¯IF‘DUK æcë3úÙ ¤Žö@ß,u¸nèw/è¼<(E}lçb<¢‰à°§ÉÓ®v"Vê£qª×FÑ)+X³'…,/k³½N)BÍ4Q/"ÔbMÌô:*ÜÓ¼’û»–˜iŸâÿ“ƒÿ´ƒQ,[q´[QÎ:Š¡e%HŽ”³ ‚÷9uÆ>Vòù鸨ǥ„".‹ßâ]YØ•tJúžŠnÈU] =²¸D2vJÉE‘‹ê­ž"‰RM ÙRB¸S2µ«•N«·V™âP_óBB;G¶ñN¨Ÿ¯€÷¼Þñ}ÐjÃõkðÕO‚sd·]Ün§ëä§ÌiaXjÌ”TŒïë<\^;µŸêo—æ[»38¶Scê@æ8ª§ ²Ès#ÆÞ æÌÓD„ÔEȃ€QRY.é¥éY½ÇÍsð}ÉÂМT*˜(âÍ‹TÒvaÌ™uÌ­¢ùZ«Æ1Y»Í²VÃétð‡Còj•ÆhÄh0à Ï#Žcd:…ƒþÁ˜w?žVøïÿY—­AP›ÍhܾͭFƒY­†Ónãx­»wÉ üF7Mi¯Vœ¤)CÏc‘¦¬&’4嬺oñÿ6¨u]›\4†Öb2Q‚«¯ržFœfÓ¸IBX¯ãôûHã«·†;⺮‘8–4މ<ßó0ó9i’ ¹NâƒE$6¹1‹ÃC«>µ±AZ¯«EÇÿÝ}™æEá7?µÅãÝ}Þúíc^½u™_~þ1r”h|ñ¢ëíÛë¾ð³È2{lA`ƒüâ_½nñðpüW«v.ÀVÑ‹NC¯²,³Û¶ÊR–wRtƒŠÚ@8 mw#¬'F«e»-§§vþ 2<¾¯çÃ·Õøá),5잇§®Â͇‹ßë@=‡VÕëGChoYònèÂè‚ ¸“BZ‡ÓÝ„èª ¨7`±²âFhˆÎe8] [W ^Þ¸ >LŽ,ñןB| A`0‘P¯Y¸ïÀršªÂä…°lATU“¿»p2„é!„ —H„¿åíÐJàækPUÙŒtj{Ò‹ú¡5ã‹+öýÓ‘ ÜM×Ô® ݹ•‘•:œº°—ZÅ&9R3=Uxâ$3¨]†ìرó™ºzW •¸'VËoBÒ´ò®æ6Œ Ù¦à:àƒ³ ‘c˜‚H7!©Ø¤­0þrÔ-ÈïXŽˆ ¬Ë5sGvìÒ†¼b{ØÎe1JbÇPQf¤QÓµ`¡Â@¡Â°V°Ú‚©™  ëk6áØãoýô ¼ííÌç¾òn~ý7ž…pC«ù+ƒÜ°OšUËö ×BÎÆšÆJφÊ:·Þ&ûªÄf`,ÑÜÏ…UÓXW¯œrîÜ©TNyÿûGìî¾@¿@¤äy“®ðñãñ6/¿ì3ø®ïú?øƒŸf:Ýá_ÿëró¦”ÑTŸ˜…$J»¨NK²§e q¢®Å¡¹tiÆ;ßùo{Ûgi62›µxíµgø£?ºÄ;’,gU)˜M}✔ÀÅ[ây¡¹x1Æ÷xßûNév§lmÝÏsMºD‘ÃÉÉ_ÿzÏÛaoo×MJr²¦äøíO¤BšVû¸n‚1 67ØÙyƒ æ #šÍCòÜ'Žë¬V“I›££‹Ü¸ÑàîÝs²Xl0ÖM‡h®Ôõ9^[ŸùCìÓµêR¿¤WY˜ÂÍE³çY8Ò ¼eÖÆQiû§%"½§ð¶E)Ù¢*ʼ+ اzžëš€NtìEbsG†ÂÓ¢0ö+þõ´;p·pÀÖ5S!ë1nèñßÒhéŠFj·±”ÔØýìk¹ûji>ïjð¸ÎݰT’m–¤_«:¯oÖÏwJ†ƒ›úÝ¥FbGz\›¬»H¹þ~Y×üc%ñ™áŸTGñ©±]˜›ºÏ²€« õØ«p¨K:Çûzl›¥ó¸PØáX…vt\‡¥H¶Tøôÿ£Ãð—p,þï$%K‹oún¿Dq*ü1òÒ0‹†»‹*Œ[¡,Šœ3›S¨3É:?6¹»UZo•ç–¼Bý’·ÆEº*˜;ʧèéþª%+O—¬³–q5EÓ´ûÊ›%É׬Dà”j"ð²ŽÙ+ùNÛýšÀ-c%ÐèoÁù‹à:ð•?Äì} Ù(%@‰uòU2¾r+ [”½Ò-¤Ë xQ>£ŠSƒ’ùáx=Ǥz›utNNÔʪ®+Æqòº1²á°¡þ¹1,KÎï^­FµÂaê8¸®K5Ïešç¦ëy<$YÆqÑÉs:ŽÃ½,3ûy.Ž&€&˜W«fáº2©×1ah.ı´ f"¤aȰÝ&"æ³³ÔJâþýÿjÊùGîÞöø­ÿ±bY±ºÐo¶ÄHÚmT*œCv|̇>úQþ‡_ú%ùÇ?û³æ‰Ý]~ìÇœð÷ÿ>ñòËŒüzÅxL’¦¦rÉqè÷æs‚é”\„¹¹½ôœn—´×cÂlfªó9Òí2ËsÆõÉ„L„ùî®1®+ÁÑÑé)ÑÆi–‘¸.›Q„rB^©P©V‘L2Á‹ nÏà+t¦ioʵ,nÀ,2pY¨Ž!;„¸cͳ ä‘Á …ü™ç±ítXú>•ïkçŒ×÷Í›Ðn#Û-rqªè„/‚,—Äã±Äžç|Ï#é÷qÛ­½#ÁÅ1®ßwÅr)²Ýâ;G6›á•%ÒnŠÆMxn:¥ˆ"Üýû´öödS®èt(ŽŽ Û%è÷)[®Ž<þ‡Ï|ŽÜEü¯ÿàw—êó‘k+þ‹?ö:U»Ëÿñá[w[°=…ã+È'‰Îi6SrvíºÓ©¾K‡CíJ Úm(K ú—K]…Q {{޲Ôãk˜Yíèýà¸\Äm7ïQ»M+Ë8úyîFU%«n—ðòÒµý&þñßíËŸû+k÷ìíÄ þó_ømäÛ¿µäqVHqÔ'Žý}Ê,“Ô÷ÝëÑ»vMüÉÄ=øÒ—¸ùC?„†Dï¾ë²nWüVK¢éÔõ€Ü÷IÒT¢¢p= ¼¸¿ßwÑ­[¤7o’:ÇÁjÅY·Kg>çØóÄu»eéd»•e«å¼4%(Z-'ý¾·Ülð‹Âõ¢ˆôƒtåjåeÓ©ó·[ʓɜ£—$ $z·pNòõšîhä¶æ¬sBž;./GG*Ýšç°ÝJåû°Ù¸ ªœ“`8t±þ»ïJ~ýºó|Ÿ°ª4%k·qA€ïyâç¹k‰ yŽ,ƒ+—Kªª×ëUÞ|.U–‘e.Ëðòœj»ui»-®ÓÍÆÅ«•´'çnÚºÊ}ê>¾_ºo¿Rxw_x©ïhE|íq‡Î—œüÙ~ÓýÔ÷ÿ»ü#òÎý=šï8ƒÚhϱ^k¢1 ç”Ä."–\¨ò”ˆãäDƒÒ,Ód£ª„$Ñ7îj¥»¿æNìï þ°c2Ñdf2íű0ŸWL§J/ŠZJÏý­o ûû°·çX,„ Ðrår¡¤f§’Ȥ™Ã«“K!Ý7o8ºp÷5áêK°È`éC.ŽèLû·†á‘ºfÏ7B˜8†}G¶‚|#Œ:pýªPŒ ¼îx„ä{{PưܯBú‚l`@?ƒ¨ÅXÈœ#YA2×8#Á¸ËLØN+V±°½®`ÖÊÓ§[6ÒJvÜ‚«q”xpßqq G×Õóa{OØŒô¥8Ç¢-äž°¾êh߀ðHIåî ®v`?tt+á¢p$oÓĤÙS¡ìUÈ=(> ²/äõÐ`#x÷¡晣{ÅÄQ¶¯W8¡Â&Tr¸W„°W=ܼ@ oÄ*PÎ+\Gð&dÀ;QE³P”æ%Äæ…€9ßüLqÎ.rÈBˆ!lW”÷·¼=Uœr(:…Màp}(î(§¦S Ò©ð+ð;¢š°[õ¢ñFüÛßú÷òKŸ“Oþ¡¯¹7¾ö (—ŽèHH—ãB¿+U¡oÞ®¨ìn•;Â#­º: __ny$Щ謄mÑZ‹•) ™s©áô{ÀÝ£ªb#ŠiãÜÂ-—"ŸûÜÇä#9¬>ô¡ß–¯ý‡åóŸÿ„jœ¼ã:5ßû½#ÎêWѹÚk«ŒNfaDöTc¦ª×íúây©[. ÎÏ_tŸÿüËòå/ Ês'P ’:çFR– â’™ûsbc6Ç(…YE:42tðæFÂ=tUUWÄ-ØÌÙnCyå•ër¾ýí›Ö1h ÄÍo¬ò^»>×É€Øu\Ó· ²’©ñ †¦êR^ƒ¬<H+#è6Háu©5´c&»lÈ ÑJFètž3ÃøF8v ¹Z×è>Œö­ÓÑ6¿û¢<jžËU;υ͹fÇÖîÜEeÝ #õ×^ÎîËMQÒñàÀºK§†ssû7%ºcÁx[v€ú»–ˆlþyÃî‰8M6Æ €›N÷Ê e¹°5¼Z;h£sßˆŽ­_ÁÄÓ=UC²[“¡¹ŽïíJÊjÆXéÚx²“eN-Âê½ö"™YÙ8ÚExdÖ±xbÉDìvÆ}ûSÚ9†5Þ’G߸-wLB7t:ÿ•%1´už‰I0÷&°u¾/WA3ðX}žeS ê÷’¹Ÿz 4ñOy£;! •áºj¿¯Û7Z)Q©W_·ÛøüªÑà©«ü³†²ï´Áíí<0]Ý¡˜³¨“0j”ÕÒ:Ç‹9_½õ¯6ŽÍ4£QCÎ9yyN%Bæûô¿ø¿ôùØÇ[üñ?µåGÿø)·>Ôæ~õ9.³£g‡,=ÞzÃÞѽõšî;ï0NSò^¿Û¥øÖ·>û¬¤YÆäÁökº½=¤,ɇCz› ó)KNÞ}——Æc–ûûœ—%ƒùœöbÁ,Š~ŸVYâ•%¾ç1ñ‹‚ªÛE̤ÈrIÔjQŒÇäý>édB´^㢈e¿OǸ¢ . ŠnÉ2¼‹ ¶qLÖj)¹–Oµª¿[­@„(Ëh‡!Þfã"ßÇ p·o TUE1›Ìf0Òò<üáP]»³ ß9ÊÉ„òèˆäúu­Û…l€¬,5/ †¾ÏÌ÷q«­ª¢ø6³,âÚóÏ ßd“ü__xÆ À+˜pý_|ôéj­kãÇÐË¡ZG$Tgp@t¦¥¡Ô×.Mh˜ýª­ëÄôôdhäïÕÎP¹ ì !zý(Ö7AùŠXèŒÕ3ƒTµ*†ÜƒåZ×~œC/„`Þ\Í]WKlboK7éòøAÌlz‡—>ôn]¿ÎÝÓ+*i<ˆí9ÜUÒ]¨°¼Z"%Ï!ÌÔ¡½ !Û@wÁ5¨|%¹§)$¥q#”šØ[ o0—&Yyß’%eèCoòS?õwÇÏÿüŸák_ûÄá%­Ö‡‰ñý ‘”ªâxÅ /LHÓßwl¤ª:–TT ªVå\N_òÖ[ßÃw¾sÀlÖ%MO-À l =ÑbÞBÙÚ›ëžÏØ¿/Ù›/ÙÛò½ÑoÙ›koûéû°‘€5N}Õ8_-CZk3¶%ÙZ¥©é µ5å wñ¤!CCöUj<ƒ{ª›©nš ·×€ÞÔü– ÁL]6J¥ò>IÜzNeÃin¨ÿÖ KØèÌÔ"oorMí„æqõg{¶ÕŸ˜ôm­ZhƒÚµ:uÒØ2µ{xß^spàö|•ž í±°·÷=ðâÃþ³à{¸³·áÍ_†·ïáî4´LaÙØ}xh·Úd¹°N‹QIì±`àOµ F&Ë['’sÛ’•¦mœ‰stŒSzž Í9ç ã¶l þTÚý1¢¸K¬KuÅ9‚¢`î,Ï9 CÚAÀÕ(".ã¶sÜ÷¸,y­ªÜ¬ª¸(K:e‰+KZqÌY»í¶YFU‹Ð* ¾Ùn»2Ih…¡”%^Q „Ož‰°\tzÊv›ùñÅù9A2wAÔåß}iiëˆ?ü£7^\¹Ÿ½¾à‹ïŒùõ×´½K+ò\»Ûeëûˆç9éõ\+Žå@Íì(‚Àµçs9ñ}WŠÈy’pðèÇÎ% :qì¼N‡~R% ­÷ÞcÐnw»¬EH¶[·NÉWÆ1£ªbØí2w)KxôÈI¯Gîy„Qä¼$‘Þtê¾ý¾s¾¤)ÅtJéû''ƒk‹„!®ªˆg3‡ÝÆ÷q‡‡ ý™y×óW+BßWèÕñ12ÀtJÇ.MSW&‰‹©~ž“«r•ó{=¢4¥88@òÜÃ!£ù¹¼tI¿OE´OO‘nWdUEw³‘À÷sŽífã’åöoòéÛï1 &üÊ—ža³û‘&•Swì÷ÙWžáúèšûÀ3øéþüíß~–a½RyX òãXƒ¤ÍFŽÚ-»ÓÑ¿ÏÏiªð¤²Ô¤bGÀvdì×0¨ë×k/ Ç驎«î€ŒF5‘Û±Z麇†NÚœ&s­–# ϯ½¦ÇôûúåBØ?T©Ð²‚ùÒÆÂéGèCÿ: ÷ë%Ü:Ñ$àt ~¬Ý“¶ÀÑ@ùiæxøÐÑ àI×­vælK(§0_;Â)¸[Êð^ž ‹…®Í`à²ÃCiµZdÝ® c°ÙpRê|>ŸËYöû"¾ÏÅ|Îv³‘YÈÚ÷e[–ä‹…¬”›Á°,q"Rt»Òõ<‘ÓS$Ï%(KÚi*Q–1Ë2ñƒ@äà@¼Û·¥ìt¤<;£5™ˆ¿^KîyÄÛ-~@»-Pîí‰KS “?Š<4?ŠÄoµ¤_t¶[Ù.—Ì—KÙR9‡¿\’/—ä¾ÿTqɯ*©ŽÝj³ñ¶×®±MIËR²Í†Ôó„NY¯ÅíïS8'åzMéy˶ד¢,!êÉ•\çÏ}ð‹¼÷nÄ?ÿ»²Ý¤‚ï„ë7 ßÊÒ­TIÎ7ŒåCבç;_—_äçw„³÷ÔÏ¢(çÔ9MÕ™»Ö‹ õ(Ka6z=a2Ñg×Þžº‘Ÿ i*^a¨/šl¨»¹£ÕòÌPOÈ2…Dű0Àl¦ç ï©üì` ×Í21™`! µ+QÙ“§*…×®H7ª pÁ;dO¨†Â²-d¸¸+¬…m)¤¨K‘ÂÛJÏ×Ò·¿-!ˆ'ø‚^gîX_».®T.ȶÔˆš˜ IDATN˜\›…#ö<E.lz‚W qW¨üÇ¢ ›¡or"¨éWp"T#¨Ú¢•ºR]ÈK”0ë%BYÙ½Õ¼/Ê ‚P:!ïøBßÚûBX‰¹9+LF|AΠœ ‚©B´Ä  GÔvòÒÞfïdÄ¿ò".š2T(ÏÞö®2îÚX.;K”œo`^!œ¨ö°ðj)ƒ‚meW†õE¯QØxëîD»AôÞŠò0B1E)#Ù¯ÌóÁ5ÆÝ·5«±0¥ìÌÚVvŸcsÌŽeçkÒµqtŒT^Ø|âºë J¸¿°$¢os_›<ë¡£OmNä'©^M¯Mß®{C4Y]Ûýû°èÜßÝgQÃÍ:݇²s”ßÖex;¶ek•Ú~éÚµÙ †¢¢ÎHø™ù¥<ªUºìø;˜›3ø`jP½}[ç:±˜ÛºÕP«¢±jQ‹zümý·µ_‡h·laßéÄæœ²›ÇÜÎ13Zfc} ߇Ÿ«~çn× n¸º´…™å}—ÐZó?ãqÔfyOÂÝÎh¯n¼¹¥% •ù%ð>e'Ïòl³<‘Ü cÚ6<:Æ¡¨QŸ¦€îz–…•ª›fëF®ÖH„0P€6ò·'pÃlŽŒÀ}bÛ3µ€V¼Œ'ÐùÜþËpëÃðÌÇ‘ŸÄ}ðO ·~†nÿ$<óGáÚKz[û9ŒZÐ;ÃO‡½àî·á7~ü:rñ:./UsડB/wú#®¦Mu¬AVX—ǨKO¥khV[Ÿ6h>qC™ydÞEÃÙ;sÎPªêE±VÉX)DÈœs^U‰«*Ê¢) ·-K‰Åè2"$"x",}gþ í `¯Õ"ñ<Ú"\¡—e<ª*yÜ´ªÈÌ!aêûT"´EÎÑ! Þèt([-'a¨¯Ïs‰sTiJ8’]¹BE Ò”ÛeÉiYr±ÝÒÝÛ£êt0s;î÷ðæ3ù÷§'<|3àÖþŒ½xɳ·r>÷›/߼ʧ>óù_ýU÷Û·Ýÿø·þ–üµŸû9–«Ý("+KJçú}ö“à  EÄA@kowtD†¸ Á‹cžt»L/uÜ[#Jà:Âð’)ô"Xm!h)w!x¼‚à⬠õÊèÅpýŠsÇIe$œmôÜ¥ÀÛððTç•—P®´Ê»^:ZC!æ÷`;…i{û ÕE»˜«‚_Á6Uâq±ÐE堨ᯧð³4‡í¡Â‰Â¶¹šáp_¥j'¯ÁÅ‚CŽN(OY}_™séVç^¤ð8ƒå$>”Æ$«v½èêk­„ ¬×Þ‚µa¥ç Ÿ@üœ -‡9'ä õ¤Xm4&ðí ÕiÃfñ…‹ù™B•Z¹Ãk+œ«z éc}ïuA/H–^èç/]ȶ*Çì%ÐGÜ×d3¿T²{êúF™:‹jGAFö†µ7V~Ò…šíµGúvôJ“´‚³7¯òá=f<žðÖÝËì¢ëN’‰²õ½'y`†Q5ù³goýB!ly®±. ¥Z;(# ø½ÌíØxc{K²ÃC Àæ}~æg~Ùݹóy¹{÷Óüâ/þÉÆÛ¸jxYÐp9oè<VåßÊ*RWs“¡vUCuŒüOaj%º:šxÍŽØ›±k•æïX´0¶.Ä•&.Áˆ°µÏÃ7 6·+jwÇx ³¦cÑŠr¦3v¸û¥U¨/çÇ ÏM =¨áR–(ôœ~!7öÿ™Ûáùk•©RvêmƒXŽÚ€?aë˜6"´•Ýçí®ìIncÙ·s½­[SÃ¥®Û±ïX26nÞëÈ%´nÎ…Æ {Ñ 0×f~- ¸k³™™ê¥¢ÑÓ ST -¡Ø6¸)+êDÁ`QS§îàMvqj_æ¹3¬§uºlo,y©U­V •(×PΪ¯yM"p;s»‹©@ÜÀöZeüˆÚA.0(,¹š¢ÂO3ØëY)<7•«Z¥n`IàÜí€òb{[,±‰Lwn÷£c\šÈ¾o;ßÁ_oÐäý^ô F·ÔîÝ•‘Àßwìw‘¾›ÎàÍc½ÆùÊÆñ•UÍ+«úoµæÌhà+Cë,lÌ#šprÍ—JmH‹·ãZÈv÷H’KmN‹uMÄ``b Úö¹žuNºö»'Àðîœ 'WösÈÑgà…Ï ãOõ"w>ÏžýÜù Üþ4rãÀèÃÐyBTi±r»EŠsX<„"Gú{Ú%ŸOaþ¹÷.œþ+(S$Ôn‰ø;÷ó§(È–u_Põ¦Ú&EfJ³ÄD/决åÂ:/AÙ¿Ol •f1Uÿ¡Ï×îŒ$Öýð“­vdiò³};6Ó×# ¨*IÕC“Jç¤SÌòœý<—¨(ÈË’“ àÄõû»ÔBUÙ†ÖXØL/Ð9J¡IÐêL;òáðä®ãl­UÏA)¤‰áá ¾j»=¸Ñú1$•\ ${àùBî+ôiãàl­ó<îèvCÊX»Áž’ÈÓHHa’« ¸JÔo¢OD晴Pàj•ÕÀê¾ßÂas Ñ—vôœ&ÅL(`~ú‰útC5ÜÚ=G2ŠžÊä¶–&ÿ±ª‡VúJ¡ÌaY@1…²%øžÀCÁ5¾òzF¦x¹„8Ð}Ü·JgžC Á‘B ü™à…V-~ê&¥ÃÒÓäÊ`3*3b }í”Ѥ'xs=oÙ–ç_ÜðÌí×XÍoüîG…Ájêþÿj {ë¶*ba»Vk]“U%ôÅ$~çÊq# j¼–îKåéÛ€Ê*¸WêR¥@Ÿ¿ô—~ƒ—_þUyðàüüÏÿ )ËZhiÕóJv˜ùJv&{ÔJB² @cš1Vaά. ì}(;_Œ{ É•yÃVöLvDíÊ*Û#ÙáÌ»6ŸØ¹s»æ7-`}É~ž4}9ìwƒðܳu¨‰ñ3«­’|VÚÙV5{Ղ› …UÆ+ ¾ë9bÄìÌ„š8^³`Ï ÛZNuÊŽ$”Xe›Æ:Ö1[`•í¨aÌ&²ûü¸öK¨e›­Š>–ƒ»gç©÷öÄ:5Eƒ êl 5ÿºu£îÚ=™ã¶gëÛ·ª®Ä{vÿÆv?ë²p%;'²Sëb‰­÷;×5 Æç6—™u*»7[#ØŸÙïà=»½†'GÛò¹¹]—dn²ºŒ~P«nÙ:\•®èÚÖjdªÌþ®ªµì m#Ù¹ªõmÌsÙq~z6Þ®IÊ.¬ûäÙß‹úž[£Ù™ÙwalëSíÅ­uÏðŸûƒ`¸?¸¿L­Tß}Úæô4¯ ÒµÃtMS)M¥ªmõ…šÞì á\«A5Iô⦖mwJUO¯5y^ûCtáà*ÜüxîS¸ÃÁ÷ý(ò½‡“Áðà™ÁÉM`ë*´÷‘ÎX³Ÿb —oÀé×7ÿ9îˆ<ø§ðú¿„Wþ…ç±ÁwNÆ Tçv—HºÌPƱ­}àœ6£=g=Üó‹p½ª–%RUL×k¾,ÃP*ßw©ïk3Ωø8ÇÂóÈs10sŽ\´ µZNªV ²ÌyŽÇxƒárI/I˜v:xƒUE`p!¹u †CV«•Ã÷Ùôz²7™ÐD,¦_ù÷pï4¤µßƒé”/~ö³òÕ_û5~峟u¿ük¿&{­ý¢ -¢u£ª"I|0Ž9Çyâù>¥xkÏãaQ´Z¤Ý.QžS9'Åvë¼$! X­( ¶e©>Ž#Ïñ×k}¬g•s¤GG\Í2–Ó©g›v›Ä÷é¦)L§H–QVE§ó”(^Eåþ>­‹ ×=;£šÏÅ›ÍØTÛñ˜4г wzJá.Ë„,s$‰“ª·¿OyãÎÌê\«… Üoˆ+Kí¼þºVù?V/ˆ8ÖîƒçÕº*;…c6ƒpÄO|â·G÷ùÿwÁ[_YªSw Î|üX§áP““†MÙÞ[ñå·ùðpÁ G¯óÂà’iç&ß8…~KåbÏΔ±Ýê3¬Õ6åZÔÝ‘ƒƒ&©[Ç6Ÿ«×E«µói·µË°Ùh‚Ró6z=½Öx¬ómµt-¬k„ˆr^NNÔG!Ëå ŽõwUççº>ºµº4_ ùVŸ”ݶ&ëâ®Î/v*+:]©oÂÑXÏd­Aç2vdmˆœP,aÔÕ¶ëÙˆèµ`è©“wå9¤pˆSÈ‘ˆúSÀ[©ƒu€æÚÉiå¬t~åʇÂÞ }o. »€lmPï)˜½ å¹õ_ "~| üÕßnuU[hõ sEղʖœ*ëùäûøæ»P‰’®ýÃ=÷ôE\!¾é;únC5 "H¾-øcG9‚‡¢©}íRlfÚe©"˜gÚQñgÚ%I[P<€ÖÈ0÷{š…„7 õ,´#ñüLMì¢`çÐõ”™FQ9 'DF,÷ —î0 o¢OÒ2S`Uj™ÍÔü.N^ Ü\ð|ñÎ)èƒ×åì²ÅþÀ+ø^W¾úÆÇ\™¯A&{¦vª[»xFHìŠ"{2ˆ}XõRæ%Žy,ÚêŽ$¹SWó¢!+2³àU½#|?àg~æ7øð‡•‡?éþÆßø)ÉóyƒhMCº%lȤÖdØy£lÙu`õØÁ`: 9ÔÒ*ã΢Ð)lh*JàNm\o4*ï]Ù™ùÕ$èÅõïÉSmȧÁiévÒœ×횉ìøµlïĪîG!·Ê|Ò 2ß·¿ '±z™¹kãèXÀ) áø­aL昞%nÇ‹ð,›4ù‘͹¶Ð]4˜³-§‰DW© Í‘ÛIÕçìÖÿ°¥ˆñ:è:§¯³êý›gݹˆw@zúÚ·îÑÃ÷UÙ[ ºÊÖ½mêOµÜìÈ cÙ%|…um"vc™[Dõ‚u4j‚.ðŽÀ©¹ƒ?ix£d'¦J48GÇÖ5©Œ{R³„këãˆTq·aÙ\K•N÷A"»Ge÷¸×ðÑéXÿÂíLôÚ¦ìTóPÆ6†TvöÓW’¹ÇÖyØ4¤™=S«å€æµy¥Ãsºoz ißÒi"Óž¸€ÿŸÿû}ˆâR5ÈÕí¥¥n²ÖFtaãÿ; ŧ¤¡c°°©®Z µ/d¯6@oœ_€î± ƼxönÀþ‘ú9ù­­îßÂé¨ëv MƉ§E8A7Õ;°ygwµ+.“Ý×0i|}fÀÍ¿ª­•íJÉo¾ _}[•“6¯Cï/Ãó'p뎼NÈ[°þ ðëm¯õj…êºÛ¶¹ÎMßåçÛVØ4ˆèi#I«ë0$÷}6αa œB‘‹ªzÚ¨.–säEAîCsð®)nSÏcãûxÀmÆVù>ñ›0$‰"â<ÇËsýú8‡ï…fsx"TYFìy„¾¯~ eIåyJ¸CyÃÓS&·oã<¼ªp‡‡å9ÞdB»Ûesõ*Õýû\ܺEµ^d‚qŸ2ò-—ľ¯ãMw? ¥<<$0fRa&‚k ó<òv’„sœT÷ƒ€ûUE«Ó¡mNÚa–n6l£ˆV¯‡Ÿ$lEèY‘‰9Çb2!ìõèìïS& q’Pø>î­·HÒ”ëGGò`8äÊlÆ#ßgãûŒz=–QDEdA€«*Ä÷©œC¶[ªÕŠQQà¦S¦UÅVD“á¢ÕÂm64G‘9 n³Á½ý¶ÛÎá‚@Õ|–K­òߺµs¨C…íïëßûBˆh— ßWHPwë?x~èËÜ{«Ïï¼ZÁAãO,ô·Ûµ|¬B–K ÖÂôQÎßøìmþëYqçö9?{å7ù?ÏðÊ7+h}·w¿¿C*léü\+WôçOžèuâX­]Ï“¤&jk2ñð¡v*bMžÎy0ÐD¡îФ©þþâBÿEÐëâz&y®ç»z ²Þ}O6ŽF°Y˜ÁÉJõ››o´ŠÜŽá¹Cx𦡷'Pîæ§Òq #5Ç;_ÃÕ§š¬ü üÒ¼¶pyªöÔäíákPìÁê T9ô;®”ü+k8ÚƒƒÌÏ`b~ Û¹Vôƒ(¤ªØ@t‚®ŒLi*…Õ ÷t½¼6ì `öHóͲô÷ae¶ŸÙ ¢‘BŒR+·xœ§—;Ê6„cp÷¡\A÷Hî!߃ PŸ JåZ„#Ön„LÔëbýºWôXïPïOwÁžW29U[Ê­*ž­âÂ;ÏB0‚h¬ü‡b ÕL{ø½R+O®ÜÙ˜zµRÍLáT¥1“À«©öì·QIG3i¬Nm¼šõræ‹ÎNŸá™gï²wð6OØ^O¶›¸_è9± Z[•©õ»,`:1Ñ÷pçGxæ Ä(o¨×ì×~üØýk^zé×™Í>Àßü›?Ežg·“©=uî6Tošð©þû|¤Q†¬MËά\6h(øxöóˆ>ä݆+×ÄŽ½eoÆw-l’¨‡ E¤ÐµÈÞx%Ï »öÊ’œ:`­ Ž•£¦' mË«vnUwh¼F)°ÆÃ 8Y­^6ÖÊk(U¥;ü§Ÿ¾óÝf7ÃÖj¯±že¶7`> Ü ec<µœL­÷ÙihPÖªM‹Ø†h¥g>+3o»k÷blÉÅK¾nÛy¿Ó8ç]³cçxbóú@#á­K¡-»Òp®®á]sKkýÒÚ—Ã5T¯‚†–fhÝ—:z­ÊódoiŸÙ4’ˆît¯áÌVCÿF ŵƒ†kymjX_cÖH̪òÛSxX§‘|6ö‰³õ©÷ÅJv%ý¤±6b{äA¶–Ú8žØõŽÿÄîÕ=;>~º‹~î˜#ÈD÷â}Ö¿·³áÿ>\S“zê3¸oCJG5¹cËðÈI ûÜó†ø‘AœÒˆDÀ­+ðüKð‰‡Oý|ï‚“çÔÜöÁ9¼óUxü:¤XÏU‚T=˜¬ ÝèÁã»°}N–_€ÓÏ"¾{üž×zÛ§†|"ÀÝ‚®#û+pð!xðMxåçaxoÀð†Kxñ‚á‹JIî!¹ÅDGŸ€è,¿¨ì²ÑàŽM¨Ì2YÛ×ÿä¦=RÛŽ©m¡‡ö¹Çì¨gCZA ™çÉ(£¨*r æÓ¢`âeU:'ݪrm`íûxžG+˜œy°qaUÉqUT9pR–8‡Kçx<¬*¶y®â'aHZU”aHh]ŒMM’*)ƒŠBºaˆ$‰øý>íÁ€N–‰1zï=‚²dÑ혤kxyIµÝ²½q?hû>›“º©J..Hº]Ò*K|Á|/BÇŒ; £ˆ$ˈLkžêÃ{à$È‹B†yNÕír¯ß§Eøã1§ƒÏc¯ªH=*Žñ./IæsZyN»Õ ‡ÚYëvÉ☰×Ã+ I7Ä’­bon’Pæ9—aˆ?™píìŒ<ðE˜ª?í4¥Z¯‘²¤Z­ð}Ÿâø˜r8ÄÛld³Xˆ´ZøA@²ÝRu»ºÎU¥At¯§‰Áƒ0ŠYËjàìœU® ºäœ0ïó4Õ`|»Õ?u§À9ýýá!¤ßáO~ò”ëÃK~ë ^#FÆ-•K½zU“–$Ñ`h:Õñ\\èu×kíx9ù«oó»¯vð¼>W¯§¼ôÌ’Uçïùðæw`oݾ°X¨ûö•+:×ù\ç´\êù–K»ç) ;PL#";¼³3­à÷ûÂp¨ëôè‘vZ>Ô`po_“Šº»Çú§6âKR**uS×y¶öÝÎÎ7Ãó ŒUe*3¾nÖ[“ÐÝÂþuˆš˜&®-d ÄK!.N!nCºV‡ì ¥P¨j­û»oA{$\:ÈP”PÌàÉC}p cXo…<„ål°-`t{N8f0äSíOn"ûo•Ð}ñîý"tCõ®> 7~®üU8|f¯Âëÿ L¦_…Ù¿…Ë6\¿ ÁsP}Y›`µÝ¤¡Ì|Ú Á·íÿëu:²qUÇúÆÆ‰-ÏãÔ9в$©*¶EÁ¤ªˆ,AðœÃU•z}ˆˆ/Ba÷¤¨*\U1)Kª¢ çÎ1ð})}Ÿ0¸DaÈB„3ß缪xTU̪ŠDñ<ª²¤¡“¦š\´ÛúÂo·È!„!Î÷ñ«ŠÛ­ðªþ¤ç:=ÕnÌx¬×˜Í05(݇¥ië¬V‚Aß¾«ÛE°Þ@l‰Šc'G·4®ý ²Ü’Š®ͧOt<­–BüHî*†ÅçÏ'p1Õo}ži¢@¡F}Y¥$ïƒk°]Bq©‰Yǃý,' ­Y.Seêc1»Ô±»J‰âi¨k^$š´´†šhK¡?°¸¥W÷!ÚSHÔêL«Ý‹VèÀ&‡ËTƒÓâ‘2Ú‚•BÖc…ß\½¢±Gªá_ l=M([H»Çš,åæ äGöµâîöuÏT•¢"õð¦àík—ÇŸkÐîÃ:êPYiX]½e¦‰HáCuEaC£‚”]ÁßS ©Þ¨€<…êþbT>Ôä& !î©—Z××ûê‹BŸ*ƒ»„žv(ì¼±±Øbufgc²%¹þܵ´+ µâÛܳH5"i0Ð=R»6y¥ŽÍU´;!|ömzý ¾ðÅ—4››HØR”C´"%æ¹ZÀ¶P¡õÅ…½¸ eBV{ºÞj¸Õxûu-ÇÇ[~ögÿÚí¿ök–¯|åy{k,ÕÑ¢áâ,®A¬OòEC0Úð; -ÿZîóÜ KЫ# ŽjHÈ=ƒx ;ÙÔÆÓó}sgÞšKùK@XAàØÎ?o”:]c¼¾«Nv­Úkш˜ÆÈèÜÎYW½Û ìVÇcisËmÎiã|ý¦i_#ÐuvÜÀÖkѨªWdG~Ÿˆ®hŽfq5n¤™ôÕ÷ÚS¤Nèn³ƒi]Ú|îØýzÒÀ²ÔQ˵Fw †HµMùieëò¬gÞ0]xd× IJ Qk7ïšÿòÀÆ¿gUúšœ¿nÈüŽNàI#Á½Öp†_5Y8“¢1¯k|·¼qM„¯×H8/k¿ êßm@ëDfú´s¸ë ÍÝŽÚÿD>5ÌnÔH&dОKO÷q-°ÚA2iïý‡;î}~„ÃÉ h²½½†¬­4”¥ Ûÿ”$îÞçá7l4ï®7LÎ'»Û*óÆ×9·e¿j\1¿…: î|ß ¸üòGÿ<<ÿ!ÜÑ!’$ð•/Âç?¿ôàÕWàðÿãì=ƒdKÏû¾ßsRç0yæÆ½{7!p¹K‰œ–A ˜iÓ”Hˆ‹U¢ÊUVIv•Ëò'«ÊU’]¶Ë6i©\‚LŠM3 ¤(LX€ÈØEÚÅr÷bwo¾wbOçîxž3}°¢ôÁºf¦§û„÷}Ï9Oø‡<öxÇSðø»àÜ£ÆÉ˜ÝA‡ûŠ ÿî½`PçƒÔ.ó+x’Üò}³j‚É–‡V½+ðÐß‚¨ƒÞ}yîµçú{._ùQØûiˆ[pôEøÌß¹IŠœÌàd á³Ðú.غìºk¦uìc¬š•êjëþÿfVÞ2K5å#¿<.ˆ˜QQp¬ªK`®*òÊU©äì° Y…»Tm= ! %ŒcÝJI¬‹!Ap^•ËyN’eœ¤)ÇYÆq–q/ÏÑ¢0·<'+ –Þ•™ó<'Z,‚].S•Ò ŠDTiF‘u&æsÛm Z-âñXÇí¶h­F{00Ãb,—Ðn[#³Ù¤}å Y’°sï“<×ù|N4Ê(ÏÉ't&‹c4IH☬ß' Ca¾»ˆ 4ø…_ø çÎ}§ŸþA>þñw!2ÆÜ—Õ«ë ])ᇰ”‘½ŠQÝ~%î©K¬:î[*¾ó |êÛ¬äZï¨ed-1…ÜùKžwØR ÿÙ.MÌ\ éaãäØòXïzÔ½zœT‚ù /›æžÄ„¾–ãâ¥(¯WÌàJýÎýœ§6eX–<…Úkœ½Z~ uÿŒ”\ çlÈ*Ò›»*UXIÌÊŽBê—Nźw)+ ©$Nk>ÿGÄŸú\¤îð|#òó×Ê<¯•|•Ž%»Þa±–å¾Ïa¯‰,+ßÙuÞ‰ºêÒÅ6æ|„¸ºúZ+U·RÇ˽.߉í(œ°>¯ØÇ7õ#ÿÎfEÁlä^%W} Od¥¥•¤­WIN·*p³º®æ1¬$eÒrÏwÃ×ò©o{é<‰š¯­Ü“‘¥¯õ2¡«v/Æ>Ϲo·_‘/^V’Ý¡`Óçt$+ŽR©|å2á<¯!ÿ¾ŠÔw¼´ò*2q¾ÓãµßS]IÓ–¨kÍV¹ÊÙ¶\±‰5÷e¨[P.)È·-`—CWtò:$~Lc¿U7 tÇ·ñúËÈ»ŸBÞþä]?= £cäÅkÈoü.ò[¿‡|ö›ÈÑ!ò¾·#?ôcÈ[yì$ ão#ßø=äúï"ÃÏÂè Íïõ%÷’hZCXä/AžqÓ¿È[’š6h}ò†"k8~ùÊÿóÂÔŸºuäÿ3²ùƒHÒCÆ_A¾ôQ¤}l£?§m?ïñ Ò{iœG¦×‘Å1rÃÕ³:®öä·ZÁÇdèÇ»ã¹Â dRó׺«k»Ò”SžÄz’øwÚî{2÷ϪÌ¥¡*Í¢ •çå¹FEäy.Ë4•‹iªo̲ ŸçŒŠB^Q•±ÏݱÏóÂ`ªJR2Î2I³LCÉADU‚$ ³L¤(DAšy.Ñæ¦È•+ˆùtÈ|±Z–I}sS¢$‘åd"ã~_Ò½=‘4•äðPÖ›M9éõ„éTâ0”Éë^Ç÷L" yô‘SyçÕ›’l¯q}¼%ÙÝ9œÙÒö3®îaY&´ZJ·+Nä6(T«eûQF#!Š” h4LEªÝîß÷Ü3¿‹,“3È“ÉÜšÚN«ijR­Öj¿7o §§6®µº°\Xr“§B– QÝü+šÛB’õ@ÐX¨¹²Tœ =hÛ:u{˜O3a¶„ º©"¤…ù,,jÂ`¤ ¡·fDèv$™ Sa Ѷ0SåàÕ€½MØÙNö…ã@N…t,ŸYÖZB>6˜UÔ„(Â}¡ÙغMع(„ !º'tEhÇÂ$Žo A §¹ 5!ŽÍMEešÒXó– Aé¹€ Matß’“dK˜›ÏD]…µ¥0O„e,H$#AQò‰°Œ >U‹-lî¢ !ÚP¢ý€õ9H]˜ß²…m·P{ÀM!*„xÇ%lA AŽ… p5(…àÈ?lü£{B” E,ÆãP¡˜›ºLˆÅB=¢ž‡‚ºJ’¦‚,é º)ä/ì¶„À=R´icBSf‘l´R}ݣߒ»· ^¹v¢ ¡Û9d…˜ná–ÓÀ¸*±P „a(ÔBA2û\ Eàš#‡t,ýç÷}Èô©§®É›ßügrzú |ìc?*iZˆ©õL=èº'pCàØ½rßFâÄä©ÿ^÷Ÿ}ÿ]eèŽý±+2EþºîÛ¸E{àáÈí’¤ëÒ¦¥ªÏ¡w0"ÿßI©Ð$ð€s‰X vb*aôÄþyE ö†…ºÑPVR­=‡í$¾n¿÷Œeu÷LØwÿƒ±o{GVUæóþÝÔ·3õã[º©` e ½6œ)´»cY)KÕ=‰H*ûÎ+ŠG±ÿ-®˜Tþ­¥š”À ê-Hÿß9?¶2O=!›ø¼œøù]°k™¿ôc_÷mÞò1»íJKe' åóuß·ó€ïoßϹð{Ãö6÷‘•—GÓ“šºŸã–û\¹§I!ðUŸ¯Qel§>W1éâ©ï¿ïßíÈJšyæëò!ÿ^áû }Îðm–/-Ÿë}¯Qïùg¾Î›¾&vJ>O&ÛžD.[}ßN(+ÞÜ·ß••·KàãšûúŸùø×|?©ÿoîfŒ©¯ƒ±¿,•®‡À-ùÿÃÁ8ƒ4½öõhhh…c!â ßÄ=)Zž`”Ê¾Í Šñ©Ÿû9š{{<÷ÒKô< M7CKÅ£»¥&G¯À¯ƒ·¾Þþ!#G·úpãþÍÇáWÿ_øø—àÞ!<¸ÿÙGà#?¯³ ª]ƒç~^ø]xå 0»³Ôr²¦Oós•VY§¹ëµ•-ÇAÞ z¾ÒqÙ}úÝú<÷è§ÿ¤ðÕwÿ¼ã„Þ›a|Æ‹ÏAôuK]”OšÞ>ÅÄW&ôŸ€YÍø"IEïbQéd¨7…KŠj÷"«øgNý<¤BÜŽ*u™f…âuìßõfªÄÞ˜ï­(Qªê¦*O°jX^÷«yuPïbÕô”3Ų,ƒ @ÃÐ{A@ÇE.—–‡ŸžZLpéñpH-Ih‡,¶¶È‹m4»]‚å’¶òv›h0ˆS¸4²uÃÆƒÐn÷"h›ídÓ Ò¦#§09O"1ÞE¸qÛÚÅÛBÑT–=ë:äG0;6âv(6NÍtZ0žCÖƒ¬ÙØË"©‹›÷¬­~çË +‡4ãÈ:Ô×Ül8‚qáÜ>/Gfœ—5•01ÅŽÙ}S߈ºP =&Ý4Š| ‡ hlСdnÄxiX…ŸÈæS/Ǥ8©X»¥Œ¦Á±‚ØÄÅkc È ÚÔlØØçÞÓ—9,"#”c?ïgÁrªŠ&SÎArAµr—÷®Å  #a1äÍO¼ ýõ„/~ùIòb ËØ:0PK`– ñÄÎ-I­ð>ÄŽ£™CP‡´ëwô‘°¡®:[À ï}ï5ùð‡ÿN§;üʯüGG^6;ƒ\dþÍ*UÕî´çOœCÇ4$%yÚùiEj¶$y§€ðË¿„¦+>•ÄÖCßïþßIñˆ?­¦WæVi:çÛ¼ïÛÜÖUU½T¼ºíä ¢4ñ§aÏ·{\(Ý«t•ý”\‘z¦“T\¹ËV¿‰*F~‰Ýã22p#ºšVâJ(Õ¼œËŠÛu)•s¯|ZûØÀAiüæU÷^…$Þ«tƒ¦•§~)½û@Åób­r ‡¥R˜G µÊ±xW¨ãÇ6Oð®ù9ßöµ¢ºêfíW¢~Eî÷%?ÖË~l¯Tù!b®ïòÚn‘oû¼ï«$ò—¢Ø·úyÞ«|fX¨Uæ#ò.Ь,»=k•q•¾žàÔ¢¬=?^ñ¿çHS\!…—^$o+ñŸ%©»å×K)›T:ÌMÝd»¢~¥+s¼ÜÏKg©ÿkóù+DŸþ*ôÔk¡RZv*ªíŒø5+]!eæßY³ ¶¾ üÈë_/ÿçü²½MŒONä¼íûõäÕë%ÍEúÀ#Ð… ï|'zåìS—•ˆ¿]xà}°ñ8Š ò;ȧ­‘×Ü„yÃO ÒkŸBöÿ>úÀG¡³I 9¡%Ý&²Çš‚Ü}Ý~ Ô/@ÐEëCoLêGî¾bnÝÝ·»ÌYƧ–èÉ–-e=ñËõЉ hÓeÞlíñ¤µ•C¹:ÕNšžd”뫆ˆ–÷øm4¶îú­Eð®;ŽS¯è5|Ç:\.%MQ *•8Ü_@‹<§vó¦ÊtÌ/]Òh{[óñ8˜|ë[—/SËs:''G‘h¿ÏBDƒñ˜U˜Í¤?™hR«é¢^§¨×ec6c¿Ñd± >k-Ï™Õë’žžêtø×¦òî7ó©g6äSÏžcöü¾2¿gõÚš™ûÕjÂñqAÔi0°$£Ó±¤àèÈŽi0X‘Ø hµ„N§`422y½ncUJÝ.SáÞ#¥ß;÷„µu!¬)µ†ra&ca[¥> ã¹²ã|ù®\†´¬ ±& Æ084“<Ãñ t•"‡»‘/õÔ`@aM¨7 âmaz‹¡)<å# J³[ÂZ­KJÃt¬–ä°ß€ù†Ðh*q Ó¥«¹X/OÔ½'„cq’s¤F>Þ¤£¤{ž†ëæ¼]Ï ¸× ±Š%L[^¢±R,¹¢h¤£„#a~¯`ùm¡5‡äªÝ9ã’¥. ¦*ȆÜáÌøE]ÈÛÑDÐ…qU8q¹ÜL¬GÝ„"UôƒÇÈã{ôF¢¥mˆ¥Ý’L8ªCû5˜?¢ÔÇöÄœ÷ŲըÆ^FJœÅVAЉ]fºânGaOº“hç^­=r9u©Í–üœ,Š•Kö†?£ÄÍ?äÉaEe©æ QÝ!&c‡Ülzy®!Vž»§+òo·BúÍ]*õAuºWúw OÌd%OšºtmËϹäH\ònC^¬|'FÎð,±ô]‡eº’Á ®SºˆŸªOÉÕh;”&¨ðÊòéÒÇ£á¿eâ6ubøBWAf¯?/ÉèjAõ©C´Ú­ÂJ¤[ž„Üôí<èp L-@- ìëb¤²ð˜Á~SV¶ÁK_ ¥4uì›ÈÇ¢”OÍ*^©®|îz„R÷ã tåßSƒ§=êÉdP.•¦„çýübïNä>g»j]–šÀ°€a`Çâ8j~¼u—ѽîA| ZÙ÷Ó–•Áá+ã>èèª,Üöñùgλ£yÉ#:4®4(;<%“·ðs\zò0wØÛÒÇò¾_KW=I»¥+Çuü\Ÿç>iüw•‘wd¯3Ï÷SU7Ü£ò³„›jÉ9r„iͶ#žƒIáòÜ~’8/¢8Ö¢àŸ}V¿þòËòs?®¿úÿ±¼ëÃæÝý?çú¿þ)ÈÛ߉¾á-è» žúº³‡Ãñžý*üÁ'áÿýÌ—Œß¸©ðÈ_ÿqxçOÀ¥Khž£·¾Ïý|ës C4ô€¹ÌÙý’ÑcO,Æ^­WT-ݹ‚5ƒ=x&´ù!dç§`ã 2›¡Ÿýró+èE`ûƒðȽtŠ~ó_ÃËÿ5šeÈÆ¢õ9ùÜ?9£CIäÂÂè]ZK‘ÍG } f·àÆ]85 Y9ýžËúmC×ýû#¿lw,ñÐÁ õ)w<ù—®ŒI“•©:L­Ô^̶«[nÚ·íkeßêƒ:¬xœÜw÷v|ùz½çLé=]!þ¤¢°J|‹Â‹I©bdUß$¡HÒ“²É„e£ÁòTÃPUiµÈâ˜E¿¯ñ|®³Ñˆ8ŠÐ8–ìî] Ë0”úhÄa£!Y–é—érɼÓá~³) ZO º]É;Šf“A³)cŠz]ã8­×IÛmŠ$!¬×Uk5 /6²¶¦ñÖ–äŽÎ ¡V#ªÕdÚëA§£µ$AÒTGGDa³I¸µE  í¶9#EÈ2ËŒ[¢ª¨„¡Òï#Í&i½ÎBU™Í4¨×™ïî’,ÎçL“D“ù\fׯÌf2ÝÚÒÜê:M–§§ræ8= ·n)''æjÝéXÐ<Ú\¼úª2Ÿ ½ž"b‰„ˆÍÍxl¦u‹…Òj çÎ)‚°s•'×oÊ;ßt·xæÙ¦~é– CekÛT™‚ÀHãi “‰r玩mo¯$_ãXIS%Ï•­-[ö]%ÏWJS­¦°ìX T"PD} IDATÔ¡¸#è}¥BwWhG^€º{“Ì—JQÝÖ­D†ÓÎvSc&ä™R¤‚DJ ñÂä]‹XÑP)Ö &–¬…uGšKX4!È”v½ &u3CìÌ…dKé&æI’M„E ²†"}%lOIˆu%(-këD©«v,`-\§±’µäÒÕ¡^¾|~§)Ï>ó€Ý©ã5h-”‘@ “@Iò‰’6!k:7$ƒ|’ sEKøÇºZR'I”_ú¥ßg}ý†<÷Ü»øÄ'žôÊæ¤ÒåH+|…ž»N·Ô¶S’ZGº Kœyäæb5Yù+”ü„çK”^¥åH +?ðßw<€:ð´ïxö œR]i ùNu«’½¸©lÝ«œ ©ø°’žK=˜:„çÈ“ˆ®ZW`ìÇz¢<®Ux?ç»/Ú.ÝÂJ(”Íe÷gZÂy*}uOÄ®{ç¡ Òc]Uç Yi{Öüù9 ®ïÝGžý¶UÝgvšò Oÿ{þzá*ìîAº×¾‰¼ú§pÿ¦-ƒ’ =©ÐŒF«ËJÔºì¹ämyÛxÐêÈóÉS û<ðHÖ†Ún~¾ù 8¸?†l¿vÞŽ^¸ŠÌ_…OýD?ç—ñ:ÔÈ—az{%Ù»\)Ë×½fÒ޾ýï‚­×Ãç¿bC^xÓëÄêo†ztøÖº7'~.ûž(Ôüzä—̉´Vé:d~ %NÏ+‚€—Av+ÉÁ’•÷dà²Â÷|¿~‹•iEÇ@*®ñéL‰¬¼G[ðæÒœ #ØÆ1A­¦y³i¾Ï?O!"<ö ƒù¹sY&ËÅ‚¤ÕbÚhß»gR°†Q¤y£Á¨Ñ ¨×eX4@²N‡“^0Ïç9¹I­&‹$Ñ ×UÉ %Ë$Ïs™…ã±LUa<& Ñ¢<'­ÕdÑjÁ`@xp`ÊØÍ¦©iÕj¸’U6Ÿ£yŽ, jßþ6‹ý}êyNcwWf=¤õ×½ŽiR ™Ÿœ¶Z¢£‘%ÇÇVÍßÝ…+W,Y8:²ŽFš–ÉÔëÂÚš2Ê™gD ã±u:ÖÖ„Ý]Hb#mOG¼ç±g˜dÛò—ר­› fÙ~Z-ã~d™9y7Ij4àÒ%˜LäLå©”Í5˜‘%¥ºÓõëî'´%Ds½ÿ•[üê7{\øâR¾÷uMÞòý*úà”w=9âéç6ù‹/m3¾1£» ×-°ß;g†4µs~é%ëÒllX—ÂàY½{%Qyh]­A˜)ÑÌbªá²BŒ\˜T­ô@úfsƒ2IfaÙôØ*ß›Gö%!<º'm(^v¯‰M“ŠÍ·`ÍIÕQâ,nÁ<·¼ÄJ1±Ê¶6¬¤¨É߯ %aqÞ‚ûèžyUdVi sƒ‰Õú+Y£ž)|¬ÐØf ëЭ`Ò5ÈYú’p,L?¿XÐÂ}:v‹ R eap†lŠ5È#!êZ°;Ÿ˜›zìAúZ“/}é!Þúäçùî'¾F·û6†Ã:˜Ì…z–3E#ᤰd³Þ2u­¬Tió³ðŒ0*Šj‡~ô׸té‹<÷ÜSüê¯þ°'MOJ7ªjS‚q7½²¾&9¬Ö_-A»Ð…Žw¯:gW-fã ìéj qró¼©wjê‘›è­W øwlùÔ¿Ûª@yrf›PXñ¨èÈ †u ìŸzµ}MV¨zÅ´.ªˆÇ— ?‰Æ àr)·[v|\FwXQ*ƒÒÄñEEåiÍÇLuE/Ý ËñÞdeH7òã/ç%–U2Pz2”Ò¹‰wJ߇yÙ]ð„hWV ãEÿ¶¬|C²ŠH™ e>îøš(Ç;Ÿ“T"ÔRé(÷ä(ôp#òñ‹]*ùЧ pL[\EÛ×âŽo÷ŽEÏ!|x7«á]™½ ìnR‘ñ-¥‹Ïyòp\Y;yé*®«€¿¨Hñª¯ [p×Þ®'xT$‘ÇþGáɘúüÎe•Dµ<Á |›w*Êc!ƒÇ} ùÚÚõ}Ô|m/= iœ™o~#®ÀšJÔXQy•‰D™L¤uäªñE±êVœ%α^ÏïÝY:"Ìw}ðƒl?ü­sü£ñ[üüßù/øþ·½ƒÅé?æ-ïVfrç%øýß„?þ|ö«ðÂMW`´&¢œÃhL< Oý<œ{Yà™Ã3ÿ¹÷e¸=´cÚôcùepÏ—g)‰;qØÐ¬ Gl>âÓ`RôÅÐûIä¡§,o¼ù5xñ×áóŸFfxëÁ#?bÎÝ6‘áWà“ÿ=L¾nËg<ò¨¿޾ Ùs¶ÿ—<ÀïûqUÄà–#è}Ì×Óçá…‰O±½d×íFE±Ô³8ðÇßÖ­ šÒu)DŒˆ}&8Xv¢ÊíúQ½_ɦŽúunšb¼HÅ}üµ‰hQAþ•É…¼`§j„ã2˜MS‚(5Èjä`«rŸ?îì˜?ÁÝ»LÛmÂN‡ðô”i±h6Iâ˜e«%a¯'q¿O·^'ŸLè‰Öjõ8æ Ñ`Y¯Ë¸VÓQ’HEH­FÐj‘DZ¨'>AµÛ²¬Õȶ·‘­-ØÜd±µEÑj‘¦)yš"’$¤aÈlcC–çÏÛuX«‘ÑÍ2‚V ],$Ís¢¢ ±¿O”e,k5Ò ‚½=¤ÝÍs«×ÇÓ)²\2[. Ó”a»m²¶ÅÚšuDÒTòÅBbwKO‚€ÙÆy™GÅö¶Áj5Kä‚À’†4µÿ¯­­\ª‹Â¾2©C ćCK¯\±ÏÇçñKhT³‚'ÙvâtÉÁ(u>ÃJ·&ônL)…¹ÚÏR,`}î&@6*ÄiE«WQ‹K«^Y©L•]Ä;eõ»4@¼_r<ü<Ï»¹àÀ•±6|Þ+Ûø¹ «ŽNW*I$«@ºt©Þ*U¯<‰Ú«OZo•¾,Y«ÊŸ«°Lç…«¥ÃÈæî›±^1Ú«ùš(¹S»QÉ‘•¬pSVöÎeÒZr{:Ó=|,j>W‰¬æ¸$Sa³ž«¨=m;ç¨]ñ°xÕ¯»Ü׿T¬•C‡§ú¸Í+Ni Ü‘L-ò±iøºêøµÒ®$²…;ž—\¦kýUÎxËÿ8Á[½¹)A%G/s,©ˆ—•ÿ¯UhNhà5_¶:ódäϦ\¾t™wþÀûùäoÿŒ®u"ùÐOÿ+xô·ù‡ý0“¸yͦºé9£_RºêúyäCÎíZìñòçÑ[†ÌîÄgdŠLÌÜ.ç’áóßÄi%ÁÚ½çú“”ÊÎÅ[ ÿؼh|½Ù ð¿£›vþ?¯û ºýÒyZ#¸õúµ†Ì^^©[_¨Aý0=6½¤¢Œ|àK²œêØçh$fÆè©ZPè·…š5¼Å•¨µãµ³B¦~™O+]¬±S&뛚­:g¶6ý8nšº”.J/ ‡RÝqÿJ k!EÅZ¦ìV¯YcÑkÈ@9˜pŠVôÈ²Ì 'Nú¦^GKÃ4“PUŠB8>¶ÿmn’]ºdrª7n0¸vnQÐ C¢å’a» µšyN¸¿/³v›¢(Í笇ÄQt†Ò]Y aX "ªJšçh+j*Îy ͦJ³)ªŠDóFƒE’°!\[3O â45‘(b13ÂÍM­'‰,‹‚QQä9½ãcEDæã1³Ñˆ°ÑÐÖö¶¤QDf½†Í¦ÄYƲÝ&V%U% 8i6É[-fnL×Í`Ÿèèˆ Žµ8wNâ,c\¯[%=Ë,8Wµ¿ïݳqMew× RYÇÇÖµèt`>¼³rFò^,`}®^UÖÖ„(„,¢Ç~ò?˜1Ÿþ\hÄßVMISa>/9&K{û¶ððÖt…Á‘ÒÔ‚ù(R’ĺ&“‰;@ö{½nß)“sOW®]Úme8Úm8=åþÍ€_ÿ¿[\èÏùÞ·(¼ý­¼ñá!·N×õË7/É¿½'‡à`ßHÓµÄÎ9òU›ç–ø€­Á ̘0MíXŽOÌI;iZÕýðÐÖñɼümXß$Ï ¥Ù°L­iÒÀÓ¥0K!\@AsítQ‰!Ÿ@½or®âv‘X YkÃá‰U®¢XZ' •@o^½cž {äp4ðk(QÖׄ‹M6áÞ}-,9ìõ…QËØê™ÿÅѶf°÷€²ßŽ^uhù6ÔÇÈÏ.Ã4¶Ê~1ƒö¤—a”Bî†Z¹{:Ä(q$LN¡¿tÓXï‘KèU¶™ÝÐ’„S“Ó¼'>3ÈG1´€8œX—dä²Ñ9+ê6 ¾eñƒ¼es“ì-B[Çáò‘ ™ó.»c#s3×u%š Á)4×”VC(z0ï ~™@²4¤¬)­¨ÃÑ¡%Œ†K8)A QnŸ"ÀÎìcO8NL[1o›Qå¸ y¨„j×b«aÆ|Ó»žhÖ *§ó–wýˆù{oÒÿróŽ<þ–ÏóîÛßÅŸÿáë¡™XÌB ‚C“.Ü/l}…#%Ÿ[•=%lôP­ñ†7\ç§~ê7‰øÍßü9¿mV°ý3¿“60øËm¬Úé¨z+4*2))K‚ #®tÔŸÐåS³Y ¾Ï9NüÔ»]—hÝ\Éý2ñmíU× ÜPSÊ)¯tÚ^sbðQÅUª ÔºþD{Ù߿찔ûÞñ©ÁYʲÝ^éHåÑMÛÇÌÅ@ßcYEã û³ä‹L+DæÒÓ Y–ðÔ’²Œï”‡‘RÎÔ£ ò1\ª@5|»%÷aXMÅ•óîyWæ®ÏGÏ;C}Onn«¯%Ï£ZŠ.½S®V’®¥'w‰Úówí]ÿÞ¸â§Ñ­x14K ‡Z°>¬$§ Ÿ‘¯•ke’ëó|±âCRª—>//8Ti¯”žÕ•|k£ôäp8Rìë´#«ä¯ê¶>ösÊ*îp3_§¥´îºvZ‘¹-çs»ÒµÊ}þC—@>;2Õ9¾äpª)M« †îõrÓ×nÍa¨vsˆüz][³¥Ó{ÍUµ._ÖïH0â Œå?äœ8´‰Š¥¯!r—C˜T¼t¥# óJÒ‘x²Qú>¦…YŒÿéo~„ÙäE¹>€ÃÁ9~ìgÿ×ožçäÞí3îÿÅŠqú7A[}xòíÈûÞk&­ƒøÔ¯ÃüEK(Ží²‘&ð¬÷I¿´¾á—TÓ—’TÆãÈÀÛýœ†@g øSjp7Ÿ±Kl·oøh½â.ÒÙ½_û:\ûdyËó\§÷œÿ^h>û_°çÎv§ru=_Í})…žtÜ)àŠÂ²Ž¤Nõéú8fžz.*ý×Í;Šcßfy‹xP„}î‚4Š‚W*–8…o¿Tú.óâ5GåžTj " W¾y.A…þ•U:Tê0Uu¼Ò)±æ…Z7M±ª±'¡¿OQ˜ó³ªUÜ·¶¬z}÷®Á[¶¶ ÛEZ-–aH†4Ó”h6Có\N:š‹õ8f¶±Ac4b’eÔ ‹‚eQ™‚%yNEH’Ø%Òn£yN¡JÑlJÔé6›H¬\§ »&†‹_æ9ËV‹°Ý&Ê2Â$¡89‘e–4ÔÚm²f“ÃÝ]©Ý¹Cs>'nµ˜g™Èñ1õ<'È2¦­–¤ÛÛäÝ.Q–!µÚh0{è!Ö·¶Ì^xÙpH–¦¬«ÂdB¸·'Ãå’¥*Òh “‰Á NN8ó‰X_/ õ,ðÍsóœ ,¸O«Ú¿òŠ%¥S«=[[&Ó:ÉiÜz™_üÑ[Ôjžÿb—/}8߆0F£•ׄú ;;ôv»ððÃÂdb·ÛÖ1 ,±ØÞ®ºoie|wrbP®fÓHØYV¾gÆs³»Ü:nsû•‚ßýx›ï{Oƒ÷¾7å»=G¶ïðžMåã߼ʷΙu'€Ó˜ãxqær| ¯¾jò²Ý®½W«9z"³çÑàÔ:4õ\~ÀÌu¦ƒwÍ+?²q©×¡A­#óÉÐÎl†piN‡Þi !ìÀÍ;p÷Ôäñv;B§e\޹ÂäŽfMa4€á:QkžÂíë–è]H{¦Æ”ݳ«q±0¾Ãù+v·Ig°µ G÷`ö‚ ë°}Æ×m\çM7À»i²|aºo³®D˜ÃéCXZY$lC¿k•°)ŒûÞ5‚³¬›2ëv'L:ÆEÈÑ«ü±8qÚ’¬³##£×ºGvšÐÛ|†Bxjbß  ëR‡ÈD‰)'•O·0t^d[ˆ®@2ƒ´&¤#{~·Ž!) ½âˆÔ‰›J1wÉþu¸wj,ÄbfžÄ ;bLÅ#ț֭÷ØKJø„t wj×B|©%y ÒÛÖ1+F°\˜âMȶ`ž²8­É§¾ü=üä÷yß»?ÁóÏo²Ý%jã©s.:¹êMÄ‘PD3› ¹šu:K~ê§~“$ð;¿ó·ùÚ×ô§WIBÍ=-¡?SY•!Õ½!¦5¨ª&bR!O—%J‘U }X±åÍý½vE)ç¡òÉçü…¾WuË®ÁVRW¶×ñ'î]Y%:eo¿áOÄY%"ºäß­ûÓõŽooÝ·ÉÊmCVª>çV°·3}lj?i×}[¯XkÅtÏ×2‡~\ƒÊ8•%¼Ä·ñ-ç‡L+ øyÅO\í¨tQŸÊ šV*M|ße4¤~^›¥6¤|§¯CÓÏ3ðÀ¼ãÁûÈ•—z>†“J$¸_‰*C?çe%ÚL*ÇÓª€¶k•D³ª0¥bã»é‰àEßöÐרÀçí/}_eùtϹ^1œ”¦ƒÞ‰¹ì•û¸âQcIŠwnI½²_®åm¿.†>ïYÅ °Y޳|g’|P1ö›øk«¢\Öô5^úň' e‚º^OÈ––-Ÿ³¶Û^ôã¿áw±då±Qšï`’Ã¥/F±ê`„•KX_SU–Šè›® Rgæ:+dYR©¤«´òýNEs¢´ûXWøžËðÄ› ™Ln²œÂ?ûüÀ{^⣿³•ÄÜjµ„t±d¿¼táíïƒ÷¿Ç£SøêŸÂ½/YǺD•µ=GýºÿþFo Í|Í*–ß–zÀâjÓ…ZÇ~ópñ}0K ¢ü•ÏÃý¿€Ö z<ñ¸øGî4¬ :x¾ò9¸ù;+»’!°§põaØû‹Un?í4¶ÂŠv›èRâS}Ç›}e#V ›‡-ŸJWÖKïÊ‹~é•Ëeê—dØ¡¡FWT‰U™}UÖ‹ÂryÿL(Â>p„ªg¦ô‹J>^jqL¨Ê¸(Hý³EžŸ‰šÕýÖ8ÿ+’Ú WÃ’W5ȳŠP˜ù¤)ª =fUwó-X95ïíYÐüÜs°¶FÑí¬( )‚€°Õ"ó€?sCµp6#Y,ŒLÌi³I†«Ju r˜TÑl¶ÛäÇdiJtrBúòË0S”æpÖ-±W£aGùxL^ºC·Û„ý>ÅlfˆÖ¢ 5³h6Yœ;G$"ħ§$§§iJo2!ñE´Vc´·GÑíRCD„ÅxL6Ÿ#»»èú:ip¦ÈhDÃA-ÍêÊä¢^‡\I¦ªZÐ_žžÛÿL5jõêtp_KèΟ‡Ù^¹CëæKüÒOŸ°û`ÂàvÄÇÿmjjMÍæªÓ0ŸÛvF# ΛM;–Àƒ¾’}rbc×jÙÿwvV]““뺔*XÝ®½f3K8Z-ûÌph°§Ò­|g•>ûû_|f'ß |à½{gü݇®ñâ‹×ùóO _{¾;[páa‚nH1[˜s7.³Ç–à\¿a®æôv¡Ö0èRžB£iÆrÇÇ„ÐÙƒá)Á23{…if~ÂzÓ¤1zç`§Eã6žBZª¡•A£kNÜ÷oC–Âë:&y[[X249EݰúŒá¹oC÷–ÁÔÜ‚«o€ýc8žÀ`n²¸ëWáø&ÜÂn׸ yÓ M…B¿ ³!«´dM+çD û°82˜Z Š©IÒÖÚfš»ÔGmÝÆiÙƒInÎ=iìþŽW úÆ­ètí.3œ[e=HV®JZ÷ŠXá&L—gå 6&áÜŽ9Làpb0¤ 0΃†/Lš·C}´gå±hàЖA®2`>„yf‰‹Ö 9‡eÝ®™â> ;‘«/­Øè¶ö`d€ãâȈeáUKèÈ!êCÍ=Ò}È[–¤Æ5ƒº-°$£;„hÓ ð™0À«¸É±w&ŽaÓ…NÎç>ýz._šð¶·þ?þÁOñËÿLJ j–ß³N𔥥²òi©þ”j1þð'ét^áå—ßÅÓO?á° ÃJUy\†h2U*î‘?AŽ*8‚¸â$Tà²üu»RÞ**T\‘ríúSçN¥G¾¬I÷ܘoÝß»åûîzuäç½Ê1ùq—ý29TJdµŠyžú½ãAai¦X†d%v¡tŸWø ¥[óĽY‘yM|ßòçìf¥³1òϔҵ-ZÅèmV‘%Í*Àæû•9(1 Ë Ûsîã|ÓϽ´"ø«U)KgIÝqE‚¶T·ªBæÂJ§b­b(sÅÒ$°ìL”sܪD…¿¿ïû¨:Šß­ßËÚ+•„Âu4Ï`zeÄ»ïã{ÝÏ·[Y‹¥Ãõ^eîJ˜VÉá©û\‡•¿/¯ÀîgbË×$"¥»÷´É•>¥aÝçd^qi¿_IÌâŠI@XI”Ç•2òZÅ$²„3Î+ÑruÞ:ÃÂpÅÁV¤l¢ #|Mb‘ºâf2wvÈJbáà Z¹ø%,8$ªµº…èä‡Þ?ÿ³èbyKÞòÞÀ³_Øçïÿ_Ð Gþù¯üo|í«_eç¡ùØ'ÿXþîûiöwøò×>Ë“oóáŸGCNOáæ ôO~™¾ç3KN]Éê¶„´æû/+ò _»~î7ýœö®EÏeU››È¥_€õ7›±ì«ÿžþ ¸þ"t3x`ù¾Ÿ…µw?"XÂzŒŒæè—þyõ÷ÎòQ=u^Ä¥àâ߆¨×þ^ü‚Mg9Ž¥RSI̾]Q-c¸ôýDè¿€ÄÓÕm ½è‹Âaa¡'Må- ¬(:—ªY¢Ê±*ßRUŸs9¡%B/ ¬EtTi§"22<«ÊqQà¦xš€´TiªØŠºÛw'ŽYKZqLÇdQÄ<Šìva‰3øÈÔ„¾S;ÙŠ$È2"ˆ"Š«W ;ÂÚšÁm­«%× IDAT–K êg3 $‹Â‚èÉ„èömÂãc¢ñ˜h4"›NµÈ2êÝ®H¿Ï¼Õ"ïõHZ-µƒlmC·«ìì„JÕ°ö“Ü ˜:qñ“…ÁZ.·ã=A«‹‡¬·»¼íï¢Ûíéàø¾‰elo„eë"\XƒÉÒ tS˜Ž,ðœb<˜ àÖ«ÊZÓ‚íÃÝ$m8pîŒÌ¡Á«×0nJ ¾¢L3SËÇ–”H jM”IC¨mA³mwú“ù`´7•Ãc!oX'"ÂâÔ0ý6¬]„ì>,îï ~Z'œ 7ìI2I ï)é¶Øƒgf C°fPª¨ãÐg—V¯ S øµ Q_‰Rƒ-Bì`Mú¶ ˜CcaÄëæôFŠÎ„ì–%Fžq0[›Êl*4Ü¿%-Ð?Ia”84R¡1Q´%,{æÇ1>1.GÂVH¦0Èì§îéу «Dç˜×Ex²5H`zßü;Š¢‘y|4š™ZXÒö•Ù hf…H6€ö¦þàÏìÿÌ…0….JÑ»‡çyòÑlm^g¾\çÆËçAÔÚ,e`³V JÐ6Ø`›|ä3òŽwü6GGñ±ý$“I©gXÈ*Á˜Vt¦®ÞTšß-ý÷}"wX‘ˆ×VnZgAÓÀë 9`o¯:\gÁs©øT’ŒŸ®ÈéÆ~Ž÷\Õg&« ~¿‚8õã{}²R8v=®ô܎ͯK"ûºCUÎ;<¥åûŸU’¡F¥r_ï÷J³CszÎ-POÊä©Ué¤,eäÞuXVÕ”z²â«ôuU™Î+ ÑÌI»¥šQ³Â›iV ne´xê\Ñ•³z ãÚw…«3Kdµ¯n¥¬[€ÊNļì,¹bÕŽWÚëŸYÅSbYé>œ–$w÷¹çûŸ;™³„Ée.Ó[®­a)¿êc—”ŠJ¯Á{ôÔº 70%¥’‘z¤Õ/%ƒdïBg L™0W!_RºÕt¥N•U|*ÔçÛe‡˜TŽ=tHSß}1Y1n·ÔΣ”¬ÈJÚvæò²óJ[@+žyÅ%-ônÐ\­ó!žˆáJ`1"Áô¬@\!wËkekƒJ9¶[¡v.•[ý©ä,HáØÀ𧥄)N,=/ÈA|Ÿ à'??ôá€ßÿ­‚¢x;¿üÇŸ‘—¿ð=×éȲ××\É4Õ}ê¯É•«ëúò4×_þ#žþÝe¾@îÜF¿òi#;oûñíû´µ¯ú0¶Ý{cÛ—õ]?§×9¿DÃõ+–63àÜ[áÊC´ Ï}žùmSWl‚\Ú@¿ë‡‘KoD!Þ€´×‘ã }ö“ÈíOCÃëÀK‡iõÏÃ÷þ"d]xéðµ‹ì¹3¶×ó$2µìºÜël%Z'Qÿ{ölù×ÿ :9°c¿æÉRÙP=²1×A¥ó´á~‘×OJÛ¡ÔóÛÙ jÅ–ÇÝ("* ja(Zz2]¨š'j"*…µÇ4T‹Bªå9¥GƒˆÙKTUç ©ˆj‰‚Ê|.Z„!Ašæ¹íÿ£ì½£¥ÉÏ»ÎÏSU]»o~óûNÎV+XÂØÙXòÈ€ , 騻-ËaYvᘸìÚøØ8€›++B2²ä ÛÈ’=Ê3Òhò›n};w…gÿxžßíÒ¼»sÎ=sßÛÝU¿úý~]õ„o«ò‹ q¬EHY]¼(ÇZæ9ª*ºµ£‘ž¹0[wbéçÔã˜v’HÇg“ñ˜R•«õ:µN‡ý àêUšÍ&ÃñXNæsšÛ²²XXõ{8Ä=:‚¬*h™¦ÕjQ³^×EÑlµ©Z¤(„4µd¨^WÆã`JgÇ^_7Õ¡ÉDìŠ~ß0߅ш(Ž%Í2M'jõº´·¶(’D3 E&%+E*;;Ã!Ãf“I«%4&ã FŸL(;«´'s¬¶¿V3Ï‚`®—ç– –Ht»ÊÎŽ¢±¾nïL,Xß>¢ÕkÊÿñ]½pu*ÇÛ‰þÌ?ër°è@=j©šSuaIÛl&ܼiÁÔÚšêƒ%[[6–ý}…n×>»X,y㱜IÀŽFö÷éÔxÓ©°¹©lo/»Õ„&˜÷© £±QÎVWó·&\XãÑ;öxÕ}sî¼?×õöX‡·§Ñç¾P×/?•òä3Â"Ý€K}Ø\³qt:Bž)£œd0>´»cÇy+E¦…pù4;ðÅgù¡ïùNýÁïþƒœ.rî=wU~åóŸÒïÿÉŸ€µ-acÓLáNGÆ+Ø@wê%œ&¯º™ÂÁ@ÈQ´Ö[ÊF²‘]—vÜßbbwðùnÞ0ŽÌ¹KŠ¬Âµ{ › '3øÊ—a–A÷’’t†§GJV3Õ%I`~v"!.•YGN”ò¦uŽÚ¯1iÖ£(Ž¡CÙdÅæ|%‡²PŽ ë8È!j[PQCXL”"¤t£á#3Ü‹Ö쮇$¯ iOiÍ…“™²"p¤Ä±=mÊ®‰'!«y|+‹±%[­\h\€äÊÊ$…Ú†R/„ÉÔ:Ó‚Îúyƒ°E5K,ÊC˜·”L¡>ƒVÝbÒFn ÉT„Ãä¨uAcS~ÒUƒëèT™¯ÁbÕäÓC»ÛçGfK7¬S6 2Ÿ‡E)ÔGJÖzJ<¸ŠH‰s÷<@A‰©uÕóÔ™@¼ ;}yð‡ü…üN§«ú÷ÿöŸb4r!ù³.Š?MGÔˆ(º¬Èµk7õ/ÿåÿ]ŽŽ6ôg~æ/²»ÛñrØÐ•w’ŠÙZM—˜öÈ Áÿ½P{­U½^Vêl9tgà Šg |—,}3‚³x[—Ò¬S® ‡„PQÍÙuIÕË•óœzt`%5÷(<8V¿®Ëhá(ÀŽœ×ŒÓp¤»=O\mgÏã­•j:à%*¬Ð0W‰cÜ/y’ñbëõµY¼àr¢uô'NÝðÏ<™8ô8o³r½£ üææ£$‚ëb^—Ž R=;¾^âëH¿a]_¬†¤Lt‰iúœ®šÔ¨v'|Î×*srè¬ 'ëjb}7Ø›,µYÐû:½ävG+²¿~î™—•{.¡;œŸ³§\â¶íþ$A-ì)ŸÌïÐå>=­txRO87}Ì.8ap"]&n»X؆Cù‚q!pà²É¿®µñ½è Û=î_ñËþÚ‰'ö/ùçö^†Õ eìÍÀ QëŠD>-±y~ê¶ïûªëßå*Ð>ñ¹½üø×:yk%¹¥n‰¬yýcÃëES7~;tˆYš¹éš'”KÔª4¬¦Ä‘oŸ5¯MìÜFžù’òéÏÁï¼tCö~ñƒ:ŽøÕßþm~ðû¾W®Ýy¯þäý(Iíó¼þµ·hÔ…;ïy3?û×ÿ_ù0<ù›ïÃæÒŸUBCò'–_´í¤=×Ä=~¿weÚ ÷úõ®yâ±<ð]èƒo‡yŠ<ùð;ïCÆ X»¯{^ûÇË¡ã¸þ»H§ç®ÂíüúÏ Ó/SÖý6T³â}7Rtàè%øÄ¿Bº. ›Tt¶=Y^ŸÞi´^ƒso€¤†~þÓÈll]£ºÝ&µ´y ïÆx'‘ÊÜ/ÀÖ6}l'î=\ÖãZËq,ý(bEÒc6â˜R„y.cU]¨r\–bªÉ[RUÕ…ñ&D¢ˆv“šZ’d"”QD)" Ða³HSû[Y¢µåê*Z¯C‹¶ÛõºÉÈ& š$ÐljÙí i*EÐéP…Òhˆ6û« žxº+‹¤£ç7„{îžñЇFöšZоW1Ú;çAb;°(=P¼²Ê·•5=ªp`Ö_¦Gš{>h”V?­t[òJ»YéP”‰Þ‰ÿ¬ºÄMpRÉEä‰Þ¶™ƒrשÀ´\rQjÞEêyÇeêÉðëN%¨ îü5gÝ÷åí 4®^)Ũۊw¼FbÕŸØù6‡/ë¬íU²ýŠ*ØÜ½)Žýxû²„‹ =á«£é]¥ A‘K`Çû—ìЯ9$J²s.À¤*É_ }7X&ÀÝ ÇöEEí+òkN=±ù5ýš£ÚÉÐJî|¡‚òùtœ¸’yÉïùŸP-+½ã1ò þVúÂî¹'6íß¼°³Ã/}úÓüÊOPˆð>òaÞø¦[|çÛE6¶¾‰·|×Oñ/þÚßçãøÎÏlKÁ¿Ó¿çÔ”¦û@cóØ_Àë '/Cžóë| ø}~̶óç~ùô‡¡¾ ¯ÿ.xìq¸ãQ+L½ø)xñ_Âå7 W‚›{ð›? ÍcSXzΞ»|R.~;¬= ‹]øµŸ³NûEŸÏv¥)Ûô5xŽ¥@[ÈïiÃÁî¾ø[HË1hç–JËâºz\vÛ­­;þ·+è¾þž~Y’”¥<ïJFEQðBYò¼ó²$Ru•e‘4/ ¡(¨…¤E¡›E!uUêEÁ,Ïä9eYž‰öÍD˜‹XR±XXà»ÝaÀÊUU âÒÔ’ŒñXBðy­"&O»ty¶ ºÙ´{kà>ÌfÄiФ)Òl’ä9É|iJ½ÑTÉ ÖòœãÅ‚EY2Ll¿7›Vånµ– FAåj>Gf3ƒ©J:R£‹ùtj<‘™3Mêõ¥i[蔥%Dívê-é88¯‹È6½:ŸSœž’×ë:__—i§C2œž²( ŽŽÈTMÒ¶Ù$kµÐnׂ•^Oi6¡×3? ›ûFÃde×ÖlLA…éüy¥ß·k®Õlœ‹Ü}·%'ÇÂÁ>œf°ˆ¹t>ãÏ<~“sWçœlÃ?~ßûѦ ÕR;ÏÑÑ’’‚ ;¶uv,ÉãUHY–Ù9óÜ`N§67õºÍeÛk—/Û9”Ê’=û| ¤‹ØxÊ’3‰ÙÐʼn"Hk†ÓŸŸ0ß=å«_©óÙç»’³Ê””;/Oyø¡Ü?æZgÈ|Vrx«„[ûÐkÁàvNÌLx|l×{ûâÈÙןãÿüsŠÖú:ñ?|„ò¾ûx~oŸž¬òǾé÷ñï>ýI£»C/Ô¼;íß{7 Ý€^v!_˜ÂR©–ÐÜ<†4Îõ¬³$éR•1Z7HÎÔõø³™»TÇÐkÂFÃz¨Q'æÂfÃη³Ó}X]zÍ’¶8;.ºÂ”û5%‰qrçlÔQÚ„“€«Ýô2hæö¬‹úËýGa$ñ‡VÄ.Y,mKFš-8J Ò…{6È"¥Pd§öÔJ HÎ[Â4v èVd¶©š Ѻ…ªG‰™ ÖbXQ1Ørfs1<„ÑÜMcAbh&6'iÇ‚…FÇHð£‘ñDj=GŸìC90ˆS43øWtN‰ !ù¢A°ÊÂcr&—](oCmõ “Èöà/&kÐ=EÓO [æÆYIÚ¦H¥]Gg‹L°€1Žxòó÷òŠG¾Ì]w½ÄÁÁUnÝÚ%+sº š¥‰H]Ð:ï~÷/°µõe>õ©?ć?ü-!¨«HaÍÀ¢p·*øú¾,“ƒe[TsÿLÝßäFû墯úû¨àð;^* ú±ØÓ­ïà›þ¾Ë,YŒ¼¸Õ »îÄÖV…; ØX¯’„ÒéùJœràº,‰èá]ÿI+…¬Â¹.S¡‹1­`çÛ•(giÂvWšƒ!\¨Š/d) ˆ¸¢©äG'ºôލW¸3?g¿Â¨U¶UñùÄ# •¥rR^ñB™UöÆz¥[‹ÈUŽæ®Nàd½ ÿ°Úu’%Y¼éA3î²éà÷žr\Qc JZmÄùdÛ×çýOV KíJ]¯¬áÂÏ:&!I ç¿­qð *R¡{† ÜðãU¢êÀÝ ž$kž,©'ßCOj^¬bON\É+(—]ðN_Rñ!Yq"xZ‘qΖ2Ù¤gšåöï#ß«­úä×í9BV½[‘ûí"{™jÔà -¤²¹ŠQT¹Å:ͦwJ»íiÛ…÷šö;7Ý=:У†ªòø[Ñ×¼ºäUþ+ÞøÆwÉÁxÂõ¯~U¯ÚãEO¬B¯=ÛòrÛÇs'g~Òv˜ÑŠÌ–ù¨^ôNLôYŸÞïø£È½ß‚îïÁGÿ‰Å&ßüGàž×!$3xñSè#ã›èý?€œ{v¿ Ÿøiè•6þç|[Þr ´÷*¸ëÃøùÕ÷ ÏáNKtշՎä6<™;^"3µëï-s8aQÀ´4ÏŠkËîó±Ð=ÿ=ökv»-½«‘9Œmáï;½×·Êu¿%Ö@ö€ªÖŠ‚‰ˆÜÑdaüéù×6ÐÞŽ€²,eèÇoµ¢< `iA­Æ¢^Gãµj²UË;ƒßøê2ˆLSÁŒä´˜LÐш¸Ù”òà@µÙÆc9“­5/“®­Õ ÓÑ¼Ñ žÍˆ'IDt”¹"Mi¦©d"LE´ŒcŠ­-«Žg™Uµƒ«sðl’¹q,Ôj*ó•t2‘Ùb¡¥u;„^OÏÞ¼ÒÔ`G!®ÕÌûÂu“ºì ‡‡–Hiµ"Úm-§S)‡CɳŒy£AÚïÍçªY&³ƒxñEM²ŒbmÍ Fý¾Òj-+øªpîœp×]¸;¶]Ëd¢›E¯ *QAñig[ØßSö†0˹ãJ.ßòš}ÕÃcr©ÉÑÍHÿÉ¿?ÏÞ¤eØûvwé_Ñn f4võªo>·/\Y*£Qä„}%I,X‹"›ÇÛ·íóe ×¯ÛØZ-[çVËÖ|4 ~)B–)ŽA¤¢È:æ2n÷¯ZÍ®íäÖÖL½ ‚‚–û¨Œ'apCO¾ÔäCO5àò5¹ûž¦~ëƒ#®\ÉÞ2)¿)Û–Ï=Õà¿|z…ç¶™É&ôK˜…iQ]¹|A8ÚVv^`åòeî»ûnÞûäge‘¤pÏCÊé»Å€Í­–l^º¢Ãƒ}8>1xOÒƒíg *­†0WåúÔÐlÕ„Y¦ÜÀ¢·`íAócÎ ½¨lmX|°½¾_†ÚPÍ nf”æºUËn º¯löL•Ä’œÉÛÂÚzIãuB¹ GFän¼é9˜Ó Е¢iêR£U“ÝM»Ðí\i´Aʼ)B40¨Ó$¦î QŸC+:¶êJÔ€Ã#»JO(E†ÆÙP )„~¦”]!](“ÂÞÓq£Úlâ¢Ø|0ö¼°1‚hU(Se|jIaCMuj ^$RZ…)U©ƒZǧ0^†Nè7ŸÁ ï1ÇD5!ï›»9Ÿ7PñbS(v :‘#HËx+åžUž“º/”†+.Õ3ˆëÂÊL-Öð§uy^(Ÿ²÷ä—Yâ ¥ Oòa2S ‡|Óˆ÷¾ïͼûÝïçïøEnÜø‹Ü¾½^!†& ±@¢Z®ð¦7}‘Ë—ŸàÙg_Å{ßû‡\št'(9,hâÁNHR2øjqû©Xæ‹C4V]- KÜ}xP €ãÒÊPU]È’ã‘{ ˜;$ëX-à]V鳊)YVI`®úpǃ¼«…)õÊqäÁkPï9Ð%ÇDÄœªƒÚS!p—C€n…¤@ [ºc¶¢޽;Ç"öyÚó'ôªw Ú]ÝpÈQ ž.Úvü}æ9¥ý?}I>tvBgþB^)q–²tI/d¹a¤jÊÒ¥ýЃމs'‚lîÈÇ6tžK€(Eºt oêR=,øI< GzÖƒÞ†,åk®øºžºaî‰ØŠû”)ŸN…+”¾ÂšÝ당'e·}þWC×Ã÷÷-]v˜.Vº±wTV½cv”¶|Ú²ì€ôÜp±ô¤kâëôWo8äiR1ˆŒdÉÉ©©U††Þ±Š}¯Þãûy¯’ìdu¼»wÕ…7o»_Ë«M5]À¼À°®Öj~Á¹+ªÖñ[ódq¬K²ú‰ÏKüµ2µ!÷ò¯¡ÈÞ9ÿïíŠøeœ¼¢ePŠ£ŠúT/¸RûدPvbóÛƒ·¼†³ˆÿñû~˜ás?À{~éCüØG?Ê÷=ü07žzêì87½–QVê Á3ófÅ2dǧù>çžOý‰/Åw?¬ܼŸùe8÷*xå[ W7µ¿ÃÏÃS¿Å‹v¯ü³pí`ºŸüçÐ,ݳ³"Âö´KϾõ Ö¹êCðä‘Qx‚ÌlÇ·å‘ëÔ|ÜÁx~Õ¿#`ó.H.Àþ“Vä ¼’AEaàkÎUíŽPبP±b—îzc6¬Ù~¥{’—%™Õ3 ŠÃ*5­ˆ§%q¿Qð7!"$Iˆ¢ˆúlF^ÖˆcƒHcµšËc†*ˆÓév)Ó²Œb>GÚíeðº±a‰@†“d@N§H£AêÊYyÓ˜ÍLð`8¤­ÊXQ¥LS¤^·j}pŒð¨(ˆXíf±@f3²Ôªôiš²œ‡ÉÄ>;›YEKÕ¥ÕUK†‚a\| ],³ÎB½n¿·Zv]“‰}¦Ñ°cÇv¾ÅÂ~ÚmX]%Ò¾ó¹Už/\0tQ™{oÏŽ½ºjãÉsûšZ7 Ë,ðWµÏïîÂÎ>ŒrHê\¾8çÛ^;æÁ'49³Y›ßüÕ˜O>sƒIÍð÷‡sƒäÜsubvwí</Úy–níqlç­Õìƒ$îæ¦ùàÀ UÝe{<¶±mm©‹yâdãÍìïŽí`Œ7ÛuœØµ•©~ßæ?<žGÙO§Z"û7ÑhÌsÇë<÷„­\âÛ^Ê+ï›ò†oóšWðå/Ôøà'c®ßêØ3óÚÝ0:„£[0+!i¦ëëLO°÷¢UÄW›D…UƒvNá¹Cëþlu͵yï¶ÎA¯asÑY…Ú*¤=5L™HÖ ¹w¶?øb OàÆf]gÖ Üï!¶çýÑô6 jtõ^x~Ǫ÷õÆ;ƧHïYb‰D;†ícXx…µvœ&PžØ˜Êf±q¢¡•92 0ƒ¾¸ G´Ç0u#·Iiw¯Æ©Ué[«à·¶`2²=˜¯YIFo/ŸFñZ® T[@7ŽÕ‘îdh K­ÓâSØ\1(Øbjp¬¹@»—º–¸e3žÓsÖ¬\sT³$a‚‚ 6Õ¥`xìëQÖl®k§ÖY¼"·²¹Ä¬KÛº)Ó±ÅÊé+™gBN IDAT#E×!YƒròSˆN!?g°¨8·‡Œ^¹ÅM‹e´e(õ…ÁÑtl±² Yí7o^â—ùM<þøyüñòž÷|ïËjˆ3(×xÞáïø×Ìç[|ìcoó;{$ç€uTQªQ–F\±ÅAs0®»Áô+À3êxKîüâïP«˜•›VEêV¼á¬Ä³yžk•§`ß“€@p½«âpXŒÏ+ÄìãŠÏÇ¢â2¥•ˆèËE«Eå÷ÓÊõ²sðxž¥|h˜¯àµqÛË—²„²!ùG9­ŠbP«R]*p¦²âkñ‚_[«BfæˆAMI+:˜ãŠòÕ¡{^‘s ×8óèeàã_«tŸ‚ÊÓZEÈ»´gÝ£ýŠÙ[æó cíJw%Ø#ØÙKWïÐIÙòÏžTæb¥rîP­ßôy ŠY‡Þ¹W ÷:ÞÅØyY7'à46ý¼Á»åb¥sq\‚-–%^‹î*לWLõ*®¢1?Xé0v<šW$¢O|íë•.a€dåþþsþ˜Wº‰µŠ|SPÈ¢rn7* [ÙgUûšßºkÏ«àÕ¯FQ™º—%Z%‚«+c‡-×®©AÀó7Í}H/Úk:YÒ‹‚¥ßüzøÃïèètÖã?»·Nè€þÃÿùáß~Ç[¹÷ž{tðÔSd Oút¶}L­¯ížè>mÐ×ycôO.nùx¾a Þü]pîÁ„Ýý\·wá¾ .^½7¿OÝ¿i‰Ø5 õ.ôâ#p¼þ‡™Í*º=óé`¿D_ù lÞG·ácŸ¶ŽEÝ’ ½\Yêu³Iâö’|­çýZŽÝwãÕŸŒoMðJEÍoZÙêڮЇÜÞF±±Ø=-´£ êÒ'~ΚIUµ¨lÑèXDf"^×K2Uu®ÊP„™y WCQ%És²Å‚BõŒâ”¥ˆJ’P–%D‘’¦Ëä¢Ñ°*žSL§ìu»°XØÞ9=U:ÎÈ׎ÕP=:BTk<¦Uâ(2?Í$¡e| =p‰Ö¼(ÅÂ*èV ×3èL€o9CýºÊ%?CYf¿¯¯Ûu„àµß· 7ÀÃÌxÍÞûÜsjØW®‰àÜ9emÍ®ÇæÑˆâÖAÑ3c¹ÕÕ*´IÏ’„458RšÚµ¾AP„êtìï!™[[Ó3¨P)Ç'J 7nÀ矂Ó9q=âÞGJ}Ó#û<ôÀ˜f[8ÚE?÷Å>þ‰”½ÙŠRÓe»»Ù´`îúu»…\ºd) êõl>a\‹ÃCcðۨו££ì虹_³iI…1ÚÜ­¬X×”zÝ R`szj¿pÁ’«ÉÄ’^Ï’¯“‹ “Ä}!Ê%„+Ïm ««èêFžVˆr°§ÝÞOlõX[_áñ7/xÍ7qÿ÷ùOÿå}â¼æÃÌ´;”ƺåjÏtnŠ\Ù» µ<7§}ù&hѹ[7¡^(—Ö̯-&ÿJWi®ÁxnþӌʮwÊ;¬Ð´ÁJ¬´/A¾/ìQûüŽnB>W#{M Ÿ@Ö5IÖ"‡L­b“À0‚GLuõ"Ìceÿ†×Mybå"ìŒk ˆÊ¼ë拤s8Ù‡Ff2°/*Y Ã{¾.Æ ™r:…ÎäÛJgêÅÆ™3n('¹UÑš=µ«Ä^΃ÍÚJÔ†yGY” (§ (W êÙ¡’L`µf…Øã9ŒÐZ`¤ú®iùM&V°‹s+0K¢”ssb/ÆFŸ5¡ž@ÑRÊ=‹ó./Ru˜‡Ü=R$¶±—ç @ϬÚ/²©èf©}6mC4W’ºÅejﺦHÍ ö¦c“ýQ¢!”@ XØþOkF¼NJ ˆ0HU܆ä&•|ä#ßÊ#lóš×ü ßñ÷ñŸÿó«ÙCµÚÕz½ä{¾çȲ’óoþ,_üâ¡üí½ÌP¬Y»8Á9­¨-'—®Î$I[¡ëÝ‹£ ¢¯Ë qà*Þ58 P^]>r {©K§ïàMѨTy;AøýЬê ߯æ†òÜnPàñèb\ Ú‚WƉ?«8_oøø_ònÀŠ.Þ×ñýZšnïŒ |üzŸ÷MˆÔBAÒ•:²d­èÖ*r¤QEÒ·SY§&K㵩.Õ¥&>Žõ%ÃóLIkîA|ŒtYêÜ"^Ý?Ôe´ædâPí ówà&uÁ@Ž@rÖeR1Ǹ'7*õÔÉÞy%<öäâ°"œùž:WGœàÝS¾ÂÇð¬w‡V*œ ¸"ýÎö_âë8u3ÇwiÒŠ<°‹¶œ©aƒÅ–Ÿk·I÷½7¨${-]r ‚¡aH°_r@§Ò¥šTdmc]’íK_\–\ÛAØÏ1pGnU"úc]&A2x P|=Dªpõ§P®(ÿ+8(ùZ¾†,óƒFŬ7+mÃJ·¢ª¦<_ÒÁ öS1ð>ø#ß ãɆüOå-ŸþaþÕ?ýin|ã…ó:ä†+3 L©ü ®Sx¢Ôó¯g°ŠyƒÃ…žð©:tå«×¬À»Þ½ª¾öl¬2>žÊW¾úeÞpóýðÙß„ÁVAÞè܆ìOBïµÈí}ôc?ÙhiÆ‚åë¾üw€\|-ÚêÁÇ>MWäòJ¿´@Ÿñ9Zµ•×í¥–ˆ?>dý^´ý0DCxö×áŠÎ|œ66–ìììëyËxr§Ýz5Ô& #¶k¸åWÖyÏ×Ç©W" u"ìDZä"ˆªùžˆº˜dªêÄlƒ>å¹:¼H(KÍ+–?eE>7W•,ˈM‰JÊV˾ð„¥(,À4¢¯)­¯ áA_z½P¥Öúba®(Ò"Ž¡,Ñ¢DTâ˜E«EÇ$"ƒdeI]D³zL…ªÑ0¨R€j>‚W¶ËZMh6 ncÉ‘)H£ÖjJ¿oŸi4l^¥:“u'L .ø#Y&\¿nÉ•%YF8/Šàl.gR¼ijøúº8Á ¦–dc  ,  ¤ëu –Ÿ{ZMûf3áö †p0¤³ÞåÛ^Ľ(—/E5ÑÝÛ>õ»}ž½±&×o¨Ò¯#¡èᑞç– ÙyWWMÚv6ƒÉDÏöGšÚµµZÊb1B³i×¼XØÞ¥Ý¶ßk5K" B§ìì„Ê»\ž´£‘%žÍ¦§×3³ÀÝ]›Ÿ$ÁªlÏlm ;;zæÖ8Í&œ?/L§F(_Yñ¤Ì¯m:Æ/”³¼/··[üÂî Ïï\à[Þ8ç;?àu¯_ȯüZÄo>sNËÚ ôÖ`~Ìüö-ÊãcJ"aÔ”YL¼;b«‰Ô¥»ëkÂÑ D—¬°¹¦ sA;Êæ–U¤gXï Û…²Z@«kîÛu1ÞF™ŠÉ”së,­‡£¹p|¬H j+°ˆáú}X¨°^Sʾq=±Á±nÌ¡ˆ…â¾’™˜ Û3¶›9ÖB¨  £J"¦Œ´Õ7xT„­C6Vš}3´;)!» L#Eö`ž ÍsFî.fÊKÈÎ ­L™•!=™Á7½ݺÏÅ Ì;ׄÙ\‘c¡ŒiCß²-àVhUŒót ÒÜÀº¾õê¾Î³¥¤{¢ØÙ¶ÛŒ;Æ­ôÄêf†´Ùc­E‘Ö¢HfeÉLDÆi"¬©Ué…,³ÊZ’XÐk•yUØUƒœ'±4SEãX£(©×‘^ ØÿùÜ‚ä@Ðc«2^º¤D‘²ººäˆ I¢ikÙl’6¤í¶h¯‡t:&'š¦œ‘¹ˆ‰P4Jǵš ^«™"•¼&#ÛjádiXYY’¿—¾ KþH£aóÚšɆÇ0ãÝxÖ%é÷åŒÜ¾¾nûZM]޶·-8_zD(§§zæ^mÒ¹ÊÖ–%È\1)š7¯K'î µ€yÍ·êØÁoa^ Ï½ûÑñׯ î|–¡'c©¯Ž÷»ÄèÔ+ï ¿æ€9Id 6oV|LÂ1JOv*œ‹½ŠÍr¢Ë$¥îIÁÍ@êW»±ø½Ã’Sµ¤òš'g—PœKAE^8È ®Z”xw©æ×Uì{ë·É\V¶ð±´\æµå‰_Ý“€—Ô:‹ Y é|‡¶. õeeùÓ;¼bó­rx¼¯û{;L,ð—`ô¸÷›9ýìžXס4Y\6ýgÇ»+ þYäŽUä㿈L®[—åÈyÈÓö‘«~Œg} \b×U¸d¥¼æÏX7åèp4€¡%!²mÄn ž%Rth„jéWj=nx(+– IÐèyRäô49¶k °œV¿¶^!R–’EÇ"Ì☤4Ÿ¾³õ¤,­²n.Ðr¨¬HHSÏh#$ŠÌøÍ|‰’D4ŽEãm6!ŽINOa4Í„VË~ fcÇÞݵêóxlr¬F ‡ÓS©e™y.õ²”fQ EAÇ’5Úm4h·Û²—¦2w_„²,eì¼'ü EaÉRè8’ñ!„ÁÀdPON ×?™ÈœÊ*ù6†œù5ôûæ-1ŠÖ¦rÔí,(Ëì;ÇvþÙlù½Í2 ‚WV„óç-HNKxº]ëæ ÇÇF$/ ;_šª›ý‰Ì'‚&°@d:“ätÌ6nrß¼õ®çäí÷~™o{t—ke¥Øc’÷xvïþãg.ñ¡Ï^•ÝA¢å|,¤9 Ž`p*gÝSî2ißVË’„zÅyB’Ó©œñn‚ƒ÷``ŸÙLÎ:9¡ûcÉžøš,]ćC¡^ÒTŒð}zΣ®Âeó<›Áæ¦píšu¼‚rW«%gЬ~?$Ç–,Ùz ++“›NCñÊÖm2zÈâý>4Ââ˜ÑÎ'_jðô;ôWyøU3yÓ+¦²z¡Á~|ƒ§¹ï»ùKàMüó|X†O~ARî¯ý5Ù½u‹÷üôÏÃ(æsa´3«ÃÞ‘‰0GЦÐé “¹›Ø¤p} yî¿WXé‹q6…£!­o}|£…P_5ŽA a°€è<Ìz0¸ÚF¥y>D¹ÝÜ‹R\ˆ¦ÐÏ•v&ôjö`ÔÜà[1´"a%6›B ±›ý%‘ù, H†¥dF&N2G%´…rOȧÂa‹U(gB^j*¤u¡»zmh]¨ÙuÉÆ¥0 k am.¤õØQ‡B™A}º#!Î`Gµ)Öa<™¢© u¶w„v!”Sô”™ “1ŒJa6õøï*H_ ./ ó]aTƒÑò}K^J  YCÈš0¿)ÌÕ¸ ã‘0Ï…"]ãÖ¤kBžq.4wìþV¬A¹"d (çb$î䙸ÓT(êF¦W‡eÇ¢ach¥B±0#Æt  t„b Ï={A.]Êyø¡'ätx‡ åïüg,-þÁ?øK2›•¬c®™ãêÄåMHV+¸ö4¹=pȲJÛ lƒìfݬ™óD¬ò?÷$C]Vv=àÁeI+AxË+ýá÷Ü_ÐÍcϸC׋‘‘ ¯hãì±»Oýš{^¹Þóç]G¬*Þ®° ÿû,‰ËsïV¬Šu1&bÉPìÇMÅÆ°%Ëñ.<8ÏXš¸å>+näT€FÞ±(§KŽF¨~ M**ÿç(A/ è‹ðA± ÿá½ïåÇÞû^pˆÓ} ©+µ—JW¹$íØ»)È}ËæŸÜyFá#øîoƒoþÛh£…<÷…žý·§úܧáÖ‹ðÜ#kWZúôö ùªçÇ;@öÈk4†èG~vKnZ÷• ÂòdI?“k®žC®o£/}òÌ[f ¯4.ˆ¤ÎÙq¢zðètA3ñº„^~3¢M´ø*Œ_‚ È ÏZgEÇ b:Y8lleY{Ñ»=qL}½N=1|ѺKrákaràÝ÷Ý”ÒæŸp8ó`ÜY¯<ÛSæVÌî ¦´µš$Æý)K¢(1Ï õ€[™ÍPUòÅÂv#}+««øÂêªÒëYp«j§uTâXjF²ÖZ’PÇR¨jT–²1™0r“žQÕBdiWê]«ŒWü@ÜV]úW… ÔgS22Ï“=õ©ˆ,]çK_xç¶ÝYX=j‘ÒrþŠ­³ßm>†ÃàIb Õî®)CÍf–XÕjÊӜɋCêŒKºaIbšNÇ ™{|¬ÌçÂÆ†ž‘úóÜ MÛÛÖ!Qµ„#t²Ì|8‚(À`` ΃Ú|ÜŒ—ùf˜_I¯Œú„ñDiÖ= Í”f×|†§FŠ^mA9áù¯öåçN.ðM¦ú¶oÝá~Ë>Û/eìÎ>ðÞËŸûöo•ý“ÿHÿÒßþqþʼS¾ùÚ ýÉöw•s]Xdµ;à<BÚVvžê]¥¶ù}¦©)ŸµEȆ“9앦‚Õ® r§’-`¾ŸS3i‹ú0MmÌÇchµÍQ»?"Œ,wa|}˜úƒ®U˜²¶. ññ¿‰zŽ·?þ Þò–Ï ¢ò[¿õ]Ìç" T£ ßæn5mPÑÎÎyµ~æ¯Ú ‡h @»¯EìQEéã°"í*Ó™Z/8¬C\•©ïÚá˜ÁÀ®íp Þòs|ÙÿÖ¨¸sï8Œ§é¼‹[$iÝ+ÿ]?%\­'$LSLù¨S‘¸I=@«¹zP€b *2ªYB˜n±,;B‡þ0=qUÏ‹ZÅ󠔥¬ìš¯Y€Hu|>‚œ >Ç xÃãü¦ÿhKï5*Pz×)sxS³¥›U¤eoU¢­~ØÝÄnÝç¾ï‰ì‰ŸçÄÇrÎ× ÀÚfjÇk{bÚó]0!Üôhô’Ïß9ï|d{ã`l¢°°ßƒ·GË9….eƒë•0zásV8òÙæÏ] >uÙ÷tIÞ~Ð×+óD8¨º]öã‡d¨æjbM‡Tí™$ÿ$B±(u2¸8õDƒA¹ÕkǃýÀß×J~9óF–ÜåëÝõîÔÏ9ÁYü«Y8D¨³´)QqBóÔÇÓò-täç}µÃ´à¿8ëÞ¿®ýA‹¾?ÿ~ô3?{‡%ðÊîç{ÿ‡ÿ^ÿÓG>‡ÔÑ{ÒþNxÝ[ОÀ>ÏÀF„–¥q-fÎç5îúvô‘Ç‘lŒþÇÿËšá©_û–/óèkü6ó„o©p+}È!_ŠÉį>ŠFŸùà™J•nW„ÉVüxº¤¯i«¢Ñð¬ßBÝ "t>ñÛž œsXÔØ¹s'ïw¢ˆÄˆÜªÀX•AhõETJi¸•×K.uæxq)-ˆTêu¤,‘ÙL5ÔÓ©AQêu *ó¶·9soJDªÊÊ L§göE乿@YYF\–Dq¬š$¬ª ö$Ë$. æI¢q‘™k¸A–BU=Šl`n\ f³LϪݦ^¥g¿ƒɪÖ]êPªyj4,ùÈœ|¶±aÐ20~@ø|£¡g\^ÏÞàZó¹û««Êsû žX4¡ IDATÇ ÑWò:«­LÞzí·xåÖuí®L‹&û{'Ï(O<Õå+·ëÕÃø \¾µÄ/šBLR¾D ò`L§§Èw»¤F6¾ãcáðÐÖÒxz¦ð<0TõÌÌ0$q­–%LÄnÄ~û÷xlÇÙß_ªrõz°»k‰èl¦gܘÁÀ|/66Ô‰Ûvü,Ö¼cƒ’µÛ6Sç2NË¥KÖñ8>VÖÖmïÕ[&ZÄvoÞºhP¦Â]Ã󹿓¿ññ„¯|º{ß>¸^Qð¹ý®}Û;õ'~äÝü‹¿ù78ŽxÃÛÿ<¿ó‰_R9 • ¸´fÉ[äì­ÃÈkJTƒÑm“•-×`x¤D}¸¶¢ŸÂW áÎ…ÉÃΦ™ ¬<A«'kJÙP¢¹«‘á§]hÖ!(é¾¹vÇM‹¹RŒ±*œ(ùÔ$(ÛjJQ’Y÷ä8³`ãt²|*œ¦Ô ×†ÉL™OÍG‚KÊi*dseÅÍè¹’¹‘UÙ3-A©]1ï.†&—;>VFjO•êBÙ2_‰L”rǹRtM¹J†B!Js¬ÌaÒ5FHŠ=3Þ›u ¼d@S)˜ÛQ¢ó†‡.‡&é[6 8€øÔ‚Îi²Ní§ïåw¡h(¥:QiÒÔ’*Å.ßÙ¾bЦ™:¢áTI±¤G›n_‚¿ØÝ5!)åm+ã5ú6I£¾)yŹ"5%+,«Ç®Ø·n¼“$‡4çùç7yÿÞÊ?ü?þ.ãqƒû±Õø Q• AxZ‘X $ÖÂÖyE1©ë0¥Èo|ê€MëRI*ÀF¦n(ŽÁƒ[tè$äž”<í¥°Ç ü‘¿J>uwÅèìÓM?w³b0Öö±fM+ºÿ+ºÔe ’·ÓŠôM~Fzµãó>U»9Ì<P”ApêÚ{U¬¨Ò 7‚kø5ú¦³Vñ«qÅä‡9ïRéóѯ0GÏ´+ìn… ÁaºRßòë»Uòìâ±.; ›.uÚq‚°VxWuɳþ†_Óš‡ŽÃŠ#·.]voÔ«÷µus áE%@Çÿ]T$z!?Èãf¾fc¿žÐEi;H~Ýÿü2V=ÁÛõßïqcÆ}…kžtoù9zAÊÙç)ø€ìW Ùž„¿àsÕS‹2»•ïIÃÏuÛ×ûÔY¿Sßs=Y2Ún¨˜øgN±Dÿ´b”xNm~Nü8«ž8û>iW¼V.{òzC—†Ž+.Öµ¯—©ýÿðŸDߤ²<ÁšåæR´M•¯ØÂ“‰ªŒ­~}åŒÖr»¢lUU©J+‚k³ —Ý·¢­ Ì3Ÿ ~ ˆÎ!?ò=ðÊ{aõ8|>õ/á3ï[n¯o}Å+øÞ?ÿçùÈoüåCâ¢wYúß ¯zÌn/_úEø­ßpŠWi °CÌóŠzÕ#oF_ñ6$.à}ÿ×m|ç|Ì—X¢ý2à³q²–Ïkß;] q—)3ÞúœÞ´œ¸®æû(OW¼³”ø:LA6üëpÝó×våRóí5¬è^‹Èu¿},*²¿MU2Õ3ý±'?5U“1Ž"KÊRÎÄVÑ_jƒ…¤"T‚Cµ=(™£²oÃ! ÷²Œ³@´Ý–³@<Ë, ½ï>ƒª™WON’ÕU w g>'. Í&2ÍçhžÓÈsÖj59ðnG–¦DiJ‘$dA’´(,€žL¬;`>µš?H׿¹Uí«\@6®’Ôƒ*‘ÿ1Zà{zjì… –LL§…œ™‚wÙ<\¹b­ÐC`’K8ÊÒû"·~ÛÉ zi F%¤ÏÂFÛpüYac;M`·mž õ#ã?$Mhn@«€4ó½ÓJ/‘4ÅŒíº!ñï ­‹6æöŠÉ_·»~Z·îFÈ[^-¨Ï`<…Ù.—P¯ Ù„æâ9dGžÀ—– ÕbhôŒÒ݆a“»ŽxfšÕ¶Ð®Á༙ÎÆ0BgÛV}ˆ&©ŸóÒxElŸ‘c3ãc:¹eÉ’\¹âÑ](46÷ôø"××Ï/w%w×vÉ1X’kùE)D'÷Œ¥—ÏíÁ,.åZ[±‡Mæ…ÇZd„ñ¨idòEe ê-¿Ï¬`„;:±jOƒÅ Z^©ŸÕ\â¶EÛˆùñ•à ˆG^0iÁ|&,R ¡Ó\7+¸îˆ½½µŠiZZQL Äí›Gè…ÀÖ*ò¸‚a®Ð§Rlèt”•è!òà,ñD °…ªÿ¤"˜~³"ýÆ*µ©W¯3‡”¼PqÄš;T$«Èȶ+‘ÍH–A{è˜lU¸!{>®×;‡â¸+ê-5:Y—e ¶#KRøó~}ç+`‘‰G¡\8ź0Š|NY‘s]T4?3B7½Š.žÄlÈ׬ÊÒ@O*þv»Ç™ºÒS½B†%æ‰à«.#±ZÎ š¡uYVÕ›ç¬n¥zÈR±iÎ’wrâã AqÔW*×xà*þÇžLŒ*,Ý‘'TãŠ/Ép J?ë~\ Ý7]š¬Wöqß;/5ÿ|èž] ÜÿÛ‘,]à>GAþ7œ+8¡¥©T–ŽÛaïŸó1Ì+»‡ž´†Ïõ\d¡æóü’G~mY&¾]àa?Ö†Ÿã •ïß®'—«í0W}ÿ{M–¾AAmâ ÌE ”ÿ_ FTÉó’Š£tÊÒæcXÙ"ZifþÝá÷h¡TÔħ¹½ì†œÿ%>ed>ð¥|Ðßÿ)àþ·Â;ßX¹ŽðÄàÃï3ÜDáñ7¾‘?ñýßÏý½¿Çÿýâ‹\óírõíðÚÇìZ¾úŸà7u) wìÛ}Ó·MPF~è1xôív ÿîŸÂáóÖq9ÄÆ/ø²Þr-‰yÅÀ½çÈË ï€t/|Ú¶M˜§aŧ"4‹ÊW8$ ׫Úùmv[„¶+A=©J#ŠÎ<í+.† óór^‚¦•[ÒRï8^*,Y×bÉÁÉEè|äùò½!ŸÍB%Üžõz0 ãŒ´=™pè_¸`Ÿ ÆwqL$B|zJ6Ÿ[ívãèmµ I$A h4ØKS¦QDšç”"H–M&Ì+.3ârs¼t.Ǻ5È’©$YÁ·¶–.åͦâªveiòåËK‡éVË‚Òããe§$À ‚¼ípdf—s×í.áæsÃÂ÷× HiF¿í»ú;¬Ì_âæéEž¸ý üÚS&; †®n@´—7 w×ÜÀ¡:xæ™@7òv€$u»tv:vMƒ]CYÚu¯­Ùº¬®zUa±tIgHÚÀŽS·8^ºr¯¬Ø±<‰<ën vüímûœñ^–ë9Ÿ/“™zž~:¨Gq–, ‡¶×‚JU?ît,ÙÌsáöm[³8V6VM&v=…Á)Ü>°J}³ iÓ¼(N°~jM8žºÌá%½+°j•îf]­ñÿÐö¦Á–eWyà·Îpçù¾ùå˱æA³\…(YÂH` ’,pÓt»u„»„£;: ØÆMãn‡ ËØ8   K²Ô%¤*•jP 9¾Ì7ßy8÷žaõµÖ=;“*IüèŒÈx™÷Ý{î9{ïsö¾­º8BÏ \&C‘’ݹ nÖA*.ÜÓ\§æhT—r¼Ó¯7Cà|Y:iEøã©xfø×€¬'p*KÑjr¤-`y&·rÆX/fà·€‘'Uô`[®Eq¿u&&p I¼v2Ѹ+V…L<^ˆÜ+(Ï€NC¹¤c ”H2pøŠ$Q•M Š/Yâ (6óêK@<’îD0Ö@³ZÀ¢€Óž”« u ÝÊÛÒi(DB0ç@÷`&c%*¢¥òª3(!²Ž€$“$)Qg¡‚/ì·)I[µùN ЖX¾fû¢J¯‰b“Éæ”¥N¤íM€`!]Žy HË&kźgžêoõ¢È6úĪ`:–Ý3lJ¹.\ ¾lÙ\ƳVa »ôÔû^ÅwþßÃg>ó-(•Æxßûþ®_ÿNNB'°0 ÿc'@ëä’/«™o «º.œDÅ:ë¹®¡`Ù‘sš¹¶â]ÎÝV&ƒãxe×õ{õ7õ¼'ê%aZþ …‚˜wÇÔ‘MK‡Þ§ßuÇ °M–ôºãí9;}]¡%û9¨½¾‰^OÝQcªëç,Ùi;¿8Á(¹„y}/;&KÇQ;Ö×,H/éßÈQ-‚“t#Oßr¼zJb‡­5à™çïúŽ÷âGÿÞßÃÿñG„¯ úxâÂE<ÔÜÀùï8Ä_û6ÙÓ_ýCàÓŸkµ\Òj'ç”Dè¾x×÷É¿ÿøÿ^xA–!ô°. CñEŽJ_ǯiu=ö€ù›‡¿xþ+Àç>!HÀŠƒÚ³šLÝy<u ,œ\× ïBG|oêyˆl2£G„y¡€¢ïƒ=O—¹°¤P|K¤{0ÊØLä‡ó$Î’3GÉñ®^ÍM {=9†%v^j~¸:×z]T¦ò{ƒ ¥©A«¤eãn …z·¬>Ë,çÑl ‰Þ\¾«Use—ï»sGº™z·´»Àl,Æp…‚z‚%ˆžž§¢Pú`¾š®U€úà*»i,Xùs‰3úY¤«-€§PŽ% Í ä:»!ÐkI2p”ƒ0.‰/EYc«%çýãp,&lÝLŽ—,QB˜¤ÀÙTôù¾¸2 ‹€†ùB DŠ k¥‘{M{r¥¨ʳ ¥qIRH"Rl÷o‹gEÀ ^Å;ÀäD’V”PˆÐ†uà(C 3º±p‚DÐ H''žéRó# JœÊÕ%q" @Ò)!J4^›™J™Ð\ w³¦œ#‡"1Â툱_¦ÕF¯øÅ¼ê\¨JÇÆ:3ªîÄM`QP €êÞ{uQßJ ªðZRÈ•iõœŠµ–©*’µˆùŸ—QŸ ó„PÞÏ™,cR7ò10i¡T è‡ð÷Шá—~áÆp¸‰7½é“ØÚb<ýô_ÓÝÇžØ Âܨaê˜É©ï;ŽLw½ í®¬[}Çy¹‹\*´‹ÜëÂG3(3‹YŸrì{Á0äºëZõŸo¦sMÇëÀ‚Z«Ü‡z G ,q’‚Sa.9Á^ê¿p‚BÃ4àó@r‚“Ñ1°xâTñ³\^g¥.ÞÓj: ŸAÖ†Çdê$UsçN2SÓc/s>rÈ™Ïl—ëŽÇÅTßç9ÉV]ivæ¦âŒ™SÝY?–t4·³¥9‚+Ÿ¤äxXPnÞ¾‡*;† æí0pÆ;t‚ø‘ãâšvî11¼å̇qcÚz~vý{zý‰žëU}ëÞv¨×~ÙIÆËN2nÑx_]ÑïÓê–~¶îtCØ1 4•/{^t¾ÐÐé&™·Œç$ø½ÊN„ÎZØÔë¶û⥻Œöè85•0]êã®-—J‘ÔMHmCx¡ÍÝ{áÙ=ÖÙëp.ð:¯Ý%‹ëå·yÒÐåE,Ó2ÏÃ9“ ž& ò°ýÀÃßþàÀþ,°7Nôø»€dÏÃó·;˜ñ¾û»øÀtŽäÖœê¿ÀÏ]¿…Wnœâóÿtx(uÆ]É9ÓnÄ^î!Iß„ì]ßZzÀ/ž~Ùe­Ï_Ñ¥®Fx4TrøX?;Ї!TC÷hRDvñ{eY¼ô§À$)[¥ó°n‰lÔ¬±À¯¨¤ss–wCȧU€O´ÆÌ¨ø>æ¾OSfÞÎ2œ¦)BfÊîê|kÝbå}â(‹ñë¬!ã`È{D9JÈڪЄ ÿK‡ƒa ^ù&d™…"»J«:ËkkB6L½L&äÇ1x¹äÄó CÖåhv»< P¨T,—XL§Té÷ADxÏà ?M9ñ<Š<%²Å19NÎò½†È¼\¦PÙÒ,c%˜ Q[’Ö®„* …Ü|z*’žƒ(%]º”™Ë8Æc9w ÌK%ᬯ3L2·\¦ôi<J¥‚•bU<¸Ì8Y⻯\Ã[ÎÝÂVûˆ–\ÁŸ}å ì™ó˜N=À;# "æz‡P«3<ÈXÈÕ·o†x{ܺ%×výºIÏçÏ‹D.3a±`ììBÚXÿV‹†„ÙL°æGGuK’ IâBÈè®Î–™*2KÙïz= Î×ÖX•É$Ðïõlòdëà@ÆV’#Ædb<Y—õºœw¹ L§¤†‡2¶f¨ØéÐ*Ñ0¸^¯'2«z”ðtÖÖ:-›LD`­# ?g'@£Ä(×”¨ìfµ.†r3ÅŸ31¢Eâ—P™ ,(ô¬XàF™0¼L†_Š›@éa Ö;L8K×eM¤!03ÆÉœðŠÇð{@Ú$”€Â (Ä„’ÏXÌå]BЗ'®O@–·XLvÅ'ñ¹š Gfð ¡TæcÑ"”ºŒEBè·%AñfŒå¡Ìk¡%E‡,ÈŽ?ަÀ4eÄ}ÙŸÖ7 ç¶¥u;‰ÿ[/g ‚Ø_0Jvï:E ‰WË¡Ï8í‹s÷n”B¼Ƙ!9c,΀eÀU ‰jRVd |BVWÿ©‘˜öap­1ü)!.22ÇìtBHÏÄø®‚„2 I±ÀXXpY ¡Ôþºð?pÊà¾÷Á&°ðq" JaC “Ù ΀(d1"ò¤ Ãx±JRZÅ^ñía™A‡„T=x¨NÚ@–2ROˆ™<`„B¨|¦t $>ƒ«À>ò“Äk7é _ø¾qs£q O>ùiºxñsüÔSáÓŸ~H{ë3U(‚Jy6@Å<»‘3λ,]U?2l{I·ƒˆd*ï¹t:¦"ÔçÜ66U8J¤ŠH§ª c®ß™ÊÖf \R¥¨‰âÜI9™Ê{6•“0ãÜ”­¯Dn_aM¡rG$ú)çõ%E‚¿Ê¹¡[Ky#¥+\¥¬|s/+ +RüýÒ©pLñI¸åTtüËJjO4Ù²8ÊãÜÙº¡ žÎ[è¸BŸéu• ~EÂ)¨;Ja‹¥rY†N?òäZzúZ‹ïÎg"bâ\º6Öù?S(SÇIä:ú™*ç @OÇ'Óy‹ä~Ö^sS?“e9y½@@” d© ¼j1!`ÏYsÐyž˜ò—^[¦¼Ž%ç0£¤zà+—¦¤óãÊ÷•TÑÏݯ¯o©âV¥£å&tÞL£Þc%Z_TÙÙ„Eáé¦SZ¿L¢Ô@¤‘$íÞ¥ª†m›a¥ªŽõ=VÈZWÏïI²ã)t®Ä*‹«÷î!€²'÷ÆHù9ìëç6U‚9dúÚ¦eÍ1Ë'y£õ ¹¯“¬Ð×!¿îCt5äiMÝñ=¶"VÿxÀ“ÀÎË @}ÌŸ>÷;À+s’S¥Õ\èJ—>‹rƒRk䇾õïxäá1F)ð§¿âΩLï¶ÒxR=§s–ë®î{7páIð2n? üÙGA ÀèÔ¶‘ûpÎu;Xæò¹`'ÜÒL ÅûÀoþ›Àþ³ÀÇ~-÷‘t‰»:‡ºô×Ï k¶ôøöÚÀÀ÷1gƶ~v”e¨ërY:p¸‰ÎGâɃÉbž|¨3öJ¦Ö¼!ÌõÚ GYF+¸ñ6æóܹV“r:…W,ŠTšÂ[,U«àVËP X„¨Ä1ÒÑÜ$*ðd‚b"ñ}xiŠ:3qŒb`êûè—ËÂÁäx•Š(Aù>¯xæ¿`©zKmpªµ59ÿåÒ‡¤Ò.ÞñÙÝÍ•—Ò47t3—ëF#W®ŠhÇ0ˆA£_È´ à\a€÷=zoºx Ù4Ã9x>õR'¼›# %ù\×®Éy®­Ip/s#çvp¼ôRî\ÞíJ'I¼HggyBtñb®Èdr»F’gŸvvW¯Š#öî.°¿/cið8[/ÕªÉÚJ2e#³‹2Q$c´µ•wJîÜÉyÅ¢¨W-2æÓi®f†|Ö2¥*ë´5›Ò1²ŽÚdœI¢+²>Z-yïÁBš—òÝó¹pBê@½ôNóª1XàR(«šäLø uo.©›v–Œ§ÄZiy,ú}@áPœ›Àí#`ÿU©T‚Å_Œž§ðîM…ºÒHHÅTµžáLÕ— óÂ.Й a¸œˆ›ûp ”Ï ¯¤ÑRàKk0mþºÀm§’PxK £10ï^ 8qMøã@©”z@£ \Ùš1pÓÏǰŒé—¥rߪJ'ýˆîƒ²¨>UZ@­,Ftƒ‰@À2¾ø@¤u!ž{cUoŠt ãKE ÝÑÒY(îCIÄXúÂIÈvô‰¶ KÙŸý±ÈŒ$U);ñ:àéZ÷"M= ‚ˆA§@29ÏÓä-Ïx šå íX)¼-;6`àI§'ÛÓb¢)}:ûŽÒ9IIãø ‘Éó˜á—Ä}œ«@\’>ˆR07ñþ÷‰¿÷{ÿˆžyæ¯ãWõÃ`g퇺|ä—E>þÉ?ùûZaíkкáà –œYÀlÕòS²ÃyÉmUÑe`»–™‡­#÷[(çò2+¾CêèVd¬¨>eÌÙ‰« }”³<ÑTžÇ©êB nª«pCÉÚKç¼Ûœ8ÇÙß§»ó‰î²VÙ.ê¹ÄÎqÇ:~s½žª³§:G¹cÔÊÍÚ Uëúhp[TrnÙQù ŽCMÏíÈÙíÏôw–´;$î…&w}'B4±¡~ÛNWË:;çµ5ýÜ g|Ùç’£r?Õ1i9»5ǹÚÎóšªKÅÊŒl¯ëÒܲzJf!Ë™ß3´-MZnq®¼eP·­#}ßpäsÞät]Ö8ÕTÿÿª~ήçºjëupþ@áM:¸—oÖ¤ôƒjBdÑžçð>Øéˆ˜gÊCúÚÐ!º{š`„l­¨‰h ‰® aœé9?¤×úëo ‘ò”]è4e ë?rø_'Áøz¯}Í? ²­™¸¦]ñ§1x À‡¾ ØûìŸË«ÀÕÿ xî¿GÉÝú-ˆÔy¶åÖKt¢9æó¾ýo/ñøÛ"LcƧ~±šÓ{\oÒûTÖûÞ¼ýoÖà‹žý}éR¼EoÍ¢Nßm½–©ó6Á³m§áZÑé–@÷¨Oý¦ 2fµD®>Ñãîè¼"ÏõÚ÷Ш&2fÔ˜1bÆ©’µ{N8tÞoš QžAÐ7<÷31B·UþÃ0WíÉZrfªg~DL+<™Âˆ2ƒY({ ƒ&Q„Òx¬ ›up±¯\e˜EyÌHÊep¥‚e±ˆIäii™Vç¹XH`¹\šD­\—@hõÙÉ$çn4›¯¯Ë¿ÏŸ®\1Ißܵ[:¹Ó7‘쓉õ''r>Q„•Ù`± ÆvS¥hˆ¿{ÿ_à;Þú2.ïœâÕÛ{ø/¿ ~s³j¸¼¡${MìŒÓré’ŒõÕ«oå'é²4ùùœ?¯² ‘u•¤»pzšÃ„¬b¯5›9‰ÛLõ«P¸K±˜C’,éäwâèCì÷ó¹|_–a%5k|˜^/Wþ2!F#?wvå ]–Iyè° IDAT¢àû´JÞ gc4™HRÒhˆ´pä$öÁ@ŽQ« žß¸&GÇšŒ.DDÐÙ”4Êäæî–rEàBéLä\=í]Q7Z,€õmáÆDPº(˜úÚh.„|ü`|,Š@~&$k4°.ë5цK¤“²¼HÅÑmáp HŠ€?— =ò¸FHZRIoUåøuŠèx[€76’d,Mzo ôi8¦K1Ãã¥ð)‚‰tQvÏ I#à`Cz®é˜Œ€ô(×µø'`v*IIJt[@w]‚óI ôä\WGh/ÊE¨/0&ª諚,”Ÿœ‹ óc!~£#†tá-‘r-·E‚7õÅT/^ X¨«øâ¦Æ×9ÿr4B-€x ZˆWo‘¥”D#Íj• +]H•„ó©31iÐÂZáI }ÕüË4±ÉtÇôS ÐÈ—‚¹=™Ä÷# V’*—/OðÞ÷þ¿(—™þÕ¿ú;˜N‹+!øÓÓ5\¸pŠ­­¯`w7ƾ°§;(—[1¸…U®áì$ýÁ˜Øá>>qvY V4Üu`9.÷aè8sGúÚÝýÌÏá‚Ã@êwÌ^B[˜‡çaï±s)8eÁ˜òRçÔ”_«k9tàV3'(º„h²beS“] œ2¯AvR4t¢£†V’Íl¦38Ñï0øPÕ1±C7ÉRÏ!õôõ®ÃÑ8Òïk9pƒ­9r< çØÞ=8èø—^GAÏ 4j`×£×lP¹Ý " À×ôs¡3Æ{9x:UÔÏ<¨Ž×¬Ñ¨q;ÚQ¹íD¨6^Єª¬‰AG?ó‚ã­±©É¦A¿*š˜ Øœ‘î·œ ¾jkO?¨ÏLOáQ‰ŠX²œ:ã¾­×;Ök5¹Úæ=cÑVYÞò=©LÇxÓá|%¨ß ‘ à‹¯ëƒ±¢Mu*ÉíbØÍó¿NÂÀ÷T³é `4¯˜zZ‘o:>{êD]Rè{yPm…ïÿo€à­Ài<ÿÇ@ò;ÀL¥¸¥º†¸³Fà3Ý)€¿õÃÀcO‡‡Àÿ ðLǺ±ì±ñ8€sO{(–Q¾þi೿ *Fr­ïRï™>êRu0×Ç#YÓ´©Sj·P&·$÷´¿¨w@W¿ ^Í=Ëç­†3ÑñhKB÷Â:Ɉé5Î’…\ùË[<ËM#7¢ÇÝm¯{}SîžgÁ­³“XЪ+a¯YÕØóx……7 “~mµ$˜;>^‘œ}fæs̳ Y©t»ÁI`:…Ǩ¤)–Í&æÍ&|ÏŽÁÁlêtàe–¾€… àIÂó}¤D•JyeÛ‚Wá]0–Kq¤¶ê>QÎÓN…ÀgŠEqy6’º¨Q”Ë­ú¾TC+SÀ(’ß÷%hUɊ܆â#Á¡ÓQª@%|ÓÞ1Þså9¬oŽÏkøèßOߺ ÕϽºJÁg"­Z©ÈñEJ„$î»+ã¹N‡W*^¦žäô‹…(BaoQ.Ëq&9îxœ'³ãøX޵\ D©ÛÍm̳L>gp(ë" ©KŸ^Ïdc%Éu-I:ìü,¹o‘í5²|’äŠ_‚BøxÕ¥™ÏÅÐHéa(‘f“qñ"áÆ º]¹"‰Ùá!ðHxä1`:nß67)‹'Ï q 4êÀ¹ËÀ­¥ ‚90ÇÊËYkˆdêÆ£Y!ݦ PÞ‘Ï µ¡rè.%ÐOgÀa&*A<Wf!!øzïM2yB”§Rí&Œêºx¤ŒÏ€b•@ 1Ú{R©ÏŽiAü#‚šœcRΚ@”í}éÒK"‡ìÇ@ö ÁoIg£ 9½î „¦ÀfwZ ˜ÝNÚŒfEÀô(N¥ï€øLnëæUwfC8“pT¨Ï(¸J˜ÌÅ›&šHL²”&@:§îlÀH§@¶PJbÛfdEé²ð ¡Ô`x^,€åM ݲm§/]·j)! €å±ì 1É„QØ$Ô÷¤²GÀ²,I3Àꨜ(Ü€2‘£M{úH $¬¨&!§ûU'Ÿ2Ò&%úüM€°’;!Q,;E±Ìˆ'„IÀÕÔº …}è_óîîüáþ$w8w,e£ûo¿ÿàìãá‡?‹w¾ó"ž~ú"ç†]ÝU“‘ªœeÇ©F[/|¡ÊCs Mœ&9A€]φ‰fê…´ô´f%;à tX )¡B‰\ãXç­é`5%[Ó`1tv¾"RVC2 ²Gú~û5=ÄPwè5Î9·)DwœªþÉ=¸çpN´ú¾ÍPŽ}X82k߯åPaaEu¶ÎÈL±&O;Pï…È!8[уÀ¾ºÎSÎòìkÓR¸RKÏÕ"’:眒åŠT–˜õ&mWÇʪŽîGh2”$ tK>§z¨”åæ‚U‘Zq"rëØ÷TåjèÈgN¹÷õY§œ/’Z—GeYMå̺5oRøS¤IC[ѦÓ͸í\sQ#D“¿MTz×35MúêŸ×åñ²® REÇîª̱󈲺ÁêU1Z!|]ª €F€~0žƒ¿ô1á?dª~n'ÍE™uήè2:¨>&¥É¥y¨&|Z¡CÇ3#Áªž£ d®i¢”Ý›Xø¾áåÊP$«aÝ_"p›º”™áDªV˃X 娽ãæM²Ê>Çð³Œç¥2q¤VYP©P „¥ÏšM¤DDÅ"c0 à´Pe…ã±U´Ù/•(+•JàJ\( Ê2 ïÜ1HWž,T*¬\‡Ü„Í®*¹¬£qr"A°À˜„§ÑlJiUqfYt"AË+ó¼ÑHü,8_안f0< XÆ)Š­ ®l$ü­oû*=ºqi þâá;éã׿£O(dGÈü˜²W·»‚ä­DZ-I´…°p ÝšÝ]`:UÒB¤SKš´œ ¶ÓÝ”µ@a?c¼£kÒÉï^ÖZŒF…ÐÝ‚60‹€ríÍ.°2Z!am(t~JŽ~F :p6u¢ú9F˜S`r T护ðy“QˆŦHés™Kjíu‘¨ Ý‹Á;aøa©¹,– `VJ!c“ ñ˜{@(ùï+¹xPá]$T| OÔ׫ 狘ЊoC›€Á‰åp¥²CŒîékm ¾¡p›€óªù¾’>åDï¹A^ÔÑ815–Äd¨;æ9æ°«xõ²z.§^×1q*õžÓ³¿Ü„Ï•MUò=æH ”4žén;Ñݲ츂™/Ñ#zê”ê :æ9Äø¾¾/ÔÏd¼5 Xü/ºl²r2 Â#ÁHù åAjѶ:ð uç\ëNWÉdfÖÜVNKWÏ7Ô&uäL:–ä©EË '÷$CΣo2® ÜÔ9­88²þß81÷+&Rîô><§Ý#~/õ'!Ywôk”w˜,Ñ3Ï”¹þÎÖrY¿·§ï¿ìàyzzþ(÷‹07¶‘&…Z°@ööô~H5Á¯8%ü¥rƒÈÔŸ8UX×$"Ôq3Gzƒ´UïÖ…NÛ€5I3o èù^U¯9åºc½¦3cÀM½/o;Ø&è5—tM.V¥ïà °ó¤UjŽîþÝcëߨ‚ýÉ‹`tCNV!6©á›æ¨¤b‡(륭ék»½åmà‡>ê•ÁÇ×g~´=“ ú‚JS* íˆè#íëmVV½9@þ)à¡GÁ×ßøàx!ÛÃz¨U€G€æ.ø‰AËm`‘/~üå?í_—ã>¤mó«RýgMŒ(M#•ÐMÖ¦m)·$QEªW~ÛÛ–û•ß-…°é{Õòx¥¢äÜl4ÒnM¨IÃY®ý@Cí¨H ófÕô|MJ÷H“‹E®q÷0šÃC ì G ZÒ.c4#àMÅOÅ×b<ÆS–ý³.û`R&¬µ2 akÝaP:%Ô«ŒÉXâ°0TU¢"¥Gï˜P2–¡Ñf €Înˆƒ5EºŒ‘ ïHb¶Ua´/àQ Äe qžÔã>KŒ·”ó¤_By¼,;Œø¦8÷zk²¹S™àµÙB‚K´E³Ÿs5˜¥šTU•>CnðVQê©æB¬Çô–@Q•Ô  »¦þk„p 3Fe ¨œHR4ï0Ø‚=Q| ¦ÒåÏX• ñD`jä¨È—@˜‰ß·”à2é F0$°Ï˜„Á#°Té°Þýî§áû>ùÉoÖÀo©ÕTëù{,øsŸ»ˆûïÿzòÉOð?ø'øßøùu#1"®’HÉ1£[’•‡eÙЪ@0FÄ¥®ÍÈ °H«íSÎ!#‘›]3? ­\4°)lä†zsxÊ%¨jåÖ—ñÅM%ÊÆZµr=Ñ*°™íÄwTŸJZùõ”Pì¤G+éæÜ]S‚®¬™±IµÃÒ'¹¹#5B«;ÊP1ç CýüÈàEz]GŽ™aǸ)š¤8‡c%l ÚQbíÞXå;QÍ6K;¸~“ˆ²Ü `) ‡®t5ΜRhE“À¢Ó1ƒ’ÆÛ$„æçZ˜ „=%ªÃó$óØ!`‹ž5ÒdÃàK¬kj®D÷’rc žf3hͼÛ:¾‡z^cM»úl`=ÿL×W‹sÈQS×ú4À_j÷¢¯kûœr(nès£CÒy8á¼[5UÈSĹÊSYMóì{"ýîsšd·â179†%z¿èØ<˹·Ö8Ð{õXIõSÆx›d]Å|A}T:z/œÿ o©a Wd8uæÂo@Þå¯Cä}½dâÞc™Ù^¦6œlж#¶§HDvü/8Ԥ„ãö|ðÛ~Ø{30X‚Ÿý=€>¾OUÈ_v´–¸£¯/E‘”ÀÎ?ú“À#/€çŸ^xêàþKàò.°¶„%P;ßÇ_žùøÖ—AsQYÂ;mÇÇ?¯ŠPªìÌUéd±À»ø €ŽÆÄr9RyLòyË%ß<ü­Àk×Àw>%Ó;aðŽÞzÇ÷´#QQ;(õ„Eâ4IáN¬jP'R`k:k27ÈíyxKÇýDƈgyå/¯ fV·jyÝ‚néjHù$ %@—DD*ÒbjÇ+÷å(’@=Š$Ø4Ât»Íð<©l·Zì]¾ ?Ëx1‹¯ :Y†j±(‚lÅ"+œEá8†¿\2W«(”ËðÒ”½(B|r‚rÁ C^4›«`saŸ’8«ÙšÓ‡‡’$ P0qÆb¿Õ•JDžÇËý}Q“’ʺTÄû}Æk¯éÞHÒÐíÛÛ¬jI2^Å"ãø˜0ƒ66ÀgcFÀ«x\íïãÉ·žaï\Jß¿äR#Cÿ”ùøUÿϧø™h›ÒIÔ^³¸ÅRÆ|{[¥QCé,”ËBˆ^[BóxljURÍ.—ÅÄïø˜²%×¼\ʼ% c>—NF«ExùeïùœQ*1ŽŽ$i:>í ÈU—ŠEàòeÆá¡óÓ©\óÞž J—AÆ:Šä{:ID'^ÁêÄ0OÎK$i%!¨VYÕ¢r·uKØÊe`6#Ä1+WD>cNáÒ}c•ž•$âøØ`d2ƒH×ë|Ÿ00.]f4Ôün©³ö„1£TX×Ú#¬3¦KBwÉ(Uƒ3ÂÔ—±ó&@½Æ¨¦²®Ú`|‡Ði3ŠkŒ³‘`í§Æ$%Œ2 õñ ࣪È×y˜Ôn3fcÁýÏ+„y;ÃZƒŽË[@Ö•2E`rÌ (,i‰PôZ‹¤gê eP'CºO𠲑ð3 "F³„BµÈðÊ„(N,k°DªŒÍ#‰ë› j¸¤EFa“AA ¶ 熌zÊ5€é ÀK¥Z¶6æ!ãê 03’šrnè&#»Áˆ+@Ú²«¯—!Û$$ uÎ:IA¢õ˜%ðË´‚XÓŠè"“׊J”Y˜Î>çΊq†·µ;Ûü §´RQ„0R±€ 3B ŒòmF’‰—·i•à¯Âð ³”–($È RÍç¢4C|&Uü`KÈð i@ºÔkfó}` ä'ž¸JçÏ¿Ê_úÒûéé§0S’FÃQ"*ªaÛûØ·âÂ…—ù]ïú8=ýô.¿öÚã ²àÖÌå…™ÌH‚ع&¡}KÐ^á\ú²¬ã^ã<J’Ñ#ÁxšôªžGè&œû;T¨©’U|Çàíh0VѵÐÓ$¡¤×s¤(™{øTA¬K—h(.áPO&Ño~Dê>¤ ±®êCæRNÚðlf2V%Îø«zͧú=_ÕµgþU%*ë5·uœgœWïëÚAŠY”¢, Hà6S èkºþ •² ™Bæ|·7É.òqß#¹_N,Ñùì²§©*FS Rw!f4š<£èðVÊ:ÿg å[8êa뚌4i4ï çÀð‘&»eUVª: ‡)° õÜú‡‡Pù\IŒä¾¾.{ñÁ­Ôó9amM dáȿ޺%ãlt»ÒéH@Æ, %ñ1—øÅB~ßíÒʘðôÔ|)hEÀ´Y»PhÆlf ^»#497FÖª$2Ó)­œÇ'‘Ãâ;pr"]ƒ»BõJXµ"!(æÜ£bAœº«-™š¯ú=á-ê„v ØØï.Ê31Ï[ë‹Pa½"†qJ˜û@V¼9!.‹œj’I…˜ y~]*s>€Z”ï¼#BK7qJÄ:ªaBðæŒ°J8¿®REŸDöx:ÖBÂŒèЪ ÁútÔ¦„f T=ÂÑ@Œï(Gî˜0Í€Y‹PÝJ} ^"°ôÊb\7]†CÀïÕ°(&D‡²w¦ç •¸ñpâ– Àof×ø†ò*b€cÊ!-·µÂiu3pE¶># @öt.;’¯¦”ÓÒj¾aýŒ«ßÒÊ€ú éç‡ÒÎÊz.î=ÍÀ³Žœf° „C‘Úå1IYç"@z¡O`5BË<)Åe}Â2’À} T!ÕÐÄ,SWÕr­Túú¾µZ¾ÿû?Ù¬Cñ‚9SùPÖ.„™¸•3ôûEúÏÿù;ñc?öoðÃ?ü'ôK¿ôF¬ü#ZgZº*õZUõµ{PV*W;Òªÿ*]Ž åAò\¡7žC¬­8Jøsʶ¶Îo¬•â½æ…œæ”´M”+²¦ëâXƒ¨åçPnlVÐÎÄŒr/Ž ]7}G”þ1…²ŒÛ¿Tõ rƒ9“ÝÖs[Z÷ÇØ¢ÚÙ1!ú¢&lçIà™Â˜Êšü,µ RÕŽDCU–=VMØ•÷å2«C§Ëë8¦š®3pG¿Ë"šþÞ 4É=’9P«H+ê×X‘ùD漫Âý7;z–žª‘™í4ÔôÚäkÚÆyC!@Úéó@Ê!Tº_b[“+§–tÌKúÙ¢&dFü¿¤óó¢Fxúÿ¥£”ÖVUK¿ã9G°àœ^ß™ŽÕÊ QŸW¹ƒJñÎVÒ5º§ï½I9 qIÒeð”xoRÁ‰>ïJ 3׺M=7ÈÑÕÏT4Y‹tžt½Ûù™hésÓø'æ…ñWtò~òö×ýC"Q@ì;Ö‚v&vô‘9ï œS޵&X4€ïú g¯¯ýk 6“¡yà›ê#QWºÊ€ß ÐçµsQ•î.\~ð'€Ý*ðÅàÓ¿ Ôb`z¸õ20¸|õ:pú"øÑx6BÅ‘€5ÚÐP¡XÇÂf+¯Qîh(~Ký'Ju‘ÓGzÌuÑû€o{¯Ü&7> ÜxÆiÔ;üŠ@»$Û Š4Ön†v|0“1§‰ƒÆ» ËÿjÞ9Y‘ËI»JᢂC×2;žQÛ\®]E(yQ©J¸Òê}‹…i÷šòyïr2ªUy¿ø`À‹cöæs,–K!—JÀæ&³’å’g+øR¹L+öÓSÐ`ŸA"iµünI½.*T¾Ï4")¾~]¿F˜T®Z$¤sáHQÄÿë?úGü=O=Eÿ˯ü þüþo~â üoÿðâg~þçñÓ?þãr&szt”É1‹ÒOE޳Tðw~¥Vˆµßrß‹¸|nÄfJÓy†ýh/|¹‹×ŽKxÍؽl%Œþ)!^-Uk )÷ÙL$fíšD‰W^!æanÙY–;Klj1™/åâE!kO§’\´Z’$X€¾¾¼úª¨=™àl–› jÒ‡ÉD ñ·Èå]í;E&6ð‡CÆ|®qnØW©HbÚëaÕ‹¢\ÌUâJÓܟÜÅMvW'³M IDATø5òoûDzÖ*•\’לȗQ©H§Ç W¥"c2$42¦§GÀÆy`û6<÷Ü—ñè£/àGô?âŸÿó÷ƒ¨æ¾îˆ¡ŽÿÒ±yÍ Ã­ª•Ò‚xC'yð¸Æ–ŽÿšuTÞÒÑîî#Åi|›/ã xš¬«g‡)/õ<¨PWö¶£p©Xá(‰Â£ªÎ¾¦ß{ 9yü¼~Þ89Fl>QHO©l/(—(5·å3KTtgŽƲDÞ•(RngÆw[:Öc 4}SøÑ± ‘Wï<=µÍÙ ïè÷…º¶Sbf…¦¨Uwî .q·èo¬ÉN¢÷á Z×t^û¡=rL Ú-Y*¬Ë#I,L¢8p~Zi:Ó¿FÖŸê÷[²´¦Ç½¡A¶Ü tlº:ÿ2 eëˆl;*U_ÖîÑ;”Sq¤ïïèw458SƒuÕ.9Êdc=‡–uµ›°¡mOŸVØ(Gk%;¼à3º¶ìXs㇨L­uÖB§;ÆÇ,žXgSª#w\OZh¸6€}Ó+Ž4éz©ùvòþ«HÎjRAÆ9§ªC$Ô•1^S«ö¶5˜w`_—ø©.#é>à@×@X¹ÖÏý*àÅr;^×-a©ÊIG:DïðIE°*ÍŠv/ÿíOçÊÀ‹¯_þgb0;0ŸÏ}xá+ÀÙ>ðpì'R½o:^ŠEÆ…æë‘ù¦¦\U1ÁªÀ¦È”‘·š5Ó÷úXYØü!àí(.Oxù÷dké)¯ï(€_v”ÁÇ:†³¼—åM7šêíb·¡Ù´ÌÚ€ï(„WÅÀ‚žçI=ÅHÛõ:­$@ÓT,1ãUça±À ÷n Jæ•`øx“¢µãZRb Ã$AÂŒ,¤=¡I„( ííIÇÂó¤ºìû«ÄÆ ø¾âÆŠ²V Yµ o¹DÐïÃ{ñEÐÁ¼,C<ÓÄó:dAiäªCÝ®×äKã…(Âÿþ³?KŸúüçñ‹ÿøc^¯ãÚõëôÂÙ>øž÷๫WqxçN¿iµr¿Î@ÅH‚Ûƒ|ËC‡ø¡'÷ñžÇ¯áB»‡J%Åá Fû··ðÅgª¸Æ;ðï{»ç}´G8»zF”fÀƶ¿aò²œ¤]QS¼ím ‚-¸¹\Z%Šæñ`†"ûK+©Þ$C»ÉDþJ.Áöp˜K»ž;'¯¥©È ‡B†®TdÜòÂÙY¾F#9/ñ!ììȺ‘.RNž'’îI³)ó”$9¬Ë÷å3’PHbð§|½’$š÷JNü–D‰Gú\ÑÌŒöl¼â˜øB¸],¤->,Òõ$ܸ gÀr$°,›{Àùs@· l¬‰Ät&r å2кXÔ¯‡§*Õ:H’ÐòðºÈÌN‚Éo·EÚ4³0N€FUdI³%!€eˆ‡@§œ õ¥XÞ$ 1ê«ø„ÉØŸ“¡zF4€IXÜ"” â0‹€²*Ç$´AH§ú” E))ìÈØx»à:0žGcà`t @³6PÖ ëNÆâÿÕ€ãàäˆú@i]ÆÙ:•ÍtÍqÝ­Q4e”ãä'ŠSf}ÒA Åz<)¯0ÎõiÙ½§’n˜õ+ú¤´ò]”§¨?Ò¡Cô­È¼f¶cÄN\q*õFzNôø‰È¤„£BkBÎÏ1Loë<5ÍDòÒÜÔQŒ™ÇÀédXà_ sç2|àŸÀx\ÿûw?†8>1Ò(å;ž•þ ºbäÐ/¼ðžxâ*­­=8ÞÁµkm NÊí1‰SG€ÞÔ‘Šè)/IšÚM¤cqvOðgþ¬jl×S¹Gd¿£ß×Ö±©égv´Jër.:ç³p¸-SîÑ5enÓ1åAò%äFq>åI$ën;q®i[»':çeGBôEGÙJ“GLœº¤q[—%ý¹t¼5X¿£ƒ¼ÓS |oµ–-Q^è=b¶Æ©ã{P¦Ü»­ß]Õk±ò㉆ ¯9%S#Ç©û€rY݉§å}G¦Ö”•¶_Ž==—‘v•B'¡‰ ›»SG Ààn½Æó™ |ëŽ]EÏoß!×Ǻ^6ôÏ,§\©O¹Ì°q_*”{kÌ)—Š­:ÑWE#C³@>Òqn8„î²®[#äÉó”_«Ý÷Г$ºvÍvPÍ¡|hòÓ”ó‰ôñ(÷±Ï´ôõ©~þ’ÓµZ˜x€v4^B€ÿŸþxŽž@æÔz §¾éˆ©èp…HqþˆáT•‹ì½=òþ–LKËñÀ0‹–…c@÷fæ(õoÛ>ücÀnxå:ðì¿NÒ|úBçv{“ 6;›ó=5M„bÇ|ÐT Úº Oôwçµ¾²T‚¶ émi·ã­Þú„0Àû×€ùuY¢‡ú}cÇBç‚.ßkúšÑïìñjšæ{aKkA½ä<®ŠÎòX8š Ù=„‹Œ ¾‡–3™˜:”¼Õ:æuWÄ¥ò¦wëˆrU¢»z,yÓ\¿;µ„#ËPÌ2,OO±´ uwW~noK [«¥ ¾3üÑÇ ý}P¿ò}pJÂÑíÂ#Bf•ïéTß—`oc#7tâºpF,³ ?ôÓ?ÍáMoÑh„‘Ô¦S­ˆ0žM€,gEp¡LçØlöñ¶‡ŽñžwõpñR†JÝÄZ¸9ê`p2CÝï#ØóðÀ;j¨Ÿg޾DÉdÅZ€ƒ‹uÌ/Ыó¾p«žb: €RxàhwÇÀ|TÊÆIÈåo÷öd®¬Û°µ%IAšÊ¿mîvw/}I>ÛéHP玎f^wã†t% f•$ä7›’¸˜Ÿ…ñgz%.à®`§#]"K`M…KøÒU IjÎÎòÎË|žËÔÚ›Lò„úh®‘£q3âØÄrx•u›Lu*Žs©àRYÔËC`sK¾ãÖ°ÞaÌ$¾K 2ýææ>Pß®lŠ|kY=[N'rÓ6.IdV¤b:bxSB%’X<# w Tk@¶TŠâ3ŠøaÌÂ+¿ ÄgŒ>ÍštKÖJÀú.p8¢ñ}×^ dùŠ<1RÉ×d&2á•ÄÝšÀ4^»\¼$’¹¡viZ'ò09‹eÌðN í 鶤,ØÓôÒ6îÇ@¸ ¬û@³¤JgM`{8ºœ½*»AaS¼bµz"ÃÛ‹B,;NU6s\€Œ¼¡Oܯ8$U«ÞÖŸ9•úTŸÎ;f2¥¿I;!÷9àƒ…4nxd öÙ`›úŸ8j;mÇÿ¡à˜Å±žs x]ñrbK0<')m;Iºï°Nm¬¶ôœ¬C`ó5Õ¿–d›@ÿí4,œç€uqšº.¶õšŽõûŒ‹´æ(‘­éØÞÖÈó‚ÎóÈ1çk8E FNâ6ƒ>ëXuœ{q:>3 _“Bnj´Yp¼:Ì×âÌQ’jéXÕºJz˜¨‘ÓÇßÊžS|YCî{3Ôòþ®Î»<ãÞˆÈMo õzDï×UŠ"UëNÿ—”¬M+Š”Äm]ŽD»¾Ê¢ÎóFi€Ì6†§AYxO¶CV* e™ñ¡ž‡Q³Öv§~To/ß>÷§ ðH: HU¶¨U-æ¥Ó)Øq_JÒ¦‘~×E½KE;5 À—´›á)¡úŽlYUiú¶=ñxvúí_Ïî€6<õu››¨ ÖƒáÞn‘r9¶U ’TmJ‘€|¬<‹KºätnÈÙ‚"ñè mLs9oŽ­Ì ¿¦ZXI5ËD)Jà?„4ÍÀL¯#&@oð+? M^ ÇaˆLMØh¹¤V¢ßh »XXÔÞ£Ó‘ª{³ Šct®^Å´×ãÆÙ³ÒZ >¸RaîtˆU†¶˜$˜xz£Q.gÚhH ;™¹™ÙL… -!Q×ëR•_.3 ‡Þ¿ùÍßäùÉ1ýwûõI „­ma2`¤½í_¾ã›Îݤ' ÑJàùàtµùö¸J"ÌÒP¯S±ÀhЄCŠi–\@F~–pèEHÓ”Â0™µp2iásƒ.M÷è¥éÜô¯Ó!àŒÁ!¡äÕ2#š+ĨD«dj2E¤FƒÐj ,©R‘DñÖ-¬x&Ï{í¡VËÐï{˜LÕª8z XÇwwE©é«_•ñ2ߊãcR¾…(t‰;¶_Ü´Jìf3I¡Ñ`5ï“NÙx,I@©$‰ŸÍŸï‹³z™A";µ´êž™r™Aüˆh%ak¬ ÈùI""…‚(z‡¾+v»âjÝZ—  ÖbTÛ„Ég@­ 4ê$è_y+ªˆUÒëîõ“}qdæHÆŒfc:&”UIËÐh§‡Œ³!ñ%\ÆÀ¨ÇÈX’úl¡Ê\P­.PoËPéH"2NB`è’:£¤N­³ô?Ó¨• É0·PÅ¡|À¿ÈX¼ •ðç™a«ŸÔÍøªBM|GÉæŒóÀÜ‚“®KGÃ]Î1ÈVºI…ËàEªª·tUY æÜ¨MÕœÀ†…WÒ¬¯ÕÇà—•€o}¹ïAÕ­Tö\UV$q2HW ÏWsÅ¡€w:3üÌÏ|ËeˆŸû¹ÿý~…€ë,ã{¯ñœ*j¨äÐ"åàÚ5"zòÉñÁþ{d™~ôGðÌ3b…¢©VzÍÌìqΡ ‚´©ZꘟͭškU^½Ò뜱ì›É›M‡êðÔÊôçÕo‹&ZJj%ŪGêý‘êõ•Õç¡B9Üi ÒÀ¨:¶3êpnb6Õêµ%`Ù…û$‰ÂÃ:¶ûx*9×a£Êy°¸}-87ç3N…•[c—š&N™ÎS‘¯èÙZPÎC¦ëÑ@éÊ»U¬c˜êùE:ïåI‰§óÒÑspî‘ÜgSMˆ:Ú¥š™‚Ó¹(êXvÓÀ¥^³§÷ÃÊ5œòróÒòv‹€‹œóªXù‘£Õà<¹£ãÛP.LA×jHŽŸƒ’ü­²ßÔDaGÏíŒsƒ‘úˆ˜*Ú5ˆ„«§Ï3§sy“¥;ÑR²öåþ1-Uô:§ã3ràWz¿ð_Õ‡cÎÀ9®éÿïWXÜmåXÜb þÍx ©\ŽS…†ŒjWy3ßÍcRPþJ©«dð+Ê¥ƒcSgÓgߟpð5‰72Ã{Ä÷HE±à÷YÑb\P²ð‰ò çÂͬ¹!yNN®y6„ ªó}Êe€æé–Kek¦Ò¯'àÑÿH‹À³7À_øe J%ð¶ãjGd•ô>r|›ŸH÷­ÖtKÿv¶€_S~Éšþ£#éTRt¾ ~ÿ‡€Ç.ŠLýüàÙ™\ÛŒs “W•GªâÔPõUý¶cÍ1½fUyfkæé6‡žÎÕ"ß®ØPyæ™ANÝ$³_B~£µ$òÓŒçr~}5Åwý4gæÕº´Æjf¿÷–{K­®UGÊ‘ ÊK"7{ ãS#ƹ«Dª'ÇQnJÉêd$ŠŸ·Íghú–u®HÑTƦ¨þ'VuûˆŠD®lÉުњZ G —R'.Stw4iiH]ý&&Úñ3ÀI4W¤«£k°!sx$sÞ¤Bvufu_6eŒŽKB‘ O@ÝÈ«¦àt¬¨"•gLá>¹Tø=SŒå)I(º¦èiR»>ge>·$2lÉú¸)×~Åð5ž’ë…Ó“®«èíYŽLÖçñ5D–ܲÂ]¾5%1Ñ É— ß·øfGVÂ|$ÇÒî˾&Úe-UÕS¨iM»¨rý*§¬|˜±Ñ§ú&l=’·Z«Q¤K°j5eÜb*M…_Ÿ*lebùÿÌ‚í8Ö5ÖÏ\+0>eYÛV2怽-–Í_xO|hÕ`¶n‚žù÷ dü* d{Q$ߊeù#z FLÿÈ-‚uÚãÎÚ`4!:✅ Ù”Jpâ9Èó`ÚmƒÃCãÈÕÊÍ ©·^Ç2U>F­V8NÏçÀÎÖNÁ¿üåßÄÃçÏãÇög1iôñÝ?õ V«Ûx¨¼ƒRàÔf„N5™ N§‡ÔÆë“ \íobobaªØŸnàhè€ÒWú„ÅÑÔ¤y@¦Ö@’xˆ{S„ÙÂäyJž‰à–N‚*!.žjbµ¹Àñj‚zu—×p¦5Âß}èk˜?˜×û'qu¶‚/¾Å¼°x7GUöf+ÀZð]`2c2z­ÆùÖßšMó^¯¸w…”ÕjEÎÁ7ëö÷y,›Íâ3¥wJæsÂÚšv˜ÿ nâyΞꄾ±QÀŸÖÖ H3ŸB¼P–Äm·ùœ¯;f©¥I¢¾5qÔ‚;T"ëð5iÒ¡ßS²9`Ø ¼ÊŽéµÐÀ ‹KÀÉËÀ~˜%@»´À<*% ‰€ƒ;ìlí;Àvìõ8Aª+!ÈQÌIÈ¢ÌbBà• Ý÷3›ÌyØÞ5Iá9M#ƒÐJmB¸Î܉~ÂFw­  ~W€ò.p:æÛ}BÙ+mþ¼_Z>PnÛ7ž„2p÷€ÉWº@߬:ÄE¬LâÞ)¯§Ã9!š%à˜ Œ;ÀМC~#uOáxeȆa—NxÞ.Ð9 1¡Òâë€w†ý! €øP®æ*0)³Á_TÌD”’Zò–¿Âix*oÙcÊ£0¬8Ó³ðÛJôÔª"YÕjð¸ž)òòÆV³¶uuÒÆÕ? ~±.;Xlù T Ð"Pp@V¶ªÊ°‚]}Kë=8 ?2…*‘³fÈXÉ“bõáá‡{æ‘GnÐÍ›O᳟}Lî©o©1%²cé9J û²pü¹*Kèžy挩Õ>ŒïýÞßÅ?ý§¿†Ÿù™Ÿ†1c NQ·”ƒ\ÃɃ‘ :¦Â¸M ¿ ^µc£þ$­ ©TI½+êu!Ãö¸Õ=©H¸HçAáH/ÉnÚ“õ @îÀ"ô’)ˆÓ«r=¶œjÊZ–ébI>_–1 „H^—$tDEÔäX²¯oʱZ(HÙp…~]’[ýÞ!¦ye‹0½«‘ã-É}(?il‘Êk,•¼„üY©‰Œ±BsÊLïZ5g¦ô™É¥ûSµº®p&2+è]•du&ó«¸#IH&Ò™S·íu‰´Jgæ@a`Ò½yP‚nX˜¡®c §¼(#×wJαiùS¨BR†B"yCžÝ“Ò-¹*k¡"çÜ•n׈øz`÷9Võjuo†r»Ò]ÑõT‘ßuï²Å\Zð4_ÆT€ù×¥+1³ÞC‹?´ìŠ嘉¥Èå["©WE,a`u8jò¾€Ú7ÔÁøºän²xúý@‡Õ¢õèã…Bk€´K‘‰Y\€ÜÊEk™“Å!8&[…šº/¬¼~ ÇkËHc™¾ý_g/{[ Ïü¿@’1ì©Ðr Ë«T5ÙŽ€n¢àÿ¯p>jª¢l• ¢/¿?)[‡Ò¥¦Ò¹ˆŠ½h€ÕKÀ?øQ~¥Þ½üÖǘû©ã àç±Ì½Í*»oãË‘;ãsÑŒuU®¥%}‘ä5¼Jþª°\d5`‹"‰Âlñ-ú[ZZËãë0~äÇ2¼â®òC@§g±€Ç4®T˜Eø>ͤÚÃC¸{{„ry–Á¹}X]…O'ŠV« ñY’Ài6;|cFä86êƒQ³»)¡Zå?³hûÌ¿Ø{+^z¸{´†¡YAœÓ1ã®§ ZåcÀí0Ÿ.ažÂlx×§ýƒ60©ŽÌ3´h«M[;Âw´oàÎËx°³…Ç_Ãò×èêànL/ã7wŸÄ®s;•dƒÇ*=Ä E·oa)¡ËìïïsA ëûûÔ«yb³É Õñ÷vv89È2VžŠ"†¶ml°#xžóx÷zL¨w2K%>f­Æ Ã`À¢ˆáyÍ&K‹' ¢ˆÏ©ÄqM|쵨*^J*W˜”r3x-2Œ*M9QWó锫ëª~V­*ƒZ™ûzƒÐ¨ùèÅL²?½Áï߿ܠR⿳Xo‡CØoïÕ8u0)áÖàÎ6àÆ@àr·£Ó60Da1º%`6Þ|Õ§ª.¤R :!«²Œ~)àXc¶Ò]`²Ê=äçèP¡3ZUà˜&5F ]Ù܈Ç5Ûœ»h·/'Oâ„¡^•лO9!Ý IDATLÀë~Å€bB^còùÜò—™G²± ô€í9«&9û¯8- L¤LÍ <—œeèX2¼¦¼ öy}¹«Ì‰ @<#äkž´xº±nX:€w¥ÒÇ‚¹Ì$@êXú€ž…‡öÅÑ©F è-É›_aUM·¤S ¢:–SngÂ;§ã»%ݲš…ë¯H7&±!%§Î,f`…ŠYK Ë:‘û­(ÁqªøÐ‡>K®KøÂžÆtZ’ãhÀQ¶°Ø $«R­¡E¬fܵ1l®÷¹Ï=Š nãÒ¥çð?ñëø…_øNip«Sô¾ªIÐk–Ò·…\«v!¦–RQfIˆ6ä:äÚ¦îÁUhœ-S‰Û±ÌǺ|gKŽ©ÊU§e|‡f¿*×7²ø¬æ9Lp¯4­ºe7Q¸I7¥S¡R®T@”óÞ•ã–ä]ë÷§åûö˜$ÒQ… Xë¬+A¹cu4Æ–,©kÍ5,DY‰öTp<”“¤JmªB4“Ÿ•,µ.-ujr­°¦¹ÀgJ2n«"¯ÊPÖó±#ç©RaÔ§‰Ä1ëy´Ë¥«JØ–À¼Š¢R¯¬ÖŠ$²›’¼Î¬ç£/‰r¡ê(:j±$%‹äIÇJߺÎ2*T—ô»ÒqëSíEV€Ÿ[ ff (‹ø˜$?_³r‹Sed­« úW\bƒ']½#«‹Ò-Èû°cän‘tÆ”k¦×xd<¶´XB¿%%À¿úü/þ ÛòØ‚IÑŒ4“ ÖV‘Jé4f–Ɔ<>Ë.H*ŠHV‹…”zÒdüe7ÃèPΧúËyôO}xø-ÀÑðñŸ:SPPKá7PÀÛ­šÅ‹]/ FKºM‰½8P’:É5éÀ¸ÂÁ8nå¤â€}LTn8ÿVàû¨ä çÿø/¿ŒSÀ—‡ê1ÔR¿Œ?“ókÇå˜<ŽG¢puWÑ™õ3QG¦yÑX%²º"CëѼßçÂ]¨åü˜¿ÞëßÀZúë§AÀªt~c€y ­$(-ˆk5ä• -°Oâ4IÈ9<„—eHëu*g¥iŠ`±€wò$Èu‰F#dÂåðÓó$! à& |×E•J0Õ*ŸÓ¥¡j•«äýCrn߆Ž™rÅE·“âÿý*þý¿ú*ñoÐþsÿȼëò›ôäÂÙVŸÚõ &ô‘S…^Û;/ソzåÝøÕ;Æ/^{ ÏœÀíÉqD.æ&æ`zDìnÎDÖÙöˆaÉËÙzt[„NSàÊ9¡Q(…Óß‚éïb‘¯P?hc¥b£¾‹·‹IÒ$ÏŒÑñFx¢ýžè¼„ÿS§×#ò±êu†W%I¡2•$$ò»â‚î0TKÁØ£¥øS­rrªÐ)ödáϳßJ‘ P)η+–Ñ­Õøï<ÚyÀb züÞ=VÚ.³Ëú=Ÿþ‘H‘–~ìoóù/ž#xܺ\y¡ªÄÜ ·Ä.a>æD3*1°Ù$ܹÅð¦ò:¶È%85.q¤ öç˜mÉP!æáø¢/—Ýäà¥Ôe/¹Z¤NÈㄤw‹Ì2‚ð³áçlü7‰­°º&.à.wؽ¹fh§„E»8É6p¦ ÔNwÞvŸ!$#&²ñà”tP’C‚ãÜ&y€W’!I˜Wg8BX3i>ÊT¼j©4Uh©Ô„# ÂNÈæk,5™²EŠMii?ŠßÈîœ-¿¨þ;U «K@¨¸vUuvÚÜ]q oôyK$Wõó q ¤R»sHià¿'Ç ¨ `IkV$÷Ç­p’*Z-Cßû½„×^{¿÷{ß%Áø° #– ͳ*”v€Hü‡$€©ËMðò˧péÒ.Î{‘ŽñüóÉXjr2³Ô 4 r-Äul:>@ã¹bè^°rS«ã¤|Ý‘÷å÷»kÖ®[ˆË˜8øß’nÉ¡ÜgY“:*ˆä39¾±’×RþQ‚ü¾àëK9)¡"Hɸž±¤YJTêF’… íI…nՈϧ%ÚÔò«ÐëVBñ” 9½n…1ç÷Ék;—9Ó`Ö·ø$ÚU©ËuDr¼ñ«ÐÚ¢&c¼e÷‹ ¾rpN[¼ba6-Iš…u žŒUŠÂ7DÉÌûÌ«TsßPHd-õäܪÜtBÕ¬¬k%I:¢&åZ3W”+ÝÒ}Y_M×ägmy>z26ê_ˆŠgÉ!å°ŸUy–‰!ž¦ ‚´Gò>X³ä•bQô:”ïW-)"5Å;/ב[ÊkC¹}GQt°H±¨€KÚãdwJ3W¿.DêoL4$?6’s“¾b|©ÔgÀ† K˜D“IDZ\bUy›Ôªô;’0,…å(d‚3úE³”y©-$k5*ß‘€ÿíÿxäI˜èøÌ/€.Î Á­žÝù·H ½gAÚ|M¦$Sõ¸§Ç=/Ëh…§Šªl®†™ÜóžºhKòä|¸ô?f_ù=àO¾Ê ó÷Öe}[÷9ôÄ»7‡t&ÞÇÛ‹*Ÿ'Ï€­-ZzShR·±Áˆ»wy®‚€´Ó´€ ¹.ËW*|/¾ÏüŒ3g€çžãÎGF[[Ì£ÉóÂ3ƒˆ“‡ÙÌHƒ“€€“M šM–ÓÕŽó2hynæXÐN5‘ʵ«aî¹cøßê‹¢>-¥Ȉ 3½öùxõ6pîÐ^òÄ`šÇ7õÂK@k0›ÑWãOl²Êí`0&x8¿Ê\˜™¤uB>¢=‘Ñ5@½œ˜°×†%‚SbOb6È ‘¨*Ü à6¤ãp,Ȱ ¬÷ k„l8Ó-©WYR6Ê8ú„$7HZÌ—htÀŸEJôÐ^1ˆ:@%å®ÎóBzƒåyÓ1°³Åe˜Ê0›² wœ¼’Aœõ*¡±ÂÊY pÂâ £ u†¿µ€ *q•Ì]B³l09É< ÿ–ð_C!ÇBìUÒ­¨c rÊsn݈ `ãÊœ\!cî R9žÂ€jN 09DÔ¥M2ŽsB„ˆ©z,øgP¡‘X’êydÁX*TTøµÓ0&¾Ö5 ¬U³%pš’¾ì/ð¶·ÝEš.°·wAæ±URJÔÉ\ª **—5Fʈ ¤+ãDQŒ}ìÃø©ŸJÌåËŸ¡~4Á/ÿò‡ÕB¼FÒeÑ*wbÁÆ\²˜w4­Z»Ý ÅõU$€Xí’´™ÌsOÆëe9ö†üÿq!È¿D|^¨GÉ‚B)ô¤!A¡:ZÏä\U‰:!»AÅ\k¢Y×Z|Z<*ô59Ïž¬›²¬QGDé5I8!Ü€DæÙ±Ö…V­Su'—¤b!)_沩Ð?ép©IY hÚÒç@]¶ÎI0ªÝ”Cü–˜•³Ò¡ÑÎÛBxHÆZKš8T(Uu­¤¶ŒÂØÎ™ÚµŒa%¬5!;Cæ'2œdå©K$´-|Åq4¨ªM-6o,ãÙ’{†<'3*\¯}áFKQn¡²Éâ—²s¾´kµ&sf¨ýwˆ±' éZiG.ÎH&‰×LøMé„âËR–d!0üô¥ó Fˆ ³ŒÒ—®í[(¾§Ó}}WÉÚ^^£t1<áâÄ25M® V3ÅúsñMù`(šy°P %KÒ4(Ðd4áÀÝX–$|ˆ%G“ZQ©gu6ª’WjÓe&‰†òÚ·­&UMàI×äXïÿÇÀïœ ð›? 8C>ÆmÜë+zà[­nÀ‹V4H—"a» è_|õ¸|Wdw)hÈjLH˜>F#ÀÜñ€ü)àá‡øøËOÿíKüº;n XYy¶W¨Ó`fBGSÄëDîÕ†–µ­z’n™É}}ªß1´PÆž5‡®• xVáòëßÜíú†T•ÝcDôÇ…ïº;ŽYJ¶Û@¥‚ra‘ç0ªö£Ø}qa¦S$ŽÔj(Å1Ò$A°¶ÏuîìÀ‹",Ñ|ŽR£4›Xll 9}‹nh·á¯¬`n òÑØÞnl×÷€ñͦ‹w}À§w~ðwžÚÇûßÃ;.oÁóÄF» Ï ´ŸFµu•úû‘´~î±ÿÿò?Nñé/M±S>EÙ¼”qâYÊ÷²» ìíúGü®¬puÿêU wÈA²*6­®rE}2a®ÂhÄîJ—ŸýÁ§Ö\üÐÛ®à=§¿‚Ë'arÏÜ=/ßy+~ûê%¼Òkã•[>^ˆÀçwÏâWn}šÕ6NúW°R_ qËXõîà‰ð|¯„ëý5Bž qƾs§èÄqŸR¸Z«Åœ å+pÀ%|) ¾´µÅÊR‹߇*‡å9A·+Æu%N°Tv6+䃕¡¤kcøó½^!£¬$m5^ÔÿTv¶^/>§´0dÈ“JØÖë¼ÎVW—òÇK¥«Å‚¯y6+Èáµ*Ðl ò]6I;Øã²A¥Ýª>pÔJM`<®½ ÷Õ.pò8È%0sà ›MIºêà±KÀ$öoÉ["ÜH¸S‘ Ü,%,¥'À$ÚÇ€NͪxpD„hÇÀñ÷4Pi³ÑÝõëì½'Ü /sCÀ yn‡=`²æ9P]ªgØÛ"'À´YBv8â×€Àa¹ä­[L1ä†uîD’^Çü¦»ÈýPÎQ³ h+ÿHÇı8ekmÝ %VŸ–Èó–eÜ ‰Ÿ+IŦ0dýÙÅÞ“ãeüéþcÊ|ŽMA:WÙèDÜ c¾ž¼s¦)âê’Éõ·þg5~—ÇjúÖ´ÈïI–¥q !Å¢Xd‘¾—‰„c»°šP‘Å®rÁè+}j5›OK~Xð~8ýmÀ`øíÿ›‘I“¼g5Qù}rŽ7åU¬ÇdZ:õ¬|'“`ÿ¤|ÿ@`Zwùš.ã ~ó¡Ÿ.Ÿá8õ«Ÿž…—ÉCò¹ÓmP‘Âc™Î9@»€yÈ þsItìdLéf«²Ì}Kµ9”{î[¯”Þ})²P ®ÕÑÐå¿„‹¨¤§15™ úz K~š¯“shÒ"žžër]ÃqÈ8ŽYš¦(M&ÈŒA"É ®nw»@ž#8:bWî<‡›$(ƒÙÆêó9܃Ô£¹çaüÀHÊeT‰0¯Õ0 Ãþ2Á;ì!íYÝf1ñcÎ?ÜÆÃ$X_Ž7(ÍL§–Áäs/D‚rÓÂμkWC¼~'6Q¾AópÔ.a/uZ<,±@@”x¬ü€V‹P­hwæèH‚ÈzáXíºœT,ܪ£tà3~”â£ïÞÆcŒàçôã¼¼}Ÿ½yGÓ*f ·KRÂ&z@s8Lñ¿^ø¾ÿòc?ZÃ\{ ëÎëh–RܧOÝx»¹öòÈ€]`ó8P¯±cw­Æ2¼µ-¢^x¯[U¥*N<âX”RàúuÂ|ÎÕÿ›7ù¾VV8¡¹‹¡ò´ÿ^çJ¹ê¹Â„ì‚x¯JTêÈÍ]•Bn¶T*’U£Rçr•Jn4 J¥Â„Ïv6ç$„£.…^é5®­+«Ôv:@T6êÀ`˜ ¿Yeã½Ý}à‘Ç»owv€j¨–€ÃÎÃ*µå à€ýCà D1ðÀq Ú^ºÄ= pí…<Çóƒ Éá²WçJµ"·ÇzÅeHQbóÔàÄ:®tÝžn_g€Yh–Ÿ{¶¦Ì&ƒ®lUÖçaàd™÷¹¾Æ `¸+/™>0ß\Ÿ÷E“ ©r6ÎsWc¾Ç*VÉ*“µQ‚2„<6fä·€Y…“™ÄBH‡<.XÑ#@°”v¤L›@p(Eζ*2IõíœT·G»Í»3Œc`ºÄÌ=ÇÚ §VÐC"ÿÑL¢ %`OTψɑ‰UjÓ²NÝ –ÔeYw¾žÅ'¨XúŠc Û¿i%±õ]_‚P–jcNÑþè5oyË5üëýoqxè[ü P«B’=°îOÑuK«Q•‹‘¯ PÈÂ&ªô–·Ü2?ð¿ßOð±ý0^{í9—Bg¶eDZ,^áÉNf¬NNbùh©ó´E@nY 2&Õ³¡*‘î´#«ú¾°˜—zîcCÕ·êVéN9$™$§j‡[’jºkŠîG*;ö¾Aó­à¯#×Ó@áW‘¡€Û ­² újÌ­ µ'ç=-s=‘MÕ;‡§’´@*ûe‹D?²ðû¹ÜWŒ{¡qd)Sͤ;²°ˆÆ®T·TÜKg#´ø(êÇâYc£f‘êÑ÷…* ¬°ž¹%[£$|ß°ºÈϬ¹ØW8™sÇâfäZö-Ž–‘$E¹-Z²mK&—d,ºÂkÐîÀЬ‹]áA¬K´hPøkìÉœiyøÐ*w«¯Ä9™Ó/Zs£>ëYJ G¤3éÒ¦æ^Oå@iWê1üš}+òÔ²$‰¤ÍÓi(ŸÆ|u]ÓwϦÌ÷Ÿ|ãŒÜšâ’(Õ¬\_©fN¡\MÎ}ZF:¹pìZio±•À6>r18ÏÈz=¹Òtš¸¸ó‘5níÿYàÚ̃í0RÎ )ZmYž%±+ͧ]«òÀÓœ3šëÂC8#‰…/÷ßW¯$U:ä5Õ“ þ8Ì…ã g^>õÿû»œÄhB½!µ^³§²ºŠåmÆê\L¬ŽRʺb=Î öÛ H“DòÊ:økô†]+ã”äpIö^vÏ® ÁóÈRÜáŸ9ޱ0ì…K´ñéßžÇÁ¦ü |I 'br/Cb@iÊÈÂZM¿kŒ›o4àÂ4›&›N A€j˜Ù±c,ðîÜU*ŽÇ¢ÝFZ©À;§RAäyÈ*ñc:nï™|0 5o†'ŸáCßíáý.?0ÀkÔ²>(Ž©Tr°säã(ªãõ+«øÒ+|âK«øÌç¼úòû½,§QÃÁ°VAÖnqÜ?â`¸ßuœAaDW©j5þ]¯ÇNØQ»Í‰]¿_ØÍ&P¯ƒ²˜¤£~ôýwðèƒw‘3üÑ•§ðŸÛÀ‹>Æâà€_^‹ “¬Õ„Ð`42ØÛ"̦xþð,Þ±vT¯ãÅÁCø¹g¿ •_ÇÙ“GtÖÝA”†fR¥¼QêUÚ·¶xNØ›ðÀ«»wóµöû ‰r¾ç îÞ¥¥™_¥Rt ´s5™pÔëñÏ4Ñò¼Â1 ùXDœœ¨³¸þ§²µÚå†|ñˆ(—• R˜íU«Xø-ì2›ÇuÝÂu^IàIÂI˹s|íÃPëðÛn¥ìf@ì•WûoÞò8¶¼ò ?}«NûC£ÑHÓ³rS©¬®òä½m~q–›B¼àV™z@m…“–FÓ \ãgq¾æGÀBÜè±Ö$¼8r zÂhÚ€ðj@ÚÒ&`j„D°Ú&e+êþiÀk~lìg|`ð ÷u gS ¤ÕB•+tXën0É›J@|Nåw9IˆG@•„ïo? ŒP@tùÙÈâ(ÀRJ-‚÷*Ö×CúÎï|³ÙŠù“?ùvÊ2­@f÷aE¶a-©UìÎs«d¥¸ø‰•$å šÐînyÞÆÅ‹¯à‘G®â¥—.`:m€(ÌÌÂGˆæVð;´Jaj‰«2 J¦VrÇ >µ{Ж€{ÛWæbd¾­I†È¾®¡àh‚W˜ÑÁ}ü–š|_ï9“Ÿ+Ï!¶Ã@äo˽{…˺Eèö%Ø–cܵ”™4ØWõ, ¨¾¬ºÏè^ Ï’Ì‘+c>–ñY׫¤kDmIï%”¨jÊØ¹rmY»+3t™´y†•®ö„Ø=ñ)dÎ*-Ï­d:°ÖãÌ*§ê¸Nd}«h,ÏhŒ¥»ZT(*©ÒÒB M3«œ¼/çÍMÁïÑäsLE°…ÂFº'Ы\~çK‡¡ .Z ‰çÏ- «D$eïš%K{³`4/ÏÊRÞ^ÈwG(ÀQÑ5Ô.ÛXü_\*Jõ Sð6Œ%–pCÆNKÔš¼•¨0AÐûseþ¯[r¸ +QLL³»e”äMÖÜ÷ï{‚PW´éR¶^R¾e\+N?³pýT,WÊ$2ág¸ŸCyTÜ*­X‘è&jIçD=êÑ'€ýs€ŽÃyáMЧ~¸5ZªZÑ«äÈñ¸6E@OñcB7zÓÒ”x§×_‘føÜaÊ %’pˆ"fb˜¢ñä·ü' Õ:Ìó/ƒ~õc IÆKØçœ””N4‘„ì®Àžš2âÆMU!ÓËë’êÖk$ð†èÀ´¬Ç1–Þãã<þkæÙXÜ—\:OžÌ£±?Ë2 ´ìVhÀ[$ŒsCBrE[ƒÀ K”–RŸyŽ0M‘& ²8f|9ŸƒP«Á ""d• (Š8àÎsgÎP0ÀxÒá(—0 aZ-Êg3*Ç1™µ5  òJ%¤õ:ß'Ïq€NY–!=Ø'ÜݶÍC+=|ðé}ð;§¸üà‚6ZògC„Ù“©CIPÆ<éõ7Cº¹ßÆïÿé>û—UÜ8à+Ä)Ë8øn·("\½JIa&*W%ŸL ÂÐA–âˆc8ã¡1ƒÄy4¼‹þw¯àÌú.ݹZ¥ÿó o§×Þô)Ù½Lö k]BšqBÃm>G±WDš²ÒȧÅQƒÞyæUœ¨à…Ý~çÓÇ‘§uzòüzôÔ,õñÂø!¤~”L؃ƒYÎéxLh4ø¾vvhé®~pÀ D¹Ì K߇U¤ˆ˜¡Éì|n$\—¹êξêîÍkÅÂxÌ$ñ8VÃÇ"‘ÕD×# /“Ç]—E÷z·DÎG#ÂlÆÉl`ÙÍàÀ˜ïÙ÷Ù„°Ñàq6cüýÆqr™”?š³0wÛC~~G„Å è1Ù:“RÊaÄSBµMˆÖ€¨ì]æcÂÌã=t8&ŒcBF„Ì'”€Bµ,Ê‚(»@¹L0.ÎÙŒ.š²”ïÙ $JH&‚UÀ„Á>¡¿kPjz}&h»­ñš¬Dù”$¶$>—çܦAÖ äD-`´Ô¯p¡wÒ$ä!‰€Y øof Ä5 kî*!ˆ€<ܲAäâÁ@©8†`ê„d›C?¼UB’a˜¶e¯;Cp§@þžÒGo ˆ&sÝ †«$)`FK§iS·H­e †–öüLª|N ù5.çä}ÀÄÄxzCEEWËtZAî ~¼-‡C‚™WuùþNMu ç®nŠ M» †88\FÜž@++S<ýôó4>`þüÏßBl9ï×ú IDAT“Zœò)®QÏQ¬AEîYuñëÄcÚfò÷Ôª*OpãÆY”JMœ?•ž|ro¾ù †ÃŽ3!þnC¢PŽ‘‰ñZÅÂÙkv,äÖ†p48ˉ¯OMò<Ël඘Шè Àš%ÈÖ,lÄÈêõˆÍÜêâó ⪳VáV¢xÀ]*vþ’ã5éfMå~ÙcÕƒ /ÉŒîêu &–)‘{^#fçRU?’kh‹ºTY’`WªÏ+’lu$plPá[P.’¼JL‰äÿçrUºCEW`&8|uòŠ„@<–JU2ÉyFfÒEØ‘y™HÀÉ31ÉÖšÜãTÖ¶G…Q&ä9h§j(k#Њ»ÌFT$Rk¯ÈS¥([ð…CÑ$ë‰Õé+S÷êdî””¡•·aˆð{ßÿ*©¨Wb&\)a¯Š§Îªô;$Á’<[-âÏÝ‘kJ$9™ ì3±’w…Fu¨Püj ß'•gCïGÝÙÛÄIÆŠšIª(Žs9Ï‹v@†rOæþÆßª$•h8ºoo%Ç‚ÚäÅÏ ,•(¡ð$ZE'­OH3Œ,#í³s7VdYô}àÑ÷‚Þû˜ ñ;Ÿþø×AÑ¢PñÞÙVQ.¦®Ñ–ÅãÝÀ{%axIj "óëÿw´ÒaáDMÆ`¸Þ†ëÖÖ3–úF[ÆxXè]P&¤Æ1÷ñ’¥ëQ–ãË#¥;Ž& _—+‘[§ …‹º±?«Ð(­Þ*®ž} ´¢kDчIÒQ¤øy²¼–.Ê”çðò|YÛ÷fXED¾Ìuµ5ÐdÿÔ)òÛm$‡‡Èãð}„¾On·‹y½nʳcè›MiJÓ)¦ó9EDf‘$XôÁù!yžÁ|ðßñm‡è¶ÔôÆ÷R”‚ N©„q^Aj<ÿ¬‡?~q¾ðʾúJƒÔ5 %ÏàÒ%ÂåË„°dppHâÁ¦kwïB’.®È×jlR7›±Ý­[ÜùY[#œ>½ä`{›9£ëlfÄLÏÁS7è£ß³…J#Á¯´ð‹/=…‰ñA³=Bš䱜LØ“‚!DL>8Ъ=“ÉïÜEMqù\õ`Š­Ñy¼´âÍ«]ŸÆ±pª~7gèïÎÖ€dlÝ%´ÛLŠ >D¥Â “¯ µê7o2i|u•–|ˆ$á 2Ñ€Ÿ°ºj0b Eê÷i)<›qBÛns2ç8…R” ‘Ò¤X¥i+•¢K–e|®é”»ó9¾ZUÇ¢KA¤RÅ i«Õ˜œn Ïe­Ær­~h0q‚á–É8Øâ·@ž~‰p8†s ¹ÆüŒÝm Ô’U†Ž¹ PHlذùÜÔguªÁ.iÂûö"e‚wä1Dª7!,R€Ãþ UN8à©ÇÐ&òhÌæÀ4'¤ Í ò€7ï8¾È.ûüU \#8)_»ãM€ a¸c0Înp÷pÀ±\RZ1·ü‡CÀÝå†Û‚.@k@6&$Û¢è~DpZÓàkp‡€#äG'âP ^Uéò=E@¶ ОA°Áï&a¶œ¿ ³ÜªðÒ³ž Œ"*«J2j/Ú— VåN]KÙ¥n@‚rrd6U±*Ë™Å&¬X8gßòÁ8’ bDá´bU>±#?S~BG‚ÑÄÒ¢z^•Gí¢ð!¨c}}ïyÏsxî¹Gñâ‹§©¨Ûæq©/úŸB â’ìSÕð%ðÈ%¸kÊø@‚€®\9‹µµgÏÞÄåËW@äàÆu2& 6Ë- µ‘íY’µ®kñ„tìHµµ_`,P’.cYµ"‘¾¿ë`x‹c¥“ Á³'ÑF(Òœ+V ]ÒëÔÑ/Iò£Êb=K6V»0eI¤†¦ª5¸¯Z­5k‹n[¢ü¡ú}‹»Ñ—$,•¿5øÕ2ãL|wn×Z›G–AáÂ"¦W$ˆ4²FÔ¥y×kb_ÎQ¦‚“´.‘ÉXî÷@®7H™±Àæ®õLØ~®ÕÕRCI‡Š³,ÏëHB_*÷¡\Ç@î9!`Ë*ÐŽO.Ÿ«Éü*f(ª fMîyfA+’Œ–¥»µCE7MákäoK OI¨e)À©TµŽ¿Â‘T 2Ï¡@ÓÔ¦)çî[’Ñ‹%,‘ ß™ÿ‘Ï¥â½Ð°"?rW¨€jå²Vö,Bƒ>kïWiiư쌴åœ[ßÉûëU½É¢9Vƒ“¬ ´$åVg"°¤Rõ–«S©CIÁEÀ-–l]ÖofeàïýðôÛq üÒo>óy6RWôd ×e8TnUk1ÒA Àëò*8/ÿCï5阌å1©XSiÛ´Ô:ò÷ü÷À{ßÏPàÿú‡ ßþdÑx ®ôír cK‰{Ëz½L¬œ˜Ä¤Ï‘e0”¦©#×39Zå_Œ…žŠÆdCѾ8œÃ Š" Ê\—ƒ7…C1”ÉÜïÈ2º‡Hë8 ià§ðé|ç¡ì8ˆ‰` çd? ^8¥ÜV n³ 7Ëà6”Ÿ?d8ä`}>GicƒèÄ Ì«U¸ûûˆq›3£š$x×åËøÔ¿ûwø¹û1üø>ˆÎxŒ?úøïâï«á#ïºcÍš÷ʲ ™¯W0˜—ñ—/8øâ—Kø/_<‰—6q° J²ØÀWŠ8uxì1Âê*C˜O@HNÆcN&ŒaŤõu¿­-þüdt:„‹³g9¹˜N™LÍò­œ¨´ÛòÌàMc|ôWè½\ 7~û³§ð‰ÛO#^m½=Ƹ_¸Pð6šM, ë|ŸE„Á€ ^¨µq’öðè™}awÐÂs‹ 0£Cêß\˜¿À;pÒpùÄ <¾±ƒtáãÆ6WÈ}âM$Ž9q1¢ Ŕح†w® ±„íhÄפiVã ?Iø»{{gG’Jqçyp݂ĭŸI’‚;Á]B¥ÂɆ$2ªèx4›Ü‘(— ¢¨P’âN…vã”wÁkµTNž6޳83O¡U¶vþ„a3ó}æ; @(ò»×®rU¿V&=ÀÙâ-À‘®Cšn“݆Â(Õ"Dî"â¿ÓLÔ’:¼û]î>d !Í íu ù)_@¸FdžGî” <`¾„å®\ûÐË‹ —#’œ%l“—yÈ¡R HÎó›,žòK­´ÉÝì,wtrbуpNx²˜”y\)B¢xî›ã€/}t¯ Œs†ìù'€èe ­ÒÁ?"ä]6­‹züV˧ëo$A¨/UíÜVƒ±}¤Â©ŽØu‘³lɦ3ø× ¼bù14,2²+gjá–ïHÂpd©ã8ò²ÅÉØE,êf¿À½|‡²t\+!™Ê9&–RçÎíÑÛßþ>÷¹wÒÖÖ†ÅkÐJ覨fM-U&å$è%=µ$HUºTƒ'G]vazñÅ 0fO>ù%\¼xÞúÖmL&«ØÙ9nun 8ìZjC™u_©ÔTÀtlï uÝÇ¥éX‰ xI æ¨ÃXäVŸŒõ÷}þTaD®~$ÿ_ Uõ“ UÇ–*ú@ò½c¼ÅRÐÃOïþAÐé àÆè7~øò‹0gØ•f’/vÜ&ñz4o—Ô¸ÕqI^{èÈðd² R³OÅ{;Ôè¼|ΰrôžŸžºÜ>~égžg™Û1ü(`è• ‚Ñ<"}9vX<:´.¿nh[º1Ž…<äÎÄdÂÁìæ&pò$áÄ B’z=®ü_½Ê9ó0 |ÏÁ0¦v7À¿xÏ<ü䤳Ðù•?¾ˆçG—5Ÿp÷.ÏëÉ“,Ó:2TÍq8Qqî–°äë`ÀŸ‰@æÒfyD—/ÍQòr¤é ÏìGÖ Û×Ét:xnxÛU\®ÜÄ…‹cœªàn¿EÓÞÜÀw¹ƒ1rÅ¿Ñ`Ÿ uûîtxŽÕÃÂ÷9É CZº·Ïç…2”ïä9ÃÂ’âqÁ݇8æ€üØ1B¿Ï)ßçd`±àß0*†MõºWnî&9-%rÓ"•GÎ2N2Êe–ÙÕD£Tân”ïs£Óau©8eíáÁ«”ÂÝm`1ç üà+Üs"”Ë„äíp0éRHB3'ä ¨Y ,Æ„ìHg€sÄíëÕ:Áë^‹ÿö ðNò€a ¸s,LÆã8Žxνœÿ˜”« •!Ë ’2!Ýò5fy9‚Õ (áyJE- €¤Lö ò7Ø-Ü©pç&ò´[%L"Â4Ñ‚’ö€8!dàVؽ`:@~KÞwm*T 5ý $¨P­+Š,m*ôùB HTEÆ#ÝJ±w¹ÙÖÆá[$aÕ£ïI±HEM /*¼,B¾ Q˜Ïi‡ÂÞüçRÑuÈÒЧ"ÈTS:DC|÷w¿„Z-¢gžùN³¿_‘ÀP5ërï×äxžEä¾ÃÕKU¬ª¨¯ÝÕaI@í.+²×®mॗ. ÛšÍÍëôðÃ×iccjö÷OÒdâËu;T˜–*üC´²Ý¸Ó&•ø…('‘$¾å)²¥©â¤Ý–ãíË:hƒ«¾e¹çÄâNd`¡…T¤ëÖ¸ûªØeQ+©rä:Ô¤.‘sôˆ×J2ç™TÛ§(ã=‹g1‘à·$]›PŸHöòÌ’å]0“0,iÑœØñ½oypTìa% eí É=G–WÃPþ¿*¦+kgA…öåP’,õ;)ÉÚv”;@¯ÈúV+å Z'Âe8°+°ª©µ¦Í™R‘ÜÎ%aLD½««æƒrÏ "º%cжÈö]*”ôXç%б›S¡ŠåZ^&5´”D®#?Û“qê=b˜[.k6sA4Au,®ÃqÃc¾C…ׇ/°²‘¬›r 3««9•D+”w–:ÍÇÒñQÃA%À¤È‘Zž©zÊP!=•çúP`‡+Òq,[Ð\ÖÒ*€«æ›î`8Eƒ˜”î–ÝkÀv>Ýá ñÂÈ,N`u;`éHL­œ]©luI6Ú-˜~xêïqqð…瀟ÿyеwR© ék[«ø#¹–†¥¨”Égê`‡ìP`I5©-D-jÆTÚ‘Ç`Uˆái¼ý€Ç? Ú,¿õ'ÀúÏ\l•zœi³WÎKÂrK:"Ê£ØÑ\TŽß–q8_‘‹€¹!ùuh5ëVãX©_Úì^X64©•/[P´{Ì)ì £,¸g%ƒK’¬ò&ôã*ë©DnÇaÿ]ÈÆqìù>\ßG¹TBìûÈloVKbã6Vêñ}σÑãln‚àôûðŽCV.#3äûp§SxŽc²á›µ'OâSÿæßà×ñØßyîܹƒiøûø–·¾ïyòCxîkÿA7À<õàF ¾øå€þónàêíײKs–KE º²¼ímÀ[ßÊAék¯o¼Á/±JE»ìUqò$'ê€}û6WÍ•à~ò$ðÈ#ìÛ°·ÇÿõëÀë¯s'juÞÓ§ºkeüä»^ĉGr¼²sÿñÁMl2ØÚâ²aÙ,Æñ• çOöÑ lº¸º×ŰzŒ0–AÑΫÞŸÆSëÛ8ݹ g«xåÕóIBÇœH•£¢ˆÿV9Ø^}3 ¾Þ$Ѥƒ?“¦ÅØ1\‰ù9…[¸vφC(än©6¥Ð'×ÅÒìO×®1´4ÖSžòˆ ³„iA!+ªgK^Q–1Œíð¨ÔZƒ¡8Ó>a6¶á¨Ëf–FÀlDSVKÒnÈÁpê¬ö„,’Ë\ʼÊÁ|šsÒ—¹{¤Dij°¡VDÝiÁÆ~h°›ÏlΉA³Ü-2 €¬øk€×!PÙ ’C0)͸údÜ1˜í¾Ã~)§ÃÝ„ôǸ^@ ÀR:² 8Q¶Þè'\éÔÒ!LY^63ìZå@óRdÓtÀeYäÒ­ÉÇÌõ¨œÊ=`Ü„@ÓÀYd{Ä/9uÌ -Ê®’· ›K¿.oã’U O¨0µª› v]³ Cú= ¶ëù:’sÀRªXùÐJT:ŵ¢ÅRSQ M-<@@×%¼ûÝ/P©”™gžyý~.Á١囡ò-©å‘P³ø ‹¬ªª*eÖN›Éø*ñÜ_BH†Ã2ž}öqìï7éÑGwpêÔ¼ë]FµZ ¯¾úÄa)öÀ‚¦´,9Ð s>× Ž‚È„YK'q®J@äZóªIIË"°+<$¥Âû× zÅRZ±ª¼©…ÕР[Õ§æÄ A+rÌžÌñ ùlÇZŽ7êËïZr îg¬.—JåæTtÑ4À÷:Yð¶”îÕTµ°# VÕƒãEõ}1…ÉEb£ ²`¹~…Ó e>W­.QK>[—¿K–ؾ­‘¹!Ü“†%7 gA“úLÎS·xG†Ç\•ºNRÑRÄEÌ÷ ËE{*ÉyI ˆM¹ö’$\TÈ/§*á+ü •AîZÝ€Ð"ëàÀ¦ü}Zþ~NÞ –É€:™ïiW‰ 'scA¤ºR0Ù³Õç„·Aòý™%`Дd¤©ï=á­bÉKc8™ÌBé¾µwVŠ7¯|ó©@ÝñßntpyXæXhN¡£‘ki¨@تü»/qmj€ xÿ÷€Þ÷÷s—­}à‹Ÿ>ýIž~© QÏâoxBÏ‹Wù–Sb-Ý›²\ÅÈ»XRÌè qáÎe ¬Éñ:—wüpé!`0ýÂÇOþ1ÃWžÕ°ÐŒ ©…Ô;°^ëjV¯^‹Žc×BÞª X³PÒ¢Ž<¶ÃBÛ„ Ç€˜ïå 5·’ ßöº°¸.¹•øÝÓ¡Px“&ŠkgH cEð…¥¢”òâAšb‘eÈ5@T… ß/­¸—J€å9¨Vƒ»¶FØÙgßôŒ}ØÅ;ŠCn»Ò±cð|ìWþž}ù*®L¦ø±ÿ!Àƒ]ÇéÕïÃÆê<{íw1™íak«FÿÃ=ó•223g¹L“uÄŒ'|?LxûÛ VW9xñE…ø&ÞÃX]åª7›Èq}ãߟ’Þ/]â.ÈdÂÆlý>pí'(Ý.®ÙdÌþܧFÅàzÏ+X½ä㹫ñKŸ¬Ó,3@Ýînñ3×íBˆÛ¦1…S·zRS¨=)4«Ý.~®¤pM&4ÁP …fIbÂзz¯ÉN•оXðßæ^hKŸ¹Ê¥¥$ 8®®8ˆ8U ¨œ2¿Õ“˜\Úñ+ì÷àÈÄ8—91cñGb©IÌ!ä wkâKÕ.r`áð÷ÂdJ€»É²¶ñhL´ úgN(ïóŸE²9+~Y¥3÷,nBHVàhII°phA[v0Fðš@¶v\Ew‰›(<"Ë¢$;‘JÐçß'SYIÉÔJŽRË£%A…:WÇ8Z› €‹ 0ø®ïú­âSŸz‡œs ŸUyV­˜,2¼Bp2éêÉ9jV—Ö®¢Ú…$<*¯îÌc¥´»{_þò£(—Sj4†¸ték¸té&ƒ.VQ@TªV•‡TaÀ—{¥¼e§hÅâºÌ³‹ÊËX܇›oIðOž`d‘›U#òPæzƒ àÜu¯PaZèZ8û;Ú”ë».†g- `®²³O'•Ÿ5$p&*¶T.Ù.ÛN:S‘ëÏ%èËH×¾% ÕÜR:²øûtB:@‰@wêVWK«ù*"ŒÌòQcÃ=F‚MyŽTùìú}\ÏZ'›2gU*º ërÜ‘å¶+AþÁ}²»dͧ«|*º±å¹ABÈW‰¾+:öâÄX¾6#‰s—]=9§`RîyvÔè²i]ClAà ¥í–¬XUODWî™úHµJ%‘:°ð}k¼*¹KEäxÕ’¾ÖîShi¹–äÙ"yäV1¤LE¡l½«ŒHæ6ä¯Ñ7MòÎþªqý5‰9…*”þ‚´Ûá[£ HiR éÀ¢ŒdôžËÀ?ü(pá- F|â³ _û5`ûuæd£Ï Žd¬úCU.n ŸÍ¤³±ËCMUIvÔ/ñw0ð’Üæ¬«ððû€w|°Ñ}ùUàg?ºú&pI4&­K} 9{$êPUùwO^k¡@¸J-JEëv„|^’ëNåÞ"‹tÄ¿£øÞ®¡879…IljÄa}¹¥Ò™Jÿ†„qYý- REâÁ>X1 Jqðq ¤);¹a¡ÇÐï))—ƒDZ:/¯¬µ9Yr]`cyƒ²Œ"ʳ ´±::¦SJ[-8kkAT¾}ÉÎ.îî'4 ¶ñcßwNlŽé[ûßð¶‡Wn~¿ÿÙÿ‹>ý…óøƒ/6Ð?ŒlÀ•ñV›“œ~Ÿ+âÇžz 8{–ƒò«W ùÔ `5¥é8q‚»y ŽÙ™z4º]†åt»,gªIÔhÄÕ|öb`¦(âàºZ‚5tj3üÄû^£c—=zöµ³øÕ?jÁ”`£K˜ÌxÃðùœß(â {¿Ïý믄çé´˜Ï6ÖAB—.¹xç[úXÀÇ~¿Ž?ï]D"t;|¼áeNÁÝ…¯uñ-çz´ÚÙÇ ÚÀý àZ&‡iÊúbÁ‰ƒJÐÖëÀá!‰ïË|^t"¡Úl2lLejWW™”>›ñµè: CNÒòœEôgU‘Cu]ZÊÔj"«ÝŒ8Vx_Ñk6 ­C§F#þS.¾$“ ¯ÑV“;Lz=[wÉ”_Î !O/«îLÎJdãÏø{~ 1‚´ë@t‡à6øåptk@9à Âõx|ËR%Ï=VZ""8>Ì€ù6oɈ‡b‘©0Õu7!„cNHÌœß@îÁ”¸sÒÙ҈©Õ˜–L]é˜÷Ö¤TK„$*+@Ü ö¸0.üR¸%‚Ó`N„¹VÐDÏ݈‰î"Ú–ÇÞDåsNJÒ!0’s°,z\PÏçVU8”Íø®C¡.ÝÜ’ (aÓr÷žZ¤Æ>q§d&uKJT›²y÷šƒ{a7*YUCËÕ¨B (—à€¬œâþ}«+S¡BbÒ³pø$ÁYYε‚§ž:Âc½Ž›7ßF_ýê†%Ó¹cuŽ$áÁ}\ êKVPÞÕ„ŒîµÏUó¿ɉ±º"´L², W^9¯~õ!$I O>ù*ž~úYœ:5E—±··n©A©„mhAÏR ú%ˆªJ°k$à̬ªº²°‚Xí¦¨0%›[JJ3ë~TWs(«k2²<(6P8]/6’[*FoH`Q®I»+Šä”sÜJhlâ½âÿ=*:X»2Î SÌÛBÖÎþ}É©þ[}#öPð.n§I…ÊýF–ÏI×­ %YØ“si¢z\޹+]ŽŠÕ=R¹C…ÐÀmY“ žwä=зä“[Äc5²Ô¤rÃÖ¢ä IDATAzŒÂ©{Çöʰ‚ëLþÖûi£H¸#C5„+ãYëBÈ|*¶êò[R>ë(xQºvOHB2°ÔµÔ*zÓJŽväY²Ãš,nË}…òìïËø@oþA‘¿ô4èO>÷P‹SvS†t áÄS¡ÒÛæPÕö¥ŽvÍ5+8Š^qU»+GäµÁW•ìݰpôžŸÝw¯¨Oþñ}ôÏ€ét"OËbM§úJï¨â–ò?l‹XÒÄÄìÌ®gU¶MJõ»úš!ó€T;nêý.dŸO‘:ž Ån²&÷Ÿ:ŠÕD>˜¿}žo˜HN*Å•ŠUŠEÚ³×#$‰ƒKE""Š’ƒ,“+K§ÃuFâXpñ ÊePRV*€Z 3Õ*ei ž™ml€ww™çç)HS„œîîP±ÙÅv0M÷¿)Á}ß¼áÕ?O?ööqlñ{ÑïàúÕ_À|"¦­ÝHÚŒ…9`zF‚ÙÍMáB,/wÝÜ~»›çÏ ¡ß—¿DBÆ.ßï ñ=Ÿ7¥&Bµj¾›j4¤’oä~_ö:„Á <|6Ž ÷`P ^h4À£!x§—èÕ+Wy¦’Ñ#½W!½rY`2BŒ& Œ4%,,H–eÀÑ£ÀÓOK"d$ér™°¶æÈÛ…O’‹ZMÖF¡ ¾޹{KR*IW¢§øójU’ "3Ó£‰‡ŠŒ;M:D4ñÔ¨Õd~ÊeÒ9bÔj49V¯'ÉR¹L¨TD)J83’ŒG…„æcØ'Ä)]ÄÐïˆùÝpDȆÒià±TØ»M („@!$ô÷D±i3VŸ! !‹VtBB/OH@à¾Ã=é¤ §tE^¦AŽÏ€hĈ2!qçHvÁ¬GHµUèŽM]¸Pʈ†„l[8a Œó#`š‘dÙŠ"1¹+D@â c0V kÕ B@Ï„xðH’æ@Ë(ÔPIXÅò9 ¨3¢•%yšàƒSrÕ@ NŒXº'/¸l‹˜âKWÉžF–µ ²ãɯš"‘ñ , <ÒiMá#CÁk*5:ë©Ã<¬Ö ©$©ÞÃŒfj€z8õYÅ¥Ï(~zOqÐ-b“j@á{P U…éÀbó §©_% ÆÉ“M¼âçpùòôÔSGG}àAÆ Š±ª¸òÀ ¶t<†ªÄ±O.‘)ë½$ä즸c ÑЃi˜Vž¿ÏƒÁˆž{n–ö÷hjj„›o>ƒW¾ò9AŸ66æ0-x𤒧œµïñf½Ê}Û«À'tØ©é$ 17ç}÷)DlDܪò˜œÿÆ>]»¾ wÆ:Bmvª'DWï¹ÂR©îëZ.#†×½µasÓ ç3§î6_¥ëùô•Œm q_%˜UZLÎ+‚؉v¯¦¬TW™%lš´mxŸ·²,i³Ž»À-=…€“:g% ^í:ŠžEÓxQºÆc…²Mé¸FÊ?‰É9ÛçÉàͳ¡§ãÜ&§ eÎóösì³­Ú?bé,äžÿ¼>ËMVê^$P5²Ä“„^бÛV‰é‘ÊÔžT•«¡—ä”uX„“¼m«oE[Ÿ·ÛÇh¢:q™ïÄ@ç³¢ÏúòLÆšì×gÍ' =^YE×WìA ËÚm ÕÐu™éœtÍšÚÞžJãžp†£ë|Ö^®Š^ħmµÉnÀݼêyIþËŠÊEàü?÷ðƒ %üÝ—¾‚'¿ú‹xóEas¯üÉ'€ÇŸ’­½¤&u¦Ã‘y^uý÷kèÒõÐ!?Qò!ZÖ¶ïv”€m®Øïzð}÷³1ø+¿ó  Ð•\1óø&Ö´Óºu¼AZh®‘Tól“ ús¦y玳陘ÞÍy5—¶ŒÝ`r&–Ú™K$8õºðPŽöš5‹¢Hçå;ªNE‘qÅ¢Twv¤Z Є¯¡8ãïô onI…UšÅ—A~Ž"`aQ©Pfr¤• Ðl"*•€4¥q¿ XDpé²v<-v.ކC$ÓSøá×·ðÚWíc¡¢³û)üÁgžÂ7Ï6ð‹üMüÖ/} ÷÷oÇåæ>P©‰G‘¨ ÕëÀÝw‹SK°¾µ%AºÝg¹,¿¯×BAªêµšÜÏÞžÀFl6“@ƒ˜I‡GŽué’®ËË ÇjÇŽ¹,¶ðs¯zÕÅ }õ[ÇðÀç§€¸ ,– ycC`VÓÓ"…{pà¤V¥ƒ ‚, âíºÍ ¢ÑGî$Å­K›xEc [»y4Šm<±NÈž½¼þ.ç.>I¡Ý^AÐÃcOUq÷©Ó¸kê›xË­çñÏÌãML¤d;éPÉøtj5`o15%Á¾ñ%L Š™&|Nþ–4±p0°0Þ0I\1Êsþ,v\Y_4áI·CŽ_(H’¦ÎñãÉ0ZûâKQÓ–x¥tv€ñH¹/ê<@ÔY(´µk~(j;:ÛŠuBé´r6ö°ª*™m¥@JƒªÙB[& ´€¬I"oQ¥¦`A¢´)$ÄúàGê “JP0¥@‰JR¶-†{aSmJòïiDtƒ=ÙÅ¢:PÖ>nkbFºLlY ä\H:À¸£Õ¨E6¤$Œ2µ•¾#&8JŽˆi˜è¶·£îh€m"Ý+žÝ&l!ðxæ`,ÀœWa-âZøKC*™Ê¯ÐÝtÕ35ë°:Që‹Ù*·”·5x#e]Û¯ÐäËÓ}¯ƒj|/ƒ;îè=´=˜ã”G–·gÌøU`oë~WïyF×–vÀ'0*Õ€ßúèGñ÷÷(¾ú忦ù¯~§NÁ¹ç?G¾úè'€ç/ºÂ(&ç´Û‘Sˆ‘¢Á&îÓFA\kú0¹æHù 之ÏéòÙÑt¿éQóNî:úÃþs §]Y€ØË»›zŒ?"ƒ*YÓiK¿k[ɶGnUñÊg´é¡w³Ÿ3º.ej^ì]/ãZ3DöÊübk‚HÆJE~oRª&1ëLËDL¥ªU +b©&;£½(‚ÂdœèÒ’H²ŽFïéõ(ØÙA|ì²(BºµJS¢ÕUd½žÀJ% Ѝ:!jö0¦”þñ;wñÊ›Öh¡¸!—ñüö~ãã›xð·þ>÷-üÌOþ8.\¹B_ûÂ\'aqQ’ŠÛo':$õåËÀÁ\ËÖ–$O¥’ƒÍX÷eqQý}Vù7šµ£H*ëƒ$««’\”ËÀò²‰77ù9 ºBo;t?zû#(›Â£_oàBB-–çdÌ/^(O±(ÿÿüóRÅî÷—D«%ЦnWQ¥’s @Ær1¸àÇð Åaƒa„Œ xôqÆV°œ<"0¯fSˆÎI"‰Ñö6P¯í=·3ǯ>Õ¢S3Ûxak†ö9‘c-¥+aFuÓ*­¸«‡^&É‚©Œ™Ÿ¨l9ïKLÌï"Ž1qäîõDQjiI bÕªàOƒÁ—[®Ve¾„_á:6~ýþħeÂi‘äVŽÙéšmÆÞa4_‹vèu0"‰µ†â4Ý×ûC„5 JÇå¤Â° P-™V…z™&”åå6îÁˆ„ ž¯KË:,Ò$Ã=¥y1‡§å¼”IB0Y‰ÍÙœöxIÍáé¶„Ùu Z¾)…Ñ XÔº¢!Õªy2"Œ2 ʱ’1PJ„ˆ¨2Iš†ZJ÷€0' KP²šHÄÂçˆ O„x ”vb@('Œ÷´¿j:ì=}ÁlÉÌ£,!H}n­èMiÇ^õ=ï§=Ï÷Á<BºÖÓ¢ðM E°s€Ö¼@¨ìaÜ÷=öÛ´Ví^ìnªO‰BkÊúÒ6ÈS¨Ç›÷À´V®èß¼ ¬»Båòï~÷|îs÷Ó``涯èUP¼ÃÔ¢:ú.Øô:<榜ƒ(ízR£¤Ú±'YÚò$b:¼ª¯çìƒX__ÀÙ³‹H’)ºå–s8qâ99²ƒá‘$õûs^Ò¶ê]oËÈÆäÅçY=Ͼ'y2ðã©ò‰ÖMýÿ:9Ï“û´¤ÕÌá:†U…ÅĦ«`Þü \+ú½D¿³àx#rp'#%C•JÆçÑ@2Ò·è™ É%:O•à¸;Äîw¬‘ˎΙ=³ä’ξ×e8 çL¿ªÏXÃëÀ,)¿Á¸ÏéX]ñ:@‰ìNþ:šŠÇ…ZÐõÒñ¼VªäduK:þm-Óf*ÜzòÎϦåyÛìêsí(Ùç‰äžf—Ã8M‘Üø&GÊ,Ÿù`ÌÏ Ìg{”Ï#î÷‰æç‘œ:…ìÜ9©d¶ÛÄ£‘ðfgGOïîÐàÜäæCþ±wïÑMÇÖèî[–03ÿoðø¹çð'Ó _0]ÄÑ'ñ?ò#àÁ€>þñ‹‹Œ;îNœ õ: ììÖ×%à\_'4›’@äóh‹òßÙY`~^à<ÛÛ„ÑH RBX6.„|·Õ’ 8”ª¼@§$oµ€cÇ€ü"~`ú[ôöW~8º‚ÇžXÀÇ?™cAò>PRs½.°¬«W…@>KGÂöVKæj{ÛBk¹¦b‘1=ªtë‰ÞôÊ+´ºs…2c4`|qû^ –¤k0 ©}<–àÙg%¨¯7€ˆh´=äÆ\žNÝC#iÑ£•Âö6£ZBw­f|éò„¡taÂP8*Æi‘u"p(S 2¯ "štf†CB¥"‡ssFØ–¹j·%h8•@òææ‹‹âs!jW4!˜÷zN‰*M%YëtDr¹\¶äFŽ»µE88`$,Ò¯½®˜Ú@2©æ0Ohwa Œ@P²!0îT©‹ôë`C^ª‰-³!¨x ºâ#3 ¢Œr„ IÉzÂà„Å@8 „3@Ô¤ ÙdŒ:@J„q 'b˜ìéUUq*qNæ1# %—€pdÂÛ¦aŽÀ#¤F,ÉB÷ FBÐXU¾43Ì.ªÎèŠ(H% Œ ’ðpÈÅ„Bˆ@žù!Ú!D-‘Ñͪ$ïÆ‚úŒ½ªòÐs©!•a·C}1ïøD]Ï ¥A@O«u5M ÌlŒ×xÊ@nðuÝ:çs‘@ŽÈ¹=,ß#ç½À-VYX3ýÓù•Ž„ÇË(˜§œÚÆiNÔy ~t‘˜¦R‰ñú×?‹4Âÿ†ƒ¡ÂYL(òöš«çIÖôZJ 11ã·Hƒ:sÏö«ž¾¢’‘PΊÄ/Æ IÉáÚE ¨Ó qöl‘{ì0Îá¶Û.âž{žÅí·¿@•J‘/\˜F–‘çM‘ë<”D]ñˆß‡H —´Âm.ì8”ÐSå)x~)Pˆ {†m–XhqÉ󸪟›òŽ3PoWah}r*`“Žˆû¬^GNÓ;Ѷ&*%ÏÁÖöÄ÷"ïÖÓ ¦kk×Tžtm=‚·aI¥Voýå•à_ñü0H¯×Hõ‹'Ã:i¬pš&iœòžKÃO´oN ÚY%[kªÊ4Òàwè)d-ê5ìê÷ þ–SÉV&×y`…òìxAã*µYôUr†E…G‘×9 ´32€s _'§d–èz¾™€,k/ÖÈPË$ŠQmí’4<®‰Q“UºGÏQó̧tïËk¢aóok.Òý쀜ú[N¡=¯cÑò|\Ì€2Ò$nZ‹™v‹¶É%Æ]8Ü9¬ÍŒîa¾ÁÑ‹ˆAñwÑÁà¶è ¼:‡!Wu›bÓ Øð­§ÏðÛßñ_áŸü—5ÜqK‹OßùSèô¬^¡€—2Gu|\ùÿÆPù[s±æO‡@ƒqN]æÃ¦)¸Àš­VuÙåÅÜó¨-V8ßç˜Ò½+õ? ½<Ö WÏ"(Ò±²%:ô<_í><H6©Xm¶òèÚ„i·ˆ^|Î|û»ë»oø¶ï˜šŽSˆâkv˜½ž“MSžÀ¢Œ¤+U^ö÷AaˆT 2<«Ä1O$l‰$À‹"Áæ@³ÉA!n·1ªT˜ï¸C|&Œ”Üj1ŠEÄ (ïï#h·°sµÅå©?ó¾}[éq¥’bµu'>xgêxöÁe^®naynð'Ÿÿ<㦛eÓi lo󤚽¹ ŒFŒ\Μ°Y¯_º½°¶F3ªU£é÷y’<õT—<ФsaãE$ð«å%F4‡7._À¾î9Æ‘£ø›‡–ñ˜‰€F‘S´$Ò-98˜ÐÒ’‡H’˜z]®;Ž¥ZO:$ó@>,ö2¼éuѦîô X¬^Æó£Øßã‘íõ{{’8u:’hZש×cLOáožÊãö]_¹Ì§öqn­ $@7C»VËÉ—Jâúîˆþ²®†CàäIIz=¹þ {*$q÷43ÓnÇæ¦ÿiÊh*–·TNÅÌŒÌÃhäÆ/líº'Fe”Ç¿0˜×î®üÛÎŽqoä{ã¾ÄFa&cšD ¡ßU§ŸD‚ìÞ¦p8dŒÆ@˜)¤2Ĥ¢è0Ò±v5r„^ˆs<éý†C–]§dª’33¸#I]P©ù,Ö 3%pˆH¶`ßuw«(÷´)ÉD®ÌˆC‘ÄÍŸœunTc ×Õ¦JUº3±1’Böh˜i_‹ÂCF~ˆnѾqà]`Øâ!ÀeF\s»_V°Ã/Ž€4f‡ ïcO%B×=Õ˜!;ÜÿŒþûPåIå)4YÞ(K°wØE·uW]6ˆ;ØF¨ßÉëù§XªŽögվαï¼ê¡UŒÛŠõ<&“ZÐëïÂ]WÝS®²Ã†½ãŒÉÔÛúÝ%OS1æ(ÚÇôô6Μ™£ƒƒ<;0°Wœh*<¨SÞƒIô{žœ¨uR˜iß*â ä àØƒ[ÅèѾÏNáH¸D#ÞÚÊã·ûv:t÷Ý·†»ï~†ßúÖ¿Âý÷™|ð4¶·o÷¾u’,l¦¼ +© XÓ·öŠIØ’“’­éÏèy[bîÛ‹æ%Ï!Švßì’ ƒb=xNMycÏ3d¨°¦Tƒô1˺«zcbAuYçWcœ›Ø@Ò,­ªØýU…ÞEŠÅ?d2ÈzM¤Aª™!îx×\s@é ®ÿˆ>{›Yéµ[tÃÃn²HŒ%JËéµ<¥p¿›<ÇNŽußë˜AÇé½¾ŠîUV·ŽE‰]T9Öç°WD0çî9Ý^pÚS2kã[5â‹ôÜ¡'Ç|\]¬S3`§‚ÏìÀ:9—uN{ÉÞ²þ®­óÙñ”Â"Kì¸Y=5K0~’iƒš ZWßSGõç};žTñÈ÷‡ŒËº7æó1§ë©È.m¨swä)¥õ=LÄΡæñ‹ê,×op¹}½çÜd¤þ?ýñ¼ÙC&¦¸ÖÀ<õ‹¡×Œ€_ý×ÿ;Þùžwã÷ÿhDC ¬âÞðlìmáV¢ÉìzȸmoèÇҼ瑧/búõltöšƒ™÷y«·„ÞgÍ´®ç}ÁšÛ|-g!°ÇΓqäms‘Õà,’†×Á×zK¶½1¾‘,pæ%+Ñ ”Ÿ²ÿ?&—Ù¥) ;C=—€äócŸ¦˜@Zr9„¥2“µ¤E*ÏV)–ã Lhƒ!4b˜Ë++@noË5\½Š0—CþÄ €íý}¤i€ÙÛøéÚÆBùsµ/¬Õñ¹¿ù+亅}ðx~gþŸÿ ü…†_úçÿ#Î^¼ˆÿøÌ3À÷|®Ý®üµjv·;q G±(;³Àzˆ$p=^‚Vó•X\”ÏòûZMº,[[ŽoòÌ3À.,ȸîMáþ£—ñ®û/€§á¯ÿr Ÿýä°áPRŸ{›#rïî <¨×“$Éøý¾t êuçÑËÉï§§¥0»³ƒ›Ž<#ÓçpîüM¨äP¬Ç8ÿx*¾QIw!I³ÊÛÊõOM9Ö{øô—Jø©wÞñê-üÆÅ%'Y ÈX\ºœ:åî¡ZŽ‘{‘óÈ=˜íx,cg°¦bQ®=Žå~áž\½êÜ»4^¯KKN½jsS®ÝÖ¶uAì̲ӑD p–ଯËg oâÀ9é@„Z^É"©ðc(ýÚT…³³H¶!D~5Ì{OxÙ©ˆ¤ÚפmÂ@‡Æ1¨}fBcâÀ±©²}õc0ˆŠáöµ…Φxb@ÈHz¹Yä¶q E(,Éï¹'DôÁ–$4\reå²–‹ è8 ³ÀX±ÈT”Ž[8«Å×Mí=›Üä0ÞPø–ßÂÜíIWšBGš- B6<ùÓ+ž6!¹ýÞ´Ç©° ¸¨A‘u؃lx¸è‚Â'žö¿aùM½Å‚“ á1ñÞz¸Ž,]òÀ·Ć¹¸é½YSo§'¯ â„Ézo»}ïÍ"\“z=A>Ÿ`mmÌö&MtMugÍcRn{ÉAñ:™Ìž§’dKPæà0ó%bå¯K“p}~ÂQr³wÜ2€2˜gl¡ßàܹ Î;‰/|áxÇ;žÂ‰ëxÿûB·û ìì,á3Ÿ93g–4h›T õ^¬LY´ ]—b_Ÿx%R†se·2eÝë¼Çg°rªE"^bz Ͼ™U£5KÂØû yjEænp­‘+EN¢•»Á¢^ÓthäÖ<Ø’©€å½ŽÉól*7eNT ïÍMìy)ÌkaÖÁ¶fïÖñØÒÀ¸¯‘ÒI…uô÷áŒâ,ÒijÂ> g²¸ ÏÓUoýd4(òž ö`…–/{ÅÈKm-Ÿ01Ý+fµƒÔ±1Õûš¶Î§ û“ðKHï ‰ÆJ§ÏUÅQXÒûº¬ûËeO‰.öxPð¤‡#¯,njv™¹š ¼ÄØÃó”½ùµ}-QŸ²Þה޻ï±bŠQÏ2øè ¼ë¼–ý-éàú½Dƒ<¨ ûŸ3=r£98 ‰Rb7.ˆfå_ü›ÿ÷ïR!NùcýY|øÃOá7?üèW~í×ø½÷ÝG[A€]%}¦úzÜÖWd(¯¯rïâ9ó¶gxÓRÐŽCâñ.¬Ú{u°@﫤¯p¥qCyªÅB±‡ ¤SÂÐÏdzŸ‰×9I=ò5 }ÑÄ )§®ßÝk‰óLÞõm$îÔ½jø»€¶}·ó,?KÇ‚&FiÖ…CVoù™æ…!³A¢$èˆuB²ŒÀ̘%ÌÎ2âX‚ä,c0sjÝâ"p·ÛE“•,‘ IDATˆo» i¡ÀÃçž“c§U¼ý5[85·…Ï|qWc>¾ÐÁƒŸnÐg¿ö/P›*àù©Ê¿ò ÿ £ñÿò#Á‡¿øEÂò²tvw ã1+ñšqp@h6¥ãR©ôHªßŒJˆ"Æ¥K¢€Ôn;F–1vvD ZØÎ榌].\¸@˜šbÌÌFc9ÏÒPZæ™ÙŒßùº  r_ÿ"ðÙv(>ÒÀ8®ùa¯ l¯1ÀÉSÒ5Y߀ÊÀ2vwL­\– xfF:i*Áöh$p§õu~ç;ÞMÿÃ;¿o;²‡o]Þã‡>ÿÛôêûֹٙ—ÏÍQptÙÕ«²€:I$ÑÛÛhØp¨óÊ?ñTL_½Œ“+[|Ó¡Y<·–'ïÙYF’ÚmVX“(B%‰tж·ˆ-Éê‚ëZëÏâšÝéHR%ß—y)H“UÆì¬$?å²$SÒ ‘nM:ræ8ŸÏ;e©VK¾#êg.™h6]R(È:Oq½æT|² «/UHÚÓf<™²Tly.ÐR€;Sík–¤*—f@RÝij¡lUlŽ1‰DžŸ‚îR’s±÷²i0¸«P‹®#yR ËçªÏ(JIÑqàŒ¶ •"cí2!`F2Ð"!Œ8 ¤=F¸ª‰KŒ€]_—k µØJ[ÕsɃìë½Ü®àžj¼÷,³ë•›¬eBÀ!v/ÖY­Ä µ?bÇ 0#µ2;{Óð:BI»)ÉùHcŒ4ªºLª 2“.5¨JÙ)Ouf`ü Ó,³ë“ôšGzÍæŸW¸É»–¡* Uôw¦ø³¤j=ÖùÉÓ}÷í¡Û-¢Õ:¡ÕXŸ5¸i “V\IûôU…lÞ ¬÷0¥ÐšL»'©ó€åþº^5¼à·ª‡y7ûØ„eí7õ]dðšŽ'½’èÒÕ«Óü»¿û´¸ØÁììÞóž¯cnn“ög?CgÏçgŸ§§Ÿ^À•+o€sƒžñ’Ô ,箩JX¨cÙ2´0»jµq2ƒ®éÚ™²‰VôG^ðnÞ#M­Ã0š+êÀ‡C;çõy6ã¹½†²®³¾—HϱÀhu·.DfîîpÔÛì:j{zÞ}fúª°µ¦ëÀˆÙvü=ýýŒ®×M/~héš.k¼°§ã¸âü­èµÃpTíX9ÛúùÔS5Ê“ƒWeÚ}ë3‘tDÆäÈ–Îe¢¿ß–=xÒ+è1Ž‘œoGa¿±yѰŠXÐ*J]çÑŠÐù(iÉy]aIGõ:Œo,Þ;ÒÀMzžgXÖþUaOüp¦Ôm~%(Ä阞sG¡—¶>C}§è³_b'¾ÐQ®ˆdmê|›—GEc=ss_3á];MvDð*¹ûHu¶UÌ"ö’7ÙÏ¢´¯ãü¾dòAÐW¢ÉŸª²!SîQ½ôéÐÄŠB‡¢H†ã>ðžò2²k•¡Èëóò æ#ﺾ-)¸6¿òç1x‘9ýöß™Œ'³@„’D -…‚û½U‚ƒ€ǬîÝ(¿ÀÉÏš÷B¿/2ŸGŽH0†4éâOF#Â]w±J¯JPØl"Z^F¶»K£ÕU9W£´;ü'ŸÎÑúþQþü"à <^¨1nš" ñöŸÿïÓÓÕëÌV­ŽcLŒæº]u:rÞ$! $¥1IÂ15%r¨E2¸Ð‚Hó2(—34Âå¸|YÇÕ*ðÂyB.f”K„ÍM Ó':ÔŽãŽc-úïxGævi}»Âƒ¥M:ýKyîuºx¼³„ÍÝ16zÁå­¥‡O2.­—/0jÕaÀh÷…aœ0Ò„Ð룄Q«è#!±ÈöéŸÿÜÏã×?ô!nºX¿úÞzÇûéÍ¿ú~ú£¿þ~å"ã2¨u ’,#5:ä b_î{i è÷ôzB²—Jtt9ÄL=.&„(©â+W„ÿ‘$"w»¼LØÚöödlͯߗs$ ca!@¡ Ɇø^ÓÓ²¶¶µš¬Ý]!Ó;&Ð+"Vh›u:‚IBcêSi*\[“ƒ_rDŒ™¯étŒFÖÑ Ïeˆ „ÞPv„8 ‰ë3’m*!M È©ÙÎ32­JrÎëõv$ˆæ†*«Z€Là±}y (†ºùϰk·÷ íˆ2Kð×xà Šõ%A]ÒXIÞe™çlEœzÂŽì`YÊBdŒƒ(2! ”i’°ÒSB® 2š¸ñ A¨¸sƒÝ¬›¤£b~Éä9X‚ªŽîa†™ox$Ã}\kemzʎחy]7SÏIMòV_ÂMX¶Ù¹›žß´âœ—Tºr¬Ê8çà­Lx ©ÎAÍ#¼Zå?ó”wà) ež¿@Uç.¯/ñ}%jV58È´ÚmR)cŽ˜Ë\ ÏÊ1NC‰ 9β"ƒ:9Õ§=¯óÐRþÀ²4¡^_ œ]M<:˜tï¾~/R¨…ïšNØX®ãÇ òÓ# ’ɸ]„óuè+GĈÚ&¨^0 €KÙÆFDgÎü^ûÚÇéþû¿IÇ馛¾Îo{[•žx¢Í_øB™¯^×1œÓëÊPÈdLÇŠí/è;2Ðçdâ,¥ë%$Çɱ€«¤p¨sQ×ûÉt=-ë:뚺ª _@@¢uFÃg¤@ÎëØfì0 ³Z)ïjÂU1ƒ@’ò]]7™ÎÏ¢“]VÈŠî!©B]Ìy:Öµéu/éÚÚÐýhž€Óš uÍçÆ7ôÔØ6 ¸¬IN¦dø–þ% RkÄ™¬‘v3N©¤ëy‘Ážx¾Äz>RèUǽç¢&QM‡‘®û“Ö5ÉØÒuyD!q €-˜üµuÜ6­"O2·OëXݬ÷f|ˆªþ=PwxÛƒŽê:š×ÄlCçŸF±BµÖxŠ…KV#`‡C·I0'š Öt¯(.qlë½5´ ³G¦è36Ò1?¡×¼«E®£JÊN5‰l³ã ØÐkÙе“ë~z? ;•´‹ã°&s™Ž_Ìß DŠ_Šn âñµÕüISÉkRÎ)(ñ‡Þ:uúø÷>š›4ü.Ÿ;8·±¿+’: g2Õ””}ã¸Ô#.{†{æÓ1©þ'^ã³èur9K#/?k{MîGÒ¾¦Y7r] „zMJÍåDÇÐììý=xÚ‹ÉÅfÞý7îDܨkñrTÂèÛäh âä“mýª6ààOÒ©â”eŒ,~‚áØK%=IÅ_‚¶ý} c5êv‡¿¼ <ñ„vM›È•ËffhpîœT’gfþ“iñùÏF@%#Ì­8ÞC¡@43*—rD„ÌTŒÂPªñëë4 "Ó(•X½ÜiyÙAvÒT:•Š@qÚmI$J%ñıpF––¤Òö,h<׿‹ûã>ª÷Þ{îqëÂ×ð#w]ÆüRÏ_©áñ'sÈ⊕–N”ð£ñ*z;=êþ–l¶·°þè¾q eh²™ô Έ²Tö”=ñó AYµŽÿúÝ?„_ÿЇðÍ󟣿øÂà#kâuwý"øËïþž_üw¯‚°p]TA3’uáCÈLÊÕde‡# aÔK‘Œ3Ô§2Áè›ëµ©m ²Ž‘|.޵5q4¿óNIF.]rBù¼¬£NGþ¿Û•ÎÐü5}¤ GEœ½yù+\aIó`p­!¤[ãrQ TJBÞ•@*µªçH $Ç*ÓƒŠzZ®=<üØ“0LÐë˜Ò*}O×àº&Oäu B"4 :¢°¦M Vt½·½}+tlU¯±ªó¼¤È»´R~IŸ•Û!_Ðç²èÁ¾nÕ`·ç*½§sRóä¨}ð}œûµÚèŽ, ËÕº«š©Ï ŽêZÝÖ5{Šu#&Ç9­¿û¹ç}Z‹±·ä=U±mÂd?Wõû‡ôÚv\ñ8FeOŽ9¯sÅìàpUž(“|ÏÿKÚqXÖ½¯ã­M㣤š$ò c›z¾EÝ›ö xZ»'#[‡zÍu2Š®ëZüCT¤ ] ô®«ª‡žv†© çµzßø¿x3ð†ïóÌsôÆõ]úìç¾Ä?ýOµ\ùƒ?ÀA«…G¾ò„aJÓÉ«s Ýª ƒÍ Ûº$“X;p[CöÊjì—(gƒ]ðNÕëôòn{e(¸`àmÙó¶cO¡ÉÁd|}U§ÀSϼ¤‡o<ô™+=Ôÿ¾ßñøn|Nn<ÏIâ‚@K8L¸Äœ™ýL*Ý„Ñ<ÓääSSl×j®úoÄß^×y—–€W¼BpïšÜÄÕ*¢›nBïòeFJç£Ù”àsvNÔvr(Li8” z\­‚s91¾ëv…< ~¿×È“¸E D§Ñ D£Ývüím©è3;‹jUÎ_,Š¢S.'×ù²ÈÝÎÏO<ôpãŽä¯`ùž>î{ç—Î!Žðê#{(×Çø£¿X¡?útŒ‹Ûôú%Ô¿çV¬4F¨â ^[»ÄÕ• 8™áøÎD7¥xoaŠ÷wGôÌ¥®v@;ÅÁA‘2íVˆµ^YdEgÇ@½ÞÜö^À½éN “øÓòïü~­õ›©8ýxäɽp%‡µÕ9n ‘õ2?•ŠÌ‘%¦¶dÆvÆÕI `4»Ðp„F¥$[õºK4ŠEŽ-.Ò„TM$ ë…!ccƒÀ,PºzÚm’„TT¡$Y"L\ã“„03ÃJ¾wÊPâÏš9? •Sž$¾ñ#Àj)ólÏ‚írA &yAŽ'嘀qª/÷¾÷B™ÑwF®D0røY6xCÉSb%ƒúH{ì{Z+jE9c'ƒiÕ¯†’+Ç›ñRªAü¬VU †¤9 ÚdkŠDá)b èIWë%97%,;jMp!#:DÇÒ/‘¾ ²Šv5ZE^Ö—ÙUo÷4›";5Ÿ!|eðÕzï=êœãuA+óVù5—kSÖ Ù™o½À«ÊÎÙ¤(—5Ûövëm¯4µ­c[WIÑ+§íéØo{PµP´-ýÌ´v¢æõe¿ çojU9gN»ì‚‘Y­T½@Þ=œÊº<50G˜™i¡RÙE¯7ƒñø@¯s‹%È7"xÍ“iy,Jƒ«åt]ÖôžMÝ8,m­÷<,8{¡P×~¦Y­¸oA*®{Š$.*É‚¥ÐÔŸ49¡×Ù6’<1oh@ãñ"ÆcàOÿô¾øÅßû½áŽ;¼æ5ëxõ«_À»Þõ<êSÇhm­„^8¤cn˜ý®ÐƒMkàhFŒæteŽÏ%]ÓÛÞuá S­èŽÙ 9µjè:/i]7U'ˆßE‰]0 ížµ2§„f‘¹õ9í%Û¬¦±ÂgŽZƒiŸÙ)}…d{dî>¹È¢bÎZÝ]ÇÝñ:’çuÝwtÌ“’«®XÖÏçIªë3^} ÇXÒýaŽÕ/F×Üq­Ò½õgF€yWФ+ТĞÂÄRínL©«8{ 쬎ÿirëÿ žoÑ"@_!€Oúɘt V5AΛKÇí¼äÆ{ ð{øÂßþ-ºí6}ôQü¯¿üËèF×Pߌx]ô¨p>A*éêWý¢¼~;Ø¥ê¶ë×4/Wª•<­ëjø¹yIGß |Šë=) %Ü¿1.‰àA»¾C&@ß¡AßÅ<û÷ý®D²š¹Îƒ©ì0ËÏRÍ&ëd• óô´I¿:_ÁÀT–\PgǬ×Ûnå!#YHŽÁXŒäÄ:Ë$ib¸tIšMÁÒçrÒ±®B·+„l«jonJðiUñTƒ83vu$Âô´¨GmlH%|0Ï›Á ‘© ILÚm!ßt“¿O<tÇXyå Þ÷Úg0Ó qçÝ66×ó¸eaW;U|äÁ:þð÷r@£,Uß;¡Ù¢ùÄ`óÖj”{Í݈>ö^¿¸\5ÆÉW h¡²‡·ß<QŠNŸ0…‚îé¥hGe ÛA‡ç¨µ:àA½;NLãM¯z#þökàßýN‡n?üèÝ[Æ{ß0ƒ|ò_á÷ÿx Xx²|^‚xÀI w»Òñ1ÿ‚z7ä´/y ²„ã>ƒÓAÒYÑFC ól¾K%ùn¯'Ò¥õº3¾K™S3Å‹c·Î,™,—E ˺33Ò•h·÷ÅÁ3;4Ó=‘®¥IÇB|X g¢ö×’&fš¨¹Zþ­ßWÒx¦ ˜Eüzä#í|¨ˆAfî­¯¢h¥?Taé)e—1î8ñL×o+=ÈÏž×ç5©È’W,hY_,-%¸q­ûÍH^:4¥-üY ÕTy©¡¸Çgmצ<Ôt§*XÆ  „óšXŒÜH`“Æ4… 2Â-D?Ð$¬£ÁÖE8o#ÇZùmj—à@™è®½§Ð…i­²nyR´e}—<ÂcQ;rdF“Êj€c¦rmC“>Õ€yÓ#F´ú7M‚«¶¤#ç#ði€ –L覻쳭/yöˆÞ‘Gö 5еs 500 Êê¡Réã…À<Ò Ñœ®Œ:¥ •™ Ö5ØÜ÷Ú^p;Ðñ¶û›ÕqØ“©Õk¸âuÛ:/%rdZ d$)„<øVŽßažÉ+‹ù”ί¸Híïñ©OÆ_þe€åå×Ò»ÞõŽkÒ?ø5´Z]¹²ŒÕÕÓøÒ—Ž¢×«`0(yÝ¿‚YÐÊlÑ+—ZínÏ$[8óÀÁu¯S ¨ûVHÐqìëÚ4²w .ô¶’e^?»íu¯ÆždÌÄóCJ fÇ&[CÎt¯¤A³=[y£®Ç0©Y3ŸœÕãÌhºvFNÞSbt^ïaY¡]U«¸“®üoy%¯Ôc´<žSÉsÒ54òʽ‘§¼4$W¶5ÿsO<éÛiý7Ó%NµÈaQÖõ ^µ ×µ®•|s=¯êójðGhAä&OƒB»‘îÛúleº7×½ŽmW÷•’·w˜ÿÄ´Ž[à©’A-뺵É%‹ õ…Œw§~~U±ëu4ÚµËyÝ£ozÏ^Î+å¯ëÜN$‰è»‘©å—+SëË ž. Y†™Áýð‡“[~䱿ã›o¹¯»ývœ]]å–IL:â4Š2lÍ·–ž#t]ã»sâA”p]Àêg}‹Žv3*׊|±}Vs¶Èëhø×WrQö\—„L¤r5 àŽwŒëTŸ&„øãë»ßanþáólRžfŠ'*=¬fy<©hÛg£ˆQ.K^¯sf^á¸6”$n•˯x+ÁdC‡«Ué8,/ ´åà@¾ÛíÖ^®kaA: Íyáó«`ìíÉqãØ‘£¹ŽFCT‚1¦§å¸/Êõ‡@¥Â˜šrR¦{{ÎzoOHàÇŽIwãÙgñ©ûWð3ß{¹JŸ÷k'ðÐWëxâ¹"ÞsÏÖÆu\x,ÂþQ…±˜ÀáãÀ8aœ9ôú@1Fvì$—.3žYÅ_?NÀÔ<¢/pMæ|ÓÕ.N¯0×§Æ1Fm.‡Êô(Ìxª´‰è沤ƒ¥¹eˆ/m4ð•ÿô(î½ë¶ÉTåáÿÈ|úßc<[Óì\É…t/ºÍg¥âÜÈ !IÀˆpþ"qø½!ŠáЬ1¦2ç®m«™éT‰—c~^…8¶`Ÿ'IÝ`ëY^–—â´¿ï×v[®' &'P9ñÚp¿—B¾oŒ4…µµ{áŒëú ?,Y9]—k–Ýù‹ªˆUÓç+õàl;WgS;`ÉN¡Ìܨ Ò×÷¸6J"†7ÿ ì@ÚsJ/CðýeXÐÊ}è•R •iÒÀ /ó`;ÌN|%Øì{ÏÈXçµçÉÎ Øá;î± ¼vWtžï¹JàHæGáüfºº×=«ÏQA×Õñ:‘«®š’™WsmÀIYw¼q8®ç3ñ€†®±œŽÇyë4Y$©ûñØcØ–uìg3Öulâ §›¢kg—]4|³§Va×ì{*T«^¡hFïÃTÑêpŸ’î EýÜPçÙÖÛ¾‡%2#DSæºYù´Ž‡‘Ùc=Ÿ‰œÒgé+Ú5ìè1Êĺ ס5ùI^T¦–_­ÃßmG#ó>ã‰C™Hëwu%X?ræÌõDcJ¼Ü-Õó¶œBe×^˜¡™9ó” Ò9'õ1QU¶|³ªAÿ¾C”žw¢Ž¦Rï«;Q®Æ¢âvž…ì¾ËE…[¥žWvG‚®í€ðKp(nHü¾~_êÛç9 i*J;¹œx*d™Tê„MÄÈå²dÒ µ#—“ŽÂþ>a8ˆŒÀLœš%vL" 6—— /²®Q™*.¢j´½-¤^ƒ¶ˆ«tJìü½ž|ÇäY¯^•àuzš•÷!ªåeö¸B`¯ÕÄïaßAd––BÅj[²³cjHÀv»„ùy`v–°³ÃHRÂÂÞ÷ºóœo ð…Ëo¢O~¢4‡üï¾@s+Mn­}ä£3@­´¶€#G©)Æ™3„ž:r/– åâ  F#@r~‹.ŒdU_¤?þxB c½0´šŒ™:UÙÆT-à”œ:½Hïy[†Ÿ|Ï»ø¯¿ò(þ›ñÓ¸ëÕÛô¦ûÿg~ý½?FðnÆÿú¿eÚÞ'ÎçeÜdÜ$èóÅBÁ§ÜÒF8-¥´«/È!ŠY !­*ÔŠjT6bu'&Wö´EL™e™Ó-ÕûÛÖc,á@«Üïh*)û°’Äë:þ{zÏUv’±§ÜÔÓe¬øtS”z^a¤Û¾V*# „JJ¢Í´¢gð«Ô‚cSgÑÀ.GÎ #ЪàØS^j’ƒ"™BNŽ›nÍ 5ì´6Ï©áF¸Žõž3J8|x*•.¾ñûd]–®K*~&’¨:Î,;qõL;ÅÓÛÚužA IDAT³jÿdÞ-@œRÏëvh’2Ö×èÙ¬XöH µm½çŽ®W#ÉÏhÕ}ÀÎË:ÞuŒoSXŒ©]0Â¥KÄ—.è‘GNâ¶Û˜OŸ^§ÛoïóÊÊY:thßþö‹8wn¾øÅ|pp[[Ó:!gYN+þ‘âÿ-ñj(ìè6]‹ÈœÁ a&G¼£—„•Lk «þwÇ#koY‚« ƒq 2rX›ó¦š¦ëϤ™KªŠ4Ò¤¨«÷êZ:й,èþ‘Sh_A×m_adU­¬÷X`K--õfº$Äûzü w–’T¹c.èñôß6uM&à‹,ëè~°¡°±œÇ˜rœXóö‘-}¶zz}3º&C%V›/ô¯z\‰–&P›äø+º‡?¥ûØMú „$-}.UU5}†Ú})ɾá‘ ûº‡\Ôë"§lgÁ»«q”jý{¨ÉB¬f]MÄšúìXž(4užœ?L à«äà•}ŽÎè^UÖwD/i׸¡û[A÷ºUv¤÷L×J0HÝ(X ^2s£$ƒ¾C \çϼ߫;*Râ%/¬äè®w^ßšo¬l5QžÊ®…mQ ›"­™sQ¡šY*ÜXø‚ÇÕð*k’ÑÑîÄõ Pþødž’ÓÀé½Pâ’®‰DîK@žn4/•¾XRò¡QM’f‘ôLS ÂÅß‚P,J¥»ÑÀïà€°³# H¦e\áQV%ÀYU§DUêôiÆñãÒqR葨Oíìð„²½-.áÆ×¨V¥²ÝhŒ«PîÝ] Tõu gf¤Úm¦s¹©™ ÒD’ t»¤ B±(×™¦RM¯VibäV,Êñz=RB«•!J³¸ÿÖ6-,´p¶ýJ|ò¡ a¿Ëo~Ó>ÝuÛ&š›=ðÙÃÈæªÀÚyÂìœ$1çΉ² Y•ŠÈôîȵ.­{û’ÊVóââaœu i4êÒó—Y­IÝr •( ýöïû¹ÇÛÞò†Ìø'¿ð0ýñÿu†¾ï®;ƒ&‚Ái.'s´½-saÞÖève<…;‘@äRêsBSs%Ú‚ÑiI –¦²–.^æçr9À¥KP˜áÐ!Æêªt€.\  2®««2ÏóóÀÊŠ\×Þ飉Ô-‘$ÆÖaªV-)pp,ƒõeY0q•¯TxÒIk·åÞšMû³žš›}†$ $ââÞéç *xÈúâTäåå¥&H*€µ YÈÈæ”­JS4Ò.€jÓçBBÂú"‹T(òkª†3TÜvU¡·ûqâ¢ÛWØÀºËŒˆ¤<“¢œtÒË@Ö"Ò !ª1Ò^l2’Bº¬I@]¤v¹«ýà.MJ.Ùaó«Ò]RêÈ«*–É9­è}_ÔûÉ @n‹ji ߺ–P4§¼¨Ý¥@«²°gZgš¶ <9“-#2îB°Ø³z®Q ÁY@(—t|­ìV58° fš$J4È*zò›ÖYØÕà:¯•±n¼s,ÁÔ>9H‹%IC=ÇUoË6i Îe˜sÖ.R¾í¶]ÚÞ>ÌÝî!ï<#WÂr\̸`/pÁ‘ïÍÅ:Ò@i`¼ýŒ)OÕáÌ›ôÀáým¾á\–/‘‡4¸›²$š\%ÞÜ©öHªÄFŠn“ü ¼.t¾¦t¼ÆJ|rôÓO¢§Ÿ¾>8¤£G+øžï9ÀÒÒÝzëS¸ë®Çh}ýΟ_¤³gñØcË:wk$¤òÌ=]›ä0e8›_ãÈl’4XGb^_Ö5dœ—¡†ùÀ‘‹gt¬@.O[·¬k®©v¬\‡Lƒf ”ÏkzOç|Áª'^ í'>9}>ÆzìT“ŠŠsOŸÅ¡1cÙA2ËÁ ¤ÂJŸ€#$Ƀ9‡ok`_gqÍ{Ý>óu¸ó,]ƒ]5iéD_÷Ä6» 7§ûÆ–Þ§êbJªäÂ܃Nj!¢¡k1S¾ÅqÝ º ‘ªh‚k=»zŒˆ¦w¦Fãá@ŸS¤3_Ÿ ž \ǪäÁò(¹4xTŸäLõ|U5¨9v†–›ý …¤­é<¥¿7ˆTè)çÑ$TIßXÍ(ÕXb"­þ]' ÜúŠHÎc¤¼×1©ß°ƒñrÉÞ7úwz‰îÆ y末ßÎ%¸æsÝTèÙõC_ì:é:ˆ±×仆5炜âÓ¤¾t טØMøº¼¬A¸¶sÁ/‡û`ªVì…ôtm2Ã/1Æ7Êüó¿T炾Ã<:€0t*:&‘¯• öü¼$ƒamÍÁÌ`ÈëeÙ„ŸfR%á,Üsð"ŠE £HªÏŽ$ã±@k gßjó󤉇ÁbO÷œÓäªGe]Ö¦±GUA©æÍùØTÐHªõ·ê®ÂÁÚ®hR_U™Vƒ•4p%}•‹51¿36mžd-íjçò’·Ì(Ÿ ÄîYZ†3 \Óy_Ñ@wšœÿMdE%¸÷¼Р\erP.V±† ýܒ׉3Rž\>ÒÀÛÔîVõç@‰é–hÛK/8iuñy!Ç“éy{æ˺½ @ÿE9ß­ÒÐK‘Â_ò³#mv¥ßùx×çrÑæ‘xXðhyV—±èyI—÷èÜË]S¯=0|™÷_«ôt !ýEHÝ/ûvo‘üÃæ×·Â«àk\‹íO¹,Áx¥"ö+WºT(Hjñ•0“2žh ªR*‰³óÞ p¦Nhµ¥’{ŽX¼¹)•nS,šŸw„óbQî÷ñÇEU¨V“*ùÜœ‰ëëòÝZM¸bèç®åðaIö÷ÃßncBh7"y¥bDa¹÷Ý]àâEÆâ¢œÓÈÂQqÖæw½n ùÅ<þË5<ÿå÷~ÿ>þÑ}«uøÐmxv-^xhL++rέ-9g±(÷`’´™›øåËNÕk4’1·?†8K—ÊN«ßâ*F(¤[¤À­ó1¾Y}¢„ßûôp¸Á·Ür ;ƒ>û÷°ßGZ©8‡ìñØŸW6b0Ëxˆƒ»øm”ª\7Ñâ<ât(Ý–J(W¤£ ª]“±ÎÄæ¦œ§ZŤks÷ÝÆÝE®©)9ÿ榘 ‹2†|Ïx–˜âY¿/ÖtíÚŽ"Ç2çžÊ³šÊ` ¬­i@ƣךMáúäKÒmÊé5õ;¤çTº1³^kP™¥84â‚õi t7¤§ ªÊ>æJ¢ì„ˆ]?¶§tÓòtëà‰³.eW*1ôªÇ'±õ<4° ŒR ^’60Ë»˜€|‡ÂãHFÄ@3¸¢ÅÀy)S¬/ÐH±×K èig¥í½àçàäf]SLðX_Ò&ëj’©û^e8Õ—r¬ÁNNjvW}ÌÃ#GŸ ¨/þ€¯%±ÖxÂÂ<£Ú)åFL±s±5gåU½.ƒ}°^{ד 17fãÔ˜œˆ9›åšÂ‡ÙÚγã±·u¼Øø(Öu­þ?D´03ó<67a{;ÔꮸzβA4P©¨Îþ¼&Š-=ÿi\#?!ØØ]ã«ôzkñÀõø‘éï­ûµ§ß]0œü©©ää½õ]ðX•³º¾Æ|­£¸ùst=*c_ÕûÝ2B¬~§…n7ÏO>9Æ“OÞÅq¼‚»ïÞÁ-·5¬Á—yî«ê_}ô¼Öt‹u:&jMžvŒùkPÇ»ç@+,k 网¸úþ˹g«eù0. =øwÈn”È\ošw#S=¾A‡‰ox.#õ‘JrºÏ@‘lúî®·Çc ôÆcB·›©Yt¬2œeÒõˆ" \&T«‰ºçàÌé6”JÀܜ𶶄¿1 DÊ 9ÂùÔeY:í6ã™g,/3fgëëˆx·ªV…#qéO*Ïæ&~ø0£Rï„^O:&%Å´ÏÍ™k¹H¨îìÅíûÒ%IŽú}•Î-62~óý{xÍý)Ξ-ÒŸ2â×¼~ïÛúÿËÞ›[’õ¿/oÞ}}kÕ{U¯^m½Tõ&µ$H ¤PËfä lckb<1ÖŽ ;üÇÄD0vÄf 0f1f#6 ‰hÔZZÝR7½wuíÛÛßÝ÷Ì3|¿ïžS­^ªžŠ¨¨î÷îÍ<çäÉÌoù-2Dî×ÿê<þ× ðìƒ@¾ ÉDpåŠC§#ˆ"Gø*_5›Ô:agG‰êóózÎlV!:Ù¬&góóª”T©(‡A"A±êŽÞõæ?ò8.\û¬œ<ù߸?}æýî‘?~˜OÙ>Ö­É“—/;œ;·´„D¨Vó|™NGƒùÅE ¼õ|Ţޫ\E¦ ò}×˰uµ/(Ä9rlÊeM”@ïù.í¶î¯‹õ÷++štu» 7#Y_½z£ºW©¤Ðµ­-!áÞÍ’FK®TJ(VàÈ­ºneɈ·a×(E¡ ³ÎÆdb ŠBÓF#`2Æm ßæÀêQAš¢ß½ûJúàMé´MÒ‰`:vÞT_>ш2@šdrQ˜äãžä‰•å‹;š©°ýnÙ‹ ‚YÇ*ØÐ9§ì²6+ ä5yàNk¢3~\Ÿã…Ù¢ cÝ20­èË%éTáVÓ&{° Ö%Ÿj…² à4…³|±;)0eœÚç 9,>¸ÄrÄÇw3p뎃@tÊêþ ÕÏ'L"®1KZ#,«FLDHD*ÿÙ_A¯Á+ßÜÆ—ýV4YA?‘jGc.‚;„˜äxT) B–Xy|ì'^ x%fȷǵ =8jAYÌÑØ±Äª±9gXukkCÄñD.\XrƒAŽp‰€+)M½‚€¤Æ`aê¼ \# oHRšÏóqâ ¶y~ö,!–±ÛT©Fä28^3ºÊcÕÙm7A˜©~¹@ ­@sÁ9Îyƒ Ž”×|µ8½W…ëKu-̯cBéMUx›LÆxè¡%<ôÐ}²°ÐK—–zò®w=&'Ožwþðoáïüªüå_žrÛÛ<þxtVœ¨ß€‘ùÛœû!wû„¥©ÎÃTµ„˜vKÂM+³Ïdü:ù[G¸‡‡ÁZ…®ÞcGÂ1×°N¸Ó5ò©‡ÝíòxeѨï>€º×wDŸa²y…ÿ}œÉC5€Žåp{•ã6‚2ï[Iõž4¯ U çz†÷Ò*”‹’á57…½<÷ì28L€p®1»@Ët¹Ï \gSï(JgCΣÀgB‰]“˜]Ò&a@­@±ê¨èm²‹`™”¼ª˜Ð΋©Âª®ñûñû¼çƒ& •ß>l\ΫëT™®Fˆ«pž#>'­<âýd „±‘ÿy¯í9ïZgP´¡A›˜´(l&„Ý–Zr:ëB›PÄ&å«7piÀ¿xð¨Wú7A —›€ìàUœ/z%Hø˜Ëvh¶WÓm(/ Øw¬þ”eç"ÅËÊÅÎ’Ëõ"Ÿ`X–'î¥Û /»¶üó‚Œ!º‰5”—…½)¡Ùÿ<›UÈŠbàÍM™ñ”{aÆdJŽc ÌLÖµ^—áºÑœ:œ> <ð€–‡k’²½-¸tI50çrÚPo…Ȭ­iÅùüy…׬¬hº»«nÙù¼r&šM=n&#³ê³*KÉL!éâE…'årJàÍå4ØœLt »»:në4œ<©v·«ó«U­¡¬-Ý?8’jv„ýóU9¶îðã?´‰éò›_:¿þúxêË@¥ªÎÓš¤ ¤•ÜhhÀ|办qQ“²+W”“`•÷8–ñ8—Sgõz]y0Ó)ÐîI®VÁ'>¼…Ó§:Øm þãï?+ýÐ?›ïzžßÛÀ½÷Ü)úó?£†üà?øØ|æ¸RIßæÎÇø ¾²_.k§acCÝ´ÛmA\ÁÛïË]wõñØ#9<õÕ‰ 3Ôz©¤×׌ûZ-¡i£Ð¸QáMõ:f ^…‚`}]¯ÙÅ‹ú½ãÇõs殉¬Ž3M•pÞjir1ÌI×É û™ñ)ªU™I‹X·C÷ªˆ’æ3/—«O™yŸdcåûE‘š öû‚RÅ¡P Ðë«\kZVóÞþ¤‚±£õ¨Ó—q’2Mf“,(l)“ /ê5Ñâ‘@ mY¥’÷¨ðfHVHˆò€›c_¢Êé¢ÂR¢HJ@qE0ÌnèO™†>F¢œjåIN0:¸ž¾¸¦y -ª´®‹õ:KQÞÉ’Ën ÅhA¨I;IDsnAFQ<ÜLœÌHnïaJ/&ýÚàŒó°§ b§#— Ù0èD7J/‹7Ó«3Ð2øÊ6ƒòJ€£ŸgкCÈÁ~L6‚$Å*Ëֱț‚øêjBþÃ9ñŠ!±ÝVý68\ž»±À*f†UN#Ï$¢$ïxGëëgåÙg¿Ï=g>(&¬mÂö ŠÅDç*ë[4ú! û•€°ÚoXgP¨2“S™Yd2°ÌÀñ(áaâÉ‹2´G?€®åô·ƒdµÂ×]ã4HNŸsÚ„7´®ÈªU¥I\ã)Áæ"ž¿PB$F¿ŸÇÎμ<òÈ­rîÜ1‹y,-uåÞ{ÿ ·ÝöNÚB§3ÀÎÎ!^xWxŸ\¦<LjëoR ›ð’­î㫼Žd©â¢hmL‚päØY1Ðökê|=M„û<'®‡x‰çz°Îs„˜…2ºñÕ÷CœO‰÷Ôž×àTr2Uá¸R– –3„00>„퓳ܧkÜ{fR3¹"ïCx/—oþ4±è=-"HÃ"Ç`R?à¿JŽ[3€ª>Ïûc‡{ó^çKäçóê<§&aR×vê¸nÆækt”s±q•k|ÞcÈu½N˜•!á â‰ê:WŽÏÊaà{±k‰‹ø®C.àÑhUk&—øYƒ.n?Ž´¼¦{ Þµ(–Çxe…›ùÝkñW©²¿Úc¼–ñ͈ãq öv2|´¿ð;Ö´ ý6†/ ’¿Ü˜^ÌZ; Zî•»¯kίé:…òssÊ90iÖÝ] Ü4Wì¿™¨)$ke8Ô Þ9M NžÔàÿÁ5h|Ë[ô˜>ªž©Líîj°Y,jpÚj)‘z84¾„òNž9¢Ò°W¯êïÔ òúuK&ã ççU²T±úÀÙ³Z±^ZòAh¹¬ªGí¶¯º›1àÉ“ZÑn·u\Z…âe|ôï]ÀBµ‹ßü2ÖÖ"üèoæøõÏŸÄãOŒg¾ÔêšP]¿®k§­`mMev›Mí^L§Æï\¼è%b›Måhôz:ŽáP7è8†CÊÌV0näßvÁýÝïÉà?üI‡Å}•ŠŸý‰OÈñÿÖ0°ÓÁ}êSøë/|A°´¤pŸÁ@×½XÔu3’·‘¡Th“šÛ…0Žpè¤ÀIŒöΔE–© FØ“&$šœ4›†`_ž$zMTñI÷€ðôÓºþ÷Þ«Ÿyì1…‰YWÁxB*, ×·RÑ5o,-ˆxŒ4Uþ%Éæ—Q,zwù|^“ ›ÉÔöz^¶ÖD Ò©Ã`¤/ ÎPP,sK Yk¥À$U>C† [*@’Õ—ATÖqO À¤¹¾C²%êž=P–WLüi/x1Op£a“Á. ª‰yí•f§ÚYIv:•=dÚJBŸ¬ñaA4Ô²K’¢,09T2@ HC0é9$©ÌL÷ÐðfQˆÇù 8ß³Ê-_”•ês˜/»Mì&mºÌ 7t'êÀ;Å.À»[G¸AD}^è€S°Må î÷áý,®Y­…æg L À 3âqç9¾AS1)Yx7dã XÙòz‰G!€(~dÁ¬p×°n„ç4ˆáÂ,ñW+ÃÁÏáìÙœ={/jµ ÜqÇCò¾÷=ˆ[n¹æn½õž{nŸûÜ;pæÌA˜diå¡ T]¾[sÆŸ2#N&9f—ð¡a£;Åõ¹ìͯã¼ìµ¹a§¼VÆ=3°nÁŽÇà ÀîÍ ›ݼRÀ2yá]xo“i5—ó¼×L†I~Q¼‡íãÏl¸^œbÌîÊëXðsæH> º„CŽÃ ùÖx ¯‰w›ïÂ+½uƒ{=CHY]¼õq“ÏŠ,ŸI—I°~ÇrÁ"8Ñg™ƒ7Ì‹8îþ>Ïȼ|,9X:tàYdÅ–x¿ ;Ö»Áþ09iKüws¼Æd,#^Zºç…?fœ>ëRØ=Z„7;ÀwçxZäÔá;39 d®%bc¹‘®ðš`:/¹q/¡4•¾ÌñÝ+ÀxÜK|/òï ƒlJジ/œs÷¥93Å*¾r)œ75çˆ2™9Ô;}Å9§¯p|à[½4^l½^é:ã[®s6ëpèWã±BQö÷Ý̹{ERâ% 9Ⱦ`’FP¨yçžwêtï´â•/:Ä9 ?pH·Ù®7yάc5Þ¡7#8õFw ê â¼»IÇ!͹T«ú™ö7qÈAõ"`×I1Eòœ ê¦Död±ÜMˆÆ¹óÎSÔãÝsP”.e4ngÝqT$ùœwªHÓ TˆzN½&^;Õò-•ÉT€Zª/ü#©–r!nœÕ¾Øy¸L uÑyéÅ ]Ÿ§T)æ¸ûÒ‘x¼Ôiµ̹é a–¬Sßp¬¦–ŒPÙ|™hDòu‰¯ ã­ŒDÛb=ÊVó©W©œA&3ÄOƒäÃ9U$º ÞM½ChTÃ*΄AdÝ ¬}~ιÁµ²{aûÐ:TVk§¡BNªóíðxÂ;Ú„§,Ñs Äà¿àôú7‚€zY€ˆï/«² °¯‘Aµr Jw ™¤èa,WéòøyBdŠ4Îë3@N–.H»ã+_¹Ó=ôм{ûÛÏá{¿÷:Ž?ƒŸù™?”ííu<ûìî¿ÿ^ìîºÔ'Ìf°·ç4 «*–TœáuÎ:·}œM½ u•Äè<«%}£ºäZYõNœ—05Œþ׿”U‡æØÌŸÕ°äÞ0SÅñùàÞ^áÏ$RoRí¬Ï=¹Ä¨Ê™4®Ó±Úõ{»Àk¿ËdïyŠ„;n²³°]‡‰ÍûÓÈÌ}ÂÀb’¯¯6¢ì$(ŒEŸ+mB­ÊÜ Ã S‘c¢J¨éÌèÑ’áïõa°' 9`Ç)å¾›‡¿·:Jé°?ë¹TŸg ÷J™Ï»÷lSsâ«÷–`,¼Ê`ðÌ>7ÑžÓJà+wQ@™Dxü2ÇrÐ #@š‹w‰ÁÉ>×Ȫ.<¡½Ã í¼©]žÁG9à8$˜IÏ`c Aà¶Z­!ް¿¿çÌ8®êy38$KM¦lT39N^#i›Ìh)à<ŒxÝv˜à,sŒF¶óÄbÍù¹Â}!<ßNPÉ)Ø÷¼\ï„snÁj•ël@ö6óEû]‹œ<׺(¥ ¸+A=¯ÆŠ­©þ˜yÙu$É%yðAÁ—¿| ßýÝ·àĉmÜqÇÃxÏ{ÎàÞ{/àñÇÈþá[ÑëÙ=Û7RsàˆnŠSæ;q×ðTÚµÀ}< ðúGxmÚLêsðîð!Nb_¼]p‘ë¶)Þ“ÁÖŽÝ:ckL"ÌÅ 0‡¸Ž]cdIï#ë¨íÀ ÷j7¸ži $eJKF–¾ÎµO”¦â×£ïjV°Ž'ƒMš¯ ˜[iù$«ôfPWçZ<ÏŒëÜcK\ ×Ôï„… »ªðžS&ôý ;ƒCÞ+xÉì=oˆ6L1‚ ΡË{ÄdoëâÉæ[¼G(רË1orm/±g]Ð’øîÑ8€å-s_YÇ#o¸Äûøï…å€g7°//ÇÁx%å(y ÄKu4ä J,^Έ±¦†´mĽò¹¾eÎ.àÓ¿ÒœÅíÙDÓV !W¯bÎ7ã]â^fMnæ\~ÎVñµà]^¡2”NIMÏ*4 ¶·Ý,¬V·ÞêpÏ=B¢4È-ÐŽD6«‰É`€YżR¸µBn¼“9][s8{6BïxðÅ/š3x„rÙÈÈ2ãL5˜&ÄóŒ^*)q|~^¡Nƒ³`‡:¾ƒAÿ •MR ×êˈrŸz×#"í«rns'ïlâÀ|>\“?þÚQàÂÃÀd*X_×äagÇ«u¥)p÷Ýš`]¹¢M6 —S®s ¦SG¿¯cîõ"ªi©a]³©c_]º®{â²c±b<ÖPMµCÇf¦çݺE,‘”JJ>·Ï<lméÞRSC‡A*‡î*ãûîÞÁW¿4ÆãÏVRF0ºÿFeõ\i*3wðÛoî¼3ùàPp šÁïšMíL§2sq¯Vºæœr¶·½$òh¤{ª×cðO%3MÊd4©Zûk’»êmáf¾¦$6&ÏÂ|\tÿ°[…² \tÈfiN‹êCÂìr‘ç俦@©®¾ëɘNâb„JV•F-‡ÞPB–øR3å¥ IáSŒÕaéÙ‘ uQÈf€¨ ˜$êÏ W”Ÿ!}`pž sX]v(Ô€EÚÀdÈV€1!é’ ]’y **y=ÚdwÒ¬ 9Ä'›iùwä ñ_àƒÀô •+|þLÄ“:÷¡äF+ï,ðÝ Ô^Ì"/ÀUçƒá¡ø—ú¡ p0ÌrØp3˜+ò%:äKyJˆMÈvš2ҔЫ”ÁÖ§a³™p\æÂÛ ®î„·i=Còo•Ö¬x7wãÕLŒ×$,YÎÁ·ò„„)N~yy ßó=O Ýž“<Á<ßæ‘𜆛Ïü,3nóï˜ ø -VQ-(j1?¨YÇ£%¾c³¨bŬ„/ˆy«Ìð’¥F¯1Ù‡÷RQѨ$r=¥Æ HÄí#^G„kL³ünª –ïÏb<—C¬æ:jÿ4¯Å€ÜÁåË«x챓òØckæ±¾¾‡cÇvñö·_@³yׯçm‹ì´äƒÏ.ƒÆ#<ç#*óÿÙÍÛ·îÇ™ ¸LUÞ3úÜd¹ÎuVOY¥ž×ìÜíð¹)}q˜t®Aö†v¯ñ:·™Xt¸§¦r£¸Aëº'J^®1QFpOÇÁ½•0Áó~:Àn˾xÙãR1œã˜"&˜eŽÃ‰î¦ó’¾ ër¿¶p£ô÷ˆs¶1aáÃ+RÎË$;ð„g+ZÜÁ½iãi™¡¼òZëoÌ<çj"Y z´™¼LÈ1a ƒffÄ?c6xïÎÓï§Î½°É1”,¹  š ×ý;æÏDŸÅI¬\žË\ßšx¡Ž<;EXøÙu¯…ä}³„ì×à x=y¹ï¤èÏ: îæçòb<Ž›šK&è’d‚åÇy= †¼Âu‘×°öþ;Qux ¦¥U|«tÏÏ+¶~0Ðd \Ö íÔ)‡S§4ð»xQpåŠ%2«Dïîb¹R’Vã[-  =©¤©nW°½-¸ï>Ág>ãÉÎ":…¬();I4ØÎ絓Íj`zù²aè5:p@P©hrÑlbæÏ¡óNœÐ9ŽF2Ã÷wšÀÜa.ã“ï|\ªî<¶Ú‹²°œwFGžº†_ýÊí’^x\+àëëzük×|<(çbaApýºÑ£HÕ‘D4pítt †C]ScJ ‚• ëž$ºNµšÂ}ÊeÁ:ç½=ý»¹©ãÈçuÎz=Ï Pð¼Š^O«õå²®ƒ×-/ëõ´ŽÕ~ËEå’|øƒ‚¹üžü¿_ªbk´Œ;‚%'=žñ8ŒH}à€àöÛu^[[>ùÒ} ãÛÚÒý—/k¬\V>N£¡k4™(|ËÆß逑 9$¸^¾Û£òº¾£eÿ‡ú™BÁËÞZ"¡I˜/Ê̯%Š”o‘:ABó5qÀ¨£ºsR¦4¯‹ ÈtqƒÝg$šLw}íÊ'%}¹¹šxç¾ÜT¥dD îñ@Õ¨¢š:€gbÁT4¹pe_éËl WX¦H™>¨T.êJBŸäì¢/Úºù㪒¾ÑÒ KèRÚPc>´}„C|é÷´-ÂW üÿ !UVe‡ f£a]™±AYàƒ”1ä Và­‚/¬dšñÙ|p^„äi¾ˆ—ƒó4á’>| jr“x5 Ø÷‚ªì0xŒ-H l« š; F ØÍ¸®Æ ê ÇsÝÈpA¢’w²NXÙ‹—â\ÀÛÞæðæ7ÿ5¾þõ[äÉ'm«÷ ¼_Ç&gǯs,¡L°UF#®S(#: œ¥M¿ÏÄúó<¿ Äç0Ñù:¼Z¯6€7 ³k„o 7è Ò&Äûw‚õ*ˆ˜¼¹£AÞ’À¯Ä|DŠ=ð»sâá —™¼V¹ŽsH¯·ŒgŸ½ϱð®bîÅ]&¥÷<ã‹ì‚QÐ-!d Awª `O2þå«ì ¸—D_«Š”ëW‘z¹óÝl5_^нWÓÁ¸Ù9g¼#÷ *RAw㥌›™3^¡k½È¿\âñÒsVnOŽMw4k6½"O’hÅúïTŽÂSO))·ßªý(üeoO+ñ€ƒƒt¥’ I×êô{u’¢“ØØpxßûð°æóZÁŸN…±£¶`qQ»kkæ®.ãý>Ön¿?óÓ?-ËGâé ®^… á$‰&wß­U~倦SȨÔ£x| ÿë÷?ŠJrÉõÇe‰K"‹¦»|ù€üòýÇ09F°³:¬ÉÉÕ«&{«‰Vµ ¼éM ?3÷ðzݤXu]Mš7Me1Sÿ ]ç8Vu¯NG0 ÖÖdæb öö—/k’£Ð4M^z=GÒº³VÓ„Ã Z–d¥©?ÞÆ†B¯œÓÄpaAºÉÄI¹!ïþ®rÓ¾|ýÑ2öv¦@¯%XZv˜›“™·ˆ©1űW‹"íji‚hA½v¢ÎÓ„¨T²äÏw¤²YÁî®àêU¡ü¬v'º]Ì`{f’hë¨ Ž&êð태™ãx¿¯ŠhÎige2Ñq8g¼íä+1c§È!r‚Ô YséÖ`,“IÈNôw“0Ü:]`,g„À<1ãM3xONþëà&¢bHe ©™ à HGÀ¤ãàš >è!E°Ú<‘ÿ—èæqO @Ò’ ‹uÿFsÉ60¾ÈpËÚÉ^$S‡Ä^VIÐfŸð…U/wºBG¬.ò±C‡ñY¥Yøò*sÞV¶é2˜*ÁC„LÚÖ aàs€ŸŸ²"¹t1òÄØßç êp€Ý)ÏkÄæeB ÆÎ;ãšÍ%ÜŽ×껆 |±,kQ<ÌÍ:!9QÜs‘R¦×8˜c”•Õø·Å@0"7£Ïà*‘8®ÈÇ?þ„-ü§ÿô6i·Í~ÊaHžÌ(€aõ<­ 7cx×o!?Á”›: ˜V…?/[yŽÁ©Ah ‹oÜ1«ùì Á‹¸Wæ(×<$çï±]çádîï±øŠðD|’0!Ü£ätÄÝ/Úù28‹Üfç¸*Áþkq?®ñ¾jÙg¹ %<ùdIvvJ¸ë®s¸ûî ×n×äòåݧSvÐ:¢<žLÌå»x•{­ÈýÛ¥2ÔœxÎ͘Á즖ͺO¼Ÿ2ܯ}ñÊn5ª-EH„§›¬Ì¼±ÃI™×ºßr]'ƒ1 9 Ç9qê 0M8Îå·é:;ž»ä—”Œù,YÏwèÊJ sü¼ÓïšÈ„÷ÅArhLÁÍ’e Øeþ(9%”$GƒóÎð¹fÝÒ¨TíaŽ)Ë{hät¯¸ç²‘®] ¢I?ù\?®ÁµoóÓæÞ®‹žó,¼³÷žúTÛãó ÏëL…B\g—â “ÀUv ­{9'êëaIÜŽuÂ"Àõ ›ó³'•ã9Vì¸×CòÆ‹ªo†äýbDb÷2Çzµ$ïþþÅþØŽyµ„g¼bû‹Dî©ûÖÜìœÓ›H(^n¬7såEcDX;fš*¡5InýMA{ßáÄI]Ãfì&8ôû‚rY¡c£‘UÜS”JfçfÁc­¦ëÍ:ôznÖMX^VÏò²Îqìpú´à*áªdd“åÑD&ŸW¯s²8ÖµkµáQÚõQŽB‹ö÷ ïÚ2(U«™"*Ér¥é–DzùÔÄyZ4Íæ´CÑé8Âé,QÒ ýÈ‘TE6t/õz꿲¢´JÎ^\ÔÎÆtª$|çÔ1“qhµ4!0©Ùf3AÏÌÇ%“Q’ºñ/”Xï§räfŒÊÔÐÜ Ç1Ó=åf(±}qQ÷~¿L‡lžÇOÕ㣳«öéJ6çŠÀ4—b²”äv­ÐÃÓ‚¤c3`k³ýœã¿)!@_h©#¼ˆsdwõÓm‡ÔüL¹&qÀ†@VSLŠ€k Ò u>S‡(UøSf$•#HϧˆŠ¢ägä"à®:dn’;•”éF Äùo“/°Zêea³¬šµ¸CÑ)4¨Å .p‰k0GBwžAù&Tßߤ­zxATªkÅ%BDª$€<4E#>šKÇÀ Ÿ“‹Äö­âÍG÷ˆÇï2€Úf ' žGÎ+߬@-Ü;N×ä º{¼.sÝR§Ð…*ƒy¨§Ã‚ÓNÂå É™¦¾Êo*Vóé{ßûœÔj×ܹsë¸re¿“á8êðxï2¯ÃQm—Í'ÄyØ™éÅ„Úø¯™¹UOÜÖØ)1©Ò€JÊyDZ#(ל^ëa€5;MÒ “Q3 8E{Lì6é70dÐ,ÎÚžLàM ó†Oç>+Pœ e€Ö€÷-Èäö@è]§óž Tœ,1k¨@¤œ>úèœû^|ìc_ÅG?ú r¹7¹/~ñ„ˆÄιë$Ñ7äÖp;Çj÷îŽûœó2ï«”X¼ÏýÙ%iÙ`‰’Œ§L€ÍqÚ %«œÛ ­©•`Öá ÙsÞätOïa!€"š¢T3õûwÂ9RªàUÒ*Üï&ñ¼CžÇ ¸ŸÍ¥ìHªÁo–÷dB(Ø”•ú:¯¡uˆ-Ñ©qo9·E=:rŸYÁâ½FBéÞ=GH]ÐÅ(˜:ïÝ+©73œuÜœ®É„dè]Þ#žsxRļïvï ùœJø¹ ¼ß*NŸƒÖË8/a<ˆ!ç\`²3ÑzŽÏqôðqšÜR]&I] oTHr·ŽÊïŸÀbêÙ'àÍ»x½$ï×C ÿ!y#€G¥ßfb»øn…ñ?dòÒí7bí¿=$ïðÿûVùZ@½$ÌÕ¹^×÷Ò%­x&‰Ãþ¾Ñꌭ\ƒfÓ–e2Ö2™¨ÂS±( ªU¶VÓó-o>ûY­´®¬h ­do‚V«)A|mMÇwñ¢&ã± ×çþÕ¿ÂÏ~ò“øµ?ú#üŸúÖËeyð³ŸÅùGÁÁûîÃf¯§îlVp挓I™¦¼õž‘|àýçPMšÈçrhw†(gcüÆ“ß+ßøfÞáÙ¯º-àÔií†llè\:%^O§ÀÑ£:÷NGˆrY»Dæb.׎‡à˜ÌªÁ{T™KaC™Œ&'[[Þ`n4R¨X&£] ë Ú)•¬{$äuÈŒOè˜E4qŒ"Ux2â÷ÊŠªv‹‚ޏwg,%âÜÙmÞw•–Ùá~«ð~j<³]ÃoH½’›¼ 'C^e!¯ãw¯t>yÖ 6‘‡ánnÎx­sv/Hh¢€\þÍ7;çãž³ÂZTÖSƒr­.keöúuSpÒÄÃBç<ÆÝµÓTëbQ0 U‹š›Ós¬¯_øø=¹A…É9‘ À©SÊwØÛœ=+è÷U%jeEÍÊÏüøãÎ'ð¶~I¿/{Ï>‹ÒÊ Þý]ß…ßzà\W*Á™3jØhI"2?¸ª|çí]ù¡û®¡ PNè÷¦ˆF)þã_¿>‘\|Ø!›Üz›åçÏkàÛlÊŒ<^©·Üâ¹ý¾’à÷ö”3Ñn{e.ƒ¦ ‚jUábÕªãØ1ÁóÏk@nëÖé(ÜJånÞf¼‡RI“¼lVƒls»69×(ò †ñ: .–É($*I0#=·š@¶$ÕIË}ð£ìíáßÿႌ[}`eIýI67u•Š’öãX;\««šlõû Ëzþy½N"š@˜!žº›ë÷†CýNµj …À9Ý+£‘&¥ÎÉŒsa°)SßRï Ï·Èçõ»Æ2r»*£yØUø;3 »oÎ `aˆ#Á]©4Q>D¶¤nÙ¹²&-ûÛ¢Üàž`xê´mä=¡Übx;óåU4UB&âuÏèHQý-7ùÐ 8ÈÞ0÷«RF‚lN“"á‹{2²u Ӫ›·Ds‚lA×49(pm(ÄÃ*ëÁKk‘σjUH@©Öì3¸ØÿâZ!d*Ÿ¼\*¯ìdfm¦/_d•¶Ew‘/vãC8 X‚Îp“s3 ¨Ô¼Íù>3F IDATù׈––ð™§Å 1!xçò ¼rÎHnÄhGœçaîƒþÞ°œ\°/Y°JXý¾ï;'o}ëUù‹¿ø|õ«‹P“¶v@ž-šl(ƒÖa0·,‰±cB“rA%¸ÎÀe/èF5‰GOñÚcf¸õÇuÀÓ2³—E7À½›âÔ€.ÊÝ"T`°jÁµƒ—ÆmÁ»¢gc9h>âóÞ#K$V›¿I%à9 ¬ÅÖ7ÇëŸæb± ηÍëlDrçµÀV÷çö¶¸k×êrçWäŽ;®Á¹Xž~]D6Ä+W “ê[x}ð¦dÕ'?gÓœÐÍëA<·bJ([Õþå܆ÁŽI®/óš®rަ¨f<—»fIÕéÃ0ŽxO÷Ž?Hrò:–9–’è½óó1¯›q2²L0žä3¡ì‡2£ËðRÈy›Üôm…(Ùüiåîí>áA®k[¼×ME<ÁßîÛ"ï…NÀͨ0Ùn@…Ï鉚‘>C.q¿´ùLOx ÷T5謵ì9`5®Y‘>34ìR×öì*ŸKç ƒv#W~L.H¢#žÃþô¸·ÇV°1cMñ2Ô‹L†÷<Æ9Wø~iÏØ^¯ z1“Ü„è¥ GrУWSz±_tüïÄÖ9§‡Æ8gÜÌœoâ÷¯ÎÓ©z šhìì8rÝLaJ<<*“q³Š´£ÝˆÉЦ©ú=‹ê`=?¯ßû³?áNûûd[p¬.ãëë •:wN÷åe=)ž¾ÓA:"xëí·ã«Ÿý¬C½ŽÃkkF"Ê ÉåÖ±år@6ïܵ>¾ûž ¼ÿ]}—ËL]CÙŸdp}+ÆOw:®ò{fžgÁõˆœ•¬1‰ 6˜ØE®…é¾—ù¢^qúr?ÈàÍ‚†?kAÓˆ?/[0î6S \­?^t K09ˈƒkPøÁß$LaÑy®óÊ3†‘;o7%\!ã|õºŠÓ§ŸÇ‡>ô„Ûß?†¸Í _ÎBCr6¬#Ð{A²·ç|åÙŒñ®Y0ît UÞ†ý¿DŒ‘ðûÜ+T´¹LˆVDÕ1âä/ÒÂÌàºN¼Vv÷¹6)¼»ö çép¯m["ÃÊ÷VÃy©â9Âbêðfb#~®T—œ÷”çrÜ«eç‘Î. õwx_΂mx㲘ãJaûûÉ'çñ›¿ùN÷ñüàe—$S|á ',áZ¿‰p"«¤Wm?ªb]±ÃÎ+*•¡÷ÌL‰<ó …ÏŽ†øñ£Î5ìÃCâLY­@Ÿ{fØ=aæv½eP»>¯é0èìì³-l†‹ðªi‚ Çlî8A¿–L°£@ðaìÿ6!}éírÝÊL¶8ž«œwûçœãY&Æå0èUŸç˜2A±ä*tP²\û!¾ ß*ò0ˆÝ!Þ“ýàÞ¶¤»âô9VdǧÀã,ÃK8÷ }Zæ3Ìñš™Ù§Nö±Óû¨ñ“?‰}àø§?÷sø£Ï|F¤^×`8M€bH À¹mü·hãï~4•¹òP*2Äǟ]À/ÝšÓ°y˜&:žv[ðÍoz¨R©ä縰 Æ€OÊfš”ÉhBµ¹©ŸQ…%í U«º.ûû–p(qþÚ5…¥©&y£‘¯Õòk hÒ`NÜæAâ¨eÿj4è_TÀ¬K`JU• pè~vo…Š1Öç·ñ¡¿ŸGë\G~ã÷#ŽÕ¹*¼K½Ë—u~•Šþ|oÏ;­›ïGë>*uiªóôsÖE1gxƒ”™H€‡óùnƒ¸U¹ÊÍ|?Ì4o84®†‡Á©9fÞ#™ŒODü^6¹ÛÉDŸÁe*ädKÀµÐ³±&í®>ŸctG§!*™ÂŒŽLˆbýyb˜ß¼‡BÊ—í<ùXØyH4˜q 2ÄÑšL¼ÐXòª"Ùi¨WG’ò%5áCC7MD{— à†Ú-qeRF†Þæ9Nñ…¶9 €õe·Ï—옂$àôYÏ•Ì$x¡Û±·àõÙíåo­ /ƒR•ø‘©-±Š8äñcñjDAYä¼ógÁ8è~LàMÌFÁk-#2xT›ã=Tþ *R„—ºl8ÿ°CÓ H©¼hs=vÄ åG~䬬ìáw~çÃx\cTH€oÂ{+Ìä^ÙﲻQ ’#K 6Y|eÓ³Jœÿ !yç8Î5þl^+ʨyšX÷`>^›ðÝ“Km¬MYq_çõbwÌ9/ŠçUX!¶Àý çT#¢ðYƒë4Ïj®ut&„ÈöÕ»C‹Áõ6ò´€#ÙÜ,cssÝÝvÛ¹ûLÆ8w®ìç*ï™A :°ï-Ѹƒ=eûÊàfFÚ.²[a‚aBÇø»Fp•ࣷR›û% à~`°~YÉŽ¤)ƒVëß$¥_ƶó*)™kØe rú‘Hƒþ™wB†Aô(€í…‘—¦¤9 Ä€”éˆ6(¤L',06iK?—–5¡q¦ÿžáKÚº*æD|‰/Ó_`i€¥7¢h™xcS89¼L­£0…‡)™ì¬I;J')9 Z œ ƒ\ Οðû•)‰MÕ¤JÍË”V„gƒÎF)H@$À¾Kà/~ *òÁç-1±9áM»ŠFr Že»ÆˆäÔ© n»m/ÞŠG9Îï_c°U‡WíJ°µƒñÁ _„¡œ`€½@ÐúA‚x§òå ‘1âm&ý h6·ùþþ¼Gʵ ©Ûç±–ƒàÅ‚Üð\!dÏïe”y3ñ³õ´À|>È^d²ë(GŽøš¬g?RsAå¿@O†ðµ$àà\æ^/à±Çr2™¼ÿø×ð?p ·ßžâ~áíH’…®Uò=«4‹ª-y6Òü4ÔÛüùB V¶|¦Èà9$Py Vt™çY *ìæsbÉ^…óßçõ4~˜=‡Ì¸î2fœ+“]Íò»Å`¾ù  0<Ã,a·ç™ãÞ¹hÜ¥ Á»´sÜ‹U&Š]Žûß»A—g‡k] ž5–d™„´%ExãCƒ²5á¥r]i[æ¸ÎrïgᥲÇ¿¥Ë¹•GÁõßïXˆfû­ÃãUá%¼­0`¯Ç5ÖYçç÷xí:AᤌÍñ\–|w‚BˆéEÙ¾<à^KÃýZ͹jý«1šûÛ4güÎÙx¦Ddj;iêý¬²ÛéÜhÜhpiÄn%òúŠýü€÷óŸ7ò³&,÷Üã}ðêPçΩ9É«6›*‰šËaFd¶Š|¥‚Oÿú¯ãmÇŽáMÿGð/ÿí/àç~ý7°xäˆû…O~û—/ËW¿q8¸ŠƒÙü‹?ƒO~¢‡7ŸØFqÒÁ“›äÏ5äK|îÇ@<Î>«‹¥%MÆcï¡áœ±Å¢ŽcqQ×nkK;Ó©þ÷tªçŸ×ï?ý´&I{{,&8õ|0gsó©0éÐÝ:J• fJP!‰Ù®™þu3â}©¤ß)—=G!›5oÁ­·êüLÂvkxÏw|GŒçŸ~ûwç!•‰O Æc=_.§IA­¦ßõzìîzòöêª^?#|÷ûz íHM§š€™‰ÞtŠ™â“ñZ^îBžŒÏâhéK<ìOfð's!·nA­¢Hﳘp§4â,0žÃ‘~·ÕrUíFÄôY˜ÆZõ²*,d”)WÒàF@Ú ¨R,d‚Š½Ý¦Ve®Ñ"®À€ÍÀJ¨SågÃ*¤1U½Š‹ q5[Ôcç²@÷ ÛRqHVtm\ÌwKp-¾pñAºô­ XO|×dæþ[à‹Ïq<xÎ6ì"_‚=x's«–N¢°û!A‚SSj©Á»W¸d !³õ2ÎÁJò– ’k­ÉðfÄ+•ƒñYgÂÜ•Áu4o‹ 9D%ðÕhƒéîÛúÚ~>e5q ûØC˜›+àóŸ.\X…'/s-®0±X&”¡#>I3.Ã.TÊ3'~¯ ¸>}&]õšS ã†çoòçF|nxŽc¶Dª,Þ3åÎw=Ð-¹´)gI-_ *ÎÍ (›òX`€50e¬ #s¾] DŠA—ÏÂsæ> l£à^4‚þ•`¯šòŽ‘ù³Ü/]·½—3gÖqútîãØ±)žxbÓéž§t=(*YÕ®÷@=H~m'âUÎŒG³D¥¨%ñ°žˆ\ë’‚ÀÑÈ›<ö¼ƒ:x­ *56/Š àìcÊŠßÖI5nŽ%põàÞ‘nvˆûÍö×\—àyS‹ gø3sÅžsʃ±c.8Ï%xš×z)à›Ø}›r|¥Àû£tyÆu wÄîˈ:a7̤ŠždÏFs!¿Æç‚í#ÛÛæïø™÷08ÂäqÝ»Uþ­‹îóBЩ°£q]«:|)$b&J‘ç{§/Gœç< æU .ÌPq ëÙ¿‘Æ·»ðí€ ýÿs~±?IòÊß7õï1 3N€HÈU.ÁÑ£ ¿ýíª$ôµ¯é9 %m×ëÀOh ¾ºªNÎÏ>«Á¶ÖvÎ\Î;v‹hм° úøŽS§ð}§Náü¿þ-žùÜÀ±cŽ>ùSÿ³ü÷ÿ¾ó]ïÃ×>}÷SøÐ÷ï".DèlŽñÀSëøó§–ðìãl<ÓDk“P’K×5qi4t,½žÂpF#…he2^ Öø ÝîŠEÓ©&ׯûîK¹ìÕ¤ŠEUaêt´âoó†°µ´$®Pе +ûH›‡†Éµš4«#zéYòT°¿¯Aùñãz¬^O¾ÑÆ-·&xßûìoÅø“ç2ûâšSàè1ïŽmð¥bQϽ·§cN¯szlûÿbQÏ·¸¨k¦.æ:ŸÑHaÊVÖMyU©3=0,aP¶¿>–<Ûºf22s÷~agÄш3Ú=è%úžË°;Qj½1  Éù(A˜Œµ0¦F% àAvOeœï8ØË¬$ CB£öƒ€#Ào,¨•BÂpÜ„hŽ!à¦É(ègµû’™Ɖ*K¥©õ¹c@zÕñ/)sžÞàKÍ óbægY¾“'ŸÂG>R¯ýÚ]ì: BXƒÇJÀu˜ÆÑ :aæóÁóÀȺ¶ï¬ûÙ ø".èZ !{§ ƒÚâ<«Á=6o< à9d…U»T¶óâ; 6ŽfðL<Û—¯²{vƒß5xÛ<÷ÚsÁg/ô°©ËP™ß1€¯ósG¸f¶悵™ £ óà‚ýáxw‚„ª-¾¨q€çÛ :‘ÖuàFo ÛǪ|fwfž„~“,yyž{+€¶­ŠçUM8ãsíà X‚ridu^‰ÌLS3„Hø|18\ŸP²Ã2¿Dµý…ÿýJä+y8àUçÅÎýbÇ|¹ó½1ùåÎõbßy©¹ÈM~îÕ|ïfŽñjçüRÇÿÏ3çlÖ:é·$,JÎÕcÔjÀ]w)ôçöÛG¾ñ LOž?îpñ¢à™gî¼S¿ûo(AXqönæ´E‚FÃaaA9 å²C6«çjž:/“Æ:¸¸u™…&V×Ü:·ãª ö&‚7½i¿rü,ªKs²{UÜïýv<¹€GŸ˜ úWú}­0W‹ÀvK“‹\N»í¶VûK%‡@9VsJJ>xP»;ÖEˆcýN½îy•Š`oÏ¡XT.‹u,Z-ï.=ºYòÕ陼]—lÖ*å¯óhänPCRþ›Uô+ ”k5A¹YÂ6éï¾Û+@•ŠÀóç(ƒ|`‚ü\¿÷™†\|pÏ¡>Rù×n×’¦^Ö°ÎÕSOy™Ý|^pîœC>¯çW¥+íJE‘ÐÌÏÍÆÚíZ—̤“ÝMÞ#î[º&•Çê b¼ /Qën€þ™¢Wx<瀡ÈHÉÝÙ¼þn8Æ#å` w€L´/EòŒz}‡éØüj'uz,(T¹+ Î+µT (ãÜÌåGac&€Y‹$ßFšHHĨÏEâ5)¦`§ Äe ÊÜÔ!}Jƒ°è(d•Tî.ó\«AUòj»É²òºë´²¼É9íL‹ ?½ Ro\>+§§/¸˜AÉ6MßèámÎk•ÉNÐÁ1¾Å˜ð© ™ +{νÞaÕó$¨ä·x¾<·À¡Ì%× >–@ìj9ÀK'\º>˜„ý ¯m‘[í¡SçIÈ €5™›KÝ{ßût: Üÿm”®C? °’»cœÍ ’¿ÀY<Þ}$yñÚúæ²>Ç€ù"a0x Wóº(1p…×Ñ‚˜T€ÛHÜ}(€®ŒçÉÕ y-píªðF†ÞŽ¿KéñP…’QçYžtÊÆðàÝR×àVûÞ,n@…\Ûà4–doSÉ©Ã`®Ï{|‘ÄágpéÒ¿ø‹ïÆ?ù'Ž;ï|oyKEydÞynHÂnM“ë´Æ±·D ·1q÷5Þ¿”Þæ~1Þˆ= úðÕí-&Й ‰´{ê¯OÓüàUÑž‡z¦„äâ &#ާ@ó¼‡ ®8a“ç½ØOˆOH`›ÿnÂËM¯R™Jx]¯“l¼ì<¯©@“–ØOJ|/•ü„c_æõËr­Ë²ìÉs\«%Ž1¶n,×it)ò1ØáñfRÎÎËËÆ. ^óži0Ö)€ÛDÉîî¿,÷íe®ÿÕ y°kÜK‡_P؈9¶}Š=dám¡T…jë`IÞ:“ÅkÖÉtºV¸Ù0˜•Œ^/œ¯3¡À«LJþ6r"þëúc Sðy©?Gj𺽠üå_jÐiDçS§ôÙóðÃÀ¡CÀ[ß |å+Àùó|ærž×¡¤oå6˜Ãôp¨ÕðéT0ãôÑóïÚÄɵG0M€üÿ!*G~9‡~¯Ûßò.”s¿‹Ëûÿ'v:Køw¿2Ƨ ØÞŽ€ø:ÐÞRGãùP,›ä…är:þn׻РÚä\ "J¤v»úÙÉDaa[[š\lmyrt>¯ÇISS‰ò‰jUöÉÄWâ%LtôçæaªLFǬž˜É–JšèŒF‚~_“rY“¿\N½DJ%’åÜõÝ1n¹xìÙøÊŸõ€lX:¢°&3õSòº^‹Ñˆâ#±^ÃV X]U£Äóçõ÷ù¼ç­\¹¢s^\Ô㩲˜‡X……7âOHò¶›%Æ_ »d/ä#űòvCíNÄ…EMÈ7*.£Pl£¾`<J9 P´$eÅ-T˜³|‘çáµ÷_X°ÇøpcÀ™·€ÕüLÐ^Ï[JÔf³ª:%9 ]2u ­Q ˜ìë‹=®* NÏcJTéÓðÜã|¡5ƒ ˺ZPåoÂvÇAµðÐ _†ãf±9ç|ÕÚ0ÆHX›A|!À&÷‚ »% –œ°ýÅ Šgk¹ÇkÇêßÓ «P„וßãgYÕk18[ bfhVźûý6eÊJ½bdÁZ5„„áƒü+d³#<üð÷`gç$DÆp޾73¼| O~v¼æÂ[ >IP¶¡Î1YÇÈ*—u&>WÜÔܽƒWžÙáç,0 +æËüï+ wÉ£Éë: ’¼Œªu^Öx­/’·IYç9FA7FB ¼Ö>è¤dhÍwûfÉX—ãí8eI9?ë´eƒ½œgPºÉ}½ì§9¹pÁáWõ˜û±{ùÈ×ðôÓïE¿½ Ódp(óÙ8 oic]ʶ¿W‘…÷Ö±Db™ë=ó ø¹ r_ îm&Öq¸FåÂPÃ|ÀÙ0µ2{ŽBø9 ‡ƒdßñÙ²ÇÄà$“-S4º /óÜ`…®×œÔü¬yYX×'‚òÄŽp ÆýcÑŒÓÜóä ž§æ½a¼—~·$s&®18YBº¦ÁÚ™OuW¿ƒëo"{üÎ^ ×)áïœë 7Z4l+¸F5&œðÊ`UvLv8§\à ޷… ë¾à*BŒW¹yáÏ_,9ùvú`àÎw3\ ¹‰ï¼.Œ7xίe¬ò76gƒ”|k«ÿ À=÷Nœ\9VÅ?q8}Z°³£ò‰Àõë‚Ï}Nñÿ",÷zr„HD=.\Ðàu0­ø«ÒÑ»ßÑÅþ@,åê%œ½ò ÞûöŸÆ-wýc¬Vß#ÇOý4þΩ†g¶ÿ ~åß=‚_û×=üéèJ?©J} µ ŒG‚JÈÔ¸®^×€¸ß׿£‘Ãå²J¯N§‚^OœV˽e2¬—Ëš Ôj0*ÿ:êú¤©ú8ر5¹z7€îÕê}‘Ïkr‘¦ ³J¼’³"‚r3U¤Á@ý&j5ýL±¨ÉRš* +M5Y»ç•r={VÁ:-àìn}sŸø‰!™þðÓ1¶ŸØœsXXÐó ‡2S„ªÕt½:„t»ª|5?oäo™ÂK%Ýׯkr‘Íêu.4¹h·1“ÕõAþKíí×nbi\"ÛÇ=óÜ ƒ–9ı°³!H˜L¸DUÓ"…0š(_!SÆm [ˆzC Sõ¬(Ã+…©? Úê†Ïï1hˆV§» X®«7ÅŒ ¬^‚€2ey,žLȤĀ|Qu€›ª/F ïšdÕ¿#>$9‡¤ ˆö©+Üõ 0²7È—aà3/€hUáMÖ•h­ÿ¼2Díý œ÷¼ø¤+v†: Ìá"*TåøÂ]&Î<àŸ+Þ½îô¾ŽÚ“ IDATi,—Y ;KÝ €3OÀ*ªðî Ìa-€˜˜ý_üU^È\G(НÈ&žÇ­·^’÷¿ÿ,â¸_ú¥·a4ºÀ}=$å2ñâ¶Çšä>ÔnJ>àÆ£Bh‡ñVæá݂ۜËÎoCôz¬>%»¬ŠÎÕÍhBgIÙ ×Ñ*±BÜy™‘ böã +’ðZYٿߦ†}ïNmàÚ;ñf°7,IÍqïlqþàýñ p̵0h›ƒJõî1 ^â1·9¶EÑßgt±µµ„l6ÆéÓd}½¯}í6·=ûAbH… ãw¤Üÿ)i Q¦µ O hÇ`ÄgK™çNcëx(Ø*ïã¡x%·"×`?Ü ÞüÛ¼1ô¤±û£Çkg¶×É ý,™¼ÎcWÅw·Ù-Yâón‘÷P̱ØÚV˜Dœcòb†ž¶6sâåŠ3„>ŒkBÏ!{^eù²{aÊcLyŒyŽýyv(¬›ÜOµù»s-(Êß%°DwŸ¾¶÷ŠÜcYvéºöÜðh µ<ÎIïÆÝ+%fyÞÏ&&Ñâó¢ÄýÕ‚°ÎâëËk%y¿Q¼€7ªóñ_ÒŸÿZçì^aÎߺo}«µ_ü¢Ù‡)TæÄ ­Ì_¼¨°š$ÑÎÆùóè ¾’_©h0×íê14©Ðà/Ÿ×€4›š- ÛC¹šbw øÚC üêç®àçÿä~’*oG{€Ÿù_þþÿíñ¥?ë`ólX®ñØg ¿° ³©p#Bw»úo¹¬}¿¯r’x‰XSfTá)›Õ1:§IÉp¨P ^ÏÍ’¥ñØ«)éÙ9]·~ßwE, ¶µñ°ÜÀ3˜N½Š”u^Úm=F½®?ïtô3·Ý¦¦†—/k'¡XŒ†g®ba­€ŸüÉ)ŠKY|îK|í÷[,Í ÖÖ4°NËáÃÚM tÒT»=sszÞNG°¿¯Ð§\N¯ý榿ŽÃ¡ŽÝÈá7Cæþvíí0Ù°îIÂDâ†nŠó•ل݉btåQ êgrU¾»,qƒPƒR¤AEê_ “ bæ\»ðåkÝ€QPõ7øŽUù¢ ®® 8‡xäFÚ•ênªÚUaˆúÀ¨#H³*Q›ì2ÐmÁ»r4 Tëƒ*¬ñ,À¬ð¿çíÅ/óhζ3B€ß5S)«pW˜Ï|°J4N W°j|5¨¬wŒ/ÀàiÌ£¬å(è$™‰™™»m²ÂWaÐ… ]^üu&.K¬æƒé@˜lÄÜÐÛøÈG.ae%Åoÿö=8{Ö ÆLy¨Í *tGª„9§t^¬k3 0äex“³*ƒ§ v™[™>Ö¶ÉÄrÞ#ÅHK.La'‹¹E ªí‚îI Þ¿£Âõ ˜Zùr G(Šñœ¬{•” â}c2ð„õKS º21¡[Öyj“ã "lž%–Ô×8Ç=Þ; xï„".\¨á–[:8~|¥Òž~ú-÷ZØqÛçùMžÙ MŒÅó¡-ñ’eRÛœ[>.Iñ>aNc®CϺŽÁÚ5ƒŽ¬u`2Á=µÆ5¸l ®…ugLͪϵ9Èÿ¯Áû˜Øù‡A—"gI5½6Êðò´›ükÝ®¹6öL]íÝ`½³KþÛfЛˆmHxàqޱphÌÕÞ â «ŒàÙ¿În—.“[r=èþb'f FŽÁÿ²½ Ä”Êþ?öÞìG²,?û~7öˆŒÈŒ\«³ª«z›éžáÌôÌš ”iš‹² ¶!Q5„e‰° ð`ÈO~Ðm‰6-=ˆ  R2j³(É’ ªgëµz©®5÷ŒŒ}=~8ßç—ÕU¹Uõ2´hTUfĽçœ{å[¬L…“Œ®ÃÑw]Au9¦½6–ùüÑó£`‰Û"¹nq–îr~{ö±êiþž×w¾¹ù|4ÆÛÜŒÁùÍ›±Z ÜF/‡€ñ8bîK¥„ƒßÙ1J‰&Sµ\.ò.ŠÅüõz„Íð¿cáÊeÃÆ2°¼zð‡øßüfôÎxï½€^?*éLÇÀÚ2ÐéƒxüH8޼‚ÌÇ.E¡ƒz‘–»ÝØÁhµäµ¹KK®Ù‘±¾ïf3)-ÅÎAì ˜òWÂ<‰ †á0àI¥j2‰¼…H&·cð\.Ð;ÏóyÉÏÆ1^¾“‹Á ïf†/9®ùõëѧ¢R ˜M;Û†¬þ‹¿0Åâf¯½±€ý'°ÅB©l¸r%Ìš^ϰ¹9 Žao/ò*äáQ,Æùv»±ÓS­F㺻wãúhn‘èç|tôAïí³pÜYÂ)÷3±Äc¦} —¦`8Š †©Óa@5oèŽrE`6 kK“Lä_ìea÷‘䫬°B’®Ìñ¥/|³x#Ë Ôåäd³ønÊ× Y-ÀF@¶ ³ø’Ê­ã ä` ¬óåW@$¶IB/»&Ïjá_Ò«ÌÔ&.ØôhÆß·Cò(±-/µ!y(äLÚ*œãq&ḺNŸ*/ˈã²Ãæ—C|in†ø«Ê?p…jñ+ĉQÀv“ó¹êœ €§-AlV¡…$™û<+¯ý_Ðó€Œfˆ=v… ®¼×-bë3U|õ«]|êS»öá[ßZsÉN°tÍ[ô'y–æmÛä),38nº„uÑ%6"¯òçwYi^ q¬ßg ¥êëç~Ü I¶·ã`=®çˆ79ÖõT¡ÆâUòXˆç?b°3q÷XÁ‚™áXE Çý¿€h^Öµ8÷;.¡¹é’oÉ>ßbФ$ùâç¼Õ}"ÅŽ’¸2R±R‚·ŒèÞlœó!ƒ¾©%ƒÄ]KFï„ñ¸„ßø¯Ùßú[ÿOøâ_ÅïþîUlmõ¹ÕäQ;©hUȹØâXr qÝ”¸KQÌû1L]Ò8äyòL~G¼?Wê±£‘ ɰîyWܱTI¾y‹ÁiŸ|‘¦K8*ÁÉism/ñ>—pëùû¼‚X.Q­iÊû0ð¾ÎxÞ)’×Ä5$‚ú3LŒyÏv9Þ\2ù k¦NHŸÏ‹ ×ø6¯ñ ¯ó-Þëòè™ñ8k–ŠFy>³•ü”ɃxŠs¾Íkvà ,ëì VÜàó^‹×ç¦K@ßr‰Tª.!¹Ù¯xMjS¼î‡¼î*Ò,³£ax–É꾃ßUÙ­û÷!>ÿ¤65íýG¬ºŸY 瀵þ(p®G]tÎc^öÆÿQÎùý©(j¸z5V§oÝŠð§ñ8þ¹·— :ÓiL …˜| ‡‚%¥*©" .Õ}l.µ K `}ÙШÝ£X½¿v-VÑÚL\&ÀÚj"T‡ŒçŽŽ$Ék¬^ÇŸ7ñïR3*—#‡!’«cgB]…^ÏæÒªÝnìÜ ˜ÃšF#›;n›ÅÀ[|€ ³9·e8”§Eœ³ X –egY*ÅÿG£x©vu»q¾Õ*ðµ¯Åäã­·-ŸöŽ #„¿þ7gxñˆÝVÿÇ?(b´· 3àég ëëѽ}w7&mF4ÜÞ6&|I¦x8Ä1ØØ¥KqŽŽlαˆÆ‚ bvœ÷`'$ßy.Ø9þð½+Ô®R= MaJE±,î¡B>ÆUSй6Â뙃܀ɂ´øï²ê˜c°ll×Ïø‚©°zg–¬’¥¸`L°’³ ¨-2q_²E`¿‰µý!,äfÅxŒ¬„ÜAÒU‘ŒÁ–î}Ìjá¾Ì‚%¥!á‰{–|  £™„äÀÛç:ï¹à0Øñ®MƒsÍ…¼60U\±È„®å¸Â“’\–x"ª@ßf õ)‡{—4è&Ç&/‡¦K@žvÜR%ð6_Ð9B–8ÿCÄàz‹AKMA šÍËøú×_B½~Ç~åWþ<ööµDž2™[üóVÝ¿ëºQÎu*—oKÐŲ*þ}.–È:r&uÓ&„Hm9~Ä>Ÿ#Þs+üì!×ÜÕ/qloòút]gußâykyÁÝc ®@ sÜæú¼ËΣ:GÚÓSŽ·h ¾˜Ü2 »é ›eî­"ï¶ë$^²Äcð{‚?Y"˜—ìL¯ywœï‘ÿ3^×rþ'$ _Ä |—Iß,ÄqÊ Ú¦!vÚ ˆ¬ kî ®G•ŽÕ(%×u&ެÚ.qOé…Q )¨Î°’ÇEž!Á¥è¦Î‹<¦ì ´CJæx?OÙ…k°³ÕâyŸà½2 ¯¿þ._ÞÅ /¼ƒZ­fßÿþÕ ];Þ©9pÝÎ R2]áÜŠ¼‹T_Úᾜ›=ò6aBÛg…¼¤æVqº)ï6;>’¥ò¾Ï‡THgÂ3|®õCì(½bpžñx+|&íñZ¯ó8O3¹þ#&7úXЇ9ŽëúNHALÐ|.óó—¸÷¶Äí2÷í>Ô[Üg‚‰“tÀ¤·,tÀ›!&;!‘Ûå†]`÷l…÷s>$±…K\Ég¸ÅNô€÷Û'Ùi\a-£_ÏÛ,&ä,v™†RÃã¹GÜÛŸq%îñb`÷ž0ͼ$î0_ƒãËñÙ&È`#D%´uÂÑ$¿ûŸ¡×CÀÿŒ÷“$³ûªrö€ëïNþ=©òžpü‡ý+Î8Þù"s¶xÎþ³'ͧŒ×>€9ã±Í9„Œj@Fu%sÞéóQ¹çýsŽp¨X½ÏçÓç›3”ˆåeC¥bX\ºÝ ‡‡F÷fÃá¡¡Ûço6ãßE¸®T"9:%<Çç,ÿ)e‹ñg£Q†Ù,>øbðoT2ärÊ嘰<ýt¬Ø÷û1˜.•âœZ-£V6WŠ LÈǹœÍÉÈþ:g™¡\Ž÷袡׋s¾|ÙpåJ\ßíí¸æŸú”as¸}ÛpçN\“Œ^ í¾¡=Å÷·Í>ûÕ‚ÝÛ^Äßû¿qøí›Àbظdxá`6ËpãFÀÆFìJ]¿n4Ì‹×9—Z­Hbc—"ªBB0&Àp˜Í¹*ÉÃã$q“ö6Îð3{ÈÆ ?Ç} ïŽo BäA1BfÈò†Y0ÌËfÍøž›ë¢’’«¬@©J'|÷Bí ɇUÕ,é·4–²T].òs%K¸]©˜€¬sñçµf”ÖÝ/ã"`Þ“½ Y3`&ƒ¥‚!Ì,¿Á WÑUºº. ©f Ô_L3cGˆ•=cu³`1xšq®‡œS>‹ÕXŽ1V=3:éZ\§"€B–0èò.(ñ{SŽidÇ«a‰P#ÜA0i™Z"ùö¹†×ÐÜqs/0Ñ)ós fë–:[ Æ,K -W9~UaËÛ]ºÆ—Y¶ ~ê§¾k_ûÚ+Öï¯ã—ùÅ,Ž÷y‹IÂ6€Iǯ.–º4#%š–üÊœk‘Ý!o°¢Y³ -Yä)€„ÌëŠê`qÞ þ{Â󗸦O(g1x×P¤â)¡Bƒ,Ž­ÌqZœK‡UùŒUß›¥dYQ}q½Š$Ãî#’šå‹qü’%X2ó{‚ÂëMŸK–Æ"éÒ’%>Åޏ–Ûä=Ô¸F÷¸?2ªõX2l¬ðþëS?<Úý ¨âÝw?k/¾¸cŸøÄŠÙ;﬒¡ÇÏvïwí¯þYâ>Ü´ä¢k^aG±èÖ¿Í$YDä!ïÓž¥çXWB®W—{·`$“ñßy^ç÷ì*ï‹6׿ÂkœYLž×Øag1ð½j ´”±Ëä\Ö+YÂòºlrï²±Ìk»æ‚â<9oXLxÙilp#‹Çßuïç‹–ž·kÜ;UÞÿ¯óº¿ `ÄgðºÅy ™Ý=Åç„ñš\aÒu‰{{ëTã|; ‚x3zˆXi¸Êû£çõºxÀúzìžHÆ5„XÝ/cÇ%„8Æ^/‘Å3’yßûFfÉÐN®Üý~„q]¹Ïx¥oK%à _ˆ?»~ò³­x®bè £þÒϾøãE»w»~é×7qðò;ÀR X^‰2Ãår„¸ÕëÀ•+†›7㺚%Ä££¸.GGRÌŠã,"±]Ò½2ùë÷Ó:FÇøÃÞ>/¼Ê5R Hò³cBŠHPå;¡û¬\¢«23ä Sä=©È€Áƒ¸’öÔË1ç "ÊÊì.Ï@iU¤014ò`˜@6¥J¡KVÂ’%'î WrŸª„u\%°î°ò·YeŸ )(µY1Üd‰|¸„¤Ö’sÿË'Äó"”ç©S±b š"ˆÈÁEÛVs¥Ž2fŶàx ‹iuVT¿&î¼k¬zˬ®ÂÏJIë=/ñ„ñAáx-orÍXɼÂsßÃ×¾öþÜŸ{£Ñ þñ?~ÛÛ-γÉõ,°+8ƶƒ~ô c¯uhê!ÉÑw-â¸< Þbö$çÖüAñzHRÄ‚Þx6™Èh_–÷¡äê’·mºÏ.#%ÃJ Æ<¶Ž;bÇ%ç Rû2î·|HÐE¹Jk ä™ó3×P·«æê ‚é¶B"EKºíöœöïÔ­ÿÈÁ¥¤æ$N‚Ô²"Ô-6Ü—ñÙϾ«W{xé¥ ‡—$¸æGH’±E–uVûs„óÈHPÐ?©UÄá@ò{YB2è1 pjì4^â:^câ!²´œèuŸJvY^[î\V÷Î=Kš’¦ˆö©xU—¿ÝÂq§€ç,='ås!2y…Iþ6¹D7^{v˜$¬ò±äîÝK®[’¥Ýa×Ek¦9µy?k ’´íîõ¯É.»A{nÝïº-%ÃÑṤʦç¸Ô¯rIKðBIànsŽ\§6Ç>;:\ç\H"™Ûs2y<à˜[j+¥¾ƒ %áyƒÒ\4ˆ? ªƒÀ'ìÉœñ1™³›~J’q<Áxðçòy „€éÔæÞù|‚×Ä`4 \64›r«ŽÉÅpƒn³Øh·c ù8ˆjÕæ‰‡ÍùþñU*qL“‰¹¤Ã7$ž»XŒIÐg>“‹^/¹z—J6—‘âxEÉE€YLZRrqü:—˱ã#E& ªT­­Åµ;<Œs]ZŠÉÅhðÊ+‘ˆ-u«zhu€N†ÿúg ?úgsؽS±ÿíׯØáwÞ ØX4Ô#ÄìÒ¥8é4ÊÚÞ¹csùÜCxFq Úí”ÀÅRTä&„äë×.^çÇûßyïçÓî;ù¾Ô‹eâ‚{ÉbÒ¯!LîkO/!™kÒ´€¤IG$^aÅ¥[¯DE„ëa2K¸ø‘ƒSLb3 ÀJm¯ ý`Û@á“Ù3@¸cIÇ>¸ê4D¼¶ ë„A_â è.çPçÜ5Æ‘ ¶nÆQ´Ôv¯:˜‚#­§|Ɖó‚ý9Á¤l$âqŸçÞf%Ùh†¥ %ÇïKŽQ2·ÛœÓëü{bÅr“‰Ä ƒ¬à’“E$ùÔe$_ãx· £hâðÇw‰ÄS Œ¾åå}üµ¿¹ ¿ú«ßýîÎûùÜ—•(• ž äÞÝc°8 1xZåZ¬¸ddL"ø¸^·ˆÀû!¬›ë\{nÝšHè®Ï(°+ÃûEòÁ$…°#$9ew°Såfß’1#îƒóˆ¬^âºì ó÷ëÈ’áÜ$DB·ÌõJHêBk4'¬:QÛŽKûʽ|Ñ’»`©†åù\¨ÖÒuŸe$…!%-loO>ÙÇææ»ØÜÌ…—^ú!VÚ•ÜÉKEÆ•$~Â>¯sETòLV8žý`lJ¶¤—ç5ñÉÂÄI—‘xMK NIåê¢ÌsÛ [¼ ™K ·’NÝE21{0†%V…›„IìóœUü•¿²mW®´ñ½ï} ÿüŸÿ0Ìvù9Uéé,r³o •sUÔEªÂxŸŠu ž°dÂ¥ ý«ö3W)]ãñÂ}ù#V¼W]P¨kÖC"£·È›XäÏùFˆtÜrIߌs]à8æÓ‚G&Sa ßD"‹gĪïsÀ%UM~æ?Ü×1ƒÕš%(Y]ž¿gÐȽrÃuWüØKœóQH2¾æ *#$O˜è«òï| _ýêu»rå½°¿¿b·oK„ÈT ?,1yÜ'w¦ÌyÏœe»»HŠC[–L#}B.~KÛu,3KÄÞ]W<Õ´Tm7·;¼@%¼.÷N“° øáD#ž×ffºwôÜ!M~>«\·&ùꤔS»ÇkÞð]&ó]^·›zñ()°dÔ÷aFmúS0qRRñç ጞº8|tp7K¹%½{ì ©C»‹$÷=ásó÷垥Dþ.÷ø“ÙU>7ÚK ö'®£;³ÔR"²dÔ¨¹wàX’èpÏ“ë…ç IDAT¾ªŸéªs­Zü÷EEêqžçM0N;ߥ¨dgüóqÛ©Ç•T=Á8ÏœåúlšîE®…’”ÃÃäÏ‹çƒûZM8›ŧÓÈß8Ïœb•^Ý”ûŒjÕhxǧà:ªFÅ |8Œ S"bK}JªKÿû«ùqK¥ØQ(• ++;=1:8ˆÇþâ£rÖ›oÞ{/Ž©ÕŠIÐò°Õ6 Ÿû…¾üSìÞ4üâ¯?‰Ã;Ã¥P¤Óv³×øð0&KÓi”ú­× ·nE^H¹ç1Øò$˜W·ë»06—Á曋ú°îçóv0NêÔ1Yr8^A3r|ËoÊL“éygÉéºÃ—<$å©NE/;_Ù7¾$ÕÙ(º$Å,Ϫ”æ€YÝÆÀ¬0kYzQÊ;o+žÞñwÇðþ3L§‚g¬[rOVåµÂ ¶£dÎ’rRëY`€«n–L¶.x–ŸQ…UÞm‹UÞ¡!’êLA–*Àâ£HíiÈDÕ}t’ýìñïk ¨·Xrc﹤°ÊJt +?t{hâ:®ïŒIpÉçb‰]¢eÄJ·ªçÞ¾êƺæ’I÷N]·BA¡ IKópOÞ¥\o‘\ù¾H…§ä:KeÌfElo?k/¼ðføÑ½nÓi·o71WÄoàÿ« ¤ÛLr(j ˜WŒë¦.ksmpï4˜8ª»‘1٧ˆ ŒÜoCvàZT[uó (g‰§2EÜïÆuÜBrð>bâºFòôuK©?Õ ZàÜÔÁàý|`Q<`ÙRgl—À©ë, -yr¼#Dbúˆ€kHjnpßÙå9ûL€d”Ù"?gÏ̉+4åÜ®p_ º§×Î.¡JC&ê[î³Ækv`)Î!yϪ'ŸLó“m«•`Iù<ðÕ¯Ædèå—¥œ__›†·[øÄç ã,á3?lؽüâ¯]ÃáÎX)r…¨êU.G·î˜lñï• pëV„<Éu{2‰IŒ$uÅ‘ñ.ÜY=CÔñx¸íG±·Ï§²²®ª2’á\ÑAš¡4Eæx‡ü}ÁA,ôwqÚe &‡eA0 ©#!HÓ1)IUõ37¤+ñE¢ `\Â$«²?eð´ã_L™Ã7‡"™»ÁàUxè’ƒ9Ýa²¢„®êÛq…’‘^Å‚%¾Hõïk‘·ðÔ‘¼Bš4óêB 2$õ£MKf~5&=þ]^†_‰›±á  ¯ %}þìQf± ý$f_ß&^|qˆ?ûgÿnÞ| ¿ø‹?†ñX’šWܵßcÕ|kÑC"qÏa qÈ9÷]'­Ê9\ã:ßaR²Š„ÓVÒ+ˆ”ø9»Ž½Â¹WXù”|ç=$ŽË.R22aB+ìyP”†ƒÑÔLÅßÑw R§jûeîÍ·pB’7–yáϱ©{jGG.Öý²ÀýQbp>ä1ûS2³Äd¿é`e—¨©£¡*¿ X‡\gñ•¶¸FQílgg Ýî'ðÉOnÙ /¼Žgža{»†ƒƒ5SdY—ÏÁÈñ Ø}™…Ô½”K4,Ý5wïæ\r¤õÈYT4ªrœJúòNµ©é’mu€–¸—ZHîÝc÷|PÁu˪H“û,(”Üs¶è:rKL ¦–$®sL:ZTÛàz¾íž/‚CêÙ2&´h]«g”X†HäÖõ1!:`6PæÞx†ó¾‡”ÈŽ8Û<÷-\g/Ç{bà:Ã;œóšëË£GÇeKɈ8G[–,ñ¼DÄÎ#ñšTð’$·d‰+œó ¤÷Þ3ŽG]•U$ï¥ÏÑÐÂÇ-Á<îã¨æ܃íûœï¯ä~°sŽ•ýØ (£m­¹r¼n·mît]­ÆÏ&R¸’ yZøŠúÉãUv³¤àô r¹¡QF ðUÑW×BÎÚ6²ùß} }œäls§òR)”®^Uç% ZêM{{iNFô·˜L€?ú#ÌÍû=Ør¬n{öS!þË¿R¶å Ã{7ªø?ÿÙöö-ªEMfñ¼ù<æçÐlmÅÄåÎh̯Cœ«YLbBHøã×ÑŽ%º^òp6ŒstÛr®B4tUI‘ìt»Ô¦§H/gI’—•Yd§à‚AaùÅes±þ®ª}+æAHÒ’l-¹  "ã•ê ?$Ȉ¡CKá’…ÞsAG/[½L¥/¿Áß„ÉñY&z@ª´N‘¸Zg§àæ¥ ¯ÖRäëw]eNnÒcK2“ó®’S±àºª€WùÒ]f ¨RPÇuÁ Ç ¨Â.ǵI(FÕ%‘÷TñÔS}|ýëÿfüÚ¯ý ܹÓçËܯä•àÆ‡¿WWEë~㉖en€ý½‰Ä§ƒÈ:sk @g‰ìžsP™²K ÇHpy;¨ã2q8Õ5RÇg‘ûe™PñÚœG×â ŽY¹;<§º=M®ý¿»Ì½ÝæZ`çKﻵû>×\Ý)y±Àuj|çn‡ÇQ .#Âu$ÙÖž»/÷y¾nÝjãÛß.ØÚÚÏ=÷¾ô¥¸vmÛÛ‹hµ‘¸Ž;±,ù[ÂÊ–x]+\ÏUK.ö"1ë>(so_áÞ•˜€<Ä}‘Ú .H|­Õ”×Fǯ¡ sòÍðZ6øóe®QÆdxÏÝ{Ë.IOJ$uCì ”Ø)ê9ø^^¾”sÕù”d.qmêÜ;¯;ØÜ÷Çß{Ž… ìòÞUw°€ä1Qe_â<”°ﱆëD´ôuäž•¾ˆÔæ9ê_ްÃ)Ÿ¿»<îáXD~Æ]^¯ bQià’·7_¨*ºÂ“`wæ®qžãÙ°æãA:ï;Ø~Ìà¢Ýޤ`;üÌù,AØ£ÌùbIU”©$í|>Õ½^„#EwmÉÏÆ {?¾"û`þä½ø~ïÄfö€®B‚kEøP"Œ«[R,¦ÄAÿ‡` ®óùtÌz=v,–—1çrt:©“³³%`s¹˜H\½;;;À+¯$ƒ¾0ªË@'à©ËGøÙ¿^²?ñ%äó%ûWßzÿ÷¿Z GãªEKƒPÈG¿á0®»¼îÞ‹ímàÞ½äº-Âá0®µþý ½âç|þä"<†ûùá×ùB FÑu Ê+.Â]ÓÁò½(º@dâ:žü=sÕºµ©ù"—(AÁš9—¨¾ðf!‘½§¬ì5ø’>bE.ÏÀ\/|+ó®;eÕ+çº+}D¨K×¼BÊR‹HÉF›:û=< Ï=F’¦UçE‰LÛùÂ>&®zVæyÌA»–,6‰ÁªPJG¾ªê)qä$’ñ%÷"WpRäù7oÄ›ù\§CÇZ¤YŸÔÁzœó±k±Æ±è%@ËËüÍ¿ùû¨Õ¶ð[¿õåðÛ¿·D°-Ñ»BÝŸ-îƒ&¢ßÀÀRExè‚ÆÀ`g€dÀ·Î„¥‹H~ÍqíÙ]‘ŸÀš%E›±¥J» zü]‰ŸÙ’EÎÁ_$Hw>RTÊñÚ=È(ZRâcH¾Rƒ’{ö]ÎGdíƒì±ëäÉåy™kuA¸ 7µTš –cq0¦HܶƒÕè}Wm# !¸ËHªGJZªH÷¨’ƒÅEét†öýï×p÷îe\»vO?ý>ÿù·qåÊ/¿œw •ÖykÒbçêݾƒ¥.×!aj«äI̸/-uPk\HŠ®êdéy§`}{§éæÜd§A$ç{Ü?cBäÔñѤ(Ïè1sÝ=í©“°±#Ì79g#ïdlÀu>?†œsŸÁy…ÏÀŒãY¡ÁäS<Æ–¥Â‚ž5÷Ô÷ó–ãÍm«Âõ}Ê£â:/ÁÝCD®XqSçj‘ëö’HDžó½ÇdMÏ™Š»–£”ÓtŸV¹9U~F¼µ‡œ{Ö×-AQl!ñø†L¸•L)É„nûÌ †] `½Hãq¸tÿ u0~ælðœ/ö™z=ºE÷zö4$×ì(eù¥R¬®÷z1ð'ãáíY8AïŸ*ü…B”½Íåb7¥ßOêH‘“À ?Äà\’»•JêÈ”J±+ÐlÆÎK£ÿ](» ·Dœ×xÝÏ•øŒFÀç>ÕªÞx#ÊÐ žTŠA˜eÿÍÏ ñ_}½‚+y»qwÕ¾ñÿ^Â7¯€i»ûñ\ã±Í!Wkkq^wîÄãÇÀíÛñ9>Ù|Žš»:w_>Žï? ÷ë!Ÿ“J”xæ`3çé!aˆ}à1v *ƒ’“¸Ê\€‰{ÙIRrµcW Ö‹¢O‚¡ IYVø™®‰h.#<9~‹ÄÙã1êHÕé¢ÑT•ÉG™ß?d°±ÁÀó.+¾Xå.›!I޶™`ÈEvÈjΔAÝ%^ú¬Ö\š5ì•ÜtNZþRàY°$M›Ýü ;5¾Ø;Hœ–猫 Kܬ««ÁU¨—D›;ÿ•ð¨xõs?÷*®]»Žÿï¿„úO¿èðÎϺ.S÷.GêáO0A*20ÑܺTÐrK¬Pç c“»p&O Uâ-©É…xÂï­Y1Peúޝº„Ä\Ä\°½çª²#—hNƒ{A¤¿¿Ç9÷bÏ%m9§Zeâ%âuÇuUt/-ówê.ÀŽ;S_±ÄiªZ‚À‰¬Ýåz Ø ™YJ`ޏn B78§ƒô ×cd \âgXý×ý=pÉÆã"îÜ)á[ßú†ÃMlnöpõj_ýê-ŒFÀ½{»6›)8T…zÌ„ÉH’VáâˆIëÛ–Á”è¿ì’Ñ.×@´¤da‰Öá¸ën¿ Ê&Ð"»".Ù”YãÀuSÁgV‰IHÆÏ4]à;r°«EKòâ’ä ¸Á »d‘Ì]ð¤%Õ5 O´ÕÑâqîò^2‰•\±öñ„þ·\GDAñë®r_ï9¬¦ë^IN{ÄàÍ%q¯x îYxSÝJÞ‡%®ý˜÷>˜ïZ*vM, ô\ræÕ¥ŒÇÙå”ôª›;uü%%û®«<äý²‹ÿ¨"õѨH%€9ËœqÊœ³°9ãÌsn4¢bÔёͱþr“¡Pˆ’©KKÚíh7}¢QÝq(Îã˜st¬ŽÒ¹†Ñ( Ó1ò+bõ<Žº XRÃòÝJ%þßhÄ„CäçñXA{†é4ñûûÑÝ{2Éæ~Ó©!Ÿ7|å+†§ž2¼ôRäE†B¨4«×ñ#ŸÙ׿>Æg¿\D»_Ã7~÷šýúo¯aûÆÀPè:GÀþA”·£!àdbØØˆÝ˜ýý4‡[·ây£7Hì  ‡vIû´„óakðÁ«Hf´w)U¥ü ÂgH>yKUŸ‚K"&|,8ùÎ Ïs±Æ#š?MùÁ§T5o0È/R«?ã‹sÉÄ)ç*íFkž•xáIs¾Ì è5å"+v5†¬6·\ è8{H2­z9ÍXI¾¾¥V»S½:!cKpŠpur*ÔîçœxÍÔmPGFÄÄ}B%:.Ð“ëøˆ/S—ÄX¬¼V-É¡ê:Ê€,X‚E-:ˆÖ”Áõ®U…î]ùrØŸù3CûÒ—^±Vk ¿ôK?†F >.3q´$ï6‘ÈŸ+T%ÊqhHî8ÇuZ²äûð}^‹Ë„ œŸCàµê9B¼üLÐ"„]cP}ÈÁwêòNhŸUõ1«‹A¢øLœv-ñ’½Ò pŒ¤Äc¹eÉ1[ºV &ÇÜ£ëˆÕñ ÷:`BBÕpÐÀK–8E2'«Xò„2ñè ™)¡²º=$9¶ÇN…̵W½<©þk+ˆeE?vR&“E{ë­«ö‡ø»r¥…¥¥CûÚ×®ãùçsÖí–ÃÖ–º„Éäy×)8â< –ü]€ÄÁ'"/¸ç‹|öì ñSøÍ»Ä{MÏ—שÉÏ.•¯$o;ågL1&ß;ó÷à%Îýˆ†œcîõ)ï9ñò¬àß!\¨e‰sÒçúJÅ.ãÚ^æ3ä6Íø”\p_–¡~Æà_B÷þЇê|οÃ÷Ø×@ð5%‚êÙ±…ÔÝ÷DÍâ>ßãÞZѳÝ%H 8ç’%wùE$býºrK¯Ù<ŸáJŽß-eK{/s‰Ô ïÝ‘%%±)ï‘ ÄÁø;ç¨JÛ9ãÓ>{ÉÖóžï,ÁÈ㘳]pÎów'ÍÙ.8ç³×g äNQÚ¹Àœ ¼é:#);}¦\¶¹šÒ½{QE*Ÿƒñ8©0=¸¢þ(sNÞÑa;zbøŸQ­IÄè Û<É(l.I;D>I·úÁ &*òè!v92*¶T«±kòĆ/9®Ñ·¾µ€FòÅE„ê*–× øù¿p„ÿÓ3«®•ñ;ß¾b¿ò¯Ÿ´·¿=AèîÖ¡?f!zˆt»FÎFìÇÀqŒù|ìbI+úŒÇ÷CÇÎÓù;[·èì³§]ç³Â5O‚2‘¯8Hñ!,"áØAŸRâ¡dBæNÚÏEI­2È›ºÖt/ZÈÂùøòÄ&ã; „$g[ã‹ã.ƒUX-@Îu|î7 ØM‘A]!‹‰BÅI•˜< Y%»Â9)Ñ€%#©UŽEáÇeRz±TYlFÕË?@r³®sþ·yÎ&÷NÁR%»Ä€wÏ)ª „°ÍÏ®Z"Í· hc4ê㥗–pófÕªÕ!ž{î†}þóo Ùܶ»wÇèõzì(òº&8ÖÏ_Gri–jažë6rÏ´ç<â5“á›8D—¸fËÜ‹5~W*vc$i_%.âUu\²–cÛ²$†!®”¸+*²Œ9¿'LpÅIYùÜ9°˜¸ØåªñùÓ@TªÚágôˆ/ºJ}FxÑ€×,%aJpóî¹¾Âûúˆ÷Ð*Ç{™ë$ÕÈuaw™tä9&u~ß³ÔE(s^šó0¤½¯®`IÁ¬ï>l6yþm÷L|¬‡õÌ;Õ‰Óvh)Á*¹‚É×kûÂ$ïó`èÃ9 3g…5„SÆvÒx/Ê ýAœ3>Ä9Ÿöuñ9ÏfÀdÞgη¸9 ƒAä ‘XÝí&Rõã›sxàgs9uŽÏ»XL‚p•JÉm;º'Wk5—‹¿k4âüDÜÖÏ—–€ÍÍèÒ½²ù(»»À»ïÆß7/µu„b_ùüÿíÏt°v hu›øÍo=ño2 oß ˜Æd­TŽß+•"”¬ÕÒ:ÌîÝ (£íÎŽ$n)V2Œ©‡CÏ.²·?¨ÿí:¿ï?áɵÇr®íí«Áý=ïàM‚óH9%¸6ü̽yט,¸îŽ9ÆqÃ1}? ûrNÊVP¨ a$mÊåÿoñ%>fÕ¸†„±óMÅÊ»ñýƒq‘ 7ù’¾Ä@ü=—„d |‘Ük’Š•`0$.DÙÍA<µúìÈ­§Ñ3ÊóÅÙ ±òY²¹RP2vëKóJ,ßwm¥ú³‚äùÐâšÞä‹ %"·YU,–$MþkøÙŸý>òùmü£ô'ñÎ;%ŽuÑHl—ç8tóWD2–÷¤â›HÁªÄ½]1’²SI.Õ»0‹,>p·BÞÁ‘¶¼V¹P"þK•O–ºƒÓ‰Œ-ç®Ë÷‘8 E!¬s¾Þø«éöÜ"’ZÛÌ®[ª®²û†‚3uY;n.2’YZ >ë!U“Û¼J/òþÐ=^·UÌ\o®ɲ ÞÄc’8ÂÀÁÇJn~u$>…Œ ®»1F–õ±··Ž—^º‚wÞÉÙ³ÏîÛóÏ÷Âÿø®__ÁÞÞª+ÌeªCJæúz¶ƒØ-XGXdRUiÌzÞIvâ:²‚xv(™*™fõ¸ßÍNïOH„Ç',ÄBž y#z‰güÜÄUQç•v’2K!~¯ëªPþLžuKÆtÓ8 ónˆ%RªªSrÅ®¢1Qe‘w±ˆÁ߉ÏðªƒW9§)bpRá‹éˆ±œ‡ßF öËüξEb÷*»Sp‡Ô†J¬ÌŽCz V¡yVí¦t®óZñT]`'·é VêzjeòAA .0w;Cçà¢ÕÒÿ8çG™ót ´Zñg¹°°ÐjÍéuÎgÿþq—í4¶á0’¹G£÷«*™E²·¼. …ø¥»‘T*‘ã >Æh L'©£°uL È–ñ•ÉðÃ_é`caËÕCôW¿]ÿþÖ"Þyµt^kÀêÕ€|>rSŽŽbâϧä'„€J%Iê–ËqüûûI«×{°Lï‡×i8Ogï"×ù”1‚1 ïÿžpû>ÑñQ@ ‰G yÑž«`NÈåP%^•s i檯‚3©õ_v HŽôYH8ñ«2Jn°Â—¼L˜dbwÉ{.¿Ë—ºX& ú_FRöQZy‚ˈ¨;u•ÙY ¼($·ÛUUAÝ<õ}Wùí Ukü̃›ýv2Ê¡K ˜äh,'Ï>ƒ\UJU‰,0˜š2AéX P§ n+ˆÕÎu$ñœë¼lò³¯!I # Wíoÿí×qåÊà•W^Ä?ü‡_à&L²6YÑ8HÓ39™RÉçk6@¿<ù7ð«ùÏ BFª÷!’lkÉ7œË2¯ó’‰c›çZcr¡.Ê×÷ÓHð§M'Å!a`b9$·g1¨4=‘`R‚ÐTB<ß+vÜ—d“{î=”Ÿ@"\/Ðh¯‚$×YuAb‰_¤$ª˜Ôq¬Þ?Cr·êˆ(!ßwë®Ê¾Ë5_@4Ëœ¦ïºâ„,óšëÙ±À 7Oã5%éêÄè>ÞÅîn¿ökŸ1Qi‘bÁýû IDAT¬Ðï2ÈTwQ’>âýRãs ÇNf—ÕUØg¼/–\ðß`²v N¶ÕÍyØ-±Ô Íx¿Þ%\°€pßåZ¯2YÝe¢wÈñ,qý%¥|k6 1(nÊ=$þÙ"þ©%8ÖïM@}”ßɧ9Ï1¯«¸?‚ë̪͘š¿ÇîψûL†– ì_ER/+:š+ìòvC<æ’4oÉuûi^”bñ àž©rÃùwKLÄTL’¼ùÌA6בT¥Ýû@spÌø Xr®Þ9γÇ$¥Ìõ÷§U?(¸ÐGùßÿ_çNùÙE‚ċ͹Pˆy«u?\郞óÉA©'•Ë0v;")ŸŽ×KKÕÐ\ŠR´¥b|ÎŒFÀ Ÿ ëf*5Ê€áŸøD†Õ'2üÉ/O°y¥‹0ãènÀ7_©àÍ·êxëõ ;@q¬6ÚBLöö"j0P#Ž7—‹k}B’ `«Å"WǺ?ÌëüÑíí &@™K ò®:\C"v{S½‰kA\БwÐ(8^³ûŽ1Dâ}h¸^µ$ç`&$#.µûåã±Ä„çI¯ø” dßDâ’\rA¥ ±SNª~ßD2œ:rm{Ê¡¨»@*sÁ]Í}O¤ÕL¡ä f‚dtÚUd›Õð2a-Äêù«yÁAßer,ά¢6¾¥U*}>Çnƶ=óøó¾Ÿø‰Ž7ñwÿîOqÜ‚¤½à pÏ!úT\að,¸…ÈÔ·¸f ˆÌh‘dú&ÛOrœos«œó»<Æ"’7Tž›Ê#Jp ×^e5´ä›1"DEž S—lmºõºçöض  nüRl2P[¹^÷2I½ÂŸµ9Fpo j"ùÞ-$õ7¯¤#è qÓy¯p}–87ý‰ƒ¶Câ5I‘©àöŒ2 ÛD2³+¹.ƒ`ƒ‚aeîçï ©v­9H›|dj úèß`'H×!ï Q*TTh¼´oŽX±^i?èù°È`vÈý)¹â>“sΫq°÷é]÷|Xq÷þ‚«˜÷ylI"_âÞCtçÞ`²½Å}P`¥_|«%÷<|—ûx•÷a‡Ï!°uUp(v˘Ä)à`gGFzK.GDjfëüÌ‚ƒ¹ÝðŽëLMÐGA`w‘ž-ñÅöÀ'C»ÌÉÛÓÒW÷¡ŒXyë²ê>Ÿš4ùÝße|Äî]¬ !%iš¹—˜LÔxþ±ƒa\û¿Ì@p_ð ‹Îu‰/ÿe*Ýð"·DXú¡‚eIÆrÆÀâ&TUÝG‚U1ø°±ŠÄùöXЖ*×øvGH†wEÂ!u5ÃÉs-: *¤ú5BÂð—yíÖ‘ˆÁ%žKùïÜW¡¿Ë—ú&/òZ¼:_O³ZáSøô§¾ò•ßA¿¿d¿ñŠë¿Èk{É8ïIBg>ç/ðš-2ÐÚdP3Fr!.·€˜PM xv×õ¦:H\¯EÄ räە܌ܹ¦`M—(ª;$>Ã=DmÆàç׫*× XtÊUXña‚½‚›!¢ºY…Õú-VêëÜ“›ô-±Y„rÔù—X¬„?¬sï*ùVGq—°«¢ë(ö,–Ý~“ƒ·¹ùÉ÷dÊD=Ä}¡DðÀUôËüNÕu º–:K N‡;®« ’5D¾dSkîž»ç‚`c¥[ù’í·!Çû°ÍŸ?ÅÀwüÐLޏwuM›œÓáNEŽ©Ä9í†$&0 tµçqEà/ñþê1A> &—±óÑc7 !™!vpÜðPæ•×9Ë#™ŠÛ2å³g‘{î.){'eìŠ"ºß É‘kóð:ëÙÞ@âŸ-ºN¯ºç’ËÞG‚ÇJD#â5Ô9 î>ÛàøB2|-"y·tø¼÷¶àc±È“?Rp(̃þ|8C8Ôá¤ó†S‚ÜpÂqα¸èZ]t½Ï;Öð!Íù4úÃûÇ7çr9Âu”\DÞÅG9gW¼Î"‡a<Ž#u3¢oDì^\¾ »rùµ5ŒzÁv÷1;è„+kc¬<;Ápš¡Ú¨¢¶R å¥ … •2°±Òó›ÃPªŒp¸gøöËKá·_Êc¯•C¯_Y}ŒYyU⳦Պ²²ý~˜;z«›ýAÂ<–ív1wBRµi^ãñ§½}ž=ð¿SuQ!U½kož-òœk‰—Y¡’ù^Áñ!ÏUEªú®É($B¬H¡s˜OHçôäÒbHÜUý„ɯ‡äLÝæÏøgƒ˜á$×ï5í`0£JöÌUÃA—ä2`¥´À–|ÁU¶AˆV‘/PѲªŽ#r¿é¡ãqH>} ¼ 4®mW¹{ ÇM ˆ„ÐUDYÖ;œ÷R¶è‚£Ï1 {3$B%B¸v­ŸýÙ?@©4Â?ù'Ÿ ¯¿.5²ç|AÎÓß*É&“¡;œÇ!Š5î¹2; ?„AÖ×çÀ"Çæy¸JùbHØu4—yÞ]Ι‰wI!Iÿ “.òɉXûZ¤Þ}&;‚ç- >I¶Åñe¼žæŸ·¸—Þb€ö¤¥Î–ÈáªàwsYBšcËU¢ÍÁcÌ%VÀqÿ’e$Çi™Oöyoˆ ^åõxÒí+A¢H\ ‰(lñÛâþ\åwCL(û\£vHËEîmU®w9ç5Œu ñDÚß@ò3¹Éulº*u4BD‚ùå]à™ézMU•çÞßäyŽÜ5;ðDH3IøçïÁ ‘÷õ"×ð€Ï¥yG‘Ý£.×q‘ã–êÚ=pmkø;’ø®òyó +ü~>$ˆ’¼ŽÔ>à\ÚüŽöÈ%^„$‘{äŠ4‡äéÙ¼s_AJ‚î»C&zêœ(!/¹n®ø3÷¼oLþ;jª¤}&()’¸ÁvH數ë&îsíúןÕy·ý<$ïû_œ'9oŸöâ5|p$ïp_îg÷ÿþ´9ûc~çŒûæ÷aÌ9œ±B}’Æã y§9U«±â~tËe0 $uÛ‡<ç÷Ï1ºu§®@4L$便¨uíÂúUüÄ'îØòô;ÈÐ̲B²R!ËÁfÓ`6Èlr„l6 ˜Ãp㵑½öiøî÷Џ»‹eƒ 0`6E@µç1Äu#);„8çãŠWñÏÙ, ÕJ—ÃÃówmÉûA{xt’w8á:_´ƒqÿ˜fÇÇ6½¯±ÀV~ÇR’Pã `ÈïUCŸ—\õ??\W«;¤*¶*¨s9\%2ΗCê"•àX™«H…Y|YÈ[ð£%VWtŬÜ4àî,U°Vùb~›ATQº|!]°¾ÀJÞƒ¨)1ËSVcKœË® –—ß ßøÆ5ûßY`…rŠHrÉEž•Æ}žcå[]'Uó ”ªˆUÝ%AáXí=ò,Í·f1ݽ¯K±Ã^¤é'Š[¸·K®Ó#ùTA¿˜L ²5WŽâzn30<àõY±;ã<#z\· V¶åš]F$¯nqK %™zÀýñ;@â±ìМqó:óyù&äþèž0§ûÜ·[MØfÜsc$ùÎQH~+êRˆs3”›<ƒÐEÊ»¾7‹¾è¼8ç:ï÷RÂP6`wÆëÍq  Êq 9GÈ^àu³XA_bÒåüëLP.Ñ»D†uË|–äY)ÿ”ossHÜáûGH^/2ßÛå=ÖåþË[Üݰ“¥nǀŎ1“À?á ežë2笮ØU*[0ës4xŸ@⤠¸¦o[‚“~—ŽåËÜw“m‘÷ ˆªS…“ú oòü»!ìe—4x®ð><äuПKY‚wåy?P&6ã½"þ׌ïɆWøüŸø…¤·ÈõÛuEª¯k×Rq耽%—ÌìóâUUÝñf*\eB׿5íѰ±À$w¤NšG³ó¼Ö 8ùÔ—ùãøÏοºè˜ÏSÁ<Ë÷ÏÛí°sÎùQÎo0ß‹žóüãk4bÀ<F¦÷ËÑ>êu4>ÏÿH†zñߟùLL.²,ò nìâ½­;XºÚÅ£EŒ²<GSŒÚ]äÆ# Zöfhôúc`2ÅËtZcLÆ% 6J`8KÜŽRQ QÅ*ÿý:~×üQ]ß/Òa° î‘ÓŽsÂØƒë,€/sã¼üêØý|ˆã¸ð¼«6U\…ª|ßy¼ü­¡±%™ÐE¾ŽÜwrzTa ]籑ä!.TµümUý-I"VˆµSϪ98'¶˜( ¸K}jÀàÑSÁe$m*\û¡K’v˜´ŒI ‹ØÎêißÁV9Ï‘¥ÄGXø˺“ìÝ`Ð)yÝ·-%8â(H*·IøÅˆÁ¹L‡ü]?ó3ßÁ§?ý&Þ~{ÅþÝ¿{Á§â?¬:˜Ékˆ„Óm·ŒÿVu|Æ y`à¸ÃCŸð)U¢·AÓ4¤àVk*r©ðùïp~JŽV¨h£nCÙuÌ´Æ{ˆþ:’t®‚å^£º%_C£¶`U âU)Õuîó|{H.ÏïñßRP»‡äFÞu§2¤]îåKüÙËüÜš*#h3ø‚K´Ô‘±;$žO‘ûæIyÊsdÊXc‚9fP|@¹à–ÛGúœ R×| †¦Î>÷¨W¬®¿Á} HTÎRâwWP —ð/°CÐfBs×sƒë\ðY^ë>+Ý‚ö¨“!A ÉÏʈð5vÏ: Â7-Áwš<Ž8Pw“áÉÄkÜ ŸBhÐ|—Üþ,jÀõ’ EÅ…‚U‹cyÎuÜú\8*$?{›ÏˆgmÔ½Yg ßãøEÒ—œ²ž…S_`B8"ìP°ºC& ê +ùèó9W†3åD‚F•4kÆd®üÉ÷b¤ç'×:ïöæI{ý îŸ#·UnpŽ‚¬Nü´ÃŸ©“8³ü^°á1¥ŠÔYÏÎLü Ìù<×îq^ç‹Î÷áß˲€…£”*(åæFzW9ëñÍYp$±‡ÃY2†#¼u=Ãÿò¿_ÆÖ½1F7€þ!’ÂÐƒŽ™ (” u‡£aM…BLnƒŠçŸóûý,Â) ÷E~÷8îro?Æ9›k¯Ã½¨¤Œ2ce| xœ¡¥v¸Ž3ab"ÓªybH§¼ÈNHÆê춃?Í» Hú>_| >«H¤Ë…Ì1“‹1"”àIV¤Ç t¤3'r^¿’J‘þ.’ŠT‡fV ˆë.yR TpA!%• 2¿jºîÇÄ%zâo xN)R­ò\W݇'æT¹øÝ„ïèe>D"h.†d'œôeAZÇ_þË¿/}é;ØÞ~¿üËÿ);]v® ü*„†ÜäXÊ ´äk¡ÄeÀ MÎÞð†5î‘W¯¹„ñ(¤Ï o/’jÆõXu‰œ®S‡PÇ%ºÁ%‘:~Í}}®ÁAÍ€»¬‚>É Y¡¯Ò¿uL«?b7mÑ’4³ˆ¼üÜ>ǰÆàj—“·.ƒWcu¿D¶ÙyQÀ|@ÿŠmÎC;Öu§ZÀq­º_Æ rÊdj‘cÑÁÍ*¼ ·À‡rÁ\…ûúm&âF¶¦D¹’Aä($Wæk¼–û–üsÔQ¬r”-ÁÉߥ„(\ÐzÈ{OïáeÎ{ÌîqΗyÌ<÷§ü3äO#ø•(êìmX€¨¸DOÐÉ>‚<×iLcÈ<»‚–=Á½-RµžG»„4­Z|¦©£wó:° )º»ÊÄ቟ñ$;ËËm¯¢åîà a3wì:ì®sw ¿„mšróH¢R¿[´Äk*ñ^œªÇQѽwÓójÈgý÷WpñÈŸW"ÆçygÜ—rò>‹1ÚI®Öqè>«ôiÕø‹:yÎæü°9.æj}–µ9ëã”9ÛÇdÎá±Ï9Ÿ7 6—uLä?aï=çûÿà9‡`s…¦»wcP«««@±`ÓÖGß{ÓÝ;ÀDxàûÆcFÛ*PŒÄ"¥X4‹TÄŽE¿o.ñ:ËœqÆû¼Î8çý}ÚsÃN¸v™3Î9çìÁcºÿë™ûHU«ŒÄ’"RÁXÕb¥Jzæò‘˜0Q¨ÐIÕ{RŒ-UKET\`ÅN¤Û©Æ(îñe#÷l¯•_tfòYüݳ¼¢¹±Z¾œÆH:÷‚í \÷‘Ì¢ ¬,«s±eÉÇc]Açl¬Î-±r×vP c…WNº5& K‰‚~ù—¬!yTø30a’o€e|ñó˜ûˆXn)ƒuxldW Øa@¢@hˆH,nâÚµÛø‹ñŸÙáá†ýý¿ÿãØÛË1¡‚%.ͲW,C·‘Œ®š×]ñ‹GÇ9+-V®h•ßSàÝt•PÉØö‘”›2Y <Ø÷î%î9á²ëϱoɨ¬Ëõa{ãPglÊ`ä ÷cÝÍSKÒ˜’ø¬"ÂEî¡Ì„È, &ä {Á¸Â{k‰°Úç8ç.ðì¤È‘½Å=KF„G”õ-»¹t ɘ<åXJMÞ3vˆFf»„â-ñŠÜ¯ž0½…D°"Ú˜H-ñ¾Xw mî£ ï»¯EæˆÍ·Çžw°¹ÄõÚD ÎKëº\±ÅÏ*X´Ä)k»ºTžûªEÙiÝ_KÜ¡<çX·ÔS·,¸=\àýѳ”L¹¯Æ–„D*\« ï¯M Ÿd¢=²t/.rÎ;ò6rï üüZæä}ã,„٠׃ª¾§UïÇQßÿ½‡ýý¬Ð¬“Ȫçå |sÆæŒÉœí±Î9—¦Ó¨f”ÏßOæ>ïœÏ¢*õ0²“®ëÉsŽêVÑÔ®ÙŒë7¯öwÂøäë˜Ï¥RÀhMüjµ‡âšôz‘ Ýïéh}ôs~?gê¢{Ûαß?ˆ9?¤S‘±â7Ï_B ¼å¢­`4çºRžž% Ú†‚t)’ð¥>cµLœr÷&\ä¿:_<‹ˆ|½ÀrT¡©00mpþÁÈUè±WYSÕ~ÕÜÏòå÷.á\SDünƒÁ}ŽFR™ höY™›±Š*Œt I¥ß Œˆ5.{‘ï‰kµÉèiâþ=勵Ìlì<%ênÎk! V:CHÁÊ”—ÒŽ9E¦OqjÌÁ†zHŒ=€z}Š_ø…ßDµÚ¿ü—Ïà{ß+ÃlÈ £d)å'0ðm®ÿˆ×®à¯Ý:«ºU€.±|ŠÉA=ÄjuÉC! ±S5tšÿD¨…ª±GêHqýDF®Âu¸ßjL.2BÑ:„¶”²¸÷Ö\JûjìÜÓó޼.è_ÀF ·ˆ>hº9Ïõê!ùŒxíú.Qnòú Y•_ä5œòþÔµí3èÞ§9YŽ÷O3$(I‘­1ù=îí<ïé%Ÿ:Q~Àû±Ê$à€x~ß9ØA‚-¹9äù Ð^ –ȼrœ¯²ò¯{°Çñ­C?âý¿LžRК–’ ÏU¤Èó[tг:ÍòD..¸ué|DèÛ”çÕ>jr}Ê\“CvZJ|Žm³j.Õ®]Kƒ2b)wŽ;S¯1‘9 Ÿ:i÷Î)²;Ñ%ì°ÏkŸ¹NˆÞ ¤®q 7ᓬÖO¸/T@¨‘ï“çøÈçòIÖuËuªnìÄ,Tpªñº”™ð´øÝ’ ¹qM:¼®êæf–:%»t)‡TðªsÎ}×Êq?<Ëu…Äå2>÷;Þ6¤×d…û´Nã`<l¿ãßg©6ŸV]µsŒÿQÇûQΣ9‡S¾ëœEJŽ‰Æ‡1g»À1>ç@§g½o܈??azðœòù¨˜5Ds½%G'“ø3ùd\l¯}ps>_èQ÷ö=ç‡ü~ö€ã)Q6ç :9¾„W.;ˆÒŒKÁ’é׌A¯ )ëppK4,A+J|a©újHÆN¾¥õ±„„‡.Z"2 ª5b0pÀ*¶tÜg œ)ÙhÌïˆç1²dPµä/ xÇÞãwL°ú ¦ÖxŠ#0åx½pÃŽ{f4Üè¸î`b5$ Ð]WÑ<`EÏ8o¹@ ŽVg…öš¤-"Á]”øëvÕ€)r¹±M§åðWÿê÷Ðlîà›ß|¿õ[«0;@=KÝœ5D|ø”A‰$w?É`Cj9ËHxêKUø; os7,Á}äæ¼`ÏR5_á«– 'KXc»Íë|•׫b1‰¹‰ø³%W…ßcµê8²¾¥½5bÒ ¯‹Uuθ·.Yâ‰Ìƒ#K·ŠƒÙÌxþÀÀLµ÷ÊóL¬à¶È^ãxöXÉ–²S‘{HÕ¶¥Šÿ’«à]ò#.ˆö ¦+Äÿo²Ò+Èœˆåc¤ÎdÇuˆtÏ.YRH»ÍëVdbÇA —|mìx¼¦#&ÎE^[°b.žP‘ç—RÒ’»ÿ¥–&î—àZcvÔAZe…þ²%žêWùÝ&.’?í; k 3ï q™æF•®X¡`¼#HyÀgR‘0yèº9¯qÌŸð|FTyœ1€/"vmåÂ}Äyf‚©ñù¢nòŒë*?#q‚Ö]¢0qÏÍžK(—”§ä92v°*ñØ<¬N©Ÿz6 vÛäsJµ³Ÿß’C–tø§¸ž»H ™¥„Ö,5ð'®“!/ ÈÁ8kUðaŠ)§aÞVñ ç<>N©²Ÿåø§}ïã<çp†Àîã:ç“< VÙ>yι\tÍáQç|Reû4ÞÊYæl¬¤küÓi@©dóXìaã‹°ªèÚ=„9ÏBÎÞî[‹kÎ'u'ý:?xoÛº”áœ+üŒ ;cf™ê8ø2P'C/Å*?£`ZÿiHDÔÀà@òˆ™K,ꂃ„s*²z%u©ÌA¤r®‹’g…VAJƒ¿[c+~#DÕ¨ŒoãU©ÓñÍRœw‚^|9VÙ—¸.wC2\r®³“$0ÕùNNWF|™¥ª«8%Vf§ôF˜€ºùHŠCk˜ç‹vÈuh°›"Å–œElŽ›¡E<÷2’BÕ%^ûy 8§ÓÌ>ûÙ<ùäwqp°„_ýÕË „¼à?N&uÂsßá~zÀå  z¤â"#¬å6+¬¬æÂ’ÁšŽ‘s˜é:ƒžbHÁaY•ïºIyuä8Þ»ȇ0Ê]yÛžþ.;>u³xŒ=~~â|˜H_f¥T×Ddï!¯ó2ƒì>ƪ­*ì‚Ò­+9Gäªì1`]ce½Ã}q“c¾c±{pÖˆ0%59ÞCâuè8r Á즈ÊB+Ü¿[ì4÷’Ϫ{l†D®—;yΩ "3A¬\O¹?Ÿµä+£u,²Ûw‹¿k²ÃBâ ¹¦¥ ‹R­=—ŒHä CòT)êåó¦Ï=µÊß/3aÛã1VØÙÚr0¹†ë8-s- •’‘âåã3`R¯Yφ=—”,°›Ð I-mà:UEW(Y£¢ÓÛ–8^w9Çï±C»Æ}1ṋ!&¤õHï 8B¯hëÙÂçö®«ü+Q ôßXCäx)øŸ¸¹ š¨g}Ÿ]ÌAfµGÕõ¹9ÎÄãáuoð3UKÎóyÄ.å8¤WÛˆ× ‡Ä©»9Œ¸&ÀBþœÕßÇYñ°ëüxºÑœUaWôí¸£vÎŽ»J««Qà‹²¦—+’"S‡ÇœðCXYrÄÜé&RÕI܃Ç$¼z…Çr,cwyž«ŽDWUs…?×z7,쀮钬fIµe/í V±Ë„r·–ˆÄrmîr\×,%jV1[óÀ3Ÿ_ÀOþä¢^ßÃ7¾ñne2¾Ük š¿ÇµyšArŸÍ=þ[úô-‡‘ßàšï³Ëж¨<á R¥\×FDã1Ç=¤ä#g‰Ÿ¢ ~]DzñÕ›Ü IDAT*:èŽ8#RÌ™wé\²&XS{Dݬ[Ü›ëÄï·x½dÚ·Â{HÎÌEî¹;H§¸%ŠEK¦x]Kк¯“ˆä?ÂëÜå>í:²3,¨•¤/21Š›\®Á9ƒ×OÝwñ®ñº·¹¾$hUÑ[܃—xýޏ§Á@ñˆ¿û$’A]ëQåçì¾ ,v¸ pÆ€–é×ê ç¥Hæ’á!¿ÛEâ0y½ ¼Rc[v UÏw‘Ê,u1$·ºË=ΣΟ¿DÌç™Ô¨ÒrÝSqÌ:b µæ>'ó­u~_†v`ºŒÿ*1ØÜÃq¨Ï:bõ·ƒXežXªp¾‹dX6eR8aÔ/1Y#%µ ²sîËùœ#ÑǺ™óžc°ÆïI=ù³Jm´ÎC>K¼ú8‚èÙ^sÝç¬`QX£A\à½8ö8‡™Aiº@Ç+F B¶O¶ˆ†%*_µ£lÖ¡XÌD‡+ æ!BÚØàXŠ)ª`Ö¬ÒCˆhXæ™YŒÌÜ­ñž"`ãü<Ã>Õ˜q(po‘–ƒ”Åí¼\äû9³'4è°i¼d¸¿Ìö@`nk Xe~r.ÎŒ&™Ù;ǽ°bjÌ4ÒïY3Ùå tÆŠf/ø§çBôšis…™š:auÖÉnGY¾Ž™ ôh® >§ÿ‹iJ¤ SÐ.–©” z'‚E&£9&ç²`ÖÚçéª%0æ{×Ïø  eMüåÓîþq·Ñ`x7üwóçNﳿÃÇïFú¼ug}mÄzGÂêe\É‘’³Ñj…ŒF³y§¯É÷ÃsÞâgûÆ‘Y QI³ÑËÈï›È®7ﯙ̅rEË™×tXH¤O|zÃ5“4"sÐ¥L[’&.šÓÞE5f‰,)z¬Wän™CÖÓ€(!({ëµ"£É‚úÈDP+w&³2ƒ^ðË4Æ 4xUq‰cÒ¡1*¸•œ¨$?#HÒyygôVQÃ!„Ò9Þ®êb.r¬e$*ûQf{¬þE<2 çøþ÷‚÷ÊLÛ!(9¿N‡aÇNz'5Knxö)¾®,…Š­ &B-IÌ4+ÃIóª„Àô¥hüâ{mcà"0ÕMf¢Åö"h£¬šù¡}ÕŒå4b¼û%~‰«%yOÁ /ðûÊ(‚3Äûïæ\í2ÖD\‡™~[Ec¶R(Ϙ¬Œ“/º„Àf¶ŠSI!h¢h¾KˆRQrÕŒ dкfM 7P+ `Æ´=gæúªY/ræTÓr—qÊT­º•„ €Œ"0rÕó¯læ°Ét #èøÌC]¡*‹¾ Ú,‰&?«:’%³ç%y?9a ˆÅ$×áï-3ïM P:=ef%Ú\o³8oö¨Žû*éÞ³Ív"°­)¸àM¶umÓ¹ÑÃz=o‚0Þ2€@ÿ›ægkîeƒVrÚïÊ›sELƒ3ÖLp¢oÎ+9¢?À4×6ûiχ)3ík=gM#KS{%ŠÏÍò[¥/½n}«ô¥W»ŸÇz>È®}ÿz}v·¸Ï7Zì}µûá:}N܆>ã6ö·°Ï¯q«û|½¶ož²u=<êê}Žk,èvË»Ý}ÆméóÕ¯½™ç|­õ±8âVûì7¿Ÿé ‰ˆ_\xÍ™®ôÌ=m”6R„Ë…4ù娰 ð çâbR¢RŒ+:t­žés•‘UÔ|Kè_Ä·?ÀHnü4âèT͇¨Y–toLôeè ÑÆ&L4®ÆÏ,"ÆC 6±ÂHXÙ‡ªGúÞös qñhßu—d‘ÑEp•YÂCR.Dö‡e’JÏʆ,ÒÐi8Ž’S1ÎÛ*Å#ÒÒ+˜B€{e¨R½¥R?ÿóÏ!•êâ¹ç>‚åeÁ‘ÒlGŸõ£ŒŠ/Ò0ŠL¶(Ãë̲/ƒ¡œo2j¤#® ?ïBqwqDwXuÚçÙ_ý¶x¯  Î üž¥MrîTµMò:Û™Qñ¶¨B¥÷Ñuñ}Ö´^ÈH5íB&LjÆ Ìh•8—Ä+Ú\b–Ú*ŸWßÅYª±0eiº,žßËפdžcNÖMEª§]ˆL—Cœ†­±nê_ŠÔXu1X›Ï8˾·¨¥sXO=Â=G‰ ·¤ …¶‚³•YS‘6s«Äy’qú¸Äõœ5A N3 žáü–ø^ÊÅ0IhÜ™=¨r?XE ãM!Æë§x”Ò ÒØ²ÝI“PpšNYÝ‘ùË<›EÓüv¸žûx…ë áCf¦Cex𙋖¶Â1Ükœ“Èm ï±*GIôÏ.8=Y„µÕàøjœrœÛRµîx JÞä­tš}nçAŽ^ÃÇ÷×ÎëÈ@“ôü&›Ýçù™>ë èºàŒú¸ûûEÇ\pDtþµÜs¦8Î=eá×ÛÚ)Ü­éµ>{£Ø¿…kÞjZÖ­^çFûìßá>û÷XŸoeûýM>ûw®Ïë3[í³»ÍÏyã{›%!Øìs¾^ûÝ»0·o⽄ °©r.îÑX±©î‚‰€ „4v—‡´à>øÓm5«"×ï#LuÆ<Â$ÓÙrl¹â‚ȘéAÄ)ó"ÛåM–F¿ÄbÛí)„ê2ë ¬Hæ’úË«>0âtLñv™mXð!zÒ!© }œ¢£Õ`k…‡q›ã}™XN‚ ™28U«ñ™ù™mõ$Ä…“rzrøÈG~€ÑÑ:ŽÙ‹S§D\2ÌŽwÃÇŽMqÁlÆD-Ç·5Áû¨¤à¬¢¡ \Úä½Vi|J¹{ÅdÒ4äHaCViч9WgDXNYÚ‡RB€çLö#+ÃÄDd—ø½á; ÅЙ¨±íÒUÌdÙÇN‚(?Óˆ…cIs ½e§0ðuc-!ÀS¤¾~‘¯#Ъ."P“cWÃzŠÎ*B±»Tᇨeq«ØçcÜÿ<×bì§.÷9„¶eÍ(O¡À\YKÇ¿M,âí#RnVÝÒçŒ˜Ý |]Gžë>CG«àœ eh×$³>ó 5­xe>9v‘ÇS}Á“¤ZnC»K&úŸåº˜×­p.ŸcÐ!G§Ò8‰ “õx§†xC\¬ìé2tÄæÇY2œ ó\[Uaµâk›½<Ã=[7¨M>Ð2wL¦úrV€c‘ñë…VSæïî†s¨·áx’ãR0k»Éý«‹¸ÖKkOûEðÜæ÷ÈÍý«ž‘7Rƒ±™Hæõ"ˆ7Ïp7yß­¸•}Þj[nuífúr»ûìn²Ï×¼Õ}¾Ñçv+ûŒ[°†n´Ï7:6·b ¼úœ4)ç´¡ð+"‰=³A{ctYªZð—ÃâM#ÃϯÊ0‡´ê6äDHœ©ÎÈŸ"a)“J‡ù¿g4l/fÁaNò@šB€ß µååÚfX&¨i æ+Æ8ágãBÀ_#Ö£˜¥´Ãûe^Kþec(ØÈÇ)Ljð*¿WåïØS¡å³KqQtáoQ\Vðìó&‚©ÂãE8‰pÑ9d³uüÂ/¼R©?øƒ{±¶&aÀ µ“‘þ"bæÁ‰Äò£"ÙŠ1ÌeT(ËÔq!ú:k¦®0úi„ˆ²Œˆ IJ1¾FLTZ4¯#â cìoÈ2Ò±€ )¡ßod¿{Œ'™Ís¾õѽfæá,ÿëÍ0KNvÃ:”‘.…⬩Y5óTµ?ÖWã;ƒZU4Îø<焊±OJq-!1"¯¢ÛâL‹` ÓnÇu ¢v±IÙgö˜UàiªÃÐ^²Ä±Q}—M­¥ãLk.íD ãýÓœ+ª3³™a‘_ìã÷k„/ñùÊ¡–³xŽÏfã®z˜½X{nÉ8æYÞ{œ÷HgLBr–[æõ5“­Ž «ÞäÂ!ž4c)ÌI×uÌxÛ´EE—9ÛÏ15ÕE«ÕÃç?ÿöî½€ÙÙa÷ÉOþÀßÿ 6’I‡bqÝ®G»]B÷1‹uÎÅEËÎe/ÒÅb…Bù|©T©Tùüòy‡|¾‰D¢ˆF£‚ÕÕ"æç‹H$ú¨ÕÒXYqp. ï³ÈççJù|Ë}8—Ãââ4šÍ ºÝE,-•páBÞÕj;P¯oG¿?üaÞ7£VF`©ZD(Þï À©Š&#!8  Ÿ¥Qа‹¹ÃîCДPFŽÅçâ~~A_¦`¢½K…É2¤óˆqéª3Xä|’Aš3´¡ÛØf ÙÁ̽ó¼¶5¸—Ãx&ØVeHvšH½7”mF“AL\Ø×m&¶ÍŒWÙ¬)­á”qвÜ'”¡™â؈5«ÁëdÙÖĺ-*¶ŽLt}íŒíŒ‰ÂØç¾1àE"p!Ë2`’t· ãÕMv·nt6«njˆÏ cæSËd[Î#®ÙJç,bæuˆmMs®ˆ|`ͧ¼Ù‡µompŒÎÐ ‚Xb’΃zrWcµìÂ½ÓÆaMc=ɇœRoæqÞd+²foo[sÊoíŒLf·ýŽØë l·ràn…âqãýÜMD®‹v×1pÝ}~Çû|3!á;µÏ×z®7rÿéóÍf"¶Ògë‹_Þî>ß*úå[ØgéLˆÉEÁ®îÎ¥— Áñ·yt€dÍ›a!hÏíÂÀGæ@Òa”4ÿWÔÄ('ÜzF%±ã¨w7Å¢Þ4£&Â6…?]6}Väí,bŒy n)ÏV ±e(é`ï hLÒYhzàa§iÔ8®%s‹:µcñbŒ¶ \ià “7àqŽaÕÅ”’èº!T*d³M<ö˜ÃÀÀœ÷ý>\©tÙlQ$F°Þ;…Je ÞÇmð¨×00àñä“GLvñâ‹÷¡PhcyyQäpéRÍf 33I ¥}29ì*¨×Í. PXB¡ÐD¹\‚s)”Ë‹p®D"‹T*‰D¢‹tH&3h·Ç}>_C>ßqÅb åòYôûŽ÷J¢ÑÈ¡Z­ Ñ(àüùQ·¼<è÷>›]q™L ÷ܳŠB¡d²ŽJe™LÊ7›i×ëÕà=Ðh$á\‹‹ûñ Ãþðá=®×S1p 1´kÌf'ò÷Xãb#çb¥ª±V Æ¡žá{“œw§øü'Q^B¨˜c-MÃ7 8.ç¸*Vû¸-iŸ&)Á6E»}|- è°Ôx¯e —i¼JŒ°KQ´·øùI—¸Žš\?5Ä¢e\#Iöˆ6¡4*¶mРîÇFF¬G\oÓ@œa”cÑ2ó1¢ã ‘ËŽçhšøí(.2 ULJBaÝKt°)ÃŽfŒÃž _ßd òˆ‹¢;>À(àŠi“ô·Ë¶‹-Ïc;a2R±NùàÎ!ˆŠ"W0ÉežUÀÛˆÙá¶Gñs“Õ%λ³[}:""ì:àëf¬QäpÕd–ÖC¤²>žWS.¾Ÿ›Ú>Z4éôõ °27:>0g‚êð<¦yê÷:WÈ@lÕîÌ™àÈ5ÏÕ«Í×:×Ù@ï'cÓþÀØþ Ï·¡Ï}+3wªƒq;³·ÐÁˆL„Tôª]ã@$Ì’H™Œ…-ô–ѯºŠž‰+êÕE EUi ëý!¾o#vim`T*¶APÐMºØ¹€ NE:£¼vÝÇkA‰{žÿœÑUP”OQÍEt¶Œ“0Mƒ_EÖya‹xm=6%|MŒEƒXÏÙßæu$Š&‡ª:R©:’ɬ›šÚî÷î]ôÛ¶UÝ®]5 ×P.7E ´Û%ôzyŸHœsÝný~ÎyZÔ. ´,ÖÖJp.~Ökk»Ðn15µ€G9Œ—_¾ ñŸÂìlQ´ç–0<œÃƒ®!Ц11Ñð•Šwét•Ê ¼úýz½qt:㈢êõêõ}Ò¸xq:..\(bnnÞ{t:y¤Óy ]$“±woSS«9‡r¹†B¡‡L¦Šn·åææÆýk¯ô33“îÍ7óH$<†‡=‰6 …5t»SþÃ>놇«H&066|¾‡mÛºX[‹üÒ’w/¾x?^~y'ºÝâZ‹¢Q_æs_uñsPFBš/ r;ÒE3gª|¶»87Œã|”Ù‹!nr¶·™ [ÇüÞd;¼"d-“iY£³(æµ}fM±Šs‘ÆÞ íaT}`¸RÊ UäÝG(^Î:“ãz)» s‘GÐzi˜íJ{hx­w´·#êË1i5îã Èh4Å™1.‰ FZtÇÓ|O{Ê2û<⃞‰%R ebUÓÑásʱ§Æµ­šž‚ÖŒ2Y“‰ê".°.#vŒ¤ËP¤Qå|ðˆYàÒœW#‹³ØÅ°2!k>f£÷¯A^g'ƒ#Ü{^ã˜K9ÞÂÚV×"}씀õ%ª§Èšýv‰Ïü2;Ÿ³`Ÿ6áqMr--ºP¯Ò¾–ömµµo‡ƒápuH̵:½YCãNt0Þ­>ßcÛŽãíp0Þ¯}~·2ïvÖæýžÁØDŸE“i£Í«¬ÑŒöüú®ë÷4 paÀk4($^”ÝÝ#"ªÙ1^ovÃ!Ýñ–P×fcÿm¾?ȈŸ-¾ÜÀæ´ÂhœðÔo1R˜Žbƒ/É4e ñ9¶mŒì%„éK¼þv~~…Yå`‰N•ÙŽüûƒ““ ÊÔqä0‘ÈcçÎ=¾ˆBa<²†ññÈ Ô¼sIŸH4\»Æââ>\ÀââÚí úýºO&WÜêê6´Û-$“%f*æsÅÈû5çý6\¸ ý‹”&=PÄ¿þ×_A¹<‹?ù“ŸÅüü&'ᡇÞÂÔÔE Wá}¹Ü*šÍ=þâÅ ×éäpêÐh Âû4êõ),.îD§s—. ªÕG¨a™ÐófôxЃ-r±°[¹ÜXC¡°ŒNºûî«úJå¬ï÷›îÒ¥qüõ_?ŠW_}—bľA;J¥6víZq?~8º÷Þ3®X¬¡ZÅW¾òw¹“'ó>¨ŒÏÂ3š¯:©Ò7Iu9ဵ(vF´.q¨ˆû,1o¢È 2cqáyWt[<£ê%F¿W=iLI ›Œâ1:Åy5ÊH{…ŽŠXµ¾ÏÌA^´¿>îc䀜kŠÜ‹Fu̇Œã€7•õ ƒ>î€û\3{ú¶Œ`XfL ¢Îè|—ä*Ð×–SdTˆ#èuÿ ‹ü|èªhs&ë š‘ge'Æ9·k>@Àrï´‹a_@¨*ÊÁ¢ƒqÁ(Τ¬š,¦êÄÌ$'Ik}ÑÇšc„åxb(g’ãÝ#C“Œ{»ïU+Q(È÷³.Ô›L"dˆ‡}ÜÎí¤q>ޏðѯ×jr¬K>f§»h²ÌfB¦éÈ-1CÑâŠQê’ÉôHô¯@§LºÍT]fˆºI»3mœðw>ƒ±ÙƒÜoèèVŒgkkcÜÈw7s« ðÎÔk|Ðç;«Ï·:3à¯âx¾›}¾J﷪Ͽ›¸Žó†|¦[·Íî_|^zi/ÎKÓ9Z%Ä¥‡ÀþÓäüÏÑyëú@+AF"êR 02EÌ`¬°6b¦`>8Šøùu|¬á¡ a#Š 9e“t&ÅÚ#’€„z Ìp½ôU‚ +²æ€=FϤ à †¹±ù}¶%…@6æ³–žIϬ3ÕLH…]óAÏ5''ŽÏ«äbÇ)Ë9šv€b#YÒÊæ9~3f/éÓøf_ô¨ D¬ð%¬$b§b§B–uÎïœ>æâñ8CÙÆ“äðˆ%o„sZ¤ e¯÷ª ÑÑm ºUDœ1HÒ“êö4™Y]á¸&¹7KodÅÅk½ÌçÜs¡ >ÅlÑœÝâ¬Ð®f+´/O"®)¾—1PM)×Ïó~bד¶ÎûÒ`f¬Ë¶8ó|Öt¿ »ó2\w³¶¶ n*ƒq=˜Çf ûkyIW»†»‰÷®•=¹„W1,Þ«}ÞŒsãï€>ot>ü&§;©ÏW‹Î_«íôys}¾’ƒôn÷[ØGLŸ9mm¸—u..×#’вÑ(„¢ë£JΈ¥5i éÞEP-ÄÑÙ1l÷A+"ÍìJÛ‡(žœ6¿?Ç¢Ü$ÿ)::ÄZFÅ8€Cˆ!3Õ(nK1ŒªÈÈp’ÎÉ •3"(çËÑlùÀ³›M¡(5íãú4û¹‡ 6UâÄ×h8Ô}(ÐNó€Þ çžzê¤æ™Œ·EÝ«¯Žãر.^lø~?rÞïðÁPL±ˆ³¬H$â"_µ]uÑGNˆP(dÝøø’ê©ÓØ·¯‹J¥…Ri Õj££=·oß ÎœyÿþßÊ¿õV©T Ý®¢èsp.å¼ïpÌä0Lr¥æœd”}£Ñš2H*ˆqü«|–;e”̓ëjF¯Áš ¬!›ÍàgöÛ¸ÿþ£™ö©TÒ9r/¾ò•C˜õ¼–s±SU‡sx d2}÷wþÎQ<þø1ŒŽ.¢V+ú?ýÓGñƒ »^¯èC]F)E” œ ô$(Y¤ØYžm—q—T&‹ý)ZYŽ4£Û9Ñ8bgâuB}¹®qM “¶Dã_ÁŽ–}€¿ ù8k7ä‚}ʇÚy¨–h ÂÅT±]®Ûï “óØ0į±Êù^dÿj>Û¥²Ÿ]õêŠöpœ½©XuA¼QûAŽY‘Y„z¦út]Á¢ZzÌzV(é#ÞÇ2>8ˆyÂÇ´·ì@ ;ZäZҞؤÁ¯ýÄûÙ)#Ö‡áÑ:‰\ hpmq,ß ä«á×ÓiÔ‹:\YÞ5<¶±0€Ùáesˆ³a§9>CÌb9nƒ>>ê„L]&1 ³™gÀDY‘îƒyŠØ‡Ù–:÷ᎯBP§Í3)r×937qþ¦¥ø}£¶6®uÿ+e06c \Ï(¾šÑ¿ºÒ«]ëZƒ¹™k_ïaÜhÔy³íºV4t«}¾RTöýØgw¸6é`ÞÌ8lõY\ êƒM.Ôú¼¹>û-Î÷­ôýJ÷¾JŸ9´/‹Ø™¾o¢_r8Út$”Éš$Qäƒ&† éE"袩G(<\0FÍ*#—ÂÜF¾÷† Æ¿ô7  ç(fWÂøxŸùÌkxà‹H$òîôéQÿâ‹E|÷»ƒ2øx}©go‡a,bÄün>Ë!:É:ǨïÇÇ›nïÞ%<úè öík#Nù–;}zôÊ+w»¹¹ ?^B*Uÿý·d²€o|ã1<ÿü8‚Z¹gU‚qYR+„T tç-°Ý]¶WÊÆr`/p,sѰi|¢ÝYKÒXb”?I̸224½Ïd¶»O}ê<þø·Q©Ìbyy _ýê‡Ü~4yŸpÁ)SÖ­qYƒá¾ûNá™gŽãСS®ß¯ùoû¼ðÂvÌÎJ‰8ÁI?@Åâ®°=­ólÏ*‚3(f±qEí•ë^û8Þ²Ú&ªÛiÓP¶c×΂•ŸUl›A`<+³08Ǩu×ÏÑp–žAWÙ6”ÒœŠyšY†÷©ÅÃÀ5WëfoPôz‡Y;rBÙDZÌ1 ±BºÌ¶7¹/inœ`¦GsQÎŽæQ›Fh$È ª¥5Ò¢<Ê@JÏÀÛF%,lÕ÷DëÉT³%ø\×@‡ÊÜßÖX71À1ÜϽ0ǹÐc›¹÷(ˆRe°b1 †tËdÆÈÚ„eÍóïçó*³m:Z¢‘ :mz¶Òê3CQe-L’û¢è»ßb¿=EЧœ y½.ŸkÆ8ÙþFм¯u\ÞhvÀÿwÑë­a×2J¯Õ¸«n m¼Úk7Š“ßŠAân°Ï7rß­´çf²·ªÏ·b¬¯÷s£õ›í³ßÄ=Ü{ Ïx÷79Ç6|¸NŸ&”Àz§BŽEÛp¿÷¯˜APWí™[%Œ!ÊJQºª©¢\áAZ4F±®/A£äp‚UD`êI1:±f#GÌ´Š/!àøG\ÀkO"¦]øLÙðë÷ =b~’*mƒÆŒ`1{øùóêæµÎ At¶££}<ûì2ž}öGس§ƒsçvâk_Û?û³ΟO0+²äB¡ö:/¢Çœ!ìë.FÓÎ9=ö R©>>üáUüÜÏÇ'?yÜ=õÔ4ÊåAÌÎNáÈ‘ƒøƒ?¸/¾XÆéÓCnq1 å?ó™Ãîþû«8rd7þüÏ÷ð>ràæ9>i|Éáâó^FP/Ñ©¨tB–\(0®ðÚªUHò5ihÜ“Æ@ÏC´º1¥îí%¤R9fÈf#$i÷æ›÷`fæ &&r=~ô ÆÇ8{6ç€"2™t»—á;ÃÏü|¯¼²§NM¸ƒ;xðÁ¸ûîeeœ9SAÀ¸«@fQb[ ›B•Ì›µ’E€ñH›@¦rÜhT)˸õš3YÄÙ¶ýü\ÕDñû4ꛌèo£™c$¹h >9f»V]¨ßH ÔC‰¹©i¨G¥l/G»‰ÑÚε‘cæbÇfÜ8$«t^T¿%*àš‹ç›`gmÊ}:us‚“#4Þë>ªS)Û¸@Ç'â¾¢z‹UÎ ë"¤X£-TY¯…;æÍ×}†YYÕ„T¸¹žçßyfÍimò™è8w!+$)v/ Àך̦Tê„Øö¦ ò$˜)Mr¼ú>0ÿõ°žÒ\Ây~«¶öf‰X¶bó]ñ{è`¼;}¾QCh+†å}þ@ãV÷ùNÚ»ÃúìøÞÆ.$A\± އ"Ð@k›¥âÌm¤‡!–˜Œ ©´q ¤`=ăjÍt/ SÐ-~zDM“9‘ƒ#HBÛ³H’ò6s¿>‡*}gãœ%Ä7ÂHe‰×›E¨+@LZBлx¡]z*.M¹ÀÔÔ\µKã'~b>ÚG¡ÐF«•Å׿>Œ^(Áû9Ž[ÓD™“ˆkHé¸ÔØçÄ 5)>çª65åñ‰OÅŽUlß¾€~ßûz½ä.^܉¿ú«pò¤tFÖt½s:ï+øä'¿‡Ï|æ0––†ð»¿;Á"î4€!ˆ§ÉE\`/é Ÿ³DÜãóÑsZåçälæùÜ倥åŒJcÚ3ïEe*…/z ìy䇨¾ý \D·ÛC¥Q,¶|>ŸpQ”…÷-$“=LL,áÀyìÛwÞ÷ûI÷ïÀ›oŽá[ßú0¾ÿýI×éHn!«çÝðp×ÿÄOLãé§„d²ƒ7ÞØƒo}ko¼1Dǯ„f´ŒÀ¢SáÐ!›CÐDËÓ*™¤”I[àølp7çWD§²Êè}ÇÇu.sƸUÃ~œ¦(§fçïÛ¸ŸF´2iC_ªâ]Á³Š>ÔÍÒiäsïQã¡g˜D`|J*3`y:™ËÜŸÚ‘639‡ÞÄö‹Ì:“¦ö ã÷†¬ {FBÖû&§/O'¹fjÆFè¨×Iͼ £Å¡L)aN :-÷òšgø¬UO±fœ®‚¾M‰Š Æü”Éöˆ ªD1½´Ê–RQì ÍiߥÃ!r Í©.ŸÉŠ ÷¯!^WÞÇí»‹÷M ¾æ¢3 )mrl{•¤iÄŸI‘>úu>«¢q,³lk‚sÝ!Þ“ºÆ¹’¦KÆ8ZŽ™ŒèŽ´µoÄÁ¸‘èùf‰[a¼›??®}¾|å½"Àv+ÛöAŸ¬û¬È{´!:§,DÒD¡d@ sžÚ°•¤Í!”5çFÃdJ,;BJÞdEÚæ€ô")Ū‹Ó_‚zºïnœt1Dg;ââØ%»Ë¼æ42§ù½¼g•ŸçwŽÓ Êa½fÀ8ß“4xbƒ|>…Ï|f>˜A±XD¿ŸÆK/y|õ«9t»]q¶Æõ#Ó<‰þ•Ø·„ ¾Têâ‰'xôÑ716¶†\®‰z½‚ãÇ‹8¾è¿õ­m®Õ*!PG*b>`Åb¿õ[Œ^o¿ó;÷azzvtœŸ­ÓP³Ó Š}ÆÀœC ÕØEƒy;?SA(}k„åÉ™97K#[ Ç±ï ‘@¡°ê}ô¬ß½»‹={ÞÀðð 2™&ºÝ úý ‰"Z-‡^¯…DbÐjeÑj¡\nb||{ö\@¥RÅÂBgÎqöìÝî›ß|Ì¿öÚÎÅ:ï¿Ä¢ðÊåüóþ:î¾û,ÖÖÒøwÿîç17'Ý…,‚¶Š¢ó Žo›óé˜É JAÐ.e*ÞàxàøK«Á‘δ`æ›2€ª=~C¡¶¨Ä÷T`|žŸ¿1dê¢îA€üÔ™=ðòw!"®è¿ …Êp ó³mv¨ Á¥VØO-+XFˆ²Ëi"Æù÷؇´Nù ½1øQ7AÁÄÄꤟ*k»©Raòª:çŸj‹ZP(1>óý“}@€™¥3™4™¤qöðy,£~Œª—r1sÕ!¶kÐd@αïi¶AÏV*ã • 7ë"Ð)'Ùçe–úf?]æØiNwÌ3;iöõ¶ÙûµOœEQímp~,›¹–¸šƒq»ìÎM_ûFŒÅ/oôªÞ+bdïõ>ßî(ïõ&÷û±ÏwбýãØç÷@Ö&c¢œ—~nƒã¡Âg9%~CäYxh#-“á(ƒ:k¢bËÆ)èüù W¼9 溃Ì`¬ù’ÑwúUÅIF#_c4n?E§Š3Giÿ¡0y„ÆÄ4@»{xPÁSFìÀœ 2<ÐÁ§?ÝÁÔT ÍæÞz«‚çž«ãܹÇ:½aœ4üTxš4㙥á˜@6ÛrŸúÔ´üñšÏåœËçgqüøÃ8s&‰W_Âìl›‘Üœ µ(M¶/~ž…ÂNüÆoü;vœÂ‹/Þ/}é‚¹I‡rÄ`䌑٣Sö ûRæØdhIˆ¬Í cp †•ô\øÎ€)$“-ŒŽ.à±ÇŽar²ŽíÛOº‰‰Eßn'}«Õu¯¿~.\Á‰cp®‹D"…n·ê»]¸dòn´ÛÓhµ†HÄóºVÛ{ïÇç>÷ekˆ¢ªÕ„+—þÍ7wâ¹ç~gÎÔùÌG‰S¶D¢‡_ø…âÙgcff—ÿ­ßzÚ5›u )­;:›‚FM0ã3͹¢ ߊð“¾1ÂòfML3ú}”¢³¬;9„XDOèX´›æÚYà}÷#vN–¹~²r¨Í—#p‰Fo›µU>ƒ9ÂmÄ…øuŒOµSsSú *À]®(ž‹`±2× Ö°Ö¨ôcÒlë„ëAªºK<@*æŽ×j™5$¡œñ6 îâñIùàHÿ§Ã¢ç„1²Ÿ\&eµæ³2>R.wƉpÖ)4k£Â ÝÿÞÅõ4‡ ¼9άÎ<ŒİÃV² $sÀ«¯1ŽïŒÙƒ¥Ñfƒ*¬gÑÜâÌϪkŸçþ#hU,nmîiX¯Ü þ½“ß­ë Ø@'Û5ë^µw]SwòŽf0®{¦n2R³ß½øëw«þâNîó;ÝßÛy­ç>ãƒ>¿+íÜb͉ÝÛÉ$à@ÊdôCâÓá°Ý|_Xß¼1*„ßíÓÒ± Ã¥ô ƒ)–ã!ãAP*ðz%~^4ŽÖâA~Œí]&û’ØÐ§^?¬šEdO!@»ª&2ßeô½`““}üÒ/Õ05UF¡0Œ7ÞÆ_þe§OŸ° çÊð>Ïk.³ÍÛLK3#m¢Ç»%Üu×~ñ—11ÑF¿ïÜoìDZc?‰_”@\Îeà}ßá®Ú߀q<öØ,öí{‡—¾t#X‹Ÿ@€7È œáøÔÙïIÄjŽNÐ ‘c1f¢ìc|~KÓQÄp\Ž8ïßßÄÄÄ<õÔI žA±¸€T*jußøÆã8wn»›™q˜žîšHýá,Ÿ³êÔÎ‰Ä Þxc¿÷{?ø¿†n×ãøñýؽûî¿ÿ$î¿ÿ ~ô£»ðÜsûqþ¼ˆ â(mUñå/ßÉÉ.œvSSËxûíâÕ‹Hè®m2c£G9f&ÚpÁ"?»€ Ð|šp‰ð¤"‚È£ŒÚ!Šº+ˆá0ËÌœ8"ÍVEŸí @Œ$”9À×Z&2`O"/Ü1/‚ó£…Px=oÆ1íbˆîklgÆ8芘;+ìkË´'b¶EÙSÕˆú7m²‚Vô³Èñoð™,!0x“‰ZQpš6Y„bhÕ“p¾5DøÊ´Íƒ—ë+º4Ä›ÆÖ]Ùà˜ôM6w–N® s±ƒ™âßÓfÏìoˆ?õL0'cœ‚5ö[m¤Îóµ ö÷ÁS&;§ vÓìm„z³Ÿ­ÙK™lHÛ´WŽÞµÎ&÷NŸ­)|ðóÁÏ­‹ðóÁÏ?—ÕoÙfU­bî¼9¬æ;™ ¢¼‰¦É蔑¬,IÓ0×k (M#ré_Êd'Ú&ƒ"&—ít:gyÿq~F™‡2Ä]¢Uävúoó{Î…2ºw˜G> Ï>ÛÀCEÂââ0þË)âĉ,¢è4Ç$ï&Ê:f±U ±íª»pعó8>ùÉ}´Ž~'NLáùçwãȱÞ$.;?Þ×hä,ЈSä0 |øá·ðì³çQ«mÃW¿ú°Éä~ó<ò†G™ŸKì³Èû8Fcˆk&Á5QçĦç&á}ÌÔU*¥ñÌ3ç±oß+˜šj \^A³9€…‡S§îÇßüÍ^,,L¡Vk3š+¬¼ìƒ" µ²qÆd–tEç8;¶ _úÒOã×~íÏðÀ¯ã÷ÿ'°gÏ >þñÓxâ‰ïáС7ðæ›wáß8„ z"8×÷£xþù'°ÿ7ð‰O\¤ƒ1Ë5¢¹:wÙ‹ëEÇv”™küÍ"PÅÖ™u8ÇïOqœ8–9Þç"⢺qþìï$ßuè.Îߌy®ï¹ÈëÎr0Y½Ô†ìeÞ˜^–‰i˜Ÿ—;ÄkÆ€Õ÷'¸n­{ f5„@– ˆT“ßÉ|%M&µgæß|.2ëU¼¬ `º¤ýj !KÒFÐë_¯GG9²àzD¨ÉCPŒƒ—6NÕ¿+xY×|'Cg¢m²4Óæ3¢~N˜ýO΢œÄÈd{mÐÈ™÷:f–Óbkëªæo9Z0Ù' ®š5nï#§© #£µœÙOÔp»Cëãƒ>Ðçúü¾î³Íb(š&c&J¨l‚ÍdÈ`@(`T´Z”9c À‚9“ I!à«£ª˜hWÍD[eË0–s ò*èEP˜É“ U 0I•w…†NÍDá᫚¨¹ Ÿ Ê8tè5üʯœÆà`++Søßÿ;‹_œC­¦¬€â v! ³ë¬«XxÇŽ&>õ©î¿¿ƒ\¸xq7¾öµý8rD×hÑðÈðß%Eº kd?c† bñ>ûÙ‹èõ*ø_ÿëC¸pA…Á2Ô¤Ê[7% Î-CB,JwCZç-茊œe|Ö9®Sð~ •Ê*žzjO?ýC”ËU4›]4SøÞ÷>„·ßžÀo £Û­"@³æLT]÷3G Ïè»`´7Í\°ç8ztŽ9„Ç ŸøÄ›øÃ?ü¾ÿ}§Ÿnᓟ\ÄCÀ‡?|/¼ð(^|q/¶Hx=:†……qìß?ƒ©©}¸pAÑ|Eâ+ô´£Ìä,r>xˆ1ó^2Ñgk0 +¿ ÖVÅÓ‚ò 2ÃpŽßY3Ï3k2Q**Oñ>U“qКÎ"Ö˜X¢9h²‚kœ+Ec@ËÉ6DÆ8EÛøú´yNÊd–MT\ÎÅ"_O›±öß_ÎH­g?3µ"úÎ=VLô?o yþS$gö9eO"Ž› ü•YªÑ™“±ü6Äa¶å’Ù+a2¶G×2dL†¡m:ÒaY4ï¯ $ôt6ÊÌPÞ´_c­}Vs©µaßMGqcÿa ‰bn7N²œ–¤9j’æÚ=„ú“–™‹ë™÷ߟ$€ÿ›ÂÄak”U¿{µÏ»M¦o®÷Þõîçp}XÃû¡Ï¸NŸÝ;Ôgw‹úŒ;´ÏØDŸ7~Ï_cn~Ðç«ßóNè3n¼Ï—!QÄÞ^VÈF(•°™¨b#.§b𬠴¶Š¸u þ»îbüwÓÅ÷J#Æ'gMóÒ J:ð.~›ë˰qˆ¡Ã.Â,••a ¶¼èÖÓ鮘pAaÅDçvñ÷)¶5‹r"G¦­èªRî#©â—~émŒŒdñòË{Ýÿïy¼þú<:CX–],–EÌ%¼ý.’¦ýŽ#ŸŸqýhÏýÚ¯5ÜÔ”G¯Wtÿçÿ܇ÿñ?¦XdìÙö9Ž…7YжŠZIs»ÈþõðÙÏ.»ƒ^~yþú¯ËpNFT1ç‚‹±Þ£4Žd€ˆª·âT'Ø“–¨1r1n¾çb¡2=g](®Í¢TJág~æ˜ûûÿ|èC¯¡Õò8zt?¾öµÇÜ—¿|¿;zôwéÒ8¢hÉ9WGÀqwM­Á0Û]5Ž¢Gll'Œ–D Ü%†Š?~>ô¡óîÀ3ι¼{óÍÝîäÉa¼ôÒn¤RE70ÐÆý÷_Ľ÷.`nnÔÍÍņ_¿ßÄcA*Uv‡#‘hÁû6çIÞŒz›B€ó»Û6fænŸ¢®‹×‚…vÕæzA HP!¹˜Õ&¹Z⽫ˆµ1}O»“Y£¶DÚ0Oe¿&'þ¿?Èv,Ñám’ñ+éâg^u1É‚ ?k¤¥0ÙÌÙŸ,&é‚–È›Q• -jº`@ U&jdpëëÁœ V¬Â IDATtÙM®Ã¯¥,FÉ…ý"Å=Jpµ–Ù×êßs“ã=Ê6¡`?Çû ‚U’Cà#”3Á’Œ¡ánkk6Ú?E¶¥k­×¬i¿jM´‡9k×…~$C˜ 6áB6¹ ñãsžwñ˜83·û.ìÿÊH#†:vM0HDä-mŸýÊSxÑgQôà‰ÍØ7ck_Óî½’Æ­PxÞLÃ7£ðŒ«:~Ÿ¿ÑvßlŸýuÚí·Ðw Úw;~6ÛçÍD¶·"èîÀþc ‹›X¨wbŸ7CËûAŸ×Åmò<Ó–éªÔWSæ ó<¨{Ѿ®´÷唼 ÚÎDk•¹°Åßic(ÃDî¤?Ð6ר ·Â#gÁpjòšÛ;ÞdUmQM€àûT§ÁÿŸ ±Ýf©ýhø}ìþÁ?˜A*•ÁýÑ}øú×ûh·g©û (ï =nmßÅHñ8ΖC‡~„'ž˜u¿ökIÿ‘x4›9¼òÊ0¾øÅÝ8|xX†ùæ§MT_B…ª ‹ópnÀ0ž|rÏ>»†'váþÏ:4‚˜Þ4•‹|Mõ4+4ºRtæ¨Ø,zU9| Ãs.‹l!°%Ÿ]Á“O®áŸý³oº»î:ëÓé.ž{î!|ñ‹?ï|gÒÍÏø(ZC ¬"h@dYì»È{¬ÐqÚŽP«Òqñ˜.›v,²í…Í ×+ãÈ‘ÝîÑG§ýÁƒ§püøªÕ"z½Žw¯¼2ŒZ­‚'ž8æxଟ›ÇììNôû<øàILLÌãØ±neE™+Æ'G„yÄÆmÎÇý¥3–¢¡%½•1^kÆzŸzY¬‡#.s.o£“>Ãù,=™"×Xì¯çJ–ìBMΧ¨>¿Ç»Â99‹OÜÆ{,š ÌË•hKµ¾zVC ….Љ(›9Ö•ÃåbCµãCm„Œõ5j,.DÀ­Øž`“0N]†MͰ4 ÊS5†ÛêMPEެöŸ¢yrF¹ßÆqÐZor%¹Î·›l”²T Ž‘ î4ç°œ±¬ õ- ã0× ˆ*ªé…ªR.ˆ÷¥MÖ³–£ÎçÜöýªd4ûÒ1Y¤„—´G‰²§«æ^]¬gT{tvdÝzGDãí9?“¸ºñ5Ï꛲µ7:×r°áÀÝŒ7s=cÂFÝ&>·™A¸Òõ6²H%6ц+·ªÏØDŸ7óàÝMô· Ïþ:ïm&ò¼•>GwpŸ7¶éZÑüÛÕg\#û€Möy3kþF26I¹û¼Á"9p£^Åxió>\Àc§L6áãCòò4&­iÂ}ƒ"‹‡èÀdLä<Àk¾<)ÚTvÂ4Bl4ôi@x²žÈÐ២aê]À Î’¥òmÑ΃t0–7V\ñl¨À÷bö£}ì¼û{oý~ÿõ¿îö?úÑœ»Ä> 1ú<ÃöŽÓ(`@p–4€yçܨä‘SøÕ_Á“OæP.ðê«|á 9÷ï@½¾·pßs.VqŽ\0f*4 Rˆ™xzN†ëØð«¿:‡T îÿpÀÏÌìrqáimdCb^¢údÇgE.º@‰©H²w@#ŠB_ú)wàÀ*>ÿù#x≓H&ÓxûíîÏþìaÿâ‹ûÑjsú’¤Ó¥LÙvÞ뒢ńÉ‘8Ü2bXXÞ…b]e¥z.ˆ“­^^.Íf™Ì0îºëuwï½çðýï¡ÝŽé…»Ý5œ:5†Z­äï¾{.qß}ÓètŽÝæGFÖÜÞ½³®VKGo¿½Ã6­4ר`*Zç¢Ó|ïq­LôZÎð(b„eF•# Lš[vaI_ óÚGì„V™‘’žtfà‚¡-á<Ñ?·9_äç“Ì®¸˜BvkbÙd’2|>]ΕõlÑÇxŽ}+sQf)2óF ­ËõO4®‹ˆY¸$îVBбHsïi¹íRVÇ8}–î7i‚%#,šä\ŠèlU]Èî®0(P A¬lCd‡:I9Òc›}^YÁšÒü=¢aÑÈV½F“ýê¸à$aß¡6KÖ8™ÆC5&I³_GfoïP“%ËyÖrAQ}ÞÚÙ$×^DGP?ª¹¨˜ý8Ëõë\p=ªz¼Þ…@’2.ÖÎðüOÂm8®n&àw­³Ùᕼ·{Øä¼eê¬ÍÂ:nuTôv¨—ßLŸñ.÷Ù}Ðç-·ïV÷ùVEû7Óç›Qòv7ØçÛõŒ·Ògl¾ÏiqN»à8D&ú”wÛ2_͘Ã9ãžÖ+â^Ђ5Ÿu–˜¨¨ñª"¿'ûX‹„4$g !:&XÉœ }†›¢±ÎÅôŸSlïaö9ë…¨„ýV ãÖÜ?úGo¡×ǾpG&7°AYF(­c=ãÐ …øÿâ”{æ™ó®RÄ… î÷ßá…jµ‡CNN#àÖç0ÇèdÞ…¢jÉ Þ”wÀ*à_þËc¨T:ø¿ÿw¾ýí½ÌÆœ¡CRF 3;Kãd?¢m¢eM¯Óà|NÐGÇiÉD•W\ľ}¿ø‹‹ø¹Ÿ;ƒB¡'Âÿñø«¿Ú‰ùy¶¢ºé”éô€÷¸D£eF—3³¸ÿ³¼FÛ•hÕÐ pÜœ´5dÜŸ8QÄÎØ»÷ J¥>.rŬgÎŒºfs÷Ü3‹G9Žry Ï=·×}êS³¸t©éŽBP(—ªµ wÂø/òÿ2üœÉþy“ð&*]áäXvh<6 +*!vútd¥£5¤¡„ ‘`©SWÌ:-s×…ÈY—1„ç> ãÌ&T•×µ[œwƒˆç•9éeDlã$Û¸€ o#Etïâk¯²íp±3Ròa?¸Lo̽Jú ªcj™=CûEŽsL…Ôªùª¸PD­ AÏdÆ #’¹Òæ9ôb4æªãèòoѾª–IÜ"Ì#”1ä:a92B¢ìöæûª;i"„(sÖã:¨ Xˆ\žÆ»˜ÖJð$Õ`5\ÈD&L†¹{…¸™Øþš¼Fë A¼qjä è3à³O\á¬ön}ѸÇMžå×<ŸS¸¾fÄVi‡ó\ vsµ,€¿ŽÇå79pWëófRD[éóµúu;ú|-éFûì·‰ßjŸ¯uÏ­öÙýöùv<ç­ä7Òg>ÛLÔVû|=ÈÍöÙo²Ï–s@/"¬Á¤Ô¥ÏÐ7÷¼L_‰)PD*áCq¥¸Ø#ª2¬ˆ÷¡rµiøPHšG0|–™f5¦¢qc„Ÿô…„`…†H˪‚VÆ´ö2ê6@Ca}#Þ-FS šÂðp¿þëGá}Î}ç;wûþpî-xŸaŸ÷úØ!¨ó Ý‹Ø º„Ö/áÁBá^|îsÇÜ=÷\ð³³{ðÜs;ðï´ÑíÀ#<`_§bvÖÇhUúìi´ÔÙö½éS âc;‰ÉÉ%|ûÛá+_9äâèì1>AªÎ1ò$ çcCñ ï1ˆ¸°u‡ÎûoI3ò{žã8è€ïáÀ¬ÿÄ'–pðà*òùÈ]¼8êÿäOžÁ‰è<\rÀ^g†FK×5ê–3"uTæk|þm ×qªáyŽAÒDm{tV >PŸB`ª¹¯|eÛ·ï÷?¾€o~³‰³gEÏœPÃ7¿Yq++ø_þåࡇNcd¤(j¸r9%pQTs¡ ùm; j»X”f×ô´} B(ÑXaŸ¥.ù8Þåûó>Î6Uy­1¶ÿ¯¡ïgÌZQt\0·²EÎ5؈´ã÷÷Љq‚(qOò9«–¨Ëlã(Ú× ùÚƒïñ} í-¹Øé¨qžõ(þÖå¾ zß<¨e" ø«nÀ›È¼œS‰¶}ØË2œ[î"SÈÇoUõ¼Ç*÷– Ìàhn–™mèòº;}0¦{ˆ³‘A˜ 3—這jS½;e²=ã@hUf Æ‘ÉÑP_õ¡¦­K˜ã˜ön¾žôÁÁ”þE’s Í>Ëù‘gÝhb\½Êù(-—´Y‹Y:Å`[ú~=ü©@5®Ÿë©Ð7¾§Œtß›ÛoÕî¼æù^Í`ø[Ôž÷RãݪÁx¯öÙ¿Ã}¾sîNÎ7“Á¸Ñ>»; Ï›p®œÙ¸û_ë™ßî>ßL=ÂVÖ»{ú|%G1±…µs;ú¼‰ ÕQÈQè22äÜúˆ‘-è+¹ j-l³¨G›†Y$o"ÇR…pA;"å¼ÊÅ&x J¥”¾¢€Â{ Ç;Á>M3½¾Äƒ«‚gZ&Ü ï€{Y­Ê8uÀ¢xyÑxn,Tì1¢ZÁoþæ8p §NmÃúO÷ºX_Am/’ue¡ð³ˆXb€†Xb{zúé‹xꩳ˜™ÙîþØB еÓ#Ht¯Š^«€^®$ó{h(…"°ŸüdÛýÒ/@§3„?üÃpüø8ÿ$û|’íÛ ài¶ñ0¦%ÞA•¹@C¿„@¼È¢ó,ž~úuü“òx †¥¥4¾ûÝ»ñÅ/þ$ŽW¤¸…P“2ìbƒ¬Íç*cP÷(8í‚~ÁŸk"Ž‹¨QÏò¹å]Pž¯±Ýu~ožÏYð©¸.ǹªÕtØ·ïMœ:u—[X(™žAóóxùåaüÌÏœq÷ܳ▖&üw¿»Çõû%ã 7°ã/c½Î¨ñÇ^‚jŠH—ùÌ“.Ô-ohëûÑ1«qžNm¨˜¡#ݦƒ^v¡à|ç§ÖµÖj“Žê€1ÂKƾ؃ÆÙÖ÷ÚtìdD+?Ìùߤc¼â‚ÃáÍ_¦ÊuìS“Ìv¨æ¦Éú‘A2KÍqL[p¡¼1lžµÆ}0k²(ª ÉC—óBÐ%imHK"Á½§FfŽõ"uctwxm±·©XZ@†D‚ÏWð¸ˆÏˆçBÖ‡:°ýifMØÇ%îurV­&EÉ…zµ>ǸA&8IDk-C¬U6Ì×=3#}ôB`œ­„[AÕ9¡uÞq¡°»Ç>'X¤ÒÆÁ¸¬_bÎ&owõ#Öoöܾa›€1ÜÎÈöÆ÷n4Ûñn×`l4´Þ‰>ßÎ(¯¿Í}¾‘k û|¥¢âÛÍ·ûìÞ>û-:kïvŸ7á$)â*ZÆ®‰R&°¥bÚctÃ8¢~ÕÞ2Qº2‚ƒv‹^C`¬J˜(ŸD²R¦QÓfä­èB·Jf£Af0Ä0¤}t¶*OEÕÉW_<‹=U¢)üãü6î½wçÎU𻿻½(b…-¾È¾J_c†ïíAlØÇEÔ÷ß᳟= ïñç¾33c8vOøÄ¬  9¬†˜AfMÞ¢ÁºÿôŸ^ÄãϹv;‹çŸ/½$–#Õ,\B ƒyÔ÷Ðè|…Î…Œ‡¢ʉØ0Ù€7—²ù2€–K§ðùÏÏ<óœ^xaþøwà?¸Íf•Î]–A†N¬¦Q'+|¶}ã<ÈÙEmÞÇã™c{O!Ô:Ó>ljrsûe¡ý XQª–à\<2ã«Õ¢{ë­Ý™!eÆÐëE¸ë®Sn|¼‡jµçêãÕWw#Š4&z>6úeÀ'}`,— ¿…WÆ,e Í댱&-ˆ®‰ˆÏE¬-ÄÅîYS£P6QðQ;'ª}H v²#Tß™smÈ#†Ô´­BáxFð.®÷;þ ŽA…†ø<‚¦Œêƹ^ª.vËt„iÌžb F‹kÿ2c!7y2}¶UÌjm„}¬gö+ø@·:d²™Y§[Wšã›æzo"ÀÍTßçümòsÒ‘éºC³€ª;‹\ ÔÍkĹž%tlȬ—”‹ŸoÎ…Ì\Šç@Çd‡á‹ÚÒF€²ª­ ã0mçšP’2&­ NDd²ÍÊ:8,JºtI˜ìž¾'‡æˆöölۘɸ‚}æ| ¿½uFê2|6{ýÛºá&7U½SûãnÓøÜ }vï‘>¸ÛÜçwÊQ¿Óú¼ÉŸžÙVÓ&›!ü®¥œU‘¶X{Yê˜(¢EÚÛ<œ–°ž.1e‰êGH*ü¾L]ë‚@T›Qí<‚à›Ä¥Öx¯ÊåŒCPÐÕ?Á8õì“‘f˜×\Ç!(Oaß¾y:´ˆ(Jã?ÿç}ètrŒ ¦Íº†PŸ†¨gCñøŠòع3_ÿõ×à}_üâ=øþ÷·ó^CÆØ^0Ð ë°U8vC&ºü2€ad2ðÙÏÎâá‡ß@"?~ù—éS‚!1cþ¤£"´‹ix«Æù’øß*a÷#.Îô¦w9ÛpèPÏ>û<&'àâÅøoÿí.\ºÔâ,Φá*=Äp.ÕÔØ®‚)ª]E0$ÅVtÁH]0{Etǰó2ޏFÆh´® °Éy›PÃÉ“=4›E÷ÔSÓxé¥íX\”:| *²¿çž%ŒŽ&ñÅ/ù<ôÐ1üæoöð;¿s7º]EÂ3ìcí6]>³:‚è›ê`T#$êoLž¶qvúÆÕ8çU…&8ŽŠÇŽ»Išà3–h[‚ðnüK€n€ÏYónÕæU:ˆ#¼Î0Ç¿o<€S.Ìio2‚Fy~wˆ÷=‡Å³/¸¢454.=a‘bMRfÁ™×’ëm×â$mˆè"B½‘ Eí-”T5i(´O2Æ_–ã„@‚Ñ@(į›×2ü¿æí 2ÌÎØ×t¤r.sxíŒÙƒ­·ö&[t­½YÙ`e‚Tk![d¾ïÍXYÇA˜ì²e6Ó „"{‰^5ögžjE®Tü}ëMèÞ??þ=ÖÖ7Åã÷ãÏf²Oï·yõN÷ñNãkü¨XÒÓ@ïòP—jnÊDÄtø­"@R4’"s˜¨x´æÂ¯ì†œÁ¦Ä<Ò3[»¢°%Û¦‰þeiªX1ƒÀùßEPÏ«Ò%ã‰YGHÓ 9ÄÙa‰¥J=ŠdÒá×ý2à¹çöamm”‘~aâÅ¢Ó¡q&ÈAméÑùˆ™ƒ>ýéÈf8|x/^}õ.Äðž!è4Å 4ÁßSÆàûŸ¥qxÉäv<öØvüÝ¿{ÇQ«Màå—ïÃ_üÅÇ+ Ï£ö.þÛNCý$ÿ¯™!côŒ!VꞤ!Õe¤ Þáé§ûøÅ_ü#87‡“'à÷~ïAt» ~ÞÓÀãµÏ#J×Oȉ ’.Ö×ùT”ÖeÔ¬nˆŒöÌ<¼d Ø >ë43<5ó\²Æ`ªè`~>þpO>y ;wÖ°¸˜âØ¥hÈÏa÷îKnâ»ß}GÞÏ}î0xà-ü«UÃüSh·U3ÒãXf à¬"äÜd8 š¤Ú“¶™O³F‹ÌŽd\¨÷(CXδ2.@ =º€ Q1‡À¦ÖB 7Ð5”)«ñó5¶C¬PÒvµé¯5iÖÍ2Ÿß6®©*b¢„4£ûf?¸Äk{cœ: PFDšXÙTëÒ†y!häÈ‘ƒ1œa‚(‘Ù·T¸4k¹gž—öJÍQoÏCZއà—ó,UC5d¨®ÉÒŠÉMÙ⌙—¶Î#2œ53wœyfRPo˜ï6ìÏi޹œ‹Ýožmíšv¤MÆ¥‰Àt–Øp]_ûrǼ™àUdœÜÎ'fãOW.üöÞ8·ÔÁØ ëÌõ"€+ͯTy~5ÍÍ2*] ÷5]ƒÛÙg¼ƒ}¶ï]©Ï7ʨt#}¾VV*zôùzдkÍå«=g\£Ïî:×ÜlŸq û|=6¦›e‘rר#6Ûç«Í£w³Ïü’꣠iFöR>dľ䨮+½‰”in F5ù~×…Gq§w §z ñ}# ûù¡-“Üe´ˆa¢,ù 4—C Ÿêñ:“ìR3<„{Ä3_¢ØV…˜êb\ô"bØÈåבE ?ÊâãŸóå2Ü™3Eÿõ¯8‚€«§ Û°bŠhw®³Âaïù_ù•óîÞ{ç177é¿ð…‡õ#,dq ×aœâA=Æñ(“u©CøÉ2¶mÛ‹_ù•öîý&Z­&þæožÄ /ÜçªÕ²N^RaÝÅÃŒt×¼Ev¢¦Ý¹ƒ¨Å)ç%’Gˆ•ó~ŸþôüÔO}N Ï?¿ûë¿.û^¯î‚qWgd>Ïš‰Ÿy#.C¬¶‰J¦|À¿¯rž×]ˆÀÏ™¹´ú´Á:‡aöv ¡AƒstÒ<íBö)çggk®ÛMú}ì<~øÃ4€û.‘˜@MâN`yy½Þvxÿû¿ŸûÜç²xè¡cøß¨ã·{ÈG‘ †Ë>6¦=!m Ç.§6Ãz„>bHZ˨÷| í“à™áš”¾mö¡îñ%™Šž „Êq)º`ø&ÏW؆®¡È¬99<É…Bî"€í>(v÷= iÌø8 ¦ˆ¼È – ÓrˆY ìs ñón¹ÿÇÞ›Ùz•×Ák¿g>}z¾ÝwÔ€¤‹$4ƒ°!˜Ib*À8Ħ<`"œÄ‰©/R•ÄåªÔW媯RþáJâ)8  ƒ‰ql†Ø€B€@ IHBºóÔ·ûöÜ}æóîïÇ^«÷ÓÍísN÷ê‚uªnõí>ç¼ïžÞ½×ó<ëYO˜gŸsô akOÈùQ×g|äÿ·6…3tOÇv ì&Šf± Î߈‰ÜúÊÓEUIÒ‡¼¤’‰ ªóå¹ß-±/Y>k)÷4í‘J÷ìGÉÉÀ†²c®ÄßK¸ÎÚü¶:v¶¦ÈljÆi˜g‚¢ “§a 5)ëµØmó¦î‹žkõ¡È= ܇RŽGÒ´ˆy>;÷Ò ›«±#<òCçêNT¤ú¡¸>ÜV¯»Û•¼w›®áw¹]WZ%ï^ã¾´¯û|åõÙoc\~úÜg%ú^=ë1Êi‹YQ[=o<êòTéïVã_×sˆt&qÛÕÔª‰†è³¢e "æv(AS4Ž!Ä Ï~ Ækªö2€A}CTÊQnBÓx Ë®B©TÅ/ü‹ >ö±q,,È5Ñ—}¼ö9¶k!÷cÑHHðŠW,à§ú fg÷ãþàÕX]mÀ¦Qó ûzßã5:ô{8w@ÃíÝÛòïx‡Ç/þ⌌,cj*?ÿó›ñõ¯ßŽzÝ!ðÙŸã÷nà¿,½”ËôjA¤'àHeK¶‹Ñ`ïÞ~ý×?W¾ò¨VÇñÑþ|°4]1€Or˜lûiÄ¢fRËrŽämñ÷!PNò_!‘õy=ûâ…óóSM9R¿Z2íi±¿û (ö‘Rã13SÂÝw_påò2~øšÍʃRÔÞýîç0;;ŒÏ}îZ¤iàÒ?òÈ^óš#8p`FGŠ˜5Ñyá6x{‡9ÖzVβ?# ‡ÖÇäñ¢‹‘½ü›¨"¢Ìˆž'Ný¢÷sÆæ²ä)®O° œt æyÈb½Dìˆñn7WZÕË9®cˆô%˜wLT$1QÆÛ'é莩l-*ªv‹ê¦}BÒÉUã-WÝ”œM©N¥.F¸êf¿«š¹A¤=5s.Æ-èå3ïLMàš‰:hÿ’ÑV+—ÉiÐÐ)oð©e#¤ŠÒŽ`}‘? {||Nñ’ÂV‚HU„#c"„~C”ÐF ¬WÌšH.ÌÞ_2{jÆ mbíÄ¥©X»/µÙ]¯ä}9É35èJK/¾^|½øÚ="|» IDATƒr“Wj|kp¤< VsŠ 7Ì? ~Þc½JTj€¤ø½ú|¾±‘º‘Ãz±$6Æ EX$ÐRuáŽyïœ ³ˆU¼E•RUÜEÄ<À¹ÀÿÀžÅþý+xúé ¾üå%8Wâýç hRòg‹ß¿ž êÑ5kl,÷¾÷(FFŠøÈG^Ó§Ân!ÈûûºŸ sÄŒ«¢¡ÐÞ­·&øÕ_ý^úÒs˜ŸÁç?¿þç{qþüµlÃY‚‡kò'²ˆjHçò ꈅõó #%©.#Òβ¸îº£ø§ÿô+Ø·ïž{n?>ò‘WáèÑÄ€³ecŽ#>;Åëì3sa=è+fÜ€HQùÁw‘õN³­ò ‹ª1ÍqÓR·Š‰IEh‘Ê6ŠH½ óÑl \ÎãŽ;Ž¡^ÆóÏê}Š·¿ý¸ûno}ëžzjÄ€©&ffn½õFGëxâ‰4MÄÜ %¶M=åÿˆ«neR•0îb­=—*wcY5Ï„ò’<¯W1ëYy7ˈuš¼÷¼y^+(ʨ‘á drU“ßk¶å] qÞ–©NM3–Íž!þ¿—TÇA¬ Ü×Q Yâ1giýÈpÝeóBûMÓükà,j’ JÞZÉÝ5³Ê;?ʾL#Ò}Ê&'L4+ÐÂYЈ,`=MLù6?N•âõ|”åõ¬Y¹XE;̱P5ý\f_4GVa+ÅzZ–ßÄ—LoË8…ìg³fmÔÌz€¢9>ŽëZðÝõG/ ,ßEª[ñ‹Ñ ¶SX®×{»ßÅ>ã»PúíóV í]I}Þ,|µ›}î§ðÛv(RýP².WѹKÙç~×Õåî³ßä™éÖö‡>»×èÑgGoaÂ{µÌÁ°v“Ú±:ã¬UŠÄ=EÆ&)E]ßÒ?&(3)¯-IŠ C¥H•i„„SÑ6f}Š9zç;ôØæÒàÑWµï¶ýf\ðŠz’À{ïn¾ù$®»î––öù}¨ä€ï½­\<âX/‘ÆÓB +d=𽱕J¿ù›Ïbx8ã¿ô¥;ÜÓOú Âs3½û³¸Ú8 €1y¯áœ‡÷U ¹[néø×½î(^ö²s®^OðØcWûOz?fgE·iÀN8àê4Œù brçIF6š>VäüÜÀ1^â¿£A2õïø2Þò–‡¦ ÷µ¯]‹O}êF‹–] ÷Œ"К&L”§Ã9ºÎÇÈ”~Zž‘‚¯C.æƒ,PVvÔ¶“¤œ%MìjðéII+0:Åë.³Ü¥‰W9WRõ™Cð¨Nã™g&ÝÛÞ–úÇÏá _¸ÞO¹ÉɬÅ+ŽaqqßøÆË8vó>$‘à{ßÛ‹ãÇÇpã§ý¾}X\ã8—Ìõ5Þª=1¸–S ÙKpÞ‡ñÏ+©ÙÇÄî†JG%„{dLµã}Ô¸„ï•y9Ï¡‹ 3°YIà²y)£fœTøî )•wИû¦ˆC•‘ÉÌy%EDËå2õásuF,@s†:$#%a‘Nù#êG‹×ȳÏe®•½ðmŽW–ŠT`¥T6åCLÎþTÍIsϳ Kœ·ac¸À¯[áØ5M¤)ë£,øw†mŸ'çcvÐDZ›fÜU•;ëc ècr´ûʲHy_Ϩ]™ŸSñ»eñéˆ k"#z–Sî¢Éµ¸w|T¤*rN†e¨pÜS÷´æµ¶“-àN‡ ”©]ÁÚ6%Ýá‡cýop1 šn¸qÚå¦~“{øM®y±ïmän_,£ÅwÕØbŸ»Å—6«<|¥ôÙ÷èßnôÙ÷ˆ¿¥]®Ý«Ï›öÝîsº‰ ï7š»Ùgü÷?†}ö}< ë3?¿Ö•”ž6t/‡pÀ®úX;›FÙJ@ã>\K.ª y#>úïWÓs–IÃÁ;‡HíÈ¥ #r‡ki0j*ìó,ùÚyNoÝt_tQHi”<ìðßOOvÛT—Tðþe³‰ÿ…_xÖ·Ûø›¿Ùë€j "·å÷¥õ?@/zÇ Ÿcÿ²xÓ›N¹}ûVðõ¯ß‰¿üË«Rà4Ç`ÀwÓ@Zb»3ê)8ïÇ}©TrozӔ㿇|¾åŽõŸþô;6n@—’¢ïPJCΉ gGú”dé A÷ˆÅE"×9 ‚L&‡üÿ·ßþ4j5àþû¯Mÿöo_Fnus [0ÀyV!¿ó¦!eŽ}+°§*Ð )s3| µ²­ç ÖåѤQ×0ÆžÔÀ¼‰P¬p]Ô}¤øt|¤®ñ¡~È"+MWàpòdÙÿàC¸úê%\uÕ NžHß÷¾GÝèh>zSS)[‚ð\Œxï¯Â<á®».Ák^3‹gŸ½& ¯H{1 Fƒ¢gY³)ë »?ÁõÙâ³-o|›s$O³Œí)/Eã9®ø˜P_@”÷ÝǾ ØWMîLÅö*€£i ¶h¼e€èÌ3:ïb^Ãhò+©°Bã^4«×g…ÆÈœáX5v³üì‰F <ïšµ-#£’@,±‡Ç@NÉȶM¾JêcÄ(˽§âb¤ÂÓxZÐN#ÕgMæ;FÐ4b fk¹( ˜á6BM•€óœ ›¬žññÙjså˜Ûå\Œ0 §±  QEJ4êÊìs†FŒ±6`Žûm•Ï‘  McÄË™‚žF‘æ´êƒ³ gêcÔÒ`0qž‡yžµÍY•^ä,Úô|3g¢»$X;‹­Ipvûìf¶úñ:n…¿¾YA¯^ ¸ýöc§Ô‰ËÙglñ—¢Ïýx—ý6û¼Ý5¹Õ>o÷ßúìûX£_û¼áÕqÈHÚ±,ª‘‹ôÉ%Z #Э ®k1Q<ï"m<´]T.’b‹©D墄‘Ž yâKòXˆ5|,4V3†Æ‚‡¹æ³¦ŸÔŸÄµ®!ʳ®þûÞwããsîÛßþ |ë[RâDŒ°ªž+ª•ªR7ÝÞ0‡7¼áfg_‚Ï~öO²nEƒÆ’©—<§’i­8` oyË¢ûÉŸ|ûöÍcq1‡ûïŸðŸûÜ!—¦ï\Þ·HmÚÇŸ ßvÀ^HpŸAL^/³¤Q$œ»%‚‘*xéK§ðž÷üÛ»wÎÏÏáOþäNLO¿ÄEîû ¢¤°h9e©34 :Œ Šï=k$i%‹;ÃÂg \+ä­°ŽÄ¤gC»JI;O´FЬ÷$Ç*¥«ùûûÁÊô‡"‘­VÓ-.úÛn;‹={rÈfknß¾,/àc{9bÔ¥È9Ÿs@ O/¤¶ùS†‘çóZC@ðŒŽÍ!&KKæW*Z5÷©Þ­Ñ£hÌ$¦h‘OŒ EÑ<ãÊ Óä]LÌ_àš/¹è˜Ðµ 3¿ÊCèPZvØÅÜ9gûyöý÷Ùo8”¼ñ„V}<ÀÚFÂ4o¢0@_´ª~G‹yç ByótɃØðñÀËï¤%U¼¯EÊÄ¢á+iYžñA Ž)uÚ0µ ‡ jÈá«_½ÇŽ]p33OЈ¸ÁxŠ àUN"´¡ê€8xpï~÷“Èd†ðñ¿O?}’îË<…(Í*¯þ*€ý>ŸÏâõ¯ÿ{ë[O¡\^©S“øÂFðè£Jm"D'Ä1Ÿd4`Bà>Jž!—_•ØGÕhjüLÀ¹²ó~·ßÞÂ}÷=ˆNg÷ß«ÿÒ—®wõzà©{¿hæ{¤¹ÙéР9d–šŒR%÷*ÉôzŽÙ=è*à¨D\«Q„HÃ)zœ•ø] !5@eÙ£uÊ6©†Á=´JÎï äv\@¤©´9§ €’««)îºë††fñôÓ×ᡇîâ—}Æä)zà«qÇgpÛm‹8th§O_Å1˜1ó·@Cáv þÉK<Œ¨ìÕð!úãMÕnE* ˆy%ø<«Jy…†ÓAÄg¡Ég%XiY*[y®!ÑÖä-¯Ú3gÀ%د ¯q "—_jQy®9GŠ›ª8Ð.*[êc¥úó”£!úΩ?ì[ÃE£¥€¨|¥ÜŒ!愤.*²©.EÖG•ªœým„Ü€¿§=Ï™iÛŒMk4UvÙÇ臌’%3öŒzÔ˜¢üEW}¤®åxƒ`c268Ï©¡è)Z»êCîØ,¢p†T¥¼4ÖÖ×&’±ÑÀh™è˜hZYFl:Æ(iƒ³`ò0àc”JÔ³]ÇÚÝÎßußÛ©ŠÔV¤+w*ãÙ­†E?ßÛ­W? «ýö¹_Õ©­ªSífuãÝžçô¹úÙv•¼ÜƼ[Ý“Ë1Ï»Õç<n—ÚôBõ¹ß5ÞGŸ3&bwC hð*u“EÒ7šÏò,ûð3%˜¨ø¸¿ç ú÷«. %K F{æuxLT¢mÚ·^}ªˆXCúùˬ'0¥Oãak2º±H p@‹‹9x?ÃkŽñzˆR»Š¾0íœkøžñ?÷sßG¹ÜÄý÷ÿ<ððœÞõ)z{÷#Ïë¸Bá^ÿúY¼÷½ßÄÝwŸv­Vâ?ûÙð©O•qêÔ b²ä°¾G}’ ¯ÈùPï­(‡<÷øèE—¬î4AH?;îÅ}÷=çø³?{5¾úÕkÐn/šSb.Ä9ÎAU žÆ¸n²>ª ˜ˆò¤j×eöAÀg’ü{©ófíÎÑÛ:é¢vˆã(JÉÛ±J©Ú¹öR6Ûo" ó&H‘òO•í¬áƧqÓM5ŒÕ\½¾èÿðïE«UGT+’ú<âEsX^nbt´æ®¿~Ñ<õ”Š *‘XyK«.Q~”Ü[ášBÛZ×Y¬e, ’§_á5ö1*°LêQŠ@½«û¨¾¥hP™ÆZÙx¢'•ã–“ù¡A±Œ#QWL4q”s)u"ϵ®Aͧ<îUÎgöõiº½H“”•#LJ¢0u&˜$d~¬›(NÍD‘V, Ñ¡òØÚ>sZSm£29+uç\¬›!Ê›ŠÛ‰ª9 Ï»õÊT  8.íRí õ)ÏgDÏjމù‹l£öÎsÿšã^œ#A‘hk<؉7çIê׫ JlÀ!õ{ÐDk²ˆµ8Ò-bm·[g¬»X£Û!º0ß«[?<è^‘ŽÍ@¥ëÃúê\]Ÿ}º!ÙiŸ»YžÝØûÉ‘è6ϾÏ´•>ë)ñ[œç~ÛúBõ¹_%£^óì{ÜÛ™h‡+ôòžö±èS™Ú=ƒS.€Ï‡ªV—kä] IzâžrÀ<’¤ˆ4­£TÊã?þÇ7»Ã‡Kð~Ò?ýt À{àå.Ћ½s7;ïC­†ƒ˸÷Þº¿ù毹)4›<ðÀøêW÷ºsçæØÆ«êL~oøXO!%ð^¡'{ˆ@J…­ -ãŒæL!jò_0ˆW¾Òáçþëp®ƒO|â¸GÕ2[¤Q8‡@ƒÉº(,IÝëé-½@å¤òìs\[ƒ¦ÐX™ó¦èÕ„1\çÕ¦š¼Î*B"ú2ÛzÁÛ^à<(Ц“ÖÂ"×Ö0Çn! ^¹!ò—]40ž0àK¥œ»ãŽy<þø(¾ò•«Q­N9çÆà}“}ã³SAh8ç€&¾ò•A¼ò• ®¿~>á]t¶s££ˆâŠêhå‘Á1Í÷†8+.o3l»ê,¨uÊ(Ä~ãMÏø$c¤`¼Ô(rYS!<§Bh÷!s©û¨îU€pBF¨‰ÁÇ3EãÍÕHŠI/®3Q‡m¨n˜(‰¿î©¶!Zå­ üI>òª'¼_™ß­2J“ðûº–þ&¨’és1R«Âv©7’¬& Pàþœ•sÆÅ‚u’]«2îb*TäO ×RƒË»˜ÄîŒS(a•ë"jÔ¢ ã»ÄhšTú2¦æJ…BÛ÷Ëã÷}Œƒë2Ûë‹Í³ïBñ]Ú×ë?.}Fkv'}Þ­µÓ«ÏýØ»Õg\Â>ûï]¢>¯…ÚM´Aô”"7Ø&J8D#¨F/ð,˜0ÍûD¤7<`$#MOâ¾ûÞŠÿïÿàÀèÚ@ß{/ð¯ÿõ[ñó?ÿGþر§ŒÃûQ¿oß¼å-UÜrK…BÕjÃç;|ñ‹wáüùý>ÈßV¬«>€® ÛOŠå^O P€Šˆª\?%ÁO"xϦ1Yv@‚ë®kã=ï9 Å_ÿõ-x䑆Ô"QŸ$ýë)å¹HÕ°A*"&Œ*!ªÊ€ð1·!´[¼ò³ø>"MiŠmoû@·ª"ŒÉçYJ7-FFææ^¹«\§ØGŸÆÄÚQw0ªÔ1‘¸6€e\wÝI¿ÿçÿÄ¿ hïË :‘‘Ô`t%`È'Éi\¸PÁ£Nà§~jÅ¿üåsxôQå?¬ $ªÏó{-‹yÎW!ê7‹h(w(k|#bT¦Ìq.ø‡ŒÕK˜äÔ  —øÞe€›c«{9~fÇ¡ê#•(ã€iî1âb¾B‰ëᤠ^C‘›9„(Œ ç#µ¦Nœe?ZL4/rmU°}|þEwñ~E9Ld3K£¢ÆqVÞIêcžEÊ>ê8©qT¥î £=EÒ0ó8²œÇA¶]Áµ(0Õ™¤Ê´j5ŽëtÀGq­WG‹L–ÔGA€¢9e#œãšÎ"F–òœ{­³b;9ôf}¤UµÓ`ü)G¨JC]ù0¢v‰ºUáúSMÇ<ïMDj[† ×R›÷·¸s-ò¹‰ôº»dX{«IÞ;å>wóï•éb^S×§Uç±¾y/E›Í"¾Ë=_ˆ>ïtžvúò¸4Tµ‹õÙ_‚>÷iÙíW¯üŽÝh»Äó´Õ~öÛ¿Ã5æ¶ð8wÞ{àZÖZxžÊS Çï>Jpx„@ZÉÇ5„¨GÛ€ )Í#Œ¡øÜU‹ü³vIÒ³Ïîõ_ýj™‡ü ¥S ž1ã'å2Õ½æ£NâÉÏ9M%ü··¤ä4ЍÌS¡'[ëD Wd PIö»„xÿ6=Ù ˆÉáûRÎ…œ#\¯£ û{ ÀòN2¡ccËxýëW°²ÒÄg?{×Ϭ -zˇe`[½pib¿÷½ ^ûZàõ¯?ƒG@’$HÓA¢rC¦P~…‘õk늹G.¬µSÿ©‰L,sœ&Šñ¼9-îR§Rõæè Çò ‚’Ù²F=•l^*nI¡Is<€X ±„H‰b¿D R>NÙDMö‡£.*ÁÍb=sÐÅ=¨Îïd8¶r(硈Xœ®ÉÜ%˜–rÌÖÕçÄÅœ˜÷¬¦‰,ënÖœö_ï¢!“Û°*× 1ëG9 ÎDnmÑ;0ÚáM$¶H£ÌVá–£yo"WÚ×%¦ C©Í¾f\Ü/¤PU0sÝÀçbÈ­\¬:.ÎÌU$gÏ“rtŠ0E^]¤Ò6±yôÁ»]Æ`]#» :»qæ±M0¼>ûV_É& £›çôb‘ŽÝ‹É]I}¾¯Ýàß_I}v— ý>/—³ÏîÏi¿c{9 ânÏã6‰9Ô€¨œ¢¿‰>·¾€ž¨.<l¥2JÀ»Ÿà$€iSBµqchèûe¢”tXD”B”>|ʃx…Àa‚}"Ñ$ÖÓrÄk–T¨4þEGü)PšòÞ£¼Þ_}ÎMÀûãøýßÿgÎ<„_ú¥¿ÆSO= àþꯞvÇÿ!®»îj¼ç=oć?üi ´055€‡:€‡j¡^/È ˜÷m‚º3.Éøžâ}تÓ)Æu”ÿfضëåç**¸§|ˆ*Þÿþ:š8z´ˆü‹`bÕ…q]¢yŒ ø‚¾<)¯çs%&xŸ—!ÒKN È(,˜ßGŒŠ:‚q²í;…XWÃÓ+;Å{OðþZúS>òíWd”G´ß›6Çækª8Þocc«ø7ÿæ¬Xõ'Nıc+lßb”C•ì\ë«QE¯s8~|g϶pèÐ,^õª3øÖ·*ˆ²¢­ "6Ò¦¢.SšwÚÂ{ßE€˜ç|«J·dQ³¦ˆ’¾!€ã8ÈqÒx(Táÿ›¤”4Ïá$b uƒˆ o“|ž¥ð¤5$µ,åŒ 7]4L•×0HG‚¢fû¡›ã«/K¦ê³rvrTKεƒÂSéyÄü–œÉ›hó÷ÄŒAΕ*Íkß‘Rœ 5ÚjÔ3ÏÚoô’ð‚¢¾ª.ãAû_‡¿×ð”pÞ4ÏOÓE©pEó´¯Y p­à¥æ‘”´º€¼)B¨1Ë›ýXÏ(Œq˜\„L ü­E}¦c:ƒ&R=æuµÂßëŒ æ°^4dãY–¸.çÔóÌï[¦v;IÞýªõ{`o×óØ5µ©ÛÁØ>\—ß7þmc$d§žá~2þ·ÓçÝšg×cžÝ߃>ï–A~¹#A[}ž{µa·û|©"&—¨Ï¬?¨Û<Фª"£B\oqÜía®šâXòÁ#š#È|ŽeÁ€ Ý£n" Š4ÕHò«J•|ãª9t‡÷2„xËò´I+1Å”ížà÷FØ&yðÖr<Ø÷HÝÿ€1$IïWð;¿ó¿gϘûÝßý:>ó™G€¯F§s µZ ïxÇ«‘Ïwð‰O| ?>мGŽívÙDXÚL .„̲=×#Їh2%&¬?Éjè{ ›¸*ì–c„A‘&Eö9òOqç-œ:åð_þËaT«EDßc¢öxYEàÑg«)+‰^ô§"¢êÏ0¢ò—æMõ3t|uÌ÷ä±ÝCÁ¢¤É×bñ4î¹§„·¼e ÕjGŽ ay9ÅâbN™×Srù>¶o‰ûšñ(ŸgÛœÃ7¾q#Þð†7Ü0‡qölLÚÜßš‰¸ ˜)ßH‰Ó°ç#[@ü³Æ`ÕxèY-ï´žaj)¶Í`8ÀñÍP>kžã1DÕ« É{©r8.eŸÝ Üçjžw²öÜ.>û—3JqöÙ\pq{]ÀÅÃÐâp/¯v!Çâ Y¾þ˜´i¼•òÌJK¿D`rë¥<Ïñ>袓\@¤údÌÁ˜ºŒ—ù]%>æ ’šÎ,Û>è‚gR`DÞpñÕOñ”nbé¡5ïí=÷¬bïÞ¬{â‰yœ÷Sæ¦'ñþ÷¿ oû›=ô$b¾ÁÛ²Èë5 &\$/!XK ›C íc4ãŒ=ŽQ±ª±ŸàߟwÀ{ÿû/àî»gpáBôG¨V5·ç©e¢ˆØ*¿¢=ÃHË H£Bä†À4 W ¾š*ò¦g ùbXǾœ_¿Ï*ð7Æñ•G[àú,½Ø× ФdW]Õ¿ý·Ïã­o}ժßüÉKñ™ÏL¢RYBš® M›Æ@’ð2¢’– ¦¡~A³YÁãarr•Ê׌¤9­ÚÆºŽ¨T Gxã£,ûz>G-ã%®#*ü(ÿh ±˜¢Œ¶–‰(α*bØ@Ì·8…L.ÙÔŸ£óÆ(Ð\"Ö¹˜BPžà5eàÉ´Ñ“’‰ŠB”AÈš7@Üæûx3þmî9mïü"eHã"­âÇÃ"ÿ>@CUDA„¦q4¬åŠp--q}È8+¸éÚc-íð&Ê™(ñš“É¡JÌœ;EÐ>Øá<—\,ì§è†3s,îQ3ŸÑ|×T¸úÛ0F]bŒ o¢‡‰‰ ®‹n0B%#O¬Ic(õÂÚ ºÐ£vwnE¦¶_.ÖfRž[)´×­PºÜo»2µ½k7M=ÛF¿Ã>ã"c¹ò¥£8ídžSô'_ÚDZ·>÷³¾¶ÓçÍ’ù»qô}kìfŸ·:Ï~}îö¼lEÆÎ_æ>wkßf}ò}¾o Ù÷“ñ.v=Õ¶h’æq5Ãy§¨3Ƀ]ª(^sÑGoú$¯“5Ô àËå{‹ül‘¿/IFy0Ûªàbýy3ó×ÿ^ð±6Ä ¡á¢4j!‚Ð6Þº±è•¨,uþÚçóyÜv[ÛµZ%|ó›“8¡¡a÷܇_þå[ý­·Þ ƒ÷¾÷ÿÃç>÷Q—$wú4sÑ#< ù9ã]k„€l “5x0K-hžÀp¿ ‘ ÛQÁªãØR¡æ<ÁÌ1ûý{ÞSs·ß~««%üéŸNbeeÕÇ"X2äž'H•ºåÅ?à§]Läô±¦ƒÆ»Ä¹Z"E«I Ç´1^Ú,"w’ã=âç ¢ è2e-UÔLís4öšh“Tˆ2\; ®“³¼ÿ¨)"7`Åßu×þá?\ÄÐPŠéé>ñ‰Ý™3ƒ¸é¦)_©¤îùçËð~!i}/Ç^ªJŽkXÍ¢·LT¢ùùÀCÏf¥t–Puk‘"p—1ÉÞ-ÄÊã’•­oð«8ž(OM¶QÒ¹E#g:ÆkË@ÔóQÑsãC”AÀ{ÐG^|& ‰÷5> 5)Ž ×k‰ënÞEƒÅ#Лj.¨„e¸n• <ŒœúÌ51I£¿Íõ;" d¶3c¨T-luþ]µ8|Ì7°u#œ‹€=¯"og”£$Ý6°ˆE;.Jj/¹Ê Ћ†©h·ŒÐ'xS Ï$l«ˆbââ<Íù¸Ï•8ÏMÓ•ÌžpÍ'zf8gðë‹®²­x,×Å<Ç ë¢FQÚ?+J™ç\i<Ûn½/k^E•®óý”mVBy›ô³iö>ÕTê†32ʽØ)ÖzÈÔº.@·™Ún?íç½1Ñ.Ö¸Íê lö;6¹¯%n&S»‘xæû+~ƒÜ«p·>£I¶Ÿ»XŸ“ c²0ö›ôw³{než]o`ÖW¯ß>»‹ô¹×ÚîÕç^ãæ/²–Íåû©»±>£ÇÜNŸ7[¯¾CÖ^»—TóVæ¹Û˜º-ö¹›a£´u·½‡‚^Y¤}—¨“'¸"€:e¢%r/*>€›eˆU¨²®òQù¦Ìé¬áù*=ø©êICô^.ñu¬r[Bä£7D½HÃ!¤jÅâà§<¼† ^ >æìqÀqÊI*9X_uº@@(ªÇs4 †´ÜÄDÙïÛwÜ?øà+ýéÓ8‡^áï÷~nm¼[-獵ŸõÀaŸ¦m«”/ò:UÚ?iŒša‚ãÇj– É2ÐfT䊹 9æ3¼íµc1Kãî€aÜsOνúÕ§Rç¼ûoÿm¦§Ûì÷¨‰̰¸Ø9¶ñn„êÜôl®r< ä¦/L8Z!(¼À52à,Õ~ÄäÑÄKièOÇÙâ«èo³&BÖÅ'@¯Mƒ>æA¨ªº@Ü*Â+dÌ4™«,àW~ewÝ5N'‡/yŸýla‚»– >IÚð>…÷\K{ÓðÝ„ÕçK.Ò` Úi#yZËUÇ@_Q¤‚@U}>„˜ã2—šjÈx¢:Y‡b‡Ñ ÅÌó÷)>KËió<÷–2¼žq.E®ÕÎhÑPJtÁ1Â5=A* ™„¿—¹Ï´ j}ÖÂb~CAÊGFj»íÃx€¹Ž{¼ã9J; FJ™N¹ËÜç8Ï£µµ4 žç‚ÜužÆ…÷Qýk-G+e†ûO‹â¤14e´}TbR$À§á>R™‚É-‘¼ëÂs3Ì뫊}Æ´¥Ã¿uk^d|¸g›Jc%ë€d]¸V#²I<#d¸§Æþ¡hBJJ÷ᵄc¤â™5J'·)»½‡Nf >‹”ßáûÁÚݰþŰûEej¯õ¡Ëýº˜¡p1€ÖoQ²n×r¸4µ/4UåÅöþhŽ©ïÃøë |q­lúJ{§ä•–ß@*zNÁ«.ÕIi^C`³@c`Q‰§HªEë«ìŠÇ[E¬ÉÑ1 %Ê׭Ï+GdÀPÆèýŒUº#Uª!ã‘¢%šBÞE¥œACùc*øGÿè4Úíœ93IÚÐ58yò4~ægþ'N<€ýûo‡>ôøÒ—þ _þòwqï½ÿÊP¬lÞɨ‹Ã4–Õƒ'_%çŽÊ‚ ÈÝ„Èï^¢¡2†ƒó¸÷Þãþ÷ÿ.ãØ±AFD«ðFŽìëΩ¢ç¹Ý¢†Œš(3Ô%©©R´¾»€`l”£ ËœÿSøLò˜«úU‰íÊðn(3{ à tŒk®9‡w½«Žo\ÁÌ ðÿïµøú×Åó_°7ß\EµÚB½~`J³ü}Ê=Кl &ò‚T$ WD›DNÐ=e\+? iú©zÊ¢2©â²Í+˜ãõEëRNÄ>3Žm?Æ5X!ÍiÈPjòô6UY¯™HV‘î¦<*‰AHWFßÿ6‡¨ÜÔ2”QdJfÎDé‘‘¥ )OdÉ<çʉ’§]ÑK%u‹žéM[Y_jÌØ1‡K‰îß #gRû²Å5_3¶«æy2mVžÆ†ö-CB1šœ`=•j‘ö¶F©Ú`àÈ8•0cöP­'gÖ—Äm¡¶1R:&’¡ñ¹eIçƒòBê!†äÅ Ùß²éG²áìI±jÔŽÎÕì p÷ª¾})€ÆåȕخjÑnIº¾}î÷û—²Æ•ÚçË¢]ŸëËu‰ô[‘Þ¿cs%äo¸-|ÎÇͳïéÀQ’žÔ”–ÍauQÉG<\© ÕÕB¤…/®ú¢‰6¬˜C}Ù™âQˆ‰‰9ð—x Ò³^0†½Y«NP[¤¾DÀwQúr±žÇb‰W-†’_úÒªauu/zèŒç¿Zmã3Ÿù gðøãÏâñ8xࣸ瞻ðš×Â7¾¡$lï#HuÄ|”¿šä,аŒ¹˜ðªBn‡Ùî³£³*سÇã_ü‹³Èá+_Yr_ûÚasø+©¼jú7güYDJ×~‚•a®—2bý…U †²Å×Ï!D‘±ŸS.æ¾ ˜èKÖe ¼jževÌúP®Œê$4æö(º{ï=Ž·¿}¹\O=•ÃG>òÔë¢ÂpÞÏ¢^¯ I€$ÑX¨xaÆ“˜‡¡¼ˆ’Ó¼;¦éÊ—}ß'C¥AP;ÁuÐv¬kŒ¤Þ¥\彬º¸~ræ‘· ü¬ÝV§ùl óþˤËeª•WM­qekc¬ æ@ìqÑH‘q&Ãú ›y*±ýe®%Åéh*@>ŠX'¨aÖ墅”ê”c!ºÝÂÚzÅ=;ÆXðœAŠ– #uëëoL#Jgó¦ôìH’&—­å¢‘g9ÜiKºáÜi›g8kŒ/gŒX9?¼qH­U¿TgiO –ì2¸ÿQ{mV±ÐcûU}»]÷rRßg4æJŸŸ_ÛßzÑž6[›ÓݺVü•5웽ÖZŠ‹ˆ¥,bb´<€º‹ª:Ït24/@¦BbU¬?L&åekšÃMÊr”€m©è SüÞ~æ=HEê%2˜DI±2º5{%X_ ¹ ‚¡¡FFJøâ‹h4V7TR¢ÃH’I|íká‰'žÜwß;Œç®l<¥cÃU±‹ìÛQLªÆk=j<Ÿ2¶Ñ#<ËÏœrÀ‹)Œeñàƒ«øë¿ÞÏëL¯î<¥$!hŽ‘'y/ ÊÁJ¡Ê³]mãaö`•oÄJácí¡‘â è“ìm•ã¼7j%&KÓQŬj<»ªM¡¹B±8Œ_þåx×»fÐnwðïŒãÃA½žƒs’ r£ÎU02´ZÕªî4¢:j¼ÌOºÚqÁìᵨ˜sYx?Œ(ÉêLû:/›qIM4mÅDªÎóýaÄœ(ðÞZ»53oC&2&5¦yÄäð%cD #ªT˜}á ÿ?k"8RÂZe»Œ÷Y‘Žq©¤ ³YóŒIY«j ª›âÍó©ˆdëU–rfo4ÎZy䥾VG,"ªœ©ŸåM”Ì–“,ö85褉Žͽ'Ù¿†1ŒÍ—š~. ¿³jajWÁŒuÃ8y` «¶qδÕ­TG%ëc´IÒ¸º×Zµs³f5/RžZs,ùfþZøpÿlj ½°–T9Bfw|^ïèLíE‘ê7é±WÜ~=Ø®‡Gz«÷ßNt¤_E¦^á~¢¾Ïûù]B8n ãî·ÐgìÂ<û>Æ}γ»L}î§ý~‹}Æ6û¼›ë§ßM§—¬³ëaðìtž7û®Û$ж•}Äo¡oþî6z¡6ô9k€œÿÛ¯§O p³ÕŒEräW@Î5B’á@àªÑû–! oÑ[W÷‘fåY7 Í÷¤&“÷!B±jªÛŠ&!j‚ª=7 @lº$ó9ÂêÑ9íSQ¾¶ ¹ M+{JÚ}Ç;.`y¹ìŽYÅ/ýÒ¯`x¸é?øÁ?…sãð~Ñ#HÓ²Vñì³GÝí·ß€={®ÐrtžaòhŽ\èôà@Hlß àòÍR‹1ýçe=±uãÄøxÿò_žqãã9|ãŸúÔû=m’Cë>SÁóUL¾/1t5çø,€C.ª…¼…TŽJßžüMDä€I  '|ÞÅ1uL.DϺ(e©H†^װߊ ó:Y„ÜÕÊ(á–[€w¾ó9\uÕfg3î/þbO>™EÈWHà}ÑT„säó ¾ÓÉ£ÓQMyÆ—ùœÉ(TA:˜uª¨M@ê’$(µÛU‚´Û:XO†™-zc\òyi™i%æH-(v1RXCXËû˜ÃÔvO¿–ÄmjY,!äN,à˜ãš¬øTrtÙE´ã:È2G" 9„oÕÞüò0#}6¿À[ cx´ÜzÀ æ+tÌ~•qÑx×kÊqlð™`äL…êôÝaæ4 ¸Ì\ƒŽ1”f«Ä±½%Š.R¦ê¼Ž{dŽíçµ–Œ•lˆ|¤l³¥9ΛÔdkŸ ˜¿ 8ÃÜŽ ?3ƒ¨\¦du)ë©Ú¸’¼5ã0ÈqtL¤µcöŠº5r|t©ð^âÖ÷WÇJ“û­³êÆÀë c¸çœëÑ/ŠG²väÍßÓ>€ÊÆÄMßã3wz‘ë§]®ßÍ[ézD6ÀƤçÍ¢»Õg 7í¤•.ßt9lž”í/á$„z©kû̧‘Z“¦À˜»ùæfúúןÁw, Má}´ä?úÑAßj¥4"‡\T![ôL †÷t:…$I>“…e1]ÏoñÙi ¬«yÛU*Q%T«eT«mÜvÛª{þùA&;ÏHf<º]HˆOÙ‡5þ??³hˆ L _ä>"u¯œŽiA‰é”†ó¤¨ñÑcœ›|¿Àùh§áºÀç[âyæ[RÈR$j¦a •ËÔäw i|žš4äU¸nÈ«’t«„ëIϺԇà€b£Ý;²Çu&Î×}LÊe›*>~E‘’Ж%>kÕ4ÊúŽ"POùð¼ä|ŒªÊ9R2ûƒŒzÇ6)Ï&¥`Á*±³4@c¨:dÓ0>Þ&\y)T58> ªÌ]E£+¥Ó@¹CŽð9Wô¯²€ØŸhŒ#f¾g´9ÃkÕi ¸4¶;cözçM•o%–s\o곪Ճ¢"‰‹Å'ݰöÆó9íTØxž&ýbí,¶ÆëîaØÊwܯ¿Õ6nµf€ï³ Ûéónƒ>ßçÿ{yá/×<÷J¤w[˜ÿ­z»wº¶·²/UŸ7ýŽIàÚiOCt;щÍ@¾Gïêí—¬Ï[X#—jž»ôÙ¹ û¹¹¾(8RSÊÈ“ˆÈ›ALÜU¥Y%jï¡Q±ìbuii·+rQCÔD—‡®n¼x•‚ª‹hS¶þÁbàÖWÜ^vÁø(“_\•ŽL;ù÷•jDW˜p,ïeÛç%hãÚkg‘¦gÎÜâ~ðƒy|ç;O╯¼¿ÿû¿…×¾öïP¯·èñœÂG?ú'¸ë®— Ñ¨¹ßû½O,Œx¡PÞ!’n§yß‚òÒ$A”j%wgèP¶xÙ˜‰0ÍclÌûßüÍ£nt4ÅCpŸüä¿¿‡ GøÎÃ*ï[t!IüÇïbèšñä¶]Gµ)€W±=SÆ3;È¢‹¢ÿìãÜÍPUìID¹Ï¬‹‘UÇ.ñŸä:'óy.8QÅnº©îî½w7ܰìœfg³øæ7óøüç3ô’±MªØ\äZ÷K’*Êå*šÍ2VVÊ³Ž‹žú¢(Ak³ŽX˜­É9¸À,¼_€÷Y Š´4é„mDç¦i“"SJ¦_t1:7àbôGþTd.æÕù{žÏWÉÅ„ø·%>·Š*ª6MƒžüiÎëãh»Hq± Ó%£þ3jh4ŠŽš¨OÕÅ|9$TŒSgžuEª.Òx„óÜ[Ds.VØN9+ìw–ל3íQtJµ)懊.ÖøP´AêbÊݰQ‡¼‹‘ÕR]ÃÅ|'ÁYEvÎ!Ò˜§(XL–M¬à„‹ùqÎD°fÙaì<ÇB’È9öy™ýÂ^Xâ=R³—kÜÛFÊ\¨‚ÙaÎŒµb.Jn§f¬¼‹{¹~a±v¶À÷@ú‘¹ê¶û‘©Ý -¨gùòÞÿvú¼Ûän V¾‡qÓ«€ Goõ ~$v]á7¿>o,Џ™4¯ëƒž³•>÷Ë­åíô¹Û³·.òæ×Nû2pwèG­Ÿ5µ+}îñùÝXÛè3’z‘{ù‹|Ïa=çWx >ùÉýl‘ ë|ú®~J(^"P>Åß!x_@•*ã±É¨ÑIqóù#JÀ–7»cè JDÎ; žÆ¢^’”ÍnÖWù(i)¹ÊŒ H’¤éœËâÆ«¸çžÝu³.›mcn.‹‡.ãk_+`y¹í€JŒäqDàj«%? ç®C¡pN‚z½„õj;±vBê‚—ßÐ+šÇ^^÷ œ éNQ‘Öƒ‘´í¢¡“Æ’Ò‹ß §?ëf˜Üe¾' ¦ŠÕ¾7D)Òe€ó·ó4ÒT˜qU€”FàÄh-FYÀ(ߌ&b¤q1a_QN)2uTëƒFÑ8bNI±^E‰÷Ê!ì%C꧆vƒ4Óâ³ÛàøìqAžw›Û4¢á0‹¨\µb‚¶ê¯ö‡*ås×iÎELQ‹Ä\ÑÚd4w|L\ªn‹E2 ÞœoE„Z”s•¢VÊÈFÑ8å÷±-¶µÀk–i°kïòf?Wôa­þb.N‰ÏsÃHËá¡Ät*¶È¡Ž¼Œé³£A¨HI‹}–Œ³öïÔª¾ßz[=«Ñ+o;‚±P‚]ìH?u0¶ÒžÝ°ì¶Úg×Å`ñ] ‡^†ÅV­Îíöa»j_;Éè6>èc ¸¶©Ÿûïä¹éu^ Ú¹õåi·Û_×%äéú4·;Æ~‹}ÞJÃ_Âý«Ï>[’NE¡j Rk®!uGüï" hоeè%͹XUºJð“J“1A[^¸K=95•«<½Ê#ó™—!xFˆ²²Jn=`<¦*æ&þ¼ÉóKX—/™Ð%cç˜)ª‘%§{˜u” «DÖ%««(cmk’ªµŠÈÉorM¦4­ãðá,ÞüæY\ý*2™,VV2xøá¾üå––Bò·sûརZ6)xÀs.½¡Dš¦LÖsÐVA4c`7Í5ÄKϲϣŒœ9“ªå¡]bý©@µ\Œf š­qÍæ¼«È^ÖÅùAî Y2\l㸛“ŒÚ­°­ æÙ—ünQ 7lyÁiç8Wmö¯î£Q¶ÈèOŽÔ·¶‰šf (ÕKÒ”k?o<ç… Ûž"#þ&o¿’”U/b‚žú—ø(õœE¬ˆžhâúšãxjžV Eq¡Ÿ«ˆÅåJÆP\åz)2R¢Är)7%¦v‡gãë&Â#ÃN£¢W-¬—nðyhº(¶1Éõ¶Âç¹X¿¢jæY󼆪œ·HƳò1 >:&´(2&šÜ¾ˆ¯Xycq¿*°>Á}Çø¬…ÉM¶ÙQŠ~ä·ð]ô²û¹¦ïBßè§ ¾OÑ­úøVî— ¿êè½"[@Ý*9ö’-íg̶:ÏØ¥yÚìs¾Ëüôº¦ßÆÚî–ï°Ó>»>ŸÝò¶3ÎÝŠ*îvŸ{¹ëcò»<ÏØæ{›æWœ4QI‚LŽ™±>ƹ@rL`E¬… Dq)MxžÉíE„1.rŽ=®þ¾‡sQwÑCZÅ7¶ñ†7ÔpóÍKH’ff<žz øÊW:˜Ÿ0˘€÷2TÅco!$Ѓã»o ˜'ICCËXX(àôiÑ´R®Ó!DºPž¼ý!D®z‘²Vó‘n§ˆL“(U庆{¡Dò"ÇoU F34@‹Z³h EDFŒÑ8€``縶§ 6àš˜2÷XäœMäF…ç\¬ÄÞ4`7¡×^RѪ@žg½߰—è9Ιè”<ûÎYQÊf-æ$1ÿ¤èäéÀ°êb³>î3J&oà¶CŽ ­—ŽÉýU¬Wr*pPr²d–Kìì"UI†§7÷ÒšÑþžsÑH’Œ±Ucª#æDÌÑѰÂu•šB‰s¼gÙ¬Á,Ö«gÁ¬ÑÝò›JN÷QxA‚ƒÆèLÍ81Ëo8_Öj×øö§Z##1¥maýžã›žµYô¦õòž÷Sf|³èA¿4’­Tòvè­*´UŽv? Ë÷öýDZú‰PôRâéåÕí5×›õo'óœn2ï[‰t£uûìn¬í­ÌÏV×6úXoÝÆè­àu)"½"ýö¹Ÿ:[™³Ý˜ç~£R}ôYQE”PéèÍ`[Ïñ0£Aq€œn%K…©ÅÏ•ÝúbeêsÖòŒŽú˜»¡DO‚%‚N£Z”—Wžwdëôøù¤¤ŒS¤W²îc¹2"hLÍð ?èí¾ã"0—¦~ê>÷¹¯yà›ˆ ãcÂû >$ež÷!ºM Ÿ0Ñ5O¯á8Çažícb/Xù6õ!à ¢Tfï|çI\sÍ2–—‡ñÁÞ†³gWèNª{ ^~À ìË9ƒô¼¶NFM”¥ŽX“@Éš{i+mŽãŒÆ±bñ‚²ó1_`šß)ú¨ª£dQ¢S¥çÁNÍg2Mwýõ xÓ›š8|¸B¡Š£G=þöo³xî¹ͦòSÆUw&饕ÚY–÷_+ç¢BÒ°ït–¦ d2)œ[ ¤ Ô0.#–^ap]ͱ/e„÷÷ú)rm©ô ¡Öäeçõò\Gãýî8 *Š”5‘Ñ×lc<É}` 1‘vaÞæHI»ÖÇB‰’ >Ëvw®Õd­ÇÅ(Ž’Ú³çÄGOvÂ{×|4Äÿ_“2%U§æ×Sœyf³.ÊÉj>ŠˆÏüZÒ°ï0mªÛ¯Q•|ŒB¨vЍmžë­Š˜ï¡|%ů* ‹ ÷ik]ä赯ð:ª£g%OgLÂÈTÁŒAÇLjª¥€íA¤—©®PaO8Íèf A1옅;\ÛuîC>Öªi›3@Õº•¡œ·ÄEzlŽóÜ:”_oÜ­]Ç“¢X‰ò¦H ¸¶ó;ek5Þmñ ëÁp]ÎU'c+q`ç•}·Ã ÛÉõ7ÆzñÆú¥¯lÕ@Ù-êÌfŠ6;-,·™Ww»Q”ËU7Áw‰4m§ðán®í~Ó›U×î•óp©^;É™¸Tó»Û×ÜÊn· >þòt ’´ïE£™£—ûVå9&)Q†ë!ˆ6¥äÀ¶‰h«áéñkºÈAáw«Æ[(oµ(W{µàÍ=EÿhùÈù]a˜…ÌÎÑ(Ó€8‹âëˆúöªù ÂVmz+<è‡x¸Óšãï5‚ùAïUÔ¨!q©)J¡DjÊÃà«îÅm|¿î€ÞùÎGñ¶·ÀÂBùÈõîÌ™å"bñï¯'ÇzÍûû<„È–¦Àd‰ g?€ãìsA!jH€ž •}›áï+Æh$Ȩ¸èk£¼OAM’%¼ò•ËxýëqèPÃ{_sgÎdð…/dðøã‰\£ÐY³¾´VÀy^åµÇEÎ $eŸÇÄDŠ|ÞãÂÀûŽŸ9ŽGB`”r¾Ú.öµˆ k\ã˜"J5OÈCÏŘ8SÃúµÛpLd8Îøý jI«ªŠ¶Šã ±m2–ŒA¹ àeìó´1ÄG d ʉ¶ùžÀ`ÆË²[_Ó ‰¨œ¤­JNж__Z43}O5À'>ÊÔlµod¸¿¬l¸—€¯ ÿ,ÇD÷“ßPk@rÔ¢z*ÊW#˜c{Œô­ +ªÆ‹¢>’­™¨ê î,×›"hÎì£Y³T)F!º\Ëä@€{`‘ûÔbý Õ…éРԳ«„î"£XÈâ YÓ§œÚŵ¥èrÓ#±Rݻ̙֘sÊL1g · }\­ŒE/)Ö^—ƒ±ŠÔN¨3›Ev‹"Õ6¿ïô®´Év8å½€¶:Û( ¼M€¶m@í°=êÌnõ¹êL_â/ô«%jão5´ºµÝïõw2Ïý>Û}ÌsÆ ech¤>F3<é*˜v‚‡‹¸»’sÍú8—xX¨´(B«>& dÈÚbÊIÑMÒpšü¬UöAaJÜê“<¤¢{ d¨NF‡ b¯gÃYc¼î"Çý˜1TDy™ç­¼“C>*,-ûx0 Ìd=p;¹€É½¡%#9zÕþÛ}‹–½sYç}Š·¾õ!¼ímÏ`q1ƒ}è0Ž/R¾ö A£@@À>‚˜E¶ñyŽÕAÈš7Q^uzZWy²næõ¤Þtž÷IÎ_ÁD%Duá|‰Ã¨%Žï2û<ÁÂtKÈfçýw,ãíoŸÃädÓµÛÿØc9wÿý Ž£Íï#JÏŠBt\Q  -ÊÀ’—x±ˆXHX¾ãŽårŠjuεá} øÉnä­ú¨.•0ºq+b>Jž³f¶›šêMóæùr~}2øø$Ý™¡‡:‡X“%Gãq™IþkJn‹„ã±Äu(£ç$Ýn‚Fô¼1r:|¦=‚\±d„W\4Ž:Ê1ùQ ®ñ¼ò1,`œšçOóësªä-,•w¢ëI™Êæˆe¸?µéu¯ÒA¡Šâ®Á¢Ù3¬ò“„DïQMŸ2¯³"™_ã\©ƒQ‘å~U|¨ý¡œ/õ¹mœ5©¡‚6xý¼‹t:yï9ž‹Q*~Žt% 5Ô|ìÓ,£½VjkNù2ä´þe)ЀËûXQô%E«ˆë°£þÅ* ÊËP/øHÃ]k3¬î±‰q±ŠT·ºTT‘Ú½ ¥ßÚKA‘ê`»^p¿ƒ¨—ú”ëxúÍ“Ø d+\s×å¤Op?c½…‚~ v3·»¶}Ÿ†j¯(V¿Š_½Ù7ûÿnå`ô2ÎÝúÜk¬^(ŠT?†a?óÜǦdQ[õ65¡ñ† 5rô„ªÞDMöU5—†ß¯"ò‰½9Ääél"r°óƾj(‹>V‰°*¸È•Î!ª×x‚¬¶7Éß<ÌGù=ˆ ñóG7=!T2—Óû5zQUt°@`0F𕊀<Þ7N$5›)zÙ²†–CqU5æ"çLònz á¼oøŸú©Y¼ùÍßG½ÞÀÿø¯Àñã£pnÕy?CùÁ´<™“.èãßàYD:Ù"‚Ž~Y^iÎ[ÑäOt’ÏÇ<ðc” pÌGÓ2Ç¿ÈqϘš(ªÚ¦¸.GgÛ“ÒµŒ$ò/{Ù$I ?< ï•À.ʆ¼¶…U®Ý9F1®F NÀÁ§©ƒs ’dIF¨U” @TUà ³ÊC*K-ÉÔ*-¨h~_1k¾ˆ@‹+zÙA ˳Š(‘^W¢w~‰ëì,¯#yÓC>ª€M!&_¹®TaºâcB·ê;äÉ—Á`"gr.IØVOÃ3ñë ˆ"ULN‰ÄŒ£’É%M«„úDz× ¢×¼`<ìŽ@~„Ï¡d—ü^–࿉˜®(J‡MÝD­VISòs Á‘¡|2å˜hßh1 ^ô91#¨™½ðŸEÉýèœh! ¨îLAÒÇ’éö17IÑÂŽ[ŸtÎs–jibŒ{ÓgQ •Ìñ:-íN\ŸÁ‘#E|æ3Ï?DÁ€Qt:40ã…‡‹µBŠˆU‰Ws Te±.DÖ\wÝXÁ3ÏŒá±Ç fÝK…I øsˆ‰®J¾‘~ýfÍæ*2™•Ê¢ñ$kí‹n§úrsÑð4vòn¯ * !Ò“Zˆ‰Ä)«Â &¶Ëho˜ñrm›±J9Ny®QWè­öˆõ”1[Œê'(‘Y¾á:ÖƒPÑg fß3‰5(ñYŠCòºw¦i¸‰jµŒèñehØ$“«Š¸­Ê¾€X£jöÂÇ3EˆÆHmIÉÕMDéÝÖŠ¸(It&ÕK‘`FÃDz´Ÿ)AجåŠqø”ÙÖŒ¹hjÿª‰-°/ ÛŸ7F¡ûÔ4Þ¬ËĬ5 dCE¶ORE£7¬§ƒµaŸúˈaú:{³/àá¿%—в“|+ d¹K0ýVÛ‰`ü¨¿ÖÖIÔ¿]'ý‘Y;kí̸Hà¹Ä@ýG~ž7_ßÉEŒ y+üw1tn“P `Òá§C­õ…µãM+!ÛR5îEHòÆmgÍgK)Åäj)´™d./zÍD;RD¯eÖÃLÜÂ{JÑ¥lú$éÜœùžK‘ñµu"z¢¬x¬E/)1’8•RT>¯}í ~ögŸF½>€ø0ž}6ð û±@¶ì¢ªO™sVD¬E1ξU ØZ4`/aDGýg›Ž°ÿ#CR{Ò|t8V§Ù7©ûÔèéW4k?D=yãçðš×<Žƒç0=ÃcŸûÐjeÑ3HãRŠ[ófÎÛ>NTÒu±J±ÖŸ!o#P¡ñš×Ì``Àá»ßgþE ë9ä«&ÒÄdòýüÿ×—Œƒ%”Ë‹èt¦§=¢º“´qX4žÔ|Êüê¥B~EŽk!6é"õOµ)DGlÓ°<Åuv±Ö‰§3QÖ× i#>k¥(Š‘5ówrˆ–&ÊPy”+ JÞ:Fu–||¶”„­çÃOºMvשCJ`75}IÌ^QØ`ì( Z4ëµhŒ£º1”ǵŸkò4"¨õõ'fÔ³¥õ£ÊçV2ZûâŠY70{®úzÁüá[ñì³üÎ2û2È~˜~•¡–€7 `Qé©Íš‹lŸ¼â¢ÍƒJEÝZœ·—ôæø» ‚½ˆô3E€®ÁU¼ímÇp×]ßGšÂßÅýÍß4±´d“¬÷ Ê 7 ÀÎ#&äÛbg–~±bæJò¢*Ü8ཟÃèèn¼±ƒÓ§âé§mÄfÙDĽ0ë¨CcE4#‡X7¤\Îc``O?}×Y5ωÔ­ôéÞs`ƒw˜ÏƒÄ %dù™óæšÎDöê@Ë@^â8ÈX+šZŽŸ7ÏJ‚X3#c<ÒŽ•°„g ¨–ó‘j%àjžëºyþÛæû‹f޽Ù;ÆÖ"[1ʤõèÌ5´6ŽR•JMDIuHªÆHhãFêJ8†ÇŒ×ß&¸w èWô55{hÓÌW6Ï"¬¢•ÖÌÜ "*°µŒ‘5‘‡,Õ©ƱR7câ1“# ¦Ï*(…§ÖK2×M„©ŒõÂEZgâ~Ø¿{ÉŒŒÍÙMÛåðDúËØéÝ¢Él°¶›Ð/·~;ÆW?}î$vËoÙ §—Ük?Tª­\{¡<ëkjP4.\Ÿ†úü{¯ë­}7Ÿ FÎbÍ÷ŠFõ“{´Ù|í„bt%D2wá¾ë4ËÍkãæ_âA1èâAŸoš›¢9´¤NÓÜå(™C5ƒõÕ›çŒwYåyãýL« Èq<ˆkˆtyñ´F HZ5º‰XL *©~„<òªpž`÷4"añR.™èÆ!7!Pg¾C@"µcµ‘†´dŒ´QsØŸöÀ ärƒxË[ΣPXÄÿüŸ‡ý³Ï–\Œ–ˆRrÈx±ëfɪÊð>F!š&ú2kŽ×Š4 ÑŒö³-Ó訢 Ò ZB¤ÓùAxßÁðpW]ušÍ"jµ–——ðö·?;î8ŽJeGŽdqÿý<úèª1†$ÍYѽXd|HrVÑ©Qp$ç:€XßcѸ§aÖÁ߸„‘àá‡ó˜›ë Iö M¥$ÐØâ8Œ J.Kýk€×;²fÌ%I7ܰˆ¥¥á žlQè”([`R³ž¥×Ôsüì> 1êÙ’BÚª1¢5ËÆi‹b7¬5æ#…©FãOµo!$þ/šçåZþ®hÁµÆÇϴ̘‹Ú%Úžs[w£Éù7=o"DyÏœ £õ ö" N?ÇçvÒ¬]ç¶©½áÍúM ¶Ý`>LÅøµÙÛc¨N™=I×ï#EF s„–7ð'ˆT+í{¢8u\ŒŠ´9'üʃ‰°58–ÚWÊÆ ±µ1­Ê1ï꣡¶.rôX£¤Å{ÈЖ3(cÆÃ½nƒ±ø‚‘ë°@v7ùQ’©½Ô`s»Ñ÷÷¹W®Éß·×nzÁ¯:˜à›¸fÍ_޶$¸$Õ°/Ë<÷›ˆÞ㲉9ÚÑ—7Oô†9ã=”WPµ;|ò€–6x UZ‡b‘ru‘[žòÐîø í.oó4ÖS˜òæ[fâ¤ÚÓ4í0Cbe1ê=¬ð{ãÑ8pMé,êËV9vçøûUÿ?{ï$ÙU] ¯sóõ~vWu·¤nu£ Ø<08lŒm°=31¶b†‡?<ƒù˜ G̯/Âã˜ù1|;Æó1vð€5Ø#c<0l^z „ÞÝjõ£ºë]••ïÌ{¾gíÚ;S•™7«ª%a¨ˆŽîÎÊû:çÜ{×Þ{íµ̾I{™ŸI~ÁÊ :]Ä›>4}À¾M8wÞy?ãßô¦ œ:uO<1ø‡Q(¿{’Ç9É1á¹oC óò<î¶‘—-C¥3d1€üz^‡È­ )°Â³Îsäv6±{8—‚÷d³³xÿûߌw¾ó,..ââE X¼ çþ=ö––.ãïþî(>ÿù¼ßsM:oÏCûpv È©ø H™å|8³¦+DU çñ<P…su‹¸ã R)àïÿ>dšã¸€ÐcÔ6kn_…ôW%ШøÐhš'¯¹‡—ÿ‚GÁ3õm4bà*¼/âäIà-oYF­»?û³c>Ž…Ò4™ëU^_ƒ*GY£«/ Ù—h¶Îµàè±àæ°€@pKĪØZÎs–Aaƒã0ÏL¼gãéšóÞ#“™òú§ïñ·Ýv[[ÀßéS¹#G¾OM5q×]¿ƒ_ýÕO»¿þë‡áÜšFœ÷§cVÍX‘j#(âˆY\ÅTÖR\óu„ëH 6©¦³¥Ee8ŽOÞ—ð–·´üä¤Ã·¿ ,-Dqª ‡õ8ʵº àf®™²AÝÂxC˜÷ï\é4ÇUx?ëÂZôNé95ü,ÕµŠWÇø)š£ U­ìBóünF”6åÚ^óZ=¨Ó7ÆQÉk„ç=Áqkzu¹Ÿ¦©LÇa½” ÎÐbØ6浊Q'§Éûßö^D‰àß0à2ÅçP‡yåš+1xiRš7í»Š8ÏBákRÍ„ pV1×&Jx’aiÝ‚$\gA-Ö G¨JãÍ céñXñáÙ6by¾ŠŠWSšÂc*-Åᾞð*—+Ïó§ÍàSæÙ6Éqns¿)¯t11¯³UKóŠc­¤äAÇom5Ôcz”˜ùiŠqb¬A—Pòb>óšæU“2ïœQϪ³Ù½ë½)ó"jZÎ)¯Îç“ïÇÀk÷Â=qdÃ) KOé'ÃêP@ 0é\Âß {Í.áùõË¢ÂôJ&õ9è5£àêl]ªH?¿a(RƒœÆý!Íó0kp˜ct;7Ä÷‡U‘ê×Û↸ߓœÏAM.÷ó8Í‹ü IDATùaÍs·ui<-ø Z…zYDü¼bˆç‹·)S²kNùâU“ío¹NšT ª3¿i³ÃRAà±·ù"áöÎ(¸MAü7l3©ÓŶ Ûâ±³N•¯àªM;ͼ^ð¼ Þ¦v n¾èOO1xhÍø€sÜ×+Mob5æû¦"⟤ò¥A· ÜÒÔÆŸÅ/þâ㘞ÞÂ_üÅ~ee†Ç¹¥9ˆ9]–Àw„ç Ni?ƒ A–dj¯ 8¯ò¼ÞH€#Fqçü5Žò¸%ª³÷²Uçjð>ø—Ü«_}++Àç?ÿ£Õú®^ÝBµ:ê~í×~³³wã?ü‡WâþûßïOrßë.Œ¯ô;ÄPÍ¡½ ŸÞº“{£Å?ãÔ‡b*¥,RÂM-;–r­VŒï~W¸ü—½6¡!8ŠOðš·¼65§3{ŠëE\ÂòH§×Q(”Q¯G¨ÕÆ@ge“™öP>?œfÒ'¡rÇâÄ^`þ¾å”ÎÖt*Í*UGq¦/9•æMWxMR ª ø¬xÞ³DOÈ9RÑl•óàzËHV¾Áõ%YžâX}Äiögr"ï”î$ G5¨ Ç©æ;åSežS.òBsL‘gmp̪̬§ ‰¢p$ž;RÑJ9Ó(m’)Mž‹(}€6£KåÖ62;ž7 Û`SºÐœÆMÛ¦ dÖ©è´WÚÔçi‡ÁE†‚-ó,–þûšhò¹(fzR…ky¥ˆ:¨™žãyÈ«¡Áj¤€ ‡ñ”©Ö€ûIùÎ*¨Ô9c¦)ô-‘Á•Š_Û«Å&ÏéÅÇÚÑK@Ù\¨6ƒ(Ký2úƒÌMÜK4&½*6;<ÈÛc˜¹Æ>Ç𰯵×LÊIô8ç‹®ùñ}*rÃ\×~«^/õýì®Á<ïñSåË:b‰^¤å%2åš‹ëð¦P•yl‹XÆ”Î+Pî²¨Ž¤ ¦w£¼i(–àBèOBAWI^Ž‘†6y‹R”諪¼x"°=Aà¹O‘ß¹M¯áw²N)/OC™ç&nEã’Ÿ†6^ŠÛuµ«@%®à x÷»·±°ÐÀúzÿçÿˆ«÷´º2 í?±Î»;v‘">< <|áÆO›¹¸Ž?ÉýŸƒ: ƒ`óÔÔM*0_îýß„÷¾÷'Ðjmã‰'þ=âøS˜ŸÏàË_žÁoýÖÞùÎ{Ñn·Þz=~ò'ÿ=çç9„ÞécÙ"xºŽTž¤@@«•JÑšdë¡=¢”2Ç7ßœÅí·—pùò$}T$D—M |ʳ—„÷u=›÷/p,W¡×UDQ££ ¬­¥°¶&­âPg x“ž#ÉÚç½6îoB›êchÆüÿ¿ ¥ÖM|ŽÛK3zƒàt êL~‚ûÝã·X½º„ J¶nÎí‚ÉãqîS2ÞUŽË,×Í „ïá8åœ6aŸäŸ9œäÌsA¼/²®ÓçBäc \§G  l»rÖ¼ÆUÞ BÓ×qé+ó:ËFÀAžUÒp^‚’\ý¥¹¶Äˆ´¶G®3f¢Äʵ %JîÁºyvÎ!P5›Iž¶©ÒY9Û,BKž—žà¼[q¬í´'Kž%&"t*lÙÜý^v«&ŸÙ>'û]©ÌɳE¾'›4~¹/¶»îå¡ñ‡;è;{£½$ " %Ã%¬ ì×üÃ%8ÿa¹†¹ækÉyD5éwþ‡uÍi<tìö{;Ï:JjFx@`úæÇ'‹—ÊhÏ ñ¼´NûTøä¼›†š5ÊÞe–Ä%hÈK¦šqÌpR¾Ï9I“fèÕñJa‘ÊFLZGÖdÙk<‡œ9¡]Œ8ÍŽ›ÀeZ0ë5»/Ùï2ÏYŒª&¸õy½3<—3k]âù®:àz€•€Øº1Ä˸h½2uÀšëÌœN P–Ê>ô;,qœfHÙrSSiÿæ7?çÊåuÿǼïgX™©yU”E—<Çiœy7™ ¾pÕ©<©€nÉÔ¦MÖ?ëد` ™õuÒŽs^Z<ÿ$Û¥Ÿú©ª‹càá‡gÐn·|˜/ü¢ÞµLJNÄk=àNÎó¨¹_JI»B>—‹±±‘…s%ç}Ã+­p–`rë NGzq¯@9ôm›fíú,ؤ p˜9»VF{.ApvU¬Anßî]wÀß÷[WÝ_’@ãž?²Fp:’ULöIÔ§òèôhx5‚ê.>I¶o JoÙ4Yº”FÒ4*¦b#ÌðIN”²œpÛ¤,®Ã¢Å/Æw;PÕ#y±-r¿Ž—užKÅ,‡æ<—æg æpO°:±LðÖ (ÍqŸ%hÓ¬d?Å<­J ¼ à4ÿ^âþ²8tzï{ßspî | .ÜÈqØäK]är/Bë^U¨NIÀÈL»3€ÁÊVŠW‚Plë\“d"›7i†_áïæ9>ë˜ñ‘| µÚ6––6ñGt?îxž h6cüÎï|ŒÛWxép@Ø’fö¯4íÆ¨HÕJgL5,e²×µÝJ×Í7—pÝuÛX[[ô< Yi©LAÕ|¬'À€Ûy¬'Lf;‹À×OñØÀ-·4Ðj94vç½d½§LÖ_‚–ÉÎK6]¼`&‚1”ñ¨ ¦«f®æy¹/‘ÃÍ™û©lz¤ÒµÅŠMÊTzjØ;gÀ$锓PSIÉ宊Œ€W¡èeMu.ËmÅ 1"x­:s©FŠ’˜ñ5(í±êU ¦Ú`ûJœW±Š¶¹ÇÓ¦Â*`7rtd‡R¶æ˜ E¦šÙOd÷×M2I€*Ÿ;u4¥4cž{ÞT!7ˆZTl*²þÅPÑJÏJÕl¯W`lþN›„PµÇ»@*ÞôuY'ôØwªa9“¸híõš3 -ožÿ/);àGF{ÿÈ~úɆ¾˜R­î€çþr˾'©v/ƒûÐ]ãuùCúu-¡¸k ˆ;¯˜-ÕÍ‹¤f‚’œ 䥜ƒ*ÙXå DÄÉ86À\ôøåe-MÝÖlÀ˜—VÛT/ŽðwE‚fi /q@§Øe“õ¾uÁ¼pcî[øÞVåJª%’e]!‡fÊEF¨bfãxík›xÅ+žÀw¿ |ò“§ù½%¨lg*§;eÀa–ÁEÉjËŸ+ü·ð¡%x+óšÅ3B\°G <Ÿ‡ª‚àMCòç¬ãïXÇÞ°‰ññ9Ôjÿ~ÿ÷Âã ÿöß¾ oxÈãc¨ÕøêW¿Ž¿ú«¿ÁÚšP¼ÎB³âRE˜…**YÉ]¹þy^‡PáÊоYWÒëÒ0Á@‹‹5ŒŒŒâþû'P«]1óî7â8‰Ìõ‡ ÁûÔ³Bd‚祱±P¥*•ÀsäZ*M£ „Ï›ûnÚ¸A•‡Ræñô׋P{ÄŸd̬y‘Ôõ\'ÎÔË»27ùç¨,±xIlA½nÖ ›q¨$颔;PÜÈÜ 0÷÷”r—ƒ*Ze]¨øY¥ª ǤÁJŠHF§Í3@è–æ#ûM™±“û{·ñ¸â:]6U¾ s=–Ò•6cÚîÊàGæ>1ç–5‰Q¯k°šj׸ô«É³«iž±  • nšs(›û5NF¸ýBU#ËôîŽ ošç¬Uþrf<[} Šï `^úŸô€È‹Yíx¹c˜ý%QŸJ¢<Õ«0Èð8¸ k*ÉAŒöÐç\÷k´wX&p½”Î’T²ö èÐoz®Áa›²’('õš×a(’îEª’ÞŸîÚ?‹:Š®ãE<ÞŽÉšK³­h§‹ ­¼$E9©m*΀iÑd¯˜ÀÄrû3¤ÏLó߯M’ÎP™ì¬H´N€œ^eB›æ÷9hÏŧ F¢ 2¥$ ßý8Õ{®ð.O²áÓÔ¤eŽdq¸gÐ €³ ëNŸ.áÝï~;;1¾øÅWÀû¿W6 ºâö;mˆ.’"%Ùá ÏKh&Ò4›c3öõ®×†ø«äð¾’Ýñ2ý!)s)VN“¾Žú~gPËÁ5{÷¦±·UÜ<ìFb$7 $›Ú½Ï^à¼;8HB´ûÜâ>5®$×ìûªÃôÔ 4÷“(v{|ÞOõ0³ùûºætD솜烜¯Ûcm»}\ó‹YiòØ[Ì]ãc’ û|Ç%x– ú¬ß½Ükm÷‹’>§ú\sDÙAÑ£/#¼è²4A“—OÍP¦šqxù£ÑTA1•ÀLÜéëèE–çÛ>dV[æŒÌ.þä¥: *‡\Âe'@e„¦É §æty~ÖðÚ¬9á=âV¨ ßk|à}?I°s¡ob–`n*f`åÂÿ뜃"Âñä¼] \àxŽòÆã»ï®¸‰‰uï½7º'ž(øêÚÇÊ™dç ÊGEJóNü\áÔyUùñsyþÜ«ÁØAdŠJT5âÀM”#]s@çŽÃû5ÇmüüÏ_ÁììÕøÂ…y|üãSîõ¯¿ÓÓUüʯüR<7—s¿ù›‰Ç íö^ûÚ·Å¿þëïr¯zÕ,¾ð…ÿ‚·¼åç±½í(Ù:BŽú²WÕ¡Ø+ÕK ý`æÚS•&Ç5"ãSñš¯ùÙÙ üÔO5ð†7´Q­Žû¨¡^Åäg%›/Û+â 0Þg‚Ô`uì㩲9<ò@ìçæ–÷-<òÈU»fâ°þlï˜åzo4Ë}–â¿m•cÊëv€Þ«5ÃOq}à,W8y®ùe^sÓ©Z[ËTåvâp=b"9ʬ`’²½lMÊU‘ò¿)Þ[Î…û¹nî¿A:UÔ¥bžÌ 'ö×Bk’Lûíbú׈ag3V±îg›ô€x¯}’ ‘„F@;jQãæUÓâñŸõXeéçˆ5á’šáë¸jªCÊõŽó;M¯¾us^ hÐ0ÊuVã3Hˆ²ÔϤ.IµŸsÁ¶Ù´ó…läj60ÏÝúrÃ\GÕ¤ƒ›>áúèš“¨õš‹¤UÊ$Õ³$ ÜøýûIü{ކØç€±ƒ=˜l[A@•W¯ Ñ‘GŠ)£Q€Ñ­{sJ1Ï+Cà”rJ¨òå-M*·Ù–fo§½)Å#©B÷ÒÔÀ  1#NYeVS€†(¤ÜÄã_Bð¿˜ð^EŽÅœ Êg>Pš–x^Ef`gèø-t¨§i`–÷Þg1>^wozÓE”ñGtÕªhÙÌTy¾ã švœòóK<Æ‚"UƒÕQ.ª‰B“ýOCMÏ*˜³`¿ÂÀlÀy¬:ïÏ ŸO»|àYòäÚí‚ûó?¿_ûÚšã1uT«×lf°±qÕß{ïŸñú¼ýïÿþ§Ü/þâÛý[ßz;Þö¶7¹ûî»Ïkƒþ„ø³8Íæ6¸V N›ä%ë¹^ VMPW‘Ífñ¾÷¥£›nª¡Õòx晣îSŸšó««¸¯¬np¡÷`™kô¸ óœáÚÞqÀwLÐä|D\ëVª‚|6Ûò““W«Í#ŠŽ¡Ý>ËõpÄæ÷µÍûh×¼FÀY‡ *dRÝ›b¸f¼ÒNE òÖ¢@qjñ><Â{aAgÕ(Åíš¶ñß› ž*MæužgÄû/åu.F$Á@,}Om~3({)m²÷âµPe0éx’”¨ ç=YaF¾Îõ.I]£7§LèBíõŒà-Ïž16—KßDÌ꟨v…N•%©ŠxãóÐäzpQ†cŽ_…ë3ëÃ:ÙM°ê3à¶ÎkžŠÂ5¯rýI…ª õ•h³JdŒ¹0w ès©ã|Íÿ¥Â»Îá‰οmÞ[I,y­ÚÈ1jÜO* ó Ë ¬-ß k'1Èí•$ï…µû&ôÒH΋Ä©OâÄ<(³‡Ô ^Fm{É‹ö:Ïa¯9)5fPÀ÷ëbŸPYÁ>Æ^ù(I•`?k i°ó‚ã6Zv¯ã"x4ÞnÀu%»~=$û© S9t¬¤Áþ ëOê¾~Ø÷³CrGn7`Jp`÷žWž0`\‘ù“»p–¥Ÿ¬T8§YÏ,{'Úƒ¢ö’——”Þ"Fz ¾Ø ’ô >'¼òÖ[ÙOɺ·ÂS¤MóÒΈ‹ß‘ŠS‰Qn[p ¿ÿ4 ÇŽ¸ìÂu„LC$+Ìfð( š&›tJqð_ðÒ/0‚7¿¹ê–ÜW¾2ê——çI)íû2Ý‹…ÎP†ÊÞæÔÎðÖXÑxÊ­^ñ$ï˜ëO#P7Bv^šR/"TΨ,3Ó=‹ÅżÿýO`vv[[yÿq|°â‚ÊÓ«4|·qìÜg?û¬ÛÞ–sYA^Ó¸Œï~÷{xãoÇ]w½Î‹iW©Ôl@Èç¼¢‰ùŸÈµŠa[‹keÒ»°0‚÷¼'öGVÝö¶ÃßüÍ1ÿµ¯ÍÐL°îÃ\NpÌÊœËã>Ìù«Ëx˜‚5¨ÁÉeœR‘ÒÚVÜwßøÆQÄñsð~‡×\ À%¥Æ5u¯4º)¡>ù;ïVW[øÎwh6Å<¯è@Ÿ#@›aOPŠÞÒt•ë¹êÈ-¼çx¼½b2^=?åXŸŠég@/«Äz•TÞ†Òz8‹š‘Tòʼf¨ZÞ´™XÀ¾ôÈã*㕪$tŸ%_Áóhð<ÂçFKh.ôWÀuöReJ¤N¥¡ÜÇJÃLñœ²Ü§•Dµ”¢ˆ„Èàn ¸¨K#|:æw¡ ÚžG÷ë¢áé*ÏÀ'Çëá6¢úUç\¥Yáç`Ñcq˜«&תônH 'Cš2”³˜Õ±ºWï1EìpÄs]ðÖ¼7¼Á9S‘Š|gNLhR)¯Rµ‰qœWµ©4ûDâ^X»ÇH.vÒuͽ±ö~Œö€2´_¿Ÿ„ R,ºÆ\½f7 òFmÈõ¡fô D’ƒæ8)…,©WG’9 µ'‰,ï~çyØJаc¶ OÒyíµÆ•H1 [ᆤõº_‘¯×ò~>l£½>Íþ’c'1V“^‚ÝÆlS¶÷†]wÊSÏBµîS^é=užÇ´i^ÍA«ã®"׸¿ÇRÄàJtüó¤dÌxŒYê) <ÖUÒ˜v´Å`mŠÜö+|ÉßÊ—úc<§Q*4ÓΫ¬ Œ,î8u!h©2;BúÑCMÉãg~æqŸÉlá‘G¼ÛÚå‚Òˤ©´I_‘æX1Òi*^}Ä‘¸Nð²ãUê·m‚­ÁèU€·rŸ0‰ÉÉ ÞýîUwç;¾Vká‹_œÇý÷ÏrK ήš¾ÿý'ü›ß|wÞyÊ92â¯^Ý€êúG˜Ä;ßy ^/¡^oz¼6 g  çS^]½Eméhv¹€ãÇ˸çž6ËØÞÁ'?»o[* eŽÅB/Î k·9ÃÖ¨ø³Ìƒq]Ÿ! ÊI¿‚‹uÛÿÜÏ=‰×½îi÷쳓þ;ß9ÀiÖ’TÜfIiiq­ŽÑhï<ƒ›¦BŠF×ñ{‹ džÓ\¯«PªŸ4à–y8šJÐ*·n—7·þqÕkRÀ›û¬ŽÐ$êSY~OzêfMUyìQkwG IDATŒÓì»Ðk+A5KŽ1©B¦ÐÉän¡S2ÕqŸÎ(؉ižøoHOˆd še¾kN½%¤”çAÛNƒçzwØÁ½ã[øñ/ar2ƒÇÁ}÷W®d¡F| ™ÝI^ó%(GyÌ,ƒ+L[&@éTñ\˜r*©Ô–Nœ8;ï<ç*øô§_‡r¹ 5–[Aàß‹<é,Ô+Áó<žæµfyžÇÿ– sXÊ¢T±DêV2Üâ5±­"–xU¸í´êµer$îSdKw¸%”û\z>lïSÕµÒ£6ë¬mÖ°ÈÕŠ÷‡œ¿8{{£2'=q׫µm²çQWŽG¨œí=^yö{Ò4>Çu¨G„Œñ¸ã^hd'ç•æ<‹„w õS‘{42ã( ì¨Ô*Œ‘ÙwÝ<³èôí‘c¸–™‡´‹nX’F§ˆ7ëÐ>ã[è4*ŒÌ3?ë^.~û|7M‘J„ü>Å0£¾aà†:“ÔuÚ j’T0z®OV|7ÆcÃ_£yN*„0LcÐï÷SÁèõû~jkײ‚1ìï‡^¸Ÿm†¡‘íçÙgþm9´ò© ݉·´yᤡ™? "CÊ{uQ®ñÅUð .äÑ^öª¨Spê‡!ÔÉÎ Œ²’M3i{+M{5‘ áEoyà"³|¾oå¶g¹£Ÿ‡QOò¥/ Ưt ù·ïL"P®$EËœã|Ö€Äq´166ƒ#GÎãË_NáêUÉZ7Y‰J.6”6/ý¢sÃñ4Ó(´‘¦Sõ¨çxgh9wd¯"ŠfÝOþä9ÿ3?“C.׾0áÿú¯o@½.…uŽã(R©«˜™YòËË'äñÌ3Ïàÿð³øÿñýg>óxË[~=öu)ŒŒ8ÿÀŸà°³³ƒ~ô¿ (uø x“eVͤZK–Þ—qòd ï|gÙÝxcív Ÿýì(¾øEÉŒŽÐuZ\´sÜg|P¶g¡”KœG‘g-1+<ŽN*ZsZÃ=÷<…‰‰ ¾ð…×ùK—ª”–¹Š<§¨œkà?/yUÁºê(ÇKÇìužÿ¨çA“}Òpû<ÿ= í)Øô8HCnžÁm‰×(˜ÝJµŒ•­åFÖUäõžÏ™´É”K%í5€Úuvöê³ç<‹ûxU„¶iä@.A‚лݟ­Ù[Ûwšv4i›ïÛ?2.â»#Ô© )‰Ò³">-yhÅFܳeÝJ 5"˜×J„ô9ì²v¸ÿ&º"«¨ÂU¾<€º¦Ë3w׉ÜT|.Ú„Ž7É¡:´Ežá‘HÑš*RlÎÁ› uBêT }¤g÷“œsC¾Ã’¼gû%Y_R'ïæŸ$Üõ~<ü¤ 釙Åï×¼ô{>Áö‡u>‡uíÃT†iÄßïxSáB‡ƒK¸Æ†=/? àÙH¿¸·~dÀ°¼¤æw¬ʘíÀæÑÉ}Î`!bo¶Éšêƒ¥´4Íðšï•†ÅÁyJÅÊ@€%hiBû>ÄHMœnoâþŸ‚6Š¿Òdµ/BUz¦L¦ö(€Ç X‹(W)fä+PšÇŒÙÿ´©¨äñÎw^F»½†çŸ?JpVƒb hL±63oƱf²ÄÞì#‚JðNðúÅ P2õ7"4:×ÍÎãßü›³8s¦…V+ƒ?ÿóY|å+ÓÜ—{³Ÿ‹h·ëøÐ‡VÇ+¸rå8¾ô¥þóþpêTøÀOãá‡?…'Ÿ|­V7Ýtù|X ¿ýÛ¿rù¢èFıÍÒŽ@%­&òy±±Ç7ðc?VÃÜ\Œ©©r9øçŸ/¸Ï}.‡ÇÀ7ƒ@-’ªŽôÌÌ ÈîNsN7ò%û}V‚ S9‘à»L&Z™&ñOÿéw13³Ž">ûYQàšáØ6hŒC *7L…@Üݘ_1YëPÓ2+nËóæ~Ù6•«ÿ_GPŸIÙÈTÀÆÐ)½* r¯ˆÓ½$Ä0.c*u-2…º(”Go2ýÎßæ‰æ>ÎC;7 ò©rÏf °mš (FçéA¬ÛØË;…N³oðêí àmhvÔ€Lá©—xc¡Ž`ù¹êÀü]hSqÖdÅåz™çž‡R[Î@{#äå¼ÂªŒcrNœXÄÉ“Wpõ*ðío7Ñ©1/ÿΘà¢Ìjd—WL€&àA¨2UÊlÐã bs ŒªÈfGñÁžÇ©S›þÒ¥>ö±°²"R¡bx'Î+<ŽIai)‡n(㦛ÎáŽ;Z¸|yŸûÜÏàØ±áŽ;Þ‚W¾ò4¼vvZ8þ~÷w ò'ÿœ;…8.™1”êC ™L¹7ßáÖ[S~q±åbŒUÐhDØÜÌâܹVVbüå_µZ“ÏÔ5{Ó_¨#üçô"B#w‘@ÿi(w¾u ?à:l8esN`vö2Þõ®oam-…{ï½ÍT.®0Hñÿâ³cbé÷¸Êïœ7`ò‚ÂY›Jcç¡Õ¬Vž'ì³ZÀ(t¸)„§Ì:—žqÿnA%`Åó¢¥ è3AJËdù…FT7ëÍÒq$ØÙ6AuÃdÚkTïR1©œdjýϾ]Ÿ tª9ŠÁµ`…*¼‘ímum#ב2ÏÂÝj.”×6US©€Ä¦j+÷únÃ7T< ,’µP©§öx}ÊýíJÜÈ5Df~ò&èl›Ê‹¨Ê¥ÙäÞêJ5÷xe§Ìø´Ís>¾–ï¸k‚µ‡iòå`÷k&9Œ&o‡Á=/ö5#A&7IàÔŒ°ßöûùé×@? Ç'×$©$לÄ÷"ÉïûU††iïW]Ù‹×ïóaª5IïIŸàü“Ðå…nÈ òZˆ6¸ûOrÏ ó C—¯¡Ó޾»ë?aÔd ,³Ëï­$mÌXÞ]¥ù½MÒ<©×&L2%í´w [+¡ž˜ÂŽy^Jsv®«¢Ô6ÆzY¨#¼äâ[’œ7o¯Amó,SÀ–SÁ ˜DPÓxVýUæÕ¾äóÈHìîÙ“º¼·¬“¹ƒT0~Ð~~Èh?úùÑÏÔ½ùCB•ŠLö¼W󞼬SÔ @oC)’)Í™—n ül©–H¶>c²o’ák2Ó+2¡c<iú,U¨/‚pí×ùÝ“|©Kƒ²T`ZPºÓ”jQåuIÃö¬ÙWd®AÎÃ3}ÚP[á1FxœË(N൯]CUðíoweïE¡KK‹e(™ã ¨‹s*‘)•nÚ‚|ïMh¡ß`À"î¹§ŒS§J8wÎá÷~oÍfÚ1„Ò´±iþî¼ýÏ=WÂsÏ-˜Æ¿¸ˆ©©<ÞøÆ ¦§kÈfÿŢí·¶ñ‘qþ|<ø`—/{Ü|ón¿}GŽ40= ‹M4®^mã™g"lnÜ—¾4ŠJ%F£!Íÿ€V&¤?¦dªSœûÿ=ÎÀAzjføùs&ƒ~çÖ¸ƒŸ¯s¼‹¶àܼOá®»–ðÊWžÃC]ûï#€5x?n‚oªgL#Yü«<æšÉØÏAÞŽÒDh€m“ý—@jJ¡…*F dÚ6ºÇæž²kr Úl‚6ˆ7,P6™ðS¥H›s€Y³Bmj™ûÃªÏ •¨ºyÎÚfõ¶ù®±ò»&:›¶yfù=>“{Â*µÌØîúDà…4 ~…nùý8ÏmËÜëhŽ¥A‰¬lÆ+ÕªÄõ"³u§"½ŠíÎ\‡T¥Ú& k™ó³MÚ»yG×ÕoÑU¡°.èíy®x@>ó創‡iòîEÃ8¨“oZÅ0MÞƒ(Ã8,Ö5ÿcþù!äÑÿèçƒîÃAπúŸ»·äƒ‘àœº%Ç»¿›E'_[ÌïÄÙ{ÔƒçKR µZ6ÇýÌ M«fÁ¦˜}Ûró#¾ÀKô‘hÑ}Z@Ã:ÔAø8¯©ÄßÝÄc\¢³vD ° ¥%D>€N¡MA)$3Y×ó|‘·|¨¤Ô¨y_Gð8òœ«Pc2ÐŽ#Ÿ/úãÇ7ðÈ#9œ;'R•mŽ÷äæ\I9òIè ÙÖ$nÏý*IMÐ^Œkv &·×D šì¤nØI<=’Œõ~ܸ]g÷çý,í“Ȥö;‡$Ab?‘a×X¿ëüAèÁHâò=ÈÇ"É3a˜û9‰·G¯uždl‡ ®­3ã´Úíz+%|te»ä%&o8m^MyÕ CÖ«©dë"zHD&+êhL Òš|iK_Ad²ÄÂ)®Xà@çà_Ðy TZ£‹÷¯u•ÇI¼~Ï«œë‚N¾üNš¤^ûJŠ¢¶R$8Xwð>e²6)¯:î~ög·|«ÕÆÙ³0YÙ4Ï%e\n[èô˜"7æ‚~@­ÊÁÅ65ã €c¤Y­øà]¼ç=à¶ÛʾÝN㓟¼ W®ìØŽ‚º“ðâ[T’ì´Èíf¡ôŒ nÁû‰]U$ç",-y,-µÝãÃ;7ƒÅźõ«Kîôé–—oµªnggÚõ«c¨T¼q nÁ¹€Q꘸Ò#Ð`à5Ãkž¥?É4Ü(‚ÈwHÇ™sáÜ'Ô³$[?¦AÀý ‚?Æ)®Ñ§šú¯PÃOÿô“~bb÷ÝwKK£ô0Ø!Õj‘kaÁ+d”ŸÏÐD¯"#çaœ” 1¨,qЍFÕÉÅ_$è½LJ!¨8µÃï娗QåïŠ>,r_•9fe§Óó› ó^û+ä—uæÍ<{é ðÚk´›gp“á6âêí$x0 yœ}¡G‰b’l'2«â6™çc†ó&AF îב1Û QÛTZ¾³_EÌSžÛ)S¥mÐg„ó.‚;<_/ŠÐ^0Rtê³"½:žje F3S ŽäñæymOµaÔ´ ÎwOߘ:t6ÎÃVN)mè.†é5=L¬K'Æi ÇÕw À©œI—ù!öŸä\zñÕ‡ÙîZ\s¯‘$*B9/`¸æöa Þz)–L­C2™Ú^r«Iö•¤Ô·éÕa×î~æÜÂþ€d2µnÀxø}Ž•;à9ú>3°ç…ý±’OèŸTð{œ§ «”é3öeÄ——<¦ó ’ Ü‚ö7Œ!ð[|™ @! žtD½Eθ€li˜ÜU†ršÝ , 'Mc¹Y6ø¦ ,k>“¡|øSfzÏó÷ Ü×€Ûè+WLŒ9íûhqÜÚ¬ŠäYEÉ0î8u}öðÞaa¡[n)GµZÓ?üpl^qNÀyÔ¢ %Ùë,«5k褘ÈX}8žœS–U›¹¿Ëœ‡Y¤ñÞ÷>€W¿ºV+rŸüä­xè¡<‚’ÒŒQm+Gp<Æì‹Fþ¶#)ìļ0xUH@”uÞàÒ¥.]~¹8=‹mÙi&uÒ{?Ê1­AŽ«\g‘TŒ8.‹¦¹¹ à«.ŒUá;"õÚå`8¨¬!PÆ®pœüù œûTÜ/ÿòãþ¦›vÜùóãøÒ—æxœMhÂõ ÀÆyçhNw’÷Á¿û4Ô`M²Ù[ÁöªSOñïÎA™=&-§½61ï /Á&”¾×æ˜  \5ÁÕ¸NÑE¾Ö»NZSÃ<òN)Z-tJÊn@{vlo€ÜoÎÜIb£í ÕGú¿œÊ^Ëc\ŸwS’qÚ&FÛu‚cyîVüœ¾vá^Uª×³Ö&ðGy¿­B+®±>[ìWå±›Qè/“ª‘wjx™ñÌB{äÚ üNÕ¸±Ûs”kÌsQüBb3~Væ;vû±†{ªv¹„Ø$ ÖFJ?‰¯Vâwç~z0ö“éë—1Ô,»ßý'­:øášÿ1þ¸É~^„ ¾?ìý¼ŠÔÛy¼ð%t¶ÂIß‚5™Š˜•­™,³|oÊg—¦S1éË¢ÉV^rjî'T¥ŠÉB øÝñª]/ŸI5ã ÁãOÐÅz‚ÁKÆÏ8•ؽ.sžÇšƒšî$(JKšAÑEhƒi… [€m›ûxªþ$Ù÷"ffꘞnùÿý¿›~uU€@Êó*hzÖ£¤H­:¥©ÈIvÌ¢Ÿ1 ë2³¥³N¨l÷Üs ¯zUµZ÷Ýw=4ÃëÏš,zŒ`H(JZufŠÓ®“£-|ý¦eu­e³VrÌÆ =ÒÛ²C ›ñÚ€œá/û΄&"Ô¯£U¢i(uo›cu–ÙéŒSÚØ(´ßbѬÁ2ƒÁÔŒq•ð€h¸W¾ò<î¾{ËW*Mwï½óPêÜ$·ŸåÿÅœo‚û¾TÁ*i—¡ý05O(i;Ùð:©p%fª‹ UU5˜±O3¸oß é‡¨™|CŽÛ,!ÎÜ—›¬Ž0°,ù–[]¥e2òóœæà·È»v÷GìVBVªT*ÁŠ‡Ì«Ð{"óܱJHp=½ŒŸ¥Y¾…NTKv+h^þ^ÏÄv×ß#Ó4ƒ»u“™à³CTÅd½ñÜî°êk«–c^….¬L8 ëC®Ïª=ÙŸ¸«Ú,Â)sÍ»cÇ*PžGþÅÀÚƒÞc× k§_€à Ûý € $NÞýÜ›1 ¤Õ‹¦ñÃêäí^dÇ÷ãNÝoM$QtJ2ç‡áäí†Xs×ÂÉ;ÉÔâó¿Èϳ>×e3x‘y)eM&Ѐ ˜hà)£üþ:T†Ö{QV"êIaÕTäE_'€Gg#â*ÁÚ)žï3&-2›£žÁ÷=ÆŠÀ#|©Þ@p–ûšçvò:ÄY¦½$` Úg1õÛhòØÂÅÛß¾Z­ILïu<å…¾ˆ Z/%Ö~Ñö¹ŸŒAd?Ù¿ÃèÁ¦ñú ׼߾“$NÞ×’"uHø NÞýû*Ð#8D‘J*¯¶ŸqøEjïñ;L'o×#µ¿_o7 XïWeØoF¿à~¯À ª ïL&NhI΀l¡³Ô™©ÜÕØ7ÍÜY)Ùûðu&s]2= 4™½ ̺S€’3€§ 5•;M€ºÅãÔI[š2 aÓ…¾ŠŒW*Õ^ä1„ÆòçŽ ˆ— \ʼnù"en…ß>Ëë™àqsò¯MWª #¸ýö2NÚq.äü•+ÙEfëkF¾sË0,Çþ…s?M@<u‡¾âCè”W rÕ#ι¬¿çž%÷š×ìøF#ï>ñ‰E<ú¨ôLÀ(E¡jP0•"g‚49~ƒç,^2G V!6°/1“Ý`ãrÄLñE$&7 À§J8cœoYGS *¦¡nÑÛ<¿e¬yã3à8äÁט‘Ÿ—Œ5{d= ÍJªã>1UDQúP ×]÷ ¾úÕEÜÿ¨WjI†náM\›¬U²Á‹Ì4_¤m Úƒ1æÃ½±•É• œÈÜŽ2ØÉJ%c°Ã†à¬W°™%e©e¼0$Dhh– ¢ÈŠŠ(2YéY¡æMk•÷‹QâQêraÏp 4Y9j’²'ýà~`ªui€4»*©rOì6›&å]múl†©.j¸N©Zo$¶¥"á»ÞÕmhæ_zQ¬Qh‘4¥¦ ½;ËPymð3æTk‡÷³ôlCý8Ê&áPæ>Rœgñ¼€é;IuõÅÙ“Û ´\WEÚ÷†‚±7Å ¤ï êˆ~g«Óg¿õÙ±ßðÛë'êó=×§gÃì~YÕ~tØkî¾Îý\ók#Iö}øCý¹!ÆU0^ÞŒ~ÕhÀÚsû¸Ÿ»Ÿ%n÷G¿>2ë ÕµŸ6€(Rú“x!¤Lf-rªµ.ŠNuGß þ/¢%þ=—ñ”ŠÓŽTŸWOß…—g‹ûº49/qß’Á]ä«â"€­H›œe G^<¯9vêñ°C >​lT?Inô€ïq?â‰æ9íPE*O°îÂÿŸ#€)ðOÉE??ïpÏ=›¨Õ2xàTÔhH&¡µ(œkÑ0øà'¸F&Ò‚ÖxÍYVj.EªŽ”%x)Ô–âø_ÿë%wÛmËh·çÜÿøÇð裻ãâTõ«†Ð-}*1€tæ,Ãà ™)¡\8åçÂuù9 IDATç<äÙp.ÙòÀTŒÆÆœ¯­(l·îTÑ&Ë%Ë&è"çx†óPâñ«ô˜X%zMÀ áøàŽ;•‰-¸0KÁ\š ]²ëU×G€÷QÔÄ>°é¯»îžxbÖ}êS 1ð¬ MòÓ¼W.r´078v'ŒEÀÅ8@’ÍžŽÂõϹX¹sßqöͰÁLøÓNï©8¥H', Pz¶Åož^Ï·ÝöZÉHÚЊ=+½Gsj¤•¡QŽ[ÇÉùÎ^Œv4ãp¯•yÏæ#ÒM£·$0"#„ÐîzDÆN«‘ *ìóUúâ®çc‹ÏÌÈëãSö% ÜEá<$©± ÈãN æ ès®S½I¨|•ˆâäIÀPˆÂ¿SìWÊp¾ó?ïÔŒ0•,ŽœVýDqJÑåšEm+6¾Ýï)ï:U|Wo±O¡¡µ’âNà…ý}·J|›Œk'Åò~?2µ@r—æA µ$%‘°Ýë\z}†!Îñ0ejÃÝåvo¯A 胂 ¹ˆzUK’kìc‘·®Ç¼cˆè<É|'5ŸsH.UšÄ¼.ɸ òI‹¤€ý ×‘äÚ’Œá õ4×gN“çÃÊNû!ÇvLí0ýæ{±•D„ò¶%³]3Š#d¤a‘ÊM’AöªSäwÊcVcV2íõÅ—gãëЙ÷ wš-ŠQJ^ÖÉ!L0³Þz7=pZ\‘™á!ؘp!‹\'¸m!dö@éRyž¿¸ˆ7} eÉÐV¼p¯ßúÖÆÇ›øüççñõ¯7=°A AZÊæ¥Ÿ÷ê²ÅìîUJ†^ÇæåÇš¸[÷¬q"ހ冿ç=Wqûí)4›SøÔ§Žû‡ò-Yö§fêC ô¡ cŒ(¸¦B2ÆŒ¾°™s¬F…L¼š^_fQšWúDyAåh‚r³"],Mý› ;ëTÆòP¿Šf»%pØá1›l>’à9Ïcå8‰³ö-œÏåvð¾÷-áÌ™Ë(—ëø«¿ZôA`ªè$.ïE„ù߉YS5¨s Ï9]/³Pe.ÏóChÞõ¡ á\ A-úP…ò¤+íxml êL¶¿…˜Ê5Š˜ÐØd}U ¿Áû\(w9U‘R5kSüF <Û{“ãš—çIìÔ(r„ó—…ÊÖ¶P{"÷B¸Õ–êŠ1öL”üôúl’çYÁ…<÷BYU?àY/ô@ð:F,U¸Ž·˜Œ3Aš<'J¬B,0Ìz­öˆª–P=ï+©RÕø ¬‰©ŸoRÙ Î|Ÿg¿·îïïæÁü—=¨¢žk'}—ÖFÒïD]¼½²ô{eú\χ¥Ð¸>• Øg¿ïºt’a®û½æØE®Ç„û=è#½ª4I@ßçÚ‡Ét; vQF‚ˆ¸—ãz÷ô^óèP_öR–ò{Œ zznˆÞõšzí¯ìû^h¿Ï1`½æ¯ûÏ^cÑë37 Þë<}cïµKðÜt¿ïçæúŒüž3Ö¯w*-™…*:µùû 3MÛ¦Ù²ä¨ ïB“hÍÑ\ŠÕƒ]çøK9U%’La›br÷ÇÜE™Õyóyãº*fu'Iª:uAÞvò³¢²h^îEf§Íq/óó1„ÊĈSÅ#ÑéÏ9åÕ_äXE<禦Ý/üÂ:^ÿú._Îá+_I#(39V|j¤O¤™•¯¹ µM­fOkân¥Ž=iA´Ž@ɘàñ/ÿeÙ½îuW«9|úÓ7ᡇÊF¶rœãÜäœH¬ªL‘çZãœg ʳ"þ®p>Á9X眤 ®7Áó«BYJÛ ý“ ˜ªßmfyÏ!ôÌ<Åà+ÍyzŒº0·«Ð¹Z@è‘XçõÄ.x¥L38OzÓ¢hÇ}àÏâôée4› ÷±]‡³g…7å4c¾åB¥bj7F)MÈ 뢑)=å½±Fð- |…Aù+aBÃ*;­þ5 •~˜ ÇVî!™g‚yðÌ¥2i–÷&S.=<[<þ÷Ù S¢Šë¤‰™\ªë{Uo„óÜJ"”êã9Nè®RÈwŒ«ÜwÃb0ï´!ëT¹Í~ß÷z^;#Ñë´zᜪmå°áTQ¯Îç@‘Ÿ­±Š:•ÜMsN7˜XÉp.[²=TLœ²å¼c¨º”T#7B¹ígr]>É{jŽF…´ßk#Öv0*RI%LEFÃn·ŸïÖÏatèôûƒ¢Åa}0zùô;7ä¹û„Å~Õ úJÃÌÕ €ãG>ÃUùúù`ô;ÿ$U•ÃP·HÚW5ìóëý?;‚öIdЩè$œ]i&-°1óØà5‹œfäÕ»¥\ÙæÌ–W€3ɪ„˜ÊUœ:Þî˜!€y‘uÞ‡LwÙ‡Lÿ ”RbšÌt¯x•Wp\玧 MÛG™qn6€(&-1.=LàèQ7½©Šv»}lëëÒø.Ó)´3ÉìK@”†ö=ˆwHÆC+ý Ò÷ ™Y©:-¨âïþ®›onãý¯“øÎw¤ 5 U–Ycµ u]Ϛʓ‡êð0æùù„©ÜTÌ9„¹:õŽÙ€ú?œãµŽqÒLœãXÔ¡4 Qþ¿Êß—ºªb X1s(MÌÒ›h“ˆ¤Ä$Îé÷áUVz)ªPOKEj0x*š O‚ ù^ÚÜ“Ý?ñ9ªŒBåÈw>z[f_Ý®÷½Þ·Ò¿àÍý)¾E¯ÎÝâ‘#Žñ£¦º*Mï ®p޶¡j_RU¡y.fÌ<·ö©ôHðï10{IïF]ûéGmïxuú!ßUnÈj>éÝØ·‚ŸÞÈÞoÓì Ћ-S{×ì‡à«ôãÊ÷ v’êýS ø0 3;èr-ÿ|رNZÁè7ÏVÚa¯qô Æ~Ðÿ“ö¶$¥où™‰~U¹Aô¹aii®O™¤:Ù/`Úküô~>ŒÄ'Û®;)$’³»r¨^û$R¤çÀu:@K†­ ¥XL`PG§$bAEAEž/Õ-÷´9ÜTKãù'ÍØÇ j@¾ø¿O vÔ‡fbU˜ºLP˜e…€²÷{•û-ðöš½è Ô£!gY¼ÿýÛH¥b|ýëc¸xq !SîLð•c[¨D3^€6{cÀ’SiÖK̺‹éßáˆiÚåËü§ÿÔöåò<3áäFxý×A)c¢eÒ¶Ét‹ƒp”RÒ\d[y´Ž™ãe Æ‰ã¤¼‰gÆ8¯s‰ß7 u“ô¢ŽÉ´€-(í&P%¯³½@s¬Ì<Ïëh³²u+éLg9n·ˆE%|ðƒOàÔ© lmeñ§:†³g˼΀Iû)s=€À¼ 2òÜ6ùÿš3Æ?¥­UyÞøí0`“ª`‹c>U@¥/ÉÈ×¹mƒT‘ýmšÀ¿dꬹý%9`…òì±hðæœ®u¹ÿòæû¢p$¨´4€;ý}ÊTMZf]4x""송A™ç”xVXZ¦Óµ¼Wä¸E³Ý_¿~J D$± ô:qáu@9fî4ñ1ÆíV 4À*Ÿ;)î‡U,±ïltoò^ŸƒRSGØÛ›fy4ÄNƒ†4:¯/åõ÷Iq§ëAtˆL0"=0ÂÚI¤ ûn~Lí°™Ùa­Æûmß ¤íǾO!ðè½Éì:‚õi„5¯Ê<3lè\ð¡¼Æë— ãÞüæNœhù¯}­€Ï|fšÛÕ˜}m;mnmp¼«œCw¾2BÞuž u*:¥ÔlA{I ®úr¹è´Ú’ç8=í}©V¥Éõ帽#ñ_Hðµ  Å!"@E¢ÝV„Ò¤FÍ0;[d¥å·õJÁÛtÀƒ‹¢€²®üÐ&÷ó ³”/²z5EŠÛÇ«ÎÀó^ó£Üß]JÈf›xï{ÏâÌ™5loüÇ?^Äùó[p.ç¼o8M ]"ÎCUÃŽ"ðï3\gK n+œçSüÞ&TqJdtk¡ž• îÄú«hmuÝÆäÅ÷á$ç-òaÌëæ~–û£.`ÛT™ÈsnÅì.ë5¨*WÁ·ožcŠ]ÛæÕšáZÎB]²w«£N ñ½‰œRÁz=å9íñ‰<ûd³¬Ø% òIÿJ êz.êRe§ýië\˨$wÑ+øŸ¦“û–ñhv‚´Ð£æ*™Š0 Àßu"÷k¢£¯ÛuU(ú$Úºäý ÇÑ_’'‚µ“¾÷†éÁp°­»>‡ý@ÿˆG£ú¤ÿ?ˆ?ûm0>Hã°ÖÞ  F?¥¢$R¸/× Æ ’ê  FÎg’ ðÃÚò§evÓümD¥É"zímSØu&x—ãi òò”Æå-sØrÜvúo`=Ռ߆òÚ«|A·y¬§ #_GPšd !…èû_B 5L¢Ó+"Ëëáùn@Å›rxíkî¾»‰r9ƒ¿ýÛ"Ô¯AÀx˯jÆM(H¢…/cß2Áˆ¸ŒBAÈUãÞžF¨Rˆgï«Ä¬‰€¿† ‹{ÊU Nʦ*eäœ%K¾n~'4g*XŒ1øÿ}=ç£ÆëºB€^b U0Áb íß¹•™}ù‰c‘e¥¨ •¢½è×¹Î$0ycc |ðƒKX\\Æ•+ãøÔ§&pþü87C7òi "Ìõ lÎTùÙY;Çug«ËPã¿U¨ŸÇ6÷›1yÞ¯çƒùÔwB²ò%~?oþŸ‚˜+j5.½kåJª‰RݨC=1¤"%”µ,´áè”Ø•Š8ÿe“í—íS˜7 YS)tš½Å}Ë$‰àè^«ÈTMÚØÛ”®×OdÆHª.)ó¼‘ë‰MECè€1ÇcRªü<âón ÚìÞB§Ÿ…ô‰-ñ”á|ˆ”qw•¡µG>ΊaÅ}^»öµ—êª|ô{œîÏ~0^£i$§~t7³öCÃdöz5”&õ8Ø«™4Úc5Øm¢k}ÍcÅÖvÚÔ¯Â~Yà^×aoºÐA®9©Ü«×XK°‰ª I+2Ñçô£ŸÁMùûÍI¨uÃôb ³¶ûUlzUƒÖv÷61zS»¥hýàíœÕ‹÷{«g·˜}‹½ÊŽJÊ"ËÌdË€Í })Z^¹úWx;>Pa¤©¸Æí§yü-pŒ2£?‡~iv]æïrðqàÕC)P—ú7NÄaû:Á¡#øÛ5 DPpy‚àh– Wš…cžç•¦rÚ¯!M¶À[ߺƒb1í?þñ)wõªô”•¥iæY*@BTèW"Ù*Y×mŒPb×C©5UfDÓ|†pÞJ¶ŽÛ­1Ûx@ôˆ¡L‰÷ƒHÓJv~‚Yu™³©%1}rœ?wRÁqôy˜æÜ‹aâv¿Å€è.@ó6BµbË…ª^óq^WÛio†#ນù›¼EÙ«‰@;©ÄA©jÊ…ÊÕ)"²¢pžB±èñ¡]ÅÑ£Wpöì8~ï÷&Ñn/; ã½—ªÜœH¿ò~isýL2³¿Á9ñÀŽ#Ì‹CÅ¢ÎmJNCǪNžêc«\¿ˆCcõ÷¹ í[Ùhq ¿Š” ò°9žk[ú˜*"B+”&~‘·øwƒóÁ8‚; ‡7H a¿Âu{ j\µ8ì³è´'†r"q+êq Žg6ÖªXËwfÇE¸µð•ê÷)}DBÛqþ…ÁB³_RÕÈÔZØ{mb—ûR~9 ³_‹Ï¬Ó~µ›º[¬$]â\‹Cyê$îͯJ>9~g*ë9ê:14ñF”Ͻj2¡ÓPà²í´ÏA}Ó”ÎBý#²ÛP§á-ŒT#ÎcF²Ò”]Ý4kä¨U‰“ñ¿HSÃ%ŽñO‚ò­;Š~t’À¯áCÕ§ à(×™¦ìY¨ks–×ò ×â×Ü)n³ÊÿO@eEÚ9ÇbÛ©€€sÐå\6(Ï9­†‰Ï‹4=§6Ýg¤²àµÊ#Õ‹4(†9ñdÉ*œø‹È}'UŽ4×V*ú0 J3;íÇ~#º9^—؉CéIgÛȵ¡êe:]ºã.|&ô-KÝŠLPÒaÒ‡þ@52ÏÇLä·eŸò\«³÷¥ÂïÏp½TY) ˆ+ìoÀS^é]â±áºžÅ±i¬–>ŽP˜|'Øßë÷ B‹²›H‚·ÜÞáÒÜÞî‘x³Õ;Ï»AÆKµûÎs´O@X¸`aÀ™$[º¾ö¡_óf¹õd=Ä5KÃx)¯y©á0`t¯žÁêD~Ày;>AÕoÌüs5 ØMr={ÉÑ:$ó†@Ÿñw®q?ëlØ ÎÂ1ý÷Ý~©ÛÅ~p³íHJsr‹€J”iÄ$Mœ …fиù €Ò4*¯€<_è›ÌfOñ¥·åÁ·ø"–m¥?C¸ú <–P<*^é #æœ6@©P•äü#¨ºË¶Ç–†ì°ÏœÉàŽ;RXY)ࣕ™4´ ã èÿ ¡I°&t¡ÙˆcoÝô¸´¡UOZáxOAi7ŽAš ;C¿ã"e*• ¡=Ð eL|*š&ˆqPÃ? \^à•¿&³µ_ð4ƒ±q¼‰óü·Ûæ÷×Ì1Ûuf³ œŸIV/` h+qŒw8_ >¨6Í!‚¼@õ øð‡ŸÃ‘#—ñýïO¹~tŒëÄq,ÅØq”½UÞ¼8ÎTTæÄ–8n› y#€ç} ICºPh2×ÞâÌ,íÇXqkx­Je¸f…6'ó&â â5R4`¼ìT5L\ÒEú´õ\‡•ÿe¡‚Q_ÙUïTþTš´«ßm“q–@+â¶1ú·Î@c†gyø‡žfvcü®ŒÝÏy‹‘³v¤Ù^¼(.A¥G=àM"2¦ §=G”]±Ö×ïi‚Ðÿ¿½7µì:¯×>w~cÍ,’ER"YŽ+–[ˆ¢¶~Ä CwËcÄ vµ:aÇ0üÇp;°a´4wǃ ¶lGtÇ@‚X6Ôq ÄiEŠ‹VKMI‘bU±†W¯ÞtÇsvÿØkÝýSw8wxC‘ïUï¾{ÏÙßÞûœ³¾i­>€•$Sâk7]`K]¸m„ùê ²¾õ9×f°Õïó\Ã^&¶·=¦-ÇR&oùÔg ž ËÕ6û­N…ïÞ?Ô÷P1-+â©A•Ôd‰Ê>ê; LIQjî=΂m‚ñUÞ#†ØÊ–¸ëQñ–è¢VDÍØ,ö.KǬ,^µ³EbàÒ}i‹{cÇ8Î(n§>( »¯û$6Å[Ö&½'b¸BÖ†ëèŒ.Ib2N¢þ¶8/1Îsi TxNN ûµŽk—Á®CŒE9rËFÿ<&×3Ï)žuœËážÅf,!ª_ÆæišGió4EÈYÆ5«¦+wŽ÷›•¦vV…Ïi7»iŸu—Áv˜{û0lžá³Ö/Ï|p,.P^çLàz¹ç\³eÖˆ$·L4]µAµï¨Lð#sWy¼žç<e‹%2;ŠB*z/fžÄtQänñ!Ü"ðRsú‹ü}“ó”¡Õzÿïo£Õê㳟]Çç>2#ÞKÇAËÓ3KÖ#@IY›½aÀ‹¢´ûtFj>€j¼‘JVs“² ñ±'!¡#Ö¡]à1S„²žÄr/Ì÷m´y`CÝçébŸä¹Pÿ ¡ìGÚ!Š:?Éqn!”L)Ût™k²XÂÓ$8ºDšXž²LÌ$É–5Žã2×ZôÃk\³VVVü³Ï~<2À /\Á?ûg)€o9àŠú"#h§¨j¡gcÝDÎh×yß4óün0Z-f´î•òɹª˜ˆñ]Ïû˜½“R½2 õRÎ#ªf‹ªo¢ÓZo•IÕL†,¨÷Ñ™’“ ²¼5®³es _¢W5@R½©Ù뼦Ô`-’éuHGC¥K‰Ê¼üˆ·}>¶Ì)3ÙÍã€÷" «p¼•Š ×Çù°·Í–Y÷¦ÉØ)Ks›ûÎ#–¥­ÒÉlò{5¼¹FK÷›û¦ÍÌd…ŒEµø¨å±«fÝ„í̹G5m/ò¼ËŒSzäX» AÌP㨛¼'Eò«É¯0‹ÍXÐæIg‘f”ÿ²lž§É»L$~V :ʦÓ×ä5Xtg%%ð3ÜÆííi×3¸‡• Ìks†riæ ׳÷<¼ƒðo#D”a²Žu¾mŸ÷Û ½U >.ú˜ÅPÍó£™ÄB”O%ÛˆLQ-jâÈEß¡>Àcþp /WWñ{¿'A¼ #”ût ˆb ¥››Õü['øh¹à9‚´&›=bÿÈâÏ»PVô6¶¡Äcm³áù£ç¯2Ë`›Ë»\ç6Ǽo°×GuþkŒ Ÿ¥3Y%`z‘ó²E œr}±~ŠöÜdfã6³Êx\#½i“Àk¤ËAÞÆã\'0ß4Ù¤s&+PG ¶ífÀ{Ñ€G³¹‡ŸüÉoº¨àùçÏãW~¥ïÃ:=Á1Üáܼ‡Nn›ûûŽÞ$PÃóE„¨}Äæ_9@×øžÏB–EŒR³C{Ì9ô«>¬ÓmÅõ½&{#BLM*ykû°^žAíÛ‹bw}~Gצ˜•œYçŠÙÛ> ޼z1*Æ!Èx½WŒSáùÑÎJÝ=5²5Ñ.ÀfÆï$¦áYÔªi±ˆçÎ|Ì:xÓ+Ðwq¬ºÍÉáÊe|AlÏ•,dQ³WDµë¢“£ N•D kÌ&̾,§›ŽSÎVÍ›þˆi¢°…{n6â~®yÒµèM9”nóCÌôúè¤YÈ””R:㉌ÁÚÖ‰-]úífx†³7yçÆ_¬,ü5Ø:IÇ|ÓRô#5¿ÓÊnÊ” M+Y¤|mÖÏÍrž²åJ'é:=‰×ü¼B{K§h-ApÛ6QTE³:ˆ=±Ý’neŠø{à!£ž*’`Ø å ˆÔ˜¢À½Ð°‚ °·G`ñ0"e®êÇõ UÄ¿ 6úØí!d@VüW‚@9< ñÌ3·ñþ÷ï`oo¿ýÛuž?asô¢B³2RO Hn©AÞÅèhËDÀEÝ ÚÝe„\ÑÐÆòš{ IDAT?A,!Òº¤È7ÉKAZ=5ó9Ïè´¨,j±N[}0 ôZ¤tîžGˆ¼wJáRFsÕÓñüÿ5ÐùäÜ>I»^¢#(ḇÕÄÏ"”š±çåI÷ùý!šbõjÜ…”´ßûÞm|øÃ·°¾Þ¿xŸüdŸMîgU³ÿ™ëß³º<Ö*#üŽ[üÿ-“¡»‰˜h#Ö½WèXéÚÐúlòýÌZß1×DÝdº\­‡Þo˜k«gö‚ö½qÞ7¸@Tðî"6† ˜*«Ñ1ÑhQgf_©„JM΢’2]ã"Á¨:~˜ë…¨º@ô #_ÿo/¢Î¶t·Yá3éˆ{ÚÀ¨b¯˜¹:Ïq+R3ïk?>ÆõÜ5™Ze?”¡, c¹6Û{©Õõ]o‘’v0ϳ¥ä³$+“U8¶gﻌ‡ì"âeÆàxo^›§•G†Íþ˜mžÇŽyÇï1Y˜o–±NÓĘ!ŸfÛQ÷`,ºÎ˜0ÇËXçãÚ›Õæyÿææü.ÿž F'a@oµlÄ#àÐD¤@õæ!®:ú}Sê³b"qUz*^åƒ|±™t‡ F s±‹HIÛô±üCÛQs 69ï!ê6|¡‰S‚o«šxúéÛþ™gö°»»‚ßøÌ¿þº`U>Rõ‘eK%cb¬Z1 ZÌV}FJLã|‘} •í2Н¦èFé›—è|o"–}í#6³ßâqÕäÞ%ˆ”æÂ9κ)Iy]©çÃù^ðçû€/ð8—|l†}”Ç¿ÉïÜáq® f». ¬úÈvUgùÛY®ñ–ÉbÝ66œCl43 ïÜ·àýk8s&ÅÓOï㸠 ‚ÿüŸWý§>µKà}±Ô«Îùÿ÷é&3-gyžo²'¤‹}W6Hêî 3ÏjšvÌnÔÓÐõ ï8çcB=.©q4ê\ÇU~Þ’(+ÀÛáX4Ï:BÊÄõùYío9—*Ù©™€@×ǼÔÜ”mø¨ú.Ç候“MDÆ©A¡iú®×Õö„çÕ]§±0ÔèÁ™neêSÓ¹ó÷–µ|ìQ âY:—ˆ%_ëܧBI›úÇ.!hÍ/¸ÅAÔ²C?æ–SÅþ™ŠÏƒøÔß;7Îdú…r¨´x¯÷s> –µ—‰;'Žã¸…öN_§¯û->I ¼,5Ü(à\Ʊ˜%ƒ1ñ;I’ Ëæª=ͼÙ+s˶ÕW6‚y`²Î˜^Ý€¥¾‰ô«¾¿Š¨ðºÉ.ˆŠöy–Ÿ3&r.‘¯™…¢6D‡ß¹Bà,]é:Ôñîwoá™gºèõšøßéã•W4^ =m™htË8Sê‡Î‡@jÍ€?ez$Z°×5ÀÐsN¬¢Dû.!ªš‹~×ÖàËá%gË8+ïàï¯ø²Éà¼sþgVŽ D Ù=~o›k£÷¯¼)¯ìÑ%®™œ‹›œ—žÉ¬œá±. öÌ8žã«ð~?ÞÃßý»mœ?¿‡­­M|ö³+øìg¯ó\ò<ŠÚkœ5®ó—é¬<ÆLQÕØ\¥s±o@³3ζœ¹½g¢úÞ8Î샳&›¦kAûWï×x,e Ä”&g¹a² Ê^¬šó­˜ˆ½‚mD&µª‰l+:¯½Û6·ìÔdI3*ßKÍçk¸WHÌaçé'ÝέÐ^b²!ULnFÎoP×}gÕ89çÂ8,*E“f‰zµî ögˆÉKôÚbo{‘ï‹öW|µà ÍÚî™ Ÿ ê›û줊ì÷Rüž¾ŠŒiÑ×iŒ:“"›nJ´ØO\ešTÊd¦EªËÚ\&J>Kô¼¬ÍÓ¢ÔGaó¤š÷YÆí'œÏ-`³›Ãæq5†Ólž´‹=A‹D#fég*¥pιEl.˦äKd€]粤EÖyZ–â°m6KФé!Va_CÇdDߨóÖ hNô}CWYu± J¬E§«ˆ¥Bç¼Ã‡*ûêÌ l’M¥ÃϬøÐ³0rÏ#½ý¿ˆYK^´³õú-ü­¿5@­VÃç?ïðüó©w®ïý}Ú<ŒöòÇ»XÞÑ6µ!q3oD´ŒÃ¶?(9fe*5ò¬GWóo‡ÑÒ¶ ‘ò6£žU毆ð=DºÓ~æAÎÔ;™ø:„Dß‹ÌR}Q—d“Yͯ¹Á­ò{›¤ =C›×YvvǦ5“i¹Å½Ñášì0³u¡/bÚ&w}¤½MÝÓOà™gÚÞûž{啇üïþnͽñÆk<ÆŒè'ÜK5Ë~. ôU\DÈ’}ûl“k •;Ì8ÔøÞ>ž;Ú§ì¥Ø#»•(iÅÂÕó‘~Ø6ÒË© ìšl‚²}®¡˜šV¸_šÌà cÐÿî}ÌL9„1ÈQÑ€¥%UNìHêó>ÃÀDz?]¿º¶FÓfXÎÄ}ï9¶-„2»áµ?æþ¢±jÓg¦4*3 ÓÎÝ{ËJ|^ÉZ:&rŒ”å¨gj€Ð $Qµí2mV™˜°UöëlðÚz•ó$AÁ 2œÕŒS0 îLx\)†KÉ]+VZ[:ZõÖøQÙ ”|†Í‚µ§±4Öž)ƒQ†² qs¾?‰rr–Úv7ؘÇf·€Íeí˜÷˜‡mó†Pbõ B©‰þÞG’\ÇÇ?žø¬ãßÈð¯ÿu€sAùY¤]õæº÷ð‘fhfkj2%EîáðošHqÇ%9[›`²CçH€µÃ÷¤$¼FÐ)J່=(+,ûQ¦%ñä¿]Y|‰]ÏGAµu„FÖÿJ[åœ]t±þþä ÎÝSüÌ5e¨(†×dcì%Žy‡™‹mÄ÷BÓì‚Sx¡±ý¶ ý'·PŹs)þÎßÙÁ»ß½‡ýýÄýÛû8þø».¬ãf¿ZœÿkØ*ZG(ÙZs¡Ïã[œ» ÚÑåú´Í~< mÒ€QÒ]ñ¼ŒŠïz‡±åòÙ±µëä•­8n#Šßõè¨)ƒ¥µœ[íÞáº+ó`51”••±€¹he¥öì{5äHQ¾n²3"5hòšÛ1ŽXÃì=©‰Ÿåþ°÷©á-pË è u£³²Mû®(fÙ¢#á\¤VÖÊŠ>*ã±Ã5]e¹ßmDªZ‘Xô Ù 7åþ¯F{ÇÿKÉÞf2œË3Hmî5[‡-k—¶ùÍT"uÒ›Q'EMO_÷ïžsc.d?ÇMeÐ<αòGlóéëðo&‚8jy‡tÄ’ 5‚ŠÂS嫈%w àÚA,»z±QWªÜg›nu¼"è•(ÙCæ\gùVš’¿FP-ÕèPÎT©ÜÀ³ÏVðÔS <ÿ¼Ç'>¤i› µ†HIë{l󭼌į –c¨ÇDlA¶¶¾Ï±«L¨…Èc¿j@Ð*Áò€ŸUT]byˆ: +ˆÍÝÊŽ<à½ÌýßLjàUi!Âl…NØ#Ä·yÎ}A¿à!²*C;‹V#ñ-Ä’ 9tê±y¡ÿA„R”¯ÈQÅ÷}ß.ž~zF/¼°ßú­G±µu›ûäB·ôîrnˆªòj*˜Ž†Öá."-í®qÎî"ê/\d&§cœÀ΋š›µ^ÒÑè»´oZÆ‘¬›ëC߀ÛGìÍP‰Ÿ2?MeW“¾DÕØëÌýªÊ¥”a«Uâ¸fì€9vÅ80&»±¼8žJ¿t'È÷KLƒ”Ói²+!Oc›˜qÈ«šk@÷+­¥D,UV¸n®Ñbßå¾—z¹2%6e³C㟶±Ý–ÉUFàgœBµy^³ÐÔ–‰¸Ï¢›0J0k4µ£h9‹ÀlVZËEmžÔ–AS;ÎæQs²¨Íe)fíºf%×yšç}Òl.}ðSÆ2 ¸—ôGeóqÐÔåÄ—ió,‘yKÚl gÊàb]¼ŽÓ#U©šX3FàSR”ªv{ÀYýÎhª´vÊô°W zŸà³ÂrœsT¬ï0"ø0bÙѪùÕ߃@™ú’ä<²LŽÇp?ðÎ?ùä^|ѹ_ùÏc6˜…Øw…Û=£¿R)VÉE—e.ÞEvIt½¤òhÆÌA“Ùœ†Y Ô¨ÜFlŒWƒ¸_Ã8vç›TLJ¨ýŸççþB_Å|×\ÒÞoJõf.ñoû*tFꌶ¿È¬Ë9‚Ϧ Ÿ¿‰ðù³Œ~ \l´¯Òù®é—ÄVððÃ=|ä#×qùrÎõð…/<è>õ© ŒŒïq_¼±ÜEý m9³›\Çm_°Åu\qÑQÛàçÞ`™–šˆï0Ó’ Úåñ”¥ì>×yÅÇìŸÊ¦j&#Ö4`ÞŠ#ªG'uÌrÍÔ³±"›Y&• öÈ‘“þLƒ×qQ³Aâ—Ã降ßEbõ€d.fÛ”yZuQ§J æ>Ëâ6X¥/f.Æ8Ù$¼6âþe›ÉUX •Ñfe;ëœCõ] ¸·SfžV|,ÿkò\»Ü¢î»(ÌW5%Ÿ9zZŸÏHÈ é™LF®KÀÅr³t›†kGefÁÚÓ“³`íiÇ\wN´y)?e²çõZ‹”/bÊf@ü’l·Ûf£ÍejÏa‘*³oý1¬ó8p>é½2×F©ãÚÛ³î×Y®ƒy÷w™ï¸’÷»e3gÍ0~•*TøžÀ. '½€É€Ô G}D%픀ü,Ìm£Ùë'bäøÎ2‘×BÿÁyé]e¤}¡_áQ5â&Œ¤öü7ì±x9ij~äG¾ÿðþ(Ö×›xýõ~míeü—ÿò?ã_ý«k|<5Ùp±ÜIó±Ïy¨"—-›ºA½‡*ëøÜ¥GDÎÿ=Ö]Eׄ%ú%ð¨ÈgÛp´jJ—úïúHÑzÀ_$àü bƒkŸ™¥Múw Eèoy„@öeäËMÔ.ö‰î κ>|'A(Úò±¢ë€;xc_Clæï!ôA4ñ×þÚ-|ï÷ÞÂúzŠ:>õ©'ðµ¯u}裸À¬wp|{Üo[f¿4™EÑzA(wÙ“³Æ~‡={sº>OMê¼îcöá&ÇÚð‘˜@ ¹-ã0§Ìb ÷Õc@ç³ØÜ3‘õºqƵީzÆùÞ÷Q#ä ¢J»ú*ö9.1’ è4=Ù“”MêpJ4¯ÏñÕ)ÙwQ¯£áó™µ®NQZ ê)ð‚V¶©,^k OÍš¨£M méÓ±lú< ¯Hê´t Õ·á}°©alV?×ðmY®h³uzR`†Y–¢¢ƒ2ž(óŒñ˜½ÇÒ/ƒM t.‚;'õ‰øyJ¤-8¬òв%)îˆÇ<¨Ü2Æw”6O‹üFY;æ½95ñ¤Hú2•¼ý1Ú|¿¼Ü]ÿ Ѳ»Hpk¦ç÷œìJê/pŒh ¼¹Úw‘/èºÀ`¤ò„>"½¬Æã¢æ*¹‚Xж‹PTðUm¬®nⳟý?ð=ßóÀÞ^ßõ]ï|ðƒ?ŽOú¯âêÕ?btü ä™]¤• `5:‚º»fþÖ]dºF{$úV1ÛzŽÆ†YnÆUsç­› Ç6çU׋ˆœüØ›¾—Ÿý*Áô%)ÈdxZ¬—è”¬Óæo"jS8&/È9áùÙÞ C²àÈ7;ïñ|댬kM·¡’#ç:ø±Ûuï~÷ 8×Åüã3Ÿy »»»pnÞ?îb9Ê¢šù."{Ò&B¯ 8–§hÓ–Ùƒ-2![ü›Ut¿möQËm÷Y+eËÔ=@ì}i§TÍÒÎaÛ ÜryÖ'•È%ý!ꯨ"’¨405{p`Ω=*ö²„ýŽçƒÍ8°íŒ£«L`ûÄ*¿g&Ã!G$5€…×óЉpyXRqF;¢ä½Ï6w[GÖ|©|)3ç÷̪6i¤÷ûÇbÉ¡œÛ¤Þ3özã\&æ~&=­²*ßò…9ÈŽâsÔ¸³lãPqç<%R‹*yV‡©ä]´i^Uk7Æ£,ì5ªlY%ãlN°¸’·+±&“¢î‹(yßÏ6OûÞ46-”Ü+ãþ>íš,»·'e0å-£j=«’÷¸û°y’m“Æ>m>Ê*yš“$FÔ*Œœvx¾¡€¢o`$^ND 1í_gÙEÅ™r–#ÜÀåTo8 ™ ³cÒ~§Ãèà ž»‰P³ßtÀ>màµê_æû=ÿOþÉO‹þáŸB–ý2þú_—{ôÑŸ÷Ï<ó7ð‡øïüC=énßÞbt·A`"ðžùhŸþ®—ŠªYÌâx)t=Y œ+5ö6°žÅ2/9ûÈg’ì Dÿ÷³Àfô”š[ ¾3;>4lïúH­Yçøë\³3ÌuÀ¥,”½Ì±w¨½àÖ|t0w¹.Ý,ÒîÞ¦zùSÌÀ¼ÂŒÃÜo¨j½‘à¼A碎w½ëEüÐÝÀÅ‹{þõ×ëîþàxî¹· ïWЦb»2_Òx¸È²žKåV„~‹·!(z›c«ÒæÛ¸æÐÞ¦Úô&÷hÂŒÕÁý€‹UÚ¸GUè6¯§bãn¡<ljŠÇëroxN}F@³ïãµ¥ý´Gç²åYÞå"sZ“çìù¼³"\½ Ž_¬L5¾×ÍÂ>Ñ^ð\k•ñÔ}ž&uŽ,¬ý)åÑm¤Î²AihÜdýŽÏ³Byëp¨Ôp^+Üëj\óˆýKêCR&n¥P¶”¹0•,d3:ÌkÊš6™eÚð‘Ò<~UWÍ‘3=3ÌÎ({åùoêóLdR2Wy¥ŸÑæ©÷ìâwì{Ù<2 ?Ö.ûÜ.ƒÁÆÙ Œ./ã­¸=¡iui'5š¿hÄÜ-ÁŽã¶y–µ/#:w?¬ó¢Œ`£ú#ŠïêGšô>&oÖýä°ƒÄaGcÜ!\s³«¹æX'0O%ü×Fè|»I·s©«ÑµJðßb4¿âø@&Ü¡Ã!¹HרH°Žß& }•ÏÌuµvèÜ5‘ÓŒàò6ÁÙ³gñã?þ#€gŸý%<ÿüÿŠ¿ô—€_|ßÿýÓ}ík/¢^oºŸú©ŸB”ŠÈ8æªËëxêTsí¹Î}~¾jØbݬè¯#2©ÁTsÞbD½Ø0žÐq|„Q{õdÌB\ᱟC¤®U‹ÀY¡ꮋäk.®ÍM[.Ú.ƤóÿM„’¦ž óŸq âq¿Ísm›½¡ë{<ÀÙ³øÐ‡¾Œû±kØÜìâ‹_<‹úO¿Ï=wQå¾Ù/}ÓßQAdÆZEèwy‡‹½"4€¿ˆÐÜ/ý†=W]Ô¹ëb”¾ÃyUfaùFxEú«.80Ù­6mo£Ú#]:cÃRÁ1Ìõ"= ±£õ]ì"«Õ0¦ÅkuÏd·º&ã×7Njbú-Z\¯ÌÅò; SÖÍ^±Qû̧ĖoÁ8À‰ÉVÝAè‹ÙpÑ.n˜ŒÎTœf^5“•èp_‰m«Ëëh‡©® õÆ4ø݃æ^±ÆõÞG¼‡ôèœÁåÙž”)©›ŒRf28ž×û°ùÛØ!Ö°Ylžë^¿㨛oyLg0z¡¦ú÷!²¾Kp½ïƒÃr€F›H}µêP©@÷òË€}ð~ÿüŸ¯xþw~ç·À?ñÄ΃@yâ©ZÌŸŒ¶HHN,;uÖy÷}ÈRˆ®öÀÇúô†5÷çY¶Ôö‘Þ¶Š¨(¬ÒľŒÁuâƒ^ÅPdŒ½1üÿ;<ð'>ˆ¶Œóq†àȳwbQ+a“kvà5æ|^Ï} jßÛr‚|øqŒXŸp…5þÊÔl³ …ipì+nã¯ü•×ðƒ?ø*vvøíß>‹ßüÍwãà kœ&9œ>ôD€铈e^™.s®#’|¡<®‰ Ì|—t‡ë»ãc)SCëĽtamÄD”˜¨ö®À}…ŸÛç^·Jï: =þm¨#ác¶¯f•Ø Å}Ô}虾Ÿ¡®ŒÙÊ*¶y]\æþ“Óºï#³Û÷²£Í…èÎ1C+ÃòÔç0:+ì™R¶CŠÓuiÍÉ9W àCQ½2=zü·.ÝÇ^§¾öb‘Ë”5àØû\ó×icÆ1íò^³Â=Ðö±´MÌ^Î|Ç™ý^åÜux|•hUùLñzùB‰/‰IgÁ#“Ž;Ësª 6ÊkÁùã²ù$ô`¸’;îÈöQÙŒûÔæ2L[ÀòzQÛf·àùŠ:vÞ¦ìyçl–¨üaf®ÊdmŽ#›¸Ä—€}‘¾}–>_¶9S”§z+Úv1Ú*œ"_¿½…¨¡Q1%XФª·a ±ÂŠ…ªËÆpÜ4ÎÕp½Þt:»X_oàGô)<÷Ügñå/{ܺìýø›ànݺ͹ﰬ(3Y9jz· @-Û•ó¾ĆvõdH©z‹ŸY7ýS…½Hì¨J3ÀÞaéWCãå}7£ö/ñswyŒK0>Èó oÐáyÃÇÑ–ö8¦s<ÞUawˆ¥NÛÌXXjXÑÆn˜,À9î­«>󙬯Wð/ÿåh·¯ IÚȲ?»H«ZpÙEJà}ÎÇ#̪\EèwéøNþí5žïqþ~M@ÔÅþ“> ¶ë÷_F¬ÅWÔZÌQ5Ú “ê ö0Ø>KñÚw‘N·å¢S°Êý;0NæçºÍ¬^Å\;‰ùI 4•XíqL—9Oû´YeŠ*Ç6##Ò;W¸_Ï›÷ÁÒ#óÙŠqˆªÈ ú‰d ç‚3zI™.“•LKf°uOÑu' fÙ<ª‡#¡©‹Ù¡×ܲÐu¹GmÓ½®ímf]ä•ÃÛ&›";Säûkü)îøÛû×$Ïàww@ýèGñ¾÷½!“ñIÄ¥m­! §fÏ5 Ìbl3k#ðÕ5ê5fú‘+¬[—ó¡ÌÅ.mÜ0KHÀ·}p@:4ýe®ÁçM6iQSäBCxÕ8„g| ø½áC4÷?£fó ‚Í3B¢n˜ïW}°C¢tç xSÉ ÌwÞðüw±»»ßüÍ5´Û €»È²=ÎÆwÉ8)©Q(ßð¸'¾€  Ø6NŽl¿D‡á«üÞ]®oaožçÞ¹(Ê—!–FU ˆ•SàÉF2Z©ùl×B½zyT2'šgh]ëÌŽè=íÅòåW³?”É’^5™-5d÷yþbƒ®Ç-Ä>(íŸ÷¶-™óœK‹Câ-ÎoÊkñ¬K™…+s/ªGJ}^–U­ø]ÿf}*&kgû™´G`²!r”´÷j¼ Œ³¥fnÏÏ Ì}A”¹žGþ>|6/ú >›'5ª–=鏯“iÜõ“ÀË´†Ñqç›Fë5Îóšu¼ãš¼Ëðõû%Ú<ÍÁZD+à8l.³¯NªÍ“€øýl3f¸¦Ybf›§QC/ÛæY28eïQ>fFÙœÐäH錣Ѥ ®€’¢‚wµ ¼‰ØnºHy{×<ÈWø3pÐõzœ"Ç<žêû/p¸×ÌófÀMéÒü‹ñ3ø¾ïûdxùåP«9÷ö·¿Ý?÷ÜŸácû8þäO>¨9ÐB¬?‹@+JÊó>fa”}ñý}Ù¬1zë¨þ\3€.”¨4 &&:ºo•ŒÝâ|Üu¤>Ló€÷ø?](ª¸ä£æA‘ü5×](‰Z3€ü5R˜®xÅEŠ^í5.‹qIš šÒ—lgåÙ G™—oqÏC§Fâ‹k&B­ò¼„㻄ØÇs À AäiZ.6l¿ÈñwLƒpÀƒÜÛטE¸à>êŽ<È쥤íq¤ø¬±µ•Yò¡®ÛÇò'¸TÏðªÌG‘ Ãõ`=ƒH[»çbižs±/©fÆ7àg4œƒbJ×Å’=o®g5)W],ñ’_‹ï­ 2‰u\tˆV|œß÷¸±¤Cî·a¹%Jˆë±¤´Y%L ã,èþ$›S–¤Ù,kÍ…r¿;ˆ}!=„R)ÇyFŠú*´fÒ°hp¿ËÁè²a;õ¾?ë3 %ž£“Î?Ž"v–ñ-kÏkó4"š{^U”7)£@L™ï&…é4Q3òâaÓl^dLóxŸîMn3–hó$;ËæeØX6ûlÆ ·yQ;üÇfÙã[Ô.äG½Äõž È®y0W <w IDAT8lû(襨gÓGPï ´2QMè|TYf¢¨ò.ÿ]% ² wL´wÅ@<ý4P«µBõõJ‚+WD«ú2Úí.ÖÖV=—$5d™Æ¤Þ‰-#³RØ®#ö-ì g¬ç–ȗʽ.!ÒûZååË´«ÍÌÆ8w},§Qßð‘ØÇy}À{|¡wâ BC®ÊID!{¡”Hss™NÓ·]´ç D=„Ôb)ekî+À]ÚÛ¤½t²®ñ÷‡¼‹ÀYeL]ê`´8ê9ÃóÞq ¨žAèè¹p eÎ"8]Ž]ålêcùª‰zŸåþX!»Õñè¶ šwéàJÙºjœÅaÙ Aý"CP‹{dà %©ÉlT™5H]Ìòx°¼.«ÆÉ¨sNÖ|,“˜È½óùè¾J¥úæ_•0p|]ÃnÔ¨vѾ¦ÙŸ-Î×b†„ìä&<ŽödQ©\™š†J-¹v*wsœ¯‘NÇ•˜ãuÍýG¥Q‰É¢V‘§ÊUŸ‡7ŒQ-3ûæþU3·fe÷ª¦oFä–¡k¬Ò¶Ÿp/£ ±Ìgó21ØQbí…lNæH—,‹Ej§fÖñMzo™,RóÚ¼ìשÍË9§Ã±ÕÛŸ(›ý1ÛtØûhV››EjiÓÃÕfÓ-‡„Ê?öɪRA(»X'xRiÁ "#Ñ[Ód(æ¸-„è:ô^E,Õ9ã"ÛT× Ž}|à»øÕ_} üàÏbgç>þñÿçÎmâ;¿ó»ðó?ÿ xÿû߇ÿðþ½û{ïcȲsÞaÿ íì|ƒc“O›ë¬²•UFç?w±oãq:·øþ ¢úô6ç+Aḏóá]Ðg¼À+Ì<Äqmù0¯bqªóÜOñ˜Ï¹(à¶c2*™ipl[ÈóGÔ@ÍK¤n Q¥û½|ÿ%®ÙŒ’_¢D6 ¨_áû<ßu Ü×¹_e ˜¡xÁÌ“œ–¯šÏ®ÑáãT‘Qê"uíÿÞD¤¶åIm®QŸÌY©q€3n÷‘W§vÆ©ŒÀEIÁ9ï`íM†æ_ŽƒÊœÒÂí¤kÖP¯ž‹åmUgt3 ¹‚4lV‡×Mt.‘5¿Àß—m³?b›ýmÆ}²ÎÇaóq]ß Œ11j¸Å¹S¤V‘ÖÄ"EûŒñ-Ä(°”`2Ôc±Mz‡ß?‹Håz€<ƒ‹X­Öžÿ‰ŸøI¬®>øÈG>Š_ÿõ_C’¬à¥—^õÿøÿ,~ù—ÿwÀ/ýÒÿ‚Z­ç†5é>–©4Éšt ‘åÈ Ò ø%Xó¯»>óóÔšx‘@Wt§žÇsÎ.çÒáÞ&ÛM«'€•ðµàPSyË\ÇÿÏ8{<^ƒó­hú«Ì\$>ïLn /*W7ÝE±Ÿ£àëŸTØò!ë²Øosƒv^æütM4^ŽÄkˆ*ÚRgÿWÆAàðEF)eΞAìwØ2çßC¤xU6 5êìʤFÉ[b™õ÷ýB@ULkÎDz¹Š²›µÏL4]ÍÄÊúÙ’¢:îmö® ¯]Ñ7צ®IewÚæú²-Cè:@¤ÄuƹÞ4Ÿí1ÃÕ1ýF›ˆ%^0óØ1‚êåÌY ©ª™õ=Œz”ZUîq”yS 1÷í×>"Ó›Ô¿¹^tþž±×Òò¸ºc|ΕŪþxžskn –`<dúX ÍÕ¸ÉG™Í*Êü[†êkžÏ—ÍÙ˜+½ 5ï$›çYïi =›`sP9‹Í(y®ymÆ 6—=þ,´pXÐæi7¸²Ôyãlv'ÔfD6ϲÇËÚò‘zz5i“R[ËWIñ)ÞN#ñƪeßñ’ö"ŪL_÷‘ÊRQzEáë>d¶}¾™¶Êñl0šúu/°,IMÕ«†R7cãÿíxãWDú û/ê¤í¼múIšÈú©²LåNÆQEl¯Ò!ëЉØ÷¡qú BOò6IkÁ{Ÿô!j¼O‡rÓ[nøØ1`ƒø5DÆ«Ïw‡óy•çìôn8·9w7ø·œ£}®sÃý CãÚô!#´†°Ž–½HNG‘mM¬ÒŸÈŒ# ¬†ÁÒ!5$'œßoè]=Ž‘/Ïq¼f¼MäöQ0Ðþò±o¡O›l`N ¯lvœ¯^[«¦A™Ç÷ÎÀ8W"&¨¹H[­yjÓ¹n’*¶å"Íkƒö©g&oÈK¸PöV}>‹!ú^p^ê<~“{'3×sÕ: >þ_Žô°OÅf¢2Þzç‘G(–+Í‚K<ÊQ—OÃ8F¬žÍe±ÖH `º ZñÿeR#eÒ4“Ž[FÄ•8þ¨4“C9¹2c:©6cN›±D›1á»n†ïÎb3N Í˜qü®¤móØìJî+7ç¹ý µÙ±Ín‰6»’6›÷<O¶°K ÒÂ1ýVƒ¦3QÉ›ˆ"ZûTÅ­¬f%ò·Xêr‹åAgáØs?W­:×ëׯ–¹a”¿R©¸­­[îÖ­[!N»yF@͈m ™„ð‚ c•Î0öˆô­-Ú#åà'\÷MDQ/ÍaŒ‹´†PÆÒ!ø¬ÚØœ‹T¢¢Ñü*)8bS®…ÄUbóvf|^BèKéºX:$àºë€7\³t><^6o¨±š}uF¦·Êâ:eHpýášI œ³‹& ð€ kئ“q‘óÿ2ç[½$7M?€åí©±tiŸ¢gé¤Àytax®ƒ2am*@wLï‡s¡ªÁ¹HD-kT»ø«.ŠÑ¹±»Ä¬•úA¤¯ãv¤rÍq¦.~oÏEBe›Zf+¦,/‡àqR~¦i² }í]غ3ýüNáümÄ2«º3Ä7«„çks?6X:µ¢’+ÞWßPÊÿW ™5Ù;ÎQæb6χ®á¢j¹2MDÌŠµ÷´š‹Ô¶5–”õ-vuæ¾Pæ5 ƒ•¹Ïú,-ƒ=î¬íæÁÚóÐÔž¾N_§¯Ó×éëD¿l´Oà´]4ecü¥6òœ÷*'*, q`@Œj÷7•½åúú>>ô!`gøã?þ*à‰'ž ›£«YèèÆ¹sçÝî `S…çV¥`›@—22¢ÔÝçx.ð÷k&ú¬Úó&B#tJ€îMT_ âÒÂP}¼T¥¥6mŽcK ËÔÛ<¨„}±~]ô»ÒP°e>MDEu»f,UŽ}›Ä€÷#–½Î¹ØC¤œµÀ?sÛÌõUºÝ׳êaÙ5{A=& ¾û0`K`EcTÍ÷ È®c@xЍYÑD°“‚¶¹©mÀØ0@/ãœvÊ=êlð\k‚Ÿ}Øßà?ѹ¸ÀÏÞDT¿…X§_3 P@­Ë¹E¨Š¥È®Ù ¿û2€o"F™/!4¡÷Xç¡”é6m}Œóø„í±nÿ6B‰\Ʊi/Xý‚Ô8bì‡HÎiÇG’"¯_!1º~¿kÀ¨æZŠÝr>G=zt ÈPIQ‚Hr P_–£Ò5{ MšYi¼hÎådÀ\s]Tͼ8Ä^¢±yy¶+«áQ1ßïqÍô{×8r@ì9R¿Œ„&Û¦·aÃÇ~ˆ=ë>ögÕÌúõyýXê^›Uó;Ì^Ô5Y3ãéq^E/ [e®]ÍUbr<Š÷àQ’™îáþî÷oyýµ“ ä½ì×IWTô‡0Çm³ Ú|/wŽyÒçè0ì¸mÀHÊ ’ Ï™ªv5Õ’mƒ§¥²l"Œ+¡{Éá\?¾ƒw½+ÅÝ»Mü韮`ÿ÷ðk¿öëøøÇÿ{÷ ¿ðóþᇯॗ^À;Ûxæ™ÿ?üÃ?îcûqxo•y›ˆM¶*Cê˜1ÙZ|¤K=šˆl=;°¦üÛBiHÛÄÝa½Æ= ² œ9„,@ƒeCr,Ô ¼Hå ÕÇðï©÷ð(í¸Ããm¸(,wÿv ˜°Y1@Lt½D5ä¾ÑžØEŒ¯'­ àuQÚ@ :$WMœ¨q‹ºì©¡]s ŒFãÐÛá9.f̪f~åL497«t‚Ôl=Œ`»¨q20ǰeör0}O\þ±tÀyé!”uÍþQô¾ŽP´j9Í»¢î ã4ô̾˜ý[AdúR¦BY”s‰®636ÈQñ.îwÛPÞ1ΜνÎùj»ÈWqÑ1l"”±i_uÌyÁ±v‘§¯­‡¹øx¯™ë¦e×ÒåçߊÚ¶ªqÈ3ÉaªZÖýþ$+y «¢¼0WLº @ršwè W¿Cyq6`4·pñnbÇjCöïÓlv/r6cŒ]óØ\ S…Í¾ÄØçµyÜf½möÇ`30»ÐÞ¢6£ÄþuÝ=j|eluüeÚ\´+›p3Çæië\üû¸{$J܇ØÀ©÷3:Ù› SxŽÝ›l„°àcD{Hƒ‰ÐGf±Ç#l˯}-Ã'>áà}æö÷·ÀÿôOÿ4z½¾ÿGÿèYüƒðñ{æïÃþ!ÿû¿ÿûιUçýǸFP»…ؤî)À&G¤Î1º,:uÖ•{zEV}ð«"4µ¶ÐÍ‚ ã<Ý$ [ÉÂwvÌTK¸­Çïmp™!ÒšÖš\›¾À¥7±Ç^‡„‘äë¬=ϲÐÑw1‚.æ°Œó¤ˆ÷Âøw³°V¬±÷¢àÚ^gô|ß!¾3Yø×!ÐË6 H{œ—ŒB*«óü­,ô $& ¯¦âaI›/ð{¡w#•óCm‰š*{exŒFÞ78O= ÌI\Í;Ž@¸G‡e¨ä]¸&uN²X+Üÿ=|ÍGÚ[e®tm8~Vâ}—ù÷=Gf3ÓÜ]¤ÀÍ(ª§q$ìmH³°Oz¦?GÎ]#©2)8 šÑ™áwÚÎdP|èÝi²‘»Ï½ÝÊ‚ÆHÅk]=<_×E'©kœtÏ=àŒˆ^Âs‘<&kÑ7×a[š>ö’ø $… “L}áVÇy*Áü„gˤ ç$L:í91ê;ö½l<‚‚çµ(î,có¼¸s¢Íód0îçPÞéë­óro‘sÞ/×;½æuîÌC ›0]ꇰš(ø:0‘U‰ÛI+BMÆ–¶³çžK`9ëïÞÝÆOüÄÿˆ_üÅ_ÄÏþìÏàá‡Æöö6¾ô¥/ᓟü$¶··á\dB¤}û+€yaÁ®‹,3Šüî Ô6㑈™~ß4‘sg"±;…ùªÜK:c”_{G'LszƒY‹&B™‘ú]%K»&²/Õòbÿ€7Qug2+ü^ÇEV$ÇHöe„þ‰8–´wAû£‹Pu—ŽÀ.¢.EÛœsß80s£ˆ³¥ö탬b¨^ç¼Þ‚a‡BtDénšõ´5ü»ˆý.iÑw‘~u¿_rf_{sÎÔDèÆyòÈÓ9gæ:°%@*‘;à ”½Õd…맨 ¡ªÊˆØPÍœWcÈp/ÙçÀªf¯ Ìø6ÃÁÒ®èœoó;5®Ùm“Ýsû›…ŒP±„KÙ•À§¬gÆïÌ\ŒÀ²IÁ†QøúDßoÝé³ëÞWËçÍ_DcÀñ†Êè;ÌRïæxo6ûÞ²ŸáóŒß/yÊ*û)pÙùšuý!¬½³_GEÜ ë0ïøÇEn–½ß'Ù<ï~19›§ÏÏyï›v},bó¬kZò³VWÃ6ÚŽûž¢ù*9êùØ£ •å]Sqï9¯_¿ŠgŸ}v䘼妶IÛç0J]G^`M´Ÿ¶¤è€´»›|¿cô¼‹Ô¢ê݈ÞgxÔ–ß`fB:#9±ùX$çè ä¦cøõhjÕo¡’Þ>: ¢j¹"¿UFªò<¾"@éCoE!kÑöÀ·:¿›NÀkˆåZ˾ûžkR5À?õ!ª_E S•Ó©ÆàkˆåCUîn­[[oïó¡l“Õ¶È|Œ²‹Ñ+õùò&gÖ æÂ>Оèkm]Írh2snõ­hLó.Œ¦Ÿ©pÿ YŽÖkþÞffõDiH^=-uçÞ^ÖæŒ6Kã€ó"g¡ÉÌI‡ŽåC\ïëÙ$9É{Ü÷]WåZ Ô 5¯2=¶©}‹ó(½g2‰¹õ¥††ÖE{kä}ÉÏxïu˜OñzÜY¼§OÊ(øž¹ËÀ˲yægmÙ©²õjeíÆl7aƒÌR"å0>-6Ž’kRIŬ6cA›1ƒÍöo£l5'óØœLÙœ£¾ç ¡ˆQk鯬!JÎϨ}zT6O£>= ›]çâõ1͘`פkÔO¸F—i3ÆÌ=¦Ü –a³ýL2Ã:cʱPÂæINÿ1ãw,ÓTnxÆV•U›BUǾê4‰àÀO»‡M¸¦œý#©Ùª«.·yOÎE“cê¸Ø»ÏÏ4X~3ðìY0Ñ߆æ×™s %Ç ÍŒIꃒ¹A¸OPÚ¥Í*CZå±mm pÛºWÕü×øÛ0àußšQeUdÇcø3~ÓzÞ½7ù„sô-Äz{«4]£Ír”Öé0Ü¡C°j€³èMüÜDa;g¢ï“ùÙã÷tH±·I ’‰‡Jw"syF#Q:LSÁqŸk˜š9껨4=,¥rÔÅpÑÁÒÜzÒºžñ1ãt†¥sb“ê.÷!¥+ jÙ.^ö<J‰¤ßb˹T–;¾¡®­ò»3QöîÑYã1¶\høn:Ó8ÏÁITp˜¡rQäã¨ßáþtqUª7¼p,ÎåËɯÁâõ®{…Ÿv[wNÃgeÉjÊÿ$`íEl.ól~¯lÃyX—õ$ËzN‹Dó§ Z9”H™äy–±%l.ñ\ä³ yž˜^w_&B[6šï—`3ŽØæE£ù˲yY™žeÙ<«@Ð"‘ùy¿sÜ6Ï:~¿„y*Ù40÷IÕYç¾â#²Ñæ¶™" •ù,‚¿€Í®íµæø|ƒ·¾› ˆðõé\4|dxªò3›<Þž‹h5ªz‹¡æÜÎÇþ*áíí1œ"d z.ø¨v^!XVs¯ÊJö|dDÚeö£éCßCËǒˤ”†‰D'ÌÚ4vÿ['EÂzo£#¢žŒ½9)Åÿ^Eó[A,5R¤TÍUïŽBoVa[ÀVN”œ­SÊcÊ!˜lð<}³-9%&3–ÛÆfÇŽ3'rg"ï}Žt<ª… ŠJ¾*¦W&ó¢=_ç{ ®ÿEi­“jA·÷yÇXæÖ:Jšý.¦¬Lsç£h ö»æ¼Ë9”þLÎR߇fî&‚b•s¾Ç½³â"û˜2o=îÁÔÅñÃ\bk³YKGr˜¥à˜‹k¦kYNr¥­ÌÆ ù.w.’Á˜vüypçQ`íeÚ<k[¡½q‚EoešpÝ´´Ô$¡²Bl®ÄqʈΕ±‡`ó¸qÍj3¦ØìŽÐf7Å£¿Ÿmž´¦E¦ÙŒmÆ}n³/q-¹Ç_¦Í8æužv[Ôf7›ÍYáo¹Þ t¬èU›€.[Ðf+˜æÍ¸+%s#zJLdXbl`Ãt*5g{1Ú\+.j~(#SAŒÞÛH­J“zXSݺh7«ðï¤çò4×eÚìŽËfÛ=4N²¼èø1¾y$Û§EÿÊDèÇÉ•û)ɲ6ãlÆ’lÆ›ý ±ÙÝç6Ï›Q˜%³2¯Í8B›ý!ØìJì+_âøË´‡l3f´Ù/Ùf¿˜Í£2Š|ÚïÙÕylö&C¡ÏHý°Nßp0|ø^‡Ÿ«é8&z p˜ÕùDÇ#1ÑgÙ,°, •0:«(lÀü€‘wçCt\ô®-ÄÒ¡›æØ]«Á¨ñ]Ex}´GeHë>²:‰íJãpøË>‡`ÿ;|d%ªûà¸l!0 =ê[>ŠŠÊ¶ÏìŠm¾‰¡ÌªácS¶Êœ*Œòg¾6൮ˆ6çQö«ÏEš Ï9v¦¯`Øtìc?3j#ö)?lêvñØi!êî‘§„MŒCé=Ïïco"ïu„¾…U{ªæ˜Iá:ј*öz1?V«&óyMÇ5ô>2§iníÖhMœ‹{\ÛºÏ ú‰A“±J×—7½NÞ\c)ò¥R6“X7»Ä”æé»Þç×c8E,;+ f–¬ó4,çK>—ý”{í2möÇeóIPò~32Þü/÷îéµôæ|¹“µ7ŠœøÙˆ÷í³f‘ÇLÏ€+¦‰†Æ]ž&â¬ã¤ ÖÀ$À§’ßÜË %[ÔÄÜ4‘û B)Ò°çÂd4tÞM÷›ÌˆMIzRu.2%Qoaÿ¿ellÏïsáo/x"3‘€ž¿.ó÷«ˆâwjèÝàïfÞW UD‘ÁJÂt¶9ÚÞ&-[§̉ö=Äò±Ìü^1ŸÕz—æË: 5“i° \¶?¢86é1X$5ãHÓ´c>+Q¹Æ”À¯=Oâ&³—ê³V¼nš!¯~í Î’æÓV®ôÍ~RŒews””ÂÕcÕ5ûÔª|[ÇÏ™}G½_ÈÄØy)²ÕÝ—Ï7wúŒ¹÷•Ì9Yºó”–Û²lö§6ÏuÌ“fóa9-G}(k³?¤1ßqÛ|’"3ÚœN9G6ïô™ò •³ˆVSLBƒ2f¸{Qm¼4*ôÙ"=køT ÈÞE(ùÈÏî!Ò¶:r/!ª„ß5[ЪPL©•@ €Í²7ÍØõê"ôY\Dhì~šŽçíz‰Ÿiø@][sˆJù»ËßáòJÓ»f^.?®ÈÞ…¼´æ­bÖ a€©š…m–„ó~‹ÀÔ:%®Ðl\œSë`HxÐöaÐÀ4”ÌùíXeã:7š¥×ÕgWPhè¶×„Ë3‰e¬ƒIös(8%‰q¢Åë’Y•š¡mî¸<¿Ï‹TÎ]sÌ Çj×QÇNÓ–ø¿¯%xpæÿ“¸7zö•ÁîÎuR1Ø2Ÿceˆn–HÝo¯ûؽm~³½N×ãôuú*ýJ1¦.½ÄK ¤kt.ÕNg¸TGõ1:D…h}FÑò®ùNQ8ÍкM ¹†í½vå ¬ ЃJ¡»m\b@˜hÏðs KKâ"bí|ÃÇxŠNÅKÎóœ{—¢È¯r<"d8¤W¢å0´aÊʹ%\¨ùo˜9Pö¢bÀ®uUCãšš¹—–Ž¶Ž˜õé"_þ”šy³N‡Õ¸¨€kAü½Èì‡|†DåpiὊÐVÕZÙ£aœá†O9ê•™ùKÆ`Ë´€å4™ÈªcŽí ë›ñJLsÅ8HEm85å«—ÅjbøÏÅ•4ÆWÙ$(_u}úÌ¿ßlNæ6é í _ÎÓp…ÆLQgô6v8V©ŸWÄõn"4 µª\ê½ß—8›Àõ9e*Ü;mä{/ê.:.‰ªêGКh,b¤ê‡Í–ÙØ&ïóŒCÕ‚c6,E"}«úª`³´Ç‚ضoDFÅGŠs3VM㨥.–zì)ÈÊì³LIDATs½X0^C^CfÎjê×A¾œïžsñ1K%œÀ®±Ë™žŒ–qðäpabê⸠÷roçu‚Í~™÷¯e`0ÿćbs‹¥M\‰¹â“ÂgfI#ù†OK}-š&Z¦ÍË*Y˜¶Ûf7ÅfNšPžt›“ ë9ަwÙ6û#¶¹ÌXf±ÙÏhó¬"JÇi³›sñæ´9-«ÓQ°¹?¯r. •J\¤ßÐC`‘Ú4 Ø–qئ×:©]«,)“PÏhˆžs¡¤¦¨‹Ñ#H]u±ÂÞ*EãÙ'ƒOÅ€ÇBoEŸU™ØCÞE§å«8ëC_Ŷ úÒóØGøýBÅçVâ[.–Ȩ¡^ÎAßÇò pÞRêAœ£ãçØLß3%i5ŽÛûð>W$¯!ŠöÉÔÔàX{EG¢€¹ät:C¡ê\~[Õ›ÄU4…I ûˆHë©ù *Øa6ËE´`…Ï»dýÚDl”O(>xùþkGâòÌkö²H —ͤu]¤0n»¸Ÿ+È÷”øvè’š¶Ä=T×Ú¸à(K0QªöÒ HËôFkf8G~´“‘û·€Á*(™,«M´ ÜéfÀ`þqç}os‹«–„ãrŸ§Vÿ8#ŠË´ÙòØ"‚:ξ2Œo&›§èS›Ë÷­ºÎeæáÔæ¹íUïEŠªÏ €ÃkÑ™aåéó;jfír¬brjøØÛ7 ×Šûuè”T)g«Á;†QH¥TVH.ñ‘Éê¡ë"ek‹Øáa„Fî‹ø#<€P¦µ…ÐÄ-&%9»W“ãèù¨Ø,]ÛPw!«rQ¤ÎŸ»ˆzb‡j¸ícd¼Áù©¹x|«ˆ}Ãbv©ƒ|øʧ†eT\³šÙJ£ïêÕÉ¢1Ôž°: ÊÚä†ÁyK sW±\j‡ö­!€ýmÄ&þhÅçç³X”LÙÛ)ò õ‰Ùoˆ4´@TF·¥bigdtäjœ§®ÙK™"”ëˆ}+6ˆžëIòù1y±Â"¶Æý½q–tÙ÷¯ilÞ{ŒŸóùupç±Ø<‹ !„â*Eõ%<´Et0FyW~Œ÷U–C~Y6OÓ˜ÕfL±Ù‚ÍeÆ>¯ÍxÙŒc°‡`sÙÈ÷4›ý”ˆù,6£¤ÍX’Í~Îùð%×yøž¤òº¨Í8¡6£¤Í˜bs)Ñg”|Óàì…ËRrå\¨Ù¹F0«Fî!ØrØÖ)€‹ó¿É¿u|¾vÝ;­¦Êwà¿Ãcô(ž' ¹æBÅŸG(úwx€*Ý×}èÁHØÌ{à€óÌTÜv±WzÇóÔ xÖ¶èH ÅùÜ;.–Îh®ÄB”ºápÌŒ£¡hufTÕ‡%ZœãDǧ>‚m*÷x;¢ªÞ(Ïó{ ép˜ržÊ¤Œè]ê D>¯˜ž+Éò±ÉÚswìÝp±ÄH½:)¢öGRÈÜ󜜰·ëœ_ÑÛª/¥ÂìOÍ܆Ÿ·k€<µoTj7—˜°ŠcÍÅÍX3äI Æ]Ï9Åt~¿ï JÝÓ®ç2lé`ºªö4\<é6àˆ°ö4›çŘ„µ‹Å‡zey\„kRäzóŽ5î˜Ó²“temuü²Ñz7Ἐ2emÆ›ýŒ6ST/£*<ͳÌ×qÙì'DvÇ¥³Ý$•M·€Í£ÔC—i3fXçâþõîö¦•Mq˜&)¹…Í“î#ã³’®ä:cÊ:—±ÙÏ!ð…y?‰6c› çQ„vÀ¿]¢“Ð1ÑðŠ¿÷–¡ˆ0²Þ:F:õy¦ª:Ëk:>Rª?@t¶ûjIø¬rê¨é¶Â,€'®°^¾ábãõšåNWü€GeÀ+Ê\0š¾Ÿàûm2 )3Ái¹ècvÅŠØ¥?Úã\Ðz%nŠPfÕñÑÁÊX2U¥FƒŽÙâü€н,d:Æ©ñœ·žŽžgùOÛÇÆbP,/šõxe¤t Äúã\XñF_ÒŽëìL6Æ»¸jÆyê#8uM®Éqät¶t²¸¿†½@txR³—׋°û1u€Ëò€Ü#¬½çq\«Ìf1|t:l3½œ”ªö?çGÍëÓ§sÏå6Bó&'¬Çq%ÅKÔc<_­Ç½:;÷Ö—{ÞŒºMÓ”®QâþäfÀ;Ù@îk»%âÎIØUL§šZ4²U¦Q¤¬:ô4OËO‰†Mó’ËØìNÍ(< ›g³[pï¥Í³\ £úQ¦Ùì´Ghó´1†ÍÓê=çyÿ¨löKZg¿à5ˆ’ëpÒl^Ö¾6™‚‹Mw¢:&:ï `ÆHsá 0­ç%%@Ô¤êàŽ£ƒ š[5$;wÅÖ©j(8çBßÅ;ü_t$Z¾N‡a!»!@ú:€.|î&ƒ[ˆz*™R’¨I×Ô¾û.ÒÁª\hÁéé2$î!‘‹´­ Í˰TsèVLiV¡ŸÁFì½™ë"Um±B¥Ǧ?Û>¢v|T”×Gن̬åÀÌé°¹‘VxŠèçÎeWÇRc{ê#Í1|˜´ˆ5ݽNò0B.µò¾T¶]¤™½‡ò¶‡àˆõ¸E}›¹<Õ¬¥õvýÙþ˜Ä8eé¸ å˜ãeežµóÞÃÊ`°E0Éaá‘ÃÆÚóâ‰6Wç|À,ò:vnÞ7‘Í8!6û›îÍhóa¯ë"úaíí£Ö„p'à˜î˜ÇîNmž÷ûЍêÏø–˜0¢o.Ö¸“ßÞ€M•õ\¾ÆÞ–Õ$e4úÛ€±oœ™ üŒœ”=ž·]8Ö%çâ»ü¾÷ €oÒqØqQÇâ:#ö§;´½‰X{¿oæIv«Ç"°ïò6%X·]üœ¸æSÎS±œLß{—¸¾‹UÛ8zúN1óaA/ÌšÙí¢9ï"ï` à}·ÙE=èg¬p mȯr%ÈhûOºÎ8´.ŽdÌV®›½&íKýž ?J‡Âþ?EÌàiÞTÆ&Údif f¸ô²Q>Àˆó£pž ¶¬çèý„;ÅæÃ¦©-F—ш2)ò5Ê{>É6/ãøGm³›r~wD6ãˆmö‡h³ŸcùÁ4›9ÇQؼìÆûã°÷¹ÍËÞ“c¾_i»€Ðœ¬Ë<5 GQÞÞ8sݽì>ž ]}*‹Rå±os Æ®bw±Æ`ÏÇ:ø ‹UÀ§yÌÇ£Ö ØE7z‡?ëØ *t+“!”híæaÓ€e_üC½o”­}¤âå®2$b\*neLDÍ „ò(5Ã[uxûhO³¡Æn». c›°Ëe?ühíýjË|rö›ÏŠªÖWc¸Ë÷wI4·5„9í˾Y´†9—m]mQ‡¢_潂e•ÒÇ][)îÕ ©˜õ‘Í" ˜õÚ͵AÁ#Fÿÿ0îKÿ¬Ÿá>îçXz<‡bóa+y¥WuØŒ£²yYѾãT‘<.›qÄ6»C´yžÒ²£ˆ:Ï{NwBl>ŒñQÛŒûÜæ#8NÅåAâ:AÒ.bDÖ6 «†¼©-Šá¡’‘êd¸¨l])8*­Ái ¡y[ÇIM´¸ÎlJBç>à8žGùݳüü.B´YÍÅ:ïP Q|oÀ¿'<砮ťR ~ÍA¡Ö_À¾Í(|³èÅeÕÓ•½P)ô":œ1}•Ô-‘½MW\~ËT‘ùËѨês… FY¹\ùy±ÇÀ8Š3¯¢á€s.‡­Íã(ËS7Y‘¾Ù‹–ý*á÷ä\¥.oo:"F–§¡:áÚ²[>6œs?WãÚMÏ`èï3iº#¼ŸÌóL»ß2î(l¾•¼O_§¯Ó×éëôuúó¨ȪÑÁ¸c€¯Í*XåâQÇšTÆÑ/ü] ¸¼àœ=ß:ÿ~wÈz`T¶Wxì¿ àÿA`¾z„6<ˆÐWñ:biKÇ8tÏ êBØ:y[³Ÿ"_¾äÍü «,ÇŽ[%<}‚P•a {1TrÓ7“£Ðæ{RHϦĭlùO†|i–-a+: ãâa£ÏIÁÙ¥@Ý7`Þ~n…N…ÆRG>+!H™‰êYªu:Ÿú`tot‚é¥Kv½Æ%Õ{Æë#¯žžêY¥ÓÒ1X4=½M½Eîij¾³\h‘Ò€Ó©ã³¹Œjä[ÍfÈöïQìíe•4.b3î›ý‚Ç^漞$›q¸6'LFž6ou1™Ð-õ£/s«›0òj˜‰œ)²ýêI8ãc“ù(›¿‚™X§sqÀ_ð§^ð$ý€/#ô“(‹Ñ¡Í–õÍ#~‘rÖ6)ÃP¶Vp·hËÀÇh|×€ø5ð<¤F‡bÏ€SÍ…­ŠšƒçPÓ»¥Œµ Ãã4ÃT’Öñ Œ⌣é¬X¸gænå~tß( Ä8rÂ.g@ÙíGúß¶™ã™›¾ô{ÆaJÌ÷?#HŸ‚³äÐz³– ܈¥SeÏ¥¹Ï÷¤a°#)zaíÒ6'€ú´ðШϺ àˆÊh ÌÂùë wI6Ícs›IÔœ Æ3ÂŒ;V›Ý ²Ù³ÍŽRÖf·$›Ý”½=ÉæIÎÿ$›“#¶#lvÇ`ó´±»)çw%÷ÿ¢6'sÚì¦Øé•q¬Uô“²ÛfÚÕS0@hœÞcs’ÄÛå9¼Açâ_ð„ŽÛâz}êdôRÊRb`þ*ÁªlVæÀ&¢KÔÍ=¯sy=ˆ&Bt¾ “ı-5Œs¡Œ…¾ßr¡‰½g”0_²9MòMòÙ˜m§R³ BFÊÒ¥ZAõ]Œ^V…¼¸ï’$–­U«lÿÊp I^‘z”„…Gh¬ïq?4\PnWf§ •˜¹I¢“æéÈu¨[20NšUwIa¯–Á`n2Ó>_1NhÅìm{ìtà,<‡Ã°ei³àw ¸³ì½'9dÜymž k'%ª÷ÜM1žw’‚ Íñù·qœ¿“¼&Ëe7Ž:+›ÁæIÂ\ãlvSlv%mÆ›‹BRÓlö(/|¶,›=FSŒÎj³+is‘¯yœÍã„ܦE ¦ÙìGœ×—´#>ï'جX¢œ¡ûÕ¼{3—*m³Qt7Æ'¥;éÆa[ŸgŠ}ÉÆnÍSó^Ý€wÍQÕ|NN…À¾Ê¦ôoæÇ0.ù xÉ•»¦öÌÞÍèì,„UŠ·…e1N Â.ãžsñ–]Ö4V˜Û®b꼘/óWÊT–ågZdÜï“Îç0½ƒ¾ŒÍîlÆŒ6—);*›ÇݸÜlÆmv‡l³;!6ûûÜfL±ÙÂÞö%öÑ2lösÚ¼ÈõŒ9×yÚûe÷oY›§Û/nsÃ_¸¨ePAÙ€Á;n|‚ÐOsæòf«ñv`Æ›•´Y‘ý·³ÔçKÖ\Pãn²téB™Ñäõ5j†­ˆ%bÿ DÖËÃT{¿clèà-J¥3+.ï ôäT± ªÂsJo£ë"£”-E³%PÊ4 ç”МH(ÑŽi`²ÞŒÁqÎÓÂÚeؕ܎j¢öFÓ!uÔâpyg2uy«ŠÓ|u˜5ëñó™)_Óµ½+*[»§wñ˜) è#Ø¶Ž’+q_ó{VæùŒ÷0_ƒÍë LÃ43ØŒ²6ÏZæ;îœÅÖY±öD›ÿß2=ÈãIEND®B`‚dipy-0.10.1/doc/_templates/000077500000000000000000000000001263041327500154435ustar00rootroot00000000000000dipy-0.10.1/doc/_templates/layout.html000066400000000000000000000066461263041327500176620ustar00rootroot00000000000000{% extends "!layout.html" %} {% set title = 'Dipy' %} {% block rootrellink %}
  • Overview
  • Gallery
  • Download
  • Subscribe
  • Developers
  • Cite  
  • {% endblock %} {% block extrahead %} {% endblock %} {% block header %} {% endblock %} {# This block gets put at the top of the sidebar #} {% block sidebarlogo %}

    Site Navigation

    NIPY Community

    {% endblock %} {# I had to copy the whole search block just to change the rendered text, so it doesn't mention modules or classes #} {%- block sidebarsearch %} {%- if pagename != "search" %} {%- endif %} {# The sidebarsearch block is the last one available in the default sidebar() macro, so the only way to add something to the bottom of the sidebar is to put it here, at the end of the sidebarsearch block (before it closes). #} {%- endblock %} dipy-0.10.1/doc/api_changes.rst000066400000000000000000000047751263041327500163160ustar00rootroot00000000000000============ API changes ============ Here we provide information about functions or classes that have been removed, renamed or are deprecated (not recommended) during different release circles. Dipy 0.10 Changes ----------------- ** New visualization module** ``fvtk.slicer`` input parameters have changed. Now the slicer function is more powerfull and supports RGB images too. See tutorial ``viz_slice.py`` for more information. **Interpolation** The default behavior of the function `core.sphere.interp_rbf` has changed. The default smoothing parameter is now set to 0.1 (previously 0). In addition, the default norm is now `angle` (was previously `euclidean_norm`). Note that the use of `euclidean_norm` is discouraged, and this norm will be deprecated in the 0.11 release cycle. **Registration** The following utilty functions from ``vector_fields`` module were renamed: ``warp_2d_affine`` is now ``transform_2d_affine`` ``warp_2d_affine_nn`` is now ``transform_2d_affine_nn`` ``warp_3d_affine`` is now ``transform_3d_affine`` ``warp_3d_affine_nn`` is now ``transform_3d_affine_nn`` Dipy 0.9 Changes ---------------- **GQI integration length** Calculation of integration length in GQI2 now matches the calculation in the 'standard' method. Using values of 1-1.3 for either is recommended (see docs and references therein). Dipy 0.8 Changes ---------------- **Peaks** The module ``peaks`` is now available from ``dipy.direction`` and it can still be accessed from ``dipy.reconst`` but it will be completelly removed in version 0.10. **Resample** The function ``resample`` from ``dipy.align.aniso2iso`` is deprecated. Please, use instead ``reslice`` from ``dipy.align.reslice``. The module ``aniso2iso`` will be completely removed in version 0.10. Changes between 0.7.1 and 0.6 ------------------------------ **Peaks_from_model** The function ``peaks_from_model`` is now available from ``dipy.reconst.peaks`` . Please replace all imports like :: from dipy.reconst.odf import peaks_from_model with :: from dipy.reconst.peaks import peaks_from_model **Target** The function ``target`` from ``dipy.tracking.utils`` now takes an affine transform instead of a voxel sizes array. Please update all code using ``target`` in a way similar to this :: img = nib.load(anat) voxel_dim = img.get_header()['pixdim'][1:4] streamlines = utils.target(streamlines, img.get_data(), voxel_dim) to something similar to :: img = nib.load(anat) streamlines = utils.target(streamlines, img.get_data(), img.get_affine()) dipy-0.10.1/doc/cite.rst000066400000000000000000000037271263041327500147750ustar00rootroot00000000000000 Publications ============== [1] Garyfallidis E, Brett M, Amirbekian B, Rokem A, van der Walt S, Descoteaux M, Nimmo-Smith I and Dipy Contributors (2014). `Dipy, a library for the analysis of diffusion MRI data. `_ Frontiers in Neuroinformatics, vol.8, no.8. [2] Garyfallidis E, Brett M, Nimmo-Smith I (2010), “Fast Dimensionality Reduction for Brain Tractography Clusteringâ€, 16th Annual Meeting of the Organization for Human Brain Mapping. [3] Garyfallidis E, Brett M, Tsiaras V, Vogiatzis G, Nimmo-Smith I (2010), “Identification of corresponding tracks in diffusion MRI tractographies†Proc. Intl. Soc. Mag. Reson. Med. 18 [4] Correia M.M, Williams G.B, Yeh F-C, Nimmo-Smith I, Garyfallidis E (2011), “Robustness of diffusion scalar metrics when estimated with Generalized Q-Sampling Imaging acquisition schemesâ€, Proc. Intl. Soc. Mag. Reson. Med. 19 [5] Chamberlain SR, Hampshire A, Menzies LA, Garyfallidis E, Grant JE, Odlaug BL, Craig K, Fineberg N, Sahakian BJ (2010), “Reduced brain white matter integrity in trichotillomania: a diffusion tensor imaging study.†Arch Gen Psychiatry 67(9):965-71 [6] Garyfallidis E, Brett M, Amirbekian B, Nguyen C, Yeh F-C, Olivetti E, Halchenko Y, Nimmo-Smith I (2011), "Dipy - a novel software library for diffusion MR and tractography", 17th Annual Meeting of the Organization for Human Brain Mapping. [7] Yeh F-C, Wedeen VJ, Tseng WY (2010), "Generalized Q-Sampling Imaging", IEEE Trans. Med. Imaging. [8] Garyfallidis E, Brett M, Correia M.M, Williams G.B, Nimmo-Smith I. (2012), "QuickBundles, a method for tractography simplification", Frontiers in Neuroscience, 6 (175). A note on citing our work -------------------------- * The main reference citation for Dipy is [1]. * If you are using QuickBundles method please also cite [8]. * If you are using track correspondence also cite [3]. * If you are using Generalized Q-sampling please also cite [7]. dipy-0.10.1/doc/conf.py000066400000000000000000000173741263041327500146210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # dipy documentation build configuration file, created by # sphinx-quickstart on Thu Feb 4 15:23:20 2010. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # Doc generation depends on being able to import dipy try: import dipy except ImportError: raise RuntimeError('Cannot import dipy, please investigate') from distutils.version import LooseVersion import sphinx if LooseVersion(sphinx.__version__) < LooseVersion('1'): raise RuntimeError('Need sphinx >= 1 for numpydoc to work correctly') # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.append(os.path.abspath('sphinxext')) # -- General configuration ----------------------------------------------------- # We load the nibabel release info into a dict by explicit execution rel = {} execfile(os.path.join('..', 'dipy', 'info.py'), rel) # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', 'sphinx.ext.autosummary', 'math_dollar', # has to go before numpydoc 'numpydoc', 'github'] # ghissue config github_project_url = "https://github.com/nipy/dipy" # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General information about the project. project = u'dipy' copyright = u'2008-2015, %(AUTHOR)s <%(AUTHOR_EMAIL)s>' % rel # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = rel['__version__'] # The full version, including alpha/beta/rc tags. release = version # Include common links # We don't use this any more because it causes conflicts with the gitwash docs #rst_epilog = open('links_names.inc', 'rt').read() # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # List of directories, relative to source directory, that shouldn't be searched # for source files. exclude_trees = ['_build', 'examples'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. html_theme = 'sphinxdoc' # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. html_style = 'dipy.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 themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {'index': 'indexsidebar.html'} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. # Setting to false fixes double module listing under header html_use_modindex = False # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'dipydoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'dipy.tex', u'dipy Documentation', u'Eleftherios Garyfallidis, Ian Nimmo-Smith, Matthew Brett', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. latex_preamble = """ \usepackage{amsfonts} """ # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {'http://docs.python.org/': None} dipy-0.10.1/doc/dependencies.rst000066400000000000000000000007641263041327500164750ustar00rootroot00000000000000.. _dependencies: ============ Dependencies ============ Depends on a few standard libraries: python_ (the core language), numpy_ (for numerical computation), scipy_ (for more specific mathematical operations), cython_ (for extra speed) and nibabel_ (for file formats). Optionally, it can use python-vtk_ (for visualisation), pytables_ (for handling large datasets), matplotlib_ (for scientific plotting), and ipython_ (for interaction with the code and its results). .. include:: links_names.inc dipy-0.10.1/doc/devel/000077500000000000000000000000001263041327500144055ustar00rootroot00000000000000dipy-0.10.1/doc/devel/commit_codes.rst000066400000000000000000000020331263041327500176020ustar00rootroot00000000000000.. _commit-codes: Commit message codes --------------------- Please prefix all commit summaries with one (or more) of the following labels. This should help others to easily classify the commits into meaningful categories: * *BF* : bug fix * *RF* : refactoring * *NF* : new feature * *BW* : addresses backward-compatibility * *OPT* : optimization * *BK* : breaks something and/or tests fail * *PL* : making pylint happier * *DOC*: for all kinds of documentation related commits * *TEST* : for adding or changing tests * *STYLE* : PEP8 conformance, whitespace changes etc that do not affect function. So your commit message might look something like this:: TEST: relax test threshold slightly Attempted fix for failure on windows test run when arrays are in fact very close (within 6 dp). Keeping up a habit of doing this is useful because it makes it much easier to see at a glance which changes are likely to be important when you are looking for sources of bugs, fixes, large refactorings or new features. dipy-0.10.1/doc/devel/gitwash/000077500000000000000000000000001263041327500160535ustar00rootroot00000000000000dipy-0.10.1/doc/devel/gitwash/branch_dropdown.png000066400000000000000000000376671263041327500217550ustar00rootroot00000000000000‰PNG  IHDR“’€7'pîiCCPICC Profilex…TÏkAþ6n©Ð"Zk²x"IY«hEÔ6ýbk Û¶Ed3IÖn6ëî&µ¥ˆäâÑ*ÞEí¡ÿ€zðd/J…ZE(Þ«(b¡-ñÍnL¶¥êÀÎ~óÞ7ï}ovß rÒ4õ€ä ÇR¢il|BjüˆŽ¢ A4%UÛìN$Aƒsù{çØz[VÃ{ûw²w­šÒ¶š„ý@àGšÙ*°ïq Yˆ<ß¡)ÇtßãØòì9NyxÁµ+=ÄY"|@5-ÎM¸SÍ%Ó@ƒH8”õqR>œ×‹”×infÆÈ½O¦»Ìî«b¡œNö½ô~N³Þ>Â! ­?F¸žõŒÕ?âaá¤æÄ†=5ôø`·©ø5Â_M'¢TqÙ. ñ˜®ýVòJ‚p8Êda€sZHO×Lnøº‡}&ׯâwVQáygÞÔÝïEÚ¯0  š HPEa˜°P@†<14²r?#«“{2u$j»tbD±A{6Ü=·Q¤Ý<þ("q”Cµ’üAþ*¯ÉOåyùË\°ØV÷”­›šºòà;Å噹×ÓÈãsM^|•Ôv“WG–¬yz¼šì?ìW—1æ‚5Äs°ûñ-_•Ì—)ŒÅãUóêK„uZ17ߟl;=â.Ï.µÖs­‰‹7V›—gýjHû“æUùO^õñügÍÄcâ)1&vŠç!‰—Å.ñ’ØK« â`mÇ•†)Òm‘ú$Õ``š¼õ/]?[x½F õQ”ÌÒT‰÷Â*d4¹oúÛÇüä÷ŠçŸ(/làÈ™ºmSqï¡e¥ns®¿Ñ}ð¶nk£~8üX<«­R5Ÿ ¼v‡zè)˜Ó––Í9R‡,Ÿ“ºéÊbRÌPÛCRR×%×eK³™UbévØ™Ón¡9B÷ħJe“ú¯ñ°ý°Rùù¬RÙ~NÖ—úoÀ¼ýEÀx‹‰ pHYs  šœ IDATxíœEöÇiÉ9'I‚dADOÌ'æžž ¹¿zê9Ü™ã!DÁœ# I0P²’3KfÉþë[l M;Ó3³ÌìÎì¼÷ùìvOw…W¿ª~©ª«‹üaH¢IvîÜiÿ¶oß.UªT‰’Co+Š€" dEcml‘"E„?%E@PEÀ@ÌÊ„Œx(182þ:ô·" (Š@!G .eêò¡ÍSE ĬLðHP$ê™äeÍ¢(Š@!G fe(’bÅŠrH´yŠ€" (ñ"—2¡ð={öÄ[‡¦WE@(äĬLÜj®¢EcÎRÈ¡Óæ)Š€" 8âÒ :ùî`Ó£" (Š€¸” s&æò§犀" ( ³2q«¸t^Ž" (Š€âþ A¿“æÚ¸q£dggKNNŽ.Aê½§(Š@Š!“2!´å‰óPÝŽ¹sçÊ®]»¤L™2R¹re)RT·nI4ÆZž" (ÉB &eâ*G‘8¥â®%âˆ7‚"©P¡‚+®ï±$S-CPüD .ecÉR&x$,;þcOÔMŒó­KPE bž€§¬d(Êݱc‡”(Q‚S%E@P4D feâI²æL\ùiˆ¡²¬(Š@Æ#W˜+™?%Åü ó,›6mʘ÷^–/_Þ~˜¬xñ¸º-ã¹ (ÉG n©”L…KsQ$ ,FIË–-3&<Æ—.W®\i畊+*{vëi±ŒM£(ùƒ@Ú)<Iýúõó¡©…9%Ú¼uëVÙ¶m›lß½=E8S6E@‰[™$ ´XÃ\„¶ðH2•J–,)[¶lÑ—:3uh»E æ xøUà'³­¼@™É+¿t;›dŽ.-[PòŠ@Ìž‰S$î˜× #åKV¹‘êK÷ëŠWº÷ ò¯.âòL WÓµ5Š€" (‰B fÏ„ YÉ•¬Õ\ºµ}|]ªxŇ—¦Vä"—2I&+ÉÛ°êiêÔ©²lÙ2©^½ºvØav#Éd¶#¿ÊN^(¨U«Vɺuë¤ZµjR£FüjNÔzh/;%dee%Í ‰ÊD”Û·o·K·ýszàÊÒnO¤9L š/úÕ;ž1XéçxìÝØðžûËð×Åý‚n¿ŸÇüø½bÅ +£½³¶~ýz!M¹r墲•2Ê$*§q&øúë¯å–[n‘Õ«W‡r²‘ä­·Þ*gžyfèšžìEà矖wß}×.;æáâlРœ{î¹R³f͇iÆ rÏ=÷È?ÿùO©U«–L™:Ejת¼9pî¾ûn«èw¼`êè·ß~“çž{Nxà˜„d~µeö÷ß¿Üwß}jd=ùä“‚póËà;tè ÇsLTãÕ·ß~»ÜxãR±bÅÐy:u¼EÚóÊ’%Kö»^ªT)©]»¶œvÚirÐAíw/èø˜¿`¾Œ>B®¿þzÙ½{·}æ¿øâ ™?¾mÚ´±ØÓv òwÞyG®½öÚ¨ý·2IÖ7བÉv ƒ«ÿþöŒ‹.ºHš6m*³gÏ–×^{Mn»í69øàƒ¥mÛ¶ZMæO$^ß~û­ >\Ž;î8ûðò.\¸PÞ|óMyöÙg妛n’Ò¥Kh{ÙôÒK/•&MšØ~þépéÞ½»U,©òãáüä“OäüóÏYÛŽ¿*UªØ]¢™_msc/”g¦ ©cÇŽ!#ï“_}õU+ÀºvíÈškG¥J•Bé8ÇÃq؇n˜"çœsNèßQ:t¨ë(×T§xÈo¾ñ¦\xá…R¶lY»“ÈK/½$x G}´=¾÷Þ{ö›R;w¶ÆН¾úJ¢õCÌÊÄîèkB <,©N(„â¿ÿýïFÅZœ3gŽ åÐ^ÄÚýî»ïËK|À€VHqŸðÚ0Ÿyæ.ÉÈ‘#åÅ_´‚÷ꫯ¶žÏUW]%Íš5“#Ž8B† "X¨Í›7—{ï½W~øá+ˆ»tébLÆ m9Xb¤›6mšµb±À°hó{é/|úé§râ‰'Ê_ÿúW‹ÉÚµkí@cÀ;Ö~€“‡îwß‘ùóæ[ ˱W¯^Ö Þ¼y³ <ØþþòË/-.íÚµ³ô­·Þ²oï׫WÏb€bŠ7=žÖ/¬âAÑ_ãÇ·á#°£_¿þækY0T­ZUN=õTiܸ±Å:?ÿp 2zôh騩£4jØ(lÕ<Ð(œ_ýÕâx衇ÊñÇoÓ¾üòËûµ1ˆgˆ¢‡^ýu;žÏ;ï<ûûûï¿—Å‹KŸ>}¬¢ŠÔ?|pï\ÆgÇ:BÕK¿ÿþ»ÐWŒUú6? ﯂ñH˜°uëÖ¶Ý<'ôý Aƒä’K.±ß:‚/ž+žs¼D](§@/Ýë.Æ ÔG$büa±/_¾ÜŽÉ-ZÈ”)SäòË/·™~ â7Zù‘Ƴ|Ä;öüñG+0¦ygoñ’Å‚çüàƒÚ°WζûìþùçV‚=ãáÿû_Te’2«¹°.bù õvÀ BáGG3Øè€yóæÉ?þñ;(yà¡~ýúÉ| kÖ¬±}Ö¬Y‚‚˜ðÅ{Ÿ=}útûÐÛ æs \Ãr‡pù=aÂëõ0Øòå²Ë.“÷ßßÎ?À–×DäááG¢¤)sذa–?[h ÿbÁ*–4ðÆ€9ꨣdó–ÍöÃ` /1è“O>9JÂKÙ–³MPžà:iÒ$ùì³ÏlZÚLø€6ƒÿá‡nÛ÷ØcYáNaÑ¢EÖ¡켤Gx@X±x*­Zµ11]¼N„÷W\!uëÖ¬-( •†ú0

    "Š£‹9F+Ö<<Ó_ôXGâž‚Ê'¤ñìñŽý¥K—Zo¨gÍê5ö;R„ù˜+ÍÙšcsN;Iǘ&-a0È©û“g‚À£àt!¬Žë®»ÎjS<þþûßÿZkŒ°7¡æ H‹¥Ë€@;ÓÉO?õ´t;¶[\Íe`}öÙVId¯Ë¶ubñ8a{ÆgXO‡:X:u²^Vz·nÝd̘16vLÇæ1h "g©yëf p}ÚôiöayôÑG­ɵSN9ÅZ²´Í×°–°p&Nœh7¦DÀ£°P´(/Š7=V+V GâêÌŸ Ìá‡zË–+kãÞ„”xÐxò›0VP´xux|^BÈ HÒ °ùðÃmÌÖÛ6<^B ´áŠõŽ1²lé2;vQÐ`ȸB˜EêêPòSòB„8P$„¯¼òJ»Ðžò“PŠðœWÆ m=òÈ#F"câ¬â%êâYþPJ”yóÍ7[#œƒú¬Q¾<òˆUŒ=ÊÀØGG‘ø60|#gÿøˆwì#wØAcbN™çÑ)®9… ´ƒ¾€¯C9ÄŽÒùi_Ëýw"ü¦“Atj"éšk®±!—#F¡@çáa²áíÀÄwû|¡ P&¸}nÀÆÊ€ßu×]xÂ=a&ý!æ$l„x°b a5×›‡ˆ[, …—[¥ðp˜X†|ÿ–.Yj= âë @êG3 9¼C1 «0ü. Ö.ƒ™P^^ÓS/y]~0eÒë‰%JóÍ­K^¼Ä^e’(¬|„ý _ŒÂI/áíxåÈä>cŒ1 o„œRqí£pÚFè•g„eˆ×G_áEsN™`ÌüÆK´þòS'9„÷ÈXtŠ„þÌoB ¥ý´÷Øcbö`åmåÏ‹‘»¿œ;r×Ië'> NÖ P"È LŒh}„²aìcˆºgÐk¹S§—ÇÇhå7lØ0p<»²ò2öáïs×î]GÊ#÷çÅÊyYà.| w϶?cJ¾¸•‰·²Dž;€Q&ƒƒ<þxxî2žùÓ6¡ˆáˆô ‡£H×yˆø CNPsŽq“ØÎJ¤x…@üyù±7"üK^ð ›GyËe=ñÄV0£ à …ÃuÈ¥åèŒ ”"ír÷P XÒî·ÍèÉoz—Ÿ#eºr ½áñMž^~ß´Á‘ÿ¾÷º÷×ù ž½{÷¶8º´”Ç|ÂY=Ë›A}ÄóëúÊ= ŒsGÞ:9çÏËo´1@9ÑÆ³+7–´^¾xŽáu×Î]–/”¸“WŽoÒpCØym´LŠÝgºrÝ1e”‰c(ÇŸ~úÉ®æ"v>jÔ(ÛñhYbÁ(„>ƒÂeuôÍ·ßØS47€cíB.$Ã9e8ò -,,ÈÅø9g¾Ëåá‡yBX”,‹„p½Ĉó“@(Q&eYä„<¸p<¡ ÔÞû(l”8¹PùÜ äòÿÞ{ußÿ}ÿï})ß¡y@YA¨‹‡Åsçε #ÂçJþUÂO„By9k°Ä v!ÆýÏÃê¬p—ž#« â¦åág\/VÜzb”G¹AýƒPpäÇ—0$áN„ Pýó._²(’Í›6ÿ©÷l1öÀBQãÄáæ£Jf•´XõÏ Ï†×ëÁâwßhc9,ˆe<Ç3öyV1&\¨ ~ ï3æ¼Þ(ãŒPŠÒÆ“öî·k«÷X('à±ò°´š•¬’âý„;î¸Ã¶IO&–±Ä™HgÒwÜiï39'Ä%fÐzâ”Q4"NN§ñp“‡ú™`åE0A¡!À6ðÅRE,i¯…Tšˆ?ê8ýôÓ­À£m64bÆL¦·oßÞ®Va²›ÁÅ*ê% BEƒwá,4Êã!ó:Ç+÷!ïýxÓ“üxà ü·ß~ÛZ±ô• cbqƒ§«;ÙGËŒùçêÁ3eþ„9;G-ðk.á0Þ‹C°ð¶²ðrè”mbÜ’î—_~±á„^PPÿxC˜Ž?ŽœxV>þøãgéM—Ìs‡ Çpõð2e…ãƒO þÂQ¸²\ŽÞûn1^_´>ÂdŒ£ ¬+3¿Ñʧ?ƒÆ³w|Ä;ö1°Y!‡ÂƒwŒj<Vñ1~Q<ãŒ'ƌÈëÉàï®ù…Ò3V[ð"+¶ bVpõíÛ×þæ&<b×üAXŒXjŽ˜(EÑ`‰0)Èd3öA„åÁzuêG C(·§žzÊZòL¼b9³(à…^ÝÇkÇü&„ …ÇëBVĬ/¾øbÏÇCé°ö!‰ÐÆ#¹à‚ ösáó‹w;óPXTXX=ô´”ï1QZ†x¿6á –•²„aÀþ·¿ýÍ „Cµ aG{ÜL¨†)G” æ@û‡pŠï£>²Ïu¥1Y BxÌx–°Ú½ÞÖòéBÒ(”EP¹À äYày¥›6k*+–¯°lDã7Ú Ü4žÃXÇ>ólxì($¥rñ%ËË/½òl)Ÿ±äBsm´‘ª×(±xþ1&êˆ! Z‹#…¹Ø¿§œ:Eà;—?ZAhUB±’[bÈ` ?ï´‰X4&á0?Ñf “l±òItá :޲vå£å±°.öíî.Δ.Þ{X§( Ú‹B[ùí<W¿Qؼ(ÆÄX€gøD!xq便m\£lÚèúž¶ƒ%a /Eêêd ;üÈãú€çʉŒ0uõxËNÖ9ø¸~ŒTü’¼vîÚ)%Š—°ž·mŒ=;½eÚü&¯l€%áÆ&ý­¸O:êbá J˜Hƒë ~á'ZùAãÙ?>‚ÒzÛÎØ|üñÇ­± †Ž(o‹öóŒÒ.×ÿxÍÈ1^øöŽ—× ½2q -LÇd)‡‘{¼ƒÍÝãÈC€‚D ;¥á½ŸŸçðâ„ õFã=?y‹¥.‚¥Ÿümóßô;•ú'rÁ—Ÿã.ZÁ«ÁðêYší”‰kc4~ƒÊÏþñ”Öñ‘ ƒ7Ú½Ï÷(lÝuŽ(^ÀÄ3ÆpŒD)3g‰A½žÿ Ø")¸a€q??èH(¸AïîGãÝ¥K•#8†S$ðço[¬<§RÿÄÊs<éò{ÜEë#ú!ì^Rô·%¿AågÿøJë剗jyg¯ØO”á-„°ÞIz>~§Œgâbxá˜ô^#„O˜Ë›·°œã™Y…¥ÚE  \M8Ý-÷OuÞ™ÛeN¥Cˆ–ðiÊ ø ë=E@P’ó ü¥ Å¢Hh sYüE£˜” ±¹dS4WÐÕOü·8c&n(+^™ˆ‘¶YPò´›3Á$Ô•©ÄªüP¯¶[Pò†@Lž‰·h&š’AÞIŸ ò‰Ý!PÙÒ€ódñÄCAÜÃ#¡Ý,±e",V¼ ‚W­SP2¸•I*@„eŽ2qï.¤OùÁíF‘Ä¿Ì~´E@P1+<€ ·]ùqD˜²¢IIPE 5ˆY™$›] Û$a-_Pä!vðɃBKVE@È+ªLòŠœæSE@! a®z¢(Š€"WâR&¼0è^šËk…‘ò黑Ñ늀" ¤>q)“d6‡)•E@PÒ”Q&[Í^úJŠ€" (é‰@ÌÊ„0ïš$ëóðÞLOP•kE@P2 ]Í•i=®íUE Äì™$¡îý‹4\RRE@HORF™øUÉÌ™3ÓQå:fZµjsZM¨(©@Ê(“p0qÄá.ëµB€Àĉ A+´ Š€"àHe¢a.×'™sÔ>Ïœ¾Ö–zRF™øÃ\…ym hŸë P )£LÌמ ªÚ’ØÐ> 'M¥¤)£LT•¤ÁhI0‹Úç T‹S ´~ÏdÙ²eIû`ßWÙ¹sgvMøª“ÉׯMí§Ã×,’²Ÿ Þ´i“ìù#9¯¾Rn²ö¤‹„u¬×ùP\ÐGërrr’†K¬<t:ú/£‚毰ԟ2ž‰ì‰]|ôÑG2dÈá­|«¾þóŸÿØoÂuÌèÑ£åÝwß•Ç\Þ~ûm¹ì²Ë"&3fŒ|øá‡òÌ3ÏDL3mÚ4¹ôÒK¥bÅŠ6 ÊçÐC•x@Ê–-1ß܈…¯¼–ËÍ·È£>j³7NÞ|óM»ãÁ)§œ"'t’L˜0Á~*ù¢‹.Êkûç‹£Ï÷ϸï×¼ dÊ”)Â&¤|ʹN:Òõ裥¸Ù­!ˆ-^,³gÏ–îݻ˜9s¤UË–“/1içüö›œÐ£GÄ4ú©¬_·Î*Û]»wK‰â{­¦‡4“NG1ßÞøâ‹/¤{·nÂó³rÕ*™ùË/ætmOÚµeé’%²ËŒË-ZhU É¿pÑ"yèᇥ|ùò+”tÓ¦MåÒK.‘R%K&¤!ÓÌøøöÛoåꫯöß ý^¶|¹<ñä“òðƒ†®qÂØúò믥ÿµ×îwÝýض}»|óÍ7Òã¸ãÜ¥Œ=¦Œ2ÙS$¶>àAyöÙgeðàÁR·n]ùý÷ßåú믗×^{MúöíXȱÇkÏf³Ø«¯¾¨L òܬ^½ºŒ5Ê^A˜!x?5‚åœsÎñ¤JýÓ#FH³fͤtéÒ²È<ðwÝu—ôë×OÚ´i#wÜq‡”*Uʶíì³Ï–SO=5¤@¤e±öy¤:þØó‡üôÓOÒ«W/)W¾œälÍ‘Ï?ÿ\~5KZµ~‡¥Ž;5jÖ”FÐN›>]Z´Š¬L\8.ˆßÞ§ô¶l®Ë^'#GŽ”ó/8?ÄvìfR(KL' ,”*UªHÑâÅdkÎ6ùâË/¥K—.Ö@ñŸ|òÉÒ¨qcùä“O¤Q“&’U2+¦r“™,áùž{ï±Õlß¶]î¹ç™8i’t9ºKRªú.¨ÿ"õqËÖ­¥‰Qv‘òælÛ&cÆŽ•î=T™¤Œ21¾xL OdãÆÖ%C5äÎ;ïÜýþýûË%ÆÂ9ì°ÃäÖ[o•ÚÆ2ãf’¬ÇsŒü Œ5»aÃ0`€<ñÄò¤±H>þøc)W®œ\pÁÒ§OË õ\yå•ÖrmmV{VVä²L™2RµjUë!ñ1eÔ¯__n¸á«Q4P·nÝlýXLrøùÅX•XÔSÒXiñòõÞ{ïYPØ_þò¹ÖXS¸÷à3ÝÌFYѶm[˃÷ß°aÃäþûï·—Ð]»vµ^°Þ¿4‚ª‡±Ìñßÿý„(âXûÜ˧÷|»y·™?k‡˜ñSÚ(¼Î:ÉncpŒ÷¹ðR$ããkc9–3žbûöíe‰±ÔW¤žQ& .”õwBAã?o-üÉÆýÍx!%J”Ö&?V3‹C¶ t옱²fÍ[f7c˜à ý‰Ü¢ßxža^Â¥\rÔ õ`É;eêT™;w®”7c¯R•ÊR»Vm©_¯ž|ûÝwò»ñ4*U®,mBg\ùiÆŒÒÕ(p\°pT6iñF šFQ®Z¹Rš%R«v-™kênà}ùËNÚoðá/Ÿ’æyªP¡‚õ$çÎùM~4ÏÍÖ-[¤ºé·ÓŒÑ‚ þá‡,;í̸ÅX›mŒ…‰fŒ’O§Á³Ÿ‰27}ÆóõÝ÷ß[ãç8ã-téÜÙæÅÐø¿²téRûô5Ò‡(B¿ÍŸ7O~ž|¸~øáò·+þfÃqÔóòË/Ë;ï¼#„ÜæÏŸo"¡+"a¥Å&¤B=ñòµÎ„Xžþyyúé§m»Æ/ÔO= vÚwá…Ê /¼ào‚ 7 dy(¡3Ï<Ó† 9§}à‡"Àñ;#è"ýqþùçï÷Gh1yû;/ç%ò8äCäŽkÂrÓM•Èʲ‚·œ £ºØc„Ärs$¬EKL?Ò÷Ûñ±Éà‚ÒÄC¹¯[¿Þ ‹ÓO?]N0Âbª c²"ß*#ØQNÜc~f…Ô‘x¦­Þ{X¯x{„ {9Ïôû3©ë½{÷–Æš3{ŽUŽHŒ£ÓÏ8Ãðá-sÚµÞä/oÚÂï ë7Øv¹tè5Ùkí½J+Y,ܽ‚>n6Jà%óð÷ð#عÉö&Á¸ýöÛmH‹ˆý ñ¬üñò¯ýKV¯^-³rõã@:ÿµ­F…‚árÛm·Ù±2ÊFÑ:™€žÍ†Æø©`Œ†$kŒÀç9oož#ÛGæ™`Â߯G3ó,P&ccµñN½8üa PKþ¾ä·¡º&?slF¤½Ü„€CùI._†]KeB—yÿèŸpDXÁ c"K˜‰µ¡C‡ÚÁÉŠuƒG€€þépûÐáÑ„#p¬8G•*U m³oîÜLö>òJŒ¿3Œ%I=÷ocIDATX˜9ä-w–qͱøñp˜‡p^é˜p„"£žxùÂú&4ƒõÄ °®Q&o¼ñ†Ð®GyTþnN?ºñZL µÑ&÷%̬Yûñë/ «Ÿ›#æŽà+yû;/çX¢sgYÖ(ÂæÍ›[ï‰'Æa¼ªåF(æ!4ÅÂ,i G®G9âqÐŸŽ—,„uîD>Ɔ»nÇ‚Iï~û”í½–m¼ÆÍ¢ʯf”+}áY5å»´(Î+šû'%³JÚ¹„qÆ£uiÜ‹ÙËž–»7DˆŒßE̘¢ܽ‚> !7þŽ:ê(;Çœ „!âø[j¢÷›…5kAаaCÛ‡î^‰¬}í¡}\g—öä/cúÌá[Ù„]^\èÜ]ãy»s®×4ã‡üá ?c Cï}wžÉÇ”Q&Òìô`ÂÂ'¬ãˆ‰o„0ƒ‚°õeãJwìØÑ%  …AÄUQ>ü¦>Â8/Ä`fnPŸðH˜e±|!üƒ(^¾˜„†ÿ‹/¾Ø†æX˜ÀüÒ+¯¼bC×\sUÌËBñü’Þ-Ÿ$Gˆ¼i/¡¬ÃµÏ›†¸6 é:çÆ¬½÷Cç °Ü&K;aÉܲX¹„-jþ°ö±&kÕ¨i½ ,\,L—Ö­‘`òãÍÑ/Xž; F„)ϦƒéXùõ¥e5ó XÍ5’C©PV£4»R^ޞЬ_µ^s%=WH˜eñ<¼õW49Þµ¨MYK+M~WÆHUãA‘g“ñJìŠÃXùOf:×ù¹ul2 ¦ OÖ6Âڶσý…Â9Ù'MÍ—Xy¾B0çâ㳉FüÊj6ƒc‚žÌ«ÙtÞôž:üe„ýmÒaB½ÌŸœdž³ëqÅsÀ!½ëƒ°y}<æ4)3F…NÄ­™ÇJ@€bm2p Üf‚ k•Hݺu³÷Ü?&eÉ{ã7Êÿû_aòKrÓò‰•xЙØw„ð½ûî»í¤½»Æ‘x9s#mæx°ü™û G”_„ǨeHùLÀ^wÝuVIsF0N >ÿ";qk„,á.pC¹âA¡Ð!«nxˆì¤´»æˆR'¼G8(ˆbíóHe`-ÂËX£üè;ÚQÁ¡ìÚ¦MkŒU[ÁxKx›¿úJXÅÅ=÷WÊx)ðû¥¹G>¼,OÊa1“´ŽOïÑå÷óæMãî1áŽ1Á¼Ka,á¥7Åò‘éöæw¼ÄCð³@Æ T˜gs–ãïš•›ÿ8ÐâÆØÄKÃ(#KçÎ[Åó¹™+¼×„tÁ“hýëî»ôÔë®9øÍ\ÎÆûp„@Ö@”Í ÒL™Wû26[ÌݽlžeæO2™Š«Ì‹q`µLœØK„/ˆ©“Ô„¢P ñÍÆ²sŠƒø:$B)Y„°³1{c¥BxÑn¼|1G”½6[š°€—°Tb„RÂÑ‹/¾hç{XD„{ì1ëy¥‹vÕn›9¥D!-ÆŠ!^²´ï†äæÅ@aþðI¢ˆ:ìx3 " µÛ%êE) üX,Ñ¡Cëe†y„a¤1ù‹ñ`𜼫óàEè 2Y|LîBÊM'Bù²P/W‘]˜‹iPº¼Ü[m¼#d•wœÑ·,ÀÈdJžäŒÕ¼h4&¸óJ„Bœ"¡ ,ùdBPŠ£hŠ„tñòÅd?~Âú "ÂcxMXµ~ÏÅå#„GˆŽV"(/}©^,D(Oeá[Üü¹¼ÄÝó\–ÍæŸ)¿¬p®„ý#(?7K_±¸12ðBÜ<%ryìÏ?Þ Âãii¼R7çåçkŸù"g¡{²§Å)sy/†‘ÀœäòDJ——ënîu¿²QÞ¹P^Ê,,yRÆ3!ì%ÞlŽæ™xÓëù#@ü¾|…òa•¥³¼’…‘¼›x8À3ibB1™NL¤£HPàýhoîûñÂÛ!Ü ¦pDˆ -ÞrÕ¥× RÆ3 bRïå(Š Â‚VJ,eŒEÛø”j´m{X:«¤ä)£LrWyçG›µŽA@ûmOæ"2ÊÄ¿-zæv‰¶¼0# ã¼0÷nf·M'àsûÛÎݲc×î ©ÀC •+Š@Ú" ÊÄtÝ>\ g>8EÞþÎ|ʳ€è@xÈ1Šð¹±ËdÊ"óÑ%%E@P ŒW&»vï‘g­“ÛU’ží‚?攬þ9P¶ïüC>ú~¥üºlK²XÔrE@D eæL¹ôÜœ´`£¼0z©tjQY¾ž™-eJ“Kº×‘W¾X!«7l—>G×–Ó«.~¼PVdo—Ç.ij>áZTî|g¾ùfE¹ý¬ý·=çúŽ]Èü•[åû¹›ä¤v%d )âo¤D±"Ò¾I¹¾×A2mñ&8r‰t¦Þ_²%«D19¿k-éb”ôñO«å£V‰ÑMÒºayéß«ž<>bIžx8¥CI2a¹|>m­1ewm]E.ï^›/º†åí!ÓVh¤á¡nÕR’eø~qìRù¿SJ‹:emY?ÍÛ(û5—Ÿ ~ÏŽZ"½:T·é¸°™åÝ_˜))Š€"+i'16çì’%«sd²ŽšT”¹Ë·È}oÏ•VõËá_T†Œ^bç>Õ(#s–n–_—æÈº-;eÒìuÒ F©?áÒóÐjöZS#t[×/+ßÌÙ(£ŒP>¡}59¾}U5iµ|;gƒlÙ¾ÇÖ;vÊéÖºª¬ß¸C†_nófoÚ)Ï\l¾QTŽ1‚ÂÔ5F@¯•¼òð«iÓ»_¯ÎÍ+K÷¶æS¬ß®”wX‘·ãLPsƒA“êæ£KÛv˲5Û$gÇÞ9 5›vȲÕ[mšÍÛöØ{CÇ.‘ꕲdÑšœ°uÙÄúOPH;Ïĵë‚cjË‘Æk˜0}4«WNþÖ£®ùÌjyÿ›²ÙþãÛT–aã–E°^êW+e¿ºÖ£Ueylø"Y¸*Çsá±uäÈÆ{¿÷@šFÕKKm#`ï:¯©Ì1}ê‚Í6ÝãµR{ï×÷ú_Wºµ¬"h”ÎÎ]{ä‹Ùëmù\ØT*—-!‡™2³Š•š³òÄÃ3Æ3Â+*™µW×—*QT~0í¸ÿ¼&ay;ýð½_>lT£´Ô­RJf-ß«8VáŽýzd=¸HuõéX#\6½¦(Š@XÒV™/¶·=|n2º$DUŒPoÑ ¼Lš»AV/âàºe­ ­P¦¸T,··Ù%Kx2äæ7c 4 §s«*Ò±y%™±pc¨LNʕޛ7·J{oµ)*•+üëV.e¾Ã-’W–fo³ùwïÙû¾t¯#jHµrY7Ë„ùGÝÛîŒ0žŸêUÙû-øHuùÓëoE@P‚È;AIÒïžSÝMøÇ†Ä~[/Çoº¼{]¹·ÏÁö¯ÝAþ ÝÌ%›%sCïƒd§Y% uü±½îÿ‡…ùøãK8>R,É>|¸¼ÿþû2mÚ4+Ô‚ê3gŽ|øá‡òüóÏË=÷Üc…ßܹs÷«ö†n°ó$ÿú׿„ƒ¡T´Ÿ~ú©T¬XQn¹å›>''G¾ûî;+L/½ìÒýÊj_P›¨ ºï¾ûìüQ¤¶{+‹µ?‚ê¥ ”&ŸiFÁV¯^ÝâN=AùPxàtÉ%—|èС2sæLË^P?ÄÊs´2"ñìűT©}¯>xqKÌL˜·ÄžoØðç7·X¼¥ä;'Ÿ|²ìÚµK7n,S¦L ÕÏDùÝwßm…îá‡nçð0 |PæÏŸ/Ó§O—5jÈu×]g¯ß|óÍr 'X‹û›o¾‘&MšXËž›Ë–-<?î!žŸÞUW]%>ú¨ìÞ½[˜ç(W®œ¼òÊ+ë]ºt©0±¾yóféÚµ« 6L*UÚ»“¶«»AƒRļÿÔ¨Q#yõÕW¥yóæ‚¡hhBBÙ 8PªUÛ»«½hþµ/¨M 6´E€7ÞQ¤¶»zÜ1–þhÖ¬Y`y,6 OK”(!}ûõ•»î¼ËÄ/íìÔ©“œuÖY6-ž˜B}ôQÄ~à~,<!ʈijÇ¢E÷÷A+(È”V&uëÖ¥}JŠ@¡@Á€2ÁÊ®\¹ò~³J•*¡UNŸÆM‡ÚÌÃË2Ë’%Kä˜cŽ ÝãA^³fµèÛµkºN)œ2)S¦ŒÌ›7Ozè¡°|\xá…ÖëA± ä¡ z áŒ;V.¸à+è_]{íµ!>ü'(¹V­Z….תUË A¼2ˆzýŠ„ëx,‘Ú­Mä‡bMGÚXú#Zyx]ô%T¡|«Ì8ʇ‡zÐAûÞ‹;ì°ÃBÊ$¨(7ž£•‰gÊDx}„USZ™Db^¯+éŠBaúöÛoÛp’k‡ßÚs×½G¼„C=ÔZîî:}ÕªU¥víÚ²`ÁwÙ*€ÐÏ a,Âk/¼ðBX>=±)«¥~üñG9òÈ#­w©^Â2wÞy§ ]?Þ†rš6mjçP<Õ†Nñ¼|²º+++ËzjS§NµL(±ç$¨}ÑÚ䊉5écéhåE*#Z¾Õ«W;–mèÓýêpŒTŸËÏ1exËãœþçoÅŸJ+Š@B@‘àM0ÉïNFGu<ʆºÖ¯_o­ùqãÆIŸ>}¬Á‹˜Ö­_g=–›nºIðP„†‚êE)ÞqÇR¾|y;¿Ò¦Mñ C?ðùÓO?Ù¹îŠ*š j_P›¯A´#(M翼–”,&Mšd%:bÞQP?¸4ÑŽy-Ëc¤:Ô3‰„Œ^W’€±pbæ=zô°“Ü#FŒ°žE,UuîÔYN=íT» KI×{ï½×fe¢uëÖrÊ)§Ø0QûöíÃÉ}„ãå„¢éÝ»· «¡X„r‰T/ó:Ì© ìñ 3Ï<3lÝ\d¾¶mÛÚps<(žÇ{,bzw#¨}Am"ìÖ¡C»2й‡Hm']¼T¯Ã"\™AùXÅÅ”9ÆFË–-CáÏ þWO¸ky-ƒÅÇO>ùÄz8þòSz£Gâ¾JŠ@aA`âĉvN€˜8±tBT™ôŒ‡˜#aþåC±Š7/á)VÛÔ¬¹w×jï=ï9ó&ñò©^¬~ sÑêu<À?íG¡¸yw/èÔ¾ 6áuU®´wçð tAuGº—×òÂåþX¬€70räH»êíÙgŸ U©B b8Ék^ýÕ¨2ñ#¢¿$!€2Ñ]ƒ“n!)–¹óÎ;Oúöík'ÔQ"ýúõ³ï¥zuÎ$Báb&b –_ûTRE „/ ûá¹a|ðbª["-oAß/4Ê„5ØÄ¡Eï¼óŽPŒµ¼Hõó1/J%ŠX…Ö¬ÅWR‡s¼ÈÉ;*‰”iÉFªÐ(“d• åó¶1oDzmÛo()Š€"*¤2a©1D^–âKŒwÝuןÂH¼DÓºMka™"ÛQ8BÛ3±Åª¯eÏË]¬áVÞúuÄD;¯2QÉ &!ÒP yä—³»L[¯(Š@ê! Ê$õúD9RE íPe’v]¦ +Š€"z¨2I½>QŽE@H;RzžuùJŠ€" (©@Ê*ïNÀ~_{í5»™c:u„½¯øo³Y"/3®^½Ú~÷cðàÁv3ÇpéyKý¡‡’§Ÿ~ÚÏöðl¥Â^XŽxÙ‘íæù ”- !C†ØwYØÅ÷Í7ß´o¹³E oÎwíÚUÖ®]kßʇöô‚"¥µ7=ÿàgÆŒÂ6úlX9zôh»zmÓ¦Mv;·q¤'Khv涘aëÞ̇¶‘©U«–}ÁrêÔ©òüóÏ[þƒîÅZ¾K «¡C‡†mËÊ•+åöÛoaÌv8¼XÚ¿[4ßoé}JoéÜ©sD ÁkРAv7Þ1¢/øôéÑGmËp;$„ÃŒ‡n¿¥Î§(‹±P¬X±ˆõ¹6ëQPö!²oÀïc1ü›;òÀ—+W.|ßÕxÓû²Gü¹ný:Y—½Î¾ íÅÂXÓ¢8Ü‘¼åÏ_l:I{#ŸùäåLÒ Lá¥dÉ’69›O–*]J*WúóK™A÷¼u•ïMtk[‚ʇ!ŸX¸p¡\wÝuv_5ppJÜ•Žv#@ù¸—UGŽ)(·Ë/¿Üe“põ…nê‰" „H[ejžd<O<ñ„ÝÆŸ}Óâ¡1cÆX¯=Üð&ù ^ ^œ’" ć@ʆ¹âk†¦Îdš·h.íÚ¶‹B’ACüû¶‡õÞâ.X3(ˆ€z&ØéÚdE@P€. N4¢Zž" (ˆ€*“ ìtm²" (‰F@•I¢ÕòE@È@T™d`§k“E@H4ªL¨–§(Š@" Ê$;]›¬(Š@¢Pe’hDµx8ŽG f!`±’gÖ;óÃóÀàp85‹Ý5¬KÖ¸i4 233QPP`U¹š]IJÙhooWWWØÚÚ–LäwŽG š°JÉ[J#SðÉÉÉðôôD@@¤R©¥Ekl>Öç””áh)Wò5–œpŽÀS‡@•(yfÁ3_¯^½§°ò:Ä;ë¯B¡Sø………åeåñŽGà±!`•’·Ô]Ã\4Ì‚;ÄN"YŠÕ³ˆï3G€#ðø°xãÕ’˜‚{\4ea"‹ùuYÀð8ŽG Z¨K¾Zzò„5Ê-ù'Œ!œŽÀ3Š@•XòÏ(–¼ÛŽGà‰C š-y-bOîÆÖÝH. #šv®yn0^z¾ ìž8¨¬#¨*,ù¬„‹8ô< ô¶ö¨‚ÐÖ Qýg—tHˆ¾€çFòuµ¨Ç”;5&ñÙZø6oÚöæ*qýÌ Hüš# d‚y¦Ç~­L¼ŽëYŽhÛÜb [W?¸ˆýç€ú¶.!ê|%tR'Ø—ªH¯V"5+ÌÅèàê^”þàâA\FKôn]Ç–+/ë÷$$i&-dnÐÌjù2Èfn­fhæãh1¡†±vÆQëáÒ0¡¡KÉŽÅÕUkƇ |5•ª¸ôØ3w > Ï,Ñdľp,ð]¿¾ ï)5ë¦R±‚Ñ¿ýŒ-§“drgˆ9ˆ½~‡´ÆëoG]YuⓇ3›Ãq®ùX|õª”ñ§°,,ƒ¦Ž€oõÏ@d=ä#rófD±‡¶/è0gr[èM‡Ÿòïagx8Ôíkaö°FPkM eã™|z+¶Äøáµ1Pb®(;û_ŽM:·;O·Bë/@¬¢I½Â𔨷l.µ˜€Q2äæÒó)¬Œ.‹¿X¿±30¼© )c"°pí!˜žc×CŽ^£Æ£WóÚprÖâè**8 ¶Ú [®Ì Içv!ü´¢Ì*õm&à«nPite¦—©Wá"ÉæŸ!µðñWU 0ÜØ· N&Õ™ÆÚí„Xœ=&MEW§2›zR#­Rò•Ù‰‚[ÛŠ|Èø0¹{}ÜØˆ¹kŽA¿ÿ „ù#Vf“5¶®ç¶ ^Öà9¼ýúPÔ£Wéi’¼q`~Ú}¿Fv»=} ©XTöèùúôôi ;ò´™HN¿ {79lséHiµÑUÜ]{6.™F‹Ûƒq-ñ¼¯Ä ÉŠ•уÜöt*ÊÁÎj¥Ií—5¿ÒdÞEú]wÔr¶‡:'žÌKZw-‘Ь-u†#)lJ>óâï8­’còˆ`HD¹Ð«Òq+æ6.FD:5ÝÜEG© Qœu‹×‚—5À+SG§àÂ×lÇÑMah<÷mÔóïŽ^'±vÃ|>±*Ô‹Öu푹%[’m;Œ1­]±BËœá UY§ä©5‰œ,q{Uð÷ÁéÍ_·¦¿1õeÂI¹ä‹{±`åïØ¿r)¼f¼‡bºÙ¡' Ñ*%_™Ö©VcLCðÙÛ#áI`´oÛškñep7=Çv,œ¹kgŒé>~>z{€P&vÏ|½óš ~ïôoLÚ¯ÎFØU†¼7ýK ÷wíÑo@+\Z4÷-ÇÒIm‘uó¾þlN'²¶œÑaÄd¼5¹?¼=R±wÉ,X¶¢Zð é†OÏ7±ÌQyX=ÀÁðëDOS¼ýîPÔÕ©¡ÈRBCcµvûþèy W™þõ¡WdáÒ0üv2VÐgN^-0hä4u·….å~Ù߯H?s×3DðjÑ;ºâÄößq#S©[Ƽ6õÉDM:ŽðÛr„6ÊÇþߢ ”¹!¤ï`á&ví;‰ bŸoûáG˜J¡ÅíÓqÏßÎÞwñóš“`/ÀX=g>ºŽ‹6vñعu®$+©24 Œa/U©%lÃû­z£6fnÀcËÃüÙ¸0íEilRчžÌ{Æ·ü¤‹Ø±å €‰L^û Às­¼‘HVüÚ“ ʉϿÍE&yø#ZŠ‘S†À›\! ³-‘Yè5öU´r ˜¯Z…vãÆ¡§®\Þ@€°•ûáÞ.)û‘ÝêUô5v@Ëè£ÿxªû·È8øö­Ùh1¾ýìZO@kGšd³ G«©u[h ã{tCè_j”1ôÿÞB(ydòs]0zL >[y±É"4¬c‡Ž/vÁÑõaˆÖ´GS›<#S]Uù͸!¢±èê)'7I¶pRÍô:½F‰,u!´Y·°{k8Î'/Hž†ôÆ~á*ÖãÁ¹pl¿] Ýüع' Á¯¾%KÒ*†ñ7 [·âB¢úO&Æ ¢éðØëRK|4c$¼„±–IcZñë„7Ǧã›õQ8r1 A]eˆX»·ý`t¨¯PƒúÁ9¬Y{ÞÀïÚ´„Õ=@į»ðÇ•ÈähÖªúõ5ÐÉd)춦Œ5ŒZmžÞ´ñ†`Do¡¾òäÐD¯¥ßÕ·ñªQi Ç”©³±~Ï1ÜLÈÄ ÏâìÙ³Ø>µµdþi¦àYdÄšYè7~=r‰qùÉ'…ˆø\C}"-âÀ™3ÇGKMÓ}D8æÎ˜‹ðxà¶B eôzôý>öEÇ ¯_ÈÌŒ£åî'ðï_Q%6¼ÞŸ0ÏjÕg">j'fŒ=±´yð8C~M7€K÷¨GÊ47Û àÈâéýæ|ûQ8ID8¿i¶“‚wïУGö†8é 6ü°7•4^r’‘‘€“û#Ã;š¹ åʬX†ë6¾èÚ©)ÔÑXµþ4@R¡Êº‹äضçõè‚68³ó¬ÞyòÀ.n艄¨í8Lxˆô:¤^‰Å•T-h€Ê >O//¸¹åaëq%Ã}FŒ@¿OÜ<†•'°fkÐ׈·¦ô&%rë÷ß…-Ó|¥ 2uÒI|µôWRðä¾:Míï!bûRl½œ‰]-¸‘U‘>õêÀÛ]„Œ”óHÉs¤ºÔ¸zî23îà*ù”íˆb¢pO‘OyÝpeówåò†-1’’±g?®kœáãã'£›‹yá"Ö`ÅžóÈôê‰!=ÉVæAƒ;Ô«ö]¡× €”¹}À|:÷,ül \ˆdó vöEËÀžò£€Ü~ùj 2’Ó„,ô½–C {ÿÆp§˜sײ`WÊ—o^WU\ëA2Ÿš¬´Lal²ß±ÈÈÈ…Ž¬ú‚;X¶`-Α7¥ëW0¬{=Ü9³‡¬ì“P?óÒHn£#Œ<œ ®›°?!1{Vý‹çã0)ÝFý†"ÄËR3!Ôç§!‘*qî /k a¬ƒçÔ¸-Ò´’på:t2[dÝIÆ<2l üÐe§¿IãÒ^’ð¯ mt€¾í\p#Šè\w:¢S‡Œ»yptv(¬¾›9"Èí¥x”Z‹yµYòŽ­‡àµ åXMV )Ðùôo íGÍħƒWîI|±,Zˆ~qúÌÛ©G—`è{Ë ž·^B^lî%“™ßPéâ{?ü{î;èØÒ{?Ÿ*Ô+"ÿÿ–ÿ†nï'xå³ýÀÙEˆ¼ Áü3Œ¹~ødãZ i’ ÓGcþ±LÌ_÷'úÏê!”}ÔG¥Yò6b8’’­— P]@g±ÐÚ×A‘™NFÃi„ßP£~Ÿixw` i¥ÔÂÛ/Ü…çR0ÕßP®îsÿÂûCšÒr>÷Þ_ˆûž½1{æÔÒká“>›@,w ‹Ç e½;}ê“7È->ІßÅÛ}êC—{W>Z‰«wr0"Ð…@¦?¹>ê´ÀÈ—R0çç3èÿú84PÝÀaò0°[TíÛ£–ÍRD*9ø /Wó(+'0Ó3…®ÌƒGó¾è»#V"ªÃ<´2³ä W#ê7’Z¯|øýè…Pwn‡ß¾ƒ#/`ÔG/`Pæ5,=Õ ¯~¢Œ3pÒ_ÁÅÛè’Š»IT”Ú¹{9ÒöÍKßpïE$–\W•Ë›–¡Þ8·‰™“»”zÜØ&¥ƒ\:ò Ö¦‰»õ(̘ ™V…¬|5å(ÚƒEëë&%×[iSµ dhhc•h2¬W +[Ï–xiŒä…*r­"áìšDn ýî@tAm컣 £s i° ñE3˜C`r'e"ìëÙ¥Zk‡³‡ óÔ!$ÈC?œç¼l )hƒºÎ«°h÷>\ÊìO£Üv7#È  å-¶±šòb±sénœL¡ÇÄ™ÞÆš<ú…;]1’ùÉ÷£.¸^ma¬©M8Q⎺n"2Õ(d;Ã2¶Ž°ØF$`®—ë¢÷XežÛ‡ó*ú½û5úÖ—A«éf+ðý®ß£ê­¶bÚ×5¬Öé¬>‰¤9ìÐ Z+øa•’/êk%\ˆDÞ˜ºæ \8ˆm;÷ ""q™¢6†Y2z9^pшhÐ}©½pâÆ·ç«øWÐ2üDºÿø‰Û¤ä-ã~X…I¡®$ð©8þÀPnò§ÿDC;‚aè§ØÝæ5äëí!MÞb¬4Û–|‚ZJ]Ž0lgž¿†,ô€eNËi+7'Y/¹$42²®Ê ´¤¤1OFJ–Ü´…/t*%²s)²V„ò½©¡—§ͱ¦A¾$À¹ÈRÚ£geË Rðd“»ÆÞâ8òaR{"0EÒ¾2²öȪÊ3¸×ê7¨Mõ+¥†#µÈ¨’˜½qP¥Ê§O=å#× £œjK<ñÞ>펦ÍÑ*d0^ôyÀ)Å’MEª®’‚ŽZ 1‘ßnÂŽeÇÐê­zdééÉn£ "J0’­†ÝkVSGh0SÓIVDvyd½Ù‘RQAD–²šèV¡Z†§®ÝCAÃ$$ˆ<б“=þYúÙ¤Çö2 ×,Ú;( ´GÃ&Ðqo½ MÞD–(éO¬ú=µkÙ"¯N)î#‡â¥¬Š$Ü')qfõY ‡lzcuZ̶,É^yyš |þTј>´ †áχ`ÌÜp¡¿½àëÛ´g™2ñíäÞÿîëè3ð=*ÁÍ LJßÝ4 Q_bÈ?Æ¥"ËûtB‡ƒ…Äè5Ó0lêtŒèǤè0°¯Ðä¾Es°óÔeÄ‘ew3ŠŽt­:ÄloÚ±o ûz-Ñ€(ŽüùgDÝËB~Nö®ÝF® whꌅQºsTÞê eNŽº€\*›p‰Ü‘¸Ÿœ‚ø›×hƒ=ŸéI²òÉB´ºò¿V Ôp¦JœÐcD¿¢ÊDÌ$W]`°DöáÇð?Éê‹Ãé]+±p矈SÛ‘ –&< ù0h?ãôÍû¤¶i€Öpg¶¨G{!ÎhÜÀŽÝ’¤-ùˆ5x=š7BîÒÌ•%¡Õ–>Ï„ñïìºíHW¬fÙÅRæSáî*C«‡ŠÂ½+ç…,ööäû¥çR¶…mÃÎßèxà#¸mtah³GºSjKGMµl;öñƯ²ºR»IsJ¹‡e?íEj.¹¶bNâ—_I#È» £¿¬h¥SšßŒwzµ=úŽ ʯ»IiíGüï4ð¡£û~š‡GÎ".é½hbQÆãF26ùsè^OF‹_6òH"¶âèÍÚì=‚%»o qìÿ}'a ,û:ˆ½‡;÷ã«o6ãò•TòÓR·±¥ôøõ÷+´Áƒí‹w c™¢)X ‡V çÒÝd-”Øleɹ˜'¸„bMØWxÁÏ ”ñW£‹|òÝ_û ëÞbÚÝ #¿ Ãk=Ø"Ьõˆ3ÂÆˆÈíE,Üý)Ò:ÄwèûøÀ˜ž}•‡“‡P Ô‡„Öý sG1mü3Ï °¥/Óé…&˜·c¾@›žNœD3, zLžŸÇ’Õ‚` N–æ±ñÁÿMŽ†ä ¼ppÖ¬Z…Í¿ŸÚ¹ Æ}0=ëJ‘¯ª…“‡ .ù“]þ¾ùþD¥È:ötò  *ò˳`KŠUÏÞä»e¾'_™wZfȧ'eRtMé6郃©<óÙÒ¤"ì°ò¬rúfÁλ1|éúò¾Õ8œ×#Cü¡ºü;-ø oÄ…LglÝH”-“'Kq*7õÕŽõ“YëfmÚxcL¨@³ŒüÙ,­n×±èßÚ±G6áÇ ±ùh4¤ûbú«­Éz×Á¹®忇°Ÿ– QGÚx¢U3U\ÍêËÉVˆúMü…:CÚ2¥_×#y“—«ÎêKаe”˜xAtÛÔÅHéÅbë¡8aÁ¼¯¶^„ÕæÛIñižÆ®–21¾³o£ øàì>ìÜ{'NàýGFžÀÝ\[áĉ:å®ànjÝҋʰ•!+ÿþIªØé%1¹ËjÏί'ƿرGðÓüoðãÆCPÚ`êôáÓ„X "žPy™©¼QÎe «Ï®Q t†êú6œdÛl¥ú$ñêˆÿ{ãea¬ÅœØƒ5Ë—ã·‹Ä9<Ù1%Åa,ÜzJ• ‡õ¢Ãžt|uÙX¶ýžÔgcÄÆ-¯¿Ü v©‘Xþã,Z³rÖÅØÿ‰zÄßnCÑŽæŽëûÖà{1î”JõÓ¸ÒÓ‘ÍŠäPpé•¢½,¼X¹ÚèÓ‚kñ/=xðÁÁKÙ‚ª¡LMFf3¥${zÃÕ`•(ª¤³½Ø’ÕâSÏó!_nvjªð¨¿«k©£5%jyø†µý@‘[{ª×ûáz³R¡ ?©]-ox:O×TÃÞ§¯TÒ¹ÅJb©ŒN„Ò9æG;Ð;ûÉJ³9ÙÈgç)ˆ¤dýѦŒZ+³§èYhr³¯¥49Ü)BM©9ì¡r»ÈÝÝ S+¦0l¬ÊänKéH]º¶f×,÷CåE2¸¹ÓÎ#mÄfoX]R:ËœžCÇLÉ_)st¢'ëJI›\ªäæé!7ú­²fTŠLÃÃ9Œð*6prs£Í{5ÇË)a™ }–Ù PèÃÁ¶6ZÚЦ>8І&QW@Çùèõ”*¢ О6édb(3ÒèÈ"ml»¸ÃѶî3„#Œ¶Ž.ôm-aýhÞÀˆ¥Ö,¿9/þb’ÑZŽ„'½Ž ƒalî]ŽUÇðÎ!7n’%—W7õ¹¬Àh>¶bv§wÃܹ/ÁÎŒ¦²òWvœ¤OÓ3rטڒО*_ É“··ì”Y–pZæáò9·%9Ïäœ\˜®np c®*Ú¼U°ñT*ˆé‡Ž ssH>IdíŒ2+)@ÔÖõHk1/6°xÀ6Kµ…’ug:JITÐoIˆi£ÏÄwv^"ŸöÀÄ2¸Õ¢ñJ’——eØ0†ˆdŽVØÚ9’Œ9®ÑB:MgOËa)’˽µJÉK~¡D™§’µFÉ—YI ŽdJžýxHÕÄd•ذµ,YXZr<e]æÝápjU¢äY¿™¢ËÍeo.á#Ààpª «”ò²óªoaÞ¬­9ëC4v(; Ô±XøéÏHD±òÓËðê›ãÐÒ£"bÊ©³‚è¼ØpÌ^-§³£<²*¨¢ìä¬óøø«HLûì Ô²Ü?¾ ’îÝÙP߯ÿfýŽqŸOƒŸ1½ìŠ_l^üq|÷Óä˜à—úcÔ¿&¡mE‚ ÊÇÖæ@=þ#ŒiªÃå‹Iðoç²–“¢<ìùt.Ôc?ÁÐrA”wŸÏY[L‡!ÔÆˆÀrdÌ,Ÿu—YØøÑWðzg6zy䬯ˆæƒŸÏ…dÒl¼àW5rh½Oê8!º¾ùtš¿ö ú74Mfz¢¹}Y=Õ!þÒ%ˆZ¡®Ã2Ê"ó1ÄY¥äË_eѨK;%(ønãßËP¥\Šï6à§ß㿃—U¤8Næ‹×'‡1.)jVk&â‹WÊ€FÅa#{Ä+D:(!Ãàiï¢ɈN›ƒ¨­‹±nÙAÌú°å*ac/ô:"L$-K1+ ü«¨M[àÓÿøPŪ¬Dܸv»»„Ú‘6ƈЭX¾ãf¿X~E-%ïSïñxû¹@ÈT)Ø·b6->ˆ&ÿ­{½]_›xÓôw°~ËŒ úÍËÒ‡²†þEbI¹xëðÚ»ïTþÖîÅ¿ÚS¦÷ƒ“F©‡¼Ürª´“›pѧ?F’‚/“WzôÛs~ú¿ 'Ó$øWü»åžÔqBt©uº’<2Óe1ÎmÜ‚üIMñJ9ÿß…¬¦”·JÉ[jÉ«rRˆ!r4ös‡˜ž’u¨ÝãÇtDZ\_ˆ£ö1µO$žX‡ÕWêàßoôsÎ5,ùñ,úOëŽ?ÿ“O`ëã*èð1úÔUbÏÊ8¯êî>fú7ÑC*ÊÁöEß"=)°?ÆL›€–î¤õM¡D@/CÚ. º Z5ñÆ¡ýh©¦øãëM™ã®¢þÄÑ9ûVo‹,>©G+¼2ik©q|Í \9Bƒl‘ ¡#§bpÛ:4]ÆÊ%¯¢fä;éU4"e#RÇÒ…§‘˜¤[ż1¹êPûyñg°båv$’Ë™â'ŒëoÇ<œ_‹-‘qÕ½ÆaBŸ@a’(êFÊ l¿ëMõÔ¦†ôH»]Þ‡‚”ƒ‡ÐGƒ¨7éö<Ô_ïAüfÕoÍç¥#ž:ÐÁ¿.lˆ>ûÚèÿêXäD@yu¾‹pÆ;¯÷‚$ñ¾]vC§OB \= —Á~Ø$Ø?mO`ÿúU k–ììi=³w67`Õ¸Û¼Ú¯!Ä2=Nl_‚è´$?ÝG¿‰þ-ÝMðÑ·-ñL8—湫iW`Ùú#$ hì‰\} ÆhŽèæt‰ÛyϽ1Qÿ”rxåŠ Ñ·ˆˆý«ÛšÂƉÀ(öÁè¢ üô¨ù÷šLAO„ú5€GÚ¬^¶Ý0šcüÔ¡ÈþígD²‚+W£Ã§¢aYÆK‚U>y·%ÿöuÛ¡1r°ò³0߉ÏâGÜ=|*ò,_?Ùñ'q;W„œÛ'§¯Cî®ß¿û6C1¼9)ë€~èØÀQk¿ÇñÌ ¼3óS¼1¸ŽoX8£¨}ºã£™ï¡{Öï½U’FR‚R‘¿®^µ+Öbù’ùøî@†t„œ:£Q¤ |Àð‰xÎû~؉à)bÞ¼™xÞá"6º#Ìm9÷‘ãˆQï„I=ÝpjËd"ë¾ß€Ì6/cæÜ1¤N 6¬üChŸÉŽw牘ùþDÔ¹}ײ W\Æ‚ÅÛá=ôMÌû>ºÚÇÂå'w ›#30îÃy˜ûÞËH>¼Gi0Ç:7õ)&¸ÓDÁâ½»ŽÂ‡ï½‰^Ô ¦è‹òº6G'YÎÇçÇ™ñíú8tøp‰ÿ;wï–™·¨N³òVÅ9øã¹ޝú~±›vÀùž58žµë '.÷ÈgzãóñǘԧÉÇâ.f×"öˆ„¾¨¯•ÍóôH|»ášz“pî‡Ü³Ws%9ñóJO“[ŠÈþdų6ÊåÜѱ.\ˆ+ÿÇÊ«'iœ˜ñJOtÒ= %dOT è ¥N«·!ÆÚ¼ys1¶ém¬]w톎@k*Я?ØüY¢l麞òû*±äa[“>ÿ/oÝĘ›¸y6‘Gw£ӫ˜Þ3„ì~Ä¥5Ã$IC' öeÞôhe‡-ד'½C YûœÛ8v’\.Lô’¯ UL; lYº¡]ÚbÜÛÿOR[f–KÒëµ³8ˆ´`oùT‰)žSxéY´É©ØYÙ°A¤¤¤@«Õ ýµ··‡Ÿ¯o‰¶„„Jù°G·‰³Ð2ñ®ßŒAÌ3´Z9‚Íî]1czg„`'bâR ¿™9­¾b¢ï"Y{ ðj[=.3Í.¦5¡»É…u“Ka1ušŒ6µ™¶+>|«ÔÎ6øƒñgt?ø9RŸ;õ‚lÿ6$åéÁØU:~ž°g˜Ù6CY<¿¸÷Á€ÖÞ´¢òÆð¡A $H=*äU^êâmxKYÆÖËâ%I¤dàd+ËÄÿ±òê 'r)fYy–<Å zBo×z"¤Ý€•ŠÎn>3úÕ…ÔA gï’:Âjª¸ÂgïªJ,ù¸£+±to¼·@Ï~Ã1åƒy˜>²Ò"¯!‡\œÓqh/YÂ~/`Äà–¸vô^•£SKï"½ÆÆ†égJLã„y[صž†XLw,‚‚–¬A/–6f˜gÀ¾é‚MÍÚ·AP›6hݦ†OCΤDß7Xt¬–_K.‘o—oÄ™ûJ¸4i¶¤÷Y–f …9xèÞFl0º¦i@ Cˆ'«—‰¢4¦FY¼Ì‘T½ˆâiJeù%‰ ˆ]÷G¯>àZ»->˜þ:w¬ƒ„¨X¼ð8ŸohËX«‡¡³o!Òì^H§†Qé¼ì^bk S14jÔ"›2ó–UÞš¸¼ø£øö‡ƒ4Q6FÇžý0öõðù†Ñ tIù®hÑɧ÷ï'˽^y¥?D—ŽbÿákìÃÒH¥iþÒ²½ R±ˆÚû°1DSŠ‘?äNÅå3»¦Ë¢PÏ ”¤xìÀ«C&7Ȗؽb^±Êõz[Á5oŸÅ³`Ç®Y(Çî'¯ž¤qR #@"3eÅ39oûò˜:a0¼4÷°cíR|¹øh~/9fËÁ¸DOi«”¼ 1™4Tðïìb‹¸¿àh,-˜)¯N•‰;·ï £S¢·CëŽ>ˆ¿§æðkÒê¤kÈ5GW¹1P9ÖL¦€¬-4£½×‹—c £È”ó0Q2 Æ(èç­Œ4±…éÚøÍª©‘” ef&²2Ópaï^Á¢öw·ÚZ¤:Ô9¨xK¼úò@tnV  d-P5f™Ì®‰,φ´bHÇ•´ ×â†/±hýyº.IÛdÁFêHÔ)áÙ8]»t‡â<ŽœË@õç‹EÑhÚ¥&¾9 ”7=—¦•¢~éáÙ !TWn"ß,®ˆ.¦4*o+#ÖšîK}׫[Ì‚wqq1üL©ôòÊYo/wAzòlŠˆø­ŠV?q ˆÉóoתøkP¸5B}ïFh OÂÕtg„4!_:£IÆoâ¡¶À éŒâÂ%¤Sº.- _~¿Ó‚`â½±d±\Pæ}4¦³¸òxîÔšöiNâJMóªx„m¹H[;¤ŸÛX!¯ì]½H梑¬,£]ÖsZؽ--YJÄ—{\¼ yBÆI ,ˆ0MâÙÉÉÂØMIKFJr ŠXž‰³¿Ä4B¿—'àÝ¥ç@Ëð¤ fËÁöY‰'›Èò`€­âü.ä£~)a¶­øвûaÄ´çA+(xw£ucWÚŒ#˜6Íî¶o!øÈMmHèÂAîÑŸ›°½Ý ô7 —~Ú„Y*l7r¼ÅäÃÙ¢Ør'i°#ÅMYLõ0s߉Ï»ƒ]&ZôÞ4ù_ ãìÅ™,C»º-áG½ÿ›y™ÊËP?ÀŠ?ÁÞ é`ô’)^T/µ+¶m€ñÂñÓ¦†Mò± }Þ¾t0YRÚ;ß#k|Š0wÂ$žÎ)ܵŸÍÙa®0—¡–^… ÷àãÆ!øê"ÌŸyZ¨Ï=x:ùHq¸ þ˜äBÈhö¡“R¥ÅkþžlñÆöLÂú³ í¸êNNðlT!¯D® МÜoÉù:êgñÊî!^QžËæ%ÐbFbÑåcãÕ4N_Š[5ëqm÷rú/Ží8fŒp#Ñ»¢{ß@,ýåKUûþ“Ƽ®uô8µi)Z<Íì‹Ë>kWÿÆkll,ä$äÖ]~.²ò 7Š«Ó_CY­VCLÊÈ0TÔP(éÞÞ fcÇ’,ÈËÜɃTî*´¡Éχ Y½ÅCµŒ*è¡/…ZÂç‘ùŒE. :rubºÆ‹ìô,²@dpõ(«5~=÷ž{BÈÒ-'$ú‹ºáó 4‘>)A—oØ# å*/Ñg+¤ 6µŽ¼Ô€0s§hÄö“‘ð÷ÃÃ<×*bpì²=z·“Üë¿~†uφ5£;]¼ˆK*àƒ.ñf-NÁô¹cÈ<¨iáaÌ*{œXƒˆ.?‹tW¸É¿¤…˜If¬©ïiÊ[%–¼ {G¸Ñ? %ggSŽŠ¿mIÁ³`(/%cÊü¾âòÖçÂŵ¸ )xI¿Ô^Øø­0ŸP¹mãœW\¯ÎîÅC½8ÞXˆ¦ƒÞÿ„™ v!%d ‡MiÆo]6U`ä ã¹ùRÉÕvKÊØÍ½x’¸oP&–²Kd4¡²}Ù¿T×CÍ=Ìs¶kráÈzœ8s nɸJ›ðƒÞð7¶W¯€z½Ç Ñ' ™ÞÙ‘¨‡‚[ŽÒé÷àFi•Ó‡©Âˆ‡1c=²VŽkˆ·±w%]c(QLƒ¶4”‹ï­©ñéÉk•%ïähPØOO÷k^O”éé°q¥óÝeé f1+èPHYGJj^W«b½: ·oÅ#|ë¾A-àãTèå“©S¦C)6·,ÍóêEÌ’»»Z´ú3/ɯ9Ö À•¼5hñ¼ŽG †!P¥îš†'—#ÀàÖxIEND®B`‚dipy-0.10.1/doc/devel/gitwash/branch_list_compare.png000066400000000000000000000246671263041327500225760ustar00rootroot00000000000000‰PNG  IHDRºL‚©4sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ0žÞ IDATxÚíÝy|uþøñ×4I“4mz= -Zh©‚ àrÉ!Šº  ¸JUP\WPpñZQù Þ TVXE[ùRŽªP,Š-Ðè‘6MÒóû#éE¹eñý|< Ítæó™¼'™yÏg>óB!„â2¤¨ªªJ„B!ÄåÆOB „B!$ÑB!„â„VB „¸Ö’cX]*SÌ&D!Äÿ^¢kÍ]Áã3WBH^xe á€5÷ Ÿ™ÎÀ‰¯s{’ €’­ ˜2÷; SßOŒï¸—»â%f®ÌC%˜ûg¼L·P –œÅ<9;À[F\/=:‹J…÷ˤÛãd«qɲ³­€>#n§{ôJ ã÷×Bi9qýRx¡¸|ÉÃ3¾"¢çýLº#Á›ÀRBæªÜÚ’Ê2×’?ºÃ—Áž#û!„?Ñí:°¹ßd’úŸ­¼0ÀØàoù™ë(S GÊDVÎ"=w ÙÖÞt08€zt­fÃŽ½T8Bù©Ú÷èÄ®ÌmµeT8ôÍlžÚämÕ±—Ùè7ée†&˜d+ qÉ0Ó©G i+óY0e_†ÇsÅUò7’¢ÌµsÙ]¾K9NWí´êüMd: ¸G #¾enz6™{-ŒJ2ŸvÙ7!„ø5ÎyÔ…ˆN·roßl›>âëÍGj§«”°6c/¨$·iCûö-A)bíuó¨Zw¸ Ŷ‹­Û·RL,]Ú…7(ß®¡Íˆ‹‹#..Ž6ñm0d q©‰:•éFÓ-!{ñ>2Ó—0{ú“¼V¯µöTö¬õöË¿òŠxâÛ·`í·Ûj;@Žì„B\¨snѵ: $޼¶3ÈHÛ\;Ý“¿•Ìr”"æ>ý·ÚéÙ«ÀÚóvÀÛ/¬U" J‹RÓQ#†Ú¸êÈî÷2þ–hÙ*B\²l]ñÙ´ãÞIÏ ßñì?ûÍ,ƒ0Ÿb)Õs€µÊAÌ9SȬÝQl ·²'‰gîp+û!„5ÑUU; qŒÛ)fÕ%´ëh?ä~ÄûÖý{[‹ÖñÓ±[ P«ÑGÓ.r‹ ´} !„¿ß1\F]B!„—%éº „B!$ÑB!„B]!„B!$ÑB!„B]!ÄåÊm¥¸ €ceös_Är˜Ý‡Ê~³U°ì%· J¶…B\´!ÄïeÀ€¤§§7þ£³€/çI¡Ö.;Ñ×ÞÊàg-Óy|ßïkGbËßdK÷n Ãч„¨Ö²Á„B]!„øõoZMat/œˆjÝÍÿIçPÒZêêæ)ß¿‘¯×n§Â¥ÙC®Á¤Ñã:œÅ²Ei«ÔÒ®ç­ôJl‚Û²Ÿ´ÿ®å°ÍEh«kÜ¿&O¿úš…•  ¢ý ƒè‘‚½`;_®ÚD….ÿ*7ÆDl!„¸ H×…óávSisb¯öH,„øM¹(.¨¢Ub4Š)’hl¶úóXùqõÂo¸“Sî Iá~ʯBÑhÀi§MŸ ëÓ’=ë·`¡Œÿ[¼:bì}wvx#_ÿX€ýP;Ž·`DÊŒ¸® »2¶c÷°bÅ& W fÄÀÎÙBq¹Ýstxû>ù²ˆr0E°ì±x~› ¥n ¬Ø€ &fšúK¬ÅŸê¢Â¢ ÑøZRU&­«Ó Ô´®šè~Ç`;Âæ )R!PÝ´Q]éîv3Ò9QÒš| ÞUž½¡åP© C×î æ(G¶ÿHá¡Ã`l‹çøaJÕ6ÜÓ9нÝf¾qÉ&BˆË´èžS.ZÆ[5I. ü–-º¶ž˜·“±©;ùô€Cb-þœ1±Fì6§÷µ«ˆ<—ŽÐ€z]ÜŤñßï<„ÛIl˜·Ûû¥Ô|gˆ7 ÃYUŠ[5âª*åøñRÜÁm¹*.˜â­«ùzõU¸‰lÓ nl6 hõµé´Gz-!„$º.*6_’•ÔŠ¥OþV­¹€QG_ÙAzi`^þF8òý6¬*Ø‹ °H`ý+ÎJŽcfÐðÁ\Ó¡å¥N´šSg¥Ú°(ŒØˆìЃ^½zÐÜžÏ/'lØJOÔaƒ{]K$%¸` Ž÷^ö—X9œoC'_E!„¸,œuw®V[X¸ô‡ÑÑùÊPò³óÕáj4‘r[;nЗðîŠÃl*òÄøÛÛqC”‡o–ïáÊ?n‰Á¤TñÅûØaƒà¨(¿±Ù)jô°qÍnVuѦ} ÚVñæÆR ªš7eÂíñt ©ÉϬùzon© \àúuiÅ}74äT±ø‹}äTCpx¿±[)ï|‘hšÜŠ:™qáõ¯N`WáºþIÜ£k°6®Ç™ÿívú^ÚËùrƒ–½"0œ±~ß6 ‹ÿ»Å¹6Ê…àÝÚErOß"«¼eç©€™™»àhsFwÑñág9R ×ßԞ͵޸¤ïfU± }XSÜœ²]ûyok%ú 37'jXôõ!²tÍY9¡5&åÖMˆKHôuCiwàS>þ`ßExý<ÖF›À V¼ÿ>¨FBÍ {Öo檞'ïÈ´hü¢x] –/~Ÿïˆdè=јòÛP‘±œ÷w€1(\{ØT~-;d“öÙû¬«ùžk¤YWñÛóx<œ8q‚òòr Æ !,, ?¿so§UTUUÏ8‡íþ¿Ýäžkø3뉫)Xü¯ñN™öÈõô WqýßÏ÷Ä®Oæ¾§ju±`Ö&æ[O·ÂÁ,˜–L46Þ™µÏO5_«VÝÉg³6ûÊ å“©í Ù·—A‹yçiÃê±±|¿1k*xêÁë¹)¼aX¹o7CŸ8©‚0–MmÉÇg¬?Cuÿ|5›õ§l¾j¼ÛáþS•ýD8ÿðÅ|ôÈ.<¯oÅÔŒ¥µåà×›ylkuÃø˜š±ô±è³¯›|_ÄàŒÃ‹àÆRVb0dð;åß«,vt&: 8ntºÓ'¥»•J·“ÉP×5ÁnÅæÒc Ô‚Ó‰ÓO‡N.«›&ð4õ !įwüøq<&“I‚qžTU¥ªª ???š6mzÎË}®¥6)Rt&žÞ–q­ê·ŸyjT[îké¦RMÖ'=n¨i­UY·ËÀÝ%¾dUË_:Ÿþâ¿¿]îŸˇ)íêûL¨Š…Ÿ‹¡pëþÚD®[ç8>”̸6¾ëœóYvXÃuW›|õUpЦRWY—±p 8p¨ª6ñìÞ¸©306އGÓÜ·Jýû¶åÃ[QyÖúÝTæÖ&¹=ohË’‰x¤¹7äJu¥ÍâxDóÚ²{öŒçÃÚR/æ§Š‹Š:üµ ð -‚’Dù9¬›—& æ3$›ÌÞ$8c’ àg0a®—äÖL3jk ¨-Kk2K’+„¸¨, F£QqEÁh4b±XÎk¹óê‰Ö¿[njMí,~7r†Þ–ÄMmŒ¸ü+˜ÿQA]‚IOޱØðs ®ëMlÙY (A×`7ß|±¥…`Ðy[jN8M¼ø@Ûº7Є×îˆ!xø¶2Vü§PÉ«pà¿·¢v¾N-ôœ8î¦UK#üâmáÌØeaøUa°ÞŠª¸ØqÄJì‘ú7{Y9x¢’ÝyÞË’›aÊÏçÏ 1š¼G>›ÕÍ-¹Š¡ñfš(pˆnB\¸†5kÎ^ÿˆbygd(¿äY15ƒœ]Åì8^w#›Î_OB›š(G9 ´iF\„œçÿ:¸#w<¬Y|ð¬ë6*:T¾5B!ÄïÈív£( g»˜.NŸìºÝç×Xw^‰n‹&¾þ«AÄ*°hê»Êî>y$3·\éÏúÕ¨Åedò}©·Å´—p Š‹ü}6rë%uŠêá„§nã«z-:_ÿÕ£ý¨.JmuõÍ]±»ÑºW¹Ð†‡1€|ÒììBN÷€)ˆÑ±åTó}v1}õ÷í`Æå8Á>k5Ô»äŸWåO]]§PΩ~?†ïÖìgQ±(8uP•}²sé+häÆ+k <§uB!„¸ÜW¢[›ˆ)õ’3N?ÔVÇnÍ`çÀÊ+ÿâKõŒ N üÿxfÄÕh.“^2‰.Š‘×šøb}]_€Q]›5ÐÕõZ/§ÉíÚw‹¢ù¦ýUTæ.ÞÊÜúÕªZ"½íÄ!±MHàXí¨ɱ&ô££Bíb½®<{Uû…Ôÿ‹·™UUÊ5k3Í+«9Zïý¸ÜNøºg|¾lŸÅÊ”¦Dw‹ þ¯ÆÝNŽ‹ _!ç!þ(χÊwB\îž-•~¨çk̘1(Jãýã /¼ÀÔ©SQ…ûï¿­VKŸ>}NQ‚‹5Ï¥ðZF„uå;Z“þÁ§¬y÷ ,ÿfæVº˜ž×-ÆúSNó¡ÕhO9_B‡ˆÚQ5ˆ~ñgÆm@ÍP¶&ïè'¯jÖB¢˜{kzœ´°ÓÇuẚ.«Æ„×üÑHÇ `¤K ¿Úi½ZŸ¥M_õ«¡ö½Cýí{Æ3 fk5Š?éD°êbÁ÷¥`432¡.&ŠÕ…Scæé[‘P¯Xsx(wÔŒv¡óÆEç»C\Eƒ¶~׆sB!~?¾ÝÓýS…O?ý´Á?€W_}•ââbt:o‚4þ|V¯^ݸŒãy#£¸•Å+æ0~ü$}>0àÇ%›qê5ÏNç±a½éÝ»7½ûŒa^F.ªªb;ÎÄqñü+Ï1¦wo†yž•+yîîaôv7³VîBUUö­œÍƒã&3ã•ÉôîÝ›[|…-…6TUåxv:“ÇôñNó 7@U+I›ñNy…ÙSne\êTÛ>?®vÞMÛuƸÔÿÇy¶èž}Ý_«º”§^ÙE–Í“âùøŽˆß¼ŠòVJªÝ ÑnüÝ›æÏ\¿‡ã'ª°yü ð4+ç²;±« Õh0øû’p·“Â2½–@Ýÿdl„¨¯fÝ›¿•`q™“ÝÆöîÙCdTÔiÿþ׿þ•O?ý»ÝÞ`€ÉdbÊ”)ÄÄÄ`09r$ .l0 5g!CþäRY0þJª*¬¸T@Õ`2¡-[Í'SN"ã§ÝÊÑfðß<¸ë­ŒÒ,cÈÂғ”»<¤þ'€~£GSöÍ"¶”$3÷Û¹¸åáÔ½(¡ÛÏFê’ Àp>]3i}ï'7¤ÏMëÅw/N#­4–¹isÉzt©{%”¡OÏ$þ›û™µ5˜»žyœÍ©¼“vˆ»ßZNÊÁgaaAmÛµ;ç˜_Ä® n2–oçùŸmµ÷Q¼¾éE©)¸‰‰à?ðƒ{æúýhÚäìM¨ZƒŽFsitD6ÑýOÇF!„î£>Â`ð^W¾óÎ;Y°`v»UUÑét' ·å»Bì¯CuU{“\ÅMU•…?m¡ •1sÞæþ®Á8;²á¶©dî(fl7o#Û„^ã¾ä}üôŸL¶&Oà_OŒe¯ù'ÆÌ¿Ñ×µ"–7?™ëCÜ´±ÝÄ3+wQ¢™ÈS¯}/•ì6ªžß<ž±ë‚qí"ˆ“ϬB!Ä9/vr’{ï½÷2þüeÔoÑ­Àð×ÀËÏ0gÃǼ´Á;õ†”×™:(#Œwÿ±“‡_]Ê?&ü€Îw¿Â¤žQ¸¶y“Lo›°†& (zï t#'ÿºyá lPb˜<ï)®h_ÆÈèwXœ6!i‚Z¶™}yÞ–h%@5œqo=OÉߟeZÊ]„ÜøwÔ­ËzÖø¨—ÜÍhBá#7£ ñç!7£5¶{÷n"##Oû÷ûî»Å‹c³Ùj9r$‹/`äÈ‘ 毙·qv§Åã²á¨va jFH ·Ó†Õê}Ì—NqQU­‚.ˆf!ùä“cíž²<Õ‰â§% @â©¢¼ÜƒÇS7_µªA«óCãW¥ÜŽ»æoÕ•”Ö>•¶KÝ ÖrV¨r¡*ǨBƒG—ÕB¹ê¡¦­V‡»ª‚rOýU«.ÅZ.ü´:üüy~:kmñ ¹åzŠ7.gÎô<òú«tÒ èʈQ*ú\3U=Âì¹³™øæ\Ì2†BqIùðà ¸¤×Qߤ­4Z\•¸<—~L]¢ë.fÕ¿?`yVž7Ëï1š±czäg}Áû©i£œÐ‡ñ„õsIW@ÉœÍ{Q“y¨_Ý­jŽ«xésxjÒ LJÝëÉOÞȶo²E‰F—û?Ù‰í6œ‡Rú¸KvðïÙ©dÙIèÑì -|eX·˜9gP¦€!¢)<@;kϾ–‰¢À³o4åÙGÁÁïxoÎrË <¡7÷<8‚³°°náû,ÊÌ%$¦qÕeÚ7ƒ#o Óf¬ôži©ø«¾Çñ:ŠØU¦2`òã Ó ö‹gïƒ3Ùþ‹…êµÉºóYøòG8â[Rø}&ù„3äîÛÐn]ÆòmÅèc{ðäÄ1„W²w?ÜÐ;‰«çðñ¡pZ–n"3· }Bž|t$1j>©/¾O샓écG>ó^Z@ÂØ‘ì{o 0ëoòä¿%A[À—óßã«mE¨!1Ü>z7ulîRÖ-JeQ¦÷ÁÉÉ7cÜ-%ØUyY|4ïc~*²ƒ>œ>w>ÈÈî1l]Á»­¤˜Xz\KѱîšpQ+™‹ßeaÆ>ÚLáþÛºa’æß„ÛZF±Å†14œCókÁ^òÝQ$FCAeìέ¤Mb4õGr¶Î¥ÂÜŠæ³ïl-ØËQ¢/ÒÕ!„øßs.]¬Vë¥ÿ>\NªÿÀž_5¼Xî’Y–UÎð‰“™<á/Û°ˆ%YÅ`Ïáíyé´þÓ§Ž£un3fKèW«ª¨=è“Üp( —½œ¢ÜrÜJÃ×.œîÛKvfΞc™<áfг–ð\êVTÏfMy‡MŽ$R&¤‘—Anm‹2hqÛx¦NÈuúm¼ýö׸ÓÜ7ˆ¡Ÿ+0”fñôŒk;ŒI“ÆÑ"?ƒ×¦-¢7Ys¦ññ†|úÜ3Ž[ÚW²­ô§x‚±>n(sçÎåÍIP•º§™¨ú`ÚêÒæ/bknßÌ[H™C×Ö  Õ^ÉÞü<²ÖüHÇ»Ç1$¾š•©sY^‘Ìøqà ÎÛÀÌ/sp[óÙ¾±à²%?+܈þLH¹ãÞ Þ^šƒêªdoQ1…•n߇±’ÜÂ<òl&®ÜU5pÃÐD,,}v:+sšrÏß'qWr5ËÞÊê%[>cÑ c&MeRJ²¿šËüm–“¿Š|ùÒ<~Ò÷bÒÔ©¤ôoÆšo±Ã UV0}îJô×ÞÄ»®$sm&¹?o瘶/~žk3lÂd&È®´Tžÿ4Gö~¿{ÁVR?þŒU߮⳱½¸áå‡ã»Ö²~O鹿<Æwë÷4šl9œÃÒs;…/Ý»Œ…²a„Büa~U‹n“«ï枎ñôH Æa#ìØSÉ5sè05¿’û^žÌõÅZ‚£Ã¹2t–«®%ñäV_‘Æ×ZûP jòí×èÈäQùç'Ù÷4±W5ðȳãé`‚®Éaì}øUï‚Á‰Œý0]{vÄPm¡mëÖl´â2EÑãšýàÏ bØ¿ôltã™”A„±“ïbÛôEì,èCÎ6;Wßÿ#»…Q?ÈÇéãá:éµB8íÚ«dnËdîLï£ô0tÃdlØ|©øÞºÿ'C;‡ánvÙyìÑ‘$éÁØcï¹­®v£)ÕÔ˜aüsL?4€ÿžÿã=g]YÚ“ÊÖ@b.„.ÚF—>Ñç­ ­ FLO÷Ôö°ï»i¬ûþÚøE¢ÕÓºÛH^ mOY`ãÎÕ÷ÜEǤkIÖRbƒ•‡8´)†3eTw4ÀLC9O¼³G._¬)¥Ûø êÄ1uX/|³ëIÒªû«¸øqÕ´è9’›ÍXs¿âã›h—Ò£vüj>v­æ“£.*ªŒtè?”k[‡€»Œ¬¯¿æ§‚J ¡mè;ôF¢5þp”UËRxÌFh»ž 땈FcÀ_£â*ØÌ²Ìô®ãV@»ž·Ò+± ö‚í|¹jº@ü«Ü¥ŒBÔÐh4x<üüü$Àãñ ÑœßqåW%ºZllœ3™…öº %¤S,·ôH`Á’Ùl[„$0ìÎÑtP\Þd°Úuö²k.ÿû„†7©ý=¬e°C¶Î t!ÚT“ÔEÑÉV@ã§¥dûç<¾èݺBCüѨ`w¶šGãéQÈbÚ¸¬õs@…NAui#¢Cþ!ûÆ +IDATá<®(8¬ u›Bï”éŒê…£ ‹§ÏãÓŒLêÓ`ÞjU!Ðèí`÷=³Oqª WÐê ú;c›Vµ}ŒOžG©×ûØ_©)Ï;ƒÓŠo,yño,©Wn¸ÓEÜM÷ÐmóL̘Æ "¹#ïNnôþl–}¤NYDM¶¢F £Šœme®jQ»~FïIêvaA!R[÷± OL‚eû)ñ€Ir¢ ç>Æ1§‘+b¼]bL­Ð¸P Ô¢H§7Ѥd3KW¯"ú¾QT~ûÛ4×rwJ[ò×.âëe›¹ox8.Õ†¡í`Fu¯dùòïÙ×µ–ã”5qáò¯¢´´NƒïäÚÊ,_¿…N W’¶b†.ƒ]É7Ë×c—-#„µ‚ƒƒ©ªªÂd2I0.@UUÁÁÁ'ÑÕ5šÓÊWo/boÒpž}=Qføò©Çù®â‚PJÕ6ÜÓ9нÝf¾qɦBˆÚÆðp ),”n]"44”ððð‹èªeìû9]@]Behâ}†qËÑD™MlYÊWeâtâ<º–3×2zêëôJ茮8‹ôìjиÁ®b³–`Uix©Ú ™¬Ë¹•›[á½y[ ô&ob¦ûÚ/ȺñIº™Ž²ôã­(É£i©Ö²"=‡Gµå—Õ_‘ ´\NhJTó0(ÞÁâw¡„FàP@ïU±RRå&"®-¬ù­ûÐ/ÁÄÖÅ&½5‰«B!cá z=3’°’ïøxƒCßó®ÆJié9ÜwS[¬3Y[†EŸÓòÕÊù_ËW 4Sàоƒ8:´á‡Ï¡L©—«eÌ+!)¶=ÊÒ3³éx{g¬¹«˜9w9Ý&\I×Í/òöŽ>¼øúH’ºöä@ú2òOα­TÕ@lëæ˜uÖÍÿ7¥¨Ø«¡MûÔ%ÿa]ß©\|”ÔY(Dà hÁ5¡¶ ^So'ʑÒÏòášÁÒmá×2D«Óáð] qÏÇFp£Ñ5êŸLùùk1™œv©h]Jš0Úwm?*c ·+.Ü*hN’N«óîq:\6 hõµ-ù ûó!ÄŸ˜ŸŸÍ›7§yóæŒßÉ9%ºfTV¾?›•õ¦…ô™È½ýÚ³vålÆ­ôñtKaÓ†TöÜþOnŽßÈ¢g‘oþ«†O& 3‰½bIK[ÀÓþa Z’ú20&ƒ•³Ÿd%zòZä“:íQRHf⽽Иaò¨f|2›‡–ƒªPУ!¶ë„|³ˆé ¡slËà•Åy¾{S2xái³ßÃ_÷¾È‚™Sj/áyl z3­ŸHaÿÔyL4×EB„ÿYMµîB±>n0‡ìgöòÙl[î‹[çáŒêvÒBZ̨赚å}[§þýíª±ñ´¯51Ü1¼3–¼Ã£i@H`G¯Õ ‰3ª,{í9ZÌzƒÇ& dÊ;s½ó=R¸·ƒW³"²æ1íaßû&–”±­Ôçw }#WðÉôGùIèD¬~ó¦/aÖóׂÙ,˜ñ$‹€#`oN¨Á̰'Æ‘3uÓ}•ª‘=˜6¦³|-UC ÎÆ÷›óHêÕ’¢ÃÅÚ¦Áðy÷ƒXh‰¹ürªt nFµV¡¸E'z$š±XË6Ñ¥}8Jµó¼VÁß îMì/ëA»+‡ómèd_.„âô«ì°”bui3£ÁÕjÇ`2¡,%EX &sÌõ:`:´zý)ưuSQRŽª®7¿•¥O=Φk&ñ¯aÍ9Qæ¦I˜¹Á²nk '¬Öp,·•’ãô!a˜ôà¶ZqLè5àq8piµøû:5;,¥”¹TƒÃöu[)=aEŽù°u[+8aµÖDxØïÓ/Ça±`EC˜ÙÔ(Æèõ¾7騢¸ÜŽÁÜ`ƒâ‚Ü=a'ǵ^Y–’㸴!„™õà®ÆêÒ`ÏÛȦ£aÜØ+ =P²uSæ„ðúÜ‘¾–[¥Åå8M𙑮¹¿ wÙn>ýt=• ¨„pÓ=#hY¯ƒnÁÆ%¬ØQ7êBd§›¹¥k ìÅ;X²l#6Å{îÛeèh:‡eÑ’ÃÜzwOLØÉœ¿÷¥Õ¾/Ø7ŒîšX¶'ŽQZƒó çOÏ{FÁOŸ‘¶£¬¶ŽÀöƒÝ£î FÍ#€ÓÓÓeƒ !„¸ôÝ‹ÏÊâq±¦Ç#¼?¦ƒl±ÿ–œ<9û;¯Èõ‡Yž–Mü°I<9(A‚sѳ];evŒA!èOsá´[©ÆˆÉP¯c´Û‰ÅZÑdB÷+Ï<\V 6M A†Æ¯%ÑB!‰nÃ#7ù[3)íD·8³l±ÿŹYdnÜÉáR' =naPg¹†-$ÑB!‰®B]!„B]!„B!NEF/B!„’è !„B!‰®B!„’è !„BñÛ:ë“Ñöïß/Q—Ö­[ÿ!õÊ÷I!„øýŽá2ê‚B!„¸,I×!„B!‰®B!„’è !„B!‰®B!„’è !„B!‰®B!„DW!„BIt…B!„¸”ý h«E$IEND®B`‚dipy-0.10.1/doc/devel/gitwash/configure_git.rst000066400000000000000000000113001263041327500214240ustar00rootroot00000000000000.. _configure-git: =============== Configure git =============== .. _git-config-basic: Overview ======== Your personal git configurations are saved in the ``.gitconfig`` file in your home directory. Here is an example ``.gitconfig`` file:: [user] name = Your Name email = you@yourdomain.example.com [alias] ci = commit -a co = checkout st = status stat = status br = branch wdiff = diff --color-words [core] editor = vim [merge] summary = true You can edit this file directly or you can use the ``git config --global`` command:: git config --global user.name "Your Name" git config --global user.email you@yourdomain.example.com git config --global alias.ci "commit -a" git config --global alias.co checkout git config --global alias.st "status -a" git config --global alias.stat "status -a" git config --global alias.br branch git config --global alias.wdiff "diff --color-words" git config --global core.editor vim git config --global merge.summary true To set up on another computer, you can copy your ``~/.gitconfig`` file, or run the commands above. In detail ========= user.name and user.email ------------------------ It is good practice to tell git_ who you are, for labeling any changes you make to the code. The simplest way to do this is from the command line:: git config --global user.name "Your Name" git config --global user.email you@yourdomain.example.com This will write the settings into your git configuration file, which should now contain a user section with your name and email:: [user] name = Your Name email = you@yourdomain.example.com Of course you'll need to replace ``Your Name`` and ``you@yourdomain.example.com`` with your actual name and email address. Aliases ------- You might well benefit from some aliases to common commands. For example, you might well want to be able to shorten ``git checkout`` to ``git co``. Or you may want to alias ``git diff --color-words`` (which gives a nicely formatted output of the diff) to ``git wdiff`` The following ``git config --global`` commands:: git config --global alias.ci "commit -a" git config --global alias.co checkout git config --global alias.st "status -a" git config --global alias.stat "status -a" git config --global alias.br branch git config --global alias.wdiff "diff --color-words" will create an ``alias`` section in your ``.gitconfig`` file with contents like this:: [alias] ci = commit -a co = checkout st = status -a stat = status -a br = branch wdiff = diff --color-words Editor ------ You may also want to make sure that your editor of choice is used :: git config --global core.editor vim Merging ------- To enforce summaries when doing merges (``~/.gitconfig`` file again):: [merge] log = true Or from the command line:: git config --global merge.log true .. _fancy-log: Fancy log output ---------------- This is a very nice alias to get a fancy log output; it should go in the ``alias`` section of your ``.gitconfig`` file:: lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)[%an]%Creset' --abbrev-commit --date=relative You use the alias with:: git lg and it gives graph / text output something like this (but with color!):: * 6d8e1ee - (HEAD, origin/my-fancy-feature, my-fancy-feature) NF - a fancy file (45 minutes ago) [Matthew Brett] * d304a73 - (origin/placeholder, placeholder) Merge pull request #48 from hhuuggoo/master (2 weeks ago) [Jonathan Terhorst] |\ | * 4aff2a8 - fixed bug 35, and added a test in test_bugfixes (2 weeks ago) [Hugo] |/ * a7ff2e5 - Added notes on discussion/proposal made during Data Array Summit. (2 weeks ago) [Corran Webster] * 68f6752 - Initial implimentation of AxisIndexer - uses 'index_by' which needs to be changed to a call on an Axes object - this is all very sketchy right now. (2 weeks ago) [Corr * 376adbd - Merge pull request #46 from terhorst/master (2 weeks ago) [Jonathan Terhorst] |\ | * b605216 - updated joshu example to current api (3 weeks ago) [Jonathan Terhorst] | * 2e991e8 - add testing for outer ufunc (3 weeks ago) [Jonathan Terhorst] | * 7beda5a - prevent axis from throwing an exception if testing equality with non-axis object (3 weeks ago) [Jonathan Terhorst] | * 65af65e - convert unit testing code to assertions (3 weeks ago) [Jonathan Terhorst] | * 956fbab - Merge remote-tracking branch 'upstream/master' (3 weeks ago) [Jonathan Terhorst] | |\ | |/ Thanks to Yury V. Zaytsev for posting it. .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/development_workflow.rst000066400000000000000000000327661263041327500230770ustar00rootroot00000000000000.. _development-workflow: #################### Development workflow #################### You already have your own forked copy of the `dipy`_ repository, by following :ref:`forking`. You have :ref:`set-up-fork`. You have configured git by following :ref:`configure-git`. Now you are ready for some real work. Workflow summary ================ In what follows we'll refer to the upstream dipy ``master`` branch, as "trunk". * Don't use your ``master`` branch for anything. Consider deleting it. * When you are starting a new set of changes, fetch any changes from trunk, and start a new *feature branch* from that. * Make a new branch for each separable set of changes |emdash| "one task, one branch" (`ipython git workflow`_). * Name your branch for the purpose of the changes - e.g. ``bugfix-for-issue-14`` or ``refactor-database-code``. * If you can possibly avoid it, avoid merging trunk or any other branches into your feature branch while you are working. * If you do find yourself merging from trunk, consider :ref:`rebase-on-trunk` * Ask on the `dipy mailing list`_ if you get stuck. * Ask for code review! This way of working helps to keep work well organized, with readable history. This in turn makes it easier for project maintainers (that might be you) to see what you've done, and why you did it. See `linux git workflow`_ and `ipython git workflow`_ for some explanation. Consider deleting your master branch ==================================== It may sound strange, but deleting your own ``master`` branch can help reduce confusion about which branch you are on. See `deleting master on github`_ for details. .. _update-mirror-trunk: Update the mirror of trunk ========================== First make sure you have done :ref:`linking-to-upstream`. From time to time you should fetch the upstream (trunk) changes from github:: git fetch upstream This will pull down any commits you don't have, and set the remote branches to point to the right commit. For example, 'trunk' is the branch referred to by (remote/branchname) ``upstream/master`` - and if there have been commits since you last checked, ``upstream/master`` will change after you do the fetch. .. _make-feature-branch: Make a new feature branch ========================= When you are ready to make some changes to the code, you should start a new branch. Branches that are for a collection of related edits are often called 'feature branches'. Making an new branch for each set of related changes will make it easier for someone reviewing your branch to see what you are doing. Choose an informative name for the branch to remind yourself and the rest of us what the changes in the branch are for. For example ``add-ability-to-fly``, or ``buxfix-for-issue-42``. :: # Update the mirror of trunk git fetch upstream # Make new feature branch starting at current trunk git branch my-new-feature upstream/master git checkout my-new-feature Generally, you will want to keep your feature branches on your public github_ fork of `dipy`_. To do this, you `git push`_ this new branch up to your github repo. Generally (if you followed the instructions in these pages, and by default), git will have a link to your github repo, called ``origin``. You push up to your own repo on github with:: git push origin my-new-feature In git >= 1.7 you can ensure that the link is correctly set by using the ``--set-upstream`` option:: git push --set-upstream origin my-new-feature From now on git will know that ``my-new-feature`` is related to the ``my-new-feature`` branch in the github repo. .. _edit-flow: The editing workflow ==================== Overview -------- :: # hack hack git add my_new_file git commit -am 'NF - some message' git push In more detail -------------- #. Make some changes #. See which files have changed with ``git status`` (see `git status`_). You'll see a listing like this one:: # On branch ny-new-feature # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: README # # Untracked files: # (use "git add ..." to include in what will be committed) # # INSTALL no changes added to commit (use "git add" and/or "git commit -a") #. Check what the actual changes are with ``git diff`` (`git diff`_). #. Add any new files to version control ``git add new_file_name`` (see `git add`_). #. To commit all modified files into the local copy of your repo,, do ``git commit -am 'A commit message'``. Note the ``-am`` options to ``commit``. The ``m`` flag just signals that you're going to type a message on the command line. The ``a`` flag |emdash| you can just take on faith |emdash| or see `why the -a flag?`_ |emdash| and the helpful use-case description in the `tangled working copy problem`_. The `git commit`_ manual page might also be useful. #. To push the changes up to your forked repo on github, do a ``git push`` (see `git push`_). Ask for your changes to be reviewed or merged ============================================= When you are ready to ask for someone to review your code and consider a merge: #. Go to the URL of your forked repo, say ``http://github.com/your-user-name/dipy``. #. Use the 'Switch Branches' dropdown menu near the top left of the page to select the branch with your changes: .. image:: branch_dropdown.png #. Click on the 'Pull request' button: .. image:: pull_button.png Enter a title for the set of changes, and some explanation of what you've done. Say if there is anything you'd like particular attention for - like a complicated change or some code you are not happy with. If you don't think your request is ready to be merged, just say so in your pull request message. This is still a good way of getting some preliminary code review. Some other things you might want to do ====================================== Delete a branch on github ------------------------- :: git checkout master # delete branch locally git branch -D my-unwanted-branch # delete branch on github git push origin :my-unwanted-branch (Note the colon ``:`` before ``test-branch``. See also: http://github.com/guides/remove-a-remote-branch Several people sharing a single repository ------------------------------------------ If you want to work on some stuff with other people, where you are all committing into the same repository, or even the same branch, then just share it via github. First fork dipy into your account, as from :ref:`forking`. Then, go to your forked repository github page, say ``http://github.com/your-user-name/dipy`` Click on the 'Admin' button, and add anyone else to the repo as a collaborator: .. image:: pull_button.png Now all those people can do:: git clone git@githhub.com:your-user-name/dipy.git Remember that links starting with ``git@`` use the ssh protocol and are read-write; links starting with ``git://`` are read-only. Your collaborators can then commit directly into that repo with the usual:: git commit -am 'ENH - much better code' git push origin master # pushes directly into your repo Explore your repository ----------------------- To see a graphical representation of the repository branches and commits:: gitk --all To see a linear list of commits for this branch:: git log You can also look at the `network graph visualizer`_ for your github repo. Finally the :ref:`fancy-log` ``lg`` alias will give you a reasonable text-based graph of the repository. .. _rebase-on-trunk: Rebasing on trunk ----------------- Let's say you thought of some work you'd like to do. You :ref:`update-mirror-trunk` and :ref:`make-feature-branch` called ``cool-feature``. At this stage trunk is at some commit, let's call it E. Now you make some new commits on your ``cool-feature`` branch, let's call them A, B, C. Maybe your changes take a while, or you come back to them after a while. In the meantime, trunk has progressed from commit E to commit (say) G:: A---B---C cool-feature / D---E---F---G trunk At this stage you consider merging trunk into your feature branch, and you remember that this here page sternly advises you not to do that, because the history will get messy. Most of the time you can just ask for a review, and not worry that trunk has got a little ahead. But sometimes, the changes in trunk might affect your changes, and you need to harmonize them. In this situation you may prefer to do a rebase. rebase takes your changes (A, B, C) and replays them as if they had been made to the current state of ``trunk``. In other words, in this case, it takes the changes represented by A, B, C and replays them on top of G. After the rebase, your history will look like this:: A'--B'--C' cool-feature / D---E---F---G trunk See `rebase without tears`_ for more detail. To do a rebase on trunk:: # Update the mirror of trunk git fetch upstream # go to the feature branch git checkout cool-feature # make a backup in case you mess up git branch tmp cool-feature # rebase cool-feature onto trunk git rebase --onto upstream/master upstream/master cool-feature In this situation, where you are already on branch ``cool-feature``, the last command can be written more succinctly as:: git rebase upstream/master When all looks good you can delete your backup branch:: git branch -D tmp If it doesn't look good you may need to have a look at :ref:`recovering-from-mess-up`. If you have made changes to files that have also changed in trunk, this may generate merge conflicts that you need to resolve - see the `git rebase`_ man page for some instructions at the end of the "Description" section. There is some related help on merging in the git user manual - see `resolving a merge`_. .. _recovering-from-mess-up: Recovering from mess-ups ------------------------ Sometimes, you mess up merges or rebases. Luckily, in git it is relatively straightforward to recover from such mistakes. If you mess up during a rebase:: git rebase --abort If you notice you messed up after the rebase:: # reset branch back to the saved point git reset --hard tmp If you forgot to make a backup branch:: # look at the reflog of the branch git reflog show cool-feature 8630830 cool-feature@{0}: commit: BUG: io: close file handles immediately 278dd2a cool-feature@{1}: rebase finished: refs/heads/my-feature-branch onto 11ee694744f2552d 26aa21a cool-feature@{2}: commit: BUG: lib: make seek_gzip_factory not leak gzip obj ... # reset the branch to where it was before the botched rebase git reset --hard cool-feature@{2} .. _rewriting-commit-history: Rewriting commit history ------------------------ .. note:: Do this only for your own feature branches. There's an embarassing typo in a commit you made? Or perhaps the you made several false starts you would like the posterity not to see. This can be done via *interactive rebasing*. Suppose that the commit history looks like this:: git log --oneline eadc391 Fix some remaining bugs a815645 Modify it so that it works 2dec1ac Fix a few bugs + disable 13d7934 First implementation 6ad92e5 * masked is now an instance of a new object, MaskedConstant 29001ed Add pre-nep for a copule of structured_array_extensions. ... and ``6ad92e5`` is the last commit in the ``cool-feature`` branch. Suppose we want to make the following changes: * Rewrite the commit message for ``13d7934`` to something more sensible. * Combine the commits ``2dec1ac``, ``a815645``, ``eadc391`` into a single one. We do as follows:: # make a backup of the current state git branch tmp HEAD # interactive rebase git rebase -i 6ad92e5 This will open an editor with the following text in it:: pick 13d7934 First implementation pick 2dec1ac Fix a few bugs + disable pick a815645 Modify it so that it works pick eadc391 Fix some remaining bugs # Rebase 6ad92e5..eadc391 onto 6ad92e5 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # To achieve what we want, we will make the following changes to it:: r 13d7934 First implementation pick 2dec1ac Fix a few bugs + disable f a815645 Modify it so that it works f eadc391 Fix some remaining bugs This means that (i) we want to edit the commit message for ``13d7934``, and (ii) collapse the last three commits into one. Now we save and quit the editor. Git will then immediately bring up an editor for editing the commit message. After revising it, we get the output:: [detached HEAD 721fc64] FOO: First implementation 2 files changed, 199 insertions(+), 66 deletions(-) [detached HEAD 0f22701] Fix a few bugs + disable 1 files changed, 79 insertions(+), 61 deletions(-) Successfully rebased and updated refs/heads/my-feature-branch. and the history looks now like this:: 0f22701 Fix a few bugs + disable 721fc64 ENH: Sophisticated feature 6ad92e5 * masked is now an instance of a new object, MaskedConstant If it went wrong, recovery is again possible as explained :ref:`above `. .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/dot2_dot3.rst000066400000000000000000000012511263041327500204050ustar00rootroot00000000000000.. _dot2-dot3: ======================================== Two and three dots in difference specs ======================================== Thanks to Yarik Halchenko for this explanation. Imagine a series of commits A, B, C, D... Imagine that there are two branches, *topic* and *master*. You branched *topic* off *master* when *master* was at commit 'E'. The graph of the commits looks like this:: A---B---C topic / D---E---F---G master Then:: git diff master..topic will output the difference from G to C (i.e. with effects of F and G), while:: git diff master...topic would output just differences in the topic branch (i.e. only A, B, and C). dipy-0.10.1/doc/devel/gitwash/following_latest.rst000066400000000000000000000014661263041327500221700ustar00rootroot00000000000000.. _following-latest: ============================= Following the latest source ============================= These are the instructions if you just want to follow the latest *dipy* source, but you don't need to do any development for now. The steps are: * :ref:`install-git` * get local copy of the `dipy github`_ git repository * update local copy from time to time Get the local copy of the code ============================== From the command line:: git clone git://github.com/nipy/dipy.git You now have a copy of the code tree in the new ``dipy`` directory. Updating the code ================= From time to time you may want to pull down the latest code. Do this with:: cd dipy git pull The tree in ``dipy`` will now have the latest changes from the initial repository. .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/forking_button.png000066400000000000000000000314441263041327500216210ustar00rootroot00000000000000‰PNG  IHDR]Vl8EÀ pHYs  šœ IDATxí]|TÅöþv7›Ý´M‡„N]&„O ¨Ø ‚Xÿ‚(ú¤("‚}€`@z!Ò!@¨$†’ I6»ÉöÝÿ™{wÓHÅ ™ñ—½w§ÏwÎ|sæÌ,JlÀG€#ÀàÔÒi…7Âàp8œt¹"p8D€“n ‚Í›âp8œt¹p8D€“n ‚Í›âp8œt¹p8DÀ©ÛªSMY­Vܺu jµºN»:ëååH¥åÛ÷;ƇêЦš­£22“ð{ºwG(7oÞ#77·»ÓÀ}Z+»6žŸŸ/®ŸŸ_¹£¼Ÿ1æ8”+ú{2±²2+ß”¸'‡öÏèTnn.\\\þ½‡z)‘HÜ~…ûcŽCEÒ¿÷Ò++3î^¸K²³X,`B`«UC€áÆð«(Üïs*Ò€{/½22ã–î½'7Þ#ŽGà>F€“î},\>´ÒÈËË믾ŠåË— »‘ÒsÝ¿±/^ûã¡vàî…»„;s+p׃[ìîcFºÌ5ÁnGÈd2˜Íæ{VVÕÙ3g°hÑ"A0“'OF»víîٱ߹öÔnÉŠdÆ-ÝÚ•Ðzzz:¶mÛ†9sæì=33³Âžé¯¬C¿~ý0~U¡Õreõ$!nõm…åï,ƒWŽìÀŽ#q(ÏëšgïÛÝëÇõžÝŒX¶l™P844´\K7nÝ'– ã¢USÖ½Ûý__­äÎú\]¥ ÆÎê\²d 222ÊÅ@h[Ÿô/ŽA¿aã±îdrù]3\Ä»TnüJ¦Ÿ„ÃëýÑoüª8äaÓ»%ê&¼‡¾þ5ÎÜ2—_¤VNß«ÒnéV­ªä­„¥«Ñh°aÃ9rþþþ0`€0vïÞM›6 ýé§Ÿ.óÚ™Ù¦z$“ºÂ])‡Fg,°Z¤n.P:Ù 3U¥Ó•È+1áô7s°Bòõo ›±ô‰a³÷MáåMý0V½•9€¬ÆEG¤Óéðí·ßâêÕ«3f úôéS`å–f ùBqŸ¶]ÑÞ_¼ú—w3þ4&k%ÇdƒAG»=ÝÊpS‚„„*­V999˜;w.ŒFc$Ìâÿæ›o0}út¸ººèNANj̈́›B§ãá!@ö<E~‚Ð=«ÑÖ¹Œå—úžGå ‚~ÊÄúõJ¨k6hubC¡}Ÿ@#ºð“S1»ðÞÔöØÿã@H­ŽŽÔ³’ú^¬gÈŒ“n1´jîË•+WŸ"› AAA˜5kؽS6ùû÷ïÏ>û |o¯½öZ¶lYö¤`Ý–Ü>•ö,À´u©hÖ Ø½ë¼õÀÄ™Ÿ¢}Æ&|²ð~4ÚÄ`æ{óa{h¦i‹½_}‚UêΘóå(dí]†Ù³ÃDÕ7ê4ã'¾ãî™X®fm­Àû Z`ÖÝ¿òÍóµzd Þš0Ô¤¶/Ÿðƒ{qÙ«!ÆLœ‰qý‚í)5û(J¸/¼ð‚°À1û+p‹öîÅ©Kð|K+¬ˆÉbÕ§žÆÓ>ƺ³9BÖc>ÃGãúÁS‡ïÞƒôfDNÇþD‹™?À](§€fì[<kÏÝÀƒc¦c\ÍÜÕwviÁ‚prr\*ì”6v†ÉTþêìJÙ%m‡ã¿³ŸƒÔbÅù%/á•åQ8—`„[ÜBLÝjÀ´o?@ eöýw26؆cÞ»EÆ'6Wê  ºáÓù_¢¥ÕB8'áÓŸÁ^m6@m¸²_Ïšƒð˜A‡'|òñ„%=s§}‰]±jô8HGýǦ`â£ÀwgÀð¯iøà©ÐÇíÀ»S¶bÈœy ¯8¹ê|µb7r$*ôù&¦Œ¾ætìøá+ÌÙ|NècçãðÎ;#pí—‹ëûøžP”:ŠÊGJ+Ÿ•ç¬.™2«ƒ. ƒ÷½÷ÞÔ)S••…'Ÿ|RHcï_}õŽ=Zñ6P(Qø¡K¿‚ؘØUïN€œäø|úN¸6®Ø¤l޼Eäqb’ñçÆsÐ!»öœE²S0nlÇ"\íCo૯Bvn>ýlB{áo6IBѽs#˜Î-ÆF¸!#ðæØ¾ˆ=° ï̇D*βăÉèÿþ84ÉIÆêÏ!ÁVóë<³è.#\¶¨iµZÁÊe?`©(l˜÷ ¦6 Ó>üÎÙŽ›š«˜;ä pOøoʼnUŸãå— %/ÇÄàø®Í8. D/8˨÷Øö㻘vÒn¯â­'[ÂUH¨¨õ¿—þÊ+¯‡†ÌwÍÆÊ–-ð_|ñ…@´l1bñŸþ9&Nœ(rY-Ú47{=ÑQ‡±/ò²ÍWå[n4’b¢`vq‡‰=ýb,b®¨¡pu&=©\°Iâp`g8öíÙ‹Í+V!‚JJš@©ÆGc?ExF(>˜1JOâË ï 2/sÿó¡@¸~λváø¹ÄäHàª4ârl.Ó»í-¦,Ĩc‘#U"~ÃT|´bBǽ©zàDØ—˜LrKÙó“@¸Ÿï§ŽÄÙ]+ðÍÖd·)®ïž®ŠJ©¬‘×ü («'÷Y<3nʲ JZL鋿eÖ›E;ì)yèc3Qi²XŠÖÁÊŠ†Yc,^õº¹çAÿç>,Î#Elù ž%âüíÂIœ—_›ÉŽÆ™Hœ£B#ÿý <šñõ$àW»|ú,®S.‰‡ ¡ƒF çšqFõž{¼-.-ø’Rãû…¡—§=ºŸFެ”Š?„zG¿ãzy¢ÃÍãÿs> 2È­¹0ŠÛ.峂d¡ËSrÌ%«b>\fá1—‚ÃÂeÛiggg¼ýöÛå’Œ£®Ü¸hÄç¹Á¦MEžñ(òp†]ŒÏ_î«© ÷ĶC`zµ³PÌç__c÷gA ~±‘œ¢ÂðU%µ€%äã•YtÈ5”îšq´ËžÕÈéÓ!¦kl—Å;HdiLט¿—¹\.ä¾8>˜n±÷Ä0Œy:Ì ¯aPK%þ:`#"ò€³DJ.œ])‹êb‹#P|ÑÀÚcìñ¶l,:¥hŒÕæèÕ‚NB"C^~.n,"NGœÀ.zc2øjb7Xƶň“ % ^æ˜ô.¥ Ôn›Jˆ?DKVfÊƒÆæ,´—´óô/S‡)]·.½Û`ÔëÓñì: ‘2= õ]¢§EªÄX„‚E>Š´H‚ý•“îí˜Üõ˜Ç{ Xºt©`qíܹŒæÏŸ/ûéðž={„~xxxàÍ7ßDûöíoÛ*|êÁ‹Ô]k÷=²&£è‡t’‹¢e“ANñ:³¨àÁÁm¶j>:E–ö”O![ñ¦N>Eµ…à‘üqóÔwøpþJx… Á›ÏöCŸ­§q˜ÍḬûlRRòõåè4TÆ‹¬ òk ¯Ɍr ôÑ‚TºÒ¢£ÛRF0rú,z«©pîÜ9pG%¸ñ4oÞÌo~êÔ)ôîÝû¶®dßžûn Æ…*ˆ XŠæ”D¥4TÈa3ë É'­§XJB%Qù±ê¡Öj`.ðKPžË‹°9êi ªÙM&[°Yp¸Ø{yq,ý¶ÐøY¬\0*9a=ê!Èß°a°ON:`ËÏAB,•l"–®ˆ€m°ÓûW ›—r¢~Å£cçaÇÎÓý¤h|ø4$ê” Ùãï`Bo3‚Ýó±– {Øe 5;¨ÕQ#m.œ™æ“81º0’½I¼ "'S3¼3~Ì^ÐfÈÓ˜ah†#1Ñ8½m²°kSœp`rGZ¨Ø(D}×ÊwÃo¨ôo5+ùÒûp_Æ +9[ÍKùcÖ;9Ÿ1czõê…¤¤$Á­püøq>|ì*OJJŠÆ\ ÂuX*Ž:e> Qì…ë+߯Œµá8²c1>[õ©f(hî^Ì de 7Ò6´éѯ÷û=‚.]Äéaë6íÉ yãê_Bz÷áÏ¡g#3.Ñ7 Í1P-FbM‰&'c3áИz…¹ ¶àô>î5¼<ë( /^Ç K¨’j(ǸO1wÙŸŽ|e=Ù?6”M~A ìßq`—l—Ñ©S'!޹XYJ­ÃN&&“¦<µð©Õ9ÈsoVCÔÒÏñëÁÓ_=똧¨s-? !:bsÓ"Ž“á. ŒÝÛ¿†½Ï›´™´/µÍRô…Š”Ê«ÇQБÇñ=Ë‹s¤ OÒNÇÁüáSÏÞ.€V“‹M>Œ‘tà×°}Ø¿úÁeº"±_^‹ê5^оÁžMNÖ¸.W ø6C'ŠË:Ÿep[Á°È¶)ÚùÈoÁ¢åÛ mÐ]h ——ÎÃúc'°ú›ÿ‚q½Ì&²iI>Û7`ßñ=øáëp!šöxhÞVEφ2€æH°GÃa{T*ŽÏ{ӾߊVC&ãÇï&ˆõ¤iɲv.¦ïÅp)2†’ñb¥rÒ-—»ˈ—Y±ÌçÆükÌâ:þ¼ðÇNÕgÏž &y ƒ@¬L±  ÁW?}@+ÁÖïÈç8w4¤åsщ¬‹…fF‰ 'àÚ²3úS9HF›@O4í)äð¯PZMhÔý1QÌž™£0øÕ p÷¢¼Q!E/GýÀ زö`òsaðò&^~È—ÃfâÝ«ïÁX¾h4|]DÕ7pT‘íö¾”èZµŠŠÂæÍ›…z/^ŒÔÔTÄÇÇ î†ððð²ÿ53û‰‰“ĉ,Ä"{e[C¼³ð}´¥#Æù¼‹™+N!£±vr_b\ \*w2²l%7=úâÓgÛ›„aáÎdaRíƒ.£ÂçŸ^H7n\AŽÒâ ‹¾Þ—Æ$ò ›-‚ ÂLj,´ð::SúžycúÞr67Š'×nApè_A½¸+YåÌ'A˜Ñâ“>Éœáó0|1Þ§WâågÇ`ΆH<öÎ'x*äAüß_ÈþëIS°"ü†PNøðÅkcˆ’¯oÁÇ“f!»“Ø#&Ǿo,Ä‹t(±rêË3i"máã7ÑÚ{è 5¾5 ÏN\Dó"Ñ›R"G½"úž_ÌgRØdUÞø¿2V´ª—ùÍŠœÞ–SÖqIŸ=Û?¶r2’eþ¶ÛȶD]R‰…®ÝØhûe†“w ¼ˆpMyhZ©=¥Ï#«Ïh•ÂÝÓ“&»‰¬6-¬¤P*/wò;Rùì\Ø\=i»&…U¯Zg&ÿœ&‹3|ü=)³LÈ5@mååh`“+ §­‚¼ê =žÙóR¹¼\ÚV;¹ÃÓZËË¡¾PÿŠõ¥Ä J|MKKCHHH‰Øâ_+ƒñ믿^PhõêÕ•©¢Ä³råJ@JúÙ…Ä>K ÆàˆgO©BCž‰–.gºòGþZ¬´-Ld•yz‰ó ÎcW´ qÏ!Üîžp‘Ka1h‘›_þvõïâPtüEû^Öûš5k„ÁmééŠ+d4FAwJd`´i•»ÀÇ®ÅÙÈÖgþ]–7×,ÌÅõ¯ )ÜH/én˜¨§”@í1 ¥¤ÓÒ7Èœ ×ë!wñ†—;¹¬ŒäÖÉÓCF­·Èáïqã{EÆ«ËñûË-É­ÃpµÂÅÇ®÷ÑíZ¤t¸+è¢IFç zèºm³ ŸvAFZX­Ô†…äéAòT’Îh‡“O"”;Ñ÷l Õ\v¨HfœtËÆîo¥T†J6Pé–ÌSæwRr™ýÆ€M¸vSfΪ%õ’Ò’U#Ú …Å‹.,VJ~CÚ4—š·°TåÞ*R\VKe0f÷RÙÙ¯¿þ*,^l×À2FF?üð¹¢qÓædÑÓ_‘_fÞ–­"*’'Ýo¢v(J¶Žž”çHãÏ*VZ`E·Â½<ñˆù^îá?´olëzÿ[wG8 7ÇÒòZ¸ß1æ8”'ý{3­22ã–î]’; aüÿ‘Vu€n ¿ŠÂýŽ1Ç¡" ¸÷Ò+#3~{á.É­xìÓq9ÿ.5s_VëíM¿¢ëvì6Gyá~ǘãPžôïÍ´ÊÈŒ“î½);Þ+ŽGà>E |Sâ>4G€#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-8éÖò¼]ŽG N"ÀI·NŠš#À¨-œâããk«mÞ.G€#À¨s8yyyÕ¹Aós8ÚB€»j yÞ.G€#P'p²Ùlurà|ÐŽG 6à–nm ÎÛäpê,œtë¬èùÀ9Ú@€»juÞ&G€#Pgà–n=8G€#PpÒ­ Ôy›Ž@E€»ê¬èùÀ9Ú@€[ºµ:o“#À¨³pK·ÎŠžœ#À¨ ¸¥[¨ó69:‹€lÊ”)Ó«:úŒ¸ó¸’fD}$U-\‹ùOîÁé›îhZßÍÞ #òr4ÈÕ›á¢t.èYÆù?p"Í­H¾‚¤»þbѦàÂ…x¤e¦!-­ð/_¢‚—›Ó]o¿x¤DE"QxR5|³ä\ÃÉóiðnàùÔgÌ8]‡ÓÜ¢>döò:­jpv“]9kMž–DŸ‰ÂM‹üT…ú¥MŠÆÅØtȼýQ R›qçÏ!1pËÇùsq°xûÁÔóç ¨çeÉɦK/Ìçìm8æàèöƒ04†sa£yF œíå,YW°cÿuµ DMkYa—Iߢ#ðGøŸˆwgòSp&"Vïúð(‚OaŸªÿ­êîRŽ“a¡ï…Ž_7…Ì`Â?â‡Ä·"°lÇQôk\Nȸr+~Ùƒ[L»ãÍW¡Í^w•þ¼ C¦¡…ÜìÈQ#OCj$6l(µ­=†ã¥íQ8}KÍV}‘6"öàd×ðuSL–ê«›j2dFaÇŽó¨×ís4‡Ö*ծŞ¥p¡Ý‹xÖU¼ìkØ´ügœM3ØkñÅàñ¯¢[ KíÉÓœ‰­[¶@Ûà)Ìx»l&!ÍŸ#¿ýŠc ZʧàÅN0³k¯"lÃVš C§DÒHtòÁ`Û1ü¾å2^êÔ$XŠL6]Â1ÊwVÈ7¢¹ æR~ÒŸtp vGxcʳççÃh+8·f6¶$wÇ'Óž‚‚*•ª<‘vr 66jŽÑ=«(‹* ®ŒÌjì_þ%ŠòS(0hqŠ<Š- úá½×ûóŒ’'Zw#[öDžt@cÂÐŽÏß©³¢²wä^pq§j=]àFÊ^¸vVÔTm¦qlÓ2!žÄ VÞ€1a?ï&Âm€áï|€wžë ¤žÄ°óЀ\šôE?V­9§;BèoŒÕI´3zŽýß~ó ¾¢¿YS' g#%RNüŽÿȨQÌHÖž.np¥…ªºƒ³P§3Ü”.p®"ÎÙçw#ÂàÑà ‹ÖŒÓV„Ûî©×ð“Ç¢nbûâÕH2IkOžò†èhƒ-õ*´D"Â\Ñ'"†—…¤K)P8‹6ºöÆ5¢T kßöðéð/ŒŸ0 ÃÛÕƒRéJ±„‘‹ ä%&›KË' ò¹”f¥éâðÛþ4„ŽxMäRX­ùHMˆÁ¡í+±%žø_啇èeòTKÄl\‡tÙì;؈YßáÌ®ýP÷ÚaÜŠ9„õ€<=4/}Ðkð |’ŽýŽMçåñÚP©[°îDú??|e°¤_ÀÏ«O¡Ë˜á0üq¾íÑHsK<Ðûé1TO=š•$_ªšõÉj³ÂF“ö¾õØq,^ ÷€v2b(ZûŠ“”ÉkÇ–}¸”¦¥r 4n݃†=26…`QÇ`ÓÚmBºG£ÎèÓ*s[ØÈ‚ËÁÉÍ•“'-/@ÙñEtt³ /ã2ŽD¡zð%¼öD;˜õyxña˜¶` "®êÑ,DYKòT¢U«8œk·$褰!ûúawU¯žé1‘H—v„»ÍŒ”¿® ˜µmá}Ú1Øvÿý´0‰–©ˆ‘ ’ÝoÑï×/öw£|„|í}%‚œD¤ÅϨ=›¡•4Æ€^õaÑ唫W¬¥81‚Œíröàa4Þ± ›OÜ›Ý<`p4]´Ò»ñ®>-—È%ÔtÞ®'`Ò!'WÇèÍŽ'çã|tœú5€9ç*Ö¯Ø ß.!H?´ê£1~@S$DìÇîÃg¦!¢¹Ðù¡'0°ok8[2°ç×mÈ h —´œŽ× \òèÈÿàÁ ÷ÌNmÃòØ“ˆºe â­1rÜH´°sIYv§PTѾ¸½Cê!,Ùz ¦ Þ>b0Z+Óq`õ÷8-±œ4‹ú&’5IÈ’*i…ë5f^GVB>ÜT®0§Ã×K6áz ÿ°§ÐÚ%‡6.Áïs…ÌQ¿/·ÓãC1bpO˜’Ná—…{`•0(wÊ•³¤Ð­ðPkŒ:ÔêR6ûÓF£†ÎhBÃÐöd‰ä":Å¡âÒ¤%زy%ÊÛy\ìð]ý4“eBDGÂÊþÌÞiïK$•ÄÚË[ðýÚHUuÂð1#еÞ-#|ÖŸÍ"«Ô„¬ô³HÏw#ëȈˑ‘Èκ†Ë©(ɇ—wаסA#?èS“{h'\¶¢×Ã}¤Ðà(YQŽ™Y0F Îü6‰p}„Q#…,õÖ|¿±4_`IšÅ‰P•è7t8†ô F- ‹×•ií.–Î_ƒ‹i&„öMg±ó@LAí—ÖýPiySãp¤Õ­wmÙõÐ$‘QM»¶†Õ”Ü|rU¸{ òKHÎÜIµ%Ïú-C„1Æ\ˆœtóúÅ˰)ÂèÿW2P… ¬Md¨,øa#âÓT:òQx“ ò9ߦ÷Z\»¬s÷'ÐLfA>[À¥5&MŸoÌ£´W'ïQñ B× ’"¢ q©1't™ÉÂ"Þçñ®‘Q”KºY°Ë·yáßyÀUîD˜š–„C;÷"Ú¤Bƒ OÇ/;Éèóè€áÇ¡gg¬ÅÁd ¤Æ\ÄÄ'!êØœ2´ÁÓÏ<ñÎŽe q1·pU¹zü’ýºbÀCíaÌŠÁª•'iùV¼Ê»#KׯxM¬ 4)7„Öžñ zû[Ñ­[s„ÍÙ@v†)]´BKKS*ì¤åVF6fIÑVbs&å4á莽”!÷È´6öì‚sg üsx¶[¤9ÚlÍ0pð#ð3èÑ¡‘–lÌ€ÖÉ J³¦Àg­äåçAâÑÞR3 F3d„µMâKäd…Yìu¶à‹°‘Xˆ˜lr_´¢­udÒMÈ»!?¿f|»…ý`ýI—ïFÀ©(Ä¥g"W$ êŽ©SŸ‡?YJÝÚ¶€rÞlÞsçt‚ûÖœ§‰Ü³k&R©0É,ábœ»µE<=á;ÍÜ$ˆb²TvÁû_¾€F2+Ô­¬˜¶ô(Òr¥x È¿oo!+a[ŒÁ¿Iƒ[¹Ð.Ðÿ·`öE¦£C/3aªÄ ÷§â‰±ïÊIDATF6õÝ`»ú!vdåÀÙÝI‡÷#:ñÄÛÓñT ZT=„ÝßÍÀ¾$&{Úö¦+-O³^#X…A>¤c Ì01x(˜`6Ø1“Ê ¢\Ìg/‘IkMžòÀ¦"ÝŠJ¬£/.\¢E½K[4iî†@ê_Ä¥,ô훉hZ5T=:À‹d™f?Ê’Ðä47Øn@{óm…FÙïL-\-¸yM4X>'6icâ‰Tr9lthæðåJ¡GN}g†ùr…ÿ¨¢öÞ>\‰Äuó#¨O¬ìˆ/¨÷.¼Ød¢ëŠí':F¸6$ûvgËp&þ7Ú0üeÚ¹Ù;¤j?Ÿ¾B;W*s=ül½ñɇ#ám5ÁÐ¥>þúd þŠ¿…aìF˜ª¦~0 þ”Þ­‰ >Ÿ·‡Ïe"4XP£G^ÇûCÛÂf1‘¼f`ÙÑDä¹=ý²ùÍEf@¾¹ê‰£ý@º6 Ò1X?{2ö6C«mÑuÌkh¤„ÞDi±¥¦i/–Ó( ;›£HÂö•ÿ£#¬¤$·2h)óaQz#°1hfÅãˉ °YK´éØÏOì òi»m,Ð?-’ã(‚ao³Ðak—&©Â*"™‚ÕÑ·ÚH‘IØú+q0<Ó”R ŽŒ5ÿÔÝ$ ! ½…—ëÈ/èÿHw"\4ä~1‘߯u›@9ƒL·GÐAeñ+ÉÐ7KE’ÄÝ{¸àäñKȲú!:Õ†àa¡PØŒ°ɡе®Úì\:1oJÛÝ£`óÞ©ˆ…oÈ¥cu ­ÛÁbÐBG˜z·BWZ¾õÈç $^ˆ!g¢67: Ìc tîÓÎf²É áÑq$&ûÆáÐú_p=ÉIéB-þ4ÍåÎ"ÅÕ{ ›8Wè¶’É#zlB„Z%ÛÖRhEìk5æ!Gk Ã4êí(ÕF'4 ¤ÔÒùͪe}-‰.«­üPuK—VÔÂ`ƒs@|ú^+D=޳ç.àôáxúÛŽ.#ßÂà6½)­E©i* ¥i£ÉÁ,<›ýâÄ¢F¦–ڡÓ)Vjq%|°;-®PhÂþk&v!_ޱ㈊¾„?ãéoSc¼ðþ‹ …¬0HTÒ#â[ Tµc¦v$zÚ¾é-¨O¬ËFd3³[ 7PÑ·²ÚŠŒS.#!ПUq—ƒÃÒeÍ8p›´àÆ4š€è«”F`#¢µ¢èI žŠ÷HØ»Úvöñ“çq6RMdŠÇû×ÉãÛq*Ò—HX‚gÈ÷k1d m°úmT­@R’)[ X“‹ø vŠÁð©çI2!ådý”0Ë’ž¬yÃpÌþvŸ;0¸Úö iÜf" ŽY²i™d±‘ÉâDÓ!ŸY£”Ó¬3®â–§ÝP’gçJÈ“Êå¦Ý{%!r°P]öõPN“!CÚV¦ÚÇÁ:X[ò¤ià¦ìAxx2õÛ«ÈBÏAóvͰoWöf«›:4UÁl$Ý+Š"R„¡gCéoàÚ¦å¸Øñ-4p/ÔH†gQÝacfANDf5Ñ.Äþ]ˆ,ªÛ$ –&æ&ñÓ¡&]¥ 9Ùã BÁ»óÁæ ™™¹°5$Û•úÐí_xùaÜIã6ÎÆ¢ÃÌÕBóõKÈm&ß=é?åß¹«OgQ¼!x¸E=ì ­:Ǹssµ…s…^6'»_“ê3YÌ0ÒùI!6€Œ‰À¾Äa­Kå°Ám|„žTõ£ê¤[0hjŠ:žB‡4»Ršâ¥§GâÑgÆB¦ÅŸ/AT¢}õÛ°!¡I©iCÛ‹+Œ\F“Ž®ÑØlÄÆpJUæw â]»àµqOÒ¤"å¢ týà:¸Y~²,„‡­„®Ó óF‘¯"íø/˜óûĨehE–@Á m“Ò‹:ÊH—Mh{ùøQ}±¸šlDò¡1ë7þR4ep&ÿmqàÙ+C[ÅD/•£Ç]ŽV q[ÕÆÄîxêÃN¦«-lH©7É”¤ *–ñ±©49û€vý0µiú›ÿü{= ÿúîhN¾Ã=ë)BÑ !~2rHÉXX»B=4΂ûägyXó§ý•¢FH¶…§8Ý üE  +À§EÇP Œ›õ_Ð-("Cv|±Ä‹TÎÍšùàØ©KHÒS_ìXf&±­›äY8°vEåäI¹ëµ †íø9h dýP]Êz È:.ž½†'ž¤M;ÅÓDë±-ÛÄ‹cc‹wMË“º ÿæ­¡ìÆ‰„YÃrµÂm¦øŠß‘ï×_ŒÏ*” ++àÌpýèCtJ߉ßîÄÒ° ˜ù,ù³Y{°’U!ÈÏaßöÆÅeÀÒ²^ñ4{F&G»¼ôêã4ÊèÑY\X…ŸÃc Ñi¾GÒ%hØ£TV:@ðk¦ví i׈¬Z6e7Èwع³°Õ2VÁåÚ¤£P߉Ÿ~©äèr“°kÕäÑbøh¯¦’œ‘r\TnÄ]ÄÎ_fcÿ-jÌxùV4hÛŠ&sVü´‹üÅj\?µa„¹$NÐÄ'WRždt;³Ëò$d¥LV;Ü[ GYJG~Âö¨4d%ŸÅšG¨ê&èFÖ£…üøtì]kò”ù#X)‚:‡ÂÕjÜ_Ÿ`´pgxý!$7ØUÞÛ¤yž`X{úARôïØ™@c¿=caŒ‹ù&ůN%È…Å:æ°ãé(h6“WÑŒ€"ÌãH¼[O—æØ¿ éÇE,˜õ3NÅ^'«7—Oí¼ï6‹'[ºKöUèŽDt’ÿ ±‰Ä?gcñŒŸè J™töAÃ`V»>rV»­:»~^O÷_$èÚ™Ü9匉µgѧ—Éo¥áZNuIU·ti ª$3KB;fA4¤“ì.AÄú¥ˆpTëÓ#z5Acót9Eñ¥¤Y¥* ¢<ëŽHóSI_4!4ÕK¬×°Ïh Êþv†ÿ†…ábÅÎ-ŸÄäÑ!3iÑç™Gðךpüöó’‰!¸ç hçE–YqÚãÚ´…äÄ\#It ¾[”Í0vìcX´òüò=³p)>Œ)/Ðé)mõä'd–Û†?Ô>€êb–]y⫨ŽO›M\žÕ1‡±»phðmÕOÓ}ËP/+ù^5h5p4ú©WàÏ]«pa—زO§§ñÖ &ä6È…Yê¡*\»ä‚6Ád½g#¸UàZ,)#a=MpǘèIãÆHO›Íäeߙ²4Èbø+C±fÙlZö½Ð [äz?? =ü¤Èíæû®ãðÚïÁ¤ æèÙÙÇÏ^Àü]1ó©Ç1ö1 VþŽ%ß… åÉ•“š¢ ƒTwôÙWVWNžò€æt…®^MÅ@oZåèñÜ+È\¼ŒÚ_"´o£_ð=ýÑ4w1#—¬ÇÚ’§0Px£EKwDǚѵ]¹ØSŠm3ÙhÚˆò'R¼T*ꀓŒ…ë™ɂ¥µ#Ÿnä…•8ñËtyîœS`ù×QZÑ–ãüᓸ9d˜à2³’»`ã9“¿ä+¸ˆ„ÄLœ>M‡Î¡ áLŸšæëeM„†½ŸÇK®û±vGv‡]+hRÑêQ¼Ñφ—Æ’™é¨UÐO6fÁ•dU¢C¿ž8²ñ8~ž+Îeßö=Ñ9‹Ü×c[§ÿˆ÷©ÆÈKA› !´ô†6w沸tÉõÆ‚Û Ö^ýîÑåBéüf±;„òW5H«^ІáîãC?K4 ëÝ(èNiŒdQ8)T ŸÓ¬FnŽšüå¤YEì©ò†‚¶,t¿H樗ù.éÆŽ]®tp¢"W])ÉÎÖ ÞýrA¯¥ƒ5µ›*Òé`…9Ãɹ^|PZìþf>N·‹ÙÛ"ÏnNH­f:tcë™þü¡ DE÷)æìêYØ~«fÎ|JMr+sjQUôËÈ/QxÀ×CôuÍb¥“Õ|M.ô •ƒ[ГÏÎÉÍÞ´¹"2ÍQ“ÿJ((‹§/ÜäDÔYY‚ËEîæI?vÃX0&)<|}àlÒàV®AlŽäéãK¿”ò éZJד_Ö –|-Œf'¨üÀDbÊË·Yt`&¡ëwV…+|¼UtKÄ‚’•³§'YwZ:H¢ò4™ÙÛ*á ÌJ %åÖÜÊ‚™nTNž@òŸËðóaW¼;û%xÐ1ûpaÎ×ÃLóÈÍ¿¼ÉU¤Sg ò®My::çêåWÚèÔY:ÈÒ”*_ÁwY(²ëÈš÷%pYœÆæFïrZ<²Äb’7ɇ~?M®ôã¢eÅöhªdÂìE{ÐçixÌ×*èµ# ¨hSId‘Î3}ÑÆn÷ëÎcä´oÑK•[95w?]ìÍs¥é€N˜Ó Wï‚9¯Ñ‘žºÓŽˆô„îÑOQÓÙ¡¯žÜ‚Ž2V2Ìrò‰W”‰˜ýá k3øt@ -äê݂ɢƒ³¢X;æ¹ÂÃl :Ú+“ßJÝ™¢\Ú›äúõëÅù©´\•Œs"Ç´”&ž¶·&³}/o/[^š”@¨ù‹[¨Žf%”Î~Æê5Óê[,ÐA™\¸¿GFãm„˲”—fe˜K'\V–d"k®Tðir›¨MÖn©é¬ .MÆ¿;8ãÝÍsu*Â$TV–YéŽØä‹‘poýo kíJ ¢U-Öro~Z p/gRUk×iKJ„f$«ööùÀÒhñ³.kÖj)$\ö]”'åq°0‹t„Jʲ Õ7NGAê^ìÄ„¶ïv}° ôŸ&OÕñ L¿jÓ_DŒÎUXˆÊªÓ’ƒ(c3¼þ|WÚºhkpYI˜™˜Ý®`e )V‰2dÐí¹üèÖ 3YÝB½¥é^Ù5 )åqXE‹%W«¥[¬æ{ò £{Ñ¿ÖDWÒ²4â}À²ºéìá •“·²ézTY™x|­# UªàC·5[ä²:T§åIî/_w˜rÈ­ápM•”„~XäëåL[êìÂ,¥äûÇE1w™¹<õÏûš›$!!sJM ÍÛàp8„@µº8¢ŽG€#P>U¿2V~}<•#ÀàpÊA€[ºå€Ã“8Ž@u#À-ÝêF”×ÇàpÊA€[ºå€Ã“8Ž@u#ÀI·ºåõq8ràî…rÀáIŽG ºød-Ní$Íú„IEND®B`‚dipy-0.10.1/doc/devel/gitwash/forking_hell.rst000066400000000000000000000021771263041327500212570ustar00rootroot00000000000000.. _forking: ====================================================== Making your own copy (fork) of dipy ====================================================== You need to do this only once. The instructions here are very similar to the instructions at http://help.github.com/forking/ |emdash| please see that page for more detail. We're repeating some of it here just to give the specifics for the `dipy`_ project, and to suggest some default names. Set up and configure a github account ===================================== If you don't have a github account, go to the github page, and make one. You then need to configure your account to allow write access |emdash| see the ``Generating SSH keys`` help on `github help`_. Create your own forked copy of `dipy`_ ====================================================== #. Log into your github account. #. Go to the `dipy`_ github home at `dipy github`_. #. Click on the *fork* button: .. image:: forking_button.png Now, after a short pause and some 'Hardcore forking action', you should find yourself at the home page for your own forked copy of `dipy`_. .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/git_development.rst000066400000000000000000000003401263041327500217670ustar00rootroot00000000000000.. _git-development: ===================== Git for development ===================== Contents: .. toctree:: :maxdepth: 2 forking_hell set_up_fork configure_git development_workflow maintainer_workflow dipy-0.10.1/doc/devel/gitwash/git_install.rst000066400000000000000000000011071263041327500211150ustar00rootroot00000000000000.. _install-git: ============= Install git ============= Overview ======== ================ ============= Debian / Ubuntu ``sudo apt-get install git-core`` Fedora ``sudo yum install git-core`` Windows Download and install msysGit_ OS X Use the git-osx-installer_ ================ ============= In detail ========= See the git page for the most recent information. Have a look at the github install help pages available from `github help`_ There are good instructions here: http://book.git-scm.com/2_installing_git.html .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/git_intro.rst000066400000000000000000000010311263041327500205760ustar00rootroot00000000000000============== Introduction ============== These pages describe a git_ and github_ workflow for the `dipy`_ project. There are several different workflows here, for different ways of working with *dipy*. This is not a comprehensive git reference, it's just a workflow for our own project. It's tailored to the github hosting service. You may well find better or quicker ways of getting stuff done with git, but these should get you started. For general resources for learning git, see :ref:`git-resources`. .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/git_links.inc000066400000000000000000000063641263041327500205420ustar00rootroot00000000000000.. This (-*- rst -*-) format file contains commonly used link targets and name substitutions. It may be included in many files, therefore it should only contain link targets and name substitutions. Try grepping for "^\.\. _" to find plausible candidates for this list. .. NOTE: reST targets are __not_case_sensitive__, so only one target definition is needed for nipy, NIPY, Nipy, etc... .. git stuff .. _git: http://git-scm.com/ .. _github: http://github.com .. _github help: http://help.github.com .. _msysgit: http://code.google.com/p/msysgit/downloads/list .. _git-osx-installer: http://code.google.com/p/git-osx-installer/downloads/list .. _subversion: http://subversion.tigris.org/ .. _git cheat sheet: http://github.com/guides/git-cheat-sheet .. _pro git book: http://progit.org/ .. _git svn crash course: http://git-scm.com/course/svn.html .. _learn.github: http://learn.github.com/ .. _network graph visualizer: http://github.com/blog/39-say-hello-to-the-network-graph-visualizer .. _git user manual: http://schacon.github.com/git/user-manual.html .. _git tutorial: http://schacon.github.com/git/gittutorial.html .. _git community book: http://book.git-scm.com/ .. _git ready: http://www.gitready.com/ .. _git casts: http://www.gitcasts.com/ .. _Fernando's git page: http://www.fperez.org/py4science/git.html .. _git magic: http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html .. _git concepts: http://www.eecs.harvard.edu/~cduan/technical/git/ .. _git clone: http://schacon.github.com/git/git-clone.html .. _git checkout: http://schacon.github.com/git/git-checkout.html .. _git commit: http://schacon.github.com/git/git-commit.html .. _git push: http://schacon.github.com/git/git-push.html .. _git pull: http://schacon.github.com/git/git-pull.html .. _git add: http://schacon.github.com/git/git-add.html .. _git status: http://schacon.github.com/git/git-status.html .. _git diff: http://schacon.github.com/git/git-diff.html .. _git log: http://schacon.github.com/git/git-log.html .. _git branch: http://schacon.github.com/git/git-branch.html .. _git remote: http://schacon.github.com/git/git-remote.html .. _git rebase: http://schacon.github.com/git/git-rebase.html .. _git config: http://schacon.github.com/git/git-config.html .. _why the -a flag?: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html .. _git staging area: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html .. _tangled working copy problem: http://tomayko.com/writings/the-thing-about-git .. _git management: http://kerneltrap.org/Linux/Git_Management .. _linux git workflow: http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html .. _git parable: http://tom.preston-werner.com/2009/05/19/the-git-parable.html .. _git foundation: http://matthew-brett.github.com/pydagogue/foundation.html .. _deleting master on github: http://matthew-brett.github.com/pydagogue/gh_delete_master.html .. _rebase without tears: http://matthew-brett.github.com/pydagogue/rebase_without_tears.html .. _resolving a merge: http://schacon.github.com/git/user-manual.html#resolving-a-merge .. _ipython git workflow: http://mail.scipy.org/pipermail/ipython-dev/2010-October/006746.html .. other stuff .. _python: http://www.python.org .. |emdash| unicode:: U+02014 .. vim: ft=rst dipy-0.10.1/doc/devel/gitwash/git_links.txt000066400000000000000000000070171263041327500206040ustar00rootroot00000000000000.. This (-*- rst -*-) format file contains commonly used link targets and name substitutions. It may be included in many files, therefore it should only contain link targets and name substitutions. Try grepping for "^\.\. _" to find plausible candidates for this list. .. NOTE: reST targets are __not_case_sensitive__, so only one target definition is needed for nipy, NIPY, Nipy, etc... .. PROJECTNAME placeholders .. _PROJECTNAME: http://neuroimaging.scipy.org .. _`PROJECTNAME github`: http://github.com/nipy .. _`PROJECTNAME mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. nipy .. _nipy: http://nipy.org/nipy .. _`nipy github`: http://github.com/nipy/nipy .. _`nipy mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. ipython .. _ipython: http://ipython.scipy.org .. _`ipython github`: http://github.com/ipython .. _`ipython mailing list`: http://mail.scipy.org/mailman/listinfo/IPython-dev .. dipy .. _dipy: http://nipy.org/dipy .. _`dipy github`: https://github.com/nipy/dipy .. _`dipy mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. git stuff .. _git: http://git-scm.com/ .. _github: http://github.com .. _github help: http://help.github.com .. _msysgit: http://code.google.com/p/msysgit/downloads/list .. _git-osx-installer: http://code.google.com/p/git-osx-installer/downloads/list .. _subversion: http://subversion.tigris.org/ .. _git cheat sheet: http://github.com/guides/git-cheat-sheet .. _pro git book: http://progit.org/ .. _git svn crash course: http://git-scm.com/course/svn.html .. _learn.github: http://learn.github.com/ .. _network graph visualizer: http://github.com/blog/39-say-hello-to-the-network-graph-visualizer .. _git user manual: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html .. _git tutorial: http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html .. _git community book: http://book.git-scm.com/ .. _git ready: http://www.gitready.com/ .. _git casts: http://www.gitcasts.com/ .. _Fernando's git page: http://www.fperez.org/py4science/git.html .. _git magic: http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html .. _git concepts: http://www.eecs.harvard.edu/~cduan/technical/git/ .. _git clone: http://www.kernel.org/pub/software/scm/git/docs/git-clone.html .. _git checkout: http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html .. _git commit: http://www.kernel.org/pub/software/scm/git/docs/git-commit.html .. _git push: http://www.kernel.org/pub/software/scm/git/docs/git-push.html .. _git pull: http://www.kernel.org/pub/software/scm/git/docs/git-pull.html .. _git add: http://www.kernel.org/pub/software/scm/git/docs/git-add.html .. _git status: http://www.kernel.org/pub/software/scm/git/docs/git-status.html .. _git diff: http://www.kernel.org/pub/software/scm/git/docs/git-diff.html .. _git log: http://www.kernel.org/pub/software/scm/git/docs/git-log.html .. _git branch: http://www.kernel.org/pub/software/scm/git/docs/git-branch.html .. _git remote: http://www.kernel.org/pub/software/scm/git/docs/git-remote.html .. _git config: http://www.kernel.org/pub/software/scm/git/docs/git-config.html .. _why the -a flag?: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html .. _git staging area: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html .. _git management: http://kerneltrap.org/Linux/Git_Management .. _linux git workflow: http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html .. _git parable: http://tom.preston-werner.com/2009/05/19/the-git-parable.html dipy-0.10.1/doc/devel/gitwash/git_resources.rst000066400000000000000000000034221263041327500214630ustar00rootroot00000000000000.. _git-resources: ============= git resources ============= Tutorials and summaries ======================= * `github help`_ has an excellent series of how-to guides. * `learn.github`_ has an excellent series of tutorials * The `pro git book`_ is a good in-depth book on git. * A `git cheat sheet`_ is a page giving summaries of common commands. * The `git user manual`_ * The `git tutorial`_ * The `git community book`_ * `git ready`_ |emdash| a nice series of tutorials * `git casts`_ |emdash| video snippets giving git how-tos. * `git magic`_ |emdash| extended introduction with intermediate detail * The `git parable`_ is an easy read explaining the concepts behind git. * `git foundation`_ expands on the `git parable`_. * Fernando Perez' git page |emdash| `Fernando's git page`_ |emdash| many links and tips * A good but technical page on `git concepts`_ * `git svn crash course`_: git for those of us used to subversion_ Advanced git workflow ===================== There are many ways of working with git; here are some posts on the rules of thumb that other projects have come up with: * Linus Torvalds on `git management`_ * Linus Torvalds on `linux git workflow`_ . Summary; use the git tools to make the history of your edits as clean as possible; merge from upstream edits as little as possible in branches where you are doing active development. Manual pages online =================== You can get these on your own machine with (e.g) ``git help push`` or (same thing) ``git push --help``, but, for convenience, here are the online manual pages for some common commands: * `git add`_ * `git branch`_ * `git checkout`_ * `git clone`_ * `git commit`_ * `git config`_ * `git diff`_ * `git log`_ * `git pull`_ * `git push`_ * `git remote`_ * `git status`_ .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/index.rst000066400000000000000000000003551263041327500177170ustar00rootroot00000000000000.. _using-git: Working with *dipy* source code ================================================ Contents: .. toctree:: :maxdepth: 2 git_intro git_install following_latest patching git_development git_resources dipy-0.10.1/doc/devel/gitwash/known_projects.inc000066400000000000000000000027101263041327500216130ustar00rootroot00000000000000.. Known projects .. PROJECTNAME placeholders .. _PROJECTNAME: http://neuroimaging.scipy.org .. _`PROJECTNAME github`: http://github.com/nipy .. _`PROJECTNAME mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. numpy .. _numpy: hhttp://numpy.scipy.org .. _`numpy github`: http://github.com/numpy/numpy .. _`numpy mailing list`: http://mail.scipy.org/mailman/listinfo/numpy-discussion .. scipy .. _scipy: http://www.scipy.org .. _`scipy github`: http://github.com/scipy/scipy .. _`scipy mailing list`: http://mail.scipy.org/mailman/listinfo/scipy-dev .. nipy .. _nipy: http://nipy.org/nipy .. _`nipy github`: http://github.com/nipy/nipy .. _`nipy mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. ipython .. _ipython: http://ipython.scipy.org .. _`ipython github`: http://github.com/ipython/ipython .. _`ipython mailing list`: http://mail.scipy.org/mailman/listinfo/IPython-dev .. dipy .. _dipy: http://nipy.org/dipy .. _`dipy github`: https://github.com/nipy/dipy .. _`dipy mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. nibabel .. _nibabel: http://nipy.org/nibabel .. _`nibabel github`: http://github.com/nipy/nibabel .. _`nibabel mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. marsbar .. _marsbar: http://marsbar.sourceforge.net .. _`marsbar github`: http://github.com/matthew-brett/marsbar .. _`MarsBaR mailing list`: https://lists.sourceforge.net/lists/listinfo/marsbar-users dipy-0.10.1/doc/devel/gitwash/links.inc000066400000000000000000000001611263041327500176640ustar00rootroot00000000000000.. compiling links file .. include:: known_projects.inc .. include:: this_project.inc .. include:: git_links.inc dipy-0.10.1/doc/devel/gitwash/maintainer_workflow.rst000066400000000000000000000060001263041327500226620ustar00rootroot00000000000000.. _maintainer-workflow: ################### Maintainer workflow ################### This page is for maintainers |emdash| those of us who merge our own or other peoples' changes into the upstream repository. Being as how you're a maintainer, you are completely on top of the basic stuff in :ref:`development-workflow`. The instructions in :ref:`linking-to-upstream` add a remote that has read-only access to the upstream repo. Being a maintainer, you've got read-write access. It's good to have your upstream remote have a scary name, to remind you that it's a read-write remote:: git remote add upstream-rw git@github.com:nipy/dipy.git git fetch upstream-rw ******************* Integrating changes ******************* Let's say you have some changes that need to go into trunk (``upstream-rw/master``). The changes are in some branch that you are currently on. For example, you are looking at someone's changes like this:: git remote add someone git://github.com/someone/dipy.git git fetch someone git branch cool-feature --track someone/cool-feature git checkout cool-feature So now you are on the branch with the changes to be incorporated upstream. The rest of this section assumes you are on this branch. A few commits ============= If there are only a few commits, consider rebasing to upstream:: # Fetch upstream changes git fetch upstream-rw # rebase git rebase upstream-rw/master Remember that, if you do a rebase, and push that, you'll have to close any github pull requests manually, because github will not be able to detect the changes have already been merged. A long series of commits ======================== If there are a longer series of related commits, consider a merge instead:: git fetch upstream-rw git merge --no-ff upstream-rw/master The merge will be detected by github, and should close any related pull requests automatically. Note the ``--no-ff`` above. This forces git to make a merge commit, rather than doing a fast-forward, so that these set of commits branch off trunk then rejoin the main history with a merge, rather than appearing to have been made directly on top of trunk. Check the history ================= Now, in either case, you should check that the history is sensible and you have the right commits:: git log --oneline --graph git log -p upstream-rw/master.. The first line above just shows the history in a compact way, with a text representation of the history graph. The second line shows the log of commits excluding those that can be reached from trunk (``upstream-rw/master``), and including those that can be reached from current HEAD (implied with the ``..`` at the end). So, it shows the commits unique to this branch compared to trunk. The ``-p`` option shows the diff for these commits in patch form. Push to trunk ============= :: git push upstream-rw my-new-feature:master This pushes the ``my-new-feature`` branch in this repository to the ``master`` branch in the ``upstream-rw`` repository. .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/patching.rst000066400000000000000000000076451263041327500204160ustar00rootroot00000000000000================ Making a patch ================ You've discovered a bug or something else you want to change in `dipy`_ .. |emdash| excellent! You've worked out a way to fix it |emdash| even better! You want to tell us about it |emdash| best of all! The easiest way is to make a *patch* or set of patches. Here we explain how. Making a patch is the simplest and quickest, but if you're going to be doing anything more than simple quick things, please consider following the :ref:`git-development` model instead. .. _making-patches: Making patches ============== Overview -------- :: # tell git who you are git config --global user.email you@yourdomain.example.com git config --global user.name "Your Name Comes Here" # get the repository if you don't have it git clone git://github.com/nipy/dipy.git # make a branch for your patching cd dipy git branch the-fix-im-thinking-of git checkout the-fix-im-thinking-of # hack, hack, hack # Tell git about any new files you've made git add somewhere/tests/test_my_bug.py # commit work in progress as you go git commit -am 'BF - added tests for Funny bug' # hack hack, hack git commit -am 'BF - added fix for Funny bug' # make the patch files git format-patch -M -C master Then, send the generated patch files to the `dipy mailing list`_ |emdash| where we will thank you warmly. In detail --------- #. Tell git who you are so it can label the commits you've made:: git config --global user.email you@yourdomain.example.com git config --global user.name "Your Name Comes Here" #. If you don't already have one, clone a copy of the `dipy`_ repository:: git clone git://github.com/nipy/dipy.git cd dipy #. Make a 'feature branch'. This will be where you work on your bug fix. It's nice and safe and leaves you with access to an unmodified copy of the code in the main branch:: git branch the-fix-im-thinking-of git checkout the-fix-im-thinking-of #. Do some edits, and commit them as you go:: # hack, hack, hack # Tell git about any new files you've made git add somewhere/tests/test_my_bug.py # commit work in progress as you go git commit -am 'BF - added tests for Funny bug' # hack hack, hack git commit -am 'BF - added fix for Funny bug' Note the ``-am`` options to ``commit``. The ``m`` flag just signals that you're going to type a message on the command line. The ``a`` flag |emdash| you can just take on faith |emdash| or see `why the -a flag?`_. #. When you have finished, check you have committed all your changes:: git status #. Finally, make your commits into patches. You want all the commits since you branched from the ``master`` branch:: git format-patch -M -C master You will now have several files named for the commits:: 0001-BF-added-tests-for-Funny-bug.patch 0002-BF-added-fix-for-Funny-bug.patch Send these files to the `dipy mailing list`_. When you are done, to switch back to the main copy of the code, just return to the ``master`` branch:: git checkout master Moving from patching to development =================================== If you find you have done some patches, and you have one or more feature branches, you will probably want to switch to development mode. You can do this with the repository you have. Fork the `dipy`_ repository on github |emdash| :ref:`forking`. Then:: # checkout and refresh master branch from main repo git checkout master git pull origin master # rename pointer to main repository to 'upstream' git remote rename origin upstream # point your repo to default read / write to your fork on github git remote add origin git@github.com:your-user-name/dipy.git # push up any branches you've made and want to keep git push origin the-fix-im-thinking-of Then you can, if you want, follow the :ref:`development-workflow`. .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/pull_button.png000066400000000000000000000311351263041327500211330ustar00rootroot00000000000000‰PNG  IHDR~\iÉÞu pHYs  šœ IDATxí]|TÅÖÿoß”MHH€ ¡„–P¤KTôå,€¢"ÊS, Oð‰øÀ§‚}€%"]zï„HR’@©›dûîwæÞ½ÉfIBB$a&¿Ý{ïÔ3ÿsæÌ™3s72ðÀàp8÷ òû¦§¼£ŽG€# À?ŽG€#pŸ!Àÿ}ÆpÞ]ŽG€#À?—ŽG€#pŸ!Àÿ}ÆpÞ]ŽG€#À?—ŽG€#pŸ! ¬ýµÛíHKKCVVVuèN¹ûP£F øûûC./y>çx•bpŒËÝßU’óìVäeÕáÿÍ›7Á”™——×­=¼ObØëyyy‚Ò(±×¯á)6‘c\,4÷lçYѬ)Ù4,ºÌ=› {Ž®Ê$H&“ 0,n8^·C¨ètŽqѸÜ˱œgEs§Z¸zl6ƒÙì~?†Ãâvãu;„ŠOçͽšÂyv+gª…Åk·x G€#Àà‡À}¯ø÷ìÙƒ©S§âÔ©Sª¡8 xyò$¾ûî;¶wß}­Zµ*—ø¸.6.O[ÑB$É´ÜÓ r)›ÉÄ»›BñúèÕ? Z}|?¢·ÌìÐøê©à¢qu'ò.=ËIXHéG.AŸÖ0[ŠäráÖïgcÇŽN,Y²Dx_è³Ï>ãŸkðññøÆ®£GÆ ËÏŒÌüàù¡SÿNð3^Ƕ½QXöÙ+PmÀˆæÞùY+ô†úïÊëê¡øË³\ÙK_,?~\ø°û‘#GB¡PN$,þÌÆÕì"†¸EØŸø úùAÉÇ~ǧ³¾GLVs<ÒYʘ¯ìÀÄ™›àR7ï†>øŒÙ'—,Æîo<5ú#¼3( fèa0¨`¡9—·ÍÃÌUI ¶l>‚õº`ÂŒOлaå½£páÂ0e‚Œ™3g‚ýgxôéÓŸ~ú©°Zb>é1cÆ iÓ¦E*(O§¥_€ˆË)óÞ…ä:á8·G|ÐåÙ ˜<Ì ó'þêg>Ää!AŸ>; Ýñù¬Ðoœ‡©áÉxýËéMÛ9³gáH¼¾Áí0tÌÛèaÙ‚.I FøpìÌŸ3W6bά¯Ä|Íû`ü„ñx´Àh‹üs &îÞ‡ýĶ?×ÞEëKÂ+î–½X4þ|aµÉdŽ#,0œÙÉ+‹åöVC‹ÁSðùȦ°Ù³ñÓоøþÚÄÛÿqÿ‡?ð$¾ú`¼ —0oÂt˜žœŠñ$WR spÒ-ÍÐ.÷Ëð‘µй³þv›Žøõxè3‘šk§‡Ñ;~ÂŒO– –òÖëú>ú`4Â|•H>ŽOg, ±ŒO5Eâ… ô›4}±ïLZ'æÌÅ &^ø‹xùÙz`ê¼ h‚«Xñål,ÙCãÙÉbM8Ö´³øvæ—XIÅù:Æ?ÿ–½? ‚ öã$̯?c{Õ+èÇ]º“ŒD•J___Lš4 ÿú׿hÜ„5 &Ož ö ËË^¢d Ÿåg|tUþ"¶¯â?Ÿ¿5ñyâÉŸ0pÜwXº&£¦<ŒÄÓ[ñ¯?G›W¨ßÃirToV|ô)ö{<†¯¦Á•å3ðïmÀÛßLA»Œmxsâ <ôág>ü6'Õ@Ù9l>œ€à.#0}ÚH4tÅ…x-w}¾_î™Ò_·nÀ Æ ºuë¢~ýú1búöí{‹Ò‡õÖ®#…Ò`4–|ó†ÓêÍÑÐ(è6yžÿà{Äf¶ÀðÑmñ×^g°“][lè?¼2ãwaÎgs xøqt”'`ýœoqѪ‚!!§îC¦McÊÄÆÁ–¨ZxçþÈL8‚Ϧm‚E)*©î»ueî/f…JÖÌàÁƒ¥ÿÞ{ï žžžŽÇ{LhžÝÏž=ÌWZ¥§Ë€ó±8¼y3ÿñ6ž Αðéø3ÝŸ”L¶¬‚Ù‡?wÇ öè$ZM¸°s¼Ñ¬^ ¦ŒŸ…£ú¾˜þÕ tɉÀ’)Ÿ"­NKtoï+Щw+ÚNàµ7æÒo‡ÑG@³ŸŸ‡2§Ø_Û ¿>òÛÞtÅ‚Ê@™Yƒ¯½öš``0…À”<›\™"aJ‚)Ï¬Ê &ùŠÃ57íâ®"êÈ&¢IÐ! €¯R´s±ˆ=o€‡§°Ö±ñ8Ÿ)ƒ— ´ÅÕV8Þ‘xk÷ìÂÖmâÇe…ÄÐ:žäÎü #Hé§ôxÓ§Œ‡âp8Æ¿ú²Rh,¼·@ #Þ膣kw òŸ)Ó@åÈ¤É ™r-­„e0gœG|ì)Ø<ìXõáH,ÙŒ?™Žñýåø}ÖXr.»æLÀÚÓzŒý|¦<«Ãæ%Ÿ`ãU Â:·Ù\@‹‡Ñ¾Q <5•g¿JtPPÞxCÔŒvß°aÃ|Ý!R~–§p0ÁHÖ?[áiµB[&xÑI0fÁh’íÈÌ0Œ›2OÇcÅg¯ÔÖÆàâ®H¶çàÌÖ]H }r6Ñ€äÓ[“†Íë#=æ("ŽlATà“÷D ÄYŽi\„«úÝ܇ÊC¬p¯+ô‰Ù*ÐÅUÌÒÙ úæ›oŸí‘GÁ+¯¼’ÿÌfköq¡³NlÇaj¤A¯6 “!”ÔCÔ¢õ¸1jò"÷ e‡/øïtòÅ íôñJ!ŽšÂøÿ}‰W[^BäŠ8Õr<>o$b}"1b P³ÏddpyC#WÀ.”©Ë?E'ï\÷lÇ‚\´Zزó\m4±r·og“n±…Yžâðr·2®yÙ^ˆû» /&à욟×*ºS¤–Y|!ÚœàÔi¦è„ÜÖ&¬µrEž|¦v¯9‡#' ¢eçÈÀ™ˆH\Ž|‡=‰Æ0iö;Ø‘†øÓû@F%!¨ƒ_ËAÚm62bøKý ?þ ( #¾ùãºù`H».ˆÍÒ¢¦‡ƒ þ#æãÓ‘Ýõ`6Ö¿¾”¬fO‡¤ôŸ< ͨOˆÔzÒde Ÿ³ðð/m È„<@Π¶soÿΛXy³É’ÉÅÃîKŠcéî¡Ás30oáO›IºZõèM}5§ R”-AnÉJÀiz$äÊHlY3°"òç÷1jî^ì8‡ÎýƒÆA:¨ ëG߃î¶Z¨‘µE¬_EøÆrr¸•ŠV $ñ1Wéú€,PêßT?M†!ý1v\wø¶¨'Ÿÿ¦_w :þþ\½—db5n¨þÀ»íM°Q^&SZ š,™®h×® K˜nq7’„Îû¥m±P?€´ÈÃüÚ…Á3ïPBK2}’G“6I©jwêMFç:,ú`*üLÑŠ©³§à<¥†Žì-ð‰¼r$PjZaY Ï4çlþ/,y&qò-[$e]Ôuß¾}'AB¾ÒW«Õ‚Òg§yÃL&“ ¸˜•%1/¿®ÌHüÆÌ}ÿ§0—üÞ è3wòSJ¿­;ŽFÎc ß~1{NìÄ¿?\ê‚ 8ø\"à`‡}H`œãÒ5‰%zf40>Š•-‰|ÚŠy–Jw-©<ëË–-1}úttëÖ ñññ‚‹çðáÃØ¿?ØqÃ7niÌÍ#)}÷‰Ó¡¨ƒúd:Ò—á­¿âصøhÚ¤níá)öU8ûäì‡D¯_«NâÒ—"Âzö@—vMÅ$Y/ô ­Œkgß²ßCC0¨[mÄŸev= ÚLgÁ!KÄ©£±ÐÖ®#_<*Jz¦Pp•.– ÕËŒA"Ó©á)(5§K—Òñ@Ë0±Mm´ëÐ×þŽÅ?_@­‡ºñ‹æ~‡}'v £¶áçU8´k ¾ßÍ~Z„(ò®¾t—n@–ÐPuáß/Áù›7ðí 1øfÃM |ó_˜7®£P>1Ý/…°fÀù³G›n, »˜ñ õK¨ „/)_QW©KcAÊÃt³òÙ‡ÝKñÅå—°EÔVÌûþG,]0Ã>\!dùD6±]4}.öœ>Žå_ÌF¥¶ «MX5G¯fNY {Ý;·’šÁÀG›Àa1 ¢ÉZ*,×RæÀf-ª¿ÅÏN¡°súlff–*ÛÈe0ÌÒgJŸ1Œ)»âÂ#Ûà3½Ú6€fKG³¡èûÅzìܰ W&}Ž9£cÒâp¼ÿNA-ê‚[²ŠXP¢&ɹÌ[´‚¶¤u.lNwÎËÂ}áM=Ù]ÚègTÌšg¾h†Sú§OŸ„ºgÏž`&Ûôeùؤ) |áº4xnÎwH{ó ü±n>X'¦öŸ¸¯µõ†5Ý!¸È‹Q(0¬Mз³"d ]H001ß¿þýÐ\kƒ©a/<¼á[§`0->BƒkGà8.ÆТVU‹o߯[Â1㥓˜²l&¾IUÐFÙû˾B[ßËð"^°¶.®Wž"ê.=¼øâ‹øá‡„REÅIi®W¥ÒiM“b–¬6WW/ŒŸ§.Ç×ïMDýv¡T”~¹ÖkÉg ÷Ž;DY½(4(ª«såy#îjŽ™¯¤á“Ÿ¦â¹e”‰pðÝh´n£Ã—/Ä?ÿWx,°j¼[ ÀˆÐŸ±|ë\LÜŒ°údÅ1¹¯‹qßÌ@ê„)˜2j8ËŠ}'`ìã‘£|›§ü†‰Ãv ñ¨ÿ(Æ j™Æ:/Ø}ßâÅZaØ;¾,¢TÌw¿î(¶ÌíæpDá÷ÅQBU2Z‹}°d.†µ­s^_|÷~Þø÷j¼?^4í‡IÁaÌAç'Á¯v¡Wûø>‹®T×aÇSèâ ‹Iô)¸ê Ö–4Æ$^+ƒ0ÃËÍܹ£^ý=…™´NѺs§ ""]ºt–ÓÌg:eÊa3—Y«Lé»ûNÝ˳g¥‡/tZ9llvž4À”ðñÓAAslnf6L4‰ØÔ¾¬Á–²b°äf"^ðõ¢}ºÏ±¨áSà »™Y9P{ù“].ýœ´Ã£¼Õäž {µ'Å›írxÓ)ªŽ‘帬¤V _“’’ßcáØÂO%áU8§ècîæ“\Ld˜Ò—VHîe =S9SnLé¨H'?læ<èsi¥M?_Âæ\dåš!W{`Ež_hi=lÒ3=à§ÓÀa3"+›|º$ÐVr—yøÀ›üòÌW*'¶9' ¹VòijiQ«€ð4ši#Í*‡Ž,cò„=YÈ#^ßvÑ–’Ô¯;Åøõ×_—ª*Õõ—_~;^ëd*/ÔðVÃîÄÏ==«•¦m–§¸|,¾:ñ«Z(þÒ cóë—ÄàÒÖÅóq8¥@€,‹Óo]ŠÜÈÒâUÙôW…ö8ÆUK…iä<+Œ{ª?ûí öÿfïçÿ¹Ë˜É0`XÜ.p¼n‡Pñéãâ±¹WS8ÏnåLµ8ÎÉftv\+£à¨Â­=½büüü„c­ìNIãU:%§qŒKÆç^Lå<»•+ÕBñßÚ-Ãàp8Å!P²iX\)Ïàp8U®ø«,ë8áŽG |pÅ_>Üx)ŽG€#PeàŠ¿Ê²ŽÎàpʇWüå×âp8U®ø«,ë8áŽG |pÅ_>Üx)ŽG€#PeàŠ¿Ê²ŽÎàpʇWüå×âp8U®ø«,ë8áŽG |pÅ_>Üx)ŽG€#PeàŠ¿Ê²ŽÎàpʇWüå×âp8U®ø«,ë8áŽG |pÅ_>Üx)ŽG€#PeàŠ¿Ê²ŽÎàpʇWüå×âp8U®ø«,ë8áŽG |pÅ_>Üx)ŽG€#PeàŠ¿Ê²ŽÎàpʇWüå×âp8U®ø«,ë8áŽG |pÅ_>Üx)ŽG€#PeàŠ¿Ê²ŽÎàpʇ€òòåËå+ÉKq8Ž@•D@Y£F*I8'š#Ààpʇwõ”7^Š#ÀàTY”‡£ÊÏ çp8²#À-þ²cÆKp8*WüUš}œxŽG€#Pv¸«§ì˜ñŽG J#À-þ*Í>NP{@)#mé°qç57 Bå"hC<á›jE@ O>ŒÇ§ÏÆ"ÓªC€:¿Ÿ9ñш¸˜ /1g.Áæ%§O_…¦V´Îþä0$ãt¤3ŸÔÙüDé&ÿÜ S݆ðWT`3k–A-•sprëNdÕl€íßg³˜Ó.áÀÎ8x"g¢/!Eoƒ.0žƒ¥nUØÕ†+§áZ®jûU¼ŒW™¼¢*ƒ@¹\=¦ÄSXµþX‘¬Ûe(^ت¢Èlé0áTø:íø2¾hä“ÅVquSM¦Ô(lÜxµ:}†Æ0Á^¦Ús°uÑ*œiõ žóÔ 7ã Ö,ùI&g-51xìkèä¹/’Žþ‚Õõcxß2¶S&¢Ü2[qyïZìHòAÍ©¢‘Âö#É‘›°z[Pw¦¿Ù õœïß~Æ!} _lH2pmýÂ0Øq¬;WÛ¶q6—_1\=Dù"„|Ã+`-â'Bâ÷þ‚-Çü0é9Tyy0ÛÅ "™…u ñÑÔAЕj¡Î>€Ÿ—{`Æ„‡ápmÈ­Wwë1þÐX¼õ¬X½Z˜Mˆ9½0t´ö§¸Š$ãQ«6âh§@<ÔÜFsÅÊxE“Ëë»÷(ŸÙ¤mÒ®/}„ÿ|ù%fÓgæ”7еž7ŽüÿIAÝv÷APz¾^ðÔT¼­¬êTÃKëuÑÊ8½ÇL: Ú,{+N¬Z*(ýVƒÆàãw_BnâÏ+o¡ŠAxbPSĬþÉŠò¬-Ê‹³¡B‰_zÄeÊ úhÆ• qB…Žë—ªÐŠü´$㲞¢Cz¢eÇgðæø‰Úª´ZOŠ$Œ<< rc¼GÓû†˜ÏÃŚϧÖp ¿íLBËaÏ J»=‰Wc°ïÏeXG¿îðñ†Î ô­{ÚÔØô—±ReŒÑk¸ºUTú>íñÆg_bþúÌ›‹F>-ñråOG`‘V'ù¬˜%­°|<|à¡®x¯ y-U rYü’ѦòöÝf†Éd…LYǾÓÌy8¹™–ã€ÎdAZÌ>¬\µ If‚Eínƒ‡¡ÿƒA°$Ãâ_N¡Í³/£[°liQøyÅNxvyC;Sæì[¶×>ÞÚSX÷—ݰmç1ä˜d¨Óêq¼<ô!x1Ì>d4Ùvº:ŠmS`Œ- ‡þ܈½—É6tµ›¡çÀAx¨¡¯˜œƒ5¿nÀ¹¤èêµCÏfy9ØòÚA–¬7NnÃÊ­‡Î kjã‘aÏâá&5…²…¿R°nõhÛ¼‚6^6䦜Çh3|zc´‚Õ˜‹WÞ‚©ó×á)±0;ôBý‹±öHÆwÒÁäb9®»bŸj…4§ c›ˆuɰ¿ŽÓñhjÁtó/œ¿nF¿šè“®!‰ÔmH›¦PÝèÐH‹¤s›°ä`"änfVÔÚbÛl8µâl#¥ß Ç@ {º/|3c±éG²º™wÛ|‹¾þg“,hÙç42G`Ó®˜|lÌ7öaáúC°wÇÐaƒÑ\›Œ]T߉ 7"¨„9ñ®’ìÔ=ŒÜ$Fèãã‘Nñm:6‡Ý’‡ì!ócÊ)Ìÿv5.“ëè©gûBgNÈϧV¸ã”ƒ+çõPw€… yF+àѧÍÂæÏD_š‹ÉËáëÒäã ®˜ÈEæ–z×ÍqˆL’Á§ËhåI´fë¥/¶ç@“ã1û«ÐÊ[Ix˜˜}›¶!Ú⃺uëB•¼?m"ƒA÷ †‚®ÁVDìú{lÂÊÅ”yñçcÛ¡tôxúèbÁ¹]?céa6ÕJZI˜bvb×y-z=ÞÁ=¬\Œ£Šd­ôry×ðáW)Êiñ‹ˆhƒ‰Š_êµ_½:Àñ(\JNEÞæS€OgL™ò"VtjÑÚ¹³°k†uëI¾mvŸ½ûúH¼tU¨B–…e_h¯^¬šî¡µà¸&*ÁoÍÂãM6ìèhG§N>g WÃCaBžU²|A½žè× Ø_ ‹I+,Nˆ,°šœ˜É‰~Ê•F)2…\°ju~þ]8…kÖGP›´^AÎâwåˆÍÔˆŽ9›Ê‡‘u–Úm†Ðú¡ %ÅìÌO6B\tiâÖ­-‡%IT¹2ꃊÌr¶*ÒÇÆÜïÖC¯m·§½Ž&¤ o^ fù”2f¹»ì’˜“p™»F¥‚ƒ6r%ß¾œìÝÌtzf›¥dQ ’ÅOQ‡2™“ hZÛ£K•wV©“&™v¢Õ@t™aaø ²ÞiZ­†™Vµž~ Ýj‰œOëaødt’®íNƒC×}ð,üì˜ÚׯÅââå4<R›úÄdL‹§ßÿ'úÔSÃÔ¥9äs>Ç¡­Çaî÷,¬Jm{|øÅ˨CLN]3>^| évÔM.½\Þ5|xÅU wn’s¢I,ü®—!ð‘Τô-ÐgèIõ©Ñ<4öÅ Åþš·n€ÝÛ£È Ô±1f4èÒÉGOâJ¢~ÉÒöéŽF¾\¶©ÎVèDÊØœ“A®<Éç)¬€IaæR$1tX¦¤6{y Î_À¯?îÀ•¸x$§çÒ ¤;6¤\K€CÓ=;Û!k¶e×ÖØ–pMhBT—®1X9ë]l A³&-ÐqÄ4 ÖžÃ|Yj:/;›êõõ°· ©PÓüÍ‚bdÙ±IΛLMþöÜÊQjÔbƒÍ ‹=‡«)7‘M´7„@ÂÄÖ ˆ>‹™GÚ'´5jÑ4–êîa‘¥bùwáTm |Š”¾9™Ù 9î¶¡!mÊ»@ äwÜ+ð¨Û€VJû…h-7Œ¥iĽ’²>;ûëë©$ \¤V&×·¦/Ô>:¤Ÿ=C+:ŒjoxÒF‡™²´ëÙj«ÙèÚ<‹wk^¾•?áêµHˆO“˜@²”4ñF‡LÓ ëi`Ô§#Ï¢B•ƒ©‘j9¹Ótº“Ò·BŸN.1ÿ`x32hû×£›ÒÉ%eä#€;²ø~¢¥" [®_O"ó• ¢œ”©ƒÄÙF’‘‚˜G<3Âî¨Û´%°}3NDDâM CûõÇ%Rü‘'N!à¢=ÛÂÓn†…&hàEBϹƒ,G)L!¸X‚p(©å*®ÍT¬¢M¹3TTÐ-º¢í¶6S)#n¤éd¹)iHæ±v¨«ÁL \<©¡®ÓŸ¼× ÇFDäœØ™>¢ý³obp¨¿Hó;;é¦x'#%n£ºÈ‹Á‚J¡$̆‡9‰În°YŒÅÉi™íoP.á™e«ŒàÓ 1Y¦çpr÷>Ü̦ oHê¼ ^B¡sœÃᇑ@„´jßr«¹Ðé)’ßl¼Ž+k–àl›7QWèSæg]ú-uÈÙ9°[¬…ÓˆÇÁ‰…á Õ‘ó¾°üIîÂU.d+)ö/«'Ъ j‡—Fwƒ—¶«›ñþüí$@20–HŸ•V~$‹ÔÏË›þ‹'Ò)^‡æ­ÂЫI-lß}V ”z'ü‰&hÖ`åűÂbi…Ã.›¸2b¸Ñ JÚ+Wõ"¹lR*¹dÕðÀ ›f$Heº bÉ”)D—²ú‹{±å2E=Ð uä ù¼yS/ ,ÖoÂeÚ@tø6G‘† ¥Úý+·ÑFk 4©UÍZë°{-"i·kÛÈÇK¾pq ‚ÏŽ u9yG; býôí ÁYR›µ²ÿ”~«¦àßS&Òæð@tmļìÔ€ÂMBHygŸC¼‘ju¶“/.£Yž„£kñ¿íÉèòس˜4cæ|:(>*Ž6mµŠBÖjÚ&¨lèM4X©.m­º‚…v6‚\[lSœ)ùªà÷oÙ"ˆjûeÒg±ÙGì“Ô×ʸú4@¨¸|ä²d:tjH.*š½‚ÑŠ Цx=Å·j ù4$eÏ%òˆz FNþÿ÷8ÑŸ‚EágD׎ÐñKê·( Ô_§kìÒ¥šÈ©F÷~JeYý.iÖÌ7!Ù%Þ5O…ß«ê¡cmò'lŶ¿ò„N³6ìæ¡ñÜ”‚lö$ôÉŠfD9Âh¬Pº3°;©oÒæÿõÃkJ-—RY~uê‘Ê’Ÿ{¬?‰$Z¥¿žÜ¶;÷ìÀöíÛ±yÕøú×$Â:¼úÚ£¤ê¢K;àÌrü¸;zCbw¯ÄdèÒ >v¬v„†Q š6at܆šÍBDÈ—Ü*XM¾ÓTcKþVÔG×ÚôÓªˆ. >ö,âoü…“;~Ág¿ž&MÖ~¼»ƒ)­¥?lFRv®_ðÓä;r›1ñgÖbKÔ5$’_5::×É«àEËuZs»…ZG)&rЊMñn‚.Á@êðgTÒ"ðËÒT¢:5òÍ,öÓJV¶C‚`—ÁîRí]¼õEhi~ 2ß¶hìk'Ÿ5£É!Íh߆Åk[¢‰¿&„¢xBû4äúvÀÖ>EÿMW©ïBÉb¾<ìÔiîø±R+ÒUªÅ–—)ÜÖ$K»ò‚ì'ÈÏ®…3±þp­S‘ðÿÎÁ’ëbƒŒö7Ø\ž‡Ø8’›ˆýX0ý: ©Ž<;+Kò#;‡Yóv#^ð;¿û7ÁˆòéÒ†ÜZtˆBZáш՘Xj¹,¢8º(§«G0S³[ ½ÒîŒgèbI©äÒÙ ¿ÜçÈâââ¤ñT&(dt ¦¦îV‹Ën³ OŸ £tÂ…NA£Fòá*½üQÇÏ“ü¹tj#+Ç)ÌäeÑÐ&¨Ž âLdȾSxÀßÏ 2K.Ò² ]?tj ÒÓôÎrrèjúCmÑ#-Ûâ¼Ï¡{Ú.±M9d¤Ô,deù8_³7æ¤Ã,÷‚mÄfÜÌ$ëŠÒi3Oã(lÎÚI ÉIñëÓÒɆ×л ¹‚5¬$ºëÐÏP‡™E§R C˜°g1~Üï‰wf½ ß)kžVºzÖƒŸÆÏ¥7csb7à?¿ŸÆ³Sÿƒn>yHËÌ«TÅÏèSh‰ÞjØé$R:;oî ¿.<‘Ѫ¦¦fÚŒÔ;¼è^EaÉpiàWSGJ›6#³íÐÑÏ>°|Ùn±¶ôã˜õÝVô7•Þ Õ„Ô p•ÃÇŸxL{.é´¡)ÀkKÀ³~„bÐ$|ðèÈ&ž°ÔÊ rµ'ísÐÆ;% 'É*û© ;mÊæA¥ó†õÓ¬‚?õßêÒgš…¬ÆÓ~„›Ý’ƒÌ<|}=pé)øþLW|>}LI©°R½T/ù’‘M}t•wI–4mP{¥•ËÊÄŠ·uo" »víZ¥ …’,7:tï`J×ê¦!ï6%µ)§ E¶ g³²e4é)ZŽËÙF,{  £MX%£×FtÎ8W2•Ô¹ÐõÇýˆ‹3§- ¿Î^ y/·òpQP2ZúSyÊf·°Rº¡ŸCØ1.Ž6ŽÿŒêˆ¼Œä²Ùá>ÖÍÁªøî˜öÏî´™^²l$þïÔཹo¡ž9‹Ü"ìlÌß$Crrã±#ª6’R $’3•’6§iXiEG’ â•­_cYd;Ìš=Ú“3×!Õk-N¶Šér©ä²˜²<úþAàŽ|üeÉfµ•L't*Ié3ÚJjÓN ßB«I§;È…!)}V–)|‹…ÎÜKX¤K°æ÷§¥Ïò*êà‰ºãú‰(ȽE׈X¹. †‡´0²eÄ Ê‚×_ìHÇ9rî¥ÏðLoÿÏ"Æ@–´P1ß9ˆŽÊDç—^@}­$rÿ>¥ÏdFƒ #¥Uú¬É™PFPúB„xêKI+\;ÑÅ&{’&{eTú¬¶RÉ%ËÈÃ}@¥Yü÷3ÊrrŸøÓ)¦|wE1`Èhð׬¡&—RF¥ý\C1¤T~4¹†jÔô†%3&½’lgzéÍß²¼ dÑQÉê´ºšäÎ4#-ßYzÇûr/! »zõjI£ì^¢•ÓÂàp8€@É+ë h€WÁàp8÷å:ÎyouSÃàp8eA€[üeA‹çåp8ÕnñW&ò.p8² À-þ² Åór8j€WüÕ€‰¼ ŽG ,pWOYÐây9Ž@5@€[üÕ€‰¼ ŽG ,ü?‡V#ú9}nýIEND®B`‚dipy-0.10.1/doc/devel/gitwash/set_up_fork.rst000066400000000000000000000036441263041327500211340ustar00rootroot00000000000000.. _set-up-fork: ================== Set up your fork ================== First you follow the instructions for :ref:`forking`. Overview ======== :: git clone git@github.com:your-user-name/dipy.git cd dipy git remote add upstream git://github.com/nipy/dipy.git In detail ========= Clone your fork --------------- #. Clone your fork to the local computer with ``git clone git@github.com:your-user-name/dipy.git`` #. Investigate. Change directory to your new repo: ``cd dipy``. Then ``git branch -a`` to show you all branches. You'll get something like:: * master remotes/origin/master This tells you that you are currently on the ``master`` branch, and that you also have a ``remote`` connection to ``origin/master``. What remote repository is ``remote/origin``? Try ``git remote -v`` to see the URLs for the remote. They will point to your github fork. Now you want to connect to the upstream `dipy github`_ repository, so you can merge in changes from trunk. .. _linking-to-upstream: Linking your repository to the upstream repo -------------------------------------------- :: cd dipy git remote add upstream git://github.com/nipy/dipy.git ``upstream`` here is just the arbitrary name we're using to refer to the main `dipy`_ repository at `dipy github`_. Note that we've used ``git://`` for the URL rather than ``git@``. The ``git://`` URL is read only. This means we that we can't accidentally (or deliberately) write to the upstream repo, and we are only going to use it to merge into our own code. Just for your own satisfaction, show yourself that you now have a new 'remote', with ``git remote -v show``, giving you something like:: upstream git://github.com/nipy/dipy.git (fetch) upstream git://github.com/nipy/dipy.git (push) origin git@github.com:your-user-name/dipy.git (fetch) origin git@github.com:your-user-name/dipy.git (push) .. include:: links.inc dipy-0.10.1/doc/devel/gitwash/this_project.inc000066400000000000000000000001701263041327500212410ustar00rootroot00000000000000.. dipy .. _`dipy`: http://nipy.org/dipy .. _`dipy mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging dipy-0.10.1/doc/devel/index.rst000066400000000000000000000004011263041327500162410ustar00rootroot00000000000000 .. _development: DiPy development ================ Contents: .. toctree:: :maxdepth: 2 intro gitwash/index make_release commit_codes python3 Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` dipy-0.10.1/doc/devel/intro.rst000066400000000000000000000024611263041327500162750ustar00rootroot00000000000000============== Introduction ============== Dipy_ is always seeking courageous scientists who want to take dMRI analysis to the next level. If you share the same vision and you are willing to share your code please let us know we will be happy to help. The lead developer is Eleftherios Garyfallidis, with support from Ian Nimmo-Smith, Matthew Brett, Bago Amirbekian, Ariel Rokem, Stefan van der Walt and (your name here). See the main documentation for the full list of dipy developers and contributors. The primary development repository is `dipy github`_ Please do contribute. Have a look at :ref:`using-git` for some ideas on how to get going. Have a look at the `nipy development guidelines`_ for our coding habits. In summary, please follow the `numpy coding style`_ - and of course - PEP8_ . Test everything! We are using nose_ ; see the existing code for example tests. If you can please use our :ref:`commit-codes`. But - just pitch in - send us some code - we'll give you feedback if you want it - that way we learn from each other. And - welcome... If you are new to diffusion MRI and you want to learn more here is a simple `video `_ we made for the general public. I hope you enjoy it and apologies for the low resolution. .. include:: ../links_names.inc dipy-0.10.1/doc/devel/make_release.rst000066400000000000000000000310241263041327500175540ustar00rootroot00000000000000.. _release-guide: ********************************* A guide to making a dipy release ********************************* A guide for developers who are doing a dipy release .. _release-tools: Release tools ============= There are some release utilities that come with nibabel_. nibabel should install these as the ``nisext`` package, and the testing stuff is understandably in the ``testers`` module of that package. Dipy has Makefile targets for their use. The relevant targets are:: make check-version-info make check-files make sdist-tests The first installs the code from a git archive, from the repository, and for in-place use, and runs the ``get_info()`` function to confirm that installation is working and information parameters are set correctly. The second (``sdist-tests``) makes an sdist source distribution archive, installs it to a temporary directory, and runs the tests of that install. If you have a version of nibabel trunk past February 11th 2011, there will also be a functional make target:: make bdist-egg-tests This builds an egg (which is a zip file), hatches it (unzips the egg) and runs the tests from the resulting directory. .. _release-checklist: Release checklist ================= * Review the open list of `dipy issues`_. Check whether there are outstanding issues that can be closed, and whether there are any issues that should delay the release. Label them ! * Review and update the release notes. Review and update the :file:`Changelog` file. Get a partial list of contributors with something like:: git shortlog -ns 0.6.0.. where ``0.6.0`` was the last release tag name. Then manually go over ``git shortlog 0.6.0..`` to make sure the release notes are as complete as possible and that every contributor was recognized. * Use the opportunity to update the ``.mailmap`` file if there are any duplicate authors listed from ``git shortlog -ns``. * Add any new authors to the ``AUTHORS`` file. Add any new entries to the ``THANKS`` file. * Check the copyright years in ``doc/conf.py`` and ``LICENSE`` * Check the examples - we really need an automated check here. * Check the ``pyx`` file doctests with:: ./tools/doctest_extmods.py dipy We really need an automated run of these using the buildbots, but we haven't done it yet. * Check the ``long_description`` in ``dipy/info.py``. Check it matches the ``README`` in the root directory, maybe with ``vim`` ``diffthis`` command. Check all the links are still valid. * Check all the dipy builds are green on the `nipy buildbot`_ * If you have travis-ci_ building set up you might want to push the code in its current state to a branch that will build, e.g:: git branch -D pre-release-test # in case branch already exists git co -b pre-release-test * Run the builder and review the output from http://nipy.bic.berkeley.edu/builders/dipy-release-checks This builder does *not* check the outputs - they will likely all be green - you have to check the ``stdio`` output for each step using the web interface. The ``dipy-release-checks`` builder runs these tests:: make distclean python -m compileall . make sdist-tests make bdist-egg-tests make check-version-info make check-files * ``make bdist-egg-tests`` may well fail because of a problem with the script tests; if you have a recent (>= March 31 2013) nibabel ``nisext`` package, you could try instead doing:: python -c 'from nisext.testers import bdist_egg_tests; bdist_egg_tests("dipy", label="not slow and not script_test")' Eventually we should update the ``bdist-egg-tests`` makefile target. * ``make check-version-info`` checks how the commit hash is stored in the installed files. You should see something like this:: {'sys_version': '2.6.6 (r266:84374, Aug 31 2010, 11:00:51) \n[GCC 4.0.1 (Apple Inc. build 5493)]', 'commit_source': 'archive substitution', 'np_version': '1.5.0', 'commit_hash': '25b4125', 'pkg_path': '/var/folders/jg/jgfZ12ZXHwGSFKD85xLpLk+++TI/-Tmp-/tmpGPiD3E/pylib/dipy', 'sys_executable': '/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python', 'sys_platform': 'darwin'} /var/folders/jg/jgfZ12ZXHwGSFKD85xLpLk+++TI/-Tmp-/tmpGPiD3E/pylib/dipy/__init__.pyc {'sys_version': '2.6.6 (r266:84374, Aug 31 2010, 11:00:51) \n[GCC 4.0.1 (Apple Inc. build 5493)]', 'commit_source': 'installation', 'np_version': '1.5.0', 'commit_hash': '25b4125', 'pkg_path': '/var/folders/jg/jgfZ12ZXHwGSFKD85xLpLk+++TI/-Tmp-/tmpGPiD3E/pylib/dipy', 'sys_executable': '/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python', 'sys_platform': 'darwin'} /Users/mb312/dev_trees/dipy/dipy/__init__.pyc {'sys_version': '2.6.6 (r266:84374, Aug 31 2010, 11:00:51) \n[GCC 4.0.1 (Apple Inc. build 5493)]', 'commit_source': 'repository', 'np_version': '1.5.0', 'commit_hash': '25b4125', 'pkg_path': '/Users/mb312/dev_trees/dipy/dipy', 'sys_executable': '/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python', 'sys_platform': 'darwin'} * ``make check-files`` checks if the source distribution is picking up all the library and script files. Look for output at the end about missed files, such as:: Missed script files: /Users/mb312/dev_trees/dipy/bin/nib-dicomfs, /Users/mb312/dev_trees/dipy/bin/nifti1_diagnose.py Fix ``setup.py`` to carry across any files that should be in the distribution. * Clean and compile:: make distclean git clean -fxd python setup.py build_ext --inplace * Make sure all tests pass on your local machine (from the dipy root directory):: cd .. nosetests --with-doctest dipy cd dipy # back to the root directory * Check the documentation doctests:: cd doc make doctest cd .. At the moment this generates lots of errors from the autodoc documentation running the doctests in the code, where the doctests pass when run in nose - we should find out why this is at some point, but leave it for now. * Trigger builds of all the binary build testers for dipy, using the web interface. You may need permissions set to do this - contact Matthew or Eleftherios if you do. At the moment, the useful dipy binary build testers are: * http://nipy.bic.berkeley.edu/builders/dipy-bdist32-26 * http://nipy.bic.berkeley.edu/builders/dipy-bdist32-27 * http://nipy.bic.berkeley.edu/builders/dipy-bdist-mpkg-2.6 * http://nipy.bic.berkeley.edu/builders/dipy-bdist-mpkg-2.7 * The release should now be ready. Doing the release ================= The trick here is to get all the testing, pushing to upstream done *before* you do the final release commit. There should be only one commit with the release version number, so you might want to make the release commit on your local machine, push to pypi_, review, fix, rebase, until all is good. Then and only then do you push to upstream on github. * Make the release commit. Edit :file:`dipy/info.py` to set ``_version_extra`` to ``''``; commit * Build the release files:: make distclean git clean -fxd make source-release * Once everything looks good, upload the source release to PyPi. See `setuptools intro`_:: python setup.py register python setup.py sdist --formats=gztar,zip upload * Remember you'll need your ``~/.pypirc`` file set up right for this to work. See `setuptools intro`_. The file should look something like this:: [distutils] index-servers = pypi [pypi] username:your.pypi.username password:your-password [server-login] username:your.pypi.username password:your-password * Check how everything looks on pypi - the description, the packages. If necessary delete the release and try again if it doesn't look right. * Make an annotated tag for the release with tag of form ``0.6.0``:: git tag -am 'Second public release' 0.6.0 * Set up maintenance / development branches If this is this is a full release you need to set up two branches, one for further substantial development (often called 'trunk') and another for maintenance releases. * Branch to maintenance:: git co -b maint/0.6.x Set ``_version_extra`` back to ``.dev`` and bump ``_version_micro`` by 1. Thus the maintenance series will have version numbers like - say - '0.6.1.dev' until the next maintenance release - say '0.6.1'. Commit. Push with something like ``git push upstream-rw maint/0.6.x --set-upstream`` * Start next development series:: git co main-master then restore ``.dev`` to ``_version_extra``, and bump ``_version_minor`` by 1. Thus the development series ('trunk') will have a version number here of '0.7.0.dev' and the next full release will be '0.7.0'. Next merge the maintenace branch with the "ours" strategy. This just labels the maintenance branch `info.py` edits as seen but discarded, so we can merge from maintenance in future without getting spurious merge conflicts:: git merge -s ours maint/0.6.x Push with something like ``git push upstream-rw main-master:master`` If this is just a maintenance release from ``maint/0.6.x`` or similar, just tag and set the version number to - say - ``0.6.2.dev``. * Push the tag with ``git push upstream-rw 0.6.0`` Uploading binary builds for the release ======================================= By far the easiest way to do this is via the buildbots. In order to do this, you need first to push the release commit and the release tag to github, so the buildbots can find the released code and build it. * In order to trigger the binary builds for the release commit, you need to go to the web interface for the binary builder, go to the "Force build" section, enter your username and password for the buildbot web service and enter the commit tag name in the *revision* field. For example, if the tag was ``0.6.0`` then you would enter ``0.6.0`` in the revision field of the form. This builds the exact commit labeled by the tag, which is what we want. * Trigger binary builds for Windows from the buildbots. See builders ``dipy-bdist32-26``, ``dipy-bdist32-27``. The ``exe`` builds will appear in http://nipy.bic.berkeley.edu/dipy-dist . Check that the binary build version numbers are release numbers (``dipy-0.6.0.win32.exe`` rather than ``dipy-0.6.0.dev.win32.exe``). Download the builds and upload to pypi. You can upload the exe files with the *files* interface for the new dipy release. Obviously you'll need to log in to do this, and you'll need to be an admin for the dipy pypi project. For reference, if you need to do binary exe builds by hand, use something like:: make distclean git clean -fxd c:\Python26\python.exe setup.py bdist_egg upload c:\Python26\python.exe setup.py bdist_wininst --target-version=2.6 register upload * Trigger binary builds for OSX from the buildbots ``dipy-bdist-mpkg-2.6``, ``dipy-bdist-mpkg-2.7``. ``egg`` and ``mpkg`` builds will appear in http://nipy.bic.berkeley.edu/dipy-dist . Download the eggs and upload to pypi. Upload the dmg files with the *files* interface for the new dipy release. * Building OSX dmgs from the mpkg builds. The buildbot binary builders build ``mpkg`` directories, which are installers for OSX. These need their permissions to be fixed because the installers should install the files as the root user, group ``admin``. The all need to be converted to OSX disk images. Use the ``./tools/build_dmgs.py``, with something like this command line:: ./tools/build_dmgs "dipy-dist/dipy-0.6.0-py*.mpkg" For this to work you'll need several things: * An account on a OSX box with sudo (Admin user) on which to run the script. * ssh access to the buildbot server http://nipy.bic.berkeley.edu (ask Matthew or Eleftherios). * a development version of ``bdist_mpkg`` installed from https://github.com/matthew-brett/bdist_mpkg. You need this second for the script ``reown_mpkg`` that fixes the permissions. Upload the dmg files with the *files* interface for the new dipy release. Other stuff that needs doing for the release ============================================ * Checkout the tagged release, build the html docs and upload them to the github pages website:: make upload You need to checkout the tagged version in order to get the version number correct for the doc build. The version number gets picked up from the ``info.py`` version. * Announce to the mailing lists. With fear and trembling. .. _setuptools intro: http://packages.python.org/an_example_pypi_project/setuptools.html .. include:: ../links_names.inc dipy-0.10.1/doc/devel/python3.rst000066400000000000000000000067711263041327500165560ustar00rootroot00000000000000.. _python3: ############################################ Keeping code compatible with Pythons 2 and 3 ############################################ There is useful advice here: * http://docs.python.org/3/howto/pyporting.html * http://python3porting.com/differences.html * http://ptgmedia.pearsoncmg.com/imprint_downloads/informit/promotions/python/python2python3.pdf ************** Future imports ************** For any modules with print statements, and for any modules where you remember, please put:: from __future__ import division, print_function, absolute_import As the first code line of the file, to use Python 3 behavior by default. ***** Print ***** Yeah, you knew that, but use the ``__future__`` import above, and ``print(something)`` ******** Division ******** Yes, you know, but for Python 3 ``3/2`` return ``1.5`` not ``1``. It's very good to remember to put the ``__future__`` import above at the top of the file to make this default everywhere. ************* Moved modules ************* There are compatibility routines in :module:`dipy.utils.six`. You can often get modules that have moved between the versions with (e.g.):: from dipy.utils.six.moves import configparser See the ``six.py`` code and `the six.py docs `_. ************* Range, xrange ************* ``range`` returns an iterator in Python3, and ``xrange`` is therefore redundant, and it has gone. Get ``xrange`` for Python 2, ``range`` for Python 3 with:: from dipy.utils.six.moves import xrange Or you might want to stick to ``range`` for Python 2 and Python 3, especially for small lists where the memory benefit for ``xrange`` is small. Because ``range`` returns an iterator for Python 3, you may need to wrap some calls to range with ``list(range(N))`` to make the code compatible with Python 2 and Python 3. ****** Reduce ****** Python 3 removed ``reduce`` from the builtin namespace, this import works for both Python 2 and Python 3:: from functools import reduce ******* Strings ******* The major difference between Python 2 and Python 3 is the string handling. Strings (``str``) are always unicode, and so:: my_str = 'A string' in Python 3 will result in a unicode string. You also need to be much more explicit when opening files; do you want bytes? ``open(fname, "rb")`` Or do you want unicode? ``open(fname, "rt")``. In the same way you need to be explicit if you want ``import io; io.StringIO`` or ``io.BytesIO`` for your file-like objects containing (strings or bytes). ``basestring`` has gone in Python 3. To test whether something is a string, use:: from dipy.utils.six import string_types isinstance(a_variable, string_types) ************* Next function ************* In python 2.6 and higher there is a function ``next`` in the builtin namespace, that returns the next result from an iterable thing. In Python 3, meanwhile, the ``.next()`` method on generators has gone, replaced by ``.__next__()``. So, prefer ``next(obj)`` to ``obj.next()`` for generators, and in general when getting the next thing from an iterable. ****** Except ****** You can't get away with ``except ValueError, err`` now, because that raises a syntax error for Python 3. Use ``except ValueError as err`` instead. ************ Dictionaries ************ You've lost ``d.has_key("hello")`` for dictionaries, use ``"hello" in d`` instead. ``d.items()`` returns an iterator. If you need a list, use ``list(d.items()``. ``d.iteritems()`` has gone in Python 3 because it is redundant, just use ``d.items()`` dipy-0.10.1/doc/developers.rst000066400000000000000000000046721263041327500162210ustar00rootroot00000000000000.. _dipy_developers: Developers ========== The core development team consists of the following individuals: - **Eleftherios Garyfallidis**, University of Sherbrooke, QC, CA - **Bago Amirbekian**, University of California, San Francisco, CA, USA - **Ariel Rokem**, University of Washington, WA, USA - **Matthew Brett**, University of California, Berkeley, CA, USA - **Omar Ocegueda**, Center for Research in Mathematics, Guanajuato, Mexico - **Stefan Van der Walt**, University of California, Berkeley, CA, USA - **Marc-Alexandre Cote**, University of Sherbrooke, QC, CA - **Ian Nimmo-Smith**, MRC Cognition and Brain Sciences Unit, Cambridge, UK - **Maxime Descoteaux**, University of Sherbrooke, QC, CA And here is the rest of the wonderful contributors: - **Mauro Zucchelli**, University of Verona, IT - **Matthieu Dumont**, PAVI, Sherbrooke, QC, CA - **Samuel St-Jean**, University of Sherbrooke, QC, CA - **Gabriel Girard**, University of Sherbrooke, QC, CA - **Michael Paquette**, University of Sherbrooke, QC, CA - **Jean-Christophe Houde**, University of Sherbrooke, QC, CA - **Christopher Nguyen**, University of California, Los Angeles, CA, USA - **Emanuele Olivetti**, NeuroInformatics Laboratory (NILab), Trento, IT - **Yaroslav Halchenco**, PBS Department, Dartmouth, NH, USA - **Emmanuel Caruyer**, University of Pensylvania, USA - **Sylvain Merlet**, INRIA, Sophia-Antipolis, FR - **Erick Ziegler**, Université de Liège, BE - **Kimberly Chan**, Stanford University, CA, USA - **Chantal Tax**, University Medical Center, Utrecht, NL - **Demian Wassermann**, INRIA, Sophia Antipolis, FR - **Gregory R. Lee**, Cincinnati Children's Hospital Medical Center, Cincinnati, OH, US - **Endolith**, New-York, NY, USA - **Matthias Ekman**, Donders Institute for Brain, Cognition and Behaviour, Nijmegen, NL - **Andrew Lawrence** - **Kesshi Jordan**, University of California, San Francisco, CA, USA - **Maria Luisa Mandelli**, University of California, San Francisco, CA, USA - **Adam Rybinski**, Jagiellonian University, Krakow, PL - **Qiyuan Tian**, Stanford University, Stanford, CA, USA - **Rafael Neto Henriques**, Cambridge University, UK Boundless collaboration is in the heart of Dipy_. We encourage everyone from anywhere in the world to join the team. You can start sharing your code `here`__. If you want to contribute but you don't know in area to focus, please send us an e-mail. We will be more than happy to help. __ `dipy github`_ .. include:: links_names.inc dipy-0.10.1/doc/diffusion.bib000066400000000000000000020313131263041327500157550ustar00rootroot00000000000000@comment{This file has been generated by Pybliographer} @Article{Garyfallidis2009b, Author = {Garyfallidis, Eleftherios and Brett, Matthew and Nimmo-smith, Ian}, Title = {{Fast Dimensionality Reduction for Brain Tractography}}, Journal = {Computer}, Volume = {15}, Number = {6}, Pages = {2009--2009}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Garyfallidis, Brett, Nimmo-smith - 2009 - Fast Dimensionality Reduction for Brain Tractography.pdf:pdf}, year = 2009 } @Article{Ese2006, Author = {Ese, T H}, Title = {{Analysis and Classification of EEG Signals using Probabilistic Models for Brain Computer Interfaces Ecole Polytechnique F ´ ed ´ erale de Lausanne Silvia Chiappa}}, Journal = {Learning}, Volume = {3547}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ese - 2006 - Analysis and Classification of EEG Signals using Probabilistic Models for Brain Computer Interfaces Ecole Polytechnique F ´ ed ´ erale de Lausanne Silvia Chiappa.pdf:pdf}, year = 2006 } @Article{Oliphant2010, Author = {Oliphant, Travis E}, Title = {{Guide to NumPy}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Oliphant - 2010 - Guide to NumPy.pdf:pdf}, year = 2010 } @Article{yamamoto2007dtf, Author = {Yamamoto, A. and Miki, Y. and Urayama, S. and Fushimi, Y. and Okada, T. and Hanakawa, T. and Fukuyama, H. and Togashi, K.}, Title = {{Diffusion tensor fiber tractography of the optic radiation: analysis with 6-, 12-, 40-, and 81-directional motion-probing gradients, a preliminary study}}, Journal = {American Journal of Neuroradiology}, Volume = {28}, Number = {1}, Pages = {92}, publisher = {Am Soc Neuroradiology}, year = 2007 } @Article{FW05, Author = {Friman, O. and Westin, C. F.}, Title = {Uncertainty in white matter fiber tractography.}, Journal = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv}, Volume = {8}, Number = {Pt 1}, Pages = {107-14}, abstract = {In this work we address the uncertainty associated with fiber paths obtained in white matter fiber tractography. This uncertainty, which arises for example from noise and partial volume effects, is quantified using a Bayesian modeling framework. The theory for estimating the probability of a connection between two areas in the brain is presented, and a new model of the local water diffusion profile is introduced. We also provide a theorem that facilitates the estimation of the parameters in this diffusion model, making the presented method simple to implement.}, authoraddress = {Laboratory of Mathematics in Imaging, Department of Radiology Brigham and Women's Hospital, Harvard Medical School, USA.}, keywords = {*Algorithms ; Artificial Intelligence ; Brain/*anatomy \& histology ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/*methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/*methods ; Nerve Fibers, Myelinated/*ultrastructure ; Pattern Recognition, Automated/methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2006/05/12 09:00}, medline-da = {20060511}, medline-dcom = {20060609}, medline-edat = {2006/05/12 09:00}, medline-fau = {Friman, Ola ; Westin, Carl-Fredrik}, medline-gr = {P41-RR13218/RR/NCRR NIH HHS/United States}, medline-jid = {101249582}, medline-jt = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, medline-lr = {20071114}, medline-mhda = {2006/06/10 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {16685835}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural}, medline-sb = {IM}, medline-so = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv. 2005;8(Pt 1):107-14.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16685835}, year = 2005 } @Article{BaoPMB2009, Author = {Bao, LJ and Zhu, YM and Liu, WY and Croisille, P. and Pu, ZB and Robini, M. and Magnin, IE}, Title = {{Denoising human cardiac diffusion tensor magnetic resonance images using sparse representation combined with segmentation}}, Journal = {Physics in Medicine and Biology}, Volume = {54}, Number = {6}, Pages = {1435--1456}, abstract = {Cardiac diffusion tensor magnetic resonance imaging (DT-MRI) is noise sensitive, and the noise can induce numerous systematic errors in subsequent parameter calculations. This paper proposes a sparse representation-based method for denoising cardiac DT-MRI images. The method first generates a dictionary of multiple bases according to the features of the observed image. A segmentation algorithm based on nonstationary degree detector is then introduced to make the selection of atoms in the dictionary adapted to the image's features. The denoising is achieved by gradually approximating the underlying image using the atoms selected from the generated dictionary. The results on both simulated image and real cardiac DT-MRI images from ex vivo human hearts show that the proposed denoising method performs better than conventional denoising techniques by preserving image contrast and fine structures.}, year = 2009 } @Article{Baldi, Author = {Baldi, P and Kerkyacharian, G and Matematica, Dipartimento and Tor, Roma}, Title = {{arXiv : 0807 . 5059v1 [ math . ST ] 31 Jul 2008 Adaptive density estimation for directional data using needlets}}, arxivid = {arXiv:0807.5059v1}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Baldi et al. - Unknown - arXiv 0807 . 5059v1 math . ST 31 Jul 2008 Adaptive density estimation for directional data using needlets.pdf:pdf}, keywords = {and phrases,density estimation,needlets,spherical and directional data,thresholding} } @Article{Science2008, Author = {Science, Computer and Supervisor, Thesis and Wells, William M and Westin, Carl-fredrik and Orlando, Terry P}, Title = {{Quantitative Analysis of Cerebral White Matter Anatomy from Diffusion MRI by}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Science et al. - 2008 - Quantitative Analysis of Cerebral White Matter Anatomy from Diffusion MRI by.pdf:pdf}, year = 2008 } @Article{Simon2005NeuroImage, Author = {Simon, Tony J. and Ding, Lijun and Bish, Joel P. and McDonald-McGinn, Donna M. and Zackai, Elaine H. and Geeb, James}, Title = {Volumetric, connective, and morphologic changes in the brains of children with chromosome 22q11.2 deletion syndrome: an integrative study}, Journal = {NeuroImage}, Volume = {25}, Pages = {169-180}, abstract = {Chromosome 22q11.2 deletion syndrome is a highly prevalent genetic disorder whose manifestations include developmental disability and sometimes mental retardation. The few studies that have examined brain morphology in different samples from this population have found similar general patterns, mostly using region of interest measures. We employed voxel-based techniques to concurrently examine specific morphologic changes in multiple brain tissue measures. Results were similar to previous findings of volumetric reductions in the posterior brain. They also extended them in two ways. First, our methods provided greater specificity in the localization of changes detected. Second, the combination of our measures of gray and white matter along with cerebrospinal fluid volume and fractional anisotropy, which indicates the structure of white matter, showed a posterior displacement of and morphologic changes to the corpus callosum in affected children.}, doi = {j.neuroimage.2004.11.018}, file = {attachment\:Simon2005NeuroImage.pdf:attachment\:Simon2005NeuroImage.pdf:PDF}, publisher = {Elsevier}, year = 2005 } @Article{Hagmann2008PLoSBiol, Author = {Hagmann, P and Cammoun, L and Gigandet, X and Meuli, R and Honey, C J and Wedeen, Van J. and Sporns, Olaf }, Title = {Mapping the structural core of human cerebral cortex}, Journal = {PLoS Biol}, Volume = {6}, Number = {7}, Pages = {e159}, abstract = {Structurally segregated and functionally specialized regions of the human cerebral cortex are interconnected by a dense network of cortico-cortical axonal pathways. By using diffusion spectrum imaging, we noninvasively mapped these pathways within and across cortical hemispheres in individual human participants. An analysis of the resulting large-scale structural brain networks reveals a structural core within posterior medial and parietal cerebral cortex, as well as several distinct temporal and frontal modules. Brain regions within the structural core share high degree, strength, and betweenness centrality, and they constitute connector hubs that link all major structural modules. The structural core contains brain regions that form the posterior components of the human default network. Looking both within and outside of core regions, we observed a substantial correspondence between structural connectivity and resting-state functional connectivity measured in the same participants. The spatial and topological centrality of the core within cortex suggests an important role in functional integration.}, doi = {doi:10.1371/journal.pbio.0060159}, file = {attachment\:Hagmann2008PLoSBiol.pdf:attachment\:Hagmann2008PLoSBiol.pdf:PDF}, year = 2008 } @Article{menzies2008wma, Author = {Menzies, L. and Williams, G.B. and Chamberlain, S.R. and Ooi, C. and Fineberg, N. and Suckling, J. and Sahakian, B.J. and Robbins, T.W. and Bullmore, E.T.}, Title = {{White matter abnormalities in patients with obsessive-compulsive disorder and their first-degree relatives}}, Journal = {American Journal of Psychiatry}, Volume = {165}, Number = {10}, Pages = {1308}, publisher = {Am Psychiatric Assoc}, year = 2008 } @Article{Gong2008CerebralCortex, Author = {Gong, Gaolang and He, Yong and Concha, Luis and Lebel, Catherine and Gross, Donald W. and Evans, Alan C. and Beaulieu, Christian}, Title = {{Mapping Anatomical Connectivity Patterns of Human Cerebral Cortex Using In Vivo Diffusion Tensor Imaging Tractography}}, Journal = {Cereb. Cortex}, Pages = {bhn102}, abstract = {The characterization of the topological architecture of complex networks underlying the structural and functional organization of the brain is a basic challenge in neuroscience. However, direct evidence for anatomical connectivity networks in the human brain remains scarce. Here, we utilized diffusion tensor imaging deterministic tractography to construct a macroscale anatomical network capturing the underlying common connectivity pattern of human cerebral cortex in a large sample of subjects (80 young adults) and further quantitatively analyzed its topological properties with graph theoretical approaches. The cerebral cortex was divided into 78 cortical regions, each representing a network node, and 2 cortical regions were considered connected if the probability of fiber connections exceeded a statistical criterion. The topological parameters of the established cortical network (binarized) resemble that of a "small-world" architecture characterized by an exponentially truncated power-law distribution. These characteristics imply high resilience to localized damage. Furthermore, this cortical network was characterized by major hub regions in association cortices that were connected by bridge connections following long-range white matter pathways. Our results are compatible with previous structural and functional brain networks studies and provide insight into the organizational principles of human brain anatomical networks that underlie functional states.}, doi = {10.1093/cercor/bhn102}, eprint = {http://cercor.oxfordjournals.org/cgi/reprint/bhn102v1.pdf}, file = { attachment\:Gong2008CerebralCortex.pdf: attachment\:Gong2008CerebralCortex.pdf:PDF}, url = {http://cercor.oxfordjournals.org/cgi/content/abstract/bhn102v1}, year = 2008 } @Article{Carlsson2009, Author = {Carlsson, Gunnar and Emoli, Facundo M}, Title = {{Characterization, stability and convergence of hierarchical clustering methods ´}}, Journal = {Methods}, Number = {April}, Pages = {1--23}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Carlsson, Emoli - 2009 - Characterization, stability and convergence of hierarchical clustering methods ´.pdf:pdf}, year = 2009 } @Article{Avram2008NMRBiomed, Author = {Avram, Liat and \¨{O} zarslan, Evren and Assaf, Yaniv and Bar-Shir, Amnon and Cohen, Yoram and Basser, Peter J.}, Title = {Three-dimensional water diffusion in impermeable cylindrical tubes: theory versus experiments}, Journal = {NMR IN BIOMEDICINE}, Volume = {21}, Pages = {888–898}, abstract = {Characterizing diffusion of gases and liquids within pores is important in understanding numerous transport processes and affects a wide range of practical applications. Previous measurements of the pulsed gradient stimulated echo (PGSTE) signal attenuation, E(q), of water within nerves and impermeable cylindrical microcapillary tubes showed it to be exquisitely sensitive to the orientation of the applied wave vector, q, with respect to the tube axis in the high-q regime. Here, we provide a simple three-dimensional model to explain this angular dependence by decomposing the average propagator, which describes the net displacement of water molecules, into components parallel and perpendicular to the tube wall, in which axial diffusion is free and radial diffusion is restricted. The model faithfully predicts the experimental data, not only the observed diffraction peaks in E(q) when the diffusion gradients are approximately normal to the tube wall, but their sudden disappearance when the gradient orientation possesses a small axial component. The model also successfully predicts the dependence of E(q) on gradient pulse duration and on gradient strength as well as tube inner diameter. To account for the deviation from the narrow pulse approximation in the PGSTE sequence, we use Callaghan’s matrix operator framework, which this study validates experimentally for the first time. We also show how to combine average propagators derived for classical one-dimensional and two-dimensional models of restricted diffusion (e.g. between plates, within cylinders) to construct composite three-dimensional models of diffusion in complex media containing pores (e.g. rectangular prisms and/ or capped cylinders) having a distribution of orientations, sizes, and aspect ratios. This three-dimensional modeling framework should aid in describing diffusion in numerous biological systems and in a myriad of materials sciences applications.}, owner = {ian}, timestamp = {2009.03.05}, year = 2008 } @Article{Barmpoutis2007IEEETransMedImag, Author = {Barmpoutis, A. and Vemuri, B. C. and Shepherd, T. M. and Forder, J. R.}, Title = {Tensor splines for interpolation and approximation of \{{D}{T}-{MRI}\} with applications to segmentation of isolated rat hippocampi}, Journal = {IEEE Transactions on Medical Imaging}, Volume = {26}, Number = {11}, Pages = {1537-1546}, abstract = {In this paper, we present novel algorithms for statistically robust interpolation and approximation of diffusion tensors-which are symmetric positive definite (SPD) matrices-and use them in developing a significant extension to an existing probabilistic algorithm for scalar field segmentation, in order to segment diffusion tensor magnetic resonance imaging (DT-MRI) datasets. Using the Riemannian metric on the space of SPD matrices, we present a novel and robust higher order (cubic) continuous tensor product of -splines algorithm to approximate the SPD diffusion tensor fields. The resulting approximations are appropriately dubbed tensor splines. Next, we segment the diffusion tensor field by jointly estimating the label (assigned to each voxel) field, which is modeled by a Gauss Markov measure field (GMMF) and the parameters of each smooth tensor spline model representing the labeled regions. Results of interpolation, approximation, and segmentation are presented for synthetic data and real diffusion tensor fields from an isolated rat hippocampus, along with validation. We also present comparisons of our algorithms with existing methods and show significantly improved results in the presence of noise as well as outliers. }, doi = {10.1109/TMI.2007.903195}, year = 2007 } @Article{Kanaan2006, Author = {Kanaan, Richard a and Shergill, Sukhwinder S and Barker, Gareth J and Catani, Marco and Ng, Virginia W and Howard, Robert and McGuire, Philip K and Jones, Derek K}, Title = {{Tract-specific anisotropy measurements in diffusion tensor imaging.}}, Journal = {Psychiatry research}, Volume = {146}, Number = {1}, Pages = {73--82}, abstract = {Diffusion tensor magnetic resonance imaging (DT-MRI) has been used to examine the microstructure of individual white matter tracts, often in neuropsychiatric conditions without identifiable focal pathology. However, the voxel-based group-mapping and region-of-interest (ROI) approaches used to analyse the data have inherent conceptual and practical difficulties. Taking the example of the genu of the corpus callosum in a sample of schizophrenic patients, we discuss the difficulties in attempting to replicate a voxel-based finding of reduced anisotropy using two ROI methods. Firstly we consider conventional ROIs; secondly, we present a novel tractography-based approach. The problems of both methods are explored, particularly of high variance and ROI definition. The potential benefits of the tractographic method for neuropsychiatric conditions with subtle and diffuse pathology are outlined.}, doi = {10.1016/j.pscychresns.2005.11.002}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kanaan et al. - 2006 - Tract-specific anisotropy measurements in diffusion tensor imaging..pdf:pdf}, issn = {0165-1781}, keywords = {Adult,Anisotropy,Brain,Brain: pathology,Diffusion Magnetic Resonance Imaging,Female,Humans,Male,Middle Aged,Schizophrenia,Schizophrenia: pathology}, pmid = {16376059}, url = {http://www.ncbi.nlm.nih.gov/pubmed/16376059}, year = 2006 } @Article{MCC+99, Author = {Mori, S. and Crain, B. J. and Chacko, V. P. and van Zijl, P. C.}, Title = {Three-dimensional tracking of axonal projections in the brain by magnetic resonance imaging.}, Journal = {Ann Neurol}, Volume = {45}, Number = {2}, Pages = {265-9}, abstract = {The relationship between brain structure and complex behavior is governed by large-scale neurocognitive networks. The availability of a noninvasive technique that can visualize the neuronal projections connecting the functional centers should therefore provide new keys to the understanding of brain function. By using high-resolution three-dimensional diffusion magnetic resonance imaging and a newly designed tracking approach, we show that neuronal pathways in the rat brain can be probed in situ. The results are validated through comparison with known anatomical locations of such fibers.}, authoraddress = {Department of Radiology, Johns Hopkins Medical School, Baltimore, MD, USA.}, keywords = {Animals ; Axons/*physiology ; Brain/*anatomy \& histology ; Magnetic Resonance Imaging/*methods ; Rats}, language = {eng}, medline-crdt = {1999/02/16 00:00}, medline-da = {19990329}, medline-dcom = {19990329}, medline-edat = {1999/02/16}, medline-fau = {Mori, S ; Crain, B J ; Chacko, V P ; van Zijl, P C}, medline-is = {0364-5134 (Print)}, medline-jid = {7707449}, medline-jt = {Annals of neurology}, medline-lr = {20061115}, medline-mhda = {1999/02/16 00:01}, medline-own = {NLM}, medline-pl = {UNITED STATES}, medline-pmid = {9989633}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {Ann Neurol. 1999 Feb;45(2):265-9.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=9989633}, year = 1999 } @Article{Parker2003, Author = {Parker, Geoffrey J M and Haroon, Hamied a and Wheeler-Kingshott, Claudia a M}, Title = {{A framework for a streamline-based probabilistic index of connectivity (PICo) using a structural interpretation of MRI diffusion measurements.}}, Journal = {Journal of magnetic resonance imaging : JMRI}, Volume = {18}, Number = {2}, Pages = {242--54}, abstract = {PURPOSE: To establish a general methodology for quantifying streamline-based diffusion fiber tracking methods in terms of probability of connection between points and/or regions. MATERIALS AND METHODS: The commonly used streamline approach is adapted to exploit the uncertainty in the orientation of the principal direction of diffusion defined for each image voxel. Running the streamline process repeatedly using Monte Carlo methods to exploit this inherent uncertainty generates maps of connection probability. Uncertainty is defined by interpreting the shape of the diffusion orientation profile provided by the diffusion tensor in terms of the underlying microstructure. RESULTS: Two candidates for describing the uncertainty in the diffusion tensor are proposed and maps of probability of connection to chosen start points or regions are generated in a number of major tracts. CONCLUSION: The methods presented provide a generic framework for utilizing streamline methods to generate probabilistic maps of connectivity.}, doi = {10.1002/jmri.10350}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Parker, Haroon, Wheeler-Kingshott - 2003 - A framework for a streamline-based probabilistic index of connectivity (PICo) using a structural interpretation of MRI diffusion measurements..pdf:pdf}, issn = {1053-1807}, keywords = {Anisotropy,Brain,Brain: anatomy \& histology,Diffusion,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Echo-Planar Imaging,Humans,Models, Statistical,Monte Carlo Method,Probability,Uncertainty}, pmid = {12884338}, url = {http://www.ncbi.nlm.nih.gov/pubmed/12884338}, year = 2003 } @Article{December2006, Author = {December, Draft}, Title = {{A n I n t r o d u c t i o n t o P r o g r a m m i n g f o r M e d i c a l I m a g e A n a l y s i s w i t h T h e V i s u a l i z a t i o n T o o l k i t X e n o p h o n P a p a d e m e t r i s}}, Journal = {Control}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/December - 2006 - A n I n t r o d u c t i o n t o P r o g r a m m i n g f o r M e d i c a l I m a g e A n a l y s i s w i t h T h e V i s u a l i z a t i o n T o o l k i t X e n o p h o n P a p a d e m e t r i s.pdf:pdf}, year = 2006 } @Article{Komodakis2006, Author = {Komodakis, Nikos}, Title = {{Optimization Algorithms for Discrete Markov Random Fields , with Applications to Computer Vision}}, Journal = {Optimization}, Number = {May}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Komodakis - 2006 - Optimization Algorithms for Discrete Markov Random Fields , with Applications to Computer Vision.pdf:pdf}, year = 2006 } @Article{Duru2010a, Author = {Duru, Dilek G\"{o}ksel and Ozkan, Mehmed}, Title = {{Determination of neural fiber connections based on data structure algorithm.}}, Journal = {Computational intelligence and neuroscience}, Volume = {2010}, Pages = {251928}, abstract = {The brain activity during perception or cognition is mostly examined by functional magnetic resonance imaging (fMRI). However, the cause of the detected activity relies on the anatomy. Diffusion tensor magnetic resonance imaging (DTMRI) as a noninvasive modality providing in vivo anatomical information allows determining neural fiber connections which leads to brain mapping. Still a complete map of fiber paths representing the human brain is missing in literature. One of the main drawbacks of reliable fiber mapping is the correct detection of the orientation of multiple fibers within a single imaging voxel. In this study a method based on linear data structures is proposed to define the fiber paths regarding their diffusivity. Another advantage of the proposed method is that the analysis is applied on entire brain diffusion tensor data. The implementation results are promising, so that the method will be developed as a rapid fiber tractography algorithm for the clinical use as future study.}, doi = {10.1155/2010/251928}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Duru, Ozkan - 2010 - Determination of neural fiber connections based on data structure algorithm..pdf:pdf}, issn = {1687-5273}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Diffusion Tensor Imaging,Diffusion Tensor Imaging: methods,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Linear Models,Neural Pathways,Neural Pathways: anatomy \& histology,Uncertainty}, month = jan, pmid = {20069047}, url = {http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=2801001\&tool=pmcentrez\&rendertype=abstract}, year = 2010 } @Article{Cook2006, Author = {Cook, P A and Bai, Y and Seunarine, K K and Hall, M G and Parker, G J and Alexander, D C}, Title = {{Camino : Open-Source Diffusion-MRI Reconstruction and Processing}}, Journal = {Statistics}, Volume = {14}, Pages = {22858--22858}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Cook et al. - 2006 - Camino Open-Source Diffusion-MRI Reconstruction and Processing.pdf:pdf}, year = 2006 } @Article{CLC+99, Author = {Conturo, T. E. and Lori, N. F. and Cull, T. S. and Akbudak, E. and Snyder, A. Z. and Shimony, J. S. and McKinstry, R. C. and Burton, H. and Raichle, M. E.}, Title = {Tracking neuronal fiber pathways in the living human brain.}, Journal = {Proc Natl Acad Sci U S A}, Volume = {96}, Number = {18}, Pages = {10422-7}, abstract = {Functional imaging with positron emission tomography and functional MRI has revolutionized studies of the human brain. Understanding the organization of brain systems, especially those used for cognition, remains limited, however, because no methods currently exist for noninvasive tracking of neuronal connections between functional regions [Crick, F. \& Jones, E. (1993) Nature (London) 361, 109-110]. Detailed connectivities have been studied in animals through invasive tracer techniques, but these invasive studies cannot be done in humans, and animal results cannot always be extrapolated to human systems. We have developed noninvasive neuronal fiber tracking for use in living humans, utilizing the unique ability of MRI to characterize water diffusion. We reconstructed fiber trajectories throughout the brain by tracking the direction of fastest diffusion (the fiber direction) from a grid of seed points, and then selected tracks that join anatomically or functionally (functional MRI) defined regions. We demonstrate diffusion tracking of fiber bundles in a variety of white matter classes with examples in the corpus callosum, geniculo-calcarine, and subcortical association pathways. Tracks covered long distances, navigated through divergences and tight curves, and manifested topological separations in the geniculo-calcarine tract consistent with tracer studies in animals and retinotopy studies in humans. Additionally, previously undescribed topologies were revealed in the other pathways. This approach enhances the power of modern imaging by enabling study of fiber connections among anatomically and functionally defined brain regions in individual human subjects.}, authoraddress = {Department of Radiology and Neuroimaging Laboratory, Mallinckrodt Institute of Radiology, Washington University School of Medicine, 4525 Scott Avenue, St. Louis, MO 63110, USA. tconturo@npg.wustl.edu}, keywords = {Brain/anatomy \& histology/*physiology ; *Brain Mapping ; Humans ; Magnetic Resonance Imaging ; Nerve Fibers/*physiology ; Neural Pathways/physiology ; Neurons/*physiology}, language = {eng}, medline-crdt = {1999/09/01 00:00}, medline-da = {19991007}, medline-dcom = {19991007}, medline-edat = {1999/09/01}, medline-fau = {Conturo, T E ; Lori, N F ; Cull, T S ; Akbudak, E ; Snyder, A Z ; Shimony, J S ; McKinstry, R C ; Burton, H ; Raichle, M E}, medline-gr = {P01 NS06833/NS/NINDS NIH HHS/United States}, medline-is = {0027-8424 (Print)}, medline-jid = {7505876}, medline-jt = {Proceedings of the National Academy of Sciences of the United States of America}, medline-lr = {20081120}, medline-mhda = {1999/09/01 00:01}, medline-oid = {NLM: PMC17904}, medline-own = {NLM}, medline-pl = {UNITED STATES}, medline-pmc = {PMC17904}, medline-pmid = {10468624}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't ; Research Support, U.S. Gov't, P.H.S.}, medline-sb = {IM}, medline-so = {Proc Natl Acad Sci U S A. 1999 Aug 31;96(18):10422-7.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=10468624}, year = 1999 } @Article{Bradski, Author = {Bradski, Gary and Kaehler, Adrian}, Title = {{No Title}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Bradski, Kaehler - Unknown - No Title.pdf:pdf} } @Article{Qazi_Neuroimage08, Author = {Qazi, A. A. and Radmanesh, A. and O'Donnell, L. and Kindlmann, G. and Peled, S. and Whalen, S. and Westin, C. F. and Golby, A. J.}, Title = {Resolving crossings in the corticospinal tract by two-tensor streamline tractography: {M}ethod and clinical assessment using f{MRI}.}, Journal = {Neuroimage}, abstract = {An inherent drawback of the traditional diffusion tensor model is its limited ability to provide detailed information about multidirectional fiber architecture within a voxel. This leads to erroneous fiber tractography results in locations where fiber bundles cross each other. This may lead to the inability to visualize clinically important tracts such as the lateral projections of the corticospinal tract. In this report, we present a deterministic two-tensor eXtended Streamline Tractography (XST) technique, which successfully traces through regions of crossing fibers. We evaluated the method on simulated and in vivo human brain data, comparing the results with the traditional single-tensor and with a probabilistic tractography technique. By tracing the corticospinal tract and correlating with fMRI-determined motor cortex in both healthy subjects and patients with brain tumors, we demonstrate that two-tensor deterministic streamline tractography can accurately identify fiber bundles consistent with anatomy and previously not detected by conventional single-tensor tractography. When compared to the dense connectivity maps generated by probabilistic tractography, the method is computationally efficient and generates discrete geometric pathways that are simple to visualize and clinically useful. Detection of crossing white matter pathways can improve neurosurgical visualization of functionally relevant white matter areas.}, authoraddress = {Department of Radiology, Brigham and Women's Hospital, Harvard Medical School, USA; University of Copenhagen, Denmark.}, language = {ENG}, medline-aid = {S1053-8119(08)00779-9 [pii] ; 10.1016/j.neuroimage.2008.06.034 [doi]}, medline-crdt = {2008/07/29 09:00}, medline-da = {20080811}, medline-dep = {20080708}, medline-edat = {2008/07/29 09:00}, medline-is = {1095-9572 (Electronic)}, medline-jid = {9215515}, medline-jt = {NeuroImage}, medline-mhda = {2008/07/29 09:00}, medline-own = {NLM}, medline-phst = {2008/04/30 [received] ; 2008/06/19 [revised] ; 2008/06/19 [accepted]}, medline-pmid = {18657622}, medline-pst = {aheadofprint}, medline-pt = {JOURNAL ARTICLE}, medline-so = {Neuroimage. 2008 Jul 8.}, medline-stat = {Publisher}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18657622}, year = 2008 } @Article{Nannen2003, Author = {Nannen, Volker}, Title = {{The Paradox of Overfitting}}, Journal = {Computer}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Nannen - 2003 - The Paradox of Overfitting.pdf:pdf}, year = 2003 } @Article{Klein2007NeuroImage, Author = {Klein, J. C. and Behrens, T. E. and Robson, M. D. and Mackay, C. E. and Higham, D.J. and Johansen-Berg, H.}, Title = {Connectivity-based parcellation of human cortex using diffusion \{{M}{RI}\}: establishing reproducibility, validity and observer independence in \{{B}{A}\} 44/45 and \{{S}{MA}\}/pre-\{{S}{MA}\}}, Journal = {NeuroImage}, Volume = {34}, Number = {1}, Pages = {204-211}, abstract = {The identification of specialized, functional regions of the human cortex is a vital precondition for neuroscience and clinical neurosurgery. Functional imaging modalities are used for their delineation in living subjects, but these methods rely on subject cooperation, and many regions of the human brain cannot be activated specifically. Diffusion tractography is a novel tool to identify such areas in the human brain, utilizing underlying white matter pathways to separate regions of differing specialization. We explore the reproducibility, generalizability and validity of diffusion tractography-based localization in four functional areas across subjects, timepoints and scanners, and validate findings against fMRI and post-mortem cytoarchitectonic data. With reproducibility across modalities, clustering methods, scanners, timepoints, and subjects in the order of 80-90%, we conclude that diffusion tractography represents a useful and objective tool for parcellation of the human cortex into functional regions, enabling studies into individual functional anatomy even when there are no specific activation paradigms available.}, file = {attachment\:Klein2007NeuroImage.pdf:attachment\:Klein2007NeuroImage.pdf:PDF}, year = 2007 } @Article{McNab2008MRM, Author = {Jennifer A. McNab and Karla L. Miller}, Title = {Sensitivity of diffusion weighted steady state free precession to anisotropic diffusion}, Journal = {Magnetic Resonance in Medicine}, Volume = {60}, Number = {2}, Pages = {405-413}, abstract = {Diffusion-weighted steady-state free precession (DW-SSFP) accumulates signal from multiple echoes over several TRs yielding a strong sensitivity to diffusion with short gradient durations and imaging times. Although the DW-SSFP signal is well characterized for isotropic, Gaussian diffusion, it is unclear how the DW-SSFP signal propagates in inhomogeneous media such as brain tissue. This article presents a more general analytical expression for the DW-SSFP signal which accommodates Gaussian and non-Gaussian spin displacement probability density functions. This new framework for calculating the DW-SSFP signal is used to investigate signal behavior for a single fiber, crossing fibers, and reflective barriers. DW-SSFP measurements in the corpus callosum of a fixed brain are shown to be in good agreement with theoretical predictions. Further measurements in fixed brain tissue also demonstrate that 3D DW-SSFP out-performs 3D diffusion weighted spin echo in both SNR and CNR efficiency providing a compelling example of its potential to be used for high resolution diffusion tensor imaging.}, owner = {ian}, timestamp = {2009.03.27}, year = 2008 } @Article{Corney2007, Author = {Corney, David and Lotto, R Beau}, Title = {{What are lightness illusions and why do we see them?}}, Journal = {PLoS computational biology}, Volume = {3}, Number = {9}, Pages = {1790--800}, abstract = {Lightness illusions are fundamental to human perception, and yet why we see them is still the focus of much research. Here we address the question by modelling not human physiology or perception directly as is typically the case but our natural visual world and the need for robust behaviour. Artificial neural networks were trained to predict the reflectance of surfaces in a synthetic ecology consisting of 3-D "dead-leaves" scenes under non-uniform illumination. The networks learned to solve this task accurately and robustly given only ambiguous sense data. In addition--and as a direct consequence of their experience--the networks also made systematic "errors" in their behaviour commensurate with human illusions, which includes brightness contrast and assimilation--although assimilation (specifically White's illusion) only emerged when the virtual ecology included 3-D, as opposed to 2-D scenes. Subtle variations in these illusions, also found in human perception, were observed, such as the asymmetry of brightness contrast. These data suggest that "illusions" arise in humans because (i) natural stimuli are ambiguous, and (ii) this ambiguity is resolved empirically by encoding the statistical relationship between images and scenes in past visual experience. Since resolving stimulus ambiguity is a challenge faced by all visual systems, a corollary of these findings is that human illusions must be experienced by all visual animals regardless of their particular neural machinery. The data also provide a more formal definition of illusion: the condition in which the true source of a stimulus differs from what is its most likely (and thus perceived) source. As such, illusions are not fundamentally different from non-illusory percepts, all being direct manifestations of the statistical relationship between images and scenes.}, doi = {10.1371/journal.pcbi.0030180}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Corney, Lotto - 2007 - What are lightness illusions and why do we see them.pdf:pdf}, issn = {1553-7358}, keywords = {Artificial Intelligence,Biomimetics,Biomimetics: methods,Humans,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Nerve Net,Nerve Net: physiology,Optical Illusions,Optical Illusions: physiology,Photometry,Photometry: methods,Visual Perception,Visual Perception: physiology}, pmid = {17907795}, url = {http://www.ncbi.nlm.nih.gov/pubmed/17907795}, year = 2007 } @Article{Commowick2008, Author = {Commowick, O and Arsigny, V and Isambert, a and Costa, J and Dhermain, F and Bidault, F and Bondiau, P-Y and Ayache, N and Malandain, G}, Title = {{An efficient locally affine framework for the smooth registration of anatomical structures.}}, Journal = {Medical image analysis}, Volume = {12}, Number = {4}, Pages = {427--41}, abstract = {Intra-subject and inter-subject nonlinear registration based on dense transformations requires the setting of many parameters, mainly for regularization. This task is a major issue, as the global quality of the registration will depend on it. Setting these parameters is, however, very hard, and they may have to be tuned for each patient when processing data acquired by different centers or using different protocols. Thus, we present in this article a method to introduce more coherence in the registration by using fewer degrees of freedom than with a dense registration. This is done by registering the images only on user-defined areas, using a set of affine transformations, which are optimized together in a very efficient manner. Our framework also ensures a smooth and coherent transformation thanks to a new regularization of the affine components. Finally, we ensure an invertible transformation thanks to the Log-Euclidean polyaffine framework. This allows us to get a more robust and very efficient registration method, while obtaining good results as explained below. We performed a qualitative and quantitative evaluation of the obtained results on two applications: first on atlas-based brain segmentation, comparing our results with a dense registration algorithm. Then the second application for which our framework is particularly well suited concerns bone registration in the lower-abdomen area. We obtain in this case a better positioning of the femoral heads than with a dense registration. For both applications, we show a significant improvement in computation time, which is crucial for clinical applications.}, doi = {10.1016/j.media.2008.01.002}, file = {::}, issn = {1361-8423}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Diagnostic Imaging,Diagnostic Imaging: methods,Humans,Image Processing, Computer-Assisted,Radiotherapy Planning, Computer-Assisted,Radiotherapy Planning, Computer-Assisted: methods,Sensitivity and Specificity}, month = aug, pmid = {18325825}, url = {http://www.ncbi.nlm.nih.gov/pubmed/18325825}, year = 2008 } @Article{Kerkyacharian2007a, Author = {Kerkyacharian, G´ Erard and Petrushev, Pencho and Picard, Dominique and Willer, Thomas}, Title = {{Needlet algorithms for estimation in inverse problems}}, Journal = {Electron. J. Stat}, Volume = {1}, Pages = {30--76}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kerkyacharian et al. - 2007 - Needlet algorithms for estimation in inverse problems.pdf:pdf}, year = 2007 } @InProceedings{Leow2008ISBI, Author = {Leow, Alex D. and Zhu, Siwei and McMahon, Katie L. and {de Zubicaray}, Greig I. and Meredith, G. Matthew and Wright, Margaret and Thompson, Paul M.}, Title = {The Tensor Distribution Function}, BookTitle = {5th IEEE International Symposium on Biomedical Imaging: From Nano to Macro}, Pages = {FR-P2a (poster)}, abstract = {Diffusion weighted MR imaging is a powerful tool that can be employed to study white matter microstructure by examing the 3D displacement profile of water molecules in brain tissue. By applying diffusion-sensitizing gradients along a minimum of 6 directions, second-order tensors can be computed to model dominant diffusion processes. However, it has been shown that conventional DTI is not sufficient to resolve crossing fiber tracts. More recently, High Angular Resolution Diffusion Imaging (HARDI) seeks to address this issue by employing more than 6 gradient directions. In this paper, we introduce the Tensor Distribution Function (TDF), a probability function defined on the space of symmetric and positive definite matrices. Here, fiber crossing is modeled as an ensemble of Gaussian diffusion processes with weights specified by the TDF. Once this optimal TDF is determined, ODF can easily be computed by analytic integration of the resulting displacement probability function. Moreover, principal fiber directions can also be directly derived from the TDF.}, file = {attachment\:Leow2008ISBI.pdf:attachment\:Leow2008ISBI.pdf:PDF}, year = 2008 } @Article{Wainwright, Author = {Wainwright, Martin}, Title = {{Graphical models and variational methods : Message-passing , convex relaxations , and all that}}, Journal = {Electrical Engineering}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Wainwright - Unknown - Graphical models and variational methods Message-passing , convex relaxations , and all that.pdf:pdf} } @Article{Tuch2004, Author = {Tuch, DS}, Title = {{Q-ball imaging}}, Journal = {change}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tuch - 2004 - Q-ball imaging.pdf:pdf}, url = {http://noodle.med.yale.edu/\~{}mjack/papers/tuch-2004.pdf}, year = 2004 } @Article{RHW+03, Author = {Reese, T. G. and Heid, O. and Weisskoff, R. M. and Wedeen, V. J.}, Title = {Reduction of eddy-current-induced distortion in diffusion {MRI} using a twice-refocused spin echo.}, Journal = {Magn Reson Med}, Volume = {49}, Number = {1}, Pages = {177-82}, abstract = {Image distortion due to field gradient eddy currents can create image artifacts in diffusion-weighted MR images. These images, acquired by measuring the attenuation of NMR signal due to directionally dependent diffusion, have recently been shown to be useful in the diagnosis and assessment of acute stroke and in mapping of tissue structure. This work presents an improvement on the spin-echo (SE) diffusion sequence that displays less distortion and consequently improves image quality. Adding a second refocusing pulse provides better image quality with less distortion at no cost in scanning efficiency or effectiveness, and allows more flexible diffusion gradient timing. By adjusting the timing of the diffusion gradients, eddy currents with a single exponential decay constant can be nulled, and eddy currents with similar decay constants can be greatly reduced. This new sequence is demonstrated in phantom measurements and in diffusion anisotropy images of normal human brain.}, authoraddress = {Department of Radiology, Massachusetts General Hospital, Boston, Massachusetts, USA. reese@nmr.MGH.harvard.edu}, keywords = {*Artifacts ; Brain/anatomy \& histology/pathology ; Echo-Planar Imaging/methods ; Humans ; Magnetic Resonance Imaging/*methods ; Phantoms, Imaging ; Stroke/diagnosis}, language = {eng}, medline-aid = {10.1002/mrm.10308 [doi]}, medline-ci = {Copyright 2003 Wiley-Liss, Inc.}, medline-crdt = {2003/01/02 04:00}, medline-da = {20030101}, medline-dcom = {20030422}, medline-edat = {2003/01/02 04:00}, medline-fau = {Reese, T G ; Heid, O ; Weisskoff, R M ; Wedeen, V J}, medline-gr = {R01 MH64044/MH/NIMH NIH HHS/United States}, medline-is = {0740-3194 (Print)}, medline-jid = {8505245}, medline-jt = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, medline-lr = {20071115}, medline-mhda = {2003/04/23 05:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {12509835}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, U.S. Gov't, P.H.S.}, medline-sb = {IM}, medline-so = {Magn Reson Med. 2003 Jan;49(1):177-82.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=12509835}, year = 2003 } @Article{hyvarinen2000ica, Author = {Hyv{\"a}rinen, A. and Oja, E.}, Title = {{Independent component analysis: algorithms and applications}}, Journal = {Neural networks}, Volume = {13}, Number = {4-5}, Pages = {411--430}, publisher = {Elsevier}, year = 2000 } @Article{Friedman2008, Author = {Friedman, Jerome and Hastie, Trevor}, Title = {{Regularization Paths for Generalized Linear Models via Coordinate Descent}}, Pages = {1--22}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Friedman, Hastie - 2008 - Regularization Paths for Generalized Linear Models via Coordinate Descent.pdf:pdf}, year = 2008 } @conference{lee2007trajectory, author = {Lee, J.G. and Han, J. and Whang, K.Y.}, booktitle = {Proceedings of the 2007 ACM SIGMOD international conference on Management of data}, organization = {ACM}, pages = {604}, title = {{Trajectory clustering: a partition-and-group framework}}, year = 2007 } @Article{Ipython2008, Author = {Ipython, The and Team, Development}, Title = {{IPython Documentation}}, Journal = {Development}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ipython, Team - 2008 - IPython Documentation.pdf:pdf}, year = 2008 } @Book{DiffMRIBook, Author = {{Heidi Johansen-Berg}}, Editor = {Heidi Johansen-Berg, Oxford Centre for Functional MRI of the Brain (FMRIB), Department of Clinical Neurology and Timothy E.J. Behrens, Department of Experimental Psychology, University of Oxford; Centre for Functional MRI of the Brain (FMRIB)}, Title = {Diffusion {MRI}}, Publisher = {Academic Press}, year = 2009 } @Article{Guo2005, Author = {Guo, D. and Shamai, S. and Verdu, S.}, Title = {{Mutual Information and Minimum Mean-Square Error in Gaussian Channels}}, Journal = {IEEE Transactions on Information Theory}, Volume = {51}, Number = {4}, Pages = {1261--1282}, doi = {10.1109/TIT.2005.844072}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Guo, Shamai, Verdu - 2005 - Mutual Information and Minimum Mean-Square Error in Gaussian Channels.pdf:pdf}, issn = {0018-9448}, month = apr, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=1412024}, year = 2005 } @Article{Mishra2007, Author = {Mishra, Arabinda and Lu, Yonggang and Choe, Ann S and Aldroubi, Akram and Gore, John C and Anderson, Adam W and Ding, Zhaohua}, Title = {{An image-processing toolset for diffusion tensor tractography.}}, Journal = {Magnetic resonance imaging}, Volume = {25}, Number = {3}, Pages = {365--76}, abstract = {Diffusion tensor imaging (DTI)-based fiber tractography holds great promise in delineating neuronal fiber tracts and, hence, providing connectivity maps of the neural networks in the human brain. An array of image-processing techniques has to be developed to turn DTI tractography into a practically useful tool. To this end, we have developed a suite of image-processing tools for fiber tractography with improved reliability. This article summarizes the main technical developments we have made to date, which include anisotropic smoothing, anisotropic interpolation, Bayesian fiber tracking and automatic fiber bundling. A primary focus of these techniques is the robustness to noise and partial volume averaging, the two major hurdles to reliable fiber tractography. Performance of these techniques has been comprehensively examined with simulated and in vivo DTI data, demonstrating improvements in the robustness and reliability of DTI tractography.}, doi = {10.1016/j.mri.2006.10.006}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mishra et al. - 2007 - An image-processing toolset for diffusion tensor tractography..pdf:pdf}, issn = {0730-725X}, keywords = {Algorithms,Artificial Intelligence,Brain,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Nerve Net,Nerve Net: anatomy \& histology,Neural Pathways,Neural Pathways: anatomy \& histology,Reproducibility of Results,Sensitivity and Specificity,Software}, pmid = {17371726}, url = {http://www.ncbi.nlm.nih.gov/pubmed/17371726}, year = 2007 } @conference{deriche1990dcm, author = {Deriche, R. and Faugeras, O.}, booktitle = {Pattern Recognition, 1990. Proceedings., 10th International Conference on}, title = {{2-D curve matching using high curvature points: application tostereo vision}}, volume = {1}, year = 1990 } @Article{Vogiatzis, Author = {Vogiatzis, George}, Title = {{Visual Estimation of Shape , Reflectance and Illumination}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Vogiatzis - Unknown - Visual Estimation of Shape , Reflectance and Illumination.pdf:pdf} } @Article{vernooij2007fda, Author = {Vernooij, M W and Smits, M. and Wielopolski, P A and Houston, G C and Krestin, G P and van der Lugt, A.}, Title = {{Fiber density asymmetry of the arcuate fasciculus in relation to functional hemispheric language lateralization in both right-and left-handed healthy subjects: A combined fMRI and DTI study}}, Journal = {Neuroimage}, Volume = {35}, Number = {3}, Pages = {1064--1076}, file = {attachment\:vernooij_arcuate_fasciculus_2007.pdf:attachment\:vernooij_arcuate_fasciculus_2007.pdf:PDF}, publisher = {Elsevier}, year = 2007 } @Article{KanaanPsych2006, Author = {Kanaan, R. A. and Shergill, S. S. and Barker, G. J. and Catani, M. and Ng, V. W. and Howard, R. and McGuire, P. K. and Jones, D. K.}, Title = {Tract-specific anisotropy measurements in diffusion tensor imaging.}, Journal = {Psychiatry Res}, Volume = {146}, Number = {1}, Pages = {73-82}, abstract = {Diffusion tensor magnetic resonance imaging (DT-MRI) has been used to examine the microstructure of individual white matter tracts, often in neuropsychiatric conditions without identifiable focal pathology. However, the voxel-based group-mapping and region-of-interest (ROI) approaches used to analyse the data have inherent conceptual and practical difficulties. Taking the example of the genu of the corpus callosum in a sample of schizophrenic patients, we discuss the difficulties in attempting to replicate a voxel-based finding of reduced anisotropy using two ROI methods. Firstly we consider conventional ROIs; secondly, we present a novel tractography-based approach. The problems of both methods are explored, particularly of high variance and ROI definition. The potential benefits of the tractographic method for neuropsychiatric conditions with subtle and diffuse pathology are outlined.}, authoraddress = {King's College London, Institute of Psychiatry, London, UK. r.kanaan@iop.kcl.ac.uk}, keywords = {Adult ; Anisotropy ; Brain/*pathology ; *Diffusion Magnetic Resonance Imaging ; Female ; Humans ; Male ; Middle Aged ; Schizophrenia/*pathology}, language = {eng}, medline-aid = {S0925-4927(05)00197-6 [pii] ; 10.1016/j.pscychresns.2005.11.002 [doi]}, medline-crdt = {2005/12/27 09:00}, medline-da = {20060227}, medline-dcom = {20060425}, medline-dep = {20051220}, medline-edat = {2005/12/27 09:00}, medline-fau = {Kanaan, Richard A ; Shergill, Sukhwinder S ; Barker, Gareth J ; Catani, Marco ; Ng, Virginia W ; Howard, Robert ; McGuire, Philip K ; Jones, Derek K}, medline-gr = {Wellcome Trust/United Kingdom}, medline-is = {0165-1781 (Print)}, medline-jid = {7911385}, medline-jt = {Psychiatry research}, medline-lr = {20080417}, medline-mhda = {2006/04/28 09:00}, medline-own = {NLM}, medline-phst = {2005/05/24 [received] ; 2005/09/13 [revised] ; 2005/11/03 [accepted] ; 2005/12/20 [aheadofprint]}, medline-pl = {Ireland}, medline-pmid = {16376059}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {Psychiatry Res. 2006 Jan 30;146(1):73-82. Epub 2005 Dec 20.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16376059}, year = 2006 } @Article{Mallo, Author = {Mallo, O and Peikert, R and Sigg, C and Sadlo, F}, Title = {{Illuminated lines revisited}}, Journal = {In Proceedings of IEEE Visualization}, Volume = {pages}, Pages = {19--26}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mallo et al. - Unknown - Illuminated lines revisited.pdf:pdf} } @Article{HM96, Author = {Haselgrove, J. C. and Moore, J. R.}, Title = {Correction for distortion of echo-planar images used to calculate the apparent diffusion coefficient.}, Journal = {Magn Reson Med}, Volume = {36}, Number = {6}, Pages = {960-4}, abstract = {An algorithm for correcting the distortions that occur in diffusion-weighted echo-planar images due to the strong diffusion-sensitizing gradients is presented. The dominant distortions may be considered to be only changes of scale coupled with a shear and linear translation in the phase-encoding direction. It is then possible to correct for them by using an algorithm in which each line of the image in the phase-encoding direction is considered in turn, with only one parameter (the scale) to be found by searching.}, authoraddress = {Department of Radiology, Children's Hospital of Philadelphia, PA 19104, USA.}, keywords = {*Algorithms ; Brain/pathology ; Echo-Planar Imaging/*methods ; Humans ; Image Enhancement/*methods ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {1996/12/01 00:00}, medline-da = {19970225}, medline-dcom = {19970225}, medline-edat = {1996/12/01}, medline-fau = {Haselgrove, J C ; Moore, J R}, medline-is = {0740-3194 (Print)}, medline-jid = {8505245}, medline-jt = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, medline-lr = {20041117}, medline-mhda = {1996/12/01 00:01}, medline-own = {NLM}, medline-pl = {UNITED STATES}, medline-pmid = {8946363}, medline-pst = {ppublish}, medline-pt = {Journal Article}, medline-sb = {IM}, medline-so = {Magn Reson Med. 1996 Dec;36(6):960-4.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=8946363}, year = 1996 } @Article{Kume2005, Author = {Kume, a.}, Title = {{Saddlepoint approximations for the Bingham and Fisher-Bingham normalising constants}}, Journal = {Biometrika}, Volume = {92}, Number = {2}, Pages = {465--476}, doi = {10.1093/biomet/92.2.465}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kume - 2005 - Saddlepoint approximations for the Bingham and Fisher-Bingham normalising constants.pdf:pdf}, issn = {0006-3444}, month = jun, url = {http://biomet.oxfordjournals.org/cgi/doi/10.1093/biomet/92.2.465}, year = 2005 } @Article{Koev2006, Author = {Koev, Plamen and Edelman, Alan}, Title = {{OF THE HYPERGEOMETRIC FUNCTION OF A MATRIX ARGUMENT}}, Journal = {Mathematics of Computation}, Volume = {75}, Number = {254}, Pages = {833--846}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Koev, Edelman - 2006 - OF THE HYPERGEOMETRIC FUNCTION OF A MATRIX ARGUMENT.pdf:pdf}, keywords = {and phrases,c 2006 american mathematical,eigenvalues of random matrices,grant dms-0314286,hypergeometric function of a,in part by nsf,jack function,matrix argument,polynomial,society,this work was supported,zonal}, year = 2006 } @conference{corouge2004towards, author = {Corouge, I. and Gouttard, S. and Gerig, G.}, booktitle = {International Symposium on Biomedical Imaging}, organization = {Citeseer}, pages = {344--347}, title = {{Towards a shape model of white matter fiber bundles using diffusion tensor MRI}}, year = 2004 } @Article{Koles1991a, Author = {Koles, Z J}, Title = {{The quantitative extraction and topographic mapping of the abnormal components in the clinical EEG.}}, Journal = {Electroencephalography and clinical neurophysiology}, Volume = {79}, Number = {6}, Pages = {440--7}, abstract = {A method is described which seems to be effective for extracting the abnormal components from the clinical EEG. The approach involves the use of a set a spatial patterns which are common to recorded and 'normal' EEGs and which can account for maximally different proportions of the combined variances in both EEGs. These spatial factors are used to decompose the EEG into orthogonal temporal wave forms which can be judged by the expert electroencephalographer to be abnormal, normal or of artifactual origin. The original EEG is then reconstructed using only the abnormal components and principal component analysis is used to present the spatial topography of the abnormal components. The effectiveness of the method is discussed along with its value for localization of abnormal sources. It is suggested, in conclusion, that the approach described may be optimal for interpretation of the clinical EEG since it allows what is best in terms of quantitative analysis of the EEG to be combined with the best that is available in terms of expert qualitative analysis.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Koles - 1991 - The quantitative extraction and topographic mapping of the abnormal components in the clinical EEG..pdf:pdf}, issn = {0013-4694}, keywords = {Brain,Brain Mapping,Brain: physiology,Electroencephalography,Electroencephalography: methods,Humans,Signal Processing, Computer-Assisted}, month = dec, pmid = {1721571}, url = {http://www.ncbi.nlm.nih.gov/pubmed/1721571}, year = 1991 } @Article{Kim, Author = {Kim, Min-soo}, Title = {{A Particle-and-Density Based Evolutionary Clustering Method for Dynamic Networks}}, Number = {1}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kim - Unknown - A Particle-and-Density Based Evolutionary Clustering Method for Dynamic Networks.pdf:pdf} } @Article{Marinucci2008, Author = {Marinucci, D and Pietrobon, D and Balbi, A and Baldi, P and Cabella, P and Kerkyacharian, G and Natoli, P and Picard, D and Vittorio, N}, Title = {{Spherical Needlets for CMB Data Analysis}}, Volume = {000}, Number = {February}, arxivid = {arXiv:0707.0844v1}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Marinucci et al. - 2008 - Spherical Needlets for CMB Data Analysis.pdf:pdf}, year = 2008 } @Article{ODonnell_IEEETMI07, Author = {O'Donnell, L. J. and Westin, C. F.}, Title = {Automatic tractography segmentation using a high-dimensional white matter atlas.}, Journal = {IEEE Trans Med Imaging}, Volume = {26}, Number = {11}, Pages = {1562-75}, abstract = {We propose a new white matter atlas creation method that learns a model of the common white matter structures present in a group of subjects. We demonstrate that our atlas creation method, which is based on group spectral clustering of tractography, discovers structures corresponding to expected white matter anatomy such as the corpus callosum, uncinate fasciculus, cingulum bundles, arcuate fasciculus, and corona radiata. The white matter clusters are augmented with expert anatomical labels and stored in a new type of atlas that we call a high-dimensional white matter atlas. We then show how to perform automatic segmentation of tractography from novel subjects by extending the spectral clustering solution, stored in the atlas, using the Nystrom method. We present results regarding the stability of our method and parameter choices. Finally we give results from an atlas creation and automatic segmentation experiment. We demonstrate that our automatic tractography segmentation identifies corresponding white matter regions across hemispheres and across subjects, enabling group comparison of white matter anatomy.}, authoraddress = {Golby Laboratory, Department of Neurosurgery, Brigham and Women's Hospital, Harvard Medical School, Boston, MA 02115, USA. lauren@csail.mit.edu}, keywords = {Algorithms ; Artificial Intelligence ; Computer Simulation ; Corpus Callosum/*anatomy \& histology ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/*methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/*methods ; Models, Anatomic ; Models, Neurological ; Nerve Fibers, Myelinated/*ultrastructure ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity ; Subtraction Technique}, language = {eng}, medline-aid = {10.1109/TMI.2007.906785 [doi]}, medline-crdt = {2007/11/29 09:00}, medline-da = {20071128}, medline-dcom = {20080122}, medline-edat = {2007/11/29 09:00}, medline-fau = {O'Donnell, Lauren J ; Westin, Carl-Fredrik}, medline-gr = {P41-RR13218/RR/NCRR NIH HHS/United States ; P41-RR15241/RR/NCRR NIH HHS/United States ; R01-AG20012/AG/NIA NIH HHS/United States ; R01-MH074794/MH/NIMH NIH HHS/United States ; U24-RR021382/RR/NCRR NIH HHS/United States ; U41-RR019703/RR/NCRR NIH HHS/United States}, medline-is = {0278-0062 (Print)}, medline-jid = {8310780}, medline-jt = {IEEE transactions on medical imaging}, medline-mhda = {2008/01/23 09:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {18041271}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural}, medline-sb = {IM}, medline-so = {IEEE Trans Med Imaging. 2007 Nov;26(11):1562-75.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18041271}, year = 2007 } @Article{Bihan2001, Author = {Bihan, MD Denis Le and Mangin, JF and Poupon, C}, Title = {{Diffusion tensor imaging: concepts and applications}}, Journal = {Journal of Magnetic \ldots}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Bihan, Mangin, Poupon - 2001 - Diffusion tensor imaging concepts and applications.pdf:pdf}, url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.114.9156\&rep=rep1\&type=pdf}, year = 2001 } @Article{LWT+03, Author = {Lazar, M. and Weinstein, D. M. and Tsuruda, J. S. and Hasan, K. M. and Arfanakis, K. and Meyerand, M. E. and Badie, B. and Rowley, H. A. and Haughton, V. and Field, A. and Alexander, A. L.}, Title = {White matter tractography using diffusion tensor deflection.}, Journal = {Hum Brain Mapp}, Volume = {18}, Number = {4}, Pages = {306-21}, abstract = {Diffusion tensor MRI provides unique directional diffusion information that can be used to estimate the patterns of white matter connectivity in the human brain. In this study, the behavior of an algorithm for white matter tractography is examined. The algorithm, called TEND, uses the entire diffusion tensor to deflect the estimated fiber trajectory. Simulations and imaging experiments on in vivo human brains were performed to investigate the behavior of the tractography algorithm. The simulations show that the deflection term is less sensitive than the major eigenvector to image noise. In the human brain imaging experiments, estimated tracts were generated in corpus callosum, corticospinal tract, internal capsule, corona radiata, superior longitudinal fasciculus, inferior longitudinal fasciculus, fronto-occipital fasciculus, and uncinate fasciculus. This approach is promising for mapping the organizational patterns of white matter in the human brain as well as mapping the relationship between major fiber trajectories and the location and extent of brain lesions.}, authoraddress = {Department of Physics, University of Utah, Salt Lake City, Utah, USA.}, keywords = {Algorithms ; Brain Mapping/*methods ; Corpus Callosum/physiology ; Humans ; Nerve Fibers, Myelinated/*physiology ; Neural Pathways/physiology ; Pyramidal Tracts/physiology}, language = {eng}, medline-aid = {10.1002/hbm.10102 [doi]}, medline-ci = {Copyright 2003 Wiley-Liss, Inc.}, medline-crdt = {2003/03/13 04:00}, medline-da = {20030312}, medline-dcom = {20030530}, medline-edat = {2003/03/13 04:00}, medline-fau = {Lazar, Mariana ; Weinstein, David M ; Tsuruda, Jay S ; Hasan, Khader M ; Arfanakis, Konstantinos ; Meyerand, M Elizabeth ; Badie, Benham ; Rowley, Howard A ; Haughton, Victor ; Field, Aaron ; Alexander, Andrew L}, medline-gr = {MH62015/MH/NIMH NIH HHS/United States ; P30 CA42014/CA/NCI NIH HHS/United States}, medline-is = {1065-9471 (Print)}, medline-jid = {9419065}, medline-jt = {Human brain mapping}, medline-lr = {20071114}, medline-mhda = {2003/05/31 05:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {12632468}, medline-pst = {ppublish}, medline-pt = {Comparative Study ; Journal Article ; Research Support, U.S. Gov't, P.H.S.}, medline-sb = {IM}, medline-so = {Hum Brain Mapp. 2003 Apr;18(4):306-21.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=12632468}, year = 2003 } @Article{Heil, Author = {Heil, Christopher}, Title = {{No Title}}, Journal = {Proofs}, Number = {1}, Pages = {2--5}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Heil - Unknown - No Title.pdf:pdf} } @Article{Rules2004, Author = {Rules, Association}, Title = {{Outline of the Course 1 . Introduction and Terminology 2 . Data Warehousing ( sketch ) Statement of the Problem}}, Pages = {155--187}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Rules - 2004 - Outline of the Course 1 . Introduction and Terminology 2 . Data Warehousing ( sketch ) Statement of the Problem.pdf:pdf}, year = 2004 } @Article{Papadakis1999, Author = {Papadakis, NG and Xing, D and Houston, GC and Smith, JM}, Title = {{A study of rotationally invariant and symmetric indices of diffusion anisotropy}}, Journal = {Magnetic resonance \ldots}, url = {http://linkinghub.elsevier.com/retrieve/pii/S0730725X99000296}, year = 1999 } @Article{Drepper2007, Author = {Drepper, Ulrich and Hat, Red}, Title = {{What Every Programmer Should Know About Memory}}, Journal = {Changes}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Drepper, Hat - 2007 - What Every Programmer Should Know About Memory.pdf:pdf}, year = 2007 } @Article{WWS+08, Author = {Wedeen, V. J. and Wang, R. P. and Schmahmann, J. D. and Benner, T. and Tseng, W. Y. and Dai, G. and Pandya, D. N. and Hagmann, P. and D'Arceuil, H. and de Crespigny, A. J.}, Title = {Diffusion spectrum magnetic resonance imaging ({DSI}) tractography of crossing fibers.}, Journal = {Neuroimage}, Volume = {41}, Number = {4}, Pages = {1267-77}, abstract = {MRI tractography is the mapping of neural fiber pathways based on diffusion MRI of tissue diffusion anisotropy. Tractography based on diffusion tensor imaging (DTI) cannot directly image multiple fiber orientations within a single voxel. To address this limitation, diffusion spectrum MRI (DSI) and related methods were developed to image complex distributions of intravoxel fiber orientation. Here we demonstrate that tractography based on DSI has the capacity to image crossing fibers in neural tissue. DSI was performed in formalin-fixed brains of adult macaque and in the brains of healthy human subjects. Fiber tract solutions were constructed by a streamline procedure, following directions of maximum diffusion at every point, and analyzed in an interactive visualization environment (TrackVis). We report that DSI tractography accurately shows the known anatomic fiber crossings in optic chiasm, centrum semiovale, and brainstem; fiber intersections in gray matter, including cerebellar folia and the caudate nucleus; and radial fiber architecture in cerebral cortex. In contrast, none of these examples of fiber crossing and complex structure was identified by DTI analysis of the same data sets. These findings indicate that DSI tractography is able to image crossing fibers in neural tissue, an essential step toward non-invasive imaging of connectional neuroanatomy.}, authoraddress = {Department of Radiology, MGH Martinos Center for Biomedical Imaging, Harvard Medical School, Charlestown, MA 02129, USA. van@nmr.mgh.harvard.edu}, keywords = {Adult ; Algorithms ; Animals ; Brain/anatomy \& histology ; Diffusion Magnetic Resonance Imaging/*methods ; Female ; Humans ; Image Processing, Computer-Assisted/methods ; Macaca fascicularis ; Male ; Middle Aged ; Nerve Fibers/*physiology ; Neural Pathways/*anatomy \& histology/*physiology}, language = {eng}, medline-aid = {S1053-8119(08)00253-X [pii] ; 10.1016/j.neuroimage.2008.03.036 [doi]}, medline-crdt = {2008/05/23 09:00}, medline-da = {20080616}, medline-dcom = {20080829}, medline-dep = {20080408}, medline-edat = {2008/05/23 09:00}, medline-fau = {Wedeen, V J ; Wang, R P ; Schmahmann, J D ; Benner, T ; Tseng, W Y I ; Dai, G ; Pandya, D N ; Hagmann, P ; D'Arceuil, H ; de Crespigny, A J}, medline-gr = {1R01 MH 64044/MH/NIMH NIH HHS/United States ; 1R01 MH67980/MH/NIMH NIH HHS/United States ; 1R01EB00790/EB/NIBIB NIH HHS/United States ; 1R01NS401285/NS/NINDS NIH HHS/United States ; 1S10RR016811-01/RR/NCRR NIH HHS/United States ; P41RR14075/RR/NCRR NIH HHS/United States}, medline-is = {1053-8119 (Print)}, medline-jid = {9215515}, medline-jt = {NeuroImage}, medline-mhda = {2008/08/30 09:00}, medline-own = {NLM}, medline-phst = {2007/11/30 [received] ; 2008/03/14 [revised] ; 2008/03/17 [accepted] ; 2008/04/08 [aheadofprint]}, medline-pl = {United States}, medline-pmid = {18495497}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {Neuroimage. 2008 Jul 15;41(4):1267-77. Epub 2008 Apr 8.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18495497}, year = 2008 } @Article{Indyk2003, Author = {Indyk, Piotr and Venkatasubramanian, Suresh}, Title = {{Approximate congruence in nearly linear time}}, Journal = {Computational Geometry}, Volume = {24}, Pages = {115--128}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Indyk, Venkatasubramanian - 2003 - Approximate congruence in nearly linear time.pdf:pdf}, keywords = {bottleneck distance,computational geometry,hall,metric entropy,pattern matching,point set matching,s}, year = 2003 } @Article{Arsigny2009, Author = {Arsigny, Vincent and Commowick, Olivier and Ayache, Nicholas and Pennec, Xavier}, Title = {{A Fast and Log-Euclidean Polyaffine Framework for Locally Linear Registration}}, Journal = {Journal of Mathematical Imaging and Vision}, Volume = {33}, Number = {2}, Pages = {222--238}, doi = {10.1007/s10851-008-0135-9}, file = {::}, issn = {0924-9907}, keywords = {arsigny,ayache,commowick,diffeomorphisms,ing,locally affine transformations,log-euclidean,medical imag-,n,non-rigid registration,o,ode,pennec,polyaffine transformations,v,x}, month = jan, url = {http://www.springerlink.com/index/10.1007/s10851-008-0135-9}, year = 2009 } @Article{Close2009, Author = {Close, Thomas G and Tournier, Jacques-Donald and Calamante, Fernando and Johnston, Leigh a and Mareels, Iven and Connelly, Alan}, Title = {{A software tool to generate simulated white matter structures for the assessment of fibre-tracking algorithms.}}, Journal = {NeuroImage}, Volume = {47}, Number = {4}, Pages = {1288--300}, abstract = {The assessment of Diffusion-Weighted MRI (DW-MRI) fibre-tracking algorithms has been limited by the lack of an appropriate 'gold standard'. Practical limitations of alternative methods and physical models have meant that numerical simulations have become the method of choice in practice. However, previous numerical phantoms have consisted of separate fibres embedded in homogeneous backgrounds, which do not capture the true nature of white matter. In this paper we describe a method that is able to randomly generate numerical structures consisting of densely packed bundles of fibres, which are much more representative of human white matter, and simulate the DW-MR images that would arise from them under many imaging conditions. User-defined parameters may be adjusted to produce structures with a range of complexities that spans the levels we would expect to find in vivo. These structures are shown to contain many different features that occur in human white matter and which could confound fibre-tracking algorithms, such as tract kissing and crossing. Furthermore, combinations of such features can be sampled by the random generation of many different structures with consistent levels of complexity. The proposed software provides means for quantitative assessment via direct comparison between tracking results and the exact location of the generated fibres. This should greatly improve our understanding of algorithm performance and therefore prove an important tool for fibre tracking development.}, doi = {10.1016/j.neuroimage.2009.03.077}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Close et al. - 2009 - A software tool to generate simulated white matter structures for the assessment of fibre-tracking algorithms..pdf:pdf}, issn = {1095-9572}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Computer Simulation,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Magnetic Resonance Imaging,Magnetic Resonance Imaging: methods,Models, Anatomic,Models, Neurological,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity,Software}, pmid = {19361565}, publisher = {Elsevier Inc.}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19361565}, year = 2009 } @Misc{TheMendeleySupportTeam2010, Author = {{The Mendeley Support Team}}, Title = {{Getting Started with Mendeley}}, abstract = {A quick introduction to Mendeley. Learn how Mendeley creates your personal digital library, how to organize and annotate documents, how to collaborate and share with colleagues, and how to generate citations and bibliographies.}, address = {London}, booktitle = {Mendeley Desktop}, file = {:usr/share/doc/mendeleydesktop/FAQ.pdf:pdf}, keywords = {Mendeley,how-to,user manual}, pages = {1--14}, publisher = {Mendeley Ltd.}, url = {http://www.mendeley.com}, year = 2010 } @conference{pickalov2006tra, author = {Pickalov, V. and Basser, P.J.}, booktitle = {3rd IEEE International Symposium on Biomedical Imaging: Nano to Macro, 2006}, pages = {710--713}, title = {{3d tomographic reconstruction of the average propagator from mri data}}, year = 2006 } @Article{PCC+08, Author = {Perrin, M. and Cointepas, Y. and Cachia, A. and Poupon, C. and Thirion, B. and Riviere, D. and Cathier, P. and El Kouby, V. and Constantinesco, A. and Le Bihan, D. and Mangin, J. F.}, Title = {Connectivity-{B}ased {P}arcellation of the {C}ortical {M}antle {U}sing q-{B}all {D}iffusion {I}maging.}, Journal = {Int J Biomed Imaging}, Volume = {2008}, Pages = {368406}, abstract = {This paper exploits the idea that each individual brain region has a specific connection profile to create parcellations of the cortical mantle using MR diffusion imaging. The parcellation is performed in two steps. First, the cortical mantle is split at a macroscopic level into 36 large gyri using a sulcus recognition system. Then, for each voxel of the cortex, a connection profile is computed using a probabilistic tractography framework. The tractography is performed from q fields using regularized particle trajectories. Fiber ODF are inferred from the q-balls using a sharpening process focusing the weight around the q-ball local maxima. A sophisticated mask of propagation computed from a T1-weighted image perfectly aligned with the diffusion data prevents the particles from crossing the cortical folds. During propagation, the particles father child particles in order to improve the sampling of the long fascicles. For each voxel, intersection of the particle trajectories with the gyri lead to a connectivity profile made up of only 36 connection strengths. These profiles are clustered on a gyrus by gyrus basis using a K-means approach including spatial regularization. The reproducibility of the results is studied for three subjects using spatial normalization.}, authoraddress = {NeuroSpin Institut d'Imagerie BioMedicale, Commissariat l'Energie Atomique (CEA), Gif-sur-Yvette 91191, France.}, language = {eng}, medline-aid = {10.1155/2008/368406 [doi]}, medline-crdt = {2008/04/11 09:00}, medline-da = {20080410}, medline-edat = {2008/04/11 09:00}, medline-fau = {Perrin, Muriel ; Cointepas, Yann ; Cachia, Arnaud ; Poupon, Cyril ; Thirion, Bertrand ; Riviere, Denis ; Cathier, Pascal ; El Kouby, Vincent ; Constantinesco, Andre ; Le Bihan, Denis ; Mangin, Jean-Francois}, medline-is = {1687-4188 (Print)}, medline-jid = {101250756}, medline-jt = {International journal of biomedical imaging}, medline-mhda = {2008/04/11 09:00}, medline-oid = {NLM: PMC2288697}, medline-own = {NLM}, medline-phst = {2007/09/01 [received] ; 2007/11/30 [revised] ; 2007/12/16 [accepted]}, medline-pl = {United States}, medline-pmc = {PMC2288697}, medline-pmid = {18401457}, medline-pst = {ppublish}, medline-pt = {Journal Article}, medline-so = {Int J Biomed Imaging. 2008;2008:368406.}, medline-stat = {In-Data-Review}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18401457}, year = 2008 } @Article{Tsiaras2009, Author = {Tsiaras, Vassilis L}, Title = {{Algorithms for the Analysis and Visualization of Biomedical Networks}}, Journal = {October}, Number = {October}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tsiaras - 2009 - Algorithms for the Analysis and Visualization of Biomedical Networks.pdf:pdf}, year = 2009 } @Article{Maaten2008, Author = {Maaten, L and Hinton, G}, Title = {{Visualizing data using t-sne}}, Journal = {Journal of Machine Learning Research}, url = {http://scholar.google.co.uk/scholar?q=hinton t-sne\&oe=utf-8\&rls=com.ubuntu:en-GB:official\&client=firefox-a\&um=1\&ie=UTF-8\&sa=N\&hl=en\&tab=ws\#2}, year = 2008 } @Article{NedjatiGilani2008ISMRM, Author = {Nedjati-Gilani, S. and Parker, G. J. and Alexander, D. C.}, Title = {Regularized super-resolution for diffusion \{{M}{RI}\}}, Journal = {Proc. Intl. Soc. Mag. Reson. Med.}, Volume = {16}, Pages = {41}, abstract = {We present a new regularized super-resolution method, which finds fibre orientations and volume fractions on a sub-voxel scale and helps distinguish various fibre configurations such as fanning, bending and partial volume effects. We treat the task as a general inverse problem, which we solve by regularization and optimization, and run our method on human brain data.}, file = {attachment\:NedjatiGilani2008ISMRM.pdf:attachment\:NedjatiGilani2008ISMRM.pdf:PDF}, year = 2008 } @Article{Jones1999, Author = {Jones, D K and Horsfield, M a and Simmons, a}, Title = {{Optimal strategies for measuring diffusion in anisotropic systems by magnetic resonance imaging.}}, Journal = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, Volume = {42}, Number = {3}, Pages = {515--25}, abstract = {The optimization of acquisition parameters for precise measurement of diffusion in anisotropic systems is described. First, an algorithm is presented that minimizes the bias inherent in making measurements with a fixed set of gradient vector directions by spreading out measurements in 3-dimensional gradient vector space. Next, it is shown how the set of b-matrices and echo time can be optimized for estimating the diffusion tensor and its scalar invariants. The standard deviation in the estimate of the tensor trace in a water phantom was reduced by more than 40\% and the artefactual anisotropy was reduced by more than 60\% when using the optimized scheme compared with a more conventional scheme for the same scan time, and marked improvements are demonstrated in the human brain with the optimized sequences. Use of these optimal schemes results in reduced scan times, increased precision, or improved resolution in diffusion tensor images. Magn Reson Med 42:515-525, 1999.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Jones, Horsfield, Simmons - 1999 - Optimal strategies for measuring diffusion in anisotropic systems by magnetic resonance imaging..pdf:pdf}, issn = {0740-3194}, keywords = {Adult,Algorithms,Anisotropy,Brain,Brain: anatomy \& histology,Diffusion,Humans,Linear Models,Magnetic Resonance Imaging,Magnetic Resonance Imaging: methods,Models, Structural,Phantoms, Imaging,Water}, month = sep, pmid = {10467296}, url = {http://www.ncbi.nlm.nih.gov/pubmed/10467296}, year = 1999 } @Article{Szeliski2006, Author = {Szeliski, Richard}, Title = {{Image Alignment and Stitching: A Tutorial}}, Journal = {Foundations and Trends® in Computer Graphics and Vision}, Volume = {2}, Number = {1}, Pages = {1--104}, doi = {10.1561/0600000009}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Szeliski - 2006 - Image Alignment and Stitching A Tutorial.pdf:pdf}, issn = {1572-2740}, url = {http://www.nowpublishers.com/product.aspx?product=CGV\&doi=0600000009}, year = 2006 } @Article{Maddah_IEEEBI2008, Author = {Maddah, M. and Zollei, L. and Grimson, W. E. and Westin, C. F. and Wells, W. M.}, Title = {A {M}athematical {F}ramework for {I}ncorporating {A}natomical {K}nowledge in {DT}-{MRI} {A}nalysis.}, Journal = {Proc IEEE Int Symp Biomed Imaging}, Volume = {4543943}, Pages = {105-108}, abstract = {We propose a Bayesian approach to incorporate anatomical information in the clustering of fiber trajectories. An expectation-maximization (EM) algorithm is used to cluster the trajectories, in which an atlas serves as the prior on the labels. The atlas guides the clustering algorithm and makes the resulting bundles anatomically meaningful. In addition, it provides the seed points for the tractography and initial settings of the EM algorithm. The proposed approach provides a robust and automated tool for tract-oriented analysis both in a single subject and over a population.}, authoraddress = {Computer Science and Artificial Intelligence Laboratory, Massachusetts Institute of Technology, Cambridge, MA 02139, USA.}, language = {ENG}, medline-aid = {10.1109/ISBI.2008.4540943 [doi]}, medline-crdt = {2009/02/13 09:00}, medline-da = {20090305}, medline-edat = {2009/02/13 09:00}, medline-gr = {P41 RR013218-09/NCRR NIH HHS/United States ; R01 MH074794-02/NIMH NIH HHS/United States ; R01 NS051826-04/NINDS NIH HHS/United States ; U41 RR019703-03/NCRR NIH HHS/United States ; U54 EB005149-04/NIBIB NIH HHS/United States}, medline-is = {1945-7928 (Print)}, medline-jid = {101492570}, medline-jt = {Proceedings / IEEE International Symposium on Biomedical Imaging: from nano to macro. IEEE International Symposium on Biomedical Imaging}, medline-mhda = {2009/02/13 09:00}, medline-mid = {NIHMS88086}, medline-own = {NLM}, medline-pmc = {PMC2638065}, medline-pmid = {19212449}, medline-pst = {ppublish}, medline-pt = {JOURNAL ARTICLE}, medline-so = {Proc IEEE Int Symp Biomed Imaging. 2008;4543943:105-108.}, medline-stat = {Publisher}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=19212449}, year = 2008 } @Article{Santana2010, Author = {Santana, Roberto and Bielza, Concha and Larra, Pedro}, Title = {{Classification of MEG data using a combined machine learning approach Problem definition}}, Journal = {Challenge}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Santana, Bielza, Larra - 2010 - Classification of MEG data using a combined machine learning approach Problem definition.pdf:pdf}, year = 2010 } @Article{Kohn2009, Author = {K\"{o}hn, Alexander and Klein, Jan and Weiler, Florian and Peitgen, Heinz-Otto}, Title = {{A GPU-based fiber tracking framework using geometry shaders}}, Journal = {Proceedings of SPIE}, Pages = {72611J--72611J--10}, doi = {10.1117/12.812219}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/K\"{o}hn et al. - 2009 - A GPU-based fiber tracking framework using geometry shaders.pdf:pdf}, keywords = {diffusion tensor imaging,fiber tracking,gpu,visualization}, publisher = {Spie}, url = {http://link.aip.org/link/PSISDG/v7261/i1/p72611J/s1\&Agg=doi}, year = 2009 } @Misc{okada2006dtf, Author = {Okada, T. and Miki, Y. and Fushimi, Y. and Hanakawa, T. and Kanagaki, M. and Yamamoto, A. and Urayama, S. and Fukuyama, H. and Hiraoka, M. and Togashi, K.}, Title = {{Diffusion-Tensor Fiber Tractography: Intraindividual Comparison of 3.0-T and 1.5-T MR Imaging 1}}, journal = {Radiology}, number = {2}, pages = {668--678}, publisher = {RSNA}, volume = {238}, year = 2006 } @Article{Mittmann2010, Author = {Mittmann, Adiel and Nobrega, Tiago H C and Comunello, Eros and Pinto, Juliano P O and Dellani, Paulo R and Stoeter, Peter and von Wangenheim, Aldo}, Title = {{Performing Real-Time Interactive Fiber Tracking.}}, Journal = {Journal of digital imaging : the official journal of the Society for Computer Applications in Radiology}, abstract = {Fiber tracking is a technique that, based on a diffusion tensor magnetic resonance imaging dataset, locates the fiber bundles in the human brain. Because it is a computationally expensive process, the interactivity of current fiber tracking tools is limited. We propose a new approach, which we termed real-time interactive fiber tracking, which aims at providing a rich and intuitive environment for the neuroradiologist. In this approach, fiber tracking is executed automatically every time the user acts upon the application. Particularly, when the volume of interest from which fiber trajectories are calculated is moved on the screen, fiber tracking is executed, even while it is being moved. We present our fiber tracking tool, which implements the real-time fiber tracking concept by using the video card's graphics processing units to execute the fiber tracking algorithm. Results show that real-time interactive fiber tracking is feasible on computers equipped with common, low-cost video cards.}, doi = {10.1007/s10278-009-9266-9}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mittmann et al. - 2010 - Performing Real-Time Interactive Fiber Tracking..pdf:pdf}, issn = {1618-727X}, keywords = {11 which finds,diffusion tensor imaging,fiber tracking,fiber trajectories by following,graphics processing units,of them being the,real-time applications,streamline method,the main diffusion}, month = feb, pmid = {20155382}, url = {http://www.ncbi.nlm.nih.gov/pubmed/20155382}, year = 2010 } @Article{Kindlmann2007, Author = {Kindlmann, Gordon and Tricoche, Xavier and Westin, Carl-Fredrik}, Title = {{Delineating white matter structure in diffusion tensor MRI with anisotropy creases.}}, Journal = {Medical image analysis}, Volume = {11}, Number = {5}, Pages = {492--502}, abstract = {Geometric models of white matter architecture play an increasing role in neuroscientific applications of diffusion tensor imaging, and the most popular method for building them is fiber tractography. For some analysis tasks, however, a compelling alternative may be found in the first and second derivatives of diffusion anisotropy. We extend to tensor fields the notion from classical computer vision of ridges and valleys, and define anisotropy creases as features of locally extremal tensor anisotropy. Mathematically, these are the loci where the gradient of anisotropy is orthogonal to one or more eigenvectors of its Hessian. We propose that anisotropy creases provide a basis for extracting a skeleton of the major white matter pathways, in that ridges of anisotropy coincide with interiors of fiber tracts, and valleys of anisotropy coincide with the interfaces between adjacent but distinctly oriented tracts. The crease extraction algorithm we present generates high-quality polygonal models of crease surfaces, which are further simplified by connected-component analysis. We demonstrate anisotropy creases on measured diffusion MRI data, and visualize them in combination with tractography to confirm their anatomic relevance.}, doi = {10.1016/j.media.2007.07.005}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kindlmann, Tricoche, Westin - 2007 - Delineating white matter structure in diffusion tensor MRI with anisotropy creases..pdf:pdf}, issn = {1361-8415}, keywords = {Algorithms,Anisotropy,Artificial Intelligence,Brain,Brain: cytology,Cluster Analysis,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Neural Pathways,Neural Pathways: cytology,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity}, pmid = {17804278}, url = {http://www.ncbi.nlm.nih.gov/pubmed/17804278}, year = 2007 } @Article{Koles1991, Author = {Koles, Z J}, Title = {{The quantitative extraction and topographic mapping of the abnormal components in the clinical EEG.}}, Journal = {Electroencephalography and clinical neurophysiology}, Volume = {79}, Number = {6}, Pages = {440--7}, abstract = {A method is described which seems to be effective for extracting the abnormal components from the clinical EEG. The approach involves the use of a set a spatial patterns which are common to recorded and 'normal' EEGs and which can account for maximally different proportions of the combined variances in both EEGs. These spatial factors are used to decompose the EEG into orthogonal temporal wave forms which can be judged by the expert electroencephalographer to be abnormal, normal or of artifactual origin. The original EEG is then reconstructed using only the abnormal components and principal component analysis is used to present the spatial topography of the abnormal components. The effectiveness of the method is discussed along with its value for localization of abnormal sources. It is suggested, in conclusion, that the approach described may be optimal for interpretation of the clinical EEG since it allows what is best in terms of quantitative analysis of the EEG to be combined with the best that is available in terms of expert qualitative analysis.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Koles - 1991 - The quantitative extraction and topographic mapping of the abnormal components in the clinical EEG..pdf:pdf}, issn = {0013-4694}, keywords = {Brain,Brain Mapping,Brain: physiology,Electroencephalography,Electroencephalography: methods,Humans,Signal Processing, Computer-Assisted}, month = dec, pmid = {1721571}, url = {http://www.ncbi.nlm.nih.gov/pubmed/1721571}, year = 1991 } @Article{andersson2002mbm, Author = {Andersson, J.L.R. and Skare, S.}, Title = {{A model-based method for retrospective correction of geometric distortions in diffusion-weighted EPI}}, Journal = {Neuroimage}, Volume = {16}, Number = {1}, Pages = {177--199}, publisher = {Elsevier Inc.}, year = 2002 } @Article{behrens2005rca, Author = {Behrens, T E and Johansen-Berg, H.}, Title = {{Relating connectional architecture to grey matter function using diffusion imaging.}}, Journal = {Philos Trans R Soc Lond B Biol Sci}, Volume = {360}, Number = {1457}, Pages = {903--11}, file = {attachment\:behrens_dti_connectivity_function_2005.pdf:attachment\:behrens_dti_connectivity_function_2005.pdf:PDF}, year = 2005 } @Article{Hall2009, Author = {Hall, Matt G and Alexander, Daniel C}, Title = {{Convergence and parameter choice for Monte-Carlo simulations of diffusion MRI.}}, Journal = {IEEE transactions on medical imaging}, Volume = {28}, Number = {9}, Pages = {1354--64}, abstract = {This paper describes a general and flexible Monte- Carlo simulation framework for diffusing spins that generates realistic synthetic data for diffusion magnetic resonance imaging. Similar systems in the literature consider only simple substrates and their authors do not consider convergence and parameter optimization. We show how to run Monte-Carlo simulations within complex irregular substrates. We compare the results of the Monte-Carlo simulation to an analytical model of restricted diffusion to assess precision and accuracy of the generated results. We obtain an optimal combination of spins and updates for a given run time by trading off number of updates in favor of number of spins such that precision and accuracy of sythesized data are both optimized. Further experiments demonstrate the system using a tissue environment that current analytic models cannot capture. This tissue model incorporates swelling, abutting, and deformation. Swelling-induced restriction in the extracellular space due to the effects of abutting cylinders leads to large departures from the predictions of the analytical model, which does not capture these effects. This swelling-induced restriction may be an important mechanism in explaining the changes in apparent diffusion constant observed in the aftermath of acute ischemic stroke.}, doi = {10.1109/TMI.2009.2015756}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Hall, Alexander - 2009 - Convergence and parameter choice for Monte-Carlo simulations of diffusion MRI..pdf:pdf}, issn = {1558-0062}, keywords = {Algorithms,Brain Edema,Brain Edema: pathology,Brain Ischemia,Brain Ischemia: pathology,Computer Simulation,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Monte Carlo Method,Reproducibility of Results,Stroke,Stroke: pathology}, month = sep, pmid = {19273001}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19273001}, year = 2009 } @Article{Perbet, Author = {Perbet, Frank}, Title = {{Correlated Probabilistic Trajectories for Pedestrian Motion Detection}}, Journal = {Image (Rochester, N.Y.)}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Perbet - Unknown - Correlated Probabilistic Trajectories for Pedestrian Motion Detection.pdf:pdf} } @Article{Vazirani1994, Author = {Vazirani, Vijay V}, Title = {{MAXIMUM MATCHING ALGORITHM}}, Journal = {Combinatorica}, Volume = {14}, Number = {i}, Pages = {71--109}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Vazirani - 1994 - MAXIMUM MATCHING ALGORITHM.pdf:pdf}, year = 1994 } @Article{boykov2004ecm, Author = {Boykov, Y. and Kolmogorov, V.}, Title = {{An experimental comparison of min-cut/max-flow algorithms for energy minimization in vision}}, Journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence}, Volume = {26}, Number = {9}, Pages = {1124--1137}, year = 2004 } @Article{Fillard2009a, Author = {Fillard, Pierre and Poupon, Cyril}, Title = {{A Novel Global Tractography Algorithm based on an Adaptive Spin Glass Model}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Fillard, Poupon - 2009 - A Novel Global Tractography Algorithm based on an Adaptive Spin Glass Model.pdf:pdf}, year = 2009 } @Article{0266-5611-19-5-303, Author = {Jansons, Kalvis M and Alexander, Daniel C}, Title = {Persistent angular structure: new insights from diffusion magnetic resonance imaging data}, Journal = {Inverse Problems}, Volume = {19}, Number = {5}, Pages = {1031-1046}, abstract = {We determine a statistic called the (radially) persistent angular structure (PAS) from samples of the Fourier transform of a three-dimensional function. The method has applications in diffusion magnetic resonance imaging (MRI), which samples the Fourier transform of the probability density function of particle displacements. The PAS is then a representation of the relative mobility of particles in each direction. In PAS-MRI, we compute the PAS in each voxel of an image. This technique has biomedical applications, where it reveals the orientations of microstructural fibres, such as white-matter fibres in the brain. Scanner time is a significant factor in determining the amount of data available in clinical brain scans. Here, we use measurements acquired for diffusion-tensor MRI, which is a routine diffusion imaging technique, but extract richer information. In particular, PAS-MRI can resolve the orientations of crossing fibres.We test PAS-MRI on human brain data and on synthetic data. The human brain data set comes from a standard acquisition scheme for diffusion-tensor MRI in which the samples in each voxel lie on a sphere in Fourier space.}, url = {http://stacks.iop.org/0266-5611/19/1031}, year = 2003 } @Article{ODonnell_AJNR06, Author = {O'Donnell, L. J. and Kubicki, M. and Shenton, M. E. and Dreusicke, M. H. and Grimson, W. E. and Westin, C. F.}, Title = {A method for clustering white matter fiber tracts.}, Journal = {AJNR Am J Neuroradiol}, Volume = {27}, Number = {5}, Pages = {1032-6}, abstract = {BACKGROUND/PURPOSE: Despite its potential for visualizing white matter fiber tracts in vivo, diffusion tensor tractography has found only limited applications in clinical research in which specific anatomic connections between distant regions need to be evaluated. We introduce a robust method for fiber clustering that guides the separation of anatomically distinct fiber tracts and enables further estimation of anatomic connectivity between distant brain regions. METHODS: Line scanning diffusion tensor images (LSDTI) were acquired on a 1.5T magnet. Regions of interest for several anatomically distinct fiber tracts were manually drawn; then, white matter tractography was performed by using the Runge-Kutta method to interpolate paths (fiber traces) following the major directions of diffusion, in which traces were seeded only within the defined regions of interest. Next, a fully automatic procedure was applied to fiber traces, grouping them according to a pairwise similarity function that takes into account the shapes of the fibers and their spatial locations. RESULTS: We demonstrated the ability of the clustering algorithm to separate several fiber tracts which are otherwise difficult to define (left and right fornix, uncinate fasciculus and inferior occipitofrontal fasciculus, and corpus callosum fibers). CONCLUSION: This method successfully delineates fiber tracts that can be further analyzed for clinical research purposes. Hypotheses regarding specific fiber connections and their abnormalities in various neuropsychiatric disorders can now be tested.}, authoraddress = {MIT Computer Science and AI Lab, Cambridge, MA 02139, USA.}, keywords = {Adolescent ; Adult ; Brain/*anatomy \& histology ; *Diffusion Magnetic Resonance Imaging/methods ; Humans ; Middle Aged}, language = {eng}, medline-aid = {27/5/1032 [pii]}, medline-crdt = {2006/05/12 09:00}, medline-da = {20060511}, medline-dcom = {20061030}, medline-edat = {2006/05/12 09:00}, medline-fau = {O'Donnell, L J ; Kubicki, M ; Shenton, M E ; Dreusicke, M H ; Grimson, W E L ; Westin, C F}, medline-gr = {1-R01-NS051826-01/NS/NINDS NIH HHS/United States ; K02 MH 01110/MH/NIMH NIH HHS/United States ; P41 RR13218/RR/NCRR NIH HHS/United States ; R03 MH 068464-02/MH/NIMH NIH HHS/United States ; U54 EB005149/EB/NIBIB NIH HHS/United States}, medline-is = {0195-6108 (Print)}, medline-jid = {8003708}, medline-jt = {AJNR. American journal of neuroradiology}, medline-lr = {20080214}, medline-mhda = {2006/10/31 09:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {16687538}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't ; Research Support, U.S. Gov't, Non-P.H.S.}, medline-sb = {IM}, medline-so = {AJNR Am J Neuroradiol. 2006 May;27(5):1032-6.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16687538}, year = 2006 } @Article{Perrin2008, Author = {Perrin, Muriel and Cointepas, Yann and Cachia, Arnaud and Poupon, Cyril and Thirion, Bertrand and Rivi\`{e}re, Denis and Cathier, Pascal and {El Kouby}, Vincent and Constantinesco, Andr\'{e} and {Le Bihan}, Denis and Mangin, Jean-Fran\c{c}ois}, Title = {{Connectivity-Based Parcellation of the Cortical Mantle Using q-Ball Diffusion Imaging.}}, Journal = {International journal of biomedical imaging}, Volume = {2008}, Pages = {368406}, abstract = {This paper exploits the idea that each individual brain region has a specific connection profile to create parcellations of the cortical mantle using MR diffusion imaging. The parcellation is performed in two steps. First, the cortical mantle is split at a macroscopic level into 36 large gyri using a sulcus recognition system. Then, for each voxel of the cortex, a connection profile is computed using a probabilistic tractography framework. The tractography is performed from q fields using regularized particle trajectories. Fiber ODF are inferred from the q-balls using a sharpening process focusing the weight around the q-ball local maxima. A sophisticated mask of propagation computed from a T1-weighted image perfectly aligned with the diffusion data prevents the particles from crossing the cortical folds. During propagation, the particles father child particles in order to improve the sampling of the long fascicles. For each voxel, intersection of the particle trajectories with the gyri lead to a connectivity profile made up of only 36 connection strengths. These profiles are clustered on a gyrus by gyrus basis using a K-means approach including spatial regularization. The reproducibility of the results is studied for three subjects using spatial normalization.}, doi = {10.1155/2008/368406}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Perrin et al. - 2008 - Connectivity-Based Parcellation of the Cortical Mantle Using q-Ball Diffusion Imaging..pdf:pdf}, issn = {1687-4188}, pmid = {18401457}, url = {http://www.ncbi.nlm.nih.gov/pubmed/18401457}, year = 2008 } @PhdThesis{maddah2008quantitative, Author = {Maddah, M.}, Title = {{Quantitative Analysis of Cerebral White Matter Anatomy from Diffusion MRI}}, School = {Citeseer}, year = 2008 } @Article{Schmahmann2007, Author = {Schmahmann, Jeremy D and Pandya, Deepak N and Wang, Ruopeng and Dai, Guangping and Arceuil, Helen E D and Crespigny, Alex J De and Wedeen, Van J}, Title = {{Association fibre pathways of the brain : parallel observations from diffusion spectrum imaging and autoradiography}}, Journal = {Brain}, Pages = {630--653}, doi = {10.1093/brain/awl359}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Schmahmann et al. - 2007 - Association fibre pathways of the brain parallel observations from diffusion spectrum imaging and autoradiography.pdf:pdf}, keywords = {abbreviations,af ¼ arcuate fasciculus,ass ¼ superior limb,callosum,cb ¼ cingulum bundle,cc ¼ corpus,cs ¼ central sulcus,diffusion tensor imaging,disconnection,dsi ¼ diffusion spectrum,dti ¼ diffusion tensor,dwi ¼ diffusion weighted,emc ¼ extreme capsule,epi ¼ echoplanar imaging,fibre bundles,fof ¼ fronto-occipital fasciculus,ilf ¼ inferior longitudinal,image,imaging,isotope,of the arcuate sulcus,tract tracing,tractography}, year = 2007 } @Article{PPC+05, Author = {Perrin, M. and Poupon, C. and Cointepas, Y. and Rieul, B. and Golestani, N. and Pallier, C. and Riviere, D. and Constantinesco, A. and Le Bihan, D. and Mangin, J. F.}, Title = {Fiber tracking in q-ball fields using regularized particle trajectories.}, Journal = {Inf Process Med Imaging}, Volume = {19}, Pages = {52-63}, abstract = {Most of the approaches dedicated to fiber tracking from diffusion-weighted MR data rely on a tensor model. However, the tensor model can only resolve a single fiber orientation within each imaging voxel. New emerging approaches have been proposed to obtain a better representation of the diffusion process occurring in fiber crossing. In this paper, we adapt a tracking algorithm to the q-ball representation, which results from a spherical Radon transform of high angular resolution data. This algorithm is based on a Monte-Carlo strategy, using regularized particle trajectories to sample the white matter geometry. The method is validated using a phantom of bundle crossing made up of haemodialysis fibers. The method is also applied to the detection of the auditory tract in three human subjects.}, authoraddress = {Service Hospitalier Frederic Joliot, CEA, 91401 Orsay, France. perrin@shfj.cea.fr}, keywords = {Algorithms ; *Artificial Intelligence ; Brain/*cytology ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/*methods ; Nerve Fibers, Myelinated/*ultrastructure ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2007/03/16 09:00}, medline-da = {20070314}, medline-dcom = {20070406}, medline-edat = {2007/03/16 09:00}, medline-fau = {Perrin, M ; Poupon, C ; Cointepas, Y ; Rieul, B ; Golestani, N ; Pallier, C ; Riviere, D ; Constantinesco, A ; Le Bihan, D ; Mangin, J F}, medline-is = {1011-2499 (Print)}, medline-jid = {9216871}, medline-jt = {Information processing in medical imaging : proceedings of the ... conference}, medline-mhda = {2007/04/07 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {17354684}, medline-pst = {ppublish}, medline-pt = {Journal Article}, medline-sb = {IM}, medline-so = {Inf Process Med Imaging. 2005;19:52-63.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=17354684}, year = 2005 } @Article{Neji2008a, Author = {Neji, Radhou\`{e}ne and Gilles, Jean-fran\c{c}ois Deux and Mezri, Fleury and Georg, Maatouk}, Title = {{A Kernel-based Approach to Diffusion Tensor and Fiber Clustering in the Human Skeletal Muscle}}, Journal = {October}, Number = {October}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Neji et al. - 2008 - A Kernel-based Approach to Diffusion Tensor and Fiber Clustering in the Human Skeletal Muscle.pdf:pdf}, year = 2008 } @Article{Tournier2007, Author = {Tournier, J-Donald and Calamante, Fernando and Connelly, Alan}, Title = {{Robust determination of the fibre orientation distribution in diffusion MRI: non-negativity constrained super-resolved spherical deconvolution.}}, Journal = {NeuroImage}, Volume = {35}, Number = {4}, Pages = {1459--72}, abstract = {Diffusion-weighted (DW) MR images contain information about the orientation of brain white matter fibres that potentially can be used to study human brain connectivity in vivo using tractography techniques. Currently, the diffusion tensor model is widely used to extract fibre directions from DW-MRI data, but fails in regions containing multiple fibre orientations. The spherical deconvolution technique has recently been proposed to address this limitation. It provides an estimate of the fibre orientation distribution (FOD) by assuming the DW signal measured from any fibre bundle is adequately described by a single response function. However, the deconvolution is ill-conditioned and susceptible to noise contamination. This tends to introduce artefactual negative regions in the FOD, which are clearly physically impossible. In this study, the introduction of a constraint on such negative regions is proposed to improve the conditioning of the spherical deconvolution. This approach is shown to provide FOD estimates that are robust to noise whilst preserving angular resolution. The approach also permits the use of super-resolution, whereby more FOD parameters are estimated than were actually measured, improving the angular resolution of the results. The method provides much better defined fibre orientation estimates, and allows orientations to be resolved that are separated by smaller angles than previously possible. This should allow tractography algorithms to be designed that are able to track reliably through crossing fibre regions.}, doi = {10.1016/j.neuroimage.2007.02.016}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tournier, Calamante, Connelly - 2007 - Robust determination of the fibre orientation distribution in diffusion MRI non-negativity constrained super-resolved spherical deconvolution..pdf:pdf}, issn = {1053-8119}, keywords = {Algorithms,Brain,Brain: cytology,Computer Simulation,Data Interpretation, Statistical,Diffusion Magnetic Resonance Imaging,Humans,Image Processing, Computer-Assisted,Models, Statistical,Nerve Fibers,Nerve Fibers: physiology,Reproducibility of Results}, pmid = {17379540}, url = {http://www.ncbi.nlm.nih.gov/pubmed/17379540}, year = 2007 } @Article{Descoteaux2009, Author = {Descoteaux, Maxime and Deriche, Rachid and Kn\"{o}sche, Thomas R and Anwander, Alfred}, Title = {{Deterministic and probabilistic tractography based on complex fibre orientation distributions.}}, Journal = {IEEE transactions on medical imaging}, Volume = {28}, Number = {2}, Pages = {269--86}, abstract = {We propose an integral concept for tractography to describe crossing and splitting fibre bundles based on the fibre orientation distribution function (ODF) estimated from high angular resolution diffusion imaging (HARDI). We show that in order to perform accurate probabilistic tractography, one needs to use a fibre ODF estimation and not the diffusion ODF. We use a new fibre ODF estimation obtained from a sharpening deconvolution transform (SDT) of the diffusion ODF reconstructed from q-ball imaging (QBI). This SDT provides new insight into the relationship between the HARDI signal, the diffusion ODF, and the fibre ODF. We demonstrate that the SDT agrees with classical spherical deconvolution and improves the angular resolution of QBI. Another important contribution of this paper is the development of new deterministic and new probabilistic tractography algorithms using the full multidirectional information obtained through use of the fibre ODF. An extensive comparison study is performed on human brain datasets comparing our new deterministic and probabilistic tracking algorithms in complex fibre crossing regions. Finally, as an application of our new probabilistic tracking, we quantify the reconstruction of transcallosal fibres intersecting with the corona radiata and the superior longitudinal fasciculus in a group of eight subjects. Most current diffusion tensor imaging (DTI)-based methods neglect these fibres, which might lead to incorrect interpretations of brain functions.}, doi = {10.1109/TMI.2008.2004424}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Descoteaux et al. - 2009 - Deterministic and probabilistic tractography based on complex fibre orientation distributions..pdf:pdf}, issn = {1558-0062}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Echo-Planar Imaging,Echo-Planar Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Models, Neurological,Models, Statistical,Nerve Fibers,Nerve Fibers: ultrastructure,Normal Distribution,Reproducibility of Results,Sensitivity and Specificity}, month = feb, pmid = {19188114}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19188114}, year = 2009 } @Article{zhang1997birch, Author = {Zhang, T. and Ramakrishnan, R. and Livny, M.}, Title = {{BIRCH: A new data clustering algorithm and its applications}}, Journal = {Data Mining and Knowledge Discovery}, Volume = {1}, Number = {2}, Pages = {141--182}, publisher = {Springer}, year = 1997 } @Article{Leemans2005MagResMed, Author = {Leemans, A. and Sijbers, J. and Verhoye, M. and {Van der Linden}, A. and {Van Dyck}, D. }, Title = {Mathematical framework for simulating diffusion tensor \{{M}{R}\} neural fiber bundles}, Journal = {Magnetic Resonance in Medicine}, Volume = {53}, Number = {4}, Pages = {944-953}, doi = {10.1002/mrm.20418}, file = {attachment\:Leemans2005MagResMed.pdf:attachment\:Leemans2005MagResMed.pdf:PDF}, publisher = {Wiley-Liss, Inc.}, url = {http://dx.doi.org/10.1002/mrm.20418}, year = 2005 } @Article{Jones2002, Author = {Jones, Derek K. and Basser, Peter J.}, Title = {{Diffusion-tensor MRI: theory, experimental design and data analysis - a technical review}}, Journal = {NMR in Biomedicine}, Volume = {15}, Number = {7-8}, Pages = {456--467}, abstract = {This article treats the theoretical underpinnings of diffusion-tensor magnetic resonance imaging (DT-MRI), as well as experimental design and data analysis issues. We review the mathematical model underlying DT-MRI, discuss the quantitative parameters that are derived from the measured effective diffusion tensor, and describe artifacts thet arise in typical DT-MRI acquisitions. We also discuss difficulties in identifying appropriate models to describe water diffusion in heterogeneous tissues, as well as in interpreting experimental data obtained in such issues. Finally, we describe new statistical methods that have been developed to analyse DT-MRI data, and their potential uses in clinical and multi-site studies. Copyright � 2002 John Wiley \& Sons, Ltd.}, doi = {10.1002/nbm.783}, shorttitle = {Diffusion-tensor MRI}, url = {http://dx.doi.org/10.1002/nbm.783}, year = 2002 } @Article{Mining1997, Author = {Mining, Data and Discovery, Knowledge}, Title = {{BIRCH : A New Data Clustering Algorithm and Its Applications}}, Journal = {Knowledge Creation Diffusion Utilization}, Volume = {182}, Pages = {141--182}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mining, Discovery - 1997 - BIRCH A New Data Clustering Algorithm and Its Applications.pdf:pdf}, keywords = {data classification and compression,data clustering,incremental algorithm,very large databases}, year = 1997 } @Article{Chan, Author = {Chan, Cy and Drensky, Vesselin and Edelman, Alan and Kan, Raymond and Koev, Plamen}, Title = {{On Computing Schur Functions and Series Thereof}}, Journal = {Journal of Algebraic Combinatorics}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Chan et al. - Unknown - On Computing Schur Functions and Series Thereof.pdf:pdf}, keywords = {computing,hypergeometric function of a,matrix argument,schur function} } @Article{MKW+08, Author = {Maddah, M. and Kubicki, M. and Wells, W. M. and Westin, C. F. and Shenton, M. E. and Grimson, W. E.}, Title = {Findings in schizophrenia by tract-oriented {DT}-{MRI} analysis.}, Journal = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv}, Volume = {11}, Number = {Pt 1}, Pages = {917-24}, abstract = {This paper presents a tract-oriented analysis of diffusion tensor (DT) images of the human brain. We demonstrate that unlike the commonly used ROI-based methods for population studies, our technique is sensitive to the local variation of diffusivity parameters along the fiber tracts. We show the strength of the proposed approach in identifying the differences in schizophrenic data compared to controls. Statistically significant drops in fractional anisotropy are observed along the genu and bilaterally in the splenium, as well as an increase in principal eigenvalue in uncinate fasciculus. This is the first tract-oriented clinical study in which an anatomical atlas is used to guide the algorithm.}, authoraddress = {Computer Science and Artificial Intelligence Laboratory, Massachusetts Institute of Technology, Cambridge, MA, USA. mmaddah@mit.edu}, keywords = {Algorithms ; *Artificial Intelligence ; Brain Diseases/*diagnosis ; Diffusion Magnetic Resonance Imaging/*methods ; Female ; Humans ; Image Enhancement/methods ; Image Interpretation, Computer-Assisted/*methods ; Male ; Nerve Fibers, Myelinated/*pathology ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Schizophrenia/*diagnosis ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2008/11/05 09:00}, medline-da = {20081104}, medline-dcom = {20081209}, medline-edat = {2008/11/05 09:00}, medline-fau = {Maddah, Mahnaz ; Kubicki, Marek ; Wells, William M ; Westin, Carl-Fredrik ; Shenton, Martha E ; Grimson, W Eric L}, medline-jid = {101249582}, medline-jt = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, medline-mhda = {2008/12/17 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {18979833}, medline-pst = {ppublish}, medline-pt = {Evaluation Studies ; Journal Article}, medline-sb = {IM}, medline-so = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv. 2008;11(Pt 1):917-24.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18979833}, year = 2008 } @Article{MaddahMIA2008, Author = {Maddah, M. and Grimson, W. E. and Warfield, S. K. and Wells, W. M.}, Title = {A unified framework for clustering and quantitative analysis of white matter fiber tracts.}, Journal = {Med Image Anal}, Volume = {12}, Number = {2}, Pages = {191-202}, abstract = {We present a novel approach for joint clustering and point-by-point mapping of white matter fiber pathways. Knowledge of the point correspondence along the fiber pathways is not only necessary for accurate clustering of the trajectories into fiber bundles, but also crucial for any tract-oriented quantitative analysis. We employ an expectation-maximization (EM) algorithm to cluster the trajectories in a gamma mixture model context. The result of clustering is the probabilistic assignment of the fiber trajectories to each cluster, an estimate of the cluster parameters, i.e. spatial mean and variance, and point correspondences. The fiber bundles are modeled by the mean trajectory and its spatial variation. Point-by-point correspondence of the trajectories within a bundle is obtained by constructing a distance map and a label map from each cluster center at every iteration of the EM algorithm. This offers a time-efficient alternative to pairwise curve matching of all trajectories with respect to each cluster center. The proposed method has the potential to benefit from an anatomical atlas of fiber tracts by incorporating it as prior information in the EM algorithm. The algorithm is also capable of handling outliers in a principled way. The presented results confirm the efficiency and effectiveness of the proposed framework for quantitative analysis of diffusion tensor MRI.}, authoraddress = {Computer Science and Artificial Intelligence Laboratory, Massachusetts Institute of Technology, 32 Vassar Street, Cambridge, USA. mmaddah@mit.edu}, keywords = {Algorithms ; *Artificial Intelligence ; Brain/*anatomy \& histology ; *Cluster Analysis ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/methods ; Likelihood Functions ; Models, Biological ; Models, Statistical ; Nerve Fibers, Myelinated/*ultrastructure ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-aid = {S1361-8415(07)00099-0 [pii] ; 10.1016/j.media.2007.10.003 [doi]}, medline-crdt = {2008/01/09 09:00}, medline-da = {20080416}, medline-dcom = {20080520}, medline-dep = {20071025}, medline-edat = {2008/01/09 09:00}, medline-fau = {Maddah, Mahnaz ; Grimson, W Eric L ; Warfield, Simon K ; Wells, William M}, medline-gr = {P30 HD018655/HD/NICHD NIH HHS/United States ; P30 HD018655-26/HD/NICHD NIH HHS/United States ; P41 RR013218/RR/NCRR NIH HHS/United States ; P41 RR013218-010001/RR/NCRR NIH HHS/United States ; P41 RR013218-010002/RR/NCRR NIH HHS/United States ; P41 RR013218-010010/RR/NCRR NIH HHS/United States ; R01 RR021885/RR/NCRR NIH HHS/United States ; R01 RR021885-01A1/RR/NCRR NIH HHS/United States ; R01 RR021885-02/RR/NCRR NIH HHS/United States ; R03 CA126466/CA/NCI NIH HHS/United States ; R03 CA126466-01A1/CA/NCI NIH HHS/United States ; R03 CA126466-02/CA/NCI NIH HHS/United States ; R21 MH067054/MH/NIMH NIH HHS/United States ; R21 MH067054-01A1/MH/NIMH NIH HHS/United States ; R21 MH067054-02/MH/NIMH NIH HHS/United States ; U41 RR019703/RR/NCRR NIH HHS/United States ; U54 EB005149/EB/NIBIB NIH HHS/United States}, medline-is = {1361-8423 (Electronic)}, medline-jid = {9713490}, medline-jt = {Medical image analysis}, medline-lr = {20090406}, medline-mhda = {2008/05/21 09:00}, medline-mid = {NIHMS49862}, medline-oid = {NLM: NIHMS49862 ; NLM: PMC2615202}, medline-own = {NLM}, medline-phst = {2006/11/18 [received] ; 2007/10/02 [revised] ; 2007/10/02 [accepted] ; 2007/10/25 [aheadofprint]}, medline-pl = {Netherlands}, medline-pmc = {PMC2615202}, medline-pmid = {18180197}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {Med Image Anal. 2008 Apr;12(2):191-202. Epub 2007 Oct 25.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18180197}, year = 2008 } @Article{Tuch2005, Author = {Tuch, David S and Wisco, Jonathan J and Khachaturian, Mark H and Vanduffel, Wim and Ekstrom, Leeland B and Ko, Rolf}, Title = {{Q-ball imaging of macaque white matter architecture}}, Number = {May}, Pages = {869--879}, doi = {10.1098/rstb.2005.1651}, keywords = {connectivity,diffusion magnetic resonance imaging,high angular resolution diffusion,imaging,macaque,tractography,white matter}, year = 2005 } @Article{George2009, Author = {George, Kyriazis and Erwan, Le Pennec and Pencho, Petrushev and Dominique, Picard}, Title = {{Inversion of noisy Radon transform by SVD based needlets arXiv : 0809 . 3332v2 [ math . ST ] 17 Aug 2009}}, Pages = {1--35}, arxivid = {arXiv:0809.3332v2}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/George et al. - 2009 - Inversion of noisy Radon transform by SVD based needlets arXiv 0809 . 3332v2 math . ST 17 Aug 2009.pdf:pdf}, year = 2009 } @Article{Hagmann2007PLoSONE, Author = {Hagmann, Patric and Kurant, Maciej and Gigandet, Xavier and Thiran, Patrick and Wedeen, Van J. and Meuli, Reto and Thiran, Jean-Philippe }, Title = {Mapping human whole-brain structural networks with diffusion {MRI}.}, Journal = {PLoS ONE}, Volume = {2}, Number = {7}, Pages = {e597}, abstract = {Understanding the large-scale structural network formed by neurons is a major challenge in system neuroscience. A detailed connectivity map covering the entire brain would therefore be of great value. Based on diffusion MRI, we propose an efficient methodology to generate large, comprehensive and individual white matter connectional datasets of the living or dead, human or animal brain. This non-invasive tool enables us to study the basic and potentially complex network properties of the entire brain. For two human subjects we find that their individual brain networks have an exponential node degree distribution and that their global organization is in the form of a small world.}, doi = {10.1371/journal.pone.0000597}, file = {attachment\:Hagmann2007PLoSONE.pdf:attachment\:Hagmann2007PLoSONE.pdf:PDF}, year = 2007 } @Article{torrey1956bed, Author = {Torrey, H.C.}, Title = {{Bloch equations with diffusion terms}}, Journal = {Physical Review}, Volume = {104}, Number = {3}, Pages = {563--565}, publisher = {APS}, year = 1956 } @Article{Perrin2005PhilTransRoySoc, Author = {Perrin, Muriel and Poupon, Cyril and Rieul, Bernard and Leroux, Patrick and Constantinesco, André and Mangin, Jean-François and LeBihan, Denis}, Title = {Validation of q-ball imaging with a diffusion fibre-crossing phantom on a clinical scanner}, Journal = {Philosophical Transactions of the Royal Society B: Biological Sciences}, Volume = {360}, Number = {1457}, Pages = {881-91}, abstract = {Magnetic resonance (MR) diffusion imaging provides a valuable tool used for inferring structural anisotropy of brain white matter connectivity from diffusion tensor imaging. Recently, several high angular resolution diffusion models were introduced in order to overcome the inadequacy of the tensor model for describing fibre crossing within a single voxel. Among them, q-ball imaging (QBI), inherited from the q-space method, relies on a spherical Radon transform providing a direct relationship between the diffusion-weighted MR signal and the orientation distribution function (ODF). Experimental validation of these methods in a model system is necessary to determine the accuracy of the methods and to optimize them. A diffusion phantom made up of two textile rayon fibre (comparable in diameter to axons) bundles, crossing at $90^o$, was designed and dedicated to ex vivo q-ball validation on a clinical scanner. Normalized ODFs were calculated inside regions of interest corresponding to monomodal and bimodal configurations of underlying structures. Threedimensional renderings of ODFs revealed monomodal shapes for voxels containing single-fibre population and bimodal patterns for voxels located within the crossing area. Principal orientations were estimated from ODFs and were compared with a priori structural fibre directions, validating efficiency of QBI for depicting fibre crossing. In the homogeneous regions, QBI detected the fibre angle with an accuracy of $19^o$ and in the fibre-crossing region with an accuracy of $30^o$.}, doi = {10.1098/rstb.2005.1650}, file = {attachment\:Perrin2005PhilTransRoySoc.pdf:attachment\:Perrin2005PhilTransRoySoc.pdf:PDF}, url = {http://journals.royalsociety.org/content/mldn6494e2xf23ta}, year = 2005 } @Article{Frey2008, Author = {Frey, S and Campbell, JSW and Pike, GB}, Title = {\ldots human language pathways with high angular resolution diffusion fiber tractography}, Journal = {Journal of Neuroscience}, url = {http://neuro.cjb.net/cgi/content/abstract/28/45/11435}, year = 2008 } @Article{Stejskal1965JChemPhys, Author = {E. O. Stejskal and J. E. Tanner}, Title = {Spin Diffusion Measurements: Spin Echoes in the Presence of a Time-Dependent Field Gradient}, Journal = {The Journal of Chemical Physics}, Volume = {42}, Number = {1}, Pages = {288-292}, doi = {10.1063/1.1695690}, publisher = {AIP}, url = {http://link.aip.org/link/?JCP/42/288/1}, year = 1965 } @Article{Reisert, Author = {Reisert, Marco and Mader, Irina and Kiselev, Valerij}, Title = {{Global Reconstruction of Neuronal Fibres}}, Journal = {Lecture Notes in Computer Science}, Pages = {1--12}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Reisert, Mader, Kiselev - Unknown - Global Reconstruction of Neuronal Fibres.pdf:pdf} } @Article{Koles1998, Author = {Koles, Z J and Soong, a C}, Title = {{EEG source localization: implementing the spatio-temporal decomposition approach.}}, Journal = {Electroencephalography and clinical neurophysiology}, Volume = {107}, Number = {5}, Pages = {343--52}, abstract = {OBJECTIVES: The spatio-temporal decomposition (STD) approach was used to localize the sources of simulated electroencephalograms (EEGs) to gain experience with the approach for analyzing real data. METHODS: The STD approach used is similar to the multiple signal classification method (MUSIC) in that it requires the signal subspace containing the sources of interest to be isolated in the EEG measurement space. It is different from MUSIC in that it allows more general methods of spatio-temporal decomposition to be used that may be better suited to the background EEG. RESULTS: If the EEG data matrix is not corrupted by noise, the STD approach can be used to locate multiple dipole sources of the EEG one at a time without a priori knowledge of the number of active sources in the signal space. In addition, the common-spatial-patterns method of spatio-temporal decomposition is superior to the eigenvector decomposition for localizing activity that is ictal in nature. CONCLUSIONS: The STD approach appears to be able to provide a means of localizing the equivalent dipole sources of realistic brain sources and that, even under difficult noise conditions and only 2 or 3 s of available EEG, the precision of the localization can be as low as a few mm.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Koles, Soong - 1998 - EEG source localization implementing the spatio-temporal decomposition approach..pdf:pdf}, issn = {0013-4694}, keywords = {Artifacts,Brain,Brain Mapping,Brain Mapping: methods,Brain: physiology,Computer Simulation,Electrodes,Electroencephalography,Electroencephalography: instrumentation,Evaluation Studies as Topic,Humans,Models, Neurological,Time Factors}, month = nov, pmid = {9872437}, url = {http://www.ncbi.nlm.nih.gov/pubmed/9872437}, year = 1998 } @Article{roebroeck2008hrd, Author = {Roebroeck, A. and Galuske, R. and Formisano, E. and Chiry, O. and Bratzke, H. and Ronen, I. and Kim, D. and Goebel, R.}, Title = {{High-resolution diffusion tensor imaging and tractography of the human optic chiasm at 9.4 T}}, Journal = {Neuroimage}, Volume = {39}, Number = {1}, Pages = {157--168}, publisher = {Elsevier}, year = 2008 } @Article{To, Author = {To, Introduction}, Title = {{INTRODUCTION TO PROBABILITY}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/To - Unknown - INTRODUCTION TO PROBABILITY.pdf:pdf} } @Article{Catani2008, Author = {Catani, M and Mesulam, M}, Title = {{The arcuate fasciculus and the disconnection theme in language and aphasia: \ldots}}, Journal = {Cortex}, url = {http://linkinghub.elsevier.com/retrieve/pii/S0010945208001111}, year = 2008 } @Article{Walter2010, Author = {Walter, Thomas and Shattuck, David W and Baldock, Richard and Bastin, Mark E and Carpenter, Anne E and Duce, Suzanne and Ellenberg, Jan and Fraser, Adam and Hamilton, Nicholas and Pieper, Steve and Ragan, Mark A and Schneider, Jurgen E and Tomancak, Pavel and H\'{e}rich\'{e}, Jean-karim}, Title = {{Visualization of image data from cells to organisms}}, Journal = {Nature Publishing Group}, Volume = {7}, Number = {3s}, Pages = {S26--S41}, doi = {10.1038/nmeth.1431}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Walter et al. - 2010 - Visualization of image data from cells to organisms.pdf:pdf}, issn = {1548-7091}, publisher = {Nature Publishing Group}, url = {http://dx.doi.org/10.1038/nmeth.1431}, year = 2010 } @Article{Jbabdi2007, Author = {Jbabdi, S and Woolrich, M W and Andersson, J L and Behrens, T E}, Title = {{A Bayesian framework for global tractography}}, Journal = {NeuroImage}, Volume = {37}, Pages = {116--129}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Jbabdi et al. - 2007 - A Bayesian framework for global tractography.pdf:pdf}, year = 2007 } @Article{Lewis2005, Author = {Lewis, David a and Hashimoto, Takanori and Volk, David W}, Title = {{Cortical inhibitory neurons and schizophrenia.}}, Journal = {Nature reviews. Neuroscience}, Volume = {6}, Number = {4}, Pages = {312--24}, abstract = {Impairments in certain cognitive functions, such as working memory, are core features of schizophrenia. Convergent findings indicate that a deficiency in signalling through the TrkB neurotrophin receptor leads to reduced GABA (gamma-aminobutyric acid) synthesis in the parvalbumin-containing subpopulation of inhibitory GABA neurons in the dorsolateral prefrontal cortex of individuals with schizophrenia. Despite both pre- and postsynaptic compensatory responses, the resulting alteration in perisomatic inhibition of pyramidal neurons contributes to a diminished capacity for the gamma-frequency synchronized neuronal activity that is required for working memory function. These findings reveal specific targets for therapeutic interventions to improve cognitive function in individuals with schizophrenia.}, doi = {10.1038/nrn1648}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Lewis, Hashimoto, Volk - 2005 - Cortical inhibitory neurons and schizophrenia..pdf:pdf}, issn = {1471-003X}, keywords = {Animals,Cerebral Cortex,Cerebral Cortex: cytology,Cerebral Cortex: physiology,Cerebral Cortex: physiopathology,Humans,Nerve Net,Nerve Net: pathology,Nerve Net: physiopathology,Neural Inhibition,Neural Inhibition: physiology,Neurons,Neurons: cytology,Neurons: physiology,Schizophrenia,Schizophrenia: pathology,Schizophrenia: physiopathology}, month = apr, pmid = {15803162}, url = {http://www.ncbi.nlm.nih.gov/pubmed/15803162}, year = 2005 } @Article{Kenkre1997JMagRes, Author = {V. M. Kenkre and Eiichi Fukushima and D. Sheltraw}, Title = {Simple Solutions of the Torrey-Bloch Equations in the NMR Study of Molecular Diffusion}, Journal = {Journal of Magnetic Resonance}, Volume = {128}, Number = {1}, Pages = {62 - 69}, abstract = {A simple technique for solving the Torrey-Bloch equations appearing in the calculation of the NMR signal under gradient fields is presented. It is applicable to arbitrary time dependence of the gradient field to arbitrary initial distribution of spins, and to spin motion on discrete lattices as well as in the continuum under conditions of unrestricted diffusion. Known results are recovered as particular cases and new results are presented. The discrete lattice results are shown to be similar to known results for restricted diffusion in the continuum. Also presented is a surprising equivalence between results for a simple two-site hopping model and earlier expressions for the NMR signal for spins undergoing restricted diffusion in a continuum.}, doi = {DOI: 10.1006/jmre.1997.1216}, issn = {1090-7807}, url = {http://www.sciencedirect.com/science/article/B6WJX-45KN26H-6/2/817cb1d5d119831cc0ccf5284d324a37}, year = 1997 } @Article{Ashburner2000NeuroImage, Author = {Ashburner, John and Friston, Karl J.}, Title = {Voxel-Based Morphometry - The Methods}, Journal = {NeuroImage}, Volume = {11}, Pages = {805-821}, abstract = {At its simplest, voxel-based morphometry (VBM) involves a voxel-wise comparison of the local concentration of gray matter between two groups of subjects. The procedure is relatively straightforward and involves spatially normalizing high-resolution images from all the subjects in the study into the same stereotactic space. This is followed by segmenting the gray matter from the spatially normalized images and smoothing the gray-matter segments. Voxel-wise parametric statistical tests which compare the smoothed gray-matter images from the two groups are performed. Corrections for multiple comparisons are made using the theory of Gaussian random fields. This paper describes the steps involved in VBM, with particular emphasis on segmenting gray matter from MR images with nonuniformity artifact. We provide evaluations of the assumptions that underpin the method, including the accuracy of the segmentation and the assumptions made about the statistical distribution of the data.-}, doi = {10.1006/nimg.2000.0582}, file = {attachment\:Ashburner2000NeuroImage.pdf:attachment\:Ashburner2000NeuroImage.pdf:PDF}, publisher = {Elsevier}, year = 2000 } @Article{Ding2003a, Author = {Ding, Zhaohua and Gore, John C and Anderson, Adam W}, Title = {{Classification and quantification of neuronal fiber pathways using diffusion tensor MRI.}}, Journal = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, Volume = {49}, Number = {4}, Pages = {716--21}, abstract = {Quantitative characterization of neuronal fiber pathways in vivo is of significant neurological and clinical interest. Using the capability of MR diffusion tensor imaging to determine the local orientations of neuronal fibers, novel algorithms were developed to bundle neuronal fiber pathways reconstructed in vivo with diffusion tensor images and to quantify various physical and geometric properties of fiber bundles. The reliability of the algorithms was examined with reproducibility tests. Illustrative results show that consistent physical and geometric measurements of novel properties of neuronal tissue can be obtained, which offer considerable potential for the quantitative study of fiber pathways in vivo.}, doi = {10.1002/mrm.10415}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ding, Gore, Anderson - 2003 - Classification and quantification of neuronal fiber pathways using diffusion tensor MRI..pdf:pdf}, issn = {0740-3194}, keywords = {Algorithms,Brain Mapping,Brain Mapping: methods,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Magnetic Resonance Imaging,Magnetic Resonance Imaging: methods,Nerve Fibers,Nerve Fibers: classification,Neural Pathways,Neural Pathways: anatomy \& histology,Reproducibility of Results}, pmid = {12652543}, url = {http://www.ncbi.nlm.nih.gov/pubmed/12652543}, year = 2003 } @Article{powell2005mtp, Author = {Powell, HWR and Parker, GJM and Alexander, DC and Symms, MR and Boulby, PA and Wheeler-Kingshott, CAM and Barker, GJ and Koepp, MJ and Duncan, JS}, Title = {{MR tractography predicts visual field defects following temporal lobe resection}}, Journal = {Neurology}, Volume = {65}, Number = {4}, Pages = {596--599}, publisher = {AAN Enterprises}, year = 2005 } @Article{lawes2008abs, Author = {Lawes, I. N. C. and Barrick, T.R. and Murugam, V. and Spierings, N. and Evans, D.R. and Song, M. and Clark, C. A.}, Title = {{Atlas-based segmentation of white matter tracts of the human brain using diffusion tensor tractography and comparison with classical dissection.}}, Journal = {Neuroimage}, Volume = {39}, Pages = {62--79}, file = {attachment\:lawes_dti_atlas-based_segmentation_2008.pdf:attachment\:lawes_dti_atlas-based_segmentation_2008.pdf:PDF}, year = 2008 } @Article{Tanaka1999, Author = {Tanaka, Hidefumi}, Title = {{Circular asymmetry of the paleomagnetic directions observed at low latitude volcanic sites}}, Journal = {Simulation}, Number = {4}, Pages = {1279--1286}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tanaka - 1999 - Circular asymmetry of the paleomagnetic directions observed at low latitude volcanic sites.pdf:pdf}, year = 1999 } @Article{MaddahIPMI2007, Author = {Maddah, M. and Wells, 3rd, W. M. and Warfield, S. K. and Westin, C. F. and Grimson, W. E.}, Title = {Probabilistic clustering and quantitative analysis of white matter fiber tracts.}, Journal = {Inf Process Med Imaging}, Volume = {20}, Pages = {372-83}, abstract = {A novel framework for joint clustering and point-by-point mapping of white matter fiber pathways is presented. Accurate clustering of the trajectories into fiber bundles requires point correspondence determined along the fiber pathways. This knowledge is also crucial for any tract-oriented quantitative analysis. We employ an expectation-maximization (EM) algorithm to cluster the trajectories in a Gamma mixture model context. The result of clustering is the probabilistic assignment of the fiber trajectories to each cluster, an estimate of the cluster parameters, and point correspondences along the trajectories. Point-by-point correspondence of the trajectories within a bundle is obtained by constructing a distance map and a label map from each cluster center at every iteration of the EM algorithm. This offers a time-efficient alternative to pairwise curve matching of all trajectories with respect to each cluster center. Probabilistic assignment of the trajectories to clusters is controlled by imposing a minimum threshold on the membership probabilities, to remove outliers in a principled way. The presented results confirm the efficiency and effectiveness of the proposed framework for quantitative analysis of diffusion tensor MRI.}, authoraddress = {Computer Science and Artificial Intelligence Laboratory, Massachusetts Institute of Technology, Cambridge, MA 02139, USA. mmaddah@mit.edu}, keywords = {Algorithms ; Artificial Intelligence ; Brain/*cytology ; Cluster Analysis ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/*methods ; Models, Neurological ; Models, Statistical ; Nerve Fibers, Myelinated/*ultrastructure ; Neural Pathways/*cytology ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2007/07/19 09:00}, medline-da = {20070718}, medline-dcom = {20070831}, medline-edat = {2007/07/19 09:00}, medline-fau = {Maddah, Mahnaz ; Wells, William M 3rd ; Warfield, Simon K ; Westin, Carl-Fredrik ; Grimson, W Eric L}, medline-gr = {P30 HD018655/HD/NICHD NIH HHS/United States ; P41 RR013218/RR/NCRR NIH HHS/United States ; R01 RR021885/RR/NCRR NIH HHS/United States ; R03 CA126466/CA/NCI NIH HHS/United States ; R21 MH067054/MH/NIMH NIH HHS/United States ; U41 RR019703/RR/NCRR NIH HHS/United States ; U54 EB005149/EB/NIBIB NIH HHS/United States}, medline-is = {1011-2499 (Print)}, medline-jid = {9216871}, medline-jt = {Information processing in medical imaging : proceedings of the ... conference}, medline-lr = {20071203}, medline-mhda = {2007/09/01 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {17633714}, medline-pst = {ppublish}, medline-pt = {Evaluation Studies ; Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't ; Research Support, U.S. Gov't, Non-P.H.S.}, medline-sb = {IM}, medline-so = {Inf Process Med Imaging. 2007;20:372-83.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=17633714}, year = 2007 } @Article{descoteaux2009deterministic, Author = {Descoteaux, M. and Deriche, R. and Knoesche, T. and Anwander, A.}, Title = {{Deterministic and probabilistic tractography based on complex fibre orientation distributions}}, Journal = {IEEE Trans Med Imaging}, Volume = {28}, Number = {2}, Pages = {269--86}, year = 2009 } @Article{Smith2006NeuroImage, Author = {Smith, Stephen M. and Jenkinson, Mark and Johansen-Berg, Heidi and Rueckert, Daniel and Nichols, Thomas E. and Mackay, Clare E. and Watkins, Kate E. and Ciccarelli, Olga and Cader, Zaheer and Matthews, Paul M. and Behrens, Timothy E.J.}, Title = {Tract-based spatial statistics: Voxelwise analysis of multi-subject diffusion data}, Journal = {NeuroImage}, Volume = {31}, Pages = {1487-1505}, abstract = {There has been much recent interest in using magnetic resonance diffusion imaging to provide information about anatomical connectivity in the brain, by measuring the anisotropic diffusion of water in white matter tracts. One of the measures most commonly derived from diffusion data is fractional anisotropy (FA), which quantifies how strongly directional the local tract structure is. Many imaging studies are starting to use FA images in voxelwise statistical analyses, in order to localise brain changes related to development, degeneration and disease. However, optimal analysis is compromised by the use of standard registration algorithms; there has not to date been a satisfactory solution to the question of how to align FA images from multiple subjects in a way that allows for valid conclusions to be drawn from the subsequent voxelwise analysis. Furthermore, the arbitrariness of the choice of spatial smoothing extent has not yet been resolved. In this paper, we present a new method that aims to solve these issues via (a) carefully tuned non-linear registration, followed by (b) projection onto an alignment-invariant tract representation (the ‘‘mean FA skeleton’’). We refer to this new approach as Tract-Based Spatial Statistics (TBSS). TBSS aims to improve the sensitivity, objectivity and interpretability of analysis of multi-subject diffusion imaging studies. We describe TBSS in detail and present example TBSS results from several diffusion imaging studies.}, file = {attachment\:Smith2006NeuroImage.pdf:attachment\:Smith2006NeuroImage.pdf:PDF}, publisher = {Elsevier}, year = 2006 } @Article{SAM+05, Author = {Sherbondy, A. and Akers, D. and Mackenzie, R. and Dougherty, R. and Wandell, B.}, Title = {Exploring connectivity of the brain's white matter with dynamic queries.}, Journal = {IEEE Trans Vis Comput Graph}, Volume = {11}, Number = {4}, Pages = {419-30}, abstract = {Diffusion Tensor Imaging (DTI) is a magnetic resonance imaging method that can be used to measure local information about the structure of white matter within the human brain. Combining DTI data with the computational methods of MR tractography, neuroscientists can estimate the locations and sizes of nerve bundles (white matter pathways) that course through the human brain. Neuroscientists have used visualization techniques to better understand tractography data, but they often struggle with the abundance and complexity of the pathways. In this paper, we describe a novel set of interaction techniques that make it easier to explore and interpret such pathways. Specifically, our application allows neuroscientists to place and interactively manipulate box or ellipsoid-shaped regions to selectively display pathways that pass through specific anatomical areas. These regions can be used in coordination with a simple and flexible query language which allows for arbitrary combinations of these queries using Boolean logic operators. A representation of the cortical surface is provided for specifying queries of pathways that may be relevant to gray matter structures and for displaying activation information obtained from functional magnetic resonance imaging. By precomputing the pathways and their statistical properties, we obtain the speed necessary for interactive question-and-answer sessions with brain researchers. We survey some questions that researchers have been asking about tractography data and show how our system can be used to answer these questions efficiently.}, authoraddress = {Department of Electrical Engineering, James H. Clark Center, 318 Campus Dr., Room S324, Stanford University, Stanford, CA 94305, USA. Sherbond@stanford.edu}, keywords = {Algorithms ; Animals ; Brain/*cytology ; *Computer Graphics ; Computer Simulation ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/*methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/methods ; Models, Neurological ; Nerve Fibers, Myelinated/*ultrastructure ; Nerve Net/cytology ; Neural Pathways/*cytology ; Numerical Analysis, Computer-Assisted ; Online Systems ; *User-Computer Interface}, language = {eng}, medline-aid = {10.1109/TVCG.2005.59 [doi]}, medline-crdt = {2005/09/06 09:00}, medline-da = {20050905}, medline-dcom = {20050923}, medline-edat = {2005/09/06 09:00}, medline-fau = {Sherbondy, Anthony ; Akers, David ; Mackenzie, Rachel ; Dougherty, Robert ; Wandell, Brian}, medline-is = {1077-2626 (Print)}, medline-jid = {9891704}, medline-jt = {IEEE transactions on visualization and computer graphics}, medline-mhda = {2005/09/24 09:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {16138552}, medline-pst = {ppublish}, medline-pt = {Evaluation Studies ; Journal Article}, medline-sb = {IM}, medline-so = {IEEE Trans Vis Comput Graph. 2005 Jul-Aug;11(4):419-30.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16138552}, year = 2005 } @Article{ODonnell_MICCAI09, Author = {O'Donnell, L. J. and Westin, C. F. and Golby, A. J.}, Title = {Tract-based morphometry for white matter group analysis.}, Journal = {Neuroimage}, Volume = {45}, Number = {3}, Pages = {832-44}, abstract = {We introduce an automatic method that we call tract-based morphometry, or TBM, for measurement and analysis of diffusion MRI data along white matter fiber tracts. Using subject-specific tractography bundle segmentations, we generate an arc length parameterization of the bundle with point correspondences across all fibers and all subjects, allowing tract-based measurement and analysis. In this paper we present a quantitative comparison of fiber coordinate systems from the literature and we introduce an improved optimal match method that reduces spatial distortion and improves intra- and inter-subject variability of FA measurements. We propose a method for generating arc length correspondences across hemispheres, enabling a TBM study of interhemispheric diffusion asymmetries in the arcuate fasciculus (AF) and cingulum bundle (CB). The results of this study demonstrate that TBM can detect differences that may not be found by measuring means of scalar invariants in entire tracts, such as the mean diffusivity (MD) differences found in AF. We report TBM results of higher fractional anisotropy (FA) in the left hemisphere in AF (caused primarily by lower lambda(3), the smallest eigenvalue of the diffusion tensor, in the left AF), and higher left hemisphere FA in CB (related to higher lambda(1), the largest eigenvalue of the diffusion tensor, in the left CB). By mapping the significance levels onto the tractography trajectories for each structure, we demonstrate the anatomical locations of the interhemispheric differences. The TBM approach brings analysis of DTI data into the clinically and neuroanatomically relevant framework of the tract anatomy.}, authoraddress = {Department of Neurosurgery, Brigham and Women's Hospital, Harvard Medical School, Boston MA, USA. odonnell@bwh.harvard.edu}, language = {eng}, medline-aid = {S1053-8119(08)01282-2 [pii] ; 10.1016/j.neuroimage.2008.12.023 [doi]}, medline-crdt = {2009/01/22 09:00}, medline-da = {20090309}, medline-dep = {20081225}, medline-edat = {2009/01/22 09:00}, medline-fau = {O'Donnell, Lauren J ; Westin, Carl-Fredrik ; Golby, Alexandra J}, medline-gr = {K08NS048063/NS/NINDS NIH HHS/United States ; P41RR13218/RR/NCRR NIH HHS/United States ; P41RR15241/RR/NCRR NIH HHS/United States ; R01AG20012/AG/NIA NIH HHS/United States ; R01MH074794/MH/NIMH NIH HHS/United States ; U41RR019703/RR/NCRR NIH HHS/United States ; U54EB005149/EB/NIBIB NIH HHS/United States}, medline-is = {1095-9572 (Electronic)}, medline-jid = {9215515}, medline-jt = {NeuroImage}, medline-mhda = {2009/01/22 09:00}, medline-own = {NLM}, medline-phst = {2008/08/18 [received] ; 2008/11/13 [revised] ; 2008/12/08 [accepted] ; 2008/12/25 [aheadofprint]}, medline-pl = {United States}, medline-pmid = {19154790}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural}, medline-sb = {IM}, medline-so = {Neuroimage. 2009 Apr 15;45(3):832-44. Epub 2008 Dec 25.}, medline-stat = {In-Process}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=19154790}, year = 2009 } @Article{Kuo, Author = {Kuo, L W and Chen, J H and Wedeen, V J and Tseng, W Y}, Title = {{Optimization of diffusion spectrum imaging and q-ball imaging on clinical MRI system}}, Journal = {Neuroimage}, Volume = {vol}, Pages = {41pp7--18}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kuo et al. - Unknown - Optimization of diffusion spectrum imaging and q-ball imaging on clinical MRI system.pdf:pdf} } @Article{candes2008ics, Author = {Cand{\`e}s, E.J. and Wakin, M.B.}, Title = {{An introduction to compressive sampling}}, Journal = {IEEE Signal Processing Magazine}, Volume = {25}, Number = {2}, Pages = {21--30}, publisher = {New York, NY: Institute of Electrical \& Electronic Engineers, c1991-}, year = 2008 } @Article{Poldrack2008, Author = {Poldrack, Russell a and Fletcher, Paul C and Henson, Richard N and Worsley, Keith J and Brett, Matthew and Nichols, Thomas E}, Title = {{Guidelines for reporting an fMRI study.}}, Journal = {NeuroImage}, Volume = {40}, Number = {2}, Pages = {409--14}, abstract = {In this editorial, we outline a set of guidelines for the reporting of methods and results in functional magnetic resonance imaging studies and provide a checklist to assist authors in preparing manuscripts that meet these guidelines.}, doi = {10.1016/j.neuroimage.2007.11.048}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Poldrack et al. - 2008 - Guidelines for reporting an fMRI study..pdf:pdf}, issn = {1053-8119}, keywords = {Guidelines as Topic,Magnetic Resonance Imaging,Publishing,Publishing: standards}, pmid = {18191585}, url = {http://www.ncbi.nlm.nih.gov/pubmed/18191585}, year = 2008 } @Article{Miki2007, Author = {Miki, Y and Urayama, S and Fushimi, Y and Okada, T and Hanakawa, T and Fukuyama, H}, Title = {{Diffusion Tensor Fiber Tractography of the Optic Radiation : Analysis with 6- , 12- , 40- , and 81-}}, Journal = {Ajnr. American Journal Of Neuroradiology}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Miki et al. - 2007 - Diffusion Tensor Fiber Tractography of the Optic Radiation Analysis with 6- , 12- , 40- , and 81-.pdf:pdf}, year = 2007 } @Article{Glasser2008, Author = {Glasser, MF and Rilling, JK}, Title = {{DTI tractography of the human brain's language pathways}}, Journal = {Cerebral Cortex}, url = {http://cercor.oxfordjournals.org/cgi/content/abstract/bhn011}, year = 2008 } @Article{Wedeen, Author = {Wedeen, V and Wang, R and Schmahmann, J and Benner, T and Tseng, W and Dai, G and Pandya, D and Hagmann, P and D\^a arceuil, H and A}, Title = {{de Crespigny, "Diffusion spectrum magnetic resonance imaging (dsi) tractography of crossing fibers,"}}, Journal = {NeuroImage}, Volume = {vol}, Pages = {41no4pp1267--1277}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Wedeen et al. - Unknown - de Crespigny, Diffusion spectrum magnetic resonance imaging (dsi) tractography of crossing fibers,.pdf:pdf} } @Article{Nannen2003c, Author = {Nannen, Volker and Groningen, Rijksuniversiteit}, Title = {{The Paradox of Overfitting}}, Journal = {Artificial Intelligence}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Nannen, Groningen - 2003 - The Paradox of Overfitting.pdf:pdf}, year = 2003 } @Article{Chen2009, Author = {Chen, Wei and Ding, Zi'ang and Zhang, Song and MacKay-Brandt, Anna and Correia, Stephen and Qu, Huamin and Crow, John Allen and Tate, David F and Yan, Zhicheng and Peng, Qunsheng}, Title = {{A novel interface for interactive exploration of DTI fibers.}}, Journal = {IEEE transactions on visualization and computer graphics}, Volume = {15}, Number = {6}, Pages = {1433--40}, abstract = {Visual exploration is essential to the visualization and analysis of densely sampled 3D DTI fibers in biological specimens, due to the high geometric, spatial, and anatomical complexity of fiber tracts. Previous methods for DTI fiber visualization use zooming, color-mapping, selection, and abstraction to deliver the characteristics of the fibers. However, these schemes mainly focus on the optimization of visualization in the 3D space where cluttering and occlusion make grasping even a few thousand fibers difficult. This paper introduces a novel interaction method that augments the 3D visualization with a 2D representation containing a low-dimensional embedding of the DTI fibers. This embedding preserves the relationship between the fibers and removes the visual clutter that is inherent in 3D renderings of the fibers. This new interface allows the user to manipulate the DTI fibers as both 3D curves and 2D embedded points and easily compare or validate his or her results in both domains. The implementation of the framework is GPU based to achieve real-time interaction. The framework was applied to several tasks, and the results show that our method reduces the user's workload in recognizing 3D DTI fibers and permits quick and accurate DTI fiber selection.}, doi = {10.1109/TVCG.2009.112}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Chen et al. - 2009 - A novel interface for interactive exploration of DTI fibers..pdf:pdf}, issn = {1077-2626}, keywords = {Algorithms,Animals,Brain,Brain: anatomy \& histology,Cluster Analysis,Computer Graphics,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Heart,Heart: anatomy \& histology,Hindlimb,Models, Biological,Myofibrils,Nerve Fibers,Swine,User-Computer Interface}, pmid = {19834218}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19834218}, year = 2009 } @Article{ZLW+03, Author = {Zhai, G. and Lin, W. and Wilber, K. P. and Gerig, G. and Gilmore, J. H.}, Title = {Comparisons of regional white matter diffusion in healthy neonates and adults performed with a 3.0-{T} head-only {MR} imaging unit.}, Journal = {Radiology}, Volume = {229}, Number = {3}, Pages = {673-81}, abstract = {PURPOSE: To evaluate the normal brains of adults and neonates for regional and age-related differences in apparent diffusion coefficient (ADC) and fractional anisotropy (FA). MATERIALS AND METHODS: Eight healthy adults and 20 healthy neonates were examined with a 3.0-T head-only magnetic resonance (MR) imaging unit by using a single-shot diffusion-tensor sequence. Trace ADC maps, FA maps, directional maps of the putative directions of white matter (WM) tracts, and fiber-tracking maps were obtained. Regions of interest-eight in WM and one in gray matter (GM)-were predefined for the ADC and FA measurements. The Student t test was used to compare FA and ADC between adults and neonates, whereas the Tukey multiple-comparison test was used to compare FA and ADC in different brain regions in the adult and neonate groups. RESULTS: A global elevation in ADC (P <.001) in both GM and WM and a reduction in FA (P <.001) in WM were observed in neonates as compared with these values in adults. In addition, significant regional variations in FA and ADC were observed in both groups. Regional variations in FA and ADC were less remarkable in adults, whereas neonates had consistently higher FA values and lower ADC values in the central WM as compared with these values in the peripheral WM. Fiber tracking revealed only major WM tracts in the neonates but fibers extending to the peripheral WM in the adults. CONCLUSION: There were regional differences in FA and ADC values in the neonates; such variations were less remarkable in the adults.}, authoraddress = {Department of Biomedical Engineering, University of North Carolina at Chapel Hill, CB \#7515, Chapel Hill, NC 27599, USA.}, keywords = {Adult ; Age Factors ; Brain/*anatomy \& histology ; Diffusion Magnetic Resonance Imaging/*instrumentation ; Humans ; Infant, Newborn ; ROC Curve}, language = {eng}, medline-aid = {10.1148/radiol.2293021462 [doi] ; 229/3/673 [pii]}, medline-crdt = {2003/12/06 05:00}, medline-da = {20031205}, medline-dcom = {20040112}, medline-edat = {2003/12/06 05:00}, medline-fau = {Zhai, Guihua ; Lin, Weili ; Wilber, Kathy P ; Gerig, Guido ; Gilmore, John H}, medline-gr = {HD03110/HD/NICHD NIH HHS/United States ; MH 33127/MH/NIMH NIH HHS/United States ; R01 NS 37312/NS/NINDS NIH HHS/United States}, medline-is = {0033-8419 (Print)}, medline-jid = {0401260}, medline-jt = {Radiology}, medline-lr = {20071114}, medline-mhda = {2004/01/13 05:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {14657305}, medline-pst = {ppublish}, medline-pt = {Comparative Study ; Journal Article ; Research Support, U.S. Gov't, P.H.S.}, medline-sb = {AIM ; IM}, medline-so = {Radiology. 2003 Dec;229(3):673-81.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=14657305}, year = 2003 } @Article{Voineskos_Neuroimage09, Author = {Voineskos, A. N. and O'Donnell, L. J. and Lobaugh, N. J. and Markant, D. and Ameis, S. H. and Niethammer, M. and Mulsant, B. H. and Pollock, B. G. and Kennedy, J. L. and Westin, C. F. and Shenton, M. E.}, Title = {Quantitative examination of a novel clustering method using magnetic resonance diffusion tensor tractography.}, Journal = {Neuroimage}, Volume = {45}, Number = {2}, Pages = {370-6}, abstract = {MR diffusion tensor imaging (DTI) can measure and visualize organization of white matter fibre tracts in vivo. DTI is a relatively new imaging technique, and new tools developed for quantifying fibre tracts require evaluation. The purpose of this study was to compare the reliability of a novel clustering approach with a multiple region of interest (MROI) approach in both healthy and disease (schizophrenia) populations. DTI images were acquired in 20 participants (n=10 patients with schizophrenia: 56+/-15 years; n=10 controls: 51+/-20 years) (1.5 T GE system) with diffusion gradients applied in 23 non-collinear directions, repeated three times. Whole brain seeding and creation of fibre tracts were then performed. Interrater reliability of the clustering approach, and the MROI approach, were each evaluated and the methods compared. There was high spatial (voxel-based) agreement within and between the clustering and MROI methods. Fractional anisotropy, trace, and radial and axial diffusivity values showed high intraclass correlation (p<0.001 for all tracts) for each approach. Differences in scalar indices of diffusion between the clustering and MROI approach were minimal. The excellent interrater reliability of the clustering method and high agreement with the MROI method, quantitatively and spatially, indicates that the clustering method can be used with confidence. The clustering method avoids biases of ROI drawing and placement, and, not limited by a priori predictions, may be a more robust and efficient way to identify and measure white matter tracts of interest.}, authoraddress = {Geriatric Mental Health Program, Centre for Addiction and Mental Health, Department of Psychiatry, University of Toronto, Canada.}, language = {eng}, medline-aid = {S1053-8119(08)01281-0 [pii] ; 10.1016/j.neuroimage.2008.12.028 [doi]}, medline-crdt = {2009/01/23 09:00}, medline-da = {20090223}, medline-dep = {20081229}, medline-edat = {2009/01/23 09:00}, medline-fau = {Voineskos, Aristotle N ; O'Donnell, Lauren J ; Lobaugh, Nancy J ; Markant, Doug ; Ameis, Stephanie H ; Niethammer, Marc ; Mulsant, Benoit H ; Pollock, Bruce G ; Kennedy, James L ; Westin, Carl Fredrik ; Shenton, Martha E}, medline-gr = {1P50 MH08272/MH/NIMH NIH HHS/United States ; P41 RR13218/RR/NCRR NIH HHS/United States ; R01 MH 50740/MH/NIMH NIH HHS/United States ; R01 MH074794/MH/NIMH NIH HHS/United States ; U41-RR019703/RR/NCRR NIH HHS/United States ; U54GM072977-01/GM/NIGMS NIH HHS/United States}, medline-is = {1095-9572 (Electronic)}, medline-jid = {9215515}, medline-jt = {NeuroImage}, medline-mhda = {2009/01/23 09:00}, medline-mid = {NIHMS85018}, medline-oid = {NLM: NIHMS85018 [Available on 04/01/10] ; NLM: PMC2646811 [Available on 04/01/10]}, medline-own = {NLM}, medline-phst = {2008/08/25 [received] ; 2008/11/05 [revised] ; 2008/12/08 [accepted] ; 2008/12/29 [aheadofprint]}, medline-pl = {United States}, medline-pmc = {PMC2646811}, medline-pmcr = {2010/04/01}, medline-pmid = {19159690}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't ; Research Support, U.S. Gov't, Non-P.H.S.}, medline-sb = {IM}, medline-so = {Neuroimage. 2009 Apr 1;45(2):370-6. Epub 2008 Dec 29.}, medline-stat = {In-Process}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=19159690}, year = 2009 } @Article{Hagmann2006Radiographics, Author = {Hagmann, Patric and Jonasson, Lisa and Maeder, Philippe and Thiran, Jean-Philippe and Wedeen, Van J. and Meuli, Reto}, Title = {Understanding diffusion \{{M}{R}\} imaging techniques: \{{F}\}rom scalar diffusion-weighted imaging to diffusion tensor imaging and beyond}, Journal = {Radiographics}, Volume = {26}, Number = {suppl_1}, Pages = {S205-223}, abstract = {The complex structural organization of the white matter of the brain can be depicted in vivo in great detail with advanced diffusion magnetic resonance (MR) imaging schemes. Diffusion MR imaging techniques are increasingly varied, from the simplest and most commonly used technique-the mapping of apparent diffusion coefficient values-to the more complex, such as diffusion tensor imaging, q-ball imaging, diffusion spectrum imaging, and tractography. The type of structural information obtained differs according to the technique used. To fully understand how diffusion MR imaging works, it is helpful to be familiar with the physical principles of water diffusion in the brain and the conceptual basis of each imaging technique. Knowledge of the technique-specific requirements with regard to hardware and acquisition time, as well as the advantages, limitations, and potential interpretation pitfalls of each technique, is especially useful.}, doi = {10.1148/rg.26si065510}, eprint = {http://radiographics.rsnajnls.org/cgi/reprint/26/suppl_1/S205.pdf}, file = {attachment\:Hagmann2006Radiographics.pdf:attachment\:Hagmann2006Radiographics.pdf:PDF}, url = {http://radiographics.rsnajnls.org/cgi/content/abstract/26/suppl_1/S205}, year = 2006 } @Misc{Mendeley2009, Author = {Mendeley}, Title = {{Getting Started with Mendeley}}, address = {London}, annote = {Double click on the entry on the left to view the PDF.}, booktitle = {Mendeley Desktop}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mendeley - 2009 - Getting Started with Mendeley.pdf:pdf}, keywords = {Mendeley}, publisher = {Mendeley Ltd.}, url = {http://www.mendeley.com}, year = 2009 } @Article{Schmid2010, Author = {Schmid, Benjamin and Schindelin, Johannes and Cardona, Albert and Longair, Mark and Heisenberg, Martin}, Title = {{A high-level 3D visualization API for Java and ImageJ.}}, Journal = {BMC bioinformatics}, Volume = {11}, Number = {1}, Pages = {274}, abstract = {ABSTRACT: BACKGROUND: Current imaging methods such as Magnetic Resonance Imaging (MRI), Confocal microscopy, Electron Microscopy (EM) or Selective Plane Illumination Microscopy (SPIM) yield three-dimensional (3D) data sets in need of appropriate computational methods for their analysis. The reconstruction, segmentation and registration are best approached from the 3D representation of the data set. RESULTS: Here we present a platform-independent framework based on Java and Java 3D for accelerated rendering of biological images. Our framework is seamlessly integrated into ImageJ, a free image processing package with a vast collection of community-developed biological image analysis tools. Our framework enriches the ImageJ software libraries with methods that greatly reduce the complexity of developing image analysis tools in an interactive 3D visualization environment. In particular, we provide high-level access to volume rendering, volume editing, surface extraction, and image annotation. The ability to rely on a library that removes the low-level details enables concentrating software development efforts on the algorithm implementation parts. CONCLUSIONS: Our framework enables biomedical image software development to be built with 3D visualization capabilities with very little effort. We offer the source code and convenient binary packages along with extensive documentation at http://3dviewer.neurofly.de.}, doi = {10.1186/1471-2105-11-274}, issn = {1471-2105}, month = may, pmid = {20492697}, url = {http://www.ncbi.nlm.nih.gov/pubmed/20492697}, year = 2010 } @Article{Durrleman2009, Author = {Durrleman, Stanley and Fillard, Pierre and Pennec, Xavier and Trouv\'{e}, Alain and Ayache, Nicholas}, Title = {{A statistical model of white matter fiber bundles based on currents.}}, Journal = {Information processing in medical imaging : proceedings of the ... conference}, Volume = {21}, Pages = {114--25}, abstract = {The purpose of this paper is to measure the variability of a population of white matter fiber bundles without imposing unrealistic geometrical priors. In this respect, modeling fiber bundles as currents seems particularly relevant, as it gives a metric between bundles which relies neither on point nor on fiber correspondences and which is robust to fiber interruption. First, this metric is included in a diffeomorphic registration scheme which consistently aligns sets of fiber bundles. In particular, we show that aligning directly fiber bundles may solve the aperture problem which appears when fiber mappings are constrained by tensors only. Second, the measure of variability of a population of fiber bundles is based on a statistical model which considers every bundle as a random diffeomorphic deformation of a common template plus a random non-diffeomorphic perturbation. Thus, the variability is decomposed into a geometrical part and a "texture" part. Our results on real data show that both parts may contain interesting anatomical features.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Durrleman et al. - 2009 - A statistical model of white matter fiber bundles based on currents..pdf:pdf}, issn = {1011-2499}, keywords = {Algorithms,Artificial Intelligence,Brain,Brain: anatomy \& histology,Cluster Analysis,Computer Simulation,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Models, Neurological,Models, Statistical,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity}, month = jan, pmid = {19694257}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19694257}, year = 2009 } @Article{Wedeen2008, Author = {Wedeen, VJ and Wang, RP and Schmahmann, JD and Benner, T}, Title = {{\ldots spectrum magnetic resonance imaging (DSI) tractography of crossing fibers}}, Journal = {Neuroimage}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Wedeen et al. - Unknown - de Crespigny, Diffusion spectrum magnetic resonance imaging (dsi) tractography of crossing fibers,.pdf:pdf}, url = {http://linkinghub.elsevier.com/retrieve/pii/S105381190800253X}, year = 2008 } @Article{Sotiras2009, Author = {Sotiras, Aristeidis and Neji, Radhou\`{e}ne and Nikos, Jean-fran\c{c}ois Deux and Mezri, Komodakis}, Title = {{Diffusion Tensor Registration Using Probability Kernels and Discrete Optimization}}, Journal = {Computer}, Number = {May}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Sotiras et al. - 2009 - Diffusion Tensor Registration Using Probability Kernels and Discrete Optimization.pdf:pdf}, year = 2009 } @Article{Basser1994, Author = {Basser, PJ and Mattiello, J and LeBihan, D}, Title = {{MR diffusion tensor spectroscopy and imaging}}, Journal = {Biophysical journal}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Basser, Mattiello, LeBihan - 1994 - MR diffusion tensor spectroscopy and imaging.pdf:pdf}, url = {http://linkinghub.elsevier.com/retrieve/pii/S0006349594807751}, year = 1994 } @Article{wakana2004ftba, Author = {Wakana, S. and Jiang, H. and Nagae-Poetscher, L. and van Zijl, P. and Mori, S.}, Title = {Fiber tract-based atlas of human white matter anatomy}, Journal = {Radiology}, Volume = {230}, Pages = {77-87}, file = {attachment\:wakana_fiber_tract-based_atlas_2004.pdf:attachment\:wakana_fiber_tract-based_atlas_2004.pdf:PDF}, publisher = {RSNA}, year = 2004 } @Article{Joy, Author = {Joy, Kenneth I}, Title = {{Numerical Methods for Particle Tracing in Vector Fields}}, Journal = {Science}, Pages = {1--7}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Joy - Unknown - Numerical Methods for Particle Tracing in Vector Fields.pdf:pdf} } @Article{Staempfli2006NeuroImage, Author = {Staempfli, P. and Jaermann, T. and Crelier, G.R. and Kollias, S. and Valavanis, A. and Boesiger, P.}, Title = {Resolving fiber crossing using advanced fast marching tractography based on diffusion tensor imaging}, Journal = {NeuroImage}, Volume = {30}, Number = {1}, Pages = {110-120}, abstract = {Magnetic resonance diffusion tensor tractography is a powerful tool for the non-invasive depiction of the white matter architecture in the human brain. However, due to limitations in the underlying tensor model, the technique is often unable to reconstruct correct trajectories in heterogeneous fiber arrangements, such as axonal crossings. A novel tractography method based on fast marching (FM) is proposed which is capable of resolving fiber crossings and also permits trajectories to branch. It detects heterogeneous fiber arrangements by incorporating information from the entire diffusion tensor. The FM speed function is adapted to the local tensor characteristics, allowing in particular to maintain the front evolution direction in crossing situations. In addition, the FM's discretization error is reduced by increasing the number of considered possible front evolution directions. The performance of the technique is demonstrated in artificial data and in the healthy human brain. Comparisons with standard FM tractography and conventional line propagation algorithms show that, in the presence of interfering structures, the proposed method is more accurate in reconstructing trajectories. The in vivo results illustrate that the elucidated major white matter pathways are consistent with known anatomy and that multiple crossings and tract branching are handled correctly.}, file = {attachment\:Staempfli2006NeuroImage.pdf:attachment\:Staempfli2006NeuroImage.pdf:PDF}, url = {http://www.sciencedirect.com/science/article/B6WNP-4HD8DK8-3/2/c67092fe40d5854eaa7e5e78808d9983}, year = 2006 } @Article{Aksoy2008MRM, Author = {Aksoy, Murat andi Liu, Chunle and Moseley, Michael E. and Bammer, Roland}, Title = {Single-Step Nonlinear Diffusion Tensor Estimation in the Presence of Microscopic and Macroscopic Motion}, Journal = {Magnetic Resonance in Medicine}, Volume = {59}, Pages = {1138–1150}, abstract = {Patient motion can cause serious artifacts in diffusion tensor imaging (DTI), diminishing the reliability of the estimated diffusion tensor information. Studies in this field have so far been limited mainly to the correction of miniscule physiological motion. In order to correct for gross patient motion it is not sufficient to correct for misregistration between successive shots; the change in the diffusion-encoding direction must also be accounted for. This becomes particularly important for multishot sequences, whereby—in the presence of motion—each shot is encoded with a different diffusion weighting. In this study a general mathematical framework to correct for gross patient motion present in a multishot and multicoil DTI scan is presented. A signal model is presented that includes the effect of rotational and translational motion in the patient frame of reference. This model was used to create a nonlinear leastsquares formulation, from which the diffusion tensors were obtained using a nonlinear conjugate gradient algorithm. Applications to both phantom simulations and in vivo studies showed that in the case of gross motion the proposed algorithm performs superiorly compared to conventional methods used for tensor estimation.}, owner = {ian}, timestamp = {2009.03.04}, year = 2008 } @Article{IturriaMedina2007NeuroImage, Author = {Iturria-Medina, Y. and Canales-Rodr{\'\i}guez, EJ and Melie-Garc{\'\i}a, L. and Vald{\'e}s-Hern{\'a}ndez, PA and Mart{\'\i}nez-Montes, E. and Alem{\'a}n-G{\'o}mez, Y. and S{\'a}nchez-Bornot, J M}, Title = {Characterizing brain anatomical connections using diffusion weighted \{{M}{RI}\} and graph theory}, Journal = {Neuroimage}, Volume = {36}, Number = {3}, Pages = {645-660}, abstract = {A new methodology based on Diffusion Weighted Magnetic Resonance Imaging (DW-MRI) and Graph Theory is presented for characterizing the anatomical connections between brain gray matter areas. In a first step, brain voxels are modeled as nodes of a non-directed graph in which the weight of an arc linking two neighbor nodes is assumed to be proportional to the probability of being connected by nervous fibers. This probability is estimated by means of probabilistic tissue segmentation and intravoxel white matter orientational distribution function, obtained from anatomical MRI and DW-MRI, respectively. A new tractography algorithm for finding white matter routes is also introduced. This algorithm solves the most probable path problem between any two nodes, leading to the assessment of probabilistic brain anatomical connection maps. In a second step, for assessing anatomical connectivity between K gray matter structures, the previous graph is redefined as a K+1 partite graph by partitioning the initial nodes set in K non-overlapped gray matter subsets and one subset clustering the remaining nodes. Three different measures are proposed for quantifying anatomical connections between any pair of gray matter subsets: Anatomical Connection Strength (ACS), Anatomical Connection Density (ACD) and Anatomical Connection Probability (ACP). This methodology was applied to both artificial and actual human data. Results show that nervous fiber pathways between some regions of interest were reconstructed correctly. Additionally, mean connectivity maps of ACS, ACD and ACP between 71 gray matter structures for five healthy subjects are presented.}, file = {attachment\:IturriaMedina2007NeuroImage.pdf:attachment\:IturriaMedina2007NeuroImage.pdf:PDF}, publisher = {Elsevier}, year = 2007 } @Misc{hyvarinen1998fim, Author = {Hyvarinen, A. and Oja, E.}, Title = {{The Fast-ICA MATLAB package}}, year = 1998 } @Article{Rosen2008, Author = {Rosen, Bruce}, Title = {2 -' ' >7}, Journal = {Engineering}, Number = {2001}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Rosen - 2008 - 2 -' ' 7.pdf:pdf}, year = 2008 } @PhdThesis{Tuch2002ThesisMIT, Author = {Tuch, D.S.}, Title = {Diffusion \{{M}{RI}\} of complex tissue structure}, School = {Massachusetts Institute of Technology, Division of Health Sciences and Technology}, abstract = {Magnetic resonance diffusion imaging provides an exquisitely sensitive probe of tissue microstructure. Owing to the microscopic length scale of diffusion in biological tissues, diffusion imaging can reveal histological architecture irresolvable by conventional magnetic resonance imaging methods. However, diffusion imaging methods to date have chiefly been based on analytical models of the underlying diffusion process. For example, diffusion tensor imaging assumes homogeneous Gaussian diffusion within each voxel, an assumption which is clearly invalid for the vast majority of the brain at presently achievable voxel resolutions. In this thesis I developed a diffusion imaging method capable of measuring the microscopic diffusion function within each voxel. In contrast to previous approaches to diffusion imaging, the method presented here does not require any assumptions on the underlying diffusion function. The model-independent approach can resolve complex intravoxel tissue structure including fiber crossing and fiber divergence within a single voxel. The method is capable of resolving not only deep white matter intersections, but also composite tissue structure at the cortical margin, and fiber-specific degeneration in neurodegenerative pathology. In sum, the approach can reveal complex intravoxel tissue structure previously thought to be beyond the scope of diffusion imaging methodology.}, publisher = {Massachusetts Institute of Technology}, year = 2002 } @Article{Durrleman2009a, Author = {Durrleman, Stanley and Fillard, Pierre and Pennec, Xavier and Trouv\'{e}, Alain and Ayache, Nicholas}, Title = {{A statistical model of white matter fiber bundles based on currents.}}, Journal = {Information processing in medical imaging : proceedings of the ... conference}, Volume = {21}, Pages = {114--25}, abstract = {The purpose of this paper is to measure the variability of a population of white matter fiber bundles without imposing unrealistic geometrical priors. In this respect, modeling fiber bundles as currents seems particularly relevant, as it gives a metric between bundles which relies neither on point nor on fiber correspondences and which is robust to fiber interruption. First, this metric is included in a diffeomorphic registration scheme which consistently aligns sets of fiber bundles. In particular, we show that aligning directly fiber bundles may solve the aperture problem which appears when fiber mappings are constrained by tensors only. Second, the measure of variability of a population of fiber bundles is based on a statistical model which considers every bundle as a random diffeomorphic deformation of a common template plus a random non-diffeomorphic perturbation. Thus, the variability is decomposed into a geometrical part and a "texture" part. Our results on real data show that both parts may contain interesting anatomical features.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Durrleman et al. - 2009 - A statistical model of white matter fiber bundles based on currents..pdf:pdf}, issn = {1011-2499}, keywords = {Algorithms,Artificial Intelligence,Brain,Brain: anatomy \& histology,Cluster Analysis,Computer Simulation,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Models, Neurological,Models, Statistical,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity}, month = jan, pmid = {19694257}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19694257}, year = 2009 } @Article{Hill2002, Author = {Hill, Murray}, Title = {{McLaren’s Improved Snub Cube and Other New Spherical Designs in Three Dimensions}}, Journal = {Sciences-New York}, Number = {1}, arxivid = {arXiv:math/0207211v1}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Hill - 2002 - McLaren’s Improved Snub Cube and Other New Spherical Designs in Three Dimensions.pdf:pdf}, year = 2002 } @Article{zhang2008identifying, Author = {Zhang, S. and Correia, S. and Laidlaw, D.H.}, Title = {{Identifying White-Matter Fiber Bundles in DTI Data Using an Automated Proximity-Based Fiber Clustering Method}}, Journal = {IEEE transactions on visualization and computer graphics}, Volume = {14}, Number = {5}, Pages = {1044}, publisher = {NIH Public Access}, year = 2008 } @Book{einstein1956itb, Author = {Einstein, A.}, Title = {Investigations on the {T}heory of the {B}rownian {M}ovement}, Publisher = {Dover Publications}, year = 1956 } @Article{Garyfallidis, Author = {Garyfallidis, Eleftherios}, Title = {{Diffusion MRI and Tractography Tracks vs Tracts}}, Journal = {Sciences-New York}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Garyfallidis - Unknown - Di usion MRI and Tractography Tracks vs Tracts.pdf:pdf} } @Article{Tegmark2008, Author = {Tegmark, Max}, Title = {{No Title}}, arxivid = {arXiv:astro-ph/9610094v1}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tegmark - 2008 - No Title.pdf:pdf}, year = 2008 } @Article{wakana2007roq, Author = {Wakana, S. and Caprihan, A. and Panzenboeck, M. M. and Fallon, J.H. and Perry, M. and Gollub, R. L. and Hua, K. and Zhang, J. and Jiang, H. and Dubey, P. and Blitz, A. and van Zijl, P. and Mori, S.}, Title = {Reproducibility of quantitative tractography methods applied to cerebral white matter}, Journal = {Neuroimage}, Volume = {36}, Pages = {630-644}, file = {attachment\:wakana_reproducibility_2007.pdf:attachment\:wakana_reproducibility_2007.pdf:PDF}, publisher = {Elsevier}, year = 2007 } @Article{Dale2009, Author = {Dale, Darren and Droettboom, Michael and Firing, Eric and Hunter, John}, Title = {{Matplotlib}}, Journal = {Building}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Dale et al. - 2009 - Matplotlib.pdf:pdf}, year = 2009 } @Article{Hasan2007MRI, Author = {Hasan, Khader M.}, Title = {A framework for quality control and parameter optimization in diffusion tensor imaging: theoretical analysis and validation}, Journal = {Magnetic Resonance Imaging}, Volume = {25}, Pages = {1196–1202}, abstract = {In this communication, a theoretical framework for quality control and parameter optimization in diffusion tensor imaging (DTI) is presented and validated. The approach is based on the analytical error propagation of the mean diffusivity (Dav) obtained directly from the diffusion-weighted data acquired using rotationally invariant and uniformly distributed icosahedral encoding schemes. The error propagation of a recently described and validated cylindrical tensor model is further extrapolated to the spherical tensor case (diffusion anisotropy 0) to relate analytically the precision error in fractional tensor anisotropy (FA) with the mean diffusion-to-noise ratio (DNR). The approach provided simple analytical and empirical quality control measures for optimization of diffusion parameter space in an isotropic medium that can be tested using widely available water phantoms.}, file = {attachment\:Hasan2007MRI.pdf:attachment\:Hasan2007MRI.pdf:PDF}, year = 2007 } @Article{Jian2007bNeuroImage, Author = {Jian, Bing and Vemuri, Baba C. and Ozarslan, Evren and Carney, Paul R. and Mareci, Thomas H.}, Title = {Erratum to '\{{A}\} novel tensor distribution model for the diffusion-weighted \{{M}{R}\} signal'}, Journal = {NeuroImage}, Volume = {37}, Number = {2}, file = {attachment\:Jian2007bNeuroImage.pdf:attachment\:Jian2007bNeuroImage.pdf:PDF}, url = {http://www.sciencedirect.com/science/article/B6WNP-4S62RMR-5/2/160bb8aa9bf75adcf495557cec86868f}, year = 2007 } @InProceedings{Haro2008ISBI, Author = {Haro, Gloria and Lenglet, Christophe and Sapiro, Guillermo and Thompson, Paul M.}, Title = {On the Non-Uniform Complexity of Brain Connectivity}, BookTitle = {5th IEEE International Symposium on Biomedical Imaging: From Nano to Macro}, Pages = {FR-P2a (poster)}, abstract = {A stratification and manifold learning approach for analyzing High Angular Resolution Diffusion Imaging (HARDI) data is introduced in this paper. HARDI data provides highdimensional signals measuring the complex microstructure of biological tissues, such as the cerebral white matter. We show that these high-dimensional spaces may be understood as unions of manifolds of varying dimensions/complexity and densities. With such analysis, we use clustering to characterize the structural complexity of the white matter. We briefly present the underlying framework and numerical experiments illustrating this original and promising approach.}, file = {attachment\:Haro2008ISBI.pdf:attachment\:Haro2008ISBI.pdf:PDF}, url = {http://www.ieeexplore.ieee.org/search/freesrchabstract.jsp?arnumber=4541139&isnumber=4540908&punumber=4534844&k2dockey=4541139@ieeecnfs&query=&pos=0}, year = 2008 } @Article{Buchel2004CerebralCortex, Author = {Büchel, C. and Raedler, T. and Sommer, M. and Sach, M. and Weiller, C. and Koch, M. A.}, Title = {White matter asymmetry in the human brain: a diffusion tensor \{{M}{RI}\} study}, Journal = {Cerebral Cortex}, Volume = {14}, Pages = {945-951}, abstract = {Language ability and handedness are likely to be associated with asymmetry of the cerebral cortex (grey matter) and connectivity (white matter). Grey matter asymmetry, most likely linked to language has been identified with voxel-based morphometry (VBM) using T1-weighted images. Differences in white matter obtained with this technique are less consistent, probably due to the relative insensitivity of the T1 contrast to the ultrastructure of white matter. Furthermore, previous VBM studies failed to find differences related to handedness in either grey or white matter. We revisited these issues and investigated two independent groups of subjects with diffusion-tensor imaging (DTI) for asymmetries in white matter composition. Using voxel-based statistical analyses an asymmetry of the arcuate fascicle was observed, with higher fractional anisotropy in the left hemisphere. In addition, we show differences related to handedness in the white matter underneath the precentral gyrus contralateral to the dominant hand. Remarkably, these findings were very robust, even when investigating small groups of subjects. This highlights the sensitivity of DTI for white matter tissue differences, making it an ideal tool to study small patient populations.}, doi = {10.1093/cercor/bhh055}, file = {attachment\:Buchel2004CerebralCortex.pdf:attachment\:Buchel2004CerebralCortex.pdf:PDF}, year = 2004 } @Article{Ding2003, Author = {Ding, Z and Gore, J and Anderson, A}, Title = {{Classification and quantification of neuronal fiber pathways using diffusion tensor MRI}}, Journal = {Magn. Reson. Med.}, Volume = {49}, Pages = {716--721}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ding, Gore, Anderson - 2003 - Classification and quantification of neuronal fiber pathways using diffusion tensor MRI.pdf:pdf}, year = 2003 } @Article{Canales-Rodriguez2009, Author = {Canales-Rodr\'{\i}guez, Erick Jorge and Melie-Garc\'{\i}a, Lester and Iturria-Medina, Yasser}, Title = {{Mathematical description of q-space in spherical coordinates: exact q-ball imaging.}}, Journal = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, Volume = {61}, Number = {6}, Pages = {1350--67}, abstract = {Novel methodologies have been recently developed to characterize the microgeometry of neural tissues and porous structures via diffusion MRI data. In line with these previous works, this article provides a detailed mathematical description of q-space in spherical coordinates that helps to highlight the differences and similarities between various related q-space methodologies proposed to date such as q-ball imaging (QBI), diffusion spectrum imaging (DSI), and diffusion orientation transform imaging (DOT). This formulation provides a direct relationship between the orientation distribution function (ODF) and the diffusion data without using any approximation. Under this relationship, the exact ODF can be computed by means of the Radon transform of the radial projection (in q-space) of the diffusion MRI signal. This new methodology, termed exact q-ball imaging (EQBI), was put into practice using an analytical ODF estimation in terms of spherical harmonics that allows obtaining model-free and model-based reconstructions. This work provides a new framework for combining information coming from diffusion data recorded on multiple spherical shells in q-space (hybrid diffusion imaging encoding scheme), which is capable of mapping ODF to a high accuracy. This represents a step toward a more efficient development of diffusion MRI experiments for obtaining better ODF estimates.}, doi = {10.1002/mrm.21917}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Canales-Rodr\'{\i}guez, Melie-Garc\'{\i}a, Iturria-Medina - 2009 - Mathematical description of q-space in spherical coordinates exact q-ball imaging..pdf:pdf}, issn = {1522-2594}, keywords = {Algorithms,Computer Simulation,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Models, Biological,Reproducibility of Results,Sensitivity and Specificity}, pmid = {19319889}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19319889}, year = 2009 } @Article{Wakana2007NeuroImage, Author = {Wakana, Setsu and Caprihan, Arvind and Panzenboeck, Martina M. and Fallon, James H. and Perry, Michele and Gollub, Randy L. and Hua, Kegang and Zhang, Jiangyang and Jiang, Hangyi and Dubey, Prachi and Blitz, Ari and {van Zijl}, Peter and Mori, Susumu}, Title = {Reproducibility of quantitative tractography methods applied to cerebral white matter}, Journal = {NeuroImage}, Volume = {36}, Number = {1}, Pages = {630-644}, abstract = {Tractography based on diffusion tensor imaging (DTI) allows visualization of white matter tracts. In this study, protocols to reconstruct eleven major white matter tracts are described. The protocols were refined by several iterations of intra- and inter-rater measurements and identification of sources of variability. Reproducibility of the established protocols was then tested by raters who did not have previous experience in tractography. The protocols were applied to a DTI database of adult normal subjects to study size, fractional anisotropy (FA), and T2 of individual white matter tracts. Distinctive features in FA and T2 were found for the corticospinal tract and callosal fibers. Hemispheric asymmetry was observed for the size of white matter tracts projecting to the temporal lobe. This protocol provides guidelines for reproducible DTI-based tract-specific quantification.}, file = {attachment\:Wakana2007NeuroImage.pdf:attachment\:Wakana2007NeuroImage.pdf:PDF}, publisher = {Elevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4N9DK04-1/2/6f4d33fa634a866aa907f16091a9bb67}, year = 2007 } @Article{Grady2006, Author = {Grady, Leo}, Title = {{Random walks for image segmentation.}}, Journal = {IEEE transactions on pattern analysis and machine intelligence}, Volume = {28}, Number = {11}, Pages = {1768--83}, abstract = {A novel method is proposed for performing multilabel, interactive image segmentation. Given a small number of pixels with user-defined (or predefined) labels, one can analytically and quickly determine the probability that a random walker starting at each unlabeled pixel will first reach one of the prelabeled pixels. By assigning each pixel to the label for which the greatest probability is calculated, a high-quality image segmentation may be obtained. Theoretical properties of this algorithm are developed along with the corresponding connections to discrete potential theory and electrical circuits. This algorithm is formulated in discrete space (i.e., on a graph) using combinatorial analogues of standard operators and principles from continuous potential theory, allowing it to be applied in arbitrary dimension on arbitrary graphs.}, doi = {10.1109/TPAMI.2006.233}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Grady - 2006 - Random walks for image segmentation..pdf:pdf}, issn = {0162-8828}, keywords = {Algorithms,Artificial Intelligence,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Information Storage and Retrieval,Information Storage and Retrieval: methods,Models, Statistical,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity}, month = nov, pmid = {17063682}, url = {http://www.ncbi.nlm.nih.gov/pubmed/17063682}, year = 2006 } @Article{Good2001NeuroImage, Author = {Good, Catriona D. and Johnsrude, Ingrid S. and Ashburner, John and Henson, Richard N. A. and Friston, Karl J. and Frackowiak, Richard S. J.}, Title = {A Voxel-Based Morphometric Study of Ageing in 465 Normal Adult Human Brains}, Journal = {NeuroImage}, Volume = {14}, Pages = {21-36}, doi = {10.1006/nimg.2001.0786}, file = {attachment\:Good2001NeuroImage.pdf:attachment\:Good2001NeuroImage.pdf:PDF}, publisher = {Elsevier}, year = 2001 } @Article{Savadjiev2008, Author = {Savadjiev, Peter and Campbell, Jennifer S W and Descoteaux, Maxime and Deriche, Rachid and Pike, G Bruce and Siddiqi, Kaleem}, Title = {{Labeling of ambiguous subvoxel fibre bundle configurations in high angular resolution diffusion MRI.}}, Journal = {NeuroImage}, Volume = {41}, Number = {1}, Pages = {58--68}, abstract = {Whereas high angular resolution reconstruction methods for diffusion MRI can estimate multiple dominant fibre orientations within a single imaging voxel, they are fundamentally limited in certain cases of complex subvoxel fibre structures, resulting in ambiguous local orientation distribution functions. In this article we address the important problem of disambiguating such complex subvoxel fibre tract configurations, with the purpose of improving the performance of fibre tractography. We do so by extending a curve inference method to distinguish between the cases of curving and fanning fibre bundles using differential geometric estimates in a local neighbourhood. The key benefit of this method is the inference of curves, instead of only fibre orientations, to model the underlying fibre bundles. This in turn allows distinct fibre geometries that contain nearly identical sets of fibre orientations at a voxel, to be distinguished from one another. Experimental results demonstrate the ability of the method to successfully label voxels into one of the above categories and improve the performance of a fibre-tracking algorithm.}, doi = {10.1016/j.neuroimage.2008.01.028}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Savadjiev et al. - 2008 - Labeling of ambiguous subvoxel fibre bundle configurations in high angular resolution diffusion MRI..pdf:pdf}, issn = {1053-8119}, keywords = {Adult,Algorithms,Brain,Brain: anatomy \& histology,Brain: cytology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Diffusion Magnetic Resonance Imaging: statistics \&,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Image Processing, Computer-Assisted: statistics \& ,Motor Cortex,Motor Cortex: cytology,Motor Cortex: physiology,Nerve Fibers,Nerve Fibers: physiology,Neural Pathways,Neural Pathways: anatomy \& histology,Neural Pathways: cytology,Neural Pathways: physiology}, pmid = {18367409}, url = {http://www.ncbi.nlm.nih.gov/pubmed/18367409}, year = 2008 } @Article{olver2010nist, Author = {Olver, F.W. and Lozier, D.W. and Boisvert, R.F. and Clark, C.W.}, Title = {{NIST handbook of mathematical functions}}, publisher = {Cambridge University Press New York, NY, USA}, year = 2010 } @Article{Cohen-adad, Author = {Cohen-adad, Julien and Mcnab, Jennifer and Gagoski, Borjan and Wedeen, Van and Wald, Lawrence and Hospital, Massachusetts General and States, United}, Title = {{OHBM https://www.aievolution.com/hbm1001/index.cfm?...}}, Pages = {1--6}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Cohen-adad et al. - Unknown - OHBM httpswww.aievolution.comhbm1001index.cfm....pdf:pdf} } @Article{Nannen2003a, Author = {Nannen, Volker}, Title = {{A Short Introduction to Model Selection , Kolmogorov Complexity and Minimum Description Length ( MDL )}}, Journal = {Complexity}, Number = {Mdl}, Pages = {1--23}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Nannen - 2003 - A Short Introduction to Model Selection , Kolmogorov Complexity and Minimum Description Length ( MDL ).pdf:pdf}, year = 2003 } @Article{Masutani2003EorJRadiography, Author = {Masutani, Yoshitaka and Aoki, Shigeki and Abe, Osamu and Hayashi, Naoto and Otomo, Kuni}, Title = {\{{MR}\} diffusion tensor imaging: recent advance and new techniques for diffusion tensor visualization}, Journal = {European Journal of Radiology}, Volume = {46}, Number = {1}, Pages = {53-66}, abstract = {Recently, diffusion tensor imaging is attracting the biomedical researchers for its application in depiction of fiber tracts based on diffusion anisotropy. In this paper, we briefly describe the basic theory of diffusion tensor MR imaging, the determination process of diffusion tensor, and the basic concepts of diffusion tensor visualization techniques. Several results of clinical application in our institute are also introduced. Finally, the limitations, advantages and disadvantages of the techniques are discussed for further application of diffusion tensor visualization.}, file = {Masutani2003EorJRadiography.pdf:Masutani2003EorJRadiography.pdf:PDF}, url = {http://www.sciencedirect.com/science/article/B6T6F-481N1XP-1/2/c1ca22568a2d933c2d6c23d493b98d1b}, year = 2003 } @Article{anwander2007cbp, Author = {Anwander, A. and Tittgemeyer, M. and von Cramon, D Y and Friederici, A D and Knosche, T R}, Title = {{Connectivity-Based Parcellation of {B}roca's {A}rea}}, Journal = {Cerebral Cortex}, Volume = {17}, Number = {4}, Pages = {816}, file = {attachment\:anwander_dti_broca_parcellation_2007.pdf:attachment\:anwander_dti_broca_parcellation_2007.pdf:PDF}, publisher = {Oxford Univ Press}, year = 2007 } @Article{Hermoye2006NeuroImage, Author = {Hermoye, Laurent and Saint-Martin, Christine and Cosnard, Guy and Lee, Seung-Koo and Kim, Jinna and Nassogne, Marie-Cecile and Menten, Renaud and Clapuyt, Philippe and Donohue, Pamela K. and Hua, Kegang and Wakana, Setsu and Jiang, Hangyi and {van Zijl}, Peter C.M. and Mori, Susumu}, Title = {Pediatric diffusion tensor imaging: Normal database and observation of the white matter maturation in early childhood}, Journal = {NeuroImage}, Volume = {29}, Number = {2}, Pages = {493-504}, abstract = {Recent advances in diffusion tensor imaging (DTI) have made it possible to reveal white matter anatomy and to detect neurological abnormalities in children. However, the clinical use of this technique is hampered by the lack of a normal standard of reference. The goal of this study was to initiate the establishment of a database of DTI images in children, which can be used as a normal standard of reference for diagnosis of pediatric neurological abnormalities. Seven pediatric volunteers and 23 pediatric patients (age range: 0-54 months) referred for clinical MR examinations, but whose brains were shown to be normal, underwent anatomical and DTI acquisitions on a 1.5 T MR scanner. The white matter maturation, as observed on DTI color maps, was described and illustrated. Changes in diffusion fractional anisotropy (FA), average apparent diffusion constant (ADCave), and T2-weighted (T2W) signal intensity were quantified in 12 locations to characterize the anatomical variability of the maturation process. Almost all prominent white matter tracts could be identified from birth, although their anisotropy was often low. The evolution of FA, shape, and size of the white matter tracts comprised generally three phases: rapid changes during the first 12 months; slow modifications during the second year; and relative stability after 24 months. The time courses of FA, ADCave, and T2W signal intensity confirmed our visual observations that maturation of the white matter and the normality of its architecture can be assessed with DTI in young children. The database is available online and is expected to foster the use of this promising technique in the diagnosis of pediatric pathologies.}, file = {attachment\:Hermoye2006NeuroImage.pdf:attachment\:Hermoye2006NeuroImage.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4H6GPNP-1/2/36429532df681a3d26bc67f5f3f8e9d9}, year = 2006 } @Article{Lee2007, Author = {Lee, Jae-gil and Han, Jiawei}, Title = {{Trajectory Clustering : A Partition-and-Group Framework ∗}}, Journal = {Group}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Lee, Han - 2007 - Trajectory Clustering A Partition-and-Group Framework ∗.pdf:pdf}, keywords = {a number of clustering,age processing,algorithms have been,and im-,data analysis,density-based clustering,market research,mdl principle,partition-and-group framework,pattern recognition,tering,trajectory clus-}, year = 2007 } @Article{BPP+00, Author = {Basser, P. J. and Pajevic, S. and Pierpaoli, C. and Duda, J. and Aldroubi, A.}, Title = {In vivo fiber tractography using {DT}-{MRI} data.}, Journal = {Magn Reson Med}, Volume = {44}, Number = {4}, Pages = {625-32}, abstract = {Fiber tract trajectories in coherently organized brain white matter pathways were computed from in vivo diffusion tensor magnetic resonance imaging (DT-MRI) data. First, a continuous diffusion tensor field is constructed from this discrete, noisy, measured DT-MRI data. Then a Frenet equation, describing the evolution of a fiber tract, was solved. This approach was validated using synthesized, noisy DT-MRI data. Corpus callosum and pyramidal tract trajectories were constructed and found to be consistent with known anatomy. The method's reliability, however, degrades where the distribution of fiber tract directions is nonuniform. Moreover, background noise in diffusion-weighted MRIs can cause a computed trajectory to hop from tract to tract. Still, this method can provide quantitative information with which to visualize and study connectivity and continuity of neural pathways in the central and peripheral nervous systems in vivo, and holds promise for elucidating architectural features in other fibrous tissues and ordered media.}, authoraddress = {Section on Tissue Biophysics and Biomimetics, NICHD, Bethesda, Maryland 20892-5772, USA. pjbasser@helix.nih.gov}, keywords = {Artifacts ; Brain/*anatomy \& histology ; Humans ; Image Processing, Computer-Assisted ; *Magnetic Resonance Imaging/methods ; Nerve Fibers}, language = {eng}, medline-aid = {10.1002/1522-2594(200010)44:4<625::AID-MRM17>3.0.CO;2-O [pii]}, medline-crdt = {2000/10/12 11:00}, medline-da = {20001103}, medline-dcom = {20001103}, medline-edat = {2000/10/12 11:00}, medline-fau = {Basser, P J ; Pajevic, S ; Pierpaoli, C ; Duda, J ; Aldroubi, A}, medline-is = {0740-3194 (Print)}, medline-jid = {8505245}, medline-jt = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, medline-lr = {20061115}, medline-mhda = {2001/02/28 10:01}, medline-own = {NLM}, medline-pl = {UNITED STATES}, medline-pmid = {11025519}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, U.S. Gov't, Non-P.H.S.}, medline-sb = {IM}, medline-so = {Magn Reson Med. 2000 Oct;44(4):625-32.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=11025519}, year = 2000 } @Article{O'Donnell2007, Author = {O'Donnell, Lauren J and Westin, Carl-Fredrik and Golby, Alexandra J}, Title = {{Tract-based morphometry.}}, Journal = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, Volume = {10}, Number = {Pt 2}, Pages = {161--8}, abstract = {Multisubject statistical analyses of diffusion tensor images in regions of specific white matter tracts have commonly measured only the mean value of a scalar invariant such as the fractional anisotropy (FA), ignoring the spatial variation of FA along the length of fiber tracts. We propose to instead perform tract-based morphometry (TBM), or the statistical analysis of diffusion MRI data in an anatomical tract-based coordinate system. We present a method for automatic generation of white matter tract arc length parameterizations, based on learning a fiber bundle model from tractography from multiple subjects. Our tract-based coordinate system enables TBM for the detection of white matter differences in groups of subjects. We present example TBM results from a study of interhemispheric differences in FA.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/O'Donnell, Westin, Golby - 2007 - Tract-based morphometry..pdf:pdf}, keywords = {Algorithms,Artificial Intelligence,Brain,Brain: cytology,Cluster Analysis,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Neural Pathways,Neural Pathways: cytology,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity}, month = jan, pmid = {18044565}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19154790}, year = 2007 } @Article{Correia2009a, Author = {Correia, Stephen and Lee, Stephanie Y and Voorn, Thom and Tate, David F and Paul, Robert H and Salloway, Stephen P and Malloy, Paul F and Laidlaw, David H}, Title = {{NIH Public Access}}, Journal = {Water}, Volume = {42}, Number = {2}, Pages = {568--581}, doi = {10.1016/j.neuroimage.2008.05.022.Quantitative}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Correia et al. - 2009 - NIH Public Access.pdf:pdf}, year = 2009 } @Article{toosy2004cfs, Author = {Toosy, A. T. and Ciccarelli, O. and Parker, G.J.M. and Wheeler-Kingshott, C. A. M. and Miller, D. H. and Thompson, A. J.}, Title = {Characterizing function--structure relationships in the human visual system with functional \{{M}{RI}\} and diffusion tensor imaging}, Journal = {Neuroimage}, Volume = {21}, Number = {4}, Pages = {1452--1463}, file = {attachment\:toosy_visual_fmri_dti_2003.pdf:attachment\:toosy_visual_fmri_dti_2003.pdf:PDF}, publisher = {Elsevier}, year = 2004 } @Article{Descoteaux2007, Author = {Descoteaux, M and Angelino, E and Fitzgibbons, S and Deriche, R}, Title = {{Regularized, fast, and robust analytical q-ball imaging}}, Journal = {Magnetic Resonance in Medicine}, Volume = {vol}, Pages = {58no3pp497--510}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Descoteaux et al. - 2007 - Regularized, fast, and robust analytical q-ball imaging.pdf:pdf}, year = 2007 } @Article{Zvitia2010a, Author = {Zvitia, Orly and Mayer, Arnaldo and Shadmi, Ran and Miron, Shmuel and Greenspan, Hayit K}, Title = {{Co-registration of white matter tractographies by adaptive-mean-shift and Gaussian mixture modeling.}}, Journal = {IEEE transactions on medical imaging}, Volume = {29}, Number = {1}, Pages = {132--45}, abstract = {In this paper, we present a robust approach to the registration of white matter tractographies extracted from diffusion tensor-magnetic resonance imaging scans. The fibers are projected into a high dimensional feature space based on the sequence of their 3-D coordinates. Adaptive mean-shift clustering is applied to extract a compact set of representative fiber-modes (FM). Each FM is assigned to a multivariate Gaussian distribution according to its population thereby leading to a Gaussian mixture model (GMM) representation for the entire set of fibers. The registration between two fiber sets is treated as the alignment of two GMMs and is performed by maximizing their correlation ratio. A nine-parameters affine transform is recovered and eventually refined to a twelve-parameters affine transform using an innovative mean-shift based registration refinement scheme presented in this paper. The validation of the algorithm on synthetic intrasubject data demonstrates its robustness to interrupted and deviating fiber artifacts as well as outliers. Using real intrasubject data, a comparison is conducted to other intensity based and fiber-based registration algorithms, demonstrating competitive results. An option for tracking-in-time, on specific white matter fiber tracts, is also demonstrated on the real data.}, doi = {10.1109/TMI.2009.2029097}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Zvitia et al. - 2010 - Co-registration of white matter tractographies by adaptive-mean-shift and Gaussian mixture modeling.(2).pdf:pdf}, issn = {1558-0062}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Cluster Analysis,Diffusion Tensor Imaging,Diffusion Tensor Imaging: methods,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Models, Neurological,Normal Distribution,Reproducibility of Results}, month = jan, pmid = {19709970}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19709970}, year = 2010 } @Article{Mobbs2009, Author = {Mobbs, Dean and Yu, Rongjun and Meyer, Marcel and Passamonti, Luca and Seymour, Ben and Calder, Andrew J and Schweizer, Susanne and Frith, Chris D and Dalgleish, Tim}, Title = {{A key role for similarity in vicarious reward.}}, Journal = {Science (New York, N.Y.)}, Volume = {324}, Number = {5929}, Pages = {900}, abstract = {Humans appear to have an inherent prosocial tendency toward one another in that we often take pleasure in seeing others succeed. This fact is almost certainly exploited by game shows, yet why watching others win elicits a pleasurable vicarious rewarding feeling in the absence of personal economic gain is unclear. One explanation is that game shows use contestants who have similarities to the viewing population, thereby kindling kin-motivated responses (for example, prosocial behavior). Using a game show-inspired paradigm, we show that the interactions between the ventral striatum and anterior cingulate cortex subserve the modulation of vicarious reward by similarity, respectively. Our results support studies showing that similarity acts as a proximate neurobiological mechanism where prosocial behavior extends to unrelated strangers.}, doi = {10.1126/science.1170539}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mobbs et al. - 2009 - A key role for similarity in vicarious reward..pdf:pdf}, issn = {1095-9203}, keywords = {Adult,Basal Ganglia,Basal Ganglia: physiology,Brain Mapping,Empathy,Female,Games, Experimental,Gyrus Cinguli,Gyrus Cinguli: physiology,Humans,Magnetic Resonance Imaging,Male,Prefrontal Cortex,Prefrontal Cortex: physiology,Reward,Self Concept,Social Behavior,Social Desirability,Young Adult}, month = may, pmid = {19443777}, url = {http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=2839480\&tool=pmcentrez\&rendertype=abstract}, year = 2009 } @Article{Nannen2003b, Author = {Nannen, Volker}, Title = {{A Short Introduction to Kolmogorov Complexity}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Nannen - 2003 - A Short Introduction to Kolmogorov Complexity.pdf:pdf}, year = 2003 } @conference{Auerbach2004ISMRM, author = {Auerbach, E. J. and Ugurbil, K.}, journal = {Proc. Intl. Soc. Mag. Reson. Med.}, owner = {ian}, timestamp = {2009.03.04}, title = {Improvement in Diffusion MRI at 3T and Beyond with the Twice-Refocused Adiabatic Spin Echo (TRASE) Sequence}, year = 2004 } @Article{sherbondy2006mma, Author = {Sherbondy, AJ and Akers, DL and Dougherty, RF and Ben-Shachar, M. and Napel, S. and Wandell, BA}, Title = {{MetroTrac: A metropolis algorithm for probabilistic tractography}}, Journal = {Human Brain Mapping, Florence}, year = 2006 } @InProceedings{bjornemoMICCAI02, Author = {M. Bj\"ornemo and A. Brun and R. Kikinis and C.-F. Westin}, Title = {Regularized Stochastic White Matter Tractography Using Diffusion Tensor {MRI}}, BookTitle = {Fifth International Conference on Medical Image Computing and Computer-Assisted Intervention (MICCAI'02)}, Pages = {435--442}, Address = {Tokyo, Japan}, year = 2002 } @PhdThesis{maddah_phdthesis2008, Author = {Maddah, M.}, Title = {{Quantitative Analysis of Cerebral White Matter Anatomy from Diffusion MRI}}, School = {Massachusetts Institute of Technology}, year = 2008 } @Article{iturriamedina2007cba, Author = {Iturria-Medina, Y. and Canales-Rodr{\'\i}guez, EJ and Melie-Garc{\'\i}a, L. and Vald{\'e}s-Hern{\'a}ndez, PA and Mart{\'\i}nez-Montes, E. and Alem{\'a}n-G{\'o}mez, Y. and S{\'a}nchez-Bornot, JM}, Title = {Characterizing brain anatomical connections using diffusion weighted \{{M}{RI}\} and graph theory}, Journal = {Neuroimage}, Volume = {36}, Number = {3}, Pages = {645--660}, file = {attachment\:iturria-medinaet_dti_graph_2007.pdf:attachment\:iturria-medinaet_dti_graph_2007.pdf:PDF}, publisher = {Elsevier}, year = 2007 } @Article{Harel2001, Author = {Harel, David and Koren, Yehuda}, Title = {{On Clustering Using Random Walks}}, Pages = {18--41}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Harel, Koren - 2001 - On Clustering Using Random Walks.pdf:pdf}, year = 2001 } @Article{Kim2009, Author = {Kim, M S and Han, J}, Title = {{Chronicle: A two-stage density-based clustering algorithm for dynamic networks}}, Journal = {In: Discovery Science.}, Volume = {pp}, Pages = {152--167}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kim, Han - 2009 - Chronicle A two-stage density-based clustering algorithm for dynamic networks.pdf:pdf}, year = 2009 } @Article{Tsai2007, Author = {Tsai, Andy and Westin, Carl-fredrik and Hero, Alfred O and Willsky, Alan S}, Title = {{Fiber tract clustering on manifolds with dual rooted-graphs}}, Journal = {in CVPR}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tsai et al. - 2007 - Fiber tract clustering on manifolds with dual rooted-graphs.pdf:pdf}, year = 2007 } @Article{Staempfli2008NeuroImage, Author = {Staempfli, P. and Reischauer, C. and Jaermann, T. and Valavanis, A. and Kollias, S. and Boesiger, P.}, Title = {Combining {fMRI} and {DTI}: A framework for exploring the limits of {fMRI}-guided {DTI} fiber tracking and for verifying {DTI}-based fiber tractography results}, Journal = {NeuroImage}, Volume = {39}, Number = {1}, Pages = {119-126}, abstract = {A powerful, non-invasive technique for estimating and visualizing white matter tracts in the human brain in vivo is white matter fiber tractography that uses magnetic resonance diffusion tensor imaging. The success of this method depends strongly on the capability of the applied tracking algorithm and the quality of the underlying data set. However, DTI-based fiber tractography still lacks standardized validation. In the present work, a combined fMRI/DTI study was performed, both to develop a setup for verifying fiber tracking results using fMRI-derived functional connections and to explore the limitations of fMRI based DTI fiber tracking. Therefore, a minor fiber bundle that features several fiber crossings and intersections was examined: The striatum and its connections to the primary motor cortex were examined by using two approaches to derive the somatotopic organization of the striatum. First, an fMRI-based somatotopic map of the striatum was reconstructed, based on fMRI activations that were provoked by unilateral motor tasks. Second, fMRI-guided DTI fiber tracking was performed to generate DTI-based somatotopic maps, using a standard line propagation and an advanced fast marching algorithm. The results show that the fiber connections reconstructed by the advanced fast marching algorithm are in good agreement with known anatomy, and that the DTI-revealed somatotopy is similar to the fMRI somatotopy. Furthermore, the study illustrates that the combination of fMRI with DTI can supply additional information in order to choose reasonable seed regions for generating functionally relevant networks and to validate reconstructed fibers.}, file = {attachment\:Staempfli2008NeuroImage.pdf:attachment\:Staempfli2008NeuroImage.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4PHSC6C-2/2/dbb7febf8dca292f483c25d800bdf700}, year = 2008 } @Article{Kubicki2006, Author = {Kubicki, M and Shenton, M E}, Title = {{A Method for Clustering White Matter}}, Journal = {Ajnr. American Journal Of Neuroradiology}, Number = {May}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kubicki, Shenton - 2006 - A Method for Clustering White Matter.pdf:pdf}, year = 2006 } @Article{Reese2003MRM, Author = {Reese, T.G. and Heid, O. and Weisskoff, R.M. and Wedeen, V.J.}, Title = {Reduction of eddy-current-induced distortion in diffusion MRI using a twice-refocused spin echo}, Journal = {Magnetic Resonance in Medicine}, Volume = {49}, Number = {1}, Pages = {177-182}, abstract = {CP: Copyright © 2003 Wiley-Liss, Inc. ON: 1522-2594 PN: 0740-3194 AD: Department of Radiology, Massachusetts General Hospital, Boston, Massachusetts; Medical Engineering Division, Siemens AG, Erlangen, Germany; Epix Medical Inc., Cambridge, Massachusetts DOI: 10.1002/mrm.10308 US: http://dx.doi.org/10.1002/mrm.10308 AB: Image distortion due to field gradient eddy currents can create image artifacts in diffusion-weighted MR images. These images, acquired by measuring the attenuation of NMR signal due to directionally dependent diffusion, have recently been shown to be useful in the diagnosis and assessment of acute stroke and in mapping of tissue structure. This work presents an improvement on the spin-echo (SE) diffusion sequence that displays less distortion and consequently improves image quality. Adding a second refocusing pulse provides better image quality with less distortion at no cost in scanning efficiency or effectiveness, and allows more flexible diffusion gradient timing. By adjusting the timing of the diffusion gradients, eddy currents with a single exponential decay constant can be nulled, and eddy currents with similar decay constants can be greatly reduced. This new sequence is demonstrated in phantom measurements and in diffusion anisotropy images of normal human brain. Magn Reson Med 49:177-182, 2003. © 2003 Wiley-Liss, Inc.}, owner = {ian}, timestamp = {2009.03.12}, year = 2003 } @Article{Hua2008NeuroImage, Author = {Hua, Kegang and Zhang, Jiangyang and Wakana, Setsu and Jiang, Hangyi and Li, Xin and Reich, Daniel S. and Calabresi, Peter A. and Pekar, James J. and {van Zijl}, Peter C.M. and Mori, Susumu}, Title = {Tract probability maps in stereotaxic spaces: Analyses of white matter anatomy and tract-specific quantification}, Journal = {NeuroImage}, Volume = {39}, Number = {1}, Pages = {336-347}, abstract = {Diffusion tensor imaging (DTI) is an exciting new MRI modality that can reveal detailed anatomy of the white matter. DTI also allows us to approximate the 3D trajectories of major white matter bundles. By combining the identified tract coordinates with various types of MR parameter maps, such as T2 and diffusion properties, we can perform tract-specific analysis of these parameters. Unfortunately, 3D tract reconstruction is marred by noise, partial volume effects, and complicated axonal structures. Furthermore, changes in diffusion anisotropy under pathological conditions could alter the results of 3D tract reconstruction. In this study, we created a white matter parcellation atlas based on probabilistic maps of 11 major white matter tracts derived from the DTI data from 28 normal subjects. Using these probabilistic maps, automated tract-specific quantification of fractional anisotropy and mean diffusivity were performed. Excellent correlation was found between the automated and the individual tractography-based results. This tool allows efficient initial screening of the status of multiple white matter tracts. }, file = {attachment\:Hua2008NeuroImage.pdf:attachment\:Hua2008NeuroImage.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4PF1WFR-5/2/c08a39189151d2b118cf7f8805fe8e2a}, year = 2008 } @Article{Tuch2002, Author = {Tuch, David S. and Reese, Timothy G. and Wiegell, Mette R. and Makris, Nikos and Belliveau, John W. and Wedeen, Van J.}, Title = {{High angular resolution diffusion imaging reveals intravoxel white matter fiber heterogeneity}}, Journal = {Magnetic Resonance in Medicine}, Volume = {48}, Number = {4}, Pages = {577--582}, abstract = {Magnetic resonance (MR) diffusion tensor imaging (DTI) can resolve the white matter fiber orientation within a voxel provided that the fibers are strongly aligned. However, a given voxel may contain a distribution of fiber orientations due to, for example, intravoxel fiber crossing. The present study sought to test whether a geodesic, high b-value diffusion gradient sampling scheme could resolve multiple fiber orientations within a single voxel. In regions of fiber crossing the diffusion signal exhibited multiple local maxima/minima as a function of diffusion gradient orientation, indicating the presence of multiple intravoxel fiber orientations. The multimodality of the observed diffusion signal precluded the standard tensor reconstruction, so instead the diffusion signal was modeled as arising from a discrete mixture of Gaussian diffusion processes in slow exchange, and the underlying mixture of tensors was solved for using a gradient descent scheme. The multitensor reconstruction resolved multiple intravoxel fiber populations corresponding to known fiber anatomy. Magn Reson Med 48:577-582, 2002. � 2002 Wiley-Liss, Inc.}, doi = {10.1002/mrm.10268}, url = {http://dx.doi.org/10.1002/mrm.10268}, year = 2002 } @Article{Kerkyacharian2007, Author = {Kerkyacharian, G and Petrushev, P and Picard, D and Willer, T}, Title = {{Needlet algorithms for estimation in inverse problems}}, Journal = {Electron. J. Stat}, Volume = {1}, Pages = {30--76}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Kerkyacharian et al. - 2007 - Needlet algorithms for estimation in inverse problems.pdf:pdf}, year = 2007 } @Article{Edition, Author = {Edition, Second}, Title = {{Statistical Pattern Stas-tical Pattern Recognit ion}}, Journal = {Pattern Recognition}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Edition - Unknown - Statistical Pattern Stas-tical Pattern Recognit ion.pdf:pdf} } @Article{Sverre2009, Author = {Sverre, Dag}, Title = {{Fast numerical computations with Cython}}, Number = {SciPy}, Pages = {15--22}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Sverre - 2009 - Fast numerical computations with Cython.pdf:pdf}, year = 2009 } @Article{Heim2007ComputationalStatisticsDataAnalysis, Author = {Heim, S. and Fahrmeir, L. and Eilers, P.H.C. and Marx, B.D.}, Title = {3D space-varying coefficient models with application to diffusion tensor imaging}, Journal = {Computational Statistics \& Data Analysis}, Volume = {51}, Number = {12}, Pages = {6212-6228}, abstract = {The present methodological development and the primary application field originate from diffusion tensor imaging (DTI), a powerful nuclear magnetic resonance technique which enables the quantification of microscopical tissue properties. The current analysis framework of separate voxelwise regressions is reformulated as a 3D space-varying coefficient model (SVCM) for the entire set of diffusion tensor images recorded on a 3D voxel grid. The SVCM unifies the three-step cascade of standard data processing (voxelwise regression, smoothing, interpolation) into one framework based on B-spline basis functions. Thereby strength is borrowed from spatially correlated voxels to gain a regularization effect right at the estimation stage. Two SVCM variants are conceptualized: a full tensor product approach and a sequential approximation, rendering the SVCM numerically and computationally feasible even for the huge dimension of the joint model in a realistic setup. A simulation study shows that both approaches outperform the standard method of voxelwise regression with subsequent regularization. Application of the fast sequential method to real DTI data demonstrates the inherent ability to increase the grid resolution by evaluating the incorporated basis functions at intermediate points. The resulting continuous regularized tensor field may serve as basis for multiple applications, yet, ameloriation of local adaptivity is desirable. }, file = {attachment\:Heim2007ComputationalStatisticsDataAnalysis.pdf:attachment\:Heim2007ComputationalStatisticsDataAnalysis.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6V8V-4MV74WR-2/2/882882c104fa98632263c151db9fda23}, year = 2007 } @Article{Heller, Author = {Heller, Katherine A}, Title = {{Bayesian Hierarchical Clustering}}, Journal = {Neuroscience}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Heller - Unknown - Bayesian Hierarchical Clustering.pdf:pdf} } @Book{behrens2009diffusion, Author = {Behrens, T.E.J.}, Title = {{Diffusion MRI: From Quantitative Measurement to In-vivo Neuroanatomy}}, Publisher = {Academic Press}, year = 2009 } @Article{Descoteaux2007a, Author = {Descoteaux, M and Angelino, E and Fitzgibbons, S and Deriche, R}, Title = {{Regularized, fast, and robust analytical q-ball imaging}}, Journal = {Magnetic Resonance in Medicine}, Volume = {vol}, Pages = {58no3pp497--510}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Descoteaux et al. - 2007 - Regularized, fast, and robust analytical q-ball imaging.pdf:pdf}, year = 2007 } @Article{PHW03, Author = {Parker, G. J. and Haroon, H. A. and Wheeler-Kingshott, C. A.}, Title = {A framework for a streamline-based probabilistic index of connectivity ({PIC}o) using a structural interpretation of {MRI} diffusion measurements.}, Journal = {J Magn Reson Imaging}, Volume = {18}, Number = {2}, Pages = {242-54}, abstract = {PURPOSE: To establish a general methodology for quantifying streamline-based diffusion fiber tracking methods in terms of probability of connection between points and/or regions. MATERIALS AND METHODS: The commonly used streamline approach is adapted to exploit the uncertainty in the orientation of the principal direction of diffusion defined for each image voxel. Running the streamline process repeatedly using Monte Carlo methods to exploit this inherent uncertainty generates maps of connection probability. Uncertainty is defined by interpreting the shape of the diffusion orientation profile provided by the diffusion tensor in terms of the underlying microstructure. RESULTS: Two candidates for describing the uncertainty in the diffusion tensor are proposed and maps of probability of connection to chosen start points or regions are generated in a number of major tracts. CONCLUSION: The methods presented provide a generic framework for utilizing streamline methods to generate probabilistic maps of connectivity.}, authoraddress = {Imaging Science and Biomedical Engineering, University of Manchester, Manchester, UK. geoff.parker@man.ac.uk}, keywords = {Anisotropy ; Brain/*anatomy \& histology ; Diffusion ; Diffusion Magnetic Resonance Imaging/*methods ; Echo-Planar Imaging ; Humans ; Models, Statistical ; Monte Carlo Method ; *Probability ; Uncertainty}, language = {eng}, medline-aid = {10.1002/jmri.10350 [doi]}, medline-ci = {Copyright 2003 Wiley-Liss, Inc.}, medline-crdt = {2003/07/29 05:00}, medline-da = {20030728}, medline-dcom = {20040129}, medline-edat = {2003/07/29 05:00}, medline-fau = {Parker, Geoffrey J M ; Haroon, Hamied A ; Wheeler-Kingshott, Claudia A M}, medline-is = {1053-1807 (Print)}, medline-jid = {9105850}, medline-jt = {Journal of magnetic resonance imaging : JMRI}, medline-lr = {20061115}, medline-mhda = {2004/01/30 05:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {12884338}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {J Magn Reson Imaging. 2003 Aug;18(2):242-54.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=12884338}, year = 2003 } @Article{Garyfallidis2009, Author = {Garyfallidis, Eleftherios}, Title = {{Towards an accurate brain tractography using di usion weighted imaging 1 Introduction}}, Journal = {Imaging}, Number = {June}, Pages = {1--25}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Garyfallidis - 2009 - Towards an accurate brain tractography using di usion weighted imaging 1 Introduction.pdf:pdf}, year = 2009 } @Article{Liu2007NeuroImage, Author = {Liu, Tianming and Li, Hai and Wong, Kelvin and Tarokh, Ashley and Guo, Lei and Wong, Stephen T.C.}, Title = {Brain tissue segmentation based on \{{D}{TI}\} data}, Journal = {NeuroImage}, Volume = {15}, Number = {1}, Pages = {114-123}, abstract = {We present a method for automated brain tissue segmentation based on the multi-channel fusion of diffusion tensor imaging (DTI) data. The method is motivated by the evidence that independent tissue segmentation based on DTI parametric images provides complementary information of tissue contrast to the tissue segmentation based on structural MRI data. This has important applications in defining accurate tissue maps when fusing structural data with diffusion data. In the absence of structural data, tissue segmentation based on DTI data provides an alternative means to obtain brain tissue segmentation. Our approach to the tissue segmentation based on DTI data is to classify the brain into two compartments by utilizing the tissue contrast existing in a single channel. Specifically, because the apparent diffusion coefficient (ADC) values in the cerebrospinal fluid (CSF) are more than twice that of gray matter (GM) and white matter (WM), we use ADC images to distinguish CSF and non-CSF tissues. Additionally, fractional anisotropy (FA) images are used to separate WM from non-WM tissues, as highly directional white matter structures have much larger fractional anisotropy values. Moreover, other channels to separate tissue are explored, such as eigenvalues of the tensor, relative anisotropy (RA), and volume ratio (VR). We developed an approach based on the Simultaneous Truth and Performance Level Estimation (STAPLE) algorithm that combines these two-class maps to obtain a complete tissue segmentation map of CSF, GM, and WM. Evaluations are provided to demonstrate the performance of our approach. Experimental results of applying this approach to brain tissue segmentation and deformable registration of DTI data and spoiled gradient-echo (SPGR) data are also provided.}, file = {attachment\:Liu2007NeuroImage.pdf:attachment\:Liu2007NeuroImage.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4P61N6N-3/2/a1e3c8c3d22d6c80fa4693813e380a76}, year = 2007 } @Article{Alexander2007Neurotherapeutics, Author = {Alexander, Andrew L. and Lee, Jee Eun and Lazar, Mariana and Field, Aaron S.}, Title = {Diffusion Tensor Imaging of the Brain}, Journal = {Neurotherapeutics}, Volume = {4}, Number = {3}, Pages = {316-329}, abstract = {Diffusion tensor imaging (DTI) is a promising method for characterizing microstructural changes or differences with neuropathology and treatment. The diffusion tensor may be used to characterize the magnitude, the degree of anisotropy, and the orientation of directional diffusion. This review addresses the biological mechanisms, acquisition, and analysis of DTI measurements. The relationships between DTI measures and white matter pathologic features (e.g., ischemia, myelination, axonal damage, inflammation, and edema) are summarized. Applications of DTI to tissue characterization in neurotherapeutic applications are reviewed. The interpretations of common DTI measures (mean diffusivity, MD; fractional anisotropy, FA; radial diffusivity, $D_r$; and axial diffusivity, $D_a$) are discussed. In particular, FA is highly sensitive to microstructural changes, but not very specific to the type of changes (e.g., radial or axial). To maximize the specificity and better characterize the tissue microstructure, future studies should use multiple diffusion tensor measures (e.g., MD and FA, or $D_a$ and $D_r$).}, doi = {10.1016/j.nurt.2007.05.011}, file = {attachment\:Alexander2007Neurotherapeutics.pdf:attachment\:Alexander2007Neurotherapeutics.pdf:PDF}, year = 2007 } @Article{canalesrodriguez2009mdq, Author = {Canales-Rodr{\'\i}guez, E.J. and Melie-Garc{\'\i}a, L. and Iturria-Medina, Y. and Center, C.N.}, Title = {{Mathematical description of q-space in spherical coordinates: Exact q-ball imaging.}}, Journal = {Magnetic resonance in medicine: official journal of the Society of Magnetic Resonance in Medicine/Society of Magnetic Resonance in Medicine}, year = 2009 } @Article{Yen2009, Author = {Yen, Luh and Fouss, Francois and Decaestecker, Christine and Francq, Pascal and Saerens, Marco}, Title = {{Graph nodes clustering with the sigmoid commute-time kernel: A comparative study}}, Journal = {Data \& Knowledge Engineering}, Volume = {68}, Number = {3}, Pages = {338--361}, doi = {10.1016/j.datak.2008.10.006}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Yen et al. - 2009 - Graph nodes clustering with the sigmoid commute-time kernel A comparative study(2).pdf:pdf}, issn = {0169023X}, publisher = {Elsevier B.V.}, url = {http://linkinghub.elsevier.com/retrieve/pii/S0169023X0800147X}, year = 2009 } @Article{Hartley, Author = {Hartley, Richard and Zisserman, Andrew}, Title = {{in computervision Multiple View Geometry in Computer Vision}} } @Article{Oishi2008NeuroImage, Author = {Oishi, Kenichi and Zilles, Karl and Amunts, Katrin and Faria, Andreia and Jiang, Hangyi and Li, Xin and Akhter, Kazi and Hua, Kegang and Woods, Roger and Toga, Arthur W. and Pike, G. Bruce and Rosa-Neto, Pedro and Evans, Alan and Zhang, Jiangyang and Huang, Hao and Miller, Michael I. and {van Zijl}, Peter C. M. and Mazziotta, John and Mori, Susumu}, Title = {Human brain white matter atlas: Identification and assignment of common anatomical structures in superficial white matter}, Journal = {NeuroImage}, Volume = {in press}, abstract = {Structural delineation and assignment are the fundamental steps in understanding the anatomy of the human brain. The white matter has been structurally defined in the past only at its core regions (deep white matter). However, the most peripheral white matter areas, which are interleaved between the cortex and the deep white matter, have lacked clear anatomical definitions and parcellations. We used axonal fiber alignment information from diffusion tensor imaging (DTI) to delineate the peripheral white matter, and investigated its relationship with the cortex and the deep white matter. Using DTI data from 81 healthy subjects, we identified nine common, blade-like anatomical regions, which were further parcellated into 21 subregions based on the cortical anatomy. Four short association fiber tracts connecting adjacent gyri (U-fibers) were also identified reproducibly among the healthy population. We anticipate that this atlas will be useful resource for atlas-based white matter anatomical studies.}, file = {attachment\:Oishi2008NeuroImage.pdf:attachment\:Oishi2008NeuroImage.pdf:PDF}, year = 2008 } @Article{Jianu2009, Author = {Jianu, Radu and Demiralp, CaÄŸatay and Laidlaw, David H}, Title = {{Exploring 3D DTI fiber tracts with linked 2D representations.}}, Journal = {IEEE transactions on visualization and computer graphics}, Volume = {15}, Number = {6}, Pages = {1449--56}, abstract = {We present a visual exploration paradigm that facilitates navigation through complex fiber tracts by combining traditional 3D model viewing with lower dimensional representations. To this end, we create standard streamtube models along with two two-dimensional representations, an embedding in the plane and a hierarchical clustering tree, for a given set of fiber tracts. We then link these three representations using both interaction and color obtained by embedding fiber tracts into a perceptually uniform color space. We describe an anecdotal evaluation with neuroscientists to assess the usefulness of our method in exploring anatomical and functional structures in the brain. Expert feedback indicates that, while a standalone clinical use of the proposed method would require anatomical landmarks in the lower dimensional representations, the approach would be particularly useful in accelerating tract bundle selection. Results also suggest that combining traditional 3D model viewing with lower dimensional representations can ease navigation through the complex fiber tract models, improving exploration of the connectivity in the brain.}, doi = {10.1109/TVCG.2009.141}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Jianu, Demiralp, Laidlaw - 2009 - Exploring 3D DTI fiber tracts with linked 2D representations..pdf:pdf}, issn = {1077-2626}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Cluster Analysis,Computer Graphics,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Models, Biological,Nerve Fibers}, pmid = {19834220}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19834220}, year = 2009 } @Article{Oliphant2003, Author = {Oliphant, Travis E}, Title = {{SciPy Tutorial}}, Number = {September}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Oliphant - 2003 - SciPy Tutorial.pdf:pdf}, year = 2003 } @InProceedings{Wedeen2000, Author = {Wedeen, VJ and Reese, TG and Tuch, DS and Weigel, MR and Dou, JG and Weiskoff, RM and Chessler, D}, Title = {{Mapping fiber orientation spectra in cerebral white matter with Fourier-transform diffusion MRI}}, BookTitle = {Proc. Intl. Sot. Mag. Reson. Med}, Volume = {8}, Pages = {82}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Wedeen et al. - 2000 - Mapping fiber orientation spectra in cerebral white matter with Fourier-transform diffusion MRI.pdf:pdf}, url = {http://cds.ismrm.org/ismrm-2000/PDF1/0082.pdf}, year = 2000 } @conference{o2006high, author = {O'Donnell, L. and Westin, CF}, booktitle = {International Society of Magnetic Resonance in Medicine (ISMRM)}, organization = {Citeseer}, title = {{A high-dimensional fiber tract atlas}}, year = 2006 } @Article{Sorensen1999, Author = {Sorensen, A. Gregory and Wu, Ona and Copen, William A. and Davis, Timothy L. and Gonzalez, R. Gilberto and Koroshetz, Walter J. and Reese, Timothy G. and Rosen, Bruce R. and Wedeen, Van J. and Weisskoff, Robert M.}, Title = {{Human Acute Cerebral Ischemia: Detection of Changes in Water Diffusion Anisotropy by Using MR Imaging}}, Journal = {Radiology}, Volume = {212}, Number = {3}, Pages = {785--792}, abstract = {PURPOSE: To (a) determine the optimal choice of a scalar metric of anisotropy and (b) determine by means of magnetic resonance imaging if changes in diffusion anisotropy occurred in acute human ischemic stroke. MATERIALS AND METHODS: The full diffusion tensor over the entire brain was measured. To optimize the choice of a scalar anisotropy metric, the performances of scalar indices in simulated models and in a healthy volunteer were analyzed. The anisotropy, trace apparent diffusion coefficient (ADC), and eigenvalues of the diffusion tensor in lesions and contralateral normal brain were compared in 50 patients with stroke. RESULTS: Changes in anisotropy in patients were quantified by using fractional anisotropy because it provided the best performance in terms of contrast-to-noise ratio as a function of signal-to-noise ratio in simulations. The anisotropy of ischemic white matter decreased (P = .01). Changes in anisotropy in ischemic gray matter were not significant (P = .63). The trace ADC decreased for ischemic gray matter and white matter (P < .001). The first and second eigenvalues decreased in both ischemic gray and ischemic white matter (P < .001). The third eigenvalue decreased in ischemic gray (P = .001) and white matter (P = .03). CONCLUSION: Gray matter is mildly anisotropic in normal and early ischemic states. However, early white matter ischemia is associated with not only changes in trace ADC values but also significant changes in the anisotropy, or shape, of the water self-diffusion tensor.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Sorensen et al. - 1999 - Human Acute Cerebral Ischemia Detection of Changes in Water Diffusion Anisotropy by Using MR Imaging.html:html}, month = sep, shorttitle = {Human Acute Cerebral Ischemia}, url = {http://radiology.rsnajnls.org/cgi/content/abstract/212/3/785}, year = 1999 } @Article{Ang2003, Author = {Ang, Y O N G T and Yengaard, J E N S R N and Akkenberg, B Ente P and Undersen, H A N S J \O rgen G G}, Title = {{STEREOLOGY OF NEURONAL CONNECTIONS ( MYELINATED FIBERS OF WHITE MATTER AND SYNAPSES OF NEOCORTEX ) IN}}, Journal = {Methods}, Pages = {171--182}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ang et al. - 2003 - STEREOLOGY OF NEURONAL CONNECTIONS ( MYELINATED FIBERS OF WHITE MATTER AND SYNAPSES OF NEOCORTEX ) IN.pdf:pdf}, keywords = {human brain,myelinated nerve fibers,neocortex,stereology,synapse,white matter}, year = 2003 } @Article{Tournier2008, Author = {Tournier, J-Donald and Yeh, Chun-Hung and Calamante, Fernando and Cho, Kuan-Hung and Connelly, Alan and Lin, Ching-Po}, Title = {{Resolving crossing fibres using constrained spherical deconvolution: validation using diffusion-weighted imaging phantom data.}}, Journal = {NeuroImage}, Volume = {42}, Number = {2}, Pages = {617--25}, abstract = {Diffusion-weighted imaging can potentially be used to infer the connectivity of the human brain in vivo using fibre-tracking techniques, and is therefore of great interest to neuroscientists and clinicians. A key requirement for fibre tracking is the accurate estimation of white matter fibre orientations within each imaging voxel. The diffusion tensor model, which is widely used for this purpose, has been shown to be inadequate in crossing fibre regions. A number of approaches have recently been proposed to address this issue, based on high angular resolution diffusion-weighted imaging (HARDI) data. In this study, an experimental model of crossing fibres, consisting of water-filled plastic capillaries, is used to thoroughly assess three such techniques: constrained spherical deconvolution (CSD), super-resolved CSD (super-CSD) and Q-ball imaging (QBI). HARDI data were acquired over a range of crossing angles and b-values, from which fibre orientations were computed using each technique. All techniques were capable of resolving the two fibre populations down to a crossing angle of 45 degrees , and down to 30 degrees for super-CSD. A bias was observed in the fibre orientations estimated by QBI for crossing angles other than 90 degrees, consistent with previous simulation results. Finally, for a 45 degrees crossing, the minimum b-value required to resolve the fibre orientations was 4000 s/mm(2) for QBI, 2000 s/mm(2) for CSD, and 1000 s/mm(2) for super-CSD. The quality of estimation of fibre orientations may profoundly affect fibre tracking attempts, and the results presented provide important additional information regarding performance characteristics of well-known methods.}, doi = {10.1016/j.neuroimage.2008.05.002}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tournier et al. - 2008 - Resolving crossing fibres using constrained spherical deconvolution validation using diffusion-weighted imaging phantom data..pdf:pdf}, issn = {1095-9572}, keywords = {Algorithms,Artificial Intelligence,Brain,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: instrumentat,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Phantoms, Imaging,Reproducibility of Results,Sensitivity and Specificity}, pmid = {18583153}, url = {http://www.ncbi.nlm.nih.gov/pubmed/18583153}, year = 2008 } @Article{Aganj2010, Author = {Aganj, Iman and Lenglet, Christophe and Jahanshad, Neda and Yacoub, Essa and Harel, Noam and Thompson, Paul M and Series, I M A Preprint and E, Church Street S}, Title = {{A HOUGH TRANSFORM GLOBAL PROBABILISTIC APPROACH A Hough Transform Global Probabilistic Approach to Multiple- Subject Diffusion MRI Tractography}}, Pages = {612--626}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Aganj et al. - 2010 - A HOUGH TRANSFORM GLOBAL PROBABILISTIC APPROACH A Hough Transform Global Probabilistic Approach to Multiple- Subject Diffusion MRI Tractography.pdf:pdf}, year = 2010 } @Article{Sherbondy2008JVision, Author = {Sherbondy, Anthony J. and Dougherty, Robert F. and Ben-Shachar, Michal and Napel, Sandy and Wandell, Brian A.}, Title = {{ConTrack: Finding the most likely pathways between brain regions using diffusion tractography}}, Journal = {J. Vis.}, Volume = {8}, Number = {9}, Pages = {1-16}, abstract = {Magnetic resonance diffusion-weighted imaging coupled with fiber tractography (DFT) is the only non-invasive method for measuring white matter pathways in the living human brain. DFT is often used to discover new pathways. But there are also many applications, particularly in visual neuroscience, in which we are confident that two brain regions are connected, and we wish to find the most likely pathway forming the connection. In several cases, current DFT algorithms fail to find these candidate pathways. To overcome this limitation, we have developed a probabilistic DFT algorithm (ConTrack) that identifies the most likely pathways between two regions. We introduce the algorithm in three parts: a sampler to generate a large set of potential pathways, a scoring algorithm that measures the likelihood of a pathway, and an inferential step to identify the most likely pathways connecting two regions. In a series of experiments using human data, we show that ConTrack estimates known pathways at positions that are consistent with those found using a high quality deterministic algorithm. Further we show that separating sampling and scoring enables ConTrack to identify valid pathways, known to exist, that are missed by other deterministic and probabilistic DFT algorithms.}, file = {attachment\:Sherbondy-2008-jov-8-9-15.pdf:attachment\:Sherbondy-2008-jov-8-9-15.pdf:PDF}, issn = {1534-7362}, keywords = {diffusion imaging, fiber tractography, MT+, corpus callosum, optic radiation}, month = {7}, url = {http://journalofvision.org/8/9/15/}, year = 2008 } @Article{jones1999osm, Author = {Jones, DK and Horsfield, MA and Simmons, A.}, Title = {{Optimal strategies for measuring diffusion in anisotropic systems by magnetic resonance imaging}}, Journal = {optimization}, Volume = {525}, year = 1999 } @Article{Dauguet2007, Author = {Dauguet, Julien and Peled, Sharon and Berezovskii, Vladimir and Delzescaux, Thierry and Warfield, Simon K and Born, Richard and Westin, Carl-Fredrik}, Title = {{Comparison of fiber tracts derived from in-vivo DTI tractography with 3D histological neural tract tracer reconstruction on a macaque brain.}}, Journal = {NeuroImage}, Volume = {37}, Number = {2}, Pages = {530--8}, abstract = {Since the introduction of diffusion weighted imaging (DWI) as a method for examining neural connectivity, its accuracy has not been formally evaluated. In this study, we directly compared connections that were visualized using injected neural tract tracers (WGA-HRP) with those obtained using in-vivo diffusion tensor imaging (DTI) tractography. First, we injected the tracer at multiple sites in the brain of a macaque monkey; second, we reconstructed the histological sections of the labeled fiber tracts in 3D; third, we segmented and registered the fibers (somatosensory and motor tracts) with the anatomical in-vivo MRI from the same animal; and last, we conducted fiber tracing along the same pathways on the DTI data using a classical diffusion tracing technique with the injection sites as seeds. To evaluate the performance of DTI fiber tracing, we compared the fibers derived from the DTI tractography with those segmented from the histology. We also studied the influence of the parameters controlling the tractography by comparing Dice superimposition coefficients between histology and DTI segmentations. While there was generally good visual agreement between the two methods, our quantitative comparisons reveal certain limitations of DTI tractography, particularly for regions at remote locations from seeds. We have thus demonstrated the importance of appropriate settings for realistic tractography results.}, doi = {10.1016/j.neuroimage.2007.04.067}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Dauguet et al. - 2007 - Comparison of fiber tracts derived from in-vivo DTI tractography with 3D histological neural tract tracer reconstruction on a macaque brain..pdf:pdf}, issn = {1053-8119}, keywords = {Animals,Anisotropy,Brain,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Image Processing, Computer-Assisted,Imaging, Three-Dimensional,Immunohistochemistry,Macaca,Nerve Fibers,Nerve Fibers: ultrastructure,Neural Pathways,Neural Pathways: cytology}, pmid = {17604650}, url = {http://www.ncbi.nlm.nih.gov/pubmed/17604650}, year = 2007 } @InProceedings{Fillard2006ISBI, Author = {Fillard, Pierre and Arsigny, Vincent and Pennec, Xavier and Ayache, Nicholas}, Title = {The Tensor Distribution Function}, BookTitle = {Third IEEE International Symposium on Biomedical Imaging: From Nano to Macro}, Pages = {(abstract)}, Publisher = {IEEE}, abstract = {Diffusion tensor MRI is an imaging modality that is gaining importance in clinical applications. However, in a clinical environment, data have to be acquired rapidly, often at the detriment of the image quality. We propose a new variational framework that specifically targets low quality DT-MRI. The Rician nature of the noise on the images leads us to a maximum likelihood strategy to estimate the tensor field. To further reduce the noise, we optimally exploit the spatial correlation by adding to the estimation an anisotropic regularization term. This criterion is easily optimized thanks to the use of the recently introduced Log-Euclidean metrics. Results on real clinical data show promising improvements of fiber tracking in the brain and the spinal cord.}, year = 2006 } @Article{ZHK+06, Author = {Zhuang, J. and Hrabe, J. and Kangarlu, A. and Xu, D. and Bansal, R. and Branch, C. A. and Peterson, B. S.}, Title = {Correction of eddy-current distortions in diffusion tensor images using the known directions and strengths of diffusion gradients.}, Journal = {J Magn Reson Imaging}, Volume = {24}, Number = {5}, Pages = {1188-93}, abstract = {PURPOSE: To correct eddy-current artifacts in diffusion tensor (DT) images without the need to obtain auxiliary scans for the sole purpose of correction. MATERIALS AND METHODS: DT images are susceptible to distortions caused by eddy currents induced by large diffusion gradients. We propose a new postacquisition correction algorithm that does not require any auxiliary reference scans. It also avoids the problematic procedure of cross-correlating images with significantly different contrasts. A linear model is used to describe the dependence of distortion parameters (translation, scaling, and shear) on the diffusion gradients. The model is solved numerically to provide an individual correction for every diffusion-weighted (DW) image. RESULTS: The assumptions of the linear model were successfully verified in a series of experiments on a silicon oil phantom. The correction obtained for this phantom was compared with correction obtained by a previously published method. The algorithm was then shown to markedly reduce eddy-current distortions in DT images from human subjects. CONCLUSION: The proposed algorithm can accurately correct eddy-current artifacts in DT images. Its principal advantages are that only images with comparable signals and contrasts are cross-correlated, and no additional scans are required.}, authoraddress = {Magnetic Resonance Imaging Unit, Department of Psychiatry, Columbia College of Physicians and Surgeons, New York, New York, USA. jc.zhuang@gmail.com}, keywords = {*Algorithms ; Brain/*anatomy \& histology ; Diffusion Magnetic Resonance Imaging/*methods ; Echo-Planar Imaging/instrumentation/*methods ; Humans ; Image Enhancement/*methods ; Image Interpretation, Computer-Assisted/*methods ; Phantoms, Imaging ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-aid = {10.1002/jmri.20727 [doi]}, medline-ci = {Copyright (c) 2006 Wiley-Liss, Inc.}, medline-crdt = {2006/10/07 09:00}, medline-da = {20061030}, medline-dcom = {20070130}, medline-edat = {2006/10/07 09:00}, medline-fau = {Zhuang, Jiancheng ; Hrabe, Jan ; Kangarlu, Alayar ; Xu, Dongrong ; Bansal, Ravi ; Branch, Craig A ; Peterson, Bradley S}, medline-gr = {DA017820/DA/NIDA NIH HHS/United States ; K02 MH074677-01/MH/NIMH NIH HHS/United States ; MH068318/MH/NIMH NIH HHS/United States ; MH59139/MH/NIMH NIH HHS/United States ; MH74677/MH/NIMH NIH HHS/United States ; R01 DA017820-03/DA/NIDA NIH HHS/United States ; R01 MH068318-03/MH/NIMH NIH HHS/United States}, medline-is = {1053-1807 (Print)}, medline-jid = {9105850}, medline-jt = {Journal of magnetic resonance imaging : JMRI}, medline-lr = {20081120}, medline-mhda = {2007/01/31 09:00}, medline-mid = {NIHMS44414}, medline-oid = {NLM: NIHMS44414 ; NLM: PMC2364728}, medline-own = {NLM}, medline-pl = {United States}, medline-pmc = {PMC2364728}, medline-pmid = {17024663}, medline-pst = {ppublish}, medline-pt = {Evaluation Studies ; Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {J Magn Reson Imaging. 2006 Nov;24(5):1188-93.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=17024663}, year = 2006 } @Article{Rothwell, Author = {Rothwell, John}, Title = {{HBM2010 Program at a Glance *}}, Journal = {Program}, Pages = {2010--2010}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Rothwell - Unknown - HBM2010 Program at a Glance.pdf:pdf} } @Article{Mori2008NeuroImage, Author = {Mori, Susumu and Oishi, Kenichi and Jiang, Hangyi and Jiang, Li and Li, Xin and Akhter, Kazi and Hua, Kegang and Faria, Andreia V. and Mahmood, Asif and Woods, Roger and Toga, Arthur W. and Pike, G. Bruce and Neto, Pedro Rosa and Evans, Alan and Zhang, Jiangyang and Huang, Hao and Miller, Michael I. and {van Zijl}, Peter and Mazziotta, John}, Title = {Stereotaxic white matter atlas based on diffusion tensor imaging in an ICBM template}, Journal = {NeuroImage}, Volume = {40}, Number = {2}, Pages = {570-582}, abstract = {Brain registration to a stereotaxic atlas is an effective way to report anatomic locations of interest and to perform anatomic quantification. However, existing stereotaxic atlases lack comprehensive coordinate information about white matter structures. In this paper, white matter-specific atlases in stereotaxic coordinates are introduced. As a reference template, the widely used ICBM-152 was used. The atlas contains fiber orientation maps and hand-segmented white matter parcellation maps based on diffusion tensor imaging (DTI). Registration accuracy by linear and non-linear transformation was measured, and automated template-based white matter parcellation was tested. The results showed a high correlation between the manual ROI-based and the automated approaches for normal adult populations. The atlases are freely available and believed to be a useful resource as a target template and for automated parcellation methods. }, file = {attachment\:Mori2008NeuroImage.pdf:attachment\:Mori2008NeuroImage.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4RH37X2-1/2/24add3aed52eb682f7064260c33384e4}, year = 2008 } @conference{weinstein1999tad, author = {Weinstein, D. and Kindlmann, G. and Lundberg, E.}, booktitle = {Proceedings of the conference on Visualization'99: celebrating ten years}, organization = {IEEE Computer Society Press Los Alamitos, CA, USA}, pages = {249--253}, title = {{Tensorlines: Advection-diffusion based propagation through diffusion tensor fields}}, year = 1999 } @Misc{tenenbaum2000ggf, Author = {Tenenbaum, J.B. and Silva, V. and Langford, J.C.}, Title = {{A global geometric framework for nonlinear dimensionality reduction}}, journal = {Science}, number = {5500}, pages = {2319--2323}, volume = {290}, year = 2000 } @Article{Loper1990, Author = {Loper, David and Annua, Benton E R Spin-up}, Title = {{Bingham statistics}}, Journal = {Statistics}, Volume = {2}, Number = {c}, Pages = {45--47}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Loper, Annua - 1990 - Bingham statistics.pdf:pdf}, year = 1990 } @Article{chamberlain2008gma, Author = {Chamberlain, S.R. and Menzies, L.A. and Fineberg, N.A. and del Campo, N. and Suckling, J. and Craig, K. and M{\"u}ller, U. and Robbins, T.W. and Bullmore, E.T. and Sahakian, B.J.}, Title = {{Grey matter abnormalities in trichotillomania: morphometric magnetic resonance imaging study}}, Journal = {The British Journal of Psychiatry}, Volume = {193}, Number = {3}, Pages = {216--221}, publisher = {RCP}, year = 2008 } @Article{Batchelor2006, Author = {Batchelor, P G and Calamante, F and Tournier, J D and Atkinson, D and Hill, D L and Connelly, A}, Title = {{Quantification of the shape of fiber tracts}}, Journal = {Magn. Reson. Med}, Volume = {55}, Pages = {894--903}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Batchelor et al. - 2006 - Quantification of the shape of fiber tracts.pdf:pdf}, year = 2006 } @Article{Qazi2009, Author = {Qazi, Arish a and Radmanesh, Alireza and O'Donnell, Lauren and Kindlmann, Gordon and Peled, Sharon and Whalen, Stephen and Westin, Carl-Fredrik and Golby, Alexandra J}, Title = {{Resolving crossings in the corticospinal tract by two-tensor streamline tractography: Method and clinical assessment using fMRI.}}, Journal = {NeuroImage}, Volume = {47 Suppl 2}, Pages = {T98--106}, abstract = {An inherent drawback of the traditional diffusion tensor model is its limited ability to provide detailed information about multidirectional fiber architecture within a voxel. This leads to erroneous fiber tractography results in locations where fiber bundles cross each other. This may lead to the inability to visualize clinically important tracts such as the lateral projections of the corticospinal tract. In this report, we present a deterministic two-tensor eXtended Streamline Tractography (XST) technique, which successfully traces through regions of crossing fibers. We evaluated the method on simulated and in vivo human brain data, comparing the results with the traditional single-tensor and with a probabilistic tractography technique. By tracing the corticospinal tract and correlating with fMRI-determined motor cortex in both healthy subjects and patients with brain tumors, we demonstrate that two-tensor deterministic streamline tractography can accurately identify fiber bundles consistent with anatomy and previously not detected by conventional single-tensor tractography. When compared to the dense connectivity maps generated by probabilistic tractography, the method is computationally efficient and generates discrete geometric pathways that are simple to visualize and clinically useful. Detection of crossing white matter pathways can improve neurosurgical visualization of functionally relevant white matter areas.}, doi = {10.1016/j.neuroimage.2008.06.034}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Qazi et al. - 2009 - Resolving crossings in the corticospinal tract by two-tensor streamline tractography Method and clinical assessment using fMRI..pdf:pdf}, issn = {1095-9572}, keywords = {Algorithms,Brain Neoplasms,Brain Neoplasms: physiopathology,Computer Simulation,Female,Humans,Magnetic Resonance Imaging,Magnetic Resonance Imaging: methods,Male,Middle Aged,Models, Theoretical,Motor Cortex,Motor Cortex: pathology,Motor Cortex: physiopathology,Probability,Pyramidal Tracts,Pyramidal Tracts: pathology}, pmid = {18657622}, url = {http://www.ncbi.nlm.nih.gov/pubmed/18657622}, year = 2009 } @Article{Neji2008, Author = {Neji, R and Fleury, G and Deux, J-f and Rahmouni, A and Bassez, G and Vignaud, A and Paragios, N and Mas, Laboratoire and Paris, Ecole Centrale and Galen, Equipe and Saclay, Inria}, Title = {{SUPPORT VECTOR DRIVEN MARKOV RANDOM FIELDS TOWARDS DTI SEGMENTATION OF THE HUMAN SKELETAL MUSCLE b b b b}}, Pages = {923--926}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Neji et al. - 2008 - SUPPORT VECTOR DRIVEN MARKOV RANDOM FIELDS TOWARDS DTI SEGMENTATION OF THE HUMAN SKELETAL MUSCLE b b b b.pdf:pdf}, year = 2008 } @Article{Okada2006, Author = {Okada, Tsutomu}, Title = {{Diffusion-Tensor Fiber Purpose : Methods : Results : Conclusion :}}, Volume = {238}, Number = {2}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Okada - 2006 - Diffusion-Tensor Fiber Purpose Methods Results Conclusion.pdf:pdf}, year = 2006 } @Article{moriBook, Author = {Mori, S. and Wakana, S. and Nagae-Poetscher, LM and Van Zijl, PCM}, Title = {{MRI atlas of human white matter}}, Journal = {American Journal of Neuroradiology}, publisher = {Am Soc Neuroradiology} } @Article{Basser1994BiophysicalJ, Author = {Basser, Peter J. and Mattiello, James and LeBihan, Denis}, Title = {{MR} Diffusion Tensor Spectroscopy and Imaging}, Journal = {Biophysical Journal}, Volume = {66}, Pages = {259-267}, abstract = {This paper describes a new {NMR} imaging modality-{MR} diffusion tensor imaging. It consists of estimating an effective diffusion tensor, $D_{\textrm{eff}}$, within a voxel, and then displaying useful quantities derived from it. We show how the phenomenon of anisotropic diffusion of water (or metabolites) in anisotropic tissues, measured noninvasively by these {NMR} methods, is exploited to determine fiber tract orientation and mean particle displacements. Once $D_{\textrm{eff}}$ is estimated from a series of {NMR} pulsed-gradient, spin-echo experiments, a tissue's three orthotropic axes can be determined. They coincide with the eigen- vectors of $D_{\textrm{eff}}$, while the effective diffusivities along these orthotropic directions are the eigenvalues of $D_{\textrm{eff}}$. Diffusion ellipsoids, constructed in each voxel from $D_{\textrm{eff}}$, depict both these orthotropic axes and the mean diffusion distances in these directions. Moreover, the three scalar invariants of $D_{\textrm{eff}}$, which are independent of the tissue's orientation in the laboratory frame of reference, reveal useful information about molecular mobility reflective of local microstructure and anatomy. Inherently, tensors (like $D_{\textrm{eff}}$) describing transport processes in anisotropic media contain new information within a macroscopic voxel that scalars (such as the apparent diffusivity, proton density, $T_1$, and $T_2$) do not.}, year = 1994 } @Article{Avants2010, Author = {Avants, Brian B and Tustison, Nick and Song, Gang}, Title = {{Advanced Normalization Tools ( ANTS )}}, Journal = {Computing}, Pages = {1--33}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Avants, Tustison, Song - 2010 - Advanced Normalization Tools ( ANTS ).pdf:pdf}, year = 2010 } @Article{Beaulieu2002NMRBiomed, Author = {Christian Beaulieu}, Title = {The basis of anisotropic water diffusion in the nervous system - a technical review}, Journal = {NMR in Biomedicine}, Volume = {15}, Number = {7-8}, Pages = {435-455}, doi = {10.1002/nbm.782}, owner = {ian}, timestamp = {2009.04.27}, url = {http://dx.doi.org/10.1002/nbm.782}, year = 2002 } @Book{Callaghan1991OUP, Author = {Callaghan, Paul T.}, Title = {Principles of Nuclear Magnetic Resonance Microscopy}, Publisher = {Oxford University Press}, owner = {ian}, timestamp = {2009.03.12}, url = {http://books.google.co.uk/books?id=yjrjT_W5hygC}, year = 1991 } @Article{ODonnell_MICCAI07, Author = {O'Donnell, L. J. and Westin, C. F. and Golby, A. J.}, Title = {Tract-based morphometry.}, Journal = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv}, Volume = {10}, Number = {Pt 2}, Pages = {161-8}, abstract = {Multisubject statistical analyses of diffusion tensor images in regions of specific white matter tracts have commonly measured only the mean value of a scalar invariant such as the fractional anisotropy (FA), ignoring the spatial variation of FA along the length of fiber tracts. We propose to instead perform tract-based morphometry (TBM), or the statistical analysis of diffusion MRI data in an anatomical tract-based coordinate system. We present a method for automatic generation of white matter tract arc length parameterizations, based on learning a fiber bundle model from tractography from multiple subjects. Our tract-based coordinate system enables TBM for the detection of white matter differences in groups of subjects. We present example TBM results from a study of interhemispheric differences in FA.}, authoraddress = {Golby Surgical Brain Mapping Laboratory, Department of Neurosurgery, Brigham and Women's Hospital, Harvard Medical School, Boston MA, USA. odonnell@bwh.harvard.edu}, keywords = {Algorithms ; *Artificial Intelligence ; Brain/*cytology ; Cluster Analysis ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/*methods ; Nerve Fibers, Myelinated/*ultrastructure ; Neural Pathways/cytology ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2007/11/30 09:00}, medline-da = {20071129}, medline-dcom = {20080103}, medline-edat = {2007/11/30 09:00}, medline-fau = {O'Donnell, Lauren J ; Westin, Carl-Fredrik ; Golby, Alexandra J}, medline-gr = {P41 RR15241-01A1/RR/NCRR NIH HHS/United States ; P41RR13218/RR/NCRR NIH HHS/United States ; R01 AG20012-01/AG/NIA NIH HHS/United States ; R01MH074794/MH/NIMH NIH HHS/United States ; U41RR019703/RR/NCRR NIH HHS/United States ; U54EB005149/EB/NIBIB NIH HHS/United States}, medline-jid = {101249582}, medline-jt = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, medline-mhda = {2008/01/04 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {18044565}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural}, medline-sb = {IM}, medline-so = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv. 2007;10(Pt 2):161-8.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18044565}, year = 2007 } @Article{Intelligence2009, Author = {Intelligence, Comp}, Title = {{Spatial Filtering and Single-Trial Classification of EEG during Vowel Speech Imagery}}, Journal = {Science And Technology}, Volume = {5}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Intelligence - 2009 - Spatial Filtering and Single-Trial Classification of EEG during Vowel Speech Imagery.pdf:pdf}, keywords = {4259 nagatsuta,bci,csp,eeg,hama,imagery,japan 226-8503,mailing address,midori-ku,r2-15,spatial filter,speech,vowel,yoko-}, year = 2009 } @Article{Becher1999, Author = {Becher, B and Giacomini, P S and Pelletier, D and McCrea, E and Prat, a and Antel, J P}, Title = {{Interferon-gamma secretion by peripheral blood T-cell subsets in multiple sclerosis: correlation with disease phase and interferon-beta therapy.}}, Journal = {Annals of neurology}, Volume = {45}, Number = {2}, Pages = {247--50}, abstract = {Interferon-gamma (IFN-gamma) is implicated as a participant in the immune effector and regulatory mechanisms considered to mediate the pathogenesis of multiple sclerosis (MS). We have used an intracellular cytokine staining technique to demonstrate that the proportion of ex vivo peripheral blood CD4 and CD8 T-cell subsets expressing IFN-gamma is increased in secondary progressing (SP) MS patients, whereas the values in untreated relapsing-remitting (RR) MS patients are reduced compared with those of controls. Patients treated with interferon-beta (IFN-beta) have an even more significant reduction in the percentage of IFN-gamma-secreting cells. The finding that the number of IFN-gamma-expressing CD8 cells is increased in SPMS patients, a group with reduced functional suppressor activity, and is most significantly reduced by IFN-beta therapy, which increases suppressor activity, indicates that IFN-gamma secretion by CD8 T cells and functional suppressor defects attributed to this cell subset in MS can be dissociated.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Becher et al. - 1999 - Interferon-gamma secretion by peripheral blood T-cell subsets in multiple sclerosis correlation with disease phase and interferon-beta therapy..pdf:pdf}, issn = {0364-5134}, keywords = {Adult,Female,Humans,Interferon-beta,Interferon-beta: therapeutic use,Interferon-gamma,Interferon-gamma: secretion,Male,Middle Aged,Multiple Sclerosis,Multiple Sclerosis: immunology,Multiple Sclerosis: therapy,T-Lymphocyte Subsets,T-Lymphocyte Subsets: immunology,T-Lymphocytes,T-Lymphocytes: immunology}, month = feb, pmid = {9989628}, url = {http://www.ncbi.nlm.nih.gov/pubmed/9989628}, year = 1999 } @Article{Corouge2004, Author = {Corouge, Isabelle and Gouttard, Sylvain and Gerig, Guido}, Title = {{Accepted for oral presentation A Statistical Shape Model of Individual Fiber Tracts Extracted from Diffusion Tensor MRI}}, Journal = {Analysis}, Volume = {3217}, Number = {Part II}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Corouge, Gouttard, Gerig - 2004 - Accepted for oral presentation A Statistical Shape Model of Individual Fiber Tracts Extracted from Diffusion Tensor MRI.pdf:pdf}, keywords = {diffusion tensor imaging,statistical shape modelling}, year = 2004 } @Article{Mangin2002, Author = {Mangin, J-F and Poupon, C and Cointepas, Y and Rivi\`{e}re, D and Papadopoulos-Orfanos, D and Clark, C a and R\'{e}gis, J and {Le Bihan}, D}, Title = {{A framework based on spin glass models for the inference of anatomical connectivity from diffusion-weighted MR data - a technical review.}}, Journal = {NMR in biomedicine}, Volume = {15}, Number = {7-8}, Pages = {481--92}, abstract = {A family of methods aiming at the reconstruction of a putative fascicle map from any diffusion-weighted dataset is proposed. This fascicle map is defined as a trade-off between local information on voxel microstructure provided by diffusion data and a priori information on the low curvature of plausible fascicles. The optimal fascicle map is the minimum energy configuration of a simulated spin glass in which each spin represents a fascicle piece. This spin glass is embedded into a simulated magnetic external field that tends to align the spins along the more probable fiber orientations according to diffusion models. A model of spin interactions related to the curvature of the underlying fascicles introduces a low bending potential constraint. Hence, the optimal configuration is a trade-off between these two kind of forces acting on the spins. Experimental results are presented for the simplest spin glass model made up of compass needles located in the center of each voxel of a tensor based acquisition.}, doi = {10.1002/nbm.780}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mangin et al. - 2002 - A framework based on spin glass models for the inference of anatomical connectivity from diffusion-weighted MR data - a technical review..pdf:pdf}, issn = {0952-3480}, keywords = {Algorithms,Astrocytes,Astrocytes: cytology,Brain,Brain Mapping,Brain Mapping: methods,Brain: cytology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Methods,Models, Biological,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: pathology,Nerve Net,Nerve Net: cytology,Neural Pathways,Neural Pathways: cytology,Pattern Recognition, Automated,Quality Control,Spin Labels}, pmid = {12489097}, url = {http://www.ncbi.nlm.nih.gov/pubmed/12489097}, year = 2002 } @Article{Dryden2005, Author = {Dryden, Ian L.}, Title = {{Statistical analysis on high-dimensional spheres and shape spaces}}, Journal = {The Annals of Statistics}, Volume = {33}, Number = {4}, Pages = {1643--1665}, arxivid = {arXiv:math/0508279v1}, doi = {10.1214/009053605000000264}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Dryden - 2005 - Statistical analysis on high-dimensional spheres and shape spaces.pdf:pdf}, issn = {0090-5364}, keywords = {and phrases,bingham distribution,complex bingham,complex watson,di-}, month = aug, url = {http://projecteuclid.org/Dienst/getRecord?id=euclid.aos/1123250225/}, year = 2005 } @Article{Ziyan, Author = {Ziyan, U and Sabuncu, M R and O’donnell, L J and C}, Title = {{-F. Westin. Nonlinear registration of diffusion mr images based on fiber bundles}}, Journal = {In Medical Image Computing and Computer-Assisted Intervention (MICCAI ’}, Volume = {07}, Number = {volume4791}, Pages = {351--358}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ziyan et al. - Unknown - -F. Westin. Nonlinear registration of diffusion mr images based on fiber bundles.pdf:pdf} } @Article{Orasis2007, Author = {Orasis, Projet}, Title = {{Optimization of Discrete Markov Random Fields via Dual Decomposition}}, Journal = {Computer}, Number = {April}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Orasis - 2007 - Optimization of Discrete Markov Random Fields via Dual Decomposition.pdf:pdf}, year = 2007 } @Article{Delivery, Author = {Delivery, Price and Cost, Total and Brimpari, Minodora}, Title = {{PC World UK Computer Superstore - Buy cheap c ... PC World UK Computer Superstore - Buy cheap c ...}}, Journal = {Computer}, Volume = {5610000}, Pages = {1--9}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Delivery, Cost, Brimpari - Unknown - PC World UK Computer Superstore - Buy cheap c ... PC World UK Computer Superstore - Buy cheap c ....pdf:pdf} } @Article{Engel, Author = {Engel, Klaus and Hadwiger, Markus and Kniss, Joe M and Lefohn, Aaron E and Weiskopf, Daniel}, Title = {{Real-Time Volume Graphics Real-Time Volume Graphics}}, Journal = {Notes}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Engel et al. - Unknown - Real-Time Volume Graphics Real-Time Volume Graphics.pdf:pdf} } @Article{Neji2009, Author = {Neji, Radhou\`{e}ne and Ahmed, Jean-fran\c{c}ois Deux and Nikos, Besbes and Georg, Komodakis and Mezri, Langs and Alain, Maatouk and Guillaume, Rahmouni and Gilles, Bassez and Paragios, Nikos}, Title = {{Manifold-driven Grouping of Skeletal Muscle Fibers}}, Journal = {Science}, Number = {February}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Neji et al. - 2009 - Manifold-driven Grouping of Skeletal Muscle Fibers.pdf:pdf}, year = 2009 } @Article{Ib2001, Author = {Ib, Luis}, Title = {{TUTORIAL on QUATERNIONS Part I}}, Journal = {Seminar}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ib - 2001 - TUTORIAL on QUATERNIONS Part I.pdf:pdf}, year = 2001 } @Article{Wainwright2005, Author = {Wainwright, Martin J and Jordan, Michael I}, Title = {{A Variational Principle for Graphical Models}}, Journal = {Electrical Engineering}, Number = {March}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Wainwright, Jordan - 2005 - A Variational Principle for Graphical Models.pdf:pdf}, year = 2005 } @Article{Hosey2005MagResMed, Author = {Hosey, T. and Williams, G. and Ansorge, R.}, Title = {{Inference of multiple fiber orientations in high angular resolution diffusion imaging}}, Journal = {Magnetic Resonance in Medicine}, Volume = {54}, Number = {6}, Pages = {1480-1489}, abstract = {A method is presented that is capable of determining more than one fiber orientation within a single voxel in high angular resolution diffusion imaging (HARDI) data sets. This method is an extension of the Markov chain method recently introduced to diffusion tensor imaging (DTI) analysis, allowing the probability density function of up to 2 intra-voxel fiber orientations to be inferred. The multiple fiber architecture within a voxel is then assessed by calculating the relative probabilities of a 1 and 2 fiber model. It is demonstrated that for realistic signal to noise ratios, it is possible to accurately characterize the directions of 2 intersecting fibers using a 2 fiber model. The shortcomings of under-fitting a 2 fiber model, or over-fitting a 1 fiber model, are explored. This new algorithm enhances the tools available for fiber tracking.}, file = {attachment\:Hosey2005MagResMed.pdf:attachment\:Hosey2005MagResMed.pdf:PDF}, year = 2005 } @Article{Yen2009a, Author = {Yen, Luh and Fouss, Francois and Decaestecker, Christine and Francq, Pascal and Saerens, Marco}, Title = {{Graph nodes clustering with the sigmoid commute-time kernel: A comparative study}}, Journal = {Data \& Knowledge Engineering}, Volume = {68}, Number = {3}, Pages = {338--361}, doi = {10.1016/j.datak.2008.10.006}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Yen et al. - 2009 - Graph nodes clustering with the sigmoid commute-time kernel A comparative study(2).pdf:pdf}, issn = {0169023X}, publisher = {Elsevier B.V.}, url = {http://linkinghub.elsevier.com/retrieve/pii/S0169023X0800147X}, year = 2009 } @Article{Ziyan2007, Author = {Ziyan, Ulas and Sabuncu, Mert R. and Grimson, W. Eric. L. and Westin, Carl-Fredrik}, Title = {{A Robust Algorithm for Fiber-Bundle Atlas Construction}}, Journal = {2007 IEEE 11th International Conference on Computer Vision}, Pages = {1--8}, doi = {10.1109/ICCV.2007.4409143}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ziyan et al. - 2007 - A Robust Algorithm for Fiber-Bundle Atlas Construction.pdf:pdf}, isbn = {978-1-4244-1630-1}, issn = {1550-5499}, month = oct, publisher = {Ieee}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=4409143}, year = 2007 } @Article{Baldi2009, Author = {Baldi, P. and Kerkyacharian, G. and Marinucci, D. and Picard, D.}, Title = {{Asymptotics for spherical needlets}}, Journal = {The Annals of Statistics}, Volume = {37}, Number = {3}, Pages = {1150--1171}, arxivid = {arXiv:math/0606599v2}, doi = {10.1214/08-AOS601}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Baldi et al. - 2009 - Asymptotics for spherical needlets.pdf:pdf}, issn = {0090-5364}, keywords = {High-frequency asymptotics, spherical needlets, ra}, url = {http://projecteuclid.org/euclid.aos/1239369018}, year = 2009 } @Article{MoriNeuron2006, Author = {Mori, Susumu and Zhang, Jiangyang}, Title = {Principles of Diffusion Tensor Imaging and Its Applications to Basic Neuroscience Research}, Journal = {Neuron}, Volume = {51}, Pages = {527-39}, abstract = {The brain contains more than 100 billion neurons that communicate with each other via axons for the formation of complex neural networks. The structural mapping of such networks during health and disease states is essential for understanding brain function. However, our understanding of brain structural connectivity is surprisingly limited, due in part to the lack of noninvasive methodologies to study axonal anatomy. Diffusion tensor imaging (DTI) is a recently developed MRI technique that can measure macroscopic axonal organization in nervous system tissues. In this article, the principles of DTI methodologies are explained, and several applications introduced, including visualization of axonal tracts in myelin and axonal injuries as well as human brain and mouse embryonic development. The strengths and limitations of DTI and key areas for future research and development are also discussed.}, file = {attachment\:Mori_Neuron_2006.pdf:attachment\:Mori_Neuron_2006.pdf:PDF}, year = 2006 } @Article{Heid2000ISMRM, Author = {Heid, O.}, Title = {Eddy current-nulled diffusion weighting.}, Journal = {In: Proceedings of the 8th Annual Meeting of ISMRM, Denver}, Pages = {799}, owner = {ian}, timestamp = {2009.03.12}, year = 2000 } @Article{merboldt1992diffusion, Author = {Merboldt, K.D. and H{\\"a}nicke, W. and Bruhn, H. and Gyngell, M.L. and Frahm, J.}, Title = {{Diffusion imaging of the human brain in vivo using high-speed STEAM MRI}}, Journal = {Magnetic Resonance in Medicine}, Volume = {23}, Number = {1}, Pages = {179--192}, issn = {1522-2594}, publisher = {John Wiley \& Sons}, year = 1992 } @Article{Descoteaux2009a, Author = {Descoteaux, Maxime and Deriche, Rachid and Kn\"{o}sche, Thomas R and Anwander, Alfred}, Title = {{Deterministic and probabilistic tractography based on complex fibre orientation distributions.}}, Journal = {IEEE transactions on medical imaging}, Volume = {28}, Number = {2}, Pages = {269--86}, abstract = {We propose an integral concept for tractography to describe crossing and splitting fibre bundles based on the fibre orientation distribution function (ODF) estimated from high angular resolution diffusion imaging (HARDI). We show that in order to perform accurate probabilistic tractography, one needs to use a fibre ODF estimation and not the diffusion ODF. We use a new fibre ODF estimation obtained from a sharpening deconvolution transform (SDT) of the diffusion ODF reconstructed from q-ball imaging (QBI). This SDT provides new insight into the relationship between the HARDI signal, the diffusion ODF, and the fibre ODF. We demonstrate that the SDT agrees with classical spherical deconvolution and improves the angular resolution of QBI. Another important contribution of this paper is the development of new deterministic and new probabilistic tractography algorithms using the full multidirectional information obtained through use of the fibre ODF. An extensive comparison study is performed on human brain datasets comparing our new deterministic and probabilistic tracking algorithms in complex fibre crossing regions. Finally, as an application of our new probabilistic tracking, we quantify the reconstruction of transcallosal fibres intersecting with the corona radiata and the superior longitudinal fasciculus in a group of eight subjects. Most current diffusion tensor imaging (DTI)-based methods neglect these fibres, which might lead to incorrect interpretations of brain functions.}, doi = {10.1109/TMI.2008.2004424}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Descoteaux et al. - 2009 - Deterministic and probabilistic tractography based on complex fibre orientation distributions..pdf:pdf}, issn = {1558-0062}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Echo-Planar Imaging,Echo-Planar Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Models, Neurological,Models, Statistical,Nerve Fibers,Nerve Fibers: ultrastructure,Normal Distribution,Reproducibility of Results,Sensitivity and Specificity}, month = feb, pmid = {19188114}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19188114}, year = 2009 } @InProceedings{Deriche2007ISBI, Author = {DERICHE, r. AND DESCOTEAUX, M.}, Title = {Splitting Tracking Through Crossing Fibers: Multidirectional Q-Ball Tracking-}, BookTitle = {4th IEEE International Symposium on Biomedical Imaging: From Nano to Macro (ISBI’07)}, Pages = {756–759}, abstract = {We present a new tracking algorithm based on the full multidirectional information of the diffusion orientation distribution function (ODF) estimated from Q-Ball Imaging (QBI). From the ODF, we extract all available maxima and then extend streamline (STR) tracking to allow for splitting in multiple directions (SPLIT-STR). Our new algorithm SPLIT-STR overcomes important limitations of classical diffusion tensor streamline tracking in regions of low anisotropy and regions of fiber crossings. Not only can the tracking propagate through fiber crossings but it can also deal with fibers fanning and branching. SPLIT-STR algorithm is efficient and validated on synthetic data, on a biological phantom and compared against probabilistic tensor tracking on a human brain dataset with known crossing fibers}, owner = {ian}, timestamp = {2009.03.10}, year = 2007 } @Article{Garyfallidis2009a, Author = {Garyfallidis, Eleftherios and Brett, Matthew and Nimmo-smith, Ian}, Title = {{Fast Dimensionality Reduction for Brain Tractography Clustering}}, Journal = {Sciences-New York}, Pages = {7--10}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Garyfallidis, Brett, Nimmo-smith - 2009 - Fast Dimensionality Reduction for Brain Tractography Clustering.pdf:pdf}, year = 2009 } @Article{JohansenBerg2004ProcNatAcadSci, Author = {Johansen-Berg, H and Behrens, T E and Robson, M D and Drobnjak, I and Rushworth, M F and Brady, JM and Smith, S M and Higham, D J and Matthews, P M}, Title = {Changes in connectivity profiles define functionally distinct regions in human medial frontal cortex.}, Journal = {Proc. Natl. Acad. Sci. USA}, Volume = {101}, Number = {36}, Pages = {13335-13340}, abstract = {A fundamental issue in neuroscience is the relation between structure and function. However, gross landmarks do not correspond well to microstructural borders and cytoarchitecture cannot be visualized in a living brain used for functional studies. Here, we used diffusion-weighted and functional MRI to test structure-function relations directly. Distinct neocortical regions were defined as volumes having similar connectivity profiles and borders identified where connectivity changed. Without using prior information, we found an abrupt profile change where the border between supplementary motor area (SMA) and pre-SMA is expected. Consistent with this anatomical assignment, putative SMA and pre-SMA connected to motor and prefrontal regions, respectively. Excellent spatial correlations were found between volumes defined by using connectivity alone and volumes activated during tasks designed to involve SMA or pre-SMA selectively. This finding demonstrates a strong relationship between structure and function in medial frontal cortex and offers a strategy for testing such correspondences elsewhere in the brain.}, file = {attachment\:JohansenBerg2004ProcNatAcadSci.pdf:attachment\:JohansenBerg2004ProcNatAcadSci.pdf:PDF}, year = 2004 } @Article{Maddah_MICCA2005, Author = {Maddah, M. and Mewes, A. U. and Haker, S. and Grimson, W. E. and Warfield, S. K.}, Title = {Automated atlas-based clustering of white matter fiber tracts from {DTMRI}.}, Journal = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv}, Volume = {8}, Number = {Pt 1}, Pages = {188-95}, abstract = {A new framework is presented for clustering fiber tracts into anatomically known bundles. This work is motivated by medical applications in which variation analysis of known bundles of fiber tracts in the human brain is desired. To include the anatomical knowledge in the clustering, we invoke an atlas of fiber tracts, labeled by the number of bundles of interest. In this work, we construct such an atlas and use it to cluster all fiber tracts in the white matter. To build the atlas, we start with a set of labeled ROIs specified by an expert and extract the fiber tracts initiating from each ROI. Affine registration is used to project the extracted fiber tracts of each subject to the atlas, whereas their B-spline representation is used to efficiently compare them to the fiber tracts in the atlas and assign cluster labels. Expert visual inspection of the result confirms that the proposed method is very promising and efficient in clustering of the known bundles of fiber tracts.}, authoraddress = {Computer Science and Artificial Intelligence Laboratory, Massachussets Institute of Technology, Cambridge, MA 02139, USA. mmaddah@bwh.harvard.edu}, keywords = {Algorithms ; Anatomy, Artistic ; *Artificial Intelligence ; Brain/*cytology ; Computer Simulation ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/*methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/methods ; Medical Illustration ; Models, Anatomic ; Nerve Fibers, Myelinated/*ultrastructure ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2006/05/12 09:00}, medline-da = {20060511}, medline-dcom = {20060609}, medline-edat = {2006/05/12 09:00}, medline-fau = {Maddah, Mahnaz ; Mewes, Andrea U J ; Haker, Steven ; Grimson, W Eric L ; Warfield, Simon K}, medline-gr = {1U54 EB005149/EB/NIBIB NIH HHS/United States ; P01 CA67165/CA/NCI NIH HHS/United States ; P41 RR13218/RR/NCRR NIH HHS/United States ; R01 CA109246/CA/NCI NIH HHS/United States ; R01 LM007861/LM/NLM NIH HHS/United States ; R21 MH67054/MH/NIMH NIH HHS/United States}, medline-jid = {101249582}, medline-jt = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, medline-lr = {20071114}, medline-mhda = {2006/06/10 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {16685845}, medline-pst = {ppublish}, medline-pt = {Evaluation Studies ; Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't ; Research Support, U.S. Gov't, Non-P.H.S.}, medline-sb = {IM}, medline-so = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv. 2005;8(Pt 1):188-95.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16685845}, year = 2005 } @Article{Lenglet2010a, Author = {Lenglet, Christophe and Series, I M A Preprint and Hall, Lind and E, Church Street S and Aganj, Iman and Sapiro, Guillermo}, Title = {{ODF MAXIMA EXTRACTION IN INSTITUTE FOR MATHEMATICS AND ITS APPLICATIONS ODF Maxima Extraction in Spherical Harmonic Representation via Analytical Search Space Reduction}}, Journal = {Methods}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Lenglet et al. - 2010 - ODF MAXIMA EXTRACTION IN INSTITUTE FOR MATHEMATICS AND ITS APPLICATIONS ODF Maxima Extraction in Spherical Harmonic Representation via Analytical Search Space Reduction.pdf:pdf}, year = 2010 } @Article{Com, Author = {Com, Bookboon}, Title = {{RANDOM VARIABLES I}}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Com - Unknown - RANDOM VARIABLES I.pdf:pdf} } @Article{Mai, Author = {Mai, Thanh and Ngoc, Pham and Picard, Dominique}, Title = {{Localized deconvolution on the sphere}}, Pages = {1--33}, arxivid = {arXiv:0908.1952v1}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Mai, Ngoc, Picard - Unknown - Localized deconvolution on the sphere.pdf:pdf}, keywords = {62g05 62g08 62g20 62c10,and phrases,minimax estima-,msc 2000 subject classification,second- generation wavelets,statistical inverse problems,tion} } @Article{Alexander2005NeuroImage, Author = {Alexander, Daniel C. and Barker, Gareth J.}, Title = {Optimal imaging parameters for fiber-orientation estimation in diffusion MRI}, Journal = {NeuroImage}, Volume = {27}, Pages = {357 – 367}, abstract = {This study uses Monte Carlo simulations to investigate the optimal value of the diffusion weighting factor b for estimating white-matter fiber orientations using diffusion MRI with a standard spherical sampling scheme. We devise an algorithm for determining the optimal echo time, pulse width, and pulse separation in the pulsed-gradient spinecho sequence for a specific value of b. The Monte Carlo simulations provide an estimate of the optimal value of b for recovering one and two fiber orientations. We show that the optimum is largely independent of the noise level in the measurements and the number of gradient directions and that the optimum depends only weakly on the diffusion anisotropy, the maximum gradient strength, and the spin – spin relaxation time. The optimum depends strongly on the mean diffusivity. In brain tissue, the optima we estimate are in the ranges [0.7, 1.0] \times 10^9 s m^{-2} and [2.2, 2.8] \times 10^9 s m^{-2} for the one- and two-fiber cases, respectively. The best b for estimating the fractional anisotropy is slightly higher than for estimating fiber directions in the one-fiber case and slightly lower in the two-fiber case. To estimate Tr(D) in the onefiber case, the optimal setting is higher still. Simulations suggest that a ratio of high to low b measurements of 5 to 1 is a good compromise for measuring fiber directions and size and shape indices.}, owner = {ian}, timestamp = {2009.03.04}, year = 2005 } @Article{Yeh2010, Author = {Yeh, F and Wedeen, V and Tseng, W}, Title = {{Generalized Q-Sampling Imaging.}}, Journal = {IEEE transactions on medical imaging}, Number = {c}, abstract = {Based on the Fourier transform relation between diffusion MR signals and the underlying diffusion displacement, a new relation is derived to estimate the spin distribution function (SDF) directly from diffusion MR signals. This relation leads to an imaging method called generalized q-sampling imaging (GQI), which can obtain the SDF from the shell sampling scheme used in q-ball imaging (QBI) or the grid sampling scheme used in diffusion spectrum imaging (DSI). The accuracy of GQI was evaluated by a simulation study and an in vivo experiment in comparison with QBI and DSI. The simulation results showed that the accuracy of GQI was comparable to that of QBI and DSI. The simulation study of GQI also showed that an anisotropy index, named quantitative anisotropy, was correlated with the volume fraction of the resolved fiber component. The in vivo images of GQI demonstrated that SDF patterns were similar to the ODFs reconstructed by QBI or DSI. The tractography generated from GQI was also similar to those generated from QBI and DSI. In conclusion, the proposed GQI method can be applied to grid or shell sampling schemes and can provide directional and quantitative information about the crossing fibers.}, doi = {10.1109/TMI.2010.2045126}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Yeh, Wedeen, Tseng - 2010 - Generalized Q-Sampling Imaging..pdf:pdf}, issn = {1558-0062}, month = mar, pmid = {20304721}, url = {http://www.ncbi.nlm.nih.gov/pubmed/20304721}, year = 2010 } @Article{Cook2007, Author = {Cook, P. A. and Symms, M. and Boulby, P. A. and Alexander, D. C.}, Title = {Optimal acquisition orders of diffusion-weighted {MRI} measurements.}, Journal = {J Magn Reson Imaging}, Volume = {25}, Number = {5}, Pages = {1051-8}, abstract = {PURPOSE: To propose a new method to optimize the ordering of gradient directions in diffusion-weighted MRI so that partial scans have the best spherical coverage. MATERIALS AND METHODS: Diffusion-weighted MRI often uses a spherical sampling scheme, which acquires images sequentially with diffusion-weighting gradients in unique directions distributed isotropically on the hemisphere. If not all of the measurements can be completed, the quality of diffusion tensors fitted to the partial scan is sensitive to the order of the gradient directions in the scanner protocol. If the directions are in a random order, then a partial scan may cover some parts of the hemisphere densely but other parts sparsely and thus provide poor spherical coverage. We compare the results of ordering with previously published methods for optimizing the acquisition in simulation. RESULTS: Results show that all methods produce similar results and all improve the accuracy of the estimated diffusion tensors significantly over unordered acquisitions. CONCLUSION: The new ordering method improves the spherical coverage of partial scans and has the advantage of maintaining the optimal coverage of the complete scan.}, authoraddress = {Centre for Medical Image Computing, Department of Computer Science University College London, London, UK. p.cook@cs.ucl.ac.uk}, keywords = {Algorithms ; Anisotropy ; Brain Mapping/*methods ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/*methods ; Image Processing, Computer-Assisted}, language = {eng}, medline-aid = {10.1002/jmri.20905 [doi]}, medline-ci = {(c) 2007 Wiley-Liss, Inc.}, medline-crdt = {2007/04/26 09:00}, medline-da = {20070430}, medline-dcom = {20070628}, medline-edat = {2007/04/26 09:00}, medline-fau = {Cook, Philip A ; Symms, Mark ; Boulby, Philip A ; Alexander, Daniel C}, medline-is = {1053-1807 (Print)}, medline-jid = {9105850}, medline-jt = {Journal of magnetic resonance imaging : JMRI}, medline-mhda = {2007/06/29 09:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {17457801}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {J Magn Reson Imaging. 2007 May;25(5):1051-8.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=17457801}, year = 2007 } @Article{O'Donnell2009, Author = {O'Donnell, Lauren J and Westin, Carl-Fredrik and Golby, Alexandra J}, Title = {{Tract-based morphometry for white matter group analysis.}}, Journal = {NeuroImage}, Volume = {45}, Number = {3}, Pages = {832--44}, abstract = {We introduce an automatic method that we call tract-based morphometry, or TBM, for measurement and analysis of diffusion MRI data along white matter fiber tracts. Using subject-specific tractography bundle segmentations, we generate an arc length parameterization of the bundle with point correspondences across all fibers and all subjects, allowing tract-based measurement and analysis. In this paper we present a quantitative comparison of fiber coordinate systems from the literature and we introduce an improved optimal match method that reduces spatial distortion and improves intra- and inter-subject variability of FA measurements. We propose a method for generating arc length correspondences across hemispheres, enabling a TBM study of interhemispheric diffusion asymmetries in the arcuate fasciculus (AF) and cingulum bundle (CB). The results of this study demonstrate that TBM can detect differences that may not be found by measuring means of scalar invariants in entire tracts, such as the mean diffusivity (MD) differences found in AF. We report TBM results of higher fractional anisotropy (FA) in the left hemisphere in AF (caused primarily by lower lambda(3), the smallest eigenvalue of the diffusion tensor, in the left AF), and higher left hemisphere FA in CB (related to higher lambda(1), the largest eigenvalue of the diffusion tensor, in the left CB). By mapping the significance levels onto the tractography trajectories for each structure, we demonstrate the anatomical locations of the interhemispheric differences. The TBM approach brings analysis of DTI data into the clinically and neuroanatomically relevant framework of the tract anatomy.}, doi = {10.1016/j.neuroimage.2008.12.023}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/O'Donnell, Westin, Golby - 2009 - Tract-based morphometry for white matter group analysis..pdf:pdf}, issn = {1095-9572}, keywords = {Brain,Brain Mapping,Brain Mapping: methods,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods}, pmid = {19154790}, publisher = {Elsevier Inc.}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19154790}, year = 2009 } @Article{Descoteaux2007MagResMed, Author = {Descoteaux, Maxime and Angelino, Elaine and Fitzgibbons, Shaun and Deriche, Rachid}, Title = {Regularized, fast, and robust analytical Q-ball imaging}, Journal = {Magnetic Resonance in Medicine}, Volume = {58}, Number = {3}, Pages = {497-510}, abstract = {We propose a regularized, fast, and robust analytical solution for the Q-ball imaging (QBI) reconstruction of the orientation distribution function (ODF) together with its detailed validation and a discussion on its benefits over the state-of-the-art. Our analytical solution is achieved by modeling the raw high angular resolution diffusion imaging signal with a spherical harmonic basis that incorporates a regularization term based on the Laplace– Beltrami operator defined on the unit sphere. This leads to an elegant mathematical simplification of the Funk–Radon transform which approximates the ODF. We prove a new corollary of the Funk–Hecke theorem to obtain this simplification. Then, we show that the Laplace–Beltrami regularization is theoretically and practically better than Tikhonov regularization. At the cost of slightly reducing angular resolution, the Laplace–Beltrami regularization reduces ODF estimation errors and improves fiber detection while reducing angular error in the ODF maxima detected. Finally, a careful quantitative validation is performed against ground truth from synthetic data and against real data from a biological phantom and a human brain dataset. We show that our technique is also able to recover known fiber crossings in the human brain and provides the practical advantage of being up to 15 times faster than original numerical QBI method.}, doi = {10.1002/mrm.21277}, file = {attachment\:Descoteaux2007MagResMed.pdf:attachment\:Descoteaux2007MagResMed.pdf:PDF}, publisher = {Wiley-Liss, Inc.}, url = {http://dx.doi.org/10.1002/mrm.21277}, year = 2007 } @TechReport{Zhuang2008Kentucky, Author = {Zhuang, Qi and Gold, Brian T. and Huang, Ruiwang and Liang, Xuwei and Cao, Ning and Zhang, Jun}, Title = {Generalized Diffusion Simulation-Based Tractography}, Institution = {Technical Report CMIDA-HiPSCCS 009-08, Department of Computer Science, University of Kentucky, KY}, abstract = {Diffusion weighted imaging ({DWI}) techniques have been used to study human brain white matter fiber structures in vivo. Commonly used standard diffusion tensor magnetic resonance imaging ({DTI}) tractography derived from the second order diffusion tensor model has limitations in its ability to resolve complex fiber tracts. We propose a new fiber tracking method based on the generalized diffusion tensor ({GDT}) model. This new method better models the anisotropic diffusion process in human brain by using the generalized diffusion simulation-based fiber tractography ({GDST}). Due to the additional information provided by {GDT}, the {GDST} method simulates the underlying physical diffusion process of the human brain more accurately than does the standard {DTI} method. The effectiveness of the new fiber tracking algorithm was demonstrated via analyses on real and synthetic {DWI} datasets. In addition, the general analytic expression of high order b matrix is derived in the case of twice refocused spin-echo ({TRSE}) pulse sequence which is used in the {DWI} data acquisition. Based on our results, we discuss the benefits of {GDT} and the second order diffusion tensor on fiber tracking.}, owner = {ian}, timestamp = {2008.10.01}, year = 2008 } @Article{Bar-Shir2008JMR, Author = {Bar-Shir, Amnon and Avram, Liat and Özarslan, Evren and Basser, Peter J. and Cohen, Yoram}, Title = {The effect of the diffusion time and pulse gradient duration ratio on the diffraction pattern and the structural information estimated from q-space diffusion MR: Experiments and simulations}, Journal = {Journal of Magnetic Resonance}, Volume = {194}, Pages = {230–236}, owner = {ian}, timestamp = {2009.03.05}, year = 2008 } @Article{king1994q, Author = {King, M.D. and Houseman, J. and Roussel, S.A. and Van Bruggen, N. and Williams, S.R. and Gadian, D.G.}, Title = {{q-Space imaging of the brain}}, Journal = {Magnetic Resonance in Medicine}, Volume = {32}, Number = {6}, Pages = {707--713}, issn = {1522-2594}, publisher = {John Wiley \& Sons}, year = 1994 } @Book{MAB04, Author = {{Matt A. Bernstein} and {Kevin F. King} and {Xiaohong Joe Zhou}}, Title = {Handbook of {MRI} {P}ulse {S}equences}, Publisher = {Elsevier Academic Press}, year = 2004 } @Article{Reese2003, Author = {Reese, T G and Heid, O and Weisskoff, R M and Wedeen, V J}, Title = {{Reduction of eddy-current-induced distortion in diffusion MRI using a twice-refocused spin echo.}}, Journal = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, Volume = {49}, Number = {1}, Pages = {177--82}, abstract = {Image distortion due to field gradient eddy currents can create image artifacts in diffusion-weighted MR images. These images, acquired by measuring the attenuation of NMR signal due to directionally dependent diffusion, have recently been shown to be useful in the diagnosis and assessment of acute stroke and in mapping of tissue structure. This work presents an improvement on the spin-echo (SE) diffusion sequence that displays less distortion and consequently improves image quality. Adding a second refocusing pulse provides better image quality with less distortion at no cost in scanning efficiency or effectiveness, and allows more flexible diffusion gradient timing. By adjusting the timing of the diffusion gradients, eddy currents with a single exponential decay constant can be nulled, and eddy currents with similar decay constants can be greatly reduced. This new sequence is demonstrated in phantom measurements and in diffusion anisotropy images of normal human brain.}, doi = {10.1002/mrm.10308}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Reese et al. - 2003 - Reduction of eddy-current-induced distortion in diffusion MRI using a twice-refocused spin echo..pdf:pdf}, issn = {0740-3194}, keywords = {Artifacts,Brain,Brain: anatomy \& histology,Brain: pathology,Echo-Planar Imaging,Echo-Planar Imaging: methods,Humans,Magnetic Resonance Imaging,Magnetic Resonance Imaging: methods,Phantoms, Imaging,Stroke,Stroke: diagnosis}, pmid = {12509835}, url = {http://www.ncbi.nlm.nih.gov/pubmed/12509835}, year = 2003 } @Article{Yu, Author = {Yu, Hwanjo and Yang, Jiong}, Title = {{Classifying Large Data Sets Using SVMs with Hierarchical Clusters}}, Journal = {Science}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Yu, Yang - Unknown - Classifying Large Data Sets Using SVMs with Hierarchical Clusters.pdf:pdf}, keywords = {hierarchical cluster,support vector machines} } @Article{Zanche2008, Author = {Zanche, N De and Pruessmann, K P and Boesiger, P}, Title = {{Preliminary Experience with Visualization of Intracortical Fibers by Focused High-Resolution}}, Journal = {Ajnr. American Journal Of Neuroradiology}, doi = {10.3174/ajnr.A0742}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Zanche, Pruessmann, Boesiger - 2008 - Preliminary Experience with Visualization of Intracortical Fibers by Focused High-Resolution.pdf:pdf}, year = 2008 } @Article{DavisTMI02, Author = {Davies, R. H. and Twining, C. J. and Cootes, T. F. and Waterton, J. C. and Taylor, C. J.}, Title = {A minimum description length approach to statistical shape modeling.}, Journal = {IEEE Trans Med Imaging}, Volume = {21}, Number = {5}, Pages = {525-37}, abstract = {We describe a method for automatically building statistical shape models from a training set of example boundaries/surfaces. These models show considerable promise as a basis for segmenting and interpreting images. One of the drawbacks of the approach is, however, the need to establish a set of dense correspondences between all members of a set of training shapes. Often this is achieved by locating a set of "landmarks" manually on each training image, which is time consuming and subjective in two dimensions and almost impossible in three dimensions. We describe how shape models can be built automatically by posing the correspondence problem as one of finding the parameterization for each shape in the training set. We select the set of parameterizations that build the "best" model. We define "best" as that which minimizes the description length of the training set, arguing that this leads to models with good compactness, specificity and generalization ability. We show how a set of shape parameterizations can be represented and manipulated in order to build a minimum description length model. Results are given for several different training sets of two-dimensional boundaries, showing that the proposed method constructs better models than other approaches including manual landmarking-the current gold standard. We also show that the method can be extended straightforwardly to three dimensions.}, authoraddress = {Division of Imaging Science and Biomedical Engineering, University of Manchester, UK. rhodri.h.davies@stud.man.ac.uk}, keywords = {*Algorithms ; Animals ; *Artificial Intelligence ; Brain/anatomy \& histology ; Brain Ischemia/diagnosis ; Cartilage, Articular/anatomy \& histology ; Hand/anatomy \& histology ; Heart Ventricles ; Hip/radiography/ultrasonography ; Hip Prosthesis ; Humans ; Image Enhancement/*methods ; Image Interpretation, Computer-Assisted/*methods ; Information Theory ; Kidney/anatomy \& histology ; Knee ; Magnetic Resonance Imaging ; *Models, Statistical ; Multivariate Analysis ; Normal Distribution ; Pattern Recognition, Automated ; Quality Control ; Rats ; Rats, Inbred F344 ; Rats, Sprague-Dawley ; Sensitivity and Specificity ; Stochastic Processes}, language = {eng}, medline-aid = {10.1109/TMI.2002.1009388 [doi]}, medline-crdt = {2002/06/20 10:00}, medline-da = {20020619}, medline-dcom = {20021227}, medline-edat = {2002/06/20 10:00}, medline-fau = {Davies, Rhodri H ; Twining, Carole J ; Cootes, Tim F ; Waterton, John C ; Taylor, Chris J}, medline-is = {0278-0062 (Print)}, medline-jid = {8310780}, medline-jt = {IEEE transactions on medical imaging}, medline-lr = {20061115}, medline-mhda = {2002/12/28 04:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {12071623}, medline-pst = {ppublish}, medline-pt = {Comparative Study ; Journal Article ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {IEEE Trans Med Imaging. 2002 May;21(5):525-37.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=12071623}, year = 2002 } @Article{Papadakis2000, Author = {Papadakis, N G and Murrills, C D and Hall, L D and Huang, C L and {Adrian Carpenter}, T}, Title = {{Minimal gradient encoding for robust estimation of diffusion anisotropy.}}, Journal = {Magnetic resonance imaging}, Volume = {18}, Number = {6}, Pages = {671--9}, abstract = {This study has investigated the relationship between the noise sensitivity of measurement by magnetic resonance imaging (MRI) of the diffusion tensor (D) of water and the number N of diffusion-weighting (DW) gradient directions, using computer simulations of strongly anisotropic fibers with variable orientation. The DW directions uniformly sampled the diffusion ellipsoid surface. It is shown that the variation of the signal-to-noise ratio (SNR) of three ideally rotationally invariant scalars of D due to variable fiber orientation provides an objective quantitative measure for the diffusion ellipsoid sampling efficiency, which is independent of the SNR value of the baseline signal obtained without DW; the SNR variation decreased asymptotically with increasing N. The minimum number N(0) of DW directions, which minimized the SNR variation of the three scalars of D was determined, thereby achieving the most efficient ellipsoid sampling. The resulting time efficient diffusion tensor imaging (DTI) protocols provide robust estimation of diffusion anisotropy in the presence of noise and can improve the repeatability/reliability of DTI experiments when there is high variability in the orientation of similar anisotropic structures, as for example, in studies which require repeated measurement of one individual, intersubject comparisons or multicenter studies.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Papadakis et al. - 2000 - Minimal gradient encoding for robust estimation of diffusion anisotropy..pdf:pdf}, issn = {0730-725X}, keywords = {Anisotropy,Computer Simulation,Humans,Magnetic Resonance Imaging,Magnetic Resonance Imaging: methods,Models, Theoretical,Statistics as Topic}, month = jul, pmid = {10930776}, url = {http://www.ncbi.nlm.nih.gov/pubmed/10930776}, year = 2000 } @Article{roberts2005fdi, Author = {Roberts, T. P. L. and Liu, F. and Kassner, A. and Mori, S. and Guha, A.}, Title = {{Fiber Density Index Correlates with Reduced Fractional Anisotropy in White Matter of Patients with Glioblastoma}}, Journal = {American Journal of Neuroradiology}, Volume = {26}, Number = {9}, Pages = {2183--2186}, file = {attachment\:roberts_FA_glioblastoma_2005.pdf:attachment\:roberts_FA_glioblastoma_2005.pdf:PDF}, publisher = {Am Soc Neuroradiology}, year = 2005 } @Article{Baas2008, Author = {Baas, Matthias}, Title = {{Python Computer Graphics Kit}}, Journal = {Interface}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Baas - 2008 - Python Computer Graphics Kit.pdf:pdf}, year = 2008 } @Article{Odonnell_MICCAI05, Author = {O'Donnell, L. and Westin, C. F.}, Title = {White matter tract clustering and correspondence in populations.}, Journal = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv}, Volume = {8}, Number = {Pt 1}, Pages = {140-7}, abstract = {We present a novel method for finding white matter fiber correspondences and clusters across a population of brains. Our input is a collection of paths from tractography in every brain. Using spectral methods we embed each path as a vector in a high dimensional space. We create the embedding space so that it is common across all brains, consequently similar paths in all brains will map to points near each other in the space. By performing clustering in this space we are able to find matching fiber tract clusters in all brains. In addition, we automatically obtain correspondence of tractographic paths across brains: by selecting one or several paths of interest in one brain, the most similar paths in all brains are obtained as the nearest points in the high-dimensional space.}, authoraddress = {MIT Computer Science and Artificial Intelligence Lab, Cambridge MA, USA. lauren@csail.mit.edu}, keywords = {Algorithms ; *Artificial Intelligence ; Brain/*anatomy \& histology ; Cluster Analysis ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/*methods ; Nerve Fibers, Myelinated/*ultrastructure ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2006/05/12 09:00}, medline-da = {20060511}, medline-dcom = {20060609}, medline-edat = {2006/05/12 09:00}, medline-fau = {O'Donnell, Lauren ; Westin, Carl-Fredrik}, medline-gr = {1-R01-NS051826-01/NS/NINDS NIH HHS/United States ; P41-RR13218/RR/NCRR NIH HHS/United States ; U24 RR021382/RR/NCRR NIH HHS/United States ; U54 EB005149/EB/NIBIB NIH HHS/United States}, medline-jid = {101249582}, medline-jt = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, medline-lr = {20071114}, medline-mhda = {2006/06/10 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {16685839}, medline-pst = {ppublish}, medline-pt = {Comparative Study ; Evaluation Studies ; Journal Article ; Research Support, N.I.H., Extramural}, medline-sb = {IM}, medline-so = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv. 2005;8(Pt 1):140-7.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16685839}, year = 2005 } @Article{Sorland2002MagResChem, Author = {Sørland, Geir Humborstad and Aksnes, Dagfinn}, Title = {Artefacts and pitfalls in diffusion measurements by NMR}, Journal = {Magnetic Resonance in Chemistry}, Volume = {40}, Number = {13}, Pages = {S139-S146}, abstract = {When applying pulsed field gradient (PFG) NMR experiments to determine the molecular mobility characterized by the diffusion coefficient, it is crucial to have control over all experimental parameters that may affect the performance of the diffusion experiment. This could be diffusion measurement in the presence of magnetic field transients, internal magnetic field gradients, either constant or spatially varying, convection, mechanical vibrations, or in the presence of physical restrictions affecting the diffusion propagator. The effect of these parameters on the diffusion experiment is discussed and visualized. It is also outlined how to minimize their influence on the measured diffusivity that is extracted from the PFG-NMR experiment. For an expanded and more general treatment we refer to the excellent reviews by Dr William S. Price (Concepts Magn. Reson. 1997; 9: 299; 1998; 10: 197) and the references therein.}, doi = {10.1002/mrc.1112}, owner = {ian}, timestamp = {2009.03.12}, url = {http://dx.doi.org/10.1002/mrc.1112}, year = 2002 } @Article{ZiyanMICCAI07, Author = {Ziyan, U. and Sabuncu, M. R. and O'Donnell, L. J. and Westin, C. F.}, Title = {Nonlinear registration of diffusion {MR} images based on fiber bundles.}, Journal = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv}, Volume = {10}, Number = {Pt 1}, Pages = {351-8}, abstract = {In this paper, we explore the use of fiber bundles extracted from diffusion MR images for a nonlinear registration algorithm. We employ a white matter atlas to automatically label major fiber bundles and to establish correspondence between subjects. We propose a polyaffine framework to calculate a smooth and invertible nonlinear warp field based on these correspondences, and derive an analytical solution for the reorientation of the tensor fields under the polyaffine transformation. We demonstrate our algorithm on a group of subjects and show that it performs comparable to a higher dimensional nonrigid registration algorithm.}, authoraddress = {MIT Computer Science and Artificial Intelligence Lab, Cambridge MA, USA. ulas@mit.edu}, keywords = {*Algorithms ; *Artificial Intelligence ; Brain/*anatomy \& histology ; Diffusion Magnetic Resonance Imaging/*methods ; Image Enhancement/*methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/*methods ; Nerve Fibers, Myelinated/*ultrastructure ; Nonlinear Dynamics ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2007/12/07 09:00}, medline-da = {20071204}, medline-dcom = {20080103}, medline-edat = {2007/12/07 09:00}, medline-fau = {Ziyan, Ulas ; Sabuncu, Mert R ; O'Donnell, Lauren J ; Westin, Carl-Fredrik}, medline-gr = {P41-RR13218/RR/NCRR NIH HHS/United States ; P41-RR15241/RR/NCRR NIH HHS/United States ; R01-AG20012/AG/NIA NIH HHS/United States ; R01-MH074794/MH/NIMH NIH HHS/United States ; U54-EB005149/EB/NIBIB NIH HHS/United States}, medline-jid = {101249582}, medline-jt = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, medline-mhda = {2008/01/04 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {18051078}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv. 2007;10(Pt 1):351-8.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=18051078}, year = 2007 } @Article{Aganj, Author = {Aganj, I and Lenglet, C and Keriven, R and Sapiro, G and Harel, N and Thompson, P}, Title = {{A Hough Transform Global Approach to Diffusion MRI Tractography}}, Journal = {Methods}, Pages = {4--4}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Aganj et al. - Unknown - A Hough Transform Global Approach to Diffusion MRI Tractography.pdf:pdf} } @Article{Pedersen2008, Author = {Pedersen, Michael Syskind and Baxter, Bill and Rish\o j, Christian and Theobald, Douglas L and Larsen, Jan and Strimmer, Korbinian and Christiansen, Lars and Hansen, Kai and Wilkinson, Leland and He, Liguo and Thibaut, Loic and Bar, Miguel}, Title = {{The Matrix Cookbook [}}, Journal = {Matrix}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Pedersen et al. - 2008 - The Matrix Cookbook.pdf:pdf}, keywords = {acknowledgements,and suggestions,bill baxter,christian rish\o j,contributions,derivative of,derivative of inverse matrix,determinant,differentiate a matrix,douglas l,esben,matrix algebra,matrix identities,matrix relations,thank the following for,theobald,we would like to}, year = 2008 } @Article{denislebihan2006aap, Author = {Denis Le Bihan, MD and Poupon, C. and Amadon, A. and Lethimonnier, F.}, Title = {{Artifacts and pitfalls in diffusion MRI}}, Journal = {Journal of Magnetic Resonance Imaging}, Volume = {24}, Pages = {478--488}, year = 2006 } @Article{bernstein2005handbook, Author = {Bernstein, M.A. and King, K.E. and Zhou, X.J. and Fong, W.}, Title = {{Handbook of MRI pulse sequences}}, Journal = {Medical Physics}, Volume = {32}, Pages = {1452}, year = 2005 } @Article{BJ02, Author = {Basser, P. J. and Jones, D. K.}, Title = {Diffusion-tensor {MRI}: theory, experimental design and data analysis - a technical review.}, Journal = {NMR Biomed}, Volume = {15}, Number = {7-8}, Pages = {456-67}, abstract = {This article treats the theoretical underpinnings of diffusion-tensor magnetic resonance imaging (DT-MRI), as well as experimental design and data analysis issues. We review the mathematical model underlying DT-MRI, discuss the quantitative parameters that are derived from the measured effective diffusion tensor, and describe artifacts that arise in typical DT-MRI acquisitions. We also discuss difficulties in identifying appropriate models to describe water diffusion in heterogeneous tissues, as well as in interpreting experimental data obtained in such issues. Finally, we describe new statistical methods that have been developed to analyse DT-MRI data, and their potential uses in clinical and multi-site studies.}, authoraddress = {Section on Tissue Biophysics and Biomimetics, NICHD, National Institutes of Health, Bethesda, MD 20892, USA.}, keywords = {Anisotropy ; Artifacts ; Brain/cytology/metabolism ; Diffusion ; Diffusion Magnetic Resonance Imaging/instrumentation/*methods ; Image Enhancement/*methods ; *Models, Biological ; Models, Chemical ; Nerve Fibers/chemistry/*metabolism/*pathology ; Neural Pathways/chemistry/cytology/metabolism ; Research Design ; Water/chemistry}, language = {eng}, medline-aid = {10.1002/nbm.783 [doi]}, medline-ci = {Copyright 2002 John Wiley & Sons, Ltd.}, medline-da = {20021218}, medline-dcom = {20030701}, medline-edat = {2002/12/19 04:00}, medline-fau = {Basser, Peter J ; Jones, Derek K}, medline-is = {0952-3480 (Print)}, medline-jid = {8915233}, medline-jt = {NMR in biomedicine}, medline-lr = {20061115}, medline-mhda = {2003/07/02 05:00}, medline-own = {NLM}, medline-pl = {England}, medline-pmid = {12489095}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't ; Review}, medline-pubm = {Print}, medline-rf = {107}, medline-rn = {7732-18-5 (Water)}, medline-sb = {IM}, medline-so = {NMR Biomed. 2002 Nov-Dec;15(7-8):456-67.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks\&dbfrom=pubmed\&retmode=ref\&id=12489095}, year = 2002 } @Article{Maaten2008a, Author = {Maaten, Laurens Van Der and Hinton, Geoffrey}, Title = {{Visualizing Data using t-SNE}}, Journal = {Journal of Machine Learning Research}, Volume = {9}, Pages = {2579--2605}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Maaten, Hinton - 2008 - Visualizing Data using t-SNE.pdf:pdf}, keywords = {dimensionality reduction,embedding algorithms,manifold learning,multidimensional scaling,visualization}, year = 2008 } @Article{Parker2005PhilTransRoySoc, Author = {Parker, G J and Alexander, D C}, Title = {Probabilistic anatomical connectivity derived from the microscopic persistent angular structure of cerebral tissue}, Journal = {Philos Trans R Soc Lond B Biol Sci.}, Volume = {360}, Number = {1457}, Pages = {893-902}, abstract = {Recently developed methods to extract the persistent angular structure (PAS) of axonal fibre bundles from diffusion-weighted magnetic resonance imaging (MRI) data are applied to drive probabilistic fibre tracking, designed to provide estimates of anatomical cerebral connectivity. The behaviour of the PAS function in the presence of realistic data noise is modelled for a range of single and multiple fibre configurations. This allows probability density functions (PDFs) to be generated that are parametrized according to the anisotropy of individual fibre populations. The PDFs are incorporated in a probabilistic fibre-tracking method to allow the estimation of whole-brain maps of anatomical connection probability. These methods are applied in two exemplar experiments in the corticospinal tract to show that it is possible to connect the entire primary motor cortex (M1) when tracing from the cerebral peduncles, and that the reverse experiment of tracking from M1 successfully identifies high probability connection via the pyramidal tracts. Using the extracted PAS in probabilistic fibre tracking allows higher specificity and sensitivity than previously reported fibre tracking using diffusion-weighted MRI in the corticospinal tract.}, file = {attachment\:Parker2005PhilTransRoySoc.pdf:attachment\:Parker2005PhilTransRoySoc.pdf:PDF}, year = 2005 } @Article{Kreher2008ISMRM, Author = {Kreher, B. W. and Mader, I. and Kiselev, V. G.}, Title = {Gibbs Tracking: A Novel Approach for the Reconstruction of Neuronal Pathways}, Journal = {Proc. Intl. Soc. Mag. Reson. Med.}, Volume = {16}, Pages = {425}, abstract = {Fibre tractography based on diffusion weighted MRI is a powerful method to extract the anatomical connectivity in white matter in vivo. The main idea of the currently available methods of fibre tracking is the reconstruction of long neuronal pathways in small successive steps by following the local, voxel-defined fibre direction. Starting from local information on the diffusivity, long-distance connections are determined. This method is inherently prone to instability, since a mistake at a single crossing affects radically the final result. In this paper we present a method based on a new principle. Instead of walking successively through the volume all neuronal pathways and the totality of the signal is taken into account at the same time. This novel approach is capable to reconstruct crossing and spreading fibre configuration.}, file = {attachment\:Kreher2008ISMRM.pdf:attachment\:Kreher2008ISMRM.pdf:PDF}, year = 2008 } @Article{Bea02, Author = {Beaulieu, C.}, Title = {The basis of anisotropic water diffusion in the nervous system - a technical review.}, Journal = {NMR Biomed}, Volume = {15}, Number = {7-8}, Pages = {435-55}, abstract = {Anisotropic water diffusion in neural fibres such as nerve, white matter in spinal cord, or white matter in brain forms the basis for the utilization of diffusion tensor imaging (DTI) to track fibre pathways. The fact that water diffusion is sensitive to the underlying tissue microstructure provides a unique method of assessing the orientation and integrity of these neural fibres, which may be useful in assessing a number of neurological disorders. The purpose of this review is to characterize the relationship of nuclear magnetic resonance measurements of water diffusion and its anisotropy (i.e. directional dependence) with the underlying microstructure of neural fibres. The emphasis of the review will be on model neurological systems both in vitro and in vivo. A systematic discussion of the possible sources of anisotropy and their evaluation will be presented followed by an overview of various studies of restricted diffusion and compartmentation as they relate to anisotropy. Pertinent pathological models, developmental studies and theoretical analyses provide further insight into the basis of anisotropic diffusion and its potential utility in the nervous system.}, authoraddress = {Department of Biomedical Engineering, Faculty of Medicine, University of Alberta, Edmonton, Canada. christian.beaulieu@ualberta.ca}, keywords = {*Anisotropy ; Brain/metabolism/pathology ; Brain Chemistry ; Diffusion ; Diffusion Magnetic Resonance Imaging/*methods ; Models, Biological ; Nerve Fibers/chemistry/metabolism/pathology ; Nervous System/chemistry/*metabolism/*pathology ; Nervous System Diseases/metabolism/pathology ; Spinal Cord/chemistry/cytology/metabolism ; Water/*chemistry}, language = {eng}, medline-aid = {10.1002/nbm.782 [doi]}, medline-ci = {Copyright 2002 John Wiley & Sons, Ltd.}, medline-da = {20021218}, medline-dcom = {20030701}, medline-edat = {2002/12/19 04:00}, medline-fau = {Beaulieu, Christian}, medline-is = {0952-3480 (Print)}, medline-jid = {8915233}, medline-jt = {NMR in biomedicine}, medline-lr = {20061115}, medline-mhda = {2003/07/02 05:00}, medline-own = {NLM}, medline-pl = {England}, medline-pmid = {12489094}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't ; Review}, medline-pubm = {Print}, medline-rf = {131}, medline-rn = {7732-18-5 (Water)}, medline-sb = {IM}, medline-so = {NMR Biomed. 2002 Nov-Dec;15(7-8):435-55.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks\&dbfrom=pubmed\&retmode=ref\&id=12489094}, year = 2002 } @Article{Sciences2009, Author = {Sciences, Cognition Brain}, Title = {{Michaelmas Term 2008}}, Journal = {Sciences-New York}, Pages = {9469--9469}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Sciences - 2009 - Michaelmas Term 2008.pdf:pdf}, year = 2009 } @Article{Zvitia2010, Author = {Zvitia, Orly and Mayer, Arnaldo and Shadmi, Ran and Miron, Shmuel and Greenspan, Hayit K}, Title = {{Co-registration of white matter tractographies by adaptive-mean-shift and Gaussian mixture modeling.}}, Journal = {IEEE transactions on medical imaging}, Volume = {29}, Number = {1}, Pages = {132--45}, abstract = {In this paper, we present a robust approach to the registration of white matter tractographies extracted from diffusion tensor-magnetic resonance imaging scans. The fibers are projected into a high dimensional feature space based on the sequence of their 3-D coordinates. Adaptive mean-shift clustering is applied to extract a compact set of representative fiber-modes (FM). Each FM is assigned to a multivariate Gaussian distribution according to its population thereby leading to a Gaussian mixture model (GMM) representation for the entire set of fibers. The registration between two fiber sets is treated as the alignment of two GMMs and is performed by maximizing their correlation ratio. A nine-parameters affine transform is recovered and eventually refined to a twelve-parameters affine transform using an innovative mean-shift based registration refinement scheme presented in this paper. The validation of the algorithm on synthetic intrasubject data demonstrates its robustness to interrupted and deviating fiber artifacts as well as outliers. Using real intrasubject data, a comparison is conducted to other intensity based and fiber-based registration algorithms, demonstrating competitive results. An option for tracking-in-time, on specific white matter fiber tracts, is also demonstrated on the real data.}, doi = {10.1109/TMI.2009.2029097}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Zvitia et al. - 2010 - Co-registration of white matter tractographies by adaptive-mean-shift and Gaussian mixture modeling..pdf:pdf}, issn = {1558-0062}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Cluster Analysis,Diffusion Tensor Imaging,Diffusion Tensor Imaging: methods,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Models, Neurological,Normal Distribution,Reproducibility of Results}, month = jan, pmid = {19709970}, url = {http://www.ncbi.nlm.nih.gov/pubmed/19709970}, year = 2010 } @Article{Martinez2007, Author = {Martinez, Aleix M}, Title = {{Spherical-Homoscedastic Distributions : The Equivalency of Spherical and Normal Distributions in Classification}}, Journal = {Journal of Machine Learning Research}, Volume = {8}, Pages = {1583--1623}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Martinez - 2007 - Spherical-Homoscedastic Distributions The Equivalency of Spherical and Normal Distributions in Classification.pdf:pdf}, keywords = {computer vision,directional data,linear and non-linear classifiers,norm normalization,normal distributions,spherical distributions}, year = 2007 } @Article{Tu2007TransMedIm, Author = {Tu, Zhuowen and Narr, Katherine L. and Doll´ar, Piotr and Dinov, Ivo and Thompson, Paul M. and Toga, Arthur W.}, Title = {Brain Anatomical Structure Segmentation by Hybrid Discriminative/Generative Models}, Journal = {Transactions on Medical Imaging}, Volume = {in press}, abstract = {In this paper, a hybrid discriminative/generative model for brain anatomical structure segmentation is proposed. The learning aspect of the approach is emphasized. In the discriminative appearance models, various cues such as intensity and curvatures are combined to locally capture the complex appearances of different anatomical structures. A probabilistic boosting tree (PBT) framework is adopted to learn multi-class discriminative models that combine hundreds of features across different scales. On the generative side, Principal Component Analysis (PCA) shape models are used to capture the global shape information about each anatomical structure. The parameters to combine the discriminative appearance and generative shape models are also automatically learned. Thus low-level and highlevel information is learned and integrated in a hybrid model. Segmentations are obtained by minimizing an energy function associated with the proposed hybrid model. Finally, a gridface structure is designed to explicitly represent the 3D region topology. This representation handles an arbitrary number of regions and facilitates fast surface evolution. Our system was trained and tested on a set of 3D MRI volumes and the results obtained are encouraging.}, file = {attachment\:Tu2007TransMedIm.pdf:attachment\:Tu2007TransMedIm.pdf:PDF}, year = 2007 } @Article{Duru2010, Author = {Duru, Dilek G\"{o}ksel and Ozkan, Mehmed}, Title = {{Determination of neural fiber connections based on data structure algorithm.}}, Journal = {Computational intelligence and neuroscience}, Volume = {2010}, Pages = {251928}, abstract = {The brain activity during perception or cognition is mostly examined by functional magnetic resonance imaging (fMRI). However, the cause of the detected activity relies on the anatomy. Diffusion tensor magnetic resonance imaging (DTMRI) as a noninvasive modality providing in vivo anatomical information allows determining neural fiber connections which leads to brain mapping. Still a complete map of fiber paths representing the human brain is missing in literature. One of the main drawbacks of reliable fiber mapping is the correct detection of the orientation of multiple fibers within a single imaging voxel. In this study a method based on linear data structures is proposed to define the fiber paths regarding their diffusivity. Another advantage of the proposed method is that the analysis is applied on entire brain diffusion tensor data. The implementation results are promising, so that the method will be developed as a rapid fiber tractography algorithm for the clinical use as future study.}, doi = {10.1155/2010/251928}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Duru, Ozkan - 2010 - Determination of neural fiber connections based on data structure algorithm..pdf:pdf}, issn = {1687-5273}, keywords = {Algorithms,Brain,Brain: anatomy \& histology,Diffusion Tensor Imaging,Diffusion Tensor Imaging: methods,Humans,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: methods,Linear Models,Neural Pathways,Neural Pathways: anatomy \& histology,Uncertainty}, month = jan, pmid = {20069047}, url = {http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=2801001\&tool=pmcentrez\&rendertype=abstract}, year = 2010 } @Article{Tang1997, Author = {Tang, Y and Nyengaard, J R}, Title = {{A stereological method for estimating the total length and size of myelin fibers in human brain white matter.}}, Journal = {Journal of neuroscience methods}, Volume = {73}, Number = {2}, Pages = {193--200}, abstract = {A practically unbiased stereological method to obtain estimates of the volume and total length of nerve fibers in brain white matter is described. The sampling scheme is designed so that the majority of brain white matter is left intact, thus providing the possibility for resampling and further analysis. Uniform sampling of one complete hemispherical white matter is performed. The volume fraction of nerve fibers in white matter is estimated by point counting. The total length of nerve fibers was estimated from the product of the volume of white matter, obtained with the Cavalieri principle, and the fiber length density, obtained from the isotropic, uniform random sections which were ensured by the isector. The size of nerve fibers was derived by measuring the profile diameter perpendicular to its longest axis. The influence of the postmortem fixation delay on nerve fiber parameters was investigated in one dog and one pig. The criteria for identification of nerve fiber profiles at light microscopy were evaluated using electron microscopy.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tang, Nyengaard - 1997 - A stereological method for estimating the total length and size of myelin fibers in human brain white matter..pdf:pdf}, issn = {0165-0270}, keywords = {Adolescent,Adult,Animals,Brain,Brain: ultrastructure,Dogs,Female,Humans,Middle Aged,Models, Neurological,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Neurosciences,Neurosciences: methods,Swine}, month = may, pmid = {9196291}, url = {http://www.ncbi.nlm.nih.gov/pubmed/9196291}, year = 1997 } @Article{margolis5nal, Author = {Margolis, G. and Pickett, JP}, Title = {{New applications of the Luxol fast blue myelin stain.}}, Journal = {Laboratory investigation; a journal of technical methods and pathology}, Volume = {5}, Number = {6}, Pages = {459} } @Article{Ghosh2008, Author = {Ghosh, Aurobrata and Tsigaridas, Elias and Descoteaux, Maxime and Comon, Pierre and Mourrain, Bernard and Deriche, Rachid}, Title = {{A polynomial based approach to extract the maxima of an antipodally symmetric spherical function and its application to extract fiber directions from the Orientation Distribution Function in Diffusion MRI}}, Journal = {Tensor}, Pages = {237--248}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Ghosh et al. - 2008 - A polynomial based approach to extract the maxima of an antipodally symmetric spherical function and its application to extract fiber directions from the Orientation Distribution Function in Diffusion MRI.pdf:pdf}, year = 2008 } @Article{HTJ+03, Author = {Hagmann, P. and Thiran, J. P. and Jonasson, L. and Vandergheynst, P. and Clarke, S. and Maeder, P. and Meuli, R.}, Title = {D{TI} mapping of human brain connectivity: statistical fibre tracking and virtual dissection.}, Journal = {Neuroimage}, Volume = {19}, Number = {3}, Pages = {545-54}, abstract = {Several approaches have been used to trace axonal trajectories from diffusion MRI data. If such techniques were first developed in a deterministic framework reducing the diffusion information to one single main direction, more recent approaches emerged that were statistical in nature and that took into account the whole diffusion information. Based on diffusion tensor MRI data coming from normal brains, this paper presents how brain connectivity could be modelled globally by means of a random walk algorithm. The mass of connections thus generated was then virtually dissected to uncover different tracts. Corticospinal, corticobulbar, and corticothalamic tracts, the corpus callosum, the limbic system, several cortical association bundles, the cerebellar peduncles, and the medial lemniscus were all investigated. The results were then displayed in the form of an in vivo brain connectivity atlas. The connectivity pattern and the individual fibre tracts were then compared to known anatomical data; a good matching was found.}, authoraddress = {Signal Processing Institute, Swiss Federal Institute of Technology, 1015 Lausanne, Switzerland. patric.hagmann@epfl.ch}, keywords = {Algorithms ; Axons/physiology ; Brain/*anatomy \& histology ; *Brain Mapping ; Cerebellum/anatomy \& histology/physiology ; Cerebral Cortex/anatomy \& histology/physiology ; Computer Graphics ; Humans ; Image Processing, Computer-Assisted ; Magnetic Resonance Imaging ; Models, Neurological ; Nerve Fibers/*physiology ; Neural Pathways/*anatomy \& histology ; Pyramidal Tracts/anatomy \& histology/physiology ; Thalamus/anatomy \& histology/physiology}, language = {eng}, medline-aid = {S1053811903001423 [pii]}, medline-crdt = {2003/07/26 05:00}, medline-da = {20030725}, medline-dcom = {20030909}, medline-edat = {2003/07/26 05:00}, medline-fau = {Hagmann, P ; Thiran, J-P ; Jonasson, L ; Vandergheynst, P ; Clarke, S ; Maeder, P ; Meuli, R}, medline-is = {1053-8119 (Print)}, medline-jid = {9215515}, medline-jt = {NeuroImage}, medline-lr = {20041117}, medline-mhda = {2003/09/10 05:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {12880786}, medline-pst = {ppublish}, medline-pt = {Clinical Trial ; Journal Article}, medline-sb = {IM}, medline-so = {Neuroimage. 2003 Jul;19(3):545-54.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=12880786}, year = 2003 } @Article{Wassermann2004, Author = {Wassermann, Demian and Deriche, Rachid}, Title = {{Simultaneous Manifold Learning and Clustering : Grouping White Matter Fiber Tracts Using a Volumetric White Matter Atlas}}, Journal = {International Journal of Computer Vision}, Pages = {1--8}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Wassermann, Deriche - 2004 - Simultaneous Manifold Learning and Clustering Grouping White Matter Fiber Tracts Using a Volumetric White Matter Atlas.pdf:pdf}, year = 2004 } @Article{BKK+04, Author = {Bodammer, N. and Kaufmann, J. and Kanowski, M. and Tempelmann, C.}, Title = {Eddy current correction in diffusion-weighted imaging using pairs of images acquired with opposite diffusion gradient polarity.}, Journal = {Magn Reson Med}, Volume = {51}, Number = {1}, Pages = {188-93}, abstract = {In echo-planar-based diffusion-weighted imaging (DWI) and diffusion tensor imaging (DTI), the evaluation of diffusion parameters such as apparent diffusion coefficients and anisotropy indices is affected by image distortions that arise from residual eddy currents produced by the diffusion-sensitizing gradients. Correction methods that coregister diffusion-weighted and non-diffusion-weighted images suffer from the different contrast properties inherent in these image types. Here, a postprocessing correction scheme is introduced that makes use of the inverse characteristics of distortions generated by gradients with reversed polarity. In this approach, only diffusion-weighted images with identical contrast are included for correction. That is, non-diffusion-weighted images are not needed as a reference for registration. Furthermore, the acquisition of an additional dataset with moderate diffusion-weighting as suggested by Haselgrove and Moore (Magn Reson Med 1996;36:960-964) is not required. With phantom data it is shown that the theoretically expected symmetry of distortions is preserved in the images to a very high degree, demonstrating the practicality of the new method. Results from human brain images are also presented.}, authoraddress = {Department of Neurology II, Otto von Guericke University Magdeburg, Germany. bodammer@neuro2.med.uni-magdeburg.de}, keywords = {Algorithms ; Brain/*anatomy \& histology ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; *Image Processing, Computer-Assisted ; Phantoms, Imaging}, language = {eng}, medline-aid = {10.1002/mrm.10690 [doi]}, medline-ci = {Copyright 2003 Wiley-Liss, Inc.}, medline-crdt = {2004/01/06 05:00}, medline-da = {20040105}, medline-dcom = {20040507}, medline-edat = {2004/01/06 05:00}, medline-fau = {Bodammer, Nils ; Kaufmann, Jorn ; Kanowski, Martin ; Tempelmann, Claus}, medline-is = {0740-3194 (Print)}, medline-jid = {8505245}, medline-jt = {Magnetic resonance in medicine : official journal of the Society of Magnetic Resonance in Medicine / Society of Magnetic Resonance in Medicine}, medline-lr = {20061115}, medline-mhda = {2004/05/08 05:00}, medline-own = {NLM}, medline-pl = {United States}, medline-pmid = {14705060}, medline-pst = {ppublish}, medline-pt = {Journal Article ; Research Support, Non-U.S. Gov't}, medline-sb = {IM}, medline-so = {Magn Reson Med. 2004 Jan;51(1):188-93.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=14705060}, year = 2004 } @Article{Correia2009b, Author = {Correia, Stephen and Lee, Stephanie Y and Voorn, Thom and Tate, David F and Paul, Robert H and Salloway, Stephen P and Malloy, Paul F and Laidlaw, David H}, Title = {{NIH Public Access}}, Journal = {Water}, Volume = {42}, Number = {2}, Pages = {568--581}, doi = {10.1016/j.neuroimage.2008.05.022.Quantitative}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Correia et al. - 2009 - NIH Public Access.pdf:pdf}, year = 2009 } @Article{Wang1999, Author = {Wang, Y and Berg, P and Scherg, M}, Title = {{Common spatial subspace decomposition applied to analysis of brain responses under multiple task conditions: a simulation study.}}, Journal = {Clinical neurophysiology : official journal of the International Federation of Clinical Neurophysiology}, Volume = {110}, Number = {4}, Pages = {604--14}, abstract = {A method, called common spatial subspace decomposition, is presented which can extract signal components specific to one condition from multiple magnetoencephalography/electroencephalography data sets of multiple task conditions. Signal matrices or covariance matrices are decomposed using spatial factors common to multiple conditions. The spatial factors and corresponding spatial filters are then dissociated into specific and common parts, according to the common spatial subspace which exists among the data sets. Finally, the specific signal components are extracted using the corresponding spatial filters and spatial factors. The relationship between this decomposition and spatio-temporal source models is described in this paper. Computer simulations suggest that this method can facilitate the analysis of brain responses under multiple task conditions and merits further application.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Wang, Berg, Scherg - 1999 - Common spatial subspace decomposition applied to analysis of brain responses under multiple task conditions a simulation study..pdf:pdf}, issn = {1388-2457}, keywords = {Brain,Brain Mapping,Brain: physiology,Computer Simulation,Humans,Models, Neurological,Task Performance and Analysis}, month = apr, pmid = {10378728}, url = {http://www.ncbi.nlm.nih.gov/pubmed/10378728}, year = 1999 } @Article{Zhai2003, Author = {Zhai, Guihua and Lin, Weili and Wilber, Kathy P and Gerig, Guido and Gilmore, John H}, Title = {{Comparisons of regional white matter diffusion in healthy neonates and adults performed with a 3.0-T head-only MR imaging unit.}}, Journal = {Radiology}, Volume = {229}, Number = {3}, Pages = {673--81}, abstract = {PURPOSE: To evaluate the normal brains of adults and neonates for regional and age-related differences in apparent diffusion coefficient (ADC) and fractional anisotropy (FA). MATERIALS AND METHODS: Eight healthy adults and 20 healthy neonates were examined with a 3.0-T head-only magnetic resonance (MR) imaging unit by using a single-shot diffusion-tensor sequence. Trace ADC maps, FA maps, directional maps of the putative directions of white matter (WM) tracts, and fiber-tracking maps were obtained. Regions of interest-eight in WM and one in gray matter (GM)-were predefined for the ADC and FA measurements. The Student t test was used to compare FA and ADC between adults and neonates, whereas the Tukey multiple-comparison test was used to compare FA and ADC in different brain regions in the adult and neonate groups. RESULTS: A global elevation in ADC (P <.001) in both GM and WM and a reduction in FA (P <.001) in WM were observed in neonates as compared with these values in adults. In addition, significant regional variations in FA and ADC were observed in both groups. Regional variations in FA and ADC were less remarkable in adults, whereas neonates had consistently higher FA values and lower ADC values in the central WM as compared with these values in the peripheral WM. Fiber tracking revealed only major WM tracts in the neonates but fibers extending to the peripheral WM in the adults. CONCLUSION: There were regional differences in FA and ADC values in the neonates; such variations were less remarkable in the adults.}, doi = {10.1148/radiol.2293021462}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Zhai et al. - 2003 - Comparisons of regional white matter diffusion in healthy neonates and adults performed with a 3.0-T head-only MR imaging unit..pdf:pdf}, issn = {0033-8419}, keywords = {Adult,Age Factors,Brain,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: instrumentat,Humans,Infant, Newborn,ROC Curve}, month = dec, pmid = {14657305}, url = {http://www.ncbi.nlm.nih.gov/pubmed/14657305}, year = 2003 } @Article{Fillard2009, Author = {Fillard, P. and Poupon, C. and Mangin, J.F.}, Title = {{Spin Tracking: A Novel Global Tractography Algorithm}}, Journal = {NeuroImage}, Volume = {47}, Pages = {S127--S127}, doi = {10.1016/S1053-8119(09)71230-3}, issn = {10538119}, url = {http://dx.doi.org/10.1016/S1053-8119(09)71230-3}, year = 2009 } @Article{Behrens2003NatureNeuroscience, Author = {Behrens, T E J and Johansen-Berg, H and Woolrich, M W and Wheeler-Kingshott, C A M and Boulby, P A and Barker, G J and Sillery, E L and Sheehan, K and Ciccarellu, O and Thompson, A J and Brady, J M and Matthews, P M}, Title = {Non-invasive mapping of connections between human thalamus and cortex using diffusion imaging}, Journal = {Nature Neuroscience}, Volume = {6}, Number = {7}, Pages = {750-757}, abstract = {Evidence concerning anatomical connectivities in the human brain is sparse and based largely on limited post-mortem observations. Diffusion tensor imaging has previously been used to define large white-matter tracts in the living human brain, but this technique has had limited success in tracing pathways into gray matter. Here we identified specific connections between human thalamus and cortex using a novel probabilistic tractography algorithm with diffusion imaging data. Classification of thalamic gray matter based on cortical connectivity patterns revealed distinct subregions whose locations correspond to nuclei described previously in histological studies. The connections that we found between thalamus and cortex were similar to those reported for non-human primates and were reproducible between individuals. Our results provide the first quantitative demonstration of reliable inference of anatomical connectivity between human gray matter structures using diffusion data and the first connectivity-based segmentation of gray matter.}, file = {attachment\:Behrens2003NatureNeuroscience.pdf:attachment\:Behrens2003NatureNeuroscience.pdf:PDF}, publisher = {Nature Publishing Group}, year = 2003 } @Article{Joya, Author = {Joy, Kenneth I}, Title = {{Numerical Methods for Particle Tracing in Vector Fields}}, Journal = {Science}, Pages = {1--7}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Joy - Unknown - Numerical Methods for Particle Tracing in Vector Fields.pdf:pdf} } @Article{Blankertz2008, Author = {Blankertz, Benjamin and Tomioka, Ryota and Lemm, Steven and Kawanabe, Motoaki and M\"{u}ller, Klaus-robert}, Title = {{Optimizing Spatial Filters for Robust EEG Single-Trial Analysis}}, Journal = {Signal Processing}, Volume = {XX}, Pages = {1--12}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Blankertz et al. - 2008 - Optimizing Spatial Filters for Robust EEG Single-Trial Analysis.pdf:pdf}, year = 2008 } @Article{WirestamMRM2006, Author = {Wirestam, R. and Bibic, A. and Latt, J. and Brockstedt, S. and Stahlberg, F.}, Title = {{Denoising of complex MRI data by wavelet-domain filtering: Application to high-b-value diffusion-weighted imaging}}, Journal = {Magnetic Resonance in Medicine}, Volume = {56}, Number = {5}, publisher = {Wiley Subscription Services, Inc., A Wiley Company Hoboken}, year = 2006 } @Article{Lenglet2010, Author = {Lenglet, Christophe and Series, I M A Preprint and Hall, Lind and E, Church Street S and Aganj, Iman and Sapiro, Guillermo}, Title = {{ODF MAXIMA EXTRACTION IN INSTITUTE FOR MATHEMATICS AND ITS APPLICATIONS ODF Maxima Extraction in Spherical Harmonic Representation via Analytical Search Space Reduction}}, Journal = {Methods}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Lenglet et al. - 2010 - ODF MAXIMA EXTRACTION IN INSTITUTE FOR MATHEMATICS AND ITS APPLICATIONS ODF Maxima Extraction in Spherical Harmonic Representation via Analytical Search Space Reduction.pdf:pdf}, year = 2010 } @Article{Bai2009, Author = {Bai, Y}, Title = {{Correcting for Motion between Acquisitions in Diffusion MR Imaging}}, Journal = {Chart}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Bai - 2009 - Correcting for Motion between Acquisitions in Diffusion MR Imaging.pdf:pdf}, year = 2009 } @Book{mcrobbie2006mpp, Author = {McRobbie, D.W. and Moore, E.A. and Graves, M.J.}, Title = {{MRI from Picture to Proton}}, Publisher = {Cambridge University Press}, year = 2006 } @Article{Tang1997a, Author = {Tang, Y and Nyengaard, J R}, Title = {{A stereological method for estimating the total length and size of myelin fibers in human brain white matter.}}, Journal = {Journal of neuroscience methods}, Volume = {73}, Number = {2}, Pages = {193--200}, abstract = {A practically unbiased stereological method to obtain estimates of the volume and total length of nerve fibers in brain white matter is described. The sampling scheme is designed so that the majority of brain white matter is left intact, thus providing the possibility for resampling and further analysis. Uniform sampling of one complete hemispherical white matter is performed. The volume fraction of nerve fibers in white matter is estimated by point counting. The total length of nerve fibers was estimated from the product of the volume of white matter, obtained with the Cavalieri principle, and the fiber length density, obtained from the isotropic, uniform random sections which were ensured by the isector. The size of nerve fibers was derived by measuring the profile diameter perpendicular to its longest axis. The influence of the postmortem fixation delay on nerve fiber parameters was investigated in one dog and one pig. The criteria for identification of nerve fiber profiles at light microscopy were evaluated using electron microscopy.}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Tang, Nyengaard - 1997 - A stereological method for estimating the total length and size of myelin fibers in human brain white matter..pdf:pdf}, issn = {0165-0270}, keywords = {Adolescent,Adult,Animals,Brain,Brain: ultrastructure,Dogs,Female,Humans,Middle Aged,Models, Neurological,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Neurosciences,Neurosciences: methods,Swine}, month = may, pmid = {9196291}, url = {http://www.ncbi.nlm.nih.gov/pubmed/9196291}, year = 1997 } @Article{Bullmore2009, Author = {Bullmore, E and Sporns, O}, Title = {{Complex brain networks: graph theoretical analysis of structural and functional systems}}, Journal = {Nature Reviews Neuroscience}, Volume = {10}, Number = {3}, Pages = {186--198}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Bullmore, Sporns - 2009 - Complex brain networks graph theoretical analysis of structural and functional systems.pdf:pdf}, year = 2009 } @Article{Pajevic1999, Author = {Pajevic, Sinisa and Pierpaoli, Carlo}, Title = {{Color schemes to represent the orientation of anisotropic tissues from diffusion tensor data: Application to white matter fiber tract mapping in the human brain}}, Journal = {Magnetic Resonance in Medicine}, Volume = {42}, Number = {3}, abstract = {This paper investigates the use of color to represent the directional information contained in the diffusion tensor. Ideally, one wants to take into account both the properties of human color vision and of the given display hardware to produce a representation in which differences in the orientation of anisotropic structures are proportional to the perceived differences in color. It is argued here that such a goal cannot be achieved in general and therefore, empirical or heuristic schemes, which avoid some of the common artifacts of previously proposed approaches, are implemented. Directionally encoded color (DEC) maps of the human brain obtained using these schemes clearly show the main association, projection, and commissural white matter pathways. In the brainstem, motor and sensory pathways are easily identified and can be differentiated from the transverse pontine fibers and the cerebellar peduncles. DEC maps obtained from diffusion tensor imaging data provide a simple and effective way to visualize fiber direction, useful for investigating the structural anatomy of different organs. Magn Reson Med 42:526-540, 1999. © 1999 Wiley-Liss, Inc.}, doi = {10.1002/(SICI)1522-2594(199909)42:3<526::AID-MRM15>3.0.CO;2-J}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Pajevic, Pierpaoli - 1999 - Color schemes to represent the orientation of anisotropic tissues from diffusion tensor data Application to white matter fiber tract mapping in the human brain.pdf:pdf}, url = {http://www3.interscience.wiley.com/journal/63500786/abstract}, year = 1999 } @Article{DauguetNeuroImage2007, Author = {Dauguet, J. and Peled, S. and Berezovskii, V. and Delzescaux, T. and Warfield, S. K. and Born, R. and Westin, C. F.}, Title = {Comparison of fiber tracts derived from in-vivo {DTI} tractography with 3{D} histological neural tract tracer reconstruction on a macaque brain.}, Journal = {Neuroimage}, Volume = {37}, Number = {2}, Pages = {530-8}, abstract = {Since the introduction of diffusion weighted imaging (DWI) as a method for examining neural connectivity, its accuracy has not been formally evaluated. In this study, we directly compared connections that were visualized using injected neural tract tracers (WGA-HRP) with those obtained using in-vivo diffusion tensor imaging (DTI) tractography. First, we injected the tracer at multiple sites in the brain of a macaque monkey; second, we reconstructed the histological sections of the labeled fiber tracts in 3D; third, we segmented and registered the fibers (somatosensory and motor tracts) with the anatomical in-vivo MRI from the same animal; and last, we conducted fiber tracing along the same pathways on the DTI data using a classical diffusion tracing technique with the injection sites as seeds. To evaluate the performance of DTI fiber tracing, we compared the fibers derived from the DTI tractography with those segmented from the histology. We also studied the influence of the parameters controlling the tractography by comparing Dice superimposition coefficients between histology and DTI segmentations. While there was generally good visual agreement between the two methods, our quantitative comparisons reveal certain limitations of DTI tractography, particularly for regions at remote locations from seeds. We have thus demonstrated the importance of appropriate settings for realistic tractography results.}, authoraddress = {Computational Radiology Laboratory, Children's Hospital, Harvard Medical School, Boston, USA. dauguet@bwh.harvard.edu}, keywords = {Animals ; Anisotropy ; Brain/*anatomy \& histology ; *Diffusion Magnetic Resonance Imaging ; Image Processing, Computer-Assisted ; *Imaging, Three-Dimensional ; Immunohistochemistry ; Macaca ; Nerve Fibers/ultrastructure ; Neural Pathways/*cytology}, language = {eng}, medline-aid = {S1053-8119(07)00328-X [pii] ; 10.1016/j.neuroimage.2007.04.067 [doi]}, medline-crdt = {2007/07/03 09:00}, medline-da = {20070730}, medline-dcom = {20071012}, medline-dep = {20070524}, medline-edat = {2007/07/03 09:00}, medline-fau = {Dauguet, Julien ; Peled, Sharon ; Berezovskii, Vladimir ; Delzescaux, Thierry ; Warfield, Simon K ; Born, Richard ; Westin, Carl-Fredrik}, medline-gr = {P01 HD18655/HD/NICHD NIH HHS/United States ; P30-EY12196/EY/NEI NIH HHS/United States ; P41 RR013218/RR/NCRR NIH HHS/United States ; R01 HL074942/HL/NHLBI NIH HHS/United States ; R01 RR021885/RR/NCRR NIH HHS/United States ; R01-MH50747/MH/NIMH NIH HHS/United States ; R21 MH067054/MH/NIMH NIH HHS/United States ; U41 RR019703/RR/NCRR NIH HHS/United States ; U54 EB005149/EB/NIBIB NIH HHS/United States}, medline-is = {1053-8119 (Print)}, medline-jid = {9215515}, medline-jt = {NeuroImage}, medline-lr = {20071203}, medline-mhda = {2007/10/13 09:00}, medline-own = {NLM}, medline-phst = {2007/01/25 [received] ; 2007/04/05 [revised] ; 2007/04/10 [accepted] ; 2007/05/24 [aheadofprint]}, medline-pl = {United States}, medline-pmid = {17604650}, medline-pst = {ppublish}, medline-pt = {Comparative Study ; Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't ; Research Support, U.S. Gov't, Non-P.H.S.}, medline-sb = {IM}, medline-so = {Neuroimage. 2007 Aug 15;37(2):530-8. Epub 2007 May 24.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=17604650}, year = 2007 } @Article{Jonasson2007, Author = {Jonasson, Lisa and Bresson, Xavier and Thiran, Jean-Philippe and Wedeen, Van J and Hagmann, Patric}, Title = {{Representing diffusion MRI in 5-D simplifies regularization and segmentation of white matter tracts.}}, Journal = {IEEE transactions on medical imaging}, Volume = {26}, Number = {11}, Pages = {1547--54}, abstract = {We present a new five-dimensional (5-D) space representation of diffusion magnetic resonance imaging (dMRI) of high angular resolution. This 5-D space is basically a non-Euclidean space of position and orientation in which crossing fiber tracts can be clearly disentangled, that cannot be separated in three-dimensional position space. This new representation provides many possibilities for processing and analysis since classical methods for scalar images can be extended to higher dimensions even if the spaces are not Euclidean. In this paper, we show examples of how regularization and segmentation of dMRI is simplified with this new representation. The regularization is used with the purpose of denoising and but also to facilitate the segmentation task by using several scales, each scale representing a different level of resolution. We implement in five dimensions the Chan-Vese method combined with active contours without edges for the segmentation and the total variation functional for the regularization. The purpose of this paper is to explore the possibility of segmenting white matter structures directly as entirely separated bundles in this 5-D space. We will present results from a synthetic model and results on real data of a human brain acquired with diffusion spectrum magnetic resonance imaging (MRI), one of the dMRI of high angular resolution available. These results will lead us to the conclusion that this new high-dimensional representation indeed simplifies the problem of segmentation and regularization.}, doi = {10.1109/TMI.2007.899168}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Jonasson et al. - 2007 - Representing diffusion MRI in 5-D simplifies regularization and segmentation of white matter tracts..pdf:pdf}, issn = {0278-0062}, keywords = {Algorithms,Artificial Intelligence,Brain,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Nerve Fibers, Myelinated,Nerve Fibers, Myelinated: ultrastructure,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity}, month = nov, pmid = {18041269}, url = {http://www.ncbi.nlm.nih.gov/pubmed/18041269}, year = 2007 } @Article{Frenkel2003, Author = {Frenkel, Max and Basri, Ronen}, Title = {{Using the Fast Marching Method}}, Pages = {35--51}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Frenkel, Basri - 2003 - Using the Fast Marching Method.pdf:pdf}, year = 2003 } @Article{Laidlaw, Author = {Laidlaw, David H}, Title = {{Similarity Coloring of DTI Fiber Tracts}}, Journal = {Science}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Laidlaw - Unknown - Similarity Coloring of DTI Fiber Tracts.pdf:pdf} } @Article{Parker2004BJR, Author = {Parker, G J M}, Title = {{Analysis of MR diffusion weighted images}}, Journal = {Br J Radiol}, Volume = {77}, Number = {suppl_2}, Pages = {S176-185}, abstract = {Diffusion-weighted MR images provide information that is present in no other imaging modality. Whilst some of this information may be appreciated visually in diffusion weighted images, much of it may be extracted only with the aid of data post-processing. This review summarizes the methods available for interpreting diffusion weighted imaging (DWI) information using the diffusion tensor and other models of the DWI signal. This is followed by an overview of methods that allow the estimation of fibre tract orientation and that provide estimates of the routes and degree of anatomical cerebral white matter connectivity. }, doi = {10.1259/bjr/81090732}, eprint = {http://bjr.birjournals.org/cgi/reprint/77/suppl_2/S176.pdf}, file = {attachment\:Parker2004BJR.pdf:attachment\:Parker2004BJR.pdf:PDF}, url = {http://bjr.birjournals.org/cgi/content/abstract/77/suppl_2/S176}, year = 2004 } @Article{Prentice1984, Author = {Prentice, Michael J.}, Title = {{A distribution-free method of interval estimation for unsigned directional data}}, Journal = {Biometrika}, Volume = {71}, Number = {1}, Pages = {147--154}, doi = {10.1093/biomet/71.1.147}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Prentice - 1984 - A distribution-free method of interval estimation for unsigned directional data.pdf:pdf}, issn = {0006-3444}, url = {http://biomet.oxfordjournals.org/cgi/doi/10.1093/biomet/71.1.147}, year = 1984 } @Article{MelieGarcia2008NeuroImage, Author = {Melie-Garcia, Lester and Canales-Rodriguez, Erick J. and Aleman-Gomez, Yasser and Lin, Ching-Po and Iturria-Medina, Yasser and Valdes-Hernandez, Pedro A. }, Title = {A bayesian framework to identify principal intravoxel diffusion profiles based on diffusion-weighted \{{M}{R}\} imaging}, Journal = {NeuroImage}, Volume = {42}, Number = {2}, Pages = {750-770}, abstract = {In this paper we introduce a new method to characterize the intravoxel anisotropy based on diffusion-weighted imaging (DWI). The proposed solution, under a fully Bayesian formalism, deals with the problem of joint Bayesian Model selection and parameter estimation to reconstruct the principal diffusion profiles or primary fiber orientations in a voxel. We develop an efficient stochastic algorithm based on the reversible jump Markov chain Monte Carlo (RJMCMC) method in order to perform the Bayesian computation. RJMCMC is a good choice for this problem because of its ability to jump between models of different dimensionality. This methodology provides posterior estimates of the parameters of interest (fiber orientation, diffusivities etc) unconditional of the model assumed. It also gives an empirical posterior distribution of the number of primary nerve fiber orientations given the DWI data. Different probability maps can be assessed using this methodology: 1) the intravoxel fiber orientation map (or orientational distribution function) that gives the probability of finding a fiber in a particular spatial orientation; 2) a three-dimensional map of the probability of finding a particular number of fibers in each voxel; 3) a three-dimensional MaxPro (maximum probability) map that provides the most probable number of fibers for each voxel. In order to study the performance and reliability of the presented approach, we tested it on synthetic data; an ex-vivo phantom of intersecting capillaries; and DWI data from a human subject.}, file = {attachment\:MelieGarcia2008NeuroImage.pdf:attachment\:MelieGarcia2008NeuroImage.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4SD6SK8-3/2/8c1ea05184c975fa63eb37b877737d9f}, year = 2008 } @Article{Dougherty2005, Author = {Dougherty, Robert F and Ben-Shachar, Michal and Bammer, Roland and Brewer, Alyssa a and Wandell, Brian a}, Title = {{Functional organization of human occipital-callosal fiber tracts.}}, Journal = {Proceedings of the National Academy of Sciences of the United States of America}, Volume = {102}, Number = {20}, Pages = {7350--5}, abstract = {Diffusion tensor imaging (DTI) and fiber tracking (FT) were used to measure the occipital lobe fiber tracts connecting the two hemispheres in individual human subjects. These tracts are important for normal vision. Also, damage to portions of these tracts is associated with alexia. To assess the reliability of the DTI-FT measurements, occipital-callosal projections were estimated from each subject's left and right hemispheres independently. The left and right estimates converged onto the same positions within the splenium. We further characterized the properties of the estimated occipital-callosal fiber tracts by combining them with functional MRI. We used functional MRI to identify visual field maps in cortex and labeled fibers by the cortical functional response at the fiber endpoint. This labeling reveals a regular organization of the fibers within the splenium. The dorsal visual maps (dorsal V3, V3A, V3B, V7) send projections through a large band in the middle of the splenium, whereas ventral visual maps (ventral V3, V4) send projections through the inferior-anterior corner of the splenium. The agreement between the independent left/right estimates, further supported by previous descriptions of homologous tracts in macaque, validates the DTI-FT methods. However, a principal limitation of these methods is low sensitivity: a large number of fiber tracts that connect homotopic regions of ventral and lateral visual cortex were undetected. We conclude that most of the estimated tracts are real and can be localized with a precision of 1-2 mm, but many tracts are missed because of data and algorithm limitations.}, doi = {10.1073/pnas.0500003102}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Dougherty et al. - 2005 - Functional organization of human occipital-callosal fiber tracts..pdf:pdf}, issn = {0027-8424}, keywords = {Adult,Algorithms,Brain Mapping,Corpus Callosum,Corpus Callosum: cytology,Echo-Planar Imaging,Echo-Planar Imaging: methods,Female,Humans,Magnetic Resonance Imaging,Male,Middle Aged,Occipital Lobe,Occipital Lobe: cytology,Visual Fields,Visual Fields: physiology}, month = may, pmid = {15883384}, url = {http://www.ncbi.nlm.nih.gov/pubmed/15883384}, year = 2005 } @Article{Behrens2007NeuroImage, Author = {Behrens, T.E.J. and Johansen-Berg, H. and Jbabdi, S. and Rushworth, M.F.S. and Woolrich, M.W.}, Title = {Probabilistic diffusion tractography with multiple fibre orientations: What can we gain?}, Journal = {NeuroImage}, Volume = {34}, Number = {1}, Pages = {144-155}, abstract = {We present a direct extension of probabilistic diffusion tractography to the case of multiple fibre orientations. Using automatic relevance determination, we are able to perform online selection of the number of fibre orientations supported by the data at each voxel, simplifying the problem of tracking in a multi-orientation field. We then apply the identical probabilistic algorithm to tractography in the multi- and single-fibre cases in a number of example systems which have previously been tracked successfully or unsuccessfully with single-fibre tractography. We show that multi-fibre tractography offers significant advantages in sensitivity when tracking non-dominant fibre populations, but does not dramatically change tractography results for the dominant pathways.}, file = {attachment\:Behrens2007NeuroImage.pdf:attachment\:Behrens2007NeuroImage.pdf:PDF}, publisher = {Elsevier}, url = {http://www.sciencedirect.com/science/article/B6WNP-4M6SBH3-4/2/043728426dfb426bd39df3b8d3751bed}, year = 2007 } @Article{Catani2002NeuroImage, Author = {Catani, Marco and Howard, Robert J. and Pajevic, Sinisa and Jones, Derek K.}, Title = {Virtual {in vivo} interactive dissection of white matter fasciculi in the human brain }, Journal = {NeuroImage}, Volume = {17}, Pages = {77-94}, abstract = {This work reports the use of diffusion tensor magnetic resonance tractography to visualize the three-dimensional (3D) structure of the major white matter fasciculi within living human brain. Specifically, we applied this technique to visualize in vivo (i) the superior longitudinal (arcuate) fasciculus, (ii) the inferior longitudinal fasciculus, (iii) the superior fronto-occipital (subcallosal) fasciculus, (iv) the inferior frontooccipital fasciculus, (v) the uncinate fasciculus, (vi) the cingulum, (vii) the anterior commissure, (viii) the corpus callosum, (ix) the internal capsule, and (x) the fornix. These fasciculi were first isolated and were then interactively displayed as a 3D-rendered object. The virtual tract maps obtained in vivo using this approach were faithful to the classical descriptions of white matter anatomy that have previously been documented in postmortem studies. Since we have been able to interactively delineate and visualize white matter fasciculi over their entire length in vivo, in a manner that has only previously been possible by histological means, “virtual in vivo interactive dissection” (VIVID) adds a new dimension to anatomical descriptions of the living human brain.}, doi = {10.1006/nimg.2002.1136}, file = {attachment\:Catani2002NeuroImage.pdf:attachment\:Catani2002NeuroImage.pdf:PDF}, publisher = {Elsevier}, year = 2002 } @Article{Marinucci2008a, Author = {Marinucci, D and Pietrobon, D and Balbi, A and Baldi, P and Cabella, P and Kerkyacharian, G and Natoli, P and Picard, D and Vittorio, N}, Title = {{Spherical Needlets for CMB Data Analysis}}, Volume = {000}, Number = {February}, arxivid = {arXiv:0707.0844v1}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Marinucci et al. - 2008 - Spherical Needlets for CMB Data Analysis.pdf:pdf}, year = 2008 } @Article{DoughertyPNAS2005, Author = {Dougherty, R. F. and Ben-Shachar, M. and Bammer, R. and Brewer, A. A. and Wandell, B. A.}, Title = {Functional organization of human occipital-callosal fiber tracts.}, Journal = {Proc Natl Acad Sci U S A}, Volume = {102}, Number = {20}, Pages = {7350-5}, abstract = {Diffusion tensor imaging (DTI) and fiber tracking (FT) were used to measure the occipital lobe fiber tracts connecting the two hemispheres in individual human subjects. These tracts are important for normal vision. Also, damage to portions of these tracts is associated with alexia. To assess the reliability of the DTI-FT measurements, occipital-callosal projections were estimated from each subject's left and right hemispheres independently. The left and right estimates converged onto the same positions within the splenium. We further characterized the properties of the estimated occipital-callosal fiber tracts by combining them with functional MRI. We used functional MRI to identify visual field maps in cortex and labeled fibers by the cortical functional response at the fiber endpoint. This labeling reveals a regular organization of the fibers within the splenium. The dorsal visual maps (dorsal V3, V3A, V3B, V7) send projections through a large band in the middle of the splenium, whereas ventral visual maps (ventral V3, V4) send projections through the inferior-anterior corner of the splenium. The agreement between the independent left/right estimates, further supported by previous descriptions of homologous tracts in macaque, validates the DTI-FT methods. However, a principal limitation of these methods is low sensitivity: a large number of fiber tracts that connect homotopic regions of ventral and lateral visual cortex were undetected. We conclude that most of the estimated tracts are real and can be localized with a precision of 1-2 mm, but many tracts are missed because of data and algorithm limitations.}, authoraddress = {Stanford Institute for Reading and Learning, Department of Psychology, Stanford University, Stanford, CA 94305, USA. bobd@stanford.edu}, keywords = {Adult ; Algorithms ; *Brain Mapping ; Corpus Callosum/*cytology ; Echo-Planar Imaging/methods ; Female ; Humans ; Magnetic Resonance Imaging ; Male ; Middle Aged ; Occipital Lobe/*cytology ; Visual Fields/physiology}, language = {eng}, medline-aid = {0500003102 [pii] ; 10.1073/pnas.0500003102 [doi]}, medline-crdt = {2005/05/11 09:00}, medline-da = {20050518}, medline-dcom = {20050713}, medline-dep = {20050509}, medline-edat = {2005/05/11 09:00}, medline-fau = {Dougherty, Robert F ; Ben-Shachar, Michal ; Bammer, Roland ; Brewer, Alyssa A ; Wandell, Brian A}, medline-gr = {EY-015000/EY/NEI NIH HHS/United States ; EY-03164/EY/NEI NIH HHS/United States}, medline-is = {0027-8424 (Print)}, medline-jid = {7505876}, medline-jt = {Proceedings of the National Academy of Sciences of the United States of America}, medline-lr = {20081120}, medline-mhda = {2005/07/14 09:00}, medline-oid = {NLM: PMC1129102}, medline-own = {NLM}, medline-phst = {2005/05/09 [aheadofprint]}, medline-pl = {United States}, medline-pmc = {PMC1129102}, medline-pmid = {15883384}, medline-pst = {ppublish}, medline-pt = {Comparative Study ; Journal Article ; Research Support, N.I.H., Extramural ; Research Support, Non-U.S. Gov't ; Research Support, U.S. Gov't, P.H.S.}, medline-sb = {IM}, medline-so = {Proc Natl Acad Sci U S A. 2005 May 17;102(20):7350-5. Epub 2005 May 9.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=15883384}, year = 2005 } @Article{ValentinaTomassini09192007, Author = {Tomassini, Valentina and Jbabdi, Saad and Klein, Johannes C. and Behrens, Timothy E. J. and Pozzilli, Carlo and Matthews, Paul M. and Rushworth, Matthew F. S. and Johansen-Berg, Heidi}, Title = {Diffusion-Weighted Imaging Tractography-Based Parcellation of the Human Lateral Premotor Cortex Identifies Dorsal and Ventral Subregions with Anatomical and Functional Specializations}, Journal = {J. Neurosci.}, Volume = {27}, Number = {38}, Pages = {10259-10269}, abstract = {Lateral premotor cortex (PM) in the macaque monkey can be segregated into structurally and functionally distinct subregions, including a major division between dorsal (PMd) and ventral (PMv) parts, which have distinct cytoarchitecture, function, and patterns of connectivity with both frontal and parietal cortical areas. The borders of their subregions are less well defined in the human brain. Here we use diffusion tractography to identify a reproducible border between dorsal and ventral subregions of human precentral gyrus. We derive connectivity fingerprints for the two subregions and demonstrate that each has a distinctive pattern of connectivity with frontal cortex and lateral parietal cortex, suggesting that these areas correspond to human PMd and PMv. Although putative human PMd has a high probability of connection with the superior parietal lobule, dorsal prefrontal cortex, and cingulate cortex, human PMv has a higher probability of connection with the anterior inferior parietal lobule and ventral prefrontal cortex. Finally, we assess the correspondence between our PMd/PMv border and local sulcal and functional anatomy. The location of the border falls at the level of the gyral branch that divides the inferior precentral sulcus from the superior precentral sulcus and corresponded closely to the location of a functional border defined using previous functional magnetic resonance imaging studies.}, doi = {10.1523/JNEUROSCI.2144-07.2007}, eprint = {http://www.jneurosci.org/cgi/reprint/27/38/10259.pdf}, file = {attachment\:tomassini_parcellation_2007.pdf:attachment\:tomassini_parcellation_2007.pdf:PDF}, url = {http://www.jneurosci.org/cgi/content/abstract/27/38/10259}, year = 2007 } @Article{Behrens2003MRM, Author = {Behrens, T. E. J. and Woolrich, M. W. and Jenkinson, M. and Johansen-Berg, H. and Nunes, R. G. and Clare, S. and Matthews, P. M. and Brady, J. M. and Smith, S. M.}, Title = {Characterization and propagation of uncertainty in diffusion-weighted \{{M}{R}\} imaging}, Journal = {Magnetic Resonance in Medicine}, Volume = {50}, Pages = {1077-1088}, abstract = {A fully probabilistic framework is presented for estimating local probability density functions on parameters of interest in a model of diffusion. This technique is applied to the estimation of parameters in the diffusion tensor model, and also to a simple partial volume model of diffusion. In both cases the parameters of interest include parameters defining local fiber direction. A technique is then presented for using these density functions to estimate global connectivity (i.e., the probability of the existence of a connection through the data field, between any two distant points), allowing for the quantification of belief in tractography results. This technique is then applied to the estimation of the cortical connectivity of the human thalamus. The resulting connectivity distributions correspond well with predictions from invasive tracer methods in nonhuman primate.}, file = {attachment\:Behrens2003MRM.pdf:attachment\:Behrens2003MRM.pdf:PDF}, publisher = {Wiley-Liss}, year = 2003 } @Article{ODonnell_MICCAI06, Author = {O'Donnell, L. and Westin, C. F.}, Title = {High-dimensional white matter atlas generation and group analysis.}, Journal = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv}, Volume = {9}, Number = {Pt 2}, Pages = {243-51}, abstract = {We present a two-step process including white matter atlas generation and automatic segmentation. Our atlas generation method is based on population fiber clustering. We produce an atlas which contains high-dimensional descriptors of fiber bundles as well as anatomical label information. We use the atlas to automatically segment tractography in the white matter of novel subjects and we present quantitative results (FA measurements) in segmented white matter regions from a small population. We demonstrate reproducibility of these measurements across scans. In addition, we introduce the idea of using clustering for automatic matching of anatomical structures across hemispheres.}, authoraddress = {Computer Science and Artificial Intelligence Laboratory, Massachusetts Institute of Technology, Cambridge MA, USA. lauren@csail.mit.edu}, keywords = {Algorithms ; Anatomy, Artistic/methods ; *Artificial Intelligence ; Brain/*anatomy \& histology ; Cluster Analysis ; Computer Simulation ; Diffusion Magnetic Resonance Imaging/*methods ; Humans ; Image Enhancement/methods ; Image Interpretation, Computer-Assisted/*methods ; Imaging, Three-Dimensional/methods ; Medical Illustration ; Models, Anatomic ; Nerve Fibers, Myelinated/*ultrastructure ; Neural Pathways/*anatomy \& histology ; Pattern Recognition, Automated/*methods ; Reproducibility of Results ; Sensitivity and Specificity}, language = {eng}, medline-crdt = {2007/03/16 09:00}, medline-da = {20070314}, medline-dcom = {20070406}, medline-edat = {2007/03/16 09:00}, medline-fau = {O'Donnell, Lauren ; Westin, Carl-Fredrik}, medline-gr = {P41 RR15241-01A1/RR/NCRR NIH HHS/United States ; P41-RR13218/RR/NCRR NIH HHS/United States ; R01 AG20012-01/AG/NIA NIH HHS/United States ; R01 MH 50747/MH/NIMH NIH HHS/United States ; U24-RR021382/RR/NCRR NIH HHS/United States ; U54-EB005149/EB/NIBIB NIH HHS/United States}, medline-jid = {101249582}, medline-jt = {Medical image computing and computer-assisted intervention : MICCAI ... International Conference on Medical Image Computing and Computer-Assisted Intervention}, medline-lr = {20071203}, medline-mhda = {2007/04/07 09:00}, medline-own = {NLM}, medline-pl = {Germany}, medline-pmid = {17354778}, medline-pst = {ppublish}, medline-pt = {Evaluation Studies ; Journal Article ; Research Support, N.I.H., Extramural}, medline-sb = {IM}, medline-so = {Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv. 2006;9(Pt 2):243-51.}, medline-stat = {MEDLINE}, url = {http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=17354778}, year = 2006 } @Article{Correia2009, Author = {Correia, Marta Morgado}, Title = {{Development of Methods for the Acquisition and Analysis of Diffusion Weighted MRI Data}}, Journal = {Brain}, Number = {June}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Correia - 2009 - Development of Methods for the Acquisition and Analysis of Diffusion Weighted MRI Data.pdf:pdf}, year = 2009 } @Article{jbabdi2007bfg, Author = {Jbabdi, S. and Woolrich, MW and Andersson, JLR and Behrens, TEJ}, Title = {{A Bayesian framework for global tractography}}, Journal = {Neuroimage}, Volume = {37}, Number = {1}, Pages = {116--129}, publisher = {Elsevier}, year = 2007 } @Article{Jian2007aNeuroImage, Author = {Jian, Bing and Vemuri, Baba C. and Ozarslan, Evren and Carney, Paul R. and Mareci, Thomas H.}, Title = {A novel tensor distribution model for the diffusion-weighted \{{M}{R}\} signal}, Journal = {NeuroImage}, Volume = {37}, Number = {1}, Pages = {164-176}, abstract = {Diffusion MRI is a non-invasive imaging technique that allows the measurement of water molecule diffusion through tissue in vivo. The directional features of water diffusion allow one to infer the connectivity patterns prevalent in tissue and possibly track changes in this connectivity over time for various clinical applications. In this paper, we present a novel statistical model for diffusion-weighted MR signal attenuation which postulates that the water molecule diffusion can be characterized by a continuous mixture of diffusion tensors. An interesting observation is that this continuous mixture and the MR signal attenuation are related through the Laplace transform of a probability distribution over symmetric positive definite matrices. We then show that when the mixing distribution is a Wishart distribution, the resulting closed form of the Laplace transform leads to a Rigaut-type asymptotic fractal expression, which has been phenomenologically used in the past to explain the MR signal decay but never with a rigorous mathematical justification until now. Our model not only includes the traditional diffusion tensor model as a special instance in the limiting case, but also can be adjusted to describe complex tissue structure involving multiple fiber populations. Using this new model in conjunction with a spherical deconvolution approach, we present an efficient scheme for estimating the water molecule displacement probability functions on a voxel-by-voxel basis. Experimental results on both simulations and real data are presented to demonstrate the robustness and accuracy of the proposed algorithms.}, file = {attachment\:Jian2007aNeuroImage.pdf:attachment\:Jian2007aNeuroImage.pdf:PDF}, url = {http://www.sciencedirect.com/science/article/B6WNP-4NMSRV9-3/2/b4bc62020864c9b5767ce1e87874128a}, year = 2007 } @Article{Chen2006, Author = {Chen, Bin and Guo, Hua and Song, Allen W}, Title = {{Correction for direction-dependent distortions in diffusion tensor imaging using matched magnetic field maps.}}, Journal = {NeuroImage}, Volume = {30}, Number = {1}, Pages = {121--9}, abstract = {Diffusion tensor imaging (DTI) has seen increased usage in clinical and basic science research in the past decade. By assessing the water diffusion anisotropy within biological tissues, e.g. brain, researchers can infer different fiber structures important for neural pathways. A typical DTI data set contains at least one base image and six diffusion-weighted images along non-collinear encoding directions. The resultant images can then be combined to derive the three principal axes of the diffusion tensor and their respective cross terms, which can in turn be used to compute fractional anisotropy (FA) maps, apparent diffusion coefficient (ADC) maps, and to construct axonal fibers. The above operations all assume that DTI images along different diffusion-weighting directions for the same brain register to each other without spatial distortions. This assumption is generally false, as the large diffusion-weighting gradients would usually induce eddy currents to generate diffusion-weighting direction-dependent field gradients, leading to mis-registration within the DTI data set. Traditional methods for correcting magnetic field-induced distortions do not usually take into account these direction-dependent eddy currents unique for DTI, and they are usually time-consuming because multiple phase images need to be acquired. In this report, we describe our theory and implementation of an efficient and effective method to correct for the main field and eddy current-induced direction-dependent distortions for DTI images under a unified framework to facilitate the daily practice of DTI acquisitions.}, doi = {10.1016/j.neuroimage.2005.09.008}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Chen, Guo, Song - 2006 - Correction for direction-dependent distortions in diffusion tensor imaging using matched magnetic field maps..pdf:pdf}, issn = {1053-8119}, keywords = {Anisotropy,Artifacts,Brain,Brain Mapping,Brain: anatomy \& histology,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: statistics \&,Echo-Planar Imaging,Echo-Planar Imaging: statistics \& numerical data,Humans,Image Enhancement,Image Enhancement: methods,Image Processing, Computer-Assisted,Image Processing, Computer-Assisted: statistics \& ,Mathematical Computing,Nerve Fibers,Nerve Fibers: ultrasonography,Neural Pathways,Neural Pathways: anatomy \& histology,Phantoms, Imaging}, month = mar, pmid = {16242966}, url = {http://www.ncbi.nlm.nih.gov/pubmed/16242966}, year = 2006 } @Article{Corouge2006, Author = {Corouge, Isabelle and Fletcher, P Thomas and Joshi, Sarang and Gouttard, Sylvain and Gerig, Guido}, Title = {{Fiber tract-oriented statistics for quantitative diffusion tensor MRI analysis.}}, Journal = {Medical image analysis}, Volume = {10}, Number = {5}, Pages = {786--98}, abstract = {Quantitative diffusion tensor imaging (DTI) has become the major imaging modality to study properties of white matter and the geometry of fiber tracts of the human brain. Clinical studies mostly focus on regional statistics of fractional anisotropy (FA) and mean diffusivity (MD) derived from tensors. Existing analysis techniques do not sufficiently take into account that the measurements are tensors, and thus require proper interpolation and statistics of tensors, and that regions of interest are fiber tracts with complex spatial geometry. We propose a new framework for quantitative tract-oriented DTI analysis that systematically includes tensor interpolation and averaging, using nonlinear Riemannian symmetric space. A new measure of tensor anisotropy, called geodesic anisotropy (GA) is applied and compared with FA. As a result, tracts of interest are represented by the geometry of the medial spine attributed with tensor statistics (average and variance) calculated within cross-sections. Feasibility of our approach is demonstrated on various fiber tracts of a single data set. A validation study, based on six repeated scans of the same subject, assesses the reproducibility of this new DTI data analysis framework.}, doi = {10.1016/j.media.2006.07.003}, file = {:home/eg309/.local/share/data/Mendeley Ltd./Mendeley Desktop/Downloaded/Corouge et al. - 2006 - Fiber tract-oriented statistics for quantitative diffusion tensor MRI analysis..pdf:pdf}, issn = {1361-8415}, keywords = {Algorithms,Artificial Intelligence,Brain,Brain: cytology,Computer Simulation,Diffusion Magnetic Resonance Imaging,Diffusion Magnetic Resonance Imaging: methods,Feasibility Studies,Humans,Image Enhancement,Image Enhancement: methods,Image Interpretation, Computer-Assisted,Image Interpretation, Computer-Assisted: methods,Imaging, Three-Dimensional,Imaging, Three-Dimensional: methods,Information Storage and Retrieval,Information Storage and Retrieval: methods,Models, Neurological,Models, Statistical,Neural Pathways,Neural Pathways: cytology,Pattern Recognition, Automated,Pattern Recognition, Automated: methods,Reproducibility of Results,Sensitivity and Specificity}, pmid = {16926104}, url = {http://www.ncbi.nlm.nih.gov/pubmed/16926104}, year = 2006 } dipy-0.10.1/doc/documentation.rst000066400000000000000000000005301263041327500167070ustar00rootroot00000000000000.. _documentation: Documentation =================== Contents: .. toctree:: :maxdepth: 2 introduction mission installation examples_index faq developers cite devel/index theory/index reference/index api_changes Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` dipy-0.10.1/doc/examples/000077500000000000000000000000001263041327500151245ustar00rootroot00000000000000dipy-0.10.1/doc/examples/.gitignore000066400000000000000000000000361263041327500171130ustar00rootroot00000000000000gqs_tracks.npy ten_tracks.npy dipy-0.10.1/doc/examples/README000066400000000000000000000005151263041327500160050ustar00rootroot00000000000000Examples -------- These are the dipy examples. They are built as docs in the dipy ``examples_built`` directory in the documentation. If you add an example (yes please!), please remember to add it to the ``valid_examples.txt`` file located in this directory and to the ``examples_index.rst`` file listing in the ``doc`` directory. dipy-0.10.1/doc/examples/affine_registration_3d.py000066400000000000000000000245311263041327500221130ustar00rootroot00000000000000""" ========================================== Affine Registration in 3D ========================================== This example explains how to compute an affine transformation to register two 3D volumes by maximization of their Mutual Information [Mattes03]_. The optimization strategy is similar to that implemented in ANTS [Avants11]_. """ import numpy as np from dipy.viz import regtools from dipy.data import fetch_stanford_hardi, read_stanford_hardi from dipy.data.fetcher import fetch_syn_data, read_syn_data from dipy.align.imaffine import (transform_centers_of_mass, AffineMap, MutualInformationMetric, AffineRegistration) from dipy.align.transforms import (TranslationTransform3D, RigidTransform3D, AffineTransform3D) """ Let's fetch two b0 volumes, the static image will be the b0 from the Stanford HARDI dataset """ fetch_stanford_hardi() nib_stanford, gtab_stanford = read_stanford_hardi() static = np.squeeze(nib_stanford.get_data())[..., 0] static_grid2world = nib_stanford.get_affine() """ Now the moving image """ fetch_syn_data() nib_syn_t1, nib_syn_b0 = read_syn_data() moving = np.array(nib_syn_b0.get_data()) moving_grid2world = nib_syn_b0.get_affine() """ We can see that the images are far from aligned by drawing one on top of the other. The images don't even have the same number of voxels, so in order to draw one on top of the other we need to resample the moving image on a grid of the same dimensions as the static image, we can do this by "transforming" the moving image using an identity transform """ identity = np.eye(4) affine_map = AffineMap(identity, static.shape, static_grid2world, moving.shape, moving_grid2world) resampled = affine_map.transform(moving) regtools.overlay_slices(static, resampled, None, 0, "Static", "Moving", "resampled_0.png") regtools.overlay_slices(static, resampled, None, 1, "Static", "Moving", "resampled_1.png") regtools.overlay_slices(static, resampled, None, 2, "Static", "Moving", "resampled_2.png") """ .. figure:: resampled_0.png :align: center .. figure:: resampled_1.png :align: center .. figure:: resampled_2.png :align: center **Input images before alignment**. """ """ We can obtain a very rough (and fast) registration by just aligning the centers of mass of the two images """ c_of_mass = transform_centers_of_mass(static, static_grid2world, moving, moving_grid2world) """ We can now transform the moving image and draw it on top of the static image, registration is not likely to be good, but at least they will occupy roughly the same space """ transformed = c_of_mass.transform(moving) regtools.overlay_slices(static, transformed, None, 0, "Static", "Transformed", "transformed_com_0.png") regtools.overlay_slices(static, transformed, None, 1, "Static", "Transformed", "transformed_com_1.png") regtools.overlay_slices(static, transformed, None, 2, "Static", "Transformed", "transformed_com_2.png") """ .. figure:: transformed_com_0.png :align: center .. figure:: transformed_com_1.png :align: center .. figure:: transformed_com_2.png :align: center **Registration result by aligning the centers of mass of the images**. """ """ This was just a translation of the moving image towards the static image, now we will refine it by looking for an affine transform. We first create the similarity metric (Mutual Information) to be used. We need to specify the number of bins to be used to discretize the joint and marginal probability distribution functions (PDF), a typical value is 32. We also need to specify the percentage (an integer in (0, 100]) of voxels to be used for computing the PDFs, the most accurate registration will be obtained by using all voxels, but it is also the most time-consuming choice. We specify full sampling by passing None instead of an integer """ nbins = 32 sampling_prop = None metric = MutualInformationMetric(nbins, sampling_prop) """ To avoid getting stuck at local optima, and to accelerate convergence, we use a multi-resolution strategy (similar to ANTS [Avants11]_) by building a Gaussian Pyramid. To have as much flexibility as possible, the user can specify how this Gaussian Pyramid is built. First of all, we need to specify how many resolutions we want to use. This is indirectly specified by just providing a list of the number of iterations we want to perform at each resolution. Here we will just specify 3 resolutions and a large number of iterations, 10000 at the coarsest resolution, 1000 at the medium resolution and 100 at the finest. These are the default settings """ level_iters = [10000, 1000, 100] """ To compute the Gaussian pyramid, the original image is first smoothed at each level of the pyramid using a Gaussian kernel with the requested sigma. A good initial choice is [3.0, 1.0, 0.0], this is the default """ sigmas = [3.0, 1.0, 0.0] """ Now we specify the sub-sampling factors. A good configuration is [4, 2, 1], which means that, if the original image shape was (nx, ny, nz) voxels, then the shape of the coarsest image will be about (nx//4, ny//4, nz//4), the shape in the middle resolution will be about (nx//2, ny//2, nz//2) and the image at the finest scale has the same size as the original image. This set of factors is the default """ factors = [4, 2, 1] """ Now we go ahead and instantiate the registration class with the configuration we just prepared """ affreg = AffineRegistration(metric=metric, level_iters=level_iters, sigmas=sigmas, factors=factors) """ Using AffineRegistration we can register our images in as many stages as we want, providing previous results as initialization for the next (the same logic as in ANTS). The reason why it is useful is that registration is a non-convex optimization problem (it may have more than one local optima), which means that it is very important to initialize as close to the solution as possible. For example, lets start with our (previously computed) rough transformation aligning the centers of mass of our images, and then refine it in three stages. First look for an optimal translation. The dictionary regtransforms contains all available transforms, we obtain one of them by providing its name and the dimension (either 2 or 3) of the image we are working with (since we are aligning volumes, the dimension is 3) """ transform = TranslationTransform3D() params0 = None starting_affine = c_of_mass.affine translation = affreg.optimize(static, moving, transform, params0, static_grid2world, moving_grid2world, starting_affine=starting_affine) """ If we look at the result, we can see that this translation is much better than simply aligning the centers of mass """ transformed = translation.transform(moving) regtools.overlay_slices(static, transformed, None, 0, "Static", "Transformed", "transformed_trans_0.png") regtools.overlay_slices(static, transformed, None, 1, "Static", "Transformed", "transformed_trans_1.png") regtools.overlay_slices(static, transformed, None, 2, "Static", "Transformed", "transformed_trans_2.png") """ .. figure:: transformed_trans_0.png :align: center .. figure:: transformed_trans_1.png :align: center .. figure:: transformed_trans_2.png :align: center **Registration result by translating the moving image, using MI**. """ """ Now lets refine with a rigid transform (this may even modify our previously found optimal translation) """ transform = RigidTransform3D() params0 = None starting_affine = translation.affine rigid = affreg.optimize(static, moving, transform, params0, static_grid2world, moving_grid2world, starting_affine=starting_affine) """ This produces a slight rotation, and the images are now better aligned """ transformed = rigid.transform(moving) regtools.overlay_slices(static, transformed, None, 0, "Static", "Transformed", "transformed_rigid_0.png") regtools.overlay_slices(static, transformed, None, 1, "Static", "Transformed", "transformed_rigid_1.png") regtools.overlay_slices(static, transformed, None, 2, "Static", "Transformed", "transformed_rigid_2.png") """ .. figure:: transformed_rigid_0.png :align: center .. figure:: transformed_rigid_1.png :align: center .. figure:: transformed_rigid_2.png :align: center **Registration result with a rigid transform, using Mutual Information**. """ """ Finally, lets refine with a full affine transform (translation, rotation, scale and shear), it is safer to fit more degrees of freedom now, since we must be very close to the optimal transform """ transform = AffineTransform3D() params0 = None starting_affine = rigid.affine affine = affreg.optimize(static, moving, transform, params0, static_grid2world, moving_grid2world, starting_affine=starting_affine) """ This results in a slight shear and scale """ transformed = affine.transform(moving) regtools.overlay_slices(static, transformed, None, 0, "Static", "Transformed", "transformed_affine_0.png") regtools.overlay_slices(static, transformed, None, 1, "Static", "Transformed", "transformed_affine_1.png") regtools.overlay_slices(static, transformed, None, 2, "Static", "Transformed", "transformed_affine_2.png") """ .. figure:: transformed_affine_0.png :align: center .. figure:: transformed_affine_1.png :align: center .. figure:: transformed_affine_2.png :align: center **Registration result with an affine transform, using Mutual Information**. .. [Mattes03] Mattes, D., Haynor, D. R., Vesselle, H., Lewellen, T. K., Eubank, W. (2003). PET-CT image registration in the chest using free-form deformations. IEEE Transactions on Medical Imaging, 22(1), 120-8. .. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/brain_extraction_dwi.py000066400000000000000000000057141263041327500217030ustar00rootroot00000000000000""" =================================== Brain segmentation with median_otsu =================================== We show how to extract brain information and mask from a b0 image using dipy's segment.mask module. First import the necessary modules: """ import numpy as np import nibabel as nib """ Download and read the data for this tutorial. The scil_b0 dataset contains different data from different companies and models. For this example, the data comes from a 1.5 tesla Siemens MRI. """ from dipy.data.fetcher import fetch_scil_b0, read_siemens_scil_b0 fetch_scil_b0() img = read_siemens_scil_b0() data = np.squeeze(img.get_data()) """ ``img`` contains a nibabel Nifti1Image object. Data is the actual brain data as a numpy ndarray. Segment the brain using dipy's mask module. ``median_otsu`` returns the segmented brain data and a binary mask of the brain. It is possible to fine tune the parameters of ``median_otsu`` (``median_radius`` and ``num_pass``) if extraction yields incorrect results but the default parameters work well on most volumes. For this example, we used 2 as ``median_radius`` and 1 as ``num_pass`` """ from dipy.segment.mask import median_otsu b0_mask, mask = median_otsu(data, 2, 1) """ Saving the segmentation results is very easy using nibabel. We need the b0_mask, and the binary mask volumes. The affine matrix which transform the image's coordinates to the world coordinates is also needed. Here, we choose to save both images in float32. """ mask_img = nib.Nifti1Image(mask.astype(np.float32), img.get_affine()) b0_img = nib.Nifti1Image(b0_mask.astype(np.float32), img.get_affine()) fname = 'se_1.5t' nib.save(mask_img, fname + '_binary_mask.nii.gz') nib.save(b0_img, fname + '_mask.nii.gz') """ Quick view of the results middle slice using matplotlib. """ import matplotlib.pyplot as plt from dipy.core.histeq import histeq sli = data.shape[2] / 2 plt.figure('Brain segmentation') plt.subplot(1, 2, 1).set_axis_off() plt.imshow(histeq(data[:, :, sli].astype('float')).T, cmap='gray', origin='lower') plt.subplot(1, 2, 2).set_axis_off() plt.imshow(histeq(b0_mask[:, :, sli].astype('float')).T, cmap='gray', origin='lower') plt.savefig('median_otsu.png') """ .. figure:: median_otsu.png :align: center **An application of median_otsu for brain segmentation**. ``median_otsu`` can also automatically crop the outputs to remove the largest possible number of background voxels. This makes outputted data significantly smaller. auto cropping in ``median_otsu`` is activated by setting the ``autocrop`` parameter to True. """ b0_mask_crop, mask_crop = median_otsu(data, 4, 4, autocrop=True) """ Saving cropped data using nibabel as demonstrated previously. """ mask_img_crop = nib.Nifti1Image(mask_crop.astype(np.float32), img.get_affine()) b0_img_crop = nib.Nifti1Image( b0_mask_crop.astype(np.float32), img.get_affine()) nib.save(mask_img_crop, fname + '_binary_mask_crop.nii.gz') nib.save(b0_img_crop, fname + '_mask_crop.nii.gz') dipy-0.10.1/doc/examples/bundle_registration.py000066400000000000000000000050051263041327500215410ustar00rootroot00000000000000""" ========================== Direct Bundle Registration ========================== This example explains how you can register two bundles from two different subjects directly in native space [Garyfallidis14]_. To show the concept we will use two pre-saved cingulum bundles. """ from dipy.viz import fvtk from time import sleep from dipy.data import two_cingulum_bundles cb_subj1, cb_subj2 = two_cingulum_bundles() from dipy.align.streamlinear import StreamlineLinearRegistration from dipy.tracking.streamline import set_number_of_points """ An important step before running the registration is to resample the streamlines so that they both have the same number of points per streamline. Here we will use 20 points. """ cb_subj1 = set_number_of_points(cb_subj1, 20) cb_subj2 = set_number_of_points(cb_subj2, 20) """ Let's say now that we want to move the ``cb_subj2`` (moving) so that it can be aligned with ``cb_subj1`` (static). Here is how this is done. """ srr = StreamlineLinearRegistration() srm = srr.optimize(static=cb_subj1, moving=cb_subj2) """ After the optimization is finished we can apply the learned transformation to ``cb_subj2``. """ cb_subj2_aligned = srm.transform(cb_subj2) def show_both_bundles(bundles, colors=None, show=False, fname=None): ren = fvtk.ren() ren.SetBackground(1., 1, 1) for (i, bundle) in enumerate(bundles): color = colors[i] lines = fvtk.streamtube(bundle, color, linewidth=0.3) lines.RotateX(-90) lines.RotateZ(90) fvtk.add(ren, lines) if show: fvtk.show(ren) if fname is not None: sleep(1) fvtk.record(ren, n_frames=1, out_path=fname, size=(900, 900)) show_both_bundles([cb_subj1, cb_subj2], colors=[fvtk.colors.orange, fvtk.colors.red], fname='before_registration.png') """ .. figure:: before_registration.png :align: center **Before bundle registration**. """ show_both_bundles([cb_subj1, cb_subj2_aligned], colors=[fvtk.colors.orange, fvtk.colors.red], fname='after_registration.png') """ .. figure:: after_registration.png :align: center **After bundle registration**. .. [Garyfallidis15] Garyfallidis et. al, "Robust and efficient linear registration of white-matter fascicles in the space of streamlines", Neuroimage, 117:124-140, 2015. .. [Garyfallidis14] Garyfallidis et. al, "Direct native-space fiber bundle alignment for group comparisons", ISMRM, 2014. """ dipy-0.10.1/doc/examples/denoise_nlmeans.py000066400000000000000000000043521263041327500206450ustar00rootroot00000000000000""" ============================================== Denoise images using Non-Local Means (NLMEANS) ============================================== Using the non-local means filter [Coupe2008]_ you can denoise 3D or 4D images and boost the SNR of your datasets. You can also decide between modeling the noise as Gaussian or Rician (default). """ import numpy as np import nibabel as nib import matplotlib.pyplot as plt from time import time from dipy.denoise.nlmeans import nlmeans from dipy.denoise.noise_estimate import estimate_sigma from dipy.data import fetch_sherbrooke_3shell, read_sherbrooke_3shell fetch_sherbrooke_3shell() img, gtab = read_sherbrooke_3shell() data = img.get_data() affine = img.get_affine() mask = data[..., 0] > 80 # We select only one volume for the example to run quickly. data = data[..., 1] print("vol size", data.shape) t = time() """ In order to call ``nlmeans`` first you need to estimate the standard deviation of the noise. We use N=4 since the Sherbrooke dataset was acquired on a 1.5T Siemens scanner with a 4 array head coil. """ sigma = estimate_sigma(data, N=4) den = nlmeans(data, sigma=sigma, mask=mask) print("total time", time() - t) print("vol size", den.shape) axial_middle = data.shape[2] / 2 before = data[:, :, axial_middle].T after = den[:, :, axial_middle].T difference = np.abs(after.astype('f8') - before.astype('f8')) difference[~mask[:, :, axial_middle].T] = 0 fig, ax = plt.subplots(1, 3) ax[0].imshow(before, cmap='gray', origin='lower') ax[0].set_title('before') ax[1].imshow(after, cmap='gray', origin='lower') ax[1].set_title('after') ax[2].imshow(difference, cmap='gray', origin='lower') ax[2].set_title('difference') for i in range(3): ax[i].set_axis_off() plt.show() plt.savefig('denoised.png', bbox_inches='tight') """ .. figure:: denoised.png :align: center **Showing the middle axial slice without (left) and with (right) NLMEANS denoising**. """ nib.save(nib.Nifti1Image(den, affine), 'denoised.nii.gz') """ .. [Coupe2008] P. Coupe, P. Yger, S. Prima, P. Hellier, C. Kervrann, C. Barillot, "An Optimized Blockwise Non Local Means Denoising Filter for 3D Magnetic Resonance Images", IEEE Transactions on Medical Imaging, 27(4):425-441, 2008. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/deterministic_fiber_tracking.py000066400000000000000000000061531263041327500233770ustar00rootroot00000000000000""" ============================================================= An introduction to the Deterministic Maximum Direction Getter ============================================================= Deterministic maximum direction getter is the deterministic version of the probabilistic direction getter. It can be used with the same local models and has the same parameters. Deterministic maximum fiber tracking follows the trajectory of the most probable pathway within the tracking constraint (e.g. max angle). In other words, it follows the direction with the highest probability from a distribution, as opposed to the probabilistic direction getter which draws the direction from the distribution. Therefore, the maximum deterministic direction getter is equivalent to the probabilistic direction getter returning always the maximum value of the distribution. Deterministic maximum fiber tracking is an alternative to EuDX deterministic tractography and unlike EuDX does not follow the peaks of the local models but uses the entire orientation distributions. This example is an extension of the :ref:``example_probabilistic_fiber_tracking`` example. We begin by loading the data and fitting a constrained spherical deconvolution (CSD) reconstruction model. """ from dipy.data import read_stanford_labels from dipy.reconst.csdeconv import ConstrainedSphericalDeconvModel from dipy.tracking import utils from dipy.tracking.local import (ThresholdTissueClassifier, LocalTracking) hardi_img, gtab, labels_img = read_stanford_labels() data = hardi_img.get_data() labels = labels_img.get_data() affine = hardi_img.get_affine() seed_mask = labels == 2 white_matter = (labels == 1) | (labels == 2) seeds = utils.seeds_from_mask(seed_mask, density=1, affine=affine) csd_model = ConstrainedSphericalDeconvModel(gtab, None, sh_order=6) csd_fit = csd_model.fit(data, mask=white_matter) """ We use the fractional anisotropy (FA) of the DTI model to build a tissue classifier. """ import dipy.reconst.dti as dti from dipy.reconst.dti import fractional_anisotropy tensor_model = dti.TensorModel(gtab) tenfit = tensor_model.fit(data, mask=white_matter) FA = fractional_anisotropy(tenfit.evals) classifier = ThresholdTissueClassifier(FA, .2) """ The fiber orientation distribution (FOD) of the CSD model estimates the distribution of small fiber bundles within each voxel. This distribution can be used for deterministic fiber tracking. As for probabilistic tracking, there are many ways to provide those distributions to the deterministic maximum direction getter. Here, the spherical harmonic representation of the FOD is used. """ from dipy.data import default_sphere from dipy.direction import DeterministicMaximumDirectionGetter from dipy.io.trackvis import save_trk detmax_dg = DeterministicMaximumDirectionGetter.from_shcoeff(csd_fit.shm_coeff, max_angle=30., sphere=default_sphere) streamlines = LocalTracking(detmax_dg, classifier, seeds, affine, step_size=.5) save_trk("deterministic_maximum_shm_coeff.trk", streamlines, affine, labels.shape) dipy-0.10.1/doc/examples/gradients_spheres.py000066400000000000000000000135311263041327500212120ustar00rootroot00000000000000""" ===================== Gradients and Spheres ===================== This example shows how you can create GradientTables and Sphere objects using Dipy. Usually, as we saw in :ref:`example_quick_start`, you load your b-values and b-vectors from disk and then you can create your own GradientTable. But, this time lets say that you are an MR physicist and you want to desing a new gradient scheme or you are a scientist who wants to simulate many different gradient schemes. Now let's assume that you are interested in creating a multi-shell acquisition with 2-shells, one at b=1000 and one at b=2500. For both shells let's say that we want a specific number of gradients (64) and we want to have the points on the sphere evenly distributed. This is possible using the ``disperse_charges`` which is an implementation of electrostatic repulsion [1]_. """ import numpy as np from dipy.core.sphere import disperse_charges, Sphere, HemiSphere """ We can first create some random points on a ``HemiSphere`` using spherical polar coordinates. """ n_pts = 64 theta = np.pi * np.random.rand(n_pts) phi = 2 * np.pi * np.random.rand(n_pts) hsph_initial = HemiSphere(theta=theta, phi=phi) """ Next, we call `disperse_charges` which will iteratively move the points so that the electrostatic potential energy is minimized. """ hsph_updated, potential = disperse_charges(hsph_initial, 5000) """ In ``hsph_updated` we have the updated HemiSphere with the points nicely distributed on the hemisphere. Let's visualize them. """ from dipy.viz import fvtk ren = fvtk.ren() ren.SetBackground(1, 1, 1) fvtk.add(ren, fvtk.point(hsph_initial.vertices, fvtk.colors.red, point_radius=0.05)) fvtk.add(ren, fvtk.point(hsph_updated.vertices, fvtk.colors.green, point_radius=0.05)) print('Saving illustration as initial_vs_updated.png') fvtk.record(ren, out_path='initial_vs_updated.png', size=(300, 300)) """ .. figure:: initial_vs_updated.png :align: center **Example of electrostatic repulsion of red points which become green points**. We can also create a sphere from the hemisphere and show it in the following way. """ sph = Sphere(xyz = np.vstack((hsph_updated.vertices, -hsph_updated.vertices))) fvtk.rm_all(ren) fvtk.add(ren, fvtk.point(sph.vertices, fvtk.colors.green, point_radius=0.05)) print('Saving illustration as full_sphere.png') fvtk.record(ren, out_path='full_sphere.png', size=(300, 300)) """ .. figure:: full_sphere.png :align: center **Full sphere** It is time to create the Gradients. For this reason we will need to use the function ``gradient_table`` and fill it with the ``hsph_updated`` vectors that we created above. """ from dipy.core.gradients import gradient_table vertices = hsph_updated.vertices values = np.ones(vertices.shape[0]) """ We need to stacks of ``vertices`` one for every shell and we need two sets of b-values one at 1000 and one at 2500 as we discussed previously. """ bvecs = np.vstack((vertices, vertices)) bvals = np.hstack((1000 * values, 2500 * values)) """ We can also add some b0s. Let's add one in the beginning and one at the end. """ bvecs = np.insert(bvecs, (0, bvecs.shape[0]), np.array([0, 0, 0]), axis=0) bvals = np.insert(bvals, (0, bvals.shape[0]), 0) print(bvals) """ :: [ 0. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 2500. 0.] """ print(bvecs) """ :: [[ 0. 0. 0. ] [-0.80451777 -0.16877559 0.56944355] [ 0.32822557 -0.94355999 0.04430036] [-0.23584135 -0.96241331 0.13468285] [-0.39207424 -0.73505312 0.55314981] [-0.32539386 -0.16751384 0.93062235] [-0.82043195 -0.39411534 0.41420347] [ 0.65741493 0.74947875 0.07802061] [ 0.88853765 0.45303621 0.07251925] [ 0.39638642 -0.15185138 0.90543855] ... [ 0.10175269 0.08197111 0.99142681] [ 0.50577702 -0.37862345 0.77513476] [ 0.42845026 0.40155296 0.80943535] [ 0.26939707 0.81103868 0.51927014] [-0.48938584 -0.43780086 0.75420946] [ 0. 0. 0. ]] Both b-values and b-vectors look correct. Let's now create the ``GradientTable``. """ gtab = gradient_table(bvals, bvecs) fvtk.rm_all(ren) """ We can also visualize the gradients. Let's color with blue the first shell and with cyan the second shell. """ colors_b1000 = fvtk.colors.blue * np.ones(vertices.shape) colors_b2500 = fvtk.colors.cyan * np.ones(vertices.shape) colors = np.vstack((colors_b1000, colors_b2500)) colors = np.insert(colors, (0, colors.shape[0]), np.array([0, 0, 0]), axis=0) colors = np.ascontiguousarray(colors) fvtk.add(ren, fvtk.point(gtab.gradients, colors, point_radius=100)) print('Saving illustration as gradients.png') fvtk.record(ren, out_path='gradients.png', size=(300, 300)) """ .. figure:: gradients.png :align: center **Diffusion Gradients** .. [1] Jones, DK. et al. Optimal strategies for measuring diffusion in anisotropic systems by magnetic resonance imaging, Magnetic Resonance in Medicine, vol 42, no 3, 515-525, 1999. """ dipy-0.10.1/doc/examples/introduction_to_basic_tracking.py000066400000000000000000000173211263041327500237500ustar00rootroot00000000000000""" ============================== Introduction to Basic Tracking ============================== Local fiber tracking is an approach used to model white matter fibers by creating streamlines from local directional information. The idea is as follows: if the local directionality of a tract/pathway segment is known, one can integrate along those directions to build a complete representation of that structure. Local fiber tracking is widely used in the field of diffusion MRI because it is simple and robust. In order to perform local fiber tracking, three things are needed: 1) A method for getting directions from a diffusion data set. 2) A method for identifying different tissue types within the data set. 3) A set of seeds from which to begin tracking. This example shows how to combine the 3 parts described above to create a tractography reconstruction from a diffusion data set. """ """ To begin, let's load an example HARDI data set from Stanford. If you have not already downloaded this data set, the first time you run this example you will need to be connected to the internet and this dataset will be downloaded to your computer. """ from dipy.data import read_stanford_labels hardi_img, gtab, labels_img = read_stanford_labels() data = hardi_img.get_data() labels = labels_img.get_data() affine = hardi_img.get_affine() """ This dataset provides a label map in which all white matter tissues are labeled either 1 or 2. Lets create a white matter mask to restrict tracking to the white matter. """ white_matter = (labels == 1) | (labels == 2) """ 1. The first thing we need to begin fiber tracking is a way of getting directions from this diffusion data set. In order to do that, we can fit the data to a Constant Solid Angle ODF Model. This model will estimate the orientation distribution function (ODF) at each voxel. The ODF is the distribution of water diffusion as a function of direction. The peaks of an ODF are good estimates for the orientation of tract segments at a point in the image. """ from dipy.reconst.shm import CsaOdfModel from dipy.data import default_sphere from dipy.direction import peaks_from_model csa_model = CsaOdfModel(gtab, sh_order=6) csa_peaks = peaks_from_model(csa_model, data, default_sphere, relative_peak_threshold=.8, min_separation_angle=45, mask=white_matter) """ 2. Next we need some way of restricting the fiber tracking to areas with good directionality information. We've already created the white matter mask, but we can go a step further and restrict fiber tracking to those areas where the ODF shows significant restricted diffusion by thresholding on the general fractional anisotropy (GFA). """ from dipy.tracking.local import ThresholdTissueClassifier classifier = ThresholdTissueClassifier(csa_peaks.gfa, .25) """ 3. Before we can begin tracking is to specify where to "seed" (begin) the fiber tracking. Generally, the seeds chosen will depend on the pathways one is interested in modeling. In this example, we'll use a 2x2x2 grid of seeds per voxel, in a sagittal slice of the Corpus Callosum. Tracking from this region will give us a model of the Corpus Callosum tract. This slice has label value 2 in the labels image. """ from dipy.tracking import utils seed_mask = labels == 2 seeds = utils.seeds_from_mask(seed_mask, density=[2, 2, 2], affine=affine) """ Finally, we can bring it all together using ``LocalTracking``. We will then display the resulting streamlines using the fvtk module. """ from dipy.tracking.local import LocalTracking from dipy.viz import fvtk from dipy.viz.colormap import line_colors # Initialization of LocalTracking. The computation happens in the next step. streamlines = LocalTracking(csa_peaks, classifier, seeds, affine, step_size=.5) # Compute streamlines and store as a list. streamlines = list(streamlines) # Prepare the display objects. color = line_colors(streamlines) streamlines_actor = fvtk.line(streamlines, line_colors(streamlines)) # Create the 3d display. r = fvtk.ren() fvtk.add(r, streamlines_actor) # Save still images for this static example. Or for interactivity use fvtk.show fvtk.record(r, n_frames=1, out_path='deterministic.png', size=(800, 800)) """ .. figure:: deterministic.png :align: center **Corpus Callosum Deterministic** We've created a deterministic set of streamlines, so called because if you repeat the fiber tracking (keeping all the inputs the same) you will get exactly the same set of streamlines. We can save the streamlines as a Trackvis file so it can be loaded into other software for visualization or further analysis. """ from dipy.io.trackvis import save_trk save_trk("CSA_detr.trk", streamlines, affine, labels.shape) """ Next let's try some probabilistic fiber tracking. For this, we'll be using the Constrained Spherical Deconvolution (CSD) Model. This model represents each voxel in the data set as a collection of small white matter fibers with different orientations. The density of fibers along each orientation is known as the Fiber Orientation Distribution (FOD). In order to perform probabilistic fiber tracking, we pick a fiber from the FOD at random at each new location along the streamline. Note: one could use this model to perform deterministic fiber tracking by always tracking along the directions that have the most fibers. Let's begin probabilistic fiber tracking by fitting the data to the CSD model. """ from dipy.reconst.csdeconv import (ConstrainedSphericalDeconvModel, auto_response) response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7) csd_model = ConstrainedSphericalDeconvModel(gtab, response, sh_order=6) csd_fit = csd_model.fit(data, mask=white_matter) """ Next we'll need to make a ``ProbabilisticDirectionGetter``. Because the CSD model represents the FOD using the spherical harmonic basis, we can use the ``from_shcoeff`` method to create the direction getter. This direction getter will randomly sample directions from the FOD each time the tracking algorithm needs to take another step. """ from dipy.direction import ProbabilisticDirectionGetter prob_dg = ProbabilisticDirectionGetter.from_shcoeff(csd_fit.shm_coeff, max_angle=30., sphere=default_sphere) """ As with deterministic tracking, we'll need to use a tissue classifier to restrict the tracking to the white matter of the brain. One might be tempted to use the GFA of the CSD FODs to build a tissue classifier, however the GFA values of these FODs don't classify gray matter and white matter well. We will therefore use the GFA from the CSA model which we fit for the first section of this example. Alternatively, one could fit a ``TensorModel`` to the data and use the fractional anisotropy (FA) to build a tissue classifier. """ classifier = ThresholdTissueClassifier(csa_peaks.gfa, .25) """ Next we can pass this direction getter, along with the ``classifier`` and ``seeds``, to ``LocalTracking`` to get a probabilistic model of the corpus callosum. """ streamlines = LocalTracking(prob_dg, classifier, seeds, affine, step_size=.5, max_cross=1) # Compute streamlines and store as a list. streamlines = list(streamlines) # Prepare the display objects. color = line_colors(streamlines) streamlines_actor = fvtk.line(streamlines, line_colors(streamlines)) # Create the 3d display. r = fvtk.ren() fvtk.add(r, streamlines_actor) # Save still images for this static example. fvtk.record(r, n_frames=1, out_path='probabilistic.png', size=(800, 800)) """ .. figure:: probabilistic.png :align: center **Corpus Callosum Probabilistic** """ save_trk("CSD_prob.trk", streamlines, affine, labels.shape) dipy-0.10.1/doc/examples/kfold_xval.py000066400000000000000000000127611263041327500176360ustar00rootroot00000000000000""" ============================================ K-fold cross-validation for model comparison ============================================ Different models of diffusion MRI can be compared based on their accuracy in fitting the diffusion signal. Here, we demonstrate this by comparing two models: the diffusion tensor model (DTI) and constrained spherical deconvolution (CSD). These models differ from each other substantially. DTI approximates the diffusion pattern as a 3D Gaussian distribution, and has only 6 free parameters. CSD, on the other hand, fits many more parameters. The models aare also not nested, so they cannot be compared using the log-likelihood ratio. A general way to perform model comparison is cross-validation [Hastie2008]_. In this method, a model is fit to some of the data (a *learning set*) and the model is then used to predict a held-out set (a *testing set*). The model predictions can then be compared to estimate prediction error on the held out set. This method has been used for comparison of models such as DTI and CSD [Rokem2014]_, and has the advantage that it the comparison is imprevious to differences in the number of parameters in the model, and it can be used to compare models that are not nested. In `dipy`, we include an implementation of k-fold cross-validation. In this method, the data is divided into $k$ different segments. In each iteration $\frac{1}{k}th$ of the data is held out and the model is fit to the other $\frac{k-1}{k}$ parts of the data. A prediction of the held out data is done and recorded. At the end of $k$ iterations a prediction of all of the data will have been conducted, and this can be compared directly to all of the data. First, we import that modules needed for this example. In particular, the :mod:`reconst.cross_validation` module implements k-fold cross-validation """ import numpy as np np.random.seed(2014) import matplotlib.pyplot as plt import dipy.data as dpd import dipy.reconst.cross_validation as xval import dipy.reconst.dti as dti import dipy.reconst.csdeconv as csd import scipy.stats as stats """ We fetch some data and select a couple of voxels to perform comparisons on. One lies in the corpus callosum (cc), while the other is in the centrum semiovale (cso), a part of the brain known to contain multiple crossing white matter fiber populations. """ dpd.fetch_stanford_hardi() img, gtab = dpd.read_stanford_hardi() data = img.get_data() cc_vox = data[40, 70, 38] cso_vox = data[30, 76, 38] """ We initialize each kind of model: """ dti_model = dti.TensorModel(gtab) response, ratio = csd.auto_response(gtab, data, roi_radius=10, fa_thr=0.7) csd_model = csd.ConstrainedSphericalDeconvModel(gtab, response) """ Next, we perform cross-validation for each kind of model, comparing model predictions to the diffusion MRI data in each one of these voxels. Note that we use 2-fold cross-validation, which means that in each iteration, the model will be fit to half of the data, and used to predict the other half. """ dti_cc = xval.kfold_xval(dti_model, cc_vox, 2) csd_cc = xval.kfold_xval(csd_model, cc_vox, 2, response) dti_cso = xval.kfold_xval(dti_model, cso_vox, 2) csd_cso = xval.kfold_xval(csd_model, cso_vox, 2, response) """ We plot a scatter plot of the data with the model predictions in each of these voxels, focusing only on the diffusion-weighted measurements (each point corresponds to a different gradient direction). The two models are compared in each sub-plot (blue=DTI, red=CSD). """ fig, ax = plt.subplots(1,2) fig.set_size_inches([12,6]) ax[0].plot(cc_vox[~gtab.b0s_mask], dti_cc[~gtab.b0s_mask], 'o', color='b') ax[0].plot(cc_vox[~gtab.b0s_mask], csd_cc[~gtab.b0s_mask], 'o', color='r') ax[1].plot(cso_vox[~gtab.b0s_mask], dti_cso[~gtab.b0s_mask], 'o', color='b', label='DTI') ax[1].plot(cso_vox[~gtab.b0s_mask], csd_cso[~gtab.b0s_mask], 'o', color='r', label='CSD') plt.legend(loc='upper left') for this_ax in ax: this_ax.set_xlabel('Data (relative to S0)') this_ax.set_ylabel('Model prediction (relative to S0)') fig.savefig("model_predictions.png") """ .. figure:: model_predictions.png :align: center **Model predictions**. """ """ We can also quantify the goodness of fit of the models by calculating an R-squared score: """ cc_dti_r2=stats.pearsonr(cc_vox[~gtab.b0s_mask], dti_cc[~gtab.b0s_mask])[0]**2 cc_csd_r2=stats.pearsonr(cc_vox[~gtab.b0s_mask], csd_cc[~gtab.b0s_mask])[0]**2 cso_dti_r2=stats.pearsonr(cso_vox[~gtab.b0s_mask], dti_cso[~gtab.b0s_mask])[0]**2 cso_csd_r2=stats.pearsonr(cso_vox[~gtab.b0s_mask], csd_cso[~gtab.b0s_mask])[0]**2 print("Corpus callosum\n" "DTI R2 : %s\n" "CSD R2 : %s\n" "\n" "Centrum Semiovale\n" "DTI R2 : %s\n" "CSD R2 : %s\n" % (cc_dti_r2, cc_csd_r2, cso_dti_r2, cso_csd_r2)) """ This should look something like this:: Corpus callosum DTI R2 : 0.782881752597 CSD R2 : 0.805764364116 Centrum Semiovale DTI R2 : 0.431921832012 CSD R2 : 0.604806420501 As you can see, DTI is a pretty good model for describing the signal in the CC, while CSD is much better in describing the signal in regions of multiple crossing fibers. References ---------- .. [Hastie2008] Hastie, T., Tibshirani, R., Friedman, J. (2008). The Elements of Statistical Learning: Data Mining, Inference and Prediction. Springer-Verlag, Berlin .. [Rokem2014] Rokem, A., Chan, K.L. Yeatman, J.D., Pestilli, F., Mezer, A., Wandell, B.A., 2014. Evaluating the accuracy of diffusion models at multiple b-values with cross-validation. ISMRM 2014. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/linear_fascicle_evaluation.py000066400000000000000000000265441263041327500230430ustar00rootroot00000000000000""" ================================================= Linear fascicle evaluation (LiFE) ================================================= Evaluating the results of tractography algorithms is one of the biggest challenges for diffusion MRI. One proposal for evaluation of tractography results is to use a forward model that predicts the signal from each of a set of streamlines, and then fit a linear model to these simultaneous predictions [Pestilli2014]_. We will use streamlines generated using probabilistic tracking on CSA peaks. For brevity, we will include in this example only streamlines going through the corpus callosum connecting left to right superior frontal cortex. The process of tracking and finding these streamlines is fully demonstrated in the `streamline_tools.py` example. If this example has been run, we can read the streamlines from file. Otherwise, we'll run that example first, by importing it. This provides us with all of the variables that were created in that example: """ import numpy as np import os.path as op import nibabel as nib import dipy.core.optimize as opt if not op.exists('lr-superiorfrontal.trk'): from streamline_tools import * else: # We'll need to know where the corpus callosum is from these variables: from dipy.data import (read_stanford_labels, fetch_stanford_t1, read_stanford_t1) hardi_img, gtab, labels_img = read_stanford_labels() labels = labels_img.get_data() cc_slice = labels == 2 fetch_stanford_t1() t1 = read_stanford_t1() t1_data = t1.get_data() data = hardi_img.get_data() # Read the candidates from file in voxel space: candidate_sl = [s[0] for s in nib.trackvis.read('lr-superiorfrontal.trk', points_space='voxel')[0]] """ The streamlines that are entered into the model are termed 'candidate streamliness' (or a 'candidate connectome'): """ """ Let's visualize the initial candidate group of streamlines in 3D, relative to the anatomical structure of this brain: """ from dipy.viz.colormap import line_colors from dipy.viz import fvtk candidate_streamlines_actor = fvtk.streamtube(candidate_sl, line_colors(candidate_sl)) cc_ROI_actor = fvtk.contour(cc_slice, levels=[1], colors=[(1., 1., 0.)], opacities=[1.]) vol_actor = fvtk.slicer(t1_data) vol_actor.display(40, None, None) vol_actor2 = vol_actor.copy() vol_actor2.display(None, None, 35) # Add display objects to canvas ren = fvtk.ren() fvtk.add(ren, candidate_streamlines_actor) fvtk.add(ren, cc_ROI_actor) fvtk.add(ren, vol_actor) fvtk.add(ren, vol_actor2) fvtk.record(ren, n_frames=1, out_path='life_candidates.png', size=(800, 800)) """ .. figure:: life_candidates.png :align: center **Candidate connectome before life optimization** """ """ Next, we initialize a LiFE model. We import the `dipy.tracking.life` module, which contains the classes and functions that implement the model: """ import dipy.tracking.life as life fiber_model = life.FiberModel(gtab) """ Since we read the streamlines from a file, already in the voxel space, we do not need to transform them into this space. Otherwise, if the streamline coordinates were in the world space (relative to the scanner iso-center, or relative to the mid-point of the AC-PC-connecting line), we would use this:: inv_affine = np.linalg.inv(hardi_img.get_affine()) the inverse transformation from world space to the voxel space as the affine for the following model fit. The next step is to fit the model, producing a `FiberFit` class instance, that stores the data, as well as the results of the fitting procedure. The LiFE model posits that the signal in the diffusion MRI volume can be explained by the streamlines, by the equation .. math:: y = X\beta Where $y$ is the diffusion MRI signal, $\beta$ are a set of weights on the streamlines and $X$ is a design matrix. This matrix has the dimensions $m$ by $n$, where $m=n_{voxels} \cdot n_{directions}$, and $n_{voxels}$ is the set of voxels in the ROI that contains the streamlines considered in this model. The $i^{th}$ column of the matrix contains the expected contributions of the $i^{th}$ streamline (arbitrarly ordered) to each of the voxels. $X$ is a sparse matrix, because each streamline traverses only a small percentage of the voxels. The expected contributions of the streamline are calculated using a forward model, where each node of the streamline is modeled as a cylindrical fiber compartment with Gaussian diffusion, using the diffusion tensor model. See [Pestilli2014]_ for more detail on the model, and variations of this model. """ fiber_fit = fiber_model.fit(data, candidate_sl, affine=np.eye(4)) """ The `FiberFit` class instance holds various properties of the model fit. For example, it has the weights $\beta$, that are assigned to each streamline. In most cases, a tractography through some region will include redundant streamlines, and these streamlines will have $\beta_i$ that are 0. """ import matplotlib.pyplot as plt import matplotlib fig, ax = plt.subplots(1) ax.hist(fiber_fit.beta, bins=100, histtype='step') ax.set_xlabel('Fiber weights') ax.set_ylabel('# fibers') fig.savefig('beta_histogram.png') """ .. figure:: beta_histogram.png :align: center **LiFE streamline weights** """ """ We use $\beta$ to filter out these redundant streamlines, and generate an optimized group of streamlines: """ optimized_sl = list(np.array(candidate_sl)[np.where(fiber_fit.beta>0)[0]]) ren = fvtk.ren() fvtk.add(ren, fvtk.streamtube(optimized_sl, line_colors(optimized_sl))) fvtk.add(ren, cc_ROI_actor) fvtk.add(ren, vol_actor) fvtk.record(ren, n_frames=1, out_path='life_optimized.png', size=(800, 800)) """ .. figure:: life_optimized.png :align: center **Streamlines selected via LiFE optimization** """ """ The new set of streamlines should do well in fitting the data, and redundant streamlines have presumably been removed (in this case, about 50% of the streamlines). But how well does the model do in explaining the diffusion data? We can quantify that: the `FiberFit` class instance has a `predict` method, which can be used to invert the model and predict back either the data that was used to fit the model, or other unseen data (e.g. in cross-validation, see :ref:`kfold_xval`). Without arguments, the `.predict()` method will predict the diffusion signal for the same gradient table that was used in the fit data, but `gtab` and `S0` key-word arguments can be used to predict for other acquisition schemes and other baseline non-diffusion-weighted signals. """ model_predict = fiber_fit.predict() """ We will focus on the error in prediction of the diffusion-weighted data, and calculate the root of the mean squared error. """ model_error = model_predict - fiber_fit.data model_rmse = np.sqrt(np.mean(model_error[:, 10:] ** 2, -1)) """ As a baseline against which we can compare, we calculate another error term. In this case, we assume that the weight for each streamline is equal to zero. This produces the naive prediction of the mean of the signal in each voxel. """ beta_baseline = np.zeros(fiber_fit.beta.shape[0]) pred_weighted = np.reshape(opt.spdot(fiber_fit.life_matrix, beta_baseline), (fiber_fit.vox_coords.shape[0], np.sum(~gtab.b0s_mask))) mean_pred = np.empty((fiber_fit.vox_coords.shape[0], gtab.bvals.shape[0])) S0 = fiber_fit.b0_signal """ Since the fitting is done in the demeaned S/S0 domain, we need to add back the mean and then multiply by S0 in every voxel: """ mean_pred[..., gtab.b0s_mask] = S0[:, None] mean_pred[..., ~gtab.b0s_mask] =\ (pred_weighted + fiber_fit.mean_signal[:, None]) * S0[:, None] mean_error = mean_pred - fiber_fit.data mean_rmse = np.sqrt(np.mean(mean_error ** 2, -1)) """ First, we can compare the overall distribution of errors between these two alternative models of the ROI. We show the distribution of differences in error (improvement through model fitting, relative to the baseline model). Here, positive values denote an improvement in error with model fit, relative to without the model fit. """ fig, ax = plt.subplots(1) ax.hist(mean_rmse - model_rmse, bins=100, histtype='step') ax.text(0.2, 0.9,'Median RMSE, mean model: %.2f' % np.median(mean_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes) ax.text(0.2, 0.8,'Median RMSE, LiFE: %.2f' % np.median(model_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes) ax.set_xlabel('RMS Error') ax.set_ylabel('# voxels') fig.savefig('error_histograms.png') """ .. figure:: error_histograms.png :align: center **Improvement in error with fitting of the LiFE model**. """ """ Second, we can show the spatial distribution of the two error terms, and of the improvement with the model fit: """ vol_model = np.ones(data.shape[:3]) * np.nan vol_model[fiber_fit.vox_coords[:, 0], fiber_fit.vox_coords[:, 1], fiber_fit.vox_coords[:, 2]] = model_rmse vol_mean = np.ones(data.shape[:3]) * np.nan vol_mean[fiber_fit.vox_coords[:, 0], fiber_fit.vox_coords[:, 1], fiber_fit.vox_coords[:, 2]] = mean_rmse vol_improve = np.ones(data.shape[:3]) * np.nan vol_improve[fiber_fit.vox_coords[:, 0], fiber_fit.vox_coords[:, 1], fiber_fit.vox_coords[:, 2]] = mean_rmse - model_rmse sl_idx = 49 from mpl_toolkits.axes_grid1 import AxesGrid fig = plt.figure() fig.subplots_adjust(left=0.05, right=0.95) ax = AxesGrid(fig, 111, nrows_ncols = (1, 3), label_mode = "1", share_all = True, cbar_location="top", cbar_mode="each", cbar_size="10%", cbar_pad="5%") ax[0].matshow(np.rot90(t1_data[sl_idx, :, :]), cmap=matplotlib.cm.bone) im = ax[0].matshow(np.rot90(vol_model[sl_idx, :, :]), cmap=matplotlib.cm.hot) ax.cbar_axes[0].colorbar(im) ax[1].matshow(np.rot90(t1_data[sl_idx, :, :]), cmap=matplotlib.cm.bone) im = ax[1].matshow(np.rot90(vol_mean[sl_idx, :, :]), cmap=matplotlib.cm.hot) ax.cbar_axes[1].colorbar(im) ax[2].matshow(np.rot90(t1_data[sl_idx, :, :]), cmap=matplotlib.cm.bone) im = ax[2].matshow(np.rot90(vol_improve[sl_idx, :, :]), cmap=matplotlib.cm.RdBu) ax.cbar_axes[2].colorbar(im) for lax in ax: lax.set_xticks([]) lax.set_yticks([]) fig.savefig("spatial_errors.png") """ .. figure:: spatial_errors.png :align: center **Spatial distribution of error and improvement** """ """ This image demonstrates that in many places, fitting the LiFE model results in substantial reduction of the error. Note that for full-brain tractographies *LiFE* can require large amounts of memory. For detailed memory profiling of the algorithm, based on the streamlines generated in :ref:`example_probabilistic_fiber_tracking`, see `this IPython notebook `_. For the Matlab implementation of LiFE, head over to `Franco Pestilli's github webpage `_. References ~~~~~~~~~~~~~~~~~~~~~~ .. [Pestilli2014] Pestilli, F., Yeatman, J, Rokem, A. Kay, K. and Wandell B.A. (2014). Validation and statistical inference in living connectomes. Nature Methods 11: 1058-1063. doi:10.1038/nmeth.3098 .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/piesno.py000066400000000000000000000076021263041327500170000ustar00rootroot00000000000000""" ============================= Noise estimation using PIESNO ============================= Often, one is interested in estimating the noise in the diffusion signal. One of the methods to do this is the Probabilistic Identification and Estimation of Noise (PIESNO) framework [Koay2009]_. Using this method, one can detect the standard deviation of the noise from diffusion-weighted imaging (DWI). PIESNO also works with multiple channel DWI datasets that are acquired from N array coils for both SENSE and GRAPPA reconstructions. The PIESNO method works in two steps: 1) First, it finds voxels that are most likely background voxels. Intuitively, these voxels have very similar diffusion-weighted intensities (up to some noise) in the fourth dimension of the DWI dataset. White matter, gray matter or CSF voxels have diffusion intensities that vary quite a lot across different directions. 2) From these estimated background voxels and the input number of coils N, PIESNO finds what sigma each Gaussian from each of the N coils would have generated the observed Rician (N=1) or non-central Chi (N>1) distributed noise profile in the DWI datasets. PIESNO makes an important assumption: the Gaussian noise standard deviation is assumed to be uniform. The noise is uniform across multiple slice locations or across multiple images of the same location. For the full details, please refer to the original paper. In this example, we will demonstrate the use of PIESNO with a 3-shell data-set. We start by importing necessary modules and functions and loading the data: """ import nibabel as nib import numpy as np from dipy.denoise.noise_estimate import piesno from dipy.data import fetch_sherbrooke_3shell, read_sherbrooke_3shell fetch_sherbrooke_3shell() img, gtab = read_sherbrooke_3shell() data = img.get_data() """ Now that we have fetched a dataset, we must call PIESNO with the right number of coils used to acquire this dataset. It is also important to know what was the parallel reconstruction algorithm used. Here, the data comes from a GRAPPA reconstruction, was acquired with a 12-elements head coil available on the Tim Trio Siemens, for which the 12 coil elements are combined into 4 groups of 3 coil elements each. The signal is therefore received through 4 distinct groups of receiver channels, yielding N = 4. Had we used a GE acquisition, we would have used N=1 even if multiple channel coils are used because GE uses a SENSE reconstruction, which has a Rician noise nature and thus N is always 1. """ sigma, mask = piesno(data, N=4, return_mask=True) axial = data[:, :, data.shape[2] / 2, 0].T axial_piesno = mask[:, :, data.shape[2] / 2].T import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 2) ax[0].imshow(axial, cmap='gray', origin='lower') ax[0].set_title('Axial slice of the b=0 data') ax[1].imshow(axial_piesno, cmap='gray', origin='lower') ax[1].set_title('Background voxels from the data') for a in ax: a.set_axis_off() plt.savefig('piesno.png', bbox_inches='tight') """ .. figure:: piesno.png :align: center **Showing the mid axial slice of the b=0 image (left) and estimated background voxels (right) used to estimate the noise standard deviation**. """ nib.save(nib.Nifti1Image(mask, img.get_affine(), img.get_header()), 'mask_piesno.nii.gz') print('The noise standard deviation is sigma= ', sigma) print('The std of the background is =', np.std(data[mask[...,None].astype(np.bool)])) """ Here, we obtained a noise standard deviation of 7.26. For comparison, a simple standard deviation of all voxels in the estimated mask (as done in the previous example :ref:`example_snr_in_cc`) gives a value of 6.1. """ """ .. [Koay2009] Koay C.G., E. Ozarslan, C. Pierpaoli. Probabilistic Identification and Estimation of Noise (PIESNO): A self-consistent approach and its applications in MRI. JMR, 199(1):94-103, 2009. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/probabilistic_fiber_tracking.py000066400000000000000000000115631263041327500233630ustar00rootroot00000000000000""" ===================================================== An introduction to the Probabilistic Direction Getter ===================================================== Probabilistic fiber tracking is a way of reconstructing white matter connections using diffusion MR imaging. Like deterministic fiber tracking, the probabilistic approach follows the trajectory of a possible pathway step by step starting at a seed, however, unlike deterministic tracking, the tracking direction at each point along the path is chosen at random from a distribution. The distribution at each point is different and depends on the observed diffusion data at that point. The distribution of tracking directions at each point can be represented as a probability mass function (PMF) if the possible tracking directions are restricted to discrete numbers of well distributed points on a sphere. This example is an extension of the "introduction to basic tracking" example. We'll begin by repeating a few steps from that example, loading the data and fitting a constrained spherical deconvolution (CSD) model. """ from dipy.data import read_stanford_labels from dipy.reconst.csdeconv import ConstrainedSphericalDeconvModel from dipy.tracking import utils from dipy.tracking.local import (ThresholdTissueClassifier, LocalTracking) hardi_img, gtab, labels_img = read_stanford_labels() data = hardi_img.get_data() labels = labels_img.get_data() affine = hardi_img.get_affine() seed_mask = labels == 2 white_matter = (labels == 1) | (labels == 2) seeds = utils.seeds_from_mask(seed_mask, density=1, affine=affine) csd_model = ConstrainedSphericalDeconvModel(gtab, None, sh_order=6) csd_fit = csd_model.fit(data, mask=white_matter) """ We use the GFA of the CSA model to build a tissue classifier. """ from dipy.reconst.shm import CsaOdfModel csa_model = CsaOdfModel(gtab, sh_order=6) gfa = csa_model.fit(data, mask=white_matter).gfa classifier = ThresholdTissueClassifier(gfa, .25) """ The fiber orientation distribution (FOD) of the CSD model estimates the distribution of small fiber bundles within each voxel. We can use this distribution for probabilistic fiber tracking. One way to do this is to represent the FOD using a discrete sphere. This discrete FOD can be used by the Probabilistic Direction Getter as a PMF for sampling tracking directions. We need to clip the FOD to use it as a PMF because the latter cannot have negative values. (Ideally the FOD should be strictly positive, but because of noise and/or model failures sometimes it can have negative values). """ from dipy.direction import ProbabilisticDirectionGetter from dipy.data import small_sphere from dipy.io.trackvis import save_trk fod = csd_fit.odf(small_sphere) pmf = fod.clip(min=0) prob_dg = ProbabilisticDirectionGetter.from_pmf(pmf, max_angle=30., sphere=small_sphere) streamlines = LocalTracking(prob_dg, classifier, seeds, affine, step_size=.5) save_trk("probabilistic_small_sphere.trk", streamlines, affine, labels.shape) """ One disadvantage of using a discrete PMF to represent possible tracking directions is that it tends to take up a lot of memory (RAM). The size of the PMF, the FOD in this case, must be equal to the number of possible tracking directions on the hemisphere, and every voxel has a unique PMF. In this case the data is ``(81, 106, 76)`` and ``small_sphere`` has 181 directions so the FOD is ``(81, 106, 76, 181)``. One way to avoid sampling the PMF and holding it in memory is to build the direction getter directly from the spherical harmonic representation of the FOD. By using this approach, we can also use a larger sphere, like ``default_sphere`` which has 362 directions on the hemisphere, without having to worry about memory limitations. """ from dipy.data import default_sphere prob_dg = ProbabilisticDirectionGetter.from_shcoeff(csd_fit.shm_coeff, max_angle=30., sphere=default_sphere) streamlines = LocalTracking(prob_dg, classifier, seeds, affine, step_size=.5) save_trk("probabilistic_shm_coeff.trk", streamlines, affine, labels.shape) """ Not all model fits have the ``shm_coeff`` attribute because not all models use this basis to represent the data internally. However we can fit the ODF of any model to the spherical harmonic basis using the ``peaks_from_model`` function. """ from dipy.direction import peaks_from_model peaks = peaks_from_model(csd_model, data, default_sphere, .5, 25, mask=white_matter, return_sh=True, parallel=True) fod_coeff = peaks.shm_coeff prob_dg = ProbabilisticDirectionGetter.from_shcoeff(fod_coeff, max_angle=30., sphere=default_sphere) streamlines = LocalTracking(prob_dg, classifier, seeds, affine, step_size=.5) save_trk("probabilistic_peaks_from_model.trk", streamlines, affine, labels.shape) dipy-0.10.1/doc/examples/quick_start.py000066400000000000000000000141211263041327500200260ustar00rootroot00000000000000""" ========================= Getting started with Dipy ========================= In diffusion MRI (dMRI) usually we use three types of files, a Nifti file with the diffusion weighted data, and two text files one with b-values and one with the b-vectors. In Dipy we provide tools to load and process these files and we also provide access to publically available datasets for those who haven't acquired yet their own datasets. With the following commands we can download a dMRI dataset """ from dipy.data import fetch_sherbrooke_3shell fetch_sherbrooke_3shell() """ By default these datasets will go in the .dipy folder inside your home directory. Here is how you can access them. """ from os.path import expanduser, join home = expanduser('~') """ ``dname`` holds the directory name where the 3 files are in. """ dname = join(home, '.dipy', 'sherbrooke_3shell') """ Here, we show the complete filenames of the 3 files """ fdwi = join(dname, 'HARDI193.nii.gz') print(fdwi) fbval = join(dname, 'HARDI193.bval') print(fbval) fbvec = join(dname, 'HARDI193.bvec') print(fbvec) """ ``/home/username/.dipy/sherbrooke_3shell/HARDI193.nii.gz`` ``/home/username/.dipy/sherbrooke_3shell/HARDI193.bval`` ``/home/username/.dipy/sherbrooke_3shell/HARDI193.bvec`` Now, that we have their filenames we can start checking what these look like. Let's start first by loading the dMRI datasets. For this purpose, we use a python library called nibabel_ which enables us to read and write neuroimaging-specific file formats. """ import nibabel as nib img = nib.load(fdwi) data = img.get_data() """ ``data`` is a 4D array where the first 3 dimensions are the i, j, k voxel coordinates and the last dimension is the number of non-weighted (S0s) and diffusion-weighted volumes. We can very easily check the size of ``data`` in the following way: """ print(data.shape) """ ``(128, 128, 60, 194)`` We can also check the dimensions of each voxel in the following way: """ print(img.get_header().get_zooms()[:3]) """ ``(2.0, 2.0, 2.0)`` We can quickly visualize the results using matplotlib_. For example, let's show here the middle axial slices of volume 0 and volume 10. """ import matplotlib.pyplot as plt axial_middle = data.shape[2] / 2 plt.figure('Showing the datasets') plt.subplot(1, 2, 1).set_axis_off() plt.imshow(data[:, :, axial_middle, 0].T, cmap='gray', origin='lower') plt.subplot(1, 2, 2).set_axis_off() plt.imshow(data[:, :, axial_middle, 10].T, cmap='gray', origin='lower') plt.show() plt.savefig('data.png', bbox_inches='tight') """ .. figure:: data.png :align: center **Showing the middle axial slice without (left) and with (right) diffusion weighting**. The next step is to load the b-values and b-vectors from the disk using the function ``read_bvals_bvecs``. """ from dipy.io import read_bvals_bvecs bvals, bvecs = read_bvals_bvecs(fbval, fbvec) """ In Dipy, we use an object called ``GradientTable`` which holds all the acquision specific parameters, e.g. b-values, b-vectors, timings and others. To create this object you can use the function ``gradient_table``. """ from dipy.core.gradients import gradient_table gtab = gradient_table(bvals, bvecs) """ Finally, you can use ``gtab`` (the GradientTable object) to show some information about the acquisition parameters """ print(gtab.info) """ B-values shape (193,) min 0.000000 max 3500.000000 B-vectors shape (193, 3) min -0.964050 max 0.999992 You, can also see the b-values using: """ print(gtab.bvals) """ :: [ 0. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 1000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 2000. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500. 3500.] Or, for example the 10 first b-vectors using: """ print(gtab.bvecs[:10, :]) """ :: array([[ 0. , 0. , 0. ], [ 0.999979 , -0.00504001, -0.00402795], [ 0. , 0.999992 , -0.00398794], [-0.0257055 , 0.653861 , -0.756178 ], [ 0.589518 , -0.769236 , -0.246462 ], [-0.235785 , -0.529095 , -0.815147 ], [-0.893578 , -0.263559 , -0.363394 ], [ 0.79784 , 0.133726 , -0.587851 ], [ 0.232937 , 0.931884 , -0.278087 ], [ 0.93672 , 0.144139 , -0.31903 ]]) ``gtab`` can be used to tell what part of the data is the S0 volumes (volumes which correspond to b-values of 0). """ S0s = data[:, :, :, gtab.b0s_mask] """ Here, we had only 1 S0 as we can verify by looking at the dimensions of S0s """ print(S0s.shape) """ ``(128, 128, 60, 1)`` Just, for fun let's save this in a new Nifti file. """ nib.save(nib.Nifti1Image(S0s, img.get_affine()), 'HARDI193_S0.nii.gz') """ Now, that we learned how to load dMRI datasets we can start the analysis. See example :ref:`example_reconst_dti` to learn how to create FA maps. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_csa.py000066400000000000000000000065211263041327500200050ustar00rootroot00000000000000""" ================================================= Reconstruct with Constant Solid Angle (Q-Ball) ================================================= We show how to apply a Constant Solid Angle ODF (Q-Ball) model from Aganj et. al (MRM 2010) to your datasets. First import the necessary modules: """ import numpy as np import nibabel as nib from dipy.data import fetch_stanford_hardi, read_stanford_hardi, get_sphere from dipy.reconst.shm import CsaOdfModel, normalize_data from dipy.direction import peaks_from_model """ Download and read the data for this tutorial. """ fetch_stanford_hardi() img, gtab = read_stanford_hardi() """ img contains a nibabel Nifti1Image object (data) and gtab contains a GradientTable object (gradient information e.g. b-values). For example to read the b-values it is possible to write print(gtab.bvals). Load the raw diffusion data and the affine. """ data = img.get_data() print('data.shape (%d, %d, %d, %d)' % data.shape) """ data.shape ``(81, 106, 76, 160)`` Remove most of the background using dipy's mask module. """ from dipy.segment.mask import median_otsu maskdata, mask = median_otsu(data, 3, 1, True, vol_idx=range(10, 50), dilate=2) """ We instantiate our CSA model with spherical harmonic order of 4 """ csamodel = CsaOdfModel(gtab, 4) """ `Peaks_from_model` is used to calculate properties of the ODFs (Orientation Distribution Function) and return for example the peaks and their indices, or GFA which is similar to FA but for ODF based models. This function mainly needs a reconstruction model, the data and a sphere as input. The sphere is an object that represents the spherical discrete grid where the ODF values will be evaluated. """ sphere = get_sphere('symmetric724') csapeaks = peaks_from_model(model=csamodel, data=maskdata, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=mask, return_odf=False, normalize_peaks=True) GFA = csapeaks.gfa print('GFA.shape (%d, %d, %d)' % GFA.shape) """ GFA.shape ``(81, 106, 76)`` Apart from GFA, csapeaks also has the attributes peak_values, peak_indices and ODF. peak_values shows the maxima values of the ODF and peak_indices gives us their position on the discrete sphere that was used to do the reconstruction of the ODF. In order to obtain the full ODF, return_odf should be True. Before enabling this option, make sure that you have enough memory. Let's visualize the ODFs of a small rectangular area in an axial slice of the splenium of the corpus callosum (CC). """ data_small = maskdata[13:43, 44:74, 28:29] from dipy.data import get_sphere sphere = get_sphere('symmetric724') from dipy.viz import fvtk r = fvtk.ren() csaodfs = csamodel.fit(data_small).odf(sphere) """ It is common with CSA ODFs to produce negative values, we can remove those using ``np.clip`` """ csaodfs = np.clip(csaodfs, 0, np.max(csaodfs, -1)[..., None]) fvtk.add(r, fvtk.sphere_funcs(csaodfs, sphere, colormap='jet')) print('Saving illustration as csa_odfs.png') fvtk.record(r, n_frames=1, out_path='csa_odfs.png', size=(600, 600)) """ .. figure:: csa_odfs.png :align: center **Constant Solid Angle ODFs**. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_csa_parallel.py000066400000000000000000000071421263041327500216610ustar00rootroot00000000000000""" ==================================== Parallel reconstruction using Q-Ball ==================================== We show an example of parallel reconstruction using a Q-Ball Constant Solid Angle model (see Aganj et. al (MRM 2010)) and `peaks_from_model`. Import modules, fetch and read data, and compute the mask. """ import time from dipy.data import fetch_stanford_hardi, read_stanford_hardi, get_sphere from dipy.reconst.shm import CsaOdfModel from dipy.direction import peaks_from_model from dipy.segment.mask import median_otsu fetch_stanford_hardi() img, gtab = read_stanford_hardi() data = img.get_data() maskdata, mask = median_otsu(data, 3, 1, True, vol_idx=range(10, 50), dilate=2) """ We instantiate our CSA model with spherical harmonic order of 4 """ csamodel = CsaOdfModel(gtab, 4) """ `Peaks_from_model` is used to calculate properties of the ODFs (Orientation Distribution Function) and return for example the peaks and their indices, or GFA which is similar to FA but for ODF based models. This function mainly needs a reconstruction model, the data and a sphere as input. The sphere is an object that represents the spherical discrete grid where the ODF values will be evaluated. """ sphere = get_sphere('symmetric724') start_time = time.time() """ We will first run `peaks_from_model` using parallelism with 2 processes. If `nbr_processes` is None (default option) then this function will find the total number of processors from the operating system and use this number as `nbr_processes`. Sometimes it makes sense to use only a few of the processes in order to allow resources for other applications. However, most of the times using the default option will be sufficient. """ csapeaks_parallel = peaks_from_model(model=csamodel, data=maskdata, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=mask, return_odf=False, normalize_peaks=True, npeaks=5, parallel=True, nbr_processes=2) time_parallel = time.time() - start_time print("peaks_from_model using 2 processes ran in : " + str(time_parallel) + " seconds") """ peaks_from_model using 2 process ran in : 114.333221912 seconds, using 2 process If we don't use parallelism then we need to set `parallel=False`: """ start_time = time.time() csapeaks = peaks_from_model(model=csamodel, data=maskdata, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=mask, return_odf=False, normalize_peaks=True, npeaks=5, parallel=False, nbr_processes=None) time_single = time.time() - start_time print("peaks_from_model ran in : " + str(time_single) + " seconds") """ peaks_from_model ran in : 196.872478008 seconds """ print("Speedup factor : " + str(time_single / time_parallel)) """ Speedup factor : 1.72191839533 In Windows if you get a runtime error about frozen executable please start your script by adding your code above in a ``main`` function and use: if __name__ == '__main__': import multiprocessing multiprocessing.freeze_support() main() """ dipy-0.10.1/doc/examples/reconst_csd.py000066400000000000000000000170051263041327500200070ustar00rootroot00000000000000""" .. _reconst-csd: ======================================================= Reconstruction with Constrained Spherical Deconvolution ======================================================= This example shows how to use Constrained Spherical Deconvolution (CSD) introduced by Tournier et al. [Tournier2007]_. This method is mainly useful with datasets with gradient directions acquired on a spherical grid. The basic idea with this method is that if we could estimate the response function of a single fiber then we could deconvolve the measured signal and obtain the underlying fiber distribution. Let's first load the data. We will use a dataset with 10 b0s and 150 non-b0s with b-value 2000. """ import numpy as np from dipy.data import fetch_stanford_hardi, read_stanford_hardi fetch_stanford_hardi() img, gtab = read_stanford_hardi() data = img.get_data() """ You can verify the b-values of the datasets by looking at the attribute `gtab.bvals`. In CSD there is an important pre-processing step: the estimation of the fiber response function. In order to do this we look for regions of the brain where it is known that there are single coherent fiber populations. For example if we use an ROI at the center of the brain, we will find single fibers from the corpus callosum. The ``auto_response`` function will calculate FA for an ROI of radius equal to ``roi_radius`` in the center of the volume and return the response function estimated in that region for the voxels with FA higher than 0.7. """ from dipy.reconst.csdeconv import auto_response response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7) """ The ``response`` tuple contains two elements. The first is an array with the eigenvalues of the response function and the second is the average S0 for this response. It is good practice to always validate the result of auto_response. For this purpose we can print the elements of ``response`` and have a look at their values. """ print(response) """ (array([ 0.0014, 0.00029, 0.00029]), 416.206) The tensor generated from the response must be prolate (two smaller eigenvalues should be equal) and look anisotropic with a ratio of second to first eigenvalue of about 0.2. Or in other words, the axial diffusivity of this tensor should be around 5 times larger than the radial diffusivity. """ print(ratio) """ 0.21197 We can double-check that we have a good response function by visualizing the response function's ODF. Here is how you would do that: """ from dipy.viz import fvtk ren = fvtk.ren() evals = response[0] evecs = np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]).T from dipy.data import get_sphere sphere = get_sphere('symmetric724') from dipy.sims.voxel import single_tensor_odf response_odf = single_tensor_odf(sphere.vertices, evals, evecs) response_actor = fvtk.sphere_funcs(response_odf, sphere) fvtk.add(ren, response_actor) print('Saving illustration as csd_response.png') fvtk.record(ren, out_path='csd_response.png', size=(200, 200)) """ .. figure:: csd_response.png :align: center **Estimated response function**. """ fvtk.rm(ren, response_actor) """ Depending on the dataset, FA threshold may not be the best way to find the best possible response function. For one, it depends on the diffusion tensor (FA and first eigenvector), which has lower accuracy at high b-values. Alternatively, the response function can be calibrated in a data-driven manner [Tax2014]_. First, the data is deconvolved with a 'fat' response function. All voxels that are considered to contain only one peak in this deconvolution (as determined by the peak threshold which gives an upper limit of the ratio of the second peak to the first peak) are maintained, and from these voxels a new response function is determined. This process is repeated until convergence is reached. Here we calibrate the response function on a small part of the data. """ from dipy.reconst.csdeconv import recursive_response """ A WM mask can shorten computation time for the whole dataset. Here it is created based on the DTI fit. """ import dipy.reconst.dti as dti tenmodel = dti.TensorModel(gtab) tenfit = tenmodel.fit(data, mask=data[..., 0] > 200) from dipy.reconst.dti import fractional_anisotropy FA = fractional_anisotropy(tenfit.evals) MD = dti.mean_diffusivity(tenfit.evals) wm_mask = (np.logical_or(FA >= 0.4, (np.logical_and(FA >= 0.15, MD >= 0.0011)))) response = recursive_response(gtab, data, mask=wm_mask, sh_order=8, peak_thr=0.01, init_fa=0.08, init_trace=0.0021, iter=8, convergence=0.001, parallel=True) """ We can check the shape of the signal of the response function, which should be like a pancake: """ response_signal = response.on_sphere(sphere) response_actor = fvtk.sphere_funcs(response_signal, sphere) ren = fvtk.ren() fvtk.add(ren, response_actor) print('Saving illustration as csd_recursive_response.png') fvtk.record(ren, out_path='csd_recursive_response.png', size=(200, 200)) """ .. figure:: csd_recursive_response.png :align: center **Estimated response function using recursive calibration**. """ fvtk.rm(ren, response_actor) """ Now, that we have the response function, we are ready to start the deconvolution process. Let's import the CSD model and fit the datasets. """ from dipy.reconst.csdeconv import ConstrainedSphericalDeconvModel csd_model = ConstrainedSphericalDeconvModel(gtab, response) """ For illustration purposes we will fit only a small portion of the data. """ data_small = data[20:50, 55:85, 38:39] csd_fit = csd_model.fit(data_small) """ Show the CSD-based ODFs also known as FODFs (fiber ODFs). """ csd_odf = csd_fit.odf(sphere) """ Here we visualize only a 30x30 region. """ fodf_spheres = fvtk.sphere_funcs(csd_odf, sphere, scale=1.3, norm=False) fvtk.add(ren, fodf_spheres) print('Saving illustration as csd_odfs.png') fvtk.record(ren, out_path='csd_odfs.png', size=(600, 600)) """ .. figure:: csd_odfs.png :align: center **CSD ODFs**. In Dipy we also provide tools for finding the peak directions (maxima) of the ODFs. For this purpose we recommend using ``peaks_from_model``. """ from dipy.direction import peaks_from_model csd_peaks = peaks_from_model(model=csd_model, data=data_small, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, parallel=True) fvtk.clear(ren) fodf_peaks = fvtk.peaks(csd_peaks.peak_dirs, csd_peaks.peak_values, scale=1.3) fvtk.add(ren, fodf_peaks) print('Saving illustration as csd_peaks.png') fvtk.record(ren, out_path='csd_peaks.png', size=(600, 600)) """ .. figure:: csd_peaks.png :align: center **CSD Peaks**. We can finally visualize both the ODFs and peaks in the same space. """ fodf_spheres.GetProperty().SetOpacity(0.4) fvtk.add(ren, fodf_spheres) print('Saving illustration as csd_both.png') fvtk.record(ren, out_path='csd_both.png', size=(600, 600)) """ .. figure:: csd_both.png :align: center **CSD Peaks and ODFs**. .. [Tournier2007] J-D. Tournier, F. Calamante and A. Connelly, "Robust determination of the fibre orientation distribution in diffusion MRI: Non-negativity constrained super-resolved spherical deconvolution", Neuroimage, vol. 35, no. 4, pp. 1459-1472, 2007. .. [Tax2014] C.M.W. Tax, B. Jeurissen, S.B. Vos, M.A. Viergever, A. Leemans, "Recursive calibration of the fiber response function for spherical deconvolution of diffusion MRI data", Neuroimage, vol. 86, pp. 67-80, 2014. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_csd_parallel.py000066400000000000000000000072341263041327500216660ustar00rootroot00000000000000""" ================================= Parallel reconstruction using CSD ================================= This example shows how to use parallelism (multiprocessing) using ``peaks_from_model`` in order to speedup the signal reconstruction process. For this example will we use the same initial steps as we used in :ref:`example_reconst_csd`. Import modules, fetch and read data, apply the mask and calculate the response function. """ import multiprocessing from dipy.data import fetch_stanford_hardi, read_stanford_hardi fetch_stanford_hardi() img, gtab = read_stanford_hardi() data = img.get_data() from dipy.segment.mask import median_otsu maskdata, mask = median_otsu(data, 3, 1, False, vol_idx=range(10, 50), dilate=2) from dipy.reconst.csdeconv import auto_response response, ratio = auto_response(gtab, maskdata, roi_radius=10, fa_thr=0.7) data = maskdata[:, :, 33:37] mask = mask[:, :, 33:37] """ Now we are ready to import the CSD model and fit the datasets. """ from dipy.reconst.csdeconv import ConstrainedSphericalDeconvModel csd_model = ConstrainedSphericalDeconvModel(gtab, response) from dipy.data import get_sphere sphere = get_sphere('symmetric724') """ Compute the CSD-based ODFs using ``peaks_from_model``. This function has a parameter called ``parallel`` which allows for the voxels to be processed in parallel. If ``nbr_processes`` is None it will figure out automatically the number of CPUs available in your system. Alternatively, you can set ``nbr_processes`` manually. Here, we show an example where we compare the duration of execution with or without parallelism. """ import time from dipy.direction import peaks_from_model start_time = time.time() csd_peaks_parallel = peaks_from_model(model=csd_model, data=data, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=mask, return_sh=True, return_odf=False, normalize_peaks=True, npeaks=5, parallel=True, nbr_processes=None) time_parallel = time.time() - start_time print("peaks_from_model using " + str(multiprocessing.cpu_count()) + " process ran in :" + str(time_parallel) + " seconds") """ ``peaks_from_model`` using 8 processes ran in :114.425682068 seconds """ start_time = time.time() csd_peaks = peaks_from_model(model=csd_model, data=data, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=mask, return_sh=True, return_odf=False, normalize_peaks=True, npeaks=5, parallel=False, nbr_processes=None) time_single = time.time() - start_time print("peaks_from_model ran in :" + str(time_single) + " seconds") """ ``peaks_from_model`` ran in :242.772505999 seconds """ print("Speedup factor : " + str(time_single / time_parallel)) """ Speedup factor : 2.12166099088 In Windows if you get a runtime error about frozen executable please start your script by adding your code above in a ``main`` function and use: if __name__ == '__main__': import multiprocessing multiprocessing.freeze_support() main() """ dipy-0.10.1/doc/examples/reconst_dki.py000066400000000000000000000272601263041327500200110ustar00rootroot00000000000000""" ===================================================================== Reconstruction of the diffusion signal with the kurtosis tensor model ===================================================================== The diffusion kurtosis model is an expansion of the diffusion tensor model (see :ref:`example_reconst_dti`). In addition to the diffusion tensor (DT), the diffusion kurtosis model quantifies the degree to which water diffusion in biological tissues is non-Gaussian using the kurtosis tensor (KT) [Jensen2005]_. Measurements of non-Gaussian diffusion from the diffusion kurtosis model are of interest because they can be used to charaterize tissue microstructural heterogeneity [Jensen2010]_ and to derive concrete biophysical parameters, such as the density of axonal fibres and diffusion tortuosity [Fierem2011]_. Moreover, DKI can be used to resolve crossing fibers in tractography and to obtain invariant rotational measures not limited to well-aligned fiber populations [NetoHe2015]_. The diffusion kurtosis model expresses the diffusion-weighted signal as: .. math:: S(n,b)=S_{0}e^{-bD(n)+\frac{1}{6}b^{2}D(n)^{2}K(n)} where $\mathbf{b}$ is the applied diffusion weighting (which is dependent on the measurement parameters), $S_0$ is the signal in the absence of diffusion gradient sensitization, $\mathbf{D(n)}$ is the value of diffusion along direction $\mathbf{n}$, and $\mathbf{K(n)}$ is the value of kurtosis along direction $\mathbf{n}$. The directional diffusion $\mathbf{D(n)}$ and kurtosis $\mathbf{K(n)}$ can be related to the diffusion tensor (DT) and kurtosis tensor (KT) using the following equations: .. math:: D(n)=\sum_{i=1}^{3}\sum_{j=1}^{3}n_{i}n_{j}D_{ij} and .. math:: K(n)=\frac{MD^{2}}{D(n)^{2}}\sum_{i=1}^{3}\sum_{j=1}^{3}\sum_{k=1}^{3} \sum_{l=1}^{3}n_{i}n_{j}n_{k}n_{l}W_{ijkl} where $D_{ij}$ are the elements of the second-order DT, and $W_{ijkl}$ the elements of the fourth-order KT and $MD$ is the mean diffusivity. As the DT, KT has antipodal symmetry and thus only 15 Wijkl elemments are needed to fully characterize the KT: .. math:: \begin{matrix} ( & W_{xxxx} & W_{yyyy} & W_{zzzz} & W_{xxxy} & W_{xxxz} & ... \\ & W_{xyyy} & W_{yyyz} & W_{xzzz} & W_{yzzz} & W_{xxyy} & ... \\ & W_{xxzz} & W_{yyzz} & W_{xxyz} & W_{xyyz} & W_{xyzz} & & )\end{matrix} In the following example we show how to fit the diffusion kurtosis model on diffusion-weighted multi-shell datasets and how to estimate diffusion kurtosis based statistics. First, we import all relevant modules: """ import numpy as np import dipy.reconst.dki as dki import dipy.reconst.dti as dti import matplotlib.pyplot as plt from dipy.data import fetch_cenir_multib from dipy.data import read_cenir_multib from dipy.segment.mask import median_otsu from dipy.denoise.noise_estimate import estimate_sigma from dipy.denoise.nlmeans import nlmeans """ DKI requires multi-shell data, i.e. data acquired from more than one non-zero b-value. Here, we use fetch to download a multi-shell dataset with parameters that are similar to the data collected in the Human Connectome Project (HCP). The total size of the downloaded data is 1760 MBytes, however you only need to fetch it once. Parameter ``with_raw`` of function ``fetch_cenir_multib`` is set to ``False`` to only download eddy-current/motion corrected data: """ fetch_cenir_multib(with_raw=False) """ Next, we read the saved dataset. To decrease the influence of diffusion signal Taylor approximation components larger than the fourth order (componets not taken into account by the diffusion kurtosis tensor), we only select the b-values up to 2000 $s.mm^{-2}$: """ bvals = [200, 400, 1000, 2000] img, gtab = read_cenir_multib(bvals) data = img.get_data() affine = img.get_affine() """ Function ``read_cenir_multib`` return img and gtab which contains respectively a nibabel Nifti1Image object (where the data can be extracted) and a GradientTable object with information about the b-values and b-vectors. Before fitting the data, we preform some data pre-processing. We first compute a brain mask to avoid unnecessary calculations on the background of the image. """ maskdata, mask = median_otsu(data, 4, 2, False, vol_idx=[0, 1], dilate=1) """ Since the diffusion kurtosis models involves the estimation of a large number of parameters [TaxCMW2015]_ and since the non-Gaussian components of the diffusion signal are more sensitive to artefacts [NetoHe2012]_, a fundamental data pre-processing step for diffusion kurtosis fitting is to denoise our data. For this, we use Dipy's non-local mean filter (see :ref:`example-denoise-nlmeans`). Note that, since the HCP-like data has a large number of diffusion-weigthed volumes, this procedure can take a couple of hours to compute the entire dataset. Therefore, to speed the run time in this example we only denoise an axial slice of the data. """ axial_slice = 40 sigma = estimate_sigma(data, N=4) mask_roi = np.zeros(data.shape[:-1], dtype=bool) mask_roi[:, :, axial_slice] = mask[:, :, axial_slice] den = nlmeans(data, sigma=sigma, mask=mask_roi) den = den[:, :, axial_slice, :] """ Now that we have loaded and prepared the voxels to process we can go forward with the voxel reconstruction. This can be done by first instantiating the DiffusionKurtosisModel in the following way: """ dkimodel = dki.DiffusionKurtosisModel(gtab) """ To fit the data using the defined model object, we call the ``fit`` function of this object: """ dkifit = dkimodel.fit(den) """ The fit method creates a DiffusionKurtosisFit object which contains all the diffusion and kurtosis fitting parameters and other DKI attributes. For instance, since the diffusion kurtosis model estimates the diffusion tensor, all diffusion standard tensor statistics can be computed from the DiffusionKurtosisFit instance. For example, we show below how to extract the fractional anisotropy (FA), the mean diffusivity (MD), the axial diffusivity (AD) and the radial diffusivity (RD) from the DiffusionKurtosisiFit instance. """ FA = dkifit.fa MD = dkifit.md AD = dkifit.ad RD = dkifit.rd """ Note that these four standard measures could also be computed from Dipy's DTI module. Theoretically, computing these measures from both models should be analogous. However, since the diffusion kurtosis model involves a larger number of parameters, diffusion statistics maps can look more noisy. On the other hand, the diffusion statistics from the kurtosis model are expected to have better accuracy [Veraar2011]_. For comparison purposes, we calculate below the FA, MD, AD, and RD using Dipy's TensorModel. """ tenmodel = dti.TensorModel(gtab) tenfit = tenmodel.fit(den) dti_FA = tenfit.fa dti_MD = tenfit.md dti_AD = tenfit.ad dti_RD = tenfit.rd """ The DT based measures can be easly visualized using matplotlib. For example, the FA, MD, AD, and RD obtain from the diffusion kurtosis model (upper panels) and the tensor model (lower panels) are plotted for the selected axial slice. """ fig1, ax = plt.subplots(2, 4, figsize=(12, 6), subplot_kw={'xticks': [], 'yticks': []}) fig1.subplots_adjust(hspace=0.3, wspace=0.05) ax.flat[0].imshow(FA, cmap='gray') ax.flat[0].set_title('FA (DKI)') ax.flat[1].imshow(MD, cmap='gray') ax.flat[1].set_title('MD (DKI)') ax.flat[2].imshow(AD, cmap='gray') ax.flat[2].set_title('AD (DKI)') ax.flat[3].imshow(RD, cmap='gray') ax.flat[3].set_title('RD (DKI)') ax.flat[4].imshow(dti_FA, cmap='gray') ax.flat[4].set_title('FA (DTI)') ax.flat[5].imshow(dti_MD, cmap='gray') ax.flat[5].set_title('MD (DTI)') ax.flat[6].imshow(dti_AD, cmap='gray') ax.flat[6].set_title('AD (DTI)') ax.flat[7].imshow(dti_RD, cmap='gray') ax.flat[7].set_title('RD (DTI)') plt.show() fig1.savefig('Diffusion_tensor_measures_from_DTI_and_DKI.png') """ .. figure:: Diffusion_tensor_measures_from_DTI_and_DKI.png :align: center **Diffusion tensor measures obtain from the diffusion tensor estimated from DKI (upper panels) and DTI (lower panels).**. From the figure, we can see that the standard diffusion measures of the HCP-like data obtained from the diffusion kurtosis model have similar contrasts to the standard diffusion measures obtain from the tensor model. This can be explained by the high quality of the dataset and the high performance of the diffusion kurtosis fit procedure. In addition to the standard diffusion statistics, the DiffusionKurtosisFit instance can be used to estimate the non-Gaussian measures of mean kurtosis (MK), the axial kurtosis (AK) and the radial kurtosis (RK). """ MK = dkifit.mk(0, 3) AK = dkifit.ak(0, 3) RK = dkifit.rk(0, 3) """ Kurtosis measures are susceptible to high amplitude outliers. The impact of high amplitude kurtosis outliers were removed on the above lines of codes by introducing as an optional input the extremes of the typical values of kurtosis (assumed here as the values on the range between 0 and 3) Now we are ready to plot the kurtosis standard measures using matplotlib: """ fig2, ax = plt.subplots(1, 3, figsize=(12, 6), subplot_kw={'xticks': [], 'yticks': []}) fig2.subplots_adjust(hspace=0.3, wspace=0.05) ax.flat[0].imshow(MK, cmap='gray') ax.flat[0].set_title('MK') ax.flat[1].imshow(AK, cmap='gray') ax.flat[1].set_title('AK') ax.flat[2].imshow(RK, cmap='gray') ax.flat[2].set_title('RK') plt.show() fig2.savefig('Kurtosis_tensor_standard_measures.png') """ .. figure:: Kurtosis_tensor_standard_measures.png :align: center **Kurtosis tensor standard measures obtain from the kurtosis tensor.**. The non-Gaussian behaviour of the diffusion signal is larger when water diffusion is restrited by compartments and barriers (e.g., myelin sheath). Therefore, as the figure above shows, white matter kurtosis values are smaller along the axial direction of fibers (smaller amplitudes shown in the AK map) than for the radial directions (larger amplitudes shown in the RK map). References: .. [TaxCMW2015] Tax CMW, Otte WM, Viergever MA, Dijkhuizen RM, Leemans A (2014). REKINDLE: Robust extraction of kurtosis INDices with linear estimation. Magnetic Resonance in Medicine 73(2): 794-808. .. [Jensen2005] Jensen JH, Helpern JA, Ramani A, Lu H, Kaczynski K (2005). Diffusional Kurtosis Imaging: The Quantification of Non_Gaussian Water Diffusion by Means of Magnetic Resonance Imaging. Magnetic Resonance in Medicine 53: 1432-1440 .. [Jensen2010] Jensen JH, Helpern JA (2010). MRI quantification of non-Gaussian water diffusion by kurtosis analysis. NMR in Biomedicine 23(7): 698-710 .. [Fierem2011] Fieremans E, Jensen JH, Helpern JA (2011). White matter characterization with diffusion kurtosis imaging. NeuroImage 58: 177-188 .. [NetoHe2012] Neto Henriques R, Ferreira H, Correia M, (2012). Diffusion kurtosis imaging of the healthy human brain. Master Dissertation Bachelor and Master Programin Biomedical Engineering and Biophysics, Faculty of Sciences. http://repositorio.ul.pt/bitstream/10451/8511/1/ulfc104137_tm_Rafael_Henriques.pdf .. [NetoHe2015] Neto Henriques R, Correia MM, Nunes RG, Ferreira HA (2015). Exploring the 3D geometry of the diffusion kurtosis tensor - Impact on the development of robust tractography procedures and novel biomarkers, NeuroImage 111: 85-99 .. [Veraar2011] Veraart J, Poot DH, Van Hecke W, Blockx I, Van der Linden A, Verhoye M, Sijbers J (2011). More Accurate Estimation of Diffusion Tensor Parameters Using Diffusion Kurtosis Imaging. Magnetic Resonance in Medicine 65(1): 138-145 .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_dsi.py000066400000000000000000000064541263041327500200230ustar00rootroot00000000000000""" =========================================== Reconstruct with Diffusion Spectrum Imaging =========================================== We show how to apply Diffusion Spectrum Imaging [Wedeen08]_ to diffusion MRI datasets of Cartesian keyhole diffusion gradients. First import the necessary modules: """ from dipy.data import fetch_taiwan_ntu_dsi, read_taiwan_ntu_dsi, get_sphere from dipy.reconst.dsi import DiffusionSpectrumModel """ Download and read the data for this tutorial. """ fetch_taiwan_ntu_dsi() img, gtab = read_taiwan_ntu_dsi() """ img contains a nibabel Nifti1Image object (data) and gtab contains a GradientTable object (gradient information e.g. b-values). For example to read the b-values it is possible to write print(gtab.bvals). Load the raw diffusion data and the affine. """ data = img.get_data() print('data.shape (%d, %d, %d, %d)' % data.shape) """ data.shape ``(96, 96, 60, 203)`` This dataset has anisotropic voxel sizes, therefore reslicing is necessary. """ affine = img.get_affine() """ Read the voxel size from the image header. """ voxel_size = img.get_header().get_zooms()[:3] """ Instantiate the Model and apply it to the data. """ dsmodel = DiffusionSpectrumModel(gtab) """ Lets just use one slice only from the data. """ dataslice = data[:, :, data.shape[2] / 2] dsfit = dsmodel.fit(dataslice) """ Load an odf reconstruction sphere """ sphere = get_sphere('symmetric724') """ Calculate the ODFs with this specific sphere """ ODF = dsfit.odf(sphere) print('ODF.shape (%d, %d, %d)' % ODF.shape) """ ODF.shape ``(96, 96, 724)`` In a similar fashion it is possible to calculate the PDFs of all voxels in one call with the following way """ PDF = dsfit.pdf() print('PDF.shape (%d, %d, %d, %d, %d)' % PDF.shape) """ PDF.shape ``(96, 96, 17, 17, 17)`` We see that even for a single slice this PDF array is close to 345 MBytes so we really have to be careful with memory usage when use this function with a full dataset. The simple solution is to generate/analyze the ODFs/PDFs by iterating through each voxel and not store them in memory if that is not necessary. """ from dipy.core.ndindex import ndindex for index in ndindex(dataslice.shape[:2]): pdf = dsmodel.fit(dataslice[index]).pdf() """ If you really want to save the PDFs of a full dataset on the disc we recommend using memory maps (``numpy.memmap``) but still have in mind that even if you do that for example for a dataset of volume size ``(96, 96, 60)`` you will need about 2.5 GBytes which can take less space when reasonable spheres (with < 1000 vertices) are used. Let's now calculate a map of Generalized Fractional Anisotropy (GFA) [Tuch04]_ using the DSI ODFs. """ from dipy.reconst.odf import gfa GFA = gfa(ODF) import matplotlib.pyplot as plt fig_hist, ax = plt.subplots(1) ax.set_axis_off() plt.imshow(GFA.T) plt.savefig('dsi_gfa.png', bbox_inches='tight', origin='lower', cmap='gray') """ .. figure:: dsi_gfa.png :align: center See also :ref:`example_reconst_dsi_metrics` for calculating different types of DSI maps. .. [Wedeen08] Wedeen et al., Diffusion spectrum magnetic resonance imaging (DSI) tractography of crossing fibers, Neuroimage, vol 41, no 4, 1267-1277, 2008. .. [Tuch04] Tuch, D.S, Q-ball imaging, MRM, vol 52, no 6, 1358-1372, 2004. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_dsi_metrics.py000066400000000000000000000106731263041327500215470ustar00rootroot00000000000000""" =============================== Calculate DSI-based scalar maps =============================== We show how to calculate two DSI-based scalar maps: return to origin probability (rtop) [Descoteaux2011]_ and mean square displacement (msd) [Wu2007]_, [Wu2008]_ on your dataset. First import the necessary modules: """ import numpy as np import matplotlib.pyplot as plt from dipy.data import fetch_taiwan_ntu_dsi, read_taiwan_ntu_dsi from dipy.reconst.dsi import DiffusionSpectrumModel """ Download and read the data for this tutorial. """ fetch_taiwan_ntu_dsi() img, gtab = read_taiwan_ntu_dsi() """ img contains a nibabel Nifti1Image object (data) and gtab contains a GradientTable object (gradient information e.g. b-values). For example to read the b-values it is possible to write print(gtab.bvals). Load the raw diffusion data and the affine. """ data = img.get_data() affine = img.get_affine() print('data.shape (%d, %d, %d, %d)' % data.shape) """ Instantiate the Model and apply it to the data. """ dsmodel = DiffusionSpectrumModel(gtab, qgrid_size=35, filter_width=18.5) """ Lets just use one slice only from the data. """ dataslice = data[30:70, 20:80, data.shape[2] / 2] """ Normalize the signal by the b0 """ dataslice = dataslice / (dataslice[..., 0, None]).astype(np.float) """ Calculate the return to origin probability on the signal that corresponds to the integral of the signal. """ print('Calculating... rtop_signal') rtop_signal = dsmodel.fit(dataslice).rtop_signal() """ Now we calculate the return to origin probability on the propagator, that corresponds to its central value. By default the propagator is divided by its sum in order to obtain a properly normalized pdf, however this normalization changes the values of rtop, therefore in order to compare it with the rtop previously calculated on the signal we turn the normalized parameter to false. """ print('Calculating... rtop_pdf') rtop_pdf = dsmodel.fit(dataslice).rtop_pdf(normalized=False) """ In theory, these two measures must be equal, to show that we calculate the mean square error on this two measures. """ mse = np.sum((rtop_signal - rtop_pdf) ** 2) / rtop_signal.size print("mse = %f" % mse) """ mse = 0.000000 Leaving the normalized parameter to the default changes the values of the rtop but not the contrast between the voxels. """ print('Calculating... rtop_pdf_norm') rtop_pdf_norm = dsmodel.fit(dataslice).rtop_pdf() """ Let's calculate the mean square displacement on the normalized propagator. """ print('Calculating... msd_norm') msd_norm = dsmodel.fit(dataslice).msd_discrete() """ Turning the normalized parameter to false makes it possible to calculate the mean square displacement on the propagator without normalization. """ print('Calculating... msd') msd = dsmodel.fit(dataslice).msd_discrete(normalized=False) """ Show the rtop images and save them in rtop.png. """ fig = plt.figure(figsize=(6, 6)) ax1 = fig.add_subplot(2, 2, 1, title='rtop_signal') ax1.set_axis_off() ind = ax1.imshow(rtop_signal.T, interpolation='nearest', origin='lower') plt.colorbar(ind) ax2 = fig.add_subplot(2, 2, 2, title='rtop_pdf_norm') ax2.set_axis_off() ind = ax2.imshow(rtop_pdf_norm.T, interpolation='nearest', origin='lower') plt.colorbar(ind) ax3 = fig.add_subplot(2, 2, 3, title='rtop_pdf') ax3.set_axis_off() ind = ax3.imshow(rtop_pdf.T, interpolation='nearest', origin='lower') plt.colorbar(ind) plt.savefig('rtop.png') """ .. figure:: rtop.png :align: center **Return to origin probability**. Show the msd images and save them in msd.png. """ fig = plt.figure(figsize=(7, 3)) ax1 = fig.add_subplot(1, 2, 1, title='msd_norm') ax1.set_axis_off() ind = ax1.imshow(msd_norm.T, interpolation='nearest', origin='lower') plt.colorbar(ind) ax2 = fig.add_subplot(1, 2, 2, title='msd') ax2.set_axis_off() ind = ax2.imshow(msd.T, interpolation='nearest', origin='lower') plt.colorbar(ind) plt.savefig('msd.png') """ .. figure:: msd.png :align: center **Mean square displacement**. .. [Descoteaux2011] Descoteaux M. et. al , "Multiple q-shell diffusion propagator imaging", Medical Image Analysis, vol 15, No. 4, p. 603-621, 2011. .. [Wu2007] Wu Y. et al., "Hybrid diffusion imaging", NeuroImage, vol 36, p. 617-629, 2007. .. [Wu2008] Wu Y. et al., "Computation of Diffusion Function Measures in q -Space Using Magnetic Resonance Hybrid Diffusion Imaging", IEEE TRANSACTIONS ON MEDICAL IMAGING, vol. 27, No. 6, p. 858-865, 2008 .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_dsid.py000066400000000000000000000047001263041327500201570ustar00rootroot00000000000000""" ======================== DSI Deconvolution vs DSI ======================== An alternative method to DSI is the method proposed by [Canales10]_ which is called DSI with Deconvolution. This algorithm is using Lucy-Richardson deconvolution in the diffusion propagator with the goal to create sharper ODFs with higher angular resolution. In this example we will show with simulated data how this method's ODF performs against standard DSI ODF and a ground truth multi tensor ODF. """ from dipy.sims.voxel import multi_tensor, multi_tensor_odf from dipy.data import get_data, get_sphere from dipy.core.gradients import gradient_table from dipy.reconst.dsi import (DiffusionSpectrumDeconvModel, DiffusionSpectrumModel) """ For the simulation we will use a standard DSI acqusition scheme with 514 gradient directions and 1 S0. """ btable = np.loadtxt(get_data('dsi515btable')) gtab = gradient_table(btable[:, 0], btable[:, 1:]) """ Let's create a multi tensor with 2 fiber directions at 60 degrees. """ evals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) directions = [(-30, 0), (30, 0)] fractions = [50, 50] signal, _ = multi_tensor(gtab, evals, 100, angles=directions, fractions=fractions, snr=None) sphere = get_sphere('symmetric724').subdivide(1) odf_gt = multi_tensor_odf(sphere.vertices, evals, angles=directions, fractions=fractions) """ Perform the reconstructions with standard DSI and DSI with deconvolution. """ dsi_model = DiffusionSpectrumModel(gtab) dsi_odf = dsi_model.fit(signal).odf(sphere) dsid_model = DiffusionSpectrumDeconvModel(gtab) dsid_odf = dsid_model.fit(signal).odf(sphere) """ Finally, we can visualize the ground truth ODF, together with the DSI and DSI with deconvolution ODFs and observe that with the deconvolved method it is easier to resolve the correct fiber directions because the ODF is sharper. """ from dipy.viz import fvtk ren = fvtk.ren() odfs = np.vstack((odf_gt, dsi_odf, dsid_odf))[:, None, None] odf_actor = fvtk.sphere_funcs(odfs, sphere) odf_actor.RotateX(90) fvtk.add(ren, odf_actor) fvtk.record(ren, out_path='dsid.png', size=(300, 300)) """ .. figure:: dsid.png :align: center **Ground truth ODF (left), DSI ODF (middle), DSI with Deconvolution ODF(right)** .. [Canales10] Canales-Rodriguez et al., Deconvolution in Diffusion Spectrum Imaging, Neuroimage, vol 50, no 1, 136-149, 2010. """ dipy-0.10.1/doc/examples/reconst_dti.py000066400000000000000000000221271263041327500200170ustar00rootroot00000000000000""" ============================================================ Reconstruction of the diffusion signal with the Tensor model ============================================================ The diffusion tensor model is a model that describes the diffusion within a voxel. First proposed by Basser and colleagues [Basser1994]_, it has been very influential in demonstrating the utility of diffusion MRI in characterizing the micro-structure of white matter tissue and of the biophysical properties of tissue, inferred from local diffusion properties and it is still very commonly used. The diffusion tensor models the diffusion signal as: .. math:: \frac{S(\mathbf{g}, b)}{S_0} = e^{-b\mathbf{g}^T \mathbf{D} \mathbf{g}} Where $\mathbf{g}$ is a unit vector in 3 space indicating the direction of measurement and b are the parameters of measurement, such as the strength and duration of diffusion-weighting gradient. $S(\mathbf{g}, b)$ is the diffusion-weighted signal measured and $S_0$ is the signal conducted in a measurement with no diffusion weighting. $\mathbf{D}$ is a positive-definite quadratic form, which contains six free parameters to be fit. These six parameters are: .. math:: \mathbf{D} = \begin{pmatrix} D_{xx} & D_{xy} & D_{xz} \\ D_{yx} & D_{yy} & D_{yz} \\ D_{zx} & D_{zy} & D_{zz} \\ \end{pmatrix} This matrix is a variance/covariance matrix of the diffusivity along the three spatial dimensions. Note that we can assume that diffusivity has antipodal symmetry, so elements across the diagonal are equal. For example: $D_{xy} = D_{yx}$. This is why there are only 6 free parameters to estimate here. In the following example we show how to reconstruct your diffusion datasets using a single tensor model. First import the necessary modules: ``numpy`` is for numerical computation """ import numpy as np """ ``nibabel`` is for loading imaging datasets """ import nibabel as nib """ ``dipy.reconst`` is for the reconstruction algorithms which we use to create voxel models from the raw data. """ import dipy.reconst.dti as dti """ ``dipy.data`` is used for small datasets that we use in tests and examples. """ from dipy.data import fetch_stanford_hardi """ Fetch will download the raw dMRI dataset of a single subject. The size of the dataset is 87 MBytes. You only need to fetch once. """ fetch_stanford_hardi() """ Next, we read the saved dataset """ from dipy.data import read_stanford_hardi img, gtab = read_stanford_hardi() """ img contains a nibabel Nifti1Image object (with the data) and gtab contains a GradientTable object (information about the gradients e.g. b-values and b-vectors). """ data = img.get_data() print('data.shape (%d, %d, %d, %d)' % data.shape) """ data.shape ``(81, 106, 76, 160)`` First of all, we mask and crop the data. This is a quick way to avoid calculating Tensors on the background of the image. This is done using dipy's mask module. """ from dipy.segment.mask import median_otsu maskdata, mask = median_otsu(data, 3, 1, True, vol_idx=range(10, 50), dilate=2) print('maskdata.shape (%d, %d, %d, %d)' % maskdata.shape) """ maskdata.shape ``(72, 87, 59, 160)`` Now that we have prepared the datasets we can go forward with the voxel reconstruction. First, we instantiate the Tensor model in the following way. """ tenmodel = dti.TensorModel(gtab) """ Fitting the data is very simple. We just need to call the fit method of the TensorModel in the following way: """ tenfit = tenmodel.fit(maskdata) """ The fit method creates a TensorFit object which contains the fitting parameters and other attributes of the model. For example we can generate fractional anisotropy (FA) from the eigen-values of the tensor. FA is used to characterize the degree to which the distribution of diffusion in a voxel is directional. That is, whether there is relatively unrestricted diffusion in one particular direction. Mathematically, FA is defined as the normalized variance of the eigen-values of the tensor: .. math:: FA = \sqrt{\frac{1}{2}\frac{(\lambda_1-\lambda_2)^2+(\lambda_1- \lambda_3)^2+(\lambda_2-\lambda_3)^2}{\lambda_1^2+ \lambda_2^2+\lambda_3^2}} Note that FA should be interpreted carefully. It may be an indication of the density of packing of fibers in a voxel, and the amount of myelin wrapping these axons, but it is not always a measure of "tissue integrity". For example, FA may decrease in locations in which there is fanning of white matter fibers, or where more than one population of white matter fibers crosses. """ print('Computing anisotropy measures (FA, MD, RGB)') from dipy.reconst.dti import fractional_anisotropy, color_fa, lower_triangular FA = fractional_anisotropy(tenfit.evals) """ In the background of the image the fitting will not be accurate there is no signal and possibly we will find FA values with nans (not a number). We can easily remove these in the following way. """ FA[np.isnan(FA)] = 0 """ Saving the FA images is very easy using nibabel. We need the FA volume and the affine matrix which transform the image's coordinates to the world coordinates. Here, we choose to save the FA in float32. """ fa_img = nib.Nifti1Image(FA.astype(np.float32), img.get_affine()) nib.save(fa_img, 'tensor_fa.nii.gz') """ You can now see the result with any nifti viewer or check it slice by slice using matplotlib_'s imshow. In the same way you can save the eigen values, the eigen vectors or any other properties of the Tensor. """ evecs_img = nib.Nifti1Image(tenfit.evecs.astype(np.float32), img.get_affine()) nib.save(evecs_img, 'tensor_evecs.nii.gz') """ Other tensor statistics can be calculated from the `tenfit` object. For example, a commonly calculated statistic is the mean diffusivity (MD). This is simply the mean of the eigenvalues of the tensor. Since FA is a normalized measure of variance and MD is the mean, they are often used as complimentary measures. In `dipy`, there are two equivalent ways to calculate the mean diffusivity. One is by calling the `mean_diffusivity` module function on the eigen-values of the TensorFit class instance: """ MD1 = dti.mean_diffusivity(tenfit.evals) nib.save(nib.Nifti1Image(MD1.astype(np.float32), img.get_affine()), 'tensors_md.nii.gz') """ The other is to call the TensorFit class method: """ MD2 = tenfit.md """ Obviously, the quantities are identical. We can also compute the colored FA or RGB-map [Pajevic1999]_. First, we make sure that the FA is scaled between 0 and 1, we compute the RGB map and save it. """ FA = np.clip(FA, 0, 1) RGB = color_fa(FA, tenfit.evecs) nib.save(nib.Nifti1Image(np.array(255 * RGB, 'uint8'), img.get_affine()), 'tensor_rgb.nii.gz') """ Let's try to visualize the tensor ellipsoids of a small rectangular area in an axial slice of the splenium of the corpus callosum (CC). """ print('Computing tensor ellipsoids in a part of the splenium of the CC') from dipy.data import get_sphere sphere = get_sphere('symmetric724') from dipy.viz import fvtk ren = fvtk.ren() evals = tenfit.evals[13:43, 44:74, 28:29] evecs = tenfit.evecs[13:43, 44:74, 28:29] """ We can color the ellipsoids using the ``color_fa`` values that we calculated above. In this example we additionally normalize the values to increase the contrast. """ cfa = RGB[13:43, 44:74, 28:29] cfa /= cfa.max() fvtk.add(ren, fvtk.tensor(evals, evecs, cfa, sphere)) print('Saving illustration as tensor_ellipsoids.png') fvtk.record(ren, n_frames=1, out_path='tensor_ellipsoids.png', size=(600, 600)) """ .. figure:: tensor_ellipsoids.png :align: center **Tensor Ellipsoids**. """ fvtk.clear(ren) """ Finally, we can visualize the tensor orientation distribution functions for the same area as we did with the ellipsoids. """ tensor_odfs = tenmodel.fit(data[20:50, 55:85, 38:39]).odf(sphere) fvtk.add(ren, fvtk.sphere_funcs(tensor_odfs, sphere, colormap=None)) #fvtk.show(r) print('Saving illustration as tensor_odfs.png') fvtk.record(ren, n_frames=1, out_path='tensor_odfs.png', size=(600, 600)) """ .. figure:: tensor_odfs.png :align: center **Tensor ODFs**. Note that while the tensor model is an accurate and reliable model of the diffusion signal in the white matter, it has the drawback that it only has one principal diffusion direction. Therefore, in locations in the brain that contain multiple fiber populations crossing each other, the tensor model may indicate that the principal diffusion direction is intermediate to these directions. Therefore, using the principal diffusion direction for tracking in these locations may be misleading and may lead to errors in defining the tracks. Fortunately, other reconstruction methods can be used to represent the diffusion and fiber orientations in those locations. These are presented in other examples. .. [Basser1994] Basser PJ, Mattielo J, LeBihan (1994). MR diffusion tensor spectroscopy and imaging. .. [Pajevic1999] Pajevic S, Pierpaoli (1999). Color schemes to represent the orientation of anisotropic tissues from diffusion tensor data: application to white matter fiber tract mapping in the human brain. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_gqi.py000066400000000000000000000066521263041327500200240ustar00rootroot00000000000000""" =============================================== Reconstruct with Generalized Q-Sampling Imaging =============================================== We show how to apply Generalized Q-Sampling Imaging [Yeh2010]_ to diffusion MRI datasets. You can think of GQI as an analytical version of DSI orientation distribution function (ODF) (Garyfallidis, PhD thesis, 2012). First import the necessary modules: """ import numpy as np from dipy.data import fetch_taiwan_ntu_dsi, read_taiwan_ntu_dsi, get_sphere from dipy.reconst.gqi import GeneralizedQSamplingModel from dipy.direction import peaks_from_model """ Download and read the data for this tutorial. """ fetch_taiwan_ntu_dsi() img, gtab = read_taiwan_ntu_dsi() """ img contains a nibabel Nifti1Image object (data) and gtab contains a GradientTable object (gradient information e.g. b-values). For example to read the b-values it is possible to write print(gtab.bvals). Load the raw diffusion data and the affine. """ data = img.get_data() print('data.shape (%d, %d, %d, %d)' % data.shape) """ data.shape ``(96, 96, 60, 203)`` This dataset has anisotropic voxel sizes, therefore reslicing is necessary. """ affine = img.get_affine() """ Read the voxel size from the image header. """ voxel_size = img.get_header().get_zooms()[:3] """ Instantiate the Model and apply it to the data. """ gqmodel = GeneralizedQSamplingModel(gtab, sampling_length=3) """ The parameter `sampling_length` is used here to Lets just use one slice only from the data. """ dataslice = data[:, :, data.shape[2] / 2] mask = dataslice[..., 0] > 50 gqfit = gqmodel.fit(dataslice, mask=mask) """ Load an odf reconstruction sphere """ sphere = get_sphere('symmetric724') """ Calculate the ODFs with this specific sphere """ ODF = gqfit.odf(sphere) print('ODF.shape (%d, %d, %d)' % ODF.shape) """ ODF.shape ``(96, 96, 724)`` Using peaks_from_model we can find the main peaks of the ODFs and other properties. """ gqpeaks = peaks_from_model(model=gqmodel, data=dataslice, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=mask, return_odf=False, normalize_peaks=True) gqpeak_values = gqpeaks.peak_values """ gqpeak_indices show which sphere points have the maximum values. """ gqpeak_indices = gqpeaks.peak_indices """ It is also possible to calculate GFA. """ GFA = gqpeaks.gfa print('GFA.shape (%d, %d)' % GFA.shape) """ With parameter `return_odf=True` we can obtain the ODF using gqpeaks.ODF """ gqpeaks = peaks_from_model(model=gqmodel, data=dataslice, sphere=sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=mask, return_odf=True, normalize_peaks=True) """ This ODF will be of course identical to the ODF calculated above as long as the same data and mask are used. """ np.sum(gqpeaks.odf != ODF) == 0 """ True The advantage of using peaks_from_models is that it calculates the ODF only once and saves it or deletes if it is not necessary to keep. .. [Yeh2010] Yeh, F-C et al., Generalized Q-sampling imaging, IEEE Transactions on Medical Imaging, vol 29, no 9, 2010. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_mapmri.py000066400000000000000000000076551263041327500205350ustar00rootroot00000000000000""" ================================================================ Continuous and analytical diffusion signal modelling with MAPMRI ================================================================ We show how to model the diffusion signal as a linear combination of continuous functions from the MAPMRI basis [Ozarslan2013]_. We also compute the analytical Orientation Distribution Function (ODF), the the Return To the Origin Probability (RTOP), the Return To the Axis Probability (RTAP), and the Return To the Plane Probability (RTPP). First import the necessary modules: """ from dipy.reconst.mapmri import MapmriModel from dipy.viz import fvtk from dipy.data import fetch_cenir_multib, read_cenir_multib, get_sphere from dipy.core.gradients import gradient_table import matplotlib.pyplot as plt """ Download and read the data for this tutorial. MAPMRI requires multi-shell data, to properly fit the radial part of the basis. The total size of the downloaded data is 1760 MBytes, however you only need to fetch it once. Parameter ``with_raw`` of function ``fetch_cenir_multib`` is set to ``False`` to only download eddy-current/motion corrected data:. """ fetch_cenir_multib(with_raw=False) """ For this example we select only the shell with b-values equal to the one of the Human Connectome Project (HCP). """ bvals = [1000, 2000, 3000] img, gtab = read_cenir_multib(bvals) data = img.get_data() data_small = data[40:65, 50:51, 35:60] print('data.shape (%d, %d, %d, %d)' % data.shape) """ data contains the voxel data and gtab contains a GradientTable object (gradient information e.g. b-values). For example, to show the b-values it is possible to write print(gtab.bvals). Instantiate the MAPMRI Model. radial_order is the radial order of the MAPMRI basis. For details regarding the parameters see [Ozarslan2013]_. """ radial_order = 4 map_model = MapmriModel(gtab, radial_order=radial_order, lambd=2e-1, eap_cons=False) """ Fit the MAPMRI model to the data """ mapfit = map_model.fit(data_small) """ Load an odf reconstruction sphere """ sphere = get_sphere('symmetric724') """ Compute the ODFs """ odf = mapfit.odf(sphere) print('odf.shape (%d, %d, %d, %d)' % odf.shape) """ Display the ODFs """ r = fvtk.ren() sfu = fvtk.sphere_funcs(odf, sphere, colormap='jet') sfu.RotateX(-90) fvtk.add(r, sfu) fvtk.record(r, n_frames=1, out_path='odfs.png', size=(600, 600)) """ .. figure:: odfs.png :align: center **Orientation distribution functions**. With MAPMRI it is also possible to extract the Return To the Origin Probability (RTOP), the Return To the Axis Probability (RTAP), and the Return To the Plane Probability (RTPP). These ensemble average propagator (EAP) features directly reflects microstructural properties of the underlying tissues [Ozarslan2013]_. """ rtop = mapfit.rtop() rtap = mapfit.rtap() rtpp = mapfit.rtpp() """ Show the maps and save them in MAPMRI_maps.png. """ fig = plt.figure(figsize=(6, 6)) ax1 = fig.add_subplot(2, 2, 1, title=r'$\sqrt[3]{RTOP}$') ax1.set_axis_off() ind = ax1.imshow((rtop[:, 0, :]**(1.0 / 3)).T, interpolation='nearest', origin='lower', cmap=plt.cm.gray) plt.colorbar(ind, shrink = 0.8) ax2 = fig.add_subplot(2, 2, 2, title=r'$\sqrt{RTAP}$') ax2.set_axis_off() ind = ax2.imshow((rtap[:, 0, :]**0.5).T, interpolation='nearest', origin='lower', cmap=plt.cm.gray) plt.colorbar(ind, shrink = 0.8) ax3 = fig.add_subplot(2, 2, 3, title=r'$RTPP$') ax3.set_axis_off() ind = ax3.imshow(rtpp[:, 0, :].T, interpolation='nearest', origin='lower', cmap=plt.cm.gray) plt.colorbar(ind, shrink = 0.8) plt.savefig('MAPMRI_maps.png') """ .. figure:: MAPMRI_maps.png :align: center **RTOP, RTAP, and RTPP calculated using MAPMRI**. .. [Ozarslan2013] Ozarslan E. et. al, "Mean apparent propagator (MAP) MRI: A novel diffusion imaging method for mapping tissue microstructure", NeuroImage, 2013. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_shore.py000066400000000000000000000054571263041327500203660ustar00rootroot00000000000000""" ================================================================== Continuous and analytical diffusion signal modelling with 3D-SHORE ================================================================== We show how to model the diffusion signal as a linear combination of continuous functions from the SHORE basis [Merlet2013]_. We also compute the analytical Orientation Distribution Function (ODF). First import the necessary modules: """ from dipy.reconst.shore import ShoreModel from dipy.reconst.shm import sh_to_sf from dipy.viz import fvtk from dipy.data import fetch_isbi2013_2shell, read_isbi2013_2shell, get_sphere from dipy.core.gradients import gradient_table """ Download and read the data for this tutorial. fetch_isbi2013_2shell() provides data from the ISBI HARDI contest 2013 acquired for two shells at b-values 1500 and 2500. The six parameters of these two functions define the ROI where to reconstruct the data. They respectively correspond to (xmin,xmax,ymin,ymax,zmin,zmax) with x, y, z and the three axis defining the spatial positions of the voxels. """ fetch_isbi2013_2shell() img, gtab = read_isbi2013_2shell() data = img.get_data() data_small = data[10:40, 22, 10:40] print('data.shape (%d, %d, %d, %d)' % data.shape) """ data contains the voxel data and gtab contains a GradientTable object (gradient information e.g. b-values). For example, to show the b-values it is possible to write print(gtab.bvals). Instantiate the SHORE Model. radial_order is the radial order of the SHORE basis. zeta is the scale factor of the SHORE basis. lambdaN and lambdaL are the radial and angular regularization constants, respectively. For details regarding these four parameters see [Cheng2011]_ and [Merlet2013]_. """ radial_order = 6 zeta = 700 lambdaN = 1e-8 lambdaL = 1e-8 asm = ShoreModel(gtab, radial_order=radial_order, zeta=zeta, lambdaN=lambdaN, lambdaL=lambdaL) """ Fit the SHORE model to the data """ asmfit = asm.fit(data_small) """ Load an odf reconstruction sphere """ sphere = get_sphere('symmetric724') """ Compute the ODFs """ odf = asmfit.odf(sphere) print('odf.shape (%d, %d, %d)' % odf.shape) """ Display the ODFs """ r = fvtk.ren() sfu = fvtk.sphere_funcs(odf[:, None, :], sphere, colormap='jet') sfu.RotateX(-90) fvtk.add(r, sfu) fvtk.record(r, n_frames=1, out_path='odfs.png', size=(600, 600)) """ .. figure:: odfs.png :align: center **Orientation distribution functions**. .. [Merlet2013] Merlet S. et. al, "Continuous diffusion signal, EAP and ODF estimation via Compressive Sensing in diffusion MRI", Medical Image Analysis, 2013. .. [Cheng2011] Cheng J. et. al, "Theoretical Analysis and Pratical Insights on EAP Estimation via Unified HARDI Framework", MICCAI workshop on Computational Diffusion MRI, 2011. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reconst_shore_metrics.py000066400000000000000000000063131263041327500221040ustar00rootroot00000000000000""" =========================== Calculate SHORE scalar maps =========================== We show how to calculate two SHORE-based scalar maps: return to origin probability (rtop) [Descoteaux2011]_ and mean square displacement (msd) [Wu2007]_, [Wu2008]_ on your data. SHORE can be used with any multiple b-value dataset like multi-shell or DSI. First import the necessary modules: """ import nibabel as nib import numpy as np import matplotlib.pyplot as plt from dipy.data import fetch_taiwan_ntu_dsi, read_taiwan_ntu_dsi, get_sphere from dipy.data import get_data, dsi_voxels from dipy.reconst.shore import ShoreModel """ Download and read the data for this tutorial. """ fetch_taiwan_ntu_dsi() img, gtab = read_taiwan_ntu_dsi() """ img contains a nibabel Nifti1Image object (data) and gtab contains a GradientTable object (gradient information e.g. b-values). For example, to read the b-values it is possible to write print(gtab.bvals). Load the raw diffusion data and the affine. """ data = img.get_data() affine = img.get_affine() print('data.shape (%d, %d, %d, %d)' % data.shape) """ Instantiate the Model. """ asm = ShoreModel(gtab) """ Lets just use only one slice only from the data. """ dataslice = data[30:70, 20:80, data.shape[2] / 2] """ Fit the signal with the model and calculate the SHORE coefficients. """ asmfit = asm.fit(dataslice) """ Calculate the analytical rtop on the signal that corresponds to the integral of the signal. """ print('Calculating... rtop_signal') rtop_signal = asmfit.rtop_signal() """ Now we calculate the analytical rtop on the propagator, that corresponds to its central value. """ print('Calculating... rtop_pdf') rtop_pdf = asmfit.rtop_pdf() """ In theory, these two measures must be equal, to show that we calculate the mean square error on this two measures. """ mse = np.sum((rtop_signal - rtop_pdf) ** 2) / rtop_signal.size print("mse = %f" % mse) """ mse = 0.000000 Let's calculate the analytical mean square displacement on the propagator. """ print('Calculating... msd') msd = asmfit.msd() """ Show the maps and save them in SHORE_maps.png. """ fig = plt.figure(figsize=(6, 6)) ax1 = fig.add_subplot(2, 2, 1, title='rtop_signal') ax1.set_axis_off() ind = ax1.imshow(rtop_signal.T, interpolation='nearest', origin='lower') plt.colorbar(ind) ax2 = fig.add_subplot(2, 2, 2, title='rtop_pdf') ax2.set_axis_off() ind = ax2.imshow(rtop_pdf.T, interpolation='nearest', origin='lower') plt.colorbar(ind) ax3 = fig.add_subplot(2, 2, 3, title='msd') ax3.set_axis_off() ind = ax3.imshow(msd.T, interpolation='nearest', origin='lower', vmin=0) plt.colorbar(ind) plt.savefig('SHORE_maps.png') """ .. figure:: SHORE_maps.png :align: center **rtop and msd calculated using the SHORE model**. .. [Descoteaux2011] Descoteaux M. et. al , "Multiple q-shell diffusion propagator imaging", Medical Image Analysis, vol 15, No. 4, p. 603-621, 2011. .. [Wu2007] Wu Y. et. al, "Hybrid diffusion imaging", NeuroImage, vol 36, p. 617-629, 2007. .. [Wu2008] Wu Y. et. al, "Computation of Diffusion Function Measures in q -Space Using Magnetic Resonance Hybrid Diffusion Imaging", IEEE TRANSACTIONS ON MEDICAL IMAGING, vol. 27, No. 6, p. 858-865, 2008. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/reslice_datasets.py000066400000000000000000000034221263041327500210150ustar00rootroot00000000000000 """ ========================== Reslice diffusion datasets ========================== Overview -------- Often in imaging it is common to reslice images in different resolutions. Especially in dMRI we usually want images with isotropic voxel size as they facilitate most tractography algorithms. In this example we show how you can reslice a dMRI dataset to have isotropic voxel size. """ import nibabel as nib """ The function we need to use is called resample. """ from dipy.align.reslice import reslice from dipy.data import get_data """ We use here a very small dataset to show the basic principles but you can replace the following line with the path of your image. """ fimg = get_data('aniso_vox') """ We load the image and print the shape of the volume """ img = nib.load(fimg) data = img.get_data() data.shape """ ``(58, 58, 24)`` Load the affine of the image. The affine is the transformation matrix which maps image coordinates to world (mm) coordinates. """ affine = img.get_affine() """ Load and show the zooms which hold the voxel size. """ zooms = img.get_header().get_zooms()[:3] zooms """ ``(4.0, 4.0, 5.0)`` Set the required new voxel size. """ new_zooms = (3., 3., 3.) new_zooms """ ``(3.0, 3.0, 3.0)`` Start resampling (reslicing). Trilinear interpolation is used by default. """ data2, affine2 = reslice(data, affine, zooms, new_zooms) data2.shape """ ``(77, 77, 40)`` Save the result as a new Nifti file. """ img2 = nib.Nifti1Image(data2, affine2) nib.save(img2, 'iso_vox.nii.gz') """ Or as analyze format or any other supported format. """ img3 = nib.Spm2AnalyzeImage(data2, affine2) nib.save(img3,'iso_vox.img') """ Done. Check your datasets. As you may have already realized the same code can be used for general reslicing problems not only for dMRI data. """ dipy-0.10.1/doc/examples/restore_dti.py000066400000000000000000000167451263041327500200360ustar00rootroot00000000000000""" ===================================================== Using the RESTORE algorithm for robust tensor fitting ===================================================== The diffusion tensor model takes into account certain kinds of noise (thermal), but not other kinds, such as "physiological" noise. For example, if a subject moves during the acquisition of one of the diffusion-weighted samples, this might have a substantial effect on the parameters of the tensor fit calculated in all voxels in the brain for that subject. One of the pernicious consequences of this is that it can lead to wrong interpretation of group differences. For example, some groups of participants (e.g. young children, patient groups, etc.) are particularly prone to motion and differences in tensor parameters and derived statistics (such as FA) due to motion would be confounded with actual differences in the physical properties of the white matter. An example of this was shown in a paper by Yendiki et al. [1]_. One of the strategies to deal with this problem is to apply an automatic method for detecting outliers in the data, excluding these outliers and refitting the model without the presence of these outliers. This is often referred to as "robust model fitting". One of the common algorithms for robust tensor fitting is called RESTORE, and was first proposed by Chang et al. [2]_. In the following example, we will demonstrate how to use RESTORE on a simulated dataset, which we will corrupt by adding intermittent noise. We start by importing a few of the libraries we will use. """ import numpy as np import nibabel as nib """ The module ``dipy.reconst.dti`` contains the implementation of tensor fitting, including an implementation of the RESTORE algorithm. """ import dipy.reconst.dti as dti reload(dti) """ ``dipy.data`` is used for small datasets that we use in tests and examples. """ import dipy.data as dpd """ ``dipy.viz.fvtk`` is used for 3D visualization and matplotlib for 2D visualizations: """ import dipy.viz.fvtk as fvtk import matplotlib.pyplot as plt """ If needed, the fetch_stanford_hardi function will download the raw dMRI dataset of a single subject. The size of this dataset is 87 MBytes. You only need to fetch once. """ dpd.fetch_stanford_hardi() img, gtab = dpd.read_stanford_hardi() """ We initialize a DTI model class instance using the gradient table used in the measurement. By default, dti.Tensor model will use a weighted least-squares algorithm (described in [2]_) to fit the parameters of the model. We initialize this model as a baseline for comparison of noise-corrupted models: """ dti_wls = dti.TensorModel(gtab) """ For the purpose of this example, we will focus on the data from a region of interest (ROI) surrounding the Corpus Callosum. We define that ROI as the following indices: """ roi_idx = (slice(20,50), slice(55,85), slice(38,39)) """ And use them to index into the data: """ data = img.get_data()[roi_idx] """ This dataset is not very noisy, so we will artificially corrupt it to simulate the effects of "physiological" noise, such as subject motion. But first, let's establish a baseline, using the data as it is: """ fit_wls = dti_wls.fit(data) fa1 = fit_wls.fa evals1 = fit_wls.evals evecs1 = fit_wls.evecs cfa1 = dti.color_fa(fa1, evecs1) sphere = dpd.get_sphere('symmetric724') """ We visualize the ODFs in the ROI using fvtk: """ ren = fvtk.ren() fvtk.add(ren, fvtk.tensor(evals1, evecs1, cfa1, sphere)) print('Saving illustration as tensor_ellipsoids_wls.png') fvtk.record(ren, n_frames=1, out_path='tensor_ellipsoids_wls.png', size=(600, 600)) """ .. figure:: tensor_ellipsoids_wls.png :align: center **Tensor Ellipsoids**. """ fvtk.clear(ren) """ Next, we corrupt the data with some noise. To simulate a subject that moves intermittently, we will replace a few of the images with a very low signal """ noisy_data = np.copy(data) noisy_idx = slice(-10, None) # The last 10 volumes are corrupted noisy_data[..., noisy_idx] = 1.0 """ We use the same model to fit this noisy data """ fit_wls_noisy = dti_wls.fit(noisy_data) fa2 = fit_wls_noisy.fa evals2 = fit_wls_noisy.evals evecs2 = fit_wls_noisy.evecs cfa2 = dti.color_fa(fa2, evecs2) ren = fvtk.ren() fvtk.add(ren, fvtk.tensor(evals2, evecs2, cfa2, sphere)) print('Saving illustration as tensor_ellipsoids_wls_noisy.png') fvtk.record(ren, n_frames=1, out_path='tensor_ellipsoids_wls_noisy.png', size=(600, 600)) """ In places where the tensor model is particularly sensitive to noise, the resulting tensor field will be distorted .. figure:: tensor_ellipsoids_wls_noisy.png :align: center **Tensor Ellipsoids from noisy data**. To estimate the parameters from the noisy data using RESTORE, we need to estimate what would be a reasonable amount of noise to expect in the measurement. To do that, we use the `dipy.denoise.noise_estimate` module: """ import dipy.denoise.noise_estimate as ne sigma = ne.estimate_sigma(data) """ This estimate of the standard deviation will be used by the RESTORE algorithm to identify the outliers in each voxel and is given as an input when initializing the TensorModel object: """ dti_restore = dti.TensorModel(gtab,fit_method='RESTORE', sigma=sigma) fit_restore_noisy = dti_restore.fit(noisy_data) fa3 = fit_restore_noisy.fa evals3 = fit_restore_noisy.evals evecs3 = fit_restore_noisy.evecs cfa3 = dti.color_fa(fa3, evecs3) ren = fvtk.ren() fvtk.add(ren, fvtk.tensor(evals3, evecs3, cfa3, sphere)) print('Saving illustration as tensor_ellipsoids_restore_noisy.png') fvtk.record(ren, n_frames=1, out_path='tensor_ellipsoids_restore_noisy.png', size=(600, 600)) """ .. figure:: tensor_ellipsoids_restore_noisy.png :align: center **Tensor Ellipsoids from noisy data recovered with RESTORE**. The tensor field looks rather restored to its noiseless state in this image, but to convince ourselves further that this did the right thing, we will compare the distribution of FA in this region relative to the baseline, using the RESTORE estimate and the WLS estimate. """ fig_hist, ax = plt.subplots(1) ax.hist(np.ravel(fa2), color='b', histtype='step', label='WLS') ax.hist(np.ravel(fa3), color='r', histtype='step', label='RESTORE') ax.hist(np.ravel(fa1), color='g', histtype='step', label='Original') ax.set_xlabel('Fractional Anisotropy') ax.set_ylabel('Count') plt.legend() fig_hist.savefig('dti_fa_distributions.png') """ .. figure:: dti_fa_distributions.png :align: center This demonstrates that RESTORE can recover a distribution of FA that more closely resembles the baseline distribution of the noiseless signal, and demonstrates the utility of the method to data with intermittent noise. Importantly, this method assumes that the tensor is a good representation of the diffusion signal in the data. If you have reason to believe this is not the case (for example, you have data with very high b values and you are particularly interested in locations in the brain in which fibers cross), you might want to use a different method to fit your data. References ---------- .. [1] Yendiki, A, Koldewynb, K, Kakunooria, S, Kanwisher, N, and Fischl, B. (2013). Spurious group differences due to head motion in a diffusion MRI study. Neuroimage. .. [2] Chang, L-C, Jones, DK and Pierpaoli, C (2005). RESTORE: robust estimation of tensors by outlier rejection. MRM, 53: 1088-95. .. [3] Chung, SW, Lu, Y, Henry, R-G, (2006). Comparison of bootstrap approaches for estimation of uncertainties of DTI parameters. NeuroImage 33, 531-541. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/segment_clustering_features.py000066400000000000000000000257421263041327500233070ustar00rootroot00000000000000""" ============================================ Tractography Clustering - Available Features ============================================ This page lists available features that can be used by the tractography clustering framework. For every feature a brief description is provided explaining: what it does, when it's useful and how to use it. If you are not familiar with the tractography clustering framework, read the :ref:`clustering-framework` first. .. contents:: Available Features :local: :depth: 1 **Note**: All examples assume a function `get_streamlines` exists. We defined here a simple function to do so. It imports the necessary modules and load a small streamline bundle. """ def get_streamlines(): from nibabel import trackvis as tv from dipy.data import get_data fname = get_data('fornix') streams, hdr = tv.read(fname) streamlines = [i[0] for i in streams] return streamlines """ .. _clustering-examples-IdentityFeature: Identity Feature ================ **What:** Instances of `IdentityFeature` simply return the streamlines unaltered. In other words the features are the original data. **When:** The QuickBundles algorithm requires streamlines to have the same number of points. If this is the case for your streamlines, you can tell QuickBundles to not perform resampling (see following example). The clustering should be faster than using the default behaviour of QuickBundles since it will require less computation (i.e. no resampling). However, it highly depends on the number of points streamlines have. By default, QuickBundles resamples streamlines so that they have 12 points each [Garyfallidis12]_. *Unless stated otherwise, it is the default feature used by `Metric` objects in the clustering framework.* """ from dipy.segment.clustering import QuickBundles from dipy.segment.metric import IdentityFeature from dipy.segment.metric import AveragePointwiseEuclideanMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. # Make sure our streamlines have the same number of points. from dipy.tracking.streamline import set_number_of_points streamlines = set_number_of_points(streamlines, nb_points=12) # Create an instance of `IdentityFeature` and tell metric to use it. feature = IdentityFeature() metric = AveragePointwiseEuclideanMetric(feature=feature) qb = QuickBundles(threshold=10., metric=metric) clusters = qb.cluster(streamlines) print("Nb. clusters:", len(clusters)) print("Cluster sizes:", map(len, clusters)) """ :: Nb. clusters: 4 Cluster sizes: [64, 191, 47, 1] .. _clustering-examples-ResampleFeature: Resample Feature ================ **What:** Instances of `ResampleFeature` resample streamlines to a predetermined number of points. The resampling is done on the fly such that there are no permanent modifications made to your streamlines. **When:** The QuickBundles algorithm requires streamlines to have the same number of points. By default, QuickBundles uses `ResampleFeature` to resample streamlines so that they have 12 points each [Garyfallidis12]_. If you want to use a different number of points for the resampling, you should provide your own instance of `ResampleFeature` (see following example). **Note:** Resampling streamlines has an impact on clustering results both in term of speed and quality. Setting the number of points too low will result in a loss of information about the shape of the streamlines. On the contrary, setting the number of points too high will slow down the clustering process. """ from dipy.segment.clustering import QuickBundles from dipy.segment.metric import ResampleFeature from dipy.segment.metric import AveragePointwiseEuclideanMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. # Streamlines will be resampled to 24 points on the fly. feature = ResampleFeature(nb_points=24) metric = AveragePointwiseEuclideanMetric(feature=feature) # a.k.a. MDF qb = QuickBundles(threshold=10., metric=metric) clusters = qb.cluster(streamlines) print("Nb. clusters:", len(clusters)) print("Cluster sizes:", map(len, clusters)) """ :: Nb. clusters: 4 Cluster sizes: [64, 191, 44, 1] .. _clustering-examples-CenterOfMassFeature: Center of Mass Feature ====================== **What:** Instances of `CenterOfMassFeature` compute the center of mass (also known as center of gravity) of a set of points. This is achieved by taking the mean of every coordinate independently (for more information see the `wiki page `_). **When:** This feature can be useful when you *only* need information about the spatial position of a streamline. **Note:** The computed center is not guaranteed to be an existing point in the streamline. """ import numpy as np from dipy.viz import fvtk from dipy.segment.clustering import QuickBundles from dipy.segment.metric import CenterOfMassFeature from dipy.segment.metric import EuclideanMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. feature = CenterOfMassFeature() metric = EuclideanMetric(feature) qb = QuickBundles(threshold=5., metric=metric) clusters = qb.cluster(streamlines) # Extract feature of every streamline. centers = np.asarray(map(feature.extract, streamlines)) # Color each center of mass according to the cluster they belong to. rng = np.random.RandomState(42) colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color # Visualization ren = fvtk.ren() fvtk.clear(ren) ren.SetBackground(0, 0, 0) fvtk.add(ren, fvtk.streamtube(streamlines, fvtk.colors.white, opacity=0.05)) fvtk.add(ren, fvtk.point(centers[:, 0, :], colormap_full, point_radius=0.2)) fvtk.record(ren, n_frames=1, out_path='center_of_mass_feature.png', size=(600, 600)) """ .. figure:: center_of_mass_feature.png :align: center **Showing the center of mass of each streamline and colored according to the QuickBundles results**. .. _clustering-examples-MidpointFeature: Midpoint Feature ================ **What:** Instances of `MidpointFeature` extract the middle point of a streamline. If there is an even number of points, the feature will then correspond to the point halfway between the two middle points. **When:** This feature can be useful when you *only* need information about the spatial position of a streamline. This can also be an alternative to the `CenterOfMassFeature` if the point extracted must be on the streamline. """ import numpy as np from dipy.viz import fvtk from dipy.segment.clustering import QuickBundles from dipy.segment.metric import MidpointFeature from dipy.segment.metric import EuclideanMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. feature = MidpointFeature() metric = EuclideanMetric(feature) qb = QuickBundles(threshold=5., metric=metric) clusters = qb.cluster(streamlines) # Extract feature of every streamline. midpoints = np.asarray(map(feature.extract, streamlines)) # Color each midpoint according to the cluster they belong to. rng = np.random.RandomState(42) colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color # Visualization ren = fvtk.ren() fvtk.clear(ren) ren.SetBackground(0, 0, 0) fvtk.add(ren, fvtk.point(midpoints[:, 0, :], colormap_full, point_radius=0.2)) fvtk.add(ren, fvtk.streamtube(streamlines, fvtk.colors.white, opacity=0.05)) fvtk.record(ren, n_frames=1, out_path='midpoint_feature.png', size=(600, 600)) """ .. figure:: midpoint_feature.png :align: center **Showing the middle point of each streamline and colored according to the QuickBundles results**. .. _clustering-examples-ArcLengthFeature: ArcLength Feature ================= **What:** Instances of `ArcLengthFeature` compute the length of a streamline. More specifically, this feature corresponds to the sum of the lengths of every streamline segments. **When:** This feature can be useful when you *only* need information about the length of a streamline. """ import numpy as np from dipy.viz import fvtk from dipy.segment.clustering import QuickBundles from dipy.segment.metric import ArcLengthFeature from dipy.segment.metric import EuclideanMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. feature = ArcLengthFeature() metric = EuclideanMetric(feature) qb = QuickBundles(threshold=2., metric=metric) clusters = qb.cluster(streamlines) # Color each streamline according to the cluster they belong to. colormap = fvtk.create_colormap(np.ravel(clusters.centroids)) colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color # Visualization ren = fvtk.ren() fvtk.clear(ren) ren.SetBackground(0, 0, 0) fvtk.add(ren, fvtk.streamtube(streamlines, colormap_full)) fvtk.record(ren, n_frames=1, out_path='arclength_feature.png', size=(600, 600)) """ .. figure:: arclength_feature.png :align: center **Showing the streamlines colored according to their length**. .. _clustering-examples-VectorOfEndpointsFeature: Vector Between Endpoints Feature ================================ **What:** Instances of `VectorOfEndpointsFeature` extract the vector going from one extremity of the streamline to the other. In other words, this feature represents the vector beginning at the first point and ending at the last point of the streamlines. **When:** This feature can be useful when you *only* need information about the orientation of a streamline. **Note:** Since streamlines endpoints are ambiguous (e.g. the first point could be either the beginning or the end of the streamline), one must be careful when using this feature. """ import numpy as np from dipy.viz import fvtk from dipy.segment.clustering import QuickBundles from dipy.segment.metric import VectorOfEndpointsFeature from dipy.segment.metric import CosineMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. feature = VectorOfEndpointsFeature() metric = CosineMetric(feature) qb = QuickBundles(threshold=0.1, metric=metric) clusters = qb.cluster(streamlines) # Color each streamline according to the cluster they belong to. colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color # Visualization ren = fvtk.ren() fvtk.clear(ren) ren.SetBackground(0, 0, 0) fvtk.add(ren, fvtk.streamtube(streamlines, colormap_full)) fvtk.record(ren, n_frames=1, out_path='vector_of_endpoints_feature.png', size=(600, 600)) """ .. figure:: vector_of_endpoints_feature.png :align: center **Showing the streamlines colored according to their orientation**. .. include:: ../links_names.inc .. [Garyfallidis12] Garyfallidis E. et al., QuickBundles a method for tractography simplification, Frontiers in Neuroscience, vol 6, no 175, 2012. """ dipy-0.10.1/doc/examples/segment_clustering_metrics.py000066400000000000000000000152751263041327500231370ustar00rootroot00000000000000""" =========================================== Tractography Clustering - Available Metrics =========================================== This page lists available metrics that can be used by the tractography clustering framework. For every metric a brief description is provided explaining: what it does, when it's useful and how to use it. If you are not familiar with the tractography clustering framework, check this tutorial :ref:`clustering-framework`. .. contents:: Available Metrics :local: :depth: 1 **Note**: All examples assume a function `get_streamlines` exists. We defined here a simple function to do so. It imports the necessary modules and load a small streamline bundle. """ def get_streamlines(): from nibabel import trackvis as tv from dipy.data import get_data fname = get_data('fornix') streams, hdr = tv.read(fname) streamlines = [i[0] for i in streams] return streamlines """ .. _clustering-examples-AveragePointwiseEuclideanMetric: Average of Pointwise Euclidean Metric ===================================== **What:** Instances of `AveragePointwiseEuclideanMetric` first compute the pointwise Euclidean distance between two sequences *of same length* then return the average of those distances. This metric takes as inputs two features that are sequences containing the same number of elements. **When:** By default the `QuickBundles` clustering will resample your streamlines on-the-fly so they have 12 points. If for some reason you want to avoid this and you made sure all your streamlines have already the same number of points, you can manually provide an instance of `AveragePointwiseEuclideanMetric` to `QuickBundles`. Since the default `Feature` is the `IdentityFeature` the streamlines won't be resampled thus saving some computational time. **Note:** Inputs must be sequences of same length. """ from dipy.viz import fvtk from dipy.segment.clustering import QuickBundles from dipy.segment.metric import AveragePointwiseEuclideanMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. # Make sure our streamlines have the same number of points. from dipy.tracking.streamline import set_number_of_points streamlines = set_number_of_points(streamlines, nb_points=12) # Create the instance of `AveragePointwiseEuclideanMetric` to use. metric = AveragePointwiseEuclideanMetric() qb = QuickBundles(threshold=10., metric=metric) clusters = qb.cluster(streamlines) print("Nb. clusters:", len(clusters)) print("Cluster sizes:", map(len, clusters)) """ :: Nb. clusters: 4 Cluster sizes: [64, 191, 44, 1] .. _clustering-examples-SumPointwiseEuclideanMetric: Sum of Pointwise Euclidean Metric ================================= **What:** Instances of `SumPointwiseEuclideanMetric` first compute the pointwise Euclidean distance between two sequences *of same length* then return the sum of those distances. **When:** This metric mainly exists because it is used internally by `AveragePointwiseEuclideanMetric`. **Note:** Inputs must be sequences of same length. """ from dipy.segment.clustering import QuickBundles from dipy.segment.metric import SumPointwiseEuclideanMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. # Make sure our streamlines have the same number of points. from dipy.tracking.streamline import set_number_of_points nb_points = 12 streamlines = set_number_of_points(streamlines, nb_points=nb_points) # Create the instance of `SumPointwiseEuclideanMetric` to use. metric = SumPointwiseEuclideanMetric() qb = QuickBundles(threshold=10.*nb_points, metric=metric) clusters = qb.cluster(streamlines) print("Nb. clusters:", len(clusters)) print("Cluster sizes:", map(len, clusters)) """ :: Nb. clusters: 4 Cluster sizes: [64, 191, 44, 1] .. _clustering-examples-MinimumAverageDirectFlipMetric: Minimum Average Direct Flip Metric (MDF) ======================================== **What:** It is the metric used in the QuickBundles algorithm [Garyfallidis12]_. Instances of `MinimumAverageDirectFlipMetric` first compute the direct distance *d1* by taking the average of the pointwise Euclidean distances between two sequences *of same length*. Reverse one of the two sequences and compute the flip distance *d2* using the same approach as for *d1*. Then, return the minimum between *d1* and *d2*. **When:** This metric mainly exists because it is used internally by `AveragePointwiseEuclideanMetric`. **Note:** Inputs must be sequences of same length. """ from dipy.segment.metric import MinimumAverageDirectFlipMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. # Make sure our streamlines have the same number of points. from dipy.tracking.streamline import set_number_of_points streamlines = set_number_of_points(streamlines, nb_points=20) # Create the instance of `MinimumAverageDirectFlipMetric` to use. metric = MinimumAverageDirectFlipMetric() d = metric.dist(streamlines[0], streamlines[1]) print("MDF distance between the first two streamlines: ", d) """ :: MDF distance between the first two streamlines: 11.681308709622542 .. _clustering-examples-MinimumAverageDirectFlipMetric: Cosine Metric ============= **What:** Instances of `CosineMetric` compute the cosine distance between two vectors (for more information see the `wiki page `_). **When:** This metric can be useful when you *only* need information about the orientation of a streamline. **Note:** Inputs must be vectors (i.e. 1D array). """ import numpy as np from dipy.viz import fvtk from dipy.segment.clustering import QuickBundles from dipy.segment.metric import VectorOfEndpointsFeature from dipy.segment.metric import CosineMetric # Get some streamlines. streamlines = get_streamlines() # Previously defined. feature = VectorOfEndpointsFeature() metric = CosineMetric(feature) qb = QuickBundles(threshold=0.1, metric=metric) clusters = qb.cluster(streamlines) # Color each streamline according to the cluster they belong to. colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color # Visualization ren = fvtk.ren() fvtk.clear(ren) ren.SetBackground(0, 0, 0) fvtk.add(ren, fvtk.streamtube(streamlines, colormap_full)) fvtk.record(ren, n_frames=1, out_path='cosine_metric.png', size=(600, 600)) """ .. figure:: cosine_metric.png :align: center **Showing the streamlines colored according to their orientation**. .. include:: ../links_names.inc .. [Garyfallidis12] Garyfallidis E. et al., QuickBundles a method for tractography simplification, Frontiers in Neuroscience, vol 6, no 175, 2012. """ dipy-0.10.1/doc/examples/segment_extending_clustering_framework.py000066400000000000000000000207571263041327500255340ustar00rootroot00000000000000""" ========================================================== Enhancing QuickBundles with different metrics and features ========================================================== QuickBundles is a flexible algorithm that requires only a distance metric and an adjacency threshold to perform clustering. There is a wide variety of metrics that could be uses to cluster streamlines. The purpose of this tutorial is to show how to easily create new `Feature` and new `Metric` classes that can be used by QuickBundles. .. _clustering-framework: Clustering framework ==================== Dipy provides a simple, flexible and fast framework to do clustering of sequential data (e.g. streamlines). A *sequential datum* in Dipy is represented as a numpy array of size :math:`(N \times D)` where each row of the array represents a D dimensional point of the sequence. A set of these sequences is represented as a list of numpy arrays of size :math:`(N_i \times D)` for :math:`i=1:M` where $M$ is the number of sequences in the set. This clustering framework is modular and divided in three parts: 1) feature extraction 2) distance computation 3) clustering algorithm The **feature extraction** part includes any preprocessing needed to be done on the data before computing distances between them (e.g. resampling the number of points of a streamline). To define a new way of extracting features, one has to subclass `Feature` (see below). The **distance computation** part includes any metric capable of evaluating a distance between two set of features previously extracted from the data. To define a new way of extracting features, one has to subclass `Metric` (see below). The **clustering algorithm** part represents the clustering algorithm itself (e.g. QuickBundles, K-means, Hierarchical Clustering). More precisely, it includes any algorithms taking as input a list of sequential data and outputting a `ClusterMap` object. Extending `Feature` =================== This section will guide you through the creation of a new feature extraction method that can be used in the context of this clustering framework. For a list of available features in Dipy see :ref:`example_segment_clustering_features`. Assuming a set of streamlines, the type of features we want to extract is the arc length (i.e. the sum of the length of each segment for a given streamline). Let's start by importing the necessary modules. """ from dipy.segment.metric import Feature from dipy.tracking.streamline import length """ We now define the class 'ArcLengthFeature' that will perform the desired feature extraction. When subclassing `Feature`, two methods have to be redefined: `infer_shape` and `extract`. Also, an important property about feature extraction is whether or not its process is invariant to the order of the points within a streamline. This is needed as there is no way one can tell which extremity of a streamline is the beginning and which one is the end. """ class ArcLengthFeature(Feature): """ Computes the arc length of a streamline. """ def __init__(self): # The arc length stays the same even if the streamline is reversed. super(ArcLengthFeature, self).__init__(is_order_invariant=True) def infer_shape(self, streamline): """ Infers the shape of features extracted from `streamline`. """ # Arc length is a scalar return 1 def extract(self, streamline): """ Extracts features from `streamline`. """ # return np.sum(np.sqrt(np.sum((streamline[1:] - streamline[:-1]) ** 2))) # or use a Dipy's function that computes the arc length of a streamline. return length(streamline) """ The new feature extraction `ArcLengthFeature` is ready to be used. Let's use it to cluster a set of streamlines by their arc length. For educational purposes we will try to cluster a small streamline bundle known from neuroanatomy as the fornix. We start by loading the fornix streamlines. """ import numpy as np from nibabel import trackvis as tv from dipy.data import get_data from dipy.viz import fvtk fname = get_data('fornix') streams, hdr = tv.read(fname) streamlines = [i[0] for i in streams] """ Perform QuickBundles clustering using the metric `SumPointwiseEuclideanMetric` and our `ArcLengthFeature`. """ from dipy.segment.clustering import QuickBundles from dipy.segment.metric import SumPointwiseEuclideanMetric metric = SumPointwiseEuclideanMetric(feature=ArcLengthFeature()) qb = QuickBundles(threshold=2., metric=metric) clusters = qb.cluster(streamlines) """ We will now visualize the clustering result. """ # Color each streamline according to the cluster they belong to. colormap = fvtk.create_colormap(np.ravel(clusters.centroids)) colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color ren = fvtk.ren() ren.SetBackground(1, 1, 1) fvtk.add(ren, fvtk.streamtube(streamlines, colormap_full)) fvtk.record(ren, n_frames=1, out_path='fornix_clusters_arclength.png', size=(600, 600)) """ .. figure:: fornix_clusters_arclength.png :align: center **Showing the different clusters obtained by using the arc length**. Extending `Metric` ================== This section will guide you through the creation of a new metric that can be used in the context of this clustering framework. For a list of available metrics in Dipy see :ref:`example_segment_clustering_metrics`. Assuming a set of streamlines, we want a metric that computes the cosine distance giving the vector between endpoints of each streamline (i.e. one minus the cosine of the angle between two vectors). For more information about this distance check ``_. Let's start by importing the necessary modules. """ from dipy.segment.metric import Metric from dipy.segment.metric import VectorOfEndpointsFeature """ We now define the class `CosineMetric` that will perform the desired distance computation. When subclassing `Metric`, two methods have to be redefined: `are_compatible` and `dist`. Moreover, when implementing the `dist` method, one needs to make sure the distance returned is symmetric (i.e. `dist(A, B) == dist(B, A)`). """ class CosineMetric(Metric): """ Computes the cosine distance between two streamlines. """ def __init__(self): # For simplicity, features will be the vector between endpoints of a streamline. super(CosineMetric, self).__init__(feature=VectorOfEndpointsFeature()) def are_compatible(self, shape1, shape2): """ Checks if two features are vectors of same dimension. Basically this method exists so we don't have to do this check inside the `dist` method (speedup). """ return shape1 == shape2 and shape1[0] == 1 def dist(self, v1, v2): """ Computes a the cosine distance between two vectors. """ norm = lambda x: np.sqrt(np.sum(x**2)) cos_theta = np.dot(v1, v2.T) / (norm(v1)*norm(v2)) # Make sure it's in [-1, 1], i.e. within domain of arccosine cos_theta = np.minimum(cos_theta, 1.) cos_theta = np.maximum(cos_theta, -1.) return np.arccos(cos_theta) / np.pi # Normalized cosine distance """ The new distance `CosineMetric` is ready to be used. Let's use it to cluster a set of streamlines according to the cosine distance of the vector between their endpoints. For educational purposes we will try to cluster a small streamline bundle known from neuroanatomy as the fornix. We start by loading the fornix streamlines. """ import numpy as np from nibabel import trackvis as tv from dipy.data import get_data from dipy.viz import fvtk fname = get_data('fornix') streams, hdr = tv.read(fname) streamlines = [i[0] for i in streams] """ Perform QuickBundles clustering using our metric `CosineMetric`. """ from dipy.segment.clustering import QuickBundles metric = CosineMetric() qb = QuickBundles(threshold=0.1, metric=metric) clusters = qb.cluster(streamlines) """ We will now visualize the clustering result. """ # Color each streamline according to the cluster they belong to. colormap = fvtk.create_colormap(np.arange(len(clusters))) colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color ren = fvtk.ren() ren.SetBackground(1, 1, 1) fvtk.add(ren, fvtk.streamtube(streamlines, colormap_full)) fvtk.record(ren, n_frames=1, out_path='fornix_clusters_cosine.png', size=(600, 600)) """ .. figure:: fornix_clusters_cosine.png :align: center **Showing the different clusters obtained by using the cosine metric**. """ dipy-0.10.1/doc/examples/segment_quickbundles.py000066400000000000000000000114231263041327500217120ustar00rootroot00000000000000""" ========================================= Tractography Clustering with QuickBundles ========================================= This example explains how we can use QuickBundles [Garyfallidis12]_ to simplify/cluster streamlines. First import the necessary modules. """ import numpy as np from nibabel import trackvis as tv from dipy.segment.clustering import QuickBundles from dipy.io.pickles import save_pickle from dipy.data import get_data from dipy.viz import fvtk """ For educational purposes we will try to cluster a small streamline bundle known from neuroanatomy as the fornix. """ fname = get_data('fornix') """ Load fornix streamlines. """ streams, hdr = tv.read(fname) streamlines = [i[0] for i in streams] """ Perform QuickBundles clustering using the MDF metric and a 10mm distance threshold. Keep in mind that since the MDF metric requires streamlines to have the same number of points, the clustering algorithm will internally use a representation of streamlines that have been automatically downsampled/upsampled so they have only 12 points (To set manually the number of points, see :ref:`clustering-examples-ResampleFeature`). """ qb = QuickBundles(threshold=10.) clusters = qb.cluster(streamlines) """ `clusters` is a `ClusterMap` object which contains attributes that provide information about the clustering result. """ print("Nb. clusters:", len(clusters)) print("Cluster sizes:", map(len, clusters)) print("Small clusters:", clusters < 10) print("Streamlines indices of the first cluster:\n", clusters[0].indices) print("Centroid of the last cluster:\n", clusters[-1].centroid) """ :: Nb. clusters: 4 Cluster sizes: [64, 191, 47, 1] Small clusters: array([False, False, False, True], dtype=bool) Streamlines indices of the first cluster: [0, 7, 8, 10, 11, 12, 13, 14, 15, 18, 26, 30, 33, 35, 41, 65, 66, 85, 100, 101, 105, 115, 116, 119, 122, 123, 124, 125, 126, 128, 129, 135, 139, 142, 143, 144, 148, 151, 159, 167, 175, 180, 181, 185, 200, 208, 210, 224, 237, 246, 249, 251, 256, 267, 270, 280, 284, 293, 296, 297, 299] Centroid of the last cluster: array([[ 84.83773804, 117.92590332, 77.32278442], [ 86.10850525, 115.84362793, 81.91885376], [ 86.40357208, 112.25676727, 85.72930145], [ 86.48336792, 107.60327911, 88.13782501], [ 86.23897552, 102.5100708 , 89.29447174], [ 85.04563904, 97.46020508, 88.54240417], [ 82.60240173, 93.14851379, 86.84208679], [ 78.98937225, 89.57682037, 85.63652039], [ 74.72344208, 86.60827637, 84.9391861 ], [ 70.40846252, 85.15874481, 82.4484024 ], [ 66.74534607, 86.00262451, 78.82582092], [ 64.02451324, 88.43942261, 75.0697403 ]], dtype=float32) `clusters` has also attributes like `centroids` (cluster representatives), and methods like `add`, `remove`, and `clear` to modify the clustering result. Lets first show the initial dataset. """ ren = fvtk.ren() ren.SetBackground(1, 1, 1) fvtk.add(ren, fvtk.streamtube(streamlines, fvtk.colors.white)) fvtk.record(ren, n_frames=1, out_path='fornix_initial.png', size=(600, 600)) """ .. figure:: fornix_initial.png :align: center **Initial Fornix dataset**. Show the centroids of the fornix after clustering (with random colors): """ colormap = fvtk.create_colormap(np.arange(len(clusters))) fvtk.clear(ren) ren.SetBackground(1, 1, 1) fvtk.add(ren, fvtk.streamtube(streamlines, fvtk.colors.white, opacity=0.05)) fvtk.add(ren, fvtk.streamtube(clusters.centroids, colormap, linewidth=0.4)) fvtk.record(ren, n_frames=1, out_path='fornix_centroids.png', size=(600, 600)) """ .. figure:: fornix_centroids.png :align: center **Showing the different QuickBundles centroids with random colors**. Show the labeled fornix (colors from centroids). """ colormap_full = np.ones((len(streamlines), 3)) for cluster, color in zip(clusters, colormap): colormap_full[cluster.indices] = color fvtk.clear(ren) ren.SetBackground(1, 1, 1) fvtk.add(ren, fvtk.streamtube(streamlines, colormap_full)) fvtk.record(ren, n_frames=1, out_path='fornix_clusters.png', size=(600, 600)) """ .. figure:: fornix_clusters.png :align: center **Showing the different clusters**. It is also possible to save the complete `ClusterMap` object with pickling. """ save_pickle('QB.pkl', clusters) """ Finally, here is a video of QuickBundles applied on a larger dataset. .. raw:: html .. include:: ../links_names.inc .. [Garyfallidis12] Garyfallidis E. et al., QuickBundles a method for tractography simplification, Frontiers in Neuroscience, vol 6, no 175, 2012. """ dipy-0.10.1/doc/examples/sfm_reconst.py000066400000000000000000000132331263041327500200220ustar00rootroot00000000000000""" .. _sfm-reconst: ============================================== Reconstruction with the Sparse Fascicle Model ============================================== In this example, we will use the Sparse Fascicle Model [Rokem2014]_, to reconstruct the fiber orientation distribution function (fODF) in every voxel. First, we import the modules we will use in this example: """ import dipy.reconst.sfm as sfm import dipy.data as dpd import dipy.direction.peaks as dpp from dipy.viz import fvtk """ For the purpose of this example, we will use the Stanford HARDI dataset (150 directions, single b-value of 2000 s/mm$^2$) that can be automatically downloaded. If you have not yet downloaded this data-set in one of the other examples, you will need to be connected to the internet the first time you run this example. The data will be stored for subsequent runs, and for use with other examples. """ from dipy.data import read_stanford_hardi img, gtab = read_stanford_hardi() data = img.get_data() """ Reconstruction of the fiber ODF in each voxel guides subsequent tracking steps. Here, the model is the Sparse Fascicle Model, described in [Rokem2014]_. This model reconstructs the diffusion signal as a combination of the signals from different fascicles. This model can be written as: .. math:: y = X\beta Where $y$ is the signal and $\beta$ are weights on different points in the sphere. The columns of the design matrix, $X$ are the signals in each point in the measurement that would be predicted if there was a fascicle oriented in the direction represented by that column. Typically, the signal used for this kernel will be a prolate tensor with axial diffusivity 3-5 times higher than its radial diffusivity. The exact numbers can also be estimated from examining parts of the brain in which there is known to be only one fascicle (e.g. in corpus callosum). Sparsity constraints on the fiber ODF ($\beta$) are set through the Elastic Net algorihtm [Zou2005]_. Elastic Net optimizes the following cost function: .. math:: \sum_{i=1}^{n}{(y_i - \hat{y}_i)^2} + \alpha (\lambda \sum_{j=1}^{m}{w_j}+(1-\lambda) \sum_{j=1}^{m}{w^2_j} where $\hat{y}$ is the signal predicted for a particular setting of $\beta$, such that the left part of this expression is the squared loss function; $\alpha$ is a parameter that sets the balance between the squared loss on the data, and the regularization constraints. The regularization parameter $\lambda$ sets the `l1_ratio`, which controls the balance between L1-sparsity (low sum of weights), and low L2-sparsity (low sum-of-squares of the weights). Just like constrained spherical deconvolution (see :ref:`reconst-csd`), the SFM requires the definition of a response function. We'll take advantage of the automated algorithm in the :mod:`csdeconv` module to find this response function: """ from dipy.reconst.csdeconv import auto_response response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7) """ The ``response`` return value contains two entries. The first is an array with the eigenvalues of the response function and the second is the average S0 for this response. It is a very good practice to always validate the result of auto_response. For, this purpose we can print it and have a look at its values. """ print(response) """ (array([ 0.0014, 0.00029, 0.00029]), 416.206) We initialize an SFM model object, using these values. We will use the default sphere (362 vertices, symmetrically distributed on the surface of the sphere), as a set of putative fascicle directions that are considered in the model """ sphere = dpd.get_sphere() sf_model = sfm.SparseFascicleModel(gtab, sphere=sphere, l1_ratio=0.5, alpha=0.001, response=response[0]) """ For the purpose of the example, we will consider a small volume of data containing parts of the corpus callosum and of the centrum semiovale """ data_small = data[20:50, 55:85, 38:39] """ Fitting the model to this small volume of data, we calculate the ODF of this model on the sphere, and plot it. """ sf_fit = sf_model.fit(data_small) sf_odf = sf_fit.odf(sphere) fodf_spheres = fvtk.sphere_funcs(sf_odf, sphere, scale=1.3, norm=True) ren = fvtk.ren() fvtk.add(ren, fodf_spheres) print('Saving illustration as sf_odfs.png') fvtk.record(ren, out_path='sf_odfs.png', size=(1000, 1000)) """ We can extract the peaks from the ODF, and plot these as well """ sf_peaks = dpp.peaks_from_model(sf_model, data_small, sphere, relative_peak_threshold=.5, min_separation_angle=25, return_sh=False) fvtk.clear(ren) fodf_peaks = fvtk.peaks(sf_peaks.peak_dirs, sf_peaks.peak_values, scale=1.3) fvtk.add(ren, fodf_peaks) print('Saving illustration as sf_peaks.png') fvtk.record(ren, out_path='sf_peaks.png', size=(1000, 1000)) """ Finally, we plot both the peaks and the ODFs, overlayed: """ fodf_spheres.GetProperty().SetOpacity(0.4) fvtk.add(ren, fodf_spheres) print('Saving illustration as sf_both.png') fvtk.record(ren, out_path='sf_both.png', size=(1000, 1000)) """ .. figure:: sf_both.png :align: center **SFM Peaks and ODFs**. To see how to use this information in tracking, proceed to :ref:`sfm-track`. References ---------- .. [Rokem2014] Ariel Rokem, Jason D. Yeatman, Franco Pestilli, Kendrick N. Kay, Aviv Mezer, Stefan van der Walt, Brian A. Wandell (2014). Evaluating the accuracy of diffusion MRI models in white matter. http://arxiv.org/abs/1411.0721 .. [Zou2005] Zou H, Hastie T (2005). Regularization and variable selection via the elastic net. J R Stat Soc B:301-320 """ dipy-0.10.1/doc/examples/sfm_tracking.py000066400000000000000000000114761263041327500201560ustar00rootroot00000000000000""" .. _sfm-track: ================================================== Tracking with the Sparse Fascicle Model ================================================== Tracking requires a per-voxel model. Here, the model is the Sparse Fascicle Model, described in [Rokem2014]_. This model reconstructs the diffusion signal as a combination of the signals from different fascicles (see also :ref:`sfm-reconst`). To begin, we read the Stanford HARDI data-set into memory: """ from dipy.data import read_stanford_labels hardi_img, gtab, labels_img = read_stanford_labels() data = hardi_img.get_data() labels = labels_img.get_data() affine = hardi_img.get_affine() """ This dataset provides a label map (generated using Freesurfer), in which the white matter voxels are labeled as either 1 or 2: """ white_matter = (labels == 1) | (labels == 2) """ The first step in tracking is generating a model from which tracking directions can be extracted in every voxel. For the SFM, this requires first that we define a canonical response function that will be used to deconvolve the signal in every voxel """ from dipy.reconst.csdeconv import auto_response response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7) """ We initialize an SFM model object, using this response function and using the default sphere (362 vertices, symmetrically distributed on the surface of the sphere): """ from dipy.data import get_sphere sphere = get_sphere() from dipy.reconst import sfm sf_model = sfm.SparseFascicleModel(gtab, sphere=sphere, l1_ratio=0.5, alpha=0.001, response=response[0]) """ We fit this model to the data in each voxel in the white-matter mask, so that we can use these directions in tracking: """ from dipy.direction.peaks import peaks_from_model pnm = peaks_from_model(sf_model, data, sphere, relative_peak_threshold=.5, min_separation_angle=25, mask=white_matter, parallel=True ) """ A ThresholdTissueClassifier object is used to segment the data to track only through areas in which the Generalized Fractional Anisotropy (GFA) is sufficiently high. """ from dipy.tracking.local import ThresholdTissueClassifier classifier = ThresholdTissueClassifier(pnm.gfa, .25) """ Tracking will be started from a set of seeds evenly distributed in the white matter: """ from dipy.tracking import utils seeds = utils.seeds_from_mask(white_matter, density=[2, 2, 2], affine=affine) """ For the sake of brevity, we will take only the first 1000 seeds, generating only 1000 streamlines. Remove this line to track from many more points in all of the white matter """ seeds = seeds[:1000] """ We now have the necessary components to construct a tracking pipeline and execute the tracking """ from dipy.tracking.local import LocalTracking streamlines = LocalTracking(pnm, classifier, seeds, affine, step_size=.5) streamlines = list(streamlines) """ Next, we will create a visualization of these streamlines, relative to this subject's T1-weighted anatomy: """ from dipy.viz import fvtk from dipy.viz.colormap import line_colors from dipy.data import read_stanford_t1 from dipy.tracking.utils import move_streamlines from numpy.linalg import inv t1 = read_stanford_t1() t1_data = t1.get_data() t1_aff = t1.get_affine() color = line_colors(streamlines) """ To speed up visualization, we will select a random sub-set of streamlines to display. This is particularly important, if you track from seeds throughout the entire white matter, generating many streamlines. In this case, for demonstration purposes, we subselect 900 streamlines. """ from dipy.tracking.streamline import select_random_set_of_streamlines plot_streamlines = select_random_set_of_streamlines(streamlines, 900) streamlines_actor = fvtk.streamtube( list(move_streamlines(plot_streamlines, inv(t1_aff))), line_colors(streamlines), linewidth=0.1) vol_actor = fvtk.slicer(t1_data) vol_actor.display(40, None, None) vol_actor2 = vol_actor.copy() vol_actor2.display(None, None, 35) ren = fvtk.ren() fvtk.add(ren, streamlines_actor) fvtk.add(ren, vol_actor) fvtk.add(ren, vol_actor2) fvtk.record(ren, n_frames=1, out_path='sfm_streamlines.png', size=(800, 800)) """ .. figure:: sfm_streamlines.png :align: center **Sparse Fascicle Model tracks** Finally, we can save these streamlines to a 'trk' file, for use in other software, or for further analysis. """ from dipy.io.trackvis import save_trk save_trk("sfm_detr.trk", streamlines, affine, labels.shape) """ References ---------- .. [Rokem2014] Ariel Rokem, Jason D. Yeatman, Franco Pestilli, Kendrick N. Kay, Aviv Mezer, Stefan van der Walt, Brian A. Wandell (2014). Evaluating the accuracy of diffusion MRI models in white matter. http://arxiv.org/abs/1411.0721 """ dipy-0.10.1/doc/examples/simulate_dki.py000066400000000000000000000117161263041327500201560ustar00rootroot00000000000000""" ========================== DKI MultiTensor Simulation ========================== In this example we show how to simulate the diffusion kurtosis imaging (DKI) data of a single voxel. DKI captures information about the non-Gaussian properties of water diffusion which is a consequence of the existence of tissue barriers and compartments. In these simulations compartmental heterogeneity is taken into account by modeling different compartments for the intra- and extra-cellular media of two populations of fibers. These simulations are performed according to [RNH2015]_. We first import all relevant modules. """ import numpy as np import matplotlib.pyplot as plt from dipy.sims.voxel import (multi_tensor_dki, single_tensor) from dipy.data import get_data from dipy.io.gradients import read_bvals_bvecs from dipy.core.gradients import gradient_table from dipy.reconst.dti import (decompose_tensor, from_lower_triangular) """ For the simulation we will need a GradientTable with the b-values and b-vectors. Here we use the GradientTable of the sample Dipy dataset 'small_64D'. """ fimg, fbvals, fbvecs = get_data('small_64D') bvals, bvecs = read_bvals_bvecs(fbvals, fbvecs) """ DKI requires data from more than one non-zero b-value. Since the dataset 'small_64D' was acquired with one non-zero bvalue we artificialy produce a second non-zero b-value. """ bvals = np.concatenate((bvals, bvals * 2), axis=0) bvecs = np.concatenate((bvecs, bvecs), axis=0) """ The b-values and gradient directions are then converted to Dipy's GradientTable format. """ gtab = gradient_table(bvals, bvecs) """ In ``mevals`` we save the eigenvalues of each tensor. To simulate crossing fibers with two different media (representing intra and extra-cellular media), a total of four components have to be taken in to account (i.e. the first two compartments correspond to the intra and extra cellular media for the first fiber population while the others correspond to the media of the second fiber population) """ mevals = np.array([[0.00099, 0, 0], [0.00226, 0.00087, 0.00087], [0.00099, 0, 0], [0.00226, 0.00087, 0.00087]]) """ In ``angles`` we save in polar coordinates (:math:`\theta, \phi`) the principal axis of each compartment tensor. To simulate crossing fibers at 70 degrees the compartments of the first fiber are aligned to the x-axis while the compartments of the second fiber are aligned to the x-z plane with an angular deviation of 70 degrees from the first one. """ angles = [(90, 0), (90, 0), (20, 0), (20, 0)] """ In ``fractions`` we save the percentage of the contribution of each compartment, which is computed by multiplying the percentage of contribution of each fiber population and the water fraction of each different medium """ fie = 0.49 # intra axonal water fraction fractions = [fie*50, (1 - fie)*50, fie*50, (1 - fie)*50] """ Having defined the parameters for all tissue compartments, the elements of the diffusion tensor (dt), the elements of the kurtosis tensor (kt) and the DW signals simulated from the DKI model can be obtain using the function ``multi_tensor_dki``. """ signal_dki, dt, kt = multi_tensor_dki(gtab, mevals, S0=200, angles=angles, fractions=fractions, snr=None) """ We can also add rician noise with a specific SNR. """ signal_noisy, dt, kt = multi_tensor_dki(gtab, mevals, S0=200, angles=angles, fractions=fractions, snr=10) """ For comparison purposes, we also compute the DW signal if only the diffusion tensor components are taken into account. For this we use Dipy's function single_tensor which requires that dt is decomposed into its eigenvalues and eigenvectors. """ dt_evals, dt_evecs = decompose_tensor(from_lower_triangular(dt)) signal_dti = single_tensor(gtab, S0=200, evals=dt_evals, evecs=dt_evecs, snr=None) """ Finally, we can visualize the values of the different version of simulated signals for all assumed gradient directions and bvalues. """ plt.plot(signal_dti, label='noiseless dti') plt.plot(signal_dki, label='noiseless dki') plt.plot(signal_noisy, label='with noise') plt.legend() plt.show() plt.savefig('simulated_dki_signal.png') """ .. figure:: simulated_dki_signal.png :align: center **Simulated signals obtain from the DTI and DKI models**. Non-Gaussian diffusion properties in tissues are responsible to smaller signal attenuations for larger bvalues when compared to signal attenuations from free gaussian water diffusion. This feature can be shown from the figure above, since signals simulated from the DKI models reveals larger DW signal intensities than the signals obtained only from the diffusion tensor components. References: [RNH2015] R. Neto Henriques et al., "Exploring the 3D geometry of the diffusion kurtosis tensor - Impact on the development of robust tractography procedures and novel biomarkers", NeuroImage (2015) 111, 85-99. """ dipy-0.10.1/doc/examples/simulate_multi_tensor.py000066400000000000000000000047621263041327500221360ustar00rootroot00000000000000""" ====================== MultiTensor Simulation ====================== In this example we show how someone can simulate the signal and the ODF of a single voxel using a MultiTensor. """ import numpy as np from dipy.sims.voxel import (multi_tensor, multi_tensor_odf, single_tensor_odf, all_tensor_evecs) from dipy.data import get_sphere """ For the simulation we will need a GradientTable with the b-values and b-vectors Here we use the one we created in :ref:`example_gradients_spheres`. """ from gradients_spheres import gtab """ In ``mevals`` we save the eigenvalues of each tensor. """ mevals = np.array([[0.0015, 0.0003, 0.0003], [0.0015, 0.0003, 0.0003]]) """ In ``angles`` we save in polar coordinates (:math:`\theta, \phi`) the principal axis of each tensor. """ angles = [(0, 0), (60, 0)] """ In ``fractions`` we save the percentage of the contribution of each tensor. """ fractions = [50, 50] """ The function ``multi_tensor`` will return the simulated signal and an array with the principal axes of the tensors in cartesian coordinates. """ signal, sticks = multi_tensor(gtab, mevals, S0=100, angles=angles, fractions=fractions, snr=None) """ We can also add rician noise with a specific SNR. """ signal_noisy, sticks = multi_tensor(gtab, mevals, S0=100, angles=angles, fractions=fractions, snr=20) import matplotlib.pyplot as plt plt.plot(signal, label='noiseless') plt.plot(signal_noisy, label='with noise') plt.legend() plt.show() plt.savefig('simulated_signal.png') """ .. figure:: simulated_signal.png :align: center **Simulated MultiTensor signal** """ """ For the ODF simulation we will need a sphere. Because we are interested in a simulation of only a single voxel, we can use a sphere with very high resolution. We generate that by subdividing the triangles of one of Dipy's cached spheres, which we can read in the following way. """ sphere = get_sphere('symmetric724') sphere = sphere.subdivide(2) odf = multi_tensor_odf(sphere.vertices, mevals, angles, fractions) from dipy.viz import fvtk ren = fvtk.ren() odf_actor = fvtk.sphere_funcs(odf, sphere) odf_actor.RotateX(90) fvtk.add(ren, odf_actor) print('Saving illustration as multi_tensor_simulation') fvtk.record(ren, out_path='multi_tensor_simulation.png', size=(300, 300)) """ .. figure:: multi_tensor_simulation.png :align: center **Simulating a MultiTensor ODF** """ dipy-0.10.1/doc/examples/snr_in_cc.py000066400000000000000000000146001263041327500174340ustar00rootroot00000000000000""" ============================================= SNR estimation for Diffusion-Weighted Images ============================================= Computing the Signal-to-Noise-Ratio (SNR) of DW images is still an open question, as SNR depends on the white matter structure of interest as well as the gradient direction corresponding to each DWI. In classical MRI, SNR can be defined as the ratio of the mean of the signal divided by the standard deviation of the underlying Gaussian noise, that is SNR = mean(signal) / std(noise). The noise standard deviation can be computed from the background in any of the DW images. How do we compute the mean of the signal, and what signal? The strategy here is to compute a 'worst-case' SNR for DWI. Several white matter structures such as the corpus callosum (CC), corticospinal tract (CST), or the superior longitudinal fasciculus (SLF) can be easily identified from the colored-FA (cfa) map. In this example, we will use voxels from the CC, which have the characteristic of being highly RED in the cfa map since they are mainly oriented in the left-right direction. We know that the DW image closest to the x-direction will be the one with the most attenuated diffusion signal. This is the strategy adopted in several recent papers (see [1]_ and [2]_). It gives a good indication of the quality of the DWI data. First, we compute the tensor model in a brain mask (see the DTI example for more explanation). """ from __future__ import division, print_function import nibabel as nib import numpy as np from dipy.data import fetch_stanford_hardi, read_stanford_hardi from dipy.segment.mask import median_otsu from dipy.reconst.dti import TensorModel fetch_stanford_hardi() img, gtab = read_stanford_hardi() data = img.get_data() affine = img.get_affine() print('Computing brain mask...') b0_mask, mask = median_otsu(data) print('Computing tensors...') tenmodel = TensorModel(gtab) tensorfit = tenmodel.fit(data, mask=mask) """Next, we set our red-green-blue thresholds to (0.6, 1) in the x axis and (0, 0.1) in the y and z axes respectively. These values work well in practice to isolate the very RED voxels of the cfa map. Then, as assurance, we want just RED voxels in the CC (there could be noisy red voxels around the brain mask and we don't want those). Unless the brain acquisition was badly aligned, the CC is always close to the mid-sagittal slice. The following lines perform these two operations and then saves the computed mask. """ print('Computing worst-case/best-case SNR using the corpus callosum...') from dipy.segment.mask import segment_from_cfa from dipy.segment.mask import bounding_box threshold = (0.6, 1, 0, 0.1, 0, 0.1) CC_box = np.zeros_like(data[..., 0]) mins, maxs = bounding_box(mask) mins = np.array(mins) maxs = np.array(maxs) diff = (maxs - mins) // 4 bounds_min = mins + diff bounds_max = maxs - diff CC_box[bounds_min[0]:bounds_max[0], bounds_min[1]:bounds_max[1], bounds_min[2]:bounds_max[2]] = 1 mask_cc_part, cfa = segment_from_cfa(tensorfit, CC_box, threshold, return_cfa=True) cfa_img = nib.Nifti1Image((cfa*255).astype(np.uint8), affine) mask_cc_part_img = nib.Nifti1Image(mask_cc_part.astype(np.uint8), affine) nib.save(mask_cc_part_img, 'mask_CC_part.nii.gz') import matplotlib.pyplot as plt region = 40 fig = plt.figure('Corpus callosum segmentation') plt.subplot(1, 2, 1) plt.title("Corpus callosum (CC)") plt.axis('off') red = cfa[..., 0] plt.imshow(np.rot90(red[region, ...])) plt.subplot(1, 2, 2) plt.title("CC mask used for SNR computation") plt.axis('off') plt.imshow(np.rot90(mask_cc_part[region, ...])) fig.savefig("CC_segmentation.png", bbox_inches='tight') """ .. figure:: CC_segmentation.png :align: center """ """Now that we are happy with our crude CC mask that selected voxels in the x-direction, we can use all the voxels to estimate the mean signal in this region. """ mean_signal = np.mean(data[mask_cc_part], axis=0) """Now, we need a good background estimation. We will re-use the brain mask computed before and invert it to catch the outside of the brain. This could also be determined manually with a ROI in the background. [Warning: Certain MR manufacturers mask out the outside of the brain with 0's. One thus has to be careful how the noise ROI is defined]. """ from scipy.ndimage.morphology import binary_dilation mask_noise = binary_dilation(mask, iterations=10) mask_noise[..., :mask_noise.shape[-1]//2] = 1 mask_noise = ~mask_noise mask_noise_img = nib.Nifti1Image(mask_noise.astype(np.uint8), affine) nib.save(mask_noise_img, 'mask_noise.nii.gz') noise_std = np.std(data[mask_noise, :]) print('Noise standard deviation sigma= ', noise_std) """We can now compute the SNR for each DWI. For example, report SNR for DW images with gradient direction that lies the closest to the X, Y and Z axes. """ # Exclude null bvecs from the search idx = np.sum(gtab.bvecs, axis=-1) == 0 gtab.bvecs[idx] = np.inf axis_X = np.argmin(np.sum((gtab.bvecs-np.array([1, 0, 0]))**2, axis=-1)) axis_Y = np.argmin(np.sum((gtab.bvecs-np.array([0, 1, 0]))**2, axis=-1)) axis_Z = np.argmin(np.sum((gtab.bvecs-np.array([0, 0, 1]))**2, axis=-1)) for direction in [0, axis_X, axis_Y, axis_Z]: SNR = mean_signal[direction]/noise_std if direction == 0 : print("SNR for the b=0 image is :", SNR) else : print("SNR for direction", direction, " ", gtab.bvecs[direction], "is :", SNR) """SNR for the b=0 image is : ''42.0695455758''""" """SNR for direction 58 [ 0.98875 0.1177 -0.09229] is : ''5.46995373635''""" """SNR for direction 57 [-0.05039 0.99871 0.0054406] is : ''23.9329492871''""" """SNR for direction 126 [-0.11825 -0.039925 0.99218 ] is : ''23.9965694823''""" """ Since the CC is aligned with the X axis, the lowest SNR is for that gradient direction. In comparison, the DW images in the perpendical Y and Z axes have a high SNR. The b0 still exhibits the highest SNR, since there is no signal attenuation. Hence, we can say the Stanford diffusion data has a 'worst-case' SNR of approximately 5, a 'best-case' SNR of approximately 24, and a SNR of 42 on the b0 image. """ """ References: .. [1] Descoteaux, M., Deriche, R., Le Bihan, D., Mangin, J.-F., and Poupon, C. Multiple q-shell diffusion propagator imaging. Medical image analysis, 15(4), 603, 2011. .. [2] Jones, D. K., Knosche, T. R., & Turner, R. White Matter Integrity, Fiber Count, and Other Fallacies: The Dos and Don'ts of Diffusion MRI. NeuroImage, 73, 239, 2013. """ dipy-0.10.1/doc/examples/streamline_formats.py000066400000000000000000000031521263041327500213750ustar00rootroot00000000000000""" =========================== Read/Write streamline files =========================== Overview ======== dipy_ can read and write many different file formats. In this example we give a short introduction on how to use it for loading or saving streamlines. Read :ref:`faq` """ import numpy as np from dipy.data import get_data from nibabel import trackvis """ 1. Read/write trackvis streamline files with nibabel. """ fname = get_data('fornix') print(fname) streams, hdr = trackvis.read(fname) streamlines = [s[0] for s in streams] """ Similarly you can use `trackvis.write` to save the streamlines. 2. Read/writh streamlines with numpy. """ streamlines_np = np.array(streamlines, dtype=np.object) np.save('fornix.npy', streamlines_np) streamlines2 = list(np.load('fornix.npy')) """ 3. We also work on our HDF5 based file format which can read/write massive datasets (as big as the size of you free disk space). With `Dpy` we can support * direct indexing from the disk * memory usage always low * extentions to include different arrays in the same file Here is a simple example. """ from dipy.io.dpy import Dpy dpw = Dpy('fornix.dpy', 'w') """ Write many streamlines at once. """ dpw.write_tracks(streamlines2) """ Write one track """ dpw.write_track(streamlines2[0]) """ or one track each time. """ for t in streamlines: dpw.write_track(t) dpw.close() """ Read streamlines directly from the disk using their indices .. include:: ../links_names.inc """ dpr = Dpy('fornix.dpy', 'r') some_streamlines = dpr.read_tracksi([0, 10, 20, 30, 100]) dpr.close() print(len(streamlines)) print(len(some_streamlines)) dipy-0.10.1/doc/examples/streamline_length.py000066400000000000000000000136271263041327500212130ustar00rootroot00000000000000""" ===================================== Streamline length and size reduction ===================================== This example shows how to calculate the lengths of a set of streamlines and also how to compress the streamlines without considerably reducing their lengths or overall shape. A streamline in Dipy is represented as a numpy array of size :math:`(N \times 3)` where each row of the array represent a 3D point of the streamline. A set of streamlines is represented with a list of numpy arrays of size :math:`(N_i \times 3)` for :math:`i=1:M` where $M$ is the number of streamlines in the set. """ import numpy as np from dipy.tracking.utils import length from dipy.tracking.metrics import downsample from dipy.tracking.distances import approx_polygon_track """ Let's first create a simple simulation of a bundle of streamlines using a cosine function. """ def simulated_bundles(no_streamlines=50, n_pts=100): t = np.linspace(-10, 10, n_pts) bundle = [] for i in np.linspace(3, 5, no_streamlines): pts = np.vstack((np.cos(2 * t/np.pi), np.zeros(t.shape) + i, t )).T bundle.append(pts) start = np.random.randint(10, 30, no_streamlines) end = np.random.randint(60, 100, no_streamlines) bundle = [10 * streamline[start[i]:end[i]] for (i, streamline) in enumerate(bundle)] bundle = [np.ascontiguousarray(streamline) for streamline in bundle] return bundle bundle = simulated_bundles() print('This bundle has %d streamlines' % len(bundle)) """ This bundle has 50 streamlines. Using the ``length`` function we can retrieve the lengths of each streamline. Below we show the histogram of the lengths of the streamlines. """ lengths = list(length(bundle)) import matplotlib.pyplot as plt fig_hist, ax = plt.subplots(1) ax.hist(lengths, color='burlywood') ax.set_xlabel('Length') ax.set_ylabel('Count') plt.show() plt.legend() plt.savefig('length_histogram.png') """ .. figure:: length_histogram.png :align: center **Histogram of lengths of the streamlines** ``Length`` will return the length in the units of the coordinate system that streamlines are currently. So, if the streamlines are in world coordinates then the lengths will be in millimeters (mm). If the streamlines are for example in native image coordinates of voxel size 2mm isotropic then you will need to multiply the lengths by 2 if you want them to correspond to mm. In this example we process simulated data without units, however this information is good to have in mind when you calculate lengths with real data. Next, let's find the number of points that each streamline has. """ n_pts = [len(streamline) for streamline in bundle] """ Often, streamlines are represented with more points than what is actually necessary for specific applications. Also, sometimes every streamline has different number of points which could be of a trouble for some algorithms . The function ``downsample`` can be used to set the number of points of a streamline at a specific number and at the same time enforce that all the segments of the streamline will have equal length. """ bundle_downsampled = [downsample(s, 12) for s in bundle] n_pts_ds = [len(s) for s in bundle_downsampled] """ Alternatively, the function ``approx_polygon_track`` allows to reduce the number of points so that they are more points in curvy regions and less points in less curvy regions. In contrast with ``downsample`` it does not enforce that segments should be of equal size. """ bundle_downsampled2 = [approx_polygon_track(s, 0.25) for s in bundle] n_pts_ds2 = [len(streamline) for streamline in bundle_downsampled2] """ Both, ``downsample`` and ``approx_polygon_track`` can be thought as methods for lossy compression of streamlines. """ from dipy.viz import fvtk ren = fvtk.ren() ren.SetBackground(*fvtk.colors.white) bundle_actor = fvtk.streamtube(bundle, fvtk.colors.red, linewidth=0.3) fvtk.add(ren, bundle_actor) bundle_actor2 = fvtk.streamtube(bundle_downsampled, fvtk.colors.red, linewidth=0.3) bundle_actor2.SetPosition(0, 40, 0) bundle_actor3 = fvtk.streamtube(bundle_downsampled2, fvtk.colors.red, linewidth=0.3) bundle_actor3.SetPosition(0, 80, 0) fvtk.add(ren, bundle_actor2) fvtk.add(ren, bundle_actor3) fvtk.camera(ren, pos=(0, 0, 0), focal=(30, 0, 0)) fvtk.record(ren, out_path='simulated_cosine_bundle.png', size=(900, 900)) """ .. figure:: simulated_cosine_bundle.png :align: center **Initial bundle (down), downsampled at 12 equidistant points (middle), downsampled not equidistantly(up)** From the figure above we can see that all 3 bundles look quite similar. However, when we plot the histogram of the number of points used for each streamline, it becomes obvious that we have managed to reduce in a great amount the size of the initial dataset. """ import matplotlib.pyplot as plt fig_hist, ax = plt.subplots(1) ax.hist(n_pts, color='r', histtype='step', label='initial') ax.hist(n_pts_ds, color='g', histtype='step', label='downsample (12)') ax.hist(n_pts_ds2, color='b', histtype='step', label='approx_polygon_track (0.25)') ax.set_xlabel('Number of points') ax.set_ylabel('Count') plt.show() plt.legend() plt.savefig('n_pts_histogram.png') """ .. figure:: n_pts_histogram.png :align: center **Histogram of the number of points of the streamlines** Finally, we can also show that the lengths of the streamlines haven't changed considerably after applying the two methods of downsampling. """ lengths_downsampled = list(length(bundle_downsampled)) lengths_downsampled2 = list(length(bundle_downsampled2)) fig, ax = plt.subplots(1) ax.plot(lengths, color='r', label='initial') ax.plot(lengths_downsampled, color='g', label='downsample (12)') ax.plot(lengths_downsampled2, color='b', label='approx_polygon_track (0.25)') ax.set_xlabel('Streamline ID') ax.set_ylabel('Length') plt.show() plt.legend() plt.savefig('lengths_plots.png') """ .. figure:: lengths_plots.png :align: center **Lengths of each streamline for every one of the 3 bundles** """ dipy-0.10.1/doc/examples/streamline_tools.py000066400000000000000000000265551263041327500210760ustar00rootroot00000000000000""" ========================================================= Connectivity Matrices, ROI Intersections and Density Maps ========================================================= This example is meant to be an introduction to some of the streamline tools available in dipy. Some of the functions covered in this example are ``target``, ``connectivity_matrix`` and ``density_map``. ``target`` allows one to filter streamlines that either pass through or do not pass through some region of the brain, ``connectivity_matrix`` groups and counts streamlines based on where in the brain they begin and end, and finally, density map counts the number of streamlines that pass though every voxel of some image. To get started we'll need to have a set of streamlines to work with. We'll use EuDX along with the CsaOdfModel to make some streamlines. Let's import the modules and download the data we'll be using. """ from dipy.tracking.eudx import EuDX from dipy.reconst import peaks, shm from dipy.tracking import utils from dipy.data import read_stanford_labels, fetch_stanford_t1, read_stanford_t1 hardi_img, gtab, labels_img = read_stanford_labels() data = hardi_img.get_data() labels = labels_img.get_data() fetch_stanford_t1() t1 = read_stanford_t1() t1_data = t1.get_data() """ We've loaded an image called ``labels_img`` which is a map of tissue types such that every integer value in the array ``labels`` represents an anatomical structure or tissue type [#]_. For this example, the image was created so that white matter voxels have values of either 1 or 2. We'll use ``peaks_from_model`` to apply the ``CsaOdfModel`` to each white matter voxel and estimate fiber orientations which we can use for tracking. """ white_matter = (labels == 1) | (labels == 2) csamodel = shm.CsaOdfModel(gtab, 6) csapeaks = peaks.peaks_from_model(model=csamodel, data=data, sphere=peaks.default_sphere, relative_peak_threshold=.8, min_separation_angle=45, mask=white_matter) """ Now we can use EuDX to track all of the white matter. To keep things reasonably fast we use ``density=2`` which will result in 8 seeds per voxel. We'll set ``a_low`` (the parameter which determines the threshold of FA/QA under which tracking stops) to be very low because we've already applied a white matter mask. """ seeds = utils.seeds_from_mask(white_matter, density=2) streamline_generator = EuDX(csapeaks.peak_values, csapeaks.peak_indices, odf_vertices=peaks.default_sphere.vertices, a_low=.05, step_sz=.5, seeds=seeds) affine = streamline_generator.affine streamlines = list(streamline_generator) """ The first of the tracking utilities we'll cover here is ``target``. This function takes a set of streamlines and a region of interest (ROI) and returns only those streamlines that pass though the ROI. The ROI should be an array such that the voxels that belong to the ROI are ``True`` and all other voxels are ``False`` (this type of binary array is sometimes called a mask). This function can also exclude all the streamlines that pass though an ROI by setting the ``include`` flag to ``False``. In this example we'll target the streamlines of the corpus callosum. Our ``labels`` array has a sagittal slice of the corpus callosum identified by the label value 2. We'll create an ROI mask from that label and create two sets of streamlines, those that intersect with the ROI and those that don't. """ cc_slice = labels == 2 cc_streamlines = utils.target(streamlines, cc_slice, affine=affine) cc_streamlines = list(cc_streamlines) other_streamlines = utils.target(streamlines, cc_slice, affine=affine, include=False) other_streamlines = list(other_streamlines) assert len(other_streamlines) + len(cc_streamlines) == len(streamlines) """ We can use some of dipy's visualization tools to display the ROI we targeted above and all the streamlines that pass though that ROI. The ROI is the yellow region near the center of the axial image. """ from dipy.viz import fvtk from dipy.viz.colormap import line_colors # Make display objects color = line_colors(cc_streamlines) cc_streamlines_actor = fvtk.line(cc_streamlines, line_colors(cc_streamlines)) cc_ROI_actor = fvtk.contour(cc_slice, levels=[1], colors=[(1., 1., 0.)], opacities=[1.]) vol_actor = fvtk.slicer(t1_data) vol_actor.display(40, None, None) vol_actor2 = vol_actor.copy() vol_actor2.display(None, None, 35) # Add display objects to canvas r = fvtk.ren() fvtk.add(r, vol_actor) fvtk.add(r, vol_actor2) fvtk.add(r, cc_streamlines_actor) fvtk.add(r, cc_ROI_actor) # Save figures fvtk.record(r, n_frames=1, out_path='corpuscallosum_axial.png', size=(800, 800)) fvtk.camera(r, [-1, 0, 0], [0, 0, 0], viewup=[0, 0, 1]) fvtk.record(r, n_frames=1, out_path='corpuscallosum_sagittal.png', size=(800, 800)) """ .. figure:: corpuscallosum_axial.png :align: center **Corpus Callosum Axial** .. include:: ../links_names.inc .. figure:: corpuscallosum_sagittal.png :align: center **Corpus Callosum Sagittal** """ """ Once we've targeted on the corpus callosum ROI, we might want to find out which regions of the brain are connected by these streamlines. To do this we can use the ``connectivity_matrix`` function. This function takes a set of streamlines and an array of labels as arguments. It returns the number of streamlines that start and end at each pair of labels and it can return the streamlines grouped by their endpoints. Notice that this function only considers the endpoints of each streamline. """ M, grouping = utils.connectivity_matrix(cc_streamlines, labels, affine=affine, return_mapping=True, mapping_as_streamlines=True) M[:3, :] = 0 M[:, :3] = 0 """ We've set ``return_mapping`` and ``mapping_as_streamlines`` to ``True`` so that ``connectivity_matrix`` returns all the streamlines in ``cc_streamlines`` grouped by their endpoint. Because we're typically only interested in connections between gray matter regions, and because the label 0 represents background and the labels 1 and 2 represent white matter, we discard the first three rows and columns of the connectivity matrix. We can now display this matrix using matplotlib, we display it using a log scale to make small values in the matrix easier to see. """ import numpy as np import matplotlib.pyplot as plt plt.imshow(np.log1p(M), interpolation='nearest') plt.savefig("connectivity.png") """ .. figure:: connectivity.png :align: center **Connectivity of Corpus Callosum** .. include:: ../links_names.inc """ """ In our example track there are more streamlines connecting regions 11 and 54 than any other pair of regions. These labels represent the left and right superior frontal gyrus respectively. These two regions are large, close together, have lots of corpus callosum fibers and are easy to track so this result should not be a surprise to anyone. However, the interpretation of streamline counts can be tricky. The relationship between the underlying biology and the streamline counts will depend on several factors, including how the tracking was done, and the correct way to interpret these kinds of connectivity matrices is still an open question in the diffusion imaging literature. The next function we'll demonstrate is ``density_map``. This function allows one to represent the spatial distribution of a track by counting the density of streamlines in each voxel. For example, let's take the track connecting the left and right superior frontal gyrus. """ lr_superiorfrontal_track = grouping[11, 54] shape = labels.shape dm = utils.density_map(lr_superiorfrontal_track, shape, affine=affine) """ Let's save this density map and the streamlines so that they can be visualized together. In order to save the streamlines in a ".trk" file we'll need to move them to "trackvis space", or the representation of streamlines specified by the trackvis Track File format. To do that, we will use tools available in [nibabel](http://nipy.org/nibabel) """ import nibabel as nib # Save density map dm_img = nib.Nifti1Image(dm.astype("int16"), hardi_img.get_affine()) dm_img.to_filename("lr-superiorfrontal-dm.nii.gz") # Make a trackvis header so we can save streamlines voxel_size = labels_img.get_header().get_zooms() trackvis_header = nib.trackvis.empty_header() trackvis_header['voxel_size'] = voxel_size trackvis_header['dim'] = shape trackvis_header['voxel_order'] = "RAS" # Move streamlines to "trackvis space" trackvis_point_space = utils.affine_for_trackvis(voxel_size) lr_sf_trk = utils.move_streamlines(lr_superiorfrontal_track, trackvis_point_space, input_space=affine) lr_sf_trk = list(lr_sf_trk) # Save streamlines for_save = [(sl, None, None) for sl in lr_sf_trk] nib.trackvis.write("lr-superiorfrontal.trk", for_save, trackvis_header) """ Let's take a moment here to consider the representation of streamlines used in dipy. Streamlines are a path though the 3d space of an image represented by a set of points. For these points to have a meaningful interpretation, these points must be given in a known coordinate system. The ``affine`` attribute of the ``streamline_generator`` object specifies the coordinate system of the points with respect to the voxel indices of the input data. ``trackvis_point_space`` specifies the trackvis coordinate system with respect to the same indices. The ``move_streamlines`` function returns a new set of streamlines from an existing set of streamlines in the target space. The target space and the input space must be specified as affine transformations with respect to the same reference [#]_. If no input space is given, the input space will be the same as the current representation of the streamlines, in other words the input space is assumed to be ``np.eye(4)``, the 4-by-4 identity matrix. All of the functions above that allow streamlines to interact with volumes take an affine argument. This argument allows these functions to work with streamlines regardless of their coordinate system. For example even though we moved our streamlines to "trackvis space", we can still compute the density map as long as we specify the right coordinate system. """ dm_trackvis = utils.density_map(lr_sf_trk, shape, affine=trackvis_point_space) assert np.all(dm == dm_trackvis) """ This means that streamlines can interact with any image volume, for example a high resolution structural image, as long as one can register that image to the diffusion images and calculate the coordinate system with respect to that image. """ """ .. rubric:: Footnotes .. [#] The image `aparc-reduced.nii.gz`, which we load as ``labels_img``, is a modified version of label map `aparc+aseg.mgz` created by freesurfer. The corpus callosum region is a combination of the freesurfer labels 251-255. The remaining freesurfer labels were re-mapped and reduced so that they lie between 0 and 88. To see the freesurfer region, label and name, represented by each value see `label_info.txt` in `~/.dipy/stanford_hardi`. .. [#] An affine transformation is a mapping between two coordinate systems that can represent scaling, rotation, sheer, translation and reflection. Affine transformations are often represented using a 4x4 matrix where the last row of the matrix is ``[0, 0, 0, 1]``. """ dipy-0.10.1/doc/examples/syn_registration_2d.py000066400000000000000000000156111263041327500214720ustar00rootroot00000000000000""" ========================================== Symmetric Diffeomorphic Registration in 2D ========================================== This example explains how to register 2D images using the Symmetric Normalization (SyN) algorithm proposed by Avants et al. [Avants09]_ (also implemented in the ANTS software [Avants11]_) We will perform the classic Circle-To-C experiment for diffeomorphic registration """ import numpy as np from dipy.data import get_data from dipy.align.imwarp import SymmetricDiffeomorphicRegistration from dipy.align.metrics import SSDMetric, CCMetric, EMMetric import dipy.align.imwarp as imwarp from dipy.viz import regtools fname_moving = get_data('reg_o') fname_static = get_data('reg_c') moving = np.load(fname_moving) static = np.load(fname_static) """ To visually check the overlap of the static image with the transformed moving image, we can plot them on top of each other with different channels to see where the differences are located """ regtools.overlay_images(static, moving, 'Static', 'Overlay', 'Moving', 'input_images.png') """ .. figure:: input_images.png :align: center **Input images**. """ """ We want to find an invertible map that transforms the moving image (circle) into the static image (the C letter) The first decision we need to make is what similarity metric is appropriate for our problem. In this example we are using two binary images, so the Sum of Squared Differences (SSD) is a good choice. """ dim = static.ndim metric = SSDMetric(dim) """ Now we define an instance of the registration class. The SyN algorithm uses a multi-resolution approach by building a Gaussian Pyramid. We instruct the registration instance to perform at most [n_0, n_1, ..., n_k] iterations at each level of the pyramid. The 0-th level corresponds to the finest resolution. """ level_iters = [200, 100, 50, 25] sdr = SymmetricDiffeomorphicRegistration(metric, level_iters, inv_iter = 50) """ Now we execute the optimization, which returns a DiffeomorphicMap object, that can be used to register images back and forth between the static and moving domains """ mapping = sdr.optimize(static, moving) """ It is a good idea to visualize the resulting deformation map to make sure the result is reasonable (at least, visually) """ regtools.plot_2d_diffeomorphic_map(mapping, 10, 'diffeomorphic_map.png') """ .. figure:: diffeomorphic_map.png :align: center **Deformed lattice under the resulting diffeomorphic map**. """ """ Now let's warp the moving image and see if it gets similar to the static image """ warped_moving = mapping.transform(moving, 'linear') regtools.overlay_images(static, warped_moving, 'Static','Overlay','Warped moving', 'direct_warp_result.png') """ .. figure:: direct_warp_result.png :align: center **Moving image transformed under the (direct) transformation in green on top of the static image (in red)**. """ """ And we can also apply the inverse mapping to verify that the warped static image is similar to the moving image """ warped_static = mapping.transform_inverse(static, 'linear') regtools.overlay_images(warped_static, moving,'Warped static','Overlay','Moving', 'inverse_warp_result.png') """ .. figure:: inverse_warp_result.png :align: center **Static image transformed under the (inverse) transformation in red on top of the moving image (in green)**. """ """ Now let's register a couple of slices from a B0 image using the Cross Correlation metric. Also, let's inspect the evolution of the registration. To do this we will define a function that will be called by the registration object at each stage of the optimization process. We will draw the current warped images after finishing each resolution. """ def callback_CC(sdr, status): #Status indicates at which stage of the optimization we currently are #For now, we will only react at the end of each resolution of the scale #space if status == imwarp.RegistrationStages.SCALE_END: #get the current images from the metric wmoving = sdr.metric.moving_image wstatic = sdr.metric.static_image #draw the images on top of each other with different colors regtools.overlay_images(wmoving, wstatic, 'Warped moving', 'Overlay', 'Warped static') """ Now we are ready to configure and run the registration. First load the data """ from dipy.data.fetcher import fetch_syn_data, read_syn_data from dipy.segment.mask import median_otsu fetch_syn_data() t1, b0 = read_syn_data() data = np.array(b0.get_data(), dtype = np.float64) """ We first remove the skull from the B0 volume """ b0_mask, mask = median_otsu(data, 4, 4) """ And select two slices to try the 2D registration """ static = b0_mask[:, :, 40] moving = b0_mask[:, :, 38] """ After loading the data, we instantiate the Cross Correlation metric. The metric receives three parameters: the dimension of the input images, the standard deviation of the Gaussian Kernel to be used to regularize the gradient and the radius of the window to be used for evaluating the local normalized cross correlation. """ sigma_diff = 3.0 radius = 4 metric = CCMetric(2, sigma_diff, radius) """ Let's use a scale space of 3 levels """ level_iters = [100, 50, 25] sdr = SymmetricDiffeomorphicRegistration(metric, level_iters) sdr.callback = callback_CC """ And execute the optimization """ mapping = sdr.optimize(static, moving) warped = mapping.transform(moving) ''' We can see the effect of the warping by switching between the images before and after registration ''' regtools.overlay_images(static, moving, 'Static', 'Overlay', 'Moving', 't1_slices_input.png') """ .. figure:: t1_slices_input.png :align: center **Input images**. """ regtools.overlay_images(static, warped, 'Static', 'Overlay', 'Warped moving', 't1_slices_res.png') """ .. figure:: t1_slices_res.png :align: center **Moving image transformed under the (direct) transformation in green on top of the static image (in red)**. """ ''' And we can apply the inverse warping too ''' inv_warped = mapping.transform_inverse(static) regtools.overlay_images(inv_warped, moving, 'Warped static', 'Overlay', 'moving', 't1_slices_res2.png') """ .. figure:: t1_slices_res2.png :align: center **Static image transformed under the (inverse) transformation in red on top of the moving image (in green)**. """ ''' Finally, let's see the deformation ''' regtools.plot_2d_diffeomorphic_map(mapping, 5, 'diffeomorphic_map_b0s.png') """ .. figure:: diffeomorphic_map_b0s.png :align: center **Deformed lattice under the resulting diffeomorphic map**. .. [Avants09] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2009). Symmetric Diffeomorphic Image Registration with Cross- Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, 12(1), 26-41.\ .. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/syn_registration_3d.py000066400000000000000000000117501263041327500214730ustar00rootroot00000000000000""" ========================================== Symmetric Diffeomorphic Registration in 3D ========================================== This example explains how to register 3D volumes using the Symmetric Normalization (SyN) algorithm proposed by Avants et al. [Avants09]_ (also implemented in the ANTS software [Avants11]_) We will register two 3D volumes from the same modality using SyN with the Cross Correlation (CC) metric. """ import numpy as np import nibabel as nib from dipy.align.imwarp import SymmetricDiffeomorphicRegistration from dipy.align.imwarp import DiffeomorphicMap from dipy.align.metrics import CCMetric import os.path from dipy.viz import regtools """ Let's fetch two b0 volumes, the first one will be the b0 from the Stanford HARDI dataset """ from dipy.data import fetch_stanford_hardi, read_stanford_hardi fetch_stanford_hardi() nib_stanford, gtab_stanford = read_stanford_hardi() stanford_b0 = np.squeeze(nib_stanford.get_data())[..., 0] """ The second one will be the same b0 we used for the 2D registration tutorial """ from dipy.data.fetcher import fetch_syn_data, read_syn_data fetch_syn_data() nib_syn_t1, nib_syn_b0 = read_syn_data() syn_b0 = np.array(nib_syn_b0.get_data()) """ We first remove the skull from the b0's """ from dipy.segment.mask import median_otsu stanford_b0_masked, stanford_b0_mask = median_otsu(stanford_b0, 4, 4) syn_b0_masked, syn_b0_mask = median_otsu(syn_b0, 4, 4) static = stanford_b0_masked static_affine = nib_stanford.get_affine() moving = syn_b0_masked moving_affine = nib_syn_b0.get_affine() """ Suppose we have already done a linear registration to roughly align the two images """ pre_align = np.array([[1.02783543e+00, -4.83019053e-02, -6.07735639e-02, -2.57654118e+00], [4.34051706e-03, 9.41918267e-01, -2.66525861e-01, 3.23579799e+01], [5.34288908e-02, 2.90262026e-01, 9.80820307e-01, -1.46216651e+01], [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.00000000e+00]]) """ As we did in the 2D example, we would like to visualize (some slices of) the two volumes by overlapping them over two channels of a color image. To do that we need them to be sampled on the same grid, so let's first re-sample the moving image on the static grid. We create an AffineMap to transform the moving image towards the static image """ from dipy.align.imaffine import AffineMap affine_map = AffineMap(pre_align, static.shape, static_affine, moving.shape, moving_affine) resampled = affine_map.transform(moving) """ plot the overlapped middle slices of the volumes """ regtools.overlay_slices(static, resampled, None, 1, 'Static', 'Moving', 'input_3d.png') """ .. figure:: input_3d.png :align: center **Static image in red on top of the pre-aligned moving image (in green)**. """ """ We want to find an invertible map that transforms the moving image into the static image. We will use the Cross Correlation metric """ metric = CCMetric(3) """ Now we define an instance of the registration class. The SyN algorithm uses a multi-resolution approach by building a Gaussian Pyramid. We instruct the registration object to perform at most [n_0, n_1, ..., n_k] iterations at each level of the pyramid. The 0-th level corresponds to the finest resolution. """ level_iters = [10, 10, 5] sdr = SymmetricDiffeomorphicRegistration(metric, level_iters) """ Execute the optimization, which returns a DiffeomorphicMap object, that can be used to register images back and forth between the static and moving domains. We provide the pre-aligning matrix that brings the moving image closer to the static image """ mapping = sdr.optimize(static, moving, static_affine, moving_affine, pre_align) """ Now let's warp the moving image and see if it gets similar to the static image """ warped_moving = mapping.transform(moving) """ We plot the overlapped middle slices """ regtools.overlay_slices(static, warped_moving, None, 1, 'Static', 'Warped moving', 'warped_moving.png') """ .. figure:: warped_moving.png :align: center **Moving image transformed under the (direct) transformation in green on top of the static image (in red)**. """ """ And we can also apply the inverse mapping to verify that the warped static image is similar to the moving image """ warped_static = mapping.transform_inverse(static) regtools.overlay_slices(warped_static, moving, None, 1, 'Warped static', 'Moving', 'warped_static.png') """ .. figure:: warped_static.png :align: center **Static image transformed under the (inverse) transformation in red on top of the moving image (in green). Note that the moving image has lower resolution**. .. [Avants09] Avants, B. B., Epstein, C. L., Grossman, M., & Gee, J. C. (2009). Symmetric Diffeomorphic Image Registration with Cross- Correlation: Evaluating Automated Labeling of Elderly and Neurodegenerative Brain, 12(1), 26-41. .. [Avants11] Avants, B. B., Tustison, N., & Song, G. (2011). Advanced Normalization Tools ( ANTS ), 1-35. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/tracking_eudx_odf.py000066400000000000000000000061221263041327500211560ustar00rootroot00000000000000""" ============================================= Deterministic Tracking with EuDX on ODF Peaks ============================================= .. NOTE:: Dipy has updated tools for fiber tracking. Our new machinery for fiber tracking is featured in the example titled Introduction to Basic Tracking. The tools demonstrated in this example are no longer actively being maintained and will likely be deprecated at some point. In this example we do deterministic fiber tracking on fields of ODF peaks. EuDX [Garyfallidis12]_ will be used for this. This example requires importing example `reconst_csa.py` in order to run. EuDX was primarily made with cpu efficiency in mind. The main idea can be used with any model that is a child of OdfModel. """ from reconst_csa import csapeaks, sphere """ This time we will not use FA as input to EuDX but we will use GFA (generalized FA), which is more suited for ODF functions. Tracking will stop when GFA is less than 0.2. """ from dipy.tracking.eudx import EuDX eu = EuDX(csapeaks.gfa, csapeaks.peak_indices[..., 0], seeds=10000, odf_vertices=sphere.vertices, a_low=0.2) csa_streamlines = [streamline for streamline in eu] """ Now that we have our streamlines in memory we can save the results on the disk. For this purpose we can use the TrackVis format (``*.trk``). First, we need to create a header. """ import nibabel as nib hdr = nib.trackvis.empty_header() hdr['voxel_size'] = (2., 2., 2.) hdr['voxel_order'] = 'LAS' hdr['dim'] = csapeaks.gfa.shape[:3] """ Save the streamlines. """ csa_streamlines_trk = ((sl, None, None) for sl in csa_streamlines) csa_sl_fname = 'csa_streamline.trk' nib.trackvis.write(csa_sl_fname, csa_streamlines_trk, hdr, points_space='voxel') """ Visualize the streamlines with fvtk (python vtk is required). """ from dipy.viz import fvtk from dipy.viz.colormap import line_colors r = fvtk.ren() fvtk.add(r, fvtk.line(csa_streamlines, line_colors(csa_streamlines))) print('Saving illustration as tensor_tracks.png') fvtk.record(r, n_frames=1, out_path='csa_tracking.png', size=(600, 600)) """ .. figure:: csa_tracking.png :align: center **Deterministic streamlines with EuDX on ODF peaks field modulated by GFA**. It is also possible to use EuDX with multiple ODF peaks, which is very helpful when tracking in crossing areas. """ eu = EuDX(csapeaks.peak_values, csapeaks.peak_indices, seeds=10000, odf_vertices=sphere.vertices, ang_thr=20., a_low=0.6) csa_streamlines_mult_peaks = [streamline for streamline in eu] fvtk.clear(r) fvtk.add(r, fvtk.line(csa_streamlines_mult_peaks, line_colors(csa_streamlines_mult_peaks))) print('Saving illustration as csa_tracking_mpeaks.png') fvtk.record(r, n_frames=1, out_path='csa_tracking_mpeaks.png', size=(600, 600)) """ .. figure:: csa_tracking_mpeaks.png :align: center **Deterministic streamlines with EuDX on multiple ODF peaks**. .. [Garyfallidis12] Garyfallidis E., "Towards an accurate brain tractography", PhD thesis, University of Cambridge, 2012. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/tracking_eudx_tensor.py000066400000000000000000000074711263041327500217300ustar00rootroot00000000000000""" ================================================= Deterministic Tracking with EuDX on Tensor Fields ================================================= In this example we do deterministic fiber tracking on Tensor fields with EuDX [Garyfallidis12]_. This example requires to import example `reconst_dti.py` to run. EuDX was primarily made with cpu efficiency in mind. Therefore, it should be useful to give you a quick overview of your reconstruction results with the help of tracking. """ import os import sys import numpy as np import nibabel as nib if not os.path.exists('tensor_fa.nii.gz'): import reconst_dti """ EuDX will use the directions (eigen vectors) of the Tensors to propagate streamlines from voxel to voxel and fractional anisotropy to stop tracking. """ fa_img = nib.load('tensor_fa.nii.gz') FA = fa_img.get_data() evecs_img = nib.load('tensor_evecs.nii.gz') evecs = evecs_img.get_data() """ In the background of the image the fitting will not be accurate because there all measured signal is mostly noise and possibly we will find FA values with nans (not a number). We can easily remove these in the following way. """ FA[np.isnan(FA)] = 0 """ EuDX takes as input discretized voxel directions on a unit sphere. Therefore, it is necessary to discretize the eigen vectors before feeding them in EuDX. For the discretization procedure we use an evenly distributed sphere of 724 points which we can access using the get_sphere function. """ from dipy.data import get_sphere sphere = get_sphere('symmetric724') """ We use quantize_evecs (evecs here stands for eigen vectors) to apply the discretization. """ from dipy.reconst.dti import quantize_evecs peak_indices = quantize_evecs(evecs, sphere.vertices) """ EuDX is the fiber tracking algorithm that we use in this example. The most important parameters are the first one which represents the magnitude of the peak of a scalar anisotropic function, the second which represents the indices of the discretized directions of the peaks and odf_vertices are the vertices of the input sphere. """ from dipy.tracking.eudx import EuDX eu = EuDX(FA.astype('f8'), peak_indices, seeds=50000, odf_vertices = sphere.vertices, a_low=0.2) tensor_streamlines = [streamline for streamline in eu] """ We can now save the results in the disk. For this purpose we can use the TrackVis format (``*.trk``). First, we need to create a header. """ hdr = nib.trackvis.empty_header() hdr['voxel_size'] = fa_img.get_header().get_zooms()[:3] hdr['voxel_order'] = 'LAS' hdr['dim'] = FA.shape """ Then we need to input the streamlines in the way that Trackvis format expects them. """ tensor_streamlines_trk = ((sl, None, None) for sl in tensor_streamlines) ten_sl_fname = 'tensor_streamlines.trk' """ Save the streamlines. """ nib.trackvis.write(ten_sl_fname, tensor_streamlines_trk, hdr, points_space='voxel') """ If you don't want to use Trackvis to visualize the file you can use our lightweight `fvtk` module. """ try: from dipy.viz import fvtk except ImportError: raise ImportError('Python vtk module is not installed') sys.exit() """ Create a scene. """ ren = fvtk.ren() """ Every streamline will be coloured according to its orientation """ from dipy.viz.colormap import line_colors """ fvtk.line adds a streamline actor for streamline visualization and fvtk.add adds this actor in the scene """ fvtk.add(ren, fvtk.streamtube(tensor_streamlines, line_colors(tensor_streamlines))) print('Saving illustration as tensor_tracks.png') ren.SetBackground(1, 1, 1) fvtk.record(ren, n_frames=1, out_path='tensor_tracks.png', size=(600, 600)) """ .. figure:: tensor_tracks.png :align: center **Deterministic streamlines with EuDX on a Tensor Field**. .. [Garyfallidis12] Garyfallidis E., "Towards an accurate brain tractography", PhD thesis, University of Cambridge, 2012. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/tracking_quick_start.py000066400000000000000000000147351263041327500217230ustar00rootroot00000000000000""" ==================== Tracking Quick Start ==================== This example shows how to perform fiber tracking using Dipy. We will use Constrained Spherical Deconvolution (CSD) [Tournier07]_ for local reconstructions and then generate deterministic streamlines using the fiber directions (peaks) from CSD and fractional anisotropic (FA) as a stopping criterion. Let's load the necessary modules. """ import numpy as np from dipy.reconst.dti import TensorModel, fractional_anisotropy from dipy.reconst.csdeconv import (ConstrainedSphericalDeconvModel, auto_response) from dipy.direction import peaks_from_model from dipy.tracking.eudx import EuDX from dipy.data import fetch_stanford_hardi, read_stanford_hardi, get_sphere from dipy.segment.mask import median_otsu from dipy.viz import fvtk from dipy.viz.colormap import line_colors """ Load one of the available datasets with 150 gradients on the sphere and 10 b0s """ fetch_stanford_hardi() img, gtab = read_stanford_hardi() data = img.get_data() """ Create a brain mask. This dataset is a bit difficult to segment with the default ``median_otsu`` parameters (see :ref:`example_brain_extraction_dwi`) therefore we use here a bit more advanced options. """ maskdata, mask = median_otsu(data, 3, 1, False, vol_idx=range(10, 50), dilate=2) """ For the constrained spherical deconvolution we need to estimate the response function (see :ref:`example_reconst_csd`) and create a model. """ response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7) csd_model = ConstrainedSphericalDeconvModel(gtab, response) """ Next, we use ``peaks_from_model`` to fit the data and calculated the fiber directions in all voxels. """ sphere = get_sphere('symmetric724') csd_peaks = peaks_from_model(model=csd_model, data=data, sphere=sphere, mask=mask, relative_peak_threshold=.5, min_separation_angle=25, parallel=True) """ For the tracking part, we will use the fiber directions from the ``csd_model`` but stop tracking in areas where fractional anisotropy (FA) is low (< 0.1). To derive the FA, used here as a stopping criterion, we would need to fit a tensor model first. Here, we fit the Tensor using weighted least squares (WLS). """ tensor_model = TensorModel(gtab, fit_method='WLS') tensor_fit = tensor_model.fit(data, mask) FA = fractional_anisotropy(tensor_fit.evals) """ In order for the stopping values to be used with our tracking algorithm we need to have the same dimensions as the ``csd_peaks.peak_values``. For this reason, we can assign the same FA value to every peak direction in the same voxel in the following way. """ stopping_values = np.zeros(csd_peaks.peak_values.shape) stopping_values[:] = FA[..., None] """ For quality assurance we can also visualize a slice from the direction field which we will use as the basis to perform the tracking. """ ren = fvtk.ren() slice_no = data.shape[2] / 2 fvtk.add(ren, fvtk.peaks(csd_peaks.peak_dirs[:, :, slice_no:slice_no + 1], stopping_values[:, :, slice_no:slice_no + 1])) print('Saving illustration as csd_direction_field.png') fvtk.record(ren, out_path='csd_direction_field.png', size=(900, 900)) """ .. figure:: csd_direction_field.png :align: center **Direction Field (peaks)** ``EuDX`` [Garyfallidis12]_ is a fast algorithm that we use here to generate streamlines. If the parameter ``seeds`` is a positive integer it will generate that number of randomly placed seeds everywhere in the volume. Alternatively, you can specify the exact seed points using an array (N, 3) where N is the number of seed points. For simplicity, here we will use the first option (random seeds). ``a_low`` is the threshold of the fist parameter (``stopping_values``) which means that there will that tracking will stop in regions with FA < 0.1. """ streamline_generator = EuDX(stopping_values, csd_peaks.peak_indices, seeds=10**4, odf_vertices=sphere.vertices, a_low=0.1) streamlines = [streamline for streamline in streamline_generator] """ We can visualize the streamlines using ``fvtk.line`` or ``fvtk.streamtube``. """ fvtk.clear(ren) fvtk.add(ren, fvtk.line(streamlines, line_colors(streamlines))) print('Saving illustration as csd_streamlines_eudx.png') fvtk.record(ren, out_path='csd_streamlines_eudx.png', size=(900, 900)) """ .. figure:: csd_streamlines_eudx.png :align: center **CSD-based streamlines using EuDX** We used above ``fvtk.record`` because we want to create a figure for the tutorial but you can visualize the same objects in 3D using ``fvtk.show(ren)``. To learn more about this process you could start playing with the number of seed points or, even better, specify seeds to be in specific regions of interest in the brain. ``fvtk`` gives some minimal interactivity however you can save the resulting streamlines in a Trackvis (.trk) format and load them for example with the Fibernavigator_ or another tool for medical visualization. Finally, let's save the streamlines as a (.trk) file and FA as a Nifti image. """ import nibabel as nib hdr = nib.trackvis.empty_header() hdr['voxel_size'] = img.get_header().get_zooms()[:3] hdr['voxel_order'] = 'LAS' hdr['dim'] = FA.shape[:3] csd_streamlines_trk = ((sl, None, None) for sl in streamlines) csd_sl_fname = 'csd_streamline.trk' nib.trackvis.write(csd_sl_fname, csd_streamlines_trk, hdr, points_space='voxel') nib.save(nib.Nifti1Image(FA, img.get_affine()), 'FA_map.nii.gz') """ In Windows if you get a runtime error about frozen executable please start your script by adding your code above in a ``main`` function and use: if __name__ == '__main__': import multiprocessing multiprocessing.freeze_support() main() .. [Garyfallidis12] Garyfallidis E., "Towards an accurate brain tractography", PhD thesis, University of Cambridge, 2012. .. [Tournier07] J-D. Tournier, F. Calamante and A. Connelly, "Robust determination of the fibre orientation distribution in diffusion MRI: Non-negativity constrained super-resolved spherical deconvolution", Neuroimage, vol. 35, no. 4, pp. 1459-1472, 2007. .. NOTE:: Dipy has a new and very modular fiber tracking machinery. Our new machinery for fiber tracking is featured in the example :ref:`example_tracking_quick_start`. .. include:: ../links_names.inc """ dipy-0.10.1/doc/examples/tracking_tissue_classifier.py000066400000000000000000000261221263041327500231030ustar00rootroot00000000000000""" ================================================= Using Various Tissue Classifiers for Tractography ================================================= The tissue classifier determines if the tracking stops or continues at each tracking position. The tracking stops when it reaches an ending region (e.g. low FA, gray matter or corticospinal fluid regions) or exits the image boundaries. The tracking also stops if the direction getter has no direction to follow. Each tissue classifier determines if the stopping is 'valid' or 'invalid'. A streamline is 'valid' when the tissue classifier determines if the streamline stops in a position classified as 'ENDPOINT' or 'OUTSIDEIMAGE'. A streamline is 'invalid' when it stops in a position classified as 'TRACKPOINT' or 'INVALIDPOINT'. These conditions are described below. The 'LocalTracking' generator can be set to output all generated streamlines or only the 'valid' ones. This example is an extension of the :ref:`example_deterministic_fiber_tracking` example. We begin by loading the data, fitting a Constrained Spherical Deconvolution (CSD) reconstruction model and creating the maximum deterministic direction getter. """ import numpy as np from dipy.data import read_stanford_labels, default_sphere from dipy.direction import DeterministicMaximumDirectionGetter from dipy.io.trackvis import save_trk from dipy.reconst.csdeconv import (ConstrainedSphericalDeconvModel, auto_response) from dipy.tracking.local import LocalTracking from dipy.tracking import utils from dipy.viz import fvtk from dipy.viz.colormap import line_colors ren = fvtk.ren() hardi_img, gtab, labels_img = read_stanford_labels() data = hardi_img.get_data() labels = labels_img.get_data() affine = hardi_img.get_affine() seed_mask = labels == 2 white_matter = (labels == 1) | (labels == 2) seeds = utils.seeds_from_mask(seed_mask, density=2, affine=affine) response, ratio = auto_response(gtab, data, roi_radius=10, fa_thr=0.7) csd_model = ConstrainedSphericalDeconvModel(gtab, response) csd_fit = csd_model.fit(data, mask=white_matter) dg = DeterministicMaximumDirectionGetter.from_shcoeff(csd_fit.shm_coeff, max_angle=30., sphere=default_sphere) """ Threshold Tissue Classifier --------------------------- A scalar map can be used to define where the tracking stops. The threshold tissue classifier uses a scalar map to stop the tracking whenever the interpolated scalar value is lower than a fixed threshold. Here, we show an example using the fractional anisotropy (FA) map of the DTI model. The threshold tissue classifier uses a trilinear interpolation at the tracking position. **Parameters** - metric_map: numpy array [:, :, :] - threshold: float **Stopping criterion** - 'ENDPOINT': metric_map < threshold, - 'OUTSIDEIMAGE': tracking point outside of metric_map, - 'TRACKPOINT': stop because no direction is available, - 'INVALIDPOINT': N/A. """ import matplotlib.pyplot as plt import dipy.reconst.dti as dti from dipy.reconst.dti import fractional_anisotropy from dipy.tracking.local import ThresholdTissueClassifier tensor_model = dti.TensorModel(gtab) tenfit = tensor_model.fit(data, mask=labels > 0) FA = fractional_anisotropy(tenfit.evals) threshold_classifier = ThresholdTissueClassifier(FA, .2) fig = plt.figure() mask_fa = FA.copy() mask_fa[mask_fa < 0.2] = 0 plt.xticks([]) plt.yticks([]) plt.imshow(mask_fa[:, :, data.shape[2] / 2].T, cmap='gray', origin='lower', interpolation='nearest') fig.tight_layout() fig.savefig('threshold_fa.png') """ .. figure:: threshold_fa.png :align: center **Thresholded fractional anisotropy map.** """ all_streamlines_threshold_classifier = LocalTracking(dg, threshold_classifier, seeds, affine, step_size=.5, return_all=True) save_trk("deterministic_threshold_classifier_all.trk", all_streamlines_threshold_classifier, affine, labels.shape) streamlines = [sl for sl in all_streamlines_threshold_classifier] fvtk.clear(ren) fvtk.add(ren, fvtk.line(streamlines, line_colors(streamlines))) fvtk.record(ren, out_path='all_streamlines_threshold_classifier.png', size=(600, 600)) """ .. figure:: all_streamlines_threshold_classifier.png :align: center **Deterministic tractography using a thresholded fractional anisotropy.** """ """ Binary Tissue Classifier ------------------------ A binary mask can be used to define where the tracking stops. The binary tissue classifier stops the tracking whenever the tracking position is outside the mask. Here, we show how to obtain the binary tissue classifier from the white matter mask defined above. The binary tissue classifier uses a nearest-neighborhood interpolation at the tracking position. **Parameters** - mask: numpy array [:, :, :] **Stopping criterion** - 'ENDPOINT': mask = 0 - 'OUTSIDEIMAGE': tracking point outside of mask - 'TRACKPOINT': no direction is available - 'INVALIDPOINT': N/A """ from dipy.tracking.local import BinaryTissueClassifier binary_classifier = BinaryTissueClassifier(white_matter) fig = plt.figure() plt.xticks([]) plt.yticks([]) fig.tight_layout() plt.imshow(white_matter[:, :, data.shape[2] / 2].T, cmap='gray', origin='lower', interpolation='nearest') fig.savefig('white_matter_mask.png') """ .. figure:: white_matter_mask.png :align: center **White matter binary mask.** """ all_streamlines_binary_classifier = LocalTracking(dg, binary_classifier, seeds, affine, step_size=.5, return_all=True) save_trk("deterministic_binary_classifier_all.trk", all_streamlines_binary_classifier, affine, labels.shape) streamlines = [sl for sl in all_streamlines_binary_classifier] fvtk.clear(ren) fvtk.add(ren, fvtk.line(streamlines, line_colors(streamlines))) fvtk.record(ren, out_path='all_streamlines_binary_classifier.png', size=(600, 600)) """ .. figure:: all_streamlines_binary_classifier.png :align: center **Deterministic tractography using a binary white matter mask.** """ """ ACT Tissue Classifier --------------------- Anatomically-constrained tractography (ACT) [Smith2012]_ uses information from anatomical images to determine when the tractography stops. The 'include_map' defines when the streamline reached a 'valid' stopping region (e.g. gray matter partial volume estimation (PVE) map) and the 'exclude_map' defines when the streamline reached an 'invalid' stopping region (e.g. corticospinal fluid PVE map). The background of the anatomical image should be added to the 'include_map' to keep streamlines exiting the brain (e.g. through the brain stem). The ACT tissue classifier uses a trilinear interpolation at the tracking position. **Parameters** - include_map: numpy array [:, :, :], - exclude_map: numpy array [:, :, :], **Stopping criterion** - 'ENDPOINT': include_map > 0.5, - 'OUTSIDEIMAGE': tracking point outside of include_map or exclude_map, - 'TRACKPOINT': no direction is available, - 'INVALIDPOINT': exclude_map > 0.5. """ from dipy.data import read_stanford_pve_maps from dipy.tracking.local import ActTissueClassifier img_pve_csf, img_pve_gm, img_pve_wm = read_stanford_pve_maps() background = np.ones(img_pve_gm.shape) background[(img_pve_gm.get_data() + img_pve_wm.get_data() + img_pve_csf.get_data()) > 0] = 0 include_map = img_pve_gm.get_data() include_map[background > 0] = 1 exclude_map = img_pve_csf.get_data() act_classifier = ActTissueClassifier(include_map, exclude_map) fig = plt.figure() plt.subplot(121) plt.xticks([]) plt.yticks([]) plt.imshow(include_map[:, :, data.shape[2] / 2].T, cmap='gray', origin='lower', interpolation='nearest') plt.subplot(122) plt.xticks([]) plt.yticks([]) plt.imshow(exclude_map[:, :, data.shape[2] / 2].T, cmap='gray', origin='lower', interpolation='nearest') fig.tight_layout() fig.savefig('act_maps.png') """ .. figure:: act_maps.png :align: center **Include (left) and exclude (right) maps for ACT.** """ all_streamlines_act_classifier = LocalTracking(dg, act_classifier, seeds, affine, step_size=.5, return_all=True) save_trk("deterministic_act_classifier_all.trk", all_streamlines_act_classifier, affine, labels.shape) streamlines = [sl for sl in all_streamlines_act_classifier] fvtk.clear(ren) fvtk.add(ren, fvtk.line(streamlines, line_colors(streamlines))) fvtk.record(ren, out_path='all_streamlines_act_classifier.png', size=(600, 600)) """ .. figure:: all_streamlines_act_classifier.png :align: center **Deterministic tractography using ACT stopping criterion.** """ valid_streamlines_act_classifier = LocalTracking(dg, act_classifier, seeds, affine, step_size=.5, return_all=False) save_trk("deterministic_act_classifier_valid.trk", valid_streamlines_act_classifier, affine, labels.shape) streamlines = [sl for sl in valid_streamlines_act_classifier] fvtk.clear(ren) fvtk.add(ren, fvtk.line(streamlines, line_colors(streamlines))) fvtk.record(ren, out_path='valid_streamlines_act_classifier.png', size=(600, 600)) """ .. figure:: valid_streamlines_act_classifier.png :align: center **Deterministic tractography using a anatomically-constrained tractography stopping criterion. Streamlines ending in gray matter region only.** """ """ The threshold and binary tissue classifiers use respectively a scalar map and a binary mask to stop the tracking. The ACT tissue classifier use partial volume fraction (PVE) maps from an anatomical image to stop the tracking. Additionally, the ACT tissue classifier determines if the tracking stopped in expected regions (e.g. gray matter) and allows the user to get only streamlines stopping in those regions. Notes ------ Currently in ACT the proposed method that cuts streamlines going through subcortical gray matter regions is not implemented. The backtracking technique for streamlines reaching INVALIDPOINT is not implemented either. References ---------- .. [Smith2012] Smith, R. E., Tournier, J.-D., Calamante, F., & Connelly, A. Anatomically-constrained tractography: Improved diffusion MRI streamlines tractography through effective use of anatomical information. NeuroImage, 63(3), 1924-1938, 2012. """ dipy-0.10.1/doc/examples/valid_examples.txt000066400000000000000000000020041263041327500206560ustar00rootroot00000000000000 quick_start.py tracking_quick_start.py brain_extraction_dwi.py reconst_csa_parallel.py reconst_csa.py reconst_csd_parallel.py reconst_csd.py reconst_dsi_metrics.py reconst_dsi.py reconst_dti.py reconst_gqi.py reconst_dsid.py kfold_xval.py reslice_datasets.py segment_quickbundles.py segment_extending_clustering_framework.py segment_clustering_features.py segment_clustering_metrics.py snr_in_cc.py streamline_formats.py tracking_eudx_odf.py tracking_eudx_tensor.py sfm_tracking.py sfm_reconst.py gradients_spheres.py simulate_multi_tensor.py restore_dti.py streamline_length.py reconst_shore.py reconst_shore_metrics.py streamline_tools.py linear_fascicle_evaluation.py denoise_nlmeans.py introduction_to_basic_tracking.py probabilistic_fiber_tracking.py deterministic_fiber_tracking.py affine_registration_3d.py syn_registration_2d.py syn_registration_3d.py bundle_registration.py tracking_tissue_classifier.py piesno.py viz_advanced.py viz_slice.py viz_bundles.py viz_widgets.py dipy-0.10.1/doc/examples/viz_advanced.py000066400000000000000000000130001263041327500201250ustar00rootroot00000000000000""" ================================== Advanced interactive visualization ================================== In DIPY we created a thin interface to access many of the capabilities available in the Visualization Toolkit framework (VTK) but tailored to the needs of structural and diffusion imaging. Initially the 3D visualization module was named ``fvtk``, meaning functions using vtk. This is still available for backwards compatibility but now there is a more comprehensive way to access the main functions using the following modules. """ import numpy as np from dipy.viz import actor, window, widget """ In ``window`` we have all the objects that connect what needs to be rendered to the display or the disk e.g., for saving screenshots. So, there you will find key objects and functions like the ``Renderer`` class which holds and provides access to all the actors and the ``show`` function which displays what is in the renderer on a window. Also, this module provides access to functions for opening/saving dialogs and printing screenshots (see ``snapshot``). In the ``actor`` module we can find all the different primitives e.g., streamtubes, lines, image slices, etc. In the ``widget`` we have some other objects which allow to add buttons and sliders and these interact both with windows and actors. Because of this they need input from the operating system so they can process events. Let's get started. In this tutorial, we will visualize some bundles together with FA or T1. We will be able to change the slices using a ``slider`` widget. First we need to fetch and load some datasets. """ from dipy.data.fetcher import fetch_bundles_2_subjects, read_bundles_2_subjects fetch_bundles_2_subjects() """ The following function outputs a dictionary with the required bundles e.g., af left (left arcuate fasciculus) and maps, e.g., FA for a specific subject. """ res = read_bundles_2_subjects('subj_1', ['t1', 'fa'], ['af.left', 'cst.right', 'cc_1']) """ We will use 3 bundles, FA and the affine transformation that brings the voxel coordinates to world coordinates (RAS 1mm). """ streamlines = res['af.left'] + res['cst.right'] + res['cc_1'] data = res['fa'] shape = data.shape affine = res['affine'] """ With our current design it is easy to decide in which space you want the streamlines and slices to appear. The default we have here is to appear in world coordinates (RAS 1mm). """ world_coords = True """ If we want to see the objects in native space we need to make sure that all objects which are currently in world coordinates are transformed back to native space using the inverse of the affine. """ if not world_coords: from dipy.tracking.streamline import transform_streamlines streamlines = transform_streamlines(streamlines, np.linalg.inv(affine)) """ Now we create, a ``Renderer`` object and add the streamlines using the ``line`` function and an image plane using the ``slice`` function. """ ren = window.Renderer() stream_actor = actor.line(streamlines) if not world_coords: image_actor = actor.slicer(data, affine=np.eye(4)) else: image_actor = actor.slicer(data, affine) """ We can also change also the opacity of the slicer """ slicer_opacity = .6 image_actor.opacity(slicer_opacity) """ Connect the actors with the Renderer. """ ren.add(stream_actor) ren.add(image_actor) """ Now we would like to change the position of the ``image_actor`` using a slider. The sliders are widgets which require access to different areas of the visualization pipeline and therefore we don't recommend using them with ``show``. The more appropriate way is to use them with the ``ShowManager`` object which allows accessing the pipeline in different areas. Here is how: """ show_m = window.ShowManager(ren, size=(1200, 900)) show_m.initialize() """ After we have initialized the ``ShowManager`` we can go ahead and create a callback which will be given to the ``slider`` function. """ def change_slice(obj, event): z = int(np.round(obj.get_value())) image_actor.display_extent(0, shape[0] - 1, 0, shape[1] - 1, z, z) slider = widget.slider(show_m.iren, show_m.ren, callback=change_slice, min_value=0, max_value=shape[2] - 1, value=shape[2] / 2, label="Move slice", right_normalized_pos=(.98, 0.6), size=(120, 0), label_format="%0.lf", color=(1., 1., 1.), selected_color=(0.86, 0.33, 1.)) """ Then, we can render all the widgets and everything else in the screen and start the interaction using ``show_m.start()``. However, if you change the window size, the slider will not update its position properly. The solution to this issue is to update the position of the slider using its ``place`` method every time the window size changes. """ global size size = ren.GetSize() def win_callback(obj, event): global size if size != obj.GetSize(): slider.place(ren) size = obj.GetSize() show_m.initialize() """ Finally, please uncomment the following 3 lines so that you can interact with the available 3D and 2D objects. """ # show_m.add_window_callback(win_callback) # show_m.render() # show_m.start() ren.zoom(1.5) ren.reset_clipping_range() window.record(ren, out_path='bundles_and_a_slice.png', size=(1200, 900), reset_camera=False) """ .. figure:: bundles_and_a_slice.png :align: center **A few bundles with interactive slicing**. """ del show_m dipy-0.10.1/doc/examples/viz_bundles.py000066400000000000000000000133671263041327500200340ustar00rootroot00000000000000""" ======================================== Visualize bundles and metrics on bundles ======================================== First, let's download some available datasets. Here we are using a dataset which provides metrics and bundles. """ import numpy as np from dipy.viz import window, actor from dipy.data import fetch_bundles_2_subjects, read_bundles_2_subjects from dipy.tracking.streamline import transform_streamlines fetch_bundles_2_subjects() dix = read_bundles_2_subjects(subj_id='subj_1', metrics=['fa'], bundles=['cg.left', 'cst.right']) """ Store fractional anisotropy. """ fa = dix['fa'] """ Store grid to world transformation matrix. """ affine = dix['affine'] """ Store the cingulum bundle. A bundle is a list of streamlines. """ bundle = dix['cg.left'] """ It happened that this bundle is in world coordinates and therefore we need to transform it into native image coordinates so that it is in the same coordinate space as the ``fa`` image. """ bundle_native = transform_streamlines(bundle, np.linalg.inv(affine)) """ Show every streamline with an orientation color =============================================== This is the default option when you are using ``line`` or ``streamtube``. """ renderer = window.Renderer() stream_actor = actor.line(bundle_native) renderer.set_camera(position=(-176.42, 118.52, 128.20), focal_point=(113.30, 128.31, 76.56), view_up=(0.18, 0.00, 0.98)) renderer.add(stream_actor) # Uncomment the line below to show to display the window # window.show(renderer, size=(600, 600), reset_camera=False) window.record(renderer, out_path='bundle1.png', size=(600, 600)) """ .. figure:: bundle1.png :align: center **One orientation color for every streamline**. You may wonder how we knew how to set the camera. This is very easy. You just need to run ``window.show`` once see how you want to see the object and then close the window and call the ``camera_info`` method which prints the position, focal point and view up vectors of the camera. """ renderer.camera_info() """ Show every point with a value from a volume with default colormap ================================================================= Here we will need to input the ``fa`` map in ``streamtube`` or ``line``. """ renderer.clear() stream_actor2 = actor.line(bundle_native, fa, linewidth=0.1) """ We can also show the scalar bar. """ bar = actor.scalar_bar() renderer.add(stream_actor2) renderer.add(bar) # window.show(renderer, size=(600, 600), reset_camera=False) window.record(renderer, out_path='bundle2.png', size=(600, 600)) """ .. figure:: bundle2.png :align: center **Every point with a color from FA**. Show every point with a value from a volume with your colormap ============================================================== Here we will need to input the ``fa`` map in ``streamtube`` or `` """ renderer.clear() hue = [0.0, 0.0] # red only saturation = [0.0, 1.0] # white to red lut_cmap = actor.colormap_lookup_table(hue_range=hue, saturation_range=saturation) stream_actor3 = actor.line(bundle_native, fa, linewidth=0.1, lookup_colormap=lut_cmap) bar2 = actor.scalar_bar(lut_cmap) renderer.add(stream_actor3) renderer.add(bar2) # window.show(renderer, size=(600, 600), reset_camera=False) window.record(renderer, out_path='bundle3.png', size=(600, 600)) """ .. figure:: bundle3.png :align: center **Every point with a color from FA using a non default colomap**. Show every bundle with a specific color ======================================== You can have a bundle with a specific color. Here orange. """ renderer.clear() stream_actor4 = actor.line(bundle_native, (1., 0.5, 0), linewidth=0.1) renderer.add(stream_actor4) # window.show(renderer, size=(600, 600), reset_camera=False) window.record(renderer, out_path='bundle4.png', size=(600, 600)) """ .. figure:: bundle4.png :align: center **Entire bundle with a specific color**. Show every streamline of a bundle with a different color ======================================================== Let's make a colormap where every streamline of the bundle is colored by its length. """ renderer.clear() from dipy.tracking.streamline import length lengths = length(bundle_native) hue = [0.5, 0.5] # red only saturation = [0.0, 1.0] # black to white lut_cmap = actor.colormap_lookup_table( scale_range=(lengths.min(), lengths.max()), hue_range=hue, saturation_range=saturation) stream_actor5 = actor.line(bundle_native, lengths, linewidth=0.1, lookup_colormap=lut_cmap) renderer.add(stream_actor5) bar3 = actor.scalar_bar(lut_cmap) renderer.add(bar3) # window.show(renderer, size=(600, 600), reset_camera=False) window.record(renderer, out_path='bundle5.png', size=(600, 600)) """ .. figure:: bundle5.png :align: center **Color every streamline by the length of the streamline ** Show every point of every streamline with a different color ============================================================ In this case in which we want to have a color per point and per streamline, we can create a list of the colors to correspond to the list of streamlines (bundles). Here in ``colors`` we will insert some random RGB colors. """ renderer.clear() colors = [np.random.rand(*streamline.shape) for streamline in bundle_native] stream_actor6 = actor.line(bundle_native, colors, linewidth=0.2) renderer.add(stream_actor6) # window.show(renderer, size=(600, 600), reset_camera=False) window.record(renderer, out_path='bundle6.png', size=(600, 600)) """ .. figure:: bundle6.png :align: center **Random colors per points per streamline**. In summary, we showed that there are many useful ways for visualizing maps on bundles. """ dipy-0.10.1/doc/examples/viz_slice.py000066400000000000000000000120171263041327500174660ustar00rootroot00000000000000 """ ===================== Simple volume slicing ===================== Here we present an example for visualizing slices from 3D images. """ import os import nibabel as nib from dipy.data import fetch_bundles_2_subjects from dipy.viz import window, actor """ Let's download and load a T1. """ fetch_bundles_2_subjects() fname_t1 = os.path.join(os.path.expanduser('~'), '.dipy', 'exp_bundles_and_maps', 'bundles_2_subjects', 'subj_1', 't1_warped.nii.gz') img = nib.load(fname_t1) data = img.get_data() affine = img.get_affine() """ Create a Renderer object which holds all the actors which we want to visualize. """ renderer = window.Renderer() renderer.background((1, 1, 1)) """ Render slices from T1 with a specific value range ================================================= The T1 has usually a higher range of values than what can be visualized in an image. We can set the range that we would like to see. """ mean, std = data[data > 0].mean(), data[data > 0].std() value_range = (mean - 0.5 * std, mean + 1.5 * std) """ The ``slice`` function will read data and resample the data using an affine transformation matrix. The default behavior of this function is to show the middle slice of the last dimension of the resampled data. """ slice_actor = actor.slicer(data, affine, value_range) """ The ``slice_actor`` contains an axial slice. """ renderer.add(slice_actor) """ The same actor can show any different slice from the given data using its ``display`` function. However, if we want to show multiple slices we need to copy the actor first. """ slice_actor2 = slice_actor.copy() """ Now we have a new ``slice_actor`` which displays the middle slice of saggital plane. """ slice_actor2.display(slice_actor2.shape[0]/2, None, None) renderer.add(slice_actor2) renderer.reset_camera() renderer.zoom(1.4) """ In order to interact with the data you will need to uncomment the line below. """ # window.show(renderer, size=(600, 600), reset_camera=False) """ Otherwise, you can save a screenshot using the following command. """ window.record(renderer, out_path='slices.png', size=(600, 600), reset_camera=False) """ .. figure:: slices.png :align: center **Simple slice viewer**. Render slices from FA with your colormap ======================================== It is also possible to set the colormap of your preference. Here we are loading an FA image and showing it in a non-standard way using an HSV colormap. """ fname_fa = os.path.join(os.path.expanduser('~'), '.dipy', 'exp_bundles_and_maps', 'bundles_2_subjects', 'subj_1', 'fa_1x1x1.nii.gz') img = nib.load(fname_fa) fa = img.get_data() """ Notice here how the scale range is (0, 255) and not (0, 1) which is the usual range of FA values. """ lut = actor.colormap_lookup_table(scale_range=(0, 255), hue_range=(0.4, 1.), saturation_range=(1, 1.), value_range=(0., 1.)) """ This is because the lookup table is applied in the slice after interpolating to (0, 255). """ fa_actor = actor.slicer(fa, affine, lookup_colormap=lut) renderer.clear() renderer.add(fa_actor) renderer.reset_camera() renderer.zoom(1.4) # window.show(renderer, size=(600, 600), reset_camera=False) window.record(renderer, out_path='slices_lut.png', size=(600, 600), reset_camera=False) """ .. figure:: slices_lut.png :align: center **Simple slice viewer with an HSV colormap**. Create a mosaic ================ By using the ``copy`` and ``display`` method of the ``slice_actor`` becomes easy and efficient to create a mosaic of all the slices. So, let's clear the renderer and change the projection from perspective to parallel. """ renderer.clear() renderer.projection('parallel') """ Now we need to create two nested for loops which will set the positions of the grid of the mosaic and add the new actors to the renderer. We are going to use 15 columns and 10 rows but you can adjust those with your datasets. """ cnt = 0 X, Y, Z = slice_actor.shape[:3] rows = 10 cols = 15 border = 10 for j in range(rows): for i in range(cols): slice_mosaic = slice_actor.copy() slice_mosaic.display(None, None, cnt) slice_mosaic.SetPosition((X + border) * i, 0.5 * cols * (Y + border) - (Y + border) * j, 0) renderer.add(slice_mosaic) cnt += 1 if cnt > Z: break if cnt > Z: break renderer.reset_camera() renderer.zoom(1.6) # window.show(renderer, size=(900, 600), reset_camera=False) """ If you uncomment the ``window.show`` line above, you will be able to move the mosaic up/down and left/right using the middle mouse button pressed. And zoom in/out using the scroll wheel. """ window.record(renderer, out_path='mosaic.png', size=(900, 600), reset_camera=False) """ .. figure:: mosaic.png :align: center **A mosaic of all the slices in the T1 volume**. """ dipy-0.10.1/doc/examples/viz_widgets.py000066400000000000000000000071351263041327500200420ustar00rootroot00000000000000""" ===================================== Create a minimalistic user interface ===================================== DIPY allows to create a minimalistic interface using widgets. In this example we will create: a) two parallel steamtubes, b) add some buttons which will change the opacity of these tubes and c) move the streamtubes using a slider. """ import numpy as np from dipy.viz import window, actor, widget from dipy.data import fetch_viz_icons, read_viz_icons """ First, we add a couple of streamtubes to the Renderer """ renderer = window.Renderer() lines = [np.array([[-1, 0, 0.], [1, 0, 0.]]), np.array([[-1, 1, 0.], [1, 1, 0.]])] colors = np.array([[1., 0., 0.], [0., .5, 0.]]) stream_actor = actor.streamtube(lines, colors, linewidth=0.3, lod=False) renderer.add(stream_actor) """ The ``ShowManager`` allows to break the visualization process in steps so that the widgets can be added and updated properly. """ show_manager = window.ShowManager(renderer, size=(800, 800), order_transparent=True) """ Next we add the widgets and their callbacks. """ def button_plus_callback(obj, event): print('+ pressed') opacity = stream_actor.GetProperty().GetOpacity() if opacity < 1: stream_actor.GetProperty().SetOpacity(opacity + 0.1) def button_minus_callback(obj, event): print('- pressed') opacity = stream_actor.GetProperty().GetOpacity() if opacity > 0: stream_actor.GetProperty().SetOpacity(opacity - 0.1) """ We need to download some icons to create a face for our buttons. We provide some simple icons in this tutorial. But you of course you can use any PNG icon you may want. """ fetch_viz_icons() button_png_plus = read_viz_icons(fname='plus.png') button_plus = widget.button(show_manager.iren, show_manager.ren, button_plus_callback, button_png_plus, (.98, .9), (120, 50)) button_png_minus = read_viz_icons(fname='minus.png') button_minus = widget.button(show_manager.iren, show_manager.ren, button_minus_callback, button_png_minus, (.98, .9), (50, 50)) def move_lines(obj, event): stream_actor.SetPosition((obj.get_value(), 0, 0)) """ Then we create the slider. """ slider = widget.slider(show_manager.iren, show_manager.ren, callback=move_lines, min_value=-1, max_value=1, value=0., label="X", right_normalized_pos=(.98, 0.7), size=(120, 0), label_format="%0.2lf", color=(0.4, 0.4, 0.4), selected_color=(0.2, 0.2, 0.2)) """ And we add a simple clickable text overlay at the bottom left corner. """ def text_clicked(obj, event): print "Awesome!" text = widget.text(show_manager.iren, show_manager.ren, message="Powered by DIPY", callback=text_clicked, color=(1., .5, .0), left_down_pos=(10, 5), right_top_pos=(200, 35)) """ Position the camera. """ renderer.zoom(0.7) renderer.roll(10.) renderer.reset_clipping_range() """ Uncomment the following lines to start the interaction. """ # show_manager.initialize() # show_manager.render() # show_manager.start() window.record(renderer, out_path='mini_ui.png', size=(800, 800), reset_camera=False) del show_manager """ .. figure:: mini_ui.png :align: center **A minimalistic user interface**. """ dipy-0.10.1/doc/examples_built/000077500000000000000000000000001263041327500163235ustar00rootroot00000000000000dipy-0.10.1/doc/examples_built/.gitignore000066400000000000000000000001451263041327500203130ustar00rootroot00000000000000# Ignore everything in this directory apart from gitignore and the README file * !.gitignore !README dipy-0.10.1/doc/examples_built/README000066400000000000000000000012301263041327500171770ustar00rootroot00000000000000Examples built README --------------------- This directory is a build-time container for the examples. The /tools/make_examples.py script takes the examples in /doc/examples, compiles the examples to rst files, builds all the graphics, and puts the result into this directory, along with copies of the .py files. The contents of this directory then gets included because the /doc/example_index.rst file points to this directory and the built .rst files. Please don't put anything in this directory other than the .gitignore (ignore everything) and this README. If you need something in here, please copy it from the make_examples.py script. dipy-0.10.1/doc/examples_index.rst000066400000000000000000000071751263041327500170570ustar00rootroot00000000000000.. _examples: ======== Examples ======== .. toctree:: :maxdepth: 1 note_about_examples .. contents:: :depth: 2 ----------- Quick Start ----------- - :ref:`example_quick_start` - :ref:`example_tracking_quick_start` ------------- Preprocessing ------------- Gradients & Spheres ~~~~~~~~~~~~~~~~~~~ - :ref:`example_gradients_spheres` Brain Extraction ~~~~~~~~~~~~~~~~ - :ref:`example_brain_extraction_dwi` Basic SNR estimation ~~~~~~~~~~~~~~~~~~~~ - :ref:`example_snr_in_cc` Robust noise estimation with PIESNO ~~~~~~ - :ref:`example_piesno` Denoising ~~~~~~~~~ - :ref:`example_denoise_nlmeans` Reslice ~~~~~~~ - :ref:`example_reslice_datasets` -------------- Reconstruction -------------- Constrained Spherical Deconvolution ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_reconst_csd` Simple Harmonic Oscillator based Reconstruction and Estimation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_reconst_shore` - :ref:`example_reconst_shore_metrics` Diffusion Tensor Imaging ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_reconst_dti` - :ref:`example_restore_dti` Q-Ball Constant Solid Angle ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_reconst_csa` Diffusion Spectrum Imaging ~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_reconst_dsi` - :ref:`example_reconst_dsi_metrics` Generalized Q-Sampling Imaging ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_reconst_gqi` DSI with Deconvolution ~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_reconst_dsid` Sparse Fascicle Model ~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_sfm_reconst` Statistical evaluation ~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_kfold_xval` ------------------------------------ Fiber tracking (NEW - Experimental) ------------------------------------ - :ref:`example_introduction_to_basic_tracking` - :ref:`example_probabilistic_fiber_tracking` - :ref:`example_deterministic_fiber_tracking` - :ref:`example_tracking_tissue_classifier` - :ref:`example_sfm_tracking` --------------- Fiber tracking --------------- - :ref:`example_tracking_eudx_tensor` - :ref:`example_tracking_eudx_odf` ------------------------------------- Fiber tracking validation ------------------------------------- - :ref:`example_linear_fascicle_evaluation` ------------------------------------ Streamline analysis and connectivity ------------------------------------ - :ref:`example_streamline_tools` - :ref:`example_streamline_length` ------------------ Registration ------------------ Image-based Registration ~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_affine_registration_3d` - :ref:`example_syn_registration_2d` - :ref:`example_syn_registration_3d` Streamline-based Registration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_bundle_registration` ------------ Segmentation ------------ Streamline Clustering ~~~~~~~~~~~~~~~~~~~~~ - :ref:`example_segment_quickbundles` - :ref:`example_segment_extending_clustering_framework` - :ref:`example_segment_clustering_features` - :ref:`example_segment_clustering_metrics` Brain Segmentation ~~~~~~~~~~~~~~~~~~ - :ref:`example_brain_extraction_dwi` ----------- Simulations ----------- - :ref:`example_simulate_multi_tensor` - :ref:`example_reconst_dsid` --------------- Multiprocessing --------------- - :ref:`example_reconst_csd_parallel` - :ref:`example_reconst_csa_parallel` ------------ File Formats ------------ - :ref:`example_streamline_formats` ------------- Visualization ------------- - :ref:`example_viz_advanced` - :ref:`example_viz_slice` - :ref:`example_viz_bundles` - :ref:`example_viz_widgets` .. In order to build the examples, you'll need (on Debian) sudo apt-get install python-tables python-matplotib python-vtk dipy-0.10.1/doc/faq.rst000066400000000000000000000147101263041327500146120ustar00rootroot00000000000000.. _faq: ========================== Frequently Asked Questions ========================== ----------- Theoretical ----------- 1. **What is a b-value?** The b-value $b$ or *diffusion weighting* is a function of the strength, duration and temporal spacing and timing parameters of the specific paradigm. This function is derived from the Bloch-Torrey equations. In the case of the classical Stejskal-Tanner pulsed gradient spin-echo (PGSE) sequence, at the time of readout $b=\gamma^{2}G^{2}\delta^{2}\left(\Delta-\frac{\delta}{3}\right)$ where $\gamma$ is the gyromagnetic radio, $\delta$ denotes the pulse width, $G$ is the gradient amplitude and $\Delta$ the centre-to-centre spacing. $\gamma$ is a constant, but we can change the other three parameters and in that way control the b-value. 2. **What is q-space?** Q-space is the space of one or more 3D spin displacement wave vectors $\mathbf{q}$ as shown in equation $\ref{eq:fourier}$. The vector $\mathbf{q}$ parametrises the space of diffusion gradients. It is related to the applied magnetic gradient $\mathbf{g}$ by the formula $\mathbf{q}=(2\pi)^{-1}\gamma\delta\mathbf{g}$. Every single vector $\mathbf{q}$ has the same orientation as the direction of diffusion gradient $\mathbf{g}$ and length proportional to the strength $g$ of the gradient field. Every single point in q-space corresponds to a possible 3D volume of the MR signal for a specific gradient direction and strength. Therefore if, for example, we have programmed the scanner to apply 60 gradient directions, then our data should have 60 diffusion volumes, with each volume obtained for a specific gradient. A Diffusion Weighted Image (DWI) is the volume acquired from only one direction gradient. 3. **What does DWI stand for?** Diffusion Weighted Imaging (DWI) is MRI imaging designed to be sensitive to diffusion. A diffusion weighted image is a volume of voxel data gathered by applying only one gradient direction using a diffusion sequence. We expect that the signal in any voxel should be low if there is greater mobility of water molecules along the specified gradient direction and it should be high if there is less movement in that direction. Yes, it is counterintuitive but correct! However, greater mobility gives greater opportunity for the proton spins to be dephased, producing a smaller RF signal. 4. **Why dMRI and not DTI?** Diffusion MRI (dMRI or dwMRI) are the preferred terms if you want to speak about diffusion weighted MRI in general. DTI (diffusion tensor imaging) is just one of the many ways you can reconstruct the voxel from your measured signal. There are plenty of others, for example DSI, GQI, QBI, etc. 5. **What is the difference between Image coordinates and World coordinates?** Image coordinates have positive integer values and represent the centres $(i, j, k)$ of the voxels. There is an affine transform (stored in the nifti file) that takes the image coordinates and transforms them to millimeter (mm) in real world space. World coordinates have floating point precision and your dataset has 3 real dimensions e.g. $(x, y, z)$. 6. **We generated dMRI datasets with nonisotropic voxel sizes. What do we do?** You need to resample your raw data to an isotropic size. Have a look at the module ``dipy.align.aniso2iso``. (We think it is a mistake to acquire nonisotropic data because the directional resolution of the data will depend on the orientation of the gradient with respect to the voxels, being lower when aligned with a longer voxel dimension.) 7. **Why are non-isotropic voxel sizes a bad idea in diffusion?** If, for example, you have $2 \times 2 \times 4\ \textrm{mm}^3$ voxels, the last dimension will be averaged over the double distance and less detail will be captured compared to the other two dimensions. Furthermore, with very anisotropic voxels the uncertainty on orientation estimates will depend on the position of the subject in the scanner. --------- Practical --------- 1. **Why Python and not MATLAB or some other language?** Python is free, batteries included, very well-designed, painless to read and easy to use. There is nothing else like it. Give it a go. Once with Python, always with Python. 2. **Isn't Python slow?** True, sometimes Python can be slow, if you are using multiple nested ``for`` loops, for example. In that case, we use Cython, which takes execution up to C speed. 3. **What numerical libraries do you use in Python?** The best ever designed numerical library - NumPy. 2. **Which Python console do you recommend?** ``ipython`` 3. **What do you use for visualization?** For 3D visualization we use ``fvtk`` which depends in turn on ``python-vtk``:: from dipy.viz import fvtk For 2D visualization we use matplotlib_. 4. **What about interactive visualization?** There is already interaction in the ``fvtk`` module, but we have started a new project only for visualization which we plan to integrate in ``dipy`` in the near future. For more information, have a look at http://fos.me 5. **Which file formats do you support?** Nifti (.nii), Dicom (Siemens(read-only)), Trackvis (.trk), Dipy (.dpy), Numpy (.npy, ,npz), text and any other formats supported by nibabel and pydicom. You can also read/save in Matlab version v4 (Level 1.0), v6 and v7 to 7.2, using `scipy.io.loadmat`. For higher versions >= 7.3, you can use pytables_ or any other python-to-hdf5 library e.g. h5py. For object serialization you can use `dipy.io.pickles` functions `load_pickle`, `save_pickle`. 6. **What is dpy**? ``dpy`` is an ``hdf5`` file format which we use in dipy to store tractography and other information. This allows us to store huge tractographies and load different parts of the datasets directly from the disk as if it were in memory. 7. **Which python editor should I use?** Any text editor would do the job but we prefer the following: PyCharm, Sublime, Aptana, Emacs, Vim and Eclipse (with PyDev). 8. **I have problems reading my dicom files using nibabel, what should I do?** Use Chris Rorden's dcm2nii to transform them to nifti files. http://www.cabiatl.com/mricro/mricron/dcm2nii.html Or you can make your own reader using pydicom. http://code.google.com/p/pydicom/ and then use nibabel to store the data as niftis. 9. **Where can I find diffusion data?** Have a look at Beijing Enhanced http://fcon_1000.projects.nitrc.org/indi/IndiRetro.html .. include:: links_names.inc dipy-0.10.1/doc/gimbal_lock.rst000066400000000000000000000153711263041327500163120ustar00rootroot00000000000000.. _gimbal-lock: ============= Gimbal lock ============= See also: http://en.wikipedia.org/wiki/Gimbal_lock Euler angles have a major deficiency, and that is, that it is possible, in some rotation sequences, to reach a situation where two of the three Euler angles cause rotation around the same axis of the object. In the case below, rotation around the $x$ axis becomes indistinguishable in its effect from rotation around the $z$ axis, so the $z$ and $x$ axis angles collapse into one transformation, and the rotation reduces from three degrees of freedom to two. Imagine that we are using the Euler angle convention of starting with a rotation around the $x$ axis, followed by the $y$ axis, followed by the $z$ axis. Here we see a Spitfire aircraft, flying across the screen. The $x$ axis is left to right (tail to nose), the $y$ axis is from the left wing tip to the right wing tip (going away from the screen), and the $z$ axis is from bottom to top: .. image:: images/spitfire_0.png Imagine we wanted to do a slight roll with the left wing tilting down (rotation about $x$) like this: .. image:: images/spitfire_x.png followed by a violent pitch so we are pointing straight up (rotation around $y$ axis): .. image:: images/spitfire_y.png Now we'd like to do a turn of the nose towards the viewer (and the tail away from the viewer): .. image:: images/spitfire_hoped.png But, wait, let's go back over that again. Look at the result of the rotation around the $y$ axis. Notice that the $x$ axis, as was, is now aligned with the $z$ axis, as it is now. Rotating around the $z$ axis will have exactly the same effect as adding an extra rotation around the $x$ axis at the beginning. That means that, when there is a $y$ axis rotation that rotates the $x$ axis onto the $z$ axis (a rotation of $\pm\pi/2$ around the $y$ axis) - the $x$ and $y$ axes are "locked" together. Mathematics of gimbal lock ========================== We see gimbal lock for this type of Euler axis convention, when $\cos(\beta) = 0$, where $\beta$ is the angle of rotation around the $y$ axis. By "this type of convention" we mean using rotation around all 3 of the $x$, $y$ and $z$ axes, rather than using the same axis twice - e.g. the physics convention of $z$ followed by $x$ followed by $z$ axis rotation (the physics convention has different properties to its gimbal lock). We can show how gimbal lock works by creating a rotation matrix for the three component rotations. Recall that, for a rotation of $\alpha$ radians around $x$, followed by a rotation $\beta$ around $y$, followed by rotation $\gamma$ around $z$, the rotation matrix $R$ is: .. math:: R = \left(\begin{smallmatrix}\operatorname{cos}\left(\beta\right) \operatorname{cos}\left(\gamma\right) & - \operatorname{cos}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) + \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\beta\right) & \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) + \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\beta\right)\\\operatorname{cos}\left(\beta\right) \operatorname{sin}\left(\gamma\right) & \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\gamma\right) + \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\beta\right) \operatorname{sin}\left(\gamma\right) &- \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\alpha\right) + \operatorname{cos}\left(\alpha\right) \operatorname{sin}\left(\beta\right) \operatorname{sin}\left(\gamma\right)\\- \operatorname{sin}\left(\beta\right) & \operatorname{cos}\left(\beta\right) \operatorname{sin}\left(\alpha\right) & \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\beta\right)\end{smallmatrix}\right) When $\cos(\beta) = 0$, $\sin(\beta) = \pm1$ and $R$ simplifies to: .. math:: R = \left(\begin{smallmatrix}0 & - \operatorname{cos}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) + \pm{1} \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\alpha\right) & \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) + \pm{1} \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\gamma\right)\\0 & \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\gamma\right) + \pm{1} \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) & - \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\alpha\right) + \pm{1} \operatorname{cos}\left(\alpha\right) \operatorname{sin}\left(\gamma\right)\\- \pm{1} & 0 & 0\end{smallmatrix}\right) When $\sin(\beta) = 1$: .. math:: R = \left(\begin{smallmatrix}0 & \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\alpha\right) - \operatorname{cos}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) & \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\gamma\right) + \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\gamma\right)\\0 & \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\gamma\right) + \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) & \operatorname{cos}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) - \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\alpha\right)\\-1 & 0 & 0\end{smallmatrix}\right) From the `angle sum and difference identities `_ (see also `geometric proof `_, `Mathworld treatment `_) we remind ourselves that, for any two angles $\alpha$ and $\beta$: .. math:: \sin(\alpha \pm \beta) = \sin \alpha \cos \beta \pm \cos \alpha \sin \beta \, \cos(\alpha \pm \beta) = \cos \alpha \cos \beta \mp \sin \alpha \sin \beta We can rewrite $R$ as: .. math:: R = \left(\begin{smallmatrix}0 & V_{1} & V_{2}\\0 & V_{2} & - V_{1}\\-1 & 0 & 0\end{smallmatrix}\right) where: .. math:: V_1 = \operatorname{cos}\left(\gamma\right) \operatorname{sin}\left(\alpha\right) - \operatorname{cos}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) = \sin(\alpha - \gamma) \, V_2 = \operatorname{cos}\left(\alpha\right) \operatorname{cos}\left(\gamma\right) + \operatorname{sin}\left(\alpha\right) \operatorname{sin}\left(\gamma\right) = \cos(\alpha - \gamma) We immediately see that $\alpha$ and $\gamma$ are going to lead the same transformation - the mathematical expression of the observation on the spitfire above, that rotation around the $x$ axis is equivalent to rotation about the $z$ axis. It's easy to do the same set of reductions, with the same conclusion, for the case where $\sin(\beta) = -1$ - see http://www.gregslabaugh.name/publications/euler.pdf. dipy-0.10.1/doc/glossary.rst000066400000000000000000000071021263041327500157030ustar00rootroot00000000000000========== Glossary ========== .. glossary:: Affine matrix A matrix implementing an :term:`affine transformation` in :term:`homogenous coordinates`. For a 3 dimensional transform, the matrix is shape 4 by 4. Affine transformation See `wikipedia affine`_ definition. An affine transformation is a :term:`linear transformation` followed by a translation. Axis angle A representation of rotation. See: `wikipedia axis angle`_ . From Euler's rotation theorem we know that any rotation or sequence of rotations can be represented by a single rotation about an axis. The axis $\boldsymbol{\hat{u}}$ is a :term:`unit vector`. The angle is $\theta$. The :term:`rotation vector` is a more compact representation of $\theta$ and $\boldsymbol{\hat{u}}$. Euclidean norm Also called Euclidean length, or L2 norm. The Euclidean norm $\|\mathbf{x}\|$ of a vector $\mathbf{x}$ is given by: .. math:: \|\mathbf{x}\| := \sqrt{x_1^2 + \cdots + x_n^2} Pure Pythagoras. Euler angles See: `wikipedia Euler angles`_ and `Mathworld Euler angles`_. Gimbal lock See :ref:`gimbal-lock` Homogenous coordinates See `wikipedia homogenous coordinates`_ Linear transformation A linear transformation is one that preserves lines - that is, if any three points are on a line before transformation, they are also on a line after transformation. See `wikipedia linear transform`_. Rotation, scaling and shear are linear transformations. Quaternion See: `wikipedia quaternion`_. An extension of the complex numbers that can represent a rotation. Quaternions have 4 values, $w, x, y, z$. $w$ is the *real* part of the quaternion and the vector $x, y, z$ is the *vector* part of the quaternion. Quaternions are less intuitive to visualize than :term:`Euler angles` but do not suffer from :term:`gimbal lock` and are often used for rapid interpolation of rotations. Reflection A transformation that can be thought of as transforming an object to its mirror image. The mirror in the transformation is a plane. A plan can be defined with a point and a vector normal to the plane. See `wikipedia reflection`_. Rotation matrix See `wikipedia rotation matrix`_. A rotation matrix is a matrix implementing a rotation. Rotation matrices are square and orthogonal. That means, that the rotation matrix $R$ has columns and rows that are :term:`unit vector`, and where $R^T R = I$ ($R^T$ is the transpose and $I$ is the identity matrix). Therefore $R^T = R^{-1}$ ($R^{-1}$ is the inverse). Rotation matrices also have a determinant of $1$. Rotation vector A representation of an :term:`axis angle` rotation. The angle $\theta$ and unit vector axis $\boldsymbol{\hat{u}}$ are stored in a *rotation vector* $\boldsymbol{u}$, such that: .. math:: \theta = \|\boldsymbol{u}\| \, \boldsymbol{\hat{u}} = \frac{\boldsymbol{u}}{\|\boldsymbol{u}\|} where $\|\boldsymbol{u}\|$ is the :term:`Euclidean norm` of $\boldsymbol{u}$ Shear matrix Square matrix that results in shearing transforms - see `wikipedia shear matrix`_. Unit vector A vector $\boldsymbol{\hat{u}}$ with a :term:`Euclidean norm` of 1. Normalized vector is a synonym. The "hat" over the $\boldsymbol{\hat{u}}$ is a convention to express the fact that it is a unit vector. .. include:: links_names.inc dipy-0.10.1/doc/index.rst000066400000000000000000000066601263041327500151570ustar00rootroot00000000000000.. _home: ########################### Diffusion Imaging In Python ########################### Dipy_ is a **free** and **open source** software project for computational neuroanatomy, focusing mainly on **diffusion** *magnetic resonance imaging* (dMRI) analysis. It implements a broad range of algorithms for denoising, registration, reconstruction, tracking, clustering, visualization, and statistical analysis of MRI data. ********** Highlights ********** **Dipy 0.10** is now available. New features in this release include: - Compatibility with new versions of scipy (0.16) and numpy (1.10). - New cleaner visualization API, including compatibility with VTK 6, and functions to create your own interactive visualizations. - Diffusion Kurtosis Imaging(DKI): Google Summer of Code work by Rafael Henriques. - Mean Apparent Propagator (MAP) MRI - tissue microstructure estimation. - Anisotropic Power Maps from spherical harmonic coefficients. - Affine registration. See :ref:`older highlights `. ************* Announcements ************* - :ref:`Dipy 0.10 ` released November ??, 2015. - :ref:`Dipy 0.9.2 ` released, March 18th, 2015. - :ref:`Dipy 0.8.0 ` released, 6 January, 2015. - Dipy_ was an official exhibitor in `HBM 2015 `_. - Dipy was featured in `The Scientist Magazine `_, Nov, 2014. - `Dipy paper`_ accepted in Frontiers of Neuroinformatics, January 22nd, 2014. See some of our :ref:`past announcements ` *************** Getting Started *************** Here is a simple example showing how to calculate `color FA`. We use a single Tensor model to reconstruct the datasets which are saved in a Nifti file along with the b-values and b-vectors which are saved as text files. In this example we use only a few voxels with 101 gradient directions:: from dipy.data import get_data fimg, fbval, fbvec = get_data('small_101D') import nibabel as nib img = nib.load(fimg) data = img.get_data() from dipy.io import read_bvals_bvecs bvals, bvecs = read_bvals_bvecs(fbval, fbvec) from dipy.core.gradients import gradient_table gtab = gradient_table(bvals, bvecs) from dipy.reconst.dti import TensorModel ten = TensorModel(gtab) tenfit = ten.fit(data) from dipy.reconst.dti import fractional_anisotropy fa = fractional_anisotropy(tenfit.evals) from dipy.reconst.dti import color_fa cfa = color_fa(fa, tenfit.evecs) As an exercise try to calculate the `color FA` with your datasets. Here is what a slice should look like. .. image:: _static/colorfa.png :align: center ********** Next Steps ********** You can learn more about how you to use Dipy_ with your datasets by reading the examples in our :ref:`documentation`. .. We need the following toctree directive to include the documentation .. in the document hierarchy - see http://sphinx.pocoo.org/concepts.html .. toctree:: :hidden: documentation stateoftheart ******* Support ******* We acknowledge support from the following organizations: - The Gordon and Betty Moore Foundation and the Alfred P. Sloan Foundation, through the University of Washington eScience Institute Data Science Environment. - Google supported the work of Rafael Neto Henriques and Julio Villalon through the Google Summer of Code Program, Summer 2015. .. include:: links_names.inc dipy-0.10.1/doc/installation.rst000066400000000000000000000246541263041327500165540ustar00rootroot00000000000000.. _installation: ############ Installation ############ dipy_ is in active development. You can install it from our latest release, but you may find that the release has gotten well behind the current development - at least - we hope so - if we're developing fast enough! If you want install the latest and greatest from the bleeding edge of the development, skip to :ref:`from-source`. If you just want to install a released version, read on for your platform. ******************** Installing a release ******************** If you are on Debian or Ubuntu Linux we recommend you try :ref:`install-packages` first. Otherwise please try :ref:`install-pip`. .. _install-packages: Using packages: =============== Windows ------- #. First, install the python library dependencies. One easy way to do that is to use the Anaconda_ distribution (see below for :ref:`alternatives`). #. Even with Anaconda installed, you will still need to install the nibabel_ library, which supports reading and writing of neuroimaging data formats. Open a terminal and type :: pip install nibabel #. Finally, we are ready to install 'dipy` itself. Same as with `nibabel` above, we will type at the terminal shell command line :: pip install dipy When the installation has finished we can check if it is successful in the following way. From a Python console script try :: >>> import dipy This should work with no error. #. Some of the visualization methods require the VTK_ library and this can be installed using Anaconda :: conda install vtk OSX --- #. To use dipy_, you need to have some :ref:`dependencies` installed. First of all, make sure that you have installed the Apple Xcode_ developer tools. You'll need those to install all the following dependencies. #. Next, install the python library dependencies. One easy way to do that is to use the Anaconda_ distribution (see below for :ref:`alternatives`). #. Even with Anaconda installed, you will still need to install the nibabel_ library, which supports reading and writing of neuroimaging data formats. Open a terminal and type :: pip install nibabel #. Finally, we are ready to install 'dipy` itself. Same as with `nibabel` above, we will type at the terminal shell command line :: pip install dipy When the installation has finished we can check if it is successful in the following way. From a Python console script try :: >>> import dipy This should work with no error. #. Some of the visualization methods require the VTK_ library and this can be installed using Anaconda :: conda install vtk Linux ----- For Debian, Ubuntu and Mint set up the NeuroDebian_ repositories - see `NeuroDebian how to`_. Then:: sudo apt-get install python-dipy We hope to get packages for the other Linux distributions, but for now, please try :ref:`install-pip` instead. .. _install-pip: Using pip: ========== This method should work under Linux, Mac OS X and Windows. Please install numpy_ and scipy_ using their respective binary installers if you haven't already. For Windows and Mac OSX you can use Anaconda_ to get numpy, scipy, cython and lots of other useful python module. Anaconda_ is a big package but will install many tools and libraries that are useful for scientific processing. When you have numpy, scipy and cython installed then try :: pip install nibabel pip install dipy Then from any python console or script try :: >>> import dipy ******* Support ******* Contact us: =========== Do these installation instructions work for you? For any problems/suggestions please let us know by sending us an e-mail to the `nipy mailing list`_ with the subject line starting with ``[dipy]``. Common problems: ================ Multiple installations ---------------------- Make sure that you have uninstalled all previous versions of Dipy before installing a new one. A simple and general way to uninstall Dipy is by removing the installation directory. You can find where Dipy is installed by using:: import dipy dipy.__file__ and then remove the Dipy directory that contains that file. .. _alternatives: Alternatives to Anaconda ------------------------- If you have problems installing Anaconda_ we recommend using Canopy_ or pythonxy_. Memory issues ------------- Dipy can process large diffusion datasets. For this reason we recommend using a 64bit operating system which can allocate larger memory chunks than 32bit operating systems. If you don't have a 64bit computer that is okay Dipy works with 32bit too. .. _python-versions: Note on python versions ----------------------- Most of the functionality in Dipy supports versions of Python from 2.6 to 3.5. However, some visualization functionality depends on VTK_, which currently does not work with Python 3 versions. Therefore, if you want to use the visualization functions in Dipy, please use it with Python 2. .. _from-source: ********************** Installing from source ********************** Getting the source ================== More likely you will want to get the source repository to be able to follow the latest changes. In that case, you can use:: git clone https://github.com/nipy/dipy.git For more information about this see :ref:`following-latest`. After you've cloned the repository, you will have a new directory, containing the dipy ``setup.py`` file, among others. We'll call this directory - that contains the ``setup.py`` file - the *dipy source root directory*. Sometimes we'll also call it the ```` directory. Building and installing ======================= .. _install-source-nix: Install from source for Unix (e.g Linux, OSX) --------------------------------------------- Change directory into the *dipy source root directory* . To install for the system:: python setup.py install To build dipy in the source tree (locally) so you can run the code in the source tree (recommended for following the latest source) run:: python setup.py build_ext --inplace add the *dipy source root directory* into your ``PYTHONPATH`` environment variable. Search google for ``PYTHONPATH`` for details or see `python module path`_ for an introduction. When adding dipy_ to the ``PYTHONPATH``, we usually add the ``PYTHONPATH`` at the end of ``~/.bashrc`` or (OSX) ``~/.bash_profile`` so we don't need to retype it every time. This should look something like:: export PYTHONPATH=/home/user_dir/Devel/dipy:$PYTHONPATH After changing the ``~/.bashrc`` or (OSX) ``~/.bash_profile`` try:: source ~/.bashrc or:: source ~/.bash_profile so that you can have immediate access to dipy_ without needing to restart your terminal. Ubuntu/Debian ------------- :: sudo apt-get install python-dev python-setuptools sudo apt-get install python-numpy python-scipy sudo apt-get install cython then:: sudo pip install nibabel (we need the latest version of this one - hence ``pip`` rather than ``apt-get``). You might want the optional packages too (highly recommended):: sudo apt-get install ipython python-tables python-vtk python-matplotlib Now follow :ref:`install-source-nix`. Fedora / Mandriva maybe Redhat ------------------------------ Same as above but use yum rather than apt-get when necessary. Now follow :ref:`install-source-nix`. Windows ------- Anaconda_ is probably the easiest way to install the dependencies that you need. Start a command shell like ``cmd`` or Powershell_ and change directory into the *dipy source root directory*. To install into your system:: python setup.py install --compiler=mingw32 To install inplace - so that dipy is running out of the source code directory:: python setup.py develop (this is the mode we recommend for following the latest source code). If you get an error with ``python setup.py develop`` make sure you have installed `setuptools`_. If you get an error saying "unable to find vcvarsall.bat" then you need to create a file called "pydistutils.cfg" in notepad and give it the contents :: [build] compiler=mingw32 Save this into your system python ``distutils`` directory as ``distutils.cfg``. This will be something like ``C:\Python26\Lib\distutils\distutils.cfg``. OSX --- Make sure you have Xcode_ and Anaconda_ installed. From here follow the :ref:`install-source-nix` instructions. OpenMP with OSX --------------- OpenMP_ is a standard library for efficient multithreaded applications. This is used in Dipy for speeding up many different parts of the library (e.g., denoising and bundle registration). If you do not have an OpenMP-enabled compiler, you can still compile Dipy from source using the above instructions, but it might not take advantage of the multithreaded parts of the code. To be able to compile Dipy from source with OpenMP on Mac OSX, you will have to do a few more things. First of all, you will need to install the Homebrew_ package manager. Next you will need to install and configure the compiler. You have two options: using the GCC compiler or the CLANG compiler. This depends on your python installation: Under Anaconda ~~~~~~~~~~~~~~~~ If you are using Anaconda, you will need to use GCC. Run the following:: brew reinstall gcc --without-multilib This should take about 45 minutes to complete. Then add to your bash configuration (usually in ``~/.bash_profile``), the following:: export PATH="/usr/local/Cellar/gcc/5.2.0/bin/gcc-5:$PATH Under Homebrew Python or python.org Python ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are already using the Homebrew Python, or the standard python.org Python, you will need to use the CLANG compiler with OMP. Run:: brew install clang-omp And then edit the ``setup.py`` file to include the following line (e.g., on line 14, at the top of the file, but after the initial imports):: os.environ['CC'] = '/usr/local/bin/clang-omp' Building and installing ~~~~~~~~~~~~~~~~~~~~~~~ Whether you are using Anaconda or Hombrew/python.org Python, you will need to then run ``python setup.py install``. When you do that, it should now compile the code with this OpenMP-enabled compiler, and things should go faster! Testing ======== If you want to run the tests:: sudo pip install nose Then (in python or ipython_):: >>> import dipy >>> dipy.test() You can also run the examples in ``/doc``. Documentation (Unix only) ========================= To build the documentation in HTML in your computer you will need to do:: sudo pip install sphinx Then change directory to ```` and:: cd doc make clean make html .. include:: links_names.inc dipy-0.10.1/doc/introduction.rst000066400000000000000000000014131263041327500165600ustar00rootroot00000000000000.. _introduction: =============== What is dipy? =============== * **a python package** for analyzing ``diffusion MRI data`` * a free and open project to collaborate and **share** your code and expertise. Want to know more? Read our :ref:`documentation`, :ref:`installation` guidelines and try the :ref:`examples`. Didn't find what you are looking for? Then try :ref:`faq` and then if this doesn't help send an e-mail to our e-mail list neuroimaging@python.org with subject starting with ``[Dipy]``. .. figure:: _static/pretty_tracks.png :align: center **This is a depiction of tractography created with dipy** If you want to learn more how you can create these with your datasets read the examples in our :ref:`documentation` . .. include:: links_names.inc dipy-0.10.1/doc/links_names.inc000066400000000000000000000176351263041327500163200ustar00rootroot00000000000000.. This (-*- rst -*-) format file contains commonly used link targets and name substitutions. It may be included in many files, therefore it should only contain link targets and name substitutions. Try grepping for "^\.\. _" to find plausible candidates for this list. .. NOTE: reST targets are __not_case_sensitive__, so only one target definition is needed for nipy, NIPY, Nipy, etc... .. _nipy: http://nipy.org .. _`Brain Imaging Center`: http://bic.berkeley.edu/ .. _dipy: http://dipy.org .. _`dipy github`: http://github.com/nipy/dipy .. _dipy pypi: http://pypi.python.org/pypi/dipy .. _nipy issues: http://github.com/nipy/nipy/issues .. _dipy issues: http://github.com/nipy/dipy/issues .. _dipy paper: http://www.frontiersin.org/Neuroinformatics/10.3389/fninf.2014.00008/abstract .. _journal paper: http://www.frontiersin.org/Neuroinformatics/10.3389/fninf.2014.00008/abstract .. _nibabel: http://nipy.org/nibabel .. _nibabel pypi: http://pypi.python.org/pypi/nibabel .. _nipy development guidelines: http://nipy.org/devel .. _buildbots: http://nipy.bic.berkeley.edu/builders .. _`dipy gitter`: https://gitter.im/nipy/dipy .. _neurostars: https://neurostars.org/ .. Packaging .. _neurodebian: http://neuro.debian.net .. _neurodebian how to: http://neuro.debian.net/#how-to-use-this-repository .. _pip: http://www.pip-installer.org/en/latest/ .. _easy_install: https://pypi.python.org/pypi/setuptools .. _homebrew: http://brew.sh/ .. Documentation tools .. _graphviz: http://www.graphviz.org/ .. _Sphinx: http://sphinx.pocoo.org/ .. _`Sphinx reST`: http://sphinx.pocoo.org/rest.html .. _reST: http://docutils.sourceforge.net/rst.html .. _docutils: http://docutils.sourceforge.net .. Licenses .. _GPL: http://www.gnu.org/licenses/gpl.html .. _BSD: http://www.opensource.org/licenses/bsd-license.php .. _LGPL: http://www.gnu.org/copyleft/lesser.html .. Working process .. _pynifti: http://niftilib.sourceforge.net/pynifti/ .. _nifticlibs: http://nifti.nimh.nih.gov .. _nifti: http://nifti.nimh.nih.gov .. _`nipy launchpad`: https://launchpad.net/nipy .. _launchpad: https://launchpad.net/ .. _`nipy trunk`: https://code.launchpad.net/~nipy-developers/nipy/trunk .. _`nipy mailing list`: https://mail.python.org/mailman/listinfo/neuroimaging .. _`nipy bugs`: https://bugs.launchpad.net/nipy .. _pep8: http://www.python.org/dev/peps/pep-0008/ .. _`numpy coding style`: http://scipy.org/scipy/numpy/wiki/CodingStyleGuidelines .. _python module path: http://docs.python.org/tutorial/modules.html#the-module-search-path .. Code support stuff .. _pychecker: http://pychecker.sourceforge.net/ .. _pylint: http://www.logilab.org/project/pylint .. _pyflakes: http://divmod.org/trac/wiki/DivmodPyflakes .. _virtualenv: http://pypi.python.org/pypi/virtualenv .. _git: http://git.or.cz/ .. _github: http://github.com .. _flymake: http://flymake.sourceforge.net/ .. _rope: http://rope.sourceforge.net/ .. _pymacs: http://pymacs.progiciels-bpi.ca/pymacs.html .. _ropemacs: http://rope.sourceforge.net/ropemacs.html .. _ECB: http://ecb.sourceforge.net/ .. _emacs_python_mode: http://www.emacswiki.org/cgi-bin/wiki/PythonMode .. _doctest-mode: http://www.cis.upenn.edu/~edloper/projects/doctestmode/ .. _bazaar: http://bazaar-vcs.org/ .. _nose: http://somethingaboutorange.com/mrl/projects/nose .. _`python coverage tester`: http://nedbatchelder.com/code/modules/coverage.html .. _cython: http://cython.org .. Other python projects .. _numpy: http://numpy.scipy.org .. _scipy: http://www.scipy.org .. _ipython: http://ipython.scipy.org .. _`ipython manual`: http://ipython.scipy.org/doc/manual/html .. _matplotlib: http://matplotlib.sourceforge.net .. _pythonxy: http://www.pythonxy.com .. _ETS: http://code.enthought.com/projects/tool-suite.php .. _`Enthought Tool Suite`: http://code.enthought.com/projects/tool-suite.php .. _canopy: https://www.enthought.com/products/canopy .. _anaconda: http://continuum.io/downloads .. _python: http://www.python.org .. _mayavi: http://mayavi.sourceforge.net/ .. _sympy: http://code.google.com/p/sympy/ .. _networkx: http://networkx.lanl.gov/ .. _setuptools: http://pypi.python.org/pypi/setuptools .. _distribute: http://packages.python.org/distribute .. _datapkg: http://okfn.org/projects/datapkg .. _pytables: http://www.pytables.org .. _python-vtk: http://www.vtk.org .. Python imaging projects .. _PyMVPA: http://www.pymvpa.org .. _BrainVISA: http://brainvisa.info .. _anatomist: http://brainvisa.info .. _pydicom: http://code.google.com/p/pydicom/ .. Not so python imaging projects .. _matlab: http://www.mathworks.com .. _spm: http://www.fil.ion.ucl.ac.uk/spm .. _spm8: http://www.fil.ion.ucl.ac.uk/spm/software/spm8 .. _eeglab: http://sccn.ucsd.edu/eeglab .. _AFNI: http://afni.nimh.nih.gov/afni .. _FSL: http://www.fmrib.ox.ac.uk/fsl .. _FreeSurfer: http://surfer.nmr.mgh.harvard.edu .. _voxbo: http://www.voxbo.org .. _mricron: http://www.mccauslandcenter.sc.edu/mricro/mricron/index.html .. _slicer: http://www.slicer.org/ .. _fibernavigator: https://github.com/scilus/fibernavigator .. File formats .. _DICOM: http://medical.nema.org/ .. _`wikipedia DICOM`: http://en.wikipedia.org/wiki/Digital_Imaging_and_Communications_in_Medicine .. _GDCM: http://sourceforge.net/apps/mediawiki/gdcm .. _`DICOM specs`: ftp://medical.nema.org/medical/dicom/2009/ .. _`DICOM object definitions`: ftp://medical.nema.org/medical/dicom/2009/09_03pu3.pdf .. _dcm2nii: http://www.cabiatl.com/mricro/mricron/dcm2nii.html .. _`mricron install`: http://www.cabiatl.com/mricro/mricron/install.html .. _dicom2nrrd: http://www.slicer.org/slicerWiki/index.php/Modules:DicomToNRRD-3.4 .. _Nrrd: http://teem.sourceforge.net/nrrd/format.html .. General software .. _gcc: http://gcc.gnu.org .. _xcode: http://developer.apple.com/TOOLS/xcode .. _mingw: http://www.mingw.org/wiki/Getting_Started .. _mingw distutils bug: http://bugs.python.org/issue2698 .. _cygwin: http://cygwin.com .. _macports: http://www.macports.org/ .. _VTK: http://www.vtk.org/ .. _ITK: http://www.itk.org/ .. _swig: http://www.swig.org .. _openmp: www.openmp.org/ .. Windows development .. _mingw: http://www.mingw.org/wiki/Getting_Started .. _msys: http://www.mingw.org/wiki/MSYS .. _powershell: http://www.microsoft.com/powershell .. _msysgit: http://code.google.com/p/msysgit .. _putty: http://www.chiark.greenend.org.uk/~sgtatham/putty .. Functional imaging labs .. _`functional imaging laboratory`: http://www.fil.ion.ucl.ac.uk .. _FMRIB: http://www.fmrib.ox.ac.uk .. Other organizations .. _enthought: .. _kitware: http://www.kitware.com .. _nitrc: http://www.nitrc.org .. General information links .. _`wikipedia FMRI`: http://en.wikipedia.org/wiki/Functional_magnetic_resonance_imaging .. _`wikipedia PET`: http://en.wikipedia.org/wiki/Positron_emission_tomography .. Mathematical methods .. _`wikipedia ICA`: http://en.wikipedia.org/wiki/Independent_component_analysis .. _`wikipedia PCA`: http://en.wikipedia.org/wiki/Principal_component_analysis .. Mathematical ideas .. _`wikipedia spherical coordinate system`: http://en.wikipedia.org/wiki/Spherical_coordinate_system .. _`mathworld spherical coordinate system`: http://mathworld.wolfram.com/SphericalCoordinates.html .. _`wikipedia affine`: http://en.wikipedia.org/wiki/Affine_transformation .. _`wikipedia linear transform`: http://en.wikipedia.org/wiki/Linear_transformation .. _`wikipedia rotation matrix`: http://en.wikipedia.org/wiki/Rotation_matrix .. _`wikipedia homogenous coordinates`: http://en.wikipedia.org/wiki/Homogeneous_coordinates .. _`wikipedia axis angle`: http://en.wikipedia.org/wiki/Axis_angle .. _`wikipedia Euler angles`: http://en.wikipedia.org/wiki/Euler_angles .. _`Mathworld Euler angles`: http://mathworld.wolfram.com/EulerAngles.html .. _`wikipedia quaternion`: http://en.wikipedia.org/wiki/Quaternion .. _`wikipedia shear matrix`: http://en.wikipedia.org/wiki/Shear_matrix .. _`wikipedia reflection`: http://en.wikipedia.org/wiki/Reflection_(mathematics) .. _`wikipedia direction cosine`: http://en.wikipedia.org/wiki/Direction_cosine .. vim:syntax=rst dipy-0.10.1/doc/make.bat000066400000000000000000000056131263041327500147200ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation set SPHINXBUILD=sphinx-build set ALLSPHINXOPTS=-d _build/doctrees %SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (_build\*) do rmdir /q /s %%i del /q /s _build\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% _build/html echo. echo.Build finished. The HTML pages are in _build/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% _build/dirhtml echo. echo.Build finished. The HTML pages are in _build/dirhtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% _build/pickle echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% _build/json echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% _build/htmlhelp echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in _build/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% _build/qthelp echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in _build/qthelp, like this: echo.^> qcollectiongenerator _build\qthelp\dipy.qhcp echo.To view the help file: echo.^> assistant -collectionFile _build\qthelp\dipy.ghc goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% _build/latex echo. echo.Build finished; the LaTeX files are in _build/latex. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% _build/changes echo. echo.The overview file is in _build/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% _build/linkcheck echo. echo.Link check complete; look for any errors in the above output ^ or in _build/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% _build/doctest echo. echo.Testing of doctests in the sources finished, look at the ^ results in _build/doctest/output.txt. goto end ) :end dipy-0.10.1/doc/mission.rst000066400000000000000000000010251263041327500155170ustar00rootroot00000000000000.. _mission: =================== Mission statement =================== Mission of Statement The purpose of dipy is to make it **easier to do better diffusion MR imaging research**. Following up with the nipy mission statement we aim to build software that is * **clearly written** * **clearly explained** * **a good fit for the underlying ideas** * **a natural home for collaboration** We hope that, if we fail to do this, you will let us know and we will try and make it better. See also :ref:`introduction` dipy-0.10.1/doc/note_about_examples.rst000066400000000000000000000016021263041327500200740ustar00rootroot00000000000000========================= A note about the examples ========================= The examples here are some uses of the analysis and visualization functionality of dipy_, with example data from actual neuroscience experiments, or with synthetic data, which is generated as part of the example. All the examples presented in the documentation are generated from *fully functioning* python scripts, which are available as part of the source distribution in the doc/examples folder. If you want to replicate a particular analysis or visualization, simply copy the relevant ".py" script from the source distribution, edit out the body of the text of the example (which appear as blocks of text between triple quotes '"""') and alter it to your purpose. Thanks to the developers of PyMVPA_ for designing the software which enables us to provide these documented examples! .. include:: links_names.inc dipy-0.10.1/doc/old_highlights.rst000066400000000000000000000045171263041327500170370ustar00rootroot00000000000000.. _old_highlights: **************** Older Highlights **************** **Dipy** was an **official exhibitor** for OHBM 2015. .. raw :: html

    **Dipy 0.9.2** is now available for :ref:`download `. Here is a summary of the new features. * Anatomically Constrained Tissue Classifiers for Tracking * Massive speedup of Constrained Spherical Deconvolution (CSD) * Recursive calibration of response function for CSD * New experimental framework for clustering * Improvements and 10X speedup for Quickbundles * Improvements in Linear Fascicle Evaluation (LiFE) * New implementation of Geodesic Anisotropy * New efficient transformation functions for registration * Sparse Fascicle Model supports acquisitions with multiple b-values **Dipy 0.8.0** is now available for :ref:`download `. The new release contains state-of-the-art algorithms for diffusion MRI registration, reconstruction, denoising, statistical evaluation, fiber tracking and validation of tracking. For more information about Dipy_, read the `dipy paper`_ in Frontiers in Neuroinformatics. .. raw :: html So, how similar are your bundles to the real anatomy? Learn how to optimize your analysis as we did to create the fornix of the figure above, by reading the tutorials in our :ref:`gallery `. In Dipy_ we care about methods which can solve complex problems efficiently and robustly. QuickBundles is one of the many state-of-the art algorithms found in Dipy. It can be used to simplify large datasets of streamlines. See our :ref:`gallery ` of examples and try QuickBundles with your data. Here is a video of QuickBundles applied on a simple dataset. .. raw:: html .. include:: links_names.incdipy-0.10.1/doc/old_news.rst000066400000000000000000000024641263041327500156600ustar00rootroot00000000000000.. _old_news: ********************** Past announcements ********************** - **Dipy 0.7.1** is available for :ref:`download ` with **3X** more tutorials than 0.6.0! In addition, a `journal paper`_ focusing on teaching the fundamentals of Dipy is available in Frontiers of Neuroinformatics. - A new **hands on Dipy** seminar to 50 neuroscientists from Canada, as part of QBIN's "Do's and dont's of diffusion MRI" workshop, 8 April, 2014. - The creators of Dipy will attend both ISMRM and HBM 2015. Come and meet us! - `Dipy paper`_ accepted in Frontiers of Neuroinformatics, 22 January, 2014. - **Dipy 0.7.1** Released!, 16 January, 2014. - **Dipy 0.7.0** Released!, 23 December, 2013. - **Spherical Deconvolution** algorithms are now included in the current development version 0.7.0dev. See the examples in :ref:`gallery `, 24 June 2013. - A team of Dipy developers **wins** the `IEEE ISBI HARDI challenge `_, 7 April, 2013. - **Hands on Dipy** seminar took place at the dMRI course of the CREATE-MIA summer school, 5-7 June, McGill, Montreal, 2013. - **Dipy 0.6.0** Released!, 30 March, 2013. - **Dipy 3rd Sprint**, Berkeley, CA, 8-18 April, 2013. - **IEEE ISBI HARDI challenge** 2013 chooses **Dipy**, February, 2013. dipy-0.10.1/doc/release0.10.rst000066400000000000000000000345131263041327500157650ustar00rootroot00000000000000.. _release0.10: ==================================== Release notes for Dipy version 0.10 ==================================== GitHub stats for 2015/03/18 - 2015/11/19 (tag: 0.9.2) These lists are automatically generated, and may be incomplete or contain duplicates. The following 20 authors (alphabetically ordered) contributed 1022 commits: * Alexandre Gauvin * Ariel Rokem * Bago Amirbekian * David Qixiang Chen * Dimitris Rozakis * Eleftherios Garyfallidis * Gabriel Girard * Gonzalo Sanguinetti * Jean-Christophe Houde * Marc-Alexandre Côté * Matthew Brett * Mauro Zucchelli * Maxime Descoteaux * Michael Paquette * Omar Ocegueda * Oscar Esteban * Rafael Neto Henriques * Rohan Prinja * Samuel St-Jean * Stefan van der Walt We closed a total of 232 issues, 94 pull requests and 138 regular issues; this is the full list (generated with the script :file:`tools/github_stats.py`): Pull Requests (94): * :ghpull:`769`: RF: Remove aniso2iso altogether. * :ghpull:`772`: DOC: Use xvfb when building the docs in a headless machine. * :ghpull:`754`: DOC: Should we add a side-car gitter chat to the website? * :ghpull:`753`: TST: Test DSI with b0s. * :ghpull:`767`: Offscreen is False for test_slicer * :ghpull:`768`: Document dipy.reconst.dti.iter_fit_tensor params * :ghpull:`766`: Add fit_tensor iteration decorator * :ghpull:`751`: Reorient tracks according to ROI * :ghpull:`765`: BF: Typo in data file name. * :ghpull:`757`: Optimize dipy.align.reslice * :ghpull:`587`: Fvtk 2.0 PR1 * :ghpull:`749`: Fixed deprecation warning in skimage * :ghpull:`748`: TST: added test for _to_voxel_tolerance. * :ghpull:`678`: BF: added tolerance for negative streamline coordinates checks * :ghpull:`714`: RF: use masks in predictions and cross-validation * :ghpull:`739`: Set number of OpenMP threads during runtime * :ghpull:`733`: Add RTOP, RTAP and RTPP and the relative test * :ghpull:`743`: BF: memleaks with typed memory views in Cython * :ghpull:`724`: @sinkpoint's power map - refactored * :ghpull:`741`: ENH: it is preferable to use choice rather than randint to not have * :ghpull:`727`: Optimize tensor fitting * :ghpull:`726`: NF - CSD response from a mask * :ghpull:`729`: BF: tensor predict * :ghpull:`736`: Added installation of python-tk package for VTK travis bot * :ghpull:`735`: Added comment on nlmeans example about selecting one volume * :ghpull:`732`: WIP: Test with vtk on Travis * :ghpull:`731`: Np 1.10 * :ghpull:`640`: MAPMRI * :ghpull:`682`: Created list of examples for available features and metrics * :ghpull:`716`: Refactor data module * :ghpull:`699`: Added gaussian noise option to estimate_sigma * :ghpull:`712`: DOC: API changes in gh707. * :ghpull:`713`: RF: In case a user just wants to use a single integer. * :ghpull:`700`: TEST: add tests for AffineMap * :ghpull:`677`: DKI PR3 - NF: Adding standard kurtosis statistics on module dki.py * :ghpull:`721`: TST: Verify that output of estimate_sigma is a proper input to nlmeans. * :ghpull:`572`: NF : nlmeans now support arrays of noise std * :ghpull:`708`: Check for bval dimensionality on read. * :ghpull:`707`: BF: Keep up with changes in scipy 0.16 * :ghpull:`709`: DOC: Use the `identity` variable in the resampling transformation. * :ghpull:`703`: Fix syn-3d example * :ghpull:`705`: Fix example in function compress_streamline * :ghpull:`635`: Select streamlines based on logical operations on ROIs * :ghpull:`702`: BF: Use only validated examples when building docs. * :ghpull:`689`: Streamlines compression * :ghpull:`698`: DOC: added NI citation * :ghpull:`681`: RF + DOC: Add MNI template reference. Also import it into the dipy.da… * :ghpull:`696`: Change title of piesno example * :ghpull:`691`: CENIR 'HCP-like' multi b-value data * :ghpull:`661`: Test DTI eigenvectors * :ghpull:`690`: BF: nan entries cause segfault * :ghpull:`667`: DOC: Remove Sourceforge related makefile things. Add the gh-pages upl… * :ghpull:`676`: TST: update Travis config to use container infrastructure. * :ghpull:`533`: MRG: some Cython refactorings * :ghpull:`686`: BF: Make buildbot Pyhon26-32 happy * :ghpull:`683`: Fixed initial estimation in piesno * :ghpull:`654`: Affine registration PR 3/3 * :ghpull:`684`: BF: Fixed memory leak in QuickBundles. * :ghpull:`674`: NF: Function to sample perpendicular directions relative to a given vector * :ghpull:`679`: BF + NF: Provide dipy version info when running dipy.get_info() * :ghpull:`680`: NF: Fetch and Read the MNI T1 and/or T2 template. * :ghpull:`664`: DKI fitting (DKI PR2) * :ghpull:`671`: DOC: move mailing list links to neuroimaging * :ghpull:`663`: changed samuel st-jean email to the usherbrooke one * :ghpull:`648`: Improve check of collinearity in vec2vec_rotmat * :ghpull:`582`: DKI project: PR#1 Simulations to test DKI * :ghpull:`660`: BF: If scalar-color input has len(shape)<4, need to fill that in. * :ghpull:`612`: BF: Differences in spherical harmonic calculations wrt scipy 0.15 * :ghpull:`651`: Added estimate_sigma bias correction + update example * :ghpull:`659`: BF: If n_frames is larger than one use path-numbering. * :ghpull:`658`: FIX: resaved npy file causing load error for py 33 * :ghpull:`657`: Fix compilation error caused by inline functions * :ghpull:`628`: Affine registration PR 2/3 * :ghpull:`629`: Quickbundles 2.1 * :ghpull:`637`: DOC: Fix typo in docstring of Identity class. * :ghpull:`639`: DOC: Render the following line in the code cell. * :ghpull:`614`: Seeds from mask random * :ghpull:`633`: BF - no import of TissueTypes * :ghpull:`632`: fixed typo in dti example * :ghpull:`627`: BF: Add missing opacity property to point actor * :ghpull:`626`: Use LooseVersion to check for scipy versions * :ghpull:`625`: DOC: Include the PIESNO example. * :ghpull:`624`: DOC: Corrected typos in Restore tutorial and docstring. * :ghpull:`619`: DOC: Added missing contributor to developer list * :ghpull:`618`: Update README file * :ghpull:`616`: Raise ValueError when invalid matrix is given * :ghpull:`576`: Piesno example * :ghpull:`615`: bugfix for double word in doc example issue #387 * :ghpull:`610`: Added figure with HBM 2015 * :ghpull:`609`: Update website documentation * :ghpull:`607`: DOC: Detailed github stats for 0.9 * :ghpull:`606`: Removed the word new * :ghpull:`605`: Release mode: updating Changelog and Authors * :ghpull:`594`: DOC + PEP8: Mostly just line-wrapping. Issues (138): * :ghissue:`769`: RF: Remove aniso2iso altogether. * :ghissue:`772`: DOC: Use xvfb when building the docs in a headless machine. * :ghissue:`754`: DOC: Should we add a side-car gitter chat to the website? * :ghissue:`771`: Should we remove the deprecated quickbundles module? * :ghissue:`753`: TST: Test DSI with b0s. * :ghissue:`761`: reading dconn.nii * :ghissue:`723`: WIP: Assign streamlines to an existing cluster map via QuickBundles * :ghissue:`738`: Import tkinter * :ghissue:`767`: Offscreen is False for test_slicer * :ghissue:`752`: TST: Install vtk and mesa on Travis to test the fvtk module. * :ghissue:`768`: Document dipy.reconst.dti.iter_fit_tensor params * :ghissue:`763`: Tensor Fitting Overflows Memory * :ghissue:`766`: Add fit_tensor iteration decorator * :ghissue:`751`: Reorient tracks according to ROI * :ghissue:`765`: BF: Typo in data file name. * :ghissue:`764`: 404: Not Found when loading Stanford labels * :ghissue:`757`: Optimize dipy.align.reslice * :ghissue:`587`: Fvtk 2.0 PR1 * :ghissue:`286`: WIP - FVTK refactor/cleanup * :ghissue:`755`: dipy.reconst.tests.test_shm.test_sf_to_sh: TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('uint16') with casting rule 'same_kind' * :ghissue:`749`: Fixed deprecation warning in skimage * :ghissue:`748`: TST: added test for _to_voxel_tolerance. * :ghissue:`678`: BF: added tolerance for negative streamline coordinates checks * :ghissue:`714`: RF: use masks in predictions and cross-validation * :ghissue:`739`: Set number of OpenMP threads during runtime * :ghissue:`733`: Add RTOP, RTAP and RTPP and the relative test * :ghissue:`743`: BF: memleaks with typed memory views in Cython * :ghissue:`737`: Possibly set_number_of_points doesn't delete memory * :ghissue:`672`: Power map * :ghissue:`724`: @sinkpoint's power map - refactored * :ghissue:`741`: ENH: it is preferable to use choice rather than randint to not have * :ghissue:`730`: numpy 1.10 breaks master * :ghissue:`727`: Optimize tensor fitting * :ghissue:`726`: NF - CSD response from a mask * :ghissue:`729`: BF: tensor predict * :ghissue:`736`: Added installation of python-tk package for VTK travis bot * :ghissue:`735`: Added comment on nlmeans example about selecting one volume * :ghissue:`732`: WIP: Test with vtk on Travis * :ghissue:`734`: WIP: Fvtk 2.0 with travis vtk support * :ghissue:`688`: dipy.test() fails on centos 6.x / python2.6 * :ghissue:`731`: Np 1.10 * :ghissue:`725`: WIP: TST: Install vtk on travis with conda. * :ghissue:`640`: MAPMRI * :ghissue:`611`: OSX test fail 'we check the default value of lambda ...' * :ghissue:`715`: In current segment_quickbundles tutorial there is no example for changing number of points * :ghissue:`719`: Fixes #715 * :ghissue:`682`: Created list of examples for available features and metrics * :ghissue:`716`: Refactor data module * :ghissue:`699`: Added gaussian noise option to estimate_sigma * :ghissue:`712`: DOC: API changes in gh707. * :ghissue:`713`: RF: In case a user just wants to use a single integer. * :ghissue:`700`: TEST: add tests for AffineMap * :ghissue:`677`: DKI PR3 - NF: Adding standard kurtosis statistics on module dki.py * :ghissue:`721`: TST: Verify that output of estimate_sigma is a proper input to nlmeans. * :ghissue:`693`: WIP: affine map tests * :ghissue:`694`: Memory errors / timeouts with affine registration on Windows * :ghissue:`572`: NF : nlmeans now support arrays of noise std * :ghissue:`708`: Check for bval dimensionality on read. * :ghissue:`697`: dipy.io.gradients read_bvals_bvecs does not check bvals length * :ghissue:`707`: BF: Keep up with changes in scipy 0.16 * :ghissue:`710`: Test dipy.core.tests.test_sphere.test_interp_rbf fails fails on Travis * :ghissue:`709`: DOC: Use the `identity` variable in the resampling transformation. * :ghissue:`649`: ROI seeds not placed at the center of the voxels * :ghissue:`656`: Build-bot status * :ghissue:`701`: Changes in `syn_registration_3d` example * :ghissue:`703`: Fix syn-3d example * :ghissue:`705`: Fix example in function compress_streamline * :ghissue:`704`: Buildbots failure: related to streamline compression? * :ghissue:`635`: Select streamlines based on logical operations on ROIs * :ghissue:`702`: BF: Use only validated examples when building docs. * :ghissue:`689`: Streamlines compression * :ghissue:`698`: DOC: added NI citation * :ghissue:`621`: piesno example not rendering correctly on the website * :ghissue:`650`: profiling hyp1f1 * :ghissue:`681`: RF + DOC: Add MNI template reference. Also import it into the dipy.da… * :ghissue:`696`: Change title of piesno example * :ghissue:`691`: CENIR 'HCP-like' multi b-value data * :ghissue:`661`: Test DTI eigenvectors * :ghissue:`690`: BF: nan entries cause segfault * :ghissue:`667`: DOC: Remove Sourceforge related makefile things. Add the gh-pages upl… * :ghissue:`676`: TST: update Travis config to use container infrastructure. * :ghissue:`533`: MRG: some Cython refactorings * :ghissue:`686`: BF: Make buildbot Pyhon26-32 happy * :ghissue:`622`: Fast shm from scipy 0.15.0 does not work on rc version * :ghissue:`683`: Fixed initial estimation in piesno * :ghissue:`233`: WIP: Dki * :ghissue:`654`: Affine registration PR 3/3 * :ghissue:`684`: BF: Fixed memory leak in QuickBundles. * :ghissue:`674`: NF: Function to sample perpendicular directions relative to a given vector * :ghissue:`679`: BF + NF: Provide dipy version info when running dipy.get_info() * :ghissue:`680`: NF: Fetch and Read the MNI T1 and/or T2 template. * :ghissue:`664`: DKI fitting (DKI PR2) * :ghissue:`539`: WIP: BF: Catching initial fodf creation of SDT * :ghissue:`671`: DOC: move mailing list links to neuroimaging * :ghissue:`663`: changed samuel st-jean email to the usherbrooke one * :ghissue:`287`: Fvtk sphere origin * :ghissue:`648`: Improve check of collinearity in vec2vec_rotmat * :ghissue:`582`: DKI project: PR#1 Simulations to test DKI * :ghissue:`660`: BF: If scalar-color input has len(shape)<4, need to fill that in. * :ghissue:`612`: BF: Differences in spherical harmonic calculations wrt scipy 0.15 * :ghissue:`651`: Added estimate_sigma bias correction + update example * :ghissue:`659`: BF: If n_frames is larger than one use path-numbering. * :ghissue:`652`: MAINT: work around scipy bug in sph_harm * :ghissue:`653`: Revisit naming when Matthew is back from Cuba * :ghissue:`658`: FIX: resaved npy file causing load error for py 33 * :ghissue:`657`: Fix compilation error caused by inline functions * :ghissue:`655`: Development documentation instructs to remove `master` * :ghissue:`628`: Affine registration PR 2/3 * :ghissue:`629`: Quickbundles 2.1 * :ghissue:`638`: tutorial example, code in text format * :ghissue:`637`: DOC: Fix typo in docstring of Identity class. * :ghissue:`639`: DOC: Render the following line in the code cell. * :ghissue:`614`: Seeds from mask random * :ghissue:`633`: BF - no import of TissueTypes * :ghissue:`632`: fixed typo in dti example * :ghissue:`630`: Possible documentation bug (?) * :ghissue:`627`: BF: Add missing opacity property to point actor * :ghissue:`459`: streamtubes opacity kwarg * :ghissue:`626`: Use LooseVersion to check for scipy versions * :ghissue:`625`: DOC: Include the PIESNO example. * :ghissue:`623`: DOC: Include the PIESNO example in the documentation. * :ghissue:`624`: DOC: Corrected typos in Restore tutorial and docstring. * :ghissue:`619`: DOC: Added missing contributor to developer list * :ghissue:`604`: Retired ARM buildbot * :ghissue:`613`: Possible random failure in test_vector_fields.test_reorient_vector_field_2d * :ghissue:`618`: Update README file * :ghissue:`616`: Raise ValueError when invalid matrix is given * :ghissue:`617`: Added build status icon to readme * :ghissue:`576`: Piesno example * :ghissue:`615`: bugfix for double word in doc example issue #387 * :ghissue:`600`: Use of nanmean breaks dipy for numpy < 1.8 * :ghissue:`610`: Added figure with HBM 2015 * :ghissue:`609`: Update website documentation * :ghissue:`390`: WIP: New PIESNO example and small corrections * :ghissue:`607`: DOC: Detailed github stats for 0.9 * :ghissue:`606`: Removed the word new * :ghissue:`605`: Release mode: updating Changelog and Authors * :ghissue:`594`: DOC + PEP8: Mostly just line-wrapping.dipy-0.10.1/doc/release0.6.rst000066400000000000000000000322621263041327500157110ustar00rootroot00000000000000=================================== Release notes for dipy version 0.6 =================================== GitHub stats for 2011/02/12 - 2013/03/20 The following 13 authors contributed 972 commits. * Ariel Rokem * Bago Amirbekian * Eleftherios Garyfallidis * Emanuele Olivetti * Ian Nimmo-Smith * Maria Luisa Mandelli * Matthew Brett * Maxime Descoteaux * Michael Paquette * Samuel St-Jean * Stefan van der Walt * Yaroslav Halchenko * endolith We closed a total of 225 issues, 100 pull requests and 125 regular issues; this is the full list (generated with the script :file:`tools/github_stats.py`): Pull Requests (100): * :ghpull:`146`: BF - allow Bootstrap Wrapper to work with markov tracking * :ghpull:`143`: Garyfallidis tutorials 0.6 * :ghpull:`145`: Mdesco dti metrics * :ghpull:`141`: Peak extraction isbi * :ghpull:`142`: RF - always use theta and phi in that order, (not "phi, theta") * :ghpull:`140`: Sf2sh second try at correcting suggestions * :ghpull:`139`: Spherical function to spherical harmonics and back * :ghpull:`138`: Coding style fix for dsi_deconv * :ghpull:`137`: BF - check shapes before allclose * :ghpull:`136`: BF: add top-level benchmarking command * :ghpull:`135`: Refactor local maxima * :ghpull:`134`: BF - fix shm tests to accept antipodal directions as the same * :ghpull:`133`: Corrected test for Deconvolution after the discrete direction finder was removed * :ghpull:`124`: Remove direction finder * :ghpull:`77`: Rework tracking * :ghpull:`132`: A new fvtk function for visualizing fields of odfs * :ghpull:`131`: Add missing files * :ghpull:`130`: Implementation of DSI deconvolution from E.J. Canales-Rodriguez * :ghpull:`128`: Colorfa * :ghpull:`129`: RF - minor cleanup of pdf_odf code * :ghpull:`127`: Adding multi-tensor simulation * :ghpull:`126`: Improve local maxima * :ghpull:`122`: Removed calculation of gfa and other functions from inside the odf(sphere) of DSI and GQI * :ghpull:`103`: Major update of the website, with a few examples and with some additional minor RFs * :ghpull:`121`: NF: Allow the smoothing parameter to come through to rbf interpolation. * :ghpull:`120`: Fast squash fix * :ghpull:`116`: RF: common dtype for squash_ without result_type * :ghpull:`117`: Fix directions on TensorFit and add getitem * :ghpull:`119`: RF: raise errors for Python version dependencies * :ghpull:`118`: Seperate fa * :ghpull:`111`: RF - clean up _squash in multi_voxel and related code * :ghpull:`112`: RF: fix vec_val_vect logic, generalize for shape * :ghpull:`114`: BF: fix face and edge byte order for sphere load * :ghpull:`109`: Faster einsum * :ghpull:`110`: TST: This is only almost equal on XP, for some reason. * :ghpull:`108`: TST + STY: Use and assert_equal so that we get more information upon failure * :ghpull:`107`: RF: A.dot(B) => np.dot(A, B) for numpy < 1.5 * :ghpull:`102`: BF - Allow ndindex to work with older numpy than 1.6. * :ghpull:`106`: RF: allow optional scipy.spatial.Delaunay * :ghpull:`105`: Skip doctest decorator * :ghpull:`104`: RF: remove deprecated old parametric testing * :ghpull:`101`: WIP: Fix isnan windows * :ghpull:`100`: Small stuff * :ghpull:`94`: Multivoxel dsi and gqi are back! * :ghpull:`96`: ENH: Implement masking for the new TensorModel implementation. * :ghpull:`95`: NF fetch publicly available datasets * :ghpull:`26`: Noise * :ghpull:`84`: Non linear peak finding * :ghpull:`82`: DTI new api * :ghpull:`91`: Shm new api * :ghpull:`88`: NF - wrapper function for multi voxel models * :ghpull:`86`: DOC: Fixed some typos, etc in the FAQ * :ghpull:`90`: A simpler ndindex using generators. * :ghpull:`87`: RF - Provide shape as argument to ndindex. * :ghpull:`85`: Add fast ndindex. * :ghpull:`81`: RF - fixup peaks_from_model to take use remove_similar_vertices and * :ghpull:`79`: BF: Fixed projection plots. * :ghpull:`80`: RF - remove some old functions tools * :ghpull:`71`: ENH: Make the internals of the io module visible on tab completion in ip... * :ghpull:`76`: Yay, more gradient stuff * :ghpull:`75`: Rename L2norm to vector_norm * :ghpull:`74`: Gradient rf * :ghpull:`73`: RF/BF - removed duplicate vector_norm/L2norm * :ghpull:`72`: Mr bago model api * :ghpull:`68`: DSI seems working again - Have a look * :ghpull:`65`: RF: Make the docstring and call consistent with scipy.interpolate.Rbf. * :ghpull:`61`: RF - Refactor direction finding. * :ghpull:`60`: NF - Add key-value cache for use in models. * :ghpull:`63`: TST - Disable reconstruction methods that break the test suite. * :ghpull:`62`: BF - Fix missing import in peak finding tests. * :ghpull:`37`: cleanup refrences in the code to E1381S6_edcor* (these were removed from... * :ghpull:`55`: Ravel multi index * :ghpull:`58`: TST - skip doctest when matplotlib is not available * :ghpull:`59`: optional_traits is not needed anymore * :ghpull:`56`: TST: Following change to API in dipy.segment.quickbundles. * :ghpull:`52`: Matplotlib optional * :ghpull:`50`: NF - added subdivide method to sphere * :ghpull:`51`: Fix tracking utils * :ghpull:`48`: BF - Brought back _filter peaks and associated test. * :ghpull:`47`: RF - Removed reduce_antipodal from sphere. * :ghpull:`41`: NF - Add radial basis function interpolation on the sphere. * :ghpull:`39`: GradientTable * :ghpull:`40`: BF - Fix axis specification in sph_project. * :ghpull:`28`: Odf+shm api update * :ghpull:`36`: Nf hemisphere preview * :ghpull:`34`: RF - replace _filter_peaks with unique_vertices * :ghpull:`35`: BF - Fix imports from dipy.core.sphere. * :ghpull:`21`: Viz 2d * :ghpull:`32`: NF - Sphere class. * :ghpull:`30`: RF: Don't import all this every time. * :ghpull:`24`: TST: Fixing tests in reconst module. * :ghpull:`27`: DOC - Add reference to white matter diffusion values. * :ghpull:`25`: NF - Add prolate white matter as defaults for multi-tensor signal sim. * :ghpull:`22`: Updating my fork with the nipy master * :ghpull:`20`: RF - create OptionalImportError for traits imports * :ghpull:`19`: DOC: add comments and example to commit codes * :ghpull:`18`: DOC: update gitwash from source * :ghpull:`17`: Optional traits * :ghpull:`14`: DOC - fix frontpage example * :ghpull:`12`: BF(?): cart2sphere and sphere2cart are now invertible. * :ghpull:`11`: BF explicit type declaration and initialization for longest_track_len[AB] -- for cython 0.15 compatibility Issues (125): * :ghissue:`99`: RF - Separate direction finder from model fit. * :ghissue:`143`: Garyfallidis tutorials 0.6 * :ghissue:`144`: DTI metrics * :ghissue:`145`: Mdesco dti metrics * :ghissue:`123`: Web content and examples for 0.6 * :ghissue:`141`: Peak extraction isbi * :ghissue:`142`: RF - always use theta and phi in that order, (not "phi, theta") * :ghissue:`140`: Sf2sh second try at correcting suggestions * :ghissue:`139`: Spherical function to spherical harmonics and back * :ghissue:`23`: qball not properly import-able * :ghissue:`29`: Don't import everything when you import dipy * :ghissue:`138`: Coding style fix for dsi_deconv * :ghissue:`137`: BF - check shapes before allclose * :ghissue:`136`: BF: add top-level benchmarking command * :ghissue:`135`: Refactor local maxima * :ghissue:`134`: BF - fix shm tests to accept antipodal directions as the same * :ghissue:`133`: Corrected test for Deconvolution after the discrete direction finder was removed * :ghissue:`124`: Remove direction finder * :ghissue:`77`: Rework tracking * :ghissue:`132`: A new fvtk function for visualizing fields of odfs * :ghissue:`125`: BF: Remove 'mayavi' directory, to avoid triggering mayavi import warning... * :ghissue:`131`: Add missing files * :ghissue:`130`: Implementation of DSI deconvolution from E.J. Canales-Rodriguez * :ghissue:`128`: Colorfa * :ghissue:`129`: RF - minor cleanup of pdf_odf code * :ghissue:`127`: Adding multi-tensor simulation * :ghissue:`126`: Improve local maxima * :ghissue:`97`: BF - separate out storing of fit values in gqi * :ghissue:`122`: Removed calculation of gfa and other functions from inside the odf(sphere) of DSI and GQI * :ghissue:`103`: Major update of the website, with a few examples and with some additional minor RFs * :ghissue:`121`: NF: Allow the smoothing parameter to come through to rbf interpolation. * :ghissue:`120`: Fast squash fix * :ghissue:`116`: RF: common dtype for squash_ without result_type * :ghissue:`117`: Fix directions on TensorFit and add getitem * :ghissue:`119`: RF: raise errors for Python version dependencies * :ghissue:`118`: Seperate fa * :ghissue:`113`: RF - use min_diffusivity relative to 1 / max(bval) * :ghissue:`111`: RF - clean up _squash in multi_voxel and related code * :ghissue:`112`: RF: fix vec_val_vect logic, generalize for shape * :ghissue:`114`: BF: fix face and edge byte order for sphere load * :ghissue:`109`: Faster einsum * :ghissue:`110`: TST: This is only almost equal on XP, for some reason. * :ghissue:`98`: This is an update of PR #94 mostly typos and coding style * :ghissue:`108`: TST + STY: Use and assert_equal so that we get more information upon failure * :ghissue:`107`: RF: A.dot(B) => np.dot(A, B) for numpy < 1.5 * :ghissue:`102`: BF - Allow ndindex to work with older numpy than 1.6. * :ghissue:`106`: RF: allow optional scipy.spatial.Delaunay * :ghissue:`105`: Skip doctest decorator * :ghissue:`104`: RF: remove deprecated old parametric testing * :ghissue:`101`: WIP: Fix isnan windows * :ghissue:`100`: Small stuff * :ghissue:`94`: Multivoxel dsi and gqi are back! * :ghissue:`96`: ENH: Implement masking for the new TensorModel implementation. * :ghissue:`95`: NF fetch publicly available datasets * :ghissue:`26`: Noise * :ghissue:`84`: Non linear peak finding * :ghissue:`82`: DTI new api * :ghissue:`91`: Shm new api * :ghissue:`88`: NF - wrapper function for multi voxel models * :ghissue:`86`: DOC: Fixed some typos, etc in the FAQ * :ghissue:`89`: Consisten ndindex behaviour * :ghissue:`90`: A simpler ndindex using generators. * :ghissue:`87`: RF - Provide shape as argument to ndindex. * :ghissue:`85`: Add fast ndindex. * :ghissue:`81`: RF - fixup peaks_from_model to take use remove_similar_vertices and * :ghissue:`83`: Non linear peak finding * :ghissue:`78`: This PR replaces PR 70 * :ghissue:`79`: BF: Fixed projection plots. * :ghissue:`80`: RF - remove some old functions tools * :ghissue:`70`: New api dti * :ghissue:`71`: ENH: Make the internals of the io module visible on tab completion in ip... * :ghissue:`76`: Yay, more gradient stuff * :ghissue:`69`: New api and tracking refacotor * :ghissue:`75`: Rename L2norm to vector_norm * :ghissue:`74`: Gradient rf * :ghissue:`73`: RF/BF - removed duplicate vector_norm/L2norm * :ghissue:`72`: Mr bago model api * :ghissue:`66`: DOCS - docs for model api * :ghissue:`49`: Reworking tracking code. * :ghissue:`68`: DSI seems working again - Have a look * :ghissue:`65`: RF: Make the docstring and call consistent with scipy.interpolate.Rbf. * :ghissue:`61`: RF - Refactor direction finding. * :ghissue:`60`: NF - Add key-value cache for use in models. * :ghissue:`63`: TST - Disable reconstruction methods that break the test suite. * :ghissue:`62`: BF - Fix missing import in peak finding tests. * :ghissue:`37`: cleanup refrences in the code to E1381S6_edcor* (these were removed from... * :ghissue:`55`: Ravel multi index * :ghissue:`46`: BF: Trying to fix test failures. * :ghissue:`57`: TST: Reverted back to optional definition of the function to make TB hap... * :ghissue:`58`: TST - skip doctest when matplotlib is not available * :ghissue:`59`: optional_traits is not needed anymore * :ghissue:`56`: TST: Following change to API in dipy.segment.quickbundles. * :ghissue:`52`: Matplotlib optional * :ghissue:`50`: NF - added subdivide method to sphere * :ghissue:`51`: Fix tracking utils * :ghissue:`48`: BF - Brought back _filter peaks and associated test. * :ghissue:`47`: RF - Removed reduce_antipodal from sphere. * :ghissue:`41`: NF - Add radial basis function interpolation on the sphere. * :ghissue:`33`: Gradients Table class * :ghissue:`39`: GradientTable * :ghissue:`45`: BF - Fix sphere creation in triangle_subdivide. * :ghissue:`38`: Subdivide octahedron * :ghissue:`40`: BF - Fix axis specification in sph_project. * :ghissue:`28`: Odf+shm api update * :ghissue:`36`: Nf hemisphere preview * :ghissue:`34`: RF - replace _filter_peaks with unique_vertices * :ghissue:`35`: BF - Fix imports from dipy.core.sphere. * :ghissue:`21`: Viz 2d * :ghissue:`32`: NF - Sphere class. * :ghissue:`30`: RF: Don't import all this every time. * :ghissue:`24`: TST: Fixing tests in reconst module. * :ghissue:`27`: DOC - Add reference to white matter diffusion values. * :ghissue:`25`: NF - Add prolate white matter as defaults for multi-tensor signal sim. * :ghissue:`22`: Updating my fork with the nipy master * :ghissue:`20`: RF - create OptionalImportError for traits imports * :ghissue:`8`: X error BadRequest with fvtk.show * :ghissue:`19`: DOC: add comments and example to commit codes * :ghissue:`18`: DOC: update gitwash from source * :ghissue:`17`: Optional traits * :ghissue:`15`: Octahedron in dipy.core.triangle_subdivide has wrong faces * :ghissue:`14`: DOC - fix frontpage example * :ghissue:`12`: BF(?): cart2sphere and sphere2cart are now invertible. * :ghissue:`11`: BF explicit type declaration and initialization for longest_track_len[AB] -- for cython 0.15 compatibility * :ghissue:`5`: Add DSI reconstruction in Dipy * :ghissue:`9`: Bug in dipy.tracking.metrics.downsampling when we downsample a track to more than 20 points dipy-0.10.1/doc/release0.7.rst000066400000000000000000000125021263041327500157050ustar00rootroot00000000000000=================================== Release notes for dipy version 0.7 =================================== GitHub stats for 2013/03/29 - 2013/12/23 (tag: 0.6.0) The following 16 authors contributed 814 commits. * Ariel Rokem * Bago Amirbekian * Eleftherios Garyfallidis * Emmanuel Caruyer * Erik Ziegler * Gabriel Girard * Jean-Christophe Houde * Kimberly Chan * Matthew Brett * Matthias Ekman * Matthieu Dumont * Mauro Zucchelli * Maxime Descoteaux * Samuel St-Jean * Stefan van der Walt * Sylvain Merlet We closed a total of 84 pull requests; this is the full list (generated with the script :file:`tools/github_stats.py`): Pull Requests (84): * :ghpull:`292`: Streamline tools * :ghpull:`289`: Examples checked for peaks_from_model * :ghpull:`288`: Link shore examples * :ghpull:`279`: Update release 0.7 examples' system * :ghpull:`257`: Continuous modelling: SHORE * :ghpull:`285`: Bad seeds cause segfault in EuDX * :ghpull:`274`: Peak directions update * :ghpull:`275`: Restore example * :ghpull:`261`: R2 term response function for Sharpening Deconvolution Transform (SDT) * :ghpull:`273`: Fixed typos + autopep8 * :ghpull:`268`: Add gfa shmfit * :ghpull:`260`: NF: Command line interface to QuickBundles. * :ghpull:`270`: Removed minmax_normalize from dipy.reconst.peaks * :ghpull:`247`: Model base * :ghpull:`267`: Refactoring peaks_from_model_parallel * :ghpull:`219`: Update forward sdeconv mat * :ghpull:`266`: BF - join pool before trying to delete temp directory * :ghpull:`265`: Peak from model issue #253 * :ghpull:`264`: peak_from_model tmp files * :ghpull:`263`: Refactoring peaks calculations to be out of odf.py * :ghpull:`262`: Handle cpu count exception * :ghpull:`255`: Fix peaks_from_model_parallel * :ghpull:`259`: Release 0.7 a few cleanups * :ghpull:`252`: Clean cc * :ghpull:`243`: NF Added norm input to interp_rbf and angle as an alternative norm. * :ghpull:`251`: Another cleanup for fvtk. This time the slicer function was simplified * :ghpull:`249`: Dsi metrics 2 * :ghpull:`239`: Segmentation based on rgb threshold + examples * :ghpull:`240`: Dsi metrics * :ghpull:`245`: Fix some rewording * :ghpull:`242`: A new streamtube visualization method and different fixes and cleanups for the fvtk module * :ghpull:`237`: WIP: cleanup docs / small refactor for median otsu * :ghpull:`221`: peaks_from_model now return peaks directions * :ghpull:`234`: BF: predict for cases when the ADC is multi-D and S0 is provided as a volume * :ghpull:`232`: Fix peak extraction default value of relative_peak_threshold * :ghpull:`227`: Fix closing upon download completion in fetcher * :ghpull:`230`: Tensor predict * :ghpull:`229`: BF: input.dtype is used per default * :ghpull:`210`: Brainextraction * :ghpull:`226`: SetInput in vtk5 is now SetInputData in vtk6 * :ghpull:`225`: fixed typo * :ghpull:`212`: Tensor visualization * :ghpull:`223`: Fix make examples for windows. * :ghpull:`222`: Fix restore bug * :ghpull:`217`: RF - update csdeconv to use SphHarmFit class to reduce code duplication. * :ghpull:`208`: Shm coefficients in peaks_from_model * :ghpull:`216`: BF - fixed mask_voxel_size bug and added test. Replaced promote_dtype wi... * :ghpull:`211`: Added a md5 check to each dataset. * :ghpull:`54`: Restore * :ghpull:`213`: Update to a more recent version of `six.py`. * :ghpull:`204`: Maxime's [Gallery] Reconst DTI example revisited * :ghpull:`207`: Added two new datasets online and updated fetcher.py. * :ghpull:`209`: Fixed typos in reconst/dti.py * :ghpull:`206`: DOC: update the docs to say that we support python 3 * :ghpull:`205`: RF: Minor corrections in index.rst and CSD example * :ghpull:`173`: Constrained Spherical Deconvolution and the Spherical Deconvolution Transform * :ghpull:`203`: RF: Rename tensor statistics to remove "tensor_" from them. * :ghpull:`202`: Typos * :ghpull:`201`: Bago's Rename sph basis functions corrected after rebasing and other minor lateral fixes * :ghpull:`191`: DOC - clarify docs for SphHarmModel * :ghpull:`199`: FIX: testfail due to Non-ASCII character \xe2 in markov.py * :ghpull:`189`: Shm small fixes * :ghpull:`196`: DOC: add reference section to ProbabilisticOdfWeightedTracker * :ghpull:`190`: BF - fix fit-tensor handling of file extensions and mask=none * :ghpull:`182`: RF - fix disperse_charges so that a large constant does not cause the po... * :ghpull:`183`: OPT: Modified dipy.core.sphere_stats.random_uniform_on_sphere, cf issue #181 * :ghpull:`185`: DOC: replace soureforge.net links with nipy.org * :ghpull:`180`: BF: fix Cython TypeError from negative indices to tuples * :ghpull:`179`: BF: doctest output difference workarounds * :ghpull:`176`: MRG: Py3 compat * :ghpull:`178`: RF: This function is superseded by read_bvals_bvecs. * :ghpull:`170`: Westin stats * :ghpull:`174`: RF: use $PYTHON variable for python invocation * :ghpull:`172`: DOC: Updated index.rst and refactored example segment_quickbundles.py * :ghpull:`169`: RF: refactor pyx / c file stamping for packaging * :ghpull:`168`: DOC: more updates to release notes * :ghpull:`167`: Merge maint * :ghpull:`166`: BF: pyc and created trk files were in eg archive * :ghpull:`160`: NF: add script to build dmgs from buildbot mpkgs * :ghpull:`164`: Calculation for mode of a tensor * :ghpull:`163`: Remove dti tensor * :ghpull:`161`: DOC: typo in the probabilistic tracking example. * :ghpull:`162`: DOC: update release notes * :ghpull:`159`: Rename install test scripts dipy-0.10.1/doc/release0.8.rst000066400000000000000000000561021263041327500157120ustar00rootroot00000000000000.. _release0.8: =================================== Release notes for dipy version 0.8 =================================== GitHub stats for 2013/12/24 - 2014/12/26 (tag: 0.7.0) The following 19 authors contributed 1176 commits. * Andrew Lawrence * Ariel Rokem * Bago Amirbekian * Demian Wassermann * Eleftherios Garyfallidis * Gabriel Girard * Gregory R. Lee * Jean-Christophe Houde * Kesshi jordan * Marc-Alexandre Cote * Matthew Brett * Matthias Ekman * Matthieu Dumont * Mauro Zucchelli * Maxime Descoteaux * Michael Paquette * Omar Ocegueda * Samuel St-Jean * Stefan van der Walt We closed a total of 388 issues, 155 pull requests and 233 regular issues; this is the full list (generated with the script :file:`tools/github_stats.py`): Pull Requests (155): * :ghpull:`544`: Refactor propspeed - updated * :ghpull:`543`: MRG: update to plot_2d fixes and tests * :ghpull:`537`: NF: add requirements.txt file * :ghpull:`534`: BF: removed ftmp variable * :ghpull:`536`: Update Changelog * :ghpull:`535`: Happy New Year PR! * :ghpull:`531`: BF: extend pip timeout to reduce install failures * :ghpull:`527`: Remove npymath library from cython extensions * :ghpull:`528`: MRG: move conditional compiling to C * :ghpull:`530`: BF: work round ugly MSVC manifest bug * :ghpull:`529`: MRG: a couple of small cleanup fixes * :ghpull:`526`: Readme.rst and info.py update about the license * :ghpull:`525`: Added shore gpl warning in the readme * :ghpull:`524`: Replaced DiPy with DIPY in readme.rst and info.py * :ghpull:`523`: RF: copy includes list for extensions * :ghpull:`522`: DOC: Web-site release notes, and some updates on front page. * :ghpull:`521`: Life bots * :ghpull:`520`: Relaxing precision for win32 * :ghpull:`519`: Christmas PR! Correcting typos, linking and language for max odf tracking * :ghpull:`513`: BF + TST: Reinstated eig_from_lo_tri * :ghpull:`508`: Tests for reslicing * :ghpull:`515`: TST: Increasing testing on life. * :ghpull:`516`: TST: Reduce sensitivity on these tests. * :ghpull:`495`: NF - Deterministic Maximum Direction Getter * :ghpull:`514`: Website update * :ghpull:`510`: BF: another fvtk 5 to 6 incompatibility * :ghpull:`509`: DOC: Small fixes in documentation. * :ghpull:`497`: New sphere for ODF reconstruction * :ghpull:`460`: Sparse Fascicle Model * :ghpull:`499`: DOC: Warn about the GPL license of SHORE. * :ghpull:`491`: RF - Make peaks_from_model part of dipy.direction * :ghpull:`501`: TST: Test for both data with and w/0 b0. * :ghpull:`507`: BF - use different sort method to avoid mergsort for older numpy. * :ghpull:`504`: Bug fix float overflow in estimate_sigma * :ghpull:`494`: Fix round * :ghpull:`503`: Fixed compatibility issues between vtk 5 and 6 * :ghpull:`498`: DTI `min_signal` * :ghpull:`471`: Use importlib instead of __import__ * :ghpull:`419`: LiFE * :ghpull:`489`: Fix diffeomorphic registration test failures * :ghpull:`484`: Clear tabs from examples for website * :ghpull:`490`: DOC: corrected typos in the tracking PR * :ghpull:`341`: Traco Redesign * :ghpull:`483`: NF: Find the closest vertex on a sphere for an input vector. * :ghpull:`488`: BF: fix travis version setting * :ghpull:`485`: RF: deleted unused files * :ghpull:`482`: Skipping tests for different versions of Scipy for optimize.py * :ghpull:`480`: Enhance SLR to allow for series of registrations * :ghpull:`479`: Report on coverage for old scipy. * :ghpull:`481`: BF - make examples was confusing files with similar names, fixed * :ghpull:`476`: Fix optimize defaults for older scipy versions for L-BFGS-B * :ghpull:`478`: TST: Increase the timeout on the Travis pip install * :ghpull:`477`: MAINT+TST: update minimum nibabel dependency * :ghpull:`474`: RF: switch travis tests to use virtualenvs * :ghpull:`473`: TST: Make Travis provide verbose test outputs. * :ghpull:`472`: ENH: GradientTable now calculates qvalues * :ghpull:`469`: Fix evolution save win32 * :ghpull:`463`: DOC: update RESTORE tutorial to use new noise estimation technique * :ghpull:`466`: BF: cannot quote command for Windows * :ghpull:`465`: BF: increased SCIPY version definition flag to 0.12 * :ghpull:`462`: BF: fix writing history to file in Python 3 * :ghpull:`433`: Added local variance estimation * :ghpull:`458`: DOC: docstring fixes in dipy/align/crosscorr.pyx * :ghpull:`448`: BF: fix link to npy_math function * :ghpull:`447`: BF: supposed fix for the gh-439, but still unable to reproduce OP. * :ghpull:`443`: Fix buildbots errors introduced with the registration module * :ghpull:`456`: MRG: relax threshold for failing test + cleanup * :ghpull:`454`: DOC: fix docstring for compile-time checker * :ghpull:`453`: BF: refactor conditional compiling again * :ghpull:`446`: Streamline-based Linear Registration * :ghpull:`445`: NF: generate config.pxi file with Cython DEF vars * :ghpull:`440`: DOC - add info on how to change default tempdir (multiprocessing). * :ghpull:`431`: Change the writeable flag back to its original state when finished. * :ghpull:`408`: Symmetric diffeomorphic non-linear registration * :ghpull:`438`: Missing a blank line in examples/tracking_quick_start.py * :ghpull:`405`: fixed frozen windows executable issue * :ghpull:`418`: RF: move script running code into own module * :ghpull:`437`: Update Cython download URL * :ghpull:`435`: BF: replaced non-ascii character in dipy.reconst.dti line 956 * :ghpull:`434`: DOC: References for the DTI ODF calculation. * :ghpull:`430`: Revert "Support read-only numpy array." * :ghpull:`427`: Support read-only numpy array. * :ghpull:`421`: Fix nans in gfa * :ghpull:`422`: BF: Use the short version to verify scipy version. * :ghpull:`415`: RF - move around some of the predict stuff * :ghpull:`420`: Rename README.txt to README.rst * :ghpull:`413`: Faster spherical harmonics * :ghpull:`416`: Removed memory_leak unittest in test_strealine.py * :ghpull:`417`: Fix streamlinespeed tests * :ghpull:`411`: Fix memory leak in cython functions length and set_number_of_points * :ghpull:`409`: minor corrections to pipe function * :ghpull:`396`: TST : this is not exactly equal on some platforms. * :ghpull:`407`: BF: fixed problem with NANs in odfdeconv * :ghpull:`406`: Revert "Merge pull request #346 from omarocegueda/syn_registration" * :ghpull:`402`: Fix AE test error in test_peak_directions_thorough * :ghpull:`403`: Added mask shape check in tenfit * :ghpull:`346`: Symmetric diffeomorphic non-linear registration * :ghpull:`401`: BF: fix skiptest invocation for missing mpl * :ghpull:`340`: CSD fit issue * :ghpull:`397`: BF: fix import statement for get_cmap * :ghpull:`393`: RF: update Cython dependency * :ghpull:`382`: Cythonized version of streamlines' resample() and length() functions. * :ghpull:`386`: DOC: Small fix in the xval example. * :ghpull:`335`: Xval * :ghpull:`352`: Fix utils docs and affine * :ghpull:`384`: odf_sh_sharpening function fix and new test * :ghpull:`374`: MRG: bumpy numpy requirement to 1.5 / compat fixes * :ghpull:`380`: DOC: Update a few Dipy links to link to the correct repo * :ghpull:`378`: Fvtk cleanup * :ghpull:`379`: fixed typos in shm.py * :ghpull:`339`: FVTK small improvement: Arbitrary matplotlib colormaps can be used to color spherical functions * :ghpull:`373`: Fixed discrepancies between doc and code * :ghpull:`371`: RF: don't use -fopenmp flag if it doesn't work * :ghpull:`372`: BF: set integer type for crossplatform compilation * :ghpull:`337`: Piesno * :ghpull:`370`: Tone down the front page a bit. * :ghpull:`364`: Add the mode param for border management. * :ghpull:`368`: New banner for website * :ghpull:`367`: MRG: refactor API generation for sharing * :ghpull:`363`: RF: make cvxopt optional for tests * :ghpull:`362`: Changes to fix issue #361: matrix sizing in tracking.utils.connectivity_matrix * :ghpull:`360`: Added missing $ sign * :ghpull:`355`: DOC: Updated API change document to add target function change * :ghpull:`357`: Changed the logo to full black as the one that I sent as suggestion for HBM and ISMRM * :ghpull:`356`: Auto-generate API docs * :ghpull:`349`: Added api changes file to track breaks of backwards compatibility * :ghpull:`348`: Website update * :ghpull:`347`: DOC: Updating citations * :ghpull:`345`: TST: Make travis look at test coverage. * :ghpull:`338`: Add positivity constraint on the propagator * :ghpull:`334`: Fix vec2vec * :ghpull:`324`: Constrained optimisation for SHORE to set E(0)=1 when the CVXOPT package is available * :ghpull:`320`: Denoising images using non-local means * :ghpull:`331`: DOC: correct number of seeds in streamline_tools example * :ghpull:`326`: Fix brain extraction example * :ghpull:`327`: add small and big delta * :ghpull:`323`: Shore pdf grid speed improvement * :ghpull:`319`: DOC: Updated the highlights to promote the release and the upcoming paper * :ghpull:`318`: Corrected some rendering problems with the installation instructions * :ghpull:`317`: BF: more problems with path quoting in windows * :ghpull:`316`: MRG: more fixes for windows script tests * :ghpull:`315`: BF: EuDX odf_vertices param has no default value * :ghpull:`305`: DOC: Some more details in installation instructions. * :ghpull:`314`: BF - callable response does not work * :ghpull:`311`: Bf seeds from mask * :ghpull:`309`: MRG: Windows test fixes * :ghpull:`308`: typos + pep stuf * :ghpull:`303`: BF: try and fix nibabel setup requirement * :ghpull:`304`: Update README.txt * :ghpull:`302`: Time for 0.8.0.dev! * :ghpull:`299`: BF: Put back utils.length. * :ghpull:`301`: Updated info.py and copyright year * :ghpull:`300`: Bf fetcher bug on windows * :ghpull:`298`: TST - rework tests so that we do not need to download any data * :ghpull:`290`: DOC: Started generating 0.7 release notes. Issues (233): * :ghissue:`544`: Refactor propspeed - updated * :ghissue:`540`: MRG: refactor propspeed * :ghissue:`542`: TST: Testing regtools * :ghissue:`543`: MRG: update to plot_2d fixes and tests * :ghissue:`541`: BUG: plot_2d_diffeomorphic_map * :ghissue:`439`: ValueError in RESTORE * :ghissue:`538`: WIP: TEST: relaxed precision * :ghissue:`449`: local variable 'ftmp' referenced before assignment * :ghissue:`537`: NF: add requirements.txt file * :ghissue:`534`: BF: removed ftmp variable * :ghissue:`536`: Update Changelog * :ghissue:`535`: Happy New Year PR! * :ghissue:`512`: reconst.dti.eig_from_lo_tri * :ghissue:`467`: Optimize failure on Windows * :ghissue:`464`: Diffeomorphic registration test failures on PPC * :ghissue:`531`: BF: extend pip timeout to reduce install failures * :ghissue:`527`: Remove npymath library from cython extensions * :ghissue:`528`: MRG: move conditional compiling to C * :ghissue:`530`: BF: work round ugly MSVC manifest bug * :ghissue:`529`: MRG: a couple of small cleanup fixes * :ghissue:`526`: Readme.rst and info.py update about the license * :ghissue:`525`: Added shore gpl warning in the readme * :ghissue:`524`: Replaced DiPy with DIPY in readme.rst and info.py * :ghissue:`523`: RF: copy includes list for extensions * :ghissue:`522`: DOC: Web-site release notes, and some updates on front page. * :ghissue:`521`: Life bots * :ghissue:`520`: Relaxing precision for win32 * :ghissue:`519`: Christmas PR! Correcting typos, linking and language for max odf tracking * :ghissue:`513`: BF + TST: Reinstated eig_from_lo_tri * :ghissue:`508`: Tests for reslicing * :ghissue:`515`: TST: Increasing testing on life. * :ghissue:`516`: TST: Reduce sensitivity on these tests. * :ghissue:`495`: NF - Deterministic Maximum Direction Getter * :ghissue:`514`: Website update * :ghissue:`510`: BF: another fvtk 5 to 6 incompatibility * :ghissue:`511`: Error estimating tensors on hcp dataset * :ghissue:`509`: DOC: Small fixes in documentation. * :ghissue:`497`: New sphere for ODF reconstruction * :ghissue:`460`: Sparse Fascicle Model * :ghissue:`499`: DOC: Warn about the GPL license of SHORE. * :ghissue:`491`: RF - Make peaks_from_model part of dipy.direction * :ghissue:`501`: TST: Test for both data with and w/0 b0. * :ghissue:`507`: BF - use different sort method to avoid mergsort for older numpy. * :ghissue:`505`: stable/wheezy debian -- ar.argsort(kind='mergesort') causes TypeError: requested sort not available for type ( * :ghissue:`506`: RF: Use integer datatype for unique_rows sorting. * :ghissue:`504`: Bug fix float overflow in estimate_sigma * :ghissue:`399`: Multiprocessing runtime error in Windows 64 bit * :ghissue:`383`: typo in multi tensor fit example * :ghissue:`350`: typo in SNR example * :ghissue:`424`: test more python versions with travis * :ghissue:`493`: BF - older C compliers do not have round in math.h, uisng dpy_math instead * :ghissue:`494`: Fix round * :ghissue:`503`: Fixed compatibility issues between vtk 5 and 6 * :ghissue:`500`: SHORE hyp2F1 * :ghissue:`502`: Fix record vtk6 * :ghissue:`498`: DTI `min_signal` * :ghissue:`496`: Revert "BF: supposed fix for the gh-439, but still unable to reproduce O... * :ghissue:`492`: TST - new DTI test to help develop min_signal handling * :ghissue:`471`: Use importlib instead of __import__ * :ghissue:`419`: LiFE * :ghissue:`489`: Fix diffeomorphic registration test failures * :ghissue:`484`: Clear tabs from examples for website * :ghissue:`490`: DOC: corrected typos in the tracking PR * :ghissue:`341`: Traco Redesign * :ghissue:`410`: Faster spherical harmonics implemenation * :ghissue:`483`: NF: Find the closest vertex on a sphere for an input vector. * :ghissue:`487`: Travis Problem * :ghissue:`488`: BF: fix travis version setting * :ghissue:`485`: RF: deleted unused files * :ghissue:`486`: cvxopt is gpl licensed * :ghissue:`482`: Skipping tests for different versions of Scipy for optimize.py * :ghissue:`480`: Enhance SLR to allow for series of registrations * :ghissue:`479`: Report on coverage for old scipy. * :ghissue:`481`: BF - make examples was confusing files with similar names, fixed * :ghissue:`428`: WIP: refactor travis building * :ghissue:`429`: WIP: Refactor travising * :ghissue:`476`: Fix optimize defaults for older scipy versions for L-BFGS-B * :ghissue:`478`: TST: Increase the timeout on the Travis pip install * :ghissue:`477`: MAINT+TST: update minimum nibabel dependency * :ghissue:`475`: Does the optimizer still need `tmp_files`? * :ghissue:`474`: RF: switch travis tests to use virtualenvs * :ghissue:`473`: TST: Make Travis provide verbose test outputs. * :ghissue:`470`: Enhance SLR with applying series of transformations and fix optimize bug for parameter missing in old scipy versions * :ghissue:`472`: ENH: GradientTable now calculates qvalues * :ghissue:`469`: Fix evolution save win32 * :ghissue:`463`: DOC: update RESTORE tutorial to use new noise estimation technique * :ghissue:`466`: BF: cannot quote command for Windows * :ghissue:`461`: Buildbot failures with missing 'nit' key in dipy.core.optimize * :ghissue:`465`: BF: increased SCIPY version definition flag to 0.12 * :ghissue:`462`: BF: fix writing history to file in Python 3 * :ghissue:`433`: Added local variance estimation * :ghissue:`432`: auto estimate the standard deviation globally for nlmeans * :ghissue:`451`: Warning for DTI normalization * :ghissue:`458`: DOC: docstring fixes in dipy/align/crosscorr.pyx * :ghissue:`448`: BF: fix link to npy_math function * :ghissue:`447`: BF: supposed fix for the gh-439, but still unable to reproduce OP. * :ghissue:`443`: Fix buildbots errors introduced with the registration module * :ghissue:`456`: MRG: relax threshold for failing test + cleanup * :ghissue:`455`: Test failure on `master` * :ghissue:`454`: DOC: fix docstring for compile-time checker * :ghissue:`450`: Find if replacing matrix44 from streamlinear with compose_matrix from dipy.core.geometry is a good idea * :ghissue:`453`: BF: refactor conditional compiling again * :ghissue:`446`: Streamline-based Linear Registration * :ghissue:`452`: Replace raise by auto normalization when creating a gradient table with un-normalized bvecs. * :ghissue:`398`: assert AE < 2. failure in test_peak_directions_thorough * :ghissue:`444`: heads up - MKL error in parallel mode * :ghissue:`445`: NF: generate config.pxi file with Cython DEF vars * :ghissue:`440`: DOC - add info on how to change default tempdir (multiprocessing). * :ghissue:`431`: Change the writeable flag back to its original state when finished. * :ghissue:`408`: Symmetric diffeomorphic non-linear registration * :ghissue:`333`: Bundle alignment * :ghissue:`438`: Missing a blank line in examples/tracking_quick_start.py * :ghissue:`426`: nlmeans_3d breaks with mask=None * :ghissue:`405`: fixed frozen windows executable issue * :ghissue:`418`: RF: move script running code into own module * :ghissue:`437`: Update Cython download URL * :ghissue:`435`: BF: replaced non-ascii character in dipy.reconst.dti line 956 * :ghissue:`434`: DOC: References for the DTI ODF calculation. * :ghissue:`425`: NF added class to save streamlines in vtk format * :ghissue:`430`: Revert "Support read-only numpy array." * :ghissue:`427`: Support read-only numpy array. * :ghissue:`421`: Fix nans in gfa * :ghissue:`422`: BF: Use the short version to verify scipy version. * :ghissue:`415`: RF - move around some of the predict stuff * :ghissue:`420`: Rename README.txt to README.rst * :ghissue:`413`: Faster spherical harmonics * :ghissue:`416`: Removed memory_leak unittest in test_strealine.py * :ghissue:`417`: Fix streamlinespeed tests * :ghissue:`411`: Fix memory leak in cython functions length and set_number_of_points * :ghissue:`412`: Use simple multiplication instead exponentiation and pow * :ghissue:`409`: minor corrections to pipe function * :ghissue:`396`: TST : this is not exactly equal on some platforms. * :ghissue:`407`: BF: fixed problem with NANs in odfdeconv * :ghissue:`406`: Revert "Merge pull request #346 from omarocegueda/syn_registration" * :ghissue:`402`: Fix AE test error in test_peak_directions_thorough * :ghissue:`403`: Added mask shape check in tenfit * :ghissue:`346`: Symmetric diffeomorphic non-linear registration * :ghissue:`401`: BF: fix skiptest invocation for missing mpl * :ghissue:`340`: CSD fit issue * :ghissue:`397`: BF: fix import statement for get_cmap * :ghissue:`393`: RF: update Cython dependency * :ghissue:`391`: memory usage: 16GB wasn't sufficient * :ghissue:`382`: Cythonized version of streamlines' resample() and length() functions. * :ghissue:`386`: DOC: Small fix in the xval example. * :ghissue:`385`: cross_validation example doesn't render properly * :ghissue:`335`: Xval * :ghissue:`352`: Fix utils docs and affine * :ghissue:`384`: odf_sh_sharpening function fix and new test * :ghissue:`374`: MRG: bumpy numpy requirement to 1.5 / compat fixes * :ghissue:`381`: Bago fix utils docs and affine * :ghissue:`380`: DOC: Update a few Dipy links to link to the correct repo * :ghissue:`378`: Fvtk cleanup * :ghissue:`379`: fixed typos in shm.py * :ghissue:`376`: BF: Adjust the dimensionality of the peak_values, if provided. * :ghissue:`377`: Demianw fvtk colormap * :ghissue:`339`: FVTK small improvement: Arbitrary matplotlib colormaps can be used to color spherical functions * :ghissue:`373`: Fixed discrepancies between doc and code * :ghissue:`371`: RF: don't use -fopenmp flag if it doesn't work * :ghissue:`372`: BF: set integer type for crossplatform compilation * :ghissue:`337`: Piesno * :ghissue:`370`: Tone down the front page a bit. * :ghissue:`364`: Add the mode param for border management. * :ghissue:`368`: New banner for website * :ghissue:`367`: MRG: refactor API generation for sharing * :ghissue:`359`: cvxopt dependency * :ghissue:`363`: RF: make cvxopt optional for tests * :ghissue:`361`: Matrix size wrong for tracking.utils.connectivity_matrix * :ghissue:`362`: Changes to fix issue #361: matrix sizing in tracking.utils.connectivity_matrix * :ghissue:`360`: Added missing $ sign * :ghissue:`358`: typo in doc * :ghissue:`355`: DOC: Updated API change document to add target function change * :ghissue:`357`: Changed the logo to full black as the one that I sent as suggestion for HBM and ISMRM * :ghissue:`356`: Auto-generate API docs * :ghissue:`349`: Added api changes file to track breaks of backwards compatibility * :ghissue:`348`: Website update * :ghissue:`347`: DOC: Updating citations * :ghissue:`345`: TST: Make travis look at test coverage. * :ghissue:`338`: Add positivity constraint on the propagator * :ghissue:`334`: Fix vec2vec * :ghissue:`343`: Please Ignore this PR! * :ghissue:`324`: Constrained optimisation for SHORE to set E(0)=1 when the CVXOPT package is available * :ghissue:`277`: WIP: PIESNO framework for estimating the underlying std of the gaussian distribution * :ghissue:`336`: Demianw shore e0 constrained * :ghissue:`235`: WIP: Cross-validation * :ghissue:`329`: WIP: Fix vec2vec * :ghissue:`320`: Denoising images using non-local means * :ghissue:`331`: DOC: correct number of seeds in streamline_tools example * :ghissue:`330`: DOC: number of seeds per voxel, inconsistent documentation? * :ghissue:`326`: Fix brain extraction example * :ghissue:`327`: add small and big delta * :ghissue:`323`: Shore pdf grid speed improvement * :ghissue:`319`: DOC: Updated the highlights to promote the release and the upcoming paper * :ghissue:`318`: Corrected some rendering problems with the installation instructions * :ghissue:`317`: BF: more problems with path quoting in windows * :ghissue:`316`: MRG: more fixes for windows script tests * :ghissue:`315`: BF: EuDX odf_vertices param has no default value * :ghissue:`312`: Sphere and default used through the code * :ghissue:`305`: DOC: Some more details in installation instructions. * :ghissue:`314`: BF - callable response does not work * :ghissue:`16`: quickie: 'from raw data to tractographies' documentation implies dipy can't do anything with nonisotropic voxel sizes * :ghissue:`311`: Bf seeds from mask * :ghissue:`307`: Streamline_tools example stops working when I change density from 1 to 2 * :ghissue:`241`: Wrong normalization in peaks_from_model * :ghissue:`248`: Clarify dsi example * :ghissue:`220`: Add ndindex to peaks_from_model * :ghissue:`253`: Parallel peaksFromModel timing out on buildbot * :ghissue:`256`: writing data to /tmp peaks_from_model * :ghissue:`278`: tenmodel.bvec, not existing anymore? * :ghissue:`282`: fvtk documentation is incomprehensible * :ghissue:`228`: buildbot error in mask.py * :ghissue:`197`: DOC: some docstrings are not rendered correctly * :ghissue:`181`: OPT: Change dipy.core.sphere_stats.random_uniform_on_sphere * :ghissue:`177`: Extension test in dipy_fit_tensor seems brittle * :ghissue:`171`: Fix auto_attrs * :ghissue:`31`: Plotting in test suite * :ghissue:`42`: RuntimeWarning in dti.py * :ghissue:`43`: Problems with edges and faces in create_half_unit_sphere * :ghissue:`53`: Is ravel_multi_index a new thing? * :ghissue:`64`: Fix examples that rely on old API and removed data-sets * :ghissue:`67`: viz.projections.sph_projection is broken * :ghissue:`92`: dti.fa division by 0 warning in tests * :ghissue:`306`: Tests fail after windows 32 bit installation and running import dipy; dipy.test() * :ghissue:`310`: Windows test failure for tracking test_rmi * :ghissue:`309`: MRG: Windows test fixes * :ghissue:`308`: typos + pep stuf * :ghissue:`303`: BF: try and fix nibabel setup requirement * :ghissue:`304`: Update README.txt * :ghissue:`302`: Time for 0.8.0.dev! * :ghissue:`299`: BF: Put back utils.length. * :ghissue:`301`: Updated info.py and copyright year * :ghissue:`300`: Bf fetcher bug on windows * :ghissue:`298`: TST - rework tests so that we do not need to download any data * :ghissue:`290`: DOC: Started generating 0.7 release notes. dipy-0.10.1/doc/release0.9.rst000066400000000000000000000122701263041327500157110ustar00rootroot00000000000000.. _release0.9: =================================== Release notes for Dipy version 0.9 =================================== GitHub stats for 2015/01/06 - 2015/03/18 (tag: 0.8.0) The following 12 authors contributed 235 commits. * Ariel Rokem * Bago Amirbekian * Chantal Tax * Eleftherios Garyfallidis * Gabriel Girard * Marc-Alexandre Côté * Matthew Brett * Maxime Descoteaux * Omar Ocegueda * Qiyuan Tian * Samuel St-Jean * Stefan van der Walt We closed a total of 80 issues, 35 pull requests and 45 regular issues; this is the full list (generated with the script :file:`tools/github_stats.py`): Pull Requests (35): * :ghpull:`594`: DOC + PEP8: Mostly just line-wrapping. * :ghpull:`575`: Speeding up LiFE * :ghpull:`595`: BF: csd predict multi * :ghpull:`599`: BF: use dpy_rint instead of round for Windows * :ghpull:`603`: Fix precision error in test_center_of_mass * :ghpull:`601`: BF: Some versions (<0.18) of numpy don't have nanmean. * :ghpull:`598`: Fixed undetected compilation errors prior to Cython 0.22 * :ghpull:`596`: DOC + PEP8: Clean up a few typos, PEP8 things, etc. * :ghpull:`593`: DOC: fixed some typos and added a notes section to make the document mor... * :ghpull:`588`: Nf csd calibration * :ghpull:`565`: Adding New Tissue Classifiers * :ghpull:`589`: DOC: minor typographic corrections * :ghpull:`584`: DOC: explain the changes made to the integration lenght in GQI2. * :ghpull:`568`: Quickbundles2 * :ghpull:`559`: SFM for multi b-value data * :ghpull:`586`: BF: all_tensor_evecs should rotate from eye(3) to e0. * :ghpull:`574`: Affine registration PR1: Transforms. * :ghpull:`581`: BF: Normalization of GQI2 `gqi_vector`. * :ghpull:`580`: docstring for tensor fit was wrong * :ghpull:`579`: RF: Compatibility with scipy 0.11 * :ghpull:`577`: BF: update cython signatures with except values * :ghpull:`553`: RF: use cholesky to solve csd * :ghpull:`552`: Small refactor of viz.regtools * :ghpull:`569`: DOC: How to install vtk using conda. * :ghpull:`571`: Bf cart2sphere * :ghpull:`557`: NF: geodesic anisotropy * :ghpull:`566`: DOC: Some small fixes to the documentation of SFM. * :ghpull:`563`: RF: Cleanup functions that refer to some data that no longer exists here... * :ghpull:`564`: fixed typo * :ghpull:`561`: Added option to return the number of voxels fitting the fa threshold * :ghpull:`554`: DOC: Link to @francopestilli's matlab implementation of LiFE. * :ghpull:`556`: RF: change config variable to C define * :ghpull:`550`: Added non-local means in Changelog * :ghpull:`551`: Website update * :ghpull:`549`: DOC: Update download link. Issues (45): * :ghissue:`594`: DOC + PEP8: Mostly just line-wrapping. * :ghissue:`575`: Speeding up LiFE * :ghissue:`595`: BF: csd predict multi * :ghissue:`599`: BF: use dpy_rint instead of round for Windows * :ghissue:`603`: Fix precision error in test_center_of_mass * :ghissue:`602`: Precision error in test_feature_center_of_mass on 32-bit Linux * :ghissue:`601`: BF: Some versions (<0.18) of numpy don't have nanmean. * :ghissue:`598`: Fixed undetected compilation errors prior to Cython 0.22 * :ghissue:`597`: tracking module not building on cython 0.22 * :ghissue:`596`: DOC + PEP8: Clean up a few typos, PEP8 things, etc. * :ghissue:`404`: A better way to create a response function for CSD * :ghissue:`593`: DOC: fixed some typos and added a notes section to make the document mor... * :ghissue:`588`: Nf csd calibration * :ghissue:`565`: Adding New Tissue Classifiers * :ghissue:`589`: DOC: minor typographic corrections * :ghissue:`584`: DOC: explain the changes made to the integration lenght in GQI2. * :ghissue:`568`: Quickbundles2 * :ghissue:`559`: SFM for multi b-value data * :ghissue:`586`: BF: all_tensor_evecs should rotate from eye(3) to e0. * :ghissue:`585`: NF: Initial file strcuture skeleton for amico implementation * :ghissue:`574`: Affine registration PR1: Transforms. * :ghissue:`581`: BF: Normalization of GQI2 `gqi_vector`. * :ghissue:`580`: docstring for tensor fit was wrong * :ghissue:`579`: RF: Compatibility with scipy 0.11 * :ghissue:`577`: BF: update cython signatures with except values * :ghissue:`553`: RF: use cholesky to solve csd * :ghissue:`552`: Small refactor of viz.regtools * :ghissue:`569`: DOC: How to install vtk using conda. * :ghissue:`571`: Bf cart2sphere * :ghissue:`557`: NF: geodesic anisotropy * :ghissue:`567`: NF - added function to fetch/read stanford pve maps * :ghissue:`566`: DOC: Some small fixes to the documentation of SFM. * :ghissue:`414`: NF - added anatomically-constrained tractography (ACT) tissue classifier * :ghissue:`560`: dipy.data: three_shells_voxels is not there * :ghissue:`563`: RF: Cleanup functions that refer to some data that no longer exists here... * :ghissue:`564`: fixed typo * :ghissue:`561`: Added option to return the number of voxels fitting the fa threshold * :ghissue:`554`: DOC: Link to @francopestilli's matlab implementation of LiFE. * :ghissue:`556`: RF: change config variable to C define * :ghissue:`555`: Use chatroom for dev communications * :ghissue:`354`: Test failures of 0.7.1 on wheezy and squeeze 32bit * :ghissue:`532`: SPARC buildbot fail in multiprocessing test * :ghissue:`550`: Added non-local means in Changelog * :ghissue:`551`: Website update * :ghissue:`549`: DOC: Update download link. dipy-0.10.1/doc/sphinxext/000077500000000000000000000000001263041327500153405ustar00rootroot00000000000000dipy-0.10.1/doc/sphinxext/docscrape.py000066400000000000000000000361011263041327500176560ustar00rootroot00000000000000"""Extract reference documentation from the NumPy source tree. """ import inspect import textwrap import re import pydoc from StringIO import StringIO from warnings import warn class Reader(object): """A line-based string reader. """ def __init__(self, data): """ Parameters ---------- data : str String with lines separated by '\n'. """ if isinstance(data,list): self._str = data else: self._str = data.split('\n') # store string as list of lines self.reset() def __getitem__(self, n): return self._str[n] def reset(self): self._l = 0 # current line nr def read(self): if not self.eof(): out = self[self._l] self._l += 1 return out else: return '' def seek_next_non_empty_line(self): for l in self[self._l:]: if l.strip(): break else: self._l += 1 def eof(self): return self._l >= len(self._str) def read_to_condition(self, condition_func): start = self._l for line in self[start:]: if condition_func(line): return self[start:self._l] self._l += 1 if self.eof(): return self[start:self._l+1] return [] def read_to_next_empty_line(self): self.seek_next_non_empty_line() def is_empty(line): return not line.strip() return self.read_to_condition(is_empty) def read_to_next_unindented_line(self): def is_unindented(line): return (line.strip() and (len(line.lstrip()) == len(line))) return self.read_to_condition(is_unindented) def peek(self,n=0): if self._l + n < len(self._str): return self[self._l + n] else: return '' def is_empty(self): return not ''.join(self._str).strip() class NumpyDocString(object): def __init__(self, docstring, config={}): docstring = textwrap.dedent(docstring).split('\n') self._doc = Reader(docstring) self._parsed_data = { 'Signature': '', 'Summary': [''], 'Extended Summary': [], 'Parameters': [], 'Returns': [], 'Raises': [], 'Warns': [], 'Other Parameters': [], 'Attributes': [], 'Methods': [], 'See Also': [], 'Notes': [], 'Warnings': [], 'References': '', 'Examples': '', 'index': {} } self._parse() def __getitem__(self,key): return self._parsed_data[key] def __setitem__(self,key,val): if not self._parsed_data.has_key(key): warn("Unknown section %s" % key) else: self._parsed_data[key] = val def _is_at_section(self): self._doc.seek_next_non_empty_line() if self._doc.eof(): return False l1 = self._doc.peek().strip() # e.g. Parameters if l1.startswith('.. index::'): return True l2 = self._doc.peek(1).strip() # ---------- or ========== return l2.startswith('-'*len(l1)) or l2.startswith('='*len(l1)) def _strip(self,doc): i = 0 j = 0 for i,line in enumerate(doc): if line.strip(): break for j,line in enumerate(doc[::-1]): if line.strip(): break return doc[i:len(doc)-j] def _read_to_next_section(self): section = self._doc.read_to_next_empty_line() while not self._is_at_section() and not self._doc.eof(): if not self._doc.peek(-1).strip(): # previous line was empty section += [''] section += self._doc.read_to_next_empty_line() return section def _read_sections(self): while not self._doc.eof(): data = self._read_to_next_section() name = data[0].strip() if name.startswith('..'): # index section yield name, data[1:] elif len(data) < 2: yield StopIteration else: yield name, self._strip(data[2:]) def _parse_param_list(self,content): r = Reader(content) params = [] while not r.eof(): header = r.read().strip() if ' : ' in header: arg_name, arg_type = header.split(' : ')[:2] else: arg_name, arg_type = header, '' desc = r.read_to_next_unindented_line() desc = dedent_lines(desc) params.append((arg_name,arg_type,desc)) return params _name_rgx = re.compile(r"^\s*(:(?P\w+):`(?P[a-zA-Z0-9_.-]+)`|" r" (?P[a-zA-Z0-9_.-]+))\s*", re.X) def _parse_see_also(self, content): """ func_name : Descriptive text continued text another_func_name : Descriptive text func_name1, func_name2, :meth:`func_name`, func_name3 """ items = [] def parse_item_name(text): """Match ':role:`name`' or 'name'""" m = self._name_rgx.match(text) if m: g = m.groups() if g[1] is None: return g[3], None else: return g[2], g[1] raise ValueError("%s is not a item name" % text) def push_item(name, rest): if not name: return name, role = parse_item_name(name) items.append((name, list(rest), role)) del rest[:] current_func = None rest = [] for line in content: if not line.strip(): continue m = self._name_rgx.match(line) if m and line[m.end():].strip().startswith(':'): push_item(current_func, rest) current_func, line = line[:m.end()], line[m.end():] rest = [line.split(':', 1)[1].strip()] if not rest[0]: rest = [] elif not line.startswith(' '): push_item(current_func, rest) current_func = None if ',' in line: for func in line.split(','): if func.strip(): push_item(func, []) elif line.strip(): current_func = line elif current_func is not None: rest.append(line.strip()) push_item(current_func, rest) return items def _parse_index(self, section, content): """ .. index: default :refguide: something, else, and more """ def strip_each_in(lst): return [s.strip() for s in lst] out = {} section = section.split('::') if len(section) > 1: out['default'] = strip_each_in(section[1].split(','))[0] for line in content: line = line.split(':') if len(line) > 2: out[line[1]] = strip_each_in(line[2].split(',')) return out def _parse_summary(self): """Grab signature (if given) and summary""" if self._is_at_section(): return summary = self._doc.read_to_next_empty_line() summary_str = " ".join([s.strip() for s in summary]).strip() if re.compile('^([\w., ]+=)?\s*[\w\.]+\(.*\)$').match(summary_str): self['Signature'] = summary_str if not self._is_at_section(): self['Summary'] = self._doc.read_to_next_empty_line() else: self['Summary'] = summary if not self._is_at_section(): self['Extended Summary'] = self._read_to_next_section() def _parse(self): self._doc.reset() self._parse_summary() for (section,content) in self._read_sections(): if not section.startswith('..'): section = ' '.join([s.capitalize() for s in section.split(' ')]) if section in ('Parameters', 'Returns', 'Raises', 'Warns', 'Other Parameters', 'Attributes', 'Methods'): self[section] = self._parse_param_list(content) elif section.startswith('.. index::'): self['index'] = self._parse_index(section, content) elif section == 'See Also': self['See Also'] = self._parse_see_also(content) else: self[section] = content # string conversion routines def _str_header(self, name, symbol='-'): return [name, len(name)*symbol] def _str_indent(self, doc, indent=4): out = [] for line in doc: out += [' '*indent + line] return out def _str_signature(self): if self['Signature']: return [self['Signature'].replace('*','\*')] + [''] else: return [''] def _str_summary(self): if self['Summary']: return self['Summary'] + [''] else: return [] def _str_extended_summary(self): if self['Extended Summary']: return self['Extended Summary'] + [''] else: return [] def _str_param_list(self, name): out = [] if self[name]: out += self._str_header(name) for param,param_type,desc in self[name]: out += ['%s : %s' % (param, param_type)] out += self._str_indent(desc) out += [''] return out def _str_section(self, name): out = [] if self[name]: out += self._str_header(name) out += self[name] out += [''] return out def _str_see_also(self, func_role): if not self['See Also']: return [] out = [] out += self._str_header("See Also") last_had_desc = True for func, desc, role in self['See Also']: if role: link = ':%s:`%s`' % (role, func) elif func_role: link = ':%s:`%s`' % (func_role, func) else: link = "`%s`_" % func if desc or last_had_desc: out += [''] out += [link] else: out[-1] += ", %s" % link if desc: out += self._str_indent([' '.join(desc)]) last_had_desc = True else: last_had_desc = False out += [''] return out def _str_index(self): idx = self['index'] out = [] out += ['.. index:: %s' % idx.get('default','')] for section, references in idx.iteritems(): if section == 'default': continue out += [' :%s: %s' % (section, ', '.join(references))] return out def __str__(self, func_role=''): out = [] out += self._str_signature() out += self._str_summary() out += self._str_extended_summary() for param_list in ('Parameters', 'Returns', 'Other Parameters', 'Raises', 'Warns'): out += self._str_param_list(param_list) out += self._str_section('Warnings') out += self._str_see_also(func_role) for s in ('Notes','References','Examples'): out += self._str_section(s) for param_list in ('Attributes', 'Methods'): out += self._str_param_list(param_list) out += self._str_index() return '\n'.join(out) def indent(str,indent=4): indent_str = ' '*indent if str is None: return indent_str lines = str.split('\n') return '\n'.join(indent_str + l for l in lines) def dedent_lines(lines): """Deindent a list of lines maximally""" return textwrap.dedent("\n".join(lines)).split("\n") def header(text, style='-'): return text + '\n' + style*len(text) + '\n' class FunctionDoc(NumpyDocString): def __init__(self, func, role='func', doc=None, config={}): self._f = func self._role = role # e.g. "func" or "meth" if doc is None: if func is None: raise ValueError("No function or docstring given") doc = inspect.getdoc(func) or '' NumpyDocString.__init__(self, doc) if not self['Signature'] and func is not None: func, func_name = self.get_func() try: # try to read signature argspec = inspect.getargspec(func) argspec = inspect.formatargspec(*argspec) argspec = argspec.replace('*','\*') signature = '%s%s' % (func_name, argspec) except TypeError, e: signature = '%s()' % func_name self['Signature'] = signature def get_func(self): func_name = getattr(self._f, '__name__', self.__class__.__name__) if inspect.isclass(self._f): func = getattr(self._f, '__call__', self._f.__init__) else: func = self._f return func, func_name def __str__(self): out = '' func, func_name = self.get_func() signature = self['Signature'].replace('*', '\*') roles = {'func': 'function', 'meth': 'method'} if self._role: if not roles.has_key(self._role): print "Warning: invalid role %s" % self._role out += '.. %s:: %s\n \n\n' % (roles.get(self._role,''), func_name) out += super(FunctionDoc, self).__str__(func_role=self._role) return out class ClassDoc(NumpyDocString): extra_public_methods = ['__call__'] def __init__(self, cls, doc=None, modulename='', func_doc=FunctionDoc, config={}): if not inspect.isclass(cls) and cls is not None: raise ValueError("Expected a class or None, but got %r" % cls) self._cls = cls if modulename and not modulename.endswith('.'): modulename += '.' self._mod = modulename if doc is None: if cls is None: raise ValueError("No class or documentation string given") doc = pydoc.getdoc(cls) NumpyDocString.__init__(self, doc) if config.get('show_class_members', True): if not self['Methods']: self['Methods'] = [(name, '', '') for name in sorted(self.methods)] if not self['Attributes']: self['Attributes'] = [(name, '', '') for name in sorted(self.properties)] @property def methods(self): if self._cls is None: return [] return [name for name,func in inspect.getmembers(self._cls) if ((not name.startswith('_') or name in self.extra_public_methods) and callable(func))] @property def properties(self): if self._cls is None: return [] return [name for name,func in inspect.getmembers(self._cls) if not name.startswith('_') and func is None] dipy-0.10.1/doc/sphinxext/docscrape_sphinx.py000066400000000000000000000171171263041327500212550ustar00rootroot00000000000000import re, inspect, textwrap, pydoc import sphinx from docscrape import NumpyDocString, FunctionDoc, ClassDoc class SphinxDocString(NumpyDocString): def __init__(self, docstring, config={}): self.use_plots = config.get('use_plots', False) NumpyDocString.__init__(self, docstring, config=config) # string conversion routines def _str_header(self, name, symbol='`'): return ['.. rubric:: ' + name, ''] def _str_field_list(self, name): return [':' + name + ':'] def _str_indent(self, doc, indent=4): out = [] for line in doc: out += [' '*indent + line] return out def _str_signature(self): return [''] if self['Signature']: return ['``%s``' % self['Signature']] + [''] else: return [''] def _str_summary(self): return self['Summary'] + [''] def _str_extended_summary(self): return self['Extended Summary'] + [''] def _str_param_list(self, name): out = [] if self[name]: out += self._str_field_list(name) out += [''] for param,param_type,desc in self[name]: out += self._str_indent(['**%s** : %s' % (param.strip(), param_type)]) out += [''] out += self._str_indent(desc,8) out += [''] return out @property def _obj(self): if hasattr(self, '_cls'): return self._cls elif hasattr(self, '_f'): return self._f return None def _str_member_list(self, name): """ Generate a member listing, autosummary:: table where possible, and a table where not. """ out = [] if self[name]: out += ['.. rubric:: %s' % name, ''] prefix = getattr(self, '_name', '') if prefix: prefix = '~%s.' % prefix autosum = [] others = [] for param, param_type, desc in self[name]: param = param.strip() if not self._obj or hasattr(self._obj, param): autosum += [" %s%s" % (prefix, param)] else: others.append((param, param_type, desc)) if autosum: out += ['.. autosummary::', ' :toctree:', ''] out += autosum if others: maxlen_0 = max([len(x[0]) for x in others]) maxlen_1 = max([len(x[1]) for x in others]) hdr = "="*maxlen_0 + " " + "="*maxlen_1 + " " + "="*10 fmt = '%%%ds %%%ds ' % (maxlen_0, maxlen_1) n_indent = maxlen_0 + maxlen_1 + 4 out += [hdr] for param, param_type, desc in others: out += [fmt % (param.strip(), param_type)] out += self._str_indent(desc, n_indent) out += [hdr] out += [''] return out def _str_section(self, name): out = [] if self[name]: out += self._str_header(name) out += [''] content = textwrap.dedent("\n".join(self[name])).split("\n") out += content out += [''] return out def _str_see_also(self, func_role): out = [] if self['See Also']: see_also = super(SphinxDocString, self)._str_see_also(func_role) out = ['.. seealso::', ''] out += self._str_indent(see_also[2:]) return out def _str_warnings(self): out = [] if self['Warnings']: out = ['.. warning::', ''] out += self._str_indent(self['Warnings']) return out def _str_index(self): idx = self['index'] out = [] if len(idx) == 0: return out out += ['.. index:: %s' % idx.get('default','')] for section, references in idx.iteritems(): if section == 'default': continue elif section == 'refguide': out += [' single: %s' % (', '.join(references))] else: out += [' %s: %s' % (section, ','.join(references))] return out def _str_references(self): out = [] if self['References']: out += self._str_header('References') if isinstance(self['References'], str): self['References'] = [self['References']] out.extend(self['References']) out += [''] # Latex collects all references to a separate bibliography, # so we need to insert links to it if sphinx.__version__ >= "0.6": out += ['.. only:: latex',''] else: out += ['.. latexonly::',''] items = [] for line in self['References']: m = re.match(r'.. \[([a-z0-9._-]+)\]', line, re.I) if m: items.append(m.group(1)) out += [' ' + ", ".join(["[%s]_" % item for item in items]), ''] return out def _str_examples(self): examples_str = "\n".join(self['Examples']) if (self.use_plots and 'import matplotlib' in examples_str and 'plot::' not in examples_str): out = [] out += self._str_header('Examples') out += ['.. plot::', ''] out += self._str_indent(self['Examples']) out += [''] return out else: return self._str_section('Examples') def __str__(self, indent=0, func_role="obj"): out = [] out += self._str_signature() out += self._str_index() + [''] out += self._str_summary() out += self._str_extended_summary() for param_list in ('Parameters', 'Returns', 'Other Parameters', 'Raises', 'Warns'): out += self._str_param_list(param_list) out += self._str_warnings() out += self._str_see_also(func_role) out += self._str_section('Notes') out += self._str_references() out += self._str_examples() for param_list in ('Attributes', 'Methods'): out += self._str_member_list(param_list) out = self._str_indent(out,indent) return '\n'.join(out) class SphinxFunctionDoc(SphinxDocString, FunctionDoc): def __init__(self, obj, doc=None, config={}): self.use_plots = config.get('use_plots', False) FunctionDoc.__init__(self, obj, doc=doc, config=config) class SphinxClassDoc(SphinxDocString, ClassDoc): def __init__(self, obj, doc=None, func_doc=None, config={}): self.use_plots = config.get('use_plots', False) ClassDoc.__init__(self, obj, doc=doc, func_doc=None, config=config) class SphinxObjDoc(SphinxDocString): def __init__(self, obj, doc=None, config={}): self._f = obj SphinxDocString.__init__(self, doc, config=config) def get_doc_object(obj, what=None, doc=None, config={}): if what is None: if inspect.isclass(obj): what = 'class' elif inspect.ismodule(obj): what = 'module' elif callable(obj): what = 'function' else: what = 'object' if what == 'class': return SphinxClassDoc(obj, func_doc=SphinxFunctionDoc, doc=doc, config=config) elif what in ('function', 'method'): return SphinxFunctionDoc(obj, doc=doc, config=config) else: if doc is None: doc = pydoc.getdoc(obj) return SphinxObjDoc(obj, doc, config=config) dipy-0.10.1/doc/sphinxext/github.py000066400000000000000000000123771263041327500172060ustar00rootroot00000000000000"""Define text roles for GitHub * ghissue - Issue * ghpull - Pull Request * ghuser - User Adapted from bitbucket example here: https://bitbucket.org/birkenfeld/sphinx-contrib/src/tip/bitbucket/sphinxcontrib/bitbucket.py Authors ------- * Doug Hellmann * Min RK """ # # Original Copyright (c) 2010 Doug Hellmann. All rights reserved. # from docutils import nodes, utils from docutils.parsers.rst.roles import set_classes def make_link_node(rawtext, app, type, slug, options): """Create a link to a github resource. :param rawtext: Text being replaced with link node. :param app: Sphinx application context :param type: Link type (issues, changeset, etc.) :param slug: ID of the thing to link to :param options: Options dictionary passed to role func. """ try: base = app.config.github_project_url if not base: raise AttributeError if not base.endswith('/'): base += '/' except AttributeError, err: raise ValueError('github_project_url configuration value is not set (%s)' % str(err)) ref = base + type + '/' + slug + '/' set_classes(options) prefix = "#" if type == 'pull': prefix = "PR " + prefix node = nodes.reference(rawtext, prefix + utils.unescape(slug), refuri=ref, **options) return node def ghissue_role(name, rawtext, text, lineno, inliner, options={}, content=[]): """Link to a GitHub issue. Returns 2 part tuple containing list of nodes to insert into the document and a list of system messages. Both are allowed to be empty. :param name: The role name used in the document. :param rawtext: The entire markup snippet, with role. :param text: The text marked with the role. :param lineno: The line number where rawtext appears in the input. :param inliner: The inliner instance that called us. :param options: Directive options for customization. :param content: The directive content for customization. """ try: issue_num = int(text) if issue_num <= 0: raise ValueError except ValueError: msg = inliner.reporter.error( 'GitHub issue number must be a number greater than or equal to 1; ' '"%s" is invalid.' % text, line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] app = inliner.document.settings.env.app #app.info('issue %r' % text) if 'pull' in name.lower(): category = 'pull' elif 'issue' in name.lower(): category = 'issues' else: msg = inliner.reporter.error( 'GitHub roles include "ghpull" and "ghissue", ' '"%s" is invalid.' % name, line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] node = make_link_node(rawtext, app, category, str(issue_num), options) return [node], [] def ghuser_role(name, rawtext, text, lineno, inliner, options={}, content=[]): """Link to a GitHub user. Returns 2 part tuple containing list of nodes to insert into the document and a list of system messages. Both are allowed to be empty. :param name: The role name used in the document. :param rawtext: The entire markup snippet, with role. :param text: The text marked with the role. :param lineno: The line number where rawtext appears in the input. :param inliner: The inliner instance that called us. :param options: Directive options for customization. :param content: The directive content for customization. """ app = inliner.document.settings.env.app #app.info('user link %r' % text) ref = 'https://www.github.com/' + text node = nodes.reference(rawtext, text, refuri=ref, **options) return [node], [] def ghcommit_role(name, rawtext, text, lineno, inliner, options={}, content=[]): """Link to a GitHub commit. Returns 2 part tuple containing list of nodes to insert into the document and a list of system messages. Both are allowed to be empty. :param name: The role name used in the document. :param rawtext: The entire markup snippet, with role. :param text: The text marked with the role. :param lineno: The line number where rawtext appears in the input. :param inliner: The inliner instance that called us. :param options: Directive options for customization. :param content: The directive content for customization. """ app = inliner.document.settings.env.app #app.info('user link %r' % text) try: base = app.config.github_project_url if not base: raise AttributeError if not base.endswith('/'): base += '/' except AttributeError, err: raise ValueError('github_project_url configuration value is not set (%s)' % str(err)) ref = base + text node = nodes.reference(rawtext, text[:6], refuri=ref, **options) return [node], [] def setup(app): """Install the plugin. :param app: Sphinx application context. """ app.info('Initializing GitHub plugin') app.add_role('ghissue', ghissue_role) app.add_role('ghpull', ghissue_role) app.add_role('ghuser', ghuser_role) app.add_role('ghcommit', ghcommit_role) app.add_config_value('github_project_url', None, 'env') return dipy-0.10.1/doc/sphinxext/math_dollar.py000066400000000000000000000037731263041327500202120ustar00rootroot00000000000000import re def dollars_to_math(source): r""" Replace dollar signs with backticks. More precisely, do a regular expression search. Replace a plain dollar sign ($) by a backtick (`). Replace an escaped dollar sign (\$) by a dollar sign ($). Don't change a dollar sign preceded or followed by a backtick (`$ or $`), because of strings like "``$HOME``". Don't make any changes on lines starting with spaces, because those are indented and hence part of a block of code or examples. This also doesn't replaces dollar signs enclosed in curly braces, to avoid nested math environments, such as :: $f(n) = 0 \text{ if $n$ is prime}$ Thus the above line would get changed to `f(n) = 0 \text{ if $n$ is prime}` """ s = "\n".join(source) if s.find("$") == -1: return # This searches for "$blah$" inside a pair of curly braces -- # don't change these, since they're probably coming from a nested # math environment. So for each match, we replace it with a temporary # string, and later on we substitute the original back. global _data _data = {} def repl(matchobj): global _data s = matchobj.group(0) t = "___XXX_REPL_%d___" % len(_data) _data[t] = s return t s = re.sub(r"({[^{}$]*\$[^{}$]*\$[^{}]*})", repl, s) # matches $...$ dollars = re.compile(r"(?` and algorithms which are provided in Dipy_: - Reconstruction algorithms: CSD, DSI, GQI, DTI, DKI, QBI, SHORE and MAPMRI. - Fiber tracking algorithms: deterministic and probabilistic. - Simple interactive visualization of ODFs and streamlines. - Apply different operations on streamlines (selection, resampling, registration). - Simplify large datasets of streamlines using QuickBundles clustering. - Reslice datasets with anisotropic voxels to isotropic. - Calculate distances/correspondences between streamlines. - Deal with huge streamline datasets without memory restrictions (using the .dpy file format). - Visualize streamlines in the same space as anatomical images. With the help of some external tools you can also: - Read many different file formats e.g. Trackvis or Nifti (with nibabel). - Examine your datasets interactively (with ipython). For more information on specific algorithms we recommend starting by looking at Dipy's :ref:`gallery ` of examples. For a full list of the features implemented in the most recent release cycle, check out the release notes. .. toctree:: :maxdepth: 1 release0.10 release0.9 release0.8 release0.7 release0.6 ================= Systems supported ================= Dipy_ is multiplatform and will run under any standard operating systems such as *Windows*, *Linux* and *Mac OS X*. Every single new code addition is being tested on a number of different builbots and can be monitored online `here `_. .. include:: links_names.inc dipy-0.10.1/doc/subscribe.rst000066400000000000000000000011001263041327500160110ustar00rootroot00000000000000.. _subscribe: ========= Subscribe ========= Dipy_ is a part of the Nipy_ community and we are happy to share the same e-mail list. This makes sense as we can share ideas with a broader community and boost collaboration across neuroimagers. If you want to post to the list you will need first to subscribe to the `nipy mailing list`_. We suggest to begin the subject of your e-mail with ``[Dipy]``. This will help us respond faster to your questions. Additional help can be found on the Neurostars_ website, or on the `dipy gitter`_ channel. .. include:: links_names.inc dipy-0.10.1/doc/theory/000077500000000000000000000000001263041327500146205ustar00rootroot00000000000000dipy-0.10.1/doc/theory/b_and_q.rst000066400000000000000000000123271263041327500167420ustar00rootroot00000000000000.. _b-and-q: ========================= DIY Stuff about b and q ========================= This is a short note to explain the nature of the ``B_matrix`` found in the Siemens private (CSA) fields of the DICOM headers of a diffusion weighted acquisition. We trying to explain the relationship between the ``B_matrix`` and the *b value* and the *gradient vector*. The acquisition is made with a planned (requested) $b$-value - say $b_{req} = 1000$, and with a requested gradient direction $\mathbf{g}_{req} = [g_x, g_y, g_z]$ (supposedly a unit vector) and peak amplitude $G$. When the sequence runs the gradient is modulated by an amplitude envelope $\rho(t)$ with $\max |\rho(t)| = 1$ so that the time course of the gradient is $G\rho(t)\mathbf{g}.$ $G$ is measured in units of $T \mathrm{mm}^-1.$ This leads to an important temporal weighting parameter of the acquisition: .. math:: R = \int_0^T ( \int_0^t \rho ( \tau ) \, d{ \tau } )^2 \, d{t}. (See Basser, Matiello and LeBihan, 1994.) Another formulation involves the introduction of `k-space`. In standard in-plane MR image encoding .. math:: \mathbf{k} = \gamma \int \mathbf{g}(t)dt. For the classical Stejskal and Tanner pulsed gradient spin echo (PGSE) paradigm where two rectangular pulses of width $\delta$ seconds are spaced with their onsets $\Delta$ seconds apart $R = \Delta (\Delta-\delta/3)^2.$ The units of $R$ are $s^3$. The $b$-matrix has entries .. math:: b_{ij} = \gamma^2 G^2 g_i g_j R, where $\gamma$ is the gyromagnetic radius (units $\mathrm{radians}.\mathrm{seconds}^{-1}.T^{-1}$) and $i$ and $j$ are axis direcrtions from $x,y,z$ . The units of the B-matrix are $\mathrm{radians}^2 . \mathrm{seconds} . \mathrm{mm}^{-2}.$ .. math:: \mathbf{B} = \gamma^2 G^2 R \mathbf{g} \mathbf{g}^T. The b-value for the acquisition is the trace of $\mathbf{B}$ and is given by .. math:: b = \gamma^2 G^2 R \|\mathbf{g}\|^2 = \gamma^2 G^2 R. ================================ The B matrix and Siemens DICOM ================================ Though the Stejskal and Tanner formula is available for the classic PGSE sequence, a different sequence may be used (e.g. TRSE on Siemens Trio), and anyway the ramps up and down on the gradient field will not be rectangular. The Siemens scanner software calculates the actual values of the $b_{ij}$ by numerical integration of the formula above for $R$. These values are in the form of the 6 'B-matrix' values $[b_{xx}, b_{xy}, b_{xz}, b_{yy}, b_{yz}, b_{zz}]$. In this form they are suitable for use in a least squares estimation of the diffusion tensor via the equations across the set of acquisitions: .. math:: \log(A(\mathbf{q})/A(0)) = -(b_{xx}D_{xx} + 2b_{xy}D_{xy} + 2b_{xz}D_{xz} + \ b_{yy}D_{yy} + 2b_{yz}D_{yz} + b_{zz}D_{zz}) The gradient field typically stays in the one gradient direction, in this case the relationship between $b$, $\mathbf{g}$ and the $b_{ij}$ is as follows. If we fill out the symmetric B-matrix as: .. math:: \mathbf{B} = \begin{pmatrix} b_{xx} & b_{yx} & b_{yz}\\ b_{xy} & b_{yy} & b_{xz}\\ b_{xz} & b_{yz} & b_{zz} \end{pmatrix} then $\mathbf{B}$ is equal to the rank 1 tensor $\gamma^2 G^2 R \mathbf{g} \mathbf{g}^T$. By performing an eigenvalue and eigenvector decomposition of $\mathbf{B}$ we obtain .. math:: \mathbf{B} = \lambda_1\mathbf{v}_1\mathbf{v}_1^T + \lambda_2\mathbf{v}_2\mathbf{v}_2^T + \lambda_3\mathbf{v}_3\mathbf{v}_3^T, where only one of the $\lambda_i$, say $\lambda_1$, is (effectively) non-zero. (Because the gradient is always a multiple of a constant direction $\mathbf{B}$ is a effectively a rank 1 tensor.) Then $\mathbf{g} = \pm\mathbf{v}_1$, and $b = \gamma^2 G^2 R = \lambda_1$. The ``b-vector`` $\mathbf{b}$ is given by: .. math:: \mathbf{b}_{\mathrm{actual}} = \gamma^2 G^2 R \mathbf{g}_{\mathrm{actual}} = \lambda_1 \mathbf{v}_1. Once we have $\mathbf{b}_{actual}$ we can calculate $b_{actual} = \|\mathbf{b}_{actual}\|$ and $\mathbf{g}_{actual} = \mathbf{b}_{actual} / b_{actual}$. Various sofware packages (e.g. FSL's DFT-DTIFIT) expect to get N x 3 and N x 1 arrays of $\mathbf{g}_{actual}$ (``bvecs``) and $b_{actual}$ values (``bvals``) as their inputs. ======================= ... and what about 'q'? ======================= Callaghan, Eccles and Xia (1988) showed that the signal from the narrow pulse PGSE paradigm measured the Fourier transform of the diffusion displacement propagator. Propagation space is measured in displacement per unit time $(\mathrm{mm}.\mathrm{seconds}^{-1})$. They named the reciprocal space ``q-space`` with units of $\mathrm{seconds}.\mathrm{mm}^{-1}$. .. math:: q = \gamma \delta G /{2\pi} .. math:: b = 4 \pi^2 q^2 \Delta Diffusion spectroscopy measures signal over a wide range of $b$-values (or $q$-values) and diffusion times ($\Delta$) and performs a $q$-space analysis (Fourier transform of the diffusion signal decay). There remains a bit of mystery as to how $\mathbf{q}$ (as a vector in $q$-space) is specified for other paradigms. We think that (a) it only matters up to a scale factor, and (b) we can loosely identify $\mathbf{q}$ with $b\mathbf{g}$, where $\mathbf{g}$ is the unit vector in the gradient direction. dipy-0.10.1/doc/theory/bmatrix.rst000066400000000000000000000061471263041327500170300ustar00rootroot00000000000000================================ The B matrix and Siemens DICOM ================================ This is a short note to explain the nature of the ``B_matrix`` found in the Siemens private (CSA) fields of the DICOM headers of a diffusion weighted acquisition. We trying to explain the relationship between the ``B_matrix`` and the *b value* and the *gradient vector*. The acquisition is made with a planned (requested) b value - say $b_{req} = 1000$, and with a requested gradient direction $\mathbf{g}_{req} = [g_x, g_y, g_z]$ (supposedly a unit vector). Note that here we're using $\mathbf{q}$ in the sense of an approximation to a vector in $q$ space. Other people use $\mathbf{b}$ for the same concept, but we've chosen $\mathbf{q}$ to make the exposition clearer. For some purposes we want the q vector $\mathbf{q}_{actual}$ which is equal to $b_{actual} . \mathbf{g}_{actual}$. We need to be aware that $b_{actual}$ and $\mathbf{g}_{actual}$ may be different from the $b_{req}$ and $\mathbf{g}_{req}$! Though the Stejskal and Tanner formula is available for the classic PGSE sequence, a different sequence may be used (e.g. TRSE on Siemens Trio), and anyway the ramps up and down on the gradient field will not be rectangular. The Siemens scanner software calculates the effective directional diffusion weighting of the acquisition on the basis of the temporal profile of the applied gradient vector field. These are in the form of the 6 ``B_matrix`` values $[b_{xx}, b_{xy}, b_{xz}, b_{yy}, b_{yz}, b_{zz}]$. In this form they are suitable for use in a least squares estimation of the diffusion tensor via the equations across the set of acquisitions: .. math:: \log(A(\mathbf{q})/A(0)) = -(b_{xx}D_{xx} + 2b_{xy}D_{xy} + 2b_{xz}D_{xz} + \ b_{yy}D_{yy} + 2b_{yz}D_{yz} + b_{zz}D_{zz}) The gradient field typically stays in the one gradient direction, in this case the relationship between $\mathbf{q}$ and the $b_{ij}$ is as follows. If we fill out the symmetric B-matrix as: .. math:: \mathbf{B} = \begin{pmatrix} b_{xx} & b_{yx} & b_{yz}\\ b_{xy} & b_{yy} & b_{xz}\\ b_{xz} & b_{yz} & b_{zz} \end{pmatrix} then $\mathbf{B}$ is equal to the rank 1 tensor $b\mathbf{g}\mathbf{g}^T$. One of the ways to recover $b$ and $\mathbf{g}$, and hence $\mathbf{q}$, from $\mathbf{B}$ is to do a singular value decomposition of $\mathbf{B}: \mathbf{B} = \lambda_1\mathbf{v}_1\mathbf{v}_1^T + \lambda_2\mathbf{v}_2\mathbf{v}_2^T + \lambda_3\mathbf{v}_3\mathbf{v}_3^T$, where only one of the $\lambda_i$, say $\lambda_1$, is effectively non-zero. Then $b = \lambda_1$, $\mathbf{g} = \pm\mathbf{v}_1,$ and $\mathbf{q} = \pm\lambda_1\mathbf{v}_1.$ The choice of sign is arbitrary (essentially we have a choice between two possible square roots of the rank 1 tensor $\mathbf{B}$). Once we have $\mathbf{q}_{actual}$ we can calculate $b_{actual} = |\mathbf{q}_{actual}|$ and $\mathbf{g}_{actual} = \mathbf{q}_{actual} / b_{actual}$. Various sofware packages (e.g. FSL's DFT-DTIFIT) expect to get 3 × N and 1 × N arrays of $\mathbf{g}_{actual}$ and $b_{actual}$ values as their inputs. dipy-0.10.1/doc/theory/gqi.rst000066400000000000000000000021041263041327500161270ustar00rootroot00000000000000.. _gqi: ============================== Generalised Q-Sampling Imaging ============================== These notes are to help the user of the dipy module understand Frank Yeh's Generalised Q-Sampling Imaging (GQI) [reference?]. The starting point is the classical formulation of joint k-space and q-space imaging (Calaghan 8.3.1 p. 438) using the narrow pulse gradient spin echo (PGSE) sequence of Tanner and Stejskal: .. math:: S(\mathbf{k},\mathbf{q}) = \int \rho(\mathbf{r}) \exp [j 2 \pi \mathbf{k} \cdot \mathbf{r}] \int P_{\Delta} (\mathbf{r}|\mathbf{r}',\Delta) \exp [j 2 \pi \mathbf{q} \cdot (\mathbf{r}-\mathbf{r'})] \operatorname{d}\mathbf{r}' \operatorname{d}\mathbf{r}. Here $S$ is the (complex) RF signal measured at spatial wave number $\mathbf{k}$ and magnetic gradient wave number $\mathbf{q}$. $\rho$ is the local spin density (number of protons per unit volume contributing to the RF signal). $\Delta$ is the diffusion time scale of the sequence. $P_{\Delta}$ is the averages diffusion propagator (transition probability distribution). dipy-0.10.1/doc/theory/index.rst000066400000000000000000000001701263041327500164570ustar00rootroot00000000000000===================== Theory and concepts ===================== Contents: .. toctree:: :maxdepth: 2 spherical dipy-0.10.1/doc/theory/spherical.rst000066400000000000000000000055701263041327500173330ustar00rootroot00000000000000.. _spherical: ======================= Spherical coordinates ======================= There are good dicussions of spherical coordinates in `wikipedia spherical coordinate system`_ and `Mathworld spherical coordinate system`_. There is more information in the docstring for the :func:`~dipy.core.geometry.sphere2cart` function. Terms ===== Origin Origin of the sphere P The point represented by spherical coordinates OP The line connecting the origin and P radial distance or radius. The Euclidean length of OP. z axis The vertical of the sphere. If we consider the sphere as a globe, then the z axis runs from south to north. This is the zenith direction of the sphere. Reference plane The plane containing the origin and orthogonal to the z axis (zenith direction) y axis Horizontal axis of the sphere, orthogonal to the z axis, on the reference plane. West to east for a globe. x axis Axis orthogonal to y and z axis, on the reference plane. For a globe, this will be a line from behind the globe through the origin towards us, the viewer. Inclination angle The angle between OP and the z axis. This can also be called the polar angle, or the co-latitude. Azimuth angle or azimuthal angle or longitude. The angle between the projection of OP onto the reference plane and the x axis The physics convention ====================== The radius is $r$, the inclination angle is $\theta$ and the azimuth angle is $\phi$. Spherical coordinates are specified by the tuple of $(r, \theta, \phi)$ in that order. Here is a good illustration we made from the scripts kindly provided by `Jorge Stolfi`_ on wikipedia. .. _`Jorge Stolfi`: http://commons.wikimedia.org/wiki/User:Jorge_Stolfi .. image:: spherical_coordinates.png The formulae relating Cartesian coordinates $(x, y, z)$ to $r, \theta, \phi$ are: .. math:: r=\sqrt{x^2+y^2+z^2} \theta=\arccos\frac{z}{\sqrt{x^2+y^2+z^2}} \phi = \operatorname{atan2}(y,x) and from $(r, \theta, \phi)$ to $(x, y, z)$: .. math:: x=r \, \sin\theta \, \cos\phi y=r \, \sin\theta \, \sin\phi z=r \, \cos\theta The mathematics convention ========================== See `wikipedia spherical coordinate system`_ . The mathematics convention reverses the meaning of $\theta$ and $\phi$ so that $\theta$ refers to the azimuthal angle and $\phi$ refers to the inclination angle. Matlab convention ================= Matlab has functions ``sph2cart`` and ``cart2sph``. These use the terms ``theta`` and ``phi``, but with a different meaning again from the standard physics and mathematics conventions. Here ``theta`` is the azimuth angle, as for the mathematics convention, but ``phi`` is the angle between the reference plane and OP. This implies different formulae for the conversions between Cartesian and spherical coordinates that are easy to derive. .. include:: ../links_names.inc dipy-0.10.1/doc/theory/spherical_coordinates.png000066400000000000000000005464331263041327500217110ustar00rootroot00000000000000‰PNG  IHDRlXîfÝbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> vpAglXŒ`3€IDATxÚìÝw|ÕúÇñÏœ™Ý’B!„Ы€ bA ˆ¢н\ìX¯ríõZ~нlˆ (Hé„ @$!„’33¿? 7\M.e’ð¼_/_áìÎÎ~g³BöÉ9ç1¼}B!„B!„B4åw!„B!„B!ª2)° !„B!„Bq¤À&„B!„B!Ä!›B!„B!„‡@ lB!„B!„B)° !„B!„Bq¤À&„B!„B!Ä!›B!„B!„‡@ lB!„B!„B)° !„B!„Bq¤À&„B!„B!Ä!›B!„B!„‡@ lB!„B!„B)° !„B!„Bq¤À&„B!„B!Ä!›B!„B!„‡@ lB!„ÿ£åË—/_¾ Ã0 ÿ¯õêÕ«W¯žß¯†B!ıK lB!„ÿ£U«V­ZµÊïбcÇŽ;úB!„âØ%6!„Bˆÿ‘ß6Ó4MÓ„›o¾ùæ›oöûÕB!„8vÞ>~B!„{ÁyçwÞyçÁÌ™3gΜYv¿RJ)Ÿ|òÉ'Ÿ|ƒ 4hß©…B!Ž]2ƒM!„¢’(.....†‹.ºè¢‹.úsa­Ô[o½õÖ[oIaM!„¢²›B!„ÏB¡P(‚þýû÷ïߦL™2eÊ”?÷òË/¿üòËpà 7Üpà ~§B!„¥¤À&„Bá­µÖ.»ì²Ë.» &L˜0a„?÷ä“O>ùä“pçwÞyç~§B!„$6!„Bˆ£ÌqÇq`ðàÁƒ†1cÆŒ3æÏÇ=øàƒ>ø <ôÐC=ôß©…B!DE¤ÉB!ÄQ⺮ëºpÍ5×\sÍ5eM þèöÛo¿ýöÛá•W^yå•WüN-„B!þŽØ„B!Ž°ÒŸ¶nºé¦›nº Þ}÷Ýwß}÷ÏÇ]wÝu×]w]Ùý†a†áwz!„Bñw¤À&„Bq„ÝvÛm·Ýv¼öÚk¯½öÚŸï8pàÀaäÈ‘#GŽ¥”R²‘‡B!D•!?º !„B!÷Þ{ï½÷Þ[qa­oß¾}ûö-[**…5!„BˆªI~„B!„8̆>|øpxá…^xá…?ßß³gÏž={ÂW_}õÕW_eY–eùZq(<×s=œgiíw!„G›,B!„8Lž~úé§Ÿ~ºâ®ŸÝºuëÖ­üøã?þø#DDDDDDøZq(¶ÎÌOËÜKŠ×ÌýµìösÏ=á„K/õ;Bˆ£E~W*„Bqˆ^z饗^z©âÂÚ)§œrÊ)§À?üðÃ?HaMˆª,?¿°0'Vd~»4vïn›»ÈïTB!ü&6!„BˆÿÑ믿þúë¯Ã°aÆ öçû;tèСC‡²kQQQQQQ~§BŒÂ¼â¬‚X—’µfùrØúm~Lf&YéÁO %ª^¯¦Ï@¡Y”¾ë(Z]|káVà\æ#3Ø„â˜!KD…B!Ò{ï½÷Þ{ïÁ7Þxã7šjݺuëÖ­aÆŒ3fÌ€:uêÔ©SÇïÔBˆ2m»8ÖoùaeSØüzî„´÷Áz_µ°Š¡nnÜI½!á­Úõëå€Ñ‚T•éqÙƒÖfC¨Yɺ’qй uZ¯ü¾!„G‹Ì`B!„8@#GŽ9r$ÜtÓM7ÝtÓŸ kM›6mÚ´)L™2eÊ”)RX¢*(mJno­·z5¤ÿœ½vÍ“à¥z[Ý<¨suÍ×êÕ†úÖqêÏ5ÍÜX@êç%ÝÓ)°Uº !ıGf° !„BüQ£F5 ®¸âŠ+®¸Çq§ìþ 4hÐfÍš5kÖ,hذaÆ ýN-„(Oi·ÏŒ9“×Â:²‡¦&€}н®¤b_¯Ù v&$ÝXû·–´ÂÝ¿?oZƒŒ^«º 3õ>œl5_tö`¿¯V!ÄÑ"¿[B!„¨À„ &L˜ƒ 4hП k¥6oÞ¼yófhÔ¨Q£FÀ0 Ã0ÿׇ~øá‡öûU¢jÚæíŒÉÌ„9y+ëMª +ó7',œá7Ÿ †ß4,:n54>»Þ¢æ›¼°VÊçå»É ¾äfó¿¯V!ÄÑ&KD…B!*PÚÄ@k­µö; ´jÕªU«V~§¢jÈ_UdäæÂšz›—-yòÝ==·;D, ¶‰X MK^ܪÔü"êÌZßPDÞÿþ|^'g´¾¬nÖŒÈs™½&„Ç)° !„BT`áÂ… .ô;E)° Q±¢PIñ. kã2ç-›[¿Íÿ=3c­oƒ™Ðð´zÿ×4j?3ºNk`¹ÑÞØ~œÌÝ^Ts—5€;Øì÷«"„âh‘›B!D¶lÙ²eË¿S!ÊR¶[\ ëò²¿M}6”3i]cPïóÍ‹ þÕu¤ì‚„ìÚ'Ö+#•íª%°(<üyœ‡ÝÝn$%Æc´ß¯ŽBˆ£M lB!„BˆJï?Ý>fY³Ò§o=gõà~àMrúCf±'%&@ýáñ¯$oØ×í3€í´< ï÷>ô.ë3³s@ óBqÌ‘›B!„¢Ò)íö™–;eC¤]¼å‰³ 4Ê>¿äB¨u\LRÜt¨·8~aJÄ~M ¾¢ˆœ£Ÿ×iåŽw~uµ±Ç¼À™)'„¢r’›B!„¢Ò(íö™–ž¹tù¿ p|q|A/ˆŠ‹F ÑeIEÍVC6K£ó€4à º})îH7ÚÊ6òT;¿Ó!„8Ú¤À&„BqŒ¨U«V­Zµ ,,,,, ²³³³³³ýN%Žujw(w)¬ e²ôMÈŸ¶kzÎÙ±$˜ñOhzSƒ Z®„šY5~Ž‹ÚZ·Ï#ÅÝê쎫ŸQ`šÀnj …6!„8f(¿!„Bˆ#Ëó<Ïó`çÎ;wœœœ–Ð P”_²­°–¼³¡ù/wÁ¯ÞêàÏÇÃî÷ô+È€”ú‰ ›ž­l<÷ø=ûÖ*)÷w­³n¿6†jãw*!„G›Ì`B!„¨æV­ZµjÕª²B›ëº®ë‚ã8Žã€iš¦iúRTW¡=zWI ¬+Ù2iÅk‘‘“³án0bŒH㨷®N|ò½ª5¿^Ê3—Ëiïwöá¢'µíLgš˜f äûL!ÄÑ$3Ø„B!ª¹¹sçÎ;·l\ZhÛ´iÓ¦M›üN'ª§ØSº6$eÏ_¹fý¶<0ájÈø gÒú†¿>ÖH˜Ç9M#;î„ÄPíUÉ›@¡bÌ*¸dÙíãüì\]66憪åw*!„G›Ì`B!„¨æfÏž={öì?ßž–––––7nܸ±ß)EUõŸnŸ«róÒó!í±-O-Ÿ%ÙVq1Ôê]w$M¬sSJo«l±€þ¬ñ;ý¡sþíy^€RJ™¥ÝCãüN'„âh‘lB!„ÕܬY³fÍšõçÛW¯^½zõj¿Ó‰ªjû¼«²òà—ô•›&ß+26mZ0'&FAˆ­ÚgÕw[¶ÿ¯ÂZõbzñÎ#û “•2Ãý%„âh“›B!D5µ}ûöí۷úuëÖ­[÷çûçÍ›7oÞ<¿SŠª¢´Ûç‚Uk‹¦O‡EëŠæL=Ü[n·„¦§6Ò2Z\˜òuÛ¡P£MDQt%ìöy¸¹wº{œâ²±*0¶))° !Ä1G lB!„ÕÔœ9sæÌ™SñýË–-[¶l™ß)EeUÚísYâ†)¿6(ëö¹kìžv¾ ê¦4î m¾jy|ïÊßíóHqžò®öN.[‘fR äw*!„G›ìÁ&„BQM•67PJ)¥Êº‡–Ú¸qãÆýN)* »HëÖ-ÜòCêkÙ?'iýð^1†éèÆ¿^ÿ¨{BÜऋA¡0§Êtû¾¸j Šn·’ž­3#%ÂNv.˜+ÏÚ¹1g¤¯ßb¬ ¶íÒg„‹"e©¨B3d‰¨B!D5³`Á‚ ü}a­Ô¤I“&Mš$¶ê*'kçš-°¦83¸ô.(L+žPÐ jìŽ<'º;4n[?Øt.Ô˜±<¦]ýÎ\•8‘ž­·¤>!¶r 4wBñßd‰¨B!D5Sº÷Ú*]J*ª‡¡"·º¬ÛçÂåë gO»Ðy;ô4¶êomu´º¿aZ»4¨Q±<ælNp¸ÝÛhR66Cfd ÌïTB!Ž6)° !„BT3³gÏž={6˜¦iÈ^PË—/_¾|¹ß©ÅÿªhgIÉn–¾³aôüú0?l•5­ìJÚÓ&?£¬Ûçq'4éÑ¡j%Ewª5<×s=÷PŸ]è;ìaÎoecåI“!„8ÉQ!„Bˆj¢tgÝÒ›ã8Žãüýã6oÞ¼yóf¿Ó‹UÚísýÇÙëW¾nÏ_w x¯OŸCbÛÚVÒ¨›U{ZýPm¥Ûç‘äÅìÖ*«€49Bˆc‘ünE!„¢šX³fÍš5k`ÇŽ;vì8ðÇ•6EHOOOOO÷û*Äý§Ûç—ÙãWi˜•µbîã`ÓžíÿNK€ZbûÖyr¿nŸ_×é’²\º}-^o£—æ Ulõõ;B¿HM!„¢š(¹ö¿úí·ß~ûí·ÿýñâð(íö™éæ%nX ³^]q×ÄhX—UoÙwPc}D(ª´Ji2»ÃHÙTwi“\œh~Xãwúc3S?ï$ƒq¡ñ~§Bá)° !„BT3gΜ9s&†aÆÁ?~òäÉ“'Oöû*Ž]9é˳³á—5+ïÿézX1%}‚Õ`¥>73 åÀFCÛ^MS’;´Z m³Â§úZxçð˜W¬×­{gøF!„_ Ï+Ý­C!„BTeÑÑÑÑÑÑPXXXXXxð‹‹‹‹‹ƒmÛ¶mÛ¶íÀ›$ˆÿÍ®MEÅù¬é’ÕaÉjÈ}¯àóm+ ,1ðuø)P?²î܆ùPËþ®v±4%¨¬Ò㲭͆âè=§w†.Ç=v^‚ß©„Bm2ƒM!„¢šøä“O>ùäèܹsçÎþñyyyyyyЩS§N:ù}5ÕÏž¼PáîmeÝ>ç5\>Å‚ü‘»çîx’©[Ü8 ZMÇuì±:꛸")¬UvN-ý‰w7¨ÍªØü§ßi„BøEºˆ !„BTýúõëׯÔªU«V­ZpÖYguÖYÿ8¥”R \×u]·¬©84¥Ý>7¨­jÕ{°¹õ¶Ô´©àY¤ÐÛÖ“ô>Ô½®vÝúcA}¯Z˜{g>Í`”ßéÅ2Kœ+À\¤n°®ö;B¿ÈQ!„BˆjFk­µ†‡z衇‚.]ºtéÒþõ¯ýë_ÿ‚@ `Ú´iÓ¦Mƒ¨¨¨¨¨(¿SW}¥Ý>7ý²ÝIKƒõIÙóW®g¨w§þjß³£ÎÍP/·NbJiJP]¬^´ùÔÔAÜdŒ@§û[t8s»ß©„BmR`B!„8FtíÚµk×®eãY³fÍš5ËïTUWi·Ï-Kss7¦ÂÚŸ²Yq”´³¯-újN‹š^ˤ“ê¾Ûè:iJP]­î•^{Y>Ô°Ã^Ž‚™MïèÒÅïTB!Ž6Y"*„B!ÄA(íö¹vaVçeÃaWTÑôüs!êþˆ¢¾…”·ëõ?.¢¯Ž£¸ )¬U[^ÑÖFÈx] ô;B¿HM!„Bˆ¿ðŸnŸ¯gí^zäv/míaÍCÇCãüúm›GB\jLaõà¹ÞxOûZ-Ît}¡s/¨ñ‘·š[Xîw&!„GŸtB!„b?ÅÅ¡PQ,[˜>ñ×aÞ «OŸ2òûì6ò6CƒNu—4 ”uû¬•]Ÿ&Ý>UÞ3Æ‹Þ-`†OzûF!„_d›B!„8¦éb'dÁz²­Ô‘°é–m*­60™8ÖCb\Üðú×B©ñ}’:ƒ¹ÞøÞL\ Ý>…»ÜyÊÆ›†æl¿Ó!„ð‹Ø„B!Ä1ÅÕ®vB°iÃöÜu.¬7²W§N·¹s†sÄýÛ4~*Ô»¿Nfƒ—!€™Ü¬§ ©~§•{’w«VšéÎNò;‘B?ÈQ!„BQ­•vûÌVy×À¬WVÜ91ÖlÈÌ\ò=DÖ‹¸;ê2hU³qz»÷!¥QâoM#÷+¬ ñÜîJוg¬V+ýN#„Â/2ƒM!„BTK¹º }ëVXS¼¥ãÒ¥°kâî©ùù¹!¼ST>4ß\ï–ã–BôæÈ‰13€y~'U‰×ÆpWHP'If{¿S !„ð‹Ø„B!DµPÚí3­IÖâewÂö Áì3 ly°Ex4>©~ÛæWBÜY1ê,ÏõúHSñ¿òF³ÔÛûi* ÀÜd¦ZG¢ßÙ„B}R`B!„URi·Ï´QYß/¶|¶ãéM«AMS?Y%Ü#aT£6¿ ®°Þ0P 8 <×Ãó;¼¨òœ[ 3 øf'C«xÀö;™B?HM!„BT ûuûL[™›Š¶ÿ;íiàAïσ„eµóë ‰Qµû$sɾnŸp‰tû‡›g òvð9€Z¦N² öÝëw:!„G›49B!„•’ë¢\Ò×nݺ¦fML½pÂO°)bk›µÇC­Ÿ¢_«]Žóš˜g@ýmñ¿6<Ìõÿ)¬ qĸ;×ËÆj·ª©dú‚B³äŸ!„BQ©d/Û±bÓzX“™ñÁÒ XÙ™{އ˜Q9µCýo’?KI‚ˆ6a=#ÓhÈ@¿S‹cw—·ÔM>&™`v1 MØCM¿³ QUxžç¹.ègÖàĺñ: ìNfh#8ÉŽã4'à%Ùù ·ë­:ì4÷øÐ6pê:#u>¸Ç;Íu>Ø£¼Æ:tc½Æ>t3·›ý%8ãœOÏÀ½Û»^k]`?lÛàôôž³Ÿ‚¢ðâ ë@ÄÒ° jŒ‡.ÃÚdœ÷!†a†ß¯’¨*¤À&„B!|•·¸PmÛ«›eÖ\²vmÙ×íscÄ–¨7¡YQÒ»­·CLJÄÄØ@¿ îïÞnXÎs™míýt%6Qé¸ÚÕN´íîѸµÜºN4Ø®Î)Y:Ëwš€£õb;œFnPï{½eÛà4sæÛi Ç¹‰:tš³Y·çL·£Ö û¹ýí¾ Ç:ÅZƒ3ÖùTk°£ö=~ÛÐî v®Ó6TÜlg…s6¸½¥îþÍfÆ1›Ï€ul`6°ø €yŒ`þ#ǰ~ßè;¶˜Ùfcsï¨ëÌ`>aœ«n³ƒŠ²òÁ\¢îSÿõœ¹ÍœV3ãîð‰P”QLaØÓ¾äûÝ}¤°&þ7R`B!„GÕ®¢=;‹!-&3ué½°}BÁ‚ì3 xŽU7¬ 4šW/»ù4¨UP³_|ŒnÜÀ|¿S ñßtÐYê6 ƒ• «Žj  )¢Žßé„_œgi N¸i :ÏÍÑ´Ú[hқǮ Ží:t¸Òœ(×ÕìÕnÃÐ*pZë/u>è5înÝܳ Ö ›{Ïè~ ×é«mô8w¤Ö`‡ë“m¼[Üõ:×Ù¡Ùà{óœ‹ÁËòNv¿Ú/hi! Vñ°˜Ù콿IÀûŽK%oßñeÝq 0û©1æ3 ¶(ÓêæIj„º Ìmfž¹Ì­F °úXóÌ©6@Í Ü Æp³NÔ*0ïåÝÀ=hfýÛ\ ª®Y[Mãrcµ™ æÕÑê*S«•x޸ߚÆÏæýV?0Ï6f«@¥›ç«SÀJWãÛÀKñfy¿'ÿá£ë€­$“ \ 4ÚwßÍ`œè ;–ì¾(÷C&úý^Uáíãw!„BqduíÚµk×®eãY³fÍš5ëÈ?oi·Ïu³³SV6„¬çÖßp˜Ç©ç­÷ ñõÚkëo†:Ëk¿[ï<0o’4%•]þ¼]yy9°>)³põèܹuësÏ…¨¨ˆˆš2‡íˆÓÚqlö´t‘cj NžSèÔ;ÅÙVR Žá¶ÕÛÁQ®¡585ušÖ`ã5²Wƒ®©·Ù ÀíáÖ×ìáÎH­Á¹xï’Eý¦û´ý8£Ü•¶ ö‡öïú pÆrN=T¿`ϧ¹s†îÞ$z‡ñï/k¢*¶ú‚9ÂŒ5s@ýjv±Nódc©zÔíF‚9ÌOÍd3 Ôkjƒé‚§™Ÿ‚êdõQo€ù‘Úc6•L–y˜ÅVR ˜ª–Æ—`¼¯bTo°¯ÞórÕ[5«ž9ºŒ$õ¨6ª¹ÙÔïïþá·aZæSkσРöc%N?µML¯]~§UØ„B!ŽG«ÀVÚísÃò­öªu°±É¶[×> ã úB¸Zµ.†ÄgâoP,M DÕ”gíܘ³Ò×o1֡˙ǵéÕ"ƒaáÑÕhm;N(Žã8Zƒ6½ZÚgÞæÄƒnáæ†vNs¶ÙÛÀ‰s/Ôt¤³Aǃ3Ι¢ÃÁ¹Ñqt$ØïyW…æs‰¥5èyÎ]úspÆî›‰©ï …Àé鞯¿êÌÛ»äÐýTçƒêÜe;|×g¼¨®7¾ó8^3?ójó{k ˜gš¿ªOÁ¬§›··¿¨·ÁÜfže^æ?T˜µÌžÆïÖP0]5Óø ÔuÖs˜=Œ-ö ÂŒtõ-X盫ԥ 6©;ÍP«Ôjk˜IV#s'¨¯ŒãÌf`žh|¦ @¡bÌl¿¿ûÇŽµS6ç¦þ æ•Øf=8¹f˶ݯö;•¨j¤À&„BqŒ8R¶ÒnŸ›×o›ž6Ö'eÿºêpjè{í(¨Õºæ‡µ—@R~|û”s!0-Ð08ÆïWCˆC“»mg‹m³`cñ–)ëÁg´mÛ§„‡ƒ‘‘~Ïõ\Ïí¸ž­A纶 :FçhÜ/Q¯]¬³u8è\DZ#÷ûšæ†ëppšxt8¸õN8„æ9J~=Û™ï\ÎånoûpƹŸj zmÛ ïsVÛŸƒý±{¥ý9¸›mÎyàtsÃõ˜Ã÷zIÆ|u˜j€º Ì$óAë90Q­D0bÌ'ŒëÀ¼ÐˆµFzNe›!ð£y\°÷«9êm0CÆdµT £À<Ìóóg0›YÇ[ý@íb¡YVKë"ót01Þx¬43!PæªÀ¼ Ô;f#µ Œ¤ª¿ßMÂo«¬ôŒeïCÔ§akjN€5Ð9ÓïT¢ª‘›B!Ä1âpØJ»}®õ2ßZ¾ öd‡®Ù½¢“£N­Ù’WÕ 6Jƒˆ6aé‘ñ~_½8Öy¦Ñ“à]¢gÙÓ@¿ìƸ?ƒ“ï†;õÀ ¹£3Àmä†Ü–àttâìÛÁIs[;áàžà~íž ÎZ÷g.ìþ¿=¹»æCA¯Ý»óÏ…„¨ØŸëÏo Ϻ.è±N®Ö ›¹5í~ ßÒÛBsÀî¤ïÐÁÝÂÏÎùàÆ9Ÿ9ß¾ëT_¨ÖJ•j^hžÆ»Fs+˜‘êë 0k›ßîÝä݈5瀺JešÁb.µ~õ°ÚafÙN¥«• R̆Öi`ÆŒI`.4ÛB rŒafO°úªæj8¿¨ó*07¨³Ì/@9f¤*Q5°þ *À Yú-*«Ö÷Yô Ôy:ú»Äh“Ó0©Ó#~§UØ„B!އZ`ËKÛ•µ=Öäd,É‚‚‚¢¢; rCĤ¨›¡~Düù >‡è“kÔ‹•=¨ŽY^긫ÁÙ¦ç8¸gr­;ô=W/ç'÷rŠÀ©ëŸÿw®{®îOÞiîÕ 8ØëÀ¹ÜÍq€û¢åœ n+g‰³ÜzNCpÖ:#œ€¾Ù[倻Ý÷¼KßuªÌ댯Á»×ý€68ðkÄý`~­NUgƒñÒ*ÌóT¾ù)˜T†9Ìç”iÍõ*´¾«­y½q1×9fWPuMÓlVOóRËõ½©U[0ò“™æµj›9ŒÉj©J«ƒõŒÕ Ô8ãC«m‰ç'¿ßBT-Kæ¯í:¿4¿¢éûÐ"¼¾:þF¿S‰ªF lB!„Ljƒ-°ægÀš‘ñK–@N«‚åÙÙ¼bo·Ïz_$¸)ÇCÜΘÝñ{äƒýÑæ^à®uÖ›î]î>Î<罜:nw3èo¼ ìæàÖÒºÀµÜ…Nœ³½FÎ&pGyg8§óž~T'3Ûæî$OëÁYá5wú€[¨Ó݇ÀéëMÑ€w—ë:ÍA÷r:³À½Á[åZà6v>wÇ€;‰…îaœ©d^©ŠÍ/AÍ4ŸV{ÀøÍxRísŒú—µÔHãc=¨Ñæ#Ì—yD¥ãÕùæ0‡›g™_ƒ2Õpu!˜gªfêP—¨nê0>P5Í~ ÎV¦1Ô[ª¶uX³T¶ñ<}:ê|P±j™ÕÎH3¾„ÂÄ¢/ šÁ®Ü¢þÛ iÍz5ÛÄøý®B o×ȇEá«gþºšŸ””Ô®4ŽKLlÕÊït¢ª‘›B!Ä1âï l%Z{ö@Úô¬º©)ûuûÌ2®Q—CÝk7In Yµ¯NŒ:vö.ršxèDp×»¿»Apç8_9‹AŸãÞèXà|ëµÐç€÷„»Ø™n¤ÓÊëöÎý¸ëMÎoà pw¸#Áí)ý)¸?:CÜ+A¿êît ðîwk9ÝÁ¶ÝûíAàõw‹œ&à õÖ»‘ ï÷Ö;µÀIÔ_Ö%…=9A §æƒŠTSÍî`ülÞ©rÁxÊd>æ›û YÛ¬{Í– Fò°š 擪§úŒ7Ì.j&¨yÆ=*êú½…,ëóTs>p‹‘ Nu6W©wÀêdM4G‚™b.P#€§ŒX³'¨#Ò¸”2æªýþîWl׊=ývN‡Ý©{â ›@“[ê~Ѻ³ß©„C·sN´ÃÒñk¿[ð —œ’rRw¨ß&>¾qœßéDU#6!„BˆcÄ l?ÿ4}ê´Iþå¶ÈÕë!ý­W®yØìâ}u>‰»»® u{Õ¶’GÕ@­·š`«È1Χ·w½ôbý ^Þz·½›N~Þ}à¶Ò³ôKà½>NГœ¯µï w¼“îqî`÷LÐË÷ÜŽàöô¾ ÝÎxgÛœÅn²Û¼û½|·;èfÎûkpNóÆ;‹À½ÞÝáF‚Û\×ÓÀùÔ³ÜKßeªöv+T¿ÿ§P‘j’êf‘ù¹ÕxÂ8_ëãcð“y…ù ˜óÍ ˜¨«Œ_€ïÌúæH°Îç6c5Õ¹Ö÷`ö7Œ/Á¸Û8Ù¼ÔPeoƒiªÝæµ UõÍw@%¨ͳAEAcñFŽÑéȽ磌]gîî¯aO÷’)E@£Wꦴjäw*!ÄÁØV²²¨-¬\»¡Æ’áøð&1OºgÄ6«Ÿâw:QÕHM!„¢š›1cÆŒ3àœsÎ9çœs^ {çÖǃ6¡¯µx¢îŠÅ\µÎ‹ÝZg,˜Õ`5t‰þÖž n®ûµû8ÜKœGÁ]äõrï÷I·–“úÝVgƒ7œz(èIº¯›îs^†›Îw€Ý Üë"·è¡Þ*'¼,÷4wôá»^c¹z]y`þj¼¬J@ÍUÏvY!Ëo<¨6ƒù¾ºZ­†—ªçÀœ¯4ƒ`N²Î7‹Àø?î4¦‚u®j«~>5Î1_ë*ó5 ŒÛU¸úÔ©\¡n³­õŠy%O'ªA%¨Uû Y¿K!«ú)¨Y—?Š_ý_ñ›Ð辺7·øÍïTBˆƒQxBQë)°f̦I©s Së5Î<j5ˆjY§ŽßéDU#6!„BˆÃÌÕ®vB mwöÀ­åÖu¢ÁvuNÉÐ^¼Óœ†z‹ ŽãîÐìõN”mƒÓÌ™o§ÎõnÒõA¬_Óœ3ÝŽZƒîçö·û‚ªçØŸƒÎqGj º®s†îη¡Ýô›ºÄþÞpgÌSæzÓ½ßöû©ïôÓÏ:ëä“á_ÿzá…{î9øëTuÕ/f?P¿™Ï6¨Ù¼¤v‚ù½yŸ™^VÈRß©»Õ:0_7nS©`|¤.2'9ɼÅ,ó+u¹Ê㣷úÔ@ÕÀ|Ì ÕéÆHPÃŒþæ÷ ®3W¯ƒ:Nå©+À¸DmT:Kå¨A…k*ÛYéÝç÷»@Tw;‡ìú6wؿ꾺;¤ä$D5ùJq0òöÏëŸËxyõ“Ðù¤6‰={BT\xRŒì©(’Ø„BQe¹Êu]:× í­œB'´á8¡ÐÛœ|½œ·ÀN§†ëè|еœºÐ1Î;t¡“kg¬ÛRçƒNðºéàüÓIÖo^§¯¶mÐãö²šé„÷·‡3Bãuvh68ÅÞ<çb𲼓ݯßuZÃÌ©– ÆÇFk¥Á|Qś٠SáæZ°ÞPm,ÀxNí0§‚7‰zY{²‹î‡O¾|ûá/#àãß|ó«ýrÝyÞ#nI…ëιíÍ+›‚y¡YlN«ÓÞMÞyyï&ïæ–½›¼}Ô2õ˜FšY‰÷ÆâhÈo»ëå¼gÀéçtÕý Á›uÎhvŽß©„c{L~Zö<ؼ<;¸¡>œÙ©ý)œ ÁZ–.ݰÅA’›B!þ–ò,­Á‰Ð{tè|/LÛ =]hA¯w£lt}7Vc8–·ž3R‡Ch¢Û/4t‚þŹÜS¼N:ô8§–Žg¨ÛÀ»¯Ö¡‹@uîÒ_€~ͽÓþÜÎ]ús°ÏÔØýÀê]§?o˜÷®wéá»Nk¢*¶ú‚9ÂŒ5sÀx×hbnëz3Ç\êv#Áœæ§f²Æês XMUÈÜ ª“ÕG½æGjÙT2Yæ `[IZ`^¨Z_‚ñ¾ŠQ½Ájl¼xÔn¥­g!ð°¹QÀxÑHRj£š›Mÿ>÷žåv×âî³uDz.ì¤0nÇ÷`µü+ð!$œS+·Î}p¾>cëåWÀÌM ‰¿3™iÌôû]&DÕ’÷㮎Û7ñŒWÃ(†ú©µ69ÛïTBˆƒ‘Ý37;#²ÞÝÚ<zôèØ±0 ÃPÊït¢ª‘›BQ‰èSlkp”¡mÐEŽ©588Zƒåä„j€c¸mõvp”kh NM¦5ØßxìÕ kêmvp{¸õµ{¸3Rkp¢Ü»ôç ×í[Š8Ê]iÛ`hÿ®¿·ÇÛŸƒý›ž¦5è}K—ÿt+¼KÍU!0“­»¬×@i˜/€zÝÜjþfM²ÕPQV#õ˜ÇkÍñ`^dÎ <f'£X½ ê:k€ªj€1ÓüÌ"óZ«Xç™.¨§Tm3T'u²ÙÌ$«‘¹ÔWÆqf3PÍÏLÀŒQ1jßßýgÿî\`·€-ýr6nÎ…Ü~;·=æ^SÔ®]+;a.Ä>_³W­«ÊöþêsË™õ{?:Àø73úq¿¯FˆªiG·‚]ÛÏ#’|s$ýV»e#ËïTBˆƒ‘ñú¶Ýé™×zç·9ßÀÙÿ8þ®¾ŸûJTUR`BqL²mÇ …À sŠt˵µö&ÇÒ% Ü|; ô"§¾NÀÉ×ù ]w‰‚“â´ÑœFÎ|ÝìMn(ô 81îº+81{ ZzèÞ‚–ÝOê º™›¤û3Ι§5è©ÎwZƒ3ĽÁ>œ?нdÜÀh°Ú#¬‘`^m~omóLóWõ)ýŒ\ói0û™+Õï æ«x3̨0k9˜O©éæ°~6Š­`\oµ3æ‚ÙÃØbÍ3׌6¯Uh,45¨-*Ö̳‡J0£Áêmu¶:€šÎêu0¬ÓMŒT¶«–~÷«·ÀI„m—äÚ[šÂÖíy;3/·ƒq³çA\FÍUqÏBÜñ ãß³šd•³™¾Ø„8|r“vnÚ Ô¼ÀLHü&îê†çúJq06¾’µn ì9/Ô©è^èra›eçýÃïT¢ª’ß±!„8"¼}ÿiÛqìhÇ ×8¦Ô»Á Ó;ì `k7[·½]GÛÛ@‡ÜÎSÁiëÆé|pNp&8—€ë8v ÐË܈ÐÍàŒu œO@º—h :Æù2tØ8Q¡pô^Ôùà˜îFçtÐSõ·Zïtâ‚/ýÓ¥äüa À6²Ô,#K•€šgžoö3Iõ1/ó<ãWs=¬]j'˜íÔ`«Ÿ³²›ÁzÀ$r'¨•on3Ǥ€jaÞbž f„1ÝüÌfÖñV?P»Xh‚ÕÒºÈ<ŒEŒ7Þ+ÍLy…*0/õŽÙHmãÿHU ö%þ€a̺﻽ôk>Ðlß×| úŸ¯5˜@Þ¾oíi@¤ 4 É¾sá²Íl~ÞïÕKe»ßïÉ*¥­·Ô‹‚í_æ·ßÚ¶ÌÍÙ°Ð/9µô—Póâ¨ïj~ñ½ã³ë^ÍU…û+]*…8:®óFy'ïƒÍҚ؄¨R쯇}2Z›ë‚½üN#ª:™Á&„Uœçz®ç‚v\ÏÖ sÝÛ'JïÔœX¯¶ÞºXgëpйŽcG‚^äÛ6è­ë‚ÓÄk¤ÃÁí¬?pÂ!4ÏéPò èÙÎ|çBp.w{Û—€3ÎýTkÐëœhÛÝÑ}&ÔôÒ}3±ö8ÛœóÀ鿆ë1‡ï:Í+U± F–y‘u6˜+Œ‹Õy ÒUg«#˜Ij¡zÔËæBs˜§«tóe°>T­¬î VãÍ,Põ˜ÍÕh³3¨…êR5¬0ëâ@wP9Æ0³'¨tT«Á ª\³5˜±jˆù(˜µÌH«¨(³¹y#Ž7‰Q~¿ DUg(C ò »ånƒŒ÷¶•l\ %mK¾,N†È˜ˆ‘5¡îƒñ?&=aO_ »ÿàŸGf° qøäöÚyÍVaó­^‘y b¯©ßÖïTBˆƒ±¦íÆâeùþR !ªœp{³`×®~§U•Ø„â¹.ÊuÁ é½…+7^G½ÂÉ m§¶ÐÐùnúÞÍà½{_¥¹Ç‡¶ÛÝÍÐQ`O×ã´§ƒÛdÿ=®J¿º7í+`é½Ý íuútÛý–ûïÐÐÿpþÏyœb7U÷w{›Óÿð]§úBµV ¬TóBóü}›¼o3RÝb=fmó[õ/PϱæPW©Ls"XCÌ¥Ö¯ &™ëÕm`æ;; R̆Öi`Î56¨[ÁL2ÛY=Áœk¼¦¶€yŸ²Ìu`ü¢rÌ«ÀÜ Î2¿³‹ÕÉìV¬ño³¼…´2 ý~qx¹gû®…°iöÖ’ôEP´¾Ø-<š„5_uBµÏ¬›QyßE†ø¥À&Äá³mR^Ì–Ó¡FËðœèYP礚±I)~§BŒ•m×^2j…¢Ÿ¬ó´U 3N>ÙïT¢ª’›¢Òqµ«8!mçÆ8á`¯Ñy¡= Ã½8GëÅv>èXïT:O¯±58Íœùvèqn¢Îç ·ƒÎ½ÞÉÐ'‚îçö·û‚ëk ÎXçÓ}›ÇïÝô}ÛÐî v®Ó6TÜlg…s6¸½¥®{ø®Så©kÌ‹ÁZ¦ú›}Á|N%X©`¬R§ª³ÁºÔL³Æ€ñœ«¦‚ÙÁú·ZfÃUëAM2.Ž«­y½Zj…©¦ƒñ¹êc6«§y©å‚2Æ›‹A­²ºZwƒy-ßσ1Y-UI`u°ž±Z9Áø0ÐhE¼÷£ßï!ª§’¡ö{ò sÁö/7ß ùY»¢rŸƒ@ýÝ>ãëÔYçx¨™ó}­¼n‡óù¥À&Äá³5!÷ë¬; êÍÈoj„:7ÅŒ«w‰ß©„cé;kÖüv"$]¿©ñ hufòå:øJTUR`âæ*×uèãìØŒøéPë“Øók__ÖíóH‘›‡ÏÖôÜg3[AŒªqgínPû„踄ñ~§B}{.œ°:vÞJhÞ¯^½ãLh¼»^½6ûNTUR`â(pBž¥58á:¤5è<7GkЪti »wæNÖ ÃÖà¶sèMtû…悳Ù)Ñ) ííNèh÷N§8CÝv8Øo:ÛBŸ3TçØëÁ¾À ÓõÀêŒt6€më¤P"8ã¼×µ¯­wËáü¿ßœaî°ú‚õ¼ÑÊÌã]UÛÜfµJ½æÕÆÌš…ª£Ušõ ¨ Õ"õ)˜á†k] Ö';Ô— ’É2OUÓÜcÕeËMæëI# ¬ÆÆë·Á¼\õV Ágæ˜À*4f˜?ƒj£š›Mýþî !Ž%¥Ý>·FæÅlù ¶uÊ]Ÿ9¥¬Ûg­YÑ â΀ÚïÇ¿¹ânŸGŠØ„8|¶r쌨}Züzˆ JMèàw*!ÄÐñN K®Í_ ­cl;¡'48¹N¯¦1~§U•tÕŠ9Ŷ§Èµ´'ÒÕÚ]ì¸zØQNN¨8ENŒÎ7Æ-Ôù cœ0m‚ý×È^ Î¥N²zœ~N烞ïZú4p.vöh úM÷iû3ÐÍÝ»èfö»º8c¹F§ƒª_°g‚ÓÜ9C÷oó½QÀD0ÿOÑìûºæ¿nO<³Œk8Áhæ]j®µÅÊ3Oó £–µÌ“Õ£ÔíF‚5Â&ƒqb°[X¨ž†s-˜˜%`^oje`Ì4sš‘n¦€Òê3V´¹ÞZª“:Ùìævµ^5óT³¿ÕŒ9ÆÏæ|0cTŒZ\I ¿Wþç JwÌJæ:àF €²®‚gÒ„/€‚}ý €/€^\Jiáoo÷ÃÆ¥½ñ’ûŸ×°#°x¿¾›ö}•šâhØ÷ðœ·v^²­lknö<{’ 5wG}W3 j_\;˜p%‡[ÁL"ÑïðBˆÿ…W‡ãy Ÿš< F{&¨óÙûS\†ßé„Âë,щ@²‚ ­S öÝ)6ñ?’›ðU®»+˜]ÛFæ¯ÊNgQèp‡¸=œÁ¾Ïíf÷}½³Ú¾ìánRh¸Ãô<ö*÷S½œºN7}ÎA=õÞÏÄ?ÜZZÈ꤮7~ó[ÌÏÀL¶î²^óUCYOm4n1~QoC`ZØYV„߯ƒÙÓhk=f[5ÆØ*Õ`®³‡±Åš *ÌH7À:ß\¥.ã^u¢µÌ*ÁŒ3I…Ì ¾2û™ÍÀºÒœg~ÆJ¶«_h±¯ð”Åðýò/ÿÏŸ ö´J O{h d€ÑÜH&7î;NN¢Ù^‘8ΊpÙÔ ;€eüÎÈ}G¬A!Ž9;“vŸ•—Yl»,£ìI)™²û]ˆLX™É—%Þœr;„M Ž€[Øéwj!ÄañWÛ[tGóŒ KžßфƮáDè.û“ h,ê’ëw6QuIMøjãšm-ÓšBNâÎü-ïCXbprø)`^b¤™ÝAÕ¶vY×aÚè Á¢àµ`Þ¾ÆNPŸ®Z ª³Š²€ÙÜ|Uýf„1ÝüÌ\5μT¡jmj°®´î²Z‚±ˆñj>Xif‚5T{µF™`Î5O5ÏãRUƒ}!÷²ÆsÐ{¿ð¥…¥³XÊz ˆ¾ÂåCºì+zeí;Úã4@Ó€14dá~ç,-d¥íûóD¾g ´ôû»%„Ǯݩ{"wÅAÆøíl*†Ý—}\°ÂÞD…É[ëÝØðqˆŠŒü$êà{zñ¤ß©…GÄ“^‰3èŽI>¨“T5Hcö¾9ùBˆJÎéíÞkÏæñ1@ ŽÊ 6÷;•¨ê¤À&|øÎòc üÿëÂ…63š<Õ±ðÀu|¶ß®ÖS¶ p(PߟçÐb ´•À¤ ÿ9æ{&QVÈJ"›v”-YlAêþ,„â˜UÒ,¤‹dåon\ ;¢v­Êë´ÀE  ÞI Ë’¾€˜†Ñõãl0¶³Ò{ÄïÔBˆ£Á‹aÛ¾Ÿ;ëq¨&ŒRO“aß/X…•œ×Su#2X Á¤`DX¿Ó‰ªJù@Û§™‡…äÔ×ãüN#„âXåœéDê6°yÍÖo6hHí“Þ{ñ P°i÷ù7@Â%µJìMã¬nñ(ÔL.¨uâ¾ÂÚ}~§BMî¿ÝwÿU ¯†q»ß©„C/u»k]6x* úJTuR`¾ ëcv ®ÝË ×cøÏfÑB!Ä‘ôŸnŸgçÖÌl˽´å¿ß9¯ï|{ë«PóãèÏb›C“Õ _kþÄMˆ?Œx#Ç8Š]?…•Fö¾l˜·«ó”4W¢JÑ™úwÝ ¬aj®i‚ ¨€iúJTu²DTøÊÚˆKfoÍ ³p=¬‹@¿Ó !„¨6öý'7²à’mde䘛gƒý‘=ɃèVQOÕœ u~¬LÁ4«Fp'ЀI~GBT2yYÞp`$Mù˜lÔ0B~‡B 'ÌiiŒÀæ°4nõ;“¨úd›ðU0ÇJ K*ëï:ç6¿S !„¨. úNÊ;V²aÍÒ‹`ãè-SÖ/ƒ@ªõT ]ž<¼ÉíPSÝÉïBð8kTPº} !þ‚ûãÝûËÆª÷ºÂïTBˆƒ¡“ëÁüÍŒ H\&R`¾ ØfËà~6{Žý]h†ß©„BTU¥Ý>×nüxÅ|H{5£õê±à¾áí$BýôÄá)ÿ€Ô«q„ {3b„ß©…U‰ç²ÅË-©*ÛøÎïTBˆƒ¡'¸×jÂÞµš†¯ò;¨.¤À&|lL ß]6v^soÒƒüN%„¢ª(íö™>bKǵ)°ªÆÆUËCñbýE7@=/Á¨4ê–Ò±¹ Ñmj¼ý¦ß©…UÚ½^š×£lh ¤ƒQËïPBˆƒ¡ôÏ¡ÉüØüwØX¿ÓˆêBö`¾ š¡ [6ÖCõ2{Ù¾ÁB¿Ó !„¨lÜËœH;²^ÈY˜y2äüÿñÖ·€Œ !P+5¡ÔЍ5;þqPÊ0ÔÀvVz~‡BT Þ¯^÷Õ¾Á`¼£+€ ~gB}¥ÓUÿ–²¦…ÉÖâ0‘›ðU ¦Y Àbû\½Æþ(ÚùN!„ß¼5´qãaÛ͹™[â!ûÙ­2£Á=×Yç[bjÇ.øµî©ó+X±æ›ÓØ;GÿD¿Ó !ª#ï7Ï{ €L€:­F°œ"d&›U‚ÓÛÓã øm [à6ûIT}²DTøÊP†2X?Î LçG9/ùJ!„_¼åäÐr¦ît·EÁò3×y‹¦BæGÛ—mú "ê„«ÈÕд}CÕl2$¦Å×Hê¸_aM!Ž0o_sö~7Œ26*÷>â(rö¸Mœ|ð†¹ïy—B C½ úJTR`•B0K½¬ú'o`è¿Ó!„8Ú &º;~†U—¯Ÿ¾$65ß’±n%Þ0o´—uûLŽ®;5%¬×Ítéö)„ðÅ"2¼eCÃ5 u¹ß¡„B·s±ãÊÆÚ!ûVT qȤÀ&*…ÀV~øË`²_µWúF!Ä‘V´ª8c÷"H+ÞüêŠúÖ*#cU3p{µõH_ïâ”@J—ú75î.Ý>…•‡û"£ÝA nWçòm‰ç'¿S !„Û@Ôùeã`œ•Œñ;•¨.¤À&*…°÷­ððppÎ<ç¿Ó!„8ÜB—è.%gÁ7óûµoÁʈtwImØ37ôaQ<$æÅ·JjL¹ºÅ…uiäLéö)„¨”Þ÷6yÃÁˆåkuµßa„#ô¾N°Û—›Ì‚ð(¿S‰êB l¢Rt ÜçV}N(Ãï4B!Ui·ÏŒ×·íNτԫ×u]ü1ì´wíx꘵¾K(‚ÆmÌnþ8Ä&×Ì©•ÆvVz÷ù^!*æNðæzo€Z¬Q±~§B ÷Fw¨³_-ØÊŠ JëGq˜HMT +?ðè8w£¾Úï4B!Vi·Ïìé9S2ÇÃÒן¸¨1lmGÃìK úÔ¨‡boƒ&›o„øð¸¢@)ÃPÒíSQ…x¸+¼ÓÀûÆ»‹õ~§B ;ÝEG”!sg˜ö;•¨.¤V+*…` scøà|êfºÑàµ¡Ž»ŒT¶«–~§BñG¥Ý>s·îŒÛö l)̲ù.°;Ú-BWA”¥£WCk§Ô aX³ÃB@,‹ýÎ.„‡Â˜H:SÁœ©"Ìð5í9ÁïTBˆát´‡‡V€¹ÍÐê:0]3`J`q˜È 6Q)k:³ËÆ¡yöØP]¿S !„ø£‚üÝswöƒU6ÔXòSY·Os•¹:ð34¼,ùšÆíʺ}†5ÛWXBˆj¹œ'œzà=æ äß~§B î¾îtëƒ@÷àX¿ÓˆêF l¢R6±òÃöûÍ“å¤8üN%„bOjI£¢H¸yúÊ ­`srê«à¬pç9u!iyâ•ÉA£ëê¿Öè#ˆø>ìûÈå~§Bˆ#ǘâíTï‚9D-3çûFq0tº^b÷‚ÀÅjYàI¿ÓˆêF–ˆŠJ!0ßÜÞØÄjF‚Sà˜v¿S !ıÇ>[¡1eë¸?ÂÎþ» ó>cY >ļx+©Äž^“Ø¥@k~4~÷;µB=îÞtçM0æõ8`7³(ð;•â@¸Ú}à auƒ½" Vqß©Du!6Q)­Ý\`ð#„ê9±úÊ}wŽó;BT_z³ÛD§ÁÖ‰¹:cl¿;oÐÖMÀ 7Ôú0vE\m¨Ý$î¶:©ûšìÝ8ÞïìBá÷Aw¼wXmÕSÆ8àR ™ß©„Â6œ7BwBÄæÀü¨7ýN#ª)°‰J!eÕ  À9Ëí«#€4&ùM!ª“ÒnŸÛ’r?Ê.„-¹yõ3‚÷’³Òµ æ©èkn„:íã%6+V-6GùZ!*cº±Ü› ê~£*ÝÒD lBT öýúL{XAkZØúúITR`•‚e™f 敆V£ÁI°‡Ûo_ûL!ª¶ÒnŸ;ŠwµÏõ 3sÛégn'†®‚¨E56GO„:ÆïíöÙÌš¶wO¡ÅHaM!þĽÑýÔ;ÔFš ¼ ôð;•â@è>N‚ó%ÏÜø¸K lâð‘&¢R±6î 4ûW÷vS¿Ó!DÕµkþî-ù;aõû/½Ò2ç­ùÌUÖk¤\RX£ú|AbjJ3éö)„ì5¦xÿNR·ýü#„8.n“^–w²û‹¬µa§úJT72ƒMT*Á–æÐðsÁùMŸcÿ €K{¿S !DåWÚí33¸}ÕF‰…vþn^x4ìnH~¼Þ‰ êÙÈ1#€ë€,¿S !DÕã¾áMó†9„÷Ôdà&¿ !þŽŽw‹tˆ½{~V†™ úJT7R`•JàW«IX„Òõ‡ÅÅ@CüÎ$„•‘}¶½1Ô²b·{³aÇÊ‚Â<£¬ÛgÝÓâw$¶€Øk6[ Æv6¶ß©…¢È´öŪ…|ëw(!Ä_ÑE:I{¤ÒÌiÁ¤e“8¬¤À&*•`×À-aƒ¡èÁ绦§ÛýN%„þsšx8m ûÁœ%›ÃaÛäÿÞº˜ÌBFA\\l­¸»¡öž¸W®ÕÎH3¾DþBˆÃÌûÕ[çM•bì0ÚÐho›.!De¥ë;™N+`0 Â:[MÂ2ˆó;¨.d6Q©2¿ ß úJ§«þÅï4Báצ`Ûñy£·DÃòÜ´Æ ‡Àö—r‹¶†A̸Mj.€&SÞjÞê4«}{ÝÓö+¬ !„8¬¼™žÇ€²±qÑ…y~§BgŽÛ2´ß/­bË ¶ñ;•¨n¤À&*•`¢•x\K§;W–u¿Bˆêî?Ý>·íŠÉi+&¬ëýûññý¶“ÓS!¢_ð­ðhÔ%å´&wC½3ŽKÚ€¹ÅÊô;½B¾õjº¿– uª‘)Ía„¨ì)v®=»lЦ”jˆ8Ìä-%*•@븰ÞàNb¡; Ü[-…ÕXኢÓ˺}n(Î\¾ög°ž7G«göëöùBR~Ãk!øLà«°ÓüN-„Ç/ƒåÞ~ЙÞtC>M Q%8­Üuz=/7_C Ò²Âäÿ_q˜Él¢R ¨–Àï4³gƒ‰¹Ô’µñBˆj`OXÉÊ¢¶µ+ç‚M;`gô®i;šB°F o êߟØ%¹D­±ªæ*¿ÓŠê¢dQÉI¡a——–0Œýoë¶ ø¢ß)…¨ÜÜ ^×°©Ç`³TwI¸Œñ;â¯èÞº“ó$˜õ­:ýN#ª+)°‰J%¸Ò2ÂŠÊÆz½ãÚ.„@„ßá„âðŸnŸ/ç´Úô ì¸|g×ÜÓÀdnRŸ@â†øi‰ë¡æ”šýã:€±›Œ¢C}V!þÛKmŸþeÄ 0p`F³&?Bv6ìÚ·^Ý÷šxÐj­Z—¿sÊŽô]Ï”û é<÷¸â´«wXo]ýJÑ×À—ÉŸ\>º;DuzÙñáWDžv\½eo·Ï7ø⮯µ°vÔ>¡ÖŠ:×€ºy¿nŸ¶ßéEuã´ÙÜu×mÐuÓço†N€¦—B›6°};ìÞ ÷d­?}Á[Z\ÒpÛWÛkÞÍ{^.Aþ9;Vïáµ#OŠxÎüýœk»ï}ù†ññHøæã/ÖíÀÜû_—Ú ÷5ìq9¼ÉÇ3ÿo¼òêò®ñŒytòÐ@¥Ì¨ßœÛh~ýŸ öñZuc?ƒ‹?¹¼è‚EàÖ¯³x¿³žÁÞÀLf3ýþn ß=äeÑIS>s¸QlLcïûýd¿Ã !þŠvÝ›íû ÐÚܨ@[¿3‰êÇðöñ;ˆ%ù¶ÞãÂŒùË–þð 4 ¯wNÓt¨PsMBW¿Ó !ÄŸ•vûÌižm@vÇí—o~ÜåÎ½î ˆ~*棘PLj‘ VWó»À·~§Õ•1ƒ3òoº'{Z3ØóÄç9©×ƒû›áÝn ŒÅPTd™™P¿þŒWÏ…6QíRZ¾éwúŠ9¿;›ÜG!ÏÉ]’÷ä¯ÞqÙÎS!ÿ«¼óo…»ò^Ê¿ÚLjŸØ:’ÃÌJj _|òÉìÑðã ãýô(d\²éå¬DؼacIF*„Ì+dÂ?οëÚëm¸ÿþG¹k \ûÑå­†î€Ùoÿ¼kîuÐdb‹ÿ5y3%j¦Ç¾7]xÇÐë†Aã¸&Sžã÷«$Ž´’NzHqSÈ[œÿ^ÎvH>­öžÆ—@Xj01b²ßé„eÕŒôñËN€¨¬°ˆš¡ÃcMt–½¾Åa&6Q©¸Êu`ÊÔ… ¾ùê_]§]ƒyPwZíÉ—úN!ÀP†2äeDmoYÝ·¥m²¡d¼]\2¢þY;êC¨Qû΄¾öDð•ÙCRaN›_íº vnº9òÇ› ¤ä—[33Á­Ý¬eÂnйŸyþ|XòÛ;bc-+#Îh”±â‘cñß×}3Ó¶ÍÞúmN$t©{q| ÿ™©6唉™Ó_õÜ ÂúAkvo°a]ÞÚÆÃ†ë–l wÍ}pôÐàNçþNÿ¨ƒ/ï[rÃG°mƶŒíŸCûÚ?o{7ÿÏîkÛ Ú<ÜþäVwÀ‰ë;-é0ÖïA¬’p{Xqä9;ŸÍiÉÉññó lWÀŽhäw:!Ä_Y1a}ŸE¿@§£¿K,€69 “:=rèçb²DTT*ÊÄU&XÝ­F–v§Xw`¹ßÙ„Ƕ]sŠúX±x[çôBØsAñ•»†ˆ˜ðþá­¡A“Õ0 j¼þsÔµ¼âwfQ­á»#ßÿiI1ìzìá¡sê§ —qà„úý»$ß Ñc£Þ®¹ ÈöºùYTÞysö4ƒœozæŽj:{m‹¼þàÞtB§” wÝ~Â9[Àøµn­?qNC¿3WKìÉv×ã¾:´t©íÏÀž½ÌøisJÖ#°aÇÚ[ÓSà¤[NÔq.0ŠÎÞ@ΰMO&‚íÙž}ðØÞÇÕZ\{^ì HˆJ ¾|ÚxL×÷Ò¡îܺiÿµWœ8:–xYÌ`ÀøEf|´o,넨”¼5^#7ÜîLw3溆%ÝÙíw6QýHMTJÁ;¬µÁ%`/w»ØYÀf&úIQ½9ç93ìÁùæö{6½y—æoÈ)§æC­µ­ÄT¨UTsT\;0F9{»}ʧ*qäÙ“½˜Ývœ7¤x|{pnÙ]¸¼Nç^Üf.ØßÞöÔÙŒ¥j$°HÞ™•GéžpÉõ0M °oî\ÛY< Öפ®×ðû„ùMw„ù ç [t¤¯[Zú×P¿#bçRP“cÃÍ\ýË]×Bã:M'5ê ]Ÿ?³×©oAçø3¼S~†:''\î÷ÕWî;nȽeß`5Y¦º.0ÝïtBˆò8ýÝÚN/`<ð ë©a§úJTWR`•R0d>v%ìþ½xà.Hð;‘¢ºqSݵÎ:ØúHîÖÌ‹ ûûÙ[Öèå]qmjEÆ­ƒÚ·ÖÒu[€jg¤Èñ;»8vÔÖmê°gò'ëWŒwkÜ75`¿öüq—<|ÜjK½qÎRoä?V}²÷«ÚªŽÒ%¡MÏiA“e0`ùà×.²ï΀q ØýËn«¨DåŸTP“ ¿?J6|ýÌÈFß&ƒa†a@üu’kO‚篹cúñH7ÔCäÍbž7hHZ±ÜØc|´!ÊïlBˆòÙkôH{1°ø­M‚{gøMT?ÊïB”Çú=ðjxбÞp=Üï4Bˆêà?Ý>ûíGBBtí~‰'Að†à+a{gË^Ê·~§Ç÷‘­Ív_ y÷ ÚñC Ø-޲ܜ¯žò*Ø7\Ñ£ÓóÆRuúþTûš8ÿtΫö~5ÞöûêÄ·¯€ÖnÙñw*´û×Þ¯Ô¶ïñ¹­„àéáß/z}2lô ð‘õÎ#Ÿ±—×Z\s5\¸¤‹ÞWÂÍ^Xóð½~_\åá¾È—î :x ieúJñWtK·sÖ¾Á“¨aE‡…ùJTW2ƒMTJÁË­SÂÂÀIt>s¾-ÛœR!þNi·Ï•*}ÞÒwaÃŒ¬ÈµÍÀX£ê{_ArrÒ gCò õŒ†×BpBð•°ûýN-ŽUÎc‹Goß[§§ß3A?¶4bû'`úÏÛÎ+»æ º§´‡Ò½ÕFéQ!J5 5Òø4˜XsÖÀo7ÂÒeFÌ}ÞUŸ_ý zæœc÷aÐ.½ãèã*{Ü¿/|âÜW`è[W×fÀÏ­š?³8¿;›Ž©o Ùl| êc¹1Úï0Bˆa×Ï…n) «aPöNGˆØD¥œðöÿÍ‚î†t¤ß©„•Qi·Ïu›2¯Ž„µ 6½¹b„,ýFI&$ý£nrò\h86ùñ¦« */⻨®~§Ǻ’ðŸæoH„ímzßøÕçÀ¨ˆÌà,ý<üÍÞ©à^~ÚéÍ~Ûÿ^ûòÏä9€§¢\á…ýÃãáÜ}ÖvWð¼ñõC`À9ƒÚ÷ •·ó‹é/ÁÜ»f-ýµ\饷´ƒSµÉ>ëe¸î¥Ë[ ݱoo¸F~_Õ‘ã>å}éÜ |®®1ñ;â@8§9Qz@Ù8k†‚Ñ~§Õ•ØD¥èbFk”u+;;ô³ß©„•ý»sÝ6õÝÚ~}XõÅ}`÷À¢ÈAÝ[k§×M7Õ¼Ä|U\ót¯›ßÙ…(L|~ô¯aÇI—×¼’cã¾ûŒ· îîïë4œðçÇK¥÷LÞñ~_«¨>ž¬ñšáƒá7µæÔé©ðîÊÏÖŽx:\qRNû÷`ú˜)ųn‚UƒR[sü޽ܴ ¿7ùíøÅAqTÉI¡a~_Åað®·Î{T8£¹åÐO'„8òô…N´þ¬4sF໽M`”TAÄ"o-Q)…Å“Â³ËÆúï=ÐïTB?¸¸N"l¹tûìMm!õîu/.ºrîLÜvÄeÔ\÷,4~­áu-ÆB­bOŠïF¼‘ctò;½{íZñĹ³GÀ®Ü§‡Í]^ͦ%uÖBhÖÓ÷Û̯õqzu†ò lF’ÑÚ»Ùï«Ç k·¹Ñ À¹9}‚g·…w'}Ö{Ä¥°nfNúÒQpâúNK:Œ…Eµæ?°´;\\¿Gþ  tŠoñ[·9ðøÊ¦?7Öפ®×~_Íÿà=o•÷ (W½­.ô;Œâ@8Z×uî`ràƒ°.~§ÕØD¥(2ó‚mÊÆÎ‰öõ:ÏïTBˆ£Á8U^l_¾ƒìaù;ë6,Šƒ-/æ¦dþQ»#¿ªMz§d7û¤¬Û§Ù@MRÒíSTgxgÀ®»ÿ™># ;¼¸ú·à.íÚ¹y4”$?ËÅÀ+o¼ Ü8Wy{ â¥ êÓònõ²¼•Æ[~_ªÿ­SÆi·œ0ÞëûEÁk+áÌ–ç|Ýåaøäú÷º|1ºŸzJï ¯€K"zvåù~§=pîC|êuÆs½±Äï4Bˆa¿àv±³ ÐÚ\ìåwQÝIMTJmZÁýÞöÝËžíw*!Ä‘PÚísGÖ®ßvô…ǯ?{Ée°9fë¦ c ìé°’°bhrIƒ'š=õ&Ö½%ùBœhÎ þàwz!þ`¥ÓÐ=ò~¼äÒ1¹P8ân WƒÓ®od‡¥àÔ}ð¶^IÀÛÁï#þüp•g.6"þ|»‘ì=çÝTÞªK»…îOˆŠÊ Ç°óvœµFLzÀ¿Ï‡ùÍWÖŸö8<˜þØÃ~…+¿¹¶æå¹eÇñÉ'³GgÀûýÞHûä¡Ê·§›·Žt¦€ºÆØª¶øFq ÜšÎ{,~4óƒ™~§ÕØD¥ˆ´¬0ÆrãMç•»N¯÷;•âpÚ³§mA¬T6-}6è̺«F€÷©‘ë]^Öí³Á‚zmΔnŸ¢róê8›Ü³a‡9(âûÁPrá”Ò_m\xåñƒA/¼þÃ3öÍÄþ»îžåÌÀXRþãÊor`,‘›¨|â>ªýkÜqpÓ¦ÛÛ^³.ê}Éù}ök°4k¡³¼<žóÏîÏ­S¶±»'ÂËÿzæö×o¹ysò[û—ß»Îë ÆGÆuÆb¿_M!Äpp~p‡BðÖ@“ý›è q$HMTjÖLs``؆û€ìw!Ä¡(™šµ'ÖëÌÔ5WÀêå'¬Ø¶ã<\’ õNJh’´g7Ó´µtûUCia­ ÷MßOÅÇMܳ¾>¸9Wž|ÊWà„n<¿ÛõeÇ—.UyF;cõáÉðw;!ªŠgø¿nn1OMùî‹·áÔÚ]?ít5¼2ýùqoæBçîm/8§1doîšµüèçó>õ~óž£_¨Sý~µ„¾]·­‚ÀÛæ´à¿ÓˆêN l¢R ôµ¦†îSz½®ëw!ÄÁ(íö¹ùÝì7| ©£ÒŸXòvÛmåw„„KâÒêö„&+÷vû¬™]PëDnŸ¢JØ·4ΠsÇÝEŸ~~u8ƒ¯þ¤óbpœ+Î>µQÅ÷2øÌkYÞ=æÝåÌÊ_ Z1Ù!JT]Ï8é„öqðîï#¯zõføé†yÛÆ®Û/¾¯Å-§B||žøaY»%Ç­˜Ï®tÃKS û†ÌÅÙSŽ\.c:¼ŸÀ¨¡†ü~•„©­·Ô‹ÝË ×c xLô;”¨î,¿ñWÂïL;œóê lßûJQžÒnŸ[æee} ÛîÎ}%ëep;7{^Y·Ï¸×b¯‹{oSk29H·OQE38 wfÿ5cî’ǧ·ØŽ9èúS^ýá%a'µc©kzqåŸGå(Lj‡½Í J•¿äÜ!¥…7ï¿n/)hYÓ!ª¾æW¶,jºšÓr^Ó…{oßÜ5}pf¼·üõ³>¹Þãu>.ß}UÃþÙpëw¿rC"$¾[¿Câ9‡žÃéâ>î^4P£öÝØÖïWGQí6Òó…ä ÖÏÖ’°½Ô;´3 Q1™Á&*µÀV~ø0° ÷ûr¿Ó!þË¾ß –vû\‘´á”E³aK|NdFˆÚ]ã»è0h|qƒ`³þ»Û§%5Qõœá;Üþý”´}…5¼Ëûÿ»ã‰ ‹ö8e¿þŸ^û½Ý@+Z êu(¯5#ÉhíÝ\Îí‹ý¾|!*ŸÞo\4òÜH˜Ýrñ˜‰7Âå?^Õ°ÿ…ðåyŸlüftYÝ¡o¯w`Â?Æž\tžp>ëù ŒwÕwj•ßW/„ø+ÎXg‰ÞoÆZ°¡uJXß©Du'6Q©º˜SƒƒAßb_f§ûF°3i÷Yy9:eÃW‹cʺ}R­§ Ðprƒ››/ëö<ÎÜéwj!M~Û!üXv·ü¤ý²u Wœ}òi _¹>÷Œ7þê‘ê:”{ûÇåÝêexå¼rÏÒ/Tˆ²jOÖxqÆðÁe·ë?úóU7BƒYÕ_ º—¾Ò>fOžÑxÞ› k8 ÝGüyÜ«½÷ÜÀ¸‰+Õk~_µâ¯Ø5œÝ¥lÈ4 úJTwR`•Z0ÖZ¶ìÚÎf{È¡ŸOqðv§î‰ÜkÚ¦×^–ëæmþxõðÖxüP?¾ÞÝ ‡Ô«qDô ŽÒïÔB??ºa¶‚=«Çn\}=8Ï8®… N“A™§>Þñÿ{«¢® 5-¨¨»¨ß¯‘•MiÁí&6¾ûh·ìøÇ ‹–ÿÖyY=q‘{Ý4èÙó4ó" “»o>库ÿgLb¨¹Æ5*îïBøÇéíÞkÏ,ê¨Ì`s¿S‰êN l¢R ,°Î ë ^[ïϧ‰w–Í)…8¢Jšé&Åj¿nŸQW-_Åo9)ÅÝʺ}6ê–Ò±é}]ùIÔ#~§âðÚù~É’8Ø}îÿùÛàÖì¶­å­ “î}nJÙqÞæ¿ï ZîRÐÅíµVQÁÎ;¾¼Â›ìµ&Äë”qÚ-'Ì„wÕgÁW¿c{Œ=pƒ;(tG[¸øüÁAÿ†Õ?¤ŽX[ÎVî«îdo¶ñ&Ïú}5Bˆ¿¢ÃõTݨlL F„…üN%ª;)°‰J-¬¯•Ì(kå¬ÐÛüN%Dõ¢ãõ;6¯ÙúÍ ©}Ö7[ü8»—寄KjÿT·'4o°ºÅ£eÝ>í¬4l¿Ó qxe½{Ã’8ØuÂ}-§w¯÷ÉkŸ zÚ=É=Æì=F,ï‘Æ’ò–‚‹ËŸ©æu8:K;¥Gé…¢ 9wFŸµÝLœùKpL4<{Ã+ó{6¼ivÆ“0>{LɤþeÇ{3=ýº†—u•ÌÔ¢RÓoèOõزqÀS¡`ÐïT¢º“›¨Ô!+&|¿±ggÛ±~§¢j+íö™Ý37;#V·ÎZ8 r^ßùöÖW¡æÇQÓjEAÓÔ†¯5{â&ÄŒŸ F¼‘cHsQM…¦.X˜½vxà§Ÿ»ƒ·©æo‘@hûýôÚ^{ãS5Œ¥å—×*ZªYQ3/Ã[^Þ̳ÿuFÚ_Í B”ÏÚmnTÂÀ«†Ô½$~ë·úžéÇÃÝ×ÿóž[€µ®j—¦à’;ÎK¿*fÏž6mÞÓêÔë-Ý>űAwZ“?v Ð`l*Ð(~Tt*”t~e÷€ÑÀܰË#ÊŽ7’•cDüùö—¶¼k…(׺}ŽÛtiê H{5£õªppßðÎv¡~z½‹SºííöÙÈ€ðqaoFŒ8ôç¢JY©¯t…ë¬_Üú’M3 îûìGö\ðpSR—Zóþêåwùü»=Õ**syÆýåàŒ¥êÓ ÎTî^o*Ïh[^¡Nqè¬Ef‚j W^yãÀOÿ²øû_à¢eýzŸÿ¼"ðJàî²ã½~n†w–ß©…8¶é îµÚ€àacý|B)UˆJ­t­¼:I0¿鞣»ùJˆÊ¡¤YH+XÿyV`MÉÞnŸËCqœ¶{9$6«Ó¢þu{»}6·!ºMäÌ虇ü´BTi;{xê=à<¾eXa8_^ûN—ÏÀ]ÕrQâWÿ}l¹{§UPHû»½ÓŒdå–»´4™+æö ÷z«°Pw´^Y!ª±ñ#– S¾KŽ­?^­ûö¤{Ãé+Ï|Ú˜Øà‡]“ßfß%Óv|ñí§©£2þ÷§Büït‚þ94‚›ÿ–›8Z¤À&ª„àao€.ÖvèÿüN#„?ÜËœH;6Åìíö¹òÿ6 _’ý GæŸñ§ÇM¨Ûš´h0»ù㛓ûÁÞnŸÞ}~§Â_»×¼“¶(Šj~|îò9à̰㤠Á¼x]ÇgË{„w|y3ÕJ i-Õ¬¸ U~a Ê/ä‹Ë¿½Â³WX¨“™mB*7è¶s,« e™åtÑî”xJþ ÷AûkÚ·9îg¸ý¡›» »†´½ü¡þ ¹‘¹'äEú}5Bô•NWý XÏ[MÂd q”HMT ÁXóΰ@/rÞÖòAA#¼5´qãaëÙ¹53[ÁÒÖ‹@nýü›¶v…˜Á1w×\MSjñ‹j]Ug(eêD¿Ó Q9 ýlij3(8îþs¦ÿ t9©°QwЧÞrÊï?î¿ iåü»ãe¨^å50’ÍEå´Êß»ÍH2Zå|àö:¨ý~í„{yŸz?ì7Î1.dÒŸ«ý[ñùðmþ„Ô¯î†Çz<³løGðShâ›S¿†.sN|äì °qÞ†q›\¿¯JˆêÍéíÆéqìèøÅï4âX!6Q%Ÿ°v„çg€ëw!ŽŽ´+7=»2 2?Ú¾lÓO9 ²}d{hüVÊ©Í&CbZ|¤Ž`6PêK¿Ó Q¹¸ 2‡Â/n0óyð2¢7E †Ð÷,=·=€±TÜ¿ AùÝ<Ëï *‡+¼›<‘ä=k~Uμ•Æ[忸ü½Þàà o-B8w¾·Þ»³ll&ãÌk+>ÞøN%?Ã?^½=ñÆ–0õ­9i‡®[ά×åj0¶+Œb¿¯JˆêÉÙã6qòÁæ¾ç] õN0èw*q¬›¨‚µ¬Kà pp~p‡úFˆ£C?ìôЙö~`]ØI]wjJªtûâ¯x9%'9AÞGƒÿïû+Áy·¤©³ Ü+^wé4ðºDm¿èÏ3–Z=Ë;_…]C)¿ôf,® W–·Ò¹¬œÛ;ìºCfIiÅ{¹ !”ñ™Þþ{˜®g oøã[Ÿ}\\«^ðNïN~íGH¹ á… "ážgoà×àì¶§míõØðúÑéëý¾Z!ª6ÝÎÅŽ+j†„EûJ+¤À&ª„ÀãV~`8Ø·ëö¡U~§âèPÉÖYA`}¨a%ûFˆªaÇu¾›v¯ÅÓ³7€}Ö½¯ž{.詉ñ±ŸW¼Gš‘\þŒ4¯CE]CË?Oųò÷tƒò›&x*Þƒ­ü<êãòÏ/„8TÎËî·MÙØˆW·¨sý¼—|2àÑ~×AÆ´ŒŒ¬ÿƒsÎïrfïÓ`Ò¨ s§´<äÓ qLrè‘:¿lŒ³òƒ1~§Ç )°‰*!Ð5Ð9ìfнÜp=ŒXåEùJˆ#˼ЈUàÜâ¾E-¿ÓQ¹íîüñÖe dÂŒŒÍÿgc×6Í£ÁëÔ¬É7eÇU¼GZEÊ/€ýO·/þó­w-¿ WÑ 9#É{Ö;Œ/¨¢Ìb2™Q6TïÕaèJxjj—ðS"`Úò¹ëŒƒÆYÍk\ ƒ¹ô¢kâàåâ¯ñŠß/DÕz_'ØûmúØd„ËçFq”HMT aÍÏÃ ÊÆ¡w{u’ß©„8²¬ST–š ÞCîç~¿ÓQ9é ©#r\ØÕùþŽÓ§gt<+eØö°¯Î-ç§œ —p]C#þ|ûgÄ•Ìþ{O77Î[浬¸iÂÏãexËË+¼y*X²:Áx ¼%¨BˆÃàvw‡·ßžk†et3:¾Ó'ŸÝàÒú…0a÷ÔQß5„«[ß0ãÊY0ïñÙÍæŸé÷Å Qµ¸7ºCýþ¶²â‚–ߩıB l¢J°æY݃EecÇÔ_ØcüN%Äv«1Ƽ˻БîGBü·!;ƒ%°#âŠeß§ƒ7*rIØDÐçÝ3çÜU`FGZ“ÿü0¯CK27—Ò”[AÐr`ÉÊ-oi©Ê³>>Øóì¼‘Ì cu9ÇUÔü ·÷lyÝH…‡Îf|á¾_66Zjl:üÏlØ\ ÿþöÿÚ=v‡æìnÿšð`ß'¾„Mßo·¹èПOˆêÈþ\ß`ÊÆ¹3LûJ+¤À&ª„@MskX~ÙX_ët²{ùJˆ#ËLR‹Ô§À‰î}®lR.ÄÉùõòoÆnÝ }RþZ}x€;¶æ§‘±ÏT«hæYcI¹·VØìÀXrp{ŸUÜtÿó—ÎxûÓ̶qæÿþ¼BˆÿÁ"2˜ª–1Ƽòè?ýî&…z÷&øâôOŸúêZè~ÆéMÏ‹‡YÁéÛçL÷ûÅ¢rq†:‰öj0¯4´ ¦kL×ïTâX!6Q%„· „‡5,ë¥n'ÇïTBYæÖ}f8'ywº¦ßiDU¡BjˆZ áÏX³"7CøPk|Àì«ZY/úîЕ\<ú‡U³Á^÷Ë­™™àÖëÙa)xÝÛŤ쉖š˜˜SVÎZ7¡’†×˜ô< hzQ›ÁÂÛæk=ß3ü~•„¨t¸ûºÓ ¬݃‡a¯D!†ØD•`m $„í÷AÅéjjíw*!Ž,³ 9ê7ð†¹ïy—+Éñ‡|ZQMÅÆ†‡×] õÏŠšÖòŸ0¾Æ FwAü¢ˆ›Ì…¤œ¨¢æ¿@¤P5Ÿñ;íÁÓ6¬ÎŸ;Þ1xêLðæ¶{6yد_ûþé]ÿ||é’ÏŠæªUXHËòVo•s{†k–»'Z–,¯°åe•¿'Z…{Àu(ñ¨‘l´ýïB`Å]G…GÈB6Ÿƒ1\m37ú£á©/LQ0á©Ó¾{zŸvÁk=ÇÃÃ-î_øØ©ðkÆÜ/çK×qqŒÓéz‰Ý ¬fšØÄÑ&6Q%j*;h‚Ñ“ŒúÕAäw*!Ž,µB4÷+¸Ú;•þ~§•®á4t…o_þâÁq¡G=zô€:uêÔ©S,˲, ’ê%ÕKª·\{Mç;H-\¶iõ-`Þ«:›!¿¯¢b^§¡€ÜÝã¾Ü üªkx7×”Ý ”2Ç‚±Ô¼·¼Ç«<ëƒòfªyYn°¼Bšçt,¯I×~ïø{´UÜ´üoÂ*žñöß3ÛÜ8oYùÏ'„8bnñ&;7‚ñ©PQ‘ühªQ_c)¼ÿÁÈËÞŠƒ±Ó'mþú_ÐqO§;:&•íÙæõs3¼³üN+ÄÑåj÷ g$„èîÃ’nql“›¨ Ã0 Ìu­€“à.p^ò;•G–ª¡ú˜ÍÊÆn¾ÛNWâBˆ8²Â¬q2¤t©™Òæ(h¸ÙÐgÁ…îÙ_ø®ùàš®}¦N:uêTÈÉÉÉÉÉÏó<σìììììl½rÔæo–@¿Þ=Θ ÿ9ýÍ5ÑŸTã‰û}•VtâÿÍýí8pwä´§„f^^ãÄžàõH¸!:¥ì8#™+Êo*à)o²Š cûηÔêYÁ=‡¶”³‚Ѽ¬Š–x^¥ïÏs]Wö¤‸ßßq±|a ö;ÍŸu®Û%üÔóö6İsÒÎøºÏj¸8¶w›Ë^‚Kwn+­UÄ1Â6œ7BwB`³š úFk¤À&ª”@_õ{Øù`¯×?…Nñ;G–šgŒW‰ec§ž·ÝýÁïTâh l³º…?ušD~Ù %,Y²dÉ’%pfÇ3;žÝVœ´äò•M &&&&&Šy8꡵âÇ”—ÁŒi3¦MŸ·Þzë­·ÞZvÞb¯Ø+ñ`È!C† ÝÑ;ž.ž 5ï?¥Î5~_5Øq©#rçCAá³§ÏkîÒ®›G¯ˆë4º¼G”_Ðr㜎ÆÛðÇi¥T^{±UX°+ŸÊSNy3ÛþXv+›öÇ<½gÜŸòýiák…½!îU0sÀ´÷æ\ ¡PII({öÃØ £ÚÁ<³Ço”·ÜýŒX¦«*0#ìþÝmöü:gžõÛ-pá{çžsÉ—°­Mvö¶X¿Ó qdÙ÷ë3í`½dM “ßâ(“›¨R‚ÌÁn༧ŸÑ²•¨æTÕÇÊÞÜDï>¿S‰£E VwçCü»fý 's{vî&èÕ«W¯^½ 77777RRRRRRà÷ßÿý÷ßá û‰âÇS›Þää±Ðõ¬®gqŒ1bĈpß}÷Ýwß~ï£;vìØ±£ìþÈ„@è«ý»n/§ä$;ùC/IúÖ6ÕXÞtîÐκÀy©¼¥—¥-•g´+¯0¦ò¬¦©Á_9˜®œ6SXªFØÊï:굯¸ê¯Ïü æ}<ë“ßÊùMþØm£ï™0áà®_ˆcw;–f ž6z³Ýï4¯oËþ\ðOø*}Ìê‘ÏÂÆO7,Úø*œ×öì>}o€ ?¬¾Þï”Bº“à| Á'÷^ö;8ÖHMT)a)Á„ˆ‚}¦û…þÖï4BYVKcž^6v¹5œüN%Ž–°‡L»ÆøQ¥…}×_ýõ×__¶Ô3 ƒAøá‡~øáhÖ¬Y³fÍ 7±¨qæOàÍw?v[ÂŽ>ÅŸmù´ì¼>øàƒ>@ Øïß~ûí·ß~»÷ùÂG€¹X-ú°dtײ§™× ô³Ywný~ÿ>SÀëµ9ü¢ý—vVT`²ºÌóU´[…K93\sCc$m½›ö{¶ý „«ÿ+G¹]GUÞ5?(Õ9ìŒ3O^÷çÛ/npÙ3\qè×#Duæ­ör½_Á¸ÏØjÎò;Íë:³ÎégÂ5§¬ü6 ô)úTÝ fnšÞnN5è*-Äþ\Ü'¼,ïd÷+YkÃNõ;•8ÖHMT)Á.fãà`Ðɺ¶ý˜ßi„8²ŒEªÈx£lìÎr½ý?‹êMßâ\ê SÎÚcʹ0nܸqãÆ•ÝÇwÜqÇЮ]»víÚA^§=ïd= EŸØSvm*;®ðÁP×ü°/r[îybccccc¡uëÖ­[ï×yåÊ•+W®„P( …€fÄÍ÷[hê‚…ÙË¡høkÍžÞ=®k3¼û?sâ´?ÿÇ%™eÊ/HU¼„´ü½ØJ—rþ±©AEÍ*:Å3äŒ%åÏÄã3¯åß¿^Æâ?îWþÞp¥{»uQg=ÞyƒaaÁ DDDF†‡ÃùÝûõëõã|‡„8vÏ3Õ»̧Ô`#Îï4¯mzû¶Ç¹°dØš×ç€!ÿ¸®å ×aõÖU¯­ÙÓ³ëomáwJ!Žw‹öß«ØÊ0e6q´IMT)ùžaa ƒN†}»ßi„8²Ô,µ>ðϲ±÷’7ßyÎïTâhq;ñˆ³zý_×>8µìö 4‚ ~ÇYÿxv^VrÜÖÇ¡ðåP¯üVŸ/güîû2{”Újmˬµu¿çs÷nz¿löº6 âÁ‰r›ØuüuÃö|ã<ù'ÞôèDÔ¯ý]T*„Þ¿!ºËׯ’ƒY’YÑ̳ŠöD+UÑ^lÑÔàÝ=ËŸæey+Ë›!WQáíÏ…Ãò wìFZQ¡ðÏSÚ4È0”RòS ÄæôNò˜Êò;Íásßø;¾y0zdvùÇù/ËÒQQµéÙZëý~^ ¤™Ó‚1~§ÇùÑJT)a]ÑaaeS½6ÔqWúy…¨ŒT³³ñKÙØ}Öã]îw*q¤Å׬ñ¯”«¡àƒŒŸÜŽ0¿ÅÜ+ì×í±çŠ>ŸõÈã˨º{šÃÎÛŠÌmó÷çµ§»=B°åÞ]?mh ¡!NË=å,²çØ—Ùúè]onÚeï7 œ:ë–ìØ ¡sîŒîþ P+ò´ð‹¼ãËŸéåt,oϵ²™g5/0•73¯¢‚—±ø`¯ÈXâþW—ë dÞààöxB¿zë½É NR/«kýsø<ßç•þÏÄA¨K¨[I¸xZŸ‘—ƒŒi›¿ÎŒò;G_à˜Î?ÊÆa­&a~§Ç)°‰*Åš¯¶÷ûàgO±M;ô¿ŸOˆÊÌ*4f˜?—½ÇÝÎ0¿S‰#%l¹µ$¢+D¶³>Š*„‘#GŽYÎ6ø×¬º2üºéPsTø%ñùåœh%9Æó`Þ«:›¡²¯á¬q=¤œQ³QëËÁ½4ô åÌxK÷TÓ"0Ï s9bJ—„†rç¤f&œúI“‰àÞÐ>§Á~Ûú—Í<«pîÙ'å¤ÔÇÝ^Þ­íÅöÇ™b¥*.¼™wï_,›Yvà]CËü^߯Ëx ¢BžâÀ¸m¼º¹à½ç c²ßiŸ–u[ iž ߥM8å«1PøÈ® ÿ íÝóò3`{­jûüGˆÊÀ™ã¶ íׄÄ*¶Ü ¼ÅQ&6Q¥O±¬°Zec]à,°¯ñ;•G†ÙÖli5/ëÉîr÷<¿S‰#¥fIøK ûÍÈýãžk¥M zôèÑ£G¨ùSØú:k <¸µFlY!-éÕè šFBý_¢3Z^Qö5!/ò³†ù€‹khØ1hÇ üý6·/]:___ aÌç#ê ]é4tφ‚7n«÷S ¸Y±¿D^ö ÷¬;÷cøs!j/•c}PÑžpåÍp+ë6úßçó2ôµå5)¨¸µ·Œõ§¥ŸÊ/o‹+jJP~ÓrŽ,·øçò¢;¤¼ëþãÞpF’÷¬v Ï+„¨Ð)ÝÀoL vqÿo¾óÊRx“¡+`xßGïyöcøbë·|zS°«30páœ!t¨`m"ýh½Ï½3'ØUü×06ƒk I‘Ì’â`¡¡8œå…öuÀOÀ‰`Wg`pe'ˆ‘b&¨yKi@R‚]•ÁåF ®—;ÃîÆ{ìì¥$‹ô×G•}1ê…:Ð~b»‰Ï2´Þþ´’·’GæÌ;ªB|5j¾ âi MaèСC‡õØšœnÙ¡a78y<÷ž.!f,¥/ýºl/ýôû¾¯¡ðýåÃŽVgéÇolߨÝ9üOÀÝâ©¡D«;ÔZ âr†©x¿²;£S“®\R–Ö*ê+lé­˜~¯Ü/N1]€}úyÁ%ðKà+úþ$)’ZD{__‘³¬ƒÏþxßúõ™igÄÐÖ¬å½û|„2!Ñ-ØuÐ;ƒ‹EýT=.:R@¼Mˆ`08ìêþ=î~±×kw¾G’KÇÚÃ[½öÉ»ÏB…3Ë—„—ëž>ò`Wið_Ç©(9žsé˜Ù5C¶~°k2øïa´ˆ\“˜óMc­àt*ŸÉF:ŒÁuޏW*-Õ¥·ü½RëÒ×3¸º°T—¢C¿„r"{Vßg2Súdõ?®Â'Wü 2æ6M™% ¾J¾ÉãëM¿œüRÊS’zêïÓ„5%K–,Y²DßÂ…p~Ü4®Vp•ÇÚ/ƒ°¦vIIË/Y¶a.îHÕZ”1ƒºøöé Ó1iYq³Å;ÏôÙ_ËÕºéy¼>»MhàÕšPÜÄ5ß°‚âœtÞÇyžß+¬ ñüÖ;›ÓÍÀÀàÂPw“¢z¤×3‚¤&Á®*x Ÿ0âåa7Áu^1ðoø¤Ï‹>τܦ9urïvuÿud³¼N~,šv‡¾ìj þ«›Á5‰¹­©u8v8¶:Ë^úzW3â³bIi¨+«•ׂ]Áå&¬ž¹FÄ:\¶&  ©y¬ôÛ±÷ƒ¦Œ—?„œùö[ÓŸñøú¾½If ¨™ÊïòDV+Ä7A)¡†Ée`ëÖ­[·n…8p@_·×À^{ „ #K?PmÕùV}nòJ}’»q (ŸÚÍÎ ?دEËy 6ôŽ$§xF™(l+N8:Ÿs¯SÜ~ï½Å…ø¦wê3äüª ØÚª& /x9÷nWß•~ð|½ø0ƒ ¹~ƒâQç+5Ô»ôm±¼XA0fÿ2vîÇuß6Á¦È“VMˆM‘{"æ»*ƒÿ:rž2Áù9X>7µ6?ìj þ«›Á5‰å©šÕ ò6åmÇSÁ®ÆÀàÊbŠ’Å${«#•òÁ®Æàr£6!Tõ˜a£(Š¢(þÇY,‹Åâ½ìÏ#+4ÑômxˆYB¾”S¦L™2eŠÿq<ðÀ<B¡w9~qt†íßž9'¾jŸøÈs»†Ô¯Ê[­Ãnˆ¥Ù-€IDATôWKfñÃþ¥g FrßÖQ÷jÑrcáË€BÖýb€„â¾â(.„Aˆ÷q¼ . Äû^g`'šOÿ³…ñ (.Áp¬\ÔýlU=¿âCBiáû`WuõPyCÕ»*ׄéÛ¦î¡UR“/Ú[aϲ=ñûN»:ƒÿŽÎåöJ`J2ÅYÊ»ƒÿ*†ÀfpMbýÞ´ÌjçGÎ~[°«10¸²ˆ¯a¦w€VÊ»ÊehÝ3¸ºP>¡†ò«¾]®\¹råü`˜ â­â'’åÜë†æ˜†GL…ôôôôôt˜4iÒ¤I“ô×[·nݺuk¸å–[n¹åÈ[\82ó2lÙs^úie3PŸµfš3sàö–åúÝ-‘Bb`!M‰v||¶™cbº´5P«¨˜æ½_o½ôn!ÕZUý¾¢Yl^'È åE»§ÃL‰, ‰Â6ÏëÔgÄù]—ê{^Í9'¦ „}>¯6ƒËÃ,Uå}SøƒoÅØ`uõÛ:¶KÙ(8c9Ý<= ë»{ÈÈÚž•šìê ®wÔýj¥ (ý”=ŠæÕæHk|°«2ø¯bl×$æŸL¹–çÀ9U½S>'‡ÁµŒÐÖÔIxœ]•”È`Wcp¹q´v<]§oרQ£FþÇíØ±cÇw®¤ÒáÜëäÊ÷æFÁÈ‘#GŽ ¹¹¹¹¹¹ ‚ ðöÛo¿ýöÛ Ç«QŽºçtÎͺ„|Ú¼&ؼ ïZ2éðd#ú>ج=0°Ä–°›Ï&d¹Pä]ΫÀ¹›Ò²ÀBvl© ÷ë@ó¾ÏbÓä+?akA`ÇšŸ—îv¡ŽvΣðo-n†›°­òBO¡ÏÀÀàâQf2_yAßДƒ¿ÞõJÌ˜L˜±fÎÆ)í I>^%)ÞpËÇkÚCIRo v•×+r/¥´|«¾m)'µ¶ vUÿU ÍàšÄÜÚÔÝú?MŽÓŽÇ€½¤ ·»*ƒ+ƒé6i‡Iå´Ú^þ-ØÕ\nlóäºyß@ÆÊ¶)‹à–·ºTn“ìÜÄ܉¹_äAÞ0G|î|0·—Xâ!d˜t"ü¨Ø¡DÕÚ¡tÃÐÙñ_À4ar™Éðõ×_ýõ×ú:ÏüôÌOOÿ ­ÛµiÛºdT±Ù“ÿeºò‘úû…ׯ¦ÚäNWò«¯?Ž–8zÈ?uST ôo!KCŸ¹fšHH+N0ÓœfZBíW4¡Ê[È+¾UÔ{›Ž Nõ¶ôu½ÓEÙ+᤺GÍp–øâZdÏ…;5Ôs}/¡¯8aÎÀÀà\¨‰ª1ú¶¸SˆÍ…7Å’žëºœp lS>ôØ_F‘‡H>Y¥Þ޵"gÝvqúÙîoñáþ¥綿 g``pÑlㄺ\ßLBY1#ØE]» Œ¸§ÚCßÁsúunÌf3¸<8æ;ß³?®o›RL±g°«2ø¯bl×$æ’Ò‹G¸}¶ü—ó¢f×\ýˆ¿‹ÉR}[ýE=­\Ĭ,ƒkƒÔü<ÇÑ`ª4ÈŸ-[¶lÙ²%lݺuëÖ­°{÷îÝ»wÃG~cÆ-ðcé_ºL; û÷ïß¿?lß¾}ûöípß}÷Ýwß}ÈùpNC8ñONØ~õÒë“Gï8vúØâÙ6õÞ^ÏÝ DW¹¡ì¬@ïðqXù¾o~*ÐÌ5Ùæ Q2ÈeŶxºðyæ™ê*ª9Ö¼Ïà?ÃÌ]g¢·p¦6t |bºÐÀ'}t· ¸µSˆ÷ŸÍv9„1!Ñ·ÅÖ˜Áf`p±¨*;Õôm!” Bó`Wuí2aô7³?™kÆ®Z»>>|vìºO G Á%"·’#œ}õmsIÉn1BÁ ‚„!°\“Xkš"B<œ Jwe€}y°«20¸2ˆu…L“ÇÐ{e¿§>ìª ®òXeläÆ9SŽö„¬{ 를ŽŽJÕÂ~P£o­N7<mîíô{óÏ åÉöÏÞx b +•(µò«ÙÈüR“ò=i'ó^9þ*È)Ê^çœK¯/K|©ÅÊ$ŽE ½ìŸö©qãc¦ŽÃ 4§šô\ õÔ$çƒ.§›O*§!Þ{æÚ¹ ,(ù OÚú¾­ªÅ8Þ·„‚8ÕËAÖè|[;½g¸©Ïfó9Ò3¾Çyn« goÍ5008ÔDŽ©3*EÄýÁ®êÚ¥Oß~í{FCï{îé1>xøíÇ?>›~Ù0qk«K_ß࿉ó.9Ò¹L¤æŸ]i颡r ã£gpMbr˜­–’ú¶£”s¥#*ØU\LµLwK7ëÛ²¬„Ëß»*ƒ+Nʨ¿CÖ“¶?ÎÔ…S£sVì'¿ÈY{à °¿/Ï.Ü êj«©™i³¥F@ÚÔ‚V'm`;âx'oÃå+'ï‡Ï:n™ …o¬´Ëç®>mnü(r7(ÑŽ]BY`ALˆ§ÀtP·LH§z¶`zP°Ògµy;Èt‡›Ï,´„ó“<o„7!Pœâ%pvàÛ:*”Wßõœ¹&l <› ÔFÞ•{Ï” 4“Î[€;»ƒÐÀÀ xÔ¥Âê7 Ìv»šë‡±Ò§›ßŽ‚ •ãÕòàý´·~k´ô\$²Ó+K¼ù[kë`Wcð_ÇØ ®IDEõ¿Th¹00¸&ñ…ø®¾-/WÔ@B…Áa\Yéùí¾-½­p´Ä‘Ðû@þéö& ªÿ2ž3Ù m Å¥‡j‚Y1Â]yic YmB¢°ÍoöYÀҳςóz-—H‚ç+r@YPLó輄1ßVT}Ö›÷l6!Ñ[ ó gP¼pÅÝ?ƒ‹`˜rXm â^ÞÊ»˜ë‡ˆMk#êÃÒ÷×ìþã-ø²ÏäUÖ»*ƒkÇJkÇI0בZn v5ÿu ÍàšÆ2Ø”iýä¥ÎÓŽ^Á®ÆÀàÊ Ý+Þ.VöØñºA~/ØUüWÈ“¾®µ},8+ZŸù8Bžú¾Ó߉XkùÆÿøs§€z _þï»°–Põ¤b 43M!ð™}–xÿVÔâf—ù Z.癯³í\ÂWqëû¦«ú êIa¤šïy=¾­«ÆÌ5ƒË…ºU=Æ2º ›Å™Á®æú£DÃ1Qe T‰h[IF¼û¿‘#?3ZF . ¥„ü‹ãW0ÿ!eZN»ƒÿ:†ÀfpMcþ޼IJì?)79»ƒ+ƒ˜(¥I ú¶µþÑ·aÊ”I“¾ÿæ­ù¹ÄüZÁ®Îણ¾º]¹\Êù XFH‘–¸`eð_ÇØ ®i,CM·[¶‚c‡s¹½R°«10¸2õ)ÃÊ‹kÅÞ >¥ÎQ;»*ƒë•\û¸ß76e½lV¹\¿ÍÎëóX;×lµâf¢i­œÅµ„ú¦Ž _ñæ§ }Þ‚˜W ©‡ å[^‡oº§¿c-Ðl9ßÖUG¯ 8ìÁ÷ú‹]kYU 9ÀÀàÞUWò(Î!:ØÕüwxaÂKæg«AÃ?h`†Ä5[·}ìª ®6œÉJ§GZºÙl2Y! AÆØ ®i,vÓº@é§ìQP÷SW)ìª ® R?!_œ ÊPe†Ü'ØÕ\oÈ£·wM-¹ÎI¯oÛjL»1µnùó¸2%gx eR@/Öɦ XÂöÀ9ž¾Cÿ5Ô„À‚Vq©žP\ ©·ð¦&vŒù:Ûüg±7³Í¯ /AÍWÐS“´pßu}[W]Â`q‚›ïýc²[£ômÇ:¹ª}\°«20¸2H¥ÚRSŸV'Êíƒ]Áõ‚\÷È‘¬}PðùœRûꃜ~Çîú×z7v¶ÿñšäßúèâ\-¡j£ÀaÚ¬´â¼VB¼ù©@œ˜FÿâB¥}ú¶ê³à|ZE}?5AþÐo½€³ØÄ)ÞÎ:_§]q!~-¨^ëŠéB}¯ÙpÛÅiÞßç\ß{:Û|_70086 »øÄ(a…0!ØÅüw‘Â%‡¬¬½lÎß'`äËOO|éÕ`WeläÛ•ç+õmsYñ„¥F°«2ø¯cl×4!±R²5[ß–se‹,»*ƒ+ƒi²ØIª ÊÃÊ'Šñ„Áe"ç•w­íBKÑ)~ rtßÇnlºC+°P¦9ËŠk UŽÔãšÃÌÒ¡¸”P±d JKÅ©þB˜šàªÓ_>r?@ âZ¨Ô÷<þ- Þ-ª¾-œºÃÎå0ÓS?½jþx;…xoaQLê{ ‚B¼· g``páÈOËs”V lzQ—¾žÁÅQzcÙŠe2a̘±·Žn[ºío,øì·5‹Œßfÿ³8CœKUômKyK¨Õìª þë$ƒk“ͤX<ÒCç>‡ìª ® kÅ/A§þ¡þ/ØÅ\ëÈ£·wMéù(¹çcp>Óªrµõ :¢—EÔó~4Šš_LÚçñÀ©œE¯'9 2 ž”›©ëuJÃÓ1(Ü@ln²y sº°eêXl¸ÁY(í8ÿÖËÀ‚£ÿy½ñ*½}mbºï¬9qÊÙ¾B¢wë©èíØ+îûb``pþ¨ÕIjS`³p¿°á’—3¸D|âÑ÷uúÕíTë-xúÎaÊs6ÈmšÛ*wg°«3ø·qNpNsþªo›UÑn±»*ƒÿ:¦```p)˜%I±æéÛrie»#H¡r°k30¸Üˆ %M_ƒrTy»p0LF°k2¸vÉéÿuÔ¶Û@hiÄ5 >z3Ï– ]2MQÕ[*ý_wµ^*ÑŽ½[ÞB•&Ói­¦Bº¹£K0s|, ·rê‚”ÜØ³n5A—¦TÏý'åfj!­ ®=Ú;Ö„òÒFÁ Øœ!îÇëýZK©šaQJ{Æ ò¤ò©ò (JºÚø”ö¬u¬ú$ã@x^¼U= òH¹±òH?©Ûä0ç_jiË©yÜ ÎrÎ-j4H+”ÙrWçÜâeR”}òa2ÐOþŸú%¨%×}Ë’·¨iJCÕ·•>ÎyÄŸ¥øÔH—ßU].ŒWþz[ôû]°"«~€û3€fŒu¸PExüÜŸ'ñY±™°h¨&ÐÖã…ù<,äƒXRp U€yB;!¨/Ä åA|@&üj⸄û„*Â<ëÑPèê›BC¦‚ÐC(+¼b7¡¤ð ¨óÔçÄQ 5* '€)BŒ0ë’ÿ³00ðfÕE 6&KíÜûz»¨ÿ.¦“Ò2“ÞŸõ‘mÌMÐsz·òýZCúkgÒ3œAÁ.Òà_ÃYUyÒù>˜ž¿’¾q‡ØD2ŒAFPÝ»ƒKaÉέ爻£´TA€òËôˆ_ìª ./G{žúí@äää%e­‚j3+ªìª ®5”Þ''æv†”äFï~[ä?º¾Qo'(Ž¡Õoé 6"Qºüñ•Ê\h­¢j’ËÁå7QÌ-˜i‚Û¹Þ§;Ì\N¬"gØoê6u-ˆßˆmÔÑàܯ<¬X@Ý®|®Æ€º]h£Æ‚’*ïTf -@Ý&>ªÔµ¢¥ ¢IRú‚RG ÚZQU•î oe4È5œáj7†IýÔ1 ªÚÁ-àyÿì$¢èÚ«(®m“IUAUNApm»^w:]¯»~ ÐÖ?3Í_åçÏÊß Ž—¾çPEÅ$( (’@e xlw“ï§-H¥Û„V /•ÿP×zmÿÎ*?–¾GÀ?Õû ûé6(YÒdJJ‚„g÷üdP·qRX  šUóY>@Û9¡®u§pL=Û¿³SÕMÂëú¦:EÝ ¼q%?ÙîïÇBOað!=ÄÅ ,†v¦‰÷‰g@˜¯>/äƒ:I¸‰… N\àj^c€Câ}bC1J iŒÐMt‚¸Qª)6¶ªSé ÂV¡‰˜ B!Mhvå¯Ë 8œ2§9’¢ ”5²U™C±;&!ØU;’Üì`>äõ+8ž{ÚdÔsÞñH°«2ø¯c8Ø ® Ì¿˜:™ùWùñÂÀ4z»&ƒËðŠ4IÜ Ê/ê%€Ì`×dpí‘3õÝ~ë¾PÞUgVÏMúñJM·­£àø8Ðûµ”L%ZÆÛÉæÀ¤D—&ãÒ2ÔTµ/8ç8j8oÚ «Õ@ ‡È{%ê€0FJQ÷€ãOç% ÔôW£@xUèêÜò~çÕÌg¶ð7í¥µ¨ëåÜ’—@¨)-WUPkȲ ÂÂ`ì Œgšð¨ÝäB]îà^J‚ÐYüŽ( –þ®÷‹ŸÙ õ’ž—öƒô˜Ø‘M ~+þîrr)å¤ç¤×…ç@yLÁÍ Ö2•êý寅V 43…ªw‚RSì&îñqé õmPËJu…Ó ¾(Žú‹ä õ0 ¦ Â2PkŠÏªûñâ( „TÓL5ÆÙ@H0ª‚:ÞñŒz„¦îí®ŽgÔµ 45 ¡ vu>§Vºš ‹šFGêß·Ði!ËÃkÛ€‚j¦õ9ûDª÷逧w0…‘Ô7Õìå#×çªYÊÀnÕ¤%ƒTV»ÕTág`7©ê`¶š¬Lu©šÄ{ îv««@]ÄvõKà˜jâ3P,ê8åSP ÔŒ5SyJžj$‡Yr%ågµ>P‰ýêPÿRk¨£mÌeP¢è:RÜÿïo@êVu9ˆ…AB+á5Îð®ÐÄ’âDñiMÂXñmâkâ cùÁôˆ¡Ò@a2Šú«ÔÄI Þ¡! ÄnÀ~ )ØÕø2e¤}ßéYé1î+xà©~o»*ƒ+Ct~í¸ LÇÅß-Æ nƒ«ÃÁfp]°æÐî# ?s ssË ¨úw…Ý5ï vU——1©³÷ƒÓßfl91j¶¬öJÝK_Öà?‚úÔ¥ :$^½ÚÄÏ.ÕÃc_€ÂùMºç6ÿãµ”P§äìçÊMÊe¨•ÕÕêT F|I^ÎM”Ù ¾¬¶SþåõvÖø¶Ô[Þò|çl·4€(ºœ[ŠâI3…—@úG”…ßAý’…Q vb€Ð„íb0è­>@k`< …ÇAÜlù]ø¸Õ9A¨Lf‹€ô«xZ 4Pc„¥¾ ºçõ©æOÔPcÃ…Ôâ—ÀW+P•Ôµ¸¬ªÀ"§U=¬¯®uŠè*Öv§ìUƒânÏwúïs]¥R®í"A®P¨ j¢ë|~Û~‚œTJh;Úô~ëût[«˜cÝGv ö§ó*bi¬uªzPy”¯•½ôu9;•©À«êVõ!P>Tö)™Â ÞeŒ²Bé 궨c@}NY¦Þ Ê(~VºO©sÕçqþFT H…¿¤ t’¦ŠóAè,ü"M)‚_ÅOAj+ƒØˆE¦± v¿÷)¶0õêPF}>Ø7óÚE]©ªô…äŽgœI ¡´U56J– O/}(ØÕøÒKèö^ÿÞ°¶Æª÷Ö&ÁºqÛ&¯\•î¬|WŰ`Wgp¥Ø?ïxËÝÀzFŠ ¹ n|¯úÖ¶Ÿ»*ƒÿ:FÈÁueyQèapî—ßu<ìj ® R¦ôа”†êã®?‹+‚]“ÁÕÚEýK9Ù½&žØÚVolÌŸòx¥›^[¾}{Þ4È?QøPŽr+ÛîÍú ²šæ5ÍøòÛöçˆPP`·çݶ½ŽfùÁé(QX”áê^¹.¨cÕÛ…¿AzO˜Í(w‰7™{Ùjžbi–¯ÌwXk©KhW=º!t1„=mY aÿX*…~!©¡óB’!äQÓ Öá`¹Áoi–›­ L“À,K«Íw€y¨i:¦Íâͦ^ õþCAú•8~!A¬I ¯; -3ÍT=Z«Õç½Bª.tyçùn!Õ%¿y­—ì¹­¸g¸ù kâ¯uR„âômq§öº&¬iBZ`a­èì‰Ê~Ïm?º7 ­‚ö±»v©CZðŽÐB\Rš4H¦úÒXÓv0Í5ýi–*–ãÖh°Œ2W³Ž…\ëàÐÚÕ:>l„mÝþ0Dô ­Y"RÂFF„ˆ§Ân޼Bek¹°/ ôUËéÐ`-iù>¤ Xn1ßl- Âh±ø+0_¹Gíršó>{:Øj:Úæ?y‹lSsÛCÎû¶”ÌùÕ1ÿ®ôÑ<76u,dÖÉ›‘>rVÛ^Ëü òªÞ–ý¾l(xì»3 ‡€ST%Aí¢Ø”Á¾ùWo©…ò:}Sl*Öÿ vQÅñù_ß|úá¢C*„w¼«|òi°«2¸Ò8·9¦ÛËi¬õ×K_ÏÀàr`l׿ÖR´å>p–ÇÊ-ƒ]Á•ALÞ’¼¥2Í©æ-¨Ñ…žž•:PyÝkXAÍ-ˆ bmÏ÷ bMÏ÷è•î)$ˆ5½…0ÁK¶ó£èzTŸ Œš°ççJ‹… êÚ ûÈ\FÑFøÐ%Ü™º€4Ì4Îló>ÓËlÁ.äåïÃ2 ŒÐ̈é±8l`Ô·þ{X÷¨'t¡.äQËÎÐÀ²Þò‚u#HiœøEc–³–ýÈû¸0?wäµ° ÌþrÂówdš!sm~ø™ý¹¡=G´çŠöœqôs=wä]ê0gSŠžK×J5Lõø–XE£åðª%®}܉¸|¼ãáe+ÃÓf<<çW8TåàO‡ÿvuW çTå^gy°š{[滆Àfp]`ic~ܲ£•xǶK_ÏÀàjD,-öGèÛÊ%O½+ØU\4{HSÍ ŒTû:íP¨8¶ü&…Gr£ ïI[RÖ"Èw0= Ò›åĤ¼Ù-ó&¦—…ÜöØl ºÎk ŽYruû vá#°1™,Ÿ:qÜ;‡de‚Ü£Oĵ!üëú°XÙoÎBæY¿²ÎëvÓ‹¢;ÅL§4Ä»L#Å,oTßÀãj¢Óª®u·(pL©1²«1ÎGèÒY¾N1 ?aJ°R¤ÅO•–yíÐŽŸ&¾æíôrµLúÖ#$ÐÓ[¸“3Õµ`‘ƒÌ-äi3|ÎH ‹óÙN.~Û_&ó]¯˜ÖSßíÅü¬x¤lÓÅu}Ú`UUWÃÅzÒœQ¢NY‡•ýÜÿkèzóþÈ}UuýÏÚMl: Â1/-Ñ-ÀûÜ뜡µyZêLo˜¦››‚¥ŠI°FCÈZË­¡…º@^?4<ò0D¦†Š:á†ÞQBwX¥ðÎr³åϰû<žîçˆ&ÌiÏ™Üß]Ïì–y3Žz<—FçÙôåÁK^Öà*E¾]‰vÎS’)Òb v5.Œƒëó8ÓÞÐQàüÖÙվŽóé`We`py­ÂÉåYqt) ŸÆIŒ‡ùÕƒÚ\Ý¥Tç÷Ê}Î@î¬ ò3 ‹r¬c8såÎxPZ+™ò 9sМ¿ajÚø‡ø®ôˆ‡Ä¢Ö æBj€4Ÿ’ÄÅÒ-b8¿Š E¨¯V >ã9 T²ï—„œáÓÖîí´*•þ(PºÆèØFkBTªi§k™ãrxy 6ºcKœíúê¾_ôº[¢«ØÎ«Å±h“[S*y½¯H€ón…Ôf‰éÎ4×ùÔX¹‹ûø¯ãÊ_¸2Éí(Óö«C]ÇáÕb© uª»GÚ íŠÁÓÙV4ˬ„kÖ™‚ë¾ ©®ûærÆùÉ^‰Ê~·sÌ}¿”FnÁ-ÍQ¦ pk]•¹·*¹¶\Ûª¾ìÞ¶zÝ·iLP1¸Ä.êcb8*°"ré¾5!Ü^Xh/`³Á¼ggýÑîz»O‰Û–žûó•hyºìsPöùð&ñgÜ;o xèz{]9®  HÇÄtóvìÂ4SéíÄ]pòÍœ;ÿ-œ%sK».ƒ £¨é9&s‹^ªæþ÷d<.GH8€zˆ!jÐ_]§V¥‹ü— ò| œe´«,Wû€y‰o9tve†ƒÍà:ÁÒHÚhÞ<£~MoýÁk`p=!í—RG}[ÙÏÏÆëm–™ó^y¯½&؆Ûsó‡ANµüí™­!Óž76­'dîÉkx&r›lϺ ÎØ¶åþ£;ÌÄ¿„Ò 0¿dîe¨Ï`Ò%‹ÃF}«ÏpÒZÅ4gŠ4Ì4ίB7QP+ª·pÞìæûou}êö̧>j¿'™v}1Î~B*©¦Yo€ÞYS¨êßÚ©IKÅ9ÌXäjåÔ†ñû½ošøº—ã滂 xÕ‘âãì*ÚïÝ‚©;Ï|rJ£@ï§«TÒÏÙæåÌó*¯‹á>ë&{Þ·é¾ïj¢œá"]Û±jœw+§ºÚÛq§Æz9à3×ëõEêJõ0ÐEz¶™këBþþný×þûç,_øçMä_!=Kö…ääääädAýkTTTTT”‡Sn«ó¨ø'|5vâ'_¿ mÚ´iÓ¦~œö¾ØØØØX;kÉ—ž »€º ®,B8e„xý¹£µ¶9æÜÏ©¢ÙsZ+«æ”s?ç´çžö,rȹŸ“Ús3s’ë9ª=Wµç¬öÜuÞë” {èÏåËÎ,UåíÅB¸`öwÁà|)»$V)»ö}µ§ö?I°lú’—ÿÓ_…B¦x'D éQ&J%…d—« ¥ª„V‹µCÉ$뱸fPªyè#qƒX—(±{°«>7Î Žh}ÛÜÚ\ßZóòŸGQ.ÍémðßÄØ ® ̪©…Õªo;ç2{Û`We`pyO‰Ã%•mj¡òK°«º¤¦ª÷‚ãÙd_§ÏÊc“³OèÃÂ3׿u:“9ó êee@Áf{ݼP“¢|R3i–i&XKš„4qÍFŠx"–‡ ‰šáõC¢"CHUë‹!¯€µ9,äýUÍQré(­ÕJ?~|“m}@­xûeW¬$dWî)@˜Ù…Ç ´®¾B˜ûu·³L2™~Ý-¤¥z‡ ½«ÆAàÙk.çœÏ,µ­¥ÓíÔ*ZG›±æ³?QÎòLçÔð‹(HôNã,b‘·€åÛ*Zä¬+JùÔ<ïYl’ɕک¯ëݪZô}ÐÞ¯ nšãÎO®‹w+« ´u¥™*{½f¬ùq7hשe_ÿïG÷y÷äÞ>„óF<*dK;!11111ÑÿõF5jÔöìÙ³gÏHHHHHH€¡C‡:V­ZµjÕ*ÈÉÉÉÉÉÑß×°aÆ êÛÎCÊ‹…·«ƒ«"§œû9§=÷´ç Öºª='µç¦öÕž«ÚsV{îæÌ·‘½J.kÏií¹]43î¹±}EÏùóE™É|å}[¬«Îûûn\(ï—ÓüÃ÷á¾7ú<6¸7¤ÖMNN-ìªþ=BòL£Â¾s'a…Õ;wîܹ³þ‡[o½õÖ[oq¹°Û4¤i¦Î×B«¥RÑ9Ý™©o[¢M™–¨ _Çét:N˜&e‡DœÿûwïÞ½{÷nhÞ¼yóæÍaðàÁƒ†¥K—.]ºÒÒÒÒÒÒt'¶æØž5kÖ¬Y³ U«V­Zµ‚ß~ûí·ß~ öݸú;vìØ±cumÉ’%K–,~øá‡~vuWC`3¸.°„™b,ú¶ÒMÞ⌠vU—Á)õ3•ðØñºA~/ØUwz³¾ÒÅq;Ørò«@n÷‚Y/Aæ†ü'ÓJCÖç]3*@þg¶©¹íÁ¹ÓÙ¡p-£Å6Ò`-iùÞËqv8üáÈ®V§°¡ú/x¦¹¦?M£AZ)Þ&Ýŵf›ü•ßDî|haL߀òæÍ/T T…¤Ðg³‰;]N´boEm}¾¯»„.!EÜæ7äŸ)œÚþmÖ™@¦ ƒ^B—Çì7ï´ÐX5ÀY aÚL7ŸÐƒiÂï–U·Ut^ŸVMßÖM8k˜ßýZÌ\Ïó‰;]¦æ´ÓßåÝ¢*LsŸ×ýý*rÚÅB ÖR½¥Óõ Öùbù@xÒ"Å l .\¸p¡þ ÊM7ÝtÓM7ÁÏ?ÿüóÏ?ÃéÓ§OŸ>­·Þh¿À|øá‡~ø¡Çwå¤ú¬ý±ó¯Ï࿂빫=‡-ë¼…¸°í!ûÆêÏqí¹nÉ3kµêÏ}Ç,¹ºíÈWøHNm=<¦èßæ9«2ÞÐÏZæx¯ ¨’Е¾[»Á¿MÕn7ô®R îŒìqÓ¤Ù{N~òBrÓò^úúW+aXêG „Âd[¦ýŒ9räÈ‘úë}úôéÓ§Ô«W¯^½zPáø"Ç굩Z1ØÕŸåe˜ìñý³Ô6E[Îcñ¶mÛ¶mÛmÛ¶mÛ¶-lݺuëÖ­úÈ‚W^yå•W^åË—/_¾V®\¹råJxâ‰'žxâ }›Íf³Ù`РAƒ Òÿ]3p¡9Ò{öìÙ³gO}ÿ /¼ð /€=Êe¿Çᵂ!°\˜ÓͶV$û“rgGã`We`py1ý颇p,Ï‘/¨ååZCMc¯ºQoñ±u°Èk9«m¯eþç6IÝ9Gó—fn„ü8Û©¼‚“¾_˜àÕ YÜì7½./QM”3½bi£žçSÒÓ󾩉Ê~/­«2Ús]QXCQU.Qo-u×÷õ"ºxŸO6‹öhé¡q^ÂYogœXÁ% Ó˜ë}Ÿ. óBéÎPiï\-2Ú/tZKè]Ýïî~gw{²D'óç3ÓÞÿL*dÏ(ì—–Y+ §…ÁñöY?íyç\Õœí9®=×-¹æýÖÝús_kÙ×þ]0ï5}nÝ…ml:AY¯T@š9sâ©pxÓ©{Àɸ3ûŽ8!Ý–[75 È u?u¯Î?½ü·ybøSË …ì:ÙurªÁÛF8ö:lùM‚hê!%5\†Ï?ÿüóÏ?‡ãÇ?~\?N{>+7ªÕäÎ`Ëu–Îý)ØÕŸ?Ž·iÄf»”eu¼&€i-±gΜ9sæ TªT©R¥J°yóæÍ›7Ão¼ñÆoèlmfèøñãÇÏ?ÿüóÏ{Ì>ÎÈÈÈÈÈÐ_7ðÆWØ=zôèÑ£GaÂÞ˜ðÆÅ¯{µcl׫iñh•ÎiÎ_ƒ]•ÁåEúL²KÖ}eŠrH~6ØU]:r µž³—>3''·`fVdvÏí’öžGX€ÝÞ!¿&0_¹G¹Ã#$`‡U ï ‘+tçYøÃ`e®f«Ïþ; U…/¹Ü«ۆϿÞÚ„áá6kpìíT±vOOçW`MC€Šk Õf'Ĺg·Ø§Æâvpv¬ù¾Oö·zúÎxó›¦áÓ*©·|ú_‡×œ¶ESL‹êq szʨÛYV”†ªÍbÓΣ9ÏÜëùÌnóM¥‹p³xƒGm bm¡¨±jìYq‹˜0ôÀï>\–Héý°IŸŸŸŸŸÿüóÏ?ÿüã\ÿþýû÷ïï¼óÎ;ï¼¶[åê¹CàhF–y÷pjpnƒCát™|Óñùú×4[¾óøg`QùÕ{áõ\ ö[ìwŽ…ÜªyC²êŽJ«lù&ä6°Z-«¢_Šê[º2„ßv"b?(7¨•åÆù]^£3ùpòïô²Ç’áðÒ”F{gÁÉÝñG7@fRî‘´x°Å8š¨À^Òc¶à¿NBÿ&Ù À;ßðf/è[¦ÿ§½š»ªËOè.Kãð¿¡°°°°°PoÕÐÅÚl̼ŽÙÙÛ®ôP y˜çØÒ@Á)þ’"™¥³„ 2dÈ!z«§Åb±X,ðûï¿ÿþûïP½zõêÕ«Ÿû¼£F5j˜Íf³ÙCà›;wîܹsÏýþÿM›6mÚ´)4kÖ¬Y³fú~ͱî4;ÍNóůµbl×¢Y4K˜ž×H8+¯Øô1ƒë ±¯P zz^>âõé`Wunä]ê0gS(ìæ¼Íö<ä=YŸµ2&åõIÛÙÉy{3VBÁs…öü§€·ÕFJ°|e¹ÏúGë¦;•.äåïÓ=Bb¤ç¤‰@kÓyvÉ÷·ïö[N¯€Bé··€ÃÑù¥ÚÃ@¸5d®i‹~ܹ´"'Ø9ZBÏ5›­È³å>àét ~ $¸†ûû…9Ç|„¹êPogž‡“-Îóý­¥g‹„>ïë¤^ï[,LôjÙLð ðM1õ©[KaõX¿¤;,!Ó/=Ô{W‹jQÚ©[HôiMÕÖ×ÍÀu\(¡-“ÂÂöíÛ·oß¦ýÂòÁ|ðÁ`—Kڪé95­e£z¯³É¥T``pùÈž×+; ò¢ózçT¡¹PMê %2#«Dw+Ö0ë|WK5€¥ƒå™Ð:i_Bè_K(eÿ€¸úÑï•¿ÊÞ[ò§Ø'!âÉΑ@í#p>g:å4=]Nü“¶äpù"Ù¹ç H®ž¡ÿ²s ª¤Ÿgg9Á^:ØwåúgHËÇ>~`Ô¬^»Zõ»Aí¡$©·»ªKGHÛ M d”ÞfÏž={öl8uêÔ©S§ôã´Yc˜1«aàh#·ÏÿåüÏ#ÆábB„ls[ý«æœ[ ‡„¸â߯թ½ÏÔIjb’@hÂ^¢Ï¿Çze¨ó˜¾5w´œÅP±lÙ²eË–Á¼yóæÍ›§ï>|øðáÃýgž‹’%K–,YêÔ©S§N}¿êãp8Ç%~3¯CŠ>wn4Gåœés¦Ï™ìê.?†Àfp]aþÝT-$œÍ§eC`3¸ÞØ)4rAŒ׊½AþTýU¹€ô¿+…ÖÊé|SNw<ù?Ú_Êm­§ºe·Ì›˜qòWØç|Î?”_”­`9b2Y>ƒ¥1,»-â —€––*&Áí`üä =¶?  (ª ΂εê¼_šÃJh+TÅßé¥UŒs¬ˆsÎfs;½¦ üf’á‘ÚÕwÆš~à›Nª9Ç|BNÕZRýëò¾ŠÞ|[V}[9ý[A}C|…1õì~¬"L;ÎÃÑæëTó<“Û©¦ôq¦i­µšw™°,•Ž…~W|k¨–N§¥­e„Ù¤S§AíBå:pÚ\Û(+›å8Èz1geúL°M.lP˜ÒNóhS)(5¦D’CÀ„i4Ø)ìS=âV„¶´áÇ ×¡ŒàÓ4S?óˆH»7ê”ZáàÞ.}´ÜHˆ–JŒ,³B3Bo » 8>²†Óræ¶Sapô§Ôñ2©¹ÿXàÌÃ9-OeBA[Rî®ÖS¥L°ïâõC¿{´ »éÁ“O†»šKÇ"‹Ÿ„ß B&61¾ýöÛo¿ýV]’$I’ G=zô€Â¹Î3ù_ƒ2O=¬ž‡`Y+%…u‚財¡å£ T•Ðj±výktõÐè¸l(Y3¤ìKr»É– QÏZŽG׆Ò7…U,ß Jß²»‚E_É$뱸fPªyè#qëܹ+;Î `Z!8›Àöú믿þúëú¶ÕjµZ­ðì³Ï>ûì%ü»TºtéÒ¥=qíN'Nœ8qâÄú&_›6mÚ´i“¿Ð¨±ÿþýû÷ÃÇüñÇë÷M %(¼­ð¶KIõÖf±iᾟÓëC`3¸®0Ÿ2U³Ty¨r«Ý90¸N‘z‹éâLo•'9kü{çU*ª?ªÏy¤q¶+8=²^Ïœ¾rÞ/(›9ìYŽý¶/ôT7mZøïaÝ£žÐôNS}Óó¦í×îì³`¡æÙräÊàh·Ðzdȇ[½Á 4¨º¤Ô˜³¼Q¦´™cÅ mE)¡æcÒ/Ï5›í\³Ý´tL?ÇZ¬;tÀÇI¦Æ*µ˜ú¯ãv²ùÔ¥]ÿû½Ó>Õç½^ë yšçüŠBß×y·ªúÍbóä 7øùÎlR¼7WÚªâ?“M Ç?U5–³8 ŠC*/Œ³LÑŽ"يش™5yw9âr”ó>ÁÁÞÒÞÝþdÌÌú=à Ποäç ¼}hÿ0JÆGª¥v€ÐLˆ=Ÿs;Hæ¨@»‹=;mA¼¬6ó¸òùaØæ’CÙ'K=»↕Þ_!J=ust˜¿6ïµ”…œùïfý'ggD› ‡ó’{ï³Aò’Œeǵ¨ uzmpVRZ:[û._{4Rwh°~ûú—[çgÀéÎ)âéºÁ®êⱎìëá2+V¬X±b…þzýúõëׯ¯ CöJÙ‚ pLF ¶&DçBò‰äääža9®¯ZH€°ž¤é`Þ£– ¿&uûzÝ”™Ð¶^›¦íªyç~_lllll,ˆË…ݦ `ê ì7§ž»Å©L§CÈ,s»þ¯k޲¿ÿþûï¿ÿÖ÷ßyçwÞy§~ÞËÓét:—¾Î¥¢¥Åj­ÀZ‹¦æèÓÐÒ>5GÞÓO?ýôÓOÃèÑ£G ÷Þ{ï½÷Þ 68Øààù§‚û¢Ýo­ ­m–Ýõ‚!°\W˜7˜2­¿‚3Ë9S¾„Y3W3B_![œ Ü!oV®@˜GQ*§;T ;¢ zÆjÈÊÌë—6YOãT"ÕÃÎÁ`j¾Å|'„•‰ _ áBkFVÖSÝ´hB3js ´´^+Ø?û¡Óþ@ù4;¼p 8?¹ýû?{ c瘹¦ dî–F_¡«è¸DG%—#¬˜ÙjçšÍ[LKé"ͱf* ~  H~û‹s¾-óɦ T>-š>a Eõµ´º:±‚Ïõ,_÷ A¦ ½C¼rE­¢¾³Ø´ÙkE¦oØp³ë~hŽCí8ŸôPwkªš¨ìõ 3Xì*ªï&*¹`B3µ õøÁ·8MûÁÙQI)akjµ‰üÉ…ŸÏÀàr·>L'¯qÖ}äŠðò%€Ð_Ck†?Ë;Õ|u;0Xh!¼våê>ê‰G!dŒeCX2”hQ·Ôzˆù-ºyù; Ìï%WÅìwÍ~‹üìéÎ…# ­eæüSëá莔Eû@Òò´ÌCñpFȉHY…Gi6Cx+–AS‡Üw_ pHÉ)ÀŒÓÞøñ›`Wu¸gú™w™:ZƒÅ‹/^¼Ø¿…¿eË–-[¶Ô·q²¥ðBRCQKÿüoÔ¨Q£FtaKû÷`èСC‡ÕÃnrrrrrrô÷ii“J>êç.Ç!ÈìOéeI¶ ð}úôéÓ§h=Ôf„^*nSHHHH‘Z j—.]ºt颧¦jhŸƒ%K–,Y²DmÐ>/qqqqqqz+¬†6sµk×®]»v…¬¬¬¬¬¬ ¯¯}ûöíÛ·×·5AR«çzÁØ ®+¬%M'¬%AFþ]~;ØÕ\¤’R?ÓK |-|A‹_Ç)* Ž’¿·pNÞ(½¥SKå,°vȯ Âz ‹ äfËŸ¡ÿÓS×B~ Y^Koå÷‹ƒ¥.¾ƒ #·þ»]6tÊUù¬ô&PÒëuŒûK]oôm¹ôF;ÎOèòCk,vöZ1BZÑ̰šr)£^¯3`‘Û‰æ3ãM‘;¸B ŠÒ6Ý3å|Z>Ê_xµÈj-¯)â6O‡—ŸO®h}måu¯p‹ÕÕgoÉôYq‘øšK vàíTÓ„:ïSŸë,H»x;â.uöš%G|5äMýð;vìØà ýBeîl™o¤©ü˨£ÔõrOÈš“s,# ºØóAšj,%B©9%ï/Ý,,[’ÎcÁœRÿa Í…—‚w]殦[,q®ÙoQñP¦cÉ^1ÏAì‹ÑrùRP¢dDtô] ´Ÿª@Ö„¼»ÓeH*•f>´Ž¦¥nÿgœqfoL^ …uíÉ]@ÝIƒw]Á¦Ú‘zW½ ê—opº^c÷Ë»o|ü4kÝævèPöæE··…·v¾vß»·ÁÉ•'žº ö¦ÚÒ`Ó—zkèš5kÖ¬Yã\«V­Zµjò`5ÁþÃù·†ŠÕ…hé8`Ã&d/°EDDDDDèNæóu:Í@sÏ„S(‡œ_žû}Žœí»Àœ'µNõÝ·R›ª2¸TÒÓÓÓÓ=B!4G^™2eÊ” B+÷[o½õÖ[oé_µ°–˜˜˜˜˜]ÀÒiZ‘†æ,Ôþ}ׄҊ+V¬XQ?îØ±cÇŽƒ &L˜0áÂëlܸqãÆŒ«W¯^½zõ¿ß®†Àfp]anm2uäû›Á®ÆÀàÊ b¤] ö“gÈçñ—>ç¹¼c—Çl4{ÞØ3wANxþŽL3Øÿ–gô×[:µ™h‹#ÚE} !U­/†ŽÓ\ÓŸæá×çÕŽ#æïØ?€Ú?¥V^[pöh²9~]ñÇ{µzžKh[ë´Š9âì3Üüf~ù J‚_ !o±0AÉ Ð2ZfpöÖN½5Ô[(Tc\+ê-Ÿš &-ö~¿Ö‚êq?¦ˆJ¥„Vx8Ñ\B_QH‚î8‹ T_Qõ ôôº]]-­Â4uµ—S®èª]ç÷j…õ8ƒX¡(ôàg/gÇ÷I8Ö_¬mM_…:ô-ZЍ†6s­lÙ²eË–ÇçÐcV”Á¿„óUÇpûaHÿ"saÆFp>äøÖÙBrCê†|¥îެ]æÂÿÝRæ)ûÕO@ìGs®ÂŸ'ÅÑbˆt ÂN‡ä„M‡R9‘—žqõK¿?KŸùfÉ7ÇY¿¬°üÝ™_BÒÚ3¡‡‚c³S§ìÏ„Ó[²¦œÊ„ òÒ¸îSNíÿ8bÍáƒýk?òì<¹£ì®­PP¢ „-—:tÑ ØQ&ñ¾ß÷ÃÅ_dAÓ!u“n.¿ÿükÚ‚•Á¾ sa¸õ }[ ¡ñ¥víÚµk×ÇNe›ã\æfâZ³‡ã¬8máÂ… .Ô[Tµ´ÒŸþù矆ӧOŸ>}ZÿC&ii’8pù *ª¢žÇhçrŒ< ,oš_0¤ï?sæÌ™3g`×®]»víÒ÷˲,˲~âããããã/þëÁƒôp„kBÔ¿í`Óf«ùΚÓh+W®\¹r%têÔ©S§NºƒPۯѭ[·nݺ顿d{ã7Þxã ÿóþñÇüñDž׫Ý_|v×:†Àfp]aÎ7…˜sÁ9Nîè4ƒâ }ƒ]•ÁåEüŸ#­çpå+¥²¾_Ò ¶?”™òžJ+ 9Í R2Ûë³ÑÌ}MóM t‡U ï áBj{¶tj3Ñ@­ìk5ðÇÞý‡ð} ¶,߀ã‹{ïnVŠw–¹(ÚŠÐÜÇ EÅ…è3Ü;¶ó­DXDDÉw ÖQúÕr :¡ä2eÁú²ù¥Ç!ÿkÛ-Ù©p2+Ý~Ô‡#RoÚiM²žj¶†…Ñyu¯ÇÛè¿_|hLO˜ßí×3ì8÷ñŠª¨Š ²I6É&xøÅûë {ö,Û•¾wa°¯ÄfBYqо}äÈ‘#GŽø§Í^Sþ§l“Ïœÿú¦PÑf)§o÷ï€ÆÈ‘#GŽ©·„vïÞ½{÷îP&®L\éx ²PRmJ%å[@i¯Öu…ìh[jê×ç®GAÉ–ã@=©6W~ó¯ÒVßó4'”&àih›Bp©_µõ4jÖ¬Y³fÍç{îÉK/½ôÒK/ù×óÕW_}õÕWP«V­Zµjéû7nܸqãFÿã[´hÑ¢E ÿõï¸ãŽ;î¸ÃÿáǾˆ%M ¼\ë]­˜‚]€ÁåÄ’e ³&êÛòv9Ê‘âæýÁ®ÎÀàò |'Ìã#ír;Ç=yÌÕÚ©FªåwAxX m`þÍ”b¹¤öb9s,H¤šâ`5q9žžcb°¯Æà|Q7fýQØ ŽÌMÿç!ÓÚ9jÏZ_05Ðd!oÇ•ß:>áºSË— $$˜¶:N_ÇåŒÓCܯûÎf[äóþ"?—w«£+wq Oâlëס§ƒú8ÊR\N1¹>âN·“-EÚ ¢XAwÂ)'ÈPq§[xsÏFSq×§…$‚Š;”À%„epØk¶›×}×ùÕÄ¢VÑJàJ[P9¨‡A*ºïE!®ëÖÂÜ;Q»ÎTvª‡ú¹¿¿îÙtÞœšèJm-r©qH¯ [¤á lælH•82q”ÿq¾›ý9çê‚:ÀJc„\&”¥êaõÈ­šW9k!ØKØ7;âÁ4Ùü ”%6Dœ*Ù „÷„â—|:Ô9lQÇÒEýHeû¥®L„Óì`=m"ä X‰Hé¼I™’€ã>ùû`°¶‘?rGìÎN¬ny‡3v€É!4¿ [B[—¸¢Æ†î-±Ì3MXíÁ¾ºss&ìL“ô0øvìWǧüzáïׄ6A€7=ðÙ'ðe‡ÉÍ?»5x×%XÅÛ$× 2;麃ËM`SŸUw)m•”ç«s¯/ Bˆ¹Pw.k³¸|Ñf›i­‡ò@µ¡c,äÍ·Û3ïûOÎöP 6eÔóÒŠÃYFÉwÚc®íšÖ¾a.Gõ>B`÷îÝ»wïöŸ6“¬jÕªU«^ÂŒn­uÒצµàþ[h:m枆fЧOŸ>}úø¿oË–-[¶lñßߤI“&M¤·jÎt“Éd2™ô™iæP¢D‰%Jøï/îs{­bl×fYZfuµ¦dsœ79ßwXÀ\(avqˆ|›¼Â‘ 9#lM³ çX~FfäÏuÔÎûdY‘åÝ­60ËÒó¡ƒT_ŠGõ‰b,Æ `_‹Á¥“/²y°Þf’‡€3ôög뺆šp l>-ˆîÖÅ"'•7çÀ4¡GEÍtíÝÒ·pçéŒSct'šNÑl¶Ù^ïלi©æY®÷9† ©x†Ôt NxÖ%$¸f¹©‰®ýE!îÖS—CN/q‡ ìõ¸Ü‚šGªg†×}Ñ®Er×¶æüóvø©‹œ^)¢j¬2Úõ>a…zX—==®@ÝÑ¢óx]§6³NEmëz OMñ^Ù«å4—@x½¥7EØVä˜yîÏ›ùU©qÈ p%Å{¸µ¢š ÏSû9?=÷úçƒc©ã{<ä¼—Ÿ›Êzõœ Ö‰–|k)ˆìQ)ª ЃJ¬»äÓ!lTÓù„±‡˜ Üì;qe1'M¶|f±‘„g—\ ŽûÛ‡Cþç…Íóà KÈë{fdNÌÍJ; –ÝfÕÚ¢v„V+™ ýB•¬’"FH˃}U:Ë&/þpy8qö¹”G'NdŒÿ­ý¢À1òƒ)½JGøNœ¯oÛl6›Íæ\ddddd$äP¾Í. œ<¿O´)Ït‡åز}ÓÂqþá Úl³>øàƒ>¹Ë‘–õ¥móé± ¼¤æ)šSð"Z }q®r:K0  „ì6›Câú3U´>ÊÀmøëÖ­[·¾„ð-´ÁW`kÛ¶mÛ¶m/ýúέõÖ—|ðÁ,þ}[·nݺu«¾­ÍŽóýCYÑýv i¾Ž·èèèèèè ¯ÛjµZ­VÿýÅ…F\«-¢×–Úæ†Ö*ú¶¼EÎs~ìª ÎŽ* ]é ¹5 Äìîp*5£ÍÑ(8r8µ×»!cjNÇ”ï@ì/½!Þ a­ûÃa‹ú©àðHëL“‰#‚}5WŠÂÓ³ÿs?ÐÂ"˜¾µOSéév‚%jB•ox€EÂÚEÎ^ÓŽr·6rP„÷,µ"aÍ÷üÚ̶TßÖÎól Õf­M“÷>¿KPÓg²i¤÷ù…Ti™W«¨Ïü2­¥ÓcO²çõ½¿«2Z¨ê3;Íó] R ÏVVíþèwÉûx=ÄÀ'Ü ÔDï0!ˆãÙl[)ÜR‘o:hñÂÝ~w:imOÁÉw&šãîúÚì2·ãÍä}B=}fÂÝë™JªÏ¦ó 5ÐêUã6þ’—þù×+p`Íyßz8þõñJ'JC“9UCnÙ­_«ûÐ}áÎ.7={ÿÐ?¢kÅ'À/wMj½²œÞ°¿š³>œ8¶}gaw˜ýͧ9+ŽÃÚ…sކã)³wƒR9iUÜ89vó+Â(8ºv\á7š»}“ªÀ]7v¾k@ŸK¼ID/Œ^Xj„Û"Ê„ÑÁ&7gˆçY´VP_ŠZð¾zKCϽ®!œ4ÿ­;œŠØ´ÔP5Ž¥:Ø×(¢½Á¹×¿Xœ‡vût}ÛT^ªfn®oç„Ò†þ_,šóëÀÐ÷÷ìÙ³gÏžÿ¾@äf¡ «Å _yyyyyyþ¿âZC56lذaÃÿý-[¶lÙ²å…ו••••å¿¿¸ÏíµŠÑ"jp]a–M‹ÇpgÇ YtÖÃ= ÇÀàßEÝO]µä¶.˜œ%Bvj~zÆï`ÛcßWð H· ;Å™Ú7´cDUM°~¦RYé <©,ÊÃ,}]q„ÐKX J+ùvå(‘s1\ Øò¿ ÝYx6*/¤8g´žQÝ­.ç—Z wp >Ú„.MÀÑœh¦ä³¶„v¥‘Kh“Rµ˜j2!Õ´ <„¦¢×µP­«÷ëî´RwÚ§>[M›©fvÏN“+yÖ%$˜¼ZC=Žw…  Tò¬Ï?ýSôy‘“Í5»M».½µÏôU5ÑáÚNq9Õ´ëÒ=-¼AòŠZ[½ÝÐf¬i¼”"a.ƒµθ.êP·Ðæn Õ¿³š°*¤ê×å»>îÙnt¡§¨ýÀíòØ}s>Ÿ»¼­²?‡3½òMz̽¤Y!f-8ß“ï´ÿ™ #Nki‹Ï^È'Ü࿌\Fžâ\ Y/åˆÙ?€²^9(/‚,û,»!ⓈÖ%´'Lò%ê‚PwsBYÂ÷b/“«ê_͸K¹)¥úé8býgúÑZ¥d Ìš yr?Ì—¡Ó_·öj¿"——°Gz8gÞ{oôèºÃ®Ww {%ÈíœñI^=ÈÝœ{¨àxÕü澑å¡ÙÝ-ĦÁù»£‰*@ç9MSú…ìÞmrEW[¸´Ĺ -ƒ×&9òbKh÷à-ãÛ.ç»Îß•†°¶`΄£2䙲F*wA¸3¢w…¿$2.ª9„ü“v²Ú@Èž²çT˜ R·Ø­ùg`è‡}5¢,¶¶Ýਥ…’¿–î ÑU£§•¾ê4ª%Öþrš$¿!W ‘©ð弯z»G‡¹ÝàjˆÛX!=ḛ́ŒF0wúì¯Ý *5:To$<2eð¯CSá—¦K„))_º D^ìy;ŠQè½ôÞ9=?äÆói¹¿b,QÈ“€G%ªU«V­Z58~üøñãÇõÃÒÓÓÓÓÓ!þÕ*¯ÅŽ>³ÍÈ”ÖJXþ´ãoöŸÛÁì¨ç\Vø/ÌôuN•Ë;ÂÖœÂâAa‰Il¢ý[X5´VÖ‹eÊ”)S¦LñßÿÀ<ðÀWþº5´?lia 111111º ê‹–Òé{Î%°-Z´hÑ¢Eþû;tèСC‡ ¯¿8‡á¥ÎÆ»Ú06ƒë s¨)Òb¡+M„¾ •Óœ_ù@Ì¥®n`pvýœZ kDÞÊô;µ`YÖcÕP¹X_µÔ ÑrT£ÒëÁ²ÎòuXSNó³: Øx~çßîÿnÆI]P’åúÊZã¤â¿8dÕàÊ¢Œ?4*gØ›_ÿÐnpÚ»4´p«é¨~œ&p9¤ººgù¶f9Ù4-px>{Ms¨3{M 9p;éôVO÷ëE‚Uà05Vi8ÌÀ=ÓÍG€+n==\á삚¯ð¦&Êzè@+÷L6—@æþEÚ-ð-VW+y@ •¼Z0]õƪ±Eεµzê¨.$ºn‹™àV ¥~ê­­îãRèé®Ï-ljé .‡š(gâÛêç™*ªú‡\„0¡VV+©•!óÑŸN»†(þ™qlÑd2†°fp¾Ø¶ÚM›!ï–¼#¹€!"#lID&„|²:4*ˆ& ÇX ÜKyµÞt¨ÓÑ?áÀwû6z ²;ffew†œŸ³•ÜöpÇÝÓºv…²ÍcË”ñhÑ{}À o¿SÛ³¶¼¾ëȲdÖÈÛÏæ¾k{^ßó¶óŇ¡u·v1­çƒÒÚ™®=gÞô÷£›!3äLËìXEžqOHØÚ½–þ:tx²ãSíûƒÜÝ9[]Ǭkâì òcg†Ç”„2ñÛ#CÕ¤˜üˆOA*yæã¸Ñpjüötep˜ ¯¾ñ|ö»ñ›3.÷yˆ(ˆHß Q‰Q#_‚ø¸Êñ]!oAz3¥<ÍHƒ1«Þ?ýÀrª2XÅf"P`"ÐÞõUˆ6-b´ß>ú¦»¡p½”-œ¢¼³ðU÷ŠíÄ·!¯—ý»¬ýžrkÄã`J“¶[4‡ì`ýþ=~d÷±•ðýŠÉé³Þ„ cÖ?½égPoW5œúèôAÍ FùZG««ðx‹Aíž½Æ1‘7.àã ¹…µÈµQk#á©Þ#j «<ˆÂî Xè2㜥{°Ÿ­Ð°aÆ Š+V¬X¡§ ÿOxèÆ»ºJ•Š_×TNøÅô´.ÈìØ±cÇŽ-ŸšÀ&›Ô}íߥK·)jMÍæ”TJß/´Û««AÙ®¼"Ç€ÐO˜(| Ò"q³äáLÔZU}ÑZd/Ôi¦ ““&Mš4i’¾_›åvË-·ÜrË-—ô-¼ ´Yh¾!v»Ýn?KØÈ…†hN³9sæÌ™ãÑ)S»víÚµk_¼ƒmïÞ½{÷îõß_Ü ¸kC`3¸®Üÿ“–›o5ÿÎ(ç¯ÎÁ@>9\K1ëW5Z\}A'{Ýœµ1+×|f"Ø&îο L#¥òÒLé:(âI¯òbØË ½"2yþzÚ•Rx¡wŠÀtà/P3U“â⌾ÿë‰Ü»_è¾ò$¨ëª:œßuZ]§)Ї› Ðìá,{Mu £EYdErªµr :k½Vôùû~àtRMXÓœtþŽ6aÌÓ±¦·>ºôIM”3]õøíwµ†¶óœµFW—°Å"OAÎ7œ (Õ3FÑ2Ÿ”PM°Ó[C…T<à xµÜ.rºï›ûøXµ¶çz $ç¾/^BšZèyŸ„i®P5¦¨áÇuŸÝ-£h³ÔPcñœ5—",v]—êþ~¸ß­½>×´tTá:ú ±Á5ÆÒÔ$Èy$÷®œ5PXÂÞ¥ð›‹Õ¤®u"²lÔ=`Ê”n5uçPû×ÎÖ`š`yØ´*ÀrÍwÔùç9Ø7lwÆ~+d™3æ,ƒœ¯sV䎃»‡ôn{ÛÝPq@•%<„ÿ—N=•ÿfgØrd]ÝßBNߌÁ¹½!¿^^uGx執¦?ÚüÑqQËÁ^Eí+»t‹zq¤ü}2*m>$¹…¯5`y>ûågBû¥h»” Ωª l›wˆþ ÊÜâìßà0TZ×0ì5ˆ|,¢{xˆ|ÉþKµ?!5g·¤| ,ÀÛ¾*~°²ó²?Ë]}"ï‹ø¢î-19ây(]¡l¹Òc €ìßÕÊ„r<¿ýåž„ׄé‚&$Ô²„m¬aKÑR/=„†_6®SÛ%T”¿õ¤ºD¾„D`.¨éàZOm¤Üj’ð‚ð%ñôwíWîP“Ôj¨>sÉÔ†®=jCy,À¼AÂæ2¡ÏY£@.!묅{í ·Bnhþ²œ™s ¯{VXmæ»Â:Bx}ë›Ájµ4 5Ãêi+¾[÷ìYºãûý&èñl/î~:ÏîÚ±ÃRˆ«U.5Π.èûóݯݲMÏŸ _Ý=}óÇ߹à D·CÍU1* ¨ªª¨wJT#sàû½¿7ú¡Ê.‰Í-DaMÃ)ª©žºÊM7ÝtÓM7Áøñãǯï_·nݺuë`ÐÖÆ ¬L={$ˆù©£Åû_Ø7kÿ~=ETC²´”Éì{ O¤kÿ¾üyá×aY+%…u‚¨!Ö„è@¦CõIr円ÜV.!ª¤7ËÉ?À8¡ÍóEccccc/À¹8jÔ¨Q£FAnnnnn®î{ûí·ß~ûíËò-¼ ´4Ϩ¨¨¨¨(]8ÔF8¤¥¥¥¥¥A™2eÊ”)£¿¯8­qãÆ7ö߯…BäääääxtÈŒ1bĈK˜õ\œRûÜ^/ªê;¶ÎÀàÚgõºÝÙ #Á²ÅZϺªv(·µÆ±`Wep­¢ ¢Ô„Ü\[•Ìùun¹3‹Áñ s¡£XŽšvZV@øçaFÜ!÷Y„žêPFp\þzržÌ«'ÞK^•”•~¯°¢r_0w³l1Oºôõ ‚ÒZ­é©MËÌÈytäÇáiP˜öî¡»Úƒ#»ùêYLÔ[Õ•ž-•~…ˆ.!g¿ÀÇi‚’&ŒsþâRIÝçÑ[Þ­§þ-£û8àŠôüŽw×­œp¯¨Ñ²èzÜuøÔíëÌóh è°ó}]$…Tq§gºjÑûÜ>å„ÏŒ6wÝšÌ&™ÜëjN¹E¾Î8ñu%袼.†{ÞW÷ù‹B\߯mz}óýH(YÒdJJ‚V1Ǻìze>É×>Ρö…Ž~uoÖ+¹§ tÛ²K-÷?nëo¿Ù±v&&¾»{dmÎÌΞÙOdÍ˾ º¿û†ö?B•§nø¼R/0…š¦›ûÀ˜þϽññͰvöŠ}›Þƒ¼zÙ5 ÝbSåHx¡ò«5ŸŠƒž/ß³·û<Ë9þ§‡A›ïîøø\8þÎÑ) ÜB—’$Š&<5ëù׆ý mŸ¸å…Ö¥@ièA|ßwRÞOÿ@Ê”SÃN˜È[Â3!òH”¾:¬îÒ°íma+µ&¬ ˜O™öYg@ÖÞ3æäBž3wo^77Eþ;”¨Vâ…¨TM û;ôG¡¨•T¹ß%P‰S=nÔíBõ1×ÿu Y{Š„,@MÐŽ¿8!ëÚÇuEÛ_ÜzhgXÜsÁ”?CϘ}´¼:ëýI#þ€Ðº¡kÂ@xHÈ‘ñ>É:?ü~õÄ ˜–Öâ̰”X4zyÃßÂþÇêíi ™¤÷È öÇïKíãÇC‹P6aÔ³·< ¥Ž½<²}°o•¥»„ÝPþaÈHL?œ¹BoÔOš³M82ªØv'We‘+ÿ¤¯#¶ qÚ²B5˜5cÖŒY3 _¿~ýúyüK{Ûm·ÝvÛm°`Á‚ @ÆìÂúÉù 7—;/b&]‰Öù¥sÁ|RÚ©øVGMµØ•zôóMaP/¦ò°¦ÂߪU«V­ZmÚ´iÓ¦¾¿wïÞ½{÷†Ù³gÏž=ûÜõ|ûí·ß~û-<ôÐC=ô¾_˜ÆŽ;vìØ‹ÿ~ëúÎ…f°téÒ¥K—êûß|óÍ7ß|^~ùå—_~Y߯ iÚ÷¿råÊ•+W†#GŽ9rD?NKƒ}î¹çž{Î#´HÀ´û[\ýçâÆo¼ñÆuÁO SSSSSS¡T©R¥J•ºðu¯6 ›Áu‰yé'ëiŸÅÍf+¶5TkQõkõu¸É.ËFZ$tùÌR+ MÐZ?Ê_¸Ã *¨‹\3Ø´ºUw륰Âå|“³¼C—°¥&:úáÙê %]÷Íw›÷÷O¬à¾OÓøÄÕZªt`­^_Qj)jŒêNuíp…=ha¨É®Qw i ®A”þÎQrÈx,ãÏì“—Ó)7 *|_­\¶¿Ók]æÊc`S û·ý Ùc2Ë 9-²{æÔ…>›ïû«ûhÒ¼y³F&P+9G<óòÃC_]+ç.Y¹v:Ø,ùªãiÆ1\’àñ&Ã× y æ>ôÔ½@iê|\8 ïíþòäépp×ÞŽþár;I„Ï _ ±÷I·Õ¿¢#;wømµ¨‰ê~U€·¾{ûŽ÷ʃ-§`tAˆèÑ/¼„ψø1âYz‹¯+PºÈš¤K2 øqHno€Pu2Ý9DªkAHOáVà¸ë9PðqáOùƒ0QüJ|b:Å5© ˜hç/ÖÇX  D+¢û¿¿"?ˆð%ÐÁÇ©n­5Oˆ¦±vœ†êùþh×ÙT@u ow=ÿ£ƒý‰¼¼8VFÙ÷ÀsÏ?ùÇ+OAò“Ï$¯’GKî*y+t¨Øõ«¶Í¡ìÖÒ_Å [¶=­`ä=lï‘q+ä}X¸÷Qôš©PŠ—óÛß컦Sø§óPÁPˆŽŽŽŽŽÖgdi©—»víÚµk—v`ý´DCË—Pˆ#Å3@<.7e‘((82qdb€sE-}!„¨%AN”“œ /¾~5‰L´ÔNç>Þ¬šú˜?ö߯ A5jÔ¨‘>{ì§Ÿ~úé§ŸtgÖK/½ôÒK/éášÀóþûï¿ÿþûðá‡~øá‡úº]»víÚµ+Œ3f̘1ÿò77C† 2dHñ›æpëÕ«W¯^½ôï¿F½zõêÕ«kÖ¬Y³fîÈ›?þüùóõã4!N&/VXKIIIIIñw°iŸÓëEXÓ0l×%Û"-_³rn+XŸi‡ÚoV}¨aÈ¥¯kp}bÇ™h˃Ì!¹ÃÓÊ@Ϊ‚]9 îßc l\è¸p„ÿjþ:ˆ?‰•¤Ë÷}±äÇÛ啇cûOŒ;râß-·$> ¬#Cv†¤\úúÁ%#¾UüÌo@©{ø½ìµ¿aÚªÁáÀÀ¹&O‹Qz¦{f˜¯cÌ—óvª¹fÓÄ×”<IM°ÒR>}[Q‹%!à 7ºº„4å„KHÓeZÌì¼ómUuŸÇGpRÍŸ€gЍvœàÕZê+Ðùo›¹?WˆA@'›—ÃÎ'Õ³h&œö>Mˆóݯ½ß†ª9ôÒÓÕúªÍjÓœ€>i©Eï×̵Žêju q;Þì•>ãKÃÁv±¨•äj%È—ýyvSÈj”ñ^¶ ²we•Ì™7 ­q¸ªa§"&†z´è,o¶øÕU7Áºþ®¶é dõÈz"«äX²j娡¯u`Õž‹¡u“ö5nʵ¤<µ0¹rçÓ…Â>P¢Õj-ÓEE=Ÿw ÛîMt}UÜÛå…:‚ÕûÅc–™zRÝ#LÔÓœu N§‚¨ Rî÷tؽ³‘â!4iŽ»¢:ÜÎ;%Zn,÷‚]Ÿl/³§”«Wáõò# tLé'J…‚ÜZ®'ß 3•©Ìyn0W_Ue 4«wÓoMni•4Óô&~(e§¬@¡ÉùtÁ_`{¥ð»‚À îFAÈ1ó¡[!ò³°…%Jƒi XŲ‡ g(-m@­øÅËÿ•nÞd}üq0ﬓc¿ˆõ.3–\ÉÒ¢šZË—1ÁÌ™3gΜ ýû÷ïß¿¿~Ü—_~ùå—_Âàa9Y; ï9ãá‚´–2 ¿ "c-7–J…[o½õÖ[oõv?kÖ¬Y³fAÏr}'öèY1³S×\|ý¥Û‡U)±¥ÙwúÏJÓR@322222àÐ;ÉìyªŠ»­N€VÍõëׯ_¿^Ÿ‘æ›.j6›Íf³.ìœ>}úôéÓþ²=zôèÑf̘1cÆ ]»Xl6›Íf;÷õ ÕÝÂ|÷]wßu÷]ðÛo¿ýöÛo_—/uêÔ©S§Ž¾nqé¤çË_|ñÅ_ÀСC‡õH±Õ>§÷Þ{ï½÷Þ{ùê6†ƒÍàºÄ4ÅÜÏò8ä>n×ûÿ»*ƒ«[²#>¿:d½”;:m!ä~hëS¤[ÄÕ¦ˆú6ü@‰¹–roØ ýÄÁ®Ü…ÔXÌ“~Þù¨lU4Ë{Û`WgpÑìÉoàl r—£#suNÙÅQ3a»Í½ŠR)] ZŠ+Ͳ˜ËÇ÷;ëñš£,Fé'@ñ!E›i.§T¦û¯ÔR!At;Þ$oÇ›[0’|…°sÌfÓñÞïëHÓÖóKM1y¥Žú±˜¹îPƒ~®P9K]«·lŠn¬hÛ·*ݹæ¾ ÖtÍPS*±Ög¿ë«Õ³^ §«%T›EçNÕ®{±0Q= ê@åu÷ñÞ?–wuÏ\KQ\³Û´(†·xàÂ>šW3š³ëÄI›’ÿ„¬ìÌúÙË!{Lfrö“Pgvƒ­µëC©V¥÷–ðH–4˜ÿæòhX¾xɳ+ÛBV|F›l3dÌ>™÷'ôÜoÏp[ø]':oµ’ãS€ÿ¥¹íå»a¥cqÎÚª ÎàwIr _&ܳì¾Çz͆Çf=9öÁý 6Qº 'á×Ò_|½~;lN_ÿÁŽ{!â…°Ìðu5>rYÔ“pªí¦ áy898ü õ9 œdu-tÔì–^¡Æ—ek±ÂçE.‰xÂóÂÍaéÐèíÖ{r>õ(÷‹¥®…W>x}â«3AyRþN±i¦i¦¸X$̪‡å;Ô»ÃÞ©³·$t˜Ýú€û&ýèQCù¸“×@‘ã)…} €ågË÷!·”.†Kk!,Çj˜âJ>6ÅêéÕÿPPäÛÚ빿è¿ò¢Vw7]}ÓsÝé»Ú* ÂÍž­Ñ€k†¡[¤ =DÔù"¦ñ3ëAX*߬ª 6–"¹Ä7¤­ÂWžº„%!QØ&N¥ 3TO+ŠÏO ÞÍœB¼· ¦}-zw´"z¯W,îõMø³9àt<‡ÜGÓXõÇ–Û¦¸}Ýß_Ãcߊ‚ð ä*?-ÚUJñ 1W+Øž$g–åQêÉM¡×Ú^)½æC… *T¨ §NNžXtŽYjnôÙdç;«-°€æGq³Õ|Ö‘®×‹i~ïw·púÔU쬵bg³ùÎ<Óð 5(öú|RG}[H}·ýf»ùÞ­u×Û‰STg¬Ü(r ®ð5ÖÕR[4‹m™ë¼zÈBçZ\Ô]—6ëNGiDìhÓû­ï¸r6Ûa[Žý38ôî¾GÕÌù™©ÙÃ!{pæ÷9- áþƵë¾å¨”YÎCâ\0ãç’±°ðŽ_«/YYÉYÙ9[ çûÌ¿òÆC¯ã÷éÞî ícÏ\pv”ïf<ûí#â+¿Àß–%§×µÐ….Qtý¯û×}Ä;›Â÷>÷h3PË;‡ŒÏ{¯Ô×Q°aÎêÞ‰ˆH;y"_ˆú6ò¸mÄÝ–.‹ ÕÚÖöf/&õìÚ»mã¾h8ÖøH¥¤;!–„ÿö6Å;²Š„%7šcSûüíwýw_Î1Ð%œê“KX*r™ú†Y¸…X×g è¢>æ–<>qÀbuµ×程Û9Y´Ž–RëÂþ c›# ÚÙ–æç‚¢¸~—™c޲6„ ÖOBÒ]ÏÕáP+e³ð*ëÀ¶²pq~U©mÞö˜Nšn´\N¥k…ï#¾;öÃ*øý޹Ï/¼êWlÔ­N:tœÔUlßâÜδ˅zTݦ®û û¶¡àKG¿ü2 l’Ç( Áj3·½"V‡|õ2X5G‡xH–'fˆ?¥À°o‡ôþLþ¥Bßv/Aé{ »+7Cå?Žvq}žÃn7‹‘"„2G—h}ôÑG}Ï<óÌ3Ï<£§ÍÀª[¿ó C  Û±7ûsˆlk­\ªXS¥¼ð󸮂ʎ¹9½ o‘£mÖsç>ÞÑ&vBtBÈörüg€i3º:tèÐ!O(U×ÚÒNdezj†T]€0µgÏž={öèëiëW«V­ZµjŇ$\.Îu}+V¬Xñ:d´ÔSÍÁ÷î»ï¾ûî»°råÊ•+=FÈh3æ4§š6Msö].4A±iÓ¦M›6Õ÷k-¸O?ýôÓO?}åîw°06ƒë’c!§Åýûaï¼ã›¶mƒF%k–lѤ(1JÜìê ®4]ì ¹ÙpæñìA§[Caǃ«À2Òô‰¹%„+a?Fn‡1– aÿÂÌ´Ëóo¹‡£'¸ñÈ×ûç@L~ÙbjAdXD\Ô¦K_ß 8dë³þ÷— pÏŽa`ûý«¹ý7ƒ«Éo%î,Nµ"·*Çù mçrÊiŸÜÁ%pù mÅ…œ«åµx¡M*å•‚ZLƒ_ë§_þ‚›×ë>3ì¶’hÕq¾Â]èé %ðcЯߵN‘Sn§«!Á% ¨±nGZQHƒÞÚëJ nZ¡ ']Ô¡BU˜×óO†ädغ˜¶lä+ÑPsyÝC7xxn~÷£yA_ø¥Ä›æ¿YÇÒÉÙÙÏe¼‘; zÌì;ìî¿á¡ÒC -p>-$Áso?ñúèé°²ò"çêÁz+£ÖÚxG™îÏv On{î×ǧ圃ÅD˜ÚàË[fŽ‚õíWfoù"žŒÕÂdž}þ4tȺu@ëqÐ<·õ±fãAMTªkáØK‡~HúŽ4<ÈÑ7 âH¤)|)„%F, [ÕêWïR¹Xg‡Lîùs ¼‹ÝÎ'Oa*NŸ1(LóvFiW¾­ŽZŽ«îÌŠu·7(Â’¯w¡¸am‚{ _Íì§ §vqÍäëjx LšŽ›Ÿ×º+/å~…‡ týwtÉh¸i›¬ƒ‚3¶RyU äO‹%üXJH«¬^Àz·û·d^ Ô=j!^¡—ŠøÝ¥¯‘ùMúÌŒZ°tøâþ+^ƒÃÍÌ<ºžzhÔÒ¡CAêh*m* 6)¿c¡ò„œ:9ŸBigìgežñ\Ity®Êï–Õâ(¼Õ¹Ô> š”Ì]ò›Êòi°œ1™‘}ÃÞ*ù „l2¥„.†ûís`ðo0¢^É»ë'CƒŽ³•{'¾ÿDM0-©1¸ôUàdŽ vÑ ¥»…V)w+زmÙ…iP³fÍš5kÂñãÇ?}ûöíÛ·/ÌZòüYK }SAú©ã •˜# r¨ut‰) ìŽI>7r–ü¹ýmÈ1ÛKWA™§V/"ÆÞšn®‘7™sK7ÔÃæÌ™3gθçž{î¹ç½%uóæþþ¢3£•ͪcòjßì»~þœëú.7š“oÆ 6l€¸¸¸¸¸88uêÔ©S§®üõöéÓ§OŸ>ú ù<ØÕ^:r”Z]Þ ÿ$Z·· ”I*=ªl.”ˆŠ)a<ͯ9”Ç÷íÉüÒg´Ú<£ÈS›%U™ö?_þèÖs ]gsŒéGºg¹SçžÕ抔.§¸uÏ%ÈóuŸ”Nÿz½g¥;›­H˜ò2ŠŸÁæ3«-Ð 6/!ÏÛç¿]Ôê ÔwÕ!™|×ÑR=Åšž)¢º£Í-ȹC"ŠB*Ü×§µÀj‚:Pí}|Žó!ñ× ³wDÀû¥G§L¾ RRàÈè5ëö›o)Ïu{½ð™`o7Úqü¦ü8|~#øûÛ•Ò–ýÙ4üÑð8ˆø.â»Ð?à¦OÛ-mYš5jñAcÔÊa¥’ë&K)-àØ“GúxB‡‡ß~7DÝùND;(¿§BZÜ–™_”fžåsØE¼É}?ªü?ÑšÿQHó —)JaÕ¶Ýÿ_˜Â\~ºªCiq–в@ ñwj]$~i·AF¾›dåÈßW çy°|§ò2ˆ“¥ßÄ· ü©Ð~7ƒô(+…«dŒÂ¥ ä2^MÛ×öï AHMËÞðB0%K5Í»º¹µÜO¾>;<®ÎWÀ†VïÞô!(å”&ÐÐܸi½]ðÜM¯m¾LC¥™æ¾Á®ú±¯t>c/¶®¶JyåÁy\~ÂùX~5­°†‰Ë?\09Äʇ^?ÝF½wzHÙ7dò˜^µ |vŸGê·öUè„Õ7·ŒÜaNóƒõb 0`ˆ¢(Š¢pÃ#µR*‡¼o²ÿÅaóá'­-K”‡ÐÒÈJzë ÖÒºvíÚµk×B³Ñ-îk:–>½õÇŸ»C½øJ•šv„ uË”©z ~w}-[¶lÙ²åå;–©Ï »ýöÛo¿ývÿ0ƒËÍŽ;vìØ¡·+Š¢(Êõ;sÍc›Áu‰¥¤Y ±PôC·c¾óŒãW°˜¸…òÿ…‘³­ œQr[¦Ø¡àoÛïyëÀ|—é)“Ñ»K *û4Xk˜gXßÊó9×°¦!­Ö‰-Ê€¯ìWÆïÃÁ®ÎàB)ܱø®Ãÿv°YXÎ>ýnú"ð§ÂÃP\‹§&éé˜J}ׯþ¾N5Mxrx(¿n甤Gà–ÎâBü^÷ºÜ¯»…5ÿ÷»gÓ$wš©êju]¤Í ó™Í¶Hv§{š·¹™J^çÓ[9c]3Ø„dâܳÚÖâ7s Ô8’A©O‡A2¹c‰¸ïŸï¶kTÑ÷ä]kvšR·à&•p;íö»7ÅêJ5-sß‘ž®ûæ#¬M&(y获·§ÍGx¦ ¯¹ŽnopßÇdP¹ZC©“*ü{h°Nú¥ú"xè!«µV-è¸{x‹Ç Á—u¯$(Ÿt}®Û‡·µ‡®ïìÙe â—¦™ 4Z¨¨ˆ‰ NãWõ)"B2Ä$Ç­‰= e+”¿)®ˆ÷¨©ÝA˜&ŽG»êRcAIQ^TƒÇcBUPFˆU…– nS«ë¼?½BŠÞÐ(nw}UŠÛ…m®mP¶)ÕÃ@¬ÛAÖÅcWÓ´Ù[êcâ Â\ªëû¨.&àJÓõiÁt9Ô„±­;=·¶g ¬.Ë{½ˆÅpç–¨}¾}gŒù ¤¨qî™bÎêdõmõ °ɸœŽu9NÉÜBþâ‚æy¯€z³€ªBhÿ°ÉV„t³F„-¾`: š#P˜¨ä­­Eõ,õj¢w=~tõ¸®«æ<,úï¥Øu|„Ñ9Ê?* â&á¸xZø 0S“똼j¹óî‡ò¡­­•õÖMå]ù]edçgædw,êþ@×íÐ!£ë±vß@\ùò­c³Ü‹\ƒÂš†¥­éCKX "°d}·óûó`Û\ðhÎo[ÕÖq³á·ß6<¼õP´8Êmƒ‚Ù†žøÂéCýµ—^Çå¢à”ó³Ü¹ÑT-¢3ôßÜÿPÿ%ú,¬?ÿüóÏ?ÿ„#FŒ1®Y¸páB(¨ìÜ•Ê"5VþéÊ×)ÞË)± †¤¤¤¤¤$ÿãÒ_*p$'ù€ÌuÌÕ,®™‚ÙÁ¾×Bq×w¹ÑZa}Ú4iÒ¤I“‹_÷|Ñ>Wš°Ö¹sçÎ;_ÿš†á`3¸.ɲç;Ó÷Áúå{·/Ý74‰¯SJ¤Eˆ%sƒ]Á…âì,'ž†ôʹ'NW‚œqù²’Aú],mjQããJ| !¿[“Âj]úù®ö·9XiO(SÒY¢JM+5¸ôŒ`Wep¡dÄß\fÖà(£šÌiPØæ=µÇ"áüš¬uÎÙE®_L…Ti™çì°b.v†™ÏqEi–>Ž© \ïœ! ~ΰ³¿¯Øõ|f£é-¤Ê^×qî;êwœ ©÷ 6ïVTýûã#€ú¤´z¶Šº~á×ZNݳҦ¹ u ü…`[zŠ7¸Þ¯ ÚZ´Žký5®|~Ã*ˆÏ¬Ð©ò3ö¨rCé\P«¾Gzæµwÿú¢¢L¦äd¨c™ýæ}á $+…ŸÁ¼U S{€s»<]êÕž )R˜” jœlúè,4W–ÈÖªkÔ# +®û£¾ênyÝîwЇ¼'ƒ¸Ý%•)ÉÊA¹ÐE¼A:j¬ÜYmBŠ´Ä•(wÖ†Ó»[]s­+¤9Ò’õï« 𠦮1ŽB+Pª±ZÞb`ÉZ àg—Pé‚|[H5A¶‹:ÔÕâë+´)>B›&pkÎKísêИ¡æ)ùµ°ú„~h‚–[8ô}_Ñ<¿b…C—À¤ÝÛô¿ƒí[{w[‚ª „– YÞ,¥HÓ.®[äÙj¥ “[6„ÔµXÂ×€)I²™¿¹øuµ”P5É;ÌÀµ¡°@Øøu!^”…PP“|C|SßS °¾Û º}ÑÖV»ÚŸÏüñø_§`CþÚ…›{@·-Ýß¿µ <6äL¿ ^W0%ð™\é¢By¡ŽôÃY®ë¤«åU(¸åU=)Œt¥˜ªïž­µ¶hÄb^O­EÔ;í´¸;QìÜæyÜ©S_ŸÜ >øµÖ¢êðЫ~V{€ù¤<ßy7TŠ8ø™w€IDATèÓ}À\MúÃ<«Ë!)#l0DÝn­}é©YÎ9Žrr»ÂåW¾>Sq…µUñ-©ŽÇäïí‡áÔ‹éò‘dØ?ëxüÎiЬNÍðöí¡TňZeËëî^½L:uêÔ©0hРAƒ<š±µÖÔž={öìÙ3ØU^¿›Áu‰-Ä–o•óv®šÿ=T^[¾}õg ô=Q‡Êξôõ ®,²¨äÊí!]Ωr²ë䛳ʀTJüIxÂÇ…&DÝa7‡fG¾sõ‡\)þ ;òËÞîî ëñ”Í,3¦l¥K^Öà_Bî›øtê>ÈXÔáÆŸÒÁùôИv“Áq¦ëÀ:~Õ,ÙyöÖÍ =¾H¨*jY,N@ÓÒ8϶PìŒ5ϺZ¹…8/aL›1§9X¼ÅâÖõÚ|‡û?ƒMqÍŠRAÜéÝê©KÚL-Ÿ[w+­æøóŸÙæ=M¯Û-„&H%ÝŸæhójyõl u p>š»å´à[Ÿ‚¯aòɉïÏ|Ö}½ôŸÝ@·:¦tnÉ»}K»?@Þã\¯îƒ£í^{wñï*I©©Ð(gö7÷Õp gâV½uRzV˜(L¥¡[ëêr˜‰[Ý·õOå°zÄ5Ky Ô ;Ôâ„îâ ú,3u w -A8J(©Êaá¡­¡ëWZq;(]\{\¿âº_ߦ¬Qò€Xb…T\B[+Š„GºÐS¸ Äí.aNi¨4t süìVcÔ®YtÊ aëA2©C…* & ”|Ý¡8w¨ÀZOA̵ž&´i-ÂbŸ–f· V4Ó­HHs;ÈÜëkÎCO¸·£KK‡Õf¿…jxÏ<_ä/i«Nƒ‚6%Ï Î2Î|¹5H=ÄbG{.l@d‰ã+øÎ8tÝ ]¨sn¯p¨…:¡ ‡>Ž5_áÐßqø9ç|V=%o{¼£Ga›l]âÿÄŽ¦khÖSqü8`Z×¹N˜ëø¡ä¼hˆz5êxT9hײó¬ÖïÂíoßy ó­Pêe:” vµW!¿¹B¤–¯wÿu˜Êïir?Ðb{^‰P",¼|©ˆ¶G(û6ˆ;Å|Ó¿ØrYáš·Ee€5ßÜ+ü} W Ž‚M­¨ Yy#íeÓ—ƒ²N­¦^E3Š3M¹½ÒÃàС¤öíƒÖÝêVéz;„ÙC¢£.Ç ÆëŒ§žzê©§ž‚O>ùä“O<Ò³>|øða¨R¥J•*U‚]åõ‹!°\—È6UtÂÒ•[7ý<âïŒÙP¥.Äl‹î].'ØÕø¢J´£/d-Î[pf,d¾œ“xz!(÷3AmO†vŒìá?†ÞñmA¼1ØUŸƒÛݼ¿3„˜B> ½bª”ù)æ<†û\duk“úcypü½kqÚÈßúýƒ?ᣈ?­gi!Ð…­õé|à ·zQ4Äÿ\i¥š@ä|…0ÿó7£­8Ç›ö‹¶ö«¹wþ¡g³ŸJª …îl>˜X· è¿nq³Ý|ÒC‹®Îbà~ ßWMð,jíµº[M]Ì›’÷Yþ¯ðâñÿ oe€íå3µMÛ Ó½vvþÚ•ëÛ: Ä×­®åu^jÁ¡ÌWË/‚– ³é3 „irøºî3cÌûÄ* ¤:jÉ%@ºÔX—ð%¤àÐ*•–) >¯¬‘Ã@yŸÇÄH0M· )ðö®3<Šªáž;³›Þ$t„.éHQ”nõÄòÙ)öŽ`EE$A”Ž(¡wPJè!@h’Ò“Í–™ûý¸sgfgwI(•=ÏóŠ»;sçÎÝÙyÃ)R/¾r3~ ‰ñ•\ Ð1t:ioh?MײÓH™Él˜¤·~Ò(eݸåS¯@Ó3šµ”+ߌD–ˆ íxü,˜U“F)–\E(5þNÈz‹±[è Á~tû=bÄõ¬Ôß•BJÕ¤]Ò<Àëx¸¤ ÐηnÐ @\,4­„,·3¡ÙHÜ«Š;6_ͺêi]˜Õ—ŽÁPe·J>U±v£D¤Žsr'¹?`[îp”|,öÍÞ Aâw·q]n~°ü…ßmkŸÛ<È»ò¿ŒÝ@øð𤰓ÀìÂo–¿— ø õ¿ß¯'@Ó𵤉¥šF^ sõ–R0d0ZCož8t÷Ä¡! ׳À–~ÚŸðË›@ÑÔ_~Ý;xbL«?DÖ;ôþ#kÒ¸zû€ÿòkíË» Xf[õ|š™–ùM*¬ ý%êçókPRyŸÍ¿é}®¥§Õ.sÕvq'ЫW‹Ç3âH¸‰öR/¼ø+á%ؼøOcëwG×øA÷N þ¨™ýg€òžÕ {ªÔÏ>ÈÚŸ÷Ò•âÞÖæ…‘€ùwÓ*Ÿ×€ÙÂsŸ¦Ìo•÷lÿù8?øR×Ôj9/´$ˀʻ¢ª4,ïYyQì‘;3/-ò¬WÖ¬§žkØk ¿Ñ¹}Ûd¦p´,Yj” ³>×ÏJ㸑 ¶2ÍÃiv£ÇótOm©Úö΄„ açQáf˜Áòébu×¹õS¯Áê™XÓ2ó¨¡üüsn5¼t6äÂÃ@anÑfË9 VÇJ×”dæ×{…Ù$Ÿ¤&éO€üDÂ(@˜.&Ÿäz$›FdŽô+ù 8ýô´ç“à`Q¼zˆÝ¶tÀ¨ß™USÕ‚¥ò!éŒÏŠSŦ'ä…ò ÒF@MâMM¹ õh’|»‘ŠhH„Y@U*k|†îDA¨CjkÄiN'‘»”Ì´=ÌÚI›+ó9H2#ÚH† :E[†ÁZi°‚ª%Jx?£Ë ‹ÖÎSÝ_U´9[2ÕR‹(ªìÅJ2œöTO»ùõ«X‹õàÊ;'BP!è"Ù¨XTË4Œô¡Z*@#™uÖYù†Dº {Âc–­…vÀþ‡ý;Ä¡â(¡XÅß'È‚ð”S®•‹e»lž‹Ò+üŒˆŒ–qåÛñ`Ùu|*UvÔlû¥ÆÖO€àÑ~«C–˜Hq«–ýå™0bú39‚ù+ ¢’â’ãÖ|àqÿ1ÿ7õE f}½wkä=VöÍí´mÒ>§Uûÿž2͘eGª‘¦J&Ým%@ž`8ö|à/v™þØüYòú¨úS¦µkáG~ðØðkØÿTÝZÚ>ö ÒxÛ otÁÀÜj€½¯cí °•_pðo@…ÄþÑ?üó²ÛþiHû<³èÜ%àZÛÜ Wcâ:·¼gå…îá%ؼøOc×éäÄÏS‰¸Æô1cªÚ¸¾7þoMAcZÈÉ*¸ÕÈ›[{µ@RÈ»bE hO@Ã@ÀU¿‚Àiå=Û.¶¾rôÜ`@Ú‡gi,Pµ8ªu•Ê{V^”†ÂÖìLìX"~=w®PòGüŽñÆø-3pÝ^S`I¬M³ÔTgâÆSšº5·*Ð ²0 ŸÐ9òU¦Z#9Êœs€³_{{Ý ÁöêҴуY/Û€pØ™xR”a Ìz)H'‘€éŠ)_ÌäüºÁJ¹D[Åö#ÂaÚ@‚¼‹î„æB}‹¤œ.0‚ƒbZ&›N[ ˆë¤ŽÑʹ$8+Òh³~r릪tSF‘›Ó(Ú‘ _ÎgŠh…Lät^b@:²’F´ Ñ&0«+k6ÕJ«ä$§ïÑ x4–(ÐH…ëÃ”Žžˆ5M§kEÕÇË ×ô3í,ùÅÍK†×¤åÒÒÀ'É××ï p¶ÿdß ºePÖÑí¾pkÊ0ˆoG”–V’ŽtwYu O#Lo/g ϶çöŽEv+xÚBÈ€´Ä<á÷›——ð!›Ä@ ÓgÈ¿\ðaA°ùçuÕ¶†›f­»wzÜß÷ÓÎUÁ ÷~=(SSŽܪêl)¥iô(µ´mVêä¼(3²7dmʱß?wF}à•W€:u€ c×,¾€Ï¼NwUíãyÿâË%ù…݉ÅÉ“y,æÊ-ðw‚V„] ªY©@$ºKÊûlÿ98?ûrЙK?[›âçNƒé÷DyÏÊ /ÜÃ+ªôâ? ßoLuü’ÇZiºÍë9ÿÛ`Ù`;P´¸˜uµÅ™u@N“ÂKW¿öûe*¾^+ú'/±v« ÓÉ}ÂG}Ó‘(=UÞ³ñ¢t8^¢5€’SËΞ~@¿ŸOá‘Xãp õW”Už÷ˆÒï§)¨ŒJekN©.gÅ•6F¬‰&åsµ%Ñu¾¬u“bn·.Ê.-„\Qàõq£üÚízþƬ4m¸²ŒŒ@Sç¯ÏÕš©(µbùkÚ®lŸ >NÏêÖ­ÏtcV5¾Ÿ¦\R2ظ"ˆ…c8±æ¬ø›kþô©ï }ZcM  á¥š¯´íŒÙýÐG£H?L'õù>©ýwÊ t7@ÆÒhO0“¦d™,ŠÊ\r±‘0šöŒv‘œI¬@nÎRÓTºb!ùh•œ)Yä€&Ég¥P…PS¤ ~€M:0˘܌dƒIB@êÅZB0%W$Édš3]Ûh´N×Å()Yâzv%Ó1œ#_±ï˱ Í…:¤ õâm ö–a…îŒâLUæéhF ËÍ •ø“Ó±L.Ö¶×>Wˆµ(gë²ÎòÍ”]Êñ”l8Õ2ºŽ—#(WëQMÁÊ®#U ¦YRÐ$)Ïé:TÎ˺ݑc{(:g±œäøIÞnìPœ0’kzœt|<í¾À w#±Ç•uÌÊÍÏü÷©ý¾Ët&o V~*aÇ~—ªÅ\QÀòûÿÝ«òû!ßNµ¦ˆ5Nàæ©¶îfr+7û=ªó/!ì×Cþ'Œ%}rØS¯gÙ Ñ\ì߸RŽZP °~ݯ›ÿ&=ñ ôôyàÇäïÎÿ"¿Dø‡Ÿn¼¬É@*qøÉ¹Ú~r„,¹úñØŸ®Ä{ÍÏ‚Ÿ9,>B¶ Ó‰€-$þ€¸I<èüÚü4{m~šø;o§-d ²»?ÿ+ˆèÉÊýóô÷Œû‚6u*}ÿ€*~!A›tÿüˆÏòÀd ûHþÞ«§‹Ö«uOï¬#mBñåò>ÛìÊì—s#ñŒOßòž^\^›ÿi¶«½çy wBá¢khüZLÝæÞZâÛù¸|J:\Û^ølæA dQBv/À<Èü˜OòD`¼ÖÏÛ+}3¾L[”Ø­w[2€j««%Ô¸¿¼gå…'Ø#7OIÛ äY‡·YåØB^œÙ' †tž[û=@{ľ~iŠ> µÎÐBéšKyÃRMݾÔ6Ð2¶Š*°’ƒ= •o$Ó<›)ÞìSœo×/Sð\¢Àäy›§±õÐs«¨þ|]•lîqÚ÷c„·zŠ›˜²CUø)D€|Éa¢g/μ>öçÿ¢{W:Tu=ÐeGUwíh8ËR£á$‡äd†ü½dįLL±€¼‹~*gB* R•+) “ÉdR säìÎLeÑ  “)3ˆÝöKÿ1ñ†L2'ëWx‰ëU€œÞò8t`ßÉ+-8ÑB¡ŽF\©\ÝIwäyáy–ÙFwÉç˜%S.H¦bøÔr$ƒd‰ì[S¨cÍ"ªŒ¬R?‡´ë†Ÿ$;[=Êøù3"LNfÈgØñÅBöû’‚«WxqBUµr+¥2Í^’Îl$+ã0L_@ÇpK7Ëüs² ë2¹bϵM–×r¯mHɃ€­­Ãa}‡ˆ#I ÐÏc°? ø‘1¸\zÆ›ñwg#¨BhòWE£¬®7\nÀ•žÎVZí¯œÿb€¯/ÉPÊ¢nö¸îa¥Žö_û‡’do mõ;z?€¤9Ñ}ÿ*QUK¥¡`S¦ >½îü;@³-Ö7VÊl„xàXò¡å'^mÛtt1Ðõ­ïvœ T.¨–]ù±[?¯„lfíÔtwœv×}úÒR…¾ëdÝ\KO¯ÊR Áþ¼Ý–ÝËæÅmû¨„?’~*ïznl8`ÎnüT…¶7>ž}‚}“m »¡èÃìû©¦ã¨4 þ1ࣰ߀ -CÆEµ)íwóODJìù’#¹€ßÇæÈ @ åäº>;—÷¬¼ðÂ=¼›ÿiœ ¸ä{(¸´,ëJê@ Y­zr›)å=«ÿ,½mq…ù@æÓ¹Ó/8ž‘•VÁ¿žåøOý@#T¤ÿWÞ³ýï!#0«èÊZ }áûy½Zq5µ‹Ë{V^xBáÔÉA›?,Ç–Í=s°œ]ðõØ"€ôõI6éZC5Ë£³2Å# e’ƒ)º 4™²²€æŸÿÒô{ºöP5‹it§à#áyS%°²‚sú,4e••ÇYó‡ÌšÉK8a'®gÔ–c4S°‘ÉWt€1*ÔaÄ2”(׉úÈͳϠµ—ŠëÅõB" ’ÏHAÆ0…˜šq¶N!îâ8±E¾’ÏèÍ2Ý4ÚŽ+ÓXÆo%•z³÷ÅDb uÛÃ5¤_r8|å"VNÁŽÃ­¢ÎÇ“ìÊõ´ÉPv¡Yt SÈa³”^ “iPÔ«äù»éa:\z0µG˜Ì@PÿjÁû=ê‰]ê}ãÆ,¬¥ÂEÙêf}Ü”CÜ2QfÈŒC¢R¢Ð[g­6ì“®#J•ì>Û:‡Ãþà8. ·? …øËaÝøtŽO9’¢ ¸~íü͵€}÷ì>0 !˜÷ûOK> ð ð—ý׺–)&ã„“úI<@Ód‘e”a9©N nbÿ#pgÙ¥’IJÚxÆIbž>sOˆĸ¹Ó¶•»‘¯î˜=º NR©ÆÍÏ‹fÑŠôO 0Ãò`~P8±xEáç€i‡¸Iü¨”öR•‡î¼’„±©¿„ۂ߬´ˆj¦µ½ "Ó /þx 6/þÓ8³çÊšãÇ3ùWª;´¼§Aî]%ͼ5Ù7ù8½*_²îÍ[s¹P°Û2,?_+)‹  LµÅžæ#å=Ûÿ>®.Èi™9È9Ÿ[ãZ_ ös5›Äô+ïYyá‚ÖãŽN@Ö”Ú¿kH?µ}¥Ö#€mú³–žÏ_oGC¸y’ûòOûim}¥(ÕTÅÐô¤D»ÅÚuæ[Zæ›Çým„üø.aìÊxFMµ„ÆwWfpÊ6})…~;­M”)§ÎŸÉK >¯õáˆokÙ¿]d¯ ¼°ýå]Ï-B‡‡&†g 4H­˜RMÜÏÔXžLž" ’ÍþG#ø¿“k4wÉ?Ò@è@ž"õ9 §m¦Ò«M~_ ÂÕ«@³Ï–¯¬S: É,4Ÿ— è­z–p˜ežqMr0"K4‘ެÕS¹•l3©£pHéÀZEå3r 9°L.„£$™Œ%™€¡ÈÍh”¨œXÛf³ØŠ…lV´¹FЈëyöW¦±}åfš¦Ei̧Kì»dß$5#O8Ì­¤Eœ‰9§÷J‡©(V"—d°õ„CŒøáVgBÚ>€¾hs–®ÖMÅWÞê›íÛÏï€ï;⓾+´íÝ–%è,Á4IÉ:+…HódaÕÊ àÔÂZÚýÄ3¸‚ÎXá¦e¥gGÞ(lë¤Kö—Çÿd‡ã*òX`ݰ\7³LRŽçü¾õxIšõ0öÓa?L¼ št)°Ðå×u;6zÎ컲[׎2MµŠVsŸ §µ…’Y曑À£ÍÇ2ßH5Œ"þ}ÉCy#÷ô¬3kf‘ 7¾|f`îväʨî@¥ ÕmQ>·ï8öËŽd[] ïDá±¼Q¬$Á: éæ0´Pᇪѻ¡±PO¬sëÇû§âP©C¶ªU«P½ö7@ƒÇ«Õóf°yñ…—`óâ?´°«WÏœŽ/¹xñÀ YËza­ S–bn\Þ³û÷ÀÚØ–né ¤o˱\|Ÿ¥8VÁ—¦‡¥þý'ÎÈUœ öòžíƒ¬’ìo2 ,9gèÕ@ jϪ[PÞ³òÂûìåsN÷ò¦=‘øà¸òà´Öýû ÷µŽ-û8e-#pÙOµ`:F^×fP´x$ôʸ§öOm÷ÖM§ýÝ–JÔì6÷„š«eÔ}¹±Õ•H3(ðø:$0âD#Öœ‰Ñ=·ÕÝ?˜;sÖÔ…ß•æúeÖ¼jk.Spr‹+zË3ØõK·±õã- |?–¡¦]׺,@¦ébÿTÂû‹°Ž(y°·KJÞÄ!ÂýbOÀÿ=¿Æ‹1 SMÃáb%™â& ÕšJ“”–O„š³eÓ¥­T¹>ÊN ¹±œ–©…õÆÊ \‰DVšÀ KÏåÎça{ZzÇÑpi¥ý@P¬¿ºàfÇfö?>Ø\g½mût õ˜vÏ·¸¸+§óƒm÷ió¹œqy+P齨•2Ÿ‘¾ýM­Í’)Î\R¬Í’W_$òR(h\FuFU`–ZFЛ‘<;MUÂq¢)A-WpþÕ+Ê<žÍ&íž–-@AC‹½``o!YJÞÄ«‚ îSýw/Äyr?±% _â M~²yñ2 ä%F¥§!ôŸ·x*% ü>¢Ý81­/Î}y'êh’î¾±[+'QÿT[‡•õ×—‚8•'ð’~bÇ×|çÒí8¼Áù5ß^-'Y&|#LGLùÂàèšCíŽìžî6iås¯ïx¥Ö;K€¤úûƒ È;b2ÜõvZ¹ Zv•®€é ó@ó}ú2^N`ÿ„Z©»ýö>ÿSj¡/-0µ\€•ˆ~¦!L_6ÀK XÉÀ­–4Ü,xÙ‚±ÔAêÎΓ—6Hݵ÷ùvúuÐÆ1kÜâÉKŒ% ¬œ¯—çRž W6„df4+¾\¼äå©{OÿtÎô×­#ÿïìÀß:T\–9À2€.Ò’®Eœd,Ø™5@2²ÈÀÑàH—üh¯Íf“É·ùÍç…¼ 6/þÓÈN*23}™)û¶nê]¬ñx“Ú@pÇ€_Cå=»ìŽƒ¶ skÞîK_%õm£,y~Ö 'âÀZ¡ÃR‘d‘6å=[/rüò*fw2²³’¯ljVß30™’„gË{v^r'ZÈ^Û%þIÀfªåˆ<Ø×¾´ Ï%×­5"Iy UÛñJ>ƒ-ZÉTÛ]z›jäéYqeÍX Æpƒ²…?ˆsýH’{å ·†•qž2ãƒý2M“q.H¥Zô{@øY<' Og`/Ëf“c2“LÁn“1ƒe®ñ‘Âm)Ù€m¾«ïò¢V$䞀Œ ࢆ!\ý¥#F24e ´wîè8 #í²€Q$޽3bŒg³ñoLS†)D˜Ž† L©Æ¯8á0€DºÓ¡dŠåZP-‘:BËIÙ=Q¤C½yÖ¡œ‚½ŒÃ`¶¬{Ro©7¢ñ9a:Ý 5D_nÎf*2–!(ʸ¾=[W%7gk(¢Íâ)Ö÷‹¬™%+¬½B±8?0.h3`ªašfž®ýž¸’R¨Ê‰kc‰›W¶iÛ)óãY¤BMÍrTZR Q#q§@%ºÜÍ+nÚSK#Ð åp&Fé˜+a(8_p¨h°Å²ñ³]€-/®»¼-H_˜Þ3C¾˜öÃö÷þköø¿ <ês5ä@#–”ó¼Í„˜Vj Èt" YIÕuPK ”õlþWÌãVæí6Ã-IXÀ¬ ô]q±BØYõ[ü3Σ¬¾9\ñâ8ÀüÄË=–Ÿ¾Ihxøô3Àù˵Úa0’?/¿ù•$Û»•< äu)˜˜€<…^t6™Z«J3 `Ÿ’_Þ«Xv&Yö4R"ÎG]´®P¿Wצ@D« k‘ Ë{v^xá^‚Í‹ÿ4l‚].)¶ü~$iõj FÕèšuÅ0yèÖÇÿ×B±€^ó-°f,r7ÕϾ ð½ÇìëÛ·GH¢à'^(ïÉzá Ç‹»t.Õº²ìÂV ÚoU6WoøöóMòÝVÞ³ó"¿ÒøFë6ÛªWÎö'æ÷UpVˆ¾¸ÑŒ!ðá°e ×&9EQÚ4-uû)=P•:îpyœÔYÌŒÊ:WE˜§ùmˆ6n“cœóq\æ¯f·[D9Ç,}Ù¹×ÒslÀŸ¼4ç£xÀ23£‰9èzäîØnOÝ„žb‡0@ìLž1_Ñ3¡£ØíºFþ{ZcŠ3!U1qŽfåòH¹¢¼ éD÷ ¡t‚BHe{Ë1Œ¸ãê8Ó6KncãÀÙugê] XWÏvdª¦` Žýpmצ@ýy ­ûŠr'E· ʱ4VQb®YVl;GŸpR$q+­:ÿþØÿTe&#g„h–ƳÛx…€ð#xèfe•/É)Xˆ&žµeTn)ã:—ÁF›³y‘ ½å•g°ÉÍÙçÂ!rHO„‘tV¦ Œ›À•kʸ a¤Çêuň(’Àcœ`“æÉOË€’…%‹þU$Iêà;ºRxž<9èy@h)tF{½å,ûŒ[ŵÓ@¬%q޽«Z´ Zo]5dœÈCõ¿ ’Á¶3*N]ˆ4žE¨(ÚH#=)qÝ–/(í©ü{ê€Y·w;¯¨;”Væ`aíg}˜xߨÏ|X£-ÔÖh°©Iïú±@ŸßÜswÐüj›j±›ÒŒŒ‡¨ê;/ØM†‘X"IäÏRâÝ• °D±¿Jñ¥@ÅçÙ¼ð ñ×J Ôëô2=!Ýðl3€6GRù·Šr Mô@ª #ì8±ÈW¯/#ùúò–Tn%ý«`Ú“Ðg÷,@|niø¾€#lë¢ÁgT¬lªS«Vµ-å·ŽêZÝ+_.9»òC®µlWV+v&Hªô P! XŽ’4DEú[yÏÖ3òªÝœÙsqÁI оS£Z½zÁþaaå=;/¼p/ÁæÅ”²´™õë\º¨R·Rïêh[…äjw q$ßOk9éýrìi/–¡ÖãŃ€ §î j%‡îñfªý[P]ümQ2p1õÊs €êS+¯¯øÌò;ê—qëã{qkÈÎl9ä‡0Àñvø«!g«4£ÿÁ€¦Sˆ¯(©7ÒQf+GY‰0×ý¢)Jê \縥™Ç²øF §úy)¡F€q"ÍXzà‰ˆ3”¨Ê5Û—Vf`(_àYVRw¦¤;ÙåÐ[çš ígÙÖΆç>°cTŸQóª5yµ´‚&$‡äÒ0€ŒÆ ¼g2 È ´ÈL¡)šMTHåj¼-ÓI}€ÌÁL¾3‡iz"“ÉtQ,á4WËßÓdÀÔDÏ:FÁ™:íùõ»  Q¼zU)9à°éÚõéJœ1bHnάŸ$NDÖ‘/˜ò‹Y1U+¨2"'xUë§Dzë2§Rõ›w)PæÇ,¨‰Ì‚Ê•d\Ù¤¾6„ÙsâEr`V²j–UÆÎ$(YhŠNSzñë)ð$‡œ"¢‰Ž<ó^œ˜â%Œ¸²/°w±÷ŠÖW,žÆ”j² ˜˜L>3€lßœÀÊïέ⋾$N e÷–A§*EVN¼4AÍ>T¾g¥œAg©u.íp¾ðóÓÊ”VWOJY–T®h£Ie#Ð\u†ÿËÿ&náÀŽ3—ïé Ô}­Á’:z§êWª¥3¯ï¨½õðÞ @íÚu»×:T5×¢¯jD°uŸ=Åbˆ/† ?þïš»v;ˆ1Nü f9äJ5õ ÅšBÅe%SË ã³0*æ%äql‹¿–0¼õóaÄ'M#/(åòŒ5g¢Žý»F„^_Qçsü‰?üø. ‹[ÞØöȨo€B±`mñ( H ¾'à‡ò>{N ‹š‚Ç‹zæY€Â–? #€«ß€Àj@Tí0kµ €PDþÃÊ{²®¸“'gç·\I;sèÚ½Y«_“‰úß@fž^üðl^ÜØtúж+€ˆá!±•^ª-Ž’kÎ/ïYý}°uÔ°®D_Ûz~ ýŒ—¥ ,)èHx[Àï-Ÿ?Òoù0^üÍ(d}Üòpî§´7Rç•ÜVåW àËÀý]Ê{vw.¤ûß}m6³®ÛËÛ¶žttýŽô~¡‘[bß=æÁzUH¦y6Ð1Ò—e³^]?óÌuü²)èJ'þœìÕÐuÝqXë©û6Aж´ˆ-ªFB.ó൉Y€p’6w~ëåÏ*ü¯È –¦Bª¸ÐthœÀRÅýL3Æ´frŒfeÿäŸ*³±d©ÐÕR¼œ¥%¨ ©€¸°_¢³$»v2ŽL% ™REŽa„Y ±d*¸e2G[¡£0F¨¤Š¯F¯[ ™LŒ`[òòèP‰*•hr!é­y¥BµB*{'°,4:Ã0XÙ&¬u”+ßj+´T4 b 2NÔiÊ+ç«È‰T”šXɈ<=qÆ 0’ÁZ%ùïŒdðVK8esñýÙ5  7Sæq"Ð!åÊE€)[ ‹h4 | L—졧 ÉÔ”Y%klg,kË–1ÖP@R ð®€3Aobgœ0ÍU¦S’9ßøïU³î‰5ƒÔÅŠéœQ¦V-ô1lg°jóyi¿KcÆ¢¶½^©gTòy¾/”g‰JF_o¥dð—ö¥­NO–J‹ï[ó °?b÷[×öh;µÅ\zx˽W€A#‡Þ÷Êl)µ¬³l9 ß…P±:ë37h°n–ÙF+ä_kÝÔ²ÝÈ!–í¦´p*Ê4ÍrY¾™nîˆCg‹«3±õw)În„º9+‹sóù1?~;ðëЩ_µ…À–îcúû}¼¼|긙ƒƒ§ÏÆìjøúîóù¨¼g튒ÖjÅ'¼Eõ²·¢M8볈^žXm1àSœ_à­çv!ã÷k .o.5¾z÷ùú@Ï»ãšfÁ,Šå=;/¼po‹¨w|Þ0åú$»¼Ò¾¸¼gó÷¡°ËVK³gOÝÐu¨G‡:†<æ%Öþíšà^ò±öšžÇyzäæÇóâö pÜ«Ù;ž(B)®ýÁ˜ ×ÛÃÙÚÅÁ 3×ò£DÚ§è_—Þ2ê|\µÍ´sk§6>'œ3ËŒTŒöÀÏ,–ÆPí‘[—mÖ^³x¹(aÔ–Cçñ9ág$Ü»uíƒj *'âØúrbm[ç-çv}<×ð¡ú3_~\ýIÇ ­¢aY8î8Q&µ’ZL‘FêB±?©È1Žž4\Ÿ­Æˆ8XcÄ›tDZ!gˆ§3è)€ä0bNHå:6!U®ˆÅÁh˜«ŠƒÄ‡ ÅÁB”VzÀ‰:’£XF×Ð9ô”²†T÷OEa¥§ëÁÄׇÜ*©½ÙŸRw¦”Ÿ§OÊçíµ¹im”$“FjYhÚ÷«X&t›\¤d˜¥ë¯¦`#P³Ô”o–e©ñk%‘[6ÊHn7Ç]''ë[;Õí8±Ö›YUùyªJ9â&’I2¥»þÓÁ²Úêôw2{€ÂÅ] ßJ~´Ž³†â|a•ð&ü]ðįSñsq¹®–—$ðÌ;—¶]%c-–[›yË)['ž­Æ3ØÔ–P^V¿Gåwè²]‚ø8S¦1¢Pm#öÔÊ ke\­õX±¬^r.ÑZA•¶Qå{S[F•û™jyåóSŽûG¿=Ùû¾ç|ùЫ@ƒýÞìRø`ðï¼™ l8huŸ­ÚïZ½ÚSIœNÚ+ói6Va!î.“µp± “·j¯Ùçܲ)d³L5Þêilû, ܺéÒ©´oëîøÎ­šžÚ4o¬ES÷‹Qޤµ…:·¥[AÙkN¬qQß~jlGÅTý|yë'':ÿĵO~O+ ‰ùòXß0€6¤ hC 8¸8Ø\¹p)ìÊ?¸½ÓooZ@ âÙ/£îäôŠtH;˜µìlP4¢¤FÞ?Èáã¨-?åx0=+ìE/±æÅ¿^›wö~›ÒaãF€FcŸT¨[·Ú对å=«¿9[ ®¦Ùqƒ2£¿É>Qþ3€0)Èñ'@>ò…ŸÊ{–^Ü*Û¥¡öaÀéVç¾IY Tò«ôBd ¤$(:d_yÏîÎEΕf£¢é«ÂŽŽs@I^ÿØÍ+ÓTðÖÏ2·õq,©j‰A)–,õxî-›êèq:ì:™KžÚ>µqœK\”4ŠeÎXÂài?Ïï;+Õè8Ö¾øÙÃù¦#p°ý–9§Š†{c>l.C_¸¯hÀ äåð)ÁÂ& dǦÌêÉZB=€Æ“§ä ÀÔÄÔ…4ä©ËDÓÒÓ@ÜÏRÔä5˜*³”²ZÂY“él´×2ÕÔ ·TþŽfœ-¦\±ÆUm$:0«©4‰ tpnék‘‰ Ŭ, öÓÅÃGMÒ‡æsKݪX*²udÊ(•03” h×oÁåÖHÒʼn`M4du%(Ê"EI%Çʱ4ª’.B –íÅÁi4šG%äTÅ#ú°Žn“‹u„•ZnÀk’CN‘ÏBUÖîÉ•tèÉ'žéÆ•oì8Zéˆ2/… äĤ£íˆŠV7*~ À ²XÞøü!Š>3ÿ¿dÕ ½’Nýv•Ì:…V•a†uà„Qç2šÄîr,»?ˆ&F !Q˜Áˆ+n¥æ÷çì5UéåÁ"êÒ"Y†ÖQBÐժʿwv $Ÿ>¶ñTu`cbb—­}3[N<™Úx§hNÖô4Àÿ=¿e~/kûIÝi$ÔÏëZRõëêá~f™bokYˆÉÂ˦p  §ïê gš&ôU²Áì,ÛŒ¾Ëd²^Avó–IÞVɲÇÔì´µL¡¦µŽþUíÿl kipUªŸ†Ê+…è+«¥&Ò`À÷ÉñŽïSßmûG•ïü°#qkí=_£Þ,?¼ ø%tí¢ø>@›5:´z¤¼W¥tЧå¹&s¶ ðZcÀºÖn-ÙD´ Ήj„§Õª˜V~ó»p.½Í™b èËÅÂÓ@çœ&Žþ•÷ªyáÅõá%ؼ¸#p0ÿLñÎ)@Q¦5%¿hè¨U­éÃå=«Ûˆdd‘~Àµ \^ä~X¸.Güã}È@X\pp+€F¨èÍVûï@>BëJû”:©{’[Ó*NªT„V n꽫ÿí7^‰/~È+.è Ø¤±½ÛU¤ ÃbãFÂÍ'f–´²µß¹BQp©ø×·xjp¶ˆ¹– Î[L޼†Î–¬.Ç›ŠõvN!UŽÑ3N i#éGQrÝôVPžÑƯKNÀuÀt¡p¦Ò«Ñë¾gl×®Mæüôă¡S:*ßO†®4 Z{‰t§Þ‰>œ@SZ"¹âŒBJšªÈRµŠ¼è€[1™ÂMm©T &Ò•´×¬êùëÊœ®=‘0«¡ŽÒÚ(yfxö\:À²å"@ÜÄK4˜%RÜÄ®W®Øã¯ù¸Ö—ßÙúÖÛ²âo– l lP0¯!¯ù˜à&ÛÐÖZÄMæÙÈ„®ý”o†ÒõwnøÚ†ÊQb©±åÓPfàb¥æ¤‡öÏ>ÚL=ZÏÙüH=¤€W2Ÿ®óz paù¹{/ûAA$0 躱ç3}?yï@8*nÔ[oùõI£Øý´¬m¢ž,©Å,ƒ-æ®bUŸXÀ§ƒ©£ÿú²ŒÇYb’sé°@É,ܱSÊqÈaF„ie Z¦ØßÓÎùÏ·°^žÊ!xæœ(Æ÷ÿãI@¨øÃ·{'¯|?±UÀwÆ—ëǧ;¦Ou=„¶ý>|>cþ'z Ú÷\`­„,ò>PðXáŸ×^ŠÞ/éY,¡§…ß Tð m\9 ±¨ˆ2ýnÎ\HKJŽ0Tþ é@»¢†õ¬UÞ«å…ׇ×"êÅßS®OàxMnk¿\Þ³¹} )h,WÒäD\¯k‰÷…ŒÂnQ/±ö©Œ\AÖ^Óxé*}³¼gu瑸aêù-«Wä V‘5ê6P­‰Š*ÉùAØh•,ÃË·dr«·NzS®pbK49[½\ Î›·o*ÞÜRj€ª0SPî-¢üø®VSe~úl´ö†ñõQ•âÖ55Œýˆ~}l]lqÖ—ôÇÓïÉêwº–B€â W"üöÏ„þ_³Éy@ç™=ŸëO¤xšÂhRpôbæN±³lJ“ì÷Ê«SS7ÒP#¶¸b[3…§É8š H;Û°[#Þ0YŽ¢ÌÉ`ê@û2Ë©Ppôd䘪d¯ `T@#Ðá‡4YSÈ©ÙnpV¶É#© ¯Ò­£„'Êú¯3(¥”ì3š$åÑÝZÙ'29‘E2ÄD§ÖPÅr*7WÊ4e'VI¦pTŽ…jÁ¤‘Ž‘Te”jõ]‡Ÿ¹b‘d@%ÌÔP~=¢uÇ焟'ÏK’S°.–O¡ªÐP„Jt‘V*ñ˜É>']ImL1U¼ÁúSñX#óÈrñ- ddPÇЀOšé#ßzÚL4%#´„£ÂrT;žJ„©íµü{q¶4óò m{]»¨þ÷e°’r ¨¢äã¿'èWÆçŠQuùýFù]+¿?õ÷»ŽnÓß'ÔqÇ1‚ôdß”«§§¹«ófæêþ;L8&›^lrx¢óÔáGŸ/YðÇG-€1Ã]4â# õ×6o~¿1Z? VÔLã}QwŸÑ[R×ÊKé6€VÐ z‹§bY4Xu¿ Ã€FIݹ%ÒÙBªmÍkšuSµ×ž-l?n±4Z1¥îΖQÍ‚i8ÝñnÅ"úÏ·°^\·G›Ièד¦Ù6‘¹¹´]8u §Uù8¨àw÷ 6õžÐö2GWÚ ˆD$"òòÆl¹ýóü«A®¢"ý? ä­ ~…ZùY^Ýâæ9›«ŸäOÛP‘ôÁ}ß¼¤$:In˜þgÚäóay¯’^” ^›wRV]J8â\x<³AÊ` ncƒ˜vSË{V7Úš—WҲŋ‡ËI[tq1r,ètXX߯QTÞ³ôâïÂÉΩ5NŒÂ#C¡ ÁÚDÙþŽ­Ž·d `in›PH+ì?ÊsKŸ‘¢ ð{ÚglP4 š¸EY!áL`ʱö)4Mæ‹B0X§Ó¼=YœâQ!"UjUž…¦¬¢ú»ÕÝO8ñ–®Ë6S}q“B˜÷&™‚ÎØ2\6+iÑËDË7ÀÖ Rv|lúê7ßmqÀåE—zeÀ=? y¶×q`ô¤ qÈõ~ÃQš¥^³¦;+-Ko%åëÁ¬áüúãÛ[–”|VlľBoŸó€ï+æ‡ý{Â#8QDª1Ë5ÜÿÖ”dÆvO’Ä”U4Ž[ÿ«æß]æP:þ^ «Økû§ŠÓ–÷Vþv¶þ'ý«þ͆­ïæ/Áäÿ)ª48ÖØ§ž¶tœû;Öå¯EÑbKjÁe tQõÜ@Àhÿ !@ô•ˆáÕ2²¬ÿuÇ?þFêé¤m@øÆÀÂJŸMÓk÷lw±¼WÅ /®/ÁæÅó~kO&'W]Š>œ´è[¿A»b€,Bƒòž]Ù!ßOkÉÝ€K}³vœ] 8¶H÷Z?‚ƒC+Ì|gø,÷÷†ÜßqH >»:y|-°GЛ@EGÅ·*Õ(ïYÝ9 EÖãRMàÚÐÚçõäÆõÛF}Øš¾ÓfÐcƒFPñwŒÖÊRöWH¹5)MJ#ÜTå‡Ò¢è)cMÛž·™Ê3Ü·õé2átYh®óeÊ—yJt!ðNÄäö¼'÷¶¾OülÃâc@ØŸâj?C2ð þWî‰aûå@ÚîØB“±³¹9#ÎÊc5+ ñ¬”€Œ&Q LA;@š(Õ¢ Sa<#ऌ€#Ï0e›iƒr¥„ÓpÀqÌ~ˆ&3K)kûT”n ý&µâ¶O½ñ“'·éZKç)r SØ|T…œb)%3…A4 ‰B¤Š¯4NüXG°}ºxøƒ5ÂLmt!vÝ[åKlý…£F¢„g±ÉÉNí­ Â ¥Ýr†BÌ1Ë›bAÖ duñRCƘÑý|-œœ(R?®¤Ë éL‡er1\ˆ7¹¹Ô›e¼1ežíˆµ{ÉÀò®Íf‰d™ý·³ß•þK¿§|bý>S²çÎjÖCn]Ô”u:‚Ð2éT¢Š+Ãø÷À‰2÷ï;MÑzk6SÀçáú{áÙŒL¡h$¨Ñ‡ýžT¢ÓS+©ò½/ºöý¿¼¬:þ³¼n9P_nôtwîú^ì2hß²kÛ¶§ólólq<[N mÃJÂÐ[žq½û' …ª,«¥wųlwg>•|jøþø]ñYîW]ó–Ú/µŒ5:‘Y9…x€Æ©3g´ÐMBF¢TlâbW‹æí&ÄT%ZSšÑ8v&¤ i¤?þ­[co7ja¥iRœ4ð©8*h^7@ ¨x¯ï^ êÐô 1íŠmîŽSdYZ’˜·ú´ñù [‰5„ÿùþU(yÅÖ¶8È+) Ìy0½ ôY TmS1®Ö&@("ˆa·ÿ¸‡ën½ï4PµbDnÍ&@ƒœj¹-Z”÷jxáÅõᵈzqGÀtÊÔÒ·¥öÚ-—8üÊ{Ve‡HÛJ¹Àåǯ%; ØKäçm'ð­!WúÂK¬Ýéþߊzˆ¦Ñ-å=›;ö€_`o u<Ø7 –›ÏÒ·è9[·Ô6Ë2¶ƒrhàÜZ©Œçb•ô°¿bã„–Fˆ(LûóãòZ­Ô@t©Û+m¦º¬3©·¾òl&…XS3Ҝ׃Ε@šå“¼u‘¯'{-9ìÕéYàÐ…íóOõêܵ¦ÅZà‰G¦Œyt #ÖêndÇÐ÷qŠÅ¡¤!€±ò¯BE€+Úh¼´‚)ÑÄ!¤!@cH=@Þ)Ϧ)€0)ÎÇØvd¬0ÞpÊLޱ`Š5i%MfÊ8Fˆ±£s‹§ÃŽ'î÷óÌ5ýŸr ßžYNi˜\‹e´)Dš®5”ÃþàÒ ½©‰~ïîÊàí”Æ–JÚbŸ*Š5a¬œÐJR[H•ëEmuU¬£Š”=Ô \_¹†vWFŒ¨ÖCn fÖHõ}ž¹¦^—¬½V½>T¥œ’ÁÆKzËÍi”ž°&4J7ÞòÝ Xj”t´´ŠÞ¶Z-Ñ€0X)ô‚Zùû×üžò­è÷àˆà¿s®üdJ*- Ëä"݉'*D£ú»æÊ@~ý;hÆ÷µß‹Ž¸K×}_z¢3]#BUk'ÿ>“ì5ôÄšv<ÓOlÙ÷Q°/Å+ß&¬¬¼áðɉÃç¾ا8Ðæ5hÊðäþ§YÍÝøv>0Óúá’ÿkt-èY¹C`žM2ÅE€;Ë)Ô? ÊýGmåÄšîþ¥³€ GUK­ÓýÎØFj´æë-¤”d}‡ÔóÜ~©fšå’µƒz²vj–N2WoåT-”„Y'Y˜jõhIu7ºÖâéɢɡoíäÖQ½E³¬àÇÕŸ»ãkÇeŠ<}[èœçâF-¬bÒŠ~I9jæW·,üûŒ¼¯Ñuˆ5ŽÑÒð’GÇ3B_èùvàí›ÿ?~oùü„m ©Qq`ß*·}\μvêÂTÍYs»@"î‘#«Sš)ØÇ§¼WÁ /ʯ‚Í‹;W÷ä%_ÎVÊ6 ÖªÕ¬Pì'æÜúøhk:Pj \ÚzmÇ…v€-^ê[ò(þ~Ð}î|ÿôéãw¦¼géEyãì§öžnøüa>l>DÎ:UÞ³ºsPüÁsOoËŠ×/j“üP|6þëñEéë“l*Cû–KùͶº´m2ëÜ·2+™ç’Ã^ª²ŽShž-¢Ì‚Ƴ¦Ü[O=+׌¡ëlÿ̃™k®"Þ¯ðq…Æ@þÁ û8®Zjc/ˆûYпԊ«À€ä°2ïØÂg¬¤@#¶BK—w¦í«Ÿ1Û^He£ó 4yµ<_!Ôš±6Q–á&¯f 7a 8„ã<:#èh¸B­Ífå $WH&Çé÷àÙp\¿¦ý›Jä=-§3‹è†TMÁÖtûϯŒúà„–ö½ë2ÛCgaälΖA£¥PmkU¯gçÌAš/Ç: ‘ŒHeVLö¾c$#VLÙîÚuÀ-žëh”Ô›)ÇT/Oi•T-£rSd Úx²Õ‘ƒ:@±d·æ×ì[‡:^|Zù>à#Í|Æ™ôÃÐN_ÆÀ3ãÜÌGw½rB™[Q]ojK®B õQ,™ë¸ÒÓ¨$äÖZ^NÁ³Óœ¿GUlj:µ…TWbÂ4‰Í‘H‡Y.¾­üÙgñG€_lKÛݰGÙ¨½Ð(1ö¾ŸÑkêO€¯ÝO6甡ä@-CàëRÖò¾ýõ­èªåÕdÈ~TNíú5ì·ŸLàd›m}Q-À?ØoLàã€Ïfs˜y³d2ËaÙ”Xš¢ŒG·«|௶¤rpå—ÖžÊÂÿÿ¾…ë—9Üîó%ë3v\|×=ùñÂ9€ïcÝBª¯Âëÿ”<ø¡Ò÷ï›×yѰš@ÕyUgVNæ=óSòçá¥ï÷o…ÍÏ1®¤ódÞŬ—Ÿ?Í6¿.@å_"ÖÕjI%¡ÂÍ/Yä)8t5eË@ÃâjÕ⢀C"#ëu)ï³÷‹ëë`ó⎀oSŒ¯îA×QUº$5¼ùñþjÈÇéUùp¥B¶ï…-€ý ©~I |LpX“—XóÂâ ÓãB !èߨîäCñ› ÚK賩~uËN¬q8…u;µe:+3J-?0”(h¡ÿe-QÐ=ë¬WÜòéIq§)pøñÜ+ôøƒ­KIjãëᬰSnÊùYZõ´Õ¾Íøª[‹À‹±ž|ûàÀ˜µô|@jg›®Œ›ÃM—ÜrIõ?åÕŽ-d-˜V(óam›âRWK˱Àl2»a†ÝgÖLyµ<_Î0G¤//àeÂYq‹\ZÙGŒ†Rq®iÏÞQÖ5U)1€v®ë+tÆ €)d*Ú˜L†ŒP# ÙûŒÀSônñt¦Ì”LjÕÉį„,± @ˆájØ?rg!T¿…ˆÒ®OCFŸ‘XãVÎuÎÊ) áÙaæ ŒpU”oŠ‘kº²åOFà8"øu¤P°zE[:@ÄIr‘FüiD r ÑË­”¶jöéÖS@ÁC–¹ßŽGläW?kÀ€€É@@OŸ±Uô2bM%Òºê-”r¬¢SÊ TB+ÔU•îo.Ygžˆ5ãýB_Z°[S¬i¿ÅZªþ^ÙL,q–JÅ/3B[.Д®R)÷.­¸4ü’ è‘ÜûËn1À{1sƼ± ˜öÍ;þß—€_ZÀA3ÓN¦ë¿¡¨•¢¨ó„~þÎVwWE™‘¨s¶°Ë„ªìxÆûªJ¬ñù¨ŠGå>»|EO¥„xLZBï¤îöOô 6õwÉÃøÕ²g啦(s_>ÀÁ•[⦲)ÈŒJ5cÉ6¾s‰WÚ•µ4€+¿Œáÿ®çÁÛSÙù»–Aܘ"Nw%\·ÌÁx¾ú2gež±,Á½BÎç“÷>Z{ @;¡„ÌB_þøé‹Ê>Û è  À¦@Q½ÂnÅ7s¾ÿ.ø”˜øÂ>iQñÀÖÆa¶n®lÎyúüÝÚsÌÍÂÑT†=B{mîdŽõ­_Þgí…eƒ—`ó⎀)Ïìç«‹»u,r³.-ïY¹B>.Ÿ’ÎWв>¿°F;.–|„}ܲBÀ·Äü‘_•òž¥ÿ8lÅÛÂE@N¢©4ñÖ‡ó¢l?“½$‰RÀÑ·ß´FÓ-+éúVJ0´vòbÕÒ™ižÍlme´˜®snÛã*ÍŠåL¤¸Ìƒ[>K!дý8!À-g|œ-¨š‚F!(T«§s›(Ÿf·«!Yý×®L |ËØýû 3v çÝßèÔ¤õTû&Ú†Ò,#èþƒœÆ3E'¶x w !9`nDꎗìÃX¦š©›òy7… ìµGrSf¥ÓåUhϬ€ŽèšNÑ€¸ß´{ÊYÝ'µÄ,-×*Ð5rM81HÃ1(§sä«:Ëgªa½g“)úó;‘éB´î¼Ã-ÛB¼Î}„è} t †1唢$R f²)Ê5½åÐoÏ­º*!ÆË "ĽÂQ#nÕr¥•”gª!ý qÄ4¾½é'çÒ Õɉ¶1¬œ€[DU¢M!¾8Ag¹×>Ú2(ê\¼Þ’ƒÅ‘B 0ÃGðUÀ™Ï+~N¿F©DWÒñV^¥,@;_gå¥Z*À‰CõwÀ•i¼ÿîy ª³ETS¬*ĸ2ަàâJ9¶ßɾÉÁ§^>[ÿqÄ7¯“=ô¹€+Ïß¶ô]¨„œÏVŸý¦=ÀÌÀwÅ—+ã>›(>p¨y¼ÎÆ*%P‰IÕê½Î0/þJÖœf5w³]{VŠ!iç¡Þ Ríþã|qý gM+™ÐýEÄYí~%§Ê‡É€Aò‚é~ò€ž¨q&¤ôVCÌr׎©Y ¯GìpÂÊ•Èã .Í2zýS#œ-©Æ6Ó[µ¤êVÚ©=•Çh5nïJ|•Öžz}¸³‚^Ÿ€d0ůŒ=Ø@bŠOÆ{@àçcžk¿T™taòeÈ;Á¿…ŽBSÑå²ï÷o. ý4¸rÄ]€íûé’¡À•¢k»Î/hcT’OÞø¸ruÇBG®öÚ'L<í›_Þgë…eƒ—`ó⎀ÙO´ûè¤ÚŽ‘R´ôOjMFédæú]êØ>s,(ÉB j\!ÉK¬yq}Ë…g„3€üž#Qzª¼gsçÀzdC… ±@!€co÷+?ÔÌ — 6EIâA¹U:Ø=´Oa'N`ðUþ@]Ú¸F¥šB¨J–íæFMÍ€óÉæñÁWÙÞ@(ªD\g‹×Á-;Wœ¼Øæ\ítx¨ë£÷Lhô•ÿõ¦¹ò*ÀôŽy™0P;O®€#9в-‡)ФÌâÉ«Ôìµ\ä²ýœ­«Ba4©¯#öb4ó¨$€B9}oc”öOƒr·‚ʱÎJ(íúЊŒaÊ)'µ½¾C׎ÙÞ™€bã©­Œ€ãDŒB¬ð¬0M)f Ú¢øù)Ê·G¥f¸°\²](˜XÛXDÛ[€)Ëlvþ›}V½ ˜7ú^5 ×~'|Þ’ƒYBE#†4¥–Ò‚«{< N³²²ë[ý}õ¦Ou”ˆ³ZɃf©Uˆ%nU ižy§S²íÖ¾’ >®WÎq%ÛŠG~Éü5˜±ä…ï’jýùéÑ¥@÷äÞ_vŽúÚýA¨™k.DWmæ„;Ÿ'ìÚPU²•tn¶ÛíÎz¬cÊý@ýœb±œÈÕý…F{mÝŒšª]ÔÏCw"?àgz T–€‘ƒ„z¢†•”¦ˆ2*×4b‹+­œVž³Û¸‚ëú 2ã|8AFª—FT¹Žïœ çž04*ínœó¬HcëìºNîί4^i Âù€¬ €éð‚†»{~“»fÖ‚·¼÷{·7>^˜#bqXÐÍÏçß?›ùGÿ¦@è£Á´B`ãx¸äg ý·ìi} >ç”¶yŽH»®FÄœfòñý;¼ðBo›wOüj©TqwUDÿR©Bµå=+àêÜüAW~òG%äôBÌA–°Ö@`±_HЦòžÿt\é›ñeÚ*ÀB­w_ª/¯–PsxyÏ꿼_5_E[—‹u‹ý€’—ç츯ͣµt*„·Ö•9;Íøúl·h½M5É]üÁ“[ÝÆxjûs\Máä©íÔØ&ʈ‹?,žVò6`þÂô‹é ÀÖ4×îÓ(Úqµ¶<ЬŸÜ’ÉZ:9Ä­\&µbf<üŸÆÓYr瀆ۇ€0•È«q溿RZ d¨™Þ1m"ãé„c'öd¦ØYÎäÚŽ!`jÂJ˜ 9¼¦€#Ý€8W<@ÆòN9A¾Ê”vd­b%È;¥54E#ò8ä6žšý¶šÎf-§t6iˆûÙq¤ÒJìf–R! H}浯~?Bv6Ðôµ_œèúýjVON|rB”]ZÙÏZãŠ+þí*„‘J,ñï™g–)Š-OÛ©e |>BC}{$W>q‚FUÖa-¡œ`ã°!ù8šÅ…–QÅŠÒ—RÀ÷ßf€ßæå~ÙZ‰‚šÍ–ÀÚG5¥ËZãQ5ÓMJ˜[rû8+Ê8ñ¥uJfœ¶~ešÞ"ÚÞ@üÕ’£‰§†)ŸœxüìZ ÿ½C¾é™ˆ›˜RðÊô‹ë®µNÿžòrªЦI‡- _»ŸÝ':šáwiÈÐÓ—^p¥ž3áïÜæ«­‹3Ñ®µ}r xi÷ 7-µÐxîCH$_9µÖzhs–~F¬ll—¤PKàÅg~ÐnÀT‘¼çóCYÚ=¹2Ëô#~äqÀ·grâˆ$ ñ¬W”·Þ\˨F€‘Cî>¿]ížä0;Rµ¤Â– '}̶ Í‘¤)Ín\3éÄg”3Ç˲óåZNaõ’•€ß¤É™?@(¦f)¨ØrçÙQÑ€03r`ಟG¦‘u5È[[#@½1 Šë$ݾóü·¡ø²%²°;W³èRî> ä§À1á‰@¥‰!«*ß[úþ9=óûd Î~wù›SŸ]Åvê? ð+ñ)°•÷ÙyáÅõá%ؼ¸£°õ×£Á«ý€à»ƒC5.D޹…Œ€[EîÆ¢¢kçk­óá@PRà}Á«€à&þËC»•÷jyñoÁdÊWžŠ|-Ëò/5sª¬õCyÏê¿ 9=ºí. »A­zßΤz Ÿ‹ÚØÚ¿G‡®»}ÇÑ”dÂ!¤»{нAJ­o9ú̵²î_ZظzŠ’‰Žá™WîË vFlÛ±wðÅ…ö.pýs»7½÷k û…ºíHÉ4%À²ÉèÇNšÂ’ÆHŽF,9Ž9¶Ðdf%Êß|“‚,žqL±æ8ƬšÂ@®Xsl‘34¢Œë¿äÕ¬l@ȲτT…ÈjŨ4n u³] k’cÚÂæÍˆ/ ä` 5u…#cYiZ¹0Sþž&˜Ìˆ2Ìa­¤˜,Œ³úækX¹ƒÃÕmR+àÜéÿ·>AG°mÿåáQßë-†ÜÊË[<3ó4“³"HÝN%æŒß³b9åÄœbuæŠLõ:á„ W€©—ÐS 9ç㩘ò{±Î³m°¬,?؆”„‚âÝáçô&`ªeúÒ4W+„'è<½V[Jùï‡NJ<}ë®Bñì5Ѥ(ùŒ·‚k†ì²õ`Øü,°®ãš9›Ï—]ìŸnvYü?æ™wàí@Às~Ëù̮¥ª²KÉ’Ó²Ú8¸RLÉrs)/0(hUå??NÌ9F2bÎ@øóy*ß;[ ÏåÚ_3˜²QêîLøyØ^½²ëÄÞÃ~Ù±°UsÜm­ |ï»>(& =L÷è³Ä„Œê’>v"n<‚)¶ÄM¦ÄÀ=¤ÐËôùêÆ .=‘å¬àºµ°ÏYi7GìyZ![Lâ„'ùü˶ž7|y4àóçË+—H‡#/^ú'‹ò7ülýrb¢oaø.èB»Eïí²\Û:ÎýçñïBÁ1Ëм-@a\Ñ’‚A@¥!Û¢‹€í#*{Þ/33û—+ô’̶ç>zômÞtØý€(‹fQ.ï³ò‹ëÃkõ⎂Éßâë HÅŽ£öÍå7â»­÷ì®=™_3s$ð ïê€õ^bÍ‹›ƒi¢©1٠ȯÐytyÏæ¿GÔŸ[2úè^¯üjóãÐÜ”l)Í"çœ=VVpâKË8âÄšÑz%guÄšÞâuÝl5CvQK4k—J€0+Ý8¡¡< øtÛǼ§€yí]æ4«\cUÇi@›Ómm-é,šµåÚz ¤4Ñ>L^`Ž8&ò*ù;š¬Y7MM¸"Y;F=15šF¤qbm4\jÅ2׸íË•qÂ@2Ußþ©b9LI&µrôRÙø<³ Ь£\‡9xše§)ãÇð 5a¼<  ñ|\å¬'kÇ%9®”@£ë”ô76NáA¡€Ù\±Cû©‚Dò•3ÁÊÛ(©ó㦢°t!ÖÔ 5~ÝÒNÙlŠ…S#Ö¸ÒLžÁ¬”аÜJêB¬9+ÂŒÊGNÜÈïÊOË€‚óÅòû–¬ƒ­¡€8_X!¾­ \¼Ô•XS•h. M~¼LAQ¨ñù©Äžn>»á¢ØãÊ6®(s«LÓ•h¥|]ÙqìSäXû[À¢% Ž/{ X°=`60qäÔác_ì[pôƒ¥±¦þ®™i¥šj U‰5Ý}¦=Ô–O× 5Ãu°ÎÙê­Y=ÙúrBUµx-›jö£bµ÷då÷)å¾h´Î«–|£užoo´°®%b'@ˆÉD)@žžé~Ÿ:˧’í§·2z*;à+5kMÍlc¯5 ¦VBp½,2Ï¡ÿî-¨üÏÒà©Dä\êÀ,­·šÕ¦e¤é­¡·ß’Ê`~&þýÝ×4b-ä¹™'º,¼ Äš‚/{~bû®'Ð÷tÇg†.¾õñþ+àÏ5¾W|ïóó®^ÍŸ1L{òéI)Ú~LJð‹—Xóâ߯‚Í‹; û2OíÛº°›¥Ã%1@½Œƒš\úûŽoƒ#©¤H;˜µìl` û˜¬¡½*9R‘d‘›°˜yqg#«$û›ÌB KÎz5¨ƒÚ³ê”÷¬þ»(²½™ñdz@qÅÙ›ÜX¢-}h@úún¿^{¨Ñ² H×ÂÜ•Ç÷[€òÉX3xÖšbÉ+«5”Æ B$³ìQ'‹X{ÏÖÔ φ\)ÞÊzzúÜ×€>{è›tjÝý¾v~âåYØÈ«éG\YÆ %­SO| ±Ï¹e’gâ\Ÿåd@×ȳ±—)Â8Er¡£i ©Hqòj¦C{³™RŒÅëŒØbãÒpF¹‘ÅšºÚ~ˆ)Úœç'¯––KVö¾àöN±ž°ãÛ‡I;4b·’Šû•ó‰áS6±©ƒPpdJ¿ÊY€i³jJ:q?SÖiÙk$8;xÚ;¿¹‚mé€Qï^ÇÊ ç¬+Íê¬Àâûi׳‘¨u&>4bÊ“"MyéRfÀ¬¢Q¼õ”GŽFÒ éS h‚eeáPåú €¹ªy‚Ï `”o—€1l$íªÖAQÌññ\3Ô¸BÍHô¬ªŠò”&ÉÉNÄeö{À:¾^ÊvJF\ᔂ™EŸÛ󷼿k,°íÑD²3èp¢ËøõAî{µw„¶ÞŽäX ˜Oø®tm©ò%…È3¹ÿuhÑH×g¤éªn-åî-Ýáê¬ óduWï+½1ŒeÐ9·»Zaå§Vdð HN”yüêã–Ô£F%[G#ùkéSÀö˜ýWë}@Àbßüà€ð¨˜*~ǬŸŒ¨’Ç1¥UiÊ3n5*Íä±7b•ä„©"؈/S¾QëÍX;yi‚©j‚ýÆÎçúãjÊ4Í¢©h߯²ñoUg\]®äs¶är%·¤ |Sk[=@Ü´"à`w 0àáZÍŸBò>ÚÚýôí›Ï«EÏv}c!°¢Ù’]k¾Žž¹hß»íöÿoÍ¢éŸÀ5ß¼õWM€#WZg¨þ~Å×cl€y‘ ¾:ëç…ÍR+›‹ òš]ûÇ ,)ï³ð‹²Á«`ó⎂¹X<ëãØW:tüÄÚ²tGî7i á8y[¨Tx-¤kÅ!^bÍ‹[ƒø„ÐÂô’öZ29úÊe±üyqSfnû!­@cêM­”X:±Æ¡)Ç”–<åµP•+=؃o©J2ÏG`ºë¸2ƒ‡¯³¬«m7åÊ­Í?°òZ6Ž«rιD+U¬ß8FÚ¾líŠç`àGK¢sÇßê6­?ÐñÅ»‡µý GHÕ0 aDƲ¶ON˜ÜâÉ”id¬f´í„³æù¬¼ÀÇÊX‹(Wš‘fÕ”ï³w“vè,¨ªÑR®Å­›Ìj©k3ÅÎ’WÛ.Ðd@œëó­0PËn£ñdŠœáœàDDòÌ4ÞÊŽ#M¤ìøÂ9’È4¦´c3áÄ öG;6ɤ“ôSIÒTi4œí'¯fŠ5©·žê·)Ãe”èܪ^'}”l3í{6ІŒ€áD1‰C]Ê ôÄ /P³Û”¶Iõsnϯ0åºâ¥Êõhmf›h ǯ(Ê+Gÿʾ›ƒúø?8 ¦–h(¯9Tb)­Œm¦n‰µÚ±¦¶¥rbMmU²ÈTbïǤÛÓ7mÝ5x²Þ8Ç3/ ýçN]r`ÎòI÷Iê?;¹Ö(WÅ›ù„Ï~¡H¯peáþBUƒEW‡.S-]³ª^Æ6RM1¦| j¦œîsV.°M¯ ã-«F…šz_qQðñãðò~ÿ0”©¨D/¿?9¯ƒQÁ¦ý†s ¿?‘¯…YØÅl@¦’ßð, …ò;·|ò¬4½òÌ`Ùt«4£iŒX+k{&WvI%?9×òͨ,óþo,5pßZê®Ýóú¥î[DåáÈÖËs¹CÙ )ù\ÚQ™’/yÇ'"qÓÊÀƒÝSt½ ðµ@°Ïû ÝjÜøñÊŠ eÁ?lüëÆÿ·‚?çðçñkòˆpH?™½*m4\ÚF¥š‡ã À´U<í³²¼gï…7¯‚Í‹; '–¤…8d|”ÓæB vAE­þõÇÍÜ“wèòw@áxK¼o€ õB¾¯T0Ï7w÷™]Þ«âÅ¿9~y³»ÙYÉW65 «oŽ™˜‚LI³å=»ÿŒÙkttìÝ•;%Â[-wü+¬m}aq«Ê4#´0pž½dÈØ*}'Å Hûö\â•íÀkgþúi"˜IäÈ£ÀS>õâäŽË_â~…hR”Wœøâ:3N‰û™bÌqÌvY'µÐpF´q¥#šØvÜ Ê³Ï8FrH.Ûeº?Κ¶Ðp@®íèFrôí¢¬Ç“ä0…˜¼Ú±…¬Õo/űí™Nj¥Pv³åïå €†Ó0ö¹©+Úë•il<ÎhÜrÊ 7öZ#ê4e›Ðx2ŽŽt¥xªÅT¡×Î a 6—’+¦ë£ÎâË N«P‰XNk‰>KËÕâÉ•jž²Ö”ÏyÒ[t`ùÑö{á9ÀiuHÓw>+„7ÿ³>+ƒö¦ÆæÁBž›’u†óR³ ‚ÃEÁæ^qçb•5ŒS¸¶psñJàâš ¯¤]}Ѱ þÿ´ýŽJ:š쟳gð¡" ë«}w,j¦Ô ©zD·~ªbÐYY¦­£!ÑXRéÜúª•5p¢‰}ÊÛ[]ï:›Svû\Ýߤ˜s—ñ¨*l9¡çœÕæ:Ž2 —L?çùŒ8ôTzà2…hä–QÛòl{.àhëXd·Aù™Cû¦=B]ý8×Ï$S‰¯,FœÑ8VRPºr\,«$)ïÆÝ\¶šžðÓ—%ܬRMÈ&MÉIV¾€8v^N«r‹e ZYÒ‚ªžÿ/Îßu|1`ž÷éÝ›Z>}:Ÿ¬>|qÇÁ¤¢ï>qÃÍÏÓžùöñ‹/»›oßôÇi`w›£ã6ÜÒÿ3ÿ·a{ØvÔÚÈ>YpOV $  J˜T<r¸òÀ™ö·œ˜‚ÅW}ÐêBÝä®™·~\/¼ø;àU°yqGÁ§¿)Ø×°‡I×c"ü…¿‚Âz!PШ¸Vî½@pPÀ;!9^bÍ‹Û Ó£¦ŠâÚkšMÙÛ²tÛáˆúã˜>{Í6½ÿò¦#£uJSbp¥×Íe°iP˜Ê4£5ë&³ßTeú®fg-¢‘n2\GpR¬my;qôÎ `Zè3§>è  kThô íóÒ€¯µl3Á¯•ð–NâJ3ö?Ç1k'Æ £á$Wîω5’c^Î):N„±ã0" S8±¦®3k%U¬¦œ(St1ÜÊÓÔ”¹) :¦(Þ X)ߊ[4…$ö9y†ÇªúYBÍL“cØ'4žÎ’ÓÌ¡3õ™mœx£ñd v4\êFÃØºÑp¦ÿcGfÄ!§ç˜qR5[ƒ§~y@"#lT¥‹_çÜžé™Xã³’Mêîê/98±Æ^Û†ÛdÇç@QpIhÁ8F¬9:¾úúšgA'}}ƒ¿LM þz‹)û]¸”5pÂ,A˜.é~gjf'²ù~ÎÖUcûæéŠ)Eçš_Žùäì|«¦L{óýg~´ (Z`™X¼jæY“æÍF5Lƽ=éÌý@Í”ê«V¦ÐG§HÓ—Pô1–I0å—ú{U³Éœ‰Sn5f©©¥ †rU¡¦Þ/¸bÎblcÆ£KÚ:þ¹1 ŽÍ[8ê¬d4»Z&SÐñùpb[oµì7~ä÷)eþëtÛ×Ä:抄™( à©€%î²É±fT®qŠÑd,sM¯Ó”kŠ‚k“QñÆ•`JV[wgE·D ÙΙdž Ÿ·‹òî$SŽÑ‰Úó|b} Z äm.Úž³(L.¹’°yº}$`zU”|F•÷l½ðâÆà%ؼ¸£`^/ì÷¹Ðgåoé@áð³EÜþãØS¥ÓöA@VÅüM—û~“}¢ü¦¿û þ ÿÞ‹;ãnaœöR>&ËÒoå=©ÿlÇ··L›v>Dü:¶ÚRƒN“Óƒ£ÁZi((¸*#t!߀¾TÀ™ð0ZPK+EЬ\ü|¸’ÆøËÇcøË-ó›n>Ô½«Òo-Ö2å¥ÇFõ:4:P{ iϘThê&Dé-–ò|9C³€ÒpF‰s}æ‘qLh„™0)Åh<¦±Ì4¦4#c¥Õ¼ ”e±ù¾'vb¥LQ&-g„•ÖêIrO?Ö«)À8¸Ò•hÄ Ë †ëÇú€)éx–û\Ÿxb'a<#èØ¨¦&Âx! ar·˜j«±d iÈæ+újï;ŽÉß“µŒnc­¦˜!YÝÎ3 × ùV-£ z“ŽzÂÅ•3¼îÍË ÔÏÓA—`$ìœ?/égÊZ(öµt*ŒèJù'y#àÿ‰oMÿtÀÿ߯¾…F¸D±l1þ»’º³ß…Þ¢@×bªSÔµ×®sÝ|Yt~¬AYg ®l]l-w3w¿°ë];ðçØÝG÷—] z.îÚx§Ö§í^»ŽóŸËZ=‹¥A!§)í”ûÆ:çl<ãûšõ[±Ôª¿W®|Õ)Μˆ8NT1¥ž–¥§ü¾yÛ''¤Œ–Q•à2Œ«Z9„›³rP³zꈯ³úUçQ X‰“x9sf›Z¡fßÊa8g˜—zõ+ãÊïØ¾ _œ€j wé-œÎI£5ÑõS¿½F ±ý8¤^΄‘˯´™{«ªÞ*Z6âÍSŽ2וÈÓ¬¯F"«lD™g‚P›§³µ¶¬ãº'øHØrÿCUáÊJKR@\ScLð×±F?ò.N/}ü[Ås¦W¿œ< øòù•?>þ×ï¿‚`›ÿ§¡2à×ÁìëÛÈš›zùÀvÕ^dk˜‹Ä|ãË{–^xqcðZD½¸£¾%×çâeà°-uÏž@ã«1rËç¿V>µ|oCë=Š,ô.[®-9Û°Ov4¶[†5‹zf ~â…ò^/þk(Š.¹»Ð¸˜zéçóV úÔÊë«>³üŽúeÜúø^0äívjIÀ^Eð¹À¬¡ƒºÝÆèCÆõHÄ2¹ˆ• (CÉÀMOWºàb5ó{ŒCvT„ãrcq+wù(î¬Ë I[’kÚ"œÈX9ž4h<+#„³ÎæO™=nóÖϦ咶ó,5¶= —•p–Y,Å!ô¦€#k]sƸRÎh%c™B+Ñh8×y¹'ÊäÕŒˆãD o%9ÌÜ*¯¶’¬É g2–dª".U±’Æ(ئhÐ5Ò¯4E³z:ޱÖPq®y1+epìÁ^s„Á4 Óå•ÌR«”+Ä0«ªª™lÙü¹uT!ðˆýÐ s{h úÌ´ç×íD‘[DxMG4¬š®åÎD†Ñzi´†ª "Ѭe²Ì,u½â·äÛE—Û~ëBLC}F‘@@Ÿ`@ìdzŒY@Ý[Y]æeÌä &£5Õ ¸ãçs²ï‰FgÆ[¥Äe;ÞšWj3¢ÉF Ýw‘ÖjÇ?WœššD?½¬ÒdÀ÷Ñ€ŸGÝ­Ëjã`ª‚ÌM†>¬]Ôx­ŸJk«Öª©|ê±¼BÉ@SZR 6Í«dîñ6cµÔ€¢šÕ–}ÏšÕS!$ÕÏNg ¼Fa,'0ZFùy²õE"ù‚îvs>êyéæ Xß³]°uÇcìOA!þrØCºq=X?K³.j9t#VMN¼Ì’  ØþÒÇlÿÒ,£Zù#ìÄg„x€6—>zñÆ,§Æ2’$>#h\Yçs}׉T!ÄÅ€\Iö¡V×ùšúÌk¿]ÄMËkìøwÐà[ ìËo[÷m ‘)A˜qóó¹QHû¥ ò ÀÞÕö§í€_¡ÿp¿Šßñÿ­ Ï"Yö¬[mûH ë×¼ÄÌ@~pþØüC@­îQiFõMUÅz^üKà%ؼ¸£pM.¸aöo8•µm%ÐplMÿØ«@ÀÿJÁ-o}ü¼u–NÙ ¬»rMÿ?Ú«âÀ¯¡y‹ßçå}ö^üWQ2Èú¸å)àÜOio¤Îª ZZåWÀiÀ…€.å=»?èŸ9¹Ö©ÀµžuÖÌ»'Ä5­Ö°J¯7pp«h7 ni".‘î¤g:†…ÐË—”l¬[n%u~ðµ7´Þc{H÷­ðs2°=ö×qûýWc^~xæN pI@vàë±ÅÛ:ikMù^R™ÖMŽ÷³¶P€­+ „bRG:zÒ€0ÀÔ…Þ8z²u¿ÐÌ@°mÿù•Qßë-}Ί¡Ò3µ±ªóûF"®´l7zPMã€ÂÀ¢…@^Ÿ¤ €xyÈ,Á :Vh¤q<óŒÂnÚN~]óÖP%?SÜh„Lʧî;³ ˜÷ÝœŒ…–_” ì °ú}Œ~⃣¦]HÏÊíW¹_±xªVDCv›ŽØr&ôøüYšFÀ÷ç÷÷Ùl*¡¨”¿?’ >®W¾:§d2ÊEÚ¼ŒÙh.D])ãºÍhƒ»Ì4Q8FúÒý_,ÚFÕL5ãvÆVc÷­¤öåò)ûK€ôD)šä× 4ïfÚBË–™¦)âL=n†87±¬6žQFÓd‘Z4¥[iàJ2R…4ºµvRý*° 5®Àâo|^ç›àH—G¦‡g®X¹ ôàæ‹Uÿã£69„v˜ý=WäªXCØt+Gº9¼øý”“Óú§?µï¬übY;*aÍß?Ûi‚t—ã,àËíSÉOZ#}8¥'_’LGÚ×Òeû[ÒtÀQ‰—VŽÖŽ·¥³€<˜~@ëò@ù-G}@zCZ.= ÐWä:åƒÒÏ@i,DØ”@Ÿˆ" í‰±=Æ—÷ªxáEÙൈzqGÁ'MŒôµ×¶w¢ý6´ ɱr€#ÈY›÷Kæï€ïßûü|¼Äš„&B¶ð öZ¾(`syÏê¿{ë?¦ß¥{:䑿§cø·±-O³.•­µ³¬Ð¬RJ&›Úòé:¯ÍƒYá4% )£®‘=€¦->Sté ðʉ§*¿³ø£ÕÚñ)‘@÷e·ôÿš:/ðuÖÚ)×Öˆ0O?ÒhÿiAüGÿ:ê^p×l×ò-3ѹìÁ©¬A·”º“L¨™jªµ\FhJT뤳eR%è”ûÚÂiläÖYžáèœM§YgÝg£ylU‰5N€1_'|§ÓöpQ6j <çŒ6íþ¥¬ŸzþÆí81ll5vnµU Ø­ô²‡‰}ö—ÖÒ‰©î,ƶPnµdÛy²Xò,7ÍòiÌZódÍdŸ­’œÀâÛ—–¦Z9=´“Š›Qæšçú 5§ì9üŒržÛI$äµ,Þ ˜²^nºô@hÒ–´j€ÿñ1mc7aõ>;Ükyùk—'^^œXçZÖÛÞ¹ýãËÓå©`Ͷ'[OÅ'uòÏÕËõrÎæm µ'G̬¤/¾6èÒjàòŸ)æò¯ô9÷p®Ã¥}g>R·\|éT1pºó¹)#€“–Ôk'\|&ëN}~nÍÉZÀÙOÓÌ©Ë \z> ¸<#óò¥×€Œ×¯~œ¹Èú6×ÿZ_ ïݼµ¹_E÷·(ü°õ·ž(I¤7+a›0SÈÌvßá>ÏEþbà ø|ÈŒÐí@„v…q@…ôðØ ýQ4™L& pVI•üu€Íâ(°Zoq½ðâo‚WÁæÅ…’B{¶¥ضëȹ5¿5»U®V§P!5Tˆ,¼ùq3çÎOPø”5±`¹8lz4„_„bõò>k/þë°™Sì‘@jþù×R2€ÈâŠïE6‚‚}Bö•÷ìþý(ÚóÚ÷»k–iߘôŠÏþðõø"€ôõI6¥Ý̈:åEm‰ä+¹@o:IT2¤Ýú_¥s¶†iÙZÌÊÅ-lß¼?+pq8pd趯ÏEŒûsd5 VI窿Â,—ŒˆRiŠS³2rzHQm­¦³Xö™ÔB{×YÉÆlZû'À2ÏôDW˜q%›F¸1‚J³vr"×0+(§¿äÕÌŠÊKÈX:›YA9AÇ•iLiFÃi˜ò‰¢d’€Œekòj2EÎHŽ’õ6…‚j+èù{ìįL„€t±KÎrV¢±q™µ”×%0² 0EŠýEpdJ¿ÒSl?nAeå¦ B*à8f?B“Ó[>_’q€tÒžBS€sCœl±Ÿ.éüàD 4K°K+¨»–ÏëY4 ĮůD(®Ø^—úÙ¶Âò€ØðŸTÅÿ7Àô‘ô€)Æ%•}ÜZª•rž­žE ,KÞvdoþu×T`Óšßêl¿H[yiè¥`î¶„¨OFA÷Ç f#±™êÚ:ÝY8Uh¥úy­ß® >g%˜q«¥J´ñð~1‘Ý/Ü(Û®c E¦üÂ:C¦YœKy‚³B-ƒϨ¤ƒ‡vR—ûMSĺî¯@Ë ó`Uç 7–‡Þô !ÐU 礘ӵ{²–ÚêË­Žc) fùŽ íäNQæÜö©ï†-Ÿêž¥´‹òý5 %ÐæL)WV«'/5 Iâ3À[;µù“CòÇìOµž[UË cv©ûg糦oÞéöû€Èìýðc_õí]ð1xa½ûnþx· ùˆôðŧ ßø° eÉÈÏR°ôŒý0 Y¥±Òb@Š‘Ÿ•Ot üžTÞ“WÊòLy‰ô@7ɇè2@J”HK\ªiÊ B!z“Â@xK'$ÂLá~a> ¬_Óa yQ¸YâGBC@ &kÅSe1Ñô, V2?dš˜„oMÏb°8Ü|`¾`Î6}˜[‰²ù6´|Ú×96ÛÒÌ{r:¦× ƒ ×õ*WŒø¸f4]ãLkoô‰ÿpx 6/î(ÈÙ!Ù€ ›’/[ TI­˜Rã0Ý­bϪýo|< 싲€ËyYkÏû!Ïî û? ðÿ®A¯–÷Ùzq§@º(÷‘G§*œýáÄ" Òና*!Í‚„zïî·Œ¼]Ï-©Øj,{íÍv·5{­h–=–¹Ä3ˆÑšå‰+3nÖ*ÇÒHÉö'™@ALÆÒ(\“U ½ Œ†Ëµs O “EßbÉ-˜‚òØÊ(n…T[, që¨BL9µ†jÞp¶x²ì62–íÙä)EÉ6•)ÈBK)5 ñòw\¡Æ²ÌäÙ4…{lž\ý%µ`YnŒ˜ã fò*v>ÂYf)åŠ4>O-³ëÓØ:ðL7^B ¶„Æ3…?#m<…4[-ϧɀ8×ü‹0ˆe³a/À•tB*;žÃÖKHUÄ5˜!gÂÌ¢Øüi8`ÚÀˆ:M÷¦(×F“§H} 5ò•Æë¾gÛµk×#Ø „š‘Àr±|­¥êœ’]B〒Z¶Á…wö‡mCäWs[ßLðññ(„—ÉgBOÝÏ™kî‰7û)=<þ¿Q/>s(Š*¢EÍ:¡õfÄ|ôÜÖoDׯÀÝ úôê˜áæü Ùb®uˆ6Ãü<e*ñDº¸·ÔºpŒ8T”ozÐÍ|K#¾<jÎe®J9~ÞüŽcl労ëïï1ûMǽeU»o)£UUi ¬”ÃsöšûílgiÖ€ôw€àvþC$Iˆ—?hm~}BŠi¿ÄM¦ïXF›c#ÛþúÄ“«µ²´ã÷Ÿ! @®x«VQ–yv£™jœÀÓˆ·²Yeå5 M|žÿvÕÎ ” üžµ#*>=ÚªìpÝVB#jcgíû)[Ú!Ý HTþБ9‘tß±c@Ú¯_®dß—ýe®XHq'Ëy`à¼{[ö6¦#æ*¦€ÂÇ ,n ̨÷ìØ÷l@FÍË1™Õ€üü¼¼ÂBÀn·ÙìvàãçÍ{ýuà‰'|ð…€°°ˆˆ`áµk¿üÒÍ÷E˜~XìMZˆ÷è!Ä‘a€0“Œ¾„Íâtá* ^#?™jÂrq¹ˆ¡Âs?À”&,ÌæçÍ ¡Ÿøø-`Z-ü€IDATB2YNÚ”}ýËÖ6ŽqÖb ;)÷Û«Ñ€_˜©Ià}@fÃk%Wò€ÖêŸìš „WjP©RyÏÖ /ÜÃK°yqGbã+I»–Û -Â{FîªÅVºPÓçÆÇIÛ’•{¦%@Ó9r ñUؼÈ͹ŠÄ^ÞgéÅšE‡Ê~ÀÉ€ÔoNX€ o‡¯ø"örX§°WÊ{vÿ^Èé¹G­÷Ù b’æ= Ð/ZHÕ—Ö’7Þ®³ÒÝ®ÒÛC:z“ŽNÖ+C‰ÁžÇwUßÿ%ðùGï==0aϨg'Uû5JmÒà W‚ñL3’c^0å—ž8¢ñd v˜¢•pE'¸µ’O¼|€DZË&WráÆÇ‘WËß)­ŸŒ€StiVU®Pãe üŒÄ$Fü±ykYm¥+Ù˜Rej­B*' ™–YLÕõàÅ3É8ìh˜ÇÖgµiç«WÚ©e ŠÅT:a?)_ÄF¦B%@š$×¥ ±ö€¼†Œ£Éö‘02÷Š¿ §G¦=E’€s]¦=¿n5(Š99@lÊϯŒz.áóFX©—¶§B'*×üÏæŠ»í¶°vORÀ·ÄüˆÿS€ÏÓDßšQ#’̳åPÍsž§åkgË7Àl:òG; ÎåFYµ€˜„Z¦šhóÙºvãÿv5_¯½®F öªzs«žÐ6ž2Ý J<×,2c¹‡{¢M]¥8÷Š4—VQb‹­‡3±çJP9+d=7Jê À•ˆs9¿¯”¦,S¬©}X¤Ëõ¤+ϸe.¥ žJ x»(Ø_x&æ”ã¤_O¹ÆÏÛ~€žµíäHG59ð_ç;,äÿÜl­Z¤š`§5‹§+œ•n$‰½Ë­¥Áµ ôÆ”b®ûß(áeÌ–SfqƒmÒQêë˜P3yZºH¿KKþÀ¹Ë§N\˜ ä‹§§]©Ô}dmþÙF@tƒ m »Ž>Žü òI­²ûW~É0`FÁÿuü`5Vû|ý+5‚‚¼¼‚Àn·Ûà­·>ûìå—ºu4¨](,,((*†ïÖmÂ×ù™Lf³É|áXhÏÔéѰy­á€m®mª¼x'ý•jï„mØHö!CÂÛ‡Ž¢c£Qé`ô»ô1ø¬ö£æ…KFÄ/[QXØaÅ s7ítêÞ¶'`Z/0 €Ð”œ&?•}ýî4”¼bk[ 伟¿3»¨\i|íàÌLqæ B¡OÐ~`£F½&•÷l½ðÂ=¼›w$¶x̾v<àäw0p+P«[å˜:‹Ê¾Q„õ®‚¶@úÙìu7İG*V|JL üΔ÷Ùyq§"¥sj#€°ÈPG¨OŸPáÇòžÕ¿öÈÍSÒ6yÖámVù%±¯öºg3@[¶iVc­~KN ðÇEöÀK2•×½é$çì5îýW[@Ý£ä![CGKàû‚¯ÞOØ ìY¸ñÔ±É@諚½Œ?¼!47äÿU¦(DS¼c ³vrE'¸Œ„S~Ñp¹–S™bùä!þÒù{š ` S¢ñl6nñÔ7£’M)%˜­xkñL4¦pc„›FX± 62VÏBfÑ4*Ùø¸jÁj^ d®+ÐØ84œ¥Ÿqå_¯œ„sl{Fàé2áö³Ñx)©ƒPw1˧z•Ä;—*B’\–Ù 9Â8zJk¥ñdŠd03H#@Üﬓ×Èñd-p~ók>¿K€¿¿B°}úÓNt½NŒ–HW¢È™S÷S^Å¿Z²-óÛUÇ÷ÖÞ€0#Åž€ßXߊþ¯æPóÓæéЕx"¬œ‰œ«±×.]k,«ýÃþ5«€Ýï8ýGWÀm¥öÀð9¼7h6pïÏ£/l§W¸¹'è<•¸XD]”k<{‘)Ã\[T÷×(%ë̓"Îg´ýçî”v.×WfåÆï…+ò”7Öy"Èn ]TWc´¨–Ìu¼g sÄWX Fø? ”FLéhe)9Ьž¬…ófË 8ÊJØñýIˆø©¼î–>r¤Žg¥ºÒQ ­ÑùC—2z^)Î\äçç[0(y¯dˆu ÐúÅ»f4Ÿ øV÷Ïõ¹ pøIWìm€„â¹§®d¶½R3k#´Š‹5…ׄ ÿûß5jÔ®]µ*`³±÷,˜|[øîóù¨,ëè%AÖÖ¶gn;[¼Ôç] hpѰ’ÎÀ‘sçÉî=7?‹­Pò›‘Ü@ v•è^ d À¿hOA5àÌ´´'€!u:ö*ÝÚ°JDyÏÚ /œá%ؼ¸#±÷ÔÉ€©­BÓF@Ý‹Õ~o¸µìû_œ5íÌ5!Ð@ Â尰Ȭò>+/ît¤ì9;ó„ · z<ø8PÑQav¥ÛPâq§Âü~½};€"áý™š€âÈEÛþ }ý–™ÜÎ#2…À©:’É^ÓHNݱV9Vy`5<À— {ß›ô8ðýWïOXÜ]ÿî‰=.]6w·uxŠI.€)xCo¹$c¡&t4u@;ÍÊHãY¦oç”Z1âIk eÖQ2–Y?åÕl/= á,cM8Ë”ptº´Zˆ0›¢€ ݦ½óûqÀß_X›B°¹”ˆ—L5 q%ùI'h[ÀãP8°E—ÈR'@̃„]@`H@V^¡Çɘ²vjø¿’1¶Ò±ô½ßîVmúYþí+ CõnëÚ½ô˜ÐoIg ¨µ§fdy€k[(?/OÊ1âÏ ?Cöÿ¶2‰,½bÔÙÂè¨ódý,³%U™GÜuZE¯;>ÏxtU,®„™“²ÎÕ³´l6u}„eiuÍŒãPˆ4õ^x«Ê5®dн’Èâa%Ѷ#Š<ø§øu Ö…æ-¥g®ñÌ3¶½G"l5èn@ ¥M¤m}V–jéÑ—R2—žL˼r(x=@ÑÀö‘õ!K Ðìbëµ±GÀY߯€ §Kíïÿ¦÷Ï/WÞ¹4æê  ¨¨°Ðb¬Ö’«=ú±ÇFŒbbêׯQ$I’eà•W&O~óMÀá`J0BáE!‚<öØÔ©cÆ f4þ¸îÓ€Õý¥™²%Ï";±vKžQ¦Y>ɳî²×´á­uS±jjÄžb!]Å”vbg®°3”Ä cÙ<™ÂŽŒU棴–jYobg–íF0«¨Fõé <¡ƒ0†öä]ÒòÀucZ¦œ0Í—Œc–X9Žäâ\ñœ>#ޝªV† ­d[¦˜Ó(F¾¦¬THe¥\©&Í¡ñ¤€tùM+Ocñ™:ˆlAA‚Í@p¹fœ¹W€IÛI„c"P¸»°vÑkìœR@¬ešè³áóhÀ˜ëe—1…Ú©z)WÏ565Lümó>à´ãDÂùÀŒ‘Ƽ0ç?×ÿQÝq»³l5qÉAú¯ÀCv›‹Ë8#!ç‰àòXf@2ʼn9ODϬsV²–Z~àB€qâÓ}™oYÕ¬°ÎrW¢ª4‹)'° ”¸·‚ªí´ëŒ™|ºñÛ—°s±²òãðuòdYuÞŽÃáVbrœ-‰Ä9¦k¦ €ï8±¯¿p\¶?e½dÞ¹.k=p%ýò¬Œ.@~“ü”ü/€¢Ø¢´â§€æZ·lÚðÿÚï%Ÿd@~PîIÿX¾f‡O% jx俍%å=«Èyi\mV©ß»Z½ö'÷%wöþ½KÇ2†øƒ±Ëho¶\àvãJÕô”ÌPàÝÇ_ûxö, Ö§ÎÎVC€ú¯ºYwžJ&¦( ­Ù¼Ý“Aì$F{Fô0Å–1¤Ÿ>4žaÎãòvOöžQ¦ÿ7%m®yH¥–t dÇR™rËq̱UÉ.c݉ªÍùøâ\ŸyÂ@@¾Oj)¯ÖÍKµˆJ+¡Çuô#…ÈËa ©+#´x{§±Ô@m=Uol<2–µ›òVOû%FØ ƒÑ'îgû9ŽqâÍÔ•)ãx;±–Q&v°Sä,ÖÆêLTšº°ï[UµrH­HŽª)þÈÌÆ=@ª8ÍoÝ+@` !Λk©1£­dÿ`]e™8.K_[{3b€ àÿ çs„éKq‘n<ƒ"ÎãÕ€×^ÎxÿàL³“?ž[ øþáo3Ï:‡ß½¢Ó`üØÇÎŽÜÎ,Ι[Ü¢Iºº(ÔÚ+JªÝî,‹…™‹ÂÍSfšÑjyýl4ô!]œ IOÖQ÷Ùm¥Žc|ßC†›çÌ8Ýy¹QÎ9•2èÖÓxx*OpÙ?JêÍ7QÆ3Õ<´ª%sISšÈ½wIÿ\—Õ&{%ñûåeWÖÉ[ýRoY4Ü´wƒ‡ÿ7‚Ÿ | K¥äÍÀŠ?w];8×ñLÃóC‹¥°°¤()±Xl6`èÐìßhÔ¨iÓzõž8}úÔ©ï¿XÜK£GOœxï½@ËÚÏmö2@”¦…?~õÝ/«"R €Àßöù'ÁCŸ ªô¡ƒºt[ Tª5¨ây€ô—w˜wé_:> °~n=` _  Tz»âø g€à-aÉ!á€Tâð“sQfhJ<ñVF } ÜL©ùifU•DZý™BV)Þm}0Gÿøö/bÀêÀ¤T@H 9è?ð?=áù&@HÈ´o;=UöãýÛpaÐÙ“†}Ïun3¼XôÙª•óWÍ»´¼;Ö·¼g÷ÏEn·ü„ìwÇ×t¥ý5 F‡ŠkëE»n—{¾äH.€Ù(1:<Ù¨n¯Üòž½^0x 6/îHœL½t8HóÏtzÐ<¯Þœ¶O{ÞÞÒÌzº0¸¼=»Ò…t ".ì‘Jé€ïŸ¦¾å}6^xÁp¡Ç¥®©ÕrIlL–Ñ"#ªx­ 7 ùñã1Ù;€ì;½þ“Øîyü….©b_Gãë)Ø V3$ò’%(Jy MÀr¹@o õ8[¢Te†ð„-Û7>´3 ø!úëØåá@T¡À°Ïïë8$¨s_ÝJµÑkÎÐÒÊ ¶É¡at-¡Ìjjˆ)N©{©™¢È‚²ûSìì^§e¹±Œ4u<®Dãe³yéS²ie¬SËZ“k;Ãv¼]TÈ”lB*#ºǤåd-³Š¦0 ³1\â`!JS†Ñxö¾¦ˆcÄ_M‘F¦¢½¦T“cØ|éFíß…T¶ã˜´R²*ól¤éÙ„ŽÂQH¶øh„ÔFdŽ<›üÐÉb´亴.­ œ?Ƕ€g‚Íh‰4MÒ\t¡ @ñ,ë…;i‚}°ü*`úδJxðoèg ¬ˆ+-¼¡YOwMrî^ bdŇÃûáíCŸ 鮵Ö.˜;ÏgQ FË/W?t˜ÑeC»€RàfßÐHeËPÓˆãù¸o9õdµ4ZSm•ªUVUÎ)¿û2jîß'qŒ8ÓæiÌxäå ü¸ŒP+½„ŸWtÛFKkõtVÄI¥kØ Ðö”Ê/9åÔËûHöÒˆô5@ž5ïXau ¨YAÅ¢Á@ÃQM{×{~>ì‘À÷ÙGò—}€ß„¥igH 9  eaõü¾€Õj±8@ÿþÇ÷ê4mÚ²eÆZ ão¼øâÇyy×®¸Þï¿„Aƒ€6m:vlÙF‘GÄAÀ¾¹ëçñ@Þ¯9{ ¾h0üßrwÀ£@÷œ¾õ»ÿ TM¨Öºr!@¦ WôüKM2Î6ÙÚµ$¦!ýƒßBG„´  „·‹H]?ç’޲XKÙöäPÙ¶'MÉI}Û)P kió¼ÑRñÀŽÔဩÝë£Ö\ÓÞ÷?>z`ìf ìÍ·Žu^`Aèf¿È_Fý•° )2Y.mŽ4$Ýzͺ'àn;0kÐܼwwßúøÿUä<›‘õ€ÿácR¨Ú¦ÂµŸqÝΨdk]µ^½®Ãˆ&ÁÁ‘ByŸ…w:¼›w$ΞNwœXœJ½|ø¨hQ»Ñ£íŸˆD×Áâ'c[î¸KëkŽ’¢ âÒÐùÑ…å}^xጋE—?GéOú´Ô ¨Ú¶òðj[Ê{Vÿ>Xü.ï˜üúÜê­;€’ _w½ RTû å=;ÀøÀ]üañtË7Àÿ¦ÜßqÚ~ ÑΘ[˜€¡OÞyà øýeoê (FÉ«éÇŠ5óÂÏFåÙiz‹({_Óp±²á!!ÊAæ9{ý“eœa y†g €ÐÑtËxsì¡)|,ž;8ŽÉóÉZMÉ& R²×âéGúù‰D-Í´AÄ2ähŠF°ñ2nêDÄ5ϧá&Ólý˜–[@e}j8+ßøÜI§ÐUÆ^Óxù{²;1ÂgªÑpg‚RÜÏJèdÌF[@˜ÉmŽžl;±‘0íy$ÎÉ«’ˆZ €ö–jÉ«á'ñyÀB̤»3S§Íe-¢„èK\k cϳϵÏJâKì–·º?ISñ1ßD `”ï ÿ‡’•ÖU¶o€m‡7>¿«°ùýõæ- €ó—ϼxù^ Ï–³ºçã_›tæe(ð˜=æÉºj, QJPÊþ*ŒÛs…ϦsVŠ••PódõL´]ÿ¸žjBUFÚ/Ú¶K1@ñ¯+‹,À¥/‡^þ(0çå´ »æµ, ÔïØ¤AÌ xsØ’ í€<Ö1B~XÿÝš¶¬R&&8õPØ6¿fÉ@Àb).¶X€~ý†íÞhÞ¼mÛ&MJ%‰àƒ¦Mûì3 33==+  $-ËkÈ‘#ï¹èر{÷víQ4™à§ŸæÏ_±¸z5=='Ú|:`9¼û`Š®/F,®MZÕâ] °ø¡Øfwpýk§Ÿ«ÿæÀâ1 EKw{לX²ù^!¢c؉òžÝ?Ys—^øô'ø@tX„£ú7®ÛDޝL-J’0GP¿ŠhúRÍ£íÚ•÷Yxq§ÃK°yqGâÒñ¬¬³ÙÀ±´ ömšõ¯7´õK€éˆ¸ß¼PÛN¤m¥\à܇™uRŽÁüf„ÆïTzµ¼Ï /œqiAzô…Ó€5Ýža ª?UõåæòžÕ¿AãZ­;XŸÝþÈåú€%{ÁŒqÿÀ]©ÄÖžòk\ºLšYõ®„Ö‚~:䟠/+`–'âŒSAFÌô³lÊ»¤54…)´+äT´×”UFÅÓ€±Oظ.Òsì¨R ý^zk©“ŠKÉDÓh|Fð±vRMQÇÞç]<ìŸk¾äÕì<v|Wë*ƒ8×ç[–‘æZæ€ö¬ÌY6yYÏœsI^-ÏgÙl$—†ÂY•"„IÝ” ¸ Æõd£(ÖÙýΪ6NÄiuBª¸:ˆ}Ñp¤ÛSh ¿uz¨ñ}íõU_ÌÇÍ%¦ß´çë_º (8“g/þ ¹/äƒPÝž<ˆÊ¯Zi?@úÊ_’:Nß¼ò}pâÓøýñï—·€’tàzm¡×o'u:žÎò[œb]X\0=$ 2ü&øŽ < ÃŒj²‰ø—ÞÚ©/CJ'ÜŒŠµÒZHµý4âKÑš•BÔ¹*ÕÊBªèPrÜ60}üóÔýÅ€ØyqØŸ+µC¾½±k6ð¿‰=ZŒÈUñ<±—aÜÿ8N®9þé©6@ï÷:|8¤ðZÛ·7¾Pxä£'êŽ}«¼g÷ÏÃÕô܆/þ…æ SÈ»ÂPµ¥çí3~Ï©r‰W¢³ê\j tÒdÿ 0û™||Êûl¼¸Sá%ؼ¸#‘IóB.]’ÖŸÙ²kШ°v—æþ€cßsµírs‹"®Å9S ëeŽ"¥ðÏ*¿ OHá|yŸ…^8ãJߌ/ÓVZÒË’T_^}~ûË{Vÿ>d…F,üb7@—T:¼ °¦-xqt.XYÀn¨–O@4€D,“•’’ Ð1ìs’ÁÚúhݦ<°3¥Šò /_b~¥e·YØ+8Z ?˜×tqkàØ¢½q© ÿûíùͯŽ0Û}š«”A³F²2¶ûçõi¼¥S§àr)5p¶z:ašÕoQº’•XâÊ€³ÉfÅ$SX)‚sWäÉ«Y6o!Ålò+pµ–º³¢šš˜›3™ÒºÎí§œÈbÇ%„)¤ Mtıl7®\cûsJLËHÓZU[M¥Z¼´RÎ0…YJIŽ’iζЎ¯j ™%´ƒé.Ú&ÙïÇ,m¾¦wÌ‹É3€4Ij‡×²dc*@²ÙÞÒDA¿Î}3Ýo}6d ØÄ{é ðpQzÑŸ€£¢£ØÑ°ýdÛèøHŠÝ{âèT eìÉf§?YôDëñ›¿ï|’MË ÖΖo€ÌåéK³ç5SjFV=7 5÷m¡×Í>s÷¾‹ÂËáž “ߦÿÏÞy‡GQuqø™ÝMï•$Bï½÷ŽHAª€È*EDTPzS&ˆ ½ƒH•Þ{/B  „tÒ“ÝùþØÄȒªÌû<<°;sïœ{g²¿œó;ýŒ µCªsêT¸ßên‘‡£!qjÂçI« .*~g\AÈ_­@)ÿFàÐÑ©¾CV‰ó”ý°ÛŽÇÂá*—„ ¡FBáÄ6™^^µk7n\½:T«V§N¹r ËF#ÀìÙ“&-\ÁÁ7oÞ¹“™Ù•AãÆ-[Ö­ Mš´jU¯€¢ˆ"üþûòå›7CHÈÝ»€ãiû»ö[Á{lúáMµÕÎAÀžB— Ìq‰ø§ô <ܺ/l#<ŽŽò‰»Ž¡Ž^Ž›ÁQïâè° |êùµò’@Ì+ÿ"f5—7WBšCs„KSŸ¹Ÿæº…>¿ÉBÖû¯x‚ÒÍäÝf^HËðˆ3s½ôïÇ)3½µ ) ¶Ñ®‘TÅ*Ù.¸Ek~3 i†=϶2Î7 t¹-ùq å ·‚[FÆ™XE“":ƒj¬¬¤æ¦ÄÓ4RÚkZRΰG\ÆxC)ý— É»½| 4ùWÏ=³xS9ɬ65œo8-Vªº¤5ê{_GÅ jÑ·»¸_v_ï?÷]1Eýôý ak£{=ç_lf¸T×‹ŽžÞÏ)ù4¸®ë¯ÀÅe·žq„bõü:•+þå<*déÕ¨¼­¨›Ê[IllBBd$œâà­• ’I‡Á9ÐaëPKG¯¢’=aa¡?ƒ„|‰'ãB _Œÿ©üË-Õ¿9,60õ}ˆ.Zàü‚Á ë<¢r0ôû ±â›(9x*ƒæ^ß{uB¬?xÏ¿1»ïµÖƒºjÛP†Fwßõ¨ûIÐ1y}™2«žÎ(S–dUŒÊ’ÄàÌŒ¬ ó18Ý´¿€)G*ëq!ÝË/«©Ò\ÍySsC9e1dO™‚]†°õ¤§[F ©âbòb{:ó+«˜}WÓ'…ÅLo¶t¡n ÃM%°R›Œ¦ ¦÷ŸÌDû+cì¯õš¼ÕÀXÑ´ÞŒRZS¦ÙÓñhJjËf튚q¥§3ÒžyÞþò~3 qÍ þºwŠÝ„" ·7V7f¢tGl,[šJgMÂ]¦0iÊF›šRˆ-LM”Êt¡?)?ÉüÅÈïwl6e°ÅÄ@1ÝŠžT†”>†ÙIÀ°!u™q7¬M]êµé*ít°ÉÉꬤ•‡ŽE¾óŸßõWé«>`ý›Õ!Ý2óMž'eõòJþ&©aÊRˆ8>7ÂßÝç‰ÝÞI ~ó{ùÔ§ÚNÕÛÒS¨m'ê,qöC8ÿõé¾—¿7™É'Iâ}SÞ…jÕêÖ­T jÖ¬_¿bEeS×¼yÓ§/[×®]¹rýºIð2å~™¨[·iÓjÕ E‹víš6MY€׬ٺ‚ƒ¯]»wìÏÚß·Û6é^^u’ºÔ¼Ezï_°X]ÕÄ#pÿhÈð¥=!bVÌHpиxÚ]ûãv±“!o£¼Ë}%Ð,Ðn”>s¥£æš ˜/©Í(QÍúMn™¥“Ú¦qúO>¡æš/dÌ›ž1h¦Ëç_‚Ü#x²«ê“ßïþêj6s-§n¡OeÀ™çùÝI“¦¥UKz:meëŸÁú¡Õ›+¹ñ2˨LšRNþóæ·¿„°Híç&AË8Õä™–SÆZff\î<Ö^ÌN¸˜~þàC³o$¦ïì1{=€Ž .©•Aw·’˜g8\x«îBÐ5¬,æ1 ’KôRSÒªd¾Ö®±²Ö|ùùþk(‘Š»r ÂòD=|ÐÜ 9žðêÎvMÜ–ä<þvíâõÕ`øÕðƒ!ª·-þC“ù–^•ÊÛŠ*°©¼•$Æ¥jâãáÈñË'·o‡€º~­ŠT—ÛöçÝ ÕA¯Mq‡û÷##ƒƒÁEpêîv¬Ó´+lJ¿úõUT^}¢…U€ßx»˜¯!àKÿRšY:ªzÏ ïïƒÇ©m{n²†´c{¶H£\ÆÕoä›g샯´Ó@dÒ­ôA‡Ÿ»4iw v(l›µYAF÷ÊlJ1suÙÂÔu43ÓÍt錩ï¨â’.ô0ËhŽ`¬˜éìf:?½$7c·[HÍy„ŸŒ[…å  0yµÝGXÿùX[›2Øòå›7¯E ÐhLžXšélà‡;#VOon•Üzº¸Bɳåo—˜®ŽzÛZà»4ï’¢ÒÂý¢ïƒ­S9»»`×Ûá3ÇRàß/ïïÎ`õ»ÍN«^ÙeÊ=Õtà/Ìx¿…kg˜HýÀÜæ<Úžõ3ã1çõtƒÌ®§ÏBÍ+'9?ÙEõÉ83š˜ë:+„kVe·þÌýÉXOÆ sÒÌrOxÕygï“óf@Ò´Ä•IÀª§v¹õЮ×t²ž‘UËðZ{¾ù¿-”6 Zš†éÏÁžçŸ9N:÷—'Û’œÏÑÒÕ¬#$k±ƒ²DϹÕ ±Î‘µ·–«#šÇÿR@º—ÚŒ–… ǃ}³á)ÕpP8˜›ë¨dÇ¡‡{WƒÂ#Š-p¼çù–óndé¨,ÒDN1úCؾhéa,xÜuºàÓËØÖq^œóø¸6 ;bnÀ͟굊çoÜlm\-½:•· U`Sy+Ñ' ©2ì;|ñâ¦õà?0OŸ+pßàô§·'ÄHXqbKø9bxu½è[w!R¨léèUT²'Â3¶{Ĉº5%¼8$`Z¡øWŸ÷m!Ùa²çéÃ(NœzR‚¤sËÿì9„iö»­î¿þëË¥L¤“Â7 à‘Í­ñA ‘.‰Áv‡m´Í™Â•™Ù—€šóVû{ŽgõJË|/ëxó™gñšJ8Ÿì²ïúWë_^lÏ–¦f½ìß7ß4wçgÄ!Ę„±Œ¦Êeªâmi¿âÊHe±©Ö4²DènÊËh–ðוÿò¬{:óã&¡NiòûÄ£€ÊÄׂüXž"÷±±Ê2T_À°¤h)ZŠi²¦¸”w nÆpeÀ¥òAÀæ«ÛÈH¸~<=½¼ÜÜà“O¾ù¦G°··³³·‡+æÏ_¿Ξ=yòÂ…g3¼*UªQ£Løàƒ=Ú¶…ŒŸ%·o߸qï^ <{öêU°µµ³³¶ûcÁ› êø:?U åÏT¹_j-Ð^ùˆ¦qý¡1z<\ºôá/à˜Ç¡c(8\uŠvX y‡ïWtý4§´ïXQé'|ÖKë¯ûö¼’Ó8ÿioº,÷-[o¶'º g“¹•ëæ O_ǜЦÉi=O—Ff mÙÅñWIoÏtmÍð8“Ëš<ÎLëΌǜÞ“qAF ýS¥û·TúÄTŠútfÝ“û’S)if&]öÞmòaÇ!õ~ERXÝÒæ·) šrâM«l~ÞËЄóâÈ9c-ÃcM8oòXËYËÌ<3 n¹ë šÙ”À”¦RÏL¡N)#w1údÌdÐú,z<0Þ>©¡ª$óÁ¥ÑüiïŽëúm§)J]T9ío¤Ú…ëëë¡Þ¹Æ¥j·‚ï{Ì(:æOKGey ·»õ¥!¢HLÝGwÁ;ÀµiÞF`muÜ!™~2rœÑ.¦ÞØy:¼š'oI#tôn^LcéÕ©¼m¨›Ê[‰’þgwÓs×wïîn3|«Až îÅòÖ€Dm¿t§‡²\¦8»¶tÔ**Ï'jYìéÈ ñ^TþGm @b¾­A°¯‹²¥£ûç½¹èèE“AîS4¥¤¼³‰Þ?¼† 5QúŠvpÂ÷hØ™>ðÛ§?-YÑú}׷З+À3Äíkï&ÏkHÍ…Â 5nUnds<83³)=ãjÚSÂØyÅE.—]XbËô’ÉÍÆd“ñ!Ĥ›ó»˜ÌùÅ–bϬÝGÅšéñy2¾ÌŽš™ù`O kYóÄž—ñ¯ìJS…i¿iœ±ÞSëh“¾Ž§Î7yÀe–¤¦¿ŸÞd “'›%dÍñËx€Â@%äïòÇ@C+s@n.[ñ#(õI4Îe…0XØBUE4Îá7Fs ïÈ’2!Ëe £”Dø wï–-!66666¦M?~ölˆOJŠ5eˆ ‚Éø^Q@QA–ÁïQ^|ÏC¾ Œ÷« ö“æØE¦9]°%8·wåâùkôô «­ViVÃAê#ü.Uz^©¨¹æ%ŒO 9O¾ÿW·ÌÀ ÁéÉRGÑ7ûn¤f»”æÚÛ-ËùÙepå$À™+õ|^&Ùs2Åž/#îì3ä2…@¡ŽÙ}Èv]Ϧrš73“/û®9•¼>³¿é‚ܳ×yzÆXÓ:ž¾^öóÉuä<ÊH±MuLê V µ§lû‚õV¢•”›î›O–ˆæ$ =Ý3çRÏôݎξ›§9”»ÆNÆÖ ûôÄä`ˆ'}¹c"p ÈƒQ°¬K^púhèÿªEƒõÀ÷'«¥ j¯›nÞí–÷ù"®…‹»`»Ó¡N¿«žÎ¤UÒ/O­Qwˆ¸ ¾ön·ò{µ¤«`›«ÌL7;ÝÛy H ÅVP¹\a¹ÞlK¯NåmCØTÞjö%]œ¼É œb]ö€ßqÏ:ùÃÝÂ[\û ØŒrz¶«lêª]CUþéÄX?v®¢#ƒîƒüA~×óo©˜v«¦¶¥£ûç^¦ë270ÈSʵ ¤ünÚ;×þ¾ù“¿Ny/­+,=;¿Íªñp|Û®ˆK¡`WŸ‹¥B×>Ü~!X…ZÛ[ï˹Ä3Sîb³ë¾™Ù\@¼“^jX>»¸^6#-óÜ2ÏÌÄ—éÍfêÂù´›#3½›ÞíóCÓùÌ`Dzœ³é}±§©KªÉCM,"Üa:»+Èó@Ž4þ ÿ„RwvƒÜÆè-ÿJ}e"(õ„4åY ÔWDy<ÝÅB]PÆ(@þM¡E“ e0BfwFQEA½Þ`eˆ‹ÎÚZ«{{{{;»ÌõݸqãFp09²wï‰ ))ii p£ˆw;üOT·ë^Ðüb»L'¦™qr>ûðPÝ“cÁ3$O·uàù‘÷lÒPî›*ËJ»@ôÔèò1Z˜ÛnÊ¥ÅI`4 4hТE­ZЪU»vÍšAÌï¢â»À¥u—ªÚÃ…½§?»RnT¿zòÖzHõÔ+)eÀ:ÜJ°¹Å?/a(¥?©´¶„;”êQzkÉ»à™ÏÓ'å%2ÇÌ–NfŸ eö}sÂÞó¿l„=sÍr,Í 7çe–}Éhf—ÔôëåRÌQh3ÛMõù¥­æ®—sfZBÙ_Þ’âHÓûOíÃ3û”}‰hn3ärŸgŠ[$i”¥ìŸÔ<¹ XÑÙ¥‚&L*¢ý$Ë®§ \JY“à¦ÜË^p{Q!ìiO6cýôÜtõ.JCLãè,Ø€ñ×Èfñ§A:¶}ée#h¾Ú[îÚgÀçûÅJ 9¸œ·I+Ï÷Úù £&Ý©Wíöù¦™²s³¾‡Ùã¦Îúõ,\>ûÀýt^°N°:­›béè,GòÅ´¶É ¶bÜš¨íàß×é ;hWj°JËýÍÀ©´GO»âF£ €ÓWvgœüžXR>J­­o AVWîuƒKÕÎ&\W­xÅÿÎ=ëÌÒQçý.qÎS¡Ì’J‹»B™ eÝJ×’óÊþYìCpZå:ÅáGžÉôÊYHzÊ‹ë/Áæ){³]DŸóï›rÌ”†æÖãìoÌrg®ä5‹GÏÛì»nš+}fü3^néÇÿêþ)6uÿ4׌ ûøž^ŽÝFËe”¼š)M`¦RRçëW$m»®ÖÅú Ô$esÕ,]>å©JÙç5)xÑæOg¸™í"ºôq…¤# ÕÜòèâÐ~¸¶ö™^ œ0(ÆAw·òÃ<ëÀ.nÀàJ߂ͣ–G åW3Ô,ÍN÷­i{¡wñ.…û† [wÝ^q*8VˆX::Ë‘h›—Ðâô 6±§! ¦Wž"FÅ$KîçI¾’š?)®Úß>x!Ê{,R³&x”s²÷ñ±ô*UÞTMå­æÔùâþOÁØS^£_ Î_:ÿâ²ú%ˆž›ÝÊû4·t”**¹#amRøOà~󇿇Ì¿?}öå-VͬÎ[©?R›%5tëØ;½!¾x·€mAêçãÚ¶> rtéy6¼ÌŒéô› u…Hý3ÞZÞ·ö¦~ Ñ["ûÄ¥‚W„wGÙ™¦ûb ©¹èƾ†Fòæg­ 3üÌ®—Ïšö›2Õ2 23<ÔL™ð¡É¼_-~È10jô+åÁ˜¢|Íû ÌæKåu^7ytöl–ç#Ë~(!Ê¥$¯Oû3yØØX=°; Úx—.K|æ®ä3Ó Lžl¹-• ÷jDMéÜÏì/âêkŸ=:òtƒd8ÖaM­ <›Ž-×Z6»»”)¹5çyUÞ,1QÑGb‹Ãû½ßéÖ­L¿1ÏæûPúRÙË%«Y::Ë_5iU\!H8›Ô.. ÕÏó°¸(g)&$ä~ADA„ Á×99 |ì]æ¯ÅjåmS~€¥W©ò¶  l*o5…à¸c~ç’Ò&úp8ê𑣪÷šÊ¿’¤ˆ¤ù‰Ab÷°Í¢wPž]~¶ ›fhýèÕçÿ¯ÒqãÖÁVzgüÝ÷!YX}ä£ L±_iu$ó<å¼|]¹þ1”ó¦æ&!-|ÞÃ…Çazljçt‚Úõ«mÜÊ7/9ºJ6æ×™h ÞQ\À('*í€úJS@©§¤)¿€0Cê&Ÿcƒ2 ”ºJš2„ù ã0(‹Äaò1—Ç€ßärAU^Àð'KMÂÊ3ñÙg€e Š&‹{E1 gb/aœPÀ4™¸O—ÆHPDY'@üP«Ôa§ JƒAüSÊPPþgX.TecÄŠ zŠ„¥ ‰“úJSAn¸ 4ͼnÊŒ´©c ê@Ä1y!¦|äå˜uØ”^®N±£¦}bàŽuð÷·wÂâJ¿uYbƒÑh0˜Ê8õz°Þ昨û ¦Ÿ«í šDë ¢#„‰a—„ýÒ®õ‡'‚Û‡îÃ\ëÇH¯_=BÀŽÂûò.—êN#ÊdÙ7³BON^ZÙ—À‰¾æ2´žwÖålË»àDZ-f.0 –5šÔ›PU€þÉCB?>ö¬°b^`{± ¯ÌŒ±'¹”â©xÂ톷ʄt‡K‰ç6^þ.´<|eÜ,qm×¥`ô6(Jy°³¬ÎA±OKß+eß-ÿg™«PªvÙÉÅÓÀï〲yjç^øËÌpS˜ÍÀzï5ókÏ¿Ï9í›ù&æ<Ý2„{S)fî=ßrš7#^ske9yµý5^Úi:n¦Ä4ÜÔÍÓlIç_×ɈÃL‰è_Ï¥iÍ–¤¦Ï'·ã¡ñ ¤$&×K‰ÛEV»ì½A 6Ô¼›ewsÙå3S@“¾?Ùõù%ŸÒތײð¸Uò*úY}ó4Hwõºº„¯‚Ê<´ÉlF µ/|Ám 8\úGs4I…»»ú¡¢ò¯$þ‹¤Š±µ!Ù%eGÒ>È?ÃË¿Xþ—Ÿïf§{û¯¶ñg¡‡¨R£HB½K¯RåmAØTÞj®L ùã¬ýp¦ø•}¦Wæy’di:.öb¬IðJç#a¬PÄnšáÔåò¡ c¨ Â)Eâ&)Lô1.+‚è.}-,qƒâ' a­È` m2ŠS³Æ‘³G›©ä5¶r”UÜ{1#Â7ú1ÄNŽ© F?ÙÕPª‰5 VéŒf·w*‡|w÷(üzíÝ‚+ ˲¬×gf”Yí²KGÀŒ_æ§LíÛ±R*Ä~<úñE8Øxáxp©íÖÞÅ<=½KxD€_û|¼ƒí—ֿ۶ΧY¡ÌœW×ó›5Ë7k¢Ÿý<›PQ¨+T‡µMW´Ü0 6µ^#m_VV¶¶Z-|8¹WãÎÇ¡îЪa6SêE6³¥š˜)Ù47_ê4í¬¾ÓŽ0N…œ»ˆŠÑ¦.¢fK>ËDÍJP@×àÐÉ  h—%œJ¦§hõ§Ah­×TÛËï®(`­¾¡kþž`³»K¿ñT«‡ÿ MòÔ¸Õ¦ ”ØPú¢60½ÚÜ?l´tT–#úÏøò‘çA\¦”ª€Ï·už/?_äáØ"*@ˆØîàP¯JÙ*­Ú‚ÎY2X©‰*¯U`Sy«¹{3üàõ½p-ø¾ý…(ptttttn·½>íBmÝ KG©¢’;ôgŒÕÒZÀ­âw¶ÜØ žIî?x[ãé¿ÿzÊ)%A>ò`å\䑯órP¾UNð.¿RVÉ~ |¡ì2vy”qÜ ”ÊIeÈË8,N¢ìÎ(!ÊÓ…/ù¤,›ŠŠS&×ËÅiúžñoªÄ& VŽª’Ò ³*ŸúÃ¿íº¢¢’ë·ô(uh)¶StU”¥õ ü",>e™ñŽøÄ»=ˆ§ÜøùÂ!¿Bž…•ü{@liêj™!d)Kej çbLM„b™^iÌú›„0Óñ§3Ä2šˆ-¥¶ÏËS¦dßáiaíö†›ïW‡ˆFnDì‡ØF1†¸i<+¹wâ)hòIËÅ t`ï$Úœh!zIäøþÀØS“š„2ÓA0À}œ×e§rð]óI¾(.Õßwlúz£\ÔŸ l>Nyïƒçw^³ÝFsK§‘Ž ²Diæƒ{f e†gVîº.æ<.§Ì$s^NfJ@Í”âe 4f«§„¼}¿îyx¸!Ìï>~´£Å0Ý}ð^ïÚÃÿ“—Ÿ/±fJËø¦pmåŸçC¥…½ë•×B>%,½Z•ÿ:ªÀ¦òVº3:øn8r'öäppppppŸþî~-@˜.Ɖ«,¥ŠJî0Ä?1v€›º;cƒVƒë—ënËÀ~¼½ý0~ª¬7Ôe”|Jnò0y›ò.°H9+ãJåÃAY 5ŽÎpGÙ“™é¥ü%x™Ä®—ý¿Ã¼à%Д*‚?Aì¥4FƒÔE¬Ìxà#¡’8¤bKñw`šÐDØ š‰b3é:0^¨"Ni¤TF¼ â/bE)Ì|©ˆî¿uÈ’ƒ›A¿oÀðú¡`ü¡é‚"ËA?0užÜÝœÛzÅ(0|š4Jj ï}ÙÜ¡ÓþœK"ÅÙœ`¦¸˜º|šŽfßåSøPüˆê™^mòfã†ì®wsë¤[ŸAXùгá¿AL©èqƒ é|â¸ÄbÐ<¦Ý€FmÀýˆïrçåèŸÿ9Œ˜ùõ¨±ÛL"™Áâ]+A>^Ýó¬õp‡/ oÐw"¸wtïZÓáêp#8èÐí°Ýa{ÜúOðèäÕý蜭emÌó2jrðžÊ×Õs›óÜÊU×Él…’—ËPËÙË$tÌ–¦T…Cû÷Ž<.d–T¶ï¹® á­&‹ëȲ_æJ7Í7+°å0Ÿ¹Ì®õšËiŸrJÍ”I?¦ÖNž—Ξ½p5 'œ¯y5..;›/°D /œµôÔkŠ÷φPꃊ§Š]‚2½Ë,%Û”ùºh)°ýÒ®Ÿõ0Hú1idÊ_¶&j%ø'ä×øMèg+× þ`ÔË¥Ûµ¢SS`•*ø>{~F3å¾±¼±vU j š_.Ïy0ÄNGFßJ¥s²]ZEX4•ÁvæÀA•öMÙŽÛ‹{ƒæTÝÎ5QyKi5»Áû\w[P·2ð[ÕGg¿ÅŸÆ#òƾvl‹iGÙõsÎõ|_Á;XÆØR_.yÜøùô(îœ7¼BSÈ[Åオ€­òšQ6•·š(9^–gvß8~h+ØÛÛÛÛÙŸìe?éÕçWQ02æ1ø‚ò›ñ²a¤þ ×ùGý'(«å^ 7.—»ƒq§|θÖ$xeýnnmmeem VVÖÖV¹ðöȾ„*B±iºàÕ¨D~¡PYÈ+ÔñCêˆc@è-TF€8Vj"a†XS³ÄAJwa-H3¤rbˆ£¥râu§µÅ TìÅê–¾+\kfás@⥑#ƒ¤sËNõ\FÆöº ?·üñË…U!êàÝö© AÙ:_6ƒzs߬õþ;—« ³ ÁŒ W‚žÖ.½¸ ¨><Üú°Ï£xÜ1úqÌ#ˆ?70Κ—í0¦ÉŸàw5@ðB±uÚ>øjäçÃF½ ©yõ¤ÔûÎmG€wbÞÆns¡O±'»Ïòî_xd)x”v=ÂÖkìF讀SO‡UYÍû3yþïÜ{/åÐÍp¯™RÜ<ÐÌ”"f h³eã©•M·É\ o/SjFˆJª‘z;µ<ÌY4mÂ$8ç˜r¾ØÛ;8ØÚÂèw¦ÔêyvxóùÔ¾d[Ò™Ž™L«—ØÌvÓÌ!óʼG›¹ÌÁ2ÄÌÞïçÇÿ(1|K¸œÿõÔ——o@à²ó ¯¸@àªK¯–†Tïd%­<ˆ¢(Š"X–o*Ü ¾=þN]0xë¥ ¼¬}ï¸{efx$lK\™´´³uýt£ÁJoåaÊ${¾wQÎpsú Ÿ>YÁ#w×É©$ô¥…·22y±R=³B“Yo±ìç½xçBõËŸÃü¢³û-Iƒ¨¨Gbc¡•oûŽïÜ€öy»ø´¹kòü2Í÷´@˜CœfJ:Í—ˆæTúør‚˜y¡){¸œÖ—ó}±Œ:}ƒl´‚[GoN»U .”<-^éGï¿qÂ"ûGŒúÓô]\–MY·¢UÊT?]a:”9QɳÄGPfo9ûRßdÉøÌa™¥Ë溡æ$0å²k(Ï÷@3/´eX¦ÌÕg„Ü<Ò^Xx7ãÕö"%¤¦¯?cÓ׋¹ÒÐŒL;±ˆi—R¤ÍãÔ¨¨¸’àXþÒŽè3 |yºÂÝa .=ñm0@zi§°Âî±î XŸh6¾@ Ð5¨Ò4Øíév¡ô× L±i'íFE幌Ý=ìÎ33_o4!ÿ×ý-Õ›Gñ ¸¢…°ØÈ‹lÀõ¼Ã&0p©kßͣȫÏÁéú“ÓÁoƒ{›‚C¡è§~­Ë–µôªUþ먛Ê[MrtZBb8:x}Û°«fè0 ò^ô®ç?ÚÒѽ=ƒ ’­Aÿ‹¡œáèÛWÊ€ñ‚<Éð| ?[€!Ú8ÎðÈNÆ/åM`ÔËïé€ìgc cy’œŒÍ剆GËkä ï5^à÷tÁk-¼|q£éÕ¦©XAlJ#©,í@sP+ѸM¡¹Â^á1´G¥)’ÅÅ¥R;R5_Kõ@SY ÒlI/uÓT«YšÆÚAº!µ¿ÍAÍa«´—ßÏëÇo¾*ƒ}ûO®€G¬Û KßåÑù«Z9ôímþ´o 1 ýc›¯€«%N{Ý÷ƒ;‚¯Þ« aËCˇ@ÌÙèoc rZLˆûÐvJ§[Í AŇÕ?*Ó$o]Õ`ÃÇO^qmËD½¼p­ ^}óìðð†¶‹:kn^vÞE<4™%Q%©š•Ò^qϳñæ,ü¤ _*Ìξ»`Æy9xm娥0=žJ¹r*ùÌY`É¥‰úùì… ³žR9• ™ÊrÊðʾÂÓ\soÎ:±ø!ðÚuøÈ ÕZYI Ìóõ޾}¡BLÅÍek™ŸÛý1‡9-³3ûq9wÃ4ç©ff\NÍrù¼?ã©—‹û›íñ§ž›ÈU?E‚¯+öwÕ’¼’”Ä2à5Ýëš÷; /§÷Ö7ƒ˜úÑN±_˜8£|;ûîò•¡tŸ %’ ì¶ ®%;Cñ eJM«ÞšUºÞÙíCæ2Êr(6'Pe|55Ó54'¡-‡ï™BÚK~½>µN¡œPçy™™9ßÉ!³mϽ#Ñ_ƒæêñrwš‚vÄö‰—õÀôH—¤ ÉRi„ï÷N TÎɳ XY7îPl®vzTÂw+kUHSQy5”Ï•Ër>û9ªHh x´p<èއìZºæyõù/—¾~6xƒ|@ 9ß{•*YzÕ*ÿuTMå­FeYa÷öóçׯ»a6:»ËwºcþR–ŽÎò{«nƒA4lУµq‹q쌟~£¬tÔoCª~¼q$E¥qK&oƒ±“2Y) rKy¼¡Ç7{ƒò­¼Téf¾´ñE‘šŠ4€FRYÞq,]…¥ Ž:Š¿¸E%†ƒ'M‘Š€F+­×´m~í4ÍO ysIú$´M5=A›$}£kR”ÔCóh‚µóµC@ ¢˜PÙÒw%gnμã|-lÚî³]žùÝ×y~hé¨þyD:¹.›} SI˜¡MšÅëƒìXitþþ03ÏžÆ.e¢6„}IÞ¥œ€W_ï•Þ%¡ÉûÍ×?œ)”=‘±ñœŒ­=Oô5#ÜdÛL³Üf<55y=¡•É󅱜<¨2… å éý§«œ¼Àr2ƒÏIÐ1W2š‹L›lîWNÞ`©²qXª ½ÕÏ}¬„y‡*áÀÆÆÖÖÚ†Ç~ÈuÈï’onÞ#/¸Ïóˆ3#\™/}>æKjŸÝœ3%Í ¾9­ÿùñ˜Ët{ÑÌǤ“û¤L€ÈïÃÇFý ùü :ùé2Ÿ“Á÷7?L‚ó!禆ÀÉçj]ƒ«Ó]®ûBšwª’V¤0­ žƒ"§‹W)ÜÊl*ç[²6”½]¾~©1ÿx¡Í¾WMë5'h?/CòeKRŸÝ—„¶3csÚ2ÖÑM-Úa6c¦Œ5óßgžìBšñ}O”Ð(Õ¤V—×=lšƒG\oùØñÔw—‚p"IIûÅd‰ ,rÝ¥'Jvý\® þ²æÐF—èïV‹!¦‰ÝÅkÀu¢„i —’·çd9ÞU$´©¿¸ÏÊäu²­~'ËG:ËÅ­’;6Œ^½y³Êõ¯<£Ìp-°;_#KGõæ1Ø Ÿ@„>¦hØrÈ3ÀÅÅÏl[ËŽq¯>ÿÕ¤Ûµ/¶§Nvö®"”¹–ÿTµ{–^µÊU`SQv¾s¾Âº`“¤[i] òMðµ)PÀÒQ=‹ÂÃCC£¢ X!Áÿ,Œ1iË0?ЬԬ4e,¾`WÉ×&°½‚P–­0û²BaNã_-îe›_äÊ«.RµÉ>z¸q3èÔ-¸ÐçLžÀ 8â’O`„<¼5<´Sæ/˜9&ÚÍ„Òû+Ö+^Jµ,½¨Ô#(«©T±Ôp©îô™cƒÜ Xð¼&¯(´åòûS®›œ7'´gœ÷ôzåRŠ'ˆíoœÿ ¤Jg ßkš¶~LO°K=™êBU+A3ÄÅn{¬ÿÛÁƒUHm¯w†nåÄmÖÒh­_ .½ìÖº›iò:‘†ˆ5¤4ph[Þ÷`SOÚlŸy ¡¡¡¡¡¡ÐØ»ùÂ}Áª¹´ÍÚn¹~)øOضmÛ¶mÛ 66666Š/^¼xq¨Ù§qÑò­AÞ"¹¶¼ùõ¨dÏåN›^= ïÞ¯ôþDø¥ôâÚÓû³[/kbkéèÞ<)Aúz)ŸALéÇ»"—BÞ{¥ ~ºRš«?^}~U`S±ªÀ¦¢ì9x!zC'0¦ïÞÛ=6ål‹‚cÁ°«H£ V´Ú/¥æF0Ë>20'̤ ^Ša˜Örpr4aúzæºYæèÅ–“ÇÔóKú^Úœ?ãxNB„™ñÆЧR ¶£Á¾›öÅ·ãîÀïåaÈ›7 ÀÇ>ÿßÐzŸ¶†<“¼\=ëd7§L¢œ¶çdš=gÞœ6óûýª%›9™ý›óšËESƒ—ÊôËm\fž¯ÜfTš}î³Ï”“K™rDï¥Ý õ‚‹yÏÞ¾4.µ?ÿøê¸ÖðràÍM ÷Ö+úò  Ó Ò9(þUICÑÇPz`ùs%E(ý~¹%€|W îñ}ð<,'áûùBÛ‹63ëÇ6Oq±Ûõá¶ ^¸Õ6b,h^û.üzÍò?„ -}ü ¯kvAó‹G_›`ýÙ ýåë€Î½^s•]œ­Öñ¤ا.L>òòJ£'8­´«ëöMÐmý´ŽŽÀÆU³Àñ(¤U0z'ô€]3÷|³§LúÛ”ÖpáÂ… .ÀÀ~TrT>˜zhjâŒa0²Ê·ƒÇ¤,ËrÖ}Ê  nÁ²ù›ÂŠ ¿.vƒü_ˆõÿÒn£“~}}ëSy>kg/¿øÇøråg-¿{Oœ³å (˜V¸{À? »ú›&Ù?UL<±ãScZBþ‡^QEÜA*&м‚qj‰¨Š%P6`ÏÁó¢I`“OÞi²æ#Í* ¥…¶ í&ˆ± nÑ|.…€æº8C,bˆ°XòMí\]ªŠKÄ YK?hzöª¦£ö[b¥ š² ýSSQWÄÒÂMa•¥W­ò_åÁâ0ï›VØè¬ï~åò´óÛoé¨þ9 žÐgÅwprÌÑgÛÁ¡”K‹·]{õy•SQÅRAª²oÛ½KüÞÔ§Ûe7Ä]›].› ¸ûù×¹ÖyxÙóy»aXÑé^( ÖwoŠÑ'ÕqäXš™£ÙùSç™-=Ír^nºŒîP<÷ƒ÷Þë®ùwÏüàoN É¡ÐLÔî϶k\„%Ÿ/˜´¢óè¡Bæ/\üÂò >ga|Ó鿳m°X:kfQn÷×¼çV¥‘9xuå(°½¦ë¾tÓŠ¿î‡9¡+§LµºW.©|Ý%›OOù(µ¶¾)\y¥ãµ«péãó¥¯.‚‹ÂÙá—§Ãýõ!­Bí2Ç;pJ°ÿ Ê.®\¼´#”:]¦XÉÎPzDù_K4§žŽ³ì?ËМSF›©tSšr>rˆ‡lº|ŸÚ ¤×}‚_È{Ñû!#'?à MãXh¤Ëe{;l• Vk[÷/Øt}Zøœ bÿXû)üí¤ÜNü#È®²«bNyì¢\†þý×Ñé$ɦ6xW±÷ ȲsÇþÝw0~üøñ&<û‹Û•+W®\¹ÜÜÜÜÜÜ I“&Mš4É<îííííí ))))))™™løûûûûûÃÅ‹/^¼z+­]Ü5H:­ùûשò|Æîþöð¤o`éðV]ƒ«³?]¤Š’¿8ÊÒѽy‡&Hq?&Öˆå©^¼E¸"ü ÏçåÒ7SÏ”£Ó ßËj“•7ƒ*°©¨Gç^ù}‡#$õM}/!Š*R|­¥£RQy9¾óè—û› YI­Ÿy7ø-Í×îÕçý¯Ð®C£yŽû±Ž_ÛMÅEþ%æõ_W‹ L} ^GÝCGAò˜iëÎ!M±H;uÅ6ò$p"E1fñ€£ª­ ›r‰¢E½&Ü´@ŒûePf;mµù”Ge}}ƒAîpʽ9(ç3¯'y!aí9çå>³í5 ¯{¼™ãÿ»Ñuê bç¯Ä•Q4•ðø½ð­€á0®û³‡–xyO·¿0ÛóÕš@äœÁ–“ÐõrqålŸs¦¡i?Í•2?¿Hn»Xš?‡LÉÆW’s'PF¯‹8s.<<»üJ!¸¨;·áò Œ¾0èÊ ˆ¯gÿ™©°R’À¿YþU~PöNÅ^%»@™+Î.©…Â+‹œ+ø5hƒ5¢æ>Rø–„6 ®¿ùÉ£& mµmÝå ŸÐW“Ç‚èzgJÔ}N¤(ú,ß¿ÄމV@Ó»J1¯1 ¹V4ÒõæoïøtƒÞŸ[¤•zëŽóÆIÞ‘Ú?©ˆ¿3HHû¥6+Oþ}ó U<Á§„cÇB_‚tSˆÖž„qãÆ7Î$° žy¾Ûq÷î§aUüÊäÕ1ШQ£FAƒ 4hûöíÛ·o8:::::­[·nݺƒÁ`0@•*UªT©÷îÝ»w/K¦Î„ &L˜ý\Wë;bJ%|øã›ßï·õçWŠÁ‰2GÛ.“Ä™kÇv·tT–#~ir¥¸^X/éýø#P ¼÷˜â ¯>oœ®99ü6¸·)8Š~ê׺ìkÌPUQU`SQàDȵ%{ÝàqPb©¨9P̶ {IáÕçUQ±aa¡?ƒ„|‰'ãB _Œÿ©üË-Õ?‡ÚÖ¥»¿[ª}Z³b¥¹0yêœcêY:*PÓæÉ"ÈÍ­¢öAsÏ3’@v¼^2úèÓ‚NÆ4N¤=%ÄÙšù ‡çì–dÑû„Ó VvxϺèÖ÷,<Œùò&¹ á]æ~æð\7Cȱt1‡.£9•ÎåXz÷Ôì0™¹ƒlFJߟó2Ù ,BMÓq²=NÓqÌ'kÇçlØÉïÊmÀ“lãS¼L÷°zb×3â3'„eKÙ ò“0%š Ó|¢¹ñ¥Lš˜½e4˜)sã3ŽKfÄ aͬ™!¬™Í¤3ÅcV N_ï_ó?µ¿™û¯x $K÷M!ÜØ@)|{wUtsÐú]hyo*pàÖïQßSšéƒâ¥Bï<î %óܳ@–mà8ø Š"I‚©Õµ²2®÷“¢6Âöˆ$« oàòeˆˆ€Äyöh×CV-µ¶T=á2jí®›àÕâ¿OÓBa÷–ÅU UŠÖè_á(\¸kþƒücP®)‘ÊqŽÐMZ þFMj+l—ÊQ@<|ûí·ß~ûm¦P–Á¯¿þú믿B±1E>/þsæû§N:uêÔ³ç—ìY¾g1ÜÏßîj ¸ŠVòì†Fš¨Ÿ—èíÛ·oß¾ âu!F;/ýÍ©–Þý·‡£§> û̾|̳[6Æ à …Ð×ÛF~Wø\Iñ–°Y2U¥qö'ôgŒ-õE~æX9k"¬n±xPÐÒ«Vù¯£ l**€Í!›rö·€›qÙI¥Rî'…=¶‘oñ|*ÿR†(Ÿ ?ƒìcì,w`ñ–ꟃÿŸEüêƒ}ˆc)û€°ö¢dq:Þiï`27ØBô¿ƒ0ϨøƒñûÛ®q]ÀÐ÷J·Èb`𠌺†iÇìB÷AÚ¬ãÅ6+”Ó‡€8EQ ›²\t(k wòO¼» v†ìܹsgæñÊ•+W®\Ú·oß¾}{—’fßû <±%/pöìÙ³g³êöªþIÃÍ /“—)®Ý5uÐà ·í¢­A³XÀ £’YBšzÔØ)Ùµôο]ì²µé^Ø?`×ÐC;!ål²]ê¯``ƒµ»¥£³²ƒq¼|4šBú;æMII•“ƒ3_Û]²‰vtÀÃÒkVùï£ l**€ýu«?¢éuJK}é”9`ûÔ\b•Ò±Š´XT%Q.¢ÜÁN¼.ø½âäÿb¶–Ù°|‡ ÌÓkÙЦpÎù¶Û?ÁaµS3‡ÿà‡ %Ÿf¢â/…qš: {;:Z{ÏlÓ€«‰ÍõÀØçÚ±}ÁX=¨FÔ@H©º²óµ+@%›zšu`¨sÿƒÇõ@)²åNÈiPZ¥3jAso#ê›ØlŠ@Ü*ôªJŠXä?|~w^ rÇ€}n[A9í1É!ÀXܘäÏJ'ùìåyש.È[Ý Ûám”©ËjzfÚ}ö%‚™%zÏíÂútæ[FׯE©¿–W†]%·~~À4IÒh ÷÷j}xêÔªW©ú]P/¥7S dHLÙÄ¡œWޤ9'‡ù_Y€{dÊì2ï"<_Ù)Ì‘ož ^V@yÎúrŠO9o|ü¼ Jå¼16ýùÉ6Cò/ÌLIgFæšùRZS|RÞ„‘ɽAîòu¬=ˆÍßM¹š‚á­â¦ƒøûÝែР¸qTCýŒCAè^6¾€Ñ¨ÄCðg0$}ýU­MM»ï´þÀe§ÆV+>êQ¼H§J\s›ÚM%¹õñ—B›œ¿ë‚ÄÃÁ.2JÄKk¸‘þD¿ÃÝg÷ÅwZ¾+>èÀ‡´ÝŒÒ1“kÁ…~gS.»¿Üöõ¾P˜›ÆŒE2Çë½bP ÙÒš=Ú·‚Zc꯮æµkÔßRýg¨5´þ×ÕA¾"&æÝö’ÏÍËpQ —ßKÕ5®\ é«O+„‹5ÄJ`¯óvÞóÇoøß’å@7†e=ï£>úè£ e†±~âAH±ÕOIH…˜¹)-“»ÎÜ>~5˼‚©4·âºòÛ*­„ñè½³àÑÖöÿF&+­¬Î‚QgDÖeŽs*êàP¢ï$ß|PÐån*¯Hê(u`ˆ ?n¿õC›|Y§"X'Ø ²þÖÒÁY¥:#:ÇŠÉÖuOÈø âUHqJÝšdòZ á6ع[û¤ l**¯U`SQl Y•p( ¸ i—S£S˃¥£SQy1„½b ñMûÀ¨È¶ÊjÐ " ¶tt–#¸üõiwO€(Š_ˆ"è>µÎgÝ-ýà–Žî@q»­Ú• ¬°Õ£.H?T(äqtt>™ž2V—)À“ü!0n0 ¹5äý±‘)Þ ¾w ~"Ý;_Ò®løòfuÐN¶o¥ùŒŸÜ°8äVmoleEÜûóõ…, \„ñ \Ó Îy½çN‡5 »ûtöyrte|üäv {ÚìV”o|\—×ÝZØÕù°ãUë–{Ö±ßF™åÄ™³í§:Íw Þg•KeÁËËÛÛ˾k4¡Ó`?pã&ºÝ%«€WúyæÿæJ_316xî}Ø©‘Oü_Ê t'¿+Ç0[â™óxaNúõf{ý&´}n jÚ>/C0g” y0û ÅóÆØô ±ºÙ{Ùe”LšóL3 `^u:O)ÊàÇÓRJƒdéïš"!£€ªÑa‰ï‚|Å0H^€ØüɽAü]ds&ÇtO2Í+*"(ÄH®‚`4ÊZ’ ÄsLe&­i>U­â5@3§Þ÷~­@sµ`ƒ"K@Z¯„Ã9 ›Ë\]wÐ^­tÃ爽‡Ú,ò°ø™,¤A@3 ° hF0µ(Åá—º¹B<,-Cù–•——®å¯U¦tHû1­`Ú/°ø«¹·Wù@±f%kîetå÷—¬G.Ø|"v‡n[²¿1П%~Ûý7ùì…:£©qj¨ïWí¨žZ[ªrŽ:õ¶ÿ¾ø•@!„ƒ Œ§"ÀϼÞÓìÄ€A =$ž¶ÚgZkyñgÏ«U¶®X½+D8$EÝÏš>‚NÆ=ò†´Óp~þ¹’çdž_¸páÂ… ƒM);?«Z—¸ÊöXEKÇíb!88888øÙn¤ùóLÎ_d¼J.ú·>*ÏáX÷ÓN ð6ÚG.V£Þ›Þ,hüiéè,œfüD^ ¢½ö®¸ôï›7E—¶>ùhki⬺‚ÎFSÁ*ÕÒ«Uy[P6Àº„ÖÚ*°EQ¸ ©6i[Ó¾N?8ÞÒÑ©¨¼RG)AÌj—QNªÿ•¤ùV\óæÄ;äéë÷‡÷n°’­Öho¿ú¼o+J>i9€´¦ nAÊ1¾Æ•ó`m˜v÷¿¹Y`$™½Òš–(×¹gЊ˜i ï|%Å”ž÷ŽÄOãì{fAêÅÍ7oVí÷vÅuÀ°wA’o¤ã †š½êýVÕ ÊþPae©ž¸NîX¢œVÆ]„ªô÷þAR¼!DKg2__ºtéÒ¥K™¯uF+ƒÎŽŸ‚šH¢• !|Ž8Z!1111±$Ü:{ãæíý™ã*T¨P¡BHo´O¹ Ö•µ=mMÞlNžò‡DOPŽ}•/Adÿ»Î@0“£{&€iIùSoÕµ ÒÏÀ±T{ÃgÀ‰TÅð û-°KÑUù„b£|â2ßmþMJÁÎ}Aèênµ”eu©õ@³Úç¶Ã· ÉåñlbOïn¶}€Ž®ùmî‚ÔÖó+ Äþ¾­íg˜J¯U^/rgÃPcg8ûÛ©_.ž‡Ãaûvo‡¾Ú{î˜\Š?owå.Ȳ,Ë28&:Ç;$AcµçW6@) ãj¦AÍ»uµU×g–¸>MÒä½ ‹A{L³Òê[°=k•ß>îÕãÏ[Ó1oñv™¯u:N§ËôBó÷÷÷÷÷‡K ×oœ>iÅÕSJ€ûaÛ3yÃàèÑ£G…š5kÖ¬Y3sžI“&Mš4 >›<Ы·'hÞ—æé´ ›-²íœÙ=4£›hÇŽ;vìò.SÌo+$Ý×ÇÅ•µô]þïs%áRȵOà~ó†÷öC“Ío4ºúª³þû‘/)áJGxT!ÊåÁ6pwªã]œ Û^p½ÿòó*DÒ.Ùßð<Õ|ì]æ¯ÅjåmS~€¥W­ò¶  l**€"+²"îÝçί[Ÿù~÷ýÛšºmÚÃV_¿üü**o’ÄÐä¶ñ±pÏ9t^ˆø}ï}ÑϬ¾±Ùcýè•§ÿ×RW,סE4¬ßìV݉0bÏÄ3C:Z:*•×EÒ¦¤˜äÿAóMµ.wð†{÷îÜyð`í‚ö‹WAAÇBõò‡=o&cÅ”SѺԠü["5Œ×b]R]@^q)1ŒºÓ³y‚´ _Ç£ ,},§®ãÙ¤oõƒÁ°ëøça?‚f£¯ƒýbƒôcå \MþÙ°ŒÏå ¯TvܦBe«½ÒôéQ”Ù@6%¢öwÚ«óf>n ò‰4ùS0 BU›Íì¬ëEEù§d{ýY[[ÄB˜X@LÇíõgA`›¨­T± —fUí.h'€Ü5ªurû;\Öi®WWÛ³\å|Býd R€° Oª}wz89[]eÑãØÔ2À/·§z‚ôAÙC^—A(ìô@[ ¨ ýHÓäF÷þ||¬ª×y×O¾w;c=„†Nm¬Ó@(­[-€ØÊ÷¤Ãª¹”µšŸÙDå¿MÜà˜Ø¸*p¸âûíáp‹}ÚcGàçÞ_…‡u4«•y~ Ê? j~_·RÕP7¦a­Ó Ä¡ Šœ·ºÎ‚[°ÞkeewñÕãó¯åä_âýLAM«ÕjµÚÌãÞÞÞÞÞÞð0üaxh<~?µXd pZmuÙc?Ìš5kÖ¬YпÿþýûgŽ[oØj»òT:Vój™›à3رR¡%¸3îFòRÈ›7oÞ¼y!>>>>>Š+V¬X1¸zån`„º$4»~äeò4e‹¥ïâ—ÐÀûVÀµšGi·‘``uZ7ÅÒQýs0T6FBÄùç‡ Á«½s¢ï@°ßiãã´ðåçM²MnAPÐ;—tPÞ± m͆àQÍ©˜«¥W­ò¶  l**YØWðBÂ`6Ú#Á½ÛïÁ­«s%÷¶–ŽNE%w$û'¯M*wƒBëß¾>í¼Öç9 6ëmCìŠ[::ËZëþ͇!àºÔÝËmXX;èúY:*•¿› M`ÛkþЯ×G_Ý îÞ½uëÞ=(}©ü¹âWa]ÀvíÄÚ‰/TJö!Ò)ft„ˆ¢É,Ý5Æy„û=KG¥¢ò÷r+áÆ²;uàð¦½KŽàPðÞÁG'À‰ÃG"Ï,ƒd%IIV2…¯rVžUú4Ô·od_'jO®¢ºÊü^~cÉÆÀA /ÐU>Ïx‡€öOñ¦õLpD'â”8%.˧®ˆˆˆˆˆp÷pww÷ÀT—­d6?X¸páÂ…Y‡ #!'Î÷§/]úÛLçw±Œþü›*ßW‚9Ç~ý5‹IüüùóçÏŸí{wmßÚb¦Ä†'Xúîüw‰îU5ú2Ô<_úF“!0°Ü×÷?õ‚¾‹Ú~ô ÂÑ ýþ´0ˆl[+¼øvp=çÖ;¬êÙWyùyÃöGî~°Œ*pÿ:Ô»W®Fëå éƒF5ÆRyC¼Ív<**Ï Y¡‰µZÒ i˜I‹“­Y:*•Cê¢Y'ÍË|-'+IÂKGe9S’þ·´†¾ª°ö_eæG?~öëоÅ;Ýz¶„Çcb?†_W5Ÿúüþ`÷ËŽ¼½ÂšŠÊÛDAûÂ]ó„îûììx4Óà\`·ý‰°´Ó†&s>€?ìÓ§CH?&qL®>¶ëŒŽÐr}ýŸ>è åÎ\]+ú7íµfÈX;{ùÅ?î@XéÐ9Zš¿~ø©ÄÐÓã”ükX (Ó·|’3Ÿ=oΜ9sæÌá/a-ƒsçÎ;w.óu¾|ùòåËEkä­Rv&x±;^ 8Ìy÷§‘ó¿yVX«Q£F5àÃE=&wÙ ñUÓJDE[ú®ü÷ù¹ë”ÕóöBšcšcš=4Ú²UÃ.–ŽêŸ‡ÜZÙ"gÉ4报4_¼ú¼ s“ Åͧö¥Ü>Q…5Ë >r**YÐÝ–fêê‚ìÇãXHª“첬<’ ‚( GÅŠ–ŽREåùï‹wÅÖé/|‡»òà v–ŽÍlðZ=zK|Õ¿ßñ‘áÔ¨ãöÙƒKu· §–ŽNåe‰×<þ:þ¼ßè2ÝgÀ-åÚ²; .ìï g®su üåuö[géhUTTþ hfëÞÑ®„ê몼JO¯ü[±ðMÓQW퇄°ÇÆÔsppûÞ凋Àá*ûç[û7ìjq¸ lj¾¾å¶&ÀJ` -ÞºêÌ­ŸZ£!Ôqo8£fm¨º»ÆøJÝö-ÐBŸÀÿíê{ sà‰ÞcÇŽ;v,Ø_q¸dw šŒiÙ¯~g Ì<¯dÉ’%K–Ìôf›0a„ `kÔÖ­[·fžç7Æÿ+ßïá'ÇES&ÆÃCÛ„“·¿Šã®–„¾>2×¥ÕŒ]õ´ý¼c‹Ö­! °À¬|,Ý?¥‘¼ZŽvp@,!ÜwI¸¿Ì|2rœÑâ»%Ï}ü òÌ3¶”©9³Û@€IDATÙŽ­¥×ªòö¡ l**Y°ò×yÚ ƒÔÍÉS“}@¬ø(í!énJ“¤1``ƒ½*°©üÃ=…+R‚Y òNc¢qà‡o¡!@t¥¨fé.íÇ´h?Ð|„0ÚÒ±©¼8§cO”< =º¿WåÓ_ EIVR(!”Š °¾åÎÈ¥ž Õj«jTaMEE%”8E§MÊ¥¿8 \¯»Up^m ´§ÐfOûá-2=† µW¾¼qý¾÷#“á@å½qGÚÀ’ VíƒùÒìºK$ЭÖèŒ0¥øÔðà3Ý'kú%ÀšÐU­×ÂæÍ›7oÞ iiiiii0håçk¾X¬ü| ËžwÛ¶mÛ¶mËüûiŠ/^¼xqXYñ÷ùKƒ‹£g°Í˜ôµªÂÚkç—f3¢ù¸¬UÃç;¿ÎÛw ` $Y:ºÆnòA£y¤Ó¢½ô(|ñùâ}’[?¥”²XQÀÝÚÉ6O~K¯RåmE-UQÉ‚®– ë ÆÁFd[°¹`åa›âJÆ}…®6**oÁW(•µ!¹²D¾®Œ³tT–#¼[Ø’È’`#Ø 6؇8޶Ëgé¨T^”-Aü¶£5ôèÞvô§ã %%995zï7£K lÚ¾¯ËÊù m®m®ùÄÒѪ¨¨ü£¹BDÖT2¡¬`ÅW9+æ]¢áSÐûÓ~{zÔƒe«~/:¯þ’çD,[óû¤y  Gjï.K`÷á]gw\A0y®Y³fÍš5Я_¿~ýú=Ûü ·¸¹¹¹¹¹Áˆ#FŒ§OŸ>}ú4äù9ïOn½-½¹oEÛÿ¡?|WÜ!]ÀÏ:ï!_UX3‹\J™._q€Ð”© – K/!¬ei³;r8$غ:ï[G'kK¯RåmEØTT² =©mjeñ¾~¸Å;i<à ~hbr|#0Ä?Ñ{õ먨¼Nž.eV®*Œ—-•å~$G^«Üþ´t4*¹Eîljì £úúö÷»aÐ罬†y€¿~~°ÃpbùzOúxÌ©ÁË-­ŠŠÊ¿ 媡g¾;yÄ /?ŸUyS—ÈÚy|Pþ=3æÌ—öð“Õ¢Ò“ÎÁÊÑmï¤@Zc}ýÔf0sæÌ™3gBXXXXXüöÛo¿ýö›ùùÇŒ3fÌ8vìØ±cÇàáÇ>„ï\2ì:$l§yÄBHj¨”×Ò»ûö ÅoKê«÷xÜáô݇.­_}Þÿ:r€f`ø4zqx—wmœWÍ\S±0ª›ŠJ4'Åã.€PAüNéÎkì¿výbíã ÄÞœ_Î…SEå "ž¦‰© KÊ>ãl $ð¡¥£zóŒ[5}Ïp#àE>Ò=iøÝÒQ©<ÍœO§üÛ9˜z{\ƒÙ½A–eY–¡Kë^EßÿF[OÞ2,XH)B-­ŠŠÊ¿e¿òH^4’‚'5™óľÆëž¤˜)Æ:‰]AsI|  ‚Qg”ŒæêðÈ!óü *T¨P!óï¹ÿ›Wùçð`shñ°Æp+òº1øð+½ò”ñ™ê¹jui°¯Ö ¨7£aÚ« f¹ºžÕ›kMç«–Þý/—;]lzõ,|ÿ`ÔµiÛ¡aH³õÊ‚ÃÇJ5-Ý¿ÅMl<ÒI#} ôx±ñ‚(ˆ‚QWWŠp¯;Îξ ­ I:¥W§ò¶£ l**YÐ9kekž¥fgX¥«.a^?Âõü!rdsH Mn v>6œ-µŠJöH{¥Ñb<(:%¿²“À¶ÆÒQ½y—ù!.üå ñ BP -È•>:í]Ÿmë½o Ü»~¿zè`øãÖÊz[gV«Óiµðó¿m™\—|wIý’–ŽZEEå¿…‘þ7ñ+¡ˆ|¼èwa•îaú‹¢põêÕ«W¯BrrrrrræyÂZã‡Í‹×› µ¶7·*÷-Áa½œÛ ûjïI8\ ÛÛö˜v´ÞüÞî_`í¨eù·Ïô€+Ó±|¥’áööúq5B=¹á¨Z ü¾ªÊvM¢tWóžpÿu’Û$j’@»o|õ;¸Ïôœèº&ÿ<ë×1æ âè+_æ­A®£L’`5]œ¯{èAÈ‹Œ¼=Þ½R›ëã’ ¯£[™-^d•ׇ*°©¨dAë­qÑ î¼!Ƽàäj_Ëy#Ø$X²k ‘7£?‰ªv>¾8´µtÔ**Ù#ìFI! û*c€³¸RÌÒQ½9î^zï]hØ¿RÉÖy`AÐê#3@]£þ¢ùÍ»6&öñ{Ðþn³=?†Ô!)Jê ÖTª å˜1tÞæ‰×Á»¤Ï¯½–ŽZEEå?Éå¡òÐ7>¥ÔH?vúõ_Þª„´Ã¦`ê›ÈÙ³gÏž=ûìyåË—/_¾<]´ïK»ô'²÷žç[λtâCÞ:ñaÄû ×ïÉï@àø ‹®,ƒâî¨C·à`ãý©G¿‚9«f|»Àf)S:ýª€maÛx›ß¡–WýeÕ{BÍju‹TÓAÝúÖ²ƒ×»ó5²àý²0³?ñý‚¥pgÜ-ùîuX~zcÀü½àÔËiŸ“¥£û÷!#÷0náœ0Ej Àcnä~ü£¹Ñöú€Ã »†ÎgÀÕÞ!Æ£„¥W¥¢bBØTT²`å¨q´. lâ0ËÁø¾q´ÞÊne‡"ƒog÷™y¿‡›?Ý/dmÊdK8dÊd³¯méèUTžDüSø^x reù&¡â­Ø¢¯EŒÍÒ=U¼"^¯v¼‘ •'Yd=çì²sª¤(©Ê³ÇÇ™Za¸xÇû,U…5•×J ¢'Ã3ëÞ¡®T¸L~ý——¢ÅvºNé/6˜Ø22Ø åeÿ´Œ®”Wr1EÉ_e©à_ (KJ•€É_ñÉH8ï’¤…£. ìs?ÒÕÞ[î¨5ìܱõÄÞeþ³~_ú÷u‡:WÔªYj‡ÔŸW=j_©ÿyõsà°ÿ¿]"Ùdpó…õëA±ë%þWø¨Þ«Vµ*w-Õ¿9‰öò"Eñ²ôP€ª9{ìž ÇÚCü´¤ ø=P>°à±š j–^‘ŠJ&ªÀ¦¢’mšôØÊÀ%ý Co}–Ty§MÍ\‹>™ÉYÏ”ÉfoéàUTžBº%”òAšhœ–¶(GivZ:ª7GÌh‡ØÙ™¯wº¾ë”´å®–Žîí¡×¹òõ‡³v…i‚ Š‚8(öÀ|x·íf(_tXÀ#KG«¢¢ò6 \æ¡rˆ¥‹>\ã’ –(Û©Bhé£P§pƒ¾5‚¡î—Ô …²7*l.S>Sðû·veæÊpuî¥üAG¡íÈ.·¬¥û•¥¤*¬½4J$AÊ)’wòH»ÅGš !ÏÍÌð\{ä•rï>8l°±qŽjNÅ|ÔŸçTþa¨›ŠJ$YÒJ2ˆ=…2âz0LSêë§a¼ ÈЬf²©ü[W #Å+ (Æ?”^À–ò¥£zsÄ^Šl³€m4׃.»ŠmpKG÷ß%îØww‡ösšuûH ·”kÊmÜÜÜÝ]\`ÛŽ ‹›CÞ™sýê0 UXSQQyƒ(㦌fà=!ZÌÈ y^¥)žúÅñá~l\Ê 8”ò[ ]‡ÒÑ>½Š¾äe ´×ÙsÁ,yçåÏï·ºò4‚®g>*õA#0Ø}äpáÁYç‹i°ήn‡«Ãá…û8ÌÜÿ㦹Q0}ßÊl8„:´µ4¨^]šêή>ê}Ýø“Z­ÀÏ:ï!ߤWöïãÎö`Ç÷ cû–ï÷‚¼þCý‚ -´lYÚÒÑýû‘ëÈñFwÈ(•Š V’’󏨛ñ×£ý!a[².á.Th]°`­Ö@rÎcUTÞ4¢¥PQù'¢MÒLÖé@Ÿ¢wÕ{>{<#“ͶžM7»ƒ±2ì4p•HE5‡Uù§0L¨#Œy¿(o²t0–C'X :ÜÛä™áÙÓÒÑüw¹PâìK…¡å¦zÃ:ç…;âMñ®u&5^ã'8rué®ãOk****–!P¸¦f¾êPÛM€ä@%ܰOù¨ü¼ß^M¢tWƒ+_(·7öe¿o`ÃÊ]iˇÀ¹¯ƒ݇_J/®=m1´þ^`S;¸øø\Ó+3áÛÝ_43j6.Ò¤9ÔW¡C³u0ò«¯Mpî[ÓöBâ±DMRþ7·®°Þ¡sµ„ŽyZ,ì¾z˜é¹à÷É#-½ëÿäݲƒâ–ùZê"u”"ÍŸ¯HBS:@èåß»‰àÔÞ®–kpOvrÊ“ÇÒ«QQÉAIÇÒ¨¨ü“8z3Èqç,ФH[4S¡€Æ·D‘Ïž$©yœnä ù%0<~w»ã½ܺ:WrW›¨X˜ð&‘~aa[+¡bÌøÒ¿Tf–ŽêÍaø4mž¡<¬ºæÑuÈÛ%ÿ._5síogpï¾ë¾ Ûn0î ''GG˜\hN›±«¡öèzIÕ_¨?˜Êë$Ò)ft„ˆ¢©« kŒó÷{–ŽJEåÍ’¶Ù–¶Òf¦íJÙ.‡íC<ÖY:ªÿ>·t7ß>‡†î«y4ìmq´›~0üDHrHrH¶ $ÊŸª2¾lÔ«Õ°^íKP{xýë5®CÙï*Œ,Ù8ÈAáàËÇ“bŸZ)m0´r¨·¹ý-µ½ï ëŽì˜º,Šy—è_ø”¥wí¿Cjå´)!ú|\ƒÈðMv?^ ?X{k›Z/~öüG ¢œƒÐ‡Ú{.P9¦HB½pv¶·ww·ôjTT²GÍ`SQÉ«yš‚ÖA`Øf™öÓV‡š¶[ àö¹£ìÑ¢ EÿÞôgŒÕÒÔvÑ*F˜-Õ‚ü¥qÜÁÒѼy2„5•¿—˜6QW¢¡Þ;å—·ø6†¬Iùóà³ËÝ;Àýõ kÕªU«V­‚éO?~üøñßuFŒ1bĈg¯“ñ÷äÉ“'O~MVT^/j›ŠJ6\L»p|ÄöLX%@‰á •}ÏüùÆzF[C <üñ¹î`3Ýz“u3ðké}%Ÿj¾©b!¢ß9ÙÂ×Ez4 $æÛZð*vâuÁÏÒѽ~Ú¿ÛdjoÀµ€›«K9˜;kei-Õ¿— %Î}è 6kÒë}HKKKÓë¡ÜÅÊgJ]5·Y$xXû‰xØÒѪ˜CÍ`SQ´Îú#)Õ@¿ÆÐÜPœuvCÜÞb+…:ÑE¢ªÆö‚Ã}ö·?ºnÛ›|džº¯ÄÑRð°_èá3Ï/äQD*Pê}Úho-/pmæ~ßõ3ØvjÓv`ÝÔ¦ŒMCXòǺç:]u»¶Ë-½Êÿ>‰×S®&HW2¡P¬üÏ»l‘j ®îh²tÇ ®yonÐ4Hø=åAbg¨]«äÍêVÒØêœþþ¸V®\¹råJèܹsçÎYž#¸sçÎ;w@«Õjµ/a´xñâÅ‹C=zôèñìñ>}úôéÓæÌ™3gΜ×|T^;ªÀ¦¢’ ×lX]°‡¿G> n eò–+Ìy\¤1Vxt B„Ý öŸ@ïn~­Á±ŠÝŸNên*o˜Øûq±Ñõ Ì5Âðp„ùï ¸¢·(åµtt¯Ÿ¦çªåo…+³)Ð f]¼ÅÒQýûXŸo¥ï¦É0ªü™ßß½Þ$¬õ=:høGVðyÌП̴t”*¹EØTT Å>uaò PÚÊ+žà¸Þ®®[YKG¥ò²\ÛbêúyhßþfÇšÀå{Ny'Ž 9©šmj6­ýêžlôe-'ø:߈џ %½Ë”(ö9¯\zª’=ñºäþEH¬’¸1¡¬ËTÜ„R¸³ bÊEyÃí÷7]?%‹çó©\|óºyç%¡z½^¯×CþüùóçÏ¡¡¡¡¡¡™ÇW¬X±bÅ èÔ©S§Nr?ïþýû÷ïßMš4iÒ¤Iæu2hÚ´iÓ¦MaË–-[¶lF£Ñ¨-(ÿõ¨%¢**Ù Ù+®×žƒh¼cx(¥\Tìsç¡u¼k‚ý»ÖåíàÑÙˆca«Á+—3¾…%z*–E|_¬+®Ï|mL“uü`é¨Þ±bz>n®ÃÝÚ¹¨¿Ì5±ƒ¢ïÇÔƒÏööpøò>|]ì³FAÁ‚E‹Àî?ÎTÜ­ k***ÿ~”YB3q›¥£PyUж0•t~<åÓBއ¥aë»Ìž9¸{ÝZÐ ZA#<;î`Õ=SŽÄÁ»^uìÞŸwž]÷ ÈÛ{Ôד`ýùU×7„ˆ“"#S,½Êÿ5äCJ»%W©T¦°¦o ¿›ÖBÆ<\ì .çìEÒ¯_XË #3íÓO?ýôÓOŸ=>cÆŒ3fä~¾      xï½÷Þ{ï½g…µ2eÊ”)SÖ®]»víZUXû¯¡ l**Ù`õަª•UækC˜ÑÚp2çqŠ¬ÈŠ ù‹ù/Ò­¢U´êö}ÈvP<(®vUySˆõÄX±Z–7.*ÈoQKó¸ü±…âüÁe€kwç_,Í?ŸÓ±ÇZŸMZÁ¥O4/ ;~ØôËÞ‘ð~·nÍ[÷µþ\·h:øióöSÍÀUTTþÅ(ë9«ŒÊRHyÇÒѨüÝD‰’c{ALJ-zºõ›ë0hÙ´mÈ;ë`tƒI{†u…ã1—¿Ù“ ÓúÍÙ5ñ,Ô,Ro]õ¯àÈõ­M‚/ú÷m<´Tþ²X¥zB“<5nµiã+ލ8%=Ü÷íÑ8H=gj– ò|ä|òù H!b!ñ ˆH¡Ÿ¸äÆ0z¢¶B©Þù U¶€ÅNF©¦µµµµµuæû'Nœ8qâ?~üøñãæÇGDDDDD@óæÍ›7o111111™ÇóäÉ“'OžÌŒ5‡7¿N•׋*°©¨dƒö¤önVM¿_éeìŸûñºušÃVû _Ïÿ~â/G SÇz÷ƒÔÔ””ÔTèøé‚Îø¾ë —‘U@»J7R{ßÒѪ¨¨¨¼:Â)%šC nÛŠ±–ŽFåuQ¾b•#徂 %w–\~f}·P™¢d6Yð¾äÓ×k3¼÷AÇ"­nÁO÷æúá+8ÓôúÀ%`Û£ƒ‰ë†ÂÐ;£·|an“Ýû».ƒEVsÖ ƒ®Ú.ëÝ Jš/´Z0tíøÞµÞ‹`þàÙ7—| Aa¦ÒU²»ò±|$­ÐBúº{Ï'uË%å|¶•*«ÎÞÎóÍÇçîîîîîþ¬[æ2ÙRRRRRR uëÖ­[·†ààààààÌãvvvvvv™ÂZÞ¼yóæ} ¬ZÞVT6•lˆ¾.Ãé7nX…ïùR2 ³kè‹r×9¬ò­$ˆÉóøvdCÈ{×·l¾«`bµÙ6ÐÒ«Uù¯’쟼6©Ü ­ûøô:å{¬gضy šo$øÇLÁ>Äq´½ú뤿k»Èµ`Üûßš<–ü9÷ÄêÕ¦ æ~¿röôP§Tƒ5º[:Z•¿ÕƒME’»¥ÔK¼Â9A'õ‡`›ºNêÏcÿZ–œœ_¥î}ßžsfp±×w½ûäõ)‘p<öpÞSÎphÿ>Ï£¿À)»«¹7®ëneé¢íµÈgªç ¨ó¿úWjBíÁõË׬µ?¯?¶F;p½îvÂy¥wñõ¹'v}ødPî+ãÙÑ!±þ‘ÿ¿-®Ã î‚âZÿ¶åc^ý:¯ÊÅ‹/^¼eË–-[6‹7cF)gFÓƒŒ&;vìØ±#¬Y³fÍš5™ç‹¢(Š"üñÇüñ´lÙ²eËèr«òïDýÈ¡¢’ º":oë,m¤å!J þJëü}<gã¡ÉòÞÿŒ÷䦲ÚÕPå5!uѬ“æe¾6S‚ä•–Žêõ£ø»(þpy÷ÅÑ×"3_¿í„ø ||`ßâÝŠe k­¶tX÷ÎN8WîNɃ'TaMEEå¿rA‰ö€P_¡Ž¥£QyQ vÆ|= +úE§1{`øà/ƒÇµ…0%ô£GÇ^ÿõ­lÚY»C=Mã*µ50¼Ñ„ü_÷‡Ýž|¸i œ(veèÞ˜~r3Þ1tÓW{åpÿ1%¹§áOˆÝ»)ªØÍ´jìèEñkQ&ÒÒÑe’á‘V¿~ýúõëg¾o0 Ìž={öìÙ0lذaÆ=+¬e0}úôéÓ§«ÂÚÛ†šÁ¦¢’ i¢^NIýÛ/ß¼ü}½ólî’³âyáåçM9Ÿšt‚ŠßÙ~éc°k½ÚÚ ü»æÙšÿCÜ…HAM%Wù›H»lèÚ‚îξ¹ ¼¼<ÇywûGvvö¿Z:º×ljë‡9]ú·ZÖ{(lè»çÁ²ÉPºmù¯K¼™{O3çÓéÿv¦­ÿóÏ Ñhµ’Ãø¾â“йd‚íÏY:J•7…šÁ¦¢‰šdç„® Õk–é\ÁÎÎê‚Ã"KG¥’'Ã7G¦@ß–Ýôœ)z¼ÿ9|ZfP£^i0¸ç·#–©¢ä/޲t´ÙP‡:J¸0îìèË»àÐØ}EŽý‡÷ì?TÎU>ùíE[0(Å €m¼m¼M"Tÿ¼v±*BÛ —ÔüjO¬—V½9L+R¢À¿À_‰TÜ•SÜ6ÄöÆ$0ö0Œë ÆòâqßÛ4kWG;KGù,7nܸq#´iÓ¦M›6™ïgx´e”†>Í€ ðâÍTþü ¾$UTÞ9Çn¨wjVf è¬ÏÍþQ‚†%ßÙ_GÖTTTÞFÎ !:⣴‚_uB•7Áüò?¿³øœ.r¬ÐY=üoo__OOØßãü¼­«¡a³wö×™méhUTTT,È%L9Â÷BñK£ò é™^+Ž-rZk1QÑGþÏÞ}‡GQõÏlMï!¤Ñ{ï½÷*H/*¨`AEED¥6D, "ÒE@ŠôÞ›:„Ò{6Éî”çÌ~···H›çu]\áìÎÎ|愲ûÍ)iृcZö•ÿãçߟý³°¶Îè°wGÅý2´Õ!µÅI˜8mÚ 7Saë¤C¿¬»6žˆÜ°&Oû$mÂY¨êSc}Åá×÷Vù­Ï†á'žÚñÊSPcjÉKM¡{¿Öý¿„>˜þù8˜¼¯þá¦7¦ØjïÜûûIšžê–8²ZeoÏ,Uð¸_mÏf•îí–¿†Ú‹/¾øâ‹ÿc³»š5kÖ¬Y-Z´hÑ¢‚× &ñ­„ÿÁúž%Úz”z?çä»þàH¿²!Á˜ìÿR’CS>Oì©öôÀ”æFß½ð “eI’k´µUêim¢Ñ©î½Ìë~Y; Ú=¼)F§ºwîÚÛìðÐåù¦ úÃó– fxâ«gF÷^ ;çŸhñÛd(ҳ覠4£Ó ‚ Lj‘¶ôN|nt!_ܰkGã6AŸ÷;WtÞó²ï;áPÇýÅžÛÜ€oª‡´6:íýnØæ€þ ¥÷>³›ÏßþÉ8¶ôÒå=-aåš¾?8á¥]c–=7@Ê”2aÖ¤Ÿ}ztkwý‰"P=¤xlƒÍ0¬ÖÀï_úNüöä’MÝõÒ™èÇïs½´Bîþu"Ý‚ç”z\8c\Û ±N²{|˜¿²4µÄƒWE÷í^Ûî áA%—g™TP¯hk'€‡üÏ’ge/“G7p»î.¹Ià}À÷ïë@ ¼ŒÎv'þs³†§×ôÝûÂØ5i˳û¶BppÑ¢0öªY_t†ºõ·ÕºntjA„ÂGŸ¯ï×Þ¹ŽtF* lŽêÑõÛÌÕolª£7¾ðÁøú ø*?*¾ð‘×—û'†ÖûÚ‡5¿`tÊÂ+͹šÔ9Výg¨©Ö¡º¼¼øuçˆÑÙ¦ò1“ÀêoÁöý};räÈ‘#ÿeÍÚ5jÔ¨QÃètBaóä„{ÏÒÄò’Í ê Jk§zï¯'’särPziÄÕŠÉà>Î6Éî-Œ‹Œ®Ù±9Ý3ÓŒîáAcÚ,}$å‚~˜Óú¯F§¹÷2F¥Ì¨ Ñ.Ùbtš;÷ÙëS?ÿr6dx¤{fºÖü¥@ÉO‚]—OÌûmø5…5A„ÿé4I칩]…êѱvÄÏ78àTÖ‰è3Ã!·جÐÚðíá%ß|ñü4zã…µÿ,¬ýdtÚGGñö%3"‚AŸ)=à1øfýgö‚ç®zí¯ Ë}Ö.þ¾<ç;²ì­àœ‘7ß96­üÍ}ë3àÔºK‡k×¢£¯_‡7g>ßá½±ðÃ¥ï'/YWW\yýꀂëYM!Vëí¦½ÿDMø7DMþKž9Í2íŠ2èþ]W®(—1•‚2I~›ƒ½¬µ™ûˆ™{« Ë?§ûÍkL Âÿ´G+'ƒ:[Ûª¾kt˜{ï›/?ZÐoë]þ…xñê ß&þØ9÷‹ýëóOÿ>¼öÀº ï4ý ï4:­ Bá§g‘ÄÞ‚¶ù€ü_ñ ÈßýóƒoËÓ½Á™‘÷Šó[xué›ò %áù¯þ<ôià7¸¹à)nÙ±7~À3÷:W¯Ãûû>Íï gB}xi”ú¡ŒVz Ô.V·V +œ»vÖëüuXquùÒ'`ç·Ûçîù æ.œ»vî—0³ÓÌN3;ÕjµZ­Ð¸qãÆCëÖ­[·n íÛ·oß¾=T«V­Zµj÷wN]×u]‡ãÇ?þ_Öh6á¿‘t=ÿŽ ÿ)6)%ôòe8yøò¯@es©º5ÓÀj‰³U¹ÿyÔ­¤šgõhóC ÷ gqG#MŽ ^3=¢|F÷šPØ\›}\ÅT_Wo«[´GøV£SÝ;^{íåÉQ°ùóõ©;ƒ¹'æ¯=sçç½W¶¾¼yéÎúðüÅÒk5 ///Ïé„ë»ýÒj |ÚøËÔP1RM¸;’|R'&†ßØeX’À?Õ÷íÀ«F§„ûCLÿUÓ!{oÎɬÒà‘mßàó4X5s+ë<â¹°Èé–mιå“ÃÂj¿ u6ü fL_ùùð÷­S…KÆ ¬jiÉp½Tb‰ë›Àmµ-Ï-Êé]q˜.J«ÍqÿúË[¯_¼Ðr²rkd7ƒº/–ÖZ}»víÚµk¬_¿~ýúõ°qãÆ7ÂÑ£G=ZPà ‚6mÚ´iÓ¦àk»víÚµkE‹-Z´èÝ»ßsuÎÕ9W¤ÅÒbi1”)S¦L™2Ï)R¤H‘"wû×NbЍ üÖÓi›­ ­d¨Ÿ<&7ù¢ÉÊ]Ž\SixþèÖÙû%¸65ngL6¤lL?œü‡Ñ½&6Òp¹…<ôÚm£Ñiî½,ÿ̺Ùþ=½UŸoýðú×^0,ª—ë¥Jàt:.<üµ©Cýa&ß.ýð¢(¬ ‚ Ü-ZªnÒ/´å‰R )ÞèTžóΞº¨@ûô&‹/_Ä|¼ð ÜVy(naðÇXayÎÚ ~…µUêÓiS^„Ø/â¿æ^ nozo…2G#VWžøÏ…µ|Êm”«.X3ûØÞ›Íf³Ù eË–-[¶„©S§N:>|øða¸~ýúõë×aáÂ… .„:tèÐ6oÞ¼yóf›R>®¦Ñ)…ÂBú·äྦྷ-ÓæÞóùÝï+ïËÒ²hµàîF§) Œp~£4†·æŒºþÞnøtÊ”Í_õwwwwX´á×¥_/‚W®¿ybćF§AxÒ¤•M½/ÁúsF‡*üò×R{cÊËÛ&JÐÎÔ°c·þÝäÒ³W+@ñJþV,·àxOÕ«£ûF§þ=i|Žˆÿ<¹øõÏÀ/ÜëXà(ù}Ä„ n`ò–½å³·~Vm‰²Ø5ÌëL›­ÿóñù#Ä 0`À˜?þüùó!66666Ž;vìØ1˜6mÚ´iÓ $$$$$fÍš5kÖ¬‚‘mþþþþþþíéÓ§OŸ>Nœ8qâĉ¿^WÕU]Õ!l}Øú°õ¢À&ÜQ`„ÿÁâf¶Ù‚ Ú΢ª¯ò„Ñ© Hª¾ž¥P<¸èÆ2å ¨®o¥¢ÏBòÇ©;“AÜÈ„e×@"I‹Æ>²L“ävÒUÐÆé ´F§¹÷ÞÊ{?üµ)°`Öªy_ö6: •ô8ÚºÈÍkôiK–·yշл÷S­»= û3Ïß<êh ~®%¦x ‚ Ü;§HÐÏ4¥rRe©½Ñ¡ ¯üÂZãzÕª¶+ËÖþðÔÊ^ðDÄgú͇¹ÇÒ6†AÇ/[ØÖÝè´ÂíÊÿœp½}Ü©˜_ >G¯ö(*CIsøceG€laKÿýùUÔ_µçÁöž¹¤}ùí甤KäX=zôèÑ£ F¬%'''''L9>|øðáà FÄåŸÿúü©¥ƒ 4h|õyÔçQ`·Ûívû?Ø’’’’’’ víÚµk׆ƒúè£ 6)ˆ‰‰‰‰‰yóæÍ›7Z´hÑ¢E‹‚ÝL·¿µý­íoœïŸ l¾¾¾¾¾¾pèСC‡A:uêÔ©*T¨P¡lÚ´iÓ¦M÷î~…ÂIØá0›M&‹LOHмÔ®ñ®¯ŒNõÏŠ´÷‹ Ó¡„=ôXÙ–÷˜3"÷G¸\3fàù¶×ÅÙ3÷­;¿Žð`0½ÄËòï ­×kKAÏÖÊê1F§ºwÞªýê¡I®‚¯÷‹ÖX 5†ÞE:ŒT>k;õ㯭`³ÝØëË®?Œûø:ô<ÓÿB·aF÷’ Â#h)ÇõoojW$XÑèP÷_®gΊÜ$ørЧŽoC£¶U–·9ßíùz­áôº“ÞgÞ{–í uLò˜±mü@±–ÚÃ"·kÞðœÆp¥Ì5éÒipNÌ{,7J• ¥|y>æß³hæ]¸PIRPd%Á5,v“§‘?P +±¶hÑ¢E‹Á… .\¸'ÛŸl²=8‡ÃQ°‰Aþf ù_K—.]ºtix饗^zé¥ÿrÛQQQQQ›1„‡‡‡‡‡LuÕ4MÓî `)n¢À&·À|Õ2Ú.—6ÂÕËè4·Î/Ø»Kày(»·˜Zy>È•™&Ï…Ëu¯)«BzÅÌÚéN)ÜsKå ÒÚ‚¦ž©[õ‡x×ÀœaŽ—ó|½×&Lþúxvî8¸<®¾¯ÎñÊ*EH!ì:|zûÆÒÐâ¹¶›üjtï‚ <º¤äÿxàzšÆêþ9·àŒû…êÐ(±Zɶåaò… fdAUg­Ù•+Àê[^Z²:·êÞ½ý=i$#½b¦wúD¸RçZÜ¥—À4HÚ`¾åòŠWi¾Šç ÿ»¸T…ÒXµ:g´­åÌ­iF÷Â_}òÉ'Ÿ|ò œ}æì3gŸÊ•+W®\zöìÙ³gOèÝ»wïÞ½ ¾Ö­[·nݺ0{öìÙ³gÿóù¯]»víÚµ‚Â^þÚp“&Mš4iddddddÝ ÂÝ" l‚p ¬åäÙö¶à:á:¢Ýùùî7·<[÷“Pnm‰úU¯Ýñ×&üó6$TN ‹N‹µÚF¦'äóЂ¶vI³j[NõàÛ>}KÈîJеDÓ”>1pÊzÌvÖ ã+N;5zlÿíØ€µsÀ7Æw¦×(£Ó ‚ Ú&=ZŸZЖ*¤¿ltª»/59eWZ˜±áƒéŸOì=ÙfGqpuwF) ÈY$*ÐV¬Z_tA<|Ÿ·ìí¯V@Õ—kŒªl»ãË …DþÚjñ‰Þ××Âõƒ cÞ¯Ÿ<$ߟ¡Ü¶µªìû^›§{Å»}5\m¬„´-6KI[¸Ñ½òWeÊ”)S¦LAûÒ¥K—.]‚+V¬X±–-[¶lÙ²‚¯8pàÀí_/=====Æ?~üx€¡C‡:Î;wîÜ9£{E¸]¢À&·Àò¸¥¼ý P–k}ŒNsûÌòEsi(­„gUEjö M„”ýéG“‚!ºJìÁËn ìP»»7:­p·˜Êɤ…m=YçæEž…[“?ô‰sÝ+?«ÃÓ{L¡>X,‹Å‹_[;hNxêã¡ôkitZAá?é׈Óÿ¸é·$³üŠÑ©î\TÜ{Î ‡±ß½”þv¨×¹Bïà³÷¦Íœ}®T¹xñj¨èY%²ÜløÍgG¿Ÿ®@í€z{kn7:½p·9ÍÊHW0\™rí+ %!ãbr{(:* :¬”Z¾°¼L¥Õ¦S÷.‡rQÕ\7M…´ØMG­!·¾{¥oß¾}ûö…·Þzë­· XBGQEQ`îܹsçÎ…²eË–-[¶`-·ü©¥ùST…ÂMØáØ~0o¶YAýU™¬T1:Í]Pž@}„%î+VJ–¼±æBîeçÇy­àòôè™zAÖXG±Œ2w~9ÁXÒK²]ºé'mÚIÍ©>ÄS.íðË(øz§®¾x¹{̨Qá‰6õaÏ ÛÆ AAEŠÀÏk¶ž\8ª6­žUi°Ñw/‚ ü­“z; šRô•F‡º}“濵äÃЮW£¾Ý’`ÕgËK¬1AÏ”M»?¿kû×­^\PXn™/f—Ow‡ËnW[ŸoÊ—g^(u=̳¼;]Ô8òdÁæh÷škƒ²]¹©m1ÛLF÷ÒßËQ6›Íf³OÁ& ÷KþZnùSKÝÜÜÜÜ áf{Âÿe6:€ <,ËÍYÖÑ 4Ðû©6à§Ît7对PéÕRõåp±[l™³ß@LŸë‡®þ¾qÞ±þ/@pp`Ñ"Oƒ,K’\ËèÔ­’ëÓßÔˆN€~]wjÉwzÖÂë³ás>Rô¦Þ "SÿýyîÚÛìð04¶ïà‘û ++##;ZNì0ªÉtøºþñŸú‰<‚Kd ‚ <€NHg¤5@= P@é>n†óoåOõœxîA“ËB]½ABí пÁ ô^9P²légН€îöy«s[xÏ{ZÖ[cÀk«Ïb¯VÀ£ï@¸—4Mo¨‚øI“â‡ô©;S/ƒ§Ë}¾÷L(‘¶¼Ì,°Ô7}f¾ÿù”lÍW)@§ÁZÜì²æv<²ZolJ•ðÏÇçæææææBNNNNNdeeeeeËår¹\šššššZ0B-33333ó¯¯Ë<ÿ¸ü×ÅÆÆÆÆÆÂÖ­[·nÝ +V¬XñLåî.Q`„[`ilîf{ TÉÕÍ%+‰’|ùÿ#Á–ÍfÝZ ÊEEî®R âJ'7¾ú\žÓ ²K漑ý „ÿòax°­¶.·O2:µðOL•ÍŸšž–Ó‚1 žÓRÿ瓌Nw÷ÅE^™0¯ Aña·ðF)ß7æÏ+|×>š<éùÙϯ¯ŸŸ·7Lœ7±eà1ïžñüŒ¾KAá_;Iœ~øDz\Ú a…hfÂñOŽÌ8™ßy~Ý{Q ¬þö§Þë*€Ó”×ßi‚ G‘ÒÁï‡8Dù‚B[ëõ3°'ðR&­Éëâì™û\{,îã«[Áu]ìz Â>ÚE¾ñ-Pžñz]ãrªõ´VФ0À’g¶Û¢Xv»Ýn·|õóóóóïy¢À&·ÀšjN³î}=õ¥ ÔT}™`N2ñPî ðgá0Ä ž³Ü}šÃ•¢±ú9;\¾xM¹T‚:úî j ~üµ)‘Óú£Ã ñ¡*}ðçïÓ@?¤Ù´c@<ð“Ñáî¾·j¿zhÒM#æóÿkfLâúøfI­¡Û-ßPâã¯/Lõ¥¦Rm >ýâ›Ë“à À;hX€«&‚ðà:Áu}ÐêÄÿù˜#ºÕCj´ö˜j™"åw ödŒíztYÑâ³>ƒÁ#Ýs¢{&ôÙø„ÇãÃSÏ KìÊ*ç(uÔèNî7=ˆ Ò4HO}#ásH®›¦$Uû>s'[+(•i+÷1¸m±§{z¨÷2:5(×›Ò ä&òLS-ò?¾jxcm5)úÆ/Aáá _Ô2ØúPêÝüÿâÝöÝ„¯øág¨W¦Br‹aP`¯^ëÀÎí[›ìyú´øQ]PÛ¿¾¹æÇÀv¶KÛ¡Gõ¾e»^ÛÜ0º·„û-ÿ}sâüÔš ƒárÚÕýÏ€­®Ñ}¡LxDÙŠ97Þ‡—®Pð¾¼°R“ÔùêP°4µô´~htA¸?DMnµ´)Ûf+h;—©[”‡h ÛåU×£¨¯T )Q¿ZgLõÍ ñƒÔ9©G’³àâú«k.<9‘y]•Nûè’ei÷Í›Rèßi{ÔNuïØßvi›jeµšVrWä­Ïë £œÏu{3&µ}Á ;„I‘RQ –®ÿíëoç¾xyÎòF§Aî}…~J¤^reiüíŸ'*î=ç†Ãg;§-Ÿ} ??~yLÁóÑ}¯\މ†:‡Œ¬Q¾9ýù™à€|¶þÖS0qÚ´Ao¦‚ÿÙÙw®Ñ½"ÍÑ1÷©ìP¸´êÆûæÔ9)IÉYô‚ÿ•åPÑ«T¥jûÀKöÈõ)ktÚ[§äª+œu¶)ÍþžÑiáþk° Â-°ú˜Í6øsC­›6À¹ØÏYÒŒNg<ÙÛq!™Åׂß9Ÿ‹‡ájù¸3—jÀ•î1ó.}>î^šÿ |5°CÐ 0EÈëÍuŒNÿè0•gÉ:h'õwõ]À£Ý]Zcu€Ö’ö$F§ÆAÂëqý_†Æ•¾oéߤöÊÈ€]†5ê5Þþñƒ·^ä¦äF§Aî¹ãÄêû/yLÞ „ÿµ)@JÙd-m|1îãeßäÁzù×C›^„è¯//‰I“d’Lï@ÿuƒŠõê À6ÂÛ>(þú‹@¶³Hnü ñŠÑ] O½ªµS@¢%y^âw¶4¾Íc §‚›Ùc[ Ñw#‚ Ü+:üúÍwØÿ[›¾°ûȶ%û“ µzr‰´z`Sì.›­lí~iö´ÝÚ©vËFpz}ìžCUÁTËô¶üð$<É>¾+¡°ÊŸú?=áÈu äweåm¿3^åýÛAxÕ`[‰¢`ÙlÁº °°íax_–Ï駤¸žËssû2 70ÊèT‚poIúŸŒ"‚9LXç nµìÅÝvC±ŸŠv)í0:Õƒ+S˶§Ÿ…˜ªñ /O„œµÎºŽ)àó¸ç2ï½4.pCȇ`nbZiùÉè´¾K§®¦\¦þæ÷ä¶Ptw÷¢5ŒNuû®ú^±Äô„—†96¶œ8qøð©S)•Â%ð¯ìáÛz.àÙ­lx}k³ '¿8ºéÔ›‘\,­hÁùÆE¿ß|Ô(|zxø€ŠFß ÜI>©ÃA–%I’À?Õ÷íÀ«F§„»ãBÖÙÍ—ú‘×T?~Z7ï(7/Ö—,c­_CÍš%›7ÞÉ>Iž©Ð*¨ýkÍ'Có7[Wnò&4ÉmùYÃuàÓÉg‹˜¨ ü[ʵ»ëqˆ™QYÒ¿·ŽÖýîc!ü«y%–€W#÷5ÞŠÑiïa?\ÕJ*çá¸~vë”/_½:D– îP¦ŒÑéáÞ#Øá_°ü`Ùhý\ÓԃλŠvAØn[þb­(Q¶êÏÐ2}X|'ˆ“舾±Ñ Ï/ÿ`¿§£ Îç\@Î_ín¬˜æJ-Aß§_Ð7P…°À¶Q_·mów0¶í Yï¾.—ÓérÁ”ËŸOx»>ô<ÓÿB·a7½àÏâAßñ8 ù«§´ 88~oÛ#“a{¯ßÃvo‚Š?Wq•þ\@¸ãŽF½¯Cêà”ái QߦÅêMzR“aµC½–ž¬eÈ%æ‡5ºWA{¬Û«†c~ù˯°ëÇíWö…ÄRñ “<ˆ˜½Ý'Ë{´9Ñù¹°yÝÑwV]ÿô€NUÀëw·EÞù»ÞXg·»Ñ÷&<8´zi½/$»¥¼”0RlÕS4vK»¥$÷/’[b ã[¶ÈÏ@#i”etê{Om¡œUÊ›‰å XÊ[úZ­€NºÑÙá^#Øá_8’qÁ±k$8Ž:·f8 \p±ºU†êá£õQÝ]pí½¤1qøEúWñŸ)PÚjêA—ü6^ŸÑÞïùÕ)PZ)çºð‹yíº~õ-P:kœk!¬nÑá[NõÏôHu€ SÍïY?jsË~Þf‘+V²dD|>÷Û©SçBy¥òÊrÑwïºó}Ùgq'8šuh艹°û£í»÷? ÉÅK¥D7;vÁ¥VB›Æ7O+g/¾qµ#ø}å÷ºOxÏðóõÞot/  b›P˜%æÅ¿ò:i òÑphì¾ cñPsU=½Zh7»sÏ–»`è¤>ë_Ú ÇÙÿÇhøfÓ–u—A­É«uBã#ͼëî°‹o K(8Ö✳™WÀæe)kî½­ï{е8…[¤'éúHù-íLr ¤d¥—Jnzum”fÿþ¾µƒC!¼Càá! /19,IF§¾ÿ²Ýr+deÀ™3—ןH‡šeK[›4ÀâÞ•CBŒN'÷–(° ¿p*ðJì‰Ð&³øõýPyBÉØšw°Í»pkòJ;•\®§¤<³ÒФ­Oò%KgSòö[Xä*x'z…ùº”Èi}ŒÑ© Ÿk‘ ýb†ó™Ü9S üÕðÑ‘£Sý½Ä’‰«SÞ€—Ê>1:è»ô#:tXßí—V[`ê/ŸõnkpïêîçöõýËuÞëÌéK¯Àï«zú´ˆm“Øø2H{äeò^¨áU­é0¤Œ2ãÊ,9j†Ô‰®Ú*õ¨_aôM{ò­@Š6ý ÝÅ  ü/¢À&)·çüMfÖ}ºJù}L{~bŸO6ÂÕNWº_kSp¼]²K6 žË{õé!Cà…-¯å mPðƒ®HÑòÎ[ùw4{LÎæ¬ù`}Áüš=ÜËÛzxL6ºW„Â*s‚tKF|j$»Òú&4µ¼ëWuøUð™p Š~8,bXC-q¶*F§6^Ɔ,-u œ/Uê5/_µUU𱺛ýËNî-Q`„áì/ל°Côð„rgƒê¿—+Yï£S=zrly§•ázíä^ÑC mqÆÚÔž`M°xÚ>À„€îA[À»®Ç:Ÿ_ŒN[x\ßž¸ùZ]ÈnãHÉ*ÅR#ŽÿÁèTµç§ímö~ ¯¬xfô[±‘‘––™ c*¾{þ¥§aÐÔgÞP×è”owø¶Vû+ÃQÛÁ5'¦Ã‘~ֳá­ûc}i^™î°ñÍ}×WnžEÜÀ7[fÖšÿ„Ÿˆ|7 ¨Ü¨ú÷öBŰ*—;#6aîQ`î=Rk¬GÂñgwøãK8ü率ýÙ»žGìû‹ƒ"Ïíü*ü6›‡jt:A¸·DMþ…+öøµg6À™_®…O‡íË–«ç锜#‹ŸÈ&ëhÎÁÌŠpmcbÓèËÝÇ•qìÃì=ìÀ¤¯{`Yð®ë9öFÁMoftf#$TN ‹ƒ´Þ™µS·A‰×ŠU*ÙÁèT̾0â1§ ̬0eð×.(R$448>nýÍc““¡fÿ:©UgöÎï3›¬VÙ—Á3Ú{¢§ çÊžv»°:”hôM¯­},˲,CØêˆE×Ãæ’‡âœ \_+ýàÊ„ £+CÉŠ¥¿ˆ\ æ/¬í-‹¾[¡°6áßÈߥù¬zzóù‰p¼ËÑ‹§Ö‚²Ùu^Y?šÜ;Ö.Z¥lü^šÿô¯G¼>bM±•a¡v•†gk>:u}«õuh9½]Ÿ&sîÿýdqLÉ(öV7÷ŸÁ­­5Ë£¡Ñ½,GÚ56kJFH>æHʜŹ+r®‚çQÞ^¿@øG«‹5÷­nA^5Î\ø%”Nk×b6Ç}si:´lY­Z·n`6›L–Bq/däeÔÉZ¥3ËU(ñ1\{år›kÁðò™g:Œ{þÐN‰J§ž§;oú´Prz™wŠë;í®·¢ä¸r¼rÃëép}¨x¶ª©B²ùܪÑw œ&‰=ÕÜ1'c ¸]·…xx€ÝÓrÍý²Ñá„û%Êgf©,kêHþ6uKÒ÷WÜ©å½ žþîó½¯CÑSCÃÊW]¢¾>F§~ðÄõLLŽi±ËR¶\Ó¡m…ÏõÐŒN%÷‡ØETþë5sšU.h«!jcµà°h¤NÈçíëÑÐg%x¿à±×Èn”Û%³\*ñ»˜Þÿû5°IY‘ðøoóõ~|\Þg}€”H ä2ú.î>ÓK¼,Ïm½~Xëz¶VV? ’‡|V ¿9Ždjrb Œ|ûév¯Ë`ºnN”ad—7J?ó*¼ðÁ¨—Ÿm R´ü›ôÖò–¼ñ´ùÚv4ùšÓŽ&a>Vp\ÿEOk½ßßú> àÒ© aW>ƒ“Ÿ;{º8üÖó—ù›ípäüñ'¯À†$õ*Z°yÃWo}Vê»l(ÿj¥ÇÊ|å<*þ^¦!”“+~VúU¨Ò£æôJÛ¡”g™Å·Ý+‚ ü/Zå µ?ȋ̓M‹ ÷Rn¦ósøtë䙳ÇÀÉöG¿ÿ#Nõ<1òlMH÷L“3†€$ɲ$Áጠ;·Ýø¼ àB‘uiðÔØWú®†ª5ÆTé U/רZá+«RìT¨ˆæ<ÑàŽ'nÐŒ64:Ø€ÂPXû“žE{ÿl yÔVZ,g•ŒN'Ü+ù›d¸eIŸ ÉýRÆ&Nç\¥“Ó¼{ÖõÅŽý¥LcðŒtïu (ÄËP<\nÚ y‚u…y¶¥4ð–щáþ#Øá_HÊÎNµÁ¾è3g6-„Ò­",•zƒ÷9¢Þ{ŒN'ܪüÝâW'¿s-ÒÊf6HŽK1Ótëwà·Èwl@=ðmåÓÑ/dYÚ-×2:õK=–žžâ„ø2I®ë(nŽÜXâ˜ÓISÄŸÿŸ|;iö— NÁô}ý?ÿ |}ýý}|`ºë«rïÍ€†?6‰¨§ÝK¿“³¾rúLë0ñÇÏAúŠÔíé‹áüÆ3û/.‡¼?GªTw«™S% –¯Ú4lþ»°lü‚€UM`óü 5w”€¯•ª]ì[(‘XzJ±jPrhéÜâÇ l¿ ß—’Ák·Ï0OùÎó w—Áö`Zòýüz+ƒ“ GŸ8= .¸øùå–p±ÁùnWB!©bBµ”²°ø5¥ç|!3BÚÇBߟ:wÒ‚;7 êåfWPê8”ŸS©j¹3P½r­·«ì‚*Ýk>YÑß軼‡&³Cï YŸ8veϱnÏx€eœi¶=êÎO/š¦7ÔAÚÚ!epúœä} œu½ë¾¡^YÝ ä|€w¨ îåíážNýð¹Ü3¶êÙ<ÈûÜù¹« 4j^ññvF§„ûCØá_p¤å%deÁÎýĬ[ÅŠž-mÿÚ>­ƒBN'Ü®üMâr’Î_{R_Íž™ìy*CäEà×ßûSßhð}Æ7+ ,µL{- F§þ÷Ò+fz§‚ë.ÆÖ„b{·Ì ,‡ÍoÜýë9~q¤æ<¯u>bÜØÐzu§­M¡®ÔHª!ÁgÛ¿u|¨B #h˜ÿ<£{GÈßÝïò¼‹¢eð¹îû© Mƒøm…/JÍÈûüòãòÒëêÁ•ñ—¦^ .Ý©»nzѪL;¥YøêóŃ>î ß¼ñYï­pø‡¾ÇúBđ°Ë‘BÝÀï¤ß7h¹°ý›M¿½±6G1£{ãá% l÷GþÚeÿ¹8ÿ¯-VXÇß?¬üWûF¿}­ ļqå»kC!ùäY©oÃÜ*‹/}:‹· o-Uhÿ$˜³bV ¤OéœâÅ¡Ôæ²Ÿ—HR¯” (þ3 øîéZ½ÿ÷ëž_ŠMQ èoèû´úýmΖ¬Dðȶoðy¬š¹•µ´þ×!e¤+Ò¾ÎXŸ©‹Ò?L‹íuæjýÁï#Ü¡èñÀaMŦ÷Ëù~W·žîæXyªeÔŽ/s ys£S Âý! l‚ð/¸\ªêt–-ÇŽýü3„· Î(ñŸ÷¯²ÄètÂÝâB uFBBpò§ñ )/}G\uÐCµEÚ*ð¸âÙÈËü4o«ßp±Ï÷ˆ5:õ?Ëë(–QbÞ¾~èêYˆ8z®Xo°Ö²ýj¹‹k±þ£Ù™Hx±û੯èè‹cbàé3/þÖ?^WÞR_Ù R´é)Úè^nW~AîÚð« ×ÏÂ¥aç}®äAéšå§”8¡;ÃK„“âgMƒM›ÖVÛ:b&Fψ}rt‡žsÓ»§'ŒxÞl8©í«GàƒÝomø¨ø}ÿáñ|2È ECÏ5{[·¦ö.ÐÏõÔ±YP¢Y™ÑÅÎLË M#ë*– :ê·¤hy§øó& lÇ59ï”ëuHHˆë™ø>Ľ|ýH"Ò9yZj04Jjv­ÞÙ‚ÂÕÔy>øÔþhq|f” ¯ÇëIg!~ôõw^‚LÏLï,øâÚü 3~‚ÖéÖ7ó„†ÖJ-Ú•†ìÒYå³KBø¸È‘aïAøÏ‘Ÿ‡îƒmJ[нÏoUnˆ?xÏð­ì½¿àÓôƒ|vÓ|Ôèé¿j:dïÍ9™U¼:¹ýáãæMå­gN'Ü*GÇܧ²C!eIzLŠ ŽŽY粚‚kê/õ 7ÿ5!Ý p¿oNHS°Fšb­âßýûîô¬Ksç‚÷<·z¾V¨–U²yC±™ˆðˆ6A¸ Nùr… ¡½ü[„I²<( |—Ñ©„{E¯¨¹ig )&ãDB*$žM™wýqÈu:ŸÍÝnýì=Ü"ÀÏÏg_Àðšîáém)PJ’ê¾@¦»ãɬ‰p-éúGWÞ†ð)E7†»ƒm¬ý¤=þÎÏ¿¤Ý÷­Vü “ÜÞ|~Æ:°ÛÝÜl6˜vmV›‰c¡Å޶æ¦ÁF÷‚PX$oO¬“Úâˆ-?ŠÿRʧXµ‚FþZq;.nyzÏhˆ¸^9A†„Oãç$M‚äb‰¥R"àÅÇxS`dձ݆χ'/w/:Üv?»íÃ}lþàxÂï<¼4$`,¼ù仿ò$Ô÷mz¢N¬š¿$dÍ[puóåðkÃÁ·´šOkðñÛàcÿƒŸú@­å &Õèöv/ë …|…½ò Øò ¦ÙW3[f/‡Ü•Ù¾ŽSº"2'Ô^P8=±òÈÔS)pâ“#ϲAú©¶ôúKêöô7 ³^ú™u`À×Cú÷~*¯þq…Šýóòw>{êÛ¾SËC‡±]›·ž O¿Ý{Ö  ëÇÌuޝ¡È–eW!¸sHÑà§ ¤Qh^ð(è]âÉeÝ+o/?_ŸŸþºVšp¨ê|m:ä˜ò®gͯ1ö"¾À<ÞkùÎètÂúÿk§5Í*ž±ÒÊdx$S°»§[]ë~÷±tÍ¿WÈ PÅÛäÒ)9G.gtzá„ãüÞÃ!ø’ß°Ðt¨Ô#âzíqF§„ûCØá6l[sÒkµ¼Zxxùœ€Èè"ÇK&J¸_$Y’%ÒS²v¦= I©=cçB†5koj˜¾7•¶ä·Å«¶O#ð?å5Øï$XfXØ ÜÅ1'2g™£2\‰Šmqé„ Yv쟺u»µwœ£óÖçõ„ñ5F×ÿàMX1áêÕ³ J•š5+T€ÏæÌ³L[ ie¶wßÂÃéïFôœzöX¿¨ßáPøþÇ^€Ä7ãw% †øà¸‰q2<éã”®0äµo=Ñ» ÀÖmJ‹SVÃ[‰úþîÝÑ›“º¿ú<½g„ÇÀPè<§IBßíµì gçƒM²IV ì™nö,ðÙì·Ö{¼Q{b§W< Í‰Îϵ8 S–ÿî“"p6îtóëÁã¯ÇÜÞO“W’§¸µõ(çÞ~ùô+½¾€’enl6‘_<›~zð…wÀô†ùeÓGà5Ák Ç\/É—åKÐiýãsÛnƒ¢Ú†4€mÅ6ßUÏ<ôóÑïA’nÜûi·Jƒÿùugž?uþœ ”¯”Õê§52sbvk'ËÓ¥¥ðøö~óº|Yó›7>«3¿È©ÁÇÛAöö¬“ŽÕ¹ cuæ\ÈkžÛ>¯ ¼2âI#ôËà9==;—oýcïtÐuMûo߇qÑï75 Ÿ> "´;R¿xL¸0öì¤K/ç‘ë™ãž¾;ü7úî‚qÍ&µ|5Únéü\Ë]ý³2Z‹í¡9¡QEZBàŽ"Ïæ@¨)â½¢Oì²)<˜”ùês[Äy={#xe»WñuY“ZÒŒN'¸F)ó¬–•nO­ éq™sÒFƒ²XõTú€w#ÏgüŸ€`»ß¼P'ø\ð óÙº¦kºØ²Ð9ÖììÙ}C±œ ¤r+¡tFX×Êbsá! l‚pvmŽ ÛàÖª¦¦¡DR˜V®ªÑ©£år^ÎëI¶ô¦q ebÚÄÄó ÌP[¹¼ÀÝÛ~Îðî;ØÏ<'¸'yo»#Ýœ#ó¦ÂÅåWÇŸ¡=Ь(ºÜV¸G{T¸õó\év¡ÿ•%0"rÐè×.ÀÙ³§N]¼ý»mس?¼½öýwG¿ ¦_ÍóÌ…x$ ü7z¤ÖX„´%©IÝ!50å­Ô#}2Ss¬‚²þ•j—™ ¶f¶Š–©°¦êÊևÕì‹=bæž²R2MYq73o‘ó#xbÒÐÇú -9õ†úb‘‰Ï@Ô§ÖœkŽÎÙ=sÚ€£Av³œÚਕ]ßQ&4›òÒë‰ÐõƒÞ®¿C¯Žm?4Ni'ŠD%lJñŸÞ»>£Ñ›ŸA¿ãƒKôô€Çf4?×ÿ7øcÃñ}QËþþþÿíë¼ÞÙž9ðN·i/ŒUà±Q½]—«Ÿ<³jÜE8/Ÿ©~ñØ—»}o_ž½=óx¼B}4¯R0TzaÃ.¨Ò½Æëý ^Fœ½t)¼&xwõü”>á^å|þËÿù¬ßm8†~³{ÙP¦L… %KÂÌ©óšMýJ¹—É,)„ƒ¶› ܉üÝCs”¼,Çpо×hï‚ßã×[ó¥`éþ_nP¯jÞZ_ÈHɼšö=dlÉ~)}ä<“3ÃñÙM#ÓÞò9R½}»-Ûy«Ù.¦x>4î¹r¶DE]¾|ü8T¯Qºu£:äZÜèt‚pÈw~ AxôXÆ™–ØÓÁõªÚDÙctáA“?Õ!¬\Ðo‘ë¡òà2/Õ)%K†¿R®Xæ[¶ÛR á—”§âVÁùï®´<Ó®îŽ ‰>™/f—Ow/˜jq«¤H)‹× ÚúM×þËîiW}¯XbzBÐöObÏ„b““““› ï~ôQƒ7Cû Õ½Žó¨Ì5£{MAþ/µ©¶N½¹½¥W€§ô†Lïsç}£AþEÚjetÊÂO¢‚n‡É1*[‚Ì™Y Ò«CÆÓÙ3z€6UÛ©-»Û&Ï º>Ø·ØÏà_Ó{y@˜“LÞ–Š€8@?lô ÷ƒRJ/¯4bø…` 5™¬b ¶ðˆ#Øá6X›+Ù:‚¶žÃÚRÐ^P#Qpî²ü7¨Áýý-EC \¿âª†J]Kv®îAgü­afÈièÌù®^¼Þír98uåÍ3 Þ#)ûúZp„ç>•Zð†™S|… ”ß”‹Ê×ðáoï%šÏzö[ûÊdðööóóö†¥»[0o5ô¯4¨T¯#F÷† ‚ üwj :_›¹õól9;AÚ¬¿$iàíô<ê_L•¤YæƒF§,|ô *HÓ ;$·E–â=½¯¯… ;¢ýÏ5¿ñ¾âJä|[,×Á§n¼ï¨PR«Þ Ê«[eGú• ¾©°&<’ÔêjQ×M›QX,¦TQ`5b› Ü+–¢¶6(iji×N0a:nö7:ð°³µwó‡P ßar!CæaÇþŒòâ‘Y,q5¤_ÊðJI†ÔÄô)×`Ï¡mʩオðÓgA}]¯ªàtæå¹\КÎ4“`Æ3_<ñ¾ ž+ÝÅPA¡RÔÕç §m®œí¹“¼Å”^ϸ%ø|òUæË3ŒNi<=ˆ$ÝŽc9ò7C¦œ5+óGÈü2ûzÆtPŸTÏ+y`©o)c­¾E<'œ‡·[`"x]s/âz ½»¾ëÏ“Š]=…ÿàZïZ§ÄƒTŒ@é°èf¬b¥wá#F° Âm°ž6K6GA[¹¨j.±–„`]Ó5]Ïênµ½NAdàU%#¡²V:«öf(›R,¡r;˜¿þ‹?þ99GnnAa­jÕZµ*U‚w¿úhÕMAš#yÓôl­¬côÝ ‚ Âÿ¥œT¦)U!g`^H¶LGÍVó+à=Áý‚ïi¯Ê‘¦£SÞz’Þ]³CÖ¥œšYáúöÄͱÅàBÃK¹g¾‡«¾±ß\i Ž#9+²+@€ŸOj;”«\¬c%7¨¼¡ÔŽZ¯AdF‘%Ì੸yÕ,xŸ!ÿ‹¬T?ÓXKó¸ñK%b› Ü‹¯é¼ÕHæ€â©)F'„ùk.üdî€%§áÊö‹g¯þò×ãû¼÷ïËCî‰ÜÊ9s!svæÏ@žn"/÷[g÷êàö´ûz·dp/éÖÇk:˜=ÍGe±– ‚pŸ¨³Ô§”,ÈýÙY4§6˜«˜™SÀËaßíÛ›\1:å½§ìP»»‡Ì6Ùó2S {™£aæOàrôËö­ªþþ6X#̱¶}PÉï¥Mà›å¹Ýo2x>åþ†÷´› gœ 2ˆµ„…Ûåºèºî¬Ö*ò![g£Ó‚1DMnƒ5Àìe+\¸ÑVŽ*×”Ó@0ÐÄèt£.«vVƒ¬“0²ês/¿ ¿ìYyxM'hß½Óo­ Æã "«ô„à7Š~Зz¤wª²‹×ÅÙ3w©{âMH|¬3-lñàåèÑ<"Üf¸ÛXûI{¼Ñ½ ‚ <,”Ç]}\ŸBî.W…œÏÀ<Õ<ØògPöPÈÙ·/7 ôÊÚóšri¿Ü<,/yÿ Þ·U>¡àíÙÛ7ìší {¿‚Mˆáa ›¤vô†#—N³g”)Zµ² J”1Wèjt:A¸¿Ä6A¸V§iªí Ȳæ5Ëœ(À£S ›_v¯ôYSF^z®ß¨’`ýÃVÆ?vYµaÁ{Тr«ä¦­€•·v>³»yŒ)ÔÚz)ÍÀ*cîLo`{ÏÚÌö:ذbüúâÿ3è#tI{rÊæÊñÇFGãìy£äŽpx@ZµŒ/Óží5­Gj¯‚³ZgZûÛâÁí[¶= ìnoº½ nÛl쯀©¼ù¨YlF"‚`¸ÜÎßrl ü®u%‚ÝÍrÁý¸õ¶¾ï‘xï¯ïr©E•0È}5×';²×åÊÞ¹ñ9åà¬ætº¦€¶žÃÚR0½(çšTðu‹õ!£ýû¿žW݇û4¢îYÞá ËÄâÏ¥rŠ\&ðÏ‹ŠÂšðQö+V×Q ø,ñ–’¶p 4ÑFg„ûMØá˜G™KÙl þ’óljE #kŒÎ$<øœç\EœUaÂð±ÞïÕ„9×¾Lûî ÔMl8¦®̽´à“Y{!¤yȵVÿþü¦Š$É@ÿN;¡÷N“¤[€ J.£ï¾€(­”sÁ=ÆŽG,¸ÛíxxÞt@/jë ·oÞøÜzàx1g²ã+Èé“×2»8º;æf¿éË2ßJß”:‚ÅÛ,™»‚mžÍ×Ívì“m£Á¶Ýò¤µ˜Š*‚pïHѹž¹¿çìå¢ïêöV7ÏQàÖÖZÜmì_EÓt];¹‘yƒrº@ΔœrfAî›Îwr×BŽ–§:€rÖõ®k00•–‰æ –×Áý3»¿wutùwôޝûOpK¶yzL¶IÍ¥¬ÿsÉ5(þNLå1ªIYìZ@ ^`±›.YCŒN%Æ6A¸ÖæŽÖ#à®´rFÉ6:“Px$¶‰—+B£jhuü"üe¿Ø—w¬Æ¶ø¿³ùê²kž0äüÀFÃgÃákw9ÏxaíÐ"0ÁúÁëã–‚¹¹éšÙqû¹ä?ä…¦&ÀªáMÑëÓd¤óüht¯ý í¿Øf»í;6Ü*ð{À)` ð¸F)ó¬àX—sC« òWÔm޵ƒ½$xî^Óï4xªîá^ÀÓ×-Ú§ØGZëÛ"€ À"Öpó² YÿœS%®l5W© ø—ÀâcŠ·¥J¨Ñéáþ6A¸V§y¯}hý4»ö3ègi¯‚T–Sr’Ñé£ì]´ûÇýáðôÄYÏ®ƒÔf)o¤ö…TRHf|3%êÓHÕxlÀÈ%°ñ½ßfm¶Áˆ—†6I­¥úµö8ÌwþxvNèèÙ¥N; ˆeóÝÈ'{ÈL¥ˆá4hiZÅ 2&,?Ý{wŸe†y§Í >§¼2lÀg˜W/€a7ž×4½áŸ#ÊÜéûbÎ,È›è|1÷{pÎv<áY?glÂ# ·£¦<¬ïÙÝ­ÀêaYl}¬>¶÷mOíCs‹ ¬oX­öbm8A=ù…µ¼sG:jƒ:SõWÿQö¯½¢ÀúŽù°=´zi½/ävÈk䨹QyŸåšÀ™åÌvv…¼äeCnfÞ5GGÐGéßèï)D±¬Ùæhë÷à¹ÈýM¯Àí€[€§¸³-óTÀ}Ÿý¢g2˜¼åžòîºy£`Vœ%F÷– <˜´Ñz-Wð#;¬fsˆÁ&<ªÄ&‚p®i)!—ŽÃ›.¯=xª *¥×z,›-Ŭ«ŒN'Üo³£?‹ûú ¼Ó~\Õ÷<®éš®Ýô¯¬,É’,ÁcÓ{üÚ¹!¬µ¬Ó/» rh•ÄJ5à»÷ÿòõçP¬~‰®‘òÝÏ™š±:©4\Ê­vn ”|/òùÒ{Á:Ù²Ä& @KIS‡»ö@nj^vÞÈ-šÛÄ1 rßÊš³r‹åùåöeˆz^±ÿõõf?óVsW°?e‹µm‹Ë2ÅV l—¬£mÀòž%Òº¬µ¬‡-k¾[áa%69îýQ| ™¯g=^ò:Ûæ½ò³ü! j]¥½ZrÆ9ÏÝ~ÓTÍÿ`ne~Ü’žÁnž«Ám¦m²G=p÷µ›=ûƒG]·`ϵ`N2y[*}ׂðhJRÓ¤ø=}-îÊÅphÞ¾Jõ.]ÀªYd»ýÎÏ/1‚Mî€%Ùì´y´]{ÕÎ`qX4«Ñá„û¦sN›{´„}ívOÛŸóÏÇçÜò k=êôéÓm|ºó‹˜é©`»hïj»…µ|rE¹“98L €~RWõüÕEío™}M³- ÀÓ×KðÄO€éÀÓ¤¨WµZ_È­“Û+çÈ[à왫BžÍY!¯8ä-vËÙ Ùcrë¤} ú,u®–?5jÈíxEæÎÖ«–™`;iþÚ ‡u‚µ>X6X{[CÁò¹‘%êÆTUËÎSUeÍè^áa¤gkeõpnw¹;ûƒk²ËU\m¿åe3À5¹\‘®‘ÊpŽr&æ½ zÁ¸ët2@úA¾*ÿn­¯»mß(?üê‚[=Û1÷ p ³q¯ öŸíy›Á|N¾h. ì^ùP—$@ÖÁPjÕ[ |l³b1[o|ïJ„GŽ(° °1ÅÙ2€ß8  f©VUdrÎ&Ü{Ë–.ÞúS ì›pk…µÿ”?’íRã ±—¬ ­7Õ’{eˆgÿ½ËmÚd:lŠü æ4¨G4õ[ ˆ5¦/&¦y½ü#xĹãx´¹ñðå I*@ÿŒ³zUPžTº9%Èé“ç•Ûòæ9}r_§Ù™˜×òœãn=ßav-ž·´¥@àÈŸõ³ŸÙÃܬl¿[ǃe¿<Ãâ–ËÖ‘Öb`iê`Ù–׬ºm)˜ªš²ä±b 9Ax”äÊ”-Ч2”yJ’ó5p~ªT*‚³²óSçP*ªã”dpžv6Ê› Jså þ݉§‹ANà'Ù ¬Ë8ó,àKéiØÞv[`þ¯yÍ,²üzzôûl?Z7»ûïÑG_À8âwà0]þÿ¾ƒ¥î-An…ë3ÍG9&»œbþ dMîuçç„‘˜"*wÀ‘锳âaçž“×m‡â%‹êeœà¯ø ,et:á^9ç}¶äùâÐ" ~b»@p¹¹Üë_§‚þ[í^ïP¥µ,´|ó¼ ÷.¿Ã=WκQQ—/Ÿ°Bx|hÛbï‚g ·Ãžî{w ·H¢‚4 ÔÞjNÞûûšÓßù*¸ÞËû:·*ärº9_ça×ì¼®7ÞÕ:7´xµ±¶üïÏ›?uÕ’aùÞZÌÌÍEÁºÈü²õ*˜Zj˜¯€õI¹«ùg0w³$›—ƒ©¼ù¨¹‰Ñ½"ü[bŠèÃARª+;@ýJQ”ž·^ݧ<ê@×¥8û+Ÿ8#@)¥LP®ƒËÛõ¤ó8(©Êþ†\Ä´Sî ÖO¬+ݼÀÞÉ2Ùæ¶7-±–Ö`o{Æ~¬KiëG !í7 ‚Ôñ™öDЇ©‹µÚP4Ý¿T±`;e q»‡ÿŸ ‚`¼Ë[¯_¼Ðr²rkd7ƒ&¯U²tüÎèT‚` Q`„;àR‡3¶ü~<êç Q§È±âŠ÷ëRT,îùÐÉ9•S5ÇZz7|«½\j{á…+ÅAÕU]½‹ÿŠûêŒkß.mžz¦Šær^Îë§‚.ʇ§CØë!Ã=Àk¦G”ÏìN*NêU­Ö\Ï»J櫘²Å9òv:ßt‚ëSW-—J-õ„ó28/¸f:Û‚ú¼rUõm½~X[ú×óÊí¤šro°XÍÌmA^kc¾ æïLCL‡Àô‘éqó&°Ì7?mNÓPSEóç`~ÜbzLÍLVóË7FÒ™ž#éîQ`3FþÈ1õ¸ê©.u›êT>å'EÑF€:GÛîz\O)ߺ"AyKY¯Öµ·ö™Z Ô®Ê4WiPJ[uí?ÿ½4Í2G˜ÒÀRÓ<Þº,›ÍÖâ`›b=n-–R–‰–`¹bna–Y–‹¶Ä‚¸ÿD©£&ª#!µ}º?ôQRkù}(jöÛylÅ-öF÷º ÷Ã…ïb¾º z7­#P¿~ùò­[JŒ! l‚pl.Ï’u°L5…˜“@nfÞm¦Ròù-°ô5ÅX΂©¬ùsós`É3f–m¦çÌ}Àü‘e£9L³Ì‡ÌV0eHçMµîß÷ãV¹Ö+[œqòDF\ò{ 'Hu¤ šà^â°”4•¶ÜBQ„‡Ï©f¶™~ë¼¼‚«C•šÅÛ×›lt*A0†(° Â]°ÛvêòoÓÁâm©k½%v„*ÛÇèTÂ:õûI×é¥ÐæÙ¦þ§Ó’gwZîü¼‹ÿtpþah]½]±–y÷ÿ¾$Y’%]>}y÷lä¿6¸ñ{2(úÎÏ/÷’tcdú“:Léê5R™Ê7J5´^útÕ ÊPeŸJý%m=hÙ®•ÊeКhSU´~úD­"(5´QêÐÌêõ8hŠÞE[ Z}u¬æj’Ö@]yïïKž.•o*ìÈïËå… 7—*Kÿ×½aêfš úßm]½Y;£¯©±\NêJCe¯r $éÆ/Ó.s}SUÐwÞ8Ž–7ŽûO’óÆWmòÂÔßѶê'õŸ@§-ÔÞôøkÚ­÷½ïGS ¼ÇÔ佦)r6ÈfiµÜL)ò2SU0]0M0y±4A>òÓ“&3Èææâ`Þ(}&·ós=s2Èˤ×L X[6Z¶üºéŒùc0•‘7É+AJ¼7#Å ×`us$¤LH/“¸äòfó,ëW|˜½äKñ)BiÇ/Ÿ“| a-¹Ê9ÂòªeJŒ! l‚p\xî«mσ«“jÉ eâ#»Vºft*áveÛ³’²«B‹ ¬íÃáŠt¹ttÚ?ob¿+hþqöl{¶=z<×gL·ŠÐ¹j·÷;¶€ÖÛºZJ‹Ñ{ÚK±;ýA^brX’ŒNwÿäÖ¼ãm£¿‹YþÙÚ(NIzÝt`qv8‡(s!óu—oÊZÐ5]ÓoaªR~Ó{Ÿmh /Xž²•|ç}Éq€œ¯Ô ìæÝ,ïtꔂ'?È™¸rÚM¸z‡Ž©ëo­œñúY¨Ÿ×°FÝSÀã, ‹Ñ½|÷˜ts ËÐz*kÔ=ÀA ÞèT‚ ½æè›³-kd¬Èn˜êº-Àû5(RÔß="¤Sz"ÿb7UA=НzXñ €Õn ´Ærã½xq£Ó ‚1á16‚p÷X}­áö›ÖpŽQOi­nÿ|*Ù[ ‘÷€eÈÂÚˆ#FŒqc1í;ÖÝøÚªU«V­Zu®¹¤[X“Ì‘vû­_Ç=ÍÚÈ»Ä5¿öi‚„……………ýõ:%K–,Y²$$$$$$$€}¼Éávå¯ç;T÷ôg»_„ƒóþضküê¶qôŠÍP¿þucŒîÕ{Gê,EK3AÿD_£M0: ‚p¯eZs^L—!}Evôiài±¯÷Ù!ý‡/IÕ׋š ·Âù¢ÚÆU£ mÉ0›mÁF§c‰› Ü–¦¦óÖ›vkSêýß!Ó ­½vT¹iÚ˜1cÆŒf³Ùl¾i¼ìæÍ›7oÞ {÷îÝ»w/¸Ï3—õºøÏçw;fî™ÎrY{5 :vìØ±cGˆ-8ÎßßßßßÖ­[·nÝ:†Ü®õYKþz^kK¼õ8«_¼bä#ô¯¢¹™äkÚjOí=-Ôè4‚ ½’ùª£VZÈÒ³?ÊôŸMüZC‘h¿–'¥ªR–Ñ)Ax¨õ”ƒŠRжº›ÍvO£S ‚±¡’‚pïXcLÁ6SA[Ù©˜\‘F§ºÿôÔ'²8w¦®€âÅ‹/^ 0`À€¿?iÒ¤I“&éé°µXÝM·=ÎÖÏtÆ~ ,}ôeî¡G=zô€“'Ožøà°t—v[k-Ñ|Äsx÷° € ã&L˜0æÏŸ?þü¿}¿~ýúõëZÔ.Y9wmR&­¯×#Œî•ÂÇÔÔ<ÆZ¢Þ\]mtAávéA$IÓ -7³]J3Èž–Û:[‚€Ò^^E^¿Sžë‚SŒN)ÂÃD PöªCÁºÏ\Òf3: ¢À&wl–Í&+˜¶É¹æn êO+mŒNe¼¼«êG èÁxh%àÍ7ß|óÍ7ÿzÜŠ+V¬XQQQQQQàÕÄÚÆw=Ìÿè»Ùß¿ï¾ûî»ï¾û××=óÌ3Ï<óLÁ9Ý7- Ò§ælLü´=[;at/^¦Š$™Úƒ>J›£÷º1òAšft*AáVéIz ~R¿Ïl“Ørsó>t샠Z¾B“Á7ÑSøÞ蔂 <ŒÔcêB×Ë`ñ6AÈ' l‚pYý,ulÃ@IR¶*OÆxº¿¶]? 9)®¢™oCõêÕ«W¯:uêÔ©SÁqš¦iš“'Ožï¶Ó¯¤Ñ)Ax˜)'Õ畺`ýÕRÏj5: ¢À&w‘õ1³ímPžPG¸bïü|‹\Íu*û Ð}±k!0nܸqãÆýõ¸E‹-Z´¨`*©Ëår¹\Ïçè–.]ºtéR0™Mf“2«äíJú\EÕfy[¾Û‡i·éqù…‚¶¾F«¢½ot*Aáo=¥'è‘ìJÿ)¡(ý”AÎ)Pä²_JØà¹Á-Ô'Íè‚ < ”•z¥4XNÊoÚÄ.Ä‚ˆ› ÜUÕ\ÊÖÔC®µ®'NSxh§ÈÐVAnEך¬yРAƒ @‹-Z´hQpœ¢(Š¢@FFFFFFÁã›"xzzzzz‚c‰Ò+ýWÈ[¬–Ë­hô]>xdä8ypA[-ª'j¿JAøOÚ-W„¤¬ô‰ñ) ”UϹæB‘Wü"Wg®]óθãË‚ Ü2%OIq>–•–&¶t£ÓBá l‚pY}-»Н>^otšÂ'ç3¥B–WAûïF²åóñññññµk×®]»BCCCCC!g³Z:3rª¹fg}W.¹¢”fŽ+hk'µ}ŒÑ©A„|ZO-Z½ Éßf<žø#hNí)m „>å÷yd$¸W·®ñzº´-‹ÅbI’$Iúëñ8p T®\¹råÊ >¡Wu}‡ó·ÌZFß̓Ï\Nö65*hë_kê·F§A”:j¢:’†¥UNè úm§>BƒýŠ=öã¶SF§áQ¤È®•®¨‚¶ÅnN°Š› ¢À&w•µ¯¹žÍjˆúƒúègõâšaõÿyL´–ñIóçÏŸ?üñÇt]×uý¯Ç/\¸páÂ…žžžžž®ñê§'è¥u_mµÑwóà“ŽÈyA[›¥éú³F§Axt¹ü•4WH I¿ßô1R>‡Ð‹ëÏ–*nÒ_Gáv)×´*JZAÛZÖì°iF§„ÂAØá.²î·è7oSí²kNÅÝèTÆsodqy%CΆŒgRÁ.¢ÉÉÉÉÉÉÿºüÂÚÌ™3gΜ ö æ`@Ε[š.}W>y‡|Ñܶ ­¤ïW§JáÑãZ¯lqÆAŠ9}cbKÆ£È)öGÀ‘ƒsu»‡Ñ)A@½®ÎUŸ*h[ì¦H±‹¨ Ü l‚pY›Ü¬7½V³«rØèTƱõ3±Ÿs²^Ô­SÁˆµ³gÏž={¶à8wwwwww5jÔ¨Q£þzžO>ùä“O>ìŒìŒì p»bI÷¬lôÝ=øä SCiOA[]¡&è}N%‚ðèp vmvŽ„äŠéû›ƒ©i´9ÂÞ ìZ|X}MqÖÍF§A(àÊTk¸Ô‚¶ÅÍl³J Q`„»Èæk µß´h¼ëŠVÍÙÑèT÷ŸSK4x°5 |ž{ú¹§Ÿ{¶nݺuëÖ‚ãò×^ËŸ :uêÔ©S§B©R¥J•*Up\þH·/¿üòË/¿·ž¦+^µA>&Å›.}·.s–´Í´å¦žÐ7©£nût‚ Â-Ê«£<•ç€äŽ™?$ŽK7S [+Kó_Vì[0ï79¬N)‚ðWj å‚âVжÚÌ’5ÓèT‚P8ˆ› ÜE‡)ÅZ± ­Ör URŒNuÿ˜ZË%M¾àÓÒv2hiúÍþ „ÕœyLëLÍ,ÁF§Aø{Ê2íœR¨´_îf»ÉjKâ l‚pWY“ÙzÓß*×&¥½k§Ñ©î=¹«TBÒÀ»­dàzXñÙòy?½ãÆ7nÜ_2dÈ!C`̘1cÆŒ=w-\ ´ÇóΓO>ùä“OBDDDDDDÁë®_¿~ýúu˜;wîܹsÁ­Œ¥ŸGÈÁ’‡\Åè^xðH• d#ÈEn¼AR—1Cont*A„‡Oî8g]G¤ Nß™ÖÌo¸yCX³€Æ‘û@^"]6‹]AAx¨»kXV™[[VF Q`„»Èân6ÛdNJ³% ÔòÚå!žÂ(—Òä.àk88øÍц²ÿÜ´eË–-[¶„Ù³gÏž=0ßø•±,oArdwsÈ(‹Åb±ÀèÑ£Gý×ëN›6mÚ´iàÊre)É`‹7Ÿô¬`to<¸L_šÂMi wÕi ŒN#‚ððpåz9Bڶ̸Ô&à6Öfs{ŠÖ x¬Ø— ”V›DaM„ˆËC{Ýù˜ÃMóÄæ‚ð‰› Üæí¦~–à’´±®p£ÓÜ;îªe¼×&¸~êZ‡ø©Ðµk×®]»BNNNNNNÁqåÊ•+W®¬X±bÅŠ`6›Íf3d¤8Ki®¢j³¼­ \ÓšåíŪ}áìÆ 6l)R¤H‘"ç‹ŽŽŽŽŽ† ,X°ÜYšzeÜU®"‹!êÿš<]*iŠõm­VÛè4‚ ¾ì%93c!=-+%ùgp{Ïú“û(ÚÐß'òe‘ÏÞñeAî;mµú™V lÕ-“í¿F Q`„{ÀÒÍü»­hï+•"w~¾ÂÆí˜e¸g(-s¾¦$tîܹsçÎwÓ&°fÍš5kÖ€¯¯¯¯¯/8®+A™µÁ«Ìu¼ÿ×ó;6(!¿Ýn·Ûíðꫯ¾úê«=. 7-QÍÒÁ®˜þðÈ5ºw<ò²—œZ_ýKMLµA¸mY!Ž3JCÆÀìˆôòàyÌí%ßÒ×|±Þ •唜dtJA„Û§<§f+×ÀÚØ´Ù:Ðè4‚P¸ˆ› Üno[W¸= ŠEýLíitš»Ç’!Ÿ¶w{OùG¯ЧOŸ>}úÀ‰'Nœ8QpœÕjµZ­°råÊ•+Wì š7_‰Ë© 9®¨ŒYüm®½ÚP§;Œ1bĈàïïïïï_pܹsçÎ;K–,Y²d ¸¥XB½º‚”"Õ–jÝ[9Ê`* z íS­œÑiA<[ÝÓ'@f²£GFxvóñ9E‚}g„+ ©lc©Ñ)AŽàüñÏÍÝÄQAø?DMîó[&Õ:\s•ñ®‡à?¹¨´[Îï–öV9ðòË/¿üò˰nݺuëÖýõø9sæÌ™3š4iÒ¤Ipm×[8eÈléê”2áÖ¯ëu¾Q<=====aäÈ‘#Gþ—]C?øàƒ>øHÕs¤ëà™l9î»Ìè^{p˜ºË¾rhßj»´ñýAxÔeødù§m€ì¶Ž¥™ƒÏy÷c~- ¸¾/a5òêëîø2‚ …†ÖAóWÖ€ÕÓl¶74: .’®ÿç2ä‚ Ü©ÓWM…ë5ÓjÄ ªSK-®uÞèT·Ï&›Î¸•¯²¶F~·þ:­~jH“³3a0hÕô"jÉ}ŸÓn]ƒ-`é.í¶Öúçãss%+ ².;ÓÒNÝ{…ߥÀkò™ãàHsZñP".<µ”Ø4BJQދɧ“Éd’e(c+æ[^3:Õƒ'mqæáOÈy2¯ŠC¿?<ÂC¯¬ ŸŒN'‚p÷é57í ùíì™}îP®kX\U(–[¤c¹¶F§„ÂAŒ`„{À2Ãåö(yJŠóy£ÓÜ9WyµN^pÖT¿Êùôp¼µŠ ££Zu|Õ_ÕÁzuçÈØš;'eÓíÖòeÕpîMmê‹z]ç–›®WET›üõº¹.åçì F÷ÚƒCn*]”ŸhS´£Ó‚ >zIÒ4H«œùqÊ䂚¯ÔàŠ¢°&ÂÃO Q£”× Úf‡åikˆÑ©¡p#Øáˆ>“°îÜ9ˆºSäèQ¨T¶y]/0¹ÉM¾F§„ÿ+úHB·‹Ñº&}mr”y®xZ97£S ‚p/ˆlÿŽž¤ê õ@fµ¤"×Õù[n% ó }|²Ü¿F§A¸÷î¹rÖˆŠº|ù„ª×(ݺQòN -nt:A(Ä6A¸,º¹žÍVÐV4e³³©Ñ©á¿3w00k %êÍÕÕF§A0ž¦é:½!uHFJÒG÷¾óœsgûn K…5A=Ê ½‹Ò¯ mõ–ÏÚÊJ Q`„{ÀZÚœñ lWÔŠJŒÑ©á¿“«±Kn ú(mŽÞ ô *è£S ‚ ÜÚ =Aï ©q;ÞWi¥y^+(²ÊïDØàêÖ÷¸Ñ)Aî?u„zE.h[ò,!Öd£S Bá" l‚pXÝÍÁÖœ‚¶ú¦ºRÙgt*Aøïä R’¹AA[ËÓ]Ú^£S ‚ Ü?úËš·V R—¦­HH×.u¾+Ь÷¿1<ËÛ‹z×0:¥ ‚q\Û\K]Ç Ú‹)Õj5:• .¢À&÷€U1«¶À‚¶óEµK¼1 )“¿éqi}A[_£UÑÞ7:• ½§õÔ¢Õ«´"£qÂbP¾Òµ2Pt¸ï·‘eÁ=Κà•etJAã©åÕ²JÅ]=© ‡”i%‹€ÞL*)µ…ÐauK¼ ¶­š{¨Ñ)A %C‰sNk¬üµ¨Ñi¡p6A¸‡,¿šKÚ@©«$ª¢À&RæræÇL Úªªy¨ßJáîqÅ*QÎÒä›v:Q½k¥^7 £ø°V6GÛVR¡ðRökϸʃ¥‰eŠ­ÁŸOF¢À&÷庹¤µ4¨#´öN/£ÓÂ'Íe¶<¥ ­nÕtýY£S ‚ Ü9çïÊb×8HVÓW%šÁ.÷×AØ;õŠïK¬)κÙ蔂 …ŸR^ٯΫ¯išý £ÓBá$ l‚pYö›Ól?ƒ’®,VFþ;S_¹£\즆èûÕ©F§A¸}ÎÚ®òjBJJƦ„gÁ\Åœlñ…0%°u‰º`q˜kXíF§Axp¨m¶2,-OÙT£ÓBá$ l‚pÙ|Í×l¾à:¬ÌR*Fþ;ù¨)ÉT½ ­®Pô¾F§Aø÷r­®þ9' µYæœÄ`­`šmë áÕýç?æhy¯y§Ñ)A<®SÊ^WX~’?²l0: N¢À&÷¥±å)û P‚´+.±h¼PH™NIÛL[ ÚÚ|}“:ÊèT‚ ·.ïW¹œ*þbæõ”½`­k)íö„½[Ì䓲ÃìgtJA„梽Aó׿©?u’¹¨Õjt*A(œDMî!«fJ³üê õ5µè&©½N%ÿ—¤É~¦ç ÚÚí¤ÖÁèT‚ ÿ,§užœ½ R7e䤔{Šy‡ûv(ú¼ßÅrA:(U42:¥ ƒK=®z»Ž´-Ë,=m9F§„ÂIØá²:Íiö›Ö^S+*I.ñ¡‘*ÈFBå=rOÐ_ÖWè­ŒN%‚ð÷²ÏæžÎ2Aڶ̼”Îà^É:ÝãI¹ñ%ÈHÈgN)‚ðàSŸW»V´-vÓ%kˆÑ©¡p6A¸‡,,%­7ý„ǵDùÀ%~â#R¦~’C^ Úm‘ÚËè4‚ •ÝÞ±;³5dTÊ*æžÏ¹UñV¡È*ÿy‘[@:E¢\Î蔂 × µRµ m±›¢À&ÿ(° Â=dM7ÅÚlmUW”N%ÿT[«ý¿öî<¼ŠúÞø{f¾sÎÉɾ/d#;KB6esA« nà†K½îµî]ôZ¯µ¶JkÕªm­Õkk­\P¨¸"ˆÊŽldOHNöåÌöû#xƒ-¥ „Lï×óøÈ7„3ï™ID'=ÌèÐ ÝcžkÜvôE˜–£ejúzãmo`ýÕºÙªP…Wð€56(à8øÿßr‹ò;åBÀùSQâxpüZÍõñ|—9nˆB‚Ü„BEÀ%‘-¼|í>jD£“ddw¢±lë®yý-€q­¹J[ ¤¼7»v§"ú®ªKË«€¶5íï5÷)·%¶¥ûØŠˆ†SQwysEQYR AæÈmßÜc5Z—­‹:z›>¼IÚ©Þ@Tfðã^|W»²ãí>JDDÿê¸a“­›óݸܢ\¡\8oþnæX¦|ìzp‰œ+GªºŠGz–k à€ílœ†ðøt§ð:c§¬ª.@EQU».ÑØÀ‚hì–Ê;¾Š:‚{—¶Ü d|™¸jÊév§"ú®ÚˆÆÕÕ—/µm«{ HÏÿàÞ©“hL±«`³î0Ì yqçÓžz‹±A[D­ z9Ö¸?s ÿl»,ˆÈ.,؈F@ÁUkv„ž¶ÝÕ³É+Rn™~¿Ý©ˆ¾«ÁÑœQÔ•6}X½ Èp§äO’Àšgw6"#]°Yg™½F<Ðìßy³§ПÔÓõ4 jjð¸O·äœï—k÷Q!"; w¦Ýg<Ø·À]ÖóÄÓ†¶svŠnWàp«®6aD4€÷`#ŽåBq< hÿ0ªuþ­£QJŽWÄ,¥~æuÆv@éJ•év§#¢‰q­!ëû€–¿vNmþ)`=o~a< Œ»"Ä‘8p8¢|>´;% ÆaÇt0gûçLÀQ£þ+p©“\ç ª+T—8ïŸvút&.ü¿õ¡¶n8áwð×±—Ý_#"8ÁF4*ßiì*éöºjŠw­¦ÌO¿5'PÊ¥wEƒÝéˆúyŒ6iÿW@UmCey,¬&f¦ÇªªÔ‹Z»ÓÑp8Þlº[wé7­wwÔ4> XwKgÈÑ"øËøBÀ™¨†¹¾°û(M'ÌDØ?sݹ€ã<áïèàD,؈F@ƒÜRSY ìþ ¢qË7À¤…)ó§%ÎRQîÁ›KI‹h¯ô”åõR‰H~ n]ŠPw\áôÚŽˆ†Ãñ*Øô}ÆÇZ&ÐòÃö€¦G)HZ-] Ä…<›è¨¯ ðߢ~ÇZ„i!Þó¼7úµÆ$=EÑhÁ‚h4ëû‹íŸ––nø˜pubMf àó™k¶_€Ýéˆúµ‡u™m~@ÙŽššÂB`üò¸›’œï:^wýÂîtD4†»`ó~¢õ•­—uîly±Pzˆé3Æÿ &))ê;vï5ÑÑaFDDCÁ‚htttw·¶_]TôñÇ@²ëÍ8 LòK ®°;Q¿ÎMÝçv $®êùû€ø´qw'ŽÜ5®¿øÖÙŽˆ†ÃplÞë¼y}Y@ë]o{ºÅ«ìT·1™!… á/ïSyvI#䨋°Æ-Z ýD»Ä»îøaŽÉÎÀiˆ=îX„U,؈F@O¯¦v›ÀÆ {6¯}Hø*f~J2º< <œ—ÌÐ(Ñ]Ô[Ó• ¹+Ì=oã¢ïJø9àßíþ«ßƒv§#¢áp¬[ŸK»»·h}¹³­YT—ò#G:}N°oâE€ˆRÒ”õvï%V,ˆˆh,cÁF4LÙ4Møøƒ]»Þx Þ Dú…æÆôÚŽ¨_ß&ïÆž ?®Í"ŒˆˆF'lD#èã–]×¾y)¾1ø¹¨÷qéáñëìNEÔO[¨Uz—{^*“¶? D¥„§»ª h zÑîtD4†Z°õž×Û½hkë’[ÿpµ©›|6QŸËq•€lD#è뇊þþñ €Ô#7`!|MìU‰v§":¨é`‡»¨ûË?‡~¹y/è²°íGDÃá?lÝ—ö|Þõ  ý³[|-ghÀ=@dhÈœ¸v@2ð9VÙ½ÇÏ. Ÿƒ—F¶×"l³ðwúÎ;Å|v³#"":°`#A;Dé³£€^hçw½¤å%¸2ƒìNEô]»úŠ_Û<ÞôJèr <%øËìNEDÃáßl] =·uÔq~Û1ðŸåóf@!Nç O:Eê²;ýaDDD4Ú°`#Ayá[£ÖÖ®7ÝÀ„¼¤‹§¼bw*¢ïÚ³¸ô[Ë¿U¾| DóþžÝ©ˆh8üsÁõÓðÓ£æ]OwÝõ ¸À÷´à3€°¿| aÖûG¿=aDDDt²`ÁF4‚öþ¡¦x×ïÚß7¿½/8euêµ9Iv§"ú®üâ²wl|rš®( ê©È¹±v‡"¢aqhÁ¦(€ŸŸ¯¯¯/à_ê³1¨˜îûXÈu€ž¯=á}ðN1îòÆ€ET¸áP\ª°û¨ÑÉ€Ñ*ÏÛVh¥uµæ½LÎX1ën@VÇö=mèÄRønEÕ7D´X®ã#?‰/°;€u‡•o&ú_qF`%YkM0YOu€qŠñc`DXw›Ïfƒñ€ñ8`á:ó  q^ãGû§ ¼ž´YÒ2ÀZ‡Ö Þ‡X„ 6¢T³©9¾|Pp rÍö2 ³)õÖìÓuºò®Zlw:¢~Å“+{óòdK†ôk ö7ÑRÜ/ìNEtb±î0ú‹0³ÊÌdÜntV¤Qc”Æ óy³0½ÖÝÖ€!Œô׊0ëKã ãG€ óã=@ÿÌ̲.°eÖºÿ¼}éïòMR \"ýTqÝ ºÖhzÖz¯èMœ5ªÇçL`œ_XVR‹0"""¢cÅS$¢¤ʧÎ0@Ê}¶¾RsjŸÞÊ…F éIù€Üè²ùŒ¶p¯Ý™ˆŽ—á.ŒϬ,ë2ÀzÖê/Â:á‹V»ðgÀ:þ7žHåÒ i ÄÉÊ@Ù(ߤÞ¨¿çûJ œ)×BVrÄ^@®’…z. èòZåm@M’ëÔ™€2N9[ÙÈOI«•-€ô4ÖH¡@Ù™uÁ{ÃÞ…ZfßKÀ„ìø²ÎâÎ ËJ:˜ã§ˆÂ 'üþºÿÚp—Ý_#"""¢'؈FPkã·G¶îÚûÅg¯iKãMœøípVÙŽ¨_¹^[P|9ÐãòN;p-0¾!¶5y‚Ý©èd÷mfÜÞ_„ËÌÍýE˜µò»E–õaúŸU„m¶7V.=.ÅJœ|ñÁ"ìõ@,PÎWƒ%Pž&×b’2[4a¢PÙ%Ú±HÚ*ú)Â>’w‰P@†y'˜Í³Ä(JN­ùGQ3Ðý·žîÎ`ò݉«rr€h+¸=!Áî¯&ÑØÃ‚hðööv¶›Ö|ð ”{gz:¤û½Òmw:¢~•Ö¿[ê:;Ô´$½špuj„Ý©èDa>höñ€yÙkÆ2Ünn¬Hã£0V˜ ÀÜl]b,Œãys'`–Z›–×¼ÅX×_„™kú‹0óê¡aâLùG (ï+Jª|¶º •¥J/ x¯¨ä)U,ù"l¸=f’Ñ”l©zº`!Ð÷³¾ Ý+€Ì†¤3fþˆ;Ƴ;%ÑØÅ‚hyÛ Ñ§ë·|³å·€„«#ãÇ/B? FÔv»Óõ«ÚÙ¸´¼ h]Ûö‘ÇRoß”Á Œ9ƒ)ÂÌÆþ"L¿o ³¶õa¦û»E˜þ¨hD ~ûÿ7v‘ü#ňה¿ª÷JªôCQˆ…b¢‹°7¥@îU¾”3dC½E˜üJ¦ÎýEØpÓ¶‹µ4 tBõÞÂL@»ÚûóÞ§SÖ&-Ÿ} •bwJ"""¢±ÑúöoÛÇòNé ˆª óÄþ ˆîCl¦ÝéˆúÕFxfTîš^l^X¤ÍLz`¢Ý¡NbE˜õ…˜¬—nÀ<ÃøÄ|ÏŽ"Lþ¤¿“/…€ºP|O,äIÒrñ üAܯüPâå(õ|@œ%mQÖò/•bõ&@I’S”¢“¯nÚB]òVÅTþ&`L²^Õ·Óš“O»Žðí3};DDDD48,؈lðéç{Î~ûm xŠïÛ¡×q Q‰ïÙŠ¨_½Ûƒš=@}‘§ª:Èp'‡M’ìN5úýsfL0ß7ÖÖækf'`d_™«³Kõu€‘cþ¢¿3¯8X„Ýg¬Œ]æ\ãvÀøÀœf^6øí[„©÷+©óù!i•²EØXÓ»Ý[Ñ·(½½*:ÿkÀºDʲî²L*9íi 0Ê7 $Äî”DDDD'lD6ØôuAÇþ€c‡s’s/0~aôÎT>ä€F‰ÆÆ–×ë/jzs+žR£’ff씩T™nwº£g…c‚¥Ö-æN3úHE˜ùJfÝõOEØ­ÖýaúæïaÆ¥ýÛQDÊÁÒe ÎVîU @~Hz^^(—)‹UʽÊR¡â‹ƒEX… üPòÅ#Âè/„ È¿T©7ê¥Ê6å×¶ IN·û(ÓñÒ»«¯«»(ÝSólá[€gÝ/]ä\™êœ7ðóóñ ´;%ÑÉ‹‘ ¶ü¬øÅÏ>ôNóïï´ã'Ýmw*¢~£MjœTÕ6T–ý? YMÌLTU©µÇû£­S¿RÊÒ“Ê递"Ÿ%òu˜-J“ ÞÈyr·òK@i‘uÅqHöŽÒ.Bu²’$*Á"Œ†ä€Oï„® ôOÕÿ(\ˆù-G }}Úçî|œº¿¿Ý)‰ˆˆˆˆ‘ ¾ñ+_ÿå—@ǵ=›Û¼À„[Ç_wŠËîTDýZD{¥§ ¨(¯—JÀøº¸u)NÀ™â¸Âéø¼o‹0Lë/Âô—Ì Ã˜IÖóæ†"Ìôë/ÂŒ˜þ"Ìl6î7þ mæÅæ}€uеÒl E˜¼]„"Qœ%*©€EÙçÀœn¿ÎE@i^ÍÍ…çŽ&áçº ÈNKÿãü³—ª¹e»SÑ·X°Ù ÿêèm¥­7×ä™ç§Ü’ýC»SÑX%e¡Èò4͸B_ h¯éÍÚ“€V£•÷팕æ9Æ€÷cOß»@×Äïuùíè iÙ {‚ê‚?”;•çä Ókü—ù`|`MÒ=ÂÂ¥5òµ€xLù£²Pî”ÓŠ0e•ü²X¨?¯¨7ÒÍr·¼ P•׫”Hɡİ£±­£íÀ—íåÏÕžYô àþ»#Øw­§vÎÿ>à0TÕÅ{¬:,؈lP²§nw¾*Íý_iÀTgúÅ36ÛŠì6Ô"L+ÓJ´@À¼ASMõ.÷Nô}Ưµÿ´)F¾Ð?ÑßÔœƒÏ!gK’ÿ`n³n0Ï‚C‚–‡^ øžêªõy^”2 HrŠz þR<£| (ùeñ& ¿*¢> ¨wʈ@þFñ•fFt$í1´x€}ûjn-9ðŸíSX d5¥×ô=èkt]«´V3Eÿ= Ezÿä½ÐóÍYÚÔá/—úDcK˶ö›ê€Ê—÷¯,û¸Ö× ²´íÔßB(ŠªÚ’ˆˆˆˆþlD6¨û°¥¼²ÈCEÛ–ÏI “b¦%ÎR‡p™v§;L ó° °–?×ýE˜w- ¹u]ÓýY3E;0žÒôÀ§mÓ¦úGÖeÞ_šªÍ8X„=cÌ´)†¢ý Ð?ÑÖy‡p‰–8]\(àÜ*vûÌÔ÷ÄëÎBÀ«þÊõàú±ÚäºjèE˜¬Êª¢ ÿqëjé­ëè¾ÜVаn0ÞóMê 8"`qX©Ý_U¢±¡) ­´ák v\ÃÌÊ;àf3|0Õ"f§ŠK2Å w""""² 6"4›Ž†n`ûÇ%_o\ ¤§'.Ê |{\…~v§yÿR„=¡%{ï´Sõí´ƒE˜ПӚû^´p½ÓxÐ^ÕßöÎôhÃÒþ Ð÷™÷èË­Q+í› è²Q¡_8øâYå u àü©ú¬«p|.Ê]™€c¹(q¾¸¦9®w¹‡W)tîÔ3\‰€ÓW¸¢g–p8=€Úíðõ™ 8¥Ûi¿"ìxéíõz»» òòÖ®\Ñg$W¡Å§ÙŽèĶ¿«yK ¨Ëiú^Õ4 teÀQSïJ¹{ö@V`Ê'пDDDDÔ‘ :*º{Ûdàë⢂^;q.Áû¶Óëï×€Þ­mÑÞ¶¡+U>Wß\?q<ërêýÊë®wç‹ °”û÷ÎEb†3plUUŸù€£Cõ88g‹$g àèVá“8„…,‡ÝGÙ~z¯áÕºO7|“·f-—ùM¢ „ï^ew:¢SýOQõ—@}˜Ç]DU—'Üd^ŸxQv5 I’$ókDDDD',aw¢“‘ tµáàâóK±åX}ì¯o)Ò",´}úžo‹0o 9ô^Íè[ͳôºþ"Ì›håÆ'ú,@+×?òÎôYú$ïÀö”~¹^ èQ¦Gû ËúËÚã7² €&Âì@ ÌÂzÀ,ìÁ̃EX=àšéxÖ%,Â.|_t%ôaœ³aÊ¿/œPû|’Õ+|œ@>KÎR.p îüÎŽÿ[¿³>ð/‡& `àSøþ-Å! áX›“Ì+Íù>E;ŠìNGtbdI–d æ¹ÆØ}Sý‹š¿¨¯bóê’o&ÜwÑ4O±&Iv§%"""¢cÅ 6"½–¬÷Ÿlعí­w€ˆ{ƒc~¿˜ú çëïj§Ú>#IóúJ½Ñè{ãt@{Q[çm´\=Öû ç·ê¹€¾[ßáèg›.}Íàóˆ$¥KUW–ãûÎ"@Ý Ê}ª×ÙâCŸwõuÑå¸p9þËõÀY#ö¸*GhwŽ ç ¸&ª¦³ù"Œa'´¯Ý©¿ññDXh´Ä4„–Å'ÚŠh”+‚G:¨~dÿmåQ@Ó#­5üH(‹ðKmÒoŽM›z‹Ý!‰ˆˆˆh¸±`#²Ñ‡îرzk"I–Up¾àXírŽåý7ÉwÖë*À¹Ìís nþŽÀ9Q®<À$:\~€Z¬48ƒWŒ*¹€ª9]>¼çÞ§?ݹæV x–ßÏC/âÒ"/Ϲg¢Ã›lí¶ü€ÊÞ†Ê2hþ´}JÓ^ irTí H‰‰Y<ùr»CÑñ‚ÈFžªŽ¦†R OÒŒÞ À9IMrvªGt85ÀéU;|â‡æt²£‘µáÎüܵnÀîzÆ/Hœ”üªÝ©ˆF—oïMY!Õ|Z,€ö̮Ȗ}@jû¸/3û€Ä€ÈÙéœä%"""ó8‹@d£°ø€ð¨”C>Ðîƒw ëçø¿;…™vg¥“²X©UUÀZnžg,°vg"-¬‰¦¹(אָ-ÞtúuE¶yŒÍqLkâÂÏNf±FDDDtÒà󪈈è°DŠô+±0*¬xó÷v§!ÌÅf‰Q”l©¹¯°è|®ë’¶W€É˜SÄ冟`wJ""""i,؈ˆè°Ä³ÊâIÀxÇô×—Ù†È^F™d´ÅïWù¬zÎí¹¢kpÊyãoœ9ˆ¶‚ÛìNIDDDDvaÁFDD‡¥¸¤ŸŠ·ëV«Ñ ²; ‘=´íÆb- Ø^%ò¯zC¼OõtS¶&Ÿó™”kwJ""""² 6"":,å|%@¹ 0Ö§÷Ú†hdi uÉ[ ”^]yuÞ€­ô=dµ$?rÚÏsM"""":©±`#"¢Ã¥âRõÀxÀ*7Ýv§!})zR¯ ìõVôæÍŒ ãJóM`zSòîyó€ÿ˜ð‰v§$"""¢Ñ†–²DúRÀºÈ¬1‚íNCt|õîêëê.JæTÎÈ›X¿€/¶Ó7§ióÚ€À(߀cÞ QÂîDD4:)»är!#ÊxÅxóàãìNE4¼º‹zkìJƒªã 6ÊòzQ 䤇Ϳð pêþþv§$"""¢ÑŽlDDtXJ¨œ#’ÖfYb”ÙŠhxtíêÙÖ9(™QõTÁ‡€£Îs®rÝé­ ïb±FDDDDCˆˆK UœÊîµu·Ug>hw*¢cÓ‘z ¾cPº®z^ÁG€k¯c±ûY 7>u炳Ÿ‡Ÿo„Ý)‰ˆˆˆèDˆˆK4ʦ5°Ö_7ôÝGÿzDvjûº³¥Å”çÕl*4ÿU®ÿœ俦-™8ƒTáó""""":J¼–hS…ßÀÚ7“Œ·tÃD²Ý鈧EtÎõ”•-usJ@à‹¾ ù ÈjNî:m& \ŠPY¬Ñ1â)%–âR& }`m~im±ÛŠhpO;Þ÷›dOMížÛ 8ƒTáÃïÑÃS\"":"á’ßS>X›‹Í£ÌîT4Út,íZ×Z”šÕ¯]ø>íäLM_6?‚Åm<Õ%"¢#R\rŽHX›Ö¥æƒv§¢Ñ¢µ±3À“”ÝP»~¯ç;+ø G¤ìŸ?p)º“óòDDDD4Ʊ`#"¢#R¾VUX=V«ñw»S‘Ýæ^ ü²ÚË÷^tz„´ßdœç;­ˆw‡;Sx)0Ñ p‚ˆˆŽèÿnb'm‘—z¹Õ¬¯±;-£Ãì0Ó€Rÿê¯ Ó»+Ú§“šc²÷±X#"""":,؈ˆhP„*ÍTÞÌ­úZó»ÓÐPéÕf’^ ”Í®väoº]½þ]÷§ü$ñþ3€˜°ºÄD»S˜X°Ñ ˆgÕÔ¹€ÑbN3V؆KÓ‹µ tyUv~%Ðý7ï™=gS:’Òg? DzƒãâìNIDDDDtbcÁFDDƒ"n“V)/F¾•ªßowúO´…Z¥w)P|{uK¾è[ã}Ï›de$ï=µë ŒŽ¶;%ÑØÀ‚ˆˆEùT\®NÌ2+ÙºÍî4ôïx/ÖOí[ßS}Kþý!=@O¦G¤ùÌ}™êgFDØ’ˆˆˆˆhlaÁFDDƒ¢,‘~'`œgÖë»ÓÐ?ëÉÓNë=Ø»¢âò¼3sƒñ'³Èq¤æÎ_ e¸­ÐP»SM,؈ˆhP”?++„¬7õëÍëìNCßêv÷Ê]e@ÉUžüßR-âä€ï¥Ç-ø%àïv)v§$""""ÛX°Ñ IQ„¬·¬@‹›íºç÷4uîJÏ­~¡PÄ R»z0ã¾ 7.\¸½®_»S„݈ˆèÄ î‘vœ ]æýT»Óœ¼:Þï9¿-Ø·²¦¥8pªº?¦ßŸÚ0¯ pù©!>n»S\8ÁFDDƒ¢Êùòc€ñ«ÈàdÔˆk/ï*mMÊά¼f¯Üºü?r~œþØ‚3X¬Ù‰ вAÞ%‚cqq‘ÝiN­ž ¼¨ö…½_¾Îàb Û™â™7p)º“óèDDDDD¶bÁFDDƒ¢¸ä‰bÊÀÚ\l–ev§»šÛÓ7ÔÏ,½yÒcøD ;*íûsUUŸæJDDDD4*°`#"¢AKäNqȤ”ñ?Ö]æ9v§{SZò–Uóê[Ê„ùý8òûÀ´²¤=§¦ŠCÒ'ÖˆˆˆˆˆFlDD4(Ê׊¢ªks¹ñ–Qjwª±cÿÂæÀÚ  æÓÆ€}¿"ÓBrbc)ûR.›s «²ª(v§$""""¢ÃaÁFDDƒ¢„Ša¬Íw¬OÌ ìNuâ«ð̨ÜÔ¾Ô´§ê# &/´.1È,JØ2£ e˜2ß­‰ˆˆˆˆF5ž²Ñ (¡Ò.%f`mÎ4ïÖŸ³;Õ‰G’%Y’êâýoìÓýÛ<«ë¸Üðòä*`ò] çåä’$I’dwZ""""" lDD4(ª£DÑÀÚxÝØmì±;Õ ¤é â‰Zwér ÉÕšÓPŒ‰JÏÈ&Å]œu·Ý!‰ˆˆˆˆèh°`#"¢A‘;dC$ ¬ÍbÃîP'SÃ<,ÊwÔ-Ü»h¾ £ q%zMŒ>y2šã›™iwJ""""":| ŠÿôƒGñ=k€å(‡×ît£UŒ‰fPþZmúÞ«€Î¿wæ·Ï2ÄõMëâëÂ)~v§$""""¢áÀ 6""².ù±Œ1ËøÀ¨±;Õèct˜fPö`õï÷Î:§we´O&¾ŸP?½ˆw³X#""""kX°Ñ (ªðÊÀÚ,7ªŒ­v§=Œ$k±”.«Ÿ¿è|¹ÛÓÑœò“ÄûgÌÆ=~¼Ý)‰ˆˆˆˆèx`ÁFDDƒ"+0e@œ´E^˜—J7“ìNe?=L/Ö €’+*g~ ô<ªMì9˜Ú•4V+é NŒ‹³;%O,؈ˆhH„*OTÞ hæ-v§±·ÊˆñÆÅ·WÉù /Í{IïE@Vjrã©%@øÌÀŒ˜»SÑH`ÁFDDC"ž÷¨ss¥ëÛfäyë´¨¾=@ñÿVç]è^= È~,팹…@Èt¿æˆ »SÑHâSD‰ˆhH”󥟈DÀ,@†U؉*»S}›¼{Z€’äê¿öÖ V-V9A©ÙóšÝÝœhwJ"""""²'؈ˆhHÔkÅåâ2ÀØd&wÚæøë)èKìöE©•óòŸð¦Õ'%3‚Ò®›Àßëv³X#"""":¹±`#"¢!‘–ž0Î3ëÍmv§9~ºDOSç äÁÊGó¼€zª\«Þä>œ~ùÂ¥€Ûë ðµ;%,؈ˆhH”%ò !óKýzý»Ó ¿®¬î íñ@Ù—5Þ8&©Å>Å@nwƸ… w ÓékØ’ˆˆˆˆˆFlDD4$âY‘+.¬Uf’ñ˜Ýi†O{yWik"Pæ_óvÑ€{“ã]ÿZ ÷éXp3àòSC|Üv§$""""¢Ñˆ9 "¢!¿—ÄzÀ¸Ë*4‚ ìÎt,ZÇwMmŽ*Þ«=§ä àßüà€¬«“7ž¨ª¢9v§$""""¢ÑŒlDD4$òO¥ÄÙ€y•¹Ï4íNsôš“ÚÍF? bI]DÉ€àïù=dßüùü3UUkDDDDD4,؈ˆhHÄÕâBÆó6ã"»Ó ç‚ös*g}Dy&z®ßב·YÉÉêi§Š©¨Ê \ÑÈcÁFDDC¢Òk"u`mt˜fšÝ©þ³ý ›kVUOÕ?·¯o ܳ˜úƒל9€¬Êª¢Ø’ˆˆˆˆˆND,؈ˆhHD¼œ*ªÖf‰uÅh~¨f]TsrUPûRÓžê™@Ì¡K€)¡I9³æ² Sæ»!~KADDC¢”ŠIªïÀÚ\n¼e”Új€$K²$Uûߨ§ [š>«U€¸Üðòä*`²œP“› H’$I’Ýi‰ˆˆˆˆh,`ÁFDDC¢¸¤båw³Ú*1'Ú @<Ò9@ÅÎ:gé+€'¯5§¡HÔ¢f§w‚â.κÛîDDDDD4 »щEq+"h`m:ÍKôõú‡°‘Ïcj˜‡e@e]íYÅZS:WxNR¯‰Ñ'OÆ×EõN˜`÷Q#""""¢±ŒlDD4$J±’ :ÖF•ù'ëú‘Ïac¢ì{¥æº¢•@Û­O4·é½±iSÏÆ×Eå²X#""""¢‘À‚ˆˆ†DÄJÝâùg3ÌzÜX7rÛ7avQ@ÙƒUïítD(lÀÄüxÏôf aI„_ªÛî£DDDDDD'lDD4$ŠªÿÀÚxÅÜiœ{ü·k$Y‹õ( ä×5Ù…@çË=Û:Ì3ïÈÍÆM b÷Ñ!""""¢“ 6""¡Jíß¹Dt–ññìñÛžfth@ÉÿV-)œô˜=>¦êIWΪ¢2ƒ'Å'Ù}TˆˆˆˆˆèdÆ‚ˆˆ†D±d‡â3°6Ë*cëðoÇ8Çø\»(¾½²1ßôUõÍëm¦½Rwêb |j _LŒÝGƒˆˆˆˆˆˆ ‘,d¡8)FÚ"/Ìg¬rý†á{}o˜ÞÐÝV¹2ïV@Ÿc|¥ï¦ß›rÊií@¨ìé°û( `ÁFDDGEÙ ÷(—æ6+ gûëõMõžÒÓì}¡âͼ»cº1ÝLrîH½qÞ/  ?¿°0»÷šˆˆˆˆˆè_±`#"¢£"JÄ«ê3€¹Þ¼Y?†{°õô%v{€’)Õ“òOäG±_JrggüeÁBÀßëv'Ú½·DDDDDDÿ 6"":*"Cú‰HŒrc©yÑÐÿü‚wgPò`å£y^@þJºSýÈ©HÿíéO~ªó@€ÿÐ_—ˆˆˆˆˆh¤ »щIY¨\)vÖLL×_°pp®+«{B{”ˆˆˆˆˆN`œ`#"¢£"JÄMâ-Àü™áÖsÿõ÷›_ëHjº¨XRQò# ðß™¡{é•ÉóŸT—p³X#""""¢±€lDDtT”ó¥÷„ŒEÖnëÜ7Vµ74µÿ³¿£¢}*Ày0õŽ$1g" ›²,›v§'""""">œ`#"¢£¢¬—w XW[…FаÞóqíZ û]ûú€ððÀ²èÏ€©?HqÍ™ÃbˆˆˆˆˆÆ.É:Èî DDtb)]Uï)ò úªü×>sFè’„`’_“H’$I’Ýi‰ˆˆˆˆˆŽN°ÑQ‘'Ê’>°Ž½<4*±˜$'Ôää²X#""""¢“'؈ˆè¨h†ÞímZ6uÕ5µ‘sƒRÆÅÛŠˆˆˆˆˆhä±`#"""""""":¼D”ˆˆˆˆˆˆˆˆè°`#"""""""":ÿ3/yPM¹Ö:IEND®B`‚dipy-0.10.1/doc/theory/spherical_coordinates.svg000066400000000000000000000654521263041327500217210ustar00rootroot00000000000000 X X Y Y Z Z --> r r --> --> --> --> --> --> θ θ φ φ --> (r,θ,φ) (r,θ,φ) dipy-0.10.1/doc/tools/000077500000000000000000000000001263041327500144465ustar00rootroot00000000000000dipy-0.10.1/doc/tools/LICENSE.txt000066400000000000000000000003661263041327500162760ustar00rootroot00000000000000These files were obtained from https://www.mail-archive.com/sphinx-dev@googlegroups.com/msg02472.html and were released under a BSD/MIT license by Fernando Perez, Matthew Brett and the PyMVPA folks. Further cleanups by the scikit-image crew. dipy-0.10.1/doc/tools/apigen.py000066400000000000000000000430131263041327500162640ustar00rootroot00000000000000""" Attempt to generate templates for module reference with Sphinx To include extension modules, first identify them as valid in the ``_uri2path`` method, then handle them in the ``_parse_module_with_import`` script. Notes ----- This parsing is based on import and introspection of modules. Previously functions and classes were found by parsing the text of .py files. Extension modules should be discovered and included as well. This is a modified version of a script originally shipped with the PyMVPA project, then adapted for use first in NIPY and then in skimage. PyMVPA is an MIT-licensed project. """ # Stdlib imports import os import re from inspect import getmodule from types import BuiltinFunctionType # suppress print statements (warnings for empty files) DEBUG = True class ApiDocWriter(object): ''' Class for automatic detection and parsing of API docs to Sphinx-parsable reST format''' # only separating first two levels rst_section_levels = ['*', '=', '-', '~', '^'] def __init__(self, package_name, rst_extension='.txt', package_skip_patterns=None, module_skip_patterns=None, other_defines = True ): ''' Initialize package for parsing Parameters ---------- package_name : string Name of the top-level package. *package_name* must be the name of an importable package rst_extension : string, optional Extension for reST files, default '.rst' package_skip_patterns : None or sequence of {strings, regexps} Sequence of strings giving URIs of packages to be excluded Operates on the package path, starting at (including) the first dot in the package path, after *package_name* - so, if *package_name* is ``sphinx``, then ``sphinx.util`` will result in ``.util`` being passed for searching by these regexps. If is None, gives default. Default is: ['\.tests$'] module_skip_patterns : None or sequence Sequence of strings giving URIs of modules to be excluded Operates on the module name including preceding URI path, back to the first dot after *package_name*. For example ``sphinx.util.console`` results in the string to search of ``.util.console`` If is None, gives default. Default is: ['\.setup$', '\._'] other_defines : {True, False}, optional Whether to include classes and functions that are imported in a particular module but not defined there. ''' if package_skip_patterns is None: package_skip_patterns = ['\\.tests$'] if module_skip_patterns is None: module_skip_patterns = ['\\.setup$', '\\._'] self.package_name = package_name self.rst_extension = rst_extension self.package_skip_patterns = package_skip_patterns self.module_skip_patterns = module_skip_patterns self.other_defines = other_defines def get_package_name(self): return self._package_name def set_package_name(self, package_name): ''' Set package_name >>> docwriter = ApiDocWriter('sphinx') >>> import sphinx >>> docwriter.root_path == sphinx.__path__[0] True >>> docwriter.package_name = 'docutils' >>> import docutils >>> docwriter.root_path == docutils.__path__[0] True ''' # It's also possible to imagine caching the module parsing here self._package_name = package_name root_module = self._import(package_name) self.root_path = root_module.__path__[-1] self.written_modules = None package_name = property(get_package_name, set_package_name, None, 'get/set package_name') def _import(self, name): ''' Import namespace package ''' mod = __import__(name) components = name.split('.') for comp in components[1:]: mod = getattr(mod, comp) return mod def _get_object_name(self, line): ''' Get second token in line >>> docwriter = ApiDocWriter('sphinx') >>> docwriter._get_object_name(" def func(): ") 'func' >>> docwriter._get_object_name(" class Klass(object): ") 'Klass' >>> docwriter._get_object_name(" class Klass: ") 'Klass' ''' name = line.split()[1].split('(')[0].strip() # in case we have classes which are not derived from object # ie. old style classes return name.rstrip(':') def _uri2path(self, uri): ''' Convert uri to absolute filepath Parameters ---------- uri : string URI of python module to return path for Returns ------- path : None or string Returns None if there is no valid path for this URI Otherwise returns absolute file system path for URI Examples -------- >>> docwriter = ApiDocWriter('sphinx') >>> import sphinx >>> modpath = sphinx.__path__[0] >>> res = docwriter._uri2path('sphinx.builder') >>> res == os.path.join(modpath, 'builder.py') True >>> res = docwriter._uri2path('sphinx') >>> res == os.path.join(modpath, '__init__.py') True >>> docwriter._uri2path('sphinx.does_not_exist') ''' if uri == self.package_name: return os.path.join(self.root_path, '__init__.py') path = uri.replace(self.package_name + '.', '') path = path.replace('.', os.path.sep) path = os.path.join(self.root_path, path) # XXX maybe check for extensions as well? if os.path.exists(path + '.py'): # file path += '.py' elif os.path.exists(os.path.join(path, '__init__.py')): path = os.path.join(path, '__init__.py') else: return None return path def _path2uri(self, dirpath): ''' Convert directory path to uri ''' package_dir = self.package_name.replace('.', os.path.sep) relpath = dirpath.replace(self.root_path, package_dir) if relpath.startswith(os.path.sep): relpath = relpath[1:] return relpath.replace(os.path.sep, '.') def _parse_module(self, uri): ''' Parse module defined in *uri* ''' filename = self._uri2path(uri) if filename is None: print(filename, 'erk') # nothing that we could handle here. return ([],[]) f = open(filename, 'rt') functions, classes = self._parse_lines(f) f.close() return functions, classes def _parse_module_with_import(self, uri): """Look for functions and classes in an importable module. Parameters ---------- uri : str The name of the module to be parsed. This module needs to be importable. Returns ------- functions : list of str A list of (public) function names in the module. classes : list of str A list of (public) class names in the module. """ mod = __import__(uri, fromlist=[uri]) # find all public objects in the module. obj_strs = [obj for obj in dir(mod) if not obj.startswith('_')] functions = [] classes = [] for obj_str in obj_strs: # find the actual object from its string representation if obj_str not in mod.__dict__: continue obj = mod.__dict__[obj_str] # Check if function / class defined in module if not self.other_defines and not getmodule(obj) == mod: continue # figure out if obj is a function or class if hasattr(obj, 'func_name') or \ isinstance(obj, BuiltinFunctionType): functions.append(obj_str) else: try: issubclass(obj, object) classes.append(obj_str) except TypeError: # not a function or class pass return functions, classes def _parse_lines(self, linesource): ''' Parse lines of text for functions and classes ''' functions = [] classes = [] for line in linesource: if line.startswith('def ') and line.count('('): # exclude private stuff name = self._get_object_name(line) if not name.startswith('_'): functions.append(name) elif line.startswith('class '): # exclude private stuff name = self._get_object_name(line) if not name.startswith('_'): classes.append(name) else: pass functions.sort() classes.sort() return functions, classes def generate_api_doc(self, uri): '''Make autodoc documentation template string for a module Parameters ---------- uri : string python location of module - e.g 'sphinx.builder' Returns ------- head : string Module name, table of contents. body : string Function and class docstrings. ''' # get the names of all classes and functions functions, classes = self._parse_module_with_import(uri) if not len(functions) and not len(classes) and DEBUG: print('WARNING: Empty -', uri) # dbg # Make a shorter version of the uri that omits the package name for # titles uri_short = re.sub(r'^%s\.' % self.package_name,'',uri) head = '.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n' body = '' # Set the chapter title to read 'module' for all modules except for the # main packages if '.' in uri_short: title = 'Module: :mod:`' + uri_short + '`' head += title + '\n' + self.rst_section_levels[2] * len(title) else: title = ':mod:`' + uri_short + '`' head += title + '\n' + self.rst_section_levels[1] * len(title) head += '\n.. automodule:: ' + uri + '\n' head += '\n.. currentmodule:: ' + uri + '\n' body += '\n.. currentmodule:: ' + uri + '\n\n' for c in classes: body += '\n:class:`' + c + '`\n' \ + self.rst_section_levels[3] * \ (len(c)+9) + '\n\n' body += '\n.. autoclass:: ' + c + '\n' # must NOT exclude from index to keep cross-refs working body += ' :members:\n' \ ' :undoc-members:\n' \ ' :show-inheritance:\n' \ '\n' \ ' .. automethod:: __init__\n\n' head += '.. autosummary::\n\n' for f in classes + functions: head += ' ' + f + '\n' head += '\n' for f in functions: # must NOT exclude from index to keep cross-refs working body += f + '\n' body += self.rst_section_levels[3] * len(f) + '\n' body += '\n.. autofunction:: ' + f + '\n\n' return head, body def _survives_exclude(self, matchstr, match_type): ''' Returns True if *matchstr* does not match patterns ``self.package_name`` removed from front of string if present Examples -------- >>> dw = ApiDocWriter('sphinx') >>> dw._survives_exclude('sphinx.okpkg', 'package') True >>> dw.package_skip_patterns.append('^\\.badpkg$') >>> dw._survives_exclude('sphinx.badpkg', 'package') False >>> dw._survives_exclude('sphinx.badpkg', 'module') True >>> dw._survives_exclude('sphinx.badmod', 'module') True >>> dw.module_skip_patterns.append('^\\.badmod$') >>> dw._survives_exclude('sphinx.badmod', 'module') False ''' if match_type == 'module': patterns = self.module_skip_patterns elif match_type == 'package': patterns = self.package_skip_patterns else: raise ValueError('Cannot interpret match type "%s"' % match_type) # Match to URI without package name L = len(self.package_name) if matchstr[:L] == self.package_name: matchstr = matchstr[L:] for pat in patterns: try: pat.search except AttributeError: pat = re.compile(pat) if pat.search(matchstr): return False return True def discover_modules(self): ''' Return module sequence discovered from ``self.package_name`` Parameters ---------- None Returns ------- mods : sequence Sequence of module names within ``self.package_name`` Examples -------- >>> dw = ApiDocWriter('sphinx') >>> mods = dw.discover_modules() >>> 'sphinx.util' in mods True >>> dw.package_skip_patterns.append('\.util$') >>> 'sphinx.util' in dw.discover_modules() False >>> ''' modules = [self.package_name] # raw directory parsing for dirpath, dirnames, filenames in os.walk(self.root_path): # Check directory names for packages root_uri = self._path2uri(os.path.join(self.root_path, dirpath)) # Normally, we'd only iterate over dirnames, but since # dipy does not import a whole bunch of modules we'll # include those here as well (the *.py filenames). filenames = [f[:-3] for f in filenames if f.endswith('.py') and not f.startswith('__init__')] for filename in filenames: package_uri = '/'.join((dirpath, filename)) for subpkg_name in dirnames + filenames: package_uri = '.'.join((root_uri, subpkg_name)) package_path = self._uri2path(package_uri) if (package_path and self._survives_exclude(package_uri, 'package')): modules.append(package_uri) return sorted(modules) def write_modules_api(self, modules, outdir): # upper-level modules main_module = modules[0].split('.')[0] ulms = ['.'.join(m.split('.')[:2]) if m.count('.') >= 1 else m.split('.')[0] for m in modules] from collections import OrderedDict module_by_ulm = OrderedDict() for v, k in zip(modules, ulms): if k in module_by_ulm: module_by_ulm[k].append(v) else: module_by_ulm[k] = [v] written_modules = [] for ulm, mods in module_by_ulm.items(): print "Generating docs for %s:" % ulm document_head = [] document_body = [] for m in mods: print " -> " + m head, body = self.generate_api_doc(m) document_head.append(head) document_body.append(body) out_module = ulm + self.rst_extension outfile = os.path.join(outdir, out_module) fileobj = open(outfile, 'wt') fileobj.writelines(document_head + document_body) fileobj.close() written_modules.append(out_module) self.written_modules = written_modules def write_api_docs(self, outdir): """Generate API reST files. Parameters ---------- outdir : string Directory name in which to store files We create automatic filenames for each module Returns ------- None Notes ----- Sets self.written_modules to list of written modules """ if not os.path.exists(outdir): os.mkdir(outdir) # compose list of modules modules = self.discover_modules() self.write_modules_api(modules,outdir) def write_index(self, outdir, froot='gen', relative_to=None): """Make a reST API index file from written files Parameters ---------- path : string Filename to write index to outdir : string Directory to which to write generated index file froot : string, optional root (filename without extension) of filename to write to Defaults to 'gen'. We add ``self.rst_extension``. relative_to : string path to which written filenames are relative. This component of the written file path will be removed from outdir, in the generated index. Default is None, meaning, leave path as it is. """ if self.written_modules is None: raise ValueError('No modules written') # Get full filename path path = os.path.join(outdir, froot+self.rst_extension) # Path written into index is relative to rootpath if relative_to is not None: relpath = (outdir + os.path.sep).replace(relative_to + os.path.sep, '') else: relpath = outdir idx = open(path,'wt') w = idx.write w('.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n') title = "API Reference" w(title + "\n") w("=" * len(title) + "\n\n") w('.. toctree::\n\n') for f in self.written_modules: w(' %s\n' % os.path.join(relpath,f)) idx.close() dipy-0.10.1/doc/tools/build_modref_templates.py000077500000000000000000000055041263041327500215400ustar00rootroot00000000000000#!/usr/bin/env python """Script to auto-generate our API docs. """ from __future__ import print_function, division # stdlib imports import sys import re from os.path import join as pjoin # local imports from apigen import ApiDocWriter # version comparison from distutils.version import LooseVersion as V #***************************************************************************** def abort(error): print('*WARNING* API documentation not generated: %s' % error) exit() if __name__ == '__main__': package = sys.argv[1] outdir = sys.argv[2] try: other_defines = sys.argv[3] except IndexError: other_defines = True else: other_defines = other_defines in ('True', 'true', '1') # Check that the package is available. If not, the API documentation is not # (re)generated and existing API documentation sources will be used. try: __import__(package) except ImportError, e: abort("Can not import " + package) module = sys.modules[package] # Check that the source version is equal to the installed # version. If the versions mismatch the API documentation sources # are not (re)generated. This avoids automatic generation of documentation # for older or newer versions if such versions are installed on the system. installed_version = V(module.__version__) info_file = pjoin('..', package, 'info.py') info_lines = open(info_file).readlines() source_version = '.'.join([v.split('=')[1].strip(" '\n.") for v in info_lines if re.match( '^_version_(major|minor|micro|extra)', v )]) print('***', source_version) if source_version != installed_version: abort("Installed version does not match source version") docwriter = ApiDocWriter(package, rst_extension='.rst', other_defines=other_defines) docwriter.package_skip_patterns += [r'\.fixes$', r'\.externals$', r'\.reconst.eit$', r'\.tracking\.interfaces.*$', r'\.tracking\.gui_tools.*$', r'.*test.*$', r'\.utils.*$', r'\.viz.*$', r'\.boots\.resampling.*$', r'\.fixes.*$', r'\.info.*$', r'\.pkg_info.*$', ] docwriter.write_api_docs(outdir) docwriter.write_index(outdir, 'index', relative_to=outdir) print('%d files written' % len(docwriter.written_modules)) dipy-0.10.1/doc/upload-gh-pages.sh000077500000000000000000000015671263041327500166330ustar00rootroot00000000000000#!/bin/bash # Upload website to gh-pages USAGE="$0 []" HTML_DIR=$1 if [ -z "$HTML_DIR" ]; then echo $USAGE exit 1 fi if [ ! -e "$HTML_DIR/index.html" ]; then echo "$HTML_DIR does not contain an index.html" exit 1 fi if [ -d "$HTML_DIR/.git" ]; then echo "$HTML_DIR already contains a .git directory" exit 1 fi PROJECT=$2 if [ -z "$PROJECT" ]; then echo $USAGE exit 1 fi ORGANIZATION=$3 if [ -z "$ORGANIZATION" ]; then ORGANIZATION=nipy fi upstream_repo="https://github.com/$ORGANIZATION/$PROJECT" cd $HTML_DIR git init git checkout -b gh-pages git add * # A nojekyll file is needed to tell github that this is *not* a jekyll site: touch .nojekyll git add .nojekyll git commit -a -m "Documentation build - no history" git remote add origin $upstream_repo git push origin gh-pages --force rm -rf .git # Yes dipy-0.10.1/fake_pyrex/000077500000000000000000000000001263041327500146765ustar00rootroot00000000000000dipy-0.10.1/fake_pyrex/Pyrex/000077500000000000000000000000001263041327500160055ustar00rootroot00000000000000dipy-0.10.1/fake_pyrex/Pyrex/Distutils/000077500000000000000000000000001263041327500177715ustar00rootroot00000000000000dipy-0.10.1/fake_pyrex/Pyrex/Distutils/__init__.py000066400000000000000000000000771263041327500221060ustar00rootroot00000000000000# to work around bug in setuptools monkeypatching of distutils dipy-0.10.1/fake_pyrex/Pyrex/Distutils/build_ext.py000066400000000000000000000000321263041327500223150ustar00rootroot00000000000000build_ext = "placeholder" dipy-0.10.1/fake_pyrex/Pyrex/__init__.py000066400000000000000000000000771263041327500201220ustar00rootroot00000000000000# to work around bug in setuptools monkeypatching of distutils dipy-0.10.1/requirements.txt000066400000000000000000000000601263041327500160210ustar00rootroot00000000000000numpy>=1.6 scipy>=0.9 cython>=0.18 nibabel>=1.2 dipy-0.10.1/scratch/000077500000000000000000000000001263041327500141705ustar00rootroot00000000000000dipy-0.10.1/scratch/coordmap_example.py000066400000000000000000000033561263041327500200700ustar00rootroot00000000000000import numpy as np from dipy.tracking.vox2track import track_counts from dipy.tracking.utils import density_map import nibabel as nib from nibabel.trackvis import write, empty_header grid = np.mgrid[1.1:1.8:3j,1.1:1.8:3j,.5:5] grid = np.rollaxis(grid, 0, 4) streamlines = [] for ii in grid: for jj in ii: streamlines.append(jj) #Treat these streamlines as if they are in trackvis format and generate counts counts_trackvis = density_map(streamlines, (4,4,5), (1,1,1)) #Treat these streamlines as if they are in nifti format and generate counts counts_nifti = track_counts(streamlines, (4,4,5), (1,1,1), return_elements=False) print("saving trk files and track_count volumes") aff = np.eye(4) aff[0, 0] = -1 img = nib.Nifti1Image(counts_trackvis.astype('int16'), aff) nib.save(img, 'counts_trackvis.nii.gz') img = nib.Nifti1Image(counts_nifti.astype('int16'), aff) nib.save(img, 'counts_nifti.nii.gz') hdr = empty_header() hdr['voxel_size'] = (1,1,1) hdr['voxel_order'] = 'las' hdr['vox_to_ras'] = aff hdr['dim'] = counts_nifti.shape #Treat these streamlines like they are in trackvis format and save them streamlines_trackvis = ((ii,None,None) for ii in streamlines) write('slAsTrackvis.trk', streamlines_trackvis, hdr) #Move these streamlines from nifti to trackvis format and save them streamlines_nifti = ((ii+.5,None,None) for ii in streamlines) write('slAsNifti.trk', streamlines_nifti, hdr) """ Trackvis: A------------ | C | | | ----B-------- | | | | ------------- | | | | ------------D A = [0, 0] B = [1, 1] C = [.5, .5] D = [3, 3] Nifti: A------------ | C | | | ----B-------- | | | | ------------- | | | | ------------D A = [-.5, -.5] B = [.5, .5] C = [0, 0] D = [2.5, 2.5] """ dipy-0.10.1/scratch/learning_old.py000066400000000000000000000745051263041327500172120ustar00rootroot00000000000000''' Learning algorithms for tractography''' import numpy as np from . import track_metrics as tm import dipy.core.track_performance as pf from scipy import ndimage as nd import itertools import time import numpy.linalg as npla def larch(tracks, split_thrs=[50.**2,20.**2,10.**2], ret_atracks=False, info=False): ''' LocAl Rapid Clusters for tractograpHy Parameters ---------- tracks : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) split_thrs : sequence of 3 floats with the squared distances approx_tracks: bool if True return an approximation of the initial tracks info: bool print some information Returns -------- C : dict a tree graph containing the clusters atracks : sequence of approximated tracks the approximation preserves initial shape. ''' ''' t1=time.clock() print 'Reducing to 3-point approximate tracks...' tracks3=[tm.downsample(t,3) for t in tracks] t2=time.clock() print 'Done in ', t2-t1, 'secs' print 'Reducing to n-point approximate tracks...' atracks=[pf.approx_polygon_track(t) for t in tracks] t3=time.clock() print 'Done in ', t3-t2, 'secs' print('Starting larch_preprocessing...') C=pf.larch_preproc(tracks3,split_thrs,info) t4=time.clock() print 'Done in ', t4-t3, 'secs' print('Finding most similar tracks in every cluster ...') for c in C: local_tracks=[atracks[i] for i in C[c]['indices']] #identify the most similar track in the cluster C[c] and return the index of #the track and the distances of this track with all other tracks msi,distances=pf.most_similar_track_mam(local_tracks,metric='avg') C[c]['repz']=atracks[C[c]['indices'][msi]] C[c]['repz_dists']=distances print 'Done in ', time.clock()-t4 if ret_atracks: return C,atracks else: return C ''' return def detect_corresponding_tracks(indices,tracks1,tracks2): ''' Detect corresponding tracks from 1 to 2 Parameters ---------- indices : sequence of indices of tracks1 that are to be detected in tracks2 tracks1 : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) tracks2 : sequence of tracks as arrays, shape (M1,3) .. (Mm,3) Returns ------- track2track : array of int showing the correspondance ''' li=len(indices) track2track=np.zeros((li,3)) cnt=0 for i in indices: rt=[pf.zhang_distances(tracks1[i],t,'avg') for t in tracks2] rt=np.array(rt) track2track[cnt-1]=np.array([cnt,i,rt.argmin()]) cnt+=1 return track2track.astype(int) def detect_corresponding_tracks_extended(indices,tracks1,indices2,tracks2): ''' Detect corresponding tracks from 1 to 2 Parameters: ---------------- indices: sequence of indices of tracks1 that are to be detected in tracks2 tracks1: sequence of tracks as arrays, shape (N1,3) .. (Nm,3) indices2: sequence of indices of tracks2 in the initial brain tracks2: sequence of tracks as arrays, shape (M1,3) .. (Mm,3) Returns: ----------- track2track: array of int showing the correspondance ''' li=len(indices) track2track=np.zeros((li,3)) cnt=0 for i in indices: rt=[pf.zhang_distances(tracks1[i],t,'avg') for t in tracks2] rt=np.array(rt) track2track[cnt-1]=np.array([cnt,i,indices2[rt.argmin()]]) cnt+=1 return track2track.astype(int) def rm_far_ends(ref,tracks,dist=25): ''' rm tracks with far endpoints Parameters ---------- ref : array, shape (N,3) xyz points of the reference track tracks : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) dist : float endpoint distance threshold Returns ------- tracksr : sequence reduced tracks indices : sequence indices of tracks ''' indices=[i for (i,t) in enumerate(tracks) if tm.max_end_distances(t,ref) <= dist] tracksr=[tracks[i] for i in indices] return tracksr,indices def rm_far_tracks(ref,tracks,dist=25,down=False): ''' Remove tracks which are far away using as a distance metric the average euclidean distance of the following three points start point, midpoint and end point. Parameters ---------- ref : array, shape (N,3) xyz points of the reference track tracks : sequence of tracks as arrays, shape (N1,3) .. (Nm,3) dist : float average distance threshold down: bool {True, False} if down = True then ref and tracks are already downsampled if down = False then downsample them Returns ------- tracksr : sequence reduced tracks indices : sequence indices of tracks ''' if down==False: tracksd=[tm.downsample(t,3) for t in tracks] refd=tm.downsample(ref,3) indices=[i for (i,t) in enumerate(tracksd) if np.mean(np.sqrt(np.sum((t-refd)**2,axis=1))) <= dist] tracksr=[tracks[i] for i in indices] return tracksr, indices if down==True: indices=[i for (i,t) in enumerate(tracks) if np.mean(np.sqrt(np.sum((t-ref)**2,axis=1))) <= dist] tracksr=[tracks[i] for i in indices] return tracksr,indices def missing_tracks(indices1,indices2): ''' Missing tracks in bundle1 but not bundle2 Parameters: ------------------ indices1: sequence of indices of tracks in bundle1 indices2: sequence of indices of tracks in bundle2 Returns: ----------- indices: sequence of indices of tracks in bundle1 absent from bundle2 Example: ------------- >>> tracksar,indar=rm_far_tracks(ref,tracksa,dist=20) >>> fornix_ind=G[5]['indices'] >>> len(missing_tracks(fornix_ind, indar)) = 5 >>> tracksar,indar=rm_far_tracks(ref,tracksa,dist=25) >>> fornix_ind=G[5]['indices'] >>> len(missing_tracks(fornix_ind, indar)) = 0 ''' return list(set(indices1).difference(set(indices2))) def skeletal_tracks(tracks,rand_selected=1000,ball_radius=5,neighb_no=50): ''' Filter out unnescessary tracks and keep only a few good ones. Aka the balls along a track method. Parameters: ---------------- tracks: sequence of tracks rand_selected: int number of initially selected fibers ball_radius: float balls along tracks radii neighb_no: int lowest threshold for the number of tracks included Returns: ----------- reps: sequence of indices of representative aka skeletal tracks. They should be <= rand_selected ''' trackno=len(tracks) #select 1000 random tracks random_indices=(trackno*np.random.rand(rand_selected)).astype(int) tracks3points=[tm.downsample(t,3) for t in tracks] #store representative tracks representative=[] representative_indices=[] #store indices of already visited tracks i.e. which already have a representative track visited=[] import time t1=time.clock() # for every index of the possible representative tracks for (i,t) in enumerate(random_indices): #if track is not already classified if i not in visited: print(i,t) #rm far tracks tracksr,indices=rm_far_tracks(tracks3points[t],tracks3points,dist=25,down=True) cnt_neighb=0 just_visited=[] #for every possible neighbour track tr with index tri for tri in indices: cnt_intersected_balls=0 #for every point of the possible representative track for p in tracks[t]: #if you intersect the sphere surrounding the point of the random track increase a counter if tm.inside_sphere(tracks[tri],p,ball_radius): cnt_intersected_balls+=1 #if all spheres are covered then accept this track as your neighbour if cnt_intersected_balls ==len(tracks[t]): cnt_neighb+=1 just_visited.append(tri) #if the number of possible neighbours is above threshold then accept track[t] as a representative fiber if cnt_neighb>=neighb_no: representative.append(t) visited=visited+just_visited print 'Time:',time.clock()-t1 return representative def detect_corpus_callosum(tracks,plane=91,ysize=217,zsize=181,width=1.0,use_atlas=0,use_preselected_tracks=0,ball_radius=5): ''' Detect corpus callosum in a mni registered dataset of shape (181,217,181) Parameters: ---------------- tracks: sequence of tracks Returns: ---------- cc_indices: sequence with the indices of the corpus_callosum tracks left_indices: sequence with the indices of the rest of the brain ''' cc=[] #for every track for (i,t) in enumerate(tracks): #for every index of any point in the track for pi in range(len(t)-1): #if track segment is cutting the plane (assuming the plane is at the x-axis X=plane) if (t[pi][0] <= plane and t[pi+1][0] >= plane) or (t[pi+1][0] <= plane and t[pi][0] >= plane) : v=t[pi+1]-t[pi] k=(plane-t[pi][0])/v[0] hit=k*v+t[pi] #report the index of the track and the point of intersection with the plane cc.append((i,hit)) #indices cc_i=[c[0] for c in cc] print 'Number of tracks cutting plane Before',len(cc_i) #hit points cc_p=np.array([c[1] for c in cc]) p_neighb=len(cc_p)*[0] cnt=0 #imaging processing from now on im=np.zeros((ysize,zsize)) im2=np.zeros((ysize,zsize)) im_track={} cnt=0 for p in cc_p: p1=int(round(p[1])) p2=int(round(p[2])) im[p1,p2]=1 im2[p1,p2]=im2[p1,p2]+1 try: im_track[(p1,p2)]=im_track[(p1,p2)]+[cc_i[cnt]] except: im_track[(p1,p2)]=[cc_i[cnt]] cnt+=1 #create a cross structure cross=np.array([[0,1,0],[1,1,1],[0,1,0]]) im=(255*im).astype('uint8') im2=(np.interp(im2,[0,im2.max()],[0,255])).astype('uint8') #erosion img=nd.binary_erosion(im,structure=cross) #and another one erosion #img=nd.binary_erosion(img,structure=cross) #im2g=nd.grey_erosion(im2,structure=cross) #im2g2=nd.grey_erosion(im2g,structure=cross) indg2=np.where(im2==im2.max()) p1max=indg2[0][0] p2max=indg2[1][0] #label objects imgl=nd.label(img) no_labels=imgl[1] imgl=imgl[0] #find the biggest objects the second biggest should be the cc the biggest should be the background ''' find_big=np.zeros(no_labels) for i in range(no_labels): ind=np.where(imgl==i) find_big[i]=len(ind[0]) print find_big find_bigi=np.argsort(find_big) ''' cc_label=imgl[p1max,p2max] imgl2=np.zeros((ysize,zsize)) #cc is found and copied to a new image here #imgl2[imgl==int(find_bigi[-2])]=1 imgl2[imgl==int(cc_label)]=1 imgl2=imgl2.astype('uint8') #now do another dilation to recover some cc shape from the previous erosion imgl2d=nd.binary_dilation(imgl2,structure=cross) #and another one #imgl2d=nd.binary_dilation(imgl2d,structure=cross) imgl2d=imgl2d.astype('uint8') #get the tracks back cc_indices=[] indcc=np.where(imgl2d>0) for i in range(len(indcc[0])): p1=indcc[0][i] p2=indcc[1][i] cc_indices=cc_indices+im_track[(p1,p2)] print 'After', len(cc_indices) #export also the rest of the brain indices=range(len(tracks)) left=set(indices).difference(set(cc_indices)) left_indices=[l for l in left] #return im,im2,imgl2d,cc_indices,left_indices return cc_indices,left_indices def track_indices_for_a_value_in_atlas(atlas,value,tes,tracks): ind=np.where(atlas==value) indices=set([]) for i in range(len(ind[0])): try: tmp=tes[(ind[0][i], ind[1][i], ind[2][i])] indices=indices.union(set(tmp)) except: pass #bundle=[tracks[i] for i in list(indices)] #return bundle,list(indices) return list(indices) def relabel_by_atlas_value_and_mam(atlas_tracks,atlas,tes,tracks,tracksd,zhang_thr): emi=emi_atlas() brain_relabeled={} for e in range(1,9): #from emi: print emi[e]['bundle_name'] indices=emi[e]['init_ref']+emi[e]['selected_ref']+emi[e]['apr_ref'] tmp=detect_corresponding_tracks(indices,atlas_tracks,tracks) corresponding_indices=tmp[:,2] corresponding_indices=list(set(corresponding_indices)) value_indices=[] for value in emi[e]['value']: value_indices+=track_indices_for_a_value_in_atlas(atlas,value,tes,tracks) value_indices=list(set(value_indices)) print 'len corr_ind',len(corresponding_indices) #check if value_indices do not have anything in common with corresponding_indices and expand if list(set(value_indices).intersection(set(corresponding_indices)))==[]: #value_indices=corresponding_indices print 'len corr_ind',len(corresponding_indices) for ci in corresponding_indices: print 'koukou',ci ref=tracksd[ci] brain_rf, ind_fr = rm_far_tracks(ref,tracksd,dist=10,down=True) value_indices+=ind_fr value_indices=list(set(value_indices)) print 'len vi',len(value_indices) value_indices_new=[] #reduce value_indices which are far from every corresponding fiber for vi in value_indices: dist=[] for ci in corresponding_indices: dist.append(pf.zhang_distances(tracks[vi],tracks[ci],'avg')) for d in dist: if d <= zhang_thr[e-1]: value_indices_new.append(vi) value_indices=list(set(value_indices_new)) #store value indices brain_relabeled[e]={} brain_relabeled[e]['value_indices']=value_indices brain_relabeled[e]['corresponding_indices']=corresponding_indices brain_relabeled[e]['color']=emi[e]['color'] brain_relabeled[e]['bundle_name']=emi[e]['bundle_name'][0] return brain_relabeled def threshold_hitdata(hitdata, divergence_threshold=0.25, fibre_weight=0.8): ''' [1] Removes hits in hitdata which have divergence above threshold. [2] Removes fibres in hitdata whose fraction of remaining hits is below the required weight. Parameters: ---------------- ref: array, shape (N,5) xyzrf hit data from cut_planes divergence_threshold: float if radial coefficient of divergence is above this then drop the hit fibre_weight: float the number of remaing hits on a fibre as a fraction of len(trackdata), which is the maximum number possible Returns: ----------- reduced_hitdata: array, shape (M, 5) light_weight_fibres: list of integer track indices ''' # first pass: remove hits with r>divergence_threshold firstpass = [[[x,y,z,r,f] for (x,y,z,r,f) in plane if r<=divergence_threshold] for plane in hitdata] # second pass: find fibres hit weights fibrecounts = {} for l in [[f,r] for (x,y,z,r,f) in itertools.chain(*firstpass)]: f = l[0].astype('int') try: fibrecounts[f] += 1 except: fibrecounts[f] = 1 weight_thresh = len(hitdata)*fibre_weight heavy_weight_fibres = [f for f in fibrecounts.keys() if fibrecounts[f]>=weight_thresh] # third pass reduced_hitdata = [np.array([[x,y,z,r,f] for (x,y,z,r,f) in plane if fibrecounts[f.astype('int')] >= weight_thresh]) for plane in firstpass] return reduced_hitdata, heavy_weight_fibres def neck_finder(hitdata, ref): ''' To identify regions of concentration of fibres related by hitdata to a reference fibre ''' #typically len(hitdata) = len(ref)-2 at present, though it should ideally be # len(ref)-1 which is the number of segments in ref # We will assume that hitdata[i] relates to the segment from ref[i] to ref[i+1] #xyz=[] #rcd=[] #fibres=[] weighted_mean_rcd = [] unweighted_mean_rcd = [] weighted_mean_dist = [] unweighted_mean_dist = [] hitcount = [] for (p, plane) in enumerate(hitdata): xyz = plane[:,:3] rcd =plane[:,3] fibres = plane[:,4] hitcount +=[len(plane)] radial_distances=np.sqrt(np.diag(np.inner(xyz-ref[p],xyz-ref[p]))) unweighted_mean_rcd += [np.average(1-rcd)] weighted_mean_rcd += [np.average(1-rcd, weights=np.exp(-radial_distances))] unweighted_mean_dist += [np.average(np.exp(-radial_distances))] weighted_mean_dist += [np.average(np.exp(-radial_distances), weights=1-rcd)] return np.array(hitcount), np.array(unweighted_mean_rcd), np.array(weighted_mean_rcd), \ np.array(unweighted_mean_dist), np.array(weighted_mean_dist) def max_concentration(plane_hits,ref): ''' calculates the log determinant of the concentration matrix for the hits in planehits ''' dispersions = [np.prod(np.sort(npla.eigvals(np.cov(p[:,0:3].T)))[1:2]) for p in plane_hits] index = np.argmin(dispersions) log_max_concentration = -np.log2(dispersions[index]) centre = ref[index+1] return index, centre, log_max_concentration def refconc(brain, ref, divergence_threshold=0.3, fibre_weight=0.7): ''' given a reference fibre locates the parallel fibres in brain (tracks) with threshold_hitdata applied to cut_planes output then follows with concentration to locate the locus of a neck ''' hitdata = pf.cut_plane(brain, ref) reduced_hitdata, heavy_weight_fibres = threshold_hitdata(hitdata, divergence_threshold, fibre_weight) #index, centre, log_max_concentration = max_concentration(reduced_hitdata, ref) index=None centre=None log_max_concentration=None return heavy_weight_fibres, index, centre def bundle_from_refs(brain,braind, refs, divergence_threshold=0.3, fibre_weight=0.7,far_thresh=25,zhang_thresh=15, end_thresh=10): ''' ''' bundle = set([]) centres = [] indices = [] for ref in refs: refd=tm.downsample(ref,3) brain_rf, ind_fr = rm_far_tracks(refd,braind,dist=far_thresh,down=True) brain_rf=[brain[i] for i in ind_fr] #brain_rf,ind_fr = rm_far_tracks(ref,brain,dist=far_thresh,down=False) heavy_weight_fibres, index, centre = refconc(brain_rf, ref, divergence_threshold, fibre_weight) heavy_weight_fibres_z = [i for i in heavy_weight_fibres if pf.zhang_distances(ref,brain_rf[i],'avg')end_thresh] hwfind = set([ind_fr[i] for i in heavy_weight_fibres_z]) bundle = bundle.union(hwfind) bundle_med = [] for i in bundle: minmaxdist = 0. for ref in refs: minmaxdist=min(minmaxdist,tm.max_end_distances(brain[i],ref)) if minmaxdist<=end_thresh: bundle_med.append(i) #centres.append(centre) #indices.append(index) #return list(bundle), centres, indices return bundle_med class FACT_Delta(): ''' Generates tracks with termination criteria defined by a delta function [1]_ and it has similarities with FACT algorithm [2]_. Can be used with any reconstruction method as DTI,DSI,QBI,GQI which can calculate an orientation distribution function and find the local peaks of that function. For example a single tensor model can give you only one peak a dual tensor model 2 peaks and quantitative anisotropy method as used in GQI can give you 3,4,5 or even more peaks. The parameters of the delta function are checking thresholds for the direction propagation magnitude and the angle of propagation. A specific number of seeds is defined randomly and then the tracks are generated for that seed if the delta function returns true. Trilinear interpolation is being used for defining the weights of the propagation. References ---------- .. [1] Yeh. et al. Generalized Q-Sampling Imaging, TMI 2010. .. [2] Mori et al. Three-dimensional tracking of axonal projections in the brain by magnetic resonance imaging. Ann. Neurol. 1999. ''' def __init__(self,qa,ind,seeds_no=1000,odf_vertices=None,qa_thr=0.0239,step_sz=0.5,ang_thr=60.): ''' Parameters ---------- qa: array, shape(x,y,z,Np), magnitude of the peak (QA) or shape(x,y,z) a scalar volume like FA. ind: array, shape(x,y,z,Np), indices of orientations of the QA peaks found at odf_vertices used in QA or, shape(x,y,z), ind seeds_no: number of random seeds odf_vertices: sphere points which define a discrete representation of orientations for the peaks, the same for all voxels qa_thr: float, threshold for QA(typical 0.023) or FA(typical 0.2) step_sz: float, propagation step ang_thr: float, if turning angle is smaller than this threshold then tracking stops. Returns ------- tracks: sequence of arrays ''' if len(qa.shape)==3: qa.shape=qa.shape+(1,) ind.shape=ind.shape+(1,) #store number of maximum peacks self.Np=qa.shape[-1] x,y,z,g=qa.shape tlist=[] if odf_vertices==None: eds=np.load(os.path.join(os.path.dirname(__file__),'matrices',\ 'evenly_distributed_sphere_362.npz')) odf_vertices=eds['vertices'] self.seed_list=[] for i in range(seeds_no): rx=(x-1)*np.random.rand() ry=(y-1)*np.random.rand() rz=(z-1)*np.random.rand() seed=np.array([rx,ry,rz]) #print 'init seed', seed #self.seed_list.append(seed.copy()) track=self.propagation(seed.copy(),qa,ind,odf_vertices,qa_thr,ang_thr,step_sz) if track == None: pass else: self.seed_list.append(seed.copy()) tlist.append(track) self.tracks=tlist def trilinear_interpolation(self,X): ''' Parameters ---------- X: array, shape(3,), a point Returns -------- W: array, shape(8,2) weights, think of them like the 8 subvolumes of a unit cube surrounding the seed. IN: array, shape(8,2), the corners of the unit cube ''' Xf=np.floor(X) #d holds the distance from the (floor) corner of the voxel d=X-Xf #nd holds the distance from the opposite corner nd = 1-d #filling the weights W=np.array([[ nd[0] * nd[1] * nd[2] ], [ d[0] * nd[1] * nd[2] ], [ nd[0] * d[1] * nd[2] ], [ nd[0] * nd[1] * d[2] ], [ d[0] * d[1] * nd[2] ], [ nd[0] * d[1] * d[2] ], [ d[0] * nd[1] * d[2] ], [ d[0] * d[1] * d[2] ]]) IN=np.array([[ Xf[0] , Xf[1] , Xf[2] ], [ Xf[0]+1 , Xf[1] , Xf[2] ], [ Xf[0] , Xf[1]+1, Xf[2] ], [ Xf[0] , Xf[1] , Xf[2]+1 ], [ Xf[0]+1 , Xf[1]+1, Xf[2] ], [ Xf[0] , Xf[1]+1, Xf[2]+1 ], [ Xf[0]+1 , Xf[1] , Xf[2]+1 ], [ Xf[0]+1 , Xf[1]+1, Xf[2]+1 ]]) return W,IN.astype(np.int) def nearest_direction(self,dx,qa,ind,odf_vertices,qa_thr=0.0245,ang_thr=60.): ''' Give the nearest direction to a point Parameters ---------- dx: array, shape(3,), as float, moving direction of the current tracking qa: array, shape(Np,), float, quantitative anisotropy matrix, where Np the number of peaks, found using self.Np ind: array, shape(Np,), float, index of the track orientation odf_vertices: array, shape(N,3), float, odf sampling directions qa_thr: float, threshold for QA, we want everything higher than this threshold ang_thr: float, theshold, we only select fiber orientation with this range Returns -------- delta: bool, delta funtion, if 1 we give it weighting if it is 0 we don't give any weighting direction: array, shape(3,), the fiber orientation to be consider in the interpolation ''' max_dot=0 max_doti=0 angl = np.cos((np.pi*ang_thr)/180.) if qa[0] <= qa_thr: return False, np.array([0,0,0]) for i in range(self.Np): if qa[i]<= qa_thr: break curr_dot = np.abs(np.dot(dx, odf_vertices[ind[i]])) if curr_dot > max_dot: max_dot = curr_dot max_doti = i if max_dot < angl : return False, np.array([0,0,0]) if np.dot(dx,odf_vertices[ind[max_doti]]) < 0: return True, - odf_vertices[ind[max_doti]] else: return True, odf_vertices[ind[max_doti]] def propagation_direction(self,point,dx,qa,ind,odf_vertices,qa_thr,ang_thr): ''' Find where you are moving next ''' total_w = 0 # total weighting new_direction = np.array([0,0,0]) w,index=self.trilinear_interpolation(point) #print w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7] #print index #check if you are outside of the volume for i in range(3): if index[7][i] >= qa.shape[i] or index[0][i] < 0: return False, np.array([0,0,0]) #calculate qa & ind of each of the 8 corners for m in range(8): x,y,z = index[m] qa_tmp = qa[x,y,z] ind_tmp = ind[x,y,z] #print qa_tmp[0]#,qa_tmp[1],qa_tmp[2],qa_tmp[3],qa_tmp[4] delta,direction = self.nearest_direction(dx,qa_tmp,ind_tmp,odf_vertices,qa_thr,ang_thr) #print delta, direction if not delta: continue total_w += w[m] new_direction = new_direction + w[m][0]*direction if total_w < .5: # termination criteria return False, np.array([0,0,0]) return True, new_direction/np.sqrt(np.sum(new_direction**2)) def initial_direction(self,seed,qa,ind,odf_vertices,qa_thr): ''' First direction that we get from a seeding point ''' #very tricky/cool addition/flooring that helps create a valid #neighborhood (grid) for the trilinear interpolation to run smoothly #seed+=0.5 point=np.floor(seed+.5) x,y,z = point qa_tmp=qa[x,y,z,0]#maximum qa ind_tmp=ind[x,y,z,0]#corresponing orientation indices for max qa if qa_tmp < qa_thr: return False, np.array([0,0,0]) else: return True, odf_vertices[ind_tmp] def propagation(self,seed,qa,ind,odf_vertices,qa_thr,ang_thr,step_sz): ''' Parameters ---------- seed: array, shape(3,), point where the tracking starts qa: array, shape(Np,), float, quantitative anisotropy matrix, where Np the number of peaks, found using self.Np ind: array, shape(Np,), float, index of the track orientation Returns ------- d: bool, delta function result idirection: array, shape(3,), index of the direction of the propagation ''' point_bak=seed.copy() point=seed.copy() #d is the delta function d,idirection=self.initial_direction(seed,qa,ind,odf_vertices,qa_thr) #print('FD',idirection[0],idirection[1],idirection[2]) #print d if not d: return None dx = idirection #point = seed-0.5 track = [] track.append(point.copy()) #track towards one direction while d: d,dx = self.propagation_direction(point,dx,qa,ind,\ odf_vertices,qa_thr,ang_thr) if not d: break point = point + step_sz*dx track.append(point) d = True dx = - idirection point=point_bak.copy() #point = seed #track towards the opposite direction while d: d,dx = self.propagation_direction(point,dx,qa,ind,\ odf_vertices,qa_thr,ang_thr) if not d: break point = point + step_sz*dx track.insert(0,point.copy()) return np.array(track) dipy-0.10.1/scratch/odf.py000066400000000000000000000052271263041327500153200ustar00rootroot00000000000000import numpy as np from enthought.mayavi import mlab import Image def disp_odf(sph_map, theta_res=64, phi_res=32, colormap='RGB', colors=256): pi = np.pi sin = np.sin cos = np.cos theta, phi = np.mgrid[0:2*pi:theta_res*1j, 0:pi:phi_res*1j] x = sin(phi)*cos(theta) y = sin(phi)*sin(theta) z = cos(phi) nvox = np.prod(sph_map.shape) x_cen, y_cen, z_cen = _3grid(sph_map.shape) odf_values = sph_map.evaluate_at(theta, phi) max_value = odf_values.max() mlab.figure() for ii in range(nvox): odf_ii = odf_values.reshape(nvox, theta_res, phi_res)[ii,:,:] odf_ii /= max_value * 2 if colormap == 'RGB': rgb = np.r_['-1,3,0', x*odf_ii, y*odf_ii, z*odf_ii] rgb = np.abs(rgb*255/rgb.max()).astype('uint8') odf_im = Image.fromarray(rgb, mode='RGB') odf_im = odf_im.convert('P', palette=Image.ADAPTIVE, colors=colors) lut = np.empty((colors,4),'uint8') lut[:,3] = 255 lut[:,0:3] = np.reshape(odf_im.getpalette(),(colors,3)) oo = mlab.mesh(x*odf_ii + x_cen.flat[ii], y*odf_ii + y_cen.flat[ii], z*odf_ii + z_cen.flat[ii], scalars=np.int16(odf_im)) oo.module_manager.scalar_lut_manager.lut.table=lut else: oo = mlab.mesh(x*odf_ii + x_cen.flat[ii], y*odf_ii + y_cen.flat[ii], z*odf_ii + z_cen.flat[ii], scalars=odf_ii, colormap=colormap) def _3grid(shape): if len(shape) > 3: raise ValueError('cannot display 4d image') elif len(shape) < 3: d = [1, 1, 1] d[0:len(shape)] = shape else: d = shape return np.mgrid[0:d[0], 0:d[1], 0:d[2]] if __name__ == '__main__': import dipy.core.qball as qball from dipy.io.bvectxt import read_bvec_file filename='/Users/bagrata/HARDI/E1322S8I1.nii.gz' grad_table_filename='/Users/bagrata/HARDI/E1322S8I1.bvec' from nipy import load_image, save_image grad_table, b_values = read_bvec_file(grad_table_filename) img = load_image(filename) print 'input dimensions: ' print img.ndim print 'image size: ' print img.shape print 'image affine: ' print img.affine print 'images has pixels with size: ' print np.dot(img.affine, np.eye(img.ndim+1)).diagonal()[0:3] data = np.asarray(img) theta, phi = np.mgrid[0:2*np.pi:64*1j, 0:np.pi:32*1j] odf_i = qball.ODF(data[188:192,188:192,22:24,:],4,grad_table,b_values) disp_odf(odf_i[0:1,0:2,0:2]) dipy-0.10.1/scratch/profile_dti.py000066400000000000000000000012541263041327500170440ustar00rootroot00000000000000""" To use: import profile_dti as p import dipy.reconst.dti as dti lprun -f dti.restore_fit_tensor -f p.tm.fit_method p.func() """ import nibabel as nib import dipy.core.gradients as grad import dipy.data as dpd import dipy.reconst.dti as dti data, bvals, bvecs = dpd.get_data('small_25') dd = nib.load(data).get_data() gtab = grad.gradient_table(bvals, bvecs) fit_method = 'restore' # 'NLLS' jac = True # False # To profile RESTORE, set some of the signals to be outliers (otherwise comment # out the following line): dd[..., 5] = 1.0 tm = dti.TensorModel(gtab, fit_method=fit_method, jac=True, sigma=10) def func(): tf = tm.fit(dd) if __name__=="__main__": func() dipy-0.10.1/scratch/restore_dti_simulations.py000066400000000000000000000017571263041327500215260ustar00rootroot00000000000000 import numpy as np import nibabel as nib import dipy.reconst.dti as dti import dipy.data as dpd import dipy.core.gradients as grad b0 = 1000. bvecs, bval = dpd.read_bvec_file(dpd.get_data('55dir_grad.bvec')) gtab = grad.gradient_table(bval, bvecs) B = bval[1] D = np.array([1., 1., 1., 0., 0., 1., -np.log(b0) * B]) / B evals = np.array([2., 1., 0.]) / B md = evals.mean() tensor = dti.from_lower_triangular(D) X = dti.design_matrix(bvecs, bval) data = np.exp(np.dot(X,D)) data.shape = (-1,) + data.shape dti_wls = dti.TensorModel(gtab) fit_wls = dti_wls.fit(data) fa1 = fit_wls.fa noisy_data = np.copy(data) noisy_data[..., -1] = 1.0 fit_wls_noisy = dti_wls.fit(noisy_data) fa2 = fit_wls_noisy.fa dti_restore = dti.TensorModel(gtab, fit_method='RESTORE', sigma=67.) fit_restore_noisy = dti_restore.fit(noisy_data) fa3 = fit_restore_noisy.fa print("FA for noiseless data: %s"%fa1) print("FA for noise-introduced data: %s"%fa2) print("FA for noise-introduced data, analyzed with RESTORE: %s"%fa3) dipy-0.10.1/scratch/sphplot.py000066400000000000000000000017071263041327500162400ustar00rootroot00000000000000import numpy as np from dipy.viz import fos import dipy.core.geometry as geometry import matplotlib.pyplot as mplp def plot_sphere(v,key): r = fos.ren() fos.add(r,fos.point(v,fos.green, point_radius= 0.01)) fos.show(r, title=key, size=(1000,1000)) def plot_lambert(v,key,centre=np.array([0,0])): lamb = geometry.lambert_equal_area_projection_cart(*v.T).T (y1,y2) = lamb radius = np.sum(lamb**2,axis=0) < 1 #print inner #print y1[inner] #print y1[-inner] fig = mplp.figure(facecolor='w') current = fig.add_subplot(111) current.patch.set_color('k') current.plot(y1[radius],y2[radius],'.g') current.plot(y1[-radius],y2[-radius],'.r') current.plot([0.],[0.],'ob') #current.patches.Circle(*centre, radius=50, color='w', fill=True, alpha=0.7) current.axes.set_aspect(aspect = 'equal', adjustable = 'box') current.title.set_text(key) fig.show() fig.waitforbuttonpress() mplp.close() dipy-0.10.1/scratch/twoD.py000066400000000000000000000012101263041327500154510ustar00rootroot00000000000000import pylab as pl import numpy as np def imshow(array, cmap='gray',interpolation='nearest', alpha=1.0, vmin=None, vmax=None, origin=None, extent=None): """ Wrapper for pylab.imshow that displays array values as well coordinate values with mouse over. """ pl.imshow(array.T, cmap=cmap, interpolation=interpolation, alpha=alpha, vmin=vmin, vmax=vmax, origin=origin, extent=extent) ax = pl.gca() ax.format_coord = __report_pixel def __report_pixel(x, y): x = np.round(x) y = np.round(y) v = pl.gca().get_images()[0].get_array()[y, x] return "x = %d y = %d v = %5.3f" % (x, y, v) dipy-0.10.1/scratch/very_scratch/000077500000000000000000000000001263041327500166645ustar00rootroot00000000000000dipy-0.10.1/scratch/very_scratch/bingham.py000066400000000000000000000126031263041327500206450ustar00rootroot00000000000000import sympy from scipy.integrate import quad, dblquad from scipy.optimize import fmin_powell import numpy as np import scipy as sc ''' def integrand(t,n,x): return np.exp(-x*t) / t**n def expint(n,x): return quad(integrand, 1, np.Inf, args=(n, x))[0] vec_expint = np.vectorize(expint) print vec_expint(3,np.arange(1.0,4.0,0.5)) ''' #array([ 0.1097, 0.0567, 0.0301, 0.0163, 0.0089, 0.0049]) ''' print sc.special.expn(3,np.arange(1.0,4.0,0.5)) ''' #array([ 0.1097, 0.0567, 0.0301, 0.0163, 0.0089, 0.0049]) ''' result = quad(lambda x: expint(3, x), 0, np.inf) print result ''' #(0.33333333324560266, 2.8548934485373678e-09) ''' I3 = 1.0/3.0 print I3 #0.333333333333 ''' def bingham_kernel(k1,k2,theta,phi): return np.exp(((k1*np.cos(phi)**2+k2*np.sin(phi)**2)*np.sin(theta)**2)/4*np.pi) def d(k1,k2): #print (k1,k2) return dblquad(lambda theta, phi: bingham_kernel(k1,k2,theta,phi), 0, np.pi, lambda phi: 0, lambda phi: 2*np.pi)[0] print d(-6.999, -3.345) #K1,K2,t1,t2,ph,th=sympy.symbols('K1,K2,t1,t2,ph,th') N = 100 def F((k1,k2),(t1,t2,N)): val = -N*4*np.pi - N*np.log(d(k1,k2)) + k1*t1 + k2*t2 print (-val,k1,k2) return -val min = fmin_powell(F,(-1,-1), ((-3.345, -6.999, 1000),)) print min #d = sympy.integrate(sympy.exp((k1*sympy.cos(phi)**2+k2*sympy.sin(phi)**2)*sympy.sin(theta)**2)/(4*sympy.pi),(phi,0,2*sympy.pi),(theta,0,sympy.pi)) ''' def I(n): return dblquad(lambda t, x: np.exp(-x*t)/t**n, 0, np.Inf, lambda x: 1, lambda x: np.Inf) print I(4) #(0.25000000000435768, 1.0518245707751597e-09) print I(3) #(0.33333333325010883, 2.8604069919261191e-09) print I(2) #(0.49999999999857514, 1.8855523253868967e-09) k1,k2,phi,theta=sympy.symbols('k1,k2,phi,theta') d = sympy.integrate(sympy.exp((k1*sympy.cos(phi)**2+k2*sympy.sin(phi)**2)*sympy.sin(theta)**2)/(4*sympy.pi),(phi,0,2*sympy.pi),(theta,0,sympy.pi)) from scipy.integrate import quad from math import pi d = sympy.integrate(sympy.exp((k1*sympy.cos(phi)**2+k2*sympy.sin(phi)**2)*sympy.sin(theta)**2)/(4*sympy.pi),(phi,0,2*sympy.pi),(theta,0,sympy.pi)) ''' ''' Table C.3: Maximum likelihood estimators of k1,k2 in the Bingham distribution for given eigenvalues w1,w2. Data from Mardia and Zemroch (1977). Upper (lower) number is k1(k2) w1 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28 0.30 0.32 w2 0.02 -25.55 -25.55 0.04 -25.56 -13.11 -13.09 -13.11 0.06 -25.58 -13.14 -9.043 -8.996 -9.019 -9.043 0.08 -25.6 -13.16 -9.065 -7.035 -6.977 -6.999 -7.020 -7.035 0.10 -25.62 -13.18 -9.080 -7.042 -5.797 -5.760 -5.777 -5.791 -5.798 -5.797 0.12 -25.63 -13.19 -9.087 -7.041 -5.789 -4.917 -4.923 -4.934 -4.941 -4.941 -4.933 -4.917 0.14 -25.64 -13.20 -9.087 -7.033 -5.773 -4.896 -4.231 -4.295 -4.301 -4.301 -4.294 -4.279 -4.258 -4.231 0.16 -25.65 -13.20 -9.081 -7.019 -5.752 -4.868 -4.198 -3.659 -3.796 -3.796 -3.790 -3.777 -3.756 -3.729 -3.697 -3.659 0.18 -25.65 -13.19 -9.068 -6.999 -5.726 -4.836 -4.160 -3.616 -3.160 -3.381 -3.375 -3.363 -3.345 -3.319 -3.287 -3.249 -3.207 -3.160 0.20 -25.64 -13.18 -9.05 -6.974 -5.694 -4.799 -4.118 -3.570 -3.109 -2.709 -3.025 -3.014 -2.997 -2.973 -2.942 -2.905 -2.863 -2.816 -2.765 -2.709 0.22 -25.63 -13.17 -9.027 -6.944 -5.658 -4.757 -4.071 -3.518 -3.053 -2.649 -2.289 -2.712 -2.695 -2.673 -2.644 -2.609 -2.568 -2.521 -2.470 -2.414 -2.354 -2.289 0.24 -25.61 -23.14 -8.999 -6.910 -5.618 -4.711 -4.021 -3.463 -2.993 -2.584 -2.220 -1.888 -2.431 -2.410 -2.382 -2.349 -2.309 -2.263 -2.212 -2.157 -2.097 -2.032 -1.963 -1.888 0.26 -25.59 -13.12 -8.966 -6.870 -5.573 -4.661 -3.965 -3.403 -2.928 -2.515 -2.146 -1.809 -1.497 -2.175 -2.149 -2.117 -2.078 -2.034 -1.984 -1.929 -1.869 -1.805 -1.735 -1.661 -1.582 -1.497 0.28 -25.57 -13.09 -8.928 -6.827 -5.523 -4.606 -3.906 -3.338 -2.859 -2.441 -2.066 -1.724 -1.406 -1.106 -1.939 -1.908 -1.871 -1.828 -1.779 -1.725 -1.665 -1.601 -1.532 -1.458 -1.378 -1.294 -1.203 -1.106 0.30 -25.54 -13.05 -8.886 -6.778 -5.469 -4.547 -3.842 -3.269 -2.785 -2.361 -1.981 -1.634 -1.309 -1.002 -0.708 -1.718 -1.682 -1.641 -1.596 -1.540 -1.481 -1.417 -1.348 -1.274 -1.195 -1.110 -1.020 -0.923 -0.819 -0.708 0.32 -25.50 -13.01 -8.839 -6.725 -5.411 -4.484 -3.773 -3.195 -2.706 -2.277 -1.891 -1.537 -1.206 -0.891 -0.588 -0.292 -1.510 -1.470 -1.423 -1.371 -1.313 -1.250 -1.181 -1.108 -1.028 -0.944 -0.853 -0.756 -0.653 -0.541 -0.421 -0.292 0.34 -25.46 -12.96 -8.788 -6.668 -5.348 -4.415 -3.699 -3.116 -2.621 -2.186 -1.794 -1.433 -1.094 -0.771 -0.459 -0.152 -1.312 -1.267 -1.216 -1.159 -1.096 -1.028 -0.955 -0.876 -0.791 -0.701 -0.604 -0.500 -0.389 -0.269 -0.140 0.000 0.36 -25.42 -12.91 -8.731 -6.606 -5.280 -4.342 -3.620 -3.032 -2.531 -2.089 -1.690 -1.322 -0.974 -0.642 -1.123 -1.073 -1.017 -9.555 -0.887 -0.814 -0.736 -0.651 -0.561 -0.464 -0.360 -0.249 -0.129 0.000 0.38 -25.37 -12.86 -8.670 -6.539 -5.207 -4.263 -3.536 -2.941 -2.434 -1.986 -1.579 -1.202 -0.940 -0.885 -0.824 -0.757 -0.684 -0.606 -0.522 -0.432 -0.335 -0.231 -0.120 0.000 0.40 -25.31 -12.80 -8.604 -6.466 -5.126 -4.179 -3.446 -2.845 -2.330 -1.874 -0.762 -0.702 -0.636 -0.564 -0.486 -0.402 -0.312 -0.215 -0.111 -0.000 0.42 -25.5 -12.73 -8.532 -6.388 -5.045 -4.089 -3.349 -2.741 -0.589 -0.523 -0.452 -0.374 -0.290 -0.200 -0.104 0.000 0.44 -25.19 -12.66 -8.454 -6.305 -4.955 -3.992 -0.418 -0.347 -0.270 -0.186 -0.097 0.000 0.46 -25.12 -12.58 -8.371 -6.215 -0.250 -0.173 -0.090 0.000 Taken from http://magician.ucsd.edu/Essentials/WebBookse115.html#x136-237000C.2a ''' dipy-0.10.1/scratch/very_scratch/check_flipping.py000066400000000000000000000027701263041327500222110ustar00rootroot00000000000000import numpy as np from dipy.viz import fos from dipy.core import track_performance as pf tracks=[np.array([[0,0,0],[1,0,0,],[2,0,0]]), np.array([[3,0,0],[3.5,1,0],[4,2,0]]), np.array([[3.2,0,0],[3.7,1,0],[4.4,2,0]]), np.array([[3.4,0,0],[3.9,1,0],[4.6,2,0]]), np.array([[0,0.2,0],[1,0.2,0],[2,0.2,0]]), np.array([[2,0.2,0],[1,0.2,0],[0,0.2,0]]), np.array([[0,0,0],[0,1,0],[0,2,0]]), np.array([[0.2,0,0],[0.2,1,0],[0.2,2,0]]), np.array([[-0.2,0,0],[-0.2,1,0],[-0.2,2,0]]), np.array([[0,1.5,0],[1,1.5,0,],[6,1.5,0]]), np.array([[0,1.8,0],[1,1.8,0,],[6,1.8,0]]), np.array([[0,0,0],[2,2,0],[4,4,0]])] tracks=[t.astype(np.float32) for t in tracks] C=pf.larch_3split(tracks,None,0.5) r=fos.ren() fos.add(r,fos.line(tracks,fos.red)) #fos.show(r) for c in C: color=np.random.rand(3) for i in C[c]['indices']: fos.add(r,fos.line(tracks[i]+np.array([8.,0.,0.]),color)) fos.add(r,fos.line(tracks[i]+np.array([16.,0.,0.]),color)) fos.add(r,fos.line(C[c]['rep3']/C[c]['N']+np.array([16.,0.,0.]),fos.white)) fos.show(r) ''' print len(C) C=pf.larch_3merge(C,0.5) print len(C) for c in C: color=np.random.rand(3) for i in C[c]['indices']: fos.add(r,fos.line(tracks[i]+np.array([14.,0.,0.]),color)) #fos.show(r) for c in C: fos.add(r,fos.line(C[c]['rep3']/C[c]['N']+np.array([14.,0.,0.]),fos.white)) fos.show(r) ''' dipy-0.10.1/scratch/very_scratch/dcm2FAasnii.py000066400000000000000000000006261263041327500213220ustar00rootroot00000000000000import numpy as np import nibabel as ni from nibabel.dicom import dicomreaders as dcm from dipy.core import stensor as sten dname='/home/eg309/Data/Eleftherios/Series_003_CBU_DTI_64D_iso_1000' faname='/tmp/FA.nii' data,affine,bvals,gradients=dcm.read_mosaic_dwi_dir(dname) stl=sten.STensorL(bvals,gradients) stl.fit(data) stl.tensors FA=stl.fa img=ni.Nifti1Image(FA,affine) ni.save(img,faname) dipy-0.10.1/scratch/very_scratch/dcm2S0asnii.py000066400000000000000000000021751263041327500213170ustar00rootroot00000000000000import numpy as np import nibabel as ni from nibabel.dicom import dicomreaders as dcm import dipy.core.generalized_q_sampling as gq dname='/home/eg01/Data_Backup/Data/Frank_Eleftherios/frank/20100511_m030y_cbu100624/08_ep2d_advdiff_101dir_DSI' #dname ='/home/eg309/Data/Eleftherios/Series_003_CBU_DTI_64D_iso_1000' S0name='/tmp/S0.nii' #smallname='/tmp/small_volume2.5_steam_4000.nii' smallname='/tmp/small_64D.nii' smallname_grad = '/tmp/small_64D.gradients' smallname_bvals = '/tmp/small_64D.bvals' #read diffusion dicoms data,affine,bvals,gradients=dcm.read_mosaic_dir(dname) print data.shape #calculate QA #gqs = gq.GeneralizedQSampling(data,bvals,gradients) #gqs.QA[0] #S0 = data[:,:,:,0] ''' #save the structural volume #img=ni.Nifti1Image(S0,affine) #ni.save(img,S0name) #save the small roi volume #small= data[35:55,55:75,20:30,:] small= data[54:64,54:64,30:40,:] naffine = np.dot(affine, np.array([[1,0,0,54],[0,1,0,54],[0,0,1,30],[0,0,0,1]])) imgsmall=ni.Nifti1Image(small,naffine) ni.save(imgsmall,smallname) #save b-values and b-vecs np.save(smallname_grad,gradients) np.save(smallname_bvals,bvals) ''' dipy-0.10.1/scratch/very_scratch/diffusion_sphere_stats.py000066400000000000000000000432421263041327500240150ustar00rootroot00000000000000import nibabel import os import numpy as np import dipy as dp #import dipy.core.generalized_q_sampling as dgqs import dipy.reconst.gqi as dgqs import dipy.reconst.dti as ddti import dipy.reconst.recspeed as rp import dipy.io.pickles as pkl import scipy as sp from matplotlib.mlab import find #import dipy.core.sphere_plots as splots import dipy.core.sphere_stats as sphats import dipy.core.geometry as geometry import get_vertices as gv #old SimData files ''' results_SNR030_1fibre results_SNR030_1fibre+iso results_SNR030_2fibres_15deg results_SNR030_2fibres_30deg results_SNR030_2fibres_60deg results_SNR030_2fibres_90deg results_SNR030_2fibres+iso_15deg results_SNR030_2fibres+iso_30deg results_SNR030_2fibres+iso_60deg results_SNR030_2fibres+iso_90deg results_SNR030_isotropic ''' #fname='/home/ian/Data/SimData/results_SNR030_1fibre' ''' file has one row for every voxel, every voxel is repeating 1000 times with the same noise level , then we have 100 different directions. 1000 * 100 is the number of all rows. The 100 conditions are given by 10 polar angles (in degrees) 0, 20, 40, 60, 80, 80, 60, 40, 20 and 0, and each of these with longitude angle 0, 40, 80, 120, 160, 200, 240, 280, 320, 360. ''' #new complete SimVoxels files simdata = ['fibres_2_SNR_80_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_60_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_100_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_100_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_1_SNR_20_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_80_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_20_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_80_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_40_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_60_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_1_SNR_40_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00'] simdir = '/home/ian/Data/SimVoxels/' def gq_tn_calc_save(): for simfile in simdata: dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) marta_table_fname='/home/ian/Data/SimData/Dir_and_bvals_DSI_marta.txt' b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] gq = dgqs.GeneralizedQSampling(sim_data,bvals,gradients) gqfile = simdir+'gq/'+dataname+'.pkl' pkl.save_pickle(gqfile,gq) ''' gq.IN gq.__doc__ gq.glob_norm_param gq.QA gq.__init__ gq.odf gq.__class__ gq.__module__ gq.q2odf_params ''' tn = ddti.Tensor(sim_data,bvals,gradients) tnfile = simdir+'tn/'+dataname+'.pkl' pkl.save_pickle(tnfile,tn) ''' tn.ADC tn.__init__ tn._getevals tn.B tn.__module__ tn._getevecs tn.D tn.__new__ tn._getndim tn.FA tn.__reduce__ tn._getshape tn.IN tn.__reduce_ex__ tn._setevals tn.MD tn.__repr__ tn._setevecs tn.__class__ tn.__setattr__ tn.adc tn.__delattr__ tn.__sizeof__ tn.evals tn.__dict__ tn.__str__ tn.evecs tn.__doc__ tn.__subclasshook__ tn.fa tn.__format__ tn.__weakref__ tn.md tn.__getattribute__ tn._evals tn.ndim tn.__getitem__ tn._evecs tn.shape tn.__hash__ tn._getD ''' ''' file has one row for every voxel, every voxel is repeating 1000 times with the same noise level , then we have 100 different directions. 100 * 1000 is the number of all rows. At the moment this module is hardwired to the use of the EDS362 spherical mesh. I am assumung (needs testing) that directions 181 to 361 are the antipodal partners of directions 0 to 180. So when counting the number of different vertices that occur as maximal directions we wll map the indices modulo 181. ''' def analyze_maxima(indices, max_dirs, subsets): '''This calculates the eigenstats for each of the replicated batches of the simulation data ''' results = [] for direction in subsets: batch = max_dirs[direction,:,:] index_variety = np.array([len(set(np.remainder(indices[direction,:],181)))]) #normed_centroid, polar_centroid, centre, b1 = sphats.eigenstats(batch) centre, b1 = sphats.eigenstats(batch) # make azimuth be in range (0,360) rather than (-180,180) centre[1] += 360*(centre[1] < 0) #results.append(np.concatenate((normed_centroid, polar_centroid, centre, b1, index_variety))) results.append(np.concatenate((centre, b1, index_variety))) return results #dt_first_directions = tn.evecs[:,:,0].reshape((100,1000,3)) # these are the principal directions for the full set of simulations #gq_tn_calc_save() #eds=np.load(os.path.join(os.path.dirname(dp.__file__),'core','matrices','evenly_distributed_sphere_362.npz')) from dipy.data import get_sphere odf_vertices,odf_faces=get_sphere('symmetric362') #odf_vertices=eds['vertices'] def run_comparisons(sample_data=35): for simfile in [simdata[sample_data]]: dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) gqfile = simdir+'gq/'+dataname+'.pkl' gq = pkl.load_pickle(gqfile) tnfile = simdir+'tn/'+dataname+'.pkl' tn = pkl.load_pickle(tnfile) dt_first_directions_in=odf_vertices[tn.IN] dt_indices = tn.IN.reshape((100,1000)) dt_results = analyze_maxima(dt_indices, dt_first_directions_in.reshape((100,1000,3)),range(10,90)) gq_indices = np.array(gq.IN[:,0],dtype='int').reshape((100,1000)) gq_first_directions_in=odf_vertices[np.array(gq.IN[:,0],dtype='int')] #print gq_first_directions_in.shape gq_results = analyze_maxima(gq_indices, gq_first_directions_in.reshape((100,1000,3)),range(10,90)) #for gqi see example dicoms_2_tracks gq.IN[:,0] np.set_printoptions(precision=3, suppress=True, linewidth=200, threshold=5000) out = open('/home/ian/Data/SimVoxels/Out/'+'***_'+dataname,'w') #print np.vstack(dt_results).shape, np.vstack(gq_results).shape results = np.hstack((np.vstack(dt_results), np.vstack(gq_results))) #print results.shape #results = np.vstack(dt_results) print >> out, results[:,:] out.close() #up = dt_batch[:,2]>= 0 #splots.plot_sphere(dt_batch[up], 'batch '+str(direction)) #splots.plot_lambert(dt_batch[up],'batch '+str(direction), centre) #spread = gq.q2odf_params e,v = np.linalg.eigh(np.dot(spread,spread.transpose())) effective_dimension = len(find(np.cumsum(e) > 0.05*np.sum(e))) #95% #rotated = np.dot(dt_batch,evecs) #rot_evals, rot_evecs = np.linalg.eig(np.dot(rotated.T,rotated)/rotated.shape[0]) #eval_order = np.argsort(rot_evals) #rotated = rotated[:,eval_order] #up = rotated[:,2]>= 0 #splot.plot_sphere(rotated[up],'first1000') #splot.plot_lambert(rotated[up],'batch '+str(direction)) def run_gq_sims(sample_data=[35,23,46,39,40,10,37,27,21,20]): results = [] out = open('/home/ian/Data/SimVoxels/Out/'+'npa+fa','w') for j in range(len(sample_data)): sample = sample_data[j] simfile = simdata[sample] dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) marta_table_fname='/home/ian/Data/SimData/Dir_and_bvals_DSI_marta.txt' b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] for j in np.vstack((np.arange(100)*1000,np.arange(100)*1000+1)).T.ravel(): # 0,1,1000,1001,2000,2001,... s = sim_data[j,:] gqs = dp.GeneralizedQSampling(s.reshape((1,102)),bvals,gradients,Lambda=3.5) tn = dp.Tensor(s.reshape((1,102)),bvals,gradients,fit_method='LS') t0, t1, t2, npa = gqs.npa(s, width = 5) print >> out, dataname, j, npa, tn.fa()[0] ''' for (i,o) in enumerate(gqs.odf(s)): print i,o for (i,o) in enumerate(gqs.odf_vertices): print i,o ''' #o = gqs.odf(s) #v = gqs.odf_vertices #pole = v[t0[0]] #eqv = dgqs.equatorial_zone_vertices(v, pole, 5) #print 'Number of equatorial vertices: ', len(eqv) #print np.max(o[eqv]),np.min(o[eqv]) #cos_e_pole = [np.dot(pole.T, v[i]) for i in eqv] #print np.min(cos1), np.max(cos1) #print 'equatorial max in equatorial vertices:', t1[0] in eqv #x = np.cross(v[t0[0]],v[t1[0]]) #x = x/np.sqrt(np.sum(x**2)) #print x #ptchv = dgqs.patch_vertices(v, x, 5) #print len(ptchv) #eqp = eqv[np.argmin([np.abs(np.dot(v[t1[0]].T,v[p])) for p in eqv])] #print (eqp, o[eqp]) #print t2[0] in ptchv, t2[0] in eqv #print np.dot(pole.T, v[t1[0]]), np.dot(pole.T, v[t2[0]]) #print ptchv[np.argmin([o[v] for v in ptchv])] #gq_indices = np.array(gq.IN[:,0],dtype='int').reshape((100,1000)) #gq_first_directions_in=odf_vertices[np.array(gq.IN[:,0],dtype='int')] #print gq_first_directions_in.shape #gq_results = analyze_maxima(gq_indices, gq_first_directions_in.reshape((100,1000,3)),range(100)) #for gqi see example dicoms_2_tracks gq.IN[:,0] #np.set_printoptions(precision=6, suppress=True, linewidth=200, threshold=5000) #out = open('/home/ian/Data/SimVoxels/Out/'+'+++_'+dataname,'w') #results = np.hstack((np.vstack(dt_results), np.vstack(gq_results))) #results = np.vstack(dt_results) #print >> out, results[:,:] out.close() def run_small_data(): #smalldir = '/home/ian/Devel/dipy/dipy/data/' smalldir = '/home/eg309/Devel/dipy/dipy/data/' # from os.path import join as opj # bvals=np.load(opj(os.path.dirname(__file__), \ # 'data','small_64D.bvals.npy')) bvals=np.load(smalldir+'small_64D.bvals.npy') # gradients=np.load(opj(os.path.dirname(__file__), \ # 'data','small_64D.gradients.npy')) gradients=np.load(smalldir+'small_64D.gradients.npy') # img =ni.load(os.path.join(os.path.dirname(__file__),\ # 'data','small_64D.nii')) img=nibabel.load(smalldir+'small_64D.nii') small_data=img.get_data() print 'real_data', small_data.shape gqsmall = dgqs.GeneralizedQSampling(small_data,bvals,gradients) tnsmall = ddti.Tensor(small_data,bvals,gradients) x,y,z,a,b=tnsmall.evecs.shape evecs=tnsmall.evecs xyz=x*y*z evecs = evecs.reshape(xyz,3,3) #vs = np.sign(evecs[:,2,:]) #print vs.shape #print np.hstack((vs,vs,vs)).reshape(1000,3,3).shape #evecs = np.hstack((vs,vs,vs)).reshape(1000,3,3) #print evecs.shape evals=tnsmall.evals evals = evals.reshape(xyz,3) #print evals.shape #print('GQS in %d' %(t2-t1)) ''' eds=np.load(opj(os.path.dirname(__file__),\ '..','matrices',\ 'evenly_distributed_sphere_362.npz')) ''' from dipy.data import get_sphere odf_vertices,odf_faces=get_sphere('symmetric362') #odf_vertices=eds['vertices'] #odf_faces=eds['faces'] #Yeh et.al, IEEE TMI, 2010 #calculate the odf using GQI scaling=np.sqrt(bvals*0.01506) # 0.01506 = 6*D where D is the free #water diffusion coefficient #l_values sqrt(6 D tau) D free water #diffusion coefficiet and tau included in the b-value tmp=np.tile(scaling,(3,1)) b_vector=gradients.T*tmp Lambda = 1.2 # smoothing parameter - diffusion sampling length q2odf_params=np.sinc(np.dot(b_vector.T, odf_vertices.T) * Lambda/np.pi) #implements equation no. 9 from Yeh et.al. S=small_data.copy() x,y,z,g=S.shape S=S.reshape(x*y*z,g) QA = np.zeros((x*y*z,5)) IN = np.zeros((x*y*z,5)) FA = tnsmall.fa().reshape(x*y*z) fwd = 0 #Calculate Quantitative Anisotropy and find the peaks and the indices #for every voxel summary = {} summary['vertices'] = odf_vertices v = odf_vertices.shape[0] summary['faces'] = odf_faces f = odf_faces.shape[0] for (i,s) in enumerate(S): #print 'Volume %d' % i istr = str(i) summary[istr] = {} t0, t1, t2, npa = gqsmall.npa(s, width = 5) summary[istr]['triple']=(t0,t1,t2) summary[istr]['npa']=npa odf = Q2odf(s,q2odf_params) peaks,inds=rp.peak_finding(odf,odf_faces) fwd=max(np.max(odf),fwd) #peaks = peaks - np.min(odf) n_peaks=min(len(peaks),5) peak_heights = [odf[i] for i in inds[:n_peaks]] #QA[i][:l] = peaks[:n_peaks] IN[i][:n_peaks] = inds[:n_peaks] summary[istr]['odf'] = odf summary[istr]['peaks'] = peaks summary[istr]['inds'] = inds summary[istr]['evecs'] = evecs[i,:,:] summary[istr]['evals'] = evals[i,:] summary[istr]['n_peaks'] = n_peaks summary[istr]['peak_heights'] = peak_heights # summary[istr]['fa'] = tnsmall.fa()[0] summary[istr]['fa'] = FA[i] ''' QA/=fwd QA=QA.reshape(x,y,z,5) IN=IN.reshape(x,y,z,5) ''' peaks_1 = [i for i in range(1000) if summary[str(i)]['n_peaks']==1] peaks_2 = [i for i in range(1000) if summary[str(i)]['n_peaks']==2] peaks_3 = [i for i in range(1000) if summary[str(i)]['n_peaks']==3] #peaks_2 = [i for i in range(1000) if len(summary[str(i)]['inds'])==2] #peaks_3 = [i for i in range(1000) if len(summary[str(i)]['inds'])==3] print '#voxels with 1, 2, 3 peaks', len(peaks_1),len(peaks_2),len(peaks_3) return FA, summary def Q2odf(s,q2odf_params): ''' construct odf for a voxel ''' odf=np.dot(s,q2odf_params) return odf #run_comparisons() #run_gq_sims() FA, summary = run_small_data() peaks_1 = [i for i in range(1000) if summary[str(i)]['n_peaks']==1] peaks_2 = [i for i in range(1000) if summary[str(i)]['n_peaks']==2] peaks_3 = [i for i in range(1000) if summary[str(i)]['n_peaks']==3] fa_npa_1 = [[summary[str(i)]['fa'], summary[str(i)]['npa'], summary[str(i)]['peak_heights']] for i in peaks_1] fa_npa_2 = [[summary[str(i)]['fa'], summary[str(i)]['npa'], summary[str(i)]['peak_heights']] for i in peaks_2] fa_npa_3 = [[summary[str(i)]['fa'], summary[str(i)]['npa'], summary[str(i)]['peak_heights']] for i in peaks_3] dipy-0.10.1/scratch/very_scratch/eddy_currents.py000066400000000000000000000024021263041327500221060ustar00rootroot00000000000000import numpy as np import dipy as dp import nibabel as ni dname = '/home/eg01/Data_Backup/Data/Eleftherios/CBU090133_METHODS/20090227_145404/Series_003_CBU_DTI_64D_iso_1000' #dname = '/home/eg01/Data_Backup/Data/Frank_Eleftherios/frank/20100511_m030y_cbu100624/08_ep2d_advdiff_101dir_DSI' data,affine,bvals,gradients=dp.load_dcm_dir(dname) ''' rot=np.array([[1,0,0,0], [0,np.cos(np.pi/2),-np.sin(np.pi/2),0], [0,np.sin(np.pi/2), np.cos(np.pi/2),0], [0,0,0,1]]) from scipy.ndimage import affine_transform as aff naffine=np.dot(affine,rot) ''' data[:,:,:,1] source=ni.Nifti1Image(data[:,:,:,1],affine) target=ni.Nifti1Image(data[:,:,:,0],affine) #similarity 'cc', 'cr', 'crl1', 'mi', je', 'ce', 'nmi', 'smi'. 'cr' similarity='cr' #interp 'pv', 'tri' interp = 'tri' #subsampling None or sequence (3,) subsampling=None #search 'affine', 'rigid', 'similarity' or ['rigid','affine'] search='affine' #optimizer 'simplex', 'powell', 'steepest', 'cg', 'bfgs' or #sequence of optimizers optimizer= 'powell' T=dp.volume_register(source,target,similarity,\ interp,subsampling,search,) sourceT=dp.volume_transform(source, T.inv(), reference=target) s=source.get_data() t=target.get_data() sT=sourceT.get_data() dipy-0.10.1/scratch/very_scratch/ellipse.py000066400000000000000000000012131263041327500206700ustar00rootroot00000000000000import sympy import numpy as np import scipy as sc from numpy.random import random_sample as random def random_uniform_in_disc(): # returns a tuple which is uniform in the disc theta = 2*np.pi*random() r2 = random() r = np.sqrt(r2) return np.array((r*np.sin(theta),r*np.cos(theta))) def random_uniform_in_ellipse(a=1,b=1): x = a*random_uniform_in_disc()[0] y = b*np.sqrt(1-(x/a)**2)*(1-2*random()) return np.array((x,y)) import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) sample = np.array([random_uniform_in_ellipse(a=2,b=1) for i in np.arange(10000)]) ax.scatter(*sample.T) plt.show() dipy-0.10.1/scratch/very_scratch/gen_iter.py000066400000000000000000000017301263041327500210330ustar00rootroot00000000000000class Reverse: "Iterator for looping over a sequence backwards" def __init__(self, data): self.data = data self.index = len(data) def __iter__(self): return self def next(self): if self.index == 0: raise StopIteration self.index = self.index - 1 return self.data[self.index] class ReverseGen: 'Iterator class using generator' def __init__(self, data): self.data = data def __iter__(self): for index in range(len(self.data)-1, -1, -1): yield self.data[index] rev = Reverse('golf') iter(rev) print('class') for char in rev: print char def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index] print('generator') for char in reverse('golf'): print char print('class generator') revgen = ReverseGen('golf') iter(rev) for char in revgen: print char dipy-0.10.1/scratch/very_scratch/get_vertices.py000066400000000000000000000053071263041327500217260ustar00rootroot00000000000000sphere_dic = {'fy362': {'filepath' : '/home/ian/Devel/dipy/dipy/data/evenly_distributed_sphere_362.npz', 'object': 'npz', 'vertices': 'vertices', 'omit': 0, 'hemi': False}, 'fy642': {'filepath' : '/home/ian/Devel/dipy/dipy/data/evenly_distributed_sphere_642.npz', 'object': 'npz', 'vertices': 'odf_vertices', 'omit': 0, 'hemi': False}, 'siem64': {'filepath':'/home/ian/Devel/dipy/dipy/data/small_64D.gradients.npy', 'object': 'npy', 'omit': 1, 'hemi': True}, 'create2': {}, 'create3': {}, 'create4': {}, 'create5': {}, 'create6': {}, 'create7': {}, 'create8': {}, 'create9': {}, 'marta200': {'filepath': '/home/ian/Data/Spheres/200.npy', 'object': 'npy', 'omit': 0, 'hemi': True}, 'dsi102': {'filepath': '/home/ian/Data/Frank_Eleftherios/frank/20100511_m030y_cbu100624/08_ep2d_advdiff_101dir_DSI', 'object': 'dicom', 'omit': 1, 'hemi': True}} import numpy as np from dipy.core.triangle_subdivide import create_unit_sphere #from dipy.io import dicomreaders as dcm def get_vertex_set(key): if key[:6] == 'create': number = eval(key[6:]) vertices, edges, faces = create_unit_sphere(number) omit = 0 return vertices else: entry = sphere_dic[key] if entry.has_key('omit'): omit = entry['omit'] else: omit = 0 filepath = entry['filepath'] if entry['object'] == 'npz': filearray = np.load(filepath) vertices = filearray[entry['vertices']] elif sphere_dic[key]['object'] == 'npy': vertices = np.load(filepath) elif entry['object'] == 'dicom': data,affine,bvals,gradients=dcm.read_mosaic_dir(filepath) #print (bvals.shape, gradients.shape) grad3 = np.vstack((bvals,bvals,bvals)).transpose() #print grad3.shape #vertices = grad3*gradients vertices = gradients if omit > 0: vertices = vertices[omit:,:] if entry['hemi']: vertices = np.vstack([vertices, -vertices]) return vertices[omit:,:] print sphere_dic.keys() #vertices = get_vertex_set('create5') #vertices = get_vertex_set('siem64') #vertices = get_vertex_set('dsi102') vertices = get_vertex_set('fy362') gradients = get_vertex_set('siem64') gradients = gradients[:gradients.shape[0]/2] print gradients.shape from dipy.viz import fvtk sph=-np.sinc(np.dot(gradients[1],vertices.T)) r=fvtk.ren() #sph = np.arange(vertices.shape[0]) print sph.shape cols=fvtk.colors(sph,'jet') fvtk.add(r,fvtk.point(vertices,cols,point_radius=.1,theta=10,phi=10)) fvtk.show(r) dipy-0.10.1/scratch/very_scratch/gqsampling_stats.py000066400000000000000000000316511263041327500226240ustar00rootroot00000000000000import os import numpy as np from nose.tools import assert_true, assert_false, assert_equal, assert_raises from numpy.testing import assert_array_equal, assert_array_almost_equal import time #import dipy.core.reconstruction_performance as rp import dipy.reconst.recspeed as rp from os.path import join as opj import nibabel as ni #import dipy.core.generalized_q_sampling as gq import dipy.reconst.gqi as gq #import dipy.core.track_propagation as tp import dipy.core.dti as dt import dipy.core.meshes as meshes def test_gqiodf(): #read bvals,gradients and data bvals=np.load(opj(os.path.dirname(__file__), \ 'data','small_64D.bvals.npy')) gradients=np.load(opj(os.path.dirname(__file__), \ 'data','small_64D.gradients.npy')) img =ni.load(os.path.join(os.path.dirname(__file__),\ 'data','small_64D.nii')) data=img.get_data() #print(bvals.shape) #print(gradients.shape) #print(data.shape) t1=time.clock() gqs = gq.GeneralizedQSampling(data,bvals,gradients) ten = dt.Tensor(data,bvals,gradients,thresh=50) fa=ten.fa() x,y,z,a,b=ten.evecs.shape evecs=ten.evecs xyz=x*y*z evecs = evecs.reshape(xyz,3,3) #vs = np.sign(evecs[:,2,:]) #print vs.shape #print np.hstack((vs,vs,vs)).reshape(1000,3,3).shape #evecs = np.hstack((vs,vs,vs)).reshape(1000,3,3) #print evecs.shape evals=ten.evals evals = evals.reshape(xyz,3) #print evals.shape t2=time.clock() #print('GQS in %d' %(t2-t1)) eds=np.load(opj(os.path.dirname(__file__),\ '..','matrices',\ 'evenly_distributed_sphere_362.npz')) odf_vertices=eds['vertices'] odf_faces=eds['faces'] #Yeh et.al, IEEE TMI, 2010 #calculate the odf using GQI scaling=np.sqrt(bvals*0.01506) # 0.01506 = 6*D where D is the free #water diffusion coefficient #l_values sqrt(6 D tau) D free water #diffusion coefficiet and tau included in the b-value tmp=np.tile(scaling,(3,1)) b_vector=gradients.T*tmp Lambda = 1.2 # smoothing parameter - diffusion sampling length q2odf_params=np.sinc(np.dot(b_vector.T, odf_vertices.T) * Lambda/np.pi) #implements equation no. 9 from Yeh et.al. S=data.copy() x,y,z,g=S.shape S=S.reshape(x*y*z,g) QA = np.zeros((x*y*z,5)) IN = np.zeros((x*y*z,5)) fwd = 0 #Calculate Quantitative Anisotropy and find the peaks and the indices #for every voxel summary = {} summary['vertices'] = odf_vertices v = odf_vertices.shape[0] summary['faces'] = odf_faces f = odf_faces.shape[0] ''' If e = number_of_edges the Euler formula says f-e+v = 2 for a mesh on a sphere Here, assuming we have a healthy triangulation every face is a triangle, all 3 of whose edges should belong to exactly two faces = so 2*e = 3*f to avoid division we test whether 2*f - 3*f + 2*v == 4 or equivalently 2*v - f == 4 ''' assert_equal(2*v-f, 4,'Direct Euler test fails') assert_true(meshes.euler_characteristic_check(odf_vertices, odf_faces,chi=2),'euler_characteristic_check fails') coarse = meshes.coarseness(odf_faces) print 'coarseness: ', coarse for (i,s) in enumerate(S): #print 'Volume %d' % i istr = str(i) summary[istr] = {} odf = Q2odf(s,q2odf_params) peaks,inds=rp.peak_finding(odf,odf_faces) fwd=max(np.max(odf),fwd) peaks = peaks - np.min(odf) l=min(len(peaks),5) QA[i][:l] = peaks[:l] IN[i][:l] = inds[:l] summary[istr]['odf'] = odf summary[istr]['peaks'] = peaks summary[istr]['inds'] = inds summary[istr]['evecs'] = evecs[i,:,:] summary[istr]['evals'] = evals[i,:] QA/=fwd QA=QA.reshape(x,y,z,5) IN=IN.reshape(x,y,z,5) #print('Old %d secs' %(time.clock() - t2)) # assert_equal((gqs.QA-QA).max(),0.,'Frank QA different than our QA') # assert_equal((gqs.QA.shape),QA.shape, 'Frank QA shape is different') # assert_equal((gqs.QA-QA).max(), 0.) #import dipy.core.track_propagation as tp #tp.FACT_Delta(QA,IN) #return tp.FACT_Delta(QA,IN,seeds_no=10000).tracks peaks_1 = [i for i in range(1000) if len(summary[str(i)]['inds'])==1] peaks_2 = [i for i in range(1000) if len(summary[str(i)]['inds'])==2] peaks_3 = [i for i in range(1000) if len(summary[str(i)]['inds'])==3] # correct numbers of voxels with respectively 1,2,3 ODF/QA peaks assert_array_equal((len(peaks_1),len(peaks_2),len(peaks_3)), (790,196,14), 'error in numbers of QA/ODF peaks') # correct indices of odf directions for voxels 0,10,44 # with respectively 1,2,3 ODF/QA peaks assert_array_equal(summary['0']['inds'],[116], 'wrong peak indices for voxel 0') assert_array_equal(summary['10']['inds'],[105, 78], 'wrong peak indices for voxel 10') assert_array_equal(summary['44']['inds'],[95, 84, 108], 'wrong peak indices for voxel 44') assert_equal(np.argmax(summary['0']['odf']), 116) assert_equal(np.argmax(summary['10']['odf']), 105) assert_equal(np.argmax(summary['44']['odf']), 95) pole_1 = summary['vertices'][116] #print 'pole_1', pole_1 pole_2 = summary['vertices'][105] #print 'pole_2', pole_2 pole_3 = summary['vertices'][95] #print 'pole_3', pole_3 vertices = summary['vertices'] width = 0.02#0.3 #0.05 ''' print 'pole_1 equator contains:', len([i for i,v in enumerate(vertices) if np.abs(np.dot(v,pole_1)) < width]) print 'pole_2 equator contains:', len([i for i,v in enumerate(vertices) if np.abs(np.dot(v,pole_2)) < width]) print 'pole_3 equator contains:', len([i for i,v in enumerate(vertices) if np.abs(np.dot(v,pole_3)) < width]) ''' #print 'pole_1 equator contains:', len(meshes.equatorial_vertices(vertices,pole_1,width)) #print 'pole_2 equator contains:', len(meshes.equatorial_vertices(vertices,pole_2,width)) #print 'pole_3 equator contains:', len(meshes'equatorial_vertices(vertices,pole_3,width)) #print triple_odf_maxima(vertices,summary['0']['odf'],width) #print triple_odf_maxima(vertices,summary['10']['odf'],width) #print triple_odf_maxima(vertices,summary['44']['odf'],width) #print summary['0']['evals'] ''' pole=np.array([0,0,1]) from dipy.viz import fos r=fos.ren() fos.add(r,fos.point(pole,fos.green)) for i,ev in enumerate(vertices): if np.abs(np.dot(ev,pole)) 1- width] def patch_maximum(vertices, odf, pole, width): eqvert = patch_vertices(vertices, pole, width) ''' need to test for whether eqvert is empty or not ''' if len(eqvert) == 0: print 'empty cone around pole', pole, 'with width', width return Null, Null eqvals = [odf[i] for i in eqvert] eqargmax = np.argmax(eqvals) eqvertmax = eqvert[eqargmax] eqvalmax = eqvals[eqargmax] return eqvertmax, eqvalmax def triple_odf_maxima(vertices, odf, width): indmax1 = np.argmax([odf[i] for i,v in enumerate(vertices)]) odfmax1 = odf[indmax1] indmax2, odfmax2 = equatorial_maximum(vertices, odf, vertices[indmax1], width) cross12 = np.cross(vertices[indmax1],vertices[indmax2]) indmax3, odfmax3 = patch_maximum(vertices, odf, cross12, width) return [(indmax1, odfmax1),(indmax2, odfmax2),(indmax3, odfmax3)] def test_gqi_small(): #read bvals,gradients and data bvals=np.load(opj(os.path.dirname(__file__), \ 'data','small_64D.bvals.npy')) gradients=np.load(opj(os.path.dirname(__file__), \ 'data','small_64D.gradients.npy')) img =ni.load(os.path.join(os.path.dirname(__file__),\ 'data','small_64D.nii')) data=img.get_data() print(bvals.shape) print(gradients.shape) print(data.shape) t1=time.clock() gqs = gq.GeneralizedQSampling(data,bvals,gradients) t2=time.clock() print('GQS in %d' %(t2-t1)) eds=np.load(opj(os.path.dirname(__file__),\ '..','matrices',\ 'evenly_distributed_sphere_362.npz')) odf_vertices=eds['vertices'] odf_faces=eds['faces'] #Yeh et.al, IEEE TMI, 2010 #calculate the odf using GQI scaling=np.sqrt(bvals*0.01506) # 0.01506 = 6*D where D is the free #water diffusion coefficient #l_values sqrt(6 D tau) D free water #diffusion coefficiet and tau included in the b-value tmp=np.tile(scaling,(3,1)) b_vector=gradients.T*tmp Lambda = 1.2 # smoothing parameter - diffusion sampling length q2odf_params=np.sinc(np.dot(b_vector.T, odf_vertices.T) * Lambda/np.pi) #implements equation no. 9 from Yeh et.al. S=data.copy() x,y,z,g=S.shape S=S.reshape(x*y*z,g) QA = np.zeros((x*y*z,5)) IN = np.zeros((x*y*z,5)) fwd = 0 #Calculate Quantitative Anisotropy and find the peaks and the indices #for every voxel for (i,s) in enumerate(S): odf = Q2odf(s,q2odf_params) peaks,inds=rp.peak_finding(odf,odf_faces) fwd=max(np.max(odf),fwd) peaks = peaks - np.min(odf) l=min(len(peaks),5) QA[i][:l] = peaks[:l] IN[i][:l] = inds[:l] QA/=fwd QA=QA.reshape(x,y,z,5) IN=IN.reshape(x,y,z,5) print('Old %d secs' %(time.clock() - t2)) assert_equal((gqs.QA-QA).max(),0.,'Frank QA different than dipy QA') assert_equal((gqs.QA.shape),QA.shape, 'Frank QA shape is different') assert_equal(len(tp.FACT_Delta(QA,IN,seeds_no=100).tracks),100, 'FACT_Delta is not generating the right number of ' 'tracks for this dataset') def Q2odf(s,q2odf_params): odf=np.dot(s,q2odf_params) return odf def peak_finding(odf,odf_faces): #proton density already include from the scaling b_table[0][0] and s[0] #find local maxima peak=odf.copy() # where the smallest odf values in the vertices of a face remove the # two smallest vertices for face in odf_faces: i, j, k = face check=np.array([odf[i],odf[j],odf[k]]) zeroing=check.argsort() peak[face[zeroing[0]]]=0 peak[face[zeroing[1]]]=0 #for later testing expecting peak.max 794595.94774980657 and #np.where(peak>0) (array([166, 347]),) #we just need the first half of peak peak=peak[0:len(peak)/2] #find local maxima and give fiber orientation (inds) and magnitute #peaks in a descending order inds=np.where(peak>0)[0] pinds=np.argsort(peak[inds]) peaks=peak[inds[pinds]][::-1] return peaks, inds[pinds][::-1] if __name__ == "__main__": #T=test_gqiodf() T=test_gqi_small() dipy-0.10.1/scratch/very_scratch/joint_hist.py000066400000000000000000000250751263041327500214210ustar00rootroot00000000000000#Calculate joint histogram and related metrics from math import sin,cos,pi import numpy as np from scipy.ndimage import affine_transform, geometric_transform from scipy.ndimage.interpolation import rotate,shift,zoom from scipy.optimize import fmin as fmin_simplex, fmin_powell, fmin_cg from scipy.optimize import leastsq from dipy.core import geometry as gm import pylab def affine_transform2d(I,M): ''' Inspired by the work of Alexis Roche and the independent work of D. Kroon Parameters ---------- I: array, shape(N,M), 2d image M: inverse transformation matrix 3x3, array, shape (3,3) mode: 0: linear interpolation and outside pixels set to nearest pixel Returns ------- Iout: array, shape(N,M), transformed image ''' #the transpose is for contiguous C arrays (default) #I=I.T #create all x,y indices xy=np.array([(i,j) for (i,j) in np.ndindex(I.shape)]) #image center is now our origin (0,0) mean=np.array(I.shape)/2. mean=mean.reshape(1,2) xyd=xy-mean #transformed coordinates lxy = mean.T + np.dot(M[:2,:2],xyd.T) + M[:2,2].reshape(2,1) lxy=lxy.T #neighborh pixels for linear interp bas0=np.floor(lxy) bas1=bas0+1 #linear interp. constants com=lxy-bas0 perc0=(1-com[:,0])*(1-com[:,1]) perc1=(1-com[:,0])*com[:,1] perc2=com[:,0]*(1-com[:,1]) perc3=com[:,0]*com[:,1] #create final image Iout=np.zeros(I.shape) #zeroing indices outside boundaries check_xbas0=np.where(np.bitwise_or(bas0[:,0]<0,bas0[:,0]>=I.shape[0])) check_ybas0=np.where(np.bitwise_or(bas0[:,1]<0,bas0[:,1]>=I.shape[1])) bas0[check_xbas0,0]=0 bas0[check_ybas0,1]=0 check_xbas1=np.where(np.bitwise_or(bas1[:,0]<0,bas1[:,0]>=I.shape[0])) check_ybas1=np.where(np.bitwise_or(bas1[:,1]<0,bas1[:,1]>=I.shape[1])) bas1[check_xbas1,0]=0 bas1[check_ybas1,1]=0 #hold shape Ish=I.shape[0] #ravel image Ione=I.ravel() #new intensities xyz0=Ione[(bas0[:,0]+bas0[:,1]*Ish).astype('int')] xyz1=Ione[(bas0[:,0]+bas1[:,1]*Ish).astype('int')] xyz2=Ione[(bas1[:,0]+bas0[:,1]*Ish).astype('int')] xyz3=Ione[(bas1[:,0]+bas1[:,1]*Ish).astype('int')] #kill mirroring #xyz0[np.bitwise_or(check_xbas0,check_ybas0)]=0 #xyz1[np.bitwise_or(check_xbas0,check_ybas1)]=0 #xyz2[np.bitwise_or(check_xbas1,check_ybas0)]=0 #xyz3[np.bitwise_or(check_xbas1,check_ybas1)]=0 #apply recalculated intensities Iout=xyz0*perc0+xyz1*perc1+xyz2*perc2+xyz3*perc3 return Iout.reshape(I.shape) def joint_histogram(A,B,binA,binB): ''' Calculate joint histogram and individual histograms for A and B ndarrays Parameters ---------- A, B: ndarrays binA, binB: 1d arrays with the bins Returns ------- JH: joint histogram HA: histogram for A HB: histogram for B Example ------- >>> A=np.array([[1,.5,.2,0,0],[.5,1,.5,0,0],[.2,.5,1,0,0],[0,0,0,0,0],[0,0,0,0,0]]) >>> B=np.array([[0,0,0,0,0],[0,1,.5,.2,0],[0,.5,1,.5,0],[0,.2,.5,1,0],[0,0,0,0,0]]) >>> bin_A=np.array([-np.Inf,.1,.35,.75,np.Inf]) >>> bin_B=np.array([-np.Inf,.1,.35,.75,np.Inf]) >>> JH,HA,HB=joint_histogram(A,B,bin_A,bin_B) ''' A=A.ravel() B=B.ravel() A2=A.copy() B2=B.copy() #assign bins for i in range(1,len(binA)): Ai=np.where(np.bitwise_and(A>binA[i-1],A<=binA[i])) A2[Ai]=i-1 for i in range(1,len(binB)): Bi=np.where(np.bitwise_and(B>binB[i-1],B<=binB[i])) B2[Bi]=i-1 JH=np.zeros((len(binA)-1,len(binB)-1)) #calculate joint histogram for i in range(len(A)): JH[A2[i],B2[i]]+=1 #calculate histogram for A HA=np.zeros(len(binA)-1) for i in range(len(A)): HA[A2[i]]+=1 #calculate histogram for B HB=np.zeros(len(binB)-1) for i in range(len(B)): HB[B2[i]]+=1 return JH,HA,HB def mutual_information(A,B,binA,binB): ''' Calculate mutual information for A and B ''' JH,HA,HB=joint_histogram(A,B,binA,binB) N=float(len(A.ravel())) MI=np.zeros(JH.shape) #print N for i in range(JH.shape[0]): for j in range(JH.shape[1]): Pij= JH[i,j]/N Pi = HA[i]/N Pj= HB[j]/N #print i,j, Pij, Pi, Pj, JH[i,j], HA[i], HB[j] MI[i,j]=Pij*np.log2(Pij/(Pi*Pj)) MI[np.isnan(MI)]=0 return MI.sum() def apply_mapping(A,T,order=0,map_type='affine2d'): ''' Apply mapping ''' if map_type=='affine2d': #create the different components #translation[2], scale[2], rotation[1], shear[2] if len(T)==7: tc1,tc2,sc1,sc2,rc,sch1,sch2=T if len(T)==5: tc1,tc2,sc1,sc2,rc=T sch1,sch2=(0,0) if len(T)==4: tc1,tc2,rc,sc=T sc1,sc2,sch1,sch2=(sc,sc,1,1) if len(T)==3: tc1,tc2,rc=T sc1,sc2,sch1,sch2=(1,1,0,0) #translation TC=np.matrix([[1,0,tc1], [0,1,tc2], [0,0, 1]]) #scaling SC=np.matrix([[sc1, 0, 0], [0, sc2, 0], [0, 0, 1]]) #rotation RC=np.matrix([[cos(rc), sin(rc), 0], [-sin(rc), cos(rc), 0], [0 , 0, 1]]) #shear SHC=np.matrix([[1, sch1,0], [sch2, 1,0], [0, 0,1]]) #apply #M=TC*SC*RC*SHC if len(T)==3: M=TC*RC if len(T)==4: M=TC*SC*RC if len(T)==5: M=TC*SC*RC if len(T)==7: M=TC*SC*RC*SHC M=np.array(M) AT=affine_transform2d(A,M) return AT def objective_mi(T,A,B,binA,binB,order=0,map_type='affine2d'): ''' Objective function for mutual information ''' AT=apply_mapping(A,T,order=0,map_type=map_type) #AT=np.round(AT) AT=AT.T NegMI= -mutual_information(AT,B,binA,binB) print '====',T,'====> - MI : ',NegMI #pylab.imshow(AT) #raw_input('Press Enter...') #pylab.imshow(np.hstack((A,B,AT))) #raw_input('Press Enter...') return NegMI def objective_sd(T,A,B,order=0,map_type='affine2d'): AT=apply_mapping(A,T,order=0,map_type=map_type) AT=AT.T if AT.sum()==0: SD=10**15 else: SD= np.sum((AT-B)**2)/np.prod(AT.shape) print '====',T,'====> SD : ',SD #pylab.imshow(np.hstack((A,B,AT))) #raw_input('Press Enter...') return SD def register(A,B,guess,metric='sd',binA=None,binB=None,xtol=0.1,ftol=0.01,order=0,map_type='affine2d'): ''' Register source A to target B using modified powell's method Powell's method tries to minimize the objective function ''' if metric=='mi': finalT=fmin_powell(objective_mi,x0=guess,args=(A,B,binA,binB,order,map_type),xtol=xtol,ftol=ftol) #finalT=leastsq(func=objective_mi,x0=np.array(guess),args=(A,B,binA,binB,order,map_type)) if metric=='sd': finalT=fmin_powell(objective_sd,x0=guess,args=(A,B,order,map_type),xtol=xtol,ftol=ftol) #finalT=leastsq(func=objective_sd,x0=np.array(guess),args=(A,B,order,map_type)) return finalT def evaluate(A,B,guess,metric='sd',binA=None,binB=None,xtol=0.1,ftol=0.01,order=0,map_type='affine2d'): #tc1,tc2,sc1,sc2,rc=T tc1=np.linspace(-50,50,20) tc2=np.linspace(-50,50,20) sc1=np.linspace(-1.2,1.2,10) sc2=np.linspace(-1.2,1.2,10) rc=np.linspace(0,np.pi,8) f_min=np.inf T_final=[] ''' for c1 in tc1: for c2 in tc2: for s1 in sc1: for s2 in sc2: for r in rc: T=[c1,c2,s1,s2,r] f=objective_sd(T,A,B,order=0,map_type='affine2d') if f0)[0]: del C[k[i]] return C def most(C): for c in C: pass # pf.most_similar_track_mam() T=pkl.load_pickle(fname) print 'Reducing the number of points...' T=[pf.approx_polygon_track(t) for t in T] print 'Reducing further to tracks with 3 pts...' T2=[tm.downsample(t,3) for t in T] print 'LARCH ...' print 'Splitting ...' t=time.clock() C=pf.larch_3split(T2,None,5.) print time.clock()-t, len(C) for c in C: print c, C[c]['rep3']/C[c]['N'] r=show_rep3(C) print 'Merging ...' t=time.clock() C=merge(C,5.) print time.clock()-t, len(C) for c in C: print c, C[c]['rep3']/C[c]['N'] show_rep3(C,r,fos.red) ''' #print 'Showing initial dataset.' r=fos.ren() #fos.add(r,fos.line(T,fos.white,opacity=1)) #fos.show(r) print 'Showing dataset after clustering.' #fos.clear(r) colors=np.zeros((len(T),3)) for c in C: color=np.random.rand(1,3) for i in C[c]['indices']: colors[i]=color fos.add(r,fos.line(T,colors,opacity=1)) fos.show(r) print 'Some statistics about the clusters' print 'Number of clusters',len(C.keys()) lens=[len(C[c]['indices']) for c in C] print 'max ',max(lens), 'min ',min(lens) print 'singletons ',lens.count(1) print 'doubletons ',lens.count(2) print 'tripletons ',lens.count(3) print 'Showing dataset after merging.' fos.clear(r) T=[t + np.array([120,0,0]) for t in T] colors=np.zeros((len(T),3)) for c in C2: color=np.random.rand(1,3) for i in C2[c]['indices']: colors[i]=color fos.add(r,fos.line(T,colors,opacity=1)) fos.show(r) print 'Some statistics about the clusters' print 'Number of clusters',len(C.keys()) lens=[len(C2[c]['indices']) for c in C] print 'max ',max(lens), 'min ',min(lens) print 'singletons ',lens.count(1) print 'doubletons ',lens.count(2) print 'tripletons ',lens.count(3) ''' dipy-0.10.1/scratch/very_scratch/profile_dti.py000066400000000000000000000013461263041327500215420ustar00rootroot00000000000000# Profiling by fitting an actual, rather sizeable data-set. import time import numpy as np import dipy.data as dpd import dipy.reconst.dti as dti reload(dti) img, gtab = dpd.read_stanford_hardi() t1 = time.time() dm_ols = dti.TensorModel(gtab, fit_method='OLS') fit_ols = dm_ols.fit(img.get_data()) t2 = time.time() print("Done with OLS. That took %s seconds to run"%(t2-t1)) dm_nlls = dti.TensorModel(gtab, fit_method='NLLS') fit_nlls = dm_nlls.fit(img.get_data()) t3 = time.time() print("Done with NLLS. That took %s seconds to run"%(t3-t2)) dm_restore = dti.TensorModel(gtab, fit_method='restore', sigma=10) fit_restore = dm_restore.fit(img.get_data()) t4 = time.time() print("Done with RESTORE. That took %s seconds to run"%(t4-t3)) dipy-0.10.1/scratch/very_scratch/registration_example.py000066400000000000000000000170651263041327500234740ustar00rootroot00000000000000import os import numpy as np import dipy as dp import nibabel as ni import resources import time from subprocess import Popen,PIPE #Registration options #similarity 'cc', 'cr', 'crl1', 'mi', je', 'ce', 'nmi', 'smi'. 'cr' similarity='cr' #interp 'pv', 'tri' interp = 'tri' #subsampling None or sequence (3,) subsampling=[1,1,1] #search 'affine', 'rigid', 'similarity' or ['rigid','affine'] search='affine' #optimizer 'simplex', 'powell', 'steepest', 'cg', 'bfgs' or #sequence of optimizers optimizer= 'powell' def eddy_current_correction(data,affine,target=None,target_affine=None): result=[] no_dirs=data.shape[-1] if target==None and target_affine==None: target=ni.Nifti1Image(data[:,:,:,0],affine) else: target=ni.Nifti1Image(target,target_affine) for i in range(1,no_dirs): source=ni.Nifti1Image(data[:,:,:,i],affine) T=dp.volume_register(source,target,similarity,\ interp,subsampling,search,optimizer) sourceT=dp.volume_transform(source, T.inv(), reference=target) print i, sourceT.get_data().shape, sourceT.get_affine().shape result.append(sourceT) result.insert(0,target) print 'no of images',len(result) return ni.concat_images(result) def register_source_2_target(source_data,source_affine,target_data,target_affine): #subsampling=target_data.shape[:3] target=ni.Nifti1Image(target_data,target_affine) source=ni.Nifti1Image(source_data,source_affine) T=dp.volume_register(source,target,similarity,\ interp,subsampling,search,optimizer) sourceT=dp.volume_transform(source, T.inv(), reference=target) return sourceT def save_volumes_as_mosaic(fname,volume_list): import Image vols=[] for vol in volume_list: vol=np.rollaxis(vol,2,1) sh=vol.shape arr=vol.reshape(sh[0],sh[1]*sh[2]) arr=np.interp(arr,[arr.min(),arr.max()],[0,255]) arr=arr.astype('ubyte') print 'arr.shape',arr.shape vols.append(arr) mosaic=np.concatenate(vols) Image.fromarray(mosaic).save(fname) def haircut_dwi_reference(nii,nii_hair): cmd='bet '+nii+' '+ nii_hair + ' -f .2 -g 0' print cmd p = Popen(cmd, shell=True,stdout=PIPE,stderr=PIPE) sto=p.stdout.readlines() ste=p.stderr.readlines() print sto print ste def register_FA_same_subj_diff_sessions(dname_grid,dname_shell): print('create temporary directory') tmp_dir='/tmp' print('load dicom data') data_gr,affine_gr,bvals_gr,gradients_gr=dp.load_dcm_dir(dname_grid) data_sh,affine_sh,bvals_sh,gradients_sh=dp.load_dcm_dir(dname_shell) print('save DWI reference as nifti') tmp_grid=os.path.join(tmp_dir,os.path.basename(dname_grid)+'_ref.nii') tmp_shell=os.path.join(tmp_dir,os.path.basename(dname_shell)+'_ref.nii') ni.save(ni.Nifti1Image(data_gr[...,0],affine_gr),tmp_grid) ni.save(ni.Nifti1Image(data_sh[...,0],affine_sh),tmp_shell) print('prepare filenames for haircut (bet)') tmp_grid_bet=os.path.join(os.path.dirname(tmp_grid),\ os.path.splitext(os.path.basename(dname_grid))[0]+\ '_ref_bet.nii.gz') tmp_shell_bet=os.path.join(os.path.dirname(tmp_shell),\ os.path.splitext(os.path.basename(dname_shell))[0]+\ '_ref_bet.nii.gz') print('bet is running') haircut_dwi_reference(tmp_grid,tmp_grid_bet) haircut_dwi_reference(tmp_shell,tmp_shell_bet) print('load nii.gz reference (s0) volumes') img_gr_bet=ni.load(tmp_grid_bet) img_sh_bet=ni.load(tmp_shell_bet) print('register the shell reference to the grid reference') source=img_sh_bet target=img_gr_bet T=dp.volume_register(source,target,similarity,\ interp,subsampling,search,optimizer) print('apply the inverse of the transformation matrix') sourceT=dp.volume_transform(source, T.inv(), reference=target) #ni.save(sourceT,'/tmp/result.nii.gz') print('calculate FA for grid and shell data') FA_grid=dp.Tensor( data_gr,bvals_gr,gradients_gr,thresh=50).FA FA_shell=dp.Tensor(data_sh,bvals_sh,gradients_sh,thresh=50).FA print('create an FA nibabel image for shell') FA_shell_img=ni.Nifti1Image(FA_shell,affine_sh) print('transform FA_shell') FA_shell_imgT=dp.volume_transform(FA_shell_img,T.inv(),reference=target) return ni.Nifti1Image(FA_grid,affine_gr),FA_shell_imgT def flirt(in_nii, ref_nii,out_nii,transf_mat): cmd='flirt -in ' + in_nii + ' -ref ' + ref_nii + ' -out ' \ + out_nii +' -dof 6 -omat ' + transf_mat print(cmd) pipe(cmd) def flirt_apply_transform(in_nii, target_nii, out_nii, transf_mat): cmd='flirt -in ' + in_nii + ' -ref ' + target_nii + ' -out ' \ + out_nii +' -init ' + transf_mat +' -applyxfm' print(cmd) pipe(cmd) def test_registration(): S012='/tmp/compare_12_with_32_Verio_directly/18620_0004.nii_S0.nii.gz' S032='/tmp/compare_12_with_32_Verio_directly/18620_0006.nii_S0.nii.gz' S012T='/tmp/compare_12_with_32_Verio_directly/S0_reg.nii.gz' MP='/tmp/compare_12_with_32_Verio_directly/MPRAGE.nii' D114=resources.get_paths('DTI STEAM 114 Trio')[2] data,affine,bvals,gradients=dp.load_dcm_dir(D114) D114i=ni.Nifti1Image(data[...,0],affine) D101=resources.get_paths('DSI STEAM 101 Trio')[2] data,affine,bvals,gradients=dp.load_dcm_dir(D101) D101i=ni.Nifti1Image(data[...,0],affine) ni.save(D101i,'/tmp/compare_12_with_32_Verio_directly/S0_101_reg.nii.gz') #source=ni.load(S012) source=D114i #target=D101i #target=ni.load(S032) target=ni.load(MP) target._data=np.squeeze(target._data) #target._affine= np.dot(np.diag([-1, -1, 1, 1]), target._affine) similarity='cr' interp = 'tri' subsampling=None search='affine' optimizer= 'powell' T=dp.volume_register(source,target,similarity,\ interp,subsampling,search,optimizer) print('Transformation matrix') print(T.inv()) sourceT=dp.volume_transform(source,T.inv(),reference=target,interp_order=0) sourceTd=sourceT.get_data() sourceTd[sourceTd<0]=0 sourceT._data=sourceTd ni.save(sourceT,S012T) sourced=source.get_data() targetd=target.get_data() sourceTd=sourceT.get_data() print 'source info',sourced.min(), sourced.max() print 'target info',targetd.min(), targetd.max() print 'sourceT info',sourceTd.min(), sourceTd.max() #save_volumes_as_mosaic('/tmp/mosaic_S0_MP_cr_pv_powell.png',\ # [sourced,sourceTd,targetd]) # RAS to LPS np.dot(np.diag([-1, -1, 1, 1]), A) # LPS to RAS if __name__ == '__main__': ''' print('Goal is to compare FA of grid versus shell acquisitions using STEAM') print('find filenames for grid and shell data') dname_grid=resources.get_paths('DSI STEAM 101 Trio')[2] dname_shell=resources.get_paths('DTI STEAM 114 Trio')[2] #print('find filenames for T1') #fname_T1=resources.get_paths('MPRAGE nifti Trio')[2] FA_grid_img,FA_shell_imgT=register_FA_same_subj_diff_sessions(dname_grid,dname_shell) #FA_shell_data=FA_shell_imgT.get_data() #FA_shell_data[FA_shell_data<0]=0 print('tile volumes') save_volumes_as_mosaic('/tmp/mosaic_fa.png',\ [FA_grid_img.get_data(),FA_shell_imgT.get_data()]) ''' dipy-0.10.1/scratch/very_scratch/simulation_comparison_dsi_gqi.py000066400000000000000000000022471263041327500253600ustar00rootroot00000000000000import numpy as np import dipy as dp import dipy.io.pickles as pkl import scipy as sp fname='/home/ian/Data/SimData/results_SNR030_1fibre' #fname='/home/eg01/Data_Backup/Data/Marta/DSI/SimData/results_SNR030_isotropic' ''' file has one row for every voxel, every voxel is repeating 1000 times with the same noise level , then we have 100 different directions. 1000 * 100 is the number of all rows. ''' marta_table_fname='/home/ian/Data/SimData/Dir_and_bvals_DSI_marta.txt' sim_data=np.loadtxt(fname) #bvalsf='/home/eg01/Data_Backup/Data/Marta/DSI/SimData/bvals101D_float.txt' b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] gq = dp.GeneralizedQSampling(sim_data,bvals,gradients) tn = dp.Tensor(sim_data,bvals,gradients) #''' gqfile = '/home/ian/Data/SimData/gq_SNR030_1fibre.pkl' pkl.save_pickle(gqfile,gq) tnfile = '/home/ian/Data/SimData/tn_SNR030_1fibre.pkl' pkl.save_pickle(tnfile,tn) ''' print tn.evals.shape print tn.evecs.shape evals=tn.evals[0] evecs=tn.evecs[0] print evecs.shape first_directions = tn.evecs[:,:,0] first1000 = first_directions[:1000,:] cross = np.dot(first1000.T,first1000) np.linalg.eig(cross) ''' dipy-0.10.1/scratch/very_scratch/simulation_comparisons.py000066400000000000000000000306431263041327500240450ustar00rootroot00000000000000import nibabel import os import numpy as np import dipy as dp #import dipy.core.generalized_q_sampling as dgqs#dipy. import dipy.reconst.gqi as dgqs import dipy.io.pickles as pkl import scipy as sp from matplotlib.mlab import find #import dipy.core.sphere_plots as splots import dipy.core.sphere_stats as sphats import dipy.core.geometry as geometry import get_vertices as gv #old SimData files ''' results_SNR030_1fibre results_SNR030_1fibre+iso results_SNR030_2fibres_15deg results_SNR030_2fibres_30deg results_SNR030_2fibres_60deg results_SNR030_2fibres_90deg results_SNR030_2fibres+iso_15deg results_SNR030_2fibres+iso_30deg results_SNR030_2fibres+iso_60deg results_SNR030_2fibres+iso_90deg results_SNR030_isotropic ''' #fname='/home/ian/Data/SimData/results_SNR030_1fibre' ''' file has one row for every voxel, every voxel is repeating 1000 times with the same noise level , then we have 100 different directions. 1000 * 100 is the number of all rows. The 100 conditions are given by 10 polar angles (in degrees) 0, 20, 40, 60, 80, 80, 60, 40, 20 and 0, and each of these with longitude angle 0, 40, 80, 120, 160, 200, 240, 280, 320, 360. ''' #new complete SimVoxels files simdata = ['fibres_2_SNR_80_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_60_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_100_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_100_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_1_SNR_20_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_80_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_20_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_80_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_40_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_60_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_1_SNR_40_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00'] simdir = '/home/ian/Data/SimVoxels/' def gq_tn_calc_save(): for simfile in simdata: dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) marta_table_fname='/home/ian/Data/SimData/Dir_and_bvals_DSI_marta.txt' b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] gq = dp.GeneralizedQSampling(sim_data,bvals,gradients) gqfile = simdir+'gq/'+dataname+'.pkl' pkl.save_pickle(gqfile,gq) ''' gq.IN gq.__doc__ gq.glob_norm_param gq.QA gq.__init__ gq.odf gq.__class__ gq.__module__ gq.q2odf_params ''' tn = dp.Tensor(sim_data,bvals,gradients) tnfile = simdir+'tn/'+dataname+'.pkl' pkl.save_pickle(tnfile,tn) ''' tn.ADC tn.__init__ tn._getevals tn.B tn.__module__ tn._getevecs tn.D tn.__new__ tn._getndim tn.FA tn.__reduce__ tn._getshape tn.IN tn.__reduce_ex__ tn._setevals tn.MD tn.__repr__ tn._setevecs tn.__class__ tn.__setattr__ tn.adc tn.__delattr__ tn.__sizeof__ tn.evals tn.__dict__ tn.__str__ tn.evecs tn.__doc__ tn.__subclasshook__ tn.fa tn.__format__ tn.__weakref__ tn.md tn.__getattribute__ tn._evals tn.ndim tn.__getitem__ tn._evecs tn.shape tn.__hash__ tn._getD ''' ''' file has one row for every voxel, every voxel is repeating 1000 times with the same noise level , then we have 100 different directions. 100 * 1000 is the number of all rows. At the moment this module is hardwired to the use of the EDS362 spherical mesh. I am assumung (needs testing) that directions 181 to 361 are the antipodal partners of directions 0 to 180. So when counting the number of different vertices that occur as maximal directions we wll map the indices modulo 181. ''' def analyze_maxima(indices, max_dirs, subsets): '''This calculates the eigenstats for each of the replicated batches of the simulation data ''' results = [] for direction in subsets: batch = max_dirs[direction,:,:] index_variety = np.array([len(set(np.remainder(indices[direction,:],181)))]) #normed_centroid, polar_centroid, centre, b1 = sphats.eigenstats(batch) centre, b1 = sphats.eigenstats(batch) # make azimuth be in range (0,360) rather than (-180,180) centre[1] += 360*(centre[1] < 0) #results.append(np.concatenate((normed_centroid, polar_centroid, centre, b1, index_variety))) results.append(np.concatenate((centre, b1, index_variety))) return results #dt_first_directions = tn.evecs[:,:,0].reshape((100,1000,3)) # these are the principal directions for the full set of simulations #gq_tn_calc_save() eds=np.load(os.path.join(os.path.dirname(dp.__file__),'core','matrices','evenly_distributed_sphere_362.npz')) odf_vertices=eds['vertices'] def run_comparisons(sample_data=35): for simfile in [simdata[sample_data]]: dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) # gqfile = simdir+'gq/'+dataname+'.pkl' # gq = pkl.load_pickle(gqfile) tnfile = simdir+'tn/'+dataname+'.pkl' tn = pkl.load_pickle(tnfile) dt_first_directions_in=odf_vertices[tn.IN] dt_indices = tn.IN.reshape((100,1000)) dt_results = analyze_maxima(dt_indices, dt_first_directions_in.reshape((100,1000,3)),range(10,91)) # gq_indices = np.array(gq.IN[:,0],dtype='int').reshape((100,1000)) # gq_first_directions_in=odf_vertices[np.array(gq.IN[:,0],dtype='int')] #print gq_first_directions_in.shape # gq_results = analyze_maxima(gq_indices, gq_first_directions_in.reshape((100,1000,3)),range(100)) #for gqi see example dicoms_2_tracks gq.IN[:,0] np.set_printoptions(precision=6, suppress=True, linewidth=200, threshold=5000) out = open('/home/ian/Data/SimVoxels/Out/'+'***_'+dataname,'w') # results = np.hstack((np.vstack(dt_results), np.vstack(gq_results))) results = np.vstack(dt_results) print >> out, results[:,:] out.close() #up = dt_batch[:,2]>= 0 #splots.plot_sphere(dt_batch[up], 'batch '+str(direction)) #splots.plot_lambert(dt_batch[up],'batch '+str(direction), centre) #spread = gq.q2odf_params e,v = np.linalg.eigh(np.dot(spread,spread.transpose())) effective_dimension = len(find(np.cumsum(e) > 0.05*np.sum(e))) #95% #rotated = np.dot(dt_batch,evecs) #rot_evals, rot_evecs = np.linalg.eig(np.dot(rotated.T,rotated)/rotated.shape[0]) #eval_order = np.argsort(rot_evals) #rotated = rotated[:,eval_order] #up = rotated[:,2]>= 0 #splot.plot_sphere(rotated[up],'first1000') #splot.plot_lambert(rotated[up],'batch '+str(direction)) def run_gq_sims(sample_data=[35]): for simfile in [simdata[sample] for sample in sample_data]: dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) marta_table_fname='/home/ian/Data/SimData/Dir_and_bvals_DSI_marta.txt' b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] for j in range(10): s = sim_data[10000+j,:] gqs = dp.GeneralizedQSampling(s.reshape((1,102)),bvals,gradients,Lambda=7) t0, t1, t2, npa = gqs.npa(s, width = 5) print t0, t1, t2, npa ''' for (i,o) in enumerate(gqs.odf(s)): print i,o for (i,o) in enumerate(gqs.odf_vertices): print i,o ''' #o = gqs.odf(s) #v = gqs.odf_vertices #pole = v[t0[0]] #eqv = dgqs.equatorial_zone_vertices(v, pole, 5) #print 'Number of equatorial vertices: ', len(eqv) #print np.max(o[eqv]),np.min(o[eqv]) #cos_e_pole = [np.dot(pole.T, v[i]) for i in eqv] #print np.min(cos1), np.max(cos1) #print 'equatorial max in equatorial vertices:', t1[0] in eqv #x = np.cross(v[t0[0]],v[t1[0]]) #x = x/np.sqrt(np.sum(x**2)) #print x #ptchv = dgqs.patch_vertices(v, x, 5) #print len(ptchv) #eqp = eqv[np.argmin([np.abs(np.dot(v[t1[0]].T,v[p])) for p in eqv])] #print (eqp, o[eqp]) #print t2[0] in ptchv, t2[0] in eqv #print np.dot(pole.T, v[t1[0]]), np.dot(pole.T, v[t2[0]]) #print ptchv[np.argmin([o[v] for v in ptchv])] #gq_indices = np.array(gq.IN[:,0],dtype='int').reshape((100,1000)) #gq_first_directions_in=odf_vertices[np.array(gq.IN[:,0],dtype='int')] #print gq_first_directions_in.shape #gq_results = analyze_maxima(gq_indices, gq_first_directions_in.reshape((100,1000,3)),range(100)) #for gqi see example dicoms_2_tracks gq.IN[:,0] #np.set_printoptions(precision=6, suppress=True, linewidth=200, threshold=5000) #out = open('/home/ian/Data/SimVoxels/Out/'+'+++_'+dataname,'w') #results = np.hstack((np.vstack(dt_results), np.vstack(gq_results))) #results = np.vstack(dt_results) #print >> out, results[:,:] #out.close() #run_comparisons() run_gq_sims() dipy-0.10.1/scratch/very_scratch/simulation_comparisons_modified.py000066400000000000000000000314751263041327500257110ustar00rootroot00000000000000import nibabel import os import numpy as np import dipy as dp import dipy.core.generalized_q_sampling as dgqs import dipy.io.pickles as pkl import scipy as sp from matplotlib.mlab import find import dipy.core.sphere_plots as splots import dipy.core.sphere_stats as sphats import dipy.core.geometry as geometry import get_vertices as gv #old SimData files ''' results_SNR030_1fibre results_SNR030_1fibre+iso results_SNR030_2fibres_15deg results_SNR030_2fibres_30deg results_SNR030_2fibres_60deg results_SNR030_2fibres_90deg results_SNR030_2fibres+iso_15deg results_SNR030_2fibres+iso_30deg results_SNR030_2fibres+iso_60deg results_SNR030_2fibres+iso_90deg results_SNR030_isotropic ''' #fname='/home/ian/Data/SimData/results_SNR030_1fibre' ''' file has one row for every voxel, every voxel is repeating 1000 times with the same noise level , then we have 100 different directions. 1000 * 100 is the number of all rows. The 100 conditions are given by 10 polar angles (in degrees) 0, 20, 40, 60, 80, 80, 60, 40, 20 and 0, and each of these with longitude angle 0, 40, 80, 120, 160, 200, 240, 280, 320, 360. ''' #new complete SimVoxels files simdata = ['fibres_2_SNR_80_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_60_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_100_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_100_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_1_SNR_20_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_40_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_80_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_20_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_100_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_20_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_80_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_80_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_40_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_1_SNR_60_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_60_angle_30_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_60_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_80_angle_15_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_1_SNR_40_angle_00_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_100_angle_60_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00', 'fibres_2_SNR_40_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_1_diso_0.7', 'fibres_2_SNR_20_angle_90_l1_1.4_l2_0.35_l3_0.35_iso_0_diso_00'] simdir = '/home/ian/Data/SimVoxels/' def gq_tn_calc_save(): for simfile in simdata: dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) marta_table_fname='/home/ian/Data/SimData/Dir_and_bvals_DSI_marta.txt' b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] gq = dp.GeneralizedQSampling(sim_data,bvals,gradients) gqfile = simdir+'gq/'+dataname+'.pkl' pkl.save_pickle(gqfile,gq) ''' gq.IN gq.__doc__ gq.glob_norm_param gq.QA gq.__init__ gq.odf gq.__class__ gq.__module__ gq.q2odf_params ''' tn = dp.Tensor(sim_data,bvals,gradients) tnfile = simdir+'tn/'+dataname+'.pkl' pkl.save_pickle(tnfile,tn) ''' tn.ADC tn.__init__ tn._getevals tn.B tn.__module__ tn._getevecs tn.D tn.__new__ tn._getndim tn.FA tn.__reduce__ tn._getshape tn.IN tn.__reduce_ex__ tn._setevals tn.MD tn.__repr__ tn._setevecs tn.__class__ tn.__setattr__ tn.adc tn.__delattr__ tn.__sizeof__ tn.evals tn.__dict__ tn.__str__ tn.evecs tn.__doc__ tn.__subclasshook__ tn.fa tn.__format__ tn.__weakref__ tn.md tn.__getattribute__ tn._evals tn.ndim tn.__getitem__ tn._evecs tn.shape tn.__hash__ tn._getD ''' ''' file has one row for every voxel, every voxel is repeating 1000 times with the same noise level , then we have 100 different directions. 100 * 1000 is the number of all rows. At the moment this module is hardwired to the use of the EDS362 spherical mesh. I am assumung (needs testing) that directions 181 to 361 are the antipodal partners of directions 0 to 180. So when counting the number of different vertices that occur as maximal directions we wll map the indices modulo 181. ''' def analyze_maxima(indices, max_dirs, subsets): '''This calculates the eigenstats for each of the replicated batches of the simulation data ''' results = [] for direction in subsets: batch = max_dirs[direction,:,:] index_variety = np.array([len(set(np.remainder(indices[direction,:],181)))]) #normed_centroid, polar_centroid, centre, b1 = sphats.eigenstats(batch) centre, b1 = sphats.eigenstats(batch) # make azimuth be in range (0,360) rather than (-180,180) centre[1] += 360*(centre[1] < 0) #results.append(np.concatenate((normed_centroid, polar_centroid, centre, b1, index_variety))) results.append(np.concatenate((centre, b1, index_variety))) return results #dt_first_directions = tn.evecs[:,:,0].reshape((100,1000,3)) # these are the principal directions for the full set of simulations #gq_tn_calc_save() eds=np.load(os.path.join(os.path.dirname(dp.__file__),'core','matrices','evenly_distributed_sphere_362.npz')) odf_vertices=eds['vertices'] def run_comparisons(sample_data=35): for simfile in [simdata[sample_data]]: dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) gqfile = simdir+'gq/'+dataname+'.pkl' gq = pkl.load_pickle(gqfile) tnfile = simdir+'tn/'+dataname+'.pkl' tn = pkl.load_pickle(tnfile) dt_first_directions_in=odf_vertices[tn.IN] dt_indices = tn.IN.reshape((100,1000)) dt_results = analyze_maxima(dt_indices, dt_first_directions_in.reshape((100,1000,3)),range(10,90)) gq_indices = np.array(gq.IN[:,0],dtype='int').reshape((100,1000)) gq_first_directions_in=odf_vertices[np.array(gq.IN[:,0],dtype='int')] #print gq_first_directions_in.shape gq_results = analyze_maxima(gq_indices, gq_first_directions_in.reshape((100,1000,3)),range(10,90)) #for gqi see example dicoms_2_tracks gq.IN[:,0] np.set_printoptions(precision=3, suppress=True, linewidth=200, threshold=5000) out = open('/home/ian/Data/SimVoxels/Out/'+'***_'+dataname,'w') #print np.vstack(dt_results).shape, np.vstack(gq_results).shape results = np.hstack((np.vstack(dt_results), np.vstack(gq_results))) #print results.shape #results = np.vstack(dt_results) print >> out, results[:,:] out.close() #up = dt_batch[:,2]>= 0 #splots.plot_sphere(dt_batch[up], 'batch '+str(direction)) #splots.plot_lambert(dt_batch[up],'batch '+str(direction), centre) #spread = gq.q2odf_params e,v = np.linalg.eigh(np.dot(spread,spread.transpose())) effective_dimension = len(find(np.cumsum(e) > 0.05*np.sum(e))) #95% #rotated = np.dot(dt_batch,evecs) #rot_evals, rot_evecs = np.linalg.eig(np.dot(rotated.T,rotated)/rotated.shape[0]) #eval_order = np.argsort(rot_evals) #rotated = rotated[:,eval_order] #up = rotated[:,2]>= 0 #splot.plot_sphere(rotated[up],'first1000') #splot.plot_lambert(rotated[up],'batch '+str(direction)) def run_gq_sims(sample_data=[35,23,46,39,40,10,37,27,21,20]): results = [] out = open('/home/ian/Data/SimVoxels/Out/'+'npa+fa','w') for j in range(len(sample_data)): sample = sample_data[j] simfile = simdata[sample] dataname = simfile print dataname sim_data=np.loadtxt(simdir+dataname) marta_table_fname='/home/ian/Data/SimData/Dir_and_bvals_DSI_marta.txt' b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] for j in np.vstack((np.arange(100)*1000,np.arange(100)*1000+1)).T.ravel(): # 0,1,1000,1001,2000,2001,... s = sim_data[j,:] gqs = dp.GeneralizedQSampling(s.reshape((1,102)),bvals,gradients,Lambda=3.5) tn = dp.Tensor(s.reshape((1,102)),bvals,gradients,fit_method='LS') t0, t1, t2, npa = gqs.npa(s, width = 5) print >> out, dataname, j, npa, tn.fa()[0] ''' for (i,o) in enumerate(gqs.odf(s)): print i,o for (i,o) in enumerate(gqs.odf_vertices): print i,o ''' #o = gqs.odf(s) #v = gqs.odf_vertices #pole = v[t0[0]] #eqv = dgqs.equatorial_zone_vertices(v, pole, 5) #print 'Number of equatorial vertices: ', len(eqv) #print np.max(o[eqv]),np.min(o[eqv]) #cos_e_pole = [np.dot(pole.T, v[i]) for i in eqv] #print np.min(cos1), np.max(cos1) #print 'equatorial max in equatorial vertices:', t1[0] in eqv #x = np.cross(v[t0[0]],v[t1[0]]) #x = x/np.sqrt(np.sum(x**2)) #print x #ptchv = dgqs.patch_vertices(v, x, 5) #print len(ptchv) #eqp = eqv[np.argmin([np.abs(np.dot(v[t1[0]].T,v[p])) for p in eqv])] #print (eqp, o[eqp]) #print t2[0] in ptchv, t2[0] in eqv #print np.dot(pole.T, v[t1[0]]), np.dot(pole.T, v[t2[0]]) #print ptchv[np.argmin([o[v] for v in ptchv])] #gq_indices = np.array(gq.IN[:,0],dtype='int').reshape((100,1000)) #gq_first_directions_in=odf_vertices[np.array(gq.IN[:,0],dtype='int')] #print gq_first_directions_in.shape #gq_results = analyze_maxima(gq_indices, gq_first_directions_in.reshape((100,1000,3)),range(100)) #for gqi see example dicoms_2_tracks gq.IN[:,0] #np.set_printoptions(precision=6, suppress=True, linewidth=200, threshold=5000) #out = open('/home/ian/Data/SimVoxels/Out/'+'+++_'+dataname,'w') #results = np.hstack((np.vstack(dt_results), np.vstack(gq_results))) #results = np.vstack(dt_results) #print >> out, results[:,:] out.close() run_comparisons() #run_gq_sims() dipy-0.10.1/scratch/very_scratch/simulation_dsi.py000066400000000000000000000130221263041327500222570ustar00rootroot00000000000000import numpy as np import dipy as dp import pyglet from pyglet.gl import * #from delaunay.core import Triangulation #http://flub.stuffwillmade.org/delny/ try: # Try and create a window with multisampling (antialiasing) config = Config(sample_buffers=1, samples=4, depth_size=24, double_buffer=True,vsync=False) window = pyglet.window.Window(resizable=True, config=config) except pyglet.window.NoSuchConfigException: # Fall back to no multisampling for old hardware window = pyglet.window.Window(resizable=True) #fps_display = pyglet.clock.ClockDisplay() @window.event def on_resize(width, height): # Override the default on_resize handler to create a 3D projection print('%d width, %d height' % (width,height)) glViewport(0, 0, width, height) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60., width / float(height), .1, 1000.) glMatrixMode(GL_MODELVIEW) #window.flip() return pyglet.event.EVENT_HANDLED def update(dt): global rx, ry, rz #rx += dt * 5 #ry += dt * 80 #rz += dt * 30 #rx %= 360 #ry %= 360 #rz %= 360 pass pyglet.clock.schedule(update) #pyglet.clock.schedule_interval(update,1/100.) @window.event def on_draw(): global surf for i in range(0,900,3): if np.random.rand()>0.5: surf.vertex_list.vertices[i]+=0.001*np.random.rand() surf.vertex_list.vertices[i+1]+=0.001*np.random.rand() surf.vertex_list.vertices[i+2]+=0.001*np.random.rand() else: surf.vertex_list.vertices[i]-=0.001*np.random.rand() surf.vertex_list.vertices[i+1]-=0.001*np.random.rand() surf.vertex_list.vertices[i+2]-=0.001*np.random.rand() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() #fps_display.draw() #glScalef(3,1,1) glTranslatef(0, 0, -4) glRotatef(rx, 0, 0, 1) glRotatef(ry, 0, 1, 0) glRotatef(rx, 1, 0, 0) batch.draw() #pyglet.image.get_buffer_manager().get_color_buffer().save('/tmp/test.png') print pyglet.clock.get_fps() #window.clear() #fps_display.draw() def setup(): # One-time GL setup glClearColor(1, 1, 1, 1) #glClearColor(0,0,0,0) glColor3f(1, 0, 0) glEnable(GL_DEPTH_TEST) #glEnable(GL_CULL_FACE) # Uncomment this line for a wireframe view glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) glLineWidth(3.) # Simple light setup. On Windows GL_LIGHT0 is enabled by default, # but this is not the case on Linux or Mac, so remember to always # include it. glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glEnable(GL_LIGHT1) # Define a simple function to create ctypes arrays of floats: def vec(*args): return (GLfloat * len(args))(*args) glLightfv(GL_LIGHT0, GL_POSITION, vec(.5, .5, 1, 0)) glLightfv(GL_LIGHT0, GL_SPECULAR, vec(.5, .5, 1, 1)) glLightfv(GL_LIGHT0, GL_DIFFUSE, vec(1, 1, 1, 1)) glLightfv(GL_LIGHT1, GL_POSITION, vec(1, 0, .5, 0)) glLightfv(GL_LIGHT1, GL_DIFFUSE, vec(.5, .0, 0, 1)) glLightfv(GL_LIGHT1, GL_SPECULAR, vec(1, 0, 0, 1)) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.5, 0, 0.3, 0.5)) glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, vec(1, 1, 1, 0.5)) glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50) class Surface(object): def __init__(self, vertices,faces,batch,group=None): inds=faces.ravel().tolist() verx=vertices.ravel().tolist() normals=np.zeros((len(vertices),3)) p=vertices l=faces trinormals=np.cross(p[l[:,0]]-p[l[:,1]],p[l[:,1]]-p[l[:,2]],axisa=1,axisb=1) for (i,lp) in enumerate(faces): normals[lp]+=trinormals[i] div=np.sqrt(np.sum(normals**2,axis=1)) div=div.reshape(len(div),1) normals=(normals/div) #normals=vertices/np.linalg.norm(vertices) norms=np.array(normals).ravel().tolist() self.vertex_list = batch.add_indexed(len(vertices),\ GL_TRIANGLES,\ group,\ inds,\ ('v3d/static',verx),\ ('n3d/static',norms)) def delete(self): self.vertex_list.delete() fname='/home/eg01/Data_Backup/Data/Marta/DSI/SimData/results_SNR030_1fibre' #fname='/home/eg01/Data_Backup/Data/Marta/DSI/SimData/results_SNR030_isotropic' marta_table_fname='/home/eg01/Data_Backup/Data/Marta/DSI/SimData/Dir_and_bvals_DSI_marta.txt' sim_data=np.loadtxt(fname) #bvalsf='/home/eg01/Data_Backup/Data/Marta/DSI/SimData/bvals101D_float.txt' dname = '/home/eg01/Data_Backup/Data/Frank_Eleftherios/frank/20100511_m030y_cbu100624/08_ep2d_advdiff_101dir_DSI' #real_data,affine,bvals,gradients=dp.load_dcm_dir(dname) b_vals_dirs=np.loadtxt(marta_table_fname) bvals=b_vals_dirs[:,0]*1000 gradients=b_vals_dirs[:,1:] sim_data=sim_data gq = dp.GeneralizedQSampling(sim_data,bvals,gradients) tn = dp.Tensor(sim_data,bvals,gradients) evals=tn.evals[0] evecs=tn.evecs[0] setup() batch = pyglet.graphics.Batch() eds=np.load('/home/eg01/Devel/dipy/dipy/core/matrices/evenly_distributed_sphere_362.npz') vertices=eds['vertices'] faces=eds['faces'] surf = Surface(vertices,faces, batch=batch) rx = ry = rz = 0 print('Application Starting Now...') pyglet.app.run() dipy-0.10.1/scratch/very_scratch/spherical_statistics.py000066400000000000000000000130771263041327500234720ustar00rootroot00000000000000import numpy as np import dipy.core.meshes as meshes import get_vertices as gv from dipy.core.triangle_subdivide import create_unit_sphere #from dipy.viz import fos #from dipy.io import dicomreaders as dcm #import dipy.core.geometry as geometry #import matplotlib.pyplot as mplp import dipy.core.sphere_plots as splot # set up a dictionary of sphere points that are in use EITHER as a set # directions for diffusion weighted acquisitions OR as a set of # evaluation points for an ODF (orientation distribution function. sphere_dic = {'fy362': {'filepath' : '/home/ian/Devel/dipy/dipy/core/data/evenly_distributed_sphere_362.npz', 'object': 'npz', 'vertices': 'vertices', 'omit': 0, 'hemi': False}, 'fy642': {'filepath' : '/home/ian/Devel/dipy/dipy/core/data/evenly_distributed_sphere_642.npz', 'object': 'npz', 'vertices': 'odf_vertices', 'omit': 0, 'hemi': False}, 'siem64': {'filepath':'/home/ian/Devel/dipy/dipy/core/tests/data/small_64D.gradients.npy', 'object': 'npy', 'omit': 1, 'hemi': True}, 'create2': {}, 'create3': {}, 'create4': {}, 'create5': {}, 'create6': {}, 'create7': {}, 'create8': {}, 'create9': {}, 'marta200': {'filepath': '/home/ian/Data/Spheres/200.npy', 'object': 'npy', 'omit': 0, 'hemi': True}, 'dsi101': {'filepath': '/home/ian/Data/Frank_Eleftherios/frank/20100511_m030y_cbu100624/08_ep2d_advdiff_101dir_DSI', 'object': 'dicom', 'omit': 0, 'hemi': True}} def plot_sphere(v,key): r = fos.ren() fos.add(r,fos.point(v,fos.green, point_radius= 0.01)) fos.show(r, title=key, size=(1000,1000)) def plot_lambert(v,key): lamb = geometry.lambert_equal_area_projection_cart(*v.T).T (y1,y2) = lamb radius = np.sum(lamb**2,axis=0) < 1 #print inner #print y1[inner] #print y1[-inner] figure = mplp.figure(facecolor='w') current = figure.add_subplot(111) current.patch.set_color('k') current.plot(y1[radius],y2[radius],'.g') current.plot(y1[-radius],y2[-radius],'.r') current.axes.set_aspect(aspect = 'equal', adjustable = 'box') figure.show() figure.waitforbuttonpress() mplp.close() def get_vertex_set(key): if key[:6] == 'create': number = eval(key[6:]) vertices, edges, faces = create_unit_sphere(number) omit = 0 else: entry = sphere_dic[key] #print entry if entry.has_key('omit'): omit = entry['omit'] else: omit = 0 filepath = entry['filepath'] if entry['object'] == 'npz': filearray = np.load(filepath) vertices = filearray[entry['vertices']] elif sphere_dic[key]['object'] == 'npy': vertices = np.load(filepath) elif entry['object'] == 'dicom': data,affine,bvals,gradients=dcm.read_mosaic_dir(filepath) #print (bvals.shape, gradients.shape) grad3 = np.vstack((bvals,bvals,bvals)).transpose() #print grad3.shape #vertices = grad3*gradients vertices = gradients if omit > 0: vertices = vertices[omit:,:] if entry['hemi']: vertices = np.vstack([vertices, -vertices]) print key, ': number of vertices = ', vertices.shape[0], '(drop ',omit,')' return vertices[omit:,:] xup=np.array([ 1,0,0]) xdn=np.array([-1,0,0]) yup=np.array([0, 1,0]) ydn=np.array([0,-1,0]) zup=np.array([0,0, 1]) zdn=np.array([0,0,-1]) #for key in sphere_dic: #for key in ['siem64']: for key in ['fy642']: v = gv.get_vertex_set(key) splot.plot_sphere(v,key) splot.plot_lambert(v,key,centre=np.array([0.,0.])) equat, polar = meshes.spherical_statistics(v,north=xup,width=0.2) l = 2.*len(v) equat = equat/l polar = polar/l print '%6.3f %6.3f %6.3f %6.3f' % (equat.min(), equat.mean(), equat.max(), np.sqrt(equat.var())) print '%6.3f %6.3f %6.3f %6.3f' % (polar.min(), polar.mean(), polar.max(), np.sqrt(polar.var())) def spherical_statistics(vertices, north=np.array([0,0,1]), width=0.02): ''' function to evaluate a spherical triangulation by looking at the variability of numbers of vertices in 'vertices' in equatorial bands of width 'width' orthogonal to each point in 'vertices' ''' equatorial_counts = np.array([len(equatorial_zone_vertices(vertices, pole, width=width)) for pole in vertices if np.dot(pole,north) >= 0]) #equatorial_counts = np.bincount(equatorial_counts) #args = np.where(equatorial_counts>0) #print zip(list(args[0]), equatorial_counts[args]) polar_counts = np.array([len(polar_zone_vertices(vertices, pole, width=width)) for pole in vertices if np.dot(pole,north) >= 0]) #unique_counts = np.sort(np.array(list(set(equatorial_counts)))) #polar_counts = np.bincount(polar_counts) #counts_tokens = [(uc, bin_counts[uc]) for uc in bin_counts if ] #args = np.where(polar_counts>0) #print '(number, frequency):', zip(unique_counts,tokens) #print '(number, frequency):', counts_tokens #print zip(args, bin_counts[args]) #print zip(list(args[0]), polar_counts[args]) return equatorial_counts, polar_counts def spherical_proportion(zone_width): # assuming radius is 1: (2*np.pi*zone_width)/(4*np.pi) # 0 <= zone_width <= 2 return zone_width/2. def angle_for_zone(zone_width): return np.arcsin(zone_width/2.) def coarseness(faces): faces = np.asarray(faces) coarseness = 0.0 for face in faces: a, b, c = face coarse = np.max(coarse, geom.circumradius(a,b,c)) return coarse dipy-0.10.1/scratch/very_scratch/tractography_clustering_new_fos.py000066400000000000000000000053411263041327500257270ustar00rootroot00000000000000import time import numpy as np from nibabel import trackvis as tv from dipy.core import track_metrics as tm from dipy.core import track_performance as pf from fos.core.scene import Scene from fos.core.actors import Actor from fos.core.plots import Plot from fos.core.tracks import Tracks #fname='/home/eg01/Data_Backup/Data/PBC/pbc2009icdm/brain1/brain1_scan1_fiber_track_mni.trk' fname='/home/eg01/Data_Backup/Data/PBC/pbc2009icdm/brain2/brain2_scan1_fiber_track_mni.trk' #fname='/home/eg309/Data/PBC/pbc2009icdm/brain1/brain1_scan1_fiber_track_mni.trk' opacity=0.5 print 'Loading file...' streams,hdr=tv.read(fname) print 'Copying tracks...' T=[i[0] for i in streams] T=T[:len(T)/5] #T=T[:1000] print 'Representing tracks using only 3 pts...' tracks=[tm.downsample(t,3) for t in T] print 'Deleting unnecessary data...' del streams,hdr print 'Local Skeleton Clustering...' now=time.clock() C=pf.local_skeleton_clustering(tracks,d_thr=20) print 'Done in', time.clock()-now,'s.' print 'Reducing the number of points...' T=[pf.approx_polygon_track(t) for t in T] print 'Showing initial dataset.' #r=fos.ren() #fos.add(r,fos.line(T,fos.white,opacity=0.1)) #fos.show(r) data=T colors =[np.tile(np.array([1,1,1,opacity],'f'),(len(t),1)) for t in T] t=Tracks(data,colors,line_width=1.) t.position=(-100,0,0) print 'Showing dataset after clustering.' print 'Calculating skeletal track for every bundle.' skeletals=[] colors2 = len(data)*[None] colors_sk = []#len(C.keys())*[None] for c in C: color=np.random.rand(3) r,g,b = color bundle=[] for i in C[c]['indices']: colors2[i]=np.tile(np.array([r,g,b,opacity],'f'),(len(data[i]),1)) bundle.append(data[i]) bi=pf.most_similar_track_mam(bundle)[0] C[c]['skeletal']=bundle[bi] if len(C[c]['indices'])>100 and tm.length(bundle[bi])>30.: colors_sk.append( np.tile(np.array([r,g,b,opacity],'f'),(len(bundle[bi]),1)) ) skeletals.append(bundle[bi]) print 'len_data', len(data) print 'len_skeletals', len(skeletals) print 'len_colors2', len(colors2) print 'len_colors_sk', len(colors_sk) t2=Tracks(data,colors2,line_width=1.) t2.position=(100,0,0) sk=Tracks(skeletals,colors_sk,line_width=3.) sk.position=(0,0,0) slot={0:{'actor':t,'slot':(0, 800000)}, 1:{'actor':t2,'slot':(0, 800000)}, 2:{'actor':sk,'slot':(0, 800000)}} Scene(Plot(slot)).run() print 'Some statistics about the clusters' lens=[len(C[c]['indices']) for c in C] print 'max ',max(lens), 'min ',min(lens) print 'singletons ',lens.count(1) print 'doubletons ',lens.count(2) print 'tripletons ',lens.count(3) ''' Next Level 12: cluster0=[T[t] for t in C[0]['indices']] 13: pf.most_similar_track_mam(cluster0) ''' dipy-0.10.1/scratch/very_scratch/tractography_clustering_using_larch.py000066400000000000000000000026241263041327500265660ustar00rootroot00000000000000import time import os import numpy as np from nibabel import trackvis as tv from dipy.viz import fos from dipy.io import pickles as pkl from dipy.core import track_learning as tl from dipy.core import track_performance as pf from dipy.core import track_metrics as tm fname='/home/eg01/Data/PBC/pbc2009icdm/brain1/brain1_scan1_fiber_track_mni.trk' C_fname='/tmp/larch_tree.pkl' appr_fname='/tmp/larch_tracks.trk' print 'Loading trackvis file...' streams,hdr=tv.read(fname) print 'Copying tracks...' tracks=[i[0] for i in streams] #tracks=tracks[:1000] #print 'Deleting unnecessary data...' del streams#,hdr if not os.path.isfile(C_fname): print 'Starting LARCH ...' tim=time.clock() C,atracks=tl.larch(tracks,[50.**2,20.**2,5.**2],True,True) #tracks=[tm.downsample(t,3) for t in tracks] #C=pf.local_skeleton_clustering(tracks,20.) print 'Done in total of ',time.clock()-tim,'seconds.' print 'Saving result...' pkl.save_pickle(C_fname,C) streams=[(i,None,None)for i in atracks] tv.write(appr_fname,streams,hdr) else: print 'Loading result...' C=pkl.load_pickle(C_fname) skel=[] for c in C: skel.append(C[c]['repz']) print 'Showing dataset after clustering...' r=fos.ren() fos.clear(r) colors=np.zeros((len(skel),3)) for (i,s) in enumerate(skel): color=np.random.rand(1,3) colors[i]=color fos.add(r,fos.line(skel,colors,opacity=1)) fos.show(r) dipy-0.10.1/scratch/very_scratch/warptalk.py000066400000000000000000000274131263041327500210720ustar00rootroot00000000000000import numpy as np import nibabel as nib import numpy.linalg as npl from dipy.io.dpy import Dpy def flirt2aff(mat, in_img, ref_img): """ Transform from `in_img` voxels to `ref_img` voxels given `matfile` Parameters ---------- matfile : (4,4) array contents (as array) of output ``-omat`` transformation file from flirt in_img : img image passed (as filename) to flirt as ``-in`` image ref_img : img image passed (as filename) to flirt as ``-ref`` image Returns ------- aff : (4,4) array Transform from voxel coordinates in ``in_img`` to voxel coordinates in ``ref_img`` """ in_hdr = in_img.get_header() ref_hdr = ref_img.get_header() # get_zooms gets the positive voxel sizes as returned in the header in_zoomer = np.diag(in_hdr.get_zooms() + (1,)) ref_zoomer = np.diag(ref_hdr.get_zooms() + (1,)) # The in_img voxels to ref_img voxels as recorded in the current affines current_in2ref = np.dot(ref_img.get_affine(), in_img.get_affine()) if npl.det(current_in2ref) < 0: raise ValueError('Negative determinant to current affine mapping - bailing out') return np.dot(npl.inv(ref_zoomer), np.dot(mat, in_zoomer)) def flirt2aff_files(matfile, in_fname, ref_fname): """ Map from `in_fname` image voxels to `ref_fname` voxels given `matfile` Parameters ---------- matfile : str filename of output ``-omat`` transformation file from flirt in_fname : str filename for image passed to flirt as ``-in`` image ref_fname : str filename for image passed to flirt as ``-ref`` image Returns ------- aff : (4,4) array Transform from voxel coordinates in image for ``in_fname`` to voxel coordinates in image for ``ref_fname`` """ mat = np.loadtxt(matfile) in_img = nib.load(in_fname) ref_img = nib.load(ref_fname) return flirt2aff(mat, in_img, ref_img) #d101='/home/eg309/Data/TEST_MR10032/subj_10/101/' d101='/home/eg309/Data/PROC_MR10032/subj_10/101/' ffa=d101+'1312211075232351192010092912092080924175865ep2dadvdiffDSI10125x25x25STs005a001_bet_FA.nii.gz' fdis=d101+'1312211075232351192010092912092080924175865ep2dadvdiffDSI10125x25x25STs005a001_nonlin_displacements.nii.gz' ffareg=d101+'1312211075232351192010092912092080924175865ep2dadvdiffDSI10125x25x25STs005a001_bet_FA_reg.nii.gz' flirtaff=d101+'1312211075232351192010092912092080924175865ep2dadvdiffDSI10125x25x25STs005a001_affine_transf.mat' ftrack=d101+'1312211075232351192010092912092080924175865ep2dadvdiffDSI10125x25x25STs005a001_QA_native.dpy' froi='/home/eg309/Data/PROC_MR10032/NIFTI_ROIs/AnatomicalROIs/ROI01_GCC.nii' froi2='/home/eg309/Data/PROC_MR10032/NIFTI_ROIs/AnatomicalROIs/ROI02_BCC.nii' #froi3='/home/eg309/Data/PROC_MR10032/NIFTI_ROIs/AnatomicalROIs/ROI03_SCC.nii' froi3='/home/eg309/Downloads/SCC_analyze.nii' ref_fname = '/usr/share/fsl/data/standard/FMRIB58_FA_1mm.nii.gz' dpr=Dpy(ftrack,'r') print dpr.track_no T=dpr.read_indexed([0,1,2,3,2000,1000000]) for t in T: print t.shape dpr.close() track=T[4] im2im = flirt2aff_files(flirtaff, ffa, ref_fname) #ref_name to be replaced by ffareg print im2im from dipy.core.track_metrics import length print len(track) print length(track) #ntrack=np.dot(im2im[:3,:3],track.T)+im2im[:3,[3]] ntrack=np.dot(track,im2im[:3,:3].T)+im2im[:3,3] print length(ntrack) #print length(ntrack.T) print length(ntrack)/length(track) #print npl.det(im2im)**(1/3.) disimg=nib.load(fdis) ddata=disimg.get_data() daff=disimg.get_affine() from scipy.ndimage.interpolation import map_coordinates as mc di=ddata[:,:,:,0] dj=ddata[:,:,:,1] dk=ddata[:,:,:,2] mci=mc(di,ntrack.T) mcj=mc(dj,ntrack.T) mck=mc(dk,ntrack.T) wtrack=ntrack+np.vstack((mci,mcj,mck)).T np.set_printoptions(2) print np.hstack((wtrack,ntrack)) print length(wtrack),length(ntrack),length(track) imgroi=nib.load(froi) roidata=imgroi.get_data() roiaff=imgroi.get_affine() roiaff=daff I=np.array(np.where(roidata>0)).T wI=np.dot(roiaff[:3,:3],I.T).T+roiaff[:3,3] print wI.shape wI=wI.astype('f4') imgroi2=nib.load(froi2) roidata2=imgroi2.get_data() roiaff2=imgroi2.get_affine() roiaff2=daff I2=np.array(np.where(roidata2>0)).T wI2=np.dot(roiaff2[:3,:3],I2.T).T+roiaff2[:3,3] print wI2.shape wI2=wI2.astype('f4') imgroi3=nib.load(froi3) roidata3=imgroi3.get_data() roiaff3=imgroi3.get_affine() roiaff3=daff I3=np.array(np.where(roidata3>0)).T wI3=np.dot(roiaff3[:3,:3],I3.T).T+roiaff3[:3,3] print wI3.shape wI3=wI3.astype('f4') dpr=Dpy(ftrack,'r') print dpr.track_no from time import time t1=time() iT=np.random.randint(0,dpr.track_no,10*10**2) T=dpr.read_indexed(iT) dpr.close() t2=time() print t2-t1,len(T) Tfinal=[] ''' for (i,track) in enumerate(T): print i ntrack=np.dot(track,im2im[:3,:3].T)+im2im[:3,3] mci=mc(di,ntrack.T) mcj=mc(dj,ntrack.T) mck=mc(dk,ntrack.T) wtrack=ntrack+np.vstack((mci,mcj,mck)).T Tfinal.append(np.dot(wtrack,daff[:3,:3].T)+daff[:3,3]) ''' lengths=[len(t) for t in T] lengths.insert(0,0) offsets=np.cumsum(lengths) caboodle=np.concatenate(T,axis=0) ntrack=np.dot(caboodle,im2im[:3,:3].T)+im2im[:3,3] mci=mc(di,ntrack.T,order=1) mcj=mc(dj,ntrack.T,order=1) mck=mc(dk,ntrack.T,order=1) wtrack=ntrack+np.vstack((mci,mcj,mck)).T caboodlew=np.dot(wtrack,daff[:3,:3].T)+daff[:3,3] #caboodlew=np.dot(wtrack,roiaff[:3,:3].T)+roiaff[:3,3] Tfinal=[] for i in range(len(offsets)-1): s=offsets[i] e=offsets[i+1] Tfinal.append(caboodlew[s:e]) #ref_fname = '/usr/share/fsl/data/standard/FMRIB58_FA_1mm.nii.gz' ref_fname = '/usr/share/fsl/data/standard/FMRIB58_FA-skeleton_1mm.nii.gz' imgref=nib.load(ref_fname) refdata=imgref.get_data() refaff=imgref.get_affine() ''' refI=np.array(np.where(refdata>5000)).T wrefI=np.dot(refaff[:3,:3],refI.T).T+refaff[:3,3] print wrefI.shape wrefI=wrefI.astype('f4') ''' from dipy.viz import fos froi='/home/eg309/Data/ICBM_Wmpm/ICBM_WMPM.nii' def get_roi(froi,no): imgroi=nib.load(froi) roidata=imgroi.get_data() roiaff=imgroi.get_affine() I=np.array(np.where(roidata==no)).T wI=np.dot(roiaff[:3,:3],I.T).T+roiaff[:3,3] wI=wI.astype('f4') return wI from dipy.viz import fos r=fos.ren() #fos.add(r,fos.point(wI,fos.blue)) #fos.add(r,fos.point(wI2,fos.yellow)) #fos.add(r,fos.point(wI3,fos.green)) #fos.add(r,fos.point(wrefI,fos.cyan)) #fos.add(r,fos.point(wrefI,fos.yellow)) fos.add(r,fos.point(get_roi(froi,3),fos.blue)) fos.add(r,fos.point(get_roi(froi,4),fos.yellow)) fos.add(r,fos.point(get_roi(froi,5),fos.green)) fos.add(r,fos.line(Tfinal,fos.red)) fos.show(r) print roiaff print roiaff2 print roiaff3 print daff ##load roi image #roiimg=ni.load(froi) #roidata=roiimg.get_data() #roiaff=roiimg.get_affine() #print 'roiaff',roiaff,roidata.shape # ##load FA image #faimg=ni.load(ffa) #data=faimg.get_data() #aff=faimg.get_affine() ##aff[0,:]=-aff[0,:] ##aff[0,0]=-aff[0,0] ##aff=np.array([[2.5,0,0,-2.5*48],[0,2.5,0,-2.5*39],[0,0,2.5,-2.5*23],[0,0,0,1]]) # #print 'aff',aff, data.shape # ##cube = np.array([v for v in np.ndindex(5,5,5)]).T + np.array([[47,47,27]]).T #cube = np.array([v for v in np.ndindex(data.shape[0],data.shape[1],data.shape[2])]).T # ##from image space(image coordinates) to native space (world coordinates) #cube_native = np.dot(aff[:3,:3],cube)+aff[:3,[3]] ##print cube_native.T # ##load flirt affine #laff=np.loadtxt(flirtaff) ##laff[0,:]=-laff[0,:] ##laff=np.linalg.inv(laff) ##laff[:3,3]=0 #print 'laff',laff ##print 'inverting laff' # # ##from native space(world coordinates) to mni space(world coordinates) #cube_mni = np.dot(laff[:3,:3],cube_native)+laff[:3,[3]] ##print cube_mni.T # #dis=ni.load(fdis) #disdata=dis.get_data() #mniaff=dis.get_affine() #print 'mniaff',mniaff # ##invert disaff #mniaffinv= np.linalg.inv(mniaff) ##from mni space(world coordinates) to image mni space (image coordinates) #cube_mni_grid = np.dot(mniaffinv[:3,:3],cube_mni)+mniaffinv[:3,[3]] #print cube_mni_grid.shape # #cube_mni_grid_nearest=np.round(cube_mni_grid).astype(np.int) # #print np.max(cube_mni_grid[0,:]) #print np.max(cube_mni_grid[1,:]) #print np.max(cube_mni_grid[2,:]) # #print np.max(cube_mni_grid_nearest[0,:]) #print np.max(cube_mni_grid_nearest[1,:]) #print np.max(cube_mni_grid_nearest[2,:]) # #d0,d1,d2,junk = disdata.shape # #cube_mni_grid_nearest[np.where(cube_mni_grid_nearest<0)]=0 #cube_mni_grid_nearest[np.where(cube_mni_grid_nearest>181)]=0 # #n0=cube_mni_grid_nearest[0,:] #n1=cube_mni_grid_nearest[1,:] #n2=cube_mni_grid_nearest[2,:] ''' n0 = np.min(np.max(cube_mni_grid_nearest[0,:],0),d0) n1 = np.min(np.max(cube_mni_grid_nearest[1,:],0),d1) n2 = np.min(np.max(cube_mni_grid_nearest[2,:],0),d2) ''' #cube_mni_data=np.zeros(disdata.shape[:-1],dtype=np.float32) #cube_mni_data[n0,n1,n2]=1 ''' D=disdata[n0,n1,n2] ''' #from dipy.viz import fos #r=fos.ren() ##fos.add(r,fos.point(cube.T,fos.red)) ##fos.add(r,fos.point(cube_native.T,fos.yellow)) #fos.add(r,fos.point(cube_mni.T,fos.green)) #fos.add(r,fos.sphere(np.array([0,0,0]),10)) # ##fos.add(r,fos.point(cube_mni_grid_nearest.T,fos.red)) ###fos.add(r,fos.point(cube.T,fos.green)) ###fos.add(r,fos.point(cube_mni_grid.T,fos.red)) ###fos.add(r,fos.point(cube.T,fos.yellow)) #fos.show(r) # #def map_to_index(grid,shape): # x=grid[0,:] # y=grid[1,:] # z=grid[2,:] # xmin=x.min() # ymin=y.min() # zmin=z.min() # xmax=x.max() # ymax=y.max() # zmax=z.max() # i=(x-xmin)/(xmax-xmin)*shape[0] # j=(y-ymin)/(ymax-ymin)*shape[1] # k=(z-zmin)/(zmax-zmin)*shape[2] # return i,j,k # #i,j,k=map_to_index(cube_mni_grid,(182,218,182)) # #from scipy.ndimage import map_coordinates #FA_MNI_IMG = map_coordinates(data,np.c_[i, j, k].T) #from dipy.viz import fos #r=fos.ren() #fos.add(r,fos.point(cube_mni.T,fos.blue)) #fos.add(r,fos.point(cube_native.T,fos.green)) #fos.add(r,fos.point(cube_mni_grid.T,fos.red)) #fos.add(r,fos.point(cube.T,fos.yellow)) #fos.show(r) ###corner = cube[:,:].astype(np.int).T #print corner ###print data[corner[:,0:27],corner[:,0:27],corner[:,0:27]] #def func(x,y): # return (x+y)*np.exp(-5.*(x**2+y**2)) # #def map_to_index(x,y,bounds,N,M): # xmin,xmax,ymin,ymax=bounds # i1=(x-xmin)/(xmax-xmin)*N # i2=(y-ymin)/(ymax-ymin)*M # return i1,i2 # #x,y=np.mgrid[-1:1:10j,-1:1:10j] #fvals=func(x,y) # #xn,yn=np.mgrid[-1:1:100j,-1:1:100j] #i1,i2 = map_to_index(xn,yn,[-1,1,-1,1],*x.shape) # #from scipy.ndimage import map_coordinates # #fn = map_coordinates(fvals,[i1,i2]) #true = func(xn,yn) def test_flirt2aff(): from os.path import join as pjoin from nose.tools import assert_true import scipy.ndimage as ndi import nibabel as nib ''' matfile = pjoin('fa_data', '1312211075232351192010092912092080924175865ep2dadvdiffDSI10125x25x25STs005a001_affine_transf.mat') in_fname = pjoin('fa_data', '1312211075232351192010092912092080924175865ep2dadvdiffDSI10125x25x25STs005a001_bet_FA.nii.gz') ''' matfile=flirtaff in_fname = ffa ref_fname = '/usr/share/fsl/data/standard/FMRIB58_FA_1mm.nii.gz' res = flirt2aff_files(matfile, in_fname, ref_fname) mat = np.loadtxt(matfile) in_img = nib.load(in_fname) ref_img = nib.load(ref_fname) assert_true(np.all(res == flirt2aff(mat, in_img, ref_img))) # mm to mm transform mm_in2mm_ref = np.dot(ref_img.get_affine(), np.dot(res, npl.inv(in_img.get_affine()))) # make new in image thus transformed in_data = in_img.get_data() ires = npl.inv(res) in_data[np.isnan(in_data)] = 0 resliced_data = ndi.affine_transform(in_data, ires[:3,:3], ires[:3,3], ref_img.shape) resliced_img = nib.Nifti1Image(resliced_data, ref_img.get_affine()) nib.save(resliced_img, 'test.nii') dipy-0.10.1/setup.py000077500000000000000000000234541263041327500142660ustar00rootroot00000000000000#!/usr/bin/env python ''' Installation script for dipy package ''' import numpy as np import os import sys from copy import deepcopy from os.path import join as pjoin, dirname from glob import glob # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly # update it when the contents of directories change. if os.path.exists('MANIFEST'): os.remove('MANIFEST') # Get version and release info, which is all stored in dipy/info.py ver_file = os.path.join('dipy', 'info.py') # Use exec for compabibility with Python 3 exec(open(ver_file).read()) # force_setuptools can be set from the setup_egg.py script if not 'force_setuptools' in globals(): # For some commands, always use setuptools if len(set(('develop', 'bdist_egg', 'bdist_rpm', 'bdist', 'bdist_dumb', 'bdist_mpkg', 'bdist_wheel', 'install_egg_info', 'egg_info', 'easy_install')).intersection(sys.argv)) > 0: force_setuptools = True else: force_setuptools = False if force_setuptools: import setuptools # We may just have imported setuptools, or we may have been exec'd from a # setuptools environment like pip if 'setuptools' in sys.modules: # Try to preempt setuptools monkeypatching of Extension handling when Pyrex # is missing. Otherwise the monkeypatched Extension will change .pyx # filenames to .c filenames, and we probably don't have the .c files. sys.path.insert(0, pjoin(dirname(__file__), 'fake_pyrex')) # Set setuptools extra arguments nibabel_spec = 'nibabel>=' + NIBABEL_MIN_VERSION extra_setuptools_args = dict( tests_require=['nose'], test_suite='nose.collector', zip_safe=False, extras_require = dict( doc=['Sphinx>=1.0'], test=['nose>=0.10.1']), install_requires = [nibabel_spec]) # I removed numpy and scipy from install requires because easy_install seems # to want to fetch these if they are already installed, meaning of course # that there's a long fragile and unnecessary compile before the install # finishes. # We need setuptools install command because we're going to override it # further down. Using distutils install command causes some confusion, due # to the Pyrex / setuptools hack above (force_setuptools) from setuptools.command import install # If running setuptools and nibabel is not installed, we have to force # setuptools to install nibabel locally for the script to continue. This # hack is from # http://stackoverflow.com/questions/12060925/best-way-to-share-code-across-several-setup-py-scripts # with thanks from setuptools.dist import Distribution Distribution(dict(setup_requires=nibabel_spec)) else: extra_setuptools_args = {} from distutils.command import install # Import distutils _after_ potential setuptools import above, and after removing # MANIFEST from distutils.core import setup from distutils.extension import Extension from distutils.command import build_py, build_ext from cythexts import cyproc_exts, get_pyx_sdist, derror_maker from setup_helpers import install_scripts_bat, add_flag_checking # Define extensions EXTS = [] # We use some defs from npymath, but we don't want to link against npymath lib ext_kwargs = {'include_dirs':[np.get_include()]} ext_kwargs['include_dirs'].append('src') for modulename, other_sources, language in ( ('dipy.reconst.peak_direction_getter', [], 'c'), ('dipy.reconst.recspeed', [], 'c'), ('dipy.reconst.vec_val_sum', [], 'c'), ('dipy.reconst.quick_squash', [], 'c'), ('dipy.tracking.distances', [], 'c'), ('dipy.tracking.streamlinespeed', [], 'c'), ('dipy.tracking.local.localtrack', [], 'c'), ('dipy.tracking.local.direction_getter', [], 'c'), ('dipy.tracking.local.tissue_classifier', [], 'c'), ('dipy.tracking.local.interpolation', [], 'c'), ('dipy.tracking.vox2track', [], 'c'), ('dipy.tracking.propspeed', [], 'c'), ('dipy.segment.cythonutils', [], 'c'), ('dipy.segment.featurespeed', [], 'c'), ('dipy.segment.metricspeed', [], 'c'), ('dipy.segment.clusteringspeed', [], 'c'), ('dipy.segment.clustering_algorithms', [], 'c'), ('dipy.denoise.denspeed', [], 'c'), ('dipy.align.vector_fields', [], 'c'), ('dipy.align.sumsqdiff', [], 'c'), ('dipy.align.expectmax', [], 'c'), ('dipy.align.crosscorr', [], 'c'), ('dipy.align.bundlemin', [], 'c'), ('dipy.align.transforms', [], 'c'), ('dipy.align.parzenhist', [], 'c')): pyx_src = pjoin(*modulename.split('.')) + '.pyx' EXTS.append(Extension(modulename, [pyx_src] + other_sources, language=language, **deepcopy(ext_kwargs))) # deepcopy lists # Do our own build and install time dependency checking. setup.py gets called in # many different ways, and may be called just to collect information (egg_info). # We need to set up tripwires to raise errors when actually doing things, like # building, rather than unconditionally in the setup.py import or exec # We may make tripwire versions of build_ext, build_py, install try: from nisext.sexts import package_check, get_comrec_build except ImportError: # No nibabel msg = ('Need nisext package from nibabel installation' ' - please install nibabel first') pybuilder = derror_maker(build_py.build_py, msg) extbuilder = derror_maker(build_ext.build_ext, msg) def package_check(*args, **kwargs): raise RuntimeError(msg + " or try 'python setup_egg.py install'") else: # We have nibabel pybuilder = get_comrec_build('dipy') # Cython is a dependency for building extensions, iff we don't have stamped # up pyx and c files. build_ext = cyproc_exts(EXTS, CYTHON_MIN_VERSION, 'pyx-stamps') # Add openmp flags if they work simple_test_c = """int main(int argc, char** argv) { return(0); }""" omp_test_c = """#include int main(int argc, char** argv) { return(0); }""" extbuilder = add_flag_checking( build_ext, [[['/arch:SSE2'], [], simple_test_c, 'USING_VC_SSE2'], [['-msse2', '-mfpmath=sse'], [], simple_test_c, 'USING_GCC_SSE2'], [['-fopenmp'], ['-fopenmp'], omp_test_c, 'HAVE_OPENMP']], 'dipy') # Installer that checks for install-time dependencies class installer(install.install): def run(self): package_check('numpy', NUMPY_MIN_VERSION) package_check('scipy', SCIPY_MIN_VERSION) package_check('nibabel', NIBABEL_MIN_VERSION) install.install.run(self) cmdclass = dict( build_py=pybuilder, build_ext=extbuilder, install=installer, install_scripts=install_scripts_bat, sdist=get_pyx_sdist(include_dirs=['src'])) def main(**extra_args): setup(name=NAME, maintainer=MAINTAINER, maintainer_email=MAINTAINER_EMAIL, description=DESCRIPTION, long_description=LONG_DESCRIPTION, url=URL, download_url=DOWNLOAD_URL, license=LICENSE, classifiers=CLASSIFIERS, author=AUTHOR, author_email=AUTHOR_EMAIL, platforms=PLATFORMS, version=VERSION, requires=REQUIRES, provides=PROVIDES, packages = ['dipy', 'dipy.tests', 'dipy.align', 'dipy.align.tests', 'dipy.core', 'dipy.core.tests', 'dipy.direction', 'dipy.direction.tests', 'dipy.tracking', 'dipy.tracking.local', 'dipy.tracking.local.tests', 'dipy.tracking.tests', 'dipy.tracking.benchmarks', 'dipy.reconst', 'dipy.reconst.benchmarks', 'dipy.reconst.tests', 'dipy.io', 'dipy.io.tests', 'dipy.viz', 'dipy.viz.tests', 'dipy.testing', 'dipy.testing.tests', 'dipy.boots', 'dipy.data', 'dipy.utils', 'dipy.utils.tests', 'dipy.fixes', 'dipy.external', 'dipy.external.tests', 'dipy.segment', 'dipy.segment.benchmarks', 'dipy.segment.tests', 'dipy.sims', 'dipy.sims.tests', 'dipy.denoise', 'dipy.denoise.tests'], ext_modules = EXTS, # The package_data spec has no effect for me (on python 2.6) -- even # changing to data_files doesn't get this stuff included in the source # distribution -- not sure if it has something to do with the magic # above, but distutils is surely the worst piece of code in all of # python -- duplicating things into MANIFEST.in but this is admittedly # only a workaround to get things started -- not a solution package_data = {'dipy': [pjoin('data', 'files', '*') ]}, data_files=[('share/doc/dipy/examples', glob(pjoin('doc','examples','*.py')))], scripts = [pjoin('bin', 'dipy_peak_extraction'), pjoin('bin', 'dipy_fit_tensor'), pjoin('bin', 'dipy_sh_estimate'), pjoin('bin', 'dipy_quickbundles')], cmdclass = cmdclass, **extra_args ) #simple way to test what setup will do #python setup.py install --prefix=/tmp if __name__ == "__main__": main(**extra_setuptools_args) dipy-0.10.1/setup_egg.py000066400000000000000000000006051263041327500150760ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: """Wrapper to run setup.py using setuptools.""" if __name__ == '__main__': execfile('setup.py', dict(__name__='__main__', __file__='setup.py', # needed in setup.py force_setuptools=True)) dipy-0.10.1/setup_helpers.py000066400000000000000000000202741263041327500160020ustar00rootroot00000000000000''' Distutils / setuptools helpers ''' import os from os.path import join as pjoin, split as psplit, splitext, dirname, exists import tempfile import shutil from distutils.command.install_scripts import install_scripts from distutils.errors import CompileError, LinkError from distutils import log BAT_TEMPLATE = \ r"""@echo off REM wrapper to use shebang first line of {FNAME} set mypath=%~dp0 set pyscript="%mypath%{FNAME}" set /p line1=<%pyscript% if "%line1:~0,2%" == "#!" (goto :goodstart) echo First line of %pyscript% does not start with "#!" exit /b 1 :goodstart set py_exe=%line1:~2% REM quote exe in case of spaces in path name set py_exe="%py_exe%" call %py_exe% %pyscript% %* """ # Path of file to which to write C conditional vars from build-time checks CONFIG_H = pjoin('build', 'config.h') # File name (no directory) to which to write Python vars from build-time checks CONFIG_PY = '__config__.py' # Directory to which to write libraries for building LIB_DIR_TMP = pjoin('build', 'extra_libs') class install_scripts_bat(install_scripts): """ Make scripts executable on Windows Scripts are bare file names without extension on Unix, fitting (for example) Debian rules. They identify as python scripts with the usual ``#!`` first line. Unix recognizes and uses this first "shebang" line, but Windows does not. So, on Windows only we add a ``.bat`` wrapper of name ``bare_script_name.bat`` to call ``bare_script_name`` using the python interpreter from the #! first line of the script. Notes ----- See discussion at http://matthew-brett.github.com/pydagogue/installing_scripts.html and example at git://github.com/matthew-brett/myscripter.git for more background. """ def run(self): install_scripts.run(self) if not os.name == "nt": return for filepath in self.get_outputs(): # If we can find an executable name in the #! top line of the script # file, make .bat wrapper for script. with open(filepath, 'rt') as fobj: first_line = fobj.readline() if not (first_line.startswith('#!') and 'python' in first_line.lower()): log.info("No #!python executable found, skipping .bat " "wrapper") continue pth, fname = psplit(filepath) froot, ext = splitext(fname) bat_file = pjoin(pth, froot + '.bat') bat_contents = BAT_TEMPLATE.replace('{FNAME}', fname) log.info("Making %s wrapper for %s" % (bat_file, filepath)) if self.dry_run: continue with open(bat_file, 'wt') as fobj: fobj.write(bat_contents) def add_flag_checking(build_ext_class, flag_defines, top_package_dir=''): """ Override input `build_ext_class` to check compiler `flag_defines` Parameters ---------- build_ext_class : class Class implementing ``distutils.command.build_ext.build_ext`` interface, with a ``build_extensions`` method. flag_defines : sequence A sequence of elements, where the elements are sequences of length 4 consisting of (``compile_flags``, ``link_flags``, ``code``, ``defvar``). ``compile_flags`` is a sequence of compiler flags; ``link_flags`` is a sequence of linker flags. We check ``compile_flags`` to see whether a C source string ``code`` will compile, and ``link_flags`` to see whether the resulting object file will link. If both compile and link works, we add ``compile_flags`` to ``extra_compile_args`` and ``link_flags`` to ``extra_link_args`` of each extension when we build the extensions. If ``defvar`` is not None, it is the name of C variable to be defined in ``build/config.h`` with 1 if the combination of (``compile_flags``, ``link_flags``, ``code``) will compile and link, 0 otherwise. If None, do not write variable. top_package_dir : str String giving name of top-level package, for writing Python file containing configuration variables. If empty, do not write this file. Variables written are the same as the Cython variables generated via the `flag_defines` setting. Returns ------- checker_class : class A class with similar interface to ``distutils.command.build_ext.build_ext``, that adds all working ``compile_flags`` values to the ``extra_compile_args`` and working ``link_flags`` to ``extra_link_args`` attributes of extensions, before compiling. """ class Checker(build_ext_class): flag_defs = tuple(flag_defines) def can_compile_link(self, compile_flags, link_flags, code): cc = self.compiler fname = 'test.c' cwd = os.getcwd() tmpdir = tempfile.mkdtemp() try: os.chdir(tmpdir) with open(fname, 'wt') as fobj: fobj.write(code) try: objects = cc.compile([fname], extra_postargs=compile_flags) except CompileError: return False try: # Link shared lib rather then executable to avoid # http://bugs.python.org/issue4431 with MSVC 10+ cc.link_shared_lib(objects, "testlib", extra_postargs=link_flags) except (LinkError, TypeError): return False finally: os.chdir(cwd) shutil.rmtree(tmpdir) return True def build_extensions(self): """ Hook into extension building to check compiler flags """ def_vars = [] good_compile_flags = [] good_link_flags = [] config_dir = dirname(CONFIG_H) for compile_flags, link_flags, code, def_var in self.flag_defs: compile_flags = list(compile_flags) link_flags = list(link_flags) flags_good = self.can_compile_link(compile_flags, link_flags, code) if def_var: def_vars.append((def_var, flags_good)) if flags_good: good_compile_flags += compile_flags good_link_flags += link_flags else: log.warn("Flags {0} omitted because of compile or link " "error".format(compile_flags + link_flags)) if def_vars: # write config.h file if not exists(config_dir): self.mkpath(config_dir) with open(CONFIG_H, 'wt') as fobj: fobj.write('/* Automatically generated; do not edit\n') fobj.write(' C defines from build-time checks */\n') for v_name, v_value in def_vars: fobj.write('int {0} = {1};\n'.format( v_name, 1 if v_value else 0)) if def_vars and top_package_dir: # write __config__.py file config_py_dir = (top_package_dir if self.inplace else pjoin(self.build_lib, top_package_dir)) if not exists(config_py_dir): self.mkpath(config_py_dir) config_py = pjoin(config_py_dir, CONFIG_PY) with open(config_py, 'wt') as fobj: fobj.write('# Automatically generated; do not edit\n') fobj.write('# Variables from compile checks\n') for v_name, v_value in def_vars: fobj.write('{0} = {1}\n'.format(v_name, v_value)) if def_vars or good_compile_flags or good_link_flags: for ext in self.extensions: ext.extra_compile_args += good_compile_flags ext.extra_link_args += good_link_flags if def_vars: ext.include_dirs.append(config_dir) build_ext_class.build_extensions(self) return Checker dipy-0.10.1/src/000077500000000000000000000000001263041327500133305ustar00rootroot00000000000000dipy-0.10.1/src/conditional_omp.h000066400000000000000000000015301263041327500166560ustar00rootroot00000000000000/* Header file to conditionally wrap omp.h defines * * _OPENMP should be defined if omp.h is safe to include */ #if defined(_OPENMP) #include #define have_openmp 1 #else /* These are fake defines to make these symbols valid in the c / pyx file * * All uses of these symbols should to be prefaced with ``if have_openmp``, as * in: * * cdef omp_lock_t lock * if have_openmp: * openmp.omp_init_lock(&lock) * * */ typedef int omp_lock_t; void omp_init_lock(omp_lock_t *lock) {}; void omp_destroy_lock(omp_lock_t *lock) {}; void omp_set_lock(omp_lock_t *lock) {}; void omp_unset_lock(omp_lock_t *lock) {}; int omp_test_lock(omp_lock_t *lock) {}; void omp_set_dynamic(int dynamic_threads) {}; void omp_set_num_threads(int num_threads) {}; int omp_get_num_procs() {}; int omp_get_max_threads() {}; #define have_openmp 0 #endif dipy-0.10.1/src/cythonutils.h000066400000000000000000000001231263041327500160620ustar00rootroot00000000000000// Maximum number of dimension supported by Cython's memoryview #define MAX_NDIM 7 dipy-0.10.1/src/dpy_math.h000066400000000000000000000035611263041327500153130ustar00rootroot00000000000000/* dipy math functions * * To give some platform independence for simple math functions */ #include #include "numpy/npy_math.h" #define DPY_PI NPY_PI /* From numpy npy_math.c.src commit b2f6792d284b0e9383093c30d51ec3a82e8312fd*/ double dpy_log2(double x) { #ifdef HAVE_LOG2 return log2(x); #else return NPY_LOG2E*log(x); #endif } #define dpy_floor(x) floor((double)(x)) double dpy_rint(double x) { #ifdef HAVE_RINT return rint(x); #else double y, r; y = dpy_floor(x); r = x - y; if (r > 0.5) { y += 1.0; } /* Round to nearest even */ if (r == 0.5) { r = y - 2.0*dpy_floor(0.5*y); if (r == 1.0) { y += 1.0; } } return y; #endif } int dpy_signbit(double x) { #ifdef signbit return signbit(x); #else union { double d; short s[4]; int i[2]; } u; u.d = x; #if NPY_SIZEOF_INT == 4 #ifdef WORDS_BIGENDIAN /* defined in pyconfig.h */ return u.i[0] < 0; #else return u.i[1] < 0; #endif #else /* NPY_SIZEOF_INT != 4 */ #ifdef WORDS_BIGENDIAN return u.s[0] < 0; #else return u.s[3] < 0; #endif #endif /* NPY_SIZEOF_INT */ #endif /*NPY_HAVE_DECL_SIGNBIT*/ } #ifndef NPY_HAVE_DECL_ISNAN #define dpy_isnan(x) ((x) != (x)) #else #ifdef _MSC_VER #define dpy_isnan(x) _isnan((x)) #else #define dpy_isnan(x) isnan(x) #endif #endif #ifndef NPY_HAVE_DECL_ISFINITE #ifdef _MSC_VER #define dpy_isfinite(x) _finite((x)) #else #define dpy_isfinite(x) !npy_isnan((x) + (-x)) #endif #else #define dpy_isfinite(x) isfinite((x)) #endif #ifndef NPY_HAVE_DECL_ISINF #define dpy_isinf(x) (!dpy_isfinite(x) && !dpy_isnan(x)) #else #ifdef _MSC_VER #define dpy_isinf(x) (!_finite((x)) && !_isnan((x))) #else #define dpy_isinf(x) isinf((x)) #endif #endif dipy-0.10.1/src/safe_openmp.pxd000066400000000000000000000010631263041327500163410ustar00rootroot00000000000000cdef extern from "conditional_omp.h": ctypedef struct omp_lock_t: pass extern void omp_init_lock(omp_lock_t *) nogil extern void omp_destroy_lock(omp_lock_t *) nogil extern void omp_set_lock(omp_lock_t *) nogil extern void omp_unset_lock(omp_lock_t *) nogil extern int omp_test_lock(omp_lock_t *) nogil extern void omp_set_dynamic(int dynamic_threads) nogil extern void omp_set_num_threads(int num_threads) nogil extern int omp_get_num_procs() nogil extern int omp_get_max_threads() nogil cdef int have_openmp dipy-0.10.1/tools/000077500000000000000000000000001263041327500137015ustar00rootroot00000000000000dipy-0.10.1/tools/build_dmgs.py000077500000000000000000000045241263041327500163740ustar00rootroot00000000000000#!/usr/bin/env python """Script to build dmgs for buildbot builds Example ------- %(prog)s "dipy-dist/dipy*-0.6.0-py*mpkg" Note quotes around the globber first argument to protect it from shell globbing. """ import os from os.path import join as pjoin, isfile, isdir import sys import shutil from glob import glob from functools import partial from subprocess import check_call import warnings from argparse import ArgumentParser, RawDescriptionHelpFormatter my_call = partial(check_call, shell=True) BUILDBOT_LOGIN = "buildbot@nipy.bic.berkeley.edu" BUILDBOT_HTML = "nibotmi/public_html/" def main(): parser = ArgumentParser(description=__doc__, formatter_class=RawDescriptionHelpFormatter) parser.add_argument('globber', type=str, help='glob to serch for build mpkgs') parser.add_argument('--out-path', type=str, default='mpkg-dist', help='path for output files (default="mpkg-dist")', metavar='OUTPATH') parser.add_argument('--clobber', action='store_true', help='Delete OUTPATH if exists') args = parser.parse_args() globber = args.globber out_path = args.out_path address = "{0}:{1}{2}".format(BUILDBOT_LOGIN, BUILDBOT_HTML, globber) if isdir(out_path): if not args.clobber: raise RuntimeError('Path {0} exists and "clobber" not set'.format( out_path)) shutil.rmtree(out_path) os.mkdir(out_path) cwd = os.path.abspath(os.getcwd()) os.chdir(out_path) try: my_call('scp -r {0} .'.format(address)) found_mpkgs = sorted(glob('*.mpkg')) for mpkg in found_mpkgs: pkg_name, ext = os.path.splitext(mpkg) assert ext == '.mpkg' my_call('sudo reown_mpkg {0} root admin'.format(mpkg)) os.mkdir(pkg_name) pkg_moved = pjoin(pkg_name, mpkg) os.rename(mpkg, pkg_moved) readme = pjoin(pkg_moved, 'Contents', 'Resources', 'ReadMe.txt') if isfile(readme): shutil.copy(readme, pkg_name) else: warnings.warn("Could not find readme with " + readme) my_call('sudo hdiutil create {0}.dmg -srcfolder ./{0}/ -ov'.format(pkg_name)) finally: os.chdir(cwd) if __name__ == '__main__': main() dipy-0.10.1/tools/build_release000077500000000000000000000012561263041327500164320ustar00rootroot00000000000000#!/usr/bin/env python """dipy release build script. """ import os from toollib import (c, get_dipydir, compile_tree, cd, pjoin, remove_tree) # Get main dipy dir, this will raise if it doesn't pass some checks dipydir = get_dipydir() cd(dipydir) # Load release info execfile(pjoin('dipy','info.py')) # Check that everything compiles compile_tree() # Cleanup for d in ['build','dist',pjoin('doc','_build'),pjoin('doc','dist')]: if os.path.isdir(d): remove_tree(d) # Build source and binary distros c('./setup.py sdist --formats=gztar,zip') # Build eggs for version in ['2.5', '2.6', '2.7']: cmd='python'+version+' ./setup_egg.py bdist_egg' stat = os.system(cmd) dipy-0.10.1/tools/dipnost000077500000000000000000000023411263041327500153070ustar00rootroot00000000000000#!/usr/bin/env python # vim: ft=python """ Run nosetests for dipy while patching nose Use as ``nosetests`` except we always run the doctests, and we patch the doctest plugin to deal with a bug in nose at least <= 1.2.1 To reproduce a standard test run:: dipnost /path/to/dipy/dipy """ import sys import nose from nose.plugins import doctests # We were getting errors for the extension modules. See: # https://github.com/nose-devs/nose/pull/661 # and # https://github.com/nose-devs/nose/issues/447 def id(self): name = self._dt_test.name filename = self._dt_test.filename if filename is not None: pk = doctests.getpackage(filename) if pk is None: return name if not name.startswith(pk): name = "%s.%s" % (pk, name) return name def prepare_imports(): # Set matplotlib backend as 'agg' try: import matplotlib as mpl except ImportError: pass else: mpl.use('agg') if __name__ == '__main__': # Monkeypatch. Yes, it's nasty doctests.DocTestCase.id = id # Set mpl backend prepare_imports() # Enable doctests argv = sys.argv + ['--with-doctest'] nose.core.TestProgram(argv=argv, addplugins=[doctests.Doctest()]) dipy-0.10.1/tools/doc_mod.py000077500000000000000000000013051263041327500156610ustar00rootroot00000000000000#!/usr/bin/env python """ Make documentation for module Depends on some guessed filepaths Filepaths guessed by importing """ import sys from os.path import join as pjoin, dirname, abspath ROOT_DIR = abspath(pjoin(dirname(__file__), '..')) DOC_SDIR = pjoin(ROOT_DIR, 'doc', 'reference') TEMPLATE = \ """:mod:`%s` ========================= .. automodule:: %s :members: """ def main(): try: mod_name = sys.argv[1] except IndexError: raise OSError('Need module import as input') out_fname = pjoin(DOC_SDIR, mod_name + '.rst') open(out_fname, 'wt').write(TEMPLATE % (mod_name, mod_name)) if __name__ == '__main__': main() dipy-0.10.1/tools/doctest_extmods.py000077500000000000000000000031771263041327500174760ustar00rootroot00000000000000#!/usr/bin/env python """Run doctests in extension modules of Collect extension modules in Run doctests in each extension module Example: %prog dipy """ import sys import os from os.path import dirname, relpath, sep, join as pjoin, splitext, abspath from distutils.sysconfig import get_config_vars import doctest from optparse import OptionParser EXT_EXT = get_config_vars('SO')[0] def get_ext_modules(pkg_name): pkg = __import__(pkg_name, fromlist=['']) pkg_dir = abspath(dirname(pkg.__file__)) # pkg_root = __import__(pkg_name) ext_modules = [] for dirpath, dirnames, filenames in os.walk(pkg_dir): reldir = relpath(dirpath, pkg_dir) if reldir == '.': reldir = '' for filename in filenames: froot, ext = splitext(filename) if ext == EXT_EXT: mod_path = pjoin(reldir, froot) mod_uri = pkg_name + '.' + mod_path.replace(sep, '.') # fromlist=[''] results in submodule being returned, rather than the # top level module. See help(__import__) mod = __import__(mod_uri, fromlist=['']) ext_modules.append(mod) return ext_modules def main(): usage = "usage: %prog [options] \n\n" + __doc__ parser = OptionParser(usage=usage) opts, args = parser.parse_args() if len(args) == 0: parser.print_help() sys.exit(1) mod_name = args[0] mods = get_ext_modules(mod_name) for mod in mods: print("Testing module: " + mod.__name__) doctest.testmod(mod) if __name__ == '__main__': main() dipy-0.10.1/tools/ex2rst000077500000000000000000000222371263041327500150640ustar00rootroot00000000000000#!/usr/bin/env python # # Note before note: dipy copied this file from nitime who ... # Note: this file is copied (possibly with minor modifications) from the # sources of the PyMVPA project - http://pymvpa.org. It remains licensed as # the rest of PyMVPA (MIT license as of October 2010). # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper to automagically generate ReST versions of examples""" __docformat__ = 'restructuredtext' import os import sys import re import glob from optparse import OptionParser def auto_image(line): """Automatically replace generic image markers with ones that have full size (width/height) info, plus a :target: link to the original png, to be used in the html docs. """ img_re = re.compile(r'(\s*)\.\. image::\s*(.*)$') m = img_re.match(line) if m is None: # Not an image declaration, leave the line alone and return unmodified return line # Match means it's an image spec, we rewrite it with extra tags ini_space = m.group(1) lines = [line, ini_space + ' :width: 500\n', #ini_space + ' :height: 350\n' ] fspec = m.group(2) if fspec.endswith('.*'): fspec = fspec.replace('.*', '.png') fspec = fspec.replace('fig/', '../_images/') lines.append(ini_space + (' :target: %s\n' % fspec) ) lines.append('\n') return ''.join(lines) def exfile2rst(filename): """Open a Python script and convert it into an ReST string. """ # output string s = '' # open source file xfile = open(filename) # parser status vars inheader = True indocs = False doc2code = False code2doc = False # an empty line found in the example enables the check for a potentially # indented docstring starting on the next line (as an attempt to exclude # function or class docstrings) last_line_empty = False # indentation of indented docstring, which is removed from the RsT output # since we typically do not want an indentation there. indent_level = 0 for line in xfile: # skip header if inheader and \ not (line.startswith('"""') or line.startswith("'''")): continue # determine end of header if inheader and (line.startswith('"""') or line.startswith("'''")): inheader = False # strip comments and remove trailing whitespace if not indocs and last_line_empty: # first remove leading whitespace and store indent level cleanline = line[:line.find('#')].lstrip() indent_level = len(line) - len(cleanline) - 1 cleanline = cleanline.rstrip() else: cleanline = line[:line.find('#')].rstrip() if not indocs and line == '\n': last_line_empty = True else: last_line_empty = False # if we have something that should go into the text if indocs \ or (cleanline.startswith('"""') or cleanline.startswith("'''")): proc_line = None # handle doc start if not indocs: # guarenteed to start with """ if len(cleanline) > 3 \ and (cleanline.endswith('"""') \ or cleanline.endswith("'''")): # single line doc code2doc = True doc2code = True proc_line = cleanline[3:-3] else: # must be start of multiline block indocs = True code2doc = True # rescue what is left on the line proc_line = cleanline[3:] # strip """ else: # we are already in the docs # handle doc end if cleanline.endswith('"""') or cleanline.endswith("'''"): indocs = False doc2code = True # rescue what is left on the line proc_line = cleanline[:-3] # reset the indentation indent_level = 0 else: # has to be documentation # if the indentation is whitespace remove it, other wise # keep it (accounts for some variation in docstring # styles real_indent = \ indent_level - len(line[:indent_level].lstrip()) proc_line = line[real_indent:] if code2doc: code2doc = False s += '\n' proc_line = auto_image(proc_line) if proc_line: s += proc_line.rstrip() + '\n' else: if doc2code: doc2code = False s += '\n::\n' # has to be code s += ' %s' % line xfile.close() return s def exfile2rstfile(filename, opts): """ """ # doc filename dfilename = os.path.basename(filename[:-3]) + '.rst' # open dest file dfile = open(os.path.join(opts.outdir, os.path.basename(dfilename)), 'w') # place header dfile.write('.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n') # place cross-ref target dfile.write('.. _example_' + dfilename[:-4] + ':\n\n') # write converted ReST dfile.write(exfile2rst(filename)) if opts.sourceref: # write post example see also box msg = """ .. admonition:: Example source code You can download :download:`the full source code of this example <%s>`. This same script is also included in the %s source distribution under the :file:`doc/examples/` directory. """ % (filename, opts.project) dfile.write(msg) dfile.close() def main(): parser = OptionParser( \ usage="%prog [options] [...]", \ version="%prog 0.1", description="""\ %prog converts Python scripts into restructered text (ReST) format suitable for integration into the Sphinx documentation framework. Its key feature is that it extracts stand-alone (unassigned) single, or multiline triple-quote docstrings and moves them out of the code listing so that they are rendered as regular ReST, while at the same time maintaining their position relative to the listing. The detection of such docstrings is exclusively done by parsing the raw code so it is never actually imported into a running Python session. Docstrings have to be written using triple quotes (both forms " and ' are possible). It is recommend that such docstrings are preceded and followed by an empty line. Intended docstring can make use of the full linewidth from the second docstring line on. If the indentation of multiline docstring is maintained for all lines, the respective indentation is removed in the ReST output. The parser algorithm automatically excludes file headers and starts with the first (module-level) docstring instead. """ ) #' # define options parser.add_option('--verbose', action='store_true', dest='verbose', default=False, help='print status messages') parser.add_option('-x', '--exclude', action='append', dest='excluded', help="""\ Use this option to exclude single files from the to be parsed files. This is especially useful to exclude files when parsing complete directories. This option can be specified multiple times. """) parser.add_option('-o', '--outdir', action='store', dest='outdir', type='string', default=None, help="""\ Target directory to write the ReST output to. This is a required option. """) parser.add_option('--no-sourceref', action='store_false', default=True, dest='sourceref', help="""\ If specified, the source reference section will be suppressed. """) parser.add_option('--project', type='string', action='store', default='', dest='project', help="""\ Name of the project that contains the examples. This name is used in the 'seealso' source references. Default: '' """) # parse options (opts, args) = parser.parse_args() # read sys.argv[1:] by default # check for required options if opts.outdir is None: print('Required option -o, --outdir not specified.') sys.exit(1) # build up list of things to parse toparse = [] for t in args: # expand dirs if os.path.isdir(t): # add all python files in that dir toparse += glob.glob(os.path.join(t, '*.py')) else: toparse.append(t) # filter parse list if not opts.excluded is None: toparse = [t for t in toparse if not t in opts.excluded] toparse_list = toparse toparse = set(toparse) if len(toparse) != len(toparse_list): print('Ignoring duplicate parse targets.') if not os.path.exists(opts.outdir): os.mkdir(opts.outdir) # finally process all examples for t in toparse: exfile2rstfile(t, opts) if __name__ == '__main__': main() dipy-0.10.1/tools/github_stats.py000077500000000000000000000147251263041327500167670ustar00rootroot00000000000000#!/usr/bin/env python """Simple tools to query github.com and gather stats about issues. Taken from ipython """ #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- from __future__ import print_function import json import re import sys from datetime import datetime, timedelta from subprocess import check_output from urllib import urlopen #----------------------------------------------------------------------------- # Globals #----------------------------------------------------------------------------- ISO8601 = "%Y-%m-%dT%H:%M:%SZ" PER_PAGE = 100 element_pat = re.compile(r'<(.+?)>') rel_pat = re.compile(r'rel=[\'"](\w+)[\'"]') LAST_RELEASE = datetime(2015, 3, 18) #----------------------------------------------------------------------------- # Functions #----------------------------------------------------------------------------- def parse_link_header(headers): link_s = headers.get('link', '') urls = element_pat.findall(link_s) rels = rel_pat.findall(link_s) d = {} for rel,url in zip(rels, urls): d[rel] = url return d def get_paged_request(url): """get a full list, handling APIv3's paging""" results = [] while url: print("fetching %s" % url, file=sys.stderr) f = urlopen(url) results.extend(json.load(f)) links = parse_link_header(f.headers) url = links.get('next') return results def get_issues(project="nipy/dipy", state="closed", pulls=False): """Get a list of the issues from the Github API.""" which = 'pulls' if pulls else 'issues' url = "https://api.github.com/repos/%s/%s?state=%s&per_page=%i" % (project, which, state, PER_PAGE) return get_paged_request(url) def _parse_datetime(s): """Parse dates in the format returned by the Github API.""" if s: return datetime.strptime(s, ISO8601) else: return datetime.fromtimestamp(0) def issues2dict(issues): """Convert a list of issues to a dict, keyed by issue number.""" idict = {} for i in issues: idict[i['number']] = i return idict def is_pull_request(issue): """Return True if the given issue is a pull request.""" return 'pull_request_url' in issue def issues_closed_since(period=LAST_RELEASE, project="nipy/dipy", pulls=False): """Get all issues closed since a particular point in time. period can either be a datetime object, or a timedelta object. In the latter case, it is used as a time before the present.""" which = 'pulls' if pulls else 'issues' if isinstance(period, timedelta): period = datetime.now() - period url = "https://api.github.com/repos/%s/%s?state=closed&sort=updated&since=%s&per_page=%i" % (project, which, period.strftime(ISO8601), PER_PAGE) allclosed = get_paged_request(url) # allclosed = get_issues(project=project, state='closed', pulls=pulls, since=period) filtered = [i for i in allclosed if _parse_datetime(i['closed_at']) > period] # exclude rejected PRs if pulls: filtered = [ pr for pr in filtered if pr['merged_at'] ] return filtered def sorted_by_field(issues, field='closed_at', reverse=False): """Return a list of issues sorted by closing date date.""" return sorted(issues, key = lambda i:i[field], reverse=reverse) def report(issues, show_urls=False): """Summary report about a list of issues, printing number and title. """ # titles may have unicode in them, so we must encode everything below if show_urls: for i in issues: role = 'ghpull' if 'merged_at' in i else 'ghissue' print('* :%s:`%d`: %s' % (role, i['number'], i['title'].encode('utf-8'))) else: for i in issues: print('* %d: %s' % (i['number'], i['title'].encode('utf-8'))) #----------------------------------------------------------------------------- # Main script #----------------------------------------------------------------------------- if __name__ == "__main__": # Whether to add reST urls for all issues in printout. show_urls = True # By default, search one month back tag = None if len(sys.argv) > 1: try: days = int(sys.argv[1]) except: tag = sys.argv[1] else: tag = check_output(['git', 'describe', '--abbrev=0']).strip() if tag: cmd = ['git', 'log', '-1', '--format=%ai', tag] tagday, tz = check_output(cmd).strip().rsplit(' ', 1) since = datetime.strptime(tagday, "%Y-%m-%d %H:%M:%S") else: since = datetime.now() - timedelta(days=days) print("fetching GitHub stats since %s (tag: %s)" % (since, tag), file=sys.stderr) # turn off to play interactively without redownloading, use %run -i if 1: issues = issues_closed_since(since, pulls=False) pulls = issues_closed_since(since, pulls=True) # For regular reports, it's nice to show them in reverse chronological order issues = sorted_by_field(issues, reverse=True) pulls = sorted_by_field(pulls, reverse=True) n_issues, n_pulls = map(len, (issues, pulls)) n_total = n_issues + n_pulls # Print summary report we can directly include into release notes. print() since_day = since.strftime("%Y/%m/%d") today = datetime.today().strftime("%Y/%m/%d") print("GitHub stats for %s - %s (tag: %s)" % (since_day, today, tag)) print() print("These lists are automatically generated, and may be incomplete or contain duplicates.") print() if tag: # print git info, in addition to GitHub info: since_tag = tag+'..' cmd = ['git', 'log', '--oneline', since_tag] ncommits = len(check_output(cmd).splitlines()) author_cmd = ['git', 'log', '--format=* %aN', since_tag] all_authors = check_output(author_cmd).splitlines() unique_authors = sorted(set(all_authors)) print("The following %i authors contributed %i commits." % (len(unique_authors), ncommits)) print() print('\n'.join(unique_authors)) print() print() print("We closed a total of %d issues, %d pull requests and %d regular issues;\n" "this is the full list (generated with the script \n" ":file:`tools/github_stats.py`):" % (n_total, n_pulls, n_issues)) print() print('Pull Requests (%d):\n' % n_pulls) report(pulls, show_urls) print() print('Issues (%d):\n' % n_issues) report(issues, show_urls) dipy-0.10.1/tools/gitwash_dumper.py000077500000000000000000000172551263041327500173120ustar00rootroot00000000000000#!/usr/bin/env python ''' Checkout gitwash repo into directory and do search replace on name ''' import os from os.path import join as pjoin import shutil import sys import re import glob import fnmatch import tempfile from subprocess import call from optparse import OptionParser verbose = False def clone_repo(url, branch): cwd = os.getcwd() tmpdir = tempfile.mkdtemp() try: cmd = 'git clone %s %s' % (url, tmpdir) call(cmd, shell=True) os.chdir(tmpdir) cmd = 'git checkout %s' % branch call(cmd, shell=True) except: shutil.rmtree(tmpdir) raise finally: os.chdir(cwd) return tmpdir def cp_files(in_path, globs, out_path): try: os.makedirs(out_path) except OSError: pass out_fnames = [] for in_glob in globs: in_glob_path = pjoin(in_path, in_glob) for in_fname in glob.glob(in_glob_path): out_fname = in_fname.replace(in_path, out_path) pth, _ = os.path.split(out_fname) if not os.path.isdir(pth): os.makedirs(pth) shutil.copyfile(in_fname, out_fname) out_fnames.append(out_fname) return out_fnames def filename_search_replace(sr_pairs, filename, backup=False): ''' Search and replace for expressions in files ''' in_txt = open(filename, 'rt').read(-1) out_txt = in_txt[:] for in_exp, out_exp in sr_pairs: in_exp = re.compile(in_exp) out_txt = in_exp.sub(out_exp, out_txt) if in_txt == out_txt: return False open(filename, 'wt').write(out_txt) if backup: open(filename + '.bak', 'wt').write(in_txt) return True def copy_replace(replace_pairs, repo_path, out_path, cp_globs=('*',), rep_globs=('*',), renames = ()): out_fnames = cp_files(repo_path, cp_globs, out_path) renames = [(re.compile(in_exp), out_exp) for in_exp, out_exp in renames] fnames = [] for rep_glob in rep_globs: fnames += fnmatch.filter(out_fnames, rep_glob) if verbose: print '\n'.join(fnames) for fname in fnames: filename_search_replace(replace_pairs, fname, False) for in_exp, out_exp in renames: new_fname, n = in_exp.subn(out_exp, fname) if n: os.rename(fname, new_fname) break def make_link_targets(proj_name, user_name, repo_name, known_link_fname, out_link_fname, url=None, ml_url=None): """ Check and make link targets If url is None or ml_url is None, check if there are links present for these in `known_link_fname`. If not, raise error. The check is: Look for a target `proj_name`. Look for a target `proj_name` + ' mailing list' Also, look for a target `proj_name` + 'github'. If this exists, don't write this target into the new file below. If we are writing any of the url, ml_url, or github address, then write new file with these links, of form: .. _`proj_name` .. _`proj_name`: url .. _`proj_name` mailing list: url """ link_contents = open(known_link_fname, 'rt').readlines() have_url = not url is None have_ml_url = not ml_url is None have_gh_url = None for line in link_contents: if not have_url: match = re.match(r'..\s+_`%s`:\s+' % proj_name, line) if match: have_url = True if not have_ml_url: match = re.match(r'..\s+_`%s mailing list`:\s+' % proj_name, line) if match: have_ml_url = True if not have_gh_url: match = re.match(r'..\s+_`%s github`:\s+' % proj_name, line) if match: have_gh_url = True if not have_url or not have_ml_url: raise RuntimeError('Need command line or known project ' 'and / or mailing list URLs') lines = [] if not url is None: lines.append('.. _`%s`: %s\n' % (proj_name, url)) if not have_gh_url: gh_url = 'http://github.com/%s/%s\n' % (user_name, repo_name) lines.append('.. _`%s github`: %s\n' % (proj_name, gh_url)) if not ml_url is None: lines.append('.. _`%s mailing list`: %s\n' % (proj_name, ml_url)) if len(lines) == 0: # Nothing to do return # A neat little header line lines = ['.. %s\n' % proj_name] + lines out_links = open(out_link_fname, 'wt') out_links.writelines(lines) out_links.close() USAGE = ''' If not set with options, the repository name is the same as the If not set with options, the main github user is the same as the repository name.''' GITWASH_CENTRAL = 'git://github.com/matthew-brett/gitwash.git' GITWASH_BRANCH = 'master' def main(): parser = OptionParser() parser.set_usage(parser.get_usage().strip() + USAGE) parser.add_option("--repo-name", dest="repo_name", help="repository name - e.g. nitime", metavar="REPO_NAME") parser.add_option("--github-user", dest="main_gh_user", help="github username for main repo - e.g fperez", metavar="MAIN_GH_USER") parser.add_option("--gitwash-url", dest="gitwash_url", help="URL to gitwash repository - default %s" % GITWASH_CENTRAL, default=GITWASH_CENTRAL, metavar="GITWASH_URL") parser.add_option("--gitwash-branch", dest="gitwash_branch", help="branch in gitwash repository - default %s" % GITWASH_BRANCH, default=GITWASH_BRANCH, metavar="GITWASH_BRANCH") parser.add_option("--source-suffix", dest="source_suffix", help="suffix of ReST source files - default '.rst'", default='.rst', metavar="SOURCE_SUFFIX") parser.add_option("--project-url", dest="project_url", help="URL for project web pages", default=None, metavar="PROJECT_URL") parser.add_option("--project-ml-url", dest="project_ml_url", help="URL for project mailing list", default=None, metavar="PROJECT_ML_URL") (options, args) = parser.parse_args() if len(args) < 2: parser.print_help() sys.exit() out_path, project_name = args if options.repo_name is None: options.repo_name = project_name if options.main_gh_user is None: options.main_gh_user = options.repo_name repo_path = clone_repo(options.gitwash_url, options.gitwash_branch) try: copy_replace((('PROJECTNAME', project_name), ('REPONAME', options.repo_name), ('MAIN_GH_USER', options.main_gh_user)), repo_path, out_path, cp_globs=(pjoin('gitwash', '*'),), rep_globs=('*.rst',), renames=(('\.rst$', options.source_suffix),)) make_link_targets(project_name, options.main_gh_user, options.repo_name, pjoin(out_path, 'gitwash', 'known_projects.inc'), pjoin(out_path, 'gitwash', 'this_project.inc'), options.project_url, options.project_ml_url) finally: shutil.rmtree(repo_path) if __name__ == '__main__': main() dipy-0.10.1/tools/make_examples.py000077500000000000000000000103751263041327500170770ustar00rootroot00000000000000#!/usr/bin/env python """Run the py->rst conversion and run all examples. Steps are: analyze example index file for example py filenames check for any filenames in example directory not included do py to rst conversion, writing into build directory run """ #----------------------------------------------------------------------------- # Library imports #----------------------------------------------------------------------------- # Stdlib imports import os from os.path import join as pjoin, abspath, splitext import sys import shutil from subprocess import check_call from glob import glob import numpy as np # Third-party imports # We must configure the mpl backend before making any further mpl imports import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from matplotlib._pylab_helpers import Gcf #----------------------------------------------------------------------------- # Function defintions #----------------------------------------------------------------------------- # These global variables let show() be called by the scripts in the usual # manner, but when generating examples, we override it to write the figures to # files with a known name (derived from the script name) plus a counter figure_basename = None # We must change the show command to save instead def show(): allfm = Gcf.get_all_fig_managers() for fcount, fm in enumerate(allfm): fm.canvas.figure.savefig('%s_%02i.png' % (figure_basename, fcount+1)) _mpl_show = plt.show plt.show = show #----------------------------------------------------------------------------- # Main script #----------------------------------------------------------------------------- # Where things are EG_INDEX_FNAME = abspath('examples_index.rst') EG_SRC_DIR = abspath('examples') # Work in examples directory os.chdir('examples_built') if not os.getcwd().endswith(pjoin('doc','examples_built')): raise OSError('This must be run from the doc directory') # Copy the py files; check they are in the examples list and warn if not eg_index_contents = open(EG_INDEX_FNAME, 'rt').read() # Here I am adding an extra step. The list of examples to be executed need # also to be added in the following file (valid_examples.txt). This helps # with debugging the examples and the documentation only a few examples at # the time. flist_name = pjoin(os.path.dirname(os.getcwd()), 'examples', 'valid_examples.txt') flist = open(flist_name, "r") validated_examples = flist.readlines() flist.close() # Parse "#" in lines validated_examples = [line.split("#", 1)[0] for line in validated_examples] # Remove leading and trailing white space from example names validated_examples = [line.strip() for line in validated_examples] # Remove blank lines validated_examples = filter(None, validated_examples) for example in validated_examples: fullpath = pjoin(EG_SRC_DIR, example) if not example.endswith(".py"): print ("%s not a python file, skipping." % example) continue elif not os.path.isfile(fullpath): print ("Cannot find file, %s, skipping." % example) continue shutil.copyfile(fullpath, example) # Check that example file is included in the docs file_root = example[:-3] if file_root not in eg_index_contents: msg = "Example, %s, not in index file %s." msg = msg % (example, EG_INDEX_FNAME) print(msg) # Run the conversion from .py to rst file check_call('python ../../tools/ex2rst --project dipy --outdir . .', shell=True) #added the path so that scripts can import other scripts on the same directory sys.path.insert(0, os.getcwd()) # Execute each python script in the directory. if not os.path.isdir('fig'): os.mkdir('fig') use_xvfb = os.environ.get('TEST_WITH_XVFB', False) if use_xvfb: from xvfbwrapper import Xvfb display = Xvfb(width=1920, height=1080) display.start() for script in validated_examples: figure_basename = os.path.join('fig', os.path.splitext(script)[0]) print script execfile(script) plt.close('all') if use_xvfb: display.stop() # clean up stray images, pickles, npy files, etc for globber in ('*.nii.gz', '*.dpy', '*.npy', '*.pkl', '*.mat', '*.img', '*.hdr'): for fname in glob(globber): os.unlink(fname) dipy-0.10.1/tools/osxbuild.py000066400000000000000000000103621263041327500161060ustar00rootroot00000000000000"""Python script to build the OSX universal binaries. Stolen with thankfulness from the numpy distribution This is a simple script, most of the heavy lifting is done in bdist_mpkg. To run this script: 'python build.py' Installer is built using sudo so file permissions are correct when installed on user system. Script will prompt for sudo pwd. """ import os import sys import shutil import subprocess from optparse import OptionParser from getpass import getuser #USER_README = 'docs/README.rst' #DEV_README = SRC_DIR + 'README.rst' BUILD_DIR = 'build' DIST_DIR = 'dist' DIST_DMG_DIR = 'dist-dmg' def remove_dirs(sudo): print 'Removing old build and distribution directories...' print """The distribution is built as root, so the files have the correct permissions when installed by the user. Chown them to user for removal.""" if os.path.exists(BUILD_DIR): cmd = 'chown -R %s %s' % (getuser(), BUILD_DIR) if sudo: cmd = 'sudo ' + cmd shellcmd(cmd) shutil.rmtree(BUILD_DIR) if os.path.exists(DIST_DIR): cmd = 'sudo chown -R %s %s' % (getuser(), DIST_DIR) if sudo: cmd = 'sudo ' + cmd shellcmd(cmd) shutil.rmtree(DIST_DIR) def build_dist(readme, python_exe, sudo): print 'Building distribution... (using sudo)' cmd = '%s setup_egg.py bdist_mpkg --readme=%s' % ( python_exe, readme) if sudo: cmd = 'sudo ' + cmd shellcmd(cmd) def build_dmg(sudo): print 'Building disk image...' # Since we removed the dist directory at the start of the script, # our pkg should be the only file there. pkg = os.listdir(DIST_DIR)[0] fn, ext = os.path.splitext(pkg) dmg = fn + '.dmg' srcfolder = os.path.join(DIST_DIR, pkg) dstfolder = os.path.join(DIST_DMG_DIR, dmg) # build disk image try: os.mkdir(DIST_DMG_DIR) except OSError: pass try: os.unlink(dstfolder) except OSError: pass cmd = 'hdiutil create -srcfolder %s %s' % (srcfolder, dstfolder) if sudo: cmd = 'sudo ' + cmd shellcmd(cmd) def copy_readme(): """Copy a user README with info regarding the website, instead of the developer README which tells one how to build the source. """ print 'Copy user README.rst for installer.' shutil.copy(USER_README, DEV_README) def revert_readme(): """Revert the developer README.""" print 'Reverting README.rst...' cmd = 'svn revert %s' % DEV_README shellcmd(cmd) def shellcmd(cmd, verbose=True): """Call a shell command.""" if verbose: print cmd try: subprocess.check_call(cmd, shell=True) except subprocess.CalledProcessError, err: msg = """ Error while executing a shell command. %s """ % str(err) raise Exception(msg) def build(): parser = OptionParser() parser.add_option("-p", "--python", dest="python", default=sys.executable, help="python interpreter executable", metavar="PYTHON_EXE") parser.add_option("-r", "--readme", dest="readme", default='README.rst', help="README file", metavar="README") parser.add_option("-s", "--sudo", dest="sudo", default=False, help="Run as sudo or no", metavar="SUDO") (options, args) = parser.parse_args() try: src_dir = args[0] except IndexError: src_dir = '.' # Check source directory if not os.path.isfile(os.path.join(src_dir, 'setup.py')): raise RuntimeError('Run this script from directory ' 'with setup.py, or pass in this ' 'directory on command line') # update end-user documentation #copy_readme() #shellcmd("svn stat %s"%DEV_README) # change to source directory cwd = os.getcwd() os.chdir(src_dir) # build distribution remove_dirs(options.sudo) build_dist(options.readme, options.python, options.sudo) build_dmg(options.sudo) # change back to original directory os.chdir(cwd) # restore developer documentation #revert_readme() if __name__ == '__main__': build() dipy-0.10.1/tools/pack_examples.py000077500000000000000000000021741263041327500170760ustar00rootroot00000000000000#!/usr/bin/env python """ Script to pack built examples into suitably named archive Usage %s output_dir [doc_dir] """ import os from os.path import join as pjoin import sys import shutil import tarfile import dipy __doc__ = __doc__ % sys.argv[0] EG_BUILT_SDIR = 'examples_built' dpv = 'dipy-' + dipy.__version__ archive_name = dpv + '-doc-examples.tar.gz' try: out_root = sys.argv[1] except IndexError: print __doc__ sys.exit(1) try: os.mkdir(out_root) except OSError: pass try: doc_dir = sys.argv[2] except IndexError: doc_dir = os.getcwd() archive_fname = os.path.join(out_root, archive_name) eg_built_dir = pjoin(doc_dir, EG_BUILT_SDIR) eg_out_base = pjoin(out_root, dpv, 'doc') eg_out_dir = pjoin(eg_out_base, EG_BUILT_SDIR) if os.path.isdir(eg_out_dir): shutil.rmtree(eg_out_dir) def ignorandi(src, names): return [name for name in names if name == 'README' or name == '.gitignore'] shutil.copytree(eg_built_dir, eg_out_dir, ignore=ignorandi) os.chdir(out_root) tar = tarfile.open(archive_fname, 'w|gz') tar.add(dpv) tar.close() shutil.rmtree(pjoin(out_root, dpv)) print("Written " + archive_fname) dipy-0.10.1/tools/pythonsudo000077500000000000000000000010551263041327500160440ustar00rootroot00000000000000#!/bin/bash if [ $# -ne 1 ] then echo "Usage: `basename $0` {python-minor-version}" exit 1 fi PYV=$1 WORKON_HOME=/Users/mb312/.virtualenvs PYPATH=/Library/Frameworks/Python.framework/Versions/2.$PYV/bin VENV=$WORKON_HOME/python2$PYV VENV_LIB=$VENV/lib/python2.$PYV/site-packages export PATH=$PYPATH:$PATH:$VENV/bin export PYTHONPATH=$VENV_LIB:$VENV_LIB/Cython-0.14.1-py2.$PYV-macosx-10.3-i386.egg:/Users/mb312/.virtualenvs/python2$PYV/lib/python2.$PYV/site-packages/nibabel-1.0.0-py2.$PYV.egg export CC=/usr/bin/gcc-4.0 export CXX=/usr/bin/g++-4.0 bash dipy-0.10.1/tools/release000077500000000000000000000023711263041327500152520ustar00rootroot00000000000000#!/usr/bin/env python """dipy release script. This should only be run at real release time. """ from os.path import join as pjoin from toollib import get_dipydir, cd, c # Get main dipy dir, this will raise if it doesn't pass some checks dipydir = get_dipydir() tooldir = pjoin(dipydir,'tools') distdir = pjoin(dipydir,'dist') #### Where I keep static backups of each release ###nibbackupdir = os.path.expanduser('~/dipy/backup') # Start in main dipy dir cd(dipydir) # Load release info execfile(pjoin('dipy','info.py')) print print "Releasing dipy" print "=================" print print 'Source dipy directory:', dipydir print # Perform local backup, go to tools dir to run it. cd(tooldir) # c('./make_tarball.py') # c('mv dipy-*.tgz %s' % nibbackupdir) # Build release files c('./build_release %s' % dipydir) # Register with the Python Package Index (PyPI) print "Registering with PyPI..." cd(dipydir) c('./setup.py register') # Upload all files c('./setup.py sdist --formats=gztar,zip upload') c('./setup.py bdist_egg upload') cd(distdir) #print "Uploading distribution files..." #c('scp * dipy@dipy.scipy.org:www/dist/') # print "Uploading backup files..." # cd(nibbackupdir) # c('scp `ls -1tr *tgz | tail -1` dipy@dipy.scipy.org:www/backup/') print "Done!" dipy-0.10.1/tools/toollib.py000066400000000000000000000024641263041327500157250ustar00rootroot00000000000000"""Various utilities common to nibabel release and maintenance tools. """ # Library imports import os import sys from distutils.dir_util import remove_tree # Useful shorthands pjoin = os.path.join cd = os.chdir # Utility functions def c(cmd): """Run system command, raise SystemExit if it returns an error.""" print "$",cmd stat = os.system(cmd) #stat = 0 # Uncomment this and comment previous to run in debug mode if stat: raise SystemExit("Command %s failed with code: %s" % (cmd, stat)) def get_dipydir(): """Get dipy directory from command line, or assume it's the one above.""" # Initialize arguments and check location try: dipydir = sys.argv[1] except IndexError: dipydir = '..' dipydir = os.path.abspath(dipydir) cd(dipydir) if not os.path.isdir('dipy') and os.path.isfile('setup.py'): raise SystemExit('Invalid dipy directory: %s' % dipydir) return dipydir # import compileall and then get dir os.path.split def compile_tree(): """Compile all Python files below current directory.""" stat = os.system('python -m compileall .') if stat: msg = '*** ERROR: Some Python files in tree do NOT compile! ***\n' msg += 'See messages above for the actual file that produced it.\n' raise SystemExit(msg) dipy-0.10.1/tools/travis_tools.sh000066400000000000000000000012071263041327500167650ustar00rootroot00000000000000# Tools for working with travis-ci export WHEELHOST="travis-wheels.scikit-image.org" export WHEELHOUSE="http://${WHEELHOST}/" retry () { # https://gist.github.com/fungusakafungus/1026804 local retry_max=5 local count=$retry_max while [ $count -gt 0 ]; do "$@" && break count=$(($count - 1)) sleep 1 done [ $count -eq 0 ] && { echo "Retry failed [$retry_max]: $@" >&2 return 1 } return 0 } wheelhouse_pip_install() { # Install pip requirements via travis wheelhouse retry pip install --timeout=60 --no-index --trusted-host $WHEELHOST --find-links $WHEELHOUSE $@ }
  • Home