diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e72c9ea2..dbd6110c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,28 +28,31 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: '3.11' - name: Install python packages run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh - name: Run tests run: /bin/bash test.sh env: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + SELENIUM_CHROMEDRIVER_PATH: /usr/bin/chromedriver docker-build: needs: unittest runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v3 - name: Build docker run: docker build . --tag ${{ env.IMAGE_NAME }} @@ -58,10 +61,10 @@ jobs: needs: docker-build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v3 - name: Build docker run: docker build . --tag ${{ env.IMAGE_NAME }} - name: Run tests in docker @@ -81,7 +84,7 @@ jobs: needs: unittest runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Upload to pypi run: /bin/bash upload.sh --github @@ -95,7 +98,7 @@ jobs: packages: write steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 # Login against a Docker registry except on PR # https://github.com/docker/login-action diff --git a/.github/workflows/python310.yml b/.github/workflows/python310.yml new file mode 100644 index 00000000..feba6a8a --- /dev/null +++ b/.github/workflows/python310.yml @@ -0,0 +1,44 @@ +name: 3.10 + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ '*' ] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + #IMAGE_NAME: ${{ github.repository }} + IMAGE_NAME: theshellland/automonisaur + + PKG: automon + PYPI: automonisaur + TWINE_REPOSITORY: https://upload.pypi.org/legacy/ + TWINE_REPOSITORY_URL: https://upload.pypi.org/legacy/ + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + + +jobs: + + unittest: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Install python packages + run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh + - name: Run tests + run: /bin/bash test.sh + env: + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} \ No newline at end of file diff --git a/.github/workflows/python311.yml b/.github/workflows/python311.yml new file mode 100644 index 00000000..cc9d049a --- /dev/null +++ b/.github/workflows/python311.yml @@ -0,0 +1,44 @@ +name: 3.11 + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ '*' ] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + #IMAGE_NAME: ${{ github.repository }} + IMAGE_NAME: theshellland/automonisaur + + PKG: automon + PYPI: automonisaur + TWINE_REPOSITORY: https://upload.pypi.org/legacy/ + TWINE_REPOSITORY_URL: https://upload.pypi.org/legacy/ + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + + +jobs: + + unittest: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + - name: Install python packages + run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh + - name: Run tests + run: /bin/bash test.sh + env: + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} \ No newline at end of file diff --git a/.github/workflows/python312.yml b/.github/workflows/python312.yml new file mode 100644 index 00000000..a3fe3a68 --- /dev/null +++ b/.github/workflows/python312.yml @@ -0,0 +1,44 @@ +name: 3.12 + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ '*' ] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + #IMAGE_NAME: ${{ github.repository }} + IMAGE_NAME: theshellland/automonisaur + + PKG: automon + PYPI: automonisaur + TWINE_REPOSITORY: https://upload.pypi.org/legacy/ + TWINE_REPOSITORY_URL: https://upload.pypi.org/legacy/ + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + + +jobs: + + unittest: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.12' + - name: Install python packages + run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh + - name: Run tests + run: /bin/bash test.sh + env: + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} diff --git a/.github/workflows/python36.yml b/.github/workflows/python36.yml index 0a4b56c1..f621ca70 100644 --- a/.github/workflows/python36.yml +++ b/.github/workflows/python36.yml @@ -1,8 +1,10 @@ -name: 3.6 +name: 3.6 EOL on: push: - branches: [ 3.6 ] + branches: [ 'none' ] + pull_request: + branches: [ 'none' ] env: # Use docker.io for Docker Hub if empty @@ -23,17 +25,19 @@ env: jobs: unittest: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: 3.6 - name: Install python packages run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh - name: Run tests run: /bin/bash test.sh env: diff --git a/.github/workflows/python37.yml b/.github/workflows/python37.yml index a004237f..207540ec 100644 --- a/.github/workflows/python37.yml +++ b/.github/workflows/python37.yml @@ -1,10 +1,10 @@ -name: 3.7 +name: 3.7 EOL on: push: - branches: [ '*' ] + branches: [ 'none' ] pull_request: - branches: [ '*' ] + branches: [ 'none' ] env: # Use docker.io for Docker Hub if empty @@ -28,14 +28,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: 3.7 - name: Install python packages run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh - name: Run tests run: /bin/bash test.sh env: diff --git a/.github/workflows/python38.yml b/.github/workflows/python38.yml index 7b39156d..f841b4ec 100644 --- a/.github/workflows/python38.yml +++ b/.github/workflows/python38.yml @@ -2,9 +2,9 @@ name: 3.8 on: push: - branches: [ '*' ] + branches: [ 'none' ] pull_request: - branches: [ '*' ] + branches: [ 'none' ] env: # Use docker.io for Docker Hub if empty @@ -28,14 +28,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: 3.8 - name: Install python packages run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh - name: Run tests run: /bin/bash test.sh env: diff --git a/.github/workflows/python39.yml b/.github/workflows/python39.yml index 8f24115b..3b65deb7 100644 --- a/.github/workflows/python39.yml +++ b/.github/workflows/python39.yml @@ -2,9 +2,9 @@ name: 3.9 on: push: - branches: [ '*' ] + branches: [ 'none' ] pull_request: - branches: [ '*' ] + branches: [ 'none' ] env: # Use docker.io for Docker Hub if empty @@ -28,14 +28,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: 3.9 - name: Install python packages run: pip3 install -r requirements.txt + - name: install chrome and chromedriver + run: /bin/bash docker/install.sh - name: Run tests run: /bin/bash test.sh env: diff --git a/Dockerfile b/Dockerfile index 73214e54..cf2d11db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # pypi requirements -FROM python:3 as builder +FROM python:3.11 as builder RUN python3 -m pip install --upgrade pip setuptools wheel twine RUN apt update && apt install -y vim COPY requirements.txt . diff --git a/README.md b/README.md index bd684f1b..48e7bd73 100644 --- a/README.md +++ b/README.md @@ -11,46 +11,51 @@ **[pypi](https://pypi.org/project/automonisaur/)** [![master](https://github.com/TheShellLand/automonisaur/actions/workflows/ci.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/ci.yml) +[![master](https://github.com/TheShellLand/automonisaur/actions/workflows/python312.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/python312.yml) +[![master](https://github.com/TheShellLand/automonisaur/actions/workflows/python311.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/python311.yml) +[![master](https://github.com/TheShellLand/automonisaur/actions/workflows/python310.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/python310.yml) [![master](https://github.com/TheShellLand/automonisaur/actions/workflows/python39.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/python39.yml) [![master](https://github.com/TheShellLand/automonisaur/actions/workflows/python38.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/python38.yml) [![master](https://github.com/TheShellLand/automonisaur/actions/workflows/python37.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/python37.yml) -[![master](https://github.com/TheShellLand/automonisaur/actions/workflows/python36.yml/badge.svg)](https://github.com/TheShellLand/automonisaur/actions/workflows/python36.yml) -[![Downloads](https://pepy.tech/badge/automonisaur)](https://pepy.tech/project/automonisaur) -[![Downloads](https://pepy.tech/badge/automonisaur/month)](https://pepy.tech/project/automonisaur) -[![Downloads](https://pepy.tech/badge/automonisaur/week)](https://pepy.tech/project/automonisaur) +[![Downloads](https://static.pepy.tech/badge/automonisaur)](https://pepy.tech/project/automonisaur) +[![Downloads](https://static.pepy.tech/badge/automonisaur/month)](https://pepy.tech/project/automonisaur) +[![Downloads](https://static.pepy.tech/badge/automonisaur/week)](https://pepy.tech/project/automonisaur) [//]: # ([![codecov](https://codecov.io/gh/TheShellLand/automonisaur/branch/master/graph/badge.svg)](https://codecov.io/gh/TheShellLand/automonisaur)) ### About -This library adds some easier-to-use wrappers around common services for data science and threat intelligence. +This library adds some easier-to-use wrappers around common services for data +science and threat intelligence. -Provides easier clients and configuration options, as well as any additional helpers to get things up and running. +Provides easier clients and configuration options, as well as any additional +helpers to get things up and running. Github issues and feature requests welcomed. ### Integrations -- airport -- elasticsearch -- flask -- google people api -- logging -- minio -- neo4j -- nmap -- requests -- selenium -- sentryio -- slack -- snmp -- splunk -- swift +| Category | Library | +|-----------------|-------------------------------------------------------------| +| API | flask | +| Chat | slack | +| Data Scraping | beautifulsoup
facebook groups
instagram
scrapy | +| Databases | elasticsearch
neo4j
splunk | +| Data Store | minio
swift | +| Devices | snmp | +| Google Cloud | google auth api
google people api
google sheets api | +| Helpers | os
subprocess
threading
socket
datetime | +| Logging | sentryio | +| MacOS | airport
macchanger
wdutil | +| Python | logging
requests | +| SOAR | swimlane
splunk soar
xsoar | +| Recon | nmap | +| Test Automation | selenium | #### Requires -- python >= 3.7 +- python >= 3.10 _Note: install requirements.txt to use all integrations_ @@ -64,13 +69,16 @@ _Note: install requirements.txt to use all integrations_ ```shell script # shell script -/bin/bash requirements.sh +/bin/bash install-requirements.sh # pip python3 -m pip install -U -r requirements.txt # pip python3 -m pip install -U -r https://raw.githubusercontent.com/TheShellLand/automonisaur/master/requirements.txt + +# master branch +python3 -m pip install --upgrade git+https://github.com/TheShellLand/automonisaur.git@master#egg ``` #### unittest locally diff --git a/automon/__init__.py b/automon/__init__.py index 8a9572ed..17b93448 100755 --- a/automon/__init__.py +++ b/automon/__init__.py @@ -1 +1,2 @@ -from .log.logger import Logging \ No newline at end of file +from .helpers import * +from .log import Logging, logging, log_secret diff --git a/automon/helpers/__init__.py b/automon/helpers/__init__.py index f78a5bac..3f9dd203 100755 --- a/automon/helpers/__init__.py +++ b/automon/helpers/__init__.py @@ -1,4 +1,6 @@ from .dates import Dates from .markdown import Chat, Format -from .os import environ -from .subprocess import Run +from .networking import Networking +from .osWrapper import environ, environ_list +from .sleeper import Sleeper +from .subprocessWrapper import Run diff --git a/automon/helpers/assertions.py b/automon/helpers/assertions.py index 1781727b..bbc82ad4 100755 --- a/automon/helpers/assertions.py +++ b/automon/helpers/assertions.py @@ -1,9 +1,11 @@ import re from ast import literal_eval -from automon.log import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) -log = Logging(__name__, Logging.DEBUG) def make_tuple(obj: str) -> tuple: diff --git a/automon/helpers/asyncio/loop.py b/automon/helpers/asyncio/loop.py deleted file mode 100644 index 4775d8be..00000000 --- a/automon/helpers/asyncio/loop.py +++ /dev/null @@ -1,9 +0,0 @@ -import asyncio - -from automon.log import Logging, logging - -logging.getLogger("asyncio").setLevel(Logging.ERROR) - - -def get_event_loop(): - return asyncio.get_event_loop() diff --git a/automon/helpers/asyncio/__init__.py b/automon/helpers/asyncioWrapper/__init__.py similarity index 100% rename from automon/helpers/asyncio/__init__.py rename to automon/helpers/asyncioWrapper/__init__.py diff --git a/automon/helpers/asyncioWrapper/loop.py b/automon/helpers/asyncioWrapper/loop.py new file mode 100644 index 00000000..4b1a2e8a --- /dev/null +++ b/automon/helpers/asyncioWrapper/loop.py @@ -0,0 +1,10 @@ +import asyncio + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +def get_event_loop(): + return asyncio.get_event_loop() diff --git a/automon/helpers/cpu.py b/automon/helpers/cpu.py deleted file mode 100644 index 925cbdac..00000000 --- a/automon/helpers/cpu.py +++ /dev/null @@ -1,16 +0,0 @@ -import psutil - -from automon.log import Logging - -log = Logging('cpu', level=Logging.DEBUG) - - -def cpu_usage(max_cpu_percentage=80): - """Limit max cpu usage - """ - if psutil.cpu_percent() < max_cpu_percentage: - log.debug(f'[{cpu_usage.__name__}] {psutil.cpu_percent()}%') - return True - else: - log.debug(f'[{cpu_usage.__name__}] {psutil.cpu_percent()}%') - return False diff --git a/automon/helpers/grok/__init__.py b/automon/helpers/grok/__init__.py deleted file mode 100644 index ef93f577..00000000 --- a/automon/helpers/grok/__init__.py +++ /dev/null @@ -1,234 +0,0 @@ -import os -import warnings -import pandas as pd - -from automon.log import Logging - - -class Grok: - def __init__(self): - self._log = Logging(name=Grok.__name__, level=Logging.DEBUG) - - p = 'logstash-patterns-core/patterns' - l = f'{os.path.join(os.path.split(os.path.realpath(__file__))[0])}' - - walk = os.walk(l) - - for folder, folders, files in walk: - f_list = [os.path.join(folder, f) for f in files] - - if 'legacy' in folder: - self.legacy_df = self.to_df(f_list) - self.legacy = self.legacy_df.to_dict()[0] - - if 'ecs-v1' in folder: - self.ecs_v1_df = self.to_df(f_list) - self.ecs_v1 = self.ecs_v1_df.to_dict()[0] - - pass - - def to_df(self, files: list) -> pd.DataFrame: - - patterns = [self.to_pattern(f) for f in files] - return self.expanded_dict(patterns) - - def to_pattern(self, file: str) -> pd.Series: - filename = os.path.split(file)[-1] - pattern = open(file, 'r').read() - pattern = [x for x in pattern.splitlines() if '#' not in x if x] - pattern = [x.split(' ') for x in pattern] - pattern = {k[0]: ''.join(k[1:]) for k in pattern} - - return pd.Series(pattern).rename(filename) - - def expanded_dict(self, patterns: list) -> pd.DataFrame: - - # big_dict = {} - # for d in patterns: - # for k, v in d.items(): - # if k not in big_dict.keys(): - # big_dict[k] = v - # else: - # self._log.info(f'skipping existing, {k}') - - df = pd.DataFrame(pd.concat(patterns)) - return df - - -class GrokLegacy: - warnings.warn(f'GrokLegacy will be removed by v0.2.x', DeprecationWarning) - g = dict() - ########################################## - # numbers, integer - ########################################## - g['BASE10NUM'] = '(?[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))' - g['NUMBER'] = '(?:' + g['BASE10NUM'] + ')' - g['BASE16NUM'] = '(?(?"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))''' - g['UUID'] = '[A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}' - # URN, allowing use of RFC 2141 section 2.3 reserved characters' - g['URN'] = '''urn:[0-9A-Za-z][0-9A-Za-z-]{0,31}:(?:%[0-9a-fA-F]{2}|[0-9A-Za-z()+,.:=@;$_!*'/?#-])+''' - - ########################################## - # Networking - ########################################## - g['CISCOMAC'] = '(?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})' - g['WINDOWSMAC'] = '(?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})' - g['COMMONMAC'] = '(?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})' - g['MAC'] = '(?:' + g['CISCOMAC'] + '|' + g['WINDOWSMAC'] + '|' + g['COMMONMAC'] + '})' - g[ - 'IPV6'] = '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?' - g[ - 'IPV4'] = '(?[A-Za-z]+:|\\)(?:\\[^\\?*]*)+' - g['URIPROTO'] = '[A-Za-z]+(\+[A-Za-z+]+)?' - - # TODO: fix => :port - g['URIHOST'] = '' + g['IPORHOST'] + '(?::%{POSINT:port})?' - g['PATH'] = '(?:' + g['UNIXPATH'] + '|' + g['WINPATH'] + ')' - # uripath comes loosely from RFC1738, but mostly from what Firefox - # doesn't turn into %XX - g['URIPATH'] = '''(?:/[A-Za-z0-9$.+!*'(){},~:;=@#%&_\-]*)+''' - # g['URIPARAM'] = '\?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?' - g['URIPARAM'] = '''\?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]<>]*''' - g['URIPATHPARAM'] = g['URIPATH'] + '(?:' + g['URIPARAM'] + ')?' - g['URI'] = g['URIPROTO'] + '://(?:' + g['USER'] + '(?::[^@]*)?@)?(?:' + g['URIHOST'] + ')?(?:' + g[ - 'URIPATHPARAM'] + ')?' - - ########################################## - # Months: January, Feb, 3, 03, 12, December - ########################################## - g[ - 'MONTH'] = '\b(?:[Jj]an(?:uary|uar)?|[Ff]eb(?:ruary|ruar)?|[Mm](?:a|รค)?r(?:ch|z)?|[Aa]pr(?:il)?|[Mm]a(?:y|i)?|[Jj]un(?:e|i)?|[Jj]ul(?:y)?|[Aa]ug(?:ust)?|[Ss]ep(?:tember)?|[Oo](?:c|k)?t(?:ober)?|[Nn]ov(?:ember)?|[Dd]e(?:c|z)(?:ember)?)\b' - g['MONTHNUM'] = '(?:0?[1-9]|1[0-2])' - g['MONTHNUM2'] = '(?:0[1-9]|1[0-2])' - g['MONTHDAY'] = '(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])' - - ########################################## - # Days: Monday, Tue, Thu, etc... - ########################################## - g['DAY'] = '(?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)' - - ########################################## - # Years? - ########################################## - g['YEAR'] = '(?>\d\d){1,2}' - g['HOUR'] = '(?:2[0123]|[01]?[0-9])' - g['MINUTE'] = '(?:[0-5][0-9])' - # '60' is a leap second in most time standards and thus is valid. - g['SECOND'] = '(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)' - g['TIME'] = '(?!<[0-9])' + g['HOUR'] + ':' + g['MINUTE'] + '(?::' + g['SECOND'] + ')(?![0-9])' - # datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it) - g['DATE_US'] = g['MONTHNUM'] + '[/-]' + g['MONTHDAY'] + '[/-]' + g['YEAR'] - g['DATE_EU'] = g['MONTHDAY'] + '[./-]' + g['MONTHNUM'] + './-]' + g['YEAR'] - g['ISO8601_TIMEZONE'] = '(?:Z|[+-]' + g['HOUR'] + '(?::?' + g['MINUTE'] + '))' - g['ISO8601_SECOND'] = '(?:' + g['SECOND'] + '|60)' - g['TIMESTAMP_ISO8601'] = g['YEAR'] + '-' + g['MONTHNUM'] + '-' + g['MONTHDAY'] + '[T ]' + g['HOUR'] + ':?' + g[ - 'MINUTE'] + '(?::?' + g['SECOND'] + ')?' + g['ISO8601_TIMEZONE'] + '?' - g['DATE'] = g['DATE_US'] + '|' + g['DATE_EU'] - g['DATESTAMP'] = g['DATE'] + '[- ]' + g['TIME'] - g['TZ'] = '(?:[APMCE][SD]T|UTC)' - g['DATESTAMP_RFC822'] = g['DAY'] + g['MONTH'] + g['MONTHDAY'] + g['YEAR'] + g['TIME'] + g['TZ'] - g['DATESTAMP_RFC2822'] = g['DAY'] + ', ' + g['MONTHDAY'] + ' ' + g['MONTH'] + ' ' + g['YEAR'] + ' ' + g[ - 'TIME'] + ' ' + g['ISO8601_TIMEZONE'] - g['DATESTAMP_OTHER'] = g['DAY'] + ' ' + g['MONTH'] + ' ' + g['MONTHDAY'] + ' ' + g['TIME'] + ' ' + g['TZ'] + ' ' + \ - g['YEAR'] - g['DATESTAMP_EVENTLOG'] = g['YEAR'] + g['MONTHNUM2'] + g['MONTHDAY'] + g['HOUR'] + g['MINUTE'] + g['SECOND'] - - ########################################## - # Syslog Dates: Month Day HH:MM:SS - ########################################## - g['SYSLOGTIMESTAMP'] = g['MONTH'] + ' +' + g['MONTHDAY'] + ' ' + g['TIME'] - g['PROG'] = '[\x21-\x5a\x5c\x5e-\x7e]+' - # TODO: fix => :program :pid - g['SYSLOGPROG'] = '%{PROG:program}(?:\[%{POSINT:pid}\])?' - g['SYSLOGHOST'] = g['IPORHOST'] - # TODO: fix => :facility :priority - g['SYSLOGFACILITY'] = '<%{NONNEGINT:facility}.%{NONNEGINT:priority}>' - g['HTTPDATE'] = g['MONTHDAY'] + '/' + g['MONTH'] + '/' + g['YEAR'] + ':' + g['TIME'] + ' ' + g['INT'] - - ########################################## - # Shortcuts - ########################################## - g['QS'] = g['QUOTEDSTRING'] - - ########################################## - # Log formats - ########################################## - # TODO: fix => these :timestamp :logsource - g['SYSLOGBASE'] = '%{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:' - - ########################################## - # Geolocation - ########################################## - # TODO: add geolocation regex - # g['GEO'] = '' - - ########################################## - # Log Levels - ########################################## - g[ - 'LOGLEVEL'] = '([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)' - - def __init__(self): - self._log = Logging(GrokLegacy.__name__, Logging.DEBUG) - - self.url = 'https://raw.githubusercontent.com/logstash-plugins/logstash-patterns-core/master/patterns/grok-patterns' - # self.file = f'{os.path.split(os.path.realpath(__file__))[0]}/grok-patterns.txt' - # - # with open(self.file, 'r') as f: - # file = f.read() - # - # parts = [] - # section = [] - # - # for line in file.splitlines(): - # if not line: - # continue - # if re.search('^#', line): - # parts.append(section) - # section = [] - # section.append(line) - # else: - # section.append(line) - # - # self._log.debug(line) - - # build dict from file - - # try url - - # compare file to url - - # if different, build dict from url diff --git a/automon/helpers/http.py b/automon/helpers/httpWrapper.py old mode 100755 new mode 100644 similarity index 83% rename from automon/helpers/http.py rename to automon/helpers/httpWrapper.py index 039f7c98..f3f2930f --- a/automon/helpers/http.py +++ b/automon/helpers/httpWrapper.py @@ -1,4 +1,4 @@ -from automon.integrations.neo4j.cypher import Cypher +from automon.integrations.neo4jWrapper.cypher import Cypher # from core.helpers import cryptography diff --git a/automon/helpers/mathWrapper/__init__.py b/automon/helpers/mathWrapper/__init__.py new file mode 100644 index 00000000..09122ded --- /dev/null +++ b/automon/helpers/mathWrapper/__init__.py @@ -0,0 +1 @@ +from .file_size import human_readable_size \ No newline at end of file diff --git a/automon/helpers/mathWrapper/file_size.py b/automon/helpers/mathWrapper/file_size.py new file mode 100644 index 00000000..648d8665 --- /dev/null +++ b/automon/helpers/mathWrapper/file_size.py @@ -0,0 +1,11 @@ +import math + + +def human_readable_size(size_bytes): + if size_bytes == 0: + return '0B' + size_name = ('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB') + i = int(math.floor(math.log(size_bytes, 1024))) + p = math.pow(1024, i) + s = round(size_bytes / p, 2) + return f'{s} {size_name[i]}' diff --git a/automon/helpers/networking.py b/automon/helpers/networking.py index e8d8d840..3b335133 100644 --- a/automon/helpers/networking.py +++ b/automon/helpers/networking.py @@ -1,9 +1,10 @@ import socket from urllib.parse import urlparse -from automon.log import Logging +from automon import log -log = Logging(name='Networking', level=Logging.INFO) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) class Networking: @@ -23,10 +24,10 @@ def check_connection(url, timeout: int = 1): s.settimeout(timeout) s.connect((host, port)) s.close() - log.debug(f'SUCCESS {url}') + logger.debug(f'SUCCESS {url}') return True except Exception as e: - log.error(f'FAILED {url} {e}', enable_traceback=False) + logger.error(f'{url} {e}') return False @staticmethod diff --git a/automon/helpers/os/__init__.py b/automon/helpers/os/__init__.py deleted file mode 100644 index 8c5a7296..00000000 --- a/automon/helpers/os/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .environ import environ diff --git a/automon/helpers/os/environ.py b/automon/helpers/os/environ.py deleted file mode 100644 index 9d02c1c1..00000000 --- a/automon/helpers/os/environ.py +++ /dev/null @@ -1,12 +0,0 @@ -import os - - -def environ(env_var: str, default: any = None): - env = os.getenv(env_var) - if env: - if f'{env}'.lower() == 'true': - return True - if f'{env}'.lower() == 'false': - return False - return env - return default diff --git a/automon/helpers/osWrapper/__init__.py b/automon/helpers/osWrapper/__init__.py new file mode 100644 index 00000000..df18ab27 --- /dev/null +++ b/automon/helpers/osWrapper/__init__.py @@ -0,0 +1 @@ +from .environ import * diff --git a/automon/helpers/osWrapper/environ.py b/automon/helpers/osWrapper/environ.py new file mode 100644 index 00000000..029b6f0e --- /dev/null +++ b/automon/helpers/osWrapper/environ.py @@ -0,0 +1,23 @@ +import os + + +def environ(env_var: str, default: any = None) -> bool or str or None: + """Get environment variable, else return default""" + env = os.getenv(env_var) + if env: + if f'{env}'.lower() == 'true': + return True + if f'{env}'.lower() == 'false': + return False + return f'{env}'.strip() + return default + + +def environ_list(env_var: str, delimiter: str = ',', default: list = []) -> list: + """Get environment variable as comma-separated, else return default""" + env = os.getenv(env_var) + if env: + env = env.split(delimiter) + env = [str(x).strip() for x in env] + return env + return default diff --git a/automon/helpers/regex.py b/automon/helpers/regex.py index 8d8200aa..8c0bfad3 100755 --- a/automon/helpers/regex.py +++ b/automon/helpers/regex.py @@ -1,8 +1,5 @@ import re -from automon.helpers import assertions -from automon.helpers.grok import GrokLegacy - def geolocation(string): """Parse any kind of geolocation data""" @@ -10,7 +7,7 @@ def geolocation(string): # TODO: parse any geolocation info (long, lat) pattern = [ - '([Long]{4}:[ ]?[0-9\.]*,[ ]?[Lat]{3}:[ ]?[0-9\.]*)' + r'([Long]{4}:[ ]?[0-9\.]*,[ ]?[Lat]{3}:[ ]?[0-9\.]*)' ] for p in pattern: @@ -19,45 +16,3 @@ def geolocation(string): if r: return r - - -class Magic: - - @staticmethod - def magic_box(data: str) -> dict: - """Do some grok magic on anything given and find everything""" - - all_matches = dict() - grok = GrokLegacy.g - - for pattern in grok: - - try: - compile_regex = re.compile(grok[pattern]) # compiled regex from g dict - result = re.findall(compile_regex, data) # regex search result - - if result: - list_results = [] - - if assertions.assert_list(result): - _list = result - for _item in _list: - - if assertions.assert_tuple(_item): - _tuple = _item - for _item2 in _tuple: - if len(_item2) > 0: - list_results.append(_item2) - - elif assertions.assert_string(_item): - if len(_item) > 0: - list_results.append(_item) - - if len(list_results) > 0: - all_matches[pattern] = list_results - - except Exception as err: - # print('[!] Failed pattern: ' + grok_all_string[p] + ' => ' + str(err)) - pass - - return all_matches diff --git a/automon/helpers/sleeper.py b/automon/helpers/sleeper.py index 49d777e2..400d9a64 100644 --- a/automon/helpers/sleeper.py +++ b/automon/helpers/sleeper.py @@ -1,83 +1,163 @@ import time import random +import asyncio -from automon.log import Logging +from automon import log -log = Logging(__name__, level=Logging.INFO) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Sleeper: @staticmethod - def seconds(caller: object or str, seconds: int) -> time.sleep: + def seconds(seconds: int) -> time.sleep: """Sleep for this many seconds""" sleep = seconds - log.info(f'[{Sleeper.seconds.__name__}] [{caller}] sleeping for {sleep} seconds') + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def minute(caller: object or str, sleep: int = 60) -> time.sleep: + async def seconds_async(seconds: int) -> asyncio.sleep: + """async Sleep for this many seconds""" + + sleep = seconds + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def minute(minutes: int = 1) -> time.sleep: """Sleep for a minute""" - log.info(f'[{Sleeper.minute.__name__}] [{caller}] sleeping for {sleep} seconds') + sleep = round(minutes * 60) + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def within_a_minute(caller, sleep: int = None): + async def minute_async(minutes: int = 1) -> time.sleep: + """Sleep for a minute""" + + sleep = round(minutes * 60) + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def within_a_minute(sleep: int = None): """Sleep for a random minute""" - sleep = sleep if isinstance(sleep, int) else random.choice(range(1, 1 * 60)) - log.info(f'[{Sleeper.within_a_minute.__name__}] [{caller}] sleeping for {sleep} seconds') + sleep = sleep if isinstance(sleep, int) else \ + random.choice(range(1, 1 * 60)) + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def minutes(caller, minutes: int): + async def within_a_minute_async(sleep: int = None): + """Sleep for a random minute""" + + sleep = sleep if isinstance(sleep, int) else \ + random.choice(range(1, 1 * 60)) + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def minutes(minutes: int): """Sleep for this many minutes""" sleep = minutes * 60 - log.info(f'[{Sleeper.minutes.__name__}] [{caller}] sleeping for {sleep} minutes') + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def hour(caller, hour: int = 1): + async def minutes_async(minutes: int): + """Sleep for this many minutes""" + + sleep = minutes * 60 + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def hour(hour: int = 1): """At some time within an hour, this will run""" sleep = hour if not hour else random.choice( range(1, hour * 60 * 60)) - log.info(f'[{Sleeper.hour.__name__}] [{caller}] sleeping for {sleep} seconds') + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def hours(caller, hours): + async def hour_async(hour: int = 1): + """At some time within an hour, this will run""" + + sleep = hour if not hour else random.choice( + range(1, hour * 60 * 60)) + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def hours(hours): """Sleep for this many hours""" sleep = hours * 60 * 60 - log.info(f'[{Sleeper.hours.__name__}] [{caller}] sleeping for {hours} hours') + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def day(caller, hours: int = 24): + async def hours_async(hours): + """Sleep for this many hours""" + + sleep = hours * 60 * 60 + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def day(hours: int = 24): """At some time within 24 hours, this will run""" sleep = hours if not hours else random.choice( range(1, hours * 60 * 60)) - log.info(f'[{Sleeper.day.__name__}] [{caller}] sleeping for {sleep} seconds') + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def daily(caller, hours: int = 24): + async def day_async(hours: int = 24): + """At some time within 24 hours, this will run""" + + sleep = hours if not hours else random.choice( + range(1, hours * 60 * 60)) + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def daily(hours: int = 24): """Sleep for one day""" sleep = hours if not hours else hours * 60 * 60 - log.info(f'[{Sleeper.daily.__name__}] [{caller}] sleeping for {sleep} seconds') + logger.debug(f'{sleep}') return time.sleep(sleep) @staticmethod - def time_range(caller, seconds: int): - """Sleep for a random range - """ + async def daily_async(hours: int = 24): + """Sleep for one day""" + + sleep = hours if not hours else hours * 60 * 60 + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) + + @staticmethod + def time_range(seconds: int): + """Sleep for a random range""" + sleep = seconds if not seconds else random.choice( range(1, seconds)) - log.info(f'[{Sleeper.time_range.__name__}] [{caller}] sleeping for {sleep} seconds') + logger.debug(f'{sleep}') return time.sleep(sleep) + + @staticmethod + async def time_range_async(seconds: int): + """Sleep for a random range""" + + sleep = seconds if not seconds else random.choice( + range(1, seconds)) + logger.debug(f'{sleep}') + return await asyncio.sleep(sleep) diff --git a/automon/helpers/subprocess/run.py b/automon/helpers/subprocess/run.py deleted file mode 100644 index f58e057c..00000000 --- a/automon/helpers/subprocess/run.py +++ /dev/null @@ -1,111 +0,0 @@ -import subprocess - -from pprint import pprint -from subprocess import PIPE - -import automon - -from automon.helpers import Dates - - -class Run: - - def __init__(self, command: str = None, *args, **kwargs): - """Run shell""" - self._log = automon.Logging(name=Run.__name__, level=automon.Logging.DEBUG) - - self.last_run = None - self.command = '' - - self.stdout = b'' - self.stderr = b'' - - self.call = None - self.returncode = None - - if command: - self.run(command=command, *args, **kwargs) - - def rc(self): - if self.call: - self.returncode = self.call.returncode - return self.returncode - - def Popen(self, *args, **kwargs): - return self.run(*args, **kwargs) - - def pretty(self): - return pprint(self.stdout.decode()) - - def print(self): - return print(self.stdout.decode()) - - def set_command(self, command: str) -> bool: - if command: - self.command = command - return True - return False - - def which(self, program: str, *args, **kwargs) -> bool: - """runs which - - :param program: - :return: - """ - if program: - return self.run(command=f'which {program}', *args, **kwargs) - return False - - def run_command(self, *args, **kwargs) -> bool: - """alias to run""" - return self.run(*args, **kwargs) - - def run(self, command: str = None, - text: bool = False, - inBackground: bool = False, - inShell: bool = False, - **kwargs) -> bool: - - if command: - command = self._command(command) - - elif self.command: - command = self._command(self.command) - - if inBackground or inShell: - self.call = subprocess.Popen(command, text=text, **kwargs) - return True - else: - self.call = subprocess.Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE, text=text, **kwargs) - stdout, stderr = self.call.communicate() - # call.wait() - - timestamp = Dates.iso() - - self.last_run = timestamp - self.stdout = stdout - self.stderr = stderr - self.returncode = self.call.returncode - - if self.returncode == 0: - return True - - return False - - def _command(self, command: str) -> list: - if isinstance(command, str): - command = f'{command}'.split(' ') - self.command = command - return self.command - - def __repr__(self) -> str: - return f'{self.command} stderr: ({len(self.stderr) / 1024} Kb) stdout: ({round(len(self.stdout) / 1024, 2)} Kb)' - - def __len__(self): - return sum([len(self.stdout), len(self.stderr)]) - - def __eq__(self, other): - if isinstance(other, Run): - self.command == other.command - return True - return False diff --git a/automon/helpers/subprocess/__init__.py b/automon/helpers/subprocessWrapper/__init__.py similarity index 100% rename from automon/helpers/subprocess/__init__.py rename to automon/helpers/subprocessWrapper/__init__.py diff --git a/automon/helpers/subprocessWrapper/exceptions.py b/automon/helpers/subprocessWrapper/exceptions.py new file mode 100644 index 00000000..1ab30b73 --- /dev/null +++ b/automon/helpers/subprocessWrapper/exceptions.py @@ -0,0 +1,2 @@ +class NotSupportedCommand(Exception): + pass diff --git a/automon/helpers/subprocessWrapper/run.py b/automon/helpers/subprocessWrapper/run.py new file mode 100644 index 00000000..40f77539 --- /dev/null +++ b/automon/helpers/subprocessWrapper/run.py @@ -0,0 +1,221 @@ +import subprocess + +from pprint import pprint + +from automon import log +from automon.helpers.dates import Dates + +from .exceptions import * + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class Run: + command: str + + def __init__(self, command: str = None, **kwargs): + """Run shell""" + + self.last_run = None + self.command = command + + self._stdout = b'' + self._stderr = b'' + + self.call = None + self.returncode = None + + if command: + self.run(command=command, **kwargs) + + def rc(self): + if self.call: + self.returncode = self.call.returncode + return self.returncode + + def Popen(self, *args, **kwargs): + return self.run(*args, **kwargs) + + def pretty(self): + template = f"""stdout: +{self.stdout.decode()} +stderr: +{self.stderr.decode()}""" + pprint(template) + + def print(self): + template = f"""stdout: +{self.stdout.decode()} + +stderr: +{self.stderr.decode()}""" + print(template) + + def set_command(self, command: str) -> bool: + logger.debug(command) + if command: + self.command = command + return True + return False + + @property + def stdout(self) -> bytes: + if type(self._stdout) is str: + return str(self._stdout).encode() + + return self._stdout + + @property + def stdout_lines(self): + return self.stdout.decode().splitlines() + + @property + def stderr(self) -> bytes: + if type(self._stderr) is str: + return str(self._stderr).encode() + + return self._stderr + + @property + def stderr_lines(self): + return self.stderr.decode().splitlines() + + def which(self, program: str, *args, **kwargs) -> bool: + """runs which + + :param program: + :return: + """ + logger.debug(str(dict( + which=program, + args=args, + kwargs=kwargs, + ))) + return self.run(command=f'which {program}', *args, **kwargs) + + def run_command(self, *args, **kwargs) -> bool: + """alias to run""" + logger.debug(str(dict( + args=args, + kwargs=kwargs, + ))) + return self.run(*args, **kwargs) + + def run( + self, + command: str, + pipe: bool = False, + text: bool = False, + shell: bool = False, + sanitize_command: bool = True, + **kwargs + ) -> bool: + + if not pipe: + self.command = command + + if sanitize_command and not shell: + command = self.sanitize_command(command) + + if not command: + logger.error(str(dict( + command=command, + text=text, + shell=shell, + sanitize_command=sanitize_command, + kwargs=kwargs, + ))) + raise SyntaxError(f'command cannot be empty, {command}') + + logger.debug(str(dict( + command=command, + text=text, + shell=shell, + sanitize_command=sanitize_command, + kwargs=kwargs, + ))) + + try: + + self.call = subprocess.Popen( + args=command, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=text, + shell=shell, + **kwargs) + + stdout, stderr = self.call.communicate() + # self.call.wait() + + timestamp = Dates.iso() + + self.last_run = timestamp + self._stdout = stdout + self._stderr = stderr + self.returncode = self.call.returncode + + if self.returncode == 0: + logger.debug(str(dict( + stdout_KB=round(len(self.stdout) / 1024, 2), + stderr_KB=round(len(self.stderr) / 1024, 2), + ))) + return True + + except Exception as error: + self._stderr = f'{error}'.encode() + logger.error(f'{error}') + raise RuntimeError(error) + + logger.error(str(dict( + stdout_KB=round(len(self.stdout) / 1024, 2), + stderr_KB=round(len(self.stderr) / 1024, 2), + ))) + return False + + def sanitize_command(self, command: str) -> [str]: + + if isinstance(command, str): + + if '|' in command: + command = self.sanitize_command_pipe(command=command) + command = [self.sanitize_command_spaces(command=cmd) for cmd in command] + else: + command = self.sanitize_command_spaces(command=command) + + logger.debug(str(dict( + command=command + ))) + return command + + def sanitize_command_pipe(self, command: str) -> [str]: + """support for shell command piping""" + error = f'Pipes are not supported! To use run(shell=True). {command}' + logger.error(error) + raise NotSupportedCommand(error) + + split_command = f'{command}'.split('|') + return split_command + + def sanitize_command_spaces(self, command: str) -> [str]: + split_command = f'{command}'.split(' ') + split_command = [str(x).strip() for x in split_command] + split_command = [x for x in split_command if x] + return split_command + + def __repr__(self) -> str: + return str(dict( + command=self.command, + stdout=f'{round(len(self.stdout) / 1024, 2)} KB', + stderr=f'{round(len(self.stderr) / 1024, 2)} KB', + )) + + def __len__(self): + return sum([len(self.stdout), len(self.stderr)]) + + def __eq__(self, other): + if isinstance(other, Run): + self.command == other.command + return True + return False diff --git a/automon/helpers/threading/__init__.py b/automon/helpers/subprocessWrapper/tests/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from automon/helpers/threading/__init__.py rename to automon/helpers/subprocessWrapper/tests/__init__.py diff --git a/automon/helpers/subprocessWrapper/tests/test_run.py b/automon/helpers/subprocessWrapper/tests/test_run.py new file mode 100644 index 00000000..46fe1632 --- /dev/null +++ b/automon/helpers/subprocessWrapper/tests/test_run.py @@ -0,0 +1,18 @@ +import unittest + +from automon.helpers.subprocessWrapper import Run + +run = Run() + + +class TestRun(unittest.TestCase): + def test_false(self): + self.assertRaises( + SyntaxError, + run.run, + '' + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/core/test_runner.py b/automon/helpers/subprocessWrapper/tests/test_runner.py similarity index 100% rename from automon/tests/core/test_runner.py rename to automon/helpers/subprocessWrapper/tests/test_runner.py diff --git a/automon/helpers/subprocessWrapper/tests/test_sanitize.py b/automon/helpers/subprocessWrapper/tests/test_sanitize.py new file mode 100644 index 00000000..ab3b5cfe --- /dev/null +++ b/automon/helpers/subprocessWrapper/tests/test_sanitize.py @@ -0,0 +1,19 @@ +import unittest + +from automon.helpers.subprocessWrapper import Run + +run = Run() + + +class TestRun(unittest.TestCase): + + def test_su(self): + cmd = [ + 'ls', + '-lh' + ] + self.assertTrue(run.run(cmd, sanitize_command=False)) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/helpers/subprocessWrapper/tests/test_text.py b/automon/helpers/subprocessWrapper/tests/test_text.py new file mode 100644 index 00000000..f2d4d199 --- /dev/null +++ b/automon/helpers/subprocessWrapper/tests/test_text.py @@ -0,0 +1,14 @@ +import unittest + +from automon.helpers.subprocessWrapper import Run + + +class TestRun(unittest.TestCase): + def test_text(self): + run = Run() + run.run('ls', text=True) + self.assertEqual(type(run.stdout), bytes) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/flask/__init__.py b/automon/helpers/tests/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from automon/integrations/flask/__init__.py rename to automon/helpers/tests/__init__.py diff --git a/automon/tests/core/test_assertions.py b/automon/helpers/tests/test_assertions.py similarity index 100% rename from automon/tests/core/test_assertions.py rename to automon/helpers/tests/test_assertions.py diff --git a/automon/tests/core/test_healthcheck.py b/automon/helpers/tests/test_healthcheck.py similarity index 100% rename from automon/tests/core/test_healthcheck.py rename to automon/helpers/tests/test_healthcheck.py diff --git a/automon/tests/core/test_helpers.py b/automon/helpers/tests/test_helpers.py similarity index 58% rename from automon/tests/core/test_helpers.py rename to automon/helpers/tests/test_helpers.py index cdc35ed1..e9c2376f 100644 --- a/automon/tests/core/test_helpers.py +++ b/automon/helpers/tests/test_helpers.py @@ -5,11 +5,6 @@ class RegexTest(unittest.TestCase): - def test_magic(self): - self.assertTrue(Magic) - test = '100.15.96.234 helehleeajd' - self.assertTrue(Magic.magic_box(test)) - def test_geolocation(self): self.assertTrue(geolocation) diff --git a/automon/tests/core/test_liveliness.py b/automon/helpers/tests/test_liveliness.py similarity index 100% rename from automon/tests/core/test_liveliness.py rename to automon/helpers/tests/test_liveliness.py diff --git a/automon/tests/core/test_networking.py b/automon/helpers/tests/test_networking.py similarity index 100% rename from automon/tests/core/test_networking.py rename to automon/helpers/tests/test_networking.py diff --git a/automon/tests/core/test_sanitation.py b/automon/helpers/tests/test_sanitation.py similarity index 100% rename from automon/tests/core/test_sanitation.py rename to automon/helpers/tests/test_sanitation.py diff --git a/automon/helpers/tests/test_sleeper.py b/automon/helpers/tests/test_sleeper.py new file mode 100644 index 00000000..5ee265cf --- /dev/null +++ b/automon/helpers/tests/test_sleeper.py @@ -0,0 +1,31 @@ +import unittest + +from automon.helpers.sleeper import Sleeper + + +class SleeperTest(unittest.TestCase): + def test_Sleeper(self): + self.assertTrue(Sleeper) + self.assertTrue(Sleeper.seconds) + self.assertTrue(Sleeper.minute) + self.assertTrue(Sleeper.within_a_minute) + self.assertTrue(Sleeper.minutes) + self.assertTrue(Sleeper.hour) + self.assertTrue(Sleeper.hours) + self.assertTrue(Sleeper.day) + self.assertTrue(Sleeper.daily) + self.assertTrue(Sleeper.time_range) + + self.assertIsNone(Sleeper.seconds(0)) + self.assertIsNone(Sleeper.minute(0)) + self.assertIsNone(Sleeper.within_a_minute(0)) + self.assertIsNone(Sleeper.minutes(0)) + self.assertIsNone(Sleeper.hour(0)) + self.assertIsNone(Sleeper.hours(0)) + self.assertIsNone(Sleeper.day(0)) + self.assertIsNone(Sleeper.daily(0)) + self.assertIsNone(Sleeper.time_range(0)) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/helpers/tests/test_sleeper_async.py b/automon/helpers/tests/test_sleeper_async.py new file mode 100644 index 00000000..2f7dbc9f --- /dev/null +++ b/automon/helpers/tests/test_sleeper_async.py @@ -0,0 +1,14 @@ +import unittest +import asyncio + +from automon.helpers.sleeper import Sleeper + + +class SleeperTest(unittest.TestCase): + def test_Sleeper(self): + loop = asyncio.new_event_loop() + task = loop.run_until_complete(Sleeper.seconds_async(1)) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/__init__.py b/automon/helpers/threadingWrapper/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from automon/tests/__init__.py rename to automon/helpers/threadingWrapper/__init__.py diff --git a/automon/helpers/threading/initialize_threading.py b/automon/helpers/threadingWrapper/initialize_threading.py old mode 100755 new mode 100644 similarity index 100% rename from automon/helpers/threading/initialize_threading.py rename to automon/helpers/threadingWrapper/initialize_threading.py diff --git a/automon/helpers/threading/worker_thread.py b/automon/helpers/threadingWrapper/worker_thread.py old mode 100755 new mode 100644 similarity index 100% rename from automon/helpers/threading/worker_thread.py rename to automon/helpers/threadingWrapper/worker_thread.py diff --git a/automon/integrations/beautifulsoupWrapper/__init__.py b/automon/integrations/beautifulsoupWrapper/__init__.py new file mode 100644 index 00000000..37058512 --- /dev/null +++ b/automon/integrations/beautifulsoupWrapper/__init__.py @@ -0,0 +1 @@ +from .client import BeautifulSoupClient diff --git a/automon/integrations/beautifulsoupWrapper/client.py b/automon/integrations/beautifulsoupWrapper/client.py new file mode 100644 index 00000000..cd330f6e --- /dev/null +++ b/automon/integrations/beautifulsoupWrapper/client.py @@ -0,0 +1,25 @@ +from bs4 import BeautifulSoup + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class BeautifulSoupClient(object): + + def __init__(self, bs: BeautifulSoup = None): + self.bs = bs + + def read_markup(self, markup: str, features: str = 'lxml'): + """read markup with beautifulsoup""" + try: + self.bs = BeautifulSoup( + markup=markup or self.markup, + features=features + ) + logger.info(f'read_markup success ({len(markup)} B)') + except Exception as e: + logger.error(f'read_markup failed ({len(markup)} B): {e}') + + return self diff --git a/automon/integrations/cryptocurrency/accounting.py b/automon/integrations/cryptocurrency/accounting.py index bccd2c35..726c4fc1 100644 --- a/automon/integrations/cryptocurrency/accounting.py +++ b/automon/integrations/cryptocurrency/accounting.py @@ -1,16 +1,18 @@ import os -from automon.log import Logging +from automon import log from .robinhood import Robinhood from .coinbase import Coinbase from .other import Other +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class CryptoAccounting: def __init__(self, csvs: str = None): - self._log = Logging(name=CryptoAccounting.__name__, level=Logging.DEBUG) self.accounts = [] @@ -28,17 +30,17 @@ def __init__(self, csvs: str = None): self.auto_detect(file_path) def auto_detect(self, csv): - self._log.debug(f'supported exchanges: {self.supported_exchanges}') + logger.debug(f'supported exchanges: {self.supported_exchanges}') for exchange in self.supported_exchanges: - self._log.debug(f'reading exchange: {exchange}') + logger.debug(f'reading exchange: {exchange}') x = exchange(csv) if x.is_match: - self._log.debug(f'exchange matched: {exchange}') + logger.debug(f'exchange matched: {exchange}') if x not in self.accounts: - self._log.info(f'added {x}') + logger.info(f'added {x}') self.accounts.append(x) return True - self._log.debug(f'already added: {x}') + logger.debug(f'already added: {x}') else: o = Other(csv) if o not in self.accounts: diff --git a/automon/integrations/cryptocurrency/coinbase.py b/automon/integrations/cryptocurrency/coinbase.py index 49367b1d..efa5c1aa 100644 --- a/automon/integrations/cryptocurrency/coinbase.py +++ b/automon/integrations/cryptocurrency/coinbase.py @@ -1,10 +1,12 @@ -from automon.log import Logging +from automon import log from automon.integrations.datascience import Pandas +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class Coinbase: def __init__(self, csv): - self._log = Logging(name=Coinbase.__name__, level=Logging.DEBUG) self.csv = None self.df = None diff --git a/automon/integrations/cryptocurrency/other.py b/automon/integrations/cryptocurrency/other.py index 00783904..3a4e85bd 100644 --- a/automon/integrations/cryptocurrency/other.py +++ b/automon/integrations/cryptocurrency/other.py @@ -1,11 +1,12 @@ -from automon.log import Logging +from automon import log from automon.integrations.datascience import Pandas +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class Other: def __init__(self, csv): - self._log = Logging(name=Other.__name__, level=Logging.DEBUG) - self.csv = csv self.df = OtherCSV(csv).df @@ -14,15 +15,14 @@ def __repr__(self): def __eq__(self, other): if self.df.equals(other.df): - self._log.debug(f'same {other}') + logger.debug(f'same {other}') return True - self._log.debug(f'different {other}') + logger.debug(f'different {other}') return False class OtherCSV: def __init__(self, csv): - self._log = Logging(name=OtherCSV.__name__, level=Logging.DEBUG) self.csv = csv self.df = Pandas().read_csv(csv) @@ -33,7 +33,7 @@ def __repr__(self): def __eq__(self, other): if isinstance(other, OtherCSV): if self.df == other.df: - self._log.debug(f'same {other}') + logger.debug(f'same {other}') return True - self._log.debug(f'different {other}') + logger.debug(f'different {other}') return False diff --git a/automon/integrations/cryptocurrency/robinhood.py b/automon/integrations/cryptocurrency/robinhood.py index 558c0775..ec3a683a 100644 --- a/automon/integrations/cryptocurrency/robinhood.py +++ b/automon/integrations/cryptocurrency/robinhood.py @@ -1,10 +1,12 @@ -from automon.log import Logging +from automon import log from automon.integrations.datascience import Pandas +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class Robinhood: def __init__(self, csv): - self._log = Logging(name=Robinhood.__name__, level=Logging.DEBUG) self.csv = None self.df = None @@ -13,7 +15,7 @@ def __init__(self, csv): r = RobinhoodCSV(csv) if r.matches: - self._log.info(f'matched {r}') + logger.info(f'matched {r}') self.is_match = True self.csv = csv self.df = r.df @@ -39,14 +41,13 @@ def __init__(self, csv): ASSET NAME,RECEIVED DATE,COST BASIS(USD),DATE SOLD,PROCEEDS """ - self._log = Logging(name=RobinhoodCSV.__name__, level=Logging.DEBUG) self.csv = csv self.df = None self.matches = None if 'Provider: Robinhood Crypto LLC' in Pandas().read_csv(csv): - self._log.debug(f'matched {csv}') + logger.debug(f'matched {csv}') self.matches = True with open(csv) as f: @@ -60,7 +61,18 @@ def __repr__(self): def __eq__(self, other): if isinstance(other, RobinhoodCSV): if self.df == other.df: - self._log.debug(f'same {other}') + logger.debug(f'same {other}') return True - self._log.debug(f'different {other}') + logger.debug(f'different {other}') return False + + +class RobinhoodAPI(object): + summary = 'https://status.robinhood.com/api/v2/summary.json' + status = 'https://status.robinhood.com/api/v2/status.json' + components = 'https://status.robinhood.com/api/v2/components.json' + incidents_unresolved = 'https://status.robinhood.com/api/v2/incidents/unresolved.json' + incidents_all = 'https://status.robinhood.com/api/v2/incidents.json' + scheduled_maintenance_upcoming = 'https://status.robinhood.com/api/v2/scheduled-maintenances/upcoming.json' + scheduled_maintenance_active = 'https://status.robinhood.com/api/v2/scheduled-maintenances/active.json' + scheduled_maintenance_all = 'https://status.robinhood.com/api/v2/scheduled-maintenances.json' diff --git a/automon/tests/core/__init__.py b/automon/integrations/cryptocurrency/tests/__init__.py similarity index 100% rename from automon/tests/core/__init__.py rename to automon/integrations/cryptocurrency/tests/__init__.py diff --git a/automon/tests/integrations/test_crypto.py b/automon/integrations/cryptocurrency/tests/test_crypto.py similarity index 100% rename from automon/tests/integrations/test_crypto.py rename to automon/integrations/cryptocurrency/tests/test_crypto.py diff --git a/automon/integrations/datadogWrapper/__init__.py b/automon/integrations/datadogWrapper/__init__.py new file mode 100644 index 00000000..a4c0e4a8 --- /dev/null +++ b/automon/integrations/datadogWrapper/__init__.py @@ -0,0 +1,4 @@ +from .client import DatadogClientRest +from .config import DatadogConfigRest +from .client_opentelemetry import DatadogOpenTelemetryClient +from .config_opentelemetry import DatadogOpenTelemetryConfig diff --git a/automon/integrations/datadogWrapper/api/__init__.py b/automon/integrations/datadogWrapper/api/__init__.py new file mode 100644 index 00000000..04c187c2 --- /dev/null +++ b/automon/integrations/datadogWrapper/api/__init__.py @@ -0,0 +1,2 @@ +from .v1 import V1 +from .v2 import V2 diff --git a/automon/integrations/datadogWrapper/api/v1.py b/automon/integrations/datadogWrapper/api/v1.py new file mode 100644 index 00000000..bf61327b --- /dev/null +++ b/automon/integrations/datadogWrapper/api/v1.py @@ -0,0 +1,14 @@ +class V1(object): + + def __init__(self, host): + self.endpoint = host + + @property + def api(self): + self.endpoint += '/api/v1' + return self + + @property + def validate(self): + self.endpoint += '/validate' + return self diff --git a/automon/integrations/datadogWrapper/api/v2.py b/automon/integrations/datadogWrapper/api/v2.py new file mode 100644 index 00000000..4ed0109e --- /dev/null +++ b/automon/integrations/datadogWrapper/api/v2.py @@ -0,0 +1,17 @@ +from automon import Networking + + +class V2(object): + + def __init__(self, host): + self.endpoint = host + + @property + def api(self): + self.endpoint += '/api/v2' + return self + + @property + def logs(self): + self.endpoint += '/logs' + return self diff --git a/automon/integrations/datadogWrapper/client.py b/automon/integrations/datadogWrapper/client.py new file mode 100644 index 00000000..749544d6 --- /dev/null +++ b/automon/integrations/datadogWrapper/client.py @@ -0,0 +1,48 @@ +from automon.integrations.requestsWrapper import RequestsClient +from automon import log + +from .config import DatadogConfigRest +from .api import V1, V2 + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.logging.DEBUG) + + +class DatadogClientRest(object): + + def __init__(self, host: str = None, api_key: str = None): + self.config = DatadogConfigRest(host=host, api_key=api_key) + self.requests = RequestsClient() + + async def is_ready(self): + if await self.config.is_ready(): + if await self.validate(): + return True + logger.error(f'client not ready') + + async def log(self, ddsource: str, hostname: str, service: str, message: str, ddtags: str = 'env:test,version:0.1'): + url = V2(self.config.host_log).api.logs.endpoint + + log = { + "ddsource": ddsource, + "ddtags": ddtags, + "hostname": hostname, + "service": service, + 'message': message + } + + logger.debug(log) + + response = await self.requests.post(url=url, json=log) + response_log = await self.requests.to_dict() + + return response_log + + async def validate(self): + url = V1(self.config.host).api.validate.endpoint + + self.requests.session.headers.update(await self.config.headers()) + response = await self.requests.get(url=url) + response_validate = await self.requests.to_dict() + + return response_validate diff --git a/automon/integrations/datadogWrapper/client_opentelemetry.py b/automon/integrations/datadogWrapper/client_opentelemetry.py new file mode 100644 index 00000000..d7b24ab6 --- /dev/null +++ b/automon/integrations/datadogWrapper/client_opentelemetry.py @@ -0,0 +1,17 @@ +from automon import log + +from .config_opentelemetry import DatadogOpenTelemetryConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.logging.DEBUG) + + +class DatadogOpenTelemetryClient(object): + + def __init__(self, host: str = None, api_key: str = None, app_key: str = None): + self.config = DatadogOpenTelemetryConfig(host=host, api_key=api_key, app_key=app_key) + + async def is_ready(self): + if await self.config.is_ready(): + return True + logger.error(f'client not ready') diff --git a/automon/integrations/datadogWrapper/config.py b/automon/integrations/datadogWrapper/config.py new file mode 100644 index 00000000..b6b66c11 --- /dev/null +++ b/automon/integrations/datadogWrapper/config.py @@ -0,0 +1,29 @@ +from automon import environ +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.logging.DEBUG) + + +class DatadogConfigRest(object): + api_key: str + + def __init__(self, host: str = 'https://api.datadoghq.com', api_key: str = None, app_key: str = None): + self.host = host or environ('DD_SITE') + self.host_log = 'https://http-intake.logs.us5.datadoghq.com' + self.api_key = api_key or environ('DD_API_KEY') + self.app_key = app_key or environ('DD_APP_KEY') + + async def is_ready(self): + if self.host and self.api_key and self.app_key: + return True + logger.error(f'missing DD_SITE DD_API_KEY DD_APP_KEY') + + async def headers(self): + if await self.is_ready(): + return { + 'DD-API-KEY': f'{self.api_key}', + 'DD-APPLICATION-KEY': f'{self.app_key}', + 'Accept': 'application/json', + 'Content-Type': 'application/json', + } diff --git a/automon/integrations/datadogWrapper/config_opentelemetry.py b/automon/integrations/datadogWrapper/config_opentelemetry.py new file mode 100644 index 00000000..027c5304 --- /dev/null +++ b/automon/integrations/datadogWrapper/config_opentelemetry.py @@ -0,0 +1,37 @@ +import os +import opentelemetry +from opentelemetry.trace import set_tracer_provider + +from automon import environ +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.logging.DEBUG) + + +class DatadogOpenTelemetryConfig(object): + + def __init__(self, host: str = 'https://api.datadoghq.com', api_key: str = None, app_key: str = None): + self.host = host or environ('DD_SITE') + self.api_key = api_key or environ('DD_API_KEY') + self.app_key = app_key or environ('DD_APP_KEY') + + self.set_tracer_provider = False + self.ddtrace_provider = None + + async def is_ready(self): + if self.set_tracer_provider: + return True + logger.error(f'run {DatadogOpenTelemetryConfig.__name__}.{self.instrumentation.__name__}') + + async def instrumentation(self): + # Must be set before ddtrace is imported! + os.environ["DD_TRACE_OTEL_ENABLED"] = "true" + + import ddtrace.opentelemetry + + self.ddtrace_provider = ddtrace.opentelemetry.TracerProvider() + opentelemetry.trace.set_tracer_provider(self.ddtrace_provider) + self.set_tracer_provider = True + + return self.set_tracer_provider diff --git a/automon/tests/integrations/__init__.py b/automon/integrations/datadogWrapper/tests/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from automon/tests/integrations/__init__.py rename to automon/integrations/datadogWrapper/tests/__init__.py diff --git a/automon/integrations/datadogWrapper/tests/test_auth.py b/automon/integrations/datadogWrapper/tests/test_auth.py new file mode 100644 index 00000000..6f0b53ea --- /dev/null +++ b/automon/integrations/datadogWrapper/tests/test_auth.py @@ -0,0 +1,20 @@ +import asyncio +import unittest + +from automon.integrations.datadogWrapper import DatadogClientRest + + +class MyTestCase(unittest.TestCase): + client = DatadogClientRest() + + if asyncio.run(client.is_ready()): + def test_auth(self): + self.assertTrue(asyncio.run( + self.client.validate() + )) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/datadogWrapper/tests/test_client_opentelemetry.py b/automon/integrations/datadogWrapper/tests/test_client_opentelemetry.py new file mode 100644 index 00000000..791f17a0 --- /dev/null +++ b/automon/integrations/datadogWrapper/tests/test_client_opentelemetry.py @@ -0,0 +1,22 @@ +import asyncio +import unittest + +from automon.integrations.datadogWrapper import DatadogOpenTelemetryClient + + +class MyTestCase(unittest.TestCase): + client = DatadogOpenTelemetryClient() + + asyncio.run(client.config.instrumentation()) + + if asyncio.run(client.is_ready()): + def test_ready(self): + self.assertTrue(asyncio.run( + self.client.is_ready() + )) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/datadogWrapper/tests/test_config_opentelemetry.py b/automon/integrations/datadogWrapper/tests/test_config_opentelemetry.py new file mode 100644 index 00000000..6e06dfad --- /dev/null +++ b/automon/integrations/datadogWrapper/tests/test_config_opentelemetry.py @@ -0,0 +1,19 @@ +import asyncio +import unittest + +from automon.integrations.datadogWrapper import DatadogOpenTelemetryConfig + + +class MyTestCase(unittest.TestCase): + test = DatadogOpenTelemetryConfig() + + def test_instrumentation(self): + self.assertTrue(asyncio.run( + self.test.instrumentation() + )) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/datadogWrapper/tests/test_log.py b/automon/integrations/datadogWrapper/tests/test_log.py new file mode 100644 index 00000000..242a0d2e --- /dev/null +++ b/automon/integrations/datadogWrapper/tests/test_log.py @@ -0,0 +1,31 @@ +import asyncio +import unittest + +from automon.integrations.datadogWrapper import DatadogClientRest +from automon.integrations.openTelemetryWrapper import OpenTelemetryClient + + +class MyTestCase(unittest.TestCase): + client = DatadogClientRest() + client_tracer = OpenTelemetryClient() + + def test_log(self): + if asyncio.run(self.client.is_ready()): + + asyncio.run(self.client_tracer.config.test()) + + spans = asyncio.run(self.client_tracer.to_datadog()) + for span in spans: + asyncio.run( + self.client.log( + ddsource=span['ddsource'], + ddtags=span['ddtags'], + hostname=span['hostname'], + service=span['service'], + message=span['message'], + )) + + pass + + if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/datascience/pandas/dataframe.py b/automon/integrations/datascience/pandas/dataframe.py index 6bd282fd..62f064fb 100644 --- a/automon/integrations/datascience/pandas/dataframe.py +++ b/automon/integrations/datascience/pandas/dataframe.py @@ -1,10 +1,12 @@ import pandas -from automon.log import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) def DataFrame(*args, **kwargs) -> pandas.DataFrame: - log = Logging('DataFrame', level=Logging.ERROR) df = pandas.DataFrame(*args, **kwargs) - log.debug(df) + logger.debug(df) return df diff --git a/automon/integrations/datascience/pandas/pandas.py b/automon/integrations/datascience/pandas/pandas.py index 8227ee44..dedd09e7 100644 --- a/automon/integrations/datascience/pandas/pandas.py +++ b/automon/integrations/datascience/pandas/pandas.py @@ -4,16 +4,18 @@ from io import StringIO from time import time as epoch_time -from automon import Logging +from automon import log from .series import Series from .dataframe import DataFrame +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class Pandas: def __init__(self): - self._log = Logging(name=Pandas.__name__, level=Logging.DEBUG) self.df = None self.csv_name = None @@ -31,14 +33,14 @@ def read_csv(self, file: str or StringIO, delimiter: str = None, **kwargs) -> pa self.csv_name = file self.df = pandas.read_csv(file, delimiter=delimiter, **kwargs) - self._log.info(f'imported {file}') + logger.info(f'imported {file}') return self.df def csv_from_string(self, csv, delimiter: str = None, **kwargs) -> pandas.read_csv: """read csv from string""" self.df = self.read_csv(StringIO(csv), delimiter=delimiter, **kwargs) - self._log.info(f'imported csv string {len(csv) / 1024 / 1024} MB') + logger.info(f'imported csv string {len(csv) / 1024 / 1024} MB') return self.df def export_csv(self, file: str = None, overwrite: bool = False, diff --git a/automon/integrations/datascience/pandas/series.py b/automon/integrations/datascience/pandas/series.py index faaddaa0..5d9030c4 100644 --- a/automon/integrations/datascience/pandas/series.py +++ b/automon/integrations/datascience/pandas/series.py @@ -1,10 +1,12 @@ import pandas -from automon import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) def Series(*args, **kwargs) -> pandas.Series: - log = Logging('Series', level=Logging.ERROR) s = pandas.Series(*args, **kwargs) - log.debug(s) + logger.debug(s) return s diff --git a/automon/tests/integrations/airport/__init__.py b/automon/integrations/datascience/tests/__init__.py similarity index 100% rename from automon/tests/integrations/airport/__init__.py rename to automon/integrations/datascience/tests/__init__.py diff --git a/automon/tests/integrations/test_datascience.py b/automon/integrations/datascience/tests/test_datascience.py similarity index 100% rename from automon/tests/integrations/test_datascience.py rename to automon/integrations/datascience/tests/test_datascience.py diff --git a/automon/integrations/elasticsearch/cleanup.py b/automon/integrations/elasticsearch/cleanup.py index 6018f0b6..7c08b0af 100644 --- a/automon/integrations/elasticsearch/cleanup.py +++ b/automon/integrations/elasticsearch/cleanup.py @@ -1,7 +1,8 @@ -from automon.log import Logging +from automon import log from automon.integrations.elasticsearch.client import ElasticsearchClient -log = Logging(__name__, Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Cleanup: diff --git a/automon/integrations/elasticsearch/client.py b/automon/integrations/elasticsearch/client.py index 7c3601c3..ade3d87f 100644 --- a/automon/integrations/elasticsearch/client.py +++ b/automon/integrations/elasticsearch/client.py @@ -5,10 +5,13 @@ from requests.auth import HTTPBasicAuth from elasticsearch import Elasticsearch -from automon.log import Logging +from automon import log from .config import ElasticsearchConfig from automon.helpers.sanitation import Sanitation +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class ElasticsearchClient(Elasticsearch): def __init__(self, host: str = None, @@ -31,8 +34,6 @@ def __init__(self, host: str = None, :param config: class ElasticsearchConfig """ - self._log = Logging(ElasticsearchClient.__name__, Logging.DEBUG) - self.config = config or ElasticsearchConfig( host=host, cloud_id=cloud_id, @@ -61,14 +62,13 @@ def _client(self): api_key=self.config.ELASTICSEARCH_API_KEY, request_timeout=self.config.ELASTICSEARCH_REQUEST_TIMEOUT, http_auth=self.config.http_auth, - use_ssl=self.config.use_ssl, - verify_certs=self.config.verify_certs, - connection_class=self.config.connection_class) - self._log.info(f'Connected to elasticsearch: {client}') + verify_certs=self.config.verify_certs + ) + logger.info(f'Connected to elasticsearch: {client}') return client except Exception as e: - self._log.error(f'Cannot connect to elasticsearch: {self.config.ELASTICSEARCH_HOST}, {e}') + logger.error(f'Cannot connect to elasticsearch: {self.config.ELASTICSEARCH_HOST}, {e}') return False @@ -79,7 +79,7 @@ def connected(self): if self.client.ping(): return True except Exception as e: - self._log.error(f'{e}', enable_traceback=False) + logger.error(f'{e}') return False def create_document(self, doc: dict, index: str = 'default', id: str = None): @@ -102,10 +102,10 @@ def create_document(self, doc: dict, index: str = 'default', id: str = None): r = self.results self.client.indices.refresh(index=index) self.success.append({'doc': doc, 'index': index, 'id': id, 'result': r}) - self._log.debug(f'created document: {index} {id} {doc}') + logger.debug(f'created document: {index} {id} {doc}') return True except Exception as e: - self._log.error(f'Create document failed: {e}') + logger.error(f'Create document failed: {e}') self.errors.append({'index': index, 'doc': doc, 'id': id, 'error': e}) return False @@ -116,11 +116,11 @@ def delete_index(self, index: str, **kwargs): r = self.results self.success.append({'delete index': index, 'result': r}) - self._log.debug(f'deleted index: {index}') + logger.debug(f'deleted index: {index}') return True except Exception as e: self.errors.append({'index': index, 'error': e}) - self._log.error(f'Delete index failed: {e}') + logger.error(f'Delete index failed: {e}') return False @@ -131,10 +131,10 @@ def delete_document(self, index: str, id: str = None): r = self.results self.success.append({'index': index, 'id': id, 'result': r}) - self._log.debug(f'deleted document: {index} {id}') + logger.debug(f'deleted document: {index} {id}') return True except Exception as e: - self._log.error(f'Delete document failed: {e}') + logger.error(f'Delete document failed: {e}') self.errors.append({'index': index, 'id': id, 'error': e}) return False @@ -146,19 +146,19 @@ def get_indices(self) -> bool: retrieved_indices = self.results self.indices = retrieved_indices - self._log.info(f'Retrieved {len(retrieved_indices)} indices') + logger.info(f'Retrieved {len(retrieved_indices)} indices') for i in retrieved_indices: info = retrieved_indices.get(i) date = int(info.get('settings').get('index').get('creation_date')) / 1000.0 date = datetime.fromtimestamp(date).strftime("%A, %B %d, %Y %I:%M:%S") - self._log.debug(f'Index: (created: {date})\t{i}') + logger.debug(f'Index: (created: {date})\t{i}') self.success.append({'indices': retrieved_indices}) - self._log.info(f'indices: {len(retrieved_indices)}') + logger.info(f'indices: {len(retrieved_indices)}') return True except Exception as e: - self._log.error(f'Failed to get indices: {e}') + logger.error(f'Failed to get indices: {e}') self.errors.append({'error': e}) return False @@ -169,7 +169,7 @@ def info(self) -> bool: self.results = self.client.info() return True except Exception as e: - self._log.error(f'Failed to get info:{e}') + logger.error(f'Failed to get info:{e}') self.errors.append({'error': e}) return False @@ -181,11 +181,11 @@ def ping(self): if self.connected(): try: self.client.ping() - self._log.debug(f'Ping successful') + logger.debug(f'Ping successful') return True except Exception as e: self.errors.append({'error': e}) - self._log.error(f'Ping failed: {e}') + logger.error(f'Ping failed: {e}') return False @@ -205,7 +205,7 @@ def rest(self, url: str) -> requests: return r except Exception as e: - self._log.error(f'REST request failed: {e}') + logger.error(f'REST request failed: {e}') self.errors.append({'url': url, 'error': e}) return False @@ -220,10 +220,10 @@ def search(self, search: dict = None, index: str = 'default'): r = self.results self.success.append({'search': search, 'index': index, 'result': r}) - self._log.debug(f'search :{search} {index}, result {r}') + logger.debug(f'search :{search} {index}, result {r}') return True except Exception as e: - self._log.error(f'Search failed: {e}') + logger.error(f'Search failed: {e}') self.errors.append({'search': search, 'index': index, 'error': e}) return False @@ -238,7 +238,7 @@ def search_summary(self, **kwargs): print(f'{hit.get("_source")}') self.success.append({'result': res}) - self._log.debug(f'search summary {res}') + logger.debug(f'search summary {res}') return True @@ -252,13 +252,13 @@ def search_summary(self, **kwargs): # num_indices = len(retrieved_indices) # # if not num_indices: - # self._log.debug(f'No indices found') + # logger.debug(f'No indices found') # return False # - # self._log.info(f'Search found {num_indices} indices') + # logger.info(f'Search found {num_indices} indices') # # for index in retrieved_indices: - # self._log.debug(index) + # logger.debug(index) # # # TODO: Find a way to undo index deletions # # One way could be to rename the indices and store a link to the new @@ -292,17 +292,17 @@ def search_indices(self, index_pattern): retrieved_indices = self.results num_indices = len(retrieved_indices) - self._log.info(f'Search found {num_indices} indices') + logger.info(f'Search found {num_indices} indices') self.success.append({'index pattern': index_pattern, 'result': retrieved_indices}) - self._log.debug(f'search indices: {index_pattern}') + logger.debug(f'search indices: {index_pattern}') return True except elasticsearch.exceptions.NotFoundError as e: - self._log.error( + logger.error( f"You provided the index pattern '{index_pattern}', but returned no results") self.errors.append({'index pattern': index_pattern, 'error': e}) except Exception as e: - self._log.error(f'Failed to search indices: {e}') + logger.error(f'Failed to search indices: {e}') self.errors.append({'index pattern': index_pattern, 'error': e}) return False diff --git a/automon/integrations/elasticsearch/config.py b/automon/integrations/elasticsearch/config.py index 2b30154f..48573905 100644 --- a/automon/integrations/elasticsearch/config.py +++ b/automon/integrations/elasticsearch/config.py @@ -1,11 +1,13 @@ import os -import logging -from automon.log import Logging +from automon import log from automon.helpers.sanitation import Sanitation as S -logging.getLogger('elasticsearch').setLevel(logging.ERROR) -logging.getLogger('urllib3.connectionpool').setLevel(logging.ERROR) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + +log.logging.getLogger('elasticsearch').setLevel(log.logging.ERROR) +log.logging.getLogger('urllib3.connectionpool').setLevel(log.logging.ERROR) class ElasticsearchConfig: @@ -19,14 +21,10 @@ def __init__(self, host: str = None, api_key_secret: str = None, request_timeout: int = 1, http_auth: tuple = None, - use_ssl: bool = True, verify_certs: bool = True, - connection_class: object = None, proxy=None): """elasticsearch config""" - self._log = Logging(ElasticsearchConfig.__name__, Logging.DEBUG) - # hosts self.ELASTICSEARCH_HOST = host or os.getenv('ELASTICSEARCH_HOSTS') self.ELASTICSEARCH_CLOUD_ID = cloud_id or os.getenv('ELASTICSEARCH_CLOUD_ID') @@ -46,9 +44,7 @@ def __init__(self, host: str = None, self.ELASTICSEARCH_PROXY = proxy or os.getenv('ELASTICSEARCH_PROXY') self.ELASTICSEARCH_REQUEST_TIMEOUT = request_timeout or os.getenv('ELASTICSEARCH_REQUEST_TIMEOUT') self.request_timeout = self.ELASTICSEARCH_REQUEST_TIMEOUT - self.use_ssl = use_ssl self.verify_certs = verify_certs - self.connection_class = connection_class if self.ELASTICSEARCH_USER and self.ELASTICSEARCH_PASSWORD: self.http_auth = (self.ELASTICSEARCH_USER, self.ELASTICSEARCH_PASSWORD) @@ -60,7 +56,7 @@ def __repr__(self): def __eq__(self, other): if not isinstance(other, ElasticsearchConfig): - self._log.warn(f'Not implemented') + logger.warning(f'Not implemented') return NotImplemented return self.ELASTICSEARCH_HOST == other.ELASTICSEARCH_HOST diff --git a/automon/integrations/elasticsearch/jvm.py b/automon/integrations/elasticsearch/jvm.py index cf38f399..d8b580cb 100644 --- a/automon/integrations/elasticsearch/jvm.py +++ b/automon/integrations/elasticsearch/jvm.py @@ -1,14 +1,16 @@ import json -from automon.log import Logging +from automon import log from automon.integrations.elasticsearch.metrics import Cluster from automon.integrations.elasticsearch.config import ElasticsearchConfig from automon.integrations.elasticsearch.client import ElasticsearchClient +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class ElasticsearchJvmMonitor: def __init__(self, config: ElasticsearchConfig = None): - self._log = Logging(ElasticsearchJvmMonitor.__name__, Logging.DEBUG) self._config = config if isinstance(config, ElasticsearchConfig) else ElasticsearchConfig() self._client = ElasticsearchClient(config) if isinstance(config, ElasticsearchConfig) else ElasticsearchClient() @@ -23,7 +25,7 @@ def _get_all_stats(self): request_json = request.text return json.loads(request_json) except Exception as e: - self._log.error(f'Failed to get all stats: {e}') + logger.error(f'Failed to get all stats: {e}') return False return False @@ -33,7 +35,7 @@ def _get_all_jvm_metrics(self): try: return Cluster(self._get_all_stats()) except Exception as e: - self._log.error(f'Failed to get jvm metrics: {e}') + logger.error(f'Failed to get jvm metrics: {e}') return False @@ -42,13 +44,13 @@ def read_file(self, file): with open(file, 'rb') as stats: return json.load(stats) except Exception as e: - self._log.error(f'Failed to read file: {e}') + logger.error(f'Failed to read file: {e}') def get_metrics(self): if self._client.connected(): try: return self._get_all_jvm_metrics() except Exception as e: - self._log.error(f'Failed to get metrics: {e}') + logger.error(f'Failed to get metrics: {e}') return False diff --git a/automon/integrations/elasticsearch/snapshots.py b/automon/integrations/elasticsearch/snapshots.py index 79f6e5a2..0acfb7d9 100644 --- a/automon/integrations/elasticsearch/snapshots.py +++ b/automon/integrations/elasticsearch/snapshots.py @@ -1,15 +1,16 @@ import json # import requests -from automon.log import Logging +from automon import log from automon.integrations.elasticsearch.client import ElasticsearchClient from automon.integrations.elasticsearch.config import ElasticsearchConfig +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + class Snapshot: def __init__(self, snapshot: dict): - self._log = Logging(Snapshot.__name__, Logging.DEBUG) - self._snapshot = snapshot self.id = snapshot.get('id') self.status = snapshot.get('status') @@ -25,7 +26,7 @@ def __init__(self, snapshot: dict): def __eq__(self, other): if not isinstance(other, Snapshot): - self._log.warning(f'{other} != Snapshot') + logger.warning(f'{other} != Snapshot') return NotImplemented return self._snapshot == other._snapshot @@ -34,7 +35,6 @@ def __eq__(self, other): class ElasticsearchSnapshotMonitor: def __init__(self, elasticsearch_repository: str = 'found-snapshots', snapshots_prefix: str = '', config: ElasticsearchConfig = ElasticsearchConfig()): - self._log = Logging(ElasticsearchSnapshotMonitor.__name__, Logging.DEBUG) self._config = config if config == ElasticsearchConfig else ElasticsearchConfig() self._client = ElasticsearchClient(config=self._config) @@ -56,7 +56,7 @@ def _get_all_snapshots(self) -> bool: url = f'{endpoint}/_cat/snapshots/{self.repository}?format=json' # url = f'{endpoint}/_snapshot/{self.repository}?format=json' - self._log.info('Downloading snapshots list') + logger.info('Downloading snapshots list') request = self._client.rest(url) content = request.text @@ -67,12 +67,12 @@ def _get_all_snapshots(self) -> bool: return False def _process_snapshots(self, snapshots: dict) -> bool: - self._log.info('Processing snapshots') + logger.info('Processing snapshots') try: self.total_snapshots = list(snapshots).__len__() - self._log.info(f'{self.total_snapshots} snapshots') + logger.info(f'{self.total_snapshots} snapshots') for snapshot in snapshots: @@ -93,12 +93,12 @@ def _process_snapshots(self, snapshots: dict) -> bool: return True except Exception as e: - self._log.error(f'Unable to get snapshots: {e}') + logger.error(f'Unable to get snapshots: {e}') self.error = SnapshotError(snapshots) return False def read_file(self, file_path): - self._log.info('Reading snapshots from file') + logger.info('Reading snapshots from file') with open(file_path, 'rb') as snapshots: snapshots = json.load(snapshots) @@ -106,7 +106,7 @@ def read_file(self, file_path): self._process_snapshots(snapshots) def check_snapshots(self): - self._log.info('Checking snapshots') + logger.info('Checking snapshots') return self._get_all_snapshots() @@ -154,7 +154,6 @@ def check_snapshots(self): class SnapshotError: def __init__(self, error: dict): - self._log = Logging(SnapshotError.__name__, Logging.DEBUG) self.error = error.get('error') @@ -172,5 +171,5 @@ def __init__(self, error: dict): def __eq__(self, other): if isinstance(other, SnapshotError): return self.error == other.error - self._log.warning(NotImplemented) + logger.warning(NotImplemented) return NotImplemented diff --git a/automon/tests/integrations/elasticsearch/__init__.py b/automon/integrations/elasticsearch/tests/__init__.py similarity index 100% rename from automon/tests/integrations/elasticsearch/__init__.py rename to automon/integrations/elasticsearch/tests/__init__.py diff --git a/automon/tests/integrations/elasticsearch/test_elasticsearch.py b/automon/integrations/elasticsearch/tests/test_elasticsearch.py similarity index 100% rename from automon/tests/integrations/elasticsearch/test_elasticsearch.py rename to automon/integrations/elasticsearch/tests/test_elasticsearch.py diff --git a/automon/tests/integrations/elasticsearch/test_elasticsearch_JvmMonitor.py b/automon/integrations/elasticsearch/tests/test_elasticsearch_JvmMonitor.py similarity index 100% rename from automon/tests/integrations/elasticsearch/test_elasticsearch_JvmMonitor.py rename to automon/integrations/elasticsearch/tests/test_elasticsearch_JvmMonitor.py diff --git a/automon/tests/integrations/elasticsearch/test_elasticsearch_client.py b/automon/integrations/elasticsearch/tests/test_elasticsearch_client.py similarity index 100% rename from automon/tests/integrations/elasticsearch/test_elasticsearch_client.py rename to automon/integrations/elasticsearch/tests/test_elasticsearch_client.py diff --git a/automon/tests/integrations/elasticsearch/test_elasticsearch_common.py b/automon/integrations/elasticsearch/tests/test_elasticsearch_common.py similarity index 100% rename from automon/tests/integrations/elasticsearch/test_elasticsearch_common.py rename to automon/integrations/elasticsearch/tests/test_elasticsearch_common.py diff --git a/automon/tests/integrations/elasticsearch/test_elasticsearch_snapshot.py b/automon/integrations/elasticsearch/tests/test_elasticsearch_snapshot.py similarity index 100% rename from automon/tests/integrations/elasticsearch/test_elasticsearch_snapshot.py rename to automon/integrations/elasticsearch/tests/test_elasticsearch_snapshot.py diff --git a/automon/integrations/facebook/__init__.py b/automon/integrations/facebook/__init__.py new file mode 100644 index 00000000..718b9b6b --- /dev/null +++ b/automon/integrations/facebook/__init__.py @@ -0,0 +1 @@ +from .groups import FacebookGroups diff --git a/automon/integrations/facebook/groups.py b/automon/integrations/facebook/groups.py new file mode 100644 index 00000000..448859c2 --- /dev/null +++ b/automon/integrations/facebook/groups.py @@ -0,0 +1,603 @@ +import random +import asyncio +import datetime +import statistics + +from automon import log +from automon.helpers.sleeper import Sleeper +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class FacebookGroups(object): + _xpath_about = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[3]/div/div/div/div/div/div/div[1]/div/div/div/div/div[2]/a[1]/div[1]/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[3]/div/div/div/div/div/div/div[1]/div/div/div/div/div[1]/div[1]/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[1]', + ] + _xpath_popup_close = [ + '/html/body/div[1]/div/div[1]/div/div[5]/div/div/div[1]/div/div[2]/div/div/div/div[1]/div/i', + ] + _xpath_content_unavailable = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div/div/div[1]/div[2]/div[1]/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div/div/div[1]/div[2]/div[1]/span', + ] + _xpath_creation_date = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div/div[2]/div/div/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[3]/div/div/div[2]/div/div/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[3]/div/div/div[2]/div/div/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[3]/div/div/div[2]/div/div/span', + ] + _xpath_history = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[4]/div/div/div[2]/div/div[2]/span/span', + ] + _xpath_title = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[1]/div[2]/div/div/div/div/div[1]/div/div/div/div/div/div[1]/h1/span/a', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[1]/div[2]/div/div/div/div/div[1]/div/div/div/div/div/div[1]/h1/span/a', + ] + _xpath_temporarily_blocked = [ + '/html/body/div[1]/div[2]/div[1]/div/div/div[1]/div/div[2]/h2', + '/html/body/div[1]/div[2]/div[1]/div/div/div[1]/div/div[2]', + ] + _xpath_members = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div/div[2]/div/div/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[2]/div/div/div[2]/div/div[1]/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[2]/div/div/div[2]/div/div[1]/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[2]/div/div/div[2]/div/div[1]/span', + ] + _xpath_must_login = [ + '/html/body/div[1]/div[1]/div[1]/div/div[2]/div/div', + ] + _xpath_posts_today = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[1]/div/div/div[2]/div/div[1]/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[1]/div/div/div[2]/div/div[1]/span', + ] + _xpath_posts_monthly = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[1]/div/div/div[2]/div/div[2]/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[3]/div/div/div/div/div/div[2]/div/div[1]/div/div/div[2]/div/div[2]/span', + ] + _xpath_privacy = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div/div[1]/span/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div/div[1]/span/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div/div[1]/span/span', + ] + _xpath_privacy_details = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div/div[2]/span/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div/div[2]/span/span', + ] + _xpath_visible = [ + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[3]/div/div/div[2]/div/div[2]/span/span', + '/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div/div/div/div/div[1]/div/div/div/div/div/div[2]/div[3]/div/div/div[2]/div/div[2]/span/span', + ] + + def __init__(self, url: str = None): + """Facebook Groups object + + Depends on Selenium""" + self._url = url + + self._browser = SeleniumBrowser() + + self._rate_per_minute = 2 + self._rate_counter = [] + self._wait_between_retries = random.choice(range(1, 60)) + + async def content_unavailable(self): + """This content isn't available right now""" + + try: + text = await self._browser.wait_for_list(self._xpath_content_unavailable) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def creation_date(self): + + try: + text = await self._browser.wait_for_list(self._xpath_creation_date) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def creation_date_timestamp(self): + if await self.creation_date(): + # TODO: convert date to datetime timestamp + return + + async def current_rate_too_fast(self): + if await self.average_rate() == 0 or len(self._rate_counter) < 2: + logger.info(False) + return False + + if await self.average_rate() < await self.rate_per_minute(): + logger.info(True) + return True + + return False + + async def rate_per_minute(self) -> int: + rate = int(60 / self._rate_per_minute) + logger.info(str(dict( + seconds=rate, + ))) + return rate + + async def average_rate(self): + if self._rate_counter: + rate = int(statistics.mean(self._rate_counter)) + logger.info(str(dict( + seconds=rate, + ))) + return rate + return 0 + + async def history(self): + + try: + text = await self._browser.wait_for_list(self._xpath_history) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def temporarily_blocked(self): + try: + text = await self._browser.wait_for_list( + self._xpath_temporarily_blocked + ) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def members(self): + + try: + # TODO: need to clean up string from members and remove bad chars + text = await self._browser.wait_for_list(self._xpath_members) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def members_count(self): + + if await self.members(): + count = [x for x in await self.members()] + count = [x for x in count if x in [str(x) for x in range(0, 10)]] + if count: + members_count = int(''.join(count)) if count else 0 + + logger.debug(members_count) + return members_count + + async def must_login(self): + try: + text = await self._browser.wait_for_list(self._xpath_must_login) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def posts_monthly(self): + + try: + text = await self._browser.wait_for_list(self._xpath_posts_monthly) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def posts_monthly_count(self): + + if await self.posts_monthly(): + count = [x for x in await self.posts_monthly()] + count = [x for x in count if x in [str(x) for x in range(0, 10)]] + if count: + posts_monthly_count = int(''.join(count)) if count else 0 + + logger.debug(posts_monthly_count) + return posts_monthly_count + + async def posts_today(self): + + try: + text = await self._browser.wait_for_list(self._xpath_posts_today) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def posts_today_count(self): + + if await self.posts_today(): + count = [x for x in await self.posts_today()] + count = [x for x in count if x in [str(x) for x in range(0, 10)]] + if count: + posts_today_count = int(''.join(count)) if count else 0 + + logger.debug(posts_today_count) + return posts_today_count + + async def privacy(self): + + try: + text = await self._browser.wait_for_list(self._xpath_privacy) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def privacy_details(self): + + try: + text = await self._browser.wait_for_list(self._xpath_privacy_details) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + async def title(self) -> str: + + try: + text = await self._browser.wait_for_list(self._xpath_title) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + @property + def url(self) -> str: + return self.url_cleaner(self._url) + + @staticmethod + def url_cleaner(url: str): + """simple url cleaner""" + if not url: + return + if url[-1] == '/': + url = url[:-1] + return url + + async def visible(self) -> str: + + try: + text = await self._browser.wait_for_list(self._xpath_visible) + text = text.text + logger.debug(text) + return text + except Exception as error: + message, session, stacktrace = self.error_parsing(error) + logger.error(str(dict( + url=self.url, + message=message, + session=session, + stacktrace=stacktrace, + ))) + await self.screenshot_error() + + @staticmethod + def error_parsing(error, enable_stacktrace: bool = False) -> tuple: + """parses selenium exeption error""" + error_parsed = f'{error}'.splitlines() + error_parsed = [f'{x}'.strip() for x in error_parsed] + message = error_parsed[0] + session = None + stacktrace = None + if len(error_parsed) > 1: + session = error_parsed[1] + stacktrace = error_parsed[2:] + stacktrace = ' '.join(stacktrace) + + if enable_stacktrace: + return message, session, stacktrace + + return message, session, 'disabled' + + async def get(self, url: str) -> bool: + """get url""" + + start = datetime.datetime.now().timestamp() + + result = await self._browser.get(url=url) + logger.info(str(dict( + url=url, + result=result, + ))) + await self.screenshot() + + end = datetime.datetime.now().timestamp() + seconds_elapsed = int(end - start) + + logger.info(str(dict( + seconds_elapsed=seconds_elapsed, + result=result, + ))) + self._rate_counter.append(seconds_elapsed) + + return result + + async def get_about(self, rate_limiting: bool = True): + """get about page""" + url = f'{self.url}/about' + + if rate_limiting: + result = await self.get_with_rate_limiter(url=url) + else: + result = await self.get(url=url) + + logger.info(str(dict( + url=url, + result=result, + ))) + await self.screenshot() + return result + + async def get_with_rate_limiter( + self, + url: str, + retry: int = 0, + retries: int = 5, + wait_between_retries: int = None, + rate_per_minute: int = None, + ) -> bool: + """get with rate dynamic limit""" + if wait_between_retries: + self._wait_between_retries = wait_between_retries + + result = None + while retry < retries: + + if await self.rate_limited(): + await self.rate_limit_increase() + + self._rate_counter.append(self._wait_between_retries) + Sleeper.seconds(seconds=self._wait_between_retries) + logger.error(str(dict( + url=url, + retry=retry, + retries=retries, + ))) + continue + else: + await self.rate_limit_decrease() + + result = await self.get(url=url) + await self.screenshot() + logger.info(f'{result}') + return result + + retry = retry + 1 + + logger.error(f'{url}') + await self.screenshot_error() + return result + + async def rate_limit_decrease(self, multiplier: int = 0.75): + before = self._wait_between_retries + self._wait_between_retries = abs(int(self._wait_between_retries * multiplier)) + + if self._wait_between_retries == 0: + self._wait_between_retries = 1 + + logger.info(str(dict( + before=before, + after=self._wait_between_retries, + multiplier=multiplier, + ))) + return self._wait_between_retries + + async def rate_limit_increase(self, multiplier: int = 2): + before = self._wait_between_retries + self._wait_between_retries = abs(int(self._wait_between_retries * multiplier)) + + logger.info(str(dict( + before=before, + after=self._wait_between_retries, + multiplier=multiplier, + ))) + return self._wait_between_retries + + async def rate_limited(self): + """rate limit checker""" + if await self.current_rate_too_fast(): + logger.info(True) + await self.screenshot() + return True + + if await self.temporarily_blocked() or await self.must_login(): + logger.info(True) + await self.screenshot() + return True + + logger.error(False) + await self.screenshot_error() + return False + + async def run(self): + """run selenium browser""" + if self._browser: + logger.info(f'{self._browser}') + return self._browser.run() + + async def reset_rate_counter(self): + self._rate_counter = [] + logger.info(self._rate_counter) + return self._rate_counter + + async def restart(self): + """quit and start new instance of selenium""" + if self._browser: + await self.quit() + logger.info(f'{self._browser}') + return self.start() + + async def screenshot(self, filename: str = 'screenshot.png'): + try: + screenshot = await self._browser.save_screenshot(filename=filename, folder='.') + logger.debug(f'{screenshot}') + return screenshot + except Exception as error: + raise Exception(error) + + async def screenshot_error(self): + """get error screenshot""" + screenshot = await self.screenshot(filename='screenshot-error.png') + logger.debug(f'{screenshot}') + return screenshot + + async def screenshot_success(self): + """get success screenshot""" + screenshot = await self.screenshot(filename='screenshot-success.png') + logger.debug(f'{screenshot}') + return screenshot + + async def set_url(self, url: str) -> str: + """set new url""" + self._url = url + return self.url + + async def start(self, headless: bool = True, random_user_agent: bool = False, set_user_agent: str = None): + """start new instance of selenium""" + self._browser.config.webdriver_wrapper = ChromeWrapper() + + if headless: + self._browser.config.webdriver_wrapper.enable_headless() + self._browser.config.webdriver_wrapper.set_locale_experimental() + else: + self._browser.config.webdriver_wrapper.set_locale_experimental() + + if random_user_agent: + self._browser.config.webdriver_wrapper.set_user_agent( + await self._browser.get_random_user_agent() + ) + elif set_user_agent: + self._browser.config.webdriver_wrapper.set_user_agent( + set_user_agent + ) + + logger.info(str(dict( + browser=self._browser + ))) + browser = await self._browser.run() + self._browser.config.webdriver_wrapper.set_window_size(width=1920 * 0.6, height=1080) + return browser + + async def stop(self): + """alias to quit""" + return await self.quit() + + async def to_dict(self): + return dict( + content_unavailable=await self.content_unavailable(), + creation_date=await self.creation_date(), + creation_date_timestamp=await self.creation_date_timestamp(), + history=await self.history(), + members=await self.members(), + members_count=await self.members_count(), + posts_monthly=await self.posts_monthly(), + posts_monthly_count=await self.posts_monthly_count(), + posts_today=await self.posts_today(), + posts_today_count=await self.posts_today_count(), + privacy=await self.privacy(), + privacy_details=await self.privacy_details(), + title=await self.title(), + url=self.url, + visible=await self.visible(), + ) + + async def quit(self): + """quit selenium""" + if self._browser: + logger.info(f'{self._browser}') + return await self._browser.quit() diff --git a/automon/integrations/flask/boilerplate.py b/automon/integrations/flask/boilerplate.py deleted file mode 100644 index 599a756f..00000000 --- a/automon/integrations/flask/boilerplate.py +++ /dev/null @@ -1,13 +0,0 @@ -from flask import Flask - -from automon.log import Logging -from automon.integrations.flask.config import FlaskConfig - - -class FlaskBoilerplate: - - def __init__(self, flask_name=__name__): - self._log = Logging(FlaskBoilerplate.__name__, Logging.DEBUG) - - self.app = Flask(flask_name) - self.app = FlaskConfig.javascript_compatibility(self.app) diff --git a/automon/integrations/flaskWrapper/README.md b/automon/integrations/flaskWrapper/README.md new file mode 100644 index 00000000..8e608b89 --- /dev/null +++ b/automon/integrations/flaskWrapper/README.md @@ -0,0 +1,2 @@ +# Easy flask app + diff --git a/automon/integrations/flaskWrapper/__init__.py b/automon/integrations/flaskWrapper/__init__.py new file mode 100755 index 00000000..b4fa704e --- /dev/null +++ b/automon/integrations/flaskWrapper/__init__.py @@ -0,0 +1,3 @@ +from .client import FlaskClient +from .config import FlaskConfig +from .boilerplate import FlaskBoilerplate diff --git a/automon/integrations/flaskWrapper/app.py b/automon/integrations/flaskWrapper/app.py new file mode 100644 index 00000000..ce5f7791 --- /dev/null +++ b/automon/integrations/flaskWrapper/app.py @@ -0,0 +1,9 @@ +import json +from flask import Flask + +app = Flask(__name__) + + +@app.route("/") +def default(): + return 'Hello.' diff --git a/automon/integrations/flask/auth.py b/automon/integrations/flaskWrapper/auth.py similarity index 100% rename from automon/integrations/flask/auth.py rename to automon/integrations/flaskWrapper/auth.py diff --git a/automon/integrations/flask/auth_creds.py b/automon/integrations/flaskWrapper/auth_creds.py similarity index 100% rename from automon/integrations/flask/auth_creds.py rename to automon/integrations/flaskWrapper/auth_creds.py diff --git a/automon/integrations/flaskWrapper/boilerplate.py b/automon/integrations/flaskWrapper/boilerplate.py new file mode 100644 index 00000000..13eea899 --- /dev/null +++ b/automon/integrations/flaskWrapper/boilerplate.py @@ -0,0 +1,37 @@ +import flask +from flask import Flask + +from automon import log +from automon.integrations.flaskWrapper.config import FlaskConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class FlaskBoilerplate(object): + + def __init__(self, import_name: str = __name__, config: FlaskConfig = None, **kwargs): + """Wrapper for flask""" + + self.Flask = Flask(import_name=import_name, **kwargs) + self.config = config or FlaskConfig() + + def __repr__(self): + return f'{self.Flask}' + + @property + def flask(self): + return flask + + @property + def request(self): + """Get flask request""" + return flask.request + + def enable_javascript_compatibility(self): + """Enable Jinya compatibility for JavaScript""" + self.Flask = FlaskConfig.javascript_compatibility(self.Flask) + + def run(self, port: int = None, debug: bool = False, **kwargs): + """Run flask app""" + return self.Flask.run(port=port, debug=debug, **kwargs) diff --git a/automon/integrations/flaskWrapper/client.py b/automon/integrations/flaskWrapper/client.py new file mode 100644 index 00000000..27c6cd75 --- /dev/null +++ b/automon/integrations/flaskWrapper/client.py @@ -0,0 +1,38 @@ +from automon import log + +from .app import app +from .config import FlaskConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(level=log.DEBUG) + + +class FlaskClient(object): + + def __init__( + self, + host: str = None, + port: int = None, + debug: bool = True, + config: FlaskConfig = None, + **kwargs + ): + self.config = config or FlaskConfig( + host=host, + port=port, + debug=debug, + **kwargs + ) + self.host = self.config.host + self.port = self.config.port + self.debug = self.config.debug + + self.app = app + + def run(self, **kwargs): + self.app.run( + host=self.host, + port=self.port, + debug=self.debug, + **kwargs + ) diff --git a/automon/integrations/flask/config.py b/automon/integrations/flaskWrapper/config.py similarity index 68% rename from automon/integrations/flask/config.py rename to automon/integrations/flaskWrapper/config.py index 1d59c5ec..16ee6844 100644 --- a/automon/integrations/flask/config.py +++ b/automon/integrations/flaskWrapper/config.py @@ -1,10 +1,21 @@ import os import hashlib -from flask import Flask +from automon import environ -class FlaskConfig(Flask): +class FlaskConfig(object): + + def __init__( + self, + host: str = None, + port: int = None, + debug: bool = None, + **kwargs + ): + self.host = host or environ('FLASK_HOST') + self.port = port or environ('FLASK_PORT') + self.debug = debug or environ('FLASK_DEBUG') @staticmethod def javascript_compatibility(app): diff --git a/automon/tests/integrations/google/__init__.py b/automon/integrations/flaskWrapper/tests/__init__.py similarity index 100% rename from automon/tests/integrations/google/__init__.py rename to automon/integrations/flaskWrapper/tests/__init__.py diff --git a/automon/tests/integrations/test_flask.py b/automon/integrations/flaskWrapper/tests/test_flask.py similarity index 77% rename from automon/tests/integrations/test_flask.py rename to automon/integrations/flaskWrapper/tests/test_flask.py index 95c43da0..59c92bf6 100644 --- a/automon/tests/integrations/test_flask.py +++ b/automon/integrations/flaskWrapper/tests/test_flask.py @@ -2,8 +2,8 @@ from flask import Flask -from automon.integrations.flask.boilerplate import FlaskBoilerplate -from automon.integrations.flask.config import FlaskConfig +from automon.integrations.flaskWrapper.boilerplate import FlaskBoilerplate +from automon.integrations.flaskWrapper.config import FlaskConfig class FlaskTest(unittest.TestCase): diff --git a/automon/integrations/flaskWrapper/tests/test_run.py b/automon/integrations/flaskWrapper/tests/test_run.py new file mode 100644 index 00000000..eba4b100 --- /dev/null +++ b/automon/integrations/flaskWrapper/tests/test_run.py @@ -0,0 +1,14 @@ +# import unittest +# +# from ..client import FlaskClient +# +# +# class TestFlask(unittest.TestCase): +# test = FlaskClient() +# +# def test_run(self): +# self.test.run() +# +# +# if __name__ == '__main__': +# unittest.main() diff --git a/automon/tests/integrations/minio/__init__.py b/automon/integrations/geoip/tests/__init__.py similarity index 100% rename from automon/tests/integrations/minio/__init__.py rename to automon/integrations/geoip/tests/__init__.py diff --git a/automon/tests/integrations/test_geoip.py b/automon/integrations/geoip/tests/test_geoip.py similarity index 100% rename from automon/tests/integrations/test_geoip.py rename to automon/integrations/geoip/tests/test_geoip.py diff --git a/automon/integrations/google/__init__.py b/automon/integrations/google/__init__.py index d14fd0e2..e69de29b 100644 --- a/automon/integrations/google/__init__.py +++ b/automon/integrations/google/__init__.py @@ -1,2 +0,0 @@ -from .gmail import GmailClientV1 -from .people import PeopleClient diff --git a/automon/integrations/google/auth/__init__.py b/automon/integrations/google/auth/__init__.py new file mode 100644 index 00000000..a96ebe64 --- /dev/null +++ b/automon/integrations/google/auth/__init__.py @@ -0,0 +1,2 @@ +from .client import GoogleAuthClient +from .config import GoogleAuthConfig diff --git a/automon/integrations/google/auth/client.py b/automon/integrations/google/auth/client.py new file mode 100644 index 00000000..1f4771e1 --- /dev/null +++ b/automon/integrations/google/auth/client.py @@ -0,0 +1,132 @@ +import functools +import googleapiclient.http +import googleapiclient.discovery +import google.auth.transport.requests + +from automon import log + +from .config import GoogleAuthConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class GoogleAuthClient(object): + """Google Auth client""" + + def __init__( + self, + config: GoogleAuthConfig = None, + serviceName: str = None, + scopes: list = None, + version: str = None, + **kwargs, + ): + + self.config = config or GoogleAuthConfig( + serviceName=serviceName, + scopes=scopes, + version=version, + **kwargs + ) + + def __repr__(self): + return f'{self.__dict__}' + + @classmethod + async def execute(cls, func): + return await func.execute() + + async def _is_connected(func): + @functools.wraps(func) + async def wrapped(self, *args, **kwargs): + if self.authenticate(): + return await func(self, *args, **kwargs) + + return wrapped + + async def authenticate(self) -> bool: + """authenticate with credentials""" + + try: + return await self.authenticate_oauth() + except: + pass + + try: + return await self.authenticate_service_account() + except: + pass + + return False + + async def authenticate_oauth(self) -> bool: + """authenticate web token""" + + creds = await self.config.Credentials() + refresh_token = creds.refresh_token + + if refresh_token: + try: + creds.refresh(google.auth.transport.requests.Request()) + logger.info(f'token refresh success') + return True + except Exception as e: + logger.error(msg=f'token refresh failed: {e}') + + else: + # TODO: add google flow() authentication here + logger.info(f'flow login success') + return True + + return False + + async def authenticate_service_account(self) -> bool: + """authenticate service account""" + if await self.config.Credentials(): + return True + return False + + async def is_connected(self) -> bool: + """Check if authenticated to make requests""" + return await self.authenticate() + + async def service( + self, + serviceName: str = None, + version: str = None, + http=None, + discoveryServiceUrl=None, + developerKey=None, + model=None, + requestBuilder=None, + credentials=None, + cache_discovery=True, + cache=None, + client_options=None, + adc_cert_path=None, + adc_key_path=None, + num_retries=1, + static_discovery=None, + always_use_jwt_access=False, + **kwargs + ) -> googleapiclient.discovery.build: + return googleapiclient.discovery.build( + serviceName=serviceName or self.config.serviceName, + version=version or self.config.version, + http=http, + discoveryServiceUrl=discoveryServiceUrl, + developerKey=developerKey, + model=model, + requestBuilder=requestBuilder or googleapiclient.http.HttpRequest, + credentials=credentials or await self.config.Credentials(), + cache_discovery=cache_discovery, + cache=cache, + client_options=client_options, + adc_cert_path=adc_cert_path, + adc_key_path=adc_key_path, + num_retries=num_retries, + static_discovery=static_discovery, + always_use_jwt_access=always_use_jwt_access, + **kwargs, + ) diff --git a/automon/integrations/google/auth/config.py b/automon/integrations/google/auth/config.py new file mode 100644 index 00000000..a4816763 --- /dev/null +++ b/automon/integrations/google/auth/config.py @@ -0,0 +1,124 @@ +import os +import json +import base64 + +import google.auth.crypt +import google.oauth2.credentials +import google.oauth2.service_account + +from google.auth.transport.requests import Request +from google_auth_oauthlib.flow import InstalledAppFlow + +from automon import log +from automon.helpers import environ + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class GoogleAuthConfig(object): + """Google Auth config""" + + def __init__( + self, + serviceName: str = None, + scopes: list = None, + version: str = None, + ): + self.serviceName = serviceName or 'servicemanagement' + self.scopes = scopes or ['https://www.googleapis.com/auth/cloud-platform.read-only'] + self.version = version or 'v1' + + def __repr__(self): + return f'{self.__dict__}' + + async def Credentials(self): + """return Google Credentials object""" + try: + if await self.CredentialsFile(): + return await self.CredentialsFile() + except: + pass + + try: + if await self.CredentialsInfo(): + return await self.CredentialsInfo() + except: + pass + + try: + if await self.CredentialsServiceAccountFile(): + return await self.CredentialsServiceAccountFile() + except: + pass + + try: + if await self.CredentialsServiceAccountInfo(): + return await self.CredentialsServiceAccountInfo() + except: + pass + + logger.error(f'Missing GOOGLE_CREDENTIALS or GOOGLE_CREDENTIALS_BASE64') + + @property + def _GOOGLE_CREDENTIALS(self): + """env var GOOGLE_CREDENTIALS""" + return environ('GOOGLE_CREDENTIALS') + + @property + def _GOOGLE_CREDENTIALS_BASE64(self): + """env var GOOGLE_CREDENTIALS_BASE64""" + return environ('GOOGLE_CREDENTIALS_BASE64') + + async def CredentialsFile(self) -> google.oauth2.credentials.Credentials: + """return Credentials object for web auth from file""" + if self._GOOGLE_CREDENTIALS: + if os.path.exists(self._GOOGLE_CREDENTIALS): + return google.oauth2.credentials.Credentials.from_authorized_user_file( + self._GOOGLE_CREDENTIALS + ) + + async def CredentialsInfo(self) -> google.oauth2.credentials.Credentials: + """return Credentials object for web auth from dict""" + if self._GOOGLE_CREDENTIALS_BASE64: + return google.oauth2.credentials.Credentials.from_authorized_user_info( + await self.base64_to_dict() + ) + + async def CredentialsServiceAccountFile(self) -> google.oauth2.service_account.Credentials: + """return Credentials object for service account from file""" + if self._GOOGLE_CREDENTIALS: + if os.path.exists(self._GOOGLE_CREDENTIALS): + return google.oauth2.service_account.Credentials.from_service_account_file( + self._GOOGLE_CREDENTIALS + ) + + async def CredentialsServiceAccountInfo(self) -> google.oauth2.service_account.Credentials: + """return Credentials object for service account from dict""" + if self._GOOGLE_CREDENTIALS_BASE64: + return google.oauth2.service_account.Credentials.from_service_account_info( + await self.base64_to_dict() + ) + + async def base64_to_dict(self, base64_str: str = None) -> dict: + """convert credential json to dict""" + if not base64_str and not self._GOOGLE_CREDENTIALS_BASE64: + raise Exception(f'Missing GOOGLE_CREDENTIALS_BASE6') + + base64_str = base64_str or self._GOOGLE_CREDENTIALS_BASE64 + return json.loads( + base64.b64decode(base64_str) + ) + + async def file_to_base64(self, path: str = None): + """convert file to base64""" + if not path and self._GOOGLE_CREDENTIALS: + path = self._GOOGLE_CREDENTIALS + + with open(path, 'rb') as f: + return base64.b64encode(f.read()).decode() + + async def is_ready(self): + """return True if configured""" + if await self.Credentials(): + return True diff --git a/automon/tests/integrations/neo4j/__init__.py b/automon/integrations/google/auth/tests/__init__.py similarity index 100% rename from automon/tests/integrations/neo4j/__init__.py rename to automon/integrations/google/auth/tests/__init__.py diff --git a/automon/integrations/google/auth/tests/test_config_Credentials.py b/automon/integrations/google/auth/tests/test_config_Credentials.py new file mode 100644 index 00000000..dc961b30 --- /dev/null +++ b/automon/integrations/google/auth/tests/test_config_Credentials.py @@ -0,0 +1,15 @@ +import unittest +import asyncio + +from automon.integrations.google.auth import GoogleAuthConfig + + +class MyTestCase(unittest.TestCase): + async def test_something(self): + test = GoogleAuthConfig() + if await test.Credentials(): + self.assertTrue(asyncio.run(test.Credentials())) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/google/auth/tests/test_google_auth.py b/automon/integrations/google/auth/tests/test_google_auth.py new file mode 100644 index 00000000..965db975 --- /dev/null +++ b/automon/integrations/google/auth/tests/test_google_auth.py @@ -0,0 +1,17 @@ +import unittest +import asyncio + +from automon.integrations.google.auth import GoogleAuthClient + + +class MyTestCase(unittest.TestCase): + async def test_authenticate(self): + test = GoogleAuthClient() + # scopes = ['https://www.googleapis.com/auth/contacts.readonly'] + # client = AuthClient(serviceName='people', scopes=scopes) + if test.authenticate(): + self.assertTrue(asyncio.run(test.authenticate())) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/google/gmail/__init__.py b/automon/integrations/google/gmail/__init__.py index 37d7a424..f11c7114 100644 --- a/automon/integrations/google/gmail/__init__.py +++ b/automon/integrations/google/gmail/__init__.py @@ -1,2 +1,2 @@ -from .v1 import GmailClient as GmailClientV1 -from .v1 import GmailConfig as GmailConfigV1 +from .v1 import GoogleGmailClient +from .v1 import GoogleGmailConfig diff --git a/automon/integrations/google/gmail/v1/__init__.py b/automon/integrations/google/gmail/v1/__init__.py index 063d8da6..c26f7cff 100644 --- a/automon/integrations/google/gmail/v1/__init__.py +++ b/automon/integrations/google/gmail/v1/__init__.py @@ -1,2 +1,2 @@ -from .client import GmailClient -from .config import GmailConfig +from .client import GoogleGmailClient +from .config import GoogleGmailConfig diff --git a/automon/integrations/google/gmail/v1/client.py b/automon/integrations/google/gmail/v1/client.py index 9c074781..347eb1ba 100644 --- a/automon/integrations/google/gmail/v1/client.py +++ b/automon/integrations/google/gmail/v1/client.py @@ -1,12 +1,12 @@ -from automon.integrations.requests import RequestsClient +from automon.integrations.requestsWrapper import RequestsClient -from .config import GmailConfig +from .config import GoogleGmailConfig -class GmailClient: +class GoogleGmailClient: - def __init__(self, api_key: str = None, user: str = None, password: str = None, config: GmailConfig = None): - self.config = config or GmailConfig(user=user, password=password, api_key=api_key) + def __init__(self, api_key: str = None, user: str = None, password: str = None, config: GoogleGmailConfig = None): + self.config = config or GoogleGmailConfig(user=user, password=password, api_key=api_key) self.endpoint = self.config.endpoint self.userId = self.config.userId diff --git a/automon/integrations/google/gmail/v1/config.py b/automon/integrations/google/gmail/v1/config.py index f0601a98..766c9e0c 100644 --- a/automon/integrations/google/gmail/v1/config.py +++ b/automon/integrations/google/gmail/v1/config.py @@ -1,11 +1,12 @@ from os import getenv -from automon import Logging +from automon import log -log = Logging(name='GmailConfig', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) -class GmailConfig: +class GoogleGmailConfig: def __init__(self, endpoint: str = None, api_key: str = None, user: str = None, diff --git a/automon/integrations/google/people/__init__.py b/automon/integrations/google/people/__init__.py index 458c9651..a802b592 100644 --- a/automon/integrations/google/people/__init__.py +++ b/automon/integrations/google/people/__init__.py @@ -1,2 +1,2 @@ -from .client import PeopleClient -from .config import PeopleConfig +from .client import GooglePeopleClient +from .config import GooglePeopleConfig diff --git a/automon/integrations/google/people/client.py b/automon/integrations/google/people/client.py index a9dde103..a046c2b5 100644 --- a/automon/integrations/google/people/client.py +++ b/automon/integrations/google/people/client.py @@ -7,22 +7,23 @@ from googleapiclient.discovery import build from googleapiclient.errors import HttpError -from automon import Logging +from automon import log -from .urls import PeopleUrls -from .config import PeopleConfig +from .urls import GooglePeopleUrls +from .config import GooglePeopleConfig from .results import ConnectionsResults -log = Logging(name='PeopleClient', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) -class PeopleClient: +class GooglePeopleClient: def __init__(self, client_id: str = None, client_secret: str = None, - config: PeopleConfig = None): + config: GooglePeopleConfig = None): """Google People API Client""" - self.config = config or PeopleConfig( + self.config = config or GooglePeopleConfig( client_id=client_id, client_secret=client_secret ) @@ -78,7 +79,7 @@ def authenticate(self) -> bool: creds.refresh(Request()) return True except Exception as e: - log.error(msg=f'authentication failed {e}', raise_exception=False) + logger.error(msg=f'authentication failed {e}', raise_exception=False) else: flow = InstalledAppFlow.from_client_config( @@ -132,10 +133,10 @@ def list_connections( """ if not resourceName: - resourceName = PeopleUrls().resourceName() + resourceName = GooglePeopleUrls().resourceName() if not personFields: - personFields = PeopleUrls().personFields_toStr() + personFields = GooglePeopleUrls().personFields_toStr() return self._list( resourceName=resourceName, diff --git a/automon/integrations/google/people/config.py b/automon/integrations/google/people/config.py index 3028f552..7c0a96dd 100644 --- a/automon/integrations/google/people/config.py +++ b/automon/integrations/google/people/config.py @@ -10,13 +10,14 @@ from googleapiclient.discovery import build from googleapiclient.errors import HttpError -from automon import Logging +from automon import log from automon.helpers import environ -log = Logging(name='PeopleConfig', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) -class PeopleConfig: +class GooglePeopleConfig: def __init__(self, token=None, @@ -191,8 +192,8 @@ def oauth_dict(self) -> dict: ) } - log.warn(f'Missing client_type') - return False + logger.error(f'Missing client_type') + return {} def from_authorized_user_file(self, file: str) -> Credentials: """Load token.json""" @@ -204,7 +205,7 @@ def isReady(self): if self.oauth_dict(): return True - log.warn(f'config is not ready') + logger.error(f'config is not ready') return False def load_oauth(self, oauth: dict) -> Credentials: @@ -219,7 +220,7 @@ def load_oauth(self, oauth: dict) -> Credentials: return self.update(oauth) else: - log.error(msg=f'Unsupported or not an Oauth token. {oauth}', raise_exception=True) + logger.error(msg=f'Unsupported or not an Oauth token. {oauth}', raise_exception=True) return self.Credentials diff --git a/automon/integrations/google/people/person.py b/automon/integrations/google/people/person.py index a2dec9ff..56d483aa 100644 --- a/automon/integrations/google/people/person.py +++ b/automon/integrations/google/people/person.py @@ -1,13 +1,13 @@ from enum import Enum -from automon import Logging +from automon import log -log = Logging(level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class AgeRange(Enum): - """Please use person.ageRanges instead""" - log.warn(DeprecationWarning) + logger.warning(DeprecationWarning(f'Depreciated AgeRange, please use person.ageRanges instead')) AGE_RANGE_UNSPECIFIED = 'AGE_RANGE_UNSPECIFIED' LESS_THAN_EIGHTEEN = 'LESS_THAN_EIGHTEEN' @@ -393,7 +393,7 @@ class Relation(object): class RelationshipInterest(object): - log.warn(DeprecationWarning) + logger.warning(DeprecationWarning('Depreciated RelationshipInterest')) metadata: { FieldMetadata @@ -403,7 +403,7 @@ class RelationshipInterest(object): class RelationshipStatus(object): - log.warn(DeprecationWarning) + logger.warning(DeprecationWarning('Depreciated RelationshipStatus')) metadata: { FieldMetadata @@ -413,7 +413,7 @@ class RelationshipStatus(object): class Residence(object): - log.warn(DeprecationWarning) + logger.warning(DeprecationWarning('Depreciated Residence')) metadata: { FieldMetadata @@ -439,7 +439,7 @@ class Skill(object): class Tagline(object): - log.warn(DeprecationWarning) + logger.warning(DeprecationWarning('Depreciated Tagline')) metadata: { FieldMetadata diff --git a/automon/integrations/google/people/results.py b/automon/integrations/google/people/results.py index 997a6b8a..61454b2b 100644 --- a/automon/integrations/google/people/results.py +++ b/automon/integrations/google/people/results.py @@ -1,8 +1,9 @@ -from automon import Logging +from automon import log from .person import Person -log = Logging(name='PeopleResults', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class ConnectionsResults: @@ -36,7 +37,7 @@ def __init__(self, result: dict): self.__dict__.update(result) - log.debug(msg=f'{self}') + logger.debug(msg=f'{self}') def __repr__(self): return f'totalPeople: {self.totalPeople}, totalItems: {self.totalItems}, contacts: {len(self.contacts)}' diff --git a/automon/tests/integrations/nmap/__init__.py b/automon/integrations/google/people/tests/__init__.py similarity index 100% rename from automon/tests/integrations/nmap/__init__.py rename to automon/integrations/google/people/tests/__init__.py diff --git a/automon/tests/integrations/google/test_google_contacts.py b/automon/integrations/google/people/tests/test_google_contacts.py similarity index 72% rename from automon/tests/integrations/google/test_google_contacts.py rename to automon/integrations/google/people/tests/test_google_contacts.py index a5c18459..cd454355 100644 --- a/automon/tests/integrations/google/test_google_contacts.py +++ b/automon/integrations/google/people/tests/test_google_contacts.py @@ -1,8 +1,8 @@ import unittest -from automon.integrations.google import PeopleClient +from automon.integrations.google.people import GooglePeopleClient -c = PeopleClient() +c = GooglePeopleClient() class TestClient(unittest.TestCase): diff --git a/automon/tests/integrations/google/test_google_contacts_neo4j.py b/automon/integrations/google/people/tests/test_google_contacts_neo4j.py similarity index 68% rename from automon/tests/integrations/google/test_google_contacts_neo4j.py rename to automon/integrations/google/people/tests/test_google_contacts_neo4j.py index bf554e0b..bd9159d2 100644 --- a/automon/tests/integrations/google/test_google_contacts_neo4j.py +++ b/automon/integrations/google/people/tests/test_google_contacts_neo4j.py @@ -1,9 +1,9 @@ import unittest -from automon.integrations.google import PeopleClient -from automon.integrations.neo4j import Neo4jClient +from automon.integrations.google.people import GooglePeopleClient +from automon.integrations.neo4jWrapper import Neo4jClient -c = PeopleClient() +c = GooglePeopleClient() n = Neo4jClient() diff --git a/automon/integrations/google/people/urls.py b/automon/integrations/google/people/urls.py index 4f6e8734..eaaea99c 100644 --- a/automon/integrations/google/people/urls.py +++ b/automon/integrations/google/people/urls.py @@ -1,9 +1,10 @@ -from automon import Logging +from automon import log -log = Logging(name='PeopleUrls', level=Logging.ERROR) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) -class PeopleUrls: +class GooglePeopleUrls: PEOPLE_API = 'https://people.googleapis.com' API_VER = 'v1' BASE_URL = f'{PEOPLE_API}/{API_VER}' @@ -52,5 +53,5 @@ def personFields_toStr(self): return ','.join(self.personFields) def resourceName(self) -> str: - log.warn(msg=f'resourceName is deprecieated. Only people/me is valid.') + logger.warning(msg=f'resourceName is deprecieated. Only people/me is valid.') return f'{self.RESOURCE_NAME}/me' diff --git a/automon/integrations/google/sheets/__init__.py b/automon/integrations/google/sheets/__init__.py new file mode 100644 index 00000000..0f5f8d55 --- /dev/null +++ b/automon/integrations/google/sheets/__init__.py @@ -0,0 +1,2 @@ +from .client import GoogleSheetsClient +from .config import GoogleSheetsConfig diff --git a/automon/integrations/google/sheets/client.py b/automon/integrations/google/sheets/client.py new file mode 100644 index 00000000..5d63eebd --- /dev/null +++ b/automon/integrations/google/sheets/client.py @@ -0,0 +1,166 @@ +from automon import log +from automon.integrations.google.auth import GoogleAuthClient + +from .config import GoogleSheetsConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class Fields: + hyperlink: str = 'sheets/data/rowData/values/hyperlink' + + +class ValueInputOption: + USER_ENTERED: str = 'USER_ENTERED' + RAW: str = 'RAW' + + +class GoogleSheetsClient(GoogleAuthClient): + """Google Sheets client""" + + spreadsheetId: str + worksheet: str + range: str + config: GoogleSheetsConfig + + def __init__( + self, + spreadsheetId: str = None, + worksheet: str = '', + range: str = 'A:Z', + config: GoogleSheetsConfig = None, + **kwargs + ): + super().__init__() + self.config = config or GoogleSheetsConfig( + spreadsheetId=spreadsheetId, + **kwargs + ) + + self.worksheet = worksheet + self.range = range + + self.response = None + + @property + def values(self): + """row values""" + if self.response: + try: + return self.response['values'] + except Exception as e: + pass + + async def clear( + self, + range: str, + spreadsheetId: str = None, + **kwargs, + ): + """clear rows""" + try: + + spreadsheets = await self.spreadsheets() + result = spreadsheets.values().clear( + spreadsheetId=spreadsheetId or self.config.spreadsheetId, + range=range or self.range, + **kwargs, + ).execute() + + logger.info(f'{result}') + logger.info(f"{result.get('clearedRange')} cells cleared.") + return result + except Exception as error: + logger.error(f"An error occurred: {error}") + return error + + async def spreadsheets(self): + """spreadsheet service""" + service = await self.service() + return service.spreadsheets() + + async def get( + self, + spreadsheetId: str = None, + ranges: str = None, + includeGridData: bool = False, + fields: Fields or str = None, + **kwargs, + ): + """get rows""" + try: + spreadsheets = await self.spreadsheets() + self.response = spreadsheets.get( + spreadsheetId=spreadsheetId or self.config.spreadsheetId, + ranges=ranges or self.range, + includeGridData=includeGridData, + fields=fields, + **kwargs, + ).execute() + logger.info(f'{self.worksheet}!{self.range} ({self.config.spreadsheetId})') + except Exception as e: + logger.error(f'{e}') + + return self + + async def get_values( + self, + spreadsheetId: str = None, + range: str = None, + **kwargs, + ): + """get values""" + try: + spreadsheets = await self.spreadsheets() + self.response = spreadsheets.values().get( + spreadsheetId=spreadsheetId or self.config.spreadsheetId, + range=range or f'{self.worksheet}!{self.range}', + **kwargs, + ).execute() + + logger.info(str(dict( + worksheet=self.worksheet, + range=self.range, + spreadsheetId=self.config.spreadsheetId, + ))) + except Exception as e: + logger.error(f'{e}') + + return self + + async def list(self): + # list(pageSize=1).execute() + logger.warning(f'{NotImplemented}') + return + + async def update( + self, + spreadsheetId: str = None, + range: str = None, + valueInputOption: ValueInputOption = ValueInputOption.USER_ENTERED, + values: list = None, + ): + """update rows""" + try: + + body = { + 'values': values + } + + logger.debug(f'{body}') + + spreadsheets = await self.spreadsheets() + result = spreadsheets.values().update( + spreadsheetId=spreadsheetId or self.config.spreadsheetId, + range=range or self.range, + valueInputOption=valueInputOption, + body=body + ).execute() + + logger.info(f'{result}') + logger.info(f"{result.get('updatedCells')} cells updated.") + return result + except Exception as error: + logger.error(f"An error occurred: {error}") + return error diff --git a/automon/integrations/google/sheets/config.py b/automon/integrations/google/sheets/config.py new file mode 100644 index 00000000..ae189216 --- /dev/null +++ b/automon/integrations/google/sheets/config.py @@ -0,0 +1,30 @@ +from automon import log +from automon.helpers.osWrapper import environ +from automon.integrations.google.auth import GoogleAuthConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class GoogleSheetsConfig(GoogleAuthConfig): + """Google Sheets config""" + + def __init__( + self, + spreadsheetId: str = None, + ): + super().__init__() + + self.serviceName = 'sheets' + self.scopes = [ + 'https://www.googleapis.com/auth/drive', + 'https://www.googleapis.com/auth/drive.file', + 'https://www.googleapis.com/auth/drive.readonly', + 'https://www.googleapis.com/auth/spreadsheets', + 'https://www.googleapis.com/auth/spreadsheets.readonly', + ] + self.version = 'v4' + + self.spreadsheetId = spreadsheetId or environ('GOOGLE_SHEET_ID') + + logger.info(f'{self}') diff --git a/automon/tests/integrations/sentryio/__init__.py b/automon/integrations/google/sheets/tests/__init__.py similarity index 100% rename from automon/tests/integrations/sentryio/__init__.py rename to automon/integrations/google/sheets/tests/__init__.py diff --git a/automon/integrations/google/sheets/tests/test_google_sheets.py b/automon/integrations/google/sheets/tests/test_google_sheets.py new file mode 100644 index 00000000..ec562792 --- /dev/null +++ b/automon/integrations/google/sheets/tests/test_google_sheets.py @@ -0,0 +1,356 @@ +import profile +import asyncio +import datetime +import tracemalloc + +import pandas as pd +import numpy as np + +from automon import log +from automon.helpers.sleeper import Sleeper +from automon.integrations.facebook import FacebookGroups +from automon.integrations.google.sheets import GoogleSheetsClient + +log.logging.getLogger('google_auth_httplib2').setLevel(log.logging.ERROR) +log.logging.getLogger('googleapiclient.discovery').setLevel(log.logging.ERROR) +log.logging.getLogger('googleapiclient.discovery_cache').setLevel(log.logging.ERROR) +log.logging.getLogger('urllib3.connectionpool').setLevel(log.logging.ERROR) +log.logging.getLogger('selenium.webdriver.common.service').setLevel(log.logging.ERROR) +log.logging.getLogger('selenium.webdriver.remote.remote_connection').setLevel(log.logging.ERROR) +log.logging.getLogger('selenium.webdriver.common.selenium_manager').setLevel(log.logging.ERROR) + +log.logging.getLogger('automon.integrations.seleniumWrapper.browser').setLevel(log.logging.CRITICAL) +log.logging.getLogger('automon.integrations.seleniumWrapper.webdriver_chrome').setLevel(log.logging.INFO) +log.logging.getLogger('automon.integrations.google.sheets.client').setLevel(log.logging.INFO) +log.logging.getLogger('automon.integrations.facebook.groups').setLevel(log.logging.DEBUG) +log.logging.getLogger('automon.integrations.requestsWrapper.client').setLevel(log.logging.INFO) +log.logging.getLogger('automon.helpers.sleeper').setLevel(log.logging.INFO) + +tracemalloc.start() + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + +SHEET_NAME = 'Automated Count DO NOT EDIT' +SHEET_NAME_INGEST = 'URLS TO INGEST' + +sheets_client = GoogleSheetsClient( + worksheet=SHEET_NAME, +) + +facebook_group_client = FacebookGroups() + + +async def get_facebook_info(url: str): + dict = {} + + if not url: + return dict + + await facebook_group_client.start( + headless=True, + random_user_agent=True, + ) + + await facebook_group_client.set_url(url=url) + + try: + result = await facebook_group_client.get_about(rate_limiting=False) + dict = await facebook_group_client.to_dict() + await facebook_group_client.quit() + except Exception as e: + logger.error(f'{e}') + + return dict + + +async def url_cleaner(url: str): + if not url: + return + if url[-1] == '/': + url = url[:-1] + return url + + +async def merge_urls(): + await sheets_client.get( + ranges='AUG23 AUDIT!A:Z', + fields="sheets/data/rowData/values/hyperlink", + ) + + data = sheets_client.response['sheets'][0]['data'][0]['rowData'] + # expand nested data + links = [] + for x in data: + if x: + links.append( + x['values'][0]['hyperlink'] + ) + + df_Shelley = pd.DataFrame(data=links, columns=['url']) + + await sheets_client.get() + await sheets_client.get_values( + range=f'{SHEET_NAME}!A:Z' + ) + + sheet_values = sheets_client.values + sheet_columns = sheet_values[0] + sheet_data = sheet_values[1:] + + df = pd.DataFrame(data=sheet_data, columns=sheet_columns) + df = df.dropna(subset=['url']) + + # merge both lists or urls + df = pd.merge(df, df_Shelley, how='outer', on='url') + df = df.drop_duplicates(subset=['url'], keep='first') + return df + + +async def batch_processing(sheet_index: int, df: pd.DataFrame): + # df_results = df['url'].dropna().apply( + # lambda url: get_facebook_info(url=url) + # ) + + df_index = df['url'].dropna().index + df_url = df['url'].dropna().iloc[0] + df_results = await get_facebook_info(url=df_url) + df_results = pd.DataFrame([df_results]) + + df = df.reset_index() + + todays_date = datetime.datetime.now().date() + monthly = f'{todays_date.year}-{todays_date.month}' + + assert df['url'].iloc[0] == df_results['url'].iloc[0] + + # create columns + df[f'url'] = df_results['url'] + df[f'{monthly}'] = df_results['members_count'] + df[f'last_updated'] = monthly + df[f'title'] = df_results['title'] + df[f'content_unavailable'] = df_results['content_unavailable'] + df[f'creation_date'] = df_results['creation_date'] + df[f'creation_date_timestamp'] = df_results['creation_date_timestamp'] + df[f'history'] = df_results['history'] + df[f'members_count'] = df_results['members_count'] + df[f'posts_monthly_count'] = df_results['posts_monthly_count'] + df[f'posts_today_count'] = df_results['posts_today_count'] + df[f'privacy'] = df_results['privacy'] + df[f'visible'] = df_results['visible'] + + # set dtype to Int32 + df[f'{monthly}'] = df[f'{monthly}'].astype('Int32') + df[f'creation_date_timestamp'] = df[f'creation_date_timestamp'].astype('Int32') + df[f'members_count'] = df[f'members_count'].astype('Int32') + df[f'posts_monthly_count'] = df[f'posts_monthly_count'].astype('Int32') + df[f'posts_today_count'] = df[f'posts_today_count'].astype('Int32') + + # order columns + columns = [ + 'url', + 'title', + 'creation_date', + 'creation_date_timestamp', + 'history', + 'privacy', + 'visible', + 'content_unavailable', + 'last_updated', + 'posts_monthly_count', + 'posts_today_count', + 'members_count', + ] + + sheet_index_df = df['index'].loc[0] + assert sheet_index == sheet_index_df + df = df.drop(columns='index') + + # add all other columns + df_columns = df.columns.tolist() + columns.extend( + [x for x in df_columns if x not in columns] + ) + + # finally add today's date + if f'{monthly}' not in columns: + columns.append( + f'{monthly}', + ) + + df = df.loc[:, columns] + df = df.fillna(np.nan).replace([np.nan], [None]) + + update_columns = await sheets_client.update( + range=f'{SHEET_NAME}!A1:Z', + values=[columns], + ) + + update = await sheets_client.update( + range=f'{SHEET_NAME}!A{sheet_index_df}:Z', + values=[x for x in df.values.tolist()] + ) + + logger.info(f'{sheet_index_df}: {[x for x in df.values.tolist()]}') + + return df + + +async def memory_profiler(): + snapshot = tracemalloc.take_snapshot() + top_stats = snapshot.statistics("lineno") + + df_memory_profile = pd.DataFrame([ + dict(size_B=stat.size, count=stat.count, file=stat.traceback._frames[0][0], + file_line=stat.traceback._frames[0][1]) for stat in top_stats + ]) + df_memory_profile.sort_values(by='size_B', ascending=False) + df_memory_profile['size_KB'] = df_memory_profile['size_B'].apply( + lambda B: round(B / 1024) + ) + df_memory_profile['size_MB'] = df_memory_profile['size_KB'].apply( + lambda KB: round(KB / 1024) + ) + cols = df_memory_profile.columns.tolist() + cols.sort() + df_memory_profile = df_memory_profile.loc[:, cols] + + logger.debug( + f"total memory used: {df_memory_profile['size_MB'].sum()} MB; " + f'most memory used: ' + f'{df_memory_profile.iloc[0].to_dict()}' + ) + + return df_memory_profile + + +async def expensive_state_keeping(): + """fetch sheet data""" + if not await sheets_client.authenticate(): + return + + # merge urls from audit sheet + # df_audit = await merge_urls() + # df_audit = df_audit.fillna(np.nan).replace([np.nan], [None]) + # rows = [] + # rows.append(df_audit.columns.tolist()) + # rows.extend([x for x in df_audit.values.tolist()]) + # update = await sheets_client.update( + # range=f'{SHEET_NAME}!A:Z', + # values=rows + # ) + + # start processing + await sheets_client.get_values( + range=f'{SHEET_NAME}!A:Z' + ) + + sheet_values = sheets_client.values + try: + sheet_columns = sheet_values[0] + except: + return await expensive_state_keeping() + sheet_data = sheet_values[1:] + + if sheet_columns and sheet_data: + for row in sheet_data: + if len(sheet_columns) > len(sheet_data[sheet_data.index(row)]): + + fix_length = row + r = len(sheet_columns) - len(sheet_data[sheet_data.index(row)]) + for i in range(r): + fix_length.append(None) + + sheet_data[sheet_data.index(row)] = fix_length + + df = pd.DataFrame(data=sheet_data, columns=sheet_columns) + df = df.dropna(subset=['url']) + # set df index to match google sheet index numbering + df.index = df.index + 2 + + # drop duplicates + df_duplicates_to_delete = df[ + (df.url.duplicated(keep='first')) + ] + + for duplicate in df_duplicates_to_delete.iterrows(): + duplicate_index, duplicate_row = duplicate + + # clear row in sheet + data_range = f'{SHEET_NAME}!{duplicate_index}:{duplicate_index}' + result = await sheets_client.clear(range=data_range) + # max 60/min + Sleeper.seconds(f'WriteRequestsPerMinutePerUser', seconds=1) + logger.info(result) + df = df.drop(duplicate_index) + + # ingest urls from SHEET_NAME_INGEST + await sheets_client.get_values( + range=f'{SHEET_NAME_INGEST}!A:Z' + ) + ingest_sheet_values = sheets_client.values + if ingest_sheet_values: + ingest_sheet_values = [x[0] if x else [] for x in ingest_sheet_values] + ingest_sheet_values = [await url_cleaner(x) for x in ingest_sheet_values] + df_ingest_sheet_values = pd.DataFrame(ingest_sheet_values) + df_ingest_sheet_values.index = df_ingest_sheet_values.index + 1 + + for ingest_data in df_ingest_sheet_values.iterrows(): + ingest_index, ingest_url = ingest_data + ingest_url = ingest_url[0] + + if ingest_url not in df['url'].values: + ingest_series = pd.Series({'url': ingest_url}).to_frame().T + index_add_url = df.index[-1] + 1 + df.loc[index_add_url] = {'url': ingest_url} + + df.loc[index_add_url] = df.loc[index_add_url].fillna(np.nan).replace([np.nan], [None]) + + values = [[x for x in df.loc[index_add_url].values.tolist()]] + + update = await sheets_client.update( + range=f'{SHEET_NAME}!A{index_add_url}:Z', + values=values + ) + + logger.info( + f'{index_add_url}: {values}' + ) + + # clear url from ingest sheet + data_range = f'{SHEET_NAME_INGEST}!{ingest_index}:{ingest_index}' + clear = await sheets_client.clear(range=data_range) + logger.info(f'{clear}') + + return df + + +async def main(): + df = await expensive_state_keeping() + + # start updating + for data in df.iterrows(): + data_index, data_row = data + + df_batch = df.loc[data_index:data_index] + + # skip if last_updated is the current month + todays_date = datetime.datetime.now().date() + last_updated = f'{todays_date.year}-{todays_date.month}' + if df_batch['last_updated'].iloc[0] == last_updated: + # log.debug(f'skipping {data_index}, {data_row.to_dict()}') + # df = expensive_state_keeping() + continue + + try: + logger.info(f'complete {round(data_index / len(df) * 100)}% {data_index}/{len(df)}') + batch_result = await batch_processing(sheet_index=data_index, df=df_batch) + except Exception as error: + logger.error(f'{error}') + df_memory = await memory_profiler() + + +if __name__ == '__main__': + # loop = asyncio.get_event_loop() + # loop.run_until_complete(main()) + asyncio.run(main()) diff --git a/automon/integrations/google/sheets/tests/test_google_sheets_AUDIT.py b/automon/integrations/google/sheets/tests/test_google_sheets_AUDIT.py new file mode 100644 index 00000000..17c11e3c --- /dev/null +++ b/automon/integrations/google/sheets/tests/test_google_sheets_AUDIT.py @@ -0,0 +1,59 @@ +import datetime +import pandas as pd + +import unittest + +from automon.integrations.google.sheets import GoogleSheetsClient +from automon.integrations.facebook import FacebookGroups + + +async def get_facebook_info(url: str): + group = FacebookGroups() + # group.start(headless=False) + await group.start(headless=True) + await group.get(url=url) + if not group.privacy_details: + close = await group._browser.wait_for_element(value=group._xpath_popup_close, by=group._browser.by.XPATH) + close.click() + about = await group._browser.wait_for_element(value=group._xpath_about, by=group._browser.by.XPATH) + about.click() + + return await group.to_dict() + + +class MyTestCase(unittest.TestCase): + async def test_authenticate(self): + spreadsheetId = '1isrvjU0DaRijEztByQuT9u40TaCOCwdaLAXgGmKHap8' + test = GoogleSheetsClient( + spreadsheetId=spreadsheetId, + worksheet='AUDIT list Shelley', + range='AUDIT list Shelley!A:B' + ) + + if not await test.authenticate(): + return + + await test.get_values( + range='AUDIT list Shelley!A:Z', + ) + await test.get( + ranges='AUDIT list Shelley!A:Z', + fields="sheets/data/rowData/values/hyperlink", + ) + + data = test.response['sheets'][0]['data'][0]['rowData'] + # expand nested data + links = [] + for x in data: + if x: + links.append( + x['values'][0]['hyperlink'] + ) + + df = pd.DataFrame(links) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/google/sheets/tests/test_google_sheets_clear.py b/automon/integrations/google/sheets/tests/test_google_sheets_clear.py new file mode 100644 index 00000000..2ddfbc85 --- /dev/null +++ b/automon/integrations/google/sheets/tests/test_google_sheets_clear.py @@ -0,0 +1,40 @@ +import unittest + +import pandas as pd + +from automon.integrations.google.sheets import GoogleSheetsClient + +SHEET_NAME = 'Copy of Automated Count DO NOT EDIT' + + +class MyTestCase(unittest.TestCase): + async def test_authenticate(self): + sheets_client = GoogleSheetsClient( + worksheet=SHEET_NAME, + ) + + if not await sheets_client.authenticate(): + return + + await sheets_client.get_values( + range=f'{SHEET_NAME}!A:Z' + ) + + sheet_values = sheets_client.values + sheet_columns = sheet_values[0] + sheet_data = sheet_values[1:] + + df = pd.DataFrame(data=sheet_data, columns=sheet_columns) + df = df.dropna(subset=['url']) + # set df index to match google sheet index numbering + df.index = df.index + 2 + + await sheets_client.clear( + range=f'{SHEET_NAME}!8:5', + ) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/integrations/splunk/__init__.py b/automon/integrations/google/tests/__init__.py similarity index 100% rename from automon/tests/integrations/splunk/__init__.py rename to automon/integrations/google/tests/__init__.py diff --git a/automon/integrations/google/tests/test_google_contacts.py b/automon/integrations/google/tests/test_google_contacts.py new file mode 100644 index 00000000..cd454355 --- /dev/null +++ b/automon/integrations/google/tests/test_google_contacts.py @@ -0,0 +1,15 @@ +import unittest + +from automon.integrations.google.people import GooglePeopleClient + +c = GooglePeopleClient() + + +class TestClient(unittest.TestCase): + def test_list_connections(self): + if c.isConnected(): + self.assertTrue(list(c.list_connection_generator())) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/google/tests/test_google_contacts_neo4j.py b/automon/integrations/google/tests/test_google_contacts_neo4j.py new file mode 100644 index 00000000..bd9159d2 --- /dev/null +++ b/automon/integrations/google/tests/test_google_contacts_neo4j.py @@ -0,0 +1,21 @@ +import unittest + +from automon.integrations.google.people import GooglePeopleClient +from automon.integrations.neo4jWrapper import Neo4jClient + +c = GooglePeopleClient() +n = Neo4jClient() + + +class TestClient(unittest.TestCase): + + def test_create_nodes(self): + if c.isConnected(): + contacts = c.list_connections().contacts + for contact in contacts: + n.merge_dict(contact) + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/grok/__init__.py b/automon/integrations/grok/__init__.py new file mode 100644 index 00000000..bc635614 --- /dev/null +++ b/automon/integrations/grok/__init__.py @@ -0,0 +1,57 @@ +import os +import warnings +import pandas as pd + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) + + +class Grok: + def __init__(self): + + p = 'logstash-patterns-core/patterns' + l = f'{os.path.join(os.path.split(os.path.realpath(__file__))[0])}' + + walk = os.walk(l) + + for folder, folders, files in walk: + f_list = [os.path.join(folder, f) for f in files] + + if 'legacy' in folder: + self.legacy_df = self.to_df(f_list) + self.legacy = self.legacy_df.to_dict()[0] + + if 'ecs-v1' in folder: + self.ecs_v1_df = self.to_df(f_list) + self.ecs_v1 = self.ecs_v1_df.to_dict()[0] + + pass + + def to_df(self, files: list) -> pd.DataFrame: + + patterns = [self.to_pattern(f) for f in files] + return self.expanded_dict(patterns) + + def to_pattern(self, file: str) -> pd.Series: + filename = os.path.split(file)[-1] + pattern = open(file, 'r').read() + pattern = [x for x in pattern.splitlines() if '#' not in x if x] + pattern = [x.split(' ') for x in pattern] + pattern = {k[0]: ''.join(k[1:]) for k in pattern} + + return pd.Series(pattern).rename(filename) + + def expanded_dict(self, patterns: list) -> pd.DataFrame: + + # big_dict = {} + # for d in patterns: + # for k, v in d.items(): + # if k not in big_dict.keys(): + # big_dict[k] = v + # else: + # logger.info(f'skipping existing, {k}') + + df = pd.DataFrame(pd.concat(patterns)) + return df diff --git a/automon/helpers/grok/logstash-patterns-core/LICENSE b/automon/integrations/grok/logstash-patterns-core/LICENSE similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/LICENSE rename to automon/integrations/grok/logstash-patterns-core/LICENSE diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/aws b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/aws similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/aws rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/aws diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/bacula b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/bacula similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/bacula rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/bacula diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/bind b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/bind similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/bind rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/bind diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/bro b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/bro similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/bro rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/bro diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/exim b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/exim similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/exim rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/exim diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/firewalls b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/firewalls similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/firewalls rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/firewalls diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/grok-patterns b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/grok-patterns similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/grok-patterns rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/grok-patterns diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/haproxy b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/haproxy similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/haproxy rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/haproxy diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/httpd b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/httpd similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/httpd rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/httpd diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/java b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/java similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/java rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/java diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/junos b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/junos similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/junos rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/junos diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/linux-syslog b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/linux-syslog similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/linux-syslog rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/linux-syslog diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/maven b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/maven similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/maven rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/maven diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/mcollective b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/mcollective similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/mcollective rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/mcollective diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/mongodb b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/mongodb similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/mongodb rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/mongodb diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/nagios b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/nagios similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/nagios rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/nagios diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/postgresql b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/postgresql similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/postgresql rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/postgresql diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/rails b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/rails similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/rails rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/rails diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/redis b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/redis similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/redis rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/redis diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/ruby b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/ruby similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/ruby rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/ruby diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/squid b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/squid similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/squid rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/squid diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/zeek b/automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/zeek similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/ecs-v1/zeek rename to automon/integrations/grok/logstash-patterns-core/patterns/ecs-v1/zeek diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/aws b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/aws similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/aws rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/aws diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/bacula b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/bacula similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/bacula rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/bacula diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/bind b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/bind similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/bind rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/bind diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/bro b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/bro similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/bro rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/bro diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/exim b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/exim similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/exim rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/exim diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/firewalls b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/firewalls similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/firewalls rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/firewalls diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/grok-patterns b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/grok-patterns similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/grok-patterns rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/grok-patterns diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/haproxy b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/haproxy similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/haproxy rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/haproxy diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/httpd b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/httpd similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/httpd rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/httpd diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/java b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/java similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/java rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/java diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/junos b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/junos similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/junos rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/junos diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/linux-syslog b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/linux-syslog similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/linux-syslog rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/linux-syslog diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/maven b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/maven similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/maven rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/maven diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/mcollective b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/mcollective similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/mcollective rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/mcollective diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/mcollective-patterns b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/mcollective-patterns similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/mcollective-patterns rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/mcollective-patterns diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/mongodb b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/mongodb similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/mongodb rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/mongodb diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/nagios b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/nagios similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/nagios rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/nagios diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/postgresql b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/postgresql similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/postgresql rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/postgresql diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/rails b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/rails similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/rails rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/rails diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/redis b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/redis similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/redis rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/redis diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/ruby b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/ruby similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/ruby rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/ruby diff --git a/automon/helpers/grok/logstash-patterns-core/patterns/legacy/squid b/automon/integrations/grok/logstash-patterns-core/patterns/legacy/squid similarity index 100% rename from automon/helpers/grok/logstash-patterns-core/patterns/legacy/squid rename to automon/integrations/grok/logstash-patterns-core/patterns/legacy/squid diff --git a/automon/tests/integrations/splunk_soar/__init__.py b/automon/integrations/grok/tests/__init__.py similarity index 100% rename from automon/tests/integrations/splunk_soar/__init__.py rename to automon/integrations/grok/tests/__init__.py diff --git a/automon/integrations/grok/tests/test_grok.py b/automon/integrations/grok/tests/test_grok.py new file mode 100644 index 00000000..2186638a --- /dev/null +++ b/automon/integrations/grok/tests/test_grok.py @@ -0,0 +1,13 @@ +import unittest + +from automon.integrations.grok import Grok + + +class GrokTest(unittest.TestCase): + + def test_Grok(self): + self.assertTrue(Grok()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/instagram/__init__.py b/automon/integrations/instagram/__init__.py new file mode 100644 index 00000000..e2fe2947 --- /dev/null +++ b/automon/integrations/instagram/__init__.py @@ -0,0 +1,3 @@ +from .client import InstagramClient +from .client_browser import InstagramBrowserClient +from .config import InstagramConfig diff --git a/automon/integrations/instagram/client.py b/automon/integrations/instagram/client.py new file mode 100644 index 00000000..c1028076 --- /dev/null +++ b/automon/integrations/instagram/client.py @@ -0,0 +1,23 @@ +from automon import log + +from .config import InstagramConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) + + +class InstagramClient(object): + + def __init__(self, login: str = None, password: str = None, config: InstagramConfig = None): + """Instagram Client""" + self.config = config or InstagramConfig(login=login, password=password) + self.login = self.config.login + + def _isAuthenticated(self): + return + + def isAuthenticated(self): + return + + def __repr__(self): + return f'{self.__dict__}' diff --git a/automon/integrations/instagram/client_browser.py b/automon/integrations/instagram/client_browser.py new file mode 100644 index 00000000..467f99f3 --- /dev/null +++ b/automon/integrations/instagram/client_browser.py @@ -0,0 +1,309 @@ +import functools + +from automon import log +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + +from automon.helpers.sleeper import Sleeper +# from automon.integrations.minioWrapper import MinioClient + +from .config import InstagramConfig +from .urls import Urls +from .xpaths import XPaths + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class InstagramBrowserClient: + login: str + password: str + config: InstagramConfig + browser: SeleniumBrowser + + def __init__(self, + login: str = None, + password: str = None, + config: InstagramConfig = None, + headless: bool = True): + """Instagram Browser Client""" + self.config = config or InstagramConfig(login=login, password=password) + self.browser = None + + self.authenticated_browser = None + self.useragent = None + self.headless = headless + + def __repr__(self): + return f'{self.__dict__}' + + def _is_running(func): + @functools.wraps(func) + def wrapped(self, *args, **kwargs): + if self.is_ready(): + return func(self, *args, **kwargs) + return False + + return wrapped + + def _is_authenticated(func): + @functools.wraps(func) + def wrapped(self, *args, **kwargs): + if self.is_authenticated(): + return func(self, *args, **kwargs) + return False + + return wrapped + + def get_page(self, account: str): + """ Get page + """ + logger.debug(f'[get_page] getting {account}') + + page = f'https://instagram.com/{account}' + browser = self.authenticated_browser + return browser.get(page) + + def get_stories(self, account: str): + """ Retrieve story + """ + story = f'https://www.instagram.com/stories/{account}/' + num_of_stories = 0 + + logger.debug(f'[get_stories] {story}') + + browser = self.authenticated_browser + browser.get(story) + browser.browser.save_screenshot_to_minio(bucket_name='screenshots', + prefix='instagram/' + account) + + if 'Page Not Found' in browser.browser.title: + logger.debug(f'[get_stories] no stories for {account}') + return num_of_stories + + Sleeper.seconds(2) + + while True: + try: + self._next_story(browser) + + title = browser.browser.title + if title == 'Instagram': + logger.debug( + ('[get_stories] {} end of stories'.format(account))) + raise Exception + num_of_stories += 1 + browser.save_screenshot_to_minio(bucket_name='screenshots', + prefix='instagram/' + account) + Sleeper.seconds(1) + browser.save_screenshot_to_minio(bucket_name='screenshots', + prefix='instagram/' + account) + except Exception as error: + # TODO: disable browser proxy when done + logger.debug(f'[get_stories] done: {account}, {error}') + return num_of_stories + + def _next_story(self, authenticated_browser): + """ Click next story button + """ + + xpaths = [ + '//*[@id="react-root"]/section/div/div/section/div[2]/div[1]/div/div/div[2]/div/div/button', + '//*[@id="react-root"]/section/div/div/section/div[2]/button[2]' + ] + + found_btn = False + for xpath in xpaths: + try: + browser = authenticated_browser + button = browser.browser.find_element_by_xpath(xpath) + found_btn = True + logger.debug('[next_story] next story') + return button.click() + except Exception as error: + logger.error(f'{error}') + + if not found_btn: + # no more stories. exit + logger.debug('[_next_story] no more stories') + raise Exception + + async def remove_save_login(self): + """check for "save your login info" dialogue""" + try: + await self.browser.wait_for_anything( + by=self.browser.by.TAG_NAME, + value='Save your login info?', + timeout=60, + contains=False, + return_first=True, + ) + remove_save_login = await self.browser.wait_for_anything( + by=self.browser.by.TAG_NAME, + value='Not now', + contains=False, + timeout=60, + ) + remove_save_login = [x for x in remove_save_login + if x.aria_role == 'button' + if x.text == 'Not now'] + + if remove_save_login: + await self.browser.save_screenshot(folder='.') + await self.browser.action_click(remove_save_login[0]) + + except: + return False + + async def remove_notifications(self): + """check for "notifications" dialogue""" + try: + remove_notifications = await self.browser.wait_for_elements( + by=self.browser.by.TAG_NAME, + value='span', + timeout=60) + + remove_notifications = [ + x for x in remove_notifications + if x.text == 'Turn on Notifications'] + + if not remove_notifications: + return False + + remove_notifications = await self.browser.wait_for_elements( + by=self.browser.by.TAG_NAME, + value='button', + timeout=60) + + remove_notifications = [ + x for x in remove_notifications + if x.text == 'Not Now'] + + if remove_notifications: + await self.browser.action_click(remove_notifications[0]) + + except Exception as error: + return False + + async def run_stories(self, limit=None): + """Run + """ + + logger.debug('[login] {}'.format(self.login)) + + self.authenticated_browser = await self.authenticate() + + # if self.authenticated_browser: + # + # count = 0 + # if limit: + # + # for account in self.following: + # hevlogger.debug( + # '[runrun] [{}] {} session: {}'.format(self.authenticated_browser.browser.name, + # self.authenticated_browser.browser.title, + # self.authenticated_browser.browser.session_id)) + # + # num_of_stories = get_stories(self.authenticated_browser, account) + # + # hevlog.logging.info('[{}] {} stories'.format(account, num_of_stories)) + # + # count = count + 1 + # if count == limit: + # return + # + # Sleeper.hour('instagram') + # self.run_stories() + + async def authenticate(self): + """Authenticate to Instagram + """ + + await self.browser.get(self.urls.login_page) + + # user + login_user = await self.browser.wait_for_elements( + by=self.browser.by.TAG_NAME, value='input', timeout=60) + login_user = [x for x in login_user if x.accessible_name == 'Phone number, username, or email'][0] + await self.browser.action_click(login_user) + await self.browser.action_type(self.login, secret=True) + + # password + login_pass = await self.browser.find_elements(by=self.browser.by.TAG_NAME, value='input') + login_pass = [x for x in login_pass if x.accessible_name == 'Password'][0] + await self.browser.action_click(login_pass) + await self.browser.action_type(self.config.password, secret=True) + await self.browser.action_type(self.browser.keys.ENTER) + + await self.remove_notifications() + await self.remove_save_login() + + if await self.is_authenticated(): + logger.info(f'logged in') + return True + + logger.error(f'login failed') + return False + + async def get_followers(self, account: str): + url = self.urls.followers(account) + await self.browser.get(url) + + async def is_authenticated(self): + try: + await self.remove_notifications() + await self.browser.get(self.urls.domain) + + is_authenticated = await self.browser.wait_for_elements( + by=self.browser.by.TAG_NAME, + value='img') + + is_authenticated = [ + x for x in is_authenticated + if x.accessible_name == f"{self.config.login}'s profile picture" + ] + + if is_authenticated: + logger.info(f'authenticated') + return True + except Exception as error: + logger.error(error) + + return False + + async def is_ready(self) -> bool: + try: + if await self.config.is_ready(): + if await self.browser.is_running(): + return True + except Exception as error: + logger.error(error) + return False + + @property + def login(self) -> str: + return self.config.login + + async def start(self): + try: + self.browser = SeleniumBrowser() + self.browser.config.webdriver_wrapper = ChromeWrapper() + + self.useragent = await self.browser.get_random_user_agent() + + if self.headless: + self.browser.config.webdriver_wrapper.in_headless().set_user_agent(self.useragent) + else: + self.browser.config.webdriver_wrapper.set_user_agent(self.useragent) + + await self.browser.start() + + except Exception as error: + logger.error(error) + + @property + def urls(self): + return Urls() + + @property + def xpaths(self): + return XPaths() diff --git a/automon/integrations/instagram/config.py b/automon/integrations/instagram/config.py new file mode 100644 index 00000000..bd988a9a --- /dev/null +++ b/automon/integrations/instagram/config.py @@ -0,0 +1,36 @@ +from automon import log + +from automon.helpers.osWrapper.environ import environ + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class InstagramConfig(object): + + def __init__(self, login: str = None, password: str = None): + self._login = login or environ('INSTAGRAM_LOGIN', '') + self._password = password or environ('INSTAGRAM_PASSWORD', '') + + def __repr__(self): + return str(dict( + login=self.login, + password="*" * len(self.password) if self.password else '' + )) + + @property + def login(self): + if not self._login: + logger.error(f'missing INSTAGRAM_LOGIN') + return self._login + + @property + def password(self): + if not self._password: + logger.error(f'missing INSTAGRAM_PASSWORD') + return self._password + + async def is_ready(self): + if self.login and self.password: + return True + raise Exception(f'not configured') diff --git a/automon/integrations/instagram/stories.py b/automon/integrations/instagram/stories.py new file mode 100644 index 00000000..f30119fb --- /dev/null +++ b/automon/integrations/instagram/stories.py @@ -0,0 +1,252 @@ +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.common.action_chains import ActionChains + +from automon import log +from automon.helpers.sleeper import Sleeper +from automon.integrations.seleniumWrapper.config import SeleniumConfig +from automon.integrations.seleniumWrapper.browser import SeleniumBrowser + +from automon.integrations.minioWrapper import MinioClient + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +def authenticate(username, password, minio_client=None, retries=None): + """Authenticates through browser and returns browser driver + + :param username: username string + :param password: password string + :param retries: not implemented + :return: authenticated browser + """ + + while True: + + # TODO: create capture proxy + # send traffic to /api + login_page = 'https://www.instagram.com/accounts/login/?source=auth_switcher' + + # browser = SeleniumBrowser(chrome()) + # browser = SeleniumBrowser(chrome_headless_nosandbox()) + browser = SeleniumBrowser(SeleniumConfig.chrome_for_docker()) + # browser = SeleniumBrowser(chrome_sandboxed()) + # browser = SeleniumBrowser(chrome_headless_sandboxed()) + # browser = SeleniumBrowser(chrome_remote()) + + if minio_client: + browser.set_minio_client(minio_client) + + browser.browser.get(login_page) + + logger.debug('[authenticate] {}'.format(login_page)) + + Sleeper.seconds(1) + + actions = ActionChains(browser.browser) + actions.send_keys(Keys.TAB) + actions.send_keys(username) + actions.perform() + + Sleeper.seconds(1) + + # the password field is sometimes div[3] and div[4] + login_pass_xpaths = [ + '//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[3]/div/label/input', + '//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[4]/div/label/input' + ] + + login_btn_xpaths = [ + '//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[4]/button', + '//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[6]/button' + ] + + found_pass = False + for xpath in login_pass_xpaths: + try: + login_pass = browser.browser.find_element_by_xpath(xpath) + found_pass = True + break + except: + pass + + Sleeper.seconds(2) + + found_btn = False + for xpath in login_btn_xpaths: + try: + login_btn = browser.browser.find_element_by_xpath(xpath) + found_btn = True + break + except: + pass + + if found_pass and found_btn: + break + else: + logger.error('[browser] Authentication failed') + + logger.debug( + '[browser] Found password field: {} Found login button: {}'.format(browser.browser.name, found_pass, + found_btn)) + + Sleeper.minute() + + login_pass.send_keys(password) + login_btn.click() + + Sleeper.seconds(5) + + logger.debug( + '[authenticated browser] [{}] {} session: {}'.format(browser.browser.name, browser.browser.title, + browser.browser.session_id)) + browser.save_screenshot_to_minio() + + return browser + + +def get_stories(authenticated_browser, account): + """ Retrieve story + """ + story = 'https://www.instagram.com/stories/{}/'.format(account) + num_of_stories = 0 + # TODO: set browser to redirect to proxy here + # TODO: check if account exists + browser = authenticated_browser + + logger.debug('[get_stories] {}'.format(story)) + + browser.browser.get(story) + browser.save_screenshot_to_minio(prefix=account) + + if 'Page Not Found' in browser.browser.title: + logger.debug('[get_stories] no stories for {}'.format(account)) + return num_of_stories + + Sleeper.seconds(2) + + while True: + try: + next_story(browser) + + title = browser.browser.title + if title == 'Instagram': + logger.debug(('[get_stories] {} end of stories'.format(account))) + raise Exception + num_of_stories += 1 + Sleeper.seconds(1) + browser.save_screenshot_to_minio(prefix=account) + except: + # TODO: disable browser proxy when done + logger.debug('[get_stories] done: {}'.format(account)) + return num_of_stories + + +def next_story(authenticated_browser): + """ Click next story button + """ + + xpaths = [ + '//*[@id="react-root"]/section/div/div/section/div[2]/div[1]/div/div/div[2]/div/div/button', + '//*[@id="react-root"]/section/div/div/section/div[2]/button[2]' + ] + + found_btn = False + for xpath in xpaths: + try: + browser = authenticated_browser + button = browser.browser.find_element_by_xpath(xpath) + found_btn = True + logger.debug('[next_story] next story') + return button.click() + except: + pass + + if not found_btn: + # no more stories. exit + logger.debug('[next_story] no more stories') + raise Exception + + +def get_page(authenticated_browser, account): + """ Get page + """ + # TODO: need to download page + logger.debug('[get_page] getting {}'.format(account)) + page = 'https://instagram.com/{}'.format(account) + browser = authenticated_browser + return browser.browser.get(page) + + +def run(config): + client = minio.client(config['minio-hev'], secure=False) + + instagram_config = config['instagram'] + login = instagram_config['login']['account'] + password = instagram_config['login']['password'] + accounts = instagram_config['following'] + + logger.debug('[login] {}'.format(login)) + logger.info('Running...') + logger.info('[accounts] {}'.format(len(accounts))) + + while True: + + if len(accounts) > 0: + + browser = authenticate(login, password, client) + + for account in accounts: + + while True: + if runrun(browser, account): + break + else: + browser = authenticate(login, password, client) + + Sleeper.hour() + + +def runrun(browser, account): + logger.debug( + '[runrun] [{}] {} session: {}'.format(browser.browser.name, browser.browser.title, + browser.browser.session_id)) + + num_of_stories = get_stories(browser, account) + + logger.info('[{}] {} stories'.format(account, num_of_stories)) + + # Sleeper.minute('instagram') + + return True + + +def test_run(config): + client = minio.client(config['minio-hev'], secure=False) + + instagram_config = config['instagram'] + login = instagram_config['login']['account'] + password = instagram_config['login']['password'] + accounts = instagram_config['following'] + + logger.debug('[login] {}'.format(login)) + logger.info('Running...') + logger.info('[accounts] {}'.format(len(accounts))) + + while True: + + if len(accounts) > 0: + + browser = authenticate(login, password, client) + + for account in accounts: + + while True: + if runrun(browser, account): + break + else: + browser = authenticate(login, password, client) + + break + break + break diff --git a/automon/integrations/instagram/tests/__init__.py b/automon/integrations/instagram/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/instagram/tests/test_instagram.py b/automon/integrations/instagram/tests/test_instagram.py new file mode 100644 index 00000000..a3fb304c --- /dev/null +++ b/automon/integrations/instagram/tests/test_instagram.py @@ -0,0 +1,14 @@ +import unittest + +from automon.integrations.instagram.client import InstagramClient + +c = InstagramClient() + + +class InstagramClientTest(unittest.TestCase): + def test_authenticate(self): + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/instagram/tests/test_instagram_browser.py b/automon/integrations/instagram/tests/test_instagram_browser.py new file mode 100644 index 00000000..5b56a6b1 --- /dev/null +++ b/automon/integrations/instagram/tests/test_instagram_browser.py @@ -0,0 +1,20 @@ +import unittest +import asyncio + +from automon.integrations.instagram.client_browser import InstagramBrowserClient + +c = InstagramBrowserClient(headless=True) +asyncio.run(c.start()) + + +class InstagramClientTest(unittest.TestCase): + + def test(self): + if asyncio.run(c.is_ready()): + asyncio.run(c.browser.get(c.urls.login_page)) + + asyncio.run(c.browser.quit()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/instagram/tests/test_instagram_browser_auth.py b/automon/integrations/instagram/tests/test_instagram_browser_auth.py new file mode 100644 index 00000000..4e3aa67a --- /dev/null +++ b/automon/integrations/instagram/tests/test_instagram_browser_auth.py @@ -0,0 +1,22 @@ +import unittest +import asyncio + +from automon.integrations.instagram.client_browser import InstagramBrowserClient + +client = InstagramBrowserClient(headless=False) +asyncio.run(client.start()) + + +class InstagramClientTest(unittest.TestCase): + + def test(self): + + if asyncio.run(client.is_ready()): + asyncio.run(client.browser.get(client.urls.domain)) + if not asyncio.run(client.is_authenticated()): + asyncio.run(client.authenticate()) + asyncio.run(client.browser.quit()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/instagram/tests/test_instagram_config.py b/automon/integrations/instagram/tests/test_instagram_config.py new file mode 100644 index 00000000..8d7d8cf9 --- /dev/null +++ b/automon/integrations/instagram/tests/test_instagram_config.py @@ -0,0 +1,15 @@ +import unittest + +from ..config import InstagramConfig + +config = InstagramConfig() + + +class InstagramConfigTest(unittest.TestCase): + def test_config(self): + if config.is_ready(): + self.assertTrue(config.is_ready()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/instagram/urls.py b/automon/integrations/instagram/urls.py new file mode 100644 index 00000000..8bcc5057 --- /dev/null +++ b/automon/integrations/instagram/urls.py @@ -0,0 +1,18 @@ +class Urls(object): + + def __repr__(self): + return f'Instagram URLs' + + @property + def domain(self): + return 'https://www.instagram.com' + + @property + def login_page(self): + return f'{self.domain}' + + def followers(self, account: str): + return f'{self.domain}/{account}/followers/' + + def following(self, account: str): + return f'{self.domain}/{account}/following/' diff --git a/automon/integrations/instagram/xpaths.py b/automon/integrations/instagram/xpaths.py new file mode 100644 index 00000000..f8c50ee3 --- /dev/null +++ b/automon/integrations/instagram/xpaths.py @@ -0,0 +1,17 @@ +class XPaths(object): + + def __repr__(self): + return 'Instagram XPaths' + + @property + def authenticated_paths(self): + authenticated = [] + authenticated.extend(self.profile_picture) + authenticated.extend(self.home) + return authenticated + + @property + def home(self): + return [ + '/html/body/div[2]/div/div/div[2]/div/div/div/div[1]/div[1]/div[1]/div/div/div/div/div[2]/div[1]/div/div/a/div', + ] diff --git a/automon/integrations/ldap/client.py b/automon/integrations/ldap/client.py index 2cfce1fb..3460825f 100755 --- a/automon/integrations/ldap/client.py +++ b/automon/integrations/ldap/client.py @@ -5,7 +5,10 @@ from pandas import DataFrame from subprocess import Popen, PIPE -from automon.log import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class LdapResult(object): @@ -26,7 +29,7 @@ def __repr__(self) -> str: class LdapClient(object): - def __init__(self, log_level=Logging.INFO, **kwargs): + def __init__(self): """run ldap commands :param log_level: @@ -41,8 +44,6 @@ def __init__(self, log_level=Logging.INFO, **kwargs): self.result = None self.results = Queue() - self._log = Logging(name=LdapClient.__name__, level=log_level, **kwargs) - def __repr__(self) -> str: return f'{self.__dict__}' @@ -64,11 +65,11 @@ def ldap(self, query: str = None) -> LdapResult: self.results.put_nowait(self.result) if not result_ldap.df.empty: - # self._log.debug(f'{result_ldap.df.iloc[0]}') - self._log.debug(f'FOUND {query} ({self.results.qsize()})') + # logger.debug(f'{result_ldap.df.iloc[0]}') + logger.debug(f'FOUND {query} ({self.results.qsize()})') # print('o', end='', flush=True) else: - self._log.debug(f'UNKNOWN {query} ({self.results.qsize()})') + logger.debug(f'UNKNOWN {query} ({self.results.qsize()})') # print('.', end='', flush=True) return result_ldap diff --git a/automon/integrations/mac/__init__.py b/automon/integrations/mac/__init__.py index 9c26976a..8a2ea4c2 100755 --- a/automon/integrations/mac/__init__.py +++ b/automon/integrations/mac/__init__.py @@ -1 +1,3 @@ from .airport import Airport +from .macchanger import MacChanger +from .check import os_is_mac diff --git a/automon/integrations/mac/airport/airport.py b/automon/integrations/mac/airport/airport.py index 6f8d4f90..71fcc4b8 100644 --- a/automon/integrations/mac/airport/airport.py +++ b/automon/integrations/mac/airport/airport.py @@ -3,7 +3,7 @@ from bs4 import BeautifulSoup -from automon import Logging +from automon import log from automon.helpers import Run from automon.helpers import Dates @@ -21,7 +21,8 @@ } -log = Logging(name='Airport', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Airport: @@ -73,31 +74,32 @@ def __repr__(self): def _command(command: str) -> list: return f'{command}'.split(' ') - def create_psk(self, ssid: str, passphrase: str): + async def create_psk(self, ssid: str, passphrase: str): """Create PSK from specified pass phrase and SSID.""" - if self.run(args=f'-P --ssid={ssid} --password={passphrase}'): - return f'{self._scan_output}'.strip() + if await self.run(args=f'-P --ssid={ssid} --password={passphrase}'): + return f'{bytes(self._scan_output).decode()}'.strip() return False - def disassociate(self): + async def disassociate(self): """Disassociate from any network.""" - return self.run(args='-z') + return await self.run(args='-z') - def getinfo(self): + async def getinfo(self): """Print current wireless status, e.g. signal info, BSSID, port type etc.""" - return self.run(args='-I') + return await self.run(args='-I') - def isReady(self): + async def isReady(self): if sys.platform == 'darwin': if os.path.exists(self._airport): + logger.debug(f'Airport found! {self._airport}') return True else: - log.warn(f'Airport not found! {self._airport}') + logger.error(f'Airport not found! {self._airport}') return False - def run(self, args: str = None): + async def run(self, args: str = None): """Run airport""" - if not self.isReady(): + if not await self.isReady(): return False command = f'{self._airport}' @@ -109,20 +111,21 @@ def run(self, args: str = None): self.scan_date = Dates.iso() try: - log.info(command) + logger.info(command) if self._runner.Popen(command=command, text=True): self._scan_output = self._runner.stdout return True except Exception as e: - log.error(e, raise_exception=True) + logger.error(e) + raise (Exception(e)) return False - def set_channel(self, channel: int): + async def set_channel(self, channel: int): """Set arbitrary channel on the card.""" - return self.run(args=f'-c {channel}') + return await self.run(args=f'-c {channel}') - def scan(self, channel: int = None, args: str = None, ssid: str = None): + async def scan(self, channel: int = None, args: str = None, ssid: str = None): """Perform a wireless broadcast scan.""" cmd = f'-s' @@ -136,20 +139,20 @@ def scan(self, channel: int = None, args: str = None, ssid: str = None): if args: cmd = f'{cmd} {args}' - if self.run(args=cmd): + if await self.run(args=cmd): self._scan_output = self._runner.stdout self._scan_error = self._runner.stderr return True return False - def scan_channel(self, channel: int = None): - return self.scan(channel=channel) + async def scan_channel(self, channel: int = None): + return await self.scan(channel=channel) - def scan_summary(self, channel: int = None, args: str = None, output: bool = True): - if self.scan(channel=channel, args=args): + async def scan_summary(self, channel: int = None, args: str = None, output: bool = True): + if await self.scan(channel=channel, args=args): if output: - log.info(f'{self._scan_output}') + logger.info(f'{self._scan_output}') return True return False @@ -157,13 +160,16 @@ def scan_summary(self, channel: int = None, args: str = None, output: bool = Tru def ssids(self): return self.scan_result.ssids - def scan_xml(self, ssid: str = None, channel: int = None) -> [Ssid]: + async def scan_xml(self, ssid: str = None, channel: int = None) -> [Ssid]: """Run scan and process xml output.""" - self.scan(ssid=ssid, args='-x', channel=channel) + await self.scan(ssid=ssid, args='-x', channel=channel) data = self._scan_output - data = [x.strip() for x in data.splitlines()] + data = [x for x in data.splitlines()] + data = [x.decode() for x in data] + data = [f'{x}' for x in data] + data = [x.strip() for x in data] data = ''.join(data) try: @@ -179,6 +185,6 @@ def scan_xml(self, ssid: str = None, channel: int = None) -> [Ssid]: return True except Exception as e: - log.error(f'Scan not parsed: {e}, {self.scan_cmd}', enable_traceback=False) + logger.error(f'Scan not parsed: {e}, {self.scan_cmd}') return False diff --git a/automon/integrations/mac/airport/scan.py b/automon/integrations/mac/airport/scan.py index 99d63749..31991f3d 100644 --- a/automon/integrations/mac/airport/scan.py +++ b/automon/integrations/mac/airport/scan.py @@ -1,10 +1,11 @@ from bs4 import BeautifulSoup -from automon import Logging +from automon import log from .ssid import Ssid -log = Logging(name='ScanXml', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class ScanXml: @@ -74,7 +75,7 @@ def ssids(self) -> [Ssid]: bssids = xml.contents[1].contents[0].contents scan = [self._bs2dict(x) for x in bssids] except: - log.error(f'No BSSIDs', enable_traceback=False) + logger.error(f'No BSSIDs') if scan: ssids = [Ssid(ssid) for ssid in scan] @@ -102,5 +103,5 @@ def summary(self) -> dict: summary['SSID'][ssid.SSID] = count summary['SSID'] = {k: v for k, v in sorted(summary['SSID'].items())} - log.info(f'Total SSID: {summary["Total SSID"]}') + logger.info(f'Total SSID: {summary["Total SSID"]}') return summary diff --git a/automon/integrations/mac/airport/ssid.py b/automon/integrations/mac/airport/ssid.py index 99194661..b3b828ba 100644 --- a/automon/integrations/mac/airport/ssid.py +++ b/automon/integrations/mac/airport/ssid.py @@ -1,6 +1,7 @@ -from automon.log import Logging +from automon import log -log = Logging(name='Ssid', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Ssid: @@ -36,7 +37,7 @@ def __init__(self, ssid: dict): self.SSID = self.SSID_STR self.WPS_STATE = self.IE_KEY_WPS_SC_STATE - log.debug(f'{self.summary}') + self.summary def __repr__(self): return f'{self.summary}' @@ -51,9 +52,12 @@ def __lt__(self, other): @property def summary(self): - return f'[rssi: {self.DISTANCE} dBm] ' \ - f'{self.SSID} ' \ - f'[ch: {self.CHANNEL}] ' \ - f'[bssid: {self.MAC}] ' \ - f'[noise: {self.NOISE}] ' \ - f'[age: {self.AGE}] ' + summary = f'[rssi: {self.DISTANCE} dBm] ' \ + f'{self.SSID} ' \ + f'[ch: {self.CHANNEL}] ' \ + f'[bssid: {self.MAC}] ' \ + f'[noise: {self.NOISE}] ' \ + f'[age: {self.AGE}] ' + + logger.debug(f'{summary}') + return summary diff --git a/automon/integrations/mac/airport/tests/__init__.py b/automon/integrations/mac/airport/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/mac/airport/tests/test_airport.py b/automon/integrations/mac/airport/tests/test_airport.py new file mode 100644 index 00000000..01ac690c --- /dev/null +++ b/automon/integrations/mac/airport/tests/test_airport.py @@ -0,0 +1,53 @@ +import unittest +import asyncio +import sys + +from automon.integrations.mac.airport import Airport + +airport = Airport() + + +class AirportTest(unittest.TestCase): + + def test_run(self): + if asyncio.run(airport.isReady()): + self.assertTrue(asyncio.run(airport.run())) + + def test_scan(self): + if asyncio.run(airport.isReady()): + self.assertTrue(asyncio.run(airport.scan())) + self.assertTrue(asyncio.run(airport.scan(0))) + + def test_summary(self): + if asyncio.run(airport.isReady()): + self.assertTrue(asyncio.run(airport.scan_summary())) + self.assertTrue(asyncio.run(airport.scan_summary(0))) + + def test_xml(self): + if asyncio.run(airport.isReady()): + scan = asyncio.run(airport.scan_xml()) + if scan: + self.assertTrue(scan) + self.assertFalse(asyncio.run(airport.scan_xml(0))) + + def test_set_channel(self): + if asyncio.run(airport.isReady()): + pass + # self.assertTrue(a.set_channel(10)) + + def test_disassociate(self): + if asyncio.run(airport.isReady()): + pass + # self.assertTrue(a.disassociate()) + + def test_getinto(self): + if asyncio.run(airport.isReady()): + self.assertTrue(asyncio.run(airport.getinfo())) + + def test_create_psk(self): + if asyncio.run(airport.isReady()): + self.assertTrue(asyncio.run(airport.create_psk(ssid='AAAAAAAA', passphrase='CALVIN'))) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/integrations/airport/test_airport_neo4j.py b/automon/integrations/mac/airport/tests/test_airport_neo4j.py similarity index 80% rename from automon/tests/integrations/airport/test_airport_neo4j.py rename to automon/integrations/mac/airport/tests/test_airport_neo4j.py index 9310ec0a..f0ad5d0f 100644 --- a/automon/tests/integrations/airport/test_airport_neo4j.py +++ b/automon/integrations/mac/airport/tests/test_airport_neo4j.py @@ -1,9 +1,10 @@ import sys +import asyncio import unittest from automon.integrations.mac.airport import Airport -from automon.integrations.neo4j import Neo4jClient +from automon.integrations.neo4jWrapper import Neo4jClient class AirportToNeo4jTest(unittest.TestCase): @@ -11,8 +12,10 @@ class AirportToNeo4jTest(unittest.TestCase): n = Neo4jClient() def test_scan_xml(self): - if self.a.isReady(): - self.assertTrue(self.a.scan_xml()) + if asyncio.run(self.a.isReady()): + test = asyncio.run(self.a.scan_xml()) + if test: + self.assertTrue(test) if self.n.isConnected(): # self.n.delete_all() diff --git a/automon/integrations/mac/check.py b/automon/integrations/mac/check.py new file mode 100644 index 00000000..108b6d1b --- /dev/null +++ b/automon/integrations/mac/check.py @@ -0,0 +1,7 @@ +import sys + + +def os_is_mac(): + if sys.platform == 'darwin': + return True + return False diff --git a/automon/integrations/mac/macchanger/__init__.py b/automon/integrations/mac/macchanger/__init__.py new file mode 100644 index 00000000..02c0b9d7 --- /dev/null +++ b/automon/integrations/mac/macchanger/__init__.py @@ -0,0 +1 @@ +from .client import MacChanger \ No newline at end of file diff --git a/automon/integrations/mac/macchanger/client.py b/automon/integrations/mac/macchanger/client.py new file mode 100644 index 00000000..0d72df7d --- /dev/null +++ b/automon/integrations/mac/macchanger/client.py @@ -0,0 +1,69 @@ +import sys +import random + +from automon import log, Run + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class MacChanger(object): + + def __init__(self): + self.mac_fixed = None + self.mac_new = None + + self._run = Run() + + async def args_expansion(self, args: tuple) -> str: + return ' '.join(args) + + async def ifconfig(self, *args, **kwargs): + args = await self.args_expansion(args) + return self._run.run(f'ifconfig {args}', **kwargs) + + @property + async def is_ready(self): + logger.debug(sys.platform) + if sys.platform == 'darwin': + return True + + async def random_mac(self) -> str: + """return random mac address + + Example: + return 3c:a6:f6:16:da:66 + """ + mac = [] + + while len(mac) < 6: + mac.append( + random.choice(range(0, 255)) + ) + + mac = [hex(x) for x in mac] + mac = [str(x).split('x') for x in mac] + mac = [list(x)[1] for x in mac] + mac = ':'.join(mac) + + logger.debug(mac) + + return mac + + async def set_mac(self, mac: str, **kwargs): + return await self.ifconfig('en0', 'link', mac, **kwargs) + + async def set_mac_random(self, **kwargs): + return await self.set_mac(mac=await self.random_mac(), **kwargs) + + async def stdout(self): + logger.debug(self._run.stdout) + return self._run.stdout + + async def stderr(self): + logger.debug(self._run.stderr) + return self._run.stderr + + async def sudo_ifconfig(self, *args, stdin: str = None, **kwargs) -> bool: + args = await self.args_expansion(args) + return self._run.run(f'sudo -S ifconfig {args}', shell=True, stdin=stdin, **kwargs) diff --git a/automon/integrations/mac/macchanger/tests/__init__.py b/automon/integrations/mac/macchanger/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/mac/macchanger/tests/test_macchanger.py b/automon/integrations/mac/macchanger/tests/test_macchanger.py new file mode 100644 index 00000000..8159975c --- /dev/null +++ b/automon/integrations/mac/macchanger/tests/test_macchanger.py @@ -0,0 +1,21 @@ +import unittest +import asyncio + +from automon.integrations.mac import MacChanger + +client = MacChanger() + + +class MacChangerTest(unittest.TestCase): + if asyncio.run(client.is_ready): + def test_random_mac(self): + self.assertTrue(asyncio.run(client.random_mac())) + + def test_ifconfig(self): + self.assertTrue(asyncio.run(client.ifconfig())) + self.assertTrue(asyncio.run(client.stdout())) + self.assertFalse(asyncio.run(client.stderr())) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/mac/macchanger/tests/test_set_mac_random.py b/automon/integrations/mac/macchanger/tests/test_set_mac_random.py new file mode 100644 index 00000000..ff56b7e7 --- /dev/null +++ b/automon/integrations/mac/macchanger/tests/test_set_mac_random.py @@ -0,0 +1,19 @@ +import unittest +import asyncio + +from automon.integrations.mac import MacChanger + +client = MacChanger() + + +class MacChangerTest(unittest.TestCase): + if asyncio.run(client.is_ready): + def test_set_mac_random(self): + # self.assertTrue(asyncio.run(client.set_mac_random())) + # self.assertTrue(asyncio.run(client.stdout())) + # self.assertFalse(asyncio.run(client.stderr())) + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/mac/wdutil/__init__.py b/automon/integrations/mac/wdutil/__init__.py new file mode 100644 index 00000000..e58f8baf --- /dev/null +++ b/automon/integrations/mac/wdutil/__init__.py @@ -0,0 +1,2 @@ +from .client import WdutilClient +from .config import WdutilConfig diff --git a/automon/integrations/mac/wdutil/client.py b/automon/integrations/mac/wdutil/client.py new file mode 100644 index 00000000..c784be2c --- /dev/null +++ b/automon/integrations/mac/wdutil/client.py @@ -0,0 +1,70 @@ +from automon import log +from automon import log_secret +from automon.helpers import Run + +from .config import WdutilConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(level=log.DEBUG) + + +class WdutilClient(object): + + def __init__(self, config: WdutilConfig = None, wdutil_path: str = None): + self.config = config or WdutilConfig(wdutil_path=wdutil_path) + self.wdutil = self.config.wdutil_path() + + self._runner = Run() + + self.output = None + + def info(self): + return self.run('info') + + def run(self, arg: str): + self.config.is_ready() + + secret = f'echo {self.config.password} | ' + command = f'sudo -S {self.wdutil} {arg}' + + logger.info(f'echo {log_secret(self.config.password)} | {command}') + run = self._runner.run(command=f'{secret}{command}', shell=True) + + output = self._runner.stdout_lines + self.output = WdutilOutput(output=output) + + return run + + def is_ready(self): + if self.config.is_ready(): + return True + return False + + def help(self): + return self.run('help') + + +class WdutilOutput(object): + NETWORK: None + WIFI: None + BLUETOOTH: None + AWDL: None + + def __init__(self, output: [str]): + self._output = output + + @property + def network(self): + pass + + @property + def wifi(self): + pass + + @property + def bluetooth(self): + pass + + @property + def awdl(self): + pass diff --git a/automon/integrations/mac/wdutil/config.py b/automon/integrations/mac/wdutil/config.py new file mode 100644 index 00000000..dc0df97d --- /dev/null +++ b/automon/integrations/mac/wdutil/config.py @@ -0,0 +1,44 @@ +from automon import Run +from automon import log +from automon import environ +from automon.integrations.mac import os_is_mac + +from .exceptions import * + +logger = log.logging.getLogger(__name__) +logger.setLevel(level=log.DEBUG) + + +class WdutilConfig(object): + + def __init__(self, password: str = None, wdutil_path: str = None): + self.password = password or environ('WDUTIL_PASSWORD') + self._wdutil_path = wdutil_path + self._runner = Run() + + def is_ready(self): + if not self.password: + logger.error(f'missing WDUTIL_PASSWORD') + + if not self.wdutil_path(): + logger.error(f'missing wdutil') + + if self.password and self.wdutil_path(): + return True + + return False + + def wdutil_path(self): + if os_is_mac(): + + if self._wdutil_path: + return self._wdutil_path + + if self._runner.which('wdutil'): + self._wdutil_path = self._runner.stdout.decode().strip() + logger.info(str(dict( + wdutil_path=self._wdutil_path + ))) + return self._wdutil_path + + return False diff --git a/automon/integrations/mac/wdutil/exceptions.py b/automon/integrations/mac/wdutil/exceptions.py new file mode 100644 index 00000000..a3052770 --- /dev/null +++ b/automon/integrations/mac/wdutil/exceptions.py @@ -0,0 +1,2 @@ +class WdutilConfigNotReady(Exception): + pass diff --git a/automon/integrations/mac/wdutil/tests/__init__.py b/automon/integrations/mac/wdutil/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/mac/wdutil/tests/test_client_ready.py b/automon/integrations/mac/wdutil/tests/test_client_ready.py new file mode 100644 index 00000000..b73e44cd --- /dev/null +++ b/automon/integrations/mac/wdutil/tests/test_client_ready.py @@ -0,0 +1,18 @@ +import unittest + +from automon.integrations.mac import os_is_mac +from automon.integrations.mac.wdutil import WdutilClient, WdutilConfig + + +class MyTestCase(unittest.TestCase): + if os_is_mac(): + if WdutilConfig().is_ready(): + + def test_something(self): + self.assertTrue( + WdutilClient().is_ready() + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/mac/wdutil/tests/test_client_run.py b/automon/integrations/mac/wdutil/tests/test_client_run.py new file mode 100644 index 00000000..4adb43c0 --- /dev/null +++ b/automon/integrations/mac/wdutil/tests/test_client_run.py @@ -0,0 +1,17 @@ +import unittest + +from automon.integrations.mac import os_is_mac +from automon.integrations.mac.wdutil import WdutilClient + + +class MyTestCase(unittest.TestCase): + if WdutilClient().is_ready(): + def test_something(self): + client = WdutilClient() + self.assertTrue(client.run('info')) + self.assertTrue(client.info()) + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/mac/wdutil/tests/test_config.py b/automon/integrations/mac/wdutil/tests/test_config.py new file mode 100644 index 00000000..fa8cb1c9 --- /dev/null +++ b/automon/integrations/mac/wdutil/tests/test_config.py @@ -0,0 +1,14 @@ +import unittest + +from automon.integrations.mac import os_is_mac +from automon.integrations.mac.wdutil import WdutilConfig + + +class MyTestCase(unittest.TestCase): + if os_is_mac(): + def test_something(self): + self.assertFalse(WdutilConfig().is_ready()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/mac/wdutil/tests/test_wdutil.py b/automon/integrations/mac/wdutil/tests/test_wdutil.py new file mode 100644 index 00000000..b91588d5 --- /dev/null +++ b/automon/integrations/mac/wdutil/tests/test_wdutil.py @@ -0,0 +1,15 @@ +import unittest + +from automon.integrations.mac import os_is_mac +from automon.integrations.mac.wdutil import WdutilClient + + +class MyTestCase(unittest.TestCase): + + if os_is_mac(): + def test_something(self): + self.assertTrue(WdutilClient().wdutil) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/minio/bucket.py b/automon/integrations/minio/bucket.py deleted file mode 100644 index d49608b2..00000000 --- a/automon/integrations/minio/bucket.py +++ /dev/null @@ -1,11 +0,0 @@ -import json - -from minio.datatypes import Bucket as MinioBucket - - -class Bucket(MinioBucket): - def __init__(self, bucket: MinioBucket): - self.__dict__.update(bucket.__dict__) - - def to_json(self): - return json.dumps({k: f'{v}' for k, v in self.__dict__.items()}) diff --git a/automon/integrations/minio/config.py b/automon/integrations/minio/config.py deleted file mode 100644 index b01a1c73..00000000 --- a/automon/integrations/minio/config.py +++ /dev/null @@ -1,44 +0,0 @@ -import os -import urllib3 - -from automon.log import Logging -from automon.helpers import environ - -log = Logging(name='MinioConfig', level=Logging.ERROR) - - -class MinioConfig(object): - - def __init__(self, endpoint: str = None, - access_key: str = None, - secret_key: str = None, - session_token: str = None, - secure: bool = None, - region: str = None, - http_client: urllib3.PoolManager = None): - """Minio config""" - - self.endpoint = endpoint or environ('MINIO_ENDPOINT', 'localhost') - self.access_key = access_key or environ('MINIO_ACCESS_KEY') - self.secret_key = secret_key or environ('MINIO_SECRET_KEY') - self.session_token = session_token or environ('MINIO_SESSION_TOKEN') - self.secure = secure or environ('MINIO_SECURE', True) - self.region = region or environ('MINIO_REGION') - self.http_client = http_client or environ('MINIO_HTTP_CLIENT') - - if not self.endpoint: - log.warn(f'missing MINIO_ENDPOINT') - - if not self.access_key: - log.warn(f'missing MINIO_ACCESS_KEY') - - if not self.secret_key: - log.warn(f'missing MINIO_SECRET_KEY') - - def isReady(self): - if self.endpoint and self.access_key and self.secret_key: - return True - return False - - def __repr__(self): - return f'{self.__dict__}' diff --git a/automon/integrations/minio/__init__.py b/automon/integrations/minioWrapper/__init__.py similarity index 100% rename from automon/integrations/minio/__init__.py rename to automon/integrations/minioWrapper/__init__.py diff --git a/automon/integrations/minio/assertions.py b/automon/integrations/minioWrapper/assertions.py similarity index 54% rename from automon/integrations/minio/assertions.py rename to automon/integrations/minioWrapper/assertions.py index 847b5726..7e9cab91 100644 --- a/automon/integrations/minio/assertions.py +++ b/automon/integrations/minioWrapper/assertions.py @@ -1,6 +1,7 @@ -from automon import Logging +from automon import log -log = Logging(name='MinioAssertions', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class MinioAssertions: @@ -9,5 +10,5 @@ class MinioAssertions: def bucket_name(bucket: str) -> bool: if bucket == f'{bucket}'.lower(): return f'{bucket}' - log.warn(msg=f'bucket name "{bucket}" must be lower') + logger.warning(msg=f'bucket name "{bucket}" must be lower') return f'{bucket}'.lower() diff --git a/automon/integrations/minioWrapper/bucket.py b/automon/integrations/minioWrapper/bucket.py new file mode 100644 index 00000000..7422e670 --- /dev/null +++ b/automon/integrations/minioWrapper/bucket.py @@ -0,0 +1,18 @@ +import json +import minio + +from datetime import datetime + + +class Bucket(minio.datatypes.Bucket): + name: str + creation_date: datetime + + def __init__(self, bucket: minio.datatypes.Bucket): + self.__dict__.update(bucket.__dict__) + + def to_json(self): + return json.dumps({k: f'{v}' for k, v in self.__dict__.items()}) + + def __repr__(self): + return f'{str(self.creation_date)[:19]} ({self.name})' diff --git a/automon/integrations/minio/client.py b/automon/integrations/minioWrapper/client.py similarity index 58% rename from automon/integrations/minio/client.py rename to automon/integrations/minioWrapper/client.py index 7c874977..83d44971 100644 --- a/automon/integrations/minio/client.py +++ b/automon/integrations/minioWrapper/client.py @@ -1,37 +1,40 @@ import io +import minio import socket import functools -from minio import Minio from typing import Optional -from automon.log import Logging +from automon import log from .bucket import Bucket from .object import Object, DeleteObject from .config import MinioConfig from .assertions import MinioAssertions -log = Logging(name='MinioClient', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class MinioClient(object): + endpoint: str + access_key: str + secret_key: str + config: MinioConfig def __init__(self, endpoint: str = None, access_key: str = None, secret_key: str = None, config: MinioConfig = None): - """Minio client""" + """Minio client + """ self.config = config or MinioConfig(endpoint=endpoint, access_key=access_key, secret_key=secret_key) - def __repr__(self): - return f'endpoint: {self.config.endpoint}' - @property def client(self): - client = Minio( + client = minio.Minio( endpoint=self.config.endpoint, access_key=self.config.access_key, secret_key=self.config.secret_key, @@ -43,96 +46,103 @@ def client(self): return client def _is_connected(func): - """Decorator that checks if MinioClient is connected + """Decorator that checks if MinioClient can list buckets """ @functools.wraps(func) def _wrapper(self, *args, **kwargs): - if not self.config.isReady(): + if not self.config.is_ready: return False try: self.client.list_buckets() # if not self._sessionExpired() or self.client.list_buckets(): return func(self, *args, **kwargs) except Exception as e: - log.error(f'Minio client not connected. {e}') + logger.error(f'Minio client not connected. {e}') return False return _wrapper @_is_connected - def download_object(self, bucket_name, file): + def download_object(self, bucket_name: str, file: str): """Minio object downloader """ bucket_name = MinioAssertions.bucket_name(bucket_name) - log.debug(f'[downloader] Downloading: {bucket_name}/{file.object_name}') + logger.debug(f'[downloader] Downloading: {bucket_name}/{file.object_name}') return self.client.get_object(bucket_name, file.object_name) @_is_connected - def get_bucket(self, bucket_name: str) -> Optional[Bucket]: - """List Minio buckets""" + def get_bucket(self, bucket_name: str, **kwargs) -> Bucket or None: + """List Minio buckets + """ bucket_name = MinioAssertions.bucket_name(bucket_name) - buckets = self.list_buckets() + buckets = self.list_buckets(**kwargs) - for b in buckets: - if b == bucket_name: - log.info(f'Bucket: "{b}"') - return b + if bucket_name in buckets: + bucket_index = buckets.index(bucket_name) + return buckets[bucket_index] - log.error(msg=f'Bucket "{bucket_name}" does not exist', raise_exception=False) + logger.info(msg=f'Get bucket: "{bucket_name}" does not exist') return @_is_connected - def isConnected(self): + def is_connected(self): """Check if MinioClient is connected """ - log.info(f'Minio client OK') + logger.info(f'Minio client connected') return True @_is_connected - def list_buckets(self) -> [Bucket]: - """List Minio buckets""" - buckets = self.client.list_buckets() + def list_buckets(self, **kwargs) -> [Bucket]: + """List Minio buckets + """ + buckets = self.client.list_buckets(**kwargs) buckets = [Bucket(x) for x in buckets] - log.info(f'Buckets total: {len(buckets)}') + logger.info(f'List buckets: {len(buckets)}') return buckets @_is_connected def list_objects( self, bucket_name: str, - folder: str = None, - recursive: bool = True, **kwargs) -> [Object]: - """List Minio objects""" + prefix: str = None, + recursive: bool = False, + start_after: str = None, **kwargs) -> [Object]: + """List Minio objects + """ bucket_name = MinioAssertions.bucket_name(bucket_name) try: - objects = self.client.list_objects(bucket_name, folder, recursive=recursive, **kwargs) + objects = self.client.list_objects( + bucket_name=bucket_name, + prefix=prefix, + recursive=recursive, + start_after=start_after, **kwargs) objects = [Object(x) for x in objects] - msg = f'Objects total: {len(objects)} (bucket: "{bucket_name}")' + msg = f'List objects total: {len(objects)} (bucket: "{bucket_name}")' - if folder: - msg += f' Folder: "{folder}"' + if prefix: + msg += f' Prefix: "{prefix}"' - log.info(msg) + logger.info(msg) return objects - except Exception as e: - log.error(f'failed to list objects. {e}') + except Exception as error: + logger.error(f'failed to list objects. {error}') - return + return [] @_is_connected def list_objects_generator( self, bucket_name: str, folder: str = None, - recursive: bool = True, - **kwargs) -> [Object]: - """Generator for Minio objects""" + recursive: bool = True, **kwargs) -> [Object]: + """Generator for Minio objects + """ bucket_name = MinioAssertions.bucket_name(bucket_name) try: @@ -140,52 +150,57 @@ def list_objects_generator( return objects except Exception as e: - log.error(f'failed to list objects. {e}') + logger.error(f'failed to list objects. {e}') - return False + return [] @_is_connected - def remove_bucket(self, bucket_name: str) -> Optional[bool]: + def remove_bucket(self, bucket_name: str, **kwargs) -> bool: + """Remove bucket + """ bucket_name = MinioAssertions.bucket_name(bucket_name) try: - self.client.remove_bucket(bucket_name) - log.info(f'Removed bucket "{bucket_name}"') + self.client.remove_bucket(bucket_name, **kwargs) + logger.info(f'Removed bucket: "{bucket_name}"') return True except Exception as e: - log.error(f'Remove bucket "{bucket_name}" failed. {e}', enable_traceback=False) + logger.error(f'Remove bucket: "{bucket_name}" failed. {e}') - return + return False @_is_connected - def remove_objects(self, bucket_name, folder=None) -> bool: + def remove_objects(self, bucket_name: str, prefix: str = None, **kwargs) -> bool: + """Remove all objects + """ bucket_name = MinioAssertions.bucket_name(bucket_name) - objects = self.list_objects(bucket_name, folder) + objects = self.list_objects(bucket_name=bucket_name, prefix=prefix) delete_objects = [DeleteObject(x) for x in objects] if not delete_objects: - log.info(f'Bucket is empty: "{bucket_name}"') - return + logger.info(f'Bucket is empty: "{bucket_name}"') + return True - errors = list(self.client.remove_objects(bucket_name, delete_objects)) - log.info(f'Removed {len(delete_objects)} objects in bucket "{bucket_name}"') + errors = list(self.client.remove_objects(bucket_name, delete_objects, **kwargs)) + logger.info(f'Removed {len(delete_objects)} objects in bucket "{bucket_name}"') - if self.list_objects(bucket_name, folder): - return self.remove_objects(bucket_name, folder=folder) + if self.list_objects(bucket_name, prefix): + return self.remove_objects(bucket_name, prefix=prefix) return True @_is_connected def make_bucket(self, bucket_name: str) -> Bucket: - """Make a bucket""" + """Make a bucket + """ bucket_name = MinioAssertions.bucket_name(bucket_name) try: self.client.make_bucket(bucket_name) - log.info(f'Created bucket "{bucket_name}"') + logger.info(f'Created bucket: "{bucket_name}"') except Exception as e: - log.warn(f'Bucket exists: "{bucket_name}"') + logger.warning(f'Bucket exists: "{bucket_name}". {e}') return self.get_bucket(bucket_name) @@ -196,11 +211,10 @@ def put_object(self, bucket_name: str, object_name: str, data: io.BytesIO, lengt part_size=None): """Minio object uploader """ - bucket_name = MinioAssertions.bucket_name(bucket_name) length = length or data.getvalue().__len__() - log.debug(f'[{self.put_object.__name__}] Uploading: {object_name}') + logger.debug(f'[{self.put_object.__name__}] Uploading: {object_name}') try: put = self.client.put_object( @@ -211,16 +225,16 @@ def put_object(self, bucket_name: str, object_name: str, data: io.BytesIO, lengt metadata=metadata, sse=sse, progress=progress) - log.info( - f'[put_object] Saved to ' + logger.info( + f'[put_object] Saved to: ' f'{self.config.endpoint}/{bucket_name}/{object_name}' ) return put except Exception as e: - log.error( - f'[{self.put_object.__name__}] Unable to save ' + logger.error( + f'[{self.put_object.__name__}] Unable to save: ' f'{self.config.endpoint}/{bucket_name}/{bucket_name} ' f'{e}', raise_exception=False @@ -228,6 +242,9 @@ def put_object(self, bucket_name: str, object_name: str, data: io.BytesIO, lengt return False + def __repr__(self): + return f'endpoint: {self.config.endpoint}' + def check_connection(host, port): try: @@ -237,5 +254,5 @@ def check_connection(host, port): s.close() return True except Exception as e: - log.error(e, enable_traceback=False) + logger.error(e) return False diff --git a/automon/integrations/minioWrapper/config.py b/automon/integrations/minioWrapper/config.py new file mode 100644 index 00000000..0d05f91b --- /dev/null +++ b/automon/integrations/minioWrapper/config.py @@ -0,0 +1,81 @@ +import os +import urllib3 + +from automon import log +from automon.helpers import environ + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class MinioConfig(object): + endpoint: str + access_key: str + secret_key: str + session_token: str + secure: bool + region: str + http_client: urllib3.PoolManager + + def __init__(self, endpoint: str = None, + access_key: str = None, + secret_key: str = None, + session_token: str = None, + secure: bool = None, + region: str = None, + http_client: urllib3.PoolManager = None): + """Minio config""" + + self._endpoint = endpoint or environ('MINIO_ENDPOINT', 'localhost') + self._access_key = access_key or environ('MINIO_ACCESS_KEY') + self._secret_key = secret_key or environ('MINIO_SECRET_KEY') + self._session_token = session_token or environ('MINIO_SESSION_TOKEN') + self._secure = secure or environ('MINIO_SECURE', True) + self._region = region or environ('MINIO_REGION') + self._http_client = http_client or environ('MINIO_HTTP_CLIENT') + + if not self.endpoint: + logger.warning(f'missing MINIO_ENDPOINT') + + if not self.access_key: + logger.warning(f'missing MINIO_ACCESS_KEY') + + if not self.secret_key: + logger.warning(f'missing MINIO_SECRET_KEY') + + @property + def access_key(self): + return self._access_key + + @property + def endpoint(self): + return self._endpoint + + @property + def is_ready(self): + if self.endpoint and self.access_key and self.secret_key: + return True + return False + + @property + def secret_key(self): + return self._secret_key + + @property + def secure(self): + return self._secure + + @property + def session_token(self): + return self._session_token + + @property + def region(self): + return self._region + + @property + def http_client(self): + return self._http_client + + def __repr__(self): + return f'{self.__dict__}' diff --git a/automon/integrations/minio/object.py b/automon/integrations/minioWrapper/object.py similarity index 50% rename from automon/integrations/minio/object.py rename to automon/integrations/minioWrapper/object.py index d8311cea..0a170c0c 100644 --- a/automon/integrations/minio/object.py +++ b/automon/integrations/minioWrapper/object.py @@ -1,23 +1,28 @@ -from minio.datatypes import Object as MinioObject -from minio.deleteobjects import DeleteObject as MinioDeleteObject +import minio +from automon.helpers.mathWrapper import human_readable_size -class Object(MinioObject): + +class Object(minio.datatypes.Object): bucket_name: str object_name: str + size: int - def __init__(self, object: MinioObject): + def __init__(self, object: minio.datatypes.Object): self.__dict__.update(object.__dict__) def __repr__(self): - return self.object_name + if self.object_name and self.size: + return f'{self.object_name} ({human_readable_size(self.size)})' + return f'{self.object_name}' -class DeleteObject(MinioDeleteObject): +class DeleteObject(minio.deleteobjects.DeleteObject): name: str version_id: str + bucket_name: str - def __init__(self, object: MinioObject): + def __init__(self, object: minio.deleteobjects.DeleteObject): self.__dict__.update(object.__dict__) self._name = object.object_name diff --git a/automon/integrations/minioWrapper/tests/__init__.py b/automon/integrations/minioWrapper/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/minio/test_minio_client.py b/automon/integrations/minioWrapper/tests/test_minio_client.py similarity index 67% rename from automon/tests/integrations/minio/test_minio_client.py rename to automon/integrations/minioWrapper/tests/test_minio_client.py index 729bb9f4..8953cf1a 100644 --- a/automon/tests/integrations/minio/test_minio_client.py +++ b/automon/integrations/minioWrapper/tests/test_minio_client.py @@ -1,7 +1,7 @@ import unittest import hashlib -from automon.integrations.minio.client import MinioClient +from automon.integrations.minioWrapper.client import MinioClient c = MinioClient() @@ -9,13 +9,13 @@ class ClientTest(unittest.TestCase): def test_isConnected(self): - if c.isConnected(): - self.assertTrue(c.isConnected()) + if c.is_connected(): + self.assertTrue(c.is_connected()) else: - self.assertFalse(c.isConnected()) + self.assertFalse(c.is_connected()) def test_clear_bucket(self): - if c.isConnected(): + if c.is_connected(): bucket = c.make_bucket('AAAAAA') if c.list_objects(bucket): self.assertTrue(c.remove_objects(bucket)) diff --git a/automon/integrations/minioWrapper/tests/test_minio_client_public.py b/automon/integrations/minioWrapper/tests/test_minio_client_public.py new file mode 100644 index 00000000..43e305db --- /dev/null +++ b/automon/integrations/minioWrapper/tests/test_minio_client_public.py @@ -0,0 +1,31 @@ +import unittest +import hashlib + +from automon.integrations.minioWrapper import MinioClient +from automon.integrations.minioWrapper.bucket import Bucket + +MINIO_ENDPOINT = 'play.minio.io:9000' +MINIO_ACCESS_KEY = 'Q3AM3UQ867SPQQA43P2F' +MINIO_SECRET_KEY = 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG' + +client = MinioClient(endpoint=MINIO_ENDPOINT, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY) +bucket = hashlib.md5(f'{MINIO_ENDPOINT}'.encode()).hexdigest() + + +class ClientTest(unittest.TestCase): + + def test_list_buckets(self): + if client.is_connected(): + self.assertTrue(client.list_buckets()) + self.assertEqual(type(client.list_buckets()), list) + + def test_get_bucket(self): + if client.is_connected(): + test = client.make_bucket(bucket) + + self.assertTrue(client.get_bucket(test)) + self.assertTrue(type(client.get_bucket(test)), Bucket) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/integrations/minio/test_minio_client_public_clear_bucket.py b/automon/integrations/minioWrapper/tests/test_minio_client_public_clear_bucket.py similarity index 65% rename from automon/tests/integrations/minio/test_minio_client_public_clear_bucket.py rename to automon/integrations/minioWrapper/tests/test_minio_client_public_clear_bucket.py index 79dcfe3e..589be8db 100644 --- a/automon/tests/integrations/minio/test_minio_client_public_clear_bucket.py +++ b/automon/integrations/minioWrapper/tests/test_minio_client_public_clear_bucket.py @@ -2,8 +2,8 @@ import datetime import hashlib -from automon.integrations.minio import MinioClient -from automon.integrations.minio.bucket import Bucket +from automon.integrations.minioWrapper import MinioClient +from automon.integrations.minioWrapper.bucket import Bucket MINIO_ENDPOINT = 'play.minio.io:9000' MINIO_ACCESS_KEY = 'Q3AM3UQ867SPQQA43P2F' @@ -16,10 +16,11 @@ class ClientTest(unittest.TestCase): def test_remove_bucket(self): - if c.isConnected(): + if c.is_connected(): test = c.make_bucket(bucket) - c.remove_objects(test) - self.assertTrue(c.remove_bucket(test)) + bucket_name = test.name + c.remove_objects(bucket_name) + self.assertTrue(c.remove_bucket(bucket_name)) if __name__ == '__main__': diff --git a/automon/integrations/minioWrapper/tests/test_minio_config.py b/automon/integrations/minioWrapper/tests/test_minio_config.py new file mode 100644 index 00000000..842c7f6c --- /dev/null +++ b/automon/integrations/minioWrapper/tests/test_minio_config.py @@ -0,0 +1,18 @@ +import unittest + +from automon.integrations.minioWrapper.config import MinioConfig + +c = MinioConfig() + + +class ConfigTest(unittest.TestCase): + + def test_MinioConfig(self): + if c.is_ready: + self.assertTrue(c.is_ready) + else: + self.assertFalse(c.is_ready) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/neo4j/config.py b/automon/integrations/neo4j/config.py deleted file mode 100644 index 0ccacc35..00000000 --- a/automon/integrations/neo4j/config.py +++ /dev/null @@ -1,30 +0,0 @@ -import os - -from automon.log import Logging -from automon.helpers.sanitation import Sanitation as S - -log = Logging(name='Neo4jConfig', level=Logging.DEBUG) - - -class Neo4jConfig: - def __init__(self, user: str = None, - password: str = None, - hosts: str = None, - encrypted: bool = None, - trust: bool = None): - """Neo4j config - """ - - self.NEO4J_USER = user or os.getenv('NEO4J_USER') or '' - self.NEO4J_PASSWORD = password or os.getenv('NEO4J_PASSWORD') or '' - self.NEO4J_HOST = hosts or os.getenv('NEO4J_HOST') or '' - - self.encrypted = encrypted - self.trust = trust - - if not self.NEO4J_USER: log.warn(f'missing NEO4J_USER') - if not self.NEO4J_PASSWORD: log.warn(f'missing NEO4J_PASSWORD') - if not self.NEO4J_HOST: log.warn(f'missing NEO4J_HOST') - - def __repr__(self): - return f'{self.__dict__}' diff --git a/automon/integrations/neo4j/__init__.py b/automon/integrations/neo4jWrapper/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from automon/integrations/neo4j/__init__.py rename to automon/integrations/neo4jWrapper/__init__.py diff --git a/automon/integrations/neo4j/client.py b/automon/integrations/neo4jWrapper/client.py similarity index 90% rename from automon/integrations/neo4j/client.py rename to automon/integrations/neo4jWrapper/client.py index 81a7bd5c..32662452 100644 --- a/automon/integrations/neo4j/client.py +++ b/automon/integrations/neo4jWrapper/client.py @@ -1,17 +1,17 @@ import neo4j -import logging from neo4j import GraphDatabase from queue import Queue -from automon.log import Logging -from automon.integrations.neo4j.cypher import Cypher +from automon import log +from automon.integrations.neo4jWrapper.cypher import Cypher from .config import Neo4jConfig from .results import Results -logging.getLogger('neo4j').setLevel(logging.ERROR) -log = Logging('Neo4jClient', Logging.DEBUG) +log.logging.getLogger('neo4j').setLevel(log.logging.ERROR) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Neo4jClient: @@ -49,12 +49,11 @@ def _client(self): client = GraphDatabase.driver( uri=self._config.NEO4J_HOST, auth=(self._config.NEO4J_USER, self._config.NEO4J_PASSWORD)) - log.info(f'Connected to neo4j server: {self._config.NEO4J_HOST}') + logger.info(f'Connected to neo4j server: {self._config.NEO4J_HOST}') return client except Exception as e: - log.error(f'Cannot connect to neo4j server: {self._config.NEO4J_HOST}, {e}', - enable_traceback=False, raise_exception=False) + logger.error(f'Cannot connect to neo4j server: {self._config.NEO4J_HOST}, {e}') return False @@ -165,7 +164,7 @@ def merge_node(self, data: dict, label: str = None, **kwargs): cypher = self._Cypher.merge_dict(label=label, data=data) - # log.debug(f'{final_cypher}') + # logger.debug(f'{final_cypher}') return self._send(cypher) @@ -180,12 +179,12 @@ def run(self, cypher=None) -> bool: response = self._session.run(cypher) self.results = Results(response) - log.info(f'cypher: {cypher}') - log.debug(f'Results: {self.results}') + logger.info(f'cypher: {cypher}') + logger.debug(f'Results: {self.results}') return True except Exception as e: - log.error(f"{e}", enable_traceback=False, raise_exception=True) + logger.error(f"{e}") return False diff --git a/automon/integrations/neo4j/clientAsync.py b/automon/integrations/neo4jWrapper/clientAsync.py similarity index 73% rename from automon/integrations/neo4j/clientAsync.py rename to automon/integrations/neo4jWrapper/clientAsync.py index 25b527f7..31c70863 100644 --- a/automon/integrations/neo4j/clientAsync.py +++ b/automon/integrations/neo4jWrapper/clientAsync.py @@ -4,15 +4,15 @@ from neo4j import GraphDatabase from queue import Queue -from automon.log import Logging -from automon.log.logger import logging -from automon.integrations.neo4j.cypher import Cypher +from automon import log +from automon.integrations.neo4jWrapper.cypher import Cypher from .config import Neo4jConfig from .results import Results -logging.getLogger('neo4j').setLevel(logging.ERROR) -log = Logging(__name__, Logging.DEBUG) +log.logging.getLogger('neo4j').setLevel(logger.ERROR) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Neo4jAsyncClient: @@ -30,7 +30,6 @@ def __init__(self, :param hosts: list :param encrypted: bool """ - self._log = Logging(Neo4jAsyncClient.__name__, Logging.DEBUG) self.config = config or Neo4jConfig( user=user, @@ -57,12 +56,11 @@ def _client(self): client = GraphDatabase.driver( uri=self.config.NEO4J_HOST, auth=(self.config.NEO4J_USER, self.config.NEO4J_PASSWORD)) - log.info(f'Connected to neo4j server: {self.config.NEO4J_HOST}') + logger.info(f'Connected to neo4j server: {self.config.NEO4J_HOST}') return client except Exception as e: - self._log.error(f'Cannot connect to neo4j server: {self.config.NEO4J_HOST}, {e}', - enable_traceback=False, raise_exception=True) + logger.error(f'Cannot connect to neo4j server: {self.config.NEO4J_HOST}, {e}') return False @@ -80,10 +78,10 @@ def run(self): try: while not self.cypher.empty(): cypher = self.cypher.get_nowait() - self._log.debug(f'cypher: {cypher}') + logger.debug(f'cypher: {cypher}') self.session.run(cypher) return True except Exception as e: - self._log.error(f'{e}') + logger.error(f'{e}') return False diff --git a/automon/integrations/neo4jWrapper/config.py b/automon/integrations/neo4jWrapper/config.py new file mode 100644 index 00000000..c1258d08 --- /dev/null +++ b/automon/integrations/neo4jWrapper/config.py @@ -0,0 +1,41 @@ +import os + +from automon import log +from automon.helpers.sanitation import Sanitation +from automon.helpers.osWrapper.environ import environ + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class Neo4jConfig: + def __init__( + self, user: str = None, + password: str = None, + hosts: str = None, + encrypted: bool = None, + trust: bool = None): + """Neo4j config + """ + + self.NEO4J_USER = user or environ('NEO4J_USER', '') + self.NEO4J_PASSWORD = password or environ('NEO4J_PASSWORD', '') + self.NEO4J_HOST = hosts or environ('NEO4J_HOST', '') + + self.encrypted = encrypted + self.trust = trust + + @property + def is_ready(self) -> bool: + if self.NEO4J_USER and self.NEO4J_PASSWORD and self.NEO4J_HOST: + return True + if not self.NEO4J_USER: + logger.error(f'missing NEO4J_USER') + if not self.NEO4J_PASSWORD: + logger.error(f'missing NEO4J_PASSWORD') + if not self.NEO4J_HOST: + logger.error(f'missing NEO4J_HOST') + return False + + def __repr__(self): + return f'{self.__dict__}' diff --git a/automon/integrations/neo4j/cypher.py b/automon/integrations/neo4jWrapper/cypher.py similarity index 97% rename from automon/integrations/neo4j/cypher.py rename to automon/integrations/neo4jWrapper/cypher.py index 60ac40b0..12e71044 100644 --- a/automon/integrations/neo4j/cypher.py +++ b/automon/integrations/neo4jWrapper/cypher.py @@ -3,9 +3,10 @@ from urllib.parse import urlencode from datetime import datetime, timezone -from automon.log import Logging +from automon import log -log = Logging(name='Cypher', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Node: @@ -61,14 +62,14 @@ def assert_label(label: str) -> str: return '' if re.search('[:]', label): - log.warn(f"Invalid label '{label}': Colon is not needed here") + logger.warning(f"Invalid label '{label}': Colon is not needed here") label = label.replace(':', '') if re.search('[`]', label): label = label.replace('`', '') if not re.search('[a-zA-Z]', label[0]): # First letter of a label must be a letter - log.error(f"Invalid label '{label}': First character of Neo4j :LABEL must be a letter") + logger.error(f"Invalid label '{label}': First character of Neo4j :LABEL must be a letter") else: return f':`{label}`' # :`LABEL` diff --git a/automon/integrations/neo4j/results.py b/automon/integrations/neo4jWrapper/results.py similarity index 78% rename from automon/integrations/neo4j/results.py rename to automon/integrations/neo4jWrapper/results.py index e9265943..c8025880 100644 --- a/automon/integrations/neo4j/results.py +++ b/automon/integrations/neo4jWrapper/results.py @@ -1,13 +1,14 @@ import re -from neo4j.work.result import Result +from neo4j import ResultSummary -from automon.log import Logging +from automon import log -log = Logging(name='Results', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) -class Results(Result): +class Results(ResultSummary): def __init__(self, results): self._results = results self.summary = results._summary diff --git a/automon/integrations/neo4jWrapper/tests/__init__.py b/automon/integrations/neo4jWrapper/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/neo4j/test_neo4j_client.py b/automon/integrations/neo4jWrapper/tests/test_neo4j_client.py similarity index 95% rename from automon/tests/integrations/neo4j/test_neo4j_client.py rename to automon/integrations/neo4jWrapper/tests/test_neo4j_client.py index 5a2c9434..55dee0b7 100644 --- a/automon/tests/integrations/neo4j/test_neo4j_client.py +++ b/automon/integrations/neo4jWrapper/tests/test_neo4j_client.py @@ -1,7 +1,7 @@ import unittest -from automon.integrations.neo4j.client import Neo4jClient -from automon.integrations.neo4j.cypher import Cypher +from automon.integrations.neo4jWrapper.client import Neo4jClient +from automon.integrations.neo4jWrapper.cypher import Cypher class Neo4jTest(unittest.TestCase): diff --git a/automon/tests/integrations/neo4j/test_neo4j_config.py b/automon/integrations/neo4jWrapper/tests/test_neo4j_config.py similarity index 87% rename from automon/tests/integrations/neo4j/test_neo4j_config.py rename to automon/integrations/neo4jWrapper/tests/test_neo4j_config.py index c9753f28..d815432b 100644 --- a/automon/tests/integrations/neo4j/test_neo4j_config.py +++ b/automon/integrations/neo4jWrapper/tests/test_neo4j_config.py @@ -1,6 +1,6 @@ import unittest -from automon.integrations.neo4j.config import Neo4jConfig +from automon.integrations.neo4jWrapper.config import Neo4jConfig class ConfigTest(unittest.TestCase): diff --git a/automon/tests/integrations/neo4j/test_neo4j_cypher.py b/automon/integrations/neo4jWrapper/tests/test_neo4j_cypher.py similarity index 89% rename from automon/tests/integrations/neo4j/test_neo4j_cypher.py rename to automon/integrations/neo4jWrapper/tests/test_neo4j_cypher.py index 5d86801c..cef417d0 100644 --- a/automon/tests/integrations/neo4j/test_neo4j_cypher.py +++ b/automon/integrations/neo4jWrapper/tests/test_neo4j_cypher.py @@ -1,6 +1,6 @@ import unittest -from automon.integrations.neo4j.client import Neo4jClient +from automon.integrations.neo4jWrapper.client import Neo4jClient class Neo4jTest(unittest.TestCase): diff --git a/automon/integrations/nest_asyncioWrapper/__init__.py b/automon/integrations/nest_asyncioWrapper/__init__.py new file mode 100644 index 00000000..dd1a83c7 --- /dev/null +++ b/automon/integrations/nest_asyncioWrapper/__init__.py @@ -0,0 +1 @@ +from .client import AsyncStarter \ No newline at end of file diff --git a/automon/helpers/asyncio_.py b/automon/integrations/nest_asyncioWrapper/client.py similarity index 76% rename from automon/helpers/asyncio_.py rename to automon/integrations/nest_asyncioWrapper/client.py index 31817432..32ce5727 100644 --- a/automon/helpers/asyncio_.py +++ b/automon/integrations/nest_asyncioWrapper/client.py @@ -1,16 +1,17 @@ import asyncio -import logging import nest_asyncio -from automon.log import Logging +from automon import log -logging.getLogger("asyncio").setLevel(Logging.ERROR) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) + +log.logging.getLogger("asyncio").setLevel(log.ERROR) class AsyncStarter: def __init__(self) -> asyncio.get_event_loop: - self._log = Logging(name=AsyncStarter.__name__, level=Logging.DEBUG) self.event_loop = asyncio.get_event_loop() self.maxqueue = 1000 @@ -20,7 +21,7 @@ def __init__(self) -> asyncio.get_event_loop: self._finished = None - async def _coro(self) -> asyncio.coroutine: + async def _coro(self) -> asyncio: await asyncio.sleep(0) def run_until_complete(self): @@ -35,7 +36,7 @@ def run_until_complete(self): def sleep(seconds: int): asyncio.run(asyncio.sleep(seconds)) - def run(self) -> asyncio.run: + def run(self) -> asyncio: asyncio.run(self._coro()) def start(self) -> run: diff --git a/automon/integrations/nmap/client.py b/automon/integrations/nmap/client.py index 38eda992..0c78595e 100644 --- a/automon/integrations/nmap/client.py +++ b/automon/integrations/nmap/client.py @@ -1,16 +1,18 @@ import os -from automon.log import Logging +from automon import log from automon.helpers import Run from automon.helpers.dates import Dates from .config import NmapConfig from .output import NmapResult +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) + class Nmap(object): def __init__(self, command: str = None, config: NmapConfig = None, *args, **kwargs): - self._log = Logging(name=Nmap.__name__, level=Logging.INFO) self._runner = Run() self.config = config or NmapConfig() @@ -53,7 +55,7 @@ def pretty(self): def run(self, command: str, output: bool = True, cleanup: bool = True, **kwargs) -> bool: if not self.isReady(): - self._log.error(enable_traceback=False, msg=f'nmap not found') + logger.error(msg=f'nmap not found') return False nmap_command = f'{self.config.nmap} ' @@ -64,9 +66,9 @@ def run(self, command: str, output: bool = True, cleanup: bool = True, **kwargs) nmap_command += f'{command}' - self._log.info(f'running {nmap_command}') + logger.info(f'running {nmap_command}') self._runner.run(nmap_command, **kwargs) - self._log.debug(f'finished') + logger.debug(f'finished') self.command = nmap_command self._stdout = self._runner.stdout @@ -80,10 +82,10 @@ def run(self, command: str, output: bool = True, cleanup: bool = True, **kwargs) if cleanup: os.remove(self.output_file) - self._log.info(f'deleted {self.output_file}') + logger.info(f'deleted {self.output_file}') if self._stderr: - self._log.error(enable_traceback=False, msg=f'{self._stderr.decode()}') + logger.error(msg=f'{self._stderr.decode()}') return False return True diff --git a/automon/integrations/nmap/config.py b/automon/integrations/nmap/config.py index 33a36d2f..4359907f 100644 --- a/automon/integrations/nmap/config.py +++ b/automon/integrations/nmap/config.py @@ -1,11 +1,12 @@ -from automon.log import Logging +from automon import log from automon.helpers import Run +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) + class NmapConfig(object): def __init__(self, **kwargs): - self._log = Logging(name=NmapConfig.__name__, level=Logging.ERROR) - self.nmap = None def __repr__(self): @@ -18,9 +19,9 @@ def isReady(self, **kwargs): if check.stdout: self.nmap = check.stdout.decode().strip() - self._log.debug(f'nmap located, {self.nmap}') + logger.debug(f'nmap located, {self.nmap}') return True else: - self._log.error(f'nmap not found', enable_traceback=False) + logger.error(f'nmap not found') return False diff --git a/automon/integrations/nmap/output.py b/automon/integrations/nmap/output.py index 1faa9c20..1c5d751f 100644 --- a/automon/integrations/nmap/output.py +++ b/automon/integrations/nmap/output.py @@ -2,16 +2,17 @@ import xmltodict import pandas as pd -from automon.log import Logging +from automon import log from pandas import DataFrame from automon.helpers import Run from automon.integrations.datascience import Pandas +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) + class NmapResult(object): def __init__(self, file: str = None, run: Run = None, **kwargs): - self._log = Logging(name=NmapResult.__name__, level=Logging.INFO) - self.file = file self._run = run @@ -56,11 +57,11 @@ def __init__(self, file: str = None, run: Run = None, **kwargs): self.summary = self._runstats.loc[:, 'finished.@summary'][0] self.time_finished = self._runstats.loc[:, 'finished.@time'][0] - self._log.info(f'hosts up: {self.hosts_up}') - self._log.info(f'hosts down: {self.hosts_down}') - # self._log.info(f'hosts total: {self.hosts_total}') - self._log.info(f'{self.summary}') - self._log.info(f'finished {self.file} ({round(df.memory_usage().sum() / 1024, 2)} Kb)') + logger.info(f'hosts up: {self.hosts_up}') + logger.info(f'hosts down: {self.hosts_down}') + # logger.info(f'hosts total: {self.hosts_total}') + logger.info(f'{self.summary}') + logger.info(f'finished {self.file} ({round(df.memory_usage().sum() / 1024, 2)} Kb)') def __repr__(self): msg = f'{self.summary} ' @@ -116,7 +117,7 @@ def _normalize_ports(self, df): else: df_host[port].update(status) - self._log.debug(f"{df_host.loc[:, ['address.@addr'] + [x for x in scanned_ports if x in df_host]]}") + logger.debug(f"{df_host.loc[:, ['address.@addr'] + [x for x in scanned_ports if x in df_host]]}") i += 1 diff --git a/automon/integrations/nmap/tests/__init__.py b/automon/integrations/nmap/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/nmap/test_nmap_client.py b/automon/integrations/nmap/tests/test_nmap_client.py similarity index 100% rename from automon/tests/integrations/nmap/test_nmap_client.py rename to automon/integrations/nmap/tests/test_nmap_client.py diff --git a/automon/tests/integrations/nmap/test_nmap_config.py b/automon/integrations/nmap/tests/test_nmap_config.py similarity index 100% rename from automon/tests/integrations/nmap/test_nmap_config.py rename to automon/integrations/nmap/tests/test_nmap_config.py diff --git a/automon/integrations/openTelemetryWrapper/README.md b/automon/integrations/openTelemetryWrapper/README.md new file mode 100644 index 00000000..fe2b3c58 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/README.md @@ -0,0 +1,51 @@ +# OpenTelemetry + +## Install Automatic Instrumentation + +* https://opentelemetry.io/docs/languages/python/automatic/ + +```shell +python3 -m pip install -U opentelemetry-distro opentelemetry-exporter-otlp +python3 -m pip install git+https://github.com/TheShellLand/opentelemetry-python-contrib.git@0.44b0#subdirectory=instrumentation/opentelemetry-instrumentation-aiohttp-server +opentelemetry-bootstrap --action install + +# python logging +python3 -m pip install -U opentelemetry-instrumentation-logging + +# django +python3 -m pip install -U opentelemetry-instrumentation-django +``` + +## Known issues: + +### Problem 1 (fixed): + +fixed: https://github.com/open-telemetry/opentelemetry-python-contrib/issues/2053#issuecomment-1962248084 + +``` +ERROR: No matching distribution found for opentelemetry-instrumentation-aiohttp-server==0.42b0 +``` + +reference: https://github.com/open-telemetry/opentelemetry-python-contrib/issues/2053 + +Solution: + +* install using commit flag + +> I have added a new tag: 0.43b0hotfix. This can be used to install +> opentelemetry-instrumentation-aiohttp-server and +> opentelemetry-resource-detector-container with the following pip commands: + +opentelemetry-instrumentation-aiohttp-server: + +```shell +python3 -m pip install git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@v0.44b0#subdirectory=instrumentation/opentelemetry-instrumentation-aiohttp-server +``` + +opentelemetry-resource-detector-container: + +```shell +python3 -m pip install git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@v0.44b0#subdirectory=resource/opentelemetry-resource-detector-container +``` + +solution: https://github.com/open-telemetry/opentelemetry-python-contrib/issues/2053#issuecomment-1928485674 diff --git a/automon/integrations/openTelemetryWrapper/__init__.py b/automon/integrations/openTelemetryWrapper/__init__.py new file mode 100644 index 00000000..be75a734 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/__init__.py @@ -0,0 +1,2 @@ +from .client import OpenTelemetryClient +from .config import OpenTelemetryConfig diff --git a/automon/integrations/openTelemetryWrapper/client.py b/automon/integrations/openTelemetryWrapper/client.py new file mode 100644 index 00000000..b9172d74 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/client.py @@ -0,0 +1,112 @@ +import json +import opentelemetry + +from opentelemetry.util import types +from opentelemetry.trace import Status, StatusCode + +from automon import log + +from .config import OpenTelemetryConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.logging.DEBUG) + + +class OpenTelemetryClient(object): + + def __init__(self): + self.config = OpenTelemetryConfig() + + def add_event(self, name: str, attributes: types.Attributes = None, **kwargs): + logger.debug(dict(name=name, attributes=attributes, kwargs=kwargs)) + return self.config.opentelemetry.trace.get_current_span.add_event( + name=name, + attributes=attributes, + **kwargs + ) + + async def clear(self): + logger.debug('clear') + return await self.config.clear() + + async def is_ready(self): + if await self.config.is_ready(): + return True + + async def get_finished_spans(self): + logger.debug('get_finished_spans') + return await self.config.get_finished_spans() + + async def pop_finished_spans(self): + logger.debug('pop_finished_spans') + return await self.config.pop_finished_spans() + + async def record_exception(self, exception: Exception): + logger.error(f'{exception}') + span = self.config.opentelemetry.trace.get_current_span() + span.set_status(Status(StatusCode.ERROR)) + return span.record_exception(exception=exception) + + def start_as_current_span( + self, name: str, + attributes: any = None, + **kwargs + ): + logger.debug(dict(name=name, attributes=attributes, kwargs=kwargs)) + return self.tracer.start_as_current_span( + name=name, + attributes=attributes, + **kwargs, + ) + + async def start_consumer(self): + """adds spans from memory to queue""" + while True: + pass + return + + async def start_producer(self): + """""" + while True: + pass + return + + async def test(self): + with self.tracer.start_as_current_span(name='rootSpan') as trace_root: + trace_root.add_event('AAAAAAAA') + + with self.tracer.start_as_current_span(name='childSpan') as trace_child: + trace_child.add_event('AAAAAAAA') + trace_child.add_event('BBBBBBBB') + + trace_root.add_event('BBBBBBBB') + + return True + + async def to_dict(self): + return [ + json.loads(span.to_json()) + for span in await self.get_finished_spans() + ] + + async def to_datadog(self): + log = [] + for span in await self.to_dict(): + message = dict(span).copy() + ddsource = None + ddtags = ','.join([f"{x[0]}:{x[1]}" for x in span.get("resource").get("attributes").items()]) + hostname = span['context']['trace_id'] + service = span['context']['span_id'] + + log.append(dict( + ddsource=ddsource, + ddtags=ddtags, + hostname=hostname, + service=service, + message=message, + )) + return log + + @property + def tracer(self): + return self.config.tracer diff --git a/automon/integrations/openTelemetryWrapper/config.py b/automon/integrations/openTelemetryWrapper/config.py new file mode 100644 index 00000000..43d20dbd --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/config.py @@ -0,0 +1,59 @@ +import asyncio +import opentelemetry + +from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace.export import SimpleSpanProcessor +from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.logging.DEBUG) + + +class OpenTelemetryConfig(object): + def __init__(self): + self.opentelemetry = opentelemetry + self.provider = TracerProvider() + self.memory_processor = InMemorySpanExporter() + self.processor = SimpleSpanProcessor(self.memory_processor) + self.provider.add_span_processor(self.processor) + + opentelemetry.trace.set_tracer_provider(self.provider) + + self.tracer = opentelemetry.trace.get_tracer(__name__) + + self.queue_consumer = asyncio.Queue() + self.queue_producer = asyncio.Queue() + + async def clear(self): + logger.debug('clear') + return self.memory_processor.clear() + + @property + def get_current_span(self): + logger.debug('get_current_span') + return opentelemetry.trace.get_current_span() + + async def is_ready(self): + if self.provider and self.memory_processor and self.processor: + return True + + async def get_finished_spans(self): + logger.debug('get_finished_spans') + return self.memory_processor.get_finished_spans() + + async def pop_finished_spans(self): + """ideal is to lock, pop spans, and clear""" + spans = await self.get_finished_spans() + clear = await self.clear() + return spans + + async def test(self): + with self.tracer.start_as_current_span(name="rootSpan") as trace_root: + trace_root.add_event('AAAAAAAA') + with self.tracer.start_as_current_span(name="childSpan") as trace_child: + trace_child.add_event('AAAAAAAA') + trace_child.add_event('BBBBBBBB') + + return True diff --git a/automon/integrations/openTelemetryWrapper/docker/Dockerfile b/automon/integrations/openTelemetryWrapper/docker/Dockerfile new file mode 100644 index 00000000..3b211115 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/docker/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3 + +RUN python3 -m pip install -U opentelemetry-distro opentelemetry-exporter-otlp +RUN python3 -m pip install git+https://github.com/TheShellLand/opentelemetry-python-contrib.git@0.44b0#subdirectory=instrumentation/opentelemetry-instrumentation-aiohttp-server +RUN opentelemetry-bootstrap --action install +RUN python3 -m pip install -U opentelemetry-instrumentation-logging diff --git a/automon/integrations/openTelemetryWrapper/docker/build.sh b/automon/integrations/openTelemetryWrapper/docker/build.sh new file mode 100644 index 00000000..0ed452d3 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/docker/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# build image + +cd "$(dirname $0)" && set -xe + +docker build $@ -f Dockerfile -t opentelemetry-python . diff --git a/automon/integrations/openTelemetryWrapper/requirements.txt b/automon/integrations/openTelemetryWrapper/requirements.txt new file mode 100644 index 00000000..a87bd892 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/requirements.txt @@ -0,0 +1,5 @@ +opentelemetry-distro==0.43b0 +opentelemetry-exporter-otlp==1.22.0 +opentelemetry-instrumentation-logging==0.43b0 +# workaround +git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@0.43b0hotfix#subdirectory=instrumentation/opentelemetry-instrumentation-aiohttp-server diff --git a/automon/integrations/openTelemetryWrapper/test/__init__.py b/automon/integrations/openTelemetryWrapper/test/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/openTelemetryWrapper/test/test_client_ready.py b/automon/integrations/openTelemetryWrapper/test/test_client_ready.py new file mode 100644 index 00000000..71f9ec65 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/test/test_client_ready.py @@ -0,0 +1,17 @@ +import unittest +import asyncio + +from automon.integrations.openTelemetryWrapper import OpenTelemetryClient + + +class MyTestCase(unittest.TestCase): + client = OpenTelemetryClient() + + def test_client(self): + self.assertTrue(asyncio.run( + self.client.is_ready() + )) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/openTelemetryWrapper/test/test_memory_trace_client_test.py b/automon/integrations/openTelemetryWrapper/test/test_memory_trace_client_test.py new file mode 100644 index 00000000..61c50c55 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/test/test_memory_trace_client_test.py @@ -0,0 +1,21 @@ +import unittest +import asyncio + +from automon.integrations.openTelemetryWrapper import OpenTelemetryClient + + +class MyTestCase(unittest.TestCase): + client = OpenTelemetryClient() + + def test_something(self): + self.assertTrue(asyncio.run( + self.client.test())) + + # spans = asyncio.run( + # self.client.get_finished_spans()) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/openTelemetryWrapper/test/test_memory_trace_config.py b/automon/integrations/openTelemetryWrapper/test/test_memory_trace_config.py new file mode 100644 index 00000000..ea70c542 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/test/test_memory_trace_config.py @@ -0,0 +1,17 @@ +import unittest +import asyncio + +from automon.integrations.openTelemetryWrapper import OpenTelemetryConfig + + +class MyTestCase(unittest.TestCase): + config = OpenTelemetryConfig() + + def test_something(self): + self.assertTrue(asyncio.run( + self.config.test()) + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/openTelemetryWrapper/test/test_pop_finished_spans.py b/automon/integrations/openTelemetryWrapper/test/test_pop_finished_spans.py new file mode 100644 index 00000000..6a6d8642 --- /dev/null +++ b/automon/integrations/openTelemetryWrapper/test/test_pop_finished_spans.py @@ -0,0 +1,23 @@ +import unittest +import asyncio + +from automon.integrations.openTelemetryWrapper import OpenTelemetryConfig + + +class MyTestCase(unittest.TestCase): + config = OpenTelemetryConfig() + + if asyncio.run(config.is_ready()): + test = asyncio.run(config.test()) + + def test_pop_finished_spans(self): + spans = asyncio.run(self.config.pop_finished_spans()) + self.assertIsNotNone(spans) + + pass + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/openvpn/openvpn.py b/automon/integrations/openvpn/openvpn.py index 5f3e4669..75c33f4d 100644 --- a/automon/integrations/openvpn/openvpn.py +++ b/automon/integrations/openvpn/openvpn.py @@ -1,11 +1,12 @@ import os import io -from automon.integrations.minio import MinioClient, MinioConfig -from automon.log import Logging +from automon.integrations.minioWrapper import MinioClient, MinioConfig +from automon import log from automon.helpers.sleeper import Sleeper -log = Logging(name='openvpn', level='info') +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) class ClientConfig: @@ -46,7 +47,7 @@ def __init__(self, name, hosts, options=None): """ - log.logging.debug('[ClientConfig] Creating new OpenVPN client config') + logger.debug('[ClientConfig] Creating new OpenVPN client config') self.name = name @@ -114,7 +115,7 @@ def build_config(self, prefix): def collector(minio_client, bucket, folder): """ Collect required files to build an OpenVPN client """ - log.logging.debug('[collector] Collecting all Minio bucket files') + logger.debug('[collector] Collecting all Minio bucket files') ca = None cert = [] @@ -150,7 +151,7 @@ def collector(minio_client, bucket, folder): def put_object(minio_client: MinioClient, bucket, client_configs, config_name, config_data, config_len): """ Minio object uploader """ - log.logging.debug(f'[put_object] Uploading: {config_name}') + logger.debug(f'[put_object] Uploading: {config_name}') return minio_client.put_object(bucket, f'{client_configs}/{config_name}', config_data, config_len) @@ -176,11 +177,11 @@ def create_configs(minio_client: MinioClient, bucket: str, client_configs: str, put_object(minio_client, bucket, client_configs, config_name, config_data, config_len) - log.logging.debug(f'[create_configs] OpenVPN client config uploaded: {config_name}') + logger.debug(f'[create_configs] OpenVPN client config uploaded: {config_name}') def run(minio_config: MinioConfig, openvpn_config): - log.logging.info('Running...') + logger.info('Running...') while True: minio_config.secure = False @@ -206,9 +207,9 @@ def run(minio_config: MinioConfig, openvpn_config): ca, cert, key, ta = collector(minio_client, minio_bucket, keys) create_configs(minio_client, minio_bucket, client_configs, ca, cert, key, ta, hosts, prefix, options) - log.logging.info('[build client configs] Finshed building all OpenVPN clients') - log.logging.debug('[ClientConfig] sleeping') - Sleeper.day('openvpn') + logger.info('[build client configs] Finshed building all OpenVPN clients') + logger.debug('[ClientConfig] sleeping') + Sleeper.day() def test_run(minio_config: MinioConfig, openvpn_config): diff --git a/automon/integrations/psutilWrapper/__init__.py b/automon/integrations/psutilWrapper/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/psutilWrapper/cpu.py b/automon/integrations/psutilWrapper/cpu.py new file mode 100644 index 00000000..6a6f09c9 --- /dev/null +++ b/automon/integrations/psutilWrapper/cpu.py @@ -0,0 +1,17 @@ +import psutil + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +def cpu_usage(max_cpu_percentage=80): + """Limit max cpu usage + """ + if psutil.cpu_percent() < max_cpu_percentage: + logger.debug(f'[{cpu_usage.__name__}] {psutil.cpu_percent()}%') + return True + else: + logger.debug(f'[{cpu_usage.__name__}] {psutil.cpu_percent()}%') + return False diff --git a/automon/integrations/requests/__init__.py b/automon/integrations/requests/__init__.py deleted file mode 100644 index df077452..00000000 --- a/automon/integrations/requests/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .client import RequestsClient, Requests -from .config import RequestsConfig \ No newline at end of file diff --git a/automon/integrations/requests/client.py b/automon/integrations/requests/client.py deleted file mode 100644 index 3515d268..00000000 --- a/automon/integrations/requests/client.py +++ /dev/null @@ -1,146 +0,0 @@ -import json -import requests - -from automon.log import Logging -from .config import RequestsConfig - -log = Logging(name='RequestsClient', level=Logging.DEBUG) - - -class RequestsClient(object): - def __init__(self, url: str = None, data: dict = None, headers: dict = None, - config: RequestsConfig = None): - """Wrapper for requests library""" - - self.config = config or RequestsConfig() - - self.url = url - self.data = data - self.headers = headers - self.results = None - self.requests = requests - - if url: - self.url = url - self.get(url=self.url, data=self.data, headers=self.headers) - - def __repr__(self): - return f'{self.__dict__}' - - def _log_result(self): - if self.results.status_code == 200: - msg = f'{self.results.status_code} ' \ - f'{self.results.url} ' \ - f'{round(len(self.results.content) / 1024, 2)} KB' - return log.debug(msg) - - msg = f'{self.results.status_code} ' \ - f'{self.results.url} ' \ - f'{round(len(self.results.content) / 1024, 2)} KB ' \ - f'{self.results.content}' - return log.error(msg, raise_exception=False) - - def _params(self, url, data, headers): - if url is None: - url = self.url - - if data is None: - data = self.data - - if headers is None: - headers = self.headers - - return url, data, headers - - @property - def content(self): - if self.results is not None: - return self.results.content - - def delete(self, - url: str = None, - data: dict = None, - headers: dict = None, **kwargs) -> bool: - """requests.delete""" - - url, data, headers = self._params(url, data, headers) - - try: - self.results = requests.delete(url=url, data=data, headers=headers, **kwargs) - self._log_result() - return True - except Exception as e: - log.error(f'delete failed. {e}', enable_traceback=False) - return False - - def get(self, - url: str = None, - data: dict = None, - headers: dict = None, **kwargs) -> bool: - """requests.get""" - - url, data, headers = self._params(url, data, headers) - - try: - self.results = requests.get(url=url, data=data, headers=headers, **kwargs) - self._log_result() - return True - except Exception as e: - log.error(f'get failed. {e}', enable_traceback=False) - return False - - def patch(self, - url: str = None, - data: dict = None, - headers: dict = None, **kwargs) -> bool: - """requests.patch""" - - url, data, headers = self._params(url, data, headers) - - try: - self.results = requests.patch(url=url, data=data, headers=headers, **kwargs) - self._log_result() - return True - except Exception as e: - log.error(f'patch failed. {e}', enable_traceback=False) - return False - - def post(self, - url: str = None, - data: dict = None, - headers: dict = None, **kwargs) -> bool: - """requests.post""" - - url, data, headers = self._params(url, data, headers) - - try: - self.results = requests.post(url=url, data=data, headers=headers, **kwargs) - self._log_result() - return True - except Exception as e: - log.error(f'post failed. {e}', enable_traceback=False) - return False - - def put(self, - url: str = None, - data: dict = None, - headers: dict = None, **kwargs) -> bool: - """requests.put""" - - url, data, headers = self._params(url, data, headers) - - try: - self.results = requests.put(url=url, data=data, headers=headers, **kwargs) - self._log_result() - return True - except Exception as e: - log.error(f'put failed. {e}', enable_traceback=False) - return False - - def to_dict(self): - if self.results is not None: - return json.loads(self.results.content) - - -class Requests(RequestsClient): - pass diff --git a/automon/integrations/requests/config.py b/automon/integrations/requests/config.py deleted file mode 100644 index 75f71564..00000000 --- a/automon/integrations/requests/config.py +++ /dev/null @@ -1,10 +0,0 @@ -import requests - -from automon.log import Logging - -log = Logging(name='RequestsConfig', level=Logging.DEBUG) - - -class RequestsConfig(object): - def __repr__(self): - return f'{NotImplemented}' diff --git a/automon/integrations/requestsWrapper/__init__.py b/automon/integrations/requestsWrapper/__init__.py new file mode 100644 index 00000000..5f0a0ef5 --- /dev/null +++ b/automon/integrations/requestsWrapper/__init__.py @@ -0,0 +1,3 @@ +from .client import RequestsClient, Requests +from .rest import BaseRestClient +from .config import RequestsConfig diff --git a/automon/integrations/requestsWrapper/client.py b/automon/integrations/requestsWrapper/client.py new file mode 100644 index 00000000..e2f3aecf --- /dev/null +++ b/automon/integrations/requestsWrapper/client.py @@ -0,0 +1,260 @@ +import json +import requests + +from automon import log +from .config import RequestsConfig + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class RequestsClient(object): + def __init__(self, url: str = None, data: dict = None, headers: dict = None, + config: RequestsConfig = None): + """Wrapper for requests library""" + + self.config = config or RequestsConfig() + + self.url: str = url + self.data: dict = data + self.errors: bytes = b'' + self.headers: dict = headers + self.response = None + self.requests = requests + self.session = self.requests.Session() + + def __repr__(self): + return f'{self.__dict__}' + + def __len__(self): + if self.content: + len(self.content) + + async def _log_result(self): + if self.status_code == 200: + msg = [ + self.response.request.method, + self.response.url, + f'{round(len(self.content) / 1024, 2)} KB', + f'{self.status_code}', + ] + msg = ' '.join(msg) + return logger.debug(msg) + + msg = [ + self.response.request.method, + self.response.url, + f'{round(len(self.content) / 1024, 2)} KB', + f'{self.status_code}', + f'{self.content}' + ] + + msg = ' '.join(msg) + return logger.error(msg) + + async def _params(self, url, data, headers): + if url is None: + url = self.url + + if data is None: + data = self.data + + if headers is None: + headers = self.headers + + self.url = url + self.data = data + self.headers = headers + return url, data, headers + + @property + def content(self): + if 'content' in dir(self.response): + return self.response.content + + async def content_to_dict(self): + return await self.to_dict() + + async def delete( + self, + url: str = None, + data: dict = None, + headers: dict = None, + **kwargs + ) -> bool: + """requests.delete""" + + url, data, headers = await self._params(url, data, headers) + + try: + self.response = self.session.delete(url=url, data=data, headers=headers, **kwargs) + await self._log_result() + + if self.status_code == 200: + return True + + return False + except Exception as e: + self.errors = e + logger.error(f'delete failed. {e}') + return False + + async def get( + self, + url: str = None, + data: dict = None, + headers: dict = None, + **kwargs + ) -> bool: + """requests.get""" + + url, data, headers = await self._params(url, data, headers) + + try: + self.response = self.session.get(url=url, data=data, headers=headers, **kwargs) + + logger.debug( + f'{self.response.url} ' + f'{round(len(self.content) / 1024, 2)} KB ' + f'{self.status_code}' + ) + + if self.status_code == 200: + return True + + self.errors = self.content + + return False + except Exception as e: + self.errors = e + logger.error(f'{e}') + return False + + async def patch( + self, + url: str = None, + data: dict = None, + headers: dict = None, + **kwargs + ) -> bool: + """requests.patch""" + + url, data, headers = await self._params(url, data, headers) + + try: + self.response = self.session.patch(url=url, data=data, headers=headers, **kwargs) + + logger.debug( + f'{self.response.url} ' + f'{round(len(self.content) / 1024, 2)} KB ' + f'{self.status_code}' + ) + + if self.status_code == 200: + return True + + self.errors = self.content + + return False + except Exception as e: + self.errors = e + logger.error(f'patch failed. {e}') + return False + + async def post( + self, + url: str = None, + data: dict = None, + headers: dict = None, + **kwargs + ) -> bool: + """requests.post""" + + url, data, headers = await self._params(url, data, headers) + + try: + self.response = self.session.post(url=url, data=data, headers=headers, **kwargs) + + logger.debug( + f'{self.response.url} ' + f'{round(len(self.content) / 1024, 2)} KB ' + f'{self.status_code}' + ) + + if self.status_code == 200: + return True + + self.errors = self.content + + return False + except Exception as e: + self.errors = e + logger.error(f'post failed. {e}') + return False + + async def put( + self, + url: str = None, + data: dict = None, + headers: dict = None, + **kwargs + ) -> bool: + """requests.put""" + + url, data, headers = await self._params(url, data, headers) + + try: + self.response = self.session.put(url=url, data=data, headers=headers, **kwargs) + + logger.debug( + f'{self.response.url} ' + f'{round(len(self.content) / 1024, 2)} KB ' + f'{self.status_code}' + ) + + if self.status_code == 200: + return True + + self.errors = self.content + + return False + except Exception as e: + self.errors = e + logger.error(f'put failed. {e}') + return False + + @property + def reason(self): + if 'reason' in dir(self.response): + return self.response.reason + + @property + def status_code(self): + if 'status_code' in dir(self.response): + return self.response.status_code + + @property + def text(self): + if self.response: + return self.response.text + + async def to_dict(self): + if self.response is not None: + try: + return json.loads(self.content) + except Exception as error: + logger.error(error) + + async def to_json(self): + if self.content: + try: + return json.dumps(json.loads(self.content)) + except Exception as error: + logger.error(error) + + async def update_headers(self, headers: dict): + return self.session.headers.update(headers) + + +class Requests(RequestsClient): + pass diff --git a/automon/integrations/requestsWrapper/config.py b/automon/integrations/requestsWrapper/config.py new file mode 100644 index 00000000..55d142cc --- /dev/null +++ b/automon/integrations/requestsWrapper/config.py @@ -0,0 +1,19 @@ +import requests + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) + + +class RequestsConfig(object): + + def __init__(self): + pass + + def __repr__(self): + return f'{NotImplemented}' + + @property + def is_ready(self): + return f'{NotImplemented}' diff --git a/automon/integrations/requestsWrapper/rest.py b/automon/integrations/requestsWrapper/rest.py new file mode 100644 index 00000000..1a780327 --- /dev/null +++ b/automon/integrations/requestsWrapper/rest.py @@ -0,0 +1,37 @@ +from .client import RequestsClient +from .config import RequestsConfig + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class BaseRestClient: + requests: RequestsClient + config: RequestsConfig + + def __init__(self, config: RequestsConfig = None): + """Base REST Client""" + self.config = config or RequestsConfig() + self.requests = RequestsClient() + + def isConnected(self): + if self.config.is_ready: + return True + return False + + async def get(self, url: str, data: str = None, headers: dict = None) -> bool: + return await self.requests.get(url=url, data=data, headers=headers) + + async def post(self, url: str, data: str = None, headers: dict = None) -> bool: + return await self.requests.post(url=url, data=data, headers=headers) + + async def delete(self, url: str, data: str = None, headers: dict = None) -> bool: + return await self.requests.delete(url=url, data=data, headers=headers) + + async def patch(self, url: str, data: str = None, headers: dict = None) -> bool: + return await self.requests.patch(url=url, data=data, headers=headers) + + def __repr__(self): + return f'{self.__dict__}' diff --git a/automon/integrations/requestsWrapper/tests/__init__.py b/automon/integrations/requestsWrapper/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/test_requests.py b/automon/integrations/requestsWrapper/tests/test_requests.py similarity index 54% rename from automon/tests/integrations/test_requests.py rename to automon/integrations/requestsWrapper/tests/test_requests.py index da34b9d3..96b720c0 100644 --- a/automon/tests/integrations/test_requests.py +++ b/automon/integrations/requestsWrapper/tests/test_requests.py @@ -1,16 +1,17 @@ +import asyncio import unittest -from automon.integrations.requests import RequestsClient -from automon.integrations.requests import RequestsConfig +from automon.integrations.requestsWrapper import RequestsClient +from automon.integrations.requestsWrapper import RequestsConfig r = RequestsClient() class Client(unittest.TestCase): def test_get(self): - self.assertTrue(r.get('https://1.1.1.1')) + self.assertTrue(asyncio.run(r.get('https://1.1.1.1'))) self.assertTrue(r.requests.get('https://1.1.1.1')) - self.assertFalse(r.get('x://127.0.0.1')) + self.assertFalse(asyncio.run(r.get('x://127.0.0.1'))) class Config(unittest.TestCase): diff --git a/automon/integrations/requestsWrapper/tests/test_rest.py b/automon/integrations/requestsWrapper/tests/test_rest.py new file mode 100644 index 00000000..bf34afc4 --- /dev/null +++ b/automon/integrations/requestsWrapper/tests/test_rest.py @@ -0,0 +1,17 @@ +import asyncio +import unittest + +from automon.integrations.requestsWrapper.rest import BaseRestClient + +r = BaseRestClient() + + +class Client(unittest.TestCase): + def test_get(self): + self.assertTrue(asyncio.run(r.get('https://1.1.1.1'))) + self.assertTrue(asyncio.run(r.requests.get('https://1.1.1.1'))) + self.assertFalse(asyncio.run(r.get('x://127.0.0.1'))) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/requestsWrapper/tests/test_rest_inherit.py b/automon/integrations/requestsWrapper/tests/test_rest_inherit.py new file mode 100644 index 00000000..112df0ee --- /dev/null +++ b/automon/integrations/requestsWrapper/tests/test_rest_inherit.py @@ -0,0 +1,20 @@ +import asyncio +import unittest + +from automon.integrations.requestsWrapper.rest import BaseRestClient + + +class Inherit(BaseRestClient): + + def __init__(self): + super().__init__() + pass + + +class Client(unittest.TestCase): + def test_get(self): + self.assertTrue(asyncio.run(Inherit().get(url='https://1.1.1.1'))) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/scrapyWrapper/__init__.py b/automon/integrations/scrapyWrapper/__init__.py new file mode 100644 index 00000000..42d0cbab --- /dev/null +++ b/automon/integrations/scrapyWrapper/__init__.py @@ -0,0 +1 @@ +from .client import ScrapyClient diff --git a/automon/integrations/scrapyWrapper/client.py b/automon/integrations/scrapyWrapper/client.py new file mode 100644 index 00000000..53a97b39 --- /dev/null +++ b/automon/integrations/scrapyWrapper/client.py @@ -0,0 +1,15 @@ +import scrapy + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class ScrapyClient(object): + + def Selector(self, text: str): + return scrapy.selector.Selector(text=text) + + def xpath(self, text: str, xpath: str): + return self.Selector(text=text).xpath(xpath).get() diff --git a/automon/integrations/selenium/browser.py b/automon/integrations/selenium/browser.py deleted file mode 100644 index dbfb3296..00000000 --- a/automon/integrations/selenium/browser.py +++ /dev/null @@ -1,138 +0,0 @@ -import os - -import tempfile - -from urllib.parse import urlparse - -from automon.log import Logging -from automon.helpers.dates import Dates -from automon.helpers.sleeper import Sleeper -from automon.helpers.sanitation import Sanitation -from automon.integrations.selenium.config import SeleniumConfig - - -class SeleniumBrowser: - - def __init__(self, config: SeleniumConfig = None): - self._log = Logging(name=SeleniumBrowser.__name__, level=Logging.DEBUG) - - self.config = config or SeleniumConfig() - self.webdriver = self.config.webdriver - self.connected = False - - try: - self.browser = self.webdriver.Chrome() - self.connected = True - except Exception as e: - self._log.error(f'Unable to spawn browser: {e}') - - def get(self, url: str): - try: - self.browser.get(url) - return True - except Exception as e: - self._log.error(f'Error getting {url}: {e}') - - return False - - def get_screenshot_as_png(self): - return self.browser.get_screenshot_as_png() - - def get_screenshot_as_base64(self): - return self.browser.get_screenshot_as_base64() - - def save_screenshot(self, filename: str = None, prefix: str = None, folder: str = None): - - if not filename: - filename = self._screenshot_name(prefix) - - if not folder: - path = os.path.abspath(tempfile.gettempdir()) - else: - path = os.path.abspath(folder) - - if not os.path.exists(path): - os.makedirs(path) - - save = os.path.join(path, filename) - - self._log.info(f'Saving screenshot to: {save}') - - return self.browser.save_screenshot(save) - - def _screenshot_name(self, prefix=None): - """Generate a unique filename - - :param browser: - :param prefix: prefix filename with a string - :return: - """ - title = self.browser.title - url = self.browser.current_url - hostname = urlparse(url).hostname - - hostname_ = Sanitation.ascii_numeric_only(hostname) - title_ = Sanitation.ascii_numeric_only(title) - timestamp = Dates.filename_timestamp() - - if prefix: - prefix = Sanitation.safe_string(prefix) - return f'{prefix}_{hostname_}_{title_}_{timestamp}.png' - - return f'{hostname_}_{title_}_{timestamp}.png' - - def new_resolution(self, width=1920, height=1080, device_type='web'): - - if device_type == 'pixel3': - width = 1080 - height = 2160 - - if device_type == 'web-small' or device_type == '800x600': - width = 800 - height = 600 - - if device_type == 'web-small-2' or device_type == '1024x768': - width = 1024 - height = 768 - - if device_type == 'web-small-3' or device_type == '1280x960': - width = 1280 - height = 960 - - if device_type == 'web-small-4' or device_type == '1280x1024': - width = 1280 - height = 1024 - - if device_type == 'web' or device_type == '1920x1080': - width = 1920 - height = 1080 - - if device_type == 'web-2' or device_type == '1600x1200': - width = 1600 - height = 1200 - - if device_type == 'web-3' or device_type == '1920x1200': - width = 1920 - height = 1200 - - if device_type == 'web-large' or device_type == '2560x1400': - width = 2560 - height = 1400 - - if device_type == 'web-long' or device_type == '1920x3080': - width = 1920 - height = 3080 - - self.browser.set_window_size(width, height) - - def close(self): - self.browser.close() - - def quit(self): - self.browser.close() - self.browser.quit() - self.browser.stop_client() - - -if __name__ == "__main__": - pass diff --git a/automon/integrations/selenium/config.py b/automon/integrations/selenium/config.py deleted file mode 100644 index 6d7abf82..00000000 --- a/automon/integrations/selenium/config.py +++ /dev/null @@ -1,191 +0,0 @@ -import os -import warnings -import selenium - -from selenium.webdriver.common.desired_capabilities import DesiredCapabilities - -from automon.log import Logging - -log = Logging(name='selenium', level=Logging.INFO) - - -class SeleniumConfig: - - def __init__(self, webdriver: selenium.webdriver = None, chromedriver: str = None): - self.webdriver = webdriver or selenium.webdriver - self.SELENIUM_CHROMEDRIVER_PATH = chromedriver or os.getenv('SELENIUM_CHROMEDRIVER_PATH') or '' - - if self.SELENIUM_CHROMEDRIVER_PATH: - os.environ['PATH'] = f"{os.getenv('PATH')}:{self.SELENIUM_CHROMEDRIVER_PATH}" - - def chrome(self): - """Chrome with no options - - """ - opt = SeleniumOptions(self.webdriver) - opt.default() - - def chrome_maximized(self): - """Chrome with no options - - """ - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.maximized() - - def chrome_fullscreen(self): - """Chrome with no options - - """ - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.fullscreen() - - def chrome_for_docker(self): - """Chrome best used with docker - - """ - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.nosandbox() - opt.headless() - opt.noinfobars() - opt.noextensions() - opt.nonotifications() - - def chrome_sandboxed(self): - """Chrome with sandbox enabled - - """ - warnings.warn('Docker does not support sandbox option') - warnings.warn('Default shm size is 64m, which will cause chrome driver to crash.', Warning) - - opt = SeleniumOptions(self.webdriver) - opt.default() - - def chrome_nosandbox(self): - """Chrome with sandbox disabled - - """ - warnings.warn('Default shm size is 64m, which will cause chrome driver to crash.', Warning) - - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.nosandbox() - - def chrome_headless_sandboxed(self): - """Headless Chrome with sandbox enabled - - """ - warnings.warn('Docker does not support sandbox option') - warnings.warn('Default shm size is 64m, which will cause chrome driver to crash.', Warning) - - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.headless() - - def chrome_headless_nosandbox(self): - """Headless Chrome with sandbox disabled - - """ - warnings.warn('Default shm size is 64m, which will cause chrome driver to crash.', Warning) - - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.headless() - opt.nosandbox() - - def chrome_headless_nosandbox_unsafe(self): - """Headless Chrome with sandbox disabled with not certificate verification - - """ - warnings.warn('Default shm size is 64m, which will cause chrome driver to crash.', Warning) - - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.headless() - opt.nosandbox() - opt.unsafe() - - def chrome_headless_nosandbox_noshm(self): - """Headless Chrome with sandbox disabled - - """ - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.headless() - opt.nosandbox() - opt.noshm() - - def chrome_headless_nosandbox_bigshm(self): - """Headless Chrome with sandbox disabled - - """ - warnings.warn('Larger shm option is not implemented', Warning) - - opt = SeleniumOptions(self.webdriver) - opt.default() - opt.headless() - opt.nosandbox() - opt.bigshm() - - def chrome_remote(self, host: str = '127.0.0.1', port: str = '4444', executor_path: str = '/wd/hub'): - """Remote Selenium - - """ - log.info( - f'Remote WebDriver Hub URL: http://{host}:{port}{executor_path}/static/resource/hub.html') - - self.webdriver.Remote( - command_executor=f'http://{host}:{port}{executor_path}', - desired_capabilities=DesiredCapabilities.CHROME - ) - - -class SeleniumOptions: - - def __init__(self, webdriver: selenium.webdriver): - self.webdriver = webdriver or selenium.webdriver - self.options = self.webdriver.ChromeOptions() - - def default(self): - self.options.add_argument('start-maximized') - - def unsafe(self): - warnings.warn('Certificates are not verified', Warning) - self.options.add_argument('--ignore-certificate-errors') - - def nosandbox(self): - self.options.add_argument('--no-sandbox') - - def headless(self): - self.options.add_argument('headless') - - def noshm(self): - warnings.warn('Disabled shm will use disk I/O, and will be slow', Warning) - self.options.add_argument('--disable-dev-shm-usage') - - def bigshm(self): - warnings.warn('Big shm not yet implemented', Warning) - - def noinfobars(self): - self.options.add_argument("--disable-infobars") - - def noextensions(self): - self.options.add_argument("--disable-extensions") - - def maximized(self): - self.options.add_argument("--start-maximized") - - def fullscreen(self): - self.options.add_argument("--start-fullscreen") - - def nonotifications(self): - # Pass the argument 1 to allow and 2 to block - self.options.add_experimental_option( - "prefs", {"profile.default_content_setting_values.notifications": 1} - ) - - -if __name__ == "__main__": - pass diff --git a/automon/integrations/selenium/__init__.py b/automon/integrations/seleniumWrapper/__init__.py similarity index 71% rename from automon/integrations/selenium/__init__.py rename to automon/integrations/seleniumWrapper/__init__.py index 58c3112d..ed18b93d 100644 --- a/automon/integrations/selenium/__init__.py +++ b/automon/integrations/seleniumWrapper/__init__.py @@ -1,3 +1,4 @@ from .browser import SeleniumBrowser from .actions import SeleniumActions from .config import SeleniumConfig +from .webdriver_chrome import ChromeWrapper diff --git a/automon/integrations/selenium/actions.py b/automon/integrations/seleniumWrapper/actions.py similarity index 88% rename from automon/integrations/selenium/actions.py rename to automon/integrations/seleniumWrapper/actions.py index 8433f62f..d960c67c 100644 --- a/automon/integrations/selenium/actions.py +++ b/automon/integrations/seleniumWrapper/actions.py @@ -1,8 +1,9 @@ from selenium.webdriver.common.action_chains import ActionChains -from automon.log import Logging +from automon import log -log = Logging(name='selenium', level=Logging.INFO) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) class SeleniumActions: diff --git a/automon/integrations/seleniumWrapper/browser.py b/automon/integrations/seleniumWrapper/browser.py new file mode 100644 index 00000000..9154699f --- /dev/null +++ b/automon/integrations/seleniumWrapper/browser.py @@ -0,0 +1,1055 @@ +import os +import json +import time +import base64 +import datetime +import tempfile +import selenium +import selenium.webdriver +import selenium.webdriver.common.by +import selenium.webdriver.remote.webelement + +from selenium.webdriver.common.keys import Keys +from urllib.parse import urlparse +from bs4 import BeautifulSoup + +from automon import log +from automon.helpers.dates import Dates +from automon.helpers.sleeper import Sleeper +from automon.helpers.sanitation import Sanitation + +from .config import SeleniumConfig +from .user_agents import SeleniumUserAgentBuilder +from .exceptions import * + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class SeleniumBrowser(object): + config: SeleniumConfig + webdriver: selenium.webdriver + status: int + + def __init__(self, config: SeleniumConfig = None): + """A selenium wrapper""" + + self._config = config or SeleniumConfig() + self._selenium = selenium + + self.autosaved = None + + self.logs = {} + + def __repr__(self): + try: + return str(dict( + webdriver=self.webdriver.name or None, + window_size=self.window_size, + )) + except Exception as error: + pass + + return f'{__class__}' + + @property + def by(self) -> selenium.webdriver.common.by.By: + """Set of supported locator strategies""" + return selenium.webdriver.common.by.By() + + @property + def config(self): + return self._config + + async def cookie_file_to_dict(self, file: str = 'cookies.json') -> list: + """load cookie file as dict""" + logger.debug(f'cookie_file_to_dict :: {file=}') + with open(file, 'r') as file: + logger.debug(f'cookie_file_to_dict :: read :: {file=}') + logger.info(f'cookie_file_to_dict :: read :: done') + return json.loads(file.read()) + + @property + def _current_url(self): + """get browser current url""" + try: + return self.webdriver.current_url + except Exception as error: + return + + @property + def webdriver(self): + """get webdriver""" + return self.config.webdriver + + async def get_log(self, log_type: str) -> list: + """Get logs for log type""" + logger.debug(f'get_log :: {log_type=}') + get_log = self.webdriver.get_log(log_type) + logger.info(f'get_log :: done') + return get_log + + async def get_logs(self) -> dict: + """Get all logs + + you can only run this once + afterwards the logs are cleared from the webdriver + """ + logger.debug(f'get_logs') + logger.debug(f'get_logs :: {len(self.webdriver.log_types)} types found') + + for log_type in self.webdriver.log_types: + logger.debug(f'get_logs :: {log_type}') + self.logs.update({ + log_type: self.webdriver.get_log(log_type) + }) + logger.debug(f'get_logs :: {log_type} :: {len(self.logs[log_type])} logs') + logger.info(f'get_logs :: {log_type} :: done') + + logger.debug(f'get_logs :: {len(self.logs)} logs') + logger.info(f'get_logs :: done') + return self.logs + + async def get_log_browser(self) -> list: + """Get browser logs""" + logger.debug(f'get_log_browser') + logs = await self.get_log('browser') + logger.debug(f'get_log_browser :: {len(logs)} logs') + logger.info(f'get_log_browser :: done') + return logs + + async def get_log_driver(self) -> list: + """Get driver logs""" + logger.debug(f'get_log_driver') + logs = await self.get_log('driver') + logger.debug(f'get_log_driver :: {len(logs)} logs') + logger.info(f'get_log_driver :: done') + return logs + + async def get_log_performance(self) -> list: + """Get performance logs""" + logger.debug(f'get_log_performance') + logs = await self.get_log('performance') + logger.debug(f'get_log_performance :: {len(logs)} logs') + logger.info(f'get_log_performance :: done') + return logs + + async def check_page_load_finished(self) -> bool: + """Checks for `frameStoppedLoading` string in performance logs""" + logger.debug(f'check_page_load_finished :: checking') + + logs = await self.get_log_performance() + logger.debug(f'check_page_load_finished :: checking :: {len(logs)} logs found') + + check = [] + for log_dict in logs: + # logger.debug(f'check_page_load_finished :: checking :: {log_dict}') + if 'frameStoppedLoading' in log_dict.get('message'): + logger.debug(f'check_page_load_finished :: checking :: frameStoppedLoading :: found :: {log_dict}') + check.append(log_dict) + + if check: + logger.info(f'check_page_load_finished :: checking :: done') + return True + + logger.error(f'check_page_load_finished :: checking :: not finished loading') + return False + + @property + def keys(self): + """Set of special keys codes""" + return selenium.webdriver.common.keys.Keys + + async def refresh(self) -> None: + """refresh the page""" + logger.debug(f'refresh :: {self.current_url=}') + refresh = self.webdriver.refresh() + logger.info(f'refresh :: done') + return refresh + + @property + def url(self): + return self.current_url + + @property + def user_agent(self): + try: + return self.webdriver.execute_script("return navigator.userAgent") + except: + return None + + @property + def current_url(self): + if self.webdriver: + if self._current_url == 'data:,': + return '' + return self._current_url + return '' + + @property + def window_size(self): + return self.config.webdriver_wrapper.window_size + + def _screenshot_name(self, prefix=None): + """Generate a unique filename""" + logger.debug(f'_screenshot_name :: {prefix=}') + + title = self.webdriver.title + url = self.current_url + + hostname = urlparse(url).hostname + + timestamp = Dates.filename_timestamp() + hostname_ = Sanitation.ascii_numeric_only(hostname) + title_ = Sanitation.ascii_numeric_only(title) + + logger.debug(f'_screenshot_name :: {url=}') + logger.debug(f'_screenshot_name :: {timestamp=}') + logger.debug(f'_screenshot_name :: {title_=}') + logger.debug(f'_screenshot_name :: {hostname_=}') + + if prefix: + prefix = Sanitation.safe_string(prefix) + _screenshot_name = f'{prefix}_{timestamp}_{hostname_}_{title_}.png' + logger.info(f'_screenshot_name :: {_screenshot_name=}') + return _screenshot_name + + _screenshot_name = f'{timestamp}_{hostname_}_{title_}.png' + logger.debug(f'_screenshot_name :: {_screenshot_name=}') + + logger.debug(f'_screenshot_name :: done') + return _screenshot_name + + async def action_click( + self, + element: selenium.webdriver.remote.webelement.WebElement, **kwargs): + """perform mouse click""" + logger.debug(f'action_click :: {element=} :: {kwargs=}') + try: + logger.debug(f'action_click :: tag_name :: {element.tag_name}') + logger.debug(f'action_click :: text :: {element.text}') + logger.debug(f'action_click :: accessible_name :: {element.accessible_name}') + logger.debug(f'action_click :: aria_role :: {element.aria_role}') + + element.click(**kwargs) + logger.info(f'action_click :: done') + return True + + except Exception as error: + raise Exception(f'action_click :: failed :: {error=}') + + async def action_type( + self, + key: str or Keys, + secret: bool = False) -> selenium.webdriver.common.action_chains.ActionChains: + """perform keyboard command""" + + if secret: + logger.debug(f'action_type :: {f"*" * len(f"{key}")}') + else: + logger.debug(f'action_type :: {key}') + + try: + action_type = selenium.webdriver.common.action_chains.ActionChains( + self.webdriver).send_keys(key).perform() + logger.info(f'action_type :: done') + return action_type + + except Exception as error: + raise Exception(f'action_type :: failed :: {error=}') + + async def action_type_up( + self, + key: str or Keys, + secret: bool = False) -> selenium.webdriver.common.action_chains.ActionChains: + """release key""" + + if secret: + logger.debug(f'action_type_up :: {"*" * len(f"{key}")}') + else: + logger.debug(f'action_type_up :: {key}') + + try: + action_type_up = selenium.webdriver.common.action_chains.ActionChains( + self.webdriver).key_up(key).perform() + logger.info(f'action_type_up :: done') + return action_type_up + + except Exception as error: + raise Exception(f'action_type_up :: failed :: {error=}') + + async def action_type_down( + self, + key: str or Keys, + secret: bool = False, ) -> selenium.webdriver.common.action_chains.ActionChains: + """hold key down""" + + if secret: + logger.debug(f'action_type_down :: {"*" * len(f"{key}")}') + else: + logger.debug(f'action_type_down :: {key}') + + try: + action_type_down = selenium.webdriver.common.action_chains.ActionChains( + self.webdriver).key_down(key).perform() + logger.info(f'action_type_down :: done') + return action_type_down + + except Exception as error: + raise Exception(f'action_type_down :: failed :: {error=}') + + async def add_cookie(self, cookie_dict: dict) -> bool: + logger.debug(f'add_cookie :: {cookie_dict=}') + + result = self.webdriver.add_cookie(cookie_dict=cookie_dict) + + if result is None: + logger.debug(dict( + domain=cookie_dict.get('domain'), + path=cookie_dict.get('path'), + secure=cookie_dict.get('secure'), + expiry=cookie_dict.get('expiry'), + name=cookie_dict.get('name'), + )) + logger.debug(f'add_cookie :: domain :: {cookie_dict.get("domain")}') + logger.debug(f'add_cookie :: path :: {cookie_dict.get("path")}') + logger.debug(f'add_cookie :: secure :: {cookie_dict.get("secure")}') + logger.debug(f'add_cookie :: expiry :: {cookie_dict.get("expiry")}') + logger.debug(f'add_cookie :: name :: {cookie_dict.get("name")}') + + logger.info(f'add_cookie :: done') + return True + + raise Exception(f'add_cookie :: failed :: {cookie_dict=}') + + async def add_cookie_from_file(self, file: str) -> bool: + """add cookies from file""" + logger.debug(f'add_cookie_from_file :: {file=}') + + if os.path.exists(file): + await self.add_cookies_from_list( + await self.cookie_file_to_dict(file=file) + ) + logger.info(f'add_cookie_from_file :: done') + return True + + raise Exception(f'add_cookie_from_file :: failed :: {file=}') + + async def add_cookies_from_list(self, cookies_list: list) -> bool: + """add cookies from a list of cookies""" + logger.debug(f'add_cookies_from_list :: start') + logger.debug(f'add_cookies_from_list :: {len(cookies_list)} cookies found') + + for cookie in cookies_list: + logger.debug(f'add_cookies_from_list :: {cookie=}') + await self.add_cookie(cookie_dict=cookie) + + logger.debug(f'add_cookies_from_list :: {len(cookies_list)} cookies added') + logger.info(f'add_cookies_from_list :: done') + return True + + async def add_cookie_from_current_url(self): + """add cookies from the current url""" + logger.debug(f'add_cookie_from_current_url :: {self.url=}') + logger.info(f'add_cookie_from_current_url :: done') + return self.add_cookie_from_url(self.url) + + async def add_cookie_from_url(self, url: str) -> bool: + """add cookies from matching hostname""" + logger.debug(f'add_cookie_from_url :: {url=}') + + cookie_file = await self._url_filename(url=url) + logger.debug(f'add_cookie_from_url :: {cookie_file=}') + + if os.path.exists(cookie_file): + logger.debug(f'add_cookie_from_url :: {cookie_file=} file found') + add_cookie_from_url = await self.add_cookie_from_file(file=cookie_file) + logger.info(f'add_cookie_from_url :: done') + return add_cookie_from_url + + raise Exception(f'add_cookie_from_url :: failed :: {cookie_file=}') + + async def add_cookie_from_base64(self, base64_str: str) -> bool: + """add cookie from base64 string""" + logger.debug(f'add_cookie_from_base64 :: base64 :: {len(base64_str) / 1024} KB') + + if base64_str: + add_cookie_from_base64 = json.loads(base64.b64decode(base64_str)) + logger.debug(f'add_cookie_from_base64 :: str :: {len(add_cookie_from_base64) / 1024} KB') + await self.add_cookies_from_list(add_cookie_from_base64) + + logger.info(f'add_cookie_from_base64 :: done') + return True + + raise Exception(f'add_cookie_from_base64 :: failed :: {len(base64_str) / 1024} KB') + + async def autosave_cookies(self) -> bool: + """auto save cookies for current url""" + logger.debug(f'autosave_cookies') + + if self.current_url: + logger.debug(f'autosave_cookies :: {self.current_url=}') + + if not self.autosaved: + logger.debug(f'autosave_cookies :: {self.autosaved=}') + await self.add_cookie_from_current_url() + await self.refresh() + self.autosaved = True + logger.debug(f'autosave_cookies :: {self.autosaved=}') + + autosave_cookies = await self.save_cookies_for_current_url() + logger.info(f'autosave_cookies :: done') + return autosave_cookies + + logger.debug(f'autosave_cookies :: failed :: no current url :: {self.current_url=}') + + async def delete_all_cookies(self) -> None: + """delete all cookies""" + logger.debug(f'delete_all_cookies') + delete_all_cookies = self.webdriver.delete_all_cookies() + logger.info(f'delete_all_cookies :: done') + return delete_all_cookies + + async def _url_filename(self, url: str): + """turn url into a filename""" + logger.debug(f'_url_filename :: {url=}') + + parsed = await self.urlparse(url) + hostname = parsed.hostname + cookie_file = f'cookies-{hostname}.json' + + logger.debug(f'_url_filename :: {hostname=}') + logger.debug(f'_url_filename :: {cookie_file=}') + + logger.debug(f'_url_filename :: done') + return cookie_file + + async def get_cookie(self, name: str) -> dict: + """get cookie by name""" + logger.debug(f'get_cookie :: {name=}') + get_cookie = self.webdriver.get_cookie(name=name) + logger.debug(f'get_cookie :: {get_cookie=}') + logger.info(f'get_cookie :: done') + return get_cookie + + async def get_cookies(self) -> [dict]: + """get all cookies""" + logger.debug(f'get_cookies :: ') + get_cookies = self.webdriver.get_cookies() + logger.debug(f'get_cookies :: {len(get_cookies)} total cookies') + logger.info(f'get_cookies :: done') + return get_cookies + + async def get_cookies_base64(self) -> str: + """get cookies as base64""" + logger.debug(f'get_cookies_base64 ::') + + get_cookies_base64 = await self.get_cookies() + get_cookies_base64 = base64.b64encode( + json.dumps(get_cookies_base64).encode() + ).decode() + logger.debug(f'get_cookies_base64 :: {len(get_cookies_base64) / 1024} KB') + + logger.info(f'get_cookies_base64 :: done') + return get_cookies_base64 + + async def get_cookies_json(self) -> json.dumps: + """get cookies as json""" + logger.debug(f'get_cookies_json ::') + + get_cookies_json = await self.get_cookies() + get_cookies_json = json.dumps(get_cookies_json) + logger.debug(f'get_cookies_json :: {len(get_cookies_json) / 1024} KB') + + logger.info(f'get_cookies_json :: done') + return get_cookies_json + + async def get_cookies_summary(self) -> dict: + """get cookies summary""" + logger.debug(f'get_cookies_summary ::') + + result = await self.get_cookies() + summary = {} + if result: + for cookie in result: + cookie = dict(cookie) + domain = cookie.get('domain') + name = cookie.get('name') + expiry = cookie.get('expiry') + + logger.debug(f'get_cookies_summary :: {cookie}') + logger.debug(f'get_cookies_summary :: domain :: {domain}') + logger.debug(f'get_cookies_summary :: name :: {name}') + logger.debug(f'get_cookies_summary :: expiry :: {expiry}') + + if domain in summary.keys(): + summary[domain].append(cookie) + else: + summary[domain] = [cookie] + + logger.debug(f'get_cookies_summary :: summary :: {summary}') + logger.info(f'get_cookies_summary ::') + return summary + + async def close(self): + """close browser""" + logger.debug(f'webdriver :: close') + self.webdriver.close() + logger.info(f'webdriver :: close :: done') + + @staticmethod + async def error_parsing(error) -> tuple: + """parse webdriver error""" + logger.debug(f'error_parsing :: {error=}') + + try: + error_parsed = f'{error}'.splitlines() + error_parsed = [f'{x}'.strip() for x in error_parsed] + message = error_parsed[0] + session = error_parsed[1] + stacktrace = error_parsed[2:] + stacktrace = ' '.join(stacktrace) + + logger.debug(f'error_parsing :: {error_parsed}') + logger.debug(f'error_parsing :: {message}') + logger.debug(f'error_parsing :: {stacktrace}') + + logger.info(f'error_parsing :: done') + return message, session, stacktrace + + except Exception as exception: + logger.error(f'error_parsing :: failed :: {exception=}') + return error, None, None + + async def find_anything( + self, + match: str, + value: str = None, + by: selenium.webdriver.common.by.By = None, + case_sensitive: bool = False, + exact_match: bool = False, + return_first: bool = False, + **kwargs) -> list: + """fuzzy search through everything + + find all tags + find all matches within meta data + """ + logger.debug( + f'find_anything :: {match=} :: {value=} :: {by=} : {case_sensitive=} :: {exact_match=} :: {return_first=} :: {kwargs=}') + + by_types = [ + self.by.TAG_NAME, + self.by.ID, + self.by.NAME, + self.by.CLASS_NAME, + self.by.LINK_TEXT, + self.by.PARTIAL_LINK_TEXT, + self.by.CSS_SELECTOR, + self.by.XPATH, + ] + + if by: + by_types = [by] + + if not value: + value = '*' + + MATCHED = [] + + for by_ in by_types: + elements = await self.find_elements(value=value, by=by_, **kwargs) + for element in elements: + dirs = dir(element) + dir_meta = [] + for dir_ in dirs: + try: + dir_meta.append( + getattr(element, f'{dir_}') + ) + + MATCH = f'{match}' + AGAINST = f'''{getattr(element, f'{dir_}')}''' + + if not case_sensitive: + MATCH = f'{match}'.lower() + AGAINST = f'''{getattr(element, f'{dir_}')}'''.lower() + + except: + pass + + FOUND = None + + if MATCH == AGAINST and exact_match: + FOUND = element + + if MATCH in AGAINST and not exact_match: + FOUND = element + + if FOUND and FOUND not in MATCHED: + logger.debug( + f'find_anything :: {self.current_url} :: {MATCH=} :: {AGAINST=} :: attribute={dir_} :: {element=} :: found') + MATCHED.append(FOUND) + + if return_first: + logger.info(f'find_anything :: done') + return MATCHED + + logger.debug(f'find_anything :: {len(MATCHED)} results found') + logger.info(f'find_anything :: done') + return MATCHED + + async def find_element( + self, + value: str, + by: selenium.webdriver.common.by.By, + **kwargs) -> selenium.webdriver.Chrome.find_element: + """find element""" + logger.debug(f'find_element :: {self.current_url} :: {value=} :: {by=} :: {kwargs=}') + + find_element = self.webdriver.find_element(value=value, by=by, **kwargs) + logger.debug(f'find_element :: {self.current_url} :: {value=} :: found') + + logger.info(f'find_element :: done') + return find_element + + async def find_elements( + self, + value: str, + by: selenium.webdriver.common.by.By, + **kwargs) -> list: + """find elements""" + logger.debug(f'find_elements :: {self.current_url} :: {value=} :: {by=} :: {kwargs=}') + + find_elements = self.webdriver.find_elements(value=value, by=by, **kwargs) + logger.debug(f'find_elements :: {len(find_elements)} elements found') + + logger.info(f'find_elements :: done') + return find_elements + + async def find_xpath( + self, + value: str, + by: selenium.webdriver.common.by.By = selenium.webdriver.common.by.By.XPATH, + **kwargs) -> selenium.webdriver.Chrome.find_element: + """find xpath""" + logger.debug(f'find_xpath :: {self.current_url} :: {value=} :: {by=} :: {kwargs=}') + + find_xpath = await self.find_element(value=value, by=by, **kwargs) + logger.debug(f'find_xpath :: {self.current_url} :: {find_xpath=} :: found') + + logger.info(f'find_xpath :: done') + return find_xpath + + async def get(self, url: str, **kwargs) -> bool: + """get url""" + logger.debug(f'browser :: get :: {url} :: {kwargs=}') + + if not self.webdriver: + raise Exception(f'browser :: get :: failed :: missing webdriver') + + try: + if self.webdriver.get(url, **kwargs) is None: + logger.debug(f'browser :: get :: {url} :: {self.current_url=} :: {kwargs=}') + logger.info(f'browser :: get') + + if self.config.cookies_autosave: + await self.autosave_cookies() + + logger.info(f'browser :: get :: done') + return True + + except Exception as exception: + logger.error(f'browser :: get :: failed :: {exception=}') + + logger.error(f'browser :: get :: failed :: {url}') + return False + + async def get_page(self, *args, **kwargs) -> bool: + """alias to get""" + logger.debug(f'get_page :: {args=} :: {kwargs=}') + return await self.get(*args, **kwargs) + + async def get_page_source(self) -> str: + """get page source""" + logger.debug(f'get_page_source :: ') + get_page_source = self.webdriver.page_source + logger.debug(f'get_page_source :: {len(get_page_source) / 1024} KB') + logger.info(f'get_page_source :: done') + return get_page_source + + async def get_page_source_beautifulsoup( + self, + markup: str = None, + features: str = 'lxml') -> BeautifulSoup: + """read page source with beautifulsoup""" + logger.debug(f'get_page_source_beautifulsoup :: {features=} :: {len(markup) / 1024} KB') + + if not markup: + markup = await self.get_page_source() + + get_page_source_beautifulsoup = BeautifulSoup( + markup=markup, + features=features) + logger.debug(f'get_page_source_beautifulsoup :: {len(get_page_source_beautifulsoup)} size') + + logger.info(f'get_page_source_beautifulsoup :: done') + return get_page_source_beautifulsoup + + async def get_random_user_agent( + self, + filter: list or str = None, + case_sensitive: bool = False) -> str: + """get a random user agent string""" + logger.debug(f'get_random_user_agent :: {filter=} :: {case_sensitive=}') + + get_random_user_agent = SeleniumUserAgentBuilder().get_random_agent( + filter=filter, + case_sensitive=case_sensitive) + logger.debug(f'get_random_user_agent :: {get_random_user_agent}') + + logger.info(f'get_random_user_agent :: done') + return get_random_user_agent + + async def get_screenshot_as_base64(self, **kwargs): + """screenshot as base64""" + logger.debug(f'get_screenshot_as_base64 :: ') + get_screenshot_as_base64 = self.webdriver.get_screenshot_as_base64(**kwargs) + logger.debug(f'get_screenshot_as_base64 :: {round(len(get_screenshot_as_base64) / 1024)} KB') + logger.info(f'get_screenshot_as_base64 :: done') + return get_screenshot_as_base64 + + async def get_screenshot_as_file( + self, + filename: str = None, + prefix: str = None, + folder: str = None, + **kwargs) -> bool: + """alias to save_screenshot""" + logger.debug(f'get_screenshot_as_file :: {filename=} :: {prefix=} :: {folder=} :: {kwargs=}') + + get_screenshot_as_file = await self.save_screenshot( + self, + filename=filename, + prefix=prefix, + folder=folder, + **kwargs) + + logger.info(f'get_screenshot_as_file :: done') + return get_screenshot_as_file + + async def get_screenshot_as_png(self, **kwargs): + """screenshot as png""" + logger.debug(f'get_screenshot_as_png ::') + get_screenshot_as_png = self.webdriver.get_screenshot_as_png(**kwargs) + logger.debug(f'get_screenshot_as_png :: {round(len(get_screenshot_as_png) / 1024)} KB') + logger.info(f'get_screenshot_as_png :: done') + return get_screenshot_as_png + + async def is_running(self) -> bool: + """webdriver is running""" + logger.debug(f'webdriver :: ') + + if self.webdriver: + logger.info(f'webdriver :: is running') + return True + logger.error(f'webdriver :: is not running') + return False + + async def load_cookies_for_current_url(self) -> bool: + """load cookies from file for current url""" + logger.debug(f'load_cookies_for_current_url :: ') + + filename = await self._url_filename(url=self.url) + logger.debug(dict( + load_cookies_for_current_url=filename, + url=self.url, + )) + + load_cookies_for_current_url = await self.add_cookie_from_file(file=filename) + logger.info(f'load_cookies_for_current_url :: done') + return load_cookies_for_current_url + + @property + def page_source(self): + return self.webdriver.page_source + + async def urlparse(self, url: str): + """parse url""" + logger.debug(f'urlparse :: {url=}') + parsed = urlparse(url=url) + logger.debug(f'urlparse :: {parsed=}') + logger.info(f'urlparse :: done') + return parsed + + async def quit(self) -> bool: + """gracefully quit webdriver""" + logger.debug(f'webdriver :: quit') + + if self.webdriver: + try: + await self.close() + self.webdriver.quit() + self.webdriver.stop_client() + except Exception as error: + message, session, stacktrace = await self.error_parsing(error) + logger.error(f'webdriver :: quit :: failed :: {message=} :: {session=} :: {stacktrace=}') + return False + + logger.info(f'webdriver :: quit :: done') + return True + + async def run(self) -> bool: + """run webdriver""" + logger.debug(f'webdriver :: run') + + try: + run = await self.config.run() + logger.info(f'webdriver :: run :: done') + return run + except Exception as exception: + logger.error(f'webdriver :: run :: failed :: {exception=}') + return False + + async def save_cookies_for_current_url(self) -> bool: + """save cookies for current url""" + logger.debug(f'save_cookies_for_current_url :: ') + + filename = await self._url_filename(url=self.url) + save_cookies_for_current_url = await self.save_cookies_to_file(file=filename) + logger.debug(f'save_cookies_for_current_url :: {self.current_url} :: {filename}') + + logger.info(f'save_cookies_for_current_url :: done') + return save_cookies_for_current_url + + async def save_cookies_to_file(self, file: str) -> bool: + """save cookies to file""" + logger.debug(f'save_cookies_to_file :: {file}') + + with open(file, 'w') as cookies: + cookies.write( + await self.get_cookies_json() + ) + + if os.path.exists(file): + logger.debug(f'save_cookies_to_file :: {os.path.abspath(file)} :: {os.stat(file).st_size} B') + logger.info(f'save_cookies_to_file :: done') + return True + + logger.error(f'save_cookies_to_file :: failed :: {file=}') + return False + + async def save_screenshot( + self, + filename: str = None, + prefix: str = None, + folder: str = None, + **kwargs) -> bool: + """save screenshot to file""" + logger.debug(f'save_screenshot :: {self.current_url} :: {filename=} :: {prefix=} :: {folder=} :: {kwargs=}') + + if not filename: + filename = self._screenshot_name(prefix) + logger.debug(f'save_screenshot :: {filename=}') + + if not folder: + path = os.path.abspath(tempfile.gettempdir()) + logger.debug(f'save_screenshot :: {path=}') + else: + path = os.path.abspath(folder) + logger.debug(f'save_screenshot :: {path=}') + + if not os.path.exists(path): + os.makedirs(path) + + save = os.path.join(path, filename) + + if self.webdriver.save_screenshot(save, **kwargs): + logger.debug(f'save_screenshot :: {save} :: {round(os.stat(save).st_size / 1024)} KB') + logger.info(f'save_screenshot :: done') + return True + + logger.error(f'save_screenshot :: failed') + return False + + async def set_window_size(self, width=1920, height=1080, device_type=None) -> bool: + """set browser resolution""" + logger.debug(f'set_window_size :: {width=} :: {height=} :: {device_type=}') + + try: + self.config.webdriver_wrapper.set_window_size( + width=width, + height=height, + device_type=device_type) + except Exception as error: + message, session, stacktrace = await self.error_parsing(error) + logger.error(f'set_window_size :: failed :: {message=} :: {session=} :: {stacktrace=}') + return False + + logger.info(f'set_window_size :: done') + return True + + async def set_window_position(self, x: int = 0, y: int = 0): + """set browser position""" + logger.debug(f'set_window_position :: {x=} :: {y=}') + set_window_position = self.webdriver.set_window_position(x, y) + logger.info(f'set_window_position :: done') + return set_window_position + + async def start(self): + """alias to run""" + return await self.run() + + async def wait_for_anything( + self, + match: str, + value: str = None, + by: selenium.webdriver.common.by.By = None, + case_sensitive: bool = False, + exact_match: bool = True, + timeout: int = 30, + return_first: bool = False, + **kwargs) -> list: + """wait for anything""" + logger.debug( + f'wait_for_anything :: {match=} :: {value=} :: {by=} :: {case_sensitive=} :: {exact_match=} :: {timeout=} :: {return_first=} :: {kwargs=}') + + timeout_start = time.time() + timeout_elapsed = round(abs(timeout_start - time.time()), 1) + + while timeout_elapsed < timeout: + + logger.debug(str(dict( + timeout=f'{timeout_elapsed}/{timeout}', + current_url=self.current_url, + value=value, + by=by, + ))) + + try: + find = await self.find_anything( + match=match, + value=value, + by=by, + case_sensitive=case_sensitive, + exact_match=exact_match, + return_first=return_first, + **kwargs) + logger.debug(f'wait_for_anything :: {len(find)} elements found') + + if find: + logger.info(f'wait_for_anything :: done') + return find + + except Exception as error: + logger.error(f'wait_for_anything :: failed :: {error=}') + + timeout_elapsed = round(abs(timeout_start - time.time()), 1) + logger.debug(f'wait_for_anything :: {timeout_elapsed} seconds elapsed') + + raise ElementNotFoundException(f'wait_for_anything :: failed :: {value=}') + + async def wait_for_element( + self, + value: str, + by: selenium.webdriver.common.by.By, + timeout: int = 30, + **kwargs) -> selenium.webdriver.Chrome.find_element: + """wait for an element""" + logger.debug(f'wait_for_element :: {value=} :: {by=} :: {timeout=} :: {kwargs=}') + + timeout_start = time.time() + timeout_elapsed = round(abs(timeout_start - time.time()), 1) + + while timeout_elapsed < timeout: + + logger.debug( + f'wait_for_element :: {f"{timeout_elapsed}/{timeout}"} :: {by=} :: {self.current_url} :: {value=}') + + try: + find = await self.find_element( + value=value, + by=by, + **kwargs) + logger.debug(f'wait_for_element :: element found') + + if find: + logger.info(f'wait_for_element :: done') + return find + + except Exception as error: + logger.error(f'wait_for_element :: failed :: {error=}') + + timeout_elapsed = round(abs(timeout_start - time.time()), 1) + logger.debug(f'wait_for_element :: {timeout_elapsed} seconds elapsed') + + raise ElementNotFoundException(f'wait_for_element :: failed :: {value=}') + + async def wait_for_elements( + self, + value: str, + by: selenium.webdriver.common.by.By, + timeout: int = 30, + **kwargs) -> list: + """wait for all matching elements""" + logger.debug(f'wait_for_elements :: {value=} :: {by=} :: {timeout=} :: {kwargs=}') + + timeout_start = time.time() + timeout_elapsed = round(abs(timeout_start - time.time()), 1) + + while timeout_elapsed < timeout: + + logger.debug( + f'wait_for_element :: {f"{timeout_elapsed}/{timeout}"} :: {by=} :: {self.current_url} :: {value=}') + + try: + find = await self.find_elements( + value=value, + by=by, + **kwargs) + logger.debug(f'wait_for_elements :: {len(find)} elements found') + + if find: + logger.info(f'wait_for_elements :: done') + return find + + except Exception as error: + logger.error(f'wait_for_elements :: failed :: {error=}') + + timeout_elapsed = round(abs(timeout_start - time.time()), 1) + logger.debug(f'wait_for_elements :: {timeout_elapsed} seconds elapsed') + + raise ElementNotFoundException(f'wait_for_elements :: failed :: {value=}') + + async def wait_for_id( + self, + value: str, + timeout: int = 30, + **kwargs) -> selenium.webdriver.Chrome.find_element: + """wait for an element id""" + logger.debug(f'wait_for_id :: {value=} :: {timeout=} :: {kwargs=}') + wait_for_id = await self.wait_for_element( + value=value, + by=self.by.ID, + timeout=timeout, + **kwargs) + + logger.info(f'wait_for_id :: done') + return wait_for_id + + async def wait_for_xpath( + self, + value: str, + timeout: int = 30, + **kwargs) -> selenium.webdriver.Chrome.find_element: + """wait for a xpath""" + logger.debug(f'wait_for_xpath :: {value=} :: {timeout=} :: {kwargs=}') + + wait_for_xpath = await self.wait_for_element( + value=value, + by=self.by.XPATH, + timeout=timeout, + **kwargs) + + logger.info(f'wait_for_xpath :: done') + return wait_for_xpath diff --git a/automon/integrations/seleniumWrapper/browser_capabilities.py b/automon/integrations/seleniumWrapper/browser_capabilities.py new file mode 100644 index 00000000..55fea37a --- /dev/null +++ b/automon/integrations/seleniumWrapper/browser_capabilities.py @@ -0,0 +1,20 @@ +from selenium.webdriver.common.desired_capabilities import DesiredCapabilities + +caps = DesiredCapabilities.CHROME + #as per latest docs +caps['goog:loggingPrefs'] = {'performance': 'ALL'} +driver = webdriver.Chrome(desired_capabilities=caps) + + +class SeleniumDesiredCapabilities(DesiredCapabilities): + + def __init__(self): + pass + + @property + def DesiredCapabilities(self): + return DesiredCapabilities + + @property + def CHROME(self): + return self.DesiredCapabilities.CHROME \ No newline at end of file diff --git a/automon/integrations/seleniumWrapper/browser_types.py b/automon/integrations/seleniumWrapper/browser_types.py new file mode 100644 index 00000000..3987578c --- /dev/null +++ b/automon/integrations/seleniumWrapper/browser_types.py @@ -0,0 +1,149 @@ +import selenium +import selenium.webdriver.chrome.options + +from selenium.webdriver import Chrome +from selenium.webdriver import Edge +from selenium.webdriver import Firefox +from selenium.webdriver import Ie +from selenium.webdriver import Proxy +from selenium.webdriver import Remote +from selenium.webdriver import Safari +from selenium.webdriver import WebKitGTK + +from automon import log + +from .config import SeleniumConfig + +# fix for python36 +try: + import selenium.webdriver.chromium.options + from selenium.webdriver import ChromiumEdge + from selenium.webdriver import WPEWebKit +except: + from selenium.webdriver import Chrome as ChromiumEdge + from selenium.webdriver import Chrome as WPEWebKit + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + +class SeleniumBrowserType(object): + config: SeleniumConfig + + def __init__(self, config: SeleniumConfig): + self.config = config + self.webdriver = self.config.webdriver + self.chromedriver = self.config.selenium_chromedriver_path + + def __repr__(self): + return f'{self.__class__.__name__}' + + def chrome(self, options: list = None) -> Chrome: + """Chrome""" + logger.info(f'Browser set as Chrome') + + chrome_options = selenium.webdriver.chrome.options.Options() + + if options: + for arg in options: + chrome_options.add_argument(arg) + + try: + if self.chromedriver: + return self.webdriver.ChromeWrapper(executable_path=self.chromedriver, options=chrome_options) + return self.webdriver.ChromeWrapper(options=chrome_options) + except Exception as e: + logger.error(f'Browser not set. {e}') + + def chrome_headless(self, options: list = None, **kwargs) -> Chrome: + """Chrome headless + + chrome_options = Options() + chrome_options.add_argument("--disable-extensions") + chrome_options.add_argument("--disable-gpu") + chrome_options.add_argument("--no-sandbox") # linux only + chrome_options.add_argument("--headless") + + chrome_options.headless = True # also works + + """ + logger.info(f'Browser set as Chrome Headless') + + chrome_options = selenium.webdriver.chrome.options.Options() + chrome_options.headless = True + + if options: + for arg in options: + chrome_options.add_argument(arg) + + try: + if self.chromedriver: + return self.webdriver.ChromeWrapper(self.chromedriver, options=chrome_options, **kwargs) + return self.webdriver.ChromeWrapper(options=chrome_options, **kwargs) + except Exception as e: + logger.error(f'Browser not set. {e}') + + @property + def chromium_edge(self, options: list = None, **kwargs) -> ChromiumEdge: + """Chromium""" + logger.info(f'Browser set as Chromium Edge') + + chromium_options = selenium.webdriver.chromium.options.ChromiumOptions() + + if options: + for arg in options: + chromium_options.add_argument(arg) + + try: + if self.chromedriver: + return self.webdriver.ChromiumEdge(self.chromedriver, options=chromium_options, **kwargs) + return self.webdriver.ChromiumEdge(options=chromium_options, **kwargs) + except Exception as e: + logger.error(f'Browser not set. {e}') + + def edge(self, **kwargs) -> Edge: + """Edge""" + logger.info(f'Browser set as Edge') + return self.webdriver.Edge(**kwargs) + + def firefox(self, **kwargs) -> Firefox: + """Firefox""" + logger.info(f'Browser set as Firefox') + return self.webdriver.Firefox(**kwargs) + + def ie(self, **kwargs) -> Ie: + """Internet Explorer""" + logger.info(f'Browser set as Internet Explorer') + return self.webdriver.Ie(**kwargs) + + def opera(self): + """Depreciated: Opera""" + logger.warning(f'Opera is depreciated') + + def proxy(self, **kwargs) -> Proxy: + """Proxy""" + logger.info(f'Browser using proxy') + return self.webdriver.Proxy(**kwargs) + + def phantomjs(self): + """PhantomJS""" + logger.warning(f'PhantomJS not supported') + + def remote(self, **kwargs) -> Remote: + """Remote""" + logger.info(f'Browser using remote browser') + return self.webdriver.Remote(**kwargs) + + def safari(self, **kwargs) -> Safari: + """Safari""" + logger.info(f'Browser set as Safari') + return self.webdriver.Safari(**kwargs) + + def webkit_gtk(self, **kwargs) -> WebKitGTK: + """WebKit GTK""" + logger.info(f'Browser set as WebKitGTK') + return self.webdriver.WebKitGTK(**kwargs) + + def wpewebkit(self, **kwargs) -> WPEWebKit: + """WPE WebKit""" + logger.info(f'Browser set as WPEWebKit') + return self.webdriver.WPEWebKit(**kwargs) diff --git a/automon/integrations/seleniumWrapper/config.py b/automon/integrations/seleniumWrapper/config.py new file mode 100644 index 00000000..e75d13b5 --- /dev/null +++ b/automon/integrations/seleniumWrapper/config.py @@ -0,0 +1,57 @@ +import selenium.webdriver + +from automon import log +from automon.helpers.osWrapper import environ + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class SeleniumConfig(object): + def __init__(self): + self._webdriver = None + self.webdriver_wrapper = None + + self.cookies_autosave: bool = environ('SELENIUM_COOKIES_AUTOSAVE', False) + self._cookies_base64 = environ('SELENIUM_COOKIES_BASE64') + self._cookies_file = environ('SELENIUM_COOKIES_FILE') + + @property + def webdriver(self): + try: + return self.webdriver_wrapper.webdriver + except: + return self._webdriver + + @property + def window_size(self): + """get window size""" + if self.webdriver_wrapper: + return self.webdriver_wrapper.window_size + + @property + def cookies_base64(self): + logger.debug(f'cookies_base64 :: {len(self._cookies_base64) / 1024 if self._cookies_base64 else None} KB') + return self._cookies_base64 + + @property + def cookies_file(self): + logger.debug(f'cookies_file :: {self._cookies_file}') + return self._cookies_file + + async def run(self): + """run webdriver""" + logger.debug(f'webdriver :: config :: run') + run = await self.webdriver_wrapper.run() + self._webdriver = self.webdriver_wrapper.webdriver + logger.debug(f'webdriver :: config :: run :: {self.webdriver=}') + logger.info(f'webdriver :: config :: run :: done') + return run + + async def start(self): + """alias to run""" + return await self.run() + + async def quit(self): + """quit webdriver""" + return diff --git a/automon/integrations/seleniumWrapper/config_window_size.py b/automon/integrations/seleniumWrapper/config_window_size.py new file mode 100644 index 00000000..62c36579 --- /dev/null +++ b/automon/integrations/seleniumWrapper/config_window_size.py @@ -0,0 +1,56 @@ +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) + + +def set_window_size(width: int = 1920, height: int = 1080, device_type: str = None) -> (int, int): + """set browser resolution""" + + if device_type == 'pixel3': + width = 1080 + height = 2160 + + if device_type == 'web-small' or device_type == '800x600': + width = 800 + height = 600 + + if device_type == 'web-small-2' or device_type == '1024x768': + width = 1024 + height = 768 + + if device_type == 'web-small-3' or device_type == '1280x960': + width = 1280 + height = 960 + + if device_type == 'web-small-4' or device_type == '1280x1024': + width = 1280 + height = 1024 + + if device_type == 'web' or device_type == '1920x1080': + width = 1920 + height = 1080 + + if device_type == 'web-2' or device_type == '1600x1200': + width = 1600 + height = 1200 + + if device_type == 'web-3' or device_type == '1920x1200': + width = 1920 + height = 1200 + + if device_type == 'web-large' or device_type == '2560x1400': + width = 2560 + height = 1400 + + if device_type == 'web-long' or device_type == '1920x3080': + width = 1920 + height = 3080 + + if not width and not height: + width = 1920 + height = 1080 + + logger.debug(f'{int(width)}, {int(height)}') + + return int(width), int(height) diff --git a/automon/integrations/seleniumWrapper/exceptions.py b/automon/integrations/seleniumWrapper/exceptions.py new file mode 100644 index 00000000..9a234afe --- /dev/null +++ b/automon/integrations/seleniumWrapper/exceptions.py @@ -0,0 +1,14 @@ +class ActionClickException(Exception): + pass + + +class ActionTypeException(Exception): + pass + + +class ElementNotFoundException(Exception): + pass + + +class XpathNotFoundException(ElementNotFoundException): + pass diff --git a/automon/integrations/seleniumWrapper/tests/__init__.py b/automon/integrations/seleniumWrapper/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/seleniumWrapper/tests/test_browser.py b/automon/integrations/seleniumWrapper/tests/test_browser.py new file mode 100644 index 00000000..21d6037a --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_browser.py @@ -0,0 +1,39 @@ +import unittest +import asyncio + +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + +browser = SeleniumBrowser() +browser.config.webdriver_wrapper = ChromeWrapper() +browser.config.webdriver_wrapper.enable_defaults().enable_headless() + + +class SeleniumClientTest(unittest.TestCase): + if asyncio.run(browser.run()): + + def test_fake_page(self): + self.assertFalse(asyncio.run(browser.get('http://555.555.555.555'))) + + def test_real_page(self): + if asyncio.run(browser.get('http://1.1.1.1')): + self.assertTrue(True) + + def test_screenshot_png(self): + if asyncio.run(browser.get('http://google.com')): + self.assertTrue(asyncio.run(browser.get_screenshot_as_png())) + + def test_screenshot_base64(self): + if asyncio.run(browser.get('http://yahoo.com')): + self.assertTrue(asyncio.run(browser.get_screenshot_as_base64())) + + def test_screenshot_file(self): + if asyncio.run(browser.get('http://bing.com')): + self.assertTrue(asyncio.run(browser.save_screenshot())) + self.assertTrue(asyncio.run(browser.save_screenshot(folder='./'))) + + asyncio.run(browser.quit()) + + +if __name__ == '__main__': + unittest.main() + browser.quit() diff --git a/automon/integrations/seleniumWrapper/tests/test_browser_cookies_autosave.py b/automon/integrations/seleniumWrapper/tests/test_browser_cookies_autosave.py new file mode 100644 index 00000000..d7973ffe --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_browser_cookies_autosave.py @@ -0,0 +1,25 @@ +import unittest +import asyncio + +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + + +class Test(unittest.TestCase): + browser = SeleniumBrowser() + browser.config.webdriver_wrapper = ChromeWrapper() + browser.config.webdriver_wrapper.enable_defaults().enable_headless() + + # if asyncio.run(browser.run()): + asyncio.run(browser.run()) + + def test_autosave(self): + if asyncio.run(self.browser.run()): + + if asyncio.run(self.browser.get('http://bing.com')): + self.assertTrue(asyncio.run(self.browser.autosave_cookies())) + + asyncio.run(self.browser.quit()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/seleniumWrapper/tests/test_browser_headless.py b/automon/integrations/seleniumWrapper/tests/test_browser_headless.py new file mode 100644 index 00000000..20b61964 --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_browser_headless.py @@ -0,0 +1,26 @@ +import unittest +import asyncio + +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + +browser = SeleniumBrowser() +browser.config.webdriver_wrapper = ChromeWrapper() +browser.config.webdriver_wrapper.enable_defaults().enable_headless() + + +class SeleniumClientTest(unittest.TestCase): + if asyncio.run(browser.run()): + + def test(self): + + if asyncio.run(browser.get('http://1.1.1.1')): + + if asyncio.run(browser.check_page_load_finished()): + self.assertTrue(asyncio.run(browser.save_screenshot())) + self.assertTrue(asyncio.run(browser.save_screenshot(folder='./'))) + + asyncio.run(browser.quit()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/seleniumWrapper/tests/test_browser_useragent.py b/automon/integrations/seleniumWrapper/tests/test_browser_useragent.py new file mode 100644 index 00000000..6737e3ba --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_browser_useragent.py @@ -0,0 +1,23 @@ +import unittest +import asyncio + +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + +browser = SeleniumBrowser() +browser.config.webdriver_wrapper = ChromeWrapper() +browser.config.webdriver_wrapper.enable_defaults().enable_headless() + +agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:112.0) Gecko/20100101 Firefox/112.0' + +browser.config.webdriver_wrapper.set_user_agent(agent) + + +class SeleniumClientTest(unittest.TestCase): + if asyncio.run(browser.run()): + def test_user_agent(self): + self.assertEqual(browser.user_agent, agent) + asyncio.run(browser.quit()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/seleniumWrapper/tests/test_config.py b/automon/integrations/seleniumWrapper/tests/test_config.py new file mode 100644 index 00000000..6dbded5d --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_config.py @@ -0,0 +1,12 @@ +import unittest + +from automon.integrations.seleniumWrapper import SeleniumConfig + + +class SeleniumConfigTest(unittest.TestCase): + def test_config(self): + self.assertTrue(SeleniumConfig()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/seleniumWrapper/tests/test_logs.py b/automon/integrations/seleniumWrapper/tests/test_logs.py new file mode 100644 index 00000000..b8115e49 --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_logs.py @@ -0,0 +1,28 @@ +import unittest +import asyncio + +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + +browser = SeleniumBrowser() +browser.config.webdriver_wrapper = ChromeWrapper() +browser.config.webdriver_wrapper.enable_defaults().enable_headless() + + +class SeleniumClientTest(unittest.TestCase): + if asyncio.run(browser.run()): + + def test_logs(self): + + if asyncio.run(browser.get('http://binance.com')): + logs = asyncio.run(browser.get_log_performance()) + logs = asyncio.run(browser.get_log_browser()) + logs = asyncio.run(browser.get_log_driver()) + logs = asyncio.run(browser.get_logs()) + + pass + + asyncio.run(browser.quit()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/seleniumWrapper/tests/test_new_browser.py b/automon/integrations/seleniumWrapper/tests/test_new_browser.py new file mode 100644 index 00000000..79cd971a --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_new_browser.py @@ -0,0 +1,18 @@ +import unittest +import asyncio + +from automon.integrations.seleniumWrapper import SeleniumBrowser, ChromeWrapper + +browser = SeleniumBrowser() +browser.config.webdriver_wrapper = ChromeWrapper() +browser.config.webdriver_wrapper.enable_defaults().enable_headless() + + +class SeleniumClientTest(unittest.TestCase): + if asyncio.run(browser.run()): + def test(self): + self.assertTrue(asyncio.run(browser.quit())) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/seleniumWrapper/tests/test_user_agent.py b/automon/integrations/seleniumWrapper/tests/test_user_agent.py new file mode 100644 index 00000000..f99342c0 --- /dev/null +++ b/automon/integrations/seleniumWrapper/tests/test_user_agent.py @@ -0,0 +1,25 @@ +import unittest + +from automon.integrations.seleniumWrapper.user_agents import SeleniumUserAgentBuilder + + +class MyTestCase(unittest.TestCase): + def test_filter(self): + test = SeleniumUserAgentBuilder() + self.assertTrue(test.filter_agent('applewebkit')) + self.assertTrue(test.filter_agent('AppleWebKit', case_sensitive=True)) + + self.assertFalse(test.filter_agent('xxxxx')) + self.assertFalse(test.filter_agent('xxxxx', case_sensitive=True)) + + def test_random(self): + test = SeleniumUserAgentBuilder() + self.assertTrue(test.get_random_agent('applewebkit')) + self.assertTrue(test.get_random_agent('AppleWebKit', case_sensitive=True)) + + self.assertFalse(test.get_random_agent('xxxxx')) + self.assertFalse(test.get_random_agent('xxxxx', case_sensitive=True)) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/seleniumWrapper/user_agents.py b/automon/integrations/seleniumWrapper/user_agents.py new file mode 100644 index 00000000..b9939011 --- /dev/null +++ b/automon/integrations/seleniumWrapper/user_agents.py @@ -0,0 +1,80 @@ +import random + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class SeleniumUserAgentBuilder: + googlebot = [ + 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/W.X.Y.Z Safari/537.36', + ] + + top = [ + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + ] + + macox = [ + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Safari/605.1.15', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13.3; rv:112.0) Gecko/20100101 Firefox/112.0', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_3_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_3_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Vivaldi/5.7.2921.68', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_3_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48', + ] + windows = [ + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48', + 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:112.0) Gecko/20100101 Firefox/112.0', + 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Vivaldi/5.7.2921.68', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Vivaldi/5.7.2921.68', + ] + + agents = [ + + ] + agents.extend(googlebot) + agents.extend(top) + agents.extend(macox) + agents.extend(windows) + + def filter_agent(self, filter: list or str, case_sensitive: bool = False) -> list: + if isinstance(filter, str): + filter = [filter] + + filtered_agents = [] + for agent in self.agents: + if not case_sensitive: + if any(substring.lower() in agent.lower() for substring in filter): + filtered_agents.append(agent) + else: + if any(substring in agent for substring in filter): + filtered_agents.append(agent) + + return filtered_agents + + def get_random_agent(self, filter: list or str = None, **kwargs): + if filter: + filtered_agents = self.filter_agent(filter, **kwargs) + if filtered_agents: + return random.choice(filtered_agents) + else: + return '' + + return random.choice(self.agents) + + def pick_random(self, choices: list): + return random.choice(choices) + + def get_mac(self, **kwargs): + return self.get_random_agent(filter='Macintosh', **kwargs) + + def get_top(self, **kwargs): + return self.pick_random(self.top) + + def get_windows(self, **kwargs): + return self.get_random_agent(filter='Windows', **kwargs) diff --git a/automon/integrations/seleniumWrapper/webdriver_chrome.py b/automon/integrations/seleniumWrapper/webdriver_chrome.py new file mode 100644 index 00000000..64cf0406 --- /dev/null +++ b/automon/integrations/seleniumWrapper/webdriver_chrome.py @@ -0,0 +1,414 @@ +import os +import sys +import warnings +import selenium +import selenium.webdriver + +from automon import log +from automon.helpers.osWrapper.environ import environ_list + +from .config_window_size import set_window_size + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class ChromeWrapper(object): + + def __init__(self): + self._webdriver = None + self._chrome_options = selenium.webdriver.ChromeOptions() + self._chromedriver_path = environ_list('SELENIUM_CHROMEDRIVER_PATH') + self._ChromeService = None + self._window_size = set_window_size() + + def __repr__(self): + if self._webdriver: + return str(dict( + name=self.webdriver.name, + window_size=self.window_size, + browserVersion=self.browserVersion, + chromedriverVersion=self.chromedriverVersion, + chromedriver_path=self.chromedriver_path, + webdriver=self.webdriver, + )) + + return f'{__class__}' + + @property + def browserVersion(self): + if self.webdriver: + return self.webdriver.capabilities.get('browserVersion') + + @property + def chrome_options(self): + return self._chrome_options + + @property + def chrome_options_arg(self): + return self.chrome_options.arguments + + @property + def chromedriver_path(self): + for path in self._chromedriver_path: + if os.path.exists(path): + return path + + raise Exception('missing SELENIUM_CHROMEDRIVER_PATH') + + @property + def chromedriverVersion(self): + if self.webdriver: + return self.webdriver.capabilities.get('chrome').get('chromedriverVersion') + + @property + def ChromeService(self): + return self._ChromeService + + @property + def webdriver(self) -> selenium.webdriver.Chrome: + return self._webdriver + + @property + def window_size(self): + return self._window_size + + def disable_certificate_verification(self): + logger.debug(f'webdriver :: chrome :: add_argument :: --ignore-certificate-errors') + logger.warning('Certificates are not verified') + self.chrome_options.add_argument('--ignore-certificate-errors') + return self + + def disable_extensions(self): + logger.debug(f'webdriver :: chrome :: add_argument :: --disable-extensions') + self.chrome_options.add_argument("--disable-extensions") + return self + + def disable_infobars(self): + logger.debug(f'webdriver :: chrome :: add_argument :: --disable-infobars') + self.chrome_options.add_argument("--disable-infobars") + return self + + def disable_notifications(self): + """Pass the argument 1 to allow and 2 to block + + """ + self.chrome_options.add_experimental_option( + "prefs", {"profile.default_content_setting_values.notifications": 2} + ) + + logger.debug(str(dict( + add_experimental_option=("prefs", {"profile.default_content_setting_values.notifications": 2}) + ))) + return self + + def disable_sandbox(self): + logger.debug(f'webdriver :: chrome :: add_argument :: --no-sandbox') + self.chrome_options.add_argument('--no-sandbox') + return self + + def disable_shm(self): + logger.warning('Disabled shm will use disk I/O, and will be slow') + logger.debug(f'webdriver :: chrome :: add_argument :: --disable-dev-shm-usage') + self.chrome_options.add_argument('--disable-dev-shm-usage') + return self + + def download_chromedriver(self): + versions = 'https://googlechromelabs.github.io/chrome-for-testing/latest-versions-per-milestone-with-downloads.json' + raise + + def enable_bigshm(self): + logger.warning('Big shm not yet implemented') + return self + + def enable_defaults(self): + self.enable_maximized() + self.enable_logging() + return self + + def enable_fullscreen(self): + logger.debug(f'webdriver :: chrome :: add_argument :: --start-fullscreen') + self.chrome_options.add_argument("--start-fullscreen") + return self + + def enable_headless(self): + logger.debug(f'webdriver :: chrome :: add_argument :: headless') + self.chrome_options.add_argument('headless') + return self + + def enable_logging(self): + logger.debug(f'webdriver :: chrome :: set_capability :: "goog:loggingPrefs", {{"performance": "ALL"}}') + self.chrome_options.set_capability('goog:loggingPrefs', {'performance': 'ALL'}) + return self + + def enable_notifications(self): + """Pass the argument 1 to allow and 2 to block + + """ + self.chrome_options.add_experimental_option( + "prefs", {"profile.default_content_setting_values.notifications": 1} + ) + logger.debug(str(dict( + add_experimental_option=("prefs", {"profile.default_content_setting_values.notifications": 1}) + ))) + return self + + def enable_maximized(self): + logger.debug(f'webdriver :: chrome :: add_argument :: --start-maximized') + self.chrome_options.add_argument('--start-maximized') + return self + + def enable_translate(self, native_language: str = 'en'): + prefs = { + "translate_whitelists": {"your native language": native_language}, + "translate": {"enabled": "True"} + } + self.chrome_options.add_experimental_option( + name="prefs", + value=prefs, + ) + + logger.debug(str(dict( + add_experimental_option=dict( + name="prefs", + value=prefs, + ) + ))) + return self + + async def close(self): + """close + + """ + result = self.webdriver.close() + logger.info(f'{result}') + return result + + def in_docker(self): + """Chrome best used with docker + + """ + self.enable_defaults() + self.enable_headless() + self.disable_sandbox() + self.disable_infobars() + self.disable_extensions() + self.disable_notifications() + return self + + def in_headless(self): + """alias to headless sandboxed + + """ + return self.in_headless_sandboxed() + + def in_headless_sandboxed(self): + """Headless Chrome with sandbox enabled + + """ + logger.warning( + 'Docker does not support sandbox option. ' + 'Default shm size is 64m, which will cause chrome driver to crash.' + ) + + self.enable_defaults() + self.enable_headless() + return self + + def in_headless_sandbox_disabled(self): + """Headless Chrome with sandbox disabled + + """ + logger.warning('Default shm size is 64m, which will cause chrome driver to crash.') + + self.enable_defaults() + self.enable_headless() + self.disable_sandbox() + return self + + def in_headless_sandbox_disabled_certificate_unverified(self): + """Headless Chrome with sandbox disabled with no certificate verification + + """ + logger.warning('Default shm size is 64m, which will cause chrome driver to crash.') + + self.enable_defaults() + self.enable_headless() + self.disable_sandbox() + self.disable_certificate_verification() + return self + + def in_headless_sandbox_disabled_shm_disabled(self): + """Headless Chrome with sandbox disabled + + """ + self.enable_defaults() + self.enable_headless() + self.disable_sandbox() + self.disable_shm() + return self + + def in_headless_sandbox_disabled_bigshm(self): + """Headless Chrome with sandbox disabled + + """ + logger.warning('Larger shm option is not implemented') + + self.enable_defaults() + self.enable_headless() + self.enable_bigshm() + self.disable_sandbox() + return self + + def in_remote_driver(self, host: str = '127.0.0.1', port: str = '4444', executor_path: str = '/wd/hub'): + """Remote Selenium + + """ + logger.info( + f'Remote WebDriver Hub URL: http://{host}:{port}{executor_path}/static/resource/hub.html') + + selenium.webdriver.Remote( + command_executor=f'http://{host}:{port}{executor_path}', + desired_capabilities=selenium.webdriver.common.desired_capabilities.DesiredCapabilities.CHROME + ) + return self + + def in_sandbox(self): + """Chrome with sandbox enabled + + """ + logger.warning( + 'Docker does not support sandbox option. ' + 'Default shm size is 64m, which will cause chrome driver to crash.' + ) + + self.enable_defaults() + return self + + def in_sandbox_disabled(self): + """Chrome with sandbox disabled + + """ + logger.warning('Default shm size is 64m, which will cause chrome driver to crash.') + + self.enable_defaults() + self.disable_sandbox() + return self + + async def run(self) -> bool: + try: + self.update_paths(self.chromedriver_path) + + if self.chromedriver_path: + self._ChromeService = selenium.webdriver.ChromeService( + executable_path=self.chromedriver_path + ) + + logger.debug(f'webdriver :: chrome :: run :: {self.ChromeService=}') + + self._webdriver = selenium.webdriver.Chrome( + service=self.ChromeService, + options=self.chrome_options + ) + logger.debug(f'webdriver :: chrome :: run :: {self=}') + + logger.info(f'webdriver :: chrome :: run :: done') + return True + + self._webdriver = selenium.webdriver.Chrome(options=self.chrome_options) + logger.info(f'{self}') + + return True + except Exception as exception: + raise Exception(f'webdriver :: chrome :: run :: failed :: {exception}') + + async def set_chromedriver(self, chromedriver_path: str): + logger.debug(f'{chromedriver_path}') + self._chromedriver_path.append(chromedriver_path) + self.update_paths(chromedriver_path) + return self + + def set_locale(self, locale: str = 'en'): + logger.debug(f'webdriver :: chrome :: add_argument :: "--lang={locale}"') + self.chrome_options.add_argument(f"--lang={locale}") + return self + + def set_locale_experimental(self, locale: str = 'en-US'): + self.chrome_options.add_experimental_option( + name='prefs', + value={'intl.accept_languages': locale} + ) + + logger.debug(str(dict( + add_experimental_option=dict( + name='prefs', + value={'intl.accept_languages': locale} + ) + ))) + return self + + def set_user_agent(self, user_agent: str): + logger.debug(f'webdriver :: chrome :: add_argument :: f"user-agent={user_agent}"') + self.chrome_options.add_argument(f"user-agent={user_agent}") + return self + + def set_window_size(self, *args, **kwargs): + """has to be set after setting webdriver""" + logger.debug(f'webdriver :: chrome :: set_window_size :: {args=} :: {kwargs=}') + self._window_size = set_window_size(*args, **kwargs) + width, height = self.window_size + self.webdriver.set_window_size(width=width, height=height) + logger.info(f'webdriver :: chrome :: set_window_size :: {width=} {height=}') + return self + + async def start(self): + """alias to run + + """ + return self.run() + + async def stop_client(self): + """stop client + + """ + result = self.webdriver.stop_client() + logger.info(f'{result}') + return result + + def update_paths(self, path: str): + if path and os.path.exists(path): + if path not in os.getenv('PATH'): + if sys.platform == 'win32': + os.environ['PATH'] = f"{os.getenv('PATH')};{path}" + else: + os.environ['PATH'] = f"{os.getenv('PATH')}:{path}" + + # logger.debug(f'update_paths :: {path=} :: {os.environ['PATH']}') + logger.debug(f'update_paths :: {path}') + + logger.info(f'update_paths :: done') + return True + + logger.error(f'update_paths :: failed :: {path} not found') + return False + + async def quit(self): + """quit + + """ + result = self.webdriver.quit() + logger.info(f'{result}') + return result + + async def quit_gracefully(self): + """gracefully quit webdriver + + """ + try: + await self.close() + await self.quit() + await self.stop_client() + except Exception as error: + logger.error(f'failed to gracefully quit. {error}') + return False + return True diff --git a/automon/integrations/sentryio/client.py b/automon/integrations/sentryio/client.py index 6e0626ad..61afbbe8 100644 --- a/automon/integrations/sentryio/client.py +++ b/automon/integrations/sentryio/client.py @@ -23,8 +23,6 @@ def __init__(self, dsn: str = None, config: SentryConfig = None, *args, **kwargs server_name=self.config.server_name, in_app_include=self.config.in_app_include, in_app_exclude=self.config.in_app_exclude, - request_bodies=self.config.request_bodies, - with_locals=self.config.with_locals, ca_certs=self.config.ca_certs, integrations=self.config.integrations, default_integrations=self.config.default_integrations, @@ -42,20 +40,19 @@ def __init__(self, dsn: str = None, config: SentryConfig = None, *args, **kwargs def __repr__(self): return f'{self.__dict__}' - def isConnected(self): - if self.config.dsn: + async def isConnected(self): + if await self.config.is_ready(): return True - return False - def setLevel(self, level): + async def setLevel(self, level): return self.config.setLevel(level) - def capture_exception(self, exception): + async def capture_exception(self, exception): if self.isConnected(): return _capture_exception(exception) return False - def capture_event(self, message: str, level): + async def capture_event(self, message: str, level): if self.isConnected(): return _capture_event(dict( message=message, @@ -63,30 +60,30 @@ def capture_event(self, message: str, level): )) return False - def capture_message(self, message): - if self.isConnected(): + async def capture_message(self, message): + if await self.isConnected(): return _capture_message(message) return False - def error(self, msg: str): - self.setLevel('error') - return self.capture_message(f'{msg}') + async def error(self, msg: str): + await self.setLevel('error') + return await self.capture_message(f'{msg}') - def warning(self, msg: str): - self.setLevel('warning') - return self.capture_message(f'{msg}') + async def warning(self, msg: str): + await self.setLevel('warning') + return await self.capture_message(f'{msg}') - def warn(self, msg: str): + async def warn(self, msg: str): return self.warning(msg=msg) - def info(self, msg: str): - self.setLevel('info') - return self.capture_message(f'{msg}') + async def info(self, msg: str): + await self.setLevel('info') + return await self.capture_message(f'{msg}') - def debug(self, msg: str): - self.setLevel('debug') - return self.capture_message(f'{msg}') + async def debug(self, msg: str): + await self.setLevel('debug') + return await self.capture_message(f'{msg}') - def critical(self, msg: str): - self.setLevel('critical') - return self.capture_message(f'{msg}') + async def critical(self, msg: str): + await self.setLevel('critical') + return await self.capture_message(f'{msg}') diff --git a/automon/integrations/sentryio/config.py b/automon/integrations/sentryio/config.py index 3f5df6cd..e683302c 100644 --- a/automon/integrations/sentryio/config.py +++ b/automon/integrations/sentryio/config.py @@ -1,22 +1,24 @@ -from sentry_sdk import set_level +import sentry_sdk -from automon.helpers.os import environ +from automon.helpers.osWrapper import environ class SentryConfig(object): - def __init__(self, dsn: str = None, - environment: str = None, - release: str = None, - debug: bool = False, - sample_rate: float = None, - request_bodies: str = None, - level: str = None): + def __init__( + self, dsn: str = None, + environment: str = None, + release: str = None, + debug: bool = False, + sample_rate: float = None, + request_bodies: str = None, + level: str = None + ): self.SENTRY_DSN = dsn or environ('SENTRY_DSN') self.SENTRY_ENVIRONMENT = environment or environ('SENTRY_ENVIRONMENT') self.SENTRY_RELEASE = release or environ('SENTRY_RELEASE') self.level = level or 'debug' - set_level(self.level) + sentry_sdk.set_level(self.level) # common options self.dsn = self.SENTRY_DSN @@ -30,7 +32,9 @@ def __init__(self, dsn: str = None, self.server_name = None self.in_app_include = None self.in_app_exclude = None + # depreciated self.request_bodies = request_bodies or 'always' + # depreciated self.with_locals = None self.ca_certs = None @@ -55,6 +59,10 @@ def __init__(self, dsn: str = None, def __repr__(self): return f'{self.__dict__}' - def setLevel(self, level): + async def is_ready(self): + if self.dsn: + return True + + async def setLevel(self, level): self.level = level - return set_level(self.level) + return sentry_sdk.set_level(self.level) diff --git a/automon/integrations/sentryio/tests/__init__.py b/automon/integrations/sentryio/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/sentryio/tests/test_sentryio.py b/automon/integrations/sentryio/tests/test_sentryio.py new file mode 100644 index 00000000..79522e64 --- /dev/null +++ b/automon/integrations/sentryio/tests/test_sentryio.py @@ -0,0 +1,22 @@ +import unittest +import asyncio + +from datetime import datetime + +from automon import log +from automon.integrations.sentryio import SentryClient +from automon.integrations.geoip import Geoip + +s = SentryClient() + + +class SentryClientTest(unittest.TestCase): + async def test_sentry(self): + if await s.isConnected(): + self.assertTrue(asyncio.run(s.capture_exception(Exception(f'test capture_exception')))) + self.assertTrue(asyncio.run(s.capture_message(f'test capture_message'))) + # self.assertTrue(asyncio.run(s.capture_event('test capture_event', 'warning'))) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/sentryio/tests/test_sentryio_callback.py b/automon/integrations/sentryio/tests/test_sentryio_callback.py new file mode 100644 index 00000000..6c176957 --- /dev/null +++ b/automon/integrations/sentryio/tests/test_sentryio_callback.py @@ -0,0 +1,23 @@ +import unittest +import asyncio + +from automon import log +from automon.integrations.sentryio.client import SentryClient + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) +sentry = SentryClient() + + +class CallbackTest(unittest.TestCase): + + async def test_sentry(self): + self.assertIsNone(logger.info('test')) + self.assertIsNone(logger.debug('test')) + self.assertIsNone(logger.error('test')) + self.assertIsNone(logger.warning('test')) + self.assertIsNone(logger.critical('test')) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/shodan/__init__.py b/automon/integrations/shodan/__init__.py index 7b96ac2a..a139f82e 100644 --- a/automon/integrations/shodan/__init__.py +++ b/automon/integrations/shodan/__init__.py @@ -1,19 +1,19 @@ import os -from automon.log import Logging +from automon import log -log = Logging(__name__, Logging.ERROR) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) class ShodanConfig: token = os.getenv('SHODAN_API') def __init__(self): - self._log = Logging(ShodanConfig.__name__, Logging.ERROR) self.token = os.getenv('SHODAN_API') if not self.token: - self._log.error(f'Missing SHODAN_API') + logger.error(f'Missing SHODAN_API') class Shodan: diff --git a/automon/integrations/shodan/tests/__init__.py b/automon/integrations/shodan/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/test_shodan.py b/automon/integrations/shodan/tests/test_shodan.py similarity index 100% rename from automon/tests/integrations/test_shodan.py rename to automon/integrations/shodan/tests/test_shodan.py diff --git a/automon/integrations/slack/__init__.py b/automon/integrations/slackWrapper/__init__.py similarity index 100% rename from automon/integrations/slack/__init__.py rename to automon/integrations/slackWrapper/__init__.py diff --git a/automon/integrations/slack/bots.py b/automon/integrations/slackWrapper/bots.py similarity index 100% rename from automon/integrations/slack/bots.py rename to automon/integrations/slackWrapper/bots.py diff --git a/automon/integrations/slack/client.py b/automon/integrations/slackWrapper/client.py similarity index 84% rename from automon/integrations/slack/client.py rename to automon/integrations/slackWrapper/client.py index ce486376..e742f477 100644 --- a/automon/integrations/slack/client.py +++ b/automon/integrations/slackWrapper/client.py @@ -1,12 +1,15 @@ import os import slack -from automon.log import Logging +from automon import log from .config import SlackConfig from .bots import BotInfo from .error import SlackError +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) + class SlackClient(SlackConfig): @@ -19,8 +22,6 @@ def __init__(self, token: str = None, """Slack client """ - self._log = Logging(SlackClient.__name__, Logging.ERROR) - self.config = config or SlackConfig(token=token, username=username, channel=channel) self.client = slack.WebClient(token=self.config.token) @@ -43,13 +44,12 @@ def _get_bot_info(self): try: name = BotInfo(self.client.bots_info()).name - self._log.debug(f'Bot name: {name}') + logger.debug(f'Bot name: {name}') return name except Exception as e: error = SlackError(e) - self._log.error( - f'''[{self._get_bot_info.__name__}]\tCouldn't get bot name, missing permission: {error.needed}''', - enable_traceback=False) + logger.error( + f'''[{self._get_bot_info.__name__}]\tCouldn't get bot name, missing permission: {error.needed}''') return '' return '' @@ -63,7 +63,7 @@ def chat_postMessage(self, channel: str, text: str) -> slack.WebClient.chat_post return SyntaxError msg = f'{channel} @{self.username}: {text}' - self._log.debug(msg) + logger.debug(msg) try: response = self.client.chat_postMessage( @@ -72,7 +72,7 @@ def chat_postMessage(self, channel: str, text: str) -> slack.WebClient.chat_post assert response["ok"] return response except Exception as e: - self._log.error(e, enable_traceback=False) + logger.error(e) return False @@ -96,8 +96,8 @@ def files_upload(self, file, filename=None): # check if file exists if not os.path.isfile(file): - self._log.error(f'File not found: {file}') - self._log.error(f'Working dir: {os.getcwd()}') + logger.error(f'File not found: {file}') + logger.error(f'Working dir: {os.getcwd()}') return False # get filename @@ -116,6 +116,6 @@ def files_upload(self, file, filename=None): file=file, filename=filename, title=title, username=self.username, channels=self.channel) assert response["ok"] - self._log.debug(f'File uploaded: {file} ({file_size}B) ({self.username}') + logger.debug(f'File uploaded: {file} ({file_size}B) ({self.username}') return response diff --git a/automon/integrations/slack/clientAsync.py b/automon/integrations/slackWrapper/clientAsync.py similarity index 83% rename from automon/integrations/slack/clientAsync.py rename to automon/integrations/slackWrapper/clientAsync.py index f035c8a5..2ebf98bb 100644 --- a/automon/integrations/slack/clientAsync.py +++ b/automon/integrations/slackWrapper/clientAsync.py @@ -3,13 +3,16 @@ import random import asyncio -from automon.log import Logging -from automon.helpers.asyncio_ import AsyncStarter +from automon import log +from automon.integrations.nest_asyncioWrapper import AsyncStarter from .config import ConfigSlack from .bots import BotInfo from .error import SlackError +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) + class SlackAsyncClient(ConfigSlack): @@ -18,8 +21,6 @@ def __init__(self, token: str = ConfigSlack.slack_token, username: str = '', """Slack Async client """ - self._log = Logging(SlackAsyncClient.__name__, Logging.ERROR) - self.token = ConfigSlack.slack_token or token self.client = slack.WebClient(token=token) @@ -49,13 +50,12 @@ def _get_bot_info(self): try: name = BotInfo(self.client.bots_info()).name - self._log.debug(f'Bot name: {name}') + logger.debug(f'Bot name: {name}') return name except Exception as e: error = SlackError(e) - self._log.error( - f'''[{self._get_bot_info.__name__}]\tCouldn't get bot name, missing permission: {error.needed}''', - enable_traceback=False) + logger.error( + f'''[{self._get_bot_info.__name__}]\tCouldn't get bot name, missing permission: {error.needed}''') return '' return '' @@ -98,8 +98,8 @@ def files_upload(self, file, filename=None): # check if file exists if not os.path.isfile(file): - self._log.error(f'File not found: {file}') - self._log.error(f'Working dir: {os.getcwd()}') + logger.error(f'File not found: {file}') + logger.error(f'Working dir: {os.getcwd()}') return False # get filename @@ -119,7 +119,7 @@ def files_upload(self, file, filename=None): assert response["ok"] - self._log.debug(f'File uploaded: {file} ({file_size}B) ({self.username}') + logger.debug(f'File uploaded: {file} ({file_size}B) ({self.username}') return response @@ -138,7 +138,7 @@ async def _consumer(self): while self.connected: try: - self._log.debug(msg) + logger.debug(msg) response = self.client.chat_postMessage( text=text, channel=channel, username=self.username, icon_emoji=self.icon_emoji, icon_url=self.icon_url) @@ -149,10 +149,10 @@ async def _consumer(self): await asyncio.sleep(random.choice(range(2))) else: sleep = random.choice(range(4)) - self._log.debug(f'sleeping {sleep}, queue size is {self.queue.qsize()}') + logger.debug(f'sleeping {sleep}, queue size is {self.queue.qsize()}') await asyncio.sleep(sleep) - self._log.debug(f'Burst: {burst}, Retry: {retry}, Queue {self.queue.qsize()}') + logger.debug(f'Burst: {burst}, Retry: {retry}, Queue {self.queue.qsize()}') burst += 1 retry = 0 @@ -165,7 +165,6 @@ async def _consumer(self): retry += 1 burst_max = burst error = SlackError(e) - self._log.error( - f'{self._consumer.__name__}\t{error.error}\t{msg}\tRetry: {retry}, Burst max: {burst_max}', - enable_traceback=False) + logger.error( + f'{self._consumer.__name__}\t{error.error}\t{msg}\tRetry: {retry}, Burst max: {burst_max}') burst = 0 diff --git a/automon/integrations/slack/config.py b/automon/integrations/slackWrapper/config.py similarity index 91% rename from automon/integrations/slack/config.py rename to automon/integrations/slackWrapper/config.py index 6745f9b9..6664ec13 100644 --- a/automon/integrations/slack/config.py +++ b/automon/integrations/slackWrapper/config.py @@ -1,8 +1,9 @@ import os -from automon.log import Logging +from automon import log -log = Logging(name=__name__, level=Logging.ERROR) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) class SlackConfig(object): @@ -31,7 +32,7 @@ def __init__(self, username=None, self.SLACK_TEST_CHANNEL = os.getenv('SLACK_TEST_CHANNEL') or '' if not self.token: - log.warn(f'missing SLACK_TOKEN') + logger.warning(f'missing SLACK_TOKEN') class ConfigSlack: @@ -52,7 +53,7 @@ class ConfigSlack: SLACK_TEST_CHANNEL = os.getenv('SLACK_TEST_CHANNEL') or '' if not slack_token: - log.warn(f'missing SLACK_TOKEN') + logger.warning(f'missing SLACK_TOKEN') def __init__(self, slack_name: str = ''): self.slack_name = os.getenv('SLACK_USER') or slack_name or '' diff --git a/automon/integrations/slack/error.py b/automon/integrations/slackWrapper/error.py similarity index 90% rename from automon/integrations/slack/error.py rename to automon/integrations/slackWrapper/error.py index c29cee39..4ec41488 100644 --- a/automon/integrations/slack/error.py +++ b/automon/integrations/slackWrapper/error.py @@ -1,4 +1,7 @@ -from automon.log import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) class SlackError: @@ -13,7 +16,6 @@ def __init__(self, error: Exception): } """ - self._log = Logging(name=SlackError.__name__, level=Logging.ERROR) self._error = error self._reason = getattr(self._error, 'reason', '') @@ -48,7 +50,7 @@ def error(self): if self._reason: return self.strerror - self._log.warn(f'{NotImplemented}') + logger.warning(f'{NotImplemented}') return f'{self._error}' def needed(self): @@ -58,7 +60,7 @@ def needed(self): if self._reason: return self.strerror - self._log.warn(f'{NotImplemented}') + logger.warning(f'{NotImplemented}') return f'{self._error}' def __repr__(self): @@ -68,7 +70,7 @@ def __repr__(self): if self._reason: return f'{self.strerror}' - self._log.warn(f'{NotImplemented}') + logger.warning(f'{NotImplemented}') return f'{self._error}' def __str__(self): diff --git a/automon/integrations/slack/slack_formatting.py b/automon/integrations/slackWrapper/slack_formatting.py similarity index 100% rename from automon/integrations/slack/slack_formatting.py rename to automon/integrations/slackWrapper/slack_formatting.py diff --git a/automon/integrations/slack/slack_logger.py b/automon/integrations/slackWrapper/slack_logger.py similarity index 95% rename from automon/integrations/slack/slack_logger.py rename to automon/integrations/slackWrapper/slack_logger.py index 4e793cf5..11daf360 100644 --- a/automon/integrations/slack/slack_logger.py +++ b/automon/integrations/slackWrapper/slack_logger.py @@ -4,11 +4,15 @@ from json import dumps from asyncio import sleep -from automon.helpers.asyncio_ import AsyncStarter -from automon.integrations.slack.client import SlackClient +from automon.integrations.nest_asyncioWrapper import AsyncStarter +from automon.integrations.slackWrapper.client import SlackClient -from automon.integrations.slack.slack_formatting import Emoji, Chat, Format -from automon.log import Logging, INFO, ERROR, WARN, CRITICAL, DEBUG +from automon.integrations.slackWrapper.slack_formatting import Emoji, Chat, Format +from automon import log +from automon.log import INFO, ERROR, WARN, CRITICAL, DEBUG, TEST + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class AsyncSlackLogging(SlackClient): @@ -156,7 +160,7 @@ async def _producer(self): await self._error(channel, text) elif level is CRITICAL: await self._critical(channel, text) - elif level == Logging.TEST: + elif level == TEST: await self._test(channel, text) if self._stop: @@ -199,7 +203,7 @@ def critical(self, msg: str = None) -> asyncio.tasks: asyncio.run(self._put_queue(CRITICAL, self.critical_channel, msg)) def test(self, msg: str or list or dict or tuple) -> asyncio.tasks: - asyncio.run(self._put_queue(Logging.TEST, self.test_channel, msg)) + asyncio.run(self._put_queue(TEST, self.test_channel, msg)) async def _warn(self, channel: str, msg: str or list or dict or tuple): self.set_slack_config(WARN) @@ -249,7 +253,7 @@ async def _critical(self, channel: str, msg: str or list or dict or tuple = None # self.set_slack_config() async def _test(self, channel: str, msg: str): - self.set_slack_config(Logging.TEST) + self.set_slack_config(TEST) await self.slack.chat_postMessage(channel, self._msg(msg)) # self.set_slack_config() @@ -287,7 +291,7 @@ def set_slack_config(self, level=None): self.slack.icon_url = self._critical_url self.slack.channel = self.critical_channel - elif level == Logging.TEST: + elif level == TEST: self.slack.username = f'{self.slack.username}{self._test_suffix}' self.slack.icon_emoji = self._test_icon self.slack.icon_url = self._test_url diff --git a/automon/integrations/slackWrapper/tests/__init__.py b/automon/integrations/slackWrapper/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/test_slack.py b/automon/integrations/slackWrapper/tests/test_slack.py similarity index 88% rename from automon/tests/integrations/test_slack.py rename to automon/integrations/slackWrapper/tests/test_slack.py index 945b925e..73dd022f 100644 --- a/automon/tests/integrations/test_slack.py +++ b/automon/integrations/slackWrapper/tests/test_slack.py @@ -1,10 +1,10 @@ import unittest -from automon.integrations.slack.client import SlackClient -from automon.integrations.slack.error import SlackError -from automon.integrations.slack.bots import BotInfo -from automon.integrations.slack.config import SlackConfig -from automon.integrations.slack.slack_formatting import Format, Chat, Emoji +from automon.integrations.slackWrapper.client import SlackClient +from automon.integrations.slackWrapper.error import SlackError +from automon.integrations.slackWrapper.bots import BotInfo +from automon.integrations.slackWrapper.config import SlackConfig +from automon.integrations.slackWrapper.slack_formatting import Format, Chat, Emoji class ConfigTest(unittest.TestCase): diff --git a/automon/integrations/snmp/generate_maps.py b/automon/integrations/snmp/generate_maps.py index b58a7ec5..74e6d223 100644 --- a/automon/integrations/snmp/generate_maps.py +++ b/automon/integrations/snmp/generate_maps.py @@ -6,10 +6,11 @@ import xmltodict import subprocess -from automon.integrations.slack.slack_formatting import Chat -from automon.log import Logging +from automon.integrations.slackWrapper.slack_formatting import Chat +from automon import log -log = Logging(__name__, level=Logging.INFO) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) class SmidumpFormat: @@ -92,10 +93,10 @@ def __init__(self, device: str, path: str): self.filename = os.path.split(path)[-1] if os.path.isfile(path): - log.debug(f'found MIB {path}') + logger.debug(f'found MIB {path}') else: msg = f'{MibFile} {path} not found' - log.error(msg) + logger.error(msg) raise def __str__(self): @@ -164,14 +165,14 @@ def __init__(self): def check(self) -> True or False: if os.system(f'which {self.requires}') == 0: - log.debug(f'{self.requires} OK') + logger.debug(f'{self.requires} OK') return True else: msg = ( f'missing {self.requires}, ' f'please install {self.requires}, ' f'`apt install smitools`') - log.error(msg) + logger.error(msg) return False @@ -317,7 +318,7 @@ def __init__(self, path: str, device: str = None): mib = MibFile(device, path_to_mib_file) self.mibs.append(mib) else: - log.error(f'not found MIB {path_to_mib_file}') + logger.error(f'not found MIB {path_to_mib_file}') def _mib_generator(self) -> MibFile: for mib in self.mibs: @@ -380,7 +381,7 @@ def _list_walk(self, object: list) -> list: if isinstance(item, dict): tuple_oids.extend(self._dict_walk(item)) else: - log.critical(f'{self._list_walk} {NotImplemented}') + logger.critical(f'{self._list_walk} {NotImplemented}') return tuple_oids @@ -399,7 +400,7 @@ def _dict_walk(self, object: dict) -> list: elif isinstance(value, list): tuple_oids.extend(self._list_walk(value)) elif not isinstance(value, str) and value is not None: - log.critical(f'{self._dict_walk} {NotImplemented}') + logger.critical(f'{self._dict_walk} {NotImplemented}') oid_and_description = self._create_oid_tuple(object) @@ -417,7 +418,7 @@ def _xml_walk(self, xml: dict) -> list: elif isinstance(xml, list): tuple_oids.extend(self._list_walk(xml)) else: - log.critical(f'{self._xml_walk} {NotImplemented}') + logger.critical(f'{self._xml_walk} {NotImplemented}') return tuple_oids @@ -430,7 +431,7 @@ def generate_prometheus_config(self) -> open: device = mibmap.device list_of_oid_tuples = self._xml_walk(xml) - # log.debug(list_of_oid_tuples) + # logger.debug(list_of_oid_tuples) if not list_of_oid_tuples: continue @@ -470,7 +471,7 @@ def smidump_run(cmd: str, create_file: bool = False) -> None: data_err = run.stderr.decode() if data_err: - log.error(f'{data_err}') + logger.error(f'{data_err}') map_ = MibMap(mib, data) self.maps.append(map_) @@ -478,7 +479,7 @@ def smidump_run(cmd: str, create_file: bool = False) -> None: if create_file: with open(map_.path, 'wb') as f: f.write(map_._data) - log.debug(f'Wrote {map_.path} ({map_.len} B)') + logger.debug(f'Wrote {map_.path} ({map_.len} B)') return True @@ -502,7 +503,7 @@ def smidump_run(cmd: str, create_file: bool = False) -> None: cmd = f'smidump {opts} {preload} {mib}' - log.debug(cmd) + logger.debug(cmd) # smidump_run(cmd) @@ -516,7 +517,7 @@ def smidump_run(cmd: str, create_file: bool = False) -> None: cmd = f'smidump {opts} {preload} {mib}' # cmd = f'{self.smidump} {self.opts} {mib}' - log.debug(cmd) + logger.debug(cmd) # smidump_run(cmd) @@ -524,4 +525,4 @@ def smidump_run(cmd: str, create_file: bool = False) -> None: # m.generate_map(SmidumpFormat().xml) # yml = m.generate_prometheus_config() # -# log.info('Done') +# logger.info('Done') diff --git a/automon/integrations/splunk/client.py b/automon/integrations/splunk/client.py index fc31ad65..ce4226ed 100644 --- a/automon/integrations/splunk/client.py +++ b/automon/integrations/splunk/client.py @@ -4,11 +4,12 @@ import splunklib.results import splunklib.client -from automon.log import Logging +from automon import log from automon.integrations.splunk.config import SplunkConfig from automon.integrations.splunk.helpers import Job, Application -log = Logging(name='SplunkClient', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class SplunkRestClient: @@ -57,7 +58,7 @@ def wrapped(self, *args, **kwargs): self.client return func(self, *args, **kwargs) except Exception as e: - log.error(f'not connected. {e}', enable_traceback=False) + logger.error(f'not connected. {e}') return False return wrapped diff --git a/automon/integrations/splunk/config.py b/automon/integrations/splunk/config.py index 592ba48e..6c63543f 100644 --- a/automon/integrations/splunk/config.py +++ b/automon/integrations/splunk/config.py @@ -1,9 +1,10 @@ import splunklib.binding as binding -from automon.log import Logging +from automon import log from automon.helpers import environ -log = Logging(name='SplunkConfig', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class SplunkConfig: diff --git a/automon/integrations/splunk/helpers.py b/automon/integrations/splunk/helpers.py index 37d6f1ad..85671105 100644 --- a/automon/integrations/splunk/helpers.py +++ b/automon/integrations/splunk/helpers.py @@ -1,14 +1,14 @@ import splunklib.client as client -from automon.log import Logging +from automon import log -log = Logging(name=__name__, level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class JobError: def __init__(self, job: client.Job): - self._log = Logging(JobError.__name__, level=Logging.DEBUG) self._job = job self.messages = job.content['messages'] @@ -16,16 +16,15 @@ def __init__(self, job: client.Job): self.fatal = self.messages['fatal'] self.error = self.messages['error'] - self._log.critical(self.fatal) - self._log.error(self.error) + logger.critical(self.fatal) + logger.error(self.error) except Exception as e: - self._log.error(e) + logger.error(e) class Job: def __init__(self, job: client.Job): - self._log = Logging(Job.__name__, level=Logging.DEBUG) self._job = job try: @@ -47,7 +46,7 @@ def __init__(self, job: client.Job): self.error = JobError(job) except Exception as e: - self._log.error(e) + logger.error(e) def is_ready(self): return self._job.is_ready() diff --git a/automon/integrations/splunk/tests/__init__.py b/automon/integrations/splunk/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/splunk/test_splunk_client.py b/automon/integrations/splunk/tests/test_splunk_client.py similarity index 100% rename from automon/tests/integrations/splunk/test_splunk_client.py rename to automon/integrations/splunk/tests/test_splunk_client.py diff --git a/automon/tests/integrations/splunk/test_splunk_config.py b/automon/integrations/splunk/tests/test_splunk_config.py similarity index 100% rename from automon/tests/integrations/splunk/test_splunk_config.py rename to automon/integrations/splunk/tests/test_splunk_config.py diff --git a/automon/integrations/splunk_soar/action_run.py b/automon/integrations/splunk_soar/action_run.py new file mode 100644 index 00000000..bab47688 --- /dev/null +++ b/automon/integrations/splunk_soar/action_run.py @@ -0,0 +1,16 @@ +from automon import log + +from .datatypes import AbstractDataType + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.CRITICAL) + + +class ActionRun(AbstractDataType): + container: int = None + id: int = None + + def __repr__(self): + if self.id: + return f'{self.id}' + return f'{self.to_dict()}' diff --git a/automon/integrations/splunk_soar/artifact.py b/automon/integrations/splunk_soar/artifact.py index e8a7a441..a8ba7fcb 100644 --- a/automon/integrations/splunk_soar/artifact.py +++ b/automon/integrations/splunk_soar/artifact.py @@ -1,20 +1,17 @@ -from automon import Logging +from automon import log from .datatypes import AbstractDataType -log = Logging('Artifact', level=Logging.CRITICAL) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.CRITICAL) class Artifact(AbstractDataType): - name: str - container: int - id: int - - def __init__(self, artifact: dict = {}): - self.container = None - self.id = None - self.name = None - self.__dict__.update(artifact) + name: str = None + container: int = None + id: int = None def __repr__(self): - return self.name + if self.name: + return self.name + return f'{self.to_dict()}' diff --git a/automon/integrations/splunk_soar/asset.py b/automon/integrations/splunk_soar/asset.py index e43a88db..8cb0ad1d 100644 --- a/automon/integrations/splunk_soar/asset.py +++ b/automon/integrations/splunk_soar/asset.py @@ -1,8 +1,9 @@ -from automon import Logging +from automon import log from .datatypes import AbstractDataType -log = Logging(name='Asset', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Asset(AbstractDataType): diff --git a/automon/integrations/splunk_soar/client.py b/automon/integrations/splunk_soar/client.py index f9caba74..9b394328 100644 --- a/automon/integrations/splunk_soar/client.py +++ b/automon/integrations/splunk_soar/client.py @@ -1,19 +1,37 @@ import json +import base64 import functools from typing import Optional -from automon import Logging -from automon.integrations.requests import Requests +from automon import log +from automon.integrations.requestsWrapper import Requests -from .rest import Urls +from .action_run import ActionRun from .artifact import Artifact -from .container import Container from .config import SplunkSoarConfig -from .response import Response - -log = Logging(name='SplunkSoarClient', level=Logging.DEBUG) -Logging(name='RequestsClient', level=Logging.DEBUG) +from .container import Container +from .vault import Vault +from .rest import Urls +from .responses import ( + AppRunResults, + AppRunResponse, + CancelPlaybookResponse, + CloseContainerResponse, + CreateContainerAttachmentResponse, + CreateContainerResponse, + GenericResponse, + PlaybookRun, + Response, + RunPlaybookResponse, + UpdatePlaybookResponse, + VaultResponse +) + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + +log.logging.getLogger('RequestsClient').setLevel(log.DEBUG) class SplunkSoarClient: @@ -30,7 +48,6 @@ def __init__(self, host: str = None, self.app = None self.app_run = None self.asset = None - self.cluster_node = None self.containers = None self.playbook_run = None @@ -39,8 +56,8 @@ def __repr__(self) -> str: def _content(self) -> bytes: """get result""" - if self.client.results: - return self.client.results.content + if self.client.response: + return self.client.response.content return b'' def _content_dict(self) -> dict: @@ -53,11 +70,14 @@ def _get(self, url: str) -> bool: """send get request""" return self.client.get(url=url, headers=self.client.headers) - def _isConnected(func): + def _is_connected(func): + """wrapper for connection checking""" + @functools.wraps(func) def wrapper(self, *args, **kwargs): - if self.config.isReady(): - return func(self, *args, **kwargs) + if self.config.is_ready: + if self._get(Urls.container(page_size=1)): + return func(self, *args, **kwargs) return False return wrapper @@ -70,7 +90,36 @@ def _post(self, url: str, data: dict) -> bool: """send post request""" return self.client.post(url=url, headers=self.client.headers, data=data) - @_isConnected + @_is_connected + def close_container(self, container_id: int, **kwargs) -> Optional[CloseContainerResponse]: + """Set container status to closed""" + data = dict(status='closed') + if self._post(Urls.container(identifier=container_id, **kwargs), data=json.dumps(data)): + if self.client.response.status_code == 200: + response = CloseContainerResponse(self._content_dict()) + logger.info(f'container closed: {response}') + return response + + logger.error(msg=f'close failed. {self.client.to_dict()}') + + @_is_connected + def cancel_playbook_run( + self, + playbook_run_id: int = None, + cancel: bool = True, **kwargs) -> CancelPlaybookResponse: + """Cancel playbook run""" + data = dict(cancel=cancel) + data = json.dumps(data) + + if self._post(Urls.playbook_run(identifier=playbook_run_id, **kwargs), data=data): + if self.client.response.status_code == 200: + response = CancelPlaybookResponse(self._content_dict()) + logger.info(f'cancel playbook run: {response}') + return response + + logger.error(f'cancel failed: {playbook_run_id} {self.client.to_dict()}') + + @_is_connected def create_artifact( self, container_id, @@ -114,19 +163,19 @@ def create_artifact( ) if self._post(Urls.artifact(*args, **kwargs), data=artifact.to_json()): - if self.client.results.status_code == 200: + if self.client.response.status_code == 200: id = self.client.to_dict()['id'] - log.info(f'artifact created. {artifact} {self.client.to_dict()}') - return self.list_artifact(artifact_id=id) + logger.info(f'artifact created. {artifact} {self.client.to_dict()}') + return self.get_artifact(artifact_id=id) else: existing_artifact_id = self.client.to_dict()['existing_artifact_id'] - log.info(f'artifact exists. {artifact} {self.client.to_dict()}') - return self.list_artifact(artifact_id=existing_artifact_id) + logger.info(f'artifact exists. {artifact} {self.client.to_dict()}') + return self.get_artifact(artifact_id=existing_artifact_id) - log.error(f'create artifact. {self.client.to_dict()}', enable_traceback=False) + logger.error(f'create artifact. {self.client.to_dict()}') return False - @_isConnected + @_is_connected def create_container( self, label, @@ -188,68 +237,212 @@ def create_container( ) if self._post(Urls.container(*args, **kwargs), data=container.to_json()): - if self.client.results.status_code == 200: - id = self.client.to_dict()['id'] - log.info(f'container created. {container} {self.client.to_dict()}') - return self.get_container(container_id=id) - log.error(f'create container. {self.client.to_dict()}', enable_traceback=False) + if self.client.response.status_code == 200: + response = CreateContainerResponse(self.client.to_dict()) + logger.info(f'container created. {container} {response}') + return response + logger.error(f'create container. {self.client.to_dict()}') return False - @_isConnected + @staticmethod + def base64_encode(data: bytes, **kwargs) -> str: + encode = base64.b64encode(data, **kwargs) + decode = encode.decode() + return decode + + @_is_connected + def create_container_attachment( + self, + container_id: int, + file_name: str, + file_content: bytes, + metadata: dict = None, **kwargs) -> Optional[CreateContainerAttachmentResponse]: + """Create container attachment""" + + if metadata: + metadata = json.dumps(metadata) + + file_content = self.base64_encode(file_content) + + data = json.dumps(dict( + container_id=container_id, + file_name=file_name, + file_content=file_content, + metadata=metadata + )) + + if self._post(Urls.container_attachment(**kwargs), data=data): + response = CreateContainerAttachmentResponse(self.client.to_dict()) + logger.info(f'create attachment: {response}') + return response + + logger.error(f'create attachment failed.') + + @_is_connected + def create_vault( + self, + file_location, + container_id=None, + file_name=None, + metadata=None, + trace=False, **kwargs) -> Vault: + """Add vault object""" + + data = Vault(dict( + container=container_id, + file_location=file_location, + file_name=file_name, + metadata=metadata, + trace=trace + )) + + if self._post(Urls.vault_add(identifire=data.id, **kwargs), data=data.to_json()): + response = Vault(self._content_dict()) + logger.info(msg=f'add vault: {response}') + return response + + logger.error(msg=f'add vault failed.') + + @_is_connected def delete_container(self, container_id, *args, **kwargs): """Delete containers""" assert isinstance(container_id, int) if self._delete(Urls.container(identifier=container_id, *args, **kwargs)): - if self.client.results.status_code == 200: - log.info(f'container deleted: {container_id}') + if self.client.response.status_code == 200: + logger.info(f'container deleted: {container_id}') return True - log.error(f'delete container: {container_id}. {self.client.to_dict()}', enable_traceback=False) + logger.error(f'delete container: {container_id}. {self.client.to_dict()}') return False - def isConnected(self) -> bool: + def is_connected(self) -> bool: """check if client can connect""" - if self.config.isReady(): - if self._get(Urls.container()): - log.info(f'client connected ' - f'{self.config.host} ' - f'[{self.client.results.status_code}] ') + if self.config.is_ready: + if self._get(Urls.container(page_size=1)): + logger.info(f'client connected ' + f'{self.config.host} ' + f'[{self.client.response.status_code}] ') return True - else: - log.warn(f'client not connected') + logger.error(f'client not connected') return False - @_isConnected + @_is_connected + def filter_vault(self, filter: str, page_size: int = None, **kwargs) -> [Vault]: + """Filter for matching vault files""" + matches = [] + + for sublist in self.list_vault_generator(page_size=page_size, **kwargs): + for vault in sublist: + if filter in vault.meta.values(): + matches.append(vault) + elif filter in vault.names: + matches.append(vault) + elif filter in vault.__dict__.values(): + matches.append(vault) + + return matches + + @_is_connected + def generic_delete(self, api: str, **kwargs) -> Optional[GenericResponse]: + """Make generic delete calls""" + if self._delete(Urls.generic(api=api, **kwargs)): + response = GenericResponse(self._content_dict()) + logger.info(f'generic delete {api}: {response}') + return response + + logger.error(f'failed generic delete {api}') + + @_is_connected + def generic_get(self, api: str, **kwargs) -> Optional[GenericResponse]: + """Make generic get calls""" + if self._get(Urls.generic(api=api, **kwargs)): + response = GenericResponse(self._content_dict()) + logger.info(f'generic get {api}: {response}') + return response + + logger.error(f'failed generic get {api}') + + @_is_connected + def generic_post(self, api: str, data: dict, **kwargs) -> Optional[GenericResponse]: + """Make generic post calls""" + if self._post(Urls.generic(api=api, **kwargs), data=data): + response = GenericResponse(self._content_dict()) + logger.info(f'generic post {api}: {response}') + return response + + logger.error(f'failed generic post {api}') + + @_is_connected + def get_action_run(self, action_run_id: int = None, **kwargs) -> ActionRun: + """Get action run""" + if self._get(Urls.action_run(identifier=action_run_id, **kwargs)): + action_run = ActionRun(self._content_dict()) + logger.info(f'get action run: {action_run}') + return action_run + + logger.error(f'action run not found: {action_run_id}') + return ActionRun() + + @_is_connected def get_artifact(self, artifact_id: int = None, **kwargs) -> Artifact: - """list action run""" + """Get artifact""" if self._get(Urls.artifact(identifier=artifact_id, **kwargs)): artifact = Artifact(self._content_dict()) - log.info(f'get artifact: {artifact}') + logger.info(f'get artifact: {artifact}') return artifact - log.error(f'artifact not found: {artifact_id}', enable_traceback=False) + logger.error(f'artifact not found: {artifact_id}') return Artifact() - @_isConnected + @_is_connected def get_container(self, container_id: int = None, **kwargs) -> Container: + """Get container""" if self._get(Urls.container(identifier=container_id, **kwargs)): container = Container(self._content_dict()) - log.info(f'get container: {container}') + logger.info(f'get container: {container}') return container - log.error(f'container not found: {container_id}', enable_traceback=False) + logger.error(f'container not found: {container_id}') return Container() - @_isConnected - def list_artifact(self, artifact_id: int = None, **kwargs) -> Response: - """list action run""" - if self._get(Urls.artifact(identifier=artifact_id, **kwargs)): + @_is_connected + def get_playbook_run(self, playbook_run_id: str, **kwargs) -> Optional[PlaybookRun]: + """Get running playbook""" + if self._get(Urls.playbook_run(identifier=playbook_run_id, **kwargs)): + response = PlaybookRun(self._content_dict()) + + if response.status != 'failed': + logger.info(f'playbook run: {response}') + return response + + logger.error(f'playbook run failed: {response.message_to_dict}') + return response + + logger.error(f'playbook failed: {self.client.errors}') + + @_is_connected + def get_vault(self, vault_id: int, **kwargs) -> Optional[Vault]: + """Get vault object""" + if self._get(Urls.vault(identifier=vault_id, **kwargs)): + if self.client.response.status_code == 200: + response = Vault(self._content_dict()) + logger.info(msg=f'get vault: {response}') + return response + + logger.error(msg=f'get vault failed: {self.client.to_dict()}') + + @_is_connected + def list_artifact(self, **kwargs) -> Response: + """list artifacts""" + if self._get(Urls.artifact(**kwargs)): response = Response(self._content_dict()) + logger.info(f'list artifacts: {response.count}') return response + return Response() - @_isConnected + @_is_connected def list_action_run(self, **kwargs) -> bool: """list action run""" if self._get(Urls.action_run(**kwargs)): @@ -257,7 +450,7 @@ def list_action_run(self, **kwargs) -> bool: return True return False - @_isConnected + @_is_connected def list_app(self, **kwargs) -> bool: """list app""" if self._get(Urls.app(**kwargs)): @@ -265,29 +458,94 @@ def list_app(self, **kwargs) -> bool: return True return False - @_isConnected - def list_app_run(self, **kwargs) -> bool: + @_is_connected + def list_app_run( + self, + page: int = None, + page_size: int = None, **kwargs) -> bool: """list app run""" - if self._get(Urls.app_run(**kwargs)): - self.app_run = self._content_dict() - return True + if self._get(Urls.app_run(page=page, page_size=page_size, **kwargs)): + self.app_run = AppRunResponse(self._content_dict()) + response = AppRunResponse(self._content_dict()) + response.data = [AppRunResults(x) for x in response.data] + logger.info(f'list app runs, page: {page} page_size: {page_size}, {response.summary()}') + self.app_run = response + return response return False - @_isConnected - def list_artifacts(self, - page: int = None, - page_size: int = 1000, **kwargs) -> Response: + @_is_connected + def list_app_run_generator( + self, + page: int = 0, + page_size: int = None, + max_pages: int = None, **kwargs) -> AppRunResults or bool: + """Generator for paging through app runs""" + + page = page + + while True: + response = self.list_app_run(page=page, page_size=page_size, **kwargs) + if response.data: + app_runs = response.data + num_pages = response.num_pages + logger.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + + if page >= num_pages or page >= max_pages: + logger.info(f'list app runs finished') + return True + + yield app_runs + page += 1 + + elif response.data == []: + logger.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + logger.info(f'list app runs finished. {response}') + return True + + elif response.data is None: + logger.error(f'list app runs failed') + return False + + else: + logger.info(f'no app runs. {response}') + return True + + return False + + @_is_connected + def list_app_run_by_playbook_run( + self, + playbook_run: int, + page: int = None, + page_size: int = None, **kwargs) -> bool: + """list app run by playbook run""" + + app_runs = [] + + for app_run in self.list_app_run_generator(page=page, page_size=page_size, **kwargs): + if app_run.playbook_run == playbook_run: + app_runs.append(app_run) + + return app_runs + + @_is_connected + def list_artifacts( + self, + page: int = None, + page_size: int = 1000, **kwargs) -> Response: """list artifacts""" if self._get(Urls.artifact(page=page, page_size=page_size, **kwargs)): response = Response(self._content()) - log.info(f'list artifacts: {len(response.data)}') + logger.info(f'list artifacts: {len(response.data)}') return response return Response() - @_isConnected - def list_artifact_generator(self, - page: int = 0, - page_size: int = None, **kwargs) -> [Container]: + @_is_connected + def list_artifact_generator( + self, + page: int = 0, + page_size: int = None, + max_pages: int = None, **kwargs) -> [Container]: """Generator for paging through artifacts""" page = page @@ -297,111 +555,207 @@ def list_artifact_generator(self, if response.data: containers = [Container(x) for x in response.data] num_pages = response.num_pages - log.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + logger.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') - if page > num_pages: - log.info(f'list container finished') + if page >= num_pages or page >= max_pages: + logger.info(f'list container finished') return True yield containers page += 1 elif response.data == []: - log.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') - log.info(f'list container finished. {response}') + logger.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + logger.info(f'list container finished. {response}') return True elif response.data is None: - log.error(f'list container failed', enable_traceback=True) + logger.error(f'list container failed') return False else: - log.info(f'no containers. {response}') + logger.info(f'no containers. {response}') return True return False - @_isConnected + @_is_connected def list_asset(self, **kwargs) -> Response: """list asset""" if self._get(Urls.asset(**kwargs)): response = Response(self._content_dict()) - log.info(f'list assets: {len(response.data)}') + logger.info(f'list assets: {len(response.data)}') return response return Response() - @_isConnected - def list_containers(self, - page: int = None, - page_size: int = 1000, - *args, **kwargs) -> Response: + @_is_connected + def list_containers( + self, + page: int = None, + page_size: int = 1000, + *args, **kwargs) -> Response: """list containers""" url = Urls.container(page=page, page_size=page_size, *args, **kwargs) if self._get(url): response = Response(self._content_dict()) - log.info(f'list containers: {len(response.data)}') + logger.info(f'list containers: {len(response.data)}') return response - log.error(f'no containers', enable_traceback=False) + logger.error(f'no containers') return Response() - @_isConnected - def list_containers_generator(self, - page: int = 0, - page_size: int = None, **kwargs) -> [Container]: + @_is_connected + def list_containers_generator( + self, + page: int = 0, + page_size: int = None, + max_pages: int = None, **kwargs) -> [Container]: """Generator for paging through containers""" page = page + i = 0 while True: - response = self.list_containers(page=page, page_size=page_size, **kwargs) + if max_pages and i > max_pages: + break + + response = self.list_containers( + page=page, + page_size=page_size, **kwargs + ) + + i += 1 if response.data: containers = [Container(x) for x in response.data] num_pages = response.num_pages - log.info(f'container page {page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + logger.info(f'container page {page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') if page > num_pages: - log.info(f'list container finished') - return True + logger.info(f'list container finished') + break yield containers page += 1 elif response.data == []: - log.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') - log.info(f'list container finished. {response}') - return True + logger.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + logger.info(f'list container finished. {response}') + break elif response.data is None: - log.error(f'list container failed', enable_traceback=True) - return False + logger.error(f'list container failed') + break else: - log.info(f'no containers. {response}') - return True + logger.info(f'no containers. {response}') + break - return False + return [] - @_isConnected - def list_cluster_node(self, **kwargs) -> bool: - """list cluster node""" + @_is_connected + def list_cluster_node(self, **kwargs) -> Optional[dict]: + """List cluster node""" if self._get(Urls.cluster_node(**kwargs)): - self.cluster_node = self._content_dict() - return True - return False + cluster_node = self._content_dict() + return cluster_node + + @_is_connected + def list_vault(self, **kwargs) -> Optional[VaultResponse]: + """List vault""" + if self._get(Urls.vault(**kwargs)): + response = VaultResponse(self._content_dict()) + logger.info(msg=f'list vault: {response}') + return response - @_isConnected - def list_playbook_run(self, **kwargs) -> bool: - """list cluster node""" - if self._get(Urls.playbook_run(**kwargs)): - self.playbook_run = self._content_dict() - return True - return False + logger.error(msg=f'list vault failed.') - @_isConnected - def list_vault(self, identifier=None, **kwargs) -> bool: - """list cluster node""" - if self._get(Urls.vault(identifier=identifier, **kwargs)): - self.playbook_run = self._content_dict() - return True - return False + @_is_connected + def list_vault_generator( + self, + page: int = 0, + page_size: int = None, + max_pages: int = None, **kwargs) -> [Vault]: + """Generator for paging through vaults""" + i = 0 + + while True: + if max_pages and i >= max_pages: + break + + response = self.list_vault( + page=page, + page_size=page_size, **kwargs + ) + + i += 1 + if response.data: + vaults = [Vault(x) for x in response.data] + num_pages = response.num_pages + logger.info(f'vault page {page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + + if page > num_pages: + logger.info(f'list vault finished') + break + + yield vaults + page += 1 + + elif response.data == []: + logger.info(f'{page}/{num_pages} ({round(page / num_pages * 100, 2)}%)') + logger.info(f'list vault finished. {response}') + break + + elif response.data is None: + logger.error(f'list vault failed') + break + + else: + logger.info(f'no vaults. {response}') + break + + return [] + + @_is_connected + def update_playbook( + self, + playbook_id: int = None, + active: bool = None, + cancel_runs: bool = False, + **kwargs) -> Optional[UpdatePlaybookResponse]: + """Update playbook active state""" + data = dict( + active=active, + cancel_runs=cancel_runs + ) + data = json.dumps(data) + if self._post(Urls.playbook(identifier=playbook_id, **kwargs), data=data): + if self.client.response.status_code == 200: + response = UpdatePlaybookResponse(self._content_dict()) + logger.info(f'update playbook: {data}') + return response + + logger.error(f'update failed: {self.client.to_dict()}') + + @_is_connected + def run_playbook( + self, + container_id: int, + playbook_id: int, + scope: str = 'all', + run: bool = True, + **kwargs) -> Optional[RunPlaybookResponse]: + """Run playbook on a container""" + data = dict( + container_id=container_id, + playbook_id=playbook_id, + scope=scope, + run=run + ) + data = json.dumps(data) + if self._post(Urls.playbook_run(**kwargs), data=data): + if self.client.response.status_code == 200: + response = RunPlaybookResponse(self._content_dict()) + logger.info(f'run playbook: {data}') + return response + + logger.error(f'run failed: {self.client.to_dict()}') diff --git a/automon/integrations/splunk_soar/config.py b/automon/integrations/splunk_soar/config.py index 641cf386..0128550e 100644 --- a/automon/integrations/splunk_soar/config.py +++ b/automon/integrations/splunk_soar/config.py @@ -1,7 +1,8 @@ -from automon import Logging -from automon.helpers.os import environ +from automon import log +from automon.helpers.osWrapper import environ -log = Logging(name='SplunkSoarConfig', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class SplunkSoarConfig: @@ -19,14 +20,12 @@ def __init__(self, host: str = None, self.headers = {'ph-auth-token': self.auth_token} - if not self.host: - log.warn(f'missing SPLUNK_SOAR_HOST') - def __repr__(self): return f'{self.__dict__}' - def isReady(self) -> bool: + @property + def is_ready(self) -> bool: if self.host: return True - log.warn(f'bad config') + logger.error(f'missing SPLUNK_SOAR_HOST') return False diff --git a/automon/integrations/splunk_soar/container.py b/automon/integrations/splunk_soar/container.py index b032b3a3..5ef43d93 100644 --- a/automon/integrations/splunk_soar/container.py +++ b/automon/integrations/splunk_soar/container.py @@ -1,25 +1,20 @@ -import json import datetime -from automon import Logging +from automon import log from .datatypes import AbstractDataType -log = Logging('Container', level=Logging.CRITICAL) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.CRITICAL) class Container(AbstractDataType): - artifact_count: int - start_time: datetime - id: int - name: str - - def __init__(self, container: dict = {}): - self.artifact_count = None - self.start_time = None - self.id = None - self.name = None - self.__dict__.update(container) + artifact_count: int = None + start_time: datetime = None + id: int = None + name: str = None def __repr__(self): - return self.name + if self.name: + return f'{self.name}' + return f'{self.id}' diff --git a/automon/integrations/splunk_soar/datatypes.py b/automon/integrations/splunk_soar/datatypes.py index 84b649e2..09807f3e 100644 --- a/automon/integrations/splunk_soar/datatypes.py +++ b/automon/integrations/splunk_soar/datatypes.py @@ -3,9 +3,10 @@ from dateutil import parser -from automon import Logging +from automon import log -log = Logging('AbstractDataType', level=Logging.DEBUG) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class AbstractDataType: diff --git a/automon/integrations/splunk_soar/integration/__init__.py b/automon/integrations/splunk_soar/integration/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/splunk_soar/integration/servicenow/__init__.py b/automon/integrations/splunk_soar/integration/servicenow/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/splunk_soar/integration/servicenow/datatypes.py b/automon/integrations/splunk_soar/integration/servicenow/datatypes.py new file mode 100644 index 00000000..4883b287 --- /dev/null +++ b/automon/integrations/splunk_soar/integration/servicenow/datatypes.py @@ -0,0 +1,18 @@ +import json + + +class ServiceNow: + table: str = None + + def __repr__(self): + return f'{self.__dict__}' + + @property + def fields(self): + return self.to_json() + + def to_dict(self): + return {k: v for k, v in self.__dict__.items() if v} + + def to_json(self): + return json.dumps(self.to_dict()) diff --git a/automon/integrations/splunk_soar/integration/servicenow/ticket.py b/automon/integrations/splunk_soar/integration/servicenow/ticket.py new file mode 100644 index 00000000..f66f32dc --- /dev/null +++ b/automon/integrations/splunk_soar/integration/servicenow/ticket.py @@ -0,0 +1,100 @@ +import json + +from .datatypes import ServiceNow + + +class ServiceNowTicket(ServiceNow): + active = None + activity_due = None + additional_assignee_list = None + approval = None + approval_history = None + approval_set = None + assigned_to = None + assignment_group = None + business_duration = None + business_service = None + business_stc = None + calendar_duration = None + calendar_stc = None + caller_id = None + category = None + caused_by = None + child_incidents = None + close_code = None + close_notes = None + closed_at = None + closed_by = None + cmdb_ci = None + comments = None + comments_and_work_notes = None + company = None + contact_type = None + correlation_display = None + correlation_id = None + delivery_plan = None + delivery_task = None + description = None + due_date = None + escalation = None + expected_start = None + follow_up = None + group_list = None + impact = None + incident_state = None + knowledge = None + location = None + made_sla = None + notify = None + number = None + opened_at = None + opened_by = None + order = None + parent = None + parent_incident = None + priority = None + problem_id = None + reassignment_count = None + rejection_goto = None + reopen_count = None + resolved_at = None + resolved_by = None + rfc = None + severity = None + short_description = None + sla_due = None + state = None + subcategory = None + sys_class_name = None + sys_created_by = None + sys_created_on = None + sys_domain = None + sys_domain_path = None + sys_id = None + sys_mod_count = None + sys_tags = None + sys_updated_by = None + sys_updated_on = None + time_worked = None + upon_approval = None + upon_reject = None + urgency = None + user_input = None + watch_list = None + wf_activity = None + work_end = None + work_notes = None + work_notes_list = None + work_start = None + + @property + def number(self): + return self.sys_id + + def add_property(self, key, value): + return self.__dict__.update({key: value}) + + def to_api(self): + d = self.to_dict() + d['number'] = self.number + return json.dumps(d) diff --git a/automon/integrations/splunk_soar/response.py b/automon/integrations/splunk_soar/response.py deleted file mode 100644 index 058b1155..00000000 --- a/automon/integrations/splunk_soar/response.py +++ /dev/null @@ -1,14 +0,0 @@ -from .container import Container - - -class Response: - count: int - num_pages: int - data: list - - def __init__(self, results: dict = None): - self.data = None - self.__dict__.update(results) - - def __repr__(self): - return f'{self.__dict__}' diff --git a/automon/integrations/splunk_soar/responses.py b/automon/integrations/splunk_soar/responses.py new file mode 100644 index 00000000..4f4fa0e1 --- /dev/null +++ b/automon/integrations/splunk_soar/responses.py @@ -0,0 +1,184 @@ +import json + +from dateutil import parser +from typing import Optional + +from automon import log + +from .container import Container +from .vault import Vault + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class GeneralResponse: + def __init__(self, results: dict = {}): + self.__dict__.update(results) + + def __repr__(self): + return f'{self.__dict__}' + + +class GenericResponse(GeneralResponse): + count: int + num_pages: int + data: list = None + + +class AppRunResults(GeneralResponse): + app: int = None + app_name: str = None + app_version: str = None + action: str = None + container: int = None + id: int = None + message: str = None + playbook_run: int = None + status: str = None + + @property + def asset_name(self): + name = self.message + name = name.split(':')[0] + name = name.split('on asset')[-1] + name = name.strip() + name = name.replace('\'', '') + + return name + + def __repr__(self): + if self.status == 'success': + return f"{self.app_name} {self.app_version} '{self.asset_name}' '{self.action}'" + return f"{self.app_name} {self.app_version} '{self.asset_name}' '{self.action}' {self.status}" + + +class AppRunResponse(GenericResponse): + data: [AppRunResults] = None + + def summary(self): + summary = self.__dict__ + summary['data'] = len(summary['data']) + return f'{summary}' + + +class CancelPlaybookResponse(GeneralResponse): + cancelled: int = None + message: str = None + playbook_run_id: int = None + + +class CloseContainerResponse(GeneralResponse): + id: int = None + success: bool = None + + +class CreateContainerAttachmentResponse(GeneralResponse): + succeeded: bool = None + message: str = None + hash: str = None + vault_id: str = None + container: int = None + size: int = None + id: int = None + created_via: str = None + + @property + def vault_id(self): + return self.hash + + +class CreateContainerResponse(GeneralResponse): + success: bool + id: int = None + new_artifacts_ids: list + + +class PlaybookRun(GeneralResponse): + action_exec: list + cancelled: Optional[bool] + container: int = None + effective_user: int + id: int = None + ip_address: str + last_artifact: int = None + log_level: int + message: str = None + misc: dict = None + node_guid: Optional[int] + owner: int = None + parent_run: Optional[int] = None + playbook: int = None + playbook_run_id: Optional[int] = None + run_data: dict = None + start_time: str = None + status: str = None + test_mode: str = None + update_time: str = None + version: int + + def __repr__(self): + return f'[{self.status}] {self.playbook_name}' + + def __len__(self): + return self._playbook_run_id + + @property + def _playbook_run_id(self): + if self.playbook_run_id: + return self.playbook_run_id + return self.id + + @property + def message_to_dict(self) -> Optional[dict]: + try: + return json.loads(self.message) + except Exception as e: + logger.warning(f'message is not json. {e}') + + @property + def playbook_name(self): + if self.message_to_dict: + return self.message_to_dict['playbook'] + return '' + + @property + def start_time_parsed(self): + return parser.parse(self.start_time) + + @property + def update_time_parsed(self): + return parser.parse(self.update_time) + + +class Response(GeneralResponse): + count: int + num_pages: int + data: list = None + + +class RunPlaybookResponse(GeneralResponse): + playbook_run_id: str = None + received: bool + + +class UpdatePlaybookResponse(GeneralResponse): + message: int = None + success: bool = None + + +class VaultResponse(GeneralResponse): + count: int = None + data: list = None + num_pages: int = None + + def __repr__(self): + return f'{dict(count=self.count, num_pages=self.num_pages)}' + + @property + def data_parsed(self): + return [Vault(x) for x in self.data] + + def get_one(self): + if self.data_parsed: + return self.data_parsed[-1] diff --git a/automon/integrations/splunk_soar/rest/urls.py b/automon/integrations/splunk_soar/rest/urls.py index 28910f4f..94ac6e3c 100644 --- a/automon/integrations/splunk_soar/rest/urls.py +++ b/automon/integrations/splunk_soar/rest/urls.py @@ -1,8 +1,10 @@ -from automon import Logging +from automon import log from ..config import SplunkSoarConfig config = SplunkSoarConfig() -log = Logging(name='Urls', level=Logging.DEBUG) + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class Urls: @@ -21,9 +23,19 @@ class Urls: ASSET = f'{REST}/asset' CLUSTER_NODE = f'{REST}/cluster_node' CONTAINER = f'{REST}/container' + CONTAINER_ATTACHMENT = f'{REST}/container_attachment' PLAYBOOK = f'{REST}/playbook' PLAYBOOK_RUN = f'{REST}/playbook_run' VAULT = f'{REST}/vault_document' + VAULT_ADD = f'{REST}/vault_add' + VAULT_DELETE = f'{REST}/vault_delete' + VAULT_INFO = f'{REST}/vault_info' + + GENERIC = f'{REST}/' + + @classmethod + def generic(cls, api: str, identifier: int = None, detail: str = None, *args, **kwargs): + return f'{cls.GENERIC}{api}{cls.query(identifier=identifier, detail=detail, *args, **kwargs)}' @classmethod def action_run(cls, identifier: int = None, detail: str = None, *args, **kwargs): @@ -49,6 +61,10 @@ def asset(cls, identifier: int = None, detail: str = None, *args, **kwargs): def container(cls, identifier: int = None, detail: str = None, *args, **kwargs): return f'{cls.CONTAINER}{cls.query(identifier=identifier, detail=detail, *args, **kwargs)}' + @classmethod + def container_attachment(cls, identifier: int = None, detail: str = None, *args, **kwargs): + return f'{cls.CONTAINER_ATTACHMENT}{cls.query(identifier=identifier, detail=detail, *args, **kwargs)}' + @classmethod def cluster_node(cls, identifier: int = None, detail: str = None, *args, **kwargs): return f'{cls.CLUSTER_NODE}{cls.query(identifier=identifier, detail=detail, *args, **kwargs)}' @@ -270,10 +286,10 @@ def query(cls, order=order, **kwargs ) - if identifier: + if identifier is not None: query += f'/{identifier}' - if detail: + if detail is not None: query += f'/{detail}' if params: @@ -284,3 +300,15 @@ def query(cls, @classmethod def vault(cls, identifier: int = None, *args, **kwargs): return f'{cls.VAULT}{cls.query(identifier=identifier, *args, **kwargs)}' + + @classmethod + def vault_add(cls, identifier: int = None, *args, **kwargs): + return f'{cls.VAULT_ADD}{cls.query(identifier=identifier, *args, **kwargs)}' + + @classmethod + def vault_delete(cls, identifier: int = None, *args, **kwargs): + return f'{cls.VAULT_DELETE}{cls.query(identifier=identifier, *args, **kwargs)}' + + @classmethod + def vault_info(cls, identifier: int = None, *args, **kwargs): + return f'{cls.VAULT_INFO}{cls.query(identifier=identifier, *args, **kwargs)}' diff --git a/automon/integrations/splunk_soar/rules.py b/automon/integrations/splunk_soar/rules.py index 2516b360..932bdd28 100644 --- a/automon/integrations/splunk_soar/rules.py +++ b/automon/integrations/splunk_soar/rules.py @@ -1,4 +1,4 @@ -import logging +from automon import log from .phantom_unittest import import_playbook, container, results, artifact @@ -8,45 +8,45 @@ message = '%(message)s' log_format = f'{timestamp}\t{levelname}\t({modname})\t{message}' -logging.basicConfig(level=logging.DEBUG, format=log_format) -log = logging.getLogger(__name__) -log.setLevel(logging.DEBUG) +log.logging.basicConfig(level=log.logging.DEBUG, format=log_format) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.logging.DEBUG) def playbook(playbook_to_import: str, container: dict = container(), name: str = '', callback: object = None): """Mock function""" - log = logging.getLogger(f'{__name__}.{playbook.__name__}') + logger = log.logging.getLogger(f'{__name__}.{playbook.__name__}') - # log.info(f'playbook_to_import: str, container: dict = {}, name: str, callback: object') + # logger.info(f'playbook_to_import: str, container: dict = {}, name: str, callback: object') - log.debug(f'playbook_to_import: {playbook_to_import}') - log.debug(f'container: {container}') - log.debug(f'name: {name}') - log.debug(f'callback: {callback}') + logger.debug(f'playbook_to_import: {playbook_to_import}') + logger.debug(f'container: {container}') + logger.debug(f'name: {name}') + logger.debug(f'callback: {callback}') return import_playbook(playbook_to_import) def get_run_data(key: str, **kwargs): """Mock function""" - log = logging.getLogger(f'{__name__}.{get_run_data.__name__}') + logger = log.logging.getLogger(f'{__name__}.{get_run_data.__name__}') - # log.info(f'key: {key}') - log.debug(f'key: {key}') + # logger.info(f'key: {key}') + logger.debug(f'key: {key}') return key def condition(container: dict = container(), conditions: list = [], name: str = ''): """Mock function""" - log = logging.getLogger(f'{__name__}.{condition.__name__}') + logger = log.logging.getLogger(f'{__name__}.{condition.__name__}') - log.debug(f'{help(condition)}') + logger.debug(f'{help(condition)}') - log.debug(f'container: {container}') - log.debug(f'conditions: {conditions}') - log.debug(f'name: {name}') + logger.debug(f'container: {container}') + logger.debug(f'conditions: {conditions}') + logger.debug(f'name: {name}') return container, conditions, name @@ -54,9 +54,9 @@ def condition(container: dict = container(), conditions: list = [], name: str = def format(container: dict = container(), template: str = '', parameters: list = [str], name: str = ''): """Mock function""" - log = logging.getLogger(f'{__name__}.{format.__name__}') + logger = log.logging.getLogger(f'{__name__}.{format.__name__}') - log.debug('container: dict = {}, template: str = '', parameters: list = [], name: str = ''') + logger.debug('container: dict = {}, template: str = '', parameters: list = [], name: str = ''') parameters_orig = parameters @@ -64,66 +64,66 @@ def format(container: dict = container(), template: str = '', parameters: list = [x.split(':')] for x in parameters ] - log.debug(f'container: {container}') - log.debug(f'template: {template}') - log.debug(f'parameters: {parameters}') - log.debug(f'name: {name}') + logger.debug(f'container: {container}') + logger.debug(f'template: {template}') + logger.debug(f'parameters: {parameters}') + logger.debug(f'name: {name}') return container, template, parameters, name def get_format_data(name: str, **kwargs): """Mock function""" - log = logging.getLogger(f'{__name__}.{get_format_data.__name__}') + logger = log.logging.getLogger(f'{__name__}.{get_format_data.__name__}') - log.debug(f'name: {name}') + logger.debug(f'name: {name}') return name def collect2(container: dict = container(), datapath: list = [], action_results: object = None): """Mock function""" - log = logging.getLogger(f'{__name__}.{collect2.__name__}') + logger = log.logging.getLogger(f'{__name__}.{collect2.__name__}') - log.info('container: dict = {}, datapath: list = [], action_results: object = None') + logger.info('container: dict = {}, datapath: list = [], action_results: object = None') - log.debug(f'container: {container}') - log.debug(f'datapath: {datapath}') - log.debug(f'action_results: {action_results}') + logger.debug(f'container: {container}') + logger.debug(f'datapath: {datapath}') + logger.debug(f'action_results: {action_results}') return [[artifact(), artifact()]] def act(action: str, parameters: str, assets: list, callback: object, name: str, parent_action: str = ''): """Mock function""" - log = logging.getLogger(f'{__name__}.{act.__name__}') + logger = log.logging.getLogger(f'{__name__}.{act.__name__}') - # log.info(f'action: str, parameters: str, assets: list, callback: object, name: str') + # logger.info(f'action: str, parameters: str, assets: list, callback: object, name: str') - log.debug(f'action: {action}') - log.debug(f'parameters: {parameters}') - log.debug(f'assets: {assets}') - log.debug(f'callback: {callback}') - log.debug(f'name: {name}') - log.debug(f'parent_action: {parent_action}') + logger.debug(f'action: {action}') + logger.debug(f'parameters: {parameters}') + logger.debug(f'assets: {assets}') + logger.debug(f'callback: {callback}') + logger.debug(f'name: {name}') + logger.debug(f'parent_action: {parent_action}') return action, parameters, assets, callback, name, parent_action def save_run_data(key: str, value: str, auto: bool): """Mock function""" - log = logging.getLogger(f'{__name__}.{save_run_data.__name__}') + logger = log.logging.getLogger(f'{__name__}.{save_run_data.__name__}') - log.debug(f'key: {key}') - log.debug(f'value: {value}') - log.debug(f'auto: {auto}') + logger.debug(f'key: {key}') + logger.debug(f'value: {value}') + logger.debug(f'auto: {auto}') return key, value, auto def debug(object: str): - return log.debug(f'{object}') + return logger.debug(f'{object}') def error(object: str): - return log.error(f'{object}') + return logger.error(f'{object}') diff --git a/automon/integrations/splunk_soar/tests/__init__.py b/automon/integrations/splunk_soar/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/splunk_soar/tests/dino.py b/automon/integrations/splunk_soar/tests/dino.py new file mode 100644 index 00000000..02638d2d --- /dev/null +++ b/automon/integrations/splunk_soar/tests/dino.py @@ -0,0 +1 @@ +dino = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x05\x00\x00\x00\x04\xb0\x08\x06\x00\x00\x00\xa4Y\xe76\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00PeXIfMM\x00*\x00\x00\x00\x08\x00\x02\x01\x12\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x87i\x00\x04\x00\x00\x00\x01\x00\x00\x00&\x00\x00\x00\x00\x00\x03\xa0\x01\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\xa0\x02\x00\x04\x00\x00\x00\x01\x00\x00\x05\x00\xa0\x03\x00\x04\x00\x00\x00\x01\x00\x00\x04\xb0\x00\x00\x00\x00>\x95z\xf6\x00\x00\x01YiTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\n \n \n 1\n \n \n\n\x19^\xe1\x07\x00\x00@\x00IDATx\x01\xec\x9d\x07\x80\\Wy\xb6\xbfi;\xdb{\x91\xb4\x92Ul\xc9r\x91l\xc9\xc6\xbdcLO\xb0\r&8\x94\x00\xa1\xa7\xd0\x02\x84\x00\x81\xd0B\x80\xfc\xfc!?=\x06\x02&\x84\x12:\x04\xb0\xc1\xb8\xdb\xb8\xcaU\x96\xac\xde\xcbj{\x9d\x99\xfd\xdf\xf7\xcc=\xab\xbb\xa3]y\xb5E;3\xfb~\xd27\xf7\xce\x9d{\xcf=\xe7\xb9\xe7\xde\x99\xf3\xeew\xce\x89\x98L\x04D@\x04D\xa0P\tD\x90q:\xcd/\xb3\xef\xcc\x86\xb1\xe2\xddo\xd3R\x04\x9e\x89\x00\xebQ4\xd8)\x83%\xebP\xae5b\xc3\x02\xf8B\xf8\xe2`9?\xd8\xc6e\x15\xdc\x1f\xc7\xf4z\xe1{\xe0O\xc2\x1f\x84\xdf\x0b\x7f\x04\xee-|>\xbfMK\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81i$\x90\xdb`\x9c\xc6\xa4\x95\x94\x08\x88\x80\x08\x88\xc0\x0c\x10\xe0s\xdb\x8b4\x14h\xe8G\xb3\x18>\xe4\xfe^\xcc\xf1\xc2\xcc\xd1\x8e\xd1gs\x8b\x80\xafO\\\xa6r\x8a\x9e\xc0{\x8a|\xe7\x07\xbe\x14K\x8a\x7ft\n\x81\x93\xb1}8\xe8a\xf8\xcd\xf0o\xc2)\x0e\xd2\xe2\xf04\\u\x944d" \x02" \x02" \x02" \x02"0\x8d\x04\xf8c_&\x02" \x02"\x90\xdf\x04\xf8\xacf\x94\x14\xc5\x91\\k\xc0\x86jx\r<\t\xe7\xbe\x03\xf0\x03\x81\xf7a\x196\x9f\x16E\x96g\x12\x0f\xc3\xc7i\xbdx\x08\xf8:\xc0\x12\xe5\xd6\xa9\x12l[\x1d\xf8\x05X^\x08?\x11N!0\xd7\xbc\x00\xcd\xf4\xe84\xbf\xcc\xbe;\xfc\xca\xfa\xe6\x85=\x8a\xd2\xdeXO\xbf\x06\xff:\xfc\xa9`#?\xcf\xcdW\xf0\x91\x16" \x02" \x02" \x02" \x02" \x02\x93!0\xde\x0f\xf5\xc9\xa4\xa5cD@\x04D@\x04\xa6\x9f@\xae\x18\xd2\x84S<\x07~1\x9c\xc2\x0c#\xb1(\xfeQ\x04,\x85\xd3\xc2\x02\xe0v\xbcg\xb4\xd5\xedpv\xbd\xec\x86{c\xc4\x95\x17q\xfc6-\x8b\x97\x00\xbf\xf3Y\x9fr\xa3\xfc\xd8m\xf7\xb9\xf0K\xe1+\xe1\x14\x00\xcb\xe1a\xa3x\xe7\xa3H\x99\x0e\xddw\xdd\r\xef7\x91\xf5p:>\rF\x01\xde\x00\xff,\xbc\r\xce\xed<\']&\x02" \x02" \x02" \x02" \x02" \x02" \x02" \x02EG\xc0\x0b5\xbe`\x14\xf7\xae\x86\x7f\x0f\xde\x01\xf7\xc2\xc8\xb1.)\xb2|\x1b\xfe2x\x0b]\xef\x99>\xcf\xe5\xd3\xe38\x81\xd7\xc0\xbd1\xaf2\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(*\x02\xe1\xc8*Fa\xbd\x13\xce\x89\x13\xbc@\xe2\x97\x14g\xbcH\xc3\xee\x92\x14R\xc2\xcem~\x1f\xae\xfb\xe3\xfc\x92B\xcb\x97\xe0k\xe0a\xcb\x15\x8b\xc2\x9fi\xbd0\x08x\xe1/,\xe8RHcd\xdf?\xc2\xef\x803J\xd4\xd7\x05.YwX_\x8e\x87\xe8\x17>\xaf_\xf7\xf5\xd5\xbf\xff*\xf2\xe2\xc7\x18T\x9d\x04\x0c\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@q\x10\x08\x0b\x1d/A\x91\xc2\xc2\xdft\x883a\x91\xc7\x0b-\x14\x11\x7f\x00\xffSx%\xdc\x1b\xf3\x12\x16\x90\xfcv-\xf3\x93\x00\xbb\xcc\x8e\x15-\xc7q\xfc\xde\r\xbf\x0f\x1e\x8e\xb4\xe3\xf5\xe7{/\x1e\xfb\xfa0\xdbK\xe6\xc7\x0b\xd6\x9c)\xf828\x8d\xe5S}t(\xf4"\x02" \x02" \x02" \x02" \x02" \x02" \x02"P\xa8\x04\xbc\xf8\xd7\x8c\x02|\x13\xee\x85\x98\xdc\xc8(\xbf}\xaa\xcb\xb1\xd2}\x00\xe7}\x03\x9c\x13Ax\xf3\xf9\xf2\xef\xb5\xcc/\x02\x14\xc5r\x85\xbfVl\xfb\x1b\xf8\xef\xe1\xb9\xa2\x9f\xbf\xee\x14\x83\xa7Z\x87f\xeax/T3\xfd~\xf8[\xe1\xde$\x02z\x12Z\x8a\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14\x0c\x01\n\x1a\x8cn\xa2]\t\x7f\x1aN\xe1\x83B\r}\xa6D\x96p\xba^\x14\xf2\xdb\x9e\xc0y\xff\x02\xceY\x85\xbdI\x08\xf4$f\x7f\xc9\xfa\x92{=\xe6a\xdbup\x8e\x13\xd9\x05\xf7\xd7\x92K\x1f\xe9\x17\xdeV\x08\xeb\xe1\xfa\xff\xef(\x07\xbb\xc4\xd3r\xcb\x9e\xdd\xaaW\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\xc8C\x02\xe1h\xa67"\x7f^\xb8aw\xdf\xd9\x10hr\xc7\x7f\xbb\x1b\xf9xE\x88\x9b\xbaa\x86`\xcc\xc2*\xf9\x87\xa3\xfd(\x84\x9d\x0e\xff\x0c|=<\\g|\x14]>G\xfa\x85\xf3;\xde:\xf3\xef\x85\xc0\x9fb\xbd\x01N\x93\x08\x98\xe5\xa0W\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81<&\xe0\xc5\xb4\x04\xf2\xf8\xafp/\x80x\xb1\xc3\xbf\x9f\x8deXt\xe1\xf9\x7f\x05\xbf\x04\xee\x8d\xe2KX\xbc\xf4\xdb\xb5\x9c~\x02\xe4\x9c+v\xcd\xc7\xb6\xd7\xc19\x99G\xb8\x8b\xeft\x8c\x139\x1b\xf5m"\xe7\xf4\xe5\xa4(\xcd\xf2\xd3r\xb9d\xb7\xeaU\x04D@\x04D@\x04D@\x04D@\x04D@\x04D@\x04D@\x04\xf2\x80\x80\x17\xcf(\x02~\x15N\x01\x84\xe2M>\x88\x7fa1&\x1c\x11H\x01\xe6\x0b\xf0\x05p\x1a\xcb\xc0\xfc\xcbf\x86\x00\xf9\x86\xa3\xfdx\x96\xb5\xf0/\xc27\xc0s\xafS\xbe\xd5\x9dp\xfe\xa6k\x9d\xf5\x91i=\n?\x05N\x93\x08\x98\xe5\xa0W\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81<"\xe0\x853\n\x17\xff\t\xa7\xa01\x08\xcf\xe7\xae\x9aaqi/\xf2\xfav\xb8\x17\xa7X\x0e/hbU6E\x02\xb9\x9bx*\xdaS\x04D@\x04D@\x04D@\x04D@\x04\xe6\x00\x01\xf73\x7f\x0e\x94SE\x14\x01\x11\x10\x81\xd9$\xe0E\x897!\x13\xec\xfaKa\x87\xcf\xdf\xe9{\x063\xaaj\xc4 \xacLY[\x19I\xech+<\x0bE\x18F1R\xd0\xfc\x04\xfcS\xf0^\xb8/3Ve\x01\x01\n}\xbcP>J\xad\x12\xeb\x8c^{3\xfcR\xb87~\xee\xf7\xf5\xdbfv\t\xa1\xce\xd5\x991\x04\xbf\xc4\x82j+YXc\xa5\'5Z\xf2\xc4FK\xd4\x95\xdbp4b\x14\xf7"\xa8w\x8c\xf2\xb3\xa1\x8ceR\xa8\xd6\xf4az\x90]\x966\x11\x858Xj\x11\xd4\x92\xbe\'\xf6Y\xdb\xf7\x1e\xb6\xd4\xfe "p\xea\xd1\x80d\xc5\xbav\x1f\xfc\x85\xf0}p\xb2\xe3=&\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x08\x08\x84[\x8c\x82"\x02" \x02"0\xfd\x04\xbc\x10\xf6\\$\xfdS8\xc52>{\xa7\xe7\xf9K\xe1\x86\xa2\x8d\x17\\\x90\xb03\x084n\x9b\x0f\xc5\xf2\xdbgf\xe9E\x18\xa6~\x07\xfco\xe1\x8c\n\xa4\x10\xc3\x9c\xe5\xe6\x0e\x9b\xe6\x94\xf1Z\xb3\x1eP$\xa5Q\xf8\xfb\x0b\xf8\xeb\xe0k\xe0\xde\x8e\xaf\xf0\xc7\\\xb1\x9e\xe4t\xed\x8d$bVvJ\x8b\x95\x9d\xd6\x02\xe1\xaf\xce\x12\x0b\xab\x8d]|3\xfd\xc8\xfe@\x1aB\x1f\x96\x94\xd729B_\x04\x97\x9bi\xe6\x1a\xaf>\xf7\xc5\xb9\xa2\x88\x14\x1c\xc6\xf9:~\xfc\xa8u\xde\xfatv\xcf\xe9\x13\x01oB\x82W\xc3{\xe0\xcc\x89D@@\x90\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x00\t\x8c\xf5S]dD@\x04D@\x04\xa6\x87\x80\x17\xffNCr\x14\'\xe6\xc1)JP\x18\x9b\x9a\xe5\x88&\x91$\xc6`+\x8d\xd90#\xb1z\x87\x8eL\x9bBa\x8e\xd0s\xe4NS\xdaB\x99\x87\x02\x16\x05\xce.\xf8{\xe1_\x84\xd3<\x87\xec\xbb\xb9\xf3\xea\xaf\xb3\x17\xa2x\xfd_\x0e\xff+\xf8I\x01\x062\xe3w\xb1\xdf7\xd8\xe3\x98\xb0\xa3\xec\xf4\xf9Vy\xeeb+A\xdd\xb1x\x04C\xf6\xa1\xfe\xf4 \xca\x8f\x91x\xee8f\xef8\x18\xce\x1b\xad,\x81h=l\x07\xbeq\x0f&\x08\xe1\xf0}S2_\xb7X\x807\xc0\xbf\x06\x97\x088%\xa4:X\x04D@\x04D@\x04D@\x04D\xa0X\x08\xf0\xa7\xbeL\x04D@\x04D`z\tx\xd1\xe1]H\xf63pF\x82q\xdb\xe4\x9f\xb9<2\x10\xeb\xea\xaf>\xdd\xaa\x9f\xbd"+\xfa\xf5\x0ef#\xfc\\\xca\xd4=\x18X\x06\xe3\xbe\x10\x02\xe9q\x88,\x19D\\\xf5?u\xc0\xba\xef\xd8l\xbd\x0f\xeet\xbb\xb8\x17\n\x81\xe1\x08\xc1\xc3\x9fL\xc7\x9a\x17=\x19\x01\xf8v\xf8\xb7\x82DC\xa5\x99\x8e\xd3\xccz\x1a,\x0f\xaf\xaf\x8f\xf8\x9b\x8fu\x8e\x83\xf8\n\xf8\tpZpaF\x84\xe1\xec\xd6\xe9~eN(\x14\x87\xaei\x04\x93pT\x9e\xb7\xd8\xcaN\x9dg\xc9%\xf5\xc6\xc8?F\x89R4\xceN\xda\x81c\x18\xe5\xc7c\x8f\xb7A\xa0\x8c\x96!8\x14\xe3\x0e\x1e\xf8\xd6\xfd\xd6\x8bn\xc1S\xb4\xe0.q\xe3\x00r\xdc\xcd;\xe1\xa1\x1bc\x8a\xa9\xebp\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(P\x02\xb3\xf1s\xbf@Q)\xdb" \x02"0!\x02^\xfc{\x0e\xf6\xfe\x05\xdc\x0b\x7f\x93\x7f\xde\xfa\xc8?,\x9b\xdfz\x81\x95\x9f6\xcfRm\x98h\x97"\x0f\x05\xbcg2v\xe5\x8cG-V\x91t\xcb\xc1\xed\xed\xd6\xfe\xab\'\xado\x1d\xba\x07{\x9b9!\x90\xc2\x17\x05\x18\xda\xe7\xe0\xef\x87\xf7\xc1\x8b\xa1K0\xe1\xb3l>\xe2\x8fc\xfc\xbd\x1aN\xf1o\x01\x9c6u\xf17\x9b\xce\xf8\xaf.\x17x\xc9\x89\xf6Kb,\xbf\xcas\x16Y\xc5Y\x8b,R\x96\xc0\xf1\x19Kw1\xd2\x0f\xd9e\x9d\xf2We\xfc\x94\x8f\xcf\'\xa8\xc6\x9cx$VQb\x07\xbfs\xbfu\xdd\xb5u\xaa\xe7\xf5u\xee)$t)|\x0f\\"\xe0T\xa9\xeax\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\x82&\xc0f\x83L\x04D@\x04D`z\x08x\x91a\t\x92\xbb\x15\xbe\x08\xee\xc5\x08\xacN\xc2\xf8\x94\xa6\xceW\x12\xb7\xe6\xb7_l\xc9Eu\x96>\x04\xf1o"\xc2_\xee\xe9(\x04"\xd2+Z\x9e\xb0Hi\x89\r<\xbd\xdf:~\xb7\xc1\xfa\x1e\n\t\x81\xc1\xf9r\x0f\x9d\xe2{2`\xcat\x8a\xa2\xaf\x85\xef\x87{\xb1\x14\xab\x05g\xe1\xbc\xd7#\xf7\x9c\xd8\x83]\xbdW\x04%\xa1(\xc8\xf2\xce\xac\xcc\x96#\xdcr\x1c\xbf\xca\x0b\x17[\xe9\xe9\xf3\xaclq\x03*\x1f\xba\xf7v#J\x14\x93\xc3\xa0\xaf/r\x84\xec\xccl\x8e\x82\xe2\x1f\xe3\x02u\xdc0Na\xac&i\x87\xbe\xfb\x90u\xde\xb6\xf9\x18\x138bw\xf2\xe75\xba\x19\xfe\x028\x94Og<\x93L\x04D@\x04D@\x04D@\x04D@\x04\xe6\x1c\x016Nd" \x02" \x02\xd3C\x80\xd2\nE\x87\x9f\xc3\xaf\x82{\x11\x02\xab\x930\x1f\xf9\x07\x91g\xfe\xdf]f%\x0bk,\xdd\xd6\xef\x84\x92I\xa4v\xf8\x10N\xf0\x80\xb4\xa3\x88\xb8\x8a$\xe26\xb0\xb9\xcd\xda\x7f\xf4\xb0\xf5o>\x94\xdd\x87\xa2\x12g\x89\x9d~\xa9\x84\xd1p\x8c\xfc{\x08\xfej\xf8#\xf0\xb0\x90\x86\xb7yo\xe1\xfcV!\xb7\xaf\x84\xbf\x13~R\x90\xf3\x99\x8f\xf8\x1bcFg\x8e\tYu\xd1RD\x87\xa2\xf7qI4;\x19\x0c\x85?^kv\x05/\x14C\xdd\x8b\xd5\x94Y\xdb\x8d\x0fX\xd7\x9d\xd3&\x022\xf2\x94\x93\xd1\xf0\xda\x01\xc8\x0c\xd4l$*\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81|& \x010\x9f\xaf\x8e\xf2&\x02"PH\x04\xbc0\xf4\x11d\xfaC\xf0)\x8a\x7fH\xc1\tp\x11\x9b\xf7\xae\xcb0v\xdb\x14"\xff\xc6\xa3\xc8.\xc4\x14\x021F \xa3\xafz\xef\xdda\x87\xfeg\x9d\xa59\xae \xcd\x0b\x90\xd9w\xd3\xf5\xea\xb90\x02\xf0up\x8a\xa5\x85\xd0\x1d\xd8\xabh\x14\x90\x98\xdf\x97\xc2\xdf\x0b?\x13N\xe3v\x9a\xdf/\xfbn:_s\xaf\x07\xba\xcdV_\xbc\x14]|\x17Z\xc9\x92\x06\x88~\xe9l\xb4\x1f#=)\xe0\x16\x92\xf0\xe799\xba\x10\x01\xab\x93\x98\x18\xe4>\xeb\xb9o;\xea!>t\xf7\x82\xdfi\xc2K\x1e\xc5\xfa\xc6k\xf2z\xf87\xe0\xfe>\xc5\xaaL\x04D@\x04D@\x04D@\x04D@\x04\xe6\x0e\x01\t\x80s\xe7Z\xab\xa4" \x023G\xc0\x8b\n\x9ct\xe0\'p\nD|\xbeNN\x0c\n\t\x1eMo>\xdf\xcaW\xcd\xb7\xf4\xc1Iv\xfbE&\x9e\xd1(\x04B,\x8aU\x97Z\xba\xbb\xdf:~\xb9\xde\xban{:8\x0c\x99\x89\xe0\xf3\xc9\t0\xe3\x9d\xda\x8b\x80\x08g\xb4\xb7\xc0\xbf\x01\'C\xca?\xd3{&$8E\xf3\xd7\xd0\x0b|\xcfCz\x1f\x86\x9f\x1b\xa4\xeb\x05\xa6\x99\xf9>\xa5\xe8G\xa3\xa0\x17X\xb2\xb5\xc6\xaa.]fekZ1\xdbs\x02\xb3=g \xfc\rd\xf7\xe1d\x1eE`\x11v\x07\xae,\xb5}7\xdc3z\xd2\x9ac/\x1b\xc1\x11b\'\xfc|\xf8\xe3pB\xf2\xd7\x13\xab2\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(~\x023\xd3`)~n*\xa1\x08\x88\x80\x08x\x02|\x8eRd\xe0\x04\x10w\xc1\x97\xc0).LY\x89\xa9\x7f\xe9*\xab\xbe\xe2dK\x1d\xe8Fj\xc7\xe1q\x8dI$"\xa5q\x8b"\xfaj\xe0\xc9\xfdv\xf0\xbb\x0f\xda\xd0\xde.\x14\x05\x96\x1b}\x96\xdd:\x95W\xcf\x88\xcb\xb7\xc1\xbf\x04\xa7pJA\xed\xb0\xda\x857\xb3d\x04NQ\x92]zi\x17\xc2\xdf\r\xffS\xb8\xbf\xe6\xcc;\xf7\x99~\xe3\x19\xc8<4\x9bo\xf9\xdaV\xab<\x7f\xa9\x95\x9e\xd4`Q\xcc\xec\x9b\xea\xe2\xd8~\xc4\x05;\x1e\xf5#{\xa6\xe3\xf3\n\xc1\x93\xdd\xd3#%1\xdb\xfb\xef\xb7\xdb\xc0\xa6\x83S\xa9\x83^p\xbe\x05\x99\x7f!\x1cj\xa9\xabc\xbc~2\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x98\x13\x04f\xa6\xe12\'\xd0\xa9\x90" \x02"0\x12\xe5\xc7g\xe97\xe0\x8c0\xf2b\x03V\'o\xec\xdaY\xf3\xe2\xd3\xb2\x13~\xf8(\xb0\xc9\'7\xb1#)"Ap\x1a\xee\x19\xb4\xf8\xfc*\xab\xbap\t\xe6\x8c\x88Z\xff\xc6\x03\xc1\xf1\xf8\x9c\xc2\xd4\xf4\x18S\xa2\xd0G\xa1\xf4EpF\x03\xde\x06\x9f\xed\xef%\xe6\x8bB$\xc5!\xfa\x89\xf0O\xc2\xff\r~*\x9c\x9fs;\xf3=e\x91\x17i\x8c6\x8e\xef\xe7\xe5O,#\x88\xcc\xac\xc2\xa4\x1eM\xaf>\x1bc\xfc-\xb3x]\x85ez\x07,\x83k\xe4\x8cu\xe3x\xd5\x8f\xd19\x9d\xd9w,\x13"\x1b#\xf1\x88U\xacY\xe8\xa2\x003\xbd\x98\xc7\x83u\xd4\xf3\x99x\x0ex\x9dx_.\x83\xf3\xe8\x9b\xe1\xdcv\xec)\xe1 \x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14"\x81\xd9nh\x15"3\xe5Y\x04D@\x04<\x01>C),0\x82\x8d\x13Ap\x9d\xc2\x02T\x8a\xc9X\xf6\xb0\x92e\r\xd6\xfc\xfas-\xdd\x83@%\xc6\x9fM2\xb5\xc9\xe4\xc0\x1d\x03\xf1ex \x85\xae\xa5\xc3V\xbez\x81\x95\x9d:\xcf\x06\xb6\x1e\xb2L\x175:\xd8\xf4\tN,\x19E\x18\nj\x9c4\x853\xb5\xde\n\'\xd7\xd9\x10gx\xedh\xcc\x0f\'\xf8x?\xfc\xf3\xf0\xcb\xe1\xfc\x8c\xd7\x97y\xf6\xfbau\x9a\xcc]c\xbc\x04]}c\x15I\xaby\xee\xc9\xd6p\xdd\x19Vy\xc1R\'\xc4r6\xdf\xe1~\x08\x7f\xe4_l\x11\x7fcat\xf50\x83\xc9j\x92V~z\x8bu\xdf\xb9\x05W\x00\xd5\xc2\xb1\x1a\xeb\x80\xa3n\xe3Q\xacS\x14\xe9\xef\x84o\x82\xf3:\xceF=\xc3ie" \x02" \x02" \x02" \x02"p|\tH\x00<\xbe\xbcu6\x11\x10\x81\xe2!\xe0\xc5\xbf\xf3P\xa4o\xc3\x195F\x91a\x92\xf2DV\x9f\x88U%m\xc1\xdb/q\xaa\xc4\xf0\x00\xf4\xa6\xe9\x97\x9a\x90\xc5\t\x18E&H#\x19L\x08\x12o\xacp\xd1\x809\x1e<\x8abn\x13\xbc\x11\xfeS8\xb7\x05W\x01k2\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(R\x02\xd3\xdf\xa8)RP*\x96\x08\x88\x80\x08\x84\x08P\xe8\xa38\xf4\x19\xf8\x8b\xe1\x14\x15\xa6\xfc<\xad\x7f)\xba{\x9e\xd5\x8aq\xff \xfea\xec\xb7\xbc1\x17\xed\x87\xb1\x01\x11\rX\xb2\xb0\xc6*\xce9\xc1R{;mh_O6\x8b^\xcc\x9aZ\x86\xc3\x92\x0e\xbb\x03?\n\xe7\x8c\xad\x14\x01)\xd0\xf0sB\xe12\xec\xdcv\xac\xce\xe3\xc3\xc2\xdfIx\xffq\xf8\x17\xe1\'\xc3\xbd\xf0\xe7\xcf\x87M\xd3d9\x11\x7f\x89E\xb5\xd6p\xedj\xab\x7f\xd9\x99\x96\\\\o\x99\xbeA\x88\xbfE>\xbe\xdfdPR\x04\x1c\x18\xb2\x8aU\xad6\xb8\xb3\xc3\x86\xf6pr\x1a^\xc6c6^S\xde\xafg\xc1\xef\x87\xaf\x87\xb3.H\x04\x04\x04\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@\xf1\x12\x98\xd4\xaf\xe7\xe2\xc5\xa1\x92\x89\x80\x08\x88\xc03\x12\xa0X@\x01\xe1\xe5\xf0\xef\x06\xeb\x93\x17\xff(\x9e!\xaa\xa9|M\xab5\xfd%\xc6\xfd\xa3\xf8\x97\xcf\x861\xd8\xa2e\x98\x9d\xb54a\xed\xff\xfb\x84u\xfc\xf2\xc9ln)\x12\x86f\xac\x9dB\x11\xbc\xd8\xd7\x894(\x04\xde\x03\xe7w\xd5L\x084\x14\x83\xde\x0cg\xc4_+\x9c\xc6k;\xfd\xc2_p\x9d\xdd\x19\xf0\x92XTc\xb5\xcf?\xc5\xcaN\x9fg\xd1\xe1\x88\xa5\xba9\xde\xa3\xa2\xfd<\x9f1\x97\xa8\x01\x91$n5\xb0\xdc\xfd\xa9\x9b1;v\xaf[\xf7\xe3&\x8ey\xcc\xd8\x1b)\xf0\xb2N=\x06\xbf\x04\xde\x01\xa7q\xbbL\x04D@\x04D@\x04D@\x04D@\x04\x8a\x92\x00\x7f\x00\xcbD@\x04D@\x04&F\xc0\x8b\x7f\xcb\xb1\xfb\xad\xf0\x168\x85)\nF\xc7n\x81(\xc4\xee\x9f\xf3\xdf{\x85E ?d\x860\xeb\x07\xb7\xe7\xb3\xb1\xc4\x88d\x8b\xd7\x96Y\xefc{l\xff\x97\xef\xc6\x18u\xd4\xcd\xa6\xcd(\xc4\x90\xe9\x068E\xc0\x1d\xf0Jx\x12^\x02/\x85\xd3\x12p^\x13\x02\xe3\xf6g2\x86\xd6qZ\x15\x96\xe0D8\'n\xb9\x1cNc\x01\x98\xd6\x8cZbQ\xbd\xd5?w\xb9\x95\xa1;5\x0b\x99\xa1\xf0\x87\xd9n\xe7\xdc\xd8~\x93\xa5\x0c\xb1\xbc\x13\xf7\x0e\x00\x1d{\x17t\xd6\x01^\xff{\xe1W\xc0\xa1\xc0;\x01\xd0\xd7~\xbc\x95\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@q\x10P\x93\xa28\xae\xa3J!\x02"0\xb3\x04\xbc\xf8\xc7\xee\xa8?\x81\x87#\xcf&qf>z\x87\xd1\r\xb4\xc5\x9a\xdfx\x81\xa5\x19\xf97[\x16\x16\x9b\xa8\xf0% \xf4A\xe0\x8b$1\xce\x1f\xb29\x0caj8\x05=$\x93\xb6t\x7f\xc6\xd2\x07\xbalh\x7f\x8f\xa5\xe0C\xfb\xba-u\xa8\xd72\x9d\xfd6\xcct\xf0\x9fB\xe04\x1bE\x1a/\xc8\x1c\xed;\xebh\x9f\xf9,\xf9t\xf8\x9e\xc2\xcf\x8c[\x94c\xd6!\xca\x8f"i\xb4$a\xd1\x8a\x12\x8bW%-\x8e\x08\xb6Ds\x85\xc5\x9b\xab-\xd1R\tq0i\x11\xee\x87k\xc0\xa5[\x8708<\x98\xcev\x0b\xa7PHs\xa5D\xd6\x8fK\xee\xb3\xa7\xcc\xcbW\xe0\x88\x94RH\xcd\xd8\xae\x8f\xfe\xd62\x98%\xd8\xb1\t_\xe1\x89e\xdc\x0b\xf9\x7f\x8b\xdd\xff\r\xee\xef\xf5\x89\x1d\xad\xbdD@\x04D@\x04D@\x04D@\x04D\xa0@\x08L\xa4\xc1T EQ6E@\x04D`F\x08\xf8\xe7$\xc7\xfb\xbb\x0b\xbe\x04N5fr\x12\x0cS\xa3\x18T^b\x0b>x\xa5E\x11\r\x96\xe9\xe7\xb8\x7f\xd8>\x93\x16\x16\xfa\x18\xbdG\xb1\x8f\xff)\xf6\x95@\xecK\xe2\xcd`\xc6R\xed\xbd\x96n\xef\x87\xb0\xd7gC\x88J\x1c\xda\xd5a\xa9\xdd]6\xb0\x17\xb3\xae\x0eQ+\x91\xcd\x04\x01^\xfeX\x13DA\n\x83-\x14\x05\xab\xd0\xcd\xb5\xdc\x8d\xb3\x18\xc3X\x8b\xf1\xea\xa4\x13\x113\x03\xa8+\xb8\x0e\x19N\x18\xc2\xa8A^\x92aVG\x18\x13\xe1u\x9d+\xc6\ti\xea\xca\xac\xff\xc9}\xb6\xef\x0bwL\xb6\xd4^2\xdc\x87\x04\xce\x84\xef\x81\x07w\xe9d\x93\xd4q" \x02" \x02" \x02" \x02"\x90\x7f\x04f\xba\xc9\x99\x7f%V\x8eD@\x04D`\xe2\x04\x9c\xa4\x82\xdd)\xb3\xfc\x10~M\xb0\xce(\xa1c\xb7\x90\xac\xd0\xfc\x96\xf3\xadte\x8be \xb6\xcd\xc8\xb8\x7f9\x82_\x94\x11}\x98\xb9\x97Q}\x14\x8f\x86\x11\xd1g}i\x1b\x80\xc07\xb8\xad\xdd\x06\xb7\xb7!\xa2/\x1b\xcd\x97\xe6\xc4\x14\xcfd,Kx\xb2\x12\'\xa3\xe0\xc5\xcb)\xcft\xfc\\\xfa\x9c\xac\xbc\xc2\xeb\xd6\xf1v\x82\xbc\xd8]8Z\x93\xb4Du\xa9\xc5\xe6W[Ik\xb5\x95\x9eP\x8f\xe8A\xcc\x89\x82\xee\xd8\xfc<\x12G\xe4 #5\x07 \x0cR \xa40H\xe3\xb9\x8a]\x10D\xb7_FS\xb6}\xffa\xeb\xfc\xfdFW\xecI\xbc\x10\x18\x95\xd3\xff\x07\xff+\xb8\xa2\x00\x01A&\x02" \x02" \x02" \x02"P\\\x04|S\xa4\xb8J\xa5\xd2\x88\x80\x08\x88\xc0\xf4\x10\xf0B\xc0\xbb\x91\xdc\xa7\xe1\x14\x02\'\'\xfe1?|\xe2B\xf8\xe1d\x10\xb5\xd7\xae\xb24\xba\xd1N\xcb\xec\xaf^\xec\xf3\x82\x0f\x84\xa1(\xa2\xfa\xa2%\x8c\xeeC\x84a\xcf\x10\xc4=t\xdd\xc5\xcc\xa9C\xbb;l`\xfb!\x1b\xdc\xd1\x89H\xbf>\xe6jl\xa3\xb8\xe7\xbf!&(V\x8d\x9d\x90\xb6N\x98\x80\x17T=\xf7g\x18\xd3.\x8e(\xc1\x92\x85\x10\x05\x17\xd6\xb9n\xc4\x89\xc6JK4\x95c\x96\xdcR\x88\x81)\xcb\xb0\xfb\xf0 \x04AF\x0b\x86\xebH\xb1\x8d)H\x114\x11\xb1\xdd\x1f\xbd\t\x11\xac\xa8\xd3\xe4wlBt\xa0\x98\x1anH\xbb\x0c\xce\x99E(\x08\xf2~\x97\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@Q\x10\xf0\xcd\x8c\xa2(\x8c\n!\x02" \x02\xd3H\x80\x02\x00\x85\x81\x8b\xe07\xc1\x13p>3\'\xf7\xdc\xa4\xb8\x83\x81\xe0\x92\'\xd4Z\xcb;.\xb5L\x1f\xc6,{\x06\x81\x07\xe7\x1a\xdf\xbc\xa0\x83\x08/\x17\xddW\x86a\tq\x8e\xe1\x14\xa3\xc0\xd26\xb8\xf5\x90\rl:\xe0\xa2\xfb\x86\x0e\xa0[\xef\x81nD\xfd\x8d\xa3\x8a\xb8R\x05\xc5\x92\xd87>\xf3\xd9\xf8$W\x88\xe5`\x82\xe3\x18\xc7\r\xe4\xc4\x18\x89\xfa\n+YRg\xc9e\r\x10\x07k\xd1\xdd\x1c\x91\x9f\xe8\xf6\xcd\xcf\xd9\xdd<\xd3\x8f\xbaGQ\xd0]rTs\xd6\xf4B6v\x05\xae-\xb5\xfe\'\xd0\x15\xf8KwfK\xc2\xb2\x8d\x8fj\xac\xd2zq\xff\xbf\xf0\xe1\xf5\xf0cOa\xacT\xb5M\x04D@\x04D@\x04D@\x04D@\x04\xf2\x84@\xd0\xe2\xcb\x93\xdc(\x1b" \x02"\x90\x1f\x04\xbc\xf8\xd7\x88\xec\xdc\x0e?\x19N1prRI %D \xe6,\xf8\xd0\x95\x16\xab.\xc3\xa4\x05\x83N\xb0C\x9a\xcfl^\xecc:\x8c\xeec\xb7Nt\xe9\xe5\x0c\xb3\x9cE\x96\xd1}\x83\x18\xa3op\x1bD\xbf\xa7\x0eB\xf8;\x08\xedc\x0c\xf5\x83b\x92/\x19?\x1fc\x97g\xce\x8c\xf6\xc8\x1b\x02\xa3\xc4\xc1\xf1\xafg\x02"`\xe9\xb2z+Y\\g%\xf3\x105\x88\xae\xc4\xd1\x8a\xa4\xa5\x19\x1d\xe8"\x05Q\xb5Y\xc7F\xba\x0e\xa3\x92L\xae\xa6\xcf"\x1a\xcc\n\\\x87Y\x81o\xb8\xd7z\xef\xdf\x81\xfc\xa3\xae\x8f\'x\x8f\x9fK\xde\x11\xbc\xcf/\x86s\xbc\xcf\x91\xbb\x05\xeb2\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(h\x02lN\xcaD@\x04D@\x04F\x13\xf0\r\xff\xff\xc1\xe6\xab\xe1>:h\xf4^\xc7\xf8\xae\xf1\xd5gY\xc59\x8b-\xdd\xd6\x9b\x15(\x8ev\xf4\x91\xb6\xe7\xc0\x19\xfd\xcb\xc2\xf2\x19 \x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\x82&\xc0\x9f\xf22\x11\x10\x01\x11\x10\x81,\x01/\xfe=\x0fo\x7f\ng\xe3\x9f>\xb9g%\x85\x17\x88\x12\x9c\xa5\xb4\xf5}\xcf\xce\xce\xbe\xeb#\x93\x90\xa83v\xbb\x0cG\xf9Q\x08\x84\xf02\x88\tBz\xd7\xed\xb2\xfe\xc7\xf7\xda\xe0\xae\xaeq"\xfc\x90>s\x87C$\xfaeq\xea\xf5\x19\x08\xb0&{\x01\x9aB\xf1\x18\x11r\xb1\xca\x12+YPke\xa76[\xe9\xaay\x16\xab-Ct &\xda\xc08\x82\x99\xde\xa1\xec\x18\x82\x14\x12\xf32:\x10\xe3\x01\xd6\x94\xda\xdeO\xdfb\x03\x98\xddz\x12]\x81\xbd\xe0\xff=\x90z9i\xc1\xc7\xa0\x84\xad2\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11( \x02\xfca+\x13\x01\x11\x10\x01\x118,\xa5-\x01\x8c;\xe0\x0b\xe0l\xf8O\xf99\xb9\xe0=\x97[|~\x8de:\xfb\x91\x1a\x92d\xaa\x10S(\xaa\x18\'h@\x04Vj\x0f\xa2\xfc\xb6\xb7\xdb\xc0\x93\xfb\xac\xe7\xe1\x9d\xe8\x86\x99\xd3\xa5\x97\xa2\x8d\xc4>\x80\x93M;\x01W\xc3\xf1\xc2\xe5\x18\x11\x82\x8cD\xad8c\x81%On\xc4\xf8\x81\xb5\x98X\xa4\xc6\xed\xeb\xc4@\x17\x1d\x88\xba\xea\xef\x14\x8eO9\x9b\x86\xfcG\xab\x92n<\xcc=\xff\xe7\xd6\xc9\xe6\x84\xa5\xa1\x10x\x16|\x1d\xdc\xdfyX\x95\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@a\x12p?\xfb\x0b3\xeb\xca\xb5\x08\x88\x80\x08L\x1b\x01>\x0b\xe9\x18\t\xcd8\xfe\xd7Up\x1f\t\x84\xd5I\x18S\x83\x8cP{\xf5*\xaby\xf6rK\xed\xef6\x8eQ\x16-OB\xf8C$\x15"\x01\xd3\x9d\x03\xd6\xf7\xc8n\xeb}p\xa7\x13\xff\x8e\x18\xc7\x8fi\xa8[\xef$\xe0\xeb\x90I\x13`\x9d\xe3\xad\xe0$/T`Ja!\xe3D6%\x8bj\xac\xf4\xf4yV\xb1z\x81\xc5\x9a\xaa,Z\x82\x19\x86\xf1/\xd37\x98\x15\xae)r\xcf\xa6\x10\xe8\xba\x02W\xd8\xc1\x1b\xee\xb1\xee\xc9M\x08\xc2\x98Z\x12\xf8\x12\xfc-p>\x17r\x14yl\x91\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@\x01\x11p?\xf5\x0b(\xbf\xca\xaa\x08\x88\x80\x08\xcc\x04\x01\xdf\xf5\xf7\xff"\xf1\xbf\x81OQ\xfc\xc3\xa3\x15"D\x19D\x92\x96\xb7\\\xe8f\xfc\x8d"\xd2\x8f\x13\x14\xf4o\xe6,\xbdm\xd6\x03abhW\xc7\xe8\xb2\x8cD\xf9\x1d)\xbc\x8c\xdeQ\xefD\xe08\x12\xe0/\x05\xdfm8\'B0ZQb\x15kZ\xadt\x05\xc6\x0f\\\\c%\xcd\xd5\x98]8\xed\xc4@7n \xbb\xb8\xf3\xf8\xe3)\x08\xe2\x9c\xd1\xcaRK\x1d\xec\xb6]\x9f\xb89\x0b\x8ay\xc8\x113\xb3\x1f\x8c\xf9\xea\x05\xc0\xdd\xf8\xf4|\xf8V\xb8\xa2\x00\xc7D\xa5\x8d" \x02" \x02" \x02" \x02\x85B\x80?\x89e" \x02"0\x97\tx\xf1\xef\xcd\x80\xf0E\xf8\xb4\x88\x7f\x89\xf9U\xd6\xfa\xe1\xe7\xb9\xb1\xfb\x86vvX\xcf\x03;\xd1\xb5w\x97\xa5\xf6v\x8df\xed\xc4\x11\xbch\x1c\xbf\xd1\\\xf4.?\t\x1cE\xa4\x8e\x96&0\x99H\xbdU\x9c\xbd\xc8\xcaV6Y\xc4G\xbbr"\x91\xde\xc1l\xf7bt}?.\x06\xa12\x86\xb17\x0f|\xfb~\xeb\xb9sKV\xc0\xe4\x98\x87\x137\xff\x1cx\x1b\x0e\xf9\x02\xdc?\'&\x9e\x82\xf6\x14\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81<" \x010\x8f.\x86\xb2"\x02"p\xdc\t\xf8F\xfd\x1583\'\xfd(\x0br0%\x95"\x861\xd3\xea\xaf_c\x99\xae\x01\xeb\xb8i\x83\xa5\xdazG\x17\x8c\xddz\xa9E\x1c\x9b 1:\r\xbd\x13\x81| \xc0_\x11\xac\xcf\x94\xcbrB\xec\x92K\xb2b`ry\xa3%[kQ\xdd\x87m\x18B \xbb\xbf\xdbLG\x06BP\x8f\x96\xc5-\xdd=h;?\xf2\xeb\xc9\x90\xa2$\xcf\xd2\xdd\r\xbf\x10~L\xea!\xf6\x97\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@^\x11\xe0\x8f[\x99\x08\x88\x80\x08\xccE\x02|\xfe\xb1Q\xbf\x10~;|1\xdcw\xfd\xc3\xea\xe4\x8d\xb3\xa8fR\x10;\xfa\x87\x0e\'r\x94\xc8\xa9\xc3;iM\x04\n\x98\x80\xaf\xe3\xe9#\xb5\xb2\xe4\xe2:\xabX\xbb\xd0\xca\xcel\xc5\xac\xc2\xa5\x16\x8d\xc5,3\x001\x10\xb3\n;!|&\xba\x08Cp\x8c\xd5\x97\xdb\xc1o?`\xddwm\xc9\n\x959]\x98\'@\x9b\xcf\x84s\xe1\xf7\xc1\xd5\rx\x02\xc0\xb4\x8b\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@~\x12`\xf4\x8bL\x04D@\x04\xe6\x1a\x01\x8a\x7f\xf4R\xf8\x0f\xe1g\xc2}\x97?\xacN\xcd\x861\x06\x9a\x1b\xff\x8c\x91Qa;R\x17\t\x7f\xaau\x11(|\x02\xe1:\xee\x04A\xdc\x03\xd8\x96\xee\xe8\xb7>\xccp\xddu\xcbF\x1b\xc08\x98\xc3\x03)\x8b&\x13\x98U\x183\n\'\xe36\xcc\x88@:\x05:\x1e\x97s\xebL\n\x0c\x92\x8b\xa0\xcbq\x1c]\x81\xbb\xef\xd8<\x99\x18>\xffL\xe0`\x9d\xbf\x85\xf37\x13\x05A\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14\x1c\x01\t\x80\x05w\xc9\x94a\x11\x10\x81i \xe0#y>\x8f\xb4^\n\xf7\r\xfdiH:H\x82\x02FX\x0c\x99\xbe\x94\x95\x92\x08\x14\x0e\x01\xde\x03\xbc\x17b\x87\x15\xbd\xd4\xc1^\xeb{l\x8fu\xdf\xbe\xc5\xfa\xd6\xefC\x97\xe0\x0c&\x0f\xa9\xb2XM\x99\xc5 \nfR\x14\xd0\x83\x03\x0f\x1fv\xece\x86\x00O\xa11\xb9\xa0\xc6\x06\xb6\x1c\xc4L\xdc=\xd9|L\xfc\xbe\xa4\xd8\xc7g\x05g\x01\xbe\x11\xce\x90\xde\xa9\xe4\x08\x87\xcbD@\x04D@\x04D@\x04D@\x04D`v\x08H\x00\x9c\x1d\xee:\xab\x08\x88\xc0\xec\x11`c\x9e\x82\xdf\xfb\x02\x9f~\xf1o\xf6\xca\xa63\x8b@~\x12\x08\x8bn#\x91\x81\xc3n|\xcc~\x88\x81]\x7f\xd8h\xa9C}6\x0cy-\x81\x88\xbdxC\xb9\x8b\x06\x1c\x89\x0c\xa4\x9a\xce\xe3\x8e\xd58\xce&\xa2\x00\x13U\xa5\xd6\xfd\xc7\xed\xc7*\xca\xfb\x13\xd6\xe3\xb4\xbf\x80\xef\x82\xf3wS\xb84x+\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\xfc\' \x010\xff\xaf\x91r(\x02"0}\x04(\xfe\xa5\xe0\xd7\xc1\x19\xfdGc\x84\x8fo\xe8\xbb\rz\x11\x01\x11\x98a\x02\x94\xd0(\xe812\x90\xeb\xf0\xc1\xed\xed\xd6{\xff\x0e\xeb\x85P7\xb4\xa7\x1b"`\x85\x954VZ\xb4"\xe9>w]\xeb\x8fU\x08\xc49\x86S\x19K\xb4TZ\xcf\xbd\xdb,\x83\x19\x89\x8fAH\xe4s\x81\x7f @\x06\xec\x8f\xf0\x07\xe0|^\x14\x9b\x00\xc8r\xd2Y\xb6gr\xeeG\xf3\xc7d\xdf\xe9U\x04D@\x04D@\x04D@\x04D \xef\tH\x00\xcc\xfbK\xa4\x0c\x8a\x80\x08L\x13\x01>\xef\xd8\x98\xbf\x14\xfe}8\xc7\xffS#\x16\x10d"0k\x04\xc2RZ \x06R\xa4\x1b\xdcv\xc8\x8d\xdb\xd7\xbf\xe1\x80\x13\xf0b\xb5I\x8c\x17X\ry*\xeaf\x13v\x13\x87\xb0\x83n\x06/n6m$\xc4\xf0A/O\x85\x0b\x84}\xa2\x15\xa5\xae;0\xd3s\xb3\x16\x87\xcf\x1b\xde\xf7\xc8u\xeeIQl?\x9c3\x85\x17\x83\xb1<|\x1e\x92V\x98\x04\xd7\'\xe2\xd8m\xc4|Z\xdc\x10Nkd\x07\xad\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xe4\x07\x81\xb1~*\xe7G\xce\x94\x0b\x11\x10\x01\x11\x98>\x02l\xa4R.X\x0e\xff=\xbc\x15\xae\xae\xbf\x80 \x13\x81\xbc#\xe0\xbb\xfa:a/\x9b;N\x18RzR\xbdU\\\xb8\x04\xcb&\xcc"\x8c[:\x1e\xb5H\x1c:\x16\xf6\xcb`\xac\xbf\xcc\x10niN\xc0\xc3\xe3\xdc\xaf\x1b\xec\xc3;\x1f\x93\x8bD\xab\xcb *\xb6\xd9\x9e\xffsk6\xc1\\\xe9k|\x08\x14\xb5\xb8\xf7:\xf8Z8\x9f\x1b\x85h,\x03\x9dD\x18\x05\x1d6\xf4\xb7\xb6\x06\xf8)\xf0\xf9\xf0f8\xbb=s_\x1a\x9f\x9dPNm\x1f\x9cB\xe8F\xf8\x1ex\x1f<\xcc\x83\xfb\xf3\x1c\xdc_b \xc8D@\x04D@\x04D@\x04D \x9f\x08\xf0\x87\x9aL\x04D@\x04\x8a\x99\x00\x9fsl\x8c\xd6\xc2\x7f\x03\x7f\x16\x9c\rT\xdf\xb8\xc5\xaa\xec\xb8\x13\xc0U\xc9~\x01eW\xdc\xfaXW\x04W\xca)\t\xc1\xcb\xe1\xf5i\xcc\xb1\xcf\x0b\x84\xa71\xf3\xc1\xda\x02;|\xee\xe1\xd0z\xf63\xbd\xce\x10\x01\x8a\x81\xbc(\x9c\x1d8d\xf1\xa6\nK.n\xb0Dk\xb5\xc5\xebJ-\x86\xee\xc2\x89z\x8c\x1dX_\x86\xfd#Y1\x90\xa2 \xba\xff\xba\x19\xb9qx\xa4,n\xbb?y\xb3q\x12\x12\xd7\r8$0\x86\x92\xce]\xe5\x89\x99\x83.\xf8Bxg\xf0~t\x86\xb01O\xcd\x8bra\xa1\xae\x11y=\x03\xbe\x06~a\xb0\xce\xb2%\xe0\x131\xa6EA\xf0q\xf8\xbd\xf0\xbb\xe1\x8f\xc2)\x0c\x86\xcd\x8f\xb7Z(\xac\xc2y\xd7\xba\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14\x1d\x01\xd7\xd6)\xbaR\xa9@" \x02"\x90%\xc0g\x9c\x93\x0f\xb0\xfc\x0f\xf8\xeb\xe0l\xbcj\xf8\x03@\x98Q\x03\xf5\xec\x17Lv\xc5\xad\x07\x02\x1f\xd7\xd3ih\x02\x05.\x0b\xc4\xe2\x18_\xceC<\x1eB\xa5?\xd7\\\\R\x08d\xfda\xbd\x19\xc7bUI\x8b\xd7\x96Y|^\x95\x9b\xf9\xb7dI\x9d\xc5\xe7\xd7X4\x81HA\x1c\x9fXXc{>\x7f\xbbu\xdf\xb6\xe9X\x04@\x7f6>7\x18\x01\xb8\x0e\xce\x9c\x04\xb20\xd6\xf2\xd3x\x9b\xf19\x97\n\xb2\x07e\xd4.\x86\xbf\x02~\x1e|%|,#\xe0\xf1 3M\xfaX\xc6\tR\x1e\x81\xff\n\xfeS\xf8f\xb87\xe6\x83\xbc\xc6K\xd7\xef\xa7\xa5\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0\x0c\x12\x18\xef\x87\xdc\x0c\x9eRI\x8b\x80\x08\x88\xc0q#\xc0\x86\'\x1b\xeel\xf0\xde\x02gD\n\x9f{\x81\x14\x855\xd9\xa4\x08P\x8fa\x14\x95\xfb\x12\th\x0eC\x9c\x99XP\xd5\xe1S&J\xa2VZ\x99\xb0dY\xccJ\x10\xa1U\x82e)\xd8\x9f\xb1~.\xf1y\x7f_\xda\x06\xb8\x84g\x8e"B\x1d.Yh\r\x90(@1\xbf\xb4a\'\x85\x1c;\xab\xec\xd1zu\x04X\x01]\xe5#P\xfa\xf8\xdaR\x02c\x07& \n\x96\x9d\xd2l\x03[0\xb6\xe0\x9d[\xb2\xc7\x8e\x7f\x88;\xc5\x18/\xcf\xc3\xb6_\xc3y%s\xab\xd8\x18\xbb\xcf\xca&Ra\xfe\xf8\xdc\xa3-\x82\xbf\x1c\xfe&\xf8I\xf0\xb0Q\x1c\xe4\xbe<\xc6\xd3\x0c\x7f~\xb4uG\x1d;\x90\x03\x8f\r\xffQ\xa5\x1f\xef\x7f\x02\xff\x0e\x9c\xbc\x06\xe04\t\x81Y\x0ez\x15\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81Y!p\xac?\xf8f%\x93:\xa9\x08\x88\x80\x08L\x92\x00\x1b\x9cl\xa8~\x12\xfe\x1e8\x1b\xbc\x14\x01e\x13%\x80o\t\xf7E\x11\x12\xfb(`\r\xe7t\xc9\x1c+\xb9\x18\xc6gkZTf\x8d\xad\xe5\xd6\xb0\xa0\xc2\xea\x9aK\xad\xb6\xb9\xcc*\x1bJ\xac\x1c\xa2_i\x05\x05>\x08~\x15\tK$!\xecA\xc4+\x81\xb0\x97\x80\xe0\x97@\xd4\x16\x86n\xc3\x1c\x0f|\xc1\x7f\x88n\x19\x9c\x93\xe7u\xf3>\xe0\xb2\xba<\xe0\xea\xba\xac\x04b\x8e\xdf\x7f\x94\xc4\x8b\xe3\xf9>J\x05\x0e\x85\xc1<\x12\xae\x07(\x05C:\xdfG\xf1\xe2\x96\x18[.\n\x01\x91\xfb\r\rd \x02\xa6m\xb0\x0f\x93RP\x00\xe4\xe4\x14X\x0eb;\x05\xc2\x9e\x8eA\xeb:8`\x07\xf7\xf6Y\xc7\x9e~k\xdf\xdfk\x87\xf6\xf5\xd9\xfe\x1d}N,\x1c\x8bIx\x9b\xd3\xb08\xf1\x05lD\x14to\xdc&\xbd\x1c\x0b\x01\x87\x11/\xb8\x96Yi\x0e\x15"\xa8\x13\xc7\x92\xcc3\xec\xfb"|\xfe\x0b\xf8\xc8Y\x9ea\xff\xe3\xfdq8_M8\xf9;\xe0\x8c\xf8[\x02\xf7Fa\x90\xb4\xbc\xfb\xedS]\xf2.#q\xe6\x81i{\xbb\x1f+_\x81\xdf\x08\xef\t6\x86\xf3\x19l\xd2B\x04D@\x04D@\x04D@\x04D`\xa6\t\x84\x7f\xa4\xcd\xf4\xb9\x94\xbe\x08\x88\x80\x08\x1c/\x02\xb9\x91&\x1c\xa7Jc\xff\x1d\x8d>\xbe\rFE\xa9M \x9a\xaf\xbc\xba\xc4j\x9bJ\xac\xa6\xb1\xd4\x1aZ+\xaceI\x95\xb5\x9cPa\xf5\x10\xfc\x1a\xe7WXEm\x02J\x00\x13\xa6\xc0\x86\x93SDt\xdf:\x88\xd0\xc3\xd8lix\x8a\xc2\x1e\x96\x19\xc8\x12\xc3P\xf6R\x90h\x87\xa1\xfcQ\xe4\xa3\x94\xe0v\x0f\xf2\x1d\x1c\xea\xdee\xd3\t>\xf0\x0b\xb7\x03O4\x961AXH\x14\n\x07\x8d\x8dZ\x0fv\x8d\xa2\x16\xc5(\x0cB2\xe6\xa4\x13\x11\x08\x83q\n\x86\x10\xed\xa2\x98\x80"\x06g\x82N\x10\xc52\x82\xe3\x98<\xd6l\xa0{\xd0\xf6\xef\x86 \xb8\xab\xd7\xf6\xef\xec\xb5\x83\xbb\xfal\xdf\xb6.k\xdf\xdbom\x10\t;\xf7\xf5\xbb}\x99\xa5\xf1,+P\xe2S\x9f\xee\x04D\xd7\xf1\xd2\x9a\xd3\xdb\x9d\xd2\x9a\xadK\xc3\xbc\xd0\xa1:p\x8c\\\xae\xc5\xfe\xff\x03\xe7\x85\x0fj\xc91\xa603\xbb\xb3\xe6\xd3\x99\'N\xe8\xf1Z\xf8\xfb\xe0\x0b\xe14\xfe\xe1\x83\xcfDw\x87p\xc3\xb8\xe6o\xac\xdc==\xb3\xf0\x8d2n"\xee\x03/4\xfa\x1br=\xb6~\x0e\xfe\r8#\x04y\x06z>qDvd" \x02" \x02" \x02"P\xbc\x04r\x7f\xe2\x15oIU2\x11\x10\x81\xb9@\x80\x8dM>\xd7\xd8\xf8\xa4\xad\x82\xbf\x17\xce.p\x13k\x00c\xc7\xb9`^\x88sKP\xcb\xa0\x8b\xecx\xc6\xee\xb8\x0bO\xaa\xb6\xd6\xe5\xf0\x93km\xde\x92\n\xab\xaa/\xb5\xea\xfa\xa4U\xd6%\xe0I\'\x8a1:\xceu\xaf\x1db7[\x88x\x14\xf6\x82\xe6\xbd[\xe2\xc5\x9d\x85/\xb8J>\x0fn=\xfb\xe2.^\xf6e\xbc\xdc\x1c\xe7\xed\xc8\xab\xcf3\xa4>\xbcq\xaf\xd9\x8d\xe1r \xba\xd0\x89\x9c\xc8\x9e\x8b$\xc4K\x1c\xdd\x9b\x9d#\xba1\xe1\xba&G]W\xe3ND\rv\x1f\x1a0.\x191\xb8kc\xa7\xed\xdc\xd8a;\x9e\xea\xb2\x03;|\x90\xd4\x91\xe5d\xc5\xa6\x08\xe9\x04\xc1 S\x13\xd7c\x8eLO[\x8e\x89\x00\x89_\x05\xbf\t\x9eO\x02`8/\x97"o\xff\x02?\x07N\xcb\x15\xe1\xb2[\xc3\xaf\xaeR\xf1f\xe4\xde\xaeR\x85?\x1d{\x1d"\xb83\xee~\xf4\n\xc8=\xf8\x04\xf0\xcfe\x1e\xc6\x88\xc0\x8f\xc1\x7f\xcc70>\x97\xfd\xf3\xdam\xd0\x8b\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0\xcc\x10\x08~\xc5\xcdL\xe2JU\x04D@\x04\x8e\x13\x016"\xd9\xd0\xf4-X6\x80\xdf\x00\x7f\r|\xa23[b\xd7\xe24\nm\x8c\xeec3\xfch\xe3\xf4\x95W\xc5\xd1]\xb7\xd2\x9a\x96T\xda\xe2Sjm\xf1\xa9\xb5\xb6pE\x95\x8b\xf0\xa3B\xc0\x1e\xb4\xec*\xeb"\xf5 \xf0\xb1+lz\x08\xe3\xeaa9\xd2\xcawM}\x88aD\xe9^\x8a\x93\xe93\x96\n@\xc8\x84\xe1\x81\xd4H\x9c\xe3m\x1cQ\x83\x1c\xf70\x91\x8c\xb9n\xcf\xecn\x9c\xedR\xcd\xca;l\xa9\x81\xb4\xed\xdd\xdam;7tA\x18\xa4(\xd8\x81\xc8\xc1^\'\x0c\x0e\xe2\xb3\xb1\xcc]_\xdf\x95\x18\xbb\xb8(\xb7\xb1v\xd4\xb6\xa9\x10\x18\xc4\xc1+\xe0[\xe1\xfc\xed\xe4\x9f5X\x9d5\xf3\xe2\x19\xa3\xfe>\x04\xe70\x07\xcc\x1b+\x8a\xbb\x13\xb1<\xd2XWX9\xc7\x10\xef"\xe8\xb6\x1fAW\xfc(\xc7\xd8LdGKp\xdd\xee{\x06m\x18]\xe0\x87Sc\xd7Asi\xb2\xa2\x1fy\xba`\x0b?\xe1Y\x99g\xda\x8f\xe0\x8cR|\x8ao`\xcc\xaf\xbbe\xdc;\xbd\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08L;\x01\xfeP\x94\x89\x80\x08\x88@\xa1\x12\xe03\x8c\rG\xdf*=\x13\xeb\xef\x84_\x03\xaf\x80\xd3\xf8\x99ot\xba\rE\xff\x02*\xecz\x1ba\xa9\xd1\xec\x1eo\xd2\x8a\x05+jl\xc5\xda\x06;\xf1\xcc:k^Tmu-I\xab\x9b\x871\xfaj\x93\x18\xfb.\x85q\xec0\xee\x1d\xc6\xbf\xf3\x91|\x8c\xe2\xa3\xf8\xc74\xdd\x84\x16P\x9e\\\xb7a}\x93L\xbcJ\xf1zP\n\t\x84A\xcf\xd2\x8dO\x88\x9a\xcc\xae\xc5%\x10\x089\x19\n\xc7D\x8ca,\xc4\xce\x03\xd9H\xc1C\xbb\xfbl\xef\x96n\xdb\xfc\xe8!\xdb\xb4\xae\xcd\x89\x83c\x9d\xd8\x8fk\xe8\xa2.!\xf2\x8c\xa1\xf3\x8cu\x98\xb6\x8dM\x80W\x8b5|/|1\xdcOh\x81\xd5Y\xb3\xf0s\xefd\xe4\x82c\xec]\x12\xe4f\xfc\xe7\x1d\x95\xe2\x9c\xca\x10\xab.\xb5\xf2\xd3\xe7Y\xf2\xc4F\x8b\xd7\x95Y\xb4\x06\xd1\xbc%\xe8\xba\x8f\x88\xd5\x88\xeb\xe2\xce\xaa\x8a:\xd4?d\x19<\x132\xbd\x03\x96j\xeb\xb3\xc1\xed\xed\xd6\xf7\xf8\x1e\x1b\xda\xd3=\x1a\x02\xa3\x03y\x0eR\x1b\xdb\x98?/N\xee\xc6:\xa3\x01\xbf\x10\xec*\x110\x00\xa1\x85\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xcc\x04\x01\xfe\x88\x94\x89\x80\x08\x88@\xa1\x11`C\x91\xe6#F\xd6b\xfdm\xf0W\xc3\xb3a+sH\xf8\xf3\x11`|\xa0\xa7\xc7\xe9\xca;\x7fi\x95\xcd;\xb1\xda\x96\x9eVg\xcb\xcf\xaa\xb7\x13\x10\xddW\x8a\x99u#\x11\x8cX\x87F;\x8f\xeb\x87\xd87\x84n\xbcit\xe1\xa5eE\xbe\xc3][\xddF\xbd\xcc8\x01\'\xdc\xe1\x85B!\xaf)\'H\xe1\xac\xc7IFf%0~"\xbbjBd\xe9\x87@\xbb\xed\x89v\xdb\xf8`\x9b\x13\x05\xf7n\xea\xb2=[\xba\xc6\xac\x03N\xa8\xa5 \x8cK\xcb\x08\xc1\x1c\x1dh\xc6\xcbT\xc0\'\xf0\x82\xda\xf7P\x06\x0e%\xc0K2\xbe\xbc5\xf3\x05\xe5\xf9\xe9\xbcI9)\xc9\x97\xe0\xadp\x8e\xf3\xe7\x9f}X\r\x19E\xb9\xd0\xf8\x91\xf1\xa6J\x88~-Vy\xceb\xe3\x0c\xc9\x94\xe3\xf8\x0cp\xc3\x00 \xa2\x97\xfd\xf69&\xe7H\xff}|\xce10]\xdfvD\x08\x8eD\xad"\xd9\xe1\x8e\x01\xeb]\xb7\xc3z\xd6\xed\xb1\xfe\xf5\xfbB\'\xc5*\xa3\x02\xc7\xefV\xec\xb9\xf2\x98\x1f\xc2\xdf\x05\xdf\n\x0fj\xe9\xac2F6d" \x02" \x02" \x02"P|\x04\xf0\xebL&\x02" \x02\x05C\x80\xcf,\x8a\x7fl<\xd2N\x82\xb3\xdb\x1b\x1b\xe6h\xc9:\xe3g\xdc\xa7\xa8\x9fo\x14\xfd8\x88\x1e\x97cE\xf8-Dt\xdf\xaa\x8b[\xec\xc43\xea\xadqQ9&\xe7@W^\xcc\xc2;\x84n\xa4\xfd=\x88\xec\xebM\xb9I8(6q\xd2\r\'\x02 -?S\xae#\xa9\x97\xbc \xe0\x02\xaap\xa1\xbch\x17A7l\x8e3\xc8IH\x92\x88\x14LVB\x1cD\x97b\x8e)\xe8&\x1c\xc1\xa4#;6t\xd8\x93w\xef\xb3\'\xef9`C\x83\xfev9\\\x1c/\xe20Q\x9f\xee\xe1O\xb5\x16\x10\xa0\xd0G\xa1\x8d\xa2\xd4\xd5p\x8e[G\x91\x8db\xdbl\x98\x7f\xa61_\xef\x86\x7f\x1c^\x02\x0f\x8bix\x1b\x18\xf7\x0eI\x95\x8c\xf2\xab\xbe\xfcD+=\xb9\xd9b\x95I\xcbt\x0fXf\x10E\xe1\xd1\xec\x87Nsg@\xe5\xf2g\xcan\r\xd2\xe1\xc3"\xd8\xc0\xcfY\t\x11\xa1\x1a\xc5l\xde\x11\xcc\x983\xb4\xe3\x90\xf5<\xb4\xcb\xbao\xdddi\xa4\x9d5\xec\x88?2\x8c\x1c\x17l\r\x16\xc1I\xdd\xf3z\x1b\xb6\xfd\r\xfc\'p$\xec\x8e\xf0g\xc3[\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0T\t\xe4\xfe\xc4\x9bjz:^\x04D@\x04f\x82\x80kn"a\xafd\xac\xc4\xfa\xab\xe1\x8c\xfa\x0b\x0b\x7fl\xa8\x17\xa5\xf9(?\xca\x11\x99P4\x8f/\xec\xe2Sjl\xe1\xcaZ;\xed\xfc\x16[y>\x1a\xfa\re.\x00\x87\x91=\x03\xe8\xba\xd7\xdf=\xe4\xc6\xea\xe3\xfe\xec\x1a\xcc\xb1\xfcd\x85O Ca0\xb8+b\x88\x14,+\x8b\xbb\xee\xc3\x11DlQ\xd8\x1d\xec\xcf\xd8\x96\xc7\x0e\xd9\xfa{\xf7\xd9\xa6\x87\x0f!B\xb0\xdb\x8d1\x98[\xf2\x91n\xc3\x88\xd8\x92 8B\xc7\x0bk\x9b\xb1\x85\xb3\x88\xb7\xc1\xf9,\xf2\xc2\x15V\x8f\x9b\xf1\xbc\xfe\xdc\x9f\xc6:\x05@\x1a\xf3r\xe4\xcd\xcc\x07Fp!\x93\x0bk\xad\xee\x9a\xd3\xadtE\xb3\xfbcA\x06\xe3\xf9\xd9\x10\x84?7\xa8\xa7Kcj/\xfc\x03\x02\xb2\x16\xad\x84\x10\x08!:\xd3\x9f\xb6\xde\xfb\xb7[\xd7\xef7\xda\xe0\x9e\xae m\xe4g|!\xd0s\xa6\xe0\xf7a\xf8\xc7\xe0L\x94\xcfs\xff\xcc\xc7\xaaL\x04D@\x04D@\x04D@\x04D`*\x04\xf8cR&\x02" \x02\xf9L \x1c\r\xc2q\xfd(\xfaq\x9c\xbf\x96 \xd3l r\x9f\xa2{\x9e\xb1\r?^\x94_\x02\xddAW]\xd8bg\\>\xcf\x96\x9c^o\xf3\xd1\xbd\x973\xf2\xf6u\x0eY_ \xf6yq\x88\xed|F\x8d\xb9\xf4\x02hZ\x14\x1f\x01\xea=\x1c\xa3\x91\xc1\\N\xdb\xc1K\x14\x11Z\xa5\xe5p\x883\x9c|\xa4}o\x9f\xed\x86\x08\xb8\xf1\x81\x03\xb6\xee\xd6\xbd\xb6\x1e\x11\x82\xa9\x9c\x89\x1d\xa2\xec\xba\xc9\xb4\x90\xe0\x1c\x17\x03)H\xf1\xf9\xf2V\xf8\xd7\xe0\x14\xa4f#\xfa\x8fO\x02\xe6\x85\xc6\xf1\xf2\xde\x02\x1f\xfb\xb9\x17\xda\x93\xe3\xf8\xd5\xbf\xf4\x0c\xab8w1v\x1f\xb6Lg?/j\xb6rp\xbf\xe96\xff\x87\tD\xa6\xc6\xab\xca0a\xc8\x90u\xffq\x87\xb5\xff\xfcqK\xf3\xdc\xb4\x900\x99\xdd0\xf2\x9aU\x11\xb1\x07\xb6|\x17\xfefx\x07\\" \xc8D@\x04D@\x04D@\x04D`:\x08\xcc\xc4O\xc0\xe9\xc8\x97\xd2\x10\x01\x11\x10\x016\xfc\xd8(\xf4\r\xdf\xeb\xb1\xfe\xf7\xf0\xd3\xe146\xc4\xb9OQ=\xc7\xa2\x88\xd8\xa3x3\xd6X~KN\xab\xb5\x131i\xc7Y\xcfn\xb5\x93\xce\xac\xb78\xa2m\x18\xcd7\x88q\xfbz\xbb\xb2\x11~\xd9\xa1\xba\x90\x00%Q\x99\x08\x80\x80\x17\x82\t#\x81\x08\xc12t\x19N@\x1c\xe2\xe4.i\xf8\xd3\x88\x0c|\xe8\x96\xdd\xb6\xe1\xfe\xfd\xb6\xf9\x91v7\xe9C\x18\xdc\x1c\x8d\x0e\xe4s\x87\xcf\x96v\xf8\xf3\xe0\xf7\xc0i\xbc\xb3\xb8\xfdxE\xa6\xf9\xe7\x1b\xbb\x1e\xdf\x00\x7f%\x9c\xcf>\xbe\x1fm\xa1\xb1\xfe\xca0\xb1G\xc3uk,\x8eH\xe0T;\xc47\xd7\xcd\xdf\'5\xfa\xb0\x19y\xc7\xb1\xff \x04r\x92\x91L\xdf\xa0u\xde\xbc\xc1:~\xbd\xfe\xf0\xa9\x98\x15\xffd?\xbc\x95[\xc8\x95e\xbb\x03\xce\xb2n\x81K\x04\x04\x04\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08L\x95\xc0q\xfc58\xd5\xac\xeax\x11\x10\x819B\x80\xcf%6\xb2}\x03\xfb\n\xac\x7f\x00~9\x9cFQ\x90V4\x12\x17\x83b(\xfc\xa5s\x07\xcc\xc7\xf6\xd5\x18\xc7o\xedsZm\xe9\xaaz[\xb0\xbc\xc6\xca+\xe2\xd6\xdd>\x88\t \x86,5\xc4\x08\xad\x8cS#\\\x97^\x92\x93\x89\xc0Q\x080:0\x13\x8c\xf7\x16\x83Z\xcc\xc9\x1dJ\xcbcV\xc1\x99\x9f\xfb\x86l\xd7\xa6n\xdb\xbe\xbe\xdd\xd6\xdd\xb2\xd7\x1e\xbee\x97\xf5"\xa24l\x8c\x0et\x91\x86\xee%\xfcIQ\xaf3\x12\xed\xfb\xf0\xcf\xc2\x9f\x0cJ\x9a\xfb\x07\x8a`\xf3\xb4.\xfc\x1dMa\x8c3\xfd\xbe\x01>\xb6\xf8\xe7\x9e\x02YE\xad\xfe\xda3\xac\xea\xf2e6\x8c\xeb\x99\xc1X\x9fn,\x80i\xcd\xd6\x04\x13s\xd9\xc1\x0b&\x0e\x89C\x08\x1c\xd8v\xc8\xda\xbe\xf7\xb0\rl>\x98M`\xfch@>\xfb\xc9w3\xfc\x15p\x8a\xaf\x14\x05Yv\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0$\t\xf8\x1f\x97\x93<\\\x87\x89\x80\x08\x88\xc0\xb4\x11\xe0\xf3\x88\x8d>\xdf\xc8[\x8du\x8es\xf5*8\xad\xa8\x84?\x1fU\x95\x1b\xe9\xd7\xd0Z\xee&\xeeXs\xc5|[}\xe9\x02t\xdd\x8c\x19\x85\x9a\x01\xcc\xd0\xcb(\xbf\xf4 \x04?P\xd2\x18~\xd9J\xa1\xd7\xa9\x13\xf0\x11\x82QDl\x95W%,\tA\x90\xe3\n\xa6\xd0\x9dx\xd3Cmv\xdfovb\xfc\xc0\x83n\x0c\xc1Qg\xc3\x1d\x1b\x83 \x88\xdd\x8e\x88\x1a\x1c\xb5_a\xbf\xa1\x8c\xe5\x7f+\xf5`\x9dB\xdc7\xe1\x0f\xc3i|fq\x1f\xff|\xe2\xb6\xe92\xfe\x91\x83i\x7f\x11\xfe&\xf8Q\xc5\xbfhY\xc2\x9a\xdf|\xbe\x95.o\xb4T[\x1f\x8e\xc4\xa1\xf9\xd2\xef\x1f\xdd\x83\xa3\x15ILY\x12\xb3\xee\xdf=em?z\x14\xc5\x81\x85\xa2\x16\xb3\x1bF^\xbd\x08x\x00[\xae\x81\xdf\x06\'kn\x97\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08L\x82\x80\xffQ;\x89Cu\x88\x08\x88\x80\x08L\x1b\x01\xff,bc\xb7\x14\xce1\xfe\xde\x05\xaf\x87\xfb\xc65\x1b\x7f\x85m(e\x04\rr\xb6\xcb\xb3/\xd9\xe2\x94W\'\xec\xbc\x17.\xb23\x9f\xbd\xc0\x96\xac\xaa\xb3\xa6\xd6\n\xeb\xe9\x1c@\xf4\x15f\xea\x1d@7ME\xf9\x15\xf6u/\xa0\xdcg\xd0U\x94\xd53\x82~\xe8\xf1D\x04\xd1\x81q\xab\xa8Ct "\xc9vm\xec\xb4\'\xee\xd9o\xf7\xfej;\xba\x0b\x07Q\\\xbel\xa8\xd7NkB\xe5v\xf5\xdbo/\x8ee\xee3\xe8\x10\x8aE!\xf0s\xf0=A\x11\xa7[\x9c\xf2\xe9}\x0c\xe9\xff\x03|l\xf1\x8fON\xe4\xaed~\xb55\xbd\xf9\x02\x8b\xd5\xa2\xcbm\x07\xba\xfcRX\xcb7c\x843\xc6\xa4d\xb7\xe0\xfe\r\x07\xec\xc0\xd7\xef\xc1\xd8\x80\x98-8(\xc3\x18\xd9\xf5" ys\xa6\xf7\xdf\xc2\x15\t8\x06(m\x12\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\x89\x10\xc8\xc3_\x88\x13\xc9\xb6\xf6\x11\x01\x11(\x12\x02|\x06\x85\xbb\xfb2\xd2\xe3\x03\xf05A\xf9|\x030x[x\x0b\x8a"\xec6\x99\xc9\x99]\xb5\xae\xb9\xd4V<\xab\xc9\xce}\xc1"[\x85n\xbe1D\xc6\xa0o\xa6\xf5t\x0c\xbaY{\x1d\x18Dd\xc9D`6\t\x8c\x8a\x0e\x84P\x9d,\x8dCo\x1a\xb6\x8e\x03\x03v\xffow\xda#\x7f\xd8m\x9b\x1f=d\x9dx\x1f\xb6X\xbch#\x03\xc3B\xdc>\x94\xf9\xf3\xf0\x1b\xe0\xbb\x82\xf2S\xb8c4 E\xc3\xc9\x9a\x17\xff\xfe\x12\t|\x15\xce\xf4\xf8H\xa0\x1fa\xa5+\x9a\xac\xe9\x8d\xe7a\xecP0\xef\x1e\xccO\xf1/\x9ck<\xe7\xe25\xa5\x96F\x17\xe5\x03_\xbf\xd7\xfa\xd6\xef\x0f\x7f\x9a\xbb\xce\xb2\xf3A\xd8\r\x7f\t\xfcf\xb8\xe7\x83U\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0D\t\x8c\xf9cr\xa2\x07k?\x11\x10\x01\x11\x98\x02\x016\xea\xd8\xb8\xa3\x9d\x0c\xff8\xfcZ\xbe\x81\x1d\xb5\xc1\x9b\xdd%\xbf_)\xfc1\xda/\xe3g\xc6\x0c\xb2{\xc6e\xf3\xec\xc2\xab\x17\xdb\xc9g7Y\xf3\xa2J\xebF\x04\x0cg\xee\x1d\xf2\xe3\xf9q\xe6V\xe9~\xf9}q\xe7h\xee\x18\x1dHc\xf7\xf3Di\xd4*jJ\x9c \xb8w[\x8fm|\xf0\x80\xdd\xfb\xcb\x1d\xf6\xc0M\xbb\xdc\xc4"\x1eQ\x14\xf7\xc00\xea\xf3p\xee\xf8\x96~\x87\xc2\\R\xdc\xa3\xfb;\xf5i\xac\x7f\x1a\xfe\r8\x95P/\xd6\xf9\xe7\x1b6M\xd8\xfcs\xf1\x12\x1c\xf1+xYp\xe4\xe8\xdfk|\x87\x1c\x94\x9d:\xcf\x9a^\x7f\x8e\xeb\x18\xcb\xc96fm\xbc\xbf \x93\x13^\xa0>D\x11]\xca\xf1\x01\x0fa\\\xc0\xae\xbb\xb6\x1c\xedP\xff\x87 N\xc8r5\xfc\x16\xb8D@@\x90\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0\xb1\x10\x18\xfd\x83\xf2X\x8e\xd4\xbe" \x02"09\x02\xbe\xd1\xcc\xc6q\x15\xfc\x1d\xf0\xf7\xc0+\xe0\xbe\xc1\xec\xf7\xc1\xa6\xc21\x1f\xed\x97;\xae\xdf\x89\x98\xb1\xf7\xbc\x17-B\xb4\xdf\tVU_\xe2\xbaH\xf6t"\xd2\xaf7\r\x91\x10\raN\xdd+\x13\x81B"\x80;\x95]\xd3m\x18\xdd\x84+0\x89H\x15\xea5\xf2\xcf\xb1*\x1f\xbd}\xaf\xdd\xf1\xd3\xad\xf6\x14\xba\x0b\xf7v1`.k#\xe3^R\x0c\xe4\xce\x85o,\x05\xc5)vK\xa5=\x08\xe7\x1f2~\xc870\x7fc\xfb\xe7Zv\xeb\xf8\xaf\xdc\x9f\xfb\x9e\x00\xbf\x15\xbe8x\xef\xd3\xc1\xdb\xc3\xc6\xb1\xfeZ\xdez\x81e\x86\xd0m{\x00\xd9(\xb4_t\xec+\x1e\x8f[\xac\xaa\x143\x04?a\xed?{,[\xb8@\xdc<\\R\xb7F\xd6\xfc\x84\xe1\x82W\xc1\x1f\x82K\x04\x04\x04\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08L\x94@\xa1\xfd\\\x9ch\xb9\xb4\x9f\x08\x88@~\x12\x087\xd8\xaeD\x16?\x05_\x1bd\x95\ri6t\x0b\xee\xb9\xe4\xa2\xfd\xd8\xfd.\x14\xe5\x94\xc4l\xbd\x97\xbdl\xa9\x9d\x83\xb1\xfd\x96a\x06_v\x03\xeeh\xeb\xb7\x14\xc6\xf4c\xb7J\x8e\xb1\xa6H\xbf\xe0\xcakQ\xd0\x04\x18\xe5:\x0c1\x87u:\x811\xde*jK,Q\x16\xb5\xfd[{\xec\xd1;\xf7\xdam\xdf\xdf\x8c\x08\xc1\xb6Qe\x8c\xf1~)\x9e\xf1\x02\xbd\xc0\xe7\x85\xba_\xa2\xb0\x1f\x81\xdf\x1b\x14\x9a\xcf=\xeeC\x11k<\xe3s\x8f\xce}\xff\x17~\x05\xdcG\xbea\xd5\x1bw\x19\xb6\xe4\t\xb5\xd6\xfc\xd7\x17\xb9\x8d\xc3\xfd\x10Y\xf9\x10*D\x0bd\xbdxC\xb9u\xdd\xbe\xd9\x0e\xde\xf8@\xb6\x14\xd9b\xe6\x96\xc8\xf3\xd8\x8a\x0f\x9e\x07\xe7\x8c\xccd\xee\xf9cU&\x02" \x02" \x02" \x02"0\x1e\x81\x02\xfd\xc58^q\xb4]\x04D O\t\xb0\x91\xc6\xa6\x1e}!\xfc\x03p\xcejIC\xeb\xd55z\x0b\xeay4^\xb4\xdf)\xe75\xd9\xc5/]jk\xae\xc4\x0c\xbee1\x1b\x82\xe0\xd7\xdd>h\x99T\xc6b\x10Gd"P\xec\x04\xdcD"\x88\x0c\xe4\x8c\xc2\xa5\x10\xc2\xd9\rx\xcf\xd6n\xbb\xfdG[\xec\xc1\x9bw\xd9\xce\r\x9d\xa3\x10\xb8\xf1\x02!\x9e\x17\xc1\xe4!\x14\xa2\xf8\x1c\xa3S\xac\xe2D!\xff\n\xdf\x08\xa7\x1dM\x08\xf4\x7f\x1c\xf9\'\xec\xf7A\xb8\x17\xbbx\\\xd68\xb1\x07\xc4\xd6XM\x99\xcd\x7f\xef\xe5\x16M\xc6-\xd3\x8bn\xbf\x85*\xfe\xf9r\xb9%\xc6\x05\xac/\xb7\xee?\xeep\xe3\x02\xbaM,\xd7\x91\x95\xc2s\xb9\x0f\xfb0\x12\x90\x13\x84\x90\xf7\xd1\xc4U|,\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\xe0\x8f&\x99\x08\x88\x80\x08\xcc$\x01\xdf\xb0\xe598\xa8\xfd\xfb\xe1K\xf9\x06\xc6\x06sa\xa9bxjR\xd0\x08\x8f\xedW\xd3TjW\xbe\xf2D[u\xc9|[zz\x9d\xa51VZw\xdb\xa0\r\r\xa6\xd1*E\x83\x9d\xa1~z\xda\xba\x0b\xae\x97\xb9C\xc0M|\xc3\xfa\x8f.\xeeI\x88\xe1\xd5\rI\xccn=d\x1b\x1fjs\x93\x87\xfc\xe1\xfb[\xac\xafkh\x04\x08\xa3d\x87]4\xe1\xc8\xa6B\\\xa1\x10\xc5\xe7\x1a\x9f{\xb4\x9d\xf0/\xc19c0\'\xb2\xf0\xcf\xbbp\xd4\x9a\x7fF\xbe\x08\x9f\xb3\xfb0\xf7\xe1\xb6\xc3O\r\xae!\xe5\x08\xfe\x880\xff=WX\xbc\xb1\xd22\x9d\x98\xed\x17\xcc\x8a\xc6p\xedY\xae\xde\x87v\xd8\xbe\xaf\xdc\x9d-VP\xee\x9c2z\x11\xf0\'\xd8\xfeR8Y\x92\xbbD@@\x90\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0x\x04\x8a\xe8\x97\xe3xE\xd4v\x11\x10\x81Y"\xe0\x1b\xb5<\xfd)\xf0\x7f\x82\xb3\xb1F\xf3\r\xb8\xec\xbb\x02x\xe5\xf8el^\xb2\xab\xa3\xb7\x95\xe74\xd9%/]lg]\xb5\x08\x02G\xd4\x06\x19\xedwh\xc0um\xa4\xe8!\x13\x01\x11\xc8\x12@\xafw\x88{\x19K\x94p\xf2\x90\xa4\xc5\x93\x11\xccx\x9d\xb2\xfb\x7f\xb3\xc3\xee\xf8\xf16[\x7f\xef\xe8\x99`\x8b$*\x90\xd1\xcd~|\xc0\x87\xb1\xfe1\xf8\x0f\xb2DF\x84@\xff@i\xc2vF\xb5-\x82S\xd0:\xfc\x00\t\x89`\xcdo\xbd\xd0\xcaNi\xb1\xf4\xa1^\xfe%\x02\xbb\x15\x99\x05"`\xcf}\xdbm\xff\r\xf7d\x0b7v$\xa0g\xcb\x08\xcbw\xc1\xc3\xdf7E\x06E\xc5\x11\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\xe9!P\x84\xbf\x1e\xa7\x07\x8cR\x11\x01\x11\x984\x01>W\xd8\x18\xf3\r\xb4\xb7a\x9dQ\x7f\xcdp\x1f\xf5r\xb8q\x8b\x8d\xf9ll{F\xf0\x8f\xe3\x95y\xbb\xe8\x9a%v\xc9\xcb\x97\xd8\x8a\xb5\x8d.b\xa9\xe3\xe0\x80\xa5\x07\xb3Ec\x14\x93L\x04D`l\x02\x9c7$\x83\x17\xdeS\x89d\xccM\x8a\xc3\xd9\xb2\xb7K\x18\xd5G\x91/\x01\x7f\'\xfc}\xf0Zx\xb8\xe1\x8b\xb7\xf9m\x11\x8eC\x16\x9a\xcd\xb7qQ\x85\xbd\xf0/O\xb6\xb5W-\xb0\xba\x96r\xeb\xdc\xdf\x8f\xae\xbe\x18\xdb\x0fQ*Q\t\x7f\xf9}1\x95\xbb\x82!\x90\xc6=\xc7\x87\x08\'\xca\xa9\xe4,\xc2\x88\x0e\xdc\xf2\xd8!\xbb\xfb\xe7\xdb\xedw\xdf~\xda\x06\xfa\xa8\x99e-\xf7\x1e\xf5\xdb\x0b`I\xb1\x8a\xcfC\x8aT\xb4\r\xf0\xcf\xc3\xff\x06~"\x9c\x9f\x1f\x8e\x8e\x0e\xba\xbeF\xabJm\xc1\xfb\xaf\xb0h<\x8aI?\xf0\x88\xf5Gc\xe7\xe26\x88\x80u\x15\xd6\xf6\xdf\x0fZ\xd7\xad\x9b\xb2\xb2(\t\x8d6\xf2$\xb3\x87\xe0\x97\xc2\xbb\xe0\xb4#\xf7\xccn\xd7\xab\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xccY\x02\x12\x00\xe7\xec\xa5W\xc1E`\xda\x08\x84#.\xceE\xaa\x1c\x93\xe9\x82 u\xdf8\x9b\xb6\x93\xcdDB\xae\x9b/\x84\xbfL\xeap\x9bq\xd9\x19u\xf6\xa27\xad\xb4\xd5\x98\xd8\x83\xa2Do\xe7\x80\xf5u\xa7\x8dQH2\x11\x10\x81\x99#\xc0Y\x84\xd9-\xb8\xb2\x16Q\x81\xa5Q\x88\x7fi\x8c\x15\xb8\xd3~\xfb\xcd\r\x10\x05\xdbGN\x1c\xc5\x18x\xbcc9qH\x01\xda\x84#\xa2\xe7\xbd\xed"+Y\xd1\x84I?\xfa \x82\xcd\x9b\xcfo\xa7\x00\x00@\x00IDAT\xa1\xe7\x0f.+\xc5\xdeHU\x89\xed\xfb\xc2\xdd\xd6\xff\x04\x83%Y\xfe#\xae\xb7g\xf9e|\xf8\x168\x05A~\xf7\x1c\xb1#\xb6\xc9D@\x04D@\x04D@\x04D`\xce\x12\x98C\xbf$\xe7\xec5V\xc1E`&\tx\xf1\x8f\r\xae\xf7\xc2\xff\x1e^\x05g\xe3\x8b\xcf\x97\xbc\x7f\xc6pr\x8f\xb0\x80p\xcay\xcd\xf6|D\xfc\x9dvA\x93\x13!:1\xbe_*\x95\xc6z\xd48\x99\xafL\x04D\xe0\xf8\x10\xe0,\xc2\xb48&\x0e\xa9\xaeO\xba\xd9\xb5\x9f\xba\xef\xa0\xdd\x84\x88\xc0\x070^\xa0\xb7\x02\x1e\'\xd0?\'Y\x94\xd1\xcf\xca \xfa\xaf\xfa\x92eV\xffgk-u\x10\x13\x08\xcf%\xf1\xcf_\\\x8c\xbd\x1aIb\x98DT\x85]\xff|3\xba@\x07"hhLV\xec\xca\x8aB\x11\x90O\xe8W\xc0\xbf\x07\xf7\xdfMX\x95\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x90\xc0\xe8\x1f\x9cb"\x02" \x02\x13#\xe0#,\xb8\xf7*\xf8g\xe0W\xf1\r,\xef\xa3\xfe\xd8\x8ef\x84\x11\xc7\xef\xf3\xb6\xe6\x8ay\x10\xfeV\xda\xf2\xb3\x11i\x93\xcaXW[?\x84\xbf\x8c\xc6\xf7\xf3\x80\xb4\x14\x81Y$\xc0.\xc2qD\xdfV\xd4\x95Z"\x11\xb1\x9d\x1b:\xec\xa6\x1b7\xb9\xc8\xc0\xce\x03\xfd#9\x8b!b\x8c\xfb\x16\xb4\x05\xe2_\x1cc\xe0\xcd\x7f\xd7e\x98y\x1c\x8fT\x8c\x8d8\'\x05@^H\\\xcfhu\xa9\xa5\xf6u\xd9\xaeO\xde\x9c\xbd\xb4\xfc\xf5:\xfa2\xf3\x1d\xb72L\x90\x91\xe8\xdb\x83\xf7\xfc>\x92\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x80\x00\xffB*\x13\x01\x11\x10\x81c!\xc0\xe7\x86oT\xbd\x1e\xeb\xdf\x86S\x04\xf4\xdb\xf2:N\xceu\x1bDS\xd1\x07\x90\xac\xbet\x9e\xbd\xe9\xd3g\xdb\x8b\xder\xaa\x1b{\xac\xf3`?\xba\xfa\x0eZd8\x821\xfe\xf47\x12\\W\x99\x08\xcc:\x01\xde\xb7|\xc2\xf4\xf5\x0cZ\x7fO\x1a\xb3\x07\'\xed\x82\x17/\xb2\xf3_\xb4\xc8\xaa\x1b\x92\xb6\xed\x89\x0e\x1bDWaw_C@c\xd7\xd1\x1c\x81h\xd6\xcbp\xac\x19h\xbc~\xad\x95\x9d\xd2\x82\xa8\xb7@\xe0\xa408\x17\x8dQ\xda\x03)K\xcc\xab\xb2xS\x85\xf5>\xbck,\n\x84\xc3(\xc0j\xf8"8\xa3\x00\xe7(0\x94\\&\x02" \x02" \x02" \x02c\x10\x90\x008\x06\x14m\x12\x01\x11\x18\x93\x00\x1bS>\xf2\xaf\x15\xeb_\x87s\xa2\x8fr8\xc5?~\x96\xb7\r\xae\\\xe1o\xed\x15\xf3\xed\xcd\x9f;\xd7\x9e\xff\xba\x95V\x81I\x07\x0e\xed\xed\x83\x80\x90B7_\x08\x7f\x14\x1b\xf2\xb6$\xa0,\x13\x81\xb9H\x00\xf7$\xefM\xea`C\x03\x88\xd2=4h%eQ;\xe5\xfcf{\xcek\x96\xdb\xc2\xe5\xd5\xb6{S\x97u\xa1\xdb\xbe\x17\xff\xdc}_h\xac\x02\xa1\xaf\xf7\xb1=\xee1T\xb6\xb2\x05\x7f\xae\xa5\x08\x06}k\xae\x8a\x80(w\xa6w\xc8\x92\xcb\x9b,\xd5\xd6kC;:pU\x8fxHs\x03#\x01O\x83o\x84\xaf\x83\xf3w.\xb7\xc9D@\x04D@\x04D@\x04D`\xce\x138\xe2\xd7\xd3\x9c\'"\x00" \x02c\x11\xf0\xc2\x1f?{9\xfc\x93\xf0\xa5p6\xac\xe8y\x1b\xf5\xc7\xf6\xb2\x8f\xf6C>m\xcd\x95\x0b\xec\x85\xaf_a\'\x9d\xdd\xe0"\x86\xba\xdb\x87\xdc\x18\x80\x8a\xf6#\x1d\x99\x08\x14\x16\x01L\xc6\xednpN\xd4\xc3H\xc0T\x7f\xda\xd6\xdd\xb6\xd7~\xfd\xf5\xf5\xb6\xe1\x81\xb6\x91\xc2\xe4\x8e\xf59\xf2A\x01\xac$N\xa8\xb7\xc6\x97\xaf\xb6\xe4\x92\x06Ku`\x0c\xef\xed\x84\x98\x0f1h\xf1iuv\xc9\xcb\x96\xd9\xcas\x9bp\x9f\xf7\xd9\xbe\xed=\xd9?S\xa0LQ\x88G\xa3\xf5\xa2<.h\xf0\x08\xcb@\xf4\xeb\xbes\x8b\x13\xfd\xca\xd1%\xd8\x121\xd7%\x16\x1b\xdc\xff<.\xc1\xf4f\x8d< ~F\x93%Vzb\x9du\xdf\xb5u\xac\xf4\xb9\x17\xbf\xafj\xe0\x8cN\xff%\x9c\xdfS\x12\x00\x01A&\x02" \x02" \x02"0\xb7\t\xf0\x87\x92L\x04D@\x04\xc6"\xc0\xe7\x83oL\x9d\x87\xf5\x7f\x83?\x0b\xce\x86\x14\x1bX\xf9\xf9\x07\x04\xe4\x98\xa2\x9e\x9fA\xb4\xb1\xb5\xc2\xaey\xc7i\xf6\xac\xe7\xb7\xbaq\xfd8\xc6\x1f\xe7\xfe\xe0d\x012\x11\x10\x81\xe2"\xc0\xf922x\x89\xc6\xa2nL\xcfDI\xdc\x9e\xb8k\xaf\xfd\xe2\xabO\xdacw\xec\x1b)lAE\x04\xf2\x0f\x14\xc1\x84E\xc9%\xf5\xd6\xf0ggZ\xc9\xa2ZD\x03bl\xc0\xb9\x18\r\x08\x16\x1c\x0b\xf0\xd0\x0f\x1f\xb1\x8e\x9b\x9er\xc2h\x8e\xaa\xcb\xef\'\xda\x10\xfcR\xf8=\xf0p\x14;\xde\xcaD@\x04D@\x04D@\x04D`\xee\x11P\x0bx\xee]s\x95X\x04&B \x8e\x9dR\xc1\x8e\xef\xc4\xf2\xa3pFS0\xea//\x85?\x1f\t\xe4\x85\xbf\x8a\xea\x84\xbd\xf0\xcd+\xed\x8a\xebOr\xe3\x84u\x1e\x18\xb0\x14f\xd2\x94\xf0\x87+(\x13\x819@ \x03q,\x02!\xb0\xba\xae\xc4b\x10\x02\xd7\xdf\xb3\xcf~\xf6\xc5\'\xec\xb1;\x0f\x0b\x81\x8c\x08t\xcf\x8cB\x88\x0f\xe3/\xb6 \x9f\xb5/>\xd5\xaa\xaf\\\x8e\xa7\xf4\xb0e01\x8a\xcd\xa5(f\x8a\xa1\xb8\x9e\x91x\xd4v\x7f\n]\x81\xf7#\xc23w\xac\x87\xec\x1f\xa9(\xfa\xfd\x0e\xfe\x9c\xa0\xba{a0x\xab\x85\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xcc-\x02y\xd9\x90\x9f[\x97@\xa5\x15\x81\xbc"\xc0&&\x9f\x0b\x14\xfa\xd0\xd7\xccn\x80S\x00L\xc0\xf3W\xfcC\xe3\x97\xdd\xfa|\xd7\xbe\xe7bB\x807|\xe6\x1c;\xf3\xf2\xf9\xd6\xd3>`\xdd\x1dC\x88\xfeC\x1bYQ\x7f\xb8\x8c2\x11\x98\x1b\x04\x18\xe5\xc7\x07Z\x7f\xcf\x90\xf5\xf7\xa6\xacei\xa5]z\xed\x12;\xf9lt\rn\xeb\xb7}[{0\xfeg\x96\x85\xefF\x9c\xf7d(\xf4\xe1Y\xd6\xff\xd4~\xeb\xc7$!\xa5\'6Yb~\x8de0K\xae\x8b\x12\xa4\x10V\xec\xc62\xe2\x8f9\xf1\x8a\x84\x95,\xa8\xb5\xee{\xb7\x8dUb\x82\xe0\xd5]\x06_\x0f\x7f\x04NA\x10\xf4d" \x02" \x02" \x02"07\tH\x00\x9c\x9b\xd7]\xa5\x16\x81\xb1\x08\xf8\xc6\x11\x1bH\x8c\x98\xf8.\xfc28\x85?6\xa6\xf8y^\xd9H[7h\xd2\x9due\xab\xfd\xd5\xbf\x9fg\x17^\xb3\xc4\x86\x11\xfd\xd3\xbe\x1f\xb3\x81"\xe7\xec\x12\xecJ\x90W\xb9WfD`l\x02Y1{\xd8MN\xc3\xe8\xb4aD\xd4<\xb8\x8e\xd39I\x8cw\xf3\x1c2/\x04\x0e@\x08\xec\xebM\xdb\xfceUv\xd1\xd5K\xed\xe4\xb3\x1a\xed\xe0\x9e^;\xb0\xa3wD\x16r\xb3\x06\x07\xcf\x93\xbcD\xe4\xf3\x86\x87_\x1a]\x80\xbbn\xdf\x8c?\xcfD\xad\x1c\xb3\xe3Z\x1cc\x03\x0eB\x08\x1cy0\xe6e\t\xa6\'Sx\xa6g\xfaS\x968\xa1\xce2\xfb{mp\x17f\x05>\xb2\xdc\xd9*ov\nNz#\x1c\xa1\x92\xee\x9b\xc0S\x9c\x9e\xbc(\x15\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(\x10\x02s\xac\x19P WE\xd9\x14\x81\xe3O\xc0G\xfd\xf1\xcc\xef\x87\x7f\x18\x9e\xd7Q\x7fn\x9c?\x8a!\xb0E+k\xec\x15\xef]m\xab.\x99o\xdd\x9d\x83\x98\x0c \xdb\xce\x8b\xe6\x9dd\xe9\xb2\xab\x17\x11\xc8\x12@|\x92\x0b@C\x18\x1aE?\xa7\xd0\xa1\xce& \xe8\xc41\xd1C\xac\x84\xcb\xa8\xc5\xd0\xd51\x8a;\x94\xe3\xda\rS\xe0\x83\x1f!h{\x8d\x1b\xc2H4\x10B\xd8\x056\x95\xcaXz\x08\xc7`\x99\x82(84\x90\xc6{\x1f\xf6\x16h&\x11\xa4\xcf\x1c\xcd\x91\xfb%\xdc58Q\x1a\xb7Gn\xdbc?\xfd\xf7\'\xec\xa9\xfb\x0fd\xaf\x0b\xf8!\xa68{M\xb2[\xf2\xf3\x95\x7f\xd8\x08\x9e\x81\xa5\xcb\x1a\xac\xfe\xfa5V2\xaf\xcaR\x88zv\xdb\x8b\xfdz\xa2\x1aG\xcbb\x96\xe9K\xdb\xae\x8f\xfd\xc62\x83\xf8[\x15\xeb\xbe\xbb\x99F.\x99\x8f\\\x7f+\xb6|\x11\x1e\xfe\xae\x1b\xd9I+" \x02" \x02" \x02"0\x17\x08H\x00\x9c\x0bWYe\x14\x81\xf1\t\xf0\x19\xc0f"\x1bI\xadp6\x90^\x0c\xa7Q%\xc8\xbb&dX\xf8\x8bA\x1c\xb9\xee\xdd\xa7\xdb\xb3\xff\xfc$\'\x88t\x1e\xe8G\xb3\x1d\x02H\xde\xe5\xda\xf1\xd4\xcb\x1c\'@\xe1\xc9u9E\xfd\x8cA\xccc\xfd\xa5\x97\xc0\xe3\xa51K&!f@\xbc\xe8:\x84n\xeb\x07\x07\xb2\xcb\xf6A\x17\xb56\xd0\x8d\xe8\xb5\xee\x94\xf5t\rZ\x7f\x17\xe66\xc8\xfd\xf6\xc6\xfb\x92d\xdc\x8dw\xc9e"\x19\xb5dE\x89UV\xc7\xad\xac*a\xa5\x95\t+\xab\x8c[mc\x99U6\x94X\x06\xa2\xe0\xd0 D\xc1\xa1\xb4\xa5\x062n=\r\x910\x9c\xc7(n\xa4#\x83\xaa\x8a\xe7"\xa6q=(\xaar\x8c\xc08\xd8\xaf\xfb\xc3\x1e\xfb\xfeg\x1f\xb1\xedO \x9a,\xb0\xbc\x9f,\xc4\xd7\x03\n\xc8Xox\xc5\x1a\xab\xbch\xa9e\xba\x07\xb33\x05\x17\xf3\x05\xe45\x82\x18\x1eo*\xb7\xce\xdf\xcd%w\xe5\x8b\x95$l\xc7\xc7~m\xe9v\\\xb3#\xa3\x00\xbd\x08\xf8\x0e\x9c\xfbspE\x01N\xfbEP\x82" \x02" \x02" \x02\x85@\xa0\xc8\x7f\x15\x16\xc2%P\x1eE`V\x08\xf8Y~\x938;\xbb\xfc~\x00N\xd1\xcfw\x97\xc2j\xfe\x98k\x80\xb3\xdb#\xaceq\xa5\xbd\xfa#k\xec\xf4\x8bZ\xb2B\t"\xa48\x93\xa7L\x04\xf2\x81@&\x93\x15\xfc\x18\xe1\x17\x87\x98F\xd1\x8d\x11xC\xe8\x9e\xb8sc\xa7\xed\xda\xd8e;\x9el\xb7\r\x0f\x1c\xb4M\xeb\x0e\xd9 \xc61{&\xa3\x9e\x11\x81\x08\xe5t\x1c\xdc\x06T3\xc6\xb3\xb0\xd6\x93\xc6\xdd\xec\xc6\x0c\x1co\xe7\xd0\xf6\x92\xb28\x84\xc0Z[|J\xb5\xb5\xae\xa8\x850XmKN\xad\xb5\xaa\xc6\xa4\r\xf6\xa4\xad\xbfo\xc8\x06!\x06\xa60\xd9\x04E2\x8a\x98\x8c\x10,&K\xe3\x19S\x82n\xd7U\x88\x90\x1c\xec\x1b\xb6\xdf}\xe7i\xfb\xe5W\xd7\xbbHL\x963\xef\x85@>\x06\x83?\xe9D+\x93\xd6\xf8\x9a\xb3\xad\xfc\xb4y\xe8\x12\x0c\x11\x10\xd1\x8eE\x1b\xce\x89?\n\xc5j\xcb\xad\xfb\x9emv\xf0\xdb\xf7\x01B\x08\x04/\\\xf6\x96\xe1FN\x06r\x1e\x9cQ\x80|\x7f\xb4[\t\x1f\xcbD@\x04D@\x04D@\x04D\xa0\xb8\x08\xf0\x07\x90L\x04D`\xee\x10\xe0=\xef\x85\xbe\x85X\xff2\xfc\x05A\xf1\xf3N\xfc\xcb\r\xe4\xb8\xf6\x9d\xa7\xdbU\xaf9\xc9u\x9b\xec\xdc\x8f\xee\xbeh\xec*\xea/\xb8zZ\xcc*\x01\'\xfce"\xe8f\x9b\xb0Jt)MA\xf0\xebE$\xdf\xd6\xc7\x0e\xd9\xbd\xff\xbb\xc3\x9e\xfa\xe3\x01\xdb\xbf\xbd\xdb\xd2\x18\x87o,s"\x1f_xwB\x96p{\x05\xd1\xae\xc1b\xac\xc3\x9ey\x1b\x92\x1c\xf9\xa2G\xfan\x1d\xe7p]\x91\x91\xf0\xd1\xd2\xae\x9fWf\x0b\x96\xd7\xd8i\x174\xd9\xa9\x17\xb6X\xf3\xa2\n+c\x04#\x12\xe9nG\x84 \xa2\x049V^\x94\xe1\x85\xccw\x11\x18\xb9\xb0\x1bv\t\xbaP\xd74\x97\xd9\xa1\xdd}\xf6\xcb\x1b\xd6\xdbon\xd80R\xba\x08\x00p\x82\x95\xfc5^\xe5l\xfe\xaa/_n\xb5\x7fr\xaa{\x9fA\xf7\xf1\xa2\x8d\x06\xc45\x89\xa2n\xee\xfe\xe4\xeflho\x17b\xfc\xc0 \xf8\xa3Qp\x9d\xfc\xf7\xdb\x1b\xf1\xfe\xabpE\x01\x06`\xb4\x10\x01\x11\x10\x01\x11\x10\x01\x11\x98;\x04\\[`\xee\x14W%\x15\x819M\xc0\xdf\xefl\x19^\x06\xe7x\x7f+\xe1\x0cAbD`^Y8\xea\xef\xe4g5\xd9\xf5\x1f<\xc3\x96\x9eVg\xed\xfb\xfa\\$R\x8c\r<\x99\x08\xcc"\x81\xac\xe8\x87I; \x16\x95U\x96 \xd2/n\xbb6u\xd9\x93w\xed\xb3u\xb7\xee\xb5\x07n\xde\xe9\xba\xff\x86\xb3\xc8Z\x1ba\xc4*E\xbe\xf1\x048|\xecj7\x05\xbb\x90\xb0\xc6U\x17\xb2\xe4\x05B&\xcc\xbb\xd9\xed<\xb28R\x8c\xf3\xfb\x8fw>&\xc14\xfc\xf9\x90\xa6\x9bh\x04\x9b\xc2V\x07Al\xeds\xe6\xdbIk\x1bl\xd9\xea\x06[pR5\xba2\xa7\xb2]\x85\xfb\xb3\xe3\x07F\x10\xf9X,\x81\x81\x14k\xcbqM\xabj\x93\xb6\xe9\x91C\xf6\xc3\xff\xfb\x98\xad\xbbew\x80\x04\xd7\x06\xcc\xf2V\x08\xccf\xce\xe5\x95\x13\x844\\\xbf\xd6\x12n\x82\x10t\x91ew\xe6P\xbd\n_\xe3\x82]\x87\xd8\x17G7\xf6\xee\x07v\xda\x81\xaf\xffq\xacb\xf0\xd6a\xa9\x1f\x82\x9f\r\xa7 (\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x819E h6\xcc\xa92\xab\xb0"0\x17\t\x8ch\x07(\xfc\x9b\xe1\xff\n/\x83\xfb\xa8\x08\xac\xe6\x87\x85\xda\xadn\xf6\xd3\xeb?p\x86]q\xfd\x896\xd4\x97BWx\xd0n\xf9\xaf\xcd\x10\xfev\xbb\xf1\xfd\xc2i\xba\xee\xbb\x14\xd5\xe0\xb9\x82\x11\xeb\xbb3\xacP\xec\xe3\xdb\xf1\xa2\x04\x83=\xa7\xb4\xe0\xf9\x98\x9f\xc3Q\x86L\x0e\x91\x80\xd9\xc5H\xdan\xbf sc\t\x95\xc9\xf2\x98-[\xd5`\x17]{\x02f\xdf\x9eg\x95\x10\xc98\xfbpg\xdb\x80\xeb\xd6\x1c\xe1\x98\x81E 2\xf1Z\x93OEM\x89\x95W\'\xec\xbe\xdf\xec\xb4\xff\xfe\xe4:\xdb\xbb\xb5\xdb\xb1\nOJ4\x02/_VX\x99\xdc\x85\xe5c3b\r\xaf:\xdb*\xce=\xc12]}6\xcc\x99\xa0\x83\xeb\x9b/\xd9\x9dr>P\x9e(&\xbe\xd9\xf5\x89\x9b-\xb5\x0fQ\x80,\xdf\xd8\x91\x9a\x9c\xe8\xea\xe7pE\x01N\x19\xba\x12\x10\x01\x11\x10\x01\x11\x10\x01\x11($\x02\xfcy(\x13\x01\x11(n\x02~\xbc\xbf\n\x14\xf3\xf3\xf0\xd7\x06\xc5\xf5\x11\x11\xf9Qz<\x8d0\xe7\xa8\xeb~\xc7\x0c\xad\xbd\xaa\xd5^\xf5\xfe3\xacvA\xb9\xb5\xa3\xbbo\x06\rVu\xf7\xcd\x8fK5Ws\xc1\xa88j\n\x9cQ\x973\xc7\xee\xda\xd2e\xf7\xdf\xb4\xcbn\xf9\xce&\xdb\xbb%+\x08\x91\r\x850\xee\x97\xa6\xf8\x10\x080\x8e\x19\xeb8?\x800\xc6\xae\xa6G\x1b\x9f\x0f{a,\xba\xa4U7\x96\xba\xc9C8\x96`)D\xb7\xf2\xea$"\rc\x10\x0b1\xc6 \x84K\x87\xca\xcacj\x9aK\xed\x9c\xab\x16\xda\x15\xaf<\x113tWr\x93u\x1e\x1cp\xb3t\x17C\xb7}\n\x81\xf1D\xd4j[\xcal\xff\xd6.\xfb\xc9\x17\x9e\xb4\xdb~\xb8\xc5\x95\x93/\xbc\xde\xb9\xc2\xe9\xc8\x87\xb3\xb9\x12\xcaX\xa2\xb5\xda\x9a\xfe\xe2\x1c+YPm\xa9C\xbd\xc802\xed\xea\xe9lfp\x1a\xce\xcd\xfa\x89\xd9\xb6y\x1f\xee\xfa\xf8M\x96\xee@wg\xac\x87\xc6\x02\xf45\xb8\x03{^\x04\x7f\x0c\xae(@@\x90\x89\x80\x08\x88\x80\x08\x88\x80\x08\xcc\r\x02\xc5\xf0\x93on\\)\x95R\x04\x8e\x8d\x00\xdb\xe6l\xec\xd0\xff\x04\xce\xf1\xfe\x16\xc0}\x04\x04V\xf3\xc3(Tp\xd0}\xda\xf9\x7f\xb2\xc8^\xf1\xf7gX\x15\xc6rj\xdf\xd7\x0b\xa1\x83\x82F~\xe4S\xb9\x98\x9b\x04(\xda\x95\x96\xc7\x11\x89\x97\xb4\x1d\xeb;\xec\xd7\xff\xb9\xc1\xfe\xf0\xdd\xcd#0\x18\x95\xea\x04\xb2\x90\x10F\xad\x85\xdb9\xab\xec(\x85\x0eG5 \xa2\xb5\x15c\xe7-;\xa3\xceV\xacm\xb2\xa5\xabk-Y\x9e\xc8\xee\xc7od\xea\x158g\x1a\x11\xaf\xa9\xa1\xb4\ra\x99\x81\x84?\x8c\xe8\xa6lwT\xecr\x94{\xc2\xddI\x8c\xed\x85E\x11\xfb\xcb\xd9\x88\xa3\x10E(\xbeQ\xb8J`\x96[\xce\x9a\xedn\xb9\xecm\xe7D\xc2m(\xdb\xb6\'\x0e\xd9\x96\xc7\xdam;\xd6\xb7?A\x8dd\xb4\xf9r\xf9.\xd0#\x9f"\xcfL?W\xe0\\s\xc5\x02\xbb\xe8\x9a\xc5\xb6\xfa\xd2\x16D*\xc6\x9d\x108\xd8\x9fF\xfe\x0b\xff\xbe\xce\xe0\x1a\x95\xd5$\x9c@\xfb\xd4\x1f\x0f\xda\x8d\x1f\x7f\xc8\xb6\x04|G8\xe5\xc3JH\x08l\xb8~\x8dU^\xb0\xd42\xdd\x836\x8c\xc8Q\'\x96\xe5C\x1e\xa7\x92\x07\n\xb4M\x15v\xe8g\x8f[\xc7\xaf\x9e\x18K\x91\xe5\x1f\xc4\x18\x15\xff\x0f\xf0O\xc0y7\x05w\x0c\xd6d" \x02" \x02" \x02"P\xc4\x04\xd8\xdc\x90\x89\x80\x08\x14\x17\x81p\x83\xe6C(\xda\x07\xe1l\xf0\xe4\x95\xf8\x17j\x87\xban\x8e\xaf\xfd\xa75\xb6\xf6\xb9\xad\xd6\xdd\x86\xa8\xbf\xee\x14\xc6\xff\xd3\xe3\xa9\xb8\xaaea\x95\x86]`#\x10\xce\xea\x10\xd1\xc6\xa8\xb9\x9f}\xe9\t\xfb\xed7\x9f\x1e\x89\xee\xa3\x88E\xcb\x8d\xf6\xe3\xf6\xdc\t4\x96\x9dQog\xa1K\xfb\xc9g5Y\xf3\x92\nk\xc0\xec\xba\x14\xbd{\xd1Ew\x00c[\xa6]T\x9fKl$z\x8c\xf7\x07\x95>.\xdd:O6\x19\x0bt\xa8a\xd7\xe7\x18\xf9\rD)\x9f>\x05\xf6\x18\xca\x99,\x85W\xc4\x11m\x98\xb0\xae\xb6~\xdb\xbf\xa3\xd7E\t\xae\xc7\xec\xc5\xeb~\xbf\xdb\xf6\xe6D\t2:\xd0%\x85\x04}\x9a\x14/\x19\xcdK\x0bs\xe1\xec\xc1W\xbdv\x85]\xf8\x92\xc5n\xa2\x94nD\x04\xf6\xa3\xebl\xa1\xdf\xe3\xee:\xa3\xb85\xe8\xaa\xcdku\xdb\x0f6\xd9\x7f}b\x1d\xbaa\xf3Q\x9be\x91;\xe6\xa3\xfb`\xb6_x\x8d\x82\x8b\xc6.\xc1\xf5\xe8\x12\x1ca\x94k\xb1t\tN\xc4lx0e;?\xf8\xbfc\x91f\xb5e%}\x12~\x06\x1c\xfd\xa0\xdd\xfb\xe0\xce\xc0;\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14)\x81\xec/\xf5"-\x9c\x8a%\x02s\x90\x80\xef\xceT\x8f\xb2\xff\x1b\xfc\xcf\x03\x06\xbe\xd1\x93\x17H\\\x84\x0c\xa3\xa3`g?\xbf\xd5u\xf9\xadl(\xb1\x8e\xbd\x83N\x18Q\xd4_^\\\xa6\xb9\x99\t\n!\x90\xb68\xf3k\xac$bw\xfdx\x9b}\xef3\x8f"z\r\xdd\ta\xb9\xd1]\xd4R\xd8\xe5\x90\x11aa;\xe5\xbcf;\x1b\xa2\xdf\xd9\x10\xb5\xab0&\x1e\x05\x17\nF}\xec\x92\x0b\xd1\x8f\xeaY\x04wk4O*\xbb\x9b\xd18\xab[Y\x0c\x91\x82\x9c\xe0\xa4\xa4\x8c\x8f\x93\xac\xed\xd9\xdcm\x0f\xdc\xb4\xd3\x1e\xbfs\x9f\x9b\xf0\x84\x91|\xde\xc8\xc0\xdf\xd3#b >tQ\x81\xc1}\xce}k\x9bJ\xed\x05oXi\x17^\xb3\xc8*kJ\xad\xe3 f\xf4\xc6\xec\xc1n\xcc\xc4\xa3D5\xfa\xf3\xe4\xeb\x92\x91\x9e\tv\x0b\xc6,\xc9\x07v\xf5\xd8\x0f>\xfb\x88\xdd\xf5\xd3\xed\xd9\xec\x02\x0e\xa5\xd20\x97\xbc(\x07\x7f\xfd\x05U6\xb1\xa8\xd6\x9a_\x7f\x0e\xc6\xcf\xab\xb4t;\xba\x04\x07\xe2v^\xe4s2\x99@\xb9b\xb5\xe8\xa2\x8d\xd9\x80{\x1f\xc0u\xc0\xfd\x19\xea\x06\x1cN\xf1\xd9x\xf3{8i(\n0LF\xeb" \x02" \x02" \x02EI\x80?zd" \x02\x85O\x80\xf72[\xeb\xec\xde\xb4\x1a~\x03\xfc,8\x1b5\xfc,/\xeeu\n\x05lt\xb2\xdd\xc9\xee\x88\xaf\xfe\xc8\x1a\xbb\xe4e\xcb\xac\'\x18\xeb\xaf\xd0#\x82P,Y\x01\x13`\xb4\x16\'\xd7\xa8kI\xda\xce\xf5]\xf6\x8d\x0f\xdfo\x1b\xee;\x98-\xd1\x18B\x0e\xa3\xe0\xfcx|\xdc\xa9\xa1\xb5\xdc\x9e\xfb\x9a\xe5v\xfa\xc5-\xe8\xe6[\xe3\x8ec4\xdd\xd0\x00\xbb\xefRV\xc4\x8d\x88H\xb1<\xd1\xfc\\\xfe\xc6z\xa1X5<\x92_\x8a{\x8c\x10\x8c[\x15&>a\x198v\xe0\xa6\x87\xdb\xec\xd6\x1fl\xb1\xc7\xef\xda7*\t\xc7\xc4%\x10l\xc6=\xcf\xa8HFTz\xab\x86\xd8\xff\xdc\xbfXa\x97\xbdb\x19\xc6T,q\xe2*\xc7+,\xe41\x02\xfd\xa4.e\x18\xb3\x913"?t\xcbn\xbb\xf1\xa3\x0f\x8eL\x0e\xe3\x18\x84\xba\x89{\x16\xf9\xb2\x8c\xc4c\xd6\xf4\xc6s\xac\xfc\xb4\x05\x96\xea\xe8\xcb\nfy\xf1\xad1\tB\xe8.\x1f\xad+\xb7\xbe\xc7v\xdb\xfe/\xdf=V\x02>\x1a\xfe\x0b\xf8\xf0mp~w\x1eV\xb4\xc7:B\xdbD@\x04D@\x04D@\x04D\xa0\x08\x08\x14\xea\xcf\xbb"@\xaf"\x88\xc0\xb4\x11\xe0}L\xa7\xd8\xc7\x99\r\xbf\x0co\x84\xfb\xb1\x8e\xb0:\xfb\xe6#\x84\x98\x93U\x10H\xfe\xe2\xa3gY#\xc6Ck\xdb\xd3\x8b\xe8\x18D\xc9\x14p\x04\xd0\xec\xd3U\x0e\xa6J\x80\x11|\xa5Uq\xab\x80 \xf5\x9b\xaf?e\xdf\xf9\xe7u#IR\xb8\x1e\x89\xe0\xc2\xba\x1b\xb72$\xe6\xac\xc2\x18w\xcf}\xf5r;\xe5\xfc\x16\x17\t\xc7\x08\xbf\xde\x0eD\xb3B\xf4\xe2\x18|\xc50\x81\x8d\x1b\xf7\x8f\xc2\n\xc4<\xce\x82\\Z\x19w\x0f\x9d.t\xd9\xbf\xe7\x17\xdb\xed\xae\x9fo\x85(\x98\x1d\x03\x8f\xe0\xd8\x15\x98\xdc\xc2\x02)\xdf3\x1e\xce\x8f\xf9Y\x8e\x89N\xae}\xe7iv\xf9\xcb\x97b\xbf\x88\xebzLf|V\x14\xaa\x91\x13\xff\xc4Q\x87hGv\xed\xfe\xf5\xd77\xda\x8f>\xff\xd8\xc8\xf8\x88\xe1\t\x8f\xf2\xa6\x8c\x8c\xf8\x0b\xeas\xcd\xf3WZ\xed\x0bO\xb1a\x8c\x0b\x98aW\xe6B\xbc\x16\xb8Y\x19Y;\x8cn\xed\xbb>v\xb3\xa5\x0fA\xd0\x1cu\x13\x8f\x0c\x87\xf1\x08\xae\xc1E\xf0N8+\xdda\x95\x1aod" \x02" \x02" \x02"Pl\x04\n\xf7Wv\xb1]\t\x95G\x04&G \xdchy7\x92\xf88\xbc\x04\xee#\x1c&\x97\xea4\x1f\x15\x8e~y\xf9\xdf\xaf\xb6\xe7#\xfa\xa7\x0f\r\xcc^\x8c\xf5GAA&\x02\xb3I\x80\xa2S\r\x04\x9b\xee\xf6A\xbb\xe1\xef\xef\xb3u\xb7\xeeq\xd9\xc9\x8d\xf0\x0b\xd7c\xee\xc0q\xfd\x9e\xff\xda\xe5v\xd2\xd9\r\x96B\x94\x1f\x8f\xa7\xe8Cc\xd4\\\xb1\x1ay\xf1\x1fE\x16\xceN\\\x83I{8i\xc9\xc6\x87\xda\xec\xf6\xff\xd9\x8c\xc8\xc0\xad(zVK\x19\x19\x13pDA\x85\xd2\xc2\x88\xc0P\x94\xe0\xc2\x155\xf6\xb2w\xad\xb2\xd5\x97\xb5 Z2\r!p\xb0\xa0E@^wF<\xc60\xe1J-\xc6\x90\xe4\xe41\xdf\xf9\xc4\xc3\xf6\xd8\x1d\xd9h\xc9\xdcz\x95\x17\xf5$$\x90\x95\xaf\x9ao\r\xaf<\xcb"\x9cu\xbak\x80\x8aw^d\xf1\x982\x01\xfe\xf1\x96J;\xf8\xad\xfb\xad\xeb\x8e\xcd\xb9\x02 +\'\x9d7\xebs\xe0\xb7\xc09N.\xffh&\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\xa2%\xc0n\x0f2\x11\x10\x81\xc2$\xc0\xfb\x97\r\x18\x8c@o\x9f\x83\x7f\x00\xee\xb7\xe5\xc5\xbd\xcd\x86\xbekf\xa1\xa9\xd5\xbc\xb8\xd2\xde\xf5\xd5\x0b\xed\xfc\x17/\xb2\xf6\xbd\xfd6\x80\x86\xbe\xc4?\\1\xd9\xac\x12\xe0d\x15\x8d\xe8\xba\xbb\xed\xc9\x0e\xfb\xf4ko\x1d\x99\xc95\xa4\x87\xb8\xe0\xa1p|\xd0\xaaK\xe7\xdb\x9b?s\x8e=\xefu+0\xbe_\xd2:\xf6\xf7[\x7f\x0ff\xb7\xc5A\xac\xf3\xae\xde\xcfj\xa9f\xf6\xe4,\x1f\xef]\xc7\x08BK7&I\x19\x1aL[\xf3\t\x15\x18\xf3p\xa1]\x86\x88>v\x83m\xdb\xd3\xe7>\xf3\xb9a\x17\x7fv\x95\r\xb4\xc1,W\xbc\xed\xc4\xa4 w\xff|\x9bmZ\xd7n\x8bO\xad\xb3\xd6\xe556\x84IB8\x03r\xa1>#\xc8\x88\x1agO\xc7\x90\xd5`l\xc0\x8b_\xba\xd4\xaa\xeb\x93\xf6\xe4=\xfb1\xbbsV$\xe6\xd8\x91\x9e\x85g\x94\x0f\xcb\xa1}\xdd\xd6\xf7\xe8\x1e+_\xd9\xecD\xb4\xe1\xde\xa1\xac\x80\x96\x0f\x99\x9bp\x1e\xa8\xefE,V\ta\xffn\n\xd2\xa3\x8c\x8a&\xffHF\xd1o\x03\xfc68\x8d\x07\xc9D@\x04D@\x04D@\x04D\xa0h\t\xe4\x85HP\xb4tU0\x11\x989\x02\xbcw\xd9\x80i\x85\xdf\x08\xe7d\x1f|\xcf\x86M~\x84\x1e\x85\x14\x94\xe7\xbd~\x85\xbd\xf5s\xe7\xb9A\xf2)\n\xb0\x99U\xec"\t\xae\x83,\xef\t@\xfc[Paw\xfel\xbb}\xf6\xb5\xb7Y_\xd7\x90\x13\xf1\xc2\xd9\xf6B\x0e\xb7\xb5"R\xed\r\xff\xfc,\xbb\xe6\xafO\xb3\x8aZLZ\xb3\x7f\xc0\x06 \x8e0\x12n.\xd7g\xd7e\x17\xf7t?X\xf4\xf7\xa4,Q\x12\xb73.\x9fg\x17\xfc\xc9\tN\xd0\xdb\xbf\xbd\xdb\xda!\x92:\xf1\x0f\x1c\xf9h\x08\x9b\x17\xc2\xf6m\xed\xb6\xdf\xff\xd7&K\xe3\x8f\x03\'\x9f\xdbdU5I\xeb\xc7\xa4)\xec6\xec\x9el\xe1\x83\nd\x9d\xf5b\x10bf\n\x93\xa6\x9cz~\xb3\x9d\x8b?\x80\x1c\xc23p\xd7\xd3]\xee9H\x813\x14\x1c\x99\'\xa5B7\xed\xee\x01\xeb\xbe}\xb3%\x16T[\xe9\xb2F\xcb\xf4C\x04\xccjjy\x92\xc7g\xc8\x06*\x19\xc5\xfdD}\x99u\xdf\xb1\xd5\x86\x87\xf0\xf5\x98S\xef\x90\x02\xb70b\xfe\x1bp\x89\x7f\x80 \x13\x01\x11\x10\x01\x11\x10\x01\x11(n\x02\x12\x00\x8b\xfb\xfa\xaat\xc5I\xc0\x8b\x7f\x9c\xec\xe3\xc7\xf0\x0b\xe0\x14\xff\xb8\xfd\xc8&\x0e6\x1eO\x0b7\xee\xab\xea\x92\xf6\xb7_\xba\xc0\x9e\xf3\xaa\x930\xd1\xc7\x00|(;\xd0\xff\xac\xe7\xf2x\x12\xd1\xb9\xf2\x8d\x80\x13\xa2P\x07\x1b\xe6W\xd8\xefn|\xda\xfe\x03\xdd~iY\xb1\xef\xb0\x0e\xe0\xde\x07c\xa3\xbd\xe4oN\xb57~\xea\x1c\x9b\xb7\xb8\xc2\x89YN\xf8C\x04\xd7\\\x16\xfeF]W\xf0$\x0bFAf\x86\x86\xad\xab}\xc0\xad/YU\xe7&\xfaY\x84\xa8>\xce\x90\xcb\xe8_o\x8e\x1dq\x07\xc8\xbd\x18\xb6\xfe\xbe\x03\xf6\xc0ow\xd9\xfceU\xb6\x18\xc7\xa71>#\'R)\xe8h@\x14\x93\xd1\x80\x9c]\xfa\xa2\xab\x97X\xf3\x92*{\xf4\xf6\xbd\x96\xc2\xe4\'\xb4\x11\x16\xee]\x1e\xbc\xf0A\x0ee\xb2\xf7\x81\x9d\x88\x93\x8bY\xd9\xe9\xf3\xd0A\x16\x17\x8a\xd1\x8b\xb8\xce\x05a\xf8V\x8cV$,\xb5\xbf\xc7\x06w\xb4g\xc73<|{\xb3\x08,H3\xfc?\xe0\xdd\xc1{,d" \x02" \x02" \x02"P\x9c\x04$\x00\x16\xe7uU\xa9\x8a\x93\x00\x1b+\x8c\xeec\x8b\x91\x93}\xfc\x00\xbe\x18\x9e7\x93}d\x07\xb8G\x8e`k\x9f\xd3j\xef@\x97\xdf\xd6\x93\xaa\xed\xe0\xee>4\xe2\xd1\xfe*\xc4\x01\xe5\xb3\xc5\xd1k\x11\x11\xa0~\xd1\x80\th~\xf3\xf5\r\xf6\xad\x7fz\xd0\x95\xcc\x89O\x81\xd87"bC,h\x81P\xf3\xf6/_`\x17]\xb3\xc4\xba16]7Dl\xee+\xe1\xef(\x15\x02|\xc9\x88\x13\xab\xf4b\xac\xcfT\x7f\xc6\x96\x9eQg\x97\xbel\xa9-\x84\x10\xb8\xed\xc9C\xd6\xd3\x9e\x8d(sc\x04\xf2\xc9\x06c$\x9cc\x8f\x17v+\xbe\xf3\'\xdb\\\xb4\xdc\xeaK\xe6YEM\x89\x8b.t\xfbgw/\xb8W\xd6\x99AD\x02\xf6\xf7\x0c\xd9Ik\x1b\xed\xea\x8f\xf7\xeb\xbf\xc1?\x08g3\x862\x05?\x9bU\xf3m@\x8a&\xb5Me\xf6\xce\xaf]\x84h\xa9\xc5\xd6\x86\xae~\x9c\x18\xc0\x8d\x0f6\xab9\xd4\xc9E K \x83J\xda\xb2\xa8\xd2n\xff\xd1V\xfb\xcf\x0fg#\xff\xc2\x11eN\xfc\xa3\xa4\x0e{\x05f\xab\xfe\xb3\xf7\x9e\x81n\x9b\x83\x87\xbb\xaeg?\xd2\xeb$\x088!\x10l{1\xa6\x1f#\x03O\xbf\xa8\xc5.DWX\xfe\tc\xc3\x03\x07\x8f\x1c\x1f\x90Z\r\x9frxa4\xe0\x1d\xb8f\x9cDd\xd5\xc5-\x16\xc1\x0c\xcb\x8c\xa4\x0b_\xbbIdiV\x0fa\xde9\xe3\xf1\x00xp\xbc\xc3s_t\x82\xed@$\xe0\x81\xed=._^\x00\x9d\xd5L\xe6\x9c<\xdd\xdeg=\xf7l\xb5\xb2\x95-V2\xbf\n\xe3\x02R?\xcbc\x03\xe3a\xcc\xca\x9dh\xa8\xb0\x9e\x07w\xb9q\r]\xf7e~sf\x8dw;\xbfC;\xe1\xdf\xcen\xd2\xab\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14/\x01\t\x80\xc5{mU\xb2\xe2 \xc0\xeeIleq\x9c"v\xf9\xbd>x\xcf\xa6\xf1\xac\x8b\x7f\x14\xf7\xfc\xc0\xfe\xe7\xda\x8f\x82\x0b\xeb2\x97\xef\xf8\xd2\x85\x18\xb7n\xa9\x1d\xd8\xd9k)u]\x9f\xbeZ\x00\xde\xd9Ha\x0c\xb8\x86.\xc0\xf1x\xd4\xd6^\xd5jg^\xb1\xc0v\xaeow\xb3\x06\xf3d~\x1f\x7fb/\x86=q\xd7~[\xff\xc7\x03\xb6\xfa\xa2y\x88\xe2,\xcbN\xdaR\xc0\x11\x99\xee\xf9\x88J\xd8\x0b\x16\x95\x98T\x86u\x8e\x91\x91\x8f\xdd\xb5\xcf\x89\xa4,?\xebh\xde\x18\xef\x11\x8c\x01\xd8}\xe7\x16\x8b7VX\xe9\x8af\xcb\xf4!\x82\x932Z>\xe53\x0c\x0c7~\xb4\xae\xcc\x06\x9e>hC;\xd1\xd5\x9a\xf5\xe5\xb0\x00\xc85~\x8f2\x0c\xf5{p\xaa\xaf\xf9Z\x12dM&\x02" \x02" \x02" \x02S# \x01pj\xfct\xb4\x08\xcc$\x01\xde\x9f\x14\xff\x96\xc39\xd9\xc7\xc5p\x1f\xb10\xfb\x8d\x14\xb4L9\xcb"\xedU\xff\xb8\xc6^\xf1\xbeU6\x88\x81\xfa\xbb1\xd0\xbd\xc6\xfasX\xf4\x92G\x04(\xf4\x95\x96\xc5\xed\x87\x9f{\xcc\xf6l\xc2\x0c\xac0/\xaed\xc5\xbfa\x8b\'"\xf6\x9eo\\\x8c(\xb3\xf9\xb6\x7fG\x8f\x13\x03\xfd>yT\x94\xa2\xc8\nE\xbe\x14&\x0b\xe9\xed\x1c\xc4L\xccev\t\xbb\x057\x97\xd9\xe3wb\xbc9Dm\xd1F\xd8\xe3\xda\xf9u\x8a\xb2\xb7\xff\xcf\x16;qM\x83-]U\xeb\xba\xd2\x0eg8\xf9H\xe1ba\xfd\x1bB4\xdd\x00f\x0b>\r\x91\x91gC\x14\xdd\xf2x\xbb\x1b\xff0\xcb!O\n\xc7\xc7}\x00\xba\xf7\xe1\xdd\xd0\xd1"V~\xc6\x02D\xd9A%G\xb7l\xffY~]\t\xe4\x0b\x11\xa3\xc3\x98\x84\xaa\xef\xf1=a\xf1\xcf\xa1e\x89\xe0e\xf0\x1f\xc1\xd9\x15\x98\xdf\xbb,\xa9L\x04D@\x04D@\x04D@\x04\x8a\x8e\x80\x04\xc0\xa2\xbb\xa4*P\x91\x10\xf0\xe2\xdf\xb9(\xcf\xf7\xe1\xa7\xc3\xd1\xcar\x8d\x93Ym\r\x86\x1b\xda\x8d\x98H\xe1\xed_\xbe\xd0\xce}\xc1B;\xb8\x87]~\x87%\xfe\xe1"\xc9\xf2\x8f\x00\xebm:\x9d\xb6\xf3_\xbc\xd8\xd2\x98\x14`\xc3\x03m.\x93\xecV\xca1\xe5\xe2X\xbe\xef\xc6Km\xc5\xb3\x9a\xec D&u]\x9f\xf9k\xc8kB\xf1k\xa07\xed\xc6\xbf;\x15]a/\xbev\x89\xed\x83\xf8\xeaEZ\x17e\x1c\x92c\xf8\x9e\xdd\x7f\xd9%\x983\xea\x9ev\xe1|w\xec\x10"\xd3\\7\xe3\x99\xcf\xf6\x8c\x9c\xc1GK\xf7\x1c\x1a\xb4\xda\xe6R\xbb\x14\x1c\xd2\xa8\x97\x1b\xee?\xe8\xce\x97\x1b\x159#\x99\x98h\xa2\xc17\xd0\xc0\x86\xfd\x96\xe9\xe8\xb3\xf2\xd5\xadN\xfb\x1b\xe6\x8c\xc6\x8c\xb0\xcb\'\x83\xf2\xcf.\xe3\x86hSF.\x8eaT\x9b\x93\xf0\x9f\xc27\xc0\xf9\xdd\x9bU\xa0\xb1"\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81b" \x01\xb0\x98\xae\xa6\xcaR\x0c\x04\xd8z\xf2\xdd~\xaf\xc3:\xbb%\xb5\xc2\x19\t\xc8\xed\xb3jl\xa4\xfa.\x93\x17`\xcc\xaa\xbf\xfd\xca\x05\xd6\x881\xd5\xda0A\x02\x1b\xf2aqpV3\xaa\x93\x8b\xc0\x18\x04\xd8\xc5\x97\xf5\xf7\xac\xab\x16b6\xdaj{\xf0\xe6].\n\x8d\xbb\xfe\xdd7.\xb5\x93\xcf\x91\xf87\x06\xb6\x19\xdf\xe4"0\xf1\x84\xe3\x0c\xcb\xe5\x95\t\x8c\r\xb8\xd8\xea1Q\xcb\xc3\xb7\xec\xc9F\x19\x87\x06;\xe0\xf5\xe3\xfe\x8c\xd1z\xf8\x0f{l\xdf\xb6.;\x1b3\x8e\xc7KbnL=/\xa4\xcdx\xa6g\xe8\x04,[?\x04\xd14\xc6I<\x1b\xc3*,_\xd3h\x8f\xde\xb1\xd7\xcd\x80\xccS\xe6\xcd36\xd0\xf9\x06\xb7\xb5\xdb\xc0\xe6\x83\x98!x\xa1E\xcb\x136<\x90g\x93\x83\xf0;\x0b\xdcb\x95I\xeb\xfc\xedS\xb9W\x8d\xa5\xa0\xd8\xc7\x1av\x1b\xfc>8\xb7\xf1\x10\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14\x1d\x01\t\x80EwIU\xa0\x02&\xc0\x86\x07\x9db\xdf\x9b\xe0~\xa6_\xbe\x9f\xf5{5;\xde_\xb6]t\xdd{V\xd9\x9f\xbd\x7f\xb5\x9b\xd5\xb3\x1b\x11+\x8c\xa2\x92\x89@!\x10\xc8\xa0\xdbi\x0f\xba\x9d\xae8\xab\xd1\x8d=\xf7\xe8\xed{\xede\xefZe\xe7\xbd\xf8\x04;\x80\xc83E\xfe\xcd\xd2U\xc4#\x84QnC\x18F`\xa0g\xc8N9\xbf\xd9\t`\x9b\x1ej\xb3\xf6}\xfd.S#\xe2\x1e\x1fC\xc1#g\xfb\x93\x1d\xae\xdb\xf09\x88B\xae\xa8N8\xf1\xcc\t\x84\xb3T\x8c\xe98\xad\x8f\xf6\xebi\x1f\xb4E+k\xec\x02\xd4\xcd=[\x11\x15\xb99\xdbu=7*r:\xce9\xe94p\x1dR\x07z\xad\x1f\xddk\xcbN\x9fg\xb1\x9a\xfc\x9c!8V\x12w3\x01\x0fcb*_w\x822{\x01\xf0q\xbc\xbf\t\xce\x9a%\x010\x80\xa3\x85\x08\x88\x80\x08\x88\x80\x08\x88@q\x11\x98uQ\xa1\xb8p\xaa4"0i\x02\xbe\xd1\xc1\x86\xc7G\xe0\x9f\x86\xf3\xfe\xe4\xfb\xd9\xbdO\x913?;jU}\xd2\xde\xf9\x95\x0b\xdd\xec\x9dm\xe8\xf2\x9bB\x97/\t&\xb8B\xb2\xc2!\xe0\xeas\xc4\xcd\xee[\x8f\xb1\xe7.z\xc9\x12;\xe1\xb4Z\xfb\xff\xec\x9d\t\x9c\x1dU\x95\xffO\xf7\xeb}O\'\xdd!;\td!$\x01\x02\x81\x04\xc2\x0e\x02\xa2\x80\x02\n\xb2(\xa3\x8c\xfb\xbeo\xe32\xce8\xa2\x8e\xeb\xe8\x7f\xdcQGDGG\x1c\xb7QT\x16\x17\xf6\x1d\x94%@\xc8\xbet\xba\xd3\xfb\xeb\xb7\xf4\xff\xf7\xbb\xafn\xe8\x84\x00\xbdU\xbdz\xef\xfdN\x7fN\xbf\xb5\xaa\xee\xfd\xdezU\xb7~u\xee=\xdd\xbb\x06\x11]\xc5\x9f\xa1,\x9f\x04\\\x13\xe0_\x1f\xe6\x12\x9d\x82\xa1\xb0\'\xbd\xfc \x17\xd9\xf7\xd8\xdd\xb9\xa1\xb0\x883~\xbaxlK\xbc\xda\xb5m\xc0\xee\xf8\xbf\x8d\xb6\x12\x91\x80\xad\x07\xd4\xd8@o:\x17%\xf8\xf47\x0b\xf2\x19\x85LfM\xae\xa9\xab\xb0\x13.\x98oMH\x10\xe2\xa2"qV\xf0Q\x90\xb1\xa8\x18\xda+\xd3\x93\xb4\xbe\xdb6X\xed\xe26\xab\x9a\xd9d\xd9~\xe4\xd5\x88\xcb\xef\x89\xbc\xaa\x136p\xffVc&\xe3}\xca\xc5s,#\x009\xfc\xf7\xbaX\xf0T!D@\x04D@\x04D@\x04D $\x02\xf9\x15\x16B\xaa\x94V+\x02\x05F\x80\xbfCF!\xd4\xc1\xff\x03\xfe\x0e8/Jh#\x06\xbf\xe5\xde\x88\xf2\xbf\xbb~cI\xe0\xf3\x97M\xb1w~k\xad\xcdY\xdcl\x1d\x9b1\xe4\x97\x17\xdf#\xae\xc5\xa3,\x97\xb6%\x02\x13%@\x01e\xa8\x8f\xc1\xb5H\x01\x8a\xa8\xb3\xbd\x84\xa5\x89\xae\\\xcbO\x98\x80k\x1f\x0c\x85\xcd"!\xc8\xd1/\x9ac3\x0ej\xb2{0d\x9b\xf3\xe2\xed+~\xf15\x05\xc3?\xfd\xcf\x93\xb6du\xbb\xcdZ\xd4\x8c\xe4"\xa9\xa2\x10\x01\xcbq\x90M\xe1F\xcb`\x7f\xda\x96\x1f\xd7n\xcbO\x98\x8e\x88\xc7\x1dN\xc0&\xe4\xd8\x1c\x83\xd1\x06\x8c\xae\xeb\xbb\xed)\xab\x99\xd7jUs[r\x19\x82cR\xc02D\x002\tHz[\xef\xfe\xa0\xf1L\xb6\t\xfe\x032\x95\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88@\xb1\x12\x90\x00X\xac-\xabz\x15\n\x01\xfe\x06\xa9BL\x85_\x03\xbf(x\xcd\x0b\x92\xbc\xcak#\xe7\xfb;\xe9\xa2\x05\xf6\xe6\xffXcU\x95\t\xeb\xde\x99\xb4r\r\xf9E\xf3\xc8\n\x9d\x00\x85#7\xa7\\^\x7fi\x85N1\xbc\xf2\xb3}\xd28:r(\xec\xc1+\xa7\xda\x91\xa7\xcd\xb4\x87\xfe\xba\xc3z;\x939\xe1\xcb\xb7\x1bnP8\xa1\x0cB\xee\xcd\xff\xfd\xa4\xcd=\xa4\xd9e\t\x1e\xec\x89Q\x14\xda\x040\xf9\xc8\xd4\xde\xae\x94\xb5\xcfi\xb4\x93/>\xc8:\x11\xf5\xc8\xe1\xcf\xb4}\x05\xd1\tlj\xfc\x8b\xf2F\x11\xc5>d\x86\xef\xbd\xfd)\xabh\xad\xb5\x9aE\xed\x96\x1dD\x1b\xe4\xdb\xb2\x88T\xaf\xa9\xb6\xe4\xba\x1d\xc69\x0b]\xa2\x12\x967g\xae\xe4x\xba\x13\xfe\xed\xe0==\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@Q\x12\x90\x00X\x94\xcd\xaaJ\x15\x08\x01\x9f\xecc.\xca\xfb\x13\xf8)pf\xfa\xe5\xfb\xfe\xd2\x16O\xa3\xb7\xdc\x1cT\xb9+\xa4K?|\x98]\xf0\xcee\xd6\xbb+\x85\x89\xe8S\x12\xff\xa2o\x0em1D\x021\tP\n\xb1\x86\x85\xbdj\xb6\x0f\x05\xae~D\xf8\xb5\xce\xa8u\xd3\x0f<\xf5\xf7.\xdb\x8e9\xf1h\xbe\xfd\x9c\x8a\x83\xef1Z\xf9\xb6_nt\x11\x83\x8bWMu\x91\x81^@+l\x129\x0e\x03}\x18\xde\x8c\xbfc\xcf\x9bk\xf5\xc8\x82|?\x12\xa1\xb0\xce\xb1\x10\x01]\x83\xe4(\xf7\xdf\xb7\xc5\xcak\xab\xacv)D\xc0$T\\\xd7@yj\x01\xa8\xfc\xe5\xb5\x98\x1f\xf2\x91\x9d\x96|\x12\xd9\xbf\xb9\xd3\xb0<9\xf3%\xdb\x8e\x97\xdf\x84?\xfdI\xf0\x05=\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@\xb1\x10\x90\x00X,-\xa9z\x14\x1a\x01\x8a|\x14\xfb\x8e\x80\xff\x1c~8\x9c\x91\x80\xf9\xcd\xf4\xcb\x8bm\x14\x82QQ\xcd\x98\x7f\xeb\xdd\x18\xf2\xbb\xea\xcc9.\xcbo\x1aY)5\xdf\x1f\xe0\xc8D@\x04"\'@\x81k\xa07c\x95\xd5\xe5v\xd2\xcb\x16X\xcf\xae\xa4=q\x7f\xa7+\x87\x17\x01G\naw\xfcf\xa3M\x9dU\x8fd"\xd31\x1cx\x08\x9a\x0f\x8fl\x85o\xbc9\xc3\x0c\xc1\x83\x98c\xef\xd0c\xa7#\x91\xcd\x0c{\xf8\xf6\x9d\x8e\x07k\x17\x8bj\x06\x85\x18\xf8\xdb67,\xb8\xee\x88\x99x\xc4I\x05\xd1\x81y\xb9\xb5\xe5\x05\xc0\xc7:\x10\x05\x88\xb9$Y\xbe\xbde>\xee\x1cP\x06\xed?\xe1\x9c\x8eC&\x02" \x02" \x02" \x02EI@\x02`Q6\xab*\x15s\x02^\xfc[\x8dr2\xf2o\x01\x9c\xe2_^\x7f\x8f\xee\x9a-\xb8(Z|t\x9b\xbd\xf3k\xc7\xdb\x8c\x83\x9b\x9c\xf8\xc7\x8b\xefX\\X\x02\x92L\x04D\xa04\tP\xfcJ\xa7\xb264\x98\xb1\xd5\xe7\xccsb\xe0\x83\x7ff\xe0\x164\x1d|\xe6D\x1djL\xc1\xc1\xea\xae\xdfm\xb6i\xb3!\x02\x1e\xd3\x86\x08\xc2\xe2\x11\x01s\xd5\xcbEE\xb6\xcfk\xb4\xe3\xce\x9dk\xdb7\xf4\xd9\xe6\xc7\xba\xf7f\xe1^\xe5\xf7_\xf2\xf1\x0e\xcb\xee\x1e\xb4\xba\x953\xad\x0cCq\x871\x87c\xe4\'\x13/\x00>\xbc\xddX\x9eg\x11\x00\xb7\x81\xd4\xd7\xe0\x12\x00\xf3\xbb\xcbh\xeb" \x02" \x02" \x02!\x12\xc8\xab\xe0\x10b\xbd\xb4j\x11\x88+\x01/\xfe\x9d\x89\x022\xe3`;<\x06\xe2_n.4B;\xf5\x15\x0b\xec\xf5\x9f_\xed.\xa8{4\xdf\x1f\x91\xc8D@\x04bB\x80\xe2^\x06GLNGp\xd8\t\x07X\xeb\xccz\xbb\x1b\xc9A\\\xf4\xdf\x88 ?/\x08\xde\xf5\xbbM\xd66\xb7\xde\x96\xe0\xa6F?\xe6\x04\xf4\xe2`L\xaa3\xa1b\xe4\xa2"SVYY\x8e,\xc1\x07Z"Qf\x0f\xdd\xb2#\'\x84\xc6\xe1\x8eMP\x86\xa1\r]\x96\xd9\xdek\xb5\xab\xe6!\x00p\xd8\x86\x91\xd8%R\x11\x90\x02`M\xa5\r<\xb0\xc5\x86\xd6#j\x94\xe5z:\x02\x90\xcf\xb8\xe7\xac\x87\x7f\x1d\xfe\xf4\'x!\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81b" \x01\xb0\x98ZSu\x893\x01^`0\xa3/\xc5\xbe\x8b\xe1\xdf\x877\xc2\x19m\x90\xd7\xdf!\x87\xf5\x0esh\x16\xec\xd2\x0f\x1fa\xe7\xbfc\xb9\xed\xee\x18\xb4!d\x9dT\xb2\x0f\x87E\xffD@\x04bD\xc0k[\x03\xc8\xf4\xbb\xf4\x98v\x9b\x8d\xcc\xe4\xb7\xfdj\xa3+an\xfeR<\xc5!\xcd\x8b\x80w\xfev\xb3\xcb\x0c|\xd0aS\x8b&;\xb0o\x0e\xd67\x95\x1a\xb6$\x04\xd1\xc3O\x9d\x89l\xed\xadv\xdfM[-\x85(\xc92\x9eqb"g\rm\xe9\xb6\xe4\x13\x1d\xd6p\xe4\x1c+\xab\xc49\x07\t[\\2\x0e_\x910\x1f\x87\xcb \x00&\xac\xff\xceM6\xb4\x19\x89S\xf6/\x00>\x82"\\\x1df1\xb4n\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\xc87\x81\xbc\n\x0f\xf9\xae\xbc\xb6/\x02\x11\x11\xa0\xf8G\xa7\xd8\xf7F8\x87\x19U\x07\xafy\x89\x967\xe3\x052\xc5\xbf\xea\x86J\x0c\xf9]\x8b\x89\xe5\xe7Y\xc7\xe6^Dh\xa0\xc0\x10\x06e" \x02"\x10[\x02\x10r\xfa0\xbf\x1f3\x04\x1f\x0cq\xef/?\x7f*\x97\xd5\xd9\x0b_#D@\n\x84KV\xb5A\x08l\xb1\x01F\x02r\xc8p\x91\x98\x17D\x99-y\xde\xd2)\xb6\xe6\xc5sl\xdd=\xbb\xdc\xf4\r\xac\xa2\xff<\xaf\xd5\x05\xee\xf4\xce>\x1b\xc4\xbc\x80\xf5\xab\xe6B\x90\xab\xb0\xe1\x14\xee\x87EQ8l\xbb\xac\xb2\xc2z\xfe\xf4\xb8\xa5;\xfaId$\n\x9e\x97\xb9\xc7\xdc\x0e\xff\xf1\xc8\x0f\xf4\\\x04D@\x04D@\x04D@\x04\x8a\x8d\x80\x04\xc0bkQ\xd5\'n\x04\xbc\xc0\xc78\x8c\x0f\xc1?\x03\xf7\x97\xa7\xfe\xb3\xfc\x95\x19\xa5j\x9fWo\xef\xf9\xce\xf1\xb6`\xc5T\xdb\xb9\xa9/wa\xbc\xd7\xf5Q\xfe\x8a\xa7-\x8b\x80\x08\x88\xc0s\x11\xe0\x90\xde>d\x08>p\xd9\x14;\xf0\xd0\x16\xbb\xe5\x17\x1b\xf6\x8a\xfec\x04\x9c\x8f\n\xbc\xf3\xb7\x1b\xed\xa83f\xd9\x94\xe9uH(\x82\x08\xe7"\x12\x01\xc9\xc8\r\tFTd}K\x95\x1d\x7f\xc1<\xdb\xbdc\xd0\xd6?\xd4\xe5\xf0y\x06\xcf\xc52\xf4\xcfp^\xc9`>\xc0\x81\x87\xb6Z\xfd\xca\xd9V^W\x89H\xc0hD\xc0\xf2\xca\x84\xed\xfe\xcd\xdf-;\x90\xdaWt\xe4\xb9\x99\xe7\xe2\xdf\xc1\xff\x0f\xae\xb3\x1f \xc8D@\x04D@\x04D@\x04\x8a\x93\x80\x04\xc0\xe2lW\xd5*\x1e\x04x!\xc1\x8b\x0b\xda\x97\xe0\xef\x833\xda\xc0_p\xe0i\xf462\xe0b\xc5\t3\xec\xdd\xdf9\xc1\x9aZk\xack\xc7\x80\xb2\xfcF\xdf\x1c\xda\xa2\x08\x88\xc0\x04\tP\xf8\xe2\xfc~\x0b\x0ek\xb5\xb9K[\xec\xd6_\xe6D@/\xe50\xaby9\x0e|\xa9\xa1\xac\xdds\xfd\x16[\xfb\xd2yV\xd3Pa\xa9\x01\x0e\x93-.\xbd\x87\xf5a\xbd\x86Q\xe9\xe3\xce=\xd0\x1a \x06\xdew\xe3\xd6 2\x12u\xf5g\xa4\t2\x1f\xf7\xe2h\x87lO\xd2\xfa\xef\xdfbuGA\x04\xac\xaf2\x1b\nY\x04\xac\x80\xbe\x87\xcc\xc9]\xbfxp\x7f\xc5\xf6\x11\x80\xd7\xe2\xc3[\xe0\xec\x17\xe7\x9b\xd2\xfe\xca\xa9\xf7D@\x04D@\x04D@\x04D`\xc2\x04$\x00N\x18\xa1V \x02\xfb%\xc0\xdf\x16/,j\xe1\xdf\x81\xbf\x06\xee/4\xf2v\xc5\xc9\x8bC^\x0c\xd3N\xbb\xfc {\xedg\x8evs\xfd\xf5c\x18\x1d\xe7\x02\x94\x89\x80\x08\x88@!\x12`$`?\xa2\xdf\x0e>\xbc\xd5f!{\xf9\xed\xbf\xce\xcd\t\xe8\x93~\xf0\xb0\xe7\x85\xc2\x87n\xd9n\'^8\xdf\x86\xb1L\x06Y\x85\xfdw\n\xb1\xde\xfb+3\xeb\x99\xc64\x0e\x03\xbdC\xb6\xec\xf8\x19\x8e\xc9\xed\xbf\xded\x19$\xdf@\x95\xf3o\x14\x01\xfb\x86\xac\xff\xeeM\x98\x13\x10\xc3\x81\x1bk\x10\t\xc8y\'B(\x1c\xce\xba\x8c4\x1c\\\xd7a\xfdw@\x18\xde\xbfq\xc3_\x84?\x06\xf7\xe7\xee\xfd\x7fS\xef\x8a\x80\x08\x88\x80\x08\x88\x80\x08\x88@\x01\x13\x90\x00X\xc0\x8d\xa7\xa2\xc7\x96\x00\x87\x13Q\xeck\x80_\x03\xbf\x10\xce\xe4\x1f|?\x84+\x1c\xacu\x14V\x86M3*\x84v\xe9G\x8e\xb0\xf3\xde\xb4\xd4v\xefD\xb2\x0fL\x16/\xf1o\x14\x00\xf5\x15\x11\x10\x81X\x13\xf0"\xe0\xc2#\xa7Y\xd3\x94j\xbb\x17\x91o\xce\xfcQ\x17\x87?&\xc6\xe8\xda>h[\x9f\xec\xb5\xb5/\x99k\xc9\x01\x1e\xaa\x8b\xcfrZZn\x8e\xc4\xb9K\x9am\xd5Ys\xec\xe1\xdbwZ72\xbb\xbb\xb3\x90g\x92\xb7\xaa\xe3|4\x98\xb2\xbe\xbb6Y\xfd\xe13-\xd1R\x8b\xd7!\x88\x80\xd9\xac%\xa6\xd4Z\xcf\xf5\x8f\xda\xd0SA\x06\xe0\xa7\xeb\xeco\xca\xed\xc2[\x9f\x83#\x85\xb2\xb3\xe06Y\xf0J\x0f" \x02" \x02" \x02"P$\x04$\x00\x16IC\xaa\x1a\xb1!\xe0\xa3\x07ZQ\xa2\xff\x81\x9f\t\xc7U\x8dU\xc0\xf3v\xc9\x95\x8b\xfc\x1b\xb6\xca\xaar{;\x92}\x1cw\xee<\xdb\xb5\xad\xcf\x869\xf2\xaa\xc8\x86\xc0\x81\xb3L\x04D\xa0D\tP\x04t\x91ok\x0f\xb04\xa2\xfb\x1e\xb9c\xe7\xde$\x02ig\xf3c\xddVY]a\x87\x9f<\xc3\x98<\xa3X\x8f\x83N\x14\xedI[\xcb\xf4Z\x0c}\x9eo\xac\xf7\xd6\xc7{\x1c\x930\x02\xee\xf6\x86\xfd<\xaf\x18\x91\xeeD\xc0\x8dV\x7f\xc4\xacpD@D\xb6\x97\xa1\xcdw]\xf7\x80\x8b:4F\xba?-\xef\xf9\x1bs\xf7\xa2\xa4_\x80\xf3\xb5L\x04D@\x04D@\x04D@\x04\x8a\x96\x80\x04\xc0\xa2mZU,\x0f\x04|\xe4_\x1b\xb6\xfd\x13\xf8Ip^PP\xfc\xcb\x9b\xf1"\x8f\x81\x7fS\x0e\xa8\xb5\xf7\x7f\xff$\x0c\x07\x9b\x8aL\xbfH\xf6\xc1\x0f\xf2&I\xe6\r\x876,\x02\xc5G\x80\x82\x06\x1c\t\xbd\xddo\x9d\xbf\xf7\xd1\xb8\xfb\xf9\x17\xe11 \x9b-Cd_\xdaV\x9e>\x13\xc7\xba\x01{\n\x890FV\xd3\x0b_\x0f\xfde;\xe6\r\x9cj\xf3\x0e\x99\xe2\x86\x0f\x17\xad\x08\x08\xa1m\x10IO* ~\x1d\x8b\xa8\xc7\xfe\xddC\xf6\xf8}\x88\x86\x83\xb9\xf3\x80{\x96\x87\x7f\xdco\xd12\xc3Ci\xeb\xbf\x0b"\xa0\x8b\x04\xac\x9b\xbcH\xc0L\xd6*\x9ak-\xf9h\x87u\xdf\xc0\xd1\xbd0\xb7\xcd\xdc\xd3\xe0\x15\xcf\xdb?\x87_\x07\xe7\xb9\xba8CBQ1\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08H\x00\xd4> \x02\x93C\x80\x17\x0e\x14\xfb\xe6\xc1y1\xb1\x06\xee#\xff\xf04\xbf\xb6p\xe5T{\xf7\xd5\'X\xeb\x8c:\x0c\x7fS\xb2\x8f\xfc\xb6\x86\xb6.\x02\xe3 \x00\xe1"\x8b\xe1\x8c\xd9\xcc\xb0\rC\xe9\xa3s\xce4\x8aY\xe5\x15eV^Y\x8e\x08\xdf2\xab\xc0cU5\x9f\xd3\x13\xc1c\xee3\xbe\x97@B\x84\x8aJ|\x9f\x91QX\x96B!VkY\xcc\x0f\x97\xe1:\xe9PI\n\xf9\x06\x81\x13\xf8p4N!\xb9\xc4\xea\x17\xcd\xb5uww\xd8\xf6\xa7\x82\x9b\x1e\x01z/|\xdd\xf5\xbbM\xb6\xe6\xbc\x03\x919\x17IA\x92\xc57\x1f\xa0\xdf\xd3\x98\x058\x8dD\x18i$BY\xf3\xe2\xb9.\xf1\xd3\xbd7lq\x1f\xe7?CpN\x04\xec\xbb}\x93\xd5\xad\x98a\x89\xd6I\x12\x01\xb1\x7f\x97\xd5U[\xc7\x8f\xef\xb6\xf4\x8e>f\x82\xd9W\x00\xc4\x1bN\x1b\xfe\x08\x1e\x03\x85p\x1f\x89\xd0\x03\xd4\xa3\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14\x01\x01\t\x80E\xd0\x88\xaaB\xde\t0\x82\x80\xe2\xdf\x12\xf8/\xe1\xcb\x83\xd7y\x8b\xfcs\x17\xc0(\x04m\xd5Y\xb3\xed\xcd_Yc\xe5\xe5\xe5\xd6\xbb+\xe9\xc4\x82\xdc\'\xfa/\x02"\x10K\x02\x81\x0e7<\x1c\x08~\x10\xfd(\xf2\xd5 \x99A=\xb2\xba6M\xab\xb1\xba\xe6J\xab\xae\xad\xb0\n\x88z\xccp\xcbq\x8e\x1c\xd2\x9fIA\xe4\x81\x98\xd7\x87\xac\xb8\x03}iK\xf6\xa7m\x10\x9e\xc4\\\x9fn\x1eP\xc67\r\xe3\x19\xce\xfe\x14\x08\xab\xeb*\xac\xbe\xa9\xc2\x1a\xb1\xce\xc6\xe6j\xab\xaaI`8l\xb9e\x10=\xc5\x04\x19\xb9yC\xb1n.C\xb9\xa4P\x0ce\xcd\x82\x05\xcb\xbf\x1a\xc7\xc0;~\xbb\xd9z\xbbp\xfc\xe3\xb0Sj\x9c0\'\x8a\xa1\x8e\x8f\xdd\xbd\xd3N<\x7f\x01D\xd5\x9cHVP\xf5\xccUeT\xffY/\xee#}H\xfa\xb4lm\xbb\x8b~\xbc\xf3\xb7\x9b\xdcP\xe9\x91\\F\xb5\xb2I\xff\x12\xda%\x95\xb6\xbe\xdb\x9f\xb2\xba\xc30\'\xe0DE@\xfef\x9ak,\xf9\xf0\x0e\xdb\xfd\xab\xbf\xe5J\x1b\xb4{Pt\xff\x8a\xc2\xdf{\xe0<\x87\xfb\xf7\x82\xaf\xe8A\x04D@\x04D@\x04D@\x04\x8a\x8b@!u\xe7\x8b\x8b\xbcjS,\x04(\xa2{\xf1\x8f\x91\x7f\x0b\xe1y\x8d\xfcs\x17y\xc1e\xcc\xe9\x97/\xb4K>x\x98\xf5`\xc8\x17\x85\x80\x04\xe7?\x92\x89\x80\x08\xc4\x8e\x00\xa3\xf0\x86!\xba1I\x05\xa3\xf8*\xaa*0G\x1d\xa2\xf9 \xc8U\xc2\x07 \xe8m[\xdfk\x1d\x9b\xfal\xc7\xc6~\xe7\xbb\xb6\xf6Y\xd7\xd6A\xeb\xdc6\x80!\xac\xc8\xaa\x8a,\xb8\xa3U0(\xfc\xb5\xb6\xd7XS{\xad\xb5\xe0\xb1}n=\xa6\t\xa8\xb3)\x98+\xae}v\xbd\xb5\xe15\xc5\xc6\xa1\x81\x8c\xa5 \x1e\xa6\x90\xa0a\x08\x11r\x14\x05i\x8c$\xdck\\m\xec\x88\xe6\n4\x0c!\xa8qj\r\xe6\xbe\xdbm\x1fy\xc9\xef\xdd\x9b\x8c\xfe\xf3\t\x91\xc8\x1b:\xab\x9d\xfe\xca\x83\xed\xf2\x7f:\xc2\xb6\x83\xaf\x13TcZ\x9f\xc9*\x16#I\xa7\xce\xac\xb3\x8d\x8fv\xdbU\x97\xdf`\xdd\x1dC\x93\xb5\xea\xf1\xaf\'8y\x957T\xd9\x8cw\x9e\xec\x92wd\xbb\x07s\x91{cY+\xa2X\xcb\xaaqj\xaeH\xd8\xe6\x7f\xf9\x9dev\r`\x87\xc5\xb9\x0fu\x1ea\x04(\xfaQ}\xc2\xaf\xd3jk\x13\x10\xdc\xaa\xdd\xd0\xdb\xfe\xbe\x94\x9b\xb3m\xfd\x03\x9d\xf6(\xa2\xd3\x9e\xc0|m\xccZ\xdb\xdd1\xe8\xa2\xb5\xc2\xae\x01\x87\x087\xb6\xd6X\xdb\x9cz[|\xf44[\xb2\xaa\xcdf-lA\xd4a\x85\xd5\xd4W8Q\xb0\xb73\xe9\xcaB\x01\r1\x889\xf9$\xec\x82\x8ds\xfd\x14\xbb\xa6\xcd\xaa\xb3[~\xb9\xc1\xbe\xfa\xb6[\xddZF\xde(\xf1\xab}\xc77\x8f\xb7e\xc7\xb6\xd9.\x88\xaa\tD\\\x16\xbb\x91\x0b\xa3I{w\'\xed\xcbo\xb8\xc5\xd6\xdd\xdb\xe1\xce\x13>B2?\xf5\'\xf7aK4V\xdb\xf4\xb7\x9d`\x15S\xebmL" 5>\x88}\x15\xc8*\xbc\xfd\x1b\xb7`n\xc1Mx#\xb7\xce\x11\xf5\xf1B\xdf6\xbcw<\xfc\xf1\xe0K\xfe\xfd\x11_\xd5S\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(\x1e\x02\xc5\xdf\xc3-\x9e\xb6RM\xe2E\xc0\x8b\x7f\xc7\xa1XL\xf81\x1d\x9eW\xf1\x8fsz\xf1\x82\x8e\xf6\xfa\xcf\x1fc\xc7\x9d7\xd7E\t\xb9R1\xb6A&\x02"\x90w\x02\x9c\xc7\x8f\xc30\x13\x88\xf2\xabA\x14^u]\x02Q~\x15\xb6\x15\xd1}\x8f\xdd\xd5a\x8f\xde\xb9\xd3\x1e\xbe}\xa7m|d\xf7\xb3\x96\xd5\xcd\xf9\x87O\x9dZ\x81\x7f\xeeW\x1f\xa86\xa3\x12op\xe6w\'\x7f\xa8`\xee\x91\xfa\x1d\x9e\xb8)\x001O\xdc\xb3\xd9\xa2#\xa7\xd9!k\xda\xec\xe0#\xa6\xdab\x88\x82u\x8d\x95\x18N\x9a\xb2!\x0e1N2\xf0\x19\xf5J\xc4\xf3`\xc3!\xcc\xd3f\xd7\xda5\xffr\x8f\xfd\xfa\x9b\x8f\xee%\t\xf9\x1b\'\x8dS\xaa\xec_\x7f}\x06\xe6G,w\xc3\xa61\x12\xba\xe8-\x8bF\xafk\xaar\tB\xbe\xf4\xa6\xbf\xd8}7Q\x13\xc3\xfe\x81\xfdaT\xfbR(\x84\xb8Wb\x08/D\xc0\x19\xef<\xd1\x12\x18\xca\x9b\xedE\x84\xe2\xf3\xdd\xc5\xe2\xf9\x0fQ\xb3\x89\xc6\x1a\xeb\xfa\xd9\x83\xb6\xfbw\x0f?[\xe9\xf8\xd3a\xeb~\x16\xfe.\xb8?\x9f\xe3\xa9L\x04D@\x04D@\x04D@\x04\x8a\x97\x80\xeb\xfb\x17o\xf5T3\x11\x08\x85\x80\xbfX8\x1dk\xbf\x16>\x05\x9eW\xf1\xcf_\xc0V#\x8a\xe8\xcd\xffq\xac-?a:\x86\n\xf6c8\xa1~\xe2\xa1\xec\x01Z\xa9\x08\x8c\x91\x80\x13\xfe0\xc7\\mS\xa554shm\x1a\x91f\x03v\xef\x1f7\xdbm\xbf\xdah\x9b\x1e\xeb\xb1\x81\xde\xd43\xd6\xca\xe1\xaa^\xf7\xc8\t2\x9c\xd7\xee\x19_\x9b\xb47r\xdb\x1a\xb9\xcd\xfdo\x8fY\xc5\x97\xaenwYe\xe7/\x9f\x8ay\x04+\xddPaF)fQ\xc0D.4p\xd2\xca5\x19+\xe2M\x92FDY~\xf2\x92?"\xb2r\x97;>\xbad*X9\x87\xfd\xb2\xdck\xce\x99co\xf8\xc21\xb6s\x03\x86\x9eb^\xc5R0\x0e\x93\xe6\x90\xf0\xea\x86\x84}\xeb\xfdw\xda_\xae{\xcaU\x9b\xfbB\x98\xfb\xdas\xb2\r\x14iF\xf2M\x7f\xe7I\x96\xa8\xaf\xcc\x89\x80\xfb;\xa79%\x1c\x82a\x13"h\xf1\xb7\xeb\xc7\xf7Y\xcf\x9f\x1f\x7f\xb6\xd5\xb3Qyb\xdc\x00_\x05\xdf\x0e\xa7\x95Fc\xe7\xea\xaa\xff" \x02" \x02" \x02%J@\xea@\x896\xbc\xaa=n\x02^\xfc{!\xd6p\r\xbc\t\xee\xa3\t\xc6\xbd\xd2\x89,\xe8\xe7\xb0\xe2\x05\xf9{\xbf{\xa2M\x9f\xd7`\xbb\xb6\xf5\x97\xc4\xf2\xef",\xf7\rx=z\xe6\x8d_\\m\xc7\x9c=\xc7vn\xc6\xfcG\x10\x04\xcbt\xcd\x8a\xe6\x91\x89@t\x04\x18\xd1\x97\xa8*\xc7\xf0\xd1\x1a{\x00\xf3\xa3}\xeb\xfdw\xda\x8e\x8d}\xae\x00.Q\x02C\xa3$1\xf2\xefs(\xc0\xbf\xc1\xfd$\x9c~\xcf\xc9_\xc9\xf2ED\xdb\x15\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81g!@\xc1C&\x02"\xf0t\x94\xc0?\x00\xc67\xe1y\x15\xffr\x11EfM\xad\xd5\xf6\xa1\x1f\x9fls\x964!\xe1\xc7\x80\xc4?\xed\xa9"\x101\x01\n\x1b\x14\xa9\xa6\xcd\xac\xb3;\xaf\xdfb\x9f\xbb\xf2\xcf\xd6\xb1\x99Q\xb8(\x08\x04\xfa5\x87\xccr\x00\x00@\x00IDAT\xbc%C\x98 \x07\xce\xe1V\x8e\t\xf7\x12\x89\xc4\x1e\xaf\xa8\xa8p\xcf\xfd\xfb|\xf4Y\xc7\'\xb8\xb9g]\xdc\xf3cyz\xbb\x86\xec\xe6\xff~\xd2*\xab\xcbm\xc5\xda\x03\xb0LY.\xf3,\xef\x86\xc8bA\x80\xed\x94\xec\xcb@\x04\xac\xb4c\xcf\x9bg\x0fa\x18|\xd7\xf6\xc1\xfc\x84\xc8\xefMd\x06^\xfe/\x9c\x02 \xcf\xdf\x8c\xfa\xe3\r<\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@@@\xbdj\xed\n\xa5N`d\xe4\xdf\xc5\x80q5\xbc\x02\x9e\xb7\xc8??\xb9\xfa\x94\x03j\xed\x03?8\t\x19\x18km\xf7\x8eA\x89\x7f\xa5\xbe\xa7\xaa\xfe\x91\x13\xe0|\x7f\x955\tkD\xb2\x8f\x9f}\xe1\x01\xfb\xd9\x97\xfe\xe6\xcaP\x0e\x11\x84\x11\x81\x85d<\xae\xd0\xbd\xa8\x97\xc9P\x1f\x19\x9dQ$\xe4\xb2Yd\xcc\xa0 \x18\x96(82\x1ap\xf9\t\xd3]4`}S\x95\x8e\x7f\xa3k\xa6H\xbf\x95A$`#\xda&\x8d\x0c\xce\x9fB$\xe0S\x0fv\xe53\x12\xd0G\x01\xae\x03\x84\xd3\xe0O\xc2)\xd1+\xfa\x0f\x10d" \x02" \x02" \x02"\xe0\tH\x00\xf4$\xf4X\xaa\x04\x18\x05\xcb+af\xfb\xfd\x16<\xcf\t?\xa0<\xe2\x92\xe5\x80\xf9\r\xf6^\x0c\xfbm\x98Rm\xdd;!\xfeU\xe8\xa7\x8a\xb6\x91\x89@d\x04(p\xd4\xd7#"\x0e\xd1h\xdf\xfa\xc0\xddv\xcb\xff\xaew\xdbf\xe4_\x1e\x87;\x8e\xa9\xfe\x14\xed\x18\xd5\x97J\xa5\xf6\xbb\\[[\x9b\xcd\x9b7\xcf\x9a\x9b\x9b\xad\xa1\xa1\x01\xf5\xadwB_2\x99\xb4-[\xb6\xd8\xd6\xad[m\xdd:j*{\x1b\x05A\x8a\x80\x14\x04\'\xdbPd\xac;\xb7\xd6\xd6\x03\xea\x8c\x89\x8f\x0e>\xa25\x17u\xc983\xca:\xb2X\x10\xc8`N\xc0z\x0c\x07f{}\xfaU7\xda\x13\xf7u\xbaH\xc0\nmt/\x18\xfa\xc8\xc1\xfd\x95`\xd7\xae]\xf6\xd9\xcf~\xd6\xbe\xf2\x95\xafXWW.\x11\xcaH\xb1n\x7f\xcb\x8c\xf7\xbd\x91C\x82\xcf\xfe\xc7%\xf6\xb2w\x1f\xea2\x04\xa7\x06\xb3V\xf6\xdc\xba\xe5x7\xa9\xe5\xc6A\x80\x91\x80\x8d\x88\x04\xe4p`&\x06Y\xefD@\x08\xb8\xf9I\x8eC\xd1\x8f\xd3x0\x91\xd7\x95p\x7f\xae\xc7S\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x946\x01\t\x80\xa5\xdd\xfe\xa5Z{^\x1c\xf0"\xe1\xc5\xf0\x1f\xc1\xf3\'\xfe\xf9_ \xe2\x13\x96\x1d\xdbno\xfe\xea\xb1.\x92\x82\x19\x16\xcb\x12\xfeC\x94P&\x02"\x10:\x01\x8a\x7f\x9c{s\xcb\xa3\xdd\xf6\xc9W\xde\x84\x08\xdc\xa4\x1b\x12\xeb#\xd1B/\xc087@\x01\x8e\xee\x87\xe4r(\xefG>\xf2\x11{\xd5\xab^\xe5\xa2\xfcF\xae\x96\xdf\xa1{\xb1\x90\x8f4.?\xd2|\x9d\xf9\xe8\xbf\xef\xbf\xcb\xefqX\xf1\'>\xf1\t\xfb\xf8\xc7?\xee\x16\x0bK\x04\x1c)\xbe\xae>{\xb6]y\xd5*\x1b\x1c\xc8X\xb2W\xc7\xc8\x91\xed\x95\xef\xe7~N\xc0T*c\x9f\xbc\xe4F\xdb\x84\xdfPX\xfb\xc4(\xea\xea#\x01?\x80\xef~\x12\xces>\xdfS$ \xc8D@\x04D@\x04D@\x04J\x97\xc0\xde=\xfe\xd2\xe5\xa0\x9a\x97\x0e\x81\x91\xe2\xdf\xf7Q\xed&x\xde"\xff<\xf6Ug\xcd\xb5+?\xb5\xd22\xa9\xac\r\xf4d\x14\xdd\xe2\xc1\xe8Q\x04""@\xf1\xafez\x8dmz\xa4\xdb>u\xf9M\xd6\xb7\x1b\xc3\xef!\xc2\xf3\xfd8\x1b\x87\xf0\xfa\xc8\xbd\xd6\xd6V\'\xfc\xbd\xe5-o\xd9Sd\x1f\xd9\xe7\x13y\xec\xf9`\x9cO\xfc\xfa8\xb7 \xed\xbe\xfb\xee\xb3\xc3\x0e;\xcc=\x8fB\xf0Y\xba\x067J\xbe\xbc\xc6\r\xc9\xee\xc3\x10\xed\x842\x04;\xf6q\xf8\xe7"\x01[\xabl\xa8?m\x9f\xbc\xf4F\xdb\xbc\x0e\xd1\xb3h\x9f\xe6\xf52\x89N\xd3\xb4*\xcc\xa39h\xff\xfc\xb2\x1b0o#\xda\'?\xd1\xb4\xfe\x1c\xbf\x0e\x958\r\xfe$\xdc\xf7\x05\xf0T&\x02" \x02" \x02" \x02\xa5E@\x02`i\xb5w\xa9\xd6\xd6w\xf8\xd7\x02\xc0/\xe0\xcdp\x7fa\x10)\x13\x06B\x04\xd7\xccv\xdae\x0b\xed\xd2\x7f:\xdc\xba\xb7\x0fX\x1a\x11H\xd1\x07IDZumL\x04bG\x80BE\x03\x84\x8a\xeemI\xfb\xf8\xcb\xfe`=\x98\xf3\xcfE\xfe\xf9\x1fi\xecJ\x9c\x13\xdb\xbc\xf0v\xe9\xa5\x97\xda\xf7\xbe\xf7\xbd=\xa5\xf4s\xf5\xedy#\x82\'\x14\xfb8\x1c\xf8\xe1\x87\x1f\xb6%K\x96D\xb0E0\x08\x86\x95\xb6\xcf\xad\xb7\x0f\xfc\xd7\xc9V\xd7Ta\xdd]C\x1a\x0e\x1c\t\xfd\xd1m\xc4\x89\x80\xed5\xd6\xb9i\xc0>v\xe1\xf5\x18R\x9fr7\xb8\x86y\xe6\x8d\xd6\xfc\xb9\xfe\x0el\x96"\xe0n8\xfb\xbe\x8a\x04\x04\x04\x99\x08\x88\x80\x08\x88\x80\x08\x88@i\x11P\xbcQi\xb5w)\xd6\xd6\x8b\x7f\x9c\xa4\xeaZ8\xc5?N\x06\x1e\xfd\xbe?B\xfc;\xe3\x1f\x16\xda\xe5\x1f9\xccvC\xfc\xcbH\xfcCs\xc8D Z\x02\xc3\xf8\xdd\xd56a\xbe2\x0c\xbb\xff\xf4\x157\x15\x84\xf8\xc7\xa1\xb7^\xfc\xfb\xdc\xe7>\xb7G\xfc\xf3\xc3\x80G&\xe9\x88\x8a\xa6\x9f\x0b\x90\x91\x88\xa7\x9f~\xba\xdb\xac\x7f/\xac2pN9\x8a\x80\xdb\x9f\xea\xb3\x7f\xbb\xec\x067\x0c\xb8\xbe\xb9\xca\xd8\xa6\xb2x\x10(G\x06\xfb\xee\x1d\x836uV\x9d\xbd\xef{\'Y\xa2\x12\xfb.\xa48F\x02Fl<\xd73$\xf5(\xf8\xd7\xe0\x9c\n\x84\xefE^\x10lS&\x02" \x02" \x02" \x02y%@qD&\x02\xc5J\x80\x9d|\xde\xfd?\x04\xce\xc8\xbf9p\x8a\x7f\x91\xef\xf7.\xba/\xb86=\xfd\xb2\x83\xed\x15\x1f8\xdc\xbapq\xa4\xc8?\xb4\x86L\x04"&\xc0\x00\xbf\xaa\x9a\x84UT\x95\xdbg\xaf\xfc\x93m|8\xaf\x19KGU\xfb\x91\xc3~\xbf\xf3\x9d\xef\xd8\xeb^\xf7:\xb7\\>\xa2\xfe\xf6-03\x02s\x9e\xc1\xe9\xd3\xa7\xdb\xf7\xbf\xff\xfd="\xe5\xbe\xdf\x9b\xd4\xd7hC\x8a\x80\xbd\x9dCnN\xc0c\xcf\x99kU\xb5\xe5\x96\x1a\xa488\xa9[\xd2\xca\xc6I\x80\xed3\xd0\x9b\xb2\xe9\xf3\x1am\xe9\x9a6\xbb\xf9\'O\xba\x08x\xd7>\xd1j\xb5^\x04\\\x8e\xaap\xcb\x7f\x84\xb3\x1f\x10m)\xb0A\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xe4\x93\x80\xee\x80\xe6\x93\xbe\xb6\x1d&\x01\x9f\xf0c\x016\xf2\x1b\xf8Bx^\xc4\xbf\x91\x83\x8d\xce~\xdd\x12{\xd9\xbb\x96\xb9\xb9\x918DJ1\x08a\xee\x02Z\xb7\x08\xec\x87\x00n\t\x94\xe1\xe80\xa5\xad\xd6>\xff\x86\xbf\xd8\xdd\xd7o\x8e\xfb\x94\x7fn\x8e=\x1f\xf9\xf7\xc3\x1f\xfe\xd0^\xfe\xf2\x97;\x91-.\xc9/\xbc\x08\xc9\xc7i\xd3\xa6Ygg\xe7\x9eD!\xfbi\x81I}\x8bb\x12#\xcb\x16\x1f\xddf\xef\xf9\xf6\xf1\xc6\xcc\xc0\xe9dV"\xe0\xa4R\x9e\xd8\xca\\\x92\x9d\x99u\xf6\xd0\x9f\xb7\xd9UW\xdc\xecV6R\xd0\x9e\xd8\xdaG\xbd4\xc5>:\xc5\xc0K\xe1\xff\x05\xa7\x08\xc8~\x81L\x04D@\x04D@\x04D@\x04J\x82@\xe4\x91P%AU\x95\xcc7\x01v\xf0\xd9\xa9?\x10\xfe+\xf8bx^\xc4\xbf\x91\x91\x7f\xe7\xbca\x89]\xf4\xeee\xb6k\xeb\xa0e \xfe)J\x05\xad"\x13\x81\xc8\t\x0c\xdb\xb4Y\xf5\xf6\xc3O\xddo7\xff\xf7\x93N\x84\x8f\xf1\x94\x7f{\x89\x7fW_}\xb5]r\xc9%{\x88\xc5E\x00d92\x99\x8c\x8b\x02\xfc\xcb_\xfe\xe2\xe6\x03\xe40`?4yO\x81\xc3x\xc2\xfb(\xb8\x95\xb9sS\xbfmy\xb2\xc7\xd6\xbed\xbe\r%1\xe2\x93R\x8f,\x16\x04\x18\t\xd8\xdf\x9d\xb2\x03\x0f\x9db\xb3\x166\xd9\xed\xbf\xde\xe8\xca\xe5\xce\x8f\xd1\x95\x907\xbc\xfd^q\x06\x9e\xff\x1e\xce\x82\xb0\xbf\xe0\xdf\xc7S\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14/\x01\t\x80\xc5\xdb\xb6\xa5Z3\xee\xd3\x1c\xf6;\x13\xfes\xf828\xe7\xffaD`\xa4\xc6\x8b\x1b/,\x9c\xf7\x96C\xed\xfc\xb7-\xb3\x8e\xcd\x83A\xe4N\xa4E\xd1\xc6D@\x04@\x80\x91H\xad\x88D\xba\xe9\xc7O\xda\x8f\xae\xba\xdf1\x89X\x84\x18S;\x8c\x8c\x92\xfa\xcaW\xbeb\xafy\xcdk\xf6,\x1f\x17\xf1\xcf\x17\xc8\x0b\x80\x8c\xfe\xfb\xd5\xaf~\xe5\x8es\xfe\xb3\xd0\x1f)\xed\xc06?\xda\x8d9\x1d\xd3v\xcc\xd9\xb3\x91tb\xc8\x89\xa7\xb9O\xf4?\xdf\x04\x9c\x08\x88\xe1\xc0\x0b\x8f\x9cfMSk\xec\xde\x1b\xb6\xb8"E\xbc\x1f\x07{\x8aUc\xe3\xc7\xc3\x7f\x0c\xef\x85\xfb\xf7\xf1T&\x02" \x02" \x02" \x02\xc5K@\x02`\xf1\xb6m)\xd6\x8cw\xf2)\xfeM\x81_\x07_\x05g\xe4_\x9e\xc5\xbfC\xec\xa5o;\xd4vm\xee7\xceQ\x1fg\xc1\x01\xacd"P\x94\x040:\xd5\x9a\xa6\xd5\xd8\xfa\x07:\xed\xf3\xaf\xfd\xb3\xab\xe3H\x91>\x8e\x95\xf6\xe2\x08\xe7\xfb\xfb\xe8G?\xbaGT\xf3\xef\xc7\xa9\xcc,\x13\xbd\xb9\xb9\xd9\xbe\xfc\xe5/\xe7\xadh\x8f\xdd\xdda-\xed\xb5v\xc8\xeav\x17u\x16GVy\x83\x93\xe7\r\xb3-\xfa\xbb\x87l\xd9\xda\xe9\x18\xb6=l\x7f\xbfmg>JD\xb1\x8f\xfd\x82v\xf8R8\x93\x83\xf1=\xf6\x1f\xf88V\xc7"{-\xc3\xd72\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x88%\x01vtd"P\x0c\x04\xfc0\x9eFT\xe6\xbf\xe1\xa7\xc3\xf3\x12\xf9\xe7.\x05\x82\x01E\xe7\xbdi)\xc4\xbf\xa5\xb6kK.\xf2\xcf}V\x0c\xb4U\x07\x11( \x02\x14\x1bj\x1b\xab\x90 "e\x1f<\xfbz\xeb\xe9L\xba\x04\x12|?\xae\xc6\xa4\x1a\x8c\xaa[\xbdz\xb5\xfd\xf5\xaf\x7fu\xc5\xe4<\x80q\x15\xb4F\x96\xcd\x97\x91\x8f~\xee\xc2(8\x8f\xdc\xde\xfb\xff\xeb$;xe\xabua\xca\x05f\xa4\x95\xc5\x87\x00v\x0b\x9b:\xa3\xd6\xbe\xf1\xc1;\xed\xc6\x1f>\x91\xaf\x82\xf9\xfe\xc1\xbf\xa1\x00\xef\x9f\xc4Bpg\xe3\xcdu>\xf2\x86$\x0f2\xde\xf1T&\x02" \x02" \x02" \x02\xf9#\xa0^q\xfe\xd8k\xcb\x93G\xc0G\xfeqX\x0f\xc5\xbf\x17\xc1y\x87?\xf2\x08W^\xd8<=\xec\x97\x91\x7f\x98\xf3\x0fsS1\xf2\x0f\xd3 \xc9D@\x04\xf2@\x80\xc2P3\xa2\xff\xaez\xe5\x8d\xf6\xb7[w\xe0\xd2|\xc4\x0f5\x0f\xe5y\xbeM\x96\x97\x97\xbb\xf9\xf3X\xee-[\xb6\xb8\xec\xba>\xd1\xc6\xf3-\x1b\x87\xcfg\xcd\x9ae\x9b7#\xb9JP\x8f(\xcbT\x8e\x03m\x16\xc2nck\xb5}\xe2\x17\xa7#3p\x85\r\xecNYY\xe4g\x83(k]X\xdbb4neU\x995\xb5\xd6\xd8\x17\x91\x88\xe7\xae\xdfovs\xe22\x99K\xc4\xc6-\xf2\xcc\xfcA\xf8\xedpF\x05\xf2&"G\rP\xb4\xf3\xc6\xef\xa4\xe0\x83\xf0d\xe0\xbb\xf0\x88\x83\x89\xed\x86\x0f\x05\xef\xf5\xe3\x91}\x8f}\x8d\xcb\xfb\x9b\x94\xfc\xcc\xaf\xdb?\xee\xfb}\xbd\x16\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81P\x08\xb0S"\x13\x81B&\xc0}\xd8w\xae\xbf\x83\xe7\x9c!\xdf\xdf\xd9\xc7\xd3\x08\x8d\xa5\x08\xba\xf3\xe7\xbey\xa9\x9d\xffv\x0c\xfb\xdd4\x80\xb7\xd4\xc7\x8f\xb0\x15\xb4)\x11\xd8\x8b\x00\xe7\xfd\x9b6\xa7\xde~\xfe\xe5\x87\xec\'\x9f{\xd0\x1d,\n\xe5\x17\xf9\xb5\xaf}\xcd\xae\xbc\xf2J\'\x06RL+\x14;\xf1\xc4\x13\xed\xa6\x9bn\xca\x8b\x00HF^\x04\xb8\'\xee\xef\xb0\x7fy\xf9\r\xee\xc3\x91\xbf\xd5\xbd\xbf\x1d\x8fW>jn\xe1\xc2\x85\xf6\xc8#\x8f\xc4\xa3P\xa3,\x85\x1f\x06|\xd1E\x17\xd9\xb5\xd7^k\xcc\x04\x9cN\xf3\x90\x1c\xbd\xf9v~\xf9{V\xd8Y\xafYd;1\x07k"\xe1O\x19\xd1\x97G[|&\x01\xfe>\xeb\x9b*mh \x03\x11\xf0\x06\xdb\xb6\xa1w\x8fx\xfb\xcco\x87\xf6\x0e\xfb\x0f\xf4\x91;\xc7\xfe\xc4\xb8\x91\x9f\xfb\xc2\xec\xef=\xff\x19\x1f\x195Hap\x1b\x9cB\xe0\xadpN@\xfa(\x9c\xa2\xe1\xc8hA\xf6[|Y\xf6\xb7}|,\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\x89\x11\x90411~Z:\x7f\x04\xd8\xf1\xa6\xb3\xa3\xcc9|(\xfe\xf1.:\xef\xa8?_\xa7\x1c_\x99D\xc3\xd6\xfc\xb0\xdf\x17\xbfn\xb1\x9d\xff\xae\x15\xb6\x0b\xf3N\xf1=\x89\x7f\x93\xc8Y\xab\x12\x811\x10\xe0p\xc2\x9a\xba\nK\xf6\xa5\xec+o\xe5u7\x0e\x0cP\x85\xfcou\x0c\xab\x8a\xf4\xab\x1c\xeaK\xfb\xeaW\xbf\xea\x1e\xf3%\xa0\xb9\x8d\x8f\xf3\x1f\x13\x81\xe4\xdfr\xa7\x81\x9f~\xe1A\xeb\xde9\xe8\xf6\x85\xfc\x97I%\x18I\x80\x82\xec@O\xca\xea\x9a\xaa\xecm\xdf8\x16\x11\x81\t7|\x9b\xbf\xd3\x08\x8d\x1bc_\x98\x8f\xde\xf9z_\xf7\x9f\x8d|\xc4\xd7\x9c\xb1\x1f\xc2\x1f.\x05=*\xde\x14\xfe\xf8X\t\x9f\x05_\t\xbf\x00\xfei\xf8_\xe0\x7f\x83\xff/\xfcC\xf03\xe0Mp.\xcbup]\xdcF\xf4}\x19lT&\x02" \x02" \x02"P\xdc\x04$\x00\x16w\xfb\x16s\xedx\xb7\x9c\x9d\xe5w\xc2\xdf\x0bgg\x9b\x9d\xe6H\xcd]\xa7\xb0\xbb\x0e{\xc1+\x17"\xf2o\xb9un\xee3\x0e;\x8c\xbe4\xb9r\xe8\xbf\x08\x88\x00~~\t\xcc\x037\xa5\xca\xbe\xf3OwY\xe7\xd6\x81@\xfc\x0b~\xac1\x05\xc4\x889\xda!\x87\x1cb\xa7\x9ez\xaa{\xced \x85b^\xbc\xac\xab\xab\xcb{\x91]4"\x86\x94\xa6\x92\x19\xfb\xcd\xb7\x1fu\x19\xa03\xe9x\xb7\x7f\xde\xa1\xe5\xa1\x00eh\xa3\xee\x8eA;\xe0\xc0&{\xeb\x7f\x1e\xe7J\x90\x8b$\xcdCa\xc6\xbfI\xf6=\xd8\x9f\xe6\x8f\x95?b\n\x7f|\xe4\x0e\xe7\x85\xc1\x91\x02\xdf4\xbc\x7f\x16\xfc\x9f\xe1\xbf\x82\xdf\x06\xbf\x16~>\x9c\x9fq9\xf6i\xf8\xc8uz\xd1\x11Oe" \x02" \x02" \x02"0~\x02\x12\x00\xc7\xcfNK\xe6\x8f\x00;\xc4\xec\x1c\xbf\x06\xfe\x198;\xd8\xbe\x93\x8c\xa7\xd1\x99\x8f&z\xc1\xab\x16\xda\xa5\xfft\xb8un\xcbE\xfeE\x1b\xc0\x10]}\xb5%\x11(\x04\x02n\xe8\xef\xb4Z\xfb\xd3O\x9f\xb4\xdb\x7f\xbd1(r\xfc\xc5\x1f\x1f\xed\xf7\xf6\xb7\xbf\xdd\x95\x99\xaf#\x8e\x86\x9a\x94\xe6\x8d2\xf3\xefs\x15\xd8\xdf\x11\xfa\xddw\x1f\xb3\x1d\xeb{\xac\xb6\xa1\x12\x11f\xcf\xb5\x84>\xcb\x07\x81rD\x02\xee\xda\xd2o+\xd6\xb6\xdb\x95\xffv\x94+\x82?\xb7\xe6\xa3<\x93\xb8\xcd\x91\xc2 \xfb(\xecs\xf3=\x1e\x8c|\xb4 \xdf[\x0c\x7f\x19\x9cI\xcc\x1e\x82\x7f=x\xdd\x80G~\x8f\xdf\xf7b \x9e\xcaD@\x04D@\x04D@\x04D`|\x04\xd8!\x91\x89@!\x11\xe0]uv\x88/\x86\x7f\x03\xee\xef\x8c\xfbk=\xbc\x15\xbe\x8d\x14\xf8N\xbbd\xa1\xbd\xe2C+l\xf7\xf6A\xcb"\xc2\xa4L\xb2z\xf8\r\xa0-\x88\xc0\xb3\x11\x80\xc0S\xd3\x88\xcc\xaf=i\xbb\xea\x8a\x9bs\xbfI\x1c\x1d\xe2.(\x8c\x14\xfa~\xfe\xf3\x9f\xbb\xda\xf1\xbd\x91\xef?[\x95\xe3\xf2\xbe//\xcb\x7f\xc7\x1dw`\n\x84\\6\xe3|\x95\x8fm\xce\x84 \x99t\xd6E\x00.?~\xba\xf5u\x0f\xb9\xf7\xf2U&mw\xff\x04\x18\t\xc8d-K\xd7\xb4\xbb\xdf\xec\xc3\xb7\xef\xcc\x9d\xdd\xf7\xff\xf5B\x7f\x97\xfd\x15\xf6\x14\xe8^\xdc\xe3#\xad\x1e\xce!\xc3\x17\xc2_\n\x9f\r\xe7]\x8c\x0e8\xbf\xc3e"\xed\xef`{2\x11\x10\x01\x11\x10\x01\x11\x10\x81"! \xa9\xa2H\x1a\xb2D\xaaA\xf1\x8f\x91\x7f/\x86\x7f\x1b\xcea6\xec\x08G\xde\x19\xf6b\xc2\xa9\x97\x1el\x97~\xecp\xeb\xe9H\x1a\xa3\x8e$\xfe\xa15d"\x90O\x02eH,\xd0Xe\xdf\xff\x97{,5\x98qb\x8f\xff\xbd\xe6\xb3X\xcf\xb7m/\xf4\x9d}\xf6\xd9{\xbe\xea\xdf\xdb\xf3F\x81<\xe9\xea\xea\x8aMI}\xdb\xff\xfa\x1b\x8f@`J[U5O#\xb28\x12\xc0\x19\x14\xf3\xe7\xf6\xdbK\xde\xb1\xcc\xd6\x9c7\xcf\xc9]\x91\x9f\xdc\xa3\x07\xc3*z1\x90\xcf)\xf2\xb1\x9f\xc3X\xd5%\xf0\xf7\xc1\xef\x87\xff\x00\xfe\x028\xdf\xa7\xf3{\xda\x99\x01A&\x02" \x02" \x02"0z\x02\x12\x00G\xcfJ\xdf\xcc/\x01?\xecw-\x8a\xf1_\xf0j8#\x01\xa3\xbd>\xc0\xd6\x10\xa8\xe0\xec\xb8\xf3\xe6b\xd8\xefa\xd6\xbd}\xc0\xd2)\\\xbaD[\x92\\!\xf4_\x04D`\x0f\x01\xce\xf1\xd6\x8c\xac\xbf\xf7\xfca\x8b\xdd\xfe+\x06\xcd\xe0*\xd9+@{\xbe\x15\xcf\'~\xae\xbf\x0b.`\xae\x00(\x00y\xca\x9e;\x11:^\xb0\xdc\xb5k\x97[\x8d\x9f\x13p"\xeb\x9c\xe8\xb2\xbe\xfd\xfbv\x0f\xd9m\xbf\xda`MS\xabp\xb3\x86\xfa\x89,n\x04\x984+\x03\xe9\xab\x07I[\xfe\xe1\xe3G\xd8\x9c%-N\xe5*\xb1\x93+{\x12\x14\xf6\xf8\xe8\xc5>\xde\xec\xe4\xa8\x87_\xc3\x7f\x0f?\x17\xce\xf7(\x14\xf2{\xea\xcb\x03\x82L\x04D@\x04D@\x04D\xe0\xf9\t\xa8\xd3\xf0\xfc\x8c\xf4\x8d\xfc\x13\xa0\xf8G\xb1o\x19\xfc\x87\xf0F8;\xc6\xd1\x0fa\xc7=\xf7,|\xd5Y\xb3\xed5\x98\xab\xa8\xb7c\x08\x17\xea\x8a\xfcC[\xc8D \xef\x04\xaa\x91Et\x10Y\x7f\x99\xf8\x83FA\xaa\x10\xf4?\x963\x95b\xe2P\x8c\xfd[\xc9\xd1\x7f\x85#\\\xba\xc2\xee\xf3o\xfd\xfa\xf5\xee\x1d/\xbe\xed\xf3q\xe4/\x13\x15\xd4H\xcc\xfex\xed\xe36\x9c-sC\x93#/\x8468*\x02\x8c\xa2O"r\x97s5\xbe\xfdk\xc7ZC\x13t.\xfc\x889\x94\xbb\xc4\xcc\x0b{\xbe\x9f\xce>\x10\x9f\x9f\x02\xff\x19\xfc7\xf0\x17\xc1\x19\t\xc8\xfe\x10?\xf3\xdf\xc5S\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08<\x93\x80:\x0b\xcfd\xa2w\xe2E\x80\xfb(;\xbe\x0b\xe1\xff\x03\x9f\x15\xbc\x8e|\xdf\xf5\x11~+O\x9fi\xaf\xfd\xec*\xeb\xedN\xe3\xa2=Sb\xc1\t\xa0/\x13\x81\x18\x12\xe0\xfc\x9b\xcd\xed5\xf6\x7f\xdf~\xcc\xba\x10\x95\xcb\x1ff\\\x04\xa8\xe7\xc3\xe5#\xe7jjjl\xde\xbcy\xee\xeb>"\xf0\xf9\x96\x8d\xcb\xe7#Y\xaf[\xb7..\xc5r\xe5pY\xd9\xf1l\xfd\x03\x9d\xf6\xc8\x9d;\xac\xa9\xb5ZQ\x80\xb1j\xa1\xbd\x0b\x93@R\x90\xde\xce!k\x9eZc\xef\xbc\xfa\x84\\\x1b\xe2\xce\x9b?\x07\xef\xfd\xed\x92y\xc5\x1b\x9e^\xec\xa3\xe0w\n\xfc\x7f\xe1\xff\x07\'$\xbeG\x8f\xfe\xc6(6*\x13\x01\x11\x10\x01\x11\x10\x01\x11(\x0c\x02\x91\x8b(\x85\x81E\xa5\x8c\t\x01\xee\x9f\xec\xd0N\x853\xf2\xef`8\xc5\xc0\xc8;\xb8\xbc\xf0`$\xd1!\xab\xdb\xed\r\x9f_m\xc9^\x88\x7f\x83\x85\x99\xa1\x13\xfcd"PT\x04\xb28*\xd4O\xa9\xb4\xcd\xeb\xba\xed\xe7_\xf9\x9b\xab[!\xc5\x0b1Y\x06m\xc6\x8c\x19\xd6\xdc\xdc\xec\x9e\x8f\x14\xd4\xdc\x1b\x05\xf2o```O4c\\\x8a\xcccwy\x10\x05x\xeb/6XyU\xb9\x8b\x0e\x8dK\xf9T\x8eg\x12`{um\x1b\xb0\x05\xcb\xa7\xd8\x95\x9f>\xda}\xc1E\xf3\x16\xd2\x0f\xfb\x99\xd5\x9a\xe8;#\xa3\x02\xd9\x17\xa2 \xc8y\x01\xff\x08\xff\n|>\x9c\xef\xfb\xef\xe1\xa9L\x04D@\x04D@\x04D@\x04\x9e& \x01\xf0i\x16z\x16/\x02\xec\xc0R\xfc\xab\x83_\x03\xe7\xb8\xb8\xfc\x88\x7f\xf8\x95\xf0\xc2\xe3\xa0#Z\xed\xad_Yc\xc9\x81\xb4%\xfb\x19\xf9\xc7"\xcaD@\x04\xf2N\x00\x89?j\xeb+\xedg_x\x08C\x10;\x02\xbeC\xcb+\xb3\x7f\x87\xbf\x1c\xce\x8e-\xb3\xe2Ek\xe8\xc03\x9a\xa8}N\xbd\xbd\xe7\xea\xe3\xad\xb2\xba\xdc\x98IR\xe2_\xb4\xcd\xa0\xad\x89\xc0s\x11(s\xd1\x7f\t\xfb\x9f/<\xe8\xbe\xe6\x92\x05\xf0\xa2\xbc\x80\xcc\x0b~^D+\xa0\xa2\xef)\xaa\x171o\xbe\xf9f\xf7^\x1c\xe70\xf4\xc9@\xfer\xddSV\xd3X\xe9\x12\x82\xec\xa9\x80\x9e\xc4\x93\x00\xe4\xab\xd4P\xd6\xfaq\xe3\xed\r\x9f?\xc6\xa6\xce\xa8\xdd\x13\xe5\x1bu\x81+\xa7\xd5[\xdd\xe13\xadzf\xa3%\x9ajqK\xb2loe\x8d\xc7\x1df\t\xa3{\x91\xd0\t\x81\x91\x08\x82\xec#\xb1\xdfD\xbf\x10N%\xfe\xd2\xe05KF!P&\x02" \x02" \x02"P\xe2\x04\xa2\x17UJ\x1c\xb8\xaa\xff\xbc\x04\xd8I\xe5]\xeb\x8f\xc2\xdf\x18<\x8f<\xf2\x8f"B\x16\x9d\xf8\xe6i5\xf6\xbe\xef\x9fdU\xf5\t\xeb\xdd9d\xfe\x02\x12\xe5\x92\x89\x80\x08\xe4\x99@\x86\x89?\xa6U\xdb\xc3\xb7\xed\xb4\xfbo\xda\xe6J\xe3#\xbd\xf2\\\xb4qm>\x99L\xba\xe5(\xa6yQp\\+\x8ax!\x96\xb5\xa2"\xd7\x9d\xb8\xfb\xee\xbb\xdd\xd6\xe3X~Fs\xd3\xfev\xeb6\xdb\xf2\xd8n\xabo\xaa\xb2\x01L\xe7\x10L\xc1\x98\xfbP\xffcG\x80IA\x92}C\xd68\xb5\xca\xde\xf4\xe5c\xedc\xe7\xff\xde\x9d\x9f\xa9\xadE\xf2{g\xc4?\x86\x90\x97\xd7WY\xfb\x9b\x8f7\x1b@\xc6nl\xd8\xfd\xf5\xa6,\xd55`\xe9]}\x96\xd9\xd9o\xa9\x9d}\x96\xde\xd9k\xa9\x1d\xfd\xeeq\xbf\x05t\x11\x82\xc0\x1c\x0cK\x9fD\xe0^\xe4\xe3M\xd3v\xf8\xf7\xe0\xab\xe1\xef\x83\xf7\xc2\xf9#\xe5g2\x11\x10\x01\x11\x10\x01\x11\x10\x81\x12% \x01\xb0D\x1b>\xa6\xd5\xf6\x9d\xd3\xb7\xa2|\x1f\x81\xe7g\xf8\n\xfa\xfa^\xfc\xfb\xf0\x8fN\xb1F\x08\x0c\xdd;\x07\xf7L"\x1fSv*\x96\x08\x94\x1c\x81r\\\x98W\xd6\x94\xdb\xaf\xbe\xf1\x88\xab{n\xc8>\x83]\n\xcb\xfcP\xd4\x8e\x8e\x0e\'\xfcQ\x00\xe4{q\x8c\xa2\xdb\x1fYF.R\x00\xa4\xf8\xb7m[N\x88\x8dc4#\x8f\xeb\xe5`\xcb9\\\x9f\xb8\xb7\xd3\x8e~\xd1\x1c\xeb\xef\xe9Cl\x94\xd7M\xf6W;\xbd\x17\x07\x02\xfcmw\xe3&\xdcA\x87MER\x90\xa3\xec\xeb\xef\xbe#\xa7\xad\xe1|\xed\x86\xe1\x86Y\xc8@\xa8K\xae\xef\xb4\xfe\xbb6Z\xed\xc1m\x96\xe9F\xa6\xf1\x04\xf6\x1b\xec;\x95m\xf5V9\xa3\x11}\x04ta\x90`fx(m\x19\x08\x83\xd9\xdeA\xcbt\x0e\xd8\xe0\xba\x9d6\xf0\xf7\xed\x96\xda\xd0en.JF\x08z\xa3\x8aI\x9b\\%\x93}\xa9@\xeev7R\x0f\xc7\xeb+\xe1\xcc\x90\xe4\xfbYx*\x13\x01\x11\x10\x01\x11\x10\x01\x11(5\x02\x91GV\x95\x1a`\xd5w\xd4\x04\xb8/R\xf0{\x05\xfc\xab\xc1R\xbc*\x0bz\xc7\xc1;!?PP`\x94HM}\x85}\xe0\x07\'\xd9\xb4\xd9u\xd6\xbd\x1d\xe2\x1f#\x00d" \x02\xf1!\x80\xdfi]32\xff>\xd6c\xd7|\xf2\xde\\\xb9F\\W\xc7\xa7\xa0\xcf_\x12\x1f\xf1\xd7\xdb\xdbk\xaf{\xdd\xeb\xcc\'\x03\xf1\xc3j\x9f\x7f\r\xf9\xff\x06\xcb\xfa\xf5\xaf\x7f\xddn\xb8\xe1\x06\xab\xac\xac\xb48\n\x80\xa4T\x86\xec\xb2<\xc6WTW\xd8\xca\xd3f\xda`\x7fJ\t\x9d\xf2\xbf\xfb\x8c\xaa\x04\x14\x01\x07z\x86l\xc9\xd1\xed\xd6\xd3\x99\xb4\xc7\xef\xeb\x8c\xae\x83\xc0\xa8=\x1c_\x12\r\xd5V{\xe8t\x1b\x1eD\x14 \xc5;F\x02b\x88\xf2p\x12\x82_\xff\x90\xa5\xbb\x11\xc5\x8b\xe7\x14\x06\x13uUV\xd1\xd6h\xb5\x0b\xdb\xaci\xed\x81\xd6t\xf2\xc1Vu`\xabU`\x1d\\6\x83\xc8\xc1\xbd\x8c\xdb\x98\xbc\x1a\xf9\x951\xe2\xef@\xf8\xb9\xf0\xfb\xe0\xeb\xe0R\xbc\x01A&\x02" \x02" \x02\xa5H@\x02`)\xb6z\xfc\xea\xcc\xce(\xefV\x9f\n\xbf\x16\xce\xe4\x1f\xbc\x94\x8f\xb4\x93Z\x86\xad\xf1\xc2\x90}\xfa\x0f\xfd\xf0d\x9b\xbd\xa8\xc9\xba(\xfe\xe1\x82Q&\x02"\x10/\x02\x19D\xe5L\x99Qc\xd7|\xe2^\xdb\xf8H7\xae\xb79l6^e\x1cmi8\\\x96\xd1~|<\xe7\x9csl\xde\xbcy\x96N\xa7\x0b&\x02\xd0\x0b\x95\x97\\r\x89\xf5\xf4\xf4\xb8z\x8c\xb6\xee\x91\x7f/\xd8G\xb6?\xd5k\xa7\xbfr!\xcaJA\xb0@w\x9c\xc8\xe1\xc5`\x838A\'\x07\xd2v\xe4i\xb3\xed\xde\x1b\xb7X\xd7\x8e\xc1\xdcI;\xa2\xa2\xa5\xb6\xf7X\xe3\x89\x0b\xd0Y@\xbf\xc0\x1fp\xd8E`\xc7\x01\xc7 7G0\x9fc\x9f\x1aN\xa5\x9d0\xe8\xc4\xc1\xc1\x8c\xeb\xd4T\xcdl\xb2\xba\x95\xb3\xad\xfe\xc8\xd9\x98Op\x96U\xb4\xd6Y\xba\xab\xdf\xb2}\x1cV\x1cT\xc2\t\x81\x93V!\xf6\xa3xs\xb5\x05\xce\xb9\x01\xb7\xc3\x99\xaa[\xfd\x7f@\x90\x89\x80\x08\x88\x80\x08\x88@\xa9\x11\x88T`)5\xb8\xaa\xef\xa8\x08\xb0\x13J\xf1\x8fCT\xbe\x07g\x1aL\xbe\x8et\xdf\xcc\r\x1d\xc4Va\xef\xf9\xce\t6oi\x8bunS\xe4_\x8e\x88\xfe\x8b@\xbc\x080\xe1lCK\xa5m|\xb8\xdb\xfe\xfa\x8b\r\xaep\xfe\xda9^%\x1d}i|\xd6\xdc\x1bo\xbc\xd1-TH\xc3\x7fY\xe0\xbb\xee\xba\xcb6m\xda\xe4\xca\x1e\xc7\xf9\xff\\\xc1\xf0\xcfk6C\x03\x18\x06\x8c\xcc\xd15\xb5\t\x0c\xb7\xf6\x9f\xea\xb1\x10\x080)H:\x95\xb17}i\x8dU\xd7\xa1\x0b\x81Fu\xc9\x7f\xc2,|p\x80\xc9"b4\xf9H\x87\x95\xd7b$\xeds\xed7\x14\x059\xb4\xdc;_g\xb2\x96\xed\x1e\xb4\xd4\xd6n\x08~CV\xd9\xdeh\xcd/Xd\xb3?t\x86\xb5\xbf\xe5x\xab_5\x17\x11\xaaX\x86\x82\xb4?\xa0M\x8e\x18\xe8\xfbY\xc8\\b_\x83\x7f\x90\xa5\x81\xd3"\xedk\xe56\xa9\xff" \x02" \x02" \x02\xf9"\xa0\x13\x7f\xbe\xc8k\xbb$\xc0\xfd\x8f\x9d\xd0\xb9\xf0\x9f\xc2g\x04\xaf#\xdd/y\xb3\xdeG\x80\xbc\xed\xff\x1dgK\xd6\xb4\xdb\xae\xad\x03\x1a\xf6\x8b\xc6\x90\x89@\x1c\t f\xcbj\xea*\xed\xf6_nt\xc5s\xd1\x7f\x05\x1e\xc5\xe5\x87\xcc^}\xf5\xd5A\x9d"=\x0c\x8e\xbb\x99}\xf4\xdf\xa7>\xf5)\xb7\x0e\x9f\x0cd\xdc+\x8c`A\xde\xf0\xa1\xdd{\xc3V\xabm\xae\xc2\xbcl\xcf\xa5\xe4DP mbL\x04\x98\x14\xa4\xb7s\xc8\xa6\xcd\xaa\xb77#)\x08\x8d\xf3;\x86n\xc1T \xbd\xb7\xae\xb7r\x1c\x7f\xf6\xa8\xc9c\xd90\x04\xc12\xce\x1d\x08\xcb\xf6q\x8e@$\x0b\xd9=`5\x18\x1a\xdcv\xc5*\x9b\xf9\xe1\xd3\xad\xf5e\x87Y\xa2\x85\xf7B\xf9%\xd4\x8b\x9d\x94\xdc.\x9b{o|\xff\xb9Q\xee\xe8\xecs}\x02\xfe%8\xa1\xf1\xbd\x89\xaf\x1d+\x91\x89\x80\x08\x88\x80\x08\x88\x80\x08\xc4\x9f\x00\xef\n\xcaD \x1f\x04\xd8\x19e\xe7s\x1a\xfcg\xf0epvL#\xdd\'y\xf1\xea#B^\xfdoG\xd9\x9a\xb3\xe7Z\xc7\xd6\xfe\xf0\xa3\tPQ\x99\x08\x88\xc0\xf8\x08\x94W\xe2"\x1a\x8b\xfe\xbfw\xdcjC\x18ZWL\xd7\xaf\x9d\x9d\x9dv\xc5\x15WXKK\x8bK\x04\xe2\x05\xb6\xf1\x91\nw)?Ly\xfb\xf6\xed\xae\xcc\xdcZ\x9c\xa3\xff<\r\nH\x9c\xee!\x0b\xe1\xef\xa4\x97-\xb0A$l\x883g_n=>M\x80"n?\xdam\xfe\xb2V\xb4\xe3\xb0=|\xfb\xce\xf0U,w\xb7\x10\x1d\x95\xddI\xab\xc70^\xabFw\x05\x99\xc8\xc7\xbda\'\xec\xe5\xc4=7L\x18\xc3\x809o`\xf5\x82i\xd6\xb0v\x81U\xb6\xd4Z\xa6\x03\xd9\x85{s\xd9\xc1\x9d\x10\xf84\x82\xf1<\xe3a\xd3\x0b\x81\xc7\xe0\xf9L\xf8o\xe1\xec\x8b\xc9D@\x04D@\x04D@\x04J\x80@\xa4bK\t\xf0T\x15GG\xc0\xdfm\xc6-t\xfb!\xfc$x\xe4\xe2\x9f\xeb\xb4\x07\xdd\xdeW|\xe8p;\xed\x92\x83\xaccs\x9f.\x04\xd1\x182\x11\x88+\x01\x8a6MSk\x10\xbd\xb5\xd9\xfe\xf4?O\xc5\xb5\x98\xe3*\x17\x87\x01S@c2\x10\xce\x05\xc8\xa8@?4x\\+\x0cy!\x8af\xf4\xf7\xbd\xef}v\xdbm\xb7\xb99\x0b}F\xe3\x907=\xb1\xd5s\xfe6X\xdf\xee!;\xea\x8c\xd9\x18N^m\xa9d\xda|d\xe0\xc4V\xae\xa5##\x80v\x1c\x1aL\xdb\x11\xa7\xcc\xb4\x87o\xdba;6\xe5n\xde\xf9\x9bz\x93^\x0e\xf6\x17 <\x0ec\xf8q\xd5\xbc)V3w\x8ae\x07\x86\xdc{\x13\xde\x16\xc5\xc0`\xdd.\xc1\x08*Q\xbb\xa8\xdd\x1a\x8e\x99ge5\x15\x96|\xac#\x17\r\xc8\r\xf1\xbb\x137\xf6\xb9V\xc1\xa7\xc0\x7f\x05\xa70(\x13\x01\x11\x10\x01\x11\x10\x01\x11(r\x02:\xe1\x17y\x03\xc7\xb0z\xec\xb9r\xbfcW\x9aCP^\x08g\x96\xbaH\xc5h\xd7\x7f\x0e\xc4\xbfs\xdep\x88\x9du\xc5B\x88\x7f\xfd\x93\xd5\xb1Fud" \x02\xa1\x10\xc0\x8f\xb7\x12\x9177\xfc\xf0\t\xb7zFs\x15\x9b}\xfb\xdb\xdfv" \x87\xd3\xc6UPc\xb9(\xfeutt\xd8\x97\xbf\xfce\xd7\x04q-\xeb3\xf7\x8faw\xff\'\x95\xcc\xda\xe6u\xddV\xd3X\xe9"\x02\x9f\xf9=\xbd\x13g\x02L\xdc\x95I\r\xbb\xcc\xc0W~\xe6h\xcc\x07\xc8\xdf\x0bN\xec\x11\x1c\x12\xfa\xef\xdc\x98\x0b\x9b\xe3\x1c\x7f\x93i\x10\x01)\x04r\xe8o\xba\xa3\xd72Ciky\xc1b\x9b\xf5\xf13\xad\xf1\xb8\x03s[r\n\xe7\x84*\xc9\x851\x89\xa1\xbb\xf1\xfa&<~\x06\xce\xa1\xc0\xac\xcc\x84V\x8c\xe5e" \x02" \x02" \x021&\x10\xa9\xe8\x12c\x0e*Zt\x04|\xa7\xf3C\xd8\xe4\xbb\xe1^\xfc\xcbK\xa7\xf3\xd4\xcb\x0e\xb2\x8b?\xb0\x02s\xfe!\x93`q\x8d$\x8c\xaeE\xb5%\x11\x88\x88\x00\xa3\xff\xea\x11\xad\xb5\xfd\xc9\x1e\xbb\xf6\xaa\x07\x82\x81ky9t\x84RcF\xff1\xf9\x07#\xff\x18\x05x\xd6Yg\xc56"\x99e\xa5\x00x\xe9\xa5\x97\xda\xdf\xff\xfew\x17\xa9X\x08\xc3\x7f}\xc31\xbb;\x87\x01O\x9f\xdb`K\xd7\xb4\xd9 \x86_*\x02\xd0\xd3)\x9cG\xde\xcc\x1b\x82\x90\xdb\xdaVgs\x964\xdb-AR \xbe\x1f\x8a\x057\x0eS\xdb{\xad\x11\xc3t\r\xd3\x11\xb8y\xfa\xc2\xd8X \x042\xf1H9\xa2\x00\xebV\xceAT\xe04\x1bz\xa2\xcb2}\x932,\x98\x94\xd8\xf3Y\x0b\x1f\x80\xff\t\xce>\x1a\xc5@\x99\x08\x88\x80\x08\x88\x80\x08\x88@\x11\x12\x90\x00X\x84\x8d\x1a\xe3*q\x7fcg\xf3\n\xf8\x17\xe0y\xbd\xe3\xbc\xe6\xc5s\xec\xd5\xffz\x94um\x1f\xb4a\xce\xe33\xc97\xf2Q?\x99\x08\x88\xc0$\x12\xe0\\_M\xad5\xc8\xfc\xbb\xd1\xee\xbfi\xabK\xd4\xe3\x13\xf8L\xe2fb\xb1*\x0e\xa9\xbd\xe8\xa2\x8bl\xda\xb4i\xcf\x98\x0b\x90\x91v\x14\tG:\xdf\xe3pa\x8ara\x1b\xb7K\xa1\xf2\x86\x1bnp\xc3\x7f\xc3\xde^\x18\xeb\xe7,\x92.\x90\n\xdc\x8e=w\x1e\x86\x00K\xf3\x08\x83s\x14\xeb\xe4>\xdf\x0f\x01w\xf1\x91m\x88\xe4\x1f\xb0\xf5\x0fvF\xf2;\xa8l\xad\xb5\xda\x85m\x96\xed\x9f\xa4a\xc0\xfb\x83\xc5\x9f\xb3\x1b\x1a\x9c\xb5a\x0c7\xae8\xa0\t\xf3\x03\xceG\xef)k\xc9u\x18\x16L\xa3P\x18\x08\x93\xb97F\xfd\x9fk\xa7s\xe9\x17\xc0\x9f\x80\xdf\rg_m|k\xc4\x822\x11\x10\x01\x11\x10\x01\x11\x10\x81\xf8\x12\x90\xe4\x11\xdf\xb6)\xb6\x92y\xf1\xef,T\xec?\xe1\xfej\x8b\x9d\xcf\xc8\xcc\x8f\xd6Y~\xfct\xfb\xc7\xcf\x1cc\xdd\x1dIK\xa7P\x14\xfd\x12"k\x03mH\x04\xc6K \x81h\x9b4\xa2\x00\xffz\xddz\xb7\n\'\xe0\x8cwe1]\xceG\x01\xb2x\x9c\x07\x90Fa\x8f\t7\xe8\x14\xdf\xf8\x9a\xc3\x83+++\xad\xaa\xaa\xca9\x9fS\x08\t;\n\x8fB#\xc5?\xda\xf9\xe7\x9f\xef\x1eY\x9e\xb0\xb7\xeb64\x89\xff2\xc1\xce\xf3\xc8]\xbb,\r\xf1\xaf\xa2B\'\x81I\xc4\x1b\xfd\xaa0\x1f`w\xe7\xa0\x9d~\xf9\xc1n\xdb\xa1\xee\x8f\xc1\xb4\x03}wm\xb2av*(\xc0\x85m\xdc=\xb1\x9dl\xd7\xa0\x13\x1c\xa7\x9c\xb7\xdc\xda_\x7f\x9c\x957T\xa17\x05\xadn\xfcE\xf0KR\xf0c\xdf\xecd8o\xd4\xe6~\xe4x"\x13\x01\x11\x10\x01\x11\x10\x01\x11(\x1e\x02:\xc1\x17O[\xc6\xb9&^\xfc[\x89B\xfe\x14\xde\x18\x146\xd2+.\x0e\xef\xe2\x90\xaf\xf9\xcbZ\xec\x1d\xdf:\xc1\x92\x88\x18\xe0\xd0\xa1\xf2(:\xefqn\x1d\x95M\x04\n\x81\x00~\xbb\x9c\xe3\xabs\xeb\x80\xfd\xf7\xbfc\xf8/\xadHcT(^PT\xe3\xfcz\x0f?\xfc\xb0]p\xc1\x05\xee5\xdf\xa3S\x04\xbc\xfb\xee\xbb\xed\xe6\x9bo\xb6[o\xbd\xd5\xee\xbd\xf7^\xdb\xb4i\x93-Z\xb4(\xd4\xc8\'_.\xa2?\xef\xbc\xf3\xec\x9e{\xeeq\xe5)\x9c\xb9\xffX\xf2g\xda\xe1H"\xd1r@\r\x12Jp^\xc3g~\xaew\xe2O\x80\xed\x96\xc1\xcd\xbc)\x07\xd4\xdb\x9d\xbf\xddl=\xbb\x92F\x9d.\x9cCDn\'Iw\x0eX\xdd\xf2\x99.[\xef0\xe6\xea\x8bd\xe7a\x7f\x05\x95\xca\xf6\rY\xf5\xecf\xab_3\xcf\x866tb\xbe@\xcca<~\xcbU\x08\x03\x9a\xb1\x8aS\xe1?\x82\xef\x86\xfb\xf7\xf1T&\x02" \x02" \x02"P\x0c\x048\xd7\x87L\x04\xc2$@\x91\x8fw\x93\xe7\xc0\xff\x0b>-x\x1d\xa9\xf8\\\x8e\xab\x03N\x0e>}~\xa3\xbd\xe3\x1bk-\x9b\xce\xda@?\x87\xb1\xa9\x7f\x8b\xf6\x90\x89@\xec\td\xa0\xde\xd7\xb7T\xda\xef\xafY\xe7\xca\xca\x0b\xfeb\x8c\x00\xf4\r\xe1E\xb5\x1f\xfe\xf0\x87VSSc/y\xc9K\xec\xc6\x1bo\xb4\xeb\xaf\xbf\xde\x1e\x7f\xfcq7G\xa0\xff\xae\x7flkk\xb3;\xee\xb8\xc3\xe6\xce\x9d\xeb\xa2\x05\x19%\x18\x86]u\xd5Uv\xddu\xd7\xb9U\xfbr\x86\xb1\x9d\xb0\xd7\xe9\xf7\xa1\xc7\xef\xdfe\x0b\x0eo\xb5\xbe.\x0e\xe5\x8c\xf4\xbeT\xd8U,\xa9\xf5\xa7\x87\x10\xc9YUfk_:\xcf~t\xd5}\x88\xce\xc3A\x02\xd3\x06L\xba\xf1\xc0\x13\xec<\x03\x0fo\xb3\xaa9\x8b\xccz\x839\xf9&}c\xcf\xb2B\xd4-\x8dh\xc0r\xdc\x14i\x7f\xd3Z\xeb\xfc\xc9\x03\xd6s\xe3c\xb9/\xb3[3\xf6js)\xf6\xd5f\xc3\xbf\t\x7f\x11\xdc\x8f\xd4\x18\xfb\xda\xb0\xb0L\x04D@\x04D@\x04D ~\x04"\x15a\xe2W}\x95(\x02\x02\xecTr?\xfb\x01|\r\x9c\x1d\xccH\xf7;F\xf8e\xd1aol\xad\xb6\x0f^s\x92\xd56TZ\x7f7&\xd5\x96\xf8\x87\xa6\x90\x89@a\x10(\xc3%h}s\x95\xfd\xf8\xd3\x0f\xd8\xae-\xfd\x96\x08\x928\x14F\xe9\'VJF\xdaQ\x08\xfc\xeb_\xffj\xdb\xb6m\xb3\xa1!\x08U0\x0e\xc5\xa5\xc8\xc7GF\x062qH]]\x9d\x9dz\xea\xa9\xee\xf3\xc9\x9a\x0f\x90\x91\x7f\\\x17\xfd\x9ak\xae\xb1\xd7\xbf\xfe\xf5\x93\xba~\xb7\xb2<\xfc+\xc3>D\x89\xa3\x11\x89e\x8e=o.\xa2\xc6\x86t^\xc8C;L\xd6&\x87\xa1z%\x12\xe5h\xcf*\xfb\xc35\x8f\xbb\x1b\x04\xd4\xe9B\xb1`\xc5i\x0c;n\\;\x0f\xf3\x08{\xad,\x94\xad\xed\x7f\xa5\xe8\xdbp\xbb\xf4\xfa#g[\x02b\xe0\xc0C\xdbs\xdf\x1d_\xc5\xfd\r\xdb\x85X\t\xa3\x01\xaf\x87\xb3\xbf&\x01\x10\x10d" \x02" \x02"P\x0c\x04t\xab\xbb\x18Z1\xbeu`\xc7\x91\xbd\xe2\x0f\xc29\xf7\x1f\xc6\xc8D+\xfeq\xd8/#\xff\xaaj\x13\xf6\xee\xef\x1co-m5\xd6\xdb9\xa4l\x8fh\x08\x99\x08\x14\n\x01&\xff\xa8i\xaa\xb4M\x8ft\xdb\x93\x88\xd6\xa2ey+\xa1D\x8c\x02\x1f\xc57\x8a|\x14\xfc\xf8\xc8\xd7\x1c\n\x9cJ\xa5\x9c\xfb9\xcf\x9e|\xf2IG\x85\x9fO\x86y\xf1\x8f\xeb\xba\xf6\xdak\xed\x15\xafx\x85[-\xd7\xef\xb79\x19\xdb\xc9\xc7:<\xa1M\xeb\xba]\x12\x902\xcd\x03\x98\x8ff\x98\xb4mR\xfc\xeb\xdb=ds\x97\xb6\xd8\xc2\xa3\xda\xdczC\xbb\xd1\x17\x84\x1f\xa7\xb7a\xdf\xd9\xdcc\xe5U\x88\xb6\xcd\x83\x06\x88\x03\x81\x8br\xcct\xf6[\xd3)\x8b\xac\xed\x8a\xa3s<]\x94\xe2\xb8\xd0\xfa~\xdb{\xb14\xef$\xf0H\xabk\x85q\xa1\xd4B" \x02" \x02"\x10?\x02:\xa9\xc7\xafM\x8a\xa5D\xecD\xb2\xe3x&\xfc}\xc1s\xbe\x17\x99\xb9\x0bTN\x8e\r{\xe7\xd7\xd7\xda\x9c\xc5-\xd6\xb5\x13Cf\x18\xf5!\x13\x01\x11(\x18\x02\xcc\xf4[\xd7PaO>\xd4e)\x0c\xf3+\xc3\x99\x8b\xd1>\xa5b\x14\xfa(\xb6q\xb8-\x13\x81\xf0q_\xf1\xcd\x0b~---\x93\x86\x85\xe2\xa2_\xef\x17\xbf\xf8E\x97\x95\x98+/\x06\xf1\xcfA\n\x04\x9b]\xdb\x06\x11U:`\xd5\xd5\xe5`;i\xf8\xb4\xa2<\x10\xe0\xef\x82\x89\x82V\xbf\x90#YC\xbeQ\x10t%\xfanY\x8fd\x1c\xd58(\xe5i\xe7\t\xca\x91\xde\xd9gu\xabf[\xdb\x95\xc7\xe4\xc8\xf3\x109\xfe\x1b\x01\xbc>\xf8\x0f\xf8\xd4\xdc\xca$\x02\x06\x1c\xf4 \x02" \x02" \x02\x05M@\x02`A7_l\x0b\xcf\xee(\xc5\xbfYpf\x95\xab\x81\xf3\xbd\xa0\x9b\x8ag!\x1b\xfb\xbc\xfe\x02\xf9\xcd_^cK\xd6\xb4Y\x07\x86\r*\xe1G\xc8\xe0\xb5z\x11\x08\x81@\x19"{\x18\xc9\xfb\xf0\xed;\xdc\xda\x11\xff\xa6Ai\xfbp\xf6B\xdd\x8a\x15+\xdc\'\x14\r\xc7k~Yf\x16\xa6\xbd\xf2\x95\xaf\xb4\xb7\xbe\xf5\xad\xeey\xd1\x88\x7f\xa8\x8d?G\xf4t\x0cZ\xe7\xb6~\xab\xaaI\xe0\xbd<\x898\x8e\xae\xfeM\x94\x00\xa3\x00\xfb1\x94{\xd5\x999\x01\xd0\xb5qX=\x8f@\\\xeb\x7fp\x9be\xfa0\x07`%\xa2\x00\xf3y_\x02#\x1e2\xb8\xc9Y\x7f\xd8,\x88\x80\xabs(\xc7\x17\t\xc8k\x03\x1e@\x16\xc3?\x01\xd7\x8f\x02\x10d" \x02" \x02"P\x0c\x04$\x00\x16C+\xc6\xab\x0e\xecjs\xbf\xaa\x82\x7f\x05>\x17\xce\x8edd\xfb\x1a\x0b\xc0>/\xed\x95\x1f?\xd2\x8e~\xe1\x1c\xdb\xb1\x01s\x86i\xce\xbf\x1c\x14\xfd\x17\x81\x02#P\x8e\xeb\xeaL\xca\xec\xfe\x9b\xb7\xba\x92g\xc3\xba\xa0/0.#\x8b\xcb\xc8@\xda\xaaU\xab\xdc\xa3\x17\xb7\xdc\x8bQ\xfc\xe3\xf7\x19\xf1G\xe3\x90c\xdaM7\xddd\x07\x1dt\x90}\xf7\xbb\xdfu\xaf\xf9o\xac\xeb\xdd\xb3`\x0c\x9f\xb8\x00\xa9\xe0\xcc\xd4\xb9c\xd0*k\xf24\x8c3\x86l\n\xb9HCC\x19\xabo\xad\xb2#O\xe3=H\xee\xcf!\x1d0\x82\x8eFzg\xaf%\x1f\xef\xb4D=\x04\xf3|\x87\x90\x96#\x02r\x17\xb2\x13\x1f>\xd3\xa6]\xb22\xd7\x8c\xe3\x8b\x04\xe4/\x83\xc2\xdf\x95\xf0S\x82\xe7\x91\x8e\xe2\xc06e" \x02" \x02" \x02\x93L \xe8\xfaN\xf2Z\xb5\xbaR&\xc0}\x8a\x82\xdf[\xe0\xe7\xc0#\x9d\xf7\xcfE\xfea\xa3\xb4s\xdft\xa8\x9dv\xe9A\x10\xffz\xc3\xbb\x00\xc8mJ\xffE@\x04B"\xc0\xeb\xe9*\xcc\xaf\xd5\xb5}\xc0:6\xf5\xbb\xad\x0c\x87\x91\xd93\xa4\xf2G\xb1Z\xce\x0bHan\xe6\xcc\x99\xb6re\xee\xa2\xdf\x8bx\xfb\xdb>\xbfKg\xa4\x9f\x1fV\xcc\xc8>\x1f\xf1\xb7~\xfdz;\xef\xbc\xf3\xec\xc4\x13Ot\x19\x879\xe7`Q\x1a\x84\x11\xce\x13K\xdb\xf9T\x1f"\xc4\xf1$$\xad\xc8mD\xff"!\x90M\x0f\x1b\x9buU0\x0cx\x02\xc1\xb0\xcf]^\nk\xc1\xfe3p\xff\xa6\xdcs\xceO\x90oC\x118\'`\xfd\xda\xf9\xd6r\xce\xa1\xb9\xd2\x04b\xe5\x18\x8a\xc6_\x02kH\xd1\xef3\xf0\xa6\xe0\xb5~!\x00!\x13\x01\x11\x10\x01\x11\x10\x81B%\x10\x83\x9eJ\xa1\xa2S\xb9\xf7C\x80\xfb\x13\xc5?N@\xf3\xcfp\xdfy\xc4\xd3h\xcc\xf7qO\xbb\xec`{\xe9\xdb\x0f\xb1\x8e\xcd}\xb8\x9eS\x7f5\x1a\xfa\xda\x8a\x08\x84@\x00C2\xab\x91\xc4\xe7\x91`\xf8o\x08[(\xf8U\xfa\xe1\xbf\x87\x1e\x1a\\\xec\xa3F|\x8fQ\x81\xfb:\x85?~F\xf7\xd9\x83) \xd2~\xfb\xdb\xdf\xda%\x97\\b\x07\x1ex\xa0]w\xddu\xee=\x8a\x7f\x14\t\x8b\xdd6?\xdec\x19\x08G\xc0"+p\x02\x14u{\xbb\x86l\xf1\xd1m\xd6\x80\x0c\xcf\x1c\x12\x10\xda\xf4\x1f\xc1O\xa3\xef\xb6\r\x96M\xa2\xfb\x13\x9b9\x861\x1c\xb8\xa3\xdf\x9a\xcf:\xc4\xea\xd7\xcc\x1bo\x8bR\xfcc\x9f\xee\x088#\x01Y[\xfdB\x00A&\x02" \x02" \x02\x85J@\x02`\xa1\xb6\\\xfc\xca\xed;\x85\xbcK\xcc\x89\xa39\xef_\xa4\x9dE_\x80\xc3N:\xc0.\xfe\xc0\n\xdb\x8d\x89\xdd]\xa6P\xed\xe5\xf1\xdb[T"\x11\x18%\x01N\xc9\xc6\x04 \x8f\xde\xbd\xcb-\xe1#\xb6F\xb9xI|\xcd\xcf\xd9w\xcb-\xb7\xd8\xe6\xcd\x9bs\x9c\xa0dQ\xd8\xdb\xd7\xbdX\xc8/\r\x0e\x0e\xda\xf5\xd7_o\x97^z\xa9\x8b\x1e<\xe3\x8c3\xec\x07?\xf8\x81[\xdeg\x1a.v\xf1\xcfO\xf9\xb7m}\xafe0\xcfd9\xe6\x90\x93\x156\x01f\xfeM\xf6g\xacmN\xad-=6\x97\r8\xf7\xdd-<\x95\x89\x80\x08\x88\x80\x08\x88\x80\x08\x14\x12\x81\xdcm\xffB*\xb1\xca\x1aW\x02\xec$\xf2N\xf1\xa7\xe0G\x06\xcf#\x9b/\x86\xa2\x003\x85.8l\x8a\xbd\xe1\x8bkl\xb0\x07\x91/\xcc\x16\x1a\xd6\xdc?\xa8\xa0L\x04D |\x02\xfcm\xa71\xe4\xf7\xa9\x87:\xdd\xc68L\x13I>e#\x08x\x91\xae\xa7\xa7\xc7f\xcf\x9em\'\x9f|\xb2\xb5\xb7\xb7\xdb\x8c\x193\xac\xb6\xb6\xd6\r\xf5e\xb4_\x7f\x7f\xbf\xed\xd8\xb1\xc3\x89\x84\x0f>\xf8\xa0m\xdf\xbe}\xc4ZrO9\x0c\x98s\x01\xfau>\xe3\x0b\xc5\xf6FN\xbfq\xf3\xc4\x0e\xf3\x0cFi#x\xaf\xd8\xaaZJ\xf5)+\x1b\xb6\xfe\xddi;\xe1\xfc\xf9v\xdb\xaf6\xe27\x10b\xa3\xb2\x9f\x81\xf5\xf7\xde\xba\xde\xeaV\xce\xb4l7\x12\x82\xc4\xc1p\xac\x1cN\xa5\xad\x0c=\xfdi\xaf>\xc66\xff\xf3o\xcdM\x9f@5\xd4\x0f\x97x\xfer\xf2\x17\xc1#\xee4\xf8{\xe1o\x81{Q\x10Oe" \x02" \x02" \x02\x85D@\x02`!\xb5V|\xcb\xea\x87\x89\\\x80"\xbe\x0e\xce\xcebt\xe2\x1f6F\xf1o\xda\xac:{\xfb\xff[\x8b\xa8\xbf\x0c\xee\xfe\xa3\xd3+\xf1\x0fdd"P\xb8\x04\x98\xf9\xb7\xba.a;7\xf6\xdb\xf6`\xfe\xbf\x12\x18\x8d:\xee\x06ct\x1f\x87\xf8\xfe\xe1\x0f\x7f\x18\xf5:\xfcp`.\xc0e}"\x90Q\xaf\xa0\xc0\xbf\x88\xd9\x10]\r8]\x04\xcf\x1d\xcc"\x9bIKa.\xf0fu\x91\x9c\x03\xbd)[x\xd44k\x98Re\xbd\x9dCnx\xf7\xe8u\xaf1\x10\x08v\x97\xc1\xbfo\xb3\xf4v\xcc%\x89d2\x8c\x08\xf4\xf3\x03\x8eaM\x93\xffU\x1c\x13\xb2\xe8\x0fUL\xad\xb7\xa9\x97\x1fe;\xbf}\xfbX\xc4?_\x1e/\x02^\x867\xbe\n\xff;\xdc\xf7\xfb\xfcw\xf4(\x02" \x02" \x02"P\x00\x04x\x17O&\x02\x13!\xc0}\x88q\x13\xb3\xe1_\x80\x87x\x9b\x1dk\xdf\xc7\\\xe4\x1f\xde\xab\xa8,\xb7w~\xeb\x04\xabi\xa8\xb4\xben\x89\x7f\xfb`\xd2K\x11(L\x02\xb8Z\xaf\xaa\x86\x00\xb8\xa9\xcfzw\x05Q5\xa1\\\xc1\x17&\x9e}K\xed\xe7\xf7\xe3\xb0_F\xf2\xd1\xab\xaa\xaa\xf6\xb8\x7f\x8f\x9f\xfb\xc4\x1e\\\x86\xd1~t>/9\x1bQ\xe5\x9e]C\x96\xe0mQ\xe9\x7fE\xb1\x1b\xa40\n\xa0\xaa\xb6\xdc\xd6\xbe\xe4@W\x9f\xd0n\n\xf2w\x03\x89,;\x98\xb6\xc1u\xc10\xe08\xfd\x96\x10E\x9d\xd9\x8d\xa4 G\xcf\xb5\xc6c\xe6\x05mKMo\xd4\xc6/\xf3\x97\xc2q\xc4o\x08\x9e\x8f\xf8\xe5\xe0\x1d\x99\x08\x88\x80\x08\x88\x80\x08\x88@A\x10\x90\x00X\x10\xcdT\x10\x85\xfc\x12J9\x13\xceNa$\xfb\x95\x1b\xc5\x82\x08!\xda{\xbew\x82\xb5\xcf\xa9\xb3\xee\x8eAK\x8c}\x8e\x1b\xb7\x0e\xfd\x13\x01\x11\x88\x17\x01\xce\xcfVUWa\x9d\xc8\x00L\xe3D\xfeq\xba\xae\x8e\x17\xad\\i(\xe21\xf1\x07#\xf9\xe8CCC{\xdc\xbf\xc7\xcfKf\x88\xef\x18\x1a\x89Bs\x052NC\x0e\x1d\xc3R\xfaj|\t@\xdcNem\xc5\xc9\x07\xb8"2;0\xfb\r\xe1Xn\xc5}wm\xcc\x1d\xa3b7\x97$"\x01w\'m\xcay\xcb0Oa\x15\x10\xa0\xef46\x16\x8c\xf8c\x87\xebU\xf0\x83\xe0\xfc\x91\x8cm\rX@&\x02" \x02" \x02"\x90_\x02\x91\x085\xf9\xad\xa2\xb6\x1e"\x01v\x08\xd9\t\xe4\x1d\xe1\xf3\xe0\x8c\x04\x8cd\x9f\xca\ru\xc3\xd6`o\xfa\xd2j[|\xe44\xeb\xda>\x88a?\xea\x8f\xe6\xa8\xe8\xbf\x08\x14\x01\x01\x1cM(\x02n~\xac;W\x99H\x8e.E\xc0MU\x18\x17\x81\xae\x1dI\x0c\x01\xc6\xa2\xb9\xfbJ\xe3Z\x87\x16\x8a\x0f\x01&t\xe9\xc1\xd0\xdfEGL\xb3\x99\x073?\x19:(a\xf5\x11\x82;\x13\x03\xf7m\xb1L?\xa2\x95+\xe2w\xb0r\xf3\x016T[\xeb\xcb\x0e\x1bo#\xb1\xbf\xd7\x00\x7fS\xb0\x82\xf8Ur\xbc5\xd3r" \x02" \x02"P"\x04t\xf2.\x91\x86\x0e\xa1\x9a\xbcL\xa2\xe0\xb7\x04\xfeqx\xa4w\x83\xfdP\xb5\x97\xbfw\x85\xad:k\x8e\xed\xdc\xd2\x1f^\xc7\x1e\x95\x93\x89\x80\x08DO QV\xee\xe6e\xdb\xf4H \x00\xf2(#\x13\x81I&\xe0\xa3\xc2\xbaw\x0cX9\xa6\x93P\x94\xe9$\x03\xce\xd3\xeax;\x90\xc9\xc0\xaa0\x8f\xe8\x11\xa7p\x80\x02:*a&\x03q[0\x1b\xb8g\xb3\x95\xd7#\xca.n\x13\x96bG\xe7P\xe0\xbaUs\xad\xe6`\xe4\xf4\xa0\xd0=\xb6\x11\x13D\xca\xa5^\n\xe7\xb4/<"\xeb:\x02\x10d" \x02" \x02"P(\x04t\xe2.\x94\x96\x8a_9]\xd7\x11\xc5\xfa,|jP\xbcH\xf7\xa7\x93_q\x90\x9d\xfd\xda%\xb6k+\xc4?\x7f\x05\x17?N*\x91\x08\x88\xc0x\t\xe06C\x06\xc3\xfc\xb7>\x99\x13\x00\x15\x985^\x90Zn4\x04v\xefD\x04`\x054\x0e\xedh\xa3\xc1U\x10\xdf\xe1\x9c\x8e\xbd\x98\xdb\xf1\xd8s\xe6\xb8\xf2\x86*\xee\x06\xd1\x85\xfd\x18\x06\\\xc6!\xc0\xc31\x1c\x91@\xc9\x0e\x99\x81\xa7\xbcty\xae\xfd\x82iTF\xd9\x98\xec\xe3q\rs\xe1\x1c\xf5\xc1_J\x0c+\x89R\xc9D@\x04D@\x04D@\x04\xf6K R\xc1f\xbf%\xd0\x9b\x85H\xc0\x0f\xfd}#\n\xffBxdC\x7f\xbd\xd0w\xf8I3\xec\x95\x1f;\xc2\xba \xfee\xb9u\x99\x08\x88@\xd1\x11`\xa2\n\xfe\xbewl\xe8\xcf\xd5-\xd4\xab\xf7\xa2\xc3\xa7\n\x8d\x92\x00\xa7\x94\xa0\xedF\x04`\x05\x86nJ\xff\x1b%\xb8B\xf8\x1a\xa2\x88\x93H\xce1}A\x83\xcd]\xc2\x1c\x16P\xac\xc6\x16\xf56\xfaZR\x1a\x83\r\xae\xeb\xb0\xd4\xa6\xdd\x88\x02\xac\x84\\\x16\xb3\xbd\tu\xcf\xf6$\xadj^\xab5 )\x88\xb3\xb1\xf1\xe0\x8f\x85\x95z%\xdc\x8f\x04q\xab\xd1?\x11\x10\x01\x11\x10\x01\x11\x10\x81\xf8\x13\x90\x00\x18\xff6\x8a[\t}\x87o\x19\n\xf618\xbb\xbc\x91\xdc\x01\xe6EZ\x16\x02@K{\x8d\xbd\xf6\xb3G[\x1f\xe6\xf6IcRoh\x042\x11\x10\x81"$P\x8e\xa3\xcdP\x7f\xda\x92\x039\x95_\xfa_\x116r\x1c\xaa\x14\x9cC8_\\9\xe7n\x0b\x84\x9c8\x14Me\x988\x81\x0c\x86\x01WT$l\xedKs\x82Wh\x03\x06x\x80\x82\x986\x0c\xd1o\xf0\xe1\x1dV^\r\x010\x8e\x07-\x94\x89\x19\x8b\x9b^\xb0(\x07wl"%\x7f-\xec\xf3\x1d\x05_\x1d\xeas\xd2\xab\xc9\x1e\x12\xac\xef\x8e\xa7\x10\xbd\x8c\x83X\xec\xb2\x01\xa3p(\xd3p_\xd2\xaag6[\xddQ\x9c\xca\x0f6\xb6(@?\xee\xe2\x15X\x925\x8e\xe4&0\x8b)\x13\x01\x11\x10\x01\x11\x10\x01\x11\x98\x18\x01us\'\xc6\xaf\xd4\x96\xf6C\x7f\xdf\x82\x8a\x9f\x0cg\x9cD$\xfb\x90\xbf\x89~\xf1\x07V\xd8\xe2c\xdam\xf7\xce\xc1\xdc\\M\xa5\xd6\x02\xaa\xaf\x08\x94\n\x01\xa4\xffM\xe0B\xb5c\xfb@\xa9\xd4X\xf5\xcc3\x81\xa1\xc1\x8c\r\r\xe2\xb4\x16\xc9Y-\xcf\x95-\xa1\xcd3\x1bp\xdf\xee!\x9bwH\x8b-:\x12\xc9/`\xa1\x8d\x1c\x08:+\xc9\';-\xdd\xd1oe\xd5\x98\x840\x966l\x99\xbe\x945\x9f:\xae(@_\xa3S\xf0\xa4\x15NAP"\xa0\xa7\xa2G\x11\x10\x01\x11\x10\x01\x11\x881\x01usc\xdc81+\x1a\xf7\x15v\xf2\x98\xf5\xf7\xc3p\x8a\x7f\x91\x98\x9f\xf7\xef\xb0\x13g\xd8\x0b\xaeXh;7!\xe9\xc7\xd8\xeeVGRNmD\x04D`\xf2\x080\xac\x84\xf3\xb1\xf5t$\'o\xa5Z\x93\x08<\x07\x01\xce\x15\x97\xc2ps\n\xcf\x9a\x08\xf09@\x15\xe0G\x9c>\x84CsW\x9d\x95\x8bxcr\xa1\xd0,\x18c\xdcw\xdbzK0\x1b0#\x01\xe3f\x9c_u0eUs\x9a\xadfI[\xaet\xa3\x1f\x1b\xed\xa7\x82\xa1zxLP5\xbe\'\x13\x01\x11\x10\x01\x11\x10\x01\x11\x889\x01\t\x801o\xa0\x98\x15\x8f\xfb\xcb\xa7\xe1\xbc\xe3\xcb\xdes\xe8\xfb\x0f\x85>v\xdc\x1b\x9a+\xed\x8aO\x1ei\x83\xdd)H\x8f1\xecL\x03\x86L\x04D`\x12\t\xe0\x08S\x8e\xac\x9a=\x9d9\x01p\xf4\xd7\xa6\x93X\x06\xad\xaa4\x08\x04\xa7\x94t\x12\x11\x80Ci\x17\x1d\x16\xa2\x15<\x8e\xfe~0\x16\x18\xaf\xf9\xeb\xae\xcb>r\xb8M\x9b]g\xfd]\x1c\xfa;\xde\xb5i9\x11\x10\x01\x11\x10\x01\x11\x18\x03\x01\x8a\x1eA\xf6\xd61,\xa5\xaf\x16\x18\x81a\x88p\xeco\xac<57\xe45\xcb\x81\xabaY\xb0?\r<\xb85\xb7o\xc5Q\x1e\xc3]V\xce\x03\x98ho\xb4\x8a\xe9\x8d9\x12c\xbf:X\x1a \x8c\xa4\xbf\x18Vsi\xbd" \x02" \x02"P\xec\x04\xc6~\x8a/v"\xaa\x1f\xf7\tv\x87/\x82\x9f\x1a<\x0f]\x86\xf3Y\x7fW\x9e6\xcbN\xb9\xf8 \xeb\xda>h\xa1\xdd\x95G\xa5d" \x02" \x02"0\x92\x00\x87\x9d3\xe2<7U[\x1c\x95\x9a\x91\xa5\xd5\xf3\xf1\x12(\xc30`\xce-\xbc\xe8\xa86k\x99\x8e\xe05D\xbc\xb9>\xc8xW\xf8\\\xcb\x05\xd9\x80\xfbn[o\xd9!t\xad\xe2:\x0c\x18\xa3/\xca\xab\x12V5\xb3)W\x9b\xd1\xcbx\xfe:\xe2\x90\x00\xc3\xe8\x97|.n\xfaL\x04D@\x04D@\x04D \x14\x02\xfe\xc4\x1d\xca\xca\xb5\xd2\x82#\xc0+\x1e\x8a\x7f\xad\xf0\x8f\xc1\xf9:\xfc}\x04Q\x17\x1c\xfa[Y\x93\xb0\xcb?v\xb8\xf5v%-\x1b\x0c\x9d\xc1\xf6e" \x02\xa5H\x00\x97\x91\x0c\xc8J\xe0\xa2T&\x02Q\x10HT\x96c\n\x8a\xdc<\xb4<\xf9\xc9\x8a\x93\x00E\xde\xd4`\x1a\xe2_\x8d-;>\x97\r8\xb4\x9a\x06C\x1b\xb2\xd8^\xf2\xf1\x0ed\x03\xc6<\x80q\x95\xc8 PV\xcdc\xf7\x0f\x16\x08\x97\xb9\x17\xa3\xfa\xbf\x04\xdf\x8a\xe9$\x87\xa3*\xbf\xbe$\x02" \x02" \x02%A |q\xa7$0\x16M%\xfd\x95\xf6\x87Q\xa3\xb9p\x8a\x81\xe1_\x07\x05\x1d\xcd+>q\xa4\xb5L\xab\xb5\xfe\xbe\xb4\xe6\xfd+\x9a]J\x15\x11\x81\xf1\x11`4V\x16\x17\xca\xb5\xf5\xfe\xb04\xbe\xf5h)\x11x>\x02\xfe$WYUn\x95\x10\x9c9D4\x823\xdf\xf3\x15K\x9f\x87H\xa0\x0c* \xa3\x00\x8f;\x97]\x1d\x1ek\xfc$$!l4\xc8\xaa\xdbw\xebS\xc8\x06\x8cy\x00\xe3\x98\r\x18\x07\xdc\xecP\xda\xaag\xb5\x8c\x15\x80\xff\xf9\x10$\xe7\x02\xa4\xf9\xf7r\xaf\xf4_\x04D@\x04D@\x04D 6\x04$\x00\xc6\xa6)\xf2^\x10^es2\xe7\xa3\xe1\xaf\x86S\xfc\x0b}\xff\xf0\xc3n\x8e8e\xa6\xad=o\x9eun\xef\xc7F\xd5w\x04{\x99\x08\x94<\x81,\x84\x98\x1aL\xd6\xef\x0c\x9a\x8cL\x04\xc2$\xc0\xe8\xbfD%"\xd2\xc3\xdc\x88\xd6\x1d\x0b\x02\x8c\x02L\xf6\xa7\xec\xa0\xc3\xa7YK{\xb5+\xd3\xe8\xf2^\x8c\xa3\xf8\x81\xb68\xf8\xf0\x0eK\xef\x1a0c\x14`\xdc\x8c7\\RY\x0c\x01n\x18k\xc9|\x87\x8d\xe2\xdf\xcc\xb1.\xac\xef\x8b\x80\x08\x88\x80\x08\x88\x80\x08DK t\x81\'\xda\xeahk\x13 \xe0\xafy>\x8eup\x16hv\xea|\xc7n\x02\xab}\xf6E\xd9\xd9\xe6]\xf7r\xdc\x1d\xbf\xe4C\x87[\xdfn\x0c\xfd\xcd\x96\x19#\x7fd" \x02"\xc0\x08\xc0\xea:D\xcc\xc0B\x8c\xcf\x11\xe8R\'\x10\x9cs\x12\x15\tL\xd1\x86{a\xb8\x15\x16\xea\xc9\xaf\xd4y\xc7\xa4\xfe\xe9\xa1,">\xcb\xec\xd8s\xe7\xb9\x12\x95\x05\x91z\x93^<\x17]Xf\x99\x9eAK>\xd9a\x15\xf5U\xb8\xc5\xea\xbb\\\x93\xbe\xb5\xf1\xaf\x10\x07\xd9a\xec\xff\xe5\xc11w\x8c?\x02\x1e\xa8s \xf5\xf3\x19\x7f\x1bhI\x11\x10\x01\x11\x10\x01\x11\x08\x99\x80\xa4\x96\x90\x01\x17\xc8\xea\x19\xfd\xc7\xeb\xeb\x8b\xe1g\xc0\xd93\x8dl\xdf\xb8\xe4\xc3\x87[\xdb\x1cd\xfd\xed\xd5\xd0_p\x97\x89\x80\x08\x80\x00\x05\x98a\xcc\x05Z\xdf\x82\x8be\x1a\x8fP2\x11\x08\x91@5\xe6\xa1\xad\xacKX\x96C4\xa5\x00\x86H:\x1e\xabf3g\xd2Y[q|\x90\r8\x1d\xe2A\x86\xbd,X\xff\xbd[0\xbd\x1e\xb6\x13Z\xb8an;\xe3\xfa\x8f;.e\xc8Z\\9\xb5>X|\xcc?\x82\xb6\xf1.8\xae\xf2j!\x11\x10\x01\x11\x10\x01\x11\x10\x811\x13\x88L\xe4\x19s\xc9\xb4@T\x04\xb8\x0f\xb0\xd7;\x05\xfe\xa1\xe0y\x88\xbd`l\x01\xc6\xa1\xbf\xec\x03\x1frL\x9b\x9dz\t\xb2\xfen\x1b\x08/\x0b_n\x93\xfa/\x02"PH\x04p\xed\x99\xc6\xc5y\xf3\xb4\x1aW\xeaa)\x80\x85\xd4z\x05Y\xd6\xda\x86JD\x84\x95C\x14*\xc8\xe2\xab\xd0c$\x90\xa8(\xb7^\xcc\x03x\xd0\x11S\xed\x80\xf9\xb9\xa1\xaf\x1c\x06\x1e\x8a\x05\x89\xcd\xfa\xef\xdc`\xc3I\xcc\xb0R\x19(\x82\xa1ll\xfc+-\x830\x99h\xf1S\xf9\x8dz=\xbe\xcf\xc8~\xa4L\x04D@\x04D@\x04D \xc6\x04$\x00\xc6\xb8q",\x1a#\xfe\xae\x84/\x85\xf3y\xe8=S?\xe1\xf6e\x1f=\xc2\x06\x11\xf9\x97\x0e\xf3\xce;*$\x13\x01\x11(,\x02\x0c\x90atN\xf3\xb4\xdc\xfc\\\xd2\xff\n\xab\xfd\n\xb1\xb4\x8c6\x1d\x866\xa3i(\n\xb1\xf5\xc6Qf\xded\xc00\xe0\xda\x86\n;\xec\xa4\xdc\xf4uY\xce~\x1c\xa2\r\xe3\x98\xd6\xff\xb7\xedVQ\x83y\x00C\xde\xd6\x98\xab\xc1\xde\x1f\x98\x945\x04Q\xd7\xa3\xd7B\xbd\x008u\xcc\xdb\xd4\x02" \x02" \x02" \x02\x91\x12\x90\x00\x18)\xee\xd8m\x8c\xdd;v\xdc\xe6\xc2\xdf\x1b<\x0f}\x9f\xe0\x10\x13\xda\x05o_ns\x165a\xee\xbf!7\x0f\xa0{S\xffD@\x04D\x80\x04\xa0\xc2\xa41)}\xe3\xd4@\x00\x14\x15\x11\x08\x89\x80O\xcaZ\xdf\\\xe5\xa2NC\xda\x8cV\x1bC\x02e\x89r\xeb\xeeL\xdaq\xe7\xb1\x1b\x84\x0e\x11\x87&\x84e>\x1b\xf0\x1d\x1b\xac\xac\x96"[\x88\xdb\x1aW\x1d\xa0\x00\xa2\x7f\x96\xe0\x1c\x85c3_\x91q\x8f\x1d\x1e\xdb\xe6\xf4m\x11\x10\x01\x11\x10\x01\x11\x10\x81\xf1\x12\x08]\xec\x19o\xc1\xb4\\$\x04\xbc\x00\xf8al\xad\x15\x1e\xdc\xff\ro\xdbn\xe8/&\xc4\x9eyp\x93\xbd\xe0\x8a\x83\x90\xf5w\xd0\xddq\x0eo\x8bZ\xb3\x08\x88@A\x12\xc0\xd9);4l\xed\xf3\x98\x93H&\x02!\x12\x08\xe4\x8b\xa6\xb6j\xcb\xa4\x865\xfd_\x88\xa8\xe3\xb6jf\x03\x1e\x1aH\xa3O\xd2h3\x16\xe4\x8e5a\xe5\x02\xf1z_\xf2\xd1\x9d6\xb4\xa3\xd7\x0csN\xba^W\x9c\xa0\xe0\xb7P^9\xeeK\x03\xdd\xad\x89S[\xaa," \x02" \x02"\xb0\x1f\x02\xe3>\xcb\xefg]z\xab\xb0-\xa9\x10\xad\x00\x00@\x00IDAT\x08p\x98/\x05\xbfU\xf0\xcb\xe1\xbc\x04\n}\x7f\xf0C\x7f/\xff\xc8\x11V\x8e\xf9w\x86\x92Y\xcd\xfd\x07\xf02\x11\x10\x81\xbd\t\xf0`\xc49\x00\x1b\x9a+\xad\xbe)\x97\t8\x8e\xf3\xe6\xef]j\xbd*D\x02>\xea\x8b\x11\xe9\xa9\xc1\xb4\x86\x00\x17b#N\xa0\xcc\x8c4\xae\xc0\x9c|\xc7\x9e7\xcf\xade8\x18\xa50\x81U\xee\x7fQf\x03\xc6\xba\xb3\x03C\x96|\x1c\xd9\x80\xeb\xa0\x97\xf9\xf0\xd3\xfd/\x11\xed\xbb\xec\x05\xf2 \x9b\xc0\xf0\xe4\xf1\x99\x04\xc0\xf1q\xd3R" \x02" \x02"\x10\x19\x81\xd0\x05\x9f\xc8j\xa2\r\x8d\x95\x00\xbbz\xb4\x8f\xc1\xfdX\x94\xdc\xd8\\\xf7v\x08\xff\x82\xab\xf7\x13.\x9coK\xd7\xb4\xd9nD\xff%B\xbb\xd5\x1eB\xf9\xb5J\x11\x10\x81H\t\xf0\x86\x01#tf-lv\xdb\xe5\x04\xf52\x11\x08\x8b\xc0\xbcCZr7\xa54\t`X\x88c\xbb\xde!$\xe68tu.\x89m\x96\t;B>\xd4\xf4\xdf\xb3\t\xda_N\x10\x8c\x13\x14W\xed\xf1_\x19\x84L-N\xa4T\x16\x11\x10\x01\x11\x10\x01\x11(L\x02\xe3?\xcd\x17f}U\xea\x1c\x01\xb6;\xa3\xff\xce\n\x9cb`\xa8\xfb\x82\x9b\xf7\x0fs\xeb\xd4!\x9a\xe7\x82\xb7\x1fj\xbd]C\xb9;\xcd\xd8\xb0L\x04D@\x04\xf6G \x8b\xa3T9n\x12\xf8\xa1y\xe1\x1e\xa5\xf6W\x02\xbdW\xec\x04\xbc\xa6\\U\x95\xb0Fd\x9cf4\x98\xf6\xb3bo\xf5\xbd\xeb\x97\xc0<\x80\xcc\x06<\x7fE\xab\xcdY\xd2\xe2>\x0c\xed\xe6$E?X\xff\xdd\x9b-3\x98\x8aW6`\xc8w\xc3\x94\xf0\xd2\xe3\xceN\x82\x8e\x9dL\x04D@\x04D@\x04D \xce\x04B\x15}\xe2\\\xf1\x12.\x9b\xbfC[\x07\x06\x1f\n8P\x0c\x0c\xd5\xdc\x9dnl\xe1\xe2\xf7\x1enMm5\xd6\xdf\x93v\x91=\xa1nT+\x17\x01\x11(h\x02\xc3\x99,F\xa3%l\xce\xd2\xa6\x82\xae\x87\n\x1fg\x02\xb9S\xe2\xec%\xcd\xd8\xd70<\x93\xaa\xb3\xac\xe4\x08d1\xdd@\x02\xd3\x92\x1cy\xfa\x0cW\xf7\xb0\xb3\x01s\xd6\x95\x81\xfb6c\x180\x06`\xe08\x17\x1b\xc3\x8dZf*\x1e\xa7A\xd1\x94\x89\x80\x08\x88\x80\x08\x88\x80\x08\xc4\x99\x80\x04\xc08\xb7N8e\xf3\xd1\x7f\xe7b\xf5\xab\xe1\xbc\xd5\xcb\xf9\x00C3\x9f\xf5w\xfe\xf2)v\xdcK\xe6Z\xe76\x0c\xfd\xc5\x85\x96L\x04D@\x04\x9e\x93\x00\x8eV\xa9T\xc6f-\xc8\r\x01\xce\xa6\x91\xa0A\x87\x8e\xe7D\xa6\x0f\xc7F\xa0,8\xfb\xcd_1\xc5\t@\x14\x82d\xa5G\x80\xd9\x80{\xbb\x92\xb6\xfa\xc5\xf3\\\xe5\xfd\xbc\x90\xa1\x90\xf0\xd9\x80\xef\xdche\x98{0\xf4\xf1\xc6c\xa9\x04\x02\x14\xb3\x03c\xd6\xf1\xfcQ\x19Y\xddd" \x02" \x02" \x02q& \x010\xce\xad\x13N\xd9xu\xc3\x89\x9a?\x08g\xfb\xfb\x8e\x1b\x9eN\xbeq\xce\xae=\xd1\x7f\xef?\xcc\xb2\xb8\xd3\x9d\xd1\x05\xd6\xe4\x83\xd6\x1aE\xa0\x08\t\x94\xe1\xf04\xd8\x9b\xb2\xa9\xb3\x1a\xac\xb6\x91S\x95\xd2B=d\xe56\xa1\xff\xa5C 7"\xd3\x16,\x9b\xe2\x12R\xc5)\'C\xe94B\xfek\xca\xb9F\x93\x03\x19\x9b6\xb3\xcex\xb3\x92\x16\xde0\xe0\\}\x93\xeb:lh[\xb7Y-\x92\x1c\x05C\x83s\x9f\xe4\xeb?\xbb\x84Y\x1b\xee\x1b\xb3\x00\xe8\x0b\xdc\x19<\t~U\xfem=\x8a\x80\x08\x88\x80\x08\x88\x80\x08\xc4\x85\x80\x04\xc0\xb8\xb4D4\xe5`{\xb3c\xf6\x1a\xf8\xa1p\x8a\x81\xe1\xee\x03\xc1\xb5\xfa\t\xe7\x1fhK\x8eF\xe2\x8f\x8edx\x9djTF&\x02"P<\x048\xff\xdf\xd0`\xd6\xda\xe6\xd4\xd9T\\\x98\xd3|\xc4V\xf1\xd4R5\xc9\x17\x01F\x93\xba\x84\x0f(@\xfb\x81\rH\x00\x82\x80\xf8p\xcf\x88\xf9\xaa\xaa\xb6;\n\x02\x19f\x03\xae.\xb75{\xa2\x00G\xb1\xd0x\xbe\x82a\xb6\xcc\x06<\x8c\xe8\xe6\xc1GwZE-\xb2\xee\xf2\xbd|\x1b\xf6\xfd\xe1l\x99\xa5{\x82@\xbe\xd1\x17\xc9\xdf\x95\xf1\x02`\xbek\xa2\xed\x8b\x80\x08\x88\x80\x08\x88\x80\x08<\x0b\x01uu\x9f\x05L\x11\xbe\xcd\xb6fw\xae\x15\xfe\x8e\xe09\x1eB\xb4 \xfa\xaf\xa2\xb2\xdc^\x8a\xc4\x1f=\x9dIl\xcc\xf7\x13C\xdc\xaeV-\x02"P4\x048$\xb3\xba\x0e\xf3\x00.\xce\xcd\x03\xa8#H\xd14m\xde+\xe2\xb3J7!\xf9G\xdb\xec\x06K\xf6anZ\x8d1\xcf{\xbb\xe4\xad\x00\xe8%\ra\x1fXr\xcc4W\x04f!\x0fmw\x08\x0ed\xfd\xf7n\x86\xf6GA0\x1e\xdd\xf1a\xcc\x81\x99\xde\xd97\xd6&\xf0\x87\xe5\x9dc]P\xdf\x17\x01\x11\x10\x01\x11\x10\x01\x11\x88\x96@@\x8f\x89\xc9`Z\xdaj\x9c0\xccz\'\xc2\xbay\xc9\x9e\x19,\xb9n\xa7\rmF6\xe0\xba\xd8\x81\xd0?\x11\x10\x01\x11\x10\x01\x11\x10\x81\xd0\tH\x00\x0c\x1dq,6\xc0\x0e\x1a\xc5?\x1f\xfd\x17Z\xbbs\xbe\xae=\xd1\x7f\xefXnC\xb8\xa8\xc2\x9c\xd22\x11\x10\x01\x11\x187\x81a\x8c\xd5dr\x86e\xb8\xa9@\xcbB\x10\x94\x89\xc0D\x08\xf8\xb9\xfe\x0eA\xf4_\x15"\x9f\xdc\xdc\x92\xa1\x9d\x19\'RR-\x1b5\x81,"\x8e\xcbq\xd3\xf2\x98\x17\x05Q\x80a\xdd\xbft\xc9?\x98\r8k\xc9\xc7wY\x05\x04\xb8\xbc\rC\xa7\xc8\x89\xe3\xec\xe0\x86@\x00\xf4\xb2\xde\xf3\xc3\xf7\xdf|\x10_\xe5s\xfd\x8a\x9e\x9f\x99\xbe!\x02" \x02" \x02y#\xa0\x13u\xde\xd0G\xb2av[\xd9!c\xd8\xcc\x9b\x83\xe7\xe1\xb6y\x90\xf9\xe3\x84\x0b\xe6\xdbAGL\xb5\xee]I\x0bm\x12mTH&\x02"P\xfc\x04(\xd6\xf4\xeeN\xda\x81\xcbZ\xad\xb6\tse\xe1\xb0\xa6l\xad\xc5\xdf\xeea\xd608U\xd9\x11\'\x1f`\x15\xd5\xe5\x96\x81\x08#\x13\x01G\x00\xc7\x9b\xfe\x9e\xb4-:\xaa\xcd*0/^\x16\xf3\x02\x86\x96\xa47\x10\x17\xfb\xee\xdb\x94\xbfl\xc0\xdc\xf5\xab+-\xb5\xb5\xc72\xdbzs;\x81\x97\xf5\x9e\x7f\x97\xf0\xdf\xa4\x00H\x0b\xb7\x8f\x99\xdb\x86\xfe\x8b\x80\x08\x88\x80\x08\x88\x80\x08\x8c\x93\x80N\xd4\xe3\x04W \x8b\xb1}\xd99\xe3\xdc\x7fS\xe1\xec\xe6\x85u/\xdb\xad\x99\x93gs~\xaes\xdfr\x88uw\x0c\xea"\x1d\xc0e" \x02\x13#\xc0\x9b\x08\x83}\x19\x97Th\xfe!-ne\x1a\x06<1\xa6\xa5\xbc4\xc5?\x8a:\xb4\xf9+Z1G-\x12\x98\xaa7T\xca\xbb\xc4^uO\xe0x3\xd0\x9d\xb2\xd9\x8b\x9am\xe1\xaa\\6`\x1f1\xba\xd7\x17\'\xe3\x85\xcf\x06|\xff\x96\\6\xe0\xca<\xec\x88\xc3Y$!\xa9t\xc3\x90\xb3I\xce\xb7\x80\x1f\xc8\xe8\x12\xe2\xf0G\x94\x803\x01\xc8\xc3\x01\x0e/\x08\x06/\xf5 \x02" \x02" \x02"\x10\'\x02y\xe8i\xc4\xa9\xfaE]\x16\xb6-\x05?\xce\xfdw\x05\x9c\x9d\xb2\xf0\xc4?\xac\xbc\xec\x84\xbfS.\x9eo]\xdb\x07,\x81\x0cz2\x11\x10\x01\x11\x98L\x02\xd9\xd4\xb0% \xd6\xac:\x8bA\xcd8\xb0\xe903\x99xKb]^3\xaek\xaa\xb4\x05\x87\xb7Z\x12sKJ\xff+\x89\xa6\x1fs%y\xbc)G\xe4\xf1Q\xfex3zall\xdbb\xc4\x1dFQ\x0c\xa72\xc8\x06\xdc\xe1\xe6\xe33\x7fWulk\x1a\xfb\xb71\xd49\x81\x04 }\x7f~"\xb7\xec\xd8DN^CP\xbe\xfc\xbf`\xc3>"0x\xa9\x07\x11\x10\x01\x11\x10\x01\x11\x10\x81\xb8\x11\x90\x00\x18\xb7\x16\x99xy|\x87l\nVu%\x9c]\xd6\xb0\xba\xad\xae\xb4H\xfb\xe1\x1e\xcf{\xf3R\xfb\xff\xec}\x07`\x1c\xc7u\xf6\x03pw\x00\x0e\x9d\x04\xc1\xde)V\x89\x94(\xaaQ\xbd\xd9\x96"\xc9Eqo\xb1$w\'\x8a[d\'\xb1\xe3\xf2\xbb\'\x8e\x1d;\x91K\xfc\xc7\xf6oG\x96{,\xb9\xc4\xb6\xbae\xf5BJ\x94D\x91\x14{C\xaf\x87\xeb\xf7\x7f\xdf\xdc\x0e\x08B\x00q\x07\xec^}C\x0evo\xcb\x94ovg\xdf|\xf3\xe6\xbdj\x1a\x92\x8e\xa8\x0ch\x00\xd1?\x8a\x80"\xe0*\x02X\x95\'\x83\x03QYwN\x9bT\x07\xb1l\xcdx\xe7T\x16\xd0U\x90K<1k\xff\x8f$ru\x8d\x0f\xcb\x7f\xe3%^c\xad\xde\x94\x11@\x7f\x13B\x7f\xb3\xf2\xf4\x99\xe2\x83s\x8e\x9cx\x03~\xf2\x10\xb8\xbf4!8\xe5rgz#\xb4\xff*\x82~\x89\x1c\xea\x95\xd03\x8e\xfd\xbf\xcc\xc57+Wr\xf9\xefV\'\xcb\xcc\xef\xce\xb4\x8cz\x9d"\xa0\x08(\x02\x8a\x80"\xa0\x08\xb8\x8a\x80\x12\x80\xae\xc2Y\x10\x89q4L\xc1\xec\xe5\x88k\x10)\x90Q#\xd0\x93P\xe5x\x8b\x9b\xb5\xa0N\xce\xbej\xa1\xf1\xfcK/\xc0\x1a\x14\x01E@\x11p\x1b\x01j\xe3\x0c\x0f\xc4d\xf6\xb2\x069\xfd\xf2yn\'\xaf\xe9\x95:\x02\xf84%\xe3i\xde\xe2t8\x93IA\xf3*\x05\x12D\x83"0\x1e\x02\xb4;:\xe2\r\xf8\xf4\x1cy\x03~\x9a\xde\x80#"~\xcf\xc4\xb6cU\xad\x84\x86#\x96\xff\x0e>\xb07},s\xef\xbf\xbc\xde\xbe9?u\xf6u<\x91FQ\xff*\x02\x8a\x80"\xa0\x08(\x02\x05\x8d\x80~\xb0\x0b\xbay\xa6T8\ne>\xc4\x1b\x9d\xbb=e\xe3\x12\xce|\xef+\xffv\x1d\xb4)\xaa\x8c\xf6\x9f.\xa7\x9aR\xbb\xe9M\x8a\x80"\x90\x01\x02\x15X\xb26\xd8\x13\x95\x8b_\xb7\xdc\\m\xed\xb9ep\xab^R\xe6\x08TY\xef\xbf\x0b\x82\xb2\xf2\xccY2\x00gUU~O?\x91e\x8ex\xf1W\x9f$q\x0c\xab\x1aJ\xd2\x1bp\xc0\'\xa9\xfe\x88\x0c\xdcE%>\x84\xcc\x9d\x7f\x90E\xe7\xf8!\x8ah\x97\xff\xeax\x02`hP\x04\x14\x01E@\x11P\x04\n\x1d\x01\xfd`\x17z\x0beW>;e\xfc\x17\xb8\xedTD+\xa4e\x97J\x86W\xa75\xfdR2gY\xbd\x11\x8e{;1\x98R\xdb\x7f\x19\xa2\xa7\x97)\x02\x8a\xc0T\x10\xa0\x16`x0&\xcb\xd67\xcb\xbc\xe5M&\t\xf58>\x15$\xcb\xef\x9e\xa43au\xdae\xf3\xa4\xae\xa9\xda\x10;\x1e\x9a\xc7-?\x80K\xb0\xc6\xd4\x024\xde\x80//1o\xc0Xf\xec\xab\xaf\x96\xbe;wB\x0b\x16\xa2"Wn\xa4\x95c3iE\xbeI\x1c?<\x8d\xf88"Yt\xab\x11\x88]\r\x8a\x80"\xa0\x08(\x02\x8a\x80"P\xa8\x08(\x01X\xa8-3\xb5rQ|\xf3#\xbe\xc7\xb9\xdd\x19\xeeL-\xb1\xc9\xee\xc2\xe2)s\xc9\xab\xfef\x9dT\x82\xf8\x8b\xc7<\xcdn\xb2\xe2\xe8yE@\x11(\x13\x04\xe2\xf1$&\x1b\xaa\xe4%\x7f\x95\xd6\x02\xcc\\q\xa5L\x00\xd2j\x8e\x8b\x80\xb1\xad\x863\xe7_\xbbD\x06\xba1a\xc5%\x8f\x1a\x14\x81\x13!\x00)\x99v\x8d\x1b[\xe0}\xfc\xbc6s\xa5g\xde\xc7\x1d\x11\xcaso\xc0\xb4\x9dZ\x17\x90X{\xbf\xf4\xfd\xe1\xf9\x13\xd5~\xa2s\xf6\xc5\xf99.\x18D\xe4\xe4s\xe6\xf4\xe1D\xa9\xeaqE@\x11P\x04\x14\x01E@\x11\xf0\x1c\x01%\x00=\x878g\x19P\x00\xa3\xf8x\x06\xe2\xc5\x88\x14\xc6\x82H\xd9S\x97\xff\x02\x04\r\x8a\x80"\xa0\x08(\x02\x8a@\xb1 `\x89\xa3b)\xaf\x96\xf3\xc5\x08\xb0\r)\x1d\xd2:\xf5\xab\x10-?\x87]\xf7\x83\xd5\xa4h\x9d\x07\xed\xbf\x97\xce\x83\xed\xbf0&\x90=\xe3\x1a\xdd\xaf\x80\xa6\xa8\x08(\x02%\x83\x00;\xbb\xa1\xbe\xb8\\\xf2\xc6\x15\x12\x08TI\x12\xeb\x80\xad\xad\xb7\x92\xa9\xa4Vdz\x08\xe0\xf3\x94v\xfeQ!\x97\xbde\x85\xf4u\x87\xd5^\xe4\xf4\x10-\xcb\xbb\xe9\rx\xb0?\x8aU\x0f\xf3M\xfd\x8d\x134\xafD\x1fh\x1c2\x84\x9e8(\x15\xd54\xef\xecBF\xf4\xfa;\xb3N\xfa~\xf7\x9c\x84\xb6b\xe5.\x93\xcc\xden\x02\xe5Mv\xbb\xff\xeal\xb1\xd1\xa0\x08(\x02\x8a\x80"\xa0\x08(\x02\xc5\x84\x80\x12\x80\xc5\xd4Z\xe3\x97\x95b\x1c\x05\xb2+\x10W \x92\x0c\xa4\xc4\xe8I\xb0\x13\xd1/\xbb~\xa5\xd4\xd6\xf9\x8dw<\xd5\xa4\xf0\x04jMT\x11P\x04&A\x80\xf6\xb8B\xfd1\x99\xbd\xb8N.|\xed\xd2I\xae\xd6\xd3\xe5\x88\x80]\xaay\xc9\xeb\x97J3lFF\x87\xd4\xf9G9>\x07\xd3\xae3\xa4ez\x03n\x9a\x11\x90\xb5\xe7z\xec\r\xd8\x99\xc6\x8d\xec\xea\x96h;|m\xd4\xf8\xd2\x92\xddT+A\xf2oFP\x06\x1f\xda\'\xbd\xbfr\x1c\x7fdO*\xda\x95%\xb7\xa2\x18\xf7 \xda\xc9\xe7\xa9\x96J\xefS\x04\x14\x01E@\x11P\x04\x14\x81< \xa0\x04`\x1e@w9K+\x94\xdd\x80t)6\x92\x10\xf4$\xa4\x15\xfdRR\xdf\\#\xe7\xbdr\xb1\xf4wB\x93Bm\xffy\x82\xb5&\xaa\x08(\x02\x99!\xc0>\xa8\xaf#"W\xbf{\xb5\xf8\xa0-Cm/UJ\xce\x0c\xbbR\xbf\x8a\xcf\x01\x1d60\\\xf4\xfa\xe5\xf0\xfc\x9b\xf0VE\xbe\xd4\x01-\xf3\xfaYo\xc0g]\x99^\x06\xec\x997`j\xe6\xc1\xc6`2\x1c\x93\xe8\x9e\x1e\xf1\x05\xb1\x0c85\xc5e\xc0$\xffZ\x82\x12\xde\xde.\x9d\xdf}8\xdd\x82\x94\x12\xb3[\xfakeKz\xfe\xfd,"S\xf0L\xd6D\xda\x1a\x14\x01E@\x11P\x04\x14\x01E\xc0#\x04\x94\x00\xf4\x08\xd8\x1c%k\xdb\xef\\\xe4\xc7H\x81\xcc\x1es\xbd\x08v\xa9\xef\x957\x9c$\xb5\xf5\xb0\xfd\x87\xd9p\r\x8a\x80"\xa0\x08\xe4\x1b\x81\xf0p\\\x1a[k\xe4U7\xae5EIy62\xcfwM5\xffl\x10\xb0\xdf\xac\xb3A\xd8,Y\xd7,\x83\xbd\x11\xe3\xc55\x9b4\xf4ZE`\x04\x01\x90r\xc3\xf0\x06|\xd2\xc6Yx\x8e*\r\xb9\xec\x95/\x10\x9bgh\xeb\x11\xc7\xc1\xd1\x14\xf86\x90\x7fU\xd0\xfc\x0b\xef\xea\x94\xa3\xdf| \x9d$Y\xf14\'n\xb3\xc8d\xcb;([\xde\x8c\xf8\x14"\x0b\xa3\xb6\xff\x00\x82\x06E@\x11P\x04\x14\x01E\xa0\xd8\x10\xf0\x8c,*6 \x8a\xb4\xbcV"|\x17\xca\xcf}\xcf\xccR\xd3\xae\x16\xedkU\x07}r\xce\xd5\x8bd\x10\x1e\xf1T\xcb\xa6H\x9f\x1a-\xb6"Pb\x08\xd0\xf9G?l\xbb]\xf2\xfa\x15\xd22\xbb\x16\xb5K\xc1\xc9\x83\xed\x1eK\xac\xb2Z\x9d\x8c\x11\xe07\x8b\xe1\xea\xf7\xad3^\\Ui)c\xe8\xf4\xc2q\x10\xb0\xde\x80\x17\xc2\x1b\xf0*\xc7\x1bp\x85c\xafo\x9c\xcb\xa7w\xc8\xd1\xd0\x0b=~@R\x11\x88v\xfe,,\xbb8\xcf\xbdoF\xad\x0co;"G\xber\xaf\xa4\xa2\xe0\xeb\x0c\xf9\x975\xfb\xc7\x99^\x8e\x15\xb6#\xfe\x1fDv\xacY\'\x82{4(\x02\x8a\x80"\xa0\x08(\x02\x8a@\x01 \xa0\x04`\x014\xc2\x14\x8b@i\x903\xb0\xcb\x11_\xea\xa4\xe1y{n~\xf9"i]T\'\xa1\xc1\x98\x0e\xb0\x1d\xd0u\xa3\x08(\x02\xf9E\xa0\x02=_t8)\x81\xdaJy\xc3\xdfo0\x85\xb1\xe4O~K\xa6\xb9\xe7\x0b\x01\xda\x87d\xb8\xe0/\x97\xc8\xc2\x95\r\x12\x1a\x88\xaa\xe7\xdf|5F\t\xe5\x9b2\xde\x80\x13\xb2\xf1\xf2\xb9\xa6V\tg\x89\xb9\xebUt(\xb6T2)\xc3\xbb:\xa42S;\x80$\x0e\x03\x95R\x05\x87\x1f\xfdw\xed\x94\xf6\x9b\xff\x9c.\xda\xd4\xc8?\x96\x82\x04 e\xcd\x0f!r\t0\xe5L%\x00\x01\x82\x06E@\x11P\x04\x14\x01E\xa0\x18\x11\xf0\x9c0*FP\x8a\xac\xcc\xd7\xa0\xbc\xad\x88\x14\xd0,g]9_\xd6_0\xc7\xd4V=\x02\x97x\xa3OP=.\xfd\xa5\xed\xbf\n\xfc\xbb\xe2\x86U \xffbY\x9a<\x9b a=\\\xf6\x08\x8cx\x03~\xe9\xc24\x16^Ra\xd6\x1b\xf0\xc3\x07\xa4\xb2\xd6\x0f\xdam\x12\xb3+\xd0\xfc\xab\xac\xaf\x91\xaa\xaa*\xe9\xfe\xe1\xe3\xd2\xfd3\xae\xd6E\x98\x1a\xf9\xc7;\x99!<\x90\xc87\x11\x7f\x8dh\'\x9e\xb1\xabA\x11P\x04\x14\x01E@\x11P\x04\x8a\x11\x01\xcf\x08\xa3b\x04\xa3\xc8\xcaL\xc2\x8f\x82\xd9u\x88\x14A=[\xefV\xe98\xfa8\xe7\x9a\x852gq\xbd\xd0\xde\x96z\xfe\x05\xe2\x1a\x14\x01E\xa0\xa0\x10\x80\xb2\x0c\xb4\x93\x13\xf2\x86\x7f\xdc $\xff\x8cC\x10]\n\\Pm\x94\x8b\xc2XN\xe6e\xb0W;\xff\xa4F\x19\xea\x85\xc6\xbaWK5sQ!\xcd\xa3p\x10\x80\xd4\x1cs\xbc\x01\xaf:s\xa6)\x17\x97\x06{\x12\x9c\x079\xbc\xb3S\x12\xbd\xc3"\xd5\x14\xf9\xc6\t\xd4B\x84MB\x1f\xb4\xfeb\x87\xfb\xe4\xe0\x97\xee\x96\x81?\xbdp\xec\xc2\xec\x1c~\xd8\xfb(c\x92\xf0\xdb\x82\xf8w\x88,\xcd$\x0c$\xae\xd0\xa0\x08(\x02\x8a\x80"\xa0\x08(\x02\x05\x8d\x80\x12\x80\x05\xdd<\x13\x16\x8eB\x19%\xceK\x10Ov\xf6=iKN\x1c\'\xe3i)\xf4\xe2\xd7-\x97\x18\xec\xc8p\x90\xadA\x11P\x04\x14\x81BC\x80$\xcfPoT\xe6.k\x90W\x7f\x88]#\x82c\x0f+\xfdC\xff\x96:\x02\xfcfQ\xdd\xaf\xb6\xc1/W\xbds\x8d\xf4u\xc2\xf1\x87z\xab/\xf5f\xcfi\xfd\x12\xb1\xa4T\xc1&\xdf\x99W\xa4\xb5\x00\xa7\xc6\xafePd\xa7\xefJ\xf4\x87%\xb2\xa7[\xaa\xea\xa0\x05\x98p\x040n(\x8c\xe1\x81\xf7\xc1\xd1G\x85\xbfRz~\xf5\xb4\x1c\xfe\xe2]\x12o\xe7J\xddi\x91\x92L\x9d2e?\xe2;\x10\x87\x10)w:\x94$\xf64(\x02\x8a\x80"\xa0\x08(\x02\x8a@Q"\xe0\tiT\x94H\x14W\xa1)\x841\xbe\xc5)6gj=\tv\xa9\xef\x8a\xd3f\xc8\xca\xd3[\xa5\xbf+\x82\xe5%\xd3\x12,=)\xa7&\xaa\x08(\x02\x8a\x00\x11 \xd9\xd3{$l\xcc\x15\xac\xd8\xd8j:J\xdb\x8f)B\xa5\x8d@\x9a\xfcK\xd7\xf1\xb5\x7f\xb7^\x82 \x01#\xd0X\xd7\xa0\x08\xb8\x8a\x00$\xe7\xf0p\xccx\x03f\xba\xb47j\x9e=W3q\x12s4\x98\x87\x9fm\x87\xd4\xc7\x19Y\x1c\xa7\xc6\x1f\xed\xfc\xb5\xd4IU0\x00m\xbf\xddr\xf8\xb3\x7f\x94\xbe\xff\xa5\x9f\x0e\x84\xd1/B\xfaH6\x7f\xad|IA\xef\xdd\x88\x0f#\xea\xd2\xdfl\x10\xd4k\x15\x01E@\x11P\x04\x14\x81\x02F@\t\xc0\x02n\x9c\t\x8a\xc66\xa3\x08\xb8\x1c\xf1rD\nk\x9e1r\xd6\xc0\xf5\xe5oZ\x01E\x9a\x14\x14+\x98\x9d\x06E@\x11P\x04\n\x17\x81D<\x89ez\t\xb9\xee\xb3\x1b\xcd\xd2\xcf\xf4\x00\xdd\xb3n\xb2p\x81(\xb3\x92\xd1\xf6\x1f\xbfP\xcb1au\xe1\xab\x97`\xc2*\xa4\x13Ve\xf6\x0c\xe4\xa2\xba\xb4\x03\x18\x82\xa6\xf1\xe2u\xcd\xb2\xfc\xd4\x19&K\xcf\x96\x98;2\xd7\xd0\xa3\xfb%\x85~\xadrf\x8d\xf8Z\xeb\x8c\xd07\xf8\xe7\xddr\xf0S\xff+]\xb7>!\xf1n,\x11\xe6QvsS\x97\xd3\xf8\xfa\xd8\xa5\xbf\x9f\xc0\xfe\x7f#*\xf9\x07\x104(\x02\x8a\x80"\xa0\x08(\x02\xa5\x82\x00?\xec\x1a\x8a\x0b\x01\x12\x80\x14\xd2\xde\x8c\xf8\x97\x88$\x03=i\xc7\nj\xfa!\xa7\xba\xe6\x80\xbc\xf5S\x1be\xb8?\x86\xact\x10\r\x104(\x02\x8a@\x01#@\xfb\x7f\x91PB\xe6,\xa9\x97\x86\x195\xb2\xe5\xee\xc3\x05\\Z-\x9a\x1b\x08P\xe9\xc9\xf2\x1e\xef\xff\xc6\xb9f\tp\x18\xcf\x00IA\r\x8a\x80\xdb\x08\xd04J\xb0\xc9/\xbdG\x87\xe5\xb9\x87:\xd2R\x99\xdb\x99\x8cJ/\x15KH\xf0\xd4\xb9\x92\x1c\x8cI\xdf\xef\x9e\x93\xee\x1fo\x91\xa1\xc7\x0eH2\xech\xb8NO\xeb\xcf\xe6D\xf2\x8f\x86\x06\xbf\x81\xf8aD+obW\x83"\xa0\x08(\x02\x8a\x80"\xa0\x08\x94\x02\x02\x9e\x10G\xa5\x00L\x01\xd7\x81\xe4\x1f\xdb\xedk\x88s\x9drz2\xc2\xa9\xa46\x05r\xbb\xfa\x9d\xabe\xedy\xb3e\x103\xde\xba\x94\xceA\\7\x8a\x80"P\xd0\x08\x90\x04\x1c\x1eH\xc8\xda\xb3g\xc9\xc1\x17\xfa\xe5\xd0\x8e~%\x83\n\xba\xc5\xa6W8\xe3\xf1\x19\xdf\xab+\xdf\xbeR\xce}\xd5\x12\xe9\xebPo\xf5\xd3CT\xef>!\x02$\xdc0\xfd\xda\xba\xa0N\xee\xf8\xc1\xae\x13^\xea\xd6\xc9\xd0\xe3\x07e\xe0\xee]\x12\xdd\xdb#)\xd8cNk\xfc\xb9"\xfeQ\xae\xe4d2\xc9\xbf\x9f \xde\x80\xc8c\x0cv\x9b\xfe\xa5\x7f\x15\x01E@\x11P\x04\x14\x01E\xa0\xa8\x11\xd0%\xc0\xc5\xd5|l/J{g nr\xf6=iC\x12}\\6G[2\x9b\xae\x98/\x91A\xce2\xab\x1c\x08\x104(\x02\x8a@\x91 \x90J%e\xa8?*\xd7}\xe6ti[\\gL\x18\xe8$F\x914^\x16\xc5d\x9b\xd2\xe3\xf3\xbc\x15\x8d\xf2\xca\xbf^+\xfd\xed\xc3\xaa\xab\x9e\x05~zi\xf6\x08TB\xf2\xa2}\xc9Y\x0b\x82\xb2pu\xb3I\xa0\n\xcf\xa1\x97!\t\xbb\x83&0\x1f\xab\xf1g\xd5^\xa7\x971\xd9DN,\xff\x0c\xf1:D\xfefP\xa1/\x8d\x83\xfeU\x04\x14\x01E@\x11P\x04J\x06\x01O\xc8\xa3\x92A\xa7\xf0*B\xe9\x92\x02\xd9\x1b\x9d\xa2Y!\xcd\xf5\x92Z1v\xd3e\xf3d\xd1\xaaf\xe3Y\x93vo4(\x02\x8a\x80"P,\x08\x18-\xc0\xa1\xb8\xf8|U\xf2\xbe\xaf\x9dc\x8am\xec\x01jWV,M8y9\xf1\xb12\x93U\xb8\xf2\xfa\xcfn\x92\n03\x91(>\x93\x1e\x931\x93\x17L\xaf(u\x04\x12\xf0\xc8\xeb\x877\xe0\xb3\xaeZh\xaaJ\x1f\x1d\x9e\x06\xa6\xcf\xc8\xc9Yw\x88?\xca\x93\x94#\xa9\xf9\xf7]\xc4\xd7#\x0e"2\x17\x9e\xd3\xa0\x08(\x02\x8a\x80"\xa0\x08(\x02%\x86\x80\x0e\x83\x8a\xa7A)\x90QPkA\xbc\xcc\xebb\'(`"\\\xf2\xa6e\x12\x1a\x88\xc1\xf9\x9c\xca\x82^c\xae\xe9+\x02\x8a\x80\xfb\x08\xd0ky\x7f\xd7\xb0,\\\xd9,\xef\xfb\xb7\xb3M\x06P\x0c\xd4\xe5\xc0\xeeC\x9d\xf3\x14\xad\x12\x143~\xe5\x8d\xebd\xc5\xc6\x99\xd2\xd7\x15\x86\xe3\x8f\x9c\x17E3,G\x04\xd0\x8fD\xe0lh\xf5\x19\xad\xa6\xf6Iz\xe7\xa5\xa4\xe6U\xa0\x18\xe6\x9e(\xc6%\xbf,-\xdf\x96\xcf"r\xd9/U\x0c9.\xe09\r\x8a\x80"\xa0\x08(\x02\x8a\x80"P\x82\x08(\x01X<\x8dJ!\x8d\xc2\xdaE\x88\xab\x10I\x06z2\xcc\xb1F\xd3\xdb\x16\xd7\xcb\xca\x8d\xb3dx0\x8a\x01\x95>*\xc0[\x83"\xa0\x08\x14!\x02\x95\xe8\xbf\xba\xdbCr&4u^\xf97\xebL\r\xe0\xd3\xbc\x08k\xa2E\x1e\x8d@\x85\xc3\xb6\xac9\xa7M^\xfe\x9e5\xd2\x8b6\xd6%\xde\xa3\x11\xd2}/\x11\xa8\xf2\xc1\x1bpOT\x96\x9e\xdc"\x0bV6\x99\xac8\xe1P\x04\x81\xf2#\x85\xba(\xe2\xdb\x11\xff\x01\xd1\x12\x82J\xfe\x01\x0c\r\x8a\x80"\xa0\x08(\x02\x8a@\xa9"\xa0\xacN\xf1\xb4,\x056\x8eX_\x85\xe8\xa9\x84Y\xe1<\x15\x97\xbc~\x99TUWJ,\xaa\xf2`\xf1<&ZRE@\x11\x18\x0f\x01:5\xea>4\x0c\x02p\x8dl\xbef\xd11M\x1aO{\xd3\xf1J\xa2\xc7\xdc@\x80\x13UI,\x83\x0c6\xfa\xe5]\xff|&\x1c\xbeD%\x1eSR\xd7\rl5\x8d\x0c\x11@\xdf\x11\x8fc\x19p\xd0\'\'\x9f?\xdb\xdcd\x97\xa3g\x98B\xae/\xe3\x0bb\'\x8f\x9f\xc7\xfe\x15\x88\xff\x89h\'\x93\xf5\x05\x02\x18\x1a\x14\x01E@\x11P\x04\x14\x81RF@\t\xc0\xe2h]\x0eQ)\x98\xb5!^\xed\x14\xd9\x93\xb63\x83*,c\xa9\xf4U\xc8\x86\x8b\xe7Jx0\x06\xb6QG\xc8\x0e\xe6\xbaQ\x04\x14\x81"F\x80K\xf4z\xe1\x1d\xf6\xed_\x08(\x01X\xf8mM\xe1\x8dB\xdcI\x88\x14\xde8\x93\xebI\xbbUT2i\xb8\x19\x9e\x1d\x94Ug\xb5\xc2\xf9\x07\xb4\xff8\xbd\xadA\x11P\x04\x14\x81\x12B\x80\x86\xfa\x87\x07\x12\xe2\xc3\xf6\xc3\xdf\xbb\xc0\x18\xf0WM\xc0\xc2o`\xa3\xa9\tjc\xc3\xc5s\xe4M\x1f\xdf(}GC\xf8:\xa6\xbf[\x85_z-a\xa9"\xc0\xbe#\t\xcd\xe25\x9b\x1d;\x80\xceDj\x9e\xeak5\xfe(\xbc1\xfe\x06\xf1\x1a\xc4\xeb\x10\x0f \xfa\x10\x19(WjP\x04\x14\x01E@\x11P\x04\x14\x812C@\xd9\x9d\xe2i\xf0\x8bP\xd4VD\nw\x9e\xb4\x9b]\xb6r\xc1k\x96\x88\xdf_\x05\xe7\x1f:9\x0c\xac5(\x02\x8a@\t"@2i\xc8\x99\xe4\xb8\xe9\xfb\xe7c\t_\x93j\x02\x16r;\xe3\x03E\xa2e\x11\x96Z\xbe\xfb_\xceB\xdb\xc1\xe9\x07\x88\x16]\xbe]\xc8\x8dV\x1ee\xa3\x1d\xc0\xc1\xbe\x08L\n\xb4\xc8\xac\x85AS\xe9\x1c\xda\xa3\x1c\xad\xed\xc7}\xab\xf1\xf70\xf6_\x8fH\xf2\x8f$ \xe5F\xc68\xa2\x06E@\x11P\x04\x14\x01E@\x11(S\x04\xf0_\xe7\x81\xf4\xab\x80\x83\xaa\xb8\xd8I\xab\xe2\xac\x95\x96\xbaT\x10\xe0B\x89X$%\x8d3\xaae\xed9i-\xc0\x8a\x8a\xb4<\xe5q\x1dm&\x96\xdc\xa3|h5\xfe\xce\xc2\xfe\x8f\x10)C\xda\x95$\xaa\xf5\x0704(\x02\x8a\x80"\xa0\x08(\x02\xe5\x8c\x80\x12\x80\x85\xdd\xfa\x96\xec[\x8ab^\x84\xc8\xdf\x9e\xb4\x19\x97\xc41,\x87Q\xfc\xa5\x98\xc5\x1e\xec\x8eH\x15f\xb55(\x02\x8a\x80"P\xca\x08P\x83\x8c$`\x95\xafJ>\xfa\xff.\x90S/I{\x07f\x9d\x95`\xca\x7f\xcb\xd32E2\x99\x92\xa6\xb6\x1a\xf9\x87[.\x96\xbaz\x9f\x0c\xf5D\xf1}J\x7f\xb3\xf2_B-\x81"\x80\xbe\x02\xf6\x92\xf9\\\x9e}\xd5B\x03G\xc2N\xddz\x0b\x0e_\x02\xc6\xbd\x88_C\xdc\x84x5\xe2h\x8d?\x9e\xcfMi\x90\x91\x06E@\x11P\x04\x14\x01E@\x11(l\x04\x94\xe1)\xec\xf6\xe1\xac-\xc3\xcb\x11k\x10=\x9b\xbdM8\xda\x7fg]\r#\xd6\x98S\xb6\xda\x80\xcc\\\x83"\xa0\x08(\x02\xa5\x8c\x005\xca\x86\x07\xa2\x12\x1dN\xc8\x8d\xffq\xb6\\\xf4\xdae\xa6\xbaP:S\xef\xb2ylx\xb6\x0b\xb8?\xa9k\x0e\xc8G\x7fx\xb14\xb6\xd6H\x7fWT*|\xe444(\x02\x85\x83\x00\xed%\xd3\xb9\xd0\xf2\r3%\xd8\xe8O\x17\xcc\xbb\xc7\xd4\xca\x82;\x91\xd1\x1b\x11OE\xfc\x1b\xc4\xc7\x10yn\xb4\xc6\x9f\xd5\x12\xc4a\r\x8a\x80"\xa0\x08(\x02\x8a\x80"P\xee\x08X\x82\xa9\xdcq(\xf4\xfa\x7f\x0c\x05\xa4\x13\x10\xce\xe2\xbaO\xdaRHuD\xc4\xeb?\x7f\xa6\xc4c\tI1\'\xef\x84W$\xaeA\x11P\x04\x14\x81\xc2A\x80dS<\x9a\x14z\xf4<\xfb\x9a\xc5\x12l\xf0\xc9S\xf7\x1d\x15\x92\x80\xaa\n\x98\xfbv\xaa\xa0\xcd?\x80?s~P\xfe\xf1\x96\x8b\xb0\xfc7(\xfd\x9da\xa9T\xf2/\xf7\x8d\xa19f\x84\x00\xb5\xfe\xea\x1b}\xd2u0${\xb6\xf5B\xab8m\xb72\xa3\x9b\xb3\xbb\x88$\x1fe\xc1\xc3\x88\x7f\x8b8\x84H\xd6\x91R\x9b\x95\xdc\xec~6[\xdc~\\\x1a\xfc\xadA\x11P\x04\x14\x01E@\x11P\x04J\x08\x01\xf7\xc9\xa4\x12\x02\'\xcfU\xb13\xb8\xcbQ\x0e.\xeb`\xf0\x84\xb0\xb5K\xa96^6O\x9af\x06$\x1a\x86\x14\xabOF\x1aq\xfd\xab\x08(\x02e\x83@\x05\x96\x95F\xe1\xcd\xb3\xfb\xd0\xa0\xbc\xec\xbaUr\x13\xec\x02\xd6\xd4\xc1i\xa6a\x01\xcb\x06\x86\xbcW\x94K\xafI\xfe\xcd^R/\x1f\xff\xc9%\xd2<\x1b\x9a\x7f$\xfft\xd9o\xde\xdbF\x0b01\x02\xa9D\x12s\x05\x15r\xf2\xf9s\xccEve\xc5\xc4wL\xf9\x8c\x95\x0f\xd7!\x85+\x10\xf9\x9b\xd3\xb6\x8c$\x07\xa7\x1a9\xdda#\xd3$\xa9H\xaf\xc1\xdc\xb7\xc4"v5(\x02\x8a\x80"\xa0\x08(\x02\x8a@\xb1"\xc0\x0f\xbb\x86\xc2D\xc0\n[g\xa3xm\x88\x14\xec(\x84\xb9\x1e\x8c\xb6\x1fR=\xf3\x8a\x85\x10\xf1\xb0\xe4\n\x9e\x15\xab\xfc6{\xd7\xb3\xd3\x04\x15\x01E@\x11(X\x04hsN\x92\x15\xd2\xb1\x7fPVnj\x95O\xfe\xf2R\xf9\xd6\x87\x1f\x91]Ov\x9b2SS0\xc5u\xa9\x1a\\G\xc0h\xfd\x81\x7f \xdf\xbaj\xd3,\xf9\xeb\xaf\x9d-\xfe`\x95\xf4wG\x95\xfcs\x1dmM\xd0m\x04\xd2\xde\x80\xa3\xb2l\xc3\x0c\xa9o\xf2\xc33p\xcc8\xac\xf1\xa8\xbf\xb0Z\x80\x17\xa3\x1e\xbfD\xa4|\xd8\x80Hs1\x01D\x92w\xd5\x88tK\xcc\xfd\xd1\x9d\x16{\xb9(b\xc49\xcem\xd8\x89\xdc\x0f!ZB\x11\xbb#a\xec\xd4\xb0%\x0bG.\xd0\x1dE@\x11P\x04\x14\x01E@\x11(l\x04\x94\x00,\xdc\xf6\xa1\xf0\xc5\xc0\xd9]\xcf\x02\xbd+\xd2\xc0zmc\x00\x83\xdd\x19\x12\xea\x87}%\xba\xb4\xd3\xa0\x08(\x02\x8a@\xb9"\x80.\xb0\x12\n/\xbd\x1dain\xad\x95\xbf\x87\xf3\x89[\xbf\xb0U~\xff\xdd\x1d\x86\xfc\xa3&\x9a\xdaIu\xf7\xe1\xb0Z\x7fLu\xf3+\x16\xcb\xf5\x9f\xd9$\xd1HB\x06z\xe1\xf0\xc3\xb0\xb2\xee\xe6\xa7\xa9)\x02n#@\xd1)\x1cJ\xc8\xdc\xe5\rr\x12\x08\xec\'\xee8\x04\x1b\xa2`\xd2H\xd5\xb9\x1f\xec\x84\xf0k\x914\x89?N\x14S\xf5\xb0\x05\xb1\x1e\x91\xc7j\x113\t$\xff8\xc3\xd1\x8b\xd8\x83x\x14\xf1\x10\xe2\x11\xc4\x83\x88\xcf#nG\xecB\x1c\x1b\xacv e\xd6\xd1$\xe3\xd8\xeb\xf4\xb7"\xa0\x08(\x02\x8a\x80"\xa0\x08\x14\x00\x02\xaa\xe6U\x00\x8d0N\x11\xd8.\x14\xa4\x9a\x10w!\xcet~\xbb\xde^\xb4Q\x93\x80\xc6\xdf\xe9\x97\xcf\x97\x0f|g\xb3\x1c\xde5d\xec\xd6 ?\r\x8a\x80"\xa0\x08\x94=\x02)8H\xaa\nTJ\x0b\xbc\xd0>\xfc\xdb\x03\xf2\xdd\x8f=&\x83\xbd1\x83\x8bj\x03\xba\xf3x\x8c\xc6\xf1\x15\xef[#\xd7\xbco\xad\x0c\x81\xf8\x8b\xc1\x1c\x05\x97ekP\x04\x8a\x05\x81$\xd8\xbe\xa6\xb6Zy\xe8\xf6}\xf2\xed\xbf{4\xdf\xc5\xceDC\x8f/\xd8d/\x19m\x0c\x92\x18$!\xc8J\xdd\x87\xf8\x04"I\xc2>D\x1b\xec\xecq&\xf9\xda{t\xab\x08(\x02\x8a\x80"\xa0\x08(\x029D`\xb2\x8f~\x0e\x8b\xa2Y\x8dB\x803\xaa\x9c3~9\xe2/F\x1d\xf7l\xf7\xbd\xffv\xb6\x9cv\xc9\\\xe9\xed\x84\xb6\x85\x9dW\xf6,7MX\x11P\x04\x14\x81\xe2A \x89\xde\xb8\x12*jM\xb3\x0224\x90\x90\xef\xff\xd3c\xf2\x08\xc8@\x06\x1eOr\xbe\x86C^\rSF \x10\xa8\x92\xf7\xfe\xfb9r\xfaes\xa5\xf3P\x08\x1a\x96\xc6"\xc5\x94\xd3\xd3\x1b\x15\x81|!\xe0\xf3W\x9ae\xec\x7fs\xcem\xb9(\x02{\x1ej\xdf\x8d&\xf2\xaclo\xb7\x93\x95\xc3\xf6^\xdc\x8e\x8e\xbc\x8f\x12\xa1%\xf6\xf8{t\xd8\x82\x1f\xf7:\xf1Nl\xd3v\x12\xd2W\xf0>\xa6\xe5\x8d\xfec:\x0f\xfd\xab\x08(\x02\x8a\x80"\xa0\x08(\x02Y"\xa0TO\x96\x80\xe5\xe8r\xb6\x0b\x85\xa6\x0f \x9e\x8eH\xe1n"\x01\x0c\xa7\xa6\x16\xb8\xe4\x8a\xc1\x07{\x7fo\xfd\xd4\xe9\x12\xa1\xf3\x0f5v\x9f\x06E\xff*\x02\x8a\x80"\xe0 `\xfaJ\xf4\x97\xa1\xfe\xb8\x04\xaa+\xe5\xdcW,\x92\xb9K\x9bd\xc7c\x9dX\xf2\x177WQ\x8bMC\xe6\x08\x18\xbc\x1c\xdaa\xd9)-\xf2\xfe\xef\x9c\'+N\x9b)\x9d\x07B\xc6\x91\x82\xfd>e\x9e\xa2^\xa9\x08\x14\x06\x024\xab\xd2\xd8\x12\x90\x1d\x8fwI\xc7\x81!c\x07\xd0\xc3\t\x02v<\x94\x0f\x19\xb9?:\xe2gFa\xf4=6-\xca\xa1\x8c<7\x9a\x14\xb4\xfb<\xce%\xc7g!\xbe\x06\xf1\r\x88tX\xc7\xe5\xc4\\J<\x88\xc8km\xb9\xb0\xabA\x11P\x04\x14\x01E@\x11P\x04\xf2\x8d\x80\x12\x80\xf9n\x81\x17\xe7O\xa1\x8a\xe4\x1fm\xb8\xfc#"\x05,+Da\xd7\xbdP\x89\xe5\xbf)\xe4t\xf65\x8b\xe5\xcc+\x17\xc8P\x1f\xec\xff\xe9\xa8\xcb=\x805%E@\x11()\x04h35\x1eM\x1a\xd2\x8f\x86\xfe/y\xc3r\x89\xc3N\xddN:\x08a/\x8d\xc0kt\x1e%\x8d\xc5\xb8\x7f\xf1\x853\xce>\x1c\x90\xae|\xfb*y\xd7\x97\xcf\x90\x9a\xa0_\xfa\xd4\xd3\xef\xb8\x90\xe9\xc1\xe2B \x11KJ]s\x8dD09\xb0\xe5\x9e#\xa5\xd0\'P.\x1d\x1b\xd9(\x94U\xed\x04u\x13\xf6OA|#\xe2\xb5\x88\x0b\x10iK\x90\xcb\x86\x9d\xde\xd1\x10\x8av\x1f\x875(\x02\x8a\x80"\xa0\x08(\x02\x8a@\xae\x11P\x020\xd7\x88O\x9e\x1f\xdb\x84\x02\xd2\x19\x88\x1fB\xb4\xb3\xa7\x14\xbe\\\r\xa9T:\xc9k\xde\xbdF\xe6\xafh2\x0e@h\xdc^\x83{\x08p\xe9`\n,+\xbd\x00\xa60\xe0\x9d4\x1a\x19\x9b\x03d\xf7\xca\xa0))\x02\x8a\x80{\x08\xa4\'I*$4\x90\xf6\xf0\xb9\xe9e\x0bd\xc3\x85s\xa5\xeb\xd0\x90\xb4\xef\x1b\x1a!\xff\x8c\xed:\x1d\xea\x1e\x07\xfch\xad\xbfY\x0b\xeb\xe4=\xffz\xb6\\\xf2\xa6\xe5\xd2\xdf\x15\x93\xc8PL=\xfd\x1e\x87\x96\xfe(^\x04R\xe6Y\xae\xae\xf7\xc9=\xb7\xbc t\x1a^\xa2\x93\xab\x94T(\xa3\xb2\xa7\x1b\x1dg\xe0\xf7\xb9\x88\xafG\xe4*\x16\xda\n\xdc\x8f\xc8k(\xe3\xf2>\xeekP\x04\x14\x01E@\x11P\x04\x14\x81\x1c#\xa0\x04`\x8e\x01\xcf ;+LqI\x05=\x00sv\xd5\xf5v\xa2g:*`\xd44\xf8\xe4/o<\x19\x92XJ\x12\xc8I\x89\xa7\x0cZh\x92Kh\x04\xb9\xf3\xff\xed\x94=\xdbh\x13?\x1dhf\x81\x9a@4\x07P\xaa\x81\x13L\xa6zN\x1d\xdb\xb0\xdc\xf7j\x98\x9a8\xf7UK`31n&F\xf8\xb9\xc3\x9c\x86\x06E\xa04\x11\xc0;^]\xe7\x93.L\xfe}\xec\xaa\xdf\x97f\x1d\xb3\xab\x15\xbd%Y\xa5\x83N\xec\x7f\t\xf1+\x88QD\xaer\xb1\x93\xdf\xd8\xd5\xa0\x08(\x02\x8a\x80"\xa0\x08(\x02^!\xa0\x04\xa0W\xc8N-]+\x04\xd1n\xca\x7fO-\x89\xec\xee\xfa\xd7?]%\xfe\x00\x96\xab\x0cCZ\xd5\xc1X\xc6\xe0\x19\x8d?\\\xdd8\xa3ZH\xda\x1dx\xbeO\x1e\xfa\xf5A\xf9\xd3\xcf_\x80\xb6\xdf\x8b\t?\xa3q9Y\xea\xd4\x0e\x1as\r5\n\x97CK\xf3\xbcW.\x91u\x9bg\t\x07\xd2\xf4::\xd0\x1d1\x04B%U\x90\xf4-\x1e\x83\x9a\xfeT\x04\xf2\x87\x00\xed~\x92\xfd\xe2\x84JSk-4~c\xf2\xecC\x9d\xf2\x9bo>+\xdb\x1f\xed:V0\xbb\xbc\x1f\xd7:<\xd9\xb1sE\xb8gL\x15\xe0\x8f\xa9\x8bS\xa1`\xa3_^\xfe\x9e5r\xc1\xab\x97b\x92\xc4\x87\xa5\x90\x11I\xc6\x93j\xeb\xaf\x08\xdbW\x8b\x9c=\x02\xfc<\xd75U\xcb?\x80\x00<\xbag\xd0\xd8\x01,e\xe2?\x03\x84(\xe20Zi\xf3a\xec\xff-\xe2\x03\xce1{\x1e?5(\x02\x8a\x80"\xa0\x08(\x02\x8a\x80\x17\x08(u\xe0\x05\xaaSO\x93\xb3\xa3\x9c%\xfd\x0e\xe2u\xce\xbe\x9d1\xc5Ow\x02m\xd3%@6\xad<\xbdUn\xfa\xfe\x05\xd2\x0f2ICf\x08\x98\xc1=\xe4W.\xf1\xadE|\x0e\x9a~\x7f\xfc\xe1Ny\xe4\xb7\x07\x8eK\xc08S\xc1\xdb\x95\xc2\x9cv6\x02?\x07\xd1\\6\xc7\x81C<~<\x1d\xe8\x03\x19\xb8\xf9\xe5\x8b\xe4\xdcW.\x96\xd5\xd0\x0c\x8c\x84\xe3\x12\x82\xe7f^g\x96\xd1\x1dW\x02\xfd\xa1\x08(\x02\xf9F \x81w\xd3\x0f;\xa0\xec/\xfc\xd5U\xb2\xe3\xb1Ny\xf0\xd7\xfb\xe4\x81_\xed7^\xd7m\xf98A\xc0w\x9e\xcb\x04\x8b\x8d\x0c4}\x16\xb4\x1a\x93\xa3\xfa\xab\x96\xb9\xb5r\xf9\x9bV\xc8\x85\xaf^"\xc1\xe6j3a\x11\x85\x06s\x15<\xcfkP\x04\xca\x05\x01\xdaUn\x9d[#?\xfb\xca6\xb9\xed\xe6\xe7\xa4\x12\xcf\xff\xe8\xf7\xa4\\p\x18\xa7\x9e\x14n8U\xc2I\xefA\xc4\x7fD\xfc*"\x83\x9d\x08O\xff\xd2\xbf\x8a\x80"\xa0\x08(\x02\x8a\x80"\xe0*\x02*\x8d\xbb\n\xe7\xb4\x12c[P(\xaaG\xbc\x1b\x91\x9e\xd3\xb8$\x82\xc2\x90\xab\xc1\n\xa1\xaf\xfb\xc8)\xf2\xd2\xebWI\xd7\xc1!]R\x9a\x01\xc2\\\xdeW]\x03\x9b}m\xd5\xb2\xfb\xc9\x1e\xf9\xf9W\x9f\x96-\xb0\xf5e\x83\xd1\xf23\x9c\x9dK\x83x\x92\x81L\x9c#l\x04kG\x8b\xfb\\\x1a|\xcd{W\xcb\xaa3fI\x02\x1a5i\x127M"\xf0\xbc\x06E@\x11(\x0c\x04H\xe8\xa50s@b\xbf\x1edX\r\xb4\xe2z`ra\xfb\xc3\x1dr\xc7\x7f\xef\x92\x1d\x8fw\x1b\xad8[\xda\x11ma7\xfb\x12\x9b\xb8K[\xd3%\x8d\xd3/-X\xd9$t\xf0\xb1\xfe\x92y\xd24\xa3Fz;\xc3\x12\x853\x04\xdaB\xd3\xe5\xbe.\x81\xaf\xc9\x14\r\x02\t\x98\x04i\x9eU+;\x1e\xed\x94/\xbc\xf5^Sn\xbe6\x9e\x93\xfci\x91\x01\xf9\x8d\xecL\x82\x99\xe9l\xd2\xd7\x8c\xda\x9d\xe4&7N\x93\x04\xc4\xd4\x87\t\xb7\xe2\xef\xbb\x10i/\x81\xc7xN\x83"\xa0\x08(\x02\x8a\x80"\xa0\x08\xb8\x8c@\xa6\xd2\x81\xcb\xd9jr\xe3 `g=I\xfcQR\xa4\xf74\x8ab.\xb7\x11\x93KKx\x7f\x7f\xcbE\xb2\xf4\xe4\x16\xe9\xeb\x80\x87:\xb5\xff\x07\\&\x0e\xd4\xcci\x9aUc\x06\xb3\xff\xf3\xf5m\xf2\xbf\xff\xb5s\xe4b\x12\xaa\xa9\x1ch\xeep\xe0@G\x02\xa35\x08N>\xb7M^\xf5\xb7\xeb`/\xb0\x15Z6Q\t\xc3F \xcb\xa3A\x11P\x04\n\x0f\x01z\x08O\xa5*\xa4\xb6\xae\n\xf6\xc1\xfcfB\xe1\xe8\xbeAy\xec\x0f\x07\xe5\xe9\xfb\x8e\xc8S\xf7\xd1I\xe6\xf1a\xaa\xda\xc4\xc7\xa72\xfd_\xec\x7fX\x16jA\x8f\x9e\x8c\xa0=\xd2\xb3\xfeb\xa1\x9c\x03\xed\xe4\x93\xcf\x9fm\xc8\xcc\xd0@L"\xa1\x84\xf1jN\xcdF\r\x8a@\xb9"\xc0\xe7?\x10\xf4\xc9\xc7\xae\xfe\x83t\x1e\x08\x15\x87\x16 \xde\xf3\n\x88\x89FR\xe4\x1fo\x19K\x93\x03raO\xf1\x04\xe2_!nE\xb421v5(\x02\x8a\x80"\xa0\x08(\x02\x8a\x80[\x08(S\xe0\x16\x92\xd3O\xc7\n;\xd7#\xa9\xffD\xe4R`\xcf\x96\xff\xd2\x96\xdc\xa7~u\x19\x06ii\x8f\xb4\x1c\xdcix1\x02\xb4\xf5\xe7\x039\xda\x0c\xad\xbf\xe7`\xc7\xeb?ozT:\x0e\x0c\x99\x0b\xd3\x1a\x7f.i\xfb\xbd8\xeb\t\x8f\x98\xb6\xa2\x91}\x90\x8e6\xd0\xc6\xd6+\xde\xb7\x1a\xde\x83\xeb\xa0]\x14\x86\xe0\x9e\xd68\xb2\xe7u\xab\x08(\x02\x85\x83@\xdaN \xdeQ\xfc\x0b\x04\xab\xa4\xb15=\xb9\xd0\x03\xfb\xa1\xbb\xb7v\xc9\x03p\x1e\xb2\xfd\x91N\t\xf5\xd3\xe9\xcf\xf1\xc1x\x13>\xf6\xea\x8f\x0c\xce\xdd\x1c\xa3\x9b>f\xd4G\x81NK\x1c:\xc0\x14\xa6\x02\x93\x0cKV7\x1b\x07R\xeb/\x9c+\xad\xf3\x83\x12\x8d$\xccR_\x92\x9c\xea\xb1\xfc\xf86\xd3_\xe5\x8b@"\x96\x94\xb9\xcb\x1b\xe4\xe6\xf7?\x0c\x1b\xc1{\xc4\x9a`\xf1\x12\x91\x8a\x00\xc4\xc9\xf4k\x08\x1a\xad\xd2\x10\xf1BR\xcf\x7fL\xa4L\xc5 b\xd2\xee0\'/\xa3\tl\xcdK>q\xb1F\xf5\x07\xa6/\x18\xdd\x07M|W6g\xec\x8a\x97\xc3\xb8\x89v\xb0\xefA\xb4rq6\xe9\xe8\xb5\x8a\x80"\xa0\x08(\x02\x8a\x80"p\x02\x04\x94\xf69\x0189>\xc5\xb6\xa0H\xf5]\xc4\xb7"Za\x08\xbb\xee\x05\xda`\xa2]\xaa\xcdW/\x92\xf7\xfd\xfbf9\xb4\xb3O\xb5\xff&\x80\x97\x82qu\xbdO\xea\x1a\x02\xf2\xab\x9b\x9f\x95\x9f\xc3\x8e\x0fC\xbe\x88\xbf\xf1\x8ai4r\x1c"\x90F\xf6_\xff\x91\rr\xde\xb5\x8b%\n\xa7.C\xbdQ\xd5\x06\x1c\x0f4=\xa6\x08\x14\x10\x02F\xa3\x0e\x83o:\xfc\xa9\x86\xa6\x90\xbf\x16\xda\x81p,\x14\x19\x8a\x1bO\xe2;\x1e\xef\x94]Ov\xcb\xee\xa7z\x0c\xc16a\xd1\xf1\x05a\x7f\x80\xb9\x01\x8e\xeb\r\x01`\xc6\xe8\x0e38\x1eA\x98\x1e\xd3\x83\x18\xe0\xd7\x07\xfa7\xbc\xd7\xd8\x1e57\x1e\x9fS\r<\x9a\xae;o\xb6\xac\xda\xd4*\xa7^\x14\x95T(&\xc9\x81\xb0\xc4{\x86\x11C\x92\xc06vtPb\x1d\x03\x92\xe8\x1f\xc7N4;\x0b\xa65^\xc7\xc2\xe4\xa7\x16\xec\xc47\x97\x01\xbf\x01\xf1\xb7\x88J\x02N\rK\xbdK\x11P\x04\x14\x01E@\x11\x18\x17\x01#\x06\x8c{F\x0f\xe6\x03\x81\x002}\x0eq)\xe2\x88\x98\xe6EA\xde\xf3\x95\xb3d\xe3e\xf3\xa4\x0f6\x9a*1C\xac\xe1x\x04\xb8\xe4\xb7\x016\xacb\x91\xb8|\x0bZ\x7f[\xeeD%\x01-\xce\xbaU\x04\x14\x01E@\x11P\x04\xa6\x81\x80]\x170\x8d$\xf4V\x17\x10\xe0l\'\x05\x9e\x8b\x11)\xaaQ\x1c\x9bLd\xc3%\xd9\x05\xab\xbdF\x87\x11\xc1F\x1f<\xc7\x8e\x99\xc5\xcd.\xb9\x92\xbc\x9a\x03\xee\x19s\xebd\xcf\xb6\x1e\xf9\x97\xeb\xee\x95\xc1\xde\x98Y\xf2k\xb4\xfe\n\x98\xfcccX\xf2\x8f\xedL\xed\x9co\xdf\xf4\xb0<\xfbP\xbb\xbc\xf1\x1f\xd7K\x00K\x90\x06A\x04\x1a\x87\x02%\xd9rZ)E\xa0\xf4\x10\xa0vv%\x87\xbd\x08\x11,\xeb\xe7{=Z\xcb\x86Z;\xf4,\xdc2\xb7V\x02 \x07\x03\xd5\x95\x1c\xff\x1b\xc2/\x0er0\x06\x0f\xbc1L\xf2\x90\xc4#q\xc7H\xaf\xbc1\xc6\xa3)\xf4iq\xa3\x11H\r@Fj\xfa\xc5c\xe9\xf34\xe5\xc74\xaa\xe8D\x04\xd18:R\x80\x15\x01E\xc0\x15\x04\xc8\x83\xf1\x9d\x9b\xbb\xacQ\x9e\xba\xe7\xa8t\x1d\xc2D\x1c\xde3+\x93\xb9\x92\xc9H"\xc8\x0c!\x01\xdb}\xf5g/\x92\x14\x96\xef\xbb\x1eL\xa7\x83| \x1f\xa5\xa2\x90\'@nV@\x9b\xb8n\xfd\x96\x07\x0f\x98\xe5\xc8\xa6\x9eS\x176-\t\xb8\x12\xe9PV\xbe\x0b\x91\xc7\xb8\xafA\x11P\x04\x14\x01E@\x11P\x04\xb2D@\t\xc0,\x01\xf3\xe0r\xb6\x01\xa7h/A|-"\x97<\xb8N\xcb\xd8\xd9\xe6e\xeb\x9b\xe5\xca\x1bVIoG\xc4h{ \xaf\xb2\x0e$Bi\x0f\x916\xb1\xbe\xf0\x96?\xc9@7\xbc"\x97\x10\xf9\xc7\xc6M;\xea\x84\xa4\x0eqy\xdb\xfd\xed\xd2\xdf\x11\x96\xd3_:\x1f\x82;l\x05A\xd3Q\xb5}\xca\xfa\x15\xd0\xca+\x02\x8a\x80"\xa0\x08x\x8d\x00\t0|\x83g\xcc\x0b\xca\x1d?\xd8\xe5un&}\xff\xacz\xa9^\xd1*\xa9a,\xc9\x9d:\x01\x97YYI\x06Rv\xc2dc\x12\xf9U5\xd5H\xc3\xb9K\xa5\xb2. \xc3\xcf\x1cu\xd2\xe0ES\n\xbc\x91\x84\xdf\x05\x88\xf7"\xeeF\xb4\x93\xe7\xd8\xd5\xa0\x08(\x02\x8a\x80"\xa0\x08(\x02\x99"\xe0:\xd1\x94i\xc6z\xdd\x08\x02$\xfc\x18\xceHo\xbc\x99\xd5$\xd1\xc5\xb0\xf2\xcc6\xa3\r\xe6\xf9\xf4\xb3S\x99B\xdep\xf9Mu\r\x8c\xe0\xc3\x8e\xcdW\xdeq\xbf\xb4\xef\x1b0dX\xb1/\xfb\x1d\x0f\xf3\xd1\xda\x8cw\xde\xf2\x82|\xf5]\x7f6^\x81I~R;P\x83"\xa0\x08(\x02\x8a\x80"\xa0\x08x\x83\x00m\xfeE`ks\xd6\xfc:\x99\x83\xa5\xc0\x0c\x9ei\xe0C\xeb\x9f!\xb4\xf5\x10\xcc\x02\x80\'KM\x99x3\xe9d\xf5\x87\xa3\n\x10\x81\xd4\x06\x8c\xf7\x0eK\xe3\xc5\xcbe\xdeG/\x15_k\x10\'\xa6,k\xd8\n\x90\xf4\xfb:b\x03"\'\xce\xedq\xecjP\x04\x14\x01E@\x11P\x04\x14\x81L\x10P\x020\x13\x94\xbc\xbd\x86\x12\x11\x85\x98\xcdN6\xde\xb4\x89#w\x9dr\xee\x1cc\xec\x9d\xc6\xe1\xcb=P+\xb2\xa1\xb5Z\xbe\xf3\xd1Gd\xe7\x13\xddf\x82|4QV\x8a\xf8\x18%\x00\xf7\xc6\xbb$:\x1c\x87#\x94j\xd5\x04\xcc\x08=\xbdH\x11P\x04\x14\x01E@\x11\xc8\x0e\x01\xae\xbc\x08\xf5\xc6d\xe9\xba\x16\x991;-\xf2\xd1\xe6\xb0\'\xc1Y\x06\x1c~\xf6\x08\xe6\xfc\xc0\xb3\xd7\xb8\xb6u\xec>\x0f=q\x08\xebp\xf1\xb5\xcf\xb7\x9e\x1c\x96\x1d\xa4bqI\x0cF\xa4\xf5\xad\x9b\xa4\xf6\x94\xf42\xe8\xf4TdV\xb5fM(\xbe\xbc\x02\xf1"g\xdf\xca\xd2\xf8\xa9A\x11P\x04\x14\x01E@\x11P\x04N\x84\x80~4O\x84\x8e\xf7\xe7,\xedt\xaa\x93\x95\'\xcc\\*\x9eN}\xf1\xbafh\xb9!KOr\xf1\x1e,Wr\xa0\xcd\xbbF\xbf|\xf7\x9f\x1e\x97\xbevx\xfc\x85PZ\xce\xf6\xefH\x88V\x00\x83C\xbb\x06\xe5\x8bo\xb9Wb\xe1\x8444\xf9%\xe5\x0c\x1e\\\xc1\\\x13Q\x04\x14\x01E@\x11P\x04\x14\x01c~c\xb8?&\x9b.\x9fo\xd0\xf0\xda\t\x17\x9dqD\x0e`\x190\x1c\x9e\xe5]\xf63$`BR\xd0\x06l{\xdb\x99\x12\x98K_\x1e\x90Iq<\xcb@)\x967\xdd\x84\x88\x8aiP\x04\x14\x01E@\x11P\x04\x14\x81L\x11P\x020S\xa4\xdc\xbf\x8e\xd8\xd3\x96\t\xd7\x81,Ad\xc8Z\nJ\xdf6\xf1_jx\xa5\xf0\x8fK\x7f\xe7.n\x90\xe1\xc18\xbc\xbfN|})\x9f\xe1\xd2\xe7\x19sk\xe4\x9e[\xf7\xc8\xa3\xbf;`\xaa\x9a,\xa7u\xbf\x134.Ia>\'\x07w\xf4\xcb\x17\xff\xea><-\x95R\xdd\x10P\x12p\x02\xbc\xf4\xb0"\xa0\x08(\x02\x8a\x80"0\x15\x04*\xb1\x0c\x98r\xd8\xda\xcd\xd3r\x88\x91Y\xd6\x8eD\x19z\xf2\xa0T\x06\x03\xe0\xda\n`\xf6\x97$ L\x8ep\xf6\xbb\xf5\x86\xb3\xa5\xc2\x07Q\xd8\xd8$\xc9J\xfc\xa5\xfc\xcc\xca\\\x8cx\xae\xb3_\xa6\x92-j\xafA\x11P\x04\x14\x01E@\x11\xc8\x02\x01%\x00\xb3\x00\xcb\xe5K\xad\xb4\xb3\x14\xe922\xd8c\xe9_.\xfc\xb5\xcbK\xe6\x80\xfc\x9b\xbd\xb4^"Cqh\xbd\x95_\xb3S\xcb\xaf\x16\x9a\x7f\xdd\x87\x86\xe5\x96\xcfo1\xc8Z\xdb\x88.\xc0\xecJ\x12\xd4\xc4\xab\xc4\x1a\xa1\xb1\x91\xc7\xbd\x0eF\x13\x10\x8f\xc5\xbeg{\xe5k\xef\xbe_\x02\xd5\x15R\x1d\xf4\x95\x95]D\xaf1\xd6\xf4\x15\x01E@\x11P\x04\x14\x81x,)\xc1\x06\xbf\x9cr>\xfd\xbfA\xf0\xc3\x04\x9c\'\xc1Iw\xf8\xf9\x0e,\x03\xc6|s\xa1x\x7f\xa3M@,\x05\xf6\xcfn\x90\x99o\xa4\tl\x84\xec&c\t\x189Dx7\x91w"2\x14\x00\xbb\x99.\x88\xfeU\x04\x14\x01E@\x11P\x04\n\x19\x81\xf2c\x82\n\xa75\xac\xc4\xb7\x04E\x9a\x89H\xe1\xc5\xf5\xf6\xb0\x99,Z\xdd$\xb5\xc1*I\xc4\x91\x8d=\x88\x0c\xcb%P\x0e\xaeo\xae\x96\x1f\x7fi\xab\x841\xfb\xce\xa5\xbf$\xbd\n!\x90\xf0\xf3\xfb\xb1\xec\x16\x02p2\x99|Q\xe4\xf1\xaa\xaa*s\x8d\x97d\xa0U\x0e\xd8\xf6`\xbb|\xf3\x83\x0f\x1b[\x89>?q*\x04\x94\xb4\x0c\x8a\x80"\xa0\x08(\x02\x8a@\xf1#\x90\x00\x01HM\xc0\xd3.\x9dg*\xe3\xd9\x1c\x9f#\xe3\xc4\x0e\xf4J\xe4\xe0@z\x19p\xa1\xd8\x80\x86P\x96\xe8\rI\xddY\x8b%\xb8>\x8d\x03\x04\xb3l\x1a\xd7j\xfc]\x8b\x9bNB\xa4@\xe7\xba\x0c\x9dM\x81\xf4ZE@\x11P\x04\x14\x01E\xa0\x18\x10\xd0\x8fe\xfeZ\xc9\xb2O\xeb\x9c"xB\xb3X\x87\x0e\xcbN\x9d)\xc3!\xcc\x00g%_\xe5\x0f\x1c7s\xa6\x8d\x9d\xa6\xb6Zy\xf4\xf7\x07\xe4\xc1\xdb\xf7\x9b\xa4\x0ba\xe9/\xc9Y\xd5\x01\xb2Xr8\x86\xa5\xc0u\xd2x)\x95\xf8\xb2\x0e\x8e\xb4"\x7f\x81;\xe9Q\x84r\xb5\xb7@f]D\xbdA\x11P\x04\x14\x01E@\x11(,\x04\x94\x00\xcco{P\xb7\xea\x14\xaf\x8a`\'R\xe9\xf4c\xde\xf2F\x89F\xb0\xec\xa4\xccZ\x9c\x13\xca\xcd3k\xe5\x0f\xdf\xdd%\x9d\x87B\xc6\xd6N\xbe\xbd\xfeZ\xad?\xb6\xfb\xcd7\xdf,\xcf?\xff\xbc|\xe8C\x1f\x92\xf5\xeb\xd7\x8f<\n\xd4\xf8\xb3a\xed\xda\xb5r\xc3\r7\xc8\xad\xb7\xde*\xc3\xc3\xc3\xf2\xd5\xaf~UZZZ\x8c\xe6\xa0]\x1el\xafukk\x9f\x9d[\xbf\xb0E\xee\xfe\xf1n\x995\xbf^\xa8\xa5\xa0A\x11P\x04\x14\x01E`\x0c\x02\xec\x1a\x9d\x889\x1dL\x98\x8c\x89\xd4tB\x84\xb2wN"\xf3\x1a\x89c\xcab\xcb9\xb2\x1dS\x15\xfd\x99\x1b\x04\x920\xc7\x12\xf0W\xca\xc9\xe7\xb6\x99\x0c\xf9lx\x12\xf80"\x84\x9e:,\xa9X\x1c\x8bd\x0bL\xa5\x9fK\x81\xfb\xa3\xd2t\xf1*\xa9\xf0\xa3l,o\xe6\x14\x1e%ZV\x90\x13\xe9g8\xfbe&\xe5\xa2\xd6\x1a\x14\x01E@\x11P\x04\x14\x81,\x10(0I \x8b\x92\x17\xf7\xa5V\xbc\x99\x81j|\x12\x91K\x18\xec1\xd7jf\xb5\xc3\x96\xaf\x9f!\x17\xbcz\x89D\xe1y\xad\x9c\x02\x05\xea\x9az\x9f\xf4u\x86\xe5\xeb\xef{\xd0h\xb1a\xd1m^!`\x9b\x90\xb4\x9b3g\x8el\xdf\xbe].\xbe\xf8bS\x1e.\x01\xe6q\x9eg\xa4v\x1f\x03\x8f\x91\x0c\x8c\xc7\xe3\xc6\x0e\xa0\xcf\xe7\x93\xb3\xce:Kn\xba\xe9&ihh\x90\xdf\xff\xfe\xf7\xe6\x1a^k\xdb\x9b\xfbn\x04K\x02>\xf1\xc7C\xb2\xea\x8cVY\xb0\xb21\xedE\xda\x9ep#\x13MC\x11P\x04\x14\x81\\!\x00\xaa\x80\x93B\xe4\x18R`\xc8h\x07\x96\xe6 \xb8Ma\x82\xc3ly\xcc\x89\tnaB\x82\x93\x1fIhO%1/\xc3>\x99\x91\t\x99\x7f)\xf4\xd9\xec\xae\xf9iA\x84\xb9V3\xd1FMsjzq[\x85\xe5\x8d\x95\x88>\x1b\x03\xd8\x87}U\x1f\x08\xa0i\xc7\x00\xd2\x80\'\xd5tz\xc8\x0b\x1a^\xcc\x8b\xb1\x82\xfb,\x07\xca\x87\x8d\xd9\xa6,=\xe2\x94\xd7X\x1fFu\x12\xf8`\x12\x03\xaf5\xd1r\xd5\xd4\x05\x9f\x0f\xbf\xa3x\x8e\xea[k\xe5^L\xb2\x19\x1a\xcb\xcbB\xe3y\xad]\xd9&\xbe\xd6:IE!\x1c\xb1\xfd\x0b%\xc0&bUK\r\x9e?\x91\xc8\x0e8,\xe1\xc3\x8ag2\x83\xc0Zp\xb6\x94c\x99\x03\x88w"\xf2Xfw\xe3B\r\x8a\x80"\xa0\x08(\x02\x8a@\xb9!\xe0+\xb7\n\x17H}\xad\x80\xb2\x1a\xe5\tzU&j\xfe\xa5\xc0\xf9-\xdb0S*1\xd0H`\x00c\x89%\xaf\xf2,\xa8t!\\7\xce\xa8\x96\x9f|\xf1)\xa3-GO{\xf9t\xfca\xc9\xbf\xb6\xb66\xd9\xb9s\xa7\xd4\xd5\xd5\xa5\xcb\x85\x81\x00\x9d\x80\x8c\x17x\x0fI?\x063\xe8t\xb6l\xc7\x0f~\xf0\x83\xf2\xf6\xb7\xbf]\xde\xf8\xc67\xca\xed\xb7\xdfn\xce\xf38\x97\x08\xbb\x118\xc6\xb5\x98}\xfd\xaf\x1f\x94O\xfc\xf2Rih\x0e\xc8@o\xd4\x0c2\xdd\xc8C\xd3P\x04\x14\x01E`B\x04\xd0\x07\x99\x91\xbc\xdd\x92\xad2\x07&\xbc#}\x82_\xd81\x81}#\x95\x9f|\xdc\x820\xc3&M\xd0\xe1\x98!\xca\xd0\xd7\x92\x93a\x9f\x97\x8e$\xccp\x80\xd7\x81S\xe0\xbe!\x0bI\x06Z\x82\x10\xfb$\x02ig\x96\xc5\xaa\xc0\x1f\xda\xdde\xdfi\x88B\x9cc\x9a\xe6\x98Stk\x97\x97\xe7\xdd\xd2\xaafyY>\x96\xc2\x10~ \xfe\xa8\x01H2\x90\xf9\xa3Bib\x0f\xe5\x02\'i\xea\xcb2\xda\xf3(\xa6\xf8\xab\xd3N\xc2\xfa:#i\x96\x94\xf7i\xf0\x0c\x01>\x7f\x11L\xca.\\\xd5(M\xad\xd5\x98\xa8\x8c\x98\xb6b\xbb\xb8\x1e\xf8\x10 \xe1\xd0\x96CR\xb3n\x8e\xf1\xc0k\x1el\xd73\x9ab\x82(\x1e\x97\x02\xd7\x9f\xb9@\xfa\xff\xf0\x1c4\x15\xf1\xf0:e\xce E i\xc2U\xf8\xfbO\x88\xc7\x96O\xa4\x8f\xeb_E@\x11P\x04\x14\x01E@\x11\x18\x85\x80\x12\x80\xa3\xc0\xc8\xe1\xae\x15\xad\xe9\x00\x84\xc2\x0bE>{\xcc\xbdb8\x82\xe4\xe2\xb5Mi\xaf\xb7\x14\x8b\xac\xa8\xe4^.\x05\x99\x12\xc9\xce\x06\xcc(\xef\xda\xd2c\x96\xb0\x9aBz!XgX{K\xfe\xf1rj\xed\x91\xfc\xa3\xd6\xdfD\xc4\xdfx\xc9Z\r?\x9b\x165\x03\x1b\x1b\x1b\xe5\xb6\xdbn\x93o~\xf3\x9b\xf2\xaew\xbd\xcb\x90\x7f\xf4\x18\x87\xc8\'\xd7\x03 \x91\xaa\x06E@\x11P\x04\x14\x01E\xa0\xc8\x11P\x020?\rh\xc5j\n,\x0c\x1c1@Rw/Pp\xb7\xda\x05\xb3\x16\xd5\x1b\xc2\xa6\\\xc8?\xa2X\x89\x11a\r\x9c\x7f\xdc~\xf3\xb3\x06T\xa3\xbdA5\x87<\x05K\xdaQko\xc3\x86\r\x86\xa0\xcb\x86\xfc\x1b[l\xa6G\xcd@j\xfbQ\xb3\xe5\x9d\xef|\xa7\x9cr\xca)r\xee\xb9\xe7\x9a\xb4\xdd$\x01\xf9\x1cq\x80}\xe0\xf9>\xf9\xaf\x8f>&\xef\xfa\xeaY\xd2{$l4\\\xc6\x96K\x7f+\x02\x8a@\x19!\x80.\x95\xbdjZk\t\x9f\xb1\x89\xbaX\xfb\xc5s4\xe9\x02 \xa3\xd8\x7fUq\t,\xb5\xf1\xcc\xd2Xl\xb1,\x96i\xc4\r\xb9F\xef\xe8 \xd9H\xc4\x19\x92-M\xce\x914\x8b\xe2xx0!\x03\xdda\x19\xec\x89\xcaP_TB\x831\x98(\x88\xc1\xe1\x13\x08>\xfc&\xb17\xcc}\xd8\x17\xe3\x96\xf7QS\x8f\xfdY\x02D^\xa9\x85a\x17*\xf4\xc8\xef\x0e\xca\xd6{\x8f\xc8;\xff\xe5LC\x84R\xe3Q\x83w\x08\xd0)\x07\xc9Y\xda\x01$\x01\xc8%\xe6\x9e\x04G\xf6\x89\x1d\xea\x97\xc8\xfe>\xf1\xcf\x81M\xdf!hz\x16\x12\x11\x08\xf5\xd9\xc4pT\xea\xcf^\x92&\x00\xf1\x9ef\x11x1e\xe8\x0b\x10I\x00:\x94\'\xf64(\x02\x8a\x80"\xa0\x08(\x02\x8a\xc0q\x08(\x01x\x1c\x1c9\xfba%\x1b\xeb\xf6\xcc\xfev\xaf\x00d\x00!\xbc\x07\x1b\x022sv\xd0h;T\x90\xc5)\x83@R\xac\xbe\xa9Z\xf6>\xd3+\x8f\xfe\x1e3\xc9\x08\xf9v\xfca\x97\xe5~\xfc\xe3\x1f7\xe5!\x81\xe7F \xf9\xc7\xc0\xf47o\xde,\xbbw\xef\x96u\xeb\xd6\x19\xef\xc1n.\x07\xb6\x03\xfb\x07\x7f\xbd_\x16\x9f\xdc"\x7f\xf1\x8eU\xd2\xbe\x7fH\x97\x02\xbb\xd1\x88\x9a\x86"P\xc0\x08Pk\x8c\xebI\xcdG\n\xfb\xe67\x0eA\x19\x0f\x1ay\x0e\x81\x07\xcd\xa5*j\xe7Y\xbbs \xfa\x8cV\x1e\xd8\rN\xbe0\x18\r>\xf4{a,\xf5\x1b\xe8\x8aHO\xef\xb0!\xef\xfa{"2\x04\xb3\x02C} \xf0\x06"\xc6\xce(\xf7\xe9\xb9=4@R\x0f$\x1e\xb6a\x87\xdc3\x89y\xf8g\xa4k\xc6\x8e)\xb9\xf3\xd9LW\x83?\x08\x08\xfeN\xf4\xd5N\x9f6\xd7\xd8?\x13]j\xfbU{\xdd\xb4\xb6\xe3|R\xc69\x94\xa6F&\xc8\x88\xf6\x0e\x1f\xc37\xf3\x8f\xdf\xdf)W\xbe}\xa5q\x9cE\rL\r\xde P\x01l\x87\x06\xa2\xb2hm\xb3Tc\xc22\x12J\x18N\xce\xbec\xae\xe5\xca\x07\x90\x0f0\x1e\xda\xe8\xden\xa9^\x0c\'b\x83 \x00\x0b)@\x96\xe12\xe0\xea\xe50YS\xed\x97d$\x96M\xe9H\x9dr<\xb3\x19\xf1[\x88\xe3>\xfa8\xaeA\x11P\x04\x14\x01E@\x11({\x04\x94\x00\xcc\xfd#@\xc1\x84\xc2J\x13\xe2<\'{\xd7\x85\x15\x0e\xbeh\x03\xa8yv\xb5\xb4\xcc\xab\x91~\xd8\x97q\xc6aN\x96%\xbc\xc1z\xa6`\xa3_n\xfb\x06\'\x82!\xf7\xa2\xe2\xf9$\x00-\x11w\xd1E\x17\x99%\xbb\xe92\xb9;\xa8\xb2y,Y\xb2D\x9ex\xe2\tY\xb5j\x95!\x05\xedq\x03\xc44\xfeP\x11\x84\x03cno\xfd\xc2VY\xb6\xbeEV\x9c6Sz;\xc2#\x03\xfci$\xaf\xb7*\x02\x8a@.\x11\xc0{\x1e\xab\xc1\xc7/\x0c\xb4\xa0\xb9\x1c\xb7&\x88%\xba\x81\x00<\xbcB\x93\x0f\xda{U\xd0\xde\xa3-<.\xab%a\x17\xea\xe76*}\xb0\xa3wt\xf7\x90t\x1d\x1e\x92\xeeC!\xe9:4\x8c\x18\x92\x01,\xcf\xa5\xc3\x9fL\xfbPC\x14\x9d\x88-\x1a\xf9\xda\x8d\xec\x98\x0f`\xba.8\x06\x06\xca\x92P\xc7UV\x7f\xe4\x06\x01\xa7Y\xe6.\xaf\x93Zh\xd1\x93\xf4\xa5\x9dF\r\xde!\xc0e\xc0\xfc\x9en\xbcd\x9e\xfc\xec\xcbO{$\x11\x1e+?\xbf\xd5\xe1]=R\xb3z\x96$\x07\xc2\x9c\xd5;v2\xdf{\xe8\xbb\x92\xe8oh\xa3\xd0\x04v\x06\xa6?\x9b\xb4`\xf6*N\xac[\x02p\xd2\x9b\xf4\x02E@\x11P\x04\x14\x01E\xa0\x1c\x11P\x020\xf7\xadNA\x85\x81\x82\n\xf7\xa96\xe1z;\x98\x81!\x12^\xb0\xa6\xc9\x0c\xe0*\\u1\x82\x84\x0b2$1\xe0\xf5K\xfb\xde!\xb9\xef\xe7{L\t3\x1d\xb8zU\x1dj\xb5X\x8f\xbcs\xe6\xcc1\xd9x\xad-G\xad\r\x86\x8f}\xecc\xf2\xd3\x9f\xfeT\xb6n\xdd\n\x19\x9f\x1e ]\x1aZ\xe3\xe1\xe2\x83\xfb\xdc\xc3\x1d\xf2\xcb\x7f\xdf&\xd7\xbe\xffd\xe980\xa4K\x81\r\xea\xfaG\x11p\x1f\x01\xbe\xba\xf40k\x082lh\x7f\xcf8\xd0\xa0\x13\r\xbf\xdf\x90}\xd4\xce\xe5\x84\x07\xfb\x17zy\r\x83\xe4\xebi\x1f\x96\x9e\x8eA\xe9:8(\x9d\x07\x86\xcd2\xdc\xa1\xee\xa8t\x1f\xc1q\x9c\xebE\xb4^k3*5^|\xa3%\x88\xad]Bl\xf8GC\x1ca\xc9,\xb7\xf6\xe3\x93Q\x82zQ\xa1 @\xde\xd6~/\xafy\xf7\x1a\t\xf5\xc6\xb0\xd4\xbbPJW\xba\xe5\xe0\xe7:\no\xd4\xb3\x17\xd7\xc9\xac\xf9A\xe98\x182\xef\xb0\'\x93j\x8e\xd6\xdf\xd0\x96\x03\x12\xdc8O\x92\xfd \x00\x0b)PN\x81\xed?\xdf\xccz\xf1\xcd\xa8\x93x\xf7PZ\xfdt\xf2>\x85"\x89\x95\xa5=3\xadSHPiY\x14\x01E@\x11P\x04\x14\x81\xa9"\xe0:\xf14\xd5\x82\x94\xd1}\x96\x85Y\x91\x8b:/Z\xd5\x0c\xe1\x92Y\x16\xd0,\xafG\x15O\xc4+\xa4af\x8d\xdc\xf6\xcd\xb4\xed?\x0e\x84=\x11\xa2\xb3(\xbf-C0\x18\x94\xb6\xb66s\xa7%\xe8\xb2H&\xebK\xed2\xe3[n\xb9\xc58\x05!\xf9g\xcb\x92ub\xe3\xdd@q\x1b\x83\xfd\xff\xf9\xfa\xb3\xb2\xfa\xccY\xb2\xea\x8cV\xe9>\nm\x11\x0e04(\x02\x8a@V\x08\x90D\x83\x7fZ\xf3N\x8d\xdch^%:\xd7\xa0&\x9f\xcf\xd8\xe2\x0b\xd4\xfa\xc4\xefh\xf1\x85\x06\xe2\xc6Q\x06\xbd\xe0\xf6wG\xa0\xc17 \x87_\x18\x90\xf6}Cr\x14\xb1c\xff \xec\xf3aL\xechu\x8d\xa4;\xce\x0e\x97\xdd\x8d\x1b\x1cb\xcf\x9e\xe38\x9c\x8e"\xecG\xcc\x1e\xd7m\xf1#`\xbf\x0f\xe7\xff\xe5RY~Z\xabt\x92\x88r&\x93\x8a\xbfv\x85]\x03z\xa5\xae\x04\x99\x7f\xea\xa5s\xe5\x0f\xdf\xdf%\x9c\xb0MM}E\xfd\xa4\x95\x8d\xbd\xd0%I\xf6\r0\x05\x90I\xff0i\x82n^\x00\x0f\xdf\xbeV\x12\x80\xb5i\x020\xfb\xb4\x978\xb7h7\x95=vz\x87"\xa0\x08(\x02\x8a@\x19 \xa0\x04`\xee\x1b\xd9\n%\xd6\x03\xb0\xeb\xcc\x1cg\xf29P\xe3\x12\xb0\xe6\xb6\x1ah\x82\xa4=\xcb\xe5\xbe\xaa9\xcc\x11\xea(\\\xfa\xdb\x07\x1bU\xf7\xffb\x9f\xc9\xd8\xe2\x90\xc3R\xbc(+\xaby\xd7\xd4\xd44\xe2\x00$\x17\xa4$m\x0c2\x9f\xb5k\xd7\xcaUW]%\xb7\xdf~;\x88\x84*\x18xwgT\xc1\xe7\xcb\x0e\x18\xff\xe3\xc6\x87\xe43\xbf\xb9\\j\xeb}\x12\x19J`\xd0\xf8"\x18\xf4\x80"\xa0\x088\x08\x1c\xa7\xcd\x87\xf7\xc8\xd8\xe3\xa3&_u\xda\xd1\x86\xd1\xb0\xa3&\x1fH9\x1f\xb6$\xf1\xa8a\xdb\xb9?$\xed\xd8v\x1c\x18\x80F\x1f\x96\xe8\x82\xa0\xe9:\x1c\x82\x1d\xbe\xcc\xbcy\xa65\x04Q\x08\x92x\xdc\x98?i\xad\xbd\x94U\xe7\xd3V*K\x04\xf8\xac\xd1\xbcC%$\xc2\x97\xbfw\x8d\x0c\xc2+3\'\x8d\xd4\x03pn\x1e\x87\x14\xad\xb4@n[\xb3y\xb6!\x00I\xb2{\x12\x1c\xd30\xd1\xf6!\x89\x1d\xe8\x91\xc0\x82&I\xf4\xa3\xff(0\x87 \xec\x8f\xfcm\xf5\x12\xde\xd9\x99\r\x0cv\x16c\x91s\x93G fS$\xbdV\x11P\x04\x14\x01E@\x11(<\x04\x94\x00\xccO\x9b\x90"\xb1\x04\xa0\x07%\xa0\x1c\x94\x82g\xb9zC\xd2$\xcdH\xcf\x83l\n(I\x1a\xcenn\t\xc8\xfd?\xdf\x8b\x01q8]\xef\x02\x1a\xd4\xd6\xd4\xd4\x8c\xa0\x95\x0b\r@f\xc6\xa5\xc7$\x02?\xf1\x89O\x18\x02\xd0-\xf2\xcfV\x84\x04c%XV\xda\t\xfb\xceG\x1f\x95\x0f|\xfb|\x18\x8e\x1fN\xb3\xcf\xf6"\xdd*\x02e\x88\xc0D\x1a}\xb4QJ\xaf\xba5\xc1\x80TC\x9b\xcf\x07\xdb|ax\x01\r\xf5\xc5d\xb0\'\x8c\x18\x93C\xd0\xe2;\xb4\xb3_\x0e\xefF\xdc1 \xddp\xba\xc1%\x82\'\n\xe3j\xf0\x99\xe1oz\x0c\xcc\xbf$xH>jP\x04\xc6"`\t\xe0W\xfe\xf5\xc92ka\xd0\x90\xcd$\xa65\xe4\x06\x81\n\x10\xfd\xec\x03\x16\xafi\x91\xba\xc6\x80\x0c\xf5\xc3\xb1\x16HY\xdb.\xae\x96\x82\xda\xbe\xe8\x0b"{\xba\xa5z\xc9L$\x9d\xd9\x04\x82\xabe\x98$\xb1$\xb4\x00I\x00\x9a\xc0\xd9\xc6\xcc\x82%\x00i_\x9b!\xe3\x1b\xd3\x97\xeb_E@\x11P\x04\x14\x01E\xa0<\x10P\x020?\xedL6h\xb9\x93\xb5\x15Z\xdc+I\x9a\xff\x939K\x9a\xd2\x06\xbc\xcb@\x0c\xf2aY\x1c\xed\x17Y\xe7\x1f\x85\xa0\xfd7\xbaAG\x13\x80\xa3\x8f{\xb9o=\r\x9f~\xfa\xe92o\xde<9t\xe8\xd0\x88\xd6\x9e[\xf9B\x7f\xc8$\xb5\xe5\xee#\xf2\x87\x1f\xec\x90\xcb\xdf\xbc\x02\x1aJ!]\n\xec\x16\xc0\x9aNQ \x90L$\x8dF\x1d\xe7\x1c\x8cF\x1f\x88=\x9f\x1f\x04\x1f\xfa%j\xdeUA\x1b\x9b\xc79Q\xd1ypH\xf6<\xdd+G\xf7\xf4\xcb\xa1\xdd\x83\xd2\xb1w\x10Kv\x07\xcd\xd2\xdd\xc9\x86\xac\xec\xd7\xb8$\xd8\xf0x\xf8c\xde>\x0c\x90=!\n\x8a\x02y-\xe4t\x11\xb0\x9a\xdc\xcdm\xb5\xf2\x92\xb7\x9ed\xb4\xe8\xb9z@C\xee\x10`\x1fAM\xdf9K\xeae\xf1\xc9-\xf2\xcc\x9f\x8f\x1a\xdf\x1c\xe8V\xdc\x0fN\xd3\x86\x9e>*\r\x17@\x0c-\xb4e\xde,_\xf9\xa4\xac\xda\xd8*\xb3\x975\x1a-L\xb5\x07\x98\x8f\x16\xd7<\xbdB\x80\xcf\xbaq\xc41z@\x8aw\xcbGo\xbb\xf5\x01\xa9\xa9\xf3I\r\xb4\xfa\xa8\xd1\xc7%\x94\x03\xb0\xcb\xd7\xdf\x19\x91\x83\xbb\xfad\xdf\xb3}\xb2\xff\xd9^9\xb8s@\x86\x07bfy\xfex\xe5$\xc1\x87\x17\xf6\xf8S&\xbft\xa6,C\xdc\xab\xe5\x81\xc7\xe7\xaa\xbf\xca\x04\x01\xfb8\xbf\xf9\xe3\xa7\x8a\xbf\x06\x1a\xdd\xbd\\\xfa;\xe6\x19,\x13,\xf2[\xcd\x94\xc4\xe1\x01w\xfd\x05\xb3\r\x01h\x1d\xb2\xb8^&g\x19px{\xbb\xa4\xc2\xd0,\xa6\x97g\xc8\x88\x05\x150\x93R\xd5X\x9dm\x91\xecCK\xd9Z\t\xc0l\xd1\xd3\xeb\x15\x01E@\x11P\x04\xca\x06\x01%\x00s\xdb\xd4\x14P(o/F\xf4\x0c{+\xf9\xcc^\xda\x90^Fb%\xfc\xdc\xd65g\xb9Q\xfb\xa5\xa1\xa5Z\xee\xf9\xc9V\x93\'g\xd3\x0b\x8d\x00\xcc\x19\x18c2\xe2\xb2_?\xbc\x84^x\xe1\x85\x86\x00$\x19\xe8z\xc0\xf3e\x97+}\xe3\x03\x0f\xc9?\xfd\xecR\xa9\x86\xe6S\x14\xcbx\xd8\x16\x1a\x14\x81bD\xc0\xd8\xea\xc3\x1fn+a\x94\xdf\x0f\x8d>\x7fu\x15\xb4\xfa\xaa\x0cAB/\xbc\xd4\xec\x0b\x81\xd0;\xf0|\xbf\x1c|\xbe\x0f\xdb>9\x02\xad>:\xe3\xa0\xdd\xbe\x13\x05\xbe\x8a\xbc\x9fZ\x83\xd4U!Yo\x08u\xf3\xe7Dw\xea9E\xc0\x1d\x04l\xbf]S\xe7\x97\xe5\xa7\xce\x00\x01E"\x88\x0f\xa4\xf6\xdb\xee \x9cy*U\x98\xb9e_\xb2\xf1\xd2y\xf2\xa3\xcfoM\xf7\x05\x99\xdf>\xa5+C;:$\xb8n\x8e$\xa3\xd14e6\xa5T\xdc\xbe\t\x12,H\xca\xca\xa0\x7f\xaa\ts\x85\r\xc5`\r\x8a\x80"\xa0\x08(\x02\x8a\x80"0\x0e\x02\x9e\x91P\xe3\xe4\xa5\x87\x8eI\xd5\x8b\x00\x06%l\xd7%m\x0e*\xad\x86\xc8\x8cY5\x12\x8fB\xa0/aY\x9e\x83\xf3@M\x95\xf4\xb4\x0f\xcb\x93w\x1e)\xd8g\xcc\x13\xe2-\x8b\xdar\t0\x03I\x06/\x02IX\x0e&\x0f\xee\x1a\x90\xdb\xbf\xfd\x9c\xfc\xe5\x07N\x81\x17\xd2\x13\x13 ^\x94C\xd3T\x04\xb2E\x80\xaf\x84y/F\xbd\x1b\xf4~J\xcf\xbb5uUp.\xe4\x97\x14\xd6\xe2\r\xf4Ee\xa8;*}=\x03r\xe0\x99>y\xe1\xa9\x1e\xd9\xb5\xa5\xcb,\xdd\x8dAsg\xbc\xc0w\xe2\xb8`^\xbf\xf4;\xc8\xec\xe2\xb1\xf4\xfeq\xd7\xe8\x0fE G\x08\x98~\x1b\x02Bx(&\xdf\x87\x06\xf7\x8d\xff\xbeY*\xfbhoR\x9f\xcb\x1c5\xc1\xb1l@YE\xd0\x8f\xcc\x98\x1b\x94\xb9K\x1b\x8d\rP\xbb<\xfb\xd8E.\xedQPD\x074\xfc\xd4Q\xa9\xdf\xb4P\x92\xfda$\\`\x9c\xd9\xd4\x1d\x93\x90\x00\x1c\xd3\xf1\xba\x84\x9b&\xa3\x08(\x02\x8a\x80"\xa0\x08\x94\x00\x02J\x00\xe6\xb6\x11\xadPB\x02\x90\x81R\xb6=f\x0eL\xfb\x8f#\xd8Q;\xa5\xb1\xb5F\xa2\x10(y\xa8T\x03\x07\xe6\r-5\xf2\xd8\x1f\x0eJ_\'\x1cP\xa0\xb2\xaa\xfdw\xac\xb5-\xf1hm\x10\xd21\x88W\x83\nk\x87\xecW\xff\xfe\x9clz\xe9\x02i[T/C MT\x0b\xf0X{\xe8^\x01 \x80I\x03:F\xb2\xbe\x91\xfc\xb0\xd7\xe7\xaf\xf6c\xf9#\xec\xf5a\xe9\xa3\x0f\xe6\x12\xd8\x87\x1c\xdd=$\xdb\x1e\xec\x95C\xd0\xea;\x04b\xfb\x10\x96\xefR\xb3/q\x82\xe5r\xd4\xe8c\xa7n\xd2\xc6\x00\xdb\xbe\x13\x05Pk-\x82"0.\x02\xd6\x8e\xeb\xe3\xf8\x86\xdey\xcb.\xb9\xe4\x8d\xcb\xa4\x13v\\\xf9.h\xc8-\x02\th\xcd\xb3\x0f9\xed\xb2\xb9r\xf8\xdb\xfdR\x01\xcd\xe3\xd4\x89\xfd\xffL\xad\x80\xe4\xfa0g\x11\xd9\xdd%\xa9ah\xff\xd1DL\xa1q\xbeU\xa8\xfc\xd4\xc2\xe8\x07\x97\xfb\x85V\xb3\xa9\xd5J\xefR\x04\x14\x01E@\x11P\x04\\B@\t@\x97\x80\xcc2\x99\xc5\xce\xf5\x9e\t&\x8d\xf0\x88[\x8f\x98\x80\x06`\x05\x8d\x02\x96h\xa8pl\x1b>\xf4\x9b\x03\xa6\x86T\xb81K\xea\n\xac\xbe\x96\x88\xf3J\x03o\xa2\xea\xda\xfc\x06\x07\x07\xcd%U\x10\xaa\xdd\xf6\x06<:o\xbb\xfc\xfa\xd6/l\x95\x0f\x7f\xf7B\xd8;\xc3\xe0B\x83"\x90\'\x04\xa8!<\xc2\xf4\x99a!\x08>\x7f\x95\x04\xeb\x02R\xdb\xe03$\x07m\xf5\rv\x87\xa5\xfb\xb9\x88\xec\x84F\xdf\xf3\x8ft\xc8\x0b[\xbba\xc3o\xfcg\xd7$3Z\xb3\xcf\xd1\x1c\xe4&\xa1\xf6\xf9\xf2\xd4\xd2\xc5\x9f\xad\xfdF\x8c\xae\x89\xed\xbfG\x1f\xf3b\xdfN\n}\xff\x93O\xc8\xcaM\xad\xd2\xba (C=\xf0D\xab$\xa0\x17pO\x9c&\xfa+\xb6\xf9\x9a\xb3g\xc9o\xbe\xbd]\x92\xecO\xbc\xa0\xb0\x1c!)\xde> \xd1\x83\xfd\xe2\x9f\xdb(\xc9!x\x03.$\x87 \x98\xac\x9cb\x18M\x99z&cO\xb1lz\x9b"\xa0\x08(\x02\x8a\x80"\x90w\x04\x94\x00\xccm\x13Xad\xae\x93\xad\xfd\xedZ)\xac\x03\x90\xfa\xe6ji\x98Y-\xbdX\x1a\xfb\xa2eh\xae\xe5\x96\xff\x84\x02\xb057\xd4\x1b\x91G~\x9b&\x00U\xfb\xef\xf86\xb1\x83\xca\x1d;v\x98\x13\x95\x1e\x0b\xf8\x86pAN\xdb\xeeo\x97\xadw\x1f\x96u\xe7\xb6I\xcf\xd1\xb0\xd1j8\xbed\xfaK\x11p\x1f\x01>\x7f)\xfc\xe1\x96\x9a4\xb4\xd9\x17\xa8\xf1\x1bo\xbcU\xd0\x0e\xae\x84\xb6\x1f\x89\x8d\xddOv\xc9\x1e8\xe5\xd8\xf7\x1c\x1cs\xc0~\xdf\xbe\xe7\xfa&\xd4\xd6#\xa9\xcd\xd7\xc6\xa4M\xad>\xf6\xda\x858\xcb\xe0>\x9c\x9a\xa2\x0b\x08\xd8>\x98[\xdb\xffr\xdf\x1eg\x16I<\\\xd4\xce\xce\x15\xe17\xb6Z\xcc\xd7N\xde\xfc\xe7G\x1e\x91\x8f\xfd\xe4\x12\xa9\xc2\xb75\xc9%\xea\xa5;\x7f8\x16\x86\xbc\xff\xae\xc0\xb2\xd7\xa1\xfe\x98,Z\xdd,\r3j0\t\x81o\'\x9e\x95\x84\xe9t\\,\x1e\xfb0g\xb64\xba\xafW\xaa\x97\xcc\x94\xe4 \x08\xc0B\tTH\xa4\xf9\x9a\xa9\x05]\xc3>5\xdc\xf4.E@\x11P\x04\x14\x812A@\t\xc0\xdc54\xe7q9\xa5Iw\xb0\xadN\xb6F\x99\xc4\xd9wuS\x0f\xf2/X\xef\x97\xeeC!\xa9\xf2{\x96\x8d\xabe\xce6\xb1$\x96\xff\xd6\xa2\x9e\x0f\xdd\xb6/\xdb[\xcb\xe6z\x9f/\xfd\x8a\xdfz\xeb\xad\xa6\xce^j\xff\xa5AM\xdb\x02\xe4\xd2\xc7\xff\xf9\x8fgd\xddym\xd0\xb8\xc2\xb2H\xd7\xa9\xee\xb2iB\xad\xe8\x04\x08\xf0\x99"\xd9g\x03\xed\xf6\x05\xb0\x8c7\xd8P#\xb5\xf5>\x89\x86\x130\x0b\x10\xc6r\xc6!9\xb8\xa3_\x9e\x7f\xb4C\xb6?\xd2-G\xf6\xf4\xa7m\xa3\xda\x1b\x9d\xedq\x13%\xe6yM/\x8e\xe4\xa4\xc2\xa8l\xc6\xdc\xa5?\xcb\x05\x81\xd1\x84\xdd\xe8\xfd\x13\xd5\x9f\xc4\x9a%\xf5\xb8%\xd1\x97i\xa0\xd9\x86p\x98\xb6\xd9r\x13\xf8\x9cSR\xd8\r\xdb\x96?\xff\xca6y\xf5\x87N1\xefN\xa5\xcbVJrS\x9b\xe2\xcc\x85\x13\r\x91PB\xe6.\xaf\x97\xe5\x1bZ\xe4\xc9\xbb\x0e\xa7\t\xd8\xcc\x1f\x9b\xcc+\xee|\x93\x87\x9f\x85\x1d\xc0\xcdK0cR(L/*\x8b\x99\xecDx|\r\xec\x13T\x905\xe2#<\x80\xe8\x05b\'\xc8ZO)\x02\x8a\x80"\xa0\x08(\x02\xc5\x83\x80\x12\x80\xb9k+\n&\x14Pf"\xcep\xb2u\x9f\x99s\xc4\x9e\xd6\xf9u\xd0(\x80\x9d+\'\xa3R\xdc\xa4R\x15\x18\xe8\xfb\xe5\x91\xdf\x1d2\xd5\xa3\xc6\x8f.\xc1;\xd6\xd2\x1cpr\xa0\x1a\n\x85\xe4\xf7\xbf\xff\xbd9\x91\xcd\x00\xf4XJ\xd9\xedY\xbbg\xbb\x9e\xe8\x96g\x1f\xec\x90U\xa7\xb7J\x1f5\x19\nf\x80\x91]}\xf4\xea\xc2A\x80\xa4\xff\x88\xed\xbe\x1a\x9fT#VA\xab\xcf\x87g\x8bvO;\x0f\x0e\xc9c\x0f\x1e4$\xc6\x11\xd8\xeb\xdb\xfdL\x8f\xf4\x1e\x81m\xd0q\x02\t?\x9a\x99JbZ\xc6\x105\xaa\xd57\x0eJ\xe5u\x88\xfd%#5\xf5,\xc9\xc7-\x9f\x0fN\x9ep\xcb`\xb7\x99\xa2\x13\x08\x04d\xd6\xacYBgLMMM2s\xe6LY\xb0`\x81\xb4\xb4\xb4Hmm\xad\xcc\x981\xc3\xec777Kcc\xa3\xb4\xb6\xb6J]]\x9d\xb9\x8ey\xd82d\x9a\xdf\x94\xafC]Q9\xb9\xfd\x1b\xb0\xe3z\xf9|\x99\xb7\xaaQ\xfa;#\xc6\xeb\xf5\x94\xd3\xd4\x1b\xb3C\x00\xf8\x93\x04\xdcp\xe1\\C\x00z&\xd38\xcfr\x18\x04`2\x8eN\xd0\xd1\x08\xcc\xae\xb0\x1e]\xcd~\xb9?k\x02\xd0\x16\xa6\x0f;S^?l\x13\xd1\xad"\xa0\x08(\x02\x8a\x80"P\xaa\x08(\x01\x98\xfb\x96mF\x96M^ek\x07&\xb3\x16\x06%\x16\xa1\xfd?\xafr\xcao\xbaT\xa4\xa8\x0eVI\xfb\xdeAy\xfe\xf1\x0eS\x98,\x94+r^x\xdb.9\x1b\xc8\xa1\x86$\xfbh\xf3\xef=\xefy\x8f\xa9/\xf7\xb9\xcc,\x17\xa1\n\xb6\xa3\x12\x89\x94\xfc\xe1{;\xe4T\x0cd\xfa{\nhyQ.\x00\xd0<\xa6\x8d\x80y\x9f-\xdb\x87~\x8c\x04r\xb0) u\r\x01c\xbb\xaf\xbf+"}\x1d\x119\xb4\xbb\xdf\x10\xcd\xcf>\xd0.\x07\xa0\xe9g\t\xe8\xd1\x058^\xbb\xcf!q@\xf8\x9d\xc0\x9f\xc7\xe8\xdbu\xbfH\x11\x18M\xe2MV\x05\xf6\x97\xec\xa7\x19\'\x9b(\xa1fu0\x18\x1c!\xe9\x16-Z$\x8b\x17/6\x04\xdf\xdc\xb9s\xc5\xc6\xf9\xf3\xe7\x0bI=\xbf\xdf?B(NV\x8e\xd1\xe7IDNV\x96\xd1\xd7Ow\x9fu\xe7\xbb\xc2w\xe8\xbb\x1f\x7fL\xfe\xe1\xc7\x17\x1b\xa78\xf6\xfb5\xdd\xf4\xf5\xfe\xc9\x11\xe02\xe0\xe1\xc1\x98\x9cr\xc1\xec\xc9/v\xe1\x8a$:\xc1\xd8\xfe^\t,j)\x0c;\x80\xe8\x9e+ \xab$\xfb\x9c\x89\x1b\xca\xb0\xd9\xcdd\xf7d}\x87\x0b8j\x12\x8a\x80"\xa0\x08(\x02\x8a@\xb1 \xa0\x04`\xeeZ\xcaRq\x8d\xc8\x92$ \x83=\x96\xfe\xe5\xc2_gRWf/\xa83\xcb\xdcJ\x95\x004\xde\x7f\x9bj\xe4\xd1?\x1e\x92P_\x8c*\x12\xe3\x0e\xfc]\x80\xd4\x95$r=\x80\xa2\xb6\n\x07\xa9\xf7\xdf\x7f\xbf|\xef{\xdf3u\xc8\xe5@\xd2*Sm\xb9\xfb\x88\xd1\xc2\x9a\x85\xe7q\x10\xb6\x1aU\x0b\xd0\x95\xc7\xa9d\x13\xb1\x1a~$!\xaak`\xbf/\x180\xb6\xfc\xe8\x997\x06\x0f\x99\xfb\xb6\xf5\xca\xae\xa7\xbad\xf7\xd6\x1e\xd9\xfbL\x1f\x96\xf6R\xd9\xe3\xc5\xa1\x12\xda\xc0\x0c\xe4\x0f\xf9\xee\x8dG\n\xbe\xf8.=R\x8c\x08\x90\xe4c\x1c\xab\xb5\xc7>\xd0\xf6y\x99\xf6\xbf\\vK-=\xc6\xd9\xb3g\xcb\x9c9sL\xe4~[[\x9b9FM>\xee744L\x19.\x96\x87\x931\xb6|L\xc8\xd6\x83\xfb\xac\x0b#\xf3=|\xf8\xb09\x97i\x1dx\xfft\x02\xdf\x15\xbe={\xf0\xae\xfd\xe1{;\xe5\xeaw\xae\x91\xf6}\x83b\xdf\xa9\xe9\xa4\xad\xf7N\x8e\x00\x9a]\xa2\xc3\tij\xab\x91\x05+\x9b\xe4\x00\xbc\x90\xf3\xd9\xf0\xa4\xfd\xe9\xe4\x05\x13u\xa1-\x87\xa4f\xf5\xec\x82\xb1\x03X\x01m\xeeX\xc7P\x1a,\xd4\x1d\x95\x9f\x1c\xb8c4azI\x88w\x8b\xa73)\x8b^\xa3\x08(\x02\x8a\x80"\xa0\x08\x14,\x02J\x00\xe6\xaei\xd2#\xd2\xb4\xf6\x1f\xed\x00r\xb1\xae=\xe6z)f\xcc\xab\xc3\x80\x19\xda^%\xea\x01\x98\xb3\xe4I\x08\x85O\xddw\xc4`W\xc9%#\xa3}\xbf\xb9\x8e\xe8\xf4\x12\xf4Dx\x1f\xa7H6\x1f\x92\x7f\x07\x0f\x1e\x94\x0b.\xb8\xc0\\\xe5\xd9\x00b\x9c2\xf0\x10\x07\x91\xd6\xa8\xfc3\x7f>*/y\xdbJxZ\x85\x16 \xdaI\x83"@\x048\xa6\x1b\xb1\xe1\x87\x9e\xd0j\xf8\xd57U\xe3\xddNb\xe9nX\xf6c\xf0\xbb\xe3\xd1Ny\xea\xde\xa3 \xfd\xba%\x04\xcd\x98\xb1a\xacv\x1f\x87\x8a\xc6{\xe6\xd8\x0b\xf5wQ!\xc0>\x8b\xc1n\xc7+<\xfb;\x1bG\x93ic\xaf\xa5\x06\x1e\t;\xc6\x85\x0b\x17\xca\xb2e\xcbd\xe9\xd2\xa5&.Y\xb2D\x96/_n\x96\xe1R\xab/\x9b\xc0\xbc\xadV5\t\xbb\xf1\x02\xaf\x19\xef\x9c\xb5\xcf:\xde=\xf6\x18\x89H\x12\x809\x0f\xcer\xd0\x9f\x7f\xf9i\xd9x\xd9v\xb4?\xdb\x92X\x96\xf0`\xb67\xea\xf5\x8a\x80"\xa0\x08(\x02\x8a@9!\xa0\x04`\xee[\xbb\xc5\xc9\x92\x04\xa0g\xf8\xb7\xcc\xa9\x81\xcd\xa2d\xc9:\xf0\xab\x82p\x1c\x8f\xa7\xe4\x89;\xd3\x93\xbd)\xccb\x17r\xb0\x83D/\xcb\xc8<\xb8\xcc\x97\xe1\x81\x07\x1e\x90+\xaf\xbc\xd2h\x98p\xf0y\xa2\xc1\xb1Wer\xc6\xef\xf2\xc0\xaf\xf6\xcb\xa5oXal\xb4y\x95\x97\xa6[\x1c\x08pY/\xb5w\x19\xfc\xb5>\xa9\xa9\r\xc0Co\x85\x19\xec\xc6qr\xcf\xd6^8\xeaxAv=\xd9-;\xe1\xa9\xb7\xaf\xe3\xc5N\x10\xf8\\\xd1\xde\xa7\xda\xee+\x8e6\x9f\xac\x94\x1c\xec3\xb2\x9f\xb2\xfb\xec\xaf\xac\xc3"\x12h\x93\x05\xda\xd0#\xb1\xc7e\xb8v9.\xb7$\xd0\xecr\xdc\xa9\x92{\xb6\xef\xb4ec9-\xa9\xc7c\x99\x10y\x93\x95\x7f\xa2\xf3,\xffc\x8f=f\xb0\xb1\xe5\x98\xe8Z7\x8f\xdb\t\x1c~c\x7f\xf8\xe9\'\xe5\x03\xdf\xb9@\x86\xfb\xd5\xb9\xaa\x9b\x18\x9f(-\xa3\xb9\x8c~n\xf5\x19\xb3\xe47\xdf\xde\xee\xdd\x84\x86\xf3nE\x0f\xf4I\xf4p\xbf\xf8Zj%9\x0c\xdb{\x13\x90\xd9\'*\xb3k\xe7(\xdb\r\x84%\xde\xe7\x98\r\x99\xfc\xf5\x1f\x9b\xf5>\xe7\x00\x19\xf9\xf4\xc7f\xec\x15\xfa[\x11P\x04\x14\x01E@\x11(c\x04<#\xa0\xca\x18\xd3\x89\xaan\xc5\x18\xef\x0c\xbbp\xf2\xd6\xc9\xa5\xbe9\x00/\x98\x90}\xc6WJ\x98\xa8\x8cEq\x9c$Bm]\xa5\x1c\xd9= \xfd\xb0\x01\xc6\x90\xc1\x181\xafu\xcbd\x10\x9bm\x01\x99&\x07\x85v\xf0l\xc9\xbf/\x7f\xf9\xcb\xf2\xc1\x0f~\xd0$\xc7s\xb9\x1c8\x8e\xae\x03m\x002\xecy\xba\xc7xc\xa5\xcd\xc6\xd8pi>\x93\xa3\xeb\xad\xfb\x0e\x02h~j\xe9\xda\x97\x93^zk\x82>\xa9k\xf2\xc33t\xa5\xf4w\x85\xe5\xe8\xde\x01\x10~\x9d\xb2\xe5\x9e#\xf2\xc2\x13]\'\xd6\xf03\x8f\x135\xbe\xa0\xac\x123?\x14\xea\x02G\x80\xfd\x0f\x83\xdd\x8e-.\xfb0\x1b\'\xea\xa7\xb8,\x97\x8e3\xa8\xb5\xb7b\xc5\nY\xb7n\x9d!\xfaV\xae\\i4\xf8\xe8D\x83\xd7d\x12\x98\x87\xcdg\xacV\x1e\xcb1\xf6\x98\x97\xe4\xde\x89\xca\xcb\xb2\x103.\x01\xceW\xa0W`\x86\xa7\xee;*\x0f\xde\xb6O\xce\xb9j\x81t\x1e\x1a6\xe4{\xbe\xcaT.\xf9V`i.5.\x17\xacn2\xfd\xe5\x10\xcc\x9cX\xdb\x8c\xaeb\xc0&vl>F\xf7\xf7I`n\xa3$CSv\xbe1\xfd\xa2\xe1\xfd\xac\xc4\xa4P\xbc+$\x89\xae\xc1l\xd2cM8\xfbI\xc2o\xbfs\xa3~$\x1c t\xa3\x08(\x02\x8a\x80"\xa0\x08\x8cF@\t\xc0\xd1hx\xbbo\x85\x919^ec\xf9\xbf:\x18\xca\xe7`;\xe5\xc9\x9a\x11\xafJ\x9fy\xba\xd4 \n\xc2\xfb/I\x03\x138\xc8$+P\xc0\x81\x03:7\x02\xd3\xa1\xa6\x1f\xb7\\\xd6fI?\xa6\xfd\xeb_\xffZ>\xf0\x81\x0f\xc8\xf3\xcf?o\xb2\xe2`\xd6\x0ev\xdd\xc8{*i\xd8g\x92K\xb5/\xb8v\xa9t\xc3#qU)\xb2\xd2S\x01\xa7D\xef\xe1\xf25\xfa\x9a\xf1\x07*A\xd4\xfba\xcb\x0f\xf6\xcc\xa0\xd5\xc1%\xe1\x07w\xf6\xcb\xc3\xbf= ;\xe1\xb8\xe7\x05\xd8\xf1;\x0cO\xbdc\x03\x07\xbaT@!\xd1OM$F\r\x85\x8f\x00\t+\xf6G\xdc2\xb2\xef\xc9T\x8b\x8fD\xd7\x92%KFH>j\xf2\xf1\xb7\xd5\xe8\xa3\x17\xddL\x83\xb5\xfdg\xcb\xc1\xfb\xd8\x17\xf27\xb7cI\xbeL\xd3\xcd\xe5u\x96\x00\xa4\xb7`\x06\x96=\x1f\xc1\x9aq\xb8\xf5\x8b[e\xc3E\xb3\xe1x\xcb\x87\x89\xc580\xccOy\xf2\x81A>\xf2$\xbe\x11\xd8\x01\x9c\xb3\xa4^\x16\xaf\x9b!4\xa3\xc1>\xd1Q\x9e\xf6\xa4H\xc3;\xda%x\xc6|\xd0hy\x9c5FW_Y\xe3\x97X\xe7\x10\xfa}T\x93\xcf}\xe6\xb2\x13\x1f\xcavDG0\xb4\xd3\xe1\x9e\xc0\xa5\x89*\x02\x8a\x80"\xa0\x08(\x02E\x8b\x80\x12\x80\xb9k:;\x8a\xb5\x04\xa0\x07\x124\x93L\xc1^O\xb5\x99-\xe6\x00\xba$\x03\x84\xc2\x00\xc8\x85g\xfeDY\x8f\xb6\xc3 \x18{a\x1f\xc7E\xf0,\x01\xc8-\x07\xc6\x13\rByn\xbc\xc1\x1e\xef\xb3\x83\xeb\xd1Z)G\x8f\x1e\x95\x1f\xff\xf8\xc7\xf2\xb9\xcf}n\xc4V\x14\xd3\xb6\xf9\xb8X\x85)%e\xb5\x16\x9e{\xb8S.\x7f\xeb\x8a\xb4h\x9e^\xa5<\xa5\xf4\xf4\xa6\x02C\x00\xbd\xda1\x92\x19\x04\x10\x88\xbe\x86\x195\xd0Z\tH\x18\xf6\xfa:\x0e\x0eK\xc7\xfe\x01\xd9r\xe7ay\xf2\xae#\xd0 r\x0c\xbb\x8f\xaa\xc6\x88\r?\xd3C\xa6\t?/\x07\xba\xa3\xb2\xd6\xdd,\x11\x18M\xaa\xd9[y\xccNJX\xc2\xcf\x9e\xb3[\xda\xde\xe32\xdd%K\x96\xc8\xda\xb5kM\\\xbdz\xb5\xd9\x92\xe4\xaa\xae\xae\xb6\x97N\xb8\xb5i\x8f\xed;\xd9\xd7\x8d>6\xba\x7f\x9c0\xb1\x02?a\xbf\x11t8\x92\xcf@-@\x92Q\xbdG\x87\xe5\xf6on\x97\xd7\xdd\xb4^:\x0f\x14\xf8\xc76\x9f\x80\xb9\x997\x9e\xebx4)\'\x9f\xd3f\x08\xc0\xa4WfN\x90\x0fC\xf8i8\x9b\x89\x9f\x9a^5\x92/\xd9\x11",\xbe\x00\x12\xd9\r\x9b\x84\x0c\xe4"1\x99\x94A`\x89)Y\xecCT\r\xc0\x0c\x00\xd3K\x14\x01E@\x11P\x04\xca\x17\x01%\x00s\xd7\xf6\x96\x00\xb4\x12\xbd\xeb\x04 \xc6af\xb2\xb4\xa95\x88U\x1d\xc8\xce\xe6\x98\xbb:z\x9e\x13\x85\xe0\x9a\xba*9\xb2oH\xf6o\xef1\xf9\x99\x99b\xcfs\x9e^\x06VS\x8f\x83e\xbb?^\x8a\':\xc7\xeb9\xd8}\xf0\xc1\x07\xe5w\xbf\xfb\x9d\xfc\xe2\x17\xbf\x90\xa7\x9ez\xea\xb8d8\xf8\xb5\x03\xe5\xe3N\xe4\xeb\x07\x05x\x88\xe6t\xe6@\xcf\x86\xb4\xdd\xc6\xc7\xd2\xf5\x87?_\xf5+\xd3|\xad\xb7\xde*,\xe5\xad\x83\xd3\x0e.\xe9\xf5\x81\x94\x8fF\x12\xb2\xe3\xb1.y\xfe\x91\x0e\xd9\x0e\xe7\x1d\xcf=\xd4\xf1b\x84\xd0\xf8>,q\xe3\x04\x05\x97\x08\xab\x86\xdf\x8b!*\xb4#\xecW\xd8w\xc5b1\xd3\x07\x8dW>j$\x93\xdc#\xb1g\x97\xeb\xaeY\xb3\xc6\xd8\xe4\x9b?\x1f\x9aE\x19\x04\xf6o\xec\xbf\xb8\xb5d#\xc9=\xee\x97\x02\xb1\x97\x01\x04\xe6\x12\xd6\x9f\xa1\xb5\xb5\xd5l\xf3\xf9\xc7.\x05\xfe\xcd\xb7\xb6\xcb\xb9\xaf\\,3\xe7\x04e\xa8\x1f\x0eAT\x0b\xd0\xd3f\xa9\xc2s\x1f\xea\x8fA\xf3r\xae\xfc\xf8_\x9e2\xb2\x9d\'\x19:rbb0\n\xcf\xbb\x03R5\xa3NR\x11.\x03\xce\x83& &\x90\xe8\x18jx\xdb\xd1tU3\xd7\xfe\xb6\xd2\xee.\xdc8\x8c\xc8\xb1\x8d2\xd5i\x14\xf5\xaf"\xa0\x08(\x02\x8a\x80"p\x1c\x02J\x00\x1e\x07\x87\xe7?(QY\' \x9ee\xd6<\xbbvD\x03\x90\xcbFJ)pv\xb8\x06\xcb\x7f\xf7>\xd3!\x83\xbdi\x8f\xa0v\xb0T\x88\xf5\xb4\xdaQ{\xf7\xee5^y\'\x1b\x08S\x93&\x1a\x8d\xca\xf0\xf0\xb0tuu\xc9\xce\x9d;M\xdc\xbau\xab\xdcq\xc7\x1d\xc2tl\x9a\xb6\xbeV\xfb\xc5\x0e\x9e\xed\xf1B\xd8Zr\xb6\xefhX\xba`?\x8a\xe4-\x976\x8dh}\x15B!\xb5\x0c\x93"`H\x00CJ\xa4\xb5\xfc\xea[j\x84vFC}Q\xe980$\x87\xf7\x0c\xca\xe3\x7f8$[\xee>$\x83=\xc7\xdb\x90\x1aik3D\xc3\x1b\x8c-\x9d\x0bh(l\x04l\xbf\xc2\xfef\xf4\xa4\x02\x9dj\x90\x98\xda\xb8q\xa3l\xd8\xb0A\xd6\xaf_o"\x8f\x91\xa8\x9b(0\x1dF\x9b\xae\xbd\x8e\xfd\x96=\xc6\xfbI$jH#`\t\xc0\x13\xe1\x9a\x0b\xacH\xf6\xb1\x0f\xf8\xd1g\xb7\xc8\x87\xff/\x1c\x82\x0c\x1c\xff\x8e\xe7\xa2\x0ce\x97\x07d\xb7X$.mK\xea\x8c\x17\xe6\xde\xf6a\xbc_\xe9I^\xd7\xb1\xe0k\x8b.9\xb4\xf5\x904_\xb9V\xe2\xb4\x03\x98\x07M\xfdJ,\xe7H\xf4\x84%\x06\x87$&d\xfe\x99\xb0\x92\xee\x93\x0e6\x99\xdf\xe9\xdc\xa0\x1bE@\x11P\x04\x14\x01E\xa0\\\x10P\x020\xb7-M\x91\xca\x12\x80\x13\x8f\x94\xa6Z&\x8a@\xd0\xaaij\xadN\xcf\xce\x1b\xf6\xc5\xcaESM\xb4\xc0\xeeC\xfd|\xbe*9\xb0\xbd\xcf\x14\xac\x92\xde@\x0b\x98L\xb0d\xdd\xe0\xe0\xa0\xd1\x8c\xe1\x809\x1c\x0e\x9b\x01\xaf%.9\xb8\x0b\xc16\xde\xc0\x00\x9c\x9a\xf4\xf7\x0b\xaf\x1d=\xe0\x1e\xaf\x058H\xe6\xfd$\x0cm\x1e\xe3]\x97\xf7c\x864\x12\x90\xb5\x118}\x18\xc6\xf2\xd0&\t\x8781\xef\xfe\xe3\x9f\xf7\xba\x96X\x01\xf8\\\xd1\x96\x9f\x0f\xef\x18m\xf9\x05j\xaa\x8c\x96_<\x9a\x90\xed\xd0\xf2{\xf6\x81\xa3\xd0\xf0\xeb\x94\x9dp\xde16\xf0\xbdd\xa0wn\xd5\xf0\x1b\x8bNa\xff&\x19\xc7>\x89}\x8b\r\xa7\x9f~\xba\xbc\xe1\ro\x90\x8b.\xba\xc8\x10\x7f\xf6\xf8x[;\x11a\x89=\x9b\x1e\xb7\x96\xe8\x1b\xef>=\xf6b\x04\xb8t\x9a!\xdf}\xbcU\xc4\xa2C\x90\xc7\xef8(\'_0Gz\xdb\xc3\xd0f\xd7~\xfc\xc5\xad\xe6\xde\x91x1.\xd4\xbcI\xf81\xb2\xaf\xb1\xfd\r\xbd\xeb^\x7f\xfd\xf5\xc6\xb1\xd0\xd2\xa5K\x8f+:\'(F\x93y\x96\xec\xb3\x17\xa9\x16\x9fEbj[\xb6\x05C]]\x9d\xd9\x92\x8c\xe51\xdb\xff\x9b\x83\xb9\xfc\x03a\xc2\xe6\x7f\xcb\xe7\xb7\xca\xff9o\x0e45\xe9d\xaa\x04\x85\x8c\\\xe2:I^)p\xf0\x95\x90y\xd6mn3\x04\xa0g\xb4\x96#G\xd1\x13p\xbc}P\xaa\xe0\x88#\t\xedCz\x08\xceY`^0]3\xf4\xe4\x81t\x96\xa4\xf4\x8e\xcdA\x9c\xa8\x18|\x08Y\xd0C\x88\x8f\x9f\xe8B=\xa7\x08(\x02\x8a\x80"\xa0\x08(\x02i;\x19\x8aC\xee\x10\xa0+\xc3F\xaf\xb2\xa3\xfcD9\xae~\x06\xbc\x00c\xbf\x14\t@:\x19\xe0\xac\xf8s\x7fN\xdb\x16K\x14Q%9\x80:\x91\x8d?;\xf0\xb6\x83\xbc\xd1\x1a8^=3\x9e\xa7\x0b\xd1\xdcji\x86\x06@\x00\xd2\xc6\x8f\xe7\x99j\x06\xd9 \x90\xa0\xc7\r\xfc\xf7\xd7\xfa\xa0\xe9\x170Z~\xd4\xec\xd9\xb7\xadW\xfe\xf8\x83\x9d\xb2\xeb\xc9\x1ey\xfa\xfe#\xc6 \xfd\xe8t+\xa9\xfd\xc3~\x06\x9a#J\x04\x8cF\xa6x\xf6\xd9\'\xd1\xb6\xdeh\xdb~+W\xae\x94\x1bo\xbcQ\xde\xf1\x8ew\x98s\xb664M@\xd2\x8f}X9\xd9\xe3\xb3\xf5\xcf\xc7\xb6\xa6\xa6\xc6d\xcbo\x02\xdb*\x9f\xc1|\x97P\x86\xa3X\xee\x7f\xcf\x8fw\xcbeo^\x0e\x87 \xf0\xea\xeeh\xfb\xe6\xb3l%\x9b7\xc8?\xda\x01\\\xb8\xb2\xd9\xd1\xbe\x86\x930N\xb6\xb8M\xbc\x1a9\n\x13\x00\x91\x98D\x0f\xf4I\xf0\xe4\xb9\xf0\n\xc2I\xc6\x1c=s\xf8\x86T6TKd\x7f/\x1c\x80\xa4m;S#1\xc3@\xb1\x97S\x8a\xf7"\x86\x9d{2\xbe\xd9\xb9^7\x8a\x80"\xa0\x08(\x02\x8a@\xd9 \xa0\x1a\x80\xb9m\xea&dg1w]\xb2\xb22am\x10Y\x94\xa0\xf8\x03\xe5\x14\xa9\xa9\xa9\x94\xee\xc3\xc32dm\x10\x15Q=9\x80\x9alion\x1f\xc7\xdc\xe4f\x89\xe9\x08\x97\xfe\xba\xfe\xd4\xe7\xa6\x0e\xa5\x94\xcbq\xf6\xfc\xa0\xc5\xd3\xdcR+\xb5\xf5>\xe9\xef\x8e\xc8\xfe\xe7\xfa\xe4\xf1?\x1e\x94G\xff\xf7\xa0\x1c\xdd;x\\\xb5\xc7\xda\xf2\xf3\xcc+\xe5q\xb9\xea\x0f/\x10 \x99\xc4\xc8I\x07\xabM|\xfe\xf9\xe7\xcb\xa7?\xfdi\xb9\xf0\xc2\x0bG\xb2\xb4\x9ag\xbc6\x10\xe0\xfc\x95\x86\\"\x10\x0c\x06s\x99\xdd\xa4y\x91\xf3\'/\xf3\xcb\xafo\x93\xb3\xafZ\xe0\xd8t\xa5]\xc7Io\xd5\x0b\xa6\x80\x00\xf8?\xe3M}\xde\xaaFY\xb4\xbaI^\xd8\xda\x03\x02\x10\xe2\x1d)/\xb7\x03\xdb\x10\xe9FvuIp\x03\x08\xc0\\~\xab\x91W\x05\x9cH\r=f\xb5\xffp\xc0\n\xb4\x99\xd7\xf37\xce\xa5\x94\xb1\xd5\x01H\xe6\xb8\xe9\x95\x8a\x80"\xa0\x08(\x02e\x86\x80%\xa3\xca\xac\xda9\xaf.E)RU3\x10\xbdY\xfcHy\xc9\xb1\rS\r{]q,\x9d`\xa6\xa5\x14\xb8<\xb1\xba\xb6R\xf6<\xed\xcc\x10\x97R\xe5J\xb9.\x0eI\x9b\x88%KR+\xb5X\x9a\x8e\xf8s\xa9n-\x9c\xe8X{~t\xc8\xb2\xed\xfev\xd9r\xefa\xd9\x0e\x8f\xbd\x07w:\xc6\xd7\x9dJ\x91\xf4\xe3\xe0\x9ed\x9f\xebZ\'\xc5\x02\\\x89\x95\x93\x1a|$\xf6\xac\xa6\xf1\r7\xdc \x1f\xfc\xe0\x07\x8d\x8dR[U\x92\x82\xbc\xeeD\x1a\xcb\xf6Z\xdd\xba\x8f\x80]^\xcde\xd86\x90\x84\xb5mf\x8f\xe5z\x9b )\x83r\x0cvG\xe5\x8e\xff~A^\xf1\xde5\x12\x1e\n\xe5v\xa9h\xae+\x9d\xe7\xfc8a\x03\xba^V\x9f1+M\x00f\xae\x19\x97]\xc9\x9d\xd5\x14!x\xe0m\xbef-\xda\x94\x8c`\x8e\x02&\xa2R\xc3q\x19\xfc\xd3\x0b\xe9\x0c3\'\xffH\x85R\xa6\xeeF|$}s)N\x7f;5\xd3\x8d"\xa0\x08(\x02\x8a\x80"\xe0\x02\x02J\x00\xba\x00b\x16I\xd0\x01\x88\'\x04\xa0e\x18Y\x96jxZMb\x99\xac\xe4P~\xcb\x02\x83\xa9_\x8a*\x05@n\xee\xdd\x96&\x00\x0ba@4\xf5\xca\x94\xdf\x9d\xf9\x1e\xbc\x96\x1b\xe2#\x9a~\x18\xb0\xd3^Ws[\xd0h}u\x1e\x18\x84=\xbf~y\xf0\xd7\xfbd\xcb=G$2t\xbc\xb2\x84\xd1\xf43\xa4m\x9a\xf4\xe3\na\r\xa5\x83\x805-@\xe2\xef\x9f\xff\xf9\x9f\xa5\xa9\x89\x8a\xe9\xe9\xc0s$\x9f\xd4\x86\x9fE$\xbf[j]VWcid$\x92\xdf\x82\x8c\xca\x9d\xd6>\xd9=\xfc\xea\xeb\xcf\xca\x85\xd7.1\xda\xc3\xd1\x10\x8d\xd5\x8d\xbaHw]C\xa0\x02\x12c\xa8?*\xa7^:O~\xf3\x9d\xe7\xb3X\x19\x9be\x11\x9c\x89\xba\xf8\xd1~I\xf4E\xa4\x02N\x9f\x04\x93F\x9e\x07\x10\x9aU\xd0B\x1f\xb8k\x87$\xc3\xc7\x7f\x8b2\xc8\x9b\x05\xa4\xf8\xfb\x00\xe2\x0eD>\x85\x99Y\x0e\xc4\x85\x1a\x14\x01E@\x11P\x04\x14\x81rD@\t\xc0\xdc\xb6:]\xfay\xa4\x98w\x8c\x02\xac\xc1\x12`\xda\xf5\xf2(\xa3\xdc"6&7?m\x93=\xd3k\x8eR0Ne-/\x8eIP\x7fz\x8f\x80\xf3 \x06\xf0\\r\xf9\x92\x06o\x11\x18\xad\xe9W]\x0b{m\xd5\x95\xf0\xc2\x1c\x93\x07o\xdb/\x8f\xfe\xee\x80<~\xd7!\xd8\xed;\xbe\x0c\xb4\xd3H\x87:\xd4\xf0QM\xbf\xe3\xb1\xf1\xe2W>&/l\x9eo{\xdb\xdb\xe4;\xdf\xf9\xce\x88M9\x12\xf3$\xfeh\xd7O5\xfe\xbch\xed\xa9\xa7I\r@\xc6B"\x00\xa9(\xc6I\x02:\xe3\xfa\xe5\xd7\x9f\x91\xeb>\xb7I:\x06\x87\x8cv\xf1\xd4k\xaawN\x84\x00\t\xf9\x08\xb4\xe3\x16\xadm\x96\x00\xfa\xf3(\xb4\xb6\xbd\x0e\xe1\xed\xed\xd2p\xd6b\x89\x87\xa1\xdd\xc9u\xc8^\x05\xf5\xb4\xa9\x01X\x90\xda\x98\x8e\xb6\xd8\xdd\xb7\xee\x96\xcb\xdf\xb2BZ\xe7\x07\xcd$\x83q\x0c4\xf5\xea\xea\x9d\x13 \x90\x84\'v\x7fS\xa5\xac\xbf`\x8e\xb1\xcfZE\x02\xd6~X\'\xb8gJ\x87\x1d\xf2-\xfc,\x08\xc0\x0b\x97M)\x89\xacn\xc2\'\xa9\xb2\xa5F\x06\xee\xdf-\xf1n\x90\x8d\xec;3_\xe2\xcc\xa7\x90\x9d-\x97\x84\xfc\xdc\xc9\xf7\xd8G\xce9\xa0\x1bE@\x11P\x04\x14\x01E@\x118\x1e\x01%\x00\x8f\xc7\xc3\xeb_\x96\x00\xb4\x82\x8b{\xf9Q\x0cB\xaa\x81j\x1f4~@\xb4\xd0\x1e\xa03\x10u/\x93\xfc\xa5\x94\x02\xcb\xe1\xaf\xab\x96\x9e#!\xc4aS\x90\\\r\x98\xf3W\xeb\xe2\xcf\x99\x8f\xa0%\x97\xea\x1aa\x9b\x12$\x14\x1fU\r\xd3G\xc0\x10z\x00\xb8\xb6\xc1\x0f\xdb\x98U\x86 \xa7\xa6\xdf\x03\xd0\xf4{\x0c\x9a~O\xdc}\x08\xd8\x1f\x9f\x0f=v\xd2\x9e_\xa9M\x10\x1c_\xcb\xdc\xff"\x91G\x12\x8d\xa4\x1f\xbd\xe52\xb0\x7f\x1aM\xfe\x8dW\xaa\xd1\xe7\xa9\x81\xe7\xa5\x93 \xdb_\xee\xd8\xb1C\xae\xb9\xe6\x1a\xd9\xb4i\x93\xfc\xe0\x07?\x90U\xabV\x99\xa2Q\x0bP\x89\xc0\xf1Z)\xf7\xc7l[\xb1=,\x018\x96L\xce}\xa9\x8e\xe5\xc8\xf2\x91\xecc_\xf2\xbb\xff\xbbC\xae\xff\xc2&\x19\xea\xa3\xd7X\r^ \xc0\x15\x1d>\x7f\x95\x9c|~\x9a\x00Ly\xf5\x11\xa5d\x8a@o\xbc\x89!,;\x87v\x9eg\x16\xf5H\xd5aR7\x01\xed\xc6\x9e\xdb\x9f1\xf9\xa2\xd3Lo3\xfb\xcb\x14\xa8\xf1w+b\x17\xa2#\x05cO\x83"\xa0\x08(\x02\x8a\x80"\xa0\x08L\x88\x80\x12\x80\x13B\xe3\xc9\t\xcf]\xfaU\x05`\xef\x0b1\tA\x8a\x86\xa3K%P.\xf4C\xbb\xb1\x1f\x1a\x80\xb1\xa8N\xf2\x16c\xbb64\x83\x00D\xdb\xe92\xe0\xa9\xb5\x1e\xdf\x01\x12\xe1\x1c\xe7\xf0]h\x9e\x1d\x94*\x0c\xd0:\x0f\x84\xe4\xe9\xfb\x8e\xc8=?\xd9=\xa9\xa6_\xc2q\x144\xb5\x12\xe8]$\xf8\xac\x86\x1f\xd1 \x11\xc2H"o4\x99\xc7s\xf3\xe7\xcf\x97\x993g\xcaI\'\x9dd\xc86\x12m\xcb\x96-\x93\xa5K\x97\x1a\x8f\xba$t\xa8\x89\xf7\xf1\x8f\x7f\\\xb6m\xdb6B\xfe\x91\xf4aZ\x96\x04bZn\x06[\xfeG\x1f}\xd48\xfe\xf8\xc8G>"\x9f\xfb\xdc\xe7\x0c\xf9g\xf3\xb4\xd7\xb8\x99\xaf\xa6\x959\x02V3\x94wX\x020\xf3\xbbss\xa5\xf5\x02~\xdf\xcf\xf6\xc8\xcb\xae_%3\xe7T\xcb\xd0\x00mH\xe6&\xffr\xca\x85\xdf\xccp(&K\xd6\xd1\x8ct\xda)\x13\'\xd7\xf8Mp58\t\xc6;\x07%~h@\xfcs\x1b%I"\xd0\x93FM\x89\xaf\xa9N\xba\x7f\xbcE\x92\x03\xb4q\x99\x15\x7f\xc7\x9a\xf3I\xe3\x14\xd7\x0f\x11\x19\xf8\xdb\xfb\xf5\xd1&+\xfd\xa3\x08(\x02\x8a\x80"\xa0\x08\x14/\x02J\x00\xe6\xb6\xed<\xd3\x00\xb4\xa2\x93\x1f\xb3\xc4\xfe\x00\xbc\xdb;\xb0\xb0\xf4"H\xb7\xa2\xa0b\x17[4\xd6\xd8\xcdoM\xd4\xc4\x1a5\xb1\xd7\x18\x8d\xc6\x12\xbb\xa81\x92h\xb0c\x01\x05\x95*Uz\x87E\xea\xd2\x97\xdde\x0b\xdb\xeb\x7f\xbe;s\x86\xd9e\xdb\xcc\xbc7\xf3f\xf6\x1c\xb8;o^\xb9\xf7\xdc\xef\xde7\xef\xde\xef\x9d{N\x12\xa5wM\xa2\xdc\x1d\xea,\xbe5-\xe6\xb2\xaea+^\x060)5\x96\xdau\x8c7K\xec\xb6\xac\xdaK\xb3\xc6e\xd1\xc2\x89\xdb\xa9\x9c\x97Ny\xc4X\xa6\xf17X\xa4\xf1\x87Z\xfay\x90i\xf5Fk\xad\xfb\xd2\xd2\xd2\xe8\xf0\xc3\x0f\xa7\xb3\xce:\x8b\xce=\xf7\\\x02i\x96\x98\x98\xd8h9\xb2\xa4\xb7)2\rd\x1c\x88\xb8Q\xa3F\x99\x94\x99\x99I\x8f<\xf2\x08}\xf9\xe5\x97\x1e\x8b@\xb9\xb6\xa1\x85a\xa3\x05\xfa\xb0\x13\xe4\x9f\xd4y\xc3\x86\r4l\xd80z\xf2\xc9\'\xe9\x89\'\x9e0\xe4\x9f\x92\x80>\x80i\xe3\xa9 \x82\x9d*B&\xff\xcc\xbfG\xe7\xde\x92O\xdd\xfa\xa5Qq~\x85Y\x1e\xecT\x9d\xc3U\xaf\x1a\xb6\x9eOJ\x8b\xa5\xfe\xc32\\\x04\xa0]t\x97{\xb4Z\xb6.\x87RG\x1ed\xcf\x0b;\x8eJ\x8f\xe0"\xb9\x1f/q5\x87\xef\xe6\x8c\x18\x01B\xde\xe4T\xce\tK\x81\xedB\x84\xb3VQ\x04\x14\x01E@\x11P\x04"\x07\x01\xe7\x8e,#\x07c\xef\x9ax[\x00z\xef\x0f|\xdbM\x88\xc5\xb1\xff?\xf8\x01\x84E\x90\xb0\x8e\x81g\x1e\xfa\x1c@\x84\xc0\xe7\xd9\xae\xcd\xfb\\\xca\xe8P/\xf4\x8d\xd2\n\r`\xbd\x06\xe93\xb4\x03/e\x8bfK6\xa6\xa7\xd8zS\xa5\x11\x04\x18+\xf8zBD\xde\x94\x0e\xf1|\x1fG\xb3\x15X\x0cm\xfd\xa5\x80&\xbd\xb7\x8e\x96\xcf\xd8E[\xd7\x16\xd6\xbb\xd0e\xe9\x07\xde\x0fKQ\xeb\x1d\xd2/\xad@\x00\x04\x18\x088|6e\xdd\x87%\xbc\'\x9f|\xb2\xb1\xea\x83\xdf\xbc\xe1\xc3\x877\x9a3\x083\x10~\x92\'\x88\xbb\xd6\x927(\x1b\x96^C\x86\x0c\xa1q\xe3\xc6\xd1\xb6m\xdb\xe8\xb5\xd7^\xa3\x97_~\xd9c\x11(\xf9\n\xa9\xd8\xa8\x12>\xeet\xf5\x1b\x17\t\tB\x10\x04\xe0\xc4\x89\x13\xe9\x9bo\xbe\xa1n\xdd\xba\x99\xdcp\x0e\xcaV\t\r\x02\x08\x04\xe2T\xc1o\x8e\xf8\x02\xc4o\xd4\xad/\x1fG%\x05N\xd56\xbc\xf5\x8ab\x8a\xab\x8c\xad\x00\x0f?\xb5+\xcd\xfar\x8b=A@\x00\x11\x9e\xd1,\xe5\xab\xb3y\x81-o\xc3\x0f\xa0<\xc8\xcd\x91\x00\xff\xb0ual\xa7d\xca\xffn-Um\xe7\xe7\x19~Z|{xaT\x81\x11\xef2N\xe39At\xe9\xaf\x0b\x07\xfd\xab\x08(\x02\x8a\x80"\xa0\x08\xb4\x88\x80\x12\x80-Bd\xe9\t\xf6[\x00\xb2\xf5\x1f,\x00k\xeb"k\t\x17,\xc90\x06\xdd\xeb\x8e\x00\xac\\\x87\xa5\xfd\xd2\xb6\xcc\xea\xdc\x91\n\x87\x8e\xcc\xe0%L\x95\xba\xfa\xb7!\xd2\xdc\x91A\x1c\xc1_glb\x0cu\xccH\xe6\xc0\x1d\xb5\xb4;\xab\x84V\xfe\xb4\x93\xa6~\xbc\x89\xb27\x17\xd7\xbb\nK\xbf\xb0D\x0bs&\xb5\xf4\xab\x07M\xb3_@by\x13Y\xc0\x1d\xe4\x967\xa1\x06\xeb\xbe\xfe\xfd\xfb\xd3\xaf\x7f\xfdk:\xff\xfc\xf3\x8dU\\RR\xd2\x01\xf9\x8a\xf5\x1c\x0e \x0f\x90}H\xfe\x925 \xff\x84\x8cC\x9eXF\xfc\xc2\x0b/\x98\xe5\xb9\xaf\xbf\xfe\xba\xf9\xcc\xce\xce\xf6\xe8j\xb5\x9f@\xef\xfa,X\xb0\x80\xbaw\xefN\x9f}\xf6\x19]~\xf9\xe5\x063\xb5\x06D\xab\x84F\xc4\x0244\xa5\xb7\\\xaa\xf8\x02\xfc\xf9\xdbm\xf4\xeb\x9b\x07S\x97>\xa9TRT\xc5\xf7C\xcb\xd7\xea\x19\xadG\x80\x7fa\xa8\xac\xa4\x9a\x06\x8f\xe8\xd2\xfa\x8b\x028\xb3\xb6\xa2\x8a*\xb3\x8b(\xaes*\xd5\x96\xf1\xe0\xcb\x8a\xf6\xe4\xe7\x16\xa2\xfe\x96\xae\xdeM\x85\x12\xf8\xc3w\x1d1\xfcCz\x8e\x13"\xcf\xc0\xfaO\t@\x06AE\x11P\x04\x14\x01E@\x11h\r\x02J\x00\xb6\x06%\xeb\xce\x91W\xf9\x18\xbc\xd8"1\x1c\x1c\x00\xbe\xc2\xea0\x1c\xb2b\xc0f\x8b\x96\xbeg\n\x03\x94:&5\x8br\xdc\xfeh|{c\xec{\x81z\x85\xa5\x08\x0c\x1d\xd9\x8d\xcaJ\xab\xd9Z$\x82:e\x00\x08\x81\xcc\xaeu\xfb\xf5Ke\xbf~\x88\xe2[\x94SNS\xfe\xb7\x9eVL\xcf\xa6\xe5?\xed\xaa\x97;|m\xc1P\x02\xbe=\x8d\x15e\xbd\xa3\xfa\xa5)\x04@\x9e\x80,\x834f\xe1\xd7\xa1C\x07:\xe5\x94S\x8c\x85\xdfI\'\x9dD#G\x8el4+\xb1\xee\x93\xfc$\xcfFO\xf6s\xa77A)\xe4$\xca\xb9\xfb\xee\xbbM\xfa\xfc\xf3\xcf\xe9\x8d7\xde\xa0\x993gz\xac\x02A\x1c\xa2^V\x08\x08H\x88D#\xbe\xe2\x8a+\xe8\xdak\xaf\xa5\x0f>\xf8\xc0\x90\x9b J[k\xd1h\x85>m=\x0f\xb4\x07\xfa\x84\x1d}\xcdjl\xc5\x17\xe0\xb7\xef\xae\xa3;\xdf\x18\xc9V\x80\x1c\t[-\xbd\xad\x85\x99\x1f\x9d\x08\xa2\x95\xc6\xee \x0e:\xb4\x03e\xad.\xe0\x17j\xec\x07\xd0\xfd\x92\xcd\xda\xc2\x8cY\x1e\x95\xad\xc9\xa6\x84s\xd3\xa9\xb6\x14\x91\xcd\x03|v\xe3EIJ<\xd5\xe4\x95R\xee\xfb?\xbb\xd4u\r\xec|Q\x1d#[\xfc\xa0\xcf\xe14\x81\x13\x94\x82E\xa0\x8a"\xa0\x08(\x02\x8a\x80"\xa0\x08\xb4\x12\x01%\x00[\t\x94E\xa7\xd9\x8ew\x0c\x0f\x081\x18\xb7\x8da\xb4\x08\x08_\xb3\xc1D\xa8\xae6\x8a\xf29\n\xb0Jx \x93\x93\x81\xc3;\x11"\x00\x17\xed\xb5\xc1\x99xx@a\xb4\x04\xe9\xc7\x9d\xd8L\xea\x13\x92b\xa9C\x97\x14*-\xaa\xe4e\xbd\x054\xe7\xcb,\x9a\xcdA=L\x90\x14w\x9d\x80\x9f\xebFF\x94\xd9H\xbb\xa3\xado8o\x02\r\xdb\xb0j\x03\x91\x86$\x82\xa8\xbc\xf0\xd9\x07\xeb>$,\xefm(\xde\xd6pVX\xf75\xcc\xbf5\xdf\xc5\xeaK\xac\x02\xf1\x1d\xd6xH\xabV\xad\xa2\x87\x1ez\xc8D\x10\x16\xf2\x0f\xc7\xe5\xdc\xd6\xe4\xdf\xdc9 \xfa\x90\x1fp\xfb\xf0\xc3\x0f\t\xd1\x82\xe7\xcc\x99C\xe9\xe9\xe9\xa6\x0c\\\x0b|U\x82\x83@8`-\xef\xe3\x16|\xb7\x8d\xb6\xde:\x942z&Q1\x07*\xc2\xf2`\x15\xeb\x10\xc0K#D~?\xe2\x94nn\x02\xd0\xfa\xe8#\x0f\xc9)\xc4\x9d\xd4\xcb\xdfO!M\x81\xc5\xda\xb5k\xa9o\xdf\xbe\xa6LXK\xaa\x04\x17\x01\xb4)\xc4\xc9D \xfa\xa7\xf8\x02\x9c\xfe\xd9f\xba\xe6\xb1#M\xd0\xa2\xe0"\x15\xf9\xa5\xf1\xfb#\xf3\\\x18pT\x86\xa9l-|\xf4\xd9!\xeew&\x95\xbb\n\xa9*\x87#;\xf33\x8b*\xdc\xa4\x9d\xaf\xe5\xb1\x8aQq1\x14\x9d\x18G\xd9o\xce6\xd1\x85\r\x9f\xe8;\xf9\'\xd6\x7f\x9f\xb2\n\x139\xe1\xc6pk\xea\xabRz\xbe"\xa0\x08(\x02\x8a\x80"\xd0v\x11P\x020\xb8m\xefZ\x8bfc\x99 \xcax\xbe\x18Q\xc3"\x10(\xe0\x8dJ\xf6yE=\xb5\x11C\xcd:p\x040Y\x05\x89\x85 \x15C\x8f\xef\xc2Ai\x98`\xc1\x1b\xff6"\xe8\xb3b\xed\x97\x9c\x16Gi\xe9\tT\xb0\xa7\x9c2\x17\xe6\xd2L\x9e /\x98\xb4\xbd\x1e\x12\xea\xd7\xaf\x1e\x1c\x8d~\x112L\x0e\x82\xa4\x92$\xfb\x10\xb8\x02\x11z/\xbb\xec2c\xe1\xd7\xa3G\x0f9\xe4\xf9\x14\x0b?CZ\xb8\xc9\x15\x10kN\x16\xd4\xbd\xa1\x9f@\x10\x81c\xc7\x8e\xa5\x07\x1f|\x90\xee\xba\xeb.\x9a1c\x86\xe5D\xa0`UTTD\xa7\x9ez\xaa\tLr\xe7\x9dw\x1a\xa8\x80\xbd\x90SN\xc6.\\uC\xffl\xd8\xe7\x9d\\\x17\xb1R\x9e\xf2\xc1z:\xef\xe6A\x14\x9f\x12KU\xc6\xd2\xcb\xc9Z\x87\x97nxN\x94\xf28\xa8\xc7\x80v\x94\xcc\x11\x81\xb1-\x96\xf6\x96\xd6\xc4\xfd"\xa5\xb6\xb8\x92*w\xed\xa3\xc4\xc1\x19T[\x8e\xf1\x97\x8f\xcfp\xf4a\xb6\xfc\x8bb\xf2o\xcf\xbb\xf3\x08\x16\x85&\x0b\xdfyK\x1b\xf3\xe1\xd7\xa5K\x17:\xef\xbc\xf3\x8c\x0f\xbf\x13N8\x81\x06\x0f\x1e\\?\x03\xfe\x06\xa2J\x96\xb5:\xcd\xc2\xef\x00e[\xd8\xe1M\x08\x89O>\x10\x9e\xd3\xa7O7\xbe\x01\xef\xb8\xe3\x0eZ\xb9r\xa5\xa93\xea\n\x02/P\x11\xa2\x148\x82h\xdc\xb8q#\xbd\xf2\xca+\x9ee\xc2J\x02\x06\x8ap\xf3\xd7\x87\r\xbe\xb0\xf4\xe2\xfb\x14\xfde\xf2\x07\x1b\xe8\xea\x87\x8e\xa4\xecb\xfe\xddoC/~\x9ao\xc9\xc0\x8f\xe2\x99Q\xc9\xbet\xbb\xf5M\xa1\x9e\x83\xda\xd3\xfa\xc5y|\x1f\xc27l\xe0y\x1f\x90\x83{\x89ne\xd6^J>\xa4\x8b\xef\xa6vl\xe1\x17\xcd\xcf\xc1(\xf6\xfb\xbb\xe7\x9dyT\xc6\x81?\x8c\xc8h\xf8\x80\x02\x9b\xdd\x81\xab\xf0\x02\x1dK\x7f39\xa9\xf5\x1f\x83\xa0\xa2\x08(\x02\x8a\x80"\xa0\x08\xf8\x83\x80\xed\x84\x94?JE\xf05\xb6[\x00\xc2\xe2\xca\x10\x80\x18\x1eE\x90\xf0\xbc\x82\xaa\xca\x03\x9f\xccF\x10$\x8e\xae\x8aD\xa7=\xe3\x9a\x01T\xb6\x0f\xcb+1~\xf7\xd1z\xc0\xd15\xdc\xaf\x1cH?c\xed\xc7\x13\xa6$\xb7\xb5\x1f\x02z,\xfc~\x07\xc1\x1a\xc6{\x89/\x03\x81\xff|\xbe\xdb\xaf\x9f\x1d\x13\xb7\xfd\xaa\x85\xdd\x967\xd9\x01"\x01\tD\x97H\xfb\xf6\xed\xe9\xc4\x13O\xa4\xab\xaf\xbe\x9a\xce:\xeb,\xea\xda\xb5\xab\x1c\xf2|\n\xd9\'\xc4\x15\xf2\xf47:\xaf\'S\x07nH@\x0e\xb1\xc4\xc3\xf2\xdc\x15+V\xd0\'\x9f|B7\xddt\x13\x95\x94\xf0\xd2=\x16\xd4\x1f\xe7\x04"\xb8^\xc8\x9dW_}\x956o\xdeL\xdf|\xf3\x8d\xc9\x1b$#\xc8F\x15{\x10@?\x0e\x1b1\xbfmD\xd3?\xd9Dg_?\x90_\x82\xc4Py),E\xc3\xa6\x06\x8eW\xd4eiYGC\x8e\xedl\x08\xc0Z\xbb\x86E\xeenW\xbe6\x9bj\xcf\x1a\xc4\xf4\x9b\x0f\x8d\xc8\xd6\xff\xd1\x1c\xdc\xaa\x96_\xda\xe6\xbc;\x97*\x98D\xf4\xd3\xf2\x0f\xed!K\x7f\xa7\xf0\xf6+\x9c\x94\xfc\x03**\x8a\x80"\xa0\x08(\x02\x8a\x80\x9f\x08(\x01\xe8\'p>^&#x\xdbgI\xb1n\x1fk\x91E\xb5\xb8&\x10\x15J\x00\xfa\xd8\xedBs\xbaD\x84\xec\x7fDG\x1a<\xb2\x0b\x15\xe5\x96Ed\xf4_p*\xf0\xd3\x97\x90\x1c\xe3\xb2\xf6K`k\xbf_\x8ah\xc2\x1bk\xcd\x12\xdf\xbc]^\xd6~\xbct\x0b\xf3x\x9c\x1fN\xf3\xf9`\xf4 \x10K\x12y\xb61\xa2\n\xd1y\x7f\xf5\xab_\x99h\xbd\x8d\xf9\xa0\xc35B\xfa\x81\x88\x12b,\x18\xba;\xa1\x0c!M\x85\x88\xbb\xea\xaa\xab\xe8\xd2K/5\xd6zo\xbf\xfd\xb6!\xffp\x8e\x10\xaa\xfe\xea\xecMD\x8d\x1f?\xde,\xb5\x9e?\x7f>%\'\'{\xca\xf07o\xbd\xee@\x04p_@\xac\xb0\xe2<0w{\xf6\x18\xbf\xa5\xac7^\xfa\xcc\x9f\xb8\x9d\xce\xbe\x81_\x00\x15\xf3\xef\xa0Z\x01Z\x068,\xeaJ\n\xaa8\x10Hwc\xf0\xd6WQ\x00\x00@\x00IDATY\xee}_ZV\x082r?\xa8\xca7\xe5\xb9\x96\xff\xf2\xea\x12\xaan\xe1E\x02?\xdf@\xcf\xc5vN\xa5\xb2\xf5{(w\xcc\x02\xaa)\xe0\xc0mnb\xd8\x0f\xfdP \xae\xce\xe6t;\'|\xf7\x81\x89\xe4\xb3U\x14\x01E@\x11P\x04\x14\x01E\xa0\x1e\x02J\x00\xd6\x83\xc3\xf6/\xb6\x0f\\b"\xb5Ey\x02[Q\xb6\xdf\x12\xc8\xf6\x96\xd2\x02\xfcF@|A\x9d\x7f\xfb\x10\xac\xbf\xa4\x9a*W\xe4B\xbf3t\xd2\x85<\xbf1\xd6P<\'\x01\xf1\xd7\xaeS\xa2\x89n\xbc\xfc\xa7]4\xf9?\x1b(s\x01\xfb8\x12\xe1\x89\xb0\x99\xc3\xf3D\n\xfe\x10Ux&g0\xd9\xffz\x02Xb\x02+\xd1lA\xe0\x1d|\xf0\xc1t\xe1\x85\x17\xd2o\x7f\xfb[C25\xf4\xcf\x07BD\xac\xd1@l!E\xa2\x85\x9f\xaf\xfd\x05\xd8\x01K`\n\xccF\x8f\x1eM7\xdf|\xb3\xc1q\xdd\xbau&;`\x85\xe3\x81\n\xf0G4\xe2A\x83\x06\x11H\xc0\x9e={\x9a|\x91\xbf\x8a\xb5\x08\x08\xc1#\x9f\xd6\xe6n}n\xfc\xaa\xc3\x04\x7f\x9a\xf4\xde::\xed\x8a~\x14\x9f\xc0\x01\xa0\xf4\xf7\xcf2\xa0q\x8bUT\xd4R\xaf!\xed).\x9e]#T\xc2W\xa4\x87\xaf\xb3\xac\x1c\xef\x8c*7\xef\xa5\xc4!\x9d\xa9\xb6\x92\xc9\xbc\xc6\xeeq\xf3\x93\xc2V\x7f)\xf1&\xd8G\xd1\xb4\xf5\xb4\xf7\x8b\xe5\xae,\xdcK\x89\xbd\xf3\xf3a\x1b\x0fN\xbc8\xbf\x8f\xd3/\xeem\xbbl\x1e9{\x15E@\x11P\x04\x14\x01E \xf2\x11\x88T\xba\xc8\xa9-\x17\x04\x16\x80G\x87A(%\xa8\x00GZ}\x82\n^p\x0b\x13\x87\xe4CGv\xa6#\xd9\xff_!\x07\xbe\x88\x81\xe5@\x04\x08\x88\xcc\xd8\xf8hJ\xe5\xa5M\x89\xec\xdb(\x7fw)}\xcd\xd6~\xb38\xa8G\xce\x0e\xd7rKT\x13\xd10a<\xa1\xd6~\xfb\x1b\x1d\xc4\x10,\xf3@\xf45$\xa0\xda\xb5kG\x17]t\x91\xf1\xe5w\xf6\xd9gSzz\xfa\xfe\x0b\xdd[N\x8d\xd2{\x80\xa2!\xde\x01bN\x88@l\x1f}\xf4\xd1\x94\x99\x99I\xcf<\xf3\x0c=\xfa\xe8\xa3\x06{\x1c\x0f\xd4\xaa\x0cd\x14\xf2\xd9\xb1c\x87!\x01A\x06\xf6\xeb\xd7\xcf\xe4\x8b\xfd*\xd6!\x10h[Y\xa7I\xebr\xc2o\x1f\xa4`O\x19-\x9e\xbc\x83F^\xd0\x9b\xf6\xf2oe\x8c/KH]Y\xe8\xdf&\x10\xa8\xae\xac\xa5\x94v\x1c\x11\xfc\xa4\xee\xb4t\xdaN\xcf\x0b\x91&N\xf7\x7f7?\xcb\x88\xc9\xdb\xf25\xbb(yX\x0f\xaa-b\x02\xb0\xa1`\xb9/G\t\x8eNM4\x11~\xf3\xbf\\Ie\x990\xd8c\x013\t\xab@\xffD\x96\xfe\xbe\xc5\x97\x7f\xc8\t?,J\xfe\xf9\x87\xa5^\xa5\x08(\x02\x8a\x80"\xa0\x08x\x10P\x02\xd0\x03EP6\x027\xbdhA\xcdZx\x83\xdeo`\xd3\xc2\xd9ar\x18\xf5\xa9c\xf2\xc5\xbd\xbc9L\xb4n\x93j\x9a%`\\\xf3\xcb\xfe|8U\xb3\x95\x02\xfc\x13! H\xb8\n,\xf7\xd0\xfdbyyo\xa7\xee\xc9T\xc9\x13\xaf\xacU\xf94\x8d}\\\xcd\xfbz\x0b\x13*\xae\x9a\x81l1\'\xc2\x02\xab\x8d[\xbb\x00\x0b\x83\x07C\x83O\x10\x18 \xfd*++\rX\t\t\t\x84\x08\xb6\x88\xd4{\xf9\xe5\x97S\xff\xfe\xfd] \xba\xff\x82\\\xc25 \r%\x9f\x86V\x80\xf5.\xd0/\x07 \xb8\x01w\xe0\xf8\xc8#\x8f\x18\xab\xca\x8b/\xbe\x986m\xdad\xce\xc7\xfe\x86d\xec\x01\x195\xb3C\xda\xa8\xb4\xb4\x94\x0e=\xf4PZ\xb8p\xa1\xf9D\xfbI\xf9\xcd\\\xae\x87Z@@0\x0c\x17\xcb?\xef\xea\xc0\x171\xfc\xc0N\xf9p\x03\x9dpa\x1f\xf3R\xc4\xfb\xb8n\x07\x86@\x1d\x8f\xf3\xe2\xd8\xb2\xf2\x90\x13\xba\x18\x02\xd06\xafxn\xee\xae\x8c-\x00\xcd\xf2_X\xf3a\x1f\x8f\xc7\xcc\x03\x8f\xc7d\xb1\xe9\xc9T]PFE\xdfgR\xc1\x84\xd5\xfb+f\xc6m\x01\x93\x7fS9\xc3{9\xe1-\xa2\xfbi\xbb\xbf\x08\xddR\x04\x14\x01E@\x11P\x04\x14\x01\xdf\x11P\x02\xd0w\xcc\xfc\xb9\x02C!\x88\xdf\xa3!\xd7\xe5-\xff\xadq\xbfm\xb5\xbd\xa0\x96U\xb1\xf0\x0c\x9e\xa8r\x85b9\xa2\xaa\x8as\x11\x88f\xb2\xa7\x96\'\xff\xa3~{0\r<\xba\x13\xe5l/\t\xdb\x89\x1f\xac\xfd`\xc9\x97\xd2>\x81\x12S\xe1s\xa9\x9a~\xe4\xc8\x96\x88\xe4\xfb\xcb\xa2\\O#\xc0\xe2\x11b\x88\xcf\xc8\xba\xe9^\xee\xff\x90\xa8\x95\x05\xd5E\xaa\xf5\x11\x0f\tc\xe2\x84Gm%\x18zZ\xd0\x10\x00\x11\x06\xdf\x7f\xed3\x12\xe97w\x1eJ\xc5{e\xcc\x1e4\x15\x02.\xc8X\xf3\xb1eC4\x13\x1a\x1d\xd9\xda/\x96\xfb[\xd6\xdaB\x9a\xc1\xd6~3\xc7m\xa9\x17\x85:\nK\xa3\xb8\xbeb\xf1\x18p\xe1a\x98\x01\xc8#\x08,\x95\xc4\xcaO\xc8\n\xf8\xe4\x03\xd9\x87h\xbd\x08H\xd1\xa5K\x97z5\x14R\n\x9f\xc8\x07y\xa8\x95_=\x88,\xfb\x02l\x91\xd06\xc0z\xcc\x981t\xfe\xf9\xe7\x1b\x0bL\xec\xc31\xb4\x83\xbf\x82\xb6\x07\t\x88\xcf#\x8f<\x92\x84\x04\x94\xf2\xfc\xcdW\xafs! \xfe1\xc3\n\x0f\xeeN\x12\x0cj\xfa\'\x1bi0G\xac\x8d\xd6%\xc0\x965!\xb0,-\xae\xa2^\x83\xdaQ\xa7\x9e\xc9\x94\xb7\xa3\x94\xa2\xe0\xfd\xc5j\x1b9\xfc,\xe0\xf7\x81\x83\x7fT\xe7\x96R\xda!\xdd\xa8\x8a\xc9\xc0\xea\x9cb*[\xb1\x93\n\xa7m8\x90\xf8\x03\xf9\xe7\xbf\xa0\x06x\xb0\xec\xe1t\x15\xa7\x9d\x9c@\x06\xea\xd2_\x06AE\x11P\x04\x14\x01E@\x11\xb0\x02\x01%\x00\xad@\xb1\xe5<\x84\xb9\nhd\xd4r1\xb0\x16p-Y\x8c\xa4\xc5\x12\x18\rV\xf3D\xb5]:\xbf}Vq\x1e\x02\xdc\xbb\x85\x08\xbb\xf1\x99\xe1\xec#/\x9e}>\x95\xb1\xef?\xe9\xf6\xceS\xd9[#\x10\x7f\xd0?\x81-\x1a\x92\xd9\xe2/\x8agRK\xd9w\xd5\xeco\xb2h\xe9\x14\xcc?\\\x82\xdaD\xbb\x97\xb6E,\xd1.\x95m\xe2\x13d\x11\xac\xf3@\xee\x80\xf0\xf1\x96\x01\x03\x06\x18+\xbf\x91#G\x12|\xf9\xa5\xa5\xa5y\x1f\xf6\x90\x84b\xe5\x87\xbcT\x82\x87\x00\xc8?\x10}\xc0\x1d\xa4lVV\x96\xf1\xbd\xb8l\xd92\xa3D D \xfa\x02\xf2G\xbf8\xf6\xd8ci\xe9\xd2\xa54t\xe8P\x0f\xe9\x18\xbcZF^I\xb0\xa8\rG\x91`P\xf3\xbf\xddN\x97\xddSBI\xec\xb3\xae\xaa\xbc\xfeoF8\xd6\xcb\t:\x83\xec\xab\xe2\xa0h\x9d{\xb4\xa3>C\xd2=\x04\xa0-\xe3>\x0c\xc0\xb8\xd9\xcaV\xef\xa4\xda\xc22*^\xb8\x8d\xca7\xec\xb7\x827\xc6y\xf8)\x0f\x8c\xf8\x03\xacB\xfe\x15\xf2\xf6\x15\x9c\x16s\xc2\x1c%\x9c6o\xdeL\x1d;v4}H\xfbBkQ\x84%\xbf\x8bL\xc5\x15\xe1M\x0027\xc4c\x92y_o\xa5\xf3o\x19L\t\xc91T\xc9V\x80X\x1e\xac\x12\x18\x021|\x0f\x97\xf12\xe0CO\xee\xea\xca(p\x12\xaee\x85\xf0l\x07\x97\x0fk?4\xac5\x02\x92\x0fs\x91\x1cNWr\x9a\xee\xfe\xae\xe4\x1f\x03\xa1\xa2\x08(\x02\x8a\x80"\xa0\x08X\x8d\x80\x12\x80V#\xda|~\xb6\xaf\x7f\xa9\xad\xaaq\x8d\xcb"\xcc\xe0\x02K.A\x00\xc2\xc7\x9c!\x00y\xf0\x8bHx*\xa1C\xc0\xf8x\xe2vIn\x1fG\xb7\xbd|,O\xec\xaa\xa8\xa6\x92\xdb\xc9\x81F^<\x9f\xe6\t\x0b\xfc\xfbESz\xd7d\xfe$\xda\xba\xba\x80~\xfc\xefz\x9a7~\xbb\x99p\x03I!)\x98\xf6kS\xd6~\xde\x16Z \x1f\xbc\x97\x1d\xf6\xec\xd9\x93.\xb8\xe0\x02\xba\xe9\xa6\x9b\x0c\xa9\xe3\xdd\xe3@\x14IB\x1ej\xe5\xe7\x8d\x8e\xb3\xb7\xd1Vh;\xf4\xf9{\xee\xb9\x87z\xf4\xe8AW]\x05\xe3\x9b\xc0D\x96\x03\x17\x15\x15\xd1\xb0a\xc3h\xc3\x86\r\x04\x9f\x90B\x0e\x06\x96{\xdb\xb8Z~\x87p/\n\x01\x88\xedp\x13,\x03\xc6\x0b\xa1\xa2\xbd\xe5\xb4t\xfa.:\xe5\xd2\x83(w{)\x93HJ\x00\x06\xdc\x96<\xc6\xab\xae\xa8\xa1N]\x93\xa8c\x8fd\xda\xbb\x93\xfd\x002\xac\xd6\xf1r\x8dh\x88\xcc\xad\x1d\xc5"7\xccCVq\xba\x9e\xd3\x12N\x18A(\xf9\xc7 \xa8(\x02\x8a\x80"\xa0\x08(\x02v \xa0\x04\xa0\x1d\xa8\x1e\x98\xa7\xbc*-w\x1f\xb2m\xf4[\xc5\xce\x9ak8E\xda\xf8\x1a\xce\xad\x11\xe9\xee\xba\xc7\x8f\xa2\xd7\xef\x9cG\xc5\x05l\x05\xc8\x03`\xcb\x9d^\x1f\xd8v\xba\xa7\x11\x04\xc4\xc1;H\xd9{\xde9\x91\xfd\xfe%p\x94\xc7r\xe3#\xaf\x91\xd3C\xba\x0b\xf7CBb,%\xb3\x8eQl\xbe\xb0r\xe6N\x9a\xfc\xe1\x06Z5\x1b~\xc6]\x82z\xe0\xa6\x14\xbfU\xb2?\x92?A24\xe5\xcf\xef\x84\x13N\xa0\xdf\xfc\xe67&b/\xa2\xc76\x14\x90\x12 \x90\xd4\xca\xaf!2\xf5\xbf\x83`\x03\xf1\x05\xf2FHV!L\x05\x7f!{\xea_\x19\x9co([t\x1b2d\x88)\x14\xfa\x05*\xc8\x13\xfdc\xdb\xb6m\x04\x9f\x90K\x96,1\xdf\x85p\x0c4\xff\xb6r}ee%!\x85\xb3DEq\x7f\xe2\xff3>\xdaD\'^\xdc\x87b\xe3\xe1\x8b2\x9ck\xe4\x1c\xdd\xab1\xd6\xe3`U\x87\xb3\x15\xe0O\x9fn\xe6\x97o\x08\xd8\x11\x16\xe0BI0\xda \xfbfq\xba\x9a\xd3\x0e\xf7wk)F\xceTE\x11P\x04\x14\x01E@\x11P\x04\xf6#\xa0\x04\xe0~,\x82\xb1Ufw!5UuT\xcd\to\x82#I@\xf6a\xb9\xcb\x80\xe1\x9d\xe8\xa9\tg\xd1\xeb\xb7\xce\xa5\xcd\xab\xf2M\x15m\x7f\xeb\x1dI@ZP\x17\x90eB\x94\xdd7\xe6$\xea?,\x83\xf2\xb3K\x1dE\xfeA?L2\xe3\x13b(\x83\xa3$\xc2jt\xe1\x0f;\xe8\xfb\x7f\xad\xa3-l\xf9\'\x82\xba\xe0D,\xf3\r\x8bi\x93(\xee\xc7\'\xc8\x1e!\x9b@\xd0\x80\x8c\x11\xeb"\x10\x81#F\x8c\xa0k\xaf\xbd\x96\xae\xbc\xf2J\xea\xd4\xa9S\xbd\x12`\x11\xe8M\xf6i\xc4\xdez\xf0\x1c\xf0EH>`\x06l[\x12\x90\x84h\x1b!\t[:\xdf\xca\xe3B\x00\xae\\\xb9\xd2d\x0b=\xac \x01\xc5\x12\x10\x01A\xce<\xf3L\x9a2e\x8a\xa9\xa3\x94ge\x1d"5\xaf\xb2\xb22*/\x97\xf7\x86\xe1YK1\xd4\xdf\xb4r/m\xe3\xdf\xden\x03\xdaQIa\x15\xf7\xf5\xf0\xac\x8f\x93\xb4\xaec\xaa,&6\x9a\x06\x8f\xe8d\x08@[\x82\x80X_a\x10| \xfe\x90^\xe3t?\xa7\nN\xe8\x11J\xfe1\x08*\x8a\x80"\xa0\x08(\x02\x8a\x80\x9d\x08\xb4<3\xb1\xb3\xf4\xb6\x97\xb7\xed#\xf9\x9aJ\xb6\x00\xe4\x84\xa5\x8e\x86\xd1\x880"\xb0 \xbb\x9cR9\x18\xc8\x03\x1f\x9cB\xff~h1\x93:\xdb\r\xd1\x03"\xa7-\xfaj\x0b\xf6-\xe4\x8d\xf3\x1d\xaf\x8f\xa4C\x8f\xefJ\xb9\xbc\xf4\x08\xbe\x00\x9d X%\x87~\x90\x94\x1a\xc7>\xfe\xe2h_^\x05Mxs-\xcd\xfcb3\xed\xce\xaa\xef\xdf\x0fN\xd3\xdbB\x9f\x01\xa9\x04k,\x90}\xde\xc4\x0e\xf6\x81\xf0;\xe3\x8c3\xe8\xbc\xf3\xce\xa3\xf4\xf4\xf4zM\x88\xf3A\x06\xe1\xbc\xd6\x90X\xf5.n\xe3_\x80\x1b\x12\xe4\xeb\xaf\xbf\xa6\xd9\xb3g\xd3\x9e={L\x1b$$$P\xef\xde\xbdM\xa0\x8cs\xcf=\x97RRR\x0c\xc68\x17D+\xf0\x96k\xb1\xcfn\x91>\xb1s\xa7+\xe25\xca\x96}\x81\x96-d\xdf\xd4\xa9S\t\xc1F\xe0o\x10\xfd\x11\xf9\x07\xb3\x8e\x81\xd6#\xd8\xd7\x0bn\x91@\x00\x02;\xb1\x18\xff\x91-\xafo{e\xa4y!\x13q\xcb\x14\x82\xddI\x0c\xb0\x1c\x08\xa4\xa4\x9az\xf4ogJ\xc7\x8b/\xefgt(Tj\xa6L\xbcc\x03\xc1\x87y\x07\xfc\xfd=\xc2\xe9_\x9c \xff\xc2o\x8d\xbbQ]\xff(\x02\x8a\x80"\xa0\x08(\x02\xe1\x85\x80\x12\x80\xc1m/!\x00\xadgK\xdcC\xa7\xea\xea\x1a\x9eD\xba^\xa2b\xb4e}A\xc1\x05\xacai\xd1\x1c\x98\xa1\x84\xad\xb9\x12\x92c\xe9\xf6\xd7\x8f\xa3\xef\xdf\xefH\x9f<\xb7\xc2E\xe4\x98\t7\xd7:\xd2M\xb9\x1a\x82\x12\xa4\xef2\x89Cq7??\x82\x8e=\xa77\xe5\xed*q\x04\xf9\x07\xe2/\x8aI\x85\xa4\x94XJ\xeb\x94\xc8~\xa6Jh\xd2\xb8-4\xe1\xad5TRT\xe5B\x08\xa4\x0co\x81|\x88\xe4h\xbe V\x84\\\x01\x91 \t h\xc71\xc7\x1cC\x7f\xfc\xe3\x1f\x8d_?\x170\xae\xbf\xc0E\x88\x07\xecQ+?otZ\xb7\xedMl\xfd\xeb_\xff"\x04\xd6(.F`\xcb\xa6\xe5\xe8\xa3\x8f6\xe7!\x92\xb2\x10\xad\xde\xed\xd0\xf4\x95\xd6\x1e\xc9\xca\xca2\x19\x82\xa0C\xf9V\x89\xe45f\xcc\x18:\xea\xa8\xa3\xe8\xce;\xefT\x02\xb0\x95\xe0"\xa2\xb2\x08\xfaV\xb8\x8ah\xbe\xf8\xc7\x9d\x1c\t\xb8\x84\x92\xd2b\x98\xb8\xd2` \x81\xb6\'\xee\xd5r^\x19\xd1\x9d\t\xc0\xae}S){K\xb1\x13\xcd\xe8\xd0\xfc\xf8A\x81\xc5\x1f\xe6\x1cs8\xdd\xcei9\'\x10\x7fr\x9c7U\x14\x01E@\x11P\x04\x14\x01E\xc0n\x04\xf0\xf0U\t\x1e\x02\xf6/\x01f\xff/5U\xfb\xfdM\x05\xafj\xc1+\t~n\xca\xcbj(\x9f}\xce\x9dw\xcb\x10z\xfc\xf3\xd39\xb0C\x12\x98\x1d3\x944<`\xf0\xd4i\x13%\x99h\xbf\xb0.`\x06\xed\xde\x7f\x9fD\'\xfd\xa6/[\xfe\xb1E]\x88\xc1\x06\xb9\x002/)5\x96:\xf5J\xa1R\x9e\x0c\xfd\xefo\xcb\xe8\xa1s\x7f`bx\xb9\x8b\xfcc\x1dcd\xa9o\x18O\xa2[\xeah\x98\x0c"\xd8\x82\x10yB\xbcddd\xd0\x1dw\xdcA\xdf\x7f\xff\xbd\xb1B\xfb\xee\xbb\xef\xea\x91\x7f\xb0\xf4\xc3\xb9 \r\xc5\xfaL\x08\xc4\x96\xca\xd4\xe3\xfb\x11\xf0&\xff@\xe6\xddr\xcb-\x1e\xf2\x0f\xed\x82\x04RU>\xe5J\xf8\xc7\xbb\xe6\x9ak\xa8[\xb7n\xf4\xca+\xaf\x98\xddhKH0I\x1f\xf8\xeb\x83\xd8\xd1\xf6\x92\xe7]w\xdde\xac!\xad&\x19\x8d\xe2\x11\xf8\xa7\xb4\x94\x03fD\x80\xc0\xd2\x1a\xc1@*\xca\xaai\xc9\xb4\x9d\x1c8*\x81\x83xE@\xc5B\\\x05<~\xaby\xc5G\x1aG\xb4\xef3\xa4\x83\xd1\xa6\xd6Y\xa3z\xb42\xde\xbb\x81\xfc\x83\xcf\x96\x878\x9d\xc5\t\xe4\x1f\xc8@\x10\x83\xc2\x0f\xf3\xa6\x8a"\xa0\x08(\x02\x8a\x80"\xa0\x08\xd8\x8d\x80\xb3\x86\nv\xd76t\xf9\xcb\x00\xc7~\x02\x90\xc9?\x10"\xf0\x99\x17\xc9\xc3*3?fT\xf7l-\xa6\xdeC;\xd0\xd3\x13\xce\xa4QW\xf63-l8\x1e\x8c\x8cU\xacA\x00>\xffx\xb9lRj<=>\xeet:\xfcD^\xf6\xbb\x8b#\x0e\x82T\x0b\x91\xd4\xb2c)L*S\xd2\xe2\xa9[\xbfT*\xde[I\x1f=\xbd\x9c\xee\x1b\xf5=\xfd0\xe6\x17\xb3,\n\x16\x8b\xa6\x1bp\x87\xa8\xe1s#M@\xaa\x80H\x11\xb2\x08$\x9e\x04\x0c\xe8\xda\xb5+\xddv\xdbm\xb4z\xf5j\xca\xc9\xc9\xa1\xd7_\x7f\xdd\x04\xf4\x00\x06\x12\x94B\xc8%\x90R\x92G\xa4a\x14\x8a\xfa<\xfa\xe8\xa3\xf4\xc9\'\x9f\x18"Mp\x95`\x0e [\xb1-\xcb\xab\xbd\xdb\x10\xed$\xd1x\xe1/\x0f\x82\xe3B\xe4\xdaQ\x17\xf4\x01\x90\xbe\x10\x94o\x97\xa0\x1c\xc1\xe2\xe4\x93O\xa6]\xbbv\x99\xefv\xd6\xcd\xae\xba\x043_\xf1\xff\'\x04j0\xcb\xb6\xba\xac:\xf7\xe3b\xda\xff6\xb0\x9b\x92\x1a\x0e\x06\x12\xba\xe7\x87\xd5u\x0bi~\x0ccyi\x15\xbb\xe3\xe8b\xd4\xa8\xe3gu\x88\x05\n\x80\xd8\x13\xab?D\xf4\xfd\x86\xd3\xc9\x9c\x9e\xe3\x84q0F\xa8\x1a\xe9\x97APQ\x04\x14\x01E@\x11P\x04\x82\x8d\x80.\x01\x0e.\xe2\xb6-\x01\x96!_\x15\x13\x80U\xfcF8.\x81\xfd,\xf1?\xd7\xa2\xc7\xe0V2\x98\xa5\xc12\xad0\xaf\x9c\x12\x92b\xe9\xc6g\x8f\xa1CN\xecB\xef?\xbc\x98\x03\x86\xb8\xc6\x96\x988\t\xd1\x11L\xbd"\xa2,\xcc\xcf\xccP\xbe\x8e\xba\xf4N1\x96\x7f\x9d\xd9\xcan\xef\xee\xb2\x90-\xfb\x05\x11\tR/\xa5C"%\xb3\xd5\xdf\xd6\xcc\x02\xfa\x98\x97\x80\xcf\xf9:\xcbXB\x00w\x10\x7f \x81%PID\xb4\x85W%\xd0\xa7\xb1T\x14$\x92w\xdf\xee\xde\xbd\xbb\xf1\xe9w\xce9\xe7\xd0\xa8Q\xa3\xbc\xae\x00\x16\xfcb\x80\x03M\xe0:!|\xea\x9d\xe0\xf0/\xa8\'\xf4\xf7\xae/T\x06\x16 \x96\xf0\x89\x14*\x81\xef>`\xbbu\xebVz\xe6\x99g\x8c\x1a\xd0\xa79\x82K\xea"\x9fB\x90\x81\x1c;\xeb\xac\xb3\x0c\x81\xfb\xe6\x9boz\x8829nu\x1d%\xdf\xbc\xbc<\x93\xb5\xe8cu9\xc0\x02}\x0f\xed\x88\xfe\x99\x99\x99i{\xdd\xac\xaeC\xb0\xf2\x936()q\xf9-\x05n\xe8c\xe1,\xe2ou\xd7\xa6}\xb4iE\x01\xf5\x19\xda\x9eJ\n*\\\xfe\x8a\xc3\xb9b!\xd6=\x86\x7f\xff\x10 m\xb0\x9b\x00\x0c\xe1\x8b_\x8c\x16`\xf1\x87y\x85\xfc\x18O\xe6\xed\x178\xe1\x13\x82\xb7\rB\x0e\x9a\x1d\xfaG\x11P\x04\x14\x01E@\x11P\x04\x82\x8b\x80\x12\x80\xc1\xc5\xdbv\x0b\xc0\xea\x8aZ\xaa\xae\xa8\xa1x&\xc4\xdaJ@5,\xef\xac\xe4%\xc1y;\x8ai\xc4\xd9=MT\xda\x8f\x9eYF\x8b8\xea\xab\x99H\x81\x1c\x00\x1d*,ip\xdb<,K\xf3v$>\xe2\x9c^t\xe3\xd3G3\xc1\x11M\x059\xe5!!\xff`\xf1\x07\xe6/\xa5}\xfa\xe8\xa3\xb0\xeb\x97\xad\xad\xab\x15\xe7\x15\x14\xb8"\x96K\xff\xb2"\xcfP\xe6!~d\xa7\x7f\xb4\x91n\x7f\xc3\x1d\x0c$\x94\nEB\xd9lK\x871_\xa7\xeeI\xd4\xaes\x12\x15\xe5\x94\xf1\xef\x04\xdc\x07\x04\xa5r \xf3D`\xd5\x87\x81g%\xa7I\x9c\xfe\xc9i\x1e\'<\xacp\x0c\xa2\x0b\xbf]8\xe8_E@\x11P\x04\x14\x01E d\x08(\x01\x18\x1c\xe8e(V\xe4.\xce\xfa\x99\xa9{\xb4\x07\x1f;\x15L\x86\xa5u\x92\x11\xa0\xf5E\x05\x072\xdfJ\xe19%K\x14\xed\xddUNI\xed\xe2\xe8\x0e\x9e\\\xfc\xfe\xf8c:\xf5\xd4S\xe9\x0f\x7f\xf8\x83\xe5\xf5\nHA\x07\\,ml\xb7Uf\xa8\xaa\xba|\xe6.\xca\xd9\xca\xc1@\x929\x18\x08\x8fW\xf0lV\xf1\x1f\x81\xeaj\xbe\x8fc\xa2\xcd2\xe0y\xe3\xb3\x08~\x92\xeb\xd8\x15\x8c\x8d\x82\xcc\xcd\xb0\xca\xab\x8c=\xbc\xfd9\xa7/9M\xf3\xda\x8f\x1fe%\xfe\xbc\x00\xd1ME@\x11P\x04\x14\x01E \x94\x08(\x01\x18\\\xf4\x0b\xed.\x0eK$+\xcbae\x11\xd1.\x00\x9b\x84\x11Q\x82\xb1\xfc\xb7\xa2\xa4\x8a\x8e;\xaf7\r\x1d\xd9\x85\xbe};\x93&\x7f\xb0\xde\xf8\xb1\xc3\x85fp\xacD\xe0\x01\x18\x8au\x06L\x072z&s\xa4_^R\xcd\xf8\xc1\xdf\x1f\x1c\xb6\x07\x93\xfc\xf3X\xfc\xa5\xc6\x19Bw\xcb\xea\x02\x9a\xcc\xbe\xa3f\x7f\xb1\xc5\xa3\xb7\xc7\xe2/\x82\xdaR\x88$\x90$ \x96\xbc-\xfdN:\xe9$\xba\xfb\xee\xbb\x0fX\xde\xebm\xe9\x07\x02\xcc\x9b\x04\xf3\x80\x15\x06\x1b\xa8/D0\xc8\xce\xce\xa6\xb7\xdf~\xdbX\x89\xfd\xf2\xcb/\xcd\xd6\x00\xa4\xe8\xa1\x87\x1eJ\xbf\xf9\xcdo\x08\x018\x06\x0c\x18\xe0\x89b,\x84\x93\xe4\xdblF~\x1c\x14+\xba\xc5\x8b\x17{\x88Z\xa9\x8b\x1f\xd9y.\x81\xdehK\x90\x9e#G\x8e\xa4\x15+V\x182\x13\xfb\xad\xaeKnn\xae\xa5\xba{*\xd1\xc4\x06\x08.`\x84h\xd4\xc3\x87\x0f\xa7\x11#F\x98\xa5\xc1\xe1\xdaw\x9b\xa8\xa6\xdf\xbb\xa5}q\x0fD\x92\xe0%\r\x82\x81\xe0\x85\xd2\x9ay\xd9t\xc2E\xfd\xa8\xac\x84\xa3d+\x01\x18P3\xe3\xf9\x1c\x17\x1fMC\x8e\xcb \x10\x80f\x91m@9\xb6x1\x18[\xa4\x9d\x9c\x10\xd0\xe33N\xdfs\xda\xcd\t"\x16\x7f\xf8QW\xf2\xcf@\xa2\x7f\x14\x01E@\x11P\x04\x14\x01g \xa0\x04`p\xdb\x01\x04 \x96L\xc8\xe0\xc8\x96\xd2a\x05\x18\xc5DX\x08}\xc1\xd8R\xaf\xd6f*\xd6\x80y;K)19\x96\xae{r\x18\x9dpA/\x9a\xf0\xce:Z2e\'\x93Y.\xa2A\x89@\x17\xa2\xb2\xdcW,\xe8.\xbcm\x08\x9d\xfb\xfb\xc1\x14\x97\x18C{\xb6\x970\xd9\xc0K\xa8m\xed\xb1\xfb[\x96\xb9\r\x16\x0e\xee\xc1>\xfe\x12\xd9\xc7_6\xfb\x8b\xfa\xe0\xa9e4\xf7\x1b\x9e\xd4\xb8\x05\xd6"\x91f\xf1\'\xcb[\x1b\xfa\xf9\x02\x99u\xe5\x95W\xd2E\x17]$\xd57\x9f \x81@\xfc\x85\xb3\xa5\x9fw\x85\xbcI-\x10^\x0f<\xf0\x00}\xf9%\x0cI\xea\x0b\x88\x11$\x9c\x0f\x91O\x04\xd6X\xbat\xa9I\x8f?\xfe8\x1ds\xcc1t\xc9%\x97\xd0_\xfe\xf2\x17\xcf\xd2aY~*\xd6U\xf5s\xf6\xff\x9b\xe4\xfb\xe3\x8f?\x9aL\xbc\xf5\xf3?W\xd7\x95\xc8\x1b\xa4\x18\x96\x02\xc3/\xe0\xe4\xc9\x93M\xfd\x85t\x0c4\x7f!*\xc5\xfa\x0fe\xa1L\xbb\x05\xe5\nNg\x9f}6\x81\x80D\xd9V\xd5\xcbn\xfd\xed\xce_\xda%\x12-\x00\x99\xff3c\x93\x99\xe3\xb2\xe8\xf8\xf3\xfbPL\\\x90\x1e.v7Z\x88\xf3\xaf\xe4\x97\x9e=\x07\xa4\x19-\xf0,\x17\x92\xddb\xb50xB\x0bb,\xfb\x14\'\xfcHo\xe1$\x82\xc6\xc4q\xfb\x7fD\xa4D\xfdT\x04\x14\x01E@\x11P\x04\x14\x01\x9f\x10\xd0\x91\x97Op\xf9}\xb2\x8bq"\x82C\x1f[\x06F0\x9e1\x03k.\x00\xfe\xf0@\xda\xb4U\x02PZ)\x86I\xd0\n\xb6\x86\xdc\xc3K\x8dz\r\xe9@w\x8d>\x91\xeey\xf7$\xea9\xb0\x9d9\xc5E\x042\xb9\x05\xeb\x03\x0cY\xdb\x98\x98(\xbe\xe8&n\x9fy\x07\x1d\xda\x81\x1e\xff\xe2\x0c\xba\xfc\xbe#L@\r\xe3\xef\x0f\xfd(\x08\x02>\x07\x93\x96$^\xe6\x8b\x80#y;J\xe8\xdf\x0f,\xa4\x07\xce\xfe\xdeC\xfe\x99>\xcd\xea\xc0\xca\xd5m,\x16\x04\xcd\xec)\x02\x933!\xb3P\x02\x88?$\x90 g\x9ey&\x8d\x1f?\xde|\x87\x8f4!\xff@\xcc\x80\xf0\x12\xf2\x04\xd1{\xad&\xb3\xec\xa9m\xf3\xb9J}p\x16\xc8;,y\x15\xf2\x0fx\x00\'\xd4\x13\t\xf5\x97%\xd1\xd8\x96\xfd\xf8\xc4yB\xa4.\\\xb8\x90\x1ez\xe8!JLL\xa4\x87\x1f~\x98\n\x0b\x0b\r\xb68\x0f8\n\xc1\xd2\xbcf\xbe\x1d]\xb4h\x91\xb9\x00:[)\xd0\x17z#2\xb0\xf8\x18\xb4Z\x7f\x04\x1e\x81X\xad{s8\xa0\xfd\xd0f\xf0=\x08\x92[\xc4\xea\xbaI\xbe\xe1\xf4\t\\ vFf\x0e\x15\x1e\x12\x91}\xdd\xfc\x1c\xca\xe6g3\x02xqWP\t\x00\x81h\xf6\xcf[Z\\C=\xfa\xb7\xa3\x0c\x0e\xd4\x05\xe1\x9f\x0c\xbb\x04\xe3\xd9DN\x08\xec\xb1\x85S<\'!\xfe\xd0\x92\xb6\x8cq9_\x15E@\x11P\x04\x14\x01E@\x11\xb0\x00\x01%\x00-\x00\xd1\x87,\xc4\x02\x10\x97\x08)\xe8\xc3\xe5\xcd\x9fj\x88,>\xa5\xbc\x94#R\xb2?\x18\xcb\x0bh\xbexG\x1e\xc5<\n\x16c\x88\x14\x9c\xbf\xbb\x94\x0e\xe5(\xc1O~}\x06\xfd\xfe\xb9\x11n"\x90\xc9$X\x04\xf2\x7f\x10\x86mA\x0cY\xc2\xb3\x03C\xfcq\xbd\xd3\xd9y\xf8uO\x1dM\x8f~2\x8az\rnG{\xb2\x8a\xa9\x92#I\x07c\xc9/&~\xb5\xec\xab\x08\x11}3z\xa6Pqa%\xbd\xf7\xe0"z\xe4\xbc\x1fi\xd6\xb8-\xa69\x8c\x05"\x88?\x10\x95\xfc?\x9c\x05\x13{\x10w 9@\x80 AN9\xe5\x14z\xe7\x9dw\x08K\xfe`\xe5u\xc1\x05\x17x\xc8\x18,\x03\xc6\xf9\xdedX8c\xe0\xad\xbb\x90[ :\x0e9\xe4\x10\xfa\xdb\xdf\xfef\x0e\x0b\xb9\xe9Mz6F\x0ca\x9f$`)\x16\x94b\x19\x89\xeb\x9f}\xf6Y\xea\xd0\xa1\x03=\xf1\xc4\x13&o\xe0\x88{\xa0\xb1\xfc\xbcuk\xcd6\xf2\x10\xd2q\xf3\xe6\xcd\xad\xb9$\xa0s`\x19\x89r\xd0\x8f\xa4\xef\x04\x92\xa1\x10~YYY&\x1b+0\xf1E\x1f)\xef\x8b/\xbe0K\xbd\xadj\x17_tp\xe2\xb9\xc0\x01"K\x80\xadhk\'\xd5S\xea\x87\xdf\xf8\xb4N\t\xfc,R\x060\x90\xf6Aw\xa9\xaa\xa8\xa6\x0e]\x93\xa8\xf7\xa0\x0e\xae\xac\xec\x19\xdd\xa3c\x82\xe0K\xe0t\x06\'\x94\x82\xefh\xc00\x7f:s\rT\x14\x01E@\x11P\x04\x14\x816\x80\x80=C\x846\x00\x9c\x9fU\xdc\xc7\xd7\xb9\xc2w\xfa\x99As\x97\x89\xb1\x16\x96\x00\xb7E\x8b\xb6\xe6\xb0\x89aB\x14R\xc8QlK\n\xaa\xe8\xe4K\xfa\xd1\xe3\x9f\x9fN\xb7\xbcp,u\x1f\xe0\xb2\x08\xacq;\xcd\x86e\x9cX\xc75\x97g8\x1d\xc3\x04A\x08bL\xbak9%\xa5\xc5\xd1\xd5\x0f\x1dA\xcfL8\x8bN\xbf\xaa?\x95\x16UQq^\x85!L\xdd\x06(\xb6U\x11\xf3=\x10\xaf\t\xec\x04\xbes\x9fT*\xca\xaf\xa0\xcf\x9e_A\xf7\x9f1\x89~\xfa\xccE\xa4x\x13\x7f\xacn\xd8\n\xc8\x1a\xb1\xe8\xc1D^\xfc\xfa\xf5\xea\xd5\xcb,Q\xdd\xb6m\x1b\xfd\xf4\xd3Ot\xcb-\xb7P\xa7N\x9d<\xc4\xa0\x90#B\x86\x85-\x00\xcd(\x0e\x02\n\x01.\xfa\xf6\xedKk\xd7\xae58\x81\x1c\x10\xd2\xb3\x99K\x9b=\x04"P\xc8E!\xb9\x9ez\xea)\xea\xde\xbd\xbb!Xq1\xca\xc19\x81\x8a\x90\x19\xb2\x8cV\xda-\xd0|\xbd\xafG\x9e\xd2\x87\xae\xb9\xe6\x1asH\xbe{\x9f\xe7\xeb\xb6\xe8*\xe4\xa5|\xf75\x1f\x7f\xcfGy\x82\xdf\xff\xfd\xdf\xff\xd1\xce\x9d;-#7\xfd\xd5\xc9I\xd7\xed\xd8\xb1\xc3I\xeaX\xa6\x8b<_\x16N\xdaF%\x85\x15\x14\x9b\xc0\xcb\xbf\x95\x03\x0c\x0c_~\xc6W\x96T\xd3\xa0c:\x99|\xc4\xd5I`\x996z5H@\xc8\xb1\x9c\xd0j\xdar@CE\x11P\x04\x14\x01E@\x11\x08\x13\x04\xd4\x07`p\x1aJ\xe8\x0bf\xe6\x08$`\xaa\x1d\xc5\xc2@\n\xb2/\x8f\xa3\xde\xd6a\xc9\x9c\xeb\xbb\xfe\xdd\x8f\x80\xf8\x8f\xcb\xddQL\xf1\t\xb14\xf2\xfc\xde&-\x9d\xba\x93\xa6\x7f\xb2\x89V\xcd\xce\xf6,\x89\xc5U\xb0\n\xacq[\x08\xee\xcf%|\xb6\xd0\x07@\xfc\xc1\xca\x8eP\x0f\x96\xf4nI4\xea\xea\xfe4\xea\x8a~\xd4\x8e\xad/\n\xf7VP./\xb9E]\x85$\xb4\xb3\x86 Z\x13Sb(-=\x81\xf2v\x95\xd1\x87O-\xa5\xa9c7\xb2\x8e\xaey\x84\xb4\x91\xb1\xf8\xb3S\x11\x9b\xf3\x16\xcb0\xb1JCq]\xbat\xa1k\xaf\xbd\x96\xae\xba\xea*\x13\xf8\xc0[\x05\x90^ \xab\xac v\xbc\xf3u\xe26\x88P\xd4s\xd5\xaaU4l\xd80\xa3"\xf0\xf2\xc6\xca\n\xbdA0\t\x11\x08\xa2i\xf7\xee\xdd\x04\x9fs\x08\x162v\xecXJJJ\xf2X\x02\n\x11\xe5K\xb9\xa8\x07\xda\xac\xac\xac\xccD\xd2\xc5\xb5vYkI\xbes\xe7\xce\xa5q\xe3\xc6\xd1\xa5\x97^j\xea&\x04\xa7/z\xcb\xb9r-Hh\x88\x94!\xc7\x83\xf1\x896\x82\x1eh\',w\xc7\xf2m\xf4\ror0\x18z8\xb1\x0c!\x00\x81E$\x89y\xa6\xf2[\xca\x9c\xed\xa5\xb4~Q.[\xe6w\xa3\xbd\x1cl*F\x98\xc1H\xaal\x90\xea\x12\xc5\xd8\x95\xf1\xea\x0f\xacr\x80\xd8\xd8e\xc4p\xe0\x04.\x06\x96\x80\x15\x9c0\xda\x8c\xacN\xca\x15RQ\x04\x14\x01E@\x11P\x04"\x11\x01\xa5\x88\x82\xdb\xaaq\\\x1c"\xa6\r\xe5\x84\xc1\x92\xa5\xf8#\x02.\x88\x9e\xb3\xaf\x1f\xc0\x96]G\xd2^^\xf2\x1a\xed\xb6|\xe3\xb2T\x1a"\xc0|S-\x9b\x1dD\xf3\xe4\xb3C\x06/C\xe2\x11\xf3\x8e\x8d\xfbh\xe6\xa7[h\xdewYT\x9c_\xe9\xb9\xc2\x90\xa9\xc2\xa8\xf2y6\x0e\xae=e\xfa\xb3\xe1\xad\xa7\xf8\xf6\x93|\xfa\x0c\xed\xc0\xc1=\x06\xd1\x91\xa7u\xa7\x94\xf4x\xda\x97[N\xe5\xec/2\x06\x17\xc9\x90^N\xb6\xfa\x93\xb1\xaea\xd0\xe2\xd8\xe1;\x08\xc8b&\x1dA\xb8~\xf9\xda\x1a\xaa\xa9r\x13\x7fly\x896p*\xb6-A\x02\x02IH$o"\x05\x11j\xe1\xd7\xef\xde{\xef\xa53\xce\xc0\xaa\xa9\xfd\x02\xc2\x0bd\x87\xf7\xb5\xfb\x8fF\xe6\x96\x10;\x1b7n4\xd1zQK!\x80\xec\xae1\xb0\x96\xb6i\xdf\xbe=}\xf5\xd5W4j\xd4(S,\xf6\xe3\xb8/"\xd7\xc0\xfa\xafG\x8f\x1eTQ\xc1\x16\xb4^e\xf8\x92Wk\xce\x95\xbc;v\xech\xfc\xc3\xc9w_\xf5nX\xd6\x91G\x1ei\xa2\x0cK~\r\x8f\x07\xe3;\xee\x01\xf4\x8d\x17^x\xc1X\xc6\n\xb6\xc1(\xdbIe\xc8\xfd\x01\x9d\xe4\xf7D\xb0q\x92\x9e\x81\xea"\xe3\x95\xd3\xae:\x98\xae\x7f\xf2h\xda\x9b\xcd\xe3\x15Y\xc6\x10h\xe6m\xf4z\xf8\x02D\xe0\xb3{N\xfe\xd6X\xf4\xe3\xd1n\xe3\xf3\x14\xe6\xd3x{\xb3\x8a\x13\xc6\xb2J\x002\x08*\x8a\x80"\xa0\x08(\x02\x8a\x80\xd3\x11\xc0C[%x\x08`v\xf9\x13\xa7\x938\x81\xf5\xf0m\xb6\xc9\x174\'\x18<\xc3jj\xe4\x05\xbd\xe9\xa6\x7f\x1ck\x96\xbb\xfa8\x9fm.\xfb\x88>V\xc3\xd6g\x88F\x98\xc4\x83\xe7\xe4\xf6\xf1T\xcc\xcb\x84\x97\xcf\xd8EK\'o\xa7\x05\xdf\x1f\xb8\x0c\x0b\x93\x17\xb4\xa0#\x08+V%\x9aG\xfah\xebj\xf72fi\xac\xe4\xf6qt\xcc\xafz\xd3\x88_\xf5\xa0\xc3N\xee\xc6\xcbnk\xd9\xcf^\x15\x07\x8a\xe1H\xd1|A0\xfa\x07\xac=\xb0\x04\xbb}\xe7\x04\xf6STC3?\xcf\xa2\xef\xff\x9di\xac\xff\xa0\'\xfa\xad#p\x14\xd0|\xfc\xc4\xe4\x1c\xd6k\xb2\xb4W.\xff\xd5\xaf~e\x82\x1b\xc0R\xab];\xd72s\x1c\x83\xa5\x13\xea\x0b\xd2K&\xf8rM\xa4\x7f\n\xa9\x03\xa2\x0c\x84\x19\x88\xb3`\x91\x7f\xde\xd8z[\x1b\xdew\xdf}\x9e\xe0\x1ah\x1b\xe8\xd3Z\x01\x81\x8b\xbc\xb0t\xb5g\xcf\x9e\xe62\xbb\xc9\x1a!\xe9\xfe\xf0\x87?\xd0\xdbo\xbf\xddZU\x0f8\xcf\x9bhB\x1d\xc4R\x12\xfbC-X\x92\xdc\xb7o_C\xd6\x06Jn\x86\xba.\xbe\x96/\xed\x82\xf6@\xbbD\xac\xf0s\x0b\x94QBR\x0c\xbd:\xf7\x02\xaad\x1fv5U\xa1\xef{\xe1\x8c7\xbf\xc3\xa0\x0e\x9d\xe3\xe9\xad?-\xa0\xc5\x93w\x90\x90\xac6\xd4\t\r\x85\x16\xbc\x99\xd3{\x9c\xf0\xa3\x19\xb8?\x05\xceDE\x11P\x04\x14\x01E@\x11P\x04\xecE \x82G\x97\xf6\x02\xe7g\xee \xfdr\xfc\xbc\xb6\xc5\xcbd\xe8\\\x98SAQ<\x89\x0b\x06\xb9\xd3\xa2RarB\x0c\xbf9\xc7d\xa4d_5\x15\xb3/\xbc\xf8\xf8h:\x9e\x89\xd4\xe3\xce\xebEW\xed)\xa7_\x16\xe4\xd0\xbco\xb7\xd2\xc6ey\x86\x1c4Kj\xdduc\xfe\x87\x85\xff\x98O\xde4\ra\xbd%\x9b\xab\x1c\x14\xe5.\xc8\xab\x1c\xf8\xf4\xc3\xe0\x1f\x92\xdc.\x8e\x0e\x19\xd9\x85N\xbe\xbc\x1f\xf5?"\x9dR;&RuU\r\xe5\xb3\x85\x05\xfc\x02EGE\xf3r_K\xb9gW\xc1\r\xfe"Z/T\xed\xd0%\x89?\xebh\xc9\xe4\x9d4\xee\xa5\x95\xb4kK\xb19\xd3E~Ao\xe9\xb9\r2p\xf0W\x90\x12HB\xe6\t\xf9w\xd0A\x07\xd1\xf5\xd7_Ow\xddu\x97\xf1\xe7\'U\x10r\x05u\xf6\x85`\x92\xeb#\xe5S\xc8\x9c\xf3\xce;\xcf\x90\x7f\x82a\xb0\xeb\'\x96\x97 $aq6s\xe6L\x9a6m\x1a%\'\'\x1br\xd6Wb\x16\x84f\xb0\x04:C\x104\xe6\xa6\x9bn2K\xc9\xd1\xbf\xfc\xedW\xe5\xe5\xe5\xa6\x1f#\xcfP\x93\x7f\xe8\x0f\xa8\xdf\x85\x17^\xe8\xb1H\x14B\x0c\xfa\xb5\x05A\xfd\xd1\x96\xdb\xb7o\x8f\xec\xea\xba\x7f\xf6+\xd8\n}\xe5\xac\xddt\xd4\xe9=\xa80\xb7LW-\x04\xd0\xeax\xc1\x17\x1b\x17CC\x8f\xebb\x08\xc0\x00\xb2j\xe9R\xfc\x08\x81\xf4\x1b\xc9\t\x04\xa0\x8c~xSE\x11P\x04\x14\x01E@\x11P\x04\x9c\x8c\x80\x12\x80\xc1k\x1d\x0c\x900\xe4\x15\x02\xd0z\xd6\xc3\x9dcQ^\x19\xd5\xf0$\x02\xe4\x8b\x03\x8c9\x82\x87\xb0\x05%\xb9HS\x04!\xa8\xa3\xdc\xed%\xfc\x06=\x9a-\x14bi\xc49\xbd\xe8\xc4K\xfb\x19\xab\xca\rKsh\xc3\xe2\xbd\x94\xb9p\x0fmX\xba\xd7\x8d1\x83\xdf\xa0E\x81\xbfD\x166\x1c\x17\x0f\x99=\xa7\x98\r\xcf7/\xcd\xf9"\xd7\x7f\x8f}(VE\xf1\xfc~\xbfo\xc2F\x1a\xb5\xffQ\x9dh\xc8\xb1\x9d\xa9\xff\xb0\x8e4\x90\xb7;tI\xa42v\x08^\xc1>\x81\xe0\xdf\x8f\xd7:\x1b\x0b\xc7`\xf8\xf8s\xf1\x13u\x94\xda!\x81\x12Sch\xd5\xacl\xfa\xfa\xb5\xd5\xb4\x9e\xb12\x82\xfa18\r\x97({\x81\xe0\xd8M\x10\x14H \x90\x84\x88A\x90\x8e\x9bo\xbe\x99.\xbf\xfcr:\xed\xb4\xd3\xea\xe9.~\xfd\xfc%g\xeae\x16\xe6_\x80\x17\xb0{\xf9\xe5\x97i\xea\xd4\xa9\xa6\x0f\x08\x86\xa1\xa8\x1a\xcaF?D\x9a?\x7f>\xf5\xee\xdd\x9b\xa6O\x9fNG\x1cq\x84\xcf\xea\x94\x96\x96\xfa|M \x17\x88\x05\xe3%\x97\\B[\xb7n5\x84\x91\xe0\xdb\xda|\x85X\x83\x1fF\xa7\x88\xb4\xc9\xca\x95+M?\xb9\xe7\x9e{\x9c\xa2Z\xd0\xf4\x10\xf2Y"3\x07\xad\xe0\x10\x14d|\xec\xb2\xd5\xfa\x9co\xb6\xd2\xf1\x17\x1dD\x05\x1c\xa4K%0\x04\xaa*k\xa9\xf7P\x97\xc59^T\xf2\xe3v\xff\xb8#\xb0\xac\xbd\xaf\x96\xc1\xcb!\xbc\x13~\x00\xe1/\xc5\x97\xa2p\xae\xb7H~\xde\xfbt[\x11P\x04\x14\x01E@\x11P\x04l@@\t@\x1b@m"K\x19\x1c\t\x01\xd8\xc4i\x81\xecv\x8d\xa1\ns+\x98\\q\x05\x01i\x84+\n\xa4\x806s-\xf3\x14X\x9bj\xea[\xce$Zy)\x07Va\xeb\x84\xf8\xf8X:\x82\x97\xd2\x1e}v/*\xe3\xa5\xb4e\xc5U\x94\xcd\x16mk\xd9Bp\xc3\xd2\\\xda\xf1K\xa1\t\xc2R\xcdK\x8a\x81}\xb5\xcfK\x9a\xf8"\xd7\x7f\xd7"q\xd6\xc0m\xd8gt\xc1\x92\x9e\x14\x8e\xde\x9b\xd1+\xc5\x10}C\x8e\xebL}\x0fK7>\xfd\x92\xd3\xe2\xa9\xaa\x9c-\x18y\xf9r\xf6\xd6\x12&60\xf8gk?\x0e\x02\xc2\x8e\xfe\xcc\xf5v\xfe\x01\xf1\x07R!95\x96R\xda\'\xd0\xb6\xcc\x02\x9a\xf0\xf6:\x9a\xff\xddVO\xb1\x86\xf8\xe3sBmi\xe4Q\xa8\x15\x1b \xad \'$\xe1\xfb\xf0\xe1\xc3\xe9\x8e;\xee0\x16\x7f2i\xc7~\x90\x83B\xf8\x81\x1cTqa\x07\x1cw\xed\xdae|!\x02\x13\xe9\x0b\xa1\xc4\x07\xfd\x10\t\xbaa92|\xe1}\xfc\xf1\xc7&H\x0b\xf4\xc21\xef\xb6mJW\xb4y0E,\x18\x11\xbc\xe3\xf6\xdbo\xa77\xdf|\xb3Uzz\xeb(\x84\xe1\xb2e\xcb\xccn\'\xb4\x87\xb7~\xf0\x99y\xf5\xd5WS\xb7n\xdd\xcc}\'\xf7\xa1\xf79\x91\xb8-\xed\xb2i\xd3&G\xb6\x8b\x95\x98\xe3\x99\x01Y\xc3\xc1\xb7vo*\xe4\xc8\xf4\tT^R\xc5\xf7\xa3\xfd\xcf+W\xc9\x91\xf5\x17>\x9fKx\x05C\xb7~i\xd4\x9e-\xef\x0b\xf7\x94\xc1?\x08\xff\x00\xbb\xc6\x86\x16\xd6\xd6\xf5P$\x1a\xc0y\xf6\xe5\xb4\x9e\x13\xf6IA\xf2\xc9\xbb<\xfb\xb0\r\xc11\xef\xe3f\xa7\xd7\x9f\x86\x8d/\xdf\xe5S\xaeo.\x0f\xaf\xectS\x11P\x04\x14\x01E@\x11P\x04\xbc\x11P\x02\xd0\x1b\r{\xb7e\xf0\xb2\xc7]\x8c\xe5\x83\x17\xc9\x10\xc1+`]\x05\x1fo\xd2\xd2yV\xd6\x17:C\xdez\xeb-\x13\x11\xf8\xf4\xd3O7\x98\n\xf9\xdcRYr/\xce\x993\xc7\x9c\x8a\xeb\xa4\x1e-]k\xe7q\xe8\xe5\xdd\x16\xb0\xcaD\xff\xc1\xfe`\xe2kg\x1d\x9b\xcb[\xdae\xcb\x96-\xe64\xa7\xb4Ks:\xfb{\xcc5N\x89b\xff\x7f5\xb4\xe6\xe7<:\xf9\x92>\xfcRM\x8c\xc9\xfc\xcd\xb5\xed^\xc7\xde=x\\PM=\x0enG=\xfa\xa5\x98g1\xc6/\xbc2\xd8j\xc1\x80\x08\xb9v\xe6\xd4\x9f\xd3:\xf7w\xfehQpm*\'\x19\x13\xe3\x02\x98~\xe2\x81\x807)2\x94\xe5M#\r\xbf\xcb~\xe4\x83e\xc8\xd0\x03\xa9\xa9\xf3\xf8\x90\x8a"\xa0\x08(\x02\x8a\x80"\xa0\x08\x08\x02J\x00\n\x12\xf6\x7f\xca`G,\x00\xad\x1f\xacx\xe5\x88\xe5\x9f\xb1q\\$\x86E\x18&\xa9X\x82\x00\x06\xd3<\x1bu\xe5\xc5\xd8\xc2\x7fQEY\x95\xc1\xb9\xae\xae\xcc\xf8\xd6k\xd7)\x91:1Q\x17\x9f\xd8\x85b\x99$\xacek\xc0\xaa\x8a:B\xa0\x11\x04\xc4\xc0\'\xde\xc8\xbb\xe6\xef^\x8df\xb2f\xcbM\xb6\xd6C@\x92X&\xf2\xcc\x12\xe4\x84(\x1e\xc0\xd71\xd9\xc7\x84\x1f\xca+\xadb2\x11~\x1e\xf9\x02\xf4*\x1e\xf5\xe3%?\xae\t\xb6\xc0\xcf\x1f\xfc\tf\xf4N\xa6\xd2\xfc\n\xfa\xe6\x8d\xb54\x9eS\x8d{\xc6a\x02\xd3\xf0\xc4\xdd\xdbgb\xb0u\xf4\xa5r\xbd\xe4i\xf7\'tB\xbb#\xd0\x0c\xac\x01SSS\xcd\xf7\xc6t\xf5\xd6\x05z\x8bu\xea\x8a\x15+\xbc\x0f9b[\xda\x02}\xe6\x93O>1\x16\x99\xd0\xd9\t\xfd9X\x00!Jv\x9b\x10\xf7\xc8\xe8\xe7\xf1Yt\xd2\xc5\xbd\x99\xfc\r\xfes,\xa2p\xe6\xe1E5\xbf\xa8\xec?,\x83\xd6\xce\xcf\xa5Z\xfb\xde\xb3\xc8\xe8\xf2\x04\xc6o1\xa7\x8e\x9c\xd28!\x1a\x12\xde\x8eep\xea\xc2\t$!\xb6A\xfau\xe0\x94\xc8\xa9\xe1\xdcC\xb4\xc4\'R>\xa7\\N\xf0\x1b\x82\x97\xe6\x9b9m\xe2\x84\x88ly\x9c\xb0\x8f}\x9b\x98\x11.\x7f\x181\xa3!\xde\xc2\'t\xab?\xb82\xa7\xe8\x1fE@\x11P\x04\x14\x01E@\x11h\xf8\x10VD\xecG\x00\x03\x1b\x08F\xb9B\xe1\x98\x1dV\xfe\xc9\xdbYJ=\x07\xa61iT\xcd\x05\xe9\x80\xdaJl=y\xf10\xd3\xb5R\x89\xf1\xf5\x82\x18K\x98\xca\xf6q\xd3\xf2\x7f\x90|\xe0\x0ba\x95\x87O\xb3\x8d\xd7\xf4\xd8g&>\xe6\x8f\'K\xac\xd4\xa9\xab\xacc\xc2\xb0\x8a\xad8\xf9z&\xd2\x90\x07\x04\xe7#ar\x1f\xeaI\x12tB5\xdag$\xb2>Q4\xe3\xa3\x8d\xf4\xed\xbb\x99\xec7\xd1\xe5\x0bM"\xfb\x86K\x80\x0f`\nrA\x88\x1c\xe0}\xe8\xa1\x87\xd2-\xb7\xdcBW\\q\x85Y\x86\x88}\x10!\'Z"Y\\g\xfb\xff\x17\x84\x07\xca\x02\xc1\x13\x1f\x1fo\xac\xa2\x90[S\xe56\xdc\x8f\xebCM\x9a\xa0|\xb1H\xc3ri\x88\xf8\xaf3_\x1c\xf6\x07\xfa\x8a\xbc\xf4\xd2K\x94\x9b\x9bK\xff\xf9\xcf\x7f\x0c\xe6h\x87\x86\x18\xcb\xb9\x12\x04\x06\xc7\x83iE\':\x15\x14\x14\xd0\xb9\xe7\x9eK\xb3f\xcd2:\xb6\xb6\xdd\x11\x00D\x88&\xe4\xe5DAP\x9d+\xaf\xbc\xd2\xa7z9\xb1\x1e\xad\xd5IH\xce\x1d;\xc0u\xe07\xbf\xfe3\xa2\xb5\xf9\x84\xcby\x08L\x05Y3o\x8f\xf1\x01\x08+\xf8\n\xb6\x08\xe4\xc7\x8b\x8a\x1f\x08`\xacQ\xc6c\x90!#;\xd3\xb7\xefdz^R\xf8\x91UK\x97\xc8\xfc\xe1V>\xf1\nN=8\xa5\xb4tQ+\x8f\xf7m\xe6<\x90\x7f\x1b9m\xe6\xb4\x96\x13\xc8\xc7\x85\x9c@\x18\xee\xff\x01w\x91\x8c\xf8Qs\xe6\x0f\x1b+\xa6\xa2\x08(\x02\x8a\x80"\xa0\x08\x84\x02\x01y\x80\x87\xa2\xec\xb6V\xa6\x0cL\x10\x02\x15o8\xb1tA\xf6Y\x8eE\xee\xce\x12\xea{H{\x1bK\xb0\\\xe5\x88\xc9\xd0\xf8/r1\x83\xa6\x91\xbd+\x86\xb7\xf1l\xcb\xd5|\xbb\x80\xe8\xc3E \xfb@\x1c\xa2\xa78D@J2\xadDI\xa9q\x94\xc2\xd1\x861i\xfb\xf8\x1f+h\xeb\xea\x02\xa3\xa1k\xb2\nk5\xdb\xba\xb6eH\x08\x99\x03\xe2C\xc8\x8f\xa4\xa4$\xba\xf8\xe2\x8b\xe9\xe1\x87\x1f\xa6\xc3\x0e;\xccS\x96\x1cG\xfd\x84\xd0\xf2\x1c\xb4p\x03\xc4\r\xcaB9\xd0\xaf\xe1r\xe2={\xf6\x18_u\xf9\xf9\xf9$\xdb87%%\x85\xb0<\xb9k\xd7\xae&\xb5k\xd7\xce\x11\xc4\x01\x08L\xd4\xe1\xbb\xef\xbe\xa3\xd5\xabW\x1b\x9d\x82I\x90\xf9\xdb4\xae~L\xf4\xdf\xff\xfe\x97\x8a\x8b\x8b\xe9\x8b/\xbe0\xed\x81\xb6\x91~\xe3\x9d\xb7\x10\x80\xde\xfb\x82\xb5-\xfde\xf6\xec\xd9\xf4\xd4SO\x19K\xd5\x96\x08@i\x17\xb4Iaa\xa1Q\xd5\x9b\xfc\x0c\x96\xee\xcd\x95\x03}p\xafUVV\x9a ;\xef\xbd\xf7^\xc8\t\xed\xe6\xf4\xb5\xe2\x18\xea,\xf7<\xeeo\x88\xd3\xda\xc5\x8az6\x95\xc7\x92\xc9;\xe8\xcck\x07P\xf9N\xb6\xaaWK\xc0\xa6`jv?\x88S\xac\x14\xe8{h\xfa\xfe\xf30\xa0\xb0\xef\x91\x0c\xcb?$\x08\xc86\xef\x92\xccP\xc6\x1c\xd9\xff\xa7\xb1}\xfb\x8f\xd6\xbf^\xf6K\x9e\xb8\x16V\x85H\xc7\xbb\x0fb\xd90^\xacgr\x9a\xc0i&\'\x10\x83E\x9c \xb8\x06\tyH>\xbc\xa9\xa2\x08(\x02\x8a\x80"\xa0\x08\xb4M\x04\x94\x00\x0c^\xbb\xcb\xc0\x03L\tf\\2`\xb2T\x03\x18\x0b\xc0\x88%\x9f-\x00c\xe3b\xcc\xb6\xa5\x05hf\x81!\xc0\xed\x83\x91\xa8\xebO`Y\x05\xfbj\xf8\xf9KH\x8ef\xff\x83\xc9\x04\x82\xf9\x83\'\x97\xd0\xcf\x13\xb6y\xd4\x88b\xd23\x1c"\xfb\x82\xc0A\xf2&\xa2\x06\x0c\x18@w\xdf}7\xddx\xe3\x8d\x94\x9c\x9c\xec\xa9\x93D\xf1m\x8c\xf4\xf1\x9cd\xd1\x06\xf4\xc1\xe4\xdf\x9b`\xc4\x92\xd9\x89\x13\'\xd2\xe2\xc5\x8bi\xfd\xfa\xf5&\x88FK\xc5\x81\xbc\x1a4h\x90!\x04?\xfd\xf4S\xea\xd2\xa5K\xc8\x88\x13!3\xee\xbf\xff~\xa36t\x0b\x07B\xc3[\xc7q\xe3\xc6\xd1Yg\x9dE\x93\'On\x92\x04,)\xc1j\xb4\xa6\xad3\xcd\xc1 \xfcy\xe2\x89\'L \x93\x8b.\xba\xc8X\x8fz\xf7\xa5\xc6\x8a\x97%\xd9X\x0e\x1cJ\x12\xb31\xdd\xb0O\x88\xf7\x7f\xff\xfb\xdf\xf4\x97\xbf\xfc\x85\x86\x0c\x19b\xee[\xe9WM]\x17\xae\xfb\xd1\xefp\x8f\x80\xf4\xcc\xce\xce6\xd5\x10\x0c\xc2\xb5N\xad\xd1[\xa2\x01/\xfaq\'\xfd\xea\xc6Al\xfdg\x9e\x92\xad\xb9T\xcfi\x88\x003\x80\xd5\xec\x17\x18>\x84\xfb\x0c\xed@[\xd7\x16\x98>\xe5\xfd\x9b\xd6\xf0\x92\x00\xbf\x0b\xb1\x86F\xb3\xc2p\xb3\xa5\xc6\x17\x92\x11\xe5\xe2\\\xccc\xb0\xcc\x18\xe9dN\x90E\x9c\xa6r\xfa\x86\xd3\xefDA}\xa0?\xfa\xcd\xb5\xd7^K\x0b\x17.\xf4\xdc\'N\xd47P\x9d\xe4\xb7\x00\xd6\x7fX~\xdeVD~\x16~Y\x94K\xdb\xd7\x15Qz\xd7D\x13\xcd6:\x08\xd1\xeb#\x11c\xf4#\x8c\xff\x86\x1e\xdb\xd9\x10\x80|\x0b\xd9\x11\x08D\xa0\xc3\xc3\xa8\xf1\x07\x92\x9ca\xedgC\x92QF\xb9\xf8\x941\xf5\x08\xdeF\xfa\x13\',\x0f~\x8b\xd3\x8f\x9c0\xf6\x86 \x0f9\xdf\xec\xd0?\x8a\x80"\xa0\x08(\x02\x8a@[A\xa0\xe1\x83\xb4\xad\xd4;\x14\xf5\x94A\n\x06 2\x08\x91}\x96\xe9\x03\xbfl\x90\\c\x01\xc8\x04\xa0\xeb\xab\xfeU\x04|F\x00\x932\x90zi\x9d\x12\xa8C\xe7x\x9a\xc7\xd6~O\\4\xc5C\xfe\x99\xc9\x19\x0f\xfb\x9dL\xfc\x81\xa0\x01\xd9\x81\t\x11\x12\x04\x81\xe64\x9d\xd3]\x9cR9\x89\x15\xa1\x83\x1c\xac\xb0V*\x8a\x80"\xa0\x08(\x02\x8a@\x10\x10p\xd3EA(I\x8b\xc0l\x11xWp\xb2\x8d\x00\x14\x98\x8b\xf3\xcb9\x12\x1c;\xd2\xe6A\xa0\x8a"\xe0\x0b\x02\x98,`\xb9oRr,[\xfd%S\xd6\xaa|\xfa\xfbog\xd2;\x7f^@\xbb\xb7\x16\x1b\xf2\x83\xf9\x0f3Ys"\xc3,\xa4\x9f\x904 \xca@\x8c\xc0\xdao\xd5\xaaU\x84\xa8\xa7\x7f\xfc\xe3\x1f\x8du\x1c&\xd7H\x98x\x0b\xc9\xe6\x0bV\xfe\x9e+\x04\x06H\xbd-[\xb6\xd0\xa9\xa7\x9eJ\x17\\p\x01\xcd\x9b\x87\xd5J\x98\xbc\xb9\x08H\xd4\x01\xc4\xa4\x90\x93B\x10\xb4\xa6\xdc\xa3\x8e:\xaa5\xa7\xd9r\x0e0\x87\xee\xb0d\xfa\xe1\x87\x1fL\x19\xe1Ld\xa0.HXR}\xcd5\xd7\x98\xfa\xe0\xbb\x88S\xac\xb5\xd0\xaf\xa0\xd7\xbe}\xfbh\xc4\x08\x18\xc0\xf0\x8c\x98\xfb\xbe\xf47\xd1\x17\x9f\xaf\xbf\xfe\xba\xf9*\x04\xb4\xf71\xa7m\x8b\x8e\x08\xca#Dg8\xf7\xa7\x96\xf0\xdd\xbau\xab9\x05V\xcamEd\xa8\xb2`\xd2\x0e\xf3l\tET\xfbH\xc1\x1a/\x82+J\xab\xa9{\xbf4S%C\xb0\xee\xff\xb9\x8a\x94j6W\x0f\x10{X\xe1\x84q7\xc8>\x10\x82Gpz\x95\xd32N\x7f\xe0\x04r\x10\xfb1.o[\xe8p\x85U\x14\x01E@\x11P\x04\xda.\x02x\xf0\xa9\x04\x0f\x01\xc1\xdb\xe5\xdd\xdb\x86A\x87D\xd4\xdb\xb5\xb1\x84\xb2\xb7\x14S2\x07k@$Y\x15E\xa05\x08\xd4\xb0\x05F\x1c/\x1d\xea\xdc+\x99\xaa*k\xe8\xfdG\x96\xd03W\xcf\xa0\xf5K\\\xcb\xd1bxI\x16&\xe0^\xc6O\xad\xc96(\xe7\x80\xf8\x00\x89\x07\xfd@@\xe1\x13\xc10\xfe\xfa\xd7\xbf\xd2\xee\xdd\xbb\x8d\xf5\x10"\xfbB\x84P\x03\xb1 d[P\x94\xe4B@\\\x88\xa5\xd6\x8b/\xbeH\xb0\xd4\x9b9s\xa6)^\xac\xe4\x84\x94D\x1d|\x15!\xa6\x8e=\xf6Xs)\xb0\x08\x95|\xf8\xe1\x87\xa6h\xd47\x9c\t\x1bW\x9fw\xb5\xc5\xd8\xb1c\xe9\x0f\x7f\xc0\xfcq\xbfU\xa3D\xd2\xf5\xa7\xbdLF\x16\xfe\x81\x0e\xc0\x1b>#\x8f9\xe6\x18\x93\xb3\xe0/\xc7\xb0\x13V\xa6\x10\xe9\x8b\xe6\x8bC\xff\xa0\xef\xe0>E\xf0\x9b\xa7\x9f~\xdah)\xfd\xdc\xa1*\xfb\xa5\x96\xb4Ef\xa6\xcb\xc5\x82\x13\xfa\x93_\x15\xf1\xe3"<{ k\xe6dSa^9\xc5%\xc8p\xc9\x8f\xcc\xda\xf8%\xb8W\xca\x8b\xab\xa8[\xbf\x14\xea\xdc;\xc5\xa0\x11\xd56\x97S\x83\xd8CG\x02!(D`\x7f\xde~\x9b\x13\xdeL\x9d\xee\xde\x8f\xce\xa7\x1d\x8eAPQ\x04\x14\x01E@\x11\x88|\x04\xf4\x81\x17\x9a6\xde\xe6.\xd6\xf2\xb7\x8e\xe0\x0b\xa2\x99\x08)+\xae\xa4\xcc\x9f\xf7PRZ\x89f|\xba\xc9T\x02\xcb\xb3 2I3_\x1c\xf0\x07$\x80\x90x\x98,\x83\xd8\x83\x80\xfc\xfa\xea\xab\xafL\x84\xd3\xc7\x1f\x7f\x9c222\x0c\x01%\xc4Z0\xad\xfd\xbca\x82\x8e\xd0\x17\x02\x9fr\xf7\xddw\x9f\xd9\x96}V\x90uB\x8c\xc0\x07\x1c$\x14$\x82\x10\x99\xf0e\x18*\x1dL\xc1\x16\xff\x01\xb6H\xef\xbe\xfb\xae\x89\xb6+\xd9;m)\xadX\x02b\xd9,\x02\x98@\xd0\xc7\x10\\\x02\x82\xfdk\xd7"P&\xaf\x93\x0b!Al\x14h\xe5\x1f\xe9\xc7\xb8\x9f\xb1\xbc\x19\xed\x10\xce\xa4rc\xd5\x96{\x17V\xca\x10\xa9sc\xe7F\xf2\xbeeSwq\x94\xf9x}y\xe9o#\xf3\xe3\xba\xaa\xa2\x96\xda\xf1\xf3\xbc\xd7\xc0v&\x17\xcb\x07\x9bM\xe9\x86\x82\xf8\xde\xf4$\x10\x8f\xde\xdf\xfd\xdaF\x9eM\x15\xd8\xea\xfdx\xf0\x82\x08\x04\xd9\x07\xcb\xbfS8}\xcf\xe9%N\xb2,\x18\xc7U\x14\x01E@\x11P\x04\x14\x81\x88F@\t\xc0\xe06\xaf\xeb\x157\xd1vw\xb1\x81\x0fi\x1a\xd1?\xca=\x84\xf9\xf9\xdb\xedL\xfe\xb1\xe5D\x9c6s#0\xe9.7\x02\xae\xe8\xbe1\xc6\xea/kM\x01=u\xf9t\x1a\xfb\xf42\xaa\xa8p-!\xc7x\xdd\x89~\xfe\xc4\xda\x0f$\x80\x10\x01\xb7\xddv\x1b\xad^\xbd\x9a\xe6\xcf\x9fo\x82!\xa0\x8a Cp\\\x88B\x99d\x07\xbb\x03@\x07\x94]VVFC\x87\x0e%\xf8\x94\x83NV\x13\x19\x82E\xc7\x8e\xb6\x04\x1ao\x116)\x1f\x81(\xb6ms\xbd\xeb\x90}-^\xec\xf0\x13@\xc8\x08)\xf3\xb7\xbf\xfd\x8d`\r\x08A\x9f\x838\xa9\x9e\xd0\x13}\x0b\x01LN:\xe9$\xa3\x9f\xf8\x84\x04\x89\x06\x01Q+\xf51;\x1c\xfc\x07z\nQ~\xeb\xad\xb7\x1aM\xf1=\\\xf4o\r\xb4\xf2\xdb$\x04\xa0\x93\xfaSk\xf4\x0f\xf4\x1cD\x03\x86,\xfaa\x07[\x00\xc60Sc\xcb\x10)P5\xc3\xe3z\x86\xae\xb2\xb4\x86\x06\x1c\x9da\xf4\r\xda\xcb;\x8cr\xf9^\xf5$Xvz\x7f\xf7k\x1byr\xc2\x8bH$\x0cJ\xfc\x17\\\x8cQ2H\xc08N\xf7r\x9a\xcc\xe9pN\xd8\xa7$ \x83\xa0\xa2\x08(\x02\x8a\x80"\x10\xb9\x08h\x14\xe0\xe0\xb6-\x860\x10\xd7\xac\xd8\x8aw\x9a\xae\xfc\xea\xfd\x95\x81\xde*^J\x93\x9f]F\t\xec\xcb\xad\xaa\x8c\xc75\xca\x03\xd6\xc3\xa9\xad\x7f\xd9\x1f\xdd7\x99\xf6\xf1\x92\xab\xf7\x1f[B3>v[\xfc\x99\x016\x02 H\x97u\x06ZB\x00`b,\xd6~\x83\x06\r\xa2\x87\x1f~\xd8D\t\x95\xe3\xd0\x16\xc4\x1f\xbe\xcb\xb2\xbaP\xd6\x00\xfa\x8an\xf0\xcd\x87\x08\xbd\xd0\xab1\xdfl\x81\xea)\xa4\x01\x08\xd2P\x88\xe0\xfe\xf6\xdbXe\xe5\xb2<\x13\x9dB\xa1\x8f\x1de\xa2-Q\'\xf8\x03\x9c4i\x92\x1dEX\x92\xa7\x90\x80s\xe6\xcc!\x04\x06\x81\xa5"\x96+\x8b\xce\xe1b\xfd\'`\x08\xd9\x87\xe0=\x88\xde}\xc8!\x87\x98{H,N\xe5\xbcp\xfc\x94\xb6\x82\xee\x125[\xea\x1b\x8e\xf5\xf1Gg\xbe\xa5\x8clX\x9aG;7\x15QJ\xfb\x04*/\xa9\xf4\xfcv\xfa\x93g[\xbd&\x8a\x7f\xa3\xcaK\xabh\xe8q\x9d]\x10\x04\xf1Q\x1e\x15\xcb\x91\xea\xe39\xc5q@-&rcR\xe2)*%\x8e\xf7\xc5QL2\x7f&r\x8ac\x1e\xce\xdd\xde \xf7\xea\xaa\xd8m\x07\xbft\xac\xad\xa8\xa6\x9a}\x15T\xc3\xed^W\xc6\x81\xb9\xca*\xa9\xb6\x9c\xddX@\xff\xc6\xc6#\x1e2\x10\x99\xf8\xd4\xda \xfaL\xae\xfc9\x92\xd34N\xf0\xed\xf0%\'\x1c\x83v\xbe\xe5\xc8\x17\xa8(\x02\x8a\x80"\xa0\x08(\x02NG@\t\xc0\xe0\xb6\x90\x0c&vp\xb1p\xcce\x0f\xfe\\\n,\t0y\x98?q\x1b\x9dw\xf3\x10\xca).\xa6\x18\x1e\x10\xaa(\x02\x18\xd6\xd6r\xdfH\xeb\x98@\xb1\x8c\xc7a*\xf9)\xa7\xbb9\xbd\xc9\t\xc7T\x14\x01E@\x11P\x04\x14\x81\x88C\xc0\x1e\x02*\xe2`\xb2\xbcB\xb0\x00\x843&\xe0_o\x08dUI\xd1\xfc\xfe\xb2\x86\x874\x0b\'n\xa7_\xff~0E\xbb\x97\xd6X\x95\xbf\xe6\x13\x9e\x08\xc0:4!)\x96\xdag$\xd0f\x8e\xee\xfb\xd13Ki\xdd\x02\xd7\x84\x13\xbe#9\x1e\xaec\xc8?\x10\x14 \xb3d\t/\x10OOO7\x01\x18`\xf1\x97\x96\x96\xe6i\x04L\x9e\xe5|!\xdb<\x07\x1d\xb2q\xe7\x9dw\x9a(\xbfR\'\xbb\xd4\x02\x0e\x90\xc2\xc2B\xbb\x8ah2_\xb4\x15\xc8W,\xff\xdd\xb0a\x839\xcf\x0e+\xc7&\x15\x08\xf2\x01\xe9sN\xaf\xa3\x10IX\x1a/"\xfb\xe4{\xb8|\n\xd6\xb3g\xcf6\x04\xe0\xc9\'\x9fl~#\x9cB\xf8\xfb\x8b\xa3\xdc\xb7\xcb\x96!Hi\xdb\x15\xe6@\xcd\xd8e\xd5\xacl:\xee\x9c\x9e\x14\x15\xa3\xec\x9f\xbf\xbd\xa1\x96\t4\xfc\x1e\x0f\xe6e\xc0\x99\x0br\xf0f\xd8\x17r\xcc\xe7b\xe3\xba\xa4Q\xe2\xa0\xceT\xcbd\x9d\xe1\xf8\x8a\x99\xb8+t\xbdX\xf4d\xd6\x12\xad\xc6#b\xac\xc35\x02B\x8f\xad\t\xe3:&S\\\xb74J>\x92]\x16\x80H\x84e [\nVg\x17Q\xe9\xb2\x9dT\xba6\x9b\xaa\x99\x1c\xacg!h\x9e\x83\x9c\x19F\xd8-\x0b\xc6\xe2\xb0\xf8\xe3\xdeGopJ\xe7\xf44\'\xec\x87:\xad\xcb\x85OTQ\x04\x14\x01E@\x11P\x04\x9c\x8e\x00\x1en*\xc1C\x00\x83\x08\x0c\x7f\xf0\xea\xf2gN\xa38\xc9>\xde\xb4Nd\x190H\x9e\xcd+\xf3\xa9\xe7\xa0vT\xb4\xb7\x9c-\x0ct0m\x1d\xca\xe1\x93\x93\xb1\xe8\xe3\x9e\x97\xde9\x91\xaa9\xba\xef\xa7\xffXA\xdf\xbd\xbb\xceS\x01\x04\xf9p\x8a\xd5\x1f&\xc2\x98\xb4`\x89\xafL\xf6\x8f>\xfah\x02\x81v\xc3\r7xt\xc6\x06\xce\xc1\xb9N%\xfd@LB\xb7\xef\xbf\xff\x9e\xdex\x03\xf3\n\xcc\xbf\x823\x97\xd8\xb2e\x8b)/\x14\xc4\xc8\x8c\x193L\xd9\xb0\x06\x94\xa5\xdafG\x84\xfdA[J\x1f\r\x87\xaa\xa1/\xe2\xfe\n\'\x9d\x1b\xc3\x15\xf7<\x96/\xff\xe9O\x7f2\x96\x8d\xe8\xe3h\x0b!\xd1\x1a\xbb\xc6\xe9\xfb\xd0&h\x1fXjB\xb0\xedmi\xeat\xfd\xad\xd2O\xc6.\x8b~\xd8N\xd7>1\x8c\xad\xd4\x19\x07&\xb2T|G\xa0\xa6\xa6\x96\xe2\x18\xbfA#:\x1b\x020\x8a\x87\x7f\xb6\x04\x85s\x13\x8be\xcb\xb6SB\xdf\x8e\xbcl\x97\x83q1qgF\xbb\x81\x8e9\xb9\xedkyy0\xb1\xe1\xb2\xe9\x05\x18As\x9e\xd1\xb1\xd1\x14\x7fP\'J\x18\xdc\x85:\xf2\x81\xb2\x8dyT\xben7\x95,\xdcF\xd5\xb9|\xb2\xff\xea`\xb9\xe7\x1a~\x06^\r\xe4\x83\xe7(\x88D$ls\x1f\xa9\xe5(\xc7\xb5%\xbc<8\x97\x97\x05\x17\xb0\xaf\xeb\x83:P\xfa\x05\x87S\xf7\x07\xcf\xa0\xce\xb7\x8c\xa4\x84~\x9d\\e{\x13\x81-k\xc3\x99\x1b\xcdA\x04\xbe\xc0\xe9&N\xd8\xd6\x014\x83\xa0\xa2\x08(\x02\x8a\x80"\x10\x19\x08\xe0a\xa7\x12\\\x04\x84\xf0\xfb\x89\x8b\xcd\xe5\x84\x81\x05\x06\x18\x96\x8b\x90:\xb3\xbf\xdc\xc2V_\xfc&8N\r>-\x07\xd9\xc1\x19"\xc8\x07E\xd5QF\xafd*\xce\xaf\xa4Wo\x9dC\xafp\xca\xdf]fH3\xf3b\xbc1\xa7\xdaA\xae\x93\x90F \'@^!R\xe9\xfd\xf7\xdfO\xabV\xad2\xc1\nF\x8c\x18a4\x02)\x88\xe3\x98\x18\x07\x93\xd4\xf2\x17\x0e!\xe2\xee\xbb\xef>\xda\xb7o\x9f\xd19\x18\x16=B\xf0 \xfa+$XXI}Q\xe6\xf4\xe9\xd3\xf1a;\xd9i\n\xd1?m\x12\x01!\xd7\xef\xb8\xe3\x0eS\x7f\xf9\x1d\tG0p\xef\x88\xef\xcc\xf5\xeb\xd7\x87c\x15,\xd59\x06\x04\x12\xcb\xc2\xef\xb7Srz\x02\xd5y\xd6\x84ZZL\xc4g\x16\xc5\xa3\xcb\xb2\x92*\xea\xc6/\xffb\xe3\xf8\xe5\x13?\xef\xe5\xa5\x9f\xa5\x95w\x8f`\xab\xf2\x8a\x99\x8c+\xe7\x00\x1f<\xd6\x94\x91\xae\xa5\x05ye\x86\xd9\x8b\x10\x83\xdc]j\xf7\x95\xf32\xe0}T\xc7c\xdd\xa4\xa1\xdd\xa8\xfb_N\xa3.\xb7\x9dHq\xbd\\\xe4\'?\x8c\xf8|W\xbf\xf2\xca\xa5\xb1M9\t\xb5z\x95\xd3\xe9\x9c\xd0\x03\x95\x04d\x10T\x14\x01E@\x11P\x04\xc2\x1f\x01%\x00\x83\xdf\x86\xf26q#\x17=\x93\x13\x86I\xf6\x10\x80\xee\x01\xd8\x9em%\x94\xb56\x9f}\xbf\xe1Mz\xf0+\xac%\x06\x17\x01\xbc\xe5\x87\xd5_J\xfbxJ\xef\x92L3>\xdbL\x0f\xffz2-\x9c\x84\xd83 \x84\\\xc4\x0c\xc6\xc3\xa1\x12\x90Rb\xe1\x02k\x1eL\x80{\xf4\xe8A/\xbd\xf4\x92\tR\xf0\x8f\x7f\xfc\x83\x0e=\xf4P\xa3\x9eX\xfc9\xd9\xda\xaf!\x8e \xfa@P\xc0\xa1\xff\x8b/b\x15Q\xf0\x89\xb8\xac\xac,O@\x01or\xae\xa1\xaeV}\x972`\xb1)"\xfb\xe4\xbb~*\x02V! d\xfa\xe6\xcd\x9b\xe9\xb3\xcf>3\xd9\n\xf9mU\x19\xc1\xcaG\xee\x93\x92\x92\x12B} \xe1Z\x17K0s\x8fL3\x7f\xdeCe\x85\x15f\x19\xb0\xed\x84\x92%\x8a;+\x93h^\xf3[Q\\M\xdd\x0eN\xa3n\xfd\\>s\xb1\x0c\xd8zq\r&\xaa\xf3\xcax\xf9m\x89\xb1\x02\xb4g\xadq3\x9a\x0b\x19\xc8\xcf\xde\xda}\xac\xc7\xde\x12J\xe4\xe5\xc1\xdd\xff|*u\xbab\x18G \xe6\x8a\xb7\xfe\x85\xa7\xa0\x94\xcc%\xfe\x97S\x1fN \x01e?o\xaa(\x02\x8a\x80"\xa0\x08(\x02\xe1\x89\x80>\xccB\xd7n\x181}\xc3\to\x1bm{\xb3h\xa2\xa9q\x01\xb3\xbf\xca\xa2\xb4N\xf1\xe6\r0\x7fU\x89P\x04\xe0?)&>\x8a2z\'Sa^9\xbd\xf8\xbb\x994\xe6\x91\xc5\xc6\xef\x9fY\x12n\xc8\xbf\xd0U\x1e\xc4\x1f,u0\xe1\x95\t\xee\xf1\xc7\x1fO\xdf|\xf3\r\xed\xd8\xb1\x83\xee\xbd\xf7^C\x9c\xe1\x98,\xf3\x0b\x17\x8b\xbf\xc6P}\xe1\x05\xac"\xe2\x1b\x9c\xad\x16\x85\xb0h\xec<\xab\xf7\x89u\xd4{\xef\xbdg\xb2\x16,\xad.\xc7;?iO\xb4%Dt\xf0>G\xb7\x15\x01+\x11\x10\xab\xbf\xc7\x1e{\xccd\x8b\xfbL\xc84+\xcb\xb1;/\xf9m\x00i\x0fkaH8\xd6\xc3*\x9c\xc4\x0f\xe0\xae-\xc5\xb4eM\x11\xa5\xb4\x8b\xe7\xc0 \xfa\xf6\xd2g|\xf9y\x0f\xdc\x12R\xe3\xa8\x17\xfb\x81\xb6M0\x9a\xc5\x9bE\x96\xea\xdcb\x8a\x8e\x0f\x82\x05\xa0)\xad\x89? \x03Y\x9fZ^\x1a\\[ZEi\xa7\x1eL=\x1f\xff\x15%\r\xe9\xda\xc4\x05\x8d\xee\xc6\xfc\x88\x9d\x0f-#\x19h\x00\x00@\x00IDATR/N\xafs\x92%4\xae\x8a\xf2\x0e\x15E@\x11P\x04\x14\x01E \x1c\x11P\x0204\xad&#\xd9\xf1\\<\x96\x01c@\xe1z\x85j\x93>+\xa6\xef\xa6\xc2\x9cr\x8aK\x80cq\x9b\n\xd1lC\x86\x80\xb1\xfac\xf2\xaf\x1d\x93\xbc\xc9iq4\xe9_\xbf\xd0\x03g~O\xabf\xef1\x9d\x0bcs\xb3$\xd8\xd6^\xd6t\xf5A\x06!aR+d\xd4e\x97]f\xa2\xc5\xce\x9d;\x97.\xbc\xf0Bs\xb1X\x03b"/\x93\xfb\x86\xb9\ny\x08\xc2\t\xdbN\x9b(C\x1f!\xbf\x84\x00\x94\t~\xc3\xba\xd8\xf5]\xca\x1f3f\x8c)\x02\xd6\x93v\xe3\x846\x83 :+D\xbe\x9b/\xfaG\x11\xb0\x01\x01\xf9-A\xd4\xe9\xef\xbe\xfb\xce\x94 D\xb4\r\xc5\xd9\x96\xa5\xdc\x9b\xeb\xd6\xb9\x023\x05\xe3~\xb5\xad2Vd\xcc\xcf)yy\xb9qY\x0e\xc5\xf1\xea\x05\x15?\x11\xe0g\x7fEq\x15\xf5?\xaa\xa3\xc9\xa0\x0e\xaeA\xec\x10\xf7l\xa2r{\x01\x0ff\xb9\x0c\'\xd0d\xf0\x83\x8d1\x07\x07\x05\x89N\x88\xa1\xaew\x9cH\xed\xcf\x19\xb2\xbf\xf6n\xd2r\xff\x8e\x03\xb6@\xfa\x81\x04\xc4\x00\xe5zN\x18=;\xa1f\xac\x86\x8a"\xa0\x08(\x02\x8a\x80"\xe0\x1f\x02J\x00\xfa\x87[\xa0Wa\x04\x86AD\x01\'\x90\x80\x10[h9Wd\xd7(\xca\xdbUJ\x1b\x96\xe4R\x9a\xf1\xa7cKQ\xaeZ\xe8\xdf\xa0#`\xac\xfe\xe2\xa2\xa8s\xef\x14\xda\xbd\xa9\x98\x9e\xb9r\x06}\xc2Q~!\x98D\xa1\xb3\xf1\x188$\x02"\nV\x7f \xc0\x90\xb0\xfd\xc0\x03\x0f\xd0\xb6m\xdb\xe8\xf3\xcf?\xa7\x81\x03\x07\x1a\xbd\xc4\xbf\x1fH?\x9c\xd3Pp-\xce\xc1\xe4\x1e\xc7A.!a\x1b\xa9\xb2\xb2\xd2C,6\xbc6\xd8\xdf\x85\x80\x18;v\xac\xc7\xeaO&\xf8\xc1\xd2E\x88\x11\x10\n\x93\'O6\xc5\x8a^v\xe8\x80\xf6\x11\xd2133\xd3\xf6\xf2\xec\xa8\x83\xe6\x19\x9e\x08H\xbfC\x94pHS/\x0e\x9c\\;\xd1y\xe6\xcc\x99NV3\xa8\xba\xc9#k9\xbf\xbc\xac\xa9\xaa\xa5\x18\xf6a\xa7\xe2;\x02Q\xfc\x0c\xae(\xab\xa6\x01\xc3\\A1l\x1b\x0b\xb8\x87\x95\x15[\xf2\xa9\x8e]\x90\xf0\x03\xc1we\xed\xba\x82\x89\xc0\xda\xf2j\xaa.,\xa3\xf4\x8b\x0e\xa3NW\x1d\xe5*\t`42\xdeh\xa0\x86\xb0\xcfO\xf1~\x98\x10*\t\xd8\x00 \xfd\xaa\x08(\x02\x8a\x80"\x10^\x088\xe8\t\x1d^\xc0Y\xa0\xad\x0c*\xbe\xe2\xbcl\x1dPD\xbb\x17.,\x9b\xb6\xdb\x0cv\xe0\x18Z%\xfc\x11`\xce\xc5X\xf5u\xe8\x94H)\x1d\x12\xe8\xeb\xd7\xd6\xd0\xe3\x17M\xa1-\xab\xf3M\xe50\xaeu\x11\xc0\xc1\xad\xab\x10t(\x15\xc4\x10\xc8\xaf\xee\xdd\xbb\xd3\xcb/\xbfl\xbe?\xf7\xdcs\xd4\xabW/\xb3-\xc7\x1b\xf3\xef\x87\xeb\x84\xb4\xc2$\x1f\xe7x[\x95\xe1Z\x91\xf8\xf8x\xcf\xc4\x1f\xfb\xbd\x8f\xc99\xc1\xfa\x14\x1dG\x8f\x1em\x8a\x84\xde\xa1\x10!F\xfe\xfc\xe7?\x9b\xe2\x85d\xb0C\x17\xc1{\xed\xda\xb5\x94\x9d\x9dm\x8a\x086\xe9iG\xbd4O\xe7# }\x0f\xbe\xf3d\xf9\xb9\xfcn8_{\x97\x86\xf8\xcd\x84\xcc\x9a5\xcb|\x86\x9b\xfeFi\x8b\xff\xc8\xef\xc7\xda\xf99T\xc6~\xec\x10\xc4B\xc5w\x04\xc0\xc3Ur\xc4\xdcn\xfd\xda\xf1\xf3\xd3\x8d\xe1\x81\xef\xd8|\xcf\xf8\x80+\\\x94m\xc5\xe6\xbd\xfc\xc6\x91\x9f\xcdN"\x00\xa1+\xee1V\xb1\x9a\x03\x95\xa4\x9e\xd2\x9f:]\xeb\n.\xd6\x8a\xb7\xa3@\x0b\xfe\xffzpz\x90\x13D;\xa3\x0b\x07\xfd\xab\x08(\x02\x8a\x80"\x10\x86\x08\xe8C,t\x8d&\xec\xc5\\V\xe1\x17Nh\x0b\x0c2,\x17\xb3\xf4\x93s\x9d;a+U\xf2[\xd08\xf8gQ\tk\x04`\xf5\x17\xcbV\x7f]\xfb\xa4\xd0\xe6\x95{\xe9\xc9K\xa6\xd0\x97\xaf\xae6u2\xbe\xfex\xcb\xb67\xfd\xcd \'K\xd7d\x02;|\xf8p\xfa\xe8\xa3\x8fh\xe7\xce\x9dt\xf7\xddw\x9b+q\x0c\x93v\x10TH2\xf9\xf5\xce\x16\xe7x\x13\x89[\xb7n%\x04\x06\xc1\xb2a\xe4\t\x02\x11AC\xfa\xf7\xefOg\x9ey&\xfd\xe9O\x7f\xf2D\x9e\x95|\xc5\n\xce;_\xbb\xb7Q&\xf4\xde\xbbw/ai3D\xb0\xb0\xbb\xec\x86\xf9\x0b1\xb2r\xe5Jz\xfb\xed\xb7\xcda\xbb0\x91\xc9\xfa\xea\xd5\xae>(\xfd\xa0\xa1N\xfa]\x11\xb0\x03\x01!\xb7\x1f~\xf8a\x93=Hx\xe9\x93v\x94ge\x9e\xdez.^\xbc\xd8d\xed\xbd\xcf\xca\xb2\xc2*/\x17\x9fdT\xced\x120)%\x96\x7fKe\xd8\x14V5\t\xb9\xb2\xb5\xec\x070\x8e}\x03\xf7=\xc2\x15\x11\xb7\xb1gn\xc0J\xba\xdb\xab\xae\x8a\xfd\xf7"\x10H,\x0fi\x1d\xd9\\QT\xc3$`\xda\t}\xa9\xd3\xe5\xc3\xf6W\xbbyR\x14GQ\x9b\x1b8a\r\xb1\x06\x04a\x10T\x14\x01E@\x11P\x04\xc2\x13\x01%\x00C\xd7n\x18L\x80\x89\xe3\xd7\xa54\xcdV5\xdc\x03\xb3\xf2\x92j\xfaeQ.%\xf2@Z\xc8\x01[\xcb\xd5\xcc-G\x00Fo t;ta\xab\xbf\xb4X\xfa\xf4\xf9\x95\xf4\xccog\xd0\xf6\xccB\x97u\'\x0fS\x85\xf0\xb5\xbc\xf0&2\x14\xc2\r\x87\xb1L\x172j\xd4(\xfa\xf9\xe7\x9fi\xd1\xa2Et\xf5\xd5W\x9b} \xc20\xb1\xc5\xe4\x1c\xd74&\xd2/\xc5\x8an\xdc\xb8qt\xcc1\xc7\xd0A\x07\x1dD\x0f>\xf8 \xe1\xfb\x92%KL\xc0\x10X\x9am\xda\xb4\x89\xa6N\x9dJ\xaf\xbd\xf6\x1a\x9d~\xfa\xe9\x94\x91\x91A\xaf\xbc\xf2\x8a)GH\x81`\x12p2q\xff\xe9\xa7\x9f<:H\x9d\x1a\xab\xaf\xdd\xfb\x04g\x10\xa4 %\x81\x89\x1d\xfaH{-X\xb0\xc0TIp\xb0\xbb~\x9a\xbf"\x00\x04\x84\xd8^\xb3f\rM\x980\xc1\x80\x12\xcc\xfb>\x90V\x90{e\xfd\xfa\xf5\x9eld\x9fgG\x1b\xdd\x88b\x17\x16\x90\xa5\xd3vR\x12\xfb\xb6u&\xa1\xe4\xfc\xc6\xc1o>\x96P\xf7?\xd2\xb5\x0c\xb8\x89\xc7\xafe\x151V\x80\xecs\xcf\xb1\r\xc6/\xe9`\t\xd8\xee\xf4\xfe\x94vr?W\xbd\xeb\\}\xad\t\x100`\xc1H\x1a\x0c\xea\xadM\x9c\xa3\xbb\x15\x01E@\x11P\x04\x14\x81\xb0@\xa0\xf1YxX\xa8\x1e\x11J\x82\x04\xc4\xa8\xe3SN\x18\\\xd8\xb687\x06\xce\x90Y\xe6}\xb3\x95\x97\x8br@\x80\xdaf\x07;\xe6\\\xfd\xe3,\x04`\xf5\x17\x9f\xc8\xbe\xfez\xa5\xd0\x86Eyl\xf57\x9d&\xbc\xed\xf2\xb7\x16\x1d\xcb\xed\xc9\xe4Z0\xad\xfe`E \x84\x92\x90J\xd7]w\x1d\x81\x04\x9a6m\x1a\x1dw\xdcq\x06@\xf1\xef\x07\x92\xa89\xcb\x03L\xd8\x85\xb0\xfa\xec\xb3\xcfh\xe8\xd0\xa1\xc6\xe2\x0f$"\x04\xd7\xc3\xb2\x0ce\n\xe9\x88m\xecC\x82\xe4\xe5\xe5\xd1=\xf7\xdcc\xac\x03\xe1\x83\x0f\x82\xeb\x825\xa1\x86>\x90\x89\x13\'\x9a\xcf\xe6\xeakN\xb0\xf9\x0f\xda\x05:\xc0G",%!\xc0\xcej<\xa4\xdd@\xfaB\xa4?\x98/\xfaG\x11\x08\x02\x02\xd2\x07\xff\xf2\x97\xbf\x98\xd2\xe4^\x0cB\xd1\x01\x15!\xf7\xca\x8c\x193L>\xa1\xfe\xcd\x08\xa82\x16_,D\xd5\x86\xa5yTZ\xc4\xcb\x80\xe3\xf9\xb7\xcb\xe22\xdaBvul\xaf\x86~\xd5\xef\xb0tS]\xbcH\xb4E\xdc\xe3\xcc\xcaMy\x14\x9d\xc8\xcfB\'7\x16\x8f\x81\xab\xd8\'`\xc7K\x8e\xa4\xd8ni\x0c\x07+\xcb\x185#B\x02^\xcb\xe7t\xe1d\x17\x8a\xcd\xa8\xa0\x87\x14\x01E@\x11P\x04\x14\x81\xc0\x11P\x020p\x0c\x03\xc9\x01\x03\x08\x0c\x91\xe6qZ\xe3\xce\xc8\x96!\x93\x10Ck\xe6\xee\xa1\xbc\x9d\xa5\x94\x90\x18\xc3\x93tw\x89\xfa\xe1h\x04\xd0N\xc6\xea/#\x91\x12\x93b\xe9\xf3\x17W\xd1s\xd7\xfdD\xdb\xd7\xbb\xac\xfe@!\xd7\xc2\xe9v\x90\x04\x13mL&@"\xc1\xf2\x06\x13\xedk\xae\xb9\xc6X\xe5\xfd\xf7\xbf\xff5\x16{PE,\xfe@\xce\xb54\xa9E^ \xea***\xe8\xbc\xf3\xce\xa3+\xaf\xbc\x92\x10L\x02\xfb\xa4<\xe4\x072\x11eb\xd2\x8c\x84m\xecCB\x19H8\x7f\xf7\xee\xddF\xa7\xdf\xfd\xeew\x06\x15\xec\x97\x89\xb6\x9d0I=\xa7L\x99b\x8aq\x82\x15\x12\xb0\x85^K\x97.%\t\x94\x00\xe5\xac&\x01\x91\xe7\xfc\xf9\xf3\xf1aK\xde&c\xfd\xa3\x084\x81\x80\xdc\xdf\x88\x08\xa5\xb4\xe7\x97\x97\xba\x0c\xd8\xf7\xee\xc1#\xfdJ\x0e\x04\xd2\xf9\xa0\x14sm]-\x9e\t\xbeg\xd3\xe2\x15\xeeaH\xe5\xae"6\xcb\xe5\x81\x8b\xdb\x82\xb3\xc5\xebBq\x02f?\xec\x1b\xb1\x8e?3\xea\x05\x05iR\x19 \x86\x1a\x82E\xbd\xc6}\x96\xde\xacn \xf4C\x11P\x04\x14\x01E |\x10\xc0#P%\xb4\x08\xa0\r\xb0n\xf23\xb7\x1a\xf0-b\xb9\x98`\x10<\xe2+\xcc+\xa7\x8d\xcb\xf2(%=^\x07\xd2\x96\xa3l}\x86u\xe2\xeb\x8f#\xfc\xc2\xd7\xdfc\x1c\xe4c\xc2\xdbkMAb\xf5\x17\xac\xb7\xec \xd6\x900\xd1\x06y\x94\x98\x98HO<\xf1\x84!\xdb>\xfc\xf0Ccu\x07\xc5d\xd2\x8d\x89\xacLn[B\x06\xe7M\x9f>\x9d\xbau\xeb\xe6\xb1\x9e\x03\xb1\x08\x02M\xcak)\x0f\xe8\x84\x84\xf3\xa1\'d\xcc\x981t\xd4QG\x19\x0b8\xec\xb3\x83\xf4\x12\xbd\xbc\xf3\xde\xb2e\x8b\xd9-\xa4\x84\x9c\x13\xea\xcf7\xdex\x83\x90\x80wk\xdb\xa6%\x9d\xa5\xde oai\x08\x91}-]\xab\xc7\x15\x01+\x11\x10\xab\xbfG\x1f}\xd4d\x8b\xefN\xee\x8b\xf8}\x10\xc2O,\x9d\xad\xba/\xad\xc45Ty\xf1\xcf9\x89O\xdb\x8d+\xf2).\x01\xab\x17B\xa5M\xf8\x96\x1b\x1d\xc5\x91\x80Kk\xa8s\xefTv\x1f\x92d*bK?s\x13\x80Uy\xa5\xbc\xc4\x96\xfd\x00\xc2\xdf4\x93\x8d\x8e\x15D\x07.,\xa7\xa4A\x19\x94z\\\x1f\x97\x9a\xcd\x13\xa3\xe8}\xa8\xd0\x85\x9c\xe2\xdd\xdb\xfc\xa1\xa2\x08(\x02\x8a\x80"\xa0\x08\x84\x0f\x02J\x00\x86\xbe\xadd\xb8\xf1=\xabR\xce\tk\x08m\x191E\xbb\xdfU.\x9b\xba\x9b\xa2\xd8\xdf\x89F\x03\x0e}\xe37\xa9\x01\x0f3a\xfd\x90\xda)\x9e\x92\xdb\xc5\xd3g/\xb2\xaf\xbf\xabg\xd0\xee\xcd\xc5d\xfc"q\xaf\t\x86\xd5\x1f&\t \xce\xf0\x89\xc9*Rzz:=\xf5\xd4STVVFO>\xf9$u\xea\xd4\xa9\x1eI\'\x93\xf0&\xeb\xe6>\xe0=1\x7f\xf3\xcd7\x8d\x0f\xbf\x82\x82\x02\x0fy\'DbK\xf94v\x1cz\x8a\xee\xcb\x96-\xa3\xc3\x0e;\xccX\x17J=\x1a\xbb&\xd0}R\x1f\xf1\x83\x17h~V^\x0f\xddPw\x08\xac\x00\xb1\xc4ZD\xf4\x96\xef\xbe~\xca\xf5\x086\xa2\xa2\x08\x84\x12\x01\xb1\xb8\x85\x9fP!\xd4d_(\xf5j\xaal\xfcNA\xb6o\xdfN\x1b7n4\xdbN\xd6\xd7(\x18\xe4?Q\xee\xd1\xd0\x8a\x99\xbb\xa8\x9a\x03L\xc0\x97\x9d\x8ao\x080\xffG\x15\x1c\x00.\xa3[\x12u;(\xd5u\xb1-0\xba\x1a\xab\xb6\xa4\x92\xaarK\x89\xe0\x07\x10,\xae\xa3\x85\x83\x82\x94TQ\xbbs\x11\xdb\x83\xc5uK\xba\xb6\x0f\xfc+\x16\x7fG\xf3\xa1C\xdcg\xcb\xbe\x03\xcf\xd6=\x8a\x80"\xa0\x08(\x02\x8a\x80\x03\x11\xb0e\x08\xe0\xc0z:Y%\x0c7\xd0\x0e\xcb9\xb9\x9c\x9d\xb54\x04\xf1\xb36\xb2\x9cf\xc1\xc4mTY\xc1\xd1\x80\xe3\xc05\xaa8\r\x01\x10*\xb0\xee\xcb\xe8\x95L\xbb6\x15\xd3\xdf\xae\x98F\xe3G\xbb}\xfd\xf1\x92\x1a,\xdf\xb1\x87"\xae\x8f\x84X\xd1a\x92\n\x9d\x10yw\xf4\xe8\xd1&\x98\xc4c\x8f=fN\x16\x0b=!\t\xeb\xe7\xd0\xf47\xe4\'\x84\xd43\xcf\x04\xd6\x80r?\xd9P\\XfY\xe3\xb6 [3\'\x87\xaa*j\xb8}y\xb8\xd4\x87\xb47Eau\x81\xe5\x82,\xdd\xcb~\xab\xf7\xec\xe3qL\x18\x8c1\xd1\x9d\xca\xab(.#\x95\x92\x87\xf7vA\xd2\xf4\xd2e\xbcE\xc3*\x1d8\r\x1c\xe9:Y\xff*\x02\x8a\x80"\xa0\x08(\x02\xe1\x85\x80\x12\x80\xa1o/3db5*8\xfd\xe0VG\xac\x02\xad\xd5\xce=\xde+\xe3h\xc0k\x17p4\xe0T{"\x82Z\xabt\xdb\xca\rV}I\xdc.\xa9\xbcD\xfb\x87\xffn\xa0\'x\xc9\xef\xd65\x05&R\x0c\x0c\xb8\xccRn\x1b!\x01\x19$$\x11&\xa2\x98\xa0\xf6\xe9\xd3\x87\xde}\xf7]\xda\xb6m\x1b\xfd\xf1\x8f\x7f4\xa5\x83\xf8\xc31LX\xe5|_\xd4\x12\xd2\xe9\x81\x07\x1e \x99\xa8c\x9f\x1d\x93_X\x12BO\x90\x80\xa7\x9cr\x8aQ\x13e\xc9\xe4\xdb\x17\xbd\x9b;W\xf2\x13"L\xea\xd8\xdc5\xc1>\x06|E\xaf\x8b.\xba\x88\xe0\xb3Q\xc4_\xec\xa5\xdeb\x01\xe8O\x7f\x10\x1d\xf4S\x11\x08\x14\x01\xb1\x1c\xfe\xe1\x87\x1fh\xeb\xd6\xad&;\x7f\xfbv\xa0\xba\xb4t\xbd,\xff\x85\xfb\x03\x88\xdc\x9b-]\xd7\x16\x8f\xd7\xb0\xef\xbf\xcd+y\x19p\x12\x93\xa4\xca\x00\xfa\xdc\x05`\x05X\xbe\xaf\x8a\x06\x1c\x9da\xae\xe5\xc7\xb7\xadR\xbe%\x9f\xea\xaa\x99+C\xc1N\x17fF\xa3\xb0\xe2B\x96\x01\xbbI\xe7&\xd4\x96\xf1\xf9i\xee\xe3JG7\x01\x94\xeeV\x04\x14\x01E@\x11p&\x02a\xf0dv&p\x16k\x857\x8a\x90/8UsB\xbb\xd82<\x93h\xc0s\xbf\xc9\xa2T8\xd4\xd6h\xc0\x0cu\xe8\x85y\x19n\xf1(\xea\xd8=\x91\xcaKj\xe8\xa5\xdf\xcf\xa6\x8f\xfe\xb6\xcc(\x06\x1fH\xe8\x0cv\x0f\xd8\xc5_\x96L\x96\x11\x85\xf7\x8b/\xbe\xa0\xac\xac,\xba\xf9\xe6\x9b\x8d.\xad\x8d\xe8kNn\xe4\x8f\x90E8\xf4\xfc\xf3\xcf\x9b\x84m;\x089\xe4+\x02\xc2\x12\xc4\xd4\xacY\xb3\xe8\x91G\x1e1\xbb\xad\x9elK\xdd6l\xd8`\xf2\x97\xc9\xbd\xe8\xe0\x94O\xe8)$\xdd\r7\xdc@\xaf\xbc\xf2\x8aQ\r\xfb\xa4\xed}\xd1Up\x14\xcbG\xa7\xd6\xdb\x97:\xe9\xb9\xe1\x8d\x80X\x01\xde\x7f\xff\xfd\xa6"\xd2G\x9dV+\xb9\x0f\xc7\x8d\x1bgT\xd3\xe5\xbf\x8d\xb7\x90q{\xc1\x87V\xcd\xce\xa6Tv\x89\x81\xa8\xb6*\xbe!\x00?\x80X\xf9\xd1\x7fX\'\xdf.\xf4\xf5l\xf7@\xa5rs\x9ek\xb5B8,\x90\x8d\x89\xa6j^\xb6\x9c\xd0\xaf#\xc5tr\x05J\x11K\xc6F\xaa/\xf3\xa6\x13\xf9\x98\xf8\x01\x14R\xb0\x91\xd3u\x97"\xa0\x08(\x02\x8a\x80"\xe0,\x04\xe4A\xe6,\xad\xda\x9e6B\xf6a\x9d\xa7+\x8c\xa6M\x04\xa0\x90H\x99\xf34\x1a\xb0S\xbaY\r\xbfyNL\x8a\xa2\xce}Rh\xde\xb7\xdb\xe9\xbe\xd3\'\xd1\x1an\x1f\x8c(\x8d\xd5\x9f\x1dKu\xdc\x95\xc7\xc4X&\xcbb9\x83\xa5\xb2\xb0HY\xb3f\r]z\xe9\xa5\xe6L\x1c\x03q\xd4\x9a\x88\xbe\xad\xc1\xf5\x9dw\xde!X\xffA\xa0\x83\x90g\xad\xb9\xd6\xdfs\xa4\x8c\xbf\xff\xfd\xef\x9e\xf2d\x9f\xbfyz_\'\x93\xf9\xbd{\xf7z\xefv\xe46\x88>!E\xee\xb9\xe7\x1e\xba\xfe\xfa\xeb\x8d\x9e\xbe\x92\x80\xc0O\xfa\x8fX[Y\x89\xa9#\xc1S\xa5\x1c\x8f\x80\x10\xd9\x9f~\xfa)egg\x9b\xbe.\xfb\x9c\xa2\xbc\xdc\'EEE\x1eKE\xd9\xe7\x14\x1d\x9d\xa2\x07\xbf\x9b0\xb2nA\x0e/c\xe5\xe1R\xd3K4\x9d\xa2\xb2\xf3\xf4`\x0c\xab+k)\xadc<\xb5\xcbH0\xfaa|a\xb9\xb8G\xb3U\xd9\xc5\x1cz\x98\x99Z&\xd7\xc2B\xaax\xa5@\xfb\x04J\xec\xdf\xd1\xa5n\xd3\xd8\xc8\x91n|\xe2\xc1aQ7UR\x11P\x04\x14\x01E@\x11\xf0B L\x9e\xcc^\x1aG\xee\xa6\xbc\'\x85\x15 \xc4\x96e\x05\x12\r\xb8ho\x05\xad\xd7h\xc0.\xa4C\xf8\x17~\x19;\xb2cn\xa6c\xe8\xad?\xfdL\xef\xfee\x01;:G\x14[\xfb\xad\xfe\xc4\xe2O\x88\xbf\x93O>\xd9D\xe0]\xb1b\x05\x9dv\xdai\x06\x15\xb1\xf8\xc3\xb9B\x18\xf9\x0b\x97\x90Ns\xe6\xcc\xf1,%\x0e\x16\xf9\x07\x9d1\xb9\x16\x92\xee\xd9g\x9f5\xd5\xb0\x8a\x14@\xdeB\x84\x15\x16\x16\x9a\xbc\x9d>\x99\x87~\xd2\xa6\x1f|\xf0\x01\x1dq\xc4\x11\x94\x9b\x9b\xeb\xc1\xa85\xfa\x0b~\x88\xfe\xbb{\xf7nK15\x99\xe9\x1fE\xc0\x0f\x04\xd0/\xe5~|\xe9\xa5\x97\xfc\xc8\xc1\xfeK\xc4\xda\xef\xab\xaf\xbe2\x85\xc9\xbdh\x7f\xc9\xe1WB\xad\xdb\xe2o\xfb\xfa}\xb4k\xf3>JJ\x893A\xb2\xc2\xaf&\xa1\xd5\x98\xdf\xe31\x1f\x17E\x03\xdcV\x80v\xf7\xb9\xca\x9d\x1c\xd4\x0b\xbe\xa6\xcd\x12\x87\xd0\xd6\xbd\xc5\xd2\x99\xd6\xab-\xab\xa6\xa4\x81\x9d]\xa76\xff\xe2\x154\'\x1c\x1c\xba\x1c\x0b\xbbV\xed\xb4X\x84\x9e\xa0\x08(\x02\x8a\x80"\xa0\x088\x01\x01%\x00\x9d\xd0\n\xf5u\x98\xce_\x8b8ap\xe1~\x97Z\xff\x84@\xbfI4\xe0\xa5Svi4\xe0@\xc1\xf4\xf3z8\xe0\xc6\xd2\xde\x8c^)\xb4~q.\xfd\xf5\x92i\x84e\xd9\x10\x0c\xca\xed\xf2\xf5\x87\xbceb,\xc4\xdfQG\x1dE\x93&M\xa2\x993g\xd2\xb9\xe7\x9ekt\xc0\x04\x1a\x04\x90U\x16\x7f\xc8\x0f\xe4\x1bH\xa23\xcf<\xd3\x94\x81\xef\xad!\x99\xcc\xc9\x16\xfd\x11\x02\xf0\xc5\x17_49b\xb9\xaa\x90X\x16\x15A\xfb\xf6\xed\xb3*+\xdb\xf3\x11\xfc\xd1/\xe0\xc3\xaf{\xf7\xee\xe4MH\x08I\xd1\x94"2\x81\xcc\xcf\xcf7\xc1a\x9a:O\xf7+\x02\xc1F@\xfa\xee\x0b/\xbc\xe0!\xff\xa5\xbf\x07[\x97\xc6\xca\x93{g\xc2\x84\t\xe6\xb0\xfc.7vn[\xdfW\xe7\x1e\nU\x94V\xd1\xae\rE\x94\x9c\x16\xebZ^\xda\xd6\x81\xf1\xb1\xfeuu\xfc\x1c\x8e\x8f\xa6\xfeG\xb9\xad\xdc\xec\x9a\x01\xb8m\xe4*7\xe7\xf3"Y~\xb7m\xcbH\xd6\xc7\xca\xb7x:\x83\xc1Af\xe2\xfb\xb6j\x89\xb4\xd4\xe8\xe0\x16\xb3\xd5\x13\x14\x01E@\x11P\x04\x14\x01\x87!`\xd7\xe3\xdfa\xd5\x0c\x0bu`\xf1\x87\xf6X\xc3i\x89[c[<\xdd\xec\x8f\x06\xbc\x9d*\xca9\x1ap<\xb8F\x95`!\x80@\x1f\xc9\xed\xe3M\xa0\x8f/\xfe\xb9\x8a\x9e\xfd\xbf\x9f(w{\t\xfb\xcav\x8d\x9a\xed\x9a\xa4b\x82\x89\xbc\x85\xf8;\xf5\xd4S\r\xe9\xb7d\xc9\x12:\xe7\x9csL\xf5\xc5\xe2\x0fD\x99LP\x03\xc5\x05e\n\xf16j\xd4(*//\x0fY\xb4K\xd4\x1d\xba\x80\xb0z\xe8\xa1\x87L\xd5D\xb7@\xea\xe9M"\x02\xc3p\x13\xb4\x11\xc8P\xe0s\xc9%\x97x|>\x8a?\xbf\xa6\xfa\xa4\xd4\x1b\x96\x83r\x8e|\x86\x1b\x06\xaaod!\x80~(\xf7\xb6\xd5\x16\xbf\x81"\x85\xfbF\xee\xady\xf3\xe6\x99\xec\x84\xb0\x0c4\xef\x88\xbc\x9e\xe9\x96\x98X\xd7\xf3q\xfd\xd2<\x13W"\x8a\x7f\xc7U|D\x80G\x99\xf0\x9f\xd8k@;sa\x1d\x8fElY\x06\xec\xce\xb4b;[\x00&\x84\xc9\xf8\x92\xbbSm5[\x0ewL\xda?\xf6q\x13\x99\x8d\xa0,\x04\xe0A\xeecM\x9f\xd9\xc8\xc5\xbaK\x11P\x04\x14\x01E@\x11\x08%\x02:\x82\n%\xfa\xf5\xcb\xc6\x80\x02\xed\x01\xf6@\xa2\x01\xdb\xd3>\xee\xa1K\x05/wX3?\x87\x12S4\x1ap\xfd\xa6\xb0\xe7\x9bY\x05\xc3\xd1\xe5:\xf5J\xa6\xe2\x82Jz\xe9\xc6\xd94\xe1\xad\xb5\xa60\x90\x7fu\xcdG\x9e\xf3K)\x90xbY"\xc4\xdf\x88\x11#\x8c\x8f\xbf\x193f\x10\x96\xfdB0\xf9\xc4\x84\xd9*\x8b?oe\x85\x10\xfa\xf3\x9f\xffL\x99\x99\x99fp\x1d\xca\xc9\xae\xe8\xf3\xdcs\xcf\xd1\xa6M\x9b\x8c\xaaBdy\xeb\xed\xcb\xb67Y\x1a\xca\xba\xf9\xa2s\xc3s\xa1\xb7\xd4\xe3\xbd\xf7\xde\xa3\xfe\xfd\xfb\xd3\xdc\xb9s\xcdi\xd8/}\xc4\xfb:\xc12//\xcf\xec\x16\x92\xd9\xfb\x1c\xddV\x04B\x85\x80\x10\x80\x12\xe8\x06\xa4\x9b\xf4\xd9P\xe9\x84r\xe5\xf7f\xe9\xd2\xa5\xb4s\xe7N\xa3\x8a\x13\xf4\n%&-\x95m\x9e\x9f|\xd2\x8a\x9fvS\x15\xdcd\x88\xd3\x94\x96.\xd4\xe3\x1e\x04L$\xe0\xe2*\xea\xdc;\x8db\xe3\xd8\x02\xdf\x1c\xb1\x8f\xbb\xaa\xdc\xc3~\x00\xf9%33\xf1\x1e\x1d\x1c\xbd\xc1\x16\x92\xc0(&#\xb9%5\xdd\xa3h\xea\xe2>\xd1>\x10[\xd2D\x8f+\x02\x8a\x80"\xa0\x08(\x02>"\x10&Oe\x1fk\x15\xbe\xa7\x8b\xc5\x1fB\x02\x82\x08D\xfb\xc8@\xc3\xd2ZI4\xe0\x85\xdfm\xa5\x94\x0e\x1a\r\xd8Rp\x1b\xc9\x0c\x81>\xe2\x13b\xa8S\xcf\x14\xfay\xfc6z\xf4\xc2\x1fi\xcd\xcf{\xcc\x99xYn\x07\xf9\'d\x8c\x10\x7f\xe7\x9dw\x1eM\x9d:\x95\x16.\\H\xa7\x9dv\x9a)[\xac\xd501\x16\xf2\xa7\x11\xf5\xfd\xde\x05\xd2\x08\x93\xf0\xd9\xb3g\xd3?\xff\xf9O\xbf\xf3\xb1\xf2BL\xb4\xc5\xfaF\x96\xae\xdez\xeb-sH\xf6y\x9f\x17\xeam\xb1\x0ez\xec\xb1\xc7\xe8\xbe\xfb\xee3\xea\x80\xf0\x02\x96\x82\xa7\xaf:&&&\xfaz\x89\xa3\xcf\x07\x0e\x82\x13\x96\x90\x1fv\xd8at\xdbm\xb7\x99h\xc7\xd2\x9fd\t\xb0\xa3+\xa2\xca\xb5Y\x04\xe47\x12\xf7y\xa8E~\x8b\xc7\x8c\x19cT\x91{+\xd4z\x85C\xf9u\xee1\xca\xa6\x15\xf9TS\xc9\xc3"7\xc9\x14\x0e\xba;EG\x1e20\x01XC\xfd\x8eH7*Y\xfc\x1e\xf2\x80jVr \x10\xf3r9\x8c\xa82\xab\xc6g\x07\x80\xa1;\x14\x01E@\x11P\x04\x14\x01\x07 \xa0\x94\x8f\x03\x1a\xa1\x81\n\xf0\x03\x88v\xc9\xe4\xb4\xd0}L|\x03\xba\xbfZ\xf3!o~\xe7\x7f\xbb\x9d\xaax0\x1d\x1b\xe7f\x04\xad\xc9\xbe\xcd\xe6b\x96\xfcvI4KA\xdf\xb8s.}\xf0\xe4R\x83Et\x0c\x98?\x9e\xb4XD\xe7\x82\xa8\x02\xa9&K}\x87\x0f\x1fn\x96\xf9.^\xbc\xb8Q\x8b\xbf`5\x08t\x12\xeb\xb7+\xae\xb8\xc2Uw\xb7\xae\xc1\xd2\xa1\xb5\xe5x\x93\x92/\xbe\xf8"\xc1j\x12\x11\x82\xa1\xbf\xe0\x0b\xabI\x90`\xde\xe76\x97\xbf\x90b\xcd\x9d\x13n\xc7\xa4\xee\xb2tq\xf4\xe8\xd1\x94\x91\x91A\xcf?\xff\xbc\xa9\x8a\xf4A\x7fI\xd3p\xc3C\xf5\r/\x04\xa4_b\x19{vv\xb6\xb9\xb7\xa5\xcf\x06\xbb&BF~\xfa\xe9\xa7\xa6h\xb9\xa7\x82\xadG8\x96\x87\x08\xb6\x90\xec\xcd\xc5\xb4;k\x1f%!\x80\x99\x1d\x16l\xaeb"\xf2/\xfc\x00V\xb2\x05\xe0A\x87t\xd8_?;\xc89\xf78\xa72+\xdfE\x00\xf235\x1c\xa4\x8e\x07hu\x15p\xc1\xdd\xac\xc8(\xae\xdc}\x16*\'\xfb\x9a\xbdP\x0f*\x02\x8a\x80"\xa0\x08(\x02\xa1F <\x9e\xc8\xa1F)\xf8\xe5c8\xc6N\xe2\xec\x8d\x06,o~\x0b\xf6\x94\xd1\xb6\xcc\x02\xe3S\xc7,[\r~}#\xa2D\x83\x1d\x83\x9a\xc1Q~7\xaf\xdcK\x7f\xbdd\x1a\xcd\x9f\xb8\xdd\xd4\ro\xdd\xad\x9a\xa8\x80\x98\x82\xd5\x88Lj\x07\x0f\x1el\x88\xbfE\x8b\x16\x11\x02}@\xc4\xca$\x14d\x94\xe8\xf5\xef\x7f\xff\x9b6lp-y\x96}F9\x07\xfe\x11+\x9ci\xd3\xa6Q\xc7\x8e\x1d\xe9\xaf\x7f\xfd+!\xb2-\xf6\x03C\xc1\x1c\xaa\x83\x0ck\x98d?>SR\xec\xf4\xad\x84\x12B\'\xe8W\xc0\x04\xa4Eee%=\xf0\xc0\x03\xd4\xa7O\x1fcq\n\xad\x84(\x0c\x9d\x86Z\xb2"p \x02\xf8\xfd\x11\xa2\xed\xb5\xd7^3\'\xe0\x9e\x0e\xb6\x80t\xc4\xfd\xb3g\xcf\x1e\x13\x18\t\xe5;\xfd\xb71\xd8\x185W\x1e\xc8\x19H\x19G\xb2\x05\t\x98\x94\x1ak\x995}s\xe5F\xda\xb1\xda\xeaZJN\x8b\xa3\xf4\xae\xae`\x17v\xf0\x7f\xc2\x87Un+\xe0N\xce\xed\x16\x82\xfb\xcd\xafv\xab\xe5\x88\xf7E\x15\xad\xbdT\x08@{ l\xad\x16z\x9e"\xa0\x08(\x02\x8a\x80"\xe0\x03\x02\xc1\x1f\x01\xfb\xa0\\\x1b>U<\xdb|\xc5\x18Tr\xb2\xed\xed\xa2\x10\x1f\x8b&m\xa7\xd4\xf4\x04\xf5\x03\xe8g\xa7\x835e<;\x8e\xee\xd8#\x99\xa6\xfeo#=s\xd5\x0c\xca\xd9^b\x96V#K![\xfd\xcc\xde\\\x86\xb6\xc2\xa4\x15\x13F\x10-\xbdz\xf5\xa2\xcf>\xfb\x8c233=\xc4\x1f\xac\xd5pL&\xbb\x81\x94\xe7\xcf\xb52\xd1\xc6\xe7\xddw\xdfm\xb2\x08\xc5D\xdbW\xdd\x85\xb8\x12\xdc\x9e|\xf2Ic\xe1v\xe9\xa5\x97\xd2{\xef\xbdG[\xb7n\xf5d\x89vh*\xe1$X\xc6A\xe4\xde2_"\xe8\x0f\xb0\x02\x11(\xa4\xe8\xb6m\xdb\x0cY\x8a*\n\x8e\x11T]\xadJ\x84 D\xdb?\xfe\xf1\x0fS\xa3P\xfe.M\x9c8\xd1\xe8\x00k@\xd1+B`\xb6\xb7\x1a\xcc#\xc5\xc4\xba\xb8\x96\xac\xd5\xf9\x14\xc5\xd6l\xea\xba\xc4w\xc8\x99\x87\xe6\xdf\xef(\xeaw\xa8k\x19\xb0-\xcf*\xb7=\x1c\xc6>\xd5y\xec\x070\x96\x87\xb12\xb2\xf5]\xe5\xe0\\\x81\x97\xabL2\x9b\xc0%\xa6Dw%\x0e,]\x08\xbf\\\xf7!\xf9~\xe0\x99\xbaG\x11P\x04\x14\x01E@\x11p\x18\x02\xba\xe6\xd3a\r\xe2VGF\x1d\x1b\xf9\xfb\x1cN\xa38a\x9f\xe5\x83\x0c\xf8:\xae\xe1\xc1\xe0\x8aY\xbb\xe9\xd2\x92j\x8a\x8d\xe7e\xa5\x18\xa4Y^\x12\xe7\x19\xa1R\xcb\xfe\xfe\xd22\x12\xd8\xc2\x8fh\xf4=\xf3\xe9\xe7\t\xdbLM\x11\xe8\xc3\n_2\x98\xa8\x82X\x91\xd4\xad[7z\xf5\xd5WI\x96\xd7\xa20!dBa\xf1\xe7\xdd\xacB\x00\xc1\xd7Vqq\xb1\x87\xb0\xf4>\xc7\xc9\xdbb\xe1\x06\xcc\xb1\xfd\xe5\x97_\x9a$:w\xee\xdc\x99\x0e>\xf8`\x13\x15\x17\xfb@\xb8b\xc90\xea\x8aO8\xf6/--5\xa7K\xc0\x15\xb96\xd2>\x85\xb8\x90\xc9\xa3\xb4}\xa4\xd5S\xeb\x13\x19\x08H\xff\xc4}\rR\xff\xa6\x9bn2\xf7\xb8\x90\xfe\xc1\xa8\xa5,\xff\x85u4D\xee\xa1`\x94\x1d)e\x18K{\xae\xcc\xda\x059t\xceM\x83\tKZU|D\x80\x07y\xb1q\xd1t\x10\xfb\x01\\2m\xa7\xeb\x15\xb3\x8d\xe4\\\xc5\xd6\x02\x8a\xed\x9aJT\x8eB\x1c\xdc^\xe0(\x8b+\xa8\xb6\xd2\xbd\xd6\\F\xe2\x07\xc2+#d\xd7\x12\x0f1w<\xf0<\xdd\xa3\x08(\x02\x8a\x80"\xa0\x088\x0e\x01%\x00\x1d\xd7$\x1e\x85\x106\r\xa3\x90\xaf9\x81\x00\xb4e\xe4T\xe3\xf6\x9f\xb3c}\x11m\xe17\xea\xf0\x0bS\x98SN1<8Ti\x1e\x01LD\xa2\xa3\\K~wl,\xa2\xb7\xee\xfc\x99\xb63\x8e\x106\x12\xb3\x84\xfcC^2Il\xdf\xbe==\xfb\xec\xb3t\xeb\xad\xb7b\xb7\x11!\xfe\x829\x89\x95\xb2\x1b~b\x82\r=\xca\xca\xca\xe8\xef\x7f\xff\xbb9,\x93\xee\x86\xe7:\xf9;t\x16"\x10\x13v,\xdb\x93z\xe4\xe4\xe4\x10\x92\xca~\x04\x04\x9b\xfd{tK\x11p&\x02r?\xbf\xf4\xd2K\x86\x00\xc4\xef\x15\xfa\xaf\x90\xd8vj\x8d\xdf\x14\x94\x87\x17\x05\xb3g\xcf6E\xc9o\xbb\x9d\xe5FZ\xde\xf2{\xf3\xcb\xc2\x1c\xaa\xadb"\x8b-\xcb\xaayI\xabJ\xeb\x11\xc0K^\xac\xca\xed5\xa8\x9d\xb9\xc8\xbc\xa8\x04\xa5\xd54\xe1\xd5\xfa\xcc\xbd\xcf4\x03\xa1:\xaa\xe2@ \xd1\'\xf6\xe32e\xc5\xac\xf7I\x0e\xd9\xe6\x01]t|<\x95\xb3\xcf\xc2V\x88\x0c\x90\xb3\xdc\xe7Z\x8d\\+T\xd0S\x14\x01E@\x11P\x04\x14\x01\xff\x10\x90\x87\x98\x7fW\xebU\xc1@\x003\x85\x12N k\xff\x9f\xbd/\x01\x93\xe3\xaa\xae\xbe\xd3\xcb\xec\xabF\x1a\xed\x92-\xcb\x9b\xbca\x1bK\x18\xf0\x026\x18\x0c\x845{\x08\x81\x90\x9f\xcd\x10 \x84\xff\'\x10\xb3\x1al\x02\x01\x02\x06\xe3,\x908\x0ed1&\x04\x08`\x1bclc\x03\xde\x8dw\xc9\xb2\xf6m$\xcd>\xd3\xeb\xfc\xe7\xbc\xaa+\xb5\xe4Y\xba{\xaa\xba\xab{\xee\x9d\xef\xf6tWW\xbd\xe5Tu\xbd\xfbN\xddwo\xf0F\x06Jt\xc9)P\xf8\xe3x\xa2\x9eh\x02\xefhW\x05\xd0\x98Y\xdc\x92_`\xb5`i\xab\xdc\xf5?\xdb\xe5#\xaf\xb8\xc9\x91\x7f\xf4\xfa\xa3\xf7$\xe6\x94\x81\t\x89\xbfO}\xeaS200p\x88\xfc\xe3\xc4\x91\x13!N(+1y-\xa63:1\xfb\xc0\x07>\xe0v\xd7\xc9u1\xc7Fq\x1f\xf6G\x97T\x13cUz\x07N\xa5\xfa}\x14\xfbbm2\x04\x0c\x81\xc3\xb1Q\x196\xe1\xce;\xe9\\\x7fx[\xa5\xf0\xf9\xe2\x17\xbf\xe8\xaa\xe2=\xc4\xa4\x0c\x04\xfc\xb15\x9b\x99tcn\xa2\x89a1\xca(g\x1e\x1f\xc2e\xd3\xa9\xb1\xac\xf4.\xf5\xe2\xd5\x92\x10$\xff\x17\xb8\xf8\x97xf\xc7\x10\x96k\x87a\xc0\x06\xd8b\xda\xc2\x08\xe3\x92zz\xbfW\xe8\xec\x80\xf0\xaa{\xd4oA\x80\x16_\x80}\xb2\xa2\x0c\x01C\xc0\x100\x04\x0c\x81)\x100\x0bt\nP"\xb2\x89\xc6\x05M\x90G\xa0\x0f\xf8m\n\xc5\xcc\xd5e\xaa\xf7\xfch\xbb\xe4`T\xc7mI\x8d\x0f\xf7\xd4\xff\xf2xt\xde\xd2\xd5(\xad\x9dq\xb9\xee\xe3\xf7\xcb5\xef\xbf\xdb%\xf8 \x91\xea\xb0\x0c\xc0\x14\xd4\xc9a__\x9f\xf4\xf7\xf7\xcb\x87?\xfca\xd7\x18z\x91\x90\x98\xe2\xf7Q!\xfe\xd80\x12\x92l\x13\xbd\xe3\xbe\xfa\xd5\xaf\xba\xb6*!\xe8>\xd4\xf8\x0b\xfb\xa2\xca\xbeN\xa5\xfa}\x8dw\xd5\x9ao\x08\xd4-\x02\xfc\x8d\xea2\\f\xfd\xa6\xe8\xe70;\xcdz\xf9@\x84r\xfd\xf5\xd7\xbb\xffz\x8fw\x1f\xec\xa5$\x04\xe8XFy\xe2\x9e~iB&\xe0\xc9\\(\xa6\x91WI\x1d\xbe6\x80\x01LO\xe4d\xe1\xf2\x16\xf7\x10\x93]\x0c\xc5\x9e\xf0OK\xe6\xe0\xb8d\x91X\xa3!\x89\xe7\xd8\x01\xd8G\xe1\x9c\x12<\xe4\x83\r\x93V\x02\x90\x0fs\xa7\x16\xed\xc1\x08\xbe~\xd2\xdfE\xb7M}\x84m5\x04\x0c\x01C\xc0\x100\x04"\x84\x80\x11\x80\x11:\x19G5\x85\x06\x05g\x0cLGv\xebQ\xdf\x05\xfa\x11s\x13\'\xcf<2 \xfd;F\x91\r8nO\xd4\xa7A\x98\x99|\xbb\xfb\x9aet0-W\xbd\xe9v\xb9\x19\t?(4\x9e\x83\xca\xf2\xcb\xf2tr\xd8\xd9\xd9\xe9&\xa8\x9c@\x92t\x8a\x92\xc7\x1f\xdb\xa9\xa2\x93\x07f\xcf\xa5\xb0\x9dl\xaf\x89!`\x08\x18\x02QB\x80\x0fQ(\xdf\xfd\xeewepp\xd0\xbd\xe7\xfd5L\xd1:\xef\xbd\xf7^\xd9\xb4\xc9\x1b3t[\x98\xf5\xd6k\xd9\rx\xd8F\xd9x\x7f\xbf\xb4\xb4&\xeb\xb5\x9b\xa1\xf5\x8b\x1e\x80\xe9TV\x16 \x0bp\xefR/\x13p\x98+?r\x07G\x91Xc\\b\x0c-\xe3\x82L\x87\xd6\xb5\xf2\n\xa6\xa9\xd2\x1c\x97\xcc\x9eaIm\xf3\xee\t3$,\xd1\x9b\xc5C8\xca\x8b\xf9\x12aZ\xb3<@\xec(C\xc0\x100\x04\x0c\x81zF\xc0\x08\xc0h\x9f]eP\x18\x07\x90F\x87\xe7B\x10B\x9b\x95\xc0\xb9\xf7\xc7\xdb\xa5\xad\xdb\xb2\x01\x1f\r\xb1["\x839\xc7\xa2Um\xf2\xd4=\x07\xe4\xaf_u\x93<\xf9kM\x00\x87\x93\x13\xf0\x04R\xc9\xb3\xbd{\xf7\xba\x04\x13z~\x8enW\x14>\xb3\xefl_*\x95\x92\xab\xaf\xbe\xda5I\xdb\x1f\x85\xf6Y\x1b\x0c\x01C\xc0\x10P\x04x\xbf\xd2\x07,\x9f\xfd\xecg\xdd\xe6\xb0\xc98\xf52\xbc\xe6\x9ak\\}\xfc\x1c\xf4\x98\xa1\xfd\x9b\x17\xff}\xcbh\xe7\xc6!\x19\x19HK\x9c\xc9\xcb\x94\x96\x99\x17\x00\x04\xd0I`\x98\xc7"\x93\x15\xc7w\xb9\xc2B\xe1\xe5xR`\x1b0dJ\xf6\xc0\xb844Ft\x1d0:\x9fhm\x944\xc8\xbf\xfcD\x06x\xc0\xd8\x9b\xfe\x82R\xbb\xfcn\xec\xc8\xab\xce\xe6Q\xee\n\xb2\x17C\xc0\x100\x04\x0c\x81ZA\xc0\x06\xaeh\x9f)54\x1eD3\xb9\x14\x98\x12\x8a\x99\xcbl\xc0\x94\x07n\xddE{\xedP\\@o\xeb\xfc~e\xa2\x94\xa6\xb6\xb8t\xe3i\xf9w\xbf\xfc\xa8\\\xf9\xc6\x9f\xc9\xf80\x8cD\x02\x15\xb20\xbb,\x93jDY\x94\xec\xfb\xc4\'>\xe1\x9a\xc9\xc9\xb5Mn\xa3|\xc6\xacm\x86\xc0\xfcF@\t\xc0k\xaf\xbd\xd6\x01\x11&!\xa7\xf7B\x92\x8c\xcc>L\t\x9bpt\x95\xd4\xf1\x8b\x1aA\xfb\xb6\x8d\xca\x9e-\xc3\xd2\xd4\nB\xd5<\xceK;\xe30_\xd2\xa3YYuJ\xb7;N\xaf\xd3\xd2\n)bo\xdfL\xca\xee\x1bA\x1c\xc0\xd0\x9ea\x17\xd1\x90\x19vq6K\x83\x8c>\x88\x8c\xc8\x94\x99\x9b\xa9\x86\xdf/\xbc\x9d\x8d\x00\xf4q\xb0\x7f\x86\x80!`\x08\x18\x025\x82\x80\x11\x80\xd1?Qf\x9dG\x00\x86\xf3h\xf9p\xfbS;\x06\xe0\t\x08\xf3\x95\xeb\x8f\xa3&\t\\Kc\x132v\xcf6\xafex\xe8;\x8d\xd0(&=\xb8\x0b\xfa\x80\xbf\x8f\x19\xca>\x10\xf6\xcf\x100\x04\x0c\x01C\xa06\x10\x88\xe0H\\\x1b\xc0U\xb0\x95z\x8enA\x9d$\x02\xf9yZ\xeb\xa4\xdcv\x91\xcb\x8a!\xe8q6\x9b\x97\xcd\x8f\xec\x97\xa6\xf6ynP\xd3\xa4\x03(\x0b\x96\xb4\xca\xeeg\x86\xe53\xbf\xf73y\xe0\x16\xef\xe90\x1d\xff4qJ\xb9x\x97r\x1c\xb3\xffFUtr{\xddu\xd7\xc9\xf0\xf0\xb0\x8bW\xc8\xc9\xb5\x89!`\x08\x18\x02QF@\x1fT|\xfa\xd3\x9fv\xcd\xd4e\xbaA\xb6\x99\x0fr4\xf9\xc7\xd7\xbe\xf65W\xb4\xd6\x1bd=\xf3\xb1\xac\x06\xe4\x93\xa0l{\x1ca\xd8h\x15\xa9_\x96\xdbj/\xb3!\x00\xfeO\xb2\x13yY\xb2\xa6\xe3\xf0\xaea`\xe8[\xab\xd9\xed\x83\x9e\xdd\xa4\x16\xed\xe1Z\xab\xfb\x0ed_\xa2\xb3Y\xc6\xee\xdd\xe1\xb5of\x0c\x9ce\x88\x06\xdf\x0f\xdd\x0c\r\xc5\x1e\xaf. V\xbb!`\x08\x18\x02\x86@\xbd#\x10\xb5\xa1\xb8\xde\xf1.\xa7\x7f\xea\xf1w/\x0e~\x14\xcas\x16\xce\x13G\xffjx\xf0\xa7\xbb]\xcc\x96\xf9\x9a\r\xd8\x91\xa1\xc9\x06d\xc8k\xc3\x92\xe8\x1d\xf2\xb1\xd7\xdd"\xbb@\x02:\xaf?\x80\xcf\xef\xc3\x16N\x1cuB\xaa\x1e\x80\xea\x15\x18v\xdd\xa5\x94\xafm\xd4I\xb4\x12\x82\xa5\x94a\xfb\x1a\x02\x86\x80!Pi\x04\xd4\xe3\xef\xbe\xfb\xee\x93\'\x9f\xf4\x92y\xea\xb6\xa0\xda\xa2\xe5\xddt\xd3M\xb2e\xcb\x16Wl-> !\'BE\xeey\xb8?\xcd\xcc\x90\x04\x85\xddl\xe5h\xcc\xba\x8d\x0f\xf6K.\rO\xf4\x84\x99\xb3\xb3av\xf4\xf7|\xe0\x1bG\\\xbe\xe5\xc7{$`(\xb1\x86}\x83)\r\x0f@g<\xc5#t\x9eh\xcb\xc1\xfb/\x9f\xc9\xc9\xf0\x9d\xe4\xf3 \xd3g\xff\xe5\xb7\xf4\xfe\xe3\x0f\xe0\x87\xfc\x00ag*`\x11\xba\xba\xec\xc5\x100\x04\x0c\x01C\xc0\x10\x08\x04\x81\x08\x8d\xc4\x81\xf4\xa7\x1e\x0b\xa1qA\xa3c\x18zg\x98\x1dd\xa0f\xca}\xb7\xec\x92\xd4x\xd6\x05\xd6\x0e\xb3\xbe(\x96\xed\xe2\xfd!\x1b\\Wo\xa3|\xfb\xca\x87\xe4K\xef\xb8K\xb2\x98\\\x90\xfc\xab\xa4\xd7\x1f\xb1QO\x11.S\x8b\xa2\xe8D\x96\x99-\x9fx\xe2\t\xd7D#\x00\xa3x\xa6\xacM\x86\x80!0\x15\x02\xfa\x00\xe3\x8a+\xae\x98\xea\xeb9o\xd3\xf2?\xf2\x91\x8f\xb8\xb2\xf4\x9e>\xe7\x82\xcb,\xe00\x91\xe7\x91y$\xf4\x0e\xab\xc7l\xe8>\x85U\xd02\xa0\xe6\xf1\x9a\x8b\n\xdf\xe1\x13K\x1b\xef\xdb\x8fp%L\xecR\xd8b{_\x0c\x02\x0c\x9b\xc8\x95\x1f\xabN\xf6\x96\x01\x87I\xed\x92\xb0\xcd\x0e \x130\t\xc0p\x1ea\x17\xd3\xe5#\xf7\x01\x00\xb1\x8ef\x19\x7fl\x9fdv\xfa\t}\xa7_\xfe\xcbc\t\xd1(\xf4\xbf\xf9\x01\xa2\x0f\xe8\xbdO\xf6j\x08\x18\x02\x86\x80!`\x08\xd4\x00\x02f2\xd5\xc0IB\x13i{\xd3\xf0P\xa3\x83\x84`\xe0\xa2\x9em\x99tN6\xdd\xbf_\x9a\x11X{>\xc5\x01\xcc#\xaePgO\xa3\xc4\x921\xf9\xe2;\xee\x96\x1f\xfc\xbdGjU\x83\xfc\xe3\xc9U\x8f\xbfm\xdb\xb6\xb9s\x1d\xca\xd3\xf99\\E:\x99\xfd\xccg>\xe3J\xd1\xc9\xee\x1c\x8a\xb4C\r\x01C\xc0\x10\xa8\x18\x02\xfa\xc0\xe2\xfa\xeb\xafw!\x0c\xb8\\W\xb7\xcd\xb5\x11Z\x0e=\x0c\x7f\xf5\xab_\xb9\xe2t\xdb\\\xcb\x9e\xe9x\x1a\nJ\xea%`6$\xa9\x88[\xc1m\x87\x89<\x8f\xcc#\xa1wX=CC\xf7)\xac#\x8e\xe3{\xe3\x8drB\xb2M\xcel\xf2\xb2\xc6\x16~_\x8d\xf7j\xaf\x8c\x0efd\xff\xce1I4\xc1^\x89\n\xb1T\r@\xca\xa8s\x12q\x9e\x13\x8d\r\xb2\xfa\xe4\x1e\xef\xe8\x90g\x04\x99\x1d\x83"\xb0\xaf"\xc3\x00&hJO\xca\xd0\x0f\xb9\xb8\x062s\xff\x95\xec\xfb\x1e\xf6\xdc\x0e\xe5O\x8d?\x17\x13C\xc0\x100\x04\x0c\x01C\xa0\xa6\x10\xf0\xa3\xa8\xd4T\x9b\xe7cc\xd5&\xbf\x1d\x9d\xdf\x01]\x0e\xe56\x1a \x81\x8a\x92]\xf7\xfcx\x87\x9cy\xf12\x19\xda?1[F\xb4@\xeb\xafVa\xf4 X\xb0\xa4Yv=="W\xff\xf9\xdd\xb2\xe3)<\r\x06\xba\xce\xc2\x031X\rQ\x02p\xfbv\xda\x9ah\x0b\x83\x0fFD\xe8\xfdG\xc2\x8fq\xff\xbe\xfb\xdd\xef\xbaVUbr\x1b\x91\xee[3\x0c\x01C\xa0\x0e\x10\xe0=\x8b\xf71\xde\xcf\xfe\xf9\x9f\xffY.\xbb\xec\xb2\xc0{\xf5\xe1\x0f\x7f\xd8\x95\xa9\xf5\x94S\x81\xde\xf9\x99\xf8\x82r\x98B\x99<\xc4@\xe8(\xe5\x19\x0b\xde\xa7C|\x98~\xe9W\xde\x84\xb1\xa4%\x96\x90\xd6\x06d\xb7\x8f%eY\xa2I\x16\xc6\x1aeq\xa2Q\xfa@\xf4\xf5\xc5\x9ad\x11\xde/\xc1\xf6\xf8\xa4G \xc6\xe1)\xd6<\x89\x9a\x91\xc4\xe1\xf8-\xb7\xfa%E\xe3\xdf\xd3\x0f\xed\x97\r\x97\xae\x92\x89\x91\xb4\x8fN4\xdaU\x0b\xad\x98D\xc8\xde%k\xda]SuYu\xe0\xedv\x86\x14\xb2\x0e\xc3\xcb\xae\xed\xcc\x15R%\x93\xea\xc8n\xd1kt\x01\xbc\xff\x1e\xdc!\xa9m~\x9c\xe5C?\x98#w\xf5?\xb1\x17$\x01\xaf\xf7?\x93=\xb4\x80\xc7>\x18\xf6\xcf\x100\x04\x0c\x01C\xa0v\x100\x02\xb06\xce\x15\xcdw\x1a\x1fc\xd0\xefC\xdf\x06\xa5\xa9B\x03$Pa\x826\x1a\x81\x8f\xfd\xaa_\xc6\x862x:\x1csO\xd5#\xc4=\x05\xda_\x87blR\xfaV\xb6\xcb\xc3\xb7\xef\x92/\xbc\xed\x17\x92I\xe5\x0e-\xf9=j\xde\x14l\xddE\x96\xa6\x04\xa0\x06\x93/\xf2\xb0\x8a\xecv\xe3\x8d7\n\xe3\\\xb1m\x1a\xef\xaa"\x15[%\x86\x80!`\x08\x04\x80\x80>\xb8\xa0\'3\t@\xf5l\x9eK\xd1\xfa\x80\xe4\xb1\xc7\x1e\x93\x1f\xfd\xe8G\xae\xa8r\xee\x8f\t\x0c\xbc$K\xe8\xa5GQ\xbao&\x9e\xa2=\x16\x97%\xf1f\xe9\x03\x81\xb7\x08\xe4\xdeb\xbc_\x08R\xaf\x13\xf7\xe8\x85 \xf6\x16\xc4\x13\xd2\x83\xed$\xfe:\xf0\xbe\x93\xd94`]d1\xf0#\xd9\xbd\xe4\xe0Z\x97C\x8d\x19\xd4\xc7\xe5\xbe\xfc\x83\xa3\x98\xd3Q\xf0\x1d\xed8ne\xa2Y\xb6e\'\x9c\x01\xa2nQ\xae\x81\x15~!)\x99\x03@O?tP.\xf8\xed52\xb0\x17\r\x08\xdc*\xaap\xa7*X\x1d\xed\xbd\xd4xFz\xfaZ]\xad.\xbb2\xae9}\xf8\x18XSh@\xe2\xbar\xcbl\x11s\x90\xd7/I\xec\xaa\t\x7fThG\x03\xb2 \x1f\xb8\xf17^3p-\xcd\xc0L\xf22g\x93\xef\x83\xde\x06\xc5\xce\xb6\xfc\x17\x18\x98\x18\x02\x86\x80!`\x08\xd4 \x02F\x00\xd6\xceI\xd3\xa7\x8d\x9cM\x90\x00\x0cE4\x0e\xe0\x1e$\xbdx\xe67\x07\xe5\x98S\x17\xc8\xe0\xfeq\x10\xb4\x87\xf8\xd0W\xe3\x00\xba\x07\xbe\x87\xbe\r\xea\x8dw\xa2\xf2\xa3i\x90\x80\xe3\xd2\xe0lJ\xff\xe4\x05UE1\xe5\xf0\x02N"5\x0e\xfe\xef\xfd\xe6\xaf\xbd#f\xbf\x88\xd5\xce\xbe\x12\x070Up}\x19\xc4\x1e\n\xf6j\x08\x18\x02\x86\x80!0\x8f\x10\xb0\x81\xac\xb6N\xb6\x9e\xaf\x9f\xfa\xcd\xd6\xcf\x81\xf6B\xc9-\xc6\xd5\x19:\x90\x86\x97\\\xfdd\xd7c\xdf\xba\x175\xcb\xbem#r\xf9\xabo\x91\x87\x7f\xbe\xeb\xd0$H\x89\xcf\xe9\xc0\xa4\x91\xac\xd8\xac8\xbeK\xde\xf7\xf7/\x90\xf7|\xf5\xf9\xf2\xba\xf7\xaes\x87\xccv\xfct\xe5N\xb7\xbd\x90\xec\x1b\x18\xf0\x83TO\xb7s\x05\xb7\'\x93IW\xdbw\xbe\xf3\x1d\xf7?\x8a\xb1\t+\x08\x87Ue\x08\x18\x025\x8e\x00\t@%\xea\xbe\xf2\x95\xaf\xb8\xde(\x91WJ\xd7\x944d\xdc\xbf;\xee\xb8\xa3d"\x91\x84\x9c\xc6\xfb\xfb\xb3\xceU\xb27\x9b\x91\xcd\xd91\xd9\x93O\xc9@>-\x13\xf8\x96\xfb(\x99\x97\x00\x17A\xa5\x07\x1f\x8d\x01\xd5R\x89=\x1cZ\xb4d\x80\x15\x93\x83P2\x18\xf4\xc2\xack\xb6F9/M\xdf\x8b\x8c^\x80M-\t\x8c\xd1\xb3\x1de\xdf\x17"@\xfe+=\x91\x97\xe5\'x\xd9\x9d\x19S1pa\x91>\xd1\x96=\x98\x82\x07 \x16\x1f\x85P\xcd\xec\xed\x9e\x94xw\x93\x1c\xc4\xd2\xdf\xec\x9ea6\xca\xc5&\x9c\xe18^M\xfcy=\x0c\xfd\x16\x94\x97{UZ\x8ezM\x0c\x01C\xc0\x100\x04\x0c\x81@\x10\x08\x85@\n\xa4eV\xc8T\x08\xe8\x83\xfd\x1f\xe2\xcb\x144\xf4\xf3\xf7\xd0\xcfvJk\'\xec\x9f:\xb0\xaa\'\x81^\xfb\x82F\xd9\xf2\xd8\xa0\\\xfe\x9a\x9b\xe5\xe0\x1e,E\x81Q:\x9b5\xc7\xcc\xc8\x14.\x8bnjM\xc8\xef\xff\xd5\xe9r\xf9w.\x92S^\xb0D\xb6\xa2\xac\xe5k;e\xc9\xb1^\x16=.\x9f\tC\x9ez\xca[\xa2\\H\n\x86Q\xcfle2\xb8=\x85\xcb\x92\x1f|\xd0\x8b\x99\xa8\xdbf;\xd6\xbe7\x04\x0c\x01C \xaa\x08(y\xa7qMI\x00\x96z\xbf\xd5\x87!\x7f\xfa\xa7\x7f\xea\xba\xe9\xc6\x97\x12\x9e\x0c!-\x81;\xee\xe4\xa6\x0e9\xafe\x81\x1c\x04\xe9\xd7\x0c\xfeA=\xf7B\x1a^\x8a>%\xac?\x85\x11s!b\x11FEti\xf3\xce\x8dC\x1e\xc7Tm\x90\xa2\x02L\x91\xed /\x97\xc22\xe0U\'y\x04`\x91\x87\x95\xbe\x9b\x7f^2{\x87\x95\x0b,\xbd\x8c\xb9\x1c\x01b3\xd1\xdb*\xa3wm\x95\xa1\xdb6\xfa%\xcdf\xfd\x1d\xaa\xf0cx\xe73\x86`\xe1M\x0c\x01C\xc0\x100\x04\x0c\x81\x1aF\xc0L\xa5\xda:yj\xad\xd0za,@J(\xc6H\x9c\x91\xc3!\xf7\xdf\xbc\x13O\xd5\x11\xaf\x05\x81\xbfkY8\x07\x8b\xe1\xa1s\x03\xfa\xf1\xcd\x0f\xdf+\xd9t^\xe2\x89\x99\'xJ\xfc\xa9\xd7\xdf\x05\xbf\xb7F>\xf3\xa3K\xe4eo>A\xc6G\xd2.\xe6P\x0e\xe9\x11\x93\xcdq\xb9\xe8\x0f\xd6:x\xca\x89\x195\x13\xaeZ\xde\x93O>\xe9v\xd3\xa5j3\x1dS\x89\xef\xbe\xff\xfd\xef\xbbj\xe8\rX\xea$\xb9\x12\xed\xb3:\x0c\x01C\xc0\x10(\x05\x01\xbd\x8f\xf1\x81\xc67\xbe\xf1\rw\xa8\x92\x82\xc5\x94\xa3\x0fB>\xf7\xb9\xcf\t\x13\x8a\xf0\xde]\xea\xfd:\xeb?\x8ez{\xe7J\xc4Ye\xa0\xb1\xeaz\xd8\x1d\xddo&\x07I\xc1\x03p\x11\xe2\x112\xb30\xa5\xc1\'-\x8f\xde\xb7R\x9fu\xc5/\x93\x961\xfe_=&,\x0b\x13\xcb\x18\x12\xbc\xa5\x11\x8fo\xc5\xf1\xdd\x87\xab\t\xc3\xdc\xf3-\xd5\xcc\xae!\x99dZ\xe9J&\x96\x03\xf9\x17\xefi\x91\x89M\x07\xa5\xff\x9fu\xe9\xef\xe1\xeeN\xf3\x8e-\xe6\x1c\xe9{P.w\xe0\xfbP\xecm\x94kb\x08\x18\x02\x86\x80!`\x08T\x0c\x01#\x00+\x06u`\x15\xe99\xf3\x18\x98\x90\x0c\x125\xaa7=\xb0_\xf6n\x1d\x81\xe7[\xdc\x05\x12\x0f\xac\x17\x15.\x88q\x81Z\xda\x93\xb2\xf9\xd1\x01\xd9\xca\x8c\x81\x90<\x8d\xd0)\xc4\xadT\xa1g\xa0\xbf\x14\xe6\xa4\xf5\x8b\x9c\xc7\xdf\x9f^q\xb64\xc3\x03p\xdf\xf61\xc9#\x89H\x1cK\x82\xf976\x9c\x913^\xb4T\x1a\x91P\x84^\x82J\x1cNQt\xc9\x9b\x94\x00|\xe4\x91G\xdc\xb1:I-\xb9\xa0\x80\x0e\xd0er\xdf\xfa\x16W\xc3`\x82\x9aS\xa7\xd4\x80*\xb0b\x0c\x01C\xc0\x10\xa8\x12\x02\x1a\xde\xe0K_\xfa\x92k\x01\xefw\xc5\xdcsu\t\xf1\xc1\x83\x07\xe5\xaf\xfe\xea\xaf\xdc\xb1z\xef.\xb6+:\xb0\xafM\xb6\xc8+\xdb\xfad?\x96\xff\xaaG`\xb1e\x84\xbd\x1fy!\xc6\x18\xec\x8b5\xc1\x0b\xd0#\x00\xb5\xdda\xd7=m\xf9\xbe\x87\xe5\xe6\x87\x0f\xc2FA<\xbb\xaa7h\xda\x96F\xf6\x8b|z\x12+=\x92\xd2\xde\xa3\xa4nxMM\xef\x1e>d[\x85WKA\xc9\xbc&:\x9b\x85\x9e\x87{\xae\xbe\xc3\xfb\x82\x17\xb2>N/\xd8\xb5\xe0\xad\x1a\x87\x07\xb0\xed\xffB\xc3\xa0D\x0b\xaa\xb3\xb7\x86\x80!`\x08\x18\x02\x86@\xe5\x100S\xa9rX\x07U\x93\x9e3Z2\x19(?\xcfl\xca\x94Q\xb3G~5\xc8\xc8`F\xb6>z\xd0e\xccuOm\xcb(+\n\x87\x10\xa0\x18<\xfeR#\x84lzqq\xfe\xb83&\x15\x0bW\xb4\xc9\xdb\xffv\x83|\xf0\xba\xf3d\x05\x96\xf9\xee\xdb>*\xe3\xa3\x98\x94\xf9\xde\x91,\x85\xfb\x8f\red\xf9q\xedr\xda\xf9\x8b\xbd\x82\xf5\x0cy\x9f\xe6\xf4\xaaK\xca4\xdbn9q\xa9\xe6\xd4\x80\x82\x83u"L\xd2\xef\xae\xbb\xeer\xdf\x94\xea\xe1RP\x9c\xbd5\x04\x0c\x01C \x14\x048[G\xa8\xff\x92g\xed\xea\xc5\xc7\xf0\x06\xf7\xdcs\x8fk[1\x0f9\xf4\xbe\xfc\xbb\xbf\xfb\xbb\x92\xc9dJ\xf6\xfec{\xbd\xe8~"\x7f\xd1\xbdV\xe2\xf0T\xcfD\xd0\xd9\x88\xedD~aiC\x96\xe4\xa5~\x1c@\x07R\x15_t\x85\xf5\x81=\xe326\x92u\xe3\xbc>\xc0\xacb\xb3j\xaaj\x12\xa7$\xacW\x9c\xe8-\x03.\x95\xbc.\xaa\xb3\xfe\x89\xca\xee\xc2JZ\xbe\xaf\x04SK\xf2\xaf\xabYr\x03\xe3\xb2\xfb\xf3?\x97\xc9\x14\xec?\x86t\x99\xddbv&#\xfa\xf5q\xe8\xe3P\xef\'ZTGm\'C\xc0\x100\x04\x0c\x01C \xda\x08\x04HUD\xbb\xa3u\xd4:\xba\\\xd1\x18a\x006\x1a&<\x87\xfa\xb4\x12o\x83\x13.\x99\xa5<\xf2\xcb~x\xb5\xa1\xd2\x1a\xbeZh\xd0\xa6\xc62\xc8t\xd7!\x89F\xaf#\xf1\x04\xfc+\x80\xa4\xd3\x828\x7f\\\x1a\xfc\xda\xf7\x9e"\x9f\xf8\xef\x8b\xe5y\xaf\\!\x83{\xd32\x8c\xc0\xd51\xecC=Z\x1a\x1a&el4+\x17\xfe\xbe\xb7\x0cx\x12\xde\x81A\x89\x92n\x1b7z1kH\x08\xea\xb6\xa0\xea(\xb6\x1c\x9d\x08\xdfp\xc3\r\xc5\x1eb\xfb\x19\x02\x86\x80!\x10\x1a\x02\xbc\x1b\xf3n\xce\xcc\xb9\x8c\xd4\xaf\xc2;0\x97\xd3\x96z\'\xe6\xbdU\xbd\x9c?\xfb\xd9\xcf\xba\xe2\xf4\xb3\x96}\xf4\x7f\xbd\x1f\x7f\xfb\xdb\xdf\x96\x9bn\xba\xc9}\xad\xdb\x8e\xdew\xba\xcf\x1eU9)\xa77v\xc8\xcb\xdb\x17\xca>\xc4\xfe+\x9d\xbe\x9c\xae\xf4\xe0\xb7\xa7\x81\xd3\x9ad\x9b+8\x14\xe3\xa3\xcc&\xefxrP\x1a\x9byED\xa9Uev\xa6\x82\x87\xf1A\x1e\x1fl\xf2A\xa7\x93\x10m=\xae\xc6\xc8\rN\xb8\x90,\xa1\x9e&%\xff\xf6\x8f\xca\xee/\xdd.\xf9\xb14\xba\x86;\x06\xb6\xcf"\xb4\xb1y;a\xacmf\x04\xb2\x0b\n \x98\x18\x02\x86\x80!`\x08\xd4\x0f\x02!\x0e\xf3\xf5\x03R\xc4zB\xeb\x85\xc6\xc9 \xf4\xee0\xdb6\x89\xe5\xac\x94\x07o\xd9)9,\x11I$}F0\xccJC*\x9b\xc4]z<\'\x8bV\xb6\xc9%\x88\xe1G\xc9f\x10a\t]t\xea\x1b\x85\xcf{\xd5J\xf9\xf4\x0f/\x91\xd7\\v\xb2\x8b\x13\xd8\x8f\xcc\x82|\\<\x15\xf1\xe7\n\xc1\x0bc\xe8\x8c\x0e\xa5\xe5\xe4\r\x8b\xa4wy\xab\xdb\x1c\xd42`\xf5\xb0\xdb\xb2e\x8bpy\x19E\x898\xf7\xa1\x82/:\xa9\xd5\xec\xbf\xb3M\x8c+\xd84\xab\xca\x100\x04\xe6\t\x02$\xfd\xe8\xdd\x97\xc4\x93\x1b\x8eP\xa4z\x989\xb70\x18\xc1\xb2D\xb3\xbc\xaem\x89\xb4\xf9^F\xcf~l3=X\xea\x05\xf8\x9f\xff\xf9\x9f211\xe1v\xd4{\xdf\xd1G\xf1\xfe\xcc\x87K\xa3\xa3\xa3\xf2\xc67\xbe\xd1}\xad\xde\x80G\xef;\xd3g\xcd\xfc\xfb\xbe\x9e5\xae?\x8c\xfd\x17U\xe3\x8cX2\x0e\xe0\x9ad\xb3\xeb\x92\xb6}\xa6\xfe\x85\xfd\x1d\x1f\xe2Q\xb6#\xbcG\xb2\xc92\x01{h\x14\xff\xca\x04i\t<\xf8dB\xb3JHz\'\xccWgO\x86D\xd4\xc2\x9e\x8b\xf7\xb4J\x16\xcb\x8dw]\xf53\xc9\x1d\x1cC\xb7x\x91x6\xed\x0c}d\x83h_\xef\x84\xbe\x0b\x1aR\x03Q\xb2\x89!`\x08\x18\x02\x86\x80!P%\x04\xa2jcV\t\x8e\x9a\xa9V\xad\x98\xff\xf5[\\\xe8\xfc\x10X\'H\x8cQ\xf6l\x19\x91};FaX3\xa8\xb9\xb7\xad\x16_I\xca\r\xee\x9b\x90\xd7\xbeg\x9d\\\xfa\xd6\x13]L@\xed\xc7\xb1\xa7\xf5\xc8\xff\xfb\xd7\x0b\xe4\x9dX\xf2\xdb\xd5\xd7(\xfd\xdb\xc6$\x97\xf5\x9e\x8a\xeb>3\xfdgR\x91D2&/\xfe\xfd53\xedV\xf2w:\xf1L\xa7\xd3\xb2m\xdb\xb6\x92\x8f\x0f\xea\x00\xb6C\xe3c\xfd\xfa\xd7~\x10\xed\xa0\n\xb7r\x0c\x01C\xc0\x10\x98\x02\x01N\xd9\xe9\xddG\xf59\x1e7\x85\xa7w_\xc6\x1f\xa0Z\x1a\xe2rr\xb2]\xde\xd4\xb9\\\xbe\xdew\x8a\xdc\xb9\xe2\\\xf9\xf1\xb2\xf5\xf2\xcfK\xce\x90\xb7 \x99\x06\x85\xc7\x97"\x1az\xe1\xaa\xab\xaer\x87\xe9\x83\x98\xc22xOT\xb2\xefe/{\x99\x908$\x198\xd5\xbe\x85\xc7\x1d\xfd^\xdbvaK\xaf\\\x84\xcc\xbf\xfb\xb3)0\x10\xa5\xb5\xf7\xe82\xc3\xfc\xec\x12\x81\x80\x17Y\xd3\xd8\x1ef5\xa5\x95\xed3\x80[\x9f\x18\x94\xe6\x16z\xc9\x97v\xb8\xed\x8dx2\xd9\x9c\xf4.\xf3\xbc:\x83\\\xc5p\x04\xb6\xfee\x9d\xd95"\rX\x811;\x1fw\xc4\xd1\xb3\x7fp\x0fr\x1b$\xb1\xb0]\xc6\x1f\xd9%;\xaf\xbcE\xf2\\\xf6\xeb\xea\x9d\xf5\xa2\xd0\x1d\xf8,\xe1\xcf\xa0\xcf@9G\xaaa\xab\x17\xad71\x04\x0c\x01C\xc0\x100\x04\x8eB\xa0v]\xba\x8e\xea\xc8<\xfbH\x03\x85r+t?\xb4\x97\x1f\xc2\x10Nh8\xd1y\xf0g\xbb\xe4eo9\x01\xf1\xeeFa\x12\xd5.o\xcc$\x1d\xa3\x83i\xf9\x9d\x0f\x9e&\x17\xbf\xf18\xd9\xb5yXZ;\x1ae\xf5\xbanL\xe0\xf2\xd2\xbfs\xdc\xf57V\x10\xe7\xaf\x18\\i_N\x8ce\xe5\xf4\x0b\x97\xca\x7f~\xee7.\xc85\tGM$RL\x19S\xed\xa3\xc4\x1b\xe3J=\xfc\xf0\xc3r\xfa\xe9\xa7\xbb\xf6M\xb5o\x98\xdb\xe8uH\x8f\xbfM\x9b6\xc9\xd3O?\xed\xaa\xaa\x96\'b\x98\xfd\xb4\xb2\r\x01C\xa0\xba\x08\xf0^J\x02\x8c\xff3`\x08\x8e^\xc8\xdb\x1e\x8b\xcb\xf3\x9a\xba\xe5\xf4\xa6.91\xd9*\'\x81\x88Z\xdb\xd8\x86\xfdqo\xc7\x13\xaa4|\x01G\xf39\xd9\x95\x9d\x90K\x91L\xe3\xcb\x03[\xfcl\xba\xdcC\xe7\xf83\xf7\x91\xe3\x1e\xe5\x9ak\xae\x91\x8f~\xf4\xa3H\xf8\xe4\x85^\xd0\xed\xfc\x8e\xf7f~\xfe\xc4\'>!w\xdcq\x87{\xcfm\xa5\x08{\xa9\x1et\x1f\x82\xf7\xdf\xc4$\x96Gb[(O\xf4Ji\xd8\x0c\xfb\x12\x994p^\x1b\xf7<\x00g\xd8\xb5b_1<\t\xa0\x93\xdd\x9bGp\x86AQz\xa7\xafb\xf5\xd7zE\xc4/3\x91\x93\xae\xc5\xcd\xb8\x8eym34\x8ag\xfb\x05\xda7\xbf\xf0\xcc\xaeAih\n\xf8*\x87m\x17kMJ\x03t\xe8\xe6\'\xe4\xc0w\x1e\xf6\x9a\xae\x1d\x9a\xb9#\xfc\xe1\x92\xe8c\xa3>\x0c\xe5\xf2_\xbeW[\x1boM\x0c\x01C\xc0\x100\x04\x0c\x81\xfa@\xa0v\x99\x9c\xfa\xc0\x7f\xae\xbd`:\xdb[\xfdBB1T0\xd7r\xf2\xf0\xed\xbb%\x81,\xb7\xce:\xf4+\xac\xd5\x7f$\x01\xfbw\x8eI\xb29.k\xcf\xea\x95%\xc7\xb4\xcb\x00<\x03\x87\x0fL\xb88\x87L\xecQ\xaa\xb8e\xc0\x07\xd3r\xcc\xba\x1eYwn\x9f;<(\x9eT\'\x957\xdf|\xb3+\xb7\x1aKo\xb5\rw\xdf\xed\xad:\xa77\xa0n+\x15+\xdb\xdf\x100\x04\x0c\x01E\x80F\xc8\x94\x1e~>Y\xb7(\xde(\x17\xc0;\xee\xc3=k\xe5\x07\xcb\xce\x91\xbbW\xbe\x00\x9e~\xa7\xcb\x07{\x8e\x95\x97\x81\xe0[\x90H\xca\xf6\xec\xb8<\x03=\x90\xcf\xc8\x08\xc8)\xce\xe6\xf7\xe3\xfd\x19\xc9\x0eyaK\xb7\xab\xaa\x14\xbaA\xbd\xf9v\xef\xde-\xdf\xff\xfe\xf7\xdd\xf1\xba4\x98\x1f\xe8\xe5G\xef\xbf;\xef\xbc\xd3\x11\x84n\x872^t\xa4y#\xbc\x17\xcf\x00\xa1\xc9\xf6\x97\xd2\xce2\xaa\x9c\xf3!<_\xf0\xa9\x92\xcexB\x9a\x9d\x83\x94\xef`5\xe7\x92\xe7P\x80\xef\xa35\xb0{\\\x06\x90\x0c\x84q~K\xe4b\xe7Py\x1d\x1c\n\x060\x93\xcaK\xf7\xc2f\xe9\\\xd4\xe2uH/\xce\x10\xba\x97\xe9\x1f\x95\xc0\xbc\x0c\x9d\xd7\x1fB\xd4\xf4\xb4H\x1ea]\xf6\xfd\xe3/\x0b\xc8?4\xbe\xb8\x0b\x81\xf63\x7fz\xd7@?\xed\xbf\xf7\xaf*|21\x04\x0c\x01C\xc0\x100\x04\xea\x08\x01\xf3\x00\xac\xdd\x93Ic\x85F\x0b\x97\x01\xbf\x01\xca9O\xe0\x82y\x8e\x93g~3 {\xb7\x8cJSk\xdc\xc5\xd2+\x87$\x0b\xbcqs(0\x0e\x92/3\x91\x97\xd48\x96m\xd1c\x00\x9f\x1b\xe6\x9a\xe5\x04\xc9@\xf8\x14\xfd\x85\xaf?F\x1e\xbdk/\x96\x10\x07sJ\xd4\xd3\xee\x7f\xff\xd7[\xf1]\xe8\x852\x07\x08J:TI\xc7\x9f\xfc\xe4\'%\x1dg;\x1b\x02\x86\x80!p4\x02J\xfaq)\xaf7\xc4\x1c\xbeW&A\xac]\xd8\xb4@\xcei\xee\x96S\x91\x14\xe3\xd4\xe6vY\no3z\xf5\x8d#X\x19\xe3\xcf\x1d\x80\x9f\xdf\x1e\x7fp\x8a\x83\x84"\x81\xa8Ki\xb5.z\x82\xd1\xa3\xeeO:V\xc9\x1d\xe3\x03.)\x88~W\xcc\x7fz\xfd\x91\xf4\xbb\xf2\xca+\xe5\x95\xaf|\xe5\xa1\x10\x08J\xfe\xf5\xf7\xf7\xcb\x85\x17^\xe8\x8a*\xc7[\x8a\xfc\n\xa9\xca&\xb4\xfc\xfd 3\xf7E|\xe9o!f9\xb4<.IY\xd3\xd4&\x8f\xa6\x86\xdd\x18Z\xacwea9A\xbd\xd7\x87Q\x07\xf6\x82\x04\x06\x01\xd8\xbb\xbcM\xb2C)i@|^\x93\xd9\x11\xc0ON\xd2\xb0]\x16\xaeh\x05\t\xd8\x84\xc4g\xe3\xeea(\xbd*\x03\x15\xffg\x9e\x1f\x9a\x90\xfc0\xe2k2\x0e`\x0e\x95\x94K6\xaa\xd7_KR\xc6\x7f\xb3K\xf6\xfd\xcb\xbd~\xb2\x0f\xb4\x9ae\x1e\xbe\xad\xcc\xd4\x8d,\xbe\xe4\\\xe8{\xd0\xf7@y\xd1\x84\xf2@\x1d\xe5\x9a\x18\x02\x86\x80!`\x08\x18\x02UG\xc0\x08\xc0\xaa\x9f\x8297\x80\x01\xd9\xe8\tH7\x07\x9a;\xe5\x9aR8\xf4\xd9\xa2\x865\x97\xcdn}\xec\xa0\x9cq\xc1R\xd9?\x8a\x80\xcaex\xc9=\xbb\xf4\xean!\xdf\xc7\xc9cPB/\xc0\x11$\x039\xf3\xa2e\xd2\xd8\x92\x00Q\xca\x98P\xc5>\x80\x9e\xbe\x15z\x0e\xf6\xec\xd9#\xc3\xc3\xc3\xd2\xd1\xd1\xe1\xbc\xef*I\x04j]?\xfd\xe9O]C\x95\x94\x9c\xbe\xd5\xf6\x8d!`\x08\x18\x02\x1e\x02J\xce\xe9\x82^\xf2\n\xba\xf4\x951\xfcN\x02\x91tQs\xaf\xbc\xb8u\xa1\xacDr\x89V\xcc\xc7[\xc1J\x8c\x81\xf4\x1b\x82n\xcc#\xf4\x04\x867R}\x14\xbe&g\xb9w\xf3\t\xd9Ax\xd4]\xd0\xbc@\x96#)\xc8\x0e,\t.\x9e\x13@\x92(\x90\x7f\x14z\xf91\xec\xc1\x9a5k\x84\xa1\x184\x16\xea\xfa\xf5\xeb\xdd>\xf4\x04,5\xee_a;>\xb5\xe0DY\x18k\x94\x1d\xf9\t\x8cG\x81\x0e\xdf\xae\xfda\xbc\xf0\xfcq\x99\xed\x9aD\xab#\x00\xc3\xa8\xa3\x942\xd5\xf0\xa1w?\xbd\x00\x97\xad\xed\x901ZEQw\xa7,\xa5\x93!\xef\xcbp%\x8d\xcd\t\xe9[\xd5.[\x1e%x\xe1In8\xed\x08\xc0x\x17\xbc\xf6\xf8;+\xe5\xe1+/>\x9a\xba\x88\xb9\x9cX\x80D\x1f\xfb\xc7\xe4\xc0\xbf\xde+c\x0f2o\x07\xc5\xffu\x95F\xfe\xfd\x08\x07\xfe!\x94\xce\xad\xb5\xf1#DCM\x0c\x01C\xc0\x100\x04\x0c\x81r\x10\x08\x8e\xfd(\xa7v;f.\x08\xd0\x0c\xa2\xa1\xf2\x04\xd4\x0fv\x12\xc2SK\x18Qq?\x1e\xde\xe3\xbf\xecw56\xf0q\xb1\xc9\x94\x08dRYi\x81\x97\xe4\xf9oX\xed\xbeo\x08\x88(U\x02\xeeG?\xa2\x9d\x8a\xc7\xd3\x88\xc9W)Q\x02\x92\x89H\xb6o\xdf\xee\xaa-u\xc2[\xa9\xb6Z=\x86\x80!\x10\r\x04881[/\x85d\x1fU\xe7\xe4k\x92m\xf2\xa7H\xd0\xf1\x95E\xa7\xc8\x8f\xb0\xac\xf7\x07K\xd7\xcb{\xba\x8fEf\xd9V\xe7\x10t \x9f\x96\xcd\xd91x\xf9\xa5\xe0\xeb\x87\x04K(\'\xe1\xd3\x7f\xa5\x8c>\x8c!\xd8\x82\x073o\xe9Z\xe1\xda\xe1E\x16to\x8bzQ\xcf\xe7+\xae\xb8\xc2\xed\xaf\xe4\xdf\xf9\xe7\x9f/\x9b7ov\xcb\x80\xcb\xb9\x17j;\xb8\xb4\xf9w\xba\x96\xca\x9el\xbaf\xc8?\x02\x91\xe79\x01i\xb3&\xe1-\x17-\xe5\x9c\x14\x05|\xa9;\xe1\xc2j\xf0\xed\x14\x86\xf7H\x94\x18\xc3\xb7\xd4\xea\xear\x7f\xfcT\xb9"b9\xc8S\xca$\xc8\xd4\xc0\xc5_\x8e;\x89\x84#\xb9A\x10\xf2\xa5$\x02\xa1\xc5K\x8f\xbf\xe6\x98\xcb\xf0\xdb\x00\xef\xc1\x81\x1f<&;?}\xf3a\xf2\x8fO\\\x0f\xddefm\xbdz\xfe\xfd\x1c{\xbe\x11:\x02\xe5\xa5\x1cB\xc7Q\xaa\x89!`\x08\x18\x02\x86\x80!\x10\x11\x04\xaan\xb7E\x04\x87Zl\x06\x8d\x14>\xdfNC\xbd\xc0l!=\xb9\xd4e\xc0\xf7\xdf\xbcSr\x19\x18`\xe67:\xed\xf5\x82\x15j\x92\x05F\xcf\xbd\xc4\x9bp\xe6\xb9\x0c\xd8\x9b\x03O{L1_hVJ%\x00\x95\x94+\xe6\xd8\xb9\xee\xa3u\xddv\xdbms-\xca\x8e7\x04\x0c\x81:E\x80\xb79z\xfa\xa9\xd3\x15\x07(.\xf1\xa5ta\xd08\xab\xb1\xcb\xc5\xf1\xbbu\xf9\xf3\xe4\x87K\x9f+\x1f[p\xbc\xbc\xba}\xb1\xf4"\x86\xdf6\x90};s\xe32\x98\xcfJ\n\xe4\x12\x85\x1e~\xd4\xb9\x1a)\x83\xf0 |y\xcb"i\xa6\xa7\x1e\xdaSJyJ\xee]\x7f\xfd\xf5\xaeM|y\xc9K^"\xb7\xdf \xc5\xba\x08\x00\x00@\x00IDAT~\xfb\x1c\xc8?\x8f\x10\x8d\x81\xac\xf8T\xef\x892\x8e\xf6\xe5j\x8csP\xe3\xe3X\x10\xb6\x14\xc7\xbb\xb8w\xd5\x7f\xd9\xfe\xe4\xa0\x00\xd2\x92\x9c\xca\xaa\xdf\xea\xea\xb7\x80\xe70\x93\xca\xc9\xb2\xe3\xbb\\c\x8a\x0b\x9dWF\xbb\xfd\x0c-n\x896\xbc\xf8f\x14\xc6\xf7\xa3\x01\x8a\x7f1dwN\xf4\xb5\x83\x98\x14\x19\xbc\xe9\t\xd9\xf1\xe1\x1f\x82\x00|T\xf2\xe3p\xda\xd3\x0b\xb0\xf8F+\xf9\xf7?\xa8\xffUP<\xddv\xb7\x06\xef\xe63c\xa3\xecKC\xc0\x100\x04\x0c\x01C\xa0\xb6\x110*\xa7\xb6\xcf\x9f\x1a+?F7\xfe\x12\xaas\xaf@{\xa5\x99l\xf7l\x1d\x91\xfe]c\xd2\xd9\xd3$\xe3\xa3\xd9ZN\x06\x1c(>\x85\x85\xc5a\xd0\x0e\r\xa4\xe4\xf8\xb3\x17\xcar\x18\xd2;\x9e\x1aD\x06\xc9\x86\xc0\xe2\x01\xea\x12\\z\xa2pr\xca\xe5ga\x0b\xbd\r5\xe0=\xeb*g\xc9[\xd8m\xb4\xf2\r\x01C\xa0:\x08\x90\xf4\xe3\xfc;\x87\xc9\xf7a\x1f?\xc1\x12\xde\xb8\xbc\xa2m\x91\x9c\x8f%\xb8\xeb\x9bz\xe4X,\xed\x1d\xc7>\xa3\x98\xc1\x8f\x81\xe8\x1b\xc8\xd1\xb7\x8f\x83\x96\x17\xc3/\x90\'%GA\xc0%\xb5CX\x06|\x1c<\x0e/m\xe9\x93\xef\x8c\xee.i\x96\xcf{,\x1f\xbe\xa4R)\xb9\xf6\xdak\x85I\x90\x98\x8c\x89\x1e\xd9J\x0e\x1eU\xe5\x8c\x1fI\x92z\x94\xa8\xc8\xa7@\x80\x12\x93mX\x9a\xac\x9e\x923\x1e\x1c\xa1/\xd9\x0f\xc6b\xecC\x82\x16J\x06\xe7\xb5\xb0onc\x85_4^\xdd\x8e\x8dC\x92\xa5\xa7\x98\xc5\xff+\xed\x0c\xc0\xa33\x8bD \xcb\x8e\xeb,\xed\xb82\xf7v\x89@\xf8k\xe0\x85S(\xb8\xae\xc8\xe35\x80(\x8c!\xb6\x9f4\xe2\xd7\x81\x99Jf\xf7\xa8\x8c\xfc\xf01\x19\xbdw\x87\xe4\x10C\xd0\x89;\x16/<\xa08\xe1\x8eT\xce}\xfe\x1d\xfag\xd0a(\r)\xb5\xa7\xf1\xd6\xc4\x100\x04\x0c\x01C\xc0\x10\xa8_\x04\x8c\x00\xac\xeds\xabV\xcf]\xe8\xc6.\xe8R(\xb7\x1dmRa\xd3\xdc\x84\x05\xb2\xe0\x87~\xbaK^\xfa\xa6\xb526B\xc7\xc3\xf0\xc9\xa7\xb9\xb5\xba:G\xe7\xd3y\xc4\xb6n\x90s_\xb5R\xfe\xebo=o\x84\xb9\xb6D\x97\xfc>\xf3\xcc3\xf2\xc8#\x8f\xc8)\xa7\x9c\xe2\x96\x01W\x82\x00\xd4\xb6\xdfs\xcf=\xee-\'\xc4\xe5L~\xb5\x1c\xfbo\x08\x18\x02\xb5\x8b\x00\xc7\x02\x92~\xba\xa4\x97\xff\xdd\xe0\x80\xed\xab\x10k\xef\xc5\xad\x8b\xe4\xb7\x90\x9d\xf7\xf8\xc6V\xe9hH\xbap\xb1\xccn\xbb\tYz\xb9\xa3\xd2}$\xfeBybu\x14\xb4l+c\x01\xbe\x19\xcb\x80I\x00\xd2\xf5\xa7\x14\xd1{\xef\xdb\xde\xf6\xb6C\x87\xa9W\xf4\xa1\rE\xbea[\xe8\xedw\t0\xfa\xe3\xce\x15\xb2\x1bK\x7fk\x8d\xfccWy\r\xa4\xd0\x8f\x85 \x00#\xc3\x9c\xf8$\xd0\xce\xa7\x87\xdc\xf2U>\x1b\x03\x97dR$\x02\xc4+\x0b\xdb\xa5w\x99\x9f\x05\x98\xc7\xa9\xe1Wd\x19\xa5\xec\x96\xd93,\x93\x19\x9c =G\xbc\x90H\xfa5\xe3\x9ajoD\x96`\xb4g\xcf\x90\xa4\xb7\r\xc8\xf0]\xcf\xc8\xc4\x13\xfb\x0e\x17O/B\x9eo\x1a\xa5\xde\xcb\xe1\xef\xa6\x7f\x07\xdfAw\xcba\xaf\xae\x84~\xc8\xdf52\x97\xb0\xdf\x1e\xfbg\x08\x18\x02\x86\x80!`\x08\x84\x8a\x80\x11\x80\xa1\xc2\x1bz\xe14\x7fh\xcc +\x87\xdc\x02e\x10c\x9aS\x81\xcf\xabb \xb4\x98\xd5\xf6\xa1;v\xcb\xa5o?\x116\x17\xab5\x99\n\x01\xe7\x05x0-\xcf\x7f\xf5*\x10\x80\xbf\xf1\x12v`Gg\xabNu@\x11\xdb8\xe1\xa4\xd7\x1f\x83\xd0\x7f\xef{\xdfs\x04\xa0.\x0b.\xe2\xf0\xb2w\xd1zY\x00\x03\xe1S\xca\x9d\xfc\xba\x83\xed\xc5\x100\x04j\x12\x01\xde\xf1\x95\xc0*\\\xb2zFS\xa7\\\xdc\xb2@\x9e\x07=\x13\xef\xdb\xe1\xae3\x00\xc2\x8d\x1eb{@\x13y\x19c\x11\xb0\xdf\rU\x95\x1f78\xbb\x1f\x81\xc7\xe1\xa9M\x1drfc\xa7\xdc\x9f\x1er\xfdp\xc4e\x89gb.\xde\xcf\xec9q\xeb\xc6r\xe8\xabzO\x82\x07d\xd6}f\xfbjM\x98s9\x8d\xf3\xdb\x0b\x02\x90\xba\x0f\xde\x9c\x8ckX\xe8\x01Z\xe9>\xa9\x13\xd8\xd0\xbe\x14\x88,x\xad\'\xb0\xe4{\x02\xe6P-\x02\\i\xf0\xfc\xfa\xb28\xa7M\x89\x84\xcb\xa2\xbc\x7f\xc7h8\xe7\xd47\x84r\xfd\xa3\x92ho\x92,<5\x1bp\xf2&y\x9e@\x08\xa6\xb7\x0e\xca\xc4c\xbbeb\xd3~Im>\x002W\x19B|\xafK}\xb94\xb84\xd1%\xbf\x8c\xf3\xf7~\xe8\xdfC\xf9\x93\xa4\x16T\x80O&\x86\x80!`\x08\x18\x02\x86@\x9d#`\x04`\xed\x9f`\x9aM|\xb2y\x13\xf4\x8f\xc2\xea\x8e>I\x7f\xe6\xa1\x03\xb2o\xcb\xa84\xb7aY\xd48\x97\xa0\x86Ucm\x97\x9b\x9e\xc8I\xcf\x92\x169\xeb%\xcb\xe5\xbe\x9bv\xb8\x00\xe5\x93\x8c\x078\x07QO\x94\xaf}\xedk\xf2\xa1\x0f}\xa8"\xcb\x7fI\xf6q\xb9\xdb\xc0\xc0\x80\xd0\xfb\x90b\xde\x7f\x0e\x06{1\x04\xea\x1e\x01\x12~J\\\xf1\xee\xa5\xc4\xdfZ\xc4~\xbb\x18\x19{\xdf\xd0\xbeT\x8eA"\x88\x16\x0c\x04\xe3\x18$\x06r\x19\xd9\x0b\xd2O\xb3\xabsx\x98{\x14\xbf\xb9\xc3\xcc\xc5\xc6|*\xf6\x96\xae\x95\xf2\xee}\x8f\x94\xfd0\xa6\xdc{\x1fqP\x96\xe1\xeb\x8bO\x93.\x90,\xbb\xb3\xa9\x9a\xf4\xfe\xe3\xd9\xe05ALI\xfe\x91\xd0$\x01X\xd8G\xeeSM\xd9\xbbmT\x16#\x9b-\xdbh&J\tg\x82|)\xbc\xeb\x96\x1e\xdb.$\x00\xdd\x89\x9e\x9b\xd92E\xe5^\x81\xf4\x00\x1c}p\x17\x96\xf6\x0eIf\x97\xe7\xe9\x97\xdev\xf0\xd9\xaby\x9d\xb7\x1f\x8a!\xc3\xab,\xef\x14\xa5N\xb3\x89\xb61/W\xceu\x1e\x83r\xc9\xef\x9dP\xde\x0e\xf8\x93\xd4\x9f%\xde\x9a\x18\x02\x86\x80!`\x08\x18\x02\xf3\x03\x01\xb3\x8dj\xff<\xabyv?\xba2\x08U\xc3&\xd0\x9eyq\x00\x1bdd0#\xcf\xb7m\xdb\xe6\x96\x01\xbbr\x95\x99-\xb7\xd0Y\x8e\xd3:w\xee\xdc)\xe3\xe3\\\xc2g\x1e\x80\xb3@f_\x1b\x025\x8f\x00c\xe7\xf1\x8f^rJ\xfa-\x00\xd1\xf3V\x10h7.{\xae\xfct\xc5\x06\xf9k\xc4\xb0[\x86%\xbf\x83\xf0\xf6\xdb\x82\xe5\xbd\xfd\xc8\xd8\xcb\xd9\xb4&\xee\x88\x92qAB\xf2@6+\x17\xc2K\xb1/\x8e\xb1\x0b\x7f$7+%:H\xbf\xbf\xfb\x189\xafi\x01\xb2\xfe\xd6.\xf9G\xcc\x88\\\x06A\xf7\x98\xdc\xa57\xe6\xc5\x01\xac\x14\x96\xc5\xd4\xb3k\xd3\xb0$\x9bp\x05j`\xc0b\x0e\xb2}\x90<\x05\x84)b\x16/9\xa6\xdd\xa1\x81\xb0\x80\xc1\x8b\xffc`\xf2\x8e=_\xb9]\x0e\xfc\xd7\x832|\xe7fIm- \xffh,\xa1\x1d\xceh\xa2\xb7_\xe9\xc4\x1f\xdbM\xf2\x8f\xf60{q\r\xf4B\xa8\x92\x7f\xfcN\x7f\x96xkb\x08\x18\x02\x86\x80!`\x08\xcc\x1f\x04\xc2\x18\xde\xe7\x0fz\xd1\xe8)\x8d\x18\xda\xe3O@\x1f\xf6\x9b\x14\x8aa\x03[\xdf\xc9S\xf7\xec\x87]\x86*\xec\xea\xf1\xe1~\xf6\xbf\x06X\xce\xc3X\x06|\xf2\xf3\x16I\xf7B?\xa6\xce\\\x19@T\x93\x80\xe7\x08\xe5\x8a+\xaep\xff\xc3^\x8e\xab\xe5\x93\x00\xa4\xb0~\xdd\xe66\xd8\x8b!`\x08\xd4<\x02\x1c@<\xd2\xcf\xeb\nI?\xfe\xf5\xc4\x92H\xe4\xd1\'\xff\xba\xe49r\xfb\x8a\xe7\xcbGA\xfa\x9d\x96lw\xb1\xeb\xb6 s\xef0\x96\xd6*\xe9G\x92\x8d\xe5DQ8T\x8d\x83\x0f`\xcc\xba\xd7#\xf3p%\xc5[\x1a+\xf2r\xc4\xfd{_\xd7\x1a\xd9\x95\x9bpXW\xb2\r\xa1\xd4\x85\x93\xcd\xc4/\xcb\x93M\xae\xf8(\xb8R\xe9\x10\xbb\xfb\x99aI4\xc5\xcb\xe4\x8dBA\xab&\n%_\x1a\x87\x89\xb1\xf8\xd8\x8e\xca\xb4\x97$\x1f=\xfcx\xe2\x9c\xfa\xd5\x92\xf0C"\x972N m_\x92{\x14\x92\x7fOB\x19\x1a\xe7\x1d\xd0\xbdP\xde\n\xf4{\xbc51\x04\x0c\x01C\xc0\x100\x04\xe6\x1f\x02F\xe1\xd4\xfe9\xa7\xc1CC\x87Y9\xee\x0e\xb3;\x934\xc8 \x0f\xdf\x86@\xeaY$\xba@\xc6[\x93\xa9\x11\xe0\xd2h.\x03\xee\xeek\x913_\xca\xdc,\x14\x0f?\xef}y\xaf\xea\x91\xf7_\xff\xf5_2::\xea2T\xea\xb6\xf2J\x9c\xf9(.\xff\xa5h\xfc\xbfJ&\x1d\x99\xb9e\xf6\xad!`\x08\xcc\x15\x01\xfe\xba\x19\x9b\xcf\x9b5\x93\xf2\xf3\xe4\x02x\xca}n\xe1\xc9r\xcb\xf2s\xe4\x1f\x17\x9f.\x1b\x9a\xba$\x8dI\xf9\x0ed\xac\xa5\xa7\x1f\x8fSO?\xff\x90\xc8\xff#=\xd9\x8f\xa4\x1b\x7f\xdc\xb1\xc2\xb5\xb5\x9c\x18\x80\xa5v\x92u\x12\xd53\x10\x7f\xf0\xef\xfa\xd6\xc9Ad6\xc8\x1eB\xb9\xd4\xd2\xa2\xb5?\xaf\x81\x0c\xe8\xdf\xd5X\x02N9|\xf5\xb8\x8fUyi \xa1\x04\xa1\x07`S3\x1fVU\xa5\x195]i\x1ev^\xef\xb26\xd7\x07\xb7\xf2\xc3\x834\x9c>\xd1\xa6T\x0f?\x9e\xac\xb9\x9d/\xf5\xea\xa3=\xcc\x98\x7f_\x84>\x1f\xfaoP\x1a\xab\xd4(\xf0\xd4h\x86\x89!`\x08\x18\x02\x86\x80!P=\x04\x8c\xc1\xa9\x1e\xf6A\xd6\xacF\xcd\x8f\xfcBi\x00\x05.jLo{rP\x86\x0e`\t\x13\t@\xad9\xf0\xdaj\xbf\xc0\x06<\xd9\x1e\x04N\x17\xbc\xe1X\xd7\x99 V#\x91\xecc\xf2\x0f&\x03\xf9\xbb\xbf\xfb\xbb\xd0AR\x02\xf0\xd1G\x1fuu\x85I6\x86\xde\x19\xab\xc0\x100\x04\x1cyGo?\n\xe7\xdbJH\xadI\xb6\xc9\x87{\xd6\xca\x9d\xf0\xf4\xfbf\xdf\x19\xf2\xbb\x1d\xcb\xf0d).\x9b3cr\x00\x9e~^\x1c\xbd\x06l\xa9M\xb3\x81\xad\x1e\xc3\x80\xb5\xa2\xb1Y^\xdf\xb6\x84\xddG_\xc2c7X6IF\xc6\xc9\xfbg\xe0Io\xb91\x10\x80\xd1\xf5\x93t\x90\x94\xf4\x92\x02y\xb32\xd1\xea\x8e\x99\x1bwSR\xb5\xb3\xee\xbc\x7f\'\xce4\x96\xb3\x86\xb2\x84u\xd6\xdakx\x07\xfcH2\xa9\xdd\xa8\x9fX\xa8\xd6\x96\xf8\x16\x037\xbd\x17Innh\xee\x96\xb3\x9b;\xdd!A\x93r\xc4\x9b\x9e\x7f\x1c+\xafC\xecDfL>\x88D)$R\xebMH\x10\xaf\xf2=\x00\xa3\xd07\xf5B\x1c\x04\xf97\xd4\x0f\x02\x10\x89@&CN\x94\x15\x85~\x07\xd5\x06\x9aw\xce\x03pA\xa3t,hv\xc5F\xe8\xaa\xa5\xb5\xa9\xde~l\x16\x03"33\x19W\xbe\x90\xf4#\xf9\xf7\x03(\xbf\xe3-\x8f\xfb\xeb%\x81\xb7&\x86\x80!`\x08\x18\x02\x86\x80!@\x04t^`h\xd4>\x02\xba\xec\xf7&\xbf+\xa1\x18>y\xff\x8ay\xe6\xe1\xfd2\x8c\xe5\xad\x9e\x81]\xfb\xe0\x85\xd5\x03Z\xa2\x13\xe3YY\xf7|/\xf0\xfc\xd6\x8e\xd5xwx\t\xb4\xfb0\xc7\x17%\xff\x92`RnXz\xb6\x9c\xd6\xd8\x81\xa4\x1f\xa9\xba\xc4\x94\xd7\t\xc7\x9c\xce8\xa9b"\xeb1/\xeeM\xb5^\xfc8%$\xb1\x18\xa6$\xc9D \xd5jK\r\xd6K\x020\x97\xc9K[O\x93t.Lz=\xa8\xee\r\x81\xb7.\xc6\xf3\xe3\x7f\xb6D\xbd\xfd\xb6\xe1\xfd\xe7\xa0\x17C_\x0e\xe5\xb2_\xeeCR\x90\xa2\xb7<\xef\x93\xbd\x1a\x02\x86\x80!`\x08\x18\x02\x86\xc0!\x04\xaa;\xb4\x1fj\x86\xbd\t\x10\x81\xfbP\xd6 \x94\x86P\xf0\xb6\xaf\x9f\x08d\xef\xd61\xd9\xfe\xc4\x90\xb4t6a\xf9\xa9\xd9Z\xd3\x9d\xbfX<&#\x83iY}J\x8f\xac;\xb7\xcf\xed\xc6\xa5\xc1s\x15N\xbcH\xfa\x8d\x8f\x8f\xcbe\x97]\xe6\x8aSRp\xaee\xeb\xf1\x85d\x9fy\x00**\xf6\xdf\x10\x88.\x02\xa4a\xd4\xa3\x8dwe&f`\x0c\xba?\x01\xd9w+H\xbf\xaf\xf6\x9d"/m[$\x83\xb9\x8cK\xe81\x8ey2g\xd4\xf5\xe8\xed7\xddYb\x7f\x07\xe0\x05xq[\xaf,\x8d{\xcbW\x03\xb8%\x1f"[\x1bq\x83\xff\xb7\xc5\xcf\x91\xb3\x1a;e7\xc8?=\x1f\xd3\xb5\xa7\x96\xb7;\xd2\xb8a\x12^\x80\x9e\xb7X\xb5\xfbB\xfeO\x1f\xb0\x8d\x1cD\x9c\xe2F\x9cY3OJ:-4\x1a\xf9\xa0r\x91\x9f\x08\xa4\x02\xf8\xb1J\x9e%^N\xd4\xc23\xc6\x9f&mY\xfe\xdf\x04\xfd\x0f\xe8\x1b\xa0\xa7B\xff\x12\xfa\x0b(\xbf\xa3RH\x16\x06o\xf7\xba\xa2\xed\xc5\x100\x04\x0c\x01C\xc0\x10\xa8\x0f\x04t\xd0\xac\x8f\xde\xcc\xef^\xd0h\xe2\xfc\xef\t\xe8#>\x14\x85\x86\x94\xbfin\xffh`\xc7\xfcL{[\x1f\x1b\x90&>a\x0f\xbc\x96\xb9\xb51jG7\x804\xcd\x8c\xe7\xe4y\xbf\xb5\xca5-\x97\r\xc6>\xcd\xe5h+\x8b|\xfd\xeb_\x97\x07\x1ex\xc0-\x0b\x0e\xcb\x0b\xb0\x90\x0ct\x95\xda\x8b!`\x08D\n\x01za\xf1\xce\xc2\xd8s\x94c\x91\x9d\xf5c\xbd\xc7\xcb-\xcb\xd6\xcb\x95X\xe6\xdb\x87Xm$\xa4v"\x93/g\xc9\xf5\xee\xed\xe7@\x98\xe6%\x05\x8e\xa1\xa5!.\x7f\xd6\xed\xdd\x93\xe9)9\x17!\x96$[\x17\xc2\x1b\xee\x87K\x9f+\xe74\xf78\xafJ\x92\x8d\xf5,\xbc\xd2\x18\x0bpe\xd2\xcb\x04\x07\xcf\xb5fy]\xbb\x17\x9a\xe1\xd0\x97E\xbeQ\xf2\x8f\xbb\xbf\xacu\x91|w\xe9Y\xd2\x83\xb0\x0c\xfb@,\xce\x07\xf2\x8f\xfd\xce\xf1\xda\x02c\xb42"K\x80\xd9&\xa5\x85\xfaw\x8d\x81&\xc2\xf8h\x0c\xa0\x83\xa5\xe8\x17\xe0\x95A\x1c\xc0\xbe\x95\xedE\x1fR\xe6\x8e\xde\x12\x06\x91\xbf\xc1\xf1\xe7A\xcf\x852\x99\xc7\xc7\xa0\xcc\xe8K2\x90\xc6\x07\rL]\x06\xccch\xe7\x92\x0041\x04\x0c\x01C\xc0\x100\x04\x0c\x812\x100\xe6\xa6\x0c\xd0"|\x88\x1aE\xb7\xa3\x8d\\"A\xd1m\xde\xa7 ^\xfd\x12\xd3\x139\xd9\xfa\xe8\x80$[\xe8\x85\x16D\xc1\xf5[\xc6$\x96\x01\x13\xb6\r\x97.w\x9d\xc4\xdc30\xd1e\xbf7\xdex\xa30)\x88JPd\x1d\xe3\x0c\x9a\x18\x02\x86@\xf5\x11P\x8f?\xb6D\x97\xfa\xbe\xa8\xa5W\xfe\x1b\t\'\xae_\xfa\x1c9\xafe\x81\xec\xc2\x12\xdf].\xa9\xc7$f\xcd\xf5\x9d\xd4c.g\x84\x1e\x91\x07\x90\x9d\xf7-~2\x90b\x870\x9e\x03.u\xd5\x81\xf5\xf2\xde\xb5\xf2\x0f\x8bO\x978\x1e\xbc\x1c\x80\'a=f\xfb\x9d\tg\xe2\xb1\xc2_\x02\x0cX\xaa.z^\xf6\xef\x18\x15\x9c\x0e\x8f>\xaaz\xabj\xa7\x01\x9c\x14d\xd3yY\xb8\xb2-\xecF\xeb\xa9\xa2\x81A\xb2\x8f\x9fI\xf4\x91\x9fg3\xbc\x9f\x9aG\xf8\xf1L\x16\xfb\x13\xc5\xae&\x86\x80!`\x08\x18\x02\x86\x80!0\x1d\x02F\x00N\x87LmnW\x83\x8a\xcb&\xee\xf6\xbb\xa0\xdb\x02\xed\x91&\x9cx\xf0g\xbb\xe0\xd9\xd6(\x939\xb3\xcdf\x028\x8ee\xd2\xc3\x07\xd3r\xfc\xd9\x0b\xa5w)\x96\xd6\xc0\x8b2\x16\x0bn\xb6\xa4\xe7\xe3\xf2\xcb/\x97\xeb\xaf\xbf~\xa6\xa6\x94\xfc]"A\x9b\xdc\xc4\x100\x04\xaa\x89\x80\xc6\xf8\xd3\xa5\xbe/\x06\xf1w\xe3\xb2\xe7\xba\x84\x13\'7\xb6\xcb>,\xf5\xdd\x9dM\xb9Ys\xdc\xcd\x9f\xab\xd9\xda\xe8\xd7M\xe3g\x14Ob\x8e\x03yuQk\xafk01\x9eI\xd4\xeb\x92\x8fs\x16#\xa6\xe2\xb7@\xba\xbe\xadc\x95\xc3\x9d\x1e\x85\xf3\xc5\xf3\xaf\x10\xa34\x9e\xfe-\x885\xbaMY\x8ck3#XxdH\xef\xfd\x15\n\xfb\xb6\xc3\xf7\x95\xed\tp\x9c\r\xa9\xc5\xd1*\x16?\x8c|6/\xcd\xcd\t\xd8v^&`.\x0b\x0eA\xb4\xd4\xe3Q\xb6\xceEH\xf4\x15z\xf9\x85b\xbf\x86\xd0\x17+\xd2\x100\x04\x0c\x01C\xc0\x10\xa8\x19\x04t\xd0\xad\x99\x06[CgE@\xcf\xe9-\xfe\x9e\xa10s1>\xa3\x85<\xfe\xab}\xdesZ3\xb2=@\xa6{\xc5Y\xc9Ld\xa5sQ\xb3\x9c\xfe\xa2\xa5\xd3\xedU\xf6vz\xfb)\t\xf8G\x7f\xf4G\xf2\xcdo~\xf3\xd0g\xf5\x10,\xb7\xf0d\xd2\x9b\x04\x94{\xbc\x1dg\x08\x18\x02\xe5#\xa0\xa4\x92\x12\x7f\x97"\xb6\xdf\x0f\x97\x9d#\xdf\x80\xd7\xd9i\xc9\x0e\xd9\x92\x1bG<;\xce\x9b\xe9>\xa3s\xea\xf2\xeb\x9bOG\xe6\xe1T\x94CP\xdb?\xe9X\xe1\xba\xad\x18\x1f\x8d\x81\x12\x83\xf4\xba\x8c\x83\r\xf9\xc0\x825H\xae\xb2A64v\xcb6x[\x92\x10\xd4\x81\xf7\xe8c\xeb\xf93\xfb\x9cF\xdf\x99i:*\xa2\x8c\xd1\xf0\x81\t\xc9\x81\xc8\n\xf2A[T\xfa\x18v;\xdc\x8a\x0e\x9c\xdc\xc5\xab\xfce\xc0\xe10\x80z\xb3\xe2\xb2\x08\xda\xa9\xa1\xd8\xaaace\xe5\x1b\x02\x86\x80!`\x08\x18\x02\xb5\x86\xc0|\xb4Yk\xed\x1c\x95\xda^=\xa7\xbf\xc2\x81\x9c\x15\xf2\xb3\xda\xc4\xa5\x965\xed\xfe\xba\x84u\xdb\x13\x83\xb2k\xe3\xb0\xb4\xb6\'%\x8fe\xae&\xd3#\xd0\x80%b#\xfbSr\xc1\x1b\x8eq;\xe5\xf3\xc1\xe2E\x12P\xe3\xff\xbd\xf9\xcdo\x96\xaf|\xe5+\xae\x1en\x9b\x0b\tXH\x00*\xc98}/\xed\x1bC\xc0\x10\x08\x02\x01\x9d\x1d\xebR\xdfs\x9a\xbb\xe4\xdbK\xcf\x94k\xfbN\x95\xb5\xc9V\xd9\x93KK\x7f>\xe5\xbc\xce\xf4\xa6\x1fD\xbd\xf3\xa9\x0czJ\xf6\xc3s\xf2<\xc4O\\\xd7\xd4\xe1\xba^H\xa2\xf2\x1cp\xb9\xaf\x12\x83\xaf@\xac?\x12\x7f\xef\xefZ#\x19\xdco\xf7\xce\xa3x\x7fS]\x17\\`N\x0f\xc0\xeeX\xd2)\xf7\xa9z&\xe0\x82a\x95\x99\x80\x13\t\x0bQ2\xd5\xb9\x9bi\x1b\t@&/\xd3e\xc0z/\x9a\xe9\x982\xbe\xd3bW\xe2X[fP\x06\x80v\x88!`\x08\x18\x02\x86\x80!P\x0e\x026o(\x07\xb5h\x1f\xa3OQ\x7f\x83f>\r\r\x85\x00\xa4\xc7\x03\x1f\n\xa7\xc7\x11h\x1e$`KG\x02\xf1\xb6\x0b,\xefhcT\x95\xd617Gj<++N\xec\x92%k\xbc\'\xebA?X\'\xd1\xa7$\xdd\xbb\xdf\xfdny\xc7;\xde\xe1\xfa\xaa\xc4`9D\xa0\x96W\x15\xd0\xacRC`\x9e!\xe0\x91N\x87\x9f\xda\x9c\xdc\xd4.\xdf\xec;C\xfe\x03I&64w\xcb\x0ex\x9c\xd1\xe3\x8f\xfb\xa9w\xe0<\x83(\xd0\xee\x92`\x8d\xe1F\xfc\x16\xdf\x0b0\xcb\xb1\r5\xe8\x92k\x8eu\xab\x91\xe4\xe2\x9f\xfaN\x07\xf9z\x9a[\xfa\xbb\x05Y\x95\xb3\xa0\x05\xe7;\xfe\xc4)\x03\x1czb\t\xa7\x81\x9e\x98\x00\n\xdb\x87L\xc0q\x97\xa4L\xcd\xa2\x00\n\x9d\x0fE0y\n\xec\x95\x05K\xbcL\xc0\xce\x8a\x0c\xaf\xdf\xf4\x00T\x17R^R&\x86\x80!`\x08\x18\x02\x86\x80!\x10"\x02F\x00\x86\x08n\x95\x8a\xa6\xa5\xcb\x05\xba\xfd\xd0\x87\xfc6\x04o\xfd\x82\xeb\xd3L\xb6O\xdd\xc3\x90\x83x\xf2O\x8b\xd1dF\x04\x98]/\x9e\x8c\xc9y\xaf?\xd6\xed\x17F|\xa2\xc2\xe5\xc0\xd7\\s\x8d\x1cw\xdcq\xf2\xc0\x03\x0f\xb8\xfaH\x04f\xb3\x98\xe2\xc2{e6)$\xfe\n\xbd\x00g;\xce\xbe7\x04\x0c\x81\xf2\x10 \xa1\xc4_&u\x11\x96U\xfe\xcd\xc2\x93\xe5GK\xce\x91\xf3\xdb\x16\xc8~?\xc6\x1f\x89)\xbb\xd3\x96\x87\xefTG\x11\xf3\xfd\xb9\x8c\xbc\xa2\xadO\xba\xe2\x9e#\x12\xf1\xa7\xd7\x1f\xd9\x88\xbf\xc4r\xdf\x9b\x90Y\xf9\xc5m\xbd\xb23\x97\x92A$\x0e)\xf4\x12\x9c\xaa\xcc\xf9\xb2M\t\xc0\xeexR:\xe1\x05H\x89\xd2\xb5yp\xcf\xb8$1\xde\x82\xcf2)\x01\x01\x87\x17=\x00W\xb4\xb8\xa3B\x8a\xf0\xa2d\x1f\x9f\x86\x96\x97\x8a\xbb\x84>\xd9\xae\x86\x80!`\x08\x18\x02\x86\x80!\xe0!\x10%[\xcd\xceI\xb0\x08\xd0\xb8\xfa\xb9_d(\xe7\xd9\xc5\x89A\x05\x0f\xdd\xbeK\xb2 \xb64.`\xb0\xdd\xa8\xbf\xd2RcY9\xed\xbc\xc5\xaec\\6\x1d\xb4\x17 \x0bV\x82\x8f\x84\xdf\xd3O?-g\x9ey\xa6\\v\xd9e266\x86%Q\x98\xbe\xfa\x95\x92\x0c,\xc6+p\xc9\x92%\xf5w"\xacG\x86@D\x10(\x8c1\x97\xc4o\xf3\xdd]\xc7\xc8O\x97o\x90\xdf\xebX*\xfb@8\xedEr\x0f\x92RF<\x85s\xc2R\xa0\xfb\xda\x1b\xe2\xf2\xd6\x0e\xaeF\xf4\x84\xb1\x16\x7f\xbe\xfcy\xf2\xde\xcecd4\x97s\x89>\xf8\xcd|\xf7\xfa\xf3\xe19\xf4\x0fa\xf6\xa4\xb1!\x16\xa98\x80:\xa6\x0e\xec\x99\x90XRy\xa6CM\xb67\xc5 \x80\x87\x84=}\x1e\x01\xa8!_\x8a9\xac\x8c}\xc8\xba\xaf\xf6\x8f\xb3\x93U\x06\x80v\x88!`\x08\x18\x02\x86\x80!P\n\x02\xa1\x10C\xa54\xc0\xf6\r\x05\x01>\xef\xe6|\x91\x89@r\xd0P\xce\xb3.\xf9\xdd\xb9iXF\x072\x92lJ\x80LBm&\xd3"\xc0l\xc0c\x83iY\xbd\xaeG\xd6\x9e\xb5\xd0\xed\xa7\x9e\x94\xd3\x1e4\x87/H\xeei\x16\xdf\xab\xaf\xbeZ\x96.]*\xcc\x14<::\xeaJ\xe5w$\ts\x98\xe0f2X\xcc\x85\xfd\x95<,\xacv\xd9\xb2e\xee\xa3\x12\x87\x85\xdf\xd9{C\xc0\x10(\x0f\x01\xcev\x0bc\xcc\xbd\xb2m\xb1\xdc\x02\xe2\xefC\x0b\xd6"\x83\xa9\xc8\xf6,\x12\x19\xe0Vn\xa4Sy\xf8\x16\x7fT\x83\x8cN\xe6\xe4\xc5\xad\x0b\x85\x19\x95\xbf\xb6\xe8\x14\xf9\xc7\xc5\xa7\xc9Bd\xfa\xdd\x8a%\xd7Lta\xe7`j4\xe9\xf8\x9f\x81\xcb\xd8\xd2x\x93\xdb!\n&\x80\x8eS\x03{\xc7]\x0c\xc0"\x1c\xde\xa7\xee\xdc|\xdd\x8a\x1bS6\x9d\x93\x8e\x1e\xff\x9c\xe2f\xa4\xa4j\xc0\x90\xd0N\xa5}\xeae\xe1\xe1\xed\xd0\xc4\x100\x04\x0c\x01C\xc0\x100\x04BE \x14b(\xd4\x16[\xe1\xc5 @\xa3\x8a\xf2$\xf4)\xf7\xeepH)\xffc\xb0\xff\x9eD6\xe0\xc6\x16\\N\xb6\xd6fV`\xf3\x98\x8dL\x82h\xdbp)C\xdf`\xa9Y\xc8\xc9S\xe8\xe5\xc7\tQ<\x1e\x97\xa1\xa1!\xf9\xe4\'?)\xed\xed\xed\xf2\x867\xbcA~\xfa\xd3\x9f\xba%\xc1\xfc\x8e\xcb|I\x06\xea\xe4\x89D\xa0z\x07\xae[\xb7\xce\xb5\x95\xdf\x9b\x18\x02\x86\xc0\xdc\x11(\x8c1\xb7\x021\xe6\xfe\x011\xe6\xbe\xbe\xe8T\xe9\x03\x91\xc2\x18s\x13\xf0J\xa3\xc7\x9f\xfd\xe2\xe6\x8e\xf5l%0f\xc6\x08\xe2*.\xc7y\xf8\xcf%g\xca%\xf0\xfe#\xf9:\x84mv\x0efC\x8f\x99\x80\xf3\xb2,\xe1\x85qc\xcc\xc4\xaa\x8b\xff\xa39\x00\x02\x90!7LJC\x80d_&=)\xad\xdd\x8d\x12O(\'\xa7\xffK+k\x96\xbd\xf5bQ\x02p\x96\xdd\xedkC\xc0\x100\x04\x0c\x01C\xc0\x10\x98+\x02f\x19\xcd\x15\xc1\xe8\x1eOk\x8dY\x80o\xf6\x9b\x18\xca\x83\xf9\xb8\x1f\x1c\xe6\xe1;wK;\x8cE\xe3\xfff\xbf \xe8\x0582\x90\x96\xe7\xbe\xcc\xb3y\xe9\x9d\x10\xd2\xd3\xf5C\x8d!\x99G/?\x12x$\xfb(7\xdcp\x83\\t\xd1EB\xef\xbe\xd7\xbd\xeeu\xf2\xe5/\x7fY6n\xdcx\xe8\x18\x12\x81J\xf8\xbd\xf4\xa5/u\xdb\x95\x1c<\xb4\x93\xbd1\x04\x0c\x81\x92\x10\xd0i\xb4f\x96\xfd\xe0\x82\xe3\\\x8c\xb9\x8b\x11c\x8e\t>\x06\xfc\x18s68\x97\x04\xeb\x9cw&\x13AO\xb6q\xe8^dW\xa6\xd89p0\xcc\xf8B\x8c2\xf0\x10[\n\xf2\x94\xa2\x8c\x8e\xfbP\xe5\x97\xd1\x03X\xdc\x9dCb,;\x91%\x9d\x89\x06\x00\x96\xa3\x07`w\x93\xb4A)!\xd9(z\xb9xOC\xcd\x03\xb0\xa4\xf3d;\x1b\x02\x86\x80!`\x08\x18\x02\xe5 \xe0E\xbc.\xe7H;&\xea\x08\x90\xe5!\x01x\x1b\xf4\xb2\xb0\x1a;I\xc3\x1a\xd4\xe2\xe6\x87\x06db$+\xb1\x84Y\xda\xc5`\x9d\x99\xc8K\xd7\xa2f\x17\x0b\xf0\xe1\xdb\xf7x\xd65\x99\xc0\x90E=\xfaH\xe4)\x99\xb7o\xdf>\xb9\xf1\xc6\x1b\x9dj\xf5\xabV\xad\x923\xce8\xc3\x91\x83\xeb\xd7\xaf\x97\xc7\x1f\x7f\xdc}E\x12\xd1\xc4\x100\x04\xcaC\x80\xcb}\xd5C\xea\xf9\xcd=rE\xef\trbc\x87\xecC\x8c\xbfA\xe4S\xe52S[jZ\x1e\xb6A\x1ee\xe7\xa0\x144c.\x13\xf0\xe2\x98G\x14\x95rd\xd8\xfb\x8e\x0ege\x1c\xca\x87n\x8e\x99T\xf6=\xec\x8ak\xbd|\xe0\xc4\xb8\xce\\\x02\xdc\xd6\x95\x94\xa1\xfe\x89\xb0z\xa4F\x8f\x06\x19\xb63\x14\x16\xd2V\xae!`\x08\x18\x02\x86\x80!\xe0#`\x04`\xfd^\n\xea\xf1\xf7\x1bt\x91iz{\xa1\xdc\x16(C7\xe9/_\xdd\xb5yHvm\x1a\x92\xdee\xad2:\x94FB\x90@\xabA\xb3\xebKr\x88\x9cN\x886\\\xbaR\x1c\x01X\xe1\xee\xd1#Pc\xfd\xa9W \xc9=%\x08\xb7n\xdd*T\xca\xd7\xbf\xfe\xf5C\xad\xd3\xef\x0fm\xb07\x86\x80!0+\x02\x9c\xd5r\xa6K\xf2\xaf=\x96\x90\xbf\xeaY#\xbf\xdf\xbe\xdc-\x9d\xe4r_.\x076\xd2iV\x18m\x87\x08"\xc0k\x1b\xa9\xa4\xb0\x04\xd8\xf3\x00\x8cB\x13u%\xc2\xf8HF\xc6F\xd2.\x0e`\x06\x84\x96\xb1K\xc5\x9d\x1dz\xfb\xe5\x80\x17\xc9?z\x01\xee\x92a\xcfrT\xab\xb2\xb8b\x8a\xd9KOI\x8f\xbf3\x9f0r\x9b\x12\x83\xc5\x94a\xfb\x18\x02\x86\x80!`\x08\x18\x02\x86@\t\x08\x18KS\x02X5\xb6+\r(\x1aR\\\xd3\xf9\x88\xdf\xf6\xc0\x8d*\xb7|\x15\xcb\x80s\xd9I\xd9\xb6qH\x9a\xdb\x93\xb6\x0c\xd8\x07{\xa6\x7f\r\xc0l\x04\x9e\t\'\x9c\xb3P\x1a\x9b\xe3\xc0\x0cA\xb6\xfd\xe5\xd43\x1d\x17\xc6w$\xf54\x01\x88z\x06\x92\x14\xa42I\x88&\n\t\xa3n+\xd3\x10\xa8w\x04<\xaf?\xaf\x97L\xf2q\xeb\xb2\r\xf2&d\x9b\xdd\x8f\xa5\xbe\x07-\xc6\\\xbd\x9f\xfey\xd1?pEH\x98\x12\xbd\xe7\xc9\x13\xc3i\x19\x1b\xca \x13p\xcc\xc5\xdd\x9d\x17\'#\xa0Nz\xc6b\x83t\xf7U\x84\xd8%\x01\xd8\n\r\x9eb\x0c\x08\x0f+\xc6\x100\x04\x0c\x01C\xc0\x10\xa8\x17\x04\x8c\x00\xac\x973\xf9\xec~\xd0~\xd3e\xc0\x0f<\xfb\xeb\xe0\xb6h^\x88\xa7~\xdd\x0f\x0f2\x10Y\xe6\xfd7+\xb8\xcc\xfc;>\x9c\x91ek:\xe5\xc4\xf5~6\xe0\x08\xfc\x1a\xd53\x90\xa4 \x95\tD\xa8\xe6\xf97\xeb)\xb5\x1d\x0c\x81#\x10\xe0\xd3\x17]\xf2\xdb\x8a\x9b\xe4\x17\x17\xads\xd9e[bqd\x96\x1d\xf7\xb3\xfb\x1eq\x88}0\x04j\x0e\x01\x0e[\xf0\x1d\x97\xa6\x86\x84\xb4;\x93\xc3{\xf2X\xd5\x8e\xf8\xe14&\xc6rn\tp\x12\x89,\x02\x7f\xfaY\xd5\x0eV\xa6\xf2L:+\x0b\x96\x92\x97\x83K^8\xd1?\xd4\x03\xb0\x1bU\xa8\x17\xa0ns\xf5\xda\x8b!`\x08\x18\x02\x86\x80!`\x08\x04\x8b@\x04(\x87`;d\xa5\x1d\x81\x80\xda\xbc\xb7\xfb[C9\xdf\xe0\x89\x9c\xfc\xe6\xce=\x92\x87\'\xa0\x12\x82G\xb4\xc4><\x1b\x81\x86II#\xd0\xf69/_\xe9\xbe\xa3\x17\xa5\x89!`\x08\xd4>\x02\x85\x19~\xcfi\xee\x92\x9f\xc0\xeb\xef\xb7\xdb\x97\xca\x9e\\JF1\x93\xb6\xcc\xb2\xb5\x7f\x8e\xad\x07\x87\x11\xe0\xc8E\x07\xf6%\x89\xe8\xc5\x01\xe4\x836z\x00\x1a\x03x\xf8|\x15\xf3\x8e\xcb\x80\xb3\x99IY\xb0\xc4#\x00C\x06\x90\x04 \xd5\xc4\x100\x04\x0c\x01C\xc0\x100\x04BF \x14B(\xe46[\xf1\xc5#\xa0\xcb)\xee\xc0!cP>Y\r\x9ce\xe2\xf2U\xca\x9egFdp\xff\x84$\x9b\x13\xf0\x18s\x9b\xece\x06\x04\x18\x98|\x0c\xd9\x80\x9f\xf3b\xc4\xbf\xf6\x9fy\x87\x94io\x86V\xd8W\x86\x80!\x10$\x02$\xff4\xc3\xef{\xbb\x8f\x91\xffX|\x96,\x8a7\xca\x96\xec\xb8\xbb\xf9\xda\xa0\x1b$\xdaVV\x14\x10\xa0\x05\xd00\xd9 \x8b\xfd8\x80\xf4|\xad\xa6\xd0\x010\xe6\x87\xd4\x18\x1f+H\x02R\xcdF\xd5X\xdd\x8e\x00D\xac\xe2\x9e%~v\xe7\xc0-G\x07\x88^($\xff\xba|\x88t[\x8d!f\xcd5\x04\x0c\x01C\xc0\x100\x04j\x03\x01\x9b\x8b\xd4\xc6y*\xb7\x95j\xb2!\xcd\xac\xdc\xef\x17\xa2\xdb\xca-s\xc6\xe3\x1e\xbf{\xaf4\xb7`\xe5\xb1F\xe1\x9eqo\xfb2\x9d\xcaK{W\x93\xac\x7f\xd9\n\x07F\xcc\x18@\xbb(\x0c\x81\x9aD@g\xad$\xff\x96\xc7\x9b\xe5\xbf\x96\x9e)\xff\xb7\xe78\xc4\xf9\xf3b\xfd%\xabL\x8a\xd4$\xa8\xd6\xe8\x9a@\x80\xcf\xfb\x10\xd5B\x96\x80\xe8\x8e\x8c\xf8\xd6mj4+\xc8\xbb\x13\xfc\x93\xcf\xc8t4\xa4\x864\xc4$\x97&\x01\xa8\x1e\x80\xa1\xd4\xc3\xdb&\x17\x173\\\x8d-\x01\x0e\x05b+\xd4\x100\x04\x0c\x01C\xc0\x108\x12\x01#\x00\x8f\xc4\xa3\x1e?\xf1\x1c\x93\xf4\xfb\xb9\xdf\xb9P|\xf3\xe2\xfe\xd3\xf6G\xee\xda+-\x9d\x8d\xc6\xff\x15y%\xe5s\xc8L\x08\x13\xf8\xb9\x97,wG\xe4\\V\x95"\x0f\xb6\xdd\x0c\x01C \x12\x08p\x16\xabOV.m]$7\xad8G\xcen\xecv^\x7f\x19|\xc3\xd9\xad\x89!P\xaf\x08 b,\xe8\xed\x86CK\x80\xa3dX\x8e\x0e\xa5$\x8fq\x95\xbfQ\x93\xe2\x11\xe09\xcc"\xbbK\xcf\xe2\x96\xe2\x0f*oO\xb5I\xbd`\xc8\x87o\xa5\xe5\x95fG\x19\x02\x86\x80!`\x08\x18\x02\x86\xc0\x8c\x08D\xc9N\x9b\xb1\xa1\xf6e\xd9\x08\xe89\xbe\xcb/!\x14;x\xd2\xaf\xe5\xe9\x07\x07d|0-\xf1Fl\xd0\x19q\xd9M\xaf\xff\x03]6`\xe0u\xfc\xd9\x0b\xa5\xb5\x03\xde\x13\xc0\x8c\x99xM\x0c\x01C\xa06\x10(\xcc\xf2K\x8f\xbfk\xfbNst\xc8\x9e|\n\xc4_\x83\xe8\r\xb86zc\xad4\x04JG\x80C}\x1c\xe3\xd62?\x06`\x94F\xb0\xd1\x83Y\xf8\x98\xa1EQjT\xe9\x10W\xfe\x08\x9ap\xa0\xe6\xda\xbb\n\xb2;\x87\x83\xa1\x96\xba\xb8\xf2\x9d\xb4\x1a\r\x01C\xc0\x100\x04\x0c\x81\xf9\x87\x80\xcdM\xea\xff\x9c\xeb\xd3\xd5\xc7\xd0U.\x05\xa63\x8an\x0b\xac\xf7\x939\x8f\xed\xdb\xbdyHvl\x1a\x92\x96\xf6\x84\xe4,\x10\xe0\xac\xf82\x1bpj4\'}+\xdbe\xdd\xb9\x8b\xdc\xfe\xbe3\xe5\xac\xc7\xda\x0e\x86\x80!P]\x044\xcboo\xac\x11K~\xcf\x96\xf7u\xaf\x96]\xb9\xb4\x8c\xe6s\x8e\xfc\xabn\xeb\xacvC\xa0r\x08\xd0\xcb\xae\xd7_\x02\x9c\x8b\xd0\xd3\xbf\x91\xa1\tav{\xach5)\x11\x81\x9a\x95%\xc7t\xc8\t\xe7x\xa1p\xf4\x84\xcdt\x9c}g\x08\x18\x02\xe1"\xc0e\xbf\xbcY.B\x86\xd3\x1f.]/\xcfm\xea\x06\xf97\x0e\x82\xa3\xd8\xa1+\xdc\xf6Y\xe9\x86@\xb5\x11\xe0/!G\x02\x101\x00\xdb"\x14\x07\x90\xb8L\x8c!\xfc1W\'\x18\x03X\xd6e\x82<\xc0\xd2\xde\xd3X\xd6\xb1E\x1e\xa47R\xda\xf2\\\x06lb\x08\x18\x02\x86\x80!`\x08\x18\x02!"P,\xc7\xc0\x01\x9a\xca\xfd\x95l\xe3\x7f~\xd6\xc1\x1bo\x9d\xd0\xb3\x8c\xca9\x13\x13OP\xb3\x05\x9a\xc1{U~\xc7\xfd\xf4\x98\x99\xfes?\x96\xa3\xc7\x16\x96\xa9\xf5\x14\x96\x85]\x0f\xc9\xd1mg\xbb\xa7j\xfb\xa1\x03\xea\xf0\r\xfbK\xf95\x948\xebgn\x0bL&\xfdR\x9f~\xe8\x800\x9bm,q\xf4\xe5\x11XU\xf5W\x10\xb2\x01\xa7Fs\xb2\xfe\x92e\xaeo9\x7f\tS\xfdu\xd4zd\x08\xd4\x0e\x02\\\xf6{l\xa2EnXr\x96\x1c\x97h\x95\x1d\xb9\t\x0c\x82v_\xab\x9d3h-\xad\x04\x02YX_\x8d0+\xba\xfdL\xc0\x95\xa8s\xa6:h\xe4P\xb2\xe9\x1c~\xc1X\x02l\xbfY\x0f\x90\x12_\xf38\xb1\xad\xed^v\xe7I\xd8t!\n+\xd1D v\x83-\x1dhbf\xb8\x95\x8e\x9b\x1da\x08\x18\x02\x86\xc0\xbcC\x80O\xdcf\x12\xd29$\xfa\n\x89\xba\xe9\xf6\xe7\xc0\xc3}\xbb\xa1\xbd\xbe.,x\xdf\x89\xf7t\xef\xe7Z\x82V(\x83\x8aP\xf9h\x91:\xdb\xc0\x95\xc6>\xe3\xd01\xe8\xa8\xaf\x8cg\xc7\xf7#\xd0\x83\xd0=\xd0\xbd\xd0\xddPnc\xbb)J,z\x9f\x8e|U\x0c\xb8\x8f\x12\x88G\xeeQ\x1f\x9f\xd87\xca\xe3P\xe2\xb4\x04\xcam\x81\x12\x81\x88\x87\xefd\xf7\xe6a\xa1\xb6w7\xca\x042\xdcZR\x0b\x0f\x97\x99^\xe3\xc8\x06<:\x92\x96S/\xf0\xe2\x00\xf2\xaa\xa5\xd3\x82\xf1\x803\xa1f\xdf\x19\x02\xe1 @\xc2\x80\xc4\xc1\xc9\xc9v\xf9\xf6\xb231h\xc5ew>\x05\x17\xf4\xd9\x86\xaap\xdac\xa5\x1a\x02QF\x80\xc9"\xb2\x08\xf9\xd1\x1b\xf3\xbc\xc5\xd4\xe0\xa8Z\x9b\x0b\xb8\xaa<\x89+Z:||\x1c\xa8\xc5S\xb5\xdeU\xa6b`\x95\x03\x01\xd8\xdc\xe1\x99\xc9\xb4EB\xb4Ixc]P\x99\x8e\xd5E-\xc4\x8bW3U\xe7h\xec\x98\xcei\xf8\x13\xac\xfa\xcf\x90\r21\x04\x0c\x01C\xc0\x10\x88\x16\x02:P\x1c\xdd\xaaB\xd2O\x07\x90\x0e\xec\xc4\xc1\x99J\x82o9\xf4X\xe81\xbe2\x80/\xb7\x93\xd4\xe3\x93<\x96\xed=6\xc4\x9b\n\x89z\x08\x92,$9\xb8\x0bJ2\x90\x84\xd73\xd0\x8d\xd0\x9d\xd0}P\xc6\xc3\xa3\xf2\x98\xa9\x84\x83*\x07X\nMI\xc5\xc1m\xa8\xc1\x17\xf6\x81\xfd\xd9\x0c}\x12J\x02\x90\xdb\x02\x16\xafH\x92~{\xb7\x8c\xca\xa2\xe5\xad2>B\xab[\xa1\x0c\xb8\xba:+.\x9b\xcaK\xd7\x82f9\xed\xbc\xc5\xf2\xf0\xed\xb8lC\xb4\xb6\xeb\x0c:\xeb\x8e!\x10\x18\x02\xde\xb2\xdfI9\xb3\xa9S\xfee\xf1\x19\x8e\xf4\xeb\xcfg0\xa8\xd9},0\x90\xad\xa0\xbaC\x80\xbev\\*\xefI\x08\xe6E\x99\x88\xa5\xc6\xf3\x92h\xb4\xdfn\xa9\xf0\x111\xdc\xf6\xa4\xb5#)q\xac\xe6p\xc9\xc9\xdc=0\xf0s\xcb\x02Y\x9d\x12\x80v\xb2\xa6>Y\xc4\x85s\x13\xceG\x88\x19\x89?ut\xd0y\xdb\xd1s\x1an\xd7\xfd\xf1\xd6\xc4\x100\x04\x0c\x01C`\xbe#0\x15\x01\xa8O\x938h\xbc\x04z)\xf4X(\t#\xba\xe7SK\t\xd4\xcbAJ\x15o\x03#\x9d8\x10\xaa\x91\xa0\xef\xd9\x1fj\x0b\xb4\x0b\xba\x02:\x95\xec\xc7F\x12\x83$\x08\xa9\x9b\xa1\x0fC\x1f\x82n\x82\x16>M\xc3G\'\xc4\x83\xf5p \xadE2\x90\xe7\x80\xd8\xd08`_\xcf\x87\x06.|B\xcce\xbfyd\xb1\xdd\xf2\xe8A9\xf5\xfc\xc5\xd2@\xb4\x88\x9e\xc9\xac\x08\xe4\x90J1\x06\xda\xfc\xecK\x96;\x02\x90\x17\x1cO\x9c\x89!`\x08T\x06\x01z\xfeq\xd9\xef\xba\xa6v\x8f\xfc\x03\t?\x98\xcf\x1a\xf9W\x19\xf8\xad\x96\x1aE\x80cU\x9a\x1e\x80q\xef\xb9o\x94\xc6\xad\x89\xf1\xact67\xe1w\x8d\xf1\xb5F\xf1\xadJ\xb3q\xef\xcbfs\xd2\xdc\x1a\x97&\xe8\xd8\x10\xcc\xc7p\x8c\x12^.,\x99\x89@L\xa6F\x80Vt!\xe1\xc7\x15V\x97@\xcf\x85r\xae\xc39\x0f\xed{\xceo\xf8\x90\xff\x16\xe8\x1dP\x1eCQ\xe2\xd0\xfbd\xaf\x86\x80!`\x08\x18\x02\xf3\x16\x01\x12B*\x1c|)\xa4kH\xfa}\x1cz\x16t*{\x89\x03\x8a\x0e\xd8x\xeb\x06n=\x9e\x9fU\xb8MU\xb7\x85\xf9\xffh\x9bS?\x17\xfeg\x7f\xe8\xa9H=\xe5\xa8\xc6p\x891\x97\x10?\x08}\xc0\xd7-\xf8\xbf\x15Jo\xc1\xa3\x85e\xb1\x7f,\xbf\x16HA\xc5\xe1\x17h\xef\xbb\xa0S\x9d[l\x9e\x9b8\xc2\x0fE<\x8eD /{\xf3\xf1 \xb4B\xa9fn\x8d\x8c\xe8\xd1\r\x80j\x02q\x00\xd7>\xa7W\x98\x198\x8f\xe0\xe5\xe6\x04\x18\xd1\x93e\xcd\xaa;\x04\n=\xff\xae[\xfc\x1cw\x83\x1c\xcc\xe7\xf0\x9f\xb7\xf9\x08\x08\xef\xe0\x11iJ\x04\xd0\xb0&D\x0c\x01\xae\xb4]\x94\xf0<\x00\xd5\xd8\x88B\x13\xd3c\x19\x89\xf56E\xa1)5\xd5\x06\xf70\x04\x96mcKR\x9a\xa1$\x00\xd5\xe0\r\xa9#\xe6\x01x$\xb0jK\xfe\n[\x18\xf2\xe7\xab\xd0\xeb\xa0\xc3P%\x11\xf1\xd6\xc4\x100\x04\x0c\x01C`\xbe"\xa0\x04`\xe1\x98~%\xc0\xf8\xbf\x05\x80\x14\x92}\xdc\x8f\x1aU\x7f.\xb6\xadP\x8e\xfe\xcc\xefh\x97r0\xe5\x7f\xb5Q\xb5O\xf4\x1c\\\xed\xebo\xe1?%\x05}\n\xfa\x18\xf4^(\x9f\xa8\xdd\x0fe,\xc2B\xd2\x8fX\x16\x96\x8d\x8f\x91\x13m\xef]h\x19\x97I\xd3Rg\x9b\xa7\xc2\t\x9b\xcb\x13M^\xf1\xc4\xaf\xf6\xe2\xe9\xf1\xa4$\x121\xfc\xd7\xaa\xcb+s\xbe\x1c\x15C\x1c\xc0\xb1\xa1\x8c\xac:\xa9[\xd6\x9c\xd1#\x9b\xee?\xe0\xe2\'zKo\xe6\x0b\n\xd6OC\xa0\xf2\x08(\xf9wR\xb2U\xfee\xc9\x19\x8e\xfc\x1b\x86\xe7_d\xc8?B\x12\xe8\x9d\xba\xf2\x18[\x8d\xf5\x8b@\x0c\xbf\x94\x0cL\xa2\xc3K\x80\xa3\xd3\xd7\xd4\x18<\xff\x1c\x95B;D9\x95\xe8\xb4/\xaa-\xe1\xc3G\xaeJh\xc3\x12\xe0Fx\x00:!|\xc1\x9bsj\x8b\xcfDhE\x15\xa60\xda\xa5s\x12z\xf4QZ\xa1\xbf\x03\xfdC\xe8\xc5\xd0B\xd1}x\x8c\xe2\xa8\xc7\xd3\xc9\xe1j\xe8[\xa0\x7f\x01\xbd\r\x1a\xce\x19D\xc1&\x86\x80!`\x08\x18\x02\xb5\x81\x00I+\x0e\x14\x1c\x10\xf8\x9fO\x8a\xfe\x0c\xaa\xc3;\xb7G\x95\xecC\xd3\xca\x12\xf6\x93:\x95\xe8\xe0\xc9\xff\xaa|l|\xaa\xaf\xbf\x8d\xff\xeab\xff+\xbc\xff9\xf4\x1e\xe8#P\xc6\x15,\x14\xc5\x94Xj\xb9\x85\xdfW\xe3\xbd\xb6c+*\x7f\x02zZ(\x8d\xf0k\xc9\xa4\'e\xc7\xc6!Y\xb6\xa6C\xd2i5\xc0C\xa9\xb1\xae\n\xcd\xe7\xb8PiR\xce\xb8p\x99#\x00\xe1\x80db\x08\x18\x02!"\xc0\x9b5\x7fs\xc7 \xcb\xef\xf5\x8b\xcf\xc2\x93\x91\xb8\x1c\xb0\x98\x7f!"nE\xd7#\x024\x8e\x16\xfaI@\xa2\xd4\xbf\tx\x00\xfa\x0c`\x94\x9a\x15\xfd\xb6\xc0R\xce\xe7\xf3\xd2\x84,\xc0\xcd\xad\xde\xd2\xee\x90\x1a\xad\xb6\xa9.\x01\x9e\xceF\x0f\xa9\xfa\xc8\x14\xcb\xa1\x88\xc2y\x03\x7fNk\xa1\xaf\x86\xbe\x13\xba\x06J!V\xfc\x9e\xfb\x12\'\xce\xe3\xa6\x12\xee\xa7\xfb\x9e\x8d\xf7\xff\x0b\xfd?\xd0\x7f\x85\x9a\' @01\x04\x0c\x01C`\xbe"\xa0\x03\x08)\x86\xcb\xa0$\xff8\xe8pP\xd1\x81\x08o\xe7\x8d\xb0\xdf\xdaw\x0e\x90\x1cX9\x80\x12\x1f\xe2\xc2A\x97\xdb\x16C_\x05\xfd\x1b\xe8\xad\xd0\x9fA\xff\x05\xfa&\xa8\x9f\xc2\xd5\xed\xab\xde\x93<\x86\xe5FA\xd8\x0e\xb6\xebN\xbf1\xecS\xe0\xc2\'\xc7\x14.\x03niK\xca$H-\x93\xe2\x10`6\xe0\xb1\x81\xb4\x9c\xf3\xb2\x15\xee\x80IK\x03\\\x1cp\xb6\x97!P\x06\x02\xbcU\xf1\xeeD\xcf\xa5\x7f\x83\xe7_g>\x0e}.\x94\xfb\xd0\x08\xa0\xf0\x98\xb0\x07ef2\xa6\x84RO\xcc/\xf5\xe9\x07\xf6#\x93\x1c\x9e\xc0\x87R\x8b\xd7\x81z|\xcd\xa6\xb3\xd2\x8e\xb8;\'\xf9^\x80\r\x81\xd3\xb4\xf5\x88\x9a\xf5\xc9\x10\x98\x19\x01\x1d\xe4.n](\x7f\xb9\xe08x\xfe\xa5p\x03\xd4\xad3\x1fk\xdf\x1a\x02\x86\xc0\xf4\x08p\x88jh\x98\x94\x05\xb1\xa6\xe9w\xaa\xe47\xfe\xcfz\x92\xbeVf\x7f\x94\x8d\xfcdnRZ\xda=R7\xe4\x9cd$\xff\xbc\xb5\xc6e\xb76r\x07\xf2*\xe4<@\xe7\x00\x97\xe2=\x9d\x00h\xffs5\x90\x86\x0f\xd2\xb9\x026\x85.\xfc5p\xaeq9\xf4U\xfe{\xd6ob\x08\x18\x02\x86\x80!0\x0f\x10\xe0 \xd0\xeb\xf7\xd3\xe8\x85pO8\x8d\x00\xe2\xad\x86\x80\x0e\xfa\xab\xb0\x8d\x830\xe3\x05~\x1f\xfa{P\x1a@<\x1fTZ]A\xcfNi\x88P\xee\x82\xf2}(\xa6q\xde\xa72\x9f\x02\x01\x98\xcb"\xa6]"\x94j\xd8\x8f\xba\x14\xc6\xfd\x1b\x85\x17\xe0\x99\x17-s\xfd\xcb\xf9^\x0cu\xd9Y\xeb\x94!P\x01\x044\xe9\xc7q\xc9\x16\xb9z\xe1)2\x98\xcbb\xf6\xc5\xdb\xac\x89!`\x08\xcc\x15\x01\xc6\x00\xe4ola\xc2[.Z\xed\x11_\r\xa7\xbc\x1a#s\xed\xe0<<\x9e\xa1Gr\x08\xea\xdc\xd6Y\x91\xb8\x8e\xb4}\xeb\xc9\x03P\xed}Z\xc3\\m\xf5-\xe8\x0f\xa0\x1b\xa0a\xda\xf8(~F\xd1\xf9\x08w"\x11\xb9\x1a\xca6\xeaO\x06oM\x0c\x01C\xc0\x100\x04\xea\x15\x01\xdag}\xf5\xda\xb9\x08\xf7\x8b\x83\xac\x12{$\xe08\xf0\xd2\xbaz\x05\x94\x06\xc2C\xd0?\x87rPV\xa2\xb0p\xc0\xc6\xe69\t\xeb\xa4<\x00\xdd\xeb\xdeyD\xa0\xff6\x98\x7f\x93\x8e[\x14\xd9\xfa\xe8\x80\xa4\xc6rF\x00\x96\x08k\x0c.\x94\x13cY9\xe1\x9c\x85X\xfe\xeb\x1fl\xe6Y\x89(\xda\xee\x86\x80\x87\x00\x7f:L\xfa\x91\xc0\x8c\xf6\x9f\x16?\xc7\xc5*\x1b\x99\xcc9\xc2\xc202\x04\x0c\x81\xb9#@\xc3\x82\x04`o\xcc\xf3\x16\x9b{\x89\xc1\x94\x00\x9e\x9f\xae\x89\xc1\x146\xdfJ\x01l\xe4O[\xda\x99@64\xd1\x93C\xf2O\t\xc0\xd0*\xab@\xc1\x9c[Qi\xdb\xd3\xc9\xe2\xe3P\xae\xb8\xe1\x03~\xfeLH\xfe\xe9>x[\x15!\xe6l\xdf\n\xe8\xdfC\xe9\xb6\xcb6\xe9\xb9\xc0[\x13C\xc0\x100\x04\x0c\x81zD\x807{.\x01\xa6\xd8M\xdf\xc3\xa1\xd2\xaf\xc4]\x9f\x12*\xd9w<\xb6}\x11\xfas\xe8UP\x12\x81j4p\xdf\xb9\x9e+\x96E\x19\x83\xea2\xe0\xe0\xdd`\xb4\x16T\xb2\xf5\xb1\x01\x97\t8\x9f\x0b\xbe\x1av\xa4^\x85\xd9\xf7\x9a\x10?\xf1\xf4\x0b\x05\xf4\xaa\x13\x80\'\xef\xd9/\xcdm\xcc\x04\x1cP\xc1\xf3\xa4\x98<\x08@\xce\xa5\xce|\xd1\x12\xd7c\xa3O\xe7\xc9\x89\xb7n\x06\x8a\x00s\x80R\xde\xdc\xb9R~\xa7m\xa9\xec\xceZ\xc6\xdf@\x01\xb6\xc2\x0c\x01\x1f\x81\x06\x98\x12]Q\xf3\x00\xa4\xd54\xd7\xc7\xa6\xf3\xf8\x0c3\xfaH\xc8\x1e\x80D\x97\xe6\r\xcf\x92\xc6\x00\xac\xb53F{\x9cm\xe6\xd5\xb6\x1cz\x1d\xf4F\xe8iP\xb5\xdbiwG\xad_l7-\xf3OB\xcf\x84\xb2\xads\x99[\xe0p\x13C\xc0\x100\x04\x0c\x81(#\xc0\x9b\xbc-\x01\x8e\xde\x19\xa2\x81@2\x90\x06\x11\x07c&i\xb9\x0cz;\xf4Z(c\x89\xf0;\xaa\x92\x86x[\x92\xa8\x11\xf2\xa0\x7f\x94\x1a\x01%\x152\xdb\xce\x9a\xb9\xf6\xe9\x07\xfa\xa5\xb1\t\xb6\x8f\x11\x80\xb3Av\xc4\xf7L\x9c2\x81\xe5\xd3\xc7 \x1b0e\x92\xc9T\x94U=bO\xfb`\x08\x18\x02S#\xc0[\xdd\xa4\xacK\xb6\xcb_\xf7\x1e\'\xbb\x91\xf4C\t\xc1\xa9\xf7\xb7\xad\x86\x80!P.\x029<\xe5k\xf33~\xf1}\x14$\x9f\xa3\x19\x05\x89Fs\xbc\xb6\xd4\xc8+\rC\xae\xdch\xed$w\x15\x9a\xf0&M{\x96R\x8bK\x80\x1dLh;\xaf\xb0?\x82\xde\xe6\xff\xc7?\xd7/\x82\xa767\xb7EI\xbc\x01R\xa4\x1d\x8d\xe2\xca#\xe2\xcfm\xec\x93\x89!`\x08\x18\x02\x86@\x1d"\xc0\x1b\xbc&\x01\x89\xea\xe0T\x87\xb0\x17\xdd%\x9e\x1f\x1a\x0e4*h\xc1.\x80\xfe\x19\xf4\x97\xd0OB\x8f\x83\xea\xb2\xe1R\r\x0c5\x857\xa1\x8c}P\xd6\xa5\xdb\xf06 \xf1M\xba\x9d\x9b\x87e`\xef\x84$Zb\xe6\x05X\x02\xb4\r\x88\x038\x86D +\xd7\xf5\xc8\xca\x13\xbb\xdc\x91\xb6\x94\xa9\x04\x00m\xd7y\x8d\x807\x83\xf1nkW\xf7\x9d"p\xa8\x95\x14\xe6c\xde\xf6y\r\x8du\xde\x10\x08\x05\x81\x1c\xcc\x88\xd6\x06/\x06 \x87\xff(\x18\x96\x96?k\x0e\xa7\x1a7\xcbI\x9c\xc8\xc6\x96\xd0\x97\x00\xab\xfd\xd9:\x87\xd6V\xfaP%\xcax\xa9\xaf\x82~\x13z\x1d\x94\xb6\xb9\xcf:\xd7\xc4p\xc3!\x91\xed=\x1f\xfa\x1e\xff}\x14~\xbah\x8a\x89!`\x08\x18\x02\x86@\xd0\x08\xf0\xa6_\xb1\xa7mt\\:R\x1b\xa4\x01lF\xd1Zp|\xd0@D\xbc<\x0e\xc4$\xf8h q\x90\xa6G\xe0G\xa0?\x87~\xc8\xff\xcc\xed\xfc\x9e\xe7\xb4\x18\xa1\xc1B\xd9\x0c\xdd\xe4\xde\x85@\x00N\xfa\x1e\x00\xfd\xdb\xc7d\xcf\x96ai\x86\x11\x99GF9\x93\xe2\x10\xe0\xef\x85\xf1w\x9a\xe0=y\xd2\xfaE\xee\xa0|\x83\xda\xc9\xc5\x95a{\x19\x02\xf3\x15\x81\xbcO?|\xbc\xe7x9\xbe\xb1M\x0e\xe63\xb8\x91\xf2vjb\x08\x18\x02A#\xe0X\x04\x8c\xf9-\xf1b\xcd\x90\xa0[0uy\x89\x04\xcd\'\x88\xfd\xf4=\x1cJ|\xa5\x1d\x17\x83\xad\x1e\x8b{\x00\x86\xb4\x08A\xcf\x8e\x12\x80Q7tx\x91\xb3\x8d4h\x99\xc0\xef6\xe8\x9b\xa0\xba\xcd\xbf\xe8\xb0\xa56D\xfb\xf3Q4\xf7T(\xe7\x14\xd1\xfa!\xd7\x06\x8e\xd6JC\xc0\x100\x04"\x8f\x00o\xeemA\xb6\xd2#\xf80\x8e\xebP^P8\xb9\xa0#\x15yb\xf1h\xb6h-8\xbe\xa0\xd8Co\xb5ng\xa8$`\xac@\x1d\xb9\x88/B2X\x0e\xd5]\xa17D\xb5\x90\x08df\x88OC\xef\x83\xbe\x1dJ\xc3\x89\xc6\x08\xcf\xebl\x037\x8d\x14>\xa6OC\x9f\x80R\xb8-P\xe1\xf9\xe6\xf9\xa0\xec\xdd:*\xcd\xad\xa8\xd2\xf8\xbf\x920\xe6j\xaa\x91\xc1\xb4<\xf7\x92\x15\xee8$.51\x04\x0c\x81Y\x10\xf0n\x80\x93r^\xcb\x02yK\xf7J?\xee\xdf,\x07\xd9\xd7\x86\x80!0\x07\x04\x1a\xdc\x92\x84V\x98\x16\xb3\x19 s\xa8\xa4\xe4C\x1d\x1f\x19\xb8uSr3j\xfe\x00g\xbf\x85\xdf\x0b%\x00\xc3\xaf\xa9\xfc\x1ah\x87\xd3\x92eb\x8f\xbf\x81~\x1fz\x0c\x94\xd6\x19\r\xde(]\xfehNQ\xc2v\xb3Ot\n\xf9<\x94.\x9f\xdcF51\x04\x0c\x01C\xc0\x10\xa8#\x04H\x00\x05\xea\x01H\xc2g:\x1e\t\xab\x19%\xd1\x94\x80\x17XL\x12\xcd\t\xc4\x84\x8baYAB\x9a\xf0\xde\xc5\x8c\x9e\x8a\x18\xc21\xd9\xcc\xa4\xa4F\xb321\x92\x91q\xfcO\x8d\xe6$\x9b}6\x0b\xa2u\xbb\xffS\x94EB\xd0\t\xbec3\x9dwZm\x1a\x85\xec\x88\x1a \xec\xd2q\xd0\xafA\xff\x18J\x8f\xc0\xdb\xa0\x14\xee\xf3l\xa0\xdcW\xeeE{\xffk|z\x13\x94\xfb\x07/4\x85\x80\xf9\xa6\x07\x0f\xc8\xfaKWHC\xc4\xbc\x03\x82\xefp\xb0%\xc6\x80Wj,+\xabO\xed\x96&\x10\xa8|OB\xdb\xbb\xde\x83\xad\xcbJ3\x04\xea\x01\x01<\xf2\xc1-gR\x9a\xc0\x9e\x7f\xb6\xf7D\x19\xc9c\xcc\xc0\xb6pnp\xf5\x80\x98\xf5\xc1\x10\x08\x02\x81\x06\x18\x1c\x88\x17\x07c\xaf\x05F\xddh\x9e\xbf:\xa6\x05QS#\x88:J/#\x96\xb0\xd0#\xa5\xa3v\xf8\x08\xda\xca|\x98\xde\xd8\x8c\x90$\xc3\x87\xb7\x87\xf4N\t\xc0\xea^4Sw\x8e\xb67\x95v\xf5z\xe8W\xa0\xe7@)\x9cu\xd4\xfa\x10Ck\x9d}{\t\xf4\x0f\xa1\xdf\x84\xce6\x8f\xc0.&\x86\x80!`\x08\x18\x02\xb5\x84\x00\t\xc0@2n)!\xb1\xfc\xf8.y\xe1kWI\x1c\x06Ww_\xb3t-j\x91\xae\x85M\xd2\xde\xd5\xe8\xb6\xf1\xb9\x18\rB\x891\x0c;\xfe\xb8\x04\x18\x1fg\xf2\xd0#\xd1A/\xc1<\xdeL\xe6aL\xe2\xbf{\x0fbp\x0c\xa4\xe0\xe0\xbe\t9\xb8g\x1c\xff\xc7\xe5\xc0n\xbc\xdf\x8b\xf7\xd0a\xc4N\x1b9\x90\x92\xe1\xfd\x88\xfa\xc4\xe3\xb3S\xdb\x13^\xfdl\x13\xeb\x01"\xacg\xea]\xa3vn9XS\xd8Z\x0e\xda\xe7Bo\x81^\x03\xbd\n\xba\rJ\x99n\x00\xd7^2\x130{\xae\xe5\xf1\x98\xc0\xc4a\x8a\xd26\xde\xdb\xef\xc8\\\x12\xc1&\xa5!@\x12\xbc\x03\xcb\x80\xcf\xbch\xa9\xdc\xfd?\xdb$\x86\x8b6*\x01\xd6K\xeb\x89\xedm\x08\x84\x8f\x80\x12\x0e\x9f\xe8=AV&[d\x1b\xb2\xfe&8\xee\x98\x18\x02\x86@h\x08\xf0\x17\x86|\x11\xd2\x82\x18\x80- \xdfGC\xab\xa9\xb4\x82\x19\x92\xd0=\xf0-\xed0\xdb[\x11\x80\xa5\xc8s\xcb\x07\x90\x8c\xa2\x1a\xb2\x04\xea\x94\x10`[\xd5\x8e\xa6\xdd\xcc\x157\x9f\x85\xd2\x03\x90q\xb8\tL=X\xb6<\xcd\xec\x07\xff\x7f\x02J\xcf\xc6\xfd\xfeg\x9d/\xe0\xa3\x89!`\x08\x18\x02\x86@-#\xc0A+\x98\xc1\x96,\x1aX\xb33.\\,\x7f\xfc\xf13e\xe7S# \xf7&%\x87\xa8\xebt\xd6c\x16\xb1\x0cb\x99\x91fr\x933\x0c%\xfc\xef\x88\xb6"\x86\x95C$\x1d\xaa\xf1\x08D\x8cR\x18\xa6\xda\xbb\x9b\x1c\xc1\xb8\xe6\xf4\x1e\xc4\'\x89K\x1cN\xeb$\x1f\x13\xc9\x98\xa4\xc7s\x8e\x14<\xb8/%\x03 \x08\x07@\n\xee\xc12\xd4=\xcf\x0c\xcb\xceM\xd0\x8dC\xee\xdc\xb1\r\xce8$\x05\xe6K"\t\x0f\x12\xb4\x9b\xdb]\x1b\xf5\x8bh\xfe\xe7`\xcdsI\x12\x90F\xca\xbb\xa0\x97Bi\xa0\x90\x0c\xd4\xed\xfc_(\xda\xe3\xc7\xb1\xb1\x1f\xca\x8c\xd0<\x1b,/0Q\xc3\xfb\xe9\x87\x0fJ&\x95\x93\x04\xceO6\x8d\xaa\xeb\xc1\\\n\x0c\xa5\x99\x0b\x9a\xc4\xef\x87\xf1wN?\xcf#\x00\xf5\xc4\xcd|\x94}k\x08\xcc?\x04b\xb8}\xd1\xfbo}s\x97\xfcA\xc72,\xfdM\x1b\xf97\xff.\x03\xebq\x15\x10\xa0\xe1\x90\xc5\xaf\xaf\xa5!\x8eD \xd5\x1f\xe0\xd5\xb4\x8c\xc7h\x16\x99\x94\x8b\x80\xb3\x81\xe9\x01\x88\x15(\xees=\xbc\xf0<\xd0\xc4\\\t\xe5\x8a\xa2\xbf\x80*\xf9\x89\xb7&\x86\x80!`\x08\x18\x02\xb5\x8e\x00\x07.\xc6y\x08L\xd2\xa9\xbc\xec\xdb:\x06O\xbc1I4b\x1c\xf1\x8d\xc0C\xa6\xe0\xa17\xa5Uy\x88\xa4\xe3a~J7\x8e\xbcy7N\xe1\r\xdc\xcc\x94\xa8\xe3\x7f\x8e`\xf4.L\xc2k\xaaoE\xab,?\xaeC\x92X\xbe@R/\x07"2\x0b\xcdL\xe4A\x02\x0e\xcb\xa6\x87\xf6\xcbf\x90S;\x9f\x1cr\xed\x1e\x1b\xce8O5\x14qHh\xef\x90\x80a\xfe\nGh\xa9eyh\x8fH\xbcQ+\x97\xd0\x1c\x0b\xe5\xb2\xe0\xd7C?\x00}\x10J\x99j \x1f\xc3\xf6{\xa0$\r\x03\'\x00]\x89(\x98\xb2\xfd\x89AY\xb5\xaeK\xd2 \x00\xcb\xbc\x14\xbc\x82\xe6\xd9+\x7fFc#Y9\x06\xcb\x80\xe3X\x12\x9c\x03!\x18\x8e\r>\xcf\x80\xb5\xee\xd6\x15\x02\xbc\xa7\x90\xfc\xa3|\nK\x7f\xc7\xdd\xd2\xdf,\x1d\x1e\x92\x01\xc4\x1c,$^\xe8\x89\xe5\xbc\x03s\x91Z.\xac\x8c(\x8d\x97\x1e\xe8U\xd0\x0b\xa1\xf4\x06|\x14J\xe1>T\xee\xf3\x00\x94B\xc4\x02\x17\xf5V\xdb\xf4\xc0~iB\xe2\x17\x93\xd2\x11\xe02zz\xb5\xae;\xb7\xcfy\xac\xf2\x1a61\x04\x0c\x01\x0f\x01\xbd\x91-I4\xc9\x9f\xf7\xac\x96\xbd9\x0em\xa1\xdc\xce\x0crC\xc0\x10\x98\x06\x01\x8eK\x8d0+\xda\xb0\x0c8*\xc2\x04p\x0c9cR>\x02D\xaf\xb1\xd9;\xa7\xbc\xab\x86\x88f\x14\x96\x00\xebp\xc2n\xd2f\xfe,\x94\xdd\xa6\xd5\x15\x9d\x0b\x1b\x8d\tQ\xd8O\xf6\x97\xab\x88.\x86\xde\x0c\xe56\x12\x83&\x86\x80!`\x08\x18\x025\x8c\x00\x99\x18z\x82\xcd\x99\x00T\x83 \x87\xe5\xb9\x1c9kB\xd0P\xd7\xd6\x02O\xb4\xd4x\xc6e\x1bf\xfb\x99\xad6\x01o\xc6\xe5k;d\xcd\xe9\x0b\xe4\xb5\xef?U\x0el\x1f\x93\xcd\xbf\x19\x90\'\xef\xd9+\xf7\xfcd\x87\xec\xde\x00]\xe0o\x0f\xe54\xeezzXF\x06\xe0\x95\x03\\\x99\x1c\x84\xc4\xa0Iq\x08\xf0z\x1c\x1bJ#\xce\xe6\x12\xf9\xc1\xb5OD\xe9\x1a+\xae\x03\xb6\x97!\x10\x12\x02\xde\xcc\xcc\x1b\x85\xfe\xbag\xad\xb4L\xc6\xe5 \x82\xd5[\xe2\x8f\x90\x00\xb7b\r\x81i\x10\xa09\x95\xc3\xe0\xde\x89,\xc0\x14\x1a\x19\xd5\x968\x1e\x9c9\x8b\xcc\xec\x8d\xb2N\x05I\xdd\x180lvI@\xca*\xa2\x98\x83\xf4\xechb\xc2j\x19\xd1\xb4}y\xd9r^\'_)\xa9\x00\x00@\x00IDAT\xf4w\xd0\xff\x03e[\xe6\x83\xe7\x1f\xbay\x84\xe89\xf80\xb6\xfe\x1c\xca\xf9\xa27\xd0\x1e\xb1\x9b}0\x04\x0c\x01C\xc0\x10\xa8%\x04h\xa1\x05\xfa4g\x92\x89>t\x18\xaf%$\xfc\xb6\xc6h\xbdr\xf8\xf7%\x8f\xfe\x8c\x0e\xc1Kp\x00^\x82\x90&,\x818\xf5\x85\x8b\xe4\xb4\x0b\x16\xcbo\xbd\xeb\x14\xd9\xb3eD\xee\xf9\xf16\xb9\xef\xa6\x9d\xb2\r\xf1\xed\xf2\xf0\x02T\xa1\xb7\x16\x8b")Ze\xe1\x19\xd1\xa7y$\xf8\xbe\x00}>\xf4\xdd\xd0=P^\x07OC7B\xd7C\x03o\xb0\x16\xd8\xbf}T\xf6n\x19\x93\x9ee-2\x0e2\x8b\xa4\x96Iq\x08\xf0\xd2L\x8d\xe5\xb1\x04\xb8G\x1a\xe1E\x99\x1e\xcfZ\x1c\xc0\xe2\xa0\xb3\xbd\xea\x1c\x01&\x86\xa2\x87\xcfi\x8d\x1d\xf2\x8a\xf6>\xe9G\xe2\x0f&\x0311\x04\x0c\x81\xca#@\xa3\xb2\xa7!\xd0\xf0\xd2s\xea\x04\xc7\xcb\x08=\x94\x9dS_\xaau\xb0\x86\xf7\xa9@\xfd\xd5\xbcp\xd4\xc3m\x11\xfay=\xf4%P^\xce4T\xf9\xdd|\x13\xf6\x9bd\xe8\x85\xd0K\xa0\xff\x03U\x8c\xf0\xd6\xc4\x100\x04\x0c\x01C\xa0\x16\x11\xe0\xcd\x9dOt\x02\x13.\xa9u$Z`%V\xbf \x12/\xcc,Le\xf2\x8a\x03\xbb\xc6\xe5\xc0\xceQ\xc4\x06LI\xef\xf2\x16y\xfd\xfbN\x95O|\xef%\xf2\x91\x7f\x7f\x91{\xbf\xf2\xc4.\xd7h\x1a\x9c\x1e\xf9\x87\xe9)<\x03# <\xdf\xe4\xe28\xa0\xff6\xf46\xe8K\xa1\xbc\x06\xc6\xa1$\x00)\xca\xd7y\x9f\x02x%\x16\x9c\xa4s\xe9t\xff\xf6\x11iF\xccEz\x00\x9a\x94\x86@\x161-\x93\xf0\x9e<\xed\x05\x0cEC\x0f\xcaH\\W\xa5u\xc2\xf66\x04\x02F@\x13\x7f|\xb4\xf7\x04\xc9\xe2^\xc3\xc5\xbf\xbc\xd9\x99\x18\x02\x86@\xe5\x11`&\xe0\x9e\xb8\xc7\xe3Da\xe9ms[\xd2\xc5l\xb6g\x02\xe5_\x0b^\xa8\x1b\x9f\x03\x0b\xf7\xe6\xea\xb9\x8e\x96\xdf\xd4r\x8fT\x87\x88\xe7\xa2\x00\xda\xc6J\xfe\xb1\xd3\x913\xb4*d\xfa\x15\xf6\x9b\x19\x81\x89\x85Y\xee\x00\xc1\xc4\x100\x04\x0c\x81ZF\x80\xc38\x89\x1f\xca\xdcH\x1f\xdf \x18\x85\xa7\x1c3\x96\xce\xad0\xafAQ|ud`2\x86\x98\x7f\xc8(\x8cap|8\x0b\x8f\xb6\x119\xb8g\x1c\x9eY\xdd\xf2[\xef\xd5<\x11\xfa=\xe8{\xa1\x94\xbb\xbc\x7f\xe1<\xe9\xf4\x93\x02\xca6\xc4T\xac7\x92\xd8\xc7-\xf4\x7f\x93\x88\x03\x18O6\xc8\xa9\xe7y\x04`\xe8\x15Z\x05\x86@\xc4\x11PO\xbfK[\xfb\xe4yM]\xb2\x1f1]\xfdij\xc4[n\xcd3\x04\xea\x0f\x01\x1a\x184.\xbac\x1e\x01\x18\x85\x1e6\xb5\xc6a\xaf\x91\xb7\xf0\r\xd5(4\xaa\xa6\xda\x00\xec\xc08%\x98L%|\xa9\xc6\x85\xc3!\x83\x0f\xc2_\x0c\xa5M|2\x94\x97q\xe4\x86\x92\xb8\xefL\xc0PC\x15\x12\xfehX\xdb\xb9\xd0\xdf\xf2\xdfG\x0e\x17\xb4\xcb\xc4\x100\x04\x0c\x01C\xa0H\x04\xf8\xc4\xeb ty\x91\xfb\xcf\xba\xdb\xc4X\xd6y\xbdU\x97\xe3\x9a\xb5\x99\x81\xed@B\x10l\x96+oh\xff\x84{6\x96h\x8aI\xdf1\xed\xf2\x96O\x9d\xed\x96\x0e\xdfw\xcbN\xf9\xe9\xf5\x1be\xe3\xfd\x07\x0e-Cq\xb1\x02\xe1\xa9R\xc1A\xfc\xe8>s\x00\xa7\x81\xc38\'\\\x12\xbc\x16\xfa](\xd7:7B\x03\x17\xf5\xf8c\x06\xdb\x1c<\xd9\xe2 RMJC\x80\xe4zz"\'\xabO\xf6\xbcL\xf3\xf4\xac\x84a\xce\xe59&\x86\xc0|C\x80w\x10\xf5\xfe{W\xf7J\x19\x9f\xcc\xd5\xed\xc3\xa7\xf9vn\xad\xbf\xb5\x8b\x00\xbdp\xbb\x90\t\x98\x12\x85\x91\xa9\t+\x0e\xccoi\x0e\xd7\x13O"4\x81\x87\x8f\x15\x10\x12\x80\xac\xa8R\x97\x8e\xda\xc2\xafC\x9d\xff\x04\xa5q\x159\xf2\x8f\x1e\x7f\x93\x93XE\xe3;\x13,Cl\xf2\x9d\x1b\x87\xd1\xd4\x8a\x88\xb2\xe7\x0c\x1b\xf4}(\xf1\xa9\xe49\xaaH\'\xad\x12C\xc0\x100\x04\xe6\x0b\x02\x9c?1\xf1C`\x92\x1a\xcbIj4\x07/\xb7\xf9G\xee\xc4\xe1\x15HR\x8bD\x17=\x03w?3\xec\xe2\xb4\x9d\xfb\xaa\x95\xf2\xa1\x7f\xbbP>\x06\xcf\xc0\x17\xbc\xf6\x18inO\xb8X\x81\xca\xd9\xe8\x13\xbd\xc0NB\xf1\x05\xd1\xf0\xa1\x91\xc5\xc1\xfc]\xd0\xcfC\xb9z.\x1c\xf1;\xfc4\x88P\xc6J\x9c\x87\x97\xc8\x9cq\xe5\xefjl0#+N\xec\x96\xbe\xd5m\xae\xbc\xf9B\xb6\xcf\x19<+\xa0\x0e\x11\xf0&\xa4\xafj[,g5v\xcb\x81|\x06.\x1b\xde\xb6:\xec\xacu\xc9\x10\x88<\x02\xfc\xf5\xe5\xf1\x17%\x0f\xc0\xe6V,\x01&\x85aR6\x02$\xa0\xe2I\x9a\x8c\xa1\x8b\x12\x80aW\xc4KU\xc9\xbf\xcb\xf0\xfe\x06(\xc9?^)\x15\xe9(\xea\x99U\x88;\x874\xcf|\x9e\x94ek\xbb\xe4\xcf\xbf\xfa|\xf9\xfc\xcf.\x95\xe7\xbdj\x95w|\xf8F\xa0N\xe8.D\x85/\x82\x12#\xdd\x86\xb7&\x86\x80!`\x08\x18\x02\xb5\x84\x80z\x00\xb2\xcd$\x828\xd4\x94\'\xbeq\x95\x82wR:\x95\xc3R\x01\xb0J\xa0\x95\xdc\xe0U^\x895}\x94#\xb7\xf0\x92\xc9L\xca\xfe\x9dcxr\x1a\x93%k:\xe4\x1d\x7f\xbb\x1e\x89C\xd6\xc9\x1d7n\x91\x1f\x7f\xe3Idu\xcd\x1cz\xa2\xc78\x81\xbaT\xb8\x82\x9d\xe79\xa7\xb1\xc33x\xba\xff\x1f\xff\x82\x17%<\x0f\xee\x1d\x97\x91\x83iI"\xa1J\x16\x89,\x8c\x08,\x1ek\xfe\x9e\xb2\x88C\xd9\xd6\x93\x94cO[\x80\xe5\xe7\xa3\x92/\xffW[|\xc5\xb6\xa7!\x101\x04x\xd9\xab\xf7\xdf{\xbbW\xcb@\x9e+\xb8\xec\xc7\x10\xb1\xd3d\xcd\x99g\x080\xf5\x19\x9f(\xb6\xc5"\xc3\xa1 \xe60\x1e\xba\x82\x014\xc6\xa2\xfc\x8b\x11\xceg.\xfcH\xf9%\x14}d\xa5\x08@^\x0e\xbcT?\x00\xfd,\xd4\x9f\xc5D\xe72a\xe6e\xae\xf2\xa0\xb4/h\x94\xd7\xbf\xf7T9\xefu\xc7\xb8\xcfC\xfd)\xf9\xed\x0f\x9c*\xf7\xdf\xbcCR\xe3p\xba\x80q\x18\xe2J\x10\x0e\xac\xc4\x8a?jz\x01\xfe\x04\xaax\xe1\xad\x89!`\x08\x18\x02\x86@-!\xc0\x01\xf0`\x10\rV_\xfd\xf1\xe14H-\xc4`B\xc2\x0c%|\x82(\xbfV\xcb \xb9\xa5X\x8c\x82\xec\xdb\xfd\xcc\x88\xb4v$\xe5\xd5\x97\x9d\x8c\'x/\x977}\xfc,Yzl\xbb\xeb\x9e\x92\x7fU\x8a\x11\xc8k\x81\xa7\x91\xffC\x97M\x0f\xef\x97\xc6fT\xa5\xeb\x82C\xaf\xb1\x8e*\x00l\xf40=\xfd\xfc\xa5\xaeSz\xdd\xd4Q\x0f\xad+\x86\xc0\xac\x080\xa9\x10\xe5\xb5\x1dK\xe4\xc4\xa6\x0e\x19\x9e\xc4\xc3\x84Y\x8f\xb2\x1d\x0c\x01C l\x04\xc8\x0ct\xc6\xbc%\xc0a\xd7UL\xf9\x8d\x08\xcb\xe2L\r\xbbA\x14\x03\xd7\xb3\xf7\x81e\xc8\xfbm\x85\xc2\xb6\x84M\x00r\xe0 \x91EB\xeb\x93\xd0\xbf\x81\xd2\xf6\xe5\xf6H\\!\xba*\xc8\x85x\x01\t\xf8\xda\xf7\x9c"W\xfd\xf8e\xf2\xa2\xdf_#\xa3\x83i\x19\xec\x9f\x90a\x02\xcc\x02\xdc\xa6Y\xbf\xaa\xd4\x9cB\xfb\x89I\xdb\xc2\xe7G\xaa\xd4\xd1\nT\xab\x93\x03\xaed\tQ\xd4\x8a!s\xac\xef\x83\xaeN\xcb%\xf9\xf7q\xe8G\xa0|\xcf\xed\xfa\x1d\xdeVI\\+\x0e\xc7\xf9;\xe7\x92\x15r\xc5\x0f_"\xaf\xfd\xf3S\x9c\' \xe7\r\xd9,\xc2\xe7`\xb5P\x1c\tY\x06\xf6L\xc8\xf9\xbf\xbdZV\x9e\xd4\xed\x1a\xac\xf6u\x88\xad\'V\xbc\x08\xde\xea\xd7Q}\xccB\xec\xac\x15m\x08\x18\x02\x86@\xbd"\xc0\x1b\xf9\xae ;\xc7\xa7P\xc3\x8e\x004\x83k:\\\xdd\xe0\x8d\x01<\x87\x81|?\x06\xf4QxMnx\xc5\n\x10\x81\x17\xcb\xdb\xffv\x83\xf4,nuO\xf3\x9c\xc1Z\x1d"p\xba\xa6\xcfy\xbb.\xf7}\xe67\xfb\xa52\xe1d\xe6\xdc\xe4\xe8\x15\x80_m\x0e\xcb\x80\xbbz\x9b\xb1\xac\xdc\xf3\x1e5+,z\xa7\xc9Z\x14\x1e\x02\x1a\xe7\xef\xc5-\xbd\x88\xfd\xd7\xe9g\xfe\rur\x1a^g\xacdC\xa0\xce\x10 a\xd4\xce\x8cU\x11\x90\xa6\x96\xb8sU\xf2\x1c\x96"\xd0\xa0\x1am\x82\xcfMU\xa2\xf5a\x993\xae\x0b\xe8\x00/O.\xf9\xbd\x1c\xaa\x84VXu\xa2\x8a\xe2\xc4\x91wl\x19\x0c\xff\xa5\xc7\xb4\xc9\xfb\xae}\xa1\xbc\xeb+\x1bd\xc1\x92V\xd9\xb7u\xc4\x85~\xa1g\xa0\xda\xd0,5\x83dzH\x03\'\x7f\xf0\x11\xdf\x0b\xd0%\x85+\xae\xbe2\xf7R\x9c\x98\rx5T\xf1+\xb38;\xcc\x100\x04\x0c\x01C\xa0\x1a\x08\xd0B\xdb\x16D\xc5$\xab\x18\xaf\x822:\xc0\xf8n(\x9a\x83\x99\xc9\x8c\x08\xf0)^\x1eq\x02\x0f\xecF\\<\xb8\xf6ox\xc5J\xf9\xe4\xff\xfc\x7f\xf6\xde\x03\xce\x8e\xab<\x1b\x7fwo\xd9\xde$\xadz\x97%Y\x92-\xcb\x96\x8d{\xc1\x166.1Np\x01\xdb`L1\x18\xbe\x90PB\r\xa1\x84\x84\x84\x00\x81\xcf8\x90\x90\x8fn\x08\x81\x10\xea\xdf@b\xb0\x01wc\xdcdY\xb6d\xc9\xb2\xea\xf6~\xfb\xee\xffy\xce\xccY]\xad\xef\xee\xde2s\xcb\xee{\xf6w\xee\xce\x9d;s\xca3\xe5\xbc\xe79o\xd9&7\xfc\xf5\x16ijC\x80^\x00\x9b\x8e\xed\x94\x85U\xc0\x8f\xd6\x11\xf7\x91\xfd#\xd2\xdb\x19\x95P]\xd0\xf4\xaf\x02\x9a^VML&\xe1\xcf\x08\xeb\xe4\'\x9c\xbd\xc0\xb4\x8b\xa4\xb2&E`\xb6 \x90t\x07\x97[\x10\xf9w\x08\x91\x7f\xcbAyc\xb6`\xaf\xfdT\x04\xa6B\x80Be\n\xca\xb8\rn\x14\xe0\xa9\x8e-\xc6o5\x08\xbaV\x8d\x85\xd4"\x98H\x16\xa3;\xb3\xa1\x0e?\x84\x19[&\xd5\xc4?\x85\xfcW\xc8\x96\xbc\xb2\xbf\x95\x06[\xd4\xce\x06\xd0\xf2\x87\xe9\xaawn\x94\x8f\xc1*\xe8\xc4s\xe6K/\xe6\x05\x9cOUc\x9e\x90)q\xfe\xd0\x0f9z\xe3\x99\xedr\xda\xa5K\x9dC\xd2U_3\x9dT\xd8>\xf3x\xa3\x08\xfa\x9f!\t\xa8I\x11P\x04\x14\x01E\xa0\x02\x11\xe0\xcb\xbc\x13\x99\x83"\xb7\x0b\xa3\xecX\x02R\xcf\xa1\x88\x8c\xf9;\x089\x15\xcd\x90O.\x94se\x8f\x02@\xf7\xa1\x11\\\x8d1\xb9\xe4\xe6\xe3\xe4\xef\x7fq\xb1\\\xfa\xa6\xf5Fx\xb5\x8e\x80\xado\x90\x8a\xed\xba{\x87u\x83\x00\xec\xd87"fu\xde\xb2\x82\x15\xdb\xa9\xe27\x9c\x9c\x07\t\xf7\xf5\xa7\xb5\x9b\xca\x15\xc2\xe2_\x03\xad\xb14\x08\xb8\xc3\x8c\x9c\x10n\x92\xd3k[\xa5\xdfD\xfe-M[\xb4VE\xc0K\x048<2S +L\x18\xf3\xb2U\xb9\x97\x85eK\x90\x1aGI\x8b\xa3[\xb9\x97\x95\xff\x19N\xad\xcdm\xb5\xc6\x9d\n\x17R5\x15\x8a@i\xaed\x81\xadf\xa3\x99y\x07|\x06\xf9\x03\xc8eA\xfe\x19\xa5\t\xb4\x8a\r[{\xf2\xdcqs\xdf\xd8pRz:\xa2\xd8\x0b\x8d\xbfi\x17w\xab$\xd2\x9f\x90k\xdes\x02\x8eGY$\x12\xfd\xbdL\x16\xcb7\xa2:\xfa\x05\xe4\xebJ\x93"\xa0\x08(\x02\x8a@\x05!\xc0\xb9T7r\x1f\xb2}\xa9\xe7\xdf|w\x188\xb0k@R\tD\xa5\x82\xdf\x15M\xb9!@\x82/\x06\xdf\x80$\xc7(@\xbf\xf6C\'\xc9\xdf\xfe\xfc\x15r\xf2\xcb\x9d\x80\x0f\xa9\x14\x04\xeb\n&W\xb9\no\xfd\x94t\xed\x1f\x92Zj\x00\xaa\xf8\x90\xdbM\x82\xa3\xab v\x8d\x0c$e\xc9\x9af\xf8\xdbt\xc8c\x8bk\xce\x85\xe9\t\x8a@\x85 \x90>H\xdd\xd2\xb2\x0c\xabVU\x92\xa8h\xaa\xa4B\x80\xd7f\xfa\x86\x00\x87\xbf\x04\xe6\xd0\xcc\xbc\xbf\xc3\xb8\xabk\x909\xb3\xe6\xbd\xcd\xfdd+*+\xc1O\x19zS_\xcaH\xc0\x04\x13\xa9\xb1\r\x88\x92D!\xcb\xa2i\xb6!\xc0\xbb\x80\x99\x8f\xd9\'\x90\xdf\x83\\\x16\xe4\x1f\xe55\xbb\xb0\x7f5\xc8\xbb\xf7\x7f\xfb\x02\x99\xb7\xb4Q\xba\xf6\r\x8f\x9b\xfb\xa2\xad\xd3&\x9a\x04\x0f\xc3\xaf\xf8\x82\x95Mr\xc9Mk\xcd\xf1\xd6\x1ak\xda\x93\xf3;\x80\x13;b\xba\x05\xf9\x1cw[\'{\x00B\x93"\xa0\x08(\x02\x95\x82\x00_\xda]n.\xb8\xcdV\xbe\xda\xbf\xb3_F\xe9\xa8V\x87\x84\xbc0%nT\xedODS\xc6\xf7\x07#}\xbd\xf3_\xcf\x92\xffs\xfb\x99\xd2\xb6\xb0n\xdc\x94\xc5\xe7A>\xaf\xb6gs\x92\xbd/\xf6l\'\xef\x8c\xa4\xf7\x89\x83C\x0e\x9f\xd5&\x10HR\x16\x1d\xd7,\x8b\xd7\xb6\x983-\xae9\x14\xa3\x87*\x02\x15\x85\x00}\xffq\x9c\x99\x1f\xa8\x91\x97\xd7\xcd\x93^h\xff\x91h\xd0\xa4\x08T\x1a\x02)\xdc\xc9\xbc\x97\x1b\xf0\xe2^\x16\xac\x95\xb5\xa1\x06i\xab\x0e\x81\x9d \xe17*uX\xe5Y\x13\xaa\x93\xe3\x82\xf52\x07\xfe\x1eH\x08\xf2\x9cJ \x03\xd9\xaf*,\xf65W1\xa0ki\x92}+4\xd2\x95\n\x17Mu\xa1\xb1\xe0\x0b\xe1z\xf9)\xb8\x9ci\n\xb0\x97n\x9a\xc3\xb2\xfa\xd9j\xa8}\x14G\x7f\x04\xb9\xe4\xe4\x9f]\xa8\xa5\xa6\xde\xd2u-\xc6\xe5\xcf\x95o\xdf\x80\xe8\xbe1\x19\xee\x89\x19s\xdf|\xdcg2:\xf0+@\x00\x86\x10\xf1z\x94\x8a\x02\xfe\xca\xd5\xf65\xf4F`j\x1e\xf7\xac\xae\x86\x1e\xa4\x08(\x02\x8a\x80"P\x16\x080\xda\x16\t@O"\x01[\x1f+\xfb\x9f\x85\x06 \x86\x87\xea \x06"\xf8*\xd3\x94\'\x02\x18\xc0I\xf2\r\xd1\x07\xc8\xa0\xc8)\x17.\x92\x13\xceZ \xff}\xdb\xd3\xf2\xcb\xaf>kV\x0f\xa9\rhq\xcf\xb3\x96\xa2\x9ff\xcdU\xf7<\xd5+Ih\x8a\x06TS4\xf7k\xc0\xf9\x0c\x1c@\xd3\xd7\xe6\x9a\xcdsd\xdf\xd3}\xb8\x1fr/F\xcfP\x04*\t\x01\x1b\xf9\xf7O\x1a\xe6K{ ,\xbb\x93#\xd0\x98\xf2r\xbeXIhh[+\x11\x01\xe75=&s\xabk\xa4\x06\xe3\xf7^\xdc\xc3w\x0c\x1c\x92\xfb\xa3=r(\x197&\xed\x9cQ\xd7a\x06??X#\xeb\xc2\rr\t\xc8\xee\xd3jZ\xa5\x1d\x1au\x03c\t\x19\x18MI\xb0\x8c\xef{\xb6\x9f\xb2\x0b\xc9MR.|B\xb9\xaf\xa8\x89\x04\x08\xc0n\x9aSc\xc8\x90Q\x98\x1aT\xebjcA\x97\xa0\xe8\xd7\xb0\xa0\xd6\xe2\x11\x11I"\xdf\x8a\xfc1d>z\xbc+J6`\xf0\x99\xb0Z\x7f\xdb^w\x9c\\\xf3\xde\x13\x8cEL\xe7\x8b\xc3\x86\xa4\x9e\xde\xdc\x17\xad\xcf\x90X\xee\xc8\x00\xb5\x00\x1b\xe4\xe5\xafY#\xbf\xfa\xc6s\x19\x8e\xf2t\x97\xc5\xf0|\x94\xba\x18\xf9 \xb2\xfb\xc4yZ\x8f\x16\xa6\x08(\x02\x8a\x80"\xe0\x03\x02\x1c \xe9h\xc2F\x02.l|w\xcfN\xc4S2\xd0\x15\x91\x86\x96\x90D\xe3\x14\x04}h\xf9,*\xd2\n\x05=G\xa2\xf0\x99\x17\x94\x1b?|\x92l9o\xa1|\xe5\x83\x8f\xc0\xdf"|\x06"qU\xd1:\x11.{h\\g<\xcf?\xd6\xe3\x10\xc5\xb8?\x94\xbc\xca\xfd\xaaq\x85w\x04\xa6\x1f\x1b\xcf\x9a/\xbf\xf9\x8f\xe7+\xe7\xfa\xe7\xdeU=C\x110\x08X\x8e\xfb\x86\xa6\xc5&\xf2o9\x93 z\xc9\x14\x81\x89\x08P\x83\xaf\x01\x9a}m\xd5ay$\xd6\'_\xee\xdf\'\xbf\x18\xa1\x1b\xe6\xccio2"\x0fE\xfb\xe4\xdb\x03\x07\xa4\x19A5\xde\xd4\xb4L^\xdb\xb4H\x96Cc\x90d!\xcb+G\xf1\xca\x88\x82\xf8h\xa4\xaf\x8a\x12\xa7\x16\xe3\x03\x10|Ea\xd2m\x89{Q\x1e\xd5\x97\xe3\xbd6\t2\x96\xfc\xbb\x01\xbf\xdf\x8e\xcc\xabO\xd2\xca\x12W\xd8,~"\xf9\x17\xaa\r\xc8[\xff\xe949\xfd\x8ae\xd2w$\x02K\x1f\x10\xd3\xd3\xfa\xf9\x9b\xbe\xad\x9c\x03\xf4w\xc7\xe4\x95o\\k\x08@\xe3Z\x87\xbd\xf5\xe7\xbe\xe7\xad@-\xc0\x15\xc8\xe7!\x7f\x0f\x99\xfb\xec\x10\x8dMM\x8a\x80"\xa0\x08(\x02\xe5\x8a\x80\x1d\xcf\x9fq\x1bh\xbf\x17\xdc\xde\xbd\xdb{M\x84Wu\xf0V0\x94\xe3\x05\xd0?`\x1cf\xc1\x1dX-\\\x7f\xda<\xf9$\xa2\x05_t\xc3\x1a\xf3;\xc9?/\x84\x88\xf1\xca|\xdc\xb0\xce\xb8\xa3\xc3\t\x13\xc1,\x18\x0e*\x01\x98\x07\xde\xd5\xd0\x9cL\xc0Y\xf4\xbaS\xe6\x1d=\xbb\xa4\xe2\xed\xd1f\xe8\x96"\xe05\x02\xd6\xd4\xf7\xec\xbaV\x98F\xd6\xcb0\xb4\xa0<\x1b\xb0\xbcn\xac\x96\xa7\x08L@\x80\xda\xab\xf3@\xfc\xd1\xd3\xdf{\xbav\xc8U\x87\xfe0N\xfe\xf1\xb5M2\x9b\x99\xf7\xb9\xcd\xf6;\x8b\x1aH%\xe5\x9f\xfb\xf6\xc8\xb6\x03\x0f\xcb7\x06\xf7\xcb\xbc@H\x1a\xa1\x11h\xb5b\'TW\xf2\xaf\xf4a\xdc\x18\xb0\x04`\xf1\x07&\xfbnh\x98\x03\x1f\x80\xd4\xbc\xf2\x87\x08)9\xce\xda\x80\x97 \xc0\x9b\x8e\x9a\x7f\x97 \xff[\xda\xaf\xc5\xbf\tQy\xba\xcb\xee\xe3\xb6 \xd0\x07\xe4\xf6\xad\x17/5r|<\x06S]\x0f\xc8?\xf6\x91\x8a\x16Q\xc8\x83s\x167\xc8E7\x1eg\xba\xcd\xfb\xbe\x08\xe9\xcfP\x07\x9f.k\x16\\\x84*\xb5\nE@\x11P\x04\x14\x81B\x10\xb02\xd2\xd3n!\x05\x8f\x16\xd6\xbf\xc5s\x8ftK}cX\xf9\xbfB\xaeN\x86s9\xc8\x93\xe8\xeb\xe9\x8c\xc2\xcf\x87\xc8\x1b>q\n\x9c\x07\x9fg\xcc\\\xe8\xf7\x83)]\xe0\xc8PDY\xed\xda\xfbT\x0f\x88btJ#\x81\xe4u]\x120\xb1\xafo\r\xcb\x92\xb5M\xe6\xfc\x82\x1f\xe0\xbcZ\xa1\')\x02\xfe#`\xe7\xef\xd76.\xc1;\xae\x1a3@\xf4\xdb\x19\x18\x1a\xe8U\x8a\x8f\xc4\xe5\x82kW\x99\xe2\x8c/@\xffzn[\x7f)*[\x88\\2\x9c\xbd\xc2N\xcbQ\x04\x14\x01E`\xb6 `_\xe0;\xd0a\xcaK\x05\x0f\x15v@{\xfe\xc9\x1e\x94x4\xe2\xebl\x01\xb4X\xfd4\xd1\x82]m\xc0u\'\xcf3\x91\x82\xb7\\\xe0D\n\xa6\x86]\xb9\x93\x80\x96(&\x01X[\xaf\x91\x80\xf3\xbdoR \x00a\x19&\xc7\xbfl\xbe)\xa2R\xb4@\xf3\xed\xaf\x9e7;\x11 Q\xc2\x90\t\r\xd0x:\xbd\xa6E\x06\x92\t\x90!v\xf8\x9a\x9d\x98h\xaf+\x03\x01\xde\xb7KA\xfe\xfd|\xb8C\xfe\xec\xf0\xa3r8\tG\xff\xb8\x9f)l\xe5\xa2\xbd\xc7\xd9\xb5c\xf2\xeb\x88i\xbf\x1e\xe9\x96\x8b\x0f>$O&\x06e1\xca/7\x12\xd0\xd1\x00t\x08\xc0\xa2?\xa9\x80h\xcc]\x10\xadk\x08I\x12\xe3d\xc1\xc2me\xdcn\xbe\xb4\x92\xd8Q\xae\xa4\xbc\xe1c\xe2-\xce\x94@\xb6\xdbfG\x96\x1f\xbc\xcdH\xfe\x1d\x8f\xfc\x03d\nE\x86\x8b\xc6\xff\xa2\'j\xdfY\xb7\xcb\x04\x0b1\xea\xff\xf6\n\xfb\xd9\x80|\xcavo\x89\xce\x17G\xd0\xee\x88\x04k\xaa\xcd\ns>E\xcd\xe6sH\xa4F\x87\x92\xb2p\x95c\x02\xcc\x15g\xab]9\x9bq\xd1\xbe\xcf,\x04\xacv\xd3\xd5\x8d\x8b\xa4?\x95\xc0\\\xde\xe7I\xd4\xcc\x82O{S\x02\x04H\xc6\xd1<\x97\xc1>n\x81\xb9.\x13I;\xaf\xa4!\x96O\x93`\xa6\x9b\x8e<.w\rw\x1b\xb2\xd1>+\xe6\x87\x12}\x8c\xa2\x97F\x03\xb0:T\xa2\x16\xb8\xef\x07\xfc\xab\x83+\x9a\x14\x02\xd3\x95\xbbUD\x89\x80\xca\xbaZj\x00&\x12^\xdd\xbdSVK\xff}\xb9\xccCx\xb1y|\r\xf2w\x91OA&1U\x92\x95e\xdeg\x94\xc3\x96\xack\x96O\xfcl\x9b\xac?c>\x94!\x10\xac\xcf\'\x93_\xf4\xf3\x98\xc4\x05\xe1!h\x01n8\xbd]\x16\xach0\xbf\xf9(\x13\xda\x19\xc6i\xa8\x88*\x87%#]\x8f\x01A\xbf(\x02\x8a\x80"\xa0\x08L\x89\x00_\xde\x1c<9\xaa?\xe4\x1e\x99\xcb\xc0\xeb\x9e\x92\xf6\x0fgW\x07Y\xa4\xc8\x0bO\xf6I0\x84*\xec\x10\x91v\x98nz\x8b\x00\xb5\xfdF!\xa1u\x1d\x18\x96S\xa0\xfa\xff\xf1\x9f\xbcB\x96oh)[\xd7z\xf6&\xeb>8$=\x07G$\x8c\xe8\xc6c\xaa\xbe\x96\xf3MQ\x055\xd0\x08\x82\xa9,^\xdd,\x8bV\xd1\x12C\x15\x1dr\x06QO(k\x04\x9c\xd1\x04\xce\x9c`\xfe{v\xdd\x1c\x19\xc4{\xc2\xd7\x99\x9d}9\x955*\xda\xb8rF\x80\xb3\xe0\xe6\xea\xa0t\xc1_\xdf\xcdG\x9e4Mu\xc8\xbf\xa9o\xaej\xbc\xcfC\xa1\x90\x04\x83A\x93\xab\xa6a\xadH\xf6Y\xf1\xea\r\x1d\x8f\xcb\xa3\xf01\xb80P\x83Y\xf8\xd4\xf5\x14\x03;Z\x1e\x96J\x03\xd0\xe5E\xa5\xa19,\x8dmaIRsm\x1a,\x8b\x81IE\xd7\x81\xebi\xfdL\xfb\xdc\x8f8\xca\xcf\xf6\x06\xe6\xf0\xc0\xe1\x80\xc7\x7f\x0e\xf9bd\x12\x88\xbe\x0e\x11(\x7f\xd2D\xa2t\xc3\x19\xed\xf2\xc1o] \xf3\x16\xd7I/\xe4\xdbb[\xe3\xa4\x92\xd04\x0cU\xc9\xf9\xd7\xad6\xed$H>%\x16\xcd\xd7\xddJ\xe4S\x91\x99\xec+\xc9\xf9\xa6\x9f\x8a\x80"\xa0\x08(\x02e\x87\x00_\xd4v\xa0|\xd0m]\xb6\x03\xef\xa4\x9d\xb1\xf1\x1c\x1e\xbf\xfb\xa0$\xa1\xfd\x17\xc0\x8a\x94\xa6\xe2 @A\xa3\xfb\xc0\x88\xb4\xb5\xd7\xc8_\xff\xc7\x85r\xea%\xb4\x84p\x93\x8fR\x80\xad"\xdb\xffFS\rRz*9&\xdd\x87#R\x0bSq{\xdfd[\x86\x1e\xe7\xcciR\xf1Qih\r\xc9\xd2\xf5\xad\n\x89"0\xe3\x10\xb0ZNW6,\x90\x1aL\xe2\xe3f\xbe\xe1c7\xcb\xe8=\xe9c/\xb5h\x1f\x11`\xd8\x89Z\x88V\xb7t>)} \x01y\x0fOg\x9e\x1b@\xc4\xdcQ\x90\xdb\x89D\x02>\xeb\x92&\xd3\xa2\x82\xa4\xe0T\x89\xab\xb7\xf6\x19y\xed\x91?\xca\xbedD\xe6B\xf3\xae\x94$ \x85Hj\x006\xb8m/6\xf7f\x1f\xe1\x86\x96\x90\xd47\x03\x8b\x045\x00\xed\xde\xa9\xd0\xd4\xdf2"\x00\xe8Hl\x8d\x02\xc7"\xa4\\L\x80\xf9p\x90\xf0{\x17\xf2\xdb\xddm;\xa7\xc1\xd7"\xa5\xb4[\xeb\xacW\xad\x90\xf7\xfe\xbfs\x10\xddW\xa4\xaf\x0b\xfe\xfe\\\x85\x88"\xb5\xc4\xad\xa6JbC)9\x89~\xc1\xd16\x9a#\xfb\xa4\x05\xc8\x9e\xdb9\xe3\xd9n\xe5EQ\x13-.\x9eZ\x9b"\xa0\x08(\x023\x0b\x01\x0e\x9e\xf6\xe5\xbd\x13\xdb1dzm\xb6\xfb\xb0\x99G\xa2\xa4\x80\xf4\xf4\x03\x9d\x12CX\xfa@xj\x016\x8f\x1a\xf4\x94)\x10\xa0\xc01\xdc\x17\x97\x18\xfc\x8d\xfc\xf9mg\xcaeo^\xe7\x1c\x8d\xcbRN20\x83W0\x1dzn\x00+\xa4\xc5\x97\xd9\x9c\xdag\xc0\'D\xb0(\x9e\xb3u\xa7\xce5\x9d\xb1f\xf83\xa0g\xda\x05E\xc0\xcc\xee\x08\xc3Eu\xf3\x109\x91\xea\xea\x85\rO\n\xa9"\xe0\'\x02$\xde\x16@\x0b\xef\xb6\xfe\xbd\xf2Xt\x00Ua\xa1k\x8a{\xd6\x12S\xa9TJ\xda\xda\xda\xe4U\xafz\x95\\\x7f\xfd\xf5\xb2u\xebV\xd3L\x92\x82L\xf68\xf3e\xc2\x07\xcb\'\xe1\x16\x19M\xc9\xad\x1d\xdbe\x0c\x03}M\x89\x15q\x18\xb6\xa7\xbeTQ\x80]\x91\xb3\xa1\xb5F\x9a\x90\x930]-\'\xd9g\xc2\xe5\xab\x80\xaf\x00\x14r}\xa2x>\x00\xb3\xc1\x84B#\x19\xc9+\x90\xff\t\x99\x03\x03\xf7\x91\x94*Z2\xf7\x95;$]\xf6\x96\xf5\xf2\xd6\xcf\xbcLF\x06S\xf0\xc3\x87\xb9\x8f\xdf\xfe\xfe&\xe9%\x15\x01\x86\x10ld\xf9\x86V\xd9x\xa6\x1b \xce\xbfi\x98-\x99\xda\x97\xc4_\t\xc0I\xae\x8b\xeeV\x04\x14\x01E\xa0\\\x10\xe0\x8b\xdb\xbe\xac\x9f\xc763\x93\xdd\xe7|\xcb\xf1\xd3\xe5\xff\xccY\xbb\xfe\x88(\xaf0\xef\x1cU?\x809\xa2X\xd8\xe1U\x10\x00\xe2\x88\x12\xdc\xd7\x19\x95\xd7|\xe8$\xb9\xe1\xc3[L\x81\xbc6\xe5"\x08[\x8b\xdf\xbd;\xfad\x14&\x0bU\xaa)\x9a\xd7E\xa7\x19p\x14\xc2\xe6\xba\xd3\xda\xc7\xafq^\x05\xe9I\x8a@\x99!@\xb3I\xce\xebZ\xa0\xd1\xb49\xdc(\xbd\xd0\x8c\xd2\xe8\xbfev\x91\xb49\xe3\x08\x90\x88k\xc3\xbd\xfatbX>\xd7\xb7\xc7\xec\x87w\xdb\xf1\xdf\'n\x90\xd4\xb3\x0b6\x1f\xfe\xf0\x87\xe5\xe0\xc1\x83\xf2\xa3\x1f\xfdH\xee\xb8\xe3\x0ey\xe4\x91Gd\xfb\xf6\xedr\xf1\xc5\x9cW\x93\x7f\x01\xc97\xc5\xe0\xcd\xb0"|^\xb6\xc7\x07\xe5o{\x9e3$d\xfe\xa1F&\xb64\xf7\xef\xecu\x8d\x1b\xed+]&\xcc\xbd\xa4\xfc\xcfh\x9dWc\xfc\x0b[Y#\xff\x92\xf4L^\xc3\x94\x95\xe3\x0b\x9a!L\x8b%5\xfa\xa6K\x9c\xbb\x90\xfc[\x8b\xfcUd\x12O\xbc\xe5\x8aN\xfe\xd9{\xfb5\x1f\xdc,\xaf\xfd\xf0f\xe9\xed\x18\x91\x04\x16\xdf\xa7zV\xd1N\xdf\x13\x83\xb6\xb0\x1dg\\\xb1\xdc\xd4\xe5c0\x10K\x002\x02\xe1\x1a\xb7cv\x9f\xef\xfd\xd4\n\x14\x01E@\x11P\x04rG\xc0\xbe\xa49xv!\xefv\x8b\x98\\b\xcd\xb2\x0e\xabn\xfe\xd8\xdd\x87\xa4\xa1%\xac\xe6\x9dY\xe2\xe6\xe5aF[\x06&\xb6\xf4\x0bx)\xb4\x00o\xc1\xca$\x13\x05\x16{}\xbc\xac/\xd7\xb2\xc6\\Qm\xefS}0\x15\x87\xe3\x10{7\xe6Z\xd0,?\x9e\xb8%`\x06\xbc\x08\x81@\xe8K\x91i\x8ay\xe2,GK\xbb_I\x08\xd8W\xc2\xd6\x9afY\x19n\x90\x11\xcc\xf9\xec\xbeJ\xea\x87\xb6uv @S\\\xfa\xaa\xfc\x9b\x1e\x1aT\xd0\x19\xd6\xe4A?\xd2\xc9\xbf_\xfe\xf2\x97\xf2\xc9O~Rjkk\x8d\xe9/\xcd\x80\x996n\xdc(\xfc\xed\x0b_\xf8\x82\xf9>\x9dI\xb0%\xfc\xbe5p@~2|D\xe6#\x02qr\n\x02\xd2\x14\xea\xd3\x07\xac\x0e\xa1\x85\xe8\x0c\xf2\xfe\xf2E/\xed\x80u\'2gq=H\x90b\xd7\xfe\xd2\xf6\xcc\x88=\x10*\xe2\x91l\xb8\xb9\x82{K\x1f\x80S%K\xf21\xc2\xc5\xd7\x91\xb9\xf2\xc9\x8b\\\xd4\xa1\x812\xb4%\xffn\xfe\xc4V\xb9\xfc\x96\xe3\x85A\xed\xc6\x00\x91\xcb{\xa3I\xa5K\xd5h\x04-\x81N\xbep!\x1a\x01\xc8\n\x9e\xd5M\xd9\x17\x96N\xe1\xf3\x02\xf7({\x8d\xdc\xaf\xfaO\x11P\x04\x14\x01E\xa0\x9c\x10\xe0\x80\xc9\x17\xb7}Y?\xe06\xae\xe0\x81\xd4\x0e\x80\xdb\xef=\x82A(&A\x98\x01[\xa1\xac\x9c\x00\x98\xf1m\xc1\x95\xa4iP\xc7\xbe!9\xfb\xaa\x95\xf2\xce/\x9d\xe5\xc8\x02\xfe\xf9\x04\xc9\x1a\xd2\xb1\x94#\x91\x1cz~@\x92\xd1$\x9c\x9e\xa3\xb1*\xabg\x8d_\xfa\x81\xa3\xc9Q\x10\xa8U\xb2\xee\xe49fw\xa9W\x9f\xd3\xdb\xa6\xdb\x8a@\xbe\x08X\xd3\xc9W\xd4\xb7K$\x95\xc4\x9b\xcc\xdfYL\xbe\xed\xd4\xf3\x14\x01\xde\xab\xed\x88\xfa\xfb\x8b\xe1.\xb9?\xd2g\x00\x99\xcc\\=\x9d\xfc\xbb\xf3\xce;\x8d\x96\x1fM}\x99\x19\x00\x84\x81@H\xf6Y"\xf0\x9d\xef|\xa7\xfc\xecg?s\xca\xc41\x93\xbd\xdf\xf9tX\xe1\xed=\x9d;\xa4;\x15\x97&\x04#)\xc5\xb0\xca\xbe\x87\xe8\x08\r\x89\xc4\xa4\x152\xcd\x0e\xbf?\\ff.\x08@5\xff-\x1cl.2\xd2osl\x84Jw\xbeqI\xf6\xe5\x1eq[\x9c\xe9\x96\xe1>f\xde\xd2d\xc5!\xd0\x1aM@{\xdb\xe3\xab\xff\xc9<\xbfd\xb8\x91\xde\xf6\xd9\xd3\xe5\xc2\x1b\xd7H\'dl\xd3\xe0\xa2\xb6d\x8a\xbe\xa2\x1dI,\x0c\xd7#\x10\xce\xc9\x17\xc1\x17 \x92\x8f&\xc9\xf6\x15s\xa6\xdb\xa2L\xd7\xce\xfdI\xff)\x02\x8a\x80"\xa0\x08\x94\x1a\x01;T\xd9\x97\xf7\xaf\xd0\xa0t\x192\xef\xf6Yr\xa7\xe3\x85!y\xfe\x89^Db\xabA\x94Z[M\xde\xc5\xea\x89y"\xc0\xd5\xca\xae\xfdC\xb2\xf5\xe2\xc5\xf2\xde\xaf\x9ek|iQ\xa0#iT\x0e\xe9\xc0\xaeA\t\xd5V\x97d\xa2R\x0e\xfd/\xb4\r4\xb1\xa7\xaf\xcd\xb5\xae\x19\xf0\xf8,\xb0\xd0\x82\xf5|E\xa0\x84\x08\xd8\x19\xe1\xf9\x88\xfe;\x04]\xa6*\xbd\xb1Kx5\xb4\xea\xc9\x10\xa0d\x13\xc2\xbd\x99\x80\xd9\xdd?\xf6\xee2\x879\xe6\xeb\x99\xcf\xb0f\xbf\xb7\xdf~\xbb\xbc\xf2\x95\xaf\x84i\xa5c2\x98\x1e\xf0\x83$\x03\x89@&\x12\x83\x97_~\xb9\x90,d\x9a\xca\x1c\x98m\xe1\xa2\xdf0x\x91\x8f\xf7<+\xadU!|\xb3O\x929\xbd(\x1f$\xfd\xc2\xaexQ\xec\xda\xadf\xd6\xbc\xc5\rn\x00\x90\xa2tyFW\xc2k\x18\x8b\x16E\x86\x1f\x99\x02H\xceY\xd8\x88\xb7!\xbf\t\x99\x8c\xa4\x9d\xc7`\xd3\xff\xe4h\xfe9w\xf4\xad\xff|\xba\x9c\xfd\xa7+\xa4\x13\xb2u9X\xd5L\xec}\n\x0b\xc3AD\x03>\xe5"\'\x18\xa0\xcbYN<\xcc\xcb\xef\x9bPX-2UE\xcbcr\xe1e\xef\xb4,E@\x11P\x04f\x08\x02v\xe0\xb4\xa3\xfa\x13\xe8\xd7\x0bn\xdf\n\x92\xd9(\x80\xd1\x11-\xd3\x8e\x87:\x8dv\x97\x8e\x06.\xb2%\xfa\xc7\xebA\x13\x85\x13\xcfY \xef\xfb\xe6\xf9f5\xd0\xc7\xe8`Y\xf5\xd2\x9a\xaa\xee\xd9\xde#\xe1\xda V\x99\xed\xad\x98\xd5\xe9z\x90\x8b\x80\xe1\xd6A\x02\xae\xdc\xd0b\xf6\x8c\xc1\xf4[\xc5/\xbd=*\x19\x01;8\xad\n\xd6\xc9\xfc`Xbx7\xd8}\x95\xdc/m\xfb\xccC\x80\xdan\xf3\x82!\xf9\xf9P\x87\xecJ\x8c\xe0\xd5;y\xd4_\xab\xbdw\xd5UW\xc9\xdb\xdf\xce\xc0\xa5\xd4\xcc\x81\xf1\xb0\x1d\x0c3\xc0c\x89A\x92\x85_\xf9\xcaW\xcc\x11\x96D\xccp8v9\xe2\xdbO\x86;\xe4\xeeH\xb7\xcc\xaf\xae\x01SR\x90H\x97\xb9\x9aI\xf6R\xd6#\xd9\x10,\xb1_\x0fc\x02\x8c\x00 ea\x939\tV\x15\xb3\x1b\x174\x0e_\xc3EH\x93\x11\x80|\xfd\x93\xf0\xa3\xd6\xdf?#\xf3\x86\xe6\xbe\xa2M-\xf8\x88r\xe1\x9c\xe9\xd6/\x9c!g]\xb5B:^\x04\xf97\xc5\xb3k\x0e.\xd1\x07-\xb1F\x10\rx\xf5\xe66CP\xb2\xed>\x11\x95vh\xa6OFf&\xbb\xcf\xf9\xa6\x9f\x8a\x80"\xa0\x08(\x02e\x83\xc0\xc4\x174\xa3\x00\xff\xc6m]\xc1L\x8c]\x85}\xf0g\xfb\xe0\xe3\r\x1aJ4\xf1\xd4TR\x04h\x02\xd0u`D\xd6\x9f\xde.\xef\xfd\xfa\xb9\xa6-F((\x95\x00\xe3\xd6\xbb\x07Z\xa2\xb5\x8dp!\xe2\xc8V%\xc5\xa8\x12+\xa7\xa0\x17\x19NI\xfb\xca&\t\xd1\xdc\x1e\x9d\xe0$T\x93"P\xa9\x08X\r\xaa\x8b`\xfek\xb4\xab*\xb5#\xda\xee\x19\x8f\x00u\xecR\x98\\\x7f\xa1\x7f\xaf\xe9\xebdo^\x12y$\xee\xa8\xd9\xf7\xedo\x7f\xdb\x1ck\xa3\xfcf\x0b\xd2\x9b\xdf\xfcf\xb9\xf9\xe6\x9b\x9dz&\x19\xb7\xf9\xfe\xb7\xcf\xcf\xc7{vI\n\x9a\x89|\x86\x8a\x99(@\x86K<\x06\xcd[T+)\x98Aj*\x10\x01\x12_\xb8\x96\xf1\x91\xb8S\x90\xbfr\x9a%\x00\xd3\x1f#\xde\xbc\xac\x95\xb6\xac_G\xa6\x96\x99#\xe6`\xa3\x18\x89$\x9f\x9d\xd3\xbc\xfd\xf3\xa7\xcb\x19\x97/\xc5\x82\xfaP\xd9X\xd1d\xc2\x80\xef\x9b\xc8`B\x96\xack\x96\xe5\x1b[\xcd!>q\xf2\xbcV$gY\xc9q\xa6\xa2"\x12\xb3n}\xfaO\x11P\x04\x14\x01E K\x04\xd2%B\xc7Y\x8b\xc8\xdd\xee\xb9\x05\x0f\xf1v\xa5\xec\xf0\x9e!\xd9\xbf\xa3_j\xebC\xc6\x94%\xcb\xb6\xe9a>!@M\xc0\x9e\x83#\xb2\xf1\x8c\xf9\xf0\tx\xb6\xa9e*\x93"\x9f\x9aa\x8a\xb5\xbe"\x0f\xed\x194\xce\xba\x8d\xa6C\xc1w\x9e\x9f-.\xcf\xb2\xab\x11A9\x06\x07\xdd\x0b\x965\xca\xfce\xf4\x8d\r\xe9\xcb>\xd1\xe5\xd9dm\x95"0)\x02\x9cM\xd8\xe0\x05g\xd46\xe3f\x1e\x83\xdd\x97N\xe4\'\x05L\x7f(\x19\x02)\xdc\x97\xad\xf0\xfd\xf7\xbbX\xaf\xec\x81\xf6\x1f\xd3d\xbe\xff,\xd9\xf7\xc5/~Q\x1a\x1a`\x9e\n\xd3_\xab\xdd\x97M\x07\xec\xf9_\xfd\xeaWe\xd5\xaaU\x86L\x9c\xec|\xb6\x81\xcf\xd1s\x89!\xf9\xee\xe0ah\xd1\xd6\x8c?S\xd9\xd4U\xc81\xac7\xdd\x07`!e\xe5z\xae\xe5Dk\xea\x83R\xd7\x0c\xcdG(\xad\xf9Dz\xe4\xda\xb4\x8a=\x9e\xd7\x93*\x9d\xd1\x88}\x07\xfb"\xa4\xd9B-\x01\x98\x8e\x17\x9b\xc0\xdf\xbf\x84L\r\xb3\xa2\x9a\xfe\xf2\x9e\xb2\x1a\xb7o\xfe\xd4V9\xf3\xca\xe5\xd2\x8d\x85\xf4r\xd5\xfc\x03>NB\xbb\xe9\x1f:\x18\xaa\x96\xf5\xa7\xcc5\xfbh\xf5\xe3S\xb2\x053\x1a0\x93\xbdY\x9co\xfa\xa9\x08(\x02\x8a\x80"P6\x08\xa4\x13\x80\xb6Q\x8f`\xa3\x17\x99\x11\x9d\xec\x0b\xdd\xfe\x96\xf3\x7f\xabn~\xf7\x0f\xf6H\xd3\x1c8\xb6\x1e5\xa2D\xce\xe5\xe8\t\xde"@\x12\xb0\xeb\xd0\x88\x9cv\xc9"y\xc3\xdfn5\x85;$\xa0\xb7\xf5L[\x9a+"t\xa3-\xdd %Cu\xf0\x03X\xf0]7m\xad3\xf2\x80\x14L\x9d\xea[B\xb2x\xadc\x06\xacO\xda\x8c\xbc\xcc\xb3\xaaS\xb5`\xb1\xd7\x84\x1adx\x94\xd1\x7f\xf5\x8e\x9eU\x17\xbfB:KM\xebz0L\xff\xde\xff\xa2iqp\x92\xfb\xd4\x12u+W\xae\x94[n\xb9\xc5\x1ck\xf7e\xdbU\x1eoI@\xeb\x0f\x90\xdf\'#"\xac\x16\xf8?\xf6=\'\x9d\xa9\x18\x02\x82\x04\x0cs\x92m}\xf9\x1f\xe7D?\xa6fd&!3\xffr\xb38\xd3e\x00\x97\xaci\x86\x1b\x1a\xb0\x10\xeaV$\x0b\xd0\xa6>\xc4\x10`x\xfd\xc6\xc6\t\xc0\xa9\x8f/\xf0WK\x00\xda\x17>\x972I\xf8\xbd\x0b\xf9U\xc8\x94\x1a\x8b\xb6\xbc\xe9\x90\x7f\xa8\x11\xe9\x86\x0fo\x91\x0b^\x83\x80\x1f\xfb\x87\xfd2\xa5u*\xf2\xf0\xd3\x98\x01\xf7\'\xe4\xa4\x0b\x9d@ >\xbab\xb7\xd7\xeb\x14\xb7\xf9J\x00zx\x1d\xb5(E@\x11P\x04\xbcD ]6\xe3\xcb\x9a\xdf\x9fE~\xd8\xad\x84\x83na\xc9\xad\xe1\x8f\xbf:(\xbd\x1d1\xa9\xa9\r@ S\x86\xa70P\xbd9\xbb\x1a\x92\r}\x02nC\x04\xb3k\xdf\xeb,\xda\x19\x13\x07;\x8c{S\xcd\x94\xa5\xd8U\xd5\xc1\xae\x98\xf4\x1d\x191\xf7\xc7\x98\x8f\x12\xca\x94\x8d\xa9\xf4\x1fq\xdd"CIY\xbd\xa5\xcd\xf4$\xe5FY\xae\xf4ni\xfbg\x1f\x02\xf0\x88f:M\xff\x7f\xab\x82\xf52\x04\x02\xd0\xee\x9b}hh\x8f\xcb\x15\x01\xfa\xd5k\x83\xf6\xdfc\x91\x01\xf9]\xa4\xc743\x93\xaf=\x12t\x96\x88\xba\xed\xb6\xdb\x9c\xe3\xdc\xc0\x1f\xb9\xf6\xcd\x92\x80\xeb\xd7\xaf\x97\x8f}\xecc\xe6\xf4\xc9\x08@G\x0b\xb0J\x06Q\xd7\x97\xfa\xf7AS\x91\x94\\q\x12\x83\x80\x84\xd0o\x1b\t\xb8X\xf5Z\xab\x82\x05\xab\x1a\rI\xa3\xfc\x9f\x07\xd7\x1b\xd7\x91\x16=qX\x19\x14!Y\x02\x90Uq\x06\xc1y\xc8\xa9\xc8\x7f\xebn\xe3_\x91\x12nZk\xf6{\xd5;7\xc9+\xdf\xb4N:\x18\xf0\x03xTJ\xa2uH4\x9a\x94\x95\x9b\xe6\x8c7\xd9\xa7\xe6\xdb\xf9\xe4\xc9\xa8(\xe4VV9@\x8d\xa3\xa3\x1b\x8a\x80"\xa0\x08\xcc|\x04\xec\x0b\x9b=%+\xc7\xef\x1c\xe1\xefBf*x\x95\xcdF\x03\xee\xef\x8e\xca3\x0fwJckX\xec>\xa7\n\xfd,%\x02\xd4\xd0\xe4j\xe6\x15o\xdf(\x17\xbd\xceq\xdd\x01k\xbb\xa2%\nWVK\xb4\xfbP\x04\x1a\x80P<\xd5u\xc3\xbc\xf0\xe7\xc4\'\x11I\xc8\xdaS\xe69\xe7\x17\xf1:\xe6\xd5`=I\x11\x98\x06\x81\x13k\x9a\xa4\x01j\xff\xa5\xfe\xbd\xd2^\x04_\x80\x94\xf8\x88O\x10&\xfc\xd4\x02,jr\xf9\xbe\xf9+\xc0\x17A\xc2\xb5\x1a\\Em\xc3L\xaa\x0cx\xd2\x94:\x16\xb1\xd3\x03t\xae\xb0Y\xc1d\xe8\xd8R\'\x12\x80\x9f\xc6\t\x9b\x91\xd9\x80\x89s\x96\xc9\xca*x\xbf\xbdmO{\xe5\x12\xb9\xfe\xc3\'\t\xdd\xd4 \x96aE\xa6\x14\x830\x86\xabd\xdd\xa9\xce\xe20^\x1f~$\xfb\xa0\xd3}\xd4\x06\xb7\x02\xbb\xcf\x8f\xfa\xb4LE@\x11P\x04\x14\x81<\x11\x988\x0c\xd8\x01\x98f\xc0\x0f!\xf3\xbb\xdd\x97g\x15(\xc05E|\xf4\x7f\x0e\xca\xe1\xbdC\x08\x06\x02i\xa2B\x07\xd2\xbcA(\xe3\x13)\x0c0R^t8!o\xff\xc2\xe9\xd2\xbe\xb4\xd18<\xb6\x9ay\xbe7\xdd\xbd\x17\xf6\xee\xe8\x93d\x122\x9eO\xd2\x89\xef\xfd(\x83\nF\xb1\xd2\x1bD\x14\xe0\xe5\x9b\x9c\x88o\x0e\x87_\x06\r\xd3&(\x02y \xf0\xb2\x9a\x16\xc1\xb4\x0b\xb3\xbe\x89CU\x1e\x85\xe9)\x8a\x80\x87\x08P0j\x063\xf2\xbbH\xaf!\x01Yt&a\xc9.\xa6Q\x0b\xf0mo{\x9biA0\xc89ra\xc9j\x15^~\xf9\xe5r\xdey\xe7\x99\xc2\xec\xbe\xc9J\xfe\xce\xe0A\xd9\x9d\x186\xedN\xa3s&;\xbc\xa0\xfd\\Xd\x14\xe0\xe2\x19\x1ds\xe1\x92\n\x7f\xceUh\x9eW+\x89(\x1a\xa1\xaf\x8e\xc2\xae#\xce\xae\x82L6\xdc\xe7F\x00.\xa8\xb4)O\xb6\x16G$\x00I\x1c\xc5\x90_\x8b|+r\x91\xc9?\'\xe2\xef\xf1g\xb4\xcb\xdb>w\xba\x0c\xf5\xc6A\xb8\x8fU\xaehj\x1e\x83*Yq\x82\xa3\x01\xe8\xa3R,\x1f>^\xbb\x8d\xc8LJ\x00:8\xe8\xa7"\xa0\x08(\x02e\x85@&\xd1\x88\xfb\xf8\x12\xff\x112_\xde\x18:\nL(\xcd\n\xc1\xbf\xf9\xee\xf3\xd2<\xb7\x16+i\x8e\x90V`\xc9z\xbaG\x08T!(\xc8\xf0`\xd2Dj\xfe?\xb7\x9faJ\xa5\xcf\x17\xbb\n\xeaQ5\x19\x8b\xb1~\x00\xf7?\xdb/\xa3\x10\xb2\\k\xa9\x8c\xc7\xea\xce\xa9\x11\x18\xe5Jo\xa8J\xd6\x9c\xe4D|\xd3H\xc0S\xe3\xa5\xbf\x96\x1f\x02v\xc6\xd0\x1a\x08"riXb\x98\xadd\x1a\xa8\xca\xaf\xe5\xda\xa2\xd9\x84\x00}\xdc5c\xb0\xfa\xe1\xf0!\xd3m\xabe7\x11\x03k\x9a\xfb\xbe\xf7\xbd\xcf\xfc4U\xd0\x8e\x89\xe7N\xf7\xddj\x16~\xf9\xcb_6\x87R+\xd0\xcaZ\xe9\xe7R3\x91\xedK@\x1d\xee{C\x87\xa4\x05\xbe\x003\xd3\x95\xe9g\xe5\xbf\xcdg\x98\x12^\x10\xea\xfd!\xab\xe2\x9f\x7fq\xd9\x9f\xe9\n,\xe1\x9a\x80\xb4@\xceL\xc4\x80G\xf6g\xeb\x91\x93 P\r\xbezd\x90FA\xbe%\xde.v\xee\x11\xc56\xbf\xafA\xfe\xbc\xbb\xcd\xdf\x8ar)\xb9\xf0M\x99t\xce\xe2zy\xc7\xe7O\x97\xe8H\x12\xaeU\xa0\x85^\x94\xda\xd1K\x1f\x12\x1f\xc1\x18\xfa\xd0\xbe\xb4\xce\x94\xee\xc8\xf6\xbet\xc8\xae+\x1c\xefvC\x87n\x1f\xae\xa7\x16\xa9\x08(\x02\x8a@\xa1\x08dz9\xdbQ\xe1W(|\x00\x99K\xd5\x05\x93\x80\x18SM\xba\xff\'\xfb\xa4\x87\xc1\x1e\xa0\x05\xe8\xe3*\x94S\x99~\xe6\x84@\x00\xa6\xda}\xf0\xd5\xb8rC\xab\xbc\xf53/3\xe7\xd2|\xc6o\xc1\x87\x92\x1e\xd3\x11h\x87\xc6\xe3$\x003\xdd\x96\xce1\xfa95\x02\x8c\x9fR\r\xad\x94\xd5\xeeJ\xef\xd4G\xeb\xaf\x8a@\xf9!`},\x9d\x1cn\x91\xea1D=-\xbf&j\x8bf9\x02\xbc\'\x1ba\xfe\xfb|<*\xf7F\xfa&E\x83d\x9c5\xd5}\xcb[\xdeb\x8e\x9b\xccTw\xd2B\xa6\xf8\x81\x9a\x84,o\xc3\x86\rr\xed\xb5\xd7\x9a#\'\xd3\x02$a\xc9\xf4\xaf}\xfb\xa43\x99\x90:\x9fi\xf5Q<\xb9a\xd4WT\r@\xd3C\x91\x96\xf9\xb5\xd2\xd2^\x03\x02\x10\x11\x92\xd5\xa2\xc0E%\xdf\x7fXT\x84L6\xd4\xef\xbb\x06 \x1bH\xf2o\x08\x99\xf3\x8e\x7fE\x9e\x8f\xcc\xc7\xcd\xceK\xb0\xe9_2\xe4\x1f\x16\xbeC\xb0\xa2x\xefW\xcf\x93\xda\xa60,c@\xfea\x81\xbc\xa2\x13\x18\xc0\xc8HJ\xe6/n\x909\x0b\x1c\x12\xd0gD\x97\xbbxYB\xb0\xa2\xe1\xd3\xc6+\x02\x8a\x80"0\xd3\x10\xc8\xc4\xb4p\xb0\xe5\xfe\xed\xc8\xf7\xba\x1d\xe6\xbe\x82\x92\xd1\xf8\x830<\xd0\x13\x95\'\xee>$M\xad5Xe+\xb8\xd8\x82\xda\xa4\'\xbf\x14\x81\x00\x04\x9dn\xf8\x03<\xe7OW\xc8\xb6\xd7q\x01\x16i\xccg\xe1\xc72\x80\xa8\xea\xc8\xf3\x83\x12\xac\xc5\xa4_\xd9a\x03}\xce\x1fxr\x131\xac\xf4.\xaf7\xa7\x8e&\x8b\xa3\xc5\x99s;\xf5\x04E`\x12\x04\xec\xa0t\x12\x02\x80\x84\xb0r\x94R\np\x12\xa4tw\xa9\x10\xe0=\xd9\x12\x0c\xc9\x83\xb1^\xd7G\xa5\x13\xf4bb{\xac\xa9\xef\xd6\xad[e\xd5\xaaU\xe6\xe7\xc9\x08\xba\x89\xe7\xe6\xfa\xfds\x9f\xfb\x9c9\xc5j\x05N<\xdf\x19f\xab`W9*\xff\x01\x9f\x85~\xfb\x02\xa4t\x17\x02\xf9f}\x00\xda\xe7zb\xbb<\xfd\xeeV\xd2\x02\xf3\xdf\x96vj\x00V\xb6\xe6\x96\xa7\xd8\xe4[\x18.d5\x16\x87G\xfa}\xd7\x00d\x0b#\xc8T\xa9}#\xf2E\xc8$\x90\xaci06\xfdK\\\xe8\xa6f\x1c\xd3{\xbez\xae,B\x14\xe9\xbe\xce(\x16T}\x96\x7f\xfd\xeb\xd2x\xc9\xe4\xc0\x93x\x16\xda\xa0\xd5\xd8\xb6\xd0!\x00}R\xcc\xb5`\xd1\xd9 \x83\xb7\xf05P\x94G\x7f\xbc\xb3\xba\xa1\x08(\x02\x8a\x80"0-\x02\x99^\xcc\x1c\x01\xf9\x12\xe7\xc0\xfb\x03\xb7\x04O\x06`\xabI\xf6\xf3\x7f\xdb)I\xfa*\x0bzR\xac\xdbD\xfd\xe7\x15\x02\xd4Z\xe8\xe9\x8c\xc8k>x\x92,[\xdf\x02\xbd\x81\xe2\xf9>\xd9\xf7L\x9f\x84`\xbe\xa3s\xfe\xfc\xae&\xb5\xa7\xe8\xac{.Vz\x1bZ\xa8\x7f\x81d\x1f<\xe7\x9b~*\x02e\x8d\x80]\x16\xda\x14\x86/R\xb4\xd4~/\xebFk\xe3f\x15\x02\x01\xcci\xc9\x15\xfcj\xa4\xd3\xf4{2I\xc6j\xff]\x7f\xfd\xf5\xe6\xb8B\x83\x7fd\x02\xd9\x9a\x18/Y\xb2D\xae\xb9\xe6\x1a\xa7=\x93\xf8\xd1\xb0\x9e\x07\xbf;x@\x06\xc6\x92R\x83\xf1\xc2\xaf\xe7\x8b\xe5\x86\xb1xH?\x80\xc5JUng\x16\xa5\x05\xc2*V\xdd3\xb5\x1e\xbe\x83I\x82\x8dX\r@\x7f/g\x07\xaa;\x11\xf9\xef\x90M\xd5\xf8\xef\x7fB\x9fl\xb0\x98\x1b?z\xb2l:k\x81\xf4\x1c\x1aF\x14i\x7f;\xeb\x7f\xc7\x8e\xd6`\xacC\xc0\xfa-\\A^\x0eb\xa1?\x0f\xbe\x05\xac\x1dUP{S\x93"\xa0\x08(\x02\x8a@\x19"\x90\x89\x00d3\xed\xd0@?\x80]\xc8|\xa9s0.(\xd9\xd5\xb5C\xcf\x0f\xc9\x93\xbf=$\x8dsj\xe0\xf3\xcdVUP\xd1z\xb2\xc7\x08\xd0y6\xaf\xcd-\xff\x04S`\x10HT\xc8\xcb\xe4[\xc8\xabj\x03\xee*\xeb\xbeg\xfa\xa5\xb6.8.\x8cyU\xfel)\xa7\x1a\x02k<\x9a\x82\xaf\x97z\x90\x80\xbe\xae\xf4\xce\x16H\xb5\x9fED\x80\x03\x8d\x8d\xa4\xba\xb0\xbaN\xa2\x88\xb0:\xd9 U\xc4fiU\x8a\xc01\x08\x84qW\x8e\x80@\xfb\xdf\xe1n\xb3?\x95A<\xe2xi5\xd9o\xbd\xf5Vs\x9c\xd5\x08<\xa60\x0f\xbeX\xad\xbf\xbf\xfb;\xf2&X\xbd\x9d\xc4\x17 \xa3ks\x91h_2*\xf7\xa0\xeds\xe1c3S\xdb\x0bm\x92#0b\x91\x17\xee(\x18\t\xb8X\xc9\xfa\x96^yB\x9bc\xbai\xe9\x88b5`&\xd6\x03\xc9\x9f\x96!\x83}\x8c\xc9\xc1\xc9\x80/\xa0\xdaB\xf9\xff\x93\xc8N\xb8Zg\xee\xc1j}MU\xee\xec\xe6\xec\xabV\xca+n\\#]\xfb\x87\x10\xf9x\x86\x8d<@6\x16M\xca\xd2\xe3[\x0c\x96)\xcbxz\x8b\xac\xbd\x8e$\xffH\x022\xd9}\xce7\xfdT\x04\x14\x01E@\x11(9\x02\x93\x8dp\x1c\x0e\xf9\xd2\xeeA\xfe/\xb7\x95\x9e\xf8r\xa0\x9f9\xa6\x9f}y\'\x84C\x88\x12>\xe9\xa1\xbbm\xd6\x7fy"`\x04\xbe\xee8\xa2\xc9\xb6\xc8\xf5\x1f:\xc9\x94b\x83u\xe4Y\xe4\x94\xa7\xc1\xd5\x97I\xfbA\x00\x92\xc4\xd2\x94?\x02\xa3\xc9Q\xa9\x01\x89j\xb5 \x14\xcd\xfc\xb1\xd43\x8b\x8b\x80\x9d\\.\x001\xb18T#\x11\xa8-T)\x05X\xdc\x8b\xa0\xb5M\x89\x00\x97,\x1b`S\xf7dl\xd0\x98\xd3\xf2\xe0L\xab\xa3v\xc1\xec\x82\x0b.\x90\xba:w1\xc6\'mlkV\xbcv\xedZ\xb9\xec\xb2\xcbL\xfb\xed>\xf3%\xed\xc3\x8e\x07\xdf\x81\x190\x1b\x1e\xf4i~N\x9c\x02\xe8\xaf]\xdcKk\x82\xef\x9b\xabOl3\x0ba\x95\x1b\xb6\xd5w\x88\xb2\xae\x80\xf7vu\xb0Z\xfa;\x1d\x02\xd0\xa7\xdb\xc5\xde\x96\xebQ\xdd\xa9\xc8v\x0e\x92u;\xf3=\xb0\x1a\xf7(+[~|\xab\xdc\xfc\xf7\xa7\xc8\x00"\xfe\xfa\xee\xf6&\xdf\xc6\x16p\x1e_=\x89xJ\x16\xact4\x003\xbe\xb4\n(?\xedT\xce\x15i~\xd2\xe6\xee\xb3\xd76\xed\x10\xddT\x04\x14\x01E@\x11(%\x02\x93\x11\x80l\x93\xfd\xed{\xd8N"s\x19\x97\xe3dA)\x85(\xafL\xbb\x9f\xe8\x91\x1d\x0fuH\xcb<\xac@\xab\x16`A\x98\xfau2\x89\xb8\x9eCQy\xc5\xeb\x8e\x93u[\x9d\x05Y:I\xf6%\xb9\x8a\xa0\xbd\x1d\x11\xe3w%T\xa3Z\x80y\xe3\x8cK\x14\x19N\x08\xb5 \x98\xec3\x97wyz\xa2"P$\x04\xec\xa03\xbf\xbaV\x16\x85\xe0\x80}L5\x00\x8b\x04\xbdV\x93%\x02\xc6\xff\x1f\xc2\xa2\xfe\xd25\xff\xb5\xa4\xf5\xc4\xd3-\x01w\xd3M7\x99\x9fh\xfe\xebW"\xd9h\xcd\x8d?\xfd\xe9O\x9bj\xacV\xe0\xc4:\xad\x86\xed=\x91\x1e\xd9\x9d\x18\x01\x99\x89\x80l\x13\x0f\xf2\xe0;\xad\x06\x18\x00$\xe8\xb7\x0fa\xb7\xad$8l"\xc9\x91D\x00\x10\xfa>\xd3T\x18\x02\x94\xd8\x83!\x10\x80]t\xcf\x07\xcd\x00\xff1e\x95iW\xd3T\xeb\xcb\x87\xd1\xd2\x85&\\mcP\xdeq\xdb\x99\x92\x8a\x8fJ\x0cQ\x7f\xc7g?\xbe\xd4Z\xa2Bq\xe1h\xd93\x7fE\x93\x9f\r\xe0us&y"s\xfd\xacH\xcbV\x04\x14\x01E@\x11\xc8\x1f\x81\xa9\x86r\xca\x84|\x99\xdf\xe7f\xd6R\xb8\x9c\x88\xa1\xc1:\xd5\xfd\xd9\xbf\xee4+\x8b3N\xd5\x9eH\xcd\x90\x94\x826\x19\x1di\xbf\xe1\x93\xa7\x98\x1e\xd1\x8c\xdb\x0f\x01\xd0J\x0c=\x87#\xd2{\x08Q\xa2\xeb\xaa\xe1\x90\xb9\xf0\xdbm\x86\\\x86\x9c\xba\xc1\xeb\x13\x8f\x8c\xca\xea\xcds\x9c\xf3,\xb89\x95\xa2\x07+\x02\xa5C`U\xa8\x1e\xfe\xc3\x18\x01Xo\xde\xd2]\x05\xad9\x13\x02A\xb0\x03\x11\x8cM\xf7\xbb\xd1\x7f3\x19\xb8\x92X\xb0\x84\xdf\xf9\xe7\x9fo\x8a\xb1\x1a\x81\x99\xca\xf4b\x9f%\x1c7m\xda$\'\x9cp\x82)\xd2\xfa\x07\x9cX\xbe\x15\xfc\xbe>\xb8_\xe6\x82\xcc\xcc\xf8\x9c\x15\xfa\xe8Az\xa4\x00\xe9\x97\x86\xe1\xc4>Y\xceh\x19L\x1cC5\xd5\xba\xb0\xfcR\x80\xf2\xda\xc3{\x85\xd6\x1fC\xd4\x8c+N\xe2mS\x94d\xadZ\xde\xf6\xd9\x97\xc9\xfce\r&\xd21\xad_fb"\x19N\xeb\x90\xb9\x8b\x1cm\xe4"\xf4q\xb1[G\xa1o\x92"4U\xabP\x04\x14\x01E`v!`\xe5\xc0L\xbd\xe6K\x9b\xb2-\xf5\xfe\xbf\x85\xccQq\xaa\xe3\xf1svi\xd4\x8d\xb4\xb5\xfd\xde#\xb2\xe3\x81Nin\x0b\xab/\xc0\xec\xa0+\xfaQ\xc6\x14\xb8\'&K\xd67\xcb\xd5\xefu&\x15c\xa3\xde\x0bH\x86XD\xefR\x08\x0e\xd3\x03-\xc0P]\x00\x04`\xd1\xbb;#*\xe4\xa4/\x01_/\x8b\x8fk>\xda\x1f\xef/\xd9\xd1\xb2uK\x11\xf0\x08\x01\xeb\x8f\xec\xf8P\x1d\xc2A\xd2\xfc\xd7\xaf\xa4s\x12\xbf\x90\x9d\xc9\xe5R\xfb\xaf\t\x84\xd9\xce\xe4\xb0\xecH\x0e\x99\xae\xda{6\xbd\xdf\x96\x8c;\xfe\xf8\xe3e\xd5\xaaU\xe6\'\xbb/\xfd8\xaf\xb7\xad\xd6\xdf\xfb\xdf\xff\xfei\x8av\x9e\xac\x9f\x0eu\xc8\xa1d\\\xea1f\xbcd\xb8\xf5\xe0\xe1c\x99\xa1"\x11*\xd6\xd5\xe0\xca\rm\xc6\x8d\x88Z\x96Ls\x0bd\xf33^\x93\x01\x98\xffF\x06\x93\x12\x19\xa2!\xd0\xccI\xf6\xf6~\xd5;6\xc8)\xafX"=\x87G\xc6\x95\x13fN/\x8f\xed\t}\x92\xd2\x9c\xbb\x11s.\xa6t\xad\xd9c\x8f,\xe8\x9b\x85v\xa1[\xcaK^-\x05\x95\xae\'+\x02\x8a\x80"\xa0\x08\x14\x8c\xc0t\x84\x9e\xf5\xfb\xf7}\xd4t\xc8\xad\xcd\x93\x99\x93\xd5\x02\xfc\xf1m;\x8cyA\x95\xdaj\x14|1\xfd*\x80\x02C\xdf\xe1\xa8\xbc\xf2\r\xebd\xe1*\x92J\xfeh\x01V\xb9\xfe!;\xf7!\xfa\x9aF\x88.\xe8rR\xd0\xab\x85\x16%W\xb5\x99\xacDVP\xa1z\xb2"\xe03\x02vpY\x83\x08\xc01\xdc\xc3\xfe\xdd\xb7\xfe\x95\xec3DZ|\t\x11\xe0L\xb6\x11&\xb3\xcf\xc4@\xfe\xe1f\xad\xc6\x1dj\xef\xd9\xf4f\xd9\xe0\x1f\xdb\xb6m3\xbb\xfd\x88\xfe\x9b^\x9f\xdd\xb6\x1a\x7f\x8c:\xdc\xd2\xd2b\x82\x90d\n\x01\xbd\xa3\t\xf9]\xb4G\xda\xaaC\xde\x07\x03q\x81\xa9\xf1f\xdd\xd8vq\xda\xff+\xe0\xff\x8f\xbe\xa6u\x01qZ\xa8\xa6=\x80\x97\x10\xb7\x86D\x87\x12 \x01]\x13\xf6\x19@\xe7X\xbf\x7f\x9b\xcf_$\x7f\xfa\x97\'\xc0\xea\x04\xe6\xcd>\xb1a\xd3\x82\\\xc4\x03\xa8{\xc1I\xdf\x9c\x05V\x0b\xd0\xd7qPM\x80\x8bxm\xb5*E@\x11P\x04rA`:\x02\xd0\x8c\xff(\xb0\x1f\xf9\x9b\xc8\x1c-<\x19\xfeG\xdd\x08T;\x1f\xe9\x94\'\xef\xa5/\xc0Z\xa1\xb9\xa9\xa6\xf2D \x01\xdf(\x94\x1cn\xf8\x88\x1b\x10\x04_=\x97\x97\xdc\xcb\xbfoG\xbf1\xdf\xa9\x9aiQ\xd8\x8axi\x93tc\x03\xfc\x96\xc1\xb15\x93\xdf\xe6gE\xec\x9aV5\x0b\x10X\r\r\xc0\x18(\t\r\x002\x0b.v\x05u1\x80A\x90\xd13\xff\x10\xa7H\xe4L\xa635\xdf\x12\x80\xd7^{\xad\xf9\xb9\x18\xda\x7f\xa6=XH\xa5/@\x12\x81\xaf{\xdd\xeb25m|_\xc0\x88s"?\x1e\xee\x10\x12\x03^\x9b\xearMw\x14,\\\xd0\x0f\x9f!\xe3\xbdp6(\x8b\x8c%)\xae\x8a\tr\x90r\xb7\x9d_\xf53_\x04h"\xcb{w\x04\xda\x7fQ\xfa\xc6CrP\xce\xb7\xc4\xd2\x9f\xc7{\x85\xf3\x8f:\xf8\xfd{\xd3\xa7\xb6J\xa4\x1f#\r\xe6\x1e\xb3B\x07\x01*\x1dU\xd0\xc8m[Po.\x84\xe72\xbcsy-\xabh\x83\x80T\xfa-S\xfa\x9bV[\xa0\x08(\x02\x8a\x80\xc7\x08LG\x00\xb2:\xfb2\xa7\x19\xf0 2\xcf)\x9c\xa9\xc3\x90`\x03J\xfc\xe8\x0bO\x1b2)\xa0Z_\x80\xb6<\x13M\x81\x07:\xa3\xb2\xe5\xfc\x05\xb2u\xdb\x12\xa7\x91\x1eK\x0fVJx\xf1\xd9\x81\xd9#\x90\xf9u\xb91\xf1\xa2\xe6\xe6\xd2\r\x0e\x018+\x84[\xbf\xb0\xd4r\x8b\x8e\xc0\xe2\xea:\x817\x00M\x8a@Y!\x10DkH\x00>\x18\xe95\xed\xcat\x8b\xa6/\xb6\x9c{\xee\xb9\xe6\xb8\xf4}~w\xc8\xd6\xf5\x81\x0f|\xc0Te\xcd\x82\'\xd6kM\x97\xef\x1a\xe9\x92nh\x02\xd6\x1a\xd1n\xe2Q\x85}\xe7\x98\xce@ L\x99\xb02?x\xf2\xe1hb\x06\xc3\xd52w!\x16\x0f\x86\xb1x`%WO\xca\x9f\xa5\x85\xe0^\x0fB\x9b2\x86\xa0b\x11h\x01\x9ad\x05\xb5\n\x84\x84\xf7\x04\xbad\xd2\xad\x9f=C\x9a`\n;<\x9c\x1c\x9f\x8bT`\x97rj2\x9fA\xf2\xf1\xcd\xf3jr:/\xcf\x83I\x00\xeaS\x98\'xz\x9a"\xa0\x08(\x02~"\x90\r\x01H3`\xfa\x02\xdc\x8e\xfcCd\xbe\xd0=\x11\x01\xe8\xf7\x8di\xf7\xe3\xdd\xf2\xe0\xcf_\x84\x16`\rV\xaf=)\xda\x94\xab\x1f\xde"\xc0h\x87C}I\xb9\xe6}\'\x9a\x82\x8d\xdf>/\x87wW2{\xf1\x99>\x19\xc3}\xa0\xc1a\xf2\xbf~4\x7f\xaa\xc2\xa3\xb4d\x8d\x13\xf1\r\xd6\x94\x9a\x14\x81\xb2F\xc0\xbeJ\x16\x05k\xe07\x0cD\x0b(\x83l\x06\xa8\xb2\xee\x946n\xc6 \xc0Wh\x08+)}cI\xd9\x89\xe8\xb9L\x99\x82gX\x02\xee\xcc3\xcf4\xc7\xf0\xc3\xee\x1b\xdf\xe1\xe3\x865\x03^\xb2d\x89\x9c~\xfa\xe9\xa6\xa6Lf\xc0\x94\xb4\xec3\xf7\xdf\x83\x87eN0,\t\x8fi:\xd6QS\x0c\r@J\xa8H\xed\xcb\x1ae\xfer\xb8\x0f\x88$U~p )\xe8\x93\xd7/\x80\x97\xf1P_\x1c~\xba\xf9\x8d\xc9\xfew\xbeU\xd4\xa7\xdb\xf4Kn^\'\'m[$\xbdX\xd4\x0eT\xdb\xa7\xa0\xa2z\x92_c\xb90\x0c\x16\xb4\xb1\xc5\xf1\x01\xe8\xd3\x00k\x01%\x01\xc85\x13M\x8a\x80"\xa0\x08(\x02e\x86@\xb6\xf3+;\xe2\xdf\x86\xf6\x93\x10\xcc\xf6\xbci\xbbk}\x01\xfe\xe7g\x9e2\x81\x0b\xc25\x01\xf8\xad\x99\xf64=\xa0\x14\x08\xe0\xaa\x8f\x0c\xc5e\xd1\xea&y\xc5\xeb\xd7\x98\x16x9\xb1\xb1+\xb3q\x08\xef\x83\xbd1\xe3{\xc6\xe3\xf9H)P+M\x9d\xb8Vq\x04\x02\x99\x03m\x08&\x06\xdeQ\x8d\x88\xd2\\\n\xad5;\x04\xb8\xc0\xc0\xb4\x04\xcd`b\x00\x90\x89\x89c\xa1%\xfc\xce9\xe7\x1c\xf33}\xf2\x15;Y-\xc0+\xae\xb8\xc2\xf8p\xb3~\x01\'\xb6\xc3\x9a\x01?\x15\x1f\x94Gc}2\xa7:,I\x0f5\xbc\xf8\x0cSk\xd2\xef\x94re\xc6\xe3Ok\x97\xc8H\\\x17\xbb<\x04\xbc\xbazL\xfa\xbb\xa3\xa6\xc4"(sz\xd8\xf2\xa3E9\xcf%\xcc\x99C\xd5\xf2\x96O\x9f&\xc9dJ\x8c_\xeb\xa3\x87\xcc\x8e-L\xadH\x84\xd6\x81$g\xf2\xf9\xc9\xacM\xab\xe2\xa5/K\xd3\x02\xfdP\x04\x14\x01E@\x11(\x05\x02\xb9\xbc\xff\xed\xb1\xb7\xa3\xa1q\xb7\xb1\x1e1uN1?\x84/\xc0\xde\xc3\x11\xe3\x9cWg\x7f\xa5\xb8\x1d\xa6\xaf\x13\x01\x10e\x18\xd1\xe0\x16\xach\x94W\\\xefh\x01z8_\x18_/d \x90P]\xa0bW\x9b\xa7G\xd2\xdf# \xe3A\xa3v\xd4h\x00\xb6\xcdw\xb4\x00+Ux\xf7\x17)-\xbd\xdc\x10XZ]\x03j\x85\x04\xa0R\x80\xe5vmfs{L\xc4_\x10|O\x80,c\xb2\x02\xd1DLH\xb6\x91p8\xf1D\xc7U\x86\x1f\x0bd\x13\xeb\x9c\xf8\x9d\x04 \xdb\xd1\xd4\xd4$$\x01\x99,)\x98~,%/\xab\xf5w\xcfH\xb7\xd4\xbaZR\xe9\xc7\x14\xb6=&\xe1I\x91*\xac\xe4Lg\xaf\x7fY;"\xd6\x82p-\x02\xe9\x98\xa9\xfe\x99\xb6\x8f2\x03\xf9\xeb\xee\x03\x8e\xc9{\xa5\xf6\xcfj\xc0\xde\xf4\xf1\x93e\xe9\xba\x16\x19\xea\x8d\x83\x18\x9f}\x9c\x943\xd3\x1a\x93\xdaZ\xf7\xed\xe5/\x04\x8c4\xe2\x1a\xe7W\xea\x9d\xa3\xedV\x04\x14\x01E`f"0\x99\x0c\x9b\xa9\xb7\x9c\x8d\xf1\xf8\xdf!\xdf\x8d\xcc\x17\xbb\'34\xaa\xa5\xd3\xb4 \x05\xaf\xef\xdf\xff\xccv\xe3\xa06\x93o\x1d\xd4\xa7\xa9\x0c\x10\x08\xc0)t\x7fWT.y\xd3Z#g\x8f\x81\x01\xc4|\xc7\x93d\x85\xb2\xbd\xdb{\r\x11\xac\xca\xa0y\xc2\x8a\xeb1\x8a\xc8v5\xf5\x01i_\xeeD|\xf3\xe6i\xcd\xb3=z\x9a"0\r\x02\xf6\x1d\xb2\x04\x11\x80\x03\xf8\xe2LV\xa69I\x7fV\x04\x8a\x80\x00\x05\x9d\xda\xaa\x80\x1cJD\xe5@"bj\xcc$\xfcX\xf3_\x92\x7f\xf3\xe6\xcd3\xc7\xd9}Eh\xe61UX\xd2\xe3\xd6[o5\xfb\xadY\xf01\x07\xe1\x8b\x95\xb5~\x82h\xc0q\x0c\xb8\xe1\x0c\x9a\x8d\x13\xcf\xc9\xf6;1\n\xb9\x0f6\xe5\x04?\x92}o\xd47\x85d\xee\x92zI$\xe0\xff/\x17\xc9\xd6\x8fF\xcd\x902\xab\r\x03(\xd2c\t\xc0L7}\x99\xf7\x95\xda\xe4L\x9b\x11\xc0\xee\xbckVK\xcf\x91\x11\xf8\x87\xf4H`-\xf3\xbegl\x1e\xaea \xec\xf0r>\xcb\xd7\xf4\xffW\x14[\xe3\x8c\xfd\xd4\x9d\x8a\x80"\xa0\x08(\x02\x93"\x90\x8b\x98D\xe9\x8d\xa3&\xb5\xff\xfe\x11\x99\xa2@.\xe7\xe3\xf0)\x92\xebX\xe4\xde\x1f\xed\x95\xa7~{\x04$`\xad\t\x041\xc5\x19\xfaS\t\x11\x88\x8e\xa4\xa4mA=L\x81\xd7\x99Vx\xad\xe5pd\xef V\xf2\x13\x88@\xe7\xdd-VB\xb8JVu,\x92\x92e\xeb\xe8\x8b\xf9h\xf4\xbb\x925F+V\x04\xa6@ \xe9\xf2\x03\xf3`\x868Z\xa9\x8e\xa6\xa6\xe8\x9f\xfeT\xb9\x08\x8cA\xdc\xa9\x03\x19\xb2?\x11\x93\xc3)\xc7\x00b*Bk\xf3\xe6\xcd\xa6\xb3\x89D\xc2\x17\x17\x19\xd9 i\x89\xc7K.\xb9D\xea\xea\\-p\xcb\x96\xa5\x15`i\xb9]\x08l\xb2o4*\xf5\xe8\xa7w<\xcf\xd88\x01\x98V\xa5\xb7\x9bn\x9f6\x9c1\xdfD\xac\x1d\xb5\xf6)\xde\xd62;K\x83\xf8\xc5\xa8\xd7]\x87\x1c\r@{\xafT\n\x18\xbc58\x96p!\xf4\xa6\x8fo\x95\x11X\xaf\x8c\x16\xdf"\xbf\xac\xe0"\xe9\x17\x82_G&\x06\x8b\xf31q\xbe\xa8\x04\xa0\x8f\x00k\xd1\x8a\x80"\xa0\x08\xe4\x8b@\xae\xec\n\x87N\xbe\xd4\x7f\x8d\xfc3w\xdb\x93\xe1\x94\xf3=.62}\xe3\xe3\x8f\x9a\x08\xa6\x01\xf8\xeb\xd0T\x9e\x08\xd0@od0nVT\xa9\xb5g|\x01\xd2\xee\xb4\xc0d\xa3@\xef{\xa6_\x9ey\xa4[\x9a\xda\x10\x19\x1a\x9a\xa1\x9arG\x80\xcfS\x02~\x00\x17\xafi4\'[\x8d\x90\xdcK\xd23\x14\x01\x7f\x11\xe0\x9b\xc3\x12*M\x81\x90\xc403)\xfcm\xe2o\x9b\xb5\xf4\xd9\x83\x00G\xa0Z\xf8\xbf8\x08\x82\x8c\xc9\x98\x03\x9b\xadc?\xac\xbf?\x1b\x01\xd8\xeb\x85\xb1ck\x9b\xfa\x1b\xeb\xb6\xef\xfc\xb7\xbe\xf5\xad\xe6\xe0L\xd1\x80\xf9\x83}\xd6~:xDZ\x02\x08\xa2\xe1\x01\x05\xc82\x89[\xd8g+@+7\xae;u\xae\x04\xb0`\x98J\xa9\xbc\xc0k\xeaE\xa2&%\xef\xa1\xee\x83\x8e\xd6k\xa5\xf9d\xe1\xbc\x82\xe9\x86\x8f\x9c\x0c\xed\xd0\x06#\xb3\xda\xc0\x83\xce/\xb3\xf0\x93s-k\x98\xeb\xe2\xe3#\n:\x89\xf3\x11\\-Z\x11P\x04\x14\x81|\x11\xc8\xe7\xe5l\xcf\xf9\x0c*\xa54\xec\xcc\xdd\xf2mA\xdayf5\nB\xeb\xe1\xe7\x87\xe4\xae;vI\xeb\x82Z\x981\xfa?B\xa55A7\xb3D\xa0:P\x8d` \tY\xba\xbeI\xb6^\xb2\xc4\x9ce\x05\xf1,\x8b\xc8|\x18.w5L\x8c\x99\x9e\x7f\xbc[\xc25\xf6v\xcb|\xb8\xee\x9d\x02\x01\\\x908\xfc\x00.\x81\xcf\x1bM\x8a@% \xc0\'\xbf\x19\xf7-\x83\x138o\x81Jh\xb5\xb6q\xa6#\xc0{\x91y\xc74\xfe\xff,\xe1v\xd6Yg\x19H2\xf9\xdd+&V\xd6\xec\xf7\x9ak\xae1\xd5\xda\xef\x13\xdb`\xfd\x00\xfe\x1a~\x00I\xc4\x07<2\xee\xa0\xf4fM\x80\'\xd6\xe9\xc9w\\\x14+#.]\xdf*I],\xf4\x04V[\x08\xef\xdfd|T\xfa:\x1c\x02\xb0\x92\xa4q\xba\x15b:\xe9\xe5\x0b\xe5\xfc\xabWI\xef\xa1a\x98\x86;\xfbl\xfff\xdb\x7f\xa7\xf7$\xc8\x8b&W\xcfn\xc0g\xdb\r\xa6\xfdU\x04\x14\x81\x8aA \x9fQ\x80\xa3\x07\xd7\x8f\xeeG\xbe\x13\x99ex\xb6\xe4ZU\xe5\x88\x18\xdf\xfb\xa7\xa7\xa4c\xef\xb0\tW?\x9a\xaa$\xb1\x03h\xcc\x96\x04aj\xb8?\t3\xe0\xb5\xa6\xc7V\x10/\xb4\xfbc\xee\xf5\xfe\xfd\x0f\xf7J<\x9e\x82\xbf\x92|n\xd3B[Q\xf9\xe7s\xf5\x9e\x13\xa2\xb9\x8b\x1c\xf3/\xf6\xc8\xb5\x96\xaa\xfc\xcei\x0ff\x14\x02\x0c\xfa\xc1\xd4X\x1d\x92&DZMbH\xa9*\xde$eFa\xa9\x9d\xf1\x1e\x81 \xeeEF\x9a}*>d\n\xcf$\xf0\xa4k\xfbm\xd9\xb2\xc5\x1c\x97\xbe\xcf\xfbVM_\xa25\x03&!\xd9\xde\xden\xb4\xb92i\x01\xdah\xc0\x8f%\x06d;\xfa\xd8\x82g\xd0\xee\x9b\xbe\x96\xc9\x8f\x18\x03fA\x1fI\x17\x8b/\xa3\x9a.D`\xb2\xe80L\xae\xb18\xa9\xa9p\x04Fq\x933jn\x0f\x02\xf3\x8d\xa7\n\x11\xc5\x8d\xf6+\xee\xbd\x10|\xdd\xdd\xf8\x91S$\x02w2\xa3c\xcaE\xf1:\xd2\x04\xf8\xe8#\xe9\xcb\x05\xb5@\xf3\xbf>\x8c\xe3\x0f\x8fn(\x02\x8a\x80"P>\x08\xe4\xf3r\xe6\x88\xc1\x9cD\xfe;dz\\\xc9\xa7\x1c\x9c\xf6\xd2D-@\xae\xd21\x80\xc17?\xf1(\x02A\x84\xa0\x11\xf6\xd2\xe3tO\xe9\x11 \xc1\x14\x1d\x8a\xcb\xca\x13\xdad\xf5\xe69\xa6AU\x1e8W\xb6f\x1b\x07w\rJ\xc7\xbea\xa9\x85\xff\x16\n\xa3\x9arG`\x0c\xe6P\xd4\xa8\\\xb0\xd21\x03\xce\xbd\x04=C\x11(\x1e\x02\xcd0\xb3l\x06\t\xa8\x8a<\xc5\xc3\\k\x9a\x1e\x01\n8\t,N>\x19s"\x00[s\xf5Lg._\xbe||\xb7%\xa8\xc6w\x14y\xc3hp%)\xaa\x89l\xdb\xb6\xcd\xfc\xcf\xd4&\ntF\x0b\x10\x1b\x8fD\xfb@\xc4c\xcc5b\x9e9%\xef\x8f1\xac85\x8c\xdb\x1b\xe6]\xcc\xa4\'R\x06aZ\xb2\xa6\t\xc1\xae\x1a$\x0e\xdf\xc4v\x9f\xf3\x8b~\xe6\x8d\x00\x84\xf1 \xa2\xc5\x1e\xde3\x90w\x11\xa5:\xd1j\xe2\xde\xf0\xd7\'\xc9\xfce\xf52\xdc\x17\xd7\xfb\xc2\xbd\x18$\xff\xac\x8c\xed\xe85{~\x95\xf8:\xb1I%w\x8b\x84\xfeW\x04\x14\x01E\xa0\x8c\x10\xc8\x97\xb8\xe3K\x9d\xe7\xfe\x01\xf9+\xc8\\\xe9\xf1\xc4\x17 \xca1\xfe\xe4\xf8\xffI\x04\x03\xb9\xe7\x07\xcfKk{\xfd\xb8\x99\x07\xf7k*\x1f\x04h\x1e\xc2\x88j\xdbn<\xce4\xca\x98q{\xd0<;Iy\xf8\xff{Q\xd7\x95"l\x00\x00@\x00IDAT\x1a\x9ak\x10\x10F\xe5\x88|`M\xe1\xa9\x0c@#b\xc9\x9afs\xba\xc55\x9f\xb2\xf4\x1cE\xc0/\x04\xec@\xc4\x00\x04\xf5\x98\xc1;\x1a\x80~\xd5\xa6\xe5*\x02\xd9#\xc0\x91\x87\x1a\x80\x91\xd1\xa4\x1cI\xc5\xcc\x89\xe93\\[R\xba\xb6\x1d\xf7Y\x12\xc2\xfe^\xea\xff\xd7_\x7f\xbdi\x02\x03\x93dJ\xb6O\xbf\x18\xe92\xd1\x80\xd9\xe7B\x12\xb5zI\xe8?\xed\x9aM[-\xdfB\xca\x9cx\xae\xb5\x0e\xd9pz\xbb\x91B\xe9\x8bX\x937\x08\x90$\n\x85\x02rd\x8f\xa3\xf5Z)\xd6\x03\xd6\xf4w\xc3\x99\xf3\xe5\x82\xeb\x18\xf57:\xeeV\xc6\x1bd*\xb7\x14\xe7\xe98\xea\'\xd3\xe7k\xca\xea\x9c\xd5\x87\xca\x85L[\xae\x08(\x02\x8a\xc0\x8cD\xa0\x10\t\x8f\xa4\x1f\xf3\xa7\x91\x8f \xb3,\xcfX\x1aKT\xdc\xf1\x89\xc7\xa4\x17\xfeG\xeaZBp\xee\x8c\x1a4\x95\x15\x02\xd4\xf8\x1b\xe9\x8d\xcb\xa6s\x17H#\x02vpi\xd1\n`\x854\x14\xf3\x06\x93\xfe\xf8\xeb\xc3\x86\x10\xb6~\x01\x0b)sV\x9e\x0bF\x96\xd7h14$L*\xe4\x89\x9f\x95\x00j\xa7\x8b\x89@]U\xd0D[\xe5\xab\x9e\x83\x8b&E\xa0\x1c\x10\x08\x83\x94~>\x91f\n\x99\xa1QVf\xb1\xfe\xffl@\x90\x0c\x87\x16u\x97%&\xaf\xb8\xe2\x8a\xf1zm[\xc7w`\xc3j5\xfe.\xd2#\x83cI\xa9)\x80\x00L\xa2\xb4\x05\xd55rW\xa4K\xbe>p\xc0Tc\xcbO\xaf\xb3\xd0m\xab\xc9\xb4\xf9\x82E22\x10\x1f\x0f$Wh\xb9z\xbe\xa3%\x16\xa2\x06\xe0^G\xeb\xb5\x12\xfc\x87\xd0\x0f5\xcd\xce\x99n\xfa\xf8\x16\x89F\xb0\x94\x04k"Mi\x08\x00\xa3T\xc2\xc1(m\xaf\x1f\x9b\xacDcr\xfb\x81\xac\x96\xa9\x08(\x02\x8a@\x81\x08\x14B\x07p\x8e\xc6\xf3\xf7!\xdf\x86\xec\xe9|\x8d\xab\xe7$\x92b\x91\x94|\xf7\x93\x8fIcSP\x02\xd5E\x19\xb4\xd0\x15M\xd9"@s\xed\x08\xccn\xe6.\xac\x93S.Z\x9c\xedi\xd3\x1egW\xf6\xf7=\xd3\'/>\xdb/\xf5Ma\x19U-\xc0iq\x9bx\x0052\x03\xb8F\x0bW;\x1a\x80\x13\x7f\xd7\xef\x8a@9!P\x8b\x19\\-H\xc0\xa4W\xaa\xc4\xe5\xd49mKE"0\x8auM\x92a\xbb\x12\xc3\xa6\xfd\x93\t:\xa3\xae\x9f\x8aM\x9b6\x99\xe3\xcaE\x03\x90d\x9fm\xcb\xab_\xfdj\xd36K\n\xa6_\x90t\xe9\xea\x01\x98\x017`\x15\x8e\x9a\xb8\xb9&\n\x86\xad\xf0\xdb\xd29\x1a\x97\xb7\x1cy\xca\x9cNA1\xbd\xfc\\\xcb\xcct\xbc\xd5^\n\xd7\x06d\xd9\xfa\x16\x89\x8d\xd0\x1a\xa1\x10\x916S-\xb3w\x1f\xefs\xcaw\x9d/:\xc47\xc9\xb5rOc\xae\x9f\xbfW\xbdc#\x16=[d\x18\x8b\xd3\xb4P\xd1t\x14\x01\x9a\xc8\xdbw\x95\xcf\xe6\xf2|y\xa8\x06\xe0Q\xe8uK\x11P\x04\x14\x81\xb2A\xa0\xd0!\x9d/x\x8e\xae\x9fG~\x16\x99\xe5\xe5.1\xe2\xa4L\xc9\xae\xe4=\xfc\xcb\x03\xf2\x9b\xff\xdc#s\x16\xa9)p&\x9cJ\xbd\x8f\x81[\x86\xfa\xe3r\xee\xd5+MS\xecu+\xa4]\\\xd9\xa7\xf0\xc9\xb2^x\xaaWj\x1b\x82\xd8.\xa4\xc4\xd9{.\x03\x810\xa26\x93\t\xd4\xa2\xf2\xf0\xec\xbd\x19\xca\xbc\xe7M\x01\xd7\xe1\xab\xd7lA\x99\xf7[\x9bW\xbe\x08\xf0V\xac\xc5L\xf9\xb9\xc4\xc8\xa4\x8d$\xc9f5\xfe\x96,Yb\x8e\xcb\xa4e7i\x01>\xff`\xdbv\xe3\x8d7\x9a\x9a,!8\xb1Z\x1b\r\xf8\x7fa\x06\xcc@ \xb9>\x86\xf4\x1bX\x0b,\xea\xe0\xf7\xef\x96\x8e\xa7\xa4o\x14A9\xf0\xe7\xcb\xd0\xed2\x80\'\x9c\xbd@B5\xf0Y\xa8\x8eC\'^\xce\xfc\xbf\xe3\xc2\x07\x10\x00d\xb07&}\x9d\xd1\xfc\xcb)\xe2\x99\x86\xa0\x84\xe08wI\xbd\\~\xcbz\xe9;\x1212d\x11\x9bP\x11U1\xcebl\xd8\xe5\xe5\xfc\x95\x05\xe9k@\xed\xb6*\xe2\xae\xd0F*\x02\x8a\xc0lC\xa0P\x02\x90\xf2!\x87\x10.\x8d\xffu\x1ax\xb9\xca\x8di\xa7\x1e\xbbiWy\xbf\xf17\x7f\x94\x83\xcf\x0fJ\xc3\x9c0\x04m\xcf\x8a?\xb62\xfd\x96\x17\x02\\ug\xf4=\x06\x03\x99\xb3\xb0\xde\x94\xe1\x85\x19\xb0m\xccS\xf7v\x9ak\xae\xd1\xfd,"\xd9\xff\xa7P\x1c\x8f\xa5\xa4\xb9\xad\x16\x16<\x8e\xb4\xe7\x87/\xa6\xec[\xa4G*\x02/E\xc0\x12\x04-U!\xa3\xfd\xe7\xb3f\xc2K\x1b\xa0{\x14\x81I\x10\xe0bT\r\x08-\xab\x01hI\xb2\xf4\xc3\xed\xbb\xb5\xb1\xb1Q,\x01\xc8\x00\x1c\xe5\x92l[\xce>\xfbl\xd3$\x12\x82v_z\x1b\xadd\xf5hl@\xfaa\x06\x1c\xc6\x9a\xae\xdd\x97~\xdcd\xdb\x01\x1c?\x1f\xa6\xbf\xef\xeb|F\x1e\x8b\xf5\xe3\x1b\x16\xf1r*a\xb2\x92_\xba\xdf\xca\x86\x1bA\x00\x92\xacJ\xa9\x85\xc0KA\xcas\x0f})\xd6\xd4\x06\xe1~\'*\x03\x9d\x8e\x06`9/\xc0\xf2^\xb0\xed\xbb\xe9\xe3[\x8d\xcf\xbf8\xfcS\x1b\x95\x84<1\x98\x89\xa7\x11\'ZH3*2\x93k-\xedWWi;n\x87\xf6\\^#~\xb5G\xcbU\x04\x14\x01E@\x11p\x11\xf0BB\xe5\x8b\x9d\xe5\xfc\x00\xf9g\xee\xb6}\xe9\xe3ka\x89\xc27\xc9$\x9a\x84~\xed\xaf\x1f\x95\xda\xba\xa0\x04\x83^4\xbb\xb0v\xe9\xd9\xc7"\x90\xc2\xea{0\\-g]\xb5\xdc\xfc\xe0\x85\xb9\x88\xd5Rx\xe2\xee\x83\x92\x8c\xa7P\xfe\xb1u\xea\xb7\xe9\x11\xe0\xc44\x19\x1b\x95\xe6y5\xd2<\x17>\x1a\x99\x1c\x1e\xd0\xd9\xd6OE\xa0\x8c\x10h\t\x04\xa02\xa0s\x852\xba$\xb3\xbe)!\x0cf\xc3\xa9\x84\x1cL8\x01@2\x01b\xc9\xb4\xc5\x8b\x17\x0bI@&K\nf:\xbe\xd8\xfbl[\xda\xdb\xdb\xe5\xb4\xd3N3\xd5g6\x03v\x9e\xbd\xdd0w~::h\xb4\x00\xb3\x8d\x06\xcc\xe3\x16\x07j\xe4\xb6\x81\x17\xe4?\x87\x0f\x99:\xb2=7W<\x0c\x91\xe1.\x04\xaf\xdc\xd8*\xf1(\x14\x8dT,\xcc\x15\xc6I\x8f\'iK\xff\x7f\xd4\xa2\x1bq\xc9\xa2\xb4\xd0\xb1\x93\x9eW\xaa\x1f\xec\xfd}\xfaeK\xe5\x94\x0b\x17\xc9`w\x14\xc1\xcfT\xd0\xc9t=\xf8\x84G\xad\x06`\xa6\x03\xbc\xdb\xc7\xe81\x9e\xcd\x05\xbdk\x96\x96\xa4\x08(\x02\x8a\x80"\xe0\x85\xc8dgk\xfc\xff>d\xae\xfap\xe4\xb5\xfb\xb1YX\xb2&\xa5\xcf>\xdc)?\xbd}\x87\xcc]Tg\x08\xc1\xc2J\xd5\xb3\xbdD\x80\x17\x9b$\xe0&D^c\xa2\xa9)\x85\xf4B\x12\xc9_\xa6\x91\xc1\x84\x1c\xda3\x083\x9f |\x978\xfb\xf43;\x04H\x9e\'@\x9e\xa6\x13\x80^\x90\xb3\xd9\xd5\xaeG)\x02\xd9!`\xb5\x84Z\xaaC\x981x6tdW\xb9\x1e\xa5\x08L\x82\x00\x87\x1b\x06\x00\xe9\x80)k\x17|\xda1e\x1a\x82,\x01\xb1|\xf9rs\x0c5\xec\xec>\xb3\xa3\xc4\x1fl\x8b\x8d\xfe{\xd1E\x17\x99\xd6\xd8\x05\xb6\xf4\xa6\xf1\xc9\xa3\xd6\x1e\xd3\x13\x89!\xa9\x83\x1f\xc0l\x9eG\x92\xf6K\x02\xb5\xf2\xdf\xc3\x87\xe5S=\xbb\xcc\xf9\x05\x0e\xff\xa6\x8c\xc9>\x18\xd8\x8ai\xc1\xcaFY\xb6\xa1EF\xfac\xf0u\xeb\x858;Y\x8d\xb3l?n\xf2\x10|+v\x1ft\xb4\xff\x8c;\x962}-\x1b2\x18\xaalAh\x81^\xfb\x81\xcd\xd2\x0f\xf2O\\_\x80\xb3\xec\xaaM\xdb]\xca~|\xee\x87\xe1\xb2\xc7\xc7d\xef\x94t\r@\x1f\xab\xd3\xa2\x15\x01E@\x11P\x04rE\xc0+\x89\x8921\xcb\xda\x81\xfcYw;\x93\x9c\x8c\x9f\xf2KV\x98\xfe\xaf/l\x97\xa7\x1f\xe8\x90\x96\xf6ZI\x81d\xd2T\x1e\x08TC\xb2\x18\xea\x8b\xc9\xca\xcdm2o\xb1c\x06\\0\x03\xc8\xae\xb9\xb3\x88\xa7\xef\xeb\x90\xfa\x86\x10\xcc<<\xbd\xad\xca\x03<\x9f[A2\xb6\xbe1$-\xae\x1f@\x9f\xab\xd3\xe2\x15\x81\xbc\x11hA\x00\x10\x92\t~\x92\x07y7NO\x9cu\x08\x8c\x81\xfe\xaa\x83h\xd3\x99\x8aIW\xca\x994[\xb2:\x1d\x0cK\xa6\xad_\xbf\xde\xec\xb6N\xf6\xd3\x8f)\xf5\xb6\xd5\xf8\xbb\xee\xba\xebLS\x92I\xd7\x0f\xd8$\r\xfb\r"\xf8&@\x16\xd0\xacw\xaad"\xfeB\xf3\xef\x91X\x9f\xbc\xa3s\xbb9\x94\xcf\xaf\x9f\xd2Y\x95+\x06\xac=y\xae4\xcd\xa9\x85\x85\x00v\xe8Kc\xaa\xcb\x94\xdbo\xbc\xe4 \xd5\x0e>?\xe0\x9c7\xf5-\x90[\xd9\x9e\x1f\xed\\\xf8k\xde{\x82\xcc\x83\xff\xbf\xc8\x10\xee\xeb\xb2n\xaf\xe7\x00\xe4P L\xfa\x01\xcf`\xb7\xab\xcd\xec\xaf8\xad\x04`\x0eWF\x0fU\x04\x14\x01E\xa0\x98\x08x=L\xb2\xbc\x7fF~\x069\x80\xec\xd9\xf0B\x01\xdb.\xf0~\xf9=\x0fI<\x92\x94\xbaF8\x8c\xf7S\xcaD\x074e\x87\x00W\x16\x8d\xa9)\xccL\xd7m\x9d\xe7\x9c\xe4\x81@n\xcd8v>\xdc%\xe1z\xdcRz\xbd\xb3\xbb iG\x11\xb2\x04\xb43\x17\xacpL\xd3\xac\xaf\x9c\xb4CtS\x11()\x02\xf6\xb1f\x10\x90\xa4g\xa3FI\xbb\xa4\x95\xcf\x00\x04x+\x86\xa0b\xd4\r\x13\xe0\xa9\x92\r\xb2\xb1y\xf3fs\x98]\xb0\x9c\xea\x9cb\xfff\xcd\x94\xb7l\xd9\x027*N\xb0\x9dL\xed\xb4\x04\xe7\xdd#=\x12\xc1`A?\x80\x93=\x92$\xeb\xe7 XHG2.7\x1dy\xd2t\xc9\xf1\xfb\xe7o\xefR\xae\xf3\xb2-0\xf7\x1c\x82\xf6\x1f\\4j\xf2\x10\x81\x00\xfc:s\x81}\xffN\x87\x00,W\x99\xc1\xd1L\x84\xe9\xf9\xeaf\xb9\xe8\x86\xe3\xa4\xffp\xd4\xb8\x0c\xf2\x10\x8a\x19U\x14\xe7P\xd4\xe8\x1d@p\x17&;\xeez\xdcI[l\x8f\x7fUx\xdcb-N\x11P\x04\x14\x81Y\x86\x80\x97\x04\xa0\x95\x11)1\xbc\x0b\xd9\xf3\xe8OF\xf9\x0b&\x8d\xbd\x87#\xc6\x1f`C+|\x9a\x19\xfd\xffYv\xd5\xca\xb4\xbb$\x01#\x03\t9y\xdb"\xd3\xc21\x0f\x82\xb5X\xc1\xf3\xc0\xce~\xe3\x8f&\x04\x1f\x90\xd64\xb8La(\xbbf\xf1\x11I\xc0G\xd2\xc2\x15\xcdN\xdb\x14\xc0\xb2\xbbF\xda \x07\x81Fh\x00r\x82\xe2\xc1\xda\x81B\xaa\x08x\x82\x00}\x00\xf6\xb8\xda\x7fA\xdc\x99vv\x9b^\xf8D\r@K\xb6\xa5\x1fS\x0e\xdb\xb6\x9dW]u\x95i\x8e\xd5\nLo\x9b\xed\x1f\xc9\xbd\xc7\x11\xc8\xa3\xc1\xae\xbc\xa6\x1f\x84m\x1eW\x87\xe7\xb5\x1a\x03\xcc\x9b\x8fMbRp\xac\xd6:\xbf\xf6h\x97\xbd}"\x8f\x96\xab[\x8a@\x01\x08\x841A\xe1\xa4Do\xcf\x02@\xd4S=C\x80D\x17\xad\x0c\x0f$\x10Y\x94\xdb\xe63\xf3G8\x1c\x1e\xff!\x13\xa96\xfec\t7\xac\xc9/\x89J\x1b\xb0\xc4\xeeKo\x96\x8d\xfc\xfb\\bX\xf6"\xd7\xc3\xc9\x9e\xe5Wh\x06\xbd\x08\x11\x7f?\xd2\xbdS\xfe\x0bQ\x7f\x99|&\x12\xc6\x9b\x86\xd7\x83\x8c\xbar\xde\xaa\x13\xe6\xc0\xb5\x05\xe4\x8d\xf1_u\xc3\x0b\x04\xa8!\x16\xae\x0b\xc9\xee\xc7\x1d\xfe\x86\x98\x97[\xb2V\x0c\x97\xbdy\xbd,;\xbe\x15Qmc\xaa\xfd7\xcdE\xa2\xe1\x0c5;\xfb;\x9cw\x999\xdc\xdf\x07\xf7\x88\xdb\xa42\xbc\x83\xa6\x01K\x7fV\x04\x14\x01E`\x86#\xe0\x01=\x93\x11!\xca\x8a,\xfb\xbf\x90\xefp\xb7\xad\xfc\x88\xaf\x85\xa71H\xe54\x01\xe8\xc3`\xf6\x95\xf7=$\r-pU\x1d\xd4q\xa6pd\x0b,\x813$Hg+O\x9ak\nb\xc4\xb1\x82\x93;\xebza{\x1f\xcc}p\xddaj\xac)7\x04\xb8Z\x1e\x84\xb6\x04#&2\xe9\x93\x92\x1b~ztq\x10\xa8\x85n\x91\xbfs\x92\xe2\xf4Ck\x999\x08\xa4\xaa\xa0\x01\x98t\xa3ff\xb8;-\xd9\xb7f\xcd\x9a\xb2\xef4\xdbJ\xad?\xa6\xd3N;\xcd\xfc\xb7\xed7_\xdc\x0f\xfb\x0c\xf6\xa7\x92\xf2\\|DZ\xaaC ?\xcd\xe0.KC5\xf2\xf7\xbd\xbb\xe4k\x03\x07\xd2O)\xcav\x95k\xe2\xb9he\x93\xac\xda\xdcf\x88\x9f*u\xfa\xe6-\xf6\xb8\xf8u\xf5\xd5\xb2\xe7\x89^Sn\xa6\xfb\xc3\xdb\ns+\xcd\x10\x92hc}sX.\x7f\xebz\xe9\x87?\xbbt\r\xd5\xdcJ\x9bMG\x8fJ\xa0\xb6Z\xba\xe0J\xc7\xe7d\x15\x88\xad\t\xb0\xcf\xd5i\xf1\x8a\x80"\xa0\x08(\x02\xb9"\xe07\x93B\x9e\xe1\xbd\xc8{\x90\xcdbz\xae\r\x9c\xeaxk\x02\xf0\xc4o\x8f\xc8\x7f\x7f\xfei\x99\xbb\xb8\xdeh\x88Mu\x8e\xfe\xe6/\x02\xd4\xce\x8b\x8e$e\xe1\xf2\x06C8\xd1\'\x90\xd5\xd6\xcc\xb7f\xeb\x7ff\xdf\x8e>\xf8/Q\x020\x1f\x1c\xf9\xacP\x90\x9fg\xcd\x80\xcbqY?\x9f\x8e\xe993\n\x01\x9a\x00;D\xc3\x8c\xea\x96v\xa6B\x11\xa0\xd0Bm\xa3\x03\xae\t06_\x92l\xc0\x8f\xe3\x8e;\xee%\xbf\x95\xe3\x0eK\xe8\\z\xe9\xa5\xa6y\x96\x10Lo+\xfbIM?\xa6\'bC\xce\x16lo\x97\x07\xeb\xe5\xb6\xde\x17\xe4\x8b\xfd/\x98\xdf\x8a\xbd\x90d\xdd=o8\x0b\xfe\xff@\x00%\xe3\xd0\x00,v#L\xcfg\xe6\x07\xef\xf5jh\x89E\x87G\xe5\xe0\xf3eh\x02\x9cv\xad_\xfb\x81\x13\r\t\x18\x83\xbci\xd4\rf\xe6%\xf1\xacW|v\xb8\x08|\xe8\x05\xe7\xba\xfa\xf4\xdc\xf0\xd5\xc1\xabD\'\x83\x0e\x83\\<\x05a\xcf\xb0\xd2\x82\x14\x01E@\x11\x98\xe9\x08\xf8I\x00r\xb9\x98\x03\x01mD\xfe\x1c\xd9\xd5\xe3\xc2\x96\x87\xc9\x0eb?\xbe\xfdi\xb9\xf7\xbf\xf7I\xdb\xc2\xfaq\x13\x11\x0f\xab\xd1\xa2\xb2D\x80\xab\xf1\xb1\xe1\xa4,X\xd9(\x0bV4\x99\xb3\xd2d\xb6,K9\xf60k\xee1\xd4\x17\x97A\xe4`\x08\xbf\xfbr7\x1d[\xef\x8c\xfa\x06\xbc\xa889\xdf%\x00\x0b\xbd&3\n\x1b\xedL\xd9 \x00=\xee\x0c:Ve\xd3\xffZ[[e\xc1\x82\x05\xa6 \xab\xc5\x98^\xaa\x8d\xe8\xfb`\xb4W\xda\x83a\xb9s\xa4K\xde\xd7\xf5\x8c9\xa4\x14\xe4\x9f\x95\xf3\x1aZB\xb2\xe2\xc46\x89E\x12\xea\x0e$\xfd\x82y\xb0=\x86[\xb7\xa6.(=\x07\x86%2\xe4\x98\x8a\x97\x13\xa1m\xad~^\x8d\xc0\x1f\x08N-q\xc8\x9aJ\x02g\x7f\xe1\xa9\x01\xd8\xb1w\xc8y\x86\xfd\x99\xfd\xd9W$\xcd\x7f\x99\x99\xec>\xe7\x9b~*\x02\x8a\x80"\xa0\x08\x94\x1c\x01\x7f\x86\x80c\xbbE9\x9a\xf5|\x14\xf9Id\x12\x82\x9eJ\xc8\x86\x04t\x83\x82|\xee-\xf7Jl$%u\x8d \x015(\x08\xa0.M\x8a\r\xa7d\xd9\xa6VS\xb9\'\x02$g\x1cH\x07w\x0f\x98\x08uV+\xd0\xd9\xab\x9f\xd3!\x00\xfeO\xe8?\xa9}\x99K\x00Nw\x82\xfe\xae\x08\x94\x00\x81\x1a\xbc\xc7\xe9\xac\\\x93"P\x0e\x08\x04 \xbat\xa6\xd2\x9c\xe6O\xd1\xa8\x15+V\x98_=\x19\xef\xa6\xa8\xc7\x8b\x9fl\x1b\xaf\xbc\xf2JS\\f\x02\xd0\xa9)\x81\xc1\xf6\x1fzv\xcb\x9b\x8e2\xa5\xad\x91\xab\xe7M\xf3j\x9ck\xa2$Ki/\x86\xd6\x9e\x11\x01\x9a\\\xda\x01#\xe3\x01\x05\xec\xf4\xab\xdc\x02\x9a\xa4\xa7\x961\x02c\xf03A?x]\xa9\xa9\x99&K\xa6\xcd\x9d\xeb\x04\xbe*\xe3.\x8d7\xcdj)^|\xf1\xc5f\x9f\xd5b\x1c?`\xc2\xc6\xa7zw;\xc7\xe1\xb3$\xcf\x11$\xc6T\xd2\xa9\xf9\x84s\x17\xa2\r\xf8K\xe9 6\xe12\x15\xfc5\x00?!\xa9DJ\x9e{\xd4\x89\x00\\.\xaeVx\x7fZ\xf3\xef?\xfb\xcbM\x92\x88\xa7\xe0\xea\xa7\xe0\xee\xce\x9a\x02(\xfb\xd5@n\xee92b\x02\'\xb2\xe3\\\x14\xf61\xd9\x08A\x9cc\x96\xe4\x95\xe1c\xdf\xb4hE@\x11P\x04*\x1e\x81b\x10\x80\x04\x89C\r5\xff\xeeA\xfe\x082\xeb\xf5|\xf8\xa1 N\x9eh\xc7\x03\x9d\xf2\xf5\xbfyT\xda\xe6\xd7c\xd5\x185i*2\x02\xd5\x92\x88\x8c\xca\xf2\xf5\x8e\x06\xa0\x17\x95\x8f\xb9w\xea!\x10\x80\x81P\x95a\x90\xbd(w\xd6\x94\x01\xfc\xe80\xbd\x11\xa6\xd9L\x0ea>kz\xaf\x1d\xad\x10\x04\xb82\xe4W\xf2\xb3l\xbf\xda\xac\xe5\x96\x0e\x01\xceZC\x18i:G\xb9f\xe9\xacZ\x9a\x8d\xb4\x0f\x12\x13\xc9\xa4\x13\xea\xbe\xb9\xb9\xd9\xfc2\x1d\x99\x96vz\xc97O=\xf5T\xd3\x06\x06\x02\x99\xae\xdd|~J5\x93\xb7mkl\xad\x915\'\xcdE\xf4_\xfa\xff\xd3\'\xda\xeb\x1b\x88f\xb5\xa9T\x95<\xf3\x80C\x00\x96\xcdB\xab{\xa9O\xbfl\xa9l\x84\x06\xe0\x00#\xff\xaa\xf6_\xd6\x97\x9f\x84y\xa8.\x00\x05\x89\xa8D\x06\x9c\xf7\x99O\xab\xe8\xf6\xa1\xdc\x93u\xe3\xf4@E@\x11P\x04\x14\x81\xa2#P,\x02\x90\x1d\xb3$\xe0\xe7\xb1\xfd#d\xcfM\x81Y\x89\x15P\x7f\xfb\xfd=\xf2\xd3/\xed\x90\xb9\x8b\x10\x14\xa4l\xa4\x18\xb6p\xe6\'\xc4\x01\xc1\xa4\x08~\x00[\xc2\xd0\xc4\x84D\x89\xe4*\xf0\xe5\xdfy\x97.\x1e\xe8\x8a\xc8\xc8@\xd2D\xaa\xd3\xcb\x9a=\x9c\x94\xca\xb8\xb2\xcf\xc8\x89G\xaf\x85\x95\xd5\xb2/G\x8fT\x04\xfcD@\xefH?\xd1\xd5\xb2sA\x80\xb2D\x10\x83\xd9t\x1a\x80\xb6\xcc\xb6\xb66\xbbY\xf6\xff\xad\x1f\xc0\x95+W\xca\xea\xd5\xabM{\xed\xbe\xc9\x1aoe\xab\xc9~\xf7s\xbf\xe5\xfa\xd6n\x9d#\xedK\xeb\x8c\x9b\x17%\x80\xbcE\x9c\xd62\x81PP\xfa:#\xd2\xdb\xe1\x98\x89Z\xedVok\xca\xb14\x0c\nV\xfb\xefU\xef\xdc(\x83\xbd\xd6\x88(\xc7rf\xf3\xe1\xb8\xb6\xe1Zh\x00\x1er\xae+\x9f\x1d\x9f\xe4g;\xa7\xb4\x04`)_\x1b\xb3\xf9\x8ak\xdf\x15\x01E@\x11\x98\x12\x01\xfb\xb2\x9e\xf2 \x8f~\xe4@@\x1a\x87\xa3\xf7\xdb\x90\xf7"\x93\x04t\xa9\x1dly\x91X\x8b;\x8b\xfc\xcf\x7fzR\x1e\xbas\xbf\xcc!\t\xa8\xfe\x00\xbd@7\xeb2L\xd0\t\xdc]\x8b\xd749\xe7\x1ce\x9d\xb2.#\xd3\x81\xc3\xfd\t\x19\xea\x8d\t\xfd\xd4\x8c\xb3\xbd\x99\x0e\xd4}\xc7"\x00\xfc\x930\xa1jh\nK=\xb2I\xca\xb6\x1c\x8b\x91~+\x03\x04t\xbeP\x06\x17A\x9b\xe0"@\x13\xe0\xced\xcc|\xcb\xa4wn5\xd3jkk\xa5\xa5\xc5qy\x91\xc9\x9f^\xb9\x01\xcavS\xeb\x8fi\xf3\xe6\xcd\xe6\xbf\xed\x8b\xf9Rf\x1f)W~;\xe7\xd5+\x11\x9c"\x89E,}Ox~\x89`\x13Z\xdb\x18\x90g\x1f\xb1\xb1\x1b<\xaf!\xaf\x02\x19\xf9\x97i\xdb\xeb\x8e\x93%kZd\x04\xc1I\xb8\xc8\xac)\x07\x04\x80\x17\xcd\x80\xf7\xef\xecsN\xf2W\xf6\xe3\x9c\xce\x89\x16\xa4Rz\x0e\x17I\x0fU\x04\x14\x01E\xa0x\x08\x14{\x18\xa5\xd4F\xd2\xef\x08\xf2\xdb\x91\xe9\xc5\x83\xfb\xbc\x95\xe6PZ\xb5\xbbd\xfc\xc5\xffs\xbf\xbc\xf0T\x9f\xb4-\xa8\x93Q\xd7\x87\x0c\xea\xd3\xe43\x02\xf4\xcf\x12\x08V\xcb\x82\x95\x8d\xa6\xa6B\xe5\r\xbbZ92\x98\x94\xe1\xc1\x84\x04@\x00\x8e\xf9\xec\xc4\xc4g\x88\x8aZ<\'w\xd4\x00\xacm\x0e\x82\x00t\xb52\x8b\xda\x02\xadL\x11\x98\x1e\x01\xfa\x00\xd4\xa4\x08\x94\x03\x02\xd4\x88\n!\xc4h\xe7\xa8C\x94e\xba3-\xd9G\xf3_K\x00\x96\x85\xd6T\x16\x00Z\xc2\xef\x9cs\xce1G[S\xe6,N-\xea!.\xffc\xac\t6\x9d\xb9\xc0\xb1\x00\x80\xaf:M\xde"@q\xaa\xae!(;\x1e\xa4x\x0e\xf9\xcd\xaa]z[MN\xa5\xd1\xcc\x9b\xc4U\x08\x01,^\xf9\xc6\xb5\x90\xfd\xa0?0V\xa84\x99S\x13f\xc4\xc1\xf4\xed\x98L\x8ca.\xd4k\xfa\xe3\x93\xe8l\xe7q#\xa8\xe4Y\x178\xbboF\xe0\xa8\x9dP\x04\x14\x01E`\xa6 P\n)\x8a\xa4\x1fI\xc0;\x91?\xe6n{\xab\x05\x88B)4X\x01\xf7\xd3\xaf\xbfGz\x0eG\xa4iNXR\xd8\xaf\xa9\x08\x08`\xf6\xc4U\xdayK\xdd\xa8\xb3\x05\xdfi\xceuKD\x93F\x030\x08?\x80z%\xb3\xbf\x8e\x14\x99\x195\xb1\x11f\xd9\xf50\x036\xa9\xe0k\x92}\xfdz\xa4"\x90\r\x02v\xb2\xaf\xb7f6h\xe91~"\xc0\xf1+\x85Q\xa6\xd7\xf5\x018U]\xad\xad\xad\xe3\xf2\x86%\x05\xa7:\xbe\x1c~\xb3\xed\xbc\xe8\xa2\x8bLs\xca\x95\xb8d\xf4z\xa63\xffd\xb9\xd4\xd4\x05\x11\x00\xc2sq\xd1\x94?\xdb?\xaa\xb1`\x1b\x8f\x8d\xca\xbe\xa7\x19\xbc\x15<[9\xbc\x84\xddK}\xe1\x8d\xc7\xc9\x82\xe5M2\x02\x0b\x10\xf5\xeb\x9d\xfb\x9d\xcaw\x19\xcd\xa8\xf7<\xed\x10\x80~\xd9\xff\xba-\xdb\x83\xff\x83\xee\xb6\x8a\xe9\xb9_.=C\x11P\x04\x14\x01\xdf\x11(\xd5\x10oI\xc0O\xa1\x87\xdfG&!\xc8}\x9e&\n\xb4\xf4u1\x02\x8d\xb1\xcf\xbd\xf9\xf7\x12\x8f\xc2/\x1d\xcc\x1f\xc7\xd4\x1c\xd8S\x9c3\x15F\x9e\xb5\x1a\xab\x8e\xf3\x16\xd6\x9b\x9f\x0b\xbd\xd1\xa8\x01h\xc9\x81\x08\xb4\x00\xa9]\xe8\xb1\xf1x\xa6n\xcc\x9c}\x98C\xa5\x105\xb1\x16\x13\xa8\xfaV\x97\x00\x9c9\xbd\xd3\x9e\xcc\x18\x048\xd9\xd79\xc3\x8c\xb9\x9c\x15\xda\x11\xde\x81\x01h\xa3\x0e!\x02\xf0\xf0\x14\xd1f\xed"c\xa5i\xff\xf1\xb2\xd8\xb6o\xd9\xb2e\xfc*\xd9}\xe3;J\xbc\xc11\xdfZn\x9cz\xc9\x12,\xe0\x92\x92U\x02\xd0\xeb\xcb2J\xd9\x00\xfe\x9a\x0f\xef\x19\x90\xc3\xcf;\xdc\xcd\x98\xe7\x12yn\xad\xe6\xb5g\xf0\nj\xaf]\xf6\xe6u\xd2\xdf\x13\x85\xdc\xc7\xf1AS.\x08P\x939\x18\x0eJ?|;\x0e\xf79\xda\xcc\xd6\xa2&\x97r\xb28\xd6>\x984\xffed$\xbdXY\x80\xa6\x87(\x02\x8a\x80"P\n\x04\n\xe5e\ni3el\x0e\x18\x7f\x8e\xbc\x13\xd9\x17\x12\x90\xbe\xff(\xd4\x1e\xdc= \x9f\xbf\xf5>\t\xc3t4\x08g\xb8>\r\x80\xe8\x86&"\xc0\x91\x9f\xda\x96M\xed5\x06\x90)\xe6P\xe6\xf7l>\xac&@\x8c>`\xd4\x04(\x1b\xc8\x8e9\x86\x025I\xc09\xf3k\x9d\xfdV\\;\xe6(\xfd\xa2\x08\x94\x0e\x81\x994c0\xef@@I\xcaBS\xe5!@G\tQ\xf8\x9a\x8b\xbak\x93S\xbd.-\x01H3\xdar#\xd1&C>\xbd\x9d\xe5\xea\x07\xd0\x8e\xf9\x0bV5\xca\xfa\xd3\x10\xfd\xb7\'.\xd50\xcb\xd6\xe4-\x024\t\xad\x85k\x90\xfd;\x07\xa1\x05\x98B\x84e\x87|\xf3\xb6\x96\xdcJ\x83\xe4nN\xb8\xea\xcf7J\x0bd\x96\xe8\xb0\x13m;\xb7R\xf4h\x98CIMC@\x9e{\xb4\xc7o0\xec@\xf7\x84[\xd1L\x1a\xce\xfd\xc6N\xcbW\x04\x14\x01E\xa0\xa8\x08\x94R\x92\xa2<\xcd\x01\x82\x0eG\xde\x84\xcc\xf0Tl\x8f\x1dD\xb0\xe9M\xa2& +\xda\xf5h\x97\xfc\xfb\x07\x1f\x91\x96\xb95bLH=\xaf\xc9\x9b\xf6\xce\x88R\x00x\n\xe6$\xf5\x8d!\xd3\x1d\x9a\x1f\x90\x80\xf2"\r\xf6a\x12P\x06\xfei\xbc\xe8K1\xcb \xfc\x8c\xce\xdc\x02\x7f\x98LJ\x82\x1b\x18\xf4\xa3\x8c\x10\xe0=:\x15\xd1RFM\x9d\xb2)a\xcc\xa0Cx\xe1-\x08\x84dNu\x08\xea\x10c\xde\xab\xb8O\xd9\x02\xfd\xb1\x10\x04(\x1aP\x030\x8a\x05\x93(Uh\xa6I\xf4\x01\xc8T\xaef\xb4\x935\xdf\xb6w\xdb\xb6m\xe6\x90\xe9"\x01OV\x8e_\xfbm\xf4\xd73._\x06\x12#\x84\xc0%\xa3\x86\x9c\xf2\xab\xbe\xd9Zn\x95\x89\xaa1&;\x1f\xee0\x10\x18\xf9\xaa\x84\xf2\xb1\xf1?\x08\x01\x85\xeeJ.x\xed*\xe3\xf6%\x9d\xb0\x9e\xad\xd7)\x9f~S\xce\xab\x85o\xc7g\xff\xd0eN\xf7\xd1\xb7\xa3\x95\xf0\xb7\xbb\xed,\xe5\xfc2\x1f\xa8\xf4\x1cE@\x11P\x04f\r\x02\xa5~AS\xb2\xa6\xe6\xdf\xbd\xc8\x7f\x89L\x91\x83\xfb<\x17=L\x81\x18\x9e\x1e\xf8\xe9>\xf9\xea\x87\xff \xcd\xf3\xea\x8c/\x91,d{4GS\xce\x08\x00k\x9a\x95Ph\xf7:\r\xf6F\x9d\xa8\xceV\xdc\xf0\xba\x82\x99Z\x1e\xf0\x1a\xc3"z\xd3\x1cG+\xd3\x87\xc7l\xa6"\xa7\xfd*\x12\x02\xa3x\xf5W\xbb\x9a\x1fE\xaa\xd2\xd3j8xQsl\x0c\x9aco\xee\xd8.\x1f\xeb\xde%/$\xa3\xb22P\'\xed \x02\x1d5w\x92\x81\x9e\x0fq\x9e\xf6C\x0bc 1h\x00\x82\xba\x8dMAI[\x02m\xce\x9c9\x06\xb2J#)l\xe0\x8f\xf3\xce;\xaf,/\xb9\rVp\xd6U+d\xa8;\x06\xf2\xaf\xd4"kY\xc2Tp\xa3\xf0j\x12\xba\xba|\xf2\x9e\xc3\xa6\xacR\xcb\xc5\xd6b\xe4\xca\xb7\xad\x87\xacN\xed\xbf\x94y\x1e\x0b\xee\xe8,,\x80dn\n\x01@\xf6mw\x03\x80\xf8\xf3\x08q@\xe3\xf06\x8c\xfc\x82\x0b\xb3\x0er.\x10\xfaO\x11P\x04\x14\x81rC\xc0\x9f\xa1 \xb7^\xda9\xd3\xbf\xe1\xb4\xdb\x919\x88p\x9f\xf7\xc9\x1d\x8e\xee\xf9\xcf=\xf2\xbd\x7f|\\\xe6-j@\xa43\xef\xab\xd1\x12\x1d\xd5\xce$\xa2.\xd75\x06%\x04\xbfs&y\xa4\x02\x18\x81\t0\xd5\xd7<*n\xd6\\.\xe2\x95\x84\x06E\xf3\\\xc7\x04X5\x00g\xcd\xa5\xaf\x98\x8e&\xdd\x19\xbf?\x03\x80\xff0\xd0?Y]uP\x0e&\xe3\xf2p\xb4W\xbe1\xb8_^q\xe0A\xb9\xee\xc8\x1f\xe5\xeeH\x8f4U\x85di\xb0V\x9aU+\xd0\xff\x8bQ@\r\xf4=\x16\x04\x11M\xed\xbf\xa3\x1a\x80/\x9d\xcf\x8e\xbaL\t\x83\x80Tb\xb2\x84\xe5\xc6\x8d\x1bM\xf3\x13\x89D\xd9\x980W\xbb\xfe\xde\xb6^\xbcD\x16,k\x90hDI ?\xee1\xde\xc2\xa1\x9a\xa0\xf4vD\xe4\xc8>\xf27\x10\xaf\xe8\xc4\xb9D\xc9\xb9\'\xc7\xa4\x11\xbe\x8a\xcf\xbbn\x95\xf4\xa3]\xea\xfb/\xbf\x8bA\x17H\xe1\xfa\x80t\xe2\xba\x1e~\xc1^\xdb\xfc\xca\x9a\xe6,;d\xef\xc3q\xccLv\x9f\xf3M?\x15\x01E@\x11P\x04\xca\x06\x81r\xa0\xbf(i\xd0\xdd0\xf5\xb9\xde\x83\xfc\x0bdGQ\x02\x1b\x9e\'\xd6\x82t\xe7\xbf?+\xdf\xff\xec\x932wi\xa3\xeab8\x90x\xfb\t\xb6\x89\x91\x98kj\xab\x91y9\xbdK\xd1!\xea\xcf\xe0B\xba\xd7\xd2\xbb\x92g~I)\x08\x84-\xf3\xac\x06\xe0\xcc\xef\xaf\xf6\xb0\xb2\x10\x80\x81_E?\xd6\x9c\xf14"L\xe5s\xf1!\x03|\xc8x\xb5\x10\xf9-\xc8\xbf7u\xfb\x12\xbc;\xd2\xfa\xfek\x9e\x1b\x96\xb3\xafZ.\x834\xfb\xb6\x02\xbbw\xd5\xcc\x9a\x92\xf8\x14\x05\xf1\xdc\xbc\xf0\xa4c\xfeK\xadZ\x7f\xf8?w\x80\x83\x15\xb9\x0b.\x85sK\n\xce\x1a\xbc\xb5\xa3\x8a\x80"\xa0\x08T\n\x02\xe5\xc4\xa0\x90\xdea{(\x85\xbc\x11\x99*\x14\xbe\x0c"\x1c\x00\xadL\xf1\x9dO=!\xf7\xfep\xaf\xd1\x04\xa4\xba\xbc&\x8f\x10\x80\xe4A\xd3\x92pM\x00\xe6%\xde\xdef\xb1(\xf4\x84p\x11\xbd-\xd5\xa3~\x97y1c\xd0\xa2h\x81O\x1dM\x8a@9"@\x02\xcc\x99\xfa\x97c\xeb\xa6o\x13\x9d\x1d\xa4\xf0n\xba7\xe2L\xb88\x07\xe2\xa8b\xb5\xfb\xd87\x12K\x11\x10KwG\xba\xe5-\x9dO\xc9y\x07\x1e\x90\xcf\xf4>/\xbb\x12#\xb2"X/\xcb\x83u\xd2\xe0\xfa:S2pz\xcc\xfd8\xc2\n#Q\xeb\x84n\x9aJ\xda\xda\xda\xa69\xa2|\x7f\xb6f\xcc\xa7\x9cr\x8ai\xa4%5K\xd9\xe2\x14\xdc\x870]q\xeb\xf10G\x855\x01\xb5\xff*\xf9\xc5PJ0\xa7\xa8\x9b2\x1a\xad4z\x0e\x8e\xc8\xae\xc7\x9c(\xb1>\x11DS\xb4\xe2\xe8OV\xc9\xf3\xf2\xb7\x1e\x0f\x13\xe0\x1a5\xfb>\nM^[\xd5 \xff\x12\x89\x94<\xfd\xa0\x13\xdc\xa5\x8a/6\x7f\x92\x15\xc7\x1fr\x8b\xd7\xc9\x94?8k\xa9\x8a\x80"\xa0\x08x\x82\x80}i{R\x98\x07\x85px\xa2\xe6\xdf\xfd\xc8\xb7 \xdb\xe1\xca\xf3\xc1\xc4!\x01\x1d\x89\xf2_\xdf\xf3\x90\xfc\xe1\xce\x17e\xde\x92zW\xb3\x0c5k*\x18\x01N,\x02a\x10\x80\xd0\x02\xf4"\xd9\x9b`\x14\x02\x8d\x11R\xcb\xed\xee\xf5\xa2\x93>\x96AN!\x85 5\x88\x087\x9etR5\x0e\x85n\x94\x1e\x013\x01\xac\xd0\xe7\x9a\x83U\x18\x0fYW*!{\x12\x0cj\x7ft\x003_\xf0\xc1w\x18\xc9@v\xd1j\x05\x1e\x819\xf0\x17\xfa\xf6\xcae\x07\x1f\x96K\xa1\x19\xf8\xf9\xde=2\x08\xad\xacy\xd5a\xe3/\xb0\x1ee2\x8apR5\x03-\x8cE\xf9\x1f\xc0*\xa1\xf5\xff\xc7\xd7\xa4\x1d\x7f\xd2+\xb7d\x99%\x00\xadIm\xfa1\xe5\xbem5\xfe\xce8\xe3\x0c\xd3T\x1b\x18\xa4T\xed\xaeB\xd0\x02\xa6e\xc7\xb7\xc8I\xe7/\x96\x81\x9e\x98j\xff\xf9t1\xb8 \xd8\x00_{{\xb6\xf7I\x1f|\xed\x91e\xa5\xeb\x96R$\xeb\xfb\xaf\t>\x8a\xcf}\xf5J\xe9\xefR\xdf\x7f\x85^\x87`\xb0Z\xe2X0\xdf\xf1\xa0\x13\x01\x98\x8bS>$\x16\xca\x876\x86\xfc\xb0[\xbe\x9d\xbb\xb9_\xf5\x9f"\xa0\x08(\x02\x8a@9!P\x8eS-\xda\xa3\x90\xa1\xf8.2}\x02r`\xf1e0\xa1\xf0n\x85\xcd\xff\xfb\x8e\xfb\xe5\xa9\xfb:d\xce|\x90\x80\xaa\t\x08\xc8\x0bK\x8e\x08\x8f\x8bW\r\xd9\x80\x99\xc9\xa3\xbb-\x89\x88f\xb6|\xa7`\xfd\xcc\x1a\x01\xde\xf3\x00\x8fB?\x93\xe2\x985rz`\x11\x10\xb0&\xb3E\xa8\xca\xf3*8H!\xac\x14\xcc\x7f\xad\xf6\xdf\xe4U\xf0\xd8\x89Z\x81<\xfa\x8f\xf1~\xf9L\xdf\x1e9s\xff}rc\xc7\x1f\xe5{\x83\x87e\x04\xac\xfd\xdaP\x83,\xaa\xaeM\xd3\x0cT\x9f\x81\x93\xa3\xeb\xcd/\x8cFMMM&K\xd6NVr%\xf9\x00\xa4\xdcC\xb3_.\xd0\x91\xec\x8b\xc7\x1d\xdf`g\x9ey\xe6d\xdd+\xde~\x0cH6\x00\xc5\xb5\x7f\xb5\x19c\x15\x88o\xb8\xad\xd0\xe4\x0f\x02\xf0\n"\xd5\x10\x08v<\xe8\x98\xff"~Q\xc9\x92\xa5\xa6\xaez\xc7\xf1\xea\xfb\xcf\x83\xab`\xb4;\x11\x80\xefyhv\x8e\xf1\x0b\x93\x05\xd9\xf9\xe6\xf5\xe7.\x14x\xc0-\xd4\xdf\x9a\xbcn\xb9\x96\xa7\x08(\x02\x8a\xc0,C\xc0#J\xc6s\xd4\xa0\xa7d4\x01?\x8f\xff\xff\xe2ns\x9f\xe7\x89\xc2\xa6%\x01?s\xf3\xefd\xefS=\xd2\xba\x00$`\x89VA=\xef`\t\x0b\xa4\xf5\x14\xfd\xf6x\xed\xbbg4\x89\xc9\x8b\x8a\x17y]YN\xfe\xaa!\xf53\xc2\x9e\x93\x94\x02\xcc\x0bH=\xc9\x17\x04\xe8?\xafR\xefHF\x00n\xc0\x0c\xfa>\xd7\xff\x1f\t\xa4l\x12_e\x96\xf8d\xe4Y{\xd6\xbd\x91>\xf9\xab\xae\x1dr\t4\x03\xff\xec\xd0\xa3\xf2\xcd\xa1\xfd \x03G\xa5\r\xbe\x02\x97\xc1g`+\xfe\xf3\\k&\xac4I6hg\x7f\x0c\x15\xd1\xe2\xee\x8c\xd9\xba\x0c\x99\xec\xec\xe6\xe6\xe6\xc9~*\xc9~\xbe\xe7\'\x12}\x8c\xf0k\xa3\xfcR\xeb\x8f\xda\x8a\xc1`Pjk\x1d\x97\x10\x8b\x17/\x96\x86\x86\x06\xd3\xdeR\xf9]#\x19\xc5\xb4\xe5\xe5\x8b\xe4\xc4s\x17\xc8@\x17}\xff\xd9\'\xc2\xfc\xa4\x1f\x1e"@\r\xb1$\xcc\xad\xff\xf0\xcb\x83\xa6T\xfam.E2Q~q\xcf\xb6\xb4\xd7\xca\x19\xafZ.\x03\xea\xfb\xaf\xe0\xcb@\xed\xce\xfa\x96\x90<~\xf7!S\x96\x9d\xe7\x14\\\xf0K\x0b\xb0C\xcf\xbd\xf8\x89+&\xfa\xc0\xbe\x14#\xdd\xa3\x08(\x02\x8a@Y!P\xc2\xf5\xbeiq\xa0$B\x82\x92Z\x80+\x90/G&\t\xe8y\x9b-\t\xc8\xff\x9f\xbe\xe9\x1ey\xff\xb7/\x90\x15\x1b\xda\xa4\xe7\xf0\x88T\xab\xf0\t\xc8\xf3H\x10\x01 \xcf\x19\x07\xce^O&F\xc7L\x88\x91<\x1a\xa5\xa7\xf0\x9a\xc0\x81\xa24 2\x9cI\x14\xd5\xb8O\x93"P\x06\x08\xf0\x05_\xa9\xb3\x87 \x86\xab8\xe6?\x8fE\x07\x0c\x92\x1c\xbc\xec\xcc(\x1bh\xf9\x18\xd2\xd4\xd7&j\x9d\xf1\xfc\xbe\xd1$\xa2\x08w\x9b\xfc7\xf2\x9c\xbc\xac\xb6E\xaeh\x98/\xa7\xd7\xcc\x91\x8d5\x8d\x12\xc6q\xfd\xa3\t\x19\x81\x96G\x0cg\xd8@*\x0cHR\xae+|\xb6\x8f\xe5\xfc\x9f\xf7\xa1\x8d\x00<];\xeb\xea\xea\xcc!$\xdd\x8a\x99\xa8\xc5\xc7l\xeb\xb5\xc4\x9e\x1ds\xady\xefD\xd3d\x9e\xd3\xd9\xd9)\x87\x0f\x1f\x96#G\x8e\xc8\x81\x03\x07d\xff\xfe\xfd\x86\x14,f\xfb\x8f\xa9\x0b\x80s\xe15\x00R\xea\xc6\xbf9Y\xa2&\xd8W\x15\x16\xac\x8e9J\xbfx\x84\x00n\x01\xb8\x03\tH\xc7\x8bCrd\xaf\x13\xb5\xbc\xc8\xb7\xefxO\xe8\x9a\x84\xe9\x95o\\\'M-5h\xd30\xee\x03\xbd\xf0\x0e*\xf9}2\xe0G21*\xcf\xfd\xc11\xff5.`r\x19\x90r\xaf\xf6>\xf7\x14\x0e;\x8e\xeat\xeee\xe8\x19\x8a\x80"\xa0\x08(\x02E@\xc0s2\xcd\xc36s\xa8\xe2@\x12E~=\xf2/\x90OC\xb6\xfb\xb1\xe9]"\xf9\xc7\xd5\xe7\xc8pJ\xfe\xf6\xda\xdf\xc8\x87\xee8_Vnn\x93\xbe\xc3Q%\x01\xf3\x81\x19\xf3 \n\xee\\Qv"\xf6\xe6SH\xe6s(\x18\x8eM\xa7\x92\x91\xf9T\xdd\x0b\x0489\xaco\xb1\x1a\x80\n\x89"P>\x08\xa4\x8c\xc9e\r\x1a\xe4\xefL\xc5\xeb\x1eS\x83\xaf\x19\xda\x7f\xbb\x11\xc8cwr\xd8\x14oM|\xf3\xad\xcb\x9eOMBgF\xe5\x04\x14y(\xda/\xcc|\xbf\xae\r7\xca\xa9\xa1\x16\xb9\xb8q\x9el\xadi\x96\x96\xaa\xb0\x84\xa1\xe1\x1b\x1bM\x81\x14La\xf0\xe4<\x8c>\x07\x1d*\xd0\xf9\xcc\xb7E\xb3\xeb<\x84\x9aB\x14`\xe7>\x9c\x8e\x18\xb1Zt\x13\x896\xaf\x10\xb3\x04\x1f\x89;\xbe\xbfi\xc2\xcb\xba,\xe17Y=\xbbw\xef\x96g\x9eyF\xb6o\xdf.\x8f<\xf2\x88\x1c:tH\xba\xba\xbaL\xee\xee\xee\x1e\'\x0e\'\x9eo\xeb\x9b\xb8\xdf\xb7\xef\xe4z\\\xee\xf4\xe6O\x9e"s\xe1\x8f\xb9\xe7\x10\x16`\x95\xfd\xf3\rrj\x885\xb6\xd6\xcb\xff|{\xb7\xa9\x83\xf7U\xd1\xaf;j\xa6(\xc7z\xeb\x9bCr\xde5+\xa5\xafS}\xff\x15z\xd1\x194\xa7\x01D\xea\x8b;\xfb\xe5\x85\x1d\xfd\xa68\x9f\\\x1b\xf1\xa9\xa5\x93o\x0ezO\x99\x8a\xf4C\x11P\x04\x14\x01E\xa0\xec\x11(g\x02\x90\xe0Y\xb2\x8f\xe1\xc9^\x8b\xfc?\xc8\xab\x909\xab\xf1&\xb2\x04\n\xb2\x89D\x15\xd5\xe4SX5\xfb\x87\xd7\xfdV\xde\xff\xad\xf3d\x95\x92\x80\x16\x9e\xdc\xff\x1b\xc1\x0e\x1a\n\x1e\xaf\x05\x1aS\x86\xe2*Z\xe4\xde\xf72=\x83\xab\xfeU\xd0jm\x80\xb0\xcd\x946\xef*\xd3\x16k\xb3f\x13\x02\tCVU^\x8f\x19\xbd\xb8\xa1* \xbb\xe2\x11\x90o\xde\xbe\x9cXv:\x1dJB\x90\xcf-\x1d\xba\xef\x8c\r\x99|\xc7\xd0\x01\xa9\x01\xc9wa\xfd<9\xa3\xaeE\x8e\x0b6\xc8\x06\x90\x83\xc7\x85\xeaa6\x9c\x92\x11\x94\xc0\x80\x16\x0c$B\rA;\xb0\x92ZTR0\xf3\xfd\x06:D\xe2Y^K\xab\x01\x98\xb9\xa4\xdc\xf7\xa6k\xf6\xd1Lw*\x8d>j\xee=\xf7\xdcs\xf2\xe2\x8b/\xca\x93O>)O?\xfd\xb4\xec\xd8\xb1C\xf6\xec\xd9\x93U\xc5,\x9fd"I\x18\xfa\x04\xcc\x95\x04"\x81\xc3\xc5\xd3T\x96XM\xd5\xa8\x97_\xbfZ\xce\xbdz%\xac/\xb0\xf0\xaa\xe4\xdfTP\x15\xfc\x1b\xad[p\xc9\xe5\t\xd7D\xb4\x1a\x12\xb5\xd5\xc4+\xb8\xf0\x1c\np\x9c>\x8c\xc9\xe5\xb7 \xf2osX:\x0f\x8c\xa8\xf6_\x0e\xf8e:\x94\xeb\x16u\xf5\x01\xd9\xf3$\xfc\xff\xe1"\xf3Y\xf2\xc9\xad\x11\x07;\x0eG\xbb\x90\x9fs\xdb\xe2\xed\x00\xe8\x16\xaa\xff\x14\x01E@\x11P\x04\xbcC\xa0\xdc\t@\xf6\x94s\x15\x92}\\\xa6\xbc\x0e\xf9W\xc8\xad\xc8v\xe0\xc1\xa6w\xc9h\x02b\xb0L\xc4R\xf2\x8f7\xdc#\x1f\xf9\xfe\x85\xb2d]3V%U \xcd\x05e{qR\xa3\x90\r\xec\xc4 }\x16\x9bKa\x13\x8e\xa5O N:4\xe5\x83\x005H \x1cZ\x13`\xce\xfe=\xba.\xf9\xb4F\xcfQ\x04\xd2\x11HpFZ\x81\x894\x1a\x89\xb9\xc7\x10\xc4\x83\x89\xbe\xfc\xd2\xcdy\xbd\xec\x12\tA&\xbe\x02\xad\x990\xf7\xd1\xfc\xf7\xce\x91\x0e\x93\xf9\xfb\xfc@XN\x86V\xe0\x99um\xf2\xb2\x9aVY\x15\xaa\x93\x10\xfej\xa0!Hne\x18+34\x1b\xa6\x96 \xcfgy$\x04\xf9\x9fi6\x13\x83\xc4\x80\xaf\xc5\x98\x1b\x04\x84xLL\xe9\x1aS\x85\x10\x80\x96p\xe3\x7fj\xf6YB.\x936\xe1\xbe}\xfb\xe4\xc1\x07\x1f\x94\x87\x1ezH\x1e~\xf8aC\xfc\x1d<\xe8\xf8o\x9b\xd8\xbe\xf4\xef,\x8b\xd9\xb6\x99\x04#\x13\xeb,$\xea\xaf%\x16LtQ\x0c,$Msy\x849\x16\x99\xbb\x19\x1f\'\x9d\xbfHn\xf8\xf0\x16\xe9\x87\xac\x95S!\xe9\x1d\xd5\xed\xac\x10HAC\xac\xb9\xb5\x06>\xaf\xbbe7\x82D0\xf9\xa4!6e{\xb8\x98K\x99\xbb\xae1(g_\xb5B\x86\xfa\x13\xe3d\xf7\x94\'\xea\x8fS"@\xbf\xdbI\xe0\xfa\xf8=\x87\xcdq>\x8e\xaa\xb6\xe8\xed\xa8\x88\xbe/8W\xf3x\xc9\xdftA?\x14\x01E@\x11P\x042m\x189\xf8x>O\xe1J\x19\x05\xdb\x84\xab\t\xf8\xc1;\xce\x93\xc5k[\xa5\xef\x88\xfa\x04\x04\xdeY\'\xcc7$\x15O\xc1\x0f\x89\xb7\xf2@ \xe8\xb9\xf2g\xd6}\xaa\xf8\x039\xef\xc3\xa4\xabAM\x80+\xfeR\xce\xc4\x0ePC\xcd\x12P\x95\xd4?\xbe\x91\xe2P\xbb\xb8/\xeaD\x00.\x06\xa7\xce\xc1/\x9dd$n\xa4`\xe8\xb6\x96DjG*.\xbf\x1c\xe92\x99X\x92\x94\xdcZ\xdb,\xa7\xd4\xb4\x18\xed\xc0\xa5\xc1zY\x81`"\xab\xf0\x9f\xe7F\xd0\xfe\x04\x08/\x12\x89\x18\xfa\xc65\x05\xd9\x17\xebW\x90\xe509\x83\xaeC\x16:\xf5:\xfbg\xd2\'\x89\xac\xa8\xa1\x01\xa7\xefU(\xe4\xfaT\x9d\xfePC\xba\x91\xe8#\xf9\x96\xae\xddGr\xce\x92~\x91HDv\xee\xdci4\xfa~\xff\xfb\xdf\x0b35\xfb&K<\x8fe\xb1Lf\x12|v\x9b\xe7X\x8d\xc2\xc9\xce\xcfu\xbf%n\xac\xac4\x7fE\x83\x1c\xde3\xe4\x90y(\x8cn:\xc81\x92\xdc\xc9\x94\x8c\x16?~\xb0\xbf\xbf\xec\xd2\xa5\xf2\x96O\x9f\x06\xbf\x7fI\xc8\x0b \xa3ySi\xf2\x15\x81P}Pv\xdc\xdfi\xea\xa06`)\x08@\xfbx]|\xf3:\x99\xbb\xa8^\x8e\xec\x1bR\xed?\x0f\xaez\xa0\x06\xfeh#)y\xfc.\'\x00\x08^\x06\x1e\x94\x9a\xb1\x08;\xff\xba;\xe3\xaf\xbaS\x11P\x04\x14\x01E\xa0,\x11\xa8\x14\x02\x90\xe0\xd1M0\xe7Y?C~+\xf2\xd7\x91\x998\xb2y..\x1a\xc1\x16R\xe8\xc8`\\>y\xddo\xe4\x83w\\ \xcb\xd6\xb7H\x1f\xa2\xd2\xa9i\x8a\xc1}\xda\x0fNJH\xa2\xd2\x11\xb1\x17\x89\x17\x99\x17\x9b\x8e\xab\x1d\xcd\x03LD\xad\xf8\xe1E\x05\xb3\xa0\x0c\xe2Gs\xad\x06D\x87\xd3\xa4\x08\x94\x1b\x02$\xae\xecs^nm\x9b\xac=|\xbb\xd5\x82\x12\x8b\x80&{4\xe6\x04\x00q\xbc\xf5Mv\x86?\xfb\xf9l\xb3^r.\xc4\xd01\x14v\xf6\xf17\x92\x85\x0f\xc2w \xb3M\xf3\xa0%\xb88P\x0bS\xe1\x06\xf8\x13\xac\x97u\xf8\xbf\x06f\xc3\xf3\x83!\xbc\'\x82\x12\x1a\x83\x9f9\x14\x16\xa4\xd6 \xceG\xc0P\x90\x844%\x1e3\xd1\x87\x93\xe8<\xa3\x10s\x89\x87\x86\xc5\xc4b\xe2+\x99mIO\xcew\xe7\xa8\x89\xbf\xa5\x1f7\xb1\x9c\xf4\xdf\xfc\xdev\xda\x05\xadJ\x8f&\xce\x96\x8c#\xf1G\xb2\x90d]z\x8a\xc5br\xd7]w\xc9\x9dw\xde)\x0f<\xf0\x80\xec\xda\xb5K\xfa\xfa\xfa\xd2\x0f\x19\xdf&Q\x98N\x16Zr/\x1e\x8f\x8f\x1f\xe3\xf7\x86%\xee\xce}\xf5J\x13\xb8\xa1}Y\xbd\xfc\xfa;\xcf\xcb\x8f\xbf\xb8C"C\t\x98\x92\xf2\x8e\xc3=\x88\x85T\xdc:Nro\x0e\xba\x04\xb1\xe7\xf3\x87W\xbfk\x931\xff\x1c\x1e\x88\xc3\xf2\xc2\xd1Pw\xcf\xd0\x7f>!\xc0@+),\xcc\xde\xf7\x93\x17M\r4\x19-v"\xc9\xcb\xe7\x82\x91\x88/|\xedj#[k\xe0\x8f\xc2\xaf\x82\xe3\xff/,O\xdf\xd7\x01\xed^\xe7\xc2z\xf4\x1a\x9b\xd88>\xe4|U&\x90\xefr\x7f,\xc1\x9d\xe4\xd6\xac\xff\x14\x01E@\x11P\x04\xb2F\xe0X)4\xeb\xd3Jv \xe7\x19$\x01\xbf\x89\xdc\x8c|\x1b2\xf7Q\xc4\x9cj.\x81\x9fsO\xf4\tH\xa2)\x86\x95\xb4\x7fx\xfd=\xf2\xe1\xef\xbc\x1c\x9a\x80\xcd\xd2{\x04N\x8a9+\xd24)\x02F\xe0\xc0UIB\xa0O\xc4]!d\xd2\xa3s\xfb\xa1\xb6\x0e\x9a\x0e\xf8\xd3\x94;\x02\xf6\xba\xd471\xd0\x82\xf3\xe0\xa8\xc4\x96;\x8ez\x86?\x08$\xc0^U\xe2\x9b\xb5\x0e+\x11\x0f\xc7@\xac\xb9\xaf\xa5R\xbf\x9dX\xff\xc4w$q%)\xc8\xc1\x92\xcf<\xcd~\xbb\xa0%\xc8\xfcD\x1c\xc4\xa5\x13\xbb\x04\xbf \xe1\xe0\xe5\x81:Y\x01\xb3\xe1\x15 \x08\x97\xe2\xff\x9c@P\x9a\xabB\xd2R\x1d\x92&l7\xc1iX\x13H\xc2\xb6@Hj\xe1\xff\xb0\xce\x90\x84\x0e\xd1H\x12\x92m\xa0F\'\xff\x9b\xefx\xf9\xd8z\xf9+\xb79x3Y\xbf\x84\xaee\xaa{\x96\xd3\x07\xfb~\xe2\x7fS\x969\xd3\x9c\xe6\x92\x8d$\'\xbd\x16\x00HwNm\x02\xec\xb4`\xf2OkZk\xb5\xfc\xd2I;\x9a\xf2>\xfa\xe8\xa3\xf2\xab_\xfdJ~\xfe\xf3\x9f\x0b\xbfgJ$\x0b\'j\xf4Y2\xd1\x9a\xf1f:\xcf\x8f}$l\x988\x86\x9cx\xce\x02y\xcd\x07N\x94\xa5\xeb[M\xe0\xb4x4%\x97\xdc\xbcV^~\xdd*y\xf2\xde#r\xd77w\xc9\xae\xc7z1\xf6C\xd3\xd1^@\x9e\xecn\xd75\x86d\xeb%\x8b\xe5\xca\xb7\x1d/\xf3W4I?\x16VI\x1a\xda:x\xa8&\x7f\x10\xe03V\x8fE\xd4\xc3/\x0c\xcb\xbeg\x1c\x92\x99\xf7T\xb1\x13\x9f\x07\xd6{\xd9[\xd6I[{\x9dt\x1c@\xe4_\x95\xab\x0b\xbe\x0ccc\xce\x02\xef\x83?w\xc8]\xfa|f0>\x1f\xd3\x13({\xaf[\xbe\xaf\x15\xf9\xd8\x07-Z\x11P\x04\x14\x81Y\x85@\xa5\x11\x80\xbc8\x14!\xd9\xee/"\xcfC\xfe(\xb2%\x06\xb1\xe9m\xb2\x9a\x80\xd1\xa1\xa4\xfc\xddk~#\x1f\xf8\xce\x05\xb2b}\xb3\xf4t\xa8&\xe0\x94HC\xb0\xa3\x1f\x92\x91X\x12\xab\xfaT\xde\xf4.Q\xa3\xb0J\xc5\x8c\xbc\x01\xe5<.\x0c\x07\xd1L\xe9s3\xb3C?\x14\x81\x12"@\xcd2\x929\x95\x94H^5!\x02\xf0\xbd\x11\xc7\xfc\x97$\xdbD\xf2\xad\x1c\xfa\xc3W\xa6\xd1\x10t\x1b3\x91\x10\xe4o\xe3\xafUl\xecKFL\xfe\xdd$\x8d\xaf\x07\x01\xc8\xc0\'$\x02\xc3\xb8jal\xd7\x83\x04l4D!\xb6\xf1\xbf\x05\x04!}\x0e\x1a\x82\x10$)\xb7I\x14\xd6\x900\xc49\xb5\x81\x804b\x9b\xbf\xd7\xe3\xf7z\x1cO\x12\x88\x94\x1eQ\xa4\xb6r5&\xb4\xf4u\xe8\xec\xc7\n \xce\'=\x17\xc7\x18c2\x86\xff\x08X\rj"2\xb1_\x0e%\xe8,p\x98\x9d9~\xb0\x0c&\x1b\x05\xd8\xf9\x96\xf9\x93D\x86M$4\xa8\xe5\xc7\xe8\xbc\x13\xb5\xfc~\xfd\xeb_\xcbw\xbe\xf3\x1d\xb9\xef\xbe\xfbL\x90\x0e{N\xfa\x7f{\x8e5\xe1M$\xa8\\S\xba\xc4\xbe\xe1\xd2\x18\xe6\xd5\x9a\x88nx\xfe$\x0e\x13,\xfc\x1e\xb7x\xbe\xf8\x8a}\'\xb9U\xeb?E@\x11P\x04\x14\x81\\\x10\xa8D\x020\xbd\x7f\x14\'\xff\n\xb9\x11\xf9\x16d\x8a\xaa\xfe\xf4\t\x83(\x85\xda(\x04\xd7\xbf\xbf\xee\xd7\xf2\xde\xaf\x9d+\'\x9e\xbd@z\x0e\x8f\xb8\xb3#\xd4\xaci\x1c\x01J\x05AL"\xe2\x88\xa6l5\x07\x1cYa\xfc\x90\x9c7\xac\x18\x13%\x01H\x9b2g\x9e\x95s9\xb3\xf9\x04Jl\xf4\x11\x13\n;\x8f\x891\xfd\xb1b\xdcl\x06F\xfb^\x16\x08\xd0\xbf\x9c\x13Z\xa2,\x9a3m#\xc8}Q\x13\xee\x85\xc4\x88\xecN86\xb43a\x06d\xdf\xb5\xe3\x04\xa1\xdd\x81\xfe\xf2u\xc1\xe4\xfcw>\'\xbe\x8a-\x06G\xe9B\xe7\x9c\xb4b\x9c\x1d\x93|\x92h\xec\x1e\x85v\x18\xb2IS\xb8\xb7k\x84\xf6\xe5\x1c\xe4y\xc1\x1a9>\xd8 \x9bj\x1a\xe5\x84p\xb3\xac\n\xd7I\x0b\xa2\x1e\x871n\x07\x91\x07A\x0c\x0e\x8dbA\nsTK\x04Nl\xf7\xb1\xcd\xa1\x99\xf2\xf4-\xae\xad\xad\x1d?-\x1a\x8d\xca\xd7\xbe\xf65\xf9\xf6\xb7\xbfm4\xfd\xc6\x7fp7,\xe9G\r\xbfr!\xfb\xd2\xdbh\xcd\x05I\xfe1-Z\xdd$[/^"s\x97\xd4\xcb\xd2u-\xb2\xe6\xa4922\x90\x90\x18L~\xa9\xe1\x9f)\xd9\xfd\x91\xc1\x84\x8c@\xc3\x8f7\n\xe07\xff\x8d90\x8af=j\xee\x99\t=\x7f\xf7\xa5`=\xd1\xba\xb0\x0e\xdaa]r`7\xcc\xfe\x91\xac\xbfF\x7fk>Z:\xef\x05#w`\xd7+\xdf\xb4N\x06`\xfe\xad\xbe\xff\x8e\xe2S\xc8V\x95\xbb\x00\xf1\xf8\xddGL1\xd5\x0c\xc6\xe3\xfa\xe3,\xa4\xdc\x0c\xe7\xf2\x15\xcf\xf9\xd7\x0b\xc8\x8f\xb9\xbf\xdb\xd7\xbe\xfbU\xff)\x02\x8a\x80"\xa0\x08\x94+\x02\xfe\x90e\xc5\xe9-\x07\x1b\x8a\x95LoC&\tx=\xb2\xaf\x9a\x80\xd6\\\xe237\xffN\xfe\xfc\xf6\xb3\xe4e\xf0c\xd3q\x00+\xde0i\xd0\x94\x86\x00\x85|`B\xdf@^\xa7A\x98\x13Q\x8bMS\x9e\x08\x00\xbb`\xd8\xb9_\xcd\xe2\xb0\xde\xbay\x02\xa9\xa7y\x8d\x00\xb5\xb5\xf8Z\x9f\x9ev\xf1\xba\xe6|\xcb\x83\xc6\x05H\xa6\xa7\xe2\x83\xd2\x93r\xcc5\'\x92^\xf9\x96\\\xae\xe7\xd9k\xe3\xfcw>\xbd|\x1d\xa7\xbf\x8e\x9cm\xe7\xd3\xd2M\xfc\xc6Z\xe1]\xce\xfc\'\xa9\xc7\xbc/\x19\x95G\x05~\x18\x87\\\xe4p\xe0\t\xa1&9\xad\xb6UN\x0c7\xc9z\x049\xd9\x18n\x84\xd9rP\x06p\xfc0\x08A\x92\x814\x1df\xd9\x08-\xe5\x9ex\xf4\x1f\xd7\x99\xa6K\xf4\xd3\xc7\xc0\x1d\x9f\xfd\xecg\x8d\xb6_\xfa\xf1\x96\xf0\xb3Z~eI\xfa\x01\'F\x81%\x11d}\x85\xad\xdc\xd4*W\xbec\x83l\xb9p\xb1\xe9\x0eI\x9b\x04\xc6\xf2\xbeNh\x15\x8dfg\xae\xcb2M\x04\x99t@^\nq\xfa\xaf\xba\xed3\x02\x94SI\xbc>\xf0\xd3}\xa6&\x1f\t\xa2I{b}\xffm\xbb\xf18\x99\xbf\xacQ:!?C\xb9W\x93\x07\x08\x84j\xa0\xa4\x10I\xca}?\xdckJ\xb3\xcf\xb3\x07EO,\x82\xaf|>\xcd\x0f#\x1f@\xe6\x15\xf4^\xd8G\xa1\x9a\x14\x01E@\x11P\x04\xbcG\xa0\x92\t@\xa2A\xf1\x9c\x83\x10\xff\xbf\x19\x99\xe6\xc0\x7f\x82\xec\x9b& 5\xcf,\tx\xdb;\xee\x93w\xfc\xdf3\xe4\xf4+\x96K\xd7\xfe!c\xce\x82\xba5\x11\x01\\\x11\n\x97\x96\x004\xab\xbe\x85"\xe3\x9a2t\xc1g\x10u3\xaa\xa1\x81@m6M9 \x80\xa7%\x85{8hM\x80q*\xa6i\xe6\x01\xca\xa1\x14=T\x11\xf0\x05\x01F\x01\xae\xa4\xc4\xd6\x06\xa1u\xb1#\xee\xb0N4]\xa5\xf6\x9a\xa6\xfc\x11HG\xcf\xd9v>\'\xbe\xe9\xf9\xder2?\x1dA\x80\xc7\x90\x164g\xe0\x83\xc4,\xb3Mk\x10\xe5x\x0bH\xc0m\xf5\xf3\xe5\x8c\xba\x16\x99[\x15\x960\xae\xdf0\x08\xc1>d\xfas\xb4D \xcbpB\x95\xd8\xb3\x8f\xfdo\xb5\x98\x8e\x1c9"g\x9ey\xe6\xf8\x8f$8\xe8\x03\xb0\\\xb5\xfc\xc6\x1b\x8a\r\x12B\xf4\xc5f\xb5\xc06\xc1\xbf\xdf\xb6\xd7\x1f\'\'\x9e\xbb\x08\x16\x0f"\x03\xdd\xf0\xdd\x87h\xb1Fs\x0fc\x87\xd1\xee\xa3\xc4\xa5\xa9\xf2\x10\xc0\xc3\x11\xac\r\xc8`_B~\xe7\x12DG\xad3\x8a\xd3\x1d\xeb\xfb\x8f\xcf\xc8\x857\xac\x96\x91\x11\xfa\xfe\xe3S\xab7\xd5\xff\xcf\xdew\x00\xd6Q\\]_\xf5j\xc9\xb2\xe5\x8aml\x0c\x06\xd3\x8d15\x10z/\x1f\x10 !\x10zI\xf2S\x93/@\xc8\x17H $\xc4\xf4@B\t-\xa1\x87\x16 \t\x040\x98nz3\x1d\x17\xdc\xab$\xab?\xb5\xff\x9c\xbb;\xd2\xb3,\xc9*\xbb\xab\xf7\x9e\xee\xb5G\xbbo\xdf\xee\x943\xf3v\xee\x9c\xb9s\xa7\xaf5\xe0\xed\xfe\x9b+\x9f\xcdZ!t\x93C\t\xb1;u\x94\xed\x8b}\xcd\xb7=o\x08\x18\x02\x86\x80!\x10=\x02\xc9N\x00\x121j\x0f\x1c\x01\xd0\xe1\x05-\x00\xff\x89\xb0\x17B\xb8$ \x14\x18\x0e\x00n>\xe7Mi\xa8m\x96\xdd\x8e\xdePV,\x80O\x1bj\xcd&:\x00\xa3/\xa4\x18f#U\xc8\x00v\xc7\x9c\xa2\x0b\xec\x9c2S\x8f8\x1b\xb133V\xde\x81\x00\xec\xe2\x01\xfb\xaac\x04P\x0fYp\xbemb\x08$\x1a\x02\r`]\x92i(\x98\x89\xdc\x92\xb4|\xad\xde\xdb\x00\x84\x9d\x91I4\x08\x90\xa0\xa3\xf8t\x9f*\x02\xde\x15\xef/{b\xe7\xc3\x90\xf7\xd2b\x90\xcb\xb4\x19\x1e\xad\xf6\x96\xc8\xed\x967D\xf6\xc9\x1d*S\xf3\x06\xcb\xb69E\xb8\xab\x05D \x96\xaer\x89.\xce\xbb\xdb\xbd8\xdf\x7f\xb4\xf0\xa3^\x90\x88\x96~\x1e*\xc0\x04\xc0p\t.\x97\x06\x92\xfc\xa3L\xdey\xb8\xee\xe2\xbb\xedwG\xe9\x04Q\xe5\xaa:\x94\x01d(&\xd98\xd1\xa6\xf6=.\x02;&%\x02\xdc\x84\xa5dH\xae\xbcp\xff\x1c6sO\xdc1\xe2\x12\xed|\xd8X\x197y\xb0,\x9b[\x85\x89\xe2dz\xe3G\x0cT\x0f\x92\xe3\xee\xbf\xf9\xc5\xd9\xf2\xc6?\xe7\xebSn9\x7f\x0f\xa2\xe8\xc9\xad|\xbd\xd6#<\xeb?\xd4O-\xa9\'Y\xb6{\r\x01C\xc0\x100\x04\x1c\x02\xa9@\x00\xb2,\xec|\xc8h\xd0\x0c\xe3h\x84\xff \xec\x80\x10\x1e\t\x08%\xdfY\x02\xdev\xe1[P\xfa\x9be\xf7\xefo\xe4\x91\x806\xa1\t\xe81\x90G\x8d\xc4\xb0\t\x08\x85c\x08\x8c\'\x02\x13Z\x01r\xf9\x087\x18\x01\xcfh\xd2M\x04\xa8\xb5q\xd6\x9f\x8e\xc0]\xfb\xf5\xf8\xf3p\xf47Z\xc2p\xf9\x9b\x89!\xd0\x15\x02l\x97l\x81\r\xa0\\x\x9e,\xe2\x08\xc07\xeb\xca5\xcb\x8e\x8cJ\x96\xfc\xa7r>\xd9\x9eX\x1f\xae\xdba\xbb\xe2n\xc2\xfc\xec|\xfb\xbdR\xbbZ\x18\x04\xfc-\x97\x0b\x1f\\0\\\x0eE\x18\x95\x99+\xa3\xb0\xb9HV7\xe9\xe8D\'\xfd\\=;\x8b\xbf\x16\xdf/\xd8v\xfb\x8e\x96\x03N\x9e$\x9b\xee8\x0c\x13\x99\x8dR\xb6\xbcVw\xebM\xc7\x96\xbc\xce\x97\x9f{\xd6\x8eI\x8c\x00~\x0c\x1e\xd1\x96&\xaf>:_\x0bB\xbf{\xce\xf23\x92\x92\xe1\x07\xa8\xbe\x9b\x91\xd8\xa1gm\xa6\xd6\xa5jf\x1aI\xe2\xa9\x9d\x08u\xba\xbc\xfc\x0cY\t#\x84\x8f^]\xea\x156\x1c\x95\x8eq\xbb\x11\xce\x9b8\xff\xc6K\xac\xf55\xeb\x7f\xb4\x83!`\x08\x18\x02\x86@"#\x90*\x04 1&\xcb@\x1d\x1f\xda\xbc\x1c\x89\xf08\xc24\x84\xf0H@\xcc\x9es6\x9d\x96i\xb7_\xf4\x0ev\xc5k\x94\xfdO\xdaDV\xc1\xa7\x89[2\x83\xf4\x07\xa4\xb0"Z\xe0+\x88\xbb\xfd\x85!+\x16U\xcb\xa8\x89\xb0\xd8\x18\xe8@\xf7\x18\\o\x00\x9c\x05\x02\x90~\x00\x1b\xea\xc2\xd3\x12\x995#\xffz\\A\x03\xfa\x01\xaf5\xf2\xed\x91\xf8\xc2QP.,\xbe\xbf\x86E\x19w\xc4\xa5t\xf6k\xe2\x927\x06.\x0b5\xe9\x1f\x04X7\xf1\xcb\xb3\xd9\xcah!\xc8#\xad\x03?i\xc0r\xe1\xf2J\xb9\xaa\xfc\x1b\xd9\x19~\x03O+\x1e\'\xf5i^}\xad\xafE\xba\xe5\xc0\xfdS\xb2\xaeSU\x8b?m{m\x16\x7f\xdb\xed\r\xe2\xef\xb4I2i;\x10\x7f\xb1FY\x85\x1dyY\x06Z\xfb\x19\xf1\xd75\x9e\xc9\xf8-\x97\x87\x16\x97\xe6\xcaW\xef\xaf\x96\xb9\x1fSE\x8e~\xf5\x84N8\x82\xa8\xda\xe5\xb0\re\xf4\xc6E\xb2j\xb1\xf9\xce\x0e\xaa-\x91X\xcd\x1f\x0c\xeb\xbf\xa7\x16J\r\x96x\xf3\xa5\x16\xe2;\xc9\x11\x80\x8f\xf9\xf9\xa7\xf1E8\x8a~P\x00Y<\x86\x80!`\x08\x18\x02k!\x90J\x04 \x0bF\x1d\x9f\x9d\x11\x9d\xd2\x1e\x84\xc0\xe5\xc0\xbb \x84G\x02"E*\xd8$\x01\xef\xfd\xed\x07R\xb5:&G^\xb0\xa5\x94aw\xe0F\xcc\xb2\x0f\xd8\x15\xc1\xbe\x02\xc2\x1d\x03)A\r{\x1d\xd6\xab\x17\xd7IfV\xba\xe2\xae\t\xd8\x9f\xee!\xc0zAedb\xd9Mff\x86:\xc0\xd7\x110\x7f9\x01\x0b\xad\xff\xbe\xfb\xdd\xef\xca\x8c\x193\x94\xfc\x08Q!\r8\xe7\x16]\x7f!\xc0\xcd\x1c\x8a\xd1.\x97\xc4\xd0P\x13\\\xe8/\xae0=G^\xab\xf5\x96\xff2\xc7\x1d\xfd\x8cH\xfc\xb1\xed[\xfbO\xac\ne]9\x8bM\xd6\x1d\xad\x03\xdd\xc6"o\xc0\xa2\x93\x81\xbb\x05Sx=\xe9\x04\x85R\x8b?\x90.\xae\xed\xed~\xf4x\xf8^\xdbX6\xde\x1a\xbb\xf9\xc2O\xd8\xeae\x9c\xac\xf4\xfc\xe9zTh\xd2\x95\xd22\xdc\r\x04Z`\xd1\x99\x99\x93!\xaf\xfcc\xae\xde\xcd\rZ\xa2\xf4\xff\xa7\xef@\xb4C\xca~\'m,1L\x96SgN\xfc\xb7\xbcf9\xe1\xffd@\x9f#\t\xf8\xda\xe3^\xfd*\xde\xfe\xf2\xfe\x803\xcfJ\xe4\x18\x8b[H\xcf\x0c8n\x8b\xce\x100\x04\x0c\x01C "\x04Rq\xf1$g\xa2X\xae\x95\x08G!\xbc\x85@\xa2\xd3[\x8b\x8a\x93\xa0\x85\x8a\x8c\xd3d\x9e\xb8\xe9S\xf9\xdb\xaf\xdf\x95\xc1\xc3r$;\x0b\x03\xbf\x01:/F\xa2\x8e{y\xd6Uz\x04`p\x98{*#7]\xc9\xca\x82\x1eB\xecMz\x84\x80.\xc3\x81\xc2\xa8\xbb4\xf6\xe8\xc9\x9e\xddL\xeb\xbf\'\x9f|R\xf6\xdbo?\x1d\x80\xd2O\x96\x89!\xd0\x15\x02\xd7\x96\xcd\x95\x07+\x97b\xf9en\xc2\x93.\x9c\xd4\xc8\xc3\xc0zV\xbd\xb7\xfc\x97\x04R\xbc\xb0\xbd;\xf2\x8f\xd7\'L\x98\x10\xff\xb5\x9d\'\x10\x02\xecFh\x1d\xe8\xba\x13\xd6%\xdfV\xcd\x81M]EWX\x92~\xec\x7fY\x18G\xf2\xec\x0c\xab\xab\xcb\x9f\xdcWN\xbdr\x9a\x8c\x9a0H\x96-\xa8\x92\xca\xb2:\xbdO}\xfcE\x97=K\xa9\x1f\x10\xc8\xcdO\x97r,\xef~\xf9\x91\xb9\x9a\xba[\x8a\x1bUV\xb4="\xb1\xed\xf6\x19-\x1bo;T\xd6\x94\xc7B\xd7?\xa2*[\xbf\xa7\x83\x8e(\x8b\xcb\x7f\x17\xd5\xca\xec\xd7\x96kv\x1c\xe1\x1fB\xde8\xa2\xe1\xdb\xe5\x03\x84O\x11\xbc\xd7$NL\x0c\x01C\xc0\x100\x04\x92\x07\x81T\x1d\x91sl\xc6Y*:\xc3\xe0\xae\xc0\xa1\x93\x80T\xb6\x9d\x92\xf3\xfc\xbd\xdf\xc8_/zW\nKr$\x07\x1ds\x8b?\xf3\x89|\x0c\x1c\xc1\xc0\x98\x0e\xc6\x9d\x05`P\x05Oc\xadB\xe8\x03\x90;\xd9\xb2\xa2Mz\x82\x80g\x8d\x94\t\x0b\x00\xee\xd2\x1c\xb6\x14\x14\x14\xc8\xb3\xcf>+#G\x8e\xd4\xe5\x8f$DL\x0c\x81\xf6\x088\xe2\x85\xc7\xb3\x96\x7f,\xb3\xb1s\xeb\xb0\xf4\xec\x84\xfd}\x93,\x1a\x95\x9e+\xab\x9a\x1aev\xbd\xb7\xcbl\xfc\xbb\xc8\xed\x02\xcb\x81\xd8\x981c\xe4\xe9\xa7\x9f\x969s\xe6\xc8\xb1\xc7\x1e\xabE\xe7\xef\xc0~\x0b\xed[A\xe2|\xa6\xc5\x1f\xeb3\x99\xdeV|\xb5\xb2M\xb1\xdf\xd5II\xe4\x7f\xef\x1fN\x94\xdf>\xb5\xaf\xfc\xe4\x86\x9dd\xd8\xd8|,\xbb\xac\x96*\x10\x7f$\tmB&q\xda[\x989i\x82\xf3\xe5\xa2\xa1\xb9\xf2\x8a\xef\xfbO\x97\xe2\xba\x17n\x98\t\xc7\xc5\xed6\x9b9\xf8\x8c\xcd\xa4JW\x85$\xd3/+\xae \tx\xda\x04\x0b\xde"\x8c5^\x7f\xea[\xcd\x1d\xeb\x97\xe3\x91\x90\xc4\x8d\x19\x9fG\xfc\x9c\xdd\xe7\xe7\xf0R\x0b\xa9\x10\x16\xad!`\x08\x18\x02\x03\x1d\x01\xf72OE\x1c\x9c% \xa7\xc4\xe8\x13\xf0=\x84\xf0-\x01}$_yt\x9e\\\x7f\xd6\x1b\x92\x99\x9b.y\x85\x99\xba\xb3\x9e\xff\xd5\x00:\xa4I5\x96\x19\xa9\xc4\x8f\x8e\x03@\xa0bI\x1d\x1cX\xdb\x06 =\x85R\xd5n\xa8kT\x12\xc3\xb6\x00d\xde\xea\xeb\xb9Q\x1c\x18\xf8\xb7\xde\x82\xc5f\x96Z\x02\x92\x1c11\x04\xe2\x11p\xd6r\xb0\x99\xd3\xcb\'-\xfbP*\xe0Wo\x10\x18\xffDZ~\xc9\xd7\x18G;\x1b`\x93\x88\xc5M\xb5r\xfa\xb2\x8fdi\x13\xdb8}k\xc2\xe5\x83o\xe5J\xeb\xd7\xc2\xc2B\xb9\xfe\xfa\xebe\xc1\x82\x05r\xf0\xc1\x07k\xb9\x1e|\xf0A9\xfd\xf4\xd3\xf5w@r\xd0H@\x85%a\xff$\xfc\xc8\x16?\x17n\xe6@!\xe9\xc76U:&_\x8e:\x7f\x0b\xb9\xe1\xb5C\xe4\x84K\xa7\xc8\x88q\x85\xb2|^\xa5T\xafi\xf4\xdf\xfb\xa9\xac\xf6%lS\xea\x9f\x8c\xe1\x85\x95\x9d\x93)\xd5\xb0\xb8\x9b\xf9\xe07\x9a\x87\xa8k?\xcdo\x9fS\xf6\x1a-\x13\xa7\x94`R\xb8\x1e\xef\xc9\xfe\x81#\xe5R\xc5o\x9e\xaepj\xa1g\xbf\xfe\xf8<\xaf~\xc3\xc5\x96\xb1\xc7\x10\x1e\xd2\xc4\x82\xf3\xee\xe3Gg\x07C\xc0\x100\x04\x0c\x81(\x10\x08\xb7\xab\x88\xa2\x04]\xa7\xc1\xf1\x1a\xd9\x06\xfa\x04\xe4\x08\xecm\x04\x92\x80\xe1/\xcc\x85N\xfe\xe1K\x8b\xe5\x9aS^\x05\xf9\'2\x08\x0ez\x9b\xfd\x9d\xf7\x90~\xca\x0b\x15<\xce\xfa\xd6\xf9\x04``\x03)\xd6(\xa4rML\xaa\xca\xeb%\xc3\xfc\x00z\x80\xf4\xe0/\x07\x8a\xb4\xfes\xce\xde\xbd\xe1c\x0f"X\xcf\xad\xf1\xa4FNN\x8e\xde=v\xecX\x995k\x96\x9e\x93\x1c\x89\xbfg=\xd1\xd9\xd7)\x8e\x00I3n\x8eA\xf2\x82$\x1a\xdb\xe3\xf2\xa6\x98\x9c\xb9\xe2#\xc9\x03Y\x9c\xabF\x06\xfd\x0f\x02\x89\xc8\x1cX6o\x80\xe5\xc9\x8fW-\x95=\x16\xcd\x92\x97\xeb<\x87\xfa\xa4\x05]9\x98\xd3#\x8f(\x9c\xd1\xae.k\x80U\x99m\x04\xe2!\xd2\xcd\xbfT\xc8\x01\xa2.\x01\x0e\xf9\xd7\x9f\x99\xd9\xb6\xc7\x10\t\x90)S\xa6\xc8?\xff\xc9}y\x98\x07\xb3~\xeaf\x8d\xa5\xecm\xceZ\x8e\xc4\x18\xadC[-C1jD3\x95\xb7\xeb*\xe4W\xab\xbe\x90a\x199x\x95\xb8_~\xff\xc0A\xf2o(\x96$\x17\xa4g\xc8y\xab>\x95sW|*Mh\xc3\xb4X\x8c/\x07\x97\xba\xd3\xef\xe5\xa3\x8f>*\x83\x06\r\xc2FPtv\xdf\xa2e\xe3}<\xa7\\{\xed\xb5j\x1d\xc8s\xf7=\xcfM\x0c\x81\xae\x10P\xcbm*\x16\x10\xe7Zd\xe3\xedJ\xe5g\xb7\x7fG\xfe\xf0\xcc\x01\xf2\xddc7RBp\xf9\xfcji\x8cy\x13-QXzw\x95g\xfb\xae\xff\x10\xf06\x87\x10y\xe6\xae/4\x13~\xd3\x89,Cn\xa2o\xb3\x1d\x87\xcbf;\x94J\xc5JL\xdaF\x9d\x89\xc8J\x1b}BJ\xecC\xcdz\xfd\xa9\xf9Q\xd4/;/\xbe|\x1e\xf1KjK9| \xec`\x08\x18\x02\x86@\xb2!\x102\x05\x900pp\x96\x8a\x9d\xd5B\x04\xfa\x04$\tHv"T\x12\x90\x9bp\xb1\xb7\\\xf4e\x85\\y\xdc\x0cY\x05\'\xccCF\xe5\xc11\xf7\x00\x984C\xc1\x9b1\xd8\xad\xab\xf2\x8d-\x83\x1a\xbf\xfb\x03\xe8jX\x00V\xc2\x020S7\x02\x19\x00x\xa2\x1d\x05&\xd8\x06X-\x00\xb1\xdbj\x18\xe2\x94\xfe\xd1\xa3G\xb7F\xefH\x92\xc3\x0e;L\xfe\xf0\x87?\xe8uG\x86\xb4\xded\'\x03\x06\x01\xb6\x07g\x11\xb7\xcf>\xfb\xc8\xb2e\xcb\xd4W$\x01`\xbb\xf0(@\x91\xfb\xd6,\x96\xfb\xaa\x16\xc9\xe8\x8c\xbc~[\nL\xf2qdf\xb6,h\xac\x95\x83\x17\xbd%\xff\xa8\\\xa2\xf5\xa4\xcb\x951\x98u\xe58\xef\xbc\xf3d\xd1\xa2Er\xe8\xa1\xecbh\x01\xdd\x8c\x9d\xb63\xd7\xb2v\xe5o\xc3\xb5{Z\x07>\xf3\xcc3z\x0f\t\xf2V\x02T\x9f\xb6?\x86@\x1b\x02\xb4\xa4"\x91\xc7\xcd\x1b\x9c?\xb5i\x07\x8e\x91\x0b\xff\xb6\xbb\\|\xdf\xee\xb2\xf9\xae\xc3a\x11_\'\xab\x96TK\xac\xbe\xb9uYp[\x0cv6\xd0\x10\xe0\x060\x83\xe0\x1b\xee\xd37\x96\xca\x9c\x0f\xbc\x9d\xca]\xdb\x89\n\x0b\x97\xdeagm&\r\xb0\xfekiAC\xa6Rl\xd2g\x04hI\x99\x9d\x9b)e\xcb\xebd\xd6\xd3\x0b4>\x87w\x9f#_7\x027\x86\xa2\xc9\xfb\x8cu\xbf\xb6+\x86\x80!`\x08\x18\x02\xc9\x84\xc0@!\x00Y\'\xce\x12\x90\xcb\x81\x8f@x\x07!t\x12P\xa7\xcc0H\\\xb1\xb0F\xae8f\x86\xcc\xfb\xa4\\\x86\x8e.h\xdd\x9d\x0fyHIq:^M\xeb.\xc0A1\x80>\\\x88\xae\nV\x80Y\xd8\x08\xc4\xe7\x04S\x12\xc70\nE\xc5Qw\x8a\xcc\x08\xb8N\xdaev\xa3\x8d6j\xbd\xe2HA^\xb8\xf0\xc2\x0b\xe5\x8c3\xce\xd0\xef\xe2\xaf\xb7\xde<@O\x88\x85#\x8cxt\xa4i*\xc1\xe1\xcaDrl\xe8\xd0\xa1J\xfa=\xf7\xdcsRRR"{\xef\xbdw+9\xac\xfe\xf4\xfc\x82\xffb\xe5\xe7\xf2^\xac\x1c\x9b\x82\xe4\xe8N\xadQ\xe2A*r\x83\x8c|\x99Y\xb3J\x0eZ\xf2\xb6|\xd9P\xa3V\x7f\xac+\xe6\x91\xe5(--\x15\x96\xe1\xba\xeb\xae\xd3:#\x99Gqem\x9f_\xd7\xe6I\x04\xee\xbf\xff\xfe\xf2\xd9g\x9f\xc9\xa8Q\xa3\xc4=\xe7\xbeo\xff\x9c}\x1e`\x08\xa0\x13\x8d\xf7\xefGB\x87\xfe\x84\xbfs\xe4x\xf9\xcd?\xf7\x91\x9fbc\x8fIS=\xab\xaar\x90\x00\xec\x07\xe9\xd6\xc1\x96\xfa\x0e\xb0v\xd2IqI\x1agf\xa7\xcb?\xff\xecY\xffEmy\xa7\x9bQ o\x93\xa6\x95\xca\xe6;\x97zK\xd1\xc3\x99s\xec\x04\x81\xd4\xbe\xdc\x82\xbe\xa7\xa84G^z`\x8e\x16\x14\xde)\xc2\x14*\x8b\x0c\xaf |\x8e\xc0\xd4\xfc\xd9}\x9c\x99\x18\x02\x86\x80!`\x08$\x15\x02\xe1v\x19\x89\x07\x85\x9b\xc5\x9a\x8f\xac\xed\x8f\xc0\x99\xac\xf0I@\x9a\x02\x82\x04\xac\\U/\xbf\xf9\xde\x0b\xf2\xd1\xcbK\xd5Qw*3WT\xfe\xb8D)\xe8]\x809\xc8\xa1\xf5\x1a\xa5\xaa,\xa6\x0e\x90U-\xd1+\xf6g}\x08x\xc8y\xe4D\x86\xd3\x18\x03~\x0b8\xe2c\xfc\xf8\xf1\x9a\x1dg\xf1\xc4\x0f\xee\xfc\xd6[o\x95\x9dw\xdeY?\xbb\xfb\xf5\xe6\x01\xfa\x87\xa4\x0f\xb1qKFy$\xb9\x94J\xd8(i\x862QN9\xe5\x14Y\xb2d\x89\xec\xb7\xdf~\xfa\x99\xe5\xa5\x90\x1c\xa6\x95\xa8\n\x98\x0c\xb7)\xc8\xd9\xcb?\x93\xda\x96&,\xc1\xcd\x8c\xec\xe7\x8e\x1a\x911\x999\xf2\x10,\x10O\\\xf6\xb1\xd4!\xefj\x99\xc8w\x1b_D\x90\xe3\x8e;N\xcbA+F\n\xeb\xac\xbb\x96|\x0e\x8f\x8d7\xdeX\xfd\x05\x1e~\xf8\xe1\x1a\x07\xe36\x12P\xa1\x18\x98\x7f\xf0\x92V\xb2\x06M\xac\xc9\xf7\xe7\x95W\x90)\x87\xfed\xb2\\\xf1\xf4~r\xd6\xb5;\xc8\x88\xb1\x05\xb2\x1a>\xdd\xcaV\xd4J\x1a\xfbD\xfa\x0341\x04|\x04\x9ah\xfd\x07r\xe8\xf3\xb7\x96\xcbW\xef\xac\xd0\xabtY\x10\x95\x90|\xa4\xb5*\xe5\xa0S\'\xc1]B\x9a4\x1a]\x14\x18\xfc\xecF\xb3\xf3\xbc\xcd]^~l\x9e\x1fo\xa8\xef\x00j\x89L\xe0\xd1(\x12\xf3\xd3\xb0\x83!`\x08\x18\x02\x86@H\x08\x04<\xf4\x0f)\x97\xc1F\xeb,\x01i\xca\xfe=\x04ngO\x120\\\xf5\x04\xca\x90\xe3[\xae=\xedUy\x15\x9d\xf6\x10X\x02\xd2)\xb3?&F\x16RIO.@\xba\x14\x1d\x01\xc1\xc2\x8a\xed\x95\xf2\xf7\xbf\xff]\xee\xbb\xef\xbe\xd6%\xbc\xbc\xd6S\xc2\x96\xf7\xbb\xf8\x9ex\xe2\t\xb9\xf1\xc6\x1b\x19\x8db\xd1]"Q\x1f\xb0?I\x8f\x00\'\xcd\xd4j\n\xaf\xe5&\x9f<\x19;y\xb0\x9cp\xd9\x14\xb9\xf6\xe5C\xe4\xa8\xf36\x97\xfcAY\xb2tn\x95TWrG_\xcf\xe2O\x87\xe5I_z+@\x90\x08\xd0\n\x94\xef\xd4g\xee\xf8J\xa3\xa5\xc5\x7f$\xafM\xbf\x10\xe9d\x00!\xe3\xb7,\x91\xadw\x1f%\x95+\xeb0\x07n\xba\x9a\x0fO\x9f\x0f\xb4\xfe\xe3\xc6\x82\x1f\xbc\xb4T\xca\xb8\xb9\x0b\xc4\xf5\x9f}\x8e|\xdd\x08\xa8(\xb2\xf2\x96!<\xe9\x7f\x1d\xeex\xc9O\xc4\x0e\x86\x80!`\x08\x18\x02\xe1 @\xe2k \nGp\\\x8c@\xc7(\xdc\x18\xe4\x01\x84\x83\x11\xc8Ve!\x84"p\xbd\xa6\n>gFo\xff\xc5;R\xb1\xa2^\x0e9kS)[V\xa73\xfd)\xa3\x1f\xb1\x9c@\x91;\x949\tc\xf2\xb9li\xad\xfaSL\xb3e%\x0e\xe6n\x1fA9Aa$\xa5\x11\x9el\xb5\xd5V\x1a9I\x9exb\x84d\x10\xaf\x91\xe0 \tH\x0b(w\x8f#C\xc2\xcbUb\xc5L,X\xe6\x11#F\xc8K/\xbd$\x9bm\xb6Yk\x06\x7f\xf5\xab_\xc9\xd1G\x1f-\x8f?\xfe\xf8Z\xc4i\xeb\rIp\xe2\x88?\x0eN\xb6\xd9f\x1by\xfe\xf9\xe7u\xc9,\xb3\xcer\xc7\x93\\\xf1\xed\x82\xf7M\x9e~\xbb\xca\xb3\x9ea\xebma\x1bF>\xe8\xd7\xf2\xeb\xaf\xbf\x16\x92\x7f\xae\xbdvT\x8e\x9e\xe6\xc8\x11\xa1l\x0f\xbb\xef\xbe\xbb|\xfb\xed\xb7\xb2\xc3\x0e;h\xbd3\xaed\xab\xfb\x9e\x96\x7f\xa0\xdd\xcf\xe6\xe4\x88<\xd69\xc9\xbf\xfc\xa2,9\xe0\xe4I2\xfd\xc5\x83\xe4\xf4\xe9\xd3d\xd3\x1d\x86\xe9n\xf7+\x16V\xe9d\x1a\x97\xf9\xdaR\xdf\x81\xd6Rz^^\xbe\xaf\xb2\xf3\xb3\xe4\x89\x1b>\xd5\x87\xd5\xfa\xaf\xe7\xd1\xf4\xfa\t\xb7\xd2e\xd4F\x852e\xef\xd1\xb2\x06\xaeo\x8c\xfc\xeb5\x9c\xeb\xd1\xb4t3\xb6\x10\xfa\xf9\xce\n\xa2}=\xd2\x1b=\xb1H\xa6\xee;Z\xaaV\xd7\x9b\xef\xbf\xce\xc0\xea\xc5\xf5f\xe8\xbb\x05\xc5Y\xb2\xf0\xcbry\xeb\xd9\xc5\xbd\x88\xa1\xc7\x8f\xb87\x10WHq\x8c\xc41c\x84-\xaa\xc7\xf9\xb5\x07\x0c\x01C\xc0\x100\x04\xba\x81\x80\x11\x80\x1eH\xec\xd0\x88\x05;\xbb3\x11\xfe\x8a@\x12\x90\xd7C\xed\xec88`\xa2\x9f\xcdZ.W\x9d\xf0\xb2\xd4\xd75Jqi\xf6Z\xfe\x80\xf0ur\t\xcc\x168x\xa9\xa9\xf2\x96\x82\x06\x9fy\xafJ\xca\x96\xc1B\x02\xff\xd2B\xb0\xc4\t>\xcf\x89\x13\xa3\x12&h\xedn\xa9N\x909s\xc4\rw\xf8\xa5p\xb9gW\x04 \xbfs\xcf<\xfc\xf0\xc32i\xd2$%?\xbaz&\xc8\xfc\xf6G\\$qXfntq\xf9\xe5\x97k\x16:#\xc6x/\t\xa7\xfc\xfc|y\xe4\x11\xba\xe0\x01\x81\xc05@I ,\x1b\x89]\n\xcb\xdb\x93:\xe5\xbd\xae\x9c\xf4\x8dH!\x0e|Y\xf2}9\xb3v\x95\\[6WFa\x97^\xbe\x03\xfa*h\x852\x18\x1b\x8c\xfcb\xc5\xe7\xb2\x1c\x04#\x89\xc6\x16\x8c\xa4\x99\x87Q\xa3F\xadE\xfeuVW}\xcdC\xfc\xf3\xf1$\xe0\xcf\x7f\xfes\xe1\xc6(\x14\xe6\xc7H\xc0x\xa4\x12\xf7\x9c};\x97\xec\xa2\xe9\xb7N\xea\xe5\x17f\xa9\xdf\xdf\xff{to\xf9\xc5\xdf\xbf+\xdb\xec9Jw\xb3_\xb9\xa4Z\xeaj\xb0\xec\x1f\xd6\x81\xd6\x9d%n\x9d&r\xce\xb8\x8c\x9c\xba\xe3\xbb3\x96\xc87\x1fq\x8f;\xbcwa-\x16\xa5\xb8\xf4\x0e>s\x92dggH\xac\x1e;\xa7\xdb(#\xc0*\x80\xab\x00\xbcC\xdeyf\x11&\x12\x80-\xdf/\xe1\xd51\x1b\x0fk\xaf\n\xe1>\xbf\x10\xc9\xa1|\xf8\x99\xb5\x83!`\x08\x18\x02\x86@\xc7\x08X\xd7\xdc\x86\x0b;6vx\\\tv:\x02\xd7$\x12\x1f^\x0b\xad\xd3\xe3\xe0\x80\tPI\x9a\xffi\xb9\\v\xc4\x0cX\x01T\xcb\x90\x91\xf9IM\x02\xd2\xefL\xcd\x9ap\x08@bF\xa1%E}-6\x98 Uk\xd2m\x04H\xa0\x84%\xce\xbf\x1b7\xaf\xa0t\x87,\x89\'{^}\xf5U]\x02K\xc2(\x15\x89\x0e\x96\xd5\x11\x9e\xb4n\xa3(\xb1\xa5g\x1d\xffq\x18\x1et\xd0Ar\xcc1\xc7\xe8M\x89\x8a\x8d\xcb\xd7\xb1\xc7\x1e+\xb4n\xa4\xf4\x94\xfc\xd3\x87\xf0\x87q\x91\xf0\xe2\x06)\xf4\x85HiF\xbbpD\xe2\xf5\xe5\xf3\xe4\xa5\x9aUJ\x026\xea[To\xe9\xf1\x1f.#\x1e\x0e"q\x06H\xc5g\xb1\xd1\x88\x8aO\xfe\xf1\xfc\xed\xb7\xdf\xd64YO\xae.\xbc\x9b\xc2\xfd\xeb\xb0$\x06\x87\x1dv\x98\xf0\xb7A1\x120\\\xdc\xfb\x12;I\xbf\xb5\xac\xfd|\x97\x1e\x9b\xed8\x1c~\xfdv\x90k_=X\x8e:\x7fK\x19;\xa9HV-\xae\x96\xf2\xe5\x98\xc4B\x9b\xe6\x84Y\xd4\xbe\xda\xfaRN{6\xc1\x10\x80\x86\x9a\x99\xc5\x89%8j\xbbn\xb6f.\xea\xf6\xc4\xb6O\x1966_v\xf8\x87\x0f\xfd(\xbd\xb6\x18H\xfc\xdd\x88\xc4\xb5\xe7\xd1\x13\ne\xda\x01c\xa4\n\x04U\xd4\x16\x88\xdd\xc8f\xf2\xde\x82:\xe6\x92\xea\xba\xda\x06\xf9\xd7\xed_h9B\xc6\x97\x8a\t_RT6^A0%\x1b \x98\x18\x02\x86\x80!\x90*\x08\xb4\x8d*S\xa5D\xc1\x95\x83\x1a\x14-\x01oC8\x01\x81Sn\xfc\xdc\xbd\x11;n\xec\x8dp\xd6\xd6\xed\xeau\xe7\xc5\xef\xca\x137}&\xc36(\x90\xcc\xec\xb6\xa5\x83\xbd\x897\xd2g\x80\x1c-\x00\xebZ-\x00\xc3\x1b\xecp\tU\x16,\x00\x93\x8d \x8d\xb4>\xe2\x12s\xc3\x82&\xb0\x7f-\x8d>\x9f\x1dP\x8bvd\x16wo\xa58\xb2+.\xf9n\x9f^v\xd9eB"\x90$\xa2#\x16\xbb\xfdp\x82\xde\xe8H$Z\xf0\xed\xbd\xf7\xde\x9aKw\xad\xbbY&\xc6\xa3G\x8fn\xddU\x97\xf8$\x828\x92\xee\x9cs\xce\xd1M;\x82\\.\xeb\xc8/\x96\xf3\x85\x17^\xd0\x1d\x92u\xd94&K(o\xd4V\xc8Uesd4\x96\xf1\xa2U\xeb\xb5\xee\xfe\xe1&"|\xe2\xdeJ\xaep\x12\xc9\x02\xf9\xd7H_\x83\x90\x9bo\xbeY\x8f\xae]\xeb\x87~\xfc\xc3\xb6\xc2\xbc\xec\xbe\xfb\xeer\xc7\x1dwhNzJ\xb2\xf7c\xf6S&i\x12\x7f\x1dZ\xfb\x9d5Y.\x85o\xbfK\x1e\xdaS\xf6:a"\xfc\xfe\x89.\xf3\xad*\xab\xd3>]7\xf5H\x19\x14\xac \x89\x82\x00\xdd"\x14\r\xcd\xc1\xc6\x1f\xb3\xd5\xea\x8e\xc4P\xd4\xdd\x02\x89m\xca\xc1?\xde\x0cK\x91\xd3\xcc\xf7_\xc0\x8d\xa3\t\xef\xfd\xc2!\xf0\xef\xf8\x9fE\x98L\xa8\x89\xc2\xc2\xd3\x8d\r\xefAQl\xf3\x8f\x80\xeb\xd3\xa23\x04\x0c\x01C\xa0\xbf\x11p/\xf9\xfe\xceG"\xa6O\x8d\x86#\xc1L\x84\x87\x11h\nB\xcf\xca\xc4\xccgNp\x16\x82\xa8S_\x9f3{\xe4\x9aO\xe4\xceK\xde\x91A%\xb9\x92\x9d\x8ben\xbe\xa2\x15B\xb2\x81EI\xe0Hb:\x0b\xc0\xc0"\x8e\x8b\x88\x830\xca\xaa\xa5\xb5\xb0\x00\xf4?x\x97\xec\xef\xfa\x10@\x0bni\x81\xa5\xa9\xa7\xb3\xaf\xef\xeen}\xefv\xac\xe5\x12\xde\xfd\xf7\xdf_\x9f\xe1\xb5\x9e\n\xc9\x1eGj\xfd\xe7?\xff\x91\xc2\xc2B\xf5\x91\xe7\x08\xa6\x9e\xc6\x97H\xf7\xbb28\xdfx\xbd!\x96\\\x1c\'\x9ex\xa2\xec\xb5\xd7^Z\xbc\xde\xe0\x1c$.\xcc\x93+\xcbu\xd7]\xa7Q\xf7\x94\xd8\\_~\x1c\xf9\xc5\xf6\x15\xbf!\x06\xec\x03\xf5\xd1?\x97\xcf\x97\xc7\xaa\x96\x82\x04\xcc\xc5\xcb\xb9{\r\x9b\xbcw\x1e^\xe7\xdf6\xd5\xc9\xabu\xbe\xd3|\x90l\x14\xfa0\x1c3fL\xc2-\xb5v\xf5\x7f\xca)\xa7\x88\xb3\xb4\xd5\x0c\xdb\x9fP\x11`\x7f\xd6\x91\xb5\xdf\xa6\xd3J\xe5\xb8K\xb6\x91k^:P\xbew\xc1\x96\xb2\xc1&\xf0\xedGk\xbf\x05\xb0\xf6\x83\x93~\x12\x85\xb6\xcc7\xd4\xaa\x19\xd0\x91\xeb\xb2\xd0\xd2\x1c\xf9\xfc\x9d\x15\xf2\xf2#\xf3\x14\x8b\xa8\xc9?g\xcc:\x1c\xabUv\x13\xd6\x7f\x9c\xe4~\xfa\xb6/\xbdX\xc3Uy]\x07\xba\x08\x89=\xe0\x17#\xd41O\x80PYT\x86\x80!`\x08\x18\x02\xdd@\xc0\x1b\xedt\xe3\xc6\x01|\x0b7\x05\xa1\xe5\xdf\x7f\x11\x0eC\xa0\xa9H\xe8\x96\x80\x1c\xc3:\x92\xeb\xc5\x07\xe6\xc8\x9f~\xfa\xba\xce\xac\x16\x14c\x87`l~\x91\xe8\xc2\x8d9\x1c\x01\x18\x86\xae\xe2\x06\xc2k\x96\xd5\xab\x0f\xc0\xa8\x95\xdeD\xc7\xbf\xab\xfc\xf1G\xdf\x0c\x0b\xc0 }\x049\xd2\xee\xf8\xe3\x8f\xd7\xa4\xd7\xb7\xfboW\xf9c\xdd\xd2\xc2+77W\xfe\xf5\xaf\x7f\xe9\xad\xc9n\xe9D\x02\x8be"YGr\xa9\xb7\x12O\xb6\xdds\xcf=\x1aM_\xb0\xeem>\xe2\x9fs\x04\xe4\xf9\xe7\x9f\xaf\x1bw\x84UW\xc4\x90q\x1fx\xe0\x81\xf2\x8b_\xfc\xc2\xcb\x02\x1a\xb3\xf3\x07\xf8\x13\xf8\x03\xfc"V\x85%\xbd\xb4\x04\\\xbf\xe0\x17 E\xa8\x8f\x19\xb5+\xf5fb\xeb\xacV/\xbc\x90\xee_\x13O\xe2\xeb\xff\xde{\xef\xc5\xb2\xb0l\xc5\x84\xd7M\x02F\x00\x90z~\xfa0)\x81\xd9\x92&\xbf\xdfe\x1f|\xd0\x99\x9b\xaao\xbfK\x1e\xd8S\xf6?\t;\x97cx\xbc\x12\x9bz\xacY\xed[\xfb\xa9[\x8a\x80\xf3c\xd1\x19\x02\xed\x10\xc8\xc0\x1c[\x06\xda\xda\x03WxK\x7f\xd9^]_\xdc\xee\xd6p>\xe27\xe2\xe6\xa4\xff\xe7\xdc-t\xd9\xaf\xf9\xfe\x0b\x16j\xeajE%9\xf2\xfe\x0b\x8bd\xc9\x9c5\x1ay\x88;\xff2~v\x9f\xecP\xee@\xa0_\x0c\xaa\x8c\x89?\xe8@&M\x0c\x01C\xc0\x100\x04\xba\x87\x80\x11\x80\xdd\xc3\x89\xb3_4gz\r\xe1\x10\x84\x05\x08\xc4\x8e\xe4`h\xd2Jj\xa1+~\xef\x85\xc5\xf2\x87\xe3gJC}\x93\x14\xc1\xd9\xb3\xf37\x14Z\xe2}\x88\x98\x9a\x027\xe6\xa8\xa9\x8ay\xb1\x84\xd1\xca\xfc8+V\xd5\xaa\x02\xdc\x87\xec\x0e\xc0G\xb1\x94\x10Z{K\x80D\xb2.\xc9\x04\x92\xbf\xfc\xe5/\x15\xcf\xbe.\xdb\xe5\xf3\x1c\xc8p\xb9\xe3E\x17]\x94\xf4u\xe4,\xe2\x0e>\xf8`\x194h\x90\x92\x81\xeeZO\x0b\xe7\x9e\xa3\x85\x9a\xdbH\xa4\xbf\x08 \xa6\xdb\xd0\xe0\xed\xf6}\xdai\xa7iQ\\[\xe8i\xb9zr\xffUW]%{\xec\x81%\xe24c\x85\xbb\x01G\x02\x9e\xb4\xf4#\xa9kiT\x9f\x80\xeb\xb3\x04\xe4{*/-Cfb\'aJ\xa6oMXTT$S\xa6L\xd1k\xfd\x85\xab&\xde\xc9\x1f\xd6?1f\xde\xfe\xfc\xe7?\'l>;\xc9~\xc2_\xe6\x12J\xf5\xaf\x85\x06\xc2\xf6\xc5we~Q\xb6L\xddw\x94\x9c}\xd3\xcer\xed\xcb\x07\xcb\xd1\xf0\xed7\x1a\xbe\xfdV\xc2\xdao\xc5\x82\xaaVk?[\xe6\x9b\xf0\xd5\x9b2\x19\xe4\x04\xde\x90\x11\xf9\xf0\x15=_\xe6|T\xa6\xe5\n\x99\x18Z\x07;n\x98D\xa1\xe5\xab\xfa\xfe[]\xafV\xaf\xeb\xdch\x17z\x8d\x00\xad\x88I\xec\xfe\xeb6\xcf\xf7_\xc8\xd6\x95$\xffh\xe0P\x89\xc0\x95O\x14\xaf\x92\xbds\xfbk\x08\x18\x02\x86\x80!\x90\x02\x08\x84A\xcd\xa4\x00,\x1d\x16\xc1Y\x02\xbe\x8fo\xf7Dx\x1b\x81\xa4 \xafs,\x19\x9e v\xf6\xc0\xf3f\x97\xcbo\x8ezA\x96\xcf\xad\x94\xa1\xa3\xf2\x13\x96\x04d^\xa9\x9c\xd6W\x87\xca\x8f*\xdek\xcab:H3\x03\x98\xee7\xbf4\xfc\xeau`K\xf2$\x00q\x84\xd41\xc7\x1c#\xa5\xa5\xa5\x1ac\x90\xc4\xc9\xef\x7f\xff{\xd9z\xeb\xad\x95\x10ti\x05\x90\xedH\xa3p\x96e?\xf9\xc9O4\xdd\xbeZi8\xd2\xed\xf4\xd3O\xd7\xf8\xfaJ\xb8\xf6\x16\x0c\x97\xee&\x9bl"\x9bo\xbey\xe8ya\xbbr\xcb\x8d\x9f{\xee9)))\x81E4\xc6,\x18 \xf1\xbd\xb3\x10\xcby\xcf\x83%\xe0\xe0\xf4,\xc9\x01-\xd8Y\x0b\xe7\xf5,|_\x86MD\xe65\xd4k\xbe\xd3A:S\xb8\xf9\x07\x85u\x14d;\xd6H\x03\xfa\xe3\xf2u\xea\xa9\xa7Jqq\xb1b\xe2,1\x03Jb`E\x83\xc6\x93\xe6\xafed\xdf\xe5\xac\xa37\x992DN\xfe\xddT\xb9\xfc\xc9}\xe4\x82\xdbw\x97m\xf6\x1c)\xb5\xd5\r\xb2zq\xadT\x96\xd5{\xbe\xfd\xcc\xdao`\xb5\x95\x04(\xad\x92\xd2\x85\xd9\xb2|~\xb5\xdc\xf7\xdb\xf74G\xfd\xa1\x035\xf9:\xc4\x11\xe7l\x0e_\xbd\xd8-\xaf\x81\x1bS%\x00@)\x92\x05\xba\x11(*\xcd\x93\x8ff.\x95\xb9\x1f{$\xaf\xb3D\x0e\xa9\x88\xae\xcb\xe4\xd2\x8bO\x11\xd8)\xda\xf2\xdf\x90\xc0\xb6h\r\x01C\xc0\x10\xe8/\x04\x8c\x00\xec\x19\xf2\xec\x08\xd9!~\x83\xc0Q\xe2s\x08$\x01\xbb\xb3\xe2\x0c\xb7\xf5^\xd8+s\xd0G\x07\xc0\xbf9z\x86|6k\x85\x94\x8e\x01\t\xd8j&\xd8\xfb\xb8\x83~\x12\x06*\x12\xabk\xd6\x10t\xdc\xed\xe3#\xc9X[\xd5h~\x96\xda\x03\xd3\xd9g4$\xea\xe7\xdc\xe7 \x88\x8dSH\xc89Bf\xfa\xf4\xe9\x9a\xaa\xfb\xdcY\x16\xba{=\x9e\xecy\xe6\x99gZ\xe3N6\x12\xd0\x915\x05\x05\x05\xb2\xdf~\xfbi9\xfaJ\xd6\xb88\xb7\xdcrK\x8d\x8f\x84\xa0\xbb\xd6]|\x83\xb8\xcf\xa5\x19e>X\xffn9\xf5\xbb\xef\xbe\xab\xc5`\x9bs\xbb\xf7\xbeP\xbbZ.Y\xf5\xb9\x0c\xcb\xc8A[w\xe3\x99\xb5K\xcb\xaby\x88gic\xbd,o\xf6\x08@7r\xddi\xa7\x9d\xf4\xe6(,\x19\xd7\xceU\xf7?\x11\x03G*\x9fp\xc2\t\xfa`P\xbf\xbb\xee\xe7"\xb9\xefd\xdbm\xb5\xa6A\x83\xe0\xce\xe8\x94\x11\x1b\x16\xca^?\xd8H.}do\xf9\xe5\x03{\xc9nG\x8d\x97\xdc\xc2,Y\x82\x89\xb7\x8a\x15uz\x9f\xe7\xdb\xcf\x98\x8e\xe4n\x01\xc9\x9b{\xfc\xfc\xa5\xa0(K\xfe~\xf9{\xd2\x10\x83\xafIL\x80D\xad\n2\x0f\x94\t[\x96\xc8\xd4\xfd\xc6\xc8\x9a\x95u\xb6\xbb\xb5\x07I`\x7f\xd3\xb1\x92&\x03u\xfb\xef;"\xd9\xf9\x97\xf9\xf6f\xc1Dn\xc5y\xc7\x9dg`\xa5\xb3\x88\x0c\x01C\xc0\x100\x04\xfa\x0b\x01#\x00{\x8e\xbc#\x01\x97\xe2\xd1#\x10\x1eEp\xb3d\xa1v\x98\xb4H\xa1\xa2\x17\xabm\x92\xab~4S\xde\xfa\xf7B\xdd!\x98E\x88Z\xf9c\x9a\x1d\n\x10\xa0\xd3\xf3X]\x13\x14\xd3\x10-\x00}\xca\x95;\r3\xd0\x0fN\xc2`\xd0!0\x89qQ\x1b(~\xf5\xf4+\xe36\x94\t\xa2\xd1\x9ez\xea\xa92n\xdc8%\x03\x83$\xe8\x18\x17\x89\x8dQ\xa3F\xb5.wL6\xa2\xc3\x91}g\x9ey\xa66\x82 \xf3O?\x89\xfd)\x8e$\xdbq\xc7\x1d5\x1b\x8e\x10\x0c;O\xb4<$\x8e\x13&L\x90\x07\x1f|P\x93\xe3g\xb7)\xc8=k\x16\xc9\xad\x95\xf3e\x83\x8c<\xcc\xce\xac\xdb\xc2a\xe3\xa5\x16\x80\x15\xb0\x00\xacn\xf6\xdeSX\x14\xaf\xf1l\xba\xe9\xa6z\xec\xab\x95f\xd8\x18\xb8\xdf\xd9QG\x1d\xd5Z\xfe\xb0\xd3L\xfa\xf8i\xe9\x87>\xd4\xdb\xc5\xb7\xcd\xaf\x1f.\xe9\x12\xc6sn\xd9\x05;\xf9\xee%\xa7]5MFmT(\x15\xd8e~\xf5\xd2\x1a\xa9\x83\xd5\x1f\xc9B\xdb\xd0#\xe9[@\xd2\x17\x80\x16`\x83\xb1\xf4\xf7\xb5\'\xe7\xc32l\x99\x96\xc7Y\xacFU8Z\xf9\xe1u\xabr\xf8\xff\x9b\xac\xabQ\x1a\x9d3\xc0\xa82\x91\xe2\xe9\xd0\xca\x93\xbe\xff>{k\xb9|\xf1\xd6\n-m\xc8\xf5\xcc\x1ae\'8\x0ba\xa6&h\xd6\x7f>\x0cv0\x04\x0c\x01C \xb5\x10\xa0\xf5\x9aI\xcf\x11 \tH\xf2\xb4\x1a\xe1\x18\x84k\x10\xceCp\x96\x80P\x8f\xc2\x11*\x00\xde\x12N\x91\x9b\xcfySV/\xa9\x91\x03N\x99\xa4\x96\t\x8d1|\xe7\xe6\xef\xc2I~\xbd\xb1R{\x00\xff\'\ru\x8dm\x16\x80\x0e\x95\xf5>\xdd\xfd\x1b\xdc\x90\xbe\x06\x16\x8055\x8d\x92\x97\x9f!Z~[\x7f\xb2\x1e\x10\xb9\xac\x11Z]\x03\x06\xbfX\xae\xd3\x17q\xe4\\~~\xbe\xdcv\xdbm\x1aU\x18\x04\x90\x8b\xf3\xc7?\xfe\xb1<\xf2\xc8#2c\xc6\x0c\x10\xe1m\x96\x87})C\x14\xcf:\x92\xec\x88#8_@\xeb\xcb&\xcd\x7f_\xd2v\xe4\xd4\xaaU\x9e\xff:\xe2\xe1\xae\xf5%\xde\x9e>\xeb\xd2t\xa4YO\x9f\xef\xcb\xfd\x8e\x00\xe3\xa6*o\xbe\xf9\xa6\\\x7f\xfd\xf5\x18\xbd\xa0}#R\xbe\x1f._\xf5\xb5\x8cN\xcf\x93C\x0b\x87\xc9\x82\xc6\xbaV\x1f\x7fL\x93\xdf\xd3\xe7_M\x9c\x19lc#_\xeb\xa2Kj\xf5\xa4\x9b\x7f\x88\x01\x83#v\x1d&|<\xfe<>:\xd7\xa6\xe3\xaf\xf1<\xfe\xba+\x1f\xe3p\xe7\xf1\xf7\xb8{\xf7\xd8c\x0f^6\xe9\x04\x01\xbe\xefH\xf8\xa9\xdfST<\xf1d\xfd\x93\x08\xdcb\xe7\xe1J\xfcM\xddw\x03\xc9\x1f\x9c\x05\xeb>t\xeakb\xb2\xe8\x9b5\x8a9~V\xb0jbWob\x08\xf4?\x02\x9c\xb4\xcb/\xca\x94\xcaUu\xf2\xb7K\xfd\xa5\xbfh\xc7Q\xfb\xfe\xe3\xbb\x87\xbf\xa3\x8d\xb7+\x95m\xf7\x1c-e \xca\xe3\xdfQ\xfd\x8fT\xf2\xe7\x80\x1b\xe9ebb\xfb\xf1\xeb>\xd1\xc2p\xf2?d\x02\x90\xafE\xbe\xec\xfe\x82\xc0sg\xd8\x80S\x13C\xc0\x100\x04\x0c\x81TB\xc0\x08\xc0\xde\xd7&\xd9\x13728\x1f\xe7\xdcJ\xf2\n?\xba\xf8\xef\xfcK\xc1\x1d8f\xd5\xdd\xde@\x06>\xf0\xfb\x8fd\x05\x1c\x91\xff\xf0\x92)RS\x19\x93z,\x87u\xbe\x8c\x82K\xb1\x071AmP\x0b@lVB+@\n5\x89\xc0\xc5\x8f\x94\xd6\x7f\xf5(\xf7\xa0\xa2B\xa9\x87\xf3\x7f \x13xR)\x15!\xeb\x07\xa3\xda\xc6\x86\x984\xf8\x84Go\xca\xc7\x01\x80#<\xee\xbf\xff~\x8d\x93\x9f\xc3\x18\x04\xb8\xb4\x187\xad\xbdF\x8c\x18\xa1i\xf3\xb3\xcbCo\xca\x10\xc53\xb4\xfe\xe3R\xcd\xc1\x83\x07\x8b[Z\xea\xfc\xe6\xf5%}G\xfe\xbc\xf1\xc6\x1b\x1a\r\xe3t~\x01\xfb\x12oO\x9fu\x04\x97\xf3\xfd\x18F\xfdw\x95\'\xa6O,\xae\xbb\xee:\xf9\xea\xab\xaft\xd7h.\x05NC[\xe4K\xf8\xc7+>\x96\xd2\xcc)\xb2s\xee\x10Y\xd8\x88\r\x83\xfc\xf7\x03_\x1f$\x86b\xbe\x19\x8b\xb61\x9f\x0ctV\x95\x0ec\x97\xbe++\x8flw<\x12w\x96\x99\xf7FUv\xa6M\x12\x99\xe93M\xb61\xb6\xaf\xf2\xf2r\xcd\x87\xcb\xa7\xcb\xf7\x80<\xa2n\xd9\x13\xb0/l\x86\xc5T\xbc\xdf\xac\xc9;\x0f\x93]\x0e\x1d\'\x13\xb7\x1d*c&\x15\x03\xcbf\xf8\xf3\x8bI\xf9\xf2:\xef\xbd\x82\x196nbeb\x08$\x1a\x02$\xa3\xb9\xf4\xf7\x86\xb3\xdeP\xd7\'|\x89EM\xfe\x11\x13GD}\xef\x82-\xe0\xf7\xaf\t\xe4:\xf5\xbeDC+y\xf3C\xa2w\x086\xfb{o\xc6\x12\xf9\xf2\xbd\xd5\xfa.\x0b\xd9\xdd\x0f\x95u\xd6\xe0g\x08O \xf0\xf5\xc9.\xd4\xc4\x100\x04\x0c\x01C \x05\x110\x02\xb0o\x95\xca\x0e\x92\x1d%G\x0b\xbfC\xe0z\x8c?!p]\x9e\xebPq\x1a\xbc\xc4+}\xcf\xff\xed\x1b\xecFX+?\xbef\x07I\xc7n\x85\xd5\x15\xb16\xdfF\xc1\'\xdde\x8cj\x81\x83\x99\xcaX5\x96\x00\xfb\x04`\x97\x0f\xf4\xfaK\x8f\x01\xa4UGMe\x83\xa4gA\x11\xeeu\\\x03\xe9A2\x80\xb0\xd0T\x0b@\x1f\xb1^\x00G\xc2\x83D\xc3\xfe\xfb\xef/\x87\x1f~\xb8\x02\xd8\x9e0\t\x12U\x12\x1d$\xd2\x86\r\x1b\xa6\x96^\xe7\x9e{\xae\xa6\x1fd\x1aa\xc4\xe50\xd9c\x8f=\x94\xa8!q\x13\x04\x01\xe8\x96\x15\xff\xfb\xdf\xff\xd6l\xf77\xe9\xc3\x9d\x8d\xfbC\\;\xe4\xf1\xe9\xa7\x9f\x96\xed\xb7\xdf^\xe8\x17P\x97j\x82\xd8\xa1\x1c\x8f\x9d\x81\x1f\x1a9E\xa6\xe4\x14\xc9\x12l\x12\xe2H@.\x17\xee\xa8\xe9;l\x19\xa7#\xdbx\xcd\xd5%\x8f\xed\xc9\xbe\x9a\x9a\x1a)++\xd3PUU%\xb5\xb5\xb5R]]\xad\xa1\xa3\xba!\xc9\xc8x\xb2\xb2\xb240\xbe\xbc\xbc<\r\xf4\x15\x99\x93\x93#<\xf2>Z\xd8\xc6\xa7\xc7\xf3\xf8\xcf,\xe3\xc4\x89\x13\xbdr\xe3;gq\xca\xeb\x03I\x00\xa7g\xe9\x87jg\xff\xc8\xbau;\x9d\x8f\xdfb0,\xfd\xc6\xca\xce\x87\x8d\x95\x92\x11y\xfa]\x0c\x96\xe3\xcb1y&\xe8C\xe8B\x82\xcf\x9b\xb5\xdf@j1\xc9UV\xbe\x8bJ7(\x90\xff\xde\xf3\xb5\xbc\xf7\xc2b/\xf3\xe8\x83\xa3\x16gM\xbb\xfd\xfe\x1b\xc8\xe4\x9d\x86\xa9_j^3\t\x0e\x01Z\xfe\xb1\xdfx\xcc\xb7\xfe\xe3&Wp\xf8\x1d\\\x02\xeb\xc6\xe4f\xfdX\xb6M\xb6/\x95\xc9;\x0c\x93\x1d\x0f\x19+#\'\x0c\xf2\xdeu\xf0uZ\x85\t\xb1F\xec\xe0\x9b\x81z\xe1\x94\x9cY\xfa\xa5BK\x18\x18e\xe0\xfcVN6,{a\x01\xf6\x97s\xb8?\x83Gz\xf7\xcbo\xddW\x1b\xb8K\xf6F[\x95\xc8\xf2o\xab\xfbE\xc7L\xd9\x9aG]g\xa3\xae\x1b0y\xfe\xc8u\x1fk1#\xf4\xfdw#\x12$\xe3\x887\xa4\x11\x80\n\xbe\xfd1\x04\x0c\x01C E\x110\x020\xd8\x8a%\xd9G\x1b\xb4\x97\x11\xf6E\xf8;\xc2\xb6\x08\xa1\x92\x80\x88\x1fK\x9e\xf0\x07\x03#*d\xbf>\xec9\xb9\xe0\xaf\xdf\x91I\x18\x0c\xad\\\\\x83\x81h\xdb \x97\xf7\x86)\xd4\x0fiU\x11\xc3& aK\xb3\xaf\xa6T\x95\xd5!)\xcf\xf9\x7f\xd8i&}\xfc\xa8 \xfaHk\x84\xdf\x9e\xbe\xc8\x8d7\xde(\xdbn\xbb\xad\x12\x16\x1c\x90G%$UH\x98\x8c\x1f?^~\xfe\xf3\x9f\xcb\xd5W_\xbd\x16i\x12U>\xba\x93\x8e\xcb\xeb&\x9bl\xa2d\x12\x9f\t\n+\x0e\xfe\x18\xd7\x16[l!\x9f\x7f\xfe\xb9\x92M\x8eH\xeaN\xde\x82\xba\x87y`^\x16-Z\xa4Q:\x12.\xa8\xf8{\x12\x8f\xc3\x9b\xcb\xc4\xb9\x0cx\xbb\xed\xb6S\xcb@^oA\x9b\xa9\xc5K\xf2\xfbK\xdf\x97\xc7Fn\'cA\x026\xe0s6\t!\x08\xcb\x90\t\xffZ\xdc\xc9\x92\x84\xe1\xdbo\xbf-\xb44\xa5E\xa1\xb3\xe2tya\x99\x19\x18\xaf\x13\x87\xbd\x1b\x94\xf3\xd8\xfe9woGG\xc6Gi\x7ft\xf7\xc6\xa7\x15\x7f\x9f\xfb\x9ei\xb9\xb4\xdd\xb5T:*<\x8a\xbb\xb3\xf4k+\xdd\x86\x9b\x97\xc8.\x87\x8f\x95-v\x19!c6+Vk\xf0\xcaU1X\xfb\x81\xe4m\xf4\xf6\x80&\xf1\x97a~\xfd\xda@\xb3\xb3\xa4A -\r\xfe\xe0F\x17\xca]\xbfzW\x16\xcfY\xa3\xef\x88\xfe\xf8\xad\xf37\xc8t\xa9N\x1e\xf2\xe3\xc9jM\x9b\xee\xbf\xb7\x92\x06\xcc\x04\xcf(\'\xaaJ\x86\xe5\xc9\xcc\x87\xe7\xca\x8a\x855Z\xd7\xce\xdfbHY\xd7\x91\x03\xe2\xa6\xf5\xdf\x03\x08^G\x14Rb\x16\xad!`\x08\x18\x02\x86@b \xd06\x82I\x8c\xfc\xa4B.\x9c\xef?n\xddu0\xc2\x8b\x08$Zy\xdd\x9f?\xc5Y\x18B\xe5\x0c\xe4[-\x96e\\\xf9\xc3\x99\xf2\xf63\x8bd\xf8\x98\x02$\x8ad\xd9\xcdG!J0\xa5\xc1\xff_T\t\x8aT\xc1\x81{s\x13\xf4\x16S]\xbaU\xc3\xb4\x16m\xb3\xce\xec\xd6#\xad7q\x00p\xf2\xc9\'\xcb\xd9g\x9f\xad\xd7\x1ca\xd1zC\x04\'.\xcd\xe9\xd3\xa7\xb7Z \xbak\x11$\xdf\xed$\x9c\xb5\xdf\x91G\x1e\xa9\xcf8\x92\xa8\xdb\x11tq\xa3#\x97\x0e>\x98\xaf\x18o`\xd6\xc5\xed\xa1}\xe5pwK\x91\xfbc`\x1a_8%\xfb\xd0F\xb7\xd9f\x1b\xf9\xf0\xc3\x0f\xf5+\xe2N\xd2\x9bR\xd6\xd4 \x87\xc2\x12\xf0\xd3\x865\xb2Af\xaed\xc4\r`\xb9\x19\x04e\xf7\xddw\x97\x1dv\xd8Aw\x16&\xce\xb4\xb2\x8c\xf7\x01\xc822N~\xe7\x02?3\xf0;\x174\xb2n\xfeq\xcf\xb8\xa3\x8b\xcf\x1d]:\xee\xe8\xac\x03\xdd\x91\xcf\xa5\x94\xe0]N\x0bo7y\xc5\xe2\xd1\xaf\x1f\xad\xfeH\xe4\xd1\xf7\xd8\xb1\x17n-\x7f\x9cq\xa0\\\xf6\xd8\x9e\xb2\xef\x89\x93\xa4tl\x81\xac^R#\xcb\xe6\xc2\x07#\xfa@v{\xf4\x05\xa9\xd6~\xd67\xa4T\xf3\x18(\x85a{\x1f:2_^~t\xae<\x7f\xef\xd7~\xb1\xfb\xe7\xb7\xee\xa6X\x8f8g\x0b]a\xa2\xbf1\x1bA\x04\xda\x14\xb3s\xd2\xa5\x06>\xbc\x1f\xbf\xfe\xd3@\xe3]Od|;\xd2X\x81$ k4:\xe5\x1d\x89\x99\x18\x02\x86\x80!`\x08D\x8f\x80u\xdf\xe1`\xeeH@zj>\x14\xe1~\x04Z\x06\xb2c\rU{\xa3\xc2\xe8v\x08\xbe\xe9\xec7\xe4\xd9\xbb\xbe\x92ac\x06I\x1a|\xe4E2FD\xe98\xe0\xaa\xf7-\x005/\xa1\x96\x18N\x17\xb1\xbc\x8b\x03`\x12[&\xebA\x00u\xa1\x04\xa0\xbf\x03\xb07\xab\xbf\x9eg\xf0\xb5\xb3@:\xf4\xd0C\xe5\xce;\xef\xd4\x07\xfa\x8bt \xe9Db\x84r\xd7]w\xf5k^4\xf1N\xfe\x90\xac\xa1\xec\xbb/\x8d\x811\x03\x00\xcb\xb2\xa0$\x9e\\d\xdd0nWGA\xa5\xd1\x9dx\\>h\x85\x98(\xe2\xda\xc7\x96[n)\xaf\xbd\xf6\x9af\x8b\xed\x85\xf8p\xa4S\xd5\xdc(\x87\x83\x04|\xb9n\xb5l\x04K@\xefj[\xee\xe9\xcf\x8fB\xd2\x8f\xcf8\xd2\xad\xbf\xda{[\xceR\xfc\x0c\x95\xc3\xba\xa3\x0fY\xf6\x92\\\xf2\xe8\xac_\xb8\x9b\xef6{\x8c\x963\xa6\xef \xbf{z_\xb9\xf8\xef{\xc8Agl*\xf9\x85YR\xbe\xa2^\xca\x96b\xc3\x95\xf2z}\x9e\x1bz\xf8|o\x8a\x03f\xc5Ke\x04\xd8]\x14\r\xcd\x95\x05_\x96\xcb\xad?{K\x8b\xda\xdd\xfe:h\\H\xc6S\x81\x1c\x84\xfc\xecu\xfcDYS\xe6\xfd\xd6\x82Ng \xc7G\xff\xa5\x83\xe1\xfb\xef\xd5\xc7\xe6\xe3\x9dV\x0b(\xda\xdc\xad\x84\x84\x0b5sj\xcd\\\xf6{\xb3\x9f\x86\x91\x7f>\x10v0\x04\x0c\x01C \x95\x110\xca$\xbc\xda\xe5h\x9f\xf8\xd2;\xfe\x0f\x11\xaeC \tH\t\xb5\x93\xa5\xa5\x04\x15E\xca\xbdW| \x0f^\xf5\x81\x0c\x1e\x9e\'\x99\xdc)78\x0e\xc2K\xa0\xdd_\xd5(`\xef\x18\xab\xf5\x12\n\x95\x94\xf3Q\xac\x84\x05\xa0\'\xd6\x9c\xdbU\xc7:\x1f\xb5~0:n\xa8\xf5\xc1s\re\x9d;\xdb.8\xffj\xd3\xa6M\x93\'\x9f|R\xbfP\xc2\xb5\x1b\xcf\xb6\xc5\x12\xec\x99\xb3<\xfb\xfe\xf7\xbf/S\xa7N\xd5\xc8\x13\xc5\x1f\x1e3C\xe2\x88\x18q\xd3\x06\x97?\x97\xe7 \x90`\xfc$\xfd\x8a\x8b\x8b\xe5\xc2\x0b/\x0c"\xca^\xc5\xe1H1g\x01\xc8\xf2\xbak\xbd\x8a\xb0\x8f\x0f1m\x92}\xc4\xa6\xbe\xbe^v\xd9e\x17y\xeb-o\xf0\xcc\xeb-h\xb3|K\xe069x\xd1\xdb\xf2x\xf52\x19\x95\x91\xa3\xa9\xba\xb7\x87\xab\'\x12\x7f|&\xdeO`\x1f\xb3g\x8f\xb7C\x80\x13D\xba\x81\x13\xaf\xa3N\xb4\xfe0\x10\xa6\x8c\x80\x0f\xbf\xbd\x8e\xdbH~q\xf7nr\xeb\xfb\x87\xcb9\x7f\xdeYw\xf1-\x1a\x9e\x8b]\xef\xabe\xc5\xfc*\xbc\xc7\xbc~\x86\x96~\xba\xf3\xb3>i\x7f\x0c\x81\xe4F\x80:\\^a\xa6\xd4\xd76\xc8ugx\x93\x18QL\xa6v\x86\x1a\xc9x\xca\x0f.\xdeZ\xf2\x8b\x90\xafjN8uv\xb7]\xef)\x02\xe8f$\x17\xf5]\x0e\xbf\xdd\x8f\xdf8[\x1f\x0fUw\xf62\xe8\xc6!\xb7\xe3#}xh\xd7\xe8}e\x7f\r\x01C\xc0\x100\x04R\x19\x01.M5\t\x0f\x01v\xb0\xaeS\xbd\x00\xe74\xb1\xbf\x06\x81\xf4\x1c5*\x9f\xa6\xc3Y\xc0\xc2\x01.\xf9\x19\x1e\xffu\xcb\x17R\xb1\xbc^N\xbeb\xaa\xd4\xd54H}Uc\xa8;\x043\xcd\xfa\x1a\xcf\xfa\x89\x85wZF\xc0El5\xa5\xacZ]\x8f\x01?7\xa2\x08:\x85\xd4\x8c\x8f\x0e\xf4]\xfd`\xef\x04\x81\x9b\xacN\x85\xe4\x1f\xc9\x14.\xa9tD\n\x89\x91\xfe&\xdbH\xd20_\xcc\xdf\xcd7\xdf,;\xed\xb4S\x8f|\xaeuZ\xe0\x80\xbe AG\xf2h\xf2\xe4\xc92x\xf0`\x8d\xd5Y\xcb\x05\x94\x84\x96\x9dq]y\xe5\x95r\xfb\xed\xb7\xeb\x86\x15.\xdd\xa0\xd2X_<,#\x85>\x00c\xb1\x98\xfa:$\x89\xe3H\xb4\xf5=\xdf\xdb\xef\x1d\xc9\xc8\xf4\x99\x16\x8f\xbcF\x02\x92\x9f\x89\x83\x13\x12\xd7\xaf\xbf\xfe\xba\xec\xb5\xd7^J\n*\t\x88{\x99\xf3KW})\xb9\xfeH\xcb\xcd\x8d\xb8\xb8\xe9\xdfjHz\x96\xd4\xc0b\x90\x9b\r\x99\x04\x80\x00\xfa$n\xb6\xc2\xea\xe1;\x9bD\x87\xbf\xf2Z#\x1f\xbfE\x89L;h\x03\xf8\xaf\x1d.\xa3\'\x0e\x82EL\x8eTU4H-6zj\xc4\x86(-\xf0\xdb\xa8\xcf\xc3"Pw\xf0\r K\x16\x85!\x90h\x08\xa4c\x99{Aq\x96\\s\xea+\xb2j1\xac\xc1\xf0.\xe2o\xa5?\xc4\xad(\x998\xa5Tv>d\x9c\x92T\xad\xa4}\x7fd(%\xd3l\x91\xa2\x92\x1c\xb9\xff\xca\x0f\xf0\xaek\x84\x9fE\xf6i\xa1\xd67\xbb?v\x92\xab\x11\xee@\x08m,\x82\xb8M\x0c\x01C\xc0\x100\x04\x12\x0c\x01#\x00\xc3\xaf\x10G\xaf\xb0\xb3\xbd\x16\x81$\xe0m\x08\xc5\x08d\xc9B\xab\x83\xf81\xeb\xab\x8f\xcd\x93U\xf0\x8ft\xce\xcd;KAI\xb6T\xad\x8eyK\xad\x90\x81 E\xb5\x08\xe8-\xd5\x95\r\x1a\xad+|\x90i\xb4\x8f\xab\n>S<>\xb5\xfd7\xf6\xb9=\x02^\xfd\xa4\xe9\xce\xc9\xfa]\x17:\xa6#\xff\xb8\x89\x057Up\xd2\xdf\xe4\x9f\xcb\x87#\xd4v\xdcqG\xd9g\x9f}t\xb7V\x97gwO\x7f\x1fI\x9cR\xe8\xab\x8d\xe4T\xd0B\xe2\x8bd\xd7\x8b/\xbe([m\xb5\x95\x12aQ\x92\x80\x8e,[\xbdz\xb5\xcc\x9d;W6\xddt\xd3\xd6<\x04UV\x96\xd1\x11|$\xf7X\xc7\x8e`tm \x9e\xf0[\xbat\xa9\xd0"\xf1\xcb/\xbf\xd4v\xfb\xde{\xef\xc9\xbcy\xf3\xa4\xae\x8e\x9b\x05y\xc2f\xcf\xdf\x02\x8fu\xba\x83\x92w=\xfeo3^\xa0\xab\xe13\xd0\xdbF"\xfe\x1b;\xef.\x02\xa8.\x9dl"\xd6\\\xe2\xa6V~\xf8\x03\xee^\xa5\xa84W&n["[\xed>J\xb6\xfd\xeeH)\x19\x91\x8foA\xce6\xb4H\xf5\x9a\x06Y2\xa7\x92\xdc\x87Z\xf7y\x9cn\x1b\xb1\xdb\xdd<\xd8}\x86@2!@\xa2\xaftt\xbe\xfc\xe3\xea\x8f\xe5\xe3\x97\x97y\xef\xa9xe.\xc2\xc2\xf0\xb7\xe7\x88\xc7\xe3`\xfd\xd7\x00\xd7!\xf4\x95j\xe4{\x80\x95\x00%\xb9\xa0([\x16\x7fU!\xcf\xdc\xf9\x95F\xac~\xbb\x03L\xa2\x83\xa8\xd8\xf5\xf1e\xfa\x08\x02\xfdwpu\x92\x9b\x03\xc3\xa9\x89!`\x08\x18\x02\x86@*#\x10\x1a\xf9\x94\xca\xa0\xf5\xb2l\xae\xc3}\x18\xcf\xaf@\xe0\x8e[#\x10\xd8\xe9\xba\xa5\xc18\rG\xa8\xc8}\xf6\xc6r\xf9\xdd\xf7_\x92so\xd9U\x86\x8e\xc8\x95\xb2eu\x92\x8ee\xc1A\n\x8diH\n\xd0b#t\xf1\x95bn\x02\xc2\xa5\xcd\x9av\x14\x8cc\xe8\x05\x0b1\x01T7\x89\x8d\x9aJ\xcfB\xb33\xb8H\xa8\xd0\xc2\x8e\x84\xce\xec\xd9\xb3\x95tq\x16w!\xe6\xae\xc7Q;k\xc4\x1bn\xb8Aw\xc4e\x1eI\x0e9b\xaa\xc7\x11\x06\xf4\x00\xf3A\xd9c\x8f=\xf4\xe8\x08+\xfd\x10\xe0\x1fG|\xd1\xdf\xdd\xc3\x0f?,\xc7\x1cs\x8c\x92eQa@\x9c\x1d\xe9J\xd2\x8d\xed\xa5;\xd8wv\x0f\xaf;\xb2\x8f09?|\xae\x9c\xed\xa1\x9b?\x7f\xbe\xbc\xf1\xc6\x1bj\x9d\xca\x1d{\xf9\x99\xd6\x88\x0e\xff\xf6\xf7\xc7\x7f\xe6\x0b\x99o?\x1e;\x13#\xff:C\xa6\x93\xeb\x00T{\x14\xfc\x06\xd9\xe7\xd0\'m\x8b\xbf\xa4\xd7=1r\xfc \x99\xb2\xcf(\xd9|\xe7\xe12fR\xb1\x0c\x1f[(\xb1\xfaF\xa9\xc6D\x0e}_5\x83`\xd0\xce\x12/t\xdb\xb9\xd7\xa1f\xc7\x81\x80\x00\x7f/\xc3\xb1\x99\xcd\x8c\x07\xbf\x91\'\xff\xe2\xfbU]\xdfK*L`\xf8#\xc6;\xf9\xbb\xc7L\x90M\xa6\x0e\x95\x15\x0b\xaa\x8d\xfc\x0b\x18\xef\x16\xec\xf2\\\x80e\xd5\xb7\xfc\x8c\xfb\x06R\x8f\r\xdd\xda\xd3\x8dE\xaa\x90\xdc\x1f5\xd1\xae\xbbA\xff\x16;\x18\x02\x86\x80!`\x08\xa4\n\x02F\x00FW\x93\xect\x19\x88\xf9\x8b\x08\x07 <\x88\xb0)B\xe8$ t8%\xc8\x16~Y!W\x1c;C~~\xc7n2f\xd3b\xdd5\x91;\x07\x07*`\x95ja\xbd\x11\x95\x90\x00\xa4\x92\xca\xa5a\x11\xcc\x9cFU\xacP\xd2\xa1>\x0f\x06\x10;\xcd\xd5w\x1a\xbf#t\xc6\x8d\x1b\'\x1f}\xf4\x91\x12<$e\x9c\xb5U\xa7\x0f\xf6\xc3\x17.O\x9bo\xbe\xb9\x1cu\xd4Q\xf2\xe8\xa3\x8fj>I\x0c\xf6\xa78\x82k\xef\xbd\xf7\xd6l\x84E\x00\xc6\x97\xf1\xe8\xa3\x8f\x96[n\xb9E\xce:\xeb,%\xe1H\x9eE\x81\x83#\x8bI\xc0\xb9]\x89\x9d\xd5\x1e\xf3\xe7\xb0 \x06\x0c\xac\xb3\xce\xf0\xe0\xf5\xf6d_EE\x85Z\xf3\x91\xd8\xa3\x95!\xd3\xa1U\xdf\xfa6\x1e\xc9\xce\xce\xd6\xb4I\x062\x0f.\x1f\xf1\x98\xf1\x85l\xd27\x048`\xa5u\x9e\x92}\x00T1%\xde~\xb4\xe3&\x0f\x96\xd1\x1b\x17\xc9\xe4\x1d\x87\xc9\x96\xbb\x8d\x80\x95_\x9e`\xcc+\xe0:\xa4\xae*&K\xe6V\xea\xfb[w\xebE<\xe6\xcb\xafo\xf5aO\'\'\x02\xfc\xfd\x0c\xdd _\xde{~\x91\xdcu\xc9{^!<\xfe\xad\x7f\n\xc4\xb4\xa1+\xe4\xe4f\xc8Q\xe7o!\x95p\xb5\xa2\xac~\xff\xe4&%Se\x9d\x17\x0f\xcb\x93\xf7g,\x95\x0ffp\xcf@\x08\x95\xf5p\x85\xf3\xbe4:\xe0\xc6\x1f\xdf \xe0\xad\x1b\x9a\xa7\x1eDmb\x08\x18\x02\x86\x80!\x90h\x08\x18\x01\x18}\x8d\x90\x99`\xe7\xfb\x01\xc2\x1e\x08\xdc!xO\x04w\x9d\x14M(\xa2+\xdd0X\xabXQ\'\x97\x1e\xf1\x82\\\xf0\xd7]e+\x0c\xc8V-\xaa\xd1Y\xc7@\x12\x85\xd5\x86ga\xe6\x13\x80\x9d\x99\x98\x05\x90\x98\xd3\x93b\xd8q\x98N\xaa9\x10%\xb9e\xd2\x05\x02~\xfd\xd4Vy\x16j\xed\xd5>G\xe6\x8c\x1d;V-\xffH\xa2\x90@qD[\x171\xf7\xcbW$\x8cH61\xdf\xd3\xa7OW\x020\n\xd2\xab\xab\xc22O\x8el\xdap\xc3\r\xf5\xd6\xb0\xf1czL\xf7\xcc3\xcfT\xab\xb9\xd3N;M\xc9?\xe2B|\xc2\x14gm7k\xd6,M\xc6-unO\xe4u\x95\x07\xe6\x7f\xc9\x92%J\xf4\xbd\xf9\xe6\x9bJ<\xf3syy\xb9|\xf1\xc5\x17R[\xcb]\x11;\x16\x96\x9b\xc1\xa5\xc7\xf22>\xfa$4\t\x18\x01\xbcb\xb5\x83R\xbcA\xe2\xc1\xba\x8f$A\xbc\x1f\xbf\xcc\x9ct\xd9b\xa7\xe1\xb2\xed\x9e\xa3e"\xac\x86h\xf17\x08n\'j\xe1\x16\xa2\xa62\xa6\xfd\x8fWG\xe4\x13h\xe5\xc7\x185\xd6\x803k\xd1\x19\x02\xc9\x81@3~G\x83G\xe6\xca\xbcO\xca\xe5\xba3_\xd7L\xa7C\x9f\t\xd9\x0f\\\xd7\xe0\xf0\'\tu\xea\xe8\x8b\xb6\xd6\xdd\x7f\xa9\'\x9a\xef\xbf\xae!\xeb\xe9\xb7\x99\xd8\xb1\x1c\xaf@y\x18\xcb\xbd)<\xef\xc4#EO\xa3\xee\xec~*\x03\xac\xd9%\x08\xb7\xf8\xe78\x98\x18\x02\x86\x80!`\x08\x0c$\x04\x8c\x00\xec\x9f\xdav\x16\x7fK\x91\xfc\xa1\x08w"\x1c\x83\xe0F\xea\xe1\x8d\x860X\xf3\xac5\x9a\xe5\xea\x93_\x91\xb3\xae\xddQv9|\x9c\xac\\\\\xa3\xa9S\x01\xe9\x8bx\x8f\xd3\xc7\\\xb4\x16X\\\xd2\x9a\x9d\x8b\xd4\x89`\x1f\xcb\xd0\x97\xf2\'\xfa\xb3\x18\xb7+QR\x0e\x12\x98\xc2\xcfNH\xa2p`>h\xd0 \xf9\xf0\xc3\x0f\xa5\xb0\xb0P\x89\x94\xb0\xc9+\x97~o\x8f\x8e\xf8\x990a\x82\x1cp\xc0\x01\xf2\xcc3\xcf(\t\xd6_D q$\x01E\xdf\x84Q\t\xd3tr\xea\xa9\xa7\n\xad7\xf7\xdbo\xbf\xd0\xc9?\xa6\xe9\xd2\xa6\xb5(\x85\x84`YY\x99\x92w\xf4\r\xc8\xf3\xc5\x8b\x17\xcb\x9c9sd\xd5\xaaU\xb2l\xd92Y\xb0`\x81,_\xbe\\\x16.\\\xd8\xad\xe5\xba\x8c\xd7m\xf0\xc16\xeaH>\xe2\xec\x02\xaf\x99\x04\x8b\x00\x9b\x95\xd6/\xde\xa9-\xb0V\x01\xdc\xad\x16~\x8e\xf4\xcb\x1f\x94)c6\x83\x1f?L&m\xbd\xfbH\xdd\xbc\x83V|i\x98\xe6\xe2n\xf0\xd5\xb06\xaeX^\xab\x83\xdb4t>\xec\x7f\xdco6\xd8\xdcZl\x86@\xf2!@\x92\xafpH\xb6\xbad\xf9\xe3\x8ffj\x018\x99\xd9\x9f\xe4\x9f#\x1f\'N\x19"{\x1f\xbb\x91\xac\xc1\xee\xb4\x81\xaf\x14I\xbe\xaa\n4\xc7\x9c<)\x19\x93//>\xf0\x8d,\xfc\xa2\x02q\x87\xbe\xf4\xd7\xe5\x9f\x1a2\xc7\x1c\xf3\x10h\x8c\xe0\xcf\x06\xe3\xcc\xc4\x100\x04\x0c\x01C`@ `\x04`\xffU3;]v\xc4\xd5\x08?B \x19x\x0e\x02M\xd8\x18\xdaF\xf4\xf8\x10\xa4p\x9c\xec\xfc\x8c\xdcr\xc1,Xd\xd4\xca\x81\xa7o&eKk\xd4\xa2#\x8eK\xe8y\xb2(\x11-\x00\xeb\xab=\x0b@\x16$\n\xe12\xe0\xe1c\xf3%\x06\x06\x90\xa0\x9a\xac\x8b\x00\xeb\xbd\xa0(KV/\xab\x95\x8ffr\x02\x98d\x8dWC\x1c\x90\x93@!\xc9\xc2\xe5\x95%%%\xfa9Y\x06\xea$\xfb\xb8\xe4\xf5\xb2\xcb.S\x02\x90\x9f\x1d\x11\xb7.\x12\xe1^qXn\xbf\xfd\xf6\x9a\x10qu8\x92\xac\xea\xae\xf09G\xae\xb9g:"\xb9\xe2\xe3\xe4\xfd\xc4a\xdf}\xf7U\x8b:\x92\x80\x1f\x7f\xecY\x17\xb88\x82>:\x0b@.\xd1\xe5\x861$\xfd\xd6\xacY\xd3\xeb\xe5\xc7\xc4\xca\xe1\xc5\xbc\xb2\xcc,#7R1\t\x19\x01\x12~L\x02\xed\x88\x93A\xb4L\xd2\xf6\x85w\x87\x93\x8c\xac\x0c\x99\x04\xcb\xbe-w\x1d.\x13\xb6\x1e"\xa5\x18\xc4\x8e\x80\xdf2\x92~\xdc\x90\xa9fM\x0cu\x8fN\x0c\xa6,\x8c\x8b\xa4_f\xb6\xbd\x95\x1d~v4\x04\x1c\x02\\\xb90\xa88[b5Mr\xedi\xaf\xc2B\x16\xef8\xfc\xf6\xdc\xc6\x1b\xee\xbeH\x8f\xf8\xd1:\xf2\xf1G\x97n\x07K\xea&l\xfeA_\xaf\x91\xe6"\xa5\x13#\xbe\xb9\x05\x99\xd8\x8c\xafN\x1e\xff\x93\xf3\xfd\x87wf\xdc{6\x04\x00\xdc\xb8b\x19\xe2\xbe\x11\x81\xaf\xe7pS\x0c\xa1\x10\x16\xa5!`\x08\x18\x02\x86@\xdf\x110\x02\xb0\xef\x18\xf6%\x06v\xbe\xec\x84\xe9\x90\xed\\\x04:\x01\xf9\x1d\x02U-~\x17\xda\xa8I\x15L\xa6\x0c\x95\xe0\x81\xdf\x7f\xa4\xb3\xcfG\xfdlK\x89\x81\xb8\xab\x872\x9a\xd6\x17\xbf\x80\x18\xac\xd7El\x01H+\x93\xf4\xf1\xf9a\xc3\x86\xf8\x93W8\x83\x9f\x93\x9f!7\x9d\xf3\x86\x16\xc2\x91\xc0\xfc\xe0\x88\xa5\x97^zI6\xdex\xe3\x84^\xf6\xdbQ\r8+EZ\xddM\x9d:Uw\x7f\xe5\xb5\xfe\xb0\x02t\xa4\xdd\xb4i\xd34\xab\xcc\x83\xb3^s\xdfuT\x86\xf6\xd7\\\x99\xe2\xaf\xc7\x13c\xf1\xd7;:\x1f9r\xa4.\xa5=\xe1\x84\x13\xe4\x81\x07\x1eh%\xd2:\xba7\xa8k\xdc\x08\xa4\xbd0\xcf$%\x1dQ\xc9\xa3ko\xacjk\x1be\xd5Rl\xde\x01\x92 \r$ \xaa[C\x88\xddW\xf0`X\x8c\x86@\xc4\x08\xd0\xa2\x96\xbb\xbf6\xd47\xc9U\'\xbe,\x8b\xbf^\xd3o\x93V\xf1Ew\xbe\x94\x0f\xff\xe9\xe62a\xcb\x12Y\xb1\xc86\xfe\x88\xc7\'\x90s\xbco\x8b\x86\xe4\xe8N\xcfkV\xc4$\x9d\xefR\xbe\x7f\xc3\x15&\xc01\xc5\xb5\x08\xcb\xfds\x8e3L\x0c\x01C\xc0\x100\x04\x06\x18\x02F\x00\xf6\x7f\x85\xb3S&\x15\xc7\x8e\xf9*\x84\x95\x08\x7fF\xc8F\x08\x95\x04\xe4H\x8f\x838\x0e\xc0\x9f\xb9\xf3K)\xc32\xad3\xa6\xef\x80\x9c\x80\x04\x04\x81\xd7\x1b\x12\x10\xd1\xe9\xecum\xb5\xbf\xaa t\x9d\x06(A\xb8\x83dz& \x8c(=/\xd5\xe4\xf9KK\xbf\xd2Qy2\xf3\x1fs\xe5\x93W\x96\xd1\xc8`\x1d\xe2\xe5\xfa\xeb\xaf\x97]v\xd9E\xc9\x17\x926\xed\x89\x990JK\xa2\xa7\xbb\xa4XW\xa4\x10\xe3\xa0\xcf\xb7\xbc\xbc<9\xfb\xec\xb3\xe5\xa4\x93N\xea7\xf2\xcf\x91\x8e\xfb\xec\xb3\x8fBF?\x8a=\x11Z\xbaUUU\xa9\x15]ee\xa5\x1e\xe3?sS\x8c\xea\xeajqG.\xab\xa5\xaf<\x06\xfa\xca\xab\xa9\xa9Q,\xf8\x0cID\xb7\x94;\x8a\xfa$\xd1\xe7\xea\xc9\xa5\xc7\xcf\xe6\x8f\xaf\'- \x9c{\xf9\x9bgW\xa3G\xbc*I\xd8\xc5\x13}.\xd5\xe2\xe1\xb92y\xda0\x99\xbc\xf30\x19\xbbi\x89\x94\x82\x00\x1c2*W\xad\xfaja\xddG\x0b\xbffX\xf85\xc3\\\x85\xaf[\xfe\xf6\xb8d0#\xe0\x1d\xe5]~\xech\x08\xa4\x1a\x02$\xdb\xb9\xf3+\xadd\xaf\x86\xe5\x1f7g\xf3\xfc\xbf\xf5\xaf\x02\xe3\x96\xfe\x8e\x18_(\x87\x9c9\t\xbbr\xd3U\x88\xbe8R\xad\n\xfa\xad<\xe8\x0e\xa5\x00>Q\x97\xcc\xa9\x90\xa7n\xf1vz\xf6\xde\xa4\xa1f\xc9\xad8\x9a\x83T\xeeB\xb0J\r\x15n\x8b\xdc\x100\x04\x0c\x81\xc4F\xc0\x08\xc0\xc4\xa8\x1fj}\xec\xa0Y\x1fw \xccG\xb8\x1fa\x18\x02\x9d\xe9\x85VOn\x90Nu`\xd6\xd3\x0b\xa4bY\x9d\\p\xfb.\x92>8[j\xb0\xac6]\x1d\xb4#\x07\xdd\x15U+\xd2Z\x97\x00G\xc5\xc8UW4\xe8\xb2f#\x00;\xae\xa8,8\xe6\xaf,\xaf\x97\x07a\xed\xe9\t*\n\xc4\xaf#\x80\x0f9\xe4\x109\xf7\\\x1a\xa1\x82\xff\xa5\tOD\xd2\x91\x95[gI\xaf/_$\xff(\'\x9ex\xa2\\t\xd1E\xb2t\xe9\xd2\xd6\xf2u\x16g\x18\xd7\xddo\xea\x9ak\xae\x91\xdc\xdc\\Y\xb9r\xa5\x92r$\xe4H\xdc\xb9\xe0>\x93\xb4\xe35\xb7\x946\xe8<\xadX\xb1"\xe8(;\x8d\xcf\x91\x9f\x9d\xde`_\x84\x8f\x00~\xda\xfc];\x7f\xae-\xe8Y\xd8&\xf1\x1f\xe2\x1f}\xbb\x8f\x92\xe1y2r\xa3A2n\xf3\xc1\xb2\xd1V%\xb2\xf1vCu\x97^N=\xf1\xf9\x86\x86&\xbc\xcb\x9bd\xe9\xbc*}\x95;\x0b?NW\xc1\xd6/\xfc\xb2X\n\x86@\x8a!@\xdfo\x05X\xf6\xcb\x89\x91kNz\r\x1b\x7f\x94\xf9\xe4_\xff\x17\xd4Y\xa1\x9dr\xe5T]\x87\xd2\x08\xebD\xf3\xfd\x17l\xbd\xa4\xa7cg\xe5\xfc,\xb9\xef\n\xb7\xf1G$K\xbe\xa9\x993\xdc\x80@\x85\xc0|\xff\x01\x04\x13C\xc0\x100\x04\x06*\x02\xa1\x11K\x03\x15\xd0>\x96\x9bd\x1f;\xe6\xe7\x11\x0e@\xf8;\xc2\xe6\x08$\x07y=T\xa1v\xf0\xf9\xdb+\xe4w?xI\xce\xbf}7)\x1c\x9a\r\x1f% \x01{\xb0\x1cX\t%\xccn\xd7V\xb3(\xe1\x0b\xadY8\xb0\xa5UJ&,\x00u\x8c\x1b~\xb2I\x95BcC\x8b\x8c\x99P(\xf7\xff\xee\x03\xd4\x8b\xefc(\x8e\xfc\x1b=z\xb4<\xf5\xd4S\x91\x94\x89d\x17\xc9\x08Z\xb6\xb1\xad\x90\x04\xe3@\xa8\xbe\xbe^\xea\xea\xea\xf4\x9cd\x18\x85\xdfQh\xd1F\xab8\x86\xae\x9e\xa7\x95\x19\t(g\xf5\xa6\x0fG\xfc\xc7\x91\x7fL\xf6\xba\xeb\xae\x0b,ub\xe5$\xfe\x9c\xd7:#F\x9d%\x1e\xef\x0f\x8b\\ty\xb2c?!\x80f\xe1\xb5\x0c\xcf\xb2\x8f\xa4\x9d\xee\xcc\x8b\xdfXG\xfe\xa4Fo!@\xab\xdbA\xd8\xf0\xa31\xd6\x8c\xdd~_\x939\x9f\xacJ\x18\xf2\xcf\xb9\x04\xd9\xef\xa4Mds\xec\xe2\xbd\xfc\xdb\xea\x1e\xe9~}\x02f\x80<\xccws\xe9\xe8|y\xfb?\x0b\xe4\xa3\x97=?\xcc\xf1:CH0\xf0E\xce\x17\xf8\x97\x08\x7fE`\x97\xc11\x85\x89!`\x08\x18\x02\x86\xc0\x00E\xc0\x08\xc0\xc4\xabxv\xcc\xac\x97\xf7\x10\x0eBx\x10a\'\x84pI@0g$\xcf\xa8\x04\xce\xff\xacB\xae\xf8\xfe\x8br\xe1\xdfv\x97!#\xf2t\x19H\xf7I@o8Z\xe7o\x02\x82(C\x16\xa6\xd7"\xd5 \x00\x95#1\x06p-\xbc\xb9!\x0b\x15\xce/\xdfY%\xff\xbd\xe7k\xfd\xceC\xac\xed\xb6\x11#F\x08\xfd\xc4\xcd\x9f?_\xc9$\x92E$\xe1H\x1cQ9%\x01\xe7\x94T\x12w<\xe7w\xbcN\xc2\x8d\x04\x14\x899\x9e\xbbg\xdab\xef\xdf3\x97\xef\xfe\xc8\x05\x97\xc3\x12\x0fJ|>\x1c1\xe7\xf2\x14\xff]\xfc\xb9\xfb\xbe\xfd\xf3\xed\xefi\x1f_\xfcsv\x9e:\x08\xb0-is\xc2P\x8e\xad\x8a\x83I\xbe\xb4\xbdW\xde\xda\x96}y\x05Y2l\\\x81\x8c\x18W\x88\x1dz\x8bd\xa3m\x86\xaa?\xaf|l\x02\xc4\x07\xd4\xba\x0f\xce\xfdi\xdd\xc7\x81>}\xc2\xf2\x1a\xff\x98\x0f\xbf\xd4i3V\x92\xc4A\x80\xfe2\x8bJsu\xb2r\xfa\xa9\xaf\xc8\xc2\xcf+\xe0\xfb\x8d\xfew\xfb?\x8f\x8e\xfc\xdb`\xe3"9\xea\xfc\xcd\xa5|9\xdcR{]W\xffg.\x85r\x90\x93\x97.\xd5U1\xb9\xf7\xf2\x0f\xb4T\x11\xe9K^\x17!r%\x12\xadA0\xeb\xbf\x14jSV\x14C\xc0\x100\x04z\x83\x80\x11\x80\xbdA-\xfcgh>\xc7Nz>\xc2\x81\x08w#\x1c\x8e@\x12P\x87i8\x86"\xde\xe6 i\xb2ra\xb5\\z\xc4\xf3r\xe1=\xdf\x95q\x18@\xae\xc6\xd2`\xfa\x87Y\x9fp\x80\xda\xdc\xd4\xa6\xd1\x82+\nW\x98%\xa4\xc1%\xc0\xb4R\t;\xb9p\x0b\x13l\xec\xac\xcb\xe2a9\xf2!f\x9ao8\xebuo\x90O\xb8\xfcJq\xc7\xf7\xdf\x7f_\x18\x82\x10\x17g_\xe3r\xc4Yg\xf1t\xf5=\t\xc9DX\x8a\x9a\x08y\xe8\x0c?\xbb\x9e\xb8\x08\xf8\x9c1\x06\xe0 \xfc\x98M\xbc\xf1[@\xf6\xf1\xb7\xa5?\xdd\xb6\xd7\xab\x16\x82\xbf\x85\xb1\x9b\x15\xeb\x12\xde\t\xdb\x94\xc8\xc8\xf1\xc5X\xc6\x9b#\x83\xb1\xbcw\x10\x1c\xcd\xc7\xea\x9a\xa4\x0e\x16\xd9\xf5\xd8\xac\xa3\x02>\xbdH8\xb4\xf0\x0f"O#\xe1G\x0b\xef\x1eXy\'.r\x963C 1\x11\xa0NT\x82\xc9\xd4\xe5\xf3\xabe\xfa)/\xcb\xaa\xc5\xb5\xfa\xdbF\x17\xdd\xef\xc2\xf7\x8d\xea}\xc8\xc9Y\xd7\xee\xa8\x93\xc0\ru\rf\xfd\x17p\xcd\x90\x00.\x1e]\xa0\xe4_\xc5J\xe8\xd3\x00\x9e\x13\xb4!\x0b{\x0b\x8e%^E\xa01\x01\xc7\x0f\xa1\'\x8a4L\x0c\x01C\xc0\x100\x04\x12\x18\x01#\x00\x13\xb7r\x1c\xd9W\x8e,~\x0f\xe1f\x843\x10\xdc\xf0O\xc7\x86\xf8\x1c\xbc@)\xe1\xa0\xb0\x06\xa4\xda\xef\x8e\x9d!\xe7\xdf\xb1\x9bl\xbe\xc30Y\xb1\xb8\x06\xcb+\xbbH\x96cJ\xa8\x17\xf5u.\x8b\xc1g\xad}\x8c\xcc\r\xb5\x99\x1al\x02\x92\x16\xfa"\xe9\xf6\xa9\'\xeeg\x8e\xef\xb3s3\xa4jeLn9\x7f\x96*\xf8\xacS*\xa1\xed\x85\x04\x02\x97\xcd\xd2\x92\x8c\xe4Yw-\xca\xbaC\xf6u\xe7\x9e\xf6\xf9\xe1\xe7\xf5=\xd7\xd5\xf7\xdd\xcd\x7fG\xe9\xda5C \n\x048\xe8\x8e\'\xf8\xf8\x91\x1b\xf5\xf0e\xd6:&\xc4\x89\xfeZ\xfd\xd7i\x06\xfc\xb1\x0e\xc1\x92\xddR\x0c"GM\x84\xdf\xbe\xc9\xc52~\x8b\x12\x19\x85e\xbdYY|\xf9y\x96\xb9\x8c\'\x06\xb2\x8f\x1b#\xad\xc1@\x93\xc2\xf7r:v\xe8\xa5\xd0\xc2\xcf\xfb\xa3\x1f\xed\x8f!`\x08\x84\x88\x00\xfb\xdc!\xa3\nd\x116\xfa\xf8\xe3\xc9\xaf\xe8o\xd2Y\xdc\x85\x98l\x8f\xa3\xfe\xc1E[\xc3\x17h\t&\x7f+[\xdf\x15=\x8e\xc4\x1e\xe8\x10\x01\xbe\x93\xb9\xeb\xef\x9c\x0fW\xcb\x7f\xef\xe6J\\}\xd5wxo\x08\x17\xd9\x83\\\x8a\x00\xb3N%\x00\xa3S\xd0C(\x8cEi\x08\x18\x02\x86\x80!\xd0w\x04\x8c\x00\xec;\x86a\xc6\xc0\x8e\x9a#;\x92\x81g"\xd0y\xef%\x08\x14\x8e\r\xbb`\xe3\xf4\x9e^\xff\xa1\xd2J\x8b\xbfX}\xb3\\u\xfcL9\xe7\xe6]d\xea\x81\xa3e\xf5B\xac \xd0\xd1\xeb\xbaQ3\xb3$\x90\xaa\xaa\xa9gD$\x1c\xcc"aZ\x00\xaa\x0f@Sm\x14\xf8\x16X\x1c\x14\x0c\xce\x95YO-P\xeb\x1f\x12\xb7J0tP-$\xd3\x9c\xb5\x9a\x91g\x1d\x00d\x97\x0c\x81\xde \x80\xb7s\xeb\x0b\x1a\xefL=\xf7\xdfW\xeal\xbf\x1d\xc1\x17\x9fD!v\x89\x1c\xbbi\xb1\x8c\xd9t\xb0\x8c\xdb\xb4H\x86\x8d-\x90\xa2\xa1\xb9\x1ah\xd5Kkg\xb5\xea\x83\xcf\xbe\xba\xca\x06\xa9inhg\xd9\xc7\xd74|\xf7ey\xa4_|\xdcvn\x08\x18\x02\x11 \x00]\x84\x14~\xe9\xd8|\xf9|\xd6*\xb9\xe6\x94\x99\xb0\xc6\xc5$\x1b\xde\x05n\xb3\x8d\x08r\xd1e\x12\xce\nm\xcb\xddF\xc8\xfe\xa7l"\xab\x97\xd6 \x7f\xf6\xce\xe8\x12\xb4^|\x99\x81\x91Vvv\x86\xdc\xff{\x7f\xe9/tkgu\xd9\x8b\xe8\xba\xfb\x88s\x1b\xf4\x10\x1e\x98\x81\x92\xcb\x95\xaf\x00\x00@\x00IDAT\xe0\xf7>\xdd}\xdc\xee3\x04\x0c\x01C\xc0\x10HU\x04\x8c\x00L\xfc\x9ae\'\xee\xc6\x91\xbf\xc2\xf92\x84\xe9\x089\x08\xae\x83\xc7i\xf0B%\xd5\xcdT\xdf\xf8\xd3\xd7\xe5\x8c\xe9;\xc8w\x8e\xdc\x103\xc45jQ\xd2Q\x8a\xb4.\xa9\xaf\x8eu\xf4U\xa8\xd7\xeak\x1a@b\xd1\x82-\xd4d\x92&r\xb2\xc3\x19\x18h\x10\x17J\'\x9c\xad~g\x7f\x0c\x01C\xa0\xe7\x08\xe8o\n\x7fZ\x89=D\x91\x86A\x7f\x13M\xf8\xf8\x03\xf4\x0f\x1as\x07d\x1fw\x02\x1d<,W\x8aG\xe4\xca\x88\xb1\x85\xb2\xc1&\xc5\xb2\x01\xac\xf9F\xc3\x0f\x177\n\xf0\xc4\xf3\xfb\xc7\t\x99z\xec\xc8\xd9\x88\t\x99e\xdfr\xe3\x1c\x8c\xe6\x90p\x1a^x\xee\x9d\xa7G\xf7\xc1\x7f\xda\x0e\x86\x80!\x10=\x02|\x05\xa4\xd3bwd\xbe\xbc\xfe\xe4\xb7r+\xac\xf0)\xfcy&\n\xf9G\xcb\x7f.A\xcd-\xc8\x94S\xaf\x9c&\xb5\x95M\xd2\x82\xf7\x8c\xf1\x7f\xc1\xb6\x17\xdd\xf8cL\xbe\xbc\xfc\x8f\xb9\xf2\xe5\xdb+5\xf2\x08\xc8?\xf4\x10\xda5U\xe2\xf8\x9b`Kd\xb1\x19\x02\x86\x80!`\x08$;\x02F\x00&G\rr8\xc9q&\xe9\xad?!,F\xb8\x1b\xa1\x10\x81\x1d}h\xb4\x17\x15\x15G\x02\xde\xf6\xbfo\xc1\x81u=f\x8a7\x95\x95\x8b\xb0S+\xe9\xc7\xb5R\xf6\x08\xb8\xfa\x88v\x00F\xea\xadR_\xdb$18\xb4\xcf\xe027\x87V\xeb\xb7\x03\xef\x84J|\x03\x08Q.=\xa24\xc2\x87\x18\t\x0b\x0eLL\x0c\x01C`=\x08\x90\\\x8b\xbf\xa5\x1d\xd1\xc7\rru\x10\xd7\x01\xb1\x17\xff\x18\xcf\x87a#\x8e\xd1\xd8\x85{\xc4x\x1cA\xee\r\xc1\xa6\x95\'n\x9c\xad\xb9\xa4\x1e\x958\xe4\x1fu\x01O\x19\xf8\xc9\r;bs\x92l)_\n\xbft -M\x82C\x80\x137y\x85\x99R\xbe\xacV\x1e\xbe\xea\xa3\xd6v\x10\x01\x01\xc8\xb4\xa8\x9d\xdf\x84\xf0\x19\x82[I\x84S\x13C\xc0\x100\x04\x0c\x81\x81\x8e\x80\x11\x80\xc9\xd3\x02\xa8\xad9\x8b\xbfGq\xbe\x1c\xe1>\x84\xb1q\xd7q\x1a\xbc(\t\x08\xbd\x90\xfa\xe2\xbd\x97\x7f(\r\xb1\x169\xf4L\x92\x80\xd8\x1d6\x9e~\xc4\xf7i\x18\x9c\xd6\x82\x88\x8bL\x98>\x84\x83\xe6z\x04\xaa<\xcc\xe7@Wc\xb9\x8c\xa7ju\xbdl\xbe\xf3p\x19\xb1a\xa1,\x9b_%\x99X\x0e\xd8\x04B\x97\x96C\xeb8\x1f\xf7qd#S\xd1\x13\xefS\xdc\xa9\xfb\xd6\x8e\x86@\xf2!\x80v\xef\xbd\x17\xbc\x13g\xe9\xc2Q\x12\x9b\x7f\x0b^[nP\xbc\x96\xf5\x1eK\xda\t\xd1\x97?(S\x06\r\xcd\xf3\x96\xe7\x96\xe6H\xe9\x06\xf4\xd1\x97\xa7KvG\x8e\x1f$C7(\xf0\x9c\xe9\xe3GD\x02\x9e\x19\xd0%\xf7\xb1fi\x805\x1fI\xbf\xaay1\xf8\xe6\xc4\xab\x8b\xd9Bft\t\x1e3\xc5s\xef\x0fs`b\x08\x18\x02\t\x8e\x00\xc9\xbf<\xbc\x13\xe8\x7f\xf7\xb6\x0b\xde\x927\x9e^\xa09\xd6\xc9\xb7u:\xdd\xfe+\x8c\xcf\xfd\xc9\xf7.\xd8R\xb6\xddk\x03Y\xb1\xb0\xca\xc8\xbf0\xaa\x03\xeft\xfa\xfe\xbb\xfd\xc2\xb7\xa5\nnj"Z\xfeM\x95\x8d=\x08\x1b\xdf\x1f\x11\xd8\xf3\xf8\x1a\x1e\xceL\x0c\x01C\xc0\x100\x04\x06<\x02F\x00&_\x13 \xbb\xc6\xd9\xbcW\x10\xf6E\xf8\x07\xc2V\x08\xdc98\xb4\xfaTR\rZ,\x07\xaf\x0fa&\xb3\x1e;K\x1ey\xde\x16R\xb6\xb8Z\x9a\x90r\xeb`\x1ajG-|RE-\xf5\x18L\xc70\xa8\xa6\x1f\xc0\x86\x06\xd3uX\x1f\x8dl\x11`\x15\x8e\xff\xbfm\xe4\x9a\xd3^\x03q\xeb\xe1\xd2\x1bt\xb8\\H\t\x0c\xaa\x95\xf1\x12\x17\x99G\x17\xc6}\xd9\x05s\xb8\xd6\xbdk}\x88{\xdeN\r\x81\xce\x10\xe0\x90\x06\xe2\x1f\xbc\x0f\xfc\x14\x7f=\xae\xad\xea\xd2\\\x0c\xc0\xbd\xa6\x86\xbf\xfc\xef\xb7\xdd\xb8&\xec\xc7\xd3v\xa0\xef\xcc\xc1\xd8\xbd\xb3\x14D^\xe9\x98\x02\x19>\x0e\x01\xfe\xf8\xb8t7\x0fKx\x0b1\xd8\xcf\xc71\xbf(Kr\n\xb2\xa4\t\xef\x9e\x06.\xd5\xc5o\x8d\xd6|5\x15\xf5\xba\\\x97Kv9\x06si\xeaoI\x7fS\xdc\x80\xc7,\xfa\xda\x10\xb73C 9\x11P\xf2\xaf(\x1b\xbf\xf1f\xb9\x16\xfd\xed\xec78G\x8bW\x12\xdeI\x8epK\x84\x92\xb9\xfcL\xd9{\x94\x1c\x8c\x89\xdc\xd5\xd8\xdc\x8d\xc4\x94I\xb0\x08\xb0=\x14\xa3\x9f\xf8\xe4\xb5e\xf2\xf2#\xf34\xf2\x08v\xfde:\xecm8F\xf8\x1d\x027\x11dO\xd8U7\x87\xafM\x0c\x01C\xc0\x100\x04\x06\x12\x02\xa1\x11F\x03\t\xc4~(+I@\xd6\xdd\x17\x08\x07#\xfc\ra\x0f\x04G\x0e\xe24x!\xf9\xe7\x94\xc7\'n\x98-\r\xb0^9\xe6\xa2\xad\xa4lI\xadZ\xb00E\xee4I\xe7\xf4Q\x89\xe3\x8e\x1ac\xf4\x8f\xd5$Y9\x19\xaal\x9b>\x0b\r\x10*`\xe5\xcaZ\xd9b\xd7\x91\xf2\x9b\'\xf6\x91\x97\x1e\x9a\xa3V\x81\\\x96\x12\x03V\xdc\xe0\x85\x98\x91\xb0 9\xc8\xa3\xbbF\x82\x97d\x86\x13\xd6\xbd\x0eb\xda.\xb9\xaf\x82=:\x0e\xc7\xaf\xc0Vb\x19\xd7\xd71\xa0\xf0\xf3\xe2\xda\x80\xc7\xee\xb4~j\xff\xb15\x9f\x8c:\x8d\xbbY\xc7\x95\xa5\xf5)=i\xfd\xa4\xcftp\xa95.;\xe9!\x02\xae~\xf5\xb1\xb6\x0f8\xf3$\x8e\xb4k\x1d\xb5\xa0\x9e\xd8\xf6\x94\xbesU\xe3\x1f\xddG\xefa\xbdIO\xf5z\\\xfd\xfa\xb1\xeb!+\'\x1d\x84\x1d\xc8;.\xc3\x1d\x8ccq\x96\xe7\x8box\xae\x94\x80\xec\x1b<\xc9+\xcc\x92kN~\xd5#\xff\xf0\x1et}W\xa2\x94\x9f\xefj\xf6}|\x1f^p\xfb\xae\xe8\xce\xe0w\x14\xfd\xb5\x91\x7fa\xd4P\x8b\x0c.\xcd\x97\xbf_\xf1\xa1\xacXP\xad~\xb4# \xffX\x10V3\xc3e\x08U\x08\x1c#\xf4\xa4+\xc5\xed&\x86\x80!`\x08\x18\x02\xa9\x8e\x80\x11\x80\xc9]\xc3\x8e\xec\xe3N_\xc7#p\xcd\xc9\xffC\xe0x\x9aa\x9d\xf19\xae\xf5Yt\x00\xcc\x98\x91\xc2s\xf7|%\xcd\x184\x1f\x7f\xd9\xb6 \x890X\xc6u\x92A\x91\x89\xcf\x1cpwL\x06\xcf\xc2&\xb4\xa2GV\xac \x13"\tF\x02\xae\xa6\x02\xbe\xc6|U\x90\xa4\x18\xad\x92\x9c\xbf1\x12\x18\xbcF\xeb\xa8,\x10%\xf9\x18\x1c\x90\xccM\xc7\x1bB\t\x0e\xaa\x91\x10\xde\xb7\x96%\x16/\xfa\xadL-D\xfd\x0fz\x8e\xe7=\xb2\x04\x96\xa3\xf8\xc7s\x12\x87\r \x08I\x1c\xd2\nQ?c\x03\x17\x92\xc6\xb1z\x10\x88\xd8\x89\x90G\xfd\xcc\xeb\x951]JI\x12\xb1\t\x84\x0c\xbf\xa3\xef4.\xf7\xf6\x96Y6\xe2\x08\x8bF\xb5Xl\x82O5\xfe$\xda\x84\x96\x19\x1d\r\xc4&lU\xa2\xf7\x92\xd8T\xd2\x13\xc4&\xad \x19?\xe3m\xff\x8c\x96\x03\x7f\xb4\xb9\xa5\xb4:\xed\xff\xa0\x08a\xdci\x1b\xa2k\x9f\xadsKw\xb1A\x9b\xc9\x82O\xcal\x10q\xf4MI\x9fY\xd9\xb0\xde\xcdF\xfb\xcb\xc4yN\x1e\x08;\x90s\xf9\x83\xb0IFQ\x0e\x8eXj\xcb#\x88\xbe|\x90z\xf9\x83\xb2u\xc0\x9d_\x9c)\x05\xb8\'\x0b\xcf\xa4\xb5 R\xbf-j.\xe3\xce\xd9\x1e\x9b1e\xd2\x8c\x1f@\x13\xea\x9ad4w\xc8\xae\xc6\xa6Fta\xc0\xb2\xf2\xf7\xc0\xe7=bO\xbd\xef\xe1\xa2_^\xfeV\xf4\xd4]\xf0\xaf\xdb\xc1\x100\x04\x064\x02\xde.\xafy2\xe3\xbe\xaf\xb1\xecw\x99\xbe\x82\xda\xf7\x1f\xfd\r\x90\xdb\xc8\x8d\xf9\xb8\xe0\xb6]\xd4\xadA\xf9\xd2Z\xf3\xfb\x17B\xc5pr\xb1\xa84W\xbexo\x85\xfc\xf7\xee/\xbd\x14T\x81\x08!\xb1\xb5\xa3\xa4\xf2CM\xed\x11\x84\xff \xb0\xb3Z[!\xc2\x05\x13C\xc0\x100\x04\x0c\x01C\xc0\x08\xc0\xe4o\x03\x1cr\xb3\xa3\xe70\xf6l\x84U\x08\x97"pl\xce\x107\x0c\xc6\xa7\xa0\x041s\xa0L\xbd\xe6\x85\xfb\xbf\xd1\x81\xf5\xf1\xbf\x9e\xa2\x04R\xeb\x12`wCPiv\x18\x0f\x8b\xe8\xcdl\x93P\xca\xc4\x12\x17\xefJ\x877\x0f\xd8\x8bJn\xe0\x8f\xcf\xe3\xb5\xe1\x00\xb0X\x87MMhFhA\x1ev\xfeE\xdc\xa5\x9f\xbd\x8b\xee\xcb\xd6\x16\xa5\r\xcb\xb5\xae83;\xa5H:\xe0IZ\xf3\x90\x9d&E\xb9\xb9\x1e\x01\xc9\xfb\xf0\x05\x89F\x92\x91\xe9\xc8 \x89G\x0eX\xb8\\IIH\xbd\xc7\xb7Z$\xf1\xd7H\x1fk\x1e\x89C\xd2\xae\x19\n7\x8fMz\x9d\xdf\xc3\x9a\x0b$as\x13\x966\x83ll\x84\xd5\x83\x12\x8e A3@6\x8d\x9d\\,\xa3\'\x16\x81\xec\xa3U#\x88!\x94\x9d\x838\xdeG\xebG\xb5\x00\xe39\x03\xc8m\x92\xa6M \n9\xa8k\xc4\xbd$\x15c \x1a\xf9}\x03\x8e\x9c\xd9\'\xf1XU^\xa7$Sfv\xba\xc6\xcde\xe9$\x9bHX2O\r \x17ii\xc6\r\x1f\xb8a\r\x7f\x1e$\x1c\x9b\x9b\xd0f\x11o\x0cK\xeaYn\xe6\x8b\xcf\xf1_}M\xc7\xfa;\x97k\xab\xa1k[Mvz\xc6\xfa\xe5\xee\x8e\xd9y o\xf9\xb6\x88\x13\xd6\tw\xacD\xb2Z\xd7\xb4\x8c\xa3p\xc9k\x16H\xb84\xd6+"\xc8\x86\xd5\x1c-FxS\x0e\xee\xcf\xccI\xc3o=S\xb2P\x97J\x1a\xf3\x9c\xe4qv\x06\xe2\x03\xa1\x97\x9d)\x19\xc0\x81\xc4^\x16\x8e$\x95y-\x13\xf7\xb3\x0exo\x06\xfcufee\x80\x00\xc4\xa8\x85\xcf\xc3:\x95\xd7\x88\x1f\xe3\xe1\x91>\x93XG\xac\x1f\xd6\x13\xb1\xd3#-\xf4P\x16Z\xea\xd5\xd3\x12\x15u\xab\xc2kq\'\xae\xe9j\xe1\x90}\x16A\x05\xe5\xe2\xb9Y\xee\xf9x\xd8\xc1\x100\x04z\x8c\x00\'\x14r\x0b\xb2\xa5bE\x9dr\xc1\xf2\xa9\xf8\x0f\xf3\xa3\xbb\x9b\xa5\xf2\xeegF\xf1\x85\xc6\xc5g\xbc\xcfm\xd8\xe0N|\xa7cP\xbf\xfe\t\x1f\x07E\xba\x1c\x1bG\x12\xa3\xf5\\f\xae\xd7\x11\x15\xc9>\x9cSX\x0fz\xf4\xffh\x9a\x9a\t\xef\x0bm\x13\xde-^=\xe9\xb9Wg\xee\xb2\x1d\r\x01C\xc0\x10\x08\x1a\x01\xbe\xd7\n\xe1G\xf4\xf9{\xbf\xc2\x04PL;\tN\x10%\x8ap\xd2\x86\xd6\xcf\x14\xba\x00\xd9z\xf7\x11\xb2r!\xc8?\xbf\x8fK\x94|\xa6L>\x80u\t|\xc9>z\xedlY\xfc\xf5\x1am\x0f\x11\x90\x7f\x84\x8f\x95L=\xffZ\x04\xfa\x06\xe7y\xc7\xb3\x87\xf8\xc2\xc4\x100\x04\x0c\x01C``#`\x04`\xea\xd4\xbf\xd3:\xd9\xf1\xdf\x81P\x81p\x17B!\x02\x87\xd2\xfe0\x1agA\x8b?\xf8\x7f\xfd\x89o\xe5\x9e_\xbf\xa7\xbbZj\x12:H\x0f:\xb1\xb5\xe3s\x85\xe6UZE\xa9b\x1b\x7fq\xed\xdb\xedS" \xb0\x167\xd3\x8bf\x89\xfa\xe5\x98\x06\x06~\xf8\xe3\xfbd\xab\xf7/\xfa\xe5\xd3&\xa0\x7fp\x81\xc7\xb8\xb6H\x02I-\xdb\xf4\x1a\xac\xff\xf8\xa8>\xc7\x13\xef\xcc\x8f\xc6\xbb\x1e\x7f\xc9\x9d\xc7\xc5\xc7{\xf5c\xbbkmiv^F\xfd\xa6\xf3\xaf]6\xfa\xffHb\xae\xd3\\\xe0\x1b\x87\x0b\xef\xc1y\xfc\xc7\xd6\x0f>>J\xe0\xb9\xb8|6\xcf]\xe3-J\xe8\x91\xd8u\xf7\xd8\xd1\x100\x04\x0c\x81\x04D\x80;x7`\xe2\xe2\xcd\'\xbf\xd5\xdc\xf1\xfd\xb5\xd6\xbb\xaf\x1f\xf3\xccw\xaa#\xff~\xf8\x7fSd\xf7\xefM\xc0\x8e\xbf\xd5F\xfe\x85T\'T\x1d\x06\r\xcd\x969\x1f\xad\x96\x7f\xde\xec[\x83\xb6\xd3\'BJ\x9a]3\xbbK\x9a\x1c^\x8f\xc0fh\xe4\x1f@01\x04\x0c\x01C\xc0\x10\xe8\x18\x01#\x00;\xc6%Y\xafR\xf7d\xc7\xcfz\xa5\x1f\x10\x92\x80\xf7 \x8cB\xe0\x1a\xb9p\xea\x9b\xa9\xfa\x9a\xefCW}\xa4\xbe\xb9pE\xadzx\x0cU\x90\xb6\x9b\xe5\xa6\x1f8\x92\x07\xcc\x8eI\n#\x80\xb6\xc6\xe6\xe6\xc4#\x8fx%\xfe\xaa\xfb\xb6\x1b\xc7\xd6\xf8\xfa\x10G7\x92I\xea[\xf0\xbb\xea\x9c\xa7\xec\xfc\x9b\xa4.\xb3e\xde\x100\x04\x0c\x81.\x10\xa0\xff\xd2z\xb8\x1f\xf8\xfa\x83\xd5\xde]\xd1\x10>]\xe4\xc8\xfb*\xde\xe7\xdfq\x97l+\x07\x9c\xbc\xb1\xac\\\x84]\xda\xdcL\xcbzc\xb0\x1bz\x84\x00(\xb8\x0c\xba\xb0\xc02\x81\x88w\xfd\xa5\xba\xcb\x00\x07\xdc\xf23\x84z\x04\xb3\xfe\x03\x08&\x86\x80!`\x08\x18\x02\x9d#`#\xb7\xce\xb1I\xe6oH\xf6Q\tx\x0e\xe1`\x84o\x10H\xfe\x857+\x18\xc7\xba\xd5bg\xb9(\x85\xcb=)\rJ\x00Z\x93\xf6\xd0\xb0\xbf\x86\x80!`\x08\x18\x02\x86\x80!\x10\x06\x02tQ\x90\t_\xa6\xcb\xe6s\xb3UO\x12\x81\xffS\xcb?\x7f\x192\xc9\xbf\xfdN\xf4\xc9?\xda\x89\x99\x84\x82\x00}\xd5\x0e\x19\x99+\xcf\xde\xf5\xb5|\xfbi\xb9\xba\xad\x88h\xe9\xaf\xb3\xfe\xbb\x1f\x05{\x19!\\=?\x14\xf4,RC\xc0\x100\x04\x0c\x81\xa8\x110\xb6$j\xc4\xa3K\xcfY\x02\xbe\x8f$\x0fGp~A|o\xf9!f\xa4\x97\x86X\xbd\xcd\x91\xf3\xcdV\x8f\x9dd{k\x04\xd6\xdb\xb4\xed9C\xc0\x100\x04\x0c\x01C\xc0\x10\x18`\x08\xc0\x91i:\x96\x00\x97-\xafM\x98\x82\xd3\x05\x8a#!O\xff\xe3\xf6r\xe0\xc9\x9b\xb4\xe5\xcf\xb4\xfdP\xea\x89\xcb\xac\x0bKrd\xfeg\x15\xf2\xf0\xd5\x1f{i\xc4M\x88\x87\x92h[*\xac\xd5e\x08\xff\x87@20\xbcI~Dnb\x08\x18\x02\x86\x80!\x90\x1a\x08\x98J\x90\x1a\xf5\xd8Y)\x9c%\xe0l\xdc\xb0\x0f\xc2\x1b\x08\x9c!\x0c\x97\x04\x8cF\xf9A1\xb7kk\xb0\xcb*\x941[\xe5\xe2\x90\xb1\xa3!`\x08\x18\x02\x86\x80!`\x08\x84\x81\x80\xee9\xe6\x14\x900\x12\xe8A\x9c\xe9P|\xb8\xa9\x12\xe5\xdc[w\x91]\x8f\x18/+\xe0\xf3\x8f;\xa7\x9b\x84\x83\x00\xad@\xb3\xb0\x0c<\x13\x1b\x91\xfd\xf5\x17\xefh"\xdc\xf5\xd7\x91\xb0\xe1\xa4\xda\x1a+\t?N\xb7\x93\xfc[\x8c\xc0\xb50\x11k\xdfH\xd1\xc4\x100\x04\x0c\x01C \xe9\x100\x020\xe9\xaa\xac\xc7\x19\xa6\xfa\xc7z^\x88@K\xc0\x17\x10Rr\x99@\x1d\x96\x1e\x83\xfeC\xf1L\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10\x08\x0f\x81fL\xa5\x16\x14g\x85\x97@\x0fb\xe62\xd4\xe2\xd2\\\xb9\xec\xb1}d\xbb=G\xcb*\xf8\xfc\xa3\x7f\xe4\xb5vI\xefA|vkw\x10\x00\xe6#\xf2\xe4\xd1\xebg\xcb\xbc\xd9e\xaa}F\xb4\xf4\x97z=\t\xbf\xe7\x11\xfe\xe6\x9f\x93\x1041\x04\x0c\x01C\xc0\x100\x04\xd6\x8b\x80\x11\x80\xeb\x85(%n\xa0b@ea\x05\x02I\xc0G\xfd\xcf\xe1Z\x02"\x91(\xa5\xb6\n:\x11f\xe3\xcd\x020J\xd4--C\xc0\x100\x04\x0c\x01C``!\x90\x9e\x96.\xb1X\xa3\x8c\x9c0\xa8\xdf\n\x1e\xaf\xebL\x9c2D~\xf3\xe4>2f\xb3bY\xb9\xb8\xc6v\xfb\r\xb9V\x9a`mI\xc2\xf5\xd3\xd7\x96\xcb\xbfo\xa7\x87\x9d\xc8\xcc\xefh\xe5\xc7\x99\xee\x18\xc2E\x08\xdc\xf8\x83\xd7\xcc\xfa\x0f \x98\x18\x02\x86\x80!`\x08\xac\x1f\x01#\x00\xd7\x8fQ\xaa\xdc\xe1,\x01\xabQ\xa0\xe3\x10\xeeC\xa0% \xc9\xc1\x94P\x1cZ-\x00\xcd\x08\x10Ujb\x08\x18\x02\x86\x80!`\x08\x18\x02\xa1 \x00\xed\xb9\xb9\x91\xfe\xdf\xb2e\xe8\xe8|M"\x9e\x90\x0b%\xcd\xb8H\xe3\xfd\xfd\xeds\xc2D\xb9\xe8\x9e\xefJNn\xa6T,\xab5\xf2/\x0e\xa70N\xb9\xf47/?Sbu\x8dr\xeb\xcf\xdf\xd2$\xb8\xf47"\xa1\xce\xce\xb1\xdbu\x08\xef\xfa\xe7\xbcfb\x08\x18\x02\x86\x80!`\x08t\x0b\x01#\x00\xbb\x05S\xca\xdc\xe4\x14\x07n\xd3{2\xc2\x1d\x08l\x03\xbc\x9e\xbc$\xa0\xaf\xfa(\x01\xa8>p\xacY\xa3>M\x0c\x01C\xc0\x100\x04\x0c\x01C $\x04\x1a\x1a\x9a\xe0\x03.S\xa6\x1d0FSH\x8b\x80\x04r$#\xfd\xfde\xc0\xff\xdciWM\x93\x1f\xfdf\x8a\xd4U7H\xed\x9a\x98\xa4\xc3\x1f\x9dI\xb8\x08\xa4\xa5\xb5\xc8\xa0\xa1\xb9r\xdf\xe5\x1fI\x19\x08W.\xb5\x8ex\xe9\xef\'(\xe1\xef\x10L\xd9\r\xb7\xaa-vC\xc0\x100\x04R\x12\x01\xebo\x80\x85\x89!`\x08\x18\x02\x86\x80!`\x08\x84\x8b@C\xacIv<\xd4#\x00I\xca9\x82.\xe8T\x19o\xbc\xd5\xdfV\xdf\x19!W\xfeg\x7fl\xf6\xb1\xa1\xacZX\x87\xe5\xc8H\x1b\xbb\x00\x9b\x84\x8b\x00\x89\xbe\x92\x11\xf9\xf2\xfaS\xf3\xe5\xb5\'\xe6ib\xdc|."a\x05\xd3u\xcfy\x08\x95~\x9aN\xa7\xf7?\xda\xc1\x100\x04\x0c\x01C\xc0\x10\xe8\x1a\x01#\x00\xbb\xc6\'U\xbf\xa5\xb6\xc2\xbag8\x07\xe1\x8f\xfe9\xafG\xa6\xc9 \xad@\xc4e\xb8\xbe\x1a\xab\x9c\xa3S\xc4\x02\xc9\xbbEb\x08\x18\x02\x86\x80!`\x08\x18\x02\xc9\x87@FF\xbaT\xae\xae\x97\x89[\x0f\x95]\x0f\x1f\xaf\x05\x08\xc3\n\x90qR\xb5!\xc1\x98\x95\x9b\xa1\x16\x7f?\xbf{7)\x1a\x9a%\xab\xb1\xd9\x87\xc0"\xcd6\xfb\x08\xbf\xfd\x10\xff\xfc\xc2LY\xbd\xb4F\xee\xfa%W\xdf\x02\xfa\xb0\x18\xdfu\x8b\xe3\xdc\xf8\xfc\x05_\xbd\x80\xc0\x89{#\xff\xd6\xc5\xc9\xae\x18\x02\x86\x80!`\x08\xac\x07\x01\xfa\x803\x19\x98\x088\xc5\x813\x8a\x17"T pI\x81#\x01\x93n*\xd9\xb3\x00D\tL\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10\x08\x1b\x01\x10@$\x01\x8f\xb9pK\xf9`\xc6"\xa9\xael\x00\x19\x17\xc0\x92Ph`\x19\xb0\xe8k\x82\x9f\xc1\x16X\x9dQv\xfb\xdex9\xf2\xbc-d\xf0\xf0<\x90P\xb5J\x08\xda\x92\xdf\xb0+\xb8-~b\x9d?([n>w\x96\xd4\xd74J:\xea\x9e\xbb/G \x8e\xfc\xfb\x12i]\x81\xe0V\xedD\x90\xb4%a\x08\x18\x02\x86\x80!\x90j\x08\x98\x05`\xaa\xd5h\xef\xcaCe\xe2J\x04\x12\x81\x8e\xf8\x8bD\xab\xe9]v\xdb=\xe5+`\xb5\xd5\x8dP\x949#\xdb\xee{\xfbh\x08\x18\x02\x86\x80!`\x08\x18\x02\x86@\xc0\x08\xd0\xf2\x8edPaq\xb6\x9c{\xcb.\x1a;\x97\x89\xf6zS\x08\xe8/jE\x08\r\x8c\xe4\x1feK,\xf7\xbd\xe4\xc1\xbd\xe4\xf4\xab\xb6\x97\xec\x9c\x0cY\xbd\x04V\x7f\xa0\x84z\x9d\x86\xc6j\x7fz\x82\x00\xad\xff\x86\x8c\xcc\x93g\xef\xf9Z>yu\x99>\x1a\x11\xf9\xc7\xb4\xa8\xd52\xfc/\xc2r\x04\x8a\x9b\xc4\xf7>\xd9_C\xc0\x100\x04\x0c\x01C\xa0\x9b\x08\x90\xf811\x04\xa8e\x92\x0c~\x15\x81\x96\x80\xfb#\xf0\x1aC\xc2\xd3i\x8e\xf0\xa32\xbc\xff\xc9\x93\xa4\t\x8e\xb9\xa3\x99\x94\x05:&\x86\x80!`\x08\x18\x02\x86\x80!0`\x11\xe02PN@\x8e\xd9t\xb0L\xd8\xb2D\xde\xfa\xf7\xc2\xd6M!2\xfc\xe5\xbb]\x82\x03-+\x83\x9bw\xb40\xe0N\x06\xc8\xa4\xa9\xa5r\xe2o\xa7\xc8\x91\xe7n\xa9\xbb\r\x97/\xaf\x93\xc6\x06\x9f\\Lx\xcd\xcc+C*\xfcm\x02\xf9W\x8cM?\xbe\xfd\xa2Bn\xfa\xe9\xebZ\xa4\x88\x97\xfer\xacv\x17\x82s\xd7c\xe4_*4,+\x83!`\x08\x18\x02\xfd\x84\x80\xa9\x10\xfd\x04|\x02&\xcb\xb6@%\x83\x0e\x86/@\xb8\x06\xc1WC\x13\x9b\x04$\x01H\xc2\x8f\x0e\xb2\xff\xf2\xee\xe1R\x87\xd9x\xce\xd6\x9a\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!\x10\x05\x02j%6:_\xe6\x7fZ&w]\xfc\xae\xcc\xff\xac\xdcK\x16:J\x06\x14\x15em\xe2U\x13\\O\xc3\xd4k\xb3o\xe9\xe7\xf2\xb8\xd3!ce\xcf\x1fl$\x9bL\x1d*-\x8di\xb2\xa6\xac\x0e:M3t\x1c[\xb4\xe30\x8a\xf2\x98\t\xab\xcb\x9c\xec\x0c\xf9\xf5\xff<\'K\xe7U\xa9\xbf\xc5\xe6h(8\xa6B\xdd|\x1e\xc2w\x10\x96"P\xa2I\xddK\xcb\xfe\x1a\x02\x86\x80!`\x08\xa4\x18\x02\xe6\x030\xc5*\xb4\x0f\xc5\xa1ZJ\xf2\x8f\x1a\xe6\xb5\x08T0\xaeF\xa0\xf2AqG\xefS\x02\xfdu\xfa4\x95o\xee\xc6\x96\xa6YuW\x13(\xa3\x96\x15C\xc0\x100\x04\x0c\x01C\xc0\x10HI\x048\tY\x86\xe5\xb9\xa3&\x0c\x92\xff{xOy\xf1\xa1\xb9\xf2\xc2}_\xcb\xd2\xb9U\xd2\xd4\xd1\xb2\x04\xa8)t[B\x99\xb0u\x89L\xd9s\x03\xd9\xf9\xb0\xb1R:\xb6@\x1a\xeb\x9bd\xcd\x8azi\x04\xf1\xc7\xcdF\x8c\xfc\xf3p\x8a\xfa/u\xca\xe2\x92l\xb9\xfd\xa2w\x94\xfc\xa3\xe5\x1f\x97xG$L\x88:\xf9\xc5\x08\x8b\x118IO\x7f\x80&\x86\x80!`\x08\x18\x02\x86@\xaf\x11HXR\xa7\xd7%\xb2\x07\xfb\x8a\x00\xdb\x84\xb3\x04\xfc\x19\xceI\x02\xbaY\xc8\x84o/7\xbdy\x08\xcc\x16\xd3\xa0<#\xcb6Y\xde\xd7\xb6`\xcf\x1b\x02\x86\x80!`\x08\x18\x02\x86@\x0f\x10h\xc1ddFV\xba\x0c\x1e\x91\'\xd5\xe5\xf5\xf2\xcd\x87e\xf2\xd5\xbb+\xe4\xeb\xf7WK\x19v\x90m\x04\x85\x93\x9d\x93.\xc3\xc7\x15\xc8f\xd3\x86\xc9\xc6\xdb\x0f\x95q\x93\x07Knn\xa6T\xac\xaa\x97X\x1d\xdc\x98\xc0\xc4,\x9d\x0e\x06\x13^\xeb\xea\x010Iv+\'\x95K7\xc8\x97W\x1f\x9d\xa7\x04 \xb3\xefV\x9cDP\x14\x12}\xd4\xc5\x1fD\xf8\x01\x025Z\x9f.\xc6\x99\x89!`\x08\x18\x02\x86\x80!\xd0K\x04L\xb5\xe8%p\x03\xe017\xd3\x98T$\xe0\xf4\x17\x0f\x94\xfc\x82L\xa9\xab\xa5\xf2<\x00j\xc9\x8ah\x08\x18\x02\x86\x80!`\x08\x18\x02\t\x87\x007\xf1\xc8\xca\xcd\x90\x82\xa2,\xdd\xb0\x83F\x80$\x90(X\xaf i\xf4\xf9\x97\xd6"\x8d\xb8\xaf\xba"&M1\xcf\xda\xcf&/=\x8c\xfa\xf3/I\xdc\x82\x92\x1cY\xb9\xa8Z.9\xe8\xbf\x9a\x95\x08\xc9?7\xe9\xbe\x04\t\xef\x88\xb0\x08\x81-\xc7\x08@\x80`b\x08\x18\x02\x86\x80!\xd07\x04l\tp\xdf\xf0K\xe5\xa7\xa9h\x90\x04\xa4/\xc0l\x04\xee\x12\xec\x94\x8f\x84%\x8ec5M\x92_\xc4\xec\xba\xac\xe2\xd4\xc4\x100\x04\x0c\x01C\xc0\x100\x04\x0c\x81\x08\x11\xe0\xc6\x1e$\xf5\xcaW\xd4z\x86|p\xf8\x17?1\xa9~\xe4\xfc5\xc0\xb4\xf6\xa3\xd5\xa0I\xff#\xc0*\xc9\x845&\xc9\xd9[.\x98\xa5\x19\xe2&s\x11.\xfde\x9a\xd4\xb3\xcfCX\x88`\xd6\x7f\x00\xc1\xc4\x100\x04\x0c\x01C \x18\x04\x8c\x00\x0c\x06\xc7T\x8c\x85\xbeG\xb8\x04\x81\x8a\xc7\xef\x11\xd8V~\x8b\xe0\x96%\xe04\xf1\xa4\x1e\x1b\x80\x98\n\x9dx\xf5b92\x04\x0c\x01C\xc0\x100\x04\x06\x1a\x02\xdc\xe4#\xa3\x13\xad\xc4#\x03McI\xb86\x01\xe2o\xf0\xf0\x1c\xb9\x13~\xff\x16|^\xa1V\x9b\x11\x92\x7fN\xc7\xbe\x15\xb8\xfc\x03\xc1\xad\xc6I8\x98,C\x86\x80!`\x08\x18\x02\xc9\x89\x80i\x1e\xc9YoQ\xe6\x9aD \xc9\xbf\xcb\x11h\rHe\x84\x9b\x85$\xa4\xd4\xd64Hz&\x9b\xb5Y\x00&d\x05Y\xa6\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10H@\x04H\xf4\x95\x0c\xcf\x97\xd7\x9f\xf8V^zx\xae\xe6\xb0\xa3\xfd[B\xca:\x15W\xea\xd8\xb3\x11.D\xa02K\x1d\xdc\xc4\x100\x04\x0c\x01C\xc0\x10\x08\x0c\x01#\x00\x03\x832e#r\x96\x80\\\x8e\xf0s\x84\xbf!\x90\x10\xe4,e\xc2I\xac\xba\xd1\xf3\xb1c*S\xc2\xd5\x8de\xc8\x100\x04\x0c\x01C\xc0\x100\x04\x0c\x81DD\xa0\t~\xff\n\x8b\xb3e\xf9\xfcJ\xb9\xe3\xe2w4\x8b\xdc\xf57b\x89!\xbd\x9f"T\xf8\xe9\xdalv\xc4\x15`\xc9\x19\x02\x86\x80!\x90\xea\x08\x18\x01\x98\xea5\x1cL\xf9H\xa7Q\x0bb{9\r\xe1_\x08\ti\tX\x0b\x1f\x80\xf4\xd5bb\x08\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!`\x08t\x07\x81\xac\xdct\xc9\x84\x1f\xc6\x9b\xce\x9f%\r\xf5M\x92\x06]\xb2%:\xf3?\xe7r\xe7*\xe4u&\x02ul#\xff\xbaSqv\x8f!`\x08\x18\x02\x86@\x8f\x100\x02\xb0Gp\r\xe8\x9b\xa9\x88\x90\x08l@8\x1e\xe1u\x04Z\x02&\xd4r\xe0\x18}\x00\xb2U\x9b\x05 @01\x04\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10\xe8\x12\x01\x10}\x83Ks\xe5\xe1\xab?\x96\x05\x9f\x96\xeb\x8cw\x0b\x96\x03G$n\xe9\xefkHo:\x82\x91\x7f\x11\x01o\xc9\x18\x02\x86\x80!0\x10\x110\x02p \xd6z\xef\xcbLm\x88m\xa6\x1c\xe1{\x08\x1f"$\xc4r`\xb7J\x83\x9b\x80HF\xba\xf1\x7f\xa8\x18\x13C\xc0\x100\x04\x0c\x01C\xc0\x100\x04\x0c\x81\xce\x11\xe0\xd2\xdf!\xa3\n\xe4\xd5G\xe7\xc9\xb3w}\xe5\xdd\x18\xddB\x12\xea\xd5L\xad\x12\xe1\xc7\xfe\x91\xd7"c\x1f\x91\x96\x89!`\x08\x18\x02\x86\xc0\x00B\xc0\x08\xc0\x01T\xd9\x01\x15\x953\x95l7K\x10\xbe\x8f\xb0\x08!af+\xbd%\xc0\xc8\x91\x89!`\x08\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!\xd0\t\x02\xcd \xff\x8aa\xf9\xf7\xedger\xfb\x85\xce\xef\x1f\xd8\xb7\xe8\xe87\xea\xd4$\x00/A\xf8\x18!a\xf4i\xe4\xc5\xc4\x100\x04\x0c\x01C \x05\x110\x020\x05+5\x82"\xb9\xe5\n\x9f#-.\x07\xaeF\xa0\x02\x13\x9d\xca\x84\xc4\xd6\x12\xdf\x04\xd0[\x02\x8c\xac\xf4_N\xd6\xca\x96}0\x04\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10H,\x04Z\xa0\xc9\xe6\xe4gJ\xac\xaeQ\xfet\xf6,\xcd\x9c\xe7\xf7/\xb2|\xd2\xef\x1f\t\xbf\'\x11\xfe\x82\xc0\x155\xd4\xafM\x0c\x01C\xc0\x100\x04\x0c\x81\xd0\x100\x0204hS>b*.TV^B8\x0b\x81\xd2\xef\xb4[]M\x83\xe7\xb8\xd9\xcb\x8f\xfd5\x04\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x100\x04\xd6B\x80\xfe\xa2\x8b\x86\xe6\xca\x9d\x17\xbd\xab;\xffr\xc7\xdf\x08\xfd\xfeQ_&\xf9\xb7\x1c\x81\xbb\xfe\xd2\x9f6\xf5\xea~\xd7\xa3\x91\x07\x13C\xc0\x100\x04\x0c\x81\x14F\xc0\x08\xc0\x14\xae\xdc\x08\x8aF\x85\x85$\xe0\xbd\x08\xbfF`{\xe2\xb5\xc8\x15\x18\x9a\x1fR\xea\xab\xfdM@\xbc\x8f\xf6\xd7\x100\x04\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10hE\x80K\x7f\x87\x8c\xce\x97\xc7\xff\xf4\xa9\xbc\xfb<<\xd9p\xe1Ht\xeb~\xa9#;=\x99\xe4\xdfB\x04\x92\x81\xee\x1aNM\x0c\x01C\xc0\x100\x04\x0c\x81p\x100\x020\x1c\\\x07R\xacn\t\xc3\x15(\xf4}\x08$\x04\xfbm\tC\x1dw\x01N\xb3f=\x90\x1a\xa0\x95\xd5\x100\x04\x0c\x01C\xc0\x100\x04\x0c\x81\xee \xd0\xdc\xd8$%#\xf2\xe5\xc3\x97\x96\xc8\xe3\xd7\x7f\xa2\x8f\xa4\xa9\x17\x9b\xee<\x1d\xc8=\xd4\x91\xa9\xa8^\x8f\xf0\x08\x82\xf9\xfd\x03\x08&\x86\x80!`\x08\x18\x02\xd1 `LI48\xa7r*\x9c\xb1\xa42C#<\xee`\xf66B\xf4\xca\x8c\xdf\x92\xeb\xeb\x9a$\r\x14$}\xbb\x98\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!`\x08\x18\x02D\x80;\xfe\x16\x96\xe4\xca\xea\xa55r\xf3\xd9o*(\x9c3\x8e\xd0\xfa\x8f\xda)u\xe47\x10.F\xa0\xf6\xcakf\xfd\x07\x10L\x0c\x01C\xc0\x100\x04\xc2G\xc0\x08\xc0\xf01\x1e\x08)Pqa[\xaaD8\ta5\x02\t\xc1\xc8i\xb8XM\x13\xc8?\xcc\xe5Z\xcb\x06\xfc&\x86\x80!`\x08\x18\x02\x86\x80!`\x08\x18\x02\xcd\xcd-\x92\x93\x9b.i\x19\xe9r\xe3O_\x17\xae\x18\x11\xf5\xfb\x17\x196\xd4\x89\xa9\x1b\xafD8\x19\xa1\x0e\x81b\xe4\x9f\x87\x83\xfd5\x04\x0c\x01C\xc0\x10\x88\x00\x01\xa3I"\x00y\x80$\xc1\xa5\xc0lO\x9f"\xd0\xa7\t\x95\x9c\xc8\xa5!\xd6$M\xb1F\xeat&\x86\x80!`\x08\x18\x02\x86\x80!`\x08\x18\x02\x86\x80\xea\x85%\xc3\xf3\xe5\xfe\xcb\xdf\x97o?-\xf7\x94\xd4\xe8\xfc\xfe\xb9\x1a\xa0vz.\xc2\x17\x08\xd1\xaf\x96q\xb9\xb0\xa3!`\x08\x18\x02\x86\xc0\x80E\xc0\x08\xc0\x01[\xf5\xa1\x14\xdc-mx\x10\xb1\xff\t\x81\xed\x8b\xc4`d\xd2\xd8\xd0"\r\r\xcd\xba\x13pd\x89ZB\x86\x80!`\x08\x18\x02\x86\x80!`\x08\x18\x02\t\x89\x007\xfd\x18\x8aM?f<\xf4\x8d\xbc\xf4\xf0\\\xcdc\xc4fwn\x92\xfc6$~?\x02\xc9\xbfH\xf5c-\xb4\xfd1\x04\x0c\x01C\xc0\x10\x18\xf0\x08\x18\x018\xe0\x9b@\xe0\x00\xb8\xe5\xc0\xff\x8b\x98\x9d?\xc0\xf0\x95\x1c\x7f\xb1q#\xac\xffh\x05\x98\x9e\x9e\x06\x9f.\x81\x97\xcd"4\x04\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10H\x12\x04\x9a\x1b[\xa4dT\x9e|\xfa\xc6\n\xb9\xf3\xe2w5\xd7\x11\xaf\x12\xa1\x0eL\xc2\x8f:\xf1y\x08\x1c{\x99\x86\n\x10L\x0c\x01C\xc0\x100\x04\xa2G\xc0\x08\xc0\xe81O\xf5\x14\x9d\xdf\xbfz\x14\xf4L\x84*\x84\xc8\x94\x9d\xc6\xfa\x16i\xaco\x06\x01\x98\xea0[\xf9\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x100\x04:C\xa0\x05\x96\x7f\xf9%\xd9\xb2zQ\xad\xdc\xf0\xe3\xd7\xf4\xb64\xfa\xfd\x8b\x8e~s\x93\xe2\x15H\xfct\x84Z?\xafNW\xf6?\xda\xc1\x100\x04\x0c\x01C\xc0\x10\x88\x06\x01\xa3I\xa2\xc1y\xa0\xa5\xe2\x96\x02\xbf\x8f\x82\xff\x1a\x81>OBUv\x9c.\xd7\xd0\xd0\x04\x0b@\x10\x80p\xf2l\xf3\xab\x03\xad\xd9Yy\r\x01C\xc0\x100\x04\x0c\x01C\xc0\x10\x80\xd2\t\xad3+?S\xb0 D\xfe\xf4\xff\xb0\xe9GU#\xceI\xfe9\x8d1\x12\x94\xa8\xfbR\x07\xfe\x19\xc2\x87\x08\xe6\xf7\x0f \x98\x18\x02\x86\x80!`\x08\xf4\x1f\x02F\x00\xf6\x1f\xf6\xa9\x9e2\x95\x1e*:7#\xfc\xd7?\x0f})pc\xacE\x9a\xe0\x07\x90\xeaV\xa4*\x1e\nhb\x08\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!\xd0\xcf\x08@\x03\xe57\xfd\xc0\xe7\xe6h\xc9?l3\xacz\xf0\xdfq\xbc\xc3?\xa7nlb\x08\x18\x02\x86\x80!`\x08\xf4\x1b\x02F\x00\xf6\x1b\xf4)\x9f0\xf97\x86\x18\xc2\xf9\x08\x95\x08lo\xa1\xf2r\xdc\x00\x84>\x0032\xc8\x00\x86\x9a\x14\x8abb\x08\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!\x90H\x08\xb4@\xd5\x1c\xb2A\xbe\xfc\xf3O\x9f\xca\x1bO-\xf0&\x85\xa3\xa5\xde\x98Z&\xc2l\x04\xee\xfaK+@^3\xc5\x14 \x98\x18\x02\x86\x80!`\x08\xf4\x1f\x02F\x00\xf6\x1f\xf6\x03!e*;lc\x9f"\xfc\x11\x81\nP8\xca\x8f\x1fk#\xc8\xbfF,\x01\xd65\x1f!%\x852\x98\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!`\x08$\x18\x02\xdc\xf1\xb7dT\xbe\x12\x7f\x8f^\xf7\x89\xe6.M\xd5\xcf\xff\xcf\xde\x99\xc0IR\x96\xf7\xff\x99\x9e\xfb\xda\xfb>8v\xb9\x11\x11P\x04E0\x8a&F\xe3\x15#\x18I<\xe2\x1d\xd4x\xfe\xa3\xc6#\x1a4*J"j\xcaD@\x04D@\x04D\xa0|\x04xS\x92\x89@\x9c\x04\xd8\xe8a,@\x0e\x01\xa6\' -\x1e/\xc0 ox\x00\xe6\x9d\x03`\xac\x85\x84e\xe9M\x04D@\x04D@\x04D@\x04D\xa0\xbc\x048\xe3o{g\x93\x8d\x0e\xa4\xec\x8bo\xb9\xd9U\xa6\x0e\x0f\x83K\x1c\r\x86\x0f\xb8\xd9\xe6\xfd<\xd2\x0f\xc3\xcf\x12\xff\x00B&\x02" \x02"0;\x08H\x00\x9c\x1d\xc7\xa1\x16jQ2\x97\xbct*\x83`\xcf8\xb5\xa5\x00\xd6\xc2y\xa5}\x14\x01\x11\x10\x01\x11\x10\x01\x11\xa8e\x02\x90\xd8\x1a[\x12H\xf5\xf6\xa5\x7f\xbc\xcdz\xbbF\x11t\x06\xe2\x1f<\x02Kh^\xfc\xbb\x1ae\xfe\x0b\x12\x85\xc0\x92V\xa0\x84\xfb\xaa\xa2D@\x04D@\x04*\x94\x80\x04\xc0\n=p\x15Xm6\x828!H\xec\x96\x86\x07 g{\x93\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08T9\x01\xb4\xf9\xe6.i\xb3\x1f}\xea\x1e{\xec\xae\xee \xe2_i]\xff\xfch\x97- \xfdF$\xb6w\xb9L\xde\x7f\x80 \x13\x01\x11\x10\x01\x11\x98=\x04$\x93\xcc\x9ecQ\xcd5\xf1O@\xbd\x00\x18\xb97 \xdbyu\x0c\xf4\x02\xcbb\x12\x90z=w\xad\xe6\xf3I\xfb&\x02" \x02" \x02" \x02\xce\xcbo!&\xfd\xb8\xf2k\x8f\xd8u?\xda\x14\x10\x89\xbc\x959)h\xdf\xc6Mb-\x8a\x7f;\x90\xd4\n\x9d\x14\x99\xbe\x14\x01\x11\x10\x01\x11(\x17\x01\t\x80\xe5"_\x9b\xe5z\x010\x96\xbd\x0f\xf5?K\'1\n\x03.\x80\xbeE\x16Ka\xcaT\x04D@\x04D@\x04D@\x04D\xa0l\x048\xe3\xef\xc2\x95mv\xdb\x95[\xed\xc7\x9f\xbb?\xa8\x07\xc4\xbf\xd2:\xff9/?\xf6\xa7\xde\x8ft\x1d\x12\xc5?\x0e\x07\x96\x89\x80\x08\x88\x80\x08\x88\xc0\xac# \x01p\xd6\x1d\x92\xaa\xae\xd0P\x9c{\xc7\xb0\x7f\xb4$<\x00\x13l~\xc9D@\x04D@\x04D@\x04D@\x04\xaa\x8e\x00\xc5\xbf\xf9K[m\xfd\x9d\xdd\xf6\xd5p\xc6\xdf\x04&\xfd(\xf1\xd3_\x1f\xf7\xef\xdb\x00\xfce$\x89\x7fUw\xa6i\x87D@\x04D\xa0\xba\x08H\x00\xac\xae\xe39\xdb\xf7fgX\xc1x\x06g\x84\xb9fF0\t\x88\xdc\xfff\xfb\xb9\xa0\xfa\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88@\xd1\x048\xe3o\xc7\xfc&\xdb\xbdm\xd8\xbe\xf0\x0f\xfbf\xfc\xcd\x95g\xd2\x8f\xdb\xb1\x03\x1f@b\x9fJ1\xff\x8a>\x9a\xda@\x04D@\x04D\xa0\x94\x04$\x00\x96\x92v\xed\x96\xe5\x1bD\x0f\x85\x08b9\xef|\xbbot8c9\x8c\xff\xf0C\x82k\x17\xbb\xf6\\\x04D@\x04D@\x04D@\x04\xaa\x87@\x1e>w\xcd\x1d\r\x96M\x9b}\xe9m7Y\x12m\xbe2\xcc\xf8\xcb\xc7\xcc\xf4\xf6\xdb\x83\xf4\x06\xa4\xbdH4=~\x0e8\xe8U\x04D@\x04D`\x96\x12\x88E\x88\x99\xa5\xfb\xaaj\x95\x8f\x80o\x10\xdd\x87*\x8c\xc6]\x8d\xe40Z\x87\xf9x\x9c\x0c\xe3\xae\xbb\xf2\x17\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x118\x98@\x0e\x8f\x93\x1b\x9a\xeb\xac\xb5\xa3\x11\xc3~o\xb5\xed\x1b\x07\x11\xf2\x19\xed\xbd\xd2\x06\xfdc\x9b\x96\x0f\xb69\xe9\xc7[\x91\x1eF\xa2\x18\xe8\x1fv\xe3\xa3L\x04D@\x04D@\x04f\'\x01\t\x80\xb3\xf3\xb8Tk\xadz\xb0c#\xe1\xceyQ0\xf2}M\x8d\xca\x030r\xa8\xcaP\x04D@\x04D@\x04D@\x04\xcaH\xa0\xbe\xbe\xce\xe6/n\xb3\xcb>t\x97\xad\xfb\xe3.7\xd2#\xef\x87\x7f\x94\xae^\x14\xfa(\xf8}\x1c\xe9\n\xa4\x06$\xc6\x02\x94\x89\x80\x08\x88\x80\x08\x88\xc0\xac\' \x01p\xd6\x1f\xa2\xaa\xa8\xa0\x17\xfb\xf8\xde\x1b\xf7\x1e\x8d`8\x88\x86\xff\xc6MY\xf9\x8b\x80\x08\x88\x80\x08\x88\x80\x08\x88@i\x08P\xe8[\x84\x19\x7f\x7f\xfe\x95\x87\xec\xe6\xff{\xa24\x85\x1e\\\n\xc6\x1b;\xf1\xef{x\xff,\x12\xfbQ\x12\xff\x00A&\x02" \x02"P\x19\x04$\x00V\xc6q\xaa\x96Z"b\x8bu\x85;\xe3E\xc1\xe8\xf6-\x1c|\x91\x1e\xc9\x9a\x0b\x04]\xa7\xd3;:\xb8\xcaI\x04D@\x04D@\x04D@\x04JO\x80q\x9d\x17\xach\xb3\x1b\x7f\xba\xc9\xae\xb8d]P\x81\x92\x8f\xfcuB\x1f\xbd\xfd\xfe\x80\xf4\x0e$\x1fk&\xfa\xf6l\xb0\x87z\x15\x01\x11\x10\x01\x11\x10\x81\xc8\tH!\x89\x1c\xa92\x9c\x84\x00%:?\x13\xf0$\xab\xcd\xec\xab\xa1\xbe\x94b\x00\xce\x0c\xa1\xb6\x16\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\xb2\x13\xc8a\xc6\xdf\x05\x8b[\xec\xe1\xdb\xba\xec\x9b\x1f\xf8\x93\xabO\x1d\x87y\x94Vv\xf3\xc3~\x9f@\x05\xfe\x0ei\xd8UDq\xffB\x0cz\x13\x01\x11\x10\x01\x11\xa8\x14\x02\x12\x00+\xe5HU~=\xfd\x93\xd2\xc1pW"o\xba\xf9\x0c\xf7\xee\x1a\xb1\\6g\t\x9d\xdd\x95\x7f\xd6h\x0fD@\x04D@\x04D@\x04j\x92\x00Gs\xccY\xd8b\xbb\xb6\x0e\xdb\x7f\xbc\xe5\x8f\x8e\x01\'\xfd\xc8\x97~\xd2\x0f\xb6a\x19\xc3\xfa\x8dH[\x90\x18\x03\xd07;\xf1Q&\x02" \x02" \x02\x95A@\x12Ie\x1c\xa7j\xaa\xa5\x7fj\x1a\xfd>\x85M\xb1\xfe=\x98\x98\r\x9f\x15\x070z\xc4\xcaQ\x04D@\x04D@\x04D@\x04\xe2&\x90\x85\xe7_\xc7\xdcf\x1b\xd8\x9b\xb4\xcf\\p\x83%\x11\xde%A\xf1\xaf<\x93~P\x00|;\xd2\xf5H\x9a\xf4#\xee\x83\xaf\xfcE@\x04D@\x04b# \x0106\xb4\xca\xf8\x10\x04\xe2\x13\x00\xc3\x87\xb1\xc3\xfdic\xbc\x187D\xe4\x10\x95\xd0b\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\xd9G\x80\x1e~\xeds\x9a,\x9b\xcd\xda\xc5o\xb8\xc9\xfa\xbaF\xddC]\x17\xdf\xb9\xb4\xd5\xf5\x93~|\x1a\xc5~\x0f\x89\x9e\x7f\\&\x13\x01\x11\x10\x01\x11\x10\x81\x8a$ \x01\xb0"\x0f[EV\xda\x0f\x01\x1e\x8a\xbb\xf6\x99T\x0e\xc3CP\x8a/1\xee\x02\x95\xbf\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0\x8c\t0\xe6_sK\x83\xd57&\xec\x0bo\xba\xd9vl\xec\xb7`\xd8\xef\x8c\xb3.6\x03\n}\xf4\xf6\xfb)\xd2\xc7\x90\xd8g\n\xa7\x9b\xc3\'\x99\x08\x88\x80\x08\x88\x80\x08T \x01\t\x80\x15x\xd0*\xbc\xca\xde\x030\x1c\xb0\x1b\xfd\xde\xa43Yi\x7f\xd1cU\x8e" \x02" \x02" \x02"\x10\x1f\x01\xb4\x0c\x1b\x9a\x12\xd6>\xb7\xc9\xbe\xfe\xde\xdbm\xe3==\xce\xf3\xafL\xc3~)\xfe\xdd\x8f\xf4V\xa4,\x12\xdb\xad\xb1\xb5]\x91\xb7L\x04D@\x04D@\x04b\' \x010v\xc4* $\xe0\xfd\xf1\xbc\x00\x189\x98\xb1V\x19\x9e\xcf\x966>t\xe4\xbb\xa2\x0cE@\x04D@\x04D@\x04D\xa0f\x08\xe4\xd0v\xabC\xafd\x1ef\xfc\xfd\xd1\xa7\xef\xb3\xbb\xae\xd9\xee\xf6\xbd\x0c\xed9\x8a}\xec\x1fu#\xbd\x16\xa9\x07I\x93~\x00\x82L\x04D@\x04D\xa0\xf2\tH\x00\xac\xfccXi{\x10\xfb\x10\xe0\x00\x08b\x00\xca\x0f\xb0\xd2\xce\r\xd5W\x04D@\x04D@\x04D\xa0\x06\t$\xd0#Y\xb8\xbc\xcd~\xf9_\x0f\xdb\xd5\xdf{\xcc\x11(\xc3dn|\x96\xcc\xbeQ\n\xe9\rH\xeb\xc2\xff)\n\xcaD@\x04D@\x04D\xa0\xe2\tH\x00\xac\xf8CX1;\xe0=\x00\x07\xc3\x1a\x8f9\xecE\xb6\x07\xe3r\xcc\xe7Q\x9c/1\xb2\x02\x94\x91\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x88@\x94\x048\xc4w\xe1\x8a6\xbb\xfa\xbb\x1b\xec\x8a/>8\x96u\x89\xbd\xff\xd8\x8a\xf41\xfe\xde\x81\xcf\xbfF\xa2\xe7\x9f_\x86\x8f2\x11\x10\x01\x11\x10\x01\x11\xa8l\x02\x12\x00+\xfb\xf8Ub\xed\xfd\x10\xe0X\xe5\xb9l*\xe3\xe2\xc6\xa8\xd9V\x89\xa7\x88\xea,\x02" \x02" \x02"P\x0b\x048\xe9\xc7\xc2U\x1dv\xdb\xaf\xb7\xd8\xf7?u\x8f\xdb\xe52x\xfe\xb1\\z\xf9Q\xf0\xfb$\xd2\xb7\x91\x18\x03P\xe2\x1f \xc8D@\x04D@\x04\xaa\x87\x80\x04\xc0\xea9\x96\x95\xb2\'\xa3aEc\x15\x00\x87\x87\xb2\x96@3N-\xb7J9-TO\x11\x10\x01\x11\x10\x01\x11\x10\x81Z"\xe0\xc4?\x0c\xfb]w\xd3N\xfb\xea\xbbow\xbbN\xf1\xaf\xc4\x9e\x7f,\x97\xe2\x1f\x05\xbf\xef"}\x02\x89\xfd#.\x1b7\xb6\x04\xff\xc9D@\x04D@\x04D\xa0\xc2\tH\x00\xac\xf0\x03XA\xd5\xf7\x8d\xa8dXg\x9e{~Y\xe4\xbb1:\x94\xb6\x04\x03\xca\xc8D@\x04D@\x04D@\x04D@\x04f\x15\x01\x8a\x7f\xf3\x97\xb5\xda\xd6Gz\xed\x927\xdd\xec\xeaV\x97\xa8+\x97\xf8G\xcf\xbfk\x91\xde\x86\xe4\x1b\x8f\xb1\xb5Q\xdd\xce\xeaE\x04D@\x04D@\x04\xca@\xc0\xdf\xe4\xcaP\xb4\x8a\xacQ\x02\xf4\x00L#\xc5\xea\x018\n\x0f\xc0\xb1&\\\x8d\x82\xd6n\x8b\x80\x08\x88\x80\x08\x88\x80\x08\x88\xc0l#\x90C\xcc\xbf9\x0b[l\xe7\x13\x03\xf6\xb97\xded\x99L\x0e3\x00C\xfc\xc3\xf2\x12\x1b\x07\x8aP\xfcc\xe0\xc1\xd7!\xf1!5+\xa1\x01$\x80 \x13\x01\x11\x10\x01\x11\xa8>\x02\x12\x00\xab\xef\x98\xce\xf6=\xa2\x00\xe8\x87\x01\xc7V\xd7\xa4\xf7\x00\xcc\xab\r\x17\x1bde,\x02" \x02" \x02" \x02E\x10\xc8e\xf2\xd6\xb1\xa0\xc5\xfa\xf7\x8c\xda\xc5\xaf\xbb\xc9\x06\xf6$1b\xa3l\xe2\x1f\xfbA;\x90^\x13\xbeS\x0c,\xb9\n\x892e" \x02" \x02"P\x12\x02\x12\x00K\x82Y\x85\x8c#@\xf1\xcf\x0f\x03\x8e\xad\x9152\x98q1\x00\xc7\x95\xab\x8f" \x02" \x02" \x02" \x02e"@\x0f\xbf\xb6\xf9M6\xd2\x97\xb2\x7f\x7f\xed\x8d\xd6\xb3k\xc4y\xfe\xd1#\xb0\xc4\xc6\x029\x12e\x10\xe9\x02\xa4\x07\x90(\xfe1\xee\x9fL\x04D@\x04D@\x04\xaa\x96\x80\x04\xc0\xaa=\xb4\xb3n\xc7|\xeb\xae$\x1e\x80#C)\xabg\x0c@_\xea\xac\xc3\xa1\n\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88@m\x10\xc8"\xe6_kG\x83\xe5\xd29\xfb\xe2\x9bo\xb6\xdd\xdb\x87 \xc1\x95\xc5\xf3\x8f-C\x0e\x0f\xa1\x00\xf8\x0e\xa4\xeb\x918\x01\x88\xc4?@\x90\x89\x80\x08\x88\x80\x08T7\x01\t\x80\xd5}|g\xe3\xde\xd1\xfb/\xbe!\xc0ad\xc1\x91\xa1\x8c\x8b\x01(\xfdo6\x9e\x02\xaa\x93\x08\x88\x80\x08\x88\x80\x08\x88@\xad\x10\xe0\xac\xbe-\xed\xf5VW_\xef\xc4\xbf-\x0f\xf7\xc2\xf3\x0f{_\x86\xe9~Q\xaa\x8f\xfb\xf7a|\xfeo$y\xfe\x01\x82L\x04D@\x04D\xa06\x08H\x00\xac\x8d\xe3<\x9b\xf6r\xbc\x07`\xe4\xfa\x9c\x9fY$9\x98\xc5\x10`\xfc\x17y\t\xb3\t\xa5\xea"\x02" \x02" \x02" \x02\xb3\x97@\x1e~uM\xcd\xf5\xd6\xda\xd6d_\xbe\xf0\x16\xdbxo\x0f\x1d\xff0\xe1GY\xea\x8c\xa7\xc3N\xf0\xfb\x1a\xde?\x13~fM\xd4Z\x04\x04\x99\x08\x88\x80\x08\x88@\xf5\x13\xa0\xcb\xbbL\x04JA\xc07\xae\xe8\x01\xe8c\x00\xc6P.%\xc0\xbc\xd1\x03P#\x80c\xc0\xab,E@\x04D@\x04D@\x04D\xa0\x00\x02t\xf0kh\xae\xb3v\xc4\xfd\xfb\xca;o\xb5u7\xef\n\xc4?\xdf", \x8f\x08W\xe1\x10_\xf6{~\x89\xf4>$:AH\xfc\x03\x04\x99\x08\x88\x80\x08\x88@\xed\x10\x90\x07`\xed\x1c\xeb\xd9\xb2\xa7\xe3=\x00\xa3\xafS\xe8\x028:\x98\x82\x00\xa8\xd3;z\xc0\xcaQ\x04D@\x04D@\x04D@\x04&\'\x90\x83\xb4V\xdfPg\xf3\x16\xb5\xda7?x\x87\xfd\xe9\xea\xed.\xea^yF\xfd\xba\xf8~\x1c\xea{\x03\xd2k\x91\x86\x91(C\x96G\x8aD\xc12\x11\x10\x01\x11\x10\x01\x11(\x07\x01)$\xe5\xa0^\xbbeR\x9e\xe3\x13\xd8\xd8<\x00C\xfd\xcfF\xe1\x01X\xc7\xa6\x9eL\x04D@\x04D@\x04D@\x04D\xa0t\x04B\xf1o\xc1\xd26\xfb\xde\xc7\xef\xb6[~\xbe\xa5te\x1f\\\x12\xdb\x9dl\x11\xaeC\xa2\xf8\xc7\x99\x7f\xd9\xff\x91\xf8\x07\x082\x11\x10\x01\x11\x10\x81\xda" \x01\xb0\xb6\x8ew9\xf7\x96\r-\x7f\xbe\xf9I@\xa2o|\x85%\x0c\x0f\xa4\x9d\x07`\xf4\x05\x94\x13\xa1\xca\x16\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81YL\x00\xe2\x1f\x1f\xc0.X\xdef?\xbc\xe8^\xbb\xee\x87\x1b\x83\xca\x06\x11ZJ]q\x0e\xf1\xa5\xf8\xf7\x04\xd2\xcb\x91v \xf1\x7f.\x97\x89\x80\x08\x88\x80\x08\x88@\xcd\x11\xf0\x82L\xcd\xed\xb8v\xb8,\x04\xfc\xf9\x16\x9b\x07\xa0\xdf\xab\xd4p\xce\xc5\x99Q\x13\xcf\x13\xd1\xbb\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xc4K \x8f\x96\xde\xa2\xd5m\xf6\x8bK\x1f\xb4\xdf^\xf6\xa8+\x8c\x93~\x94\xc1\xdf\x8e"\x1f\xdb\x9d{\x90^\x85D%\x92\xe2\x1f=\x02e" \x02" \x02"P\x93\x04\xbc S\x93;\xaf\x9d.\x1b\x81\xa1\xb8KN\xa52\x96N\xe70\x13p\xdc%)\x7f\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\xa8q\x02\x90\xdb\xf2\x10\xfa\x96\xac\x84\xf8\xf7\xa5\x87\xed\x8aK\x1et@\xdc\x8c\xbf\xa5\x1f\x8e\xe1\xc5?\xc6\xfa;\x1f\xe9.$\x89\x7f\xee\x88\xe8E\x04D@\x04D\xa0\x96\tH\x00\xac\xe5\xa3_\xfa}\xf7M@\xc6_\xa1\xf9\x90}\xc1\x7f\x11\xbef\x929\xcb$\xb3V\x97\x88\xad\x88\x08k\xab\xacD@\x04D@\x04D@\x04D\xa0r\t\xe4\xe1\xe2\xb7xE\xbb]\xf9\xcd\xf5\xf6\xbf_`\xb8=4\xf2\xd0\x04+\xc3\xa4\x1f\xbe\xad\xc9\xd1&\x7f\x8ft-\x12g\xff\x95\xe7\x1f \xc8D@\x04D@\x04j\x9b\x80\x04\xc0\xda>\xfe\xe5\xda\xfb\x81\xd8\n\xe63_X*\x99A\xca"\x0e`]9\x1a\x9fA%\xf4*\x02" \x02" \x02" \x02UN \x0f\x95o\xd1\xea\x0e\xbb\xea\xdb\xeb\xedG\x9f\xb9\xdf\xedm\x1d\xd4\xbf2\x89\x7f\x14\x00\xd9\xbfy/\xd2\x15H\x14\xff2H2\x11\x10\x01\x11\x10\x01\x11\xa8y\x02\x12\x00k\xfe\x14(\x0b\x00?\x0486\xf7:\xd5W7\xdf\x1a\xf4C\x80#\xdfC_@\n\xf1\xffR\x14\x00\xebq\x8a\xfb\x85\x91\x97\xa6\x0cE@\x04D@\x04D@\x04D\xa06\t8\xcf\xbfU\xed\xf6\xfb\x1fn\xb2\xef}\xfcn\x07\xa1\x8c\xe2\x1f\x87\xf8\xb2_s)\xd2\'\x91\xe8\xf9\x17\x8e\x0b\xc1\'\x99\x08\x88\x80\x08\x88\x80\x08\x88\x80\xbbQ\n\x83\x08\x94\x9a\x80\x17\x00c\xf3\x00\xcc\x8e2\x06 f\x02v\xfa\x9f\x14\xc0R\x1f`\x95\'\x02" \x02" \x02"P\xbd\x04\x02\xcf\xbf\x0e\xfb\xe3\xffm\xb6\xef~\x94sl \xe6\x9f\x0b\xbbR\x966\x17\xbd\xfc\xe8\xed\xf7?H\xefF\xa2\x10HA\xb0,\x95A\xb92\x11\x10\x01\x11\x10\x01\x11\x98\x95\x04x\x83\x94\x89@\xa9\t\xc4\'\x00\x86M=\xc6\x00L"%\x1a\x9c\x02X\xea\xfdSy" \x02" \x02" \x02"P\x9d\x04\x10\xdco1f\xfb\xbd\xe5\xe7\x9b\xed\xeb\xef\xbf\xc3\xed\xa3\xf3\xfc\xc3p\xe02\x18\xc5?z\xfb\xfd\n\xe9\x8d\xe3\xca/Ke\xc6\x95\xaf\x8f" \x02" \x02"0\xeb\x08H\x00\x9cu\x87\xa4\xaa+\xe4\x1bc\xfdq\xefe:\x95\xb3\xf4h0\t\x88\x1e\x00\xc7M[\xf9\x8b\x80\x08\x88\x80\x08\x88\x80\x08\xd4\x02\x81\x1cD\xbe\x05+\xda\xec\xf6\xdfn\xb7\xaf\xbd\xefv\xb7\xcbe\xf6\xfc\xa3\xf8w#\xd2\xeb\x90F\\\x854\xf47\xc4\xa07\x11\x10\x01\x11\x10\x01\x11\xd8\x9f\x80\x04\xc0\xfdy\xe8\xbf\xd2\x10\xa0\x00\xe8\xc5\xc0\x88K\xdc\x97mr4c\xf5\xf5\x98\x85.\xe2\x12\x94\x9d\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xd4\x1c\x01x\xfe-\\\xd6f\x7f\xbaj\xbb}\xf9\x9d\xb7\xba\xdd/\xa3\xe7\x1f\x87\xf8R\xfc\xfb#\xd2+\x90\xf6"\xb1_\xa3f\x1f \xc8D@\x04D@\x04D`"\x02\x12\x00\'\xa2\xa2eq\x13\xa0\x00\x18{`\xe6\x0c\xe2\x00\xf2\xa9\xb4\x9a\x82q\x1fN\xe5/\x02" \x02" \x02"P\xcd\x04rYx\xfeA\xfc\xbb\xef\x86\x9dv\xe9\x85\xa1\xf8W\xbe\x98\x7f\x14\xff\x18\xf3\xef!\xa4\xf3\x91\xbc\xf8\x17{\xdb\x12e\xc9D@\x04D@\x04D\xa0b\tH\x00\xac\xd8CW\x91\x15\xf7Oe)\x00\xb2\xf1\x16\xb9\xe1\xe1t \xfa!\xe7\xc0\x03\x10\xa7\xb8/5\xf2\xd2\x94\xa1\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08T7\x01\x0e\xfb\x9d\x0f\xf1\xef\xa1[\xbb\xec\x92\xb7\xde\xecv\xb6\xcc\x9e\x7f\x14\xff6 \xbd\x12i\x1b\x12\xff\x97\xf8\x07\x082\x11\x10\x01\x11\x10\x01\x11\x98\x8c\x80\x04\xc0\xc9\xe8\xe8\xbb\xb8\x08\xf4!c/\x00F.\xcf\xd5\x87gur\x041\x0018$\xf2\x02\xe2\xa2\xa2|E@\x04D@\x04D@\x04D`\x16\x11\xc8\xc2\xf3o\xce\xfc&\xdb\xb2\xae\xd7\xbe\xf0\x0f\x81\xf8\x97(\xbf\xe7\xdfV z\x15\xd2z$\x8a\x7f\xbeM\x89\x8f2\x11\x10\x01\x11\x10\x01\x11\x10\x81C\x11\x90\x00x(2Z\x1e\'\x81ad\x9e\x8a\xb3\x00\xe6\x9d\x1c\xcaH\xfc\x8b\x1b\xb2\xf2\x17\x01\x11\x10\x01\x11\x10\x01\x11\xa8Z\x02\xcd-\r\x96N\xe5\xed\x8bo\xbb\xc92\x99\x9cQ\xfc\xa3G`\x19\x8c\x1e~\x14\xfb\xf6 q\xd8\xef}\xe1\xff\x12\xff\x00B&\x02" \x02" \x02\x85\x10\x90\x00X\x08%\xad\x135\x016\xd6\x06\xa2\xce\xd4\xe7\xe7\xc7\x80\x0c\x0f\xa4\xdd3aD\x01\x94\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\x14A \x93\xc9\xdb\xbc%-\xf6\xf3K\x1f\xb2\xfe\xee\xa4q\xd8o\x19\xc5?\xf6Y\x18B\x86\x9e\x7f\xb7 a\x8c\x87<\xff\xc0@&\x02" \x02" \x02\x05\x13\x90\x00X0*\xad\x18\x01\x01\xff\xc8\x98\x1a\x1d\x1bq\xb1\xda\xf0`\n\x01a\xf2\x88\t\x18k1\xca\\\x04D@\x04D@\x04D@\x04\xaa\x8a\x00\'\xfd\xe8\x98\xd3hO>\xdeo\xbf\xff\xd1\xc6`\xdf\xca\xf3D\x95mF\xb6\xe4\x92H\xafG\xba\x01\x89\xe2_\x06I&\x02" \x02" \x02"P\x04\x01I#E\xc0\xd2\xaa\x91\x11\xa0\x07\xa0\x17\x00\xbd(\x18Y\xe6>\xa3\x91\xfe\x8c\xd5\xc5\x96\xbb/E\xef" \x02" \x02" \x02"P]\x04\xf2\x18\xe6\xdb\xda\xd9hw]\xb3\xc32)\x0c\xfd\xad\xaf3.+\xb1\xb1@\xca\x8e\x14\xfb.@\xfa?$\x89\x7f\x80 \x13\x01\x11\x10\x01\x11\x10\x81\xe9\x10\xe0MT&\x02\xa5&\xc0\xa7\xb9\x9c\x08$\x1e\x0b\xc7\x00\x0f\xf7\xa7\xd0XE\x11r\x01\x8c\x87\xb3r\x15\x01\x11\x10\x01\x11\x10\x01\x11\xa8J\x02\xf5\x8d\tK\'\xb3v\xdfuO\xba\xfd\xcb\x97\\\xfbsa\x9c\xbd\xcf\xe1[Q\x89\x9f"I\xfc\xab\xca\xb3M;%\x02" \x02"P*\x02\xf2\x00,\x15i\x95s \x01\xef\x01x\xe0\xf2\xc8\xfe\x1f\xeaO[\x1e-V\x9d\xe4\x91!UF" \x02" \x02" \x025@ \x91HX\x161\x00\xd7\xdf\xdd\x1d\xecm\xe9\x15@J\x8e|\x8c\xfb.\xa4\xcb\x904\xdb/ \xc8D@\x04D@\x04D`&\x04\xa4\x8d\xcc\x84\x9e\xb6\x9d\x0e\x01\xff4\xd7\x0b\x80\x91?S\xf6\x19\x0e\xf5\xc2\x03\x90\rV\x9d\xe5\xd39N\xdaF\x04D@\x04D@\x04D\xa0\x06\t\xe4 \xbb\xd57\xd6\xd9`o\xd2\xf2\x88\x05H+\xb1\xfeG\xe1\x8f\xad\xb7\x8f!]\x8a\xd4\x88\xc4\xf01\xbe\x89\x87\x8f2\x11\x10\x01\x11\x10\x01\x11\x10\x81b\tH\x1a)\x96\x98\xd6\x8f\x8a@oT\x19\x1d\x94O\xd8<\x1c\xc2\x10\xe0\\\x1ez\xa3\x97\x1c\x0fZQ\x0bD@\x04D@\x04D@\x04D@\x04\x0e$\x90H\xd4\xd9\xf0@\xfa\xc0\xc5\xa5\xfe\xff\x1c\x14\xb8\x14\x89\x15\xa1\x07\xa0L\x04D@\x04D@\x04D`\x06\x04$\x00\xce\x00\x9e6\x9d\x16\x01/\xc7y\x010\x86\xa7\xb9A\x96C\xbd\x18\x02\x8c\x80\xd5\x89:_\xe4\xb4\xea\xab\x8dD@\x04D@\x04D@\x04D\xa0\xa6\x08p\x04EcS\xd947\xf6O\xd8\x98{\x01\x12\'\xfeX\x89D\x0f\xc0\xb2U\x08e\xcbD@\x04D@\x04D\xa0\xe2\tH\x00\xac\xf8CXq;\xe0\xd58/\x00\xc6\xb6\x03\xf4\x00tcV|\x89\xb1\x95\xa4\x8cE@\x04D@\x04D@\x04D\xa0:\x08\xb0s\x90\xc3\xd0\xdf\xce\x05\xcd\xe5\xdc!\xb6\xde8\xfb\xef\x99H?G:\x0cI" \xc8D@\x04D@\x04D`\xba\x04$\x00N\x97\x9c\xb6\x9b.\x01/\xc7\xed\r3\x88\xdc\x03\xd0\xc7\xa9a\xe35\x9b\xcdY\x9d<\x00\xa7{\xac\xb4\x9d\x08\x88\x80\x08\x88\x80\x08\x88@\xad\x11@\xef \x93\xc9YSK\xbd-9\xac\xc3\xed}\x99\xdaR\x9c\xf5\x97\xa2\xdf\xd3\x91~\x8c\xb4$\xfc_\xfd\x17\x80\x90\x89\x80\x08\x88\x80\x08\x88@\xb1\x04t\x03-\x96\x98\xd6\x8f\x8a\xc0@\x98\x91\x17\x04\xa3\xcaw\xbf|8\x13p=\xcfr\x86\x93\x96\x89\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08LI \x0b\x01\xb0\xb19aO=\x9b!\xf8\x10N\xb9|\x83oY2=\x01\xcf@\xfa\x19\xd2B$?I\x08>\xcaD@\x04D@\x04D@\x04\n% \x01\xb0PRZ/j\x02\xc3a\x86l\xd8E\xee\x05\xe8+\xcb\x99\x80\x13\r\t\xe9\x7f\x1e\x88\xdeE@\x04D@\x04D@\x04D\xa0\x00\x02\xd9L\xdeNy>\xc3\xefAq\xc3\xe72\x0e\xa8\xa0\' E\xc0g#]\x8e\xd4\x8a$\x11\x10\x10d" \x02" \x02"P\x0c\x01\t\x80\xc5\xd0\xd2\xbaQ\x10\xf0b\xdf\x102cc.f\x0f\xc0\x14\x9eZ\xb3\x08\xb9\x00Fq\xf0\x94\x87\x08\x88\x80\x08\x88\x80\x08\x88@\xf5\x13H\xd4%\xac\xbfg\xd4Nx\xd6b;\xfa4:\xdd\xa1\xc1VF\x05\x10\xc5{\x11\xf0/\xf1\x99" \xff\x97\x89\x80\x08\x88\x80\x08\x88\x80\x08\x14A@\x02`\x11\xb0\xb4j\xa4\x04(\x002\xc5j\xf4\x00\xaco\x80\x00\xe8e\xc7XKS\xe6" \x02" \x02" \x02"P\xf9\x04\xa0\xffY>[g\x99d\xce\xce\xfb\xe0In\x87r\xb9\xb2z\x01\xb2\x0e^\x04|\x15>_\x82\xc4\xa7\xbb\x1cI\x12\xeb\xc3d\xe4/\x13\x01\x11\x10\x01\x11\x10\x81\xaa \x01\xb0*\x0ecE\xed\x84\x97\xe28\x04\xd8\x0b\x80~Y\xe4;2\xd4\xc7\x18\x80\x12\x00#\x07\xab\x0cE@\x04D@\x04D@\x04\xaa\x9a@\x02\xd2Z\xff\xde\xa4\xf3\x00|\xd9\x85\xc7\xbb}\xe5Dk\xe5u\x04t\x82\x1f\'\x06\xb9\x10\xe9\xff!\xf1\xb3\xfa3\x80 \x13\x01\x11\x10\x01\x11\x10\x81\xa9\x08\xe8\x869\x15!}\x1f\x17\x01\x8a\x7f#qe\xee\x1b\xa7>\x06`l\nc\\;\xa0|E@\x04D@\x04D@\x04D\xa0\xdc\x04\xf0\x10\xb5\xb7+i/\x7f\xe7\t\xf6\xac\x97\x1d\xeej\x13\x88\x80es\xbac\xc1\xec\xbfP\xf8\xfb4\xd2y\xe1gz\x02\xcaD@\x04D@\x04D@\x04&! \x01p\x128\xfa*V\x021{\x00\x06\r\xd3\x81\xbd\x18\x02\x8c&!\x1b\xab2\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x10\x81\xc2\t\xb0\xa3\x90K\xe7m\xa0\'io\xfe\xec\xd3\xed\xc5o>\xd6m\x9cG\xc3*\xe1b,\x17\x9eW\x84k\xb2\x91\xe7\xd3\xd7\xf0\xf9t$\n\x82\x12\x01\x01A&\x02" \x02" \x02\x87" \x01\xf0Pd\xb4<.\x02^\x8a\x1b/\x00F^\x96\xf7\x00\xec\xdf3\xeaf\x01\x8e\xbc\x00e(\x02" \x02" \x02" \x02\xb5@\x00\xbd\x85L:\x87IA\x92v\xde?\x9fdo\xb9\x98z\x1b\x84\xc1,\x9at\xbe\xc1Uz\x0e\xec\xc3\xb0M9\x0f\xe9r\xa4\xa5H\x14\x01\x83\'\xc0\xf8 \x13\x01\x11\x10\x01\x11\x10\x01\x11\xd8\x9f\x80\x04\xc0\xfdy\xe8\xbf\xd2\x10\xe0y\x97F\x1a\x88\xad\xb8\xf0\xcc\x0e<\x00\x13\x9a\x03$6\xd0\xcaX\x04D@\x04D@\x04D\xa0\xda\tp\x06`z\x02\xee\xd9>l\xcf~\xe9a\xf6o\xbfz\x81-;\xb2\xb3\xdcC,\xd8\xda\xa3\xe8G\xb7\xc4\xef"\xb5"q\x99D@@\x90\x89\x80\x08\x88\x80\x08\x88\xc0\x81\x04B\x99\xe4\xc0\xc5\xfa_\x04b#\xc0\xa7\xb5\xfe\xbc\x1b\x0cK\xf1^\x81\x91\x17:<\x90\xb2l6g\x9c\x07D&\x02" \x02" \x02" \x02"0M\x02NZ\xab\xb3\xee\x1d\xc3\xb6\x14\xe2\xdf\xc7\xaf\xf83;\xf5\xf9+\xc72+\x933 \x87\xfdf\x90\xfe\x02I\x93\x82\x8c\x1d\r}\x10\x01\x11\x10\x01\x11\x10\x81\x83\tx!\xe6\xe0o\xb4D\x04\xe2#\xe0\xe5\xb8\xbd\xf1\x15\x11\xe4\x9c\x1a\xce\xda\xe8P\x16qjt\xaa\xc7\xcdZ\xf9\x8b\x80\x08\x88\x80\x08\x88\x80\x08T?\x01\xc6\xfe\xeb\xdb=j9\xc8n\x17~\xf5L{\x19&\x08\xa1\xb9\xc9A\xca\xd3\xdc\xa2\x08\x98C\xfa\x08\xd2\x0b\x91\x14\x0f\x10\x10d" \x02" \x02"p \x81\xf2\xdc\xa6\x0f\xac\x85\xfe\xaf5\x02\xde\xe3\xaf\'\xdcq/\x08F\xc7\x81\xcd@\xd8\xe8p\xda\x92Ci\xabo\xc00`_j\xf0\x95^E@\x04D@\x04D@\x04D@\x04\xa6A\xa0\xbe\xa1\xce\x92\xa3Y\xeb\xdf=b\x7f\xf3\xbe\x13\xed\x1f>}\x9a\xcb%\x8f\xf6W\xa2\xf4\xc3.|;\xb2\x01\x95\xf8*\xd2\n$\xb6\xfa\xf8?\xfb:S%n?>\xe1_\x99\x08\x88\x80\x08\x88\x80\x08T\x1f\x01\t\x80\xd5wL+i\x8f\xf6\x84\x95\xf5\r\xb7\xc8\xea\xee\xb5\xbeQz\x00"%4\x13pdl\x95\x91\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08p\xc8/\x1f\xaevm\x1e\xb2s\xce[c\xef\xfa\xea\xb3\xdc\x03\xd7\\\x0e3\x04\x97^\x04d\x9f\x86\x9e\x7fk\x91\xbe\x80\xc4G\xc1\x1c\x1a\xcc\xf7\xa9\x12\x9b\x8d>\xe1\xa3\x13\x0e\x1b\xf1N\xcfB\xe6\x1by;\x15y\xcaD@\x04D@\x04D\xa0\xe4\x04xc\x93\x89@\xa9\t\xb0!\xc5\x86\xd6\xf1H/\r\x0b\x8f\xb4qU\x17\xb6\xd58C\xdds\xfe\xfa\x08k\x9b\xdbd\x99d\xc6\xeaJ\xdf \rwOo" \x02" \x02" \x02"P}\x048A\xc8Po\xd2\xd6>m\xa1\x9d\xfc\xdc\xe5v\xcf\xb5;\xf0\xf05ls\xb1\xb5W:\xa3XG\xb1\xef$\xa4\xddHs\x90\xfe\x12\xe9iHOG\xa2\x9b\xe2\x89H\x87#q\xd6`~\xcf\x89CZ\x90(\xf8\xb1\xb6\xe3EC\xfe\xef\xf7\x80}&\xb6U}{\xd5\xbfc\x91L\x04D@\x04D@\x04*\x83\x00]\xe3e"P.\x02\xf1\r\x01\x0e\xdbk\x99T\xce\x92\xf4\x00\x94\xf0W\xaec\xacrE@\x04D@\x04D@\x04\xaa\x9c\x00c-s\x86\xe0\xc3\x8e\x9bc\xff\xfc\xc3s\xec\xe27\xdcd{0YH\x1d$9\x0e\x0b.\xa1Q\x04\xa4h\xf7\x95"\xca\xa4X\xc8Q)\xbb\x90\xb6"mA\xda\x86\xf4x\x986\xe1=\x8dt\xa0\xb1\x1f\xc5\xb2\xe8y(\x13\x01\x11\x10\x01\x11\x10\x81YO@\x02\xe0\xac?DUYA\xff4\x95\x8d-~\x8e\xf5)\xea\x08\xe2\x0064*\x06`U\x9eI\xda)\x11\x10\x01\x11\x10\x01\x11\x10\x81YA\x80\x93\x83\xec\xdd5j\x8bV\xb4\xdb\xc7\x7f\xfa<\xfb\x87t-\xd2\x9dH\x1fC\xa2\x07!\xf3\xa2x\xc8\xf5|\xdc@|\x94\x89\x80\x08\x88\x80\x08\x88@\xf9\tH\x15)\xff1\xa8\xe5\x1a\xf4c\xe7\x93q\x03\xe8\xeb\x1eE\xc3S\x0fb\xe3\xe6\xac\xfcE@\x04D@\x04D@\x04D\x80\x04\x12\r\x98\x18\xa4/eM\xad\r\xf6\x9eo<\xdb\xe6,h\xb2\x1c\xa6\x0c\xae\xb0\x98\xcc^\x18d\x7f\xc9\'.\xa3\xb8\xe7\xbd\x05;\xf0\x99\x13\x8c\xfc+\xd2\x03H?G\xfa;\xa4v$\xae#!\x10\x10d" \x02" \x02\xb3\x83\x80\x04\xc0\xd9q\x1cj\xad\x16l\x0c\xd18\xc4\x82\xb1Ub\xb5\xfe=\x14\x00s\xe5\x18~\x12\xeb~)s\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\x98\xad\x04\x9c\'`O\xd2\xe6.n\xb1\x0f~\xef\x1ckj\xa9\xb7\x9c\x1b\x0e\\\xf1\x0fe\xb9\x03\xde[\x90mZ\xef!H\xaf\xc1\x97"]\x8et7\xd2\x87\x91\x96#I\x08\x04\x04\x99\x08\x88\x80\x08\x88@\xf9\tH\x00,\xff1\xa8\xe5\x1a\xb0A\xd4\x15\x02\xf0\xa2`\xe4<\xfa\xba\x93\xae\xc1)\x050r\xb4\xcaP\x04D@\x04D@\x04D@\x04\x0eI\x80\x9e\x80\x1c\x89\xc1a\xc0\xef\xfd\xe6Yn=\x17\x13p\xf6\x0e\x07>\xe4\xbe\x1c\xe2\x0b\x8a\x81\xde;\x90\xab\xb0mKA\xf0\x18\xa4\x8b\x90\xd6!\xfd\x1b\xd2\x12\xa4\xf1B \xfe\x95\x89\x80\x08\x88\x80\x08\x88@i\tH\x00,-o\x95\xb6?\x81\xf1\x02\xe0\xfe\xdfD\xf0_\x9e\xcd/X\x7f\xf7H\x10{Fg{\x00D\xaf" \x02" \x02" \x02"P"\x02\xf4\x04\xec~r\xd8Nx\xf6\x12{\xeb\x178g\x06\xc6\xc5b8p\xf5h\x80\xfb\x81\xf4q\xff\xbcW\xe0\x02|\xfb\x11$\xc6\t|\x1fR\x0b\x12\xdb\xbf~=|\x94\x89\x80\x08\x88\x80\x08\x88@i\x08\xf0\xe6#\x13\x81r\x10\xf0\xe3?\xceE\xe1\xa7 \xb1\xa1\x14\xa9DW\xc7\x96%\xfc\n9\x13\xdd9\xaf>\xc2\xd2\xa3\xa1"X\x8e\xbdU\x99" \x02" \x02" \x02"P\xa3\x04(\x02\x0e#&\xe0\xf1\xcf\xc4\xa4\xbah\x9b=r\xfb\xee\xd91M\xae\xf3\xdf\xab\x83\x18\x89\x0fN\x91\xe4\xfb\x8c\x0f\x12s\xf0\xc9\x0f\x11\x9e\x8fe/D:\x1bi\x07\xd2\x06$\x1a\xdb\xbe\xb1\x8d\x82q%\xe8E\x04D@\x04D@\x04B\x02\x91\n.\xa2*\x02E\x10\xf0\xcd\xab\xddElS\xdc\xaax\xbaL\xeb\xf7\x93\x80\xe8l/\x8e\x9f\xd6\x16\x01\x11\x10\x01\x11\x10\x01\x11\x10\xc6V\xb4\xe0\x00\x00@\x00IDAT\x81\x88\x08\xd4A\x04\xdc\xb3c\xc4^~\xe1\tv\xd2\xd9K\x9d\xea\xe5\x84\xb7\x88\xf2\x9fV6N\x9e\xcbc\xa4\x08>0\xb1\xed\xc8e^\x10\x1c{\x9fV\xee\xdc\x88\xed]:\\x\x8f@\n\x80W"qXpS\xb8\\-T\x80\x90\x89\x80\x08\x88\x80\x08\xc4O\x80\xc1je"PN\x02%\x89\x01\x18\x0c5I\xa0M\'/\xc0r\x1el\x95-\x02" \x02" \x02"P\xbb\x04r\xd9\x9c\r\xf6\xa70\x14\xf8\x0c\xfb\xc8\x8b\xaf\xb6\xbe\xaeQ730\'\x07\x89\xdb\xea\xea\xeb,\x9f\xcd\xdb\xfc\xbfz\x8a5\x1f\xbb\xd82\xbb\xfa-;\x94\xb2\xdc`\xd22}I\xcb\xf6\x8eX\xa6g\xd8\xb2{\x86\x02Ap\xa2\n!\x0f\xd7\x94\x0c\x1f2O\xb4\xca!\x96y\x91\x8f\xc3\x7f\xd9\xff\xe2\xb0\xe0g#\xbd\x1d\xe9\x11$.\xcb \xc9D@\x04D@\x04D 6\x02\x12\x00cC\xab\x8c\xa7 \xc0\x86\x10\xd58\xef\x01\x18y\xcbo|\xdb,9\x9c\xb1\x04\x1am9\xce;\xec\x9b`STP_\x8b\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08DG\x80^\x80#\x83\x19\x9b\x8f\x99\x81/\xfc\xd2\x99v\xd1\xf9\xd7\x07\x13\xb5EW\xc4!s\xf2\r\xcd\xfa\xce&k;i\xb9eV\xce\xb1D\x13\xbaB\rl\x18\xc2\x0bp4c\xb9\x11\xa4\xd1\xb4e\xfbG-\xfdd\xbf\xa5\x1e\xef\xb6\x91\x8d=\x96\xed\x1evq\x0b\r\x02\xe2\x98\xb9!\xc3\xf8\x7f\xdc\xa2\xb1\xef\x0e\xfd\x81\xde\x80\xdc\x82m\xe0\xe7"\xfd\x1e\xe9\x8dHW!\xb1_\xe6\'\n\xc1G\x99\x08\x88\x80\x08\x88\x80\x08DK@1\x00\xa3\xe5\xa9\xdc\n\'\xc0\xd6\x16\x1b?\xab\x91\xfe6\xdc\x8c\xcbb\xb13_v\x98\xb5\xcfk\xb6t*W\xadA\xa7c\xe1\xa6LE@\x04D@\x04D@\x04D J\x02.\x1e D\xc0\xc3\x8f\x9fg\x9c%\xf8\xe1[K\x14\x0f0\x1fD\x9fIn\xdek\xedO_e\xf9az\xff\xa5,3\x90\xb4<<\x01\xf3i4K!\xea\xd5\xb74X\xfd\xfcVkZ=\xcf\xdaN^es\x9fw\xb4u\x9ey\xb85\xad\x9ag\xf5\xedM\x81H\x88m\xf73z\x06\x16.\x04\xb2"l\xf3R\xec\x9b\x83\xf4*\xa4\xadH\xf7 qy\xe19ae\x99\x08\x88\x80\x08\x88\x80\x08\x14J@\x02`\xa1\xa4\xb4^\xd4\x04\xd8\xf8a\x03g9\xd2\xeb\x91|\x83\'h\x9daA\x94v\xda\x0bW\xda\xe2\x95\xed\x96\xc2S\xdd\xb2\xc7\x9b\x89r\xc7\x94\x97\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08T\x18\x01\x8a\x80\xc9\xe1\xb4=\xe5\xd9\xcb\xec\x81\x9b\xbbl\xef\xae\x117\x14x\xfc\xe8\x8d\xb8v)\x9f\xccX\xe3\xa2vk9z\x89\xe5S\x19\xab\xabG\x13\x14\xf5q\x06\x0f\xbf|&\xe3\x96s\xbd<\xda\x8d\xb9\x11\x0c\x1fi\xac\xb7\xa6\xc3\x17X\xfb\xa9\xab\x82\xf4\xb4\x15V\xd7\xdc`\x99\xae\x81@8\xf4\x92\x9d\xf3\n,\xb8\xe6l\xfb\xf2ax#\xd2\xcb\x90\xf6 \xdd\x81\xc4\xfe\x99\xcf\x11\x1fe" \x02" \x02"\x10\r\x01\t\x80\xd1pT.\xc5\x13\xf0\x82\x1fgE\xa3\x07`s\x98E,\x02\xe0\x89\xcf^b\xab\x8f\x9d\xef\x1a\x9b\x1c~"\x13\x01\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11(\x1f\x81\\&o\xf5M\t;\xee\xf4%\xf6\xfb\x1flt\xf3o\xc4^\x9b\xd0S/\xb3{\xd8\xda\x9f}8\xa2\xeeQgc\n\xdb\x86|\x1b\x9b\xf8\x03\xff\xf8\xcfX/?\x02\x8fAx\n\x1a\x04\xc3\x86\xf9m\x18F\xbc\xcc\xe6\x9e}\x945.\xef\xc0\xb0\xe1\x8ce\xf6\x0c\xef\xab>\xdb\x9a\x85Ix,\xd1W\xe0\xc5\xf8\xbc\x1d\xe9.$\x89\x80\x80 \x13\x01\x11\x10\x01\x11\x88\x96\x80\x04\xc0hy*\xb7\xc2\t\xf8\x06O\x1b6\xa1\x00\xc8!\x10\xbe\x01Tx.S\xac\xe9\x1f\xc4\xae=e\xa1\x1d\xf7\xf4E6<\x90vO\x98\xa7\xd8L_\x8b\x80\x08\x88\x80\x08\x88\x80\x08\x88\x80\x08\xc4H\x80\x0fd\x93\xc3Y[qd\xa7\xd57&\xec\xa1[\xbb\xcc=\xa4-L8\x9b^\xcd\xc2\xbcsCIk9l\xbe5c\x98o\x0e\x9e\x88c\x1e\x80\x87\xca\x95\xadV\x8azL\x98\xb0$\x9fJC\x10\x84\x87 >\xb7\xacYh\x1d\xcf8\xccZ\x8e_\x86\xd8\x81\x98Pd\xf7\xe0>\xf1\x8f\xdbMm\\\x8b5cz\t\x12\'\x05Y\x87$\x11\x10\x10d" \x02" \x02\xd1\x11\xa0\x17\x96L\x04\xcaA\xc07\xef\xfaQ8SL\x16\xb4\xbc\xfav\'\xad\x1e\xa1\x95K1\xb4$\xa6\x1dQ\xb6" \x02" \x02" \x02"P]\x04 q\xf5t\x8d\xd8_\xbc\xe1\x18[y\xf4\x1c\'\xa8qxp\xac\x16\xe6\xdf\x7f\xdd\x06\xa7\xb8\xd1\xa3\xaf(c\xf5\x12\xd8\x86\xf9\xa0aI\xcf\xbf\x0c&\riZ=\xd7\x96\xbc\xfdL[\xf6\xae\xe7X3DAgl\xed\x16\xb6?\xac\x04s\xa6\xe8\xf7M\xa43\x90\x18#\xb0\xc8\xcaa\x0b\x99\x08\x88\x80\x08\x88\x80\x08\x1c\x82\x80n*\x87\x00\xa3\xc5%#@\xf1o ,\xcd\x8b\x82\x91\x15\xee=\x00\xfbv#\xb6\x0c\x9e.\xcbD@\x04D@\x04D@\x04D@\x04f\x07\x81\x044/N\xd0F\x99\xeb5\x1f:\xd9U*\x07\xaf\xbaX-\xcc\x7ftc\xb7\xa5\xb6\xf5Z\xa2\x15O\x88\x19\x89o\xba\x16\n\x88\xb9\x81Q\xcb\xee\x1d\xb6\xa65\x0bl\xf9?\x9dc\x0b_sJ\x10_\xd0\xef\xcf\xd4\xba&\xd7\xf0\x13\x83|\x07\x9fW"9\tq\xbaU\xd3v" \x02" \x02"0\x9e\x80\x14\x91\xf14\xf4\xb9\xd4\x04x\xfeq\x1a\xb5\xbe\xd8\n\x0e\xcf\xf0\x81\xee\xa4%\xd0@\x8b\xb9I\x19\xdbn(c\x11\x10\x01\x11\x10\x01\x11\x10\x01\x11\xa8F\x02\xf5\x88\xcb\xd7\xb7{\xd4\x9ez\xcer;\xe3\xafV\xbb]L0V_\x9c\xe6\xbd\x00o\xd8d\x89\xb6\xa6h\x86\x88\xd0+\x10O\x9es}\x18\x06\x0c1\xb0\xf3\xac#m\xc5\'^h-k\x17\x05{RX#\x94\x1e\x80\x19\xa4\xe3\x90\xbe\x1cl\xa8W\x11\x10\x01\x11\x10\x01\x11\x88\x86\x80\x04\xc0h8*\x97\xe2\t\xb0\x19\xc4F\x0e\xcd\x0b\x80\x855\x8d\x82m\x8az\x1d\xeaOY\x12\xb1Z\xea}\x89Em\xad\x95E@\x04\xa6E\x00\xbfh\x0e\xbb\xcf\xc1\xb3"H9\xbc#e\'H\x19,+4M\xb4=\xf3\x1d+\x07\xb5\x8d\xedj2-\x12\xdaH\x04D@\x04D`2\x02\xb8f\x0f\x0f$\xed\xe5\xef<\xc1\x1a\x1a \xa2a6\xdeX\'m\x0b\xef\x11#\xf7mC\xcc\xbeax\x01b"^\xef\xa97Y=\x0b\xf9\xceM4\x82\xa1\xc1\xdd\xc3V\x0fqq\xd9\xbb\xcf\xb29/8f\xdf\x96Sk\x9bpIt>\x89/\xc7\xfb\x1b\xc3\xcf\xea\xb3\xed#\xa8O" \x02" \x02\xd3$\xc0\x1b\x8cL\x04\xcaE\xc0w\xd1\xbb\xc3\nL\xdd$*\xb6\xa6\xe1\x90\x8e\x91\xa1\xac\x8d\x0ef-\xd1\x00/@\x0c\xae\xf0C\x83\x8b\xcdN\xeb\x8b\x80\x08\x1cL\x80"_\x1e\xea\x9b{\xe7g$\x8a\xed\xf4\xba\xadg\xc2\x9d\x86\xde\x1c\x89D\xa3\xeb\xd09\'\tx_\xf0wX\x87\x97:vk\xdc\xaf\x1f\xeb\xf8\xab\x80\x7f\xf7\xc5\x85W\x8b\x1c2\x0f\xca\xc3\x02\xfc\xbe\x832\xf3\x96Eg1\x10\x16)6b\x1d\x88\x84\x19\xf8P\xf0\x9d\x97\x01W\x04^\xeaP\x98+\xcf\xe7\xabw\x11\x10\x01\x11\x10\x81\xb2\x13\xe0=bpo\xdaV\x1e5\xc7^\xf0\xfa\xa3\xed\xb7\xdfz4\x90\xc0\xe2\xaa\x19o\x1e\xb8\xe1\xe4\x92Y\x1byh\'\xbc\xf5\x8e\xb0\x1cf\xf9\roF\xd1\x94\x8a}\xe2\xac\xc19\x84\xa0\x99\xff\x8a\x93\xacaN\xab\xf5\\q\x1fnLa1\xe1}m\x92\xc2\xb8\xc6\'\x91~\x83\xb4\x13\x89\xb7\xb2\xb0e\x8bO2\x11\x10\x01\x11\x10\x01\x11(\x92\x80\x04\xc0"\x81i\xf5X\x08t\x85\xb9\x1e\xd8\xe5\x9fqa\xbem52\x98\xb2\x91\x81\x9454%,\r/\xa3@l\x98q\xf6\xca@\x04j\x8a@\x9e\x82\x1b\xf7\x98\x1fB\x83|g\xf5\xcd\xf5\xd6\xd4\xdc`\x8d-|\xaf\x87\xe0\x87\xdf\x19:U)\xa4\xf4h\xd62\x88\xef4\xdc\x9f\xb1\xd4h\xda\x06z\xf1[\xecO\xc3\xd3#c\xc3}x\xc7P\xa9\x11\xcc\x02\x99\xcd`]\xac\x97\xc16\x99\xb4\xff\xe5\xfaR\x82w\x0e\x13k\x9b\xd3h\xcdm\x8d\xee\xbd\xad\xa3\xd1\x9aZ\x13\xd6\xb9\xb8\xc5\xe6/l\xb5\x96\x8ezkhD\xf9\xe8l5a\x9d\xce\xd6zkni\x80SG\xde\xd5\x83\xf5I\x8e \x7f\xbc\x87{\x12dLQ\x10\x9f$\x0c\x068\xf4*\x02" \x02\xe5 P\x0f\xcf?N\xda\xf6\xa27\x1ec\xd7\\\xbe\x11\xf7\x8e\xac{PD\xad.\x16\x0b\xf3\xed\xbf\xf9qk?\xe3p<\xb9\xa2\xbe\x16\xb1\xf1\xa9\x16\x1ePe\xf7\x0cY\xe7\xb9G\x995\xd5Y\xcf\x8f\xee\xdd\xef\x16t\x88\x12Y\x19\xde\xacV }\x08\xe9]H\x91\xb7\x93\x91\xa7L\x04D@\x04D\xa0\x86\x08H\x00\xac\xa1\x83=\x0bw\xd57\xe9v\x85u\x8b\xada3:\x90\x86\x00\x98\xb6y\xcbZ-\x85\xa1\xc0\xf03\x9a\x858T%\x11\x98]\x048\xa4\x96\x9e}|\xa7\x17_cc\x8354\xc3\xa3\x0fBz\x03\xc4\xb8F\xbc\xd7\xe1\xbd\xb7k\xd4\xba\xb6\x0cY\xcf\xcea\xeb\xd91b\xdd;\x06\xf1y\xd4\xc5tb\\\xa7^\xc4\xe0\x1c\xc10\xfcRX#\xc4\xbf\xf6\x05\xcd6oQ\xb3-\\\xd1j\x0b\x97\xb7\xdb\x82\x95m\xb6`9\xd2\xd2V[~d\x87-<\xa2\x13\xc3\x8d\x03\xc1\x91\xc3\xcc(<\xa6\x93\x10\x1fS\x19x\x12\xd2[\x11\xbd,\xa8\x81\xf4T\x94\x89\x80\x08\x88\x80\x08\x94\x8e\xc0(\xdah\x8bq\xcd~\xe9;\x8e\xb3\x9f\xfd\xc7\x83h\xaf\xd5\xe1\xc1\x93o.F\\\x8fPYLc"\x90\xcc\x8e~\xab_\xdcn\xf9$\xc3\xef\xc5`\xf0v\xcfv\x8fX\xe7\xd9k-\x87\x87\xd2\xbd\xbfz\xa8\x90Bx\x17\xe2\xce\xbf\t\xe9\xebH\x0f"q\xd9\xbe\xa7p\xf8G&\x02" \x02" \x02\x85\x12\x90\x00X()\xad\x17\x07\x01\xdf\xa2\xdb\x1df\x1e\xbd\x00\xe8\x1bw\xe8\xe0\x8f\x0cfl\x11\xc4\n_h\x1c;\xa4\x8f\x04 n\x12=\x0e\x0f\x96\x89\x80\x08\x88\x80\x08\x88@Q\x04$\x00\x16\x85K+GL\xc0w\xfb)\x00\xd2}\x08S\xb0Ek\x14\x1c\x12\x9cM.\x93w1\x009\x90\x1f\xdf\xf9\x9fq\xce\xca@\x04*\x83@\x0e\xaa\x1fc\xdbQ\x00o\xc5\x10\xd8F\x88[-\x10\xb28\xd4\xf5\xe1\xdb\xbal\xfd\x9d\xdd\xf6\xd8\xdd=x\xf7\xa3\xf1\xf7\xdf/\x8a\xe847\t\x08\xc55\xd7\xf5\xc0K%uA|u\'\xeahQ\x1c\xc4\xb5\xc1O\x02\xc2\x07\x06\x9c0\xe4\tx<2\xd1\x03\x85\xcc\x8e{\xe6\x12;\xee\xf4Ev\xc2\x99\x8b\xec\xc8\x93\x16:&Ix\x06\xa6\x863\x98\\\x84S\x0e\x07\x9e\x94\xee\x0b\xbd\x88\x80\x08\x88\x80\x08L\x8f\x00\x1an\xbc\xae.X\xd1f\xcf\xff\xdb#\xed\xba\x1fnBLV\x08g\xa1X7\xbdL\'\xd9\xca\xb9\x8a\xe7m\xe8\x81\x9d\x10\x001\xe7F\xa4\xad\xd0\t\xca\xc5\x10\xe3\xdc\xc0\xa8\xb5\xae]`\x1dg\x1cn\x83\xb7m\x0e\xdd\xd5\x0fySe\x8d\xf8\xe5\x05H\x17#\xc9\xfb\x0f\x10d" \x02" \x02\xc5\x13\x90\x00X<3m\x11=\x01$\xc68\x89\xdc\xbc3\x12\'*p1dbz\xa8\x1by\xc5\x95\xa1\x08\xcc\x80\x80\xf3\xf4\x83bGa\xab\xad\xa3\xc9:\x176[\x12\xc3_\xf7\xe2w\xb0\xe9\xe6\x9dv\xe7o\xb7\xdbC\xb7\xed\xb2!\xcc\xc4;\xde\x9cF\xee\x85r\xd7\x17\xc9;\x0f\xda\xf1\xebT\xddg\xec\'=L\xc2\xf0\x87.$\x93\xeb\x01\xfaN \xbc\x1a9\xfc\xf7\x81?<\xe9\x12\xf7\x7f\xd1\xaav;\xe5\xf9\xcb\xed\x19\x7f\xbe\xd2V\xae\x9dk\xcb0\xb1Hj4c\xfd=)\x0c\x13F\xdf\x0c\xdb&\xa8(\xfa<\xaa\x0e\x9avH\x04D@\x04\xe2#\xc0\xb6\x1bc\xcf\x9e\xf5\xd7\x81\x00H\xf1\x8f\xb7\xa6\x89\x9e\xe1\xcc\xb8\x16a\xa6#wm\xb3\xdc+\x9fj\xd6\x80\xeeQ\xe0.?\xe3\xac\'\xcb ;\x92\xb69/8\xc6\x86\xee\xdcby\x8a\x9b\x87\xdeA\xdfr=\x11\xf9\x9d\x86t\x07\x12\x97\xf9&.>\xcaD@\x04D@\x04D`j\x02\x12\x00\xa7f\xa45\xe2#\xe0\xe4\x05d\xcf\xe1\xbf\x9c\txY|E\x99\xf5\xeeI:\x01P\xfd\xf18)+\xefr\x13`\x8c:zJpX/\'\xf1hjmp^l7\xfe\xe4q{\xf0\x96\xdd\xf6\xc0MO\x1eT\xc51\x0f?t@\\?(\x96\x1e\xd6A\xc5\xce\xda\x05\xc1\xeeS\x15\xdcWE\xf6\xcb8\xe3\xb1\x1bV\x0cA\xb0{\xdb\x90]\xf3\xbd\r.q\x86\xe1S\xcf]n\'\x9c\xb1\xc4\x9e\xf2\x9ce`\xde\xe2bX\x8d\x0e\xa7\xdc\x10\xea:\x04\xb5\xd2\x8c\xc2\xfbX\xea\x93\x08\x88\x80\x08LE\xa0\x1e\xd7\xdb\xc1\xbdI[\xf3\xb4\x05v\xec\xe9\x8bm\xfd\x1d\xbb\xdd\xbd-\x1b\x87\x17`x\xad\xcfa\x06\xe0\xe4\xa6=\xd6\xb2v\xa1\xe5\x86\xa0\xady\xd9m\xaa\xcaN\xe7{z4b\xb2\xa9\xa6\x15s\xac\xed\xd4\xd5N\x04t\x0f\x8c\xc6\xddw\x0e\xc8\x96b\x1fk\xc4a\xc0\x12\x00\x0f\x80\xa3\x7fE@\x04D@\x04\n# \x01\xb00NZ+^\x02\x14\x00\xfd\xd8C6}\xa2\xd5\xe8\xc2\xe7\xa3}\xbb\xe1\x01\x88\x9e\xbd\xf3\xca\x89w\x7f\x94\xbb\x08\x94\x94\x80\xf7\xf6K`\xf6\r\x0e\x99b\xfc\xa4\xee\'\x87\xed\xbe\xeb\x9f\xb4?\xfc\xf4q{\xe4v\xff\xf3\n\xaaE\xaf\xc0\xb1_\x19~\x13\x1c\xf2*\x9b\x9c\x00E\xc1|\xc8\x89\xf8B7A\xf7P\xa1\x07\xac\xaf\xfd\xef\x8d.\xcd[\xd2lg\xbd\xec\x08;\xfd\xc5\xabm\xd9\xdaN\xc4\x0cl\xb0\x01\\{F\xe1\xc9R\x87\x19 \xe5\x1589g}+\x02" \x02\x9e\x00\xdblYx_?\xf7\xbc5N\x00\x8cE\xfc\xf3\x85\xf1\x01\x0f\xc4\xc5!x\x01\xb6=u\xb9\xe5\x06\x93\xf8&N\x05\x10\xd9\xe3f\x92\xc3\xac\xc3s\x9e\xbb6\x10\x00\'\x9f|\xc4\xdf\xa8O\xe7\x96H\x1c\x06\xccw\xbf\x1c\x1fe" \x02" \x02"09\x01\t\x80\x93\xf3\xd1\xb7\xa5#\xc08\x80\xb1\x98o\x19\xf5S\x00\xf4\xcfOc)I\x99\x8a@i\t8o?\xc4\xe7\xa3\xb7_[g\xa3\x9b\xa1\xf6\x9e\xebv\xd8\x1d\xbf\xddj\xb7_\xb9m\xbfn\x01\xbd\x02\xd9\x97\xe10#\x17P\xdd\xff0J[\xe5\xaa(\x8db\xe0\xf8qhn\xe6c\xb0\xcd@ \xec\xedJ\xda\xaf\xbf\xb9\xde\xa5\xa3\x9e\xb6\xd0\x9e\xf9\x92Uv\xfa\x8bVc\x12\x91v\x1b\xee\xc7\x0c\xc4\x83\xf0\n\x84\x97f}C\xcc\x1d\xcb\xaa \xad\x9d\x10\x01\x11\xa8e\x02\x9cm}\x10\xf1\x9b\x19n\xa1mN\x83\xbb\x86\xc6&y\x85\xf7\xc4\xd1G\xbb,\xdb\x0f\xf1\xaf\x11]\xa4\xb8\x87\x01\xe36\x90\x1b\x85\x17\xe0\xaa\xb9\xd6\xb0\xa4\xd32]\x98\x88\xea\xd0\x92\x1e\xbf\xa1\x1d\x8dt\x18\xd2f$\xdeHt7\x07\x04\x99\x08\x88\x80\x08\x88@a\x04\xea\x0b[Mk\x89@l\x04|\x83\xe69(\xe1\x0c\xa4\xc8%:_@\x02Ow\x9f\xff\xda\xb5\x18\x92\xa7\xd8\xc9\xb1\x1dMe\x1c;\x017\x11\x07;%\x10\xf4\xe6-i\xb5\xf69\x8d\xd6\xbbs\xd4n\xfe\xd9f\xfb\xe6\x07\xef\xb4\xeb\xffg\x93m\x7f\xb4\xdf\xd5\x03\xd3Z\xb8a\xab\xfc\r8\x0f6\xfe\xbad\xd1\x13@\xf7\x8b\x87\xc49V\xe2\xb88\x0fK,\xeb\xc1,\xca\x0f\xfca\x97;&\xdd\xdb\x87m\xe1\xca6[\xbc\xaa\xcd:\xe6!\x1e\xe3H\x16\x9e\x97\x98\x8d\x99\xc7\xc8_\xa4\xa2\xaf\x99r\x14\x01\x11\x10\x81\x8a&\x90\xc5\x83\x95\xce\xf9M\x18\x0e\x9c\xb6\r\xf7\xec1\x86\xac\xf0\xf1Z\xe3\xd8\xb1V\x9e>LM\xc0\xc7\xabr\x1e\x81\xf0\xd3\xe0\xf0\xeb\x87n\xedri\xe9\x11\x1d\xf6\x927\x1fk\xa7\xbep\xa5-9\xbc\xddz\x11\xa2\xc0\t\x81p\x07\x94\x1085[\xad!\x02"P\x1b\x04\xea1\x0c\x98\xb3\xab\x1fu\xea\x02[u\xcc\x1c\xdb\x06\x0fw>\xe4\xa2g`\xe4\x16f9\xf2\xc0\x93nv^\x04\xd4\x8d\xbc\x88\x832\xc4\xad;\x8fa\xc0\r\x0b\xdb\xe0\xb1_\x8f\xfb\x04\x9e\xda\xd1-\xdc7^\x0f\xda\xc0-82\\\xac\xd6\xec\xc4|\xb4T\x04D@\x04D\xe0\x10\x04$\x00\x1e\x02\x8c\x16\x97\x8c@\xa0Z\x98a\xdcC\xfc6\xb87e\xed\xf3\x1a-\x87\xf0.\xead\xc7\xcf[%L\x9f@\xe0\xf1\x97\xb7\x96\xf6\x06\x9b\x83\xe1O\xbd\xdd\xa3v\xe57\x1e\xb1\x1b~\xfc\x84\xedz\x02q\x82Bs\xc3\xa1\xe8\xed7y\xf0p\xbfzy\xdf\xdd\xaf=\xfc\xc9\xfb_>kt`\x1fk|\x97\xe6\xc0\xef\xb8\xfe\xf8\xef\xf9\xbf\xeb\xb4\xe1%\x86\xfe \xb3\x9f\xa9\x8d\xf7\xc4\xf4\x1d\xd7]O\x0c\xda\xb7?r\x97\xfd\xec\xd2\x87\xec\\\x84&x\xce\xab\x8e\xb0\xc5\x18"L\x8f\xc0\xd1\xa1\xac\x9b\xc8\xe5 .3\xad\x88\xb6\x17\x01\x11\x10\x81J#\x80{E\x0eqS\x1b1\xab\xfdi\xf0\x9c\xa6\x00\x98\x8b\xcb\xb3=\x14\xdd\x92[\xf6Z\x9e\x93\x800V+\x1e\x1c\xc7j\x18\x95\x92Kg,1\xb7\xc5\xea\xe7\xb5Xf\xcf\xd0d\xc5\xf9;\xe7\xcap\xa5\x98+7YU\xf4\x9d\x08\x88\x80\x08\x88@%\x12\x98\xa8kU\x89\xfb\xa1:W.\x01\xdfe\x0f\x82\x96\x991.\xa5_\x16\xf9^\xf5\xa3s\x9dP\xf0\xfd\xc8\xb9*\xc3\xe8\x08P\xf8\xa3\xe7X3:;\x8bW\xb7Y\x1a3 \xfe\xe4\x0b\xeb\xec\xff\xbd\xe0j\xfb\xf1g\x1f\x08\xc4?x\x07\xd0\xe3\x8fN\x02\x9c\xc1wrG\x81\xe8\xea6iN\xec\x96\x8c%|`\xe5\xc6\'n\xcc_6+\xcbD\xc1\xd2\'zr\x8cO~9\xdf\xc7/\xf7\x9f\xc7\x7f\xcf\xcf.O\x16\x00\x1b_\xe6~\x9f\xf9\x9d[\xa3\xac/\xcek\x85h\xe8\xb1\x89\xfa\xedE\x9c\xc0\xffu\xc7\xf7*\xfb\xc5W\x1evH\x96\xacjwq\xae8\x8c[&\x02" \x02\xb5N\xa0\x8e\x93\x81\xc0\x0b\xf0\x99/Z\xe5P\xb8\x87*1C\x19Y\xdfm\x89\xd6F\xdc\xa7b\xd6\xd8x_\xc2\xbd\xad\xa1\xbd\xc9\xea\xdbP\x1e\xed\xd0\xf7*\xffM8^8X]\xaf" \x02" \x02"P(\x01y\x00\x16JJ\xeb\xc5M\x80.M\xa3H-H\xb1\xf5z\x07\xe0E\xd5p\xdc<\x94\xc0\x06\x9d\xf4o@\x90\xcd\x16\x02\x14\xfe f\xb5\xb4\xd7[\'&\x89\xe8\xdf\x93\xb4+.Yg\xbf\xfb\xee\x06x\x841\xec\x0f\x0c\x82\x115-z\xfb\x95]\xf4s\xe2\x1a\xea\xc4\x9f\x11\xbd1\xf6\xab\xd0$?a\xccXl\xec\xe4\xb4\xf0\x1dz?\xdf\xb1\xcf\x86\xa1O\xce\xdb\x02q\xf3\xac\xd1\xf7q\x90/\x7f\xaa\xde\x03#\x85\x7f8\x89\x0fDQ\xf7\x0e\xaf\x10\x1bJ\x99\r av]\xb7\xee~\xf5\xc0\xb6\x07\x1a\xeb\xcd\xc7\x0c\xccw\xbcpx\xe0zq\xfe\xef4\xcb\x80\x91\x13r\xf1qd0c?\xfb\x8f\x07\xed\xba\xff\xdeh/~\xdb\xb1v\xceyk\x10#\xb0\x0e\xe7A8k0\xb9\xc8D@\x04D\xa0\x06\tp\xc4Fz4g\x8b\x11:a\xf9\x9aN{r\xd3\x00\x1e\xa2\x84M\xb9\xa8y\xf0Z\x8b\x87/\xc3\x0f?i\x1d\xcf>\xdc=\x94\x89\xba\x88\x83\xf2\xc3\xbd\xa8\xae\xb9\xc1\x12\x08\xf5Q\xa0q"\x10\x99\x08\x88\x80\x08\x88\x80\x08\x14M@\x02`\xd1\xc8\xb4A\xc4\x04\xbcR@\x01\x90\xc9\x0b\x80\xb1\xf4v\xfbz\x92\x88\x1d#\xe1/\xe2c\xa8\xecfH\x80\x1e\x7fM\xcd\t\x9b\xbf\xa8\r3\x1d\x8e\xda\xaf\xbf\xb1\xde~\xfd_\x8f\xd8\xc8\x10f \xa4\xd1\xdb/\x14\x8d\xa6\xd2\xb7\x82\r"~u\xbf\xc6q?I\'\x9c\xb1B(\x87B\xda\x98a\x1dLRb\x8b\xf03^\xden\xb6\xa2\xc3lI\x9b\xd9\x82V\xb3\x8e&|\x87\xceMS(\xf4\xf1wH\xa1\x8f\xef\rX\x16z\xc4\xb9\x1d\xdd/Od\xee~\xb2X\x97\xde~\xf4\x8ac\x8c$\xbe\xf3\x7f\x8a\x82i\n\x82x\xa70\x98\x04\xb3\xaea\xb3]HOb(\xd5.\xa4\xdd#\x81P\x88\xd5\x9d\xe8\x17\xea\xa9\xfb\xaa=n\xdf\xb8S\\\xafD\xe6\xc4\\\x94\xc58\x81,\xb6o\xcf\xa8\xfd\xf0\xa2\xfb\xec\x9a\xefm\xb0\xbfy\xffS\xec\xb4?\x87\xc7\x0b\xc1Nx\xd6\x12\x1b\x1aH\xdbH\x1f\x04N\xac#!0\x8e\xa3\xa0\xafb\xc34\xcf{ha\xc6\xc7g1\xdf\x8d\n\xab\x88\xd6\x12\x01\x11\x10\x01\x11\xa8,\x02\x12\x00+\xebxUsm\xfd\x10\xe0X\xf6\xd1\xc7\x8a\x19@\\\xb5\xfa\xa6\x19\x88\r\xb1\xd4N\x99\xd6\x12\x01N\x02\xd1\xd2\xd1`s\x176\xdb\x86{z\xec\x8a/\xae\xb3u\x7f\xdc\x15"\x80\xf0\x87\xd3\xb3d\x1e\x7f\xde\xd3m"/\xbf\xd5\x9dfk!\xf8\x1d\x05o\xba\xe3\x16\x04\x9e~\xec\x18\xb9!\xb8\x10\xdd\x18\x8bo\x10\x82[_(\xf8\xf1g\xc5\xca\xf3\x9di\xccE\x8f\x9fc4v\x9c\xc6t0W\xf0\xc4\x85\xb9!\xc2\x81g\xa5\x13(\x1b\xb1.\xbd\x06\xe9\xbdx\x18\xc2)=\xff\xf0@\xb8|\x02^\x81\x8fA\x08\xdc\xb0\xd7l=\xde1q\xd0~O\x0c\xc8\x8c\xc5P\xa8\x8b\xb1\xfb\xe5\x87\xb6\xd1\x0b\x94\x1d\xdc\xdb\x7f\xb3\xcd\xee\xfc\xddv{\xc5;O\xb4?\x7f\xfd\xd1\xd66\xaf\xce\x06v\xa7P\x8d\x9c\xeb\x04O\xbc\xd3Z*\x02" \x02\xd5A\x80\xb7\x97t2\x83\xc9\xb1\xe6\xda\x9aS\x16:\x01\x90\xcb\x82\x07N\xf1\xeccrC\xb7\xb5?}e\xe0I\x1eO\x11A\xae\xb8\xcegG3\x96e\x08\x8b\xc2\xccO\x9cW\xd8\xdaZK\x04D@\x04D@\x04B\x02\x12\x00u*\x94\x9b\x00\xbb\xd0l\xc2q\xb0\x1d\xbd\x00i\xb1u\xab\x07\xf6\xa6,\x81>\xbf\x9b\x03$(K\xaf"P\x12\x02\x14t8\x93\xe1\xa2\x95\xad.\xce\xdb\xf7>v\xb7]\xfb\xfd\x8dce\xbb\xa1\xe9\x10\xd7b?7\x9dX\x86\x17\x8ayL\xde\xe1\xa0\x11?\x8cc \xf6\x9d\x81\xce\x0e=\xfd0\x11\x89u\xc2\xbb\x8f\xe2 \'\xda\xd8\x838z\xfbU\x0e?[\xfer9,\x8a\xc3lg\xbb\xb1\xae^\x94\xf4\xf5\x85\x17\x9d\xa1C9f\xdc\x97e\x18\xca\xbc\x16\x1ch}\x10\x0c9d\xf8\xbe.\xb3\xdbw\x06\xf1\x04\x9d\x08\x1a|]\n\xcf@\x8a\x7f\xce\x01\x11/\x1c\xf2\xc6\x89a\xfe\xf0\x93Mv\xc1\xc7\x9ef\xa7\x9c\xbb\xc2\x06{Sn\x02\x11\n\x852\x11\x10\x01\x11\xa8f\x02\xbc\x16\x0ec\xc2\xa7\x93\xcf^jw\\\xb9\xd5\xdc\xac\xeaq\xecp\xd8\n\x1d\xdd\xb0\xc7\xf2\xbc\x07\xfa{G\x1ce\xd1Y\x1e\x0f\xa3r\xf0H\xcf\xd1\x83\x9e\x16\x96\x1f\xfc\xb3\xdf\xab\xff\x067$g\xbc\xf0\xfbe\xe1"\xbd\x89\x80\x08\x88\x80\x08\x88\xc0\xa1\tH\x00<4\x1b}S:\x02\xec\x8e\xb3\t\xe4\x87\x00\xc7V\xf2P\x7f\xda2\x98I.\xa13?6\xc6\xca\xf8`\x02\x14n\xda\xe77a\xb8o\x83\xfd\xf1gO\xd8\x8f?\xbf\x0e\xf1(\x03o\xb4\x04\x86q\xe6(\xfc\xd1\xb3.N\x0bg6\x0c\xba\naY\x0b19\xc7\xc9\x8b1\xacw\xa1\xd9I\x18\x1e;\x17\xa2\x9f\x9fT\x83\xe2\x18\xc5/\x9a\xf7\xecs\xee\x16\xc1\xa2\xaax\x1d/\nr\x87\x88e\x18b\'\x05O\xba\x156\xe3\xd2\xc4x\x82G\xc1\x03\xf2\xd5\xc7\x99m\xc6%\xea\xfe\xdd\xf0\x0c\xc4p\xe1{!\nR\x0c\xf4F\x01\xce\x89\xaa~At\xef\xae\x18\xbc\xb0\xf3\x8bW\xdb\xbd}\xd8.y\xeb-v\xc6_\xad\xb2W\x7f\xe0d[\xb0\xac\xc5zw\xa1\xf3\x88\xeaH\x08\x8c\x8e\xbbr\x12\x01\x11\x98]\x04\x12\x08\xe12\n\xcf\xf3\xa7<{Y\xcc\x15\x0b\xae\xed\xe9]\xfd\x96\x83g\x1e\xcb\xcd\xf1\xde\xe8\xee\x19Q\x17\x8d6)&\xff\xc8\xf4\x8cXv`\xca\xa1\xc6\xfe\xa6\xe3\x9f\x1e\xb2F|\x80.\x13\x01\x11\x10\x01\x11\x10\x81\x82\x08H\x06)\x08\x93V\x8a\x99\x80o\xd0\xa0W\xed\x8cO4\xa35\xca\x8b\xb0\xe4p\xda\x86\x872n\xe2\x05v\xaa\x9dgM\xf0\x95^E r\x02\x14\xf58\xe4|\xfe\xb2V\xdb\xb1\xb1\xdf~\x84\xd9]\x1f\xb8)\x1c\xee\x8b\x93\x0fQ\x86\x9c\xf8\x17y\xc1>C\x7f\x82\xf3d\xf7\x02#g\xe9\xa5\xe8w\xf6*\xb3#!n\xcd\x87\x08H/8\x0e\xe7\xe5\xec\xb9\x81B\x18\x88~\xf4\x88\xab5\x1b?\xbb\x06;|\xa9p\xd80\xc5O\n\xa6/[\x0b\xaf\xc85\x818z\x17\x8e\xe5M[\x83IE\xa8\xbe\xd1\x9c\x10\xc8\x0f\xf8?\\\xc4\xff\xa20\'\x04"S\x1f\x1f\xf0\xb6_m\xb3\xfb\xae\xdfeo\xfc\xf4iv\xfa\x8bW#>V\xd2\x86\xfbq}c\x8cC\x99\x08\x88\x80\x08T!\x814\x1eN\xcdY\xd0d\xab\x8f\x9dk[\xd7\xf7\x8d]\x0f#\xdd\xd5q\xd7\xee\xd4\xb6^kY\x8b\x07d\xee^\x10\xc3=\x11e%\x9a\x1a-\xdd\xe3\x1f\xb8\x85\x0f\x93&\xdf\xa1\xc7\xc3\xafu\xb1\x9f\x9c\x93\xbe\x15\x01\x11\x10\x01\x118\x80\x80\x04\xc0\x03\x80\xe8\xdf\xb2\x12\xe8\x0eK\x8f\xadA\x93\xc4\x8c\x9f|z\xcc\xa7\xb9Y\xcc\xba*\x13\x81\xb8\x08\xd0\xab\xafc~\xb35B\x00\xfc\xcd7\xd7\xdbO>\xb7\x0eE\x05\xbd\n/\xe0\x8c\xebcD[\x8d1o\xbfq%<\x15\xa2\xdf\x19+\xccN\xc5$\x18\x9c\xbc\x83\xe2\xd6\x08\x84\xbf\'C\xc7[\x8a}n\x18il?\xbfh\xf7\xb1\x14\xb9\xb9\xbe\xde\xb8\x0e\x1fya\xf8\x99\x9bu\x98\xde\x92/:\xd2\xec%k\x82\xc9Cn\xd9nv\xdb\x93`:.\x86SL^\x81c\xf1\x01q\x9cGp=\xfb\xca\xbbn\xb3?]\xb5\xcd^\xf3az\x03\xb6\xd9\xde]\x10r!\xfe\x8e\xd72K\x81Ke\x88\x80\x08\x88@\xdc\x04\xb2\x98\xf8)\x81\x8b\xdb\x89g.u\x02 \xafs\x9c\x0b*.Km\xdccm\',\xb3\\\x8ccT8\x0b|r\x13b\xce\xd2x\xcb\x99\xd8\xa7\x8f7t\xf6\xdbx\x93\x81\x0b\xba\xb3q7\xf9p\x89\xdeD@\x04D@\x04D`\x12\x02\x12\x00\'\x81\xa3\xafJF\xc07`b\x13\x00}\x01\xa3Ci\x1b\x85\x17`;b\x9beR\x1cR\'\xb1\xa3dG\xb9F\n\xf2^\x7f\x0b\x97\xb7\xda\x16x\'\\\xfe\xd1{\xecQ\xcc\xe4J\x1b\x13\xfe\xbc\xb7X\x94L\xdc\xa9\x8c\x97\xf1\xde~\x0b0s\xef9\x87A\xf8[\x8eI<\xda\xd0\xb1@\xcf\x821\x86v#\x9e\x9f\x13#\xf1\x7f-z\xf9M\x97;;f^U\xc3\xc3\x047\\\x98\x9e\x81k\xe0Iy\x02\x86Q\xbf\xf2h\xb3\x07p\xac\xaf~\x1c\xc3\x85\x11\xa3\xdd\x1fgw\x9d\xc1U\xc8_\x88\xa6[\xfe\x01\xdbQdf\xf1\x0c\xcd\xc8IB\xd6\xdd\xb2\xcb\xde\xf2\xd9g\xda\xa9\xe7.\xb7^\x1c\xe34\xc2\x1d0\xb6\xa4L\x04D@\x04\xaa\x86\x00\xaew\xbc\xae\xad=\x05\xa1\x19\xbe\x8b\xcbl\\\xe2_\xf8 -\xb9\xb9\xc7\xea\xf0\xd0\x98\x97\xefX\xae\xa6\xb8\x07\xe7\xb1\x13#\x8f\x84\xa3\x03\x0e\xbd?\xbe\n;P\x95-\xe1\xf1\x8c\xf8\xae\x12\xe6\xaa7\x11\x10\x01\x11\x10\x81\xaa% \x01\xb0j\x0fmE\xeeX|C\x80\xc3&\xd2\xe8P\xd6\x98:\xe7\x87BI<\xcd\xb9\x8a\x84\xafJ\xcf\x9c\x00\x03\x92\xcfA\xac?z\x98\xfe\xe2\xab\x8f\xb8\x19~}\xae\xd4\x80\xbc\xe7\x96_\x16\xc9;3f\xaf\xc4\x89M\xe1\x89~\xf2\x12\xb3\xe7\xae6;\x05q\x92\x12X6\nw\x02L\x16\xe1zJ\xf2\xf4\x8b\x04{\x10\x0b\x8a\x8a \x8c\x93\x85\xf4\xe1 \xb4"f\xe0\x99\x98D\xe5,\xb0\x7f\x0c\x97\xb3\xeb\xd0G\xa3g`0v\x17\xc7\x82\'\x01\x8eGx\x98\x82\x8dg\xf6\xea\xe7ea,\xc9\xa1\xde4b\x03\xdel\xe7\xbev\xad\xbd\xea\xfd\'Ys;f\n\xc6\xcc\xe7\xfcN&\x02" \x02UA\x00\x97]\x8e\xe4X\xb1\xb6\xd3\x85;\xe0}\xd7\xdd_#\xbc\xae:Na~\xe9\xdd\xc3\x96\xc1\x04\x1du\x9c9\xfe\xd0\xe2\xdc\xb4\xd1\xd6!6p\xa6g\xd8\xd2;\xc2\x89}\xfd\xfd\xe2\xe0\x1cY:o:\x0f"m\x0b?\xc7P#\xe4,\x13\x01\x11\x10\x01\x11\xa8Z\x02\x12\x00\xab\xf6\xd0V\xd4\x8e\xf9f\x9b\x17\x00c\xa8|P\x04g\xd4d\xc3\xb1\x1e\r9_h\x0c\x85)\xcb\x1a#@\x0f\x84D}\xde\x16\xadj\xb3\xeem\xc3\xf6\xad\x7f\xbe\xd3\x1e\xb9\x1d\x93E\xc0\xc6\xbc\xfe\xa2>\xe1\xa8\xe9\xb0\xd7C\xe1\x8fy\xf3\xff\xe7\xac2{\xc1\x91fG\xcc\tf\xf7\xa50\xe5\xdc#\xf0%\xc5\'y\xfb\x01R\x0c\xe6\xb9\xc2\xe3\xceF\xe1]\xc9\xe3\xc2\xc9C\xde\x81\xb8Q\xaf\x80W \x85\xc0k\x1e\xdf\x17\x871\x06!0\xf0\x06DTI\x9c\x0f\xd7\xfe`\xa3=v\xcf\x1e{\xcb\xc5\xa7\xdb\xaa\xa3\xe6X\xcfNN\x10\x92\x1fs^\x8c\x81\x80\xb2\x14\x01\x11\x10\x81\x92\x10\xa8\x87\x17\xf6\x08b9/=\xa2\xd3\x96\x1e\xd6i;6\xf5;\x8f\xc0`\xb6\xde\x08\xab\x10\xde\xb3\xb3\x88\xcd\x97\xdd3l\r\x0b\xdb,7\x82\x07i\xde\x0b<\x8a\xa2\x18\'\x18!9\xfa\xae^\x1f\xe46\xb9\x92I\xf1\x8fvK\xf0\xe6\xee\xfa\xe1G\xbd\x89\x80\x08\x88\x80\x08\x88@a\x04$\x00\x16\xc6Ik\x95\x86\x00\xc7I2\xf2\t\xdch\xe2\xb3Q\x0c\xdds\x1e1a\xe3.\xbe\x92\x94s-\x10\xe0\x90\xdf&L\xac1ga\x93\xdd\xf4\xb3\xcd\xf6\x83O\xdd\x83\xb8l\x18\x1e\nsmy\xe7\x99\x17!\thKN\xf0\xe3\xf9KO\x81\xf6Fx\xfb\x1df\xf6<$\x0e\xf3\xe5\xd0T\xce0L\xe1\xcfy\xfb\xf9>C\x84uPV\x13\x13p\xa8C\xde\xf0\x18\xb1<\x0e\xd6\x1c\xc4\n\xbc\xe0\x04\xb3\x17\x1ea\xf6\xfb\xcdA\xe21\xa2E,\x04z\x0fS\x0e\x0b\xde\xfcP\xaf}\xece\xd7\xda\xeb>q\x8a=\xf7\xbc5\xb6\xb7\x0b3Lf0$\x98\'\xa5L\x04D@\x04*\x95\x00.a\x8c\xe1\xdc>\xaf\xd1\x96\x1f\xd5\xe1\x04\xc0xv\x05\xf7W\x94\xc5\xebj\xa6w\xd8\x1aW\xcc\r\xc2>DV\x18\xf2\xc7\xc3\xe8,<\xf4\x87\xef\xe5\xa8^\x18o\x1fl\x05Ol\xe1\xcd\xc5n\x08\xbf\xc6M^&\x02" \x02" \x02\xc5\x11\x90\x00X\x1c/\xad\x1d\x0f\x01J\x19\xb4\xd8\x04@\xea$\t\xcc\x8c\x99\xc3P\x91\xd1\x81\xb452\x9e\x8b/5([\xaf"P4\x017\xd1\xc7\x82f\x17\xbf\xe7\xf2\x7f\xbd\xd7\xae\xfb\xfe\x86 \x8f\xf0)~\xa4\xe7\x18u\x1b\xe6\xeb\x05\xc5\x8e&\xb3\xbf\\\x03\xaf?\x0c7e\xac\xbf\x01\xc4\xf6\xeb\x86\xf7\x19\xcfky\xfb\x15},#\xdf\xc0{\x89P\xecC\xecQk\xc3s\x8d\xd7\x84B\xe0\xef\x9e0\xbb\n)\x13\xf6\xf4\xc2\xf3%\xaa:pX0=O\xd9I\xbe\xec#w\xb9\x19\xa8_\xf5\xfe\xa7Z:\x9c\x05=\xc1\xf3C&\x02" \x02\x95J\x00\x97\xb0\x11\x84s9\xea\x94Ev\xd7\xefv\x18\x1f\xc4En\xfe^\x8a\x1byz\xf7\xa0\xb51\x9cF\x94\x86\xcb\x7f\x03\x1e\x10\r\xdd\xbf\xc32\xdd\x83\xc8\x19;u\xe8\xfd`\xe1\xbcp?\x8et7\x92L\x04D@\x04D@\x04\xa6E@\x02\xe0\xb4\xb0i\xa3\x98\x08p\n4\xba\xc6@\xd9\x18\x1b\xd4\x18YQ\xec\xf3\xf2q\xe90\x04@z\xc8\xc8D`\xda\x04p"\xe5p\x8a.\\\xd9f\xdb\x1f\xed\xb7K\xff\xf1\x16\xdb\xf9\x04\x1b\xf0\xd4\xe80\x0c3J\xe5\x8fM~/\xfc1\xdfV\\\xb6_zT\xe0Q\xc6\x98D\x18\xd2n\xbb\x86\x82ux\x92s}\xd9\xec!\xe0\xae58(#8i\x86q\x9c(\x04\x9e\x7f<\x8e\xdf\x91f\xbfx4\x18\x1e\xec\xcf\x17w\x91\x8a\xa6\x93I\xaf\x15\xaf+^u\xd9c\xb6\xe1\xde=\xf6\xceK\x9fe\xf3\x16\xb5`\x82\x90Q\xc5\x05\x9c=g\x88j"\x02"P$\x01^\xdbRN\x00\xc4\xe4K0\x7f\t-2\x9b\xa9W\x0f/\xc7\x99\xed\xfdx\xd0\x87B\xa3\x1c\x9f\xe2b\xb3\xe6\xad\xf7\xaaG\x82z\xf0^\xc1F\xea\xc4\xc6\xa7E\xec\xb3\xfd\x10\x89\xb3xM\xbe6V\x90\x89\x80\x08\x88\x80\x08\x88\xc0D\x04\\\xd7d\xa2/\xb4L\x04\xca@\x00c\xe6,\x8c\x82\x1c}\xe9\xdeq\xaa\x7f/\xe2a\xa1)\xc5\x06\xa4L\x04\x8a%\xc0\x8e\x06\xbdI\x97\xac\xee\xb0?]\xbd\xdd>\xfe\xb2k\x9c\xf8\xe7\x87VF+\xfe\xe1$e\x07\x84\'/\xcf\xd7\x97@\xf8\xfb\xf7s\x82\xf7\x11h\xe5\x1c\xea\x9bD\x8f\x81\x1d\t]\xcd\x8b=\x94\xa5]\x9f\xc7\x87\xc7\x89B`\xd70\x1es`\xc1\xebO2\xbb\xe8,\xb3\xd3\x96\x06uq\x17)\xac\xc3c\x1d\x81\xf9N1\xb3\xdbpw\x8f}\xf4\xa5\xd7\xda\xa6\x07\xf6\xda\xe2\xd5mnX[\x04E(\x0b\x11\x10\x01\x11(9\x81\x04\xc2[\xa4\x93\x19[u\x0c\xe2\xddz\x8b\xe8\xba\xe9\xb3\x1b\xff>\xba\xbd\x17^\x86\xd4\xe0"\xba\xd1\xc2\xd3/1\xa7\xc5\x86\xd6\xed\xb2\xf4\xb6\xbe\xa0(\xdfH\x1d_p\xf0\x99\xad\x00J\x8fl#\xff2X\x14\xd5]"\xccMo" \x02" \x025C \xa2;Y\xcd\xf0\xd2\x8e\xc6C\x80\x8d\x1b\x1a\xbd\xff8\x0c\x98\xe6\x97\x05\xffE\xf8:\xd4\x9b\xc1(\x0bx\xc7\xe8\xec\x8f\x90jmd\x95E\xa3\xbd\x19\x1e\\\x9d\x0b\x9a\xec\x7f/\xbe\xdf\xbe|\xe1\xad\x96\xc1\xb0r\xc6\x94\x8c\\\xf8#R\xaf\xe0\x9c\xb3\xda\xec\xe2?\x83\xe7\xd8qf\xcd8q1+\xa1\x1b*D\x8f1\x9d\xc7\x95u\xf2\xf1x9!\x10\x9d\xc9=p\xe4X\xd2n\xf6\x9eg\x98}\xf0t\xb3\xa31q\x08/}\xbc\xfa\xf1\xd8Fd.;\xe4\xd7\x0f\xc1\xf8\xa2\xf3\xaf\xb7\x9b\x7f\xb6\xc5\x16\xaejw\xde\xaan\x8e\x98\x88\xcaQ6" \x02"P*\x02\x99l\xce\x1a\xe0\x05\xbf\xf2\xe8NWdtW\xcc\xf1{\x104E3\xdb!\xd2qx\xae\x0f\xed0~\x95\xa2?#\x1f\xd4\xbb\x0e\x82b\xdf/\x1f\x08\xb6\x9e\xfczO\xe5\x91v\'\xd2}H\xbc\x8b\x1c\xdaW\x10_\xcaD@\x04D@\x04D\xe0P\x04\xe8N.\x13\x81\xd9B\x80\x8d\x1c\x0e\x03\x8e\xc7\xc2\xe6\xd2 <\x00\x03aE\xcaI<\xa0\xab3W\xc6\x8f\xa4\xf0\x97M\xe5\xec\x92\xb7\xfc\xd1\x1e\xb8i\x97\xdbQ\xc6Zc,\xc0H\xcc\xf5`\xf0\xe2\x85\xbf\x93\x16\x9b\x9dw\xac\xd9\x91\xf3\x11\xe3\x0f\xb3\x0f\xd2s\x8c\xae\xab\x14\x90d\x95M\xc0]~p\x1c9a\x0c\x87q\x1f\x8f\xa1l\'\x9civ\xf3v\xb3\xcb\xd7a|[x\xc1\xe2\xa1\x8e\xe0\xf4\xe2\x0c\xe8~F\xeao|\xe0\x0e\xdb\xbde\xc8^\xfe\xee\xe3\xad\x1f\xc3\x81\xd3\x88\x15\xe8=X+\x1b\xaaj/\x02"P+\x048\x92\x83\x0f\xdf\x0e?a\xbem\x7fl\xc0]\xc3"}\x10G\x90\xe1\xb5\x97qU3\x03\xa3\xd6\xd0\xdel9\xce\xf6>\x93\xe6#6\xaf_\xd0j\xbd\xbfz\xc8R;\x11:\x84\xf7\xf4C{\xff\xb1\x16,\x8dw\x82\xef#!\xd8\xaf\xf3\x06\x0co\x10\xf8O&\x02" \x02" \x02E\x10\x98\xc9-\xac\x88b\xb4\xaa\x08\x14D\x80M\xad\xbd\x05\xad9\x83\x95\x06{SN_\xd1\xc9?\x03\x885\xb6)\x05\xbe\xf9\xcbZ\xe0A\x95\xb4O\xfe\xcd\xef\xc7\xc4?b\xf03\xaf\xce\x18\t=\x00\xf8\x0b\xa0\xf8\xb7\xb0\xd5\xec\xed\xa7\x06^a\xcb: \xfc!v\x1c\x87\xfcR\xf8\xd3\x89;c\xd4\xb3*\x03\x1eO\x1e\xfb\xbd\xe8\xd7\xf5C\x08<\xe70\xb3\xcf\xfd\x99\xd9Y\xab\x82j\xf2\x9c\x98\xdc;\xa4\xe0\xdd\xf1q\x01\xb9\xc1\xff]\xfa\xa0}\xe7\xa3w[\xeb\xdcfkmo0z\xb7\xcaD@\x04D\xa0b\x08\xc0\x03\xb0\xbe\xa1\x1e\x02 =\xa7a1\xdf\x1b\xd3OB\xacC\xf8\x8f\x199\xdf\xe1\xfe\x9e\xe8h\xc6\xb0\xdf^\xeb\xfb\xed\xc3\xae\xdac*c\xf8\xdf\x01o\x14\xfa\xb8g\xeb\x91.\x0f\xbf\xf3\x1e\x81\xe1\xbfz\x13\x01\x11\x10\x01\x11\x10\x81\xc2\t\xc4|\xbb,\xbc"Z\xb3\xe6\t\xb0UE\xf3\x02`\xe4\xbdQ\x9f\xe1P?\x84\x14>m\xd5\xd9\x1f\x10\xd7\xeb\xa4\x04\xe8Q\xb0pY\xabm\xbc\xbf\xc7>\xf6\xf2\xeb\xf6\x8b\xf77\xe9\x86\x85~\xe9\xcf|\xef\x01\xf0\x17k\xcc\xfe\xedl\xb33\x97\xc3\x1f\x16\xde\xaa\x98\xb4\xc6\t@:_\x0b%Z\x99\xebQ\xdc\xa5\xf8\xcb\xe1\xdd-\x08\xf7\xf4\xf6\xa7ah\xf0\xd3\xcd\xe65\xef\xf3\x0e\xf1\xe7\xca\x0c\xf6\x90Exo\xbf\x1b~\xb4\xc9\xfe\xf3\xad7#\xb7:\xeb\x9c\x07\xefV\x7f\x0e\xce \x7fm*\x02" \x02\xa5 \xc06]\x0e\xc3h\x97\x1e\x81\x87d\xb0<\xbc\xf4c\xb1\xf0\xba\x9b\xedB\x88\xeaF\\\x9b\xa7[\x0c\xa4\xbc:\x0c\xfde\x9b\xa2\xfb\xbb\x1c\xcd\x0b\xa3\xf7\xdf\xe4\xf9\xf1[\xa6/ 1\x06\xa0Z\x02\x80 \x13\x01\x11\x10\x01\x11\x98>\x01\xddH\xa6\xcfN[\xc6C\xc0\x0b\x80\xf1\xe4\x8e\\\x87\xe0\x01\x98\xcb\xd7)\x82rl\x84\xab$c4\xd61h\xd2\x16\xad\xec\xb0;\xaf\xdef\x17\x9dw\x83\x8d\xf4\xa7\xa2\x8d\xf7\xe7\xbd\xfe\x88l-\x86\xf9^\x04\xe1\xef\x82\x13P0\n\xef\xe6D\x7f0]\xa5\x03\x0e\xb5\xf2J!p\x04\x0e\x1e]8\xfeO]d\xf6\xd9\xe7\x9a=\xff\xb0`\xef\xd9\r\x8c\xc0\x1b\xd0\x0f\x93c\xbf\x96C\xd9/z\xcd\r\x96\x1a\xcd\xd8\x1c\x0cq\xe7Pw\x99\x08\x88\x80\x08\xccz\x02\xb87\xa6p\xad\\\xb0\xacmLG\x8ber\xb70\xd3t\xd7\xa0%(\x00N\xd7\x12\xf0\xfe\x9b\xdbf=?\xb9\xcfR;8\xdf\x1d\xc5\xbfI\xaf\xb7\xf4\xf4c\x0b\x80\xde\x7f\xff\x1b~\xc6\x9bL\x04D@\x04D@\x04\xa6O@]\xcb\xe9\xb3\xd3\x96\xd1\x12`_\x94\xe6\x05\xc0I[E\xc1\xaaE\xbe\x86\r\xadA\x0c\xb5sC\xe1t\xf6\x17\t\xb0vVg\xbc\xb4D#\xc4\xbf\xe5-v\xe57\x1e\xb1\xaf\xbc\xfbv\xb7\xf3\x91\xc5\xfb\xf3g\xbb\xf7\xb8:\xffx\xb3\x8f\x9ei\xb6\xb4-\xf0\x00\xf33\xfb\xd6\x0er\xed\xe9x\x02\xbc61\xedE\xdcG\nro\xc0l\xc1\xef\xc3D!Q{\x03\xa2\x08\xf6m\xb7=\xdag\x9f\xfe\xdb\x1bm\xb0\'es\x16\xb7D\x17\xd3r\xfc>\xe9\xb3\x08\x88\x80\x08DH \x81\x99\xdc\xd2\x88\x95:\x17\xd7\xacyH\xcebQ\x00\x83\xac\xd3;\xfb]\x1c\xd5\xe9\xedB\xde\xea\xe7\xb7\xdb\xe0\xf5\x1bl\xe8\xf6\xcda\x16S6s\xd9R`\xfa\x0cRo\xf8\x19O\x07e" \x02" \x02"0}\x02\x92@\xa6\xcfN[FK\x80\x8d\x1c\x9a\x17\x00\x83\xffbx\x1d\xecK\x06O]5\rp\x0ct+?K:\xdf5b\x98\xce\xfc%\xad\xf6\xfdO\xdek?\xfe\xec\xfdn\xa7\xd8\xaf\x88$\xde\x9f\xcb(\xe4t\xdc\x02\xc4{{\xae\xd9\x8b\xd7\x04\x93|p\xa2\x0fzx\xe9\xca\\\xf9\'R\x14{@o\xc04\x9c@v\xc3\x1b\x90\x13\xc2\xd0\x1b\xf0\xcc\x95A\xce\xec;F\xe2\r\x88\x1e&\xf2yr\xd3\x80}\xec\x15\xbf\xb7\xdd\x9b\x07l\xde\x12\x89\x80Q\x1c>\xe5!\x02"\x10\x1f\x016\xe1R\xa3Y\x88\x7f\xad\xd6\xb9(\x10\x00ci\xd6\x85:]f0iY$\xab/\xd2\x0b\x10\x0f\xfa\x1a\xe6\xb7\xd9\xd0mO\xd8\x9e\x9f\xdc\x1b\x00\x99Z\xa8\xf4\xde\x7f\xbf\xc0\x06\x97#\xb1U\xc0e2\x11\x10\x01\x11\x10\x01\x11\x98\x11\x01u3g\x84O\x1bGH\xc0\x0b\x80~\x16\xe0)\x1f\x8d\x16[\xb6\x1fiA\x81\'\x9b\xc9YBg\x7f\xb1\x08\xab~\xfd<&BhlN\xd8\\\x88\x7f\xdf\xfd\xd8]\xf6\xbb\xcb7\xb8}v\x9a]$g$U\xc40\xa3Wbv\xdf\x0f\x9da\xb6\x00\x1d\x17\x0e\xf7\xa57`\x04\x82N\xd5\x1f\xa4Z\xdbA^\x19y^0\x1e$\xa7\xbd\xfcG\xc4\x06\xa4G \x8d\xe7\xcc\xd4\x1d\xc9`\xddI^)l\xb3\x88A\x94\xf1\xa9\xf3n\xb4\x9d\x10\x03\xe7/\x95\x088\t2}%\x02"0\x0b\x08\xf0\xda\xd5\xd4Zo\x8bV\xc0{>f\xcb\r\xa5\x9d\x00\xc8\xd1\x01\xee\xda[Hy\xa8_\xc3\xa2v\x1b\xbao\x87u\xff\xf7]\xc1\x16\xbc\xa6\xfbv\xc0\xc4yx/?z\xfd}\x18\x89[0\xc9D@\x04D@\x04D`\xc6\x04$\x81\xcc\x18\xa12\x88\x98\x00\x03\xa3\xd0bm\xec\x0c\xf5\xa5\xd1\xe1\xad\xb3\x9cof\x05e\xea\xb5\x86\t\xe4\xa1\xad4\xb5\xd5[kg\x93\xfd\xd7\xbbn\xb5\xdf\xffpS@\x03g\xe2\xe4m\xf5\x02\xa0\x8d\x9d\xcd\x10l\x96\xb5\x9b\xfd\xcb\xb3\xcc^y4f}\x85\xc7\x9f\xf7\xfa+ \x1b\xadR\xc3\x04\xe8\r8\x8a\xf3g\x0f\xc4\xe2\xe7\x1dn\xf6\xe9\xb3\xcd\x0e\x9b\x13\xc1\xc9\x190\xa5\x96\x98@\x19#\x83)\x0c\x07\xbe\xde\xb6=&O\xc0\x1a>\xdb\xb4\xeb"P\x19\x04pYL%3\xb6|M\xa7\xab/\x1f\xf0\xc6e\xb9!\xc4\x8f\x1e\xc4\xa4\\\r\xec:\xe1\x829\x99\xb1\x1e\x885\xdd\xb0\x10\xe2\xdf][m\xf77\x820"c\xc1\n\'\xdb6\xc8\x9cn\x86\x9fEz\x08\x89-\x08y\xff\x01\x82L\x04D@\x04D`\xe6\x04$\x00\xce\x9c\xa1r\x88\x86\x80oMa\nLgl\xfc\xf8e\xe1\xa2\xe8\xde\x86\xfa0\x99C\xc3\x98*\x13]\xc6\xca\xa9"\t\xd0\xf3\x8f\xe2_s[\x83}\x15\xe2\xdfm\xbf\xd9\xe6\x9a\xdc\xce\xb9j\xa6g\xa1s\x1f\x0c\xb1pf\xdfO@\xfc;jn\x10\xeb\xcf\xa9.:\x0f+\xf2\xa4)G\xa5\xdd\x1d\x1b\xe7K7.\x93K\xe0\xf1\xf2Q\x9cK\xa7\xe3\x9c\xf26Co\xc0\x1c~\x07|0\xc2\x99\xd2?s\xc1\xf5\xd6\xb5u\xd8\xe6,jVL@\xcfW\xef" \x02\xb3\x8a\x00\xef\x9ei\xc4\xcc]\xbe\x06\x0fC`\x91\x84\xe9p9\x8d{\x19\xf7\x040;\x84!\xc0\rh\x9eN\xd6.\xc0\xfauM\xf5V\xbf\xb8\xcd\xfa\xafYo\xbb\xbf}\x07k\x866\x05j;.\xafq%\x8c\xffH\xe9\x90\xed\xdf_#}\x1e\x89W\xfd\x18eM\xe4.\x13\x01\x11\x10\x01\x11\xa8)\x02\x12\x00k\xeapW\xc4\xce\x0e\xa1\x96p\x8b\x8a\xd7\x03p\x103\x01\xd3\xdbE\xed\xaa\x8a8\'b\xad$=\xff\x9a\xe9\xf9\xd7\xdeh\xff\xf1\xd6[\xec\xee\xebv\x04g\x1f\xda\xebS\xb7\xd5\xa7\xa8\xda\xf8\x06\xff\x9b\x9fj\xf6\xce\xd3\xf0\x1c\x1f\xe7]\x0f:\x11\x1a\xee;\x05<}}H\x02n\xbc..\x93\xa9\x8c\xd9\xbbpN\xbd\xfa\xb8`U\x9e\xb03<\xafr\xc8\xc3y\x02B\x04\xfc\xd4\xdf\\g{\x9f\x1c\xb5\xb9\x88\xafEqP&\x02" \x02\xb3\x8a\x00z1\xe9d\xde\x96\x1c\xde\x11k\xb5\x18\'\x95\x96\x83\xd7~\xc2y\x00\x1e\xa28<\xd4K\xb47a\x12\xb1\x84u\x7f\xffO\xd6\xf3\xf3u\xc1\x8a\xdc|\xea\x06\x05\xbd\xfc\xd8/\xdb\x84\xf46$y\xfd\x01\x82L\x04D@\x04D Z\x02\x12\x00\xa3\xe5\xa9\xdcfN\x80\x02\xe0`\x98Ml=\xce\x01\x080\xf5l\xc4\xc5V\xc2\xccA(\x87\xf8\t\xe4\xd1 oj\x87\xe7\x1f\xc4\xbfK/\xbc\xd5\x1e\xfc\xe3\xae \xa4\xdaL\xcf\x0b6\xf6}\x83\x9f3\xb7\xd2S\xeb\xec\xd5\xf0\xfaC\x1c\xb7\x14\xda\xf4N|\x8e\x7f\xffTB\x15\x13\xa0\xb8\x8c\x190]l\xc0\xbfZk\xf6\x9e\xa7\x87\xbe"\xb8PW\xdd2\x1e\xf5*+\x9a^)\x1a\x85?z\xff\xf1B*\xf1\x0f\x10d" \x02" \x02\xf1\x12\xe0mR&\x02\xb3\x81\x00\x9bW\xbeA\xc48\x80\xb1Zr\x08.2\x10m\x18@ZV\x1b\x048\x94q\xd1\x8av\xbb\xfa{\x1b\xec\xe7_~(\xd8i4\xb9\x0bo\xb3O\xc0\xc95\xd9q\xea\xae\x9c\x13\xcc\xf4\xcbwN\xc8 \xf1o\x02XZT2\x02-^Kb\x98\\j\x04\x1dd\x0e\xd9\x94U=\x01\x8a\x14\xf3\x96\xb4\xd9\x9d\xbf\xdbf\xdf\xff\xe4=n\x7f\x9d\xe7\xd2L\x9b\xdb\xdc~\xed<\xc4\\;\xc3\xac\xa3\t\x82\x0b&bP\xbc\xbf\xaa?\x9fJ\xb6\x83\xf4\x07\xc9\xe2%\x1d\xa6b\nv\x1dSl\xd0\x83s\xf2\xe5\xc7\x98\xfd\xfdS\x82\xady\xceNS\x04\xa4X\xeeE\xc0\xcb>t\xa7\xdd\x7f\xe3N7\x9c^"`1\x07F\xeb\x8a\x80\x08DI\xc0\xdd\xc6qq\xea\\\x18x\x00\xf2\xb2\x19\xab\xf9\x8b /\x88\xae\xf0\x82J\xe3\x9a\xac\x1a\xc5\xbe\xc7\x91^\x8c\xf4\x1d$6B\x15\xf3\x0f\x10d" \x02" \x02\xa5! \xf5\xa34\x9cUJa\x04|S\xaa7\\}\x9a\xdd\xd4\xa9\x0bK%s\x96\x1e\xcd\x06\xfa\x9f/u\xea\xcd\xb4F\x05\x12\xc8e\xf26gQ\x8bm[\xdfk\x97\xbe\xfdV\xb7\x07\x9c\xd4\x80\x1e\x813\xb6\xa7"\xd6\xdf\x871\xe1\x02\x85\xe4!<\xd0\x97\xe7\xdf\x8c\x91\xd6d\x06<\x15\xd95d0+\x9fx~6\xe1\xbc\x9a\x8b\xa1\xe5\xcb\xdb\xcdVu\x9a5#j\x07\x82\xdd\x17%23\x9fn8U\xff\xc5\x11f\xaf\x8bH\x04\x0c\xcf\xf3/\xbd\xe3\x16\xeb\xde6`\x1d\xf3\x9b\x8c\x9e12\x11\x10\x01\x11(5\x016\x143xH\xd2\xd6\x89p\x070\xde\xf3\xa7\xfb\x90\xc3e0\xd5K\xf1m\x07^\xddYM\xf6\xb9~\x80\xf4,\xa4k\xc3\xffu\xe1\x04\x08\x99\x08\x88\x80\x08\x88@\xe9\x08\xf0f$\x13\x81\xd9F\xa0?\xacP\xf4\x02 \x9ba\xb0t2cI\xa4z<\x8bU\xeb+`R\x8d\xafY\x88\x12\x1d\xf3\x1am\x04\xb3\xa3^\xf2\xa6\x9b\xdd.& ^D\x12\xfb\xf1\xe4%f\xff\x84\t?p\x1e\xd9\x10\x02\x83{\xaf\x80j\x04\xa9}\x8a\x96\x80\x17\xfb\xe8\xd9G\x0f?\xfa\x84\xb4\xe2\xa5\x13\x1e,\xf30\x8c\r\xb3K\xdab\x88~\x8c-\xf9\xc8\x1e\xb3_o4\xbb\xec\x01\xb3OC\xc0\xbe\x1bA\xe7\xdb\xd0\xd1\xe5v\x85\x1a\xcf\xcd.x\x02\x9e{\xb8\xd9\xdf\x1e\x1fl5\x83\x0b\x1fg\x00N \xcf\xe4p\xc6\xfe\x13\xa2z._gM\x98p\x84\xda\xa5L\x04D@\x04JI\x80\x0f\xf4\xd2\x08y\xd06\'\x10\x00Yv\xf4\x8d\xc7i\xed\x11\xaf\x88L\xeckqd\xcb;\x91.@\xda\x89\xc4\xab>\xbf\x9b\xc1\x95\x18[\xcbD@\x04D@\x04D\xa0H\x02\x9a\x04\xa4H`Z=V\x02\xbe!\xd4\x17W)\xbe\x00\x0e\xffM\x8dd\xad\xa11\x01O0\x04\x90\x9e%\xad\xc5\xb8\xf6\xbb&\xf3E\xd3\xba\x19\xa2D\x1df\xec\xbb\xf8\x1fn\xb4\xbd\xbb!\x80\xe0@\xe7(\xaa\xcc\xd4N[\x8a\xa6\xfci\x98\xae\x06\xe2_\n\xa3w4\xecw\xa6D\xabs{\x9ej\xeetc?/4^l\x9a\xd0\xf7k\xc6\x90q\xce\xd2K\xa3\x80<\x08\x0fRLNd\x8f\xc3\x01\xfa1\x04\x98\xdf\x88\xf7=\x88\xe1Go\x96\xf1\xf6@\xb7\xd9Y\xabq.\x17\xf9\xfc\xae\x0e\xf90\xbf\x17\xaf\tr\xfb\xe1\xc3\xc1;\xaf}\x07\x141\xbe\xb8C}\xce\xc1\x0b\x86\xc3\xe8\xb7o\xe8\xb7o}\xe0\x0e{\xe7W\x9fe\xd9\xd4\x08\xc4\xc0idv\xa8B\xb4\\\x04D@\x04\n \xc00\x04-\x1d\r\xd6\xd8\x92\xc0\xe8\x0e\\oy\x9d-\xdf\xb5\x88\x17A^\xf4\xc3\x0b\xbc\xdd\x84\xcf\xefG\xba\x03\xc9_\xb89\xecW&\x02" \x02" \x02%\' \x01\xb0\xe4\xc8U`\x01\x04\xe2\xf3\x00\x0c\x0bO\x8e\xa6-5\x9a\xb1\xe6V\x0c\xaf\xc3P\xe0Y\xf3\xbc\xb8\x008Z\xa5@\x02hfw.h\xb6o\x7f\xf0\x0e\xdb\xf2p\xaf\xf3\x08\x88d\xd8\xef)\x10\xff.<\x15\xe2\x1f\xc4\x9aT\xd8\xd1(\xb0JZ\xad\xca\t8\x9d\x0f/\xbc\xa4\xb0\x9b\x87\x07\x0c\xd6\x88>`\x03s\xbf\x1dy\xf2B[{\xf2|\xdb\xbbk\x14\xe1\x15\xc6\xef\x87\xdfB\xef" \x02"\x10-\x01^\x83\x18\x11\xa1\xa9\xbd\x1e^\xff\r6\xd8\x97\n\x1e\xf8E[\xcc\xa1r\xc3\xd5o\xace\x81\x8b\xb2\x13\xff\xba\xf0\xfe]\xa4/"!f\x833~\'\xf1/\x84\xa17\x11\x10\x01\x11\x10\x81\xf2\x11\x90\x00X>\xf6*\xf9`\x02lH\xd1\xfc$ \xc1\x7f\x91\xbe\x06Ep\xb8H\x12C\x80\xe9\x91\xe3\x0b\x8d\xb4\x18eV6\x02\x1c\xe2;\x7fq\x8b=|\xdb.\xfb\xc1\xbf\xdd\xeb\xea\xe1E\x8aiU\x8a:\x06O\x92\x930\xe1\xc7\x85\xa7\x04\x93}\xa4\xb0\x80\x99\xcaj\x83\x80\xd3\xd9\xf0\xc2\xee\x1b\xbbqQz\xf6\xd1\'\x84\xf9SEs\x17#\xf7\x82\x05\x93\xd8fx\x01\xae\x9d\x0f!\x10\xc3\xda\x83\xa7\x18\x93\xac<\xc1W\xdc\x8f\xbd\xd8\xf6\xb5\'B\x04\x84G\xe0\x1d\x0cI5=c\xb5\x19W\x93\xbf\xbb/\xff\xe3\xad\xf6o\xbf>\xd7\xda;\x9bl\x04C\x9a\xeb4)\xce\xf4\xa0j+\x11\x10\x81\x82\t\xf0N\x9c\xc3\xc3\x90vL\x02\xd2\x04\x01\xd0\x19\xaf\xd3\xee\xba\x1d\xfc\x1b\xc3+sgb\x81\xbe1\xb0\x03\x9f\xbf\x87\xf4-\xa4MH4\x7f\x85\x8f\xb76AYz\x15\x01\x11\x10\x01\x11\x10\x81)\tH\x00\x9c\x12\x91V(\x03\x01\xf4n]\xc3\x8aM\xb8\xd8,\x85\xc9\x1b\x1a\xd8y.\xa0\xbf\x1d[%\x94q\xa4\x048\xb9GK{\x83\r\xc0\x03\xe0+\xef\xbe\xdd\xe5M\x11\x82\x93\x16L\xcb\xbcr\xb8f\x1e&\xfc8-\x18.\xaea\xbf\xd3BY\x11\x1b\xf14q\xa7\xca\xb8\xbe\x1a\xcf\x01z\xf6\xb5 f\x1f\'\xea`_o\x00C\xcc\x86\xc3\x98}\x8c\xd5\xc7\x98}\xd3\xf5\xec\x833_\xc1\xe6;\xb5,\xeb\x84\x85AX\xf9\x827\x1e\xb7"\xf3\xe1pc\xc6\xb0|\x1b\x8a\x80\x08\x88\xc0\xa4\x04pI\xce\xc1\x05\xb0\xa9\xb5\x11a]x\x8d\x8e\xddxa\xe3U\x94\x89\x8fS\x1e@\xba\x0c\xe9\xa7HO"\xd1\xf8\x1d\xd7\xe3\xf72\x11\x10\x01\x11\x10\x01\x11\x985\x04$\x00\xce\x9aC\xa1\x8a\x80\x80\xef-\xa2w;\xe6k\x13)\x98\xa0?\x8a\xd6"\x8aJ\xa1\xf3[\xcf_\x80/5\xd2\x92\x94Y9\x080\xf6\x18\xbd\x8f>\xf7\x86\x9b\xac\x0f\x93~p\xa6\xd2iO\xfaA\xef%\n\x87\xf0&t\xb3\xfdr\xb8e\x12my\nB\xb2\xea \xe0t>\xbc\xb0\x8b\xc6\xee\xdax\xcf>\x1e\x7f\x0e\xb3\xf51\xfb\x1eF\xcc\xbe\xedx6\xe1\xe2\xf6\xe1}\xaa\x98}\xde\xef\xa3\x18\xcf\xbe\x03\xa9\xbaS\r/\xfe\x94s\xf5\xc59\xb9\x0euy\xf91\x07\xae]\xdc\xff\xcc\x13qP\x9d\x7f\xca;1\x9b\xf5\xc7o6\xdb\x8d\xa1\xc1\xfe\xbc/.7\\G1)\x08\xb6y\xf0\xa6]v\xcd\xe5\x1b\xedEo8\xca\xba\xb6\x0f;\xef\xc0b\xb3\xd2\xfa" \x02"P\x0c\x81,.eM-\x18\x02\\\x1a\x01\x90\x97:\x04P\xb5\xdf!\xfd\x06\xe9*$o\xbc\xf2\xb3U\xe9\xae\xd6~\xa1\xdeE@\x04D@\x04D`\xb6\x10\x90\x008[\x8e\x84\xea1\x9e\x00z\xd7\xf15\x9e\xe8\xf4\x97C\xd3,\x95\xc4\x0b:\xf8\xd2\xff\xc6\xa3\xaf\xdc\xcf\x14\xfa\x16\xafj\xb3\x9f\x7f\xf9a{\xe8\x96]N\x8c\x98\xf6\x8c\xa4\x14\xf9(\xfe\xcdi6\xfb\xe73\xcc\xe0Uh\xfd\x98\xf4\x83"\x91\xac\xf2\x08\xf0G\xee~\xe8\xe3\xfad<\xc6\x13y\xf6\r\xc1\xb3\x8f\xb3\xf2>9\x14x\xf6=\xba7\x10\xfe&\x9a\xa0\x83\xdd\xc01u\x8e\x9f\xc3\xab\tE\xbfb<\xfb\\>\x07\xe6\xc5\xec\xc2\x8a\x87\xd9r\rg\x19d>\x84\xa1\xbb\x14(gb\x8c\xd3\xc7x\x96s\xe1\xdd\xf8\xfe\xd3\xcd\xfe\xe5\xa6 \xd6 \xebs`\x99\x85\x94\x13n\xf7\xc3\x8b\xee\xb5cO_d\xcb\xd7\xcc\xb1Ax\x05\xd6)\x1e`!\xf4\xb4\x8e\x08\x88\xc04\tpRt^.\xdby-\x8b\xcfxUg\xbf\t\x17J{\x05\x12\x9e\xc48\xe3\x95\xcf_5\xe5\xf1\x17B\xd1\x9b\x08\x88\x80\x08\x88\xc0\xec$ \x01pv\x1e\x97Z\xafU\x1f\x00\xf8F\x14\xbb\xa1lXEf\t<\x9f\xa5\x008\x8aN\xfet\xc2gEV\x11e\x14\x19\x01N\xfa1\x8fq\xffn\xed\xb2\x9f]\xb2.\xc8\x97\x02\x8f\x13P\x8a,\xc65\xe3\xc3\xd3\xee}\xf0\x8cZ\xd0\x86\xa8\x94\x8c\xb5\x16\xe9iXd\xa5\xb4zQ\x04\x9c\xce\x87\x97\x89<\xfb(\x9aQ\x90\xa2g_7f\xe3\x1d\xef\xd9\xb7\x05\xcf\x1e\xb6O1\x1b/\xfd;\x98?\xcf-\x9e&\xd3Q\xca\xdc\xa9\x84\x17\x7fJ\x8d\rQw\x192\xd3}\xb6\xaa\xc3le\'\xd2\x1c\xb3\xd5x_\x854\x0f\xc2\xb4\x9b\xbd|\xdfj\xd3\xfeD\x16\xfd\x10=\x97\xe1<\xff\x00D\xc0O\xdf\x1a\xec\xd24~?D\xe2\x87\xdc\x7f\xed=w\xd8\xbf\xfe\xfcy\xd6\xd8\x92\xc0\xc3\x96\xbc\xae\xb5\xd3>@\xdaP\x04D\xa0\x10\x02\x1c\x06\xdc\xcc\x87u4w\x0f\x08>\xc6\xf0\x8a\x0b\xa6\x13\xffx7\xe0U\x9c\xc2\xe0\x04\x17o,\x95\x89\x80\x08\x88\x80\x08\x88\xc0,# \x01p\x96\x1d\xb2l\r\xca\x00\x00@\x00IDAT\x10U\xc7\x11`\xe3\n\xee7\x86\x1ei\xf4\xe6\xfb\xda#\xfdP\x07\xa6#\x10E_%\xe58\x03\x02\x14s[\xd1\xe8O\x8dd\xec\xbf\xde\x13\xc6\xfdC\x938n<\x0e\xa1\x8f\xb3\xe1\xce\x16\xcf>>\x8d\x98\x03\xef\x955s\xcd\x8e\xc6\x04\x1fG\xe2\xdc[\xdc\x8a\xab`\xa3Y\x07\x12\x85K\x0e\xd9E\xecR\x1b\x86\x87b\x94\xc6\xf3\xbb\x07"\xf7\xf1\x0b\xcd\xdex\x12\xa2Y=0\xedk\xa3\x8b\xb7\x89\xaa>\xb9\xa9\xdf\xae\xb8\xe4!\xbb\xe0\xa3\'[\xd7\x16^\xce\xf9\xe3\x92\x89\x80\x08\x88@<\x04\xd8\x16h\t\'\x01\xf1\xb7\xf1\x88K\xf2\x171\xb6MqQ6^\x88\xfd\xb2\x88\x8bRv" \x02" \x02"\x10\x0f\x01\t\x80\xf1pU\xae\xd3#\xe0\xdbl\xec\xcd\xd3\x0b\x10\xd3\xae\xc6gC\x03I\xcbC\x03\x94\xb6\x13\x1f\xe3R\xe4\x9cH\xe4\xad\x03\xc3~\xbe\xf6\xfe\xdb\xad\x17q\xff\xea \x00MK\xfcce\xfd\x19x\xfe\xf1f\xcfX&\xf1\xaf\x14\x07\xb0\x982\x9c\xce\x87\x97\x83<\xfb \x9c\xd1\x93m"\xcf\xbe\xad\xf0\xeac\x9a\xad\x9e}\xab\xc6y\xf6-\x81\xe0G!0\x8d}\xe4\x93\x8a4v\x94\x9f\xbb!T\xfa}\xe6X7\xfcEn\xbc\x10R\x10=\xf7\x08\xb3-\x10G\xaf\xdd\x1ctm\xfdo\xa2\x88\x02\xeb\xf2\x9c]=oW\x7f\xe7Q{\xdas\x97\xd9\xd1\xcfXd\xbd]\xa3V\xcf\xe3#\x13\x01\x11\x10\x81\x88\t\xf0\xca\x92\x87\x02\xd8\xdaN]\x8e\xff\x04o1\xbd\xc2\x05\xdb\x98"~\x12\x13Sm\x95\xad\x08\x88\x80\x08\x88\x80\x08\x8c# \x01p\x1c\x0c}\x9c5\x04\xd8\xd5E\x0f\xd4\x19\x9bq\xb1\xf4\x1aG\x06\xd3A\x1b1\x96\xdc\xc3\xda\xeb-V\x02Yxo-B\xdc\xbf[~\xb9\xc5n\xfd\xe5VW\xd6\xb4\xc5?\xd7\x83@\x16\xcf]m\xf6\xe2\xb5\x10C8\xec7\xd6\xea+\xf3C\x11\xe0\xaf\xdeu\xe0\x9c\xe2\x17\xac\xb5\x9fg_x\xeb\xe2l\xbc\x8c\xd9\xd7\x0f\xe1j#f\xb1}\x0c\xf1\xfaf\xadg\x1f<\xfa\x8eF\x9a\xcc\xb3\xaf\x07q\xfd8\x95\xf5\x98\xe1\x04\xe4yIQ\xb0\x14\xe7"\x84;\xdb\x0b\x8f\xd7\xd7\x9e\x10p\xdc\x08\x9e\x14\x06\xbd\xdb\xf4X\xbd&\xff\xc0\xdf\xa0\x1fA\xfc\xcd\x0f\xddi\x17\xfd\xe6/\xac\x19C\x813\xe9x{\xe5\x93\xd7J\xdf\x8a\x80\x08T-\x01^\xa6p\xe9l\xee\xf0\xdd\x9aX\xaf5\x14\xff|\xb0A^\xa1c-\xacj\x8f\x99vL\x04D@\x04D\xa0,\x04\xfc\x9d\xb2,\x85\xabP\x118\x04\x01\xf6\x80\xe9\x01\x18\x8f\x85\xfd\xeb\xe4P6\xe8\xd7\xd2\xa3FVq\x048\xe9G[g\x83\xf5<9b\x97}\xf8.W\xffi{\xffy\x91\xe3(\x0c\xbd|\x1d\x86@\xf6C\xfccoB\xee\xa1\xa59/\xdco\x12/\xde\xcbml6\xde\x89<\xfb\xba\xe1\xcd7\x18x\xf5\xb9\x19ygi\xcc\xbe\xe9z\xf6\x95\xf3z\xc4K!=\x0eS8\x10\x17\x9e\x82\tpn\xdc7\xf3u\x91C\xea\xb9:\x7f\x8f=;F\xec\x8a\x8b\xef\xb7\xd7}\xe2T\xcc\n<\x04-\x93\xfde\x99\x08\x88\x80\x08DK \x87X\xc0\xcd\x0c\x99\x00\x8bI\x91\xf3\x17/\n\x80-\xae \xbd\x88\x80\x08\x88\x80\x08\x88@\x85\x11\x90\x00Xa\x07\xacF\xaa\xcb\xb6\x1bz\xf8\xf1Z\x12\xb3_\xfa\xd6\\\xbc%)\xf78\x08\xd0)\xaacn\xb3}\xeb\x9f\xffh\xe9d\xd6\t\x0b\x14\x05\x8b6\x9e\x04\xdc\x8e\x1d\x87\x0bO\r\x04\x10\x8a \x12*\x8aF9\xe5\x06<<\xee\x109\xc5/X\xbdP\xcf>\xc4\x94\xb3\x9e\xd9\x18\xb3/\xf4\xecc\xbc\xc8\x85\x87\x88\xd9Wn\xcf\xbe)\x0f\xcc\xb8\x15x<\x86\x11gp\x01\xfa\xb7\xfc=|\xe1N\x1c3\x1c4\xfeN\xdc\xb1\x1b\xb7\xee\x94\x1f\x83\r\xae\xfd\xfeF;\xfd\xafV\xdb\x9a\x13\x17Xo\xb7\x86\x02O\x89M+\x88\x80\x08\x14E\xc0\xb5\xe5p[ii\x0b\x1f\xe8\x16}\xad*\xaa8\xaa\x8c\xe1X\xe3\xa2\xb6\xd3\xca" \x02" \x02"Pv\x02\x12\x00\xcb~\x08T\x81\x03\x08\xf8n\xa6\x17\x00#o\xc6\xf9\x0cG0\x0b0\x03\xd6SH\x92U\x16\x01\x0e\xfd]\xb8\x02C\x7f\x7f\xb5\xc5\xee\xbev\x87\x13\'\x8atP\nv\xd8\x8fS\xe4\x7f\xef<-\x98]u/\x87\xfe\xba\xeeDeA\x99\x8d\xb5u:\x1f^\n\xf5\xec\xdb\x86\x9f\xbd\xf3\xeac\xdc>\x08~\xf0\xe8\x98\xd0x\xdc\xca1\x1b\xefjL\xd0\xb1\x02\xb3\xf2r6^&N\xd2Qh\xcc\xberz\xf6M\x08q\x92\x85<\xff9)\xc8\xa9K\xcd^z\x94\xd9/7`e\x7fi\x9ed\xbb\x03\xbe\xe2o\x92\x1e\x7f\x14\xe6/\xff\xe8=\xf6\xaf\xff\xf7|klJ\x18=ud" \x02"\x10\x19\x01\\\x9ex\x9dij)I\xb7\x86w\x1f&\x99\x08\x88\x80\x08\x88\x80\x08T\x1c\x81\x92\xdc)+\x8e\x8a*<\x1b\x08p\xda\xc8Xmt\x04C\x80c-A\x99\xc7A\x80\xc7\xac\x15q~\x06 P\\\xfe\x89\xbb]\x11N\x9a\x98\x8e\x02\xe8\xb7y\xd5\xb1f\'-\xc2\xa4\x1f\xf00\x93\xf8W\xfca\xa3\x9e\xe34\x9dq\xbf\xa8\xc9<\xfb\xfa\xc0yS\x18\xb3\x8f\x9e}\x9c|b"Q\x88\x07v??\xddP8\xe2q\x83\x93Z\xc1\xe6\xf2\xe1\xdac\x1f\x82M\xdd\xf1G^a\xb6n!\x05=L*\xe3f\x80\xa6W_\xb5x\xf6\x05{\\\xf8\xab\x17\x01_q\x8c\xd9\xfd]fO\xe08\x8d\x17\xcc\x0b\xcc\x89\x9drn\xb6\xed\xd1>\xbb\xea;\x8f\xd9K\xdev\xacuo\x1d\xb6D\xc3\x01\xc7\xa2\xc0\xfc\xb4\x9a\x08\x88\x80\x08LD\x80\x13\x0f5\x94\xe6\xbaB\xef?\xf5\x9f&:\x08Z&\x02" \x02"0\xeb\t\xe8\x066\xeb\x0fQ\xcdU\x90\xbdBv\xc7\xbd\x07`l\x00\xe8\x01Xlp\xfb\xd8*\xa3\x8c\x0b\'\x00A\xa1s>f\xfd}\xef\x1d6\xdc\x8fc\x88\x99E\xf3\x13\x89GS\xe5H\x81\x03y\xd9I\x98l\x9a^N\xf4x\x92\xf87\x15\xb5\xe0{\xa7\xf3\xe1e6{\xf6Qu\xf2\xc6\xe3\xec\xcc\xbf\xfb/\xf0\xbe\x8a\x1e}5\xe2\xd97n\xb7\x0b\xfa\xc8\xa1\xf0\x19\xa4w0\x1e\xe0\x1f\x82\xdf\xcb4D@\xef=\xf8\xbf\x17?`\xa7\xe8\xf6\x9bz\x83\xd9x\xcb\xed\xd9\xe7\xbd;}\xbd\x1b\xe0\xd9\xd79\x81g\x1f\xcf\x01\xc6\x7f\xac\xc7\xf7\xa3\xb8&$\x91*)f\x9f\xdf\xbf8\xde!\xae\xdb fY^\xden\xf6\xfa\xa7\x98]\xf6\x80\xbbf\x16[\x14g\x05\xf6C\x81\x7f\xfc\xf9\xfb\xed=\xdfx6\xc4\xfbbs\xd1\xfa" \x02"p\x08\x02\xb8T\xf1\x92_\xdf\x18\xebM\xdcg\xce\xe1\xbf\xea?\x1d\xe2Ph\xb1\x08\x88\x80\x08\x88\xc0\xec&\xa0\x1b\xd8\xec>>\xb5X;\xdf\xc0\x8a\xd1\x03\xd0)\x1a62\x98\xc6\x10`\x14\'\x05\xb0b\xce\xb3 ~\x98\xed\x1b\xfa\x0b\x8f=\xc6q,\xcax\x86yq\xe8-\'c\xb8\'&\xf4\x93\xf7_\x80\xd0\xe9|x\x99\x96g\x1f\xe2\xf6e\xc7\t\x85\xe3\x0f\n\x7fc\xec2\xf1k\xb2w\x87\xac\xc8\xe3\xc6\xfcx\xec\x98\x97\xb7\xb1c?A^\x85z\xf6\xa5P\xa9a\x0eAF\xa6\xd0\x00\x8d\xb1\xfa\xfc\xbb/\xa7\x96\xdf\xfdP\xe0\xe7\x1d\x8e\xa1\xc0\xbb\xcd\xfe\xb43\xf0\x94\x1dc_\x18\x1c?A\xcf}\xd7\xef\xb4{\x7f\xbf\xd3\x9e\xfa\x9c\xa5\xd6\xd3\xa5\tA\n\xa3\xa7\xb5D@\x04\xa6$\x00\x17@\xb6\x11J`\xec;\xa9\xffT\x02\xd0*B\x04D@\x04D z\x02\xba\x81E\xcfT9FC\xc0{\x00F\x93\xdb\x04\xb9$\x87\xb3\xce{\xcc\xe9\x7f\x13|\xafE\xb3\x8b@\x0e\x13\x7f\xcc_\xd6jW}\xfbQ\xdb\xf9x\xa0\x0f\x17-\xfe\xb9]r\n\xa0\xd9\xb9\x104N]\x8e\xb8\x7f8\xd5jm\xe8/\xf52\xa7\x99\x8d\x13\xec(|\xb1\xf3t(\xcf\xbe\x8d\xa1g\xdf\xe3x\xdf\x93\x9cX\xecs\xda\xdc8\x81\xce\xfbfR\xf4\x8b*f\x9f\x17o\xfd\xe9\xe9=\xfb\xd6 ^\xdf\xd1H|\xe7l\xbc\xf2\xec\xf3\x84f\xfe\x9e\xc31\xa5\'\xe0\xdf\x9fh\xf6\xd0\x1e\x08\xa6\xf0\x98\x9d\xc6\x83\x13\xef\x05\xf8\xa3O\xdfk\'\xfe\xea\x85\xd6\xd4\x9c\xb0l\n\xe7FI\xfa\xec3\xc7\xa0\x1cD@\x04f+\x01L.\x84KICsI\xe6\xe6\x90\x008[O\x03\xd5K\x04D@\x04D`J\x02\x12\x00\xa7D\xa4\x15\xcaD\xc0{\x00:\x99"\xca:\xf8\x0c\x93\xc3\x19\'O\xd49\xb7"\xbf4\xca\x92\x94WT\x048\xf4\xb7mn\xa3\xed\xde8\x9d\x0f/\xde\xcb\xad\x11\x8aK#:J\r\x18\x12\xcba\x9eL\x9c\xfc\xa2\x07<\x1e\xee\xc6\x8c\r\xf8\xf9\x8d\xcd\xc6+\xcf\xbe\xa2\xce\xb1j\\\x99\x02\x1d\xae\x97\xb6\x08\xc2\xea\xdf\x9d`\xf6\xf5\xfb\xf6y\xd1\x16\xb1\xbf\x81\x17`\x9d\xed\xda\xbcL\xea\xd9\x87\xfdf\x8c\xc3\x87 \xd8l\x1f\xef\xd9\xd7\x17l7\x11H\xf6\xa2\xe8\xdf\xc0\xfc\x15\xb3o"B\xb5\xb9\x8c\x0fL8I\xca\xdf\x9fd\xf6\xc1\x1bq~\xe0\xffb\x87\x02\xe3\'X\x07\xe1\x90\xbf\xeb_\\\xfa\xb0\xbd\xf9sO\xb7\xdd\x83C\xd0\xffp\xce\xc9D@\x04D`\x06\x04J(\x00\xfe\x7f\xf6\xbe\x03@\xae\xab:\xfb\xec\xcel\xef\xda&i\xd5e5K\x96\x8b,\xdb\xc8\xbd\xc76\t\x0e`\x83C\x0b6\xc6\x10 \x10JH\xe0\xff\xe1\x87\x10\x08-\x84\xdeKB\x80\x98`S\x02\xd8\x04c[\xee\x1d$\xd9\x92,Y\xbdo\xef}f\xff\xef\xbb\xef\xdd\xd9\x99\xdd\xd9\xddy\xbb\xd3\xe7\x9c\xdd3\xef\xcd\x9b\xf7\xee\xbb\xf7\xbb\xf7\xdd{\xeey\xe7\x9e\xa3\x1d\xd6\x1c\xeaI/U\x04\x14\x01E@\x11H\x1d\x02\xaa\x00L\x1d\xf6z\xe7\xe9\x11\x80\xa9\x89!\nY\xd4\xf6$D\xd8\x1a\xe8\x1b\x91\xca\xe2b$OM\x87R:"\xc0\xe0\xac\x85%>\xb9\xf3\xd3\xcf\x9b\xec\xcd\xca\xfa\xcfZ*q\xe9\xefMk\x9c\xa5\xbfI\x9a)\xc4\x15S*\\,\xa5\x93\xcf>\xe6\xc9<\xa1\xe1\x8f)\x1e[>\xb9\x13\x95\xb5\xd1,\xfb\xea\xb1\xb4\xb4\x04\x91x\xe9\xb7\x8f\x9ax\x8d\xc6kk9\xbd\xb6T\x98\xa3\xcf\x94FD\x05\xbee\xad\xc8\x8fvN\xae\xdfXr\xec\xb6\x89\x87\xef: W\xbdq\xa5\xcc_V!\xbd\xb0.\xcc\xcft\x85|,e\xd7s\x14\x01E q\x08\x84\x0fA\x89\xbb\x0bSN\xde\x9d\x12[\x0eM]\x11P\x04\x14\x01E \xc7\x10P\x05`\x8eUx\x06\x14\x97*\x03\x12L\x96\x8c\xfa\x80vy\xf6\x18\x8f\xc7\x95\x86\xfaF%\x1f\xc6`J\xe9\x89\x00}\xff\xcdC\xe0\x8fg\x7fwL\xf6>\x0b\x0b6\xd0D}RL9\xb7K\x7fi\xb9D\x05T\x0f\x14i\x99\xa6l\xa0b\xac\x0c\n2jD\x99w*5\xc3-\xfb\x8e\xc0W\x1f\xf9X\x92-\xfb8\rB=9Oi\x94G\xd5F\xe3m*\x17Y\\!\xb2\x08\xdc\x00\x85\x1f\x15\x98#\xa8\x07\xd6\xcd\x08L\x18\xb9\xdf\xa2\xd1xcj\xcf\xa9<\x89\xed\xae\x13\xdd3\x83\xe8<\x8a\xa5\xc0\x07\xd1\xde\xac\x82=\xc6|\xf1\x19\xb6\x8a\xfc\xff\xf9\xda.y\xd7W_&}\xdd1^\xac\xa7)\x02\x8a\x80"0\x15\x02\x1cW\x12O\x1c\xf5\x94\x14\x01E@\x11P\x04\x14\x81\x8cD@\x15\x80\x19Ym9\x91iZ\x00ba\xae\x14%\xb2\xb4\xb4\x00\xcc7\xae\x9ciY\x95\x14\xc11\x91\xc5\xc9\xba\xb4\x0b\xe0\xd0;82&w~\xce\t\xfc\x91\x07\xab=\xcf\xcb\x7f\xed\x12\xc5\x0b\x16\x88\x9c\xdd \xd2\x9c\x81K\x7fM\xd3\x84\xd6\xe4\x00\xb4$\x87\x10\x85wo\x07\xf6\xb1MI4^\xe4\x03\xff\x935\xb1\x98\x13a\xa9\xb6\x9c\x86(\xbcdF\xe3\x9d\xca\xb2\x8f\xf9\x1e\xe33g\t\x05\xe4\x94\x8aJN}\x0c-(\xe9\xbb\xa5\xb2\x96m\xe0\xf5\x08\x08\xf2\x89\xc7\x1d%.\xeb\x8f\xc7b$\' \x88\xc83P\xee\xef~\xb2E\x96\x9f9OzZ\x87\xdd\xfe8\xc6D\xf44E@\x11P\x04\xc2\x10H\xa2f.\x89\xb7\n+\xa0\xee*\x02\x8a\x80"\xa0\x08(\x02sD@\x15\x80s\x04P/O\x18\x02\xb4\x00$S\x01\xc8ieB\x84\xad\xa1\x81\x00\x0c\x91\xa0q\xf00qE^\x94\x92\x80@`tLj\x9aJ\xe4\xc1\x9f\xec\x97\xe6C\x8c\t3\x07\xe5\x1f-\xe6nF\xd4\xdf>\xea\x943\x8c\xa8\'+\x84\x96\xfa80\xf8\xe7\xc7\xa2g\x9eJ\xceT\xf8\xec[R\x05%\x1f\x96U/\xc4\x92PZ\xf7\xcd\x87\x95\x1f\xf3\xaa\x96}\xd1\xeb)[\x8e\xf2y\xea\x82\x12w\xed<\'(\xc8cG\xf1x\xe2\x98G\xf3\\k\x05\xf8\xf3/\xed\x94\x7f\xf8\x8fKU\xf9\x97-\xedC\xcb\xa1\x08\xa4\x08\x81|\x15\xe6R\x84\xbc\xdeV\x11P\x04\x14\x01E S\x10P\x05`\xa6\xd4T\xee\xe4\xd3\xaa\xe2\xa8\xa9I\xb8\xb6fx\x90\n\xc0\xdc\x017SJJWw\x85%\xf92\x08\x0b\xcd_}c\xb7\xc96W\xbe2\x06\x81\'\xb2\n\x89\xd7\xc0_\x19\x15U\\b\x9aqK\x7fQb.\x93]\x08\x05\x9b%\xe8Z\x1c\x9d\xb8\xfb\xb8\xb0\x9c\x88\xcd\x103\x99\xebyvh\x07\xfbH\x83\xc9Y\xcc\xf83i\xa2\xcf\xbe\x95\xb0\xec\xab\x0b\xf3\xd9\xe7\x87\xc2\xcf\xf8\xec\xc32\xde\x1e<\xb2\xe1~\ni\xce\xc7[\xa8e\x9f\x812\xab>\xb8\xec\xb7\x17\xfe\x00o\xc2\xb3\xf5$\x96\x02s\x198\xeb\x9am(F\n\xbam\x8d\x16\x80\xdb\xb6\x9e\x94\r\x175H\xc7\xa9\x01\xf1\xb1\xcd))\x02\x8a\x80"\xe0\x01\x01#\x1ep\xacI<\xb1\xa7#+)\x02\x8a\x80"\xa0\x08(\x02\x19\x87\x80*\x003\xae\xcar&\xc3\x98Y&A\x018\x00\x1f\x80\x9c\xc8*\xa5\x15\x02\\\xe6[Y\x03\xeb\xbf;\x0fH\xfb\t(\xed`]\x14\xb0~\xfcb\xcd\xa9\xb5HZ\x00\xab\xb4\xab\x969~\xcb2M\xf9g\xcb:\x8a\xa9M9\xba\xeb\xe5\x95\xce2`\xce=&*\xea\xec\xb9\xd1\xb6f\xba\x12\xd6\xceCXF\xd1\xd6\xd0g\x1f-\xfb\x8cU\x1f\xb6\xfc\xde\x00\x0b?^\x1e\x8be_r&`\xd1J\xa9\xc7\x92\x8d@?\xb4\xceT\xac\xdf\x0c%\xe0Ov\xa1M\xb2\x91DiSS\xe5\x0b\xa7Z+\xc0_}e\xa7l\xbcd\xbe*\xff\xa6\xc2J\x8f+\x02\x8a\xc0\xb4\x08P\xf5\x17\x0c\xe0ET\xe2\x89\x9d\x9c\x87\x8e.\xf1\x19\xd2;(\x02\x8a\x80"\xa0\x08(\x02\xb1"\xa0\n\xc0X\x91\xd2\xf3\x92\x8d@R,\x00G\x86`\x01\x08E\x91\x17]J\xb2\x81\xc8\xc5\xfb\xd1\xf7\x1f\x97g\xff\xf2k;M\xf1QC\xde\xa5m[\xa9\xb7`\xe9/\x95RT^e\xaa\x02\x90\xa6\r\xcc\xfb2X\xdf\xd1\x0f\xe0Tz\x16\x1e7\x14\xda\xc17\xccS\xccte\xc2|\x85VVU\x85\x8e\xaf>Z\xf5M\xb4\xec#f6\x1ao\xdb\x00\xd20\xf6\x15n\xfa\xf8\x8d\xb7\xe09\xf8W\xcaQ\x04\xa8d\xef\x82\xa7\x86\xcb\x97\x8a\xfc\xe1\x10\xfck\xba\x16\xb6\xb4\x06\x8c\x91\xac/\xc0}\xdb\xdbe\xc7\xa3\'\xe5\xf4\xf3\x1b\xa5\xab\xb5\x1f\xcb\x81\xb5a\xc5\x08\xa1\x9e\xa6\x08(\x02.\x02A/\x96\xf0\xb3G\x8dZ\xc6\xa4h\x1ag\x9fE\xbdR\x11P\x04\x14\x01E@\x11\x88\x8e\x80*\x00\xa3\xe3\xa2GS\x8f\x00\x15\x80\xb4\x02L\x08Y\xe3\xb0\xc1\xfe\x80Z\x00&\x04\xe1\xd9\'j|\xff-*\x91\xfb\xfes\x9ft\x9c\x84\xe2\t\x9a&\xcf\x81?lT\xd2\x8d\x08\xf1\xcc\xc0\x1f\x8c\x96\x9b\xa9\xca?BI\xe5\x1b\xf3\xbf\x1c\x8a\xba\x07\x0e\x8f\x83K%\x1c\x1b\xb3\xa5DZ\xf6\xe9Zy\x8b\xb2n-\x02\xd4\xd1\r\xa3mVb\x87K\x81\xbf\xfa\xdc\xac\xa6\xc5!+\xc0\xaf\xee\xc42\xe0\xf9\x92\xa7\xca?\x8b\xb0ncE\x00:g\xd3\xfd\xb9/*\xec\xfb\x1fs9\xbaH\xd3K\xa2\x0fS\x03\xe5X\x01\xcd\xc0\xf3\xd0\r\x8dF\xb8\xa0HX\x19\xf8\x86C\x15\x80\t\x83W\x13V\x04\x14\x01E@\x11H$\x02\xaa\x00L$\xba\x9a\xf6\\\x10\x08_\x02\x1c\xbb9\x89\xc7;\xd2\x02P-\x98<\x82\x96\xc0\xd3\x8d\xef\xbf"\xf8\xfe\x83o\xb1{\xbf\xfd\xa2\xb9\xd3\xac|\xffYE\xd8\xabV\x8b\xb0\x8ei\xbcFeE&\xd3\x08\xca\xd1\x88\xa5\xb8$S\x1eLiY\xce\x88\x99.~\x8b\xb0\xec\xab\x81e\x1f\x96\xf1\xd6\xc2g_i\x01\x96\x11\x83\xd5\xb2\xcf@\xa8\x1fqB\x80\x8a\xe9\x0e\xbc\xaf\xd9<_d)\x96\xa8\x1f\xa2\x85*\x8eMl\x97\xd3\xdc\xce*\xf8_z\xae]v?\xd6,\xab\xcf\xab\x97N\xf8\xeb\xf4\xa9"p\x1a\xd4r\xef\'6\xa91*\xf8\xc2%\x024\xb5<(\xf6|\xb0\x1a/D\xdf\x97\x0f\xa9\x96\xed&\xdf\x9f\x07\xa5\x1f~\x04\x8d\xa1\x9f\x0c\xc0\x8d\xc20\xac\xcaG\xd0\x8f\xf2;\xdb\xa8\xba\xff\xc8\xbe64\x96<\x0b\xc0\xf0V\x98\x08 \x9d\xc6\xeb\xea\xaegq\x03\x9b?\xbb\x9dE\x12z\x89"\xa0\x08(\x02\x8a@6"\xa0\n\xc0l\xac\xd5\xcc.\x93\x15V\x12\xbc\x04\x98\xb2\xd5\x18\x96\x99\xba>\x00\xed]3\x1b\xbb\x8c\xcf=\'w\x15\xf3J\xe5\xb1_\x1c\x92\xd6\xe3\xb3\xf4\xfdg\xad\xff.]\x0c\xe5\x17\x14`\x0c\xfc\x91\xe9~\x1ei}\x87\x805R_<\xae\\\xa1\x12\x90\xc4\xe8\xbb\xe4\x85P\xbep\x1b\xf2\xd9\x87F=\x02\xe6d\x97\xcaC.\x81&\x16\xd85\xcaP\xa6I\xa5(\xb7J\x8a\xc0\\\x100\xd1y\xd0\xcenZ#\xf2\xb9\xa7\xa9\xa5q\xa6\xad\xd8\xc4B<=d\x05\xf8\x8d]\xf2\xc1-\xf5\xe2\x87b1\xc6\xcbc\xb9\x85\x9e\x93\xa1\x08\xf0\xa5\xd0\x98\x1b\xfd\xa9\xa0\xd8/\x05E~\xf1\xe3%Q>\x14x>*\xf9\xf0B#/\x7fLz\xdb\x86\xa4\xb7}H\xfazF\xa4\x1f\xc1\x88\xfa\x19\xa0\xc6\xd5\x15\xfaq^IE\xa1,\\Q.\xb5\xf0m\x1a@_8\x04\xff\x95}\xdd#\xe2\xe3\xd8\xa0]`\x86\xb6\x8e\xf0l\x07M5\x8e&\xc7\x07 GQr<\x89B)\xd9\x8c\xca\xd8R\x95\xc9.p\xae\xdd \xde\xfa\x99W\x86\x94\x18\xe6\x9a\x16\x92PR\x04\x14\x01E@\x11\xc8t\x04T\x01\x98\xe95\x98\xbd\xf9O\xe8\x12`#fA\x14\xa2E\x00\xad\x04T*J\x8f\x86\xe4\x87\x05\x07\'|\xf7\xfe\xe0%\x93!\x8f\x86D\x8e\xf8L\x85\x17E\xe8\x97\xaf\x14\x19H\xd8*\xf2\xe4\x02\xc6\xf2P\x81W\x06\x9f}W.\xa1\xb6D\xe4L,of\xa0\x8e\x12\xb5\xecKne\xe8\xdd&!@+\xc0\xae!\x91\x8dXn\xbfv\x9e\xc8\xeev<\x8b8\xe6\xc1\n\xd0\xfa\x02dD\xe0\xbd\xcf\xb6\xcb\xb2\rU\xd2\xd31b\x9a\xfa\xa4\xfb\xe9\x81\xacE\xc0\xac\xe0t\x97\xf1R\xb9W\\\xea\x97\x8a\x9a\x02(\xf9\xf2\xa4\xbb}Xz;\x07\xa5\xf3\xd4\x90\x1c\xdb\xdb%\xc7\xf6uc\xdb#\xc7\xf7vK_\xd7\x88\x8c\xf2E\xc74D\xbf\x92\rK\xcbd\xcb+\x96\xca\x05\xd7-\x92\xf9++\xe0orHF\xf0"0\x8fmX)\xb3\x11@{\t\x8e&E\x9a\xa32\x8d<[bc\x9b\xd8\xe0\x98\x1e3\x1f\x9e."p\t\x19o\xf6\x84\xe6\xff0\xe7\x17t\xb0f\x1ff\xfd\xe2\x03\xb3\xd1\xc3\xc7\x89\xf4\x80O\x81\xbb\xdc}\x98b\x9b\xfdp!\x88\x92\x84\xa5\xf0\xfb\xd8c\xbaU\x04\x14\x01E@\x11\xc8\x01\x04T\x01\x98\x03\x95\x9c\xa1E\x0c_\x02\x1c\xf7"P\xf2\xa2\xa4\xc5@\x13F\x84\x8a\xfb\x1d4A\xaf\x08\x04`\xe5Q]W,\xbb\x9fj\x96#\xbb;\xcd\xe5f\xa9\x96\x97\x84\xac\xd2\x81\xd6\x7f\x8c\xfek\x83\x12xI#\x9d\xcf\x1dF{\xb5AM\xd4\xb2/\x9dk*\xf7\xf2\xc6\xe9$\xdb\xe7\xaba\x05\xf8\x89\xc71\x8d\xf5>\x11\xe7\xb2MN\xe0\xef\xfd\xde\x8b\xf2\xdeo]$=mx\x0f\x94\xe9\xd6\xbb\xb9\xd7\x12fUb\xf6\xff\x1c\x94\x8bJ\xfcR\x8c\x17\x1d~,\xe9\xa5R\xee(\x94{O\xfe\xe6\x88\xbc\xf4\xc7V9\xb4\x13J?(\xfefKA\xdc\xe3\xe4\xfe\x1e\xb9\xfb\x0b\xcf\xcb\xcf\xbf\xf8\xbc\\\x7f\xfb\x1a\xb9\xe1\xf6\xb5R\\[\x0c\xe5\xe2\xa0.\t\x9e-\xb0\xe9p\x9d\xdb\xddx\x96\x19\xbc\xe5\x9dw\xa1\xf8\x88\x8enV\x16\x80T\xc0\x91y\xfdD\x05\x1cL\xf8e\x03\xf8t\xf0i\xe0\xe5\xe0e\xe0F0\xfc+H\x118Vj\xc6\x89G\xc1\xfb\xc1;\xc1\xdb\xc1O\x80\x8f\x81-1\x1f\xb6,\xf6\x98n\x15\x01E@\x11P\x04r\x00\x01U\x00\xe6@%g`\x11)\x94P\xd0\xa2\x15 \xc9\x15\xed\x9c/\xf1\xfc\x1c\x86\x7f8\x1aS)\xa5\x1e\x01Fc.\xc4\x12\xaf\xdf|\xd3\xf5\xfd\x07e\x00\x03\x82x"\xabtx\x05\xe4g,\x03\xcb\xe8\xc0\x1f\xd1\n\xce\xf2u\xf3\xb1\xb0\xb8\xa0\xf1\xf2ia#\xd6v\x1c\r1=\x96,\x04\xa8\xa8\xe3\xb2\xcb50P9\x13\x96\x80\xdb0\x07\xe51\xfbL\xc6\x90\x8f17z\xf0s\xf7\x1d\x97\xfd\xcfwH\xe3\xd2r\xe9\xed\x18BD`6r\xa5lC\xc0X}\xc2J\x94>\xfb\xaa\xebJ\xa0\xf8\xf3K\xfb\xa9\x01\xd9\xb7\xad]\xb6=pR\x9e\xf9\xdf\xa3\xd2r\xa4oR\xb1i\r\x18A\xa6;\xb4}\xa2\xf3K\xe4\xb7ps+\xd8\xfc\xb3Y\xa2]r\xacy\xfa\xdec\xf2\xae\xafl\x91\x05+\xcb\xa5\xbbe\xd0X\x1aF\xa4\xad_2\x06\x01\xd6\xeb(\xdd^$\x9ex\x93\x89\n\xbc\xa9\xee\x1a>2\xf3\x1a{\xddB\xec\xe3m\x89\\\x0c\xbe\x0c\xbc\nL\xeb\xbeRp4\xe2u\xbc\xef\x84\xc6\x1fq*\x7f\xe7\xfd\xd0\x01\x1b>\'\xecWZ\x07\xee\x02\xdf\x05\xfe\r\xf8\x00\x98d\xf3g\xf3\xe5\x1c\xd5OE@\x11P\x04\x14\x81\xacE@\x15\x80Y[\xb5\x19[0\n0vYC\xf8\xd2\x85\xf8\x16\x88"\x0f\xc4\x9da\xf8\x01\x827\xa1\xf8\xa6\xad\xa9yF \x80\x89\x7f\xd5\xbc"c\xe5\xb1\xf3q\xbe\xbcF\xf5\xf0\x1d\xb9\x17\xb2\xca\x86k\x96#\xe8\x05d\xe86D\x10\xe6\x8c \xdb\xc8L~\xb3\xb0\\\xd9VO\xb9X\x1e*\xfb\x10lAnX\xe1(\x00\xf9\x9d\xcf`\x8cK\x81\x8d/@(\xfb\x82\xe8\x0f\x1e\xfb\xc5A\xb9\xe5C\x1b\xa5\xaf#\x17\x81\xcc\xee2\xd3\xda\x8f>\xfcJ+\x0b\xa4\x04\xc1\x89F\xd1fv=vJ\x9e\xfd\xc3\t\xd9\xf6\xe0\t7\xfa\xfb8\x06lB>\xb6\x0b4-\x06\x8c\x99\x8d\x95\x17\x05\x0b\x87p\xbd\xdb,\xd96\x9b\x0f\xf5\xca?\xdd\xf4\x07\xf9\xc7\x1f].K\xd6VJg3,\x01\xf1\xf2I)\xf3\x10\xa0;\xdba\xfa\xcaM<\xd1?\x9f\r72\xde\xb4"\xefK9\x96\x14\x9e!\xbc\x99\x94\xeb\xc0[\xc0\x17\x82\x17\x83\'\x12\x15q\xbc\x86\x8d0\x9c\xbd\x08\xaa\xcc\x13\x99i\x918\xd7\xa3%!\xf92\xf0?\x83\x7f\x01\xfe\x01\xf8\x010\x89\xf9\xe5\xf9S\x95\x87\xe7()\x02\x8a\x80"\xa0\x08d\x01\x02\xaa\x00\xcc\x82J\xcc\xc2"X\xe9\x9b\xa6N\t\xa5\x91!\xc8;\x10\xab\\\x97C\t\xbd\x97&>5\x024`+(\xf6\xc9Cw\x1f2\'\xd1\xe2\x87J\x80\x98\x89-\x86\xca\x06&t\xe5R\x11(vg|W\x1es\xe2z\xa2"\xa0\x08\xc4\x84\x00-\xf5\xe8\x0bpM\xad\xc8:\x18\xb3\xec\xa2/@\\\xe9\xe1Q\xb6\xca\x9d\xfb\xfec\x9f\xdcp\xc7:\xf1\xa3_`\xd0\x06\xa5\xccF\xc0\xfa\xf6\xa3\x1f\xbe\x9a\x86R\x13\xc0\xe3\x04\x96\xe3\xdew\xef>\xb9\xef\xc7{\xa5\xab\x19\xed&\x8cBV~T\xf8\xa1\xfd\x8cz\xb5\x06\x0fK+\xda.\xd3d\xc2TDRi\xf4\x99\xbf\xde*\xff\xfc\x9bk\xa4\xb4\xaaP\x06\x10\x1c$\xcf\xaao\xa2]\xac\xc7\xd2\x0f\x01\xd4\'\xdb\xcc\xc8\x90\xd5\xcb%4\x8b|9\x1d\xed\x055{;2\xc9*\xfeh\xe9w%\xf8M\xe0\xb3\xc0\xe8\x1cC4\xb1c\xe3\xb5\x10b\xe6\xfcV\xda\xe6\x83i\x91\xd8\xdaIv\xcb\xe5\xc6o\x04\xbf\x06|?\xf8\xe3`.\x11&\xf1\x9a\x89\xf92?\xe8\x87"\xa0\x08(\x02\x8a@v `\x07\x87\xec(\x8d\x96"[\x10\xb0\x02T\xe4\x8c \x01\xa5\x1b\xa6\xf3o{\xb7\x04\xa4\xafI\xc6\x86@a\xa1\xcf\xf8`\xdaz\xe7~s\x81g\xeb?[\x89\x97.\xc2;u\xf8\xfe\xeb\x87l>q\x99XlY\xd1\xb3\x14\x01E`.\x08p\xea\xc8H\x9c7\xaevR\xa1b\xde\x03Q1\xc3\xc0L\xb4\n{\xe4\xee\x03\xc6/h\x80V\x85J\x19\x8b\x00]9\x14"rouc\x89\xe1\x17\x1e=)_\xfe\x9b\xc7\xe5\x1f\xff\xecwr\xd7\xbf=\x1fR\xfe\xd1\xf2\xce*\xfe\xa8\x086\xec\xad\xf9x\xc6(\x88\x06G\xeb\xc2\x01D\x0f\xfe\xee?>\x03\x1f\x84\x8e\xef\xc1\x90\xaa\xc4s\x8azA*\x10`3a$q\x06v3\x94X\xb9\x8e/\xa7\'*\x00iP\xc1l\xb0\xb3"\xd3\xca\xef\xcb\xe0\'\xc1\xff\x01\xa6\x12\x90\xca?f\x90ZJ\x9e\xc39X8\'*\xd7L\x97l\xef\xc5|2\x0f\xf4+H\x8b\xc4\x87\xc0_\x00W\x83\x99/U\x7f\x03\x04%E@\x11P\x04\xb2\x15\x01\x0e\x06J\x8a@\xba"\xc0\xc8f\t%N29\xb9T?\x80\t\x85y\xda\xc4i\xddS\x8e\xe0\x1fO\xfc\xcfQc\x89\xe9H\xc0\x1eg}V\xc9p\xdd\n\xd7G^\xa2\xe4\xe8i\x8b\xa2?*\x02\x8a\x00\xad\x00aA%\xeb0\xd7eD`\x92U\xd0;\xdff\xfc\xccw\xd7&l\xfd\xe9\x01\x19\xc4\x84\x9e\x01!T!3#l\xe9u\x02\xd4\x08\xb4\xe2\xa6B\xaf\xae\xa9L\xfc\x85\xf9\xf2\xd4o\x8f\xcaG\xfe\xfc\xf7\xf2\xaf\xb7?*\xcf\xde\xe7\xc4#\xe0\xef\xf4\xff\xca&\xc2\x000\xd6\x024\x99\x85\xa1\x0b\n\xd2\x0b\x8f\x9e\x82\xdf\xc1\xe3RU[\x08\x1d\xb6\xc71(\x99\x19\xd6{M\x89\xc0\x10\xfc:\x93\x12,\x01P\xf9G\xe6m\xec<\x8a\n5F\xea}\x15\xf8~\xf0\xef\xc1\xef\x04\xe3\xaddH)\xc8FE\xe5\x1a{8{\x1dv\x93N\xccw\xb8\xc2\x92\xfb\xef\x01\xdf\x07\xa6\xdf@\x82\xa8J@\x80\xa0\xa4\x08(\x02\x8a@6"\xe0\x8a\xd9\xd9X4-S\x06#`%\xef\x01\xb7\x0c\t\x93\xe5\x02p\x18M\xa7\xd1\xba\xdc\'u\xad\x85\x13C*\x01\x1f\xfa\xef\x03&\x13\xb4\x02\xf1\x14\xfc\x83\x96~T\x00nF\xa0\xbc\xf9\xf0\xfd\x87h\x8ej\xfd\x97\xba\xfa\xd4;+\x02\xc6Y\x1b\xa7\x90\xd7C!\xbf\x1b\xcb\x80\xd9\xa3\xb3\x17\xb7=\xfb\x0c\x10\xd9\xe7\xff\xe4\x81^\xd9\xfdD\xb3\xac\xbf\xa8Q:N\xf4\x8b\x8f\x8a@\xa5\xb4G\x80\xca3*mk\xe6\x15\xa3k\x1e\x93\x87~\xbaO\xee\xf9\xee\x1e9\x81\xfa\xb4\xc4~\x9eA_R\xa1\xf0\xb3y\x08\xdf\xd2z\xcc\t\x0c\xb2[6]\xb5\x10\xf9G\xfebl\xaf\xe1\xe9\xe8~\xea\x10\xe0r\xee\xd1A\x1a\xb0%\x8cl\x8b\xa0\x05 {8~\xa7\xe2\x8f\xca\xb27\x80\xdf\n~\x19\xd8\x12\x7fc\xa75\xf7\x8e\xcb\xbeD\x99J\x1a\xb69c\x96B\xfb6\x1bSn\x99\x9a\xed\x99\x99\xd7M`*._\x0f\xbe\x07\xccr\xb1\x9cJ\x8a\x80"\xa0\x08(\x02Y\x84\x80*\x00\xb3\xa82\xb3\xb0(\t_\x02L\x81\xdfD"\x8c\x83|\x96\x85\xf8\'\xbcHt\x06_\xddP"\xbb0\xc9?\xba\xa7\xcb\xdcoV\xbe\xffx\xe5\xd5\xcb\xf1N\x1e\x92\xaf.`Ix\xbd\xe9\r\x14\x81i\x11\x80\x9f7\xe9\x81"\xfe\x8cz\xd8\xbf`I\xfeQ(~\xa8\xa8\xf7`Ue\x152\xb4\x02<\xe3\xd2\xf9\x08\xcc0\xf79\xf4\xb4y\xd6\x1f\xe7\x8c\x803\x96b\x1d!\xfat\xf6\xc3\xcf\xfc\xee(\x96\xf8\xbe \xa7\x0e:\x8a?Z\xfaQ\xdd\xc0@\x1e\xb4\xf6K\'\xb2y?\xb4\xb3S\x8e\xbd\xd4#u\x8bK\xb1,\x18A\xc2\xb4\xd9\xa5S5M\x9d\x174\'\x06\x01\xb1\x16\x80S\x9f\x18\x97_\xa8\x14\xc3\x9b\r\xa3<{%\xb6\xff\x00>\x17L\xe2oh\xe5\x86\xbd\xcd\xb1x\x95\xb9\x8c[K(\x18\x1f\x15\xab\x8d\x8e\xf5\xb1\xb1\nC\x93\x8c\x9b\x86Mr\xf2\x96wf^\x99w\x9am3@\x08\x95\x80\xff\rV% @PR\x04\x14\x01E \x9b\x10\xf068eS\xc9\xb5,\x99\x80\x00\xdf\xb2&\x94\xa8l\n\x8e\x06\x1c\x831\nVF\x00K\xe8-5\xf10\x04\xf8\xc6\xde\x07e\xc1\x13\xbf:l\x8e\xd2*\xc4\xd3\xc4\xd0*\x15V\xd78\xcb\ri\xfd\xc7%\x88J\x8a\x80"\x90Z\x04\xa8\xe0\xe1\xb3x\xd5r\xc4\x9a\xdc\xe1\xd9\x8e\xc4*d\x9e\xfd\xfd1i=\xde\'%\xe5\x052\xd2\x8f\xf9\xa9>\xde\xa9\xad\xd7)\xee\xce\xfa*\xab(\x90\xb2\xaa"\xd9\xfe\xc8I\xb9\xfb_w\xc8\xbem\xe3!\x9c}\xe8\xab\x03\xb4\xd4\xe68\x9b\xaeD\xa5\t\x14-\xdb\x1f:./\xbfc\xad\xf4wB\x04Q\r`\xba\xd6\xd6\xa4|9>\x00]\x0b@\xb7.\'\x9d\x14\x9f\x03=H\xe6|\xf0\x87\xc07\xb8I\xf2\xc6l\xdd\xde\x96\xce2\x9fT2\x9b\xabyy\xf4\x07$\xbf\xbcH\xf2+\x8b\xc4_R(y%\x05\x91\xbe2\x87G%\xd07,\xc1\xfea\tt\xb8\x0bg\xac\xc2\x10)\x1a\xa2\xacd\x92\x8f\x9e\xbe{\x16\xf3\xce\x9c\x14\x82\xbf\x07n\x01?\x08V% @PR\x04\x14\x01E [\x10P\x05`\xb6\xd4dv\x96\xc3*\x00\xe3?\xe5\xa3\x88\x03\xe2R\xb3@\x00\xc9S6\x82\\\x14\xff\x1b9\xf7\xd1\xcf\xe8\x08\x14\x16\xf9\xa4\x0f\x93\xacG~~\xc8\x9c\xc0%a\x9e\xc8\x9e\x7f\xd52\x88\xad\xb8\x96\xe1\x9ci\x06\xa0\xa4\x08(\x02\xa9E\xc0\xfa\x02\xbc`\x81\xc8\x7f\xed\x12\x19\xc4\n3v\xb0\x1e\x1eq;\x87\x7f\xfc\x17G\xe4\xc6\xbf]\'\xcd\xdd\xbd\xba\x0c8\xb5\xb5:\xe9\xee\xec\xb3}p\xe3P\xbb\xa0D\x8e\xbe\xd4-\xdf\xfd\xf0s\xf2\xf4=GB\xe7\xd1\xea\x8f\x16\x7fF\xf9\x17:\x9a\x9e;l\xb2\x1cR\x0e\xee\xe8\x94\xc2\xe2\x02/M5=\x0b\x94k\xb9\x82\x92\x8b\x81\xdd\x12HV\xb9\xb7\x11\xf7\xe0\x12YF\xd3u\xa5\xc9\x18\x97\x91\x18!\xd3|8B\'\x05O\xda\xdd\xb9\xe4+/\x94\x82\xa6j)Z^+\x05\x0b*\xa4\xb0\xb1\\\xf2J\xa1\xf0+\xf0I\x9e\x9f\xcc 5\x90ql?\x8a\xa4\xc6\x10b{\x8c\x91\xd2\xb1\xa2"8\x12\x901`0|\xb4S\x86\xf6\xb4H?8\xd0\xde\xef\xc8G\xe6\x1e\xb8 \x0f\x17\xdb\xeb\xed\x8d\xc7\xb7\x14\xa0\x98#\x98n\xcb\x0f\xc1W\x83w\x83U\t\x08\x10\x94\x14\x01E@\x11\xc8\x06\x04T\x01\x98\r\xb5\x98\xbde\xb0\n\xc0\x84\x950\x88h\x95d\xbe\xe4g\xe0J\xa5\xe4!\xc0\xe5\xbfU\xf5E\xf0\xfdw\xc8\xdc\x94\x91?9Q\x8c\x99\xacv\xa0\x02/\xab\xcfnp\x82\x7f\xa8\xb5F\xcc\xf0\xe9\x89\x8a@\xc2\x11\x18F\xa7Z\x89\xe5\xa0\xd7.\x13\xf9\xe5K\x98xr\xb6\x1a\xfb3\x9e\x0f\x8d\x0c_\xd2\xd0B\xf8\xfa\xb7\xac6\x81$<\\\x9e\xf0\xe2\xe5\xf2\r\xa0s\x00\x8dI\x15\x028\xf1\xdd\xcb/\xbe\xb2K\xee\xc6r_K\xd6\x9a\xdbS\x9fn/N\xd1v\x8c\xaa\x0f\x94\xab\xa3y\xd0\xf8.dsU\xca\x0c\x04\xd8\x1eY_\xc3|\xd1\x00b\xd5\xc5\xde\xd3\x98K\xbc|P\xf1G\xa2\xd4h\x95\x82\xe6\xc0\x94\x1f\xc8\x90Q\x86\xf3a\t\xcb\x99\xaf\xbaD\x8a\xd74H\xf1\xb2\x1a)\\2O\n\x17W\x89@\xd9\'X\x992\xc6\xe8\xe7<\x9f\n>\xf4\x83T\xf2\x8d\r\xa1|\xe6\xd9s\xef\xc46K\xe2\x16/?}\x85\x98\xd6\x95\x16\x8a\xbf\xbe\\\xca\xce[b\xd6\xf3\x0e\xedo\x93\xfem\xc7\xa5\xf7\xf1C\xc6J\xd0\xdc\x9e\x16\x81&/\xe6\xea\x89\x1fV\xd9\xb7\x08?\xfc\x07\xf8*0\xad\x1e\x13\x0c+\xee\xa0\xa4\x08(\x02\x8a\x80"\x90p\x04T\x01\x98p\x88\xf5\x06\xb3@\xc0\xcam\x8c\xb2\x96P\nR\x96r\xe4\xc5\x84\xdeG\x13\x9f\x8c\x00\x85a\x7f\xa1O\x1e\xff\xe5a\xf3##\x7f\x06\xbc\xd4\x85\x15E\xaf\\&R\x84\x8b{\xd1\\(\xd4*)\x02\x8a@z \xc0\xc7\x91\x13\xd6\x0b\x9aD~\xb5\xcf\x99p\xda\xe76\x86\x1cZ\x7f\xa0\xc7\xf7w\xcb\xee\xa7[d\xed\xf9\xf5\xd2\xd9<`\xdc\x06\xc4p\xb9\x9e\x92 \x04h\xf5WX\xec\x97\xca\xba"\xd9\x8bz\xf9\xf7\x8f\xfdQ\x8e\xecv|\xb82\xaao:\xfa\xf8\xf3\x02E\x00\x8a\x17\xb2\x8e&^PK\xdd\xb9N{\xf4Iie\xa1t\xb7\xbb\xae\xa3\xa9\x10\x0bW\x94\xc5?{\x94SgV\xfeY-2\xde\\Xe\xb8\xaf\xb6T\xca\xcfY$\xa5g5\x89\xbf\xaeL\xb8\xbc\x17O\x8d\x04\x07F$\xd0\r7&\x8ev=,\xc7,\x0c\xc8\xdd\x84\xb6\xceQ\xe7\x93e\xc5u\xa6\xc8Ca\xa23\x94\x82\x85\x8b\xaa\xa5xe\xbdT^\xbdZ\xfa\x9f>"\x1d\xbf\xdca\x14\x8a\xe6\xc2\xa9\xfbc\xab\x04\xdc\x8c\xf3\xbe\x01~\x1d\xd8\xa2jet\x93\x84~(\x02\x8a\x80"\xa0\x08d\x16\x02\xaa\x00\xcc\xac\xfa\xca\xb5\xdc&\xdc\x02p\x14\x02\x13\x97&\xe5\x19\x13\xc0\xc4J\x8b\xb9Vy\xd3\x95\x97\xd6\x7f\xe5\xd5Er\xf0\x85\x0ey\xf1\x19\xba\x99\xa1\xec\xeaA\xa6\xa4Pm\xcf?\x17K\x0cii4\xa6\xd3\xb5\xe90\xd7\xdf\x14\x81\xa4#@\x85<\x15\xf3K*D6" \xc8\xb6fGIo\x97\xee\xcf\x90!Z\xfbYK\xb2\xa7\x7f{T6li4V43\\\xa6?\'\x10\x01*e+j\x0b\x8d!\xe7\x8f?\xb9M~\xf7\xbd=\xe6n&\xc0\x07\x94\x18\xe9\x12\xd5w.\x10\xf8\x8b\xa04A\x14c\xb56\x9d\x0b\x8a\xc9\xb9\x96>\x83K\xab\n\xa5\xa8\xd8\'\xdf~\xff\x93\xb2c\xebIscO\xbe\x84g\x97\xd5\xe9\x05\x0e\xca(l@n#\xcaC{*\xdf\xbcDJ6-\x92\x92\xd5X\xb1\xc0g\x05\x16}A\xbc \t\xb4\xf5\x9a\xd3\x8c\xae\x90\xb2\xe8lW2X\x05\xe1\x04\ra\xb0\x17\x16\xad=C\x92\x0f\x8c*/?MJ\xceZ(m?|V\x06\xb1<\xd8X\x03N]~\xab\x04\xbc\x05\xa7\x1c\x07\xbf\x1f\xcc\xbbx\x10\xd6p\xb6\x92"\xa0\x08(\x02\x8a@Z!\xa0\n\xc0\xb4\xaa\x0e\xcd\xcc\x04\x04\xac\x02pzAk\xc2E\xb1|\rI/\x98\xcc\x04\xf1\xa6\x9f\xce\xa3)\xa7\xd9\x97\xb5\xb1\xa4\xa1\xe7\xcc\x01\x01\xe8Z\x8bJ\xfd\xb2\xeb1(\x04@6\xe2g\xcc)R\x04\xe5\xe2\x9b3\xeaD\x96c5Ns\x1f\xde\xc5\xc7\xbd\x99\xc4\x9c\x1d=Q\x11P\x04\xa6B\x00\x1d\xeb\x10\x1e\xd6+\x978\n\xc0\x18\x95\x7f65\xeb\x17\xf4\xd1_\x1c\x96\xd7|p\xa3\x14\xc0oh\x80\xfe\xae\x94\x92\x8a\x80q\xaf\x8a>\xb6nq\x89\x1c\xdc\xde)\xdf\xfe\xe0\xd3\xa1\xc8\xed\xc6\xea\xcf\xbe\x90Ij\xae\xe2{\xb3<\xb7Y\xd55\x95\x99%\xc0!9!\xbe\xb7\xd1\xd4\xe2\x84\x00\x95\xd15\xf3\x8b\xcd\x92\xed/\xbe\xedi\xd9\xfd\x94\xf321N\xc9\xcf.\x99\t\x8a?\x7f])\x94n\xab\x1ck\xbf\x9a\x12\t2`G\'\x02u\xf0\x812\xe4(\xfc\x12*\xbd\xb8\n\xc5\xe0\x10\x14\x8e\x83\xfd\xe2++\x94\x86w]$\x1dwn\x93\x9eG\xf6\xcfTNJ[\\\x9b\xf1>0\x05\xb6\xcf\x809w\xa4\x04\xa6\x8f\x08@PR\x04\x14\x01E \xd3\x10P\x05`\xa6\xd5Xn\xe5\xd7*\x00\x13Vj\xb8Y\x81\xef?81G\xf4YG\x96I\xa8\x18\x96\xb0rdZ\xc2\x05X\xfa\x1b\x18\x19\x93G\xee>d\xb2\xeeY\xf1j\x95\x08\x97-q\x96\x18\xaa\xf5_\xa65\x01\xcdo\xae \xc0\xc9\'\xad\x00\xd7CY?\xafX\x84\x91\xba\xed$9\x06\x0c\xac\x15\xd6(\x9c\xdb3\xba\xec\xe6k\x9a0\xe1\xd7e\xc01@\x17\xb7S\xe8\x87\xb1\xa4\xdc\x0fK\xab\x02\xf9\xfd\x7f\xec\x93\xff\xc4\x92_\x92]\xee\x9b\rV\x7f,\x8f\rTr\xda\x9952\xd47\xaaK\x80\tJ\x1a\x12\xdb\x1b\xfd\x83\xd6/.\x97\xed[O\xc87\xde\xfb\xa4\xf4"\x98\x98\x95\xe2R\x92ess|\xb8\x1dV\xd1\xe2j\xa9\xbc\x02\x8a\xbf\xb3\x17\x99\x97\x93c\xfd#2\xda\x82\x17\x95\xd4\x991\x88G*\x82\x95Q\x95\x07\x94\x82\x88\x18,\xa3\x08\xdcs\xcbY2\x06\x85d\xefS\x87\xa7\x83\x8c%\xa3% 5\x96\x9f\x04\xb7\x82\xbf\x07\xb6\xd6\x81\xd8UR\x04\x14\x01E@\x11\xc8$\x04T\x01\x98I\xb5\x95{yM\xb8\x02\x90\xd6\x7f\xd6\xc2$\xf7\xe0MM\x89\xe9\xde\xa6\xa8\xcc\'\'\x0ft\xcb\x91\x17\x1d\xbfQT\xc2\xc6LV\xcaG\x94F9\x03\xcb\n\xfb\xf1r\x9a\xa2\xa8\x92"\xa0\x08\xa4\'\x02|\xd3R\x80`=\x97/\x15\xb9\xebE\xceA=\xd9\x8e\xf0\x05\r\x95P\x8f\xe1\x85\xc1E7"\rU\xf8\'\xad\x9eieU\xddP,C\xe8g\xbf\xf2\x8e\'\xe4\xd9\xdf\x1f3\xf7\xce\x16\xab\xbfh@n\xbct\x81\x0c\xf4\x07\x9ch\xab\xd1N\xd0c)C\x80\xfd@Y\x85_J\xe0\xef\xefW_\xdb)?\xfb\xfc\xf3N^\xf0R\xc1\xfa\xd8Kz\xe6B/4\xe0\x1bsA\xa5\xd4\xdc\xb8A\x8aV\xd5K>^t\x8ev\xe1\x85\x87\x890\x07\xed\x9bY\xa5\xc0\xce/\xc5\xc4|\xc0\x8a:\xd0=$\xf3^w\xb6\x8c\xb4\xf6\t\x03\x85L\xd31\xdbLS\x85\xf8M0\n%?\x06\xab\x12\x10 ()\x02\x8a\x80"\x90i\x08\x98\xf7A\x99\x96i\xcdo\xce \x90x\x05 &7\xa3\xc6\xd97\x1e\x05\x0f:\xa8\x9c\xa9\x81\x04\x14t\xcc\xf8\xff+\x90g~w\xd4\xa4\xee\xf8\x8e\xf2p#k.xQ\x93\x08\x1c\xd1\xcb\x08W\xa7()\x02\x8a@\xfa"\x80\xfeu\x18\x9a\xff\xb3\xe8\xfb\n\xc4\xe5\xa2\xf69v\x8eL\xfbiW\xcb\xed~\xaaY\x8e\xed\xed\x92\xd2\x8a\x02\xcc\xa9i\x90\xa2\x94P\x04`\xcdT\xbb\xb0T\x8e\xec\xea\x92\x8f\xfe\xe5}\xe3\xca?\xa8\x03\xb2\xc5\xea\xcf\xe2G7\x14\xa4\x8d\x97\xcc\x97\xfaEe2\x0c\x8b\xad\xd9\xbab\xb3i\xea6\xbe\x08\x18etc\xb1\x0c\x0f\x8f\xc9\x17\xeex,\xa4\xfc\xa32\xdaZ\xde\xc5\xf7\x8e3\xa4f\xd5bxN\x98\x87\xea\xbfX/\x8d\x1f\xb8BJ\xd65"\xa0\xc7\xb0\x8c\xb6\xc1\xe2\x8f\x16\x81lH\xe96\xdb\xa2\xc2\x94\xbe\x93\xb1\x12\xa3\xfe\xcd\xe7I~\t^\xd0P\x08v\x9f\x83(%gi\xd9\xe9R\xe9\xf7u\xf0\xb5`.\x03VC\x12\x80\xa0\xa4\x08(\x02\x8a@&!\x90nCR&a\xa7yM<\x02X7f\xc8\x8aYq\xbf##\xfd\xd1\x020\x15\xab1\xe2^\x98\x0cI\x90Kw\xa8k\xdd\xee:\xeb\xce\xf7j\xbdg}M\x9d\re\x02\xf7\x99\x98\x92"\xa0\x08\xa4/\x02|\xc6{\xf1>gY\x95\xc8\xdayN>=H\x1f\x0c\x10\xc4~cx0(/>\xddj\xac\x7f\x12\x1c\xe13}\xb1LB\xce,\xde\xf3\x9aJ\xe5\xc9\xdf\x1c\x91\x8f\xbd\xfa\x0f\xd2z\xb4?\xa4\xb4uW9&!\'\xc9\xb9\x05u\xd16\x08\xd5u\xb7\xaf1/\x05U\xbf\x9c\x1c\xecc\xb9\x8b\t\x8a\x0b\xab\xdf:\xb4\xc7\xc3/t\xca\xff{\xe5}\xb2\xed\x81\xe3\xe6R\xd6]J\x94\xd1\xe6\xc6N\xeeK\xd66\xc8\x82\xffs\x95T_\xb7N\xc6\x06\xa1\xf83>\xfe\xf0\x1b\x97\xfa\xa63\xa1O\r\xf6\x0fK~E\x91\xd4\xbf\xfdeNN\xcd\xcb\x99)3\xcd\x02Q\xe2\x82\xe3e\xb9\x13|1\x98o`\xbdJq\xb8DI\x11P\x04\x14\x01E U\x08\xa4\xf9\xe8\x94*X\xf4\xbe)F\xc0\xaat\x12g\x01\xe8\xde\x81B\xbfY~\xaaOBR\xaa\x9cV;\x8c\xd8w\x08\x16%\xfb\xb7w\x98{\xf2\xad~\xcc\xc4\xa5+\xa4\xc62\x915P$`\tK\xda\x0b\xd9N\x8e\xf5S\x11\xc8m\x04\x82xv\xa9U\xb9\x18>\xb1H^\x9e{\x9c\xce\xf96\xe9\xe9{\x8e\xe2\xa5\r\x027\x15\xb8\x07\x9c\xc3\xfa\x19\'\x04\xa8\xdc+D\xa0\x95\xea\xfa\x12\xb9\xf3\xd3;\xe4\xeb\x7f\xf7\xa4I\x99\n\xd8\x94XY\xc5\xa9\\\xd3\'\xe3\xb4\xa5Ko^.\xeb\xceo\x90\xee\xb6!\xf1\xd9\xb1f\xfa\x0b\xf5\xd7\x04#\xc0\x17\xb4l\x8f\xf3\x9a\x8a\xe5\xfe\x1f\xef\x97\x8f\xdft\xbft\x9c\x1c0\x16w\xbcuJ\x94\xd1\xae\xc5!\xad\xfejo>K\x1a\xdey\xa1\xf8+K\xe0\xe3\xaf\xd7y)9\xb5\x15]\x82\xd1\x9aE\xf2\xc8k\xb0{PJ\x96\xcf\x93\xba\xdb\xcew\x12\xa0Hf;\xdc\xc9IRZ\xa6\xe5\x1f\xde\xe6\x18%\xe0\xb9\xeew\xb5\x04\x04\x10J\x8a\x80"\xa0\x08d\x02\x02\xdaagB-\xe5n\x1e\x13\xa7\x00t1\xa5\xf2\x89\x02\xa6\xa3\xff3RO\xee\xa2\x9d\x8c\x92c\xfe_\\Z /=K?\xd2\xb3\x88\xfekW\xfd\x9d\xd5(\x82tT\x01\x98\x8cJ\xd3{(\x02q@\x806"}0\xea>\x1b\xcf\xee,\xc8\xfa\t\xdd\xf1\xf0)\xe9\xed\x186J\x81\x91\x01t\x08\xfa\xf2f\x16hF\xbf\x84ca\x11\xfc\xab\x15\xc3\xbf\xea\xd7\xdf\xf3\x84<\x01\xeb?\x12\xdd4xzQ\x13=\xf9\xb4\xb4Qz\xda\x07LT\xfa\xb4\xccl\x8ee\x8am\xae\xbc\xa6\xc8\x94\xfa;\x7f\xff\x8c<|\xd7A\xb3o\xeb,ep\xe0\xc5\xb1o^\x894\xbcu\x8b\x14-\xa9\x92Q\x066\xa2\x9f\x82LR\xfc\x85\x83\x87|\x8fv\x0cH\xd9\xa6\xc52\xd63 m?\xdd>\x93f\x95\xbd9\xa5\xb1\x05\xe0\x9f\x83\xaf\x06\xef\x06\xb37\xb6R\x1av\x95\x14\x01E@\x11P\x04\xd2\x11\x01\x15\x9d\xd3\xb1V4O\x16\x81\x84;w\xe3\xd2\x11\x13\xf9o\xea\xb7\x9d6/\xba\x8d\x03\x02\xbe\x82|,\xaf\n\xc0\xff\x9f\xebH\xdek\x9a\xf6u\xff\x16\xc8\x9d\\R\xa8k\xb7\xbd"\xa8\xe7+\x02\xa9C\x00\x91|\x8d\xe2\xfe\x02\xce\x1bA^\xac\xac\xc2\xde\xcf\xfc\xe9\xc1\xe3R\x8a \x00\x01\xeb\x1c\xd0IM?\xe7\x80\x00\xad\xe1\xcb\xaa\xe1\x07\x0c\xd3\xf7\xcf\xbc\xf9\xa1\x90\xf2\x8fI\xa6,\xb8\xc2\x1c\xca\x13\xcb\xa5V\x91\x94\x8f\xa5\x9a\xef\xfc\xf2\xcb`\xf5\xe7\x93!,3WJ1\x02\xa8\x02\xb6\xb9:\xf8\x9fl;\xde\'\x1f\xc7\x12\xf4\x90\xf2\x8f\x86\xa8h\xab)!\xd7\xe8\xb8he\x9d4\xfd\xfd\x95R\xd0X!\xa3\xadX\x1a\xcfU\xb1\x99.CB\t\x18h\xeb\x95\x8a\xcbVI\xd5uk\xc7\xe1u\xcb<~ \xb4\xc7\xf9#et\x9at\xff\n\xbc\x1c\xcc\x87G\x97\x03\x03\x04%E@\x11P\x04\xd2\x19\x01U\x00\xa6s\xedh\xde\xb8\xcc A\xe4\x08\x90\xd4\'\x99\xc9\xcd\xd4BN\x82\xee\x9f\x9b\xc9\xfa\x0b\xf3e\xb0wTv>\xdel\x00\x08X\x85^,p\xd8:\xaa-\x85\xc8Y!2\x04\xd9S{\xb0X\x90\xd3s\x14\x81\xf4@\x80\x13wN\x947\xbb\n@\x8f=\xbc]\x96\xf9\xcco\x8fIQ1\xe6\x99\x1a\r8.\xf5JK\xab\xaa\xbab\xe9j\x1d\x94O\xdc|\xbf\xbc\xf8TK\xc6\xeb3f\x02\x86V\x8dV\x91\xf4\x9eol\x91\xa6\x95\x15X\xfa;\xa8K\x7fg\x02.\xc1\xbf\x9b\x15\x19X\xde_\xbf\xb8L\x1e\xfd\xd5a\xf9\xf0\xf5\xff\x8b\xc0?\xddh\x8f\x8e\x00\xe0Ed\x88{V)6"\x1b\x8d\x7f\xf32\xac\x93\xf7\x99\xa5\xb3\x19k\xf5\x17\r\x1c`LK\xc0\xea\x97o\x90\xcaKW8g8\xa2r\xb4\xb3y\x8c\xab\xc8\xa8\xf4[\x05\xbe\x0b\xcc(O\xec\xd5U2\x03\x08J\x8a\x80"\xa0\x08\xa4+\x02\xdaI\xa7k\xcd\xe4f\xbe(\xe1\xb1M\xf2\r"\x05\x0b~\x9f^\xfc\xc0\ts\xa51\x8f\x93\xd0\xb9\xde/W\xaf\x0f\x02\xe7\xa2\x12\xbf\xbc\xf8L\xcb8\x04^j\xd7\x9d\x00\xc8\xf9\xf3\xd1:\xd0DF\xd4Rc\x1cH\xddS\x042\x00\x01Z\xec\xd2rwM\r\xdc\xc8\x17#\xc3\xe8\x00<,\x9b\xb3}\xf5\x9em\xadr\xf2`\xaf\x94\x94\xfb\xb14U\xfb\x81\xb9\xd4<\x95\x7f\xd5\xf5\xc5\xd2|\xa8W>\xf1\x9a\x07\xe5\xc4\x81^\xe3_-\xa5\x8a\x96\xb9\x14(\x86k\x8d\xf2\xcf-\xe0\x9b?\xb1I\xce\xbab\x81t\x9d\x1a4\x81fb\xb8\\OI\x10\x02\xc1\xd11\xe3#\xb8\xac\xaaH~\xfc\x89m\xf2\xad\xf7?e|\xfc\x99\xc0a\xa9n\x90n?U\xb2a\xbe\xe4\x15\xa0\xdf\xe9\x19\xf2f\xc1\x9c \xcc\xe2\x9e,p\x0et\xf6K\xcd\xcdgJ\xd9\xcb\x96\xc5\x92\xd6WXm\x89\xc8rX\x0f1\x98\x00\xfc6))\x02\x8a@\x86!@K\xde~<\xbf\xe7\xbb\xc1@`\x81\xe6\x85\xf29z\x80\x9e\x7f\xb4\x19\xf3\xef \xac\xd5\xb4\x1fp\x10\xf1\xf6I\xcb\xbf\xfaE\xe5rhg\xa7|\xf2\x96\x07\xa5\xa7c\xc8X\xc0\xd1\x17`\xb6\x92\xb1$s\xcbw\xeb\xa7\xce\x95+_\xbfR\xda\xa1\xfc\xb3\xcbK\xb3\xb5\xdci].H\x81\xec\x12\xea\x17\x96\xc9\xae\'[\xe4#\x7fq\x9fY\x82n\xf3\x9c\x16\xfe\'\xdd\xd5\x07\xf9e\xf0\x91\tY$\xbf\xc0\'\xbe\x9aR\xc9/)0\xd9\x0cb5Bp\x14\x05\xa152\x99\xcaA\xc3\xb6\x14\x19\xb6E}\x8c\xc1Ws\xa0wH\xean=WJ\xd6be/\xbb\x05J\xf0S\x13{f\xbe\xb8\xbf\x1e\xfc=\xb0\x03\xceLW\xe1D%E@\x11P\x04\x14\x81\xe4"@e\x8c\x92"\x90H\x04\xc2gg\x90\x8a\x8c\x80\xc0\xfb\xc1\x8cK\x16\x83\xb9l\x80o\r7\x83y\xac\x0c\\\x0ev\xa7y\xd8K4QPSJ(\x02\xb44a4\xbf#\xbb;\xe5\xd8K\xdd\xe6^\x9c\x80z\xa6UP\xfe\xcd\xc3\xcb\xe5c=\xaa\x00\xf4\x0c\x9e^\xa0\x08\xa4\x01\x02\x1c\x11\xfaa,r:\xba{\x04\x052K\xf99\xb1\x8c\xb1;\xa0\x8f0\xd2s\xbf?*\xaf\xfb\xf0\x99\xe2\xc74S\xbbp\x03IL\x1f&X)`\xa7\x8f\xb5\xed\x0f\x9d\x94/\xbe\xfdQ\x19a\xe0\x0b(9f\xd5\'\xc7t\xd7\xd4\x9eD\xfd\r\x8d\xb5X>\xea\x8b\xff\xf6\x1b\x17\xca9\x97/\x906Z\xfe\xb9\xca\x9d\xd4\xe607\xefN]lAa\x9eT\xd6\x16\xcb\xaf\xbf\xb1[~\xfa\xb9\x1d\x0e\x10\xb6\xc2\xd2\x05\x16\xd7\xd2/\xd87,\'\xffu\xab\x14\xcc\xafD\xb0\x8c\x15R\xb2\xba^\n\xea\xca\x8c"\x90.N\xa8\xfc3.\t\xa8\x0cD\xa7d\x94\x82f?\xbc \xd3\xc9\x9bh\x9c\xec\x0b\xa7W\xb4\x85\'\x96\xb8}>3t\xb3\x92\x17\x90\xba\xdb/\x90\xe6\xaf<*C\x07\xf0\xf2v\xfa\xba\xe1\x9c\x92J\xc0\xbf\x02w\x81\xff\x06\x8cB\x19\x8a\xb1\x87w\xcf\xd6\x8d"\xa0\x08(\x02\x8a@\xc2\x10P\x05`\xc2\xa0\xcd\xf9\x84)\xc2\xd87\x82\x16\x0c*\xfc\xae\x06\xc3\x83\xb2\\\x08^\x07\x9e\x8a\xac\xb0\x90pQ\xc8\xcc\'\xbd.G\x9d*\xd7z<*\x02\x9ct\x16\x97\x16\xc8\xa1\xdd\x94\t!\x11\x02oO\x96&VY\xb8\xb1\xde\xb1\xfeKx\xab\x88Z\x0c=\xa8\x08(\x02\xf1@\x80\xd1\x80\xcb\xe1\x03p\x13\xac\x00\x9f81\xd3\xa42\xe2\x8ev\xd5]O\xfb\xb0\x1cy\xb1\xcb\x04o\xe8\xeb\x19F\x9fb\xe7\x99\x11\xa7\xeb\x970\x04\x02\xe8G\x8bJ\xfdR\x81\x971F\xe1\xf2YG\xe1\xe2\xb9?\x0eK3\xddw\xc3\xcb\xb6\xf2\xacy\xf2\x96Om\x96\xc6\xe5e\xd2r\xac_}\xfe\xa5\xb8\xf2\xe8\xca\xb7r^\xb1\xfc\xfbG\xfe(\x0f\xfc\xd7>\x93\x9b\xf0\xfaJq\xf6\xa6\xbc\xfd\xc8\xc9ni\xff\xaf?\x99\xdf\x8b\xd76J\x01V&\xd0:0\xbf\xbcH|\x15\xc5f\xeb//\x94<|\xf7W\x14\xc1g \xfa&t\\c\xd4\xecQ\xebi\xfe\xf9\xe12u\x82P\x18\xf2\xe5\x86Y~\x0f\xeb;\xfedt\xd3\xa9\xec\xd7\x90\xdd\xb1\xe1Q\xb8i\xf5K\xc3\xdb.\x90\x93_xXX\xf6\x18\x94\x80T\x87\xbe\x1d\xdc\x01\xfe0\xd8v\xce(\x95\x92"\xa0\x08(\x02\x8a@\xaa\x11P\x05`\xaak \xfb\xeeO\xd5\x0c\x99"\r\xdf\x04\xd2\xaa\x8f\x16~\xb7\xba[hpBDa\x80\xe7\xf1|KS\xed\xdb\xdf\xe3\xbe\xa5r\xca\xdcTE\x93\xb8ck\x13\xcc\xc3r\xddQL\xfa_\xc4\x12\x9f9\x11\xad\x86L\xf4_+O\xce)5\xbdX\x11P\x04R\x81\x00g\xb7|\xe9r\x96\xab\x00\xf4\x98\x07\x1b\xc4\xe1\xb9\xdf\x1f\x93U\xe7l\x94\xde\xce\xe1\xf1)\xa6\xc7\xb4r\xe5t\xbep\xa1\xcfD\x1f\xa4>\x06Wx\xec\x97\x87L\xd1\x8d\x8f5wYl6aa}\xfd\xd9\x17M\xafx\xc7\xe9\xf2\xe7\xefX#\x01\xac>\xef\xd0\x80\x1f)\xafj\xba^\xa9i(\x95\x9f~z{H\xf9G\x85\x97\xad\xaf\x94gp\xaa\x0c\x18a\xd1|\x18\x05\xde\xe0\xeeS28\xe5\xb98\xcf\x9f/>\x04?\xf3Wc\xc90\x94\x81\xfej(\x0b\xabJ\xc4\x8f@\'fKE!\x96\x14\xe7\x15\x81\x11\\\x84\xfb\xf9\x08\x90D\x99)80\x02F\xdf\xc6e\xc5\x86 \xf7$[\xf4A\xa5\x04\x07\x02Pp\x16H\xe3;/\x94\x93\xff\xb6UF[\xfb\x91\x1bb0\xa5\xd0\xcc\\R\xfe\xff\x10\x98K>>\r\xa6A\x00\x15\x83J\xb1!\xe06\xb2\xa9A\x8e-\x19=K\x11P\x04\x14\x81\xc9\x08\xa8\x02p2&zd\xf6\x08\xd8\x01\x8b\xd2\xca2\xf0\x1d\xe0W\x80\xc3-\xfd(1P\x08\xa0\x80@N\xdeR_\xdc,\x1a9\x0e\xcfm\xd6\xa3\x9d\xa1\xc7\xe6\x8a\x80\x1f=\r#\xfc\xed~\xb2\xd5$\xe5\xc9\xaf\x8f]r\xb2\xb4\x12\xe6\x02\xf0\xc1\x03k\x1f%E@\x11\xc8d\x04\xd0\xf5\xd3\x0f\xe0\n,\xe9\xa7\x19\x10,^f\xb0*\x89(,\xfd\x00\x060\xbd\xdc\xf5\x04\xfd\x00bY\'}\x84rd\xd1n<\x02\'\xfb\x85K_\xb9\xccr\x10\x11\x98?\xf7\xd7\x8f\xc9>\x04P1D\xd8\xa8\x8c\xcd"\xe2p\x91\x87?\xabHZ\xbc\xa6Zn\xc1R\xf1\xf5[\x1a\xa4\xb3y@\x02\xc3A\xb5\xfcKq}\xd3\x12u^}\x89\xecx\xf0\x84\xfc\xf6;{Ln\xacR?\xc5Y\x9b\xf9\xf6\xe6qq\x9f\x19\xf67hp\x0cn\xce\x17\xc9\x8eE_X\x12|\xb6\xf0\xe23@\xeeF\xd4\xe0i(\xcf\x0f\xdf\x82\xa5P\n\x96\x16\x8a\x1fA\x92\n\x17W\xc3\xf7^\xbd\x14-C\xb0$\x06\xe6\xa1\x12\x10\x01\x94\x82\xb0\xc83V\x84\xbc)%\xe8d\x10\xfa[*"\xf3\xa1\xacl|\xc7Er\xe2\xf3[%\x08\xff\x80\xd3\xf4\xd9D\x86\xb2=Q\xf9\x17p\'\xf8\x9b`\xce9\xa9\x18T\x9a\x1a\x01\xd6*\xf1\xb3\xcaRbF\x1c\xc9J\x8a\x80"\xa0\x08\xc4\x05\x01U\x00\xc6\x05FM\x04\x08p\xd0\xb2\x03\x14M\xff?\x0e\xa6\xf5\x1f\x89\x03\x99\x11\x95\xdcmZ\xb5;N\x80\x989\xa5\xc4 @\xff\\\x85\xc5\xf9\xd2\xdd:(\xed\'\xf9\xe6\xd8\x91\x93c\xbe\x1b+\x87\xf2\xf6\x990\x1ee\xe0\x0f&\x98\xcae11g\\OT\x04\x14\x81\xa8\x08pj\x88\x80@\xb2\x08._OC\xec\xa7\xddPHq\x04\xb1S\x9e\xa8\x17\x8d\x1fd\x17@:\xbc\xb3K\x8e\xef\xed\x96*(\x13\x06\xa0\xdc\xcag\xff\xa0\x14\x81\x80Q\xfe\xd5\x17K\xfb\xf1\x01(\xff\x1e\xc2\xd2W\x04\xbd\xe0\x19\xf8\xc8\x1a\xdd\x1f\xca\xe2(\x90X&.\xb5\x84\xb5cU\xa1\xdc\xf4\xbe\rr\xe1\x8dKL\xa0\x18F\xfa\xe5\xf2\xd2<\x1bP*\x02%\xfd\x92L\x04\xfc\x08\x086\x1a\x08\xc8\xbf\x7f\xccYFk\xac53\xd1\n\x95r\t\xdb\x9b\x95|\xc3A4\x0f\x99=\x10\xf1\xc5\x1e\x1c\xdf2\r\xbc \rt\x0f\x1a\xe62\xdb\x81\xe7OJ\xd7=\xbb\xc5\x07\xa5[\xf1\x19\x0b\xa5\xf4\xac\x85R\xb8\xa0J\xfc\xf3JM[\xa7?\xc2 WC\x84n\x8e\xbe/\x91\xdd\x1f-\x01\xf1\xf2\xd57\xaf\x0c\x96\x80\x17\xc9\xc9\xcf?\x08\x1f\x81\xe8\xb0y\xcfh\xe5wd~\x83\x10\xce\xf8:\xb8\x17\xfc#0{\xff\x18{z\x9c\x99;\xc4FB\xb6h2\x88\n\xde\x92\x85\x14\xa6\x13\x7f\xc7OJ\x8a\x80"\xa0\x08\xcc\x0e\x81\xb4R\xc4\xcc\xae\x08zU\x1a \xc0v\xc4\xb7z\x08\x15&\x9f\x07\xbf\x1eL\xe21\x8a\x07\x1c\xf0\xd3\x96\x8c\xfc\x94H\xc1)mK\x9e\x9c\x8c\x8dA\x9e)*)\x92\xed[O\xcd\xee\x86vb\xb0j\x9e\x11\xb6\x8d2pv)\xe9U\x8a\x80"\x906\x08`n\xc8g{\x03\x86\r*\x00a\x15\x14+\xd1j\x9bJ\x83Q8\xd8\xa7\x1f\xc0\x05++\xa5\xbf\x1b\x96\xc1i=\xd2\xc4Z\xba\xf8\x9dG\xe5_uC\xb1\x9c:\xd4+\x9fx\xcd\x03\xc0h\xc4\xe0f\xac\xdec\x87;~\x19\x8asJ\xb4\xf6\xa3\xf5g\x00\xca\x13k\xc9XZQ \xd7\xbc\xf14\xb9\xfaM\xab\xa4\x14J\xc0\xee\xf6A\x19\x19\n\x8aO\x15\x7fqF\x7fv\xc9\x05`\xc9V\x0b\x85\xfd\xc3w\x1d\x96\xd6\xa3\x08\xc2\x02\x9d\x87\xb3\ncv\xe9\xa5\xedU\x11\xcfW\xc4\x97\xe8Y\xa6z\x87\xfa\x1f\xb3uOA?\x17\xc0\x8b\x8d\xbe\xc7\x0f\x1a\xce\xc72\xe1\xa2\xd5\rR\xbc\xaaNJ\xd6/\x90\xc2\xc6r\xd7o \x02\x8e\x0cB\xdc\xa6u )Q/B\xd0\xe7\x06\xbb\x06\xa4\xa8\xa9B\xe6\xbf\x0bJ\xc0/>d\xee?\x8d% %k[\xf8oa\x9f>\x01\x7f\x0b\xb6s\x06\xec*\x01\x01\x8b\x07\xb1\xda\x0c\xbe\x15\xbc\x12L\xa5\xe9A\xf0\xcf\xc1\x0f\x83\xf9;G9U\xa0\x02\x04%E@\x11\x98=\x02\xaa\x00\x9c=vz\xa5#\xaap\x80\xa7\xd4q\x0e\xf8\xdb\xee\x96\x83\x13\xc5\x18m_\x00!\xe7\t\xad\xa1\xa4\xc2//>\xe5\xf8\xff\xf3\xf4\xb6\x9f3<\x9a\xa9@\xf0\x95\xf9\x08\x0eM!\x97\xc7\x94\x14\x01E \xb3\x11\xe0\x12\xb6^<\xcf\x0c\x04\xf2\xb3\xdd\x9e\xcbB#`\xae\x8a\xdb\t\xbf\xa2\xe7\xfe\xd9bXvyN"\xab/\xb0\xca\xbf\x93\x07z\xe4\x93\xb7P\xf9Gg\xfe4\xa0\xb6\xf3\xf1\xcc,>-\xfd\x1c\xab#*\xfd\xd0\x06\xa0\xfc#\xd56\x95\xcau\xb7\xad\x91\xcd\xd7-\x92\xea\xba"\xe9i\x1f\x92\xb6\x13\xfd\xe2\xc3\xf9\xaa\xfcK\xa3\xbaf}`\xd9\xffC?;`2\x95\x0f)1\xe8\xea\xad\xd2(\x97\xc9\xcf\x8ai\xc6\xf8p\x9a\xb3s\xff\x90\xa8\xe3\xec\x04\xb1\x04x`\xc7\t\xc3\x1dw\xef0\xd1\x88K\xcfn\x92\xd2\xf5\x8d\xe2\xab-\x13\x7fC\x85\x04a\x95G\xeb@\xe3V\x81\x0f\x08)\x9e+&\xf8\xe2\xa5cP\x8aV\xd6J\xfd\xdb/Dt\xe0G\x1c\x19\x8d\xcf\xa5\xbd\x9fsW\xfb\xc9\xcc\xd3\xaa\xad\x14\xfc\x9f\xe0\xeb\xc1O\x80s]\x91E\\8\x7f\xe2|\x89O\x00\xfd\xa3\x7f\x14\xfc\xd7`\x98\xc6G\xd0\xdb\xf0\xed\x01\xf0\xfb\xc0\x1c,y\x9d\xb5\x14\xc4\xae\x92"\xa0\x08(\x02\xde\x10P\x05\x8d7\xbc\xf4\xecq\x048xQ\xba\xe0\xe0\xf5\x06\xf0\x97\xc1X\xcbe\x06\xb2\x8cjW\xd6r\x00yW\x8a7\x02h!\xf9\xf0mC\x0b\x8c\xfd;\xf8\xf2\xd7\x91EC>\xadg\xba\x9f\x15\x8f\xf0\xc6Y\x16@\x01\xd8\n\x8b\x01\xceb\x95\x14\x01E \xb3\x11\xe0\xb3M\x8b\x15\x04\x02\x10\xf8\xa7\x936\xb8\xd2\x9fz\x129\xa9\xacTp\x91\xb6\xdf\x7fB\x02\x1f\x86\x93z\xe3hT\xe7D\xc4\x84\xd8T\xd5\x15K\xcb\x91>c\xf97\x00E+-\xe5,f<\'\x93\x88\xcd\xc2\xe4\x1f\xd5k\xac\xc5(u\xb8t\xde\xf5\x8bd\xd35\x8b\xe4\x9c+\x17\n\x97\x96\xf6u\rI\xcb\xd1~c\xe9\xa8\x8a?\x8bRzl\xd9\xfeJ\xcb\x0b\xe4\xf8\xbe.9\xbc\x8bn\xe1\xdc\xfaL\x8f\xec\xa5_.\x9c.\x8e(9y3\x0f\x02v\xd9\xcdA\xd9\xc6\xa5\xc2]\xf7\x90w\x89\xbf\xb6\x14J\xb9z)9\xbdQ\x8a\xd76\x88\xaf\x06\xfd*#\x0b\x8f\xc0:\x10\xc1D\xcc\xdb\x12\xa3rb\xc7;G\xa2\x12\xb0\xad_J\xd65H\xfdm\xe7K\xcbw\x9f4\xf91\xaf\xfdCy\x8e\xb8\x87UX\xc1\xe9\xabY\x06|\x15\xb6\x07\xc0\xf6x\xc4\xc9Y\xfe\x85\xb5@\xe5\'\x95~\xec\xc9\x88\xc1\xad`*\xf7\xd6\x82I\\\xfa\xcb\xe3\x16\xcd\x12\xecSq\xba\t\xfcV\xf0\xaf\xc0\xb9\x88\x1d\x8a\xad\xa4\x08(\x02\xf1@ \xa3\x145\xf1(\xb0\xa6\x11\x17\x04\xec\xc0\xc3\x81\xec\xa3.3a\x8a%\xda\xa6\x88\x84\x92A\x80\x91\xfe\x8a\x11\x01\xef\xd4\xe1^i>\xc2\xd5\x0cF&5\xdb\x98>\xec|~\x19\x02\x80\xe4C\x16\xa2\xf5\x8a.\xe5\x8a\t:=I\x11H{\x048\xfd)\xc00r\xf6|\x91\xfb\x0e:S\x9a0\xe5\xcet\xf9\xb7\xc6&\xed\xa7\x06\xa4\xedX\xbf\tr1\xd0\x87\x00\x0f\x1c\x9dr\x98\x18l\xa9\xbc\xb6P:[\x06\xe5\x93\x7f\xb5\x15\xbe\x111\xcf\x04\xc4\x99\xa4\xfc\xa3\x9e#d\xe9\x8d>\x9fum-\xfd|\x05\xf9\xb2dm\xb5\\z\xd329\xe3\xb2\xf9R\xdb\x08E\x07\xe6\xc9\x9d\xadC&\xd8\x024\x7f\xb00c\x02J\xe9\x86\x00\x95\xb7E\xa5>9\xf5\xc7>\x19\x1et\x1et\xfb\x1c\xa7[^\xd32?\xe6Apsf\x9a\xb8\xdb\xceq\x9c\n\xb9\xd1\xb6C\xd2\xf7\xd4!\xe3\xe7\xb2`\xc5<\xa9\xd8\xb4D\x8a\xb0\xf5\xd7\x95\x99\x00#\xc1~\xf8\r\xb4\xca@\xa3[\xc2\xf5\xb3}\xa1\x8a\xeb\x02\xb8g\xd9\xa6\xc5\xc6\x17a\xdb\x7f>\xeb\xa8\xab\x98%<\xafQ\x88=3+}\x05\xf8\xc7\xe0\xeb\xc0\xd4\x02\xdb\xf9\x04v\xb3\x9a\xec\xc8D\xa9\x96\xca?Z\xf9\xbd\x1c\xfc~\xf0\xb9`\x12\xf1\xe1y\xf4\xff\x17ND\x94\xd7\xc1\\^\xee\x06\xbf\x19\xfcCp\xae[Q\x02\x02%E@\x11\x98\r\x02\xaa\xac\x99\rj\xb9}\x8d\x1dp\xa0\x91\x91\xaf\x81_\x07\xb6\xc3\xbd\x1d\xe02\n!\xb3\xa4(\xa3r\x9c9\x99\x1d\xc3\x1b\xff\xa22\xbf\x1c\xc4\xdb\xfeANDA\x9e\xfc\xfd\xd8\xd9\xc1\xe9u\xee\xf2\xdf\x8clb\x99Sa\x9aSE \x99\x08\xd0\x01k\x103\xc6u\xb5\x8e\x02p\x96\xcbS_x\xb4Y.\xff\xab\x15\xd2\xcf\x08\xe19\xac\x01dt\xd5\xb2\xeaB\x19\x19\x0c\xca\xa7\xdf\xb0U\xbaaU\xc9\xc0\x17\x99\xb0\xecw\x92\x95\x9f\xed\xfb\xd1\x1e}\xfe|\xd9x\xc9|Y\x7fQ\xa3l\xb8\xa8A\x9aVU\xc9\xf0\xc0\xa8\x0c\xf6\x07\xa4\xfdT\xbf\x890O\xc5\xa0\x06\x81I\xe6\xc3\xeb\xfd^\x14\x14\xfd\xa8\xa7\xae\x16\'"\xae\x1f\xca\xff\xd1\x11+>zO/\xa7\xaf0\xb0\x85ag\xad\x03\xd1\x07P\xee\x1a\xde\xdb&m`R\xd1\xd2y\xb0\x0e\xac\x93\xe2\xd3\x1b\xa4\xe44\xf4\xb5>\x1f\xe40\xf4\xbd\xc3X.\xcc@"\\\x921\x9b\xa8\xc2\xc6\x12\xb0W*.\\&cXv\xdc\xfe\xf3\x1d\xe3\xb3\x81\xe8\x95c-\xdf.\xc0\xcf\xff\x0e~%\x98\x85\x98Zm\x88\x1f3\x9cX6[n\x16\x05\xe6\xee\xf2&\xf0\x1b\xc1[\xc0$b@\xe6y\xd1\xc8\xa6\x81\x8a2\n\xc2oa\xdb\x0f\xbe\x0bl\xe7d\xd8UR\x04\x14\x01E 6\x04T\x01\x18\x1bNz\x96\x83\x80\x1dh\xe0\xb5\xdd\xbc\xc1\xbb\x12[jux\x9c\x03\x94\x92"0\t\x81\x82B\x9f\xb4\xc0\t=\x89\xcb\x81i\xa1\xe2\x99\x18\x00\x04\xfeo\x8c\xe8\xe3\xf9b\xbd@\x11P\x04\xd2\x12\x01NZ\x07\xb1\xdai1\x96\xf8\xa3\x9f\xe0\x84\xd4\xcb2`Zz\xd12\xec\x85\xc7O\xca\xf5\xb7\xaf\x99i\xf2\x99\x96\x10\xc4-S\xe8V\x8b\x10m\x9d\xcb^\xbf\xf0\xd6\xc7\xb0\x0c\x16\xee\x12\x80o\xba*\xffX\xf5SY\xf9\xd1Ol\xed\xc2\x12Y\xbf\xa5Q\xce\xbd\xa6I\x16\xad\xad\x92\xca\x9a")(\xf1IO\xdb\xb0\xb4\xc0\xa2\xdc\xb8\xee\x80\xd2\x82\nN\x1f\xadH\x952\x02\x01\xeau\x07\xfb\xb9\xc2\xd11\xe8\xcf\x88LgB&\t,\xed\xc7H\xe6qp\x9f\t\x1c\x1f:\xd4n\xb8\xfb\xfe=\xb0\x04,\xc02\xe1\xf9Rz6\xa2\n/\xac2K\x85\xf3\xd1\xf7\x9a\xa8\xc2\xf4\xb1\xec5\xaa0\x1edZ\x1fV\\\xb5Z\x02\x03\xc3\xd2u\xef\x8bN\x1e\xa6\xfe\xe4\xbc\x939\xfd\x0b\xf0g\xc0\xef\x03\xf3\x98\xf3\x86\x18;YB\xf6m5\x95v,\xdbB\xf0\x9f\x81\xdf\x0b^\x0f&\x11\x07V\x14\xcf\x8d\xa5\x13\xe3yL\x8fJ\xc4\xef\x81\x0f\x80\x9f\x03\xdb\xe3\xd8UR\x04\x14\x01E`f\x04T\x0183Fz\x86\x83\x80U\xfe\x9d\x86\xaf|\xeb\xb4\x11\xccAM\xdb\x10@P\x8a\x8e\x00\x1d\xf3\x07\x02\x019\xb8\xd3\xf1\xf7\x13\xfd\xac)\x8er\x86H\xa1\xb6\x01+%\xe07H\x10\rOI\x11P\x04\xb2\x08\x01(oL`\x9f&\xf8\xf7\xa4\x12p\x1f\xfa\tNe\xecDv\x86\xa2\xa2w0txW\x97t6\x0fHA\x91\x1f\n/\xce\x8fr\x8bXd\x1a>V\xc2\xef\xdf7\xdf\xff\x8c\xecy\xba\xd5\xcc&\xd3\xd1\xbf-\x95{\xec\xda\xcd\x92d\xf6\xef.\xf9\x10\xb9t\xc3%\xb0\xf0\xbb\xb0A\xd6\x9d\xdf \x8b\xa1\xf4\xe3\x89C\xfd\xa3\xb0h\x0cHW\xdb\x10^\x1e\x05M\xb0\x97|\x14\x16\xa9\xd8Ku\x9bA\x08\xb0\xee\x8b\x8a\x1d\xb1Q\xb5\x16\t\xaa8\xf3X\x8d?[\xc6m\n\xbf\xc2\xc2:\x08\xe5k\xdf3G\x0c\xf3\t*Z\r\xcb\xc05P\x08nh\x94\xc2\xa6*\xb3B\x83\xd6\x81&\xaa0_\xba\xd20m&\xeb@\x9c\x12@t\xe0\xea\x1bN\x97 \xe4\xb4\x9eG\x0e\xccT0\xdb\xcb\xbf\x07\'\xee\x04\x7f\x17l\xe7\x183]\x9b\xee\xbf\xb3\x1c\x06m7\xa3\x0b\xb0\xbd\xcd\xe5e\xee1\x0eR<\x87\xe7N&\xd3\xb5\xe1#\xac\x7f\x0c;\xc9b\xc7UXT\x02^\x0e\xee\x02\xeb\xe3\x04\x10\x94\x14\x01E 6\x04Ty\x13\x1bN\xb9~\x96\x1d\x98W\x00\x88\xff\x01\xd3Q-\x070m?\x00Aij\x048Q\xa3\x85\xce\xa1\xe7\xdb\xcdI\xa1\x97\xcbS_2\xfe\x0b\x85 \x8aH\xc6\xff\x1f\xb6lq\x14q\x94\x14\x01E \xf9\x08\xf0Y$\x1b\xe2\xc3\x18N\x13\x1e\xcc\t_\xc3\xcf\x9c\xb4\xcfe\xbf|\xd6i\xe5K\x05\xe0\xc4\xa4\']0~\x80K\xddH\xad\x08\xfap|_\xaf,^S!=\x1d\x0cx\xe1%\x03\xe3\xe9e\xea\x1e\x15}uP\xa2\xfe\xf6;\xbb\xe5\xb1_\x1c4x\x1adB\xf5\x95\xda\x92\xd9\xc8\xbd\xac/\xba\x80\xb0\xd9\xaai\x84\x95\xdf\xc5\x8dr\xfe\xb5\x8bd\xf1\xba*)\x87\x95_a\xb1O\xfa:\x87\x11\xc1w\xc0(s\xa90b\xc7O\x05\'\x97\xf9*e.\x02\xac\xca tJ\x15\xf3\nM!\x02\xd9f\xf3\x95\xaeU\xe3\xf6\x93&{\xe6y2\x1f\xc6\x8avpO\xab\x90;\xff\xe7y\x04\x12)\x83e \xa2\nC\x19\xc8\x88\xc2~\xbe|\x85\xfc6\xda\x87%\xdb\x88.\x1cRHQ!\xe8$\xe1\x94\x98\xfb\xb8G\xb0gHj^s6,\x02\xfbd`W3\x0e\xf2\x07\xfb\xb4;\xa7\xba\x9f\xfc\xc1>\xcc_\xc1\xfe^\xf0C\xee1\x0f#\x00\xaeH\x0fby\xc8$jMI\xeb\xc0o\x01\xd3M\x12}\xf7\x91\xf8[x\xd9\xcd\xc1\xd0\x87I\x01\x1fF\xf1\x17\x86\x1b\x8f\x87}\xc57;\';\x13\xfb\x9f\x02\xbf\xcd=\x86\x8d\x92"\xa0\x08(\x023#\xa0\n\x9c\x991\xca\xf53\xec@\xb3\x12@X\xe5_vY\xfe\x99A7\xd7\xab91\x0e}\x9eJ\x00\x00@\x00IDAT\xe5\xf7\xc3w\xd3\xe8\xf0\x98\x1cp-\x00=Y\xa4P<\xa4(\xb8\x1c\x96 \x9c\xd0\x1b\xed\xa1\x95\x19\x13\x93_MU\x11\xc8i\x04\xcc\xd4\x0b\x1fv\xb2a\xa7b\x1c\x05\xf0,;Z\x18t\x98>X\xe42\x18\x0f\xfbNjh\xc2\xb7\x9c\xe2pY/\xa2O\x9a\xa0=3\x01\xca\xc9$\x97\x04n\xac\x17\xb9w\xbf;\xf9\x99\xe9"\xe7w\xce\x93\xac\x8f\xbb\x13\xfb\xbbd\xe5952\x06K\xb1)\xec*bK4\xc3\xce\xe2\x12\xdfyP\xa4m\xdbzB~\xf2\xc9\xed.0\xe9Q\x08\x1f\xac\xfd\xa8{0\xfd\xbe;-n:\xad\nQ{\x9bd\xed\x05u\xb2vS\x9d\xf8\x8b|X\x12\xeaX\xf9\xf5\xa0\xee\x02\xb4\xf2cSC\x9fO\xab@\xa5\xecA\x80+\x02\x06\xf0\xac\xd7-\x82\xc5/\xfa\x0c\xb6\x0bZ\x84z\xf2\x0b\x9c=p\xa4\xa6$\xa6ow;x\xf6\xdb\xc0\xdf\xc8Y\xa8\x0b*\xee\xba\xef\xdbc\xd8WU,\xc5\xabh\x1d\x08\xbf\x81\x88,\xec\x9b\x07e Vs\x98\xa8\xc2\xb4\x0c\x1c\xc14\xc0\\\xef>\xa3\xacO\xfa\x12\xc42\xe0:D\x06>\xf9\xaf[e\xe4x\xb7\x9b\xbe{\xbf\xc8\x12\xf3j\xf6\n\\\xce\xfa#\xf0\x85\xe0\xc3`&hG\x1e\xec\xa65\xb1\x0c\x1c\x1d9\'\xb2\x85\xbc\x04\xfb\xb7\x81o\x023z/\x89\xe5\xb4\xe7\x9a\x03\x11\x1f\xf8\x85/I\x9c\xe7\xc0y&\xaao\xdc\x00\x979\xf9\xd2\xf6\xd3mN\xca\x1cg\x8db0t%\xef\xcbt\xef\x00?\x04f`\x15{\x0c\xbbJ\x8a\x80"\xa0\x08L\x8d\x80*\x00\xa7\xc6F\x7f\x19\x1fLV\x02\x8c\xdf\x82W\x8390k\xbb\x01\x08J\xd3#\xc0ei\xfe\xc2|ia\xf4_+\xceY\x11i\xfaK\x9d_\xed[k.\x0f\x8c\x14|b\xb9Z\xcfQ\x04\x14\x01"\xc0g.\xf4\xdc\xd9\x07\xd1B\xe3N\xde\xf8\x95\xbbx^\xc5\x8f\xee\x9d\x96Vd*\xfd\xa8\xe8CP\t\x19\x82\x92\x8e\x91;\x11|\xc10\x95|\xad\x03"\xcd\xf0E\xde>(\xd2\x82}\xf8\x82\x12,\xc5\x95\x9b\xe0\x8f\xef\xba\xe5"\x1d8>\x93\x12\x07\xb7\x90!\xa4\xbf\x12\x8a\xfe\xd9\x10\xaf\xc7\xe5\xfb\xb7\xb5\xcb\x96\x1b\x97\x9a%\xa2\xb3I&\x13\xaf\x19Cu\x94V\xf8\x11Ta@\xbe\xf1wO\x99"\xa4\\\xa1\xc2\xc9,\x95:\xe8\xbf\x03\xb4\xee\x04\x95\x94\xfbe\xf3u\x8b\xe5\x92W-\x93Ek\xaaL\xa0\x92\x81\x9e\x11\xe9\xee\x18\x92Q*\xfcp\r\x1b\xa0Z\xf9\x11\x87\xec\xa5|hv\x87\x10\x0c\xaciu\x85,YS-\x87ww\x1ae\xaf\xa7\x95\x01\xd9\x0bO\xf2K\xc6\xc7\xd3\xcaY\xe6\x194\x1fF\xde\nt\rb\x99\xf0Q\xc3TN\x15,\xa9\x96\x8a\xcdK\xa4pe\xad\xf8\xeb\xcb\xc4W[a"\n\x07\xfb0\x0eP\xf1g\x06\x99|\x19CP\x91\xbc\xd2Bi|\xc7Er\xfc\xd3\x7f\x90`7^\xc8LV^\xd9\xb2Ra\xc5\x8b\x17\x81\xbf\x0b\xbe\x16\x9c\t\xc4Q\x87\xc4\xbcS\xf9\xc7P\xe4W\x80\xdf\x05\xbe\x14\\\x04&\xf1w\x82\xcarN&\xa7\xe33x\xdb\x97\xe3e\x17,\x95\x9a\xeb\xd6\x01\xe3R\xc9\x83oF\xf6\xa3\xedw\xe1\xc5Nt\x19\x98i\xb3\x16?\x05~\x08|\x1c\xec\x8e\x88\xd8SR\x04\x14\x01E`\n\x04T\x913\x050z8\xf4&i\x19\xb0\xf85\x98\xca?\x0etY\xd7f\\\x91\x07ES\x8a\'\x02c\x90\xea\xe9\x93\xeb\xe8\x1e\xbc\x05\xf6JV`\xe4v\x1e^\xa2RA\xa0\x15\xe5\x15E=?W\x10\xe0\x14\xc00\xe7\x1b wczq*\xe0\x0c\xe3\x01\x9ah\xb9\xc7\x87*\x1f\x17\xda\x89H\x17&k\xc7{D\xb0\x04S:\xa0\xc8\x83\x82Fx\x8c\xdc\te\x1e\x946\xd2\x89\xfd\x99\xfc\xec5C\xe9\x8fg\x7f\\\xf1\xe8dk\xcaO(\x81\xa4\x04V\x85k\xe6\x89\xbc\x08w\x01T:\xda\x89\xe9\x94\x179?\xd8e\xc0{\x9ek3\xd6c\xb4\x1a\x8b>W\x9a!\xa1\x0c\xfc9\xbf0\x0f\xca\xb5B\xf9\xd2;\x9e\x90^\xd4K>\xea1\x95A?\xac\xf2\xd1\xd6\xc9\xb2\xd3\xab\xe5\xc2W.\x97\x0b\xfe\xbcI\xaa0\xa1\xed\xef\x1e\x91!(\x90{\x0f\xa0\x8d\xb1Y\xa2\xae\xd4\xca/\x03\x1b\xdel\xb3\xcc\xc7\x1a\x96\xc1\\\x19p\xde\xcb\x17\x1b\x05\xe0\xac\x82\x82\xcd\xf6\xfez\xdd\xd4\x08p\xfc\x08\xef\xb09&P\x95\x84~\x98\xca\xa9\xe1C\x1d\xd2\x06&\x156UJ\xf1i\rR\xbc\xae^\x8aV\xd5K>\xfazc\xfd\xe7F\x15\x0eBy\xe8\xab.\x96\xf9\x7fs\xa1\x9c\xf8\xdcV\x19\x1b\xc5\x9b\n\xa6\x17\xbdc6wA\xb2W\x81?\xea\xb2U\x0c\x9a\\\xe1X\xba\x10\xf3\x8a\x82\x18\xcb;\xe6\xa9\x16\xfc\x060\xad\xfd\xb6\x80-q\xae\xc42\xf0\xfc\xc9\xc4\x14\x88\x87\xfb\x82\x84\'T\\\xbc\x1c\xd1\x94WH\xc1\xa2j\x19\x83\x15\xe5h\x0b^\xa6\xe1\xea\xaa\xab\xd7\xc8h{\xbft?\xf0\x92s\xe7HD,vK\x90\xc4\xc7\xc0\xb7\x81\xa3\xdf\x13?()\x02\x8a\x80"`\x11\xc8:e\x8e-\x98n\xe7\x84\x80\x1dT0\x1b\x93\x9f\x80\xe9\xf3\x0f#x\xf6)\xffP&\xa5D!\x809}AQ\x1e|s9\n@\xb3\xc4!\xba\x0089\x07\x14\x90(\xe8\xd4C\xf9W\x87\x97\xab\\r\xc2uaJ\x8a@\xae \xc0\xf6\x1f\x12\xf6\xf10q\x9f\xcf\x85\xa1\xb0g\x81\xc7\xac\xb5\x1e-\xf6\xec>\x95~\x8c\xaa;\x00\xa5\x1d\xb7\xb0\xbc\x11Xg\x18\xeb\xbdVZ\xec\xd1r\x0fJ>\xb3\xe5>\x14{<\x0f\xb7\x8a\x89\xb8t\x8c\x14\xca#\xf69\xe5a\x94\xef\x0e\xdc\x13\x11z#~\xe3\xb9S\x911\x17F~\xd7\xd69\n\xc0\xf04\xa7\xba\xc6=nO=\xfab\x97\x0c\xf6\x8d\x1a?q\xa3\xc3\xb1\x16b\x86\xc4\xd3\xf8g\x06\xd1\xa8\x9f_"\xbf\xfc\xdan\xd9\xf5D\xb3i\x1a\xc1X\xfb\xd78\x97\xcb\xcc\xed\x91\x03\xbb\x94\x93V~\xafz\xf7\xe9\xf0\xef\xb7@\x8a\x18\xb9\x17\xed\xad\x19\x91\xe0\xf3\xa0l\xa6\x15\x98\xfa\xf2\x8bs\x05dPr\xac\xfb\xae\x96!\xb9\xec\xe6\xe5\xf2\xeb\xaf\xed2\xcb\xbf9\xb4\xab\x15`\x9aU"\xfb\x12\x0c\x07\x86LWo\xfb{(\x03\x8fu\x1b\xee\xde\xfa\x92\xe4\x17\xfa\xa1\x08l0\xbe\x03\x8b\x16\xd7\x88\x0f\xf2\x1a\x8f\x05{\x06\xa5\xa0\xa9Z\xea\xdet\xae\xb4|\xf7IT\xb0\xed\xa9\xa3\x96\x13-\xc0\x8c<\x1f\xc1\xf6q\xf0\xbd`\x8e&6\x07\xd8M\x19\xb1\xe0n\xe1C\xa3\xe3r\x1c\xbb\x19\xfcv\xf0R0\xc9\x0e:<7\xfa\xdc\x9a\x1d%\x07EB\x01<\xf2\n|R~\xde\x12\xa9D\x04\xe5\x82\xf9\xe5\xb0\xa8\x1c\x96@;\xa2\xb7\xf3v|\t\x86\xf3F\xf0\xbd\xfa\xc6\xf52\xb0\xb7EF\x8e"\xd6\x87Y\xb2\xcd\x04BD\x9cx\xef[\xc1?\x05\xff\x0el\xf1\xc4\xae\x92"\xa0\x08(\x02\x93\x11\x88\xdeIM>O\x8f\xe4\x0e\x02\xee\x08%\\\x8f\xf53\xf0\x05`\xbe\xcd\xca\xde\xb6\xc2\x12+\xc5\x1d\x01J$\x85%~9\xfe\x92\xab\x00\x84\x982\xc6\x96\xe4\x85\xea\xa0\x00\xc4\x9bd\xa1/\x19*4\x94\x14\x81lB\xc0N\x19\xec\xec\xd7~\xa7H\xcf\xf6n\x98\x93\x81\t>\xf78A\x98h\xb9w\x12\x13\x07Z\xeaq\xd9m\'\x14{T\xe8u\xc3\x92\x8f\x16{=\xd8\xc2*\xc3\xf8\xe5\x8b\x15?\xf6\x8b\x9c\xb0\x84O%\xcc\xbc\x03\x1f\xdc\x86Y/\x84\x92\x0c\xf2"P7\xef\x85\xb9[\xac\xcf,\xd3#3\xe0\x0fi\xfa\xc9\xa2s\x8e\xfd\xe4u.\x1d\xd8\xde!k7\xd7\xc90\xac\xcc\xb29\x10H\x00\xca\xbf\xca\xdaB\xd9\xffB\xa7\xdc\xf5\x85\xe7\x9d\xd2\x1b-\\\x18\x18\x16\x94\x04o\xad\x0fFV`\xe3\x922\xb9\xf1o7\xc8\xf9/_d\xa2\xfc\xf6u\rKwk\x00\x8a?(\xfd\xa8\x10\x0e\xcd\xa3\x13\x9c)M>\xad\x11\x18\xc6\x0b\xbd\xda\xf9\xc5\xf2\xda\x0f\x9d)?\xf8?\xcf\x9a\xc7=E\xcd7\xadqJ\x9b\xcc\x99n%\xacoq\x95S&\xaa\xf0\xf0\xa8\xf4o;n\x98O\xb8\x89*\xbc\n~\x03\xd7!\xaa\xf0b\xbfT\\q\x1a"\x03\x0fI\xdb\x9d\x7fr\x8a\xc3\x93\xc2\x92r\xcb\xe8\x0e\x1c\xe6\xdb7\xf1Ik\xbac\xe0\xe8g\x9b\xd3\x92\xf2a\x95kvd\xe6J\xa8;\xc0o\x04\xe3m\x95!\xab\xa4\xe4\xb9\xd1\xc96n;\xae\xf9}Ru\xe9\n\xa9\xb8\xfc4\xf1\xd7\x94"23,\xfe\x9a1~\xb3\xb4\xf6\xc5\x1aS\xe2w.\xaf\xc6K\xb5\x867m\x96\xe3\xff|\x9f\xf3\x92e2*\x16\xd1O\xe3\x8a\'\xc00\xb1N9v\xc8\x82\x92"\xa0\x08\xa4+\x02\xd9\xab\xd4IW\xc4\xd3;_\x1cV,\x7f\x07\xfb\x97\x83\x93\xa3\xfc\xc3]M\xa4@\xe2\xe3\n\x1bv\xac\xe4\xa1D\x93\x9d\x7f\'\xfa>\xb9\x94>\x1d\xc0\x0f\xc3gX\xebq(#\xbc\x92\x15g\xe6\xc3\xf14\xad\x83\xecw\xaf\xe9\xe8\xf9\x8a@*\x10`{5m\xd6\xce\x1bl&\xc2\x94\xd8\xdc5>\xf7\xb0\x13n\xb9G\x0b>\xe3k/\xccro\x10\xdd09Q\x96{\x13\x1f0\x9b\x7fv\xc2\x13\x8b`\x8b2\xdd\x96~\xa1hqH\t\x83\xd3#\x8e*\xd3\x11\x7f\xa7\x95/,\xda\x8c#8>\xf3iNM\xa52{\xaa\xbc\xea\xf1i\x100}\xbe\xdb\xf1\xf3\x91\xe7\xf8\xc6q\x07}w\xa0\x1b\xf2\xdf\x03\xfb\x0c\x174\x96\xe3\xa5\xc5\xb8\x9b\x80)R\xb4J\xabW\xe2\xf77\x81\xbf\x07\xb6\xc7\xa6\xb8$\xae\x879j\xb20v\xe4\xbc\x1c\xfb\xef\x003?\xb6C\x9b^\xf1\x87\x13\x1d\x0c\x98\x8c\x83K\xc1\xa2*\xa9\x84\xb5_\xf99MF&\x18\xebC\xf0\xa3V\xb8\xdd\xe0\x18\x17K?\t\xdcF!\x1bT]\xb2R\xfa\x9f9,C\x07\xe1\x8bq\xf2\xf8H\x9cH\x1f\x04\xff\x18\x0cm\xab3<`\xab\xa4\x08(\x02\x8a@\x04\x02\tU\xeeD\xdcI\xbf\xa4;\x02\x1c\xf88\xb0\xdd\x06\xfe\x00\x98o\x93\xec\x80\x82\xdd\xf8\x93\x15\x06\xa8\xfc#\x95U\x16\xca\xe2\xb5U\xb2jS\x9d\xac\xbd\xa0N\x86\xfa\x02\xf2\xa5\xbfy,\xfe7\x9e\x90"-)\x0c\xd9\xe1}\xc2\xef\xfa\xd5;\x02T\xe6\xfa`\xdd\xd4y\xbc_zi\x8dCr\xaa\xd9\xd9\x8f\xf5s!\x14\x02\\J\xa8\xa4\x08$\x03\x01+\xf6\x87\xe4\x7f{S\xb7\x8f\xe0W\xee\xd2\xaa)\x9c\xad\xdf=\x06\xb3\xa0%\x1b#\xe6\x0e`KE\x1e\xa3\xe5B\x11\x1e\xd5\xe7\x1e-\xfdb%N\xacH\x11\xcfQ\xc4\x97\xf1\xdf\xa8\x10\n\x95\xc5\xb9,9\x9fn~\xfaQ\xe6^0\x02T\xc8\x10\x8f\xc5\xd0\xb9r\xa9S\x19D\x92&<\xf3F\x01\xe8!\xc7nYO\x1c\xea\x91\xd6\x13\xfdRT\xec\x97\x11\xf8\x01\xcc6\xb7\xa1\xf4\xfbWV](\x87_\xec\x96\x9f\x7f\xf9\x05\x07\xa0\xc9\x13A\x0f\xc0\xcd\xeeTcq\x896\xb6lC\xb5|\xf0\x87\x97b\x85z\x9e\x9c:\xdc\x8fG"\xcf]\xea;\xbbt\xf5\xaa\xdcA\x80\xcf\xe6\x08\x82{\xe5\xe5\x05\xe4=\xdf|\x99\xfc\xfbG\xfe$\x0f\xff\xec\x80\xbb\xc41\xcf\xe87\x0c\x1a\xeeK\x00\xd3\xb3\xb8\xddK\xee\xa0\x94a%e\xfdX\xeb@\xd3\xe5\xdb1kLFN\xe1\xa5Nl\xc4\x11\x96)}\x12|/\xf8\x04\x98\xc7\x129\xa21}\x92\xbd\xc7\x85\xd8\xff0\xf8J0\x061C\xfc\x8d\x05\x8a>/b?Lb{u_\xc8\x94\xc07b\xd55k\xa4`)|#\xc2\xdf\xdf(#"\x07 \x130\x99X\x14\x7f&A\xf7\x03\xe9\x06!\x0b\xd7\xbe\xf6\x1c9\xfe/\x7fp\xee\x13\xfe\xbb\x937\n\x14\xf3\xc0\xff\x0f|;\x98\xe5\xf2 d\xe0l%E@\x11\xc8\t\x04T\x01\x98\x13\xd5t\x07\xec\xc4\xdf-7\xee\xc0\x06T\x00\x81g\x00\n\x90QW\xc1\xeb4+\x8f\xe5_\x80%\xc0T\xaaX%\xad\xc7\xcb\xf5tE`\x12\x02F\xc4\xc7\x07\x1b\xa9e\xf6\x80lcF\x91G\xe1\x1c\x96kT\xb8\x99i\x01\xb6\xf8\x8f\xd8\xa7 O\xcbVk\xb1\xd7\x86}\x1e\xa3\xe5\x1b-\xf7\xe8{\x8f[~\xf7B\xf6\x9e&\x8f\xb8\x90\xf9\xe3\x07\xb7\xe9\xdeG\x11#N\x82\xb8e^i\xd1\x07_GN\x19pl&\xe2u\xbcf5VX=\x859\x9f\x9dH\xcet\x1d~\xb7\xd6\xe3\x9d\'\x07L\xb0\x89%\xa7W\xc9P\x1b\x02\x828\x95\x16C\n\x99q\n\x9bhIY\x81\xfc\xe4SX\x06\x06\x88\xc7\xfd\xef%/\xff&\xd20&\xa3\xf5\x8b\xcb\xe4\xbd\xdf\xbe\xc8\xe4\xa3\x1bA\x1d\xfc\xc6\xc7_\xf2\xf2\xa1w\xca|\x04\xd8]\xd0M\x08#\xc8\xbe\xe5S\x9bd\x1d^\xfc\xde\xfd\x85\x17\xa4\xf5X\xffd\xe3_\x9c\x9bO\xcbR\xa3\xd5\x0f\x86\xbaC\xb3\xb2\x80\xfd#\x1e\x08WW\x98\xf9\xc0dC\t\xdc:\t\x15%\xf6\x17\x15f\x04\xc1u\x8d\xe0\x7f\x02\xdf\x06\xc6\x80l\xe6(\xf1Vf\xf1^\xe1J\xb2M\xf8\xfen\xf0-`;\x07\xb2\xc6\x10F\x1a\xc0\xf1H\n\x1f\xf3\xdc_J\xb1\xdc\xb9\xea\xa2\x15R\xb8\xbaN\xc6\xb0\x82\x85\xc1=Fi\xcdoW\x03D\xa6\x10\xdb7\xe44\x08\xcb\xc1\xc2\xc5\xd5Ry\xe5*\xe9\xfe\xc3^\\\xc7\xec\x1b\xa0m\x1a\xb6,\xaf\xc5\x81o\x83\x9f\x04S\xba\x897nH2\xe9\xc4\xb2\xb1,,0\x99RRD\xe1\xf1]I\x11P\x04bD\xc0vp1\x9e\xae\xa7e!\x02v\xc0X\x8e\xb2}\x1f\x8c\xf5W\xa6c\xe5\xc8\x12w\xb2\xbe\x9a\x98\xf0\xfa-\rr\xeb\xa76K\xc3\xa2R\x19\x19\t\x9a\xe5 \'\x0e\xf4B\x19\x17\x94\xf2j|\xef\xf28y\x9eenC\x16\x80\xb3\xbc^/\x8b\x82\x00\x86\xe6|\x88l\xfd=\x94\x9d\xa8\x17\xc0\xd2\x8fX\xa5s+\xd3P\x19R\x8eD\x06\xad6$\xca}\xf4\x90"@\x04BM$\xb4\xe3\xe2\x12&\xb3\xb3]Q|4~\xf70\xf4\xd1\x82\x8f\n?\xf2\x08\xe4HZ\xee1b."\xc9\x1a\xeb=Z\xf1\xb5aY.\x95{&R.\x14z\xcdX\xb6\xd3\x89c,\x136\xc4\xae\x11\xcf@p\x06]\x06\xd3\x1b\'|\x89\xf8\xee\xfeb\xba/\xf3\xe1t\xe3\xce\xee\xf8e\xba\x17\x7f\x04\xc2\xc7\x86\x99Sg\xadq$|\x03\xf8\x07\xe0\x87\xc1\x960P\x84\x8857\x9b\xdac\xfa\xf6\x1eT\x8e\xad\x07\x7f\x10\xfc\x97`\xf8\x9d1\xc4\xfb\xf3\x9c\xe8\xf3d64\x96\xc90N,\xf2I\xc5e\xab\xa4\xe2\x82\xa5\xe2\xaf/\x85K\n\xb4\xd4v\x8c\x81\xfc\x9don\xbcZ\xfc9y\x98\xf0\x89\xa5\xc0\x08\xa8Ru\xcdj\xe9{\xea\xb0\x04z0\xc6\xd9|8g\xdar\xe1\xcd\xb9\xfc_\xf0\xcb\xc1\xe9$Q8\xb9\xf4\xf6i\xcb\xc4rL,\x8b\xfdm\xb6\xed\xc0[N\xf4lE \x8b\x10\x88\xde\xb1eQ\x01\xb5(\xd3"\xc0\xce\x93D\x13\xf7\xef\x80W\x809\x18&d\xda\xc4\x17\xb7\xd6\xd2\xee\xcf\xdf\xb6Nn|\xf7:,\x01\x19\xc3\xd2!8\xc1\xc5 \x99\x07\xbfYt\x0e\r\xd7\xe1\x98P\xe4c\xa21\xb1\xafG\xce\x12@\xc6\x8a\x02\xc3\x87\x05#\x01\xb7\xc8\xc9$\x0bP\x9f\xdd\xedP\x96\x80|hQt\x05\xe6\x89\xe6\x15\xa1R\xd8h\xbc^\xe8\xe9.zr\xa6 `\xba\x03|P\xd4\xb3]\x03{\xaaX,\xf7\xcc\xac\x10O8\x97\xdcv@\xa1\xd7\x01\xc1\x99\x91r\xb9\xa5\x15_\x0b\xd8X\xed\xa1\xbd\xf2M=\x15Q^\xc8Z\xee\xf1\x1a\x9b7\xe6\x93\x99\xe5\xd6\x835\x1b\xafJ*\x99\x8e\x0f\x1f\xdc\xe2q3\xc4\xe2\xbb\x13\x1b\xe7\x80)\x8c\xb3;\xd5\',~\xa5\x06\xcfl-\xa2v\x97@q\xcf\x08\xde\xc4\xdbX\xecLuQ\xd8q\xde\x1b\x11%\x85V\xbf\x85\x10M\xb8\xef\x85L9D\x0e\xee\xea\x90-\xc1\xa5f<\xf1ry:\x9fK\xa5[aI>\xac\xe3G\xe5\xce\xcf\xec0YM\xb6\xf5\x9f\x99gRA\rz\xef\xb7\xb6\xc0\x0fa\xb9t4\x0f\x18\xab,sP?\x14\x81\xd9"`\xfa\x9d9\xf7\xda&\xb9\xf0/\x97@\xf97"\'\xf6wKw\xdb\xb0\xf4\xe0\xc5Ko\xfb\xb0Y!2\x00\x9f\x81]-\x83\xe6x/|\xa6v\xb7\x0eI?V\x1b\xf0E2\xbb\xadq\xc2\x97\x88\xef\xe3\xbf\x84\xefQ\xb1M\xb7\xad\xb6\xeb\xe6\x8e\xb9\x0c\x899\xdb\xf0\xb3u?\t\x08\xb07\'\xf4\x18H\xcc\xdc\xe4G\xd8n\x05?\x02\x0e\x1f\x9c\xd9r(\x05\x98\x11\x0b\xdbX(\xfc\xfc\x05\xb8\xe0}\xe0\xdb\xc1n\x08\xfa\x90\xfb#\xd3*\'%h\x15nnC\xf3U\x14K\x05"\xfa\x96_\xb0L|\x08\xec1\x06\xf7\x17\x01\xca\x18lLT\xfa\x19\xd9cR*\xb3;\xc0\x1c!\x18\x98\xaf\xaeT\xaa\xaf_\xe7DV\x8el\xf0L\x97g\x11\xbb\x1b\xc0W\x81\xef\x03\xf3X\xa8yc?S\xc8\xb6\x03\x96g\x03\xf8z0-C\x8e\x82\x9f\x06\x1f\x04\x9bG\x14\xdbL-#\xb2\xae\xa4\x08$\x1f\x01H\xd9J9\x8c\x00;L\x0e\x9c\xff\x17|\x85\xbb\xcf\xc11\xeed\xfd\xfd1\xe1\xdb>\xb9I.\xbbe\x85\x11\xf6\x02\xf0\xd3\xe4X\x0f\xb0\x9f\xb7\xe4\xf4\xe7I\xd2\xffa\xa2h\xef\xab\xdb\xb8!\x80\xea\xa4K\xaf\xf6S\x8e\x02\xd0\x9b\xe4\xe1\x8e\xf95\x8c\x08\x8a\xb6`\x87\xf7\xb8eN\x13J\x1b\x04B\r#\xb4\xe3f\x8d]S\xd8n\xb8\xbf=k\xb9\xc7\xe76&\xcb=\xb4Ak\xb9\xc7\x802\xa1%\xe9\xf6\x06Sl)\xb8\xdbn)\xa2\r\x86}\xb1\xbb\x99h\xb9g\xf3n\xb6\xf8\xe0vb5\x10\x1a\xe2\x8d\x80>F)G\xa5\x1e\x15\xf3\xf5P\xd2\xd5b\xbf\x01\x06\xe3\xd5\xf8^\x04Q\xc2.\x9f\xa6"\x10>\xe1\x1c\x8bJ(\xf1\xc2\xaar\n\xa4\xc7\x0f\xf3\xfe\x9c4\xad\xa9\x16\xd9\x01\x17\x10v\xb25~\xc6\x94{6\xc8\xd0\xe1\x17\xba\xe0+i\xcc\xe8\x85\xa7<9\xc3~\xe0\x1c\xaf\xaa\xaeX~\xf5\xd5\xdd\x187\xfb\xa1Su,\xf1\x92U\x8c\xf0jx\xdb\xbf\x9e/k\xce\xab\x97\xe6#}\xe6\x85]\xb2\xf2\xa0\xf7\xc9~\x04(\x0b\x0e\xc3/\xe0\xf0\xe0\x00\xba\xa3<\xb8\x11\xc9\x93\x05\xcb+\xe0\x1b\xdag\x82\xfb\xd0\xaf\xb0\x0f]M\x10\xdd\xca\x08\xfa\xf2Q\xc8\x8f\xa3\xb4\xb4\xe2\x16\xca?.\'\xeel\x1e\x02\xf7\xbb\xdb\x01\xc8 \x08D\x01K\xeev\xb8\x07\x18\xee\x0f\xc80^,\x0c\xc3?\xeb\x08\x97\x1e\x9b\xbe\x0f]\x1f\xfaoz\x1a\x99\x8e"\xf58acC\xf8E&=\'\xd1\xb0\xdd\xf03t?v\x048r\x10\xc6\xd5\xe0\x8f\x81\xf1\xb6N\xf6\x81\x7f\x0b\xbe\x17\xbc\x07|\x04lk\x0e\x95bFlny\x9d=\x8e]C\xf6w\xcey0\x80\x99\xa8\xbe\xef\xc1\xb6\xd1\xfc\xea\xcc\x85x\xcf\xc9\xf3b^\xc9\xa4\xd9`\xdcF\xe3\xaf-\x93\xaa\xeb\xd7H)"\xfa\xfa\xca\x8a`\x997\xe8Z\xfc\xe1<\xbe\x10\xa4|\x92\x08\xc2\xf88\x8a\x80ae[\x96K\xf7\xa3\x07e\xe4hg\xb4q\xd2\x8c\xa4\xb8\xfdG\xc1[\xc1,32ep\xc1&#\x88ua\xcb\xf1!\xec\xbf\x1fl\x95\xb4,@\x1b\xf8I\xf0\xe7\xc1\xf7\x83\xed\xb9\xdc\xb2\xfe\x95\x14\x01E`\x1a\x04&wt\xd3\x9c\xac?e\x15\x02\x1c\x9e8(\\\x0bf\xc7\xca}v\xb8q\'\xe33\x08\x02\x16\x85\xbbw\x7f\xe3"9\xfb\xb2Fi\xc1\xe4!o\x0c\x8e\x9e9\xd9\x8bB4\x1a\t@\xa0K\x1c9c!\x8d\x87hI\xa1\xc3E|\x91\xe6\xb2\xea1\xcc\xc8;\xf1F\xdf\x90\x97\xaa\xb4b\n\xde\xa6\x1a\xeb!^\x9b\x90\x96\x19\xdf2kjS `\xea\x1e\x1f\x14\xc9,\xb3>ira\x95F\xf9\x18\x8a\xf8\x9d\xc7\xedL\x8b\xfb\x94Y\xd9\x1e\xe8_\x8f\xcbp\x19)\x97Qr\xe9\x7f\x8f\xcb_h\xc1\xc7\xdfl\xc4\\\xaf\x96{L\xdb\xde\x8f\xb73b\xa3+;\x1aa\x9f\x07\xd3\x94\x98w\x8b\x8f\xc1\n_\xd9\x8bG\xe4\xdb-\x0bO\x9d\x8a*`dQ\x8dg\xad\n\x8a<*\xf8*\xb0\xa5%_\x15\x0c\xc3\xab\xf1\x9d\x81<\xf8\x1d~Y\x8dr\x8e3e\xde\x83\x06z\x01\xdc\x90\xb70\nP\xec\xb0\xae\x19\x00\xc4\xd49\xf6m\xbe\xb0\x1b\x13\xf1\xad\x01\xc7\x84\xd3\xb0t\xd8(\x00qU\x0cE`\xda\xd6\xc5\xc0\xc1\x9d\x9df\xa9 \x9b\x13\x93\xcbt\xe2\x8b\xb0\x12\x04Gi;6 ?\xff\xe2\xf3\xa68\xd6\x92>Yes\xe7\xbc\xf2\xea\xf7n\x90-7.\x91VU\xfe%\x0b\xfa\x9c\xbb\x0fe2\xdbq\x04\xd1\xbd\xf4\xc12\xdb\xb4?v/\xe6y\x86j\x102[>$\xd8|\x9c\xcc\xf3\xb9z\xc4_\xe8\x93\xc2R?\x14\xe5%\xb2|c\xb5\x91\xeb\xb8\xa2$\x0f/0(\x83r\x88\xa1\xe2\xb0\x1f\x16\xde\xbd\x1d\xc3\xd2\x8ft\xb9\xedF\x90\xb2^X\x0fv\xc2\xa2\xb0\xf3$\xac\n1\xa6\xf4\xf0\x18\x94\x86=\xd8\x1f\xe8eG\xe7tyf\xc7\xf9\x16S\xbf\xa4\x96\x85\xe3\x88\xcdr\x8f\xa3\x1ck\x9d\x8cAHNw\x99s\x96\xe3\xe0\x87\xc0\x0f\x82\xa9\x10<\x04\x0e\x1f-\xac\n\x8e\xa3\xa2\x9d\xef\xf0\xf7+\xc0\xff\x04\xde\x02&\xb1\x82\xf9\xbb=\x9f\xc7\xc6\x89\xf3\x03\x8eon\xd2\x05\x8b\xe0\x83\xef\xb2\x95R\xbe\xa9\tW\xe4K\x00~~G[\xb1\x8a\x89r\x04\xcf\xc5\x7f\xc2\t\x03\x1b\x1f\x93\xea\xbfX\'-_{\xdci\x9c\xbc\xefx\xe9myY\xc6\x1b\xc1\xff\r\xb6\xc7\xb0\x9b\xf6d\xf3\xba\x009\xfd\x1a\x98e \xb1.I\xfc\x9d\xbeBh\x11Hf\xf9>\x0e\xe6\x00I$"\xd1\xc0\x01%E@\x11\x88D@\x15\x80\x91x\xe4\xca7\x8e\x1d\x1cP\xd9\xb9~\x1d\x8c\xd9\x9f\x19:\xe2>t9c\xe7\x98\x14\x97\xfb\xe5\xef\x7fp\xa9\xac8s\x9e4\x1f\xed\x85\xf0\x86,\xccp\xb7\xe0L\xafd\x91\xe99\x132H\xfft\x8e\x849\xe7\xd44\x810\x04\xc6\x82y\xe3\xfe{\xc2\x8e\xc7\xbc\xcb\xa5\x84l@\xa6\xa9\xb2\xc9*\xa5\r\x02f"\xc6\xdc\x84v\xdc\xac\x85\xd5\x13w9;C\xa0\x1fG\xd1\x87-\xad\xc9\xc8|\xb6\x19\x1d\x97KD\xa90\xe2\x96\x01 \xda\xa0\xe4\xa3\xdf=Z\xecQ\xd9g,\xf7\xa0\xe0\xf3\xe4s\x0fm\xc6\xf6-\xe3\x0212\x13\xf1\xc5\xf9j\xe4\xfa\t\xc7\xdd\x92\xa4dc\xf3\x1d*\x80\xcdEX\x1e\xed\xae\xd9\xe2\x83\xdb\x89\xd5\xc0\xcb\x88\xf3D\xcb\xbdF\x18>\xd0\xb2\xd6Z\xeeq\xa9.\xad\xf5\xb8\xe4\x96\x8a7\xe3\x1f\x11\xd7q\xc92\xeb\x88/a\xb8\x1dB\xdd0\xa0\x89\xd5\x04\x85\xf2\xc9\x1b\xe1|K\xdd\xf1\xf1\x9ck\x9a\xe4\x86\xb7\xad\x91vDvg\x1e\x94\x14\x81\x84#\x80ffdE\xf7F\x9c\xf5O$*\t#eE\xf4Wn_`\xb7\xf6+e\xbd|\xf4w\x85Xf\\ZY&\x8d\xcb*\xa08\x84\xf2\x10/\xa2|\x18\xabhM8\x8aH\xab\xb4,\xe4\x0bh.)\xa6e!\xad\x05\xbb\xb0\xcc\xb8\x13\xfdJ\',\n;\xe1\xf7\xb2\x03\xab\x1b\xac\xa5!-\n\xade!\xf7-\xc5nY\xc8\x82\xe2*f\xdd\xf6\xb16\x11\xdd\x12\x192\xab\xd1V%\xb7\x0b\xc1\xafu\x99\xd6`\x0c\x8b\xfeK\xf0\xc3\xe0\x03`\x98\x90\x87\x88\x95B\x85\xd1G\xc1w\x80\xf1V+d\xf4\x10}\x1el\xe7\x05F\xf9\x071\x06\x91|+\xaf]#%k\x1b%\x1f\xe3\xe5h\x17^B\xf2\r\x13\xfb\xc2)\x0c\x19p\x8f\xc4\x10\xee7\xda3 \xa5\xeb\x16J\xf1\xaaz\x19\xdc\xdb\x82q\x17\xf9\x88l;8`p\xfb\x07l\x89\x0b\x06\xf0\x8c \xab\xfc[\x86\xdc\xfe\x1c|\x16\x98\xf5\xc76`\xbb\x80\xf0v\xc0r\xde\x04\xbe\x16\xfc\x11\xf0\x17\xc1$\x9b\x8e\xf3M?\x15\x01E \x02\x81\xe8\x1d_\xc4)\xfa%\xcb\x10`gI&\xb1\xa3\\\x0ef\xe7j;V\xec\xc6\x87l\xb4\xc02X\x92\xfc\xc3\x0f/\x91\xa65U\x88\xee\xc6eC\xec\xc7\xa7\'\xa8\xe5\xc2\xa2\xc7N\x7f\xee\\~\xa5\xf5\x1f-\x131\x8c\x83,,sIQ\xaf%\x02\xd4\xfb\xd0oU_\xdf\xb0\x01\xc4\x8e\xd6\x9e\xd0\xa1%R\x1e\xae\x9c\xd5\xc5\x9e\xee\xa4\'GC\xc0<\x14\xf8 \xfe\x96\x8d\x08\x86\x8f\x08\xcb=<7F!\x80-\x85P.\xdb\xe6\xb3\xc4\xfd^\xd4?}\xecQ\x99g\x18\xfbt\xeaN+>Z\xed\xc1\xa1\xb5\xd9\xa7\x02\xd0\x0b\xf1~\xcc\x8b\xf3\xe0\xbam\xc4m(\x14\x82\xdd]/I&\xed\\d\xdd\xc1\x07\x1b\x96\x81\xc4\xe2G\xe4;\x86\x020@\x0e\x95\xe4|N\xe6b\xb9\xc7%\xd1\x0cxB,9\xa1\xe1\x96y\xb4\xccLr\xdf\xd61v\x13F\xbc\x0f\xdb\x02\xcbC\xe2\xe4k\xf2\xc4\xc6\xf9m\x9a\xcf\xc3/t\xc8\xa6\xab\x17\xc1_\x18\xfb\x1f\x0b\xf24\x17\xa4\xe9O\x01(b\xcb\xab\x0b\xe4\xd8\x9e\x1e\xf9\xc3\x8f\xf6\x9b\\"\x9cR\xd2\x9a\xb7\xf53X\xdfT&o\xfd\x97\xcd\xd2\x0f\x9fl\x0c\xb4\xa2\n\xc04m0\xb9\x98-\xf4\x19\xa6k\n\x95}\x86\xe7\x1d\xdd\xcb0\x14}|Q`zY\xf4w\xb6\xb7eWCE`\x1efF\x8c6\xecC\xc2\x05\xb0*,\x83\x95t\xcd\xfcR\xc8\xae5\xa6\xed[\xcbB\xfe\xceU,\x0cNb-\x0b\x8d\xf5 ,\n\xe9\xbf\xb0\x1fc\x1c\x97\x1ew@a\xd8\xdb\nkC\xf8\x86\xeb\xa1?CX\x16\x0e2\xd8\x14\xc8\xd1\xd9 \x07\xee\x10\xc8g\xcb\xc8Ox\xce"\xf59\xa1\x02\xe6\xea\x0eG\x07\xb2%\x8eTdV8\x95{\x97\xb8\x8c\x8d\xec\x02?\x08\xbe\x0f\xfc;\xf0\xb9\xe0\xaf\x80\xe9G\x8eD\xb4\xa3\xcfy\xecx\xe3\x82_\xbc\xaaN\xaa\xafY+\xc5\xa77\xa2\x9e\x11\xd1\x172M\xb0\x07\xf2\x0c\xe71\x91\r\xcf$\x9c\xb4\x0f\x8c\x8dcX\xce^s\xe3\x069\xf1\xd9\x07\x9c\xb12\xf2\xe6\xc4\x85M\xfb\x1c\xf0\xeb\xc0\xdf\x07\xa7\xbbR\xcc\xe6o\x15\xf2J\xa5\xe5:0\x1f\x94\x89\xba\n\xdb\x0e\xec\x96\xe7py\xf0\xbf\x81Y\xd7\xf4\xeb\xd8\x0c\xb6\xe9aWI\x11P\x04\xc2\x11\x98\xf8P\x85\xff\xa6\xfb\xd9\x89\x00\x07\x05\x0e~o\x04\xf3\xad\t\xf7y,\xaed\x95\x7f\xe5\xf0\x0f\xf5\x8f\xffy\x89\xcc_Y!\x1d\xf0]\x14\x8b\xf2\xcfd\x049b4\xe0\x84\x11\x87\r\x0c\x8d\x1c\xeb\xcd\x08\x92\xc0[%\xac\x0c\xe9\x9e0\x04(\n\xc1\x9e\x89\xad\x91\xf5Q\x06\x05\x07k\x87"\x8cR|\x10\x08\xb5\xf3\xd0\x8e\x9bnX\x17\xc0]\xce@\xbcX\xeeQ\xa1g"\xe5\xc2r\x8f[\x13=\x17\xc7h\xdd\x17\xeb,\x86\x0f"\x1fHR\xa8\xceC;\x91\xc7\xa9\x18\x9aX\x04\xe7\x8c\xd4|\xba\xd9v{\x93\xb0<\x84\xe5\xdf\xee\x9a->\xb8\x8dV\x86X,\xf7\xb8\x1c\x17/.\x8c\xe5\x1e\xb7F!\x8b:\x8b\xd9r/\xac\xbe\x99[\xfb\x95\x93\x9a\xe8\xd3\xa2\xb02%p\x97\xbe\x1f\xe0\x03L\xe0\xef\xce,;\xe6\x12obk\xb1\x9b\xe1\xd66\xda\xf8\xfe\x1d\x1dr\xe1_,u\xf0Meyf\xc8\xefL?s~Y\x8c\x88\xbb\xf7|r\xbb9\xd5*\xe4f\xba.\x1e\xbf\xf3Q\xb4Q\x86\xdf\xf9\xb5\x97\x89\x0fm\xac\x17\xcb&\xa9\xfcPR\x042\x16\x014_Go\xe3vzQ\xfa\x871H\xc5PuO\xe8w\xc2\xbe\xbb\xdd\xb7\xc5 \xdc\xb2p\xfe\xb2rX\x88\xc1\xaa\x10\xfd8-\x0b\xd9\xa5QAH\xab\xc2\x11Z\x18\xba\xd6\x85\xb40\xa4\xcf\xc2.\x8c\x95{\x9ei\x95g\xee=&\xc7\xf6v\x1b\x8b\xc3p\xd7\x05!e;\xc6\xd1X\x87R\x9b\xaf,\xdf\xb2\x02\xddJ4#\x04G\t2;(*\x8e\xc8o\x07\x1f\x03\xd7\x81\xf1\xa6,4\xdf\x89R\xeb\xf8\x95\xe4\x82\\\xd0Ti\x02m\x94mX\x80C0Hh\xc72_\xfeF\xd9(\x06#\x06\'\xb1\x04~"\x1f\xc1\xfea)\x84eb\xe9\x99\x0b\xa5\x7f\x1bVD[\xe5\xe5\xf8m)a\x10\xa3w\x83\x7f\n\x86p\xe6eD\xc5\xd9\xc9#\xe6\x93\xf3\xd1\xc5\xe0\xbb\xc1\xac?\xe6?\x16=\x05\xcfa\xdd\xf3\xfc\xd7\x83\xa9\xf4\xbc\x03\xfc\x08\x98u\xcd\xe3\xfc]I\x11P\x04\\\x04by\xb0\x14\xac\xecA\x80\x03#;\xd8\xa5\xe0\xcf\xba\xc5b\xa7\x1bW\x89\x9e\x02\x0b\'\x0e\xe55\x85\xf2\xa1\x1f_\x8ae\x16\xe5X61\x18\xb1\x94\xc3\xbdw\xf4\r\xc7Xd)@\x07\xff\t&\x1f\xc2\xd3\xe61D\xadR\\\x110\x93G\x08K\x03x\x13nh6\x92+\x97/\xd2\x02P\xc9\x1b\x02\x14u\xec\xe4\x85\xf0\x91\xf9\x94Sh\xf5b\xb9\xd7Fk\xbd8[\xee\xb1a\xb0\xb7a~L>\xb1\xb5m\xc3\xe45\x8d\xeb\xdb\xf4\x92n\xfe\x91\xedP\x19\xa8\x8c\x0ce;\xb4\xc33\xa2\x93\xb1\xdc+\x85\xe5\x1e\x94x\xf1\xb0\xdcC5\xa5\xdcr/zI\xbd\x1f%\xc6#x\x99\xbf\xa0\x1c\xd8\x00#*\x00=\x10\x03:1h\xf8\x91\xdd\x9d\x92\xc7\xa5\xcd\x99LhW\xc5h+\'\xf7\xf7\xc8C\xff}\xc0\x94\xc4*\xe4\x12]\xac\xf0y\xe4\xad\x08\xda\xb5l}\xb5\xb4\x1c\xe5\x0b\xbc\x0c\xc74\xd1\xc0i\xfa\xd9\x81\x00\x9a9\x87\xa8H\xc9\xd8\x1c\x99\xba|\x90\xac\xa7\xb2,\xa4\xce\x88\x16\x85!\xcbB\xbc\xb4)(\xf0K)\xc6\x80y\x0bJe\xd5\xa6:\xf9\xcbw\xad\x97\xa3{\xba\xe4\xc5\xa7Ze\xd7\x93\xcd\xb2\xed\xc1\x13\xc6\xff`\xb8\xbf\xcf|>\x7f\xf8\x1fS\xeb\xc0\x89\xf5\xc0\x8e\x89l\x89\xd2\x05\x99s\xdc&\xf7 \xbf\xcf(\xec\xfb\xeb\xcb\xa5\xfa\xba\xb5R~\xeeb\x18\xa0Cq\xcbU\x0ct\x83a\xb0\x0f\xbf\x85\x9bj*7\x18#h\x05X\x85\xfc\x1a\x05 e\xa9\xf0\xce{\\\xf9u&\xb2y3\xf8\xfb`b\xc0y`:\x11\x1f.\nOT\xd4r\xd9/-5i\xd57YGa\xad.)wE\x12+\x87e\xe3u\xa7\x83\x7f\x0b\xbe\x1d|\'\xd8>\xbc\x93.\xc2oJ\x8a@N"0\xf9\xe1\xcaI\x18r\xa2\xd0\xec\x1cm\'H3\xe9\x060\x07\x81\x19\x07D\x9c\x133Q\xf9G\x81\x85\xdb\xf7\x7f\x0f\x96\x7f\x88\xe0\xd6\x81%\x10Fp\x891\x15\xd3C#\xb7\xf4\xbf\x92h\xca\xc3r\xc5|p\x90cO\x9a\x8d\xed\x89.{"\xd3w\xfc*\xc2\x07\xa0U\x00z\xb9\x19\xad\x98H\xc5\xe8\x9e\xd8\x04\xb4^\x1c\xd1\xc8\xc0\x02@\xb8\x8d\xc0\xc4}\xacy\x8cOs("+\x8e\xd3\x9a\x8cL\x016\xdc\xe7\x1e\xfd\x14Ap\x148;O\x8c\xe5\x1e\xf21\xae\x15\x1b\xdf\xa5\x80\xca\xfc\'\xfe\xd1f\x06f\xa6\x10\x8e\xa1\x1d\xf7\x1a\x03\xb6\xb3ow\xcd\x16\x1f\xf6\xfb\xc42P\xc1J\xa55\xf1\xa7b\x8f\xd1r\'\xfa\xdc\xcbV\xcb\xbd\x99\x91\xf6~\xc6b\xac\xe8\xd9\xdb1\x8ew,)\xb8u\xc2 S\xddXvW\x00+V\xc6)\xe1\x9c(\xd3\x88V@\x95\xf3\n\xe5\xceO;\xd6\x7fvlMN9\x08\xd8\x98\xbc\xec\xcf\x17\xcb\xe5\xaf])\xad\xc7{U\xf9\x97\x1c\xe0\xf5.\x99\x8a\x00\x1e\x19G7\x81q\x80\x14E\xb26\x96\x85\x0cW\x1e\xb10\x02\xdf9\xac\xa0\x93\xaa\x98W,\x97\xff\xd5\n\xb9\xf8\xa6e\xd2\x87\x00%\xc7^\xea\x92\'\xef9*\xdb\xb7\x9eD\x10\xa0~\xb3\xfc\xdeI\xdc\x15\x01\xac2\x04\xe3*\x87V\xa5\x10\x02\xac\x04r8*n\xc5\x84\xce\x89\xd8\xc9\x83\xbcY\xff\xfas\xa5\xe2\xd2\x15\x12\x80K\x8c\xd1\x93\xb0\xf8\xe3\xe0A\xa2\x067\x1d\tJI.I.^R#ePX\xf6=s\xc4i\x18\xe1\xa5v\xf2\xcd#\x7f\x0f\xfe/0\xde\xea\xa6\x15\xd9\xd1\x99 \x7f\x1b\xbc\tL\xe0\xa3\xeb\'\xc2\x15\x7f\xce0\x85S#\x88\xd7Q\x12\xa0#\xe1\x9f\x80\x97\x83\xff\x05\xcc\xb3y\x0f\xfe\xa6\xa4\x08\xe4<\x02\xd1\x1f\xb0\x9c\x87%+\x01`\xc7\xc7N\xf5\r\xe0W\x80\xa3\xbf]\xc1\x0f\xb3%\xf3\xe2\xc9\xed\x9c\xdf\xfb\x9d\x8bd\xd9\xe9\xd5\xd2\x86e\xbf^\x94\x7f\xa1{#\xb7#\x83\xce(f\xd2\x9d<\xa0\x85N\x9d\xcb\x8e\xcf\xef\xc3\xd2&\x8c\x0b\xe1\x83\xca\\\x12\xd4k\x1d\x04\x00)\x15\xc1\x83\x83lf\x1e\x88C\xb4\xadk\x06&\xb0\xca@\x0fId\xec\xa9F,q&\x03\x06\x03\xe2\xc0\xa7\x96\x8a%*\xf1(\xec\xfb\x81\t\xdfD\x1b\xc1\xdf\xdd\x1a+Iw\x1fA\x0f\x8cBo*\xcb=F\xcc%{\xf5\xb9\xc7\x87\x10\xff\x11\xe2\x93\x9dq0\x9fv\x1f\xbbiG\xcc73o\xb6\xd8%\xa6\xc4\x9a\xcf\xbcmk\xe3;\xf8a\n\xe2\x92t\xb840\x91q\x19\x15\x97\xfb&Z.\x96\xabVb\xbf\x12~\xc5\x19I\x97Qs\xb9,\x97JW\xe2\xc2G \x0fm\xcb:\xd0o?\xd9o\x82U\xd4,,\x93Q\xb4wF\t\xcd$\xa2\xef\xbf2\xf8\xfe;\xba\xb7W\x1e\xbe\xeb\xa0\xc9z\xb2|\xff\xd9e\xd4\xd5\x8d%\xf2\xfa\x8f\x9em\x02\x1e\x04\x03\x8e_\xb2L\xc2P\xf3\xaa\x08\xa4\x1d\x02\xe8\xdb\xac\xcen\xba,\xe0\x96K\xa7\xad\xff\xd2P\xf6\xdc\xba\xb6\xd8\xd9\xaf\xbc\xf7\x94\xa2\xae=9\xd7\xb6\xc0\x84~\x00W\xb8\n@\x0f\xc5\xb7U\xcc~\xa7\xf5\xf8\x80\xf1=\xdb\xdf\x89\x042\x10\xe3\x12(\x92\x7f\xfd\xcd\xdd\xc6\xea\x87\xe3(\x83o$\x9a\x9cq\xdc\xb9\xcf[?\xbdYJ\xa0\xf4nG\xd4S]\xfa\x9bh\xe45}E\x00\x9a\t\xb3V\xd8Abx\x90>\x02\x07\xa5\xbb\xdd9\xbehM\x8d\xac\xd9\\/#\x90\x01\xba\x11\x91\xf8E\xf8\r|\xe2\x7f\x0e\xcb\x9e?\xb6\xc3Zp("h\x9e\x19\xd6\xdd\xb1\xdd\xbc\x14I|\xd7\x91\xf1\xd57\xda\xde/\xbdO\x1d2\xe5\xe8B\x0c\x11\x7fm\xa9\x94\x9d\xb3HJ\x10\xfc\xc3\xdfX)\x05\x8d\xe5f\xe9\xf5(\x03\x97\xc1\x8f\xa3\x994\xf0l*\x04C\xe3|j`\xa0\x82\xb2p~\x85TlY&=\x8f\x1dt\xe4\xbaH\xd9\xd9\xb6\x80w!\x87?\x01\xf7\x82\x99k{\x1c\xbb)!JBT\xf8\xbd\x16\xfcaw\x9f\xc7\xa2R\xe9\xc6\x85R\x7f\xc7\x05\x80\x98\xc78\x17L\x15\x111\xde\x9f\x96\x89_q3\xc1\x06\xcf\xe3\xe3\xc4o(N)\x82\xb1\xd4\xbd\xe5|\x19\xeb\x19\x82aA@\xca\xcf["E\x08\x80\xd2\xf6_\x7f\x94\xc1\xbd\xad\xe3\xe7G\xee\xf1j\xea9x\x1f*\x19k\xc0o\x00\xb7\x80S]~dAI\x11H\x1d\x02\xaa\x00L\x1d\xf6\xc9\xba3;Tv~\x17\x80\xe9\x10\x95\x83\xc0\xb8T\x81/s&w\xa09\xfb\x8a\x85\xf2\xca\xbf;\x1d\xcb~\x070\xf6D\xf6\xe1^\xef\x91\x87\x81td\x08\xbd~\x82\x89\x96\x15~\xf0\x08\x97\xe5)\xc5\x15\x81q\xd9\x03\xc9\xce\x06\xde\xc9ke\xe2\x9a\xbfi\x13c~M\x9e\xf1\xb8p\x1b\xd1\x9c\xdd\xc7\x87\xc7(B\xc4b\xb9G\xa5\x11\xad\xf8\x10E\xd3,\xd1\xa5\xc5\x9e\xb1\xdc\x83r\xaf\x05/ci\xe5G\xa1-\x16\xe2\xb3e\xf3\x13qI\xd8\x17\xbb\xcbJ\xe0>\x9f\xfat \x9bo\x16\x800\x86\xf2e3\x8ccv\xd7l\xf1a\xbf\x87\xceu\x0bB\xe5j\x11*\x80\\\rK\xbdz\xd7j\xcfX\xeea\xbf\x16\xcbq\xe7l\xb9\xc7{\x85u\x97v7\xccR\xc3\xcd\x8dn\xe2\x89\x00\x15\xac>\x88\'K\xe1\xc6\xe7P7Rf\xc3\xb1\ra\xfa\x1b\xd9\xb3\x8e\xef\xed\x84.7ht\xb2\xd3_\x91^\xbf\x06`EZ\x83\xc0\x00\xff\xfb\xbd\x17\x8d\xb5\x8f)\xb9-T\x02\xb3\xea\x0c\xe3c\xd2tZ\xa5\xbc\xea=\xeb\xa5\xb3\x05\xe3x*\xfb\xe0\x04\x96U\x93V\x042\r\x81\xfc0k\xf1A\xb8\xfa\xe0r\xe1\xae6,\x15\x86\xfc\xb1\xf1\x92\xf9\xb2\xf9\xdaE\xd2\x0f\xf9\x82\xf2\xf7\xf6\xad\'\xe4\xa9{\x8e\xc9\x89}]\xd2\xdf3j^\x88\xd8\xf2\x1a\xd9\xdc\x1d{\xc3_\xd2\xda\xdfsv\xcb>\xd6\n\xadFN1\x1f\xe6X\xa0kP\xb8\xe4\x94\xdc\xf1\xb3mR\xbcb\x9e\x94\xc2:\x90\nA\xff\xbcR\xf15VH\x10\xf2]\xb0\x0f2\x1eWm\xd8\xb1*Y\nA\x88@\xc1\xfe\x11)l\xaar\xad\x00\x0fL5d\xb2\x94\xef\x07\xd3\n\x10\xc2g\xca\xc8JR\xf0\xab"\xdf\x01\xd3:\x8f\xf3TJ\xd4a\x84:@\x9d\x14-\xaf\x95\xda\xdb\xa0\xfc\x1b\x1c\x961\xae\xb8\xc0`E\x8bM_u\xa9\xcc\x7f\xd7\xc5\xd2\xfe\x8b\x1d\xd2}\xbf\xf3\xb2l\x82\xe2\xd3\xa6\xc5t\x99\xfe\xb5\xe0\x9f\x81\xa9\x04\xa5\x12\xd0}\x12\xb0\xa7\xa4\x08\xe4\x18\x02\xaa\x00\xcc\xfe\ng\x87\xcf\x91\xecc`\xcc\x88M\'h;_|\x9d\x1b\xe5c\x82@\xeb\x84\xbaE\xa5r\xfbg\xcf\x93\x9e\xcea\xbci\xe4\xa4\xcb\x1d\x08P\xfe\xc1\xb0\xcev0\'\xa2\x05\xa0y\x939\xa7T\xa6\xbe\xd8d\x0f\x1fl[\x96\xf9d\xcc\xc5r\xaf\x0b2\x15\x15{\xddhOs\xb5\xdc\xb3\xa2\x90\x85\xd1<\x03\xf8\xb0J\xbd\xa9K\x96\xda_\xcc\xa3\x8f\x0f\xb3EV\xac\x88\xc5\xba4e`\xf6\xb0Cql:2>\xf7\xa0\xd8c0\r\xbc\x817\xfe\xf6\xe8w\x8f\xfb\xd6\xe7\x1e\xb7\x15\xf0\xb9G?\x9e\\~\xcb{0]\xb6=\xee\x9b\xef\xd8\xaa\xe5\xdetH\xa7\xdfoT\x00\xc2jE\x96V9\n@\xb6%Tc,Dw\x0e\xa4\xe3\x07z\x8d\x02\xd0,\xabs\x0e\xa5\xfd\'\x9bkA\xa1O\x860\x1e\xfd\xe1G\xfbM~\xe9\xa6\x82\x16\x8d\x89$\xeb\xf7\x8f\xf7x\xd3\xc7\xcf\xc13\x8b\x97b\x03Ac9\x94\xc8\xfbj\xda\x8a\x80"\xe0\x1d\x01G\xaf\xe4\x88\xf1#pw\xc0@{$\x06=\xaan,\x96\xab\xdep\x9a\xdcp\xc7Z\x138d\xcfs\xad\xb2\xed\x81\x93\xf2\'\xf8\r\xecm\x87\x02\x85\xf2\x83;\xf6RNgZ\xf49\x1ak\xff\xea=\xb7\x19x\x85\xe9n\xc3\xfa\\(\x9ch\xdco"2\xe3\xf0\xe0\xfev\xc3,\x19\xa3\x06\x97\xae\xa9\x97\xa2\r\xf3\xa5dU\x83\xe4\xe1\x85$\xfd\x06R\x1e\xa1U\x9e\x91E8~%Z\x19\x88\xba\x0c`\xa5H\xe5\xd5\xaba\x05x`\\v\x1e/\x06\x1b\x0c\xbf\x9d\x0e~\x1d\xf8\xbb`\xab\x18\xc3n\xd2\x89#\xf5\xc7\xc1\x17\x82\xd9"\xad\xc4\x8b]\x90\xf3FJ|\x90\xf1\xeao?_\xf2\x80i\x90.px\x9c\x84\xf2\x06\xfb\x87$\x08y\xbd\xe6U\x1b\xa5`~\xa5\xb4\xfd\xf89\x94\x10E\xc4oF\xf6s\xce\xb4\x9fL\x1f\xa6\x9ar\t\xf8\xf7`*\x01\xa95L%\x06\xb8\xbd\x92"\x90\x1a\x04T\x01\x98\x1a\xdc\x93uW\xdb\xb1\xb1\xb3\xbf\x06\xcc\xce?\xb2\x93\x9dCN\xd8\x0f\xdb\xa5I\xef\xfc\xca\x16\xf3&\xb2\xb3m8.K\x86\xd8\x7f\x0f\xc1\x07J\xc2\x88C!\x92\xa7\xf5\x9f\xf1\xaf\x84\xaf\xee\xb0\x92\xb0[\xe6Z\xc2s\x9a\xb4\xb22XG\xb3!\xd3l\xdc\xb6\xc3\x16\x1f\xaaX7A~\xe7S`,\xf7\x18\xb0\x01\xfb\xc6\xbf\x1b\xb6\x14C\xac\xb5\x1e\x03\x98\xd8}Z\xee\x9d\x82b\x8f\xcbt[\xb8M\x90\xe5\x1eno\x9eR\n1\x14U\xd2\x85B\x18\x86v\xdc\x9c\x11\xe0\t\xbb\xe6\x10>\xecO\x13\x1f\xe3\x89\x96{\r\xb4\xd6\xa3\xef=0\xde\xa6\x1b\xcb\xbd27\x90\x06\xfd\xec\xcd\xca\xe7\x1e\xf3\x14\xd6\x80\xec.\x85p\xbbo\xf3\xad\xdb\xf4C\x80m\x87\x83\xc0b\x06\xf2\xf3H|v@\x8c\xa0\xc9\xa8\x9b\xacr\xea\x133\x818q\xac\x80%\xeb\x1f\xef?!\xa7\x0e\xc12\x18d&\xe7I\xca\xfc\x95\xaf[)k\xce\xaf\x97VDQ\xe6\xb2A%E@\x11Ho\x04\x8c^\xc9U.aU*\xac\x00G\xa5\x7f\x0c\x8a>\x08>Ep%\xb0\xe9\xea&9\x17\xd6\x81}x!yb_\x8f<\xfd\xbb\xa3\xb2c\xeb)\xe3\xa3\x9b2\x1auU$\xf3\xb4\xb3\xcf%\xa1\x0fu\xbbQ\xe7{\xae\x7f\x12\x0f\xca\x86$\x03\xd18N\xa3X\xc1\xd1\xcdU\x1c\x8f\x1c\x90|\xf8o.^\xd7\x00\xeb\xc0&)\\X\x05?\x82e\x92\x8f\xe5\xdaA\x04\xe9\x08\xd2\xa0\xc1\xa4A\xc0q\xbd\xc5\xda$\x1a\x9f\x0f\xfa\x02,\xc0\xf8Qy\xd1J\xe9~d\x1fn\x83\xfbDV$oN\t\xe8o\xc1w\x82\xe18\xda\x94\xc8Jk\xf8\x9ap\xe2\xfd\x99\x8f+\xc1\x1fp\xf7#\xe7\xa5\x84\xd7\xcdw\xc3[\xb7H>\xe4\xc1 \x03\xdb\xd1( \x9c\xcc$\x14m\xb8\xa3_*.Zn\xfc46\x7f\xfdqc\x8d9E\xa9(\xed\xf3\xdeg\x82\x7f\t\xbe\x01|\x10\xcc\xfb\xdb\x1a\xc6\xae\x92"\x90\xfd\x08\xa8\x020{\xeb\xd8t\xa1(\x1e}\x1e\xfc#\x98\x1d<;\xbe\xc8\x8e\x16\x07fC\xe1\xe3\xca\x1b>r\x8e,\xdfP--Ga\x92=\xb1\x83\x9eM\xe2\xbc\x06\xb9\xa7\xb3cw7\xa4K0\x07\xe2\xf8\xe1+\xf0\x89\x1f\xcc\t\xa2+C\xc51\xf5\xdcN\xcaGE\xcfl\x89\xad\x95o\xa5\xcd(\xee1\x11*\x8dP\xa7\xc6\x92\x8fB\x16\x1b\xab\x11\xb6\x90\x9e\xdd\xe7\x9bY8\xce\x96\xf6\x1eX\xeaA\xb0\x80\xbf-g\x8bc<>\x17\x9f{\xf6\t\xe3\xd3Fb1\xf8A\x81\xc6\xec\xf3{\x1a\x12{\x0c\xe2m\xb6\xd8\xb5bZD\xbec(@\xb8\xe5\x1e\x97\xe6\x1a\xab=X\xeaq\xdfZ\xee\xf1\x98U\xf2q\x06\x12\xcdr\x8fVOj\xb9\x97\x86\r%IYb\x9bh\x80R\x98\x149\x89q\x8eM\xf1iO\xa5\xb5\xcb\x00\x96d\xb1\x1f\x1a\xc5\xcb\xa4L\xe8\xdf\xf92\x8a]\xd4#w\x1f4\xa5\xb3\xfe\x0c\xa7(j\\\x0e[\xeb\xbf\xaa\xdaBy\xd5\xfb\xce0\x01\x06\x98\x0f%E@\x11\xc80\x04\xf0\xd8:z%G\xf6\x1aF0\xa5\xa1\xe3\xfdfE\x0e\xfd\x8a.YW#\xab\xce\xad\x13\xdfG\xf2\xe4\xc8\x9e.\xd9\xf9X\x8bl\x7f\xf0\xa4l\x7f\xf8\x84\xd3\xc5\xb2\xcfu\xc9\xf4E\xf8\x1a\x08;f\x7f\xcb\xe9\xad\x81h\x1c\'\xd3a\xb3\xbb\x04NA\xf8-\xef\xdfv\xdc01*Z6OJ\xa0\x10,9c\xa1\x14.\x865;\xc8X\x07\xc2\x87]\x90/\x98\x89m<\xa3\nS\x94B\xba\xe5W\x9c\x06\x05\xe0~7}d\xce\x0e\x8a\xce\xfc\x8f\x92\xe9F\xf0M\xe0\xef\x83\x93\xa9\xfc\xb2\x93\x82:\xdc\xf7\xcb`+eb7\x8c\\xk_s\x16\x96Y\xd7\xc8(\x03\xdeM;&aIpk\x9f\x14"r\xf3\x82\xf7_&\xa7\xbe\xfa\x88\x8c\xd2\x87v\xf8DuC\xd8a\x87\xc5\t\xe5+,\xefv\xd7l\xf1a\xbf\x87\xceuoB<\x18)\xb7\x04L\x8b*F\xcb\r\xb7\xdcc\x90\x8d\x12Z\xee\xe1<\x06\xd3\x08\xf7\xb9G\\\xb8\x14\x97\x016h\x91\xc5-&\r\x12\xc0[kR(\x9f\xfc\xe2\xe2\x1e\xbe\xcbYG\xd8a\xfe\xa4\xa4\x08\xcc\x88\x00\xdb\x0c\xdb\x9b]BN\x05\xa0\x17r\'\x12G\xf7vK\x01\xdb\xbd}6\xbc\xa4\x91\xccs\x91??\x9e\xbf\x01\x94\xf3\xa9\xdf\x1c6w\xceG\xb6\x03\t\xb6&\xb6>|_\xf3\x813\xa4\xaf\x1b/\xf2\xc6\xf0"/\xe2\x99N&\x08z/E@\x11H\x16\x02\xe1Q\x85\x87\x06\x02&\xf0Pw;\x87\xff|Y~F\x8d\xac\xbb\xa0A\xae\xbf\x1d\x91\x86[\x07e\xc7\xc3\xa7\xe4\xe9{\x8e\xc8\xa1\xe7;\x11}xbTa\xe4\xd8\xedo).(\xb9\x08\x10\x0b\xe3\xc6\x06\xdbP\x9f\xea\xec\x8ca\t\xf0\xc0\xf3\xa7\x0c\xf3\xec\x82\xc5\xd5R\x06\xbf\x81\x0c"\xe2o(\x13\xdf<7\xaa0]\xd5 \xc8KH\x00\x8c\xf1%\x96\xe3\x0b\xb0L*/^.\xdd\x0f\x1f\xc0\xfdq\xdf\xc8\xca\xc1\xe0j\x14]\xef\xc1\xf6\xbf\xc1}`f.Q5h\xa5\xc0y\xb8\xc7\xbf\x811\xba\x8dK\xb5\xd8w\x88/\x90A\xf5\xb7n\x96<\x04\xc3\n"\xfa\xf2\xf4K\x7f\x9d\xcb">1\x9f\xa3\xe20\x1f2m\xe3\xbb/\x91\x96\xef=%\x03/\x9c\x9c\xaat\xd6\x12p5\xd2\xf8\x15\xf8:\xf0A0\xf37\xd3+s\x9c\xa2\xa4\x08d.\x02\xaa\x00\xcc\xdc\xba\x9b*\xe7\xech\xd9\x8b.\x01\xbf\xdd\xdd\xc7&>d\x97\xfe^p\xc3b\xd9|m\x93\xb4\x1c\x8b\xb3\xf2\x0f\xd9\xa4\xf2o\x0c\x03\xe7\xb0\x8d\x02\x1c\x9f\xacGM\xa5\x10\x83\x8c\xb9_\xd4_\xf5`\xdc\x10\x98\x8dhA\xe1\xc9\x91\x97b\xcb\x06\xcf\xa5\x82\n\xcb\x1f\x1c\xc2\xf5\x14s\xd2\x95L\xd9\xf0a\xcb\xc8\'\x97\xf9\x9d\x8d\xe5^\r\x14{\\\x82k\x15&f\x8bc\x8c\x90K+\xaaJl\xb9OA\xddZ\xebQ\xbc\xb1\xfb!\xcb=\x1cd\xe0\x13:\xc5d^\xd8\x93X\xd1\xcd\xe4\x13_\xf8}6o\xa6q\x99\x92"\x103\x02l\x9bX\x12+5Xj~\x04N\xd6=\x90\xe9\xd3q\xf9\xc9\x03=F\xb1\xe6\xe1\xd2\x94\x9c\x1a@Yk\xa0\x98\xdf\xf9\xf8)\x04\xffp\xe6b\x89^\xfek\'\x85/\x7f\xfbZY\xb0\xb2BZ\x10\xf8\xc3\xb8\xc3H\t\x02zSE@\x11H\x15\x02\xe1\xd6\x81\x1c\xf2\xbb\xe1&\xa5\x1b\x8a?F\x15\xae\x84\\q\xf9k\x96\xcb\x9f\xbdy\x15\x02\x87\xf4\xc9\x9e\xa7[\xe5\xc5\'\x9b\xe5\x8f\x88,\xdc\xd9<\xe0\xe8\x95\\EW>\xe5\x0b\xc8\x07\x94\xdf#\xf5M\xa9*Y\x9a\xdc\x97\xa0\x1arw\xa8\x90\xa3\x1c\xe5\xe26r\xa4S:\xc9\xf2\x82\xf8\xe7WH\xc9\x8a:\x13L\x84\xfe\x03\xf3\xb8\n\x03K\x94\xc6\xf0B\x8cQ\x85\xe9C\xd0\xbc\\\x9fN\x19\xf8\xff\xd9{\x0f\xf0H\xae\xebL\xf4\xa0\xd1\t\x8d\x9c19\x07N\xe0\x0cs\x94\xc8\xa1D*RT\xa0\xb2,\xcb\x8a\xab`\xd9\xf2\xdak{\xd7\xde\xfdv\xfd\xfc\xec\xb7Z\xeb\xd9k\xcb\xbb\xf6\xca\xf6[\xd9z\xb6\x9c\xf6\xf9\xc9\xa4dQb\x14\xc5<\x9ca\x9a\xc0\xe1d\xe4\x9c\x1b@\xa3\xb1\xff\x7f\xabn\xa3\x1aa\xd0\x19\r\xe0\x9c\x99\xd3\x15Pu\xc3_U\xf7\x9e{\xee\xb9\xe7P|\x8bNI\xc5\x11\x04\x03\xa1\x02\x90\xf2]\xb2\x12\xd0*\xe0\n\xe9\x0b\x90\x12\xe5o\x82\x17^\xfak\xf0\xc1\x1c\xf5=\xbb%\xbc\xa3Qb\xbd\xe8\x07\xaf\xe8\xf7\xcf\xbda\xa1\r\xea\x1a\x1f\x87\x12\x10.k\x1a?w\xa3t\xff\xf7\xa7e\xfcd\xd7BW\xf2\x1c\x9f\x04\xa7\xda\xf6\x82\xa9\x04\xe4r\xe0\x8b`U\x02\x02\x04\xa5\xd5\x8b\x80*\x00W\xe7\xb3e/\xf39p#\x98\xc3|6dY\x13\x07U\xb4\x18(\x83y\xf5\xc7\xfe\xdd!\x19\x86\x93u\x1f,\x06\x12\n\x8c\xacsp\x12`\xbfF\xff\x7f\x85\xf0\x01\x18,w\x02\x80\x18\xddF\x8e\xca\xaf\xc9Po\xc4\x18t\x8e\x7f\xc58,\xc8\x88\xaf+\xfa\xa4\x0e\x0f-\x80\x8c\xa4\x93\xfa-F\xa0\xa2"\x8c\x94v\x86\xcemY\xfd&^$\xecP\xac\xa0\xc8c\xc8S\x18\xbbk\xb6\xf8\xb1\xc7\x89k\xdd[\xac\xe5\x1e\xad\xf7\xa8\xe0\x9bk\xb9g}\xee1\x9a1\x05%\x06>1V|\xfcP\x91\xa8\xb5\xd8\xe3\x96\xb3\xc8\x10\xd6g\xfd\xcc\xb8y\x98\r\x0b\xea\x92\xdd\xe5Gh\xf7\xed\xdft\xab\x08\x14\x12\x01~\x17\\J\xbe\x01\x91\x80_\xea\x9e\xfdN\xd2(C_\xdb\xa8\x8c\xf6;\xcb\xdc\xccw\x96\xf8>\xd3H\xa4\x00\x97\x96B\xa1^\x8a\xcf\xf7\xa1o;\xcb\x7f\xf9\xf9\xe53rq\t\x06\xea3h#j\x9a\xc3\xf2\xce\xcf\xee\x96\xa1^\xb8\x81\xe2\xe0]I\x11P\x04\xd6<\x02l\x8f8j0Q\x85G\x10\xd8\x02\xcb\x85MTaXSs\xf2\xff\x96{7\xcb\xfd\x88*\xdc\xdb>&/?\xde)\xcfJ\xe8!\x96\x1d\xfdQ`C\xb5T\xbfk\x9f\xc4\x06!\xabz\xeb\xe3\xb94\xe5]*\x01aDR"P\x02~\xf16\xe9\xf9\x8bgd\xecX\xdbB80I\xeaB\xf8D\x0e\x82\x19\x1d\x98\x96\x80\x1d`\x96\xd3>)\xec*)\x02\xab\x07\x01U\x00\xae\x9eg\xc9\x9a\xd8\x06\x9d\x8a\xbf\xcf\x83\xd9\xb8\xe7d\x18o&\x8f\\\x05\xc5G\xff\xedA\xa9j\x0c\xc3_P\x0e\xa3\xfe\xa2\xa0\x86Pb.M\x88AiA\xce\x1b\xb9I\x87`a\x12\xa7\xa5\x89Rn\x110o^\x89\x84\x81\xef\xd8P\x1a\xcb\xf7x\x9f}\x8b\xb1L"\xbd\x19@\xbc\xea|g\x18\xa0"\x9f\xc4\xf2\xb1\x90f\x8b]+\xdeP\xe9\xc6\xf2\x1b\xc2\xceRb\x03}\xee%,\xf7`\xe5D?{\x99X\xeeq\x89.\xb1b\xd4\xec\x05-\xf7P@\x96\xd5\xb4\x04\xe6\xc7-\xa3n\x14\x81"F\x80\xaf*\xfd\x00nt-z\xd3\x18AZ\x7f\xea\x83Pl\xf5w\x8dI\x19\xac_\'\xb0t\xad\x18\xa3\xdb\xc6\xf1\xcdV\xc2\x95\xc6\xd9\xe3\xfd\xc6\xe7\x16\x9f\x88]\x9a\x9b\xaf\xa7C\xe5\x1f\xe9\xc3\xbfr\xb5D0\xa1\xd7\x93k7\x1e\xf9*\xb8\xa6\xab\x08(\x02\x85C\x00r\x83\xa3\x87q\xe4\x86IDS\xefi\x85e\x16\x0e\x83\xb0\xaej\xdeT.\x9b>\xbfG\xde\xfd\xaf\xf6\xca\xc5\x13\x03\xb0\x0e\xec\x963h\xc7\x8e\xfd\xb8U\xc6\xa18\xb4\xed\x0c\x0b\x9c\x88*\xccv\xdci~\nW\x8fb\xce\xc9`\xe1\x01\x84\x93\xb9\xebs/%\xcb=|\x03j\xb9g\x1f\x8en\xd7\x14\x02\xf8\xa0\xa9\xd0\xdf`\x97\xf4\xa7QyWY\xc8\xc9\x87\xc1\xde\xa8T7\x84\xe1\xbb\x8a\x1f\xac\xfd\xb8\xd3H+\xdf\x97\xc61QR\x1d\x94\x07\xbfu\xca\xe4\xc4et\xf9T\x00Z\xeb\xbf\x1d\x87\xeb\xe4\xe6\xf7lF\xc4O\xf4\xe5\x8c\x9e\xae\xa4\x08(\x02\x8a\xc0\x15\x100\xabN\xcd\x0f4%v\x95\x0e|\x023\x98P\xc3\x86\x08"\xae\xef\x92\xbb \xb7\r\x0f\\-\x17^\xee\x97\xa7\xe1\xcf\xf4\xb5\x9fvc\xbc\xa0Q\x85\xaf\x00k\xf2\x9f\xdce\xc1\xe6\xa4i\x96\xf1\xc3-\x14x\xd1\xb3=\x86\x87\x1e9#\xa5\x15!\x89\\\xbdN\xc2\x87\xd6#\xeao5\xa2\nG\x8c\xc5e|\x14\xd6\x81Q\xe8\xb1\xd0\xdd\xcd`\xdf\xdf\x14\x91J\xf8\x02\x1c^\xd8\x17\xa0\x95b\xbf\x86\x1c\xfe\x16<\x04fn\xf6\xfe\x1b\x87e\n>\xc2\xe2\x18\x98\xe5\xcb\x9a\xc2\x07\x05\n\x85\x0br\xde\xc8E\'\x04+\xac\x19h\x00s\xd8\xdd\xe4\xad\xc8+)a\x8e\xbf}\xbe\x19!\xbe"0\xe7\xb7J\xbdT*a\xdfdt\xdaiG\xee\xa467\x04K:*\xd7\xf8\xfe\xf0\xc1\xda/\xc1\xff/46`\xf3\xb3T\x03\x94y!\x0c&l{@\xf7\xff\xeb\x032\r\x0bK\xfa\x1fd ,%E@\x11P\x04RE\x80.\x81\x9cV\x83\r\xb5`\xa5\x07\xa2\n\x0f@\x19\x88\xb6$\x18.\x95=75\xca\xa1\xb7\xac3\xe3\x85S\xcf\xf7\xc8\xebG{\xe1;\xb0\x1b~N\xbb\x9c\xe5\xc0\xee$\r\xef\xf5#\xf8\x18\r\xd9\xbc\x16\x83<\xbf\xe6\xc94\xd5\xf8\xe1\x96`S\x8e&\xa1\r\x9f\x1e\x99\xc02\xe1\xf3\x86}a\xbf\x84v\xd6Kh[\x83\x94\x1dh\x91\xd0\xfaj`\x8c\x9e\x0420\xb9\xea\xcd;\x1c\x05 \xdb\xfedY\x9c="%\xd2\xab\xc0\x1f\x06\xff)8W\x16o|1\xa8\xfc\xbb\x19L\x05#\xf3I\xee\x81\xa9\xe8C\x99\x02\xeb\xab\xa4\xe6\x9d{%\xd6\x9f\x83\xa5\xbf\xc8d\x1e\xa1\xce\x0c\xbc"c\x13\xd2\xf0\x19Z\x02>\x0bK\xc0v\x07S\x83q\xd2\x1d,#-\x01\xef\x00S)\xfa\x11\xf0 \x98\xf5a\x1d\x94\x14\x81U\x81\x80*\x00W\xc5cL\xaa\x04\x1b\xab\xcd`6\xbc\xc9\x8dm\xd2e\xa9\x1f\xd8\x81\xd4\x1d\x1f\xdc&;\x0f\xd7K\xf7e8\x0b\xcf\xd7\x80\x01\x8d1\xfb\x043\xbb\xe8.\x01\x9e\xdf>\xa7^\xf6\xc5\xaftR\rG|j\x01\xb88H\x99\xff\x05\xf0\xd2gL\x98\x1183%,7q$\x9f4\x12\xe0ce\x96\xf5P\xca\xb5#p\x00_&;\xa3j\x1e\xb9)\x98\x93\xe0\xdc\xae\x9c~oL\xb4\\*\xf8\xa0Dl@\x1ad*\xfa\xea\xa1\xdc\xc3L\xaa\x89\xa4\x1b\xc0\xdfM\xb4\\\\Ok?\x04\x921\n=\xbe\xaf6Z.\x85\x8d\x05-\xf7(Cx\xc8\x1e\xaa\xcf=\x0f(\xba\xab\x08\xb8\x08\x18\x85>\x94\xec\x0cb\x83\x01\xa6\x19\x04\x99\xefxi\x84J\xf0Y\xce@\x8c\x1f\xe8\x9a\x10\x1f\xe7!\x8a\x90\xf8\xf9\x07#\xa5\xf2\xe8\xdf\xbcaJ\xc7~\xd5N\xb6\xe5\xa3\xb8v\xecw\xf0M\xcd\xb2\xff\x96f\xb3\x9cO\x95\x7f\xf9@Z\xd3T\x04\xd6\x16\x02\xde\xa8\xc2\\*<\x19E \x11F\x15\x86\x8c\xb4\xf3\x9aza\x9b3>\x1a\x93\xe1\xee\tX\x05v\xca\xd3\xf0\x1bx\x1eV\x82\xa3h\xd7cv\xb5\x07 3:.\xa3\x18B\xfb\xedQ\x12\xae-4\x17\xa8-\xfb=/\x1e\x10m\x9d\x0e\x11\xe2\',\xfelT\xe1\x81\xef\xbd*\x81\x96\n\x89\\\xbbI\xca\xf66\x8b\x1f\xf2k\xe4\xf0z\xa9\xb9w\x9f\x0c|\xef\xb5\x05\x12N\xf4\xaa\xbf\x8c?~\x07<\xb6\xd0Ei\x9e3\xa5\xc3=\xe8\xb8\xe5\x0f\xc0\\\x96\xc31i2\xb9\x93Q\r\x1f\xbd\x06\xe7q\x0b\xdf\x83,\x86\x0c\xc9\xed\x12\xce~\x00\x00@\x00IDAT\x89\xcf9B\xf2F\t\x88|\x1a>{\xb3t\xff\xe9SNt\xe09\x97\xb9\x87\xd4\x8dP\t\xf8v\xf0\x9f\x839\xae\xa6/#\xd6+E\t\x04W*)\x02E\x8c\x80*\x00\x8b\xf8\xe1\xa4Y4\xaa3\xa0\xa50\x91\x7fy\xabU-p?c\xe2r!.G*Ep\x81\xf7\xfe\xfc>\x19\x81C\xf5\x19\x06\xfe\xc8\x13\x99\xa5\xa3\xc8s\x12V\x86y\xb5\x00t\xcb\x1f*\x83C]"\x97\xbf*\xe5\t\xa9\xe2O\x96\xefN\x84\x16r\xa0\xb4zM>\x0f\xd2`\xd4Q\xac\xa5\xf3&\xdb\xae\x99Vz$\xab\xfc\xe3\xfeB\x96{T\xf4\x19\xcb=\xc8\'T2T\xa1\xbc5P\xf81O\x96\x83\xd3\xd2\x14[\x98\x0e_\x14\n,\xdc\xa7u\xe1\xa2\xd1rq3+l\xca\x9dN\xe1q\x8f\x92"\xa0\x08\xcc"\xc0o\x90\xca\xf1&X\x01R\x01\x98^Kb\xd2\xe9\xba<"&\x10Q\x11~\x8aA\xb4I\xbd\xf0\xbf\xf7\xe8w\xcf\x99\xb2\xe6S\xf9G\xe8\xec\xd2\xe2\xf7\x7f\xed\x80\x8c\xc1I<\xfbr\xed\xfa\x0c\xf4\xfa\xa3\x08(\x029B\xc0Y%\xec4\xb8\xd4Y\r\xc1\r\xc3\x10\xe28q\x1c\x11\x86\x8cu\xeb}[\xe4\xc8\'v\n\x834\x9dz\xaeW\xde8\xde+\xaf=\xd9)\x17O\x0e::.Wn\xa3\x0c\xc9\xb4\xd8.zu_9*\xe6\xcaN\x06\xb8&tQ\xd4\x9a\x12n\xf6\x97\x00j\xaacD\x06\x1f\xd3\xbf\x98\xa0\xbep\xbe\xbc\x17\xd4uq\xd4\x19r\xd24\x15\x01E@\x11\x98E\xc0F\x15\xe6\x99(\x82\x83D\x19U\xb8;*A\xac\x10\xb9\xee\xeeur\xf3\xbb7\xc9\xd8 \xa2\nw\x8c\xc9+Ot\xca\xb3\x0f\xb6\xc9\xf9W\xfbL @o\x8c>\xaeFr\x14]\xaa\x10\x9cE\x17{\xec8\xecp\xc9\x8c\xfc\xcc\x8f9\x1f\xeb\x1d\x93\x91\xa7\xce\x83\xd1}\x12\xbf\x85\x89cF\xf2\x97\xc1\x7f\t\xce\xc6\xef\x1d;Z\x96f?\xf87\xc1\xec\x89\x933\xc6\x18\x8f2\xb6\xbf\xa1\\j\xb9\xf4w\x08\x93\xfds.\xc1\x89\xfc\x10\xb2\x9e\x19G\xf1\xcaJ\xa4\xf9\x8b\xb7J\xe7\x1fC\t\xf8:\x94\x80\x0b\x13\xebBK\xc0\x9f\x03c}\xb2\xc1\x87\xbd&\xebD\xbc\x94\x14\x81\x15\x8b\x80*\x00W\xec\xa3K*8\x1b">K6R\xdcg\xe3\x94\xb5ho\x97\xfeF*\x03r\xf7\'w\xc0Y\xf8x~\x95\x7f(4\x89\xcb\xa0\x8c\x0f@w\tp>\x9bY\x13\x05\x18\x1d\xd1\xe2\xfd\xa2S&\xfdM\x13\x01\x84\xe1\xe4\x12\xbc\n*\xdeH\xecF\xdd\x01\xb99N\xe5\x87B\x01\xc3y:\xd3\xc9\xa9\xdc\xe1\\C\xc5\xf1\x8d-\x8e\x1f@\xe6I\t\x923\xcaKZ\xee\xe1Z\xe3\xd8\x06\x12\x02\xdeA%E@\x11Xf\x04\xf8\xfd\xf3\x9bl\x82Un\x9ad\x95i=\x97h\x01H\x9f\xb5H\xa0HDv\xfa\xba\n\xc2\xdd\x00\x97\xbf=\xf9\xbf.\x98\x9a\xb1\xdf\xa3R0\x1f\xc4\xbe\xdcZ\xff\xbd\xe3\xb3{\x11\x10\x05\x11:\r@\xda\xce\xe5\x03oMS\x11P\x04\x16F\xc0k\x1d85\x11\x97\xbev\xeaU0?\x8b\xa8\xc2\xb5p\xb3r\xf7\'w\xca\xdb?\xb3GZ_\x1f\x94S\xcf\xf6\xc8\t0\xa3\nO@ic\xda,\xaa\x96@l/)\xb7\xd3\x8fj\xb1\xb4\xebN\xc9\x96\xf9\xd7t!\x9e~\x84 \x19\x95\x1c\x95\xa6\x9e\xf3\xc9\xc5\xb4J-\x1a\x90|\x12\xfc_\xc1\x1cSZ\xc9\x9d\x92t*\xc4\x0e\x85\x8c%5&\xea/#x\xf1^\x9e\x9b%w\x82\x9dK\x7fg\xe8z\'\x06\xeb~*\x05\x0bExwf&\xd0\x07\xa2\x8a\x8d\x08\x0c\xd2\xf1\x87O\xc8\xd4%\xb8\xf9#V\xc9\x18\xb1P\xc4\x81o\xdd\x97\xc0\xbd\xe0\x7f\x0f\xb6x-\n(\xaeQR\x04\x8a\x1a\x01U\x00\x16\xf5\xe3I\xa9pl\x88\xd88\xdd\x02~\xb3{\x07\x1b\xed\x9c\xd1\x07\xb0\\\xa8\x02K%\xbb[\xc7\n\xe2,\x9c\xe3\xbd),\xb1\x9c]\x0e\x95\xbf66\\\x0e\x93x\xb73\xca\x19`\x9a\x90\xdb\x87\x96He&\x16\x80\xf6q\x8f\xd8%\x7fi\x02\xca\x0e\x1c\xbefd\xd4\xca,\x9e\xcf\xc1\xee\xaa\xe5^\x9a\xa0\xea\xe5\x8a\xc02!\x80\xe5:\xd2\x98\xbe\x02\xd0\x8e\n\xbb.\x8c\x9a\xd5\xfb\xd6\x02n\x99j\x91\x94m\x1c=vEKP\x9e}\xe02,\xf1\xe0r\t\x03\x8f|)\xff\x98\xb1\x1d\xd7\xbc\x19~|i\xfdG\xabH\xf5\xfd\x97\xf4H\xf4@\x11P\x04\n\x8c\x80Q\x06\xba\x13\xbcqL\xd4\x8e\x8d\x80a\x1d\xc8\t\x8b*\xb4\xf9w}l\x87\xb0\xcd\x1a\x1d8$\x1dX}\xf4\xdc\x0f.\xc9\xf1G\xda\xb1\x12\tm:\x15\x7f.\xb1}3\x8d\x1c\x8f!\xff%\xebp\xdc\x8b\xd6\xea\x86`\xb8J\xd3% \x8a\x04\xf5\xdf\x82\x1f\x06\xbf\x02\xf6\x12\xa5g^C\xc1z\x16|\xef\x15\xae\xaa\x11\xa7~\x01|\x0f\x989s\x8c:K\xae\xf5_\xe5m[%|U\xb3\xc4zr\x1c\xf5w6\xa7+\xef\xe1\xa5\x89\x8f\xc7\xc4W\x11\x94\xe6/\xdf.]\x7f\xf0\x84L\xb6\x0f\xe1\x1e\x0bC\xd2\xed\xac;\xeb\xf2\x9b\xe0\x01\xf07\xc0\xd4\x9f\xd0:PI\x11X\x91\x08\xa8\x02pE>\xb6\xa4B[-\xc7\'q\x16N\xcc\x16hp\x93.O\xed\x80\xcbpi1P\xd3\x1c\x96[\xde\xb3I\x06{\'`\x14\xc5\x861\xbf\xc4\xbe\x8a\xce\x84\'\xd10\x17\x82\xc2\x11\xfa\x00\x04\x84\xf9\xafZ!\xaaS4y\xf09\x96\xa2\xdb\xaf\xaa\xe5+\xe9L\xee\xd9\x17u\xe9B\xba\xb2\xc5\x00\xa2vz\xd7\x7f,}\xe3\xec\x15F\xd1g\xb5}\xb3\xa7uO\x11P\x04V\x18\x02\\\xd2_E\x83\x02\x10\'k\x16\x94\xcf\x9d?{\x7f\xed pld\n>ec\xc6z=\x1ee\x07\xe3\xbdjy\xf6\xfdh\x16i\x8d\xf1\xc8_\xbfa\nPZ\x82\xa8\x8en\xb3\x97\x8f\x12%\xac\xff>\xb3[F\xe1\xc7\x97\xcaP%E@\x11P\x04\x8a\x06\x014I\x8e\x11\x98\xd3@G1\x01<>\xc8\xa8\xc2>\t\x85}\xb2io\x8d\xec\xbe\xae^>\xf2\xab\x87\xe4\x0c"\n\x9f9\xd6+\'\x9f\xed\x92\x97\x1e\xebt\x14~\xb6\xc1G\x85\x18U\x98\x93,\xb6\xdd+\x9a:\x16wAl\xa7\xd0\x8cb>\n\xfe!\xf8(\xf8\x11\xf0\x0b`\xaf\x08ou\x07T\x8a\xd9\x9e\x8b\xf7\xf3\xf8\x00\xf8?\xba\xe7\x93{[W\xf9\xe7\xab\x08I\xcd{\xf6c\xe9/\xad?m\xb6\xd8-4\xc1\x120>\x86\xfe\xb0<(M_\xbaM:~\xefQ\x89\r\xd82\xd9j\x99B\xb1\x90\xac\x0b\xeb\xf7u0\xd7\x0c\x7f\x1b\xacJ@\x80\xa0\xb42\x11\xb0\x1f\xf1\xca,\xbd\x96\x9a\x8d\x12[)\xacw4Q\x8a\x88Hr\x83\xcb3\x19\x90\xed8\xdf\xf1\xe9\xddR^@\xeb?\xd6\x86\x13\x82\x13\x0c\xb0\xe0RR3lO\xe6h[V\xe97\x82B\x8e`\xcbQ\xa9VG2\\\xbdWV\xe3\x04\x01\xc9\xc8\xc8\xd2t\xc4\xc0\x82o\xb4W\xf4X\x1d\xf0h-\x14\x01E`)\x04\xd8\xc312 \x03\xf4dA\x0c\xb4\xd1\xbc\xb9B&\xd0\x90\xe4\xa4\x83\xcc\xa2,\x9co*G}.\xbd\x86%n\xcf9\xbe\x872\x9d\xe7H\xa5\x18t\xa4O+\xf7\x9d\xd7\xd6I\xd3\xd6r\x19BT\xe4e\x07!\x95\x82\xeb5\x8a\x80"\xb0f\x11\xf0yViL \xaa\xf0\x04\xa2\n\x8f\xc0\xf6\xca\x0f\x85\xe0VX1\xef\xbb\xadQ\xee\xf9\xd9]2\x02%\xe1\xf9Wz\xe5\x99\x07Z\xe1?\xb0C\x861\xc1\xa1Q\x85\xb3zm8\xe4\xaa\x07\x7f\xd4e\x98\xe8\xc9Y\xf0\x83\xe0\x7f\x06\xbf\n\x86C\xde\x04\xb1\x97\xb6V~\xdcg\x10\x11.\xfd\xe5 \xce\x9e\xc7.\xc8\x1d\x08\xd4c\xe9\xaf/\x12\x94i\xca\xf8\x8e\xd6\xd7\xf9\xfbr\xfc\xd2\x12\x10\xcaf_%,\x01\x7f\xe1M\xd2\xfe{\x8f\xe1\x98}$\xaa\x92\x02F\xb4\x03\xa3&\xc9z|c}\xff\x95\xc1\xf7\xdf\xed\x1f\xd8*\x83=\xb0\xfe\xc3LI!\x88=\x8f\x0f\x01\x1a&\xe9\xa4\x15T\x8aFx:\xb9\x116\xe7s\xf5\x13\xc1@\xccX\x00\xe6*AM\xc7 @\x03\x93)\xf8p\xact-wL\x14N\x9c\xf3L\xd2.\x8e\x94\xd5\xf8\x8e\xe1\x1d\xe0\xe0\x9f\x82 G\xcdJ\x8a\x80"\xb0\xc6\x10\xc0\xb7\x1fC;P\t\x0b\xc0\nL&\xc0\x9a/e\x13@\x0fR]\xe7Gd\xc3.t\x91\xc3lG\xb2\xee"=)\xa7\xbfKe\\EMP~\xf8m\'\xf8\x87\xb5\xb6O?\xa5\xd4\xee`[\xcc&\xf5\xe6{\xb7\xc0\x8a\xdf\x87\xa5\xc6q\x13\x8d3\xb5\xbb\xf5*E@\x11P\x04\x96\x17\x01g\x95\xb0\xd3n\xb3-\x1b\xea\x8b\xca\x00\xe6N\x02\x88*L_\xaa\xfbnmA0\x91\x8d8?a\xfc\x06\xbe\x01\xeb\xc0\xd7\x9e\xea\x92s/\xf7;2\xa7k^\xcd\x98\xe7>\x8czi\x1dx\x05\x7fx\xcb[\xd9\xe5\xcf\x9d\x83=\xc2\xccA\x18\xf7\xcb\xc1\x07]\xfeUl\x8f\x81\x9fq\xf9!l/\x83\xed\x92\xad\xafa\xffN0\xefMV\xfe\xb9\n\xb5\xc8\xe1\r\x12\xb9f\xbdL\xf79\xae/p\xdd\xf2\x13\xca\x16\xc7\xd2\xf3\xd2\xda\x88\xb4\xc0\x12\xb0\xfd\xf7\x1fE\xb4d\xc8\n\xa6\xf3$\x14\t\xe2KH!\x82\x96\r\x7f\x01~\x07\x98\xd6\x91\xaa\x04\x04\x08J+\x0b\x01U\x00\xae\xac\xe7\xe5--\x1bf\xdb\x10\xbd\xdf\xfdCRK\xe5\xbd8\x9d}\xdb\xe6\xbd\xf3s{\n\xea\xfb\xcf\x96\x91\x9d\xfd\xa4k\x018c\x9b[\xfb\xc7\x1co\xcb\xa1\xe4\xa40\xc0l\x94r\x87\x00\xdf\xa1\x18\x14\x80e\xd5\x8e\x05`\xc6)\x0fb\x86\xb0\x1a\xfe\xbfLX\xe1\x8cS\xd1\x1b\x15\x01E`%"\xc0^\x8e\xc1\xa08\x91@% \x15\x80<\x97bOg\xfb\xb2N\xf8\xbc\x0b\x04\xe1\xef5\xc5\xfb\xf2\x05\x15-\xeb#U\x01i;;"\xcf?\xd8j\xb2\xc9g\x91L\xf0\x0f\x0c~i\x05\xb8\xe7\x86\x06\x89\xc2\xb5\x06}\xec*)\x02\x8a\x80"\xb0R\x11`Ta\xba\x98!Ea,\x10\x1d\x9f\x92\xa1\xde\x12\t\xa2\x8d?|\xa4En|\xc7F\x19C\x80\xa5\xfe\xce\xa8\xbc\xfa4\xa2\n\x7f\xef\xb2\x9c}\xb9\xcf\x8c+\xa6\xad\xaa\n\xf7\x96\xd0\xb0\x81\r0:\x86\xe5\xee\x1bX\x97""\xf6\xb2V?`\x10\xc21\xb7<\x7f\xd8\xe5/`\xdb\x07~\x19\xfc7\xe06\xf0\x7f\x04\xf3\xba\xe4^\x86\x1d1\xfa\xbeR,\xb5\xad\xbb\xff\x90\xcc\xb0\x1f\xe7\xe85\xf9*\x9cXF\xa2\x12\x10\x81\x07\x03\x9bj\xa4\xf9+\xb7K\xc77\x1e7\xef\xc5\x15\x94\x80\x8d(\xed\xdf\x82\xdf\t>\x05V% @PZ9\x08\xd8\x0f|\xe5\x94XKj\x11`\xd3\xc9Y\x96\x9b\xc07\x80s\xd2\x9cZk\x84PY\xa9\xdcz\xdff\x98\xdc;\x0ey\x91~\xc1\xa8$^"\xe3\xa3\xe8 H\xecnrML\x93]\x14\xc8\x1f\xf6\xcb\x04""\x16UG\xe4\x14me\xff\xa2\xc3\x9f\x86\xe5N9\x14\x80\x8c"=6\xcc\x81;\x80OW\xca\xc2\x8c\xae\xd43\x00@N^\xef\x95\x8d\xa9\x96^\x11Xk\x08\xb0\xad\xe6\xfa\xd8r\x88*\\\x06\xdc\x9e\x1e\x00\xd6\x9a\x9dK\x80\xfd\xb0\x16I\xb7\xf9I/\xb7\xa5\xaf\x9e\x812\xae\x0c\x96\x8c\x8c\xfc;99\r\xe3f\x0c:\xf2h\xe1\xce\xc8\xc7\x1c\xf0\xee\xba\xa6^6_U#\xbd\x97G\x8d\x8f\xdd\xa5K\xaaW(\x02\x8a\x80"P\xfc\x08x\xad\x03\xb9\xead6\xaa\xb0O\xaa\xeaCr\x07\x82\x88\xdc\xfd\x89]\xd2qvXN>\xd7-g\x8f\xf7\xca\x8b\x08$2\x00\xe5 \xdbcK\x8c*\xcc\xf1\x06\xcf-w?a\xcbT$[\xf6\xc2dK\x1cw\x128*\xbc\xea\xc0w\xb8\x8c\xcd"\xe4\x02Z\xf7\xc1C\xe2\xc7R\xdb\xd8@\x14w{\x93\\\xe4\xbeB\x9fF\x7f<\xdd?&\xa1\x1d\r\xc6\'`\xd7\x1f?\xe9\x8cYX\xd4\xd9W\x85\xa5\xb2\xe3\xef\xed\xd8\xff_\xe0\xb7\x81/\xb9\xe79XQR\x04\x8a\x1e\x01U\x00\x16\xfd#Z\xb4\x80\xb69\xa2\xf5_\x18\xccF\x99\x8dRN\xe8\xb6\xfb\xb6H\xf3\x96\n\xe987b\x9c\xa7\xe7$\xd1\x14\x12q&\x8afdl\xd0U\x00\xdaZ\xa6po\xaa\x97\xd8\xb6<\x18f\xff\xc5\x0c\xf2\x90I\xaa\x85Y\xa5\xd7q\xa9E\x0cA|\x19=:\x02% \x15\x80\x16\xf7\xb4\xaa\xdc\x83e\x02\xfb\xe8\x8eDI\x11P\x04\xd6$\x02\xa6\x89F\xeb\xd1\x80n\x8e\xf3\xec\xe9\x10{D\x88\xe3}\x1d\x88`O\x05`:\xf7\xe6\xe1Z\x7f\xd0\x07\x8b\xf3iy\xec\xef\xce\x99\xd4\xf3]\x1e\x1b)\xf3\xf0[\xd6\x99\x81L\x1c\x03\xb1\xd2\xa4\xb1\\\x1e*\xa9I*\x02\x8a\x80"\xb0\x0c\x08\x18e\xa0\xa3\x114+{\xc6FbNTa\xb4y\x91j\xbf\xbc\xf9\xfe\xad\xf2\xa6\xfb\xb7\xc9\x07\x07\'\xe4\xf2\xe9Ay\xee\xfb\xad\xf2\x12\xfc\x06v\xc2E\x84m+Yl\xca\xaa\t\xdfth3U!H@\x12\xc4\x81\x93%\xd3;\xe3\x80[\xc2f\xd9\xfe\x1dgp\n\x00V\x1d\xd9%Uo\xdf#SmC\xb0\xbc\xc0\xb9\x84\xe3[\xecC\xf1V4D%`\xef\x98\x94\x1dh\x96\x86\x8f_+=\xdfA\x1c\x14[\xbb\xe4\x0e\x9b8p\xdc}\x15\xf8\xdb\xe0w\x83G\xc1\xae\xd4\x81=%E\xa0\x88\x11P\x05`\x11?\x9c%\x8a\xc6Y\x06:Z\xfd\x90{]N\x94\x7f\xd6\x1a\xe1\xaeO\xec\x80I=|\xff\x15\xb8a\xb6\n\xc0qZ\x8c\xe5\x99\xc2\x08\x00B\x0b\x0c\xf5\x05\x92{\xa0\xb9\xcc,6\x15\x93\xea\xc6rX\x00\xd2\x81?\x14y\xe9t\x8b\xd6Z\xb0\x0b\xf7a\xb9\x87\x1a\x00\xe6\xfe\x19i\x8a\x8a\xc0\x8a@\x80c\x03F\x02\xae\x8b8\xc5\xcd`4\xc6\xbeljj\x1aMIN\xba\xc9\x8c`\x8bc\xc0S^\x13\x92\x8b\x08\xfeq\xf9\xd4\xa0I\x83\xfe\x00\xf3F\xc0\xcdBu\xdd=\x1bd\xb4\x0f>\x8e\x96\xb1\xfey\xab\xa7&\xac\x08(\x02\x8a\xc0\\\x04\x12z%\xa7\xcd\x8f\x8e\xc5e|\x18\xfa\x19\x1c\x86B~\xd9\xb2\xafN\xf6\xde\xd8h\xbc\xcb\xbc\x01\xab\xc03G\xfb\xe4\x8d\x17i\x1d\xd8&S\x13\xe8o$\xca\x06\x86\xad%\x1b\x9c\x8c\x89m\xac\xed\xcc\xee\xfc\xf0Vc\x9d\x1d_\x96h\x81X\xa6\x85\xa6t\xdcD{D\xa1\xdc~ \xe3\x8a-t\xa3\xa9\xacH\xa4"\x08\xcbsw\x16j\xa1\xeb\xf4\\V\x08\xf0\xc5d \x90\xa6\xcd\x0c"6\xdb\xa7\x9b\x83T\x7f\x18)\x8c\x83\x7f\xb5\\I\x151\xbdN\x11X]\x08\x18sbt\n\xd6\x020\x8d\xdaY\xe9{lh\xca\xb8!\xe0\x84D,\x86@\x18\xee\x00.\x8d\xa4\xb2\xba\x94\xcb\xcbB\x91R\xe9m\x1f\x93\x17~L_\xe9\x8eA4G\r\xf9\xa2\x12H\x043\xb0M\xb8\xfem\x1b\x11-\x13\xcd(\xdab:\xcfWR\x04\x14\x01E`-#\xe0\xe8\x95f\xdb\xc2\xd1\x81\t\xa3\xf8\xf3\xa3}\x0cE|\x08$\xb2^n~\xf7f\x89\xc2?8}\x06\xbe\xfc\x93N9\xfeh\xbb\\:1\xe8XU[\xd3j\x80X\x8a\xe5\xac\x8cQg\xc7Ok\x19\xd7+\xd6\xdd\x06\\\x81\xa5_l`\\\x86\x1e;c\xd8\x17(\x95\xd0\xde&\x89\xeck\x96\xf0\xfe\x16\t\xa0\x9f\x9f\x01\xa0\xf4\xc5\x18G\xd0*\xc1J"C\xcb\xd1w\xe19O\rF\xa5\xe6\xfd\x07$>6)#\xcf\\X\xac\x8aV\xe1\xf7\x19\\\xd0\r\xfeu\xb0=\xb7\xd8=z^\x11XV\x04T\x01\xb8\xac\xf0g\x949{-\x8e\x1bh\xf9w\'\x98\xea,rVd\xad\x11\x1a7\x95\xcb\xbe\x9b\x1ae\x04\xd6\x12\xbeehp\xa9\xe7\x99\x81U\xde(\x82\x8f\x90\xec\x00.\xab\xca-rs\x19\xa21\xda\x99\xbcE.\xd1\xd3Y \xc016gT\x9b]\x05`b=Z:iR\x11\x8c\xc1\xbb\x89G\xc6\xb7>\xeb7=\x9d\xcc\xf5ZE@\x11(\n\x04\xf8\xed[\x0b\xc0t\n\xe4v T\x00\x8e\xc2\xaf,\xa3\xbeO\x98\xc1[a\x1b\x12\x0e\x0e+j\x82\xf2\xf4\xf7.\xc1\x12\x11+\x84\xd08N{\x96\x98\xa5S\xa5T\xaee\xdb\x1b\x8f9\x95\xdfs}=&b\xf2\xd9\x93\xa6R"\xbdF\x11P\x04\x14\x81\xe2D\x80c\x1d\x06L"q\xa9ptl\\\x06{!v\xfa}\xb2\xedP\x1d\xc6D\xcdr\xef\x17\xf6J_WT^y\xbcC\x9e\xfbA\xab\\<9 Q\xc8\xa7\xd3n;\xcb{\xcd\xbc\x12\xdd&\xa1m\xf7\xe8\x08\xf9\'%O\xc0\x15G\x8ew\xfa\xe08\\s\x8c\xbf\xdcn\x98 1\no\xf9\xf5\x1b\xa5lG\xa3\xf8\x9b\xca\xa5\xb4\xbeJ\xe2\x131X\x07bLHW \xd6:\xb0\x10F\x01|\xa0\x0c\n3:!u\x9f\xb8N\xa6G&d\xfc\xd5\x8e\xc5\x9e\xa5\x1d\x9b\xff\x1a.\xb8\x0c\xfe&\x98:\x16W\x83\x89=%E\xa0\x88\x10P\x05`\x11=\x8c\x14\x8b\xe2\xb4\x9a"\xb7\xe3\xfaM`\xda\xc8\xb1\xe1\xc9\x8a\xb8T\x88t\xd3\xbb7I\x18\xd1\x16\x87\xfa\x19\xfc#\xebd\xd3/\x13j\xc7\x99\x9f\xe1\xc1\xfc-\x01&\x80\xac-\x07\x83N\x14F50K\xffA-}\x871\xdc\x819\x7f\xe3\xa6JsqZ\x02\x91\xbd\x98\xef\xc1\x10\x06\xcc\x8c\x00\n\xcb\x1dU\xd8.\x8d\xbb^\xa1\x08\xac*\x04\xd8\rQ\xf0\xaf\xa5/\xd1t\xc9\xe9\xd7\xe8\xdb\x96\xcb\x80K\x03\x95y\x9dTZ\xact&\x00\t\xaa\xf0\xf8\xdf\x9f7\x97\xd0\x18\xc2;\x1eZ\xec\xbeL\xcf\x97\xd0g\x15\x06\xa6u-e&\xfa\xef(\x14\xa0\xa5l\x90\x95\x14\x01E@\x11P\x04\x16E\xc0\xd1+9m%\xc5\xd0\xa1\x1e,\xff\x8cG%\x10\xf2I\r\xa2\n\xdf\xf5\xb1\xed\xf2\x8e\xcf\xec\x96\xce\x8b#r\x1aQ\x85\xcf\x1c\xeb\x97\x97\x1ek\x93\xeeKc\x8e\xd2\xcfm\xd89\xb6\xe0\xc8L\xa3\n/\x00\xb5\xe9\x96\x9d\xbe\xd9\xc8\xf4\x84\xdb\xc5m\xea\xd2\x80\x0c\x90q*\xd8R)\x81-\xf5R\xb6\xa7A"\xb0\x0e,\xa9\x83\x1b\x10Lf\xcd`UP|\x1c\x86\x01\\\x1d\xc4\x01]>\x95\x81H\x7f\x06\xd6\xf3%\xe3\x93\xd2\xf0\xa9\x1b\xa4\xe3\xf7\x1f\x97\xa9V\xf8\xf0\xa5r\xd0\x8eS\x9c*\xb2$d\x8e\xc9\xbf\x0e\xbe\x04\xfe\xff\xc1\xaa\x04\x04\x08J\xc5\x87\x80*\x00\x8b\xef\x99,U"6.\xa4{\xc1lA\xddV\x94\xa72\';\xa9r\xfb\xfb\xb6\xcaH\xef$|\xff-\xcf`\x81\xad\'\xdbTZ \x1aJn`3\xaf\xa0\xf7NV\r(V\xd6\x86\x9c\xe6:7:To\x0e\xbao\x10\xf0\xc1\xf1~\x1c\xd1\xa4\x9d%\xc0\x19\x81\x82\x99?\xc1\xf2\x0ca\xc7o\xde\x05\xbe!J\x8a\x80"\xb0\xa6\x10`\xafW\x06\x13\rD\xf2\x15\xb4)F\xccN\xa1\xe7c\x93a\xad\xdb\xb9\xcc\x8bQxMs\xefZ{\x14\x02C.\x0f++/5\x03\xc6\x13O;>\x90\xf2i\xfd\xc7:\xd9Vr\xfb\xd5uR\xdb\\&mg\x87\x96gB\xaf\x10\x00k\x1e\x8a\x80"\xa0\x08\xe4\t\x01\xe36\x01\xfdE\x1cV\xe86\xaa\xf0\x0cZ\xd8\x10\xfa\xa3[\xee\xdb"\xb7\xbd\x17c\xa6\xc1\xfd\xd2syT\x8e\xfe\xb8]^\xf8a\xab\\\x82u\xa0\t\xa8\xc8~\x0bd\xdac(\x04\xcd\xd0\x03\x9dR>\x865NN+\xf0\x97`\xd0\xc2\x9fd\x80\xc2\x0f\xb7\x98\xb4\x9b\xec\x186<\xfa\xccys.\xb8\xbdA*\xaf\xdb(\xa1]\r\xe2o\xac\x10_8 \xf1\x11\xf8\r\xe48\xc1\xa4A\xc0q3\x95\xaf\xb9$(\xfb\x98GI$(\xcd_\xb9]\xda\xff\xcb\xc3\x88\x149\xf7j\xbf\xbc\xfeB\xb7\xbc\xfa\xd3ny\xe9\xd16\x13x\x8a\xb2\xac\xd5\x001\xaa0\xe3\x0fN\xb3\x1fH\xad\x1b\xcb\xa4\xc4+\xef\x1e\x83\x85\x07\x13\x9a\xca\x93h\x1d\x88\xff\x93o\xf4H/\x98\x14\xde^o"\nG\x0e6Kp\x0b\xc6\x07\x18/\x98n\x95\xcb\x85\x11\xb9\xd7\x8c\x1d\xd8\xf9;\x8f\xcb\xdc\x93\xd5\x0f\xc7\x8a\xf0\x03\xe8+\x0fJ\xcbW\xde\x04%\xe0\xa3\xce\xb2d;N\x99M\x9c9\xf2QW\x83\xff\x0e\xfc\x160;\x7f\x9ewU\xc2\xd8SR\x04\x96\x19\x01U\x00.\xf3\x03H3{\xdb\x80\xdc\x81\xfb\x1a\xdd{\xdd\x162\xcd\x94<\x97\xdb\xb1\xc8\xad\xf7m\xc2\xb0\n\xca@:\x0b\xa7\xa5\xc52\x10\xf3g+>\x01\xe7\xbb$\xb4\xf9y\xa3J,)+\xd1(\xc0y\xc3\x97\ts\xf0\xeb\xf7\xfb\xb1\x0c\xb8\x1cK$8p\xcf\x80\xe08\xdfHK\x19\xdc\xaa\xb7(\x02\x8a\xc0*A\x80\xca;Z\x02\x1b\x05`\xfau\xea\xed\x18w\x06bY\xf7\x98i\xe4\x8d\x0e\x8c~\xa4\xa6\xc6\xa6\xe5E\x1b\xfc\x03\xf5\x98v\xba\xb74\x12\xca\xec\xd2\x03\xb7\xb7\xc8\xf8(2\xd3\xe5\xbf\x99\x01\xa8w)\x02\x8a\x80"\xb0\x00\x02f\x91\x94\xbbR\x8a\x91kG\xc9pYC#\x06*\x03\xb7]]+G>\xb2\x03\xd6\x81\x93r\xee\xe5~y\xf6\x9f/\xc9\xc9\x17z\xa4\xafml\xd1\xa8\xc2\x1c\xfb\xd8\xf1\xd8\x02Y\xae\xbdS^?\x19\xa6\xdf\xc6\x0f\xb7P\xa6F\xcf\xf6\x1a\x1e|\xe8\x94\xf8\x10\xd0\xb1\x1cQ\x85#\x07\xd7\xc1o`\x05\xac\x03\xcb\xa5\x04\xfdn|x\x12Q\x85\xd1\xffq\x02\xd1\x10\xc6\xb5\xd9\x0cmi\t8\x82\x89DL\xe85\x7f\xf16\xe9\xf8/\x8f`\x8c\x83N~\xbee\x03\xa5\x15f\xba\x11\xfc]\xf0\xdd`j.\xed\x18\x1e\xbbJ\x8a\xc0\xf2"\xa0\n\xc0\xe5\xc5?\xdd\xdcm\xe3\xf1n\xdcH\xdd\x18\x1b\x1864\x19\x93\xe3\x03oF\xc2\xe5~\xd9{c\x13\xfc$\xc1\xccy\x19\x82\x7f\xb0\x02l\xa3\x03X\x95;1n\xe7\xc9p2\x0f\x1a@3a\x83\xa4\xcb\x11\x04\xc4Xc0s\xa5\xbc \xc0\x81.\xfdQ\xad\xdf^i\x14\x80\x19Y\xbf\xb4\x0e\xc3\x94\x10/\xc22\xbd\x97y\x01F\x13U\x04\x14\x81\xf4\x10`\xc3M\xb7\r$\x0e\x02R\xed\x1b\\\xd9\x7f\xa0s\x1c}\x0c|\xf9\x14\xd0\xbd\xc54|\x17\xd64\x87\xe5\x8d\xe3}\xd2\xfa\xfa\x90)\xfa\xb4wPc\xce\xe4\xf6\xc7.y^\xb7\xbdJ\xaa\xeb\x032\xdc?\xb5l\x16\xfd\xb9\xad\x99\xa6\xa6\x08(\x02\x8a@\x11"\x90\xd0+9\xda%\xfa\x9be C\xfaQ\x0f\x86}\xb2\xef\xd6&\xb9\xf6\xee\xf52\r%\xe1\x99c\xbdr\xfa\xd9\x1eX\x07v\xcakOw;\n?\x8f\xd6\xcf\x8f\xa8\xc2tm\xa7Q\x85\xe7\xb0U\x06\x11m\xf8\xf5\xe7\xbb\xe5\xd4s=r\xec\x916\xe987b\x0c\xcb\xac\xc5\xb8F\x15\xbe\xc2\xfbc\xfas\xb7Sg\xff\xee\xb1\x0e\x8c\xf5\x8e\xc9\xd0C\xa7\r\x97V\x86\x8c\xdf\xc0\xb2\xbdM\x12>\xd0"~\xf8\x14\xa6\xc2\x90\x81\xc5\x18U\x98\xfb\x1c#\xa64KH% \xd2\xae\xbcs\x97L\xf5\x8d\xca\xd0\x8f^_\xac\x80\x1c\xbb\xb3\x17\xfe\x19p+\xf8\xd7\xc1\xc9\x8b/\xf5]Lk\xa1\xf4x\xed\x9a#U\x00\xae\x9cGn_\xe4[P\xe4 \x98\xca\xc0\xac\x9e\x9f\xb5X\xf6\xc3J\xe0\xe0\xed\xcdP\x00\xc6\x96\xd7R\x005\xf4\xe1\x93\x1f\x1e\x88\x16\xe4\xa9\x84#\xb0\x8e\xc0L\x90*\x00\xf3\x0b\xf7\xf4\xe4\xb4\xd4a\x19\x1c)\xce\xd9M6\xed\xf6m6g\x97\xf8\xe1\xb5=\xb0\ne\x00\x00,\xa1\xd0\xc1\xec\x12x\xe9\x9f\x15\x81\xd5\x86\x80i/\xd0pT\xb1\xeb\x03\xa5%\xc29\x8d\xcd0\x14\x80\x9cG\xb0\xfd\x9e\x93P\xfe~\x99WY\x85O. "d_\'\xfc\x98\x82\xec\x9cF\xber\xa5\x0f]*\x199X\xe4\xa4K\x14}\xba\xba\xff\xcb\x17\xda\x9a\xae"\xa0\x08(\x02\xe9!`\xa3\n\xf3\xae(|\x9dG\x11Xb\x06\xf2m0\xe8\x97Cw\xb6\xc8u\xf7l\x90\xf7"\x90H\xd7\xc5\x11y\xe1\xa1V9\xfa\xa3vi;3\x08\xbf\xb1\xe8\xc7<\xfd\x1e]=\x98y0t*\xf9\xeeW\xd2\xab\xe12_\xcd\xee\xdeZ\x07r\xaca\x08;\x00izxB\xc6\x8e\xb5\x1a\xa6\x1c\x10\xde\xdd\x04\xeb\xc0\r\x12\xdaZ\xe7D\x15F\x80\x8f\xf88\xfc\x06\x8e!\x88\x88\xb1\xc4t\x01_\xd4\x82\x1eJ\xc0\xfeQ\xa9}\xdfA\x99\x1e\x9c\x90\xd1\xe7.\xda\x0c\xe7n\xf9\xa8\xa8\x04\xfc5p\x1b\xf8\x0f\xc1\x1c\xbfs\x1c\xaf\xe4 \xc0\xa7E\xe6\x13$[l6`\x7f7\xf8\x06\xf0!\x97\x9b\xb0%~\x9c\x11\xf6*\n\x891\x85-.\xb9x\r\xfc8\xf8(\xf8\x0cx\x00L\x9a\x9b\x8fsv\r\xfef\xa5@Z\x83x-g\x95\xf9b\x93\xe8L\x94\xc4\x06%+\xa2o\xb6\x194r\xd7\xbf}\xbd\x84\xe0\x03p\x0cKo\xcd,SV\xa9f~3;1\xfa\xcc\x18\xeeu\x95\xf7\xb6)\xc8<\xc9\x05\xeet\x12\xe5R\xac f\xdf8\xbb\xc63J\xf9A\x80\x83\xcf)\xf8\xdc\xa8i)7\xcf\x96>\xb12\xf2\x03xaP\xa4%\x82\xa6\x9d\x1dr\xd6\xaf~~*\xab\xa9*\x02\x8a@~\x10`#\xcd\xc9\x9ap\xc0I\xdf8\xde\xc6.\xc5\xc4%\xc8^2\xd8\x8bI\x04*\xc7\xd0(M{GRK\xdc\x9f\xe9\x9f\xe9s\xa8\xb2.\x04\xeb\xbf\x97M\x12\xceR.[\x9aLS\xbd\xf2}%\x10\x85g 6\xb7\xc0\xe7\xea\x06\xb8]\x18\x82U\x89Y\x8ev\xe5\xdb\xf4\xaf\x8a\x80"\xa0\x08(\x02\x05F\xc0k\x1d8\x05+\xb4\xbev\xc7\xfdQ\x00\xab\x93\x18H\xe4\xbd_\xdd\'\xf7\xff\xd2\x01\xb9xbPN\x1f\xed\x95\xb3\xf0\x1fx\x1c\xd6\x81C\x88h\xcf\x89\x1e;(LD\x15f\xbf\xa84\x8b@\x02\x0ew\x07Z?\x8eIf0\xee\xe3xs\x1cK\x85\xc9\xa4\xd0\x96\x1a\tl\xaa\x93\xc8\xfef\tA1\xe8\xabdTa\x08\x1e&\xaa0:U3{\x88\x9b\xbd\xc3\x0f\xca%\xc0<>\x14\x95\xfa\x9f\xb9\x16AG\xa22~\x12\xe9\xf1|"o\xa6n\xceXE\xd57pL\x05\xd5\xdf\x83U\t\x08\x10@\xc4\x86\xaf\xb3E\xad\x05\xfb\xf7\x83\xef\x00_\x07\xde\x06N\x95\xaap!\xef\xbf\x06\xfcq\xf7\xa6\x17\xb1}\x14\xfcO\xe0\xc7\xc06\x1f\x9b/N\xad=R\x05\xe0\xcax\xe6\xb69iDqi\x01H\xe2\xb9\xec\xc8\x9d\xdc\xb8\xe6\xae\xf5F\xf1\xc7F\xd1\x98Ng\x97jVw\xb3#\x1b\x84\xa5\x06\xc9V:\xab\x04\xe7\xde\xec&\x1a.+\x15\xb2\xb3\\*{(\xe7f\xa3\xc7\x0e\x02t\xb8?\x81%p\xf5\xeb\xca\xa4\x16\xdc\x83H\xc0i=Wk\xaeC\x05\xe0\x9b7!Q\xe7\xddP|\x15\x01E`\x8d!\xc0\xa5:\x91\x0cD\x16W\xd4\xa3;\x02NFPI&\x98\xe0O\x12\xe4s\x0c%\xc7\n\x81\x90\x0f\n\xb8\ty\xf9q\xf8>-\x10\xd9\x9el\xd3\x9ej\x89\xc0\xc7m\x7f\xc7\x98YjV\xa0\xec5\x1bE@\x11P\x04\x14\x81\x0c\x100\xca@\xd7\xd2,\x0ee \xa3\n3\x82\xb0\x0f2pmK\x99\xbc\xe5c\xdb\xe4\xc8\x87\xb6\x99s\x17\x18U\xf8\xc1\xcb\xf2\xea3\x9d\xd2sY\xa3\n\xa7\x0c7\xb4~3Vkj:K\xfcp\x0b%\xde\xc4\x85\x01\xc3#?9+>(`\xcb\xaefT\xe1\x16\t\xb4TI\x00\x91\x85MTa\xb8\xc9Z(\xaa0\ri$\x1a\x93\xa6\xcf\xdc$m\xbf\xff\xb8L\xb5b\xbc\xb2\xf0H\x87\xb9Q\x88\xf9\x0b05\x8f\x8f\x83\xd7\xaa\x12\x8aX\x90)\xa1\xf1\xa9p\xff.\xf0\xa7\xc0\xef\x00\xd7\x83-Q[\xc1\xebx\r\xc9n\x9d\xa3\xf9\xbf\xbc\x96\xc4-U\xb6T\x06\x92\xbf\x0c~\x1e\xfc\x07\xe0\xef\x83\x87\xc1L\x8b\xcc<\xd6\x14e M\xaf)|\x8a\xa5\xb2|\x81\xf9\x81\xdc\x0e\xaep\x0b\xb5\xd4\x07\xe0^\xb6\xf0\x86\xe6\xe3T~q\x90\xb2e\x7f\r\xa2\xffN-[\xf4_[B\xce\xc8\xf8\xe1<\x97V\x0b\xa4\x8c,\xc5lb\x8bl\t\x1a[\x84`y@\xc2\x15\x01\x89M\xc1\x02\x10X(\xe5\x07\x01\xea\xef\xa6&c\xd2\xb8\xa1R\xeaZ\xc2F\x01h\x9a\xe3T\x9bZ\xfb\xc0.#\x10\x08|\xa6()\x02\x8a\xc0\x1aD\x80\xed\x00\x85\xec0D\x16\xfa\x024K|l\xe3\x90:\x1e\x9c\\\xe2`\nb|>\xf5\x7f\xc6\x97PeS\x19"=vKO\x1bW\xa48\xfdm\xea%\xcd\xecJ\xeb\xd3w\xf7\r\x8d\x8eO_B\xa4\xa4\x08(\x02\x8a\x80"\xb0r\x10@\xbb\xed\x0cK\x1c\x99w\x1c\x01+\xc6\xa0\x0c\xa4\xf5Z\x10\xca\xa9]\xd77\xc8A,\x17f@\xa9s\xaf\xf4\xcbkOv\xc9\xf1\xc7\xdb\xe54\xfc\x07r\x1c\xe5\xfc8\xd5\xf5!\xaa0\'\xbf\xf2\xee\x7fv\xe5\xa0\xeb\x94\x948q4\xc8-\xfbI\x0eVH\xb4\xe8\x1b\x8f\xc9\xe83\x17\x0c\xf3lhg\xa3\x84\xf7c\xb9\xf0\x81u\xe2o\xae4\x97\x1b\x7f\xc2P\xfa\xc5\xc1Ldf\x1c\x8c%\xc4M_\xb8Y:\xbe\xfe\xa8Ynl\xd24\x0f\x84\t\x1bbr\x1c\xfdp\x1c\xffW\xe0\xbb\xc0g\xc0|\xd0\xa9\x8e\x8ap\xe9\x8a\'\xe7\xc5\x9e\xad\xf3\xc7P\xa3O\x82\xdf\xe6\xa9\x19\xf1 \xf3Z{\xbd\xe7\xcfW\xdcu\x1ff\xe2\x1a\xeaO\xf8\xa4\xe9C\xe6V\x97\x9f\xc5\xf6\x8f\xc0\x7f\t\xe6\xdf\xd6\x9c"V\x15\x80x\xea+\x80\xec\xcb\xfc\x16\xb7\xac|\x99\xf9\xb2fL\x9ch\xa2A\xc5\xf6\xab\xebe\xfd\xce*\xe9\xb98\x8a\xa5B6\x9b\x8c\x93\xcd\xfa\xc6\xd2\xa0\x0f\x16\x80\x8e\x19|>\x9b\xc4\xb2\xf2R\x89\x80\x87\x07h\n\xa2\x94O\x04(|\xd0"f\xe3\xeej\x08(\xbdF\x18I;\xbfn\xbc\x13\x03X\x1a\xce\xe8j\xb6\xc3N;\x11\xbdA\x11P\x04V$\x02\x1c\xf9\xb0\x11\xc1\xe0\xc7\xf0Hf\xed\xf6`oT\x1a60\x920\xd2J[\xa6L\x1d9\x16\x97.6^\xf9I\xa7\xb9\xc9\x87b\xc79N(\x10\xed\xbd\xa1A&F!&\xb8\x16%\x05\xcaV\xb3Q\x04\x14\x01E@\x11\xc81\x02\xde\xa8\xc2\x93XQ3\x19E \x91~6\xef>Y\x07w\x0f;\x0e\xd5\xc9\xdd\x9f\xda\t\xf7I\x13r\xf2\xd9\x1ey\xe6\x81Kr\xe1\xb5~\x19\xec\x8e:~\xb7\xdd\xf2P\xc7E\x8bB\xf6~F\x81EYZ\xc9\x19Sx\x15uf(\x8c\x1f\xfc\xa7\xe24z\xa6\xdb\xf0\xc0?!\xaapC\xb9\x94_\xb7QB{\x1a%P_n|\x07\x96@6aT\xe18\xfc9\x96V\x96I\xf3\x17o\x91\xb6\xff\xfc(Av\x14\x8b\xde\xb4\x1d\xc1\x83c\xf8M\xe0\xbf\x06\xd3\xad\x17\xfd\xd3AjX\xf5J@"\xcbz\xb2\xfe\xa4#\xe0\xff\x00\xbe\x83\x07 \xbe\x9a${\x1d\xaf\xcd\x05Y}\t\xdfx\xcb7b\xff\xdb\xe0\x8f\x82\x7f\x03L_\x81\xcc\x97l\xcb\x81\xdd\xd5K\xaa\x00,\xfeg\xcb\x97\x91\x1fK\x08|\xad[\\\xbe\xc0Y\x91\x8d,E\xa7\xb3\x0c\xcc@k\xc0\xd2eV\x00\xda6r\xc4\xfa\x00\xcc\xaa\x86\x8b\xdc\xec6\xb1a\xcc\xd4\x84+\x832\x80\x0e\xd38\xe5]\xe4r=\x9d=\x02\x9c\xc9\x9c\xc4\x8c\xda\xe6=\x0c\xda\xe4t\xa8)\xa7j_\n\x06\x01\xe9A\x80\xa7\xba\x08\x1cw@\x11\xc8\x11\xb6\x92"\xa0\x08\xacN\x04\x8c\xf8\x85\x9fDO\x87\xef\x9d3V\xf4\x01H+@*\x00\xd93&\xfe\x9e\x1a\x0c\x1c \xd1\xcfl\xba\xf7\xa5\x96\xfa\xecU\xcc#6\x11\x87\x02\x90\xae~\x90\x9d\xb1X\x9c\xfd{>\xf68\xb8cs\x19\xa9\nH\xd3\xa6r\x19\xc3\x80D\xf5\x7f\xf9@Z\xd3T\x04\x14\x01E`y\x10p\xda\xf4Y\xf9wt`BF\xfa\xd0\xafa\x85L\x18n\x1fnz\xe7F\xb9\x13K\x85\x87\xfb\'\xe44\xa2\n\xbfB\xeb\xc0G\xdb\xa5\xf3\xbc\x1bU\xd8\xca\xd4(~)\xac\x03\xe3\x18]\x1ae\xe0\xf2T\xa78s5r\x05~\xb8\xa5\x9c\xc1A\x0ce\x12`\x17\xc38d\xf0_N\x89\x80}e\x18G\xeen\x90\xb2\x83\xeb\xa4l\x1f\xa3\nGdf*&\xe1\xab\x9a\xa5\xf9\xcb\xb7I\xe77\x9ft:\xe5\xf9\xb2\x8a\xb56\xbb\x1e\xa9~\x1b\xfc\x010\xa7\x08\xe7_\x89\x93\xab\x84\xf8\xd2\x12E\xea3\x0e\x80\x7f\x1dL\xcb?\x12\x91\xe6\xdf\xac\xa2\x8e\xe7\x16&\n:\xfc\xef\xa6f^g\xe7\x94\xb9\xde>:#\x0c\xcdO\x81\xf8\x92I,\x07\xf7\xb9\xdc\xf8M\xe0\xdf\x02\xffg0\x93\xb0\xcf\x07\xbb\xab\x97T\x01X\xfc\xcf\x96/(?\x8c\xed`F\xc2!\xf1\xd5\xcf\x8e\xccW\x82\x90:G\xd6\x15\xc5\xf2_V\xa6\x14o\xe3\x04\xa2b\x8d\x8f\xe6\xdfT\xa2\x1c\x83$?\xac\ri\x95Q\xbat\x93\x93\x1d\xd6k\xfdnH,\x13\xf0\xbd\xb5e\x9f\xa3\x00L\x0b\x0e\xf7=5\x83\x7fX\xef\xc8\xfaJ\'\xc6SZ\x89\xe8\xc5\x8a\x80"\xb0\xac\x08\xf0;6\xdf2\xbb2w\xdf\x8aa\xb6;\xb3\xbd\x1a\xb7h\x9b\xc5\x8f\x0e\x81\xca:\n\xdf\xec\x13\xa6 \xaf\xc1o\xaba\x93H\x1a?\xcc\x0b\xf9\x0f2(\x06\xd2\xf4\x8c\x81\xd2H$\xf5K9\xa94\x896\xaf\xf5u\xba\x98q\xab\x9e\xfa\xed\x99]\xe9j\x00w\x1c\xae\x83p\xcc%\xc7\x99%\xa3w)\x02\x8a\x80"\xa0\x08\xac\x0c\x04\xbc\xd6\x81\x8c\xfa\x1e\xc5\xc4\xcf\x00V\xcc\xf8C\xa5r\xe0\xb6f9\x0c\x1f\xef\xefC0\x91\x01X\x03\x9ex\xaaK\x9e~\xe0\xa2\\>9\x88\t\xa2\x98\x13Y\xd8\xad&-\xd6}\xe8#\xe3\xe8\x1c\xf3\xdd?\xae\x0cd\xddRRn\xb1\x13x\t\x99\x05;\xc4\n\xc6\x08c\xc7\xdb\x0c\xf3\xea\xd0\x86j)CT\xe1\xf0\xce&)\xbbf\xbd4\xff\xfc\xed\xd2\xf9G?q\x04\x00W\x06qS\xe5\xc6*\x99\xee\xc5\xfe\x7f\x03\x7f\x1eL\xe9\x87\x8a)\xe6\xbaZ\x885\xb7\xf5\xa2!\xd3\xd7\xc0\xff\x0el\xdd\x99QR\xe1\xdf\x17\x1e\x89S\xae!\xd9\x97\x92[\xfe\xf7\xca7\xce)\xe7:\xef\xaf\xb9\xd5\x05~>\xa26?\xa6\xc4\xb2\xfc_\xe0;\xc1_\x04_\x00\xdb\xe7\x83\xdd\xd5I\xaa\x00,\xfe\xe7\xca\x0f\x83/\xe8\x1e0\x9db\xda\x8f\x05\xbb\x99\x91\x89\xfe\x8b\x06\xad\x06>\x8ah)0:\xb4\xfc\x96\x02\xfc\xa6\xfd\x18\xf0\x8d\xc3\xb2c|\xd4]\xde\xe5\xfd\xc03\xab\xea\xfc\xbb\xdc4\xab\x1b\xc22\rG\xbbjH6\x1f\xa2\\\x9f\xe1\x8c\xe5$\xaca\x9a\xb7Ay\xe7\x92\xb5V\xb1\xc7W\xdc\xd22\x95\x1dp\x1b\x06\xd3\xd74]\xf1R\xfd\xa3"\xa0\x08,\x13\x02\xa6m\xc5\x8f\x15\xb4l\xfb\xcde\xfb\x944\xb8\xe5,\x0f\xbfg\xee\xf3Bw6\xd7L\xc4\x96\xf0F\xfc\r\x8a3\xe9\x87\xc5/,\x18\xcc\xb6\x13>\xf4n\\\'R\x05\xf7-\xb4\xfe\x0b\xa5/\xb6X\x7f\xb2\x83\x08\xca\xe1\xa7/Q[\xc6<@\x15\x87\xa5b\xa0"(\x17O\xf6\xcd\xa6\x9e\xc7\xfcl&\xec\xcb(\x14S\x01HW\x1a\xd3(\x87Z\xb7[tt\xab\x08(\x02\x8a\xc0\xeaF\xc0k\x1d8\x03\xff\xe6}\x1d\xe8G\xd1/\x04\x82~\xa9\xc1\x98\xe7\x0eX\x06\xde\xf3\xa9\xdd\xf0\xc5="\'\xe1/\xf0\xd4\xb3\xdd\xf2"\xa2\n\x0ftF\x8d\x95:5O$\xe3\x0e\n]\xb1\x8d\x96\xeb\x9c\xd5\xdfY\xb9\xc1\xed\xd0)\xbfP\x94q\x15\x84\x13\x08\xfeA\x16yM\x02\xcd\x15R\x0ee`\xe4\xf0z\x19\x7f\xb1m\xf6\xd6d\x18\xad\x92\xe938}\x01\xfc[`{.\xf9\xca\x95y\x04\x80\x0c\xf1\xd5\xba\x0e\xfc{\xe0;\xcc\x19\xc7\xe2\x91u%\x82\xf3\xc9\x8e\xfb\xac\xe2\xcf\xbd"\x00%kp]5\x96^G`\x81\x19\x10\x1f\xdem*\x07g&\xa7\xb1\x0c{B\xe2\x03c2\xd9:$\x93\xedC\xae\x9c\xe7>+c\xc5\xb9\xa0 \xc6\xfc\xf9\x07J\xac\xb4\x06|\x18\xcc\xe7\xf1(x5=\x0bT\'\x99\xd2\x97\xa4\x93\xef\xd7\xa3\xfc#`\x87Q4\x15&\xf1x\xe1\x0f\xc6\xfcy\xe9\x1f\xce\xf2\xf0kd\xeam[\xa7%n\xd3?g\x89\x00\x07\xc5\xfe\x80_6\xef\xad\xc1\xc0\x98\xee.\x88\xbc}\x1aK$n/;\x8b\x8e\x15B\x8djm\x97\xc0K\xff\xac\x08\xe4\n\x01~{\xe6\xfbC\xb7c\xbf\xc3D\xa3\xe9v\x1a\xb6\xef\x08c\xc7Z\xed\xd1r\xcfZ\xefA0\x13N\xeaL`\x8b\xc9&\x81;\x00F\xcc\x93>X\xf4vC\xb9\xc7\xe5\xfd\xf4\xfb\x8a\xa5LF\xe1G\x05\xe0\\j.w\x94\xff3\xc8\xbc\x92\x93\xc8\xe9\x91mm\x86\x8c\xcb\x078EO\xef\xf6\xb4\xaef_\x16,\xf3\xc9\x85W\xd8\xce\x81l\xe6\xceQ\xfe~]Ia\xd3nXZ\xb3\x82<\xa6\xf8\xaa\xa4\x08(\x02\x8a\x80"\xb0\xb6\x10@\x17\\\xea\x0e\xec\xe2\xb1\xb8\x8c\xc1\xe0\x81n!\xe0\xd1NB\xb0\xa4\xbf\xf9]\x9b\xe4\xe6wo\x92\x0f\x0e\x1f\x80L>$\xcf?xI^z\xa2S\xba.\x8e\x98\xe0"\x16,\xd3\xddSyB\xa2\xa2%\x9f\x9d\xa7\x93\xcb\xca\xf9%\x18V\\1\x10\xe1\x87\xf2\x10\x14\x82S\x9d#2\xf0\xfdS\xb3\x83\xeb\xc5q\xe3\x1d\xec\xad\xff\x13\xf8\x02\xf8\xdb\xe0\xd5\xa0x\xf2\xd6\xe1\xab\xa8\xd3\xff\t\x86 g\x10c\x9d\xe7\xeb\x9f,\x86\x06W\x07\xb0\xd2\xea\xb0D\xb0\xbc:|p\xbd\x846W\x8b\x0fn`J0\xc1Y\x12D\xf2\x94\x07\xb9\xd4\x81\xf7\xf1]\x87+\xb3\x19\xbc\xeb\x8c\xd4\x1c\x1f\x9b\x92\xe8\x89N\x19}\xfa\xa2D\xcf\xf5\x9a\xbf\xe1*\\\x8b\x8b\xe7\xbf\xc4L\xc1\x96w;\xf6\xbf\x0ff\xc4\xe0?\x07\xb3\x9c|\xca\x8b?A\xfcq%\xd2\xfc\x07\xb0\x12k\xb1\xba\xcb\xcc\x86\x81/\xe7\xadn5\xf9\xe1dEq\xf7=\xdews\x93\x99\xe9\x99\xa1o\xa5e\xd7\x00\xc2Z\x01\n"\xfah\x8a\x8eb\x90H\xca\xc3\xe7f}]T5P\x01\xe86\x1cNn\xfa\x9bG\x04\xa8\x00,\r\x94\xc8\xd6\x03\xb5F\x01X\xc2\xb6\x1b:\x80\x94\xc86\xd6\xe7\xa0\x00D\x03o\x9ac~\x15J\x8a\x80"\x90=\x02\xe6[\xc2\x0f\xdb[\xcb\xece\x8c\xe5\x1ev(\xfc\xfb\xe1{\x8f\xe2\x91\xb1\xdcc\x96\xec\x92p17\x14\xa8\xd8\x96\xd2j\x0f\xed\xb7\xd9R\x99g\x18J\xbeA\xec\x0f\x81\xb1\xe4H\x06\x9d\x08\xefL!-\xc2\xc0E\x02(\x00\xf3\xa9\x86% \x89eM\x95X\x1f\xdc:\x0ce\xa3Y\x02\x8c\xfd\xbc\x11\xca\x15F\x94\xf9\xb3\x88\xceH\xa2o]\x1b\x9d7_y:K~\x911\xea\xd9\xb8\xb9\x1c\xae4\xa6t\x9e$_`k\xba\x8a\x80"\xa0\x08\xac$\x04\xd0E;:\'\xfdE\x14\x81\x94r)\x1d\x86\xc1\xff\x03\x0c\xa7\xf3&R\xb0\xcd\xc6\xbd\x19gW\x01-\xfc VA\xc5VI\x15l\xc3P\x8d\xfa\\\xe3\xd6\x89\xe72&\xb3\x14\n_\rM\xbc\x19\xfd\x97\x91\x02\x8ba\x19,\xbf*?\xca4\x0e\x1f\x16S\xe8\x9c\x1c\xca\xc3\xb7\xe6&Y\xddPf\x96He\x05f\xc6Oa\xed\xdd8\x83N\xd1\xef/5\n\xc0\xc7\xff\xfe\\z\x00\xd8\xd7\xa0\x0b\xad>\xa2l93=\xf6\x1dI/)\xbdZ\x11X\xf5\x08\xd8\xef\xc5:I\xb1\xc7\xa6\xb1s\xe5\x18+\xcep\xe2\xc7X\xeeak\xad\xf6\xb8D\x96\x93B\xe3\xf8h\xc7!lE\xc1f\x8bcZ\xf2qI.\xad\xf7L`\x1e\xec\xf7c\x9f\x96}\x9eA\xc2\x92\x18[\x8b\x02^h\xcb7\xbb\xe3\xdc\xce\xf3V(d~\x10\xea\x8c0]m-\x00\x137:\xd7\xa7\xf0;:8\x85\xc9y\xf4\x7f\xb6\xfe)\xdc\x93\xee%>\x94y\n\xd6\x8e\xedg\n\xe7\xff\x8f\x8f\x96h4n(\x97F\xb8\xf5\x98\x18\xa3{\x8b{L\x11\x85\xdf\x05\x95y\x8cnd\xad\xf8(\xcf\xf0\x83#\x99\xad{\xcch\xbaT\xe4\xd1z\x8fJ\xb6\x010\x97\xe3\xd2Z\x8fV{\xe4\x11\xb4\xc9\x08\xce\x94\x161+\xe6\xc3O\xd4\x96\xcd\x88T\xf8\xe16\x1de!3\xee\x81\xa2\x11\x16\xe2&\x028\xfc\xeb\x192\xe99\xbb\xa9\xfeN@\xa9956\xed\xf8\xc6\xe3\xfdY\xf5\xa6\xf3s\x8d\xa3^A,\xaf\xeak\x1b\x93\xde\x0e\x94\x19d\x1f\xd1\xfc\xabsx\xc6\xc5\x99\xca?\xfazj}}\xc8\xf4\xa79\xccA\x93R\x04\x14\x01E@\x11Xm\x08\xa0\xef\xf0\xaaR\x12Q\x85!C\xd0\x95\xc55\x08"r\xeb}\x9bM\xb0\xc87^\xec\x95W\x9e\xea\x94\xe3\x0fw\xc8\xe5\xd3\x83\x8e\x0e\xc53P3Q\x85\xd1\xdf\xcf\xa4\xdb\xbf\xaf6L3\xab\x0f{q*\x98Z\xc0\xff\x04\xbe\x1f|\x0c\xec%\xeal\x8c\x04\xe5n\xbd\x7f+\x86}JT\x94\xf8\xde\x0f\xfeSp=\x98\xc2\xe3\xc2\xba&;\xc1\x8b\x0bh\xf1Ws\xcfn\t\xefh\x94i*\xee\xa0\xf8\xe3\xca1#\xc3\xd2\x9a2]a\x8dh\xba\x03\xfc\xf8\x08\xe4\xd8Q\x14\xa2:"\xcd\x9f\xbfUF_j\x97\xbe\xbf;&\xb1^\x9c\\\x98\xacd\xc8\xba\xfc6\x98\xdb\xdf\x053U\xe2\x9f\x81\xf4\x89\xbb\x8a\x8c\x16~(EV\xc85\\\x1c\xfb\x12\xd2y&\xf7\xb3\x1e\xb2\xd8\x047\xef\xab\x96\xf2\xea\x80\x0c\xc0\xaa\x8a\x8a\xb7\xe5&V\xcc\x8f\x0eg\x0c\x16\x1a$v$\xf9\\6U\xd5\x18vg\xb2\x96\xbf\xee\xa6\xc2\xab\xfc\xa7\x04\xaf\xef\x04\xfc;6n\x8aH\xa8\xc2/\x13\xb0\xf4LK\x03h\xdf\xfe\xd3XVw\x03\xfaG\xf8wUR\x04V\x15\x02\t\xb1\x82\xb2\x06(\xa9\xb5w\xdb)\xdb\\\x99(\xb98\xb0[\xa3\xf0\xc31|\x9f\x18\x1f{\\.\x01E\x97\xb1\xd8\xe3L\xe8\x00\x94x\xf4\xb7\xd7\xc7e\xba\xd8R\xa1\x86\xd9}\x13p\xc3\xc9m\xe9_~\x83V\x89\xc8\xabY>C\x89\x9d\xd9s\xa6.\xf8q\xabb\xaf\xccx\xcb\xf23C\xa6W\x81\xe5\xc8\xe9\x92[\x8e\t\xe02Ie&$\x1fZ%\xdb\xfe0\xdd\xe4\x16\xbb\x9eV\x10\xa12\xbft\x9c\xeb7\xee,\xccu\x9e\x01\xd2b\xf7e{\xde*\x197\xed\xa9\xc1D\x8b\xe7yd\x9b\xb0\xde\xaf\x08(\x02\x8a\x80"\xb0f\x10H\x8a*\x0cK\xf2\xe8\xd8\xb8\x0c\xf6\xa0\xcb\xc48q\xd7\xf5\r\xb2\xef\xb6&y\xf7\x17\xf6\xcah\xff\xa4\x9cx\x9aQ\x85/\xcby\xb8\xbb\x18\x1d\x9cL\x1a\xb3\x99\xf9?(x\xb8\x02\xd6\xba^Z3 f^QN\xe1\xb2\x03\xdf\x01~\x12|\x14Le\xe0#\xe0\xd3`gY\x01v@F"sv\xcd=\xcb\xd9\xf1S2ey\xa8\xc0\xfcE\xf0\xff\r&Q\xf2\x9a\xafg\xe2\xcbA\xb9\x08\x8a\xe2\xd2\xf2\xa0\xd4}\xf4\x1a\x13,e\x06~*\xa7zGp\x0b\xfe\xce\x14se\x9cDE#(\x8e\x95,q(\x17\xc3\xfb\x9b\xa4e\xdb\x11\xe9\xfb\xeb\xa3\x8e5 \xffh\xcb\xc4}\x87x\x131e\x9d~\x07\xcc\x82\xfd\x11\x98\xf5\x81\x10\xb9\xf2i\xfe\x83Y\xf9uZM5p\xdeZ\x91k\xddJ\xf1E\xcc\xea\x99Y\xa5\xda\xde\x1b\x1be\x1c\xd6v\xde\xf1\xdcr\x02g\xca\x01\x13_\x9a\x9c\x93\xf2\xdd\x921\x02r\x0c\xfe\x04\xd4\x88\xac0O\x9dK\xce\'\xa0\x88h\xde\\!\xcd\x1b+\x1c?\x80h\xe0\xed\xc0u\xc9R\xd8\xc6\xf9\r\xaeS\xe0ga?\x8d%\xef\xd4\x0b\x14\x81\xe2A\xc0(\xa2(\x11\xa3H\x96Y:\x8a}T\xe2\xb1A\xa2\xe5\x9eQ\xe8\xe1\x1d\xb7\r4_w:<\xe62\x08\xdeG\xffz\x9d\x98\xbdd\xa4\\\x13@\x83V|\xd8\xa7\x055\xad\xfa\xf8w.\x9b\x80@\x95\x161?\xe6E\xe1\xcb\xde\xca\xfc\x98)\xb7\x05Pf9\x9f\xb6[\x0e\xce\xfc\xd2\x9a`\x12ub}\x88O\xb9]\x02\xccr\xa5F\xa6\n\xb84\x8a\x00#\xb4\x02\xf4C\xb0\x9c\xa2?A\xd65\x97\x84$i\x01\xd8s\xd9\xb1\xfe\xe3r`Z\x05\xe6\x9b\xac\xc5\xc5\x96\xfd52\t!\xb7\x18\xdcz\xe4\xbb\xce\x9a\xbe"\xa0\x08(\x02\x8a@\xfe\x10p\xc6G\x94K\xd0\xf5c\xf49\xd0\r9\x03}\\ \xe4\x83\x01I\x10\x96\x81[\xe4\xc8\xc7wH_\xeb\x98\x9c\x86\xdf\xc0\xd7~\xda)/?\xd1!\xdd\x97\xc6\x8c\xa80\xed.\x83\xa5\x8fZ\xa6e\x8e\xf3\xdf\x1d\xe6\x0f\x90\xc2\xa4L\xa9\x84\xd2\x17\xfd\xcf\xdd\xee26\xf2\x1c\xf8)\xf0#\xe0\x87\xc14\x83\xf0\xa2I\xdd\x00\xef#\x17\x92ly\x99\xe7\xd7\xc1\xbf\x0cf\xb9\xc8x\xeas\xc8\x8e\xe5p\x9a>\xfa\xea\xdew@J#\x01\x89\r\xe0\xdd\xa2\x86\xc3X\xfb\xcd\xb9\'W\x87\xa64\x90\xc90\x11^\x82\x89\xda\xc6\xcf\xde$\x83?8\x89e\xc1\'PZ\x14\x975\xf1"\xea\x94\x9fg\x88\xe9\x1f\x80\xbb\xc1\xdf\x05\xaf\n%`V\xca$\x80\xa0\x94?\x04\xf8*R\xcb\xcc\xf5N\x9c\r \xf1\\Nh\x0f\x14\x80\x13\xb4\x10qZ\xf8\x9c\xa4\x99M"\xac\x18\xad}\xfb\xe1c"_d\xdb\x1d*\xa3\x18\x05\xcbF\x1b\xceW~\x9an2\x02\\\xf6\x1b\x80\xbf\xb1M{\xab\x1c\x05`&\xdd\x94\xf1?\x86w\x84\x01\x01\xf8\xc2\xe4\xec\x8bH.\xab\x1e)\x02)!`\x85\x05\xab\xc9\xb6\xc7\xe6\xbdte\x1f+\x02\xb1\xad5\x16{H\x99\n>k\xbdGm\r\xad\xf4\xe0s\xc7\xf8\xdd\xa3\x02o\x02Le\x1e\x97\xe7v\x81i\xb9\xd7\x83\xe5\xb9\xb4\xdc\xe3\xb2\xdct\xfc\xcb\xb8\xb3\x9f\xa6>\xb6|s\xa4\x9c\xc4!\x85 ^\x93\xc9\xb7\xb9\x18`\x89o\xd4\xdd\xb1\xc7\xa6,n\x81\xdc\xcdl\x19q\x82\xe7\xac\xf2\xec"&\xbe\xa9\xd4\xac/\x83\xd4Hmif4\x05\xe5\x18\x15d\xe1\xca \x92\xa7w\x18\xfbp2Ko\xee]F\xf1\x862_:\tW\x05$&\x9fK,M\xa2\x8b\xffl\x833\xf7\xa9\t\xb6\x8b\xb9\xad\xd7\xe29\xea_\x14\x01E@\x11P\x04V=\x02\xe8RJ\xd9\xa1\xa1\xfb\x8dc\xe88\x86U<&\xaap\x973\x9e\xba\xf6\xee\rr\xfd\xdb6\xc2\x8f\xfb\xa4t_\x1c\x95\xa3\x0f\xb5\xca\xd1\x1f\xb5J+|\xe1\xd2\xf0\x84\xe2\xba\xa5\x12\x8c\xc1|\xe8\xdf\xe3\x907\n1\xa7h\xf3]A[v\xe0\x94\x80,\xf3\xf8\x06\x97\xbf\x8am;\xf8\x190\xad\x03\xa9\x18<\t\xa6\xbe\xc0\x12\xa5\xac\xb9i\xd8\xbf\xe5r\xcb<\xf8d9+\xfbM\xf0g\xc0T\xe3\xf1<9\x99X*<\xf0\x92P@\x1a>y-\xac\xfe6\xca\x0c\x96\xe7\xc6\xe8G\x9a\x8a\xbf\xccE\xbb\xe4|\x96:B^3\xf0\xd3<\x1d\x9b\x96\x9aw\xed\x13\x7fC\xa5\xf4\xfc?\xcf:h[E\xc1l\x1a\xa6\xd48\xe4\xf6O\xc1\xad\xe0\x9f\x80YZ\xd6u\xc5\x92*\x00\x8b\xf7\xd1\xf1\xe3\xe1\xcb\xb5\x19\xbc\xc5-&_\xc0\x8c\xc9\xbe\xd7\x9c\xb9\xa9_\x1f1\x16\x80E\xa2\xffCS\xe13~#\xcc\x0c\x13k\xe8\xe9,2\xae\xf0\xbc\x1b\x9d\xef\xb8\xa6)\x8c/\x19\r\x80\x1d\xb4\xcf\xbbNO\xe4\x03\x01\xbe\x7f\\\xfa\xbb\xfd\x9a\x06y\xf2\xff\xbb\x08\x81\x80}[\x8ad\xa5\x04\xfa*\xeb\x00o\xae\x84"\x04\xfd]\xaeL\xc4S,\x86^\xb6\x06\x11H\xb4E\xd8\xb1\xe2\x18\xb7l\xa1\xad\x8f=\xaf\xbf=c\xa5\x87\x97\x9d[\xbe\xf4$n\x19@\x83\xb3\x9c\\\xcej"\xe6B\xe8\xa1\xcf=\xfa\xd8\xa3\xd2o\x18\n.n\x19P\x83\xd6i\xa9\x12\xb3`\xfa,\x8f\xbd\xcd|Z\xf8\xe16\x9d\xef,\xd5<\xe7^\xe7V3Q_\xfe\xdd\xf6`\xf6\xdb5\x85\xc1yS\xb6\xb9\tx\x8e+\xb1\xc4\xb7\x1aA\xd8\xea\xa0\xecc\xc0\x0f\xcb\xc4\x9a\xb8`\xc9H\xda\xe4\xe69\x89I/Z\x00V\xd4\xfadb\xa9r\xa4\x9d\t\xaa\x8c2\xc6\xa6f\xe4\xe2\tX*\x83\n\xd1\xc5\xf0\xd1\x13b\x1f&E\xea\xd0\xafG\xb1\xc4\xb9h\xfa\xf5\x0c0\xd4[\x14\x01E@\x11P\x04\x8a\x18\x01\x8a\x1b\xa6\xcfg\'\x0f\x03}L:M\xb8Q\x85\xfd\x88*\xdc\x04_\xb4\xf7}u\xbf|\xe0\x17\x0f\xc8\xa5\xd7\x07\xe5\xc4\xb3\xdd\xf2\xd2\xa3\x1dr\xfc\x11\xea\xad\xd0_a\x02\xd3jNh\x90\xc1\xfe\xcbZ\xb1\x9b\x0b\xf4\x87\x08\x10a\x832\xb6\x94V\x08\x19\xb7\xd4\xdb\xac\x03\xbf\xd7e.7\xe0r\xe1G\xc0?\x00\xbf\x08\xb6\xd7c\xd7\x91T\xb1\xb5\xf7\xf3\\.\x88e\xa3\xc4\tAM\xbe\r\xbe\x1f\xcc<\xf8R\xd8rc\xd7C(Uh[\xad4\xfe\xdcM\xe2\xaf\x8d@\xf1\x87U,L\x81\xca\xbfB\x93[\xfaX\xf7\xa8\x896\xec\x83o\xe9\xae?\x82^\x8f/#\xffF\x04g\x89ubI\x19\x10\xe4\xaf\xc0\xb7\x83/\x83\xe7_\x89\x93+\x85\xf8")\x157\x02[Q\xbc\x160_\xbe\xec\xbe\x12w\xa4\xb0\xe3p\x9d\x89\x02\xbcttr\xe4X \xe2\x80\x85\xdf\xdd@\x17\x06\xc4\xa0\xe4o/G\x85p?\xd5\x9a\xe62c Q\x88\xc1Y\x8eJ\xbe:\x92\xc1C\xe6\xe0{\xcf\xb5\r\xe9\xd7\x87/\x04%\x0e*3\xbaFDv\xd6\xa4\x9f\x86\xde\xa1\x08X\x04\xf8>\x99F\x06\xcd\xaa\xd9\xe28\xd1\xba\xb2\xaf\x07\xb9\x9b\x84\xa5\x1e\xad\xf6,\xd3o\xea\x14d\x1dX\x93\x19?zC\xd8\xd2\x82\x8f\xfe\xe5h\xa1G\xcb=.\xcd\xedE{f}\xef\xa5\x1bHc)\xcb=[nS\x17\xfc\xb0\x87\xc8%%\xf0\xc0\x8e\xdd\xb7yZ\xd0\xecqbkwP\x90\xb9\xe5\ta\xc24L\x86\xd8Q\x03\x05_#V\xb8 `\x85\xd4\x82\xeb\xb1\xdf\x089\x12\xcb2\xb0>\x17\x8c\x0c-\xd6\x14\x0e\x99\xd6 p\xe5\x92\xe6*(\x08\xd3&\xa7\\1X"\xb0\r\xf2!\x0bOI\xd3Nm\xb1\x1b\xd8\x8fqb\xe3\xec\xcb}\xce%\xec\xd4\xf2Mn\xbf\xbeeO\x95Q\xfc\xc5\xd3Q\x1e\xe7\xbbl\x9a\xbe"\xa0\x08(\x02\x8a\xc0\xaaF\xc0L8\x99\x1ft\xd5\xe8\xa3G\x11Yx\x04\x13\x99\x8c\xe2Z\x0bwKo\xfd\xf8N\xb9\xe3\x03\xdbd\x14\xe7h\x1d\xcf\xa8\xc2\xaf=\xd5-\xbd\x08\x96\x15\xf7\xacf`W\x96\x98DD\xdfY\x88\xees\x85<\x18"\x03\xa9\xc5\x90\x15*\xb8%s\xa9\xf0\xdd.\xff\x06\xb6\x97\xc0\x0f\x83\x1f\x00\xbf\x02\xbe\x00\xf6Jc\x94l\x99\x1e\xcf\xd9\xb4\xb0\x9b\x16\xb1,T\xf61\xaa\xe3\xff\x0b\xbe\x17\x0c\xe1w\x01\x17e\xae|\x82\xbfI\xd5\x91]R\xf3\xde}\x90\xe3f\xa0\xfc\x83\xde\x922.K\xb3\x9c\x842\xc4zF\xa5l/\xfc\x02~\xe5v\xe90J@\x14\xc8Sn\xb7x,)\xeb\xbc\x05\xfc\xe7`[gb\xe8\xc5\x17\x87+\x83T\x01X\xbc\xcf\x89\x1f(i\x07\x98\xfb|\xf1\xb2z^\\\x15D\xa5\xd7\xf6C\xb5&\xf0\xc74l\xb2K\x8b\xc4\x82\x8a\xdf\x1a#\xfe\x0cu;\n\xc0\x8c\x9b%\x80\xb4\x18\x11D~\xa95\re\xc6R\x83\nP\xb7\xcfZ\xec\x16=\x9fC\x04\x88\xf5$\x82\x144!\x10\x08\xfddMb >\xbf\x8dM!\xc3\xb3p}q\x0b\xae\xd3en)\x80\xb5\x86/1]2~\xf8\xd1[f\x17\xce\xf7\x86-\xa9\xb1\xde\xc3\x0e\x15L\xdev\x90\r\x85iry\x13\x08\xce\xae\xa5\x0bKP\xa9\x80\xea\xa3\xf5\x1e\x04\x17Z\xf1\xd1\x9a\x8f\xd6z\xb4\xec\x83\x03l\xa3\x10t\xeeH\xed\x97/?\xf3b\x99LY\xb15Y\xba\xf9\x16\xccr\xcf-\x07K\xcd\xb2\x90(\x94\xbb\xc50;\x89}\xe7\xcf\x0b\xfe\xa2]5\xd6zuP\xe8\xd5`\x9f\x8a:*\xf7\xaa`\xb1W\x05K>,\xbb5\xd6{\xb4\xf0#\xe6\xcc\x83\xca*\xf6l\xd3\xf8!\x06<\xc7zcy\x86\x00^\xe3A\x9c\xe7\rN(\x1c\x9f\x13,\x0c\x12\xc4\xf3\xa9\x94-q\x03\x92F \x10\x1f\x95\x8bi\xde\xe7Ib\xc1]\xf6\'A(7\x87{\'M\xc4D^T\x88\x01\x8c\xed\xd7\xd7\xef\xact\'\xf6\xe8\xdb\xd6>\xc8\x05\x8b\xaa\'\x15\x01E@\x11P\x04\x14\x81\xdc#\x80>\xd9\x99\xbbt\xfa .\x13f\x80\x10\x06\x9b\xa4\xef\xc0\xdd\xd75\xc8\xa1;\xd6\x19\x9f\xe0\x17^\x1d\x80\xcf\xc0N9\xf6H\x9b\t$b\xfaKO\xa7\xe9g0H\xf4\xabj\x1d\x98\xf4\x98(\xf5\x90\xec\x96\x92\x0c\xa5$\x12\x95\x81{\\\xfe"\xb6\xad\xe0\x9f\x80\x7f\x0c\xfe\x17\xf0E\xb0\xbd\x16\xbbF\x12\xb6\xf7\xa7*\x111_Jm\xb4\x86\xfb{0\x95\x8f<\xf6\x08f8"y\x06x\xf5\x1f\xbeF\xaa\xee\xd8.S\xc6\xd7\x1f\x8a\xe0\x9d\xe0v\xae^\xbe_\x94e\xbaoLBW5I\xd3\x97n\x93\xae?~\xd2\x11\xdeX\xd3dT\xac\xe2\x93u\xfeO\xe0_\x05\xf3\xdc\x8a\xa4\xf9\x0flEVcU\x16\x9a\x1f\x14\t\xearC\xf6cw\x0f3\xd8\xb8\x9f\xfd\x96\xbdu\xceK\xcd\xe3"yuK0\x8a\xa1r\xb2\xa7\x83\xd6\xcc\xa4\xe4\xaf\xce9\x97\xe5/\xfb#\xe4Q\xdb\x14ruG\x04\xc0\xe9\xa4\xb2LYoO\x11\x818\xe6\x88J \x08\xec8To"\x88y;\x88%\x93\xb0\xaf\xc4\x19D\x02\x86\xef\x06}tK"\xb6\xba.\xb0\xcf\xdfl\xf1\xed\xdac\xd32\xba\xdf\xb1\xfd\x9c\xb95>\xf6\xd0\xc5YK2\x1eSf\xa2\xd5\x1e\x15L\x08\x08a\x14wQ\x1c\xd3:\x8fV{\\\x9aK?{\xbdP\xf6\xd1r\x8f\xbeI<3\xd4K\x02j\x95z\xf6BSF[P\xf7\xa4=\xa4\xa0\xcb}6C\xb9\xa2D/\xe1\xee\xd8c\x93\xa7\x9b\xb1\xbb1Y\xda\xf3\xf6\xdc\xdc\xb2PQg,\xf7\x80#\x1c5\x1b\x8b\xbdFL\xfa\xd6A\xa1G\x85_\x03\xe4\xcd\x1a\xec\x13c\xfa\xe5\xa4D\xe1\rbb\x95|\xb4\x96\xa4$?\x05\x9c\xbb\x80\xb7\x15\xf2m\xf9\xe6~\xcc\x89\xe7\x88\x1d\xbbo\x0bL\xe7A\x11\xe4E\x1f\xb6)\x12\xb3\xb3\xb2\xe8\x04\x9e\xb5\x99;\xb0uN1\x8d%/C\x07\xc6\x01\xce\x89\xa7]\xeb\xbf%o\xc8\xed\x05\x1b\x11\x01\xd8\x8f\xe7`,\xdb\x930\xcbm>\x9a\x9a"\xa0\x08(\x02\x8a\x80"\x90\n\x02\xde\xa8\xc2\x13\xe3X*<\x1e\x95!\xc8U\xec\xab6\xed\xad\x96]\xd7\xd5\xcb\xdb?\xbbKF\x10\x00\xf2\x0c\x02\x89\xfc\xf4{\x17\xe5\xfcK\xfd2\x84cZ\xec[*A\x07\xcey-\x8d*l\x11Il)E\xd9\x91\xbc\x05\x8c[\xf2\x06\xf0\x87]\xa6_\x92\x93\xe0\x7f\x06\xff\x18|\n\x8c\xc1T\x82\x98\x8e\x95\xc8\xec\xfd\x89?\xba;\x94,\xf87\x08}\xf2?\xc1T\x84-l\xf9\xc7\xa4 xQ\xeej\xfcW\xb7H\xe4\xc0:\x99\xea\xe3\x92_\x9c(&\xe5\x1f*`\x88J\xc0\xde1)C9\xeb?~\xad\xf4~\xe7\xa8SS\x1471\xd6p\xae$\xd6\x14>\x7f\x05\xfc(\xf8\xfb`\xe22Wz\xc6\xa9\xe2&U\x00\x16\xef\xf3\xe1G\xc6W/\'\n@Far\xa2\x11\x96H\xfd\xc6\x08\x02\x80\x14Q\xa4@|6>\x8c-c\x18\x94G\x87\xd9\x96\x98v\xc3l\xf3\xf1S\xcd%\xc0h\x95t\xa0\x94\x0ft\xaf\x9c&\xadN\x03\x98\xd5\xdbq\xa8\xce(\x00\xad\xf5\xca\x95\xefr\xffj\x95\x06g\xd1\x8f\x99.\x07m\xae.wK\t\xba\x15y\x91\x99\xfaE\xc9\xd9\x12\xb2{\xa5\xf5\x97\xb1\xdaC\xb3X\x8a\x06\xc3\x9e3-\xa5\xdb\\\xb2\xc5d\xb3\xc9\xf7\x82\x8a<*\xf4h\x9d\xc7\xe8\xe2\xe8\xdc\x8d\xc5\x9e\x8d\x90\xcb \x1b\xb4\xe0K\x97\xa8\x14cv^\xb2\xef&\xb7s\xff\xe6\xbd.W\xfb\xb6\x9ef\x8bD\x89\x05\xc5\x8f\x84\xd5\xa0[\x88\xa5\xca\xc2\xe5\xb8\xc6b\x0f\xf2\x1c}\xeeQ\x99W\t\xe6\x12\xddJ\xfc\x8d\xdbr`M+\xbe0\xb6\xac\x1c\x97\xe1\xb2\x9eT\xee\xf1\x19Y\xab=b\xce\x00\x14\xd4\xf2\xb3q\xc5\x7f\xd3\x83\xb1\x8c\xa6\x9c($\xb7F\xf8\xb3\x05\xc7q:\xc4|)Q\x96\xa1\x8ccx\x9ei\x10\x1d\x8f\xcf`@1\t\xc5/\xa3\x00#\xa5\x9c\x12\xab\x1c*\xf7\xcb\xf9W\x1d\x99\x9a}n\xde-\x17\x00\x85\xcd\xa3yk\xb9\xf3\xf8s]\xb1\x9c\xa2\xa4\x89)\x02\x8a\x80"\xa0\x08\xacE\x04\x1c\xc3t\n+\x8e\x081\xd4\x07e`\x8f\x13U\xb8\x0c2\x06\x83\x88\xbc\tK\x85\xfb1\xf9\xfa\xfa\xf3\xbdr\xe2\xb9\x1ey\xf9\xd16i?;\x02\x91\x03~\x03\xdd9?\x1fe\x08$C_\x82\x14\t\x94\x12\x08X\xc1\xcan)\x85\x91\xa9\xb4\xa2\xdf\xa4\x9b]\xfe?\xb0=\x06f\x00\x91\'\xc0\xb4\x0e\xec\x02{\xd1\xa4\xc0G\xc4y?\x89ir\x1f\xc2\x97|\x07\xfc^0\xff>_\x8f\xc4\xe7\x03Y\xb4\x14\xfe\x9b\x9b\xbft\xbb\x04\xd6WK\x8c\xf2\xb7\xfb\xdcpOq\x12\xca7\xdd7"\x15\xb7n\x832pT\x06~@\x1d\xe9\x82D,\xc8\xdf\x04\xdf\x06\xee\x00[)\x1c\xbb+\x83\xe6?\xb8\x95Q\xee\xb5RJ\x8c\xba\xe4*\xb7\xb2|\xd92&\xde\xcc/\xbb\x11\xcb/\x1b6P\x01\x88\x08\x88E\xb2L\x88-\x8a\x0fVa\x03\x1d\x98\x1d\xc8#\x996\t\xe9\xd7\xc0\xd7\x94\xa9\xba\xb7\xa9\xcbc\xbe\x9a\xb4\x07\x01\xd3\x95\x94\xc8\xd6\x03\xb5\xceI\xdb\xb5x.Ii\xf7"\x94\x80[\xaa\xb1\xa6\x18\t8\xf2DJ\xb7\xe9E+\x04\x01Z\x94q\xc9(}\xed\xd1r\x8fb\x06&-L\xb4\xdcQ(\x98\xac\xef=*\xf7h\xa9g\xad\xf5\xfa\xa1\xe8\xe3>\x03k\xa4Cl\x1c,%\xda\x85\xc4N\xb2XD\x85W\xae)\x91=v\xec~"\x1bw\'q\x8c\xcc\xcd>~\xec\xb9\xb9\xdfQ\x10\xf2\x1e\xfd\xed\xd1z\x8fA4\xac\xb5\x1e-\xf6\xb8O\xa5\x1f\x15{\xc49\xc9\xdf\x1e\x8e\xf1\xdf(P9\xfbNe\x1f\x15{T\x94\xd2\x1a\xd2\x92-\xa3\xf7\xe3\xe3}$\xb3\xc5\x0f\xb2\xce9\x99\xfa"\xf3\n\x88.\xbdL\x9d\x05\xb1 \\97\xdb\xfe\x8f\xc0_\xe3\x0c\x8a\x97\xa8\xc2\x95oK\xf9\xaf,E\x00\xb8_x\rm\x13(\xad\xc9\rsG\xfa?\xa6\xf6\xee\xb3\xafm\x8a@\xb9\x89o\xc3>\x87\xf4\x93\xd3;\x14\x01E@\x11P\x04\x14\x81\x82 \x97J\x06\xa1\x00\x00@\x00IDAT`\\PAN`T\xe1(\x02\x04F1);\x007PA\xc8-\x87\xeel\x91k\xde\xbaA&~~\x9ft\x9c\x1b\x96\xe7~\xd8j\x82\x88\xb4\x9e\x19r\xfc\x06zd\x1e\x8d*\xbc\xe8\xe3\xa24`%\x02\x8a(\x96):\x1cv\xf9s\xd8R\xf9\xf7\x18\x98Q\x85a\xfaf,\x05!p\'\xc8\x9b\xce\x9f\xe0\xec\x07\xc0\xc6\x0c#q\x85w\x87\xca\xbf\xaa\xb0\xb4|\xf5M\x12h(\x9f\xf5\xf7\xe7\xbd\xa6h\xf7\xa1\x04\xc42\xe5\xeaw\x1f\x90\xc9\xd6!\x19{\xb9\x1d%5\x92\x96\xb7\xc4\xc4\x83\xa3\x92m\xe0\xdf\x06\x7f\x1alq\xc6\xee\xca U\x00\x16\xe7s\xb2o\x1b\xcdw\x9b\xdc"\xf2\\\xe6\xc4W\x13\rf\xdd\xba2\xf8\xc0\x0bK\xdb\xb9\xa1\xa2\xf1\xffGk\x11?\x06\xfa=\xad\x9e\x01f\xe65]\xf8N\xa0\xc7P\xf4\xa4\xaa\xba V\x90zz\x8f\x85\xef\xd0\xb3y@\x80\x83\xe2(\x149\x8d\x88\x12F\xa2UjZ\x962\xb4\xfe\xe1\x94\xdf\t\x8c\xfe\xaf\xaaw\x15=+\xae\xdd\xcd\x03\xb2\xab$I~\x96T\xf8qI\xee\xd1NG\xf14\x88v\xa1\x0b\x96|\xd6ro\x14\xca\xa8t\x03j\xb0\xf5\xe4\xbb\xe3\xb6\x83\x06-\xd3\x1c\xe0\x87\xdb\x84\xe5\x9c\xf9K~~X\x06\n\x12f\x8b]\xfb\xdaR\xa1h\xca\xc2\xbf{\xf7y\xbc\x08q9.\x15{\xb5d*\xf4\xb0\xad\x83r\x8f[*\xf6\x18E\xb7\x02[D6\x93\x002\xa4\xa8\xc2\xe9\xf3\xa4-\xf2b\xbd\xa9D\xe7rh\xb3\xb6\x06\xd7\xf1\x19\xd8\xb2\x99\xb2\xe2\x80\xc7\xb4\xbe,\x06b1X\xc74\xc9>b\xfa#\x9a!\x0e\xf69\xa4\x99\xceB\x97\xb3I\xf2\xe3\xbd\x1d\x85\xbf\xc8\xae\x8b\x08RD*@\x17c,\xd9\x91ye}H\xaa\x1b\xc32\x85\xe7Hw\x1aJ\x8a\x80"\xa0\x08(\x02\x8a\xc0\x8a@\x00}\xb13\x07\xeb\xf4]S\x98x\xeck\x87\xcc\x87\xc3\x00|\xfe6o\xad\x90\x0f\xfc\xd2\x01\xf9\xf0\xaf\x1c\x94\xf3\x98`{\xe3\xc5^y\x1d\xcb\x85\x8f>\xd4*\xe3\x98\x10\x9e\x1bU\xb8\x04\xfd1\x83q)%!@\x89\xc7+\xf5P\n"H\x9c\xaa\xa5\x9e\xe1\x83.\xc3\xe1\xb5\x89*\xfc"\xb6?\x06?\x01\xe6\x8c:%\x9a\xdf\x05\xff,\x98\xf7\xce\xd7\x1f\xb9\xe33?\x82\xba\xb5|\xed\x0e\xf1\x95\x87$F\xf9\xdd;\xc1\x8e\x1b\x8b\x9e \x0b\xc7\xc7&\xa5\xfe\x13\xd7\xc9\xc4o\xffH\xa6\x87\xdc:$\xbfS\xc4\x8d8\xfc\x1c\x98\xcb\xaa\xff\x11\xcc\x17\xb8\x00\x92\x1fr\xc9\x01\xcd\x7f\x809HT\x93\xc8\x1a\x01~\xa4\xfc0\xf7\x83\xd3\x1f\xe9,\x90\xbdY\xee\x8a\xf3\xebwT\xe1\xed\x84\xd94_Q\xbe\xbe\xc5@\xa8i\x00\n\xc0\xbe\xb6\xfcY\x00\x1a@\x89(\xa8\xbc:(\xd3\xb4l\xd1q\x92\x03H\x01\x7fiu\x1a\x1d\x8d\xa3C/\x97\xa6\xcd\xe5\x18,\x8f\x9a\x1e\xc9}4K\x97\x84\xcf\x8cM\xeei,\xb3\xa3\xcf1\xa5\xd5\x85\x00\x1b\xa6 \x9a\xbcK\x90A\xfe\xec\xa5+\xd7\x8d\x1f5\x05\x0eK\x89\x97(\xb13\xabX\xe3)jir\xdd5\'\xb2\xc7\x8e\xdd7\xd9\xbbep7\xa6\x88\xf6\xbc=7\xb7,\xbc\x9fKr\x19\t7\x04\x0c\x1a\\\xa5\x1e,\xbb\x8cb\x8fQs\xb9L\x97\x16{\xc6\xcf\x1e\xae7\x16|\xf8(\xa8\x9c\xe3\xfd\xd6b\x8f>\xf7\xe8\'\x93\xcb\xa0YoK\xa6\x8cs\x1a>{h-\xc2\x8b\xf9\xb3\xb2\x98Q\xb9Ib}<\xd53\xe7\x96\xf8\x89\x0e\xc3\x02\x10\xff\x0c\x14K\\\x9b\xea\x9fg 0\x86#A\xe9\xbe<\x82~\x0c\x98\x83\xd2,V\xaaY%_\xc7g\x07L\xaa\xeb\xc3R\xd3\x14\x96\xc1\xae\xe8\x8a\x93\xb5\x93+\xa4G\x8a\x80"\xa0\x08(\x02k\x19\x01#\x8a\xb8\xf2\xc8\xdc\xa8\xc2\\\xc1\xb6e_\x8d\xdc\xf1!D\x15\xfe\xf5\xc3\xd2\xfaz\xbf<\xff/m\x08&\xd2!\x1d\xe7G\x92\xa2\n\xb3\x93\xe7$\x99!\xc8A^Qh-\xe3\xeb\xd6\xdd+\xe9Q\\\xb1\\\x89\xfd\xb7\xbb\xfc+\xd8\xb6\x83\xbf\x07\xa6\x85\xce/\x81)\x85Y\xa9\x11\xbb\x1e\x02\xc0~\xac2i\xf9\xa5;\xc5\x07Y6>\xb2\x02\x95\x7f\xac\x0e\xde\x99\x19\xac2\xf2a"\xbd\xe9s7K\xfb\xef=\x8aZ/(\xd1Y\t\xf4wp\xd7c`\xfa\x7fq\xa52\xec\x159\xa9\x02\xb08\x1f\x90\xdbb\xc9v\xb7x\x8b\x7fp)\x96\xdf\xfa\t\xda\x0c\xa7\xab\x93\x981)&\x85<\xbf+ZO\xf4r\xc6\x07d|5\xe5z\x99\x9d;3\x11\x08\xfb\xa4\x02V3\xb1\xc9\xdc\x0e\x00S|\x0ck\xfe2>\x86\x18"\x01W\xd5U\x19e4\x15\x80i5\x97V\x01\xd0\x8a\xfbz\xf1\xbe0"\xa8.\x03^=\xef\x15[>~\xfb\xf4E\xc7\xe5\xbfThQ\xe1E\xb2\xcf\xde\xf4\xc3\xf8\xe1\xb6\x10\x12\x9d\xc9\x1e?n1\x12\xef+\x1b.S\x16\x16\xce\xbb\xcf\xe3\x05\x88\nkZ\xecq\xf9-\xa3\xe3R\x99\xc7e\xced\xe3{\x0f[\xfa\xda\xb3\xd1rY7ba\xfd\xec\xd9-q`\xdeh\xc3\x1c\xcb=\x1cSq\xca\xf3V,\xa3\x15\x18\xcbk\x1az[p\x1c\xaf\x06b\x9d\xca2\x9f\x17\x8b\x8e`e\x0b\xb1\xb5\n\xcf\x1c`B\xf8C\xe5\xa5\xd2\xdb1.Sl\x8f\x00\xbe\xedss\x90\xfc\x92I\xd4\xc0\xafm\x04\xd1\x95\xa9|d\xb4E%E@\x11P\x04\x14\x01E`\xc5#\x80\xee\xde\x19\xaf:\xfd\xda\x18\xdc\x91\x8c\x0eLb\x9c\xe8\x93 \xc6s\xdb\x0e\xd4\xcb\xde\x9ba\xc0\x86n\xf7\xec+\xfd\xf2\xdaO;\xe5\xc5\x87;\x10P\x04\xce\x05\xd1\xcd\xd3w\xa0%\x8d*l\x91\x98\xb7\xa5\x90h\x05E\x02F3\x0b\x12uD\x9b\xc0_\xe2\x81K\x0b\x08\x18\xbc\x15\xcb~k\xca\xa4\xf9+\xb7\x8b/H\xe5\x1f\x8c\x06\x8bI\xd1`K\x9f\xea\x16>\xa3\xe3\xb0\xfc\x0b\xed\xa8\x97\xeaw\xed\x93\xc1\x07^[\xe8NbA\xacv\x83\x7f\rL\x85\xe9\x02\xf8\xe0l\x11\x92*\x00\x8b\xf0\xa1\xa0H\xf6C\xdc\xe1\x16o\xb6\x05\xcb\xb2\xbc\x9b\x10)p\x8a\x110\x8b\xec\x15-\xc52\xb5\x1e\xd7\x02\x90\xe6\xdb9\xab\xf0\x1c\xbc\xca\xabBR^\x15\x90\x18\x15\x0b\xbaTj\x0e:\x05:\xc4\xdbMG\xfc\xbboh\x90c\x8f\xb4\x1b\xf3\xfd\xd4sv\xdf\x0c\x06w\xe0\xfb\xb2\xad\n\x81\x07\xe8\x8a\xa2\xc8^\xe8\xd4+\xa4W&!\x80\xe7HE\x17\x82)H9\x94a\x03\x98Ad\xf7\xea\x11\xe2\x92.\xcf\xe4\xc0\xb6\xaelf\x13\xfb\xcc\x83\x89\xb9\xef\x97\xb7\x01\xb2\xe7\xed9\xeaw\xbcD+\xbc\x08\xcaK\x7f{\x0c\xa0\x01\x1f\xa3F\xd1g\xfc\xed\xc1j\x8f[\xb49F\xe1D\xe5\x0c\x83\x88\xf0\x1e\xee3\x7f*\xf9\x12\x96{H\x9c\n\xaaA\xf82\xb4\x94(#\xae\xf7\x92=4[\xfcx\xe7s\xbd\xd7\xad\xaa}\x82\x0f@h)\x99.\xb9\xcfm|t\xda\xb1\x80O\xf7\xfe%\xae\xf7\xfbK\xa5\x03\xce\xcaI~\x14/\xc6f)\xcfd,\xf9\x91\xc7\xfam\x15F\xf1h_\xd1\x88I\xc2\xc3G\xd6\xcb-\xef\xd9b\xce\x9d>\xda-\'\x9f\xe9\x91\x97\x1e\xeb\x90\xcb\xa7\x07\x8d\x0c0M\x99\x0cD?\xe4L+\x8e\xe3\xb4\xc6#\xab\x1f\xf7\x84$\xbdTU)\x8bt\x7f\xe7\xa8\x047\xd5H\xe4\xf0z\t\xc0\'5\xcf\xcd`B?>\x0e\xbf\xcb\x98\xe46\xe2\xb8\xf3\xd0\x96J\xae8\xfe\xceW\x0b\xe5g\x1d\x1a?q\xad\xb4\xfd\xee\xc3\x90\xdb\xf1\xce\x10\x15\xe7\xd5a9yD\x89\x0f\x03\x00\xf9-\xf0\xbb\xdd\xe3\xe4\xabp\xb2\xd8(s)\xba\xd8j\xb2z\xca\xc3\x97\x86\xc3T\xaeqjv\xab\xc5s\x19\x93}\x0b\x19\xfd6\x84\xc8\x90\xe3\x98\x19)\x1a\xc2G\xe4\x875\xcc8"3\x8e\x0ex\x83\x0e\xe5\xa7\x84T\xfeE\xb0\xcc\xae\xbf#\xaaK\xa5\xf2\x03\xf1\x92\xa9\xb2\xfd\x9f\x9c\x88\xcb\x86\x9dU0\xe1/5\xd6\x80\xf3\'U\x96LF\xe4\x14\x06\xdbo\xde\xc4\xde;\x85\x8b\xf5\x92\x15\x83\x00-\x00\xa9\xfc\xa3\x92\xcdK\x89V\x10;v?\xd1\tc\'\xb1\x8f\x9b\xec\xbe\x95\xe6\x16R\xc8\xd0b\xcfX\xee\xa1\xa9E`$\xb3$\x97\xcbs1\x93i\x8e\xe1W\xcd,5\xa52\xce\x1b)\x97\x96{T\xe2Y\xab=\x1b-\x97K\xd2\xbd\x9a\x1f[\xc6\x84\xf6\x11\xe5\xb2\xaf\xaa\xd9\xe2g\x91\xf9To\xb5u\x7f\x0e\x02l,2P\x00\xdaW\x82\x93\x0fv\x7fN\xca\x19\x1f\x9a\xc1\x03\xde\x83\xf3X\x82D\x9aI<\xfb\x8c\x93L\xeb\xc6\xe6\xadT\x00\xa2V\xf6\xfdJ\xebn\xbdX\x11P\x04\x14\x01E@\x11X\xd9\x08x\xad\x03\xa3\x08\x14\x17E \x87\xc1\x9eq\x04\x12)\x95}\xb76\xcb\xe1;7\xc8}_\xb9J\xfa\xe0\xaa\xe3\xe5\xc7:\xe5\xb9\x1f\\2}6\xddvP\xec\xb4D\xbf\x81\xa6O\xa7\x02+\xd7\xc2\x82\xcdd\x95mcX\x95\x15{\xee\xa2\x8c\x82\xfb\xff\xf1%\tl\xa8\x96\xca\xeb6JhO\xb3\xf8[*\xc4\x8f@eT\x04\xc6\xe1[O\xa6\x08\xaa\x0bx\xb1+\x04\xf1.\xcc\x8cLHps\x8dT\xbf\x13K\x81\x1f\xe4R`\nxI/\x06%y\xeam\xde\x06~\x1f\xf8\xef\xc0\x94\xc6\x92.\xc2qQ\xd1\x9c\x11VQ\x95m\xad\x16\xc6\xbeYpj \x8e\x89\xd4\xecp73L\\\xedJ\xf3\x96\n\xf1q]\xbb\xa7\xa1\xcb,\xc1\xdc\xdd\xc5\xaf\x83\x11\x80G\xe0\xd3\x81L\xb2\xcb\x9a\xccA\xae~\xdc:\xd7\xc2W\xd2L\x1c\x1ft\xae\xd2\xd5t2B \x06+/\x9f? \xbb\xafo\x90W~\xd2\x89\x99!<\x93T{Z{\xddI\xf8\xf8\xe0\x0c\x1e[\xb1"z\xa73\x02Do\x9aE\x80\x1f\'\xdb,F\xb7\xa5\t \x15pq\xf4\xad\x89\x8f\x16;\x89\xfd\xd9\xdb\x92\xf6\xa8\xb0c$\xdcD\x94\\\xa4\x05\xeb_\x81\x0b\x00\xe3o\xcfF\xc8\xa5\xe5\x1e#\xea\xb2\xd5\xe5\xbbD)0\xb1\xc596\x96T\xf6\xd1m\x02\r\x94\xcd1\xb6\xcc\xdf*[x\xaf]\xe2\xa0\x96{\x00#\x8fdp\x07\xe0V\x01\xc8g\x90\xe6\xb7\x1f\x85\x0f\\\xf3LsUL\xe4O\x1f\xb6\x8c\\x\xe9\xd4\xa0I\x95Q\t\x0bI\xeb\xb6\xd1\xb2\x1f\x16\x80\x89\x97\xb2\x90\xb9k^\x8a\x80"\xa0\x08(\x02\x8a@\xf1 \xe0\xe8\x95 \xe0\xff4\x14N\x03P\xfa\x91\x02!\x9f\xd4`\xc2\xf7\xeeO\xee\x94w|v\x97\\~}H^\x7f\xbeW\xce\x1cs\xa2\ns\x1c\xca\xb1\xc84\xd59 \x8e\x99)\x8e\x1ak\xc1\xc2v\xebN\x01V\xca/\xe5`\xb3\xec\x17 \xe1\xffT\xeb\xa0\xf4\x81E^\x95 \x94\x81\xa1-\xb5\x12\xbe\xaaY\xca\xf66I\t&\xf7\r\x94X\x11c\x14\x82\x94\xbb\xcd\xfdV\xa8.\xb2J\xa3^\x8cf\\\xf5\x96\x9dPp\x9e\x97X\xf7\xd8l]g\x8b\xca\x1a\x90\xfe\x03\xf8\x010_8\x9e3U\xc5\xb6\xe8H\x15\x80E\xf7H\xcc\x0b\xc3RQ\xf9\x97\x13\x05\xa0}\x03\x9b\x10y\x95\xe3T\x8ea\x8bE\xe9\xce\xe8\x89\xfe\x80\xdf\xcc\xd2\x8c\xc2\n0_duF\xf5\xeb\xcb%\xc6\xc1\xbc\xd2\xb2"@\x93\xeaRt\xc4{nh4\n@3nMu o\x9b\xd3^\xf8\x87\xa3\xaf\xb42L\xbe\x18\xc7\xfb\xcbZ%\xcd(\xbb\xcb\xab\x03B\xdf\x86\xfan\x16\xf0\x01hV\x8a\x80"\xa0\x08(\x02E\x8f\x00\xc7\xbd\xa5\xee\xa0\x97s\xc9c#1\xe3#\x90\x86\x07UX\xe9q\xc7\x87\xb6\xca\x9b\xef\xdf*\x1f\xfe7\x07\xa5\xf3\xc2\x88\xbc\xf0\xc3V\x04\x12i3}:\x97\x05[rDC\xf3k\x84\x87\\\xc8\x0f6\xed\x15\xbf%L\x16+\x03\x11~\xb8\xc5\x04\xfa$\x14\x81\xe4\xe1\x9f\x9e7\xeeR\xc2{\x1a%r\xdd&\t\xc1\xaa\xce\xdfP.>\xc8\xfa\x0c\x1a\x12\xa7?w\xca\xe8L\x8b\x02\x0ee\xf6b!\x18\xad\x94DJ\xa5\xe1C\xd7H\xc77\x9f4\xf5\x9aS4\x8e\x0c(\x0e\xee\x07\x7f\x1e\xfc\xfb`\n\xaa\x9e\x01\x0c\x8e\x8a\x88T\x01XD\x0f\xc3-\x8a}\xe3\xe9\xdc\x8c\xe1\xb8g[\x9fL\xcb\xea\xbe\x96\xcd\x9ba\x01\x88\xe5\xb6T\xbe\x14\x8b\x06\x90\x95\xf3c07\xd2?)SQ\xd7kz\x1eZUk]V\xb7\xae\x0c\xce\xd9\xa7\x8b\xa5\xfa\x99>\xd1Uq\xdf\x0c\x1a\xd4-\x07\xf9\x9a\xa3\xd5\xc4\xf29;\xa0M\xabr\\\x06|S3\xe6Z\xf0\xee\xa8\xf5UZ\xd0\x15\xed\xc5\x94\xd6\xc6\xa0\x98;\x04#h\n\x00\xeb+\x1c%\x1f\x03lpY0}\xed\xd1r\x8f\x8a@.%\xa0\xc90\x05\x0f.\xc5e\xdbF\x8b=s\x8c},5\xc7\xcb\xe5\\\x83]#\x90\xb0\x855\xad,\xf2a\xdb\xa8\xefM\xd1\xbe\n\x0b\x16\x8c3XV\x01\x88G\x9d:9\x17GG\x10\x04d\x1a/\x00\xdf\x81\xb4\xee_8\'Nb\x85\x10\x8d\xfc\xfc+tX\xe9\xc8\xady\xe8\xc2\xe6g\xee6\x98\xcd\x9b!&`p\x13\x9f\xce\xdf\x04\xda\xfc\xcc\xf5\x8c"\xa0\x08(\x02\x8a\x80"\xb0\xc2\x10@\xbf\xef\xe8\x95(\xfc\x89D\xa1x\x1aGda\x8a\x9d\xf4\x1b\xb8~\'\x02\x89\x1c>(\x1f\xfc\xe5\x83r\xf1\xe4\x80\x9c~\xae\x1b\x91\x85\xbb\xe5\xd8\xc3\xed\x10-!0P\xbetI\xa3\n[$\xe6l\rD\xf8\xe1\x96r\x16e\x15\x12\xb0\xa3\xfea\xfc\xb5N\xc3<\x15\xdaZ\'\xa1]\r\x12\xd9\xd7l"\xee\xf2\x06#?E\xa7$\x8eU\r\x06o>\x1c\xe7q\xf1\x96\xe5!\xd4!>4.\xa1\xfd\xb0b<\xb8N\xc6_nw^$\xcf\xfb\x80\x82\xb1\xc6\xe4/\x83\xbf\x03\xee\x05\xb3\xe4\x1c}\x14\x1d\xa9\x02\xb0\xe8\x1eI\xa2@\xd4\x8c\xf0\xab\xa1V,\'\xcf\xa9q#\x14\x80\x89\xe4\x8bd\x07\x9fE\x00\x86<\xa3h\x80IfL\x93\xc7\xa2\xd5\xaf\x8f \x020\xbfO\xa5\xe5D\x00F\xf5\x12\x1d\x8eI\xf3\xe6r\tA\xa93\x81\x19\xb9\xb44\x80\xee\xe0WNa\x19\xf0\x91MX):\xc7\x8ak9+\xa7yg\x87\x00\x1b)N\x06\xec\xad\x17\xb9\xb6\x05\r\x04\x9aAZ\xed\x19\xcb=|\xbbT\xf2\xc1\xd13\xd6\x0e\xcc\xe6\xe3\xca\x17IR\x82m\xec\xcc\x16?\xae\xd1\xd8\xecM\xba\xb7\xe2\x10\xe0s\xa6(\x85%\xb7\x862\xd0\xb4\x8d\xc3\xea\x93N \x8c\xdb\x01#\xab9Ie\xfc\x8bW2T^*\xe7^u\xfc\xff\xa5\xd5\x8ee\x9c\xe9\xec\x8d\x8d\x9b":\xa15\x0b\x87\xee)\x02\x8a\x80"\xa0\x08(\x02)!\xe0\xf5\x1b\x18\xc3\x841\xfd\x93s\x190\xa3\n7n,\x97\xad\x07j\xe5\xc8Gv\xc8\x08V\x1bQ\x11\xf8\xec\xf7/\xcb\x05\xf8\xfa\xedC\xd0\xcayQ\x85\xa9$B\xae68WJ\x05X\xed\x17q\xb8\xed\x95\xd3\x8c\xac\x8e\x1f#\xcb\xcd\xc8\xc4\xf9>\xc3C\x0f\x9d\x96R\xb8\xfd)\xbff\x83\x84\xf76K\xa0\xb1\\\xfc\xcd\x15\xb8\x0c\x98\x0eOH\x9c+\x818\xf9\xcb\xf48\xfe[\x0e\xeb@\xe4=\x03c\x93\xda{\xf79\n@*\xffX\x0f\x96\xc9!k\xf1\xb7\x13\x87\x9f\x02\x7f\x1d\\\xb4#\x8f\x9c(\x96PA\xa5\xdc!`_\xa5u\xb9H\x92\xdf\t\xad\xabH\x95\rA\x99b\x14J\xbe\xb0ED\xb4J\x1c\xeau\xac\x17J\xb1\xc4\xcf\xdb\xa8\xe6\xba\x98uX\x02L_M\x1a8"\xd7\xc8\xa6\x97\x1e\xfdj\xd0Io\x0b\x9c\xd7\xaf\x87\xff\xaas/\xf7\x9bA,u;)\x11\xc7\xff4\xac>\x07\xab\x1b.\xe9\xa6y?_\xf3"{\xb7S\xaa\x8b^4\x1f\x01>K\xb6Ut\x18\xec}\xae|\xbe\x9c\r\xe4V-\xf7\xe6\xe3\xb6\x16\xceP\x08\xe4\x12oK|\x17\x9c.\xce\x9eYpk/\x99\x84\x00\x87\xb8nx\x85R\xbcq\xc1\xd4fO2\xaa9-\xcc[]\xff\x7f|=\xf3\xe2\xc7v6K\xb3g\xf3i\xde\x84%4\x10\x86\xe3h<\xcd`f\xceuz\xa8\x08(\x02\x8a\x80"\xa0\x08(\x02K \x80\xbe\x1b\xffA\xce\xef\x18\x0cSF\xa1\x0c,\xc5\x185X\xe6\x93\x1b\xde\xb6Q\xde\xf4\xc1m\xe6\xdc\x1b\xf0\x19x\x8aQ\x85\x1fo\x97sP\x08R\xc75\x9dPt\x95\xe0\x1e\x8c\xbd\xb1\x12%qj\x89\xac\xd7\xcc\x9f\x8d \x86\x1fn)\x82Q\x91\xc7q\x1f\x80\x9aF \x91\xa1\x87\xcf\x18\xf6!pKhG\xbdQ\x06F\xf6\xaf\x93\xd2&(\x03q\x8dY\xcd\x07\x03\x01Z\x07R\xb7aVv\x9bt\x9cg\x96W\x1c)g\x8dN\x9aH\xc7Uo\xde!C\x8f\xbf\xe1\xd4\xc1\xd4)\x91\xb3-\xc8\xd7p\xe6\xcf\xc0\x9c\x19\xce\x8d\xb0\x99\xc8"7;\xaa\x00\xcc\r\x8e\xb9L\xc5\xbeJ\x1br\x99(\x15\x81\xe5\xd5A\x89M:K-s\x99vVi\xf1\xdbG\x8d\xfb;GL2\xa9\xea\x7f2\xcd\xb3\xa1%\x0c\x87\xb0\x18(e\x9a\x80\xde\x973\x04\xe2x\xf0T\xf8n;Tg\x14\x80\x1c\xd7\xa7L\xf6\xda\xcb\xa3"\xed\xf0\xbdU\x03\xffo\x880\xa5\x8a\xdd\x94\x11\\\x19\x17\xaa\x92oe<\xa7B\x96\x92=\xa4\xb5\x00L\'_\xdb\xb3\xe2\x1e3)F\x91,Kb\x9b\x15\x84/\xd3\xde\xd6q\xe9k\x87ch\x92m\x9b\x9c\xa3\xbc\xff6n\xa9D;j\xe4\xe7\xbc\xe7\xa5\x19(\x02\x8a\x80"\xa0\x08(\x02k\x01\x01\xafu`t,.\xd1\xd1q\x19@Ta\x06\xae\xdc}]\x83\x1c\xb8\xbdE\xde\xf5\x85\xdd8\x17\x95W\x9e`T\xe1\xcbr\xf68,\xda\xc6\xa7e\x9ak\xf7\\2\x06kT\x1eA6\xb0\xee\xa8\xec\xdf\xd6\xf4\x962\x99\xf5\x1bH \x8cL\xe6\x08fq\x18v\x8c\xbf\xd6e\xb8\xff\x1f_6\xbe\x02\xcbo\xd8,eX.LK\xc1@\x0b\\\x9fp|`\x95\x81\xf4\x03O\x80\x8d\xfcE\xa0mz\xb8&\x97\x03~>G\xf8\r\xaf|\xdbn\x19\xfa\xc9Y\xe4\xe7\x11,Y\x07\xa7\x16,\x05\x8d\xb8\xbe\x00\xfe\x1d0g\xaca\xd1P\\\xa4\n\xc0\xe2z\x1e,\x8dy}\xb1]\xef\x16-\xbba\n[\x1eh\xcd#UA\xa9\xa0\x02\x90f\xb44\x1d(\x122\xd6\x13\xb0\\\xe8mC@\x07\x92\xad\xbds\x94\x93_\x17\x02\t!p@),G\xa6&`UT<\x10\xe4\xa4\x8e+1\x91\x124\x89cX\x8ew\xd5\x8d\x8d\xf2\xf0_\xbd\x91\x9e\xd9<\xa7\xd5\xf8`i2\xd8\x0e%\xe0:\xf8\x89s\xc7\xdf+\x11\x0b-\xb3"\xa0\x08\xa4\x80\x00{C\n\\A\x88.f\xe6x\x9e\xf0\x95B"\x98+@\xbb\x13*\x0b\xc0"\x1e\xc9d\xd1\x17\xcc\xc0\xd4/\x84`4\xadg\x86\xa5\xbf\xcb\xe9\xc3\n%\xe0[+\xc3\xdafD\xbb\xa6\xe4\x9c\x19\x14)\xe1\xa5\x17)\x02\x8a\x80"\xa0\x08(\x02k\x15\x01GNp\x84\x05\xf6\xbdT\x04r\xbc\xca\xa8\xc2\xe55!\xb9\xf3\xc3\xdb\xe4\xee\x9f\xdd\x85\xc0!Cr\xea\x05Z\x07v\xcb\xd1\x1f\xb5\xca\xe8\xe0\x14\x87\xe0N\x14a\x80Gk}\x8e?g\xd4:p\xfe\xabdd\x18W\x901ZS\\By\x0f\xffc=\xa32\xf8\xfd\x13`H;\xb4\x0e\xdc\xde \x81\x9a\x08\xac\xf1\xaa%\x80`"\xc1&(\x04\xcb\x82\xb0\x12t\x92%\xe6&\x943\x0c~\xcc\xf2a\x8e\x15y\x8e2$9\x0b\xc1/\x0e\xa5#\x83\x97T\xdf\xb3[\x06\x7fp\ni!\xc1dE s"\x7f\x1a\xfc-0|U\x19\xad\x03\nQ<\xa4\n\xc0\xe2y\x16sKb\x97\x00\xf3U\xcd\x98x3\xdf\xc2HU@"\x95~\x99\x8c\x16\x97\x05 \xbfA6\xa6\xdd\x97\xa0\xc4q\xcbjvr\xfa\xe3\xa0\xd0\xb0\xc1\x8d\x82lZ\x86\x9cf\xa0\x89e\x84\x80O\xa6\xb0\x1co\xd75\r\x19\xddm\x1aq\xbe\xdcg\xb0\x0c\x98\xbe\xe2\xb2\xfaR2+\x82\xde\xa5\x08(\x02\x85D\x00\x1f9\x05-,\xc91\xcce\xe2\x89\x86 \xf5r0\x10H\xb8\x1c\xc1d\xb2%\xf4]t\x1c\xdeMKdP\t\x04\xc1B\xf8\xff1\x93Z\xae\xc0\xc9\x89\xbdI\xe3\xd6"\xdb\xca\xe8\xfd\x8a\x80"\xa0\x08(\x02\x8a\x80"pE\x04 \x86\x94\xd2\xfa\x0cF\x0c4:\x8b\xc2\x87ytx\x12c\xed\x123\xd6\xbe\xfd}[\xe4\xb6\xfb\xb6\xc8G~\xedj\xe9k\x1b\x97\x17\x1e\xba\x0ce`\xbb\xb4\xbd1\xe8\xf8\xa0\xf7\xa8\x81(3\x18\xc2\xb8T\x87\xa6\x1e\xd4\t\x86\xd7f\x8e0\x19E\x1bt\x06\xb0\x0e\x8c\x9e\xe8\x143\xe5\xfa\xd4\xec=\xfez(\x047\xd4H`c\x15\xb6\xd5\xe2\x87\x82\xd0\x87\xa0\x81\xa5\x95a\xf1Q\xde\xc3\xc3\x8a\xd3R\x90\xcb\x87);R\x862\xcf\x02?\x1cK\x9aG\x81\xe7\x8a\xffW$\\73\x02+\xc0\xdb\xb7\xcb\xf0\xa3o\x08\x15\x82s|?[\x8b\xbf\x9dH\xe7C\xe0o\x82\xdd\x07}\xc5\x94\x0b\xfaGU\x00\x16\x14\xee\x943\xe3\xcbc\xb5"\xd9\xbd4|\x91\xf1n\x97\xd7\xd0\x020$]\xc3#E\xe5\'\x88\x03\x19\xfaI\xe8r\x15\x80\xf9h\x01\xcd`\t\x1fw\xdd:4\x02l@\xd8\xa8,\xf5\x81\xa7\xfc\xa8\xf4\xc2L\x11\xa0\xf2w\x12\x8dqEM@\xd6m\xaf\x92v\xcc\x9c\xa55\x80\xb6\xbd\xe5\t\x04Z\xe2\xec\x0e;d6\xe2J\x8a\x80"\xb0J\x11`\x87\x81\x8f\x1cKp\x0c\x1b\x05`\xfaU\x9d\x84\xc0\xe6c/\x9b%\x19?|(R\xebi7\x020\x9b #Pf\x99\xf0\x92\xb7#S\x0e7\x90_ymH\xa6\x81\x03\xfb9%E@\x11P\x04\x14\x01E@\x11(\x1c\x02^\xeb\xc0\xe8\x18\x96\xae\x0e\x8f\nW8\x05B~i\xdc\x1c\x91\xfb\xbe\xba_>\xf0K\x07\xe4\xd2\x89A9\xf9|\x8f\x9c|\xa6K\x8e\xfe\xb0\r\xfe\xee\xe1\x8d\xd8\x9d\xc8ci\xfd\x08x\x17\xa7^\xcas\xaep\xb5(\xf2\x9c8\xb6\xb3\xcb\x85)\xecP\xde!\xdbs\xd8\x8d\xf5\x8e\x19\x96\x97\xdap\xe4\x10\x15\x7f\x81\xba\x88\x94\x82\xa9 \x0c\xac\x83r\xb0\x85\n\xc2*\x99\xf1\x97\xbaZ9$>\x83\xc9\xdb\x18\xc0\x07\xc79\xa1\xca1%\xc9\xc8U\x10\xb4\xf0?A\xd0#\xc4\'bR\xda\x10\x91\xca#\xbb\x8ce\xe2\x02\x83O{\xc7/\xe0\xbe?\x07{\xa2\x16&RZ\xd6\x1dU\x00.+\xfc\x8bf\xce\xe7b\x15\x80\x8b^\x94\xce\x1fh%\x10\x88\x94\x1a\x8b\xd8\\\x0c|\xd2\xc9\xfbJ\xd7\x96@i\xc3\xc6\xae\xb7\xd5\xb1\xa0\xb8\xd2\xb5\x19\xff\x8d\x9f!\xbe\xe5\xba\x96\x88\x190\xf1\xb3\xb6_f\xc6i\xea\x8d9A \x8e\xd5\xd8~,\xcb\xde\x7f[\xa3Q\x00\xb2#\xb5\xed\xee\x92\x19Xe\xdfY\x0c\xbe9\x03C\x05 :T%E@\x11X\xa5\x08P\x18\xe3w\x0f\xdf\xa1\x863\xac\xe6\xe4x\xdc\x15\xfc\xb2\xeb\r|\xd0\xc0\xd1\xa7\xec\xf9W\x1d\x05\xa03\x9b\x9ca\xa1\xd2\xb9\xcd\xc5\xa1\xbc*\x84\x89\xbd\x00\xac\nP\x0f\xd5\x00\xa6\x83\xa0^\xab\x08(\x02\x8a\x80"\xa0\x08\xe4\x14\x01g\x89\xaf\xd1\x1a\xc94"\n\x8f2\xaa\xf0 \xa2\n\xa3\x7f\xaei)\x93\xb7~|\x87\xdc\xf9\xa1m&\xaa\xf0\xa9g{\xe07\xb0UN\xbf\xd0#\x03\x8c*\x8dQ\x80\xc9$\xdbk:G)\xfd2\x120\'\x9f\xe6\t\x91)\xdd={\x91\xcf\xef,\xf9\xbd\xf0\xea\xa09Y(\xff\x7f\xc6\xf2\x108\x94\xc3z:\x02\x1e\xc7\x12$\x0e\x16\x94\x14\x01E@\x11P\x04\x14\x01E\xa0\x08\x10\x80\x88\x81\xff \xe7w\x1c\xcb\x84\xc7\xa8\x0c\x84\xec\x11\x08\xfb\xe4\xd0\x91ur\xcb{6\xcbH\xff\xa4\x9c9\xda#g\x8e\xf7\xcb\xabOv\xca\xebP\x08\x9a\x15\xb0\x9e\x01q)d\r\x8d*|\x85g\x9aP\x08z\x94\x83F$\xc2\x8f\xf3\x9fF~P\xbf9\x17b\xc1\xb5Lu\x8f\x18\x1e;6k1H\x05\xa0\xbf\xae\xccD\x1df\xa0\x91`3\x14\x84\xeb\xb1\x9c\x18\xd6~v\x92\xd5\xa4\xc0\xb1jtJ|\xd5a\xa9:\xb2S\x06\x1f:\x8d\xc7\x8c\x0c\x92\xc7\xb0\x94V\xf9\xf0?\x03\xfe.\x18\x9a\xc4L$V\xdc\x95\x07R\x05`\x1e@\xcdA\x92\xb5H\xc3:(\xe2+\x9b19\xaf\xbaHE\x03\x96\tq\x99z\xc6)\xe5\xe3\xc68\xac\xbfD\xba.\xe4\xd1\xfa\xcfS\xec:\xfa\x00\xf4\x1c\xeb\xee\xf2#\xc0\x81lt4&\xeb\xb7\xc3\x81+\x88\xcb\xe78\x8e\xf5\xf4{W.$\x1f(_\xf2W\xe1c\xf5z\xf8\x01\x1c\xba\xf2\xe5\xfaWE@\x11X\xe9\x08\xa0\x91(\x85\xe8B+\xc0\x0c)\x8a(}Y\xcf\x13\xa0\x18\xbe`\x89\x8c\x0eL\xc9@\xb7\xb3\xba#\xe5v+\xc3r\xcf\xbd\xcd\xb8\xf6\x80\x15 \x07\x10\xc6\'\xd1\xdc\x0b\xf4X\x11P\x04\x14\x01E@\x11P\x04\x96\x1d\x01oT\xe1\xc9h\x1c\xf6\nQ\x19B\x04aF\x15\xde{s\x93\x1c\xbes\x9d\xbc\xebs\xbb\xa5\xbf3*\xc7\x1fk\x93\x17~\xe8\xf8\r\x1c\xea\x99\xc0\xf8\xdd\x8e\xe6\x9d1R\xc2:0Y\xe1\xb4\xecu,\xaa\x02\x18\xc8\xf0\xe3\xfcO.ZB|\xc4\x8e\xdd\x07\x96\xd3\xf0\xedG\x96\x8b\xc9\x16\x83\xa5\\J\xbc\xb1\x1a\xca@(\x047\xd5\x9a\xe5\xc4\xe3\x84\xae\x01;v\xdf\x88\x84\xf8\xb1\xa2!\xcf\xbb:\x94i,#\x9e>\xd5-Q\xb0\xa5\x92\xa0OJk\xca%\xbc\x156[\xf6\x9eDb\xe6*\x9e\xe5\x92_\xea\xda~\x16\xfc\x18\xd8\x95\xde\xb0\xb7\xcc\xa4\n\xc0e~\x00\x8bd\xcf\xe5\xbf\xee\xfa\xa6E\xaeH\xf1\xb4\xb5H\xa8\x84Ik\x1cK_\x13\xefh\x8a\xf7\xe7\xf52|\x06\xa5pz\xdauy\xc4d\xc35\xf94\xcb\xcd\x07Q\x11X\x05\x05`\x0c\n@\xee+\x15\x0f\x02\xd3x&\x95UA\xd9\xbc\xaf\xdaQ\x00\xa6\xd3<\xdak\xe9C\xb2\x1d\\\x8e&\r3k\xae\xc5}\xf1TRK\xa2\x08(\x02\xb9A\x80\xdf<\xfa\r\xc3\x19\xa6\xc8%\xc0>\xf67Yt7\xbc7XV*\xe7_qf\x8a\x93\'~3,X\x8a\xb7\xd9b\xd7\xc2\xa7\x10\xfb4%E@\x11P\x04\x14\x01E@\x11X\x81\x08@\x9c\xa1\xe2\xcfR"\xaa\xf0LT\x82\xa1R9|\xd7:\xb9\xf6\xad\xeb\xe5C\xff\xfa \x14\x82\xe3\xf2\xe2#m\xf2<|\x07\xb6\x9e\x19\x92)LfzUJ4\xa0\xf0A@\x88C@\xc9F\xbe\xb1eYS[#X\xe1\xc7\nX\xde\xca\x1b\xbd\x81\xab<\xe0\xa3\xc2R\xe2\x19\xc8^\xb1\xaea\x19\x01\'h\xfe\xbd\xf6\xc1\xd2\x0f\xe0\xbf\x07_\x063\xa1\xf9W\xe2d!I\x15\x80\x85D;\xf5\xbc*R\xbf4\xb5+\xab\xeah\x01\x88\xf7\xcd\xbe\x8a\xa9\xdd\x96\xd7\xab\xf8\xf6\x07\xc3\xb0\x00\xbc\xe8,\x01f\xd4\xa4\x19\xae\x90\xcf!\x95`TF\xbfL\x955a\xa9@\xb4\xc4\xa9)4\x96\\w\xaaT4\x08p\xe0<62)\xfbni\x92\xa7\xbfw\tA@\xd2h\x17M\x0f\x87\x04\x18\x04\xa4\x1d\x8a\xe4\x830\x9e\x1d\xe7L\x9a>\xe3\xa2y\xc0Z\x10E \x97\x08p\xba\x1c\xbe\\\x8d\x15`\x9a\xe9Z%\xdd\x04\x15\x80\xd9N\xb1\xa1\x99\n\xa1\xff:\xffJ\x9f)EZ\x96\xcbi\x96{\xde\xe5\xaed_\xd7\x0c\x05 \x02\x80\xb0^J\x8a\x80"\xa0\x08(\x02\x8a\x80"\xb0\xb2\x11HX\x07\xa2\x1aS\xe8\xdf\xfb\xda\xc6\xcc\xb0\x95Q\x85\xeb\xd6\x95a\x99\xf0^y\xcf\x97\xae\x926(\x00\x19@\xe4\xc4S=r\xec\xc7\xadXM\x15\x83\x8f{,cu\xab\xef\xe3j*\xc8)\xdeH\xc3+\x1b\x99e,\xbd\x19\x96\xbacS\x0b0\x05/+{\x19\xa0\x17,\x1f\xaf\xe0,-\xfd\\\xfd,\xf8\xb7\xc1\x1c\xa0\xdaT\xb0\xbb<\xa4\n\xc0\xe5\xc1}\xb1\\\xed\xab\xe48Ds4\xc4\xf6\xdcb\xf7\xa4t>R\t\x05`\xca\xe1USJ2\xeb\x8b\xccW\x81 \x10}\xedX7\x9fg*\xaf\r\xc0\x020h\x02\x8e\xe8`)\xcf`\xa7\x9bL\xa2R\xccR\xeb@\x8bH^\xb7\\oB\x89\xf6\x00\xf8\x06\xf0\xc3`\xea\xdfr\xbc\xe6\x11)\xa6A\xaa\x00L\x03\xac\x02^j\x97\x00\xf3kMkx\xb3X\x19C\x95\x180\xa5\xaaPY,\x91\x1c\x9egC\x14\x0c\x8b\x0c\xf7N\xc9H\xdf\x94Iy\xb6i\xcaaF\xfc\xe4@\x8d\xeb\xcb\xa1\x00\xcd\x97\x87A\'\x0f\xfd\xcd\x1c\x818\x9aA?\x9a\xc8\xfd\xb75\xc9\x13\xffp^J\xd8Y\xa5\x9c\x9c{\xe5Itr\x13H\x88\xc1\x01\x8a\xcc\xda5\xe5\xaa\xe8\x85\x8a\xc0ZA\xc0\xb4\xcd\xf8\xe1\xe7\xcb^\x8e3\x01\xdcB\x90\x95pP\xa4\x0c\xe2\t\xddV\xf4A\xc1\xd6\x0e\x1f+\xbd\xd8\x9e\x81\xbf=\x06\xfc\xb9\x84\xe31\xa7\xdfH\xab_c\xfaHrr,ff\xc3\xdd\x96\x03\'\xd3#\xde\x17B\xf9.\xc2\xff\xdf\x04\x82\x189\x94ij\xe9\xe5\xed\xbd\xba\xa6)\x02}(\xf3u\x06\x04\xde\xbf\xe9\xbe"\xa0\x08(\x02\x8a\x80"\xa0\x08\xacN\x04|\x94\x99\xdc\xae?f\xa2\n\xc7d\xa8oB|p\x91\xb2yo\x8d\xec\xbe\xaeA\xde\xf1\xe9]f\xe5\xdb\xd9\xe3}\xf2\xd4?_\x842\xb0\xdf\x18\xc2\xd8\xe0\x98D\x86\x86\x81\x1aU8\xef\xef\x08\xa7\x88\xa1\x88\x91\xfa\xbc\xe7\x94b\x06\xaa\x00L\x11\xa8\x02]\xc6\xe1\t)\xe7\x16\x80\xe1\n\xbf\x89\x86\xebZ\x12;\xb9,\xe3/\x15\x80~Xv\x0c\xf7\x8f\x19sfS\x14\xcf\xecD\xae\x8afg<\x1a7W\x1a\xd3ik\x01\x9d\xab\xf45\x9d\xdc 0\xc3el\xa5\xa5\xb2\xeb\xfaF\xa3\x00L+U\xef\xb8\xfb\xe2\x90\xc8\xb6j\x18XC\x11X,/{Z\x95\xd1\x8b\x15\x81U\x8a\x00\x15~s-\xfbB\x90\x87\xa8\xf97\x8a9^\x80\x1d\x06\xf3y\x03\x91u/bI\x7f+\x14}t\x11\xd1\xe7D\xc8\xcb\x16\x19\x93\r\x12\x99\x18\x9f\xce\xaey@Q\x03\xe8\xbf:/9\xcb\x7f9\x9b\xee\x15\xa8\xb3-\xe7\x15\xef\xb7\x95\xc0E5\x8d!\x89\xc3\x02P\x9b\xba+"\xa6\x7fT\x04\x14\x01E@\x11P\x04V/\x02F\x178\xab\x10\x1c\xc2\xc4\xe9\x10\x16E\x95\x86|\x12\x8a\x04\xe4\xd0\x91\xf5r\xf3{\xb6\xc8H\xef\x84\x9c:\xda\x8b\xc8\xc2]r\xfc\x91\x0e\xb9|z\xd0,\x07\x9eN\x8c\xbfK\xa4\x14\x9a\xa18&\x16\x13\xa7V/j\x85\xaa\x19G\xa9\xd4\xb7A\xa0\x95\xb3\xee\xbe\xab\xba\xfd\xdf\xec\xbd\t\x80\x1c\xd9U%zk\xc9\xca\xdaUU*I\xa5}i\xa9%\xb5zq\xb7\xecv\xafn\x83\rmh\xdb\x8d\rf\x8cg\xd8>\xfe3`\x03\xfe\xf0a\x18\x7f`\xe03\x0b\xf0a\x18\xf6a\x18\xfe\x1f3\xc0\xcc\xf0=f\x8c\x01\x83\x97n\xbb\xd5m\xf7.\xb5Z\xad}\xa9*IU\xaa}\xdf\xd79\xe7F\xbcT*+S\x95[\xe4z\xaf\xf42"\xb3"^\xbc8\xf1\xe2\xbd\xfb\xce\xbb\xef^|\xcb\x93\x18\x01\x98\'\xe0\xd7\xb9l\xbd\xff\xf7hjc\x9dS\xe2\xfc9j\xa0\x10\xc2\x8c\xc0\x02\xfc\x07\x14\x8cp\x00\x85\x86ir\xd4_\xfe\x8b\x82ev\xb3\xf1\xef\xcc5`\x9bvb\xa9\x14\x9d\xa5\xc7?\xcc~\xcd7\x02h\n\x17f\x17e\xfb\x01\xcf\xf8\x95\xd6\x9a$k\xdd\xf3[\xb7x\xae\xae\xbf\x85\x1e\xef.\x04\x02\x99\\X\xf7\x14;\xc0\x100\x04\x02@@\xbb\x19|\xb0A\xe7{Iv\x8a\xdbx\x96}$\xf8h\xe1\xe7,\xfb\xba@\xfa\xcd\'XK\xeb\xad}\xf1;\nd\x9eA\x87\xc1%\xc0n\xe6<\x1d\x04\x18\xb0jyiE\xbaO{\x11\x80\xd3\xc9#\xdds\\S\x17\xc2\x92\xe8\xaa\x9aJ\x04\x01I\x80W\xba\x17\xb0\xf3\x0c\x01C\xc0\x100\x04\x0c\x01C\xa0h\x11\xa8\xe2J(\x7f\xe1\xe9\x1cV<\xcc\xcd,\xc8\xf8\xd0\xac\x8e\xbb\xef~t\x13\x08\xc1-\xf2\xf4\'\x0fK\x7f\xf7\x8c\xbc\xfe\xa5kr\xf2X\x9f\xf4]\x9e@ \x91e\xe867o\x9b~\x03\xa9\xc2\xe9\n\xba\x0ct\xae\x9b9\x96\xe5\x1e\xb5b>\x8d\xd7\x90\xce"E!\xeci\xc9\xf8\x8d\xe8\xba\x84\xdd\xe0\xc5\x08\xc0\xe01N\xe7\nX\xff\x94\xb9\xb8\x81\x02\xad\x13*0x*\xb4\x05\xb0U %\'\x86<\xffI\xd5(\xe3\x12\x97{\x05$\x9bw6\xca\x02\x07\x96f*\x11\x10\xc2\x99e[\x85\xe72;\xb5,\xdb\xf66\xcb\xa6\xed\r2\xd83\xed\xf9\x01L\xb6N\x90\x1c\xe0R\xb8\xf3X\x06\\\xc5z\xc4\xdaob\x08\x18\x02\x81#@\xd5&\x08\xcb>\xfa\xff\x8b\xa8C\xd8I%:x\xa2\x9b\x86"KO,\x8b\x0b\xb4\x00\xe4\x97\xf4\xa4\x12\xca5\t\xc0\xae\xd3X\x8e\x0c\xc9\xad\xff?\xafgo\x86\xf5\x1f\x1d\x81\xaf\x12{\x13C\xc0\x100\x04\x0c\x01C\xc0\x100\x04b\x10\xf0T\x1d\xe8;\xf8\xbf\x04\x8f%\xa3}\xde\x8a\n\x1a\xe1\xb4o\xaf\x93\xa7\x7f\xf2\x88|\xe4g\xef\x91\x1bW&a\x19\x88\xa8\xc2/\xc1w\xe0\xd7z\xb1\x9cx\x01\xfa\x05\xa2\n\xfbs\x8c\x8c*L\xf7Lj-H\xdd\xcc$Y\x04H\xfeQ\x1e@\xfa2\xd2\xcbH_E\xfa:\x12\x1f\x86\x9b\xc5\xa5R\xea\xd3\xb6\xea3\x10_\x83\x13#\x00\x83\xc36\x93\x9c\xb3B\x00\xba\x02\xd0R iK*wR\xd0[\x8e\xed\xd0\x80\x0c\x81\xe8\xa1\x04=\x84\xd9\xb4\xa3QV\n\xc9\x022h|\x8b-\x7f\xd4\x87E\xf8\xef\xdb\xbc\xabYv\x1ei\xf1\x08\xc0T\xee\xc1U\xa0^,\xc9\xeb\xc7\x92\xc10\xdaP:\xc7O\x7f\x8c\x9f\xca\xd5\xedXC\xa0\xf4\x11\xa0\xc2\xa7^\xa3\xb1%\x07E\xad\x92\xdbd,\xfb\x18\xa1;\x91\xa5Z"\xcb\xbe\x00}\xd62\x92\x1e%]\x1d\x96\x04 \x97\xfcv\x9fq\x16\x80\xe9\xe6\xa4\xc5H\xed\x83\x98\xe3r\xcd\x1b\xc3\x98\xd8\xf3\x1eIj\x19\xd8\xd1\x86\x80!`\x08\x18\x02\x86\x80!Pn\x08(\x19\xe8O~"\x96\x99\xccL.yn\xb8V+\xa4\xae\xb1F\x1e\xf9\xae\xdd\xf2\xf0\x07v\xcb\x0c\x02\x8c\xf4\\\x98\x94\xd7\xbet]\xdex\xa6wmTa\x00\xc7`\x8d\xde$\xad-\x17N\xb2\x1e\xc1?\x95<\xea\xa7\xff\x03\xdb\x1bH_C\xfa\x02\x12\xad\x03;\x91\xdch\x16\xbb:\x82\xf55\xbe[~\xe7\xdf2\x16#\x003\x860\x90\x0c\xe8(\x92\x92\x95Q\x05\x97\ti\xf8\xef\xac\xe4\xe6\x15,\xd3\xcf\n4@+\xb0\xa0\x18\xb8\xea\x11\x80\xd9\xaf\xdah\x9c\xd86\xe1\x9e\xabA\x80\xd66W\xcb<,\xcc\xfcv/\xd3\xe2\xdb\xf9\x01 \xc0\xe75;\xbd$\x87\x1fl\x97\xe3_\xee\x81\x85M\n\x15\xd61\xdc\\\xfa\x8b(\xc2r\xb0\x15K\ti]j\x0c`\x00\x8f\xca\xb2,\x07\x04\xa8\x868\xcb>\xbeF\x88\xda.a$F\xe5U\x95\x84\xef\'v\x9c\xcf>.\xdf\xed\xc5\x92^\xbe\x7f\xb7\xf3\xd9\x17Q\x1a\t"\xf2\xc8\x86e\x1f\xb3JA\x96`\r\xae}A\xb4\xaa\x95\xe4\xf9T\x9a\xc3\xe8S\x07\x11\x01\x98~r(\xae\xf9I2\x8b\x8c\x0eS\xe8\x91CS+\t@|\xe3=X3\x97\x11\xa6v\xb2!`\x08\x18\x02\x86\x80!Pn\x08xcbO\x81\xe02\xe1Y\x8c\xa1\xe8\xe2\xa4\xa6\xa6Zv\x1d\xde \x87\xdf\xb1Q\xfe\xd1?\xbfW.\x9f\x1cF\x00\x91a9\xf3\xd2\x80\x9cz\xae_aZ\x8d\x9a\xa4\xad\x0eU\xa8\xa5\xa0E\x15\xbem\r\xa2\xc2\xa8\x9a5\xb6\xe4\xdf\xb6#\xfd\x13?\xf5bK\xcb\xc07\x90\xbe\x88DB0ZCu|\x1d\xad\x05=\xc5\x13;\x99\x88\xcb0\x93<\xec\xdc\xec!@\xdd\x9e\x12\xf66\xd9\xf9\x0c\xe1\xc5T2,;u&+\x85b\xa3\xc3\xb1\xe5\xc05\x0c\x16!Y\xa9\xcdkJ\xe6\r\x956\xedl\xd0\xd0\xe9\xb6Tj\r@\x85\xf5\x03*\xc5\x1c\x82w\xdc\xf5\xf0\x96\xf4\xca\xa5\x83a\xd4\xa4N\x10\x11wmL/\x0f;\xcb\x10(7\x04T\xc5\xc0\x07\x1ba6\x99l\x9c\xb9u\x96}\xb5\xbe\x9a0\x0er}\x18\xed\xf5\x00V,\\\xc0\xd2\xd7\x8bH|\xd7\x82\xb6\xec\xd3^\x11\x1f\xd4Q\xb5\xac(h\x86\x1d\x06\'\x17\x94\xb4\xf3\xf4^d\x9c\x82\xa0\xe3\xaa\xa9\xad\x92\xae7\xe1n \x8f\xd2\xd4^\xab\xfd:!I\xe76\xf2Xt\xbb\xb4!`\x08\x18\x02\x86\x80!`\x08\x14\x10\x02\xb7D\x15\xc6*\x89\x05\xa4\xa9\xb1y\xc4i\xab\x94=GZ\xe5\xf0;7\xc9\xb7}\xff\x01\x99\x86.x\xe5\xadQy\xe9\x0bWu\xb9\xf0\xc4\xf0\x1c\x96\x16\xdfT\xca\xc87XT\xe1\xb8\x0f\x96\xda,\x97\xf8R\x1c`\xdc2mC\xfa\x90\x9f>\x8dm\x17\xd2\xdf#\xfd\x1d\xd2I$8\xb8\xbfE\xa8\xf61?\xaa\x80.\xaf[\x0eX\xef\x8b\x11\x80\xeb!\x94\x9f\xbfgu\tpU\xc4b#?7\x13\xef\xaa\x95 k\xe8Tt\xd0Y\x00\x06`B\xe1,\x007\xed\xa8\x13.\xd9R?M6R\x8a\xf78\n\xe27\xf2\x0e\\\x06L\xc2\xb6\xb1\xb5F\xa6F1\x13\x85\x87\xe8"9\xaf[H\xd7\x04\x9e\x1d\x16yr\x0f\x9aY{\xd8\xebbf\x07\x94\x1f\x02\xaa.\xe0\x83[Z\xe3\xb1\x7fH\x18\x8d\x173\xbd\xb4\xec\x1b\x04\xe97\x00kmZ\xfb%\x92lY\xf6Q\xa5a\xe3\xedD-\x04\xf1r;/)\xeew\x1e\xe2\xdey\xf7[\x92\xdb%D\x1d_FJ\xa7\x85\xe0\xc4Um}\xb5t\xfa\xfe\xff\xaa\xd0\x97-\xe7\xd2\x8a\x91\x85F\x196\xb4\xc1\x07\xa0\x9bIK\xebN\x92\x04\xcb\x0e3\x04\x0c\x01C\xc0\x100\x04\x0c\x81\xf2A\x00z\x86\xa7\x1fa\xec\x8c\xbb\x8eD\x15\x0eUJ\r|\x07\x1eyd\xb3\xbc\xfd\xc9m2\xde?\'\x97N\x0cK\xe7\x9bc\xf2\xe6\xb1\x1b\xd2\tb\x90\xc3y\x17U\x98\xab\x14\xa8\xa6XT\xe15U\xc7)\xb9nK\x8d\x9c\x89\xdfk\x91\x0e\xf9\xe9\xa7\xb0=\x8dD\x8b\xc0\x97\x90H\x08^C\xe2\xb1N\xb8j\xd4\x9d\x9f\xb4Vl\x04\xa0\x83\xaf\xb0\xb6\x8e!\xce\xb0T\xde\x08\x89\x016\xe8\xb8\xb3\x90\x84\x04 \xa3\x172*\x11%\x90\xe2\xf9\x03%\xfa\xff\xa3\xf3\xd2\x15\xfc\xab\xb4\x81R!U\x835eYAl$\x86\xa0?\xfc\xd0fy\xf5\xef\xaf{\x96\xabIW\x0e\xff\xc0\xb3\x98(\xc1\xe0\xde\xebu\xa2\xdb\xc85\x97\xb3\x1f\x0c\x81\xd2E@\xab>>\xf8Z\xb0+\x88\xb5\xec\xab\xc3\x8b\xc6e\xf6\x8c\xc2\x1b\x1d\x8dw=\xcb>\x9d\xdeE~\x9a?\xce\xf7_;\r\xc2\x93\n\x9a\xaa\xf6\xe0\xc3o\xa75#\xe6\xa5\xc9e\xeag\xd8\x08\xfdf\x03t\xa2}p\xa1\xb2\x17\xe9h\x87\xc8\xeb}"\xff\x05z\x91\xd7\xcd\xa5re\xf5\xdf\xa7.\x06\xb4\x0c)\x9d\xaa\xd7\xabD\x0f}\xed\xdc\x84\x9e\xb8\x1a)\x7f\x8a\xf9dxx\x93\xfa\x004\xdf;\x19\xc2h\xa7\x1b\x02\x86\x80!`\x08\x18\x02\x86\xc0m\x10\x88D\x15\xc61s\xb3+Hs\x08\xe2Y\x012\xb0J\xeey\xa2C\x1e\xf8\xb6\x1d\xf2\xd4\x8f\x1e\x94a\xb8F9\x0e\x9f\x81\'\xbe\xd2+W\xcf\x8d\xc9\xc2\x1c\xa2\nG\r\xc3\xe87\xb0\x12\xea\xdd\nX\xc2\x00\xec~ns\x07\x05\xff\'j\x92L\x14\xa7\x00\x139j\xa9G\xfc\xf4\x83\xd8R\xf1|\x11\xe9\xaf\x91H\x08\x9eE\xf2\xa2\xa9b\x07\xc2\xe3\x99\x0f\xf3\x88B\x1e\xdfb\xc4\x08\xc0\x18@\n\xe4\xab{\xf8\x19\x16\xc7\xcf&K\xb9eX\x98\xc8\xe9\xf4\xa1T\r\x1fJ\xc37<\xf2O\xff\x10@\x19\xdd\xb8l\xf3\xae&\xb5\x940\x0b\xc0\xc8#(\xd8\x1dZ\xe5\xd0g#M\xcdI\x00\xde$\x07\x92(\xb2\xabC\x0c\xf6BBc[\xa3\xc84\xf6I|\x98\x18\x02\xa5\x8e\x00\xbbz\xe7\xb3/)\xcb>\xe8\x11\xf4\xd9\xc7\xc09X\xe6\x91P0Y\x13y\x0f\xa9\xb1\xe9\xf4n\xc2\xa3\x13\xff\x81jI2\x96}\xbc\xde\xbe\x16\x91=\xcd";\x91\xb6\xd6\x8bt\xe0]n\xc7\x962\x8d0vM0\x92G\x14y\x15\xf7\xde{\xdf\x92\xfa\\\x86\xef\x1a\xceH\xd3\x17m*\xc2[\x0faI4\xa3\xe8\r\xfb\x01\xac\x08y.\xc5\xf5k\xcd\xb0\x92\xe6\xec\xba)\xd1\xb9D\xdf\xaee\x08\x18\x02\x86\x80!`\x08\x94/\x02\x9e\xda\x04M\x04\xff\x171\xde\x1a\xf5\xc7\xf2\x8c*\xdc\xb2\xa9V\xbe\xf3\xe3\x07\xe5\x83\x9f<,\xbd\x17\xc6\xe5\xd2\xc9\x11\xb9||X\x8e?{C\xc6\xfag\xb1\x12\x0fQ\x85}\xe8,\xaap\xc2:Dm\x99\xe2\x8c\xc1\xa8e2\xf1;\x94by\xd2OP\x86\xd5o\xe0\xeb\xd8~\r\x89\x91\x85\xb9L\xc7A\xcc\xe3\xa9!\xc7\xd5R\x8d\x00\x042\x05(i\x0ci\x12\xdf\x05\x07\x08q\x9f~\xe2S\x82\xfd\x0bFLU0#\x1e\xe8\xc6\xe03@!\xd1Hi\xdb\x06_I\x11B\xdd\xfb\xcd>\x0b\x14\x01t(\x0bs+\xb2\xe3N\xb6q\xa8\xb7\xb0P"g\x90\xf4 \x97\xcd&\xdf\x9e\xb7\xb0\x0cx_\xab\xc8\x14\xdbG\x13C\xa0\x84\x10\xd0v\r\x1f\xac\xe7\xac\xef\xce\xb2\xaf\x0e/O\x18\xc4X\xc4\xb2\x0f\x13,=\x0c\xc8\x81\xc9\xc1K\x88V\xbb\x9ee\x1f\x897\x8a\xf6>\xf8\xd0-\xbesyk*\x1d\x88f\x83\x0f\x14\xc7;\xcf\xcf\x8b\xf9\xc5\xbe\xc8\x11\xcb>\xbc\xef\xfb\xdb\x90@\xfc\xb5\xc2\xd2O\x97%Cw\xe1\xcb?\x07\xb3`\x04\xed\x90>\xea5\xcc\x0b\x89\x04g4\x99\x88\xbf\xa4"+\xf0W\xc3\xa4\xb7\xccri\x99\xd7\xcfa\x15\x9dJ\x18\x04`\x7f\xd74&\xb0<\xff\xb5\x11\x9c\xd6?=+G\xb8~-\xdcP\r7\x1aY\xc9\xd221\x04\x0c\x01C\xc0\x100\x04\x0c\x01C %\x04\x94\x0c\xf4\'R\xa9\x8f\xcc\xc0\x8f\xfb\x0c\x02\x89`\xe4\x06WN\xb5\xf2\x18\xa2\n?\xfa\xf4n\xf9\x9e\x9f]\x92\xeb\xe7F\xe5\xe5\xbf\xef\x91\xd3/\xf4I_\xe7T$\x88\x9a\xbb\xa0E\x15vH\xac\xd9R\x9bf\xa2\xa8&\xedo\xb9\xf4\xf71?}\n\xdb\x1e\xa4g\x90\xfe\x16\x89K\x86;\x91(<\xd7\x9d\xa7?\xf0\xc3\x08\xc0\x08\x14\xa5\xbbCS\xdb$\xc779\x01\x81\xe37\x9a\r\xf7_\xe3\x80\xce\x1b\xc7\xc5\x8e\x0b3-\x08\xc7\x86\xf41Hi\x86\xaf\xa4\x05\x0e \x0b\t\x84Lo\xb0D\xcf\xaf\xa8` \x90E\xd9\xb6\xafYZ\xb6\xd4\xe9\x8cQJ~\x00\x1d[x\x1e\x04`\xe8N\xa0d\x0f\xbdD\xabJ\xf9\xdc\x16I\x9e\xf5,\xfbVP\xcf\xfb\xd1\x9e^\x82\xcf\xbeng\xd9\x87\xefc\xd1+\x03b #\x89\x16Q\t\xb0\x93\xae\x1f;\xbeb\xd1d\x9c\xe6\x83\xfc\xdc\x1c\xa4\xbb\xecm-\xfbp<\x88\x7f\r(\x82\xe8\xf0j\xe57\t\xabD\x96\x8fB\x05\x93\xe5\xe5\xfb\xecX/X\n\xa7,\xc4\x12\xb2\xbc\xbc,KH\xcc\x8e}\x0fsNF\xf8\x18\xc2\xf5!\x19R2\x12\xe7\xd1\x02/]\xdc\x92\xb9`\xec1z\xfb\x1e(5 zW0\xfb\x9el\xd9c\xb3\xb2\xef\x86\x80!`\x08\x18\x02\x86\x80!`\x08d\x0b\x01\x8f\x0b\xf4\xb8\xaaHTa|\xad\x0e#\xaa\xf0]\x08$\xf2\xd0\x16YFp\x91\xcb\xf0\x15x\xf1\xf8\xa0\x9c>\xd6/\xa7^X\x1bU\xb8\x12\xae\xcb\xa8o\xe5T\xbf\xca\x16\x08\xc1\xe6C\x95\xcf\xa9}T\x06\xa9\xd5rK>\x8fQ\x85\x7f\xc0O\xbd\xd8\xfe=\xd2\xef!\x9dD\xa2\xf0\xe2|f\xa1)&/Z\xf6\xb5\xc0\x92oo\n\x96}\x9a?3\x87p\xe3i\x92\xfau\xcd\x07/\x87\xe8\xf6\xe9\xca\xca2|\xc2\xc2\xba\x98\x97 \x0f\x98\xb4\xe0\x92\x98\xa3\x90\x1b\x17=\xebu=?\xd5\xb6)\xe9\x8b\xad=\x90w\xec\x90\x0e\xd7Uy\\\xa8\x0f\xd9\xda\xa3\xed\x17C\xc0\x100\x04\x0c\x01C\xc0\x100\x04r\x8f@tT\xe1\x15\x90~\xd3\x8c*<2/\x95p\xdf\xb2\xf3@\x93\xdcy\x7f\x9b\xbc\xe7c\xfbezbQ.\xbe>(/\xfd\xedu\xb9\xfc\xc6\xb0\x8e\xfb\xa8\x9f9\xe1\xd0=\x12U\x98\x04\xc2\xcd?\xb9C\xcauK\x95\xd0\xcd\x84;T\xb8\xa5V\xca\xa8\xc2?\x82\xf41\xa4_G\xfaU\xa4\x05$j\x8c\xaa\xb5\x1a\x01\x08$\nP\xb2:\xa4\xd0(\xaa\xac\x12\xd1\xa3\x87<\xde4\x8b\x11\x02\x018x\xcd[B\xc5\x01\x15\x99\xfel\x8a\xe3\x14\x9b[j`\x86\x1c\x96%D\x97\xa5\xb5\x86Iq @\xc7\xb1\x87\x1fl\x97\xb7\x9e\xef\xc3\x00\xdd\xb5kI\x94\xdd\x99\x92\x0e\x83\xfc\x833Z\xf5#6\xc1\xc8"6JN\x02=;$\x97\x08\xb0\xcd+\x15\xcb>.\xdd\xdd\r\xb2o\x07\x12}\xf6m\x85\xcf\xbe\x8d\xf4\xd9\x87w7Y\xcb\xbeT\xb0\xe7{\xee|\x00\xa6r\x9e\x7f,-\x00\xe9\x03P\xd9\xbc\x14f\x17\xaap\xcde,\x1d\xee:\x03\xe2\x15\xe2\x8c\x11\xfdls\xba\xe1Rd\xfaL\xb5^-\xa7\xb0\xdb\xc5\x0c\x01C\xc0\x100\x04\x0c\x01C \x15\x040\x04\xd3Q\x98?\xb1;1:/\x13\xc3\xf3\xea\x0e\xac\xa6\xb6R\xde\xf6\xeem\xf2\xf0\x07v!\xda\xf0\x02|\x06\x0e\xca\x85\xd7\x87\xe5\x04\xfc\x06^??\xae\xab4\\Ta^\xb2\n\xd6\x81\x16Ux\r\xf8N\x15\xe4\x96Ps\x84\xc1T\x87\xf4\xcbH\xf7#\xfd0\x12\x95W\x1e\xb3j\x04 P(@I\xc5&a\xdd\xe2\xa7\x1d\xedp\xdd\x9c\xd3;\x80\xec\xff,\xfc\x04\x8c\x0f\x82\xa4\tJ\xfc\xea\xdf\x08G\xe9\x1b\xdakd\xa8g\xf6\xb6\x06%A\x15\xc3\xf2M\x1d\x01\x12\xc2\\\x06|\xe8\xe1\xcd\xde\xc9)\xf0\x7f:3D\xa2\x97\xcb\xf2\x18\x08\xe4 \xfc\x00\x9a\x18\x02\xf9D\xc0\x11},\x83v\xcd\xa8\xe0\xdc\x16\xbbe\xdf\x01\xf8\xec\xbb\x03\xc4\x1f,\xac\xd5g\x1f\xfd\xf6q\xe6%\xd6g\x1f\xef\x95\xfa\x08\xdbd\xca\xed,\xfb\xbc#\xd6\xf9DF$\x00\xd3Y\x02\xec\xe7\xcc\xd9\xe5%\x10\x80j\x14\xce\xf6E\xcb\xb8\xcee\xf1g\x16}\x05K\x94;\xdf\xf4\x08\xc0\xdc\xcfD\xb3\xa0\xab:\x81V\xa3\x16\x80)\x14~\xfd\xdb\xb3#\x0c\x01C\xc0\x100\x04\x0c\x01C\xc0\x10\x08\x14\x81[\xa2\n\xcf \xaa\xf0\xcc\xac\x8c\x0fA\xad\x83{\xb0\xbb\x1e\xdd"\xf7\xbe{\xab\xbc\xffG\x0f\x81\'\x98\x937\x9e\xe9\x93\xd7\x9f\xbd.=XyA\x0bB\xe54\xfc\xd2\xa9u \xc6|t\xf9\xe5\xec?\x02-x\xf1dN\x8d\x9b\x89J"\xac`\xe4i\xa4\xff\x86\xf4a$\xfa\x06\xaa0\x02\x10(\x14\x90\xf0AQ\x9c\xe3\xa6$\x87%\xdeI\x89>\x17g\x97u\x1d\xbd\xfaR\xcb\xfd\x88\xe5\x96b\xd1\xe0\x85\xd6\x7f\x13Cs2\x85\x19\x00J\xb6\xad\xff\xa2/\xd8\xb2\xb9Vj\xe0,\x9d\xce\xdb\xcd\n,\x1a\x99\xc2\xdd\xa7\xd9\xf8<|6r\x19p\x08\xa4\xc2"\x966:\x8b\xce\x94J}aD\xe4\xf1\x9d\xf6\xdcS\x02\xcd\x0e\xce\x18\x01G\xf8qK\xbfu\x1a\xd0\x02Kb\xabI\x90\xe17\xb5\xfa\xc3N\xa1\xfb\xec\xc3,\xab\xec\x05\xc1\xc7h\xbc\xebY\xf61\xd8\xceJ\x02\x9f}\x19\x03\x1a\'\x03\xf6\x94iX\x00\xba\x0e\x96\xe4\x1f\x89\xb7\x14\x95\x8d[$\x1a/\x96\x88v!\x1a\xef\r,Cg@\x9aB\x8a\xc6\xeb,\xfbh\xdd\xb7\x03\xbe\xfa:n\xe3\xb3/\xd7\x96}\xa9<\x1bZT\xa6)\x9c`\xe0\x92\x11\x8f\x05H\xc2\x90\x91w\xbb\x10\xbd\x8e\x92\xca\x9c\x84\x9e\x90\xc5\x8fPm\x95\x84\xb1Tf\x86\xcf\xc7\xc4\x100\x04\x0c\x01C\xc0\x100\x04\x0c\x81\x12C \x9a\x10\\\x801\xcf|\xcf\xb4\xban\x0e\xc1\x90h\xcb\xaez\xf9\xf0\xa7\x8e\xc8\x87\x90\xbaO\x8f\xc3:pHN\x7f\xa3_N|\xadW\xe7\xe6Wa\x19H\xc6\x8bbQ\x85=\x1c\xfc\xcf\x9f\xc1\xf69#\x00o\xc1\xa4`\xbed\xd5\x02P\xefj\xfd\xf1M\xcen\xbe\x1a\x0e?\'\x07=\x8e\xb3\xd2_\xbb\x1f\xd4\xc5\xb7\xecj\x92%D\x1e2\x020(\x84\x03\xca\x17\\\nI\xc0]\x87<\x1f~\x1a\x11\xca\x99\xbf\xa4r\xc93\xc3"\x8f\xed\x00\x01H\xd6\xc6\x18\xc0T\xa0+\xdbcYU\x12Y\xf6\xa1\xed\x12,\xbd\x14F(\x1b\x81\x0f\xd3\xebX\n:\x82\xe6\xba\x90\xa3\xf1\x16\x93e_*\x95.\x83\xa0N\x9c b\xfb\x92\xaa\x84\xeb+\xa5\xf3\x94#\x00+t\xa9I\xaaydt<\x9b0\x14\x9b\xe5\xa8\x81\x05\xe0\x14\xa2\xe7e\x00CFE\xb1\x93\r\x01C\xc0\x100\x04\x0c\x01C\xc0\x10\xc8\x05\x02\xd1d\xe0\xf2\xa2\x1fU\x18\xd6\x81\x8c\x10\xbceO\x83\xec\xbd\xbbE\x9e\xf8G{5\xc6@\xcf\x85qy\xf9\x8b\xd7\xe4\xd4s}2\x84\x15\x87:\x86\xf4\x0bI>\xa0L\xa3\nS\x83\xe4\x8c\xf7\x13H\x0f\x19\x01\xe8W\x88\x02\xdb8\x0b\xc0\xcch;>f_\x94\x04\xe3\xa3\xa7\xc1\x00\xb7\xf9\x12\x9f\xc4\x19\xba\xe1\xf9P\nzy\xe6\xe6\x9d\xb0\x00\\\xc4\xd2w\x9a\x90\x99\x14\r\x02\x15\x88\xda;;\xb9$\x1d\xfb\x9a\xa4\xbe\xb9Zf\x10\xc9W}X&k\xc7M\x0b-\xfa\x858\x0b\x02\xf0\xc9\xbd\xb7\xb7\xc0*\x1aT\xac\xa0\x81 \xe0\x08?ni\x1d\xe7|\xf6E,\xfbP\x8f\xf8\xb7\xbe)\x91\xcbc\xb0\xec\x1b\x87U\x1f\xf6o\x14\xb8e\x1f#\xf1\xd2\xba/^4\xdeB\xb6\xecK\xe6!\xbbg\x95\xcc\xb1q\x8eY\x86C?\x92\x80\x9c\x80J\xc6\x00\x9d\xcd\x0eg\x90\xe7\xe0\xac\xba\xaf\x0b\xcf\x9e\xc2.\x85\xe5\xc8\x83\x84kC \x01\xab\xb0\x8c\x19\x05\x80\xa5\xb4\x89!`\x08\x18\x02\x86\x80!`\x08\x18\x02e\x81\x00T7o\xf2\xd3\xd3\x7f\xa6\xc7\xe65@H\x15\xf4!\xfaj\xdeso\xab\x1cA0\x91iL\x92^99\xacQ\x85O\xc22\x90\x13\xb8\xd4\xe7\xca4\xaa0PS\xa3H\xf8\xfb\x91o7\x02\xb0\xb0\xde\x14TK\x15\x8c,\xb3+3\xe3\x8b\xd2\xd0\x12\xc6xe%\xbf\xfc\x1f\xdeU\x86\xef\x1e\xe8\xf6\x07Q\xd9\xbdM/7Vq\x1f\xc9\xd6-\xb5B\xb3a\xdf\xa5@\x10W\xb3<\x03@\x80\xcfk\x01\xd1D\xb7\xc2\x87\xe3V\xf8%\xa3\xdf-\xfe\x96\xb4\xd1\x8e{\x93\xaea\x19\xe6\x0cXo\xab\x00\x01<\xa5"\xcb\x92dM2\x96}\xc3\xb0\xec\x1b\x8c\xb2\xec\xbb\x08\x8b\xafN\xd4\xa3%\xb7\x98 \xe6\xbe\x9d\t\x96\xd69|\xb8\xba\xe7;&\x8e9:\xf1W\xb6[\\\x8aJ}F\x89%?/\xe6\x17K|7\xc2\xa7\xafZ\xf6a\x19\xef~\xa4B\xf7\xd9\xc7[\xcb\xaa\x00\x14\x92\xfc\xe9\n\x96j3\xa8G\xb2\xc2\xe5\xc2u\r\x9e\xeb\x8a\xd1~?\x00H\n\xe7\'{\x9dd\x8f\x0b\xd7\x87\xa4\x12\x93$\x1a\xdb*\xd9\x93\xec8C\xc0\x100\x04\x0c\x01C\xc0\x100\x04J\x0c\x01\xeaC\xce/\xf4\x12V|q\xfc\xc8\x88\xc1t%u\xe7\xdb\xdb\xe5\xee\xc7:\xe4\xa9\x8f\x1f\x90\xf1\xe1y9y\xac_^\x85u`\xf7\xe91X\x0b.\xde\x12U\xb8\xc4`\x89w;Nq~\xdc\x08\xc0x\xf0\xe4\xff7\x8c6U\xdc\x83\xca\xb8D\xf4\x15\xd4\xd4\x0e_hy\x16Fx\xa5CN\x9a\xe4R\xdcx<\x9b\xc5\xa2\xafC\xfa\x15l\xdbZ\xe7\x0f\x92\x18\xfc\xc6\xa4\xd8\x10P\x93m\xb4\xe9w\xdc\xdf\xa6\x04 \x07\xe1I\x8b#Lh\xa5E\xcb-ZAM/\x18\x11\x984\x80%p\xa0#\xfc\xb8\x8dg\xd9\xc7\xfa\xc4*e\x96}E\xf8\xb0I\x00\xa6\xe1\x03\xd0oB\xb8\xfc\x97\x13Q\xc9\xcc\x86-\xe3\xb80\x96~\xb7nn\x90\xbf\xfd\xe3\xb3\xf0_\x8bv\x84}L*\xedQ\xb6\x10\xf6I\xc7\xfa\r!(\xadpmA\xb2\xd8\xc4\x100\x04\x0c\x01C\xc0\x100\x04\x0c\x01C@\xf5\xbaJ*w\xf8\xcfI\xd2\xb1~L\xeaC\xa8/\xd1\x7f\xf2\xbb?\xb2G>\xf4\xc9\xc3264\'\x97N\x8c\xc8\xd9\x97\xfb\xe5\xeb\x7f\xd9\x85\xe8\xc33y\xf5\xed\x9c\xa3G\xe7\xb4\xc6\x83F\x00\xe6\x08\xf1\x14/\x93}\x02\xd0_\'\xef\x99\x96\xb8\xe7\x9fb\xa9\xb2p\xb8:N\x07\x1f7\x80p\xde*\xfe\x80,\x0bY\xdf\xcc\x82\xb4)\xf2\xdd\xb2\xab\x11/<\x07j7\xffd{\xc5\x83\x00\x1b\xeb\x99\xc9E9\xfc\xce-\xf2\xe5\xcf\\J\xed9\xb2^\xb1\xb2q\x90\xdf\x03\xb2y{\x93H\x80F\xa7\xc5\x83j\x89\x96\x94\xbd\xbc>s\xdc\x1f\xad=\xd9\x060\no\xb4\xcf\xbeB\xb1\xecs\xe44\xcb\xeb\xf6\xddci\x82e_\x0b\xa3\xf1\x96\xabe\x9f\x03b\x9d-\xb1K\x83\xffs\xb9\xd294\x93\xd7\x13\xba\x8a\xe3\xfe\xeam\xd5B\x10\xcf\xa7uS-\xfc\x05\xae\xca\xef~\xf2\x1b\xf2\xd2\xdf^\xf3\x0f\xe29\xb9\x17w\xd5\xc6\r5^\x14\xe3\xdc\x17\xc1\xaeh\x08\x18\x02\x86\x80!`\x08\x18\x02\x86@\xc1"\xc0\t^\xfe\xe3P\x80\xcb\x82C\xe1J\xa9\xc3\xca\x19\xa6\xc9\xb1\x059\xfd\xe2\x80\x0c\\\x9d\x92N\xac.{\xf3\xf9~\x90\x84\xbeQ\x92S\xb2\n\xf6\xce\xb2V\xb0v#\x00\xb3\x86eV2rU\xcf\x11\x80Y\xc9\x94\x99\x90H\xa1\x0f#\x1d$g-\xd7\xd43\xf2\x96--\xcb\xe05\x8f\x8d\xe1\x0b\x9am!qD\xd2o\x13\xfc\xffUVs\x99\x14\x97\x00{C\xbdl_\xcb\xf2\x0b\x0e\x01\xd6\x95\xf9\xd9%\xb9\xe3\xbe\xb6\xc8E\x94@N\xb6\xca\xf0\x91s\xd5f\'\xfc\xb6=\xd8\xe1M\xffDr\xb2\x9d\x92A\x80\xcf\xb9\xae\x06\xbe\xfb\xd0\x9d\xb1\xb7/J\xcb>\x10\xd4[\x1bJ\xd7g_6+\x1b\x9f7\xdb\x80\xb4\xdat\xaf\xf1\xa05\xf12\xeb\t\x1b\x948B\xc2\xaf\x06~d\xda\xe0C\xf1\xad\x17\xfa\xe53\xff\xf2\xf8M\xdf\x7f<%\xd96(N\xde\x19\xfd\xe4\x13\xc6\x11\x0b\xc0\x8c2\xb3\x93\r\x01C\xc0\x100\x04\x0c\x01C\xc0\x10(~\x04V\xb0\xb2\x83c\x7fr\x1d$\xfaj\xeb\xabe\x15\xfaZ%\x06\x06cC3r\xe2\xd9\x1br\xfe\x95A\xe9\xb98!]g\xc6t\x12\xb8\xf8\xef:\xed;X1\x020m\xec\x02=\x11^\xe6u\x88\x11\x7ft\x92\xc6\xa5g\xe1\x08\x93\xd6py\x1b\xb8\xb0\xccx1\xb9L\x7fj|\xe1\xa65W\x80\x03\xa9v\x12\x80\xb8\x9eZ\x00r\xd0hRt\x080xMc[\xad\xec<\xb8A\xae\x9d\xe7k\x91\xc2\xe8\x1b\xf5M\xe5\xdc\x08\x82\xdf\xa0\xa2Y\x1d\xf0\x01)\xa1\r\x9f)\x9fs\x1f,\x8a\x87`\xe6\xcfh\xbc\xf9\xf2\xd9\xe7\xac\xf9\xd8\xa6\xb9}\x07u\x18]m;,\xfb\xf6#\xaa5\xfd\xf5\x95\x9d\xcf>\x07D\x16\xb7\x9c\xd0JS\xf8xh\x01\xa8\xcdIT\x1e\xce\xea\xafe#}$\x8b|\xf67O\xc9_\xff\xe19\xdd\xf7\xac\xc9y\xa2~\xcd\xebG=,E\xb5\x8a\xa5\x0fA^\xcbo\x177\x04\x0c\x01C\xc0\x100\x04\x0c\x01C \x1d\x048\x89\xbb\n%\x88*P%\xac~\xaa0a[\x8f\x95\x11\x8d\xcd5\xb2\xb8\xb0\xac\xd6}\x97N\x0c\xcb\xf9\xd7\x87\xe4\xcd\xaf\xf7\xc9\xb5s0\x04\x89\x11\r\x02\x87\xdf\x98\x8f\xeaS1\x7f/\xd1\xaf\xd4`\t\xdb\x80\x11\x80\x85\xf5\x84\xdd\xd0\x82\x16\x80\xb4]\xca\xf8\xf98\x8b\xa9\t8\xbe\xac\x865\x9c\xbb@>n\x9b\x01H\xaa\xc352\xa0DN\xf0%h\xdf\xe6\x11\x80y\xbd\xe9\xe0o\xb3\xa4\xaf\xc0\x19\x1dT[9\xfc\xd0f%\x00+\xb1\xeco9Y\x97\x8e\xaeE\xbf\x0cRh\t\'1#\xf8\xcd2)\x11\x04\xf8(\xc3\xa8\x10\xdd\x93"\xbf\xfab\xe2\x9bb\xb0\x086|\xda\xf8\xe1\x83\x96_\xe9\x08\xbb\xcch\x8b1\xcd\x07y\xc5\xc6\x06!1\xc5%\xbcL\xdb\x10\x89\x97\xc4\x1f#\xf2n\x86\x1fJ\x96\x05\x0e\x8ae\x11\'\xb1.\x16{4\xdetp\xcc\xc69|\x84\x9cM\xca@\xd42\xdc\xaf\x1a\xccfyiUj\x1b\xabeC[\x8d\x9c\x7fmX>\xf3K\xc7\xe5\xfa9N:@\xc1\xc4\xe4YJ>H\xf5\xac\xec\x7f\xb8&-\x8c\x99m\xf5a\x98\xfdKX\x8e\x86\x80!`\x08\x18\x02\x86\x80!`\x08\x14\x14\x02\xd4\xd9V\xa1:S\x1f\x0bCW\xabk\xa8\x06\xf9\x077_P\x8c\xe6f\x96\xd5\xba\xef\x0c\x96\xf6^ycD\xba\xcf\x8e\xc9\xfc\xcc\xda\xc1b\x15\xf4s\xaa\x8f\x9c\x00.\x04\x9d.\x0f\x00\xbb\x01\xd0\x99\x8c\t\xa6<\x14\xbe\x1c.\t\xc6";\x04\xa0\x0eX\xf1r\x8c\x0f\xce\xc1g:\x08@\xf7\xe8\xf3\x81"\xae]US!\x83\xd7\xb3\x1e\xe4\xf8\xe6\xdd`@\xa7\xc1#\xf0K\xf3\xc6\xb0,-\x1a\xe1s\x13\x9c\xe2\xdb\xa3\xf5f\x05H\x93\xfd\x08\x04\xf2\xe5?\xc5\xb3M\xf7q^\x03I\xb4\xab\x19\xa1\x85\x91Af\xbcA\xf1\x81X\xaa%\xe6s\xa4\x15\x17\x88~\x15\xbc\xfb^{\xc7o\xf8\xdd\xb5u<&\x15a>\x9c c\xfe\xaco\xae\xd1d6n\x1f\xbb*\xea\xb3\xaf\x0ed\xdf\x06/\x1a/-\xfcZ\x11l\xa9\x06\xc4$\x13\xad\xae\xe7\xa1\xb1\xccC\x11\xa1\x0fB]v\xca3\x91\xb9\xab\x87i-e\xf5._\xd6\x9f\x15)>\xd7\x18\xb0V\x97\xf5A\xab\x12XU\x89\xa0Q\x1d\xb52\x03K\xf9?\xff\x95\x93\xf2\xa5?\xbd\xa8GW(\xe1[x\x8ab\x08\xbe-u\xf6\xdb\xbb\x85\x98;\xb3\xaf\x86\x80!`\x08\x18\x02\x86\x80!`\x08\x14\'\x02\x1c\xeb\xad\xea\xf2=\xce\x9b#\xa4\x07\xdcc\xd75\xd6H\x03\xfd\x1fC\xf5\xeb\xeb\x9a\x94\xceS\xa3\x88\xe4;\n\x0b\xbf\x1br\xf1\xf8\xf0\xcd\x95\x85\xee\x96\xa1\xbfq\xce\xdd\x9b\xf3\xf7\xac\xfc8\xd1[\xe6B\x008\xfa\xf8\x9a\x11\x80\x85Y\x13\xb0fQ\xe6\x91\x18\xb6\x97\x0f+m5\xdf\xf9\xc3\x1b\x1f\xf2\xc2a#\xaf\xbc\t_\xe8\x9aP\x15\xfc\xffy\x04 \x89\x1d]\x86\x95\xc5\x12\xb9\x08\xc0D\xac\t\x03\xf1E\x0c\xbe\x89\x81Iq"\xc0g77\xbd$[\xf6x$\x0f#oF\x96\xe2%sK|s\xf8\x06\x9d\xc5+u\x08\xbe\x04\xa7\x18\xc1\xd3*D2\xd0\x15\xc51\xb4\xa2k\x82\xff\xbf\x0e\xd4\x0f.\x03\xa6\xc4\x92t\xde\xaf\x89?YG\x92\xb1\xec\x0b\xe1\xc0=\xbee\xdf\x8eh\x9f} \x00)s \xfa8\xe1\x10m\xd9\x87\x9f\xb4\xba\xb1"\x93\x0c\xa46b\x92\x05\x04\xf0RW\x80`\xcd@\x18\t\x98~\x00\xeb\x1aj\xa4\xb9\xbdFN|\xf9\x86\xfc\xe7_UkQ%\x00\x00@\x00IDATz]\xc6\x07\xe64\xd7B\xb1\xfa\x8bw\x8b\xb5\x08pS\xa6\xb3\xd7\xf1\xe0\xb0\xdf\x0c\x01C\xc0\x100\x04\x0c\x01C\xa0\x88\x11P\xd2\x0fz\x19\xc7\xefa\xe88\xb5\ra\xa9\xc6\xd2^\xaevX\x81^\xdduzLN\x7fs\x00\x96~\x03\xf0\xe17*\xb3\x93k-\xfctY/\xd4mr\x87\x1c/\xa6:\xff_\xc4\xf0%StG\xfeq\x95\xe9\x97\x8d\x00L\x06\xb2\xdc\x1d\xc3\x87CYD\x1aB\x82\xc9Rvd|dN\xc7K\xee\x02\xd9\xc95\xf5\\\xaaka\x01\xe8\x08@\x14&\xeb\xe5\xe1\xf8\x1a\x996\x82\xfckj\xa3\x05 \xbeD\x0f\xeeS/\xb2\x9d\x91G\x04*`\x1d57\xbd([aa\xb5yw\x83\x0ctO+\x1b\x9et\xbd!\xe9\xc2\x1e\xe0"\x08\xc0j\x10\x06I\x9f\x98\xc7\x9b\xb6K\'\x8f\x00:y\x95\xbdh*I\x00\xfa\xef\x7f\xdc\x0c\xf87\x1e@\xfe\x97\xe79\xa2\x90u\xc2\xedcW\x85\xa4\xa2F\xe3\x85e\xdf\x9d \xfd\xf6\xd1\xb2\x0fKy\xa1\x8c\xa8e\x1f\xdb\x949(\x1f\xb4\xee\xebc\xf40d\xa2\xf9\x93\xe8\xf3\xf3\xa0e\x9f\xdb\xf7\x7f\xb2M\x96\x10\xd0\xf78\xf3\x97\xb9}G\xbdt\x9d\x1a\x93\xbf\xf8\xd7\'\xe4\xa5\xbf\xb9\xa6\x85\xe3\x92\x92\x15\xd4\x87B&\xd8j\xe8\xdc\xda\xd5\xfd,Aj\xd9\x18\x02\x86\x80!`\x08\x18\x02\x86\x80!\x104\x02\xd4_V|%\xa6\x02\x13\xe4U\x18\x9e\xd57U#\xd5(\xe97\xdc3#\xddgF\xa4\xf3\xad19\xf5\\\x9f\x9cC\xf0\x8e\x05N\xb2G\x0bt5\x9e\xa7+\xc3\xa0\xb3Q\x8dW\xbd\xcdt\xa3h\x94\xa2\xf7\x89\x0c\x10\x93\x7f@:a\x04`44\x85\xb3\xcfZ>\x88\xb4\x0f\x89\xa3\x1c\x1dZb\x9b\xb6\xccN,!\xa2\xea\xb2.\x03N;\x93\x0cO\xa4\x11\x0cC\xf2\x0c\xf7z\xe1\xb6#\x03\xf1\x0c\xf3\x8d>\x9d\xd7`\x9b\xd2\xd8\x12\x06\t\x18\x92iF?6\x020\x1a\xa2\xa2\xda\xe7\xa3\xf3\x02\x81\xd4\xc8\xf6\xfd-J\x00\xa6t\x03\xae#\xb8\x01rh\x0cF\xb5\x8c\x14\xeb\xcf0\xa5\x94\x8f\x1d\\\x98\x08\xf0e\xa7o\xc7}\xb0\xee|\xf1\xc6Mr\x8f\xa5e\xab\x19\xfd\xee\xeb:\x004\xa71:\x84\xd0\xb2o\x1fH\xbe\xddH;a\xd9GkBD\x7f\x95\x8d\xb7\xb1\xecs\xdc\x13I>\xb5\xea\xcb\xb8\x89.L|\x0b\xb9T\xee\xf9R\xeb\xe3\xbe{&I\x96\xb9\xb1\xb5F\x9e\xff\\\xb7\xfc\xa7\x9f}%2\x93L\xeb\xe2B&\xfe\xdc\xad\x85\xe1\xfbr\x95Z\xafU;\x07\x89m\r\x01C\xc0\x100\x04\x0c\x01C\xa0@\x11\x88X\xf8\xa1|!X\xf85\xd6\x87$D]\x06\xba\x1b\']{\xceO\xc8\xe9\x97\xae\xc8\x85W\x86\xd4\xe7{\x84+\x88\xba\x1f\xbae\xa1/x\xcd\x8b\x16~k\x8d\x00\xa3\x8e\xb6\xdd(\x04\xa8!\x93\x85\xe1\xea\xd2\x7f\x8b\xb4j\x04 P(@\xe1\x10u +\xe5\xf2\t\x90Y,}\x9cA\xf4\xddj\xf2\x1f\xc8=z\\\x9c\x95\xeb\xac\x97\t\xaa\x1e}\x10N\x8f\xce\xcb\x04R\xd0\xd2\x0c\xf2\x8fV\x80\x13X\xfa\\\x15b\x9d7)Z\x040\xc8]\x98]\x92\x03G7\xca\x89gz\xd0Y\xa42\xd2\xf7\x8f\x1d\x04\xe9\xdc?%\xb2\x1d\x04\x0f\xcd\xc6\x95\x8d.ZD\xac\xe0\xd1\x08\xd0\xc2s+\x08;\n\xdb;G\x06\xf1\xd1\xc7\xd6\x15Z\xf6!\xaa\xb4\xfa\xec\xbb\xc3\x8f\xc8\xeb,\xfb\xe0\x9e@\x97\xe9&c\xd9\xc7k\x99\xe4\x1f\x01\xf7\xacS,\t\x1dA\xff\xc9\xa7_Sg\xd1<\xd5Y\xfdq\xc9H1\x88\x06\x01\xd1\xa2Z\xdfV\x0c\xcf+\xdd2\xea GM%\xfc\x1cP\xdf\xa9\xbb\xd12>\xe7:\\\xba7a\xe7\x19\x02\x86\x80!`\x08\x94\x15\x02T\xbd9II5\x85\x16~$\xedj\x11\xb4\x83V~\xe1\xba*\x19\xeb\x9f\x97\xdeK\x93\x1a\xac\xe3\xado\xf4\xcb\x19,\xed\x9d\x06G\x11+\x95\x0c\xdaA\xbd\x1e\x192/\x8e\xff\x8c\xf4\x8bEi\xdd\xef\x84\x8e\xbc\x129\xbf\x7f\x89t\x12\xa9\xd2\x08@\xa0P`\xe2\x864\\\x02L\xe1\x83K[\xdc\xc9S\xb0~\x9aD\xa2y\xed\xd2\xe2\x92\x06VH;\xd34N$\xbb\x1f\xae\xad\x06\xf9\xb7 S#\xdeK\xae/u\x1ay\xdd\xf6\x14\x9f\xf0l\xdb\x06B\xc0o0n{\xbc\xfd\xb1\xe0\x11\xe0`g\x16~\x00\x0f>\xd8\xaee\xc5cM^x,\x97\x01s`\x7f\x03$ #\xb3\xa6r~\xf2W\xb2#\xf3\x81\x00\x89\\.\xc3m\xf7\xad\xf5\xa2\t\x1cg\xd9G\xbf}\xf4\xd9\x17m\xd9\xc7:\xc0\xf3b}\xf6\xb9\xbaa\x96}\xf9x\x9a\xa9_\xf3\xa6\x87\xe7\xa4\xceum\x07\x1dA3R\x1c\x85\xbeh\x8b-\xa2nM\x18~q\xfc\xbe.\xa9\x1b\xb7\x83\x8a\n\x01\xfa\xa7D\xcd\x94\xda\xfa*\t\xd5\x860q\x8b\x01\x94o\x9d\xba8\xbf\xa2\xab9\x16\x11X\x88\xcd_%\xdb*\x13C\xc0\x100\x04\x0c\x01C \x8f\x08DOXU\xc1]N}sX\xc9>\x8e\xbfV\xb0\xfao\xf0\xea\x14\\\xad\x0c\xc8\xb9Wa\xe1\x87(\xbd}\x9d\x08\xce\x18#:\xc1\x05\x9d\xac\x02]\xe02\x146\x17\xd43\xe60\xfb\x9a<\x02\x1c\xd50\x91\xef\xfbC\xa4\x7f\x87\xc4e\xc0+F\x00\x02\x85\x02\x13G\x00\xf6e\xa5\\\xfe\x88g\x06K\x80g\xc6\x16\x11\x19\xb7\x16\xa1\xb1Y\x17x\x99\x1c\n\xcaAg\x9eC\xd7\xe7o\xb2\xfcn\xb0\x9d\xc5b\xb8\x01\xde\x96]\x8d\x08\x00\xb2\x92\xeb\xbb\xcc\xe2\x9dXV\x0e\x01\x8eo\x96\xe6Vd\xc7\x1d\xcd\x98\xb2\xc0`\x9dQ\x9c\xdc[\xe2\x0eJf{\x19\x03\xfe\x87\xb6\xe5\xbc\xea\'S4;&M\x04X\x0f0\xa1!\xcd\xb0\xea;\xda\x81u\x05\xf8\xe1\x9eM\x1e\xd1k\x96}i\x82ZD\xa7e\xd0\x8dQ\xd1d\x7f\x91\xed@T\xb9@\x8f>\x00\xd5\xda5\x17\x17\xb3k\xe4\x0c\x01\x12\xd1\\\xb1\xb0\xb1\xbd^\xaa\xb04j\xf0\xea4\x06IS\x1a\x9dz\t\x93\x15\xb4\xfcll\xa9\x91\xf6\xed\rHM2\x85\tU\xba9a\x1d\xaeTW\x049+\xaa]\xc8\x100\x04\x0c\x01C\xa0\\\x11\x80\xee\xb4\x12\xb1\xf0\xf3&\xa2\xc2u\x95\x88\xd4[\x8b\x14\x92I\xc4\x1d\xe8G\xff\xd5sa\\\xce\xbe4(\xa7\x9e\xbf!\xa3\xfd^\x80\xb5h\xc8\xd6Z\xf8A\'\xb3H\xbd\xd1\x10\xa5\xb3Ov\xc5\x9bE\xc4\xa3\xc1>5\xe5\xdfD\xfaY$\n\xbf\xdb\x12`\x85\xa2\xb0>\xdc\x90\xe6\x9a_,>\xc8\xb4\x85\'\xeb\x93\xc6vrlAvB\xb9T\xcb;\xf2\xbf9\x14^3\x84kOBa\xa5xe\xca\xe8\xd6\xe2\x96\xde-\x0f\xdd\xb8\xa3A\x16\xa10\xdbJ\xcf\xb80\x15\xdd\x8fK\x88\x00U\x8b\xf5\xeb\x07\x1ehC\x04\xa8a\xb8]\xab\xd0\xd9\xa1\xa4n\xc4\xb1\xc2\x17F1\xa5\x84\x8a\x88\xa5\xe8f\x05\x98\x14r\x85\x7f\x10\x1b\x12\xed\xe6\xf0\xf1\xc9\x07\xd0\xc8\xe0\xd9\xd2\xaao\x11\xd6}\xd1\xd1x]Sc\x96}\x85\xffL\x93-!\x9f\xbdZ?\xb1\x02\xa4.\xaeYH\xfd\xcc\xfc\x9f\xc1\x08yT\xbe\xa9\xd9\x99\x94\x00\x02\xac\xc2\xb0\xf0k\xd9\x14V\xfd\xec\x85\xcfw\xcb\x8b_\xb8&\xd7\xce\x8dAgZ\xeb2e\xcb\x9eF\xd9wo\x9b|\xeb\xc7\xf6\xa1OlG\xa0\xac%\x99\x9eXP+\xc1\x12@\xc3n\xc1\x100\x04\x0c\x01C\xa0\xc0\x10P\x0b?|p\x1b\x82AOCs\x8dD&#\xa1\x8f\x8d\x0e\xcc\xca\xc9g\xbb\xe5\xcc\xcb\x83\xd2\x8d\x88\xbd\xd7A\xfe\xc5\x13\xba`!\'\xc0\xf1\xbaY\xf8\xc5C(\xad\xdf8\xca\xa1&\xc1\x14Br,\xcfU\xec\xff<\xd2\x9f#Qkv\xa3&5\t\xc4w\x93\x02B\x80\x0f\x87\xd2\xebm2\xfcD\x95\xa8\xe0\xcb\x06F\x9d\xb3\xc5\xb4\xc2\xcb\x87\xb0f\xf2\xda\x13#\xb3zyW\xa6\xa0\xca\xb2eG\xa3,s\x89\x9fC3\xa8\x0bY\xbe9A`\x05\xc4]\xa8\xa6J\x0e\x1e\xdd\xa4\x04\xe0*\xab1\x9b\xb9d\xc4\x91?\xdd\x88|\x8eeSJ\x00\x92\x1c2)\x1d\x04\xe8\x07p\x1cm\x0b\x9f\xb5\xbe\xf3\xa8 \xae\xa9\xb3%r\xa5\xf3\x9c\xa3\xef\x04KJ\xca\xd5\x11ZMm%&\xb8P\xd9]\x1d\x8f\xc6\xc5\xf6\x8b\n\x01\x12\xd1\xd5\xe1\n\xd9\x80\xd5\x19\xaf}\xb9G\xfe\xf2\xd7N\xc9\xc05\xf8\xab\x8d\x12.\xff\xe5\xb3\xa6\xa5\x1f\x8f\xef\xef\x9a\xd2\xf4\xe2\x17\xae\xca\xfd\xef\xdd*\x1f\xf9\xd9{e\xeb\xee&\x19\x1b\x80\x9b\x0bs\x0e\x18\x85\x9c\xed\x1a\x02\x86\x80!`\x08\xa4\x83\x00-\xd2\xf9\x8f*u%\x0c\'\xd4\xc2\xaf\xa9V\x1a\xe0\xc7o\x1a\xab\n\xfb\xbb&u\x19\xef\x99\x97\x07\x10\xa9\xb7_\xfa\xbbo\xed\xb7xM\xb5LG\x9fE\xb2\x0f\x1b\xd5\xd1\xe9\x82\xc5$#\x04\x08\xa0K\xfax\xf0\x9d[\x92~L\x8bHo"\xfd\x15\xd2\x7fBbPYj\x8b<\'2\xf8\xb5%\xc0@\xa3\xc0\xc4\xbd\x19tP\x04\x06K\x1f&\x7f\xe3\xc3\xcdH\x86{\xa7=\xeb\xbf\x8csJ\xbd\x18\xd4_\xc9\xf8\x0f\xf7\xac5\x01N=\xb7\xf5\xcf\xd8\xbc\xbbA\x16@\xf2\xc0s\xce\xfa\x07\xdb\x11\x05\x8f\x80\xce\x16\xa1\x94\xbb\x8f p\x03DM\xc4Y\x8f\xdd\xdb\xa2\xbf&\xf1\xd1\x05\x12\xf0@\x1b\xa2\x8a\xa0\x1e\x1a1\x94\x04`Et\x88=\xcf"zX\x99\x16\xd5\x7f\xf1\xdd\x1cg\xa6\xd9\x15\xc3\xf9Q\xed]E\x15"\xe7q2\xc3\xa4\xa8\x11 \x99\x17\xae\xad\xd2\xc9\xd1?\xf9\xf4\xeb\xf2\xfc\xff\xe8\x8c\xdc\x0f\xad$hiA\xc6O#S\xfbj\xbb\xfaH\xe2\x07T\x1bZO\x9c\xf8\xea\ry\x13\x83\xaf\x1f\xf9\xd5\xa3\xf2\xe8\xd3{d\xa4\x1f\x11\xefI\x8e\x9b\x18\x02\x86\x80!`\x08\x18\x02) @c\x0b\x8e\xb7\xb84\x97Ky\x19\xb8\xc3\xf5&\xa3C\xb3r\xfc\x99n]\xd2\xdb\xd79!\xddg\xc6\xd1\x07\xf9\x1dS\xd45\xd4\xc2\x0f\xdf9aUl\xfe\x95\xa3n\xa3\xd0v\xa9\xf4\xaaF\x80-\xb9;\xf7X\\9\xbb\xb0\xf3,\xd2\xabHg\x90^D"\x11H\xa1\xa6L>\xe9\x161\x02\xf0\x168\n\xea\x0b\t\xc01\xa4\x8dH|\xe8\xb1\x0f\x1b?\xa5&d\xe7\xe9\\\x9aA\x15r.TV\xe1\x08\x94$dPB\x9d\x98\n5\x1b\xae\x86\r!\x04\x8e@}\xcf\xc3\xad\x06u\x7f\xe5\x9c\xaf\xc6z\xc02\xa7\xcd\xbb\x1bQ\x7fi>\xee\xcdJ\xb1ELJ\xf8\xf6\xf0\xe0\x8bx\xad\xeeE0\x91\xb5\xbeg\x93\xca\xc6\x0e2\x04\x0c\x81\x02B\xa0\x8c\xac\x9d\\\x13V\r?\x97\x15\xec\xe8R\x9e\xfd(\xa0\xe7fEQ\x04\xf8,\xc3\x08\xf4\xf1\xfb?\xf9\x92\xbc\xf1\xec\r\xfd\xcd\xf5o\x89\xac$\xf8\xe8\xd5\xd5\x89?\xee\xa2u\xe02\xdc\x1e\xfc\xf1\xcf\xbc\x8ay\xad\x15y\xe2#{d\xec\x06\xac\xa1\xcd\'\xa0\xd52C\xc0\x100\x04\x0c\x81\x04\x08pL\xce\xbe\x84\xba\x05-\xfc\xe8\x7f\xb6aC\x8d\xd4#--,\xab\x95\xf9\xa57\x86\xe5\xe2kCr\xf2\xb9>\xb9\x8a\xc0\x1d\xb1\xa2\xd6\xe9\xf8Q\xfb%\xea$\xf8\x9f\xa8\xef\x8a=\xd7\xbe\'D\xc0)x\xdc\xea\xe3\xf1\xb7n\xca\x9bd\xde%\xa4\xf3H\xdfD"\xf1w\x16)\xd6\x04\x93\xc7SSXC\xfe\xe17[\x02L\x10\nL\xf8\xc0)$\x00\xe1\xb4L\t@~O[\xc8\xe6Sn`\xd9\x08\x89\x93\xbc\xf0\x7f\xb8(\x1b\x9b\x11*\xa6\x10W&\xfd\x92\xad\x0f\x9f\x01\xdc\x0c\xff\x7ft\xfe\xb7\xb2\xe2\xc8\xefl]\xc0\xf2\xc9\x17\x02\xec\x9cfg\x16e\xeb\x9e&M\xbdW&4zg\xd2\xceb\x1d;\x8cY+\xa9vmh\xbe\xee\xc6\xaek\x08\x18\x02\x19!\xe0\xd4\xa22$9j\xe0\xffO#\x9b;M!# \xed\xe4\xfc!\x80e\xbf\xed\xb5\xf2\x9f\x7f\xe1\xb8G\xfe\xf9\x0c/u\xb4T\x84z\x95\x8b\x10\xfc\x99_x]6v\xd4\xca]\x8fn\x85?\xa6\x19x\xbb`\xa6&\x86\x80!`\x08\x18\x02\x86\x00\xd8\xa0(\x0b\xbf0\xac\xfb\xea\x91\x94c\xc2\x18i~jQ\xce\xc2\x7f\xdf\x99o\x0e\xc8\xe5\x93#\xea\x83v~f\xedJ\x83\x9b\x16~\x9ea\x8f\xe1\x9a\x15\x04\xd8\xf1\x93\xada\xa2\x0f\xbf\xd8\xce\x9bn\xe1^@"\xe1\xc7\xe5\xbd\xa7\x90\x86\x90\xa2\x85\xe7p\x80\xeb\xf2\x8aK\xfc\xb9\x13\xcc\x02\xd0!Q8[\xa7\xfd\xf1\xc1r\xdd\xf6~$\xf7[z\xa5Tk\x01\x91\xbe\xcb\x13 \xc50vPk\xbc\xf4\xb2\xca\xe4,^{\xa8/8\x0b@W\xb6v\x10\x80\x95\xac\xd9\x99\xa1\xe6\xb2\xb3m\x81 \xb0\xbc\xb0"\r\xad5\xb2\xe3\xd0\x06Q\x020\x9dr\xdd\xc0\x04\xc9\x14\x02\xd10X\x04\x9b\xc6\xd8&6\x9d<\xed\x1cC\xc0\x10\xc8\x0f\x02e\xf8\xfe\xd2\xff\x1fo\xdb\xf7\xa8\x93\x1f\xdc\xed\xaa\x19!\xb0\x8c\xa5Q\xad[j\xe5\xa5\xbf\xbb._\xff\xcb+\x19\xe5\xc5\x93I\x02\xba9\xae?\xf8\xd4+\xf2\xeb_yRj\xe9\'r\xc1\x94\xa0\x8c\xc1\xb5\x0c\x0c\x01C\xc0\x10(B\x04\x12Y\xf81x\x07\x03+\xf6wOJ\xf7\x9b\xa3r\xf1\xc40\xa2\xf4\xf6\xc9\xe57hw\x14#\xe8X8\xcf\xcay)\xd59\xb05\x0b\xbf\x18\x8cR\xff\xca\x8e\xd9%\xaas\\\xab\xc8-\xc9;&g\xe1w\x01\xfb\xd1\x16~\xb1k\xd7\x9c5\x8b\xcb\x8b\xdb\xb5\x8c-~\x8c\'F\x00\xc6C%\xbf\xbf\xf1\x01\xf2\xa1\xd2|\xad\xcf/\n\x7fK[|\xfeO\xa6\x10\x05x~v\x19\xe4\x18\xac\xe3\xb0T$\x97\xcbci\xc1\xc5\x08\xac#=\x9e\x05\xa0\xda\x0b\xa7}G\xf1O\xe42QZ\x16\xb6u\xd4A\x19\xa6\x05 |\x00\xe6\xc3\xdc1~\xf1\xec\xd7\x0c\x11\xe0\x00g\x0e3T\xfb\xefk\x93W\xbex-\xb5N\xc8\xbd\x04Cp\x92N\x1fI\x1b\xeb\xd1L\x82\x08d\xa511\x04\x0c\x81\xe2B\x80\xaa\x12\xa5\xac\xacyy\xd3\xabp\xc4\r\xb5\xad\x12*AFZ\x81\xa2g\x1f\xf9@\x00:J\r&\xa0\x161\xa1\xf5\x17\xff\xea\x84\x96 \x1b\x93\xb2\xec\xe2\xe8p}nzQ>\xff{g\xe5\x87\xff\xcd\x032\xd0=-\xb4\xd601\x04\x0c\x01C\xc0\x10(}\x04\x92\xb1\xf0;\xfbb?,\xfcF\xa5\xe7\xc2\x98\xccL\xae\xe5\x8b"A\xa7\xd0W\xd1"\x1d\xf3U&\x99#@\x14\x81\xa8jn\xe4\xdeb;f\xfa\x00y\x01)\xda\xc2\x8fF`\xb1\xc2s\x99\x17\xd3m-\xfcbO\x8c\xfd\xce\x8cL\n\x0f\x01W1\xba\xfd\xa2\xb9\xef\x19\x97t\xf0\xea\x94l\xbd\xa3I}\xc5\xe4\x92\xfa\xa8\x04\xa59\x8f\xa8\xbc\xce\x9c\xd8\xf11\x19\xdfP\x9c\x0c6n\x87\x05 \xae\xa7\xcb\x8csy\x93q\xcab?e\x11\x01<\xcb\x05\x98\xa3\xef\xbb\x9fn1S\x146\x95|\x8b\xd8\x93\r\x83\x84\xde\xd1$\x02.\xd0\xc4\x100\x04\x8a\x0c\x01\xaaP$5\xd8\xb6\x97S \x0c\xb6_h\xbe\xc2u!4e\xf0\x83\xca6\xcd\xa4\xe8\x10X\x81b\xd2\x82\t\xa8\xaf\xffe\xa7L\x0c\xcfk\xf95\xd8G\x16\xee\xc4\xd5\x89c\x9f\xed\x94\xef\xf8\xf8\x01i\xdc\x10\x96YL\x9ai$\xc6,\xe4oY\x18\x02\x86\x80!`\x08\x14\x06\x024ra\x9bO\xd5 \xda\x87_\xb4\x85_\',\xfc.\xc3\xc2\xef-X\xf8]\x8ag\xe1\x87s5\xe0\x94RI\xf4\t\xe8Y\x94+UU\x18\xb7Y\x8c\xa5\xa0v\xe6\x92>\x1e|\xe7\xd6Y\xecQ\x8b\xa5\x0f?g\xe1\xf7\x0c\xf6\xe9\xc3/\xab\x16~\xc8\xef\xb6b\x04\xe0m\xe1\xc9\xdb\x1fYq(\x97\xbdM\x16l\xf5\xfc\xc1\xc3\xb5\x0b\xe3\xb2\x0b\x91TW\xc7a\xfd\x94#\xeb8*\xb7\xd5\xb0:\x1c\xec\xc9\r\xe3B\x1f8\xea\xfa\xc6\xa1\xe8\x83h\x9b\xe2F\x80\xd6\x9c\x0b\xf3+\xb2\r\x04\xb6\x13\xb7\xec\xc9}\xbf\xed\xd6\x1d|\r\xcb\x80\xef\xdf\xbcv\xfe\xe5\xb6\'\xdb\x1f\r\x01C\xa0 \x10\xa8@\xc3\xde\n\x0b\xde?;#2\x81~\x8cz\x95c>\n\xa2\x80\xc1\x16\xa2\x11n\x10*\xd8\x96\x99\x14\x1f\x02\xa8\xba\xf0\xd8\x87\x01W\xa5|\xf3\xf3\xddZ~\x06-c4\xdfl\x88\x06\xc7bP\x10,\xef\xa2\x1f\xa7o\xf9\xde\xbd2\xc3w\xa4\x0c}ef\x03O\xcb\xc3\x100\x04\x0c\x81\x82A\x00ciN \xd1\xb8\x85+\xf9\xea\x1a\xbc(\xbd\xaa\x03A\'\xe0d\xcf9\xfa\xf0[\xc7\xc2\x8f\x81\xa6\x9c\xd5\xb9Z\xf8e\xa9\xff)\x18\x9c\xf2S\x10v\xe2$\xf6\x98\xe2\xf9\xf0\xa3\x85\xdf7\x90h\xe1w\x12\xe9-\xa4\x01\xa4X\xc9\x9a\x85_l\xc6\xb1\xdf\x8d\x00\x8cE\xa40\xbe;m\x90\x0c1\xf73\xd6\xf69``\xb4\x9fnD\xf1y\xcf\xc7h\x1e\x97\xc3\x1bEk\xc5\xe8B\xc3=\xb1\x01j\xb2[\x86U\xdf\x18\xb6\xa9\xadN\x1d\x9df7w\xcb\xad\x10\x10X\xc22\xf2\xda\x9aj\xd9}\xa4E\xbaO3"\x15_\x8d\x14+\xf3%\xc4\xd6Y\xe49f\x1eZ\x08\xcf\xb4\xac\xcb@U\x81\xda\x1c\x85U9G\x932z\xbdb\xfc \xd1\xd7\x81 O\x9f\xbb(\xf2\xf7n~,\xc5\xf7\xbf\x18\xef\xdb\xaf\x1ah\xfe\xa4\x03\x81\x90\xaa\xd0\x85sb\xcd\xaaKq=\xcc\x15\xd4\xdf\xda\xc6*\xe9\xeb\x9a\x94k\xe7\xbd\x88\x8a\xee\xf5\xcf\xd6\x9d\xb0W\xa3*t\xe2\x99^y\xfc\xc3{\xa4\x82\xfenM\x0c\x01C\xc0\x100\x04\x8a\x07\x01\xa85j\xe1\x87\x12s\xbe\x8f\x06\x10\xd5\xe1J\xa9\xad\xf7\xa2\xf4.2Jo\xf7\x94\\\xf6-\xfc\x12\xfa\xf0\xc3\xf9\xb1\x16~J\xfa\xf9jg\xf1\x00RP%\xa5\xd2\xe9\x92j\xee\xf8\xce--\xfc\x98\xf87(\xa9\x9a\x9c\x0f\xbf\xd3\xf8\x9eS\x0b?\\\xef\xb6b\x04\xe0m\xe1\xc9\xdb\x1fYy(\x1c\xe1p\x81>\xd9\xe4\x8c\xc4\xf9\xc7\xeb\xb98\xee\xf9\x84\xc9\xa1N\xc81[u\r\x08\xc0\xbe9\xbd\x076f\xfc-\x9b\xe2\xe5\xe9e\xca\x10\xe6\x8b\x8b+\xe6\xde-\x9b\x00\x17H^+\xb0l\xa8\nU\xc8\xbe{\xdb\x94\x00\xac \x97\xbd\xd6\x85E\xfc\xd2\xbaJ\xd7\x89\x81\x17=\xdar\x19!\xb7&\x86@\xae\x10\xa0\xd2\xc5\x11?\xb7\x98\xc1\x15(t\x12F\xf3\x1ebE\xc6oK\x18\xba\xa3\x8e\x0b\xda/s\xbc\x12\xf5P\x88\x17\xad\x98\xe8\xbb\xf3\xf3\xd0\xab>{.\xea\x8f\xe5\xb1\xeb\x96\x89\xee{[\x1b"\xa0W\xca*\xd9@c\x00\x8b\xea\xe1\xaf\xc2\x05E\xb86$\xdd\xd7Gen\x864\x1du\xa1\xec\xf6A\xcb~~\xa7^\xe8\x87\xc5\xfc\xb2\xd4\xa0\x9d\xa1\xc3w\x13C\xc0\x100\x04\x0c\x81\x02F\x00\xcd\xb4[\xd6K+\xf1:\x04\xeb\xa8\xad\xaf\x16.z`\x0b>\x0bk\xeeS/\xf4\xc9\xb9\x97\x06\xe5\xca[cr\x1d>\xfc\xe6\xa6\xd6\x0e\x80\xcc\xc2/\x90g\xcc\x8e\x9a\x89\x8f\x82$_,\x8bB\x7f}/\xf8\x89\x16~\xa7\x90\xf2j\xe1\x87\xeb\xdfV\x8c\x00\xbc-\x82\xc9\x91^XH\x9f\xe8\x17\xd9\xb3A\xe4cw\xc1G%\xea\xa8\tp\xc4\x8b\xcbwuC\xad\xc8\x7f\xc5$\xea\x17\xaf\x94\x1d*T\xe89kOK\xfa\x03\xf7\xb7aY\xe7\xa2Mp\x15i-\xe0d\xe8\xf4\x987h\xa3\xb3uFj\xcc\xaa\xf8\xd9qYq\xe7\xa9Q\xd9\x87\xa0Y\x0b\xe3\x0c\x88\x96\xd5\xabXf\x86\x80!`\x08\x18\x02i"@\xb5\x86d\x1f\xe9$\x1a2\xd0\xc2/T\x07\x0b\xbf\x06X\xf85\xd5(\xb1w\x03Qz\x07\xba\xa6\xe5\xe2\xf1!y\x0b\x13:W\xb1\x82o\xad J/T\xca\x15\x9dO\xf2|\xf8\x99\x85\xdfZ\x94R\xfc\x85\xbd\xa8K$\x17\xd8{r\xeb\xf6\xb1+\xddH\xf4\xe1\xf7\x12\xd2W\x91H\xfa\x8d#E\x0b\x89B\x8a\xcb\x8b\xdb\xb5\x8c\xad\x1e\x92\xfb\x0f#\x00s\x8fy2Wd%\xa1\xd0C4M\x1d2&\x00\xfdIa\x19\xed\x9b\x91\x11X\xe2\xb5n\xad\x93%\xcc&\xd0\x92 \x17\x12\xc2\xb2\xcd\xa1^\x8f\x00L\xc9j+\xc9\xc29\xab\xc2&\xcc\x98\xa8\x03TZ\x00Z\x84\xd7$\xd1+\xa2\xc3P]\x17\x17\x97d\xcb\x9eF-4\x079\xee\xd9\xa7t\x17W\xd0\x91\xde\x0b?\x80\xf3 ^ld\x94\x12tvp\x1c\x04\x1c\xe1\xc7m\xb4e\x1f\xa3\xd4\xba\xc6\x97~V\xaeA?\xe8D\xea\x9a\xf0\x08\xbf>\x90~$\xa3\xa3\x85d\xe0?>\xe2\xa9\x1c\xcc\xaf\x9c\x85A{\xa0\x10\xab\xfa\xf5G\x88\x98\xfaB\x8f\x87\x06\xd50\xd7K\x96\x01>\xda\xc6\xe1>\x8f\xbew;|\xa06K\xffUFw\xcdM\xdf]\x06\xf0\xe6\xec\x16YeYu#\xa4\x1f\x1fa\x00\xef\xb8#\x8cO~\xbdO\xee}W\x87L\x8d@\x95\xb4~.g\xcf\xd9.d\x08\x18\x02\x86@,\x02\xe4\xfbV\xf5\x03\x8b>\xc2\xd5\x08\xd2\x14\x92Pm\x15\xac\xf9\xf1;:\x86\xc9\xa1Yy\xed\x85\x01\xf5\xe3\xd7}f\x14n"\xc6a\xcc\xb2\xb6\x83X\x13\xa5\xb7`(\xa5\xd8;.\xba\xef\x04\x9b\x89=s\xac\x82\xc5\xe5\xbb/#\x1dC:\x8eD\x0b\xbf\xabH\xb1\x12M\xfa)-\x1b{@\xa1|7\x02\xb0P\x9e\xc4\xdar\xb8!\x0e\xd7\x8d\xbf\x1b)\xa3\xe1\x0e\xe6\x05T\xf1\\\x82\xef\xb3\xa1\x1b3\xb2m_\xa3\xccp2\xc1UU\xec\x06%z#\x18\x04\x8f\xf5;\x0b\xc0\x00\xae\xc4W\x15\xafm}K\r,\x00kdlp.\'\xd6\x8d\x01\xdc\x89ey\x1b\x04\xe8\xcbr~jY\xdaw4H#\x9e\xf5\xd4\x18\x1c\x9c\xa7\xc2\x00\xba\xb7\xea2*\xff\x83[\x11D\xe06\x17\xb3?\x19\x02\xb1\x08P5H\xc5\xb2\xaf\x1f\xd6}\x17\xe1s\x92\x84\xf3U\xe8\x0f\x89\xac}`\t\xa4\xc2\xfc\xc71X\x9f\x03)\xc8\x01\xbb[\xf7\xe9\xfd\xb5\xbc>\x89U\x1b\xac\xfeH\x90\xfe\xfb\xd7\xe0\x10\x038:\xc9\xa87t\x99\x14\xc9\x16Uc\x85D(\xe4\x03\x9f<$\xd3\x9c\xb8s\xf5\xa5Hn\xc1\x8a\xe9!\xa0\xdd\x0f\xde\xf1\x10-Z!\xceo\xb1\xf7\xd7\xec}\xb2\xe9\xe0\n\xf1\x0b\xaf\x0eb\xf9/\xc2\x8e\xd0\xdd\x85\x89!`\x08\x18\x02\x86@N\x10PO/\xbe\xaeHc\x14,\\\xc2r^,\xebm\xac\x95pC\x95L\x0c\xce\x0b\x83r\x0eae\x9c\xb3\xf0\xeb\xeb\\\xeb\'_\x97\xf3\xa2\xc4\x9e\xeahQz\xb3\xf8\xf0\xa8TQ\xe3\xa6\xb0Cf\'\xc9\xad\xd79c\xba\x1e\xfb\x97\x91\xde@\xa2\x85\xdf+H#H\xd1\xa4\x9ecP\x98\x97K\xd1\x7f\xc7\xcf\x85+F\x00\x16\xee\xb3a%dEz\xcb/\xa27\x02H\xb7\xbc8\xbb\x02J\xe0*\x94\xc1\x1e4:\xf7=\x01\xf2\xc3U\xf3t\xf3L\xe2<\x1a\xbfp\xd9\xd2\xcc\xf8\xa2L2\xf20\xc5\xbdr\xde\xb7\xac~6\xb6\x84\xd1\xc0\x86\xd4\xda\x90\xcb\x9cMJ\x0b\x01\xce|-\xcc.\x81\x00\xac\x97\xf6\xed\rJ\x00:\xff\x96I\xdd\xa9#\x0b\xbb@\xc8\xe8\xa0\xc8\x06FI\xe1V\xae\x07\xb1\xadRM\x0e\xdbx\x96}\xfc;5\xb3d,\xfb\xa21\xa4?;\xb6\xe8L\xfc\x88%\x06\xbba%xg\xbb\xc8B\x99Z\xa8\xb2\xe3h\x87\xbf\xbf\xcb\xd0\xb7~\xfbu\x11.\xdb\xe7\xab\xaax\x11\xb3\xf2\x93\xef\xfd\x99{d\xe7\xc1\r2\x0cKz\xb5\x00(?\x08\x8a\xff\x8e\xa1\x92,\xc1\x82\xbd\xa9-\xac\xf7B\xff\x7f\xaeK\xca\xe6\xcd9\xc2\x98\x03\xcc^\xf8}n\xd9\\\x87\x08\x91\x0b\x18\x84\x9aN\x94M\x9c-/C\xc0\x100\x04\x1c\x02\xea\xbf\x8f\xa3v\xe8*!\xb8zi\xc4X4TC\x0b?*.\x152\xd8;-\xaf\x7f\xa5W-\xfc\xae\xc0=C\xdf\x15\x1a\x95\xad\x95*\x8csV\xd1T\xabe t\xc3\xa2a\x94\xd6\xdeJ\xa1\xfd\xc2\x07\xa1Z=\xb6\xe4\xbf\x1c\x81\xc7r\x92\xa0\xa0e\xdfsH/ \x91{\xe9B\x8a\x15\x9eCm\x94\xf9\x14\xf5\xa31\x020\xf6\xd1\x16\xc6wV.W1\xbb\xfc"e\xae\xb9\xb1\xbaB:\x115h\x19JhN\x96\xc8\xe2u\xa3\xcf\x9b)\x90\x7f$\x01\x03\x13\xff\xde6n\xa9\xd5\x08\xc0\x04\xd0\xa44\x11\xe0\xf2\xa9j\x90\xbb;\x0e6K\xd7\xe9Q\xa9\xf0\x9f}JwKk\xd4Q\x90+\xf0M\xa9M\xb8U\x98\x94\xe0+\xb9\x83Y\x87\x92\xb5\xec\x83\x12\'\x83\xbee\x1f-I\xaf\xc2\x8c4\x111\xe5,\xb5\xf4\xef\xf8p\xc7\xf9\x16]kpd=\xe41\xcc\xf7\x1e,Q\x8f\xaf\x1f\xae9\xadd~\xe0s 9\xda^\'\xf2\xcd^\x91?\xa0>F\xc1o$\x05\xcbH"\xc4\x10n\xfb\xe8\x93;\xe4}?r\xa7\x8c\xc3\xb2\xbdRu\xcf2\x02\xa2\x84n\x95\x16\xecs\xb3+\x98\xbc\xaaO\xcf\x82=I,\xf8\xaa\xd0r\x84\xcb\xc7\xae\x83\x04\xdc\xb6\xbf\x19~#1\xbeqZe\x92\xf9\xd8a\x86\x80!`\x08\x18\x02k\x11\xe08D\'p\xf0\'N\xacTBoQ\xff}pC\xc51\xef\x08&\xea\xae\x9f\x9fP\x83\x9b\xb3/\x0f\xca\xe9\x17\x07e\x1c\xfe\xf7c\x85\xe7Q\xe7c\x9b\xcd\x95z\xfc\xbf\xcc\t\xe1t\xc65\xb1\x99\x97\xf7w\x80\x18A\x91\xfc\t\xb5k&\xd7\x0brI\xc9E\xa4\x93H\xcf"}\x03\xa9\x0f)\x9a\xa8p\xe71/&JQ\x93~\xde-x\x9fF\x00F\xa3\x91\xdf}W9Y\xe1\xb8\xa2\xdf7\x97S\'\x93\x0c\x04\xb2\x11\x89MB\xdaD\xa0\x8b6w\xe5\xcd\x11YY\xaa\x90jX@E|\xd1 \xe3 d\x15\x83\xea\xaa\x9a\x90L\x0cO\xcb4\x97\xb6A\x82\x18\xc7\xb9{k\x83b\xbd\xa4\xfe\xff\x82\xb8\x1b\xcb\xb3\x10\x10\xe0\xc0x~zI\xee@$\xe0\x17\xfe\xaa\xdb\xeb,\x93-\x98\xab|\xf0\xb5!L[\xe0Kp\n\xf5\xd2,#\x92E\xb04\x8eS\xe5\n\x1f\xec\xd2\xb9^\xceE\xe3u>\xfb\xf8w*a\xb4\xec\xbb\xe2\xfb\xec\xbb\x81\xe5\x19\xf1|\xf6E#\xb2\x9ee_\xf4\xb1\xf1\xf6\x1d\xeb\xd3\tR\x11\xbea\xcaJ\xf8n2@\nf\xcd\xe5\xaf\xa0\x97}\xee\xbcw\xfb$Q\xf9,\xcaH8(pV\\\x0f\xbcg\xab\xfc\xe8o\xbeC\t\x9ce\xfa\xfb.ab0\xdb\x96}\x890c\x8bN\xd2\x8f\xe2\x1a1\xee\xd3\xaa\x90\x13&\\v\x9c\xfd\xe6\x92W(,!\xc1\xd7\x88\xe7A\xcb\xc8\xdf\x82\xbf?FC\xa6\x10\x9a\x12#\xff\xdc\xe3v\xcf]\x9f>\x1e3-\x99\x97Y\x07\xf0\xdf\r\n>\xf4\x93w\xc9\x07~\xec\x90\xccN,\xc9\xc2<\x03[)*\xf6Q\xc4\x08p\xd2\xb5\x02\xef\xf5\xae\x83-\xd2\x85e`iY\xb0\'q\xff\xee\xb5y\x03\x81@>\xf6\x0b\x88 \x8d\xa6\x8e\x83N\x13C\xc0\x100\x04\x0c\x81\xc4\x08h7\x0c\xff\xcbl/]\x84\xdejL\x12\xd7\xd6\xd7H\x1d,\xfc\x96\x97Vd\x00\x81\xb8\xae\x9e\x19\x93n\xacB:\xf5\x8d~\xb9\xf8\xda\xb0,.\xac5\x0eS\xff\xab\xc8\x87d\x1f\xbav\xed\xdf9\x91g\x921\x02\x04\xd1%j\xf5\xd4\x8e\x98\x1c\xe9\x07\xa5^\r\xa8H\xfa}\x1d\xe99\xa4\xabHX\xfau\x8b\x90\x07c\xcf\xe8\x1e\n\xf7\x99J^x\xe3&\xb9E\x80\x15\x94\x95\x95\x15,\xba\xb5h\xc1\xf7G\x91\x9e@\xba\x1f\xe9>\xa4MH\xd1\xc2s\xb3"\x97O\x0e\xcb\xdd\x8fw\xc8\xc2\x0c\x97\x14\xb18\x01\t\xee\xb2\x1aV5\xb3\x93^\x98".\x81q\xd6zA\\\xb1mk=\xa2\xc4.\x9b\x95D\x10\xe0\x16H\x9e4\xd8Z\x00i\xb3eW\x83\x9a\xdds\xb0\xcc\x81q4\x7fr\xdb\xa2:\x8b".\xe5<\x8a#\xb3\xf6V\xdd\xf6\xaa\xf6\xc7\\ \xc0V\x95Z\x1b\xb7\x89|\xf6\xb1\xa20\xd2\xee\x9b\x83\xb0\xee\xc3R\xdb\xcb\xb0\xf0\x0b\xda\xb2\xcf\xdd;\xeb\x1a++\x9b\\\x92]T9\xa2+\xae\xdb\x87\x82)\xc3(#\x94M%(K\xb9\x8e\x92\xa9hE\xb0\x0f.\xc9\xff\r\xf8Y\xee\x85\xa5%\x85\xf7L|\x8a\\\xf8\xb8\xd9\xef\xb9n\x96\x91\xcbU\xfcg\xad\xdfX_\xa3\xe4\xa1\xf7\xef\x94\xef\xf8\xf8\x9d\xb2\xf7H\xab\x8cb\xd9\xafZ\xfe\x95r\x1d\x88\xba\xf7R\xdf\xe5<\xc4\xdc\xe4\xa2\x1cz\xc7&9\xf6?:S\xb3`O\x01\x1c\xa7g\x8d \xe8\xdb\xf5\xf3c\xd2\xb1\xb7\x19\x01d\xe6a\xbd\x12\xa0\xbe\x97B\xf9\xecPC\xc0\x100\x04\n\x05\x81[#\xf4VJ\xb8),5u\xe0\x92\xfc\xee\x9a\xc1\xb7H\xf4\x9d\x87\x85\xdf\x957\x87\xa5\xf7\xd2$V\xb5\xb9\x85z7\xefB\xfb{\xae\x04A\x9f\xae\x16~\xae\xbf\xbfy\x88\xed\xa5\x8f\x00\x9f\x06\xb5%n\xc9_\xc5jE]\xf8\xed\x18\xd2\x0bH\xf4\xe1G\x0b?\x0c\xf4n\x11\x9eC\x92\xd0\xe5U\xb61\x94\x8d\x00\xbc\xa5^\x04\xf6\x85\x1a\x17+\x9d\xb3\xf4s\xc4\xdf\xdd\xf8\xedA\xa4\xefBz\x0c\x89$`t\x85v\xc79F\x1b\x7f\xceL\x1c\x01w\xfa\xa5\x01y\xf0;w\xca\xc4\x10\x06]Y\xcb}m\xd9\xf8\x86U\xa2\x96M\x8e\xe1:\x10\xce\xa6\xac\x06\xf8\xba10\xc4\x92Z\x00\x9a\x92\xab\x80\x97\xe8\xc7\n\x08\x92\xaaP\xb5\xec\xbd\xa7U.\xbf\x81@\x01\xecu\x1dy\xb2\xde=\xbb\xc16\x03-\x90\x84q#\xf3\xf5\xce\xb3\xbf\x17\x0e\x02\xaa\x02\xf8\x0f2\xda\xb2\x8fKH\x99\xa8\xb8\xcd\xa1\xf9\x8ck\xd9\x07\xc7z\x89\xea\n\xc9a\n\xab\x05?t\x8b]\xad\'\xfc-Ia6\xac\x93\x14^\xcb\xe5\xc3-\xbf\xbb:HE\xb1\x05\xfe\xee\xe0\xa4_\xf6\xa3\xf9\xdf\xdf*\xb2\x0bV\xa9\xb4PdW\x00w\x06\xb7\xf4\x08\xcc\xaf\x94\x84\xe4\xdfF\x90\x7f\x17@\xc4\xfe.\xfc\xfdM\xa0\x9fp\xef\xb2\xc3\xac\x08\xef\x97N\xbcW\xf0\xf8\xe8\xfc[\x1f\x7f\xf43\xf7\xef\xa7\xb6\xbe\n\x03\x8c\x90\x84QW\xc3XJ\xb4ew\x93\xdc\xf5\xf0&\xb9\xe7]\x1d\x1a\xe0hq~Y\x06{\x10\xf0\x03u\xc4U\xa5"\x84\xc2\x8a\x1c\x8b\x00\xda+\xfa\x01<\xf8P\x1a\x16\xec\xb1y\xad\xf3\x9d~\x00W\xf1\x8e=\xf3\x17W\xe4\x9f\xfd\xd6\x83\xba\x12\xc3\xba\xbbu@\xb3?\x1b\x02\x86@I#\xe0\xfc\xf7\xf1&\xab\xd0\x1es\x8c\xea\x96\xf4\xd66\xd0e\xd5\x9c\x0c\\\x9b\x96\xfe\xae)\xb9tbXN\x7fc@\xaea\x12%\x9ep9/\xc9Cv\xf4^_\x8f]#\xfd\xe2A\x95\xeao\xaa-\x13Y$*\xd3\x8eGq\x8c\x05Q\xbf\x80D_1\xcf#=\xeb\x7f\x8f%\xfc\xf0t5\x0f\x1eOa~\x01\xb2\x10z\x8d\xa2\xf8 0&\xc1!\xc0J\xcb\xca\x1a]\xd9:\xf0\xfdCHO!\x91\xf4\xdb\x80\x14-\x8e$dew\x15=\xfa\xef\x19\xed3\x14\xf92J\xd3yrD\x15C\x9d\rv\xafWF9\xc7?\xd9\x8d\xe5\xc6\x07\xb0\x9c-(!\xca\xbc\x07H\xcb\xe60\x96\x00\xaf\xa8[/\xef\x17\xfb,E\x04\xe8s\xa3\x92\xcb\xa8\xeejQ\x02\x90\x1cP\xd2\xcb\x9b\xd8KS\xba\xb1\xcc\x92\x04\x04\xdf2\xff\'\xfd\xdd>\n\x0f\x01U\xb0\xf0\xc1m"\xcb>>\xcb\\\xfb\xecsH\xb1\rr,\x8dj\x81\xf8\xee\xea\x99;\x86\xdbVD\xff\xdc\x07\xa2o7\x9a}LV\xa8\x0f\xca-\xd8:K\xbfy4\xce\xb0`\xd6\xa9"\xd4\xf1\x92\x16\xe2\xb3\x19\x91~_\xb9!\xf2;\x88\xf4Kq\xd6\xb9\xde\xb7\xa2\xfb\xd4\t6\x94Z\x9dx\xfb\xa5\x0f\xc1\x97\xe3\xc1\xa3\xed\xb2\xf3\xf0\x06\xe9\xd8\xd7$-\xedai\xdeX\'\xf5x\xe6\xb5MUXVT-\r\xd8g\x15\x9a\x85\x7f\xb8\xf9\xe9e\x19\x83\xb3\xf0U\x8c*,jk\xd1U\x81u\x0bL\x03\xbc\xc5\x05D\x02\x06\xf1\xdd\xb1\xbbQ\xfa\xba\xa74`\x07\x89\xba\xec\x8b\x97\xe7\xcb_\xbc&\xdf\xf5\x13wI]SH\xe6\xa6\x16\x95T\xce\xfe\xb5,GC\xc0\x100\x04\n\x10\x01\xaa\x8e\x18 p\x8c\xe0\xfc\xf7\xd5b\xd2\xad\n\xba$W\x10\xb1\xbf\xee\x87\xdf\xe5\xf3\xaf\x0c\xcb\x85\xd7\x86\xa4\xe7\x12\x82w\\\x82\x81@\x9c&\x99\x93*l\xc3=\x8bA\x9ckd_6\x1f8\x11g\xa2\xf2\xcb\x91\x19y\x90ha\x90\x8e\x17\xfcD\xeb>&\xc6H\x88\x16\xc7\xbb\xb8|\xa2\xf9\x97\xe8\xe3\xca~\xdf\x08\xc0\xecW\x01V>VZV`V@V\xbe6\xa4\'\x90~\x00\xe9[\x91\xa2\x1d\x8f\xf1\xef<^\x87\x90\xd8f\x9d\xf4C\x9e\x11\xd1\x99\n|\xeb\xeb\x9c\x96\x1b]\xd3R\xbf\xa1J\x07\x1c\x95n\xf0\x1a92;;\xccv\x05\x03\xbd1\xfa[\x0bH\x08\x1c\x81v\r\xfa"\x07\xd1&%\x8d\x00;\xf2*\x04\xee\xd8}\x08\x16S\xa9\n+\x0b\x85\xfe\xde\xe8\xff\x8d\x01@\xb8\xe4\xd2$\xff\x08\xf018&7e\xcb>\x10\xba\xee\xd9\xc6\xde\t\x89%\x8a\xfe\x1d\x1f\xee\xb8\x8c,\xfb\x98\x9f\x9f\x117n\x9f\xd7\xa1e_\x1b\xac\xfa\x18\xcd\xd6Y\xf6\x91\xf4\x83\xd2\xa9\x04f\x8831\xb8YXy\xc9,\x82\x8eM\xfa\x13$ZL\xd4G\xf6\x08\xa5,\x8e\xfc{\xf6\xaa\xc8\x9fP\x87\x83\xf0\x9e\x03!A4\xf7@?t\xa2\x0bWp\xcb.[a\xd1y\xdf\xb7l\x95G\x9e\xde\x85h\xe5\x1b\x84$`\x08V\x9d\x1a\x04\x02~\x82\x16\xe1\xcf\x8f\x03\x87\x15Xx\xce\x8c/\xca\xe4\x08\x9e?\xaa\x03\xab\xb3|f\xbe\x82W\x9e\xbe\x91\xdf\x86:\xf2\x0f\x9f\xb9\xa8\xcf\xdd5{\xd9,\x97\x0ex\xd1\x16-\xc0g\xee\xb1\xcfu\xc9w\xff\xe4\x11\x99\x05\x01hb\x08\x18\x02\x86@)"@\xd5\x82\x93gT\xc9\xd8/\xd3\xc8\xa5\xba\xd6\xf7\xdf\xd7\x04\xff}\xd0\xbb\x86\xaeN\xc1-\xc2\xb8t\x9f\x1d\x95\xb3/!h\xc7+\x832\x13\xa7]d\x7fM\xd1<\x99\xa3\xe6M\xc2P\x7f\xb6\x8f\xcc\x10\xe0#r\x89@\xab\xf6\x83\xad\xdbg\xee\x97\x91h\xe5\xf7M\xa4g\x91N!a\t\xcf-\xe28\x13\xf7T\x98\xa7\x91\x00\xb7@\x14\xff\x8b\x11\x80\xf1qI\xf7WVDZ\xf01Q\x0e!\xfd\x00\xd2\xfb\x91\xeeAr\xc2\n\xcacx|N\x9f\x817\xcb\\!3\x93\x0b\xd2\xdf=\xa9K\x8e\xe6\xe0`\\-/\\\xe9\xb2\xb8\xad\xc4`\x86\x8d\xf1\xd8\x80\xb7\x04Xi\xd1,\xe6\xafY\xe9\xe8k\x15\xd6\x7f\xb5h\xf01\xa3S\xa4\x83\xc8l\xc3R\xd2\xf9\xa1\xabX\xc2@z\xd3nXOA\xe8W\xcb\xaf\x06\xa9\xddv\x0f\xfa\x12.\xb9\x84E\x86\x8e\xbaS;\xdb\x8e\xce\x14\x01v\xd9\x1c\xa5r\x9b\xd0\xb2\x0fM\xe55<\'\x8d\xc6\x8be\x18\x08b$\xfd\xf0\x13\x17Ga\x8b\x14\x87\x04\x9cS-\xb8\x93n\x9b@U\x84\x15\x8b\xa2\xf9\xe1#\x9a\xe8\xf3\xfe"R\x8f8M{A\xf0\x1d\x80u\x1f\x03\xcb\xd0\xaaO-\xfb\xf0;]\x128\xcb\xbe9\xde+\xea\x9a\xd3 5\x7fT\xe6\xb2"{\x80\xc7&X\xfe\xfdC\x97\xc8\x7f\xa1\x9b\x16\x08q`\x1d(B\x89nw:\xf66\xc9\xfb\x7f\xf4\x90\x1c}\xefVi\x84\x85\xd74\x82_-\x82|\x99\x87e\x1f\x1d\x87k\x1d\xc2=zD\x1fo\x9bL\x1f\x1e?\x9f\xbfSc\x8b\x10\x03+rj\x08\xe8\x00\x15k\xc4\x0f?\xb2E\t\xc0\xb4\xfb\xaf$.\xeb\xf4\xa1\xbf\xfd\xa3s\xf2\xad\x1f\xdd\xab\x13\xa5\xf33\xcb\xd6\xdd%\x81\x9d\x1db\x08\x18\x02\x85\x8f\xc0\n\t?\x7f\xd4\x1d\nWK\xed\x86\x90\xd4`\xd2\x8d\xbf\xad\xa2\x7f\x9d\x1e\x9b\x97\x93\x08\x86t\x01\x81::\xdf\x1a\x96\x1b\x97\xa7\xe0\x0e!\xce\xaa4\xed\x8b\xe16\x01\xb7L\xf7\x1d\xae\xed,|\x04\x8a\xa6\x84\n-JKm\x0fJ\x8f\xa6\xe8\xc2\x8f\xe0\xcb\x8bH\xc7\x90\xde@"\xe1\x87%"k\xc4iK\xcc\xcf\x7f\xf2k\x8e\xb1\x1f\xd6A \xa7\xe4\xd3:e)\xd6?s\xe8\xc2\x8a\xccJ\xc8\xc4\xfd\'\x90~\x04\x89K}1\xd2Q\xe1\xdfx\xacKy\xc3\x9e\xfe\x0e8\x06\xbd~nL\xeeyl\x8bW\xba\xa0>\x81\xc6\xear\x85.i\xe2%\xf8\xb6\x06%-\xb0\xba\xa8b\xb3\x10\xe4E\x82*\xbc\xe5\x9b\x12\x02|\x89\x18\tx\xe3\xd6:\xa9\x81/\xad\x05\x0ch\xbcW+\xc5\x87\x0f\x12\\\xfd\xae\x81O2\t\x10\x01v\xf7\xce\xc4\x85\xec\x07[I\xa6\xdb\xf9\xec\xbb8\xea\x05\xe9`D\xdcD\x8f5\xd7\x96}\x84\xa8%\x0c\x02\x0b\x96}\xbbA\xf6\xdd\x89\xb4\x17\xa9\x19\xbf\x91\xc0\xacA\x03D3\xeb\xf5,\xfb\xca\x8a\xf0#h\xbe\x90j\x8aL\x1c\xf0\x99d\x88@\xdeH\xa8\x0c\xcb](\xa7\xb3b\xb2"2q\xff\xc3H\x9f@z7\x92\x13WQ]%v\xbf\xe7o\xcbW\x12B\x13h\x9aC\x07\xb9\xd4HuZX\xdfD|\x00\xc6\xb3\x9e\xf1\x8a\x93\xf6\'[\x14\xb6\x08\x9e\x05\xa0\xe7\x90\x95K\xa8LJ\x17\x01\x9a\xf5\xcf\xcf.I\xdb\xd6\x06i\xeb\xa8\x93>t\xf0)\x05\x98\xa1\x85\x18\x97\x7f\x92\\\x82\xd2`\x92e\x04\xb4\xdb\xc7\x07\xb7\x85n\xd9\xc7[\xa7\x85`\xbc\xb6I-\xfb`\xd1G\x92og\x93g\xd5\xb7\x19\xd6}\x18\xb4\x0b}\xbf\xc0\nU\xb0\x9cS\x83u\xcc\x95\xbbe\xdf:u\x88\x18\x93\xfc{\xfeZi\x90\x7f\xb8]Z\xd4\x87@b\xff\xd4\x1f="w?\xde\x81\x89\xae\x19\x04\xd6\x9a\xc7\xe0\xa4\xc2\x08\xbfu\xaaC9\xff\x99K\xcbh\x85G\x8b\xd1\x83\xefh\x97\xd7\xbe\xd4\x13,\x1fW\xc1\xf6M\xe4\xab\x7fvI\xde\xf5\xbd{\xe0{\xb0\t\x8e\xee\xe7QG\xa9=\x99\x18\x02\x86\x80!P\x98\x08p>u\xd5_1\x11\n\xdf\x8c\xce\xcb\x96\x8b\xfe\xfb\x960\xb1q\xf5\xdc\xa8Z\xf7]:1\xaa\xfe\xfb\x068\xb1\x1fGtI/\xc6\x86\x9c\x8b\xa6\xbb\x0e#\xfb\xe2\x80\x94\xf9O\xd4\xfa\x99\xf8\x88b\x07Wdb_F:\x86D\xb2\x8fK@\xba\x91b\x85\xe7\xe9#\xc6\xd6q(\xb1\xc7\xd8\xf7\x0c\x110\x020u\x00Y)I/\xb1R2\xc1\x14D-\xfd~\x1a\xdb\xa3H\x14\xa8Z\x9a\xe2\xbd\x00z@!|LO\xc0\x17\x0c\x060Are\xb4\x80\xa0\x83\xd5\xc8\x12\xe0 n\x9c7\x80\xe6\xa6\x15V9\xba\xb4J-\x8d\x82\xbc\xab n\xc2\xf2L\t\x01\xbcY\xb4hhn\xad\x91-\xbb\xe0H=\xc1\x0c_\xc2<\xf9\x86Rz\xe3\xcf\x0cz\x7f\xb4\xcfu\x11`7_*\x96}\x0c\xd0A\x9f}$\xfb\xe8\xb7/b\xd9\x87\xcaF\x9f}l\xcd\xd5\xb2\x0f\xcd\xbe\xab7\xfc\x8d-\xa8kn\xca\xd5\xb2\x8f0\xdcNH\xfe\xb5!\xda\xef\xa9\x01\x91\xffx\xd2;\x92\xd8\xb9\xf7\xf0v\xe7\x16\xe0\xdf\xd8\xcf\xb0\xda\x93@\xf9\xf9\xbfxB\xf6\xdc\xd7\x8a\xa8\x81Sp\xfdH\xe2O+E\x01\x96\xda\x8aTH\x08T\x80\x94\x9b\x83+\x96G?\xb4K\t@.9\x0bJ8\xb7\xe1\xacU\xff\xfcW\xde\x90O\xff\xd9\xbb\xa5*\xc4J\x1c\xdc5\x83\xba\x17\xcb\xd7\x100\x04J\x0f\x016E\x9ek\x04\xb6UP\xa9|\xeb\xbe\xdaFX\xf8\xc1wr\xb8\xaeZ\xc6\x87\xe6d\xf0\xfa\xb4\xf6\xb5\x97\xdf\x18\x91\x0b\xaf\x0e\xca%\x04\xb4T\xba)\x06\x92J\xdf\r\x8c\xe6KE\x03\xffuI/uV\x93l!\xa0#\x00?3j\xc1T~\xb8e\xa20h\x07-\xfc^Cz\x16\x89\xe4\x1f\x97\xf9F\x93z\xee\x86\xf4cH\x0f!9\xe1\xdf\xa2_\x00\xf7{\xc1m\xd5G\x02\xdeW\xbe\xc1\xeem\xcdj!\x91q%\\`\x91\xa8Y\xa4\xa5\x0c$H}s\x03}\x00\x82pT>"v\xde!\xab7f\x99\x15\x02\x02\xf4\xed\xb1\x00\xdfjt\xb2O\xff\x1ei\r\xa0F\xe1\x9b\x12~\xba$\x84\xd7\x99\xb3\x8c6v\xbf\xfd\xa3ec\xc1\x17\x8c\xdbT,\xfbn\x80h\x9d\xb9\x8d\xf3\xf9 |\xf6\xf1NH<\xc5kt\xa2-\xfbv\xc0\xb2\xaf\x03V}\t-\xfbp\xb3\xcbQ\xfebh^lD\x1f\xd1MN\xd8c6\xd6\xc0\x93\x0b\x96\x1d\xfe\x16\xf5@HP\xcb\x1d\xbd\xdc\x83\xfdD\x1b\xe18\xef\x9f\xfa\xe3\xc7d\xdf\xbd \xff\xae\xce\x80P\xb1\xc6#X\xe0K+w\x0epg\xa6\x97\xe4\xce\xb7o\x8e\xdcX\x90\xaf\x85\x8b2|\xe1\xd5!\xb5\x04|\xdf\xff\xb6\x1f\x03\xe9\x19\x8b\x08\x1cA\xdfv\x0c\x01C \x97\x08D[\xf7U\xc1\xba\xaf\xbe1\xac.}\xb4\x0c\xd0\xdd\x161v\xbc~nB#\xf3^~sXz/MJ/\x96\xf7\xc6\x13\xb6\x9dt\xad@\xdd\x94\xd6}\xb4\x0e4\t\x04\x01j\xffLTxbG\xdat\xf6\x7f\x1c\xe99\xa4W\x91N#1\x88G\xacD[\xf81/\x93< `\x04`r\xa0;~\xccU\xd4\xef\xc1i?\x87\xf4v\xfft\xb2[|\x19x\\\xec\x0b\xe1\x1fR@\x1b\x96\x12w\xb2yw\xa3\xe7|\\G3\xee\x16\xb3WN\x82E%w\x82$K\x80B\xe0)\x1b61\x08\x885\xfa\x1e\x1a\xa5\xffI\xf7o\x8cn\xb8\xeb \xac\xb5 \xf1x\x9e\x84(\xb8j2\x8a\xe8\xd4\xa3\x08*\xd1\x86\xa5\x89KX\xc2\xa9&\xa4\t\xcf*\x9f?\xf0\xe5u,\x87N\xc7\xe2;\x9b\x88X\x9f}C\xc0\x8e\xc4\x0e#*\x17\xaa\xcf>\xb3\xec\xcb_\xbde=\xa2_D\xd6\xa5\x7f\xff\n\xde1l\xf9\xe2\x92\x98-R\xa1?\xb5U\xfc\xfb\xe0\'\x0fk\x14W\x06\xd3Rk\xaa"\xbd\x1f+v\xfe\x10\xe0\xe4h\x03|W\x1d~h\x13\xa2Q\x0e\xa2\xff\xc1\xbb\x91RG\x96Z\xd9\x9d\x15\xe0\x7f\xfb\xd5\x93r\xe8\xc1v\xe9\xd8\xd7,\xe3\xc3s\xd0\x03\x9d\x16\x95Z~v\xb4!`\x08\x18\x02\xeb!\xc0&m\xadu\x1f\xd4IX\xf6\xd1\x7f_\r&d\'a\xdd7\x00\xeb\xbe!LJt\x9e\x1a\x96\xb3\x88\xccK+?\x06H\x8a\x95\xe8\xa5\xbcl/5\x7f^#\xce\xb1\xb1\xe7\xda\xf7\x94\x10 \xf8\xd4\xe2(\x1c\x01\xb0\xa3\xe0\xd6\x11\x06C\xd8\xa7\x85\xdf\x1bH\xcf"1Z/:2\x89\x9e\xed\xe79\xe4E\x98\x8f{\x98\x9eE\x10~0\xc9\x1f\x02F\x00\xae\x8f=1\x023\xa0\xf2\x04>\xff\x05\xd2\xfb\xbc\xafZ\x99Y\xa9\x0b\x9f\xf4\xf3\x0bL\xfd\xd25\xa8{\x8e\xb4z\rg`w\xb0"\xd5@o\x12>\x91\x02\x13\xdc\xcf\xb2?\xd3S\x8f\x10\xefK\x1c`\x9a\x94\x07\x02 \xa6\x16\xb1$s\xc7a\x8f\x00L\xe9\xa6\xa91\xb0[b\xdd\x81\xc3~\xd9\n+0pYe+\xda5\xe3\x83\xdbh\xcb>.}%Y\xc3\xdfW\xd0g\xbbh\xbc\x9dc\x1e\xf1\xd7\x07\xe2o:\xba\xaf\x8fA\xb0\x10,\xfb\x18\x8d\x97$`\xb4\xcf\xbe\x05\xdc\x10#\xf2\x9ae_\xcc\x03\xcb\xf6W\xd4\x1dD\xe4\x93\xff\x17\xc1\xdc\xfaA\xb6k\x07\x84\xdf\x8aT8\xf0\xe02\xa2\xad\x88>\xfe\x81\x1f;$#7\xd0h\xd8\xa4A\x91>\xcd\xfc\x17\x9b>\x98i\xf9r\xcf\xbb:\x94\x00dUr\xf3.A\x94\x8eV\x80\xae\x0e\xff\xc1O\xbc,\xbf\xfc\xd7\xef\x91\xba\xfaj\xf5GH\x1f\xba&\x86\x80!`\x08d\x8c\x00T\xab\x154d\xae-\x0ba\xf9n\xb8\x16\x91y\xeb\xaaT\xedf\x1f\xba\x8c\xb1Z\xcf\x85\t9\xff\xfa\x90\\>1\xa2\x96}\xbd\x97\'q\xceZ\xfd`\x8du\x1f\x8f\xa1Nj\x12\x04\x02|\x00D\x97[\xf2\x1f\xd1=\x03\xb9\x10(s\xf2u$\xcc\xe8\xaa\x0f\xbf\xb7\xb0\x8d\x15G\x12\xba|\x1c\x87\x12{\x9c}\xcf#\x02F\x00&\x06\x9f\x95\x9e,5+\xee.\xa4\xff\x13\xe9\x13H\xc4\xcc5=\xac\xe4\xd1/\x07\xbe\x16\xb6\xd0D\x9a\xb3$\x8d\xf0\x9dF\xe7\xd3\x0c\x8f\xaef\xd3A\x14\x1b\xcd\x07-\x00\xc7G\x82\xb3\x00$\x87C.\x87\xc2(PJn\xba\xb9\t\xefg\xfb,Q\x04\xb8\x12saaU\xda\x11\tX\x03\x808;\\\xbf>\xac{\xdb$\xa7H\n\r\x81\x98(\x17\xbf]\xda\x1d\xfb\xcdWR\x96}X\xba{\x11d\xdf\x15\xa4B\x8b\xc6\x1b\xcf\xb2o\x03\x88>>W\xf3\xd9\xb7n\xf5\x0f\xfc\x00\x92\xeb\xf4\xfb\xf7\xfa\x80\xc8\xd7\xaez\x97s\x8du\xe0\x17\x0f\xe6\x02\xeaC\x08Y\x7f\xec\x17\xee\xc7*\xf0\n\xb8\xb6X\xb1%\x94\xc1@]6\xb9.a"b\xdf=mz\xbf\xd4_\x026\x02T\x02\xbb\x02\x17\xe9\xbb:)\x7f\xf8\xa9\x17\xe5\xa7\xff\xe4qL\x9c\xce\xa93}\xb5\xac)\x1b\xe4\xedF\r\x01C #\x04\xd0\xc5G\x13}\x1a\xf5\x1ezy5&5j\xeak\xd4\xba\xaf\n\x13\xca\xa3\x03\xb3\xd2\xdf=%\x83\xd7\xa6\xa5\xf3\xf4\xa8\\zmX.\xc3w\xdf\xd2\xe2ZC0\xb3\xee\xcb\xe8\x89\xa4z\xb2\x8e\x08\xfc\x938r\xe6\x90\x9a\xc9\xf1\x1aP\xfc\xd5\xc2\x8f\xa4\xdfsH\xcf#\xf5"\xc5Z\xf58^\xc4\x8d\xbe\x98\xaf?\xd0\xc0\x9eIA"`\x04`\xfc\xc7\xe2\xc8?\xfe\xf5\'\x90\x18\xe0c\x0f\x12\x85-\x96{9\xf4\x87b\xfaX\xf5\xdb\xdb\'\x7fp\xbf4o\n\xa3A\x86\xef"\x0e\x98\x03\x10\x8e\xf5\xaaj\xb0\x04\x18\xd1\xe6Tx\x19\xd7\xb6\r|v\xf1\x9e\x9f\xf3\xd9wG\x8b\xc8vXk\xd2\xaa/\x9ee\x1f#\xf2\xd2\xb1\x8cY\xf6\xe5\xb7"\xf3Y\xa2\xed\x97\x05\xcc\x9f\xfd\xd73^Y\x82f6\x02\xbecg9u\xf0\x1d\x9b\xd4bk\x04\x83\x1au4\x1e\xf0u-\xfb\xd2E\xa0\x12\x930\xd3S\xf3\xb2\xf3`\xb3F\xb3\x1f\xe9\x9bM\xad\x0fK\x13\x1a\xd7G\xbey\xac_\xfe\xfc_\xbd!?\xf4\x7f? C\xbd3\x9e\x1f\xdd\x12\xec\x06\xd3\x84\xc9N3\x04\x0c\x81\x18\x04\xd4o\x9f~`|\x87@Bu\xd0\xcd\xc2\xb0"\xae\xc4$\xba\x1a`\xa0\x9f\x9fA\x80\xc9\xf3X\xc2{\xe5\r\x10}\xa7F\xa5\xbfs\x12~r\xb1Z$\x8eP-pF(\xf4\xe3m\x81:\xe2\x80\x94\xdd\x9f\xa8\x9dqD@\x89\xe52h\xf0D\x85\xed9$\x06\xec8\xed\xa7\xd8e>\xec%\x98\\^f\xe1\x070\x8aM\x8c\x00\xbc\xf5\x89\xb1B\xf3\xc5 Mv7\xd2\xbfE\xfa\x00\x12\xc5\x11\x7f\xb1/\x8c\xf7\xd7"\xf8$\xd1\xc7\xe5\xb2[\xf64\xca\x93?|H\xc6\xfa\x83\xf7\xfd\xc2\x01\x12#7Q<\xaa.\xcb@\xf9\x99\xd6\xc2\xc9|}S5f\x94\xd0\x1e\xb1G1)\x0b\x04\xa8\x87\xd0\x12g\xc7\x9d\xcd\x1e\x01\x88\xbbf\x8f\x94\x94\xb8\x03{\xb0\x8c\x8f\xfb\xc5<\xf0a\xab\xe5\xd6[\xacg\xd9\xd7\x03B~\x00\x96}\x97@\xf6]F\xba\x06\xf2\xcfa\x11\x0b\x1c\xfd\xb5Q\xf4\xef\xf8p\xc7\x91>"\x17\xdf\x18\x92\xbeN\xe8\x97q\xc4\xac\xfb\xe2\x80\x12\xecO\xd4\xb09:\xa0p\x84\xa3\x9a8\xb6\x8e\xc7\xc0\xf2\x0c\xb9\x82t\x0e\xe9\x98\x9f\xaeck\x16~\x00\xa1\xd4\xc5\x08\xc0\x9bO\x98X\x90\xc5\xe6\xf6\xa7\x90\xe8\xeb\xaf\r\xc9\xbd<\xee\x85\xc1OE&x\xe59P\xa1\xcf\x85:\x90d\x9f\xfa\x0f\x8fb,\xc6\xc8\xbc\x1c\xc0\xb0=\x08F\xd8\x81T\xc3\xea(\xe2\x030\x80A K\xcf\x16\xae\xb6\xbeJ\x1d\xc9\x92\xe0\xa4\x15\x98Iy \xb0\x8aAx%H\xa1\x9d\x88\x04\xfc"o\x99]\x9c{c\xd7\x85\x805\x07r\x83\x16\x80\xd8O\xe9\\\xef\xd4\xbc}\xf2\x1e\xa9\x99q\x9b\xc8\xb2\x8f\xf7Dr\x8f\xcbw\xbb`\xdd\xc7`\x1d\xf9\xf0\xd9G\x98U\x9b\xf4\xf1\x8e\x06\xad\x01\xd6\x88{@\xf4%e\xd9\x87\xe6\x99\x96\x9aN,\x1a\xafC\xa2\xf0\xb6\xb40\xa5\x9f\xc5\xbf\xbe\xec\x97-\xce\xb3/\xbcR\',Q\x15\xac\x1b\x96\xb1Ml\xc9gDs\x174d"\xd9\xf7u\xa4o \x9dD\xe2w\xff\xa9c\xcf\x13\x0e\xa2y\x9e\xcb\xcb,\xfc|`Jic\x04\xe0\xcda?+\xf8\x11\xa4\xdfE\xfaV\xff!\xf3\xa5 -P\x1c\x82WV\xa9/6\xba,1J\xce\x06\x9bco\x92\x7f\x8c\x92\xfb3\xff\xdf\xe3\xb2yg=\x96\xe5.\x04J\xfe9\xc08H\xe2`\x89\xc22\x055\x0c\xa4\tz=#I\xc1\xa7\xa1Iy!\xc0\xc0\xcf\x9bw\xc1b\x0c\xe2\x94\x97\xa4\x10p\x95q\x14u\x86\xbeHH(\xa9\x16\x94\xd4\xd9\xb99H\xbbq\xbfo\xd6iX\\\x96-Rt4^Z\xc3\r\xc3\x8a\xb1\x07\xef\xd9\x00H>g\xd9\xc7e\xbd\x89$o\x96}u"\xfb\xb0\x8c\x97\x84\xdf^$\xb3\xecK\xf4\x84\x8a\xf7w\xbeC-5"/\xc0U\xcc\x84\xdf\x1e\xbbw\xadH\xef\xca\x05\xcez\xd7w\xef\xd5~S\x837\x98\xf5_\x91>\xcd\x02+6\xfa\x9d\x99\xe9%\xb9\xfb\xb1\xcd9/\x98[\n\xcc\x0b\x7f\xf67N\xc9\x02\x02:}\xe8\xa7\xee\x96ID\x06^\x84oB\xb74/\xe7\x05\xb3\x0b\x1a\x02\x86@ \x08\xc4Z\xf6\xd1\xbcO-\xfb\xe0\xb2\xa3\x16~\xfbh\xddW\x89I\xe5q\xb8\xb8\x18DT^N\x08\xd0\xbd\xce\xa5\xe3Cr\xe1\xf8\xb0\xccN\xc6\'\xfb\xb8\x04\x984\x92\xe6\xcf\x91\x1e\xff\xe3\xcb\xaaQG\x81\xf9\xd0O\x1e\x81\x05`\x95\x8c\xc3\'_.\x96x\xb0\x15\x92\xcaU\x99\x1a]\xe0\x9eWH\x87\xb6\xf7K\xe6\x9f\xbcq\xe4Y\x8b\x99*Z7\x8e\r\xcf\x9aeF\xe6\xa8\x16M\x0e\xac\xfb\xf3\xb3KJn\xb3\xd0\x8c \xc6\xf7B\xdf\x83T\xee\x02\xca\x8et\x80D\xa4\xd5\x12\xebT\xbeD\xdf\x0f|\xf0\x05&!\x19F?\x1e\xeb\xb3\x0f\xefy^-\xfb\xa8_\xf8\xef\x9d\x02\x1d\x0flZ\xf6\xed\x83e\xdf\xdeV\x91m\x8d\x1e\xb6\x9b\x81o\x1b\x96\x85\xb2\xfc\x88\xde,\xf4\xd7\xa7>\xfb\xa0g\x98e_\xbej\\\x00\xd7E\xe5 9v\x8cz&\x84V\xe6|\xe6E*\xd1\xed\xc9\x83O\xed\x90)L2\x99\xf5_\x91>\xcc\x02,6\x9b\xf9\xc5\xf9%i\xdd\\/[0\x91\xd5\x0f_Y\x15\x98\xa0\x89\x17\r3\xa8\xe2;K\xc0\xbf\xfe\xc3s2:8/?\xf4\xaf\x8f\xca\xfc\xe4\x02,{\x96\x8c\x04\x0c\nt\xcb\xd7\x10\xc8\x05\x02P\xb3\xa2\x03u\x84\x10\xa0#\x0c\x97I\x1a\x91\x17\n\xb4\xba\xb6\x80\x0e\xc7q\xe1\x85W\xfb\xb0\x9cwT\xae"PG\xdf\xd5)\x19B[D\xa3\xbdxB\xd7;\xabh\xbb8\xe9\xce\xb6\xcaM\x92\xc5;\xd6~\xcb*\x02@\\G\xf7\x1cbc\x80p\x8b\x90\xb4\xa3E\xdf1\xa4h\x1f~\xb1\x84\x9f;\x97y\xf1\t\x1b\xd9\x07\x10\xcaM\xca\x95\x00d\xe5G\xd3\xa5D\xdf\x0el\x7f\x07\xe9\xc3H\x14\xbe\x10\xb1/\x95\xfe!\x9f\x1fjJ\x8dR\xb3\xe0\xcb\x1cp\xf3?_[|\xb0\x01f\xa1\x9d\xd45\xd7\xc0\xa7K\x8d\xb4l\xaa\x93\xbb\x1f\xef\x90wb\xd0\xb2ig\x03"\xfe.`fw!\'\xe4\x1f\xcb\xa2\xe4\xcc\xdc\xb2\xcc\xd1B)`i\xc4=3\xe0\xc8\n\x9a\xb1\xaa\x82{z\x01\xdf|Yg_!\x0b \x91Z7\xd5K=\xea\xc0\xcc\x04\xc8\xe6\xe8\x11{\xb2\xd8\xf4`\xa2l\x17\x82K\xcc\xf0Mb\xd3\x90\x07\xe1\xcb\xad\x96}\xb8~\x1d\x9af\x92c\x85h\xd9\xc7\xc6\'\xfa\x95V\x9f}\xf5\x1e\xe1wG\x1bH?\x10\x7f\x1b\x10\xfd\x95$\x10}\xf6Q\xe6\xf0b\xf2~\xccg\x9f\x87G\xa9~\xd2\xfa\xaf\x0e\xd6\x7f\x880*\x17F\xbc\xbb\xe4+U\xc4B+\xa8U,\xff}\xf8\xe9\xdd\xd2\xdc\x1e\x96QX\xda\xea\xb2\xa6"\xbe\'+za!\xb0\x02\xa3\x9a\xaaP\x85\xbc\xed[\xb6\xc9\x97\xfe\xf4\xa2\xce\xfdD\xcf\x89\x04]Z\xb5\x04d\xff\x83\xa6\xfd\xd8g;e\x18~q?\xf1;\xef\x94&\xac\x1a\x99\x18\x9c\x93J\xf6\xa9y\xea\x16\x83\xbew\xcb\xdf\x10(\x05\x04tX\xc8e\xba\xeco\xf1\xaer\xd9.\'\x17\xaa\xb1\x84\x97\x96}aX\xf6\xd1%\x13}\xb2\x0fb\x19\xefH\x0f,\xfb.\x8c\xc9\x95\x93\x88\xca{b\xe8f\xb0\xc6\x1808\x19\xc1|tq\x0c\xc7\x9b\xfc;U@[\xce\x1b\x83T _\xf94\x15rl\xd9\x02\xb3\x95\xe6\x96\x89B%\xeb\x12\xd2)\xa4\xe7\xfd\xd4\x83m\xecR8r=\xcc\xc7ic\xdc\x87RnR\xce\x08\x94#\x01\xe8\xab9:\x84\xfdN<\xfc\xdfG\xda\x8b\xc4\x17\xc3\xbd\\\xd8\xcd\xbfP\xe7\xd2%\x18(\x19gi\x94\xf0\x8b*\x16\xff\xb6\xef\xdeV\xd9{w\xabt\xc0\xda\xa6us\xad\xa6\r \xfeZ\xb0_\xd7\x18\x02\xf9\xb6\xa4&\xdb#\x8c\xf0\x86ssa\xf9\xc7"\xb2\xac\xd5 \x00\xe6g\x96\x90|\xb6\xc05=Q\xf7\x90\xf1\xae\x9fgs[\x8d,/b\xc9\x8ak\x163\xce\xd82(\x06\x04X\x9f\x97`M\xc6\xfa\xde\x0c\xd2\x9b\x04 \xeb@\xd2K\x81\x1dYHb*\x04\xe6\x98\xf5)_u\x88d\xd9\x10\x96\xf2\xd2o\x1f\xa3\xf1\xd2w_\x1f\xbecYVB\xa1u\x15_l&~$\x9a\xaeM\x98\x81\xff\x07\xb6|\xc4\x82\xa2\xf9\xe1#\xb6\xc1\xe1\xdfH\xea\xed\xdd\x00\xb2\x0f\xcbwi\xe1\xd7\x01\xeb\xbed,\xfb4\x7f\x9c\xcb\xf3MJ\x17\x01\xd6\x1d\xb8c\x90\x93\xa8\xc3\xdcw\xefW\x91\xde1\x8b\xef,\x1b\x1e\xfa\xc0NY\xc5\xabH_Hf\x01X\xa4\x0f\xb4@\x8b\xbd\x8a:\xc5I\xde;\xdf\xd1\xae\x04\xa0\x17M\x13\x85\xe5;\x94+\x89\xba\xd6\xe9o\xf6\xcb/\xbe\xff+\xf2\xe3\xbf\xff\x88\x1c8\x8a\xe0$\xd0\x1f\x97@\x82[\xd4\xeb\\=\x0c\xbb\x8e!p{\x04\x94\x90\xc3\x87S\xd3B\x984\x0e\xd7\xfa>\xfb\xc0\xd8\xd1\x8f\'\x89\xfd\xa9\x919y\xeb\xf5!\xb9\x82h\xbc]\xa7\xc74\x1a\xef \xac\xfb\\P\xab\xd8\xab\x90\xf0\xd3q\x14ta]\xc2\x0b\x9d2\x97\x93\x11\xb1\xe5)\xb3\xefl\x85\x998\x12\xa1\xd6\x1ck\xceBb\x8fd\xdfsH\xaf!\x9d\xf1S,\x99\xe7\xceuy\xc5\xfe\x1d\xa7\x99\x94;\x02\xe5F\x00\xf2e"\x1b\x05\xf3\x14\xf99\xa4_B\xe2\x8b\xc2\xdfb_4\xfc\x94cAI\xaa\xa0\x04\xae`\xeb|\xf7\xd1\xf2\x80\xc2\x19\xd8\x8e;\x9ad\xd7\xa1\rr\xe0\xed\x9bd\xff\xdb6\xc2\xaa\xaf^B\xb0z\xabF\xe2\x80\x84N\xca\xb9\x94d\x01\x84\xc8\x04\xcc\xb9G\x11\xd1\x8dwW\x81\xce\x80D\to4\xa7\x82\xd9\xa6\xf9\xe9eY\x00\t\x19\x94x\xe8\x884\xc0\xe7\x94v\x88A]\xc8\xf2-L\x04P\xa9\x97@\xfc6l\x08I\xdb\x96\xfa\x84\xd1\xc7\x12\x16\x9e/\x05+Q/|\xe79k\xb5\x84\x07\x07\xf8\x07\x12y\xec\xf2\x7f\xf1\x05|\xb8Z\x1du=\xbc\xbf*\xfa\'|\xb8CR]Z\xc9l\xc8jP\x98\x87\xd3\x1e\xa3\xf7\xf5\x8f\xf8P\xcb>\xdfg\xdf~,\xe5e\xb0\x8ef,\xe1\xc5{\rv\xdfk9\xcd\xb2\xcf\xa1e["\xc0\xba\xc5\xbati\xd4\xc3\x83|o\xb4\xb5\xa8\xf7k\xf1|\xea\xfd\xacJkG\x9d\x1c\xb8\xbfM&\xc7\xe71)g$v\xf1<\xc0\xe2()\x07\xdd\xd3\x93\xf3\xb2\x1d\xc1\xacjj\xabd\x01+\'\xa8\xb1\xf9\xf669\xbf\t\x92\x91#\xfd\xb3\xf2+\x1fyF>\xfa\xe9\xfb\xe4}?t\x87\xcc\xc1:\x9e\xabH"\x04A\xceKe\x174\x04\xca\x0c\x01\xf4\xa5\xba|\x97}*\xf4CZ\x9eW\xeax\x0e\xd1xI\xf8\xd5\xd3\xba/\xa4\x93\x07\xa3\xbe\xcf>\x8e\xfb\xae\x9d\x1f\x87e\xdf\x88\\B\xa2/\xbfx\x92\xc8\xb2\x8f\xcby\x93\x9e@\x8f\x97\xb1\xfd\x96,\x02\xaau\xe3`n\xa9\x94S\xb1P\r\xdd\xdf\xc7F\xfa\x91.!1X\xc71\xa4o"\xf5!\xc5Z\x05\x90\xcb\xe1\x08\x82yQ\xb8\rn\xe0\xad\x97\xb0\x8fbG\xa0\x9c\x08@\xde+_\x88\xadH\x7f\x8c\xf4~$\xbe$|i\xf2K\xfe\xe1\x95g4^\x12x\xba\xbc\x17\x05\xa2\xb0\x81\x7f\xe0\xbd[\xe5\xf0C\x9be\xef=m\xb2\xe3\xcef4\xf8U\xf0\xcd\x02\xab:\x90|KXRG\x0b\xbb\x15L\xcfD\x1al4!T\xdeH\x18V\xe5\x91\xd0\xe0\xcc\x11\xefiN-\x00\xbdv\xc8\xb5L\xde\xdde\xe9\xd3\'0\x1aAV0\xd0\t\xc7k&\xe5\x87\xc0\x12\x88\xb0\x8e\xbdMr\xe6\xa5\x81\x9b\xefB*0\x8c@IZ\x02S\xc1\xb5\x0e\xf9\x10\x12y\xf0a\xa9\xcbg;\xc7A\xb0\xa1"G\xbas\xfc-h\xcb>\xf5\xd9\x07\xcb>\x06\xe6\xd8\x0e\xab\xbe-\xf0\xd7\x17\xcf\xb2\x0fd\xab\xcc\xd1\x0c\n\x13\x91|\xa1U]\x01fF\x8a\xe4\xa3\xd6\xe4\xef\x9a\xac\x9b*\xfe\x8ek\xdc\xb9\x9dG\xfd\xb8\x06\x8bZJ\xe48\xefk\xd1}\xfa\xfd\xc9]\x0fo\x81[\x8dZ\xb9\xd19%\x8c\x08lb\x08d\x13\x01Z\xd6\xcdO-\xcb\xb6}\x98\xe4E\xa4\xe9K\'F`m\x07\xee\x069\xac\xae\xc1\xfb\x08\x15U\xfd\xed\xe1\xbd\x1c\xbc>#]o\r#M\xc8\xf5\xf3c2\xd83\xadA;"\x14PL\xb1\xd4\x8d\x14G\xba\xc8\x98\xc3&\xe6c\x96}1 \x05\xff\x95\x1a\x12\x13\x1f/\x9fF\xec\x80\x03\x96\x08r\x1c\xe9y\xa4\xd7\x91\xce\xfa\t\x9b[\x84\xe71\xb9\xbc\xf2\xd4S\xdcR&\xfbRd\x08\x94\x03\x01H-\x85/\n_\x90\x07\x90\xfe\x02\xe9\x90\xff=\xde\x0b\x88?\x05/$\xaah\x95\xe7\x99iS\xd1\xe3{\x0c\x1f\xf9\xb04\xb8\xf7\x89\x0ey\xf8\x83\xbb\xd5\xda\x8f\r\x7f\x15,nf\xb1\x0cpl`\x0e\xcb\x91|\x92\x8b\xb3@<\x01\x1f\x95\x1c|\xf3N\nI\xd0\xc30*\xd4<\xa2\xdbq\x19\xb2\x8aw\x8bY-\xa5\xcb\xb2\xa1\x15\x16\x80\xa9ZCe\xb5$\x96Y\xde\x10\xc0\xbb\xb4\x08B\x9c\x83\x13\x15\x9f\x14N\xa9\xfb\xf2E\x94\xba{\xb0mr\x08\xb8\x06R\xb7Z\x19<\x951\xde\xd9\x91:\xaf=\x8b\xd7k\xba\xe3\xdc\xdf\xb86\x88\x7f\xd6\xe4\xf6\xb1\xd5\x9e\xd4\xdf\xd2\x07\xe0\x98\xf39\xed\n\xe02*\xae--\xf1)\x0f\x7fp\xa7L\xd3\xbd\x00C\x8e\xe7\xbcq\xd0"\xd8G\x89#\xe0\x96\xe4\x1d|p\x93\x12\x80\xf9^\xd1@\x82\x80]\n\xbb\x923/\x0e\xca\xa7\x9f\xfc\x07\xf9\xe8\xbf\xb8G\xbe\xed\x9f\x1c\x90U\xfc>\x01_b\xfc\x9b-\x0b.\xf1\x8ai\xb7\x97u\x04\xf4\xdd\x86\xd5\x06\r7t\xb9->\x18\x89\x97\xab\xb9jj\xe1\xaf\xaf\xae\n\xa9\x1aV\xc1\x18\xf7\xc1\xa2\xaf\xe7\xd2\x84\x0c\\\x9b\x96n,\xe1\xed\xc2R\xde\xee\xd3#\xb2\xc8\x80uq$\xa1e\x1f^V\x8b\xc8\x1b\x07\xb0\xe0~\xa2\xb2\xe0\x1e\x125(jM\xdc\xba}\xec\xcaU\xa4\xcbH$\xfd\x8e!1p\xc70R4\xa1\xc7\xe3\xa9a1/\xe6I\xe1\xbe\xcb[\x7f\xb0\x0fC U\x04J\x9d\x00t/\x1b\x17!}\x0f\xd2\x1f mF\xe2\xf7\xbc\xdd;-\x08\xd4\xda\xcf\x1f\\\xb0\xd1\x7f\xfc\xbb\xf7\xca\xbd\xef\xde"w>\xd0\x0eG\xe3\xb52;\xbe\x80\xe8\xa6\xcb23\x05%\x0b\x84\x84\x8e\xbb@\xf4\xe5\xd3\xaa\x0f\x98%-l\xa5\xaa9\xab\r\xff\x7f\xf4\xcd\xe7\x89k\xbb\x92\xcef\xfd\x03\xfd,\x9bZ\xcc\x02p}\xb0J\xf3\x08\xbe\x1b$\x00;\xb8D\x15\xe2\xb8\xaf\xa4\xee\xd6\x1d<\x01\xf2o\n\x96K-\xf0\x0e\xb0\x84\xbeW\xb5\xb2\xa4r\xc8\xceA\xaa\t"\xab\xdd\xde=\xac\x9b\xa9\xb6l\xfc\x80\xf0\x1d\xe0}\xb8{\xd1\x1f\xfd\x8fD\x96}$\x01I0\x02\xb7\xb8\xd1x5\x7f\x00k\x96}\xd1h\xe6w\xdf5\xa3N\xef\xf3\xdb\xbe\x88J\xc8\xd2\xf17>;<:\xb5f\xa5\xda\xa8\x9d\x07\xbf\xe3\x0f\x91\x14\xf5\xbb\x8e\xf2\xf1=r22\xd1ka\xcb\x91\xbeW\xc1\xbc}\xd61N\xe8\xf0]\xc12E\x99\xc1V\x13~\xe3r\xf0Y|\x9f\xc71\xfd\xf0]I\xc1n\xb1\x8a#?\xea\xe1Kw\xff\xfd\x1be\x0e\x11Qu\xb2\xadXo\xc8\xca]\xd0\x08pi\xf9\x0c&\xa2\xee{\xf76\xf9\xbb\xffx^-t\xf2]`\xd7\xa5\x90\xe4\xe3\x04\xeb\x7f\xff\xb5S\xf2\xc2\xe7\xae\xca?\xfe\xc5\xfb\xe4\xae\x877i\x80\xb7\xa9\x11\x06\xde\xc2\x84\xafM\n\xe5\xfbq\xd9\xf5\x0b\x10\x81h\xb2\x8f*W5\xad\xfa\x10\x897TG\x7f}\xe8\xa0\xd1\xc7z>\xdeW\xe1\xc3zQ.\xc1__\x17\xa2\xf0v\x9f\x19\x93\xbe\xae)\r\xc8\xc3\xc9\xa7D\x12Y\x92\x8f>\xdb|\xf6%B)g\xbfS\xe3\xa1\xf6\xc4-9\x06j`\xd12\x88//!}\x03\x89\xcbz\x19\xb1\xb7\x0b)VT\x83\xc3\x8f./(W&\x86@v\x11\xc8\x1b\t\x96\xdd\xdb\x88\x9b\x1b_ \xf72\xfe4\xf6\xff\x9d\x7f\x14_\xa8\xd8\x97\xd2\xffSp\x1b\x9a_s`\xa6f\xd7\xbe\xb5\xdf\x9e\xbbZ\xe5\xb1\x8f\xec\x91\x07\x9f\xdc\xae\xa4\x1f;\x01*S\xfd]\x93\x18\xb3y\x16~\xaaS\x15\xa3b\x05\xe4+\xe8\x03\x90\x03\xc2\x1cH#}\x00\x92\xd6\xe5x\xd5\xa4\xcc\x10\xa8\x94\xa5\x85U\xd9\xb2\xc7\xb7\x00L\xe7\xeeIR\x8f\xc3j\xa9\x1d>\xef\xd8j\xe4C\x16P\x81\xe1\xc7P\x85\x9a\xa2\xab\xcbl;(,\x97\x1b\x91E\xef\xeb\x1f\xf1\xa1\x96}X\xba\xcb\xe0\x1c\xceg_"\xcb\xbe\x1b\xfe\x12M\xcd\x1aM%[K\x8a\x11~\x1e\x0e\x99|\xba\xfa\xa3[}P\x89\xeb\x94{\xc6\xee\x01\xb8\xe7\xc0\xeb\xbb\xbfE\x08<\xfc\xc6\xbe\x80\xc7p\xcb^,\xfa\xbb#\xf7XQh\x1d\xc0\x04\x8bqY\x80\xee\xc8\x08\xcc\xfa\x1duL\xff\xc6-\x12\xeb=\xfc\xc6j\xa0\x19\x06\x9ba\xc4v\xb6\xd9$\xf5\xf8\x9d\x01\x9c\xb8\xe4\xdb}/#+k\xba\xd1\xa0K\x8e\xb7\xbfo\xbb\xba\xe3\x98\x1e_T\xb8\x81\xba\x89!\x90u\x04\xf8*\xcf\xc3\xcf\xde\xae\xc3-\xa8o\xf0\x03\x88w\xd1\x91\xd0Y\xbfX\x8a\x19\x92\xfc\xd3\xb2\xa0Q\xba~q\\~\xfd\x07\x8e\xc9\x03\xdf\xbe]\xbe\xeb\x13\x87e\x0f\x02\xd1\xcd\x82\xb8\xe0\xfb\xc1\xe5\x8b\x16 \'Ep\xed\xf0\xa2G\x80j\x19\x03\xf9p\x1e\x97M\xc2\x95-\x00\x008\x83IDAT\xfd\xb6v\xd9x\xa1\xf9N\xd7 \n/\xad\xfaB \xfb\xc2\xb5\xd5\x18\x13-\xc9(\xfckr\t\xef\xd8\xc0\x8c\xf4\\\x9c\x94\xcb\xa7F\xa4\xfb\xadQ\x19\xa1\xdf\xf6\x04\xc2\x15U\xa4\x83<\xb5\x82\x01>\xbc\x039\xa6\xd4\xeb&8\xcf~\x0e\x0c\x01>\x01>q\n\xb52jlL\x8e_\x80\xe2$\x17\xfdD\xd2\xef\x18\x12\x03xL"E\x0b\xcfeb^\xfeS\xd5}\x97w\xf4\xb1\xb6o\x08d\r\x81R%\x00\xdd\xcbD\xa0~\x1b\xe9SH\xeeeu/\'\xff\x96\x13q\xb3\xa7\xee\xd5~\xf4\xbbv\xcb#O\xef\x92\xbb\x1e\xd9\x82\xd6\x02\xa4\xdf\xe8\x82\x0c3J/\x1ar\xce\x02s\xc9o\xd1\x0b\xd0vQ\x80y/$@9;\x15\x940\x08\x04\x97G{\xedhPW\xb1|\x0b\x11\x01*YKx\xf6\xcd\x1ba\xd5\xe6K\xd2\x03\'VI\x12\'$\xdc\xb0\xdcBj\xd8$\xc2\x1a0\xd7B\x8d\x91\xd6x\xed \x00\x9b\xb1\x84\x923\xbe\xbc1.G\x8e\xf7\xde8\xcb\xbe=\xf0\xd9\xb7\x03\xc4g\x87\xef\xb3\x0f\x96\xb0f\xd9\x97\xc5\x87\x17Q\xc1\xfc\x1d\xd7\x84\xb9-/\xc5}\xaa}l\xb6\xf9\xcc\x1c1\xa7\xbf\xe1\xc3\x11s\xfa\x1d\x7f\xe7q\xac\xa0\x14}\xb6\xd8g\xfdS\xc16\x91\xd5\x1d\xeb\'\xc98\x92t\xce\xea\xcem\x95\xa4\xf3\x7f\xa7\x85\xde"\x12\x89>%\xf8\xf0;I>\xf7=^}\xf2\xaf\x9e\xd1\xc6\xbf%\x05#\xa8kdT\xc0\x14N\xc6\xbd,\xfb\x1d\xf6\xdd\x8fw\xc0\xc0\t\x83,\xbe\x8b|\xbe&\x86@@\x080\xa0U#|}\xdd\xf3X\x87\xbc\xfe\x95\x9e\xc0\xf5\xa6Tn\xc3{\xa5i\xe9\xe7Y,\x1d\xffr\x8f0\xbd\xf3;w\xc8w\xfc\xd3C\xb2\xe7\xae\x16\xb5\xc4\x9f\x1c\x99GsF\x1f\xd0\xf6\xae\xa4\x82\xaf\x1d[<\x080\x12\xbc\x92n~\xb7\xcd\x08\xbc\xa10\x82r\x80\xb8\xe7\xfb\xc1w\xc5\x0b\xe4\xb8\xaa\xae\x9b.\xbc6"\xd7.\x8cK\x0f\x82s\x0c^\x9f\x92\xa1\xdeY]B\x9f\xe8\x8e\xa9\x1eT\xf8>6\xbd\xeb\xacF\xa2\xd1\':\xc7~\x0f\x1c\x01>m&*\x83\xd4v\xa8\xe9E\xf3\t\xfc\xfd\x12\x12\x03u\xbc\x88\xe4"\xf4\x8e`?Vx\x1e\xf3\xe09.\xc5\x1ec\xdf\r\x81@\x11(E\x02\x90/\x16F<\x82\x91\xb1\xfc\x07\xa4\x8f\xfa\xdf\xa9\x8dD\xbf\xac\xf8\x1a\x9c\xe8\xf8\x0e\x1f$\xf58{\x1a\nW\xc9\xc3\x1f\xd8%O\xfe\xf0\x01\r\xe6A\'\xca\x8c\xda\xc4\x00\x1eU\x18\xfc\xab\x1f\x95\x12r\xaa\xccV\x92c\xa59Z\x90@\x18\xbd*H\xff\x13\r\xad\xb5\xb2\xcc\x01\x9aIY"\xc0\xc1yeU\x95Z\x01\xf6c\xd9DZ\x82\xd9X\xaf\x7fO\xeb\xec\xccNb\xebD\xb2f\x13,\x10\xb1\xe4P\t@W\x9f[\xf1\x1b-\x13\xd5\xb2\x0f\xcd\x1aI\xbf\r \xfa\x18\xe4G\xdb\x0c\xe8\x11.\x1ao\xb9Z\xf6\xb1\xc1\xa1\xe8\x96\x1fH\xee7\xfdC\xd4\x07\xd5.\x15\x82\x0e\xf17\xba\xef\xfe\x96\x92\xd5\x9d\x9ey\xd3\xb2n\x11m\x1e\x9f\xa5Z\xda\xf9[.+\x87\x95\xaa./\x9f\xc3o$\xe9\x1ci\xa7\x96w \xf6H\xe6\xf1w&\xb5\xbe\xe3o\xd8w\xf5\xc0\xbfL\xd66\xbcWGD\xc6\xcb4\x82_d\'1\xa6\xda\xf9>\x8c\x0f\xce\xc9\xe8\x8dY\x1d\xd3\r^\x9d\x96\xab\x08\xcaq\xfd\xdc\x84\\=7\xa6\x81\x1a\x13]\x87\xef\x10\xf3t$\x9f\xf6\x9c\xf8P\x02\xd1_)\x96\xe8\\\xfb=P\x04\xf8(\\b\xc7O-Q5&\x7f\x1f\x1b\x19E\xba\x88D\xa2\x8fKz_@\xeaBr\x0e\x90\xb1\xab\xe2x\x07\x97\x1f\xb7\xde\xc0\xd8?\xc06\x86@>\x10(5\x02\x90/)_\xac-H\x9fEz\xdc\xff\xee^^|\r^\\\xf44g\xb9\xf3\xc4G\xf7\xcaS\x1f?$\xdb\xeeh\x12*E\xc3\xe8(h\xadF\x7f~\xa5\xad\xb9\x02\xa4\x94\xf5\xddtq\xb4\xf3\xf2\x8b@4\xd9G\x95\x80>\xdai\xb0Q\x13\x0ea\xcb\x15Yp\x05\x81.\x9d\xc6\x1c\x949\x046\xbcvv\x02\x16}$\xf9\xc6\xa5\xf7\xca\x84\x8c`L\xc7\xe5\xbb7\xfd\x9d\xaf\xbd\'\xaa\x1fk\xac\xfa\x98gD\xdfY{\x8e\xfd\x92S\x04\xf8\x80\xf94\xb8%7\x12\xabQq\xe9\xee\t$Z\xf71B\xef\x05$\x92\x7fP\x02o\x11\x9eG\x8d\xd4\xe5\x87\xdacb\x08\x14\x1e\x02\xa5D\x00\xf2\x85\xe3\x8b\xb6\x03\x89\xe4\xdfCH\x18}\xe5.\xd8\x87#\xfe\\G\xf1\xc8\xd3\xbb\xe5\x83?vP:`\xb93\x8b\x81$\x1d\xba\xf2\x18\x1d\xaf\xd2z\xa7\x84E[NX>\xcep\x00\r\t\xa2\x8f\xe35\xd8\xc2rv\x99)\xc8%\xc6\xbc\x07\x93\xc2E`\x055\x8c>R\xb6\xecj\x84\x93\x8d\xfe\xd4\x18gV"\n\xa2\x1a*Q\x93\xafW\x93\xd7\xe5\xd2\xdf\xf7\xec\x16\x81\x02\xaa\x11\x89\xe9\xbfm\x16oO!Z\xf69\xdct\xcb\x0f$\xf7\x1b\xf1\x8c\x96\x88*\xe5\x83\x1b\x8d\xb1\xfb[\x84\xc0\xc3\x89l$y\x8c#\xf7\xa2\xbf\xfb\xb3\xe6\x9a\xbd\xb3\xb2S\x0b;\xe0\x14\xf1u\x87}b\xa7\x7f\xf7\t9\x92v\xce\xdan\x1a\xbfE|\xdb\xe1\xf7\xc8\xdfx\x0c\x9eAP\xbe\xeex\xaf\x8e\x88\xd4\x1b\x88\xf9\x88\xe0\x17\xd9I\x8c)O\x8d\x1c\x86\x9d\xc8~L\x9e\xf65e\x04\\D\xf9#\xef\xea\xc0\xa0\x0e\xc0\xea\xc8\xd0U\xd4\x94\xb3\xb3\x13\x0c\x81\xa4\x10\xe0$\xd6\x0c\x96\xfa\xef\xba\xb3Y\xb6\xeck\x92\xfe+\x93:\x97\x11Ts\x94T\xa1ns\x10\xe75\x9c\xde\xe5,\x02\xcf\xbd<(L\xf4\xcb\xfc\xde\xef\xdf/o\x87\x8f\xeb]\xf0w\xbd\x8c\t\x92I\xb8\xbbYB\x9b\xcc%\x94$\x0e\xd5\x02\xea6\xf9\xdb\x9f\x0c\x81L\x11\xd0:\xca%\xbb\xec\x1f\x91T\xcd\xf0u\x8dJ\xb8[\xaaE\x10F\x12}5\xb0\xea#\xf1\xb7\x00]`\x0c\x16}C\xd7\xa7el\x08\x06\x1b\xbd\xd3\xf0\xd37!7.O\xc0\xff\xe5\xa4\x8c\xf6q\xa5H|\xd1\xee=\xd6W\x1f\x0f\xd5\xf7\x04\x1b\xb3\xea\x8b\x0f\\n\x7f\xf5kBDc\xa2\xa6\xa9\x8f\x0e[\xf2\x08\x14(\x82\x1a\x9d\xf72\xb6\xaf!\xd1\xba\x8f\xe4\x1f\xad\xfe\xc83D\x0by\x14\xe6\xe9\x86\xb9\xdc\xe7\xf9&\x86@A#P*\x04\xa0#\xff\xf6\x03\xed/ \x1dF\xe2\x0b\x98\xb3\xfb#\x01\xe5\x06\r\x8c\xe4\xfb\xd1\x9f\xbfO\x0e\xbc\xad\r\x8e\x91\x170;\x04\xff~h\x128\x93T.\xc21\xee*,i\xe6\xe8\xb7*`\xa9o\xc2\x92I\xef\x82\x01_\xc9\xb2/T\x04h\x01X\x85\xc1\xd3\x96=MZD\xf6\xe8\xae7^\xbf\xcc\xec\xaf!CP\xec\xa8\xa0\xf15\xf5\x7f\xd2\xdfs\xf9A\xa2\x81Vd\x8c\xb0\xea<;+\t\xc6;\nH"@Evn\xde\xbf\xc3\xc1mY\x04\xb6\xb6Z&l#\xa4\x1d@Kdu\xa7\xe7\xf2\x03\xc7\xf8\xb3\xe8z\x01\xd5\xc8}\xb0\x13Y\xddi@\n4\xe5\xb7X\xdd\x01\x9b\x19\xf8i$1\xea|\xddE\xac\xeep,I\xc0B\xb4\xba\x03\x02Z\xaf\xf4\xbe\xf9\xc5\xa4P\x11p\x8f\xe8\xe8\xb7mCd\xc6\x05\xb3\\*\xd4\x07Ub\xe5\xa2\x1aC\x82\xac\xbe%$w\xdc\xdd\xaa\x04\xe0\n\x9b\xc8"\x10g\x11H]x\x19\xfd\xe8\xd4\xd8\x82|\xfe\xf7\xceh:\xf2\xf0fy\xc7\xfbv\xc8\xfd\x08\x1c\xd2\xb2\xa9V\xbb\xd8\x19XRqb\x9c}\x02}_\xb3K11\x04\xd2F\x00\xdd>\'\x82\xa96\xb1\xfdf\x82W\x18\x90z\xd5RM\xff| \xf7\xb8\xea\x8a\xf5\x94F\x1a\xfc\xfb\x12t\xad\x81k\xd3\xd2{iR-\xf9\xfa.O\xaa?\xf6QX\xf3\x8d\x82\x04t\xc6\x1c\x89\xcaT\x05\x9dg\xd5W6\xbdk"_#\xf9\x12\xc1\x95\xcf\xdf\xa9\x802\xa1vxS\xcb1\x85!_@\x8b>Z\xf7\xbd\x82t\x16\xe9<\xd2\x00R\xac\xf0\x893\xb9\xfcx\xae\x89!Pt\x08\xe4\x8c \x0b\x10\x19G\xfe\xdd\x89k|\x1e)\xa7\xe4\x9f\x9b\xf5$\xf9\xd7\xdcV#\xdf\xf7\x7f\xbdM\x1e|j\x87Z\r\xb0c!1\xc5c\x8aD\x87\xcb\xdec\xd2q\xfd*\x14\xbc\xe0\xdb\xc6:\xfaL\xc3\xf5\xd8\x01\x9b\x941\x02\xa8\x00\xad\x9bk\x15\x00]\xd6\x91*\x14$\x00\xd9\xa7\x93\xd4r\xe4[\xaayd\xebx\xaa\x17\xaac\xc4d\xe8\xea\xb8n\xf9\x81\xe4~\x8b9\xf4f\xa3\xa3\x99\xdd\x9a\x1d\xdfO&\x8e\xba\xf8g\xb7\xe5\xbd\xb3E\xf5\xfd\xdd\xe8A\x18\xd0\xa9\xafAG\xb2;\xab\xba%\x10q\xdcOdu\xa7\x7f\xc3\x00\x8fn\x00H\xe0\xd1\xeaN\x89<\xff\xb7\x88\xaf;\xfc\x9dD\x9f\x06\xf1\xc1\xb5\xb3-z\xaf\xfcH \x11\xfc";\x891e\x16\x91\xc3\xb0\x13\xd9O\x90\xb7\xfd\\t\x08\xb8jNk\xe2\xcd;\x1adz\x0cd\xb3\xff\n\x15\xdd\xcdX\x81\x8b\x0e\x016\xc1\x8c\xaa{\xef\xbb\xb7\xca7\xbfpU\x83\t\x14\xcbMP\x07#\xf9G\xe1{\xc4\x15/\xd4\x8dO\xbf8\xa0\xe93\xbft\\\x8e\xbew\xbb\xbc\xf3\xfd;d\x1f\xa2\x07w\xecm\x86[T\xac\x14\xc1D\xf9<,\xaf\xe8\x1a\x87]/1\xa05$\xf301\x04\x94\xd4#\xb9\xc7\xaaE\n\x07\xc2:\xc2\x0fU]\xb0_\tK\xbej\x04q\xab\x01\xd1\xa7Kx\x11uw\x01\x13\xa9\xe3\xc3\x9e\x7f\xbe\tl\xb9T\xb7\x07\x96|J\xf8!\x9a\xb5\x8e\xd14\xb7\xf8\x1f\xaa:\xf8\x86\x1b\xaa\x12\xa2\x00Z\xbb\xbd*\x0e\x0f,\xd8\xf1\xcb\x13?\x07\xfb5\xc7\x08\xf0\xc9\xb8\xc4Kk-\xc1V\x1f\xa5\xff\x9d\xbf_G\xeaDbT^\x17\xb4\xa3\x07\xfb\xb1\x11\x00\xa9\rS\\\x9e\xdc\xf2\x89\xdbS\'*&E\x8d@\xb1\x13\x80\x8e\xfc\xbb\x1bO\x81\x96\x7f{\x910\xca\xcc\x91\xe5\x1f\x9a\x14\xce&Q\xbe\xe3\xe3\x07\xe5\xa9\xff\xfdNi\xc0\xcc\xed\xf8\xd0\x82\xfa\x82\xe0Lh\xd9\n:fF\x82sK\x80\x03i.\xfd\x91ZmC\xb5*\x01\xaa\x1c\x94-\xe0e~\xe3x\xd5\x16\xb0\xc4\xa8\xb1\x15\xc11 \xce\x1a!\xa9:\xe1\xbd\xc2\xde\xb2O\x92R\x8c\xc2M\xde\x9a\xaaC\x90\x12Q!\xfc\x1dW\x0e\xb7\xe5\xb5\xb9\xcff\x84e\xa1\xa6\xcb\x16\x8f\x9a\xaf~\xc7\x1f\x12Y\xdd\xe10O[\xe6\xc9\xc8D/\x81\xad\x02\xe2~\xc3\x96\x96r\xd3\xd0y&q\xc3\x1a)\x16[.\x93\xa5e\x06\x13I>bBK^n\x99\x17\xad\xed\xa2\xa3\xca*\xd1\x87\xbf\xd1\x07\x1e\xcb\x1b\x84\xb0\xc8*\xd8\x89\xec\xbb\xdf\xa2\xb6\x91\xebGv\xbc2%U\x11\xa2\xf2\xb1\xdd\xb2E\x80~\x9ah\xc5\xf1\xc0\xb7o\xd3\x80\x0c\x8c0^Y\n\xbe5\xcb\xf6\x89\x16\xd7\x8d\xb3\xaeq\xe2\xf4\xaeG7E\n\xee\xab:\x91\xef\xc5\xb0\xc3&\x97\x91PYvg\x15\xc8r\xbf\xfe\xd5\x1eM\xf5\xcd\xd5\xb2\x07>6\xefF\xc4\xe3\xfb\xbfu\xab\xfa\xefu\xcb\x82\xe70i4\x87\xc9\xa2%L.\xf1|\xf6}\xec\xfeLJ\x1b\x01o\xe2\xd6#\x81\x9d\xdaB+\xbe\xea\x10\xac\xf8j@\xec\xc1\x82\x8f\xcbuI\x0es\xe99W~\xb81\x18\x97\xce_G\xd0\r\xfak\xa5\xbb\xa5\x81\xee)\x19\xe9\x9f\x91\xd1\xfe9\x19\xef\x9fU\xa2\xf9v\xe8\xb1\x9e9\x1f}\xd4\x97\xb4\xfe\xf2\x1af\xd1w;\xd8\n\xe1oT\xf6\x98\xa8\xe5\xaaf\x1cS(\xfe\xad\x0f\x89\x96}\xb4\xf0#\xe9G\xeb\xbe\xcbH\xb1\xc2\xd6\x86Z\xb6\xcb\x135\xcc\xc4\x10(M\x04\x8a\x99\x00t\xe4\xdfA<\x9a\xff\x89\xb4\x17\x89/+\x7f\x0fT\x9c\xaf?6\x11\xbb\xefj\x91\x1f\xfa7Ge\xff}m\x88\x04\xc5\x00\x1fs\xea,\xbc\xac\xc9?\x87>\x97\x00c&;h\xa9o\xaa\xf1\x94\xc4\xa0/d\xf9\x17,\x02T\xde\x16\x11e\x95~\x87\xaa\xb8\x04I\x9d&\xb1/g?\x9e\x82\x0c\xcf\x8al\xc32\xe2\ne\xcc\xbc\x13]\x16\xba\xe5\x07\x92\xfb-6k^R\xc5\x1f\xadD\x0fZ\xf87\xfd;~tj\nG5\xba\x8f\x0f\xb6\\\xfa\x1d\x07\xb9\xdf\xb8\xa5\x90d\xa3\x85\x9c\xf3k\x17mu\xe7\x02Mp\xe90\t=\xe7\xcf\x8e\xd6v$\xed\x98\xd4\x02\x8f[$\xf5}\x87-\x89>\x17D\xc4\xbbJ\xf6>\xf5^\xf5f\xe3\xe7\x19\xc1/\xb2\x93\x18S\xe6\x109\x0c;\x91\xfd\xf8Y\xdb\xaf\x86@&\x08\xac\xf8*\xff]X\xb6\xa8K\xc5\xd8\x14\x04\xaeUdRb;\xb7\xd4\x10XD\xa4\xf0\xb6mu\xf2\xf8w\xef\x91\xe7?\xd7\xa5\xc4D\xb1\x12\x11$R\x9cU \xfb?\x92|\x15\xf8mfbI\xce|s@\xd3\xff\xff\xff\xbc)\x9bv6\xc8\x83\xdf\xb1C\xee\xb8\xafUZ\xb75\xca\xb6\xbd\x8d\xd2\xb4\xb3\x16d\xe8\x02\x02/\x80\x0cD\x1f\xb8\x82nk\x99\xa6X\xf8\xcfy0\xb3\x12,\xfc\x9a\xcf\xe7\xaf*\x13\x9e\x9bv\xddlO!|~\xfcPb\x97*\x0f\xf6k\xb0\x80\xa3\xba\x9aKvA\xf6\x91\xf0\xc3\x96\x81\x04\xa7\xe0\x86a\x06K\xca\xe9CrrtN\xa6\xc6\x97@\xf0M\x83\xec\x9b\xd0\xa0o7\xe0+\x93\xc19\xd6\x13\xbaa\xd2\xe2\xb0\x0c$\xf7x\x82~\xe8W#\xfb\xd6\x030\xff\x7f\xd7\'\xe7\x17Ck\x10\xf6U\xdb\xc4\xd6i\xcb\xb4\xee\xebF\xba\x8c\xf4*\x12I\xbfsHX\x92w\x8b\xf0<\xf6\xec\xd1y\xb26\xac_\x91n\xc9\xc6\xbe\x18\x02\xc5\x89@\xb1\x12\x80|\xd1\xa9\xa6\x1f@\xa2\xe5\xdf~\xff{\xe0jz\x84\xfc\xc3\x05\x9f\xfa\xd1\x83\xf2\xa1\x1f?\x02K\xb7\x15\xdf\x94\xbcB\xc9\x07\xfc\xa9\xec\x85\x9d:g\xe6fH<@\xfc>6\xab\xb8\xb0\xf5f\xbe\xb5\x8dU\xaaTF\xe6\x7f\xb2z\x15\xcb\xac\x18\x10\xa8\x80\xf2H\'\xe3\r \x00\x99&\x86a\xd5\xe6*H*7\xc0\xe8\xbb\x18|\xa8\x1f\xbe\x102`Ef\xabBm\x95\xadN\xc4\xe2\x8e\x7f\x8b\xfa\x9d\x0c$E\xb5]\xec\xfb\x96\xc1ZC#\x95\x1f;\xea\xd0\t[\x92r\xb4\xb0c\x84Y\xe7\xe7\xce\x05\xa8\x88\x90t\xf8\x1b\x7f#\xa1\x17\xeb\xeb.b\x81\x87c"\xf9{E\xc8\xca\xa7\x7f;\nbd?A\xce\x91\xebGv\xbc2)\x16\t\xce\xb1\x9f\r\x81\x02D\xc0\xb9\xf4h\xde\x18F\xe0\x82\x16,\xff]T\xffd\x05XT+R\t#\xc0 \x19\xb4<}\xe4\x83\xbb\x94\x00\\\x81\x15\x12\xbb\x98\xa2oR\xd1E\xa8\xe5\x16\x9e\x9d\x0b\x88\xc7%\xc2\xbc\xafA\xb8\xcc\xf9\xbb?\xa6a\x8e\'\xdb\xeeh\x96}\x98X?\xfc\xce\xcdr\xe7;6J\xcb\xe6:t\xbfp\xa9\x83~y\x15\x13W\x0b\xe8;\xe7\xd1\x8f.b2\x8c=\x0f\xf1\xf1\xbai\xbf\xafv\x19\xd96x\x04@\xa1\x90E\xe1\xfam>KM\xf8A\xd5\'X\xedUcyn\x15\x96\xe7V\xd3\x82\x0f\xcf\x8f\xc4-W\x08\xd1B\x94\x0f\x8f\xea\xd2*\xea\xfc\xe4\xc8<\xea\xc1\xac\x0c\xf5\xc0\x82\x0f\xf5a\xe0\xea\x94\xf4wN\x83\xf0\x9bG[\x0c\x120I\x9f\xe2J2\xbb\xd1 \xca\xa1\xe5\xc1\x85"Dt\xf0\x88\xd8\x15\xb2\x83\x00j\x86\xbe\xde\xac^\xd4D\xddSu\xb9\xf3\xefCH$\xfa^Fb\xc0\x0e\x92}W\x90\xe2\x89j\xf3\xf8\x03\xf3\xe3\xb9F\xf6\xc5C\xc9~+\x0b\x04\x8a\x91\x00\xe4\x0bL\xf2o\x1b\x12\xa3\xfd\xd2\xf7\x1f\xbf\xc76\x0c\xf8){R\x81\xdcinN\x8b\x80\x8d[\xeb\xe4\xe3\xbf\xf1\xa0\x1cyd\xb3\x8c\xc3Y\xec"f&\xcd\xe2o-\xd6\x9ck\x9b\xc3,o\xd0R\xdf\x14\xd6\x9e\x81-:9\x19\x932D\x00\xaa\x01-\x04\x9aZ\xc2\xd2\xb0!\xac\x04 \xb5\x05\xf6\xf0I\x89;\x98\xc17\xf6\xb5@\xa5\x80% \x95SZ\xd4E\xc87\xec\xd3\x12\x8f\xc9E\x9d\xa5\xd5\x1d\xbf\x93\xc4#Q\xe7,\xed\x9c\xd5\x1d\x7f\xa7\xef;%\xf9\x1c\x99\x87\xe3\x83\x10\xde\x83#"\xe3\xe5\x1f\x01#\xb2\x93\x18\xa0\xc8!\xd8\x89\xec\xc7\xcb\xd4~3\x04J\x07\x01\xf7\xfa\xec\xbb\xb7M\xda\xb77 \xf2\xe3dY\x05\xef*\x9d\'Y\xdcw\xc2\xe8\xa4S CH|\xed\xb8s\x83\\\xbf0\xae\x93\x9c.\xe2nq\xdf\x9dWz\xea\xd2\xd1\x06\xe8J\xe0\xd1m\x0e\xbaGN\x1e\xf7\xd2W\x1b\xd2\x0b\x7f\xd5\xa5\'4\xb5\x87\xe5\xc0}\x1b\xe5\x0e\x04\xd7\xdbqg\x0b\xde\xcf:\xd9\xb8\xad^6\xef\xaeUb\x87\xfe\xde\x16\xd1\xef.\xa0?\xa6/A.\'\xd5%\xa5\xf8 \x01D!A\xc8>R\t"\xf6\x97&7\x11\xf0\xbbz\xc5\x8aV\x96\x10\x85\xcd\xa9+\xc0K\xdbG\x80Hb\x8f\xa2\xcf\x8c\xdfk`\xb9G\x1f|$\xf8Pw\xe9\x8f\x8f\xbe\xf8\x96\xa0?\xcdL\x82\xb8\xc38`\x12c%\xee38\xcc8\xa2\xeb\x92\xf0\x1d\xe9\x9dA\xd0\r\x10~\x88\xb4;\x8c\xfdd\x84\xc4\xb1>G\x1e\x8c\xb2i\x19I&\xf2\xbb~`\xc3\xef\xc1\x0f=xE\x93\xec!\xc0\x9a\xe6?Aoz\x1d\xdfU\xab\xc5\xd6\r\xed\x86\xb1\x7f\x05\x89\x01;H\xfa\xd1\x7f\x1f\x03vL!\xc5\n\xf9\r\xe6\x17\x9d\xa0\x8c\x9b\x18\x02\x86\x00\x11(6\x02\x90\x8d\x01_\xe0\x0e\xa4\xbfA\xba\x0f\x89\xcd|\xa0\xf7AeAg\xaap\xa1w}\xef^\xf9\xe8?\xbfGj\xea\xaae\xf0\xaa\x1f\xe4\xa3\x9c}\xfd\x01\x93xB\xc5\x803|\xb3\xce,\xdf5\xeb\xf1\x0eN\xf77v\t\xe82\xea\x9b\xf0\xf8i\x99\xa5\x93:\xae\x9fH7S;\xaf\x18\x11`}[\x86\xd2O\x1f\x9c\\\x06\xac\xe2\xd7\x8f\xa4\xee\xc7\xd5\xcf\xaft\x89\\\x1c\x15\x19\x99\xf3\xac\x00\x95\xe0C\x93C"P\x97\xdd\xa2\xb91_wIAj\x07\x19\x02\xc5\x86\x80\xe7:@\xe4(\xa2\x95\xce\xc3\x0f[\x05\xd7*\xea\x18\xa4\xd8\xee\xc4\xca[\xcc\x08\xb0?#yR\x85e\x90\x8f~x\xb7\xfc\xe5\xaf\xbd\xa9\xa4F1\xdf\xd3ze\'\xf1\xe4\x969\xf3\xfe\x1dI\xe7\xde\xc9I\x90F\xc7\x9f\xe9\xd5\xc4\xbc\x18\x81u3\x02\xf5l\xc4\xd2\xe1\xad{\x1a\xa4c\x7f\xb3\xec\xd8\xb7A:\xeeh\x94\x86f\xe8\x00>QD\xabA\x92F\xd4\x0f8Y\xcf\x89B\xae\x16 \xbe\xcb\xe8\xce\x1d\x99\xe4]\x13\x19S\x95\x04\xdf\xa0\x9ad\xb1\xab\x93P[\xf0\xdf\x13G\xea\xb1I#\xd6Q?\x93\xd0c$f\xac\xbeU\x7f\xa7U\xd8\xa1QC%\xbeW\xe1\xf7*\x90z\xa4\xd8\x98\x85\x92k\x9a\xe9\xcd\xef3\xf0!\xdc\x7fuRFox>\xf7\x86oLc\x1f\xbe\xf70\x91J\xc2o\nA^\xb8\x84\x97\xf8\'+\xfa<\xdc\xd8\x8a\xd7\xe5\x89$\xf6@\x0e\xfb\xb7\x92lVv\\a"\xe0\xd7D\xad\xa2|\xebb\x8dx\xf8w\x12~\xaf#\xbd\x84t\x12\xe9\x12\x12\xcd\x84\x17\x90b\x85o+\x13+\x19\xcf\xc5\xdbmb\x08\x18\x02\x89\x10\x08\x948Kt\xd14\x7f\xe7\x8b\xcd\x97\x1a\x0e\xba\xd4\xf2\xef\x7f\xb5w\xee\xb1\x96]u\x1d\xdf3\xd3\x99\xb93\xd3\xce\xb4\xa5\xed\xf4\x01-\x85\x94W\xb1\x15)\xa5\xa5-m\x11\xe4\xad"&\xa0\x89b\x82\xf2\xf0/"\xe1\xd1 \x89\xd1D\xfe!FM\x88\x12\xa2\x18\xaa\x11\x13\xff0&\x86\x88\xe1\xa1\xf0\x07\xc1 \x89\xa2\x82\xb4\xcct:<\xfa\x9e\xe7\x9d\xb9\xaf\x19\xbf\x9f\xb5\xf7\xef\xdcu\xf7={\x9f}\xce=g\xee\xb9\xf7~\x7f3\xbf\xbb\xde\xaf\xef\xd9{\xad\xb5\xbf{\xad\xb5\x7fF&7\xf8D\xdb\x90\xc8?f&\x92\xdf\xfc\xc4\xcb\x8bW\xbf\xe3\xf9Z]t\xb68\xa6O\xc4s\xd6\x98\xa5\x05\x01\x9d\x018\xc7ycIJ\x0c[b\x8f\x1c4squ\tL\xae\x88\x91\xeb\xe6\x84\x13@\xa0\xfa\x9d\xeb?7\xe7\x03A:_~p\xcf\xe8\x85\x1e=\xa9\xef\x83I\xbb\n]\x003\xd5&\xe9U\xb2g\xa9f\xb2\r\tz\xd1d\xe9\xd9\x1b\xe2\xda\xdb\x08\x18\x81\x89 p\xab\xbe\xc0:\xabs\xa78\x97\xcab\x04\xd6\x03\x01\xb6I\x9e\xd4Q\x16\xaf\xfa\x85\xeb+\x02P\xb5`\xa8\xd9\x02\xe3B"\x03\xabyw`\x9f\x86Y\xfd\x81\xacbe\x1f_`\xfd\xf1\xe1\x93I\xbf\xf3\xb5\x88U\x9a\xfb\x0e\xec,\xaey\xde%\xc5\xc1\x1b.\xd1\xd9\x82{\xd3\xf9\x82\x97^\xb1\xa7\xd8w\xb9\x8e\x08\xd1\x0e\x81K\xf4\xa2\xf02\x91\x84;\xf7\xec(\xce%"P\xab\x11e\xb2\xed\x1a\x13b\x90m\xd8\x9c\x07z>\xb1^\x98U\x19*\x1b\x86\xa1\x14\xd9\xf0\x97F\xf0\n{D\x1b\xd1L3\x8bjz\x91\xdb\x83\xa4$\xdbX\x8d\x97\x8aP\xa4\x88\xc7\xb1(\xdbw\x96\x84\x1eD\xdevE\xdc\x81)B/\x91{\x10~\x89\xe4\xe3K\xcd\xe7\xf4\xb2~\xa9\x98\xd7\xf1#s\xdaZ={\xf2\xac\xce\xde\x93[\xbb\x1afO\xe1\xd6\xd9{O\x8a\xd0\xd39\xe7\xc7\x1f\xd7\xf3\x8f\xceJ>\xfe\xf8\\qL\x04\xdf\t\x11\xb3\xc3H\xd3\n>\xf2\xe8a\\\xd9\x83\x10\x1e&\x7f\xc7\x9d:\x04\xaa;\xa4w\x8b0\xa8r\x99\x86\xc6 \x0b\xd9wH\xfa\x90\x94\x0fv@\xfa}G\xca\xea\xbe\xde\xed%;\xc2C_\x9e/vn\xcb\xe5[S\x0e\x8b\x110\x02\xcd\x08T\xccIs\x84)\t\xa1\xa3\xe0\x06\xa7\xa3\xf8\xac\xf4n)+\x01\'Z\x7f&\x1c\xbc\xed\xba\xe2\xba\xbd\xc5o\xff\xc9+\x8b\xe7\xdd\xf2\xac\xe2\xa9\xa3\xa7D2\xf8\xac?a\xdf*A\x9c\xcek\x121ia5fY\xde\xa4K\xda\xe2\xf9WCk\xf3\x08\xab\x10\xee\xd2\\\xe4\xae{\x85\xc7*\xff*]\xfev\x97\xe7on~\xfe\x94\x0f\x00\x9a\xbcV\xd3\x05\xcd_K\x91\x07V\xc2\x99\\^\xa9U\x01\x08[\xf6\x87\x16\nK\x05\xf5I\xd9\xabp\xcfR6.\x9f\xb5\xf6If/#`\x04\xa6\x1f\x01V\x14A*\xbc\xe4\xce+\x8b\xbd"\x10 _\xcae@\xd3_w\xd7p\xf3!\xc08\xb7\xa0m\xad\x97]\xbdW\x1f\x03\xb9Qg\x01\x1eJ\xc4\r\xe7\x01nEI\xc3\xac\xfe\xc4\xb6\xe1X!\xc8=\x9a8:\xdd\xbb!\xa7\x8f/\x14\x0f}\xfb\xe9\xa4\xe1\x17\xe6\xbe\x03\xbb\x8a\xfd\xcf\x12\x11\xb8\x7fw\xb1w\xff\xceb\xff\x95{\x8aK\xaf\xdc]\x1c\xd0\x16c\xce\x196\xa7\xf0\xf2#+|D\xe3\xacH@\xbe\xbe\x8c2wOu(k\xd5\xf9o\x9a>\xe9O\xfe\xee$\xcd\xe9\x12\x08^\xc1\xd7\x19\xc8\x8d\x1d\x91_\x9b\xcb\x12\x93\x95}\\\xd2\xb9\x10\xc6\x97y\xd9\xc6\xcb\xb9}|\x99\xf7a)\xe4\x9f\xb6\xdf\xac\x12\xd2\xa7\xdbB&iE\xd1[\x8c\x80\x11X\x0b\x02\x13%\xd0\xd6R\xb1,-c\x1f\x1d\x087\xfd\xa7\xa4o\x97r\xf3O\xac\xeei\xd0V\xb7\xc5\xe0\xf7\xd2{\x0e\x16\xef\xd5y\x7f{4Q\xe0\x8c\x8a\xf4\xe6\x8c\x1aY\xda\x11\x10F\xe07\xdf[\x01\xd8\x1e}-\xa1\xbbg\xb67r6k\xc9w\xe8\xb4\x0cu\x92\xca(\x1d\x95G\xe9\xd7/\xc2r\xecd[v\xae\xc8(\xf7&\xcbt\tf\xd7\xe1\nw\xcf\x7f\xe5\x98\x9b\\+\xbd\x96\xeb\xa84\xbdd\x95\xa5\x9c\xe6.\x17\xb6Mo\x93\xb97JUF\xe5\xff\xde\xd0\xce\x1bf$\x19\xbdxL\x04\xcb\x0c\xcb`\xd9S\xba\xd2\xecM\xe2q\xa6x\xe5\xc4\x91\x14\xc4\xe7M?o\xe5\x99@\xf2\xa6\x9eN`iA\x93Hy$\x93\xc9\xaf\xce\xea\xe3\xc1\x9d\xd5\x7fl3\xd9{it\ru\xd4\xa8\xdd\x00!\xc9(\xb3\xde\x01\xd9:\xd8\x08\x18\x81\xe9F\x80\xbe\x05\xb9\xed\r\xcfNgYq`\xfc\x0e>\x044B7R\xe6\xd4\xf0\xb7c~\x1d\xa35\x14\xd2\xe0=D\xa6e\xd4\xa1\x134\x14<\x8a\xf7\x10e+\xfb\x14{\xb8$\x83+5d~CFo-\x9f1pQc\x1bg\xdb\xbd\xe2\x8d\xd7%\x020\x91\x7f\x04\x8c\xb3\xa0\xd6ZLo`\xda\x8a\n\x0eq\xe3FU\x85\x0f\x101QIf9-I\xc7\xf80\xb4\x97D\x18;\x08\xfb\x1d\x1b\x16\x99,\x9b\xbb\xf5\x82y\x9f\xe6\xff\x10\x87{\xf7\xcb~\xe9\x8c\xce\xb7\xdb\x96\x8e\x01\xe2+\xb5\x9cuw\x91V\x12\xee\xc6.s\xd7\x8c>J\xc7\xca:\x95\xbf[n\xca\xe4\xb9\xe1">^2\xe0wcn\x15\xab\x0fY\x89\x97V%\xcek~\xa3\xa3H\xe6t\x04\xc9\xd2\xa2\xb6.k\x1b\xed\x9c\xbe\x12\xcdj=\xbe\x90L\xbc3:\xae`A\xeeY}4\xec\xac\xceA\x9c\x13\x91\xc7\xd7s\xc7!i\xbe\x97\xefv\x12\xde\xa9\x19\xcb\x7f2\xb7\xc2\xf0\xd7\x9fD\xfa\x8d\xa3\x02\xcec\x9a\x11H\xbf\xb6*\xc8]\xc8\x9dV\xddm\xe9\xd6\xcb\xb7\xf4\x1eQ\xd8a)\x1f\xe8`u\x1f\x1f\xec\xf8\x81\xb4\xdf\xc1\x8fL\xe0#\xdf0\xc9\x1f\xb5\x18\x01#0&\x04\xe2IyL\xd9M$\x1b:\x14F\xb2\x8fJ\xdf+e]O\xde\xb1\xc89>a\xb0\x8bA\xfau\xef\xba\xa9\xf8\xd5\x07n)\xce\xeak\x9d\xc7\x1e\xd3\x96_}B\xde\xd2\r\x814\xf5\x12\x90\xf3g\xe9\xbf\xcb\xde\xbc[\xca\xee\xb1\xb80\x18\x11v\xcd\x94\x97q\xfaH\x8b\xae\x8c\xf8\xfd\x96s\xaa\xc6\x8d\xb2*\xcb\xder\xd7\xbd\xc2c\x95\xbfR%\xbfl\x08\xea\xadNSE\xd2\x95\xc1\x96\x8b\xca^\x92]r\xf0\xbf\xbal\xca7\xa2\xe5\x16\x96\x94\xa2\x0c.\'\xaaU:\xe2\xb3u#M\xbaH\'\xedmC\xab\xe2\xa7\xf6\xc9?\xbd\x19N&\x7f\xf4?{;L:\xc2\x11~\x8b\xd2\nq\x96\xb2,\xdb"\x87^*\x17\xdb\xf8\x93\xa5Oq"}2\x95^L\xdc\xbc&\x9d\x90m\x0b\x9a\x8c\x9e\x13\t\xc7\xd7\xf78\x9fga~Q\x87nk\xb5B\x98\xfaB\xed\x92\xdeD/h\xfb\x08\x0f\xd1\xc4\xe7\x0c\xcd\xf99Mhe.\xca$\x9f9\xc5\xc3\\$_\xc5\x9b#^\x15?\x95\x93\xf2g\xd2\xcbdR\xf1*\xb3\xe7\xd69>\xe7U\xce\xd2\x92\xf2S\xf8\x92&\xcaL\xb4\xcf\xf2\xc1\rI\xd9\xe6d\xf5\x1f#`\x04\x8c@#\x02\xbc\xa4\xa0\x8fA\xae\x7f\xf1\xa5\xe9\x03\x0c|H u\x90\x8d\xa9\xaa\x00\xfaPi\xd9\xb3\xb6E\xa6\xf3]^\xc1\xdc\x163r+\xc7\x91A1\x15\xce\xe0\x92\xea\xd0\x1eW\xb1:\xc5K\xb9\xa4vu\xc8\x94,S\xf1\xdd\xe2\xa66\x11\xb5\x84;\x15\xd5\xf8G\xbfK\x89mc\x8c\x14\x90J\xee\xd8\xb847\xe9\x06\xd7r\xd9\x1d\x9a\xd6\x1b\xa7\xdb\xabZ\xd67\xd5\xb5="E\xa6\xe9\x86\x06\xb2\xbb\xde\xf6\\}!\xf7\xbb\xc5\xf7\xbe\xf9d:z\x861\xd0\xd2\x80\x80\xa0I\xe80\xbf!J>g\x03T]P\xcb\xd7K\x19\xce\\!\xc5N\tH\xb4,|i\x18}\xfa1}\x18l\x93H\xba\xa7\xea8\xd06\xba\xbchc5\x81J\xd8\xf8z\x0bT\xb6\xba\xc9\xe5\x81\xc6]\xc5\xc3\x17\xb7S\xde\xa31\x01\xff\xbe4V\xf7A\xfa\xb1\xba\xef\x90\xb4\x9f\xf0\xe3~\xbcDik;\xe3\xc3\xa2\xfa\xcc4\xd0\xb4F\xd4\x98\xa8h\x0bZ\xc9\\Q\x10\x8d\xb1\xc9\x93\xbe\x9b\x15\xd0\x03E\x91\x17yyBW\xadtm"\x9aS\x1f?P\xc4A\xdd\xba\xf2I/]T\xd7A\x99&\xec\x84\x15\xe3\x19\xf5n\x95\xd4\xaer\x1c,G\xe4\xd6\xd8\xe9C\r+\xe6\x11\r\xd1\x89\xb3(\xbc\x06\x96/\x80\xd2\xd9n\x1d\t\r\xc6Q\xc6\xec.\xc2G%VNz\xfa\xa7"\xb7t\xbd\xf4\x0f\xee\xf92\x87a5\x18/\xa0/\xbbfF\xdbVgR\x18c\xb3e4\x04\xd2\xb5\xa4?\t\xc1A\xf7Vu-/_\xd2\xb2\xad\xf2S=Z.\xe4x\xf9\x9b.\xa1A\xe5E\x93\x94\x1f\xe9\x06^vU~+\xae\x86\xecf\xe9\xf9\xf7,Q@u\x99v\xc5a9\x99m[\x07\x01\xae\x9aPZ\xcdU\xce\xd5\x1f\x1aW=\x07@\xfe@zH\xca6^V\xf6\xb1\xa5\xf7qi\xfdpH\xd2\xf2LO\xbeq7`\xe7\x19\xdfb\x04\x8c\xc0\x05F`\x9a\t\xc0 \xff\xee\x11&\x9f\xc9p\xa1\x13\x19\xbb\xe4\xe4\xdf{>y{\xf1\xea\xb7\xdfP\xf4\xb3_X\x19hWg\x04z\x0fH\xb2\xa4\x0b_wE\xa77\xc3Q\x02wP&\xdc@}%\x054\x86\xc6\x9cw9is\xd4\xe58\xb6\x19\x01#`\x04\x8c\x80\x11\xd8\xc8\x08h\xe0\xed<\xe9\x8cq\xbaC{\xb7\xf3z\xbb\x8bh\xace\x18O\xe4\xb1^x\xf2"\xd1b\x04\x8c\x80\x11\x18\x11\x01:\x90P\xb2\x08\x82\xae\x9e\x1d\x87d\x1e\xa9\x94-\xbc\xff!\xfd\x96\x94\xad\xbd\x9c\xdbW\xef\x88\xe8\xd1\xe8*\xe9\xae",LyY\x8c\x80\x11\x986\x04\xa6q\x05 \x1d\x12\x1d\xc7\xa5\xd2\x07\xa5\x90\x7f\xac\xf5\xea:eR\xd4\xee\x12\xe4\xdf\xbe\x03\xbb\x8b\x0f\xfd\xd5\xdd\xc5\r/\xbeL+\xfff\xd39+\xddsq\xcc:\x02l\xb9\xe5\xf0\xea\r!\xab&\xf9\xcb\x1e+&\xff\\\x99]\xa5\x0b\xf9\xd6\x1b\x1e{\x96^\xee\xf8$\xdfdY\xde\xb2R\xcb\xb6\x17\xdf\x16#`\x04\x8c\x80\x11X\x1b\x02\x1c\r\xb1C\xb3\xa2\xa9\xe1Y&\xd0\xe1\xaf\x1em\xd6\x86\xd9\xd0\xa9\x87\xaa\xc0P\x91;We\x98\\;\xaf\xb8S\xc4\xae\xf9v\xda\xda\x9d\xb5f\x02\x97A\x96\xbb\xadF\xc0\x08lR\x04\xe8\x92\xd0\xe8B\xba\xac\xec\xfbO\xc5\xff\x81\xf4\xb0\xf4G\xd2~\xc2\xd3P<\xab\x93\xff\x06y\xd8\xeb\xd7\x14\xfb\x19\x81\xad\x89\xc04\x12\x80p.t(\x7f,}\xa5tb\xe4\x1f+\xfcX\xf9w\xc9\xe53\xc5\x87?wOq\xed\xf3/)\x9e\xfe\x89\xc9?a\xbef\xe1G\x9c\xd7\xc1\xc9\x17L\xe2\xaa\x19\xa5@]m\\p\xcb\xb2\xec\xb1\xc2?\x86\xd0\xe5\x88\xb6\x19\x01#`\x04\x8c\xc0&A\x803\xff\x169\xc2\xdcb\x04\x8c\x80\x110\x02F`\xfa\x11\xe01%\xd7 \xe7\xa89OFh,_\xa8\xaf\xeccU\x1f\xab\xfb\x9aV\xf6E^y\xfe\xd8y\x1a\xf2\x13\x91@\xb0\x18\x81\x8d\x8a\xc0\xb4\x11\x80\xd4\x07\xd6\xe8\x83\xd2wI\'F\xfe\xc5\xca\xbf\x03W\xcd\x14\xbf\xfb\xb7\xf7\x17\x97\x1f\xdc\x93\xbe\xf4\xcbWD-kE\xe0\\\xfa\xd8\xc6\xa4\xcf\x00\\QK\x86$\x8b\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F`\xf3!\x90\x93q\x90p\xec\x8e\x0b\x82/o-\xcf\xcf|\x8c\x833\xfb8\xafo\x94\x95}\x94u\x01Wr\xa84\x8b\x110\x02\x17\x04\x81i"\x00\xe9\xc4\xe8h\xde$\xfd\x84\x94\xce\xab_\xa7&\xef\xb5\t\x1f\xf5\xe0\x10\xea\x03W\xce\x14\x1f\xff\xfck\x8a\xfdW\xec*\x8e=u\xb60\xf9\xb76\\W\xa4\xd6\x16\xe0E>Mk1\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x81.\x08\xe4D\x1f\xf1y\x1e\x8e\x15}\xb1R%\x8e\xc6\xe2#\x1cG\xa5G\xa4\xff#\x85\xf4Cqsf_]\xc8\x0b\xcd\xcb\xc0\xee\x95}u\xa4\xec6\x02\x9b\x14\x81i!\x00\xe9\x88`\x8bn\x94~Z\xbaSJg\x14\x9d\x9c\xac\xe3\x91\xb4\xf2O\xe4\xdf~\x91\x7f\x0f\xfc\xcd\xbd\xc5\x81\xabv\x15\'\x9e\x98/\xb6_4\xf6\xa2\xc6S\xe1\x8d\x98\x8b~9\xed\xae.\x16\xf92\xa2\xc5\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\xea\x08\xc4\xc3\x12\x04\\\xd8y>\xaf?\x98\x12vL\xcaj\xbe\xf8\x12\xef\x8fe\x87\xe8;,=-\xed\'\xfd\x08?\xaf\xec\xeb\x87\x94\xfd\x8c\xc0\x16A`\x1a\x08@:8tF\xfa\x97\xd2gK!\x03\xe3\xcd\x86\xac\xe3\x91X\xf9\xb7{\xef\x8e\xe2\xa3\x0f\xbe\xbax\xd6u\xfb\x8a\x13Oj\xe5\x9f\xc9\xbf\xb1\x00\x1c\x87e\x9f[:_\xa0\x0bs\x1e_\xc6\x02\xac31\x02F\xc0\x08\x18\x01#`\x04\x8c\xc0\xfa!\x009\x81@&X\x8c\x80\x11\x18\x0e\x01\xc8\xbb\\y\xee\xe5^\x8ag`r\xcb\x9f{\xcf\xc8\xcd\xaa\xbeG\xa5\x9c\xd1\x17\xab\xfaX\xe1wB\x1a\xf7\xa3\xac=\x89g\xfa\x9cH\xa4L\xdc\xfd\xe2\xf7\x12\xdab\x04\x8c\xc0\xd6B :\x8b\xf5l5\x1d \x84\xdf\x1fH\xef\xab\xecy\'(\xaf\xb5\xcb\xb6j\xdb\xef\xce\xdd\x17\x89\xfc\xbb\xb78x\xfd\xc5\xc5\xb1\xc7\xbd\xed\xb73\xb2\x1a:\xd2\xe8q^\x7f5\x9c\xa4Q\x8c?\x12\x8c\x1d\xfa\x15/\xda\xb9]d\xea\xf6b\xd7\xee\xed\xc5\xfe\xcbw\x17`m1\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x11\xd8\xd0\x080WG\x98\xaf\x07y\x91<\xfc\xc7\x08\x18\x81U\x08\xa4\xc7$\xf9\x86\xc9\xfd\x13\xf7P=2d\xdf!\xe9w\xa4\xff-\xfd_\xe9#\xd2#\xd2\x9fH\xfb\t\xf7`<+\xf3xF9^u\xd1\x0f)\xfb\x19\x01#\xb0\n\x81\xf5fh\xe8\xbc\x98L\xbcE\xfaQ)\x9dXth\xb2\x8eG\xb6i?\xeaym\xfbE~\xe73\xaf*\x9e{\xf3e\xe9k\xbf[\xe2\xcc?5;\xb5<\x99\xfcI\xae\xd2/1z\x02E\xc3\x08#I\xfarG\x18\xf8%%d[\xb1}\x97\x08>\x91{\x10|;vn\xeb\xd9/\xd2\xeaIp\x9c;\xb3T\x9c9\xb9P\x9c\x9d],fO\xcc\x17\xa7\x8e/\x14G\xbe\xcbJu\x8b\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\xc0\x06C\x80Y"\xa4\xc57\xa5\xff,}\xa7\xf4&i\x88\xc9\xc0@\xc2\xe6VD\x80\x07\xaaP\xda\xcf\x03S\x90|\xe5\xc3\x13\xbe\xcb\xf2\x94\xac?\x92\xfeP\xfa\xb04\x08\xbf\xef\xca~\\\xcaWz\xebB~h\x94\x93\x9b&\xfc\xeah\xd9m\x04\x8c@\'\x04\xe8\xa0\xd6K\xe8\xd0\x98\\\xdc(\xfd\x9a\xf4\xba\xca\x1d\x9d\xa7\x9ck\x17H\xac\xd8\x9a\xfa\xdeO\xde^\xdc\xf5\x8b\xd7\x17\x8f\x1f\x9d-vl\xd4\xaf\xfd\n\xb1\xe0\xed\x92MCA\xb4/LPc\xa1\x9e\xbe\xc3Ql\xd3\xd2\xbc\x8bD\xf3n\x93\x03\xa2\x8e\xed\xcel\x85\xa6\xfd\xd8w\xb0tO\tS\x9e2\xcf\x9f\xab\xc8R\xe5{\x8e\x0c\t\x13\x88s"\xf7\x8ek\xbb4[\xa6\x8f\xeb\x83)\xc7\x9f\x9c+\x8e?1W\x9c\x90\xfd\x84\xec\xb3\xa7\x16D\x00\xce\x17gN-\x16s\xa7!\x02\x99\x17Z\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x046 \x02L\xe4x)\xff\r\xe9\x9d\xd2\xab\xa5\xaf\x97\xfe\x86\xf4\xd5\xd2\x98\xaf\xc7\x84\x0f\xf7z>W\xa8x\x8b\x11\x98\x08\x029\xf1\x86\x9d\xeb\xbci\xc1\n\xc4\xdc\x93\xd2X\xcd\x87yX\xfa\xa8\x14\xf2\xafmu\x04\xf7\x10Z/O^\x16#`\x04\x8c\xc0x\x10X\xcf\x81:&\n_PS^\'\x8d\x89\xc6xZV\xcb\xe5\x9d\x1f\xbe\xb5x\xcb\xfb_P<\xfe\xe8i\xadl\x9b`\xb3\xe1\xcc\xa2\xec\xb0C\xa4U\xbea\x8d8\xa9&\xfa\x93L\x10Q\xbf_\x19)\x97TU\xc2\xb1H!\xf5\xb6C\xe6\x89\xd4K\xa6\x86\x9f\x1d\xc9\xad0H=\x91{i\x95\x9e\xfc\x17\xe6u\x0e\xdf\xd9%\xad\xce[(\xe6\xcf\x9e+\xed:\x97o^\xe4\xdc\x82\xdc\xf8\x9fxz^D\xde\x99\xe2\xb4V\xec\x9d>1W\x9c|f\xbe8\xf6\xd8\x99\xe2\x94\xcc\xd3"\xf4N)<\xd59\xd5\xc6\x7f\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\xb6\x00\x02\xbc\x1bfJ\xfa\x90\xf4~\xe9Q)\x82\xdf\xed\xd2wK\xf1\x7f\xbe4\x84\xe9-\xe94i-\xa7\xb3\x11`\xd3\x08L1\x02\xf1\xa0\x16f\\\xbf\x98MrV\x01\xac\xe8C\x8fH9\x9f\x0fee\x1f\xf7\n\xe1\xf1\xb8\'kO\xf4\x84\x96\xee\x8f(+\xe2\x84\xd9\x8bh\x8b\x110\x02F`\x12\x08\x88FZ\x17\xa1\xf3\x83\xf0{@:9\xf2\x8fn[\xdd\xe9}\xefx^\xf1\xc6\xdf\xba)\xad\xfc\xdbv^\x9eyw\x9e\x96\xbe\xe5\xab\xea\x94\x86\xb9Kt\xc32\xc3\x8a\xa5g\'\x9a\x84\x95v\xc8v\xb5\x08\x8e\x0eRn\x9b\xec\xdb\xb7\x89\xa4\xd3\x14)\xf9i\x95]\xb2\'\x82Nv\xc2!\xeddB\xae%\xad2\x8f\xad\xcai\xc7r\xfa\xa3\x15yU\xa4sr\xb3\xb2\xee\xe4\x893i\xa5\xddY\xad\xba\x9b\xd5\xca\xbc\xa4\xdav\x0b\x897{\x1c\xe2\x0es\xa1\x98\xd3v\xdc\xb93\xa5\xcek\x8b.:\'\x02\x10\xf2o\xadB\xbbh\\\x82\x92\xa9 \x92\xc1F\xa3\xa8\xb6\xc5\x08\x18\x01#`\x04\x8c\x80\x110\x02F`\xc3"\xc0T\x8f\x19\x1d\xb3=\xcd\\\x8b\x05)\xab\x02\xd1k\xa5wK\x7f^\xfaf\xe9\xa5R\xe2 \xac\x84"-\xe9\xd2tQ\xa6\xc5\x08\xac7\x02\\\xcb\xb9rmr\xcd6]\xa3l\xcd\xe5,\xbe\xff\x93B\x86\x7fOzX\xfac)\xe4\xdf\xa3\xd2&\xc9\xaf\x7f\xca\xe4\x01,V\xcc6\xa5\xb1\xbf\x110\x02F`\xa2\x084uv\x93,\x94N\x96\xce\x8f\t\x03g\x8a\xccH\x91\xa0\x91J\xd7\x98\xfe\xdez\xff5\xc5\x07\xfe\xfc.\xadh;[,.\x9c\x17\xf1\xa6&\xf7Z-\x02K\xa5\x96\xc4\x9dHA\x11\x80\x8b\xc4\x15\x01\xb84f\x02/G\n2/\x8dm2!.WH\x13\xb1\xe7\xa1i\x05Lv\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08$\x04 \xf7 6\xbe,}m\xf2YM\x800\xe3Ds"\x90\xa8/\x90\xbe\\z\x9f\x94s\x03\xaf\x97\xe6\xcf\x1c\x90\x8b\xccBI\x8b\x7f\x1e&\xa7\xc5\x08\xb4"\x10O0\x98\xa1$h[\xc9G8\xab\xf9 \xfarr\xef\xb0\xdc\xac\xe6\x83\xf8cE\x1f+\\\x9b\x84\xeb4\xae\xd9(7\xcc\xa64\xf67\x02F\xc0\x08L\x15\x02\x17r\xc0\xa5S\x86\x8a\xa2\xa3\xfc\xb4\xf4=\xd2x\xbb(\xeb\xf8\x042\x8c\xed\xa7\xd7\xdd\xb4\xbf\xd8\xbdw\xa7>Zq\xa6X\x9a\xabH9\x91x\x8bZ\xa17\xee\xd5tC\xd5^\xf5\xdb\xa1J\x9eg\x08\xa9KN\xd6\x11\x96\xed\xa3\x05\xb8\x84\x1e\xa6\xc5\x08\x18\x01#`\x04\x8c\xc0\xf4#\x90\x86\xae\x96j\xf6\x0b\xef7:\xb6d\xe1 #`\x04&\x80\x00st\xee\xc5?\x95~@\n\x19X\'\xfa\xe4\xd5\x93 G\xf0 m\xc8\x1eY~Z\xca\xea\xc0;\xa57K\xaf\x94\xd6%\xd2\x90Oh=\x8e\xdd\x9b\x1f\x01\xc6\x84\x18\x17\xc2\x1e\xd7\x16\xe6 a\xb5\xde\x13\xd2\xc7\xa5\x90z\x87\xa4\x0fK\x1f\x92\xb2\xa2\x8f\x0ft\x0cZ\xcd\xa7(=b1\xaf\x0b\xfe\x16#`\x04\x8c\xc0\x86F\xa0KG:\x8e\x06\xc6\xb6\xdf\xdd\xca\xec\x01\xe9\xc7\xa4\xc3t\xe6\xe3\xa8\xc3\xe8y\xa8\xa6=\xa0\xca\xa5v\xa5\xbb\xe9\x11\xa5"\xf1(0F\x8d\xd2R\xba\xd2\xdf^\xc0\xe8\xd5rJ#`\x04\x8c\x80\x110\x02-\x08\xb4\x8d4MaM\xfeQLSx\xee\xcf\x90\x19\xc3f\xd8\xc3\x1d\xf9\xb4\x99\xe45L\xfc\xb6\xbc\x1cf\x04\x8c\xc0\xda\x10x\x8d\x92\x7fE\xca\xac7\x9b\xe1\xb6fJ\\\x14R/\xef\x1bH\xf4b\xe9\x8b\xa4\xaf\x90\xde+\x85\x1c\xdc+\xadK\x90\x8d\xe4\x13\xfdH=\x8e\xdd\x1b\x13\x81\xb8&0s\xe5\xb7\xe6\x99\xb1M\xb8\xa6X\xc9\xc7\xaa\xbdC\xd2G\xa4\x10|\x87\xa5\x10~\xac\xf0\x83\xfc\x83\x04l\x13\xae\xa9\xb8\xb6\xf2:`\xb7\x18\x01#`\x046-\x02\x17b\x82M\xe7\xca\x84\x81\x81\xfeS\x95I\xe7:\xf1\xb2{\xdbbW\xcd=\xaa\xd9\x88\xbbx\xfd\x0c\x16#`\x04\x8c\xc0\x96E\xa0m\x14h\x0b\x03\xb0\xb6\xf0\xb6\xb0\xfa\xd87\xc8MY\xf58\xf8mD\x01\x17\xb6W1\'\xe0\xe1\x1e\x137\x0ft\xb81\xf1\xbbAJ\xdc\xcd\xd2n5\xc5b\x046\x14\x02\xdc\x87\xdc\x7f\xdf\x92\xde!\xc5\xdd\xd6\xaf)\xb8Q\xc8\x07\xe5y\x80{<\xcf\x07\xb2\xe7\n)+\x03\xef\x95\xde"\xbd\xbe\xd2]2\xfbI^\x97\xe8#\xa2\x8c~\xf1\xed7y\x04\xe27\xcd\xcd\xb0\x07\xc9\x16\xbf\xd5\xa0\xda@\xeeq\xde\xe4\xd3RV\xebA\xe4\x1d\x91\x1e\x96>R\x99\xb8OK\x89\x1b\xe5\xc8\xbaB(/\xc8D\xe2\x84\x12\xa9)\ra\x16#`\x04\x8c\xc0\xa6F\xa0kg<*\x08t\xfa\x0c\xd4o\x96\xfe\xb5\x94\xaf\x83\xe1\xc6\xdfb\x04\x8c\x80\x110\x02[\x13\x81\xb6\xc9\xf7\xb8\xc3\xea\xf91\xee\x85\x82~n\xdfH\xbf\x06\xedjR\xda\xc1X\x8b\xb2\xd5\tr\x8dC\xcey\xf8\xc6\x8d\x99\xbb\t\x8fx\xf5\xf0~\xf1\xf2\xf4\x11\x9e\x9b\x94\x9b\x13}\xc4\x0fw?\x93\xf0\x9c\x00\xfc\xbc\xdcwH=_\x10\x08\x16#p\x81\x11\xa0_\xe1\xde\x83\xa0\x9c\xba\\+\x8f\x1b\xa47J\x7fJ\xca\n\xc1[\xa5WJ\xd9\x86\xdcO\xc8\'\xf2\x8a20\x910K\x97\xff\x8e\x82\x00\xd7\x04\x12cN\xd8\x93\xa7\xfep\xadt\xc1\x99\xf4\xf4\xf5\x90w\x9c\xb7\xf7\xa8\xf4h\xa5\xd8Y\xb9\x07\xe9\x07\xf9\xc7V^\xec\x83$~o\xae\xa9z=\xc3=(\x0f\x87\x1b\x01#`\x04\xb6\x0c\x02]:\xebQ\xc1\x88\xc1\xfd6e\xf0E\xe9eR&\x0f\x0c\x12\x16#`\x04\x8c\x80\x11hF`\xd0\xa4\xb5-|\xd4\xb0\xfaxPwS\xdb\xba_\xdd\xdd\xdc\xa2\xe9\x0f\xe1\xa1\x84\x07\xc8:A\x15\xc4T\xf87\xc5\x1b\x14\x9e\x13d\x8c\x85\xb9\x9b<\x07\x11o\x11?\'\xea"]\x98\xf5|\xb9\x16h\x13f\x17U\xb4\xa9\x907\xa9\x16\xff(\xa5\xce]\x1f,\xa7\xa2\xe2\xae\x84\x11\xd8\x04\x08\xd0\x9f@\xb4=(\xfdui\xf4\xf3\xdc\x8f\x93\x10\xf2G\xe3\xb9!\x88\xbc\xbc,\xce\x11|\xae\xf4%\xd2\x17V\xfa\x1c\x99WW\xca3\xc6 \xa9\xf7\x81\xd1\xae\xbaI>\xe17(\xcf\x8d\x10\x9e\xffna\x0f\x93\xfa\x87\x9d6\xe7:l\xdb\x18\xa3\x8e\xd5\x14\x02\x0f\xa2\x8f\xed\xbaa\xfePv\x88>V\xef\xa1\x83$H_\xea\x19u\xad\x9b\x83\xf2p\xb8\x110\x02F\xc0\x08T\x08Lr\x80#o:\xed\x7f\x93\xde!5\xf9\'\x10,F\xc0\x08L5\x021\xa9l\xaadSx\x93?\xf9t\r\x8b\x897i\xc2>\xc9>\x9ar&!\xb4\xb7\xae\x94\x13\x0fu\x11\x96\x13Zu\xe2\nwNt\xb5\x85\xe7\xf9\xe4DX\xa4\xcf\xc3\xc9\'\x88\xba\xdc\xc4\x9f\xb4M\xe1\xd4=\x8f\xdf\xe6V\xd4M!\xf5koXw\x1d\x84.\xf7A\\\xf7\xc4\xfd\xb4\xf4\xdd\xd2 #\xea\xf9\xd9m\x04\x8c\xc0x\x11\xe0\xbe\xa3\x0fd\xee\xfe\xef\xd2\x9f\x93\x1e\x97"m\xf7o\x19c<\x7f\xa3\x0f\x08\x93\xbe6\xc6\x8e~%\xb0}\x98\x15\x83\xd7H\x9f-\xbd\xa1\xd2\xeb+\xf3j\x99\xbb\xa4\xc3,>\x882is\xf4{a\xca+\xc9 w\xc4\xc3\xac\xc7\xcd\xc3\xb0w\xc1\xb6_\x9c\xba_\xee\x0e;\xa4*:\xa8\x0e\xd4\xa3\x9f\xc4\xd8xF\x81\x90vh\x9c\xb1\x17vH>\x88?\xae\x95 \x00\xd9\xc2\xcb\x98\xd9E\xa8\x1bJ=\x11\xea\x1e\xf5\xcf\xed)\xd0\x7f\x8c\x80\x110\x02F`m\x08\x8c: \x0c*\x95\x81\x96A\xe3\xd7\xa4\x9f\x932\x98F\xc7.\xab\xc5\x08\x18\x81\r\x8a@L\xca\x9a\xaa?j\xf8\xa0t\xf5\xbejXwS}7\x82?\xfdg\x90Sa\xc6\xa4\x1c3\xb7Gx\x98\x83\xc2\x08\x0f\xa2\xacn\xf2f\x9e\t|?\x93\xfc\xeb\xf1\xbb\xb8\xf3\xf2h\x17\xd2\xd5,cO\xff_\xae\xcdPj\x1b\xf6A\xd7x[\xf8\xa8aMh\xb5\xe5\xd7\x94\xe6B\xf9\xc7\xbd}\x89\n\xfc\'\xe9\xddR\xae\x9b\xb5<\xc4*\xb9\xc5\x08\x18\x81\x06\x04\xe8\x0fb\x9e\xce\xfd\xf7\r\xe9;\xa5\x8fHqOC\x7f\x11\xfd\x02f(\xfdBS\xdd\x88\x03\xf1w\xb1\xf49\xd2\x1b\xa4\xd7I\x0fVz\x95\xcc\x03\x95\xee\x97\x89\x12\x97\x95\x86\x9b\xf1y\x85\xf1\x19\x12o63\xc3~J~\x10w\x10y([oc\xfb-&g\xf0\x9d\x902\x1f`\xec\x8f1[\xd6V\xe1Y0~7~\xa7\xf8\xad\xeafk&\x0e4\x02F\xc0\x08\x18\x81\xf1"\x10\x1d\xf38s\x8d<\xe9\xe0\xbf }\xbd\x94\xc1b\x98\xb7o\x8an1\x02F C &L\x99\xd7\nk[\xf8(a\xf54\xdc\xd7\xa1\x14\xbc\x11\'\xc8\xb4)\xda\x15\x13\xd8\xf0\xcb\xcd\x9c\xa4\xaa\x93Z\x90am\xe4W?\xb2,\'\xd1\xb0\xe7\xee<>\xe5\x92w\xdd\xec\xe7W\x8fSw\xf7K\xa3\xac7\x85\xc4\x18\x13\x8d\x19\xd6\x1d\xe9\xc2\x8ck"\xdcu\xb3)\xbc\xc9?\xd2\x0f\n\x8fx6W#@\xff\xc2=\xca\xea\x9e\x07\xa5o\x90"\\\xe7\x9eK$(\xfcgJ\x11\xd8\x08\xf7}\xd4\x11\x13\x8d-\x96@\xfa\x17\xd2\x8fH!~\xb8\xd7\xb8\xe7\xa6UbN\x12&\xf5\xa4\xdf\x88vu\xa9\xf7^E\x82\xfc\x83\x0c\x84\x00\xc4\r\t\x88\x89\x06I\x98\x87\xe3\xbf/\x8b\x93\xdbw\xcb\x9f:`\xee\x94"y\xfdJ\x9f\xe5\xbf\xf5\xba\xe2\x86\xa8\x03wV\xaf\xc7|\x81\xb9\x08\xf6\xdc\x84\x94#\x0e\x04\x1eir\x13r\x0f7f(q\xc2\x1e&s\x90Q$\xda\x14&y\xe4m\xc9\xed\xa3\xe4\xef4F\xc0\x08\x18\x01#0!\x04\xe8\xb8\xc7-1q\xbfQ\x19\x7f]z\xad\x94\xc1p#\x12\x06\xaa\xb6e\x13"\xd0ob\x82_\x93\xb4\x85\xd5\xef\xa1An\xca\xa8\xc7i*w#\xf8\xc7\xe4\x11\x13\x9c\x06\x99L`\xe9\x0f0\x07\xc5\'\x1e\x93\xdb\x98\x08\xe3f\x02[\xf7\x8f\xf0.f\x9d\xd0\xeb\xe7\xa6^\xc3\xa8\xa2o\x08\xe1\xba\x8bk/\xec\xe1\xa6\xbdM\xd2\x16F\x9a\xb6\xf0\xb6\xb0~\xe5\r\x1b\xbf_\x1e\xf6\xdb\x1c\x08pmr=@B\xfc\xbe\xf4\x03R\x1e\xbc\x11\xfc\xe9\x07\xd6\xfbz\x89\xfb\x87:\x8dK\xc6\x9d\xe7\xb8\xf3\xa3\x9d\x93\xc8s\\\xf89\x9f\xe1\x11`\xdc\xfe\xaa\xf4\x93\xd2\x7f\x91"\xfc\xc6\xeb}\x7f\xa5\x8a\xac\xe1O\\\xa7\xb9\x19v\xb2e\xce\xb0\x966\x92\x17\xcf6\xa1\xe1&O\xfc\xa2,\xc8@H\xd6zY\x843\x17\x8ay\x94\xac)\x0e\xf1\xea\x1a\xfd]\xeeO\xfc\xb5\nu\xc8_\xaaD\x1d\xebf\x94\x13\xfe\xe1\xb6i\x04\x8c\x80\x110\x02\x1b\x0c\x81\x18\x9c\xc6Y\xedxcx\xaf2\xfd\xb24\xca\x08s\x9ce9/#\xd0\x84@LR0C\x89\x1b\x13\xb5\xa6t\xeb\xe5\x1ful3\xa9[\xbc\x19\x86\xb8b\xf2\xdaF\x881a\xec\x1a\x1e\xf1\xc2\x84x#=o\x89\xa9\xd3 bo\xad\xe1*bSH\xbd\x9f\x1b\xd6]\x07\x01\xec\x9bd\x12aMe\xd9\xdf\x08\xac\x07\x02\xf4\xd7\xf4C\xc8m\xd2\xf7K\x7fY\xca\x8a\x1d\xcb\xd6C \xc6\xc7A-\xef\x1a\x8f|\xba\xc6\x8dx\xf5>\xbd^\x97\xb8^\xeb\xfeuw\xac$\xaf\xfb\xd7\xdd\x94\xcb8\xdcEb\xfcn\x8bK\xfd\x19\xdf\xd9\xf2\xc9\xc7\x18\xbe)\xe5\xbc?\xb6\xfd"\xd1>\xca\xdd\xec\x12mm2i\x7f\xe0\x10\xbf\x7f\xee7\r\xf84\xd5=\xfc\xeb\xf5\xcd\xdb\x13\xf5\x0f\xbfp\xdb4\x02F\xc0\x08\x18\x81M\x8c@>@\x8c\xab\x99\xbc\xe5bb\xf3&)\xe7\xf7@R\xe4o\x97\xe4\xb4\x18\x815!\x10\x13\xb1\x98\xb4`r-\xe7o\\\xdb\n`\x82\xcea\xc5l\x9f\x80H\xc3\xddo\xcb$\xd7n\xf8\xd7\xed\xa4\x8b7\xb71\x91\xcfM\x081\xc2\xfb\xad0#\xaf~\xfey\xfa<\x9c\xf8\xb1\x12.o\xfb \xbb\x92m\x18\xe1\xb7C\xa2O\nw\xfc\xc6e\xe8\xea\xbfm\xe1\xa3\x86\xad.e\xf9!\xa0_\x98\xfd\x8c\x80\x11\x98,\x029\x11x\xb5\x8az\xad\xf4\x0e)\xf6\x19i\xf4\x1b\xb26\n\xfdA\xbe\xd2\xa61\xa2\x02\xba\x10)\xa4\x8f~\xbe-/\xea\x16c\xc1\xa0x\x8cE\x94=HhK\x8c\t\x83\xda\x1ecU[<\xc2h\x0bq\x07\xc5c<\xeaRGE\xeb\xbd@\xc2\xde&1\xde\xb5\x95Mz\xea\x88\x0e\x8a\x17u\x1c\x14\x0f\x1ciK\xdbX\xa1\xe0$\x81w\xb8\xfb\x99\x94\x17x\xf7\x0b\xaf\xfbu%\x0b\xbb\xc6\xa3\x1d\x83\xdaB\x1d\xc9\x0f\x8c\xf2\xb8\xf8G\x98\xac\x96!\x11\x00\xbbII\xfe;M\xaa\x0c\xe7k\x04\x8c\x80\x110\x02[\x04\x81I\x0cX\xb1\x02\xf0~a\xf8\xa5\x0c\xc7I\x94\x95eo\xeb&B &;\x98u;\x0f\x82\x83\x08e\x884&\xeb\xbc\xdd>,}D\xfape?)\x13\x85\x00Dy\x98`"L\x9a~\xa6\xbc7\x85\xd4\xef\xbfa\xddu\x10\xe2w\xa9\xfb\x87\xbb)\xbc\xc9\x7fP\xba\x08\xb7i\x04\x8c\xc0\xd6D\x80~\x1f\xe2bP\x1f\xb25\xd1q\xab\x8d\xc0h\x08\xc4|\xca\xf7\xd6h\xf89\x95\x110\x02F\xc0\x08\x18\x81\r\x85\x00\xab\xf5&%\x90/\x8fK\x0fJ\x99X\xd4\t\x07yY\xb6\x08\x02\xf1\xc0\x96\x9ba\xe7\xba\xc8\x15H\xe2Z\t\xb3\x0e\x13o\xd8\x9f\x96>#\x8d/\x94="\xfb!i\x98\x8f\xca\xce\xb6\x19\x08\xbe\xb5\x08u\x08%\x9f\xdc\x1em\xe8\x97\x7f[\x18\xf1\xdb\xc2\xdb\xc2\xeaeu\x8d[\x8fWw\xd7\xf3\xb5\xdb\x08\x18\x01#0M\x08\xf0\x82\x06\xa1\x0f\xe6E\x10&2L_\x16+\x8b\xcb\x94\xed\x7f\x87\xc9\xb7=\xa7\xc9\x84N{\xfdh\xf5z\xd6q=\xcb\x9e\xcc/>8\xd7Q\xda\x1c\xf7\xd5\xe0\xdc\x1d\xc3\x08\x18\x01#`\x04\x8c\x80\x11\xd8\xf0\x08L\x82\x00\x84\xecC \x00Q\x08\xc0Q&%Jf\xd9\x00\x08\xc4o\xdbd\xd2\x04\xde0\xe7\xc4Y[\xb3\xb8~ \xed~T)D\xdeO\xa4\x87+\x93\xaf\x9aA\xfa\x05\x01\xf8\xa4\xec\x83\xa4\xe9\x811\xea\x1c\xe9\xeb\xee\xdc?\xae\xeb\xf0\xb3i\x04\x8c\x80\x110\x02\x17\x1e\x01\xfa\xe9QI\x8bQ\xd3]\xf8V\xbaD#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#0f\x04&A\x0029\x87\xf09-\x85\xbcy\x99\xb4\x89XQ\x90e\x9d\x11\x88\xdf&L\xaa\x13\xf60\x83\xbc\x0b3\xaf2~H\x98\xa5k\xf5_\xce\xd9\x89m\xb7\x9c\xbd\xc7\x01\xd4\xb8\x1f\x93B\xf0\xa1\xd8\xd1\xa3RH>\xceM\xeaB\xbc\xc5uL}Ce]\xd1\x0e?\xf8\x81\x88\xc5\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x11\xd8r\x08\x0c"mF\x05\x04\x02\x10\xc2\xe5\xed\xd2\xbf\x97B\xe2\x0c\xb3\xf5F\xd1-#"\x10\xa4\x1d\xc9\xc3\x1ef\xdd\x8f\xdf\x9f\xdfe\x94\xdf&\xce\xccc;.d]l\xc5eE^\xdd\x1e\xc4_nrF_W\xa1~\xd45\xae\xd7:\xc9\x97\xb7\xafk\x9e\x8eg\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x81-\x81@\x10*\x93hl\xe4\xfd\x15e~\xaf\x14B\x10b\xd0R"\x90\x93V]\xec\x81gn\x86}\xad\x98\xb2\xe5\x96\x15\x9bl\xaf\xad+\xab\xf5\x82\xd4\x83\xd8c\xeb\xed\x13\x95\x1f\xfe\xac\xe4\x83\x0c\x0cBP\xd6N\x92\x13\x8f\xd1\xfe&\xb3S\x86\x8ed\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#\xb0\x1a\x81q\x11H\xabs.W\x95\xb1\xf2\xefv\xe9\x97\xa4{\xabH\xa3\xac6\xab\x92\xae\xbb\x11\x04U\xbd"u\xff\xdc\x9d\xdbI\x87;\xc8\xafq\xe1O\x9e`\x8dB\xc4A\xda\xf1\x81\x0c\xc8\xb9~J\x18\xab\xf1X\xbd\x07\xf1\xc7Wq\xeb\x04 [vG\x91h\x13f(\xf9P\xc7\xc0\xa2n\x12n1\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x11\x98\x00\x02A\xd6L \xeb\x94el\x05~\x9f\\\x7fV\x15\x02A\x85\x7f[\xd9\x10Y]%\xc8\xa4z\xfc&\xff\xbc\xdc\xdcN\xfap\x87Y\xcfs\xdcnVE\xb2\x15\x16\x85p\xc3\x84\x94\xe3\xeb\xb5a\xc7\x1f7+\xf3 \xea \xee\x82\xb4\x83\xe8\x0b\xff\x08\x83\xdc\xc3\x8f\xbc\xd1a\xb0T\xf4\x9e\x80A\xfcN\x81\xe5 \xb3\x97\xd8\x16#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x81\xe9@\xe0B\x10]9\t\xf8Gj\xf6\x9e\xaa\xe9\x90S\x94\x9f\xd7\x01\x82\t\xc2*>\xea \xeb\xba\x0b\xf5A\xa3n\xd8!1!\xe1 \xe6PH:\xdcA\xd6\xf5\xf3\x83\x94\x83\xb0\x83\xa8\x83\xe4#.Z\'\x00s20\x087E[\xb3\x04\xd6\x81w\x98d\x1c\xe54\x99k.\xdc\x19\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\xac\x0f\x029\t4\xc9\x1a\x04\tx\x87\n\xf9=\xe9\x9d\xd2\xfd\xd2&\x893\xe7H\x17\xa4T\xbf\xb8|%\x162.\xd7&?\xce\xb9C!\xdf\xc2\xcc\xed\xf8\x05q\xd7\x8f\xd8\x0b\x92\x8f\xb0\xf8:m\x9d\x1cl\xab\xab\x92\r-\xf9V\xe1<\xefa\xedC\x17\xec\x04F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02\x9b\x03\x81\x0bE\x00\x82\x16d\x16\x84\x19\xf2\n\xe9}\xd2\x9b\xa5/\x92\xee\x93B\xe2}_\xfa\xaf\xd2\xafI\xf9\xe0\x04i\xda\x04".\x08\xbf\xdc\xcc\t\xb2\xb6\xf4\x93\n\x0b\\\xc3\xa4\x1c\xec\xb9\x1b\xbf\xbc\x9e]\xec\xa4\xb1\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x01#`\x04\x8c\x80\x110\x02F\xc0\x08\x18\x81\xce\x08\xfc?"\xfb\xaa\xb1HK\xf5\xf0\x00\x00\x00\x00IEND\xaeB`\x82' diff --git a/automon/integrations/splunk_soar/tests/test_soar_client.py b/automon/integrations/splunk_soar/tests/test_soar_client.py new file mode 100644 index 00000000..a8d254f4 --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client.py @@ -0,0 +1,47 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + if c.is_connected(): + def test_create_artifact(self): + id = c.create_container(label='testing', name='testing').id + self.assertTrue(c.create_artifact(container_id=id)) + + def test_create_container(self): + self.assertTrue(c.create_container(label='testing', name='testing')) + + def test_delete_containers(self): + container = c.create_container(label='testing', name='testing') + self.assertTrue(c.delete_container(container_id=container.id)) + + def test_get_container(self): + container = c.create_container(label='testing', name='testing') + self.assertTrue(c.get_container(container_id=container.id)) + + def test_get_vault(self): + container = c.create_container(label='testing', name='testing') + + list_vault = c.list_vault() + vault = list_vault.get_one() + if vault: + self.assertTrue(c.get_vault(vault_id=vault.id)) + + def test_isConnected(self): + self.assertTrue(c.is_connected()) + + def test_list_artifact(self): + self.assertTrue(c.list_artifact()) + + def test_list_containers(self): + self.assertTrue(c.list_containers()) + + def test_list_vault(self): + self.assertTrue(c.list_vault()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_client_create_container_attachment.py b/automon/integrations/splunk_soar/tests/test_soar_client_create_container_attachment.py new file mode 100644 index 00000000..54a1b52a --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client_create_container_attachment.py @@ -0,0 +1,26 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + if c.is_connected(): + def test_soar_client_create_container_attachment(self): + container = c.create_container(label='testing', name='testing') + container = c.get_container(container_id=container.id) + + from .dino import dino + attachment = c.create_container_attachment( + container_id=container.id, + file_name='dino.png', + file_content=dino, + metadata=None + ) + + self.assertTrue(attachment.vault_id) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_client_filter_vault.py b/automon/integrations/splunk_soar/tests/test_soar_client_filter_vault.py new file mode 100644 index 00000000..102fd776 --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client_filter_vault.py @@ -0,0 +1,18 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + if c.is_connected(): + def test_list_vault_generator(self): + filter = 'ca3f4b65155db20d6e1d3b5fee8ef8bf0d968548' + test = c.filter_vault(filter=filter, page_size=200) + if test: + self.assertTrue(True) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_client_get_action_run.py b/automon/integrations/splunk_soar/tests/test_soar_client_get_action_run.py new file mode 100644 index 00000000..8235e6e8 --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client_get_action_run.py @@ -0,0 +1,17 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class MyTestCase(unittest.TestCase): + def test_get_action_run(self): + if c.is_connected(): + action_run = c.get_action_run(action_run_id=3040610) + if action_run.id: + self.assertTrue(True) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run.py b/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run.py new file mode 100644 index 00000000..dd8080b8 --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run.py @@ -0,0 +1,15 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + if c.is_connected(): + def test_list_app_run(self): + self.assertTrue(c.list_app_run(page_size=1)) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run_by_playbook_run.py b/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run_by_playbook_run.py new file mode 100644 index 00000000..9c4cb65d --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run_by_playbook_run.py @@ -0,0 +1,17 @@ +import unittest +import warnings + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + if c.is_connected(): + def test_list_app_run_by_playbook_run(self): + # TODO: create test list_app_run_by_playbook_run + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run_generator.py b/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run_generator.py new file mode 100644 index 00000000..37caa38a --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client_list_app_run_generator.py @@ -0,0 +1,15 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + if c.is_connected(): + def test_list_app_run_generator(self): + self.assertTrue([x for x in c.list_app_run_generator(page_size=1)]) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/integrations/splunk_soar/test_soar_client_list_containers.py b/automon/integrations/splunk_soar/tests/test_soar_client_list_containers.py similarity index 91% rename from automon/tests/integrations/splunk_soar/test_soar_client_list_containers.py rename to automon/integrations/splunk_soar/tests/test_soar_client_list_containers.py index d47e2a1b..a2720db2 100644 --- a/automon/tests/integrations/splunk_soar/test_soar_client_list_containers.py +++ b/automon/integrations/splunk_soar/tests/test_soar_client_list_containers.py @@ -14,8 +14,8 @@ class TestClient(unittest.TestCase): # self.assertFalse(c.list_containers()) def test_list_containers_generator(self): - if c.isConnected(): - containers = [x for x in c.list_containers_generator(page_size=1000)] + if c.is_connected(): + containers = [x for x in c.list_containers_generator(page_size=100, max_pages=2)] self.assertTrue(containers) else: self.assertFalse(c.list_containers_generator()) diff --git a/automon/integrations/splunk_soar/tests/test_soar_client_list_vault.py b/automon/integrations/splunk_soar/tests/test_soar_client_list_vault.py new file mode 100644 index 00000000..4c39925c --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_client_list_vault.py @@ -0,0 +1,17 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + if c.is_connected(): + def test_list_vault_generator(self): + test = [x for x in c.list_vault_generator(page_size=1, max_pages=1)] + if test: + self.assertTrue(test) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/integrations/splunk_soar/test_soar_config.py b/automon/integrations/splunk_soar/tests/test_soar_config.py similarity index 69% rename from automon/tests/integrations/splunk_soar/test_soar_config.py rename to automon/integrations/splunk_soar/tests/test_soar_config.py index cedcf0f7..0a13d6da 100644 --- a/automon/tests/integrations/splunk_soar/test_soar_config.py +++ b/automon/integrations/splunk_soar/tests/test_soar_config.py @@ -8,10 +8,10 @@ class TestPhantomConfig(unittest.TestCase): def test_config(self): - if c.isReady(): - self.assertTrue(c.isReady()) + if c.is_ready: + self.assertTrue(c.is_ready) else: - self.assertFalse(c.isReady()) + self.assertFalse(c.is_ready) if __name__ == '__main__': diff --git a/automon/tests/integrations/splunk_soar/test_soar_client.py b/automon/integrations/splunk_soar/tests/test_soar_uat.py similarity index 65% rename from automon/tests/integrations/splunk_soar/test_soar_client.py rename to automon/integrations/splunk_soar/tests/test_soar_uat.py index 0cda49ef..7b7e8b10 100644 --- a/automon/tests/integrations/splunk_soar/test_soar_client.py +++ b/automon/integrations/splunk_soar/tests/test_soar_uat.py @@ -7,51 +7,62 @@ class TestClient(unittest.TestCase): - def test_isConnected(self): - if c.isConnected(): - self.assertTrue(c.isConnected()) - else: - self.assertFalse(c.isConnected()) - def test_create_artifact(self): - if c.isConnected(): + if c.is_connected(): id = c.create_container(label='testing', name='testing').id self.assertTrue(c.create_artifact(container_id=id)) else: self.assertFalse(c.create_artifact(container_id=0)) def test_create_container(self): - if c.isConnected(): + if c.is_connected(): self.assertTrue(c.create_container(label='testing', name='testing')) else: self.assertFalse(c.create_container(label='testing', name='testing')) + def test_close_container(self): + if c.is_connected(): + container = c.create_container(label='testing', name='testing') + self.assertTrue(c.close_container(container.id)) + else: + self.assertFalse(c.close_container()) + def test_delete_containers(self): - if c.isConnected(): + if c.is_connected(): container = c.create_container(label='testing', name='testing') self.assertTrue(c.delete_container(container_id=container.id)) else: self.assertFalse(c.delete_container(container_id=0)) def test_list_artifact(self): - if c.isConnected(): + if c.is_connected(): self.assertTrue(c.list_artifact()) else: self.assertFalse(c.list_artifact()) def test_get_container(self): - if c.isConnected(): + if c.is_connected(): container = c.create_container(label='testing', name='testing') self.assertTrue(c.get_container(container_id=container.id)) else: self.assertFalse(c.get_container()) def test_list_containers(self): - if c.isConnected(): + if c.is_connected(): self.assertTrue(c.list_containers()) else: self.assertFalse(c.list_containers()) + def test_run_playbook(self): + if c.is_connected(): + container = c.create_container(label='testing', name='testing') + playbook = '' + if playbook: + self.assertTrue(c.run_playbook( + container_id=container.id, + playbook_id=playbook + )) + if __name__ == '__main__': unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_uat_run_playbook.py b/automon/integrations/splunk_soar/tests/test_soar_uat_run_playbook.py new file mode 100644 index 00000000..1960ed10 --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_uat_run_playbook.py @@ -0,0 +1,34 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + + def test_run_playbook(self): + if c.is_connected(): + container = c.create_container(label='testing', name='testing') + playbook = '' + c.run_playbook( + container_id=container.id, + playbook_id=playbook + ) + + def test_cancel_playbook(self): + if c.is_connected(): + container = c.create_container(label='testing', name='testing') + playbook = '' + + if playbook: + run = c.run_playbook( + container_id=container.id, + playbook_id=playbook + ) + get = c.get_playbook_run(playbook_run_id=run.playbook_run_id) + cancel = c.cancel_playbook_run(run.playbook_run_id) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/tests/test_soar_uat_update_playbook.py b/automon/integrations/splunk_soar/tests/test_soar_uat_update_playbook.py new file mode 100644 index 00000000..bb88a991 --- /dev/null +++ b/automon/integrations/splunk_soar/tests/test_soar_uat_update_playbook.py @@ -0,0 +1,25 @@ +import unittest + +from automon.integrations.splunk_soar import SplunkSoarClient + +c = SplunkSoarClient() + + +class TestClient(unittest.TestCase): + + def test_update_playbook(self): + if c.is_connected(): + container = c.create_container(label='testing', name='testing') + playbook = '' + + if playbook: + run = c.run_playbook(container_id=container.id, playbook_id=playbook) + get_run = c.get_playbook_run(playbook_run_id=run.playbook_run_id) + c.update_playbook( + playbook_id=get_run.playbook, + active=False + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/splunk_soar/vault.py b/automon/integrations/splunk_soar/vault.py new file mode 100644 index 00000000..bb42fe4a --- /dev/null +++ b/automon/integrations/splunk_soar/vault.py @@ -0,0 +1,29 @@ +from automon import log + +from .datatypes import AbstractDataType + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.CRITICAL) + + +class Vault(AbstractDataType): + contains: list = None + deleted: bool = None + first_seen_time: str + hash: str = None + id: int = None + meta: dict + names: list = None + size: int = None + sources: list + tags: list = None + version: int + + def __repr__(self): + if self.names: + return f'{",".join(self.names)}' + return f'{self.to_dict()}' + + @property + def sha1(self): + return self.hash diff --git a/automon/integrations/swift/client.py b/automon/integrations/swift/client.py index 7bbbdd8e..ecc08383 100644 --- a/automon/integrations/swift/client.py +++ b/automon/integrations/swift/client.py @@ -6,20 +6,21 @@ from swiftclient.service import SwiftService -from automon.log import Logging +from automon import log from automon.integrations.swift.error import SwiftError_ # from automon.integrations.swift.config import SwiftConfig from automon.integrations.swift.iterables import SwiftList, SwiftItem -log = Logging(__name__, Logging.INFO) +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) -Logging('requests', Logging.CRITICAL) -Logging('swiftclient', Logging.CRITICAL) +log.logging.getLogger('requests').setLevel(log.CRITICAL) +log.logging.getLogger('swiftclient').setLevel(log.CRITICAL) class SwiftClient: def __init__(self): - self._log = Logging(SwiftClient.__name__, Logging.DEBUG) + pass @staticmethod def list_summary(files, folders): @@ -28,7 +29,7 @@ def list_summary(files, folders): def list_container(self, container, summary=False, filter='', separate=False) -> [SwiftItem]: - self._log.info(f'listing {container} (filter: {filter})') + logger.info(f'listing {container} (filter: {filter})') swift_objects = [] swift_objects_v2 = [] @@ -57,7 +58,7 @@ def list_container(self, container, summary=False, filter='', files.append(item_v1) files_v2.append(item_v2) - self._log.debug(f'Listing for {container}: {len(swift_objects)} objects') + logger.debug(f'Listing for {container}: {len(swift_objects)} objects') if summary: return len(swift_objects) @@ -71,7 +72,7 @@ def cleanup(self, container, days=7): msg = (f'Starting cleanup \n' f'>Retention policy: {days} days \n') - self._log.info(msg) + logger.info(msg) today = datetime.date.today() start_time = time.time() @@ -106,20 +107,20 @@ def cleanup(self, container, days=7): regex = f'^{date}' if re.search(regex, item_s.name): - self._log.info(f"{percent}% ({progress}/{total}) cleanup retain: \'{regex}\', {name}") + logger.info(f"{percent}% ({progress}/{total}) cleanup retain: \'{regex}\', {name}") found = True break if not found: pending_deletion.append(item) - self._log.info(f"{percent}% ({progress}/{total}) pending deletion: {name}") + logger.info(f"{percent}% ({progress}/{total}) pending deletion: {name}") elapsed_time = time.time() - start_time minutes = int(elapsed_time / 60) msg = (f'>Created deletion list for past {days} days (Deleting: {len(pending_deletion)} objects)\n' f">Cleanup has been running for: {minutes} minutes") - self._log.debug(msg) + logger.debug(msg) objects = 0 folders = 0 @@ -141,14 +142,14 @@ def cleanup(self, container, days=7): else: objects += 1 - self._log.info(f'{percent}% ({progress}/{total}) summarizing deletion: {name}') + logger.info(f'{percent}% ({progress}/{total}) summarizing deletion: {name}') msg = (f'Cleaning up older than {days} days: \n' f'>{total} *total objects* \n' f'>{objects} *objects* \n' f'>{folders} *folders* \n' f'see debug messages') - self._log.debug(msg) + logger.debug(msg) progress = 0 @@ -163,7 +164,7 @@ def cleanup(self, container, days=7): # this does the actual deletion self.delete_object(container, item) - self._log.info(f'{percent}% ({progress}/{total}) deleted: {name}') + logger.info(f'{percent}% ({progress}/{total}) deleted: {name}') if progress % 10000 == 0 or progress % total == 0: elapsed_time = time.time() - start_time @@ -171,12 +172,12 @@ def cleanup(self, container, days=7): msg = (f'>Deletion is currently at `{percent}%` ({progress}/{total})\n' f">Backup has been running for: {minutes} minutes") - self._log.debug(msg) + logger.debug(msg) if pending_deletion: msg = ('Cleanup Finished\n' f">It took: {minutes} minutes") - self._log.debug(msg) + logger.debug(msg) def backup(self, source, destination, test=None, skip_known=True): @@ -188,7 +189,7 @@ def backup(self, source, destination, test=None, skip_known=True): retries = 0 msg = f'Backup {source} started' - self._log.debug(msg) + logger.debug(msg) items = self.list_container(source) backups = self.list_container(destination, filter=today) @@ -206,7 +207,7 @@ def backup(self, source, destination, test=None, skip_known=True): if test: regex = str(test) if re.search(regex, item): - self._log.debug(f'Test match: {test} \n>{item}') + logger.debug(f'Test match: {test} \n>{item}') else: continue @@ -219,7 +220,7 @@ def backup(self, source, destination, test=None, skip_known=True): for b in backups: b = SwiftItem(b) if f'{today}/{s_item.name}' == b.name: - self._log.info(f'{percent}% ({progress}/{total}) exists, skipping {s_item.name}') + logger.info(f'{percent}% ({progress}/{total}) exists, skipping {s_item.name}') exists = True break if exists: @@ -230,7 +231,7 @@ def backup(self, source, destination, test=None, skip_known=True): minutes = int(elapsed_time / 60) msg = (f'>Backup {source} is currently at `{percent}%` ({progress}/{total})\n' f">Backup has been running for: {minutes} minutes") - self._log.debug(msg) + logger.debug(msg) self.stats(destination, filter=today) @@ -250,19 +251,19 @@ def backup(self, source, destination, test=None, skip_known=True): for i in swift.upload(destination, [folder], options): if i["success"]: - self._log.info( + logger.info( f'{percent}% ({progress}/{total}) ' f'created directory /{destination}/{today}/{name}') retry = False if "error" in i and isinstance(i["error"], Exception): - self._log.error(f'{SwiftError_(i)}') + logger.error(f'{SwiftError_(i)}') retries += 1 except Exception as _: - self._log.error(item) + logger.error(item) retries += 1 @@ -280,12 +281,12 @@ def backup(self, source, destination, test=None, skip_known=True): if i["success"]: if i["action"] == "copy_object": - self._log.info( + logger.info( f'{percent}% ({progress}/{total}) ' f'copied {i["destination"]} from /{i["container"]}/{i["object"]}') if i["action"] == "create_container": - self._log.info( + logger.info( f'{percent}% ({progress}/{total}) ' f'container {i["container"]} created') @@ -304,29 +305,29 @@ def backup(self, source, destination, test=None, skip_known=True): else: error = f'{SwiftError_(i)}' - log.error(error) + logger.error(error) retries += 1 except Exception as _: - log.error(item) + logger.error(item) retries += 1 if not retry: break - self._log.info('building backup summary') + logger.info('building backup summary') source_total_objects, \ - source_total_dirs, \ - source_objects, _, _ = source_stats + source_total_dirs, \ + source_objects, _, _ = source_stats filter_destination_total_objects, \ - filter_destination_total_dirs, \ - filter_objects, _, _ = self.stats(destination, post_log=True, filter=today) + filter_destination_total_dirs, \ + filter_objects, _, _ = self.stats(destination, post_log=True, filter=today) destination_total_objects, \ - destination_total_dirs, \ - destination_objects, _, _ = self.stats(destination, post_log=False) + destination_total_dirs, \ + destination_objects, _, _ = self.stats(destination, post_log=False) # elapsed_time = time.time() - start_time # minutes = int(elapsed_time / 60) @@ -345,7 +346,7 @@ def backup(self, source, destination, test=None, skip_known=True): f'>{destination_total_objects}ย *total objects* \n' f'>{destination_objects}ย *objects* \n' f'>{destination_total_dirs}ย *dirs* \n') - log.debug(msg) + logger.debug(msg) # TODO: new files may be added during the backup, so need verify only the initial files being backed up @@ -353,7 +354,7 @@ def backup(self, source, destination, test=None, skip_known=True): # missing_count = len(missing) # if missing: # try: - # self.log.info( + # logger.info( # f'Missing {missing_count} objects' # '>'.join(missing) # ) @@ -365,7 +366,7 @@ def backup(self, source, destination, test=None, skip_known=True): # # msg = ('*Backup Finished* \n' # f'>It took: {minutes} minutes ({retries} retries)\n') - # self.log.debug(msg) + # logger.debug(msg) def find_missing(self, source, destination, filter, post_log=True): @@ -397,13 +398,13 @@ def find_missing(self, source, destination, filter, post_log=True): found = True break if not found: - self._log.info(f'{percent}% ({progress}/{total}) backup missing: {a_name}') + logger.info(f'{percent}% ({progress}/{total}) backup missing: {a_name}') missing_objects + (tuple(f' * {a_item} \n')) missing_objects_list.append(a_item) else: - self._log.info(f'{percent}% ({progress}/{total}) verified, {a_name}') + logger.info(f'{percent}% ({progress}/{total}) verified, {a_name}') - log.debug(f'missing_objects: {len(missing_objects)}') + logger.debug(f'missing_objects: {len(missing_objects)}') if missing_objects: msg = (f'Missing {len(missing_objects)} objects: \n' @@ -414,7 +415,7 @@ def find_missing(self, source, destination, filter, post_log=True): def stats(self, container, filter='', post_log=True, show_types=False): - self._log.info(f'stat {container} (filter: {filter})') + logger.info(f'stat {container} (filter: {filter})') list_items = self.list_container(container, filter=filter) total_dirs = 0 @@ -462,10 +463,10 @@ def delete_object(self, container, item): try: for i in swift.delete(container=container, objects=[name]): if i['success']: - self._log.info(f'deleted: {name}') + logger.info(f'deleted: {name}') except Exception as e: - log.error(f'{e}') + logger.error(f'{e}') def delete(self, container, filter): @@ -485,12 +486,12 @@ def delete(self, container, filter): try: for i in swift.delete(container=container, objects=[name]): if i['success']: - self._log.info(f'{percent}% ({progress}/{deletion_count}) deleted: {name}') + logger.info(f'{percent}% ({progress}/{deletion_count}) deleted: {name}') except Exception as e: - log.error(f'{e}') + logger.error(f'{e}') - log.debug( + logger.debug( f'Deletion summary: \n>container: {container} \n>filter: {filter} \n>{deletion_count} objects deleted') def delete_container(self, container): @@ -499,10 +500,10 @@ def delete_container(self, container): try: for _ in swift.delete(container): - self._log.info(f'deleting container: {container}') + logger.info(f'deleting container: {container}') except Exception as e: - log.error(f'{e}') + logger.error(f'{e}') def restore(self): return warnings.warn(NotImplemented) diff --git a/automon/integrations/swift/config.py b/automon/integrations/swift/config.py index 3531113a..9511099a 100644 --- a/automon/integrations/swift/config.py +++ b/automon/integrations/swift/config.py @@ -1,55 +1,73 @@ import os -from automon.log import Logging +from automon import log +from automon import environ + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class SwiftConfig: - OPENSTACK_USERNAME = os.getenv('OPENSTACK_USERNAME') or '' - OPENSTACK_PASSWORD = os.getenv('OPENSTACK_PASSWORD') or '' - OPENSTACK_AUTH_URL = os.getenv('OPENSTACK_AUTH_URL') or '' - OPENSTACK_PROJECT_ID = os.getenv('OPENSTACK_PROJECT_ID') or '' - OPENSTACK_PROJECT_NAME = os.getenv('OPENSTACK_PROJECT_NAME') or '' - OPENSTACK_USER_DOMAIN_NAME = os.getenv('OPENSTACK_USER_DOMAIN_NAME') or '' - OPENSTACK_PROJECT_DOMAIN_ID = os.getenv('OPENSTACK_PROJECT_DOMAIN_ID') or '' - OPENSTACK_REGION_NAME = os.getenv('OPENSTACK_REGION_NAME') or 'RegionOne' - OPENSTACK_INTERFACE = os.getenv('OPENSTACK_INTERFACE') or 'public' - OPENSTACK_IDENTITY_API_VERSION = os.getenv('OPENSTACK_IDENTITY_API_VERSION') or '3' - SWIFTCLIENT_INSECURE = os.getenv('SWIFTCLIENT_INSECURE') or 'True' + OPENSTACK_USERNAME = environ('OPENSTACK_USERNAME', '') + OPENSTACK_PASSWORD = environ('OPENSTACK_PASSWORD', '') + OPENSTACK_AUTH_URL = environ('OPENSTACK_AUTH_URL', '') + OPENSTACK_PROJECT_ID = environ('OPENSTACK_PROJECT_ID', '') + OPENSTACK_PROJECT_NAME = environ('OPENSTACK_PROJECT_NAME', '') + OPENSTACK_USER_DOMAIN_NAME = environ('OPENSTACK_USER_DOMAIN_NAME', '') + OPENSTACK_PROJECT_DOMAIN_ID = environ('OPENSTACK_PROJECT_DOMAIN_ID', '') + OPENSTACK_REGION_NAME = environ('OPENSTACK_REGION_NAME', 'RegionOne') + OPENSTACK_INTERFACE = environ('OPENSTACK_INTERFACE', 'public') + OPENSTACK_IDENTITY_API_VERSION = environ('OPENSTACK_IDENTITY_API_VERSION', 3) + SWIFTCLIENT_INSECURE = environ('SWIFTCLIENT_INSECURE', True) def __init__(self): - self.log = Logging(name=SwiftConfig.__name__, level=Logging.DEBUG) + pass + def is_ready(self): if not self.OPENSTACK_USERNAME: - self.log.warn(f'missing OPENSTACK_USERNAME') + logger.error(f'missing OPENSTACK_USERNAME') + return False if not self.OPENSTACK_PASSWORD: - self.log.warn(f'missing OPENSTACK_PASSWORD') + logger.error(f'missing OPENSTACK_PASSWORD') + return False if not self.OPENSTACK_AUTH_URL: - self.log.warn(f'missing OPENSTACK_AUTH_URL') + logger.error(f'missing OPENSTACK_AUTH_URL') + return False if not self.OPENSTACK_PROJECT_ID: - self.log.warn(f'missing OPENSTACK_PROJECT_ID') + logger.error(f'missing OPENSTACK_PROJECT_ID') + return False if not self.OPENSTACK_PROJECT_NAME: - self.log.warn(f'missing OPENSTACK_PROJECT_NAME') + logger.error(f'missing OPENSTACK_PROJECT_NAME') + return False if not self.OPENSTACK_USER_DOMAIN_NAME: - self.log.warn(f'missing OPENSTACK_USER_DOMAIN_NAME') + logger.error(f'missing OPENSTACK_USER_DOMAIN_NAME') + return False if not self.OPENSTACK_PROJECT_DOMAIN_ID: - self.log.warn(f'missing OPENSTACK_PROJECT_DOMAIN_ID') + logger.error(f'missing OPENSTACK_PROJECT_DOMAIN_ID') + return False if not self.OPENSTACK_REGION_NAME: - self.log.warn(f'missing OPENSTACK_REGION_NAME') + logger.error(f'missing OPENSTACK_REGION_NAME') + return False if not self.OPENSTACK_INTERFACE: - self.log.warn(f'missing OPENSTACK_INTERFACE') + logger.error(f'missing OPENSTACK_INTERFACE') + return False if not self.OPENSTACK_IDENTITY_API_VERSION: - self.log.warn(f'missing OPENSTACK_IDENTITY_API_VERSION') + logger.error(f'missing OPENSTACK_IDENTITY_API_VERSION') + return False if not self.SWIFTCLIENT_INSECURE: - self.log.warn(f'missing SWIFTCLIENT_INSECURE') + logger.error(f'missing SWIFTCLIENT_INSECURE') + return False + + return True def __eq__(self, other): if not isinstance(other, SwiftConfig): - self.log.warn(f'Not implemented') + logger.warning(f'Not implemented') return NotImplemented return self.OPENSTACK_USERNAME == other.OPENSTACK_USERNAME and \ - self.OPENSTACK_PASSWORD == other.OPENSTACK_PASSWORD and \ - self.OPENSTACK_AUTH_URL == other.OPENSTACK_AUTH_URL and \ - self.OPENSTACK_PROJECT_ID == other.OPENSTACK_PROJECT_ID and \ - self.OPENSTACK_PROJECT_NAME == other.OPENSTACK_PROJECT_NAME and \ - self.OPENSTACK_PROJECT_DOMAIN_ID == other.OPENSTACK_PROJECT_DOMAIN_ID + self.OPENSTACK_PASSWORD == other.OPENSTACK_PASSWORD and \ + self.OPENSTACK_AUTH_URL == other.OPENSTACK_AUTH_URL and \ + self.OPENSTACK_PROJECT_ID == other.OPENSTACK_PROJECT_ID and \ + self.OPENSTACK_PROJECT_NAME == other.OPENSTACK_PROJECT_NAME and \ + self.OPENSTACK_PROJECT_DOMAIN_ID == other.OPENSTACK_PROJECT_DOMAIN_ID diff --git a/automon/integrations/swift/iterables.py b/automon/integrations/swift/iterables.py index ddcad4cc..c943036f 100644 --- a/automon/integrations/swift/iterables.py +++ b/automon/integrations/swift/iterables.py @@ -2,12 +2,14 @@ from swiftclient.service import SwiftService, SwiftError, ClientException -from automon.log import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) class SwiftItem(object): def __init__(self, item: dict): - self._log = Logging(SwiftItem.__name__, Logging.DEBUG) self._item = item self._dict = item @@ -48,7 +50,6 @@ def __repr__(self): class SwiftPage(SwiftService): def __init__(self, page: dict) -> SwiftService.list: - self._log = Logging(SwiftPage.__name__, Logging.ERROR) self._page = page @@ -62,11 +63,11 @@ def __init__(self, page: dict) -> SwiftService.list: self.error_timestamp = self._page.get('error_timestamp') if self.error == ClientException: - self._log.error(f'{SwiftPage.__name__} {self.success} {self.error}') + logger.error(f'{SwiftPage.__name__} {self.success} {self.error}') if self.success: self.listing = self._page.get('listing') - self._log.debug(f'{SwiftPage.__name__} {self.success} {self.listing}') + logger.debug(f'{SwiftPage.__name__} {self.success} {self.listing}') else: self.listing = [] @@ -85,7 +86,7 @@ def _dict(self): def _error_handler(self): if not self.success and isinstance(self.error, Exception): - self._log.error(f'{SwiftError(self._page)}') + logger.error(f'{SwiftError(self._page)}') def list_gen(self) -> object or SwiftItem: if self.success: @@ -105,7 +106,6 @@ def __init__(self, container: str) -> SwiftService.list: see documentation """ - self._log = Logging(SwiftList.__name__, Logging.DEBUG) self.container = container def list_gen(self) -> object or SwiftPage: @@ -119,7 +119,7 @@ def list_gen(self) -> object or SwiftPage: if page["success"]: yield SwiftPage(page) else: - self._log.error(f'{page["error"]}') + logger.error(f'{page["error"]}') except Exception as e: - self._log.error(f'page failed, {e}') + logger.error(f'page failed, {e}') diff --git a/automon/integrations/swift/tests/__init__.py b/automon/integrations/swift/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/test_swift.py b/automon/integrations/swift/tests/test_swift.py similarity index 100% rename from automon/tests/integrations/test_swift.py rename to automon/integrations/swift/tests/test_swift.py diff --git a/automon/integrations/swimlaneWrapper/__init__.py b/automon/integrations/swimlaneWrapper/__init__.py new file mode 100644 index 00000000..2d1ec20f --- /dev/null +++ b/automon/integrations/swimlaneWrapper/__init__.py @@ -0,0 +1 @@ +from .client import SwimlaneClient, SwimlaneClientRest, SwimlaneConfig diff --git a/automon/integrations/swimlaneWrapper/api/__init__.py b/automon/integrations/swimlaneWrapper/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/swimlaneWrapper/api/v2.py b/automon/integrations/swimlaneWrapper/api/v2.py new file mode 100644 index 00000000..54c25654 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/api/v2.py @@ -0,0 +1,112 @@ +from enum import Enum + + +class Api(object): + api = f'api' + + +class Auth(object): + api = f'{Api.api}/auth' + user = f'{api}/user' + token = f'{api}/token' + create = f'{token}/create' + + @classmethod + def delete(cls, userId: str): + return f'{cls.user}/{userId}/token' + + @classmethod + def metadata(cls, userId: str): + return f'{cls.user}/{userId}/token' + + +class ApplicationViewModels(Enum): + """ + [ + { + "id": "string", + "name": "string", + "acronym": "string", + "description": "string", + "createdDate": "string", + "createdByUser": { + "id": "string", + "name": "string" + }, + "modifiedDate": "string", + "modifiedByUser": { + "id": "string", + "name": "string" + } + } + ] + """ + id: str + name: str + acronym: str + description: str + createdDate: str + createdByUser: { + "id": str, + "name": str + } + modifiedDate: str + modifiedByUser: { + "id": str, + "name": str + } + + +class Application(object): + api = f'{Api.api}/app' + light = f'{api}/light' + + @classmethod + def by_id(cls, appId: str): + return f'{cls.api}/{appId}' + + @classmethod + def export(cls, appId: str): + return f'{cls.api}/{appId}/export' + + +class Logging(object): + api = f'{Api.api}/logging' + job = f'{api}/job' + recent = f'{api}/recent' + + @classmethod + def by_id(cls, jobId: str): + return f'{cls.job}/{jobId}' + + +class Record(object): + + @classmethod + def api(cls, appId: str): + return f'{Application.api}/{appId}/record' + + @classmethod + def get(cls, appId: str, id: str): + return f'{cls.api(appId)}/{id}' + + +class User(object): + api = f'{Api.api}/user' + login = f'{api}/login' + authorize = f'{api}/authorize' + + +class Workspace(object): + api = f'{Api.api}/workspaces' + nav = f'{api}/nav' + + @classmethod + def id(cls, id: str): + """workspace specified by id""" + return f'{cls.api}/{id}' + + @classmethod + def app(cls, id: str): + """workspaces for application id""" + return f'{cls.api}/app/{id}' diff --git a/automon/integrations/swimlaneWrapper/client.py b/automon/integrations/swimlaneWrapper/client.py new file mode 100644 index 00000000..64b6a7b5 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/client.py @@ -0,0 +1,306 @@ +import json + +from automon import log +from automon.integrations.requestsWrapper import RequestsClient + +from .config import SwimlaneConfig +from .api.v2 import * + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class SwimlaneClient(object): + pass + + +class SwimlaneClientRest(object): + + def __init__(self): + self.config = SwimlaneConfig() + self.requests = RequestsClient() + + self.auth = None + self.apps = None + self.records = None + self.workspaces = None + + async def is_ready(self): + if await self.config.is_ready(): + if self.config.headers: + return True + + async def test_connection(self): + return + + async def login(self): + """tries all types of login""" + + if await self.login_username_password(): + return True + + if await self.login_token(): + return True + + return False + + async def login_username_password(self) -> bool: + """Login with username and password""" + url = f'{self.host}/{User.login}' + + response = await self.requests.post( + url=url, + json=self.config.credentials, + ) + + apiKey = dict(json.loads(self.requests.content)).get('token') + self.config.apiKey = apiKey + + self.requests.session.headers.update(self.config.headers) + + self.config.userName_model = await self.requests.to_dict() + + return response + + async def login_token(self) -> bool: + """Login with username and password""" + url = f'{self.host}/{User.authorize}' + + self.requests.session.headers.update(self.config.headers_jwt_token) + + response = await self.requests.get( + url=url, + ) + + self.config.userName_model = await self.requests.to_dict() + + return response + + async def logging_by_id(self, jobId: str): + """finds the recent logs""" + url = f'{self.host}/{Logging.by_id(jobId=jobId)}' + + response = await self.requests.get(url=url) + logs_job = await self.requests.to_dict() + + return logs_job + + async def logging_recent(self, level: str = 'Debug'): + """gets logs but needs to get it from a task run id + + this is broken + """ + url = f'{self.host}/{Logging.recent}' + + request_body = { + "level": [ + level + ] + } + + header = { + 'Content-Type': 'application/json' + } + + # self.requests.session.headers.update(header) + + response = await self.requests.post(url=url, json=request_body, headers=header) + logs_recent = await self.requests.to_dict() + + return logs_recent + + async def create_auth_token(self): + """Creates a new access token for the user making the request""" + url = f'{self.host}/{Auth.create}' + + response = await self.requests.post( + url=url, + ) + + return response + + async def app_list(self): + url = f'{self.host}/{Application.api}' + + response = await self.requests.get( + url=url, + ) + + self.apps = await self.requests.to_dict() + + return self.apps + + async def app_by_id(self, appId: str): + url = f'{self.host}/{Application.by_id(appId=appId)}' + + response = await self.requests.get( + url=url, + ) + + app = await self.requests.to_dict() + + return app + + async def app_export(self, appId: str): + url = f'{self.host}/{Application.export(appId=appId)}' + + response = await self.requests.get( + url=url, + ) + + app = await self.requests.to_dict() + + return app + + @property + def host(self): + return self.config.host + + async def record_resolve_fields(self, appId: str): + """since swimlane has no documentation on resolving field names""" + + url = f'{self.host}/{Record.api(appId)}' + + response = await self.requests.get( + url=url, + ) + + record_hashmap = {} + + record = await self.requests.to_dict() + record_values = dict(record.get('values')) + + for item in record_values.items(): + key, value = item + if '$' in key: + continue + record_hashmap[key] = key + + logger.debug(record_hashmap) + + record = { + "applicationId": appId, + "values": { + "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", + } + } + + record.get('values').update(record_hashmap) + + record_create = await self.record_create_hard(appId=appId, data=record) + + return record_hashmap + + async def record_schema(self, appId: str): + url = f'{self.host}/{Record.api(appId)}' + + response = await self.requests.get( + url=url, + ) + + record = await self.requests.to_dict() + + return record + + async def record_create(self, appId: str, key: str, value: str or int): + """create a record""" + return await self.record_create_easy(appId=appId, key=key, value=value) + + async def record_create_easy(self, appId: str, key: str, value: str or int): + """create a record with boilerplate added + + The bare minimum you need to send is (assuming application id is 5667113fd273a205bc747cf0): + { + "applicationId": "5667113fd273a205bc747cf0", + "values": { + "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", + "56674c5cc6c7dea0aeab4aed": "A new value" + } + } + + """ + url = f'{self.host}/{Record.api(appId)}' + + record = { + "applicationId": appId, + "values": { + "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", + key: value + } + } + + record_json = json.dumps(record) + + response = await self.requests.post( + url=url, + json=record + ) + + record_created = await self.requests.content_to_dict() + + return record_created + + async def record_create_hard(self, appId: str, data: dict): + """create a record the hard way + + no handholding. you're on your own""" + url = f'{self.host}/{Record.api(appId)}' + + response = await self.requests.post( + url=url, + json=data + ) + + record_created = await self.requests.content_to_dict() + + return record_created + + async def record_delete_all(self, appId: str): + """delete all records in application""" + url = f'{self.host}/{Record.api(appId)}' + + response = await self.requests.delete( + url=url + ) + + if self.requests.status_code == 204 or self.requests.status_code == 404: + return True + + return response + + async def record_get(self, appId: str, id: str): + """get a record""" + url = f'{self.host}/{Record.get(appId=appId, id=id)}' + + response = await self.requests.get( + url=url + ) + + record = await self.requests.to_dict() + + return record + + async def record_get_base(self, appId: str): + """get a record""" + url = f'{self.host}/{Record.api(appId=appId)}' + + response = await self.requests.get( + url=url + ) + + return response + + @property + def userId(self): + return self.config.userName + + async def workspace_list(self): + url = f'{self.host}/{Workspace.api}' + + response = await self.requests.get( + url=url, + ) + + self.workspaces = await self.requests.to_dict() + + return self.workspaces diff --git a/automon/integrations/swimlaneWrapper/config.py b/automon/integrations/swimlaneWrapper/config.py new file mode 100644 index 00000000..06f436f3 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/config.py @@ -0,0 +1,92 @@ +from automon import log +from automon.helpers import environ + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class SwimlaneConfig(object): + + def __init__( + self, + host: str = None, + userName: str = '', + password: str = '', + apiKey: str = None, + jwt_token: str = None, + ): + self.host = host or environ('SWIMLANE_HOST') + self.userName = userName or environ('SWIMLANE_USERNAME', '') + self.password = password or environ('SWIMLANE_PASSWORD', '') + self.apiKey = apiKey or environ('SWIMLANE_APIKEY') + self.jwt_token = jwt_token or environ('SWIMLANE_JWT_TOKEN', 'missing SWIMLANE_JWT_TOKEN') + + self.userName_model = None + + self.appId = environ('SWIMLANE_APP_ID') + + @property + def access_token(self): + """alias to private acces token""" + return self.jwt_token + + @property + def bearer_token(self): + """token you get from username / password""" + return self.token + + @property + def credentials(self): + if self.userName and self.password: + return { + 'userName': self.userName, + 'password': self.password, + } + + @property + def token(self): + return self.apiKey + + @property + def headers(self): + if self.token: + return self.headers_api_token + + if self.private_token: + return self.headers_jwt_token + + @property + def headers_api_token(self): + if self.token: + return { + 'Authorization': f'Bearer {self.apiKey}' + } + + @property + def headers_jwt_token(self): + if self.jwt_token: + return { + 'Private-Token': self.jwt_token + } + + async def is_ready(self) -> bool: + if self.host: + if self.userName and self.password: + return True + if self.apiKey: + return True + if self.jwt_token: + return True + + logger.error(str(dict( + host=self.host, + userName=self.userName, + password=self.password, + apiKey=self.apiKey, + jwt_token=self.jwt_token, + ))) + return False + + @property + def private_token(self): + return self.jwt_token diff --git a/automon/integrations/swimlaneWrapper/tests/__init__.py b/automon/integrations/swimlaneWrapper/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/swimlaneWrapper/tests/test_library_record_create.py b/automon/integrations/swimlaneWrapper/tests/test_library_record_create.py new file mode 100644 index 00000000..e7e9ccfa --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_library_record_create.py @@ -0,0 +1,42 @@ +# import os +# import json +# import unittest +# import swimlane +# +# from swimlane import Swimlane +# from automon import environ +# +# appId = environ('SWIMLANE_APP_ID') +# host = environ('SWIMLANE_HOST') +# user = environ('SWIMLANE_USERNAME') +# password = environ('SWIMLANE_PASSWORD') +# +# +# class MyTestCase(unittest.TestCase): +# +# if host and user and password and appId: +# def test_login(self): +# swimlane = Swimlane(host, user, password, verify_ssl=False) +# +# app = swimlane.apps.get(id=appId) +# +# # records = app.records.get() +# # records = app.records.search('.') +# +# # swimlane.exceptions.UnknownField: " has no field 'test'" +# record = app.records.create( +# json=json.dumps(dict( +# string='string', +# int=1, +# list=[1, 2, 3], +# dict=dict( +# key='value' +# ) +# )) +# ) +# +# pass +# +# +# if __name__ == '__main__': +# unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_app.py b/automon/integrations/swimlaneWrapper/tests/test_rest_app.py new file mode 100644 index 00000000..2e0f0a79 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_app.py @@ -0,0 +1,36 @@ +import unittest +import asyncio +import random + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + if asyncio.run(client.login()): + app_list = asyncio.run( + client.app_list()) + + self.assertTrue(app_list) + + app = random.choice(app_list) + appId = app['id'] + + app_export = asyncio.run( + client.app_export(appId)) + + self.assertTrue(app_export) + + app_get = asyncio.run( + client.app_by_id(appId=appId)) + + self.assertTrue(app_get) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_auth.py b/automon/integrations/swimlaneWrapper/tests/test_rest_auth.py new file mode 100644 index 00000000..83d9c3a5 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_auth.py @@ -0,0 +1,24 @@ +import unittest +import asyncio + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + self.assertTrue( + asyncio.run(client.login_username_password()) + ) + self.assertFalse( + asyncio.run(client.login_token()) + ) + self.assertFalse( + asyncio.run(client.create_auth_token()) + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_auth_token.py b/automon/integrations/swimlaneWrapper/tests/test_rest_auth_token.py new file mode 100644 index 00000000..dc9ab8b3 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_auth_token.py @@ -0,0 +1,25 @@ +import unittest +import asyncio + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + if client.config.jwt_token: + self.assertTrue(asyncio.run( + client.login_token() + )) + + self.assertFalse(asyncio.run( + client.create_auth_token() + )) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_logging.py b/automon/integrations/swimlaneWrapper/tests/test_rest_logging.py new file mode 100644 index 00000000..7beebbbd --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_logging.py @@ -0,0 +1,27 @@ +import unittest +import asyncio +import random + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + if asyncio.run(client.login_token()): + logs = asyncio.run( + client.logging_recent()) + + jobId = '6602057d6158e302aff869b2' + + logs_job = asyncio.run( + client.logging_by_id(jobId=jobId)) + + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_record.py b/automon/integrations/swimlaneWrapper/tests/test_rest_record.py new file mode 100644 index 00000000..4df96d10 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_record.py @@ -0,0 +1,24 @@ +import unittest +import asyncio + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + if asyncio.run(client.login()): + app_id = client.config.appId + record = asyncio.run( + client.record_schema(appId=app_id) + ) + + self.assertTrue(record) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_record_create.py b/automon/integrations/swimlaneWrapper/tests/test_rest_record_create.py new file mode 100644 index 00000000..59384625 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_record_create.py @@ -0,0 +1,44 @@ +import unittest +import json +import asyncio + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + if asyncio.run(client.login_token()): + appId = client.config.appId + + key = 'a1qio' # base64 + value = dict( + key='value', + key2='value2', + ) + + value = 'value' + + record_new = asyncio.run( + client.record_create( + appId=appId, + key=key, + value=value) + ) + + self.assertTrue(record_new) + + record_id = record_new.get('id') + + record_get = asyncio.run( + client.record_get(appId=appId, id=record_id)) + + self.assertTrue(record_get) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_record_delete_all.py b/automon/integrations/swimlaneWrapper/tests/test_rest_record_delete_all.py new file mode 100644 index 00000000..ed57f209 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_record_delete_all.py @@ -0,0 +1,24 @@ +import unittest +import asyncio + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_record_delete_all(self): + if asyncio.run(client.is_ready()): + if asyncio.run(client.login()): + app_id = client.config.appId + delete_all = asyncio.run( + client.record_delete_all(appId=app_id) + ) + + self.assertTrue(delete_all) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_record_resolve_fields.py b/automon/integrations/swimlaneWrapper/tests/test_rest_record_resolve_fields.py new file mode 100644 index 00000000..d3314503 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_record_resolve_fields.py @@ -0,0 +1,24 @@ +import unittest +import asyncio + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + if asyncio.run(client.login()): + app_id = client.config.appId + fields = asyncio.run( + client.record_resolve_fields(appId=app_id) + ) + + self.assertTrue(fields) + + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/swimlaneWrapper/tests/test_rest_workspace.py b/automon/integrations/swimlaneWrapper/tests/test_rest_workspace.py new file mode 100644 index 00000000..b4c4aab3 --- /dev/null +++ b/automon/integrations/swimlaneWrapper/tests/test_rest_workspace.py @@ -0,0 +1,19 @@ +import unittest +import asyncio + +from automon.integrations.swimlaneWrapper.client import SwimlaneClientRest + +client = SwimlaneClientRest() + + +class MyTestCase(unittest.TestCase): + def test_login(self): + if asyncio.run(client.is_ready()): + if asyncio.run(client.login_username_password()): + self.assertTrue( + asyncio.run(client.workspace_list()) + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/vds/client.py b/automon/integrations/vds/client.py index f7798871..918731b3 100644 --- a/automon/integrations/vds/client.py +++ b/automon/integrations/vds/client.py @@ -9,7 +9,10 @@ from queue import Queue -from automon.log import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.INFO) # disable insecure ssl warnings urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) @@ -30,8 +33,6 @@ def __init__(self, config: VdsConfig = None): # test connection self.connected = self.check_connection() - self._log = Logging(name=VdsRestClient.__name__, level=Logging.INFO) - @staticmethod def check_connection(): """check if vds server is reacheable""" @@ -84,7 +85,7 @@ def search_all(self, ldap_filter: str = 'filter=cn=*', page_size: int = 10, cafi [self.records.put_nowait(x) for x in records['resources']] - self._log.info(f'Records: {self.records.qsize()}') + logger.info(f'Records: {self.records.qsize()}') # need to fix cookie 'hostname' to reflect vds config server # otherwise get request fails to match hostname to ssl hostname @@ -141,20 +142,20 @@ def _get(self, ldap_filter: str = None, **kwargs): url = f'{self.config.uri}/{self.config.basedn}{ldap_filter}' - self._log.debug(f'query: {url}') + logger.debug(f'query: {url}') try: r = requests.get(url, headers=headers, **kwargs) except Exception as e: raise Exception(e) - [self._log.debug(f'results: {x}') for x in r.__dict__.items()] + [logger.debug(f'results: {x}') for x in r.__dict__.items()] if r.status_code != 200: - self._log.error(f'{url} {r.status_code} {r.reason}\n\n{r.content.decode()}') + logger.error(f'{url} {r.status_code} {r.reason}\n\n{r.content.decode()}') ldap_result = False else: - self._log.debug(f'{r.status_code} {r.reason} {url}') + logger.debug(f'{r.status_code} {r.reason} {url}') ldap_result = json.loads(r.content.decode()) return ldap_result diff --git a/automon/integrations/vds/config.py b/automon/integrations/vds/config.py index f32d989d..303e870a 100644 --- a/automon/integrations/vds/config.py +++ b/automon/integrations/vds/config.py @@ -1,6 +1,9 @@ import os -from automon.log import Logging +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.ERROR) class VdsConfig(object): @@ -30,9 +33,7 @@ def __init__(self, protocol: str = None, self.uri = f'{self.prot}://{self.server}:{self.port}/{self.path}' - self._log = Logging(name=VdsConfig.__name__, level=Logging.ERROR) - - [self._log.debug(f'config: {x}') for x in self.__dict__.items()] + [logger.debug(f'config: {x}') for x in self.__dict__.items()] def __repr__(self): return f'{self.prot}://{self.server}:{self.port} ({self.bind_user}) ({self.basedn})' diff --git a/automon/integrations/vds/tests/__init__.py b/automon/integrations/vds/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/tests/integrations/test_vds.py b/automon/integrations/vds/tests/test_vds.py similarity index 100% rename from automon/tests/integrations/test_vds.py rename to automon/integrations/vds/tests/test_vds.py diff --git a/automon/integrations/xsoar/__init__.py b/automon/integrations/xsoar/__init__.py new file mode 100644 index 00000000..6a965d12 --- /dev/null +++ b/automon/integrations/xsoar/__init__.py @@ -0,0 +1,2 @@ +from .client import XSOARClient +from .config import XSOARConfig diff --git a/automon/integrations/xsoar/client.py b/automon/integrations/xsoar/client.py new file mode 100644 index 00000000..c06c4aeb --- /dev/null +++ b/automon/integrations/xsoar/client.py @@ -0,0 +1,68 @@ +from automon.log import logging +from automon.integrations.requestsWrapper import RequestsClient + +from .config import XSOARConfig +from .endpoints import v1 + +logger = logging.getLogger(__name__) +logger.setLevel(level=logging.DEBUG) + + +class XSOARClient(object): + """XSOAR REST API client + + referenc: https://cortex-panw.stoplight.io/docs/cortex-xsoar-8/kjn2q21a7yrbm-get-started-with-cortex-xsoar-8-ap-is + """ + + def __init__( + self, + host: str = None, + api_key: str = None, + api_key_id: str = None, + config: XSOARConfig = None + ): + self.config = config or XSOARConfig(host=host, api_key=api_key, api_key_id=api_key_id) + self._requests = RequestsClient() + + async def is_ready(self): + if self.config.is_ready(): + return True + return False + + async def auth(self): + return + + @property + def errors(self): + return self._requests.errors + + async def get(self, endpoint: str): + logger.info(dict( + endpoint=f'{self.config.host}/{endpoint}' + )) + response = await self._requests.get(url=f'{self.config.host}/{endpoint}', headers=self.config.headers) + + if response: + return response + + logger.error(self.errors) + raise Exception(self.errors) + + async def post(self, endpoint: str): + logger.info(dict( + endpoint=f'{self.config.host}/{endpoint}' + )) + response = self._requests.post(url=f'{self.config.host}/{endpoint}', headers=self.config.headers) + + if response: + return response + + logger.error(self.errors) + raise Exception(self.errors) + + async def reports(self): + reports = await self.get(endpoint=v1.Reports.reports) + logger.info(dict( + reports=self._requests.content + )) + return reports diff --git a/automon/integrations/xsoar/config.py b/automon/integrations/xsoar/config.py new file mode 100644 index 00000000..57c6b1a7 --- /dev/null +++ b/automon/integrations/xsoar/config.py @@ -0,0 +1,41 @@ +from automon import environ +from automon.log import logging + +logger = logging.getLogger(__name__) +logger.setLevel(level=logging.DEBUG) + + +class XSOARConfig(object): + """XSOAR REST API client config""" + + def __init__( + self, + host: str = None, + api_key: str = None, + api_key_id: str = None + ): + self.host = host or environ('XSOAR_FQDN') + self.api_key = api_key or environ('XSOAR_API_KEY') + self.api_key_id = api_key_id or environ('XSOAR_API_KEY_ID') + + def is_ready(self) -> bool: + if not self.host: + logger.error(f'missing XSOAR_FQDN') + + if not self.api_key: + logger.error(f'missing XSOAR_API_KEY') + + if not self.api_key_id: + logger.error(f'missing XSOAR_API_KEY_ID') + + if self.host and self.api_key and self.api_key_id: + return True + return False + + @property + def headers(self): + return { + 'Authorization': f'{self.api_key}', + 'x-xdr-auth-id': f'{self.api_key_id}', + "Content-Type": "application/json" + } diff --git a/automon/integrations/xsoar/endpoints/__init__.py b/automon/integrations/xsoar/endpoints/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/xsoar/endpoints/v1.py b/automon/integrations/xsoar/endpoints/v1.py new file mode 100644 index 00000000..3ccb9458 --- /dev/null +++ b/automon/integrations/xsoar/endpoints/v1.py @@ -0,0 +1,9 @@ +class V1: + xsoar: str = 'xsoar' + public: str = f'{xsoar}/public' + v1: str = f'{public}/v1' + + +class Reports: + """xsoar/public/v1/reports""" + reports: str = f'{V1.v1}/reports' diff --git a/automon/integrations/xsoar/tests/__init__.py b/automon/integrations/xsoar/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/integrations/xsoar/tests/test_client_auth.py b/automon/integrations/xsoar/tests/test_client_auth.py new file mode 100644 index 00000000..520ed624 --- /dev/null +++ b/automon/integrations/xsoar/tests/test_client_auth.py @@ -0,0 +1,17 @@ +import asyncio +import unittest + +from automon.integrations.xsoar import XSOARClient + + +class MyTestCase(unittest.TestCase): + test = XSOARClient() + + if asyncio.run(test.is_ready()): + def test_auth(self): + result = asyncio.run(self.test.reports()) + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/integrations/xsoar/tests/test_config.py b/automon/integrations/xsoar/tests/test_config.py new file mode 100644 index 00000000..e496be05 --- /dev/null +++ b/automon/integrations/xsoar/tests/test_config.py @@ -0,0 +1,15 @@ +import unittest + +from automon.integrations.xsoar import XSOARConfig + + +class MyTestCase(unittest.TestCase): + test = XSOARConfig() + + if test.is_ready(): + def test_config(self): + self.assertTrue(self.test.is_ready()) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/log/__init__.py b/automon/log/__init__.py index 892f1bc2..c701e529 100755 --- a/automon/log/__init__.py +++ b/automon/log/__init__.py @@ -1 +1,30 @@ -from .logger import Logging, LogStream, INFO, ERROR, WARN, CRITICAL, DEBUG, logging +from automon.helpers.osWrapper import environ + +from .attributes import LogRecordAttribute +from .logger import Logging, LogStream, TEST, DEBUG, INFO, WARN, ERROR, CRITICAL, NOTSET +from .logger import logging +from .logger import log_secret + +log_format = f'{LogRecordAttribute(timestamp=True).levelname().name_and_lineno().funcName().message()}' +log_format_opentelemetry = environ('OTEL_PYTHON_LOG_FORMAT') or '\t'.join( + [ + f'%(asctime)s', + f'%(levelname)s', + f'[%(name)s]', + f'[%(filename)s:%(lineno)d]', + f'[trace_id=%(otelTraceID)s span_id=%(otelSpanID)s resource.service.name=%(otelServiceName)s trace_sampled=%(otelTraceSampled)s]', + f'%(funcName)s', + f'%(message)s'] +) + +try: + import opentelemetry + from opentelemetry.instrumentation.logging import LoggingInstrumentor + + # logging.basicConfig(level=DEBUG, format=log_format_opentelemetry) + LoggingInstrumentor().instrument( + log_level=logging.DEBUG, + set_logging_format=True, + logging_format=log_format_opentelemetry) +except: + logging.basicConfig(level=DEBUG, format=log_format) diff --git a/automon/log/attributes.py b/automon/log/attributes.py new file mode 100644 index 00000000..e4df5281 --- /dev/null +++ b/automon/log/attributes.py @@ -0,0 +1,133 @@ +class LogRecordAttribute(object): + + def __init__(self, timestamp: bool = False): + self._log_pattern = [] + + if timestamp: + self.asctime() + + def __repr__(self): + return f'\t'.join(self._log_pattern) + + def __str__(self): + return f'\t'.join(self._log_pattern) + + def ALL(self): + self._log_pattern.append('[asctime]') + self.asctime() + self._log_pattern.append('[created]') + self.created() + self._log_pattern.append('[filename]') + self.filename() + self._log_pattern.append('[funcName]') + self.funcName() + self._log_pattern.append('[levelname]') + self.levelname() + self._log_pattern.append('[levelno]') + self.levelno() + self._log_pattern.append('[lineno]') + self.lineno() + self._log_pattern.append('[message]') + self.message() + self._log_pattern.append('[module]') + self.module() + self._log_pattern.append('[msecs]') + self.msecs() + self._log_pattern.append('[name]') + self.name() + self._log_pattern.append('[pathname]') + self.pathname() + self._log_pattern.append('[process]') + self.process() + self._log_pattern.append('[processName]') + self.processName() + self._log_pattern.append('[relativeCreated]') + self.relativeCreated() + self._log_pattern.append('[thread]') + self.thread() + self._log_pattern.append('[threadName]') + self.threadName() + # self._log_pattern.append('[taskName]') + # self.taskName() + + return self + + def asctime(self): + self._log_pattern.append('%(asctime)s') + return self + + def created(self): + self._log_pattern.append('%(created)f') + return self + + def filename(self): + self._log_pattern.append('%(filename)s') + return self + + def funcName(self): + self._log_pattern.append('%(funcName)s') + return self + + def funcName_and_lineno(self): + self._log_pattern.append('%(funcName)s:%(lineno)s') + return self + + def levelname(self): + self._log_pattern.append('%(levelname)s') + return self + + def levelno(self): + self._log_pattern.append('%(levelno)s') + return self + + def lineno(self): + self._log_pattern.append('%(lineno)d') + return self + + def message(self): + self._log_pattern.append('%(message)s') + return self + + def module(self): + self._log_pattern.append('%(module)s') + return self + + def msecs(self): + self._log_pattern.append('%(msecs)d') + return self + + def name(self): + self._log_pattern.append('%(name)s') + return self + + def name_and_lineno(self): + self._log_pattern.append('%(name)s:%(lineno)s') + return self + + def pathname(self): + self._log_pattern.append('%(pathname)s') + return self + + def process(self): + self._log_pattern.append('%(process)d') + return self + + def processName(self): + self._log_pattern.append('%(processName)s') + return self + + def relativeCreated(self): + self._log_pattern.append('%(relativeCreated)d') + return self + + def thread(self): + self._log_pattern.append('%(thread)d') + return self + + def threadName(self): + self._log_pattern.append('%(threadName)s') + return self + + def taskName(self): + self._log_pattern.append('%(taskName)s') + return self diff --git a/automon/log/logger.py b/automon/log/logger.py index 1da92fca..db350126 100644 --- a/automon/log/logger.py +++ b/automon/log/logger.py @@ -1,9 +1,12 @@ import logging +import hashlib import traceback from automon.helpers import Dates from automon.helpers.markdown import Chat, Format +from .attributes import LogRecordAttribute + TEST = 5 DEBUG = logging.DEBUG INFO = logging.INFO @@ -12,7 +15,12 @@ CRITICAL = logging.CRITICAL NOTSET = logging.NOTSET -logging.getLogger('logger').setLevel(CRITICAL) +logger = logging.getLogger(__name__) +logger.setLevel(CRITICAL) + + +def log_secret(secret: str) -> str: + return len(hashlib.md5(str(secret).encode()).hexdigest()) * '*' class Callback(object): @@ -21,7 +29,6 @@ def __init__(self, callbacks: list): """Log to callbacks """ - self.log = Logging(name=Callback.__name__, level=Logging.DEBUG) self.callbacks = callbacks def call(self, type: str, msg: str, *args, **kwargs) -> True: @@ -100,8 +107,10 @@ def __init__(self, name: str = __name__, encoding: str = 'utf-8', filemode: str = 'a', log_stream: LogStream = False, + log_format: str = None, callbacks: list = None, - timestamp: bool = True, *args, **kwargs): + timestamp: bool = True, + *args, **kwargs): self.started = Dates.now() @@ -110,26 +119,10 @@ def __init__(self, name: str = __name__, self.callbacks = callbacks or [] - spacing = 4 - - # logging format - time = '%(asctime)s' - levelname = '%(levelname)s' - logger = '%(name)s' - filename = '%(filename)s' - pathname = '%(pathname)s' - func = '%(funcName)s' - line = '%(lineno)d' - module = '%(module)s' - message = '%(message)s' - - # self.log_format = f'{levelname}\t[{logger}]\t{message}' - self.log_format = f'{levelname}\t[{logger}]\t[{filename} {func}:L{line}]\t{message}' - # self.log_format = '%(levelname)s\t%(message)s\t%(name)s' - # self.log_format = '%(levelname)s\t%(name)s\t%(module)s\t%(message)s' - - if timestamp: - self.log_format = f'{time}\t{self.log_format}' + if log_format: + self.log_format = log_format + else: + self.log_format = f'{LogRecordAttribute(timestamp=timestamp).levelname().name().funcName().message()}' logging.basicConfig(level=level, format=self.log_format, **kwargs) diff --git a/automon/log/tests/__init__.py b/automon/log/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/automon/log/tests/test_log_secret.py b/automon/log/tests/test_log_secret.py new file mode 100644 index 00000000..11a61075 --- /dev/null +++ b/automon/log/tests/test_log_secret.py @@ -0,0 +1,12 @@ +import unittest + +from automon.log import log_secret + + +class MyTestCase(unittest.TestCase): + def test_something(self): + self.assertEqual(log_secret(secret='password'), '********************************') # add assertion here + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/log/tests/test_logger_builtin.py b/automon/log/tests/test_logger_builtin.py new file mode 100644 index 00000000..4749ab83 --- /dev/null +++ b/automon/log/tests/test_logger_builtin.py @@ -0,0 +1,28 @@ +import unittest + +from automon import log + +logger = log.logging.getLogger(__name__) +logger.setLevel(log.DEBUG) + + +class LoggingTest(unittest.TestCase): + + def test_error(self): + self.assertIsNone(logger.error('test')) + + def test_debug(self): + self.assertIsNone(logger.debug('test')) + + def test_info(self): + self.assertIsNone(logger.info('test')) + + def test_critical(self): + self.assertIsNone(logger.critical('test')) + + def test_warn(self): + self.assertIsNone(logger.warning('test')) + + +if __name__ == '__main__': + unittest.main() diff --git a/automon/tests/core/test_grok.py b/automon/tests/core/test_grok.py deleted file mode 100644 index 31e207bd..00000000 --- a/automon/tests/core/test_grok.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest - -from automon.helpers.grok import Grok, GrokLegacy - - -class GrokTest(unittest.TestCase): - - def test_Grok(self): - self.assertTrue(Grok()) - - -class GrokLegacyTest(unittest.TestCase): - - def test_GrokLegacy(self): - self.assertTrue(GrokLegacy()) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/core/test_logger.py b/automon/tests/core/test_logger.py deleted file mode 100644 index 3d6a444c..00000000 --- a/automon/tests/core/test_logger.py +++ /dev/null @@ -1,53 +0,0 @@ -import unittest - -from automon.log.logger import Logging, LogStream - - -class LoggingTest(unittest.TestCase): - log = Logging() - - def test_logger(self): - self.assertTrue(self.log) - - def test_error(self): - self.assertTrue(self.log.error('test')) - - def test_debug(self): - self.assertTrue(self.log.debug('test')) - - def test_info(self): - self.assertTrue(self.log.info('test')) - - def test_critical(self): - self.assertTrue(self.log.critical('test')) - - def test_warn(self): - self.assertTrue(self.log.warning('test')) - with self.assertRaises(Exception): - self.log.error(raise_exception=True) - - def test_now(self): - self.assertTrue(self.log.now()) - - def test_delta(self): - self.assertTrue(self.log.uptime()) - - -class LogStreamTest(unittest.TestCase): - stream = LogStream() - - def test_stream(self): - self.assertTrue(self.stream) - - def test_repr(self): - self.assertFalse(f'{self.stream}') - - def test_flush(self): - self.assertIsNone(self.stream.flush()) - - def test_write(self): - self.assertIsNone(self.stream.write('test')) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/core/test_sleeper.py b/automon/tests/core/test_sleeper.py deleted file mode 100644 index defc09fb..00000000 --- a/automon/tests/core/test_sleeper.py +++ /dev/null @@ -1,42 +0,0 @@ -import unittest - -from automon.helpers.sleeper import Sleeper - - -class SleeperTest(unittest.TestCase): - def test_Sleeper(self): - self.assertTrue(Sleeper) - self.assertTrue(Sleeper.seconds) - self.assertTrue(Sleeper.minute) - self.assertTrue(Sleeper.within_a_minute) - self.assertTrue(Sleeper.minutes) - self.assertTrue(Sleeper.hour) - self.assertTrue(Sleeper.hours) - self.assertTrue(Sleeper.day) - self.assertTrue(Sleeper.daily) - self.assertTrue(Sleeper.time_range) - - self.assertRaises(TypeError, Sleeper.seconds) - self.assertRaises(TypeError, Sleeper.minute) - self.assertRaises(TypeError, Sleeper.within_a_minute) - self.assertRaises(TypeError, Sleeper.minutes) - self.assertRaises(TypeError, Sleeper.hour) - self.assertRaises(TypeError, Sleeper.hours) - self.assertRaises(TypeError, Sleeper.day) - self.assertRaises(TypeError, Sleeper.daily) - self.assertRaises(TypeError, Sleeper.time_range) - self.assertRaises(TypeError, Sleeper.seconds, '1') - - self.assertIsNone(Sleeper.seconds(SleeperTest, 0)) - self.assertIsNone(Sleeper.minute(SleeperTest, 0)) - self.assertIsNone(Sleeper.within_a_minute(SleeperTest, 0)) - self.assertIsNone(Sleeper.minutes(SleeperTest, 0)) - self.assertIsNone(Sleeper.hour(SleeperTest, 0)) - self.assertIsNone(Sleeper.hours(SleeperTest, 0)) - self.assertIsNone(Sleeper.day(SleeperTest, 0)) - self.assertIsNone(Sleeper.daily(SleeperTest, 0)) - self.assertIsNone(Sleeper.time_range(SleeperTest, 0)) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/integrations/airport/test_airport.py b/automon/tests/integrations/airport/test_airport.py deleted file mode 100644 index a6967bde..00000000 --- a/automon/tests/integrations/airport/test_airport.py +++ /dev/null @@ -1,49 +0,0 @@ -import sys -import unittest - -from automon.integrations.mac.airport import Airport - - -class AirportTest(unittest.TestCase): - a = Airport() - - def test_run(self): - if self.a.isReady(): - self.assertTrue(self.a.run()) - - def test_scan(self): - if self.a.isReady(): - self.assertTrue(self.a.scan()) - self.assertTrue(self.a.scan(0)) - - def test_summary(self): - if self.a.isReady(): - self.assertTrue(self.a.scan_summary()) - self.assertTrue(self.a.scan_summary(0)) - - def test_xml(self): - if self.a.isReady(): - self.assertTrue(self.a.scan_xml()) - self.assertFalse(self.a.scan_xml(0)) - - def test_set_channel(self): - if self.a.isReady(): - pass - # self.assertTrue(self.a.set_channel(10)) - - def test_disassociate(self): - if self.a.isReady(): - pass - # self.assertTrue(self.a.disassociate()) - - def test_getinto(self): - if self.a.isReady(): - self.assertTrue(self.a.getinfo()) - - def test_create_psk(self): - if self.a.isReady(): - self.assertTrue(self.a.create_psk(ssid='AAAAAAAA', passphrase='CALVIN')) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/integrations/minio/test_minio_client_public.py b/automon/tests/integrations/minio/test_minio_client_public.py deleted file mode 100644 index 291c7426..00000000 --- a/automon/tests/integrations/minio/test_minio_client_public.py +++ /dev/null @@ -1,31 +0,0 @@ -import unittest -import hashlib - -from automon.integrations.minio import MinioClient -from automon.integrations.minio.bucket import Bucket - -MINIO_ENDPOINT = 'play.minio.io:9000' -MINIO_ACCESS_KEY = 'Q3AM3UQ867SPQQA43P2F' -MINIO_SECRET_KEY = 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG' - -c = MinioClient(endpoint=MINIO_ENDPOINT, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY) -bucket = hashlib.md5(f'{MINIO_ENDPOINT}'.encode()).hexdigest() - - -class ClientTest(unittest.TestCase): - - def test_list_buckets(self): - if c.isConnected(): - self.assertTrue(c.list_buckets()) - self.assertEqual(type(c.list_buckets()), list) - - def test_get_bucket(self): - if c.isConnected(): - test = c.make_bucket(bucket) - - self.assertTrue(c.get_bucket(test)) - self.assertTrue(type(c.get_bucket(test)), Bucket) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/integrations/minio/test_minio_config.py b/automon/tests/integrations/minio/test_minio_config.py deleted file mode 100644 index d0affaa3..00000000 --- a/automon/tests/integrations/minio/test_minio_config.py +++ /dev/null @@ -1,18 +0,0 @@ -import unittest - -from automon.integrations.minio.config import MinioConfig - -c = MinioConfig() - - -class ConfigTest(unittest.TestCase): - - def test_MinioConfig(self): - if c.isReady(): - self.assertTrue(MinioConfig().isReady()) - else: - self.assertFalse(MinioConfig().isReady()) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/integrations/sentryio/test_sentryio.py b/automon/tests/integrations/sentryio/test_sentryio.py deleted file mode 100644 index 2a03a2e4..00000000 --- a/automon/tests/integrations/sentryio/test_sentryio.py +++ /dev/null @@ -1,28 +0,0 @@ -import unittest - -from datetime import datetime - -from automon.integrations.sentryio import SentryClient -from automon.integrations.geoip import Geoip - -from automon.log import Logging - - -class SentryClientTest(unittest.TestCase): - def test_sentry(self): - s = SentryClient() - l = Logging() - - if s.isConnected(): - self.assertTrue(s.capture_exception(Exception(f'test capture_exception'))) - self.assertTrue(s.capture_message(f'test capture_message')) - # self.assertTrue(s.capture_event('test capture_event', 'warning')) - self.assertTrue(l.info(f'test log info')) - self.assertTrue(l.debug(f'test log debug')) - self.assertTrue(l.warning(f'test log warning')) - self.assertTrue(l.error(f'test log error')) - self.assertTrue(l.critical(f'test log critical')) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/integrations/sentryio/test_sentryio_callback.py b/automon/tests/integrations/sentryio/test_sentryio_callback.py deleted file mode 100644 index 519c9150..00000000 --- a/automon/tests/integrations/sentryio/test_sentryio_callback.py +++ /dev/null @@ -1,22 +0,0 @@ -import unittest - -from automon import Logging -from automon.integrations.sentryio.client import SentryClient - - -class CallbackTest(unittest.TestCase): - sentry = SentryClient() - log = Logging(name=__name__, level=Logging.DEBUG) - log.callbacks.append(sentry) - - def test_sentry(self): - self.assertTrue(self.log) - self.assertTrue(self.log.info('test')) - self.assertTrue(self.log.debug('test')) - self.assertTrue(self.log.error('test')) - self.assertTrue(self.log.warn('test')) - self.assertTrue(self.log.critical('test')) - - -if __name__ == '__main__': - unittest.main() diff --git a/automon/tests/integrations/test_selenium.py b/automon/tests/integrations/test_selenium.py deleted file mode 100644 index 810a38d3..00000000 --- a/automon/tests/integrations/test_selenium.py +++ /dev/null @@ -1,25 +0,0 @@ -import unittest - -from automon.integrations.selenium.browser import SeleniumBrowser -from automon.integrations.selenium.config import SeleniumConfig - - -class SeleniumTest(unittest.TestCase): - def test_SeleniumConfig(self): - self.assertTrue(SeleniumConfig()) - - def test_SeleniumBrowser(self): - b = SeleniumBrowser() - - if b.connected: - self.assertTrue(b) - self.assertFalse(b.get('http://555.555.555.555')) - self.assertTrue(b.get('http://google.com')) - self.assertTrue(b.get_screenshot_as_png()) - self.assertTrue(b.get_screenshot_as_base64()) - self.assertTrue(b.save_screenshot()) - self.assertTrue(b.save_screenshot(folder='./')) - - -if __name__ == '__main__': - unittest.main() diff --git a/docker/build.sh b/docker/build.sh index ab7ae75b..83f4cdfb 100644 --- a/docker/build.sh +++ b/docker/build.sh @@ -2,7 +2,7 @@ # image build script -cd $(dirname $0) && set -xe +cd "$(dirname "$0")" && set -xe DOCKERNAME=automon DOCKERTAG=$(git describe --tags) diff --git a/docker/images.sh b/docker/images.sh new file mode 100644 index 00000000..4986856b --- /dev/null +++ b/docker/images.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# get all the docker images used for local testing + +set -xe + +images=" +minio +elasticsearch +kibana +filebeat +metricbeat +neo4j +nmap +" + +for i in $images; do + docker pull $i + docker images | grep $i +done + +echo done + diff --git a/docker/install.sh b/docker/install.sh new file mode 100644 index 00000000..3cadba48 --- /dev/null +++ b/docker/install.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -xe + +# install chrome +wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb +sudo dpkg -i google-chrome-stable_current_amd64.deb +google-chrome --version + +# install chromedriver +cd /tmp/ +# https://googlechromelabs.github.io/chrome-for-testing/#stable +wget -q https://storage.googleapis.com/chrome-for-testing-public/127.0.6533.72/linux64/chromedriver-linux64.zip +unzip chromedriver-linux64.zip +sudo mv chromedriver-linux64/chromedriver /usr/bin/chromedriver +chromedriver --version diff --git a/docker/run.sh b/docker/run.sh index a489b4d3..19e27099 100644 --- a/docker/run.sh +++ b/docker/run.sh @@ -2,7 +2,7 @@ # image build script -cd $(dirname $0) && set -xe +cd "$(dirname "$0")" && set -xe DOCKERNAME=automon /bin/bash build.sh && docker run --rm -it $DOCKERNAME "$@" diff --git a/docker/test.sh b/docker/test.sh index 4cd39d9f..cf0b2b2a 100644 --- a/docker/test.sh +++ b/docker/test.sh @@ -2,7 +2,7 @@ # image build script -cd $(dirname $0) && set -xe +cd "$(dirname "$0")" && set -xe DOCKERNAME=automon /bin/bash build.sh && docker run --rm $DOCKERNAME test "$@" diff --git a/env-example.sh b/env-example.sh index 592f27eb..fb6ec32d 100644 --- a/env-example.sh +++ b/env-example.sh @@ -1,6 +1,11 @@ # Codecov CODECOV_TOKEN= +# Datadog +DD_SITE=https://us5.datadoghq.com +DD_API_KEY= +DD_APP_KEY= + # Elasticsearch ELASTICSEARCH_HOST=https://elastic-cloud.com:9200 ELASTICSEARCH_USER=elastic @@ -12,6 +17,11 @@ ELASTICSEARCH_API_KEY_SECRET= ELASTICSEARCH_PROXY= ELASTICSEARCH_REQUEST_TIMEOUT= +# Flask +FLASK_HOST=127.0.0.1 +FLASK_PORT=5000 +FLASK_DEBUG=true + # Google GOOGLE_OAUTH_WEB=False GOOGLE_OAUTH_DESKTOP=True @@ -24,6 +34,10 @@ GOOGLE_TOKEN_URI= GOOGLE_PROJECT_ID= GOOGLE_REFRESH_TOKEN= +# Instagram +INSTAGRAM_LOGIN= +INSTAGRAM_PASSWORD= + # Minio MINIO_ENDPOINT=play.minio.io:9000 MINIO_ACCESS_KEY=Q3AM3UQ867SPQQA43P2F @@ -51,6 +65,31 @@ OPENSTACK_INTERFACE=public OPENSTACK_IDENTITY_API_VERSION=3 SWIFTCLIENT_INSECURE=True +# OpenTelemetry +# https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html +OTEL_PYTHON_LOG_CORRELATION=true +OTEL_PYTHON_LOG_FORMAT='%(asctime)s\t%(levelname)s\t[%(name)s]\t[%(filename)s:%(lineno)d]\t[trace_id=%(otelTraceID)s span_id=%(otelSpanID)s resource.service.name=%(otelServiceName)s trace_sampled=%(otelTraceSampled)s]\t%(message)s' +OTEL_PYTHON_LOG_LEVEL=debug +# https://opentelemetry.io/docs/languages/python/automatic/ +OTEL_SERVICE_NAME=your-service-name +OTEL_TRACES_EXPORTER=console,otlp +OTEL_METRICS_EXPORTER=console +OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=0.0.0.0:4317 + +# Splunk SOAR +SPLUNK_SOAR_HOST= +SPLUNK_SOAR_AUTH_TOKEN= +SPLUNK_SOAR_USER= +SPLUNK_SOAR_PASSWORD= + +# Swimlane +SWIMLANE_HOST= +SWIMLANE_USERNAME= +SWIMLANE_PASSWORD= +SWIMLANE_APIKEY= +SWIMLANE_JWT_TOKEN= +SWIMLANE_APP_ID= + # Pypi PKG=automon PYPI=automonisaur @@ -62,6 +101,9 @@ TWINE_PASSWORD= # Selenium SELENIUM_CHROMEDRIVER_PATH= SELENIUM_OPT= +SELENIUM_COOKIES_AUTOSAVE=False +SELENIUM_COOKIES_BASE64= +SELENIUM_COOKIES_FILE= # Sentry.io SENTRY_DSN= @@ -85,16 +127,11 @@ SLACK_TEST_CHANNEL= SHODAN_API= # Splunk -SPLUNK_HOST= -SPLUNK_PORT= +SPLUNK_HOST=splunkcloud.com +SPLUNK_PORT=8089 SPLUNK_USERNAME= SPLUNK_PASSWORD= -# Splunk SOAR -SPLUNK_SOAR_HOST= -SPLUNK_SOAR_AUTH_TOKEN= -SPLUNK_SOAR_USER= -SPLUNK_SOAR_PASSWORD= # Swift buckets SWIFT_SOURCE_BUCKET= @@ -107,3 +144,11 @@ LDAP_PORT= VDS_BIND_USER=cn=automon,ou=people,dc=automon,dc=com VDS_BASE_DN=dc=automon,dc=com VDS_PASSWORD= + +# Wdutil +WDUTIL_PASSWORD= + +# XSOAR +XSOAR_FQDN= +XSOAR_API_KEY= +XSOAR_API_KEY_ID= diff --git a/install-local.cmd b/install-local.cmd new file mode 100644 index 00000000..9724586f --- /dev/null +++ b/install-local.cmd @@ -0,0 +1,2 @@ +python -m pip uninstall automonisaur -y +python -m pip install -e ./ diff --git a/install-local.sh b/install-local.sh new file mode 100755 index 00000000..a55edfdc --- /dev/null +++ b/install-local.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# install library + +cd "$(dirname $0)"; set -xe + +python3 -m pip uninstall automonisaur -y +python3 -m pip install -e ./ diff --git a/requirements.sh b/install-requirements.sh old mode 100755 new mode 100644 similarity index 83% rename from requirements.sh rename to install-requirements.sh index 2e3dc8d4..4b3ebd3e --- a/requirements.sh +++ b/install-requirements.sh @@ -1,4 +1,9 @@ +#!/bin/bash + +cd $(dirname $0); set -xe + python3 -m pip install --upgrade pip python3 -m pip install --upgrade -r requirements.txt cat requirements.txt | grep -v "^$" | grep -v "#" | sort -h | sed 's/$/"/' | sed 's/^/"/' | sed 's/$/,/' | sed "s/\"/'/g" + diff --git a/install.sh b/install.sh index 0aad317e..5af4c76a 100755 --- a/install.sh +++ b/install.sh @@ -4,4 +4,5 @@ set -xe -python3 -m pip install --upgrade git+https://github.com/TheShellLand/automonisaur.git#egg +python3 -m pip uninstall automonisaur -y +python3 -m pip install --upgrade git+https://github.com/TheShellLand/automonisaur.git@master#egg diff --git a/requirements.txt b/requirements.txt index 062d64fc..f64881d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,11 +5,15 @@ # base requests>=2.26.0 xmltodict>=0.12.0 +deprecation>=2.1.0 # airport beautifulsoup4>=4.10.0 lxml>=4.7.1 +# datadog +ddtrace>=2.7.6 + # datascience pandas>=1.1.5 jupyterlab>=3.1.9 @@ -34,27 +38,41 @@ google-auth-oauthlib>=0.5.0 minio>=7.1.0 # neo4j -neo4j-driver>=4.3.4 +neo4j>=4.4.9 # openstack swift python-keystoneclient>=4.2.0 python-swiftclient>=3.12.0 +# opentelemetry +opentelemetry-distro==0.43b0 +opentelemetry-exporter-otlp==1.22.0 +opentelemetry-instrumentation-logging==0.43b0 +# workaround +git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@0.43b0hotfix#subdirectory=instrumentation/opentelemetry-instrumentation-aiohttp-server + # splunk soar pytz>=2021.1 # selenium selenium>=3.141.0 +beautifulsoup4>=4.10.0 # sentry.io sentry-sdk>=1.5.1 +# scrapy +Scrapy>=2.6.0 + # slack slackclient>=2.9.3 # splunk splunk-sdk>=1.6.16 +# swimlane +#swimlane>=10.14.0 + # unit testing pytest>=6.2.4 pytest-cov>=2.12.1 diff --git a/setup.py b/setup.py index 4f829359..38113039 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="automonisaur", - version="0.2.17", + version="0.5.9", author="naisanza", author_email="naisanza@gmail.com", description="Core libraries for automonisaur", @@ -19,6 +19,6 @@ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], - python_requires='>=3.7', + python_requires='>=3.10', install_requires=[] ) diff --git a/test.sh b/test.sh index faa7ad6f..fef7de9a 100755 --- a/test.sh +++ b/test.sh @@ -4,7 +4,7 @@ cd $(dirname $0) && set -e -if [ "$@" == "" ]; then +if [ ! -z "$@" ]; then set -x python3 -m pytest automon else diff --git a/upload.sh b/upload.sh index 3c7b0d43..f2151189 100755 --- a/upload.sh +++ b/upload.sh @@ -15,8 +15,8 @@ if [ "$@" == '--local' ]; then python3 -m pip install -U twine python3 setup.py sdist bdist_wheel twine check dist/* - python3 -m twine upload --repository $PYPI --repository-url $TWINE_REPOSITORY \ - -u $TWINE_USERNAME -p $TWINE_PASSWORD --non-interactive --skip-existing dist/* + python3 -m twine upload --repository "$PYPI" --repository-url "$TWINE_REPOSITORY" \ + -u "$TWINE_USERNAME" -p "$TWINE_PASSWORD" --non-interactive --skip-existing dist/* python3 setup.py clean --all elif [ "$@" == '--docker' ]; then set -x @@ -27,6 +27,6 @@ elif [ "$@" == '--github' ]; then python3 -m pip install -U twine python3 setup.py sdist bdist_wheel twine check dist/* - python3 -m twine upload --repository $PYPI --repository-url $TWINE_REPOSITORY \ - -u $TWINE_USERNAME -p $TWINE_PASSWORD --non-interactive --skip-existing dist/* + python3 -m twine upload --repository "$PYPI" --repository-url "$TWINE_REPOSITORY" \ + -u "$TWINE_USERNAME" -p "$TWINE_PASSWORD" --non-interactive --skip-existing dist/* fi